qbs-src-2.3.1/0000755000175100001770000000000014616416776012456 5ustar runnerdockerqbs-src-2.3.1/.github/0000755000175100001770000000000014616416776014016 5ustar runnerdockerqbs-src-2.3.1/.github/workflows/0000755000175100001770000000000014616416776016053 5ustar runnerdockerqbs-src-2.3.1/.github/workflows/main.yml0000644000175100001770000010307514616416776017530 0ustar runnerdockername: Build and test Qbs on: push: paths-ignore: - 'changelogs/**' - 'doc/**' jobs: build-linux: name: ${{ matrix.config.name }} runs-on: ubuntu-latest timeout-minutes: 60 strategy: fail-fast: false matrix: config: - { name: 'Build on Linux (Jammy, gcc)', image: 'jammy-qt6', options: 'modules.cpp.compilerWrapper:ccache modules.qbs.debugInformation:true modules.qbsbuildconfig.enableBundledQt:true products.qbs_archive.targetName:qbs-linux-jammy-${{ github.run_id }} products.qbs_archive.includeTests:true', script: './scripts/build-qbs-with-qbs.sh', cacheid: 'gcc-qt6-jammy', suffix: 'linux-jammy', } env: BUILD_OPTIONS: ${{ matrix.config.options }} WITH_TESTS: 0 steps: - uses: actions/checkout@v1 - name: Create .ccache dir run: mkdir -p ~/.ccache - name: ccache cache files uses: actions/cache@v4 with: path: ~/.ccache key: ${{ runner.os }}-${{ matrix.config.cacheid }}-ccache - name: Pull the Docker Image run: docker-compose pull ${{ matrix.config.image }} - name: Print ccache stats run: docker-compose run ${{ matrix.config.image }} ccache -s - name: Build Qbs run: docker-compose run ${{ matrix.config.image }} ${{ matrix.config.script }} - name: Print ccache stats run: docker-compose run ${{ matrix.config.image }} ccache -s - name: Upload artifacts uses: 'actions/upload-artifact@v4' with: name: qbs-${{ matrix.config.suffix }}-${{ github.run_id }}.tar.gz path: release/qbs-${{ matrix.config.suffix }}-${{ github.run_id }}.tar.gz build-linux-extra: name: ${{ matrix.config.name }} runs-on: ubuntu-latest timeout-minutes: 90 strategy: fail-fast: false matrix: config: - { name: 'Build on Linux (clang_tidy)', script: './scripts/run-analyzer.sh', image: 'jammy-qt6', options: 'profile:qt-clang_64 modules.cpp.compilerWrapper:ccache', cacheid: 'clang', } - { name: 'Build on Linux (CMake)', script: './scripts/build-qbs-with-cmake.sh', image: 'jammy-qt6', cacheid: 'cmake', } - { name: 'Build on Linux (gcc, ASAN)', image: 'jammy-qt6', script: './scripts/build-qbs-with-qbs.sh', options: 'modules.cpp.compilerWrapper:ccache modules.qbsbuildconfig.enableAddressSanitizer:true modules.qbs.debugInformation:true modules.qbsbuildconfig.enableBundledQt:true', cacheid: 'gcc-asan', } - { name: 'Build on Linux (gcc, UBSAN)', image: 'jammy-qt6', script: './scripts/build-qbs-with-qbs.sh', options: 'modules.cpp.compilerWrapper:ccache modules.qbsbuildconfig.enableUbSanitizer:true modules.qbs.debugInformation:true modules.qbsbuildconfig.enableBundledQt:true', cacheid: 'gcc-ubsan', } - { name: 'Build on Linux (gcc, Qt 5.15)', image: 'jammy-qt5', script: './scripts/build-qbs-with-qbs.sh', options: 'modules.cpp.compilerWrapper:ccache modules.qbs.debugInformation:true modules.qbsbuildconfig.enableBundledQt:true', cacheid: 'gcc-qt5', } env: BUILD_OPTIONS: ${{ matrix.config.options }} QTEST_FUNCTION_TIMEOUT: 9000000 steps: - uses: actions/checkout@v1 - name: Create .ccache dir run: mkdir -p ~/.ccache - name: ccache cache files uses: actions/cache@v4 with: path: ~/.ccache key: ${{ runner.os }}-${{ matrix.config.cacheid }}-ccache - name: Pull the Docker Image run: docker-compose pull ${{ matrix.config.image }} - name: Print ccache stats run: docker-compose run ${{ matrix.config.image }} ccache -s - name: Build Qbs run: docker-compose run ${{ matrix.config.image }} ${{ matrix.config.script }} - name: Print ccache stats run: docker-compose run ${{ matrix.config.image }} ccache -s clang-format: name: Check Style runs-on: macos-13 timeout-minutes: 60 strategy: fail-fast: false steps: - uses: actions/checkout@v1 - name: Update PATH run: echo "$(brew --prefix llvm@15)/bin" >> ${GITHUB_PATH} - name: Run clang-format run: | git diff -U0 --no-color --relative HEAD^ | $(brew --prefix llvm@15)/share/clang/clang-format-diff.py -i -p1 -regex ".*\.(cxx|cpp|hpp|h)" -v - name: Check diff run: git diff --exit-code build-macos: name: Build on macOS runs-on: macos-12 timeout-minutes: 60 env: BUILD_OPTIONS: | modules.cpp.compilerWrapper:ccache modules.qbs.debugInformation:true modules.qbsbuildconfig.enableAddressSanitizer:false modules.qbsbuildconfig.enableBundledQt:true products.qbs_archive.targetName:qbs-macos-${{ github.run_id }} products.qbs_archive.includeTests:true WITH_TESTS: 0 steps: - uses: actions/checkout@v1 - name: Create .ccache dir run: mkdir -p ~/.ccache - name: ccache cache files uses: actions/cache@v4 with: path: ~/.ccache key: ${{ runner.os }}-ccache - name: Install required packages run: | brew install ccache p7zip python3 -m pip install --user beautifulsoup4 lxml - name: Install Qt uses: ./.github/actions/download-qt with: toolchain: clang_64 - name: Install Qt Creator uses: ./.github/actions/download-qtc - name: Setup Qbs run: | qbs setup-toolchains --detect qbs setup-qt --detect qbs config profiles.qt.baseProfile xcode_13_2_1-macosx-x86_64 qbs config defaultProfile qt qbs config --list - name: Print ccache stats run: ccache -s - name: Build Qbs run: scripts/build-qbs-with-qbs.sh - name: Print ccache stats run: ccache -s - name: Upload artifacts uses: 'actions/upload-artifact@v4' with: name: qbs-macos-${{ github.run_id }}.tar.gz path: release/qbs-macos-${{ github.run_id }}.tar.gz build-windows: name: Build on Windows runs-on: windows-2022 timeout-minutes: 60 env: BUILD_OPTIONS: | modules.cpp.compilerWrapper:clcache modules.qbs.debugInformation:true modules.qbsbuildconfig.enableAddressSanitizer:false modules.qbsbuildconfig.enableBundledQt:true products.qbs_archive.targetName:qbs-windows-${{ github.run_id }} products.qbs_archive.includeTests:true, WITH_TESTS: 0 QT_ASSUME_STDERR_HAS_CONSOLE: 1 steps: - uses: actions/checkout@v1 - name: clcache cache files uses: actions/cache@v4 with: path: ~/clcache key: ${{ runner.os }}-msvc-clcache - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: 3.8 - name: Install required packages run: | python -m pip install --upgrade pip pip install beautifulsoup4 lxml pip install git+https://github.com/frerich/clcache.git@cae73d8255d78db8ba11e23c51fd2c9a89e7475b - name: Install Qt uses: ./.github/actions/download-qt with: toolchain: win64_msvc2019_64 - name: Install Qt Creator uses: ./.github/actions/download-qtc - name: Setup Qbs run: | qbs setup-toolchains --detect qbs setup-qt $(which qmake).exe qt qbs config profiles.qt.baseProfile MSVC2022-1-x86_x64 qbs config defaultProfile qt qbs config --list shell: bash - name: Print clcache stats run: clcache -s - name: Build Qbs run: scripts/build-qbs-with-qbs.sh shell: bash - name: Print clcache stats run: clcache -s - name: Upload artifacts uses: 'actions/upload-artifact@v4' with: name: qbs-windows-${{ github.run_id }}.zip path: release/qbs-windows-${{ github.run_id }}.zip build-windows-mingw: name: Build on Windows (MinGW) runs-on: windows-2022 timeout-minutes: 60 env: BUILD_OPTIONS: | modules.cpp.compilerWrapper:ccache modules.qbsbuildconfig.enableAddressSanitizer:false modules.qbsbuildconfig.enableBundledQt:true products.qbs_archive.targetName:qbs-windows-mingw-${{ github.run_id }} products.qbs_archive.includeTests:true, QT_ASSUME_STDERR_HAS_CONSOLE: 1 WITH_TESTS: 0 CCACHE_DIR: ${{ github.workspace }}\ccache steps: - uses: actions/checkout@v1 - name: ccache cache files uses: actions/cache@v4 with: path: ${{ github.workspace }}/ccache key: ${{ runner.os }}-mingw-ccache - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: 3.8 - name: Install required packages run: | choco install ccache python -m pip install --upgrade pip pip install beautifulsoup4 lxml - name: Install Qt uses: ./.github/actions/download-qt with: toolchain: win64_mingw - name: Install Qt Creator uses: ./.github/actions/download-qtc - name: Install MinGW uses: ./.github/actions/download-mingw - name: Setup Qbs run: | qbs setup-toolchains --type mingw $(which g++).exe mingw-qt qbs setup-qt $(which qmake).exe qt qbs config profiles.qt.baseProfile mingw-qt qbs config defaultProfile qt qbs config --list shell: bash - name: Print ccache stats run: ccache -s - name: Build Qbs run: scripts/build-qbs-with-qbs.sh shell: bash - name: Print ccache stats run: ccache -s - name: Upload artifacts uses: 'actions/upload-artifact@v4' with: name: qbs-windows-mingw-${{ github.run_id }}.zip path: release/qbs-windows-mingw-${{ github.run_id }}.zip test-linux: name: ${{ matrix.config.name }} runs-on: ubuntu-latest timeout-minutes: 90 needs: build-linux strategy: fail-fast: false matrix: config: - { name: 'Run Linux tests (gcc, Qt 6)', image: 'jammy-qt6', suffix: 'linux-jammy', profile: 'qt-gcc_64', script: './scripts/test-qbs.sh', } - { name: 'Run Linux tests (clang, Qt 6)', image: 'jammy-qt6', suffix: 'linux-jammy', profile: 'qt-clang_64', script: './scripts/test-qbs.sh', } - { name: 'Run Linux tests (gcc, Qt 5)', image: 'jammy-qt5', suffix: 'linux-jammy', profile: 'qt-gcc_64', script: './scripts/test-qt.sh', } - { name: 'Run Linux tests (gcc, Qt 6.5 static)', image: 'jammy-qt6-static', suffix: 'linux-jammy', profile: 'qt-gcc_64', script: './scripts/test-qt.sh', } - { name: 'Run Android tests (Qt 5.15)', image: 'jammy-android-515', suffix: 'linux-jammy', profile: '', script: './scripts/test-qt-for-android.sh', } - { name: 'Run Android tests (Qt 6.2)', image: 'jammy-android-62', suffix: 'linux-jammy', profile: '', script: './scripts/test-qt-for-android.sh', } - { name: 'Run Android tests (Qt 6.5)', image: 'jammy-android-65', suffix: 'linux-jammy', profile: '', script: './scripts/test-qt-for-android.sh', } - { name: 'Run Android tests (ndk r19c)', image: 'jammy-android-ndk-r19c', suffix: 'linux-jammy', profile: '', script: './scripts/test-for-android.sh', } - { name: 'Run Android tests (ndk r21e)', image: 'jammy-android-ndk-r21e', suffix: 'linux-jammy', profile: '', script: './scripts/test-for-android.sh', } - { name: 'Run Android tests (ndk r23)', image: 'jammy-android-ndk-r23', suffix: 'linux-jammy', profile: '', script: './scripts/test-for-android.sh', } - { name: 'Run Linux tests (Qt 4.8.7)', image: 'jammy-qt4', suffix: 'linux-jammy', profile: '', script: './scripts/test-qt4.sh', } env: QBS_TEST_SOURCE_ROOT: 'tests' QBS_AUTOTEST_PROFILE: ${{ matrix.config.profile }} QTEST_FUNCTION_TIMEOUT: 9000000 steps: - uses: actions/checkout@v1 - name: Download artifact uses: actions/download-artifact@v4 with: name: qbs-${{ matrix.config.suffix }}-${{ github.run_id }}.tar.gz path: ./ - name: Unpack artifact run: mkdir -p release/install-root/ && tar xzf qbs-${{ matrix.config.suffix }}-${{ github.run_id }}.tar.gz -C release/install-root/ - name: Pull the Docker Image run: docker-compose pull ${{ matrix.config.image }} - name: Run tests run: docker-compose run ${{ matrix.config.image }} ${{ matrix.config.script }} release/install-root/usr/local/bin test-baremetal: name: Run Baremetal tests (Linux) runs-on: ubuntu-latest timeout-minutes: 60 needs: build-linux env: QBS_TEST_SOURCE_ROOT: 'tests' steps: - uses: actions/checkout@v1 - name: Download artifact uses: actions/download-artifact@v4 with: name: qbs-linux-jammy-${{ github.run_id }}.tar.gz path: ./ - name: Unpack artifact run: mkdir -p release/install-root/ && tar xzf qbs-linux-jammy-${{ github.run_id }}.tar.gz -C release/install-root/ - name: Pull the Docker Image run: docker-compose pull jammy-baremetal - name: arm-none-eabi-gcc-10_3 run: QBS_AUTOTEST_PROFILE=arm-none-eabi-gcc-10_3 docker-compose run jammy-baremetal scripts/test-baremetal.sh release/install-root/usr/local/bin - name: avr-gcc-5_4 run: QBS_AUTOTEST_PROFILE=avr-gcc-5_4 docker-compose run jammy-baremetal scripts/test-baremetal.sh release/install-root/usr/local/bin - name: msp430-gcc-4_6 run: QBS_AUTOTEST_PROFILE=msp430-gcc-4_6 docker-compose run jammy-baremetal scripts/test-baremetal.sh release/install-root/usr/local/bin - name: riscv64-unknown-elf-gcc-10_2 run: QBS_AUTOTEST_PROFILE=riscv64-unknown-elf-gcc-10_2 docker-compose run jammy-baremetal scripts/test-baremetal.sh release/install-root/usr/local/bin - name: sdcc-4_0_0-hcs8 run: QBS_AUTOTEST_PROFILE=sdcc-4_0_0-hcs8 docker-compose run jammy-baremetal scripts/test-baremetal.sh release/install-root/usr/local/bin - name: sdcc-4_0_0-mcs51 run: QBS_AUTOTEST_PROFILE=sdcc-4_0_0-mcs51 docker-compose run jammy-baremetal scripts/test-baremetal.sh release/install-root/usr/local/bin - name: sdcc-4_0_0-stm8 run: QBS_AUTOTEST_PROFILE=sdcc-4_0_0-stm8 docker-compose run jammy-baremetal scripts/test-baremetal.sh release/install-root/usr/local/bin - name: xtensa-lx106-elf-gcc-10_3 run: QBS_AUTOTEST_PROFILE=xtensa-lx106-elf-gcc-10_3 docker-compose run jammy-baremetal scripts/test-baremetal.sh release/install-root/usr/local/bin test-baremetal-windows: name: Run Baremetal tests (Windows) runs-on: [self-hosted, windows, x64] timeout-minutes: 30 needs: build-windows # baremetal VM is down, disable the workflow for now if: 'false' env: QBS_TEST_SOURCE_ROOT: 'tests' QT_ASSUME_STDERR_HAS_CONSOLE: 1 QTEST_FUNCTION_TIMEOUT: 9000000 steps: - uses: actions/checkout@v1 - name: Download artifact uses: actions/download-artifact@v4 with: name: qbs-windows-${{ github.run_id }}.zip path: ./ - name: Unpack artifact run: mkdir -p release/install-root/ && unzip qbs-windows-${{ github.run_id }}.zip -d release/install-root/ shell: bash - name: keil-9_53_0-mcs51 run: QBS_AUTOTEST_PROFILE=keil-9_53_0-mcs51 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: keil-5_60_0-mcs251 run: QBS_AUTOTEST_PROFILE=keil-5_60_0-mcs251 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: keil-7_57_0-c166 run: QBS_AUTOTEST_PROFILE=keil-7_57_0-c166 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: keil-5_30_0-arm run: QBS_AUTOTEST_PROFILE=keil-5_30_0-arm scripts/test-baremetal.sh release/install-root/bin shell: bash - name: keil-llvm-5_30_0-arm run: QBS_AUTOTEST_PROFILE=keil-5_30_0-arm scripts/test-baremetal.sh release/install-root/bin shell: bash - name: iar-8_50_5-arm run: QBS_AUTOTEST_PROFILE=iar-8_50_5-arm scripts/test-baremetal.sh release/install-root/bin shell: bash - name: iar-10_30_1-mcs51 run: QBS_AUTOTEST_PROFILE=iar-10_30_1-mcs51 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: iar-7_30_1-avr run: QBS_AUTOTEST_PROFILE=iar-7_30_1-avr scripts/test-baremetal.sh release/install-root/bin shell: bash - name: iar-4_30_2-avr32 run: QBS_AUTOTEST_PROFILE=iar-4_30_2-avr32 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: iar-7_20_1-msp430 run: QBS_AUTOTEST_PROFILE=iar-7_20_1-msp430 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: iar-3_11_2_234-stm8 run: QBS_AUTOTEST_PROFILE=iar-3_11_2_234-stm8 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: iar-4_20_1-rx run: QBS_AUTOTEST_PROFILE=iar-4_20_1-rx scripts/test-baremetal.sh release/install-root/bin shell: bash - name: iar-4_20_1-rl78 run: QBS_AUTOTEST_PROFILE=iar-4_20_1-rl78 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: iar-5_10_1-v850 run: QBS_AUTOTEST_PROFILE=iar-5_10_1-v850 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: iar-2_21_1-rh850 run: QBS_AUTOTEST_PROFILE=iar-2_21_1-rh850 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: iar-2_30_1-sh run: QBS_AUTOTEST_PROFILE=iar-2_30_1-sh scripts/test-baremetal.sh release/install-root/bin shell: bash - name: iar-4_81_1-78k run: QBS_AUTOTEST_PROFILE=iar-4_81_1-78k scripts/test-baremetal.sh release/install-root/bin shell: bash - name: iar-4_10_1-hcs12 run: QBS_AUTOTEST_PROFILE=iar-4_10_1-hcs12 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: iar-1_40_2-r32c run: QBS_AUTOTEST_PROFILE=iar-1_40_2-r32c scripts/test-baremetal.sh release/install-root/bin shell: bash - name: iar-3_71_1-m16c run: QBS_AUTOTEST_PROFILE=iar-3_71_1-m16c scripts/test-baremetal.sh release/install-root/bin shell: bash - name: iar-1_21_1-riscv run: QBS_AUTOTEST_PROFILE=iar-1_21_1-riscv scripts/test-baremetal.sh release/install-root/bin shell: bash - name: iar-3_30_1-cr16 run: QBS_AUTOTEST_PROFILE=iar-3_30_1-cr16 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: sdcc-4_0_0-mcs51 run: QBS_AUTOTEST_PROFILE=sdcc-4_0_0-mcs51 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: sdcc-4_0_0-stm8 run: QBS_AUTOTEST_PROFILE=sdcc-4_0_0-stm8 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: sdcc-4_0_0-hcs8 run: QBS_AUTOTEST_PROFILE=sdcc-4_0_0-hcs8 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: avr-gcc-4_6_2 run: QBS_AUTOTEST_PROFILE=avr-gcc-4_6_2 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: avr32-gcc-4_4_3 run: QBS_AUTOTEST_PROFILE=avr32-gcc-4_4_3 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: m32c-elf-gcc-4_7_3 run: QBS_AUTOTEST_PROFILE=m32c-elf-gcc-4_7_3 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: m32r-elf-gcc-4_8_0 run: QBS_AUTOTEST_PROFILE=m32r-elf-gcc-4_8_0 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: m68k-elf-gcc-4_8_0 run: QBS_AUTOTEST_PROFILE=m68k-elf-gcc-4_8_0 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: msp430-elf-gcc-8_3_1 run: QBS_AUTOTEST_PROFILE=msp430-elf-gcc-8_3_1 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: riscv64-unknown-elf-gcc-10_1_0 run: QBS_AUTOTEST_PROFILE=riscv64-unknown-elf-gcc-10_1_0 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: v850-elf-gcc-4_7_2 run: QBS_AUTOTEST_PROFILE=v850-elf-gcc-4_7_2 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: arm-none-eabi-gcc-9_3_1 run: QBS_AUTOTEST_PROFILE=arm-none-eabi-gcc-9_3_1 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: xtensa-lx106-elf-gcc-5_2_0 run: QBS_AUTOTEST_PROFILE=xtensa-lx106-elf-gcc-5_2_0 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: xtensa-esp32-elf-gcc-8_4_0 run: QBS_AUTOTEST_PROFILE=xtensa-esp32-elf-gcc-8_4_0 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: rl78-elf-gcc-4_9_2_202002-GNURL78 run: QBS_AUTOTEST_PROFILE=rl78-elf-gcc-4_9_2_202002-GNURL78 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: rx-elf-gcc-8_3_0_202004-GNURX run: QBS_AUTOTEST_PROFILE=rx-elf-gcc-8_3_0_202004-GNURX scripts/test-baremetal.sh release/install-root/bin shell: bash - name: cosmic-4_3_11-arm run: QBS_AUTOTEST_PROFILE=cosmic-4_3_11-arm scripts/test-baremetal.sh release/install-root/bin shell: bash - name: cosmic-4_5_2-stm8 run: QBS_AUTOTEST_PROFILE=cosmic-4_5_2-stm8 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: cosmic-4_6_3-hcs8 run: QBS_AUTOTEST_PROFILE=cosmic-4_6_3-hcs8 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: cosmic-4_8_11-hcs12 run: QBS_AUTOTEST_PROFILE=cosmic-4_8_11-hcs12 scripts/test-baremetal.sh release/install-root/bin shell: bash - name: cosmic-4_1_0-m68k run: QBS_AUTOTEST_PROFILE=cosmic-4_1_0-m68k scripts/test-baremetal.sh release/install-root/bin shell: bash test-macos: name: ${{ matrix.config.name }} runs-on: ${{ matrix.config.runner }} timeout-minutes: 60 needs: build-macos env: QTEST_FUNCTION_TIMEOUT: 9000000 QBS_AUTOTEST_PROFILE: 'qt' QBS_TEST_SOURCE_ROOT: 'tests' QBS_EXTRA_GRPC_LIBS: 'absl_cord,absl_cordz_handle,absl_cordz_info,absl_synchronization,grpc,gpr' strategy: fail-fast: false matrix: config: - { name: 'Run macOS tests (Xcode 15.1)', runner: 'macos-13', target: 'desktop', toolchain: 'clang_64', xcodeVersion: '15.1', testProfile: 'xcode_15_1-macosx-x86_64', qtVersion: '6.5.0', script: './scripts/test-qbs.sh', } - { name: 'Run macOS tests (Xcode 15.1, Qt 5.15)', runner: 'macos-13', target: 'desktop', toolchain: 'clang_64', xcodeVersion: '15.1', testProfile: 'xcode_15_1-macosx-x86_64', qtVersion: '5.15.2', script: './scripts/test-qt.sh', } - { name: 'Run iOS tests (Xcode 15.1)', runner: 'macos-13', target: 'ios', toolchain: 'ios', xcodeVersion: '15.1', testProfile: 'xcode_15_1-iphoneos-arm64', qtVersion: '6.5.0', script: './scripts/test-qbs.sh', } - { name: 'Run iOS-sim tests (Xcode 15.1)', runner: 'macos-13', target: 'ios', toolchain: 'ios', xcodeVersion: '15.1', testProfile: 'xcode_15_1-iphonesimulator-x86_64', qtVersion: '6.5.0', script: './scripts/test-qbs.sh', } - { name: 'Run macOS tests (Xcode 14.3.1)', runner: 'macos-13', target: 'desktop', toolchain: 'clang_64', xcodeVersion: '14.3.1', testProfile: 'xcode_14_3_1-macosx-x86_64', qtVersion: '6.5.0', script: './scripts/test-qbs.sh', } - { name: 'Run macOS tests (Xcode 14.2)', runner: 'macos-13', target: 'desktop', toolchain: 'clang_64', xcodeVersion: '14.2', testProfile: 'xcode_14_2-macosx-x86_64', qtVersion: '6.5.0', script: './scripts/test-qbs.sh', } - { name: 'Run macOS tests (Xcode-less)', runner: 'macos-13', target: 'desktop', toolchain: 'clang_64', xcodeVersion: '', testProfile: 'xcode_13_4_1-macosx-x86_64', qtVersion: '6.5.0', script: './scripts/test-qbs.sh', } steps: - uses: actions/checkout@v1 - name: Download artifact uses: actions/download-artifact@v4 with: name: qbs-macos-${{ github.run_id }}.tar.gz path: ./ - name: Unpack artifact run: mkdir -p release/install-root/ && tar xzf qbs-macos-${{ github.run_id }}.tar.gz -C release/install-root/ - name: Update PATH run: echo "./release/install-root/usr/local/bin" >> $GITHUB_PATH - name: Install required packages run: brew install capnp ccache grpc icoutils makensis protobuf p7zip - name: Install Host Qt if: matrix.config.toolchain == 'ios' uses: ./.github/actions/download-qt with: target: 'desktop' toolchain: 'clang_64' version: ${{ matrix.config.qtVersion }} - name: Install Qt uses: ./.github/actions/download-qt with: target: ${{ matrix.config.target }} toolchain: ${{ matrix.config.toolchain }} version: ${{ matrix.config.qtVersion }} - name: Select Xcode run: sudo xcode-select --switch /Applications/Xcode_${{ matrix.config.xcodeVersion }}.app if: matrix.config.xcodeVersion != '' - name: Setup Qbs run: | qbs setup-toolchains --detect qbs setup-qt $(which qmake) qt qbs config profiles.qt.baseProfile ${{ matrix.config.testProfile }} qbs config defaultProfile qt qbs config --list if: matrix.config.xcodeVersion != '' - name: Setup Qbs (Xcode-less) run: | qbs setup-toolchains /usr/bin/clang++ ${{ matrix.config.testProfile }} qbs setup-qt $(which qmake) qt qbs config profiles.qt.baseProfile ${{ matrix.config.testProfile }} qbs config defaultProfile qt qbs config --list if: matrix.config.xcodeVersion == '' - name: Run Tests run: | sudo chmod g+w /cores ulimit -c unlimited ${{ matrix.config.script }} ./release/install-root/usr/local/bin - name: Coredump on failure if: ${{ failure() }} run: | for f in $(find /cores -maxdepth 1 -name 'core.*' -print); do lldb --core $f --batch --one-line "bt all" done; test-windows: name: ${{ matrix.config.name }} runs-on: windows-2022 timeout-minutes: 60 needs: build-windows strategy: fail-fast: false matrix: config: - { name: 'Run Windows tests (MSVC 2022)', target: 'desktop', toolchain: 'win64_msvc2019_64', testProfile: 'MSVC2022-x64', qtVersion: '6.5.0', script: './scripts/test-qbs.sh', } - { name: 'Run Windows tests (MSVC 2022, Qt 5.15)', target: 'desktop', toolchain: 'win64_msvc2019_64', testProfile: 'MSVC2022-x64', qtVersion: '5.15.2', script: './scripts/test-qt.sh', } - { name: 'Run Windows tests (clang-cl)', target: 'desktop', toolchain: 'win64_msvc2019_64', testProfile: 'clang-cl-x86_64', qtVersion: '6.5.0', script: './scripts/test-qbs.sh', } - { name: 'Run Windows tests (MinGW)', target: 'desktop', toolchain: 'win64_mingw', testProfile: 'mingw-qt', qtVersion: '6.5.0', script: './scripts/test-qbs.sh', } env: QTEST_FUNCTION_TIMEOUT: 9000000 QBS_AUTOTEST_PROFILE: 'qt' QBS_TEST_SOURCE_ROOT: 'tests' QT_ASSUME_STDERR_HAS_CONSOLE: 1 steps: - uses: actions/checkout@v1 - name: Download artifact uses: actions/download-artifact@v4 with: name: qbs-windows-${{ github.run_id }}.zip path: ./ - name: Unpack artifact run: | mkdir -p release/install-root cd release/install-root 7z x ../../qbs-windows-${{ github.run_id }}.zip shell: bash - name: Update PATH run: echo "./release/install-root/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - name: Install required packages run: choco install -y pkgconfiglite --download-checksum=6004df17818f5a6dbf19cb335cc92702 continue-on-error: true # pkgconfiglite installation is flaky - name: Install Qt uses: ./.github/actions/download-qt with: toolchain: ${{ matrix.config.toolchain }} version: ${{ matrix.config.qtVersion }} - name: Install MinGW uses: ./.github/actions/download-mingw - name: Setup Qbs run: | qbs setup-toolchains --detect qbs setup-toolchains --type mingw $(which g++).exe mingw-qt qbs setup-qt $(which qmake).exe qt qbs config profiles.qt.baseProfile ${{ matrix.config.testProfile }} qbs config defaultProfile qt qbs config --list shell: bash - name: Setup self-signed certificate run: | New-SelfSignedCertificate -DnsName qbs@community.test -Type CodeSigning -CertStoreLocation cert:\CurrentUser\My Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath qbs-code-signing.crt Import-Certificate -FilePath .\qbs-code-signing.crt -CertStoreLocation Cert:\CurrentUser\TrustedPublisher shell: powershell - name: Run Tests run: ${{ matrix.config.script }} ./release/install-root/bin shell: bash test-windows-extra: name: ${{ matrix.config.name }} runs-on: windows-latest timeout-minutes: 60 needs: build-windows strategy: fail-fast: false matrix: config: - { name: 'Run Windows tests (OpenWatcom DOS 32 bit)', testProfile: 'watcom-2_0_0-dos-x86', script: './scripts/test-baremetal.sh', } - { name: 'Run Windows tests (OpenWatcom DOS 16 bit)', testProfile: 'watcom-2_0_0-dos-x86_16', script: './scripts/test-baremetal.sh', } - { name: 'Run Windows tests (OpenWatcom OS/2 32 bit)', testProfile: 'watcom-2_0_0-os2-x86', script: './scripts/test-baremetal.sh', } - { name: 'Run Windows tests (OpenWatcom OS/2 16 bit)', testProfile: 'watcom-2_0_0-os2-x86_16', script: './scripts/test-baremetal.sh', } - { name: 'Run Windows tests (OpenWatcom Windows 32 bit)', testProfile: 'watcom-2_0_0-windows-x86', script: './scripts/test-baremetal.sh', } - { name: 'Run Windows tests (OpenWatcom Windows 16 bit)', testProfile: 'watcom-2_0_0-windows-x86_16', script: './scripts/test-baremetal.sh', } - { name: 'Run Windows tests (DigitalMars DOS 16 bit)', testProfile: 'dmc-8_57_0-dos-x86_16', script: './scripts/test-baremetal.sh', } - { name: 'Run Windows tests (DigitalMars Windows 32 bit)', testProfile: 'dmc-8_57_0-windows-x86', script: './scripts/test-baremetal.sh', } - { name: 'Run Windows tests (DigitalMars Windows 16 bit)', testProfile: 'dmc-8_57_0-windows-x86_16', script: './scripts/test-baremetal.sh', } env: QTEST_FUNCTION_TIMEOUT: 9000000 QBS_AUTOTEST_PROFILE: 'extra' QBS_TEST_SOURCE_ROOT: 'tests' QT_ASSUME_STDERR_HAS_CONSOLE: 1 steps: - uses: actions/checkout@v1 - name: Download artifact uses: actions/download-artifact@v4 with: name: qbs-windows-${{ github.run_id }}.zip path: ./ - name: Unpack artifact run: | mkdir -p release/install-root cd release/install-root 7z x ../../qbs-windows-${{ github.run_id }}.zip shell: bash - name: Update PATH run: echo "./release/install-root/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - name: Install OpenWatcom uses: ./.github/actions/download-ow - name: Install DigitalMars uses: ./.github/actions/download-dm - name: Setup Qbs run: | qbs setup-toolchains --detect qbs config profiles.extra.baseProfile ${{ matrix.config.testProfile }} qbs config defaultProfile extra qbs config --list shell: bash - name: Run Tests run: ${{ matrix.config.script }} ./release/install-root/bin shell: bash qbs-src-2.3.1/.github/workflows/docs.yml0000644000175100001770000000163614616416776017534 0ustar runnerdockername: Build and Qbs docs on: push: paths: - 'doc/**' - 'examples/**' - 'scripts/build-qbs-doc.sh' - 'VERSION' jobs: build-docs: name: ${{ matrix.config.name }} runs-on: ubuntu-latest timeout-minutes: 60 strategy: fail-fast: false matrix: config: - { name: 'Build Qbs Docs', options: '', script: './scripts/build-qbs-doc.sh' } env: BUILD_OPTIONS: ${{ matrix.config.options }} WITH_TESTS: 0 steps: - uses: actions/checkout@v1 - name: Pull the Docker Image run: docker-compose pull jammy - name: Build Qbs Docs run: docker-compose run jammy ${{ matrix.config.script }} - name: Upload artifacts uses: 'actions/upload-artifact@v2' with: name: qbs-docs-${{ github.run_id }} path: documentation/install-root/usr/local/share/doc/qbs/ qbs-src-2.3.1/.github/workflows/release.yml0000644000175100001770000001736614616416776020233 0ustar runnerdockername: Build release packages on: push: branches-ignore: - 'gerrit/*' tags: - 'v*' jobs: build-linux: name: ${{ matrix.config.name }} runs-on: ubuntu-latest timeout-minutes: 60 strategy: fail-fast: false matrix: config: - { name: 'Build on Linux (gcc)', options: 'qbs.installPrefix:"" modules.cpp.compilerWrapper:ccache modules.qbsbuildconfig.enableAddressSanitizer:false project.withTests:false modules.qbsbuildconfig.enableUnitTests:false modules.qbsbuildconfig.enableBundledQt:true products.qbs_archive.targetName:qbs-linux-${{ github.run_id }}', script: './scripts/build-qbs-with-qbs.sh', cacheid: 'gcc-release', } env: BUILD_OPTIONS: ${{ matrix.config.options }} WITH_TESTS: 0 steps: - uses: actions/checkout@v1 - name: Create .ccache dir run: mkdir -p ~/.ccache - name: test run: echo ${{ github.ref }} - name: ccache cache files uses: actions/cache@v4 with: path: ~/.ccache key: ${{ runner.os }}-${{ matrix.config.cacheid }}-ccache - name: Pull the Docker Image run: docker-compose pull jammy-qt6 - name: Print ccache stats run: docker-compose run jammy-qt6 ccache -s - name: Build Qbs run: docker-compose run jammy-qt6 ${{ matrix.config.script }} - name: Print ccache stats run: docker-compose run jammy-qt6 ccache -s - name: Get archive name id: get-archive-name run: echo "archive-name=$(git describe)" >> $GITHUB_OUTPUT - name: Upload artifacts uses: 'actions/upload-artifact@v4' with: name: qbs-linux-${{ github.run_id }}.tar.gz path: release/qbs-linux-${{ github.run_id }}.tar.gz build-macos: name: Build on macOS runs-on: macos-12 timeout-minutes: 60 env: BUILD_OPTIONS: | qbs.installPrefix:"" modules.cpp.compilerWrapper:ccache project.withTests:false modules.qbsbuildconfig.enableUnitTests:false modules.qbsbuildconfig.enableAddressSanitizer:false modules.qbsbuildconfig.enableBundledQt:true products.qbs_archive.targetName:qbs-macos-${{ github.run_id }} WITH_TESTS: 0 steps: - uses: actions/checkout@v1 - name: Create .ccache dir run: mkdir -p ~/.ccache - name: ccache cache files uses: actions/cache@v4 with: path: ~/.ccache key: ${{ runner.os }}-release-ccache - name: Install required packages run: | brew install ccache p7zip python3 -m pip install --user beautifulsoup4 lxml - name: Install Qt uses: ./.github/actions/download-qt with: toolchain: clang_64 - name: Install Qt Creator uses: ./.github/actions/download-qtc - name: Setup Qbs run: | qbs setup-toolchains --detect qbs setup-qt --detect qbs config profiles.qt.baseProfile xcode_13_2_1-macosx-x86_64 qbs config defaultProfile qt qbs config --list - name: Print ccache stats run: ccache -s - name: Build Qbs run: scripts/build-qbs-with-qbs.sh - name: Print ccache stats run: ccache -s - name: Upload artifacts uses: 'actions/upload-artifact@v4' with: name: qbs-macos-${{ github.run_id }}.tar.gz path: release/qbs-macos-${{ github.run_id }}.tar.gz build-windows-with-docker: name: Build on Windows (Docker) runs-on: windows-2019 timeout-minutes: 60 env: WITH_TESTS: 0 QT_ASSUME_STDERR_HAS_CONSOLE: 1 CLCACHE_DIR: C:\.ccache steps: - uses: actions/checkout@v1 - name: Create .ccache dir run: mkdir -p ~/.ccache shell: bash - name: clcache cache files uses: actions/cache@v4 with: path: ~/.ccache key: ${{ runner.os }}-release-msvc-docker-clcache - name: Pull the Windows Image run: docker-compose pull windows - name: Print clcache stats run: docker-compose run --rm windows clcache -s - name: Build Qbs run: > docker-compose run --rm windows qbs build -p dist qbs.buildVariant:release modules.cpp.compilerWrapper:clcache project.withTests:false modules.qbsbuildconfig.enableBundledQt:true modules.qbsbuildconfig.enableUnitTests:false modules.cpp.treatWarningsAsErrors:true project.withDocumentation:true config:release profile:qt64 - name: Print clcache stats run: docker-compose run --rm windows clcache -s - name: Get archive name id: get-archive-name run: echo "archive-name=$(git describe)" >> $GITHUB_OUTPUT - name: Upload artifacts uses: 'actions/upload-artifact@v4' with: name: qbs-windows-${{ github.run_id }} path: | release/qbs.*.nupkg release/qbs-windows-*.zip create-archives: name: Create Archives runs-on: ubuntu-latest needs: [build-linux, build-windows-with-docker] steps: - uses: actions/checkout@v1 with: submodules: true - name: Get version name id: get-version-name run: echo "version-name=$(cat VERSION)" >> $GITHUB_OUTPUT - name: Create directories run: | mkdir release mkdir tmp - name: Copy sources run: rsync -av --exclude='.git/' --exclude='tmp/' . ./tmp/qbs-src-${{ steps.get-version-name.outputs.version-name }} - name: Zip Archive run: | cd tmp/ zip -r ../release/qbs-src-${{ steps.get-version-name.outputs.version-name }}.zip qbs-src-${{ steps.get-version-name.outputs.version-name }} - name: Tarball Archive run: | cd tmp/ tar czf ../release/qbs-src-${{ steps.get-version-name.outputs.version-name }}.tar.gz qbs-src-${{ steps.get-version-name.outputs.version-name }} - name: Download Linux artifacts uses: actions/download-artifact@v4 with: name: qbs-linux-${{ github.run_id }}.tar.gz path: ./tmp - name: Repack Linux artifact run: | mkdir -p tmp/qbs-linux-x86_64-${{ steps.get-version-name.outputs.version-name }} tar xzf ./tmp/qbs-linux-${{ github.run_id }}.tar.gz -C tmp/qbs-linux-x86_64-${{ steps.get-version-name.outputs.version-name }} cd tmp/ tar czf ../release/qbs-linux-x86_64-${{ steps.get-version-name.outputs.version-name }}.tar.gz qbs-linux-x86_64-${{ steps.get-version-name.outputs.version-name }} - name: Download Windows artifacts uses: actions/download-artifact@v4 with: name: qbs-windows-${{ github.run_id }} path: ./tmp/release - name: Copy Windows artifacts run: | cp ./tmp/release/qbs.*.nupkg ./release cp ./tmp/release/qbs-windows-x86_64-*.zip ./release - name: Copy changelog run: cp changelogs/changes-${{ steps.get-version-name.outputs.version-name }}.md release || echo "changelog not found" - name: Generate checksums run: | cd release/ find . -type f -printf '%f\n' | grep -v .txt | xargs md5sum > md5sums.txt find . -type f -printf '%f\n' | grep -v .txt | xargs sha256sum > sha256sums.txt - name: Get archive name id: get-archive-name run: echo "archive-name=$(git describe)" >> $GITHUB_OUTPUT - name: Upload artifacts uses: 'actions/upload-artifact@v4' with: name: qbs-release-${{ steps.get-archive-name.outputs.archive-name }} path: | release/qbs-src-*.zip release/qbs-src-*.tar.gz release/qbs-linux-*.tar.gz release/qbs.*.nupkg release/qbs-windows-x86_64-*.zip release/changes-*.md release/md5sums.txt release/sha256sums.txt qbs-src-2.3.1/.github/actions/0000755000175100001770000000000014616416776015456 5ustar runnerdockerqbs-src-2.3.1/.github/actions/download-dm/0000755000175100001770000000000014616416776017663 5ustar runnerdockerqbs-src-2.3.1/.github/actions/download-dm/action.yml0000644000175100001770000000065414616416776021670 0ustar runnerdockername: 'Download DigitalMars' description: 'Downloads DigitalMars' inputs: version: description: 'DigitalMars version' required: false default: '8.57' runs: using: "composite" steps: - name: Install DigitalMars run: | DM_DIR=$(./scripts/install-dm.sh -d $HOME/dm --version ${{ inputs.version }}) (cygpath -w ${DM_DIR} 2>/dev/null || echo ${DM_DIR}) >> ${GITHUB_PATH} shell: bash qbs-src-2.3.1/.github/actions/download-qtc/0000755000175100001770000000000014616416776020052 5ustar runnerdockerqbs-src-2.3.1/.github/actions/download-qtc/action.yml0000644000175100001770000000066714616416776022063 0ustar runnerdockername: 'Download Qt Creator' description: 'Downloads Qt Creator' inputs: version: description: 'Qt Creator version' required: false default: '11.0.3' runs: using: "composite" steps: - name: Install Qt Creator run: | QTC_DIR=$(./scripts/install-qt.sh -d $HOME/Qt --version ${{ inputs.version }} qtcreator) (cygpath -w ${QTC_DIR} 2>/dev/null || echo ${QTC_DIR}) >> ${GITHUB_PATH} shell: bash qbs-src-2.3.1/.github/actions/download-qt/0000755000175100001770000000000014616416776017707 5ustar runnerdockerqbs-src-2.3.1/.github/actions/download-qt/action.yml0000644000175100001770000000124514616416776021711 0ustar runnerdockername: 'Download Qt' description: 'Downloads Qt' inputs: version: description: 'Qt version' required: false default: '6.6.0' target: description: 'Qt target (desktop, ios, android)' required: false default: 'desktop' toolchain: description: 'Qt toolchain' required: true runs: using: "composite" steps: - name: Install Qt run: | QT_DIR=$(./scripts/install-qt.sh -d $HOME/Qt --version ${{ inputs.version }} --target ${{ inputs.target }} --toolchain ${{ inputs.toolchain }} qtbase qtdeclarative qttools qtscxml qt5compat) (cygpath -w ${QTC_DIR} 2>/dev/null || echo ${QT_DIR}) >> ${GITHUB_PATH} shell: bash qbs-src-2.3.1/.github/actions/download-ow/0000755000175100001770000000000014616416776017710 5ustar runnerdockerqbs-src-2.3.1/.github/actions/download-ow/action.yml0000644000175100001770000000065314616416776021714 0ustar runnerdockername: 'Download OpenWatcom' description: 'Downloads OpenWatcom' inputs: version: description: 'OpenWatcom version' required: false default: '2.0' runs: using: "composite" steps: - name: Install OpenWatcom run: | OW_DIR=$(./scripts/install-ow.sh -d $HOME/watcom --version ${{ inputs.version }}) (cygpath -w ${OW_DIR} 2>/dev/null || echo ${OW_DIR}) >> ${GITHUB_PATH} shell: bash qbs-src-2.3.1/.github/actions/download-mingw/0000755000175100001770000000000014616416776020404 5ustar runnerdockerqbs-src-2.3.1/.github/actions/download-mingw/action.yml0000644000175100001770000000104114616416776022400 0ustar runnerdockername: 'Download MinGW' description: 'Downloads MinGW' inputs: version: description: 'MinGW version' required: false default: '9.0.0' toolchain: description: 'Toolchain' required: false default: 'win64_mingw' runs: using: "composite" steps: - name: Install MinGW run: | MINGW_DIR=$(./scripts/install-qt.sh -d $HOME/Qt --version ${{ inputs.version }} --toolchain ${{ inputs.toolchain }} mingw) (cygpath -w ${MINGW_DIR} 2>/dev/null || echo ${MINGW_DIR}) >> ${GITHUB_PATH} shell: bash qbs-src-2.3.1/examples/0000755000175100001770000000000014616416776014274 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/0000755000175100001770000000000014616416776016230 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/cy7c68013a/0000755000175100001770000000000014616416776017640 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/cy7c68013a/nes-gamepads/0000755000175100001770000000000014616416776022204 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/cy7c68013a/nes-gamepads/defs.h0000644000175100001770000001135314616416776023301 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef FX2_DEFS_H #define FX2_DEFS_H #ifdef __cplusplus extern "C" { #endif enum bit_mask { bmBIT0 = 0x01, bmBIT1 = 0x02, bmBIT2 = 0x04, bmBIT3 = 0x08, bmBIT4 = 0x10, bmBIT5 = 0x20, bmBIT6 = 0x40, bmBIT7 = 0x80 }; enum boolean { FALSE = 0, TRUE }; typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned long DWORD; typedef unsigned char BOOL; #ifndef NULL #define NULL (void *)0 #endif #if defined(__ICC8051__) #include # define NOP() __no_operation() # define XDATA __xdata # define CODE __code # define AT __at # define SFR __sfr # define SBIT __bit # define XDATA_REG(reg_name, reg_addr) \ XDATA __no_init volatile BYTE reg_name @ reg_addr; # define SPEC_FUN_REG(reg_name, reg_addr) \ SFR __no_init volatile BYTE reg_name @ reg_addr; # define SPEC_FUN_REG_BIT(bit_name, reg_addr, bit_num) \ SBIT __no_init volatile _Bool bit_name @ (reg_addr+bit_num); # define _PPTOSTR_(x) #x # define _PPARAM_(address) _PPTOSTR_(vector=address * 8 + 3) # define INTERRUPT(isr_name, vector) \ _Pragma(_PPARAM_(vector)) __interrupt void isr_name(void) #elif defined (__C51__) # include # define NOP() _nop_() # define XDATA xdata # define CODE code # define AT _at_ # define SFR sfr # define SBIT sbit # if defined(DEFINE_REGS) # define XDATA_REG(reg_name, reg_addr) \ XDATA volatile BYTE reg_name AT reg_addr; # else # define XDATA_REG(reg_name, reg_addr) \ extern XDATA volatile BYTE reg_name; # endif # define SPEC_FUN_REG(reg_name, reg_addr) \ SFR reg_name = reg_addr; # define SPEC_FUN_REG_BIT(bit_name, reg_addr, bit_num) \ sbit bit_name = reg_addr + bit_num; # define INTERRUPT(isr_name, num) \ void isr_name (void) interrupt num #elif defined (__SDCC_mcs51) # define NOP() __asm nop __endasm # define XDATA __xdata # define CODE __code # define AT __at # define SFR __sfr # define SBIT __sbit # define XDATA_REG(reg_name, reg_addr) \ XDATA AT reg_addr volatile BYTE reg_name; # define SPEC_FUN_REG(reg_name, reg_addr) \ SFR AT reg_addr reg_name; # define SPEC_FUN_REG_BIT(bit_name, reg_addr, bit_num) \ SBIT AT reg_addr + bit_num bit_name; # define INTERRUPT(isr_name, num) \ void isr_name (void) __interrupt num #else #error "Unsupported toolchain" #endif #ifdef __cplusplus } #endif #endif // FX2_DEFS_H qbs-src-2.3.1/examples/baremetal/cy7c68013a/nes-gamepads/usb.h0000644000175100001770000001567214616416776023161 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef FX2_USB_H #define FX2_USB_H #include "regs.h" #ifdef __cplusplus extern "C" { #endif enum usb_setup_bmreq_bits { bmSETUP_DIR = bmBIT7, bmSETUP_TYPE = bmBIT5 | bmBIT6, bmSETUP_RECIPIENT = bmBIT0 | bmBIT1 | bmBIT2 | bmBIT3 | bmBIT4 }; // Setup request direction. enum usb_setup_req_direction_bits { bmSETUP_TO_DEVICE = 0, // From host to sevice direction. bmSETUP_TO_HOST = bmBIT7 // From device to host direction. }; // Setup request type. enum usb_setup_req_type_bits { bmSETUP_STANDARD = 0, // Standard request. bmSETUP_CLASS = bmBIT5, // Class request. bmSETUP_VENDOR = bmBIT6, // Vendor request. }; // Setup request recipient. enum usb_setup_req_recipient_bits { bmSETUP_DEVICE = 0, // Device recipient. bmSETUP_IFACE = bmBIT0, // Interface recipient. bmSETUP_EP = bmBIT1, // End point recipient. bmSETUP_OTHER = bmBIT0 | bmBIT1 // Other recipient. }; // Setup request code. enum usb_setup_req_code { USB_SETUP_GET_STATUS = 0x00, // Get status code. USB_SETUP_CLEAR_FEATURE = 0x01, // Clear feature code. USB_SETUP_RESERVED1 = 0x02, // Reserved code. USB_SETUP_SET_FEATURE = 0x03, // Set feature code. USB_SETUP_RESERVED2 = 0x04, // Reserved code. USB_SETUP_SET_ADDRESS = 0x05, // Set address code. USB_SETUP_GET_DESCRIPTOR = 0x06, // Get descriptor code. USB_SETUP_SET_DESCRIPTOR = 0x07, // Set descriptor code. USB_SETUP_GET_CONFIGURATION = 0x08, // Get configuration code. USB_SETUP_SET_CONFIGURATION = 0x09, // Set configuration code. USB_SETUP_GET_INTERFACE = 0x0A, // Get interface code. USB_SETUP_SET_INTERFACE = 0x0B, // Set interface code. USB_SETUP_SYNC_FRAME = 0x0C, // Sync frame code. USB_SETUP_ANCHOR_LOAD = 0xA0 // Anchor load code. }; // Standard status responses. enum usb_setup_status_code { USB_STATUS_SELF_POWERED = 0x01, USB_STATUS_REMOTE_WAKEUP = 0x02 }; // Standard feature selectors. enum usb_setup_feature_selector { USB_FEATURE_STALL = 0x00, USB_FEATURE_REMOTE_WAKEUP = 0x01, USB_FEATRUE_TEST_MODE = 0x02 }; // Get descriptor codes. enum usb_setup_get_descriptor_code { USB_DESC_DEVICE = 0x01, // Device descriptor. USB_DESC_CONF = 0x02, // Configuration descriptor. USB_DESC_STRING = 0x03, // String descriptor. USB_DESC_INTERFACE = 0x04, // Interface descriptor. USB_DESC_ENDPOINT = 0x05, // End point descriptor. USB_DESC_DEVICE_QUAL = 0x06, // Device qualifier descriptor. USB_DESC_OTHER_SPEED_CONF = 0x07, // Other configuration descriptor. USB_DESC_INTERFACE_POWER = 0x08, // Interface power descriptor. USB_DESC_OTG = 0x09, // OTG descriptor. USB_DESC_DEBUG = 0x0A, // Debug descriptor. USB_DESC_INTERFACE_ASSOC = 0x0B, // Interface association descriptor. USB_DESC_HID = 0x21, // Get HID descriptor. USB_DESC_REPORT = 0x22 // Get report descriptor. }; // End point configuration (EP1INCFG/EP1OUTCFG/EP2/EP4/EP6/EP8). enum epcfg_bits { bmEP_VALID = bmBIT7, bmEP_DIR = bmBIT6, // Only for EP2-EP8! bmEP_TYPE = bmBIT5 | bmBIT4, bmEP_SIZE = bmBIT3, // Only for EP2-EP8! bmEP_BUF = bmBIT1 | bmBIT0 // Only for EP2-EP8! }; enum ep_valid_bits { bmEP_DISABLE = 0, bmEP_ENABLE = bmBIT7 }; // Only for EP2-EP8! enum ep_direction { bmEP_OUT = 0, bmEP_IN = bmBIT6 }; enum ep_type { bmEP_ISO = bmBIT4, // Only for EP2-EP8! bmEP_BULK = bmBIT5, // Default value. bmEP_INT = bmBIT4 | bmBIT5 }; // Only for EP2-EP8! enum ep_size { EP_512 = 0, EP_1024 = bmBIT3 // Except EP4/EP8. }; // Only for EP2-EP8! enum ep_buf { EP_QUAD = 0, EP_DOUBLE = bmBIT1, // Default value. EP_TRIPLE = bmBIT0 | bmBIT1 }; struct ep0_buf { BYTE *dat; WORD len; }; #define usb_disconnect() (USBCS |= bmDISCON) #define usb_connect() (USBCS &= ~bmDISCON) #define usb_is_high_speed() \ (USBCS & bmHSM) #define usp_ep_reset_toggle(ep) \ TOGCTL = (((ep & 0x80) >> 3) + (ep & 0x0F)); \ TOGCTL |= bmRESETTOGGLE #define usb_ep0_stall() \ EP0CS |= bmEPSTALL #define usb_ep0_hsnack() \ EP0CS |= bmHSNAK #define usb_word_msb_get(word) \ (BYTE)(((WORD)(word) >> 8) & 0xFF) #define usb_word_lsb_get(word) \ (BYTE)((WORD)(word) & 0xFF) #define usb_word_swap(x) \ ((((WORD)((x) & 0x00FF)) << 8) | \ (((WORD)((x) & 0xFF00)) >> 8)) #define usb_dword_swap(x) \ ((((DWORD)((x) & 0x000000FFul)) << 24) | \ (((DWORD)((x) & 0x0000FF00ul)) << 8) | \ (((DWORD)((x) & 0x00FF0000ul)) >> 8) | \ (((DWORD)((x) & 0xFF000000ul)) >> 24)) void usb_init(void); void usb_task(void); #ifdef __cplusplus } #endif #endif // FX2_USB_H qbs-src-2.3.1/examples/baremetal/cy7c68013a/nes-gamepads/README.md0000644000175100001770000000311014616416776023456 0ustar runnerdockerThis example demonstrates how to build a bare-metal application using different 8051 toolchains. It is designed for the target board based on Cypress FX2 cy7c68013a chip. It is possible to use the official development kit from the Cypress: * https://www.cypress.com/documentation/development-kitsboards/cy3684-ez-usb-fx2lp-development-kit but, a better solution is to buy the China's analogs or replacements, e.g. on Aliexpress. It implements a USB HID device that connects two 8-buttons NES (Dendy) gamepads to a PC. The gamepads are connected to the cy7c68013a chip as follows: 1. CLK - it is an output clock signal which generates by chip from the port A, pin 0 (PA0). This pin should be connected to the CLK inputs for both gamepads. 2. DATA1 - it is an input data signal which comes to chip on the the port A, pin 2 (PA2). This pin should be connected to the DATA output from the gamepad #1. 3. DATA2 - it is an input data signal which comes to chip on the the port A, pin 4 (PA4). This pin should be connected to the DATA output from the gamepad #2. 4. LATCH - it is an output clock signal which generates by chip from the port A, pin 6 (PA6). This pin should be connected to the LATCH inputs for both gamepads. Actual schematic and pinouts depends on an used gamepads (with 7, 9 or other pins connectors) and a development boards. Also, do not forget to connect the +3.3V and GND wires to the gamepads. Then it is possible to play 8-bit NES games using various PC simulators. The following toolchains are supported: * IAR Embedded Workbench * SDCC * KEIL C51 qbs-src-2.3.1/examples/baremetal/cy7c68013a/nes-gamepads/gpio.h0000644000175100001770000000512014616416776023311 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef FX2_GPIO_H #define FX2_GPIO_H #ifdef __cplusplus extern "C" { #endif void gpio_init(void); void gpio_task(void); #ifdef __cplusplus } #endif #endif // FX2_GPIO_H qbs-src-2.3.1/examples/baremetal/cy7c68013a/nes-gamepads/hid.c0000644000175100001770000000625614616416776023125 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "hid.h" #include "core.h" #include "usb.h" void hid_init(void) { // Disable end point 1 output. EP1OUTCFG = bmEP_DISABLE; sync_delay(); // Enable end point 1 input in interrupt mode. EP1INCFG = bmEP_ENABLE | bmEP_INT; sync_delay(); // Disable end point 2. EP2CFG = bmEP_DISABLE; sync_delay(); // Disable end point 4. EP4CFG = bmEP_DISABLE; sync_delay(); // Disable end point 6. EP6CFG = bmEP_DISABLE; sync_delay(); // Disable end point 8. EP8CFG = bmEP_DISABLE; sync_delay(); // Reset all FIFOs. FIFORESET = bmNAKALL; // NAK all host transfers. sync_delay(); FIFORESET = 0x00; sync_delay(); // Enable dual autopointer(s). AUTOPTRSETUP |= bmAPTREN; sync_delay(); } qbs-src-2.3.1/examples/baremetal/cy7c68013a/nes-gamepads/core.h0000644000175100001770000001373214616416776023313 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef FX2_HW_H #define FX2_HW_H #include "defs.h" #ifdef __cplusplus extern "C" { #endif // Allowed range: 5000 - 48000. #ifndef CORE_IFREQ # define CORE_IFREQ 48000 // IFCLK frequency in kHz. #endif // Allowed values: 48000, 24000, or 12000. #ifndef CORE_CFREQ # define CORE_CFREQ 48000 // CLKOUT frequency in kHz. #endif #if (CORE_IFREQ < 5000) # error "CORE_IFREQ too small! Valid range: 5000 - 48000." #endif #if (CORE_IFREQ > 48000) # error "CORE_IFREQ too large! Valid range: 5000 - 48000." #endif #if (CORE_CFREQ != 48000) # if (CORE_CFREQ != 24000) # if (CORE_CFREQ != 12000) # error "CORE_CFREQ invalid! Valid values: 48000, 24000, 12000." # endif # endif #endif // Calculate synchronization delay. #define CORE_SCYCL (3 * (CORE_CFREQ) + 5 * (CORE_IFREQ) - 1) / (2 * (CORE_IFREQ)) #if (CORE_SCYCL == 1) # define sync_delay() {\ NOP(); } #endif #if (CORE_SCYCL == 2) # define sync_delay() {\ NOP(); \ NOP(); } #endif #if (CORE_SCYCL == 3) # define sync_delay() {\ NOP(); \ NOP(); \ NOP(); } #endif #if (CORE_SCYCL == 4) # define sync_delay() {\ NOP(); \ NOP(); \ NOP(); \ NOP(); } #endif #if (CORE_SCYCL == 5) # define sync_delay() {\ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); } #endif #if (CORE_SCYCL == 6) # define sync_delay() {\ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); } #endif #if (CORE_SCYCL == 7) # define sync_delay() {\ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); } #endif #if (CORE_SCYCL == 8) # define sync_delay() {\ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); } #endif #if (CORE_SCYCL == 9) # define sync_delay() {\ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); } #endif #if (CORE_SCYCL == 10) # define sync_delay() {\ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); } #endif #if (CORE_SCYCL == 11) # define sync_delay() {\ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); } #endif #if (CORE_SCYCL == 12) # define sync_delay() {\ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); } #endif #if (CORE_SCYCL == 13) # define sync_delay() {\ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); } #endif #if (CORE_SCYCL == 14) # define sync_delay() {\ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); } #endif #if (CORE_SCYCL == 15) # define sync_delay() {\ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); } #endif #if (CORE_SCYCL == 16) # define sync_delay() {\ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); \ NOP(); } #endif #define code_all_irq_disable() (IE = 0) #define code_all_irq_enable() (IE = 1) void core_init(void); #ifdef __cplusplus } #endif #endif // FX2_HW_H qbs-src-2.3.1/examples/baremetal/cy7c68013a/nes-gamepads/hidep1.c0000644000175100001770000000625714616416776023534 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "hid.h" struct hid_report { const BYTE id; BYTE buttons; BYTE ready; }; static struct hid_report g_reports[HID_REPORTS_COUNT] = { {HID_REPORT_ID_GAMEPAD1, 0, FALSE}, {HID_REPORT_ID_GAMEPAD2, 0, FALSE} }; static void ep1_report_send(BYTE index) { if (!g_reports[index].ready) return; if (EP1INCS & bmEPBUSY) return; EP1INBUF[0] = g_reports[index].id; EP1INBUF[1] = g_reports[index].buttons; EP1INBC = 2; g_reports[index].ready = FALSE; } void hid_ep1_task(void) { BYTE index = 0; for (index = 0; index < HID_REPORTS_COUNT; ++index) ep1_report_send(index); } void hid_ep1_report_update(BYTE index, BYTE buttons) { g_reports[index].buttons = buttons; g_reports[index].ready = TRUE; } qbs-src-2.3.1/examples/baremetal/cy7c68013a/nes-gamepads/nes-gamepads.qbs0000644000175100001770000001055214616416776025262 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ CppApplication { condition: { if (!qbs.architecture.contains("mcs51")) return false; return qbs.toolchain.contains("iar") || qbs.toolchain.contains("keil") || qbs.toolchain.contains("sdcc") } name: "cy7c68013a-nes-gamepads" cpp.positionIndependentCode: false // // IAR-specific properties and sources. // Properties { condition: qbs.toolchain.contains("iar") cpp.commonCompilerFlags: ["-e"] cpp.staticLibraries: [ cpp.toolchainInstallPath + "/../lib/clib/cl-pli-nsid-1e16x01" ] cpp.driverLinkerFlags: [ "-D_IDATA_STACK_SIZE=0x40", "-D_PDATA_STACK_SIZE=0x80", "-D_XDATA_STACK_SIZE=0xEFF", "-D_XDATA_HEAP_SIZE=0xFF", "-D_EXTENDED_STACK_SIZE=0", "-D_EXTENDED_STACK_START=0" ] } Group { name: "IAR Linker Script" condition: qbs.toolchain.contains("iar") prefix: cpp.toolchainInstallPath + "/../config/devices/cypress/" fileTags: ["linkerscript"] files: ["lnk51ew_CY7C68013A.xcl"] } // // KEIL-specific properties and sources. // Properties { condition: qbs.toolchain.contains("keil") cpp.driverLinkerFlags: [ "RAMSIZE(256)", "CODE(0x80)", "XDATA(0x1000)" ] } // // SDCC-specific properties and sources. // Properties { condition: qbs.toolchain.contains("sdcc") cpp.driverLinkerFlags: [ "--code-loc", "0x80", "--xram-loc", "0x1000" ] } // // Common code. // files: [ "core.c", "core.h", "defs.h", "gpio.c", "gpio.h", "hid.c", "hid.h", "hiddesc.c", "hidep0.c", "hidep1.c", "irqs.h", "main.c", "regs.h", "usb.c", "usb.h", ] } qbs-src-2.3.1/examples/baremetal/cy7c68013a/nes-gamepads/core.c0000644000175100001770000000622714616416776023307 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "core.h" #include "regs.h" enum cpu_freq_clk { CPU_CLK_12M = 0, CPU_CLK_24M, CPU_CLK_48M }; #define cpu_freq_clk_get() \ ((CPUCS & bmCLKSPD) >> 3) #define cpu_freq_clk_set(freq_clk) \ CPUCS = (CPUCS & ~bmCLKSPD) | (freq_clk << 3) void core_init(void) { // Set CPU clock to 48MHz. cpu_freq_clk_set(CPU_CLK_48M); sync_delay(); // Set stretch to 0. CKCON = ((CKCON & (~bmSTRETCH)) | bmFW_STRETCH1); sync_delay(); // Clear breakpoint register. BREAKPT = 0; sync_delay(); // Set all 8051 interrupts to low priority IP = 0; sync_delay(); // Clear interrupt enable bits. EIE = 0; sync_delay(); // Clear all external interrupt flags. EXIF = 0; sync_delay(); } qbs-src-2.3.1/examples/baremetal/cy7c68013a/nes-gamepads/usb.c0000644000175100001770000000751714616416776023153 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "core.h" #include "hid.h" #include "usb.h" void usb_init(void) { // Disable all USB interrupts. USBIE = 0; sync_delay(); // Disable all end point interrupts. EPIE = 0; sync_delay(); // Disable all end point ping-nak interrupts. NAKIE = 0; sync_delay(); // Disable all USB error interrupts. USBERRIE = 0; sync_delay(); // Disable USB && GPIF autovectoring. INTSETUP = 0; sync_delay(); // Clear USB interrupt requests. USBIRQ = bmSUDAV | bmSOF | bmSUTOK | bmSUSP | bmURES | bmHSGRANT | bmEP0ACK; sync_delay(); // Clear end point interrupt requests. EPIRQ = bmEP0IN | bmEP0OUT | bmEP1IN | bmEP1OUT | bmEP2 | bmEP4 | bmEP6 | bmEP8; sync_delay(); // Set USB interrupt to high priority. PUSB = 1; sync_delay(); // Enable USB interrupts. EUSB = 1; sync_delay(); // As we use SOFs to detect disconnect we have // to disable SOF synthesizing. USBCS |= bmNOSYNSOF; sync_delay(); hid_init(); // Disable FX2-internal enumeration support. USBCS |= bmRENUM; sync_delay(); } void usb_task(void) { if (USBIRQ & bmSUDAV) { USBIRQ = bmSUDAV; hid_ep0_setup_task(); } if (USBIRQ & bmEP0ACK) { USBIRQ = bmEP0ACK; } if (USBIRQ & bmURES) { USBIRQ = bmURES; } if (USBIRQ & bmSUSP) { USBIRQ = bmSUSP; } hid_ep1_task(); } qbs-src-2.3.1/examples/baremetal/cy7c68013a/nes-gamepads/main.c0000644000175100001770000000563114616416776023301 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ // Allocate all registers once here (only for C51 compiler). #define DEFINE_REGS #include "regs.h" #include "core.h" #include "gpio.h" #include "usb.h" static void hw_init(void) { usb_disconnect(); code_all_irq_disable(); core_init(); gpio_init(); usb_init(); usb_connect(); code_all_irq_enable(); } static void hw_loop_exec(void) { while (TRUE) { gpio_task(); usb_task(); } } int main(void) { hw_init(); hw_loop_exec(); return 0; } qbs-src-2.3.1/examples/baremetal/cy7c68013a/nes-gamepads/hid.h0000644000175100001770000000633214616416776023125 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef FX2_HID_H #define FX2_HID_H #include "usb.h" #ifdef __cplusplus extern "C" { #endif enum hid_constants { HID_CONFIG_NUMBER = 1, // Number of valid configuration. HID_IFACE_NUMBER = 0, // Number of valid interface. HID_ALT_IFACE_NUMBER = 0, // Number of valid alternate interface. HID_EP_IN = 0x81 // Active end point address. }; enum hid_gamepad_id { HID_REPORT_ID_GAMEPAD1 = 1, HID_REPORT_ID_GAMEPAD2 = 2 }; enum { HID_REPORTS_COUNT = 2, HID_REPORT_BITS_COUNT = 8 }; void hid_init(void); void hid_ep0_init(void); void hid_ep0_setup_task(void); const BYTE CODE *hid_ep0_std_desc_get(void); const BYTE CODE *hid_ep0_report_desc_get(WORD *length); void hid_ep1_task(void); void hid_ep1_report_update(BYTE index, BYTE buttons); #ifdef __cplusplus } #endif #endif // FX2_HID_H qbs-src-2.3.1/examples/baremetal/cy7c68013a/nes-gamepads/irqs.h0000644000175100001770000000622714616416776023342 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef FX2_IRQS_H #define FX2_IRQS_H #ifdef __cplusplus extern "C" { #endif // Standard interrupt numbers. #define INT0_IRQ 0 // External interrupt 0. #define TMR0_IRQ 1 // Timer 0 interrupt. #define INT1_IRQ 2 // External interrupt 1. #define TMR1_IRQ 3 // Timer 1 interrupt. #define COM0_IRQ 4 // Serial port 0 transmit or receive interrupt. #define TMR2_IRQ 5 // Timer 2 interrupt. #define WKUP_IRQ 6 // Resume interrupt. #define COM1_IRQ 7 // Serial port 1 transmit or receive interrupt. #define USB_IRQ 8 // USB interrupt. #define I2C_IRQ 9 // I2C bus interrupt. #define INT4_IRQ 10 // External interrupt 4. #define INT5_IRQ 11 // External interrupt 5. #define INT6_IRQ 12 // External interrupt 6. #ifdef __cplusplus } #endif #endif // FX2_IRQS_H qbs-src-2.3.1/examples/baremetal/cy7c68013a/nes-gamepads/gpio.c0000644000175100001770000001126714616416776023315 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "core.h" #include "gpio.h" #include "hid.h" #include "regs.h" static WORD g_counter = 0; // We use this empirical value to make a GPIO polling // every ~10 msec (rough). It is a simplest way, because // instead we need to use a timers with interrupts callbacks. enum { POLLING_COUNTER = 580 }; // Pins on the port A. enum gpio_pins { GPIO_CLK_PIN = bmBIT0, GPIO_DATA1_PIN = bmBIT2, GPIO_DATA2_PIN = bmBIT4, GPIO_LATCH_PIN = bmBIT6, }; static struct { const BYTE pin; BYTE buttons; } g_reports[HID_REPORTS_COUNT] = { {GPIO_DATA1_PIN, 0}, {GPIO_DATA2_PIN, 0} }; // Pulse width around ~1 usec. static void gpio_latch_pulse(void) { IOA |= GPIO_LATCH_PIN; sync_delay(); sync_delay(); sync_delay(); IOA &= ~GPIO_LATCH_PIN; sync_delay(); } // Pulse width around ~1 usec. static void gpio_clk_pulse(void) { IOA |= GPIO_CLK_PIN; sync_delay(); sync_delay(); sync_delay(); IOA &= ~GPIO_CLK_PIN; sync_delay(); } static void gpio_reports_clean(void) { BYTE index = 0; for (index = 0; index < HID_REPORTS_COUNT; ++index) g_reports[index].buttons = 0; } static void gpio_reports_send(void) { BYTE index = 0; for (index = 0; index < HID_REPORTS_COUNT; ++index) hid_ep1_report_update(index, g_reports[index].buttons); } static void gpio_poll(void) { BYTE pos = 0; // Cleanup reports. gpio_reports_clean(); // Send latch pulse. gpio_latch_pulse(); for (pos = 0; pos < HID_REPORT_BITS_COUNT; ++pos) { // TODO: Add some nops here? BYTE index = 0; for (index = 0; index < HID_REPORTS_COUNT; ++index) { // Low state means that a button is pressed. const BOOL v = (IOA & g_reports[index].pin) ? 0 : 1; g_reports[index].buttons |= (v << pos); } // Send clock pulse. gpio_clk_pulse(); } gpio_reports_send(); } void gpio_init(void) { // Set interface to ports. IFCONFIG = (IFCONFIG & (~bmIFCFG)) | bmIFPORTS; sync_delay(); // Initialize the CLK and LATCH pins as output. OEA = GPIO_CLK_PIN | GPIO_LATCH_PIN; sync_delay(); } void gpio_task(void) { if (g_counter < POLLING_COUNTER) { ++g_counter; } else { g_counter = 0; gpio_poll(); } } qbs-src-2.3.1/examples/baremetal/cy7c68013a/nes-gamepads/regs.h0000644000175100001770000006331214616416776023322 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef FX2_REGS_H #define FX2_REGS_H #include "defs.h" #ifdef __cplusplus extern "C" { #endif // // XDATA registers. // XDATA_REG(GPIF_WAVE_DATA, 0xE400) // GPIF waveform descriptor. XDATA_REG(RES_WAVEDATA_END, 0xE480) // Reserved. // General configuration. XDATA_REG(CPUCS, 0xE600) // Control & status. XDATA_REG(IFCONFIG, 0xE601) // Interface configuration. XDATA_REG(PINFLAGSAB, 0xE602) // FIFO FLAGA and FLAGB assignments. XDATA_REG(PINFLAGSCD, 0xE603) // FIFO FLAGC and FLAGD assignments. XDATA_REG(FIFORESET, 0xE604) // Restore FIFOS to default state. XDATA_REG(BREAKPT, 0xE605) // Breakpoint. XDATA_REG(BPADDRH, 0xE606) // Breakpoint address H. XDATA_REG(BPADDRL, 0xE607) // Breakpoint address L. XDATA_REG(UART230, 0xE608) // 230 Kbaud clock for T0,T1,T2. XDATA_REG(FIFOPINPOLAR, 0xE609) // FIFO polarities. XDATA_REG(REVID, 0xE60A) // Chip revision. XDATA_REG(REVCTL, 0xE60B) // Chip revision control. // Endpoint configuration. XDATA_REG(EP1OUTCFG, 0xE610) // Endpoint 1-out configuration. XDATA_REG(EP1INCFG, 0xE611) // Endpoint 1-in configuration. XDATA_REG(EP2CFG, 0xE612) // Endpoint 2 configuration. XDATA_REG(EP4CFG, 0xE613) // Endpoint 4 configuration. XDATA_REG(EP6CFG, 0xE614) // Endpoint 6 configuration. XDATA_REG(EP8CFG, 0xE615) // Endpoint 8 configuration. XDATA_REG(EP2FIFOCFG, 0xE618) // Endpoint 2 FIFO configuration. XDATA_REG(EP4FIFOCFG, 0xE619) // Endpoint 4 FIFO configuration. XDATA_REG(EP6FIFOCFG, 0xE61A) // Endpoint 6 FIFO configuration. XDATA_REG(EP8FIFOCFG, 0xE61B) // Endpoint 8 FIFO configuration. XDATA_REG(EP2AUTOINLENH, 0xE620) // Endpoint 2 packet length H (in only). XDATA_REG(EP2AUTOINLENL, 0xE621) // Endpoint 2 packet length L (in only). XDATA_REG(EP4AUTOINLENH, 0xE622) // Endpoint 4 packet length H (in only). XDATA_REG(EP4AUTOINLENL, 0xE623) // Endpoint 4 packet length L (in only). XDATA_REG(EP6AUTOINLENH, 0xE624) // Endpoint 6 packet length H (in only). XDATA_REG(EP6AUTOINLENL, 0xE625) // Endpoint 6 packet length L (in only). XDATA_REG(EP8AUTOINLENH, 0xE626) // Endpoint 8 packet length H (in only). XDATA_REG(EP8AUTOINLENL, 0xE627) // Endpoint 8 packet length L (in only). XDATA_REG(EP2FIFOPFH, 0xE630) // EP2 programmable flag trigger H. XDATA_REG(EP2FIFOPFL, 0xE631) // EP2 programmable flag trigger L. XDATA_REG(EP4FIFOPFH, 0xE632) // EP4 programmable flag trigger H. XDATA_REG(EP4FIFOPFL, 0xE633) // EP4 programmable flag trigger L. XDATA_REG(EP6FIFOPFH, 0xE634) // EP6 programmable flag trigger H. XDATA_REG(EP6FIFOPFL, 0xE635) // EP6 programmable flag trigger L. XDATA_REG(EP8FIFOPFH, 0xE636) // EP8 programmable flag trigger H. XDATA_REG(EP8FIFOPFL, 0xE637) // EP8 programmable flag trigger L. XDATA_REG(EP2ISOINPKTS, 0xE640) // EP2 (if ISO) in packets per frame (1-3). XDATA_REG(EP4ISOINPKTS, 0xE641) // EP4 (if ISO) in packets per frame (1-3). XDATA_REG(EP6ISOINPKTS, 0xE642) // EP6 (if ISO) in packets per frame (1-3). XDATA_REG(EP8ISOINPKTS, 0xE643) // EP8 (if ISO) in packets per frame (1-3). XDATA_REG(INPKTEND, 0xE648) // Force in packet end. XDATA_REG(OUTPKTEND, 0xE649) // Force out packet end. // Interrupts. XDATA_REG(EP2FIFOIE, 0xE650) // Endpoint 2 flag interrupt enable. XDATA_REG(EP2FIFOIRQ, 0xE651) // Endpoint 2 flag interrupt request. XDATA_REG(EP4FIFOIE, 0xE652) // Endpoint 4 flag interrupt enable. XDATA_REG(EP4FIFOIRQ, 0xE653) // Endpoint 4 flag interrupt request. XDATA_REG(EP6FIFOIE, 0xE654) // Endpoint 6 flag interrupt enable. XDATA_REG(EP6FIFOIRQ, 0xE655) // Endpoint 6 flag interrupt request. XDATA_REG(EP8FIFOIE, 0xE656) // Endpoint 8 flag interrupt enable. XDATA_REG(EP8FIFOIRQ, 0xE657) // Endpoint 8 flag interrupt request. XDATA_REG(IBNIE, 0xE658) // IN-BULK-NAK interrupt enable. XDATA_REG(IBNIRQ, 0xE659) // IN-BULK-NAK interrupt request. XDATA_REG(NAKIE, 0xE65A) // Endpoint ping NAK interrupt enable. XDATA_REG(NAKIRQ, 0xE65B) // Endpoint ping NAK interrupt request. XDATA_REG(USBIE, 0xE65C) // USB Int enables. XDATA_REG(USBIRQ, 0xE65D) // USB interrupt requests. XDATA_REG(EPIE, 0xE65E) // Endpoint interrupt enables. XDATA_REG(EPIRQ, 0xE65F) // Endpoint interrupt requests. XDATA_REG(GPIFIE, 0xE660) // GPIF interrupt enable. XDATA_REG(GPIFIRQ, 0xE661) // GPIF interrupt request. XDATA_REG(USBERRIE, 0xE662) // USB error interrupt enables. XDATA_REG(USBERRIRQ, 0xE663) // USB error interrupt requests. XDATA_REG(ERRCNTLIM, 0xE664) // USB error counter and limit. XDATA_REG(CLRERRCNT, 0xE665) // Clear error counter EC[3..0]. XDATA_REG(INT2IVEC, 0xE666) // Interrupt 2 (USB) autovector. XDATA_REG(INT4IVEC, 0xE667) // Interrupt 4 (FIFOS & GPIF) autovector. XDATA_REG(INTSETUP, 0xE668) // interrupt 2 & 4 setup. // Input/Output. XDATA_REG(PORTACFG, 0xE670) // I/O PORTA alternate configuration. XDATA_REG(PORTCCFG, 0xE671) // I/O PORTC alternate configuration. XDATA_REG(PORTECFG, 0xE672) // I/O PORTE alternate configuration. XDATA_REG(I2CS, 0xE678) // Bus control & status. XDATA_REG(I2DAT, 0xE679) // Bus data. XDATA_REG(I2CTL, 0xE67A) // Bus control. XDATA_REG(XAUTODAT1, 0xE67B) // Autoptr1 movx access. XDATA_REG(XAUTODAT2, 0xE67C) // Autoptr2 movx access. // USB Control. XDATA_REG(USBCS, 0xE680) // USB control & status. XDATA_REG(SUSPEND, 0xE681) // Put chip into suspend. XDATA_REG(WAKEUPCS, 0xE682) // Wakeup source and polarity. XDATA_REG(TOGCTL, 0xE683) // Toggle control. XDATA_REG(USBFRAMEH, 0xE684) // USB frame count H. XDATA_REG(USBFRAMEL, 0xE685) // USB frame count L. XDATA_REG(MICROFRAME, 0xE686) // Microframe count, 0-7. XDATA_REG(FNADDR, 0xE687) // USB function address. // Endpoints. XDATA_REG(EP0BCH, 0xE68A) // Endpoint 0 byte count H. XDATA_REG(EP0BCL, 0xE68B) // Endpoint 0 byte count L. XDATA_REG(EP1OUTBC, 0xE68D) // Endpoint 1 out byte count. XDATA_REG(EP1INBC, 0xE68F) // Endpoint 1 in byte count. XDATA_REG(EP2BCH, 0xE690) // Endpoint 2 byte count H. XDATA_REG(EP2BCL, 0xE691) // Endpoint 2 byte count L. XDATA_REG(EP4BCH, 0xE694) // Endpoint 4 byte count H. XDATA_REG(EP4BCL, 0xE695) // Endpoint 4 byte count L. XDATA_REG(EP6BCH, 0xE698) // Endpoint 6 byte count H. XDATA_REG(EP6BCL, 0xE699) // Endpoint 6 byte count L. XDATA_REG(EP8BCH, 0xE69C) // Endpoint 8 byte count H. XDATA_REG(EP8BCL, 0xE69D) // Endpoint 8 byte count L. XDATA_REG(EP0CS, 0xE6A0) // Endpoint control and status. XDATA_REG(EP1OUTCS, 0xE6A1) // Endpoint 1 out control and status. XDATA_REG(EP1INCS, 0xE6A2) // Endpoint 1 in control and status. XDATA_REG(EP2CS, 0xE6A3) // Endpoint 2 control and status. XDATA_REG(EP4CS, 0xE6A4) // Endpoint 4 control and status. XDATA_REG(EP6CS, 0xE6A5) // Endpoint 6 control and status. XDATA_REG(EP8CS, 0xE6A6) // Endpoint 8 control and status. XDATA_REG(EP2FIFOFLGS, 0xE6A7) // Endpoint 2 flags. XDATA_REG(EP4FIFOFLGS, 0xE6A8) // Endpoint 4 flags. XDATA_REG(EP6FIFOFLGS, 0xE6A9) // Endpoint 6 flags. XDATA_REG(EP8FIFOFLGS, 0xE6AA) // Endpoint 8 flags. XDATA_REG(EP2FIFOBCH, 0xE6AB) // EP2 FIFO total byte count H. XDATA_REG(EP2FIFOBCL, 0xE6AC) // EP2 FIFO total byte count L. XDATA_REG(EP4FIFOBCH, 0xE6AD) // EP4 FIFO total byte count H. XDATA_REG(EP4FIFOBCL, 0xE6AE) // EP4 FIFO total byte count L. XDATA_REG(EP6FIFOBCH, 0xE6AF) // EP6 FIFO total byte count H. XDATA_REG(EP6FIFOBCL, 0xE6B0) // EP6 FIFO total byte count L. XDATA_REG(EP8FIFOBCH, 0xE6B1) // EP8 FIFO total byte count H. XDATA_REG(EP8FIFOBCL, 0xE6B2) // EP8 FIFO total byte count L. XDATA_REG(SUDPTRH, 0xE6B3) // Setup data pointer high address byte. XDATA_REG(SUDPTRL, 0xE6B4) // Setup data pointer low address byte. XDATA_REG(SUDPTRCTL, 0xE6B5) // Setup data pointer auto mode. XDATA_REG(SETUPDAT[8], 0xE6B8) // 8 bytes of setup data. // GPIF. XDATA_REG(GPIFWFSELECT, 0xE6C0) // Waveform selector. XDATA_REG(GPIFIDLECS, 0xE6C1) // GPIF done, GPIF idle drive mode. XDATA_REG(GPIFIDLECTL, 0xE6C2) // Inactive bus, ctl states. XDATA_REG(GPIFCTLCFG, 0xE6C3) // CTL out pin drive. XDATA_REG(GPIFADRH, 0xE6C4) // GPIF address H. XDATA_REG(GPIFADRL, 0xE6C5) // GPIF address L. XDATA_REG(GPIFTCB3, 0xE6CE) // GPIF transaction count byte 3. XDATA_REG(GPIFTCB2, 0xE6CF) // GPIF transaction count byte 2. XDATA_REG(GPIFTCB1, 0xE6D0) // GPIF transaction count byte 1. XDATA_REG(GPIFTCB0, 0xE6D1) // GPIF transaction count byte 0. XDATA_REG(EP2GPIFFLGSEL, 0xE6D2) // EP2 GPIF flag select. XDATA_REG(EP2GPIFPFSTOP, 0xE6D3) // Stop GPIF EP2 transaction on prog flag. XDATA_REG(EP2GPIFTRIG, 0xE6D4) // EP2 FIFO trigger. XDATA_REG(EP4GPIFFLGSEL, 0xE6DA) // EP4 GPIF flag select. XDATA_REG(EP4GPIFPFSTOP, 0xE6DB) // Stop GPIF EP4 transaction on prog flag. XDATA_REG(EP4GPIFTRIG, 0xE6DC) // EP4 FIFO trigger. XDATA_REG(EP6GPIFFLGSEL, 0xE6E2) // EP6 GPIF Flag select. XDATA_REG(EP6GPIFPFSTOP, 0xE6E3) // Stop GPIF EP6 transaction on prog flag. XDATA_REG(EP6GPIFTRIG, 0xE6E4) // EP6 FIFO trigger. XDATA_REG(EP8GPIFFLGSEL, 0xE6EA) // EP8 GPIF flag select. XDATA_REG(EP8GPIFPFSTOP, 0xE6EB) // Stop GPIF EP8 transaction on prog flag. XDATA_REG(EP8GPIFTRIG, 0xE6EC) // EP8 FIFO trigger. XDATA_REG(XGPIFSGLDATH, 0xE6F0) // GPIF data H (16-bit mode only). XDATA_REG(XGPIFSGLDATLX, 0xE6F1) // Read/write GPIF data L & trigger transac. XDATA_REG(XGPIFSGLDATLNOX, 0xE6F2) // Read GPIF data L, no transac trigger. XDATA_REG(GPIFREADYCFG, 0xE6F3) // Internal RDY,Sync/Async, RDY5CFG. XDATA_REG(GPIFREADYSTAT, 0xE6F4) // RDY pin states. XDATA_REG(GPIFABORT, 0xE6F5) // Abort GPIF cycles. // UDMA. XDATA_REG(FLOWSTATE, 0xE6C6) // Defines GPIF flow state. XDATA_REG(FLOWLOGIC, 0xE6C7) // Defines flow/hold decision criteria. XDATA_REG(FLOWEQ0CTL, 0xE6C8) // CTL states during active flow state. XDATA_REG(FLOWEQ1CTL, 0xE6C9) // CTL states during hold flow state. XDATA_REG(FLOWHOLDOFF, 0xE6CA) // Holdoff configuration. XDATA_REG(FLOWSTB, 0xE6CB) // CTL/RDY signal to use as master data strobe. XDATA_REG(FLOWSTBEDGE, 0xE6CC) // Defines active master strobe edge. XDATA_REG(FLOWSTBHPERIOD, 0xE6CD) // Half period of output master strobe. XDATA_REG(GPIFHOLDAMOUNT, 0xE60C) // Data delay shift. XDATA_REG(UDMACRCH, 0xE67D) // CRC upper byte. XDATA_REG(UDMACRCL, 0xE67E) // CRC lower byte. XDATA_REG(UDMACRCQUAL, 0xE67F) // UDMA in only, host terminated use only. // Endpoint buffers. #define MAX_EP0_SIZE 64 #define MAX_EP1_SIZE 64 #define MAX_EP2468_SIZE 1024 XDATA_REG(EP0BUF[MAX_EP0_SIZE], 0xE740) // EP0 buffer (in or out). XDATA_REG(EP1OUTBUF[MAX_EP1_SIZE], 0xE780) // EP1 buffer (out only). XDATA_REG(EP1INBUF[MAX_EP1_SIZE], 0xE7C0) // EP1 buffer (in only). XDATA_REG(EP2FIFOBUF[MAX_EP2468_SIZE], 0xF000) // 512/1024-byte EP2 buffer (in or out). XDATA_REG(EP4FIFOBUF[MAX_EP2468_SIZE], 0xF400) // 512 byte EP4 buffer (in or out). XDATA_REG(EP6FIFOBUF[MAX_EP2468_SIZE], 0xF800) // 512/1024-byte EP6 buffer (in or out). XDATA_REG(EP8FIFOBUF[MAX_EP2468_SIZE], 0xFC00) // 512 byte EP8 buffer (in or out). // Error correction code (ECC) registers (FX2LP/FX1 only). XDATA_REG(ECCCFG, 0xE628) // ECC configuration. XDATA_REG(ECCRESET, 0xE629) // ECC reset. XDATA_REG(ECC1B0, 0xE62A) // ECC1 byte 0. XDATA_REG(ECC1B1, 0xE62B) // ECC1 byte 1. XDATA_REG(ECC1B2, 0xE62C) // ECC1 byte 2. XDATA_REG(ECC2B0, 0xE62D) // ECC2 byte 0. XDATA_REG(ECC2B1, 0xE62E) // ECC2 byte 1. XDATA_REG(ECC2B2, 0xE62F) // ECC2 byte 2. // Feature registers(FX2LP/FX1 only). XDATA_REG(GPCR2, 0xE50D) // Chip features. // // SFR registers. // SPEC_FUN_REG(IOA, 0x80) // Port A. SPEC_FUN_REG_BIT(PA0, 0x80, 0) SPEC_FUN_REG_BIT(PA1, 0x80, 1) SPEC_FUN_REG_BIT(PA2, 0x80, 2) SPEC_FUN_REG_BIT(PA3, 0x80, 3) SPEC_FUN_REG_BIT(PA4, 0x80, 4) SPEC_FUN_REG_BIT(PA5, 0x80, 5) SPEC_FUN_REG_BIT(PA6, 0x80, 6) SPEC_FUN_REG_BIT(PA7, 0x80, 7) SPEC_FUN_REG(SP, 0x81) // Stack pointer. SPEC_FUN_REG(DPL, 0x82) // Data pointer 0 L. SPEC_FUN_REG(DPH, 0x83) // Data pointer 0 H. SPEC_FUN_REG(DPL1, 0x84) // Data pointer 1 L. SPEC_FUN_REG(DPH1, 0x85) // Data pointer 1 L. SPEC_FUN_REG(DPS, 0x86) // Data pointer 0/1 select. SPEC_FUN_REG(PCON, 0x87) // Power control. SPEC_FUN_REG(TCON, 0x88) // Timer/counter control. SPEC_FUN_REG_BIT(IT0, 0x88, 0) SPEC_FUN_REG_BIT(IE0, 0x88, 1) SPEC_FUN_REG_BIT(IT1, 0x88, 2) SPEC_FUN_REG_BIT(IE1, 0x88, 3) SPEC_FUN_REG_BIT(TR0, 0x88, 4) SPEC_FUN_REG_BIT(TF0, 0x88, 5) SPEC_FUN_REG_BIT(TR1, 0x88, 6) SPEC_FUN_REG_BIT(TF1, 0x88, 7) SPEC_FUN_REG(TMOD, 0x89) // Timer/counter mode control. SPEC_FUN_REG(TL0, 0x8A) // Timer 0 reload L. SPEC_FUN_REG(TL1, 0x8B) // Timer 1 reload L. SPEC_FUN_REG(TH0, 0x8C) // Timer 0 reload H. SPEC_FUN_REG(TH1, 0x8D) // Timer 1 reload H. SPEC_FUN_REG(CKCON, 0x8E) // Clock control. SPEC_FUN_REG(IOB, 0x90) // Port B. SPEC_FUN_REG_BIT(PB0, 0x90, 0) SPEC_FUN_REG_BIT(PB1, 0x90, 1) SPEC_FUN_REG_BIT(PB2, 0x90, 2) SPEC_FUN_REG_BIT(PB3, 0x90, 3) SPEC_FUN_REG_BIT(PB4, 0x90, 4) SPEC_FUN_REG_BIT(PB5, 0x90, 5) SPEC_FUN_REG_BIT(PB6, 0x90, 6) SPEC_FUN_REG_BIT(PB7, 0x90, 7) SPEC_FUN_REG(EXIF, 0x91) // External interrupt flag. SPEC_FUN_REG(MPAGE, 0x92) // Upper address page of movx. SPEC_FUN_REG(SCON0, 0x98) // Serial port 0 control. SPEC_FUN_REG_BIT(RI, 0x98, 0) SPEC_FUN_REG_BIT(TI, 0x98, 1) SPEC_FUN_REG_BIT(RB8, 0x98, 2) SPEC_FUN_REG_BIT(TB8, 0x98, 3) SPEC_FUN_REG_BIT(REN, 0x98, 4) SPEC_FUN_REG_BIT(SM2, 0x98, 5) SPEC_FUN_REG_BIT(SM1, 0x98, 6) SPEC_FUN_REG_BIT(SM0, 0x98, 7) SPEC_FUN_REG(SBUF0, 0x99) // Serial port 0 data buffer. SPEC_FUN_REG(AUTOPTRH1, 0x9A) // Auto-pointer 1 address H. SPEC_FUN_REG(AUTOPTRL1, 0x9B) // Auto-pointer 1 address L. SPEC_FUN_REG(AUTOPTRH2, 0x9D) // Auto-pointer 2 address H. SPEC_FUN_REG(AUTOPTRL2, 0x9E) // Auto-pointer 2 address L. SPEC_FUN_REG(IOC, 0xA0) // Port C. SPEC_FUN_REG_BIT(PC0, 0xA0, 0) SPEC_FUN_REG_BIT(PC1, 0xA0, 1) SPEC_FUN_REG_BIT(PC2, 0xA0, 2) SPEC_FUN_REG_BIT(PC3, 0xA0, 3) SPEC_FUN_REG_BIT(PC4, 0xA0, 4) SPEC_FUN_REG_BIT(PC5, 0xA0, 5) SPEC_FUN_REG_BIT(PC6, 0xA0, 6) SPEC_FUN_REG_BIT(PC7, 0xA0, 7) SPEC_FUN_REG(INT2CLR, 0xA1) // Interrupt 2 clear. SPEC_FUN_REG(INT4CLR, 0xA2) // Interrupt 4 clear. SPEC_FUN_REG(IE, 0xA8) // Interrupt enable. SPEC_FUN_REG_BIT(EX0, 0xA8, 0) SPEC_FUN_REG_BIT(ET0, 0xA8, 1) SPEC_FUN_REG_BIT(EX1, 0xA8, 2) SPEC_FUN_REG_BIT(ET1, 0xA8, 3) SPEC_FUN_REG_BIT(ES0, 0xA8, 4) SPEC_FUN_REG_BIT(ET2, 0xA8, 5) SPEC_FUN_REG_BIT(ES1, 0xA8, 6) SPEC_FUN_REG_BIT(EA, 0xA8, 7) SPEC_FUN_REG(EP2468STAT, 0xAA) // Endpoint 2,4,6,8 status flags. SPEC_FUN_REG(EP24FIFOFLGS, 0xAB) // Endpoint 2,4 slave FIFO status flags. SPEC_FUN_REG(EP68FIFOFLGS, 0xAC) // Endpoint 6,8 slave FIFO status flags. SPEC_FUN_REG(AUTOPTRSETUP, 0xAF) // Auto-pointer 1,2 setup. SPEC_FUN_REG(IOD, 0xB0) // Port D. SPEC_FUN_REG_BIT(PD0, 0xB0, 0) SPEC_FUN_REG_BIT(PD1, 0xB0, 1) SPEC_FUN_REG_BIT(PD2, 0xB0, 2) SPEC_FUN_REG_BIT(PD3, 0xB0, 3) SPEC_FUN_REG_BIT(PD4, 0xB0, 4) SPEC_FUN_REG_BIT(PD5, 0xB0, 5) SPEC_FUN_REG_BIT(PD6, 0xB0, 6) SPEC_FUN_REG_BIT(PD7, 0xB0, 7) SPEC_FUN_REG(IOE, 0xB1) // Port E. SPEC_FUN_REG(OEA, 0xB2) // Port A out enable. SPEC_FUN_REG(OEB, 0xB3) // Port B out enable. SPEC_FUN_REG(OEC, 0xB4) // Port C out enable. SPEC_FUN_REG(OED, 0xB5) // Port D out enable. SPEC_FUN_REG(OEE, 0xB6) // Port E out enable. SPEC_FUN_REG(IP, 0xB8) // Interrupt prority. SPEC_FUN_REG_BIT(PX0, 0xB8, 0) SPEC_FUN_REG_BIT(PT0, 0xB8, 1) SPEC_FUN_REG_BIT(PX1, 0xB8, 2) SPEC_FUN_REG_BIT(PT1, 0xB8, 3) SPEC_FUN_REG_BIT(PS0, 0xB8, 4) SPEC_FUN_REG_BIT(PT2, 0xB8, 5) SPEC_FUN_REG_BIT(PS1, 0xB8, 6) SPEC_FUN_REG(EP01STAT, 0xBA) // Endpoint 0,1 status. SPEC_FUN_REG(GPIFTRIG, 0xBB) // Endpoint 2,4,6,8 GPIF slave FIFO trigger. SPEC_FUN_REG(GPIFSGLDATH, 0xBD) // GPIF data H. SPEC_FUN_REG(GPIFSGLDATLX, 0xBE) // GPIF data L with trigger. SPEC_FUN_REG(GPIFSGLDATLNOX, 0xBF) // GPIF data L without trigger. SPEC_FUN_REG(SCON1, 0xC0) // Serial port 1 control. SPEC_FUN_REG_BIT(RI1, 0xC0, 0) SPEC_FUN_REG_BIT(TI1, 0xC0, 1) SPEC_FUN_REG_BIT(RB81, 0xC0, 2) SPEC_FUN_REG_BIT(TB81, 0xC0, 3) SPEC_FUN_REG_BIT(REN1, 0xC0, 4) SPEC_FUN_REG_BIT(SM21, 0xC0, 5) SPEC_FUN_REG_BIT(SM11, 0xC0, 6) SPEC_FUN_REG_BIT(SM01, 0xC0, 7) SPEC_FUN_REG(SBUF1, 0xC1) // Serial port 1 data buffer. SPEC_FUN_REG(T2CON, 0xC8) // Timer/counter 2 control. SPEC_FUN_REG_BIT(CP_RL2, 0xC8, 0) SPEC_FUN_REG_BIT(C_T2, 0xC8, 1) SPEC_FUN_REG_BIT(TR2, 0xC8, 2) SPEC_FUN_REG_BIT(EXEN2, 0xC8, 3) SPEC_FUN_REG_BIT(TCLK, 0xC8, 4) SPEC_FUN_REG_BIT(RCLK, 0xC8, 5) SPEC_FUN_REG_BIT(EXF2, 0xC8, 6) SPEC_FUN_REG_BIT(TF2, 0xC8, 7) SPEC_FUN_REG(RCAP2L, 0xCA) // Capture for timer 2 auto-reload up-counter L. SPEC_FUN_REG(RCAP2H, 0xCB) // Capture for timer 2 auto-reload up-counter H. SPEC_FUN_REG(TL2, 0xCC) // Timer 2 reload L. SPEC_FUN_REG(TH2, 0xCD) // Timer 2 reload H. SPEC_FUN_REG(PSW, 0xD0) // Program status word. SPEC_FUN_REG_BIT(P, 0xD0, 0) SPEC_FUN_REG_BIT(FL, 0xD0, 1) SPEC_FUN_REG_BIT(OV, 0xD0, 2) SPEC_FUN_REG_BIT(RS0, 0xD0, 3) SPEC_FUN_REG_BIT(RS1, 0xD0, 4) SPEC_FUN_REG_BIT(F0, 0xD0, 5) SPEC_FUN_REG_BIT(AC, 0xD0, 6) SPEC_FUN_REG_BIT(CY, 0xD0, 7) SPEC_FUN_REG(EICON, 0xD8) // External interrupt control. SPEC_FUN_REG_BIT(INT6, 0xD8, 3) SPEC_FUN_REG_BIT(RESI, 0xD8, 4) SPEC_FUN_REG_BIT(ERESI, 0xD8, 5) SPEC_FUN_REG_BIT(SMOD1, 0xD8, 7) SPEC_FUN_REG(ACC, 0xE0) // Accumulator. SPEC_FUN_REG(EIE, 0xE8) // External interrupt enable. SPEC_FUN_REG_BIT(EUSB, 0xE8, 0) SPEC_FUN_REG_BIT(EI2C, 0xE8, 1) SPEC_FUN_REG_BIT(EIEX4, 0xE8, 2) SPEC_FUN_REG_BIT(EIEX5, 0xE8, 3) SPEC_FUN_REG_BIT(EIEX6, 0xE8, 4) SPEC_FUN_REG(B, 0xF0) // B SPEC_FUN_REG(EIP, 0xF8) // External interrupt priority control. SPEC_FUN_REG_BIT(PUSB, 0xF8, 0) SPEC_FUN_REG_BIT(PI2C, 0xF8, 1) SPEC_FUN_REG_BIT(EIPX4, 0xF8, 2) SPEC_FUN_REG_BIT(EIPX5, 0xF8, 3) SPEC_FUN_REG_BIT(EIPX6, 0xF8, 4) // // Register bit masks. // // CPU control & status register (CPUCS). enum cpucs_bits { bmPRTCSTB = bmBIT5, bmCLKSPD = bmBIT4 | bmBIT3, bmCLKSPD1 = bmBIT4, bmCLKSPD0 = bmBIT3, bmCLKINV = bmBIT2, bmCLKOE = bmBIT1, bm8051RES = bmBIT0 }; // Port A (PORTACFG). enum portacfg_bits { bmFLAGD = bmBIT7, bmINT1 = bmBIT1, bmINT0 = bmBIT0 }; // Port C (PORTCCFG). enum portccfg_bits { bmGPIFA7 = bmBIT7, bmGPIFA6 = bmBIT6, bmGPIFA5 = bmBIT5, bmGPIFA4 = bmBIT4, bmGPIFA3 = bmBIT3, bmGPIFA2 = bmBIT2, bmGPIFA1 = bmBIT1, bmGPIFA0 = bmBIT0 }; // Port E (PORTECFG). enum portecfg_bits { bmGPIFA8 = bmBIT7, bmT2EX = bmBIT6, bmINT6 = bmBIT5, bmRXD1OUT = bmBIT4, bmRXD0OUT = bmBIT3, bmT2OUT = bmBIT2, bmT1OUT = bmBIT1, bmT0OUT = bmBIT0 }; // I2C control & status register (I2CS). enum i2cs_bits { bmSTART = bmBIT7, bmSTOP = bmBIT6, bmLASTRD = bmBIT5, bmID = bmBIT4 | bmBIT3, bmBERR = bmBIT2, bmACK = bmBIT1, bmDONE = bmBIT0 }; // I2C control register (I2CTL). enum i2ctl_bits { bmSTOPIE = bmBIT1, bm400KHZ = bmBIT0 }; // Interrupt 2 (USB) autovector register (INT2IVEC). enum int2ivec_bits { bmIV4 = bmBIT6, bmIV3 = bmBIT5, bmIV2 = bmBIT4, bmIV1 = bmBIT3, bmIV0 = bmBIT2 }; // USB interrupt request & enable registers (USBIE/USBIRQ). enum usbieirq_bits { bmEP0ACK = bmBIT6, bmHSGRANT = bmBIT5, bmURES = bmBIT4, bmSUSP = bmBIT3, bmSUTOK = bmBIT2, bmSOF = bmBIT1, bmSUDAV = bmBIT0 }; // End point interrupt request & enable registers (EPIE/EPIRQ). enum epieirq_bits { bmEP8 = bmBIT7, bmEP6 = bmBIT6, bmEP4 = bmBIT5, bmEP2 = bmBIT4, bmEP1OUT = bmBIT3, bmEP1IN = bmBIT2, bmEP0OUT = bmBIT1, bmEP0IN = bmBIT0 }; // Breakpoint register (BREAKPT). enum breakpt_bits { bmBREAK = bmBIT3, bmBPPULSE = bmBIT2, bmBPEN = bmBIT1 }; // Interrupt 2 & 4 setup (INTSETUP). enum intsetup_bits { bmAV2EN = bmBIT3, bmINT4SRC = bmBIT1, bmAV4EN = bmBIT0 }; // USB control & status register (USBCS). enum usbcs_bits { bmHSM = bmBIT7, bmDISCON = bmBIT3, bmNOSYNSOF = bmBIT2, bmRENUM = bmBIT1, bmSIGRESUME = bmBIT0 }; // Wakeup control and status register (WAKEUPCS). enum wakeupcs_bits { bmWU2 = bmBIT7, bmWU = bmBIT6, bmWU2POL = bmBIT5, bmWUPOL = bmBIT4, bmDPEN = bmBIT2, bmWU2EN = bmBIT1, bmWUEN = bmBIT0 }; // End point 0 control & status register (EP0CS). enum ep0cs_bits { bmHSNAK = bmBIT7 }; // End point 0-1 control & status registers // (EP0CS/EP1OUTCS/EP1INCS). enum ep01cs_bits { bmEPBUSY = bmBIT1, bmEPSTALL = bmBIT0 }; // End point 2-8 Control & status registers // (EP2CS/EP4CS/EP6CS/EP8CS). enum ep2468cs_bits { MSK_EP2468CS_NPAK = bmBIT6 | bmBIT5 | bmBIT4, MSK_EP2468CS_EPFULL = bmBIT3, MSK_EP2468CS_EPEMPTY = bmBIT2 }; // End point status SFR bits (EP2468STAT). enum ep2468stat_bits { bmEP8FULL = bmBIT7, bmEP8EMPTY = bmBIT6, bmEP6FULL = bmBIT5, bmEP6EMPTY = bmBIT4, bmEP4FULL = bmBIT3, bmEP4EMPTY = bmBIT2, bmEP2FULL = bmBIT1, bmEP2EMPTY = bmBIT0 }; // End point 0,1 status bits (EP01STAT). enum ep01stat_bits { bmEP1INBSY = bmBIT2, bmEP1OUTBSY = bmBIT1, bmEP0BSY = bmBIT0 }; // Setup data pointer auto mode (SUDPTRCTL). enum sudptrctl_bits { bmSDPAUTO = bmBIT0 }; // End point data toggle control (TOGCTL). enum togctl_bits { bmQUERYTOGGLE = bmBIT7, bmSETTOGGLE = bmBIT6, bmRESETTOGGLE = bmBIT5, bmTOGCTLEPMASK = bmBIT3 | bmBIT2 | bmBIT1 | bmBIT0 }; // In bulk NAK enable and request bits (IBNIE/IBNIRQ). enum ibnieirq_bits { bmEP8IBN = bmBIT5, bmEP6IBN = bmBIT4, bmEP4IBN = bmBIT3, bmEP2IBN = bmBIT2, bmEP1IBN = bmBIT1, bmEP0IBN = bmBIT0 }; // Ping NAK enable and request bits (NAKIE/NAKIRQ). enum nakieirq_bits { bmEP8PING = bmBIT7, bmEP6PING = bmBIT6, bmEP4PING = bmBIT5, bmEP2PING = bmBIT4, bmEP1PING = bmBIT3, bmEP0PING = bmBIT2, bmIBN = bmBIT0 }; // Interface configuration bits (IFCONFIG). enum ifconfig_bits { bmIFCLKSRC = bmBIT7, bm3048MHZ = bmBIT6, bmIFCLKOE = bmBIT5, bmIFCLKPOL = bmBIT4, bmASYNC = bmBIT3, bmGSTATE = bmBIT2, bmIFCFG = bmBIT0 | bmBIT1 }; // IFCFG field of IFCONFIG register. enum ifcfg_bits { bmIFPORTS = 0, bmIFRESERVED = bmBIT0, bmIFGPIF = bmBIT1, bmIFSLAVEFIFO = bmBIT0 | bmBIT1 }; // End point 2,4,6,8 FIFO configuration bits // (EP2FIFOCFG,EP4FIFOCFG,EP6FIFOCFG,EP8FIFOCFG). enum ep2468fifocfg_bits { bmINFM = bmBIT6, bmOEP = bmBIT5, bmAUTOOUT = bmBIT4, bmAUTOIN = bmBIT3, bmZEROLENIN = bmBIT2, bmWORDWIDE = bmBIT0 }; // Chip revision control bits (REVCTL). enum revctl_bits { bmNOAUTOARM = bmBIT1, bmSKIPCOMMIT = bmBIT0 }; // Fifo reset bits (FIFORESET). enum fiforeset_bits { bmNAKALL = bmBIT7, bmFREP3 = bmBIT3, bmFREP2 = bmBIT2, bmFREP1 = bmBIT1, bmFREP0 = bmBIT0 }; // Chip feature register (GPCR2). enum gpcr2_bits { bmFULLSPEEDONLY = bmBIT4 }; // Clock control register (CKCON). // Note: a RevE errata states that stretch must=0 // to set OUTxBC. enum ckcon_bits { bmT2M = bmBIT5, bmT1M = bmBIT4, bmT0M = bmBIT3, bmSTRETCH = bmBIT0 | bmBIT1 | bmBIT2 }; enum data_mem_stretch { bmFW_STRETCH1 = 0, // Movx: 2 cycles, R/W strobe: 2 cycles... bmFW_STRETCH2 = 1, // Movx: 3 cycles, R/W strobe: 4 cycles... bmFW_STRETCH3 = 2, // Movx: 4 cycles, R/W strobe: 8 cycles... bmFW_STRETCH4 = 3, // Movx: 5 cycles, R/W strobe: 12 cycles... bmFW_STRETCH5 = 4, // Movx: 6 cycles, R/W strobe: 16 cycles... bmFW_STRETCH6 = 5, // Movx: 7 cycles, R/W strobe: 20 cycles... bmFW_STRETCH7 = 6, // Movx: 8 cycles, R/W strobe: 24 cycles... bmFW_STRETCH8 = 7 // Movx: 9 cycles, R/W strobe: 28 cycles... }; // External interrupt flags (EXIF). enum exif_bits { bmIE5 = bmBIT7, bmIE4 = bmBIT6, bmI2CINT = bmBIT5, bmUSBNT = bmBIT4 }; // External interrupt control (EICON). enum eicon_bits { bmSMOD1 = bmBIT7, bmERESI = bmBIT5, bmRESI = bmBIT4, //bmINT6 = bmBIT3 }; // Power control (PCON). enum pcon_bits { bmSMOD0 = bmBIT7, bmIDLE = bmBIT0 }; // Autopointer 1 & 2 setup (AUTOPTRSETUP). enum autoptrsetup_bits { bmAPTR2INC = bmBIT2, bmAPTR1INC = bmBIT1, bmAPTREN = bmBIT0 }; #ifdef __cplusplus } #endif #endif // FX2_REGS_H qbs-src-2.3.1/examples/baremetal/cy7c68013a/nes-gamepads/hiddesc.c0000644000175100001770000002756514616416776023772 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "hid.h" enum usb_bcd_version { USB_SPEC_BCD_VERSION = 0x0200, USB_DEVICE_BCD_VERSION = 0x1234, USB_HID_BCD_VERSION = 0x0111 }; enum usb_ids { USB_DEVICE_VID = 0xFFFF, USB_DEVICE_PID = 0xFFFF }; enum usb_lang_id { USB_LANG_ID = 0x0409 }; enum usb_descriptor_string_index { USB_DESC_LANGID_STRING_INDEX = 0, USB_DESC_MFG_STRING_INDEX, USB_DESC_PRODUCT_STRING_INDEX, USB_DESC_SERIAL_STRING_INDEX }; enum usb_descr_length { // Standard length. USB_DESC_DEVICE_LEN = 18, USB_DESC_DEVICE_QUAL_LEN = 10, USB_DESC_CONF_LEN = 9, USB_DESC_OTHER_SPEED_CONF_LEN = 9, USB_DESC_INTERFACE_LEN = 9, USB_DESC_HID_LEN = 9, USB_DESCR_HID_REP_LEN = 56, USB_DESC_ENDPOINT_LEN = 7, // Total length. USB_DESC_DEVICE_TOTAL_LEN = USB_DESC_DEVICE_LEN, USB_DESC_DEVICE_QUAL_TOTAL_LEN = USB_DESC_DEVICE_QUAL_LEN, USB_DESC_CONF_TOTAL_LEN = USB_DESC_CONF_LEN + USB_DESC_INTERFACE_LEN + USB_DESC_HID_LEN + USB_DESC_ENDPOINT_LEN, USB_DESC_OTHER_SPEED_CONF_TOTAL_LEN = USB_DESC_OTHER_SPEED_CONF_LEN + USB_DESC_INTERFACE_LEN, }; enum usb_descr_attributes { // Attributes (b7 - buspwr, b6 - selfpwr, b5 - rwu). USB_DESC_ATTRIBUTES = 0xA0, // 100 mA (div 2). USB_DESC_POWER_CONSUMPTION = 50 }; enum usb_descr_numbers { USB_DESC_CONFIG_COUNT = 1 }; static const BYTE CODE g_hid_report_desc[USB_DESCR_HID_REP_LEN] = { // Pad #1 configuration. 0x05, 0x01, // Usage page (Generic Desktop). 0x09, 0x05, // Usage (Game Pad). 0xa1, 0x01, // Collection (Application). 0xa1, 0x00, // Collection (Physical). 0x85, HID_REPORT_ID_GAMEPAD1, // Report id (1). 0x05, 0x09, // Usage page (Button). 0x19, 0x01, // Usage minimum (Button 1). 0x29, 0x08, // Usage maximum (Button 8). 0x15, 0x00, // Logical minimum (0). 0x25, 0x01, // Logical maximum (1). 0x95, HID_REPORT_BITS_COUNT, // Report count (8). 0x75, 0x01, // Report size (1). 0x81, 0x02, // Input (Data,Var,Abs). 0xc0, // End collection. 0xc0, // End collection. // Pad #2 configuration. 0x05, 0x01, // Usage page (Generic Desktop). 0x09, 0x05, // Usage (Game Pad). 0xa1, 0x01, // Collection (Application). 0xa1, 0x00, // Collection (Physical). 0x85, HID_REPORT_ID_GAMEPAD2, // Report id (2). 0x05, 0x09, // Usage page (Button). 0x19, 0x01, // Usage minimum (Button 1). 0x29, 0x08, // Usage maximum (Button 8). 0x15, 0x00, // Logical minimum (0). 0x25, 0x01, // Logical maximum (1). 0x95, HID_REPORT_BITS_COUNT, // Report count (8). 0x75, 0x01, // Report size (1). 0x81, 0x02, // Input (Data,Var,Abs). 0xc0, // End collection 0xc0 // End collection. }; static const BYTE CODE g_device_desc[USB_DESC_DEVICE_TOTAL_LEN] = { USB_DESC_DEVICE_LEN, // Descriptor length. USB_DESC_DEVICE, // Descriptor type. usb_word_lsb_get(USB_SPEC_BCD_VERSION), // USB BCD version, lo. usb_word_msb_get(USB_SPEC_BCD_VERSION), // USB BCD version, hi. 0x00, // Device class. 0x00, // Device sub-class. 0x00, // Device protocol. MAX_EP0_SIZE, // Maximum packet size (ep0 size). usb_word_lsb_get(USB_DEVICE_VID), // Vendor ID, lo. usb_word_msb_get(USB_DEVICE_VID), // Vendor ID, hi. usb_word_lsb_get(USB_DEVICE_PID), // Product ID, lo. usb_word_msb_get(USB_DEVICE_PID), // Product ID, hi. usb_word_lsb_get(USB_DEVICE_BCD_VERSION), // Device BCD version, lo. usb_word_msb_get(USB_DEVICE_BCD_VERSION), // Device BCD version, hi. USB_DESC_MFG_STRING_INDEX, USB_DESC_PRODUCT_STRING_INDEX, USB_DESC_SERIAL_STRING_INDEX, USB_DESC_CONFIG_COUNT // Configurations count. }; static const BYTE CODE g_device_qual_desc[USB_DESC_DEVICE_QUAL_TOTAL_LEN] = { USB_DESC_DEVICE_QUAL_LEN, // Descriptor length. USB_DESC_DEVICE_QUAL, // Descriptor type. usb_word_lsb_get(USB_SPEC_BCD_VERSION), // USB BCD version, lo. usb_word_msb_get(USB_SPEC_BCD_VERSION), // USB BCD version, hi. 0x00, // Device class. 0x00, // Device sub-class. 0x00, // Device protocol. MAX_EP0_SIZE, // Maximum packet size (ep0 size). USB_DESC_CONFIG_COUNT, // Configurations count. 0x00 // Reserved. }; static const BYTE CODE g_config_desc[USB_DESC_CONF_TOTAL_LEN] = { USB_DESC_CONF_LEN, // Descriptor length. USB_DESC_CONF, // Descriptor type. usb_word_lsb_get(USB_DESC_CONF_TOTAL_LEN), // Total length, lo. usb_word_msb_get(USB_DESC_CONF_TOTAL_LEN), // Total length, hi. 0x01, // Interfaces count. HID_CONFIG_NUMBER, // Configuration number. 0x00, // Configuration string index. USB_DESC_ATTRIBUTES, // Attributes. USB_DESC_POWER_CONSUMPTION, // Power consumption. // Interface descriptor. USB_DESC_INTERFACE_LEN, // Descriptor length. USB_DESC_INTERFACE, // Descriptor type. HID_IFACE_NUMBER, // Zero-based index of this interfacce. HID_ALT_IFACE_NUMBER, // Alternate setting. 0x01, // End points count (ep1 in). 0x03, // Class code (HID). 0x00, // Subclass code (boot). 0x00, // Protocol code (none). 0x00, // Interface string descriptor index. // HID descriptor. USB_DESC_HID_LEN, // Descriptor length. USB_DESC_HID, // Descriptor type. usb_word_lsb_get(USB_HID_BCD_VERSION), // HID class BCD version, lo. usb_word_msb_get(USB_HID_BCD_VERSION), // HID class BCD version, hi. 0x00, // Country code (HW country code). 0x01, // Number of HID class descriptors to follow. USB_DESC_REPORT, // Repord descriptor type (HID). usb_word_lsb_get(USB_DESCR_HID_REP_LEN), // Report descriptor total length, lo. usb_word_msb_get(USB_DESCR_HID_REP_LEN), // Report descriptor total length, hi. // End point descriptor. USB_DESC_ENDPOINT_LEN, // Descriptor length. USB_DESC_ENDPOINT, // Descriptor type. HID_EP_IN, // End point address (ep1 in). 0x03, // End point type (interrupt). usb_word_lsb_get(MAX_EP1_SIZE), // Maximum packet size, lo (ep1 size). usb_word_msb_get(MAX_EP1_SIZE), // Maximum packet size, hi (ep1 size). 0x01 // Polling interval (1 ms). }; static const BYTE CODE g_other_config_desc[USB_DESC_OTHER_SPEED_CONF_TOTAL_LEN] = { USB_DESC_OTHER_SPEED_CONF_LEN, // Descriptor length. USB_DESC_OTHER_SPEED_CONF, // Descriptor type. usb_word_lsb_get(USB_DESC_OTHER_SPEED_CONF_TOTAL_LEN), // Total length, lo. usb_word_msb_get(USB_DESC_OTHER_SPEED_CONF_TOTAL_LEN), // Total length, hi. 0x01, // Interfaces number. 0x01, // Configuration number. 0x00, // Configuration string index. USB_DESC_ATTRIBUTES, // Attributes. USB_DESC_POWER_CONSUMPTION, // Power consumption. // Interface descriptor. USB_DESC_INTERFACE_LEN, // Descriptor length. USB_DESC_INTERFACE, // Descriptor type. 0x00, // Zero-based index of this interfacce. 0x00, // Alternate setting. 0x00, // End points number (only ep0). 0x00, // Class code. 0x00, // Subclass code.USB_DESC_OTHER_SPEED_CONFIGURATION 0x00, // Protocol code. 0x00 // Interface string descriptor index. }; static const BYTE CODE g_lang_id_desc[] = { 0x04, // Descriptor length. USB_DESC_STRING, // Descriptor type. usb_word_lsb_get(USB_LANG_ID), // Language id, lo. usb_word_msb_get(USB_LANG_ID) // Language id, hi. }; static const BYTE CODE g_manuf_str_desc[] = { 0x18, // Descriptor length. USB_DESC_STRING, // Descriptor type. // Unicode string: 'Q', 0, 'B', 0, 'S', 0, ' ', 0, 'e', 0, 'x', 0, 'a', 0, 'm', 0, 'p', 0, 'l', 0, 'e', 0 }; static const BYTE CODE g_product_str_desc[] = { 0x1A, // Descriptor length. USB_DESC_STRING, // Descriptor type. // Unicode string: 'N', 0, 'E', 0, 'S', 0, ' ', 0, 'G', 0, 'a', 0, 'm', 0, 'e', 0, 'P', 0, 'a', 0, 'd', 0, 's', 0 }; static const BYTE CODE g_serialno_str_desc[] = { 0x1A, // Descriptor length. USB_DESC_STRING, // Descriptor type. // Unicode string: '0', 0 ,'1', 0, '0', 0, '2', 0, '0', 0, '3', 0, '0', 0, '4', 0, '0', 0, '5', 0, '0', 0, '6', 0 }; static const BYTE CODE *ep0_string_desc_get(void) { switch (SETUPDAT[2]) { case USB_DESC_LANGID_STRING_INDEX: return g_lang_id_desc; case USB_DESC_MFG_STRING_INDEX: return g_manuf_str_desc; case USB_DESC_PRODUCT_STRING_INDEX: return g_product_str_desc; case USB_DESC_SERIAL_STRING_INDEX: return g_serialno_str_desc; default: break; } return NULL; } static const BYTE CODE *ep0_config_desc_get(BOOL other) { if (!other) { if (SETUPDAT[2] == 0) { return usb_is_high_speed() ? g_config_desc : g_other_config_desc; } } else { return usb_is_high_speed() ? g_other_config_desc : g_config_desc; } return NULL; } const BYTE CODE *hid_ep0_std_desc_get(void) { switch (SETUPDAT[3]) { case USB_DESC_DEVICE: return g_device_desc; case USB_DESC_CONF: return ep0_config_desc_get(FALSE); case USB_DESC_STRING: return ep0_string_desc_get(); case USB_DESC_DEVICE_QUAL: return g_device_qual_desc; case USB_DESC_OTHER_SPEED_CONF: return ep0_config_desc_get(TRUE); case USB_DESC_HID: return &g_config_desc[USB_DESC_CONF_LEN + USB_DESC_INTERFACE_LEN]; default: break; } return NULL; } const BYTE CODE *hid_ep0_report_desc_get(WORD *length) { *length = sizeof(g_hid_report_desc); return g_hid_report_desc; } qbs-src-2.3.1/examples/baremetal/cy7c68013a/nes-gamepads/hidep0.c0000644000175100001770000002142514616416776023525 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "hid.h" #include "core.h" #include "usb.h" static BOOL g_rwuen = FALSE; static BOOL g_selfpwr = FALSE; static void ep0_ep1in_reset(void) { EP1INCS &= ~bmEPBUSY; sync_delay(); usp_ep_reset_toggle(HID_EP_IN); sync_delay(); } // Get status handle. static BYTE *ep_address_get(BYTE ep) { const BYTE ep_num = ep & ~bmSETUP_DIR; switch (ep_num) { case 0: return (BYTE *)&EP0CS; case 1: return (ep & bmSETUP_DIR) ? (BYTE *)&EP1INCS : (BYTE *)&EP1OUTCS; default: break; } return NULL; } static BOOL ep0_dev_status_get(void) { BYTE status = 0; if (g_selfpwr) status |= USB_STATUS_SELF_POWERED; if (g_rwuen) status |= USB_STATUS_REMOTE_WAKEUP; EP0BUF[0] = status; EP0BUF[1] = 0; EP0BCH = 0; EP0BCL = 2; return TRUE; } static BOOL ep0_iface_status_get(void) { EP0BUF[0] = 0; EP0BUF[1] = 0; EP0BCH = 0; EP0BCL = 2; return TRUE; } static BOOL ep0_ep_status_get(void) { const volatile BYTE XDATA *pep = (BYTE XDATA *)ep_address_get(SETUPDAT[4]); if (pep) { EP0BUF[0] = *pep & bmEPSTALL ? 1 : 0; EP0BUF[1] = 0; EP0BCH = 0; EP0BCL = 2; return TRUE; } return FALSE; } static BOOL ep0_get_status_proc(void) { if ((SETUPDAT[0] & bmSETUP_TO_HOST) == 0) return FALSE; switch (SETUPDAT[0] & bmSETUP_RECIPIENT) { case bmSETUP_DEVICE: return ep0_dev_status_get(); case bmSETUP_IFACE: return ep0_iface_status_get(); case bmSETUP_EP: return ep0_ep_status_get(); default: break; } return FALSE; } // Clear feature handle. static BOOL ep0_dev_feature_clear(void) { if (SETUPDAT[2] == USB_FEATURE_REMOTE_WAKEUP) { g_rwuen = FALSE; return TRUE; } return FALSE; } static BOOL ep0_ep_feature_clear(void) { if (SETUPDAT[2] == USB_FEATURE_STALL) { volatile BYTE XDATA *pep = (BYTE XDATA *)ep_address_get(SETUPDAT[4]); if (!pep) return FALSE; *pep &= ~bmEPSTALL; return TRUE; } return FALSE; } static BOOL ep0_clear_feature_proc(void) { switch (SETUPDAT[0] & bmSETUP_RECIPIENT) { case bmSETUP_DEVICE: return ep0_dev_feature_clear(); case bmSETUP_EP: return ep0_ep_feature_clear(); default: break; } return FALSE; } // Set feature handle. static BOOL ep0_dev_feature_set(void) { switch (SETUPDAT[2]) { case USB_FEATURE_REMOTE_WAKEUP: g_rwuen = TRUE; return TRUE; case USB_FEATRUE_TEST_MODE: // This is "test mode", just return the handshake. return TRUE; default: break; } return FALSE; } static BOOL ep0_ep_feature_set(void) { if (SETUPDAT[2] == USB_FEATURE_STALL) { volatile BYTE XDATA *pep = (BYTE XDATA *)ep_address_get(SETUPDAT[4]); if (!pep) return FALSE; *pep |= bmEPSTALL; usp_ep_reset_toggle(SETUPDAT[4]); return TRUE; } return FALSE; } static BOOL ep0_set_feature_proc(void) { switch (SETUPDAT[0] & bmSETUP_RECIPIENT) { case bmSETUP_DEVICE: return ep0_dev_feature_set(); case bmSETUP_EP: return ep0_ep_feature_set(); default: break; } return FALSE; } // Get descriptor handle. static BOOL ep0_std_descriptor_proc(void) { const BYTE XDATA *pdesc = (BYTE XDATA *)hid_ep0_std_desc_get(); if (pdesc) { SUDPTRH = usb_word_msb_get(pdesc); SUDPTRL = usb_word_lsb_get(pdesc); return TRUE; } return FALSE; } static BOOL ep0_report_descriptor_proc(void) { WORD i = 0; WORD length = 0; const BYTE XDATA *pdesc = (BYTE XDATA *)hid_ep0_report_desc_get(&length); if (pdesc) { AUTOPTRH1 = usb_word_msb_get(pdesc); AUTOPTRL1 = usb_word_lsb_get(pdesc); for (i = 0; i < length; ++i) EP0BUF[i] = XAUTODAT1; EP0BCH = usb_word_msb_get(length); EP0BCL = usb_word_lsb_get(length); return TRUE; } return FALSE; } static BOOL ep0_get_descriptor_proc(void) { switch (SETUPDAT[3]) { case USB_DESC_DEVICE: case USB_DESC_CONF: case USB_DESC_STRING: case USB_DESC_DEVICE_QUAL: case USB_DESC_OTHER_SPEED_CONF: case USB_DESC_HID: return ep0_std_descriptor_proc(); case USB_DESC_REPORT: return ep0_report_descriptor_proc(); } return FALSE; } // Get configuration handle. static BOOL ep0_get_config_proc(void) { // We only support configuration 1. EP0BUF[0] = HID_CONFIG_NUMBER; EP0BCH = 0; EP0BCL = 1; return TRUE; } // Set configuration handle. static BOOL ep0_set_config_proc(void) { // We only support configuration 1. if (SETUPDAT[2] != HID_CONFIG_NUMBER) return FALSE; return TRUE; } // Get interface handle. static BOOL ep0_get_iface_proc(void) { if (SETUPDAT[4] != HID_IFACE_NUMBER) return FALSE; EP0BUF[0] = HID_ALT_IFACE_NUMBER; EP0BCH = 0; EP0BCL = 1; return TRUE; } // Set interface handle. static BOOL ep0_set_iface_proc(void) { if (SETUPDAT[4] != HID_IFACE_NUMBER) return FALSE; if (SETUPDAT[2] != HID_ALT_IFACE_NUMBER) return FALSE; ep0_ep1in_reset(); return TRUE; } static BOOL ep0_std_proc(void) { switch (SETUPDAT[1]) { case USB_SETUP_GET_STATUS: return ep0_get_status_proc(); case USB_SETUP_CLEAR_FEATURE: return ep0_clear_feature_proc(); case USB_SETUP_SET_FEATURE: return ep0_set_feature_proc(); case USB_SETUP_SET_ADDRESS: // Handles automatically by FX2. return TRUE; case USB_SETUP_GET_DESCRIPTOR: return ep0_get_descriptor_proc(); case USB_SETUP_GET_CONFIGURATION: return ep0_get_config_proc(); case USB_SETUP_SET_CONFIGURATION: return ep0_set_config_proc(); case USB_SETUP_GET_INTERFACE: return ep0_get_iface_proc(); case USB_SETUP_SET_INTERFACE: return ep0_set_iface_proc(); default: break; } return FALSE; } static BOOL ep0_setup(void) { switch (SETUPDAT[0] & bmSETUP_TYPE) { case bmSETUP_STANDARD: return ep0_std_proc(); default: break; } return FALSE; } void hid_ep0_setup_task(void) { if (!ep0_setup()) usb_ep0_stall(); usb_ep0_hsnack(); } qbs-src-2.3.1/examples/baremetal/cy7c68013a/cy7c68013a.qbs0000644000175100001770000000503014616416776021755 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ Project { name: "Examples for cy7c68013a board" references: [ "nes-gamepads/nes-gamepads.qbs" ] } qbs-src-2.3.1/examples/baremetal/cc2540usbdongle/0000755000175100001770000000000014616416776021033 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/cc2540usbdongle/greenblink/0000755000175100001770000000000014616416776023153 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/cc2540usbdongle/greenblink/README.md0000644000175100001770000000051714616416776024435 0ustar runnerdockerThis example demonstrates how to build a bare-metal application using different MCS-51 toolchains. It is designed for the CC2540 usb dongle target board (based on Texas Instruments CC2540 wireless MCU) and simply flashes the green LED on the board. The following toolchains are supported: * IAR Embedded Workbench * KEIL uVision qbs-src-2.3.1/examples/baremetal/cc2540usbdongle/greenblink/gpio.h0000644000175100001770000000513214616416776024263 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef GPIO_H #define GPIO_H #ifdef __cplusplus extern "C" { #endif void gpio_init_green_led(void); void gpio_toggle_green_led(void); #ifdef __cplusplus } #endif #endif // GPIO_H qbs-src-2.3.1/examples/baremetal/cc2540usbdongle/greenblink/system.h0000644000175100001770000000630314616416776024652 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef SYSTEM_H #define SYSTEM_H #ifdef __cplusplus extern "C" { #endif #if defined(__ICC8051__) #include # define system_nop() __no_operation() # define DEFINE_SFR(name,addr) __sfr __no_init volatile unsigned char name @ addr; #elif defined (__C51__) #include # define system_nop() _nop_() # define DEFINE_SFR(name, addr) sfr name = addr; #elif defined (__SDCC_mcs51) #include # define DEFINE_SFR(name, addr) __sfr __at(addr) name; # ifndef NOP # define NOP() __asm NOP __endasm # endif # define system_nop() NOP() #else #error "Unsupported toolchain" #endif DEFINE_SFR(P0 , 0x80u) // Port 0. DEFINE_SFR(P0SEL, 0xF3u) // Port 0 function select. DEFINE_SFR(P0DIR, 0xFDu) // Port 0 direction select. #ifdef __cplusplus } #endif #endif // SYSTEM_H qbs-src-2.3.1/examples/baremetal/cc2540usbdongle/greenblink/greenblink.qbs0000644000175100001770000001026114616416776026002 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ CppApplication { condition: { if (!qbs.architecture.contains("mcs51")) return false; return qbs.toolchain.contains("iar") || qbs.toolchain.contains("keil") || qbs.toolchain.contains("sdcc") } name: "cc2540usbdongle-greenblink" cpp.positionIndependentCode: false // // IAR-specific properties and sources. // Properties { condition: qbs.toolchain.contains("iar") cpp.commonCompilerFlags: ["-e"] cpp.driverLinkerFlags: [ "-D_IDATA_STACK_SIZE=0x40", "-D_PDATA_STACK_SIZE=0x00", "-D_XDATA_STACK_SIZE=0x00", "-D_XDATA_HEAP_SIZE=0x00", "-D_EXTENDED_STACK_SIZE=0", "-D_EXTENDED_STACK_START=0" ] cpp.staticLibraries: [ cpp.toolchainInstallPath + "/../lib/clib/cl-pli-nsid-1e16x01" ] } Group { condition: qbs.toolchain.contains("iar") name: "IAR" prefix: "iar/" Group { name: "Linker Script" prefix: cpp.toolchainInstallPath + "/../config/devices/_generic/" fileTags: ["linkerscript"] files: ["lnk51ew_8051.xcl"] } } // // KEIL-specific properties and sources. // Properties { condition: qbs.toolchain.contains("keil") cpp.driverLinkerFlags: [ "RAMSIZE(256)", "CODE(0x0000-0xFFFF)" ] } // // SDCC-specific properties and sources. // Properties { condition: qbs.toolchain.contains("sdcc") } // // Common code. // Group { name: "Gpio" files: ["gpio.c", "gpio.h"] } Group { name: "System" files: ["system.h"] } files: ["main.c"] } qbs-src-2.3.1/examples/baremetal/cc2540usbdongle/greenblink/main.c0000644000175100001770000000533614616416776024252 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "gpio.h" #include "system.h" static void some_delay(unsigned long counts) { unsigned long index = 0u; for (index = 0u; index < counts; ++index) system_nop(); } int main(void) { gpio_init_green_led(); while (1) { gpio_toggle_green_led(); some_delay(20000u); } } qbs-src-2.3.1/examples/baremetal/cc2540usbdongle/greenblink/gpio.c0000644000175100001770000000525414616416776024263 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "gpio.h" #include "system.h" #define GPIO_GREEN_LED_PIN_POS (1u) void gpio_init_green_led(void) { P0SEL = 0; // Choose the port. P0DIR = 0x01; // Set pin0 to output mode. } void gpio_toggle_green_led(void) { P0 ^= GPIO_GREEN_LED_PIN_POS; } qbs-src-2.3.1/examples/baremetal/cc2540usbdongle/cc2540usbdongle.qbs0000644000175100001770000000503114616416776024344 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ Project { name: "Examples for cc2540usbdongle board" references: [ "greenblink/greenblink.qbs" ] } qbs-src-2.3.1/examples/baremetal/pca10040/0000755000175100001770000000000014616416776017360 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/pca10040/greenblink/0000755000175100001770000000000014616416776021500 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/pca10040/greenblink/README.md0000644000175100001770000000055214616416776022761 0ustar runnerdockerThis example demonstrates how to build a bare-metal application using different ARM toolchains. It is designed for the Nordic pca10040 evaluation kit (based on nRF52832 MCU) and simply flashes the green LED on the board. The following toolchains are supported: * GNU Arm Embedded Toolchain * IAR Embedded Workbench * KEIL Microcontroller Development Kit qbs-src-2.3.1/examples/baremetal/pca10040/greenblink/gpio.h0000644000175100001770000000513214616416776022610 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef GPIO_H #define GPIO_H #ifdef __cplusplus extern "C" { #endif void gpio_init_green_led(void); void gpio_toggle_green_led(void); #ifdef __cplusplus } #endif #endif // GPIO_H qbs-src-2.3.1/examples/baremetal/pca10040/greenblink/system.h0000644000175100001770000000604114616416776023176 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef SYSTEM_H #define SYSTEM_H #include #ifdef __cplusplus extern "C" { #endif #define __IO volatile struct gpio_regs_map { uint32_t RESERVED0[321u]; __IO uint32_t OUT; __IO uint32_t OUTSET; __IO uint32_t OUTCLR; __IO uint32_t IN; __IO uint32_t DIR; __IO uint32_t DIRSET; __IO uint32_t DIRCLR; __IO uint32_t LATCH; __IO uint32_t DETECTMODE; uint32_t RESERVED1[118u]; __IO uint32_t PIN_CNF[32u]; }; #define GPIO_REGS_ADDRESS (0x50000000u) #define GPIOD_REGS_MAP ((struct gpio_regs_map *)GPIO_REGS_ADDRESS) #ifdef __cplusplus } #endif #endif // SYSTEM_H qbs-src-2.3.1/examples/baremetal/pca10040/greenblink/greenblink.qbs0000644000175100001770000001216214616416776024331 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ CppApplication { condition: { if (!qbs.architecture.startsWith("arm")) return false; return (qbs.toolchain.contains("gcc") || qbs.toolchain.contains("iar") || qbs.toolchain.contains("keil")) && !qbs.toolchain.contains("xcode") } name: "pca10040-greenblink" cpp.cLanguageVersion: "c99" cpp.positionIndependentCode: false // // GCC-specific properties and sources. // Properties { condition: qbs.toolchain.contains("gcc") cpp.assemblerFlags: [ "-mcpu=cortex-m4", "-mfloat-abi=hard", "-mfpu=fpv4-sp-d16", ] cpp.driverFlags: [ "-mcpu=cortex-m4", "-mfloat-abi=hard", "-mfpu=fpv4-sp-d16", "-specs=nosys.specs" ] } Group { condition: qbs.toolchain.contains("gcc") name: "GCC" prefix: "gcc/" Group { name: "Startup" fileTags: ["asm"] files: ["startup.s"] } Group { name: "Linker Script" fileTags: ["linkerscript"] files: ["flash.ld"] } } // // IAR-specific properties and sources. // Properties { condition: qbs.toolchain.contains("iar") cpp.assemblerFlags: [ "--cpu", "cortex-m4", "--fpu", "vfpv4_sp" ] cpp.driverFlags: [ "--cpu", "cortex-m4", "--fpu", "vfpv4_sp" ] } Group { condition: qbs.toolchain.contains("iar") name: "IAR" prefix: "iar/" Group { name: "Startup" fileTags: ["asm"] files: ["startup.s"] } Group { name: "Linker Script" fileTags: ["linkerscript"] files: ["flash.icf"] } } // // KEIL-specific properties and sources. // Properties { condition: qbs.toolchain.contains("keil") cpp.assemblerFlags: [ "--cpu", "cortex-m4.fp.sp" ] cpp.driverFlags: [ "--cpu", "cortex-m4.fp.sp" ] } Group { condition: qbs.toolchain.contains("keil") name: "KEIL" prefix: "keil/" Group { name: "Startup" fileTags: ["asm"] files: ["startup.s"] } Group { name: "Linker Script" fileTags: ["linkerscript"] files: ["flash.sct"] } } // // Common code. // Group { name: "Gpio" files: ["gpio.c", "gpio.h"] } Group { name: "System" files: ["system.h"] } files: ["main.c"] } qbs-src-2.3.1/examples/baremetal/pca10040/greenblink/iar/0000755000175100001770000000000014616416776022253 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/pca10040/greenblink/iar/startup.s0000644000175100001770000001753314616416776024152 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ MODULE ?cstartup SECTION CSTACK:DATA:NOROOT(3) SECTION .intvec:CODE:NOROOT(2) EXTERN __iar_program_start PUBLIC _vectors_table DATA _vectors_table ;; Generic interrupts offset. DCD sfe(CSTACK) ; Initial stack pointer value. DCD reset_handler ; Reset. DCD 0 ; NMI. DCD 0 ; Hard fault. DCD 0 ; Memory management fault. DCD 0 ; Bus fault. DCD 0 ; Usage fault. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; SVC. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; PendSV. DCD 0 ; SysTick. ;; External interrupts offset. DCD 0 ; POWER CLOCK. DCD 0 ; RADIO. DCD 0 ; UARTE0/UART0 DCD 0 ; SPIM0/SPIS0/TWIM0/TWIS0/SPI0/TWI0. DCD 0 ; SPIM1/SPIS1/TWIM1/TWIS1/SPI1/TWI1. DCD 0 ; NFCT. DCD 0 ; GPIOTE. DCD 0 ; SAADC. DCD 0 ; TIMER0. DCD 0 ; TIMER1. DCD 0 ; TIMER2. DCD 0 ; RTC0. DCD 0 ; TEMP. DCD 0 ; RNG. DCD 0 ; ECB. DCD 0 ; CCM_AAR. DCD 0 ; WDT. DCD 0 ; RTC1. DCD 0 ; QDEC. DCD 0 ; COMP_LPCOMP. DCD 0 ; SWI0_EGU0. DCD 0 ; SWI1_EGU1. DCD 0 ; SWI2_EGU2. DCD 0 ; SWI3_EGU3. DCD 0 ; SWI4_EGU4. DCD 0 ; SWI5_EGU5. DCD 0 ; TIMER3. DCD 0 ; TIMER4. DCD 0 ; PWM0. DCD 0 ; PDM. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; MWU. DCD 0 ; PWM1. DCD 0 ; PWM2. DCD 0 ; SPIM2/SPIS2/SPI2. DCD 0 ; RTC2. DCD 0 ; I2S. DCD 0 ; FPU. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. ;; Reset handler. THUMB PUBWEAK reset_handler SECTION .text:CODE:REORDER:NOROOT(2) reset_handler BLX R0 LDR R0, =__iar_program_start BX R0 END qbs-src-2.3.1/examples/baremetal/pca10040/greenblink/iar/flash.icf0000644000175100001770000001174214616416776024040 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ define symbol _start_of_intvec_section = 0x00000000; define symbol _start_of_irom1_section = 0x00000000; define symbol _end_of_irom1_section = 0x0007FFFF; define symbol _start_of_irom2_section = 0x0; define symbol _end_of_irom2_section = 0x0; define symbol _start_of_erom1_section = 0x0; define symbol _end_of_erom1_section = 0x0; define symbol _start_of_erom2_section = 0x0; define symbol _end_of_erom2_section = 0x0; define symbol _start_of_erom3_section = 0x0; define symbol _end_of_erom3_section = 0x0; define symbol _start_of_iram1_section = 0x20000000; define symbol _end_of_iram1_section = 0x2000FFFF; define symbol _start_of_iram2_section = 0x0; define symbol _end_of_iram2_section = 0x0; define symbol _start_of_eram1_section = 0x0; define symbol _end_of_eram1_section = 0x0; define symbol _start_of_eram2_section = 0x0; define symbol _end_of_eram2_section = 0x0; define symbol _start_of_eram3_section = 0x0; define symbol _end_of_eram3_section = 0x0; define symbol _min_stack_size = 0x2000; define symbol _min_proc_stack_size = 0x0; define symbol _min_heap_size = 0x2000; define memory mem with size = 4G; define region irom_section = mem:[from _start_of_irom1_section to _end_of_irom1_section] | mem:[from _start_of_irom2_section to _end_of_irom2_section]; define region erom_section = mem:[from _start_of_erom1_section to _end_of_erom1_section] | mem:[from _start_of_erom2_section to _end_of_erom2_section] | mem:[from _start_of_erom3_section to _end_of_erom3_section]; define region iram_section = mem:[from _start_of_iram1_section to _end_of_iram1_section] | mem:[from _start_of_iram2_section to _end_of_iram2_section]; define region eram_section = mem:[from _start_of_eram1_section to _end_of_eram1_section] | mem:[from _start_of_eram2_section to _end_of_eram2_section] | mem:[from _start_of_eram3_section to _end_of_eram3_section]; define block CSTACK with alignment = 8, size = _min_stack_size { }; define block PROC_STACK with alignment = 8, size = _min_proc_stack_size { }; define block HEAP with alignment = 8, size = _min_heap_size { }; initialize by copy { readwrite }; place at address mem:_start_of_intvec_section { readonly section .intvec }; place in irom_section { readonly }; place in erom_section { readonly section application_specific_ro }; place in iram_section { readwrite, block CSTACK, block HEAP, block PROC_STACK }; place in eram_section { readwrite section application_specific_rw }; qbs-src-2.3.1/examples/baremetal/pca10040/greenblink/gcc/0000755000175100001770000000000014616416776022234 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/pca10040/greenblink/gcc/flash.ld0000644000175100001770000001162614616416776023660 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ ENTRY(reset_handler) MEMORY { FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x80000 RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x10000 CODE_RAM (rwx) : ORIGIN = 0x800000, LENGTH = 0x10000 } SECTIONS { .text : { KEEP(*(.isr_vector)) *(.text*) KEEP(*(.init)) KEEP(*(.fini)) /* .ctors */ *crtbegin.o(.ctors) *crtbegin?.o(.ctors) *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) *(SORT(.ctors.*)) *(.ctors) /* .dtors */ *crtbegin.o(.dtors) *crtbegin?.o(.dtors) *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) *(SORT(.dtors.*)) *(.dtors) *(.rodata*) *(.eh_frame*) . = ALIGN(4); } > FLASH .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } > FLASH _start_of_exidx_section = .; .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) . = ALIGN(4); } > FLASH _end_of_exidx_section = .; _end_of_code_section = .; .data : AT (_end_of_code_section) { _start_of_data_section = .; *(vtable) *(.data*) . = ALIGN(4); /* preinit data */ PROVIDE_HIDDEN(__preinit_array_start = .); *(.preinit_array) PROVIDE_HIDDEN(__preinit_array_end = .); . = ALIGN(4); /* init data */ PROVIDE_HIDDEN(__init_array_start = .); *(SORT(.init_array.*)) *(.init_array) PROVIDE_HIDDEN(__init_array_end = .); . = ALIGN(4); /* finit data */ PROVIDE_HIDDEN(__fini_array_start = .); *(SORT(.fini_array.*)) *(.fini_array) PROVIDE_HIDDEN(__fini_array_end = .); *(.jcr) . = ALIGN(4); /* All data end */ _end_of_data_section = .; } > RAM .bss : { . = ALIGN(4); __bss_start__ = .; *(.bss*) *(COMMON) . = ALIGN(4); __bss_end__ = .; } > RAM .heap (COPY): { __end__ = .; end = __end__; *(.heap*) _heap_limit = .; } > RAM .stack_dummy (COPY): { *(.stack*) } > RAM /* Set stack top to end of RAM, and stack limit move down by size of stack_dummy section. */ _end_of_stack = ORIGIN(RAM) + LENGTH(RAM); _stack_limit = _end_of_stack - SIZEOF(.stack_dummy); PROVIDE(__stack = _end_of_stack); /* Check if data + heap + stack exceeds RAM limit */ ASSERT(_stack_limit >= _heap_limit, "region RAM overflowed with stack") } qbs-src-2.3.1/examples/baremetal/pca10040/greenblink/gcc/startup.s0000644000175100001770000002226514616416776024131 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ .syntax unified .arch armv7e-m .thumb // Define the stack. .section .stack .align 3 .equ _size_of_stack, 8192 .globl _end_of_stack .globl _stack_limit _stack_limit: .space _size_of_stack .size _stack_limit, . - _stack_limit _end_of_stack: .size _end_of_stack, . - _end_of_stack // Define the heap. .section .heap .align 3 .equ _size_of_heap, 8192 .globl _end_of_heap .globl _heap_limit _end_of_heap: .space _size_of_heap .size _end_of_heap, . - _end_of_heap _heap_limit: .size _heap_limit, . - _heap_limit // Define the empty vectors table. .section .isr_vector, "ax" .align 2 .globl _vectors_table _vectors_table: // Generic interrupts offset. .word _end_of_stack // Initial stack pointer value. .word reset_handler // Reset. .word 0 // NMI. .word 0 // Hard fault. .word 0 // Memory management fault. .word 0 // Bus fault. .word 0 // Usage fault. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // SVC. .word 0 // Debug monitor. .word 0 // Reserved. .word 0 // PendSV. .word 0 // SysTick. // External interrupts offset. .word 0 // POWER CLOCK. .word 0 // RADIO. .word 0 // UARTE0/UART0 .word 0 // SPIM0/SPIS0/TWIM0/TWIS0/SPI0/TWI0. .word 0 // SPIM1/SPIS1/TWIM1/TWIS1/SPI1/TWI1. .word 0 // NFCT. .word 0 // GPIOTE. .word 0 // SAADC. .word 0 // TIMER0. .word 0 // TIMER1. .word 0 // TIMER2. .word 0 // RTC0. .word 0 // TEMP. .word 0 // RNG. .word 0 // ECB. .word 0 // CCM_AAR. .word 0 // WDT. .word 0 // RTC1. .word 0 // QDEC. .word 0 // COMP_LPCOMP. .word 0 // SWI0_EGU0. .word 0 // SWI1_EGU1. .word 0 // SWI2_EGU2. .word 0 // SWI3_EGU3. .word 0 // SWI4_EGU4. .word 0 // SWI5_EGU5. .word 0 // TIMER3. .word 0 // TIMER4. .word 0 // PWM0. .word 0 // PDM. .word 0 // Reserved. .word 0 // Reserved. .word 0 // MWU. .word 0 // PWM1. .word 0 // PWM2. .word 0 // SPIM2/SPIS2/SPI2. .word 0 // RTC2. .word 0 // I2S. .word 0 // FPU. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .size _vectors_table, . - _vectors_table // Define the 'reset_handler' function, which is an entry point. .text .thumb .thumb_func .align 1 .globl reset_handler .type reset_handler, %function reset_handler: // Loop to copy data from read only memory to RAM. ldr r1, =_end_of_code_section ldr r2, =_start_of_data_section ldr r3, =__bss_start__ subs r3, r3, r2 ble _copy_data_init_done _copy_data_init: subs r3, r3, #4 ldr r0, [r1,r3] str r0, [r2,r3] bgt _copy_data_init _copy_data_init_done: // Zero fill the bss segment. ldr r1, =__bss_start__ ldr r2, =__bss_end__ movs r0, 0 subs r2, r2, r1 ble _loop_fill_zero_bss_done _loop_fill_zero_bss: subs r2, r2, #4 str r0, [r1, r2] bgt _loop_fill_zero_bss _loop_fill_zero_bss_done: // Call the application's entry point. bl main bx lr .size reset_handler, . - reset_handler qbs-src-2.3.1/examples/baremetal/pca10040/greenblink/main.c0000644000175100001770000000531014616416776022567 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "gpio.h" #include static void some_delay(uint32_t counts) { for (uint32_t index = 0u; index < counts; ++index) __asm("nop"); } int main(void) { gpio_init_green_led(); while (1) { gpio_toggle_green_led(); some_delay(1000000u); } } qbs-src-2.3.1/examples/baremetal/pca10040/greenblink/keil/0000755000175100001770000000000014616416776022424 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/pca10040/greenblink/keil/startup.s0000644000175100001770000002021314616416776024310 0ustar runnerdocker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; Copyright (C) 2020 Denis Shienkov ;; Contact: https://www.qt.io/licensing/ ;; ;; This file is part of the examples of Qbs. ;; ;; $QT_BEGIN_LICENSE:BSD$ ;; Commercial License Usage ;; Licensees holding valid commercial Qt licenses may use this file in ;; accordance with the commercial license agreement provided with the ;; Software or, alternatively, in accordance with the terms contained in ;; a written agreement between you and The Qt Company. For licensing terms ;; and conditions see https://www.qt.io/terms-conditions. For further ;; information use the contact form at https://www.qt.io/contact-us. ;; ;; BSD License Usage ;; Alternatively, you may use this file under the terms of the BSD license ;; as follows: ;; ;; "Redistribution and use in source and binary forms, with or without ;; modification, are permitted provided that the following conditions are ;; met: ;; * Redistributions of source code must retain the above copyright ;; notice, this list of conditions and the following disclaimer. ;; * Redistributions in binary form must reproduce the above copyright ;; notice, this list of conditions and the following disclaimer in ;; the documentation and/or other materials provided with the ;; distribution. ;; * Neither the name of The Qt Company Ltd nor the names of its ;; contributors may be used to endorse or promote products derived ;; from this software without specific prior written permission. ;; ;; ;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ;; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ;; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ;; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ;; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ;; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ;; ;; $QT_END_LICENSE$ ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; _size_of_stack EQU 0x2000 _size_of_heap EQU 0x2000 ;; Stack configuration. AREA STACK, NOINIT, READWRITE, ALIGN=3 _start_of_stack SPACE _size_of_stack _end_of_stack ;; Heap configuration. AREA HEAP, NOINIT, READWRITE, ALIGN=3 _start_of_heap SPACE _size_of_heap _end_of_heap PRESERVE8 THUMB ;; Define the empty vectors table. AREA RESET, DATA, READONLY _vectors_table ;; Generic interrupts offset. DCD _end_of_stack ; Initial stack pointer value. DCD reset_handler ; Reset. DCD 0 ; NMI. DCD 0 ; Hard fault. DCD 0 ; Memory management fault. DCD 0 ; Bus fault. DCD 0 ; Usage fault. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; SVC. DCD 0 ; Debug monitor. DCD 0 ; Reserved. DCD 0 ; PendSV. DCD 0 ; SysTick. ;; External interrupts offset. DCD 0 ; Power clock. DCD 0 ; Radio. DCD 0 ; UARTE0/UART0. DCD 0 ; SPIM0/SPIS0/TWIM0/TWIS0/SPI0/TWI0. DCD 0 ; SPIM1/SPIS1/TWIM1/TWIS1/SPI1/TWI1. DCD 0 ; NFCT. DCD 0 ; GPIOTE. DCD 0 ; SAADC. DCD 0 ; TIMER0. DCD 0 ; TIMER1. DCD 0 ; TIMER2. DCD 0 ; RTC0. DCD 0 ; TEMP. DCD 0 ; RNG. DCD 0 ; ECB. DCD 0 ; CCM/AAR. DCD 0 ; WDT. DCD 0 ; RTC1. DCD 0 ; QDEC. DCD 0 ; COMP/LPCOMP. DCD 0 ; SWI0/EGU0. DCD 0 ; SWI1/EGU1. DCD 0 ; SWI2/EGU2. DCD 0 ; SWI3/EGU3. DCD 0 ; SWI4/EGU4. DCD 0 ; SWI5/EGU5. DCD 0 ; TIMER3. DCD 0 ; TIMER4. DCD 0 ; PWM0. DCD 0 ; PDM. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; MWU. DCD 0 ; PWM1. DCD 0 ; PWM2. DCD 0 ; SPIM2/SPIS2/SPI2. DCD 0 ; RTC2. DCD 0 ; I2S. DCD 0 ; FPU. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. _end_of_vectors_table _size_of_vectors_table EQU _end_of_vectors_table - _vectors_table AREA |.text|, CODE, READONLY ;; Reset handler. reset_handler PROC EXPORT reset_handler [WEAK] IMPORT main LDR R0, =main BX R0 ENDP ALIGN END qbs-src-2.3.1/examples/baremetal/pca10040/greenblink/keil/flash.sct0000644000175100001770000000534514616416776024243 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ ;; Load region size_region. LR_IROM1 0x00000000 0x00080000 { ;; Load address = execution address. ER_IROM1 0x00000000 0x00080000 { *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) .ANY (+XO) } ; RW data. RW_IRAM1 0x20000000 0x00008000 { .ANY (+RW +ZI) } } qbs-src-2.3.1/examples/baremetal/pca10040/greenblink/gpio.c0000644000175100001770000001063014616416776022602 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "gpio.h" #include "system.h" #define GPIO_GREEN_LED_PIN_POS (17u) #define GPIO_GREEN_LED_PIN (1u << GPIO_GREEN_LED_PIN_POS) // Pin direction attributes. #define GPIO_PIN_CNF_DIR_POS (0u) // Position of DIR field. #define GPIO_PIN_CNF_DIR_OUT (1u) // Configure pin as an output pin. #define GPIO_PIN_CNF_DIR_MSK (GPIO_PIN_CNF_DIR_OUT << GPIO_PIN_CNF_DIR_POS) // Pin input buffer attributes. #define GPIO_PIN_CNF_INPUT_POS (1u) // Position of INPUT field. #define GPIO_PIN_CNF_INPUT_OFF (1u) // Disconnect input buffer. #define GPIO_PIN_CNF_INPUT_MSK (GPIO_PIN_CNF_INPUT_OFF << GPIO_PIN_CNF_INPUT_POS) // Pin pull attributes. #define GPIO_PIN_CNF_PULL_POS (2u) // Position of PULL field. #define GPIO_PIN_CNF_PULL_OFF (0u) // No pull. #define GPIO_PIN_CNF_PULL_MSK (GPIO_PIN_CNF_PULL_OFF << GPIO_PIN_CNF_PULL_POS) // Pin drive attributes. #define GPIO_PIN_CNF_DRIVE_POS (8u) // Position of DRIVE field. #define GPIO_PIN_CNF_DRIVE_S0S1 (0u) // Standard '0', standard '1'. #define GPIO_PIN_CNF_DRIVE_MSK (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_POS) // Pin sense attributes. #define GPIO_PIN_CNF_SENSE_POS (16u) // Position of SENSE field. #define GPIO_PIN_CNF_SENSE_OFF (0u) // Disabled. #define GPIO_PIN_CNF_SENSE_MSK (GPIO_PIN_CNF_SENSE_OFF << GPIO_PIN_CNF_SENSE_POS) void gpio_init_green_led(void) { GPIOD_REGS_MAP->PIN_CNF[GPIO_GREEN_LED_PIN_POS] = (GPIO_PIN_CNF_DIR_MSK | GPIO_PIN_CNF_INPUT_MSK | GPIO_PIN_CNF_PULL_MSK | GPIO_PIN_CNF_DRIVE_MSK | GPIO_PIN_CNF_SENSE_MSK); } void gpio_toggle_green_led(void) { const uint32_t gpio_state = GPIOD_REGS_MAP->OUT; GPIOD_REGS_MAP->OUTSET = (GPIO_GREEN_LED_PIN & ~gpio_state); GPIOD_REGS_MAP->OUTCLR = (GPIO_GREEN_LED_PIN & gpio_state); } qbs-src-2.3.1/examples/baremetal/pca10040/pca10040.qbs0000644000175100001770000000502214616416776021216 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ Project { name: "Examples for pca10040 board" references: [ "greenblink/greenblink.qbs" ] } qbs-src-2.3.1/examples/baremetal/stm8s103f3/0000755000175100001770000000000014616416776017763 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/stm8s103f3/stm8s103f3.qbs0000644000175100001770000000502014616416776022222 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ Project { name: "Examples for stm8s103f3 board" references: [ "redblink/redblink.qbs" ] } qbs-src-2.3.1/examples/baremetal/stm8s103f3/redblink/0000755000175100001770000000000014616416776021555 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/stm8s103f3/redblink/README.md0000644000175100001770000000045114616416776023034 0ustar runnerdockerThis example demonstrates how to build a bare-metal application using different STM8 toolchains. It is designed for the STM8 target board (based on STMicroelectronics stm8s103f3 MCU) and simply flashes the red LED on the board. The following toolchains are supported: * IAR Embedded Workbench qbs-src-2.3.1/examples/baremetal/stm8s103f3/redblink/gpio.h0000644000175100001770000000512614616416776022670 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef GPIO_H #define GPIO_H #ifdef __cplusplus extern "C" { #endif void gpio_init_red_led(void); void gpio_toggle_red_led(void); #ifdef __cplusplus } #endif #endif // GPIO_H qbs-src-2.3.1/examples/baremetal/stm8s103f3/redblink/redblink.qbs0000644000175100001770000000717314616416776024066 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ CppApplication { condition: { if (!qbs.architecture.contains("stm8")) return false; return qbs.toolchain.contains("iar") || qbs.toolchain.contains("sdcc") } name: "stm8s103f3-redblink" cpp.positionIndependentCode: false // // IAR-specific properties and sources. // Properties { condition: qbs.toolchain.contains("iar") cpp.commonCompilerFlags: ["-e"] cpp.driverLinkerFlags: [ "--config_def", "_CSTACK_SIZE=0x100", "--config_def", "_HEAP_SIZE=0x100", ] } Group { condition: qbs.toolchain.contains("iar") name: "IAR" prefix: "iar/" Group { name: "Linker Script" prefix: cpp.toolchainInstallPath + "/../config/" fileTags: ["linkerscript"] files: ["lnkstm8s103f3.icf"] } } // // SDCC-specific properties and sources. // Properties { condition: qbs.toolchain.contains("sdcc") } // // Common code. // Group { name: "Gpio" files: ["gpio.c", "gpio.h"] } Group { name: "System" files: ["system.h"] } files: ["main.c"] } qbs-src-2.3.1/examples/baremetal/stm8s103f3/redblink/system.h0000644000175100001770000000651214616416776023256 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef SYSTEM_H #define SYSTEM_H #ifdef __cplusplus extern "C" { #endif // Define required registers of Port B (where the LED is connected): // * PB_ODR - Output Data Register. // * PB_DDR - Data Direction Register. // * PB_CR1 - Control Register #1. // * PB_CR2 - Control Register #2. #if defined(__ICCSTM8__) # define system_nop() __asm("nop") __near __no_init volatile unsigned char PB_ODR @ 0x5005; __near __no_init volatile unsigned char PB_DDR @ 0x5007; __near __no_init volatile unsigned char PB_CR1 @ 0x5008; __near __no_init volatile unsigned char PB_CR2 @ 0x5009; #elif defined (__SDCC_stm8) # define system_nop() __asm nop __endasm #define PB_ODR *(volatile unsigned char *)0x5005 #define PB_DDR *(volatile unsigned char *)0x5007 #define PB_CR1 *(volatile unsigned char *)0x5008 #define PB_CR2 *(volatile unsigned char *)0x5009 #else #error "Unsupported toolchain" #endif #ifdef __cplusplus } #endif #endif // SYSTEM_H qbs-src-2.3.1/examples/baremetal/stm8s103f3/redblink/main.c0000644000175100001770000000533214616416776022650 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "gpio.h" #include "system.h" static void some_delay(unsigned long counts) { unsigned long index = 0u; for (index = 0u; index < counts; ++index) system_nop(); } int main(void) { gpio_init_red_led(); while (1) { gpio_toggle_red_led(); some_delay(20000u); } } qbs-src-2.3.1/examples/baremetal/stm8s103f3/redblink/gpio.c0000644000175100001770000000555114616416776022665 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "gpio.h" #include "system.h" // A LED is connected to the pin #5 of Port B. #define GPIO_RED_LED_PIN_POS (0x20u) void gpio_init_red_led(void) { PB_ODR = 0x00; // Turn off all pins. PB_DDR = GPIO_RED_LED_PIN_POS; // Configure Pin as output. PB_CR1 = GPIO_RED_LED_PIN_POS; // Set Pin to Push-Pull. PB_CR2 = GPIO_RED_LED_PIN_POS; // Set Pin to Push-Pull. } void gpio_toggle_red_led(void) { PB_ODR ^= GPIO_RED_LED_PIN_POS; } qbs-src-2.3.1/examples/baremetal/pca10001/0000755000175100001770000000000014616416776017355 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/pca10001/greenblink/0000755000175100001770000000000014616416776021475 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/pca10001/greenblink/README.md0000644000175100001770000000056514616416776022762 0ustar runnerdockerThis example demonstrates how to build a bare-metal application using different ARM toolchains. It is designed for the Nordic pca100001/pca100024 evaluation kit (based on nRF51822 MCU) and simply flashes the green LED on the board. The following toolchains are supported: * GNU Arm Embedded Toolchain * IAR Embedded Workbench * KEIL Microcontroller Development Kit qbs-src-2.3.1/examples/baremetal/pca10001/greenblink/gpio.h0000644000175100001770000000513214616416776022605 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef GPIO_H #define GPIO_H #ifdef __cplusplus extern "C" { #endif void gpio_init_green_led(void); void gpio_toggle_green_led(void); #ifdef __cplusplus } #endif #endif // GPIO_H qbs-src-2.3.1/examples/baremetal/pca10001/greenblink/system.h0000644000175100001770000000575214616416776023203 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef SYSTEM_H #define SYSTEM_H #include #ifdef __cplusplus extern "C" { #endif #define __IO volatile struct gpio_regs_map { uint32_t RESERVED0[321u]; __IO uint32_t OUT; __IO uint32_t OUTSET; __IO uint32_t OUTCLR; __IO uint32_t IN; __IO uint32_t DIR; __IO uint32_t DIRSET; __IO uint32_t DIRCLR; uint32_t RESERVED1[120u]; __IO uint32_t PIN_CNF[32u]; }; #define GPIO_REGS_ADDRESS (0x50000000u) #define GPIOD_REGS_MAP ((struct gpio_regs_map *)GPIO_REGS_ADDRESS) #ifdef __cplusplus } #endif #endif // SYSTEM_H qbs-src-2.3.1/examples/baremetal/pca10001/greenblink/greenblink.qbs0000644000175100001770000001164214616416776024330 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ CppApplication { condition: { if (!qbs.architecture.startsWith("arm")) return false; return (qbs.toolchain.contains("gcc") || qbs.toolchain.contains("iar") || qbs.toolchain.contains("keil")) && !qbs.toolchain.contains("xcode") } name: "pca10001-greenblink" cpp.cLanguageVersion: "c99" cpp.positionIndependentCode: false // // GCC-specific properties and sources. // Properties { condition: qbs.toolchain.contains("gcc") cpp.assemblerFlags: [ "-mcpu=cortex-m0", ] cpp.driverFlags: [ "-mcpu=cortex-m0", "-specs=nosys.specs" ] } Group { condition: qbs.toolchain.contains("gcc") name: "GCC" prefix: "gcc/" Group { name: "Startup" fileTags: ["asm"] files: ["startup.s"] } Group { name: "Linker Script" fileTags: ["linkerscript"] files: ["flash.ld"] } } // // IAR-specific properties and sources. // Properties { condition: qbs.toolchain.contains("iar") cpp.assemblerFlags: [ "--cpu", "cortex-m0" ] cpp.driverFlags: [ "--cpu", "cortex-m0" ] } Group { condition: qbs.toolchain.contains("iar") name: "IAR" prefix: "iar/" Group { name: "Startup" fileTags: ["asm"] files: ["startup.s"] } Group { name: "Linker Script" fileTags: ["linkerscript"] files: ["flash.icf"] } } // // KEIL-specific properties and sources. // Properties { condition: qbs.toolchain.contains("keil") cpp.assemblerFlags: [ "--cpu", "cortex-m0" ] cpp.driverFlags: [ "--cpu", "cortex-m0" ] } Group { condition: qbs.toolchain.contains("keil") name: "KEIL" prefix: "keil/" Group { name: "Startup" fileTags: ["asm"] files: ["startup.s"] } Group { name: "Linker Script" fileTags: ["linkerscript"] files: ["flash.sct"] } } // // Common code. // Group { name: "Gpio" files: ["gpio.c", "gpio.h"] } Group { name: "System" files: ["system.h"] } files: ["main.c"] } qbs-src-2.3.1/examples/baremetal/pca10001/greenblink/iar/0000755000175100001770000000000014616416776022250 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/pca10001/greenblink/iar/startup.s0000644000175100001770000001116614616416776024143 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ MODULE ?cstartup SECTION CSTACK:DATA:NOROOT(3) SECTION .intvec:CODE:NOROOT(2) EXTERN __iar_program_start PUBLIC _vectors_table DATA _vectors_table ;; Generic interrupts offset. DCD sfe(CSTACK) ; Initial stack pointer value. DCD reset_handler ; Reset. DCD 0 ; NMI. DCD 0 ; Hard fault. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; SVC. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; PendSV. DCD 0 ; SysTick. ;; External interrupts offset. DCD 0 ; Power clock. DCD 0 ; Radio. DCD 0 ; UART0. DCD 0 ; SPI0/TWI0 DCD 0 ; SPI1/TWI1 DCD 0 ; Reserved DCD 0 ; GPIOTE DCD 0 ; ADC DCD 0 ; TIMER0 DCD 0 ; TIMER1 DCD 0 ; TIMER2 DCD 0 ; RTC0 DCD 0 ; TEMP DCD 0 ; RNG DCD 0 ; ECB DCD 0 ; CCM/AAR DCD 0 ; WDT DCD 0 ; RTC1 DCD 0 ; QDEC DCD 0 ; LPCOMP DCD 0 ; SWI0 DCD 0 ; SWI1 DCD 0 ; SWI2 DCD 0 ; SWI3 DCD 0 ; SWI4 DCD 0 ; SWI5 DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved ;; Reset handler. THUMB PUBWEAK reset_handler SECTION .text:CODE:REORDER:NOROOT(2) reset_handler BLX R0 LDR R0, =__iar_program_start BX R0 END qbs-src-2.3.1/examples/baremetal/pca10001/greenblink/iar/flash.icf0000644000175100001770000000644314616416776024037 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ define symbol _start_of_intvec_section = 0x00000000; define symbol _start_of_ram_section = 0x20000000; define symbol _end_of_ram_section = 0x20003FFF; define symbol _start_of_flash_section = 0x00000000; define symbol _end_of_flash_section = 0x0003FFFF; define symbol _min_stack_size = 0x800; define symbol _min_heap_size = 0x800; define memory mem with size = 4G; define region flash_section = mem:[from _start_of_flash_section to _end_of_flash_section]; define region ram_section = mem:[from _start_of_ram_section to _end_of_ram_section]; define block CSTACK with alignment = 8, size = _min_stack_size { }; define block HEAP with alignment = 8, size = _min_heap_size { }; initialize by copy { readwrite }; place at address mem:_start_of_intvec_section { readonly section .intvec }; place in flash_section { readonly }; place in ram_section { readwrite, block CSTACK, block HEAP }; qbs-src-2.3.1/examples/baremetal/pca10001/greenblink/gcc/0000755000175100001770000000000014616416776022231 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/pca10001/greenblink/gcc/flash.ld0000644000175100001770000001153614616416776023655 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ ENTRY(reset_handler) MEMORY { FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x40000 RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x4000 } SECTIONS { .text : { KEEP(*(.isr_vector)) *(.text*) KEEP(*(.init)) KEEP(*(.fini)) /* .ctors */ *crtbegin.o(.ctors) *crtbegin?.o(.ctors) *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) *(SORT(.ctors.*)) *(.ctors) /* .dtors */ *crtbegin.o(.dtors) *crtbegin?.o(.dtors) *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) *(SORT(.dtors.*)) *(.dtors) *(.rodata*) *(.eh_frame*) . = ALIGN(4); } > FLASH .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } > FLASH _start_of_exidx_section = .; .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) . = ALIGN(4); } > FLASH _end_of_exidx_section = .; _end_of_code_section = .; .data : AT (_end_of_code_section) { _start_of_data_section = .; *(vtable) *(.data*) . = ALIGN(4); /* preinit data */ PROVIDE_HIDDEN(__preinit_array_start = .); *(.preinit_array) PROVIDE_HIDDEN(__preinit_array_end = .); . = ALIGN(4); /* init data */ PROVIDE_HIDDEN(__init_array_start = .); *(SORT(.init_array.*)) *(.init_array) PROVIDE_HIDDEN(__init_array_end = .); . = ALIGN(4); /* finit data */ PROVIDE_HIDDEN(__fini_array_start = .); *(SORT(.fini_array.*)) *(.fini_array) PROVIDE_HIDDEN(__fini_array_end = .); *(.jcr) . = ALIGN(4); /* All data end */ _end_of_data_section = .; } > RAM .bss : { . = ALIGN(4); __bss_start__ = .; *(.bss*) *(COMMON) . = ALIGN(4); __bss_end__ = .; } > RAM .heap (COPY): { __end__ = .; end = __end__; *(.heap*) _heap_limit = .; } > RAM .stack_dummy (COPY): { *(.stack*) } > RAM /* Set stack top to end of RAM, and stack limit move down by size of stack_dummy section. */ _end_of_stack = ORIGIN(RAM) + LENGTH(RAM); _stack_limit = _end_of_stack - SIZEOF(.stack_dummy); PROVIDE(__stack = _end_of_stack); /* Check if data + heap + stack exceeds RAM limit */ ASSERT(_stack_limit >= _heap_limit, "region RAM overflowed with stack") } qbs-src-2.3.1/examples/baremetal/pca10001/greenblink/gcc/startup.s0000644000175100001770000001362514616416776024126 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ .syntax unified .arch armv7e-m .thumb // Define the stack. .section .stack .align 3 .equ _size_of_stack, 2048 .globl _end_of_stack .globl _stack_limit _stack_limit: .space _size_of_stack .size _stack_limit, . - _stack_limit _end_of_stack: .size _end_of_stack, . - _end_of_stack // Define the heap. .section .heap .align 3 .equ _size_of_heap, 2048 .globl _end_of_heap .globl _heap_limit _end_of_heap: .space _size_of_heap .size _end_of_heap, . - _end_of_heap _heap_limit: .size _heap_limit, . - _heap_limit // Define the empty vectors table. .section .isr_vector, "ax" .align 2 .globl _vectors_table _vectors_table: // Generic interrupts offset. .word _end_of_stack // Initial stack pointer value. .word reset_handler // Reset. .word 0 // NMI. .word 0 // Hard fault. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // SVC. .word 0 // Reserved. .word 0 // Reserved. .word 0 // PendSV. .word 0 // SysTick. // External interrupts offset. .word 0 // POWER CLOCK. .word 0 // RADIO. .word 0 // UART0 .word 0 // SPI0/TWI0. .word 0 // SPI1/TWI1. .word 0 // Reserved. .word 0 // GPIOTE. .word 0 // ADC. .word 0 // TIMER0. .word 0 // TIMER1. .word 0 // TIMER2. .word 0 // RTC0. .word 0 // TEMP. .word 0 // RNG. .word 0 // ECB. .word 0 // CCM_AAR. .word 0 // WDT. .word 0 // RTC1. .word 0 // QDEC. .word 0 // LPCOMP. .word 0 // SWI0. .word 0 // SWI1. .word 0 // SWI2. .word 0 // SWI3. .word 0 // SWI4. .word 0 // SWI5. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .size _vectors_table, . - _vectors_table // Define the 'reset_handler' function, which is an entry point. .text .thumb .thumb_func .align 1 .globl reset_handler .type reset_handler, %function reset_handler: // Loop to copy data from read only memory to RAM. ldr r1, =_end_of_code_section ldr r2, =_start_of_data_section ldr r3, =__bss_start__ subs r3, r3, r2 ble _copy_data_init_done _copy_data_init: subs r3, r3, #4 ldr r0, [r1,r3] str r0, [r2,r3] bgt _copy_data_init _copy_data_init_done: // Zero fill the bss segment. ldr r1, =__bss_start__ ldr r2, =__bss_end__ movs r0, 0 subs r2, r2, r1 ble _loop_fill_zero_bss_done _loop_fill_zero_bss: subs r2, r2, #4 str r0, [r1, r2] bgt _loop_fill_zero_bss _loop_fill_zero_bss_done: // Call the application's entry point. bl main bx lr .size reset_handler, . - reset_handler qbs-src-2.3.1/examples/baremetal/pca10001/greenblink/main.c0000644000175100001770000000531014616416776022564 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "gpio.h" #include static void some_delay(uint32_t counts) { for (uint32_t index = 0u; index < counts; ++index) __asm("nop"); } int main(void) { gpio_init_green_led(); while (1) { gpio_toggle_green_led(); some_delay(1000000u); } } qbs-src-2.3.1/examples/baremetal/pca10001/greenblink/keil/0000755000175100001770000000000014616416776022421 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/pca10001/greenblink/keil/startup.s0000644000175100001770000001163014616416776024310 0ustar runnerdocker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; Copyright (C) 2020 Denis Shienkov ;; Contact: https://www.qt.io/licensing/ ;; ;; This file is part of the examples of Qbs. ;; ;; $QT_BEGIN_LICENSE:BSD$ ;; Commercial License Usage ;; Licensees holding valid commercial Qt licenses may use this file in ;; accordance with the commercial license agreement provided with the ;; Software or, alternatively, in accordance with the terms contained in ;; a written agreement between you and The Qt Company. For licensing terms ;; and conditions see https://www.qt.io/terms-conditions. For further ;; information use the contact form at https://www.qt.io/contact-us. ;; ;; BSD License Usage ;; Alternatively, you may use this file under the terms of the BSD license ;; as follows: ;; ;; "Redistribution and use in source and binary forms, with or without ;; modification, are permitted provided that the following conditions are ;; met: ;; * Redistributions of source code must retain the above copyright ;; notice, this list of conditions and the following disclaimer. ;; * Redistributions in binary form must reproduce the above copyright ;; notice, this list of conditions and the following disclaimer in ;; the documentation and/or other materials provided with the ;; distribution. ;; * Neither the name of The Qt Company Ltd nor the names of its ;; contributors may be used to endorse or promote products derived ;; from this software without specific prior written permission. ;; ;; ;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ;; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ;; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ;; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ;; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ;; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ;; ;; $QT_END_LICENSE$ ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; _size_of_stack EQU 0x800 _size_of_heap EQU 0x800 ;; Stack configuration. AREA STACK, NOINIT, READWRITE, ALIGN=3 _start_of_stack SPACE _size_of_stack _end_of_stack ;; Heap configuration. AREA HEAP, NOINIT, READWRITE, ALIGN=3 _start_of_heap SPACE _size_of_heap _end_of_heap PRESERVE8 THUMB ;; Define the empty vectors table. AREA RESET, DATA, READONLY _vectors_table ;; Generic interrupts offset. DCD _end_of_stack ; Initial stack pointer value. DCD reset_handler ; Reset. DCD 0 ; NMI. DCD 0 ; Hard fault. DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; SVC. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; PendSV. DCD 0 ; SysTick. ;; External interrupts offset. DCD 0 ; Power clock. DCD 0 ; Radio. DCD 0 ; UART0. DCD 0 ; SPI0/TWI0 DCD 0 ; SPI1/TWI1 DCD 0 ; Reserved DCD 0 ; GPIOTE DCD 0 ; ADC DCD 0 ; TIMER0 DCD 0 ; TIMER1 DCD 0 ; TIMER2 DCD 0 ; RTC0 DCD 0 ; TEMP DCD 0 ; RNG DCD 0 ; ECB DCD 0 ; CCM/AAR DCD 0 ; WDT DCD 0 ; RTC1 DCD 0 ; QDEC DCD 0 ; LPCOMP DCD 0 ; SWI0 DCD 0 ; SWI1 DCD 0 ; SWI2 DCD 0 ; SWI3 DCD 0 ; SWI4 DCD 0 ; SWI5 DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved _end_of_vectors_table _size_of_vectors_table EQU _end_of_vectors_table - _vectors_table AREA |.text|, CODE, READONLY ;; Reset handler. reset_handler PROC EXPORT reset_handler [WEAK] IMPORT main LDR R0, =main BX R0 ENDP ALIGN END qbs-src-2.3.1/examples/baremetal/pca10001/greenblink/keil/flash.sct0000644000175100001770000000534514616416776024240 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ ;; Load region size_region. LR_IROM1 0x00000000 0x00040000 { ;; Load address = execution address. ER_IROM1 0x00000000 0x00040000 { *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) .ANY (+XO) } ; RW data. RW_IRAM1 0x20000000 0x00004000 { .ANY (+RW +ZI) } } qbs-src-2.3.1/examples/baremetal/pca10001/greenblink/gpio.c0000644000175100001770000001063014616416776022577 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "gpio.h" #include "system.h" #define GPIO_GREEN_LED_PIN_POS (18u) #define GPIO_GREEN_LED_PIN (1u << GPIO_GREEN_LED_PIN_POS) // Pin direction attributes. #define GPIO_PIN_CNF_DIR_POS (0u) // Position of DIR field. #define GPIO_PIN_CNF_DIR_OUT (1u) // Configure pin as an output pin. #define GPIO_PIN_CNF_DIR_MSK (GPIO_PIN_CNF_DIR_OUT << GPIO_PIN_CNF_DIR_POS) // Pin input buffer attributes. #define GPIO_PIN_CNF_INPUT_POS (1u) // Position of INPUT field. #define GPIO_PIN_CNF_INPUT_OFF (1u) // Disconnect input buffer. #define GPIO_PIN_CNF_INPUT_MSK (GPIO_PIN_CNF_INPUT_OFF << GPIO_PIN_CNF_INPUT_POS) // Pin pull attributes. #define GPIO_PIN_CNF_PULL_POS (2u) // Position of PULL field. #define GPIO_PIN_CNF_PULL_OFF (0u) // No pull. #define GPIO_PIN_CNF_PULL_MSK (GPIO_PIN_CNF_PULL_OFF << GPIO_PIN_CNF_PULL_POS) // Pin drive attributes. #define GPIO_PIN_CNF_DRIVE_POS (8u) // Position of DRIVE field. #define GPIO_PIN_CNF_DRIVE_S0S1 (0u) // Standard '0', standard '1'. #define GPIO_PIN_CNF_DRIVE_MSK (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_POS) // Pin sense attributes. #define GPIO_PIN_CNF_SENSE_POS (16u) // Position of SENSE field. #define GPIO_PIN_CNF_SENSE_OFF (0u) // Disabled. #define GPIO_PIN_CNF_SENSE_MSK (GPIO_PIN_CNF_SENSE_OFF << GPIO_PIN_CNF_SENSE_POS) void gpio_init_green_led(void) { GPIOD_REGS_MAP->PIN_CNF[GPIO_GREEN_LED_PIN_POS] = (GPIO_PIN_CNF_DIR_MSK | GPIO_PIN_CNF_INPUT_MSK | GPIO_PIN_CNF_PULL_MSK | GPIO_PIN_CNF_DRIVE_MSK | GPIO_PIN_CNF_SENSE_MSK); } void gpio_toggle_green_led(void) { const uint32_t gpio_state = GPIOD_REGS_MAP->OUT; GPIOD_REGS_MAP->OUTSET = (GPIO_GREEN_LED_PIN & ~gpio_state); GPIOD_REGS_MAP->OUTCLR = (GPIO_GREEN_LED_PIN & gpio_state); } qbs-src-2.3.1/examples/baremetal/pca10001/pca10001.qbs0000644000175100001770000000503414616416776021213 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ Project { name: "Examples for pca10001/pca10024 boards" references: [ "greenblink/greenblink.qbs" ] } qbs-src-2.3.1/examples/baremetal/msp430f5529/0000755000175100001770000000000014616416776017751 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/0000755000175100001770000000000014616416776022315 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/ucs.c0000644000175100001770000002105514616416776023256 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "hwdefs.h" #include "ucs.h" #if defined(__GNUC__) #define __delay_cycles(x) \ ({ \ for (uint16_t j = 0; j < x; j++) { \ __no_operation(); \ } \ }) #endif static uint16_t ucs_source_mask(enum ucs_source source) { switch (source) { case UCS_XT1CLK_SELECT: return SELM__XT1CLK; case UCS_VLOCLK_SELECT: return SELM__VLOCLK; case UCS_REFOCLK_SELECT: return SELM__REFOCLK; case UCS_DCOCLK_SELECT: return SELM__DCOCLK; case UCS_DCOCLKDIV_SELECT: return SELM__DCOCLKDIV; case UCS_XT2CLK_SELECT: return SELM__XT2CLK; default: break; } return SELM__XT1CLK; } static uint16_t ucs_divider_mask(enum ucs_divider divider) { switch (divider) { case UCS_CLOCK_DIVIDER_1: return DIVM__1; case UCS_CLOCK_DIVIDER_2: return DIVM__2; case UCS_CLOCK_DIVIDER_4: return DIVM__4; case UCS_CLOCK_DIVIDER_8: return DIVM__8; case UCS_CLOCK_DIVIDER_12: return DIVM__32; case UCS_CLOCK_DIVIDER_16: return DIVM__16; case UCS_CLOCK_DIVIDER_32: return DIVM__32; default: break; } return DIVM__1; } static void ucs_fll_init(uint16_t fsystem, uint16_t ratio) { const uint16_t sr_reg_backup = __get_SR_register() & SCG0; uint16_t mode = 0; uint16_t d = ratio; if (fsystem > 16000) { d >>= 1; mode = 1; } else { fsystem <<= 1; } uint16_t dco_div_bits = FLLD__2; while (d > 512) { dco_div_bits = dco_div_bits + FLLD0; d >>= 1; } // Disable FLL. __bis_SR_register(SCG0); // Set DCO to lowest tap. HWREG8(UCS_BASE + OFS_UCSCTL0_H) = 0; // Reset FN bits. HWREG16(UCS_BASE + OFS_UCSCTL2) &= ~(0x03FF); HWREG16(UCS_BASE + OFS_UCSCTL2) = dco_div_bits | (d - 1); if (fsystem <= 630) { // fsystem < 0.63MHz HWREG8(UCS_BASE + OFS_UCSCTL1) = DCORSEL_0; } else if (fsystem < 1250) { // 0.63MHz < fsystem < 1.25MHz HWREG8(UCS_BASE + OFS_UCSCTL1) = DCORSEL_1; } else if (fsystem < 2500) { // 1.25MHz < fsystem < 2.5MHz HWREG8(UCS_BASE + OFS_UCSCTL1) = DCORSEL_2; } else if (fsystem < 5000) { // 2.5MHz < fsystem < 5MHz HWREG8(UCS_BASE + OFS_UCSCTL1) = DCORSEL_3; } else if (fsystem < 10000) { // 5MHz < fsystem < 10MHz HWREG8(UCS_BASE + OFS_UCSCTL1) = DCORSEL_4; } else if (fsystem < 20000) { // 10MHz < fsystem < 20MHz HWREG8(UCS_BASE + OFS_UCSCTL1) = DCORSEL_5; } else if (fsystem < 40000) { // 20MHz < fsystem < 40MHz HWREG8(UCS_BASE + OFS_UCSCTL1) = DCORSEL_6; } else { HWREG8(UCS_BASE + OFS_UCSCTL1) = DCORSEL_7; } // Re-enable FLL. __bic_SR_register(SCG0); while (HWREG8(UCS_BASE + OFS_UCSCTL7_L) & DCOFFG) { // Clear OSC fault flags. HWREG8(UCS_BASE + OFS_UCSCTL7_L) &= ~(DCOFFG); // Clear OFIFG fault flag. HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG; } // Restore previous SCG0. __bis_SR_register(sr_reg_backup); if (mode == 1) { // Select DCOCLK because fsystem > 16000. HWREG16(UCS_BASE + OFS_UCSCTL4) &= ~(SELM_7 + SELS_7); HWREG16(UCS_BASE + OFS_UCSCTL4) |= SELM__DCOCLK + SELS__DCOCLK; } else { // Select DCODIVCLK. HWREG16(UCS_BASE + OFS_UCSCTL4) &= ~(SELM_7 + SELS_7); HWREG16(UCS_BASE + OFS_UCSCTL4) |= SELM__DCOCLKDIV + SELS__DCOCLKDIV; } } void ucs_init(enum ucs_signal signal, enum ucs_source source, enum ucs_divider divider) { uint16_t source_msk = ucs_source_mask(source); uint16_t divider_msk = ucs_divider_mask(divider); switch (signal) { case UCS_ACLK: HWREG16(UCS_BASE + OFS_UCSCTL4) &= ~SELA_7; source_msk |= source_msk << 8; HWREG16(UCS_BASE + OFS_UCSCTL4) |= source_msk; HWREG16(UCS_BASE + OFS_UCSCTL5) &= ~DIVA_7; divider_msk = divider_msk << 8; HWREG16(UCS_BASE + OFS_UCSCTL5) |= divider_msk; break; case UCS_SMCLK: HWREG16(UCS_BASE + OFS_UCSCTL4) &= ~SELS_7; source_msk = source_msk << 4; HWREG16(UCS_BASE + OFS_UCSCTL4) |= source_msk; HWREG16(UCS_BASE + OFS_UCSCTL5) &= ~DIVS_7; divider_msk = divider_msk << 4; HWREG16(UCS_BASE + OFS_UCSCTL5) |= divider_msk; break; case UCS_MCLK: HWREG16(UCS_BASE + OFS_UCSCTL4) &= ~SELM_7; HWREG16(UCS_BASE + OFS_UCSCTL4) |= source_msk; HWREG16(UCS_BASE + OFS_UCSCTL5) &= ~DIVM_7; HWREG16(UCS_BASE + OFS_UCSCTL5) |= divider_msk; break; case UCS_FLLREF: HWREG8(UCS_BASE + OFS_UCSCTL3) &= ~SELREF_7; source_msk = source_msk << 4; HWREG8(UCS_BASE + OFS_UCSCTL3) |= source_msk; HWREG8(UCS_BASE + OFS_UCSCTL3) &= ~FLLREFDIV_7; switch (divider) { case UCS_CLOCK_DIVIDER_12: HWREG8(UCS_BASE + OFS_UCSCTL3) |= FLLREFDIV__12; break; case UCS_CLOCK_DIVIDER_16: HWREG8(UCS_BASE + OFS_UCSCTL3) |= FLLREFDIV__16; break; default: HWREG8(UCS_BASE + OFS_UCSCTL3) |= divider_msk; break; } break; default: break; } } bool ucs_xt2_blocking_turn_on(uint16_t drive, uint16_t timeout) { // Check if drive value is expected one. if ((HWREG16(UCS_BASE + OFS_UCSCTL6) & XT2DRIVE_3) != drive) { // Clear XT2 drive field. HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~XT2DRIVE_3; HWREG16(UCS_BASE + OFS_UCSCTL6) |= drive; } HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~XT2BYPASS; // Switch on XT2 oscillator. HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~XT2OFF; do { // Clear OSC fault Flags. HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~XT2OFFG; // Clear OFIFG fault flag. HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG; } while ((HWREG8(UCS_BASE + OFS_UCSCTL7) & XT2OFFG) && --timeout); return timeout > 0; } void ucs_xt2_turn_off(void) { HWREG16(UCS_BASE + OFS_UCSCTL6) |= XT2OFF; } void ucs_fll_settle_init(uint16_t fsystem, uint16_t ratio) { volatile uint16_t x = ratio * 32; ucs_fll_init(fsystem, ratio); while (x--) { __delay_cycles(30); } } qbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/usb.h0000644000175100001770000001233514616416776023263 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef MSP430_USB_H #define MSP430_USB_H #ifdef __cplusplus extern "C" { #endif enum usb_setup_bmreq_bits { SETUP_DIR = 0x80, SETUP_TYPE = 0x60, SETUP_RECIPIENT = 0x1F }; // Setup request direction. enum usb_setup_req_direction_bits { SETUP_OUTPUT = 0, // From host to device direction. SETUP_INPUT = 0x80 // From device to host direction. }; // Setup request type. enum usb_setup_req_type_bits { SETUP_STANDARD = 0, // Standard request. SETUP_CLASS = 0x20, // Class request. SETUP_VENDOR = 0x40 // Vendor request. }; // Setup request recipient. enum usb_setup_req_recipient_bits { SETUP_DEVICE = 0, // Device recipient. SETUP_IFACE = 0x01, // Interface recipient. SETUP_EP = 0x02, // End point recipient. SETUP_OTHER = 0x03 // Other recipient. }; // Setup request code. enum usb_setup_req_code { SETUP_GET_STATUS = 0x00, // Get status code. SETUP_CLEAR_FEATURE = 0x01, // Clear feature code. SETUP_RESERVED1 = 0x02, // Reserved code. SETUP_SET_FEATURE = 0x03, // Set feature code. SETUP_RESERVED2 = 0x04, // Reserved code. SETUP_SET_ADDRESS = 0x05, // Set address code. SETUP_GET_DESCRIPTOR = 0x06, // Get descriptor code. SETUP_SET_DESCRIPTOR = 0x07, // Set descriptor code. SETUP_GET_CONFIGURATION = 0x08, // Get configuration code. SETUP_SET_CONFIGURATION = 0x09, // Set configuration code. SETUP_GET_INTERFACE = 0x0A, // Get interface code. SETUP_SET_INTERFACE = 0x0B, // Set interface code. SETUP_SYNC_FRAME = 0x0C, // Sync frame code. SETUP_ANCHOR_LOAD = 0xA0 // Anchor load code. }; // Standard status responses. enum usb_setup_status_code { STATUS_SELF_POWERED = 0x01, STATUS_REMOTE_WAKEUP = 0x02 }; // Standard feature selectors. enum usb_setup_feature_selector { FEATURE_STALL = 0x00, FEATURE_REMOTE_WAKEUP = 0x01, FEATURE_TEST_MODE = 0x02 }; // Get descriptor codes. enum usb_setup_get_descriptor_code { DESC_DEVICE = 0x01, // Device descriptor. DESC_CONF = 0x02, // Configuration descriptor. DESC_STRING = 0x03, // String descriptor. DESC_INTERFACE = 0x04, // Interface descriptor. DESC_ENDPOINT = 0x05, // End point descriptor. DESC_DEVICE_QUAL = 0x06, // Device qualifier descriptor. DESC_OTHER_SPEED_CONF = 0x07, // Other configuration descriptor. DESC_INTERFACE_POWER = 0x08, // Interface power descriptor. DESC_OTG = 0x09, // OTG descriptor. DESC_DEBUG = 0x0A, // Debug descriptor. DESC_INTERFACE_ASSOC = 0x0B, // Interface association descriptor. DESC_HID = 0x21, // Get HID descriptor. DESC_REPORT = 0x22 // Get report descriptor. }; enum usb_ep_size { EP0_MAX_PACKET_SIZE = 8, EP_MAX_PACKET_SIZE = 64, EP_MAX_FIFO_SIZE = 256, EP_NO_MORE_DATA = 0xFFFF }; void usb_init(void); void usb_task(void); #ifdef __cplusplus } #endif #endif // MSP430_USB_H qbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/README.md0000644000175100001770000000256114616416776023600 0ustar runnerdockerThis example demonstrates how to build a bare-metal application using different MSP430 toolchains. It is designed for the MSP-EXP430F5529LP target board (based on msp430f5529 chip): * http://www.ti.com/tool/MSP-EXP430F5529LP It implements a USB HID device that connects two 8-buttons NES (Dendy) gamepads to a PC. The gamepads are connected to the msp430f5529 chip as follows: 1. CLK - it is an output clock signal which generates by chip from the port 6, pin 0 (P6.0). This pin should be connected to the CLK inputs for both gamepads. 2. DATA1 - it is an input data signal which comes to chip on the the port 6, pin 1 (P6.1). This pin should be connected to the DATA output from the gamepad #1. 3. DATA2 - it is an input data signal which comes to chip on the the port 6, pin 2 (P6.2). This pin should be connected to the DATA output from the gamepad #2. 4. LATCH - it is an output clock signal which generates by chip from the port 6, pin 3 (P6.3). This pin should be connected to the LATCH inputs for both gamepads. Actual schematic and pinouts depends on an used gamepads (with 7, 9 or other pins connectors) and a development boards. Also, do not forget to connect the +3.3V and GND wires to the gamepads. Then it is possible to play 8-bit NES games using various PC simulators. The following toolchains are supported: * IAR Embedded Workbench * GCC qbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/gpio.h0000644000175100001770000000741514616416776023433 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef MSP430_GPIO_H #define MSP430_GPIO_H #include #ifdef __cplusplus extern "C" { #endif enum gpio_port { GPIO_PORT_P1 = 1, GPIO_PORT_P2 = 2, GPIO_PORT_P3 = 3, GPIO_PORT_P4 = 4, GPIO_PORT_P5 = 5, GPIO_PORT_P6 = 6, GPIO_PORT_P7 = 7, GPIO_PORT_P8 = 8, GPIO_PORT_PJ = 13, }; enum gpio_pin { GPIO_PIN0 = 0x0001, GPIO_PIN1 = 0x0002, GPIO_PIN2 = 0x0004, GPIO_PIN3 = 0x0008, GPIO_PIN4 = 0x0010, GPIO_PIN5 = 0x0020, GPIO_PIN6 = 0x0040, GPIO_PIN7 = 0x0080, GPIO_PIN8 = 0x0100, GPIO_PIN9 = 0x0200, GPIO_PIN10 = 0x0400, GPIO_PIN11 = 0x0800, GPIO_PIN12 = 0x1000, GPIO_PIN13 = 0x2000, GPIO_PIN14 = 0x4000, GPIO_PIN15 = 0x8000, }; enum gpio_pin_status { GPIO_INPUT_PIN_HIGH = 0x01, GPIO_INPUT_PIN_LOW = 0x00 }; void gpio_pins_set_as_out(enum gpio_port port, uint16_t pins); void gpio_pins_set_as_in(enum gpio_port port, uint16_t pins); void gpio_pins_set_as_pf_out(enum gpio_port port, uint16_t pins); void gpio_pins_set_as_pf_in(enum gpio_port port, uint16_t pins); void gpio_pins_set_high(enum gpio_port port, uint16_t pins); void gpio_pins_set_low(enum gpio_port port, uint16_t pins); void gpio_pins_toggle(enum gpio_port port, uint16_t pins); enum gpio_pin_status gpio_pin_get(enum gpio_port port, uint16_t pins); #ifdef __cplusplus } #endif #endif // MSP430_GPIO_H qbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/wdt_a.h0000644000175100001770000000510714616416776023567 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef MSP430_WDT_A_H #define MSP430_WDT_A_H #ifdef __cplusplus extern "C" { #endif void wdt_a_stop(void); #ifdef __cplusplus } #endif #endif // MSP430_WDT_A_H qbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/hidep1.c0000644000175100001770000001500414616416776023633 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "gpio.h" #include "hid.h" #include "hwdefs.h" #include "usb.h" // We use this empirical value to make a GPIO polling // every ~10 msec (rough). It is a simplest way, because // instead we need to use a timers with interrupts callbacks. enum { POLLING_COUNTER = 888 }; // Pins on the port 6. enum gpio_pins { GPIO_CLK_PIN = BIT0, GPIO_DATA1_PIN = BIT1, GPIO_DATA2_PIN = BIT2, GPIO_LATCH_PIN = BIT3, }; struct usb_ep { uint8_t EPCNF; // Endpoint configuration. uint8_t EPBBAX; // Endpoint X buffer base address. uint8_t EPBCTX; // Endpoint X Buffer byte count. uint8_t SPARE0; // No used. uint8_t SPARE1; // No used. uint8_t EPBBAY; // Endpoint Y buffer Base address. uint8_t EPBCTY; // Endpoint Y buffer byte count. uint8_t EPSIZXY; // Endpoint XY buffer size. }; #if defined(__ICC430__) #pragma location = 0x23C8 // Input ep1 configuration address. __no_init struct usb_ep __data16 g_ep1_in; #pragma location = 0x1C80 // Input ep1 X-buffer address. __no_init uint8_t __data16 g_ep1_in_xbuf[EP_MAX_PACKET_SIZE]; #elif defined(__GNUC__) extern struct usb_ep g_ep1_in; extern uint8_t g_ep1_in_xbuf[EP_MAX_PACKET_SIZE]; #endif static struct { const uint8_t data_pin; const uint8_t id; uint8_t buttons; bool ready; } g_reports[HID_REPORTS_COUNT] = { {GPIO_DATA1_PIN, HID_REPORT_ID_GAMEPAD1, 0, false}, {GPIO_DATA2_PIN, HID_REPORT_ID_GAMEPAD2, 0, false} }; static uint16_t g_poll_counter = 0; // Pulse width around ~10 usec. static void ep1_latch_pulse(void) { gpio_pins_set_high(GPIO_PORT_P6, GPIO_LATCH_PIN); gpio_pins_set_low(GPIO_PORT_P6, GPIO_LATCH_PIN); } // Pulse width around ~10 usec. static void ep1_clk_pulse(void) { gpio_pins_set_high(GPIO_PORT_P6, GPIO_CLK_PIN); gpio_pins_set_low(GPIO_PORT_P6, GPIO_CLK_PIN); } static void ep1_reports_clean(void) { for (uint8_t index = 0; index < HID_REPORTS_COUNT; ++index) { g_reports[index].buttons = 0; g_reports[index].ready = false; } } static void ep1_reports_update(void) { for (uint8_t index = 0; index < HID_REPORTS_COUNT; ++index) g_reports[index].ready = true; } static void ep1_gamepads_poll(void) { ep1_reports_clean(); ep1_latch_pulse(); for (uint8_t pos = 0; pos < HID_REPORT_BITS_COUNT; ++pos) { // TODO: Add some nops here? for (uint8_t index = 0; index < HID_REPORTS_COUNT; ++index) { const uint8_t pin = g_reports[index].data_pin; const enum gpio_pin_status st = gpio_pin_get(GPIO_PORT_P6, pin); // Low state means that a button is pressed. const bool v = (st == GPIO_INPUT_PIN_LOW); g_reports[index].buttons |= (v << pos); } ep1_clk_pulse(); } ep1_reports_update(); } static void ep1_report_send(uint8_t report_index) { if (!g_reports[report_index].ready) return; if ((g_ep1_in.EPBCTX & NAK) == 0) return; g_ep1_in_xbuf[0] = g_reports[report_index].id; g_ep1_in_xbuf[1] = g_reports[report_index].buttons; g_ep1_in.EPBCTX = 2; g_reports[report_index].ready = false; } void hid_ep1_init(void) { enum { USBSTABUFF_ADDRESS = 0x1C00, // Start of buffer space address. USBIEPBBAX_1_ADDRESS = 0x1C80 // Input ep1 X-buffer address. }; g_ep1_in.EPCNF = UBME | USBIIE; g_ep1_in.EPBBAX = ((USBIEPBBAX_1_ADDRESS - USBSTABUFF_ADDRESS) >> 3) & 0x00FF; g_ep1_in.EPBCTX = NAK; g_ep1_in.EPSIZXY = EP_MAX_PACKET_SIZE; gpio_pins_set_as_out(GPIO_PORT_P6, GPIO_CLK_PIN | GPIO_LATCH_PIN); gpio_pins_set_as_in(GPIO_PORT_P6, GPIO_DATA1_PIN | GPIO_DATA2_PIN); } void hid_ep1_task(void) { if (!hid_ep0_is_enumerated()) return; for (uint8_t index = 0; index < HID_REPORTS_COUNT; ++index) ep1_report_send(index); if (g_poll_counter <= POLLING_COUNTER) { ++g_poll_counter; } else { g_poll_counter = 0; ep1_gamepads_poll(); } } void hid_ep1_in_stall(void) { g_ep1_in.EPCNF |= STALL; } void hid_ep1_in_unstall(void) { g_ep1_in.EPCNF &= ~(STALL | TOGGLE); } bool hid_ep1_in_is_stalled(void) { return (g_ep1_in.EPCNF & STALL); } qbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/nes-gamepads.qbs0000644000175100001770000001162114616416776025371 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ CppApplication { condition: { if (!qbs.architecture.contains("msp430")) return false; return qbs.toolchain.contains("iar") || qbs.toolchain.contains("gcc") } name: "msp430f5529-nes-gamepads" cpp.cLanguageVersion: "c99" cpp.positionIndependentCode: false // // IAR-specific properties and sources. // Properties { condition: qbs.toolchain.contains("iar") property path dlibIncludePath: cpp.toolchainInstallPath + "/../lib/dlib/dl430xssfn.h" property path dlibRuntimePath: cpp.toolchainInstallPath + "/../lib/dlib/dl430xssfn.r43" cpp.entryPoint: "__program_start" cpp.defines: ["__MSP430F5529__"] cpp.driverFlags: [ "-e", "--core=430X", "--data_model=small", "--code_model=small", "--dlib_config", dlibIncludePath ] cpp.driverLinkerFlags: [ "-D_STACK_SIZE=A0", "-D_DATA16_HEAP_SIZE=A0", "-D_DATA20_HEAP_SIZE=50" ] cpp.staticLibraries: [ // Explicitly link with the runtime dlib library (which contains // all required startup code and other stuff). dlibRuntimePath ] } Group { condition: qbs.toolchain.contains("iar") name: "IAR Linker Script" prefix: cpp.toolchainInstallPath + "/../config/linker/" fileTags: ["linkerscript"] // Explicitly use the default linker scripts for current target. files: ["lnk430f5529.xcl"] } // // GCC-specific properties and soucres. // Properties { condition: qbs.toolchain.contains("gcc") property path supportFilesPath // A path to the MSP430 support files, which are // provided by the Texas Instruments separately: // e.g. 'c:/msp430-gcc-support-files/include/' cpp.includePaths: supportFilesPath cpp.libraryPaths: supportFilesPath cpp.driverFlags: ["-mmcu=msp430f5529"] } Group { condition: qbs.toolchain.contains("gcc") name: "GCC Linker Script" fileTags: ["linkerscript"] files: ["gamepads.ld"] } files: [ "gpio.c", "gpio.h", "hid.h", "hiddesc.c", "hidep0.c", "hidep1.c", "hwdefs.h", "main.c", "pmm.c", "pmm.h", "ucs.c", "ucs.h", "usb.c", "usb.h", "wdt_a.c", "wdt_a.h", ] } qbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/pmm.h0000644000175100001770000000534314616416776023264 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef MSP430_PMM_H #define MSP430_PMM_H #include #ifdef __cplusplus extern "C" { #endif enum ppm_voltage { PMM_VOLTAGE_1_35V, PMM_VOLTAGE_1_55V, PMM_VOLTAGE_1_75V, PMM_VOLTAGE_1_85V }; bool pmm_voltage_init(enum ppm_voltage voltage); #ifdef __cplusplus } #endif #endif // MSP430_PMM_H qbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/usb.c0000644000175100001770000002064414616416776023260 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "gpio.h" #include "hid.h" #include "hwdefs.h" #include "ucs.h" #include "usb.h" static uint16_t usb_khz_freq_get(void) { uint16_t freq = 0; const uint8_t selm_curr = (UCSCTL4_L & SELM_7); if (selm_curr <= 4) { uint16_t fll_ref_freq = 33; // It is 32.768 kHz. if ((UCSCTL3_L & SELREF_7) >= 0x50) fll_ref_freq = (4.0) * 1000; uint16_t flln_curr = (UCSCTL2 & 0x03FF) + 1; if (selm_curr == SELM_3) { uint16_t flld_curr = (UCSCTL2 & FLLD_7); flld_curr >>= 12; flln_curr <<= flld_curr; } const uint8_t fll_ref_div = (UCSCTL3_L & FLLREFDIV_7); if (fll_ref_div == 0) freq = flln_curr * (fll_ref_freq / 1); else if (fll_ref_div == 1) freq = flln_curr * (fll_ref_freq / 2); else if (fll_ref_div == 2) freq = flln_curr * (fll_ref_freq / 4); else if (fll_ref_div == 3) freq = flln_curr * (fll_ref_freq / 8); else if (fll_ref_div == 4) freq = flln_curr * (fll_ref_freq / 12); else if (fll_ref_div == 5) freq = flln_curr * (fll_ref_freq / 16); } else { freq = (4.0) * 1000; } return freq >> (UCSCTL5_L & DIVM_7); } static uint16_t usb_delay_250us_get(void) { const uint16_t mclk_freq = usb_khz_freq_get(); const uint16_t delay_250us = ((mclk_freq >> 6) | (mclk_freq >> 7) | (mclk_freq >> 9)); return delay_250us; } static void usb_cfg_access_allow(bool allow) { enum { ALLOW_KEY = 0x9628, DENIED_KEY = 0x9600 }; USBKEYPID = allow ? ALLOW_KEY : DENIED_KEY; } static bool usb_pll_enable(void) { if (!(USBPWRCTL & USBBGVBV)) return false; if ((USBCNF & USB_EN) && (USBPLLCTL & UPLLEN)) return true; gpio_pins_set_as_pf_out(GPIO_PORT_P5, GPIO_PIN2); gpio_pins_set_as_pf_out(GPIO_PORT_P5, GPIO_PIN3); usb_cfg_access_allow(true); if (!ucs_xt2_blocking_turn_on(XT2DRIVE_0, 50000)) return false; USBPLLDIVB = USBPLL_SETCLK_4_0; USBPLLCTL = UPFDEN | UPLLEN; const uint16_t delay_250us = usb_delay_250us_get(); uint8_t j = 0; do { USBPLLIR = 0; for (uint8_t k = 0; k < 2; ++k) { for (uint16_t i = 0; i < delay_250us; ++i) { __no_operation(); } } if (j++ > 10) { usb_cfg_access_allow(false); return false; } } while (USBPLLIR != 0); USBCNF |= USB_EN; usb_cfg_access_allow(false); return true; } static void usb_reset(void) { usb_cfg_access_allow(true); hid_ep0_enumerated_set(false); USBCTL = 0; USBFUNADR = 0; USBOEPIE = 0; USBIEPIE = 0; hid_ep0_init(); hid_ep1_init(); USBCTL = FEN; USBIFG = 0; USBIE = SETUPIE | RSTRIE | SUSRIE; usb_cfg_access_allow(false); } static void usb_connect(void) { usb_cfg_access_allow(true); USBCNF |= PUR_EN; USBPWRCTL |= VBOFFIE; usb_cfg_access_allow(false); } static void usb_pwr_vbus_wait(void) { const uint16_t delay_250us = usb_delay_250us_get(); for (uint8_t j = 0; j < 4; ++j) { for (uint16_t i = 0; i < delay_250us; ++i) { __no_operation(); } } } static void usb_pwr_vbus_on_handler(void) { usb_pwr_vbus_wait(); if (USBPWRCTL & USBBGVBV) { usb_cfg_access_allow(true); USBPWRCTL |= VBOFFIE; USBPWRCTL &= ~ (VBONIFG + VBOFFIFG); usb_cfg_access_allow(false); } } static void usb_pwr_vbus_off_handler(void) { usb_pwr_vbus_wait(); if (!(USBPWRCTL & USBBGVBV)) { usb_cfg_access_allow(true); USBCNF = 0; USBPLLCTL &= ~UPLLEN; USBPWRCTL &= ~(VBOFFIE + VBOFFIFG + SLDOEN); usb_cfg_access_allow(false); } } void usb_suspend(void) { usb_cfg_access_allow(true); USBCTL |= FRSTE; USBIFG &= ~SUSRIFG; USBPLLCTL &= ~UPLLEN; ucs_xt2_turn_off(); USBIE = RESRIE; usb_cfg_access_allow(false); } void usb_resume(void) { usb_pll_enable(); USBIFG &= ~(RESRIFG | SUSRIFG); USBIE = SETUPIE | RSTRIE | SUSRIE; } void usb_init(void) { const uint16_t gie_backup = (__get_SR_register() & GIE); usb_cfg_access_allow(true); USBPHYCTL = PUSEL; USBPWRCTL = VUSBEN | SLDOAON; const uint16_t delay_250us = usb_delay_250us_get(); for (uint8_t j = 0; j < 20; ++j) { for (uint16_t i = 0; i < delay_250us; ++i) { __no_operation(); } } USBPWRCTL |= VBONIE; usb_cfg_access_allow(false); __bis_SR_register(gie_backup); if (USBPWRCTL & USBBGVBV) { if (usb_pll_enable()) { usb_reset(); usb_connect(); } } } void usb_task(void) { hid_ep1_task(); } INTERRUPT(usb_ubm_isr, USB_UBM_VECTOR) { bool wake_up = false; if (USBIFG & SETUPIFG) { hid_ep0_setup_handler(); USBIFG &= ~SETUPIFG; } switch (__even_in_range(USBVECINT & 0x3F, USBVECINT_OUTPUT_ENDPOINT7)) { case USBVECINT_PWR_DROP: __no_operation(); break; case USBVECINT_PLL_RANGE: wake_up = true; break; case USBVECINT_PWR_VBUSOn: usb_pwr_vbus_on_handler(); if (usb_pll_enable()) { usb_reset(); usb_connect(); } wake_up = true; break; case USBVECINT_PWR_VBUSOff: usb_pwr_vbus_off_handler(); ucs_xt2_turn_off(); wake_up = true; break; case USBVECINT_INPUT_ENDPOINT0: hid_ep0_in_handler(); break; case USBVECINT_RSTR: usb_reset(); wake_up = true; break; case USBVECINT_SUSR: usb_suspend(); wake_up = true; break; case USBVECINT_RESR: usb_resume(); wake_up = true; break; case USBVECINT_SETUP_PACKET_RECEIVED: hid_ep0_in_nak(); hid_ep0_out_nak(); hid_ep0_setup_handler(); break; default: break; } if (wake_up) { __bic_SR_register_on_exit(LPM3_bits); __no_operation(); } } qbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/main.c0000644000175100001770000000631714616416776023414 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "hwdefs.h" #include "pmm.h" #include "ucs.h" #include "usb.h" #include "wdt_a.h" static void hw_clocks_init(uint32_t mclk_freq) { ucs_init(UCS_FLLREF, UCS_REFOCLK_SELECT, UCS_CLOCK_DIVIDER_1); ucs_init(UCS_ACLK, UCS_REFOCLK_SELECT, UCS_CLOCK_DIVIDER_1); ucs_fll_settle_init(mclk_freq / 1000, mclk_freq / 32768); // Use REFO for FLL and ACLK. UCSCTL3 = (UCSCTL3 & ~SELREF_7) | SELREF__REFOCLK; UCSCTL4 = (UCSCTL4 & ~SELA_7) | SELA__REFOCLK; } static void hw_init(void) { __disable_interrupt(); wdt_a_stop(); pmm_voltage_init(PMM_VOLTAGE_1_85V); hw_clocks_init(8000000); usb_init(); __enable_interrupt(); } static void hw_loop_exec(void) { for (;;) { usb_task(); } } int main(void) { hw_init(); hw_loop_exec(); return 0; } qbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/hwdefs.h0000644000175100001770000000621214616416776023747 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef MSP430_HW_DEFS_H #define MSP430_HW_DEFS_H #include #include #if defined(__ICC430__) # define _PPTOSTR_(x) #x # define _PPARAM_(address) _PPTOSTR_(vector=address) # define INTERRUPT(isr_name, vector) \ _Pragma(_PPARAM_(vector)) __interrupt void isr_name(void) #elif defined(__GNUC__) # define INTERRUPT(isr_name, vector) \ void __attribute__ ((interrupt(vector))) isr_name(void) #else # error "Unsupported toolchain" #endif #include #include #define HWREG8(x) \ (*((volatile uint8_t *)((uint16_t)x))) #define HWREG16(x) \ (*((volatile uint16_t *)((uint16_t)x))) #define HWREG32(x) \ (*((volatile uint32_t *)((uint16_t)x))) #endif // MSP430_HW_DEFS_H qbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/hid.h0000644000175100001770000000755014616416776023241 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef MSP430_HID_H #define MSP430_HID_H #include #include #ifdef __cplusplus extern "C" { #endif enum hid_constants { HID_CONFIG_NUMBER = 1, // Number of valid configuration. HID_IFACE_NUMBER = 0, // Number of valid interface. HID_ALT_IFACE_NUMBER = 0, // Number of valid alternate interface. HID_EP_IN = 0x81 // Active end point address. }; enum hid_gamepad_id { HID_REPORT_ID_GAMEPAD1 = 1, HID_REPORT_ID_GAMEPAD2 = 2 }; enum { HID_REPORTS_COUNT = 2, HID_REPORT_BITS_COUNT = 8 }; void hid_ep0_init(void); // Called only in interrupt context. void hid_ep0_setup_handler(void); void hid_ep0_in_handler(void); void hid_ep0_in_nak(void); void hid_ep0_in_stall(void); void hid_ep0_in_clear(void); bool hid_ep0_in_is_stalled(void); void hid_ep0_out_nak(void); void hid_ep0_out_stall(void); void hid_ep0_out_clear(void); const uint8_t *hid_ep0_desc_get(uint8_t type, uint16_t *length); uint8_t hid_ep0_setup_bm_request_type_get(void); uint8_t hid_ep0_setup_request_get(void); uint8_t hid_ep0_setup_lvalue_get(void); uint8_t hid_ep0_setup_hvalue_get(void); uint8_t hid_ep0_setup_lindex_get(void); uint8_t hid_ep0_setup_hindex_get(void); void hid_ep0_enumerated_set(bool enumerated); bool hid_ep0_is_enumerated(void); void hid_ep1_init(void); void hid_ep1_task(void); void hid_ep1_in_stall(void); void hid_ep1_in_unstall(void); bool hid_ep1_in_is_stalled(void); #ifdef __cplusplus } #endif #endif // MSP430_HID_H qbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/gamepads.ld0000644000175100001770000000526714616416776024431 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ g_setupdat = 0x2380; /* Setup packet block address. */ g_ep0 = 0x0920; /* Input ep0 configuration address. */ g_ep0_in_buf = 0x2378; /* Input ep0 buffer address. */ g_ep1_in = 0x23C8; /* Input ep1 configuration address. */ g_ep1_in_xbuf = 0x1C80; /* Ep1 X-buffer address. */ qbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/gpio.c0000644000175100001770000001327314616416776023425 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "hwdefs.h" #include "gpio.h" enum { INVALID_ADDRESS = 0xFFFF }; static uint16_t gpio_port_address_get(enum gpio_port port) { switch (port) { case GPIO_PORT_P1: return P1_BASE; case GPIO_PORT_P2: return P2_BASE; case GPIO_PORT_P3: return P3_BASE; case GPIO_PORT_P4: return P4_BASE; case GPIO_PORT_P5: return P5_BASE; case GPIO_PORT_P6: return P6_BASE; case GPIO_PORT_P7: return P7_BASE; case GPIO_PORT_P8: return P8_BASE; case GPIO_PORT_PJ: return PJ_BASE; default: break; } return INVALID_ADDRESS; } static uint16_t gpio_pins_adjust(enum gpio_port port, uint16_t pins) { if ((port & 1) ^ 1) pins <<= 8; return pins; } void gpio_pins_set_as_out(enum gpio_port port, uint16_t pins) { const uint16_t base_address = gpio_port_address_get(port); if (base_address == INVALID_ADDRESS) return; pins = gpio_pins_adjust(port, pins); HWREG16(base_address + OFS_PASEL) &= ~pins; HWREG16(base_address + OFS_PADIR) |= pins; } void gpio_pins_set_as_in(enum gpio_port port, uint16_t pins) { const uint16_t base_address = gpio_port_address_get(port); if (base_address == INVALID_ADDRESS) return; pins = gpio_pins_adjust(port, pins); HWREG16(base_address + OFS_PASEL) &= ~pins; HWREG16(base_address + OFS_PADIR) &= ~pins; HWREG16(base_address + OFS_PAREN) &= ~pins; } void gpio_pins_set_as_pf_out(enum gpio_port port, uint16_t pins) { const uint16_t base_address = gpio_port_address_get(port); if (base_address == INVALID_ADDRESS) return; pins = gpio_pins_adjust(port, pins); HWREG16(base_address + OFS_PADIR) |= pins; HWREG16(base_address + OFS_PASEL) |= pins; } void gpio_pins_set_as_pf_in(enum gpio_port port, uint16_t pins) { const uint16_t base_address = gpio_port_address_get(port); if (base_address == INVALID_ADDRESS) return; pins = gpio_pins_adjust(port, pins); HWREG16(base_address + OFS_PADIR) &= ~pins; HWREG16(base_address + OFS_PASEL) |= pins; } void gpio_pins_set_high(enum gpio_port port, uint16_t pins) { const uint16_t base_address = gpio_port_address_get(port); if (base_address == INVALID_ADDRESS) return; pins = gpio_pins_adjust(port, pins); HWREG16(base_address + OFS_PAOUT) |= pins; } void gpio_pins_set_low(enum gpio_port port, uint16_t pins) { const uint16_t base_address = gpio_port_address_get(port); if (base_address == INVALID_ADDRESS) return; pins = gpio_pins_adjust(port, pins); HWREG16(base_address + OFS_PAOUT) &= ~pins; } void gpio_pins_toggle(enum gpio_port port, uint16_t pins) { const uint16_t base_address = gpio_port_address_get(port); if (base_address == INVALID_ADDRESS) return; pins = gpio_pins_adjust(port, pins); HWREG16(base_address + OFS_PAOUT) ^= pins; } enum gpio_pin_status gpio_pin_get(enum gpio_port port, uint16_t pins) { const uint16_t base_address = gpio_port_address_get(port); if (base_address == INVALID_ADDRESS) return GPIO_INPUT_PIN_LOW; pins = gpio_pins_adjust(port, pins); const uint16_t value = HWREG16(base_address + OFS_PAIN) & pins; return (value > 0) ? GPIO_INPUT_PIN_HIGH : GPIO_INPUT_PIN_LOW; } qbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/ucs.h0000644000175100001770000000661714616416776023272 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef MSP430_UCS_H #define MSP430_UCS_H #ifdef __cplusplus extern "C" { #endif enum ucs_signal { UCS_ACLK = 0x01, UCS_MCLK = 0x02, UCS_SMCLK = 0x04, UCS_FLLREF = 0x08 }; enum ucs_source { UCS_XT1CLK_SELECT, UCS_VLOCLK_SELECT, UCS_REFOCLK_SELECT, UCS_DCOCLK_SELECT, UCS_DCOCLKDIV_SELECT, UCS_XT2CLK_SELECT }; enum ucs_divider { UCS_CLOCK_DIVIDER_1, UCS_CLOCK_DIVIDER_2, UCS_CLOCK_DIVIDER_4, UCS_CLOCK_DIVIDER_8, UCS_CLOCK_DIVIDER_12, UCS_CLOCK_DIVIDER_16, UCS_CLOCK_DIVIDER_32 }; enum ucs_fault_flag { UCS_XT2OFFG, UCS_XT1HFOFFG, UCS_XT1LFOFFG, UCS_DCOFFG }; void ucs_clocks_init(void); void ucs_init(enum ucs_signal signal, enum ucs_source source, enum ucs_divider divider); bool ucs_xt2_blocking_turn_on(uint16_t drive, uint16_t timeout); void ucs_xt2_turn_off(void); void ucs_fll_settle_init(uint16_t fsystem, uint16_t ratio); #ifdef __cplusplus } #endif #endif // MSP430_UCS_H qbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/wdt_a.c0000644000175100001770000000522414616416776023562 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "hwdefs.h" #include "wdt_a.h" #define WDT_CONTROL_ADDRESS (WDT_A_BASE + OFS_WDTCTL) void wdt_a_stop(void) { const uint8_t st = (HWREG16(WDT_CONTROL_ADDRESS) & 0x00FF) | WDTHOLD; HWREG16(WDT_CONTROL_ADDRESS) = WDTPW + st; } qbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/hiddesc.c0000644000175100001770000002531714616416776024074 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "hid.h" #include "usb.h" #include #define usb_word_msb_get(word) \ (uint8_t)(((uint16_t)(word) >> 8) & 0xFF) #define usb_word_lsb_get(word) \ (uint8_t)((uint16_t)(word) & 0xFF) enum usb_bcd_version { SPEC_BCD_VERSION = 0x0200, DEVICE_BCD_VERSION = 0x1234, HID_BCD_VERSION = 0x0111 }; enum usb_ids { DEVICE_VID = 0xFFFF, DEVICE_PID = 0xFFFF }; enum usb_lang_id { LANG_ID = 0x0409 }; enum usb_descriptor_string_index { DESC_LANGID_STRING_INDEX = 0, DESC_MFG_STRING_INDEX, DESC_PRODUCT_STRING_INDEX, DESC_SERIAL_STRING_INDEX }; enum usb_descr_length { // Standard length. DESC_DEVICE_LEN = 18, DESC_DEVICE_QUAL_LEN = 10, DESC_CONF_LEN = 9, DESC_OTHER_SPEED_CONF_LEN = 9, DESC_INTERFACE_LEN = 9, DESC_HID_LEN = 9, DESCR_HID_REP_LEN = 56, DESC_ENDPOINT_LEN = 7, // Total length. DESC_DEVICE_TOTAL_LEN = DESC_DEVICE_LEN, DESC_DEVICE_QUAL_TOTAL_LEN = DESC_DEVICE_QUAL_LEN, DESC_CONF_TOTAL_LEN = DESC_CONF_LEN + DESC_INTERFACE_LEN + DESC_HID_LEN + DESC_ENDPOINT_LEN, DESC_OTHER_SPEED_CONF_TOTAL_LEN = DESC_OTHER_SPEED_CONF_LEN + DESC_INTERFACE_LEN, DESCR_HID_REP_TOTAL_LEN = DESCR_HID_REP_LEN }; enum usb_descr_attributes { // Attributes (b7 - buspwr, b6 - selfpwr, b5 - rwu). USB_DESC_ATTRIBUTES = 0xA0, // 100 mA (div 2). USB_DESC_POWER_CONSUMPTION = 50 }; enum usb_descr_numbers { USB_DESC_CONFIG_COUNT = 1 }; static const uint8_t g_hid_report_desc[DESCR_HID_REP_TOTAL_LEN] = { // Pad #1 configuration. 0x05, 0x01, // Usage page (Generic Desktop). 0x09, 0x05, // Usage (Game Pad). 0xa1, 0x01, // Collection (Application). 0xa1, 0x00, // Collection (Physical). 0x85, HID_REPORT_ID_GAMEPAD1, // Report id (1). 0x05, 0x09, // Usage page (Button). 0x19, 0x01, // Usage minimum (Button 1). 0x29, 0x08, // Usage maximum (Button 8). 0x15, 0x00, // Logical minimum (0). 0x25, 0x01, // Logical maximum (1). 0x95, HID_REPORT_BITS_COUNT, // Report count (8). 0x75, 0x01, // Report size (1). 0x81, 0x02, // Input (Data,Var,Abs). 0xc0, // End collection. 0xc0, // End collection. // Pad #2 configuration. 0x05, 0x01, // Usage page (Generic Desktop). 0x09, 0x05, // Usage (Game Pad). 0xa1, 0x01, // Collection (Application). 0xa1, 0x00, // Collection (Physical). 0x85, HID_REPORT_ID_GAMEPAD2, // Report id (2). 0x05, 0x09, // Usage page (Button). 0x19, 0x01, // Usage minimum (Button 1). 0x29, 0x08, // Usage maximum (Button 8). 0x15, 0x00, // Logical minimum (0). 0x25, 0x01, // Logical maximum (1). 0x95, HID_REPORT_BITS_COUNT, // Report count (8). 0x75, 0x01, // Report size (1). 0x81, 0x02, // Input (Data,Var,Abs). 0xc0, // End collection 0xc0 // End collection. }; static const uint8_t g_device_desc[DESC_DEVICE_TOTAL_LEN] = { DESC_DEVICE_LEN, // Descriptor length. DESC_DEVICE, // Descriptor type. usb_word_lsb_get(SPEC_BCD_VERSION), // USB BCD version, lo. usb_word_msb_get(SPEC_BCD_VERSION), // USB BCD version, hi. 0x00, // Device class. 0x00, // Device sub-class. 0x00, // Device protocol. EP0_MAX_PACKET_SIZE, // Maximum packet size (ep0 size). usb_word_lsb_get(DEVICE_VID), // Vendor ID, lo. usb_word_msb_get(DEVICE_VID), // Vendor ID, hi. usb_word_lsb_get(DEVICE_PID), // Product ID, lo. usb_word_msb_get(DEVICE_PID), // Product ID, hi. usb_word_lsb_get(DEVICE_BCD_VERSION), // Device BCD version, lo. usb_word_msb_get(DEVICE_BCD_VERSION), // Device BCD version, hi. DESC_MFG_STRING_INDEX, DESC_PRODUCT_STRING_INDEX, DESC_SERIAL_STRING_INDEX, USB_DESC_CONFIG_COUNT // Configurations count. }; static const uint8_t g_device_qual_desc[DESC_DEVICE_QUAL_TOTAL_LEN] = { DESC_DEVICE_QUAL_LEN, // Descriptor length. DESC_DEVICE_QUAL, // Descriptor type. usb_word_lsb_get(SPEC_BCD_VERSION), // USB BCD version, lo. usb_word_msb_get(SPEC_BCD_VERSION), // USB BCD version, hi. 0x00, // Device class. 0x00, // Device sub-class. 0x00, // Device protocol. EP0_MAX_PACKET_SIZE, // Maximum packet size (ep0 size). USB_DESC_CONFIG_COUNT, // Configurations count. 0x00 // Reserved. }; static const uint8_t g_config_desc[DESC_CONF_TOTAL_LEN] = { DESC_CONF_LEN, // Descriptor length. DESC_CONF, // Descriptor type. usb_word_lsb_get(DESC_CONF_TOTAL_LEN), // Total length, lo. usb_word_msb_get(DESC_CONF_TOTAL_LEN), // Total length, hi. 0x01, // Interfaces count. HID_CONFIG_NUMBER, // Configuration number. 0x00, // Configuration string index. USB_DESC_ATTRIBUTES, // Attributes. USB_DESC_POWER_CONSUMPTION, // Power consumption. // Interface descriptor. DESC_INTERFACE_LEN, // Descriptor length. DESC_INTERFACE, // Descriptor type. HID_IFACE_NUMBER, // Zero-based index of this interfacce. HID_ALT_IFACE_NUMBER, // Alternate setting. 0x01, // End points count (ep1 in). 0x03, // Class code (HID). 0x00, // Subclass code (boot). 0x00, // Protocol code (none). 0x00, // Interface string descriptor index. // HID descriptor. DESC_HID_LEN, // Descriptor length. DESC_HID, // Descriptor type. usb_word_lsb_get(HID_BCD_VERSION), // HID class BCD version, lo. usb_word_msb_get(HID_BCD_VERSION), // HID class BCD version, hi. 0x00, // Country code (HW country code). 0x01, // Number of HID class descriptors to follow. DESC_REPORT, // Repord descriptor type (HID). usb_word_lsb_get(DESCR_HID_REP_LEN), // Report descriptor total length, lo. usb_word_msb_get(DESCR_HID_REP_LEN), // Report descriptor total length, hi. // End point descriptor. DESC_ENDPOINT_LEN, // Descriptor length. DESC_ENDPOINT, // Descriptor type. HID_EP_IN, // End point address (ep1 in). 0x03, // End point type (interrupt). usb_word_lsb_get(EP_MAX_PACKET_SIZE), // Maximum packet size, lo (ep1 size). usb_word_msb_get(EP_MAX_PACKET_SIZE), // Maximum packet size, hi (ep1 size). 0x01 // Polling interval (1 ms). }; static const uint8_t g_lang_id_desc[] = { 0x04, // Descriptor length. DESC_STRING, // Descriptor type. usb_word_lsb_get(LANG_ID), // Language id, lo. usb_word_msb_get(LANG_ID) // Language id, hi. }; static const uint8_t g_manuf_str_desc[] = { 0x18, // Descriptor length. DESC_STRING, // Descriptor type. // Unicode string: 'Q', 0, 'B', 0, 'S', 0, ' ', 0, 'e', 0, 'x', 0, 'a', 0, 'm', 0, 'p', 0, 'l', 0, 'e', 0 }; static const uint8_t g_product_str_desc[] = { 0x1A, // Descriptor length. DESC_STRING, // Descriptor type. // Unicode string: 'N', 0, 'E', 0, 'S', 0, ' ', 0, 'G', 0, 'a', 0, 'm', 0, 'e', 0, 'P', 0, 'a', 0, 'd', 0, 's', 0 }; static const uint8_t g_serialno_str_desc[] = { 0x1A, // Descriptor length. DESC_STRING, // Descriptor type. // Unicode string: '0', 0 ,'1', 0, '0', 0, '2', 0, '0', 0, '3', 0, '0', 0, '4', 0, '0', 0, '5', 0, '0', 0, '6', 0 }; static const uint8_t *ep0_string_desc_get(uint16_t *length) { const uint8_t index = hid_ep0_setup_lvalue_get(); switch (index) { case DESC_LANGID_STRING_INDEX: *length = sizeof(g_lang_id_desc); return g_lang_id_desc; case DESC_MFG_STRING_INDEX: *length = sizeof(g_manuf_str_desc); return g_manuf_str_desc; case DESC_PRODUCT_STRING_INDEX: *length = sizeof(g_product_str_desc); return g_product_str_desc; case DESC_SERIAL_STRING_INDEX: *length = sizeof(g_serialno_str_desc); return g_serialno_str_desc; default: break; } return 0; } const uint8_t *hid_ep0_desc_get(uint8_t type, uint16_t *length) { switch (type) { case DESC_DEVICE: *length = DESC_DEVICE_TOTAL_LEN; return g_device_desc; case DESC_CONF: *length = DESC_CONF_TOTAL_LEN; return g_config_desc; case DESC_STRING: return ep0_string_desc_get(length); case DESC_DEVICE_QUAL: *length = DESC_DEVICE_QUAL_TOTAL_LEN; return g_device_qual_desc; case DESC_HID: *length = DESC_HID_LEN; return &g_config_desc[DESC_CONF_LEN + DESC_INTERFACE_LEN]; case DESC_REPORT: *length = DESCR_HID_REP_TOTAL_LEN; return g_hid_report_desc; default: break; } return 0; } qbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/hidep0.c0000644000175100001770000003464114616416776023642 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "hid.h" #include "hwdefs.h" #include "usb.h" enum usb_ep0_action { STATUS_ACTION_NOTHING, STATUS_ACTION_DATA_IN }; struct usb_ep0 { uint8_t IEPCNFG; // Input ep0 configuration register. uint8_t IEPBCNT; // Input ep0 buffer byte count. uint8_t OEPCNFG; // Output ep0 configuration register. uint8_t OEPBCNT; // Output ep0 buffer byte count. }; struct usb_ep0_data { uint8_t data[EP_MAX_FIFO_SIZE]; uint16_t length; uint16_t offset; enum usb_ep0_action action; bool host_ask_more_data_than_available; }; #if defined(__ICC430__) #pragma location = 0x0920 // Input ep0 configuration address. __no_init struct usb_ep0 __data16 g_ep0; #pragma location = 0x2378 // Input ep0 buffer address. __no_init uint8_t __data16 g_ep0_in_buf[EP0_MAX_PACKET_SIZE]; #pragma location = 0x2380 // Setup packet block address. __no_init uint8_t __data16 g_setupdat[EP0_MAX_PACKET_SIZE]; #elif defined(__GNUC__) extern struct usb_ep0 g_ep0; extern uint8_t g_ep0_in_buf[EP0_MAX_PACKET_SIZE]; extern uint8_t g_setupdat[EP0_MAX_PACKET_SIZE]; #endif static volatile bool g_enumerated = false; static bool g_rwuen = false; static bool g_selfpwr = false; static struct usb_ep0_data g_ep0_response; static bool ep0_in_response_create(const uint8_t *data, uint16_t length) { if (sizeof(g_ep0_response.data) < length) return false; for (uint16_t i = 0; i < length; ++i) g_ep0_response.data[i] = data[i]; g_ep0_response.length = length; g_ep0_response.offset = 0; const uint16_t setup_length = (g_setupdat[7] << 8) | g_setupdat[6]; if (g_ep0_response.length >= setup_length) { g_ep0_response.length = setup_length; g_ep0_response.host_ask_more_data_than_available = false; } else { g_ep0_response.host_ask_more_data_than_available = true; } return true; } void ep0_in_frame_send(void) { uint8_t frame_size = 0; if (g_ep0_response.length != EP_NO_MORE_DATA) { if (g_ep0_response.length > EP0_MAX_PACKET_SIZE) { frame_size = EP0_MAX_PACKET_SIZE; g_ep0_response.length -= EP0_MAX_PACKET_SIZE; g_ep0_response.action = STATUS_ACTION_DATA_IN; } else if (g_ep0_response.length < EP0_MAX_PACKET_SIZE) { frame_size = g_ep0_response.length; g_ep0_response.length = EP_NO_MORE_DATA; g_ep0_response.action = STATUS_ACTION_NOTHING; } else { frame_size = EP0_MAX_PACKET_SIZE; if (g_ep0_response.host_ask_more_data_than_available) { g_ep0_response.length = 0; g_ep0_response.action = STATUS_ACTION_DATA_IN; } else { g_ep0_response.length = EP_NO_MORE_DATA; g_ep0_response.action = STATUS_ACTION_NOTHING; } } for (uint8_t i = 0; i < frame_size; ++i) { g_ep0_in_buf[i] = g_ep0_response.data[g_ep0_response.offset]; ++g_ep0_response.offset; } g_ep0.IEPBCNT = frame_size; } else { g_ep0_response.action = STATUS_ACTION_NOTHING; } } static bool ep0_dev_status_get(void) { uint16_t status = 0; if (g_selfpwr) status |= STATUS_SELF_POWERED; if (g_rwuen) status |= STATUS_REMOTE_WAKEUP; ep0_in_response_create((uint8_t *)&status, sizeof(status)); return true; } static bool ep0_iface_status_get(void) { uint16_t status = 0; ep0_in_response_create((uint8_t *)&status, sizeof(status)); return true; } static bool ep0_ep_status_get(void) { uint16_t status = 0; const uint8_t ep = hid_ep0_setup_lindex_get(); const uint8_t ep_num = ep & ~SETUP_DIR; if (ep_num == 0) { status = hid_ep0_in_is_stalled() ? 1 : 0; } else if ((ep_num == 1) && (ep & SETUP_DIR) == SETUP_INPUT) { // We support only one input ep1 in. status = hid_ep1_in_is_stalled() ? 1 : 0; } else { return false; } ep0_in_response_create((uint8_t *)&status, sizeof(status)); return true; } static bool ep0_get_status_proc(void) { const uint8_t bm_req_type = hid_ep0_setup_bm_request_type_get(); if ((bm_req_type & SETUP_DIR) != SETUP_INPUT) return false; const uint8_t recipient = bm_req_type & SETUP_RECIPIENT; switch (recipient) { case SETUP_DEVICE: return ep0_dev_status_get(); case SETUP_IFACE: return ep0_iface_status_get(); case SETUP_EP: return ep0_ep_status_get(); default: break; } return false; } static bool ep0_dev_feature_clear(void) { const uint8_t feature = hid_ep0_setup_lvalue_get(); if (feature != FEATURE_REMOTE_WAKEUP) return false; g_rwuen = false; return true; } static bool ep0_ep_feature_clear(void) { const uint8_t feature = hid_ep0_setup_lvalue_get(); if (feature != FEATURE_STALL) return false; const uint8_t ep = hid_ep0_setup_lindex_get(); const uint8_t ep_num = ep & ~SETUP_DIR; if (ep_num == 0) { // Do nothing. } else if ((ep_num == 1) && (ep & SETUP_DIR) == SETUP_INPUT) { // We support only one input ep1 in. hid_ep1_in_unstall(); } else { return false; } hid_ep0_in_clear(); return true; } static bool ep0_clear_feature_proc(void) { const uint8_t bm_req_type = hid_ep0_setup_bm_request_type_get(); if ((bm_req_type & SETUP_DIR) != SETUP_INPUT) return false; const uint8_t recipient = bm_req_type & SETUP_RECIPIENT; switch (recipient) { case SETUP_DEVICE: return ep0_dev_feature_clear(); case SETUP_EP: return ep0_ep_feature_clear(); default: break; } return false; } static bool ep0_dev_feature_set(void) { const uint8_t feature = hid_ep0_setup_lvalue_get(); switch (feature) { case FEATURE_REMOTE_WAKEUP: g_rwuen = true; return true; case FEATURE_TEST_MODE: // This is "test mode", just return the handshake. return true; default: break; } return false; } static bool ep0_ep_feature_set(void) { const uint8_t feature = hid_ep0_setup_lvalue_get(); if (feature != FEATURE_STALL) return false; const uint8_t ep = hid_ep0_setup_lindex_get(); const uint8_t ep_num = ep & ~SETUP_DIR; if (ep_num == 0) { // Do nothing. } else if ((ep_num == 1) && (ep & SETUP_DIR) == SETUP_INPUT) { // We support only one input ep1 in. hid_ep1_in_stall(); } else { return false; } hid_ep0_in_clear(); return true; } static bool ep0_set_feature_proc(void) { const uint8_t bm_req_type = hid_ep0_setup_bm_request_type_get(); switch (bm_req_type & SETUP_RECIPIENT) { case SETUP_DEVICE: return ep0_dev_feature_set(); case SETUP_EP: return ep0_ep_feature_set(); default: break; } return false; } static bool ep0_set_address_proc(void) { hid_ep0_out_stall(); const uint8_t address = hid_ep0_setup_lvalue_get(); if (address >= 128) return false; USBFUNADR = address; hid_ep0_in_clear(); return true; } static bool ep0_descriptor_proc(uint8_t type) { uint16_t length = 0; const uint8_t *pdesc = hid_ep0_desc_get(type, &length); if (!pdesc) return false; ep0_in_response_create(pdesc, length); return true; } static bool ep0_get_descriptor_proc(void) { const uint8_t descr_type = hid_ep0_setup_hvalue_get(); switch (descr_type) { case DESC_DEVICE: case DESC_CONF: case DESC_STRING: case DESC_DEVICE_QUAL: case DESC_OTHER_SPEED_CONF: case DESC_HID: case DESC_REPORT: return ep0_descriptor_proc(descr_type); } return false; } static bool ep0_get_config_proc(void) { // We only support configuration 1. const uint8_t cfg_num = HID_CONFIG_NUMBER; ep0_in_response_create(&cfg_num, sizeof(cfg_num)); return true; } static bool ep0_set_config_proc(void) { const uint8_t cfg_num = hid_ep0_setup_lvalue_get(); // We only support configuration 1. const bool is_valid = (cfg_num & HID_CONFIG_NUMBER); hid_ep0_enumerated_set(is_valid); return is_valid; } static bool ep0_get_iface_proc(void) { const uint8_t iface_num = hid_ep0_setup_lindex_get(); if (iface_num != HID_IFACE_NUMBER) return false; ep0_in_response_create(&iface_num, sizeof(iface_num)); return true; } static bool ep0_set_iface_proc(void) { const uint8_t iface_num = hid_ep0_setup_lindex_get(); if (iface_num != HID_IFACE_NUMBER) return false; const uint8_t alt_iface_num = hid_ep0_setup_lvalue_get(); if (alt_iface_num != HID_ALT_IFACE_NUMBER) return false; hid_ep0_out_stall(); hid_ep0_in_clear(); return true; } static bool ep0_std_proc(void) { const uint8_t request_code = hid_ep0_setup_request_get(); switch (request_code) { case SETUP_GET_STATUS: return ep0_get_status_proc(); case SETUP_CLEAR_FEATURE: return ep0_clear_feature_proc(); case SETUP_SET_FEATURE: return ep0_set_feature_proc(); case SETUP_SET_ADDRESS: return ep0_set_address_proc(); case SETUP_GET_DESCRIPTOR: return ep0_get_descriptor_proc(); case SETUP_GET_CONFIGURATION: return ep0_get_config_proc(); case SETUP_SET_CONFIGURATION: return ep0_set_config_proc(); case SETUP_GET_INTERFACE: return ep0_get_iface_proc(); case SETUP_SET_INTERFACE: return ep0_set_iface_proc(); default: break; } return false; } static bool ep0_setup(void) { const uint8_t bm_req_type = hid_ep0_setup_bm_request_type_get(); const uint8_t setup_type = bm_req_type & SETUP_TYPE; switch (setup_type) { case SETUP_STANDARD: return ep0_std_proc(); default: break; } return false; } static bool ep0_has_another_setup(void) { if ((USBIFG & STPOWIFG) != 0) { USBIFG &= ~(STPOWIFG | SETUPIFG); return true; } return false; } void hid_ep0_init(void) { hid_ep0_in_nak(); hid_ep0_out_nak(); g_ep0.IEPCNFG = UBME | STALL | USBIIE; g_ep0.OEPCNFG = UBME | STALL | USBIIE; // Enable only ep0in interrupts. USBIEPIE |= BIT0; } void hid_ep0_setup_handler(void) { USBCTL |= FRSTE; g_ep0_response.length = 0; g_ep0_response.offset = 0; g_ep0_response.action = STATUS_ACTION_NOTHING; g_ep0_response.host_ask_more_data_than_available = false; for (;;) { const uint8_t bm_req_type = hid_ep0_setup_bm_request_type_get(); if ((bm_req_type & SETUP_INPUT) == SETUP_INPUT) USBCTL |= DIR; else USBCTL &= ~DIR; const bool success = ep0_setup(); if (success) { hid_ep0_out_clear(); ep0_in_frame_send(); } else { hid_ep0_in_stall(); } if (!ep0_has_another_setup()) return; } } void hid_ep0_in_handler(void) { USBCTL |= FRSTE; hid_ep0_out_clear(); if (g_ep0_response.action == STATUS_ACTION_DATA_IN) ep0_in_frame_send(); else hid_ep0_in_stall(); } void hid_ep0_in_nak(void) { g_ep0.IEPBCNT = NAK; } void hid_ep0_in_stall(void) { g_ep0.IEPCNFG |= STALL; } void hid_ep0_in_clear(void) { g_ep0_response.length = EP_NO_MORE_DATA; g_ep0_response.action = STATUS_ACTION_NOTHING; g_ep0.IEPBCNT = 0; } bool hid_ep0_in_is_stalled(void) { return (g_ep0.IEPCNFG & STALL); } void hid_ep0_out_nak(void) { g_ep0.OEPBCNT = NAK; } void hid_ep0_out_stall(void) { g_ep0.OEPCNFG |= STALL; } void hid_ep0_out_clear(void) { g_ep0.OEPBCNT = 0; } uint8_t hid_ep0_setup_bm_request_type_get(void) { return g_setupdat[0]; } uint8_t hid_ep0_setup_request_get(void) { return g_setupdat[1]; } uint8_t hid_ep0_setup_lvalue_get(void) { return g_setupdat[2]; } uint8_t hid_ep0_setup_hvalue_get(void) { return g_setupdat[3]; } uint8_t hid_ep0_setup_lindex_get(void) { return g_setupdat[4]; } uint8_t hid_ep0_setup_hindex_get(void) { return g_setupdat[5]; } void hid_ep0_enumerated_set(bool enumerated) { g_enumerated = enumerated; } bool hid_ep0_is_enumerated(void) { return g_enumerated; } qbs-src-2.3.1/examples/baremetal/msp430f5529/nes-gamepads/pmm.c0000644000175100001770000002155314616416776023260 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "hwdefs.h" #include "pmm.h" #define PMMCTL0_H_ADDRESS (PMM_BASE + OFS_PMMCTL0_H) #define PMMCTL0_L_ADDRESS (PMM_BASE + OFS_PMMCTL0_L) #define PMMRIE_ADDRESS (PMM_BASE + OFS_PMMRIE) #define PMMIFG_ADDRESS (PMM_BASE + OFS_PMMIFG) #define SVSMHCTL_ADDRESS (PMM_BASE + OFS_SVSMHCTL) #define SVSMLCTL_ADDRESS (PMM_BASE + OFS_SVSMLCTL) #define PMM_OTHER_BITSL \ (SVSLRVL0 | SVSLRVL1 | SVSMLRRL0 | SVSMLRRL1 | SVSMLRRL2) #define PMM_OTHER_BITSH \ (SVSHRVL0 | SVSHRVL1 | SVSMHRRL0 | SVSMHRRL1 | SVSMHRRL2) #define PMM_CLEANUP_FLAGS \ (SVMHVLRIFG | SVMHIFG | SVSMHDLYIFG | SVMLVLRIFG | SVMLIFG | SVSMLDLYIFG) static void pmm_write_access_allow(bool allow) { HWREG8(PMMCTL0_H_ADDRESS) = allow ? PMMPW_H : 0; } static void pmm_interrupt_flags_clear(uint16_t flags) { HWREG16(PMMIFG_ADDRESS) &= ~flags; } static void pmm_interrupt_flags_wait(uint16_t flags) { while ((HWREG16(PMMIFG_ADDRESS) & flags) == 0) { ; } } static uint8_t pmm_level_mask(enum ppm_voltage voltage) { switch (voltage) { case PMM_VOLTAGE_1_35V: return PMMCOREV_0; case PMM_VOLTAGE_1_55V: return PMMCOREV_1; case PMM_VOLTAGE_1_75V: return PMMCOREV_2; case PMM_VOLTAGE_1_85V: return PMMCOREV_3; default: break; } return PMMCOREV_0; } static bool pmm_voltage_set_up(uint8_t level) { pmm_write_access_allow(true); // Disable interrupts and backup all registers. uint16_t pmmrie_backup = HWREG16(PMMRIE_ADDRESS); HWREG16(PMMRIE_ADDRESS) &= ~(SVMHVLRPE | SVSHPE | SVMLVLRPE | SVSLPE | SVMHVLRIE | SVMHIE | SVSMHDLYIE | SVMLVLRIE | SVMLIE | SVSMLDLYIE); uint16_t svsmhctl_backup = HWREG16(SVSMHCTL_ADDRESS); uint16_t svsmlctl_backup = HWREG16(SVSMLCTL_ADDRESS); // Clear all interrupt flags. pmm_interrupt_flags_clear(0xFFFF); // Set SVM high side to new level and check if voltage increase is possible. HWREG16(SVSMHCTL_ADDRESS) = SVMHE | SVSHE | (SVSMHRRL0 * level); pmm_interrupt_flags_wait(SVSMHDLYIFG); pmm_interrupt_flags_clear(SVSMHDLYIFG); // Check if a voltage increase is possible. if ((HWREG16(PMMIFG_ADDRESS) & SVMHIFG) == SVMHIFG) { // Vcc is too low for a voltage increase, recover the previous settings. HWREG16(PMMIFG_ADDRESS) &= ~SVSMHDLYIFG; HWREG16(SVSMHCTL_ADDRESS) = svsmhctl_backup; pmm_interrupt_flags_wait(SVSMHDLYIFG); pmm_interrupt_flags_clear(PMM_CLEANUP_FLAGS); // Restore interrupt enable register. HWREG16(PMMRIE_ADDRESS) = pmmrie_backup; pmm_write_access_allow(false); return false; } // Set SVS high side to new level. HWREG16(SVSMHCTL_ADDRESS) |= (SVSHRVL0 * level); pmm_interrupt_flags_wait(SVSMHDLYIFG); pmm_interrupt_flags_clear(SVSMHDLYIFG); // Set new voltage level. HWREG8(PMMCTL0_L_ADDRESS) = PMMCOREV0 * level; // Set SVM, SVS low side to new level. HWREG16(SVSMLCTL_ADDRESS) = SVMLE | (SVSMLRRL0 * level) | SVSLE | (SVSLRVL0 * level); pmm_interrupt_flags_wait(SVSMLDLYIFG); pmm_interrupt_flags_clear(SVSMLDLYIFG); // Restore low side settings and clear all other bits. HWREG16(SVSMLCTL_ADDRESS) &= PMM_OTHER_BITSL; // Clear low side level settings in backup register and keep all other bits. svsmlctl_backup &= ~PMM_OTHER_BITSL; // Restore low side SVS monitor settings. HWREG16(SVSMLCTL_ADDRESS) |= svsmlctl_backup; // Restore high side settings and clear all other bits. HWREG16(SVSMHCTL_ADDRESS) &= PMM_OTHER_BITSH; // Clear high side level settings in backup register and keep all other bits. svsmhctl_backup &= ~PMM_OTHER_BITSH; // Restore high side SVS monitor settings. HWREG16(SVSMHCTL_ADDRESS) |= svsmhctl_backup; pmm_interrupt_flags_wait(SVSMLDLYIFG | SVSMHDLYIFG); pmm_interrupt_flags_clear(PMM_CLEANUP_FLAGS); // Restore interrupt enable register. HWREG16(PMMRIE_ADDRESS) = pmmrie_backup; pmm_write_access_allow(false); return true; } static uint16_t pmm_voltage_set_down(uint8_t level) { pmm_write_access_allow(true); // Disable interrupts and backup all registers. uint16_t pmmrie_backup = HWREG16(PMMRIE_ADDRESS); HWREG16(PMMRIE_ADDRESS) &= ~(SVMHVLRPE | SVSHPE | SVMLVLRPE | SVSLPE | SVMHVLRIE | SVMHIE | SVSMHDLYIE | SVMLVLRIE | SVMLIE | SVSMLDLYIE ); uint16_t svsmhctl_backup = HWREG16(SVSMHCTL_ADDRESS); uint16_t svsmlctl_backup = HWREG16(SVSMLCTL_ADDRESS); pmm_interrupt_flags_clear(SVMHIFG | SVSMHDLYIFG | SVMLIFG | SVSMLDLYIFG); // Set SVM, SVS high & low side to new settings in normal mode. HWREG16(SVSMHCTL_ADDRESS) = SVMHE | (SVSMHRRL0 * level) | SVSHE | (SVSHRVL0 * level); HWREG16(SVSMLCTL_ADDRESS) = SVMLE | (SVSMLRRL0 * level) | SVSLE | (SVSLRVL0 * level); pmm_interrupt_flags_wait(SVSMHDLYIFG | SVSMLDLYIFG); pmm_interrupt_flags_clear(SVSMHDLYIFG | SVSMLDLYIFG); // Set new voltage level. HWREG8(PMMCTL0_L_ADDRESS) = PMMCOREV0 * level; // Restore low side settings and clear all other bits. HWREG16(SVSMLCTL_ADDRESS) &= PMM_OTHER_BITSL; // Clear low side level settings in backup register and keep all other bits. svsmlctl_backup &= ~PMM_OTHER_BITSL; //Restore low side SVS monitor settings. HWREG16(SVSMLCTL_ADDRESS) |= svsmlctl_backup; // Restore high side settings and clear all other bits. HWREG16(SVSMHCTL_ADDRESS) &= PMM_OTHER_BITSH; // Clear high side level settings in backup register and keep all other bits. svsmhctl_backup &= ~PMM_OTHER_BITSH; // Restore high side SVS monitor settings. HWREG16(SVSMHCTL_ADDRESS) |= svsmhctl_backup; pmm_interrupt_flags_wait(SVSMLDLYIFG | SVSMHDLYIFG); pmm_interrupt_flags_clear(PMM_CLEANUP_FLAGS); // Restore interrupt enable register. HWREG16(PMMRIE_ADDRESS) = pmmrie_backup; pmm_write_access_allow(false); return true; } bool pmm_voltage_init(enum ppm_voltage voltage) { const uint8_t exp_level = pmm_level_mask(voltage) & PMMCOREV_3; uint8_t act_level = (HWREG16(PMM_BASE + OFS_PMMCTL0) & PMMCOREV_3); bool result = true; while ((exp_level != act_level) && result) { if (exp_level > act_level) result = pmm_voltage_set_up(++act_level); else result = pmm_voltage_set_down(--act_level); } return result; } qbs-src-2.3.1/examples/baremetal/msp430f5529/msp430f5529.qbs0000644000175100001770000000507214616416776022205 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ Project { name: "Examples for msp430f5529 board" references: [ "redblink/redblink.qbs", "nes-gamepads/nes-gamepads.qbs" ] } qbs-src-2.3.1/examples/baremetal/msp430f5529/redblink/0000755000175100001770000000000014616416776021543 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/msp430f5529/redblink/system.c0000644000175100001770000000523314616416776023236 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "system.h" #if defined(__ICC430__) #include #elif defined(__GNUC__) #include #else #error "Unsupported toolchain" #endif void system_init(void) { // Stop watchdog timer. WDTCTL = WDTPW + WDTHOLD; } qbs-src-2.3.1/examples/baremetal/msp430f5529/redblink/README.md0000644000175100001770000000045714616416776023030 0ustar runnerdockerThis example demonstrates how to build a bare-metal application using different MSP430 toolchains. It is designed for the MSP-EXP430F5529LP target board (based on msp430f5529 chip) and simply flashes the red LED on the board. The following toolchains are supported: * IAR Embedded Workbench * GCC qbs-src-2.3.1/examples/baremetal/msp430f5529/redblink/gpio.h0000644000175100001770000000512614616416776022656 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef GPIO_H #define GPIO_H #ifdef __cplusplus extern "C" { #endif void gpio_init_red_led(void); void gpio_toggle_red_led(void); #ifdef __cplusplus } #endif #endif // GPIO_H qbs-src-2.3.1/examples/baremetal/msp430f5529/redblink/redblink.qbs0000644000175100001770000001063414616416776024050 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ CppApplication { condition: { if (!qbs.architecture.contains("msp430")) return false; return qbs.toolchain.contains("iar") || qbs.toolchain.contains("gcc") } name: "msp430f5529-redblink" cpp.cLanguageVersion: "c99" cpp.positionIndependentCode: false // // IAR-specific properties and sources. // Properties { condition: qbs.toolchain.contains("iar") cpp.driverFlags: ["--core=430X"] cpp.entryPoint: "__program_start" cpp.driverLinkerFlags: [ "-D_STACK_SIZE=A0", "-D_DATA16_HEAP_SIZE=A0", "-D_DATA20_HEAP_SIZE=50", ] cpp.staticLibraries: [ // Explicitly link with the runtime dlib library (which contains // all required startup code and other stuff). cpp.toolchainInstallPath + "/../lib/dlib/dl430xlsfn.r43" ] } Group { condition: qbs.toolchain.contains("iar") name: "IAR" prefix: "iar/" Group { name: "Linker Script" prefix: cpp.toolchainInstallPath + "/../config/linker/" fileTags: ["linkerscript"] // Explicitly use the default linker scripts for current target. files: ["lnk430f5529.xcl", "multiplier32.xcl"] } } // // GCC-specific properties and soucres. // Properties { condition: qbs.toolchain.contains("gcc") property path supportFilesPath // A path to the MSP430 support files, which are // provided by the Texas Instruments separately: // e.g. 'c:/msp430-gcc-support-files/include/' cpp.includePaths: supportFilesPath cpp.libraryPaths: supportFilesPath cpp.driverFlags: ["-mmcu=msp430f5529"] } // // Common code. // Group { name: "Gpio" files: ["gpio.c", "gpio.h"] } Group { name: "System" files: ["system.c", "system.h"] } files: [ "main.c", ] } qbs-src-2.3.1/examples/baremetal/msp430f5529/redblink/system.h0000644000175100001770000000506614616416776023247 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef SYSTEM_H #define SYSTEM_H #ifdef __cplusplus extern "C" { #endif void system_init(void); #ifdef __cplusplus } #endif #endif // SYSTEM_H qbs-src-2.3.1/examples/baremetal/msp430f5529/redblink/main.c0000644000175100001770000000535214616416776022640 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "gpio.h" #include "system.h" #include static void some_delay(uint32_t counts) { for (uint32_t index = 0u; index < counts; ++index) __asm("nop"); } int main(void) { system_init(); gpio_init_red_led(); while (1) { gpio_toggle_red_led(); some_delay(10000u); } } qbs-src-2.3.1/examples/baremetal/msp430f5529/redblink/gpio.c0000644000175100001770000000566314616416776022657 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "gpio.h" #if defined(__ICC430__) #include #elif defined(__GNUC__) #include #else #error "Unsupported toolchain" #endif // LED pin number. #define GPIO_RED_LED_PIN_POS (0u) // LED port direction. #define GPIO_RED_LED_PORT_DIR (P1DIR) // LED output port. #define GPIO_RED_LED_PORT_OUT (P1OUT) void gpio_init_red_led(void) { GPIO_RED_LED_PORT_DIR |= (1u << GPIO_RED_LED_PIN_POS); } void gpio_toggle_red_led(void) { GPIO_RED_LED_PORT_OUT ^= (1u << GPIO_RED_LED_PIN_POS); } qbs-src-2.3.1/examples/baremetal/stm32f4discovery/0000755000175100001770000000000014616416776021362 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/stm32f4discovery/blueblink/0000755000175100001770000000000014616416776023331 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/stm32f4discovery/blueblink/README.md0000644000175100001770000000055514616416776024615 0ustar runnerdockerThis example demonstrates how to build a bare-metal application using different ARM toolchains. It is designed for the stm32f4discovery evaluation kit (based on stm32f407vg MCU) and simply flashes the blue LED on the board. The following toolchains are supported: * GNU Arm Embedded Toolchain * IAR Embedded Workbench * KEIL Microcontroller Development Kit qbs-src-2.3.1/examples/baremetal/stm32f4discovery/blueblink/gpio.h0000644000175100001770000000513014616416776024437 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef GPIO_H #define GPIO_H #ifdef __cplusplus extern "C" { #endif void gpio_init_blue_led(void); void gpio_toggle_blue_led(void); #ifdef __cplusplus } #endif #endif // GPIO_H qbs-src-2.3.1/examples/baremetal/stm32f4discovery/blueblink/system.h0000644000175100001770000001050714616416776025031 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef SYSTEM_H #define SYSTEM_H #include #ifdef __cplusplus extern "C" { #endif #define __IO volatile // General purpose input/output registers map. struct gpio_regs_map { __IO uint32_t MODER; __IO uint32_t OTYPER; __IO uint32_t OSPEEDR; __IO uint32_t PUPDR; __IO uint32_t IDR; __IO uint32_t ODR; __IO uint32_t BSRR; __IO uint32_t LCKR; __IO uint32_t AFR[2u]; }; // Reset and clock control registers map. struct rcc_regs_map { __IO uint32_t CR; __IO uint32_t PLLCFGR; __IO uint32_t CFGR; __IO uint32_t CIR; __IO uint32_t AHB1RSTR; __IO uint32_t AHB2RSTR; __IO uint32_t AHB3RSTR; uint32_t RESERVED0; __IO uint32_t APB1RSTR; __IO uint32_t APB2RSTR; uint32_t RESERVED1[2u]; __IO uint32_t AHB1ENR; __IO uint32_t AHB2ENR; __IO uint32_t AHB3ENR; uint32_t RESERVED2; __IO uint32_t APB1ENR; __IO uint32_t APB2ENR; uint32_t RESERVED3[2u]; __IO uint32_t AHB1LPENR; __IO uint32_t AHB2LPENR; __IO uint32_t AHB3LPENR; uint32_t RESERVED4; __IO uint32_t APB1LPENR; __IO uint32_t APB2LPENR; uint32_t RESERVED5[2u]; __IO uint32_t BDCR; __IO uint32_t CSR; uint32_t RESERVED6[2u]; __IO uint32_t SSCGR; __IO uint32_t PLLI2SCFGR; }; #define PERIPH_ADDRESS (0x40000000u) #define APB2PERIPH_ADDRESS (PERIPH_ADDRESS + 0x00010000u) #define AHB1PERIPH_ADDRESS (PERIPH_ADDRESS + 0x00020000u) // APB2 peripherals. #define SYSCFG_REGS_ADDRESS (APB2PERIPH_ADDRESS + 0x3800u) #define EXTI_REGS_ADDRESS (APB2PERIPH_ADDRESS + 0x3C00u) // AHB1 peripherals. #define GPIOD_REGS_ADDRESS (AHB1PERIPH_ADDRESS + 0x0C00u) #define RCC_REGS_ADDRESS (AHB1PERIPH_ADDRESS + 0x3800u) #define GPIOD_REGS_MAP ((struct gpio_regs_map *)GPIOD_REGS_ADDRESS) #define RCC_REGS_MAP ((struct rcc_regs_map *)RCC_REGS_ADDRESS) #ifdef __cplusplus } #endif #endif // SYSTEM_H qbs-src-2.3.1/examples/baremetal/stm32f4discovery/blueblink/iar/0000755000175100001770000000000014616416776024104 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/stm32f4discovery/blueblink/iar/startup.s0000644000175100001770000001621014616416776025772 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ MODULE ?cstartup SECTION CSTACK:DATA:NOROOT(3) SECTION .intvec:CODE:NOROOT(2) EXTERN __iar_program_start PUBLIC _vectors_table DATA _vectors_table ;; Generic interrupts offset. DCD sfe(CSTACK) ; Initial stack pointer value. DCD reset_handler ; Reset. DCD 0 ; NMI. DCD 0 ; Hard fault. DCD 0 ; Memory management fault. DCD 0 ; Bus fault. DCD 0 ; Usage fault. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; SVC. DCD 0 ; Debug monitor. DCD 0 ; Reserved. DCD 0 ; PendSV. DCD 0 ; SysTick. ;; External interrupts offset. DCD 0 ; Window WatchDog. DCD 0 ; PVD through EXTI Line detection. DCD 0 ; Tamper and TimeStamps through the EXTI line. DCD 0 ; RTC Wakeup through the EXTI line. DCD 0 ; FLASH. DCD 0 ; RCC. DCD 0 ; EXTI Line0. DCD 0 ; EXTI Line1. DCD 0 ; EXTI Line2. DCD 0 ; EXTI Line3. DCD 0 ; EXTI Line4. DCD 0 ; DMA1 Stream 0. DCD 0 ; DMA1 Stream 1. DCD 0 ; DMA1 Stream 2. DCD 0 ; DMA1 Stream 3. DCD 0 ; DMA1 Stream 4. DCD 0 ; DMA1 Stream 5. DCD 0 ; DMA1 Stream 6. DCD 0 ; ADC1, ADC2 and ADC3s. DCD 0 ; CAN1 TX. DCD 0 ; CAN1 RX0. DCD 0 ; CAN1 RX1. DCD 0 ; CAN1 SCE. DCD 0 ; External Line[9:5]s. DCD 0 ; TIM1 Break and TIM9. DCD 0 ; TIM1 Update and TIM10. DCD 0 ; TIM1 Trigger and Commutation and TIM11. DCD 0 ; TIM1 Capture Compare. DCD 0 ; TIM2. DCD 0 ; TIM3. DCD 0 ; TIM4. DCD 0 ; I2C1 Event. DCD 0 ; I2C1 Error. DCD 0 ; I2C2 Event. DCD 0 ; I2C2 Error. DCD 0 ; SPI1. DCD 0 ; SPI2. DCD 0 ; USART1. DCD 0 ; USART2. DCD 0 ; USART3. DCD 0 ; External Line[15:10]s. DCD 0 ; RTC Alarm (A and B) through EXTI Line. DCD 0 ; USB OTG FS Wakeup through EXTI line. DCD 0 ; TIM8 Break and TIM12. DCD 0 ; TIM8 Update and TIM13. DCD 0 ; TIM8 Trigger and Commutation and TIM14. DCD 0 ; TIM8 Capture Compare. DCD 0 ; DMA1 Stream7. DCD 0 ; FSMC. DCD 0 ; SDIO. DCD 0 ; TIM5. DCD 0 ; SPI3. DCD 0 ; UART4. DCD 0 ; UART5. DCD 0 ; TIM6 and DAC1&2 underrun errors. DCD 0 ; TIM7. DCD 0 ; DMA2 Stream 0. DCD 0 ; DMA2 Stream 1. DCD 0 ; DMA2 Stream 2. DCD 0 ; DMA2 Stream 3. DCD 0 ; DMA2 Stream 4. DCD 0 ; Ethernet. DCD 0 ; Ethernet Wakeup through EXTI line. DCD 0 ; CAN2 TX. DCD 0 ; CAN2 RX0. DCD 0 ; CAN2 RX1. DCD 0 ; CAN2 SCE. DCD 0 ; USB OTG FS. DCD 0 ; DMA2 Stream 5. DCD 0 ; DMA2 Stream 6. DCD 0 ; DMA2 Stream 7. DCD 0 ; USART6. DCD 0 ; I2C3 event. DCD 0 ; I2C3 error. DCD 0 ; USB OTG HS End Point 1 Out. DCD 0 ; USB OTG HS End Point 1 In. DCD 0 ; USB OTG HS Wakeup through EXTI. DCD 0 ; USB OTG HS. DCD 0 ; DCMI. DCD 0 ; CRYP crypto. DCD 0 ; Hash and RNG. DCD 0 ; FPU. ;; Reset handler. THUMB PUBWEAK reset_handler SECTION .text:CODE:REORDER:NOROOT(2) reset_handler BLX R0 LDR R0, =__iar_program_start BX R0 END qbs-src-2.3.1/examples/baremetal/stm32f4discovery/blueblink/iar/flash.icf0000644000175100001770000000702614616416776025671 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ define symbol _start_of_intvec_section = 0x08000000; define symbol _start_of_ram_section = 0x20000000; define symbol _end_of_ram_section = 0x2001FFFF; define symbol _start_of_ccmram_section = 0x10000000; define symbol _end_of_ccmram_section = 0x1000FFFF; define symbol _start_of_flash_section = 0x08000000; define symbol _end_of_flash_section = 0x080FFFFF; define symbol _min_stack_size = 0x400; define symbol _min_heap_size = 0x200; define memory mem with size = 4G; define region flash_section = mem:[from _start_of_flash_section to _end_of_flash_section]; define region ram_section = mem:[from _start_of_ram_section to _end_of_ram_section]; define region ccmram_section = mem:[from _start_of_ccmram_section to _end_of_ccmram_section]; define block CSTACK with alignment = 8, size = _min_stack_size { }; define block HEAP with alignment = 8, size = _min_heap_size { }; initialize by copy { readwrite }; do not initialize { section .noinit }; place at address mem:_start_of_intvec_section { readonly section .intvec }; place in flash_section { readonly }; place in ram_section { readwrite, block CSTACK, block HEAP }; qbs-src-2.3.1/examples/baremetal/stm32f4discovery/blueblink/blueblink.qbs0000644000175100001770000001216314616416776026012 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ CppApplication { condition: { if (!qbs.architecture.startsWith("arm")) return false; return (qbs.toolchain.contains("gcc") || qbs.toolchain.contains("iar") || qbs.toolchain.contains("keil")) && !qbs.toolchain.contains("xcode") } name: "stm32f4discovery-blueblink" cpp.cLanguageVersion: "c99" cpp.positionIndependentCode: false // // GCC-specific properties and sources. // Properties { condition: qbs.toolchain.contains("gcc") cpp.assemblerFlags: [ "-mcpu=cortex-m4", "-mfloat-abi=hard", "-mfpu=fpv4-sp-d16", ] cpp.driverFlags: [ "-mcpu=cortex-m4", "-mfloat-abi=hard", "-mfpu=fpv4-sp-d16", "-specs=nosys.specs" ] } Group { condition: qbs.toolchain.contains("gcc") name: "GCC" prefix: "gcc/" Group { name: "Startup" fileTags: ["asm"] files: ["startup.s"] } Group { name: "Linker Script" fileTags: ["linkerscript"] files: ["flash.ld"] } } // // IAR-specific properties and sources. // Properties { condition: qbs.toolchain.contains("iar") cpp.assemblerFlags: [ "--cpu", "cortex-m4", "--fpu", "vfpv4_sp" ] cpp.driverFlags: [ "--cpu", "cortex-m4", "--fpu", "vfpv4_sp" ] } Group { condition: qbs.toolchain.contains("iar") name: "IAR" prefix: "iar/" Group { name: "Startup" fileTags: ["asm"] files: ["startup.s"] } Group { name: "Linker Script" fileTags: ["linkerscript"] files: ["flash.icf"] } } // // KEIL-specific properties and sources. // Properties { condition: qbs.toolchain.contains("keil") cpp.assemblerFlags: [ "--cpu", "cortex-m4.fp" ] cpp.driverFlags: [ "--cpu", "cortex-m4.fp" ] } Group { condition: qbs.toolchain.contains("keil") name: "KEIL" prefix: "keil/" Group { name: "Startup" fileTags: ["asm"] files: ["startup.s"] } Group { name: "Linker Script" fileTags: ["linkerscript"] files: ["flash.sct"] } } // // Common code. // Group { name: "Gpio" files: ["gpio.c", "gpio.h"] } Group { name: "System" files: ["system.h"] } files: ["main.c"] } qbs-src-2.3.1/examples/baremetal/stm32f4discovery/blueblink/gcc/0000755000175100001770000000000014616416776024065 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/stm32f4discovery/blueblink/gcc/flash.ld0000644000175100001770000001412514616416776025506 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ /* Entry point (defined in assembled file). */ ENTRY(reset_handler) /* End of RAM, it is the user mode stack pointer address. */ _end_of_stack = 0x20020000; /* Generate a link error if heap and stack don't fit into RAM. */ _size_of_heap = 0x200; /* Required amount of heap. */ _size_of_stack = 0x400; /* Required amount of stack. */ MEMORY { RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64K FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K } SECTIONS { /* The vectors table goes into FLASH. */ .isr_vector : { . = ALIGN(4); KEEP(*(.isr_vector)) /* Startup code. */ . = ALIGN(4); } > FLASH /* The program code and other data goes into FLASH. */ .text : { . = ALIGN(4); *(.text) *(.text*) *(.glue_7) /* Glue arm to thumb code. */ *(.glue_7t) /* Glue thumb to arm code. */ *(.eh_frame) KEEP(*(.init)) KEEP(*(.fini)) . = ALIGN(4); _end_of_text_section = .; /* Export global symbol at end of code. */ } > FLASH /* Constant data goes into FLASH. */ .rodata : { . = ALIGN(4); *(.rodata) *(.rodata*) . = ALIGN(4); } > FLASH .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } > FLASH .ARM : { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; } > FLASH .preinit_array : { PROVIDE_HIDDEN(__preinit_array_start = .); KEEP(*(.preinit_array*)) PROVIDE_HIDDEN(__preinit_array_end = .); } > FLASH .init_array : { PROVIDE_HIDDEN(__init_array_start = .); KEEP(*(SORT(.init_array.*))) KEEP(*(.init_array*)) PROVIDE_HIDDEN(__init_array_end = .); } > FLASH .fini_array : { PROVIDE_HIDDEN(__fini_array_start = .); KEEP(*(SORT(.fini_array.*))) KEEP(*(.fini_array*)) PROVIDE_HIDDEN(__fini_array_end = .); } > FLASH _start_of_init_data_section = LOADADDR(.data); /* Initialized data sections goes into RAM, load LMA copy after code. */ .data : { . = ALIGN(4); _start_of_data_section = .; /* Export global symbol at data start. */ *(.data) *(.data*) . = ALIGN(4); _end_of_data_section = .; /* Export global symbol at data end. */ } > RAM AT > FLASH _start_of_iccm_ram_section = LOADADDR(.ccmram); /* CCM-RAM section. */ .ccmram : { . = ALIGN(4); _start_of_ccmram_section = .; /* Export global symbol at ccmram start. */ *(.ccmram) *(.ccmram*) . = ALIGN(4); _end_of_ccmram_section = .; /* Export global symbol at ccmram end. */ } > CCMRAM AT > FLASH /* Uninitialized data section. */ . = ALIGN(4); .bss : { /* This is used by the startup in order to initialize the .bss secion. */ _start_of_bss_section = .; /* Export global symbol at bss start. */ __bss_start__ = _start_of_bss_section; *(.bss) *(.bss*) *(COMMON) . = ALIGN(4); _end_of_bss_section = .; /* Export global symbol at bss end. */ __bss_end__ = _end_of_bss_section; } > RAM /* Used to check that there is enough RAM left. */ ._user_heap_stack : { . = ALIGN(4); PROVIDE(end = .); PROVIDE(_end = .); . = . + _size_of_heap; . = . + _size_of_stack; . = ALIGN(4); } > RAM /* Remove information from the standard libraries. */ /DISCARD/ : { libc.a ( * ) libm.a ( * ) libgcc.a ( * ) } .ARM.attributes 0 : { *(.ARM.attributes) } } qbs-src-2.3.1/examples/baremetal/stm32f4discovery/blueblink/gcc/startup.s0000644000175100001770000002056114616416776025757 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ .syntax unified .cpu cortex-m4 .fpu softvfp .thumb // These symbols are exported from the linker script. .word _start_of_init_data_section .word _start_of_data_section .word _end_of_data_section .word _start_of_bss_section .word _end_of_bss_section .word _end_of_stack // Define the 'reset_handler' function, which is an entry point. .section .text.reset_handler .weak reset_handler .type reset_handler, %function reset_handler: // Set the stack pointer. ldr sp, =_end_of_stack // Copy the data segment initializers from flash to SRAM. movs r1, #0 b _loop_copy_data_init _copy_data_init: ldr r3, =_start_of_init_data_section ldr r3, [r3, r1] str r3, [r0, r1] adds r1, r1, #4 _loop_copy_data_init: ldr r0, =_start_of_data_section ldr r3, =_end_of_data_section adds r2, r0, r1 cmp r2, r3 bcc _copy_data_init ldr r2, =_start_of_bss_section b _loop_fill_zero_bss // Zero fill the bss segment. _fill_zero_bss: movs r3, #0 str r3, [r2], #4 _loop_fill_zero_bss: ldr r3, = _end_of_bss_section cmp r2, r3 bcc _fill_zero_bss // Call the static constructors. bl __libc_init_array // Call the application's entry point. bl main bx lr .size reset_handler, .-reset_handler // Define the empty vectors table. .section .isr_vector,"a",%progbits .type _vectors_table, %object .size _vectors_table, .-_vectors_table _vectors_table: // Generic interrupts offset. .word _end_of_stack // Initial stack pointer value. .word reset_handler // Reset. .word 0 // NMI. .word 0 // Hard fault. .word 0 // Memory management fault. .word 0 // Bus fault. .word 0 // Usage fault. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // SVC. .word 0 // Debug monitor. .word 0 // Reserved. .word 0 // PendSV. .word 0 // SysTick. // External interrupts offset. .word 0 // Window WatchDog. .word 0 // PVD through EXTI Line detection. .word 0 // Tamper and TimeStamps through the EXTI line. .word 0 // RTC Wakeup through the EXTI line. .word 0 // FLASH. .word 0 // RCC. .word 0 // EXTI Line0. .word 0 // EXTI Line1. .word 0 // EXTI Line2. .word 0 // EXTI Line3. .word 0 // EXTI Line4. .word 0 // DMA1 Stream 0. .word 0 // DMA1 Stream 1. .word 0 // DMA1 Stream 2. .word 0 // DMA1 Stream 3. .word 0 // DMA1 Stream 4. .word 0 // DMA1 Stream 5. .word 0 // DMA1 Stream 6. .word 0 // ADC1, ADC2 and ADC3s. .word 0 // CAN1 TX. .word 0 // CAN1 RX0. .word 0 // CAN1 RX1. .word 0 // CAN1 SCE. .word 0 // External Line[9:5]s. .word 0 // TIM1 Break and TIM9. .word 0 // TIM1 Update and TIM10. .word 0 // TIM1 Trigger and Commutation and TIM11. .word 0 // TIM1 Capture Compare. .word 0 // TIM2. .word 0 // TIM3. .word 0 // TIM4. .word 0 // I2C1 Event. .word 0 // I2C1 Error. .word 0 // I2C2 Event. .word 0 // I2C2 Error. .word 0 // SPI1. .word 0 // SPI2. .word 0 // USART1. .word 0 // USART2. .word 0 // USART3. .word 0 // External Line[15:10]s. .word 0 // RTC Alarm (A and B) through EXTI Line. .word 0 // USB OTG FS Wakeup through EXTI line. .word 0 // TIM8 Break and TIM12. .word 0 // TIM8 Update and TIM13. .word 0 // TIM8 Trigger and Commutation and TIM14. .word 0 // TIM8 Capture Compare. .word 0 // DMA1 Stream7. .word 0 // FSMC. .word 0 // SDIO. .word 0 // TIM5. .word 0 // SPI3. .word 0 // UART4. .word 0 // UART5. .word 0 // TIM6 and DAC1&2 underrun errors. .word 0 // TIM7. .word 0 // DMA2 Stream 0. .word 0 // DMA2 Stream 1. .word 0 // DMA2 Stream 2. .word 0 // DMA2 Stream 3. .word 0 // DMA2 Stream 4. .word 0 // Ethernet. .word 0 // Ethernet Wakeup through EXTI line. .word 0 // CAN2 TX. .word 0 // CAN2 RX0. .word 0 // CAN2 RX1. .word 0 // CAN2 SCE. .word 0 // USB OTG FS. .word 0 // DMA2 Stream 5. .word 0 // DMA2 Stream 6. .word 0 // DMA2 Stream 7. .word 0 // USART6. .word 0 // I2C3 event. .word 0 // I2C3 error. .word 0 // USB OTG HS End Point 1 Out. .word 0 // USB OTG HS End Point 1 In. .word 0 // USB OTG HS Wakeup through EXTI. .word 0 // USB OTG HS. .word 0 // DCMI. .word 0 // CRYP crypto. .word 0 // Hash and Rng. .word 0 // FPU. qbs-src-2.3.1/examples/baremetal/stm32f4discovery/blueblink/main.c0000644000175100001770000000530514616416776024424 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "gpio.h" #include static void some_delay(uint32_t counts) { for (uint32_t index = 0u; index < counts; ++index) __asm("nop"); } int main(void) { gpio_init_blue_led(); while (1) { gpio_toggle_blue_led(); some_delay(100000u); } } qbs-src-2.3.1/examples/baremetal/stm32f4discovery/blueblink/keil/0000755000175100001770000000000014616416776024255 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/stm32f4discovery/blueblink/keil/startup.s0000644000175100001770000001665614616416776026161 0ustar runnerdocker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; Copyright (C) 2019 Denis Shienkov ;; Contact: https://www.qt.io/licensing/ ;; ;; This file is part of the examples of Qbs. ;; ;; $QT_BEGIN_LICENSE:BSD$ ;; Commercial License Usage ;; Licensees holding valid commercial Qt licenses may use this file in ;; accordance with the commercial license agreement provided with the ;; Software or, alternatively, in accordance with the terms contained in ;; a written agreement between you and The Qt Company. For licensing terms ;; and conditions see https://www.qt.io/terms-conditions. For further ;; information use the contact form at https://www.qt.io/contact-us. ;; ;; BSD License Usage ;; Alternatively, you may use this file under the terms of the BSD license ;; as follows: ;; ;; "Redistribution and use in source and binary forms, with or without ;; modification, are permitted provided that the following conditions are ;; met: ;; * Redistributions of source code must retain the above copyright ;; notice, this list of conditions and the following disclaimer. ;; * Redistributions in binary form must reproduce the above copyright ;; notice, this list of conditions and the following disclaimer in ;; the documentation and/or other materials provided with the ;; distribution. ;; * Neither the name of The Qt Company Ltd nor the names of its ;; contributors may be used to endorse or promote products derived ;; from this software without specific prior written permission. ;; ;; ;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ;; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ;; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ;; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ;; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ;; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ;; ;; $QT_END_LICENSE$ ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; _size_of_stack EQU 0x400 _size_of_heap EQU 0x200 ;; Stack configuration. AREA STACK, NOINIT, READWRITE, ALIGN=3 _start_of_stack SPACE _size_of_stack _end_of_stack ;; Heap configuration. AREA HEAP, NOINIT, READWRITE, ALIGN=3 _start_of_heap SPACE _size_of_heap _end_of_heap PRESERVE8 THUMB ;; Define the empty vectors table. AREA RESET, DATA, READONLY _vectors_table ;; Generic interrupts offset. DCD _end_of_stack ; Initial stack pointer value. DCD reset_handler ; Reset. DCD 0 ; NMI. DCD 0 ; Hard fault. DCD 0 ; Memory management fault. DCD 0 ; Bus fault. DCD 0 ; Usage fault. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; SVC. DCD 0 ; Debug monitor. DCD 0 ; Reserved. DCD 0 ; PendSV. DCD 0 ; SysTick. ;; External interrupts offset. DCD 0 ; Window WatchDog. DCD 0 ; PVD through EXTI Line detection. DCD 0 ; Tamper and TimeStamps through the EXTI line. DCD 0 ; RTC Wakeup through the EXTI line. DCD 0 ; FLASH. DCD 0 ; RCC. DCD 0 ; EXTI Line0. DCD 0 ; EXTI Line1. DCD 0 ; EXTI Line2. DCD 0 ; EXTI Line3. DCD 0 ; EXTI Line4. DCD 0 ; DMA1 Stream 0. DCD 0 ; DMA1 Stream 1. DCD 0 ; DMA1 Stream 2. DCD 0 ; DMA1 Stream 3. DCD 0 ; DMA1 Stream 4. DCD 0 ; DMA1 Stream 5. DCD 0 ; DMA1 Stream 6. DCD 0 ; ADC1, ADC2 and ADC3s. DCD 0 ; CAN1 TX. DCD 0 ; CAN1 RX0. DCD 0 ; CAN1 RX1. DCD 0 ; CAN1 SCE. DCD 0 ; External Line[9:5]s. DCD 0 ; TIM1 Break and TIM9. DCD 0 ; TIM1 Update and TIM10. DCD 0 ; TIM1 Trigger and Commutation and TIM11. DCD 0 ; TIM1 Capture Compare. DCD 0 ; TIM2. DCD 0 ; TIM3. DCD 0 ; TIM4. DCD 0 ; I2C1 Event. DCD 0 ; I2C1 Error. DCD 0 ; I2C2 Event. DCD 0 ; I2C2 Error. DCD 0 ; SPI1. DCD 0 ; SPI2. DCD 0 ; USART1. DCD 0 ; USART2. DCD 0 ; USART3. DCD 0 ; External Line[15:10]s. DCD 0 ; RTC Alarm (A and B) through EXTI Line. DCD 0 ; USB OTG FS Wakeup through EXTI line. DCD 0 ; TIM8 Break and TIM12. DCD 0 ; TIM8 Update and TIM13. DCD 0 ; TIM8 Trigger and Commutation and TIM14. DCD 0 ; TIM8 Capture Compare. DCD 0 ; DMA1 Stream7. DCD 0 ; FMC. DCD 0 ; SDIO. DCD 0 ; TIM5. DCD 0 ; SPI3. DCD 0 ; UART4. DCD 0 ; UART5. DCD 0 ; TIM6 and DAC1&2 underrun errors. DCD 0 ; TIM7. DCD 0 ; DMA2 Stream 0. DCD 0 ; DMA2 Stream 1. DCD 0 ; DMA2 Stream 2. DCD 0 ; DMA2 Stream 3. DCD 0 ; DMA2 Stream 4. DCD 0 ; Ethernet. DCD 0 ; Ethernet Wakeup through EXTI line. DCD 0 ; CAN2 TX. DCD 0 ; CAN2 RX0. DCD 0 ; CAN2 RX1. DCD 0 ; CAN2 SCE. DCD 0 ; USB OTG FS. DCD 0 ; DMA2 Stream 5. DCD 0 ; DMA2 Stream 6. DCD 0 ; DMA2 Stream 7. DCD 0 ; USART6. DCD 0 ; I2C3 event. DCD 0 ; I2C3 error. DCD 0 ; USB OTG HS End Point 1 Out. DCD 0 ; USB OTG HS End Point 1 In. DCD 0 ; USB OTG HS Wakeup through EXTI. DCD 0 ; USB OTG HS. DCD 0 ; DCMI. DCD 0 ; Reserved. DCD 0 ; Hash and Rng. DCD 0 ; FPU. _end_of_vectors_table _size_of_vectors_table EQU _end_of_vectors_table - _vectors_table AREA |.text|, CODE, READONLY ;; Reset handler. reset_handler PROC EXPORT reset_handler [WEAK] IMPORT main LDR R0, =main BX R0 ENDP ALIGN END qbs-src-2.3.1/examples/baremetal/stm32f4discovery/blueblink/keil/flash.sct0000644000175100001770000000532214616416776026067 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ ;; Load region size_region. LR_IROM1 0x08000000 0x00100000 { ;; Load address = execution address. ER_IROM1 0x08000000 0x00100000 { *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } ; RW data. RW_IRAM1 0x20000000 0x00020000 { .ANY (+RW +ZI) } } qbs-src-2.3.1/examples/baremetal/stm32f4discovery/blueblink/gpio.c0000644000175100001770000000637314616416776024444 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "gpio.h" #include "system.h" #define GPIO_BLUE_LED_PIN_POS (15u) #define GPIO_BLUE_LED_PIN (1u << GPIO_BLUE_LED_PIN_POS) // Output push pull mode. #define GPIO_MODE_OUTPUT_PP (0x00000001u) // Bit definition for RCC_AHB1ENR register. #define RCC_AHB1ENR_GPIODEN (0x00000008u) // Bits definition for GPIO_MODER register. #define GPIO_MODER_MODE0 (0x00000003u) void gpio_init_blue_led(void) { // Enable RCC clock on GPIOD port. RCC_REGS_MAP->AHB1ENR |= RCC_AHB1ENR_GPIODEN; // Configure GPIO pin #15 as an output. uint32_t value = GPIOD_REGS_MAP->MODER; value &= ~(GPIO_MODER_MODE0 << (GPIO_BLUE_LED_PIN_POS * 2u)); value |= (GPIO_MODE_OUTPUT_PP << (GPIO_BLUE_LED_PIN_POS * 2u)); GPIOD_REGS_MAP->MODER = value; } void gpio_toggle_blue_led(void) { GPIOD_REGS_MAP->ODR ^= GPIO_BLUE_LED_PIN; } qbs-src-2.3.1/examples/baremetal/stm32f4discovery/stm32f4discovery.qbs0000644000175100001770000000503014616416776025221 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ Project { name: "Examples for stm32f4discovery board" references: [ "blueblink/blueblink.qbs" ] } qbs-src-2.3.1/examples/baremetal/esp8266/0000755000175100001770000000000014616416776017345 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/esp8266/README.md0000644000175100001770000000206514616416776020627 0ustar runnerdockerThis example demonstrates how to build a bare-metal application using GCC toolchain for Espressif ESP8266-WROOM02 MCU. An application is designed to be flashed on the external SPI FLASH with the following parameters: * SPI FLASH size: 16 MBit (2048 + 2048 KBytes) * SPI FLASH mode: DIO * SPI FLASH clock: 40 MHz * SPI FLASH map type: 5 An application is running as WiFi access point that discards all connection attempts, and has the following WiFi parameters: * SSID: "HELLO FROM QBS" * Authentication mode: "open" * Beacon interval: 1000 milliseconds * Channel number: 3 An application requires the ESP8266 NON-OS SDK: * https://github.com/espressif/ESP8266_NONOS_SDK the path to which should be set via the ESP8266_NON_OS_SDK_ROOT environment variable. To convert the ELF application to the final binary image (and also for re-program the ESP8266 MCU), you can use the open source 'esptool' utility (using the SPI FLASH parameters, provided above): * https://github.com/espressif/esptool The following toolchains are supported: * GNU ESP8266 Toolchain qbs-src-2.3.1/examples/baremetal/esp8266/esp8266.qbs0000644000175100001770000000507014616416776021173 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ Project { name: "Examples for esp8266-wroom-02 board" qbsSearchPaths: "qbs" references: [ "access-point/access-point.qbs" ] } qbs-src-2.3.1/examples/baremetal/esp8266/qbs/0000755000175100001770000000000014616416776020132 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/esp8266/qbs/imports/0000755000175100001770000000000014616416776021627 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/esp8266/qbs/imports/Esp8266SdkProbe.qbs0000644000175100001770000000133414616416776025046 0ustar runnerdockerimport qbs.Environment import qbs.File import qbs.FileInfo import qbs.Probes Probes.PathProbe { // Inputs. environmentPaths: Environment.getEnv("ESP8266_NON_OS_SDK_ROOT") // Outputs. property string includesPath; property string libsPath; property string linkerScriptsPath; configure: { for (var i in environmentPaths) { var rootPath = environmentPaths[i]; if (!File.exists(rootPath)) continue; includesPath = FileInfo.joinPaths(rootPath, "include"); libsPath = FileInfo.joinPaths(rootPath, "lib"); linkerScriptsPath = FileInfo.joinPaths(rootPath, "ld"); found = true; return; } } } qbs-src-2.3.1/examples/baremetal/esp8266/qbs/modules/0000755000175100001770000000000014616416776021602 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/esp8266/qbs/modules/esp8266_sdk/0000755000175100001770000000000014616416776023560 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/esp8266/qbs/modules/esp8266_sdk/Esp8266SdkModule.qbs0000644000175100001770000000353714616416776027164 0ustar runnerdockerModule { Depends { name: "cpp" } Esp8266SdkProbe { id: esp_sdk_probe } validate: { if (!esp_sdk_probe.found) throw "ESP8266 NON OS SDK not found. Please set the ESP8266_NON_OS_SDK_ROOT env variable." } cpp.systemIncludePaths: [esp_sdk_probe.includesPath] cpp.libraryPaths: [esp_sdk_probe.libsPath] cpp.driverFlags: ["-nostdlib"] cpp.cFlags: [ "-Wpointer-arith", "-Wundef", "-fno-inline-functions", "-mlongcalls", "-mtext-section-literals", "-ffunction-sections", "-fdata-sections", "-fno-builtin-printf", "-fno-guess-branch-probability", "-freorder-blocks-and-partition", "-fno-cse-follow-jumps" ] cpp.linkerFlags: [ "--no-check-sections", "--gc-sections", "--start-group" ] cpp.defines: [ "ICACHE_FLASH", "USE_OPTIMIZE_PRINTF", // Target specific defines for the external 40MHz DIO // SPI 16 Mbit FLASH (2048 KByte + 2048 KByte) FOTA. "SPI_FLASH_SIZE_MAP=5", "ESP_PART_BL_ADDR=0x000000", "ESP_PART_APP1_ADDR=0x001000", "ESP_PART_APP2_ADDR=0x101000", "ESP_PART_RF_CAL_ADDR=0x1FB000", "ESP_PART_PHY_DATA_ADDR=0x1FC000", "ESP_PART_SYS_PARAM_ADDR=0x1FD000", "ESP_PART_BOOTLOADER_SIZE=0x001000", "ESP_PART_APPLICATION_SIZE=0x0E0000", "ESP_PART_RF_CAL_SIZE=0x001000", "ESP_PART_PHY_DATA_SIZE=0x001000", "ESP_PART_SYS_PARAM_SIZE=0x003000" ] property string _linker_scripts_path: esp_sdk_probe.linkerScriptsPath + "/" Group { name: "ESP8266 Linker Scripts" prefix: esp8266_sdk._linker_scripts_path + "/" fileTags: ["linkerscript"] files: [ "eagle.rom.addr.v6.ld", "eagle.app.v6.new.2048.ld" ] } } qbs-src-2.3.1/examples/baremetal/esp8266/access-point/0000755000175100001770000000000014616416776021735 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/esp8266/access-point/access-point.qbs0000644000175100001770000000106014616416776025031 0ustar runnerdockerCppApplication { condition: qbs.toolchain.contains("gcc") && qbs.architecture === "xtensa" Depends { name: "esp8266_sdk" } cpp.cLanguageVersion: "c99" cpp.positionIndependentCode: false // This required because ESP8266 SDK includes this 'user_config.h' internally. cpp.includePaths: ["."] cpp.staticLibraries: [ "c", "crypto", "gcc", "lwip", "main", "net80211", "phy", "pp", "wpa" ] files: [ "user_config.h", "user_main.c" ] } qbs-src-2.3.1/examples/baremetal/esp8266/access-point/user_main.c0000644000175100001770000001037014616416776024064 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "user_config.h" // From ESP8266 SDK. #include static const partition_item_t esp_partitions[] = { {SYSTEM_PARTITION_BOOTLOADER, ESP_PART_BL_ADDR, ESP_PART_BOOTLOADER_SIZE}, {SYSTEM_PARTITION_OTA_1, ESP_PART_APP1_ADDR, ESP_PART_APPLICATION_SIZE}, {SYSTEM_PARTITION_OTA_2, ESP_PART_APP2_ADDR, ESP_PART_APPLICATION_SIZE}, {SYSTEM_PARTITION_RF_CAL, ESP_PART_RF_CAL_ADDR, ESP_PART_RF_CAL_SIZE}, {SYSTEM_PARTITION_PHY_DATA, ESP_PART_PHY_DATA_ADDR, ESP_PART_PHY_DATA_SIZE}, {SYSTEM_PARTITION_SYSTEM_PARAMETER, ESP_PART_SYS_PARAM_ADDR, ESP_PART_SYS_PARAM_SIZE} }; enum { ESP_PART_COUNT = sizeof(esp_partitions) / sizeof(esp_partitions[0]) }; LOCAL void ICACHE_FLASH_ATTR user_init_done(void) { os_printf("esp: initialization completed\n"); } void ICACHE_FLASH_ATTR user_pre_init(void) { const bool ok = system_partition_table_regist(esp_partitions, ESP_PART_COUNT, SPI_FLASH_SIZE_MAP); if (!ok) { os_printf("esp: partitions registration failed\n"); while (true); } } void ICACHE_FLASH_ATTR user_init(void) { os_printf("esp: SDK version: %s\n", system_get_sdk_version()); os_printf("esp: reset reason: %u\n", system_get_rst_info()->reason); const bool ok = wifi_set_opmode(SOFTAP_MODE); if (!ok) { os_printf("esp: set softap mode failed\n"); } else { struct softap_config ap_cfg = {0}; ap_cfg.authmode = ESP_AUTO_MODE_CFG; ap_cfg.beacon_interval = ESP_BEACON_INTERVAL_MS_CFG; ap_cfg.channel = ESP_CHANNEL_NO_CFG; ap_cfg.max_connection = 0; ap_cfg.ssid_hidden = false; os_memcpy(&ap_cfg.ssid, ESP_SSID_CFG, sizeof(ESP_SSID_CFG)); const bool ok = wifi_softap_set_config(&ap_cfg); if (!ok) os_printf("esp: set softap configuration failed\n"); } system_init_done_cb(user_init_done); } qbs-src-2.3.1/examples/baremetal/esp8266/access-point/user_config.h0000644000175100001770000000535414616416776024420 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef ESP8266_USER_CONFIG_H #define ESP8266_USER_CONFIG_H // From ESP8266 SDK. #include #define ESP_SSID_CFG "HELLO FROM QBS\0" #define ESP_AUTO_MODE_CFG (AUTH_OPEN) #define ESP_BEACON_INTERVAL_MS_CFG (1000) #define ESP_CHANNEL_NO_CFG (3) #endif // ESP8266_USER_CONFIG_H qbs-src-2.3.1/examples/baremetal/at90can128olimex/0000755000175100001770000000000014616416776021140 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/at90can128olimex/at90can128olimex.qbs0000644000175100001770000000502414616416776024560 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ Project { name: "Examples for Olimex AVR-CAN board" references: [ "redblink/redblink.qbs" ] } qbs-src-2.3.1/examples/baremetal/at90can128olimex/redblink/0000755000175100001770000000000014616416776022732 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/at90can128olimex/redblink/README.md0000644000175100001770000000045014616416776024210 0ustar runnerdockerThis example demonstrates how to build a bare-metal application using different AVR toolchains. It is designed for the OLIMEX AVR-CAN target board (based on at90can128 chip) and simply flashes the red LED on the board. The following toolchains are supported: * GCC * IAR Embedded Workbench qbs-src-2.3.1/examples/baremetal/at90can128olimex/redblink/gpio.h0000644000175100001770000000512614616416776024045 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef GPIO_H #define GPIO_H #ifdef __cplusplus extern "C" { #endif void gpio_init_red_led(void); void gpio_toggle_red_led(void); #ifdef __cplusplus } #endif #endif // GPIO_H qbs-src-2.3.1/examples/baremetal/at90can128olimex/redblink/redblink.qbs0000644000175100001770000001126514616416776025240 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ CppApplication { condition: { if (!qbs.architecture.contains("avr")) return false; return qbs.toolchain.contains("gcc") || qbs.toolchain.contains("iar") } name: "at90can128olimex-redblink" cpp.cLanguageVersion: "c99" cpp.positionIndependentCode: false // // GCC-specific properties and sources. // Properties { condition: qbs.toolchain.contains("gcc") cpp.driverFlags: ["-mmcu=at90can128"] } // Note: We implicitly use the startup file and the linker script // which are already linked into the avr-gcc toolchain runtime. // // IAR-specific properties and sources. // Properties { condition: qbs.toolchain.contains("iar") cpp.driverFlags: ["--cpu=can128", "-ms"] cpp.entryPoint: "__program_start" cpp.driverLinkerFlags: [ "-D_..X_HEAP_SIZE=0", "-D_..X_NEAR_HEAP_SIZE=20", "-D_..X_CSTACK_SIZE=20", "-D_..X_RSTACK_SIZE=20", "-D_..X_FLASH_CODE_END=1FFFF", "-D_..X_FLASH_BASE=_..X_INTVEC_SIZE", "-D_..X_EXT_SRAM_BASE=_..X_SRAM_END", "-D_..X_EXT_ROM_BASE=_..X_SRAM_END", "-D_..X_EXT_NV_BASE=_..X_SRAM_END", "-D_..X_CSTACK_BASE=_..X_SRAM_BASE", "-D_..X_CSTACK_END=_..X_SRAM_END", "-D_..X_RSTACK_BASE=_..X_SRAM_BASE", "-D_..X_RSTACK_END=_..X_SRAM_END", "-h'1895'(CODE)0-(_..X_INTVEC_SIZE-1)", ] cpp.staticLibraries: [ // Explicitly link with the runtime dlib library (which contains // all required startup code and other stuff). cpp.toolchainInstallPath + "/../lib/dlib/dlAVR-3s-ec_mul-n.r90" ] } Group { condition: qbs.toolchain.contains("iar") name: "IAR" prefix: "iar/" Group { name: "Linker Script" prefix: cpp.toolchainInstallPath + "/../src/template/" fileTags: ["linkerscript"] // Explicitly use the default linker scripts for current target. files: ["cfg3soim.xcl", "cfgcan128.xcl"] } } // // Common code. // Group { name: "Gpio" files: ["gpio.c", "gpio.h"] } files: ["main.c"] } qbs-src-2.3.1/examples/baremetal/at90can128olimex/redblink/main.c0000644000175100001770000000530314616416776024023 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "gpio.h" #include static void some_delay(uint32_t counts) { for (uint32_t index = 0u; index < counts; ++index) __asm("nop"); } int main(void) { gpio_init_red_led(); while (1) { gpio_toggle_red_led(); some_delay(100000u); } } qbs-src-2.3.1/examples/baremetal/at90can128olimex/redblink/gpio.c0000644000175100001770000000561714616416776024045 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "gpio.h" #if defined(__GNUC__) #include #elif defined (__ICCAVR__) #include #else #error "Unsupported toolchain" #endif // LED pin number. #define GPIO_RED_LED_PIN_POS (4u) // LED port direction. #define GPIO_RED_LED_PORT_DIR (DDRE) // LED output port. #define GPIO_RED_LED_PORT_OUT (PORTE) void gpio_init_red_led(void) { GPIO_RED_LED_PORT_DIR = 0xFF; } void gpio_toggle_red_led(void) { GPIO_RED_LED_PORT_OUT ^= (1u << GPIO_RED_LED_PIN_POS); } qbs-src-2.3.1/examples/baremetal/baremetal.qbs0000644000175100001770000000554214616416776020701 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ Project { name: "BareMetal" references: [ "stm32f4discovery/stm32f4discovery.qbs", "at90can128olimex/at90can128olimex.qbs", "cc2540usbdongle/cc2540usbdongle.qbs", "stm8s103f3/stm8s103f3.qbs", "msp430f5529/msp430f5529.qbs", "cy7c68013a/cy7c68013a.qbs", "stm32f103/stm32f103.qbs", "pca10040/pca10040.qbs", "pca10001/pca10001.qbs", "esp8266/esp8266.qbs", ] } qbs-src-2.3.1/examples/baremetal/stm32f103/0000755000175100001770000000000014616416776017572 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/stm32f103/greenblink/0000755000175100001770000000000014616416776021712 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/stm32f103/greenblink/README.md0000644000175100001770000000056314616416776023175 0ustar runnerdockerThis example demonstrates how to build a bare-metal application using different ARM toolchains. It is designed for the stm32f103 "Blue Pill" evaluation kit (based on stm32f103c8 MCU) and simply flashes the green LED on the board. The following toolchains are supported: * GNU Arm Embedded Toolchain * IAR Embedded Workbench * KEIL Microcontroller Development Kit qbs-src-2.3.1/examples/baremetal/stm32f103/greenblink/gpio.h0000644000175100001770000000513214616416776023022 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef GPIO_H #define GPIO_H #ifdef __cplusplus extern "C" { #endif void gpio_init_green_led(void); void gpio_toggle_green_led(void); #ifdef __cplusplus } #endif #endif // GPIO_H qbs-src-2.3.1/examples/baremetal/stm32f103/greenblink/system.h0000644000175100001770000000704714616416776023417 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef SYSTEM_H #define SYSTEM_H #include #ifdef __cplusplus extern "C" { #endif #define __IO volatile // General purpose input/output registers map. struct gpio_regs_map { __IO uint32_t CRL; __IO uint32_t CRH; __IO uint32_t IDR; __IO uint32_t ODR; __IO uint32_t BSRR; __IO uint32_t BRR; __IO uint32_t LCKR; }; // Reset and clock control registers map. struct rcc_regs_map { __IO uint32_t CR; __IO uint32_t CFGR; __IO uint32_t CIR; __IO uint32_t APB2RSTR; __IO uint32_t APB1RSTR; __IO uint32_t AHBENR; __IO uint32_t APB2ENR; __IO uint32_t APB1ENR; __IO uint32_t BDCR; __IO uint32_t CSR; }; #define PERIPH_ADDRESS (0x40000000u) #define APB2PERIPH_ADDRESS (PERIPH_ADDRESS + 0x00010000u) #define AHBPERIPH_ADDRESS (PERIPH_ADDRESS + 0x00020000u) #define GPIOC_REGS_ADDRESS (APB2PERIPH_ADDRESS + 0x00001000u) #define RCC_REGS_ADDRESS (AHBPERIPH_ADDRESS + 0x00001000u) #define GPIOC_REGS_MAP ((struct gpio_regs_map *)GPIOC_REGS_ADDRESS) #define RCC_REGS_MAP ((struct rcc_regs_map *)RCC_REGS_ADDRESS) #ifdef __cplusplus } #endif #endif // SYSTEM_H qbs-src-2.3.1/examples/baremetal/stm32f103/greenblink/greenblink.qbs0000644000175100001770000001173414616416776024547 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ CppApplication { condition: { if (!qbs.architecture.startsWith("arm")) return false; return (qbs.toolchain.contains("gcc") || qbs.toolchain.contains("iar") || qbs.toolchain.contains("keil")) && !qbs.toolchain.contains("xcode") } name: "stm32f103-greenblink" cpp.cLanguageVersion: "c99" cpp.positionIndependentCode: false // // GCC-specific properties and sources. // Properties { condition: qbs.toolchain.contains("gcc") cpp.assemblerFlags: [ "-mcpu=cortex-m3" ] cpp.driverFlags: [ "-mcpu=cortex-m3", "-specs=nosys.specs" ] } Group { condition: qbs.toolchain.contains("gcc") name: "GCC" prefix: "gcc/" Group { name: "Startup" fileTags: ["asm"] files: ["startup.s"] } Group { name: "Linker Script" fileTags: ["linkerscript"] files: ["flash.ld"] } } // // IAR-specific properties and sources. // Properties { condition: qbs.toolchain.contains("iar") cpp.assemblerFlags: [ "--cpu", "cortex-m3", "--fpu", "none" ] cpp.driverFlags: [ "--cpu", "cortex-m3", "--fpu", "none" ] } Group { condition: qbs.toolchain.contains("iar") name: "IAR" prefix: "iar/" Group { name: "Startup" fileTags: ["asm"] files: ["startup.s"] } Group { name: "Linker Script" fileTags: ["linkerscript"] files: ["flash.icf"] } } // // KEIL-specific properties and sources. // Properties { condition: qbs.toolchain.contains("keil") cpp.assemblerFlags: [ "--cpu", "cortex-m3" ] cpp.driverFlags: [ "--cpu", "cortex-m3" ] } Group { condition: qbs.toolchain.contains("keil") name: "KEIL" prefix: "keil/" Group { name: "Startup" fileTags: ["asm"] files: ["startup.s"] } Group { name: "Linker Script" fileTags: ["linkerscript"] files: ["flash.sct"] } } // // Common code. // Group { name: "Gpio" files: ["gpio.c", "gpio.h"] } Group { name: "System" files: ["system.h"] } files: ["main.c"] } qbs-src-2.3.1/examples/baremetal/stm32f103/greenblink/iar/0000755000175100001770000000000014616416776022465 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/stm32f103/greenblink/iar/startup.s0000644000175100001770000001251414616416776024356 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ MODULE ?cstartup SECTION CSTACK:DATA:NOROOT(3) SECTION .intvec:CODE:NOROOT(2) EXTERN __iar_program_start PUBLIC _vectors_table DATA _vectors_table ;; Generic interrupts offset. DCD sfe(CSTACK) ; Initial stack pointer value. DCD reset_handler ; Reset. DCD 0 ; NMI. DCD 0 ; Hard fault. DCD 0 ; MPU fault. DCD 0 ; Bus fault. DCD 0 ; Usage fault. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; SVC. DCD 0 ; Debug monitor. DCD 0 ; Reserved. DCD 0 ; PendSV. DCD 0 ; SysTick. ;; External interrupts offset. DCD 0 ; Window watchdog. DCD 0 ; PVD through EXTI line detection. DCD 0 ; Tamper. DCD 0 ; RTC. DCD 0 ; Flash. DCD 0 ; RCC. DCD 0 ; EXTI line 0. DCD 0 ; EXTI line 1. DCD 0 ; EXTI line 2. DCD 0 ; EXTI line 3. DCD 0 ; EXTI line 4. DCD 0 ; DMA1 channel 1. DCD 0 ; DMA1 channel 2. DCD 0 ; DMA1 channel 3. DCD 0 ; DMA1 channel 4. DCD 0 ; DMA1 channel 5. DCD 0 ; DMA1 channel 6. DCD 0 ; DMA1 channel 7. DCD 0 ; ADC1/2. DCD 0 ; USB high priority or CAN1 TX. DCD 0 ; USB low priority or CAN1 RX0. DCD 0 ; CAN1 RX1. DCD 0 ; CAN1 SCE. DCD 0 ; EXTI line 9..5. DCD 0 ; TIM1 break. DCD 0 ; TIM1 update. DCD 0 ; TIM1 trigger and commutation. DCD 0 ; TIM1 capture compare. DCD 0 ; TIM2. DCD 0 ; TIM3. DCD 0 ; TIM4. DCD 0 ; I2C1 event. DCD 0 ; I2C1 error. DCD 0 ; I2C2 event. DCD 0 ; I2C2 error. DCD 0 ; SPI1. DCD 0 ; SPI2. DCD 0 ; USART1. DCD 0 ; USART2. DCD 0 ; USART3. DCD 0 ; EXTI line 15..10. DCD 0 ; RTC alarm through EXTI line. DCD 0 ; USB wakeup from suspend. ;; Reset handler. THUMB PUBWEAK reset_handler SECTION .text:CODE:REORDER:NOROOT(2) reset_handler BLX R0 LDR R0, =__iar_program_start BX R0 END qbs-src-2.3.1/examples/baremetal/stm32f103/greenblink/iar/flash.icf0000644000175100001770000000650314616416776024251 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ define symbol _start_of_intvec_section = 0x08000000; define symbol _start_of_flash_section = 0x08000000; define symbol _end_of_flash_section = 0x0801FFFF; define symbol _start_of_ram_section = 0x20000000; define symbol _end_of_ram_section = 0x20004FFF; define symbol _min_stack_size = 0x400; define symbol _min_heap_size = 0x200; define memory mem with size = 4G; define region flash_section = mem:[from _start_of_flash_section to _end_of_flash_section]; define region ram_section = mem:[from _start_of_ram_section to _end_of_ram_section]; define block CSTACK with alignment = 8, size = _min_stack_size { }; define block HEAP with alignment = 8, size = _min_heap_size { }; initialize by copy { readwrite }; do not initialize { section .noinit }; place at address mem:_start_of_intvec_section { readonly section .intvec }; place in flash_section { readonly }; place in ram_section { readwrite, block CSTACK, block HEAP }; qbs-src-2.3.1/examples/baremetal/stm32f103/greenblink/gcc/0000755000175100001770000000000014616416776022446 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/stm32f103/greenblink/gcc/flash.ld0000644000175100001770000001325614616416776024073 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ /* Entry point (defined in assembled file). */ ENTRY(reset_handler) /* End of RAM, it is the user mode stack pointer address. */ _end_of_stack = 0x20005000; /* Generate a link error if heap and stack don't fit into RAM. */ _size_of_heap = 0x200; /* Required amount of heap. */ _size_of_stack = 0x400; /* Required amount of stack. */ MEMORY { RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 64K } SECTIONS { /* The vectors table goes into FLASH. */ .isr_vector : { . = ALIGN(4); KEEP(*(.isr_vector)) /* Startup code. */ . = ALIGN(4); } > FLASH /* The program code and other data goes into FLASH. */ .text : { . = ALIGN(4); *(.text) *(.text*) *(.glue_7) /* Glue arm to thumb code. */ *(.glue_7t) /* Glue thumb to arm code. */ *(.eh_frame) KEEP(*(.init)) KEEP(*(.fini)) . = ALIGN(4); _end_of_text_section = .; /* Export global symbol at end of code. */ } > FLASH /* Constant data goes into FLASH. */ .rodata : { . = ALIGN(4); *(.rodata) *(.rodata*) . = ALIGN(4); } > FLASH .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } > FLASH .ARM : { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; } > FLASH .preinit_array : { PROVIDE_HIDDEN(__preinit_array_start = .); KEEP(*(.preinit_array*)) PROVIDE_HIDDEN(__preinit_array_end = .); } > FLASH .init_array : { PROVIDE_HIDDEN(__init_array_start = .); KEEP(*(SORT(.init_array.*))) KEEP(*(.init_array*)) PROVIDE_HIDDEN(__init_array_end = .); } > FLASH .fini_array : { PROVIDE_HIDDEN(__fini_array_start = .); KEEP(*(SORT(.fini_array.*))) KEEP(*(.fini_array*)) PROVIDE_HIDDEN(__fini_array_end = .); } > FLASH _start_of_init_data_section = LOADADDR(.data); /* Initialized data sections goes into RAM, load LMA copy after code. */ .data : { . = ALIGN(4); _start_of_data_section = .; /* Export global symbol at data start. */ *(.data) *(.data*) . = ALIGN(4); _end_of_data_section = .; /* Export global symbol at data end. */ } > RAM AT > FLASH /* Uninitialized data section. */ . = ALIGN(4); .bss : { /* This is used by the startup in order to initialize the .bss secion. */ _start_of_bss_section = .; /* Export global symbol at bss start. */ __bss_start__ = _start_of_bss_section; *(.bss) *(.bss*) *(COMMON) . = ALIGN(4); _end_of_bss_section = .; /* Export global symbol at bss end. */ __bss_end__ = _end_of_bss_section; } > RAM /* Used to check that there is enough RAM left. */ ._user_heap_stack : { . = ALIGN(4); PROVIDE(end = .); PROVIDE(_end = .); . = . + _size_of_heap; . = . + _size_of_stack; . = ALIGN(4); } > RAM /* Remove information from the standard libraries. */ /DISCARD/ : { libc.a ( * ) libm.a ( * ) libgcc.a ( * ) } .ARM.attributes 0 : { *(.ARM.attributes) } } qbs-src-2.3.1/examples/baremetal/stm32f103/greenblink/gcc/startup.s0000644000175100001770000001513514616416776024341 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ .syntax unified .cpu cortex-m3 .fpu softvfp .thumb // These symbols are exported from the linker script. .word _start_of_init_data_section .word _start_of_data_section .word _end_of_data_section .word _start_of_bss_section .word _end_of_bss_section .equ _boot_ram, 0xF108F85F .section .text.reset_handler .weak reset_handler .type reset_handler, %function reset_handler: // Copy the data segment initializers from flash to SRAM. movs r1, #0 b _loop_copy_data_init _copy_data_init: ldr r3, =_start_of_init_data_section ldr r3, [r3, r1] str r3, [r0, r1] adds r1, r1, #4 _loop_copy_data_init: ldr r0, =_start_of_data_section ldr r3, =_end_of_data_section adds r2, r0, r1 cmp r2, r3 bcc _copy_data_init ldr r2, =_start_of_bss_section b _loop_fill_zero_bss // Zero fill the bss segment. _fill_zero_bss: movs r3, #0 str r3, [r2], #4 _loop_fill_zero_bss: ldr r3, = _end_of_bss_section cmp r2, r3 bcc _fill_zero_bss // Call the static constructors. bl __libc_init_array // Call the application entry point. bl main bx lr .size reset_handler, .-reset_handler // Define the empty vectors table. .section .isr_vector,"a",%progbits .type _vectors_table, %object .size _vectors_table, .-_vectors_table _vectors_table: // Generic interrupts offset. .word _end_of_stack // Initial stack pointer value. .word reset_handler // Reset. .word 0 // NMI. .word 0 // Hard fault. .word 0 // Memory management fault. .word 0 // Bus fault. .word 0 // Usage fault. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // Reserved. .word 0 // SVC. .word 0 // Debug monitor. .word 0 // Reserved. .word 0 // PendSV. .word 0 // SysTick. // External interrupts offset. .word 0 // Window watchdog. .word 0 // PVD through EXTI Line detection. .word 0 // Tamper and timestamps through the EXTI line. .word 0 // RTC wakeup through the EXTI line. .word 0 // FLASH. .word 0 // RCC. .word 0 // EXTI line0. .word 0 // EXTI line1. .word 0 // EXTI line2. .word 0 // EXTI line3. .word 0 // EXTI line4. .word 0 // DMA1 stream 0. .word 0 // DMA1 stream 1. .word 0 // DMA1 stream 2. .word 0 // DMA1 stream 3. .word 0 // DMA1 stream 4. .word 0 // DMA1 stream 5. .word 0 // DMA1 stream 6. .word 0 // ADC1/2. .word 0 // USB HP/CAN1 TX. .word 0 // USB LP / CAN1 RX0. .word 0 // CAN1 RX1. .word 0 // CAN1 SCE. .word 0 // EXTI line [9:5]s. .word 0 // TIM1 break. .word 0 // TIM1 update. .word 0 // TIM1 trigger and communication. .word 0 // TIM1 capture compare. .word 0 // TIM2. .word 0 // TIM3. .word 0 // TIM4. .word 0 // I2C1 event. .word 0 // I2C1 error. .word 0 // I2C2 event. .word 0 // I2C2 error. .word 0 // SPI1. .word 0 // SPI2. .word 0 // USART1. .word 0 // USART2. .word 0 // USART3. .word 0 // EXTI line [15:10]s. .word 0 // RTC alarm. .word 0 // USB wakeup. .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word _boot_ram // Boot RAM mode for stm32f10x medium density devices. qbs-src-2.3.1/examples/baremetal/stm32f103/greenblink/main.c0000644000175100001770000000530714616416776023007 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "gpio.h" #include static void some_delay(uint32_t counts) { for (uint32_t index = 0u; index < counts; ++index) __asm("nop"); } int main(void) { gpio_init_green_led(); while (1) { gpio_toggle_green_led(); some_delay(100000u); } } qbs-src-2.3.1/examples/baremetal/stm32f103/greenblink/keil/0000755000175100001770000000000014616416776022636 5ustar runnerdockerqbs-src-2.3.1/examples/baremetal/stm32f103/greenblink/keil/startup.s0000644000175100001770000001327514616416776024534 0ustar runnerdocker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; Copyright (C) 2020 Denis Shienkov ;; Contact: https://www.qt.io/licensing/ ;; ;; This file is part of the examples of Qbs. ;; ;; $QT_BEGIN_LICENSE:BSD$ ;; Commercial License Usage ;; Licensees holding valid commercial Qt licenses may use this file in ;; accordance with the commercial license agreement provided with the ;; Software or, alternatively, in accordance with the terms contained in ;; a written agreement between you and The Qt Company. For licensing terms ;; and conditions see https://www.qt.io/terms-conditions. For further ;; information use the contact form at https://www.qt.io/contact-us. ;; ;; BSD License Usage ;; Alternatively, you may use this file under the terms of the BSD license ;; as follows: ;; ;; "Redistribution and use in source and binary forms, with or without ;; modification, are permitted provided that the following conditions are ;; met: ;; * Redistributions of source code must retain the above copyright ;; notice, this list of conditions and the following disclaimer. ;; * Redistributions in binary form must reproduce the above copyright ;; notice, this list of conditions and the following disclaimer in ;; the documentation and/or other materials provided with the ;; distribution. ;; * Neither the name of The Qt Company Ltd nor the names of its ;; contributors may be used to endorse or promote products derived ;; from this software without specific prior written permission. ;; ;; ;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ;; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ;; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ;; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ;; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ;; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ;; ;; $QT_END_LICENSE$ ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; _size_of_stack EQU 0x400 _size_of_heap EQU 0x200 ;; Stack configuration. AREA STACK, NOINIT, READWRITE, ALIGN=3 _start_of_stack SPACE _size_of_stack _end_of_stack ;; Heap configuration. AREA HEAP, NOINIT, READWRITE, ALIGN=3 _start_of_heap SPACE _size_of_heap _end_of_heap PRESERVE8 THUMB ;; Define the empty vectors table. AREA RESET, DATA, READONLY _vectors_table ;; Generic interrupts offset. DCD _end_of_stack ; Initial stack pointer value. DCD reset_handler ; Reset. DCD 0 ; NMI. DCD 0 ; Hard fault. DCD 0 ; Memory management fault. DCD 0 ; Bus fault. DCD 0 ; Usage fault. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; Reserved. DCD 0 ; SVC. DCD 0 ; Debug monitor. DCD 0 ; Reserved. DCD 0 ; PendSV. DCD 0 ; SysTick. ;; External interrupts offset. DCD 0 ; Window watchdog. DCD 0 ; PVD through EXTI line detection. DCD 0 ; Tamper and TimeStamps through the EXTI line. DCD 0 ; RTC wakeup through the EXTI line. DCD 0 ; FLASH. DCD 0 ; RCC. DCD 0 ; EXTI line0. DCD 0 ; EXTI line1. DCD 0 ; EXTI line2. DCD 0 ; EXTI line3. DCD 0 ; EXTI line4. DCD 0 ; DMA1 channel 1. DCD 0 ; DMA1 channel 2. DCD 0 ; DMA1 channel 3. DCD 0 ; DMA1 channel 4. DCD 0 ; DMA1 channel 5. DCD 0 ; DMA1 channel 6. DCD 0 ; DMA1 channel 7. DCD 0 ; ADC1/2. DCD 0 ; USB high priority or CAN1 TX. DCD 0 ; USB low priority or CAN1 RX0. DCD 0 ; CAN1 RX1. DCD 0 ; CAN1 SCE. DCD 0 ; EXTI line 9..5. DCD 0 ; TIM1 break. DCD 0 ; TIM1 update. DCD 0 ; TIM1 trigger and commutation. DCD 0 ; IM1 capture compare. DCD 0 ; TIM2. DCD 0 ; TIM3. DCD 0 ; TIM4. DCD 0 ; I2C1 event. DCD 0 ; I2C1 error. DCD 0 ; I2C2 event. DCD 0 ; I2C2 error. DCD 0 ; SPI1. DCD 0 ; SPI2. DCD 0 ; USART1. DCD 0 ; USART2. DCD 0 ; USART3. DCD 0 ; EXTI line 15..10. DCD 0 ; RTC alarm through EXTI line. DCD 0 ; USB wakeup from suspend. _end_of_vectors_table _size_of_vectors_table EQU _end_of_vectors_table - _vectors_table AREA |.text|, CODE, READONLY ;; Reset handler. reset_handler PROC EXPORT reset_handler [WEAK] IMPORT main LDR R0, =main BX R0 ENDP ALIGN END qbs-src-2.3.1/examples/baremetal/stm32f103/greenblink/keil/flash.sct0000644000175100001770000000534514616416776024455 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ ;; Load region size_region. LR_IROM1 0x08000000 0x00010000 { ;; Load address = execution address. ER_IROM1 0x08000000 0x00010000 { *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) .ANY (+XO) } ; RW data. RW_IRAM1 0x20000000 0x00005000 { .ANY (+RW +ZI) } } qbs-src-2.3.1/examples/baremetal/stm32f103/greenblink/gpio.c0000644000175100001770000000727514616416776023027 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "gpio.h" #include "system.h" #define GPIO_GREEN_LED_PIN_POS (13u) #define GPIO_GREEN_LED_PIN (1u << GPIO_GREEN_LED_PIN_POS) // Bit definition for RCC_APB2ENR register. #define RCC_APB2ENR_IOPCEN_POS (4u) #define RCC_APB2ENR_IOPCEN (0x1u << RCC_APB2ENR_IOPCEN_POS) // Bit definition for GPIO_CRL register. #define GPIO_CRL_MODE_POS (0u) // MODE field position. #define GPIO_CRL_MODE_MSK (0x3u << GPIO_CRL_MODE_POS) // MODE field mask. #define GPIO_CRL_MODE_OUT_FREQ_LOW (0x2u << GPIO_CRL_MODE_POS) // As output with low frequency. #define GPIO_CRL_CNF_POS (2u) // CNF field position. #define GPIO_CRL_CNF_MSK (0x3u << GPIO_CRL_CNF_POS) // CNF field mask. #define GPIO_CRL_CNF_OUTPUT_PP (0x00000000u) // General purpose output push-pull. void gpio_init_green_led(void) { // Enable RCC clock on GPIOC port. RCC_REGS_MAP->APB2ENR |= RCC_APB2ENR_IOPCEN; // Configure GPIOC pin #13. const uint32_t offset = ((GPIO_GREEN_LED_PIN_POS - 8u) << 2u); GPIOC_REGS_MAP->CRH &= ~((GPIO_CRL_MODE_MSK | GPIO_CRL_CNF_MSK) << offset); GPIOC_REGS_MAP->CRH |= ((GPIO_CRL_MODE_OUT_FREQ_LOW | GPIO_CRL_CNF_OUTPUT_PP) << offset); } void gpio_toggle_green_led(void) { GPIOC_REGS_MAP->ODR ^= GPIO_GREEN_LED_PIN; } qbs-src-2.3.1/examples/baremetal/stm32f103/stm32f103.qbs0000644000175100001770000000502314616416776021643 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Denis Shienkov ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ Project { name: "Examples for stm32f103 board" references: [ "greenblink/greenblink.qbs" ] } qbs-src-2.3.1/examples/install-bundle/0000755000175100001770000000000014616416776017211 5ustar runnerdockerqbs-src-2.3.1/examples/install-bundle/white.iconset/0000755000175100001770000000000014616416776021774 5ustar runnerdockerqbs-src-2.3.1/examples/install-bundle/white.iconset/icon_16x16.png0000644000175100001770000000121114616416776024272 0ustar runnerdocker‰PNG  IHDRóÿasRGB®Îé pHYs  šœiTXtXML:com.adobe.xmp 4 4 1 #ÆÜ"IDAT8cü & ô‚µŽÀÀ0£aÊ ŸkÊ ÔIEND®B`‚qbs-src-2.3.1/examples/install-bundle/white.iconset/icon_16x16@2x.png0000644000175100001770000000123114616416776024646 0ustar runnerdocker‰PNG  IHDR szzôsRGB®Îé pHYs%%IR$ðiTXtXML:com.adobe.xmp 4 4 1 #ÆÜ2IDATX íÐA 1À¿g ˜àÓ¸¥Ù»x\=¶/í @€ 0Mˆ<òß^ßIEND®B`‚qbs-src-2.3.1/examples/install-bundle/coreutils.h0000644000175100001770000000470214616416776021376 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifdef _WIN32 __declspec(dllexport) #endif int foo(); qbs-src-2.3.1/examples/install-bundle/main.cpp0000644000175100001770000000507514616416776020650 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget window; window.show(); return app.exec(); } qbs-src-2.3.1/examples/install-bundle/coreutils.cpp0000644000175100001770000000470114616416776021730 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "coreutils.h" int foo() { return 42; } qbs-src-2.3.1/examples/install-bundle/assetcatalog1.xcassets/0000755000175100001770000000000014616416776023600 5ustar runnerdockerqbs-src-2.3.1/examples/install-bundle/assetcatalog1.xcassets/other.imageset/0000755000175100001770000000000014616416776026516 5ustar runnerdockerqbs-src-2.3.1/examples/install-bundle/assetcatalog1.xcassets/other.imageset/icon_16x16.png0000644000175100001770000000121114616416776031014 0ustar runnerdocker‰PNG  IHDRóÿasRGB®Îé pHYs  šœiTXtXML:com.adobe.xmp 4 4 1 #ÆÜ"IDAT8cü & ô‚µŽÀÀ0£aÊ ŸkÊ ÔIEND®B`‚qbs-src-2.3.1/examples/install-bundle/assetcatalog1.xcassets/other.imageset/Contents.json0000644000175100001770000000053314616416776031207 0ustar runnerdocker{ "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_16x16.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_16x16@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } }qbs-src-2.3.1/examples/install-bundle/assetcatalog1.xcassets/other.imageset/icon_16x16@2x.png0000644000175100001770000000123114616416776031370 0ustar runnerdocker‰PNG  IHDR szzôsRGB®Îé pHYs%%IR$ðiTXtXML:com.adobe.xmp 4 4 1 #ÆÜ2IDATX íÐA 1À¿g ˜àÓ¸¥Ù»x\=¶/í @€ 0Mˆ<òß^ßIEND®B`‚qbs-src-2.3.1/examples/install-bundle/MainMenu.xib0000644000175100001770000014072114616416776021433 0ustar runnerdocker Default Left to Right Right to Left Default Left to Right Right to Left qbs-src-2.3.1/examples/install-bundle/assetcatalog2.xcassets/0000755000175100001770000000000014616416776023601 5ustar runnerdockerqbs-src-2.3.1/examples/install-bundle/assetcatalog2.xcassets/other.imageset/0000755000175100001770000000000014616416776026517 5ustar runnerdockerqbs-src-2.3.1/examples/install-bundle/assetcatalog2.xcassets/other.imageset/icon_16x16.png0000644000175100001770000000121114616416776031015 0ustar runnerdocker‰PNG  IHDRóÿasRGB®Îé pHYs  šœiTXtXML:com.adobe.xmp 4 4 1 #ÆÜ"IDAT8cü & ô‚µŽÀÀ0£aÊ ŸkÊ ÔIEND®B`‚qbs-src-2.3.1/examples/install-bundle/assetcatalog2.xcassets/other.imageset/Contents.json0000644000175100001770000000053314616416776031210 0ustar runnerdocker{ "images" : [ { "idiom" : "universal", "scale" : "1x", "filename" : "icon_16x16.png" }, { "idiom" : "universal", "scale" : "2x", "filename" : "icon_16x16@2x.png" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } }qbs-src-2.3.1/examples/install-bundle/assetcatalog2.xcassets/other.imageset/icon_16x16@2x.png0000644000175100001770000000123114616416776031371 0ustar runnerdocker‰PNG  IHDR szzôsRGB®Îé pHYs%%IR$ðiTXtXML:com.adobe.xmp 4 4 1 #ÆÜ2IDATX íÐA 1À¿g ˜àÓ¸¥Ù»x\=¶/í @€ 0Mˆ<òß^ßIEND®B`‚qbs-src-2.3.1/examples/install-bundle/Storyboard.storyboard0000644000175100001770000000530414616416776023455 0ustar runnerdocker qbs-src-2.3.1/examples/install-bundle/install-bundle.qbs0000644000175100001770000000344114616416776022637 0ustar runnerdockerimport qbs.FileInfo Project { CppApplication { Depends { name: "bundle" } Depends { name: "windowutils" } Depends { name: "ib"; condition: qbs.targetOS.contains("darwin") } Depends { name: "Qt"; submodules: ["core", "gui", "widgets"] } condition: qbs.targetOS.contains("macos") || qbs.targetOS.contains("linux") || qbs.targetOS.contains("windows") name: "window" property bool isBundle: bundle.isBundle targetName: isBundle ? "Window" : "window" files: [ "main.cpp", "assetcatalog1.xcassets", "assetcatalog2.xcassets", "white.iconset", "MainMenu.xib", "Storyboard.storyboard" ] cpp.minimumMacosVersion: "10.10" Group { fileTagsFilter: qbs.targetOS.contains("darwin") && isBundle ? ["bundle.content"] : ["application"] qbs.install: true qbs.installDir: isBundle ? "Applications" : (qbs.targetOS.contains("windows") ? "" : "bin") qbs.installSourceBase: product.buildDirectory } } DynamicLibrary { Depends { name: "bundle" } Depends { name: "cpp" } name: "windowutils" property bool isBundle: qbs.targetOS.contains("darwin") && bundle.isBundle targetName: isBundle ? "WindowUtils" : "windowutils" files: ["coreutils.cpp", "coreutils.h"] Group { fileTagsFilter: isBundle ? ["bundle.content"] : ["dynamiclibrary", "dynamiclibrary_symlink", "dynamiclibrary_import"] qbs.install: true qbs.installDir: isBundle ? "Library/Frameworks" : (qbs.targetOS.contains("windows") ? "" : "lib") qbs.installSourceBase: product.buildDirectory } } } qbs-src-2.3.1/examples/rpaths/0000755000175100001770000000000014616416776015575 5ustar runnerdockerqbs-src-2.3.1/examples/rpaths/main.cpp0000644000175100001770000000533014616416776017226 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "objecta.h" #include "objectb.h" #include int main(int argc, char *argv[]) { (void)argc; (void)argv; std::cout << ObjectA::className() << std::endl; std::cout << ObjectB::className() << std::endl; ObjectB b; std::cout << b.getA().name() << std::endl; return 0; } qbs-src-2.3.1/examples/rpaths/objecta.h0000644000175100001770000000527514616416776017366 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef OBJECTA_H #define OBJECTA_H #include class ObjectA { public: explicit ObjectA(std::string name); static std::string className(); const std::string &name() const; void setName(std::string name); private: std::string m_name; }; #endif // OBJECTA_H qbs-src-2.3.1/examples/rpaths/objecta.cpp0000644000175100001770000000527714616416776017723 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "objecta.h" ObjectA::ObjectA(std::string name) : m_name(std::move(name)) { } std::string ObjectA::className() { return "ObjectA"; } const std::string &ObjectA::name() const { return m_name; } void ObjectA::setName(std::string name) { m_name = std::move(name); } qbs-src-2.3.1/examples/rpaths/rpaths.qbs0000644000175100001770000000311514616416776017605 0ustar runnerdockerimport qbs.FileInfo Project { condition: qbs.targetOS.contains("unix") //! [0] DynamicLibrary { Depends { name: "cpp" } Depends { name: "bundle" } name: "LibraryA" bundle.isBundle: false cpp.sonamePrefix: qbs.targetOS.contains("macos") ? "@rpath" : undefined cpp.rpaths: cpp.rpathOrigin cpp.cxxLanguageVersion: "c++11" cpp.minimumMacosVersion: "10.8" files: [ "objecta.cpp", "objecta.h", ] install: true installDir: "examples/lib" } //! [0] //! [1] DynamicLibrary { Depends { name: "cpp" } Depends { name: "bundle" } Depends { name: "LibraryA" } name: "LibraryB" bundle.isBundle: false cpp.cxxLanguageVersion: "c++11" cpp.minimumMacosVersion: "10.8" cpp.sonamePrefix: qbs.targetOS.contains("macos") ? "@rpath" : undefined cpp.rpaths: cpp.rpathOrigin files: [ "objectb.cpp", "objectb.h", ] install: true installDir: "examples/lib" } //! [1] //! [2] CppApplication { Depends { name: "bundle" } Depends { name: "LibraryA" } Depends { name: "LibraryB" } name: "rpaths-app" files: "main.cpp" consoleApplication: true bundle.isBundle: false cpp.rpaths: FileInfo.joinPaths(cpp.rpathOrigin, "..", "lib") cpp.cxxLanguageVersion: "c++11" cpp.minimumMacosVersion: "10.8" install: true installDir: "examples/bin" } //! [2] } qbs-src-2.3.1/examples/rpaths/objectb.h0000644000175100001770000000522414616416776017361 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef OBJECTB_H #define OBJECTB_H #include #include "objecta.h" class ObjectB { public: ObjectB(); static std::string className(); const ObjectA &getA() const; private: ObjectA objectA{"A"}; }; #endif // OBJECTB_H qbs-src-2.3.1/examples/rpaths/objectb.cpp0000644000175100001770000000511314616416776017711 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2020 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "objectb.h" ObjectB::ObjectB() = default; std::string ObjectB::className() { return "ObjectB"; } const ObjectA &ObjectB::getA() const { return objectA; } qbs-src-2.3.1/examples/app-and-lib/0000755000175100001770000000000014616416776016360 5ustar runnerdockerqbs-src-2.3.1/examples/app-and-lib/lib/0000755000175100001770000000000014616416776017126 5ustar runnerdockerqbs-src-2.3.1/examples/app-and-lib/lib/lib.cpp0000644000175100001770000000503614616416776020404 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #ifndef CRUCIAL_DEFINE # error CRUCIAL_DEFINE not defined #endif int bla() { std::puts("Hello World!"); return 2; } qbs-src-2.3.1/examples/app-and-lib/lib/lib.qbs0000644000175100001770000000523114616416776020404 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ StaticLibrary { name: "mylib" files: [ "lib.cpp", "lib.h", ] Depends { name: 'cpp' } cpp.defines: ['CRUCIAL_DEFINE'] Export { Depends { name: "cpp" } cpp.includePaths: [exportingProduct.sourceDirectory] } } qbs-src-2.3.1/examples/app-and-lib/lib/lib.h0000644000175100001770000000470514616416776020053 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef LIB_H #define LIB_H int bla(); #endif // LIB_H qbs-src-2.3.1/examples/app-and-lib/app/0000755000175100001770000000000014616416776017140 5ustar runnerdockerqbs-src-2.3.1/examples/app-and-lib/app/main.cpp0000644000175100001770000000500614616416776020571 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include int main() { std::puts("Now calling a function from mylib:"); return bla(); } qbs-src-2.3.1/examples/app-and-lib/app/app.qbs0000644000175100001770000000504114616416776020427 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ Application { consoleApplication: true files : [ "main.cpp" ] Depends { name: "cpp" } Depends { name: "mylib" } install: true } qbs-src-2.3.1/examples/app-and-lib/app-and-lib.qbs0000644000175100001770000000473614616416776021165 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ Project { references: [ "app/app.qbs", "lib/lib.qbs" ] } qbs-src-2.3.1/examples/protobuf/0000755000175100001770000000000014616416776016134 5ustar runnerdockerqbs-src-2.3.1/examples/protobuf/addressbook_objc/0000755000175100001770000000000014616416776021431 5ustar runnerdockerqbs-src-2.3.1/examples/protobuf/addressbook_objc/README.md0000644000175100001770000000035114616416776022707 0ustar runnerdocker### Addressbook objc example This example shows how to build an objective-c application that uses Google protobuf. In order to build this example, you'll need to have a ProtocolBuffers library or framework installed in the system. qbs-src-2.3.1/examples/protobuf/addressbook_objc/main.m0000644000175100001770000001506514616416776022542 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2018 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #import "Addressbook.pbobjc.h" #import int printUsage(char *argv0) { NSString *programName = [[NSString alloc] initWithUTF8String:argv0]; NSLog(@"Usage: %@ add|list ADDRESS_BOOK_FILE", programName); return -1; } NSString *readString(NSString *promt) { NSLog(@"%@", promt); NSFileHandle *inputFile = [NSFileHandle fileHandleWithStandardInput]; NSData *inputData = [inputFile availableData]; NSString *result = [[NSString alloc] initWithData:inputData encoding:NSUTF8StringEncoding]; result = [result stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; return result; } // This function fills in a Person message based on user input. void promptForAddress(Person* person) { person.id_p = [readString(@"Enter person ID number:") intValue]; person.name = readString(@"Enter name:"); NSString *email = readString(@"Enter email address (blank for none):"); if ([email length] != 0) person.email = email; while (true) { NSString *number = readString(@"Enter a phone number (or leave blank to finish):"); if ([number length] == 0) break; Person_PhoneNumber* phoneNumber = [[Person_PhoneNumber alloc] init]; phoneNumber.number = number; NSString *type = readString(@"Is this a mobile, home, or work phone?:"); NSLog(@"\"%@\"", type); if ([type compare:@"mobile"] == NSOrderedSame) phoneNumber.type = Person_PhoneType_Mobile; else if ([type compare:@"home"] == NSOrderedSame) phoneNumber.type = Person_PhoneType_Home; else if ([type compare:@"work"] == NSOrderedSame) phoneNumber.type = Person_PhoneType_Work; else NSLog(@"Unknown phone type. Using default."); [person.phonesArray addObject:phoneNumber]; } } // Iterates though all people in the AddressBook and prints info about them. void listPeople(AddressBook *addressBook) { for (Person *person in addressBook.peopleArray) { NSLog(@"Person ID: %d", person.id_p); NSLog(@"Person name: %@", person.name); if ([person.email length] != 0) { NSLog(@"E-mail address: %@", person.email); } for (Person_PhoneNumber *phoneNumber in person.phonesArray) { NSString *phonePrefix; switch (phoneNumber.type) { case Person_PhoneType_Mobile: phonePrefix = @"Mobile phone"; break; case Person_PhoneType_Home: phonePrefix = @"Home phone"; break; case Person_PhoneType_Work: phonePrefix = @"Work phone"; break; default: phonePrefix = @"Unknown phone"; break; } NSLog(@" %@ #: %@", phonePrefix, phoneNumber.number); } printf("\n"); } } int main(int argc, char *argv[]) { if (argc != 3) return printUsage(argv[0]); @autoreleasepool { AddressBook *addressBook; NSString *filePath = [[NSString alloc] initWithUTF8String:argv[2]]; // Read the existing address book. NSData *data = [NSData dataWithContentsOfFile:filePath]; if (!data) { NSLog(@"%@ : File not found.", filePath); addressBook = [[AddressBook alloc] init]; } else { NSError *error; addressBook = [AddressBook parseFromData:data error:&error]; if (!addressBook) { NSLog(@"Failed to parse address book."); return -1; } } if (strcmp(argv[1], "add") == 0) { // Add an address. Person *person = [[Person alloc] init]; promptForAddress(person); [addressBook.peopleArray addObject:person]; if (!data) { NSLog(@"Creating a new file."); } [[addressBook data] writeToFile:filePath atomically:YES]; } else if (strcmp(argv[1], "list") == 0) { listPeople(addressBook); } else { return printUsage(argv[0]); } return 0; } } qbs-src-2.3.1/examples/protobuf/addressbook_objc/addressbook_objc.qbs0000644000175100001770000000051414616416776025435 0ustar runnerdockerCppApplication { consoleApplication: true condition: protobuf.objc.present && qbs.targetOS.contains("macos") Depends { name: "cpp" } Depends { name: "protobuf.objc"; required: false } Group { cpp.automaticReferenceCounting: true files: "main.m" } files: "../shared/addressbook.proto" } qbs-src-2.3.1/examples/protobuf/addressbook_cpp/0000755000175100001770000000000014616416776021276 5ustar runnerdockerqbs-src-2.3.1/examples/protobuf/addressbook_cpp/README.md0000644000175100001770000000127214616416776022557 0ustar runnerdocker### Addressbook c++ example This example shows how to build a cpp application that uses Google protobuf. In order to build this example, you'll need to have a protobuf headers and library installed in the system in locations where QBS can find them. On Linux, you can install a package to the system. On macOS, you can use brew or compile and install protobuf manually: - to /usr/local/ - to any folder, say /Users//protobuf. Then you'll need to set protobuf.libraryPath: "/Users//protobuf/lib" and protobuf.includePath: "/Users//protobuf/include" On Windows, you have to compile and install protobuf manually to any folder and use libraryPath and includePath as shown above qbs-src-2.3.1/examples/protobuf/addressbook_cpp/main.cpp0000644000175100001770000001442714616416776022736 0ustar runnerdocker// Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. // https://developers.google.com/protocol-buffers/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include #include #ifdef __GNUC__ # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wunused-parameter" # include # pragma GCC diagnostic pop #else # include #endif // __GNUC__ #include "addressbook.pb.h" using google::protobuf::util::TimeUtil; int printUsage(char *argv0) { std::cerr << "Usage: " << argv0 << "add|list ADDRESS_BOOK_FILE" << std::endl; return -1; } std::string readString(const std::string &promt) { std::string result; std::cout << promt; std::getline(std::cin, result); return result; } // This function fills in a Person message based on user input. void promptForAddress(tutorial::Person* person) { std::cout << "Enter person ID number: "; int id; std::cin >> id; person->set_id(id); std::cin.ignore(256, '\n'); *person->mutable_name() = readString("Enter name: "); const auto email = readString("Enter email address (blank for none): "); if (!email.empty()) person->set_email(email); while (true) { const auto number = readString("Enter a phone number (or leave blank to finish): "); if (number.empty()) break; tutorial::Person::PhoneNumber *phone_number = person->add_phones(); phone_number->set_number(number); const auto type = readString("Is this a mobile, home, or work phone? "); if (type == "mobile") phone_number->set_type(tutorial::Person::MOBILE); else if (type == "home") phone_number->set_type(tutorial::Person::HOME); else if (type == "work") phone_number->set_type(tutorial::Person::WORK); else std::cout << "Unknown phone type. Using default." << std::endl; } *person->mutable_last_updated() = TimeUtil::SecondsToTimestamp(time(NULL)); } // Iterates though all people in the AddressBook and prints info about them. void listPeople(const tutorial::AddressBook& address_book) { for (int i = 0; i < address_book.people_size(); i++) { const tutorial::Person& person = address_book.people(i); std::cout << "Person ID: " << person.id() << std::endl; std::cout << " Name: " << person.name() << std::endl; if (!person.email().empty()) { std::cout << " E-mail address: " << person.email() << std::endl; } for (int j = 0; j < person.phones_size(); j++) { const tutorial::Person::PhoneNumber& phone_number = person.phones(j); switch (phone_number.type()) { case tutorial::Person::MOBILE: std::cout << " Mobile phone #: "; break; case tutorial::Person::HOME: std::cout << " Home phone #: "; break; case tutorial::Person::WORK: std::cout << " Work phone #: "; break; default: std::cout << " Unknown phone #: "; break; } std::cout << phone_number.number() << std::endl; } if (person.has_last_updated()) { std::cout << " Updated: " << TimeUtil::ToString(person.last_updated()) << std::endl; } } } int main(int argc, char* argv[]) { // Verify that the version of the library that we linked against is // compatible with the version of the headers we compiled against. GOOGLE_PROTOBUF_VERIFY_VERSION; if (argc != 3) return printUsage(argv[0]); tutorial::AddressBook address_book; // Read the existing address book. std::fstream input(argv[2], std::ios::in | std::ios::binary); if (!input) { std::cout << argv[2] << ": File not found." << std::endl; } else if (!address_book.ParseFromIstream(&input)) { std::cerr << "Failed to parse address book." << std::endl; return -1; } const std::string mode(argv[1]); if (mode == "add") { // Add an address. promptForAddress(address_book.add_people()); if (!input) std::cout << "Creating a new file." << std::endl; // Write the new address book back to disk. std::fstream output(argv[2], std::ios::out | std::ios::trunc | std::ios::binary); if (!address_book.SerializeToOstream(&output)) { std::cerr << "Failed to write address book." << std::endl; return -1; } } else if (mode == "list") { listPeople(address_book); } else { return printUsage(argv[0]); } // Optional: Delete all global objects allocated by libprotobuf. google::protobuf::ShutdownProtobufLibrary(); return 0; } qbs-src-2.3.1/examples/protobuf/addressbook_cpp/addressbook_cpp.qbs0000644000175100001770000000062314616416776025150 0ustar runnerdockerimport qbs.Host CppApplication { consoleApplication: true condition: protobuf.cpp.present && qbs.targetPlatform === Host.platform() Depends { name: "cpp" } cpp.minimumMacosVersion: "10.15" Depends { name: "protobuf.cpp"; required: false } files: [ "../shared/addressbook.proto", "main.cpp", "README.md", ] qbsModuleProviders: "qbspkgconfig" } qbs-src-2.3.1/examples/protobuf/shared/0000755000175100001770000000000014616416776017402 5ustar runnerdockerqbs-src-2.3.1/examples/protobuf/shared/addressbook.proto0000644000175100001770000000232214616416776022766 0ustar runnerdocker// See README.txt for information and build instructions. // // Note: START and END tags are used in comments to define sections used in // tutorials. They are not part of the syntax for Protocol Buffers. // // To get an in-depth walkthrough of this file and the related examples, see: // https://developers.google.com/protocol-buffers/docs/tutorials // [START declaration] syntax = "proto3"; package tutorial; import "google/protobuf/timestamp.proto"; // [END declaration] // [START java_declaration] option java_package = "com.example.tutorial"; option java_outer_classname = "AddressBookProtos"; // [END java_declaration] // [START csharp_declaration] option csharp_namespace = "Google.Protobuf.Examples.AddressBook"; // [END csharp_declaration] // [START messages] message Person { string name = 1; int32 id = 2; // Unique ID number for this person. string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { string number = 1; PhoneType type = 2; } repeated PhoneNumber phones = 4; google.protobuf.Timestamp last_updated = 5; } // Our address book file is just one of these. message AddressBook { repeated Person people = 1; } // [END messages] qbs-src-2.3.1/examples/collidingmice/0000755000175100001770000000000014616416776017076 5ustar runnerdockerqbs-src-2.3.1/examples/collidingmice/collidingmice.qbs0000644000175100001770000000567314616416776022422 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ CppApplication { name : "CollidingMice" Depends { name: "Qt.widgets" } property bool isBundle: qbs.targetOS.contains("darwin") && bundle.isBundle files : [ "images/cheese.jpg", "main.cpp", "mouse.cpp", "mouse.h", "mice.qrc" ] Group { fileTagsFilter: isBundle ? ["bundle.content"] : ["application"] qbs.install: true qbs.installDir: isBundle ? "Applications" : (qbs.targetOS.contains("windows") ? "" : "bin") qbs.installSourceBase: product.buildDirectory } } qbs-src-2.3.1/examples/collidingmice/main.cpp0000644000175100001770000000727714616416776020543 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "mouse.h" #include #include #include #include #include #include static const int MouseCount = 7; //! [0] int main(int argc, char **argv) { QApplication app(argc, argv); //! [0] //! [1] QGraphicsScene scene; scene.setSceneRect(-300, -300, 600, 600); //! [1] //! [2] scene.setItemIndexMethod(QGraphicsScene::NoIndex); //! [2] //! [3] for (int i = 0; i < MouseCount; ++i) { const auto mouse = new Mouse; mouse->setPos(::sin((i * 6.28) / MouseCount) * 200, ::cos((i * 6.28) / MouseCount) * 200); scene.addItem(mouse); } //! [3] //! [4] QGraphicsView view(&scene); view.setRenderHint(QPainter::Antialiasing); view.setBackgroundBrush(QPixmap(":/images/cheese.jpg")); //! [4] //! [5] view.setCacheMode(QGraphicsView::CacheBackground); view.setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); view.setDragMode(QGraphicsView::ScrollHandDrag); //! [5] //! [6] view.setWindowTitle(QT_TRANSLATE_NOOP(QGraphicsView, "Colliding Mice")); view.resize(400, 300); view.show(); QTimer timer; QObject::connect(&timer, &QTimer::timeout, &scene, &QGraphicsScene::advance); timer.start(1000 / 33); return app.exec(); } //! [6] qbs-src-2.3.1/examples/collidingmice/mouse.h0000644000175100001770000000571614616416776020410 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef MOUSE_H #define MOUSE_H #include #include //! [0] class Mouse : public QGraphicsItem { public: Mouse(); QRectF boundingRect() const override; QPainterPath shape() const override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; protected: void advance(int step) override; private: QRandomGenerator m_rand = QRandomGenerator::securelySeeded(); qreal angle; qreal speed; qreal mouseEyeDirection; QColor color; }; //! [0] #endif qbs-src-2.3.1/examples/collidingmice/mouse.cpp0000644000175100001770000001524514616416776020741 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "mouse.h" #include #include #include #include static const double Pi = 3.14159265358979323846264338327950288419717; static double TwoPi = 2.0 * Pi; static qreal normalizeAngle(qreal angle) { while (angle < 0) angle += TwoPi; while (angle > TwoPi) angle -= TwoPi; return angle; } //! [0] Mouse::Mouse() : angle(0), speed(0), mouseEyeDirection(0), color(m_rand.generate() % 256, m_rand.generate() % 256, m_rand.generate() % 256) { setRotation(m_rand.generate() % (360 * 16)); } //! [0] //! [1] QRectF Mouse::boundingRect() const { qreal adjust = 0.5; return {-18 - adjust, -22 - adjust, 36 + adjust, 60 + adjust}; } //! [1] //! [2] QPainterPath Mouse::shape() const { QPainterPath path; path.addRect(-10, -20, 20, 40); return path; } //! [2] //! [3] void Mouse::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) { // Body painter->setBrush(color); painter->drawEllipse(-10, -20, 20, 40); // Eyes painter->setBrush(Qt::white); painter->drawEllipse(-10, -17, 8, 8); painter->drawEllipse(2, -17, 8, 8); // Nose painter->setBrush(Qt::black); painter->drawEllipse(QRectF(-2, -22, 4, 4)); // Pupils painter->drawEllipse(QRectF(-8.0 + mouseEyeDirection, -17, 4, 4)); painter->drawEllipse(QRectF(4.0 + mouseEyeDirection, -17, 4, 4)); // Ears painter->setBrush(scene()->collidingItems(this).isEmpty() ? Qt::darkYellow : Qt::red); painter->drawEllipse(-17, -12, 16, 16); painter->drawEllipse(1, -12, 16, 16); // Tail QPainterPath path(QPointF(0, 20)); path.cubicTo(-5, 22, -5, 22, 0, 25); path.cubicTo(5, 27, 5, 32, 0, 30); path.cubicTo(-5, 32, -5, 42, 0, 35); painter->setBrush(Qt::NoBrush); painter->drawPath(path); } //! [3] //! [4] void Mouse::advance(int step) { if (!step) return; //! [4] // Don't move too far away //! [5] QLineF lineToCenter(QPointF(0, 0), mapFromScene(0, 0)); if (lineToCenter.length() > 150) { qreal angleToCenter = ::acos(lineToCenter.dx() / lineToCenter.length()); if (lineToCenter.dy() < 0) angleToCenter = TwoPi - angleToCenter; angleToCenter = normalizeAngle((Pi - angleToCenter) + Pi / 2); if (angleToCenter < Pi && angleToCenter > Pi / 4) { // Rotate left angle += (angle < -Pi / 2) ? 0.25 : -0.25; } else if (angleToCenter >= Pi && angleToCenter < (Pi + Pi / 2 + Pi / 4)) { // Rotate right angle += (angle < Pi / 2) ? 0.25 : -0.25; } } else if (::sin(angle) < 0) { angle += 0.25; } else if (::sin(angle) > 0) { angle -= 0.25; //! [5] //! [6] } //! [6] // Try not to crash with any other mice //! [7] const QList dangerMice = scene()->items(QPolygonF() << mapToScene(0, 0) << mapToScene(-30, -50) << mapToScene(30, -50)); for (QGraphicsItem *item : dangerMice) { if (item == this) continue; QLineF lineToMouse(QPointF(0, 0), mapFromItem(item, 0, 0)); qreal angleToMouse = ::acos(lineToMouse.dx() / lineToMouse.length()); if (lineToMouse.dy() < 0) angleToMouse = TwoPi - angleToMouse; angleToMouse = normalizeAngle((Pi - angleToMouse) + Pi / 2); if (angleToMouse >= 0 && angleToMouse < Pi / 2) { // Rotate right angle += 0.5; } else if (angleToMouse <= TwoPi && angleToMouse > (TwoPi - Pi / 2)) { // Rotate left angle -= 0.5; //! [7] //! [8] } //! [8] //! [9] } //! [9] // Add some random movement //! [10] if (dangerMice.size() > 1 && (m_rand.generate() % 10) == 0) { if (m_rand.generate() % 1) angle += (m_rand.generate() % 100) / 500.0; else angle -= (m_rand.generate() % 100) / 500.0; } //! [10] //! [11] speed += (-50 + m_rand.generate() % 100) / 100.0; qreal dx = ::sin(angle) * 10; mouseEyeDirection = (qAbs(dx / 5) < 1) ? 0 : dx / 5; setRotation(rotation() + dx); setPos(mapToParent(0, -(3 + sin(speed) * 3))); } //! [11] qbs-src-2.3.1/examples/collidingmice/images/0000755000175100001770000000000014616416776020343 5ustar runnerdockerqbs-src-2.3.1/examples/collidingmice/images/cheese.jpg0000644000175100001770000000572514616416776022312 0ustar runnerdockerÿØÿàJFIFHHÿîAdobed@ÿÛ„      ÿÀ^^ÿÝ ÿÄ¢  s!1AQa"q2‘¡±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ŠšªºÊÚêúÿÚ ?ûAÓo¢‡Ç<7‰éÔéâk)n£rM ðÈ‚¥²AZ†úFù"7P¦cåâvù`ä•ÁHØt=F V¤š1`¤ìkã’ ¬I’Q­È‘·ê„4¯ÅŽûwÉlIb:¯ž<¿£Ìmîï+84ha£þU6~§§ïNŸ~eøžž/'‡zÿÑû?JíÔöÏ §¨Qy?Ö=°ˆq-Òš„j{d¼&aÆpJ‘Jt"˜øtŽ0UÔ‡nÛŒ ;@ÞÚ ˆšbJƒÄѨ|ù +|µ=ໞYâäÈbBÿ!%OßÇ,ˆÅÖý̼IŽTôk+[-:Ö+ e¶´€)þQ«îNç!–|g•À§šÝNÊ=NÂæÍ¶€PžÌ7ÊÄD½'«!#a…i¾\’ݽ;‹vJÕÆÿÛ˜Ù#,G„¹-€©Ï ·¨J/çŽÚ9îfqP!yôEI9|HËY²h>Ró'æšõKébÐIÓlQˆÒž«Ýœƒ×Àe>)ŸZr#†1çºqå_>y¢Öîõ‹‡¾µ”"L`R¬v÷ȆíÄ%ÈSé›I–EŠhÛœR…daЩfA ‹ØZ¨=5µ„ 1€{|ˆ34›jzïNMïí<™†¸5 ‘ZW·Ë5µŒ¬ k-©­ð9$.ãN„ø}H%A]ÈÔøø×#JÿÿÔûCÉ)Øðzz…zt ôÉÄð›Ô‹K­´}Ní ¿U”±fŽZ”ÿ`À~'›<ûÆ\'¸Ý|ý+Ò†ÄZ'è«`¾¤«xÊ(!ŒÛ“56ÄiñBbRÉ]"þò@jñrO¯4*³Ü¹øª±<@Ø|€ðrä–Be.e”ˆ ª@?>”Ê:3s1 Ü.ʵýXlõE!Üo°&§¬ z×åŠUÐöë¡} 4ðÚ¸ÄyªrRO]öOL<;Õ£‰ÿÕû8ÀÖ£®x]½B“G^„×¹Ä*€·]Ù¶5ÛÄâ(VH _‰ºøòDŒx‚6ªc¢€6##Í’Ÿ¨T|@úâ`–ê\ñ=ÎB’ºª*¤×ß TJT{cJ»wQ·l•*àkþKxd$ÛÔoô`WÿÖû=Q×–xSÔ/$q$liÓÙRnK‹}Q»³¡º†mÁb4ö­r2‘$&1âºf‡æhîª5;É®9 $2HÅ¢„Ҟ؀@«t¢9=âÔ¹†'‘x4ˆ®ÉàXTŒÈɵ*Ƈ®ô4Êì³RcÇzn{âÔL½‡\°´&жþq¯õ–”¯Ñ€Á"j«)$PŽ»ä¦V¦%#š’y)‘¥ÿ×û;ÐPÇ<*Þ¡PPûõÄ«¤U(A^JÀ†SЂ(AƃanöÑGéÃaF¯Ùgäƒè¥Oß™~.!¿þý¿$LõTS#3™$¶ÔÙ‹“'¾¬€¦…jFÕ4`½ÇÏä”5Á"ƒ¹é’Ç»0/8ùÂÇÊvB{ Ó\KQmj†!jeEz岘€óc—Ïòþsù¦æê–‘Ckk_†10»1©ÊŒæz·Œ1Ròoæ<úÄñXêð¤rÌBÅs*9”“JøŒÌA©5Ï«dа'¥wtã³Tdô–µíN™ŽÜÿÿÐû4ÊÛýÆxCÔ¶ŒAZ‘Ö§$‚¨O&@¯°Û¯øTo@r*´ÍU AÔø{âW§A×®ˆC¼m+- Fãl³c7Ë¿™¶7:šeˆ‚ÖÖ¡bDë@?‰9‹’w77 ÆK,ŠF›uðË,Ä0 [!‡Ë2YÜE…Ò}[.Òi½1!ñ#¾lqJñ‚]|ÅJ“~'Óú2¾­ÿÑû9-üNxCÔ0/2k^e°Ôôû- F‹QŠxÚ{¹¦vP[øþÖÕ©öÆy죌˫?µvx‘ =t=A"´>ã$Fì¹A¹p¶ pU vß׆Q€ì—râ4à ‡™yÃËku¨&«lÞµåw*àSìrYôüQãÇËöì«ÒQZF†„§«â‚”¨Úž,Àã2<7»q¡»'m®\E|˜ìÔO†CI£žLüÞÏö°É©ˆ”ÏÒŠâ´‚ºˆÃÿ7ÄŸ¦™¸ÍÁÃCo–ßo7w=U9ÓM©˜öÝOÿÒûy“§9/Ññîøôa>Ý^ÚêÜeÓL+È$ÔB|wäGß•œÚ~+ž;;ÝHú~‰G-}[{•'ŸP–)¾©d–Öá}麻ñïSÊ´ñ É㙜%áDF5½o*ëw¿¾€ b ÄI>idâÅá”§!ðÔeiÿÙqbs-src-2.3.1/examples/collidingmice/mice.qrc0000644000175100001770000000014114616416776020516 0ustar runnerdocker images/cheese.jpg qbs-src-2.3.1/examples/code-generator/0000755000175100001770000000000014616416776017172 5ustar runnerdockerqbs-src-2.3.1/examples/code-generator/code-generator.qbs0000644000175100001770000000657514616416776022614 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ Project { // A code generator that outputs a "Hello World" C++ program. CppApplication { name: "hwgen" consoleApplication: true files: ["hwgen.cpp"] Properties { condition: qbs.toolchain.contains("gcc") || qbs.toolchain.contains("clang-cl") cpp.cxxFlags: ["-Wno-deprecated-declarations"] } } // Generate and build a hello-world application. CppApplication { condition: qbs.targetPlatform === qbs.hostPlatform name: "hello-world" Depends { name: "hwgen" } Rule { inputsFromDependencies: ["application"] Artifact { filePath: "main.cpp" fileTags: ["cpp"] } prepare: { var hwgen = inputs["application"][0].filePath; var cmd = new Command(hwgen, [output.filePath]); cmd.description = "generating C++ source"; return cmd; } } } } qbs-src-2.3.1/examples/code-generator/hwgen.cpp0000644000175100001770000000537014616416776021013 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include int main(int argc, char **argv) { if (argc < 2) return 1; std::FILE *f = std::fopen(argv[1], "w"); if (!f) return 2; std::fprintf(f, "#include \n\n" "int main()\n" "{\n std::printf(\"Hello World!\\n\");\n return 0;\n}\n"); std::fclose(f); return 0; } qbs-src-2.3.1/examples/grpc/0000755000175100001770000000000014616416776015227 5ustar runnerdockerqbs-src-2.3.1/examples/grpc/grpc.qbs0000644000175100001770000000561614616416776016701 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qbs. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms and ** conditions see http://www.qt.io/terms-conditions. For further information ** use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, The Qt Company gives you certain additional ** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ****************************************************************************/ import qbs.Utilities Project { condition: Utilities.versionCompare(qbs.version, "1.14") >= 0 qbsModuleProviders: "qbspkgconfig" Application { Depends { name: "cpp" } Depends { name: "protobuf.cpp"; required: false } condition: protobuf.cpp.present && qbs.targetPlatform === qbs.hostPlatform protobuf.cpp.useGrpc: true consoleApplication: true cpp.cxxLanguageVersion: "c++17" cpp.minimumMacosVersion: "10.15" name: "client" files: "client.cpp" Properties { condition: qbs.toolchain.contains("gcc") cpp.cxxFlags: "-Wno-deprecated-declarations" } Group { files: "ping-pong-grpc.proto" fileTags: "protobuf.grpc" } } Application { Depends { name: "cpp" } Depends { name: "protobuf.cpp"; required: false } condition: protobuf.cpp.present && qbs.targetPlatform === qbs.hostPlatform protobuf.cpp.useGrpc: true consoleApplication: true cpp.cxxLanguageVersion: "c++17" cpp.minimumMacosVersion: "10.15" name: "server" files: "server.cpp" Properties { condition: qbs.toolchain.contains("gcc") cpp.cxxFlags: "-Wno-deprecated-declarations" } Group { files: "ping-pong-grpc.proto" fileTags: "protobuf.grpc" } } } qbs-src-2.3.1/examples/grpc/ping-pong-grpc.proto0000644000175100001770000000025214616416776021142 0ustar runnerdockersyntax = "proto3"; package PP; message Ping { int32 count = 1; } message Pong { int32 count = 1; } service MyApi { rpc pingPong(Ping) returns (Pong) {} } qbs-src-2.3.1/examples/grpc/server.cpp0000644000175100001770000000707414616416776017251 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-parameter" #endif // __GNUC__ #include #include #include #include #include #include #ifdef __GNUC__ #pragma GCC diagnostic pop #endif // __GNUC__ #include #include #include class Service final : public PP::MyApi::Service { grpc::Status pingPong( grpc::ServerContext* context, const PP::Ping* request, PP::Pong* reply) override { (void)context; reply->set_count(request->count()); return grpc::Status::OK; } }; int main(int, char**) { std::string server_address("0.0.0.0:50051"); Service service; grpc::ServerBuilder builder; builder.AddListeningPort(server_address, grpc::InsecureServerCredentials()); builder.RegisterService(&service); std::unique_ptr server(builder.BuildAndStart()); std::cout << "Server listening on " << server_address << std::endl; server->Wait(); return 0; } qbs-src-2.3.1/examples/grpc/client.cpp0000644000175100001770000000764214616416776017222 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2019 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-parameter" #endif // __GNUC__ #include #include #include #include #include #ifdef __GNUC__ #pragma GCC diagnostic pop #endif // __GNUC__ #include #include #include class Client { public: Client(const std::shared_ptr &channel) : m_stub(PP::MyApi::NewStub(channel)) {} int ping(int count) { PP::Ping request; request.set_count(count); PP::Pong reply; grpc::ClientContext context; const auto status = m_stub->pingPong(&context, request, &reply); if (status.ok()) { return reply.count(); } else { throw std::runtime_error("invalid status"); } } private: std::unique_ptr m_stub; }; int main(int, char**) { Client client( grpc::CreateCustomChannel( "localhost:50051", grpc::InsecureChannelCredentials(), grpc::ChannelArguments())); for (int i = 0; i < 1000; ++i) { std::cout << "Sending ping " << i << "... "; int result = client.ping(i); if (result != i) { std::cerr << "Invalid pong " << result << " for ping" << i << std::endl; continue; } std::cout << "got pong " << result << std::endl; } return 0; } qbs-src-2.3.1/examples/capnproto/0000755000175100001770000000000014616416776016301 5ustar runnerdockerqbs-src-2.3.1/examples/capnproto/calculator_cpp/0000755000175100001770000000000014616416776021274 5ustar runnerdockerqbs-src-2.3.1/examples/capnproto/calculator_cpp/calculator-client.cpp0000644000175100001770000003131014616416776025403 0ustar runnerdocker// Copyright (c) 2013-2014 Sandstorm Development Group, Inc. and contributors // Licensed under the MIT License: // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. #include "calculator.capnp.h" #include #include #include #include class PowerFunction final: public Calculator::Function::Server { // An implementation of the Function interface wrapping pow(). Note that // we're implementing this on the client side and will pass a reference to // the server. The server will then be able to make calls back to the client. public: kj::Promise call(CallContext context) { auto params = context.getParams().getParams(); KJ_REQUIRE(params.size() == 2, "Wrong number of parameters."); context.getResults().setValue(pow(params[0], params[1])); return kj::READY_NOW; } }; int main(int argc, const char* argv[]) { if (argc != 2) { std::cerr << "usage: " << argv[0] << " HOST:PORT\n" "Connects to the Calculator server at the given address and " "does some RPCs." << std::endl; return 1; } capnp::EzRpcClient client(argv[1]); Calculator::Client calculator = client.getMain(); // Keep an eye on `waitScope`. Whenever you see it used is a place where we // stop and wait for the server to respond. If a line of code does not use // `waitScope`, then it does not block! auto& waitScope = client.getWaitScope(); { // Make a request that just evaluates the literal value 123. // // What's interesting here is that evaluate() returns a "Value", which is // another interface and therefore points back to an object living on the // server. We then have to call read() on that object to read it. // However, even though we are making two RPC's, this block executes in // *one* network round trip because of promise pipelining: we do not wait // for the first call to complete before we send the second call to the // server. std::cout << "Evaluating a literal... "; std::cout.flush(); // Set up the request. auto request = calculator.evaluateRequest(); request.getExpression().setLiteral(123); // Send it, which returns a promise for the result (without blocking). auto evalPromise = request.send(); // Using the promise, create a pipelined request to call read() on the // returned object, and then send that. auto readPromise = evalPromise.getValue().readRequest().send(); // Now that we've sent all the requests, wait for the response. Until this // point, we haven't waited at all! auto response = readPromise.wait(waitScope); KJ_ASSERT(response.getValue() == 123); std::cout << "PASS" << std::endl; } { // Make a request to evaluate 123 + 45 - 67. // // The Calculator interface requires that we first call getOperator() to // get the addition and subtraction functions, then call evaluate() to use // them. But, once again, we can get both functions, call evaluate(), and // then read() the result -- four RPCs -- in the time of *one* network // round trip, because of promise pipelining. std::cout << "Using add and subtract... "; std::cout.flush(); Calculator::Function::Client add = nullptr; Calculator::Function::Client subtract = nullptr; { // Get the "add" function from the server. auto request = calculator.getOperatorRequest(); request.setOp(Calculator::Operator::ADD); add = request.send().getFunc(); } { // Get the "subtract" function from the server. auto request = calculator.getOperatorRequest(); request.setOp(Calculator::Operator::SUBTRACT); subtract = request.send().getFunc(); } // Build the request to evaluate 123 + 45 - 67. auto request = calculator.evaluateRequest(); auto subtractCall = request.getExpression().initCall(); subtractCall.setFunction(subtract); auto subtractParams = subtractCall.initParams(2); subtractParams[1].setLiteral(67); auto addCall = subtractParams[0].initCall(); addCall.setFunction(add); auto addParams = addCall.initParams(2); addParams[0].setLiteral(123); addParams[1].setLiteral(45); // Send the evaluate() request, read() the result, and wait for read() to // finish. auto evalPromise = request.send(); auto readPromise = evalPromise.getValue().readRequest().send(); auto response = readPromise.wait(waitScope); KJ_ASSERT(response.getValue() == 101); std::cout << "PASS" << std::endl; } { // Make a request to evaluate 4 * 6, then use the result in two more // requests that add 3 and 5. // // Since evaluate() returns its result wrapped in a `Value`, we can pass // that `Value` back to the server in subsequent requests before the first // `evaluate()` has actually returned. Thus, this example again does only // one network round trip. std::cout << "Pipelining eval() calls... "; std::cout.flush(); Calculator::Function::Client add = nullptr; Calculator::Function::Client multiply = nullptr; { // Get the "add" function from the server. auto request = calculator.getOperatorRequest(); request.setOp(Calculator::Operator::ADD); add = request.send().getFunc(); } { // Get the "multiply" function from the server. auto request = calculator.getOperatorRequest(); request.setOp(Calculator::Operator::MULTIPLY); multiply = request.send().getFunc(); } // Build the request to evaluate 4 * 6 auto request = calculator.evaluateRequest(); auto multiplyCall = request.getExpression().initCall(); multiplyCall.setFunction(multiply); auto multiplyParams = multiplyCall.initParams(2); multiplyParams[0].setLiteral(4); multiplyParams[1].setLiteral(6); auto multiplyResult = request.send().getValue(); // Use the result in two calls that add 3 and add 5. auto add3Request = calculator.evaluateRequest(); auto add3Call = add3Request.getExpression().initCall(); add3Call.setFunction(add); auto add3Params = add3Call.initParams(2); add3Params[0].setPreviousResult(multiplyResult); add3Params[1].setLiteral(3); auto add3Promise = add3Request.send().getValue().readRequest().send(); auto add5Request = calculator.evaluateRequest(); auto add5Call = add5Request.getExpression().initCall(); add5Call.setFunction(add); auto add5Params = add5Call.initParams(2); add5Params[0].setPreviousResult(multiplyResult); add5Params[1].setLiteral(5); auto add5Promise = add5Request.send().getValue().readRequest().send(); // Now wait for the results. KJ_ASSERT(add3Promise.wait(waitScope).getValue() == 27); KJ_ASSERT(add5Promise.wait(waitScope).getValue() == 29); std::cout << "PASS" << std::endl; } { // Our calculator interface supports defining functions. Here we use it // to define two functions and then make calls to them as follows: // // f(x, y) = x * 100 + y // g(x) = f(x, x + 1) * 2; // f(12, 34) // g(21) // // Once again, the whole thing takes only one network round trip. std::cout << "Defining functions... "; std::cout.flush(); Calculator::Function::Client add = nullptr; Calculator::Function::Client multiply = nullptr; Calculator::Function::Client f = nullptr; Calculator::Function::Client g = nullptr; { // Get the "add" function from the server. auto request = calculator.getOperatorRequest(); request.setOp(Calculator::Operator::ADD); add = request.send().getFunc(); } { // Get the "multiply" function from the server. auto request = calculator.getOperatorRequest(); request.setOp(Calculator::Operator::MULTIPLY); multiply = request.send().getFunc(); } { // Define f. auto request = calculator.defFunctionRequest(); request.setParamCount(2); { // Build the function body. auto addCall = request.getBody().initCall(); addCall.setFunction(add); auto addParams = addCall.initParams(2); addParams[1].setParameter(1); // y auto multiplyCall = addParams[0].initCall(); multiplyCall.setFunction(multiply); auto multiplyParams = multiplyCall.initParams(2); multiplyParams[0].setParameter(0); // x multiplyParams[1].setLiteral(100); } f = request.send().getFunc(); } { // Define g. auto request = calculator.defFunctionRequest(); request.setParamCount(1); { // Build the function body. auto multiplyCall = request.getBody().initCall(); multiplyCall.setFunction(multiply); auto multiplyParams = multiplyCall.initParams(2); multiplyParams[1].setLiteral(2); auto fCall = multiplyParams[0].initCall(); fCall.setFunction(f); auto fParams = fCall.initParams(2); fParams[0].setParameter(0); auto addCall = fParams[1].initCall(); addCall.setFunction(add); auto addParams = addCall.initParams(2); addParams[0].setParameter(0); addParams[1].setLiteral(1); } g = request.send().getFunc(); } // OK, we've defined all our functions. Now create our eval requests. // f(12, 34) auto fEvalRequest = calculator.evaluateRequest(); auto fCall = fEvalRequest.initExpression().initCall(); fCall.setFunction(f); auto fParams = fCall.initParams(2); fParams[0].setLiteral(12); fParams[1].setLiteral(34); auto fEvalPromise = fEvalRequest.send().getValue().readRequest().send(); // g(21) auto gEvalRequest = calculator.evaluateRequest(); auto gCall = gEvalRequest.initExpression().initCall(); gCall.setFunction(g); gCall.initParams(1)[0].setLiteral(21); auto gEvalPromise = gEvalRequest.send().getValue().readRequest().send(); // Wait for the results. KJ_ASSERT(fEvalPromise.wait(waitScope).getValue() == 1234); KJ_ASSERT(gEvalPromise.wait(waitScope).getValue() == 4244); std::cout << "PASS" << std::endl; } { // Make a request that will call back to a function defined locally. // // Specifically, we will compute 2^(4 + 5). However, exponent is not // defined by the Calculator server. So, we'll implement the Function // interface locally and pass it to the server for it to use when // evaluating the expression. // // This example requires two network round trips to complete, because the // server calls back to the client once before finishing. In this // particular case, this could potentially be optimized by using a tail // call on the server side -- see CallContext::tailCall(). However, to // keep the example simpler, we haven't implemented this optimization in // the sample server. std::cout << "Using a callback... "; std::cout.flush(); Calculator::Function::Client add = nullptr; { // Get the "add" function from the server. auto request = calculator.getOperatorRequest(); request.setOp(Calculator::Operator::ADD); add = request.send().getFunc(); } // Build the eval request for 2^(4+5). auto request = calculator.evaluateRequest(); auto powCall = request.getExpression().initCall(); powCall.setFunction(kj::heap()); auto powParams = powCall.initParams(2); powParams[0].setLiteral(2); auto addCall = powParams[1].initCall(); addCall.setFunction(add); auto addParams = addCall.initParams(2); addParams[0].setLiteral(4); addParams[1].setLiteral(5); // Send the request and wait. auto response = request.send().getValue().readRequest() .send().wait(waitScope); KJ_ASSERT(response.getValue() == 512); std::cout << "PASS" << std::endl; } return 0; } qbs-src-2.3.1/examples/capnproto/calculator_cpp/calculator-server.cpp0000644000175100001770000001657114616416776025447 0ustar runnerdocker// Copyright (c) 2013-2014 Sandstorm Development Group, Inc. and contributors // Licensed under the MIT License: // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. #include "calculator.capnp.h" #include #include #include #include typedef unsigned int uint; kj::Promise readValue(Calculator::Value::Client value) { // Helper function to asynchronously call read() on a Calculator::Value and // return a promise for the result. (In the future, the generated code might // include something like this automatically.) return value.readRequest().send() .then([](capnp::Response result) { return result.getValue(); }); } kj::Promise evaluateImpl( Calculator::Expression::Reader expression, capnp::List::Reader params = capnp::List::Reader()) { // Implementation of CalculatorImpl::evaluate(), also shared by // FunctionImpl::call(). In the latter case, `params` are the parameter // values passed to the function; in the former case, `params` is just an // empty list. switch (expression.which()) { case Calculator::Expression::LITERAL: return expression.getLiteral(); case Calculator::Expression::PREVIOUS_RESULT: return readValue(expression.getPreviousResult()); case Calculator::Expression::PARAMETER: { KJ_REQUIRE(expression.getParameter() < params.size(), "Parameter index out-of-range."); return params[expression.getParameter()]; } case Calculator::Expression::CALL: { auto call = expression.getCall(); auto func = call.getFunction(); // Evaluate each parameter. kj::Array> paramPromises = KJ_MAP(param, call.getParams()) { return evaluateImpl(param, params); }; // Join the array of promises into a promise for an array. kj::Promise> joinedParams = kj::joinPromises(kj::mv(paramPromises)); // When the parameters are complete, call the function. return joinedParams.then([KJ_CPCAP(func)](kj::Array&& paramValues) mutable { auto request = func.callRequest(); request.setParams(paramValues); return request.send().then( [](capnp::Response&& result) { return result.getValue(); }); }); } default: // Throw an exception. KJ_FAIL_REQUIRE("Unknown expression type."); } } class ValueImpl final: public Calculator::Value::Server { // Simple implementation of the Calculator.Value Cap'n Proto interface. public: ValueImpl(double value): value(value) {} kj::Promise read(ReadContext context) { context.getResults().setValue(value); return kj::READY_NOW; } private: double value; }; class FunctionImpl final: public Calculator::Function::Server { // Implementation of the Calculator.Function Cap'n Proto interface, where the // function is defined by a Calculator.Expression. public: FunctionImpl(uint paramCount, Calculator::Expression::Reader body) : paramCount(paramCount) { this->body.setRoot(body); } kj::Promise call(CallContext context) { auto params = context.getParams().getParams(); KJ_REQUIRE(params.size() == paramCount, "Wrong number of parameters."); return evaluateImpl(body.getRoot(), params) .then([KJ_CPCAP(context)](double value) mutable { context.getResults().setValue(value); }); } private: uint paramCount; // The function's arity. capnp::MallocMessageBuilder body; // Stores a permanent copy of the function body. }; class OperatorImpl final: public Calculator::Function::Server { // Implementation of the Calculator.Function Cap'n Proto interface, wrapping // basic binary arithmetic operators. public: OperatorImpl(Calculator::Operator op): op(op) {} kj::Promise call(CallContext context) { auto params = context.getParams().getParams(); KJ_REQUIRE(params.size() == 2, "Wrong number of parameters."); double result; switch (op) { case Calculator::Operator::ADD: result = params[0] + params[1]; break; case Calculator::Operator::SUBTRACT:result = params[0] - params[1]; break; case Calculator::Operator::MULTIPLY:result = params[0] * params[1]; break; case Calculator::Operator::DIVIDE: result = params[0] / params[1]; break; default: KJ_FAIL_REQUIRE("Unknown operator."); } context.getResults().setValue(result); return kj::READY_NOW; } private: Calculator::Operator op; }; class CalculatorImpl final: public Calculator::Server { // Implementation of the Calculator Cap'n Proto interface. public: kj::Promise evaluate(EvaluateContext context) override { return evaluateImpl(context.getParams().getExpression()) .then([KJ_CPCAP(context)](double value) mutable { context.getResults().setValue(kj::heap(value)); }); } kj::Promise defFunction(DefFunctionContext context) override { auto params = context.getParams(); context.getResults().setFunc(kj::heap( params.getParamCount(), params.getBody())); return kj::READY_NOW; } kj::Promise getOperator(GetOperatorContext context) override { context.getResults().setFunc(kj::heap( context.getParams().getOp())); return kj::READY_NOW; } }; int main(int argc, const char* argv[]) { if (argc != 2) { std::cerr << "usage: " << argv[0] << " ADDRESS[:PORT]\n" "Runs the server bound to the given address/port.\n" "ADDRESS may be '*' to bind to all local addresses.\n" ":PORT may be omitted to choose a port automatically." << std::endl; return 1; } // Set up a server. capnp::EzRpcServer server(kj::heap(), argv[1]); // Write the port number to stdout, in case it was chosen automatically. auto& waitScope = server.getWaitScope(); uint port = server.getPort().wait(waitScope); if (port == 0) { // The address format "unix:/path/to/socket" opens a unix domain socket, // in which case the port will be zero. std::cout << "Listening on Unix socket..." << std::endl; } else { std::cout << "Listening on port " << port << "..." << std::endl; } // Run forever, accepting connections and handling requests. kj::NEVER_DONE.wait(waitScope); } qbs-src-2.3.1/examples/capnproto/calculator_cpp/calculator_cpp.qbs0000644000175100001770000000134514616416776025001 0ustar runnerdockerimport qbs.Host Project { CppApplication { Depends { name: "capnproto.cpp"; required: false } name: "server" condition: capnproto.cpp.present && qbs.targetPlatform === Host.platform() consoleApplication: true capnproto.cpp.useRpc: true files: [ "calculator.capnp", "calculator-server.cpp" ] } CppApplication { Depends { name: "capnproto.cpp"; required: false } name: "client" condition: capnproto.cpp.present && qbs.targetPlatform === Host.platform() consoleApplication: true capnproto.cpp.useRpc: true files: [ "calculator.capnp", "calculator-client.cpp" ] } } qbs-src-2.3.1/examples/capnproto/calculator_cpp/calculator.capnp0000644000175100001770000001105314616416776024450 0ustar runnerdocker# Copyright (c) 2013-2014 Sandstorm Development Group, Inc. and contributors # Licensed under the MIT License: # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. @0x85150b117366d14b; interface Calculator { # A "simple" mathematical calculator, callable via RPC. # # But, to show off Cap'n Proto, we add some twists: # # - You can use the result from one call as the input to the next # without a network round trip. To accomplish this, evaluate() # returns a `Value` object wrapping the actual numeric value. # This object may be used in a subsequent expression. With # promise pipelining, the Value can actually be used before # the evaluate() call that creates it returns! # # - You can define new functions, and then call them. This again # shows off pipelining, but it also gives the client the # opportunity to define a function on the client side and have # the server call back to it. # # - The basic arithmetic operators are exposed as Functions, and # you have to call getOperator() to obtain them from the server. # This again demonstrates pipelining -- using getOperator() to # get each operator and then using them in evaluate() still # only takes one network round trip. evaluate @0 (expression :Expression) -> (value :Value); # Evaluate the given expression and return the result. The # result is returned wrapped in a Value interface so that you # may pass it back to the server in a pipelined request. To # actually get the numeric value, you must call read() on the # Value -- but again, this can be pipelined so that it incurs # no additional latency. struct Expression { # A numeric expression. union { literal @0 :Float64; # A literal numeric value. previousResult @1 :Value; # A value that was (or, will be) returned by a previous # evaluate(). parameter @2 :UInt32; # A parameter to the function (only valid in function bodies; # see defFunction). call :group { # Call a function on a list of parameters. function @3 :Function; params @4 :List(Expression); } } } interface Value { # Wraps a numeric value in an RPC object. This allows the value # to be used in subsequent evaluate() requests without the client # waiting for the evaluate() that returns the Value to finish. read @0 () -> (value :Float64); # Read back the raw numeric value. } defFunction @1 (paramCount :Int32, body :Expression) -> (func :Function); # Define a function that takes `paramCount` parameters and returns the # evaluation of `body` after substituting these parameters. interface Function { # An algebraic function. Can be called directly, or can be used inside # an Expression. # # A client can create a Function that runs on the server side using # `defFunction()` or `getOperator()`. Alternatively, a client can # implement a Function on the client side and the server will call back # to it. However, a function defined on the client side will require a # network round trip whenever the server needs to call it, whereas # functions defined on the server and then passed back to it are called # locally. call @0 (params :List(Float64)) -> (value :Float64); # Call the function on the given parameters. } getOperator @2 (op :Operator) -> (func :Function); # Get a Function representing an arithmetic operator, which can then be # used in Expressions. enum Operator { add @0; subtract @1; multiply @2; divide @3; } } qbs-src-2.3.1/examples/capnproto/addressbook_cpp/0000755000175100001770000000000014616416776021443 5ustar runnerdockerqbs-src-2.3.1/examples/capnproto/addressbook_cpp/addressbook.cpp0000644000175100001770000002271114616416776024452 0ustar runnerdocker// Copyright (c) 2013-2014 Sandstorm Development Group, Inc. and contributors // Licensed under the MIT License: // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // This sample code appears in the documentation for the C++ implementation. // // If Cap'n Proto is installed, build the sample like: // capnp compile -oc++ addressbook.capnp // c++ -std=c++14 -Wall addressbook.c++ addressbook.capnp.c++ `pkg-config --cflags --libs capnp` -o addressbook // // If Cap'n Proto is not installed, but the source is located at $SRC and has been // compiled in $BUILD (often both are simply ".." from here), you can do: // $BUILD/capnp compile -I$SRC/src -o$BUILD/capnpc-c++ addressbook.capnp // c++ -std=c++14 -Wall addressbook.c++ addressbook.capnp.c++ -I$SRC/src -L$BUILD/.libs -lcapnp -lkj -o addressbook // // Run like: // ./addressbook write | ./addressbook read // Use "dwrite" and "dread" to use dynamic code instead. // TODO(test): Needs cleanup. #include "addressbook.capnp.h" #include #include #include using addressbook::Person; using addressbook::AddressBook; void writeAddressBook(int fd) { ::capnp::MallocMessageBuilder message; AddressBook::Builder addressBook = message.initRoot(); ::capnp::List::Builder people = addressBook.initPeople(2); Person::Builder alice = people[0]; alice.setId(123); alice.setName("Alice"); alice.setEmail("alice@example.com"); // Type shown for explanation purposes; normally you'd use auto. ::capnp::List::Builder alicePhones = alice.initPhones(1); alicePhones[0].setNumber("555-1212"); alicePhones[0].setType(Person::PhoneNumber::Type::MOBILE); alice.getEmployment().setSchool("MIT"); Person::Builder bob = people[1]; bob.setId(456); bob.setName("Bob"); bob.setEmail("bob@example.com"); auto bobPhones = bob.initPhones(2); bobPhones[0].setNumber("555-4567"); bobPhones[0].setType(Person::PhoneNumber::Type::HOME); bobPhones[1].setNumber("555-7654"); bobPhones[1].setType(Person::PhoneNumber::Type::WORK); bob.getEmployment().setUnemployed(); writePackedMessageToFd(fd, message); } void printAddressBook(int fd) { ::capnp::PackedFdMessageReader message(fd); AddressBook::Reader addressBook = message.getRoot(); for (Person::Reader person : addressBook.getPeople()) { std::cout << person.getName().cStr() << ": " << person.getEmail().cStr() << std::endl; for (Person::PhoneNumber::Reader phone: person.getPhones()) { const char* typeName = "UNKNOWN"; switch (phone.getType()) { case Person::PhoneNumber::Type::MOBILE: typeName = "mobile"; break; case Person::PhoneNumber::Type::HOME: typeName = "home"; break; case Person::PhoneNumber::Type::WORK: typeName = "work"; break; } std::cout << " " << typeName << " phone: " << phone.getNumber().cStr() << std::endl; } Person::Employment::Reader employment = person.getEmployment(); switch (employment.which()) { case Person::Employment::UNEMPLOYED: std::cout << " unemployed" << std::endl; break; case Person::Employment::EMPLOYER: std::cout << " employer: " << employment.getEmployer().cStr() << std::endl; break; case Person::Employment::SCHOOL: std::cout << " student at: " << employment.getSchool().cStr() << std::endl; break; case Person::Employment::SELF_EMPLOYED: std::cout << " self-employed" << std::endl; break; } } } #if !CAPNP_LITE #include "addressbook.capnp.h" #include #include #include #include #include using ::capnp::DynamicValue; using ::capnp::DynamicStruct; using ::capnp::DynamicEnum; using ::capnp::DynamicList; using ::capnp::List; using ::capnp::Schema; using ::capnp::StructSchema; using ::capnp::EnumSchema; using ::capnp::Void; using ::capnp::Text; using ::capnp::MallocMessageBuilder; using ::capnp::PackedFdMessageReader; void dynamicWriteAddressBook(int fd, StructSchema schema) { // Write a message using the dynamic API to set each // field by text name. This isn't something you'd // normally want to do; it's just for illustration. MallocMessageBuilder message; // Types shown for explanation purposes; normally you'd // use auto. DynamicStruct::Builder addressBook = message.initRoot(schema); DynamicList::Builder people = addressBook.init("people", 2).as(); DynamicStruct::Builder alice = people[0].as(); alice.set("id", 123); alice.set("name", "Alice"); alice.set("email", "alice@example.com"); auto alicePhones = alice.init("phones", 1).as(); auto phone0 = alicePhones[0].as(); phone0.set("number", "555-1212"); phone0.set("type", "mobile"); alice.get("employment").as() .set("school", "MIT"); auto bob = people[1].as(); bob.set("id", 456); bob.set("name", "Bob"); bob.set("email", "bob@example.com"); // Some magic: We can convert a dynamic sub-value back to // the native type with as()! List::Builder bobPhones = bob.init("phones", 2).as>(); bobPhones[0].setNumber("555-4567"); bobPhones[0].setType(Person::PhoneNumber::Type::HOME); bobPhones[1].setNumber("555-7654"); bobPhones[1].setType(Person::PhoneNumber::Type::WORK); bob.get("employment").as() .set("unemployed", ::capnp::VOID); writePackedMessageToFd(fd, message); } void dynamicPrintValue(DynamicValue::Reader value) { // Print an arbitrary message via the dynamic API by // iterating over the schema. Look at the handling // of STRUCT in particular. switch (value.getType()) { case DynamicValue::VOID: std::cout << ""; break; case DynamicValue::BOOL: std::cout << (value.as() ? "true" : "false"); break; case DynamicValue::INT: std::cout << value.as(); break; case DynamicValue::UINT: std::cout << value.as(); break; case DynamicValue::FLOAT: std::cout << value.as(); break; case DynamicValue::TEXT: std::cout << '\"' << value.as().cStr() << '\"'; break; case DynamicValue::LIST: { std::cout << "["; bool first = true; for (auto element: value.as()) { if (first) { first = false; } else { std::cout << ", "; } dynamicPrintValue(element); } std::cout << "]"; break; } case DynamicValue::ENUM: { auto enumValue = value.as(); KJ_IF_MAYBE(enumerant, enumValue.getEnumerant()) { std::cout << enumerant->getProto().getName().cStr(); } else { // Unknown enum value; output raw number. std::cout << enumValue.getRaw(); } break; } case DynamicValue::STRUCT: { std::cout << "("; auto structValue = value.as(); bool first = true; for (auto field: structValue.getSchema().getFields()) { if (!structValue.has(field)) continue; if (first) { first = false; } else { std::cout << ", "; } std::cout << field.getProto().getName().cStr() << " = "; dynamicPrintValue(structValue.get(field)); } std::cout << ")"; break; } default: // There are other types, we aren't handling them. std::cout << "?"; break; } } void dynamicPrintMessage(int fd, StructSchema schema) { PackedFdMessageReader message(fd); dynamicPrintValue(message.getRoot(schema)); std::cout << std::endl; } #endif // !CAPNP_LITE int main(int argc, char* argv[]) { if (argc != 2) { std::cerr << "Missing arg." << std::endl; return 1; } else if (strcmp(argv[1], "write") == 0) { writeAddressBook(1); } else if (strcmp(argv[1], "read") == 0) { printAddressBook(0); #if !CAPNP_LITE } else if (strcmp(argv[1], "dwrite") == 0) { StructSchema schema = Schema::from(); dynamicWriteAddressBook(1, schema); } else if (strcmp(argv[1], "dread") == 0) { StructSchema schema = Schema::from(); dynamicPrintMessage(0, schema); #endif } else { std::cerr << "Invalid arg: " << argv[1] << std::endl; return 1; } return 0; } qbs-src-2.3.1/examples/capnproto/addressbook_cpp/addressbook.capnp0000644000175100001770000000330014616416776024762 0ustar runnerdocker# Copyright (c) 2013-2014 Sandstorm Development Group, Inc. and contributors # Licensed under the MIT License: # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. @0x9eb32e19f86ee174; using Cxx = import "/capnp/c++.capnp"; $Cxx.namespace("addressbook"); struct Person { id @0 :UInt32; name @1 :Text; email @2 :Text; phones @3 :List(PhoneNumber); struct PhoneNumber { number @0 :Text; type @1 :Type; enum Type { mobile @0; home @1; work @2; } } employment :union { unemployed @4 :Void; employer @5 :Text; school @6 :Text; selfEmployed @7 :Void; # We assume that a person is only one of these. } } struct AddressBook { people @0 :List(Person); } qbs-src-2.3.1/examples/capnproto/addressbook_cpp/addressbook_cpp.qbs0000644000175100001770000000044614616416776025320 0ustar runnerdockerCppApplication { Depends { name: "capnproto.cpp"; required: false } condition: capnproto.cpp.present && qbs.targetPlatform === qbs.hostPlatform consoleApplication: true cpp.minimumMacosVersion: "10.8" files: [ "addressbook.capnp", "addressbook.cpp" ] } qbs-src-2.3.1/examples/exporters/0000755000175100001770000000000014616416776016327 5ustar runnerdockerqbs-src-2.3.1/examples/exporters/lib_a/0000755000175100001770000000000014616416776017375 5ustar runnerdockerqbs-src-2.3.1/examples/exporters/lib_a/lib_a.qbs0000644000175100001770000000534514616416776021161 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2024 Ivan Komissarov (abbapoh@gmail.com). ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ MyLibrary { name: "lib_a" files: ["lib_a.cpp"] Group { name: "API headers" files: ["lib_a.h"] qbs.install: true qbs.installDir: headersInstallDir } Export { Depends { name: "cpp" } cpp.dynamicLibraries: "z" cpp.libraryPaths: "/opt/local/lib" } } qbs-src-2.3.1/examples/exporters/lib_a/lib_a.h0000644000175100001770000000474414616416776020625 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2024 Ivan Komissarov (abbapoh@gmail.com). ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef LIB_A_H #define LIB_A_H const char *bla(); #endif // LIB_A_H qbs-src-2.3.1/examples/exporters/lib_a/lib_a.cpp0000644000175100001770000000474214616416776021156 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2024 Ivan Komissarov (abbapoh@gmail.com). ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "lib_a.h" const char *bla() { return "Hello World!"; } qbs-src-2.3.1/examples/exporters/lib_b/0000755000175100001770000000000014616416776017376 5ustar runnerdockerqbs-src-2.3.1/examples/exporters/lib_b/lib_b.qbs0000644000175100001770000000526614616416776021165 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2024 Ivan Komissarov (abbapoh@gmail.com). ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ MyLibrary { Depends { name: "lib_a" } name: "lib_b" files: ["lib_b.cpp"] Group { name: "API headers" files: ["lib_b.h"] qbs.install: true qbs.installDir: headersInstallDir } Export { Depends { name: 'lib_a' } } } qbs-src-2.3.1/examples/exporters/lib_b/lib_b.cpp0000644000175100001770000000501214616416776021147 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2024 Ivan Komissarov (abbapoh@gmail.com). ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "lib_b.h" #include #include int foo() { std::puts(bla()); return 2; } qbs-src-2.3.1/examples/exporters/lib_b/lib_b.h0000644000175100001770000000473414616416776020626 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2024 Ivan Komissarov (abbapoh@gmail.com). ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef LIB_B_H #define LIB_B_H int foo(); #endif // LIB_B_H qbs-src-2.3.1/examples/exporters/qbs/0000755000175100001770000000000014616416776017114 5ustar runnerdockerqbs-src-2.3.1/examples/exporters/qbs/imports/0000755000175100001770000000000014616416776020611 5ustar runnerdockerqbs-src-2.3.1/examples/exporters/qbs/imports/MyLibrary.qbs0000644000175100001770000000717414616416776023243 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2024 Ivan Komissarov (abbapoh@gmail.com). ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ import qbs.FileInfo StaticLibrary { Depends { name: 'cpp' } property string headersInstallDir: "include" Export { Depends { name: "cpp" } cpp.includePaths: [exportingProduct.sourceDirectory] prefixMapping: [{ prefix: exportingProduct.sourceDirectory, replacement: FileInfo.joinPaths(exportingProduct.qbs.installPrefix, exportingProduct.headersInstallDir) }] } install: true Depends { name: "Exporter.qbs" } Group { fileTagsFilter: "Exporter.qbs.module" qbs.install: install qbs.installDir: FileInfo.joinPaths(installDir, "qbs", "modules", product.name) } Depends { name: "Exporter.pkgconfig" } Exporter.pkgconfig.versionEntry: "1.0" Group { fileTagsFilter: ["Exporter.pkgconfig.pc"] qbs.install: install qbs.installDir: FileInfo.joinPaths(installDir, "pkgconfig") } Depends { name: "Exporter.cmake" } Group { fileTagsFilter: ["Exporter.cmake.package"] qbs.install: install qbs.installDir: FileInfo.joinPaths(installDir, "cmake", product.name) } Depends { name: 'bundle' } bundle.isBundle: false } qbs-src-2.3.1/examples/exporters/exporters.qbs0000644000175100001770000000502114616416776021067 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2024 Ivan Komissarov (abbapoh@gmail.com). ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ Project { references: [ "lib_a/lib_a.qbs", "lib_b/lib_b.qbs" ] qbsSearchPaths: "qbs" } qbs-src-2.3.1/examples/helloworld-minimal/0000755000175100001770000000000014616416776020073 5ustar runnerdockerqbs-src-2.3.1/examples/helloworld-minimal/helloworld-minimal.qbs0000644000175100001770000000472414616416776024410 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ CppApplication { name: "HelloWorld-minimal" files: "main.cpp" } qbs-src-2.3.1/examples/helloworld-minimal/main.cpp0000644000175100001770000000473714616416776021536 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include int main() { std::cout << "Hello, World!" << std::endl; } qbs-src-2.3.1/examples/rule/0000755000175100001770000000000014616416776015243 5ustar runnerdockerqbs-src-2.3.1/examples/rule/rule.qbs0000644000175100001770000000171314616416776016723 0ustar runnerdockerimport qbs.TextFile Product { type: "txt_output" Group { name: "lorem_ipsum" files: "lorem_ipsum.txt" fileTags: "txt_input" } //![1] Rule { multiplex: false inputs: ["txt_input"] Artifact { filePath: input.fileName + ".out" fileTags: ["txt_output"] } prepare: { var cmd = new JavaScriptCommand(); cmd.description = "generating" + output.fileName + " from " + input.fileName; cmd.highlight = "codegen"; cmd.sourceCode = function() { var file = new TextFile(input.filePath); var content = file.readAll(); file.close() content = content.toUpperCase(); file = new TextFile(output.filePath, TextFile.WriteOnly); file.write(content); file.close(); } return [cmd]; } } } qbs-src-2.3.1/examples/rule/lorem_ipsum.txt0000644000175100001770000000055214616416776020341 0ustar runnerdockerLorem ipsum dolor sit amet, consectetur adipiscing elit. Integer accumsan laoreet magna vitae elementum. Duis semper ex pellentesque nibh ullamcorper lacinia. Suspendisse sed diam magna. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In id maximus turpis, mattis commodo mauris. Sed bibendum accumsan leo. Nulla placerat. qbs-src-2.3.1/examples/helloworld-qt/0000755000175100001770000000000014616416776017071 5ustar runnerdockerqbs-src-2.3.1/examples/helloworld-qt/main.cpp0000644000175100001770000000512114616416776020520 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include #include int main() { QTextStream ts(stdout); ts << QCoreApplication::translate("hello", "Hello, World!\n"); ts.flush(); } qbs-src-2.3.1/examples/helloworld-qt/helloworld-qt.qbs0000644000175100001770000000471614616416776022405 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ QtApplication { name: "HelloWorld-Qt" files: "main.cpp" } qbs-src-2.3.1/examples/helloworld-complex/0000755000175100001770000000000014616416776020114 5ustar runnerdockerqbs-src-2.3.1/examples/helloworld-complex/helloworld-complex.qbs0000644000175100001770000000641414616416776024450 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ Project { property bool hasSpecialFeature: true Application { name: 'HelloWorld-Complex' Depends { name: 'cpp' } cpp.defines: ['SOMETHING'] files: [ "src/foo.h", "src/foo.cpp" ] Group { condition: project.hasSpecialFeature prefix: "src/" files: ["specialfeature.cpp", "specialfeature.h"] } Group { cpp.defines: { var defines = outer.concat([ 'HAVE_MAIN_CPP', cpp.debugInformation ? 'HAS_DEBUG' : 'HAS_RELEASE' ]); if (project.hasSpecialFeature) defines.push("HAS_SPECIAL_FEATURE"); return defines; } prefix: "src/" files: [ 'main.cpp' ] } } } qbs-src-2.3.1/examples/helloworld-complex/src/0000755000175100001770000000000014616416776020703 5ustar runnerdockerqbs-src-2.3.1/examples/helloworld-complex/src/specialfeature.cpp0000644000175100001770000000503414616416776024405 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "specialfeature.h" #include void bragAboutSpecialFeature() { std::cout << "I have a special feature!" << std::endl; } qbs-src-2.3.1/examples/helloworld-complex/src/main.cpp0000644000175100001770000000556614616416776022347 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "foo.h" #ifdef HAS_SPECIAL_FEATURE #include "specialfeature.h" #endif #include #ifndef HAVE_MAIN_CPP # error missing define HAVE_MAIN_CPP #endif #ifndef SOMETHING # error missing define SOMETHING #endif int main() { someUsefulFunction(); #if defined(HAS_DEBUG) std::puts("Hello World! (debug version)"); #elif defined(HAS_RELEASE) std::puts("Hello World! (release version)"); #endif #ifdef HAS_SPECIAL_FEATURE bragAboutSpecialFeature(); #endif } qbs-src-2.3.1/examples/helloworld-complex/src/specialfeature.h0000644000175100001770000000476114616416776024060 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef HELLO_SPECIAL_FEATURE #define HELLO_SPECIAL_FEATURE void bragAboutSpecialFeature(); #endif qbs-src-2.3.1/examples/helloworld-complex/src/foo.h0000644000175100001770000000471414616416776021645 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef FOO_H #define FOO_H int someUsefulFunction(); #endif qbs-src-2.3.1/examples/helloworld-complex/src/foo.cpp0000644000175100001770000000476714616416776022210 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef SOMETHING # error missing define SOMETHING #endif int someUsefulFunction() { return 156; } qbs-src-2.3.1/examples/examples.qbs0000644000175100001770000000465214616416776016630 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ Product { files: "**/*" } qbs-src-2.3.1/examples/pkgconfig-provider/0000755000175100001770000000000014616416776020073 5ustar runnerdockerqbs-src-2.3.1/examples/pkgconfig-provider/pkgconfig-provider.qbs0000644000175100001770000000521014616416776024377 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2021 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ //! [0] CppApplication { consoleApplication: true Depends { name: "zlib"; required: false } condition: zlib.present name: "PkgConfigProviderExample" files: "main.c" qbsModuleProviders: ["qbspkgconfig"] } //! [0] qbs-src-2.3.1/examples/pkgconfig-provider/main.c0000644000175100001770000000767514616416776021202 0ustar runnerdocker/**************************************************************************** ** ** MIT License ** Copyright (c) 2017 Aleksander Alekseev ** Permission is hereby granted, free of charge, to any person obtaining a copy ** of this software and associated documentation files (the "Software"), to deal ** in the Software without restriction, including without limitation the rights ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ** copies of the Software, and to permit persons to whom the Software is ** furnished to do so, subject to the following conditions: ** The above copyright notice and this permission notice shall be included in all ** copies or substantial portions of the Software. ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ** SOFTWARE. ** ****************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include int main(int argc, char* argv[]) { int res; if (argc < 2) { fprintf(stderr, "Usage: %s \n", argv[0]); return 1; } char* fname = argv[1]; struct stat file_stat; res = stat(fname, &file_stat); if (res == -1) { fprintf(stderr, "stat(...) failed, errno = %d\n", errno); return 1; } size_t temp_file_size = (size_t)file_stat.st_size; if (temp_file_size >= INT_MAX) { fprintf(stderr, "Error: filze_size >= INT_MAX (%d)\n", INT_MAX); return 1; } int file_size = (int)temp_file_size; int buff_size = file_size + 1; void* file_buff = malloc(buff_size); if (file_buff == NULL) { fprintf(stderr, "malloc(buff_size) failed, buff_size = %d\n", file_size); return 1; } int fid = open(fname, O_RDONLY); if (fid == -1) { fprintf(stderr, "open(...) failed, errno = %d\n", errno); free(file_buff); return 1; } if (read(fid, file_buff, file_size) != file_size) { fprintf(stderr, "read(...) failed, errno = %d\n", errno); free(file_buff); close(fid); return 1; } close(fid); uLongf compress_buff_size = compressBound(file_size); void* compress_buff = malloc(compress_buff_size); if (compress_buff == NULL) { fprintf(stderr, "malloc(compress_buff_size) failed, " "compress_buff_size = %lu\n", compress_buff_size); free(file_buff); return 1; } uLongf compressed_size = compress_buff_size; res = compress(compress_buff, &compressed_size, file_buff, file_size); if (res != Z_OK) { fprintf(stderr, "compress(...) failed, res = %d\n", res); free(compress_buff); free(file_buff); return 1; } memset(file_buff, 0, buff_size); uLongf decompressed_size = (uLongf)file_size; res = uncompress(file_buff, &decompressed_size, compress_buff, compressed_size); if (res != Z_OK) { fprintf(stderr, "uncompress(...) failed, res = %d\n", res); free(compress_buff); free(file_buff); return 1; } printf( "%s\n----------------\n" "File size: %d, compress_buff_size: %lu, compressed_size: %lu, " "decompressed_size: %lu\n", (char*)file_buff, file_size, compress_buff_size, compressed_size, decompressed_size); free(compress_buff); free(file_buff); } qbs-src-2.3.1/examples/cocoa-touch-application/0000755000175100001770000000000014616416776021001 5ustar runnerdockerqbs-src-2.3.1/examples/cocoa-touch-application/cocoa-touch-application.qbs0000644000175100001770000001054114616416776026216 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2015 Petroules Corporation. ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ CppApplication { Depends { name: "xcode"; required: false } Depends { condition: product.condition; name: "ib" } condition: qbs.hostOS.contains("macos") && xcode.present && qbs.targetPlatform.contains("ios") name: "Cocoa Touch Application" install: true bundle.identifierPrefix: "io.qbs" bundle.infoPlist: ({"UILaunchStoryboardName": "LaunchScreen"}) cpp.useObjcPrecompiledHeader: true cpp.minimumIosVersion: "9.0" cpp.automaticReferenceCounting: true cpp.frameworks: [ "UIKit", "Foundation", "CoreGraphics" ] // sample code signing settings: // codesign.enableCodeSigning: true // codesign.provisioningProfile: "my provisioning profile name" // codesign.signingIdentity: "Apple Development: My Team Name" Group { prefix: "CocoaTouchApplication/" files: [ "AppDelegate.h", "AppDelegate.m", "CocoaTouchApplication-Info.plist", "DetailViewController.h", "DetailViewController.m", "MasterViewController.h", "MasterViewController.m", "main.m" ] } Group { name: "Supporting Files" prefix: "CocoaTouchApplication/en.lproj/" files: [ "DetailViewController_iPad.xib", "DetailViewController_iPhone.xib", "MasterViewController_iPad.xib", "MasterViewController_iPhone.xib" ] } Group { id: bundle_resources files: [ "CocoaTouchApplication/LaunchScreen.storyboard", "CocoaTouchApplication/en.lproj/InfoPlist.strings" ] } bundle.resources: bundle_resources.files Group { name: "Xcode Project" files: [ "CocoaTouchApplication.xcodeproj/project.pbxproj" ] } Group { files: ["CocoaTouchApplication/CocoaTouchApplication-Prefix.pch"] fileTags: ["objc_pch_src"] } } qbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/0000755000175100001770000000000014616416776025214 5ustar runnerdockerqbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/en.lproj/0000755000175100001770000000000014616416776026743 5ustar runnerdocker././@LongLink0000644000000000000000000000015600000000000011605 Lustar rootrootqbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/en.lproj/DetailViewController_iPhone.xibqbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/en.lproj/DetailViewController_i0000644000175100001770000003517014616416776033305 0ustar runnerdocker 1536 12A269 2835 1187 624.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1919 IBNSLayoutConstraint IBProxyObject IBUILabel IBUIView com.apple.InterfaceBuilder.IBCocoaTouchPlugin PluginDependencyRecalculationVersion IBFilesOwner IBCocoaTouchFramework IBFirstResponder IBCocoaTouchFramework 274 298 {{20, 265}, {280, 18}} 3 MQA YES NO IBCocoaTouchFramework Detail view content goes here 1 MCAwIDAAA darkTextColor 1 10 1 1 4 Helvetica 14 16 {{0, 20}, {320, 548}} 3 MQA 2 IBUIScreenMetrics YES {320, 568} {568, 320} IBCocoaTouchFramework Retina 4 Full Screen 2 IBCocoaTouchFramework view 3 detailDescriptionLabel 6 0 1 10 0 10 1 0.0 1000 5 22 2 6 0 6 1 20 1000 8 29 3 5 0 5 1 20 1000 8 29 3 -1 File's Owner -2 4 7 9 11 DetailViewController com.apple.InterfaceBuilder.IBCocoaTouchPlugin UIResponder com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 0 IBCocoaTouchFramework YES 3 YES 1919 ././@LongLink0000644000000000000000000000015400000000000011603 Lustar rootrootqbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/en.lproj/MasterViewController_iPad.xibqbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/en.lproj/MasterViewController_i0000644000175100001770000002063414616416776033335 0ustar runnerdocker 1536 12A206j 2519 1172.1 613.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1856 IBProxyObject IBUITableView com.apple.InterfaceBuilder.IBCocoaTouchPlugin PluginDependencyRecalculationVersion IBFilesOwner IBIPadFramework IBFirstResponder IBIPadFramework 274 {{0, 20}, {320, 832}} 3 MQA YES 2 IBUISplitViewMasterSimulatedSizeMetrics YES {320, 852} {320, 768} IBIPadFramework Master IBUISplitViewController IBUISplitViewControllerContentSizeLocation IBUISplitViewControllerContentSizeLocationMaster IBIPadFramework YES 1 0 YES 44 22 22 view 3 dataSource 4 delegate 5 0 -1 File's Owner -2 2 MasterViewController com.apple.InterfaceBuilder.IBCocoaTouchPlugin UIResponder com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin 5 0 IBIPadFramework YES 3 YES 1856 ././@LongLink0000644000000000000000000000015400000000000011603 Lustar rootrootqbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/en.lproj/DetailViewController_iPad.xibqbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/en.lproj/DetailViewController_i0000644000175100001770000003170114616416776033301 0ustar runnerdocker 1536 12A206j 2519 1172.1 613.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1856 IBNSLayoutConstraint IBProxyObject IBUILabel IBUIView com.apple.InterfaceBuilder.IBCocoaTouchPlugin PluginDependencyRecalculationVersion IBFilesOwner IBIPadFramework IBFirstResponder IBIPadFramework 274 298 {{20, 495}, {728, 18}} 3 MQA YES NO IBIPadFramework 1 10 Detail view content goes here 1 MCAwIDAAA 1 1 4 Helvetica 14 16 {{0, 20}, {768, 1004}} NO 2 IBIPadFramework view 12 0 -1 File's Owner -2 8 10 0 10 1 0.0 1000 5 22 2 6 0 6 1 20 1000 8 29 3 5 0 5 1 20 1000 8 29 3 81 94 97 98 DetailViewController com.apple.InterfaceBuilder.IBCocoaTouchPlugin UIResponder com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin 98 0 IBIPadFramework YES 3 YES 1856 qbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/en.lproj/InfoPlist.strings0000644000175100001770000000005414616416776032264 0ustar runnerdocker/* Localized versions of Info.plist keys */ ././@LongLink0000644000000000000000000000015600000000000011605 Lustar rootrootqbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/en.lproj/MasterViewController_iPhone.xibqbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/en.lproj/MasterViewController_i0000644000175100001770000002003514616416776033330 0ustar runnerdocker 1536 12A269 2835 1187 624.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1919 IBProxyObject IBUITableView com.apple.InterfaceBuilder.IBCocoaTouchPlugin PluginDependencyRecalculationVersion IBFilesOwner IBCocoaTouchFramework IBFirstResponder IBCocoaTouchFramework 274 {{0, 20}, {320, 548}} 3 MQA YES IBUIScreenMetrics YES {320, 568} {568, 320} IBCocoaTouchFramework Retina 4 Full Screen 2 IBCocoaTouchFramework YES 1 0 YES 44 22 22 view 3 dataSource 4 delegate 5 0 -1 File's Owner -2 2 MasterViewController com.apple.InterfaceBuilder.IBCocoaTouchPlugin UIResponder com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin 5 0 IBCocoaTouchFramework YES 3 YES 1919 qbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/LaunchScreen.storyboard0000644000175100001770000001072414616416776031704 0ustar runnerdocker qbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/DetailViewController.h0000644000175100001770000000542314616416776031472 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2015 Petroules Corporation. ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #import @interface DetailViewController : UIViewController { id _detailItem; UILabel *_detailDescriptionLabel; UIPopoverController *_masterPopoverController; } @property (nonatomic, retain) id detailItem; @property (nonatomic, retain) IBOutlet UILabel *detailDescriptionLabel; @end qbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/main.m0000644000175100001770000000327614616416776026326 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2015 Petroules Corporation. ** Contact: http://www.qt.io/licensing ** ** This file is part of Qbs. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms and ** conditions see http://www.qt.io/terms-conditions. For further information ** use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, The Qt Company gives you certain additional ** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ****************************************************************************/ #import #import "AppDelegate.h" int main(int argc, char *argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } qbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/AppDelegate.h0000644000175100001770000000553514616416776027550 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2015 Petroules Corporation. ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #import @interface AppDelegate : UIResponder { UIWindow *_window; UINavigationController *_navigationController; UISplitViewController *_splitViewController; } @property (nonatomic, retain) UIWindow *window; @property (nonatomic, retain) UINavigationController *navigationController; @property (nonatomic, retain) UISplitViewController *splitViewController; @end ././@LongLink0000644000000000000000000000014600000000000011604 Lustar rootrootqbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/CocoaTouchApplication-Info.plistqbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/CocoaTouchApplication-Info.plis0000644000175100001770000000357414616416776033222 0ustar runnerdocker CFBundleDevelopmentRegion en CFBundleDisplayName ${PRODUCT_NAME} CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1.0 LSRequiresIPhoneOS UILaunchStoryboardName LaunchScreen UIRequiredDeviceCapabilities armv7 UIStatusBarTintParameters UINavigationBar Style UIBarStyleDefault Translucent UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UISupportedInterfaceOrientations~ipad UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight ././@LongLink0000644000000000000000000000014600000000000011604 Lustar rootrootqbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/CocoaTouchApplication-Prefix.pchqbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/CocoaTouchApplication-Prefix.pc0000644000175100001770000000331314616416776033206 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2015 Petroules Corporation. ** Contact: http://www.qt.io/licensing ** ** This file is part of Qbs. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms and ** conditions see http://www.qt.io/terms-conditions. For further information ** use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, The Qt Company gives you certain additional ** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ****************************************************************************/ #import #ifndef __IPHONE_4_0 #warning "This project uses features only available in iOS SDK 4.0 and later." #endif #ifdef __OBJC__ #import #import #endif qbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/DetailViewController.m0000644000175100001770000000747414616416776031507 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2015 Petroules Corporation. ** Contact: http://www.qt.io/licensing ** ** This file is part of Qbs. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms and ** conditions see http://www.qt.io/terms-conditions. For further information ** use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, The Qt Company gives you certain additional ** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ****************************************************************************/ #import "DetailViewController.h" @interface DetailViewController () @property (nonatomic, retain) UIPopoverController *masterPopoverController; - (void)configureView; @end @implementation DetailViewController @synthesize detailItem = _detailItem; @synthesize detailDescriptionLabel = _detailDescriptionLabel; @synthesize masterPopoverController = _masterPopoverController; #pragma mark - Managing the detail item - (void)setDetailItem:(id)newDetailItem { if (_detailItem != newDetailItem) { _detailItem = newDetailItem; // Update the view. [self configureView]; } if (self.masterPopoverController != nil) { [self.masterPopoverController dismissPopoverAnimated:YES]; } } - (void)configureView { // Update the user interface for the detail item. if (self.detailItem) { self.detailDescriptionLabel.text = [self.detailItem description]; } } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self configureView]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { self.title = NSLocalizedString(@"Detail", @"Detail"); } return self; } #pragma mark - Split view - (void)splitViewController:(UISplitViewController *) __unused splitController willHideViewController:(UIViewController *) __unused viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController { barButtonItem.title = NSLocalizedString(@"Master", @"Master"); [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES]; self.masterPopoverController = popoverController; } - (void)splitViewController:(UISplitViewController *) __unused splitController willShowViewController:(UIViewController *) __unused viewController invalidatingBarButtonItem:(UIBarButtonItem *) __unused barButtonItem { // Called when the view is shown again in the split view, invalidating the button and popover controller. [self.navigationItem setLeftBarButtonItem:nil animated:YES]; self.masterPopoverController = nil; } @end qbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/AppDelegate.m0000644000175100001770000001212714616416776027550 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2015 Petroules Corporation. ** Contact: http://www.qt.io/licensing ** ** This file is part of Qbs. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms and ** conditions see http://www.qt.io/terms-conditions. For further information ** use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, The Qt Company gives you certain additional ** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ****************************************************************************/ #import "AppDelegate.h" #import "MasterViewController.h" #import "DetailViewController.h" @implementation AppDelegate @synthesize window = _window; @synthesize navigationController = _navigationController; @synthesize splitViewController = _splitViewController; - (BOOL)application:(UIApplication *) __unused application didFinishLaunchingWithOptions:(NSDictionary *) __unused launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController_iPhone" bundle:nil]; self.navigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController]; self.window.rootViewController = self.navigationController; } else { MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController_iPad" bundle:nil]; UINavigationController *masterNavigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController]; DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController_iPad" bundle:nil]; UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController]; masterViewController.detailViewController = detailViewController; self.splitViewController = [[UISplitViewController alloc] init]; self.splitViewController.delegate = detailViewController; self.splitViewController.viewControllers = [NSArray arrayWithObjects:masterNavigationController, detailNavigationController, nil]; self.window.rootViewController = self.splitViewController; } [self.window makeKeyAndVisible]; return YES; } - (void)applicationWillResignActive:(UIApplication *) __unused application { // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. } - (void)applicationDidEnterBackground:(UIApplication *) __unused application { // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. } - (void)applicationWillEnterForeground:(UIApplication *) __unused application { // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. } - (void)applicationDidBecomeActive:(UIApplication *) __unused application { // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. } - (void)applicationWillTerminate:(UIApplication *) __unused application { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } @end qbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/MasterViewController.h0000644000175100001770000000531414616416776031522 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2015 Petroules Corporation. ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #import @class DetailViewController; @interface MasterViewController : UITableViewController { NSMutableArray *_objects; DetailViewController *_detailViewController; } @property (nonatomic, retain) DetailViewController *detailViewController; @end qbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication/MasterViewController.m0000644000175100001770000001354014616416776031527 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2015 Petroules Corporation. ** Contact: http://www.qt.io/licensing ** ** This file is part of Qbs. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms and ** conditions see http://www.qt.io/terms-conditions. For further information ** use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, The Qt Company gives you certain additional ** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ****************************************************************************/ #import "MasterViewController.h" #import "DetailViewController.h" @implementation MasterViewController @synthesize detailViewController = _detailViewController; - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { self.title = NSLocalizedString(@"Master", @"Master"); if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { self.clearsSelectionOnViewWillAppear = NO; self.preferredContentSize = CGSizeMake(320.0, 600.0); } } return self; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.navigationItem.leftBarButtonItem = self.editButtonItem; UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)]; self.navigationItem.rightBarButtonItem = addButton; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (void)insertNewObject:(id) __unused sender { if (!_objects) { _objects = [[NSMutableArray alloc] init]; } [_objects insertObject:[NSDate date] atIndex:0]; NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; } #pragma mark - Table View - (NSInteger)numberOfSectionsInTableView:(UITableView *) __unused tableView { return 1; } - (NSInteger)tableView:(UITableView *) __unused tableView numberOfRowsInSection:(NSInteger) __unused section { return _objects.count; } // Customize the appearance of table view cells. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; } } NSDate *object = [_objects objectAtIndex:indexPath.row]; cell.textLabel.text = [object description]; return cell; } - (BOOL)tableView:(UITableView *) __unused tableView canEditRowAtIndexPath:(NSIndexPath *) __unused indexPath { // Return NO if you do not want the specified item to be editable. return YES; } - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { [_objects removeObjectAtIndex:indexPath.row]; [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; } else if (editingStyle == UITableViewCellEditingStyleInsert) { // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view. } } /* // Override to support rearranging the table view. - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { } */ /* // Override to support conditional rearranging of the table view. - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { // Return NO if you do not want the item to be re-orderable. return YES; } */ - (void)tableView:(UITableView *) __unused tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSDate *object = [_objects objectAtIndex:indexPath.row]; if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { if (!self.detailViewController) { self.detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController_iPhone" bundle:nil]; } self.detailViewController.detailItem = object; [self.navigationController pushViewController:self.detailViewController animated:YES]; } else { self.detailViewController.detailItem = object; } } @end qbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication.xcodeproj/0000755000175100001770000000000014616416776027210 5ustar runnerdockerqbs-src-2.3.1/examples/cocoa-touch-application/CocoaTouchApplication.xcodeproj/project.pbxproj0000644000175100001770000005101414616416776032265 0ustar runnerdocker// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 14E3FEAA175FB2E800C857C6 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14E3FEA9175FB2E800C857C6 /* UIKit.framework */; }; 14E3FEAC175FB2E800C857C6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14E3FEAB175FB2E800C857C6 /* Foundation.framework */; }; 14E3FEAE175FB2E800C857C6 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14E3FEAD175FB2E800C857C6 /* CoreGraphics.framework */; }; 14E3FEB4175FB2E800C857C6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 14E3FEB2175FB2E800C857C6 /* InfoPlist.strings */; }; 14E3FEB6175FB2E800C857C6 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 14E3FEB5175FB2E800C857C6 /* main.m */; }; 14E3FEBA175FB2E800C857C6 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 14E3FEB9175FB2E800C857C6 /* AppDelegate.m */; }; 14E3FEC3175FB2E800C857C6 /* MasterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 14E3FEC2175FB2E800C857C6 /* MasterViewController.m */; }; 14E3FEC6175FB2E900C857C6 /* DetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 14E3FEC5175FB2E900C857C6 /* DetailViewController.m */; }; 14E3FEC9175FB2E900C857C6 /* MasterViewController_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 14E3FEC7175FB2E900C857C6 /* MasterViewController_iPhone.xib */; }; 14E3FECC175FB2E900C857C6 /* MasterViewController_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 14E3FECA175FB2E900C857C6 /* MasterViewController_iPad.xib */; }; 14E3FECF175FB2E900C857C6 /* DetailViewController_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 14E3FECD175FB2E900C857C6 /* DetailViewController_iPhone.xib */; }; 14E3FED2175FB2E900C857C6 /* DetailViewController_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 14E3FED0175FB2E900C857C6 /* DetailViewController_iPad.xib */; }; AC83486F258674C900A9CBBB /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AC83486E258674C900A9CBBB /* LaunchScreen.storyboard */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 14E3FEA6175FB2E800C857C6 /* Cocoa Touch Application.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Cocoa Touch Application.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 14E3FEA9175FB2E800C857C6 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 14E3FEAB175FB2E800C857C6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 14E3FEAD175FB2E800C857C6 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 14E3FEB1175FB2E800C857C6 /* CocoaTouchApplication-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CocoaTouchApplication-Info.plist"; sourceTree = ""; }; 14E3FEB3175FB2E800C857C6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 14E3FEB5175FB2E800C857C6 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 14E3FEB7175FB2E800C857C6 /* CocoaTouchApplication-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CocoaTouchApplication-Prefix.pch"; sourceTree = ""; }; 14E3FEB8175FB2E800C857C6 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 14E3FEB9175FB2E800C857C6 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 14E3FEC1175FB2E800C857C6 /* MasterViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MasterViewController.h; sourceTree = ""; }; 14E3FEC2175FB2E800C857C6 /* MasterViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MasterViewController.m; sourceTree = ""; }; 14E3FEC4175FB2E800C857C6 /* DetailViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DetailViewController.h; sourceTree = ""; }; 14E3FEC5175FB2E900C857C6 /* DetailViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DetailViewController.m; sourceTree = ""; }; 14E3FEC8175FB2E900C857C6 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MasterViewController_iPhone.xib; sourceTree = ""; }; 14E3FECB175FB2E900C857C6 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MasterViewController_iPad.xib; sourceTree = ""; }; 14E3FECE175FB2E900C857C6 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/DetailViewController_iPhone.xib; sourceTree = ""; }; 14E3FED1175FB2E900C857C6 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/DetailViewController_iPad.xib; sourceTree = ""; }; AC83486E258674C900A9CBBB /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 14E3FEA3175FB2E800C857C6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 14E3FEAA175FB2E800C857C6 /* UIKit.framework in Frameworks */, 14E3FEAC175FB2E800C857C6 /* Foundation.framework in Frameworks */, 14E3FEAE175FB2E800C857C6 /* CoreGraphics.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 14E3FE9D175FB2E800C857C6 = { isa = PBXGroup; children = ( 14E3FEAF175FB2E800C857C6 /* CocoaTouchApplication */, 14E3FEA8175FB2E800C857C6 /* Frameworks */, 14E3FEA7175FB2E800C857C6 /* Products */, ); sourceTree = ""; }; 14E3FEA7175FB2E800C857C6 /* Products */ = { isa = PBXGroup; children = ( 14E3FEA6175FB2E800C857C6 /* Cocoa Touch Application.app */, ); name = Products; sourceTree = ""; }; 14E3FEA8175FB2E800C857C6 /* Frameworks */ = { isa = PBXGroup; children = ( 14E3FEA9175FB2E800C857C6 /* UIKit.framework */, 14E3FEAB175FB2E800C857C6 /* Foundation.framework */, 14E3FEAD175FB2E800C857C6 /* CoreGraphics.framework */, ); name = Frameworks; sourceTree = ""; }; 14E3FEAF175FB2E800C857C6 /* CocoaTouchApplication */ = { isa = PBXGroup; children = ( 14E3FEB8175FB2E800C857C6 /* AppDelegate.h */, 14E3FEB9175FB2E800C857C6 /* AppDelegate.m */, 14E3FEC1175FB2E800C857C6 /* MasterViewController.h */, 14E3FEC2175FB2E800C857C6 /* MasterViewController.m */, 14E3FEC4175FB2E800C857C6 /* DetailViewController.h */, 14E3FEC5175FB2E900C857C6 /* DetailViewController.m */, 14E3FEC7175FB2E900C857C6 /* MasterViewController_iPhone.xib */, 14E3FECA175FB2E900C857C6 /* MasterViewController_iPad.xib */, 14E3FECD175FB2E900C857C6 /* DetailViewController_iPhone.xib */, 14E3FED0175FB2E900C857C6 /* DetailViewController_iPad.xib */, 14E3FEB0175FB2E800C857C6 /* Supporting Files */, AC83486E258674C900A9CBBB /* LaunchScreen.storyboard */, ); path = CocoaTouchApplication; sourceTree = ""; }; 14E3FEB0175FB2E800C857C6 /* Supporting Files */ = { isa = PBXGroup; children = ( 14E3FEB1175FB2E800C857C6 /* CocoaTouchApplication-Info.plist */, 14E3FEB2175FB2E800C857C6 /* InfoPlist.strings */, 14E3FEB5175FB2E800C857C6 /* main.m */, 14E3FEB7175FB2E800C857C6 /* CocoaTouchApplication-Prefix.pch */, ); name = "Supporting Files"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 14E3FEA5175FB2E800C857C6 /* Cocoa Touch Application */ = { isa = PBXNativeTarget; buildConfigurationList = 14E3FED5175FB2E900C857C6 /* Build configuration list for PBXNativeTarget "Cocoa Touch Application" */; buildPhases = ( 14E3FEA2175FB2E800C857C6 /* Sources */, 14E3FEA3175FB2E800C857C6 /* Frameworks */, 14E3FEA4175FB2E800C857C6 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Cocoa Touch Application"; productName = CocoaTouchApplication; productReference = 14E3FEA6175FB2E800C857C6 /* Cocoa Touch Application.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 14E3FE9E175FB2E800C857C6 /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 1220; ORGANIZATIONNAME = io.qbs; }; buildConfigurationList = 14E3FEA1175FB2E800C857C6 /* Build configuration list for PBXProject "CocoaTouchApplication" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( English, en, ); mainGroup = 14E3FE9D175FB2E800C857C6; productRefGroup = 14E3FEA7175FB2E800C857C6 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 14E3FEA5175FB2E800C857C6 /* Cocoa Touch Application */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 14E3FEA4175FB2E800C857C6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AC83486F258674C900A9CBBB /* LaunchScreen.storyboard in Resources */, 14E3FEB4175FB2E800C857C6 /* InfoPlist.strings in Resources */, 14E3FEC9175FB2E900C857C6 /* MasterViewController_iPhone.xib in Resources */, 14E3FECC175FB2E900C857C6 /* MasterViewController_iPad.xib in Resources */, 14E3FECF175FB2E900C857C6 /* DetailViewController_iPhone.xib in Resources */, 14E3FED2175FB2E900C857C6 /* DetailViewController_iPad.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 14E3FEA2175FB2E800C857C6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 14E3FEB6175FB2E800C857C6 /* main.m in Sources */, 14E3FEBA175FB2E800C857C6 /* AppDelegate.m in Sources */, 14E3FEC3175FB2E800C857C6 /* MasterViewController.m in Sources */, 14E3FEC6175FB2E900C857C6 /* DetailViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 14E3FEB2175FB2E800C857C6 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 14E3FEB3175FB2E800C857C6 /* en */, ); name = InfoPlist.strings; sourceTree = ""; }; 14E3FEC7175FB2E900C857C6 /* MasterViewController_iPhone.xib */ = { isa = PBXVariantGroup; children = ( 14E3FEC8175FB2E900C857C6 /* en */, ); name = MasterViewController_iPhone.xib; sourceTree = ""; }; 14E3FECA175FB2E900C857C6 /* MasterViewController_iPad.xib */ = { isa = PBXVariantGroup; children = ( 14E3FECB175FB2E900C857C6 /* en */, ); name = MasterViewController_iPad.xib; sourceTree = ""; }; 14E3FECD175FB2E900C857C6 /* DetailViewController_iPhone.xib */ = { isa = PBXVariantGroup; children = ( 14E3FECE175FB2E900C857C6 /* en */, ); name = DetailViewController_iPhone.xib; sourceTree = ""; }; 14E3FED0175FB2E900C857C6 /* DetailViewController_iPad.xib */ = { isa = PBXVariantGroup; children = ( 14E3FED1175FB2E900C857C6 /* en */, ); name = DetailViewController_iPad.xib; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 14E3FED3175FB2E900C857C6 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 9.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; 14E3FED4175FB2E900C857C6 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 9.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; name = Release; }; 14E3FED6175FB2E900C857C6 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "CocoaTouchApplication/CocoaTouchApplication-Prefix.pch"; INFOPLIST_FILE = "CocoaTouchApplication/CocoaTouchApplication-Info.plist"; PRODUCT_BUNDLE_IDENTIFIER = "io.qbs.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; name = Debug; }; 14E3FED7175FB2E900C857C6 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "CocoaTouchApplication/CocoaTouchApplication-Prefix.pch"; INFOPLIST_FILE = "CocoaTouchApplication/CocoaTouchApplication-Info.plist"; PRODUCT_BUNDLE_IDENTIFIER = "io.qbs.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 14E3FEA1175FB2E800C857C6 /* Build configuration list for PBXProject "CocoaTouchApplication" */ = { isa = XCConfigurationList; buildConfigurations = ( 14E3FED3175FB2E900C857C6 /* Debug */, 14E3FED4175FB2E900C857C6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 14E3FED5175FB2E900C857C6 /* Build configuration list for PBXNativeTarget "Cocoa Touch Application" */ = { isa = XCConfigurationList; buildConfigurations = ( 14E3FED6175FB2E900C857C6 /* Debug */, 14E3FED7175FB2E900C857C6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 14E3FE9E175FB2E800C857C6 /* Project object */; } qbs-src-2.3.1/examples/cocoa-application/0000755000175100001770000000000014616416776017661 5ustar runnerdockerqbs-src-2.3.1/examples/cocoa-application/CocoaApplication.xcodeproj/0000755000175100001770000000000014616416776025065 5ustar runnerdockerqbs-src-2.3.1/examples/cocoa-application/CocoaApplication.xcodeproj/project.pbxproj0000644000175100001770000003450714616416776030152 0ustar runnerdocker// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 14ABF7A71717761200140DA2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14ABF7A61717761200140DA2 /* Cocoa.framework */; }; 14ABF7B11717761200140DA2 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 14ABF7AF1717761200140DA2 /* InfoPlist.strings */; }; 14ABF7B31717761200140DA2 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 14ABF7B21717761200140DA2 /* main.m */; }; 14ABF7B71717761200140DA2 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 14ABF7B51717761200140DA2 /* Credits.rtf */; }; 14ABF7BA1717761200140DA2 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 14ABF7B91717761200140DA2 /* AppDelegate.m */; }; 14ABF7BD1717761300140DA2 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 14ABF7BB1717761300140DA2 /* MainMenu.xib */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 14ABF7A31717761200140DA2 /* Cocoa Application.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Cocoa Application.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 14ABF7A61717761200140DA2 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; 14ABF7A91717761200140DA2 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; 14ABF7AA1717761200140DA2 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; 14ABF7AB1717761200140DA2 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 14ABF7AE1717761200140DA2 /* CocoaApplication-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CocoaApplication-Info.plist"; sourceTree = ""; }; 14ABF7B01717761200140DA2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 14ABF7B21717761200140DA2 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 14ABF7B41717761200140DA2 /* CocoaApplication-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CocoaApplication-Prefix.pch"; sourceTree = ""; }; 14ABF7B61717761200140DA2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; 14ABF7B81717761200140DA2 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 14ABF7B91717761200140DA2 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 14ABF7BC1717761300140DA2 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 14ABF7A01717761200140DA2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 14ABF7A71717761200140DA2 /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 14ABF79A1717761200140DA2 = { isa = PBXGroup; children = ( 14ABF7AC1717761200140DA2 /* CocoaApplication */, 14ABF7A51717761200140DA2 /* Frameworks */, 14ABF7A41717761200140DA2 /* Products */, ); sourceTree = ""; }; 14ABF7A41717761200140DA2 /* Products */ = { isa = PBXGroup; children = ( 14ABF7A31717761200140DA2 /* Cocoa Application.app */, ); name = Products; sourceTree = ""; }; 14ABF7A51717761200140DA2 /* Frameworks */ = { isa = PBXGroup; children = ( 14ABF7A61717761200140DA2 /* Cocoa.framework */, 14ABF7A81717761200140DA2 /* Other Frameworks */, ); name = Frameworks; sourceTree = ""; }; 14ABF7A81717761200140DA2 /* Other Frameworks */ = { isa = PBXGroup; children = ( 14ABF7A91717761200140DA2 /* AppKit.framework */, 14ABF7AA1717761200140DA2 /* CoreData.framework */, 14ABF7AB1717761200140DA2 /* Foundation.framework */, ); name = "Other Frameworks"; sourceTree = ""; }; 14ABF7AC1717761200140DA2 /* CocoaApplication */ = { isa = PBXGroup; children = ( 14ABF7B81717761200140DA2 /* AppDelegate.h */, 14ABF7B91717761200140DA2 /* AppDelegate.m */, 14ABF7BB1717761300140DA2 /* MainMenu.xib */, 14ABF7AD1717761200140DA2 /* Supporting Files */, ); path = CocoaApplication; sourceTree = ""; }; 14ABF7AD1717761200140DA2 /* Supporting Files */ = { isa = PBXGroup; children = ( 14ABF7AE1717761200140DA2 /* CocoaApplication-Info.plist */, 14ABF7AF1717761200140DA2 /* InfoPlist.strings */, 14ABF7B21717761200140DA2 /* main.m */, 14ABF7B41717761200140DA2 /* CocoaApplication-Prefix.pch */, 14ABF7B51717761200140DA2 /* Credits.rtf */, ); name = "Supporting Files"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 14ABF7A21717761200140DA2 /* Cocoa Application */ = { isa = PBXNativeTarget; buildConfigurationList = 14ABF7C01717761300140DA2 /* Build configuration list for PBXNativeTarget "Cocoa Application" */; buildPhases = ( 14ABF79F1717761200140DA2 /* Sources */, 14ABF7A01717761200140DA2 /* Frameworks */, 14ABF7A11717761200140DA2 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "Cocoa Application"; productName = CocoaApplication; productReference = 14ABF7A31717761200140DA2 /* Cocoa Application.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 14ABF79B1717761200140DA2 /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0460; ORGANIZATIONNAME = "Petroules Corporation"; }; buildConfigurationList = 14ABF79E1717761200140DA2 /* Build configuration list for PBXProject "CocoaApplication" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = 14ABF79A1717761200140DA2; productRefGroup = 14ABF7A41717761200140DA2 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 14ABF7A21717761200140DA2 /* Cocoa Application */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 14ABF7A11717761200140DA2 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 14ABF7B11717761200140DA2 /* InfoPlist.strings in Resources */, 14ABF7B71717761200140DA2 /* Credits.rtf in Resources */, 14ABF7BD1717761300140DA2 /* MainMenu.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 14ABF79F1717761200140DA2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 14ABF7B31717761200140DA2 /* main.m in Sources */, 14ABF7BA1717761200140DA2 /* AppDelegate.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 14ABF7AF1717761200140DA2 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 14ABF7B01717761200140DA2 /* en */, ); name = InfoPlist.strings; sourceTree = ""; }; 14ABF7B51717761200140DA2 /* Credits.rtf */ = { isa = PBXVariantGroup; children = ( 14ABF7B61717761200140DA2 /* en */, ); name = Credits.rtf; sourceTree = ""; }; 14ABF7BB1717761300140DA2 /* MainMenu.xib */ = { isa = PBXVariantGroup; children = ( 14ABF7BC1717761300140DA2 /* en */, ); name = MainMenu.xib; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 14ABF7BE1717761300140DA2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.8; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; }; name = Debug; }; 14ABF7BF1717761300140DA2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.8; SDKROOT = macosx; }; name = Release; }; 14ABF7C11717761300140DA2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "CocoaApplication/CocoaApplication-Prefix.pch"; INFOPLIST_FILE = "CocoaApplication/CocoaApplication-Info.plist"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; name = Debug; }; 14ABF7C21717761300140DA2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "CocoaApplication/CocoaApplication-Prefix.pch"; INFOPLIST_FILE = "CocoaApplication/CocoaApplication-Info.plist"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 14ABF79E1717761200140DA2 /* Build configuration list for PBXProject "CocoaApplication" */ = { isa = XCConfigurationList; buildConfigurations = ( 14ABF7BE1717761300140DA2 /* Debug */, 14ABF7BF1717761300140DA2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 14ABF7C01717761300140DA2 /* Build configuration list for PBXNativeTarget "Cocoa Application" */ = { isa = XCConfigurationList; buildConfigurations = ( 14ABF7C11717761300140DA2 /* Debug */, 14ABF7C21717761300140DA2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 14ABF79B1717761200140DA2 /* Project object */; } qbs-src-2.3.1/examples/cocoa-application/app.qbs0000644000175100001770000000745214616416776021160 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ import qbs.Utilities CppApplication { Depends { condition: product.condition; name: "ib" } condition: qbs.targetOS.contains("macos") name: "Cocoa Application" cpp.useObjcPrecompiledHeader: true cpp.minimumMacosVersion: "10.8" cpp.frameworks: ["Cocoa"] Group { prefix: "CocoaApplication/" files: [ "AppDelegate.h", "AppDelegate.m", "CocoaApplication-Info.plist", "CocoaApplication.xcassets", "main.m" ] } Group { name: "Supporting Files" prefix: "CocoaApplication/en.lproj/" files: [ "Credits.rtf", "InfoPlist.strings", "MainMenu.xib" ] } Group { name: "Xcode Project" files: [ "CocoaApplication.xcodeproj/project.pbxproj" ] } Group { files: ["CocoaApplication/CocoaApplication-Prefix.pch"] fileTags: ["objc_pch_src"] } Group { fileTagsFilter: ["bundle.content"] qbs.install: true qbs.installDir: "Applications" qbs.installSourceBase: product.destinationDirectory } ib.appIconName: "AppIcon" Properties { // codesign module only present starting from 1.19 condition: Utilities.versionCompare(qbs.version, "1.19") >= 0 codesign.enableCodeSigning: true codesign.signingType: "ad-hoc" } } qbs-src-2.3.1/examples/cocoa-application/cocoa-application.qbs0000644000175100001770000000524114616416776023757 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2015 Petroules Corporation. ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ import qbs.Utilities Project { references: [ "app.qbs" ] SubProject { filePath: "dmg.qbs" Properties { condition: Utilities.versionCompare(qbs.version, "1.9") >= 0 } } } qbs-src-2.3.1/examples/cocoa-application/dmg.qbs0000644000175100001770000000655314616416776021150 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ AppleApplicationDiskImage { condition: qbs.targetOS.contains("macos") name: "Cocoa Application DMG" targetName: "cocoa-application-" + version version: "1.0" builtByDefault: false Depends { name: "Cocoa Application" } Depends { name: "ib" } files: [ "CocoaApplication/dmg.iconset", "CocoaApplication/en_US.lproj/LICENSE", ] // set to false to use a solid-color background (see dmg.backgroundColor below) property bool useImageBackground: true Group { condition: useImageBackground files: ["CocoaApplication/background*"] } dmg.backgroundColor: "#41cd52" dmg.badgeVolumeIcon: true dmg.iconPositions: [ {"x": 200, "y": 200, "path": "Cocoa Application.app"}, {"x": 400, "y": 200, "path": "Applications"} ] dmg.windowX: 420 dmg.windowY: 250 dmg.windowWidth: 600 dmg.windowHeight: 422 // this *includes* the macOS title bar height of 22 dmg.iconSize: 64 } qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/0000755000175100001770000000000014616416776023071 5ustar runnerdockerqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/en.lproj/0000755000175100001770000000000014616416776024620 5ustar runnerdockerqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/en.lproj/LICENSE0000644000175100001770000000275314616416776025634 0ustar runnerdockerCopyright (C) 2017 The Qt Company Ltd. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of The Qt Company Ltd and its Subsidiary(-ies) nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/en.lproj/Credits.rtf0000644000175100001770000000070314616416776026732 0ustar runnerdocker{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red255\green255\blue255;} \paperw9840\paperh8400 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural \f0\b\fs24 \cf0 Engineering: \b0 \ Some people\ \ \b Human Interface Design: \b0 \ Some other people\ \ \b Testing: \b0 \ Hopefully not nobody\ \ \b Documentation: \b0 \ Whoever\ \ \b With special thanks to: \b0 \ Mom\ } qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/en.lproj/MainMenu.xib0000644000175100001770000113401714616416776027044 0ustar runnerdocker 1080 11D50 2457 1138.32 568.00 com.apple.InterfaceBuilder.CocoaPlugin 2457 NSWindowTemplate NSView NSMenu NSMenuItem NSCustomObject com.apple.InterfaceBuilder.CocoaPlugin PluginDependencyRecalculationVersion NSApplication FirstResponder NSApplication AMainMenu CocoaApplication 1048576 2147483647 NSImage NSMenuCheckmark NSImage NSMenuMixedState submenuAction: CocoaApplication About CocoaApplication 2147483647 YES YES 1048576 2147483647 Preferences… , 1048576 2147483647 YES YES 1048576 2147483647 Services 1048576 2147483647 submenuAction: Services _NSServicesMenu YES YES 1048576 2147483647 Hide CocoaApplication h 1048576 2147483647 Hide Others h 1572864 2147483647 Show All 1048576 2147483647 YES YES 1048576 2147483647 Quit CocoaApplication q 1048576 2147483647 _NSAppleMenu File 1048576 2147483647 submenuAction: File New n 1048576 2147483647 Open… o 1048576 2147483647 Open Recent 1048576 2147483647 submenuAction: Open Recent Clear Menu 1048576 2147483647 _NSRecentDocumentsMenu YES YES 1048576 2147483647 Close w 1048576 2147483647 Save… s 1048576 2147483647 Revert to Saved 2147483647 YES YES 1048576 2147483647 Page Setup... P 1179648 2147483647 Print… p 1048576 2147483647 Edit 1048576 2147483647 submenuAction: Edit Undo z 1048576 2147483647 Redo Z 1179648 2147483647 YES YES 1048576 2147483647 Cut x 1048576 2147483647 Copy c 1048576 2147483647 Paste v 1048576 2147483647 Paste and Match Style V 1572864 2147483647 Delete 1048576 2147483647 Select All a 1048576 2147483647 YES YES 1048576 2147483647 Find 1048576 2147483647 submenuAction: Find Find… f 1048576 2147483647 1 Find and Replace… f 1572864 2147483647 12 Find Next g 1048576 2147483647 2 Find Previous G 1179648 2147483647 3 Use Selection for Find e 1048576 2147483647 7 Jump to Selection j 1048576 2147483647 Spelling and Grammar 1048576 2147483647 submenuAction: Spelling and Grammar Show Spelling and Grammar : 1048576 2147483647 Check Document Now ; 1048576 2147483647 YES YES 2147483647 Check Spelling While Typing 1048576 2147483647 Check Grammar With Spelling 1048576 2147483647 Correct Spelling Automatically 2147483647 Substitutions 1048576 2147483647 submenuAction: Substitutions Show Substitutions 2147483647 YES YES 2147483647 Smart Copy/Paste f 1048576 2147483647 1 Smart Quotes g 1048576 2147483647 2 Smart Dashes 2147483647 Smart Links G 1179648 2147483647 3 Text Replacement 2147483647 Transformations 2147483647 submenuAction: Transformations Make Upper Case 2147483647 Make Lower Case 2147483647 Capitalize 2147483647 Speech 1048576 2147483647 submenuAction: Speech Start Speaking 1048576 2147483647 Stop Speaking 1048576 2147483647 Format 2147483647 submenuAction: Format Font 2147483647 submenuAction: Font Show Fonts t 1048576 2147483647 Bold b 1048576 2147483647 2 Italic i 1048576 2147483647 1 Underline u 1048576 2147483647 YES YES 2147483647 Bigger + 1048576 2147483647 3 Smaller - 1048576 2147483647 4 YES YES 2147483647 Kern 2147483647 submenuAction: Kern Use Default 2147483647 Use None 2147483647 Tighten 2147483647 Loosen 2147483647 Ligatures 2147483647 submenuAction: Ligatures Use Default 2147483647 Use None 2147483647 Use All 2147483647 Baseline 2147483647 submenuAction: Baseline Use Default 2147483647 Superscript 2147483647 Subscript 2147483647 Raise 2147483647 Lower 2147483647 YES YES 2147483647 Show Colors C 1048576 2147483647 YES YES 2147483647 Copy Style c 1572864 2147483647 Paste Style v 1572864 2147483647 _NSFontMenu Text 2147483647 submenuAction: Text Align Left { 1048576 2147483647 Center | 1048576 2147483647 Justify 2147483647 Align Right } 1048576 2147483647 YES YES 2147483647 Writing Direction 2147483647 submenuAction: Writing Direction YES Paragraph 2147483647 CURlZmF1bHQ 2147483647 CUxlZnQgdG8gUmlnaHQ 2147483647 CVJpZ2h0IHRvIExlZnQ 2147483647 YES YES 2147483647 YES Selection 2147483647 CURlZmF1bHQ 2147483647 CUxlZnQgdG8gUmlnaHQ 2147483647 CVJpZ2h0IHRvIExlZnQ 2147483647 YES YES 2147483647 Show Ruler 2147483647 Copy Ruler c 1310720 2147483647 Paste Ruler v 1310720 2147483647 View 1048576 2147483647 submenuAction: View Show Toolbar t 1572864 2147483647 Customize Toolbar… 1048576 2147483647 Window 1048576 2147483647 submenuAction: Window Minimize m 1048576 2147483647 Zoom 1048576 2147483647 YES YES 1048576 2147483647 Bring All to Front 1048576 2147483647 _NSWindowsMenu Help 2147483647 submenuAction: Help CocoaApplication Help ? 1048576 2147483647 _NSHelpMenu _NSMainMenu 15 2 {{335, 390}, {480, 360}} 1954021376 CocoaApplication NSWindow 256 {480, 360} {{0, 0}, {2560, 1418}} {10000000000000, 10000000000000} YES AppDelegate NSFontManager terminate: 449 orderFrontStandardAboutPanel: 142 delegate 495 performMiniaturize: 37 arrangeInFront: 39 print: 86 runPageLayout: 87 clearRecentDocuments: 127 performClose: 193 toggleContinuousSpellChecking: 222 undo: 223 copy: 224 checkSpelling: 225 paste: 226 stopSpeaking: 227 cut: 228 showGuessPanel: 230 redo: 231 selectAll: 232 startSpeaking: 233 delete: 235 performZoom: 240 performFindPanelAction: 241 centerSelectionInVisibleArea: 245 toggleGrammarChecking: 347 toggleSmartInsertDelete: 355 toggleAutomaticQuoteSubstitution: 356 toggleAutomaticLinkDetection: 357 saveDocument: 362 revertDocumentToSaved: 364 runToolbarCustomizationPalette: 365 toggleToolbarShown: 366 hide: 367 hideOtherApplications: 368 unhideAllApplications: 370 newDocument: 373 openDocument: 374 raiseBaseline: 426 lowerBaseline: 427 copyFont: 428 subscript: 429 superscript: 430 tightenKerning: 431 underline: 432 orderFrontColorPanel: 433 useAllLigatures: 434 loosenKerning: 435 pasteFont: 436 unscript: 437 useStandardKerning: 438 useStandardLigatures: 439 turnOffLigatures: 440 turnOffKerning: 441 toggleAutomaticSpellingCorrection: 456 orderFrontSubstitutionsPanel: 458 toggleAutomaticDashSubstitution: 461 toggleAutomaticTextReplacement: 463 uppercaseWord: 464 capitalizeWord: 467 lowercaseWord: 468 pasteAsPlainText: 486 performFindPanelAction: 487 performFindPanelAction: 488 performFindPanelAction: 489 showHelp: 493 alignCenter: 518 pasteRuler: 519 toggleRuler: 520 alignRight: 521 copyRuler: 522 alignJustified: 523 alignLeft: 524 makeBaseWritingDirectionNatural: 525 makeBaseWritingDirectionLeftToRight: 526 makeBaseWritingDirectionRightToLeft: 527 makeTextWritingDirectionNatural: 528 makeTextWritingDirectionLeftToRight: 529 makeTextWritingDirectionRightToLeft: 530 performFindPanelAction: 535 addFontTrait: 421 addFontTrait: 422 modifyFont: 423 orderFrontFontPanel: 424 modifyFont: 425 window 532 0 -2 File's Owner -1 First Responder -3 Application 29 19 56 217 83 81 75 78 72 82 124 77 73 79 112 74 125 126 205 202 198 207 214 199 203 197 206 215 218 216 200 219 201 204 220 213 210 221 208 209 57 58 134 150 136 144 129 143 236 131 149 145 130 24 92 5 239 23 295 296 297 298 211 212 195 196 346 348 349 350 351 354 371 372 375 376 377 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 450 451 452 453 454 457 459 460 462 465 466 485 490 491 492 494 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 534 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{380, 496}, {480, 360}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin 535 ABCardController NSObject id id id id id id id addCardViewField: id copy: id cut: id doDelete: id find: id paste: id saveChanges: id ABCardView NSButton NSManagedObjectContext NSSearchField NSTextField NSWindow mCardView ABCardView mEditButton NSButton mManagedObjectContext NSManagedObjectContext mSearchField NSSearchField mStatusTextField NSTextField mWindow NSWindow IBProjectSource ./Classes/ABCardController.h ABCardView NSView id id commitAndSave: id statusImageClicked: id NSObjectController NSImageView NSView ABNameFrameView NSView NSImage ABImageView mBindingsController NSObjectController mBuddyStatusImage NSImageView mHeaderView NSView mNameView ABNameFrameView mNextKeyView NSView mUserImage NSImage mUserImageView ABImageView IBProjectSource ./Classes/ABCardView.h ABImageView NSImageView id id id id copy: id cut: id delete: id paste: id IBProjectSource ./Classes/ABImageView.h DVTBorderedView DVTLayoutView_ML contentView NSView contentView contentView NSView IBProjectSource ./Classes/DVTBorderedView.h DVTDelayedMenuButton NSButton IBProjectSource ./Classes/DVTDelayedMenuButton.h DVTGradientImageButton NSButton IBProjectSource ./Classes/DVTGradientImageButton.h DVTImageAndTextCell NSTextFieldCell IBProjectSource ./Classes/DVTImageAndTextCell.h DVTImageAndTextColumn NSTableColumn IBProjectSource ./Classes/DVTImageAndTextColumn.h DVTLayoutView_ML NSView IBProjectSource ./Classes/DVTLayoutView_ML.h DVTOutlineView NSOutlineView IBProjectSource ./Classes/DVTOutlineView.h DVTSplitView NSSplitView IBProjectSource ./Classes/DVTSplitView.h DVTStackView_ML DVTLayoutView_ML IBProjectSource ./Classes/DVTStackView_ML.h DVTTableView NSTableView IBProjectSource ./Classes/DVTTableView.h DVTViewController NSViewController IBProjectSource ./Classes/DVTViewController.h HFController NSObject selectAll: id selectAll: selectAll: id IBProjectSource ./Classes/HFController.h HFRepresenterTextView NSView selectAll: id selectAll: selectAll: id IBProjectSource ./Classes/HFRepresenterTextView.h IBEditor NSObject id id id id id changeFont: id performCopy: id performCut: id selectAll: id sizeSelectionToFit: id IBProjectSource ./Classes/IBEditor.h IDECapsuleListView DVTStackView_ML dataSource id dataSource dataSource id IBProjectSource ./Classes/IDECapsuleListView.h IDEDMArrayController NSArrayController IBProjectSource ./Classes/IDEDMArrayController.h IDEDMEditor IDEEditor DVTBorderedView NSView IDEDMEditorSourceListController DVTSplitView bottomToolbarBorderView DVTBorderedView sourceListSplitViewPane NSView sourceListViewController IDEDMEditorSourceListController splitView DVTSplitView IBProjectSource ./Classes/IDEDMEditor.h IDEDMEditorController IDEViewController IBProjectSource ./Classes/IDEDMEditorController.h IDEDMEditorSourceListController IDEDMEditorController DVTBorderedView IDEDMEditor DVTImageAndTextColumn DVTOutlineView NSTreeController borderedView DVTBorderedView parentEditor IDEDMEditor primaryColumn DVTImageAndTextColumn sourceListOutlineView DVTOutlineView sourceListTreeController NSTreeController IBProjectSource ./Classes/IDEDMEditorSourceListController.h IDEDMHighlightImageAndTextCell DVTImageAndTextCell IBProjectSource ./Classes/IDEDMHighlightImageAndTextCell.h IDEDataModelBrowserEditor IDEDMEditorController IDEDataModelPropertiesTableController IDECapsuleListView NSArrayController IDEDataModelPropertiesTableController IDEDataModelEntityContentsEditor IDEDataModelPropertiesTableController attributesTableViewController IDEDataModelPropertiesTableController capsuleView IDECapsuleListView entityArrayController NSArrayController fetchedPropertiesTableViewController IDEDataModelPropertiesTableController parentEditor IDEDataModelEntityContentsEditor relationshipsTableViewController IDEDataModelPropertiesTableController IBProjectSource ./Classes/IDEDataModelBrowserEditor.h IDEDataModelConfigurationEditor IDEDMEditorController IDECapsuleListView IDEDataModelEditor IDEDataModelConfigurationTableController capsuleListView IDECapsuleListView parentEditor IDEDataModelEditor tableController IDEDataModelConfigurationTableController IBProjectSource ./Classes/IDEDataModelConfigurationEditor.h IDEDataModelConfigurationTableController IDEDMEditorController NSArrayController NSArrayController IDEDataModelConfigurationEditor XDTableView configurationsArrayController NSArrayController entitiesArrayController NSArrayController parentEditor IDEDataModelConfigurationEditor tableView XDTableView IBProjectSource ./Classes/IDEDataModelConfigurationTableController.h IDEDataModelDiagramEditor IDEDMEditorController XDDiagramView IDEDataModelEntityContentsEditor diagramView XDDiagramView parentEditor IDEDataModelEntityContentsEditor IBProjectSource ./Classes/IDEDataModelDiagramEditor.h IDEDataModelEditor IDEDMEditor DVTDelayedMenuButton DVTDelayedMenuButton NSSegmentedControl IDEDataModelConfigurationEditor IDEDataModelEntityContentsEditor IDEDataModelFetchRequestEditor NSSegmentedControl NSTabView addEntityButton DVTDelayedMenuButton addPropertyButton DVTDelayedMenuButton browserDiagramSegmentControl NSSegmentedControl configurationViewController IDEDataModelConfigurationEditor entityContentsViewController IDEDataModelEntityContentsEditor fetchRequestViewController IDEDataModelFetchRequestEditor hierarchySegmentControl NSSegmentedControl tabView NSTabView IBProjectSource ./Classes/IDEDataModelEditor.h IDEDataModelEntityContentsEditor IDEDMEditorController IDEDataModelBrowserEditor IDEDataModelDiagramEditor IDEDataModelEditor NSTabView browserViewController IDEDataModelBrowserEditor diagramViewController IDEDataModelDiagramEditor parentEditor IDEDataModelEditor tabView NSTabView IBProjectSource ./Classes/IDEDataModelEntityContentsEditor.h IDEDataModelFetchRequestEditor IDEDMEditorController NSArrayController IDEDataModelEditor IDECapsuleListView entityController NSArrayController parentEditor IDEDataModelEditor tableView IDECapsuleListView IBProjectSource ./Classes/IDEDataModelFetchRequestEditor.h IDEDataModelPropertiesTableController IDEDMEditorController IDEDMArrayController NSTableColumn NSArrayController IDEDataModelBrowserEditor IDEDMHighlightImageAndTextCell XDTableView arrayController IDEDMArrayController entitiesColumn NSTableColumn entityArrayController NSArrayController parentEditor IDEDataModelBrowserEditor propertyNameAndImageCell IDEDMHighlightImageAndTextCell tableView XDTableView IBProjectSource ./Classes/IDEDataModelPropertiesTableController.h IDEDocDownloadsTableViewController NSObject NSButtonCell DVTTableView IDEDocViewingPrefPaneController _downloadButtonCell NSButtonCell _tableView DVTTableView prefPaneController IDEDocViewingPrefPaneController IBProjectSource ./Classes/IDEDocDownloadsTableViewController.h IDEDocSetOutlineView NSOutlineView IBProjectSource ./Classes/IDEDocSetOutlineView.h IDEDocSetOutlineViewController NSObject id id id id id getDocSetAction: id showProblemInfoForUpdate: id subscribeToPublisherAction: id unsubscribeFromPublisher: id updateDocSetAction: id docSetOutlineView IDEDocSetOutlineView docSetOutlineView docSetOutlineView IDEDocSetOutlineView IBProjectSource ./Classes/IDEDocSetOutlineViewController.h IDEDocViewingPrefPaneController IDEViewController id id id id id id id id id id id addSubscription: id checkForAndInstallUpdatesNow: id deleteDocSet: id downloadAction: id minimumFontSizeComboBoxAction: id minimumFontSizeEnabledAction: id showHelp: id showSubscriptionSheet: id subscriptionCancelAction: id toggleAutoCheckForAndInstallUpdates: id toggleDocSetInfo: id DVTGradientImageButton DVTGradientImageButton DVTGradientImageButton NSSplitView NSView NSView DVTBorderedView DVTBorderedView NSButton NSTextView IDEDocSetOutlineViewController IDEDocDownloadsTableViewController NSComboBox NSTextField NSButton NSTextField NSWindow NSButton _addButton DVTGradientImageButton _deleteButton DVTGradientImageButton _showInfoAreaButton DVTGradientImageButton _splitView NSSplitView _splitViewDocSetInfoSubview NSView _splitViewDocSetsListSubview NSView borderedViewAroundSplitView DVTBorderedView borderedViewBelowTable DVTBorderedView checkAndInstallNowButton NSButton docSetInfoTextView NSTextView docSetOutlineViewController IDEDocSetOutlineViewController downloadsTableViewController IDEDocDownloadsTableViewController minimumFontSizeControl NSComboBox noUpdatesAvailableMessage NSTextField showInfoButton NSButton subscriptionTextField NSTextField subscriptionWindow NSWindow validateAddSubscriptionButton NSButton IBProjectSource ./Classes/IDEDocViewingPrefPaneController.h IDEEditor IDEViewController IBProjectSource ./Classes/IDEEditor.h IDEViewController DVTViewController IBProjectSource ./Classes/IDEViewController.h IKImageView id id id id copy: id crop: id cut: id paste: id IBProjectSource ./Classes/IKImageView.h NSDocument id id id id id id printDocument: id revertDocumentToSaved: id runPageLayout: id saveDocument: id saveDocumentAs: id saveDocumentTo: id IBProjectSource ./Classes/NSDocument.h NSResponder _insertFindPattern: id _insertFindPattern: _insertFindPattern: id IBProjectSource ./Classes/NSResponder.h QLPreviewBubble NSObject id id hide: id show: id parentWindow NSWindow parentWindow parentWindow NSWindow IBProjectSource ./Classes/QLPreviewBubble.h QTMovieView id id id id id showAll: id showCustomButton: id toggleLoops: id zoomIn: id zoomOut: id IBProjectSource ./Classes/QTMovieView.h WebView id id id id reloadFromOrigin: id resetPageZoom: id zoomPageIn: id zoomPageOut: id IBProjectSource ./Classes/WebView.h XDDiagramView NSView id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id _graphLayouterMenuItemAction: id _zoomPopUpButtonAction: id alignBottomEdges: id alignCentersHorizontallyInContainer: id alignCentersVerticallyInContainer: id alignHorizontalCenters: id alignLeftEdges: id alignRightEdges: id alignTopEdges: id alignVerticalCenters: id bringToFront: id collapseAllCompartments: id copy: id cut: id delete: id deleteBackward: id deleteForward: id deselectAll: id diagramZoomIn: id diagramZoomOut: id expandAllCompartments: id flipHorizontally: id flipVertically: id layoutGraphicsConcentrically: id layoutGraphicsHierarchically: id lock: id makeSameHeight: id makeSameWidth: id moveDown: id moveDownAndModifySelection: id moveLeft: id moveLeftAndModifySelection: id moveRight: id moveRightAndModifySelection: id moveUp: id moveUpAndModifySelection: id paste: id rollDownAllCompartments: id rollUpAllCompartments: id selectAll: id sendToBack: id sizeToFit: id toggleGridShown: id toggleHiddenGraphicsShown: id togglePageBreaksShown: id toggleRuler: id toggleSnapsToGrid: id unlock: id _diagramController IDEDataModelDiagramEditor _diagramController _diagramController IDEDataModelDiagramEditor IBProjectSource ./Classes/XDDiagramView.h XDTableView NSTableView showAllTableColumns: id showAllTableColumns: showAllTableColumns: id IBProjectSource ./Classes/XDTableView.h AppDelegate NSObject id id applicationShouldTerminate: id applicationWillFinishLaunching: id IBProjectSource ./Classes/AppDelegate.h 0 IBCocoaFramework YES 3 {11, 11} {10, 3} YES qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/en.lproj/InfoPlist.strings0000644000175100001770000000005414616416776030141 0ustar runnerdocker/* Localized versions of Info.plist keys */ qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/background.png0000644000175100001770000025114314616416776025724 0ustar runnerdocker‰PNG  IHDRXr5˜sRGB®Îé pHYs  šœ@IDATxìÝÙ²eÉqèª:Y™UA#kQˆ¥~Ž6I$E }§ ™å….ô‚2ÓcÈÐ@¡2kjÿþXÿ>+“$ª/šHÌubòðð˜Üÿ{íÿëÿüïß?==}ôÝwß}T÷Í·ß~ôôÉ'}ÿý÷}7ð'ó|;éè>ûì³Gøã?NZóñúúë¯?úèã>úîÛï>zñé§áóÉÐÉCÏ…÷­N奩{ù÷í7ß~ôêÕ«¤ûÝ·}ÿÝ÷‘£åùʵlÃêÇ+nêS·zûH׎oçiž0É”ÓN²rõ¥}:má¾üòË^¾|ùh7ü¾ùæ›ç´/¦ý߆—þj¾òŸ ½zÉIfåð«ÌÒ^N»ß¾y3ý÷"íVŽCóÉÓ'#ë)¯œò•M?½}ó6ý§ÿë^Œ<Ú¯üÝ®ü¥Ýñßñßõ¿ëŸ®XýæÁêÿµÿµ±ˆýúÑ_þì5ãÏÐrÂ/Ôøß¯°E—…7tŸ¾À18 àøá%~¥3 ¢Fœÿñ'x†ÚbÈ'Ìÿ~øáO±Ç]ø¨²}<éʈsh_}ö*qa¼#Ç=€ð ÜÕ¶¼þ4-üäO»ðÁC^y [\÷6ÊÓÒ9¢~÷ýw½üôåxW­#ýrõzéé€$?á¡y”¹h´¥}®>ò6ÎW®ÀN>:L>úôŧiÃçŸðõfÀZÚ <‰â­WxÇÇ×ÿÑ)ÖÅ®ÿg[ÝCO¬þ_ý_;϶°E±%ã7ýC·ÿOÿâXv8(¾Nb¤ bÀ@t‘½x:´íØ–e ÛáÒ8Ÿ„¾ývvx0àËÀËËîËøvjÔÛ]%<ëjüÉÔt´ß ?;9ÒÊ3uMÐ=Ê–Ù•¦ §­Á§ü•CcÍŽ‘tý#]¸}Õ Û‘’N®{Ûõ MÀåLJ&å#åÈ8å8eñPÂóâWYžËöyB+7#ÚÊ(Ú&ÏËWü)Wƒ~S:c±ã¿ãß5l>uíúßõïä]ïÑ«ÿ¿Ï‡W}±úÿØØ’µÿlóô'ÿŸX7Õø2ÄÇŒÛÜ02ÿ-0ŽÁæ’žÐ2ò«”›WZò–@0åп}û6 ÊˆÙý¡à_Ž\÷ÝeñÀ|<­WzÓÂlèÑlM˜Ã#iÒçQÏ•ñhïI8´Âø¿zô•týöjÀ‹#à̹=Zå%ˆúU$í铳c¦oÈØEšúÑL~Û'¼Ÿ @»$>rMâÝù ÿ‹Výv°ð°Køöë·G²·ŸðÜñŸ›1h¿N,®}¹ã?³sþëÎÜå²~:óZ¾>ã7¯´»þOîú_ý¿úÿØzzâÝþg‹Ž´ðÆV£™*É*V4ÒªH…›VÿéÅó}.FœCGÑâÙ8Ÿ“îÈðÔŸô©Ç'&w‰ÈƒÿÖ„…nÒË;ñáTHâ” gË£ãÐÈû~ê)ðAS'¬Þò ÏÉ”®ŸîÎ]1È)½¶õ˜¥|íT¡iÿu·N?µ¡G–Ô5qýQ9ÕUyÒ¾ÉWN¿´­ƒ<ú®bdŸ;ZWøÔ%oǿݑ¾Úñ7»ž•9bÞun 7­þ®ÿ£výŸyó§ºmõÿêÿξ5òØÿç£8w£ÎŽÌ«ø6éÆ1øAãSªU¬Í³“S`Õ4>‡7ƒ¯ŒËï|ˆàÍWoÂÓ1Öçs!;*è²Ã2„1ö3yWoé-#Ís„ÆÉûæë\ÀÍ<Â@XÜt<^ÎùñÉñ™²×\€qw›ð X‚ņÁ½NaîÐ⯧ÀJ~Ëðïr·|}eò>»|d!cwýÔ#Ÿü”oûXüëožA¦ãCˆ ˆSr|²Ýwï¤yêÔ1 z´IüNC~~¡‚éËGÛ¨Œ0ºÿÛü¾ÍÛŽ{ýÿ]ÿÖK×û®ÿÕÿôhçÃêÿc¥ôÉÝŽJú€ìî`éJÂn÷ÝìIËû0àÀ´L``v~”ÑÒ@¬F1BOÕ¡ó7%æv²&!à/@ LêoÁññ¿ËSçnY8†O\ ê÷ä8ñ’¥ò£­±$O&Á¤ñ¹Ò©C]ÀˆÎè¥qx á†|ùúJ¸ýAöƇã߆8´^ã ŸS^¸à¬2„^yÊh¶Ÿ”ÑÖÆñécð“ٹƩ þòñßñßñßõ¿ëŸ‚XýÙ¹ÕÿÏ6„;ÁfäÔhíìôï²ÿO?þ«Ÿ¿¶¨NïÅpÛ5RÚ¡ Œ¸f¨kø{„6p›éÕ°'áúS0†gÀÀ|›0ßÎËÝMqîeÕ‘ú.ʾïäGÎÙÅÊ7‡Ð sÊOº¶¡/ϔіqiû”‰?qeåMiß{:¢ËÎ9‡¶å„• @_?ˆ“K^Úznvþ€,;[dAÛúÔù>ïìÒMzûåÎ/BÌŸæiMǪý‚È-G„©câv¬Ðqiû„Ñíøïø›]#SæMæËøæ.·ë׿yáGÇT%áú³úÿ¬§Õÿ–ýúÑ, „2»ŒlŒð$4=Šu´.pÅ$<´þMÀßÄrð²è.¾Œ·0E­LDÅaÃ38B£ñMý¡8¯ß»_iC¢;HÝݺ·§õÛíâÜå.àAÛúƒöµß\—ÙÃwø£Ç‹ U0ÚÏ=â—!B£=¥ÏbŸ“~wm—:ÂdŠ»èíhq¥KdþTv¼[V^Û,LÙå^×ð,ïGýÃȺ÷—2©ÇPÏ¿´Mxèvüwüg"X™»þwýG7]:”^YýÖÆêÿÏþ¿pôõÑÑ fAe j è¤ÕøÖx…Zä×ÎÊ)º¾¥¼<ºëƒW úiÆ„î"÷ èë·_ŸOÈSf,}¨ò­_¸NZã|9 ß&ï*x(çHXô>__äNØÐU6õ åz,w—ÃÅVòr‡j:“Ø×Ž>êVgzi}MCÛ ­áT¨NåÇ¿Ëð½úæi;ж}Ò#ŸÄ‘»åøò¸ŒùøOÛµœÀŽÿŽ&Æ®ÿ]ÿ&³>¡Wª7¢WèBŠnôÆêÿóÅ&ý³úÿÌ“µÿïÚÿTª‰ìJ0ÈŒîm5lÅ K°È.×]©Æ›÷0ìŽ×†þŠcü•á¤áÙ00’o¹½œ‰;Çs=Â*0)] ÌŸ‚ ~]”@#—_iï@EmðrŒ(mgîTM¯äîÒðJ²dçkÚ„–Ì\Úw—,ä@+½òå>â«ÿš.©ýÀ¼CƒGù ×=ÊÝÚ}Ïk>?Ow ¥åø]u{ÿßñOíøf¸æ¿ë¢s³óm×ÿ®ÿΓ̉KOU_ù )ŒÆZáÕÿG—ßûmõÿÙÔø£³ÿä.viz)_š=;(]@Òcžg! Á;庘(gÀÀ»÷6z'_‹Î$ëñ[Ží®…‰)ir­;ò Àñ.«ï¾yþF#yž¾¬4‹zÊwG©|:±ËS>yÃ{|ùýÖceÌÚ0¨¼¡yÐNùÔ=<†€Ó¦Ô;¼êr!ý’±uל¼ã)Ó¼,Mý2õÉAË2>:ù9m'£§®wJ·ãŸžÍ8íøŸõÓ¹R?kb"»þ}(Ýõßy±úÿ\‰`?¢×Wÿ³;læ‡lÿ_hª‡YŸòÂó³ÆñÑ{ ¦Âÿ2îQÐC/-€gÊ™”­£á‚ Ò¿_¿ô:ßx©“ÞQoø XË›­'>ÛXI«qJÙ)ïRpAÜÅâÑõœÞ|0?ña¢üÝÝejÿðõQiÕÍ5_ú©cxÍÿ¤_ct(Ïßòæ÷‘“ò;þÓgž¶Ovü}pšu¹ë×?wéöÕÿlVTmt'ý¹úÿÜþÿèú±gÆ<ÚºÔúw0PÃ]C^…zâP¡·°“ ÷ÎÓã(n,;ÞŒOÊø„¤àݺ³Ã5ùèÍØÊa!+çá*sýòíYÓù}!h¾f mŒ Ð%¯ò§=Öðj8„󎟉9=t@œz'3e[7>÷rê5á¼$0À&G°¹òøÊ‘ëïsiïUgî]ò‘ƒL<øu;þvbwü;:OëwÎÈ7¿¸³Þgí]€êÄwýë‡]ÿ«ÿ­™Õÿ¦ýþ-BGU£@‚òdˆÝ?¢\«H¥UÙ&mâ_ ˜<”¥zÑGŽÁð”€5>0„&»Lè¯O®udwi¤‚ô•(ä W^à@º¸ºÑ*S÷hÓ•¦¬üòÎ%»áS ¡ ײ|ôNûìÂÝÓð!ǧ̤kC¾ÍxñÒ'0ºò§Pʩ˃Ÿg¤ÈÅÿS÷1hxq凾}-ý›kíå§/?å3Ü#ÐU—£Ê©cÇÿ€çÿ]ÿÖœõÄñéþ}­ïú_ý¿úíÿ]'ÜíÿÓOþýŸ½¦4Çp¨áýv€ €àëîût*_Çd/0óBǯÊ)¯\žÔ”ô: ¡´&#ùÍã+ïáò:Ê-±Ã§ z_áè䓵r´î– ¯ìbµ“G^@Ù¤‹{Ä¥¸èôiR|+O;Ш€I½¥v¼ùê«ì„Z/_~:>·#ŒôÍÔSùêWîÐÜþd·@ÿL™wÚ04ʶÝ|í '?ÿÚ¦ÿÿL/óéævýïú_ý¿úíÿÙ¸¡ÿûÿôã¿þÅëÝ›ćÙýÜ<àj ¶‡¦`«ú˜çò 7Šz†œ_C¯\Zéuò8%0àF+e=¥MùÓ8¿àBØó¦¡-]ùä•ü€Ùq{1÷à HÐrøê\€¨±k׺€+®üïí’.Ìðñm~ÛÒr•ë}?¼oüÅ9åüã"§>›XyË#Ÿ]ªÉzÈ(Ÿá1å¦À£LåÙñ?óUê«ÿ]ÿ»þWÿ¯þ_ûÿûØÿDL4Ã|Œô1&Œ,£"­ÆZZ.-%W¹îîÄ¡÷oòk”ZÖý¦þì\…âƒÖÓM™(i=¥í®6ÒÔƒÎÓ´úòF‹@äû¦¡ …µO~w¯ÜÁªüï×·WÛ?˜†ÏÔ«\ðÐxÇ—4ŽNbþ&]Ý­ÿΓ.ms¤©ßmñ¹Öß¾Ö÷•³õ‡÷ðØñßñ7oÌ“Á¼2Gø÷9(m×ÿÑ1»þÞ¨^®~Ê<ÝÈuþ˜7«ÿO¬þ~¿£9r·o±K£‚X°?ûÿ‚’H£êc—¾t ÄâjÁH'.oâhä¡—o!qâø?êH*öá[ã_z¼"ÏU^¾× í@ð\RÏÐ4M3B3¾÷i “ßSÆCÖoãØîe.¦T ȼ¿"í”^z>>øáãyûæù<=vŠ>þø\>Ýìzé3`L¾·Æóå‘!²O.ióMÌéµG¿UVþÉŸö m‡K¹„ç¾=ÿOÉãe‡GÇ£õÊÆÏ /Æ-CVnÇÇßœÙõ¿ë?ú`tÆêÿÕÿlÒÚÿcÓß·ÿù-B‹%FV`œpŸ“òœOÁNæã äLçê`O-t†>  M‘áLzQá1®åjܹ̓Âs€‰»A.¸×È£+Èy”‰<‡¯dR×Zä´=ü:uÛæ³÷í·Þgu.k›»R½è ¢7WC£vEŽC§ž’ʉ6}sÉUYÂÒ¯¯ºöÏ­êG[¤¥6e'Ü>’Þr½C¦ŽöKëC׺ê7Müý4yÊNÆŽÿô ±ã¿ë×ÿ꺱zñWÿ¯ý,ò“¹ƒeB0œù&Ù€#nÒmÆXàn®Ý 8 EÆÐâ!.pAûˆ_y´)ÒzîÆünÔñpTG†Ô;<ÞwM/Mdš6pÂî`¥m' § ×z¿µ#Ü0ôW{{¤—ݨ/~2àjåñu‡ë› œÉW.}2y pÈI÷•mýÈ0ãÃáqwÒ¥½“þŒ ³ˆs ˆF;n2)Sùz|[Y’žv `õbTã9ôí“”pû¸<„{ôÇŽÿŽ¿)‘õv[?™_×\1‡Ä3‡wýïúŸyò˜×Ü0’6sfõÿꪣ6«a>÷Ç`ÿó&w "ö2À—{³(‹ÂÃÈæÛ‚“$(e:ñ`|òÉ~|Çk¾½Všú“p7ÄØ_à%õN=xôžG¸´È8eÕ…Wéùå0´œ²O&' %/tòæv$¨Âò9¾²Ò§³C¹&/ß[~¶Àå*0¥OÇÈ|:ßDߣǧ¡qçK¹»S?‡Ö7IxÐ3}6‰yhÈ©/"ËÈ“rÇŸ¾z_!VMÇË'nG§_Où¦Ÿ20«{ÇÇßœØõo5ìú¯®Yý¿úŸ^XûÿûÙÿ|‹5†bÇû¡eÆ» ‹ÁvtÆPß ;# ر)øÇKÜCQÇ¡Næ¾äqê<ã2îS×Ýá‡_ýx‡~*{ 4y=ýÖ£2dâðÆ« C¹¶·€,w¸"Ýš|ô飫¾¶KÿCãѧ&¢~m=@ÐÔºZOižòç“GZù&>}§›†tÚbg pu׋H¥mhâÔ%°ãÿè¿ÿ]ÿtÒ®ÿÕÿtÁêÿó!~í?;ù‡Ûÿ§ŸþÍŸ¿fcktc¤ôy„ïN^—Å ¸òýŠЮ‹ïWYàMÙÖyTú3` *@;ÚZOâ2ôç8ÈT^Òï®òóñ©»Óœð)Wò¬ûIŸôÅä+'-å‡0Äqêh™¼äSziêzt’ûe·Ü‘SÛ§.õöÑò<éó‘§-•÷þh¹¦O.ò<Ê ŸŽgû#íž²Séióô›4Mé¥UŽÈ²ãŸ>Ò';þ»þ­Ÿ]ÿGÑùâÓ¥GVÿÏÉÁêÿ‡Íþc¶ÿ€Å:@©5æ"§(<½ïÏØNZ ¯|—ÑçïìˆL™޽ÉqXï!pä”eè[ßÝƨã?Ö<`K˜¹GO–Ô›úO\Z]d¿h¥+ €ï—_€Á8*Wá#Jûj^JnJ°ð{…Q vð.ˆ!#ÀÖ:”-(Æ£}u—ÙhÕ‘Ê$æ¨pêˆ>ôWêÉšöOòõÁ8ᤫy€¾âu;þÏß”|ôíŽÿY?3g²dΘM»þwý?tGôÍêý±ú´Ã171+®Ã|Èöÿñ&÷Y¾‰Âìê' èäÇøgQCc4ñã_€è*?ćßä<0öñ*êÇbUÁÍeÒŽ -SYÈ¥>2ò9yÍW®ã\q ËÕ>2ÌsÞÄîH`Òü–,’‚!eðì.—ß¼ƒ¬%í¸äAç´\d¹hÎ&ݤ‚°^´ú¬my eÐ8 ÝÕhðFÏϥѫqmhß$Òü¶£Kýïçµ~~hÇßñŸÖÿÌÅûüØõÿü!k×õ~ýÕÿ«ÿÅý­mb&ûÌVBùìÿ ÕuÊ”aþxòßÂÓ)óp'Æ@3>'­@†¡¢tÞ¡PÒòÊøöàp 8±›õƒü @/ Ã3GhSàÄ´om £84ò»÷º•ÑV»†‘ïj¥vhpɃÚÄ¡ ¿ÀÕ8–Fø»‘W<ã;eî2¦.~;þzuÇ×ÿ®z!zhô·úõÿÚÿ¯²Aò»ìÿ‹ Èi?¥2X‚ѵ ¸€+\Ÿ Ö|Hj¼öXøü¹âµ0ÑãçÒ5WCþôñ¹LŠºõ5ˆæ¿˜sd§Lv­|tÁßå¼+<ê¤GF•ñjk&9ù€ ßÎ ¤Ó @òm»K–ïÁ¡ûÕ¯~õÑþÉ?É‹‚œ«;RmÁZ`É7 ½ÿÊë|º±³õbÚf'Ìý.2å™Ò@­rjSö¾Ã•>¾íd=¾æ¬iåáèïãÃ/€jƲß<Æyœ2;þ;þŸÌ<༒d×ÿ®ÿ»^]ý?ß¶Žn««ÿ5ólÛ”à³%”ÇÞpüÒþÿø¯~þZãuFAE¿åÖ´ÉLÕØ—žïQ€8qgñÇ¥ƒ'OyamÃè{ÔwJÜþNžADÏUe¸úåuO£ JÏ·CE°È8†¤mLœvÆy¯•2ÙyšºÕFFô\ûè7¿ùÍGŸþù£=}Eù Õ_è àRפãß:ø¶\y“©xÒ[ß‘óô%Pä±ÃE6yJ„×´Ìâ|m‚ÃkÀ#9Ó§ …Nùñ[Wû?i¥ÙñßñŸ)õ˜/gNîú·Nvý¯þ·Vÿ¯ý§#9öòq‹’Èk(q1Ú“VÇÐÆ€Ï$VX< %¦üø;MŒóeÜC;̤ÝyKo^€š«tu¡™8š¦ác·Éº€‰«yùÆ Ñ.ú08†e/ÞÉsÔ‡?z`È‘¦ôÖcѤ-SR8´dоùêM^ÇðòÕË€0ÀK¾W4™ŸÛŒ_Ûžz®ß@Ä» S™ôúȉ{åØôè»IǧeÂ3@Jß@ª®pfÊ¥ŽÛ7oÞ„¯?åW™vüwü}Pâ:'™?抹(]x×ÿ®ÿê·ó‘nõ¿¦«ÿŸu=1 ã]R›“¹3z…ßð±Ylس­«þ9síŸý²ƒÅ {î_ŸÍ̧¡)õMª»*œ£«vÒô^¾I¨c•á»h­LALÊ\Š^@R䚸2©ã,qu9ÒóƠédª|xW¾dëS:ùžÔ{G¼82–?0BK6èÅ€3i>Á~6;ZŽÿ1êƒÊ¦\ ¾Ž sd8åÄÅÖ§N}PGæî ã5B“ð*+,¿4M“Þvò¹Ô5,ÄSnÒÔ¸ã~5@veS§ ÇÙå·}" ¿÷åj]M/¸’h¹#V×þç·ùèÔ©îJºß–þ^î»ÍßüœÏŽÿŽÿ®ÿëÃȵKÞ5¹ëÿûè»Õÿ«ÿ×þÿnûÿô'ÿöO_3ÖŽ–\¸®ÁeˆZqJ…‚, >ìP)‡®´òjÜïoy©g‡_i„îÙHï#]ÝÀK?)Ë{ç5r"ãÐLwê{ Ê6]^ŸÖ§ÒÚ^¼îíhûÐÈ ­þ¹—ÃÿË/¿üè‹/¾HŸ¶ÿ\ðûÍ—çÞ–Ëíø¶, fÇPÕÏUÖ{‘¾²Þehߦà{´…K;ÜϺõÁTö}Çÿy—qÇÿÌ‹]ÿ»þ«¿èÕÿǾÝuouxí]»úÿÝø²ýÿø¿þÏÿ>scª#¹1ð\A…tˆ·KcâˆË—f¢Õ`çÒõÐ÷hPzéÊO…zßÉJ¥×uÖ•·#7®`âG'^Ôºì*8x‡”c¯ðN°ß§ó»8»qøàÝöôR>ä'»2í3å¤+ <¡CÿO曆|}9H™lʽ}ó6|”k;É ®nV<<€¦6 ×΂¼{ytœ²=æuOŒ¼¥Kùá1 mË£ìÕ†ÿs ­_õÛŽÿ®ÿ]ÿ«ÿWÿ¯ý¯ÍümöÿéŸÿ›Ÿ¼fŒÆ”sTCi~4ø³WŸ ÆØçUC_#XÙ¥ÁË«8<˧Æ]:€®ÀæžWãß4† q åµÊð1˜<ÂÒ›§]@Ud™KñqC@ÉŸ:JÛz'1rÆŸ°zÉÁ‘ðBÛËòê®Qéòé|Ç£Êáí¤M•yuƒ8žmÂsú“WÃ.}2“îOê¿ùÒ„¹Ðޝ½d"{Û¨Ž‡úTuíø_ïkÓA;þ™?/»þwý¯þ_ýTãùu“OÖþÿNûŸŸÊa|³krð|3oÒj Ö'¶^ÌF \Âçaµ‰gc_@„®Æ)ã_ .ŸS_•º´¾è°Ç„h œ.àÖeðîþU*?ÊRRò€åÔa¨Gâ©käj~A”rê$s}ô꬯O æØÅ_Û9~Á‹xÚ5Ç¤Êø)<<€SGãè<é ·ïš&î©ìÊáW^ê•ß:нC{ÕƒnÇÿÌÿ]ÿ]g]÷õ­+k¬þ®šã¸Õÿ—þXýÛg Y+¢ýúÙ\rò ²A"ç7»TŽÏ({ç“#B äÕ®h”ŽE\pò8;Y×N®ÂâßóBôÞƒr¿Ä­î) ï¤ïöÈh_ðÃÛ'nï´ Ü›¸4rñ 2¼G Kû'y®|üÑË“.Œ¿òêÏ®ÙÕ6;Wv‹ÔžÂí1¨úôÑ/ùËʃþíúé£îü¡ @K;Ϥ; ßëž´ƒ<•¿m³s&Ó<òêk‡æÑþ Û³Ûñ?ócÇ?S$Ì¡]ÿ»þWÿ¯þ_ûÿ‡ÙÿÿËÿøoßO‘W»9@Ä<Œ # LxÄ™æ—ófò7s‡htò Dhåô¹s¤@vj` ¹ó–«>ŠMZõG–IÑÜà¾"äW†¢eñY^ò+v&¸¼bá:fTÇï§T@¥N½ÒÛêLŸ Aù‰s‘÷ª` øÔŽë"ûgŸ–÷g‘­®r‹«ãÞWåQúø€æuÜÙ>R¿vÀ oFQØ¢ £rþºúHÜñ?TßïøŸµß9Üù¾ë×?´úÿØÃÕÿkÿûŸ¬L–9^ã3Âüî1:â­Ý;J { uŒÒ”©`÷Ž|[]y¢ÁËS D‘{îqtâ,||9e0&œü«<ùìÉÇ/e†Gê»x°1;9ÃÏ®Që,Oqò’?íK§N<¹óΪ³L&»`äI\õ‹ø\y‘ùÂŽßyO×È´)¢ÞÈ9e¾¶[ziêã)("“r\óå)O~á!:4#¾2èÛ¾rÒ¯òßñàžžÝñ7/výïú_ý¿úí?[ÿûÛÿÜÁbGjt…)T®ÆÚ®ƒÝ4>…+M¹ã¡›Âbc5ڼ횈£÷4Y¼×}$4x¿ýzv_†?WÀÀWïÉG£LÓ&a Äi‡–´$gòíèD^ù7äÇËÎQ_G»|ÊL>¨+½2q²‘S™ºÖ£\vÒæÛ„ŽäÔIe³û¤þÙýëËHq¸;³|ð¾‡ï}¬ÎÓ†9*¼d(­<.|§NN^]eÞñßñ·nÌMëŽ3'8sMšy³ëÿè‹]ÿ«ÿWÿ¯ý§kÿŸ~ô׿xÍ3ª&ŸR­²à((¤°|Á‘€ñÕ›¯Xè(\`)†Êy?ÕgŸ}–21àCsœŸ ° ŠZ9;^_ý¯ƒ ú­õ‘,=þ¯,êçÚ´‰çï1 ä÷Ä Œ,@ á32(ãçb€°9üÒžKö´ãâÜz#û%GÂ剑xÒ'A=Ú¦MyY)ÙFŽö·<ÇŠ#ÀÙÁŸ+ßÊ&~£‰Ì“¥ÛçQ`xowv¯6–z…ûTžÿéÃkèØÿ]ÿÖÆ®ÿÕÿæÝy}8^ýÿaÛÿì`™ -Ãۉ˜րtW]Š#6.÷ƒfÆQÙ̦ìÆ(k‡H¹®û3õXxOÛ0@†)÷Ãþ0“?—Æ{ù•áL^éø4}Ij2'#ox_°Ççrõy­oH"Ò .”uÌ©BŠì„óü9UD®&¡ÉÎÔEý’>iæå«ÿá†~JÚQ0êΘ~Ñ×_Ý;e'1²5s|õyÓ«R’v#9ió]ËWîÿÿ]ÿçÃ…5±ëÿùhXxVÿ_Útõ:bíÿùµQ;j£¨ö?or4<ß%ÄÞ)t0þÞßÔûA¡-èºOçh/̘wÂy¦|ø/ ˆßŸTzýÁÿË_ÿ:@¦`‚ö´lé „Î·ñžåºCSº‰îÚ8ž<¯s8÷˜*_Üì½™Ý$?ØI^»JqÓ¨Ù¯xg×­mÂÈÖzB?ií»CN_yÁhÍäÝ]ANû½z3q‡Ð`¡‘_Z 2Hkâ[ ¬—:ÓˆIÊå¯>-ÐăKìøïøßæð®ÿ]ÿ«ÿWÿ¯ý?§ìæïkÿó[„ï_† F¾~;¿é7Æýó9êsäGÙöÞ‘Š„ï @>@Äð3Þåۭͬ‘^p$IŸ…)w@͹×ÁØ£åÊ`=К;oéÞ3U ÅýÐ àQÞÛX݃ҶÈ;|}–ÙÈ1ñÁ§õÉópvW[´sˆô탖㓿m'>­Ó‘ágŸ ¸6Ò•o]çøñâÓri£¾¸èÛÜÒ"Ë¡Âh<Æ×«,òM^wÝvüŸ¿-´ã¿ë×ÿêÿèRJ÷rÕÉ¢«ÿŸ7cj«×þÏFËþêç¯M™³óÂÕðPoæ¨Ng$ôí¼ì¦0Ì ä_ Þ û¸ó÷&ÁxèLØ–† …—üÖ-Œgë~óöÍãu˜=6u.O€(ˆyŒÉ¸¦²ÐQÆt yÄñ°8²Hçê'">ÿ(ä¤ãyшûQe®üùåÕ¶©°mÿ¡8œ:íLu¬¤ë mÊ„ O%™RädÍßÉïTFr•çŽÿ»ã£KõÏŽÿ®ÿ]ÿ«ÿWÿ¯ýgj³køuwûÿ °²‹2; ìàÄð 2< áÜpÜk²£tOW T/€C#ÏÐÏ£l“¸‡cð,usÊ¡è ò¤QzdSŸyŸ“,à†_ÛÜ ?¼Üort'_9Y¤7øµm U¶v ¸ü¦¹ÂL0•ðU62\è[¦a¾vh7¿íR¯ð½ÿÚž‡¼“Ï)ÇÄ‘ 0 ÀKú„®ö·^¼<ŽZ#ïŽÿŽÿ®ÿ]ÿôÑêÿÕÿc7ض¥¶‚Ï&­ýÿ=ì¿{®q׉Â7áûK4˜f´¥—–«éxᯤà‚MÀÌ ˆðL‰sŒ;w$LéxЧî.Ø`¬ÔK£N E\¸?ñóÒ}ªáÑ|u R5/_½Ìbò&?íª›ÒÑ’ÐÓ7ÒÈâÁOž€M{2Šj¾5)=Øñ¼Ê…nâP÷ö ]ûO{¹Êkâsú”ýt•]¸áÙݨÐÌEþþ,89ÛOúJùð˜ðÃMxÇÿÌ=}¢vüχƒû|1výïú¯Ž^ý¿úíÿ±ÿù±çTв´†<0èvC¤ÜI;» Òcü1F\逦P ­¸2,æsIŸ ç/?=Ǿä@¯N¾¦\XŸ²å-soÌOúøv¡4¦²?Œä%cÚ0u«? iÊãR:åœÔw);wä’ÎáAmûν.‰—,ÃøÚ!:;H}ã<þ!ËßóG]mƒýWÅ¥Žö§´|ÃðtÙ;eÔ}zácC+åÁ—\ó~ÚP׺K×øŽÿŽ¿u‘ub&ÍÜé<yÐÉ÷ ÂС @š´‡lÞÐ>quÔá¡,yRÇdè éâèåÇ O®rhoä¼èr&ßNÚÇÃ#}4}ëµûÀΩ‡g§Ç„\Ë+'sÜè°ñ´19Ïcˆ¾é©ç*‹¬é;þ‚wüwýïúö ™¾Ýñßõ¿ëõÿêÿµÿÿPûŸ÷`1À&Ñ}÷¦aÇH NŒÎmF¸zçèï*¦Æ]ò6diê`ð4ƒ €7îÔ?uL]£m9ï~ï·û·‚$`ÃoöS:€)ò^á\×¾yZ§zð³sQ`6•<äÓF¼Èæ:¾<ü++y¸È<>Ù¸óŽ­óN¯Ô}É#Oùqus襟˷¾öCùž¾>u´m´p:5ïøïø› »þwýÓ!Ñ#3Vÿ¯þ_ûÿûÛÿ§Ï,Æ·‹¨†™Ñ€yÝ"³;@1úw#®W£ýÅ_<”¿<ìˆq°tåÊCþYØнùêMâd x—®rýÓ—sá|йú @Uä¼ÀÉ ¬Ï®Üðâ(&Ý=.õ÷¥íå8ù\@Õ¤µ¤¡Íeúñ“Ó­_ù¹±SwDÇ$|ðjÝ脹¶7üFññûȇ´ëÆGÂ-½åÙzôµ0~ú`Çÿ€üÎïÿ]ÿ»þωÕÿcVÿÇVT?²µÝ|ñÝþç’{ ´ájhùJwO’9,®{gJ/ À €xünßÄ÷Ö¶/Ë4>á¥.LjÂgÊ‹;Æ*ÐS®2 ¯,|F#:…:ð“IÆ¡Sž­C=/¯«5åÛ& N9ih]hçÛÙr1:áÉÓ¦‚“ÔŸ*O¿«2’©ýF,r©ë':²¢myi‘cŽoû³8¥­ÌŽvÏ{¾OÎÑ(¹§Î-«¾>xråÃßñßñ7_:/Í®½ÎmiÇèvýïú_ý6'ºFº.ª¿­™ÕÿüöÿéÇó&w†´ί!o°pŸè{„&£TYnJZwe’–—÷öÍy¨ g÷ç†g•¸´|R€‚È7`dv½Èþ“'ÝN–Šì0gx÷¾ÙÀ†¼|s)h y¼'‹ï‘¦îúÚ ®Ä‡‡×/ ðÒ~øözÇTËé›8ũ3~å–×6:rì(éx(Cô“ðDòÕYyñ(:ô'§8i§áà«Áúgؾ“ïøG}xrøq;þgìø_ótæá®ÿ]ÿý`X½GwDGÎXýÿl7Vÿ¯ý!µ>þÅ\r‰a€‰1´þÁícQu1¡ß(—À«4dî/¹¿ èpè[¾eŒSÇ‘Aº]˜ÒÍg†ïdÉDÅÌG¼(˜ù¶VÞþ<ƨM]ô(¡Ô5rˆ;â¤å¹@%î‘Æ•WyØ!âÎ1ÞÙýŠ|Ë˱ٔ'_âÈ.o¼ÂoÒêËozýÃwÑ´í~7KzÚ†Él§®ýÜú¤·ÿ¥ÉOÚðáý͹û†à& ¨ÔÆ;/=¢}wYÓÿIÓ~cù·ïw¡oý)‹~ø3’•CÝÚ²ã憾ØñŸÙ²ë×ÿ¥s¢—.ÝL_¬þ¾n@WèŸÕÿÏ6›­áèÒùslÍ?rûŸ;X”bÜ4Jãªâ Çpß3øèMOv‚®NèŽvá3å|OÇU‘¸Çõ8¬ô‡ÇÈpñ GôÝJxdÉ`ˆp—\ýª=ùÜÁSØq¢c±È=²°•h.àÐöã¨<^/1q²ú"Šc€ 04€Eâ‰4;[É¿úÌ}-åÚ÷¶w·‰,ýîÓÌg¯ÎËVµ¿Ç”~ÚG¿âã>ؽ/Zyá£{´yú"}›ø 'aâêŠ,;þù¯?vügÆè‡™O»þwýWÏš«ÿÏ5ŒÕÿ³.ØXà²5t'ûãùPíÿyÖeX)Q;Œ°Åè4N:€bgHAës€@ÀÁ$Æ _k≣wù›ïµ Ò²Ô=e¤Ç¸_a¼i—|øäV ŒÏ¿z F`òÅe2è˜É??isŠ©C¹Ôq˜û“˜ôä_4¬.Z Ê=.m©¼Ú)ÞËÀ>¹};}Xq&[À×”¯ÃK=ú NXOs ªøk‹òí?“—ó6y»uÒýî"Ú¼žbèÓ¯_rµß3¦ÆxòRïø;þ ó¸klô£°ñÙñßõÿø µëß*™µá™?£;Vÿ¶úÿ̶éC·ÿ¹ä#’ubµ 1 G'X¡a„uX½rŒN ÏÐÊÏz›´,¸+¯q´@›× ¸÷ÄØ7ŸÏUž–‰?w¦ jä“랯>à€y”^üĹðŸ`òÑ XD xÈ##¹ø­]óðòn.Gr+#¶üʯLé-¶o¾p4|ÛN}ˆWvׯçÔåáô¶àƒVüä}Ç€¼xª«õ¡é4ûFdëÄWØÃZOš²\ó'ÃŽÿµó7ýÝ1Úñ?sNxÌsz×ÿùI×ã®ÿç¹Qý¹úõÿ‡bÿ¯iLJò2ÂD”§‹Ñ€Ëü»áXåëÅ7e˧iYX“n×XžŒ÷ú)|/§^å<€X_EPš‚Š‚|Ð6ŸEäõS:Oh¦.rØ ¸PÇRÔÐ44ÎÇŹG=ŽL×Åvaôüðžz•BùÚ|Ixyùêç.!õ9ÐUFtÞú> ü“†/ZmF¯­mw;ièÒÆp;²·Íù¢AåVËз Èwüwü3výïú_ýÿУtd_5$¼úÿØ•˜˜›-Ò7ßÕ–Ñþ¿ @Qž“$Ô¨?™<ó蘵MÙ±ó‚†f„O7Ã_#ÝNµs£s<ÒÉsÔøôñÙý¾ Ã)['œ£Äð?5H»Ótr+C²p¢îI?·½.çÛƒ×ÎÚòüú$x8r“/÷€F\»ä€vÃÈÀTù§ÑÝù ã”y´G~¨ÏŸÒG–ÁxŸ¾:¯~(¯ŽÛ]¾WV9:@ñÅÕÿglÁº>û^/}²ãÆsÇÿ€ú]ÿ»þWÿ¯þ_ûÿ·ÿO:ß"˜jT€ BïOuÎØîÉ·õ=jr'H>h$ h>ŒËâ‡f‚gcÔw“€‚Ò£få(TÈãÈÇnàþ×ý± Xø†·c½iWw«”ÁS^AIiS¿]¢qÂ¥«<è*4Ž<ŸÒ²Swñ–_úò/ªrœg"×éÃì üääK©þøx8iø¥•§õ|2 ²àÖµŽSåÙñßñïœÙõÿ¼“kýq]GÖž~òìú_ý_ýÙµ³úíÿûöÿéçÿñ/^û-?“£€Æ.¥‚’Î@KÓ…Œ¸¼)JˆÂq¶>êI4»9I›2R\(¢ðR¯îPuçÇD èúГ6đà =1×㓭»B.¡Šãÿ„Ãc¢²-&“!®^~ÊiÇ„ñz," ghõCä0+/_½ú+÷s†G±zÒwSFZÚDœK~àHÙÒédï@‚p²K¦÷Õ™]¨Éë˜(ÀK¦áƒoÓÐûÖaeûf^!Ì‘Q_&}ÇÇ×ÖÍ®ÿ³¯Vÿ¯þ_û6,r:6kâµÿO?ÿOñ𡤀’ad\ŒÁæ[l| Véî]ƒ8œ\Øà€uÇøÂ£yêR&õŒß£¶‚ÇnGo!ŸÝª‘“Œœt²Uw§#ðBÈp¨Ÿœ6“G~eGy†×I²O©ýƒmè'¬G.í¡ 0¾:Ñ3=³WyÛ—¼‘ -^šÂí'i&ùw¸Òÿ#[_мÛ)“6M¾]íöàJ?¨KymWÞ·}»ÑŽVÛ·ã?s9ýåÙñßõßõ±ëõõ‚¹°úÿ|@×{tY×ô¾úÐíÿÓ?ÿ7?yÍÐP€Ix:kâ™HÓyI¿ 7P<0þÀÁ;nÊèXåj.`“!8y¨Ý…É M¾rê ¤y¼×*;:*ºdrÄ(í^¿²€H?êã:Èc‡ Àø†Bñ·ÿ˜\m’‹Ç½â.®;~ÜOai¯æmêtd}GÐü´Ò2¾øk¾úÐÊø’[ß“A‡0áîÞG ªïÆÂGý•Û½+áöóŽÿ€ïÿ]ÿYeûÏ®ÿÕÿÕ÷fGõ(J7‹¯þ¿ÖÍØžöÕÚÿ7ÍYÝGýæËßd’x³: ÕIĈǸOÉx2¹¦tYCß]”‚y\@ÛLÀ)zÀ˜¸Oμð÷´>yás " $,ç­æÄШO9<”Ínؤ·|eÇ m¤»äŸ–¥éî]2Žû[1¼9Þ¼úД‡>x>ÿüóÔ­ï´#‡tG£@Þ@UÛž&Í=´ ð´”O¿ïg…Ú×Ò#£E}…-l Hòª Ç®ä.-?cÈ¿.ãë3Ž/mÇÇß¼Üõ¿ëõÿê¶¡¶4¶ã²©µ¡¬gmÒÚÿßnÿŸþäßþékʸë4ÆžÑæìŽ ÜIØË+¹^¢nÇP€åêܹšÊñÆ[N8®:шóñîÎTÊO½J¥…ÔUÀ1ÈÙ¹I[¤©GøÎ§¼rñ{Ê)£Þ<ÂÞÕ5—â9À0¯J[ð#³wi©CûZWøµ¾âÒ²äs9ž›pß[UÙ’7éÊ{ʳ`R¼õâåɘŸûU#S%^ÆÈæ†ø€âI'þ~é³ÿÿ]ÿ9bßõ¿úõÿÚöñjÿç”ê\žfhcp™ã çíä¿9Ø'[ ÇQ³ëaw§ÇoÙ•ñžœ1úÁbƒì <ÌØPRŽ«€üå§³C–S­SŸ´y á (Nì|K Ñ¼Æ Ä¾vt64ø…œ×@ @™:Ïô8¢ÀÆg2Gû㦬v ¡:KmÕüK¶nåÐ+ç¸Ïù­@ñÖGFá>M•á1à«¿•¨œ¶q-7èAÿ¾ë}3ô#Uv½€=´ÆEãÅÉÆn÷jvÚÈÝ,Q™ÿóÈ\Øõ¿ëÿÛÕÿ«ÿG¬ýÿ‡ÛÿüTN7 € Œ!NzÇèGñŽÁ~yG‰úâ¼€ágô»%JxL:° l Ë€‚‰óÑÕ'´Èؘtç]iñºóèÐc\/mŸÈÕ¦‰ô>—¶’S].»Y·zË|Ëòí¹hLM;¤+ÀTÞ~3²2MòÉ-|È|dÊkÉÒ;WÂÚkW r¥Œ€(?§£_¹ôáì*#L6a¼›ï§u*·¼¦ïø?ïtêçÿ™Y¾gýì»þÏ·‡wý¯þ_ý¿ö¿v4¶vì³/˜Õþ?ýdÞƒÅ2Û eP’1Œ{ ïµ ÂH»ôÃþ0é'5Ü1ÞS~2cüÝe’G!Ë{ðž°¸Ý ¡Ž‰GÿÚ%jž»Lêæ »Oøõ ÿiO \äGö¶‡¯œü´{ÚÊ)[p1™‘ƒˆLW9üÐ9}$Α¯G=ÇQ™È54ø ÿúË_§ïí~¦ÊI·ƒÀ ·úRXYNëÄ9w¶šÞ2|üÈW:iœôŽõŽÿŽÿ®ÿ]ÿtDuBõ%¥FïÐ!«ÿŸwúWÿŸÍ ö„݉ía‹&®oÖþûÿô³ÿð/_»ŸcNb¸Ä0ÄÓaûôÚ=ŒzñZçÚUa¬•EË&ä½]Û‹÷—}2î5öʽ~Ÿr™´—ñG×ÁS·£´Ð ¸r¬—ßÄk‰¹ü%ó„#í@¦yð*¿ÐNZËU/Þä¢ÇÎz»iIWh•Ã_Mß_w³„Û®a=¾ÒíšÙÝÂ3ý4Gxøê¿·oÎ7Ãð ®2£IçáI¯S‡“_çn–<íjûê7È›Ûñ?;‡;þ3Ofê˜Ë»þÎØõ¿úõÿÚÿÚÓ?Ôþ?ýl^4ZÎ÷n†€Ïù&ÝäùWp OýË/¿c²sSÃN9ÇØO ‚7ùåÁ¸›¸ò¹ø.È…²aŠÐPë7æÈ¨è&»mÊâ퉑¼dh½h„Ó†KuÖ ÞeÿÉÃKŸL!"¤lÂÞs•]ò—»=d”¦ÍNUYUvíkßóµqpÙ£])¨ìÈCn<ÐõØÐÎW‘ê½÷ÿŽÿé;sA?íø_ÏúÑ`@IDATŒfžìú?:¨kh×ÿõÍéÕÿ«ÿÇÅîŒíYû3ûΟ§ÿÕÏ_÷Ûh 3p¢ÃXiÆŸ‘”€ŠÅ.ÿ@0t€A ÷„;2œ²ž‚¦ð”>,FÌ.Ìí®`· ü=Œ\ Ý39õHw±»@‡ Ê\]äS:ñò«d”Ÿ¶\~vÄFfédÏ)m¬)rdÂoê«k‰?'C4‘¯ùø©/ýuN_àuÑúÝ@»Hœ6®X¦Œòóˆk‡4þýQN¾z<òR¿Œq‘aާ¼ô÷´ßÿsl»ã¿ë×ÿ꺒]¢OëèÒìÐM^]õ{âÏÉÞüèÞÕÿ–ýÿùúWsëy7 Ør4Èà›+9®»f’‰ÂQ>5à™‰#mL} ¶´‚yXÇpÙù,\÷ðTº„o~ÁCù©Ç·ßçüïà% aä´„åñO¹³C!ŒŸôÔ3>ÙÑJ?€1"=@ ººÏ¡å¤‡·–‘ž¶©GžÒðýU`-HuÁT) Ê‚><ëO^ÛrÏ»‡+':}ÇQ Ý8Àꀰÿÿε]ÿ»þWÿ¯þ¯ýZûÓù¶ÿO?ùë_¼Æ" "—ÇÏ7âÄ=v™\¸fÆšÑfÄ]@ŸÀàq JmÁ~€‚rÂ.WC!vl\\4r¡WŸ|áÏ^}vÞÓ3åÅ›¯ž —¸ûÍ(uÐ3àpŽÑqüÊì Ž,¾äá§ “†¦eÔ•üI/˜RR×…ÉÈP d;Užþûê7¿Iº{fòMêì*NòoÒêR÷)¿ò”Ü0™'^i³ø<ÊËKۦƕ“~¾<ðíŽÿŽÿ®ÿ]ÿ«ÿ£ãéD=»úíÿï²ÿO?oÆÂÎF—Á2L *ù1¶—aﮋ0 Ð§ÆûD¼¿v üõ«_ àaW« NÝ[~ Çä€ì’ã­‘Mc¹‚"á®I¿ . 2§®9vÅ âZÎ}²Öß¶´}ÊÙ±;ÿIqúïÞMK¦?#DZñÓ&ßÈüÁ~¾ÿõ¯PämìäEû¾«ÒµS}jØÈÖ|ò½ÿíLiv±¸„§ úºÿâõ‡9²ã>Péó¤s_|×ÿ®:„«Î‹.ºlÄC_µ´ú:jõtȇdÿŸþôßÿÙkÊ3¿Áw ¢Æš·€t‹ê®lå‹çhëx–rK³•ùl~™ï¢9?üoONÙ¼™|Âè8»êmâ™ú²_Ö*:šÏ»†øèãÿÿ¬Ç]ÿ×rÜõ¿úÿÌêZƒî]ýÿüe4}Òþ©]gþ±Úÿ¼hT£jL ª¡žYpŒüøµ¯1ÖâãÐ2Ä kÃø ÛaA%nwFDYNZ'—O?wg·É1?òà=åÔQùâ¯f' /N\ØŽŒúÝÅÊOÛ p"{ê9zÄ!˜`òCÉ×±œ²d³3U¾¤&ûtL8u\í áõ§m$»Gœ¯~áÊ[Þêê¥yõäµ.UÌòLYmäš—Èœ^MìJ:)ê{ÿ)ù9òà×¾•®2Oá‡Ü;þ;þæKç“°¹bî˜/ ›O»þwýÓBæÃêÿÕÿšýúñuɤ9aÎ1\.Š 3´ã’Ç`O¸J´ÀH²…NÙúôú(蔿@£ÍYtxB¨¹w¥ÜUž±Ç瀶Ê?ò¬lŽ¥á÷©ßJ?Lj×+ÈÚvá÷8NÐUùå\ù7aN9|ôü|*ùêFmš«žðºöeËU÷#!ºñ×nN{¹GÙáÍ@__Ï[ñ!zm—ïŸì\¤žõ“8jô'G®»/½õ–æ1~Cø¨Gù«<*ƒðŽÿY÷¾Üñ?GÓoµÕy¸ë?zÏZÜõ?_rZýÿÐÃlËêÿÜöÿqÉýnjx›=€ÈØUƒ#|ç)ð'̨عÀHùÇxr=†çÆ›qVV9çÒ=5P|÷°ú2êÎ(%áîxY ~¢§ß}o*‹LÚÅQ^MpxÎeù)Óz´14@Ä<€Œ]ùd‹üC N2> ¾W» F’?iz.<'Ì/¯d\*Gò†Æ»ÁÊ/`sØùö¥±ÑÏå£×øÅîQÇ=¿yü»\ K;þ;þ×¼…ÜwýïúޏtÍêÿÕÿlÒÚÿcãÙ^v³öšÿä=X5¨|‰5ÆÙ™ÀJ 3ã@“…æA+Æ„bœ•®ôîØË£Ã» «B~ÁMd¦ýá§°#wÎl'þb@Q½²m—80‡§]¯þÆ!šÒÝÃÀUÀã€;w°ðцö‡vw—Oùá¶M/é'|ËkÛøÀ܈ð:}t£Å·®2tMbúåÊŒlWXzó*OË"y¿¼:J¿ã?ý½ã¿ëŸŽÙõ½°úõÿÚÿßßþçMî *P@ÃðZHC+aà1‰I/­4a†ÙQ—rÒƒò-¸Â£<ù€Š) Ù‘á*Œ?z¾ûI|õ@LzÀÀÔ8ÍM@É}ª‰Ûûͼ_êPðÆÏcç˃g%Š—ü¦‘ `°åÛ6ò¦O‚*'Ð8íšzrÜyÕ×¶ëðu'¬rx¦' ϸ‹VÕ«,YðtòW&yê©ÜÚ0 IÜVsórçí¢U&}8tøxå'/<].mZ饕&ŒÏŽ¿ ;þæD׈¹±ëÿèº]ÿÏ:…ž1GÌÕÿGÁê‡[ýÿGaÿŸ~ú7þÚ Ö°2”œ¯ñ&Ã*o·Ê10a  ý܉²hЄnWþ|é¹@>þ·sgëÕËW)3D¡£ Ýÿ©{ð¹[Õ#Áð3 ‹<ÔqÏ1àËO_žŸöy î<Nà ð‰lÓ1xS§~°óƒ1m÷ H2ˆ“ûôÛ30Ã'í^Âa¼Û[òÑ—'¿´|4þ„É#¬ÏV¾|K×6é£gŒYiAuå9íØñßñßõ?+.:e×TFtÎêÿs÷uõÿÚÿÚêßfÿŸþó“×IB5îŒmÁ ekP lð=1Fc¬l/·¤¸úÜ㺌y'󀓡ˮŠüáW@Ìõ{ܯ Zù­›,â‘ÐQÿÀ‚a´8ôÒ<êl[ȉr0ÁLSÿ´ë%te PlLvø]?¥|Ò¡š´EßM;ìVåÛCÛ6¼½vÈ´Ñ(´Ï䧇¶ýÐöâJG¯ÒÞËÒ²–—rzazw¹ô™ëš¯,zòówüÏ<Ýñßõo­ìú_ý×™«ÿ×þëïCÙåØÿŸüû_¼¶óSƒ*«F6†xŒ+#lG‹áFp-â€@ ½°´ñ㎱ÆÏÝ©‚¥Ôéz”k}\S°õµqe¿üòË>ÿüóì"M¡”sd&Ÿ¬¥ðš´—³Óƒ·|²>h€‰@œ}â ñøM]S,e6¦|eЮ€´ñO†PöèÜIo¿@vù î´[;ÜSy’€+¯®»—H‘‡;GŒ‡V.'ýþ"Qtêkÿ†·>oûvüuÑœïøŸ5Õùb~îúŸ»þWÿϨýZý¿öŸ½ÿmöÿüáRpÅZ'Øa.@ñ#ÊP;ƒŽÞS`Upc…+yuøMÁ€’‡É+/¾ lGÌËÁ•YÝ©ÏO˼yä¹äþPA;a2(Ûv×Q <€¢² HGÏ„tiŸÞÃK9 ˆß…¥,'«ì‰OQmÞ\ŽÏÏß ?yÒôzôkÚJÎK4•…œåŸ:kŽžÊ©k”E—öNXþ$fŒHõqïónÑ)_¾•½4íÜñßñ7Ì/ói×ÿßþ‚ˆuÓuhMîú¿¾©MW]¬ïº¬:jº*ºK^û¿úÿœ^Üû,×Z¦?õÝêÿÿÿÛÿÿËÿøoßw‰Aí6°vHrq|&<#kPk¬ÑP¸½PþÅ_ämë¾ç­ëw^Â5îÂ}+º4õdM:P#¿i%vx¦>N¹~õ¡ûåÿóËütÊÍý¸ÒŽ×݈©'ŸÐ‡§ÇgúD^Â׎€5‰©Ë?í˜c¶ëG§¥…ßÈBi¯ oyê­‘Š‚™týÉ`õøIÛÚ¯Êx­Þßø£'—x}ùÚÈÉ–ï§¾›/ìøŸ‹úúgÇÿ¬?}a>íú·3~v´wý¯þŸEÝI§®þ_ûïËw¿Íþg+ŠãR¨>5˜D&§;85Ìô|ìxÞÝ$î\¼ÿ,(ë‚ å)î:lʳyÙ!:e<êîN](õàÄ9ôÛ}vˆ\jÇ#è¾™8qåb¦ §vi>ž.šwä¼@9€å¹â‡ç¼$tÚ9ç[Œ|qŽ,~Àz.@gÒãO½>{3m!‹¸Ý¹þN"‘‘’Ç@]7Y%¥ß&wF,åK'=ùÃ3a}2ÿ ¨Nî”'ó8ã²ãÍŸôÈ(ÿÌ)ëÜ5:—LHóÕ¼1Gåïúßõï¸ùpwÑ‹“`î¬þ_ýß¹ÁU§tnü1Ùÿ§ýõü!Ó\c¬å”èx] £ï8X°XlùÖµ,ú(Üñ‡€Ò¾/8`Ã}Ͻ¬pãå]ì,Pò€^ñ'<äŠ F†îh˜3F`øFžÉóÏ])ÎŽFFü ¬{Q\AQåÁ×#^Cƒîž.ÎIà ºíKLÉÚÉõj@á¼ U¹êäëøîžI~´ïÀ³mn¯õ¶]]ä ÎøŒ¬ÙÅ›]3|{q-~ÙÅ›#ÇüÚÔ—?;þ;þg›æé®ÿ]ÿ«ÿWÿÓ‹lÎÚÿc/k‡‹èKiûÿãù±g‰us÷hJ¨S)YOïˆLÒjŽÑîq!>@ÑXõëUVCSP!.œ¼9–ãRÿ¤Up<Õ©9>½Ê±ÖwG–‰«ƒ,Žò^ÎëðrNû#>QøŒ/þÉäP©ø«h‰?ùh#Ó¤qd”'-}2¾v—MÓù¸úÐŽŒÞÉ•t<&\Öiƒ#@Ž#¸ò&»'|ë!›Àtˆ6Fæ‰÷‚=:idF~?RŒð¯uTÞ$ÌŸ”:Nž‰²ã¿ã¿ë×ÿêÿÕÿkÿÇ&þö¾Eøg¯RFWAŽ‘íÄhOºðXÝ*€®„Wv„³¡Ç?F~vvøŽgÂ-M®:”-Én̪ ²^€*G…Øë¤Ü”/ L˜ÎLñ Q÷ÔEf}üË|·>ñé\ŠŸ¥ÃS[Ú‡xvg.@èG×ÁZìNá#Xʧƒ Gw£&Ï(Þï´çz'Ö$RèÜ¥Ò eñ+ˆ–ÉØñö*+ÚöAóñS¾Œ‘š„§ðŽÿŽæ”ɳë×?=Bw­þŸ£'WÿŸùÀ–°ì ÛÁmú€ìV) ¢ ´ NF®ŽÒgEüÊR²^…ॡ>åY|yxpø ÇH+; yì–ejÃ.MÙL\<*«´Ò#ƒ7ƒ˜ÀMžz ˜òÉëfÒ¸îðàAQðs¯kÚDÞȵ±eÔ‹‡¾mì$ xºä×§þE¾Ië¥auM²û†oâûYv²ô»O 褿ß^iÃx幨._™€7 HZA,y»S§>y?ÏŽÿŽÿ®ÿ]ÿtÎ8z-z{t ßíþ_ýŸyÀÎŒíXû0ÛkÜíVVMìetÏB:à‘·{Ô£º\À£®s1,ðp©üÕgóΩù€È+0âÿ {ƒ¹Œš<.Oe-gqŽßp®?€DøŒ?&UÙîº$aX©÷·ä“¯À jœ|ʺo@&eÐIWŽ ÿ‰Ë&WÛ%M¼m³›†·üæuçÊ@ä÷åÏÓöñµÚÄ-Mý“Vzß3eÚ_©kâhãðó4>‰‰OÚÕæ–kÇŽÿŽÿ®ÿ]ÿ«ÿWÿ³kÿÏ&ûú»ì~*‡Af¬»›Ãè*èÁäý,Æ™Âå1èG 40Ê ¿òøJ¯0 “Þ:ñàê'rÅ¥5½¾üÊ–°?C—·®«O_Ìû¹¦>qËÁ®š€WHw  º;üÈÌç´·ŸÒ Õ°1|9`¥mG ©£ró˳éúgÓ?/ß_Çh‚~ÇÇK~ûóð¢ä§nõû;ÿ•á’Ÿô³;˜ü‰;ŽEØ]ÁÈFÆ«ñŽÅŽÿŽÿL–¸®1ók×ÿY_»þÏú 3Vÿ¯þ7Öþûû÷Ùÿ¬³lŽbu¤åxªÙN‰Ý&Ÿ^8Š—Avɽ!q»0\ŒùÅ }B¿µV=)< ÇÐ&å9O´ÊÿÈv€žôƒ%9–øØ…’À†æó/>Ï›àïÀI{ª<ñðHSt´¹„¨L/ofÇ?u í?âd©Œ/烓•2x¢÷£Ôê@#ŒRGy©O¾ºu©o<&~Ƀ= $}¥[ËW¾ú8½ZYã_iòB/p¹ÿÿ]ÿ»þWÿ¯þg+ÖþÿïÙÿüáÃO‡ÆëÖëçXž€«1î5ôv[¼FÀ]'à‚Í@C‹.å ½ëS0ÁŽã-îA{êœ áz.{ŸxÃwè‡Ïû)Ûev2…ÿ¤÷}RäHÙy¼ŸÛ!¿úäeg Ïqú£Gohyk<™Ë/mzõ‘¿2µOÉÒ~ sü¯w+ÝëUxL¾t’´ ”©§`*´CAFõ(§\ú3¡òðJÙÉ/}g·JàUYÃ#lvüwüÏ©]ÿGìú?ôVÿ¯þ_ûÿûÛÿ'¯i`€k„íƒôE” cnÇ"ãÎvÍ0{Cº]ò€˜Ioœ­OÚÌ”gè=÷ðÝø_ø ^ƒ|áÆá€°FÈKVm°CÆòŌܡß[çÉõÈÞ>µ‰ŸÓÞ‰»ƒÕ6†~r+we©l){ÉY¾•¹y 7ô<ýä7]=œ2òÑJ’ì äXQ;%ŽãN•ßt~꿟L¥Õ¡õàáߎ¿°ão>žyµëŸŽÛõíîÒ‘£“VÿÝK·fè—[˜~N¾>y«ÿ?,ûÿôc?öã<ŸX¯×˜ nÁˆ£À¼4s”ŒtGd ?…c'Hy´â&hàLÈSÎ_¼àΛøßJ»ç#šÜµºMìðYì’E!^ÞΠDNaÀ© +—¹‹jÛÈëWvªð¹ä!|;RƒAtð÷"Ñ#ÊgÂèšFÆö^y&?íçºã&L~å=•H4Ò!G‰z«²UV~û¨œJKšô>'ñ¤d;þÓç;þg®˜»þwýÓ%«ÿŸuìêÿµÿˆýúÓyV úûñ f„-2Ç\ŒƒÃΖ.‚Þ±¡×ØñN””<ßç' Òû´.y@Ã|ˆGÞä30$7C ÍMùJ ÔµPÊ?cd©è*à¹aõ5½wÖü€¡Ö7>°'¯}B~ßF ¡vÆïqfîµ o—îÕNYý̵ž¶Hü~ Uº1ééÓIkù+;}r/‡—~¾xvתòßéÑíøïøïú?÷N».wý¯þ؛ѣ«ÿ×þ×~ÆÏœxúÑ_þìu€ÈQ™ k€pïZ) îN“0p€ž+ ê(ã*¢úòRv€DòŒ 89øymÂ|ûÍŽZê˜zRÓå·ÞaPbû^¾mkŽ<À8ø™W×[Þ¥¿|yÀ >>‘ðBõ ÛÝ 0›pÜø•¿Ò9† ðRnÓSò›¯Ïî]ÚxñÀ ÙÚ_úÂÓ¼©<}üZ¾]È©Úb·¯ôá¡Ï†_ÆlÂ|éê"Nüª‹LÝÕ’Þvá+^æ„wü§#ný´ã¿ë×ÿêºrõÿ±µgkÿφÎÝþ?ýÙþׯQ†hr¡]‡1½¯S 1é‰_X¸ ƒQ®¡æ{š†®ix÷QÓù z¶`SÊõó~*éêY[GÓ}£/÷ÀÈ}ñ±Ûä˜öä(rÂÊâÛ+ùbãWôÞö®NN»¾>¼ìÔáá‰i)?a»f:ŸôéȦ¬zm`•“ÇáÓ0¹¸”^i«ox-¨üCÑO¸²òñÑóGú°y'?¼®2wÃÇÇ×ÿÑQÖÜ®ÿÕÿÕ©«ÿŸï ³-ìÛÂŽ¯ýÿûíÿÓÿú¯™`Uƒ/ž`Ó‰ãS<~ŽæH¦³å{¸‚ €-? ÜŒˆü™´ €+Á`™Ì&292ˆ×}0áCÀºÖW¹.6¡S_Ê 9€CQ*ß:X¦eµÃ*ࢼðV^[È¢îõ©K:>y„AwZ>þð.ÂxÒkúi›²©‹aÃS?-Í}\¯>æ§ÿ\ÞbªŒ§.ñ+’¾ø;hd§®áË©ÇÿÌåÿ]ÿ»þ?{èÄêÆèŸÕÿ«ÿÙu6ì²MÂÜÚÿ¿Óþ@Ü@!:KØ.‰…ÅKã3ÂÝAb„„åpÍŽNA Sï…žhìô:'Ú<ÁŸáð°{¥[¯-£Þ»S¯8 ßÅh\È'‹ˆ£?ÏH»ì\)kG*|B?`ex8l[õCëw̨îó>¬ùáé«o `ìnqè=•1}6m:€)×(?…s.Ñæw'+}:´H˜üMÃOÿxa*×,2£¹?É¿ú·ò¤ÐõçN«Mâ;þ;þ»þwýÓ«ÿŸ¯N¬þ_ûÏlþCí^4Zãp3à€ Ä ¤Õ˜3ÀÙ PÒt4?‘»aǯ»[õ Q€‡rèùòù¾í§éÒ*¹È$­/…¦¥SÀµÇQÏKÙñ?si×ÿ®kaõÿÑ «ÿ>Xû?o÷wÙÿ¼‹ávôǸ2Þ,cØcXfA™H£Ë1ÌvŠäôŒBÃɳ¿îQÀ]^‚“¦.´œÝ*¯F2jüñ&G_ƒ >>çO¹Êí W°%¬]•¬ù¶Ü\TWV™‚ w¥"»¶M;b®öàƒ*h2©ðPÞã MZy+×mÓ¶«;wèO™³c…V9mô҉ܤ©WýúÈ87µMö3 ’ÖºÂÍÕÖ¦××^2ìø€Ýñϼ1¯Ì süñìúßõO¯¬þ_ýoD7ŒO7¬ýÿíöÿÆ•{5> `1ÀŽÒÒ“Æ—¦c9q.ñ À8ÚãüÍ>O™òÀ»/ޝ, boú§óM¿¼àíä»—ÁNÊ䣶ÓÐ÷#Hu“ p!³rxi»¸6ß‹°4yiãÕ6ßeÀqê(}ÛGûO`+wÄ®¾h¿µNùsü‰>2O~ºDÿ¨û€¬Ó&åÆ:ùž÷]ÓñV®uîøïø›/»þŸ?°ìú_ý¿úíí9ýÈ^rì§tNÚï²ÿO?ûñzJåŒÑ¤€;G­ þܥⷢæ)+MÅÊ —®´|â1ý¡›8‡Èp]Y®@² ‘æá¤À(ûP†4ì\ɻˣü×ßÌ· 'ÿÕ\X×FòPå·”Å%v™¦ÐôÃáËu䤾)kGÐý©ôÅÐ’=´×±j˧þ«¯ÐôQwË’ òäAÓr÷±’&ã+¯Œ×Bp)3éÊ„÷„wügΦ¯vü3—fžÜçÔ®ÿs”¸ë´éêÿÕÿ£+ÇäaOî®6)¶eòÄ?4ûŸKî v€Ä†éÑáÕ8þíuVžÖÕz½f‚C˵üÄD?ŸN®Ì´¿´cÇ?ݲã¾`²ë×ÿêÿcÛªoWÿ¯ýÿCìÿÓOæ·¡ÊpFßS#΀ûÔ*nrÅ`j:ð"¯†^¾Éhǽ#(yå+Ì€©Ó^ÊNòüò£ä#ÏU¸ê½)»Yà1ù){í&©ÛnLä¾øG®©ðRæ»9ÊóÕJ<]¨ÿõ—¿ÎëRö’ÇòŽ8;?åI¾ºÔ?u<ÚÞŒË'ƒ{XúD]€6ewíF‹gøâu¥÷þÞ\ë峯Þ|•#@üÄŠ`èÕ›û[SÇòÀGß«Ÿÿÿ]ÿ»þé1z$úvt]B?¬þ_ý;:s a‰:/ÖþŸÍŒôËôM1Ë=ýâ?ÿ«×.™ë°,¨YX¹od C<$ rAZÿ”«a/IÞäã ‰ uøXÔUîõÀ`ʈ\õH÷Í^¶Iޝæe¦ïÔ?ôê›Êr¿?å[7ŸSVº;H¾h=\A ^À˜Itwm ‡VûRÏ좩£€Kòy¸¶»wÂÈyïÏ]N¿ëúÓwxrx¥Ïæ§€ÎÐL¯Ÿ¶Me@§<§Ò¹È#y¢/_ÍÏíøïøÏ¼2WÓ]ÿçÈ×?3ŠbæEt }ré!seõÿê¶„Ý<óálF$<ócíÿôÇ¿øw?{ÍðpÌâ6t¸»Ç2ga¡sÔ¤C m‡¦UÆB,˜à7\p2xÌÓ4>º Å<¼¤åèod€lWÿÓúOã¿pÞE'\<[9â&kzùj2€“¶h+G¡þò—¿Œo§)çÅ/ôú#2Møî·?”W~ü”™þäô«42œ>ü¾I‘eòúÍMéø·o2¥]}U¾ä#gËI0¥Hõj¯°4|+[dp¥üŽÿŽ¿ù¶ë×?±úõÿÚÿùR߬.6wlôÝîKÿ­öÿ§sɽ…ëìÈŒ)êÊ(þ«9BËÏÒ ó(ä!VäÄ0Þ1ó#þ½§õäÕÉ=`Cà |ÜÎÏÉLX9²!êS/¾h<¹À=i‘ëªt|ɧ°òq“×oÓy÷Ö«—¯r¬‰V¹<—,êR¾m,¸Ñ: 4uú÷Î+¦ûk,  \eà@4¥Ûñßñ7÷výïú_ýÞ¸úímæÿŽýŸ#Ÿ¾fh1óÉäîÞ7Üòã,B´cð{&Gù lºCx€S‚2ò]€¦ð“4$ãÈÄ)G–„‡îN/Ü>wùä hó𳃕×?øâµ‘£àãÞnm)øÁÇQ%¹½ÐïSßóñÜ$¦žÈwšñhCdŸ|­ìdv™F6y€h@ÒP„ï¤ùæ# ŠŸ4Æ­OTä~€×«ô5Z.ùÓ^>úŽÛŽÿ™K;þ™&™æ˜ùQw_3©wýïúÏÔ¸ëW â«ÿGßΙ…´úæÃ‡hÿ°,Æ7¯4…pr-F8ÎD'Þç1y®ËÝîu‡¤åðÍŽÐeÜ | ~Gj_¿=wªÐ{ï”c,´@38ø \ÞÉsÉE´\Ë5®lDåB'œvÏEo»m:—¾•}óöùçÄå‘—S®ŸøXÔþÜ2¡¦L^Ñ>Õ†¤>îo-öŽ”4í¶8à øSãö¨wÒô«º¥kKÚéNÜäIç§Ýã‡ïå‡Ç옃Ê.mÇÇßœ0W,sç±^&ë¸uÞÐ+«ÿ¯5µúÿè–é‡Åþ?ýùÿý¾¦P_Ì·Òz7‡¶VY0%;ihν¡sìe1鸸ÉkØ7Õ”HÐ0êv}òÀ%´9^ºÇq /ÍÑY"âó¥Ç“â‘sèêÄF‚Ì£ü2J;¾|™Èâ‡~”‰Ú â(ÌÀJº2•³;FhË“¼ );Rk³r¥kyÇ…Ýá“_ õÜšù¸é'm"ßW_Í+nF/m¦êéN ~x¡GË'Ú¶EˆT&FÿÿÿëèÜ<íÜÞõ?ïßÛõ¿úõ?uûB'ÐkÿÏæÊßgÿç5 ÿúuŒûe„kÀ«`hùÒët®ÿ“AÿÊl9~Ãhcð‡Þ€ÄÀ(() è XßP±S0¸‘Ásç:È0Îß6ô!3QÉ)ÿ’ M]ˆ]'Ç~híiWå 'od:œ#¼+_ÛØzÑ4¬œ°GyïáºË#¿m,ë _=åÒ~e¦¯Ü!˜éÂïÕ©<@Õ{m•¥m/ßÖE¦ºÿÿ]ÿ»þG‰­þ¥¸úÿØWö¡vƒßð‡lÿó&w;œ#·ÏĨñtØtœ…ÅàCüîQ£S/¥ ™;Y@ `àðI|~ÚÆq!ôv\&¬L×Ð’‰¬|CÙê“oœz»#u—©á†­#ºaYÈSÔãÛÜÙ}°E&|rD8räÈr!Ohæˆÿ#ßô裯ÿHÆ©G_¢VÆ“ú‡¯vë<Õ†öâ­Œ/¤ý#|À‰3¦§9©<úÈ94èvü§ßwüwýïú_ý?:uõLHú½àjc&°öÿ²¡¿ý„p&UŒLb'.X ÀØ_ŽçÇŽ™þžøøâ~ø@ô÷²à‰P€0ðåüDÍ_|q þ—ÉCww8(ŒoÇ廩  ñÚ†|[±2SG'y¦mC‡ì™÷sè€íV”Kx neF“Ü P’¢œ9ŠÄ3Ÿff/ŒÚ“oFNé'mÁ“œœvµoÜÕB Mm‡:.9êð&žì‘ï׿š·ÑÏ[éÄ´œzÚa´Žm¶Üc†òwüwü;·îóÅ\Úõ¿ëõÿêÿµÿ˜ýúùü‹×W #üP°cx)X¾N<p5ùh“ uŒ¹4ÁÑCΩ‡¢ö¨ @)¨úü³ó#Îè¢Ì§¼¼ ‰ï»A3xƒ«Œ"•_ · üÐMùðàJ½ ðt8 æ‡?üáGÿëý¯¼èT»”»óSËù¹S5üòK÷^6aŽÂIò¹×¾ÅÛ{®ðh;Sç¹€¢é»l2_ž‡Ó¯ÎPÍeÒ^‘qê-ÀÈǵ¼pû,€yøµ­ò*cîðD›|m (îÙñßñßõ¿ëõÿêvƒùàìÿOþú¯5œAd` XV®Ç[³{źƒ=÷£jl"Æí~Ûa€`— XøÙ»—eË’ã<Ð(œªÌªÀÇik‘@áFŠb?‡Œ R{¦A›å@ƒ~A™õcÐÐ@Ue]€öïõï³2‰KêˆôÈ\'n7÷GÄ^[ôŽ ²Ôã<~ë*ìÌLƃ?ù 6ÔåQ.e/¿åkàËW9aùm£°6‘£à O®uµMè¸ï~÷»Ùɸ´‰ï5 ÝU–ð÷àkGJŸô¯>ÐGã¤ËÀÒiãìr¡#kËèFêä{·×ùýEõrÀU™rÞË¥LÆì’§;]ò9y•¥u‘©}¸ãÀQç‰>Ûñßõo­ïú_ý¿ú>L¯ýÿ½öÿé‡ócÏ :Ã^ã 1ÜÓ/\#Ì00w¥ã‚úòÐñ•4ޱœ^Ä3àC`œº ~ijc2ivƒ |ðÏ=§É/@¸×OîÊPƒ(ÎEþ‘Iúõòí%á©^eR×䵞– ¹d¥`+7z»]š‚àEûÅå—/Àª¬>íë ô>AÃÉ×oÚï]2¶eïrH#¼rxkÿƒìÀÙ¶ÒÓ¾©¿üZ^Âo?ÒñávüwüwýŸ"]7»þχDý°úõÿÝþÖ¦˜kÿÏ&EíÿÓ÷ÿîǯtE ;6"Ü€Iã„u¦'Àa~Ž…1¯aæ‡C}¥Ÿ£ª³#£~q©-†|xòü«Ø•ç*•çоüðeâÂU„ˆú‡I ¿¶-¯?M ?mŸ6ᣠòÊSØÄ¹·Qž>ΠyñÁ‹ì¼á阱u¤_®~C/Ý#}z3~ÂCó(sÑhKû\}x7ÎWÐ’.? jÊR‚ät øê6½úÑÊ3Æ·^y;þ;þ»þŸwÈwý?ëÜêzÂÏqQ~tÇ—žñÕÿϺ\¿¬þ?vï³ÿOq¬•æ[$Óé‡!ÜÆÏ¥ó¡íÂjYº Ng‚åÕ =fyÙ…ß·ßÔëN‘Ý.<ëjüÉÔt´Þ95R& ÐÀÉz²GY—“Fþ‡›8Z¼Ë¿4ŽÚìI§h¥ ·º;U™ÕM޶íQÏÔç‰î-E¾‰ûÇE!/ÿ¥ÉWOÓZß)CÚg…†Fß Q¾2J÷Eò¸Ôžc×)WƒQžèÈ+_~å·ã¿ã›÷æÎ®ÿÛÏz]zÁÚÙõ¿úõÿ±Oú{WíÿÓŸÏOå >±2À5¾:å˜q›;æÁGLÒŽ«1®ß¼Ò :[~ ø”Á/ßÈ¥d‹3ù6ÛÐy³ø}wFY<ðÄ>ò¤7-Ì& #Ÿã'Mú<“t~Û{žËàÿ6èÑWÒõÛK/Rã8à0oC@Fn€Vy 9¦"iKídšJ ÒR?š¹ôÞöI#o.§‡àôŸ:ÉÝ¿¶­úí`áa—Ð;·TDööºÿéÀÿ]ÿ׺ª×µ´ë”Æü×ÝÅE&tôš|}Æo^iWÿŸ>\ýÿnÙÿì`Y#ˆ`lûª.’.,4Òº„›VßxÆ›«ÎB+š½ó=é³?ÿÔÏYŒŽÜúâL4ø· ,t“^Þ‰ÏÂ*ÂèñA €´<:¼¼aoç‹«·ü*³ôÊFóÇ]*È)½>ê1‹2œ*4í¿îÖé§¶#´¡?eR×Äs풯ʓöM¾rúå”:ÊPy&3Ç~âî¶\áS—¼ÿvGúsÇßìz6¬æˆy×ù+Ü´ú»þþÙõ¿úõÿÁµmï¨ý>Šóõÿ³#ó2~ %{Tí9^ê{ (Õ*V4À@/v‹sw0‚7ƒ¯ŒKÜ|ˆàõç¯êc}4ߎK]óç;ßùNAÀDhуbGéç³£E™q “cCåÑà4hŸFÿâ›úCqþ4^¿gÿiC¢;HÝݺ·§õÛíâÜåf4*këw Ú×N|u]fßá/2TÁô\øeˆÐà]zñ,¶ñ9éw×vV~}ÍÙÑŠÅ™?èKPÑ#Ãä]åFå)KºoAϰ¡«lêA˵]w9\ø%? w¨¦3‰}íxUvuð 'O_ÓÐ6Hk8ªSÛÇ¿ËðkõÍÓv mû¤G>‰#wËñåqóñŸÞ³k9ÿÿLŒ³~Np×?ÝÄu íú¿ôÉõ)võÿ{ù½ºúÿ§µÿoÚÿ÷©T»-þÅ 3ºãj°~t àì§á¸+¯J Ð>€â¹¢•$4 Œä[n/fâÎñ\° LJ—ó§2òëÔu€NSFÜ+x*Êh%úcDi;s§jJæîÒ”J²dçkêAKf®@íW—,ä@+½òå>âÉãš.Ü~à'W;æ)áºG¹[»ïyÍçãçé§iyA$~Wz,½&¾ãŸþÚñ?˼2gº.:7;ßvýïú¯¾Éœ¸ôTõÕêÿÕÿæ‚9bCC˜Îà¤Õî%ÿOÑþwqt!°î€HÓÓ×iö@ì tÉŠy 5…Þ(×Τœ9ïÞÛè |uºÎîñ[Ží®Á‡b7@\ëŽ<3(Þeõ«¯ž¿ÑˆFž§/+Í Nùî(•O¸<å“7¼Ç—ßo=VÆ¡ ƒÊšíÙÁ˧»¡à´)õ¯º\H¿dlÝõ'¯ÇxÊ4¯Î6¼ü´,ã£óŸÓq2zêz t;þéٌӎÿ®ÿ]ÿoêz#}2þꛫÿÍ níÿ¹*?Ä®†˜¾yŸ1al͘ñtÚe΢júÃKOîü™òÂóÓÌñÑx ¦Âÿ2îÒÅ=E±„’^ \Tú·ë—^ç/uÒ›W~¾¨¾:éw~À^ù¤Û¹p½ï‰"_xÍ¥üÊÚ:ø_€ðÚ®æ©ÑN—²yí…~úÉ·36=ò†LåñõäOÂç'ÿü{Oú¸‚,õ„ßÐ s“­iú]|jN?£Ûñ?ǼúhÇߌxÖæPçNç¥ÙõX™K»þwý¯þ^¥«Ç­þ?›)ú„Í«Ýë:yWìÞËÀØúŸ Ba^“$3eþTÁòûÈ‹òΛ‚!ͮȯÏËW}¯;ZÀ¥lJ™v®$ö^(ùÃ84ø Žm˜:&½õHÚÊ›,eÀÓ5@ ­]'O_ŸÐ6·žÊVkóþ­HzúD½á3`-o¶žølc%­Æ)e§¼K±Ú[žo·÷ôæƒù1lÃDù»kyéí¾>*­º¹æKWnÇÿƒôÃŽÿ¬Ïkž™rþvnñûÈÉüÙõ?ýpôTûd׿ÝÑË«ÿWÿ³q—m'íÿ÷¯{>ªô iU¨õï` †»†¼ êÄ B¯c“ ÷ÎÓã(nÌ;Þ”OÊØ!RðnÝÙá†~ðCèÉj •óp•¹~ùv‡¬éü¾4_3cFŽÑ•WùÓžkx5ÂùƒÇÏD€: N½“™²­Ÿ{9õ>.Ó2^‡a.Í]]r¡SŽ\¿Í¥½W¹StÉG2yðàש»ý'­rÖoyøsè¹ÿÿ̹̇]ÿÖÅ®ÿÕÿtæêÿwÓþ?ÿ¡£ªK1š%CìþãZC*­Æ6iÿr@ˆ;<¥Q–éE 9Ãÿ¬ñ!4ÙeB=a2ZGv—ÆxÛéQ W@&\yéâêF«LÝ£MWš²ióÅC¸?%S ¡ ײüÊ&]ûìÂÝÓð!Ç̤kC¾ÍxñÒ¿]ùS(åÔåÁÏ3Räâ?žÓC4xq凾}-ý«kíÅ/¥CdºêrT9uàÜþÜñÞÍÕ¯úƒëÿ]ÿ»þWÿßuÂêÿµÿµÿOŸüÃ_¾b4ÛÜ1Þ5»ÐAßÞ¸î¾Ow òuLù3 4qüL2~^¹0<Áñ:FœŒÖd$¿yügPá“0 w^W ŸNè{X€ ùd­­»åÂß+$†Xíä‘P6éâqénêx¼ uÂ@Šoåiuf7GûK;áןž0@ëÅ‹"heÇSLE©«2ò+whn²[4|•y£ C£\ÛÍ×ròñó¯m*hØñßñÏô2Ÿnn×ÿ®º}õÿùàni¬þû>öŽmYûÿ»íÿÓ~öÓW1º7ÿˆÏdºŸ›\M§Zph ¶ªp.ßp£¨çaÈù5ôÊ •^'Pn´rðWÖSÚ˜?óñä{\0oZa®|òÊ‚‹Fz@È츽?÷à HÐrøZ\Pc×®uW\ùßÛ%]˜áãÛü¶¥å*×Û~xßø‹sÊùÇEΉë?¬¼å‘Ï.Õd=d”OŽðÐ/·¾­<;þg¾êC}µã¿ë×ÿêÿÕÿkÿ¿‰ýÏa.¶Ža˜‘>Æ„‘eT¤ÕXKË¥5 „q¾ŒwACèñ™|®å•s¿©†?;W¡8À uñïÄÇÇ¿»H¥í®6ÒȈÎÓ´úi×E‡ €È÷MC “—O~w¯ÜÁº·ý^:GD^ÊzF˜Óð™Ô×#<ùÞñ%ãߟ“˜¿IW_ë¿óŸÄ¤·>Gš“2ý{|ZûZßWÎÖÞ#i”Á ÿ.ƒ´ÿ3Çvüwýïú?Þ¬…ê§è‘‰sÕôÆêÿÓ«ÿŸßïhŽÜí[ìÒŸýßÂH£ÆŽ}=îò¥[ Ýa¨u#ÍÙÝøzâhä¡—o!qâø?êHê1äÒð­ñ/=^‘ç*/ß·Ñv ø .©ghšFüÐŒï}ZÂêãðç”ñõëÏÛ½ÈÅt€ €˜÷W¤ÒKÏÇ?|<_¼~¾OF¢÷Þ;—ÏC7»^úŒ2–ï­ñ|ydˆ¬Ã“KÚ|szíÑo••ò§=CÛáR.áùC¹ÿX’9îQvxtÚõÿ¼&uSûG¸î¾6wý_ÈJ¡¯ž£ÇëÚgüº¬ÉÕÿéŽ{¿ü¦¾jþêÿ3{ôƒš¿Ïþ?}2w°9Ær ÁF3n˜0Ú&"cÁÜ\»A:=“TÆÐâ!.pAûˆ_y´)Òz: Øt …ñpTG†‚*éw×ôÒD¦i'ìVÚ6q²pÊp­÷k;rÁ Cµ·GzÙøâ's®–Q_w¸¾ºÀ™|åÒ'“g¡÷Ç_¥ûʶ~40ø”G×éøzîY'ú¢ÑމW¦´³qã0 *KhÒŽ¬^Œj<‡Gû$eÜîøŸù¾ã?“gæG×îÿ]ÿôQôíMF¿È .}¶úõÿÌó£6MØüIÚL™wÁþçMî”h ìe€­—ܳ™ÃÐè%›o N: \;¯ Ÿ »ñ¯ùöZiêOBÀc—Ô;õàÑ{>]ÀÒ"ã”U^¥ç—wÀÐrb¨øë@IDATÊ>M˜œ€–¼ÐÉ›GØ‘ 6 ËçøÊJ?œÎQäš<¾|;lùqè—«¼réÓQ2Ì7Ñ÷èñihÜùRîîÔÏ¡õÄMR.ÒôNŸMbArê‹È2ò¤Üðá§o‡ÞWÈ&4/;nŽN¿œòM?e`V÷ŽÿŽ¿9±ëßjØõ_]³úõ?½°öÿ›Ùÿ|‹5†bÇû¡eÆ» ‹ÁvtÆPß ;# ر)øÇKÜCQÇ¡Næ¾äqê<ã2îS×Ýá‡_ýxƒ~*{ 4y=ýÖ£2dâðÆ« C¹¶·€,w¸"Ýš|ô飫¾¶KÿCãѧ&¢~m=@YŽ%¯ºZOõ{ÊŸOž¶ħïôaëB'¶ØÙ\Ýõ"Ri[š8u ìø?úoÇ×?´ëõ?]°úÿ|ˆ_ûÏNþáöÿéGÿøW¯ØØÝéa„™ðÝÀ£±ƒÂÉ+@ã²80áWžaG´ëâûUxS¶u•þ ˜‚ ÐΣ¶Ö“øÅƒ ý92•—ô»«ü||êîô'|Ê•¼é‡‘_ØOú¤/&_9i)?ì„9 ŽSG@ãÈä%ŸÒKP×­óÜ/ûÍrGNm¿úOÝ!Ï“>y ÐRyÿ mwºô_¹Èó(3|:ží´;u:Ûx )=ºÊYvüÓÍúdÇ×?]µëõÿêÿwÛþ?ë¥Ö˜ŠLœ¢ðô¾O |<è¯Ô“54ÚÙv”?Ú¤«Ùý¶©K¼nÇÿù›’¾ÝñÏúÛõîVîú?úiõÿêÿ‡íˆ½Yû¯?Þ¶ÿ7¹×Èò2» 7PT-‹ñO§Cc4ñã_€Ý!>ü&?àa Ö$„¿xêc°”¹¹=2´Le!—úÔÁçä5_¹Ô?é…G5\í#Ã<çMìŽæˆmþK:©`H<  üÆà]É(iÇ%:Ǩx å"ËEp6ùè|º) áE;>Úòú6¸:ýG.¼ÑósiðªG\Ú7É×^`ð‡÷¼ÖÏíøúoÇÇ¿kÊÜàvý?ÈÚõ_½_õÿêÿcqck›Ø£ G—°U£GÞûÿ¾Œªp•)ãûÞÄßÂÓ)óDÁÎqÇscÖO¹¤ÎŸ¡Ÿ„tÞ¡ÝØÙzÚf'Ìý®öGxL]ʨMÙûWúø:MÛFþøóçÁÃÑß{úî€(}T‡oã<ÍŽÿŽÿ·gp»þwý¯þ_ý·«kÿçÛö£a‘?ÊþÿàïòŠÑ­ANxŒô=m2¯±oߌ'î,ö8<{l%Ì¡m}úN‰Ûßɳƒž»Ë'®,W^ÂM3AJÏ·CE°È8£ßäKœvÆy¯•2ùä1u«%ÇdÓ'\×gŸ}ö­>úèÑž¾Ž¢|Ðê/ôp©kÒñoüÊ­ñù£xÒ[ß‘sÚ0y@‘ÇÙäµìyo×)?OÖä£É™¾8U„_Ê¿ÖÕ¾!‹4u¢Ùñßñï¼ì¼Í¼š9²ëÿ¼Žf×ÿêk„[ý¿öÿq‹ÂÌk(q5º‰Ì†¶JUØäh‰)g‡p¨Òq¾Œ{h/>wÞ-£ž#4ÀÀÔ®îÔuŽ´˜&`p>`âªG^~ª‡h“–øÈÊ Ìˆ¼Â½x¯¶úñG 9Ò”Þz(Í´eÊ ‡v@Úן¿Îë^¼|ÐxÉ÷І#ó³QƯmO=×o â]ŬL°ÏÕvq¯\ {û¤ím™ðÞšð¤}§!V.uÌØ¾~ýZóãʯ2íøïøJ\çD"óÇ\1¥ ïúßõ_ý½:s$ºë6GÌ“™0o̥꜔½•1ώ΢ÞutîÔµú?ërúƒ¿úÿ}ûÿd‹ÁöÜ_ŸÄ‚ •+ø¨o·Ã@[8vU8»V]$³2òMBùÊð]´V¦ &e®E…^@R䚸2©chªàÕåHÏLº‹îììœ$VæÊ×EÝúÔ£¼|Oêv¢S'‡Gùó#´dÿÞp&ÍÎЇ³£åøÏ£>¨lÊáS¾Ž sd8åÔ(¶>uêƒ:eº; Œ×ü MÂC¨¬°üÒ4MzÛÉçR×°O¹ISãŽÿùÕ}ØñØñ?s¤kÉœ®¿ë×õëêÿÕÿìËÚÿgûÿô£ÿòï_Ã|v<üœ ÀàS‰N¾™îô@’ËÞM£t%‹m < }Ÿ|ñ)O| V„û4ŒwÉpvq¼ý<Š~èä¹/Ð1qòsœ7aå"ËEL”~’žep£¡~ñ¦u—¬MŽšy¾0¥?È÷ùµ{¥_ȧlêTá8»\ø¶O¤á÷¶\­«éACøWò-wÄêÚÿüö#:Õ]CI@÷ÛÒÿÃ+g̳vüwüwýïú_ý}½NIª“Wÿÿ:öníÿ7³ÿOþŸ~øŠ±v´äÂu .CLÑŠ›T&`Qða‡J9t¥•Wã~7ðxËK=3aqüJ tÏFzéê^úIYÞ¯˜8‡>ÆaÒ¸Sß3Q¶éòú´>íÖöâuoGÛ‡>@nhõϽþŸ~úé·>þøãôiûÏÿÏ>=÷¶\nÇ·e1;†Ú¨~®²Þûˆô•õ.Cû6ßú£-\Ú1u”oꙺ*ûŽÿó.ãŽÿ™»þwýWÑ«ÿ}»ëÞêðÚ ºvõÿ›ðßeûÿÞÿõÿüß37F¡:’{ë"·tˆ·Kcâˆ3ÖÒL´ìÍ }¥—.Æ}âÊx,ÔûN–IY§ÎºòväÆ,PüèÄ ‚Z—]¥É pð)Ç^á`=¾OgwdpvãðÁ»íé1¤4|ÈOveÚgÊIWxB‡þ»óMC¾>‹œ¤L6å¾xýEø(×v’A\Ý$¬,xxMm@¯y÷òè8e{ÌëžyK—òÃc<Ú–GÙ« ;þçZ¿ê·ÿ]ÿ»þWÿ¯þ_û_›ù»ìÿÓ¿ûÛO^1ÆÀ cÊ9?†þ Òühð‡/?Œ±Ï« †¾F°²Kƒ—Wpx0¼"@t65üÊÔø7aÃGH¹@­²| f °ôæiPYæR|ÜÐPò§ŽÒ¶ÞI ‹?aõ’ƒ#?à…¶—åÕ\¢Ò=äÓùŽG•!Ó6UæÕ âx¶]dÏé/N^ »ôÉLº?©cüæKæB;¾ö’‰ìm£:nè Pյ㽯Míøgþt¾ìúßõ¿úõÿQç×M¼2iíÿ±Õ¿Íþç§rßìš\<ßÌ›4†š‚õ‰­³ÑW€ƒðãyXm@âÙØ¡«1GÊøˆËçÔW¥.­/:í1!š‚§ x u¼»?A•ÊÏ…òƒ””<àC9uØêÑ£x깚_¥œ:É\½:ëëÇ‚¹vñ×vŽg]Ú5Ǥʼ?ß$ÄÃ8u4ŽÎÓqÞpû®iâžÊ®~å¥nù­Ý´W=èvüÏüØñßõßuÖu_ߺ²Æêïú§9Ž[ýéÕÿ±}Öµò.Úÿ§Ï%w ß $’ßöëJ¹|FÙ;Ÿ%/pÕ@#¡t,*à‚“ÇÙÉ¢€¸vrÿž¢·þ”û%nuO±€y ý*`ŒðÅ?¼}âöN«À½‰K#¿ Ã{¤±´‘çÊǽ<éÂø+¯^ñìš]m³se·Hýè)܃ªOýüç?ϱ¡<èß®Ÿ>êκ´´óLJ°³ ñ­îI;ÈSùÛ6;gÒ8<É#¯¾¶qhퟰ=»ÿ3?vü3EòÇÚõ¿ëõÿêÿµÿ˜ýï¿ýÿþë)ãj7'ˆ˜‡‘a„ 8ÓübÞLþzîMƒN^­ƒ>wŽÈNÍ 4wþÀrÕG‘£©C«þÈ2‰@ š»\Âw@„üÊP´,ž#ËK>`ÅΗW,\ÇŒêàøý” ¨Ô©WzûCé“!(?q.ò^õLŸÚq]dÿð£óþ,²ÕUnquÜûª#Ìïî£#NÑÚí°£Ä°×PÇ(M™:0qïÈ·Ñ•'¼<J¹çG'^ÀÂÇ—S6cÂɿʓώ‘|üRfx¤¾‹×³“3üìµÎò'/ùÓ¾ÔxêÄ“;ï¬:[Àd² Fž´ÁU¿x€Ï•™/ìø«²ú1iSD½‘sÊ}m·ôÒÔÇS:PD&叿ËSžüÂCthF|eз-|å¤9^å7¾ã?À==»ão^ìúßõ¿úõÿÚ¶þ›ÛÿÜÁbGjt…)T®ÆÚ®ƒÝ4>…+M¹ã¡›Âbc5ڼ횈£÷4Y¼×}$4xñåì¾ ®€¯,Þ“F™¦MÂ@‰Ó-.hIÎäÛщ¼òo<È!Ž—£¾ŽÿPWze<âd#§2u­G¹ì¤Í· É©“,Êf÷Iý³û×—‘âpÿvfùà}ßûX§ sTxÉPZy\øNœ¼ºÊ¼ã¿ãoݘ›ÖgNpæš4óf×ÿÑ»þWÿ¯þ_ûO'Öþ?}ÿg?}Å3ª&ŸR­²à((¤°|Á‘€ñùëÏYè(\`)†Êy?Õ‡~˜21àCsœŸ ° ŠZ9;^Ÿ†×ÁýÖŠúÈ@–‰Wõ‰smÚÄó÷ò{bF ð”ñs1@X~iÏ%{Úqqn½‘ý’‚#áò¿ÄH<é“ mÓ¦¼¬”l#Gû[žcÅàìàÏ•oe¿‡ÑDæIŠÒíó¨0¼·;;ƒWËG½Â}*ÏŽÿôá5tìŽÿ®kc×ÿêó€nˆÎ¼> ¯þ·ív°L†–áíDaLk@º«ƒ® Å—ûA³ ã¨lfSvc”µC¤\Wˆý™z ,¼§Ší ÔûÞ÷¾—I‰ŸK㌽üÊ€p&¯tüš¾$5™“Α7¼¯‰X‰ãáS¹ú¼uÝ7$éÊ:æT!ÅvÂyþœ*"W“Ðdgj€¢~IŸ4óòÕÿpC?¥Ní(ugL¿èk€¯î²“Ùš9¾ú¼éU)I»‘œ´ù‹®å+÷ŽÿŽÿ®ÿóášØõÿ|4¬?<«ÿ/mºú?±öÿüÚΨµQTûŸ7¹ŽïŽbï¸:ïoêý Ðt Ýs´æÌ;áüÆÄïO*½þàÿé/ S0aA{Z¶ôBçÛxÏÇrÝ¡)]DwmOž×9œ{L•/nv‹^Ïn’l&¯]¥¸iÔìW¼±ëÖ6adk=¡Ÿ´ö]Ž!§¯¼`4€fòî® §ýŒ^½™¸Ch°ÐÈ/-‡ ¤µ?ñ-PÖÆ‡KiÄ$e„òWŸhâÁ¥?vüwüosx×ÿ®ÿÕÿ«ÿ×þŸS vó›ÚÿüáÄ—¡(€‘/¿˜ßôãþÑõ9ò£l{ïHEÂw  bøïòfÖíÖH/8’$ŽO€Â”; æÜë`ìÑrå‰?0„èÀ¿Í·tï™* Ðâ‚~hð(ïm¬îAi[侎>Ë‹läÈøàÓúäy¸»«-Ú9ÄúöAËñÉß¶“ŸÖéÈðÃÜ éÊ·®süxŽ?ñi¹´Q_\ôáMni‘å€Pa4ãëUù&¯»n;þÏßÚñßõ¿ëõt)¥{¹êdÑÕÿÏ›1µÕkÿg£åûÿ“W& ƒÌÙyájx¨×sT§³úv^vSæ‹€rÈ/ o†}Üù{“`¼t&lKà ÂK~ëƳu¿þâõãu˜=6u.O€(ˆyŒÉ¸¦²ÐQÆt yÄñ°8²Hçê'">ÿ(ä¤ãyшûQe®üùåÕ¶©°mÿ¡8œ:íLu¬¤ë mÊ„ O%™RädÍßÉïTFr•çŽÿ›ã£KõÏŽÿ®ÿ]ÿ«ÿWÿ¯ýgj³køuwûÿ °²‹2; ìàÄð 2< áÜpÜk²£tOW T/€C#ÏÐÏ£l“¸‡cð,usÊ¡è ò¤QzdSŸy “,à†_ÛÜ ?¼Üort'_9Y¤7øµm U¶v ¸ü¦¹ÂL0•ðU62\è[¦a¾vh7¿íR¯ð½ÿÚž‡¼“Ï)ÇÄ‘ 0 ÀKú„®ö·^¼<ŽZ#ïŽÿŽÿ®ÿ]ÿôÑêÿÕÿc7ض¥¶‚Ï&­ýÿöß=׸ëDᇛðý%š@L 3ÚÒKËÎÕt¼ð—RpA&`fDø¦Ä9Æ»’¦t<ÅS÷ì 0Ö ê¥Q'".ÜŸøyá>Õðh¾º…©‚š/_ä1y“€vÕMéhÉèéidñà'OÀ¦=E5ßš”ž ìx^åB7ñ¨{{ކ®ý§½\å5ñ9}JŽ~ºÊ.ÜðìnThæ"Hœœí'}¥|xLøá&¼ãæž>Ñ?;þçÃÁ}¾˜?»þwýWG¯þ_ý¿öÿØÿüØs *EÙGZà t»!Ò î¤]é1þÈ#®tÀGÓ¨†V\™– ó¹¤Ï…óœã@_r W'ßS.¬OÙò–ι7æ'}|»PSÙFò’1m˜ºÕ4åq)ò@N껀”;rIç𠃶ýʽ.‰—,ÃøÚ!:;H}ã<þ!ËßóG]mƒýWÅ¥Žö§´|ÃðtÙeÔ}zácC+åÁ—\ó~ÚP׺K×øŽÿŽ¿u‘ub&ÍÜé<yÐÉ÷ ÂС @š´‡lÞÐ>quÔá¡,yRÇdè éâèåÇ O®rhoä¼èr&ßNÚ{Ã#}4}ëµûÀΩ‡g§Ç„\Ë+'sÜè°ñ´19Ïcˆ¾é©ç*‹¬é;þ‚wüwýïúö ™¾Ýñßõ¿ëõÿêÿµÿ¬ýÏ{°`“è¾{Ó°c$'FgŒ6£\½qôw•GSã. y²4u0øšÁÀwêŸ:¦®ÆÑ¶œw?‰÷Û}€[A°á7 û)Ày¯p.‹kß<­S=øÙ¹(0›Jòi#^dó‚ßNþ••<\dŸlÜyÇÖy§Wê¾ä‘§|ޏº9tžºö›Üðo;.zåPŸÒÏå[_û¡|O_Ÿ:Ú¶GZ8šwüwüÍ„]ÿ»þéè‘™«ÿWÿ¯ýÿæöÿés‹ñí"ªaftà£@@^·ÈìPŒþ݈+ÇÕhüñÇåoÇ;bÜ,]€A¹òö{t¯?8™^À¥«œAÿàÅ\8´A®>€P9/p2ë³+7¼¸ŠIwKý}AiûFy N>P5iíihs™~üäŸÄô_ë—D~®@ìÔÑ1 ¼Z7:a®í ¿Q|ü>ò!íº„ñ‘pK/Ey¶}-ŒŸ>Øñ? ¿ó{Ç×ÿ®ÿsEbõÿØÕÿ±ÕlGm7_ü]·ÿ¹ä^­C¸Z>…ÒÝ“d΋ëÞ™Ò (ð ¿Û7qƽu íË2 ‚ODx©ËÃñ¢ð™ò⎱ ô”« è+ ŸäȃÎc!¤üd’qèÔgëPÏ‹kçª@Mù¶ ˆSNZÚùv¶\ŒNxò´©à$õ§ÊÓ/䪌dj¿‹\ê:Áã㉎¬h[^Zä˜ãÛþ,Ni+³£Ýóž/Ç“s4Jî)‡s˪¯ž\ùðwüwüÍ—ÎKó£k¯s[Zç1º]ÿ»þWÿŸÍ‰®‘®‹êokfõÿŸ¾ýúÁ¼É!í€ókÈ›,Ü'ú¡Éã(U–Û„’Ö]€¤åå}ñú¼ Ô„³ûó óJ\Z>)@Aä02»^äÿÉ“n'KÅŒ@vÈ3¼{_‰l`C^¾9”´††<Þ“Å÷HSw}mPWâÃÃëÈ€xi?|}½cªåôMœ:æ‰Á¿rËk9ö”t<”!úIx"ùꬼx”Nú“ÓGœ´ŒÓpðÕ`ý3ìßÉwü£><9ü¸ÿ3vü¯y:óp×ÿ®ÿ~0¬Þ£;¢£Fg¬þ¶«ÿ×þÇZ1—ÜEbØ`b ­ÿcpûXT]Lèß6Ê¥ƒð*MAE™ûKîo(:ú–oY ãÔqdîAg¦ôÚ ihš¯|ùE¢#VÒ|Â:Àæ€+÷±‘ÖÁ'{A‹¢áE†´ÎqàUöúù ˆ¢Q®|„ÉQУ¨¼Òñ ˜Âvþœ6ÎΕo¶M¼4ò ¨„[‡°2õÑËó-K_HЗâ˜á™¾›Vèÿ–“o'.<3ø;þ;þÏëÌÖugm¾9ï2—L3sm\ËHßõ>ôèý³ëõ¿õTÝN¯×Y/ìãêüÿÛÿOþñ¯^Ýlx¨BDÆGI¢5jħùoìÀ0â,™(£˜ùèÝ‘’3ßÖÊÛŸ§Âõ¡©‹‚%”ºFqG\€‚´< Ä=Ò¸ò*;DÜ9Æ;»_‘oxq96›òäKüÂåWøMZ}ùM¯ø š¶ÝïfIïBBÛ0™íÔµŸ[Ÿôö¿4ùI>ü/¿:wßðܤ•Úxç¥G´ï.kú?iÚo,ÿõý.ô­?eÑF²r¨[[vüÏÜÐ;þ3[výïú¿tNôÒ¥›é‹ÕÿÏ× è ý³úÿÙf³5]:Ž­ù7nÿs‹RŒ›Fi@C<áîñÛ`½ÉáÉNÐÕ ÝÂ.|¦ƒï à¸*·à¸‡•þð.ä胾»S , î’«_µ'Ÿû"x ;Nt,¹G¶¶òÍÚ~ü•Çë%&N6ÀB_Dq ðt†°¨S ‘fg+ùWŸ¹¯¥\ûáÞöî6‘Å£ß}šùðåyÙªö÷˜ÒOûèW|Ü»÷EÂC+/|t6O_¤o?á$L\]‘eÇÿ1ÿõÇŽÿÌý0ói×ÿ®ÿêYóaõÿ¹†±úÖÛ \¶†îd<ïªý?ïÁº +%jǃ¶x€ÆIPìl)hâb}8˜Äô«sM;þ»þ´vý[%³6<ógtÇêÿcÃVÿŸùÀ6½ëö?—ÜcD²N¬–ã4fá褫14Œ°«±WŽÑ‰áZùYo“–wåãU#Žhó÷žûæó¹ÊÓ2ñçÎTA|rÝóÕ0ÒKƒŸ8þL>š‹è$ yd$¿õ k^ÞÍåH.`eÄ–_ù•)½ÅöÕ—ކoÛ©ñÊîÚøœº<œþÑ|ЪƒŸü¡ïOuµ>4ýf߈lø {¸SëIS–k^ÃâdØñ¿vþ¦¿;F;þgÎé¹bNïú?_"ézÜõÿ<7ª?Wÿ¯þWìÿã5 €ÉCI^F€ˆòt1p™w#«|ý±xâ¦lù4- kÒíÚ BÓñâC?…ïåÔ«œë«JSPQ0ƒÚæó¡ˆ¼ž`êAç ÍÔE;Aê¸@Šzš†Æù¸8÷¨gÂ‘éºØ.ŒžÞS¯2@(_›ï //_âÜ¥"¤ž#ºÊˆŽÃ[ߤ‘ÒðE«Íèµµí®bG# ]ÚnGö¶9_4¨Üjú¶ùŽÿŽæÑ®ÿ]ÿ«ÿz”Žì«†„Wÿ»s³Eú†ã»Úò.Úÿ÷)Ðc”gÇäýjÔŸLžytLŽÚ¦¿ìŽØyAÃ@3§ᯑn§Ú¹Ñ¹ éä9j|zïìþ¿ Ã)['œ£Äð?5H»Ótr+C²p¢îI?·½.çÛƒ×ÎÚòüò$x8r“/÷€F\»ä€vÃÈÀTù§ÑÝù ã”y´G~¨ÏŸÒG–Áx¼<¯~(¯ŽÛ]¾WV9:@ñý«ÿÏØ‚u|ö½^údÇÿŒçŽÿõ»þwý¯þ_ý¿öÿ·ÿO?œoL5*@P¡w‡§Æ:gì ÷äÛúž5¹$4’Î4 Æ¿eñC3Á€³1ê@ˆ»I@Aéщ3ò *äqäã·ð ÿëþØ„,|ÃÛ±Þ´«»UÊà)¯ ¤´©ß.Ñ8áÒUt•GGž‚OiÙ©»xË/}ù‰U9Î3‘ëôavÐF~rrŽ¥Ô‹|<œ4ü€ÒÊÓz¾= ²àÖµŽSåÙñßñïœÙõÿ¼“kýq]GÖž~òìú_ý_ýÙµ³úíÿÛöÿé'ÿôׯü–ŸÉQ@c—ƒRA HIg ¥éBF\^%Dá8[õ$šÝœ¤M).”Qx)‡Ww¨ºóc¢t }h€IâÈá…ž˜áËñÉÖÇ]!—PÅñÂá1ÑGÙ–“ÉW/?å´cÂx=3´ú!òN˜Œ•—¯^ý•û9ãŠX=é»)#-m"Î%?p¤lét²w  Á8Ù%ÓûêÌ.ÔäuL” à%ÓðÁ·iè}ë°²}5¯æÈ¨/“¾ã¿ã¿ë?ëf×ÿى׫ÿWÿ¯ý?9›5ñ‡Úÿ§Ÿü׿~ÅÐR@É0²À.Æ`ó-6>«t÷ˆ®AN.lpÀ ºc|áÑôp€"¾äÖ÷dÐÆ!L¸»wƈ껱ðQåvïJ¸ý¼ã?à{Ç×VÙ¿þ³ëõõ½ÙQ=J§ÒÍâ«ÿ¯u3¶§}µöÿõ·æ¬î[ßúìÓÏ2I¼YÐê$bÄcÜǧd<™\SHºŽ¬¡ï.JAŠ<. m&à =`LÜ'g?^ø{ZŸ¼ð¹P–óVóbhÔ§Êf7lÒ[¾²ã…6Ò]òOËR‡t÷.Çý­Þo^}hÊC<}ôQêÖwÚÆ‘Cº£Q  o ªm‹ O“æÚxÚÊ§ßÆ÷³Bíké‘Ñ¢¾Â6 $yÕ„cWr—–Ÿ1ä_—ñõÇ—¶ã¿ão^îúßõ¿úõ?ÛP[ÛqÙÔÚPÖ³6iíÿï¶ÿOþŸ~øJ‡2î:±g´9»#wöòJ®—¨Û±`9‚:w®f„r|g „ñVG€ÓŽ«N4â|ü„»3•òSoRi!$upL òDvnÒiê@ã¾ó)¯\üžrʨ7°wuÍ¥x0ŒÃë„ÒüÈì]ZêоÖþC­¯¸ôÁ€,ù\Žç&Ü÷VU¶äMºòžò,˜o½xy2fãç~ÕÈTE‰—1ò€¹!> xÒÉ…?‡_úlÇÇ׎Øwý¯þ_ý¿öŸ}ücíÿœRËÓ m .s<á¼ü³c€}²r5»vwzü–]ïÉ£,6ØÁJÀÃŒ %å¸ (`À_|0;d9Õ:õI«‘×®€âÄηÑÍk¼@ìKGgCƒßXÈy Ä”©óL lqö's´?nÊjWÁZ °ÔVíÀß±dëV½rŽûøœß o}dîó­©2<|õ·•Ó6®å&ð=èßv½o†~¤Ê®°‡Ö¸h¼8ùÑØmã^ÎN¹»ƒ2*³ã¿ão™ »þwý½úõÿ肵ÿ¼ýÏOåÔx(ÀÀâ¤'pŒ~ïì×q”øïŸ×0ÜâŒ>`c·@ I„í€aP0q>ºúd€û“îÜ +-^wz̽”“ë¥í¹Ú4‘ÞçÒVrªËÃe7ëV`™oY~qî„ZSÓéÊ0•·ßŒ¬Ì@“|r ßòŸ™òÚF²ôΕ°öÚ•B£\i'# ÊÏéèW.}8»„Ê“MïæûiÊ-¯é;þÏ;úyÇfF–ïY¿û®ÿóíá]ÿ«ÿWÿ¯ý¯­ûì fµÿOŸÌ{°Xf[¡ J2†€qá½vAi÷¾÷½ï%½à¤†;Æ{ÊOfŒ¿»Lò(dyÞ·›$Ô1ñèã_»DÍs—IÝd÷ ¿>á?àã©¡‘‹<ãÈÞöð•“ŸvO[9e .&3rðÑ‘©ã*‡ß:§Ä9²ãÏáõ¨gâ8*¹†?á_~úËô½Ý/ÀT9év8á¶S_ +Ëi8çÎVÓ[†ùJ'“Þ±Þñßñßõ¿ëŸŽ¨N¨¾¤Ôè:dõÿóNÿêÿ³9Áž°;±=lÑÄõÍÚÿcÿŸ~ü_þý+÷s, ÓI ÷€†x:Ì¢Óa\»'€Q/^ë\»*Œµ²hùÀ„¼/f×ÇöâýeŸŒ{½r¯‡ħ\&íeüÑuðÔí(-4®ëå·ñÀEb.É<áÈ@;i¼Ê/´“ÀrÕ‹7y†è±ó…ÞnZÒGFåðWÓ¯¯»YÂm×0‡_évÍìná™~š#<|õ߯Ï7Ãð ®2£IçáI¯S‡“_çn–<íjûê7È›Ûñ?;‡;þ3Ofê˜Ë»þÎØõ¿úõÿÚÿÚÓ?Ôþ?ýx^4ZÎ÷n†€Ïù&ÝäùWp OýÓO?c²sSÃN9ÇØO ‚7ùåÁ¸›¸ò¹ø.È…²aŠÐPë7æÈ¨[ZÁ‹¼N¬c¸ìü®{Hxª ]Â7¿à¡üÔã[‚‡ïáSþwð’…0òZÂòø§ÜÙ¡ÆOzêŸìh¥À‘ ]]€çÐrÒÃ[ËÈ?OÛÔ#Oix‡þ*°¤º`ªPŠGeAžõ'¯m¹çÝÕ¾ã(†îF`u@ØŽÿŽçÚ®ÿ]ÿ«ÿWÿ×~­ýéü£íÿÓ'?ûé+,*ryü|#NÜc—É…k`¬maFÜô €Ø ´Ñ à(('ìr5bÇÆÅu@ãx*zõÉþðå‡ç==S^¼ùê©¡p‰»ßŒRÇ=çHǯLÀžp@àÈÂáK~Ú0ihZF]ÉŸô‚)åŽ;€+u]˜Œ J¶Såé¿Ï?û,éî™É7©³«8mÈ¿I«KÝW¤üÊSrÃdžHx¥Íâó(//m›vWNúùòÀs<´;þ;þ»þwý¯þާ=ôìêÿµÿ¿Ïþ?ýh¾E ;]È0 ¨äÇØ^†Y¼».€BŸo<îñþÚòÿÅ/~€‚‡]­‚8ul<ø“ °KŽ·F6å Š„¸&ý€º0ÈœºäØ+ˆk9÷ÉZÛÒö)gÇîü'Åé¿{?4-™þŒ=jÅO›|#ó;ßùNúþ—¿üe@‘·±“íÛ®rH×Nõ©`#[óÉ÷ö·3¥ÙÅâž2èëvüˆ×æÈŽÿù@¥?Ì“Î}ñ]ÿ»þé®:/ºè²}=4ÖÒêÿé¨ÕÿÑ!ï’ýúá?üå+Ê3¿Áw ¢Æš·€t‹ê®lå‹çhëx–rK³•ùp~™ï¢9?üoONÙ¼™|Âè8»êmâ™ú²_Ö*:šÏ»†øèãÿÿ¬Ç]ÿ×rÜõ¿úÿÌêZƒî]ýÿüe4}Òþ©]gþ­Úÿ¼hT£jL ª¡žYpŒüøµ¯1ÖâãÐ2Ä kÃø ÛaA%nwFDYNZ'—O?wg·É1?òà=åÔQùâ/g' /N\ØŽŒúÝÅÊOÛ p"{ê9zÄ!˜`òCÉ×±œ²d³3U¾¤&ûtL8u\í áõ§m$»Gœ¯~áÊ[Þêê¥yõäµ.UÌòLYmäš—Èœ^MìJ:)ê{û)ù9òà×¾•®2Oá‡Ü;þ;þæKç“°¹bî˜/ ›O»þwýÓBæÃêÿÕÿïšýúÁuɤ9aÎ1\.Š 3´ã’Ç`O¸J´ÀH²…NÙúôú(蔿@£ÍYtxB¨¹w¥ÜUž±Ç瀶Ê?ò¬lŽ¥á÷ßJ?Lj×+ÈÚvá÷8NÐUùå\ù7aN9|ôü|*ùêFmš«žðºöeËU÷#!ºñ×nN{¹GÙáÍ@__Î[ñ!zm—ïŸì\¤žõ“8jô'G®»/½õ–æ1~Cø¨Gù«<*ƒðŽÿY÷¾Üñ?GÓoµÕy¸ë?zÏZÜõ?_rZýÿÐÃlËêÿÛöÿqÉýnjx›=€ÈØUƒ#|ç)ð'̨عÀHùÇxr=†çÆ›qVV9çÒ=5P|÷°ú2êÎ(%áîxY ~¢§ß}o*‹LÚÅQ^MpxÎeù)Óz´14@Ä<€Œ]ùd‹üC N2> ¾W» F’?iz.<'Ì/¯d\*Gò†Æ»ÁÊ/`sØùö¥±ÑÏå£×øÅîQÇ=¿yü»\ K;þ;þ×¼…ÜwýïúޏtÍêÿÕÿlÒÚÿcãÙ^v³öšÿä=X5¨|‰5ÆÙ™ÀJ 3ã@“…æA+Æ„bœ•®ôîØË£Ã» «B~ÁMd¦ýá°#wÎl'þþ€¢:zeÛ.q`O»^ýC4¥»‡«€Çwî`ᣠííî.žò=Âm+š^ÒOø–×¶ñ¹/à/túèF‹o]eèšÄô˕ٮ°ôæUž–Eòvyu”~Çú{Ç×?³ë?zaõÿêÿµÿßÜþçMî *P@ÃðZHC+aà1‰I/­4a†ÙQ—rÒƒò-¸Â£<ù€Š) Ù‘á*Œ?z¾ûI|õ@LzÀÀÔ8ÍM@É}ª‰ÛûlÞ/u(xãç±óåÁ³ÀƒÅK~ÓȆ0ØòmyÓ'A• hœvM=9î¼êk[‡uøºV¹¼NÓ“†gÜE«êU–‹,øN:ù+“<õTnm˜†$n«¹y¹óvÑ*“>:|<ò“ˆ.—¶­ôÒJÆgÇ߇†s¢kÄÜØõtÝ®ÿgBϘ#æÇêÿ£`õÇíþÿ“°ÿO?úÇ¿zePkXJÎ×ø“¿Ža•Æ·[å˜ ˜° Є~îDY4hB7 ‰+¾ô\ ÿë¹³õòÅË”¢ÐQÐîÿÔ= øÜ­ê‘`ø™„E긇çðÅ/ÎOûŒ<wžŽ §‡áøD¶éƒˆ ¼©S?ØùŠÁ˜¶û$ÄÉ}úí˜á“v /a0Þí‚-ùèË“_Z>ÂäÖç +_¾¥k›‡ôÑ3Ƭ´Æ ‹ºòœvìøïøïúŸ²ë?*#:gõÿ¹ûºúímõï²ÿOÿûß~òŠ"©S¨Æ±-¸¤l Ê€ ¾'ÆhŒ5ƒíå–WCŸ{\—1ïQàdp2tÙU‘?¼ñ ˆà£~ûU2C+¿u“E<2:êXÐ!Œö‡^šGm 9ñQî&˜iꟶq½„®LÊɲëÇ£”O:T“¶è»i‡Ýª|»qhÛ†/®2m4 í3ùéÇ¡m?´½ø†ÒÑë_€´÷²´…¬å¥‡^؃Þ].}Gæºæ+‹žüüÿ3Owüwý[+»þWÿßuæêÿµÿÇúûPv9öÿ“øé+;?5¨²jdcˆÇ¸2Âv´ntÐ"ÔÐ K+ ?îküÜ*XJ¾¡7`A¹ÖÀ5[_ëWöÓO?ýÖG}”]¤)”rŽÌ䓵ô^“öbvzð–OÖ 2ñ¨‚³o{C<~S×KÙ€)_´+ müÀ“á”=:wÒÛ¯]¾‚;íÖwÆÔCž€$`çÊã«ëîÄ¥RäáÎã¡ÕÆ€ËI¿¿HúÚ¿á­ÏÛ¾]ôç;þgMu¾˜Ÿ»þçÃÆ®ÿÕÿ3j¿Vÿ¯ýgï—ý?¿ExÜC±Ö‰vX„ Püˆ2ÔΠ£÷XÄØ_@¡ÀJ^~S0 $ÀaòÊ‹oÛóÆrpeVwêóÓ2¯Gy.¹¨ 0”m;Èë(P@QÙ P¤£ç Bº€´Oïá¥ÄïÂR–“ÆUöħ¨6o.Ççço†Ÿž‘5¨5Öh(Ü^(ÿøãó¶ußÎóÖõ;/áwá¾]šz2‰&¨‘ß´Œ€;íú·3~v´wý¯þŸEÝI§®þ_ûïËw¿Ëþg+ŠãR¨>5˜D&§;85Ìô|ìxÞÝ$î\¼ÿ,(ë‚ å)î:lʳyÙ!:e<êîN](õàÄ9ôÛ}vˆ\jÇ#è¾™8qåb¦ §vi>ž.š7ä¼@9€å¹â‡ç¼$tÚ9ç[Œ|qŽ,~Àz.@gÒãO½>{=m!‹¸Ý¹þN"‘‘’Ç@]7Y%¥ß&wF,åK'=ùÃ3a}2ÿ ¨Nî”'ó8ã²ãÍŸôÈ(ÿÌ)ëÜ5:—LHóÕ¼1Gåïúßõï¸ùpwÑ‹“`î¬þ_ýß¹ÁU§tnü)Ùÿ§ïÿl~‹i®1ÖrJt¼.‹…Ñw,X,¶|ëZ}øC@é ß°á>ƒç^V¸ñò® v(y@ ¯ø“FrÅ#Cw´Ì#0|#Ïäùç®gÇH##~Ö½(® ¨òà믡AwOç¤áÝö%¦díä¿|9 p^†*\uòu|wϤ?ÚwàÙ6·‹×zÛ®‚.rg|FÖìâÍ®¾½¸¿ìâÍ‘cþ mêËŸÿÿ3Mót×ÿ®ÿÕÿ«ÿéE6gíÿ±—µÃÅ ô¥´‡ýÿÁüسÄ:„¹{4 %Ô©”¬§÷‰D¦i 5Çh÷¸ h¬zŽõ€ª«¡)¨NÞËq©Ò*8žêÔŸŒ^æXëWG–‰«ƒ,Žò^ÌëðrNû#>QøŒ/þíÉ RÿðW'ÐòÑF¦IãÈ(OZúd|í.š¦óqõ¡½“+éxL¸¬ÓG€2GpåMvOøÖC6émŒÌï{tÒÈŒü~¤:á…_먼I˜?);tœ<eÇÇ×ÿ®ÿÕÿ«ÿ×þMüìÿ|‹ð/_1¤Œ®‚#Û'ˆÑžtᱺT \ ®ì5fC >>Œüììð9Ï„[š\u([0’ݘ TAd½UŽ °9ÖI¹)_@˜09œ™â¢î©‹Ìú ù—ùn}"þþs)~þ•OmiâÙ¹¡[]h±;…t`)Ÿ&YÜšd0FjžÂ;þ;þ™S&Ï®ÿ]ÿôݵú>ž\ýæ[Â^°7l?¶é²ÿX5¦€ŠN(Ð*8 ¹:JŸñ|(KÉz‚—†ú”dñåáÁá+#­ì$ä±[–©y »4e;0apñ¨¬ÒJCŽ Þ b^7yê)`Ê'¯ ˜HHãºÃƒEÁϽ®iy#ÿÕÆ–Q/>ú¶±“(àé’_Ÿúù&­—†Õ5 È?<ìfÙÉÒï>1 “þv{¥ ã”確|idÞ€"i±äíNúäqü<;þ;þ»þwýÓ9ãèµèíÑ%|·úõæ;3¶cíÿÁ8l¯5r·ÿXY55²—Ñ= é€FÞîQêr{ŒºÎŰÀÃ¥ò—Î;§æ"¯À`ˆbü'ì æ0hòL¸<•µœÅ9~ÃI¸þá3þT˜Te»ë’„aA¦Þß’O¾#€ªqò)ë¾™”A']9.ü'._˜\m—4ñ¶ÍnÞò›×+‘ßC”?OÛÇ×j·4õOZyè| Ì”i¥®‰£ÃÏÓø$&>iWš[¬;þ;þ»þwý¯þ_ýÏb¬ý?›Pìëï³ÿù©™±în£« “·w°g —Ä O-ÐÀ(3üÊã+½Â(Lzëă«ŸÈ—Öôúò+[Âþ ]Þº>¬>xÞÏ5õ‰[vÕ¼’@º»PÕÝáGf>§½ý”Vð¨þ€áË+m›8z`H•›_žM×?“˜þ)xùõu܉&èw|¼ä·?/J~êV¿¿ó_.ùI?»ƒÉŸ¸ãX„ÝŒld¼êïXìøïøÏd‰ë3¿výŸõµëÿ¬:cõÿêó`íÿ±¿¿Íþan±¨@IDAT`es«#-ÇS5ÈvJì6ùôÂQ¼ ²»Hî ‰Û…ábÌ/fè ú­µ‚ Àè)øHáùcÀ8þƒ6)Ïy¢UþG¶ô¤Ç (ɱÜðÀÇ. 64}üQÞNÚS則Gšz¤£Í%t@eâxy3;þ©ch‡ø'Ke|1ßœ¬”Á½¥Vq`Ø8ÊK}òÕ­K}ã1ñKtè%éÃ(ÝZ¾òÕÇéÕÊÿJ“zËíøïøïúßõ¿úõ?[±öÿÎþç·†x:4ÖX·^?Çò\q¯¡·Ûâ5î:lZt(Xè]Ÿ‚ voqÚSçd ×sÙûľû@Ç08|&ØOÙ.³“)ü'½ï“"@âÈΛàýÜùÕ'/;KxŽÓ=zk¼@Ë[ãÉ\~iëЫü•©}J–öK˜ã½[é^¯úÃcò¥ë”ì¤] L=S¡ 2ªG9íàÒŸ ‡WÊN~ùë;»Uú¯Êa³ã¿ã>Híú?ú`×ÿù ·úõÿÚÿonÿŸ¼¦®¶ÒQ€Œ¹‹|Œ7:Ûa 4Ãì évujÈb&½q¶>i0Sž¡÷ÜÃwãáƒxò…‡ 8À!/YµÁN Ë3r‡f|o'×#xûÔ&~þM{'îVÛúÉ­Ü•¥²¥ì%gùVææ1ÜdÐwòô#ÜtõpÊÈG+mH²k(cEí”8Ž8U6~Óù©ü~2•V‡Öƒ‡;þfÀŽ¿ùxæÕ®:n×ÿµ»KGŽNZýt/Ýšu¢_naú5:5úúä­þ·ìÿÓüØsŒó|b½^o`b0¸#ŽóÒÌQ2Ò‘1üŽ åÑŠ›@| sTX0!O9Gd|ñ‚ <84nâÿ*ížhhr×ê6±Ãd±K…xMx;[€9…§‚¬\æv,ªm#¯{\Ù©Âç’‡tòíH  ÐÁß‹D(œ £kÛ?xå™Lü´ŸëŽ›0ù•÷T~< ÑH‡%ê­ÊVYùí; r*U,iÒûœÄ“>’íøOŸïøŸ¹bþíúßõO—¬þÖ±«ÿ×þÿ!öÿé‡ó¬ô9öã 4Ì[d޹;†,] ½cC¯!° â()74x¾ÍOA¥÷i]ò€†)ø¼ È?f`Hn†@šš:ò•¨k¡”~ÆÈR?ÐUÀs Âêjzï¬ùC­o|`O^û„ü¾@4BìŒßãÌÜkÞ.Ý«²ú™k=m‘øýªtcÒÓ§“ÖòWvúä^.ý|ñì®Uå¿Ó£Ûñßñßõîv]îú_ýÿ°7£GWÿ¯ý¯ýŒ-ž9ñôý¿ûñ«‘1¢2ÖáÞµR@Ü&aà=W@8ÔQÆUDõå¥ì‰ä:qrðóÚ„ùö›µÔ1õ¤¦Ëo½Ã, Äö½|ÛÖy8€pð3/¯·¼Kñâ€||"á„ê¶»`6á¸ñ+~¥s à¥Ü¦§äW_žÝ»´ñâ/²µ¿ô…§;ySyúø´|»Sÿ´Ån_éÃCŸ ¿ŒÙ„ùÒÕD6œøU™º«%½íÂW<¼&Ì ïøOGÜúiÇ×ÿ®ÿÕÿtåêÿckÏÖþŸ »ýúËþ›WŒ(C 4¹Ð®ÃáÞ×)P€˜ôÄ/,\Á(×Pó=MC×4¼{‡¨é|=[°)å‚úy?•ô€u¬­£é¾Ñ—{`ä¾øØmrLˆF{r9aeñ펕ü±ñ+ zo{W'§Ý@_^vêðŽðDƒ´”Ÿ°]3OútdSV=Œ6°ÊÉãði˜\\Ê ¯´Õ7<‡Tþ¡è'\Yùøèù#}ؼ‘^W™€»á¿ã¿ã¿ëÿè(kn×ÿêÿêÔÕÿÏ÷…Ùö‹maG„×þÿvûÿôƒŸýô¬£jðÅóL@b:1€b|ŠÇÏÑ<Ét¶|W°°å‡Aƒ›ñ‘?“p%,“ÙD&Gñº&|èXC×ú*×Å&têK™!p(Jå[GËÔ¡¬v¸C\”ÞÊk Yôý>uILJ#0Hã®BËÇ¿ÞEOºcM?m@6u1lxŠã§¥¹ ëÕÇüôÿ€«ÃûRL•ñÔ%~EÒ¿Fv꾜úwüÏ\Þñßõ¿ëÿÇN¬nŒþYý¿úŸ]gÃ.Û$Ì­ýÿöÿ à ÑYÂvI,,FXŸî#$,/€kvt Z˜z/ôDc§б8Ñæ.žÀ ‡‡Ý+uØzmõÞòx=Àù.@ ¸àB>YDýy¦@ÚeçJY;Ráú+à ÀaÛªZ¿cFuŸ÷aÍO_}Scw‹C社é³iÓL!¸îDù)œs‰6¿#8YéÓ¡@Âäo~úÇ S¹îd‘ÍýIþÕ¿•'…®?wZmßñßñßõ¿ëŸ>Xýÿ|ubõÿÚfóµÿyÑhoÀÍ€€/PVcθ£j>`d7h@IÓÑ< üDînYÔCp4DÊ¡çËçû¶Ÿz¤K«lä"“´¾š–NY7vÔ?D=/ñüèÃÒÆ‡LS»ã½Ü㚺¸Ô M}Òñ¿)õKë±æ_~qúaÒõAZëv1ˆÂ_»ù½ø~¯-þÒŒGŽ)G| nñ¡Mx|ô®þ=Üüòáü!_éwüOßé“ÿ3—výïú·Vÿݰúÿàƒµÿófq¿Éþç=X ·£?Æ•ñ`ÃÃ2 ÊDâ]Ža¶S$? gŒÆHžøe²îòœ4u¡åìVy5Qã79úñ©ð9ÊU>h/À͸‚-aíªldÍ·åæ¢º²ÊT¸+ÙµmÚsµ´€TA“I…‡òžmÒÊ[¹n›¶]ݹCÊœ+´Êi  —öHä&M½ê×GvèĹ©m²Ÿ•´Ö~h®¶6½¾ö’aÇìŽæyeN˜æg×ÿ®zeõÿêó ºa|ºaíÿï¶ÿßf\¹—ã ì(-8i|i:–çŸ`Œ£=Îßüèó”)¼ëðâøÊ¢(ö¦0ßôË >ÑN¾Kñwìà LÞ9j; }Û8‚T7Ù2+‡—¶‹kó°K“—6ŽPmó]i§ŽÒ·x´ñ¶rGìê‹ö[ûè”?ÇŸè#óÔá§KôºÈ:mR`¬“ïyÛ5aåZçŽÿŽ¿ù²ëÿùË®ÿÕÿ«ÿ×þמÓì%Ç~Jç¤ý>ûÿôãúëWS*gŒ&p,Ø9jñç.¿5OYi*VN¸t¥åéÝÄ9t@†‹èÊr 4'­FÙ‡2 açJÞ]å¿üj¾e8ù/çº6rh”€*¯¸Ý ,.á© á»Ð4öˆ²|䩳>¾îp‘¯(ÀÂôCÛ¡\ëo[}“SXPꚢäËÑç€-=ªMÊsü·²¨å.Ü5•K?ßäœüáI&gÌê!׎ÿôÿŽæ y˜g×ÿ®ÿ™ t×yAwH£{VÿÛ³úÿy÷Û\1?ÌšwÑþ?ýoÿñû¯|{ÌÝ%œa™ÉŸì¸Ì¢²p<ÀÇsYj·Åe‘9îC‹Æ"TF÷v÷ þÝYBËeâ5á–mÃO6´Èy-våÐóÕ'?á¡í°"äáF¾çá&ˆ”F^åC#]ÜN™Ëÿ©cøp9®›—°¶o‡.²]»gød+¹çhôtâi’¯v åÒ–«­Íò©â:e®rè[6ôó§÷ÆÐk?™8»€Ú³ã¿ã¿ë×ÿêÿ±£wWÿ¯ýÿÿËþ?ýðÿêƒ[ÐàþQºtf>þeðÀ&-Ç 1FÝ£Ü݉{Âû ˆL8FýÚ1)pê1Ev}.ð@4u”χós7äÁG^@Ã|º®S–,Ú„ðÅ9ß–ñ‚1P™Ã÷¼Ul@”Ž8ÃøØešBÓX„/×Z“ú¦¬A÷§ÒCKöÐ^Ǫ-Ÿú¯¾BÓGÝ-K&tÊ“MËÝÇJš<ޝ¼2^ Á¥Ì¤+ÞÞñŸ9›¾ÚñÏ\šyrŸS»þÏQâ®ÿѦ«ÿWÿ®C’‡=¹»Ú¤Ø–É×ì.¹3Øòá1ºÂ>Ù\§“¸Â÷ÌŸôëÝÐçHjøö˜«åRC~•ÑùÈL¢>®Eã;ÒBç7sohÂò >;UÊöß•äðVÿÝ)GFùŸÍï)>Ú¢®áAN4•“/ñĤëŸôÛôUº{¹Ö \Io[ùwÃE6´}ңëqüÛ/ê¬<­«õz͇–kùˆ‰~>\™i ~iÇŽºeÇÿ|Ád×ÿ®ÿÕÿǶUß®þ_ûÿ‡Øÿ§Oæ·¡ÊpFßS#΀ûÔ*nrÅ`j:ð"¯†^¾Éhǽ#(yå+Ì€©Ó^ÊNòüò£ä#ÏU¸ê½)»Yà1ù){í&©ÛnLä¾øG®©ðRæWs”ç«•xºPÿËO™×7¤ì%åqv~Ê“|u©êx´½—O÷°ô‰º;mÊîÚÏðÅëJïý-¼¹ÖË7fŸ¿þ;þ;þ»þwýÓcôHôí躄~Xý¿ú?vtæÂu^¬ý?›é—é›b 6–{úé?ÿ‡W.™ë°,¨YX¹od C<$ rAZÿ”«a/IÞäã ‰ uøXÔUîõÀ`ʈ\õH÷Í^¶IŽÏçe¦oÔ?ôê›Êr¿?å[7ŸSVº;H¾h=\A ^À˜Itwm ‡VûRÏ좩£€Kòy¸¶»wÂÈyïÏ]N¿ëúÓwxrx¥Ïæ§€ÎÐL¯Ÿ¶Me@§<§Ò¹È#y¢/^ÎÏíøïøÏ¼2WÓ]ÿçÈ×?3ŠbæEt }ré!seõÿê¶„Ý<óálF$<ócíÿôÇ_üç¿bx8fñ:HÜ΋Ýc™³°Ð9jÒ¡ …¶ÃÓ*c!Lð.8H<æi]Èb^Òrô72À¶«ÿìÏþ,þλ¨à„‹gë#GܤsM/_íQpÒmå(ÔŸÿüçñí4å¼øâ…^D¦ ßýö‡òêŸ2ÓŸœ~•F†Ó‡À7©#²L^¿¹)ÿöM&°´«¯Ê—|älù!‰¦ô©^í–†oe‹¬®”ßñßñ7ßvýïú§#Vÿ¯þ_û?_꛵Àſ޾Û}iâ¿Óþÿh.¹·c™1ÅÀB]ÅŸc5GhùYša…<„ÀŠü‚Æ;f~äßã£÷´ž¼º ¹lÈ”›¢Âù9™ +G6 D}êÅ'¸'-r]õ¡“Ž/ùV>nòúm:ïÞzùâeŽ5Ñ*—ç’E]Ê·7Z§“„¦NÿÞx…”'^‘uU¸}¢ì™ÐÏÀT?GÎKŽ{;É4Ê0m_N[ZGû @Ð<4iÛ%“ðŽÿŽ×å®ÿ]ÿQ$—ž gèúzõÿ9Xý¿ö?kbÖÈo³ÿ±Æ2 Ê•QÄsçhp@á@øÍã«ÿ“og èPY}eg„_€ü¼1~êð#Ê_²†Ñ*÷þÔa÷E]w0!üþ¼ lá1õuÁ+§¼8ùmKzÐ}týPs.ÜOYt/îäÈ•z&íż™ý‹×_$ßÑYJߦ? `ôGý.Þ×é3ý7DuÜ™×XàAÖ´yú­ß8,ÏöWêÆÞН~mêƒ Ã#m¸ÂäÆIïÑ`ۢϓ>4¥Ûñßñ7÷výïú_ýÞ¸úímæÿŒýŸ#½bh1óÉäîÞ6Üòã,B´cð{&Gù lºCx€S‚2ò]€¦ð“4$ãÈÄ)G–„‡îN/Ü>wùä hó𳃕×Çßùøµ‘£àãÞnm)øÁÇQ%¹½ÐïSßóñÜ$¦žÈwšñhCdŸ|­ìdv™F6y€h@ÒP„ï¤ùæ# ŠŸ4Æ­OTä~€×«ô5Z.ùÓ^>úŽÛŽÿ™K;þ™&™æ˜ùQw_3©wýïúÏÔ¸ëW â«ÿGßΙ…´úæÃ»hÿ°,Æ7¯4…pr-F8ÎD'Þç1y®ËÝîu‡¤åðÍŽÐeÜ | ~Gj_~qîT¡÷Þ)ÇXh€fpð+@¸¼“ç’‹,h¹–k\ىʅN8íž‹ÞvÛ8t.}+ûú‹çŸ —G^N¹~âR8`QûsÊ„š2yeDûT’vúP¸¿µØ;RÒ´Øâ€'àO}ŒÛ£ÞIӯꖮ-i§;q“'Ÿv¾—³cf *»´ÿsÂ\±ÌÇz™4®ó,éÒÌé]ÿé›]ÿ´ßùàÖyC¯¬þ¿ÖÔêÿ£[¦ÞûÿôWÿçÿñŠB}¾•Ö»9´…´:È‚±x¸(ÙICsî c/‹IÇÅM^þ©¦ @‚†Q·ë“o(¡Íñ¢Ð=Ž)xiŽÎŸ‡,=žœCW'þ0dåQÚñå{ÈD?ô ¤ôHÔNGa¨VÒ•©œÝ1B[žäMxäHÙ‘Z›•+]Ë;.ìŸü©çÖÌoÄM?iù>ÿ|^Ép3ziû0UOwñà =Z>yж-â@¤21 øïøïø_Gçæiç–ð®ÿyÿÞ®ÿÕÿ«ÿ©ƒØ:ŽXû6W~›ýŸ×4üÍ«÷Ë×€WÁ2Ðò¥×é\ÿ'ƒ&>þ•Ùrü†ÑÆà½‰PP S@ÐA°¾ b§ `(p#ƒçÎ;uaœ¿mèCf¢’Sþ%šº»NŽýÐÚ5Ò®Ê:NÞÈ>t>8FxW¾¶±õ¢iX9aòÞÃu—G~ÛXÖ#@¾z:&Ê¥ýÊL_¹C01Ò…ߪSy€ª÷Ú*KÛ ^¾­‹Lu;þ;þ»þwý[ý?Jqõÿ±¯ìCí¿áwÙþçMîv68Gn1ž‰ Pãÿè°é8 ‹Á=†øÍ£„G§^4fÊy/—2³KžîtÉçäU–ÖE¦öáŽÿG'úlÇ׿µ¾ëõÿêÿù0½öÿ÷Úÿ§Í=3è {+0ÄpsL¿p0ÃübîJ1Æõå¡ã+ic8½ˆgÀ‡À8uüˆgÇdÒìøàŸ{N“_€p¯ŸÜ•¡Qœ‹ü#“ô·ê!ÿäÛKÂS½Ê¤®Ék=-@rÉJÁVnôv»84)À‹ö‹Ë/_€UY}Ú×Aè}‚†“¯ß´ß»dlËÞåFxåðÖ6þ‹ìÀÙ¶ÒÓ¾©¿üZ^Âï>ÒñávüwüwýŸ"]7»þχDý°úõÿÝþÖ¦˜kÿÏ&EíÿÓ÷ÿö'¯uE ;6"Ü€Iã„u¦'Àa~Ž…1¯aæ‡C}¥Ÿ£ª³#£~q©-†|xòü«Ø•ç*•çоúèUâÂU„ˆú‡I ¿¶-¯?M ?mŸ6ᣠòÊSØÄ¹·Qž>ΠyùâevÞðtÌØ:Ò/W¿¡—î‘>½?á¡y”¹h´¥}®>¼ç+hI—P5e)Arº|u›^ýhåãÆ[¯¼ÿÿ]ÿÏ;ä»þŸunu=áç¸(?:ˆãKÏÎøêÿg]®_Vÿ»÷žÙÿ§?¿VŽÊÆ@ó-’étÈÀ€îãçÒùÐvaµ,Ý'3Áòê…3¼ìÂŒïÛoêu§Ènžu5þdj:Zïœ)“†hàä=Ù£¬ŒËI#ÿÃM-Þå_GmvŒ¤S´Ò…ÛݪÌê&GÛö¨gêóD÷–"ßÄýã¢Æ—Ž€Òä«§i­ï”!í³BC£oÐ(_¥û"y\jϱ딫Á(Otä•Î/¿ò €Ûñßñ¿Í{sg×ÿíg½.½`íìú_ý¿úÿØ'ýÀ½¯öÿéÏæ§r€ŸXà_r̸Íó¿à£@&éÇÕ×o^i-?|Êà—oäR²ƒÅˆ|›mè¼Yü¾;£,xâyÒ›f“†Œ‘Ïñ“&}žIH:¿í= Ïeðôè+éúí•©Îqp˜·¡ #·@«¼‰S‘´Ç¥v2M¥i©Í\zoû¤‘7—ÓCpúOäîÎ_Û‰Výv°ð°Kè[*"{û ÝŽÿtàŽÿ®ÿk]ÕëZÚõ?JcþëŽîâ¢?:zM¾>ã7¯´«ÿO®þ¿ìv°¬D0¶}UIi]HÂM«ï<ãÍÕGg¡ÍÞùžôÙŽŸêç,FGn}q&ü[ºI/ïÄgaá?ôø @Z‡F^^0wóÅÕ[~•Yzå £ùã.ä”^õ˜EÎNšö_wëôSÛÚП2©k⹃vɉWåIû&_9ýrJe(<“™c?qwÛ ®ð©KÞŽ»#ý¹ãov=VsļëünZý]ÿGÿìú_ý¿úÿà€Ú¶÷Ôþ?ÅùúÿÙ‘y¿À†’=ªö/õ=P”j+` »Å¹;Á›ÁWÆ%n>Dðæó7uޱ>žoÇ¥®ùóï|'€ `"´èA±£ôóŠÙÑ¢Ì8ɱ¡òhð¿4‡Ož){Ñøs›ÔÛ#@}9† Ô;MÀJÞô ‡OËj¯>ؼ ùvíÈ[À“44n]/¬wd+×vFöIã× ·^ò`vŤWæö2;þgü:†üÿ3«Ìå]ÿ»þ̓èœK×™ÒVÿ¯þÍ9êâ½·ÿc_Ïv.âhÊÌÎÊÄëy tA€tc?‹­qixKoie¾7ay~`ñaqƒðêϹäøLÙy8ÀhïÛÖóÒÓA (îu sU ‹Ï€IçZ†—»åë+£¿ô•4²hkãøÉ'щùÕ3ÈÌëF4 NY<”ã“HºxúlÒ¤×Efm¿=òKC~OË+—>¼xG>zat;þ·ù=}£_úè?anÇæÎ®ÿÇzßõ¿úŸ]ý¿öŸ¸ÛÿÜÁ29( ¿³Çå-é ñE¬p€.…¹¬­ #-é1ÁjÔU„žá®Cç9nJÌÿìdMB.À_€@eï.¦í&õ¹[”^1Ã'®†Æ'^²T~|k,ÉCfüù\éÔ¡.àÄ gôÒ8<ÐðC¾|}%ÜþÀ»ñáðè·!­wZÉç”.8«L¡Wžrší'e´µq|ú8ü¶ò½ê@ƒ¿|üÅwüwüwýïú§ƒVÿ_vnõÿ³ agÇN°ôÄÚÿofÿó[„ 0½Ãm×Hi‡00â:˜¡®áïÚ|ÖÇ&Gz5ìI¸þŒá00ß&Ì·ó¼ >ˆhØí½¬:RßÅCÙwüÈ9ßÐËû¢†Ð sÊOº¶¡/ϔіqiû”‰?qeåMiß\`·õÝ÷O‘¿å„• @_?ˆ“K^Úzn>ùY½h޶õ©ó]ÞÙ¥›ôöË_„˜?ÍÓšŽUûÅZŽSÇÄíX¡ãÒö £Ûñßñ7+ºF:§Ì›Ì—ñ­#n×ÿ®óÂ?ŽŽ©>JÂõgõÿYO«ÿß/ûÿôý¿ûék „2»ŒlŒð$4=Šu´.pÅ$<´þMÀßÄrð²è.¾Œ·0E­LDÅaÃ38B£ñMý¡8¯ß³ÿ€´!Q‡¤înÝÛÓúívqîr 3•µõ;ík'¾º.³‡ïðGª`ú®Gü2Dhð.½xÛøœô»k» +¿¾æìhÅ¿â‰Ìt¼[V^Û,LÙå^×ÐEöñõ? «õ5=òLÕ;þg§V¿ìøïú7²†.€±ë>@ÒM—Ò?Õ©«ÿWÿ[+æûò>Øÿ}}ë|}%FXGôÑ!\wt c;;#¡‘yuœ‹Ò=¾Jg^oîD?ÍXxÂ]„â>}ùÅ—1^xZ¨Ò•oýÂuÒçË9Ÿ¥¨è‘aò®r £rŽ%Ý· çNØÐU6õ åÚ®».ü’;Tәľv¼*»: xГ§¯ih¤5œ Õ©íãßeøµúæi;ж}Ò#ŸÄ‘»åøò¸ŒùøOصœÀŽÿŽ&ÆY?'¸ëŸn⺆vý_úäú»úÿƒ|áƒ^]ý€ÓÚÿ·íÿ‡TªÝÿbÝq5Ø ? º„ pöS‰pÜ•W¥h@ñŒ\ÑJFò-·—3qçx®GX&¥KùSùuê:@§)#î¼e´‰}È1¢´¹S5%swiÊ% Y²ó5õ %3W ö«Kr •^ùr ñäqMn?ð“«ó”¿pݣܭÝ÷¼æóñóôÓ‚´¼ ¿«=–^ßñOíø€e^™3]›o»þwýWßdN\zªújõÿêsÁ±¡!LgpÒj÷’ÿ§hÿ»8ºXw@¤éé‰ë4{ vPº€dÅ<šBo•kgR΀wïmôN¾:]g÷ø-Çv×ÀàC± ®uGžï²úÕWÏßhD#ÏÓ—•fP§|w”ʧ\žòÉÞãËï·+cŽÐ†Aå ̓öìàåÓÝÐpÚ”z‡W].¤_2¶îú‚“×cõ¿M‰Õÿæ·öÿ\ €b×CLß|Ș0¶fLx:mŒ2gQ5ýaŒ¥'wþLyáùiæøh<Sáwé➢XBI/.*ý»õK¯ó—:éÍ+?ßT_ô;?`¯Ç|Òí\¸€Þ÷D‘/¼æR~emü/@xmWóÔh§KÙ¼öB? ýƒÇä‹Û›yK¦òøzò'ás‡“þ} }\A–zÂoh…¹ÆÉÖ4ý.>5§ŸÑíøŸc^}´ãoF<ës¨s§óÒìz¬ÀÌ¥]ÿ»þWÿG¯ÒÕãVÿŸÍ}ÂæÕîu¼/ö?ïe`lýÏ¡0¯I’™2ª`ù}äEùNçMÁfWä×g‚嫾×-`‹R¶¥L;×{/”üaü Gž»_9"'Å?ÿ¼E½txŸ6L“Þz¤måM–ƒ2à鎠…Ö®“§¯Oh›[Oå@«µyÿV$=}¢Þð°–7[O|¶±’V㔲SÞ¥Xí-ÏwÛ{zóÁü¶a¢üݵ¼ôö_•VÝ\ó¥+·ãÿ"ý°ã?ëóZ£g¦œ¿[ü>r2výO?=Õ>ÙõowgôòêÿÕÿlÜeÛßKûÿýëÇž*=À£@BZjý;¨á®!ï‚:ñ¨ÐëXÇd½óô8ŠóŽ7¥ÄÇÓƒ‡2vˆ€¼[wv¸€‡¡üz²Hå<\e®_¾Ý!k:¿/Í׌Á˜‘ctåUþ´gÀ^ ‡pþàÃñó#Ñ# ‡ˆSïd¦lëÆç^N½Ë´Œ×a˜KóAW—\è”#×osiïUgî]ò‘ƒL<øuênÿI«œõ[Fþz@nÇÇ?s.óa׿u±ëõ?¹úÿý´ÿÏ¿Eè¨êRŒ&EÉ»ĸÖJ«±MÚÄ¿âOi”ezÑGŽÁðÄ?k|`Mv™Ð_O˜ÌŸÖ‘Ý¥1Þvz”(ä W^à@º¸ºÑ*S÷hÓ•¦lÚ|ñîOÉh(õ,¿²I×>»p÷4|Èñb€™tmÈ·/^úà7£+ ¥œº<øyFŠ\üÇsz(€/®üз¯¥uí¢½|ñ2`Q0D& «.G•SÎíÏÿçÝ\ýª?ø÷±Þñßõ¿ëõÿ]'¬þ_û_ûÿôÃø‹×ŒÆc›;Æ»f:èÛ×Ý÷éT¾ŽÉ _`æ„&ŽŸIÆÏ+†'˜"^Lj‚ÑšŒä7ÿ *|ôÎë äáÓ }ËÔ"Ÿ¬•£u·\ø{…Ä«<òÊ&]Ü#.½ÀM¤NHñ­<í@£Îìæhi'üæóϳh½|ù"‚Vv<õÁT”º*#¿r‡æö'»EÃW™·Ú04ʵÝ|í '?ÿÚ¦‚†ÿÿL/óéævýïú§ÛWÿŸî–Æêÿ±ïcïØ–µÿ¿Ûþ?ýàïö:F÷fàñ™L÷sÓ€«éT MÁVõ1Îånõ< 9¿†^¹´ÒëäqJ`ÀVþÊzJ›ó§q>ž| æMC+Ì•O^YpÑH™·ç~X Z_‹ àjìÚµ.àŠ+ÿ{»¤‹3||›ß¶´\åz×ïqN9ÿ¸È9qý€•·<òÙ¥š¬‡ŒòÉúåÖ·•gÇÿÌW}¨¯vüwýïú_ý¿úíÿ7±ÿ9"ÌÅÖ1 ó1Òǘ0²ŒŠ´ki¹´”0Ηñ.h=>“ϵ¼rî7Õðgç*´.>Òàøøøw©´Ý5ÂFÑyšV?íºèТù¾i¨BaòòÉïî•;X÷¶ßë@爈ÃKYÏ`>#“úz„'ß;¾¤qüûsó7éêkýwþ“˜ôÖçHsR¦Cëo_ëûÊÙúÃ{d"òâ"ø¢áße¶ãæØŽÿ®ÿ]ÿçÛµPý=2q®úƒÞXýúcõÿóûÍ‘»}‹]ú²ÿZiÔÒ±¯Ç]¾t ¤»3 µÎ`¤9»_O<ôò-$NÿGI=†\¾5þ¥Ç+ò\ååûv"Ú¿aÀ%õ MÓˆšñ½OKX}þœ2²~ý™c»—¹˜PóþŠ´Széùøà‡ç‹7Ï—àÉè±SôÁçòyèf×KŸQÆò½5ž/ ‘uxrI›obN¯=ú­²òOþ´gh;\Ê%<(·óÿK2Ç=ÊŽGë•7ŒŸ^Œ[†¬ÜŽÿŽ¿9³ë×ôÁèŒÕÿ«ÿÙ¤µÿǦ¿kÿó[„KŒ¬À8á>'å9Ÿ‚Ì1ÆÈ™ÎÕÁž:[è }@ÍÙ9ü²OrQá1®åjܹ̓Âs€‰»A.¸×È£+Èy”‰<‡¯d¦‘ñ¤þæ6©Û6Ÿ¸¯¿ö>«sù[ÛÜ•êE÷¨åæjh´3uÉ»úåÏ¥ht•múfÒJÃÿ‹îž.Üþ®ÃÏÃ…“²nIo¹Þ!SGû¥õ¡+ŸúM»×Ñ4¾²m§°¾SWëC³ãúµ€T_êŸÿ3g̡͑ñ:oÚG»þŸ×¤njÿ×Ý׿®ÿëùQ©1ôÕsôx]ûŒ_—5¹ú?Ýqï—ßÔWÍ_ýf~ðAó÷Ùÿ§Î,EޱC0€†ÑŒ&Œ¶‰ÈXp7×nNÏ$•1´xˆK\Ð>âWÞ#mŠ´ž(6Ha<Õ‘¡ JúÝ5½4‘iÚÀ »ƒ•¶Mœ,œ2\ëýÚŽ\pÃÐ_íí‘^v£¾øÉ€«e”Ç×®¯.p&_¹ôÉäYèýñWé¾²­ >å‘ÀõG:¾ž‡{Ö „>Ç€h´câ•)ílÜ8 ƒÊš´c«£ÏáÑ>IÙ·;þg¾ïøÏä™ùÑõ°ë×?}}{ÓŸÑ/2è£KŸD‡­þ_ý?óÄü¨M6’6Sæ}°ÿy“;%{`ë%÷lfÁ04:ÅCÉæÛ‚“$(×ΫÆ'Èn|Çk¾½Všú“pÄØ_à%õN=xôžO°´È8eÕ…Wéùå0´œ²O&' %/tòæv$¨Âò9¾²Ò§³C¹&/ß[~ºÀå*¯\út”Ì‹ùÆ ú=> ;_ÊÝú9´ž¸IÊEº€Þé³I,ÈCCN}YFž”>üôíÐû 9Є¦ãeÇÍÑé—S¾é§ÌÌêÞñßñ7'vý[ »þ«kVÿ¯þ§Öþ3ûŸo²ÆÀC¬ór?´Ìxwa1¸ÂŽÎê»ag¤;6?âx‰{(ê8tÀÉ<À—}tÕ×vé2ph<úÔDÔ¯­(˱äUWËã©~OùóÉÓöà‘øô>l]èä¡Ó;[€«»^D*më@§.ÿGÿíøïú§“vý¯þ§ VÿŸñkÿÙÉ?Üþ?ýøÿò5[£#=Œ0¾x4vP8yh\&<âÊ3ìè‚v]|¿ÊoʶΣҟSPÚyÔÖz¿x¡?Ç@¦ò’~w•ŸOݾà„O¹’7ý0ò ûIŸôÅä+'-å‡0Äqêh™¼äSziêºužûe¿YîÈ©íWÿ©Û£3äyÒç#OZ*íN—þ«#ye†Odzý‘v§®Sgû4¥GW9"ËŽºYŸìøïú§«vý¯þ_ýÿ~ÛÿÀb Ôó@‘‰SžÞ÷‰gl'-F_Á„g1Í¿€¥g“ã°ÞC àB?NY†¾õÝýGq`Œ:þcͶR×Už,.Á·ld#óåñ)/Ì¡ PÀ÷ŠãY€Á8¢-p¥}>/ %7ÐXø½Bá‚´‚ÀFZëP¶ HöUeCk Hê¤çoÊ$æ~”¾àćý•z²†F;ÛŽòG›t5»ß6u‰×íø?SòÑ·;þY»þÏÝÊ]ÿG?­þ_ýÿ°±7kÿõÇ»öÿñ&÷Y>Bf—áŠj åq1þéÔcÈcŒ&~ü ¡;ćßä<ŒÁš„ðïB} –27¡G†–©,äRŸ:øœ¼æ+—ú'½⨆«}d˜ç¼‰Ý‘À±Í?`I' )ƒg”ß¼+Ù%í¸äAç´\d¹hÎ&O7a!¼h§ÂG[žBßW§ÿÈ…7z~. ^õˆkCû&ùÚ ^àðž×úù¡_ÿíøïøwM™Ü®ÿçY»þ«÷ë¯þ_ý,nìom{4áè¶jôÈû`ÿ?Ô``€Q®2e|?˜øã[x:ež(ع"îxnÌú)—Ôù3ô“Î;”çJYù㦨¿šW0(!íþJ,Ÿe‚ð~ð˜ÀV‡®éᯞy”7\x]€IŠóõÖ™ûgSàƒ%-¯ŒoÁ€»YßùÎw²$ñ2p÷®S·2Új× ò]­Ômz8`°ã…NýÓ[ñ \ci„5òŠg|§Ì]ÆôÏÕW;þéâÿ™ƒæEæáÌnfÏ®ÿÙÉÞõtöÑ®&Æ„fŽ˜%g¦¬þ_ý~w—þÈü07®ðû`ÿ? мŒªWÀŒn:a:ƒ¡þZ‡Œ«OĪJŸå³žà•1ÙUÌèñséš«!úà\&Žõ5ß`€œ„@ðzò½Ë©ü>œ4ôYñã%<éˆÃO> Â·³M ù¶Ý%˯Á¡ûÅ/~ñ­ï|÷»¹cQóÜêç7£µÀ|“л¡¼ÎÁ§;[NÛ섹ßÕþ©K¹µ){ßáJ_G¢iÛÈþOzë;rN&(òØá"›¼–=ïí2åç Àš|4À#9Ó§ŠðKùá׺Ú7d‘¦N4;þ;þ—·™W3GvýŸ×Ñìú_ýop«ÿ×þ?î`Q˜yÍÂ%®F7‘ùÃÐV© ›<â-1åìðUº1ΗqíÅçλeÔ`„˜:ÐպΑVÓä .ÐL\õÈËOõmÒY¹‘W¸ïµÃV?þè!GšÒ[¥™¶L9áÐHCûæó7yÃËW/Ú/ù^Ñpd~6Êøµí©çú D¼«˜• ö¹Ú.î• doŸ´½-žÃ[óž´oâá4ÄÊ¥ŽÛ7oÞh~\ùU¦ÿ@‰ëœHdþ˜+æ¢tá]ÿ»þ«ß¢WgŽDwÝæˆy2æ­¹T“²·2æÙÑYtس®“κVÿg]NðWÿÿÏoÿŸì`1Øžûë²2ƒXP@¡rõívh Ç® gת‹dVF¾I(_¾‹ÖÊĤ̵¨Ð«HŠ\W&u M¼ºéá™IwÑó‚ÄÊ\ùº¨[Ÿz”—ïI½ÓNtêäð(>`„–là߇ΤÙúhv´ÿ9bÔ•M9|Ê×QaŽ §œzÅÖ§N}P§Lw„ñš?¡Ix•–_š¦Io;ù\êâ)7ijÜñ?¿ ;;þgŽt-™ÓÂõwýïú¯~]ý¿úŸ}YûÿlÿŸ~üŸÿÃëc˜ÏއŸs|*±³ÃÉ·#Ó HrÙ»i”.£d±M‡¡ïâ³s‚/>å‰oÁŠ0c_`€€ñ.Î.Ž·ŸGѼ#÷:&îB~Žó&¬\d¹è€‰ÒOÒ³¬.ð`4Ô/Þ´î’À Éq P3Ï—¦ôù>¿v¯ô ù”M*g— ßö‰4üÞ•«u5½ hàJ åŽX]ûŸß~ä£S§ºk( è~[úxåŒy`ÖŽÿŽÿ®ÿ]ÿ«ÿ¯£×)Iuòêÿ_ÇÞ­ýÿföÿéÏþÓ^3ÖŽ–\¸®Áeˆ)Zq“Ê, >ìP)‡®´òjÜïoy©g&,#Ž_i„îÙHï#]ÝÀK?)Ë{ë5r"ãÐÇ8Lwê{ Ê6]^ŸÖ§ÒÚ^¼îíhûÐÈ ­þ¹—ÃÿÓO?ýÖ'Ÿ|’>mÿ¹àÿÙ§çÞ–Ëíø¶, fÇPÕÏUÖ{‘¾²Þehߦà;´…K;¦ŽòM=SWeßñÞeÜñ?ób×ÿ®ÿê/zcõÿ±owÝ[^»A×®þûþûlÿ?ø¿þŸÿ{æÆ(TGrï\ä–n1àviLqÆZš‰Vƒ£¹¡ïÑ ôÒŸO\…zßÉ2)ëÔYWގܸ‚ŠxAP벫4™Þ!åØ+| ¬Ç÷éìî€ În>x·==†”†ùÉ®LûL9éÊOèÐw¾iÈ×g‘s€”ɦÜo¾åÚN2ˆ«›„• © èµ³ ï^§lyÝ#oéR~xLƒGÛò({µaÇÿCëWý¶ã¿ë×ÿêÿÕÿkÿk3—ýú÷óÃ׌1°Â˜rcΡ¿@ƒ4?üÑ«cìó*ƒ¡¯‘¬ìÒàåUž ï€]M ¿25þMcØðRî@P«ìƒÈ#,½yÚTE–¹7´”ü©£´­wƒÇâOX½äàÈx¡íeyuW€¨tùt¾ãQeÈðŤM•yuƒ8žmÂsú‹“WÃ.}2“îOê¿ùÒ„¹Ðޝ½d"{Û¨Ž‡úTuíø_ïkÓA;þ™?/»þwý¯þ_ýTãùu¯LZûlõo³ÿù©Æ7»&—Ï7ó&¡¦`}bëÅl´Àà üxVx6öDèjÌ‘2þâò9õU©Kë‹N{Lˆ¦` Àéh]ïîOP¥òs¡ü %%øPNvzô(žºF®æD)§N2×G¯Îúúı`î]üµããY—vÍ1©2Î7 ñðN£ót¤7ܾkš¸§²+‡_y©[~ë@÷íUºÿ3?vüwýwuÝ×·®¬±ú»þiŽãVÿ_úcõlŸ5d­¼öÿé'sÉÈ7ȉä·ýºR.ŸQöÎ'G„@É«\5ÐH(‹ ¸àäqv²( ®\…Å¿ç…è?å~‰[ÝS, AÞH¿ Ø#£|9ÀoŸ¸½Ó*poâÒÈÅ/Èð)@,íŸpä¹òñG/Oº0þÊ«W<»fWÛì\Ù-R?z ·Ç êÓG?ÿùÏsl(ú·ë§ºó‡.-í<“ì,h|§{ÒòTþ¶ÍΙ4OòÈ«¯mšGû'lÏnÇÿÌÿL‘ü1‡výïú_ý¿úíÿfÿ?ø¯ÿý¿ýzŠÄ¸ÚÍ €"æada`Â#Î4¿œ7“¿™;D“ð “W B+Ç Ï#²S3Íÿ°\õQähêЪ?²L"ˆæî—ð!¿2-‹çÈò’X±3Áå ×1£:8~?¥*uê•ÞþPgúdÊOœ‹¼W}SÀ§v\Ù?úø£¼?‹lu•[\÷¾*ÒÇ4¯ãÎö‘úµ;nx3ŠÂ•{ô×Õ·@âŽÿ ú~Çÿ¬ýÎáÎ÷]ÿ»þé¤ÕÿÇ®þ_ûÿMìv°2YæxÏó»;ÄèˆS´v;ì(1ì5Ô1JS¦€LÜ;òmAtå‰/OEî¹Çщ°ðñå” À˜pò¯òä³c$¿”©ïâuÀÆìä ?»F­³<ÅÉKþ´/5ž:ñäÎ;«Î0™ì‚‘'mDpÕ/àsåEæ ;þj€¬~LÚQo䜲@_Û-½4õñ”‘I9®ùò”'¿ðš_ôm _9iŽWùïøpOÏîø›»þwý¯þ_ý¿öŸ­ÿæö?w°Ø‘]a •«±¶+Â`7OáJS®Çxè¦p€˜ÅXc¶Ào»&âè=Mïu Þ_|9»/ß+`à+‹w€Æä£Q¦i“0Pâ´CK„ Z’3ùvt"¯ürˆãe稯£À?]>e&ŸÔ•^8ÙÈ©L]ëQ.;iómBGrê$‹²Ù}Rÿìþõe¤8Ü¿Y>xßÃ÷>VçiÃ^2”V¾S''¯®2ïøïø[7æ¦uÇ™œ¹&ͼÙõôÅ®ÿÕÿ«ÿ×þÓ‰µÿOßÿûŸ½f€U“ƒO©VYð RX>€àHÀøüÍç,t.°Ã?弟ê£>J™ð¡9ÎÎÏX†E­œ¯Ï?Ãë`‚~kE}d K¿Ä+‹úŶmâù{ ù=1# ЂGøŒ Êø¹ ¬@¿´ç’=í¸8·ÞÈ~ɃGÁ‘pù_b$žôIP¶iS^VJ¶‘£ý-ϱâpvðÆçÊ·²‰ßÃh"ó¤EéöyÔÞÛÁ«å£^á>•gÇúðš:vÇ׿µ±ëõ¿y@7Dg^Ž…Wÿ¿ßö?;X&CËðv¢0¦5 ÝÕAW…âˆËý Ù…qT6³)»1ÊÚ!R®€+ÄþL=ÞSÅö aÊ}ï{ßˤÄÏ¥qÆ^~e@8“W:þM_’šÌIçÈÞ×D¬Äñð©\}޺ˆô‚ esª‡â;á<N‘«Ih²35@Q¿¤Ošyù긡R§vŒº3¦_ô5ÀW÷VÙIŒlÍ_ýGÞôª”¤ÝHNÚüE×ò•{ÇÇ×ÿùpaMìú>ÖžÕÿ—6]ýŸŽXû~íFgÔŽÚ(ªýÏ›Ü ÇwG ±w\Œ¿÷7õ~Ph :†îÅí…ùóN8Ï”¿ñÅñû“J¯?øúË_ÈLXО–-}Ðù6Þó±\whJW Ñ]Ç“çuçSå €›Ý¢7³›ä›ÉkW)n5ûoíºµCÙZOè'­}—cÈé+/  ™¼»+Èi?£Wo&î,4òK ÄáBiíO| ”µñáRg1I¡üÕ§šxpéÿÿÛÞõ¿ëõÿêÿµÿçÔ‚Ýü¦ö?¿Eøñeh `äË/æ7ýƸø´>y.Àîj‹vñƒ¾}Ðr|ò·íäÁ§u:2üè£wÃFºò­ë?žãO|Z.mÔ}x“[Zd9 TÇøz•ÅC¾Éë®ÛŽÿó·…vüwýïú_ý]Jé^®:YtõÿófLmõÚÿÙhùþßýôµ‰Â sv^¸^êÍÕé,€Äƒ¾—݆ùâ ò Ä›awþÀd ¯ ›ÀÒð¤ð’ߺ…ñlÝo¾xóxÝÁfÏ€M]€ËÓ bcò®©ìtÔ_€ñCGq<,$Ž,Ò¹ú‰ˆÏ? 9éx^4â~T™+~yµmêlÛè§N;S+éúB›²C'aÂSÉC¦Ô#9Yówò;•‘\å¹ãÿöøèRý³ã¿ë×ÿêÿÕÿkÿÙ„ÚìÚ~ÝÝþ?¬ì¢ÌŽÇ;81ü€¨ H8÷†÷šì(ÝÓU(ÕÇ àÐÅÈ3ôó([À$îá| Íäw.@IDATKÝœrhº‚Zý¿úì;öÔVðÙ¤µÿßÀþû±çw(üp¾¿Dˆ©aF[ziÙ¹šŽþr@ .èÑÌÌ€ßÁ”8Ǹsw@ÒÁ”ާxêà‚½ÀzA½4êRÄ…û?/ݧÍW·0 UPóòÕË!&oòЮºÉ!-Y=}#,üäá Ø´'£¨æ[“ÒsÏ«\è&^uooÀÑеÿ´—«¼&>§OÉÑOWÙ…žÝ Í\äïω“³ý¤¯” ?Ü„wüÏÜÓ'úgÇÿ|8¸Ïóg×ÿ®ÿêèÕÿ«ÿ×þûŸ{®A¥(ûHk8€aÀƒn7D:@Á´³ "=ÆcÄ•øhZÕЊ+À2a>—ô¹pþòÅ9 ð%zuòí0åÂú”-oéœ{c~ÒÇ· ¥0•ýa$/Ó†©[ýIS—Ò)䤾 HÙ¹#—t2hÛ¯Üë’xÉ2Œ¯¢³ƒÔ7Îã²ü=ÔÕ6HÑU\êhJË7 O—½UFݧ.06´R|É5à§ u­»tïøïø[Y'fÒÌÎÓ¶ë×ÿùL§ùðY}Üy²úÿèq¶`õÿ`ögì%]– ó¹¤ÿ‰Øÿ§Î{°jè»ÓÒÅ¡±òìœ`„öê¯–_ãÎ0{Õg¡ªYˆ×±h»o‡ó)-¯.ðp?S7PPÐqU}Ç•]œÒdà†ß$<RšúÉÀFÛGåÂ_XÝüÆ)å¤ûĶ»VZôx¶.éú€lÚvw‘ñžðN8ò\«®Ky׾˽O»&ßxewk &jþÑz¸ÿó¡`Çÿôƒ9anìúßõ¿úõ¿ †ØŠËŽ®ýÿýö?V>¸q:ÍÜðø–0 s`40Þ_¯€y|éÞk%\ Ñ®Qo]­OýMÂùå9ºãFÂÜ™Â=àxàU€"üíÉ':ùôC:´H“öÍÚ'®Ž:<”%Oê˜ }!]½ü¸áÉUíœ]@ÎäÛIû`x¤¦o½vØ9uãðìÔá˜kyå¤sŽ6ž6&çy Ñ7=õ\e‘5}Ç@ðŽÿ®ÿ]ÿÑô‚çèŸÕÿ«ÿ×þ[ ìäjÿŸ¾ÿ·?y ‰ÞÕÃð2ÎvJfwÇ· { ‰aç3Þ€z`‚+Fñ€«äNþðÚùóÕ€ FRÓ ÊKËšÜÛ³Ú‰«ß#^PUš³ks…cµ®©›ŒÂBN;æ½SäÖ6?˜¬>€ @áä÷ñòÑtþäóÛîÈuÈ“Ž¾i:Ó»Ï`HYúøè=Êê1`J^(š»k ×xë-Ü÷rà½ãÿ|·Ð+GÒ'Ó·;þ»þwý¯þ_ý¿öÿµÿylÝwovŒÄàÄèŒÑft€«·Žþ®òhjÜ…!oC–¦ÿA3ØxãNýSÇÔÕ8Ú–óî'ñ~»p+H6üfa?e ˜"ïÎeqí›§uª?;fSÉC>mÄ‹l@ ãÛÉÿ²’‡‹Ìã“;ïØ:ïôJÝ—<ò”/ÀW7‡ÎS×~“þmÇE¯êSú¹|ëk?”ïéëSGÛöH §SóŽÿŽ¿™°ë×?=2óaõÿêÿµÿßÜþ?ý`î`1¾]D5ÌŒ.|Èë™Ý!ŠÑ¿qå¸íO>ù$à¡üíøàaGŒ{€¥ 0(WòÏÂþ €îÍço'SÀ ¸t•3è/^Î…óAäê(U‘ó'ƒ`°>»rË  ˜t÷¸Ôß”¶o”âäsU“Ö>†6—éÇOþILÿµ~Iäç ÄNÝ“ðÁ«u£æÚÞðÅÇï#Ò®K ·ôR”gëÑ×Âøéƒÿò;¿wüwýïú?W$VÿXý[QýÈvÔvóÅßwûŸKî5Ð:„«¡åS(Ý=Iæü±¸î)½€/âñ»}gÜ[Ú¾,Ó øD„—º<? Ÿ)/î«@O¹Ê€¾²ðAŽ<è<BêÀO&‡Nx¶õ¼¼v® Ô”o›€8夡u¡ogËÅè„'O› NRª<ýB®ÊH¦ö±È¥®<>žèÈŠ¶å¥EŽ9¾íÏâ”¶2;Ú=ïùr<9G£äžr8·¬úúàÉ•ÇÇß|é¼4?ºö:·¥u£Ûõ¿ëõÿÙœè麨þ¶fVÿÿéÛÿ§Ì›ÜÒ8¿†¼iÀÂ}b ïš<ŽRe¹M(iÝ•HZ^ÞoÎË@M8»? 0<«Ä¥å“"0D¾#³ëEŽðŸ<év²TÌd‡<û÷•È6äå›H@khÈã=Y|4u××u%><¼~ h€—öÃ××;¦ZNßÄ©cžœñ+·¼¶Ñ‘cï@IÇCò Ÿ„ ’¯ÎÊ‹GéÔ¡?9}ÄIË8 _ Ö?Ãîð|Ç?êÓÃÛñ?ó`Çÿš§3wýïúïÃê=º#:jtÆêÿg»±úí ©õñçsÉ]$†ý&ÆÐú?·EÕÅ„þ]£\:h¯ÒT¹¿äþ€r Ã¡où–2NGétvaJð¨ І¦ùÊ—_$:b%Í'¬l¸r‹i|²´(^dHë^e¯Ÿ¯¡€(åÊG˜=ŠÊ+¿€)lçÏiãì\ùfÛÄK#¿€J¸u+S½<ß²ô…})Žžé»i…þo9ùvâÂ3ƒ¿ã¿ãÿ¼ÎÌaýQwÖæÛó.sÉ43ׯµŒô]ÿçC~Ñ?»þWÿ[OÕíôzõÂ>®þ÷Áÿ߸ýÿá?þå뻑í U¨€ÈXâ(I´&Cø4ÿ­F¼“%e3½;Rò¢`æÛZyûóT£>4uQУ„R×È!îˆ P–甸GW^åa‡ˆ;Çxg÷+ò /.ÇfSž|‰_ C¸¼ñ ¿I«/¿éõßDÓ¶ûÝ,é]Hh&³ºösë“Þþ—&?iÇÿåWçî>€›4 Rï¼ôˆöÝeMÿ'Mû忾߅¾õ§,úáÏHVukËŽÿ™úbÇfË®ÿ]ÿ—Ή^ºt3}±úÿùº]¡Vÿ?Ûl¶†£Kçϱ5ÿÆíî`QŠqÓ(¨bˆ'Ã=~Ìà£79<Ù º:¡;BØ…Ï”cð=WEâ×ã°Ò#ÃŃ}Ðww*á‘%ƒ!Â]rõ«öäs_OaljŽÅ"÷ÈVÀVþ¡¹€CÛ? òx½ÄÄÉXè‹(Ž€NÀÐuŠ$Òìl%ÿê3÷µ”k?ÜÛÞÝ&²xô»O3½:/[ÕþSúiýŠû`÷¾Hxhå…îÑæé‹ômâ'œ„‰«+²ìø?æ¿þØñŸ£f>íúßõ_=k>¬þ?×0VÿϺ`[`ËÖÐìç}µÿç=X—a¥Díx0 Ó8éŠ M\¬Ï“ƒ~u®‰'ŽÞåo¾×&HÈR÷”‘ã~…ñ~¤]òá“wZ)0N< üBè€Én”É Oü`&ÿü¤Í*¦åRÇaîoxLbÒ“Ѱºh(÷¸´¥òj§x/ûäöõô`Å™l_S¾/õèƒ:au>Í1¨và¯-Ê·ÿL^ÎÛäíÖI÷»‹hózŠ¡O¿^|ÉÕ~ϘãÉK½ãïøƒÎã®±ÑÂÆgÇ×ÿãƒÖ®«dÖ†gþŒîXýlØêÿ3ئ÷Ýþç’{ŒHÖ‰Õr\€Æ,`5††Öa5öÊ1:1WyZ&þÜ™*¨‘O®{¾ú€æQziðç‚ÉG3`€4â!Œäâ·tÍÃË»¹É¬ŒØò+¿2¥·Ø¾úrÀÑðm;õ!^Ù]ŸS—‡Ó?Ú‚Zuð“?ôòâ©®Ö‡¦?Ðì‘­_awj=iÊrÍkXœ ;þ×ÎßôwÇhÇÿÌ9ýá1WÌé]ÿçK$]»þŸçFõçêÿÕÿï‹ý¼¦0y(ÉËQž.F.óïn„c•¯?OÜ”-Ÿ¦eaMº]`!@hx2ÞC|è§ð½œz•ób}Ai * fðAÛ|>‘×L=è<¡™ºÈa'(àBHQo@ÓÐ8çõL82]Û…ÑóÃ{êUåkó$áåå«Cœ»T„Ôsä@WÑqxëû€4òO¾hµ½¶¶ÝUìh¤¡KÃíÈÞ6ç‹•[-Cß6 ßñßñÏ<Úõ¿ëõÿCÒ‘}ÕðêÿcWbbn¶Hßp|W[ÞGûÿ!zŒòì˜|x@Bú“É3ŽÉQÛô—Ý;/hhFøtã1ü5ÒíT;7:€Á#p{Ÿð¿îMÀÂ7¼ëM»º[¥ žò JJ›úí.]åAWy¤qä)ø”–º‹·üÒ—ŸxQ•ã<¹Nfmä''çXJ½èðÇÇÃIÃ(­<­çÛ* nÝYë8UžÿÿΙ]ÿÏ;¹Ö×udíé'Ï®ÿÕÿÕŸ];«ÿ×þ¿kÿŸ~úOõÚoù™4v9(Ä€”tZš.dÄåHQB޳õQO¢ÙÍIÚ”‘âBù…—rxu‡ª;?&j@ÇЇ˜´!Ž^艾Ÿl}Ür Uÿ }”mù0™ qõòSN;&Œ×c9C«"ï„ÉXyùêÕ_¹Ÿ3<ªˆÕ“¾›2ÒÒ&â\òGÊ–N'{Ê<€“]2½¯ÎìBM^ÇD¹^2 |›†Þ·+ÛWó `ŽŒú2é;þ;þ»þ³nvýŸxý°úõÿÚÿ³a‘Ó±Y¨ýúéù«× -€ ” # ,àb 6ßbã°JwètÀá䬨;FÀÍS—2©güµ„8v;rx ùìVœd䤓¨º;/BF€Cýä °™<ò+;‚äÈ3¼îL’}ú€LíôhC?aí(8ri]€áÐðÕ‰˜é™½ÊÛ¾älhñ*Ðn?I3É5€+ý?²õå¡øÈ °2iÓäÛ…Ðn¯q®ôƒº”×vå}«Ñ·íhµ};þÓ9—Ó_žÿ]ÿ]»þWÿW/˜ «ÿÏtýÀ±G—uMßè«÷Ýþ?ýû¿ùák†€LjÄÓYÏDšÎKúe¸àñÞrSFÇ*Ps› A0ÀÉëDí.Liò•SP Íã½VÙÑQÑ%“#Fi÷ú•å @ø)¸P×É@;TFÀ0Šý'Àäj“\<îmwqØñã–x K{5oS§ #Ûðè;º€.à§•>ñÅ_ðÕ‡PÄ—Üúž Ú8„ w÷Î8Q}7>ê¯Üî] ·Ÿwü|ïøïúÏ*û×vý¯þ¯¾7;ªGéTºY|õÿµnÆö´¯Öþ¿ùÖœÕ}ë[Ÿ}úY&‰7«ZDŒxŒûø”Œ'“k Iב5ôÝE)H‘Ç´Íœ‚¡Œ€‰ûä¬ñÇ Oë“>@"JÂrÞj>@ ú”ÃCÙì†MzËWv¼ÐFºKþiYêîÞ ฿ÛãÍ ¡Myè€çã?NÝúNÛ8rHw4 Tá Tµm‘áiÒÜC»OûAùôÛø~V¨}-=2ZÔWØÂ2$¯špìJîÒò3†üë2¾>ãøÒvüwüÍË]ÿ»þWÿ¯þgjKc;.›ZÊzÖ&­ýÿÝöÿéÏþÓ^ëPÆ]§1öŒ6gwdàNÂ^^Éõu;¶€â,GPçÎÕŒPŽï ”0Þêp ÀqÕ‰FœŸpw¦R~ê-P*-„¤®Ž D>€ÈÎMÚ Mh<Âw>å•‹ßSNõæö®®¹Ï†qxPÚ‚™½KKÚ׺¨õ—>%ŸËñÜ„ûުʖ¼IWÞSž“â­/OÆlüܯ™ª(ñ2†@07ÄO:¹ðçðKŸíøïøïúÏû®ÿÕÿ«ÿ×þ³¬ýŸSªsyš¡ÁeŽ'œ·“v °O¶@@Ž£f×ÃîNß²+ã=9côƒÅ;ØA x˜±¡¤W øË³C–S­SŸ´y á (Nì|K Ñ¼Æ Ä¾tt64ø…œ×@ @™:Ïô8¢ÀÆg2Gû㦬v ¡:KmÕüK¶nåÐ+ç¸Ïù­@ñÖGFá>ßš*ÃcÀW+Q9mãZnЃþ]×ûfèGªìz{h‹Æ‹“Ý6îÕì´‘»;X £2;þ;þ摹°ë×ÿ׫ÿWÿ.XûÿÇÛÿüTN7 € Œ!NzÇèGñŽÁ~yG‰¿øð¼€ágô»%JxL:° l Ë€‚‰óÑÕ'´Èؘtç]iñºóèÐc\/mŸÈÕ¦‰ô>—¶’S].»Y·zË|Ëò‹s' Ð ˜švHW€©¼ýfdešä“[øþø,È”×6’¥w®„µ×®åJ;Q~NG¿réÃÙ%TF˜lÂx7ßOëTnyMßñÞéÔÏ;þ33²|ÏúØwýŸoïú_ý¿úííhlíØg_0«ýúἋe¶Ê $c÷Þk„‘vè{ßû^Ò Nj¸c¼§üdÆø»Ë$B–÷à=aq»)@B>þµKÔž¹È3Žìm_9ùi÷´•S¶àb2#-™:®rø súHœ#;þ^z&Ž£2‘khðþå§¿LßÛýL•“nn;õ¥°²œÖ‰sîl5½eøø‘¯tÒ8éëÿÿ]ÿ»þéˆê„êKJÞ¡CVÿ?ïô¯þ?›ì »ÛÃM\߬ý?öÿé'ÿù?¼v?Ç:Äpˆaˆ§Ã,:öâÚ=ŒzñZçÚUa¬•EË&ä}1»>¶ï/ûdÜkì•{3ü >å2i/㮃§nGi¡påX/¿ˆ×.sùKæ GÚLóàU~¡´–«^¼É3D/ôvÓ’®Ð82*‡¿š~}ÝÍn»„9ôøJ·kfw ÏôÓáá«ÿ¾xs¾†÷Ðu•}xL:÷Ozz<œü:w³ìäiWÛïøP¿AÞÜŽÿÙ9ÜñŸy2SÇ\ÞõtÆ®ÿÕÿ«ÿ×þמþ¡öÿé'ó¢Ñp†¸w“0|Î7éÆ Ï¿‚yÊ0èŸ~ú)“›vÊ9Æ~|¼É/ÆÝÄ•ÏÅ¿pA.” S<€t€Z¿1GFåÉÛOZø¦ž©C=Ê9Ê̺£•º§ §¼:/ôÊ܈{Ôß§r6OÝî 5Â+ÌG–»S/§¬¸6à©_µ/iïb&K˴ΟG•§‘—ghŸö£y¸¢Ç¤-hvüÖ÷þÝñ^»—úg×ÿ®:­'æÆêÿ£ïõ÷ÐÛ«ÿÓtëûbÿŸ~öÏýš¢ÌEôë()àãºåNUAŒŽáB?6,*G\¹£4;L€BÞ¬>é¹›5aFŸÑªñÇÇnŽ<çÚêRŽ_ÀPÐѲ3uG¶Ùuºhñ|ÐLvÛ”ÅÛ#yÉÐzѧ —<ê¬A½Ëþ“‡—>™BDHÙ„¼ã*»ä;/w{È(M›=œª²ªìÚ×¾çkãà²G»RPÙ‘‡Üx ë±¡3®<"ÿÔ{ïÿÿÓwæ‚~Úñ¿>Í<ÙõtP×Юÿë›Ó«ÿWÿ-ŠÝÛ³ö?fö­?O?ø»Ÿ¾î·ÑfàD‡±ÒŒ?# (=‹]$þ‡ÁÐ1ÜìÈpÊz šÂSú°1»0·»V@€Ý&<ð÷0r5tÏäÔ#ÝÅî2(Kpu‘O=èÄ˯rQ~ÚrùÙ™¥“=<§üµ±¦È‘ ¿©¯®u$þœ ÑD¾æã§¾ô×U8}×Eëwí"qÚ ¸b™2ÊÏ#®Òø÷G9ùêñÈKý2ÆE†9"4žòÒßÓV|wüϱíŽÿ®ÿ]ÿ«ÿéJv‰>­£K³C7yuÕï‰?'?tzó£{Wÿ¿_öÿ§ÿå?άçÝ(`ËÑ ƒo®ä¸îšI& GùÔ€d&Ž´1õ1ØÒ ^äubÃeç°pÝCÂS]è¾ùå§ß<|Ÿò¿ƒ—,„‘ЖÇ?åÎ…0~ÒSÏødG+ýƈô)èê<‡–“ÞZFþyÚ¦yJÃ;ôW€µ ÕS¥€R<* úð¬?ymË=ﮜèôG1t7â«Âvüwü;×výïú_ý¿ú¿ökíLçmÿŸ~ø÷?{E@E.Ÿoĉ{ì2¹pÍ Œ5£-̈»€>0Àâ”6Ú‚üå„]®†BìØ¸¸hÜOåB¯>ù½úè¼§gÊ‹7_=5.q÷›Qê8 gÀá)¢ãø• ØY8|ÉÃO& M˨+ù“^0¥Üqp¥® “‘¡@Évª<ý÷ùgŸ%Ý=3ù&uv§ ù7iu©ûŠ”_yJn˜Ì ¯´Y|åå¥mÓNãÊI?_xއvÇÇ×ÿ®ÿÕÿÑñt¢‡ž]ý¿öÿ÷Ùÿ§Ï·caç£Ëà&P•üÛË0‹w×EPèSãÇ}"Þ_;Pþ¿øÅ/Pð°«U§î‚­€?còÀvÉñÖȦ±\A‘pפßP™S×€»bq-ç>Yëo[Ú>åìØÿ¤8ýw%ÓŸ¢G­øi“od~ç;ßIßÿò—¿ (ò6vò¢}×UéÚ©>µldk>ùÞýv¦4»X\ÂS}ÝŽÿñúÃÙñ?¨ô‡yÒ¹/¾ë×?ÂUçE]6⡯‡ÆZZý?µú?:ä}²ÿO?ú‡¿xMyæ7ø.€TÔX3âðQƒnQÝ•­|ñm]ÀÏòQ®qi¢2Í!ó]4ç‡ÿ àÉ)›7“Og—' ûñ9´ç¸Ò·Ãshì¬õÒ{ÿÈÈÄÐAg7 `au·?( éçxð·I˜]¸ó®©–kÙÐ^y|þÜiúíHü…Õí% îbu÷ ½‡Óxz¼1¾ L¯d÷0TÁ}™ðÖ¾#‹o'ÚÝ{Vxïøïø›#\×mæÅ5ovýŸ/»þÏî?âáèáÕÿÏwlõIí\uv:kþXWò=«ÿÿ´íÿÓ÷璻Œ‘ï29ê“ìÚ\ ÊÕQÎÊT)÷• €È̤YŽ-ö¼Åüìä¨WWYz?Io· BG–"áÒ‰W^¾rèÓ¾«äL]Oõ‘ÑQ¨z½×JÙÈ ó ´ò«)wø€™µï’]܃WÚ1@‰S¦OÛ×ôì*M™æ+ß‹îÒÄsxräç2W¹$ø3ñ¸«¾ûŽUøÏÜëÇKzÓÄÓ?ÃG½íO¥"?GüÚ·ÒÕCæ)ü{ÇÇß|é|6WÌó¥aóIx×ÿ®ZÈ|Xý¿úÿ}³ÿO?¸.¹S˜"'Ì9†ËEqa†v\òì W‰8I¶Ð)[Ÿ^å/òH`´9‹O5÷®”»Ê3öøÂÐV™ãáGž•Íq#°4ü^ø­ÄñsŒx½ò€¬m~ã´]•_>À•æ”ÃGßÈϧò‘¯nÔÆ¡¹ê ¡k_F±\u?ò¢íæ´—{”Þ ðõå¼¢×vùî ñÉÎEÚáY?‰ó§F¯q2päºûÒ[oiã7„z”¿êÁ£2ïøŸõqïËÿs4ÝùöX[‡»þ£÷¬Å]ÿó%§Õÿ=̶¬þÿ·mÿ—ÜïF¡†×±ÙˆŒ]5Ø1—q.pyÂŒz€€ Œ”Œ÷(×cxpa¼ge•s.]ÐSÅw«?!£.àŒRê'zzñÝ·ñ¦²È¤]åÕ‡ç\–Ÿ2­GCDÌÈØµ‘O¶È?ê$ãÃ`à{µ«`$ù“Æ¡çÂsÂüòJÆõ§r$oh¼¬ü6‡o_ý\>Êq_ìuÜó›Ç¿ËÕ°ôȱã¿ãÍ[È}×ÿ®ÿèˆK׬þ_ýÏ&­ý?6žíe7k¯ùOÞƒUƒÊ—Xcœí)¬´034Yh´ò8`L(ÆY9àJïŽÍƒvÊÌàó¸<:¼ ² äÜD¶aÚo¾¸€¹sf;ñuÐÑ+Ûv‰sxÚõêo¢)Ý= \<¸s mhhww‰ð”ïn[Ñô’~·¼¶Ìx¡ÓG7Z|ë*C@×$¦_®ÌÈv…¥7¯ò´,’wË«£ô;þÓß;þ»þé˜]ÿÑ «ÿWÿ¯ýÿæö?orgP„†×BzZ ãILzi¥ 3ÌŽº”“”oÁåÉÈTLY`ÈŽ W9ð`üÑóÝOâ«'bÒ¦ÆinÂJîSMÜ.Øgó~©;@Á?/ž”(^ò›F6<€Á–oÛÈ›> ªœH@ã´kêÉqçU_Û:¬Ã×°Êàušž4<ã.ZmT¯²\dÁwÒÉ_™ä©§rkÃ4$q[ÍÍË·‹V™ôáÐáãy”Ÿ¼ð@t¹´uh¥—Vš0>;þ>4ìø›]#æÆ®ÿ£ëvý?ëzÆ1?Vÿ«?nõÿŸ„ýúñ?þåkƒZÃÊPr¾Æ|˜üu «4¾Ý*ÇlÀ„] €&ôs'Ê¢AºYH\ùó¥çùø_Ï­W/_¥Ì…Ž‚vÿ§îaÀçnUÃÏ$,òPÇ=<Ç€/_¼YKà5i/g§oùd}Ð!/€*8û¶7Äã7uM±” ؘò•A»ÒÆ<^@Ù£s'½ý Ùå+¸ÓnípgL=ä Hv®<¾ºîN\: Eî1Zm ¸œôû‹DÑ©¯ýÞú¼íÛñ×Ep¾ãÖTç‹ù¹ë>lìú_ý?s ökõÿÚöþwÙÿó[„HaÀ=k8``‡E¸Å(Cí :zOUÁAŒý ¬äÕá7J&¯¼ø&°1o,Wfu§>?-ófä‘ç’û€ Ú “AÙ¶ƒ¼Žå•­E:z® ¤ Hûô^ÊAü.,e9i\eO|Šj3ðær|~þføÉ“¦oÔ£_ÓVr^r ©,ä,ÿÔáXsäðTN]£,º´wÂò'1cÄ@ª{—/p‹Nùò­è¥içŽÿŽ¿¹`~™O»þÿõD¬›®Ckr×ÿõMmºêú`}×eÕQÓUÑ]òÚ‡üÕÿçôâÞg¹Ö2ý©ïVÿÿÏoÿ?ø¯ÿý¿ýº;H j'¸°µC’‹ã3áYƒZc†Âí…òO>ù$o[÷íü8õ8>Ó'ò¾v´¬IL]&øidz]?:--üFJƒ|axËSoT̤ëO«ÇOÚÖ~UÆãhõþvwüРÅG8¹ÄëË×FN¾°|? ô«ùòÀŽÿ¹¨¯vüÏúÓæÓ®;ãgG{×ÿêÿYÑtêêÿµÿ¾|÷»ìv°¢8.…êSƒIdòxºƒSÃüHÏÇŽçÝ@‚áÎÅëñïÀ‚².˜Pžâ®Ã¦<›—¢¡SÆ£îîôØ…Rþ@œã@¿Ýg‡È¥v<‰î›‰W> fÊpj—Æá#ìé¢y @Î D‘XžÛ!~xÎKB§=‘s¾ÅÈçÈâœÑ¡çt&=þÄÑë³7Ó²ˆÛëï$â)y Ôu“URúmrgÄR¾tÒ“?<Ö'ó¯€êäNy23.;þ×üIŒÙñÏœ²>ÌYó¨sÉ„4_ÍsTþ®ÿ]ÿ.€›w½8 æÎêÿÕÿlPuJçÆŸ’ýúþßÏo2Í5ÆZN‰Ž×…`±0úŽã€‹Å–o]Ë¢Â0(]áû‚6ÜgðÜË 7^Þ•ÁÎ%háÒÈC®8bdèŽÖ9c†oä™<ÿÜ•âìidÄÏÀºÅU|=â54èîéâœ4¼ Û¾Ä”Ì¡üW¯ÎËP¥‘«N¾Žïî™tàGû<ÛævñZoÛUÐEî‘àŒÏÈš]¼Ù5÷÷Ñâ—]¼9rÌ¿¡M}ù³ã¿ãæ±é`žîúßõ¿úõ?½Èæ¬ý?ö²v¸8¾”ö°ÿ?˜{–X‡0w&¡„:•’õô>Q€ÈÔ!¡æíâUϱP`54âÂÉ›c9.õOZÇSšã“Ñ«kýêÈ2quÅQÞËyÝ^Ωsÿadà ŸñÅ¿=ùTêþêZâO>ÚÈ4iåIKŸŒ¯Ý¥CÓtþ#®>´#£wr% —uÚàP†ã®¼Éî ßÃzÈ&0¢‘yâ½`N™‘ßT'#¼ðk•7 ó'e‡Ž“g¢ìøïøïúßõ¿úõÿÚÿ±‰€ýŸoþÅk†”ÑUcdû1Ú“.Ç€ã€pK“«e F²s€*‚¬ ÊQ!6Ç:)7åË&‡3S<@Ô=u‘Y$ÿò#ß­OÄ?|1—âç_éðÔ–ö!žÝ™ ºÅÑup€»SøH–òé`‘ÅݨÉsŠ÷[í¹Þ‰5‰:w©4HYü ¢€e2v|½Êж}Ð|ü”ïCc¤&á)¼ã¿ãŸ9eòìúßõOÐ]«ÿçƒðèÉÕÿg>°%ì{Ãvðc›Þ#û€Uc ¨è„­‚“€‘«£ôY@À‡²”¬W!xi¨O9@_¾Â1ÒÊ@@»e™šÇ°KS¶Ê*­4äÈàÍ æp“§ž¦|òº€Y„4®;ãO…IU¶».Idêý-ùä+0¨'Ÿ²îItÒ•ãÂâò…ÉÕvIoÛì¦á-¿yݹ2ù=Dùó´}|­6q @Sÿ¤•‡ÞÁ·ÀL™öWêš8Ú8üûŸŸÊaëîæ0º z0yw‹q¦pù@@ úÄÑ Œ2ï<¾Ò+L€Â¤·N<¸ú‰\qiM¯/¿²%ìÏÐå­ëÃêŇó~®©OÜr°«&à•ÒÝ…¨î?2ó9íí§´‚Gõl _XiÛÄÑCê¨Üüòlºþ™ÄôOÁ˯¯ãN4A¿ãã%¿ýyxQòS·úýÿÊpÉOúÙLþÄÇ"ì®`d#ãU‡xÇbÇÇ&K\טùµëÿ¬¯]ÿg}ЫÿWÿ›kÿýýmö?ë,›£Xi9žªA¶Sb·É§ŽâeÝEroHÜ. c~1C_€Ðo­d@OÁG ÏÆñ´Iyέò?² '=Æ`@IŽå†>va€¤°¡ùø“ó&ø;pÒž*O<<ÒÔ#m.¡*ÇË›ÙñOC;Ä8Y*ãËùÆàd¥ žèý(µ:Ј£€ÀÆQ^ꓯn]ê‰_ò C(IFéÖò•¯>N¯VÖøWš¼Ð \nÇÇ×ÿ®ÿÕÿ«ÿÙŠµÿÿcö?¿Eø0ÄÓ¡±Æºõú9–'àjŒ{ ½Ý¯p× ø€`3ÀÀТ @¹ÀBïúL°ãx‹{О:'H¸žËÞ'ÞðÝ:†Áá3Á~Êv™Lá?é}Ÿ¹GvÞïçvȯ>yÙYÂsœþèÑ[ãZÞOæòK[‡^}ä¯LíS²´_ÂÿëÝJ÷zÕ“/]§d'íeê)˜ íPQ=Êi—þLè€<¼RvòË_ßÙ­ÒxUÖð›ÿÿóAj×ÿÑ»þϽÕÿ«ÿ×þsûÿä5 p°}¾ˆ²dÌíXäc¼ÑÙc foH·«SC3é³õI»€™ò ½ç¾ÿ Ä+p/Ü8pÁÀyɪ vbÈX¾˜‘;4ã{ë<¹ùÃÛ§6ñóoÚ;qw°ÚÆÐOnå®,•-e/9Ë·27á&ƒ¾“§Ÿ€ᦫ‡SF>ZiC’]C+j§Äq|À©²ñ›ÎOýã÷“©´:´<üÛñ7vüÍÇ3¯výÓq»þ¯Ý]:rtÒêÿ£{éÖ¬ýr ӯѩÑ×'oõÿûeÿŸ~àÇžcœçëõzƒÁ-q˜—fŽ’‘á§pì)VÜâ œ£Â‚ yÊ9"ã‹\àÁ™ qÿWi÷|DC“»V·‰þ#‹]²(ÄkÂÛÙ”È) 8då2·cQmyÝãÊN>—<¤“oGj0H€þ^$zD9àL]ÓÈØþÁ+Ïdâ§ý\w܄ɯ¼§òãQ‰F:à(QoU¶ÊÊoß•S©bI“Þç$žô‘lÇú|ÇÿÌóo×ÿ®ºdõÿ³Ž]ý¿öÿ±ÿO?š÷`Šϱ¿` aFØ"sÌÅø0Ø1ì|`é!èz ]ïDI¹¡Áó]~ò*½Oë’4LÁ€xäM@þ1Cr3ÒìÐÔ‘¯”@] ¥ìðð36@–ú®ž;VPÓ{gÍj}ã{òÚ'ä÷mÄ¢*`gügæ^Ûðvé^Ýè”ÕÏ\ëi‹ÄßêÇP¥“ž>´–¿²Ó'÷røpéç‹gw­*ÿÝŽÿŽÿ®ÿsï´ër×ÿêÿ‡½=ºúííglñ̉§ïÿíO^ˆŒ•ɰ÷®•âî4 è¹ À¡Ž2®"ª//eH$ÿÀ¨Ð‰“ƒŸ×&Ì·ßì¨¥Ž©'5]~ëf%¶ïåÛ¶æÈÃ,€ƒŸùxu½å]úË—Ìàã  T¿°Ý­³ Ç_ùð+cÈ/å†0ý8%¿úòìÞ¥|Ñ­ý¥/<ÝÉ›ÊÓÇ åÛ…œú§-vûJúløeÌ&Ì—®. ²áįºÈÔ]-ém¾âá5aNxÇ:âÖO;þ»þwý¯þ§+WÿûX{¶öÿlèÜíÿÓ_üó_¿fDj É…vÆ÷¾NBĤ'~`á‚ F¹†šïiº¦áÝ;DMç3èÙ‚M)ÔÏû©¤ ¨{dmM÷¾Ü#÷ÅÇn“cB4Ú“£È +‹ow¬äˆ_YÐ{Û»:9íú øð²S‡?p„'|¤¥ü„íšél|Ò§#›²êa´UN‡OÃäâRnx¥­¾á9´ òE?áÊÊÇGÏéÃæ­üðºÊÜ ÿÿÿ]ÿGGYs»þWÿW§®þ¾/̶°_l ;"¼öÿ·Ûÿ§üýÏ^3Á:ª_¡°2<ȶ­ú¡õ;fT÷yÖüðôÕ70v·8ôžÊ˜>›6À‚ëN”ŸÂ9—hó;‚“•>Ú $Lþ¦á§¼0•ëN™ÑÜŸä_ý[yRèús§Õ&ñÿÿ]ÿ»þéƒÕÿÏW'Vÿ¯ýg6ÿXûŸÖøÜ 8àñi5æŒ;ªæ0Fvƒ”4ÍÃÀOänØñëî–E=„GCà¡z¾|¾oû©Gº´ÊF.2Ië @¡ié”pcGíñCÔóÏ?ú8m|È4µ;ÞË=®©‹KÀÑÔ'ÿ;R¿´k~ñå§&] µiã€(üµ›ß‹ï÷:Ñâ/Íxä˜rdÁ·àïðÚ„ÇGïáêßÃÍ/ïÎò•~Çÿô>Ùñ?si×ÿ®kaõÿÑ «ÿ>Xû?o÷›ìÞƒÅp;úc\ï–1ì1,³ L$ŽÑåf;EòzÆ¡aŒäY€_ö( à./ÁISZÎn•W#5þx“£¯AŸ Ÿó§\åƒö ÐŒ+ØÖ®ÊFÖ|[n.ª+«LA…»R‘]Û¦1W{ðA H4™Tx(ï‰ñÐ&­¼•ë¶iÛÕ;ô§ÌÙ±B«œ¶ziDnÒÔ«~}d‡Nœ›Ú&ûPIk]á‡æjkÓëk/vüÀîøgÞ˜W愹aÞxvýïú§WVÿ¯þ7¢ƧÖþÿnûÿmÆ•{5> `1ÀŽÒÒ“Æ—¦c9q.ñ À8ÚãüÍ>O™òÀ»/ޝ, boú‹ù¦_^ð‰vò]Š¿Ë`'eòÎQÛiè»ÆÀ¤ºÉ¸Y9¼´]\›ï€EXš¼´q„j›ï2Hà8u”¾íÀ£ýˆ'°•;bW_´ßÚG§ü9þD™§?]¢Ô}@Öi“rc|Ï»®éø +×:wüwüÍ—]ÿÏXvý¯þ_ý¿ö¿öœ~d/9öS:'í÷Ùÿ§ŸüÓ_½žR9c4©€`ÁÎQ+ˆ?w©ø­¨yÊJS±rÂ¥+-ŸxLè&Ρ2\DW–+P€,h¤y8i0Ê>”á ;Wòîò(ÿåWó-ÃÉ5Öµ‘C£<TyÅíeq O ß…> ±G”å#Oõñuff‹|EùÞ¦ÚåZÛꛜÂê€R×%_Ž>léQmRžã¿û¥@-wᨩ\úù&çäO29cV¹vü§ÿwü3ÍÃ<»þwýÏ\ ;¸Î ºCݳúÿØžÕÿÏ»ßæŠùaÖ¼öÿéùß¿ÿÚ·ÇÜ]bÀ–é‘ÜñÉŽË,* ÇlpŒ0—¥v[\™ã>´h,BetowÐàß%´\(^nÙæ1üdóH‹œ×bW=_}òÚ+ ’Aþhä{n‚€HiäU>4ÒÅ픹üŸ:†—ãºy kû&|©qè"Ûµ{†Ov°’{ŽFO'žö'ùjZ.m¹ÚÚ| Ï‘*þ¡Sæ*‡¾eC?zo ½ö“‰³ ¨=;þ;þ»þwý¯þ‹1zwõÿÚÿÿ¿ìÿÓþñ/_3¸ îÕ¨Kgæã_?lÒr0cÔ=Êݸ'¼¯p€È„cÔ¯“§Sd×çDSGù|4?wC|ä4̧ë:eÉ¢@_œó÷]/ó%‘9|Ï[ÕÉDé€3ü‡]¦)4ý0€Eør] 9©oÊÚt*}1´díu¬Úò©ÿê+4}ÔݲdB§Q`§MÙ]»Ñâ¾x]齿…7×zùÆìó7Ÿç?ñ‡"zõæþ֔ñ<ðÑ÷êÇgÇÇ×ÿ®zŒ‰¾ÝA—ЫÿWÿÇŽÎ\`CX¢Î‹µÿg3#ý2}SŒÁÆrO?ûçÿøÚ%s–5 +÷,°!`ˆ'#€„A.(@ëŸr5ì#É›||$q´á‹ºÊ½þL¹‘«é~ ÙË6Éñù¼Ìô­ú‡^}SYîá§|ëæsÊJw‰Ã­‡+(Á 3‰î®môÐj_ê™]4up)C>×v÷N9ïý¢ëÏéw]úO¯ôÙüКéõáÓ6¢© è”ç´C:y$Oôå«ù9¢ÿÿ™Wæ cºëÿùïú§bFQ̼ˆ.¡O.=d®¬þ_ýÏ–°›g>œÍˆ„g~¬ýŸþøóÿã'¯ÞŽY<À†·sãb÷Xæ,,tŽšthÂc¡í°À´ÊXˆü† RyšÆG×A²˜‡—´ý ð€íê÷ïþ]ü/&œwQÁ ÏÖGޏIçš^¾Ú£ à¤-ÚÊQ¨?ÿùÏãÛiÊyñÅ ½þˆL¾ûíåÕ…?e¦?9ý* §_À7©#²L^¿¹)ÿöM&°´«¯Ê—|älù!‰¦ô©^í–†oe‹¬®”ßñßñ7ßvýïú§#Vÿ¯þ_û?_꛵Àſ޾Û}iâ¿Óþÿx.¹·c™1ÅÀB]ÅŸc5GhùYša…<„ÀŠü‚Æ;f~äßã£÷´ž¼º ¹lÈ”›¢Âù9™ +G6 D}êÅ'¸'-r]õ¡“Ž/ùV>nòúm:ïÞzõòUŽ5Ñ*—ç’E]Ê·7Z§“„¦NÿÞz…”'^‘uU¸}¢ì™ÐÏÀT?GÎKŽ{;É4Ê0m_N[ZGû @Ð<4iÛ%“ðŽÿŽ×å®ÿ]ÿQ$—ž gèúzõÿ9Xý¿ö?kbÖÈo³ÿ±Æ2 Ê•QÄsçhp@á@øÍã«ÿ“og èPY}eg„_€ü¼1~êð#Ê_²†Ñ*÷áÔa÷E]w0!üá¼ lá1õuÁ+§¼8ùmKzÐ}|ýPs.ÜOYt/îäÈ•z&íå¼™ý‹7_$ßÑYJߦ? `ôGý.Þ×é3ý7DuÜ™×XàAÖ´yú­ß8,ÏöWêÆÞН~mêƒ Ã#m¸ÂäÆIïÑ`ۢϓ>4¥Ûñßñ7÷výïú_ýÞ¸úímæÿˆýŸ#¿fh1óÉäîÞ5Üòã,B´cð{&Gù lºCx€S‚2ò]€¦ð“4$ãÈÄ)G–„‡îN/Ü>wùä hó𳃕×'ßù䵑£àãÞnm)øÁÇQ%¹½ÐïSßóñÜ$¦žÈwšñhCdŸ|­ìdv™F6y€h@ÒP„ï¤ùæ# ŠŸ4Æ­OTä~€×«ô5Z.ùÓ^>úŽÛŽÿ™K;þ™&™æ˜ùQw_3©wýïúÏÔ¸ëW â«ÿGßΙ…´úæÃûhÿ°,Æ7¯4…pr-F8ÎD'Þç1y®ËÝîu‡¤åðÍŽÐeÜ | ~Gj_~qîT¡÷Þ)ÇXh€fpð+@¸¼“ç’‹,h¹–k\ىʅN8íž‹ÞvÛ8t.}+ûæ‹çŸ —G^N¹~âR8`QûsÊ„š2yeDûT’vúP¸¿µØ;RÒ´Øâ€'àO}ŒÛ£ÞIӯꖮ-i§;q“'Ÿv¾—³cf *»´ÿsÂ\±ÌÇz™4®ó,éÒÌé]ÿé›]ÿ´ßùàÖyC¯¬þ¿ÖÔêÿ£[¦Þûÿô—ÿçÿöšBýp¾•Ö»9´…´:È‚±x¸(ÙICsî c/‹IÇÅM^þ©¦ @‚†Q·ë“o(¡Íñ¢Ð=Ž)xiŽÎŸ‡,=žœCW'þ0dåQÚñå{ÈD?ô ¤ôHÔNGa¨VÒ•©œÝ1B[žäMxäHÙ‘Z›•+]Ë;.ìŸü©çÖÌoÄM?iù>ÿ|^Ép3ziû0UOwñê4 þÌIDAT =Z>yж-â@¤21 øïøïø_Gçæiç–ð®ÿyÿÞ®ÿÕÿ«ÿ©ƒØ:ŽXû6W~›ýŸ×4üõë÷Ë×€WÁ2Ðò¥×é\ÿ'ƒ&>þ•Ùrü†ÑÆà½‰PP S@ÐA°¾ b§ `(p#ƒçÎ;uaœ¿mèCf¢’Sþ%šº»NŽýÐÚ5Ò®Ê:NÞÈ>t>8FxW¾¶±õ¢iX9aòÞÃu—G~ÛXÖ#@¾z:&Ê¥ýÊL_¹C01Ò…ß©Sy€ª÷Ú*KÛ ^¾­‹Lu;þ;þ»þwý[ý?Jqõÿ±¯ìCí¿á÷ÙþçMîv68Gn1ž‰ Pãÿè°é8 ‹Á=†øí£„G§^ùäü9.“‡îîp Pߎ˯¦.€Ækòm=ÄÊLxä™¶ ²gÞÏ¡F´XQ.á1¸•tL6r€@Ivˆ pæ(Ï|š™½42jO¾9=¦Ÿ´OrrÚÕ¾qW 6µêh¸tä¨Ã›ÞJP1»W©³AqØs>ªÎ6AÄ8âñÝ/g;L Ø¥,¨ƒÞcÂYÚˆsž´m *ìÌLÁ‹?ùlhË¥^êÞ´õëàËW=yåí£¼>‘£Áž mµOèÀ·ß~›,—>I½F¡»J‚%ü]øÚ‘’Ç'ú¥:€Wž‹Òìr¡#këÐ'uʽÛëüýEíÁU3õ¼—KŒÙ•§;]ʲÊÒ¶ÈTîøŸà¨ó„Îvüwý[ë»þ×þ¯ýŸ/Óëÿÿ«ÿÿðÇùcÏ:Ç^ç*â¸×/_'Ì15g¥8ãM•¡“ªi<Æàô ž >d´ÝàÇ}vLg7¨þ9ç4å ží“»2Ô!º‘d‚ÿ¤òO¹½$<µ«NÚš²¶Ó: H®¬ låFo·  i"xÑ÷ÊËWÀª.öuôC'h€rzÓï’±-û”Žðêá­oÒ¯²gÛŠ§Ó~ùµ¾6ä?¿àñ;þ;þ»þÏ‘®›]ÿçK"=¬ý_ûÿô¿õ)æÆúÿ³IQÿÿỿþé{ÊbH€¼ÇF‚7ÁÇà€´]X­ËAwÁÁ,¯^ècÆ¡Q–]˜IýúM»ÎÙí³PçO¦âÑzçÔHAP&è½ê*¸GþÌ=Z¼Ë¿4µÙ1‚ghá嫇îNUfm“£}{µ3íùE¢sK‘oîý1H“ÂãŸ@iʵS\Û;uHûfÐÐÐ õ+#¼Ç¡ö/w¯Ýò«Ìð•3ŒæÃY* È)=õ1‹:ÀNšê¯»uôÔ~„6ô§NÚšûœA»râUyÒ¿)W^N­c áÈ3…yìçÞÙ¶WøR¶ã_uDŸ;þf×›c5GÌ»Î_ùâšîú?ög×ÿÚÿµÿ'¨o{§þÿíQœŸÿŸ™IØ0²ÇÔžÇK}£ZÊF0ЃÝîÁ3Á›ÃWÇ!n©ˆà‡ü Îc¬ßίãÒÖ||óÍ7 L„½Pìý¼b`v´3 dòØP}4ø?4/À'×Ô½tçþ­OÚí#@ºˆÃ@ Ô3M‚•>z£€Oëê/$ؼ r»vämÀ@×ëÅ굟‘}pÒ‚|Û%¯Ì®|e®îÔÙñïœ8ã×1”îøŸYe.ïúßõoÄæ\[gvÀ­ý_ûŸsÌÅ»÷ÿã_Ïv.âÑœ(3;+s_à`”qÐ 쨠³¨@œý,¶ÞÃá ß:pe~7yeþ €Å%/ Lœ€WÿœKŸ©;¸Ü÷mëyééD (žmʃ„äÝÏ%ƒ­#}ÊÝúMÕ¡/º‚#‹¾ö?åäï£Dtîüé-ÈÌëF4Aœºx¨'%¼ûèlpð…ȬïKyiÈïj}õ¢Ã˃<ÊÑË£ÛñÌïÑ ½ô¢?y°ã?sg×ÿk½ïú_ûÏŽ®ý_ÿÏG<ýÎ`™Œ„¿³ò–tŽø« 8@—Ê‚9¬­' Çõ˜`uêBÏqйLùŸ¬Aäü ÔQ÷ qmyÐhÏÙ¢¼ðrˆ9>÷Z¨cÌãÄ+KåÇ·Î’òLÓ;þg§–^vüwý›YC7ÀØõ?_ Ù¦k‡è§6uíÿÚkÅœà_ÞƒÿÿÒ£¯_/£¯@‰¦ˆ^ê¼cK8ÛÙ «8¥ûø*ʼo—ï#ˆ~›±ðä»Ýûôã?ŒóÂÓB…W¿íËàz/Ur¾K ¢ SvëqŒêy¤(X2Ð} z΄ ]eÓZÐ~=åpà—ü¹C5Ê$öÝñªìÚlÀƒž<}MCû×|Ô¦¾Oú”áíÍÕ~ mÿà#äÈÝzRe c>é‡/ìZNfÇÇ?㬟“ÝõÏ6®¡]ÿמÜo±kÿ¿È>ØÕµÿ'pZÿÿ©ÿÿ’IµÛâ_2§;P‡ÝüË¡CÜ€C¶ßJä·¬FI !Š·È-œ ¡yÁH~åöõLÜy<×GX LJ— óQ¥m@§˜÷fŸŠ:úĈ¾äQÚÏœ©šš9»4õ%²dçkÚAKfÐ@íç+ 9ÐÂW¾œC©We2Î@€wÏmôL¾”NÙ}ü–Çvw`ðaØ hÛ‘gÅ»¬~þéíh”¹ú²Ò êÔïŽRùt€ËS9yÃ{RåýÕceÌ#´aPyCó¢=;xùv748}J»Ã«éWƶÝ4à”õ1ž:-«ƒ³ ¯|-ˤè\äú➌®BÏ”nÇ?šÍ8íøïúßõÿ©]a7¢“I×þÛ”XûoN€õÿç¨PâñCüúÄ£›/9ÎÖŒ©ÒÆ)‹ªø—3†Oé|L}ùùÓÌIѸL…ÿuîðî]b ß @¾APé?o¾à/ø–•Ÿ_j¯ÿä'Øëc>x; ÷=Qä ¯9”_YÛ†ôÇ  xíWË´h§Kݼö‚ž†þÅcÊÝÛ|"Syükʧá›ÂÉ?ÿ¾€h¥ðZyÐ{²Gïî§åèÝŽÿyÌKG;þfÄ›-0‡:w:/Í®× Ì\Úõ¿ëíì*[=°öÿl¦Ð ŸW¿×uò^üÞËÀÙúŸ Â`ÞI’™25°Ò^Êb|GyS1¤ÙùåL°üÔ÷žÑl1Êv Ô©rýAbï…R>ŒCƒ¿Áäy¦•#r2üóÏ[ÔK‡÷éô1ø¶/h+o²œ(ó<ÝQh¡µëäêëÚç¶S9ÐêmÞ¿IN´>¬åÍÖs?ÛXÁÕ9¥îÔw(VËóóþm¾˜Ç6LÔBëÃW?R:*­¶AËáÕÛñÿ*zØñŸõy×è™)ç³sKÚKIæÏ®ÿÑñSÕÉ®»;c—×þ¯ýçã®o—þÿ»ûÇž)=G ¸Ô¦Ï` Ž»Ž¼ êÜŸ€ =ÅzL&ß3O¯GqãÞñf”¤xºðPÇ‘ ï¶.ÁÃÐOüz²Hõ\ 27-ßî/í Aó3caÌÈ8]e•?ý™` ¯æC8øiþHôÈ!ÐC'ˆÓî¦nÛÆçYO»¯Ã´œ×a˜C󉮮\èÔ#ׂô÷¶™3EW>rÉ…‡´ íê®r6meøô¹ÿÿ̹̇]ÿÖÅ®ÿµÿlæÚÿ÷éÿÿ $ôn>4•IEND®B`‚qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/main.m0000644000175100001770000000314314616416776024174 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2015 Petroules Corporation. ** Contact: http://www.qt.io/licensing ** ** This file is part of Qbs. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms and ** conditions see http://www.qt.io/terms-conditions. For further information ** use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, The Qt Company gives you certain additional ** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ****************************************************************************/ #import int main(int argc, char *argv[]) { return NSApplicationMain(argc, (const char **)argv); } qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication-Prefix.pch0000644000175100001770000000303714616416776030233 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2015 Petroules Corporation. ** Contact: http://www.qt.io/licensing ** ** This file is part of Qbs. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms and ** conditions see http://www.qt.io/terms-conditions. For further information ** use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, The Qt Company gives you certain additional ** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ****************************************************************************/ #ifdef __OBJC__ #import #endif qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication-Info.plist0000644000175100001770000000225214616416776030250 0ustar runnerdocker CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile CFBundleIdentifier org.example.${PRODUCT_NAME:rfc1034identifier} CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} NSHumanReadableCopyright Copyright © 2014 Petroules Corporation. All rights reserved. NSMainNibFile MainMenu NSPrincipalClass NSApplication qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/AppDelegate.h0000644000175100001770000000511414616416776025416 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2015 Petroules Corporation. ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #import @interface AppDelegate : NSObject @property (nonatomic, assign) IBOutlet NSWindow *window; @end qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/AppDelegate.m0000644000175100001770000000337414616416776025431 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2015 Petroules Corporation. ** Contact: http://www.qt.io/licensing ** ** This file is part of Qbs. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms and ** conditions see http://www.qt.io/terms-conditions. For further information ** use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, The Qt Company gives you certain additional ** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ****************************************************************************/ #import "AppDelegate.h" @implementation AppDelegate @synthesize window = _window; - (void)dealloc { [super dealloc]; } - (void)applicationDidFinishLaunching:(NSNotification *) __unused aNotification { // Insert code here to initialize your application } @end qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/dmg.iconset/0000755000175100001770000000000014616416776025303 5ustar runnerdockerqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/dmg.iconset/icon_512x512@2x.png0000644000175100001770000017413014616416776030330 0ustar runnerdocker‰PNG  IHDR+ƒøIDATxÚìÝxdW}7à3õ•¶w¯{ïÆÆpÌGsòBB ‚ ùZƒ˜lbBŒLy )`=´ÐbÀš{Y—õºlß•V]óÝ;»kïÊiFšÍœû¾ûÌ£Ñh¤Õ½çÎèü÷œsC²*gÞFÁ.@gðú`" ð: Ã(À뀌 ($¯S2F °¼6Èa€"ÈðëÑ{@öŠpA€‚hòס×9@œ Mös€×Ÿ×2 XÀ  @¼îrMú{(Λïÿ(D€:¿Þr^ë̲ /ÌÁÿ‰¼Îjð½^ÓÙU¨ñó Ê¯±\ül²Sà×#8@^[~On^×Þ'澘ŸíÏ*ÔàwÀëªÊÏÏUáÿòZˆC5ÎêªôàõT…ç×âk^ÿ þj…Bx-Õ¨ðÏUñgy/hþ‚¦Å}¡FA€@^C³(ÖsüŒ\_çÞâ*ügó˜@T©øŸiá_­pÀû@óåê…*=G ¯þ•~>ÛÀû@ã‡3-þgûy5~G©â¶…5CïÍTzf¿0ƒçUú˜@™|Í”{¾ÜB¿Ú@-_ÿÞS…{íÞtEy¥÷+ùZ¹Û*@ô¯•jžáŸêþž[K…ÀL_ûÞ+æ&(˜É<þÉŠùÂîÛøîÛl!€ÿÿ•Üßû±´èoMní»o-»o•þ.Þ š+˜Iávüéç£Ém ¹ìL"ÕjÀ¬‹ÿrβ— Ê-üs{ÿmÉ­ëÌ/]ø¦Îýæ½ZP®ïžò…»ѽú˜…Ý÷ “<¶wŸSÐ @ñ?õc•œÝÏMñqÏ™ÿî3ÿý‚7'Åÿ«4j ûN#XüOVì禦 „Ètñ_nÁ¿÷Çü>Åÿ=—h"f e’>éT#„PüOóX¥Cû§;óß¶»ø“â€Yöus“üaŠ@ PFQ¯È€â¿Ì Ôcû?ã ŠªLWôçÊ Êýhêâ¿’!ÿ¹ €üÞÅ×=¯ÔDT9(5쿜À(d¾øŸéÙþ½ï?:ìÿŒë/økÅ?5 &ªtø%!€€@ _üW²Ø_©â¿œ¢ÿq þqýùoê:¨çÏ45 ¡ô¢€!Tg húâ¿Ò!ÿÓ{ù?ÿ¯»êUüPíþoK(½ÀdŸWs*€AQÿåœõß3çWñÿùóߨø ZBé)“…!ÔfQ@}ñ?ÙçûžùO‹ÿƒÿÔ¬<Ý!L=% ÔÏ5 @™+þ+ òŠÿWh"æ((L7(þÃãÏöO~æÿsŠ&˜„PÝQ )ŠÿÜ$o !”?Üï3ÿékpÞéŸ;ÿ ]‡(þ¨[žˆ¯ð{«9 @8 €¨Šÿ©€G‡ý§Å·â€úõ‹§[pº>s%£@Sÿå.öWê±=Åræÿ¼´ø¹& Nö.þ'Ž(LÓwžlxÿt£ÈDñ?õ™ÿK‹ÿùŠêÝ?žl$ëÄû…iúÏ…*ý.Âd ø?Tñ@Ã…÷'*g‘?…}ƒj± Pü+þÈT?¹eŠ~ëd!ÁtýéÜ4}ðœÝÞŒ@ñ_¿â^Rü¿^ñÀj ûÎÿ/Õç-LÓ·v†¿Iÿ•ÿåÞZÿ4Xyº³ÿ!L?`ºþ·³þ Èÿ3+þ§{óLõ½‡ý+þhÔ „éרóy˜ä9{>ŸêjSý>FÔ‰(þÿrSô…C‰>q5ûë ©ŠÿÅ?ML̤¿¢.þ­ö@³S…Sõ»Ë½Rˆºø™& ‰€rB€Éž¯à@ôÅ‹â€È€©úÌÕê«#€¦+þsŠÿy§ÿ«â€¦ ¦{N%!@n–¿hªâÿõ݇)þhŠ T_wªyÿ¹*üß@ñu¦šËŸ›¦O­°€âš¨ø%úÃ¥úÑ!”^$p&ýx ø€ö­seþ³í‡#Å?4PÊ*-îPü@ÿå\(þ  ûÙSÍëŸnñ?€ÿФ!ÀLæÿϤÿ0ýíé.ïWêk }(þ ÉúÞå† (þ ÉûÞ¹2¿& €âš°ï=Uq_é:¹*þ^Pü+þ Fýp‹þ @ñ÷Ãs3øž‰×s¤ÿЍq]/Å?4a_|&W@Š(þ Yúæ³] Ð(Þ`ÿÐ`}ó\Šv€Å¿â¼¯x€â2Þ—GŠPÔ#À‹â@€â_ñ ÑoGŠ À†â@€â_ñ @ñ¯ø€ÆêÏ#Å?¨à…¯ø øWüPü+þ ¹ê(þÿÿŠŠÅ?€Å¿â@€âŠŠÅ?€Å¿â@€â_ñ @ñ¯ø øWüÀöÿ øWüPü+þ(þÿÿŠŠ(þ ø øWüPü+þ(þÿÿŠŠ(þ ø@ øWü Pü+þ(þÿš¥øŸî{ÿ"(þsŠÙ ÿš¼¸Wü Pü+þd­ø/õ=Šÿ ü‰÷ÿ"/þseÜÿ0¨FñߢøÐþdÏ/µØŸâ@@ÿ3]ñºùþŠ TZüçBesþ»ÿÍ©Õ.hª¿ÞÅË>Åÿ¿÷†îCÿÍÈ€æ,þgò}åùWühÐp 7Åsf2ä?§øPÿ¿Ü⿜ÿK…{ßZ÷*þ_¯øh~Öh®â?Ì øŸ¬ðŸîÌë^ÅÿË5 0QWKgèÎw‡žäÖïÚ}^ñM$ýøè™\kñ¹{t´t„ÑÂh+Œ=úØŽ±¾Gï§ï ã…ñ°slgòµþâÇã¡l Ùù€L‡¥FTRøï{©?Å?dJ>—‹Z„%m‹Ãâ¶…aiñã¢äã¢âÇ%É­7ßzZçí.ôssò{‚$èK‚­£ÛÖѭaÓÈæ°ydkØ8²%ù¸ë–Þß:ºmŸ @@3øSù¥«tÑ?Å?d È_Þ¾4¬n_Vu캥÷ê: ìß±:´äZšbz[{Š·ô÷Ÿ.,xdxcX?üpxph×mÏý{ïOF ;(M”;ï¿ÜÿÿEÉYüû‡wë>8ÚuPXÙ¾<’ŸÏÌ>HÂ=AGè}|8ðÐð†pçÀÚpçε~Ü”ŒPÏ¢¾Ü¯M7ôªï+µÚ¿âšÌüÖÞpü¼£Ã»‹ýôc:”Ÿ©Ãý:Voç,<óÑÇÓ©{€ÛvÞ~Ówsqª€€F rÓ„¥n-Šh>é¢{GwNžB8¥÷„âYþ¹š“›týƒÓÚžN›ÿ„GK§ ü|ǯÃoûn ¿ìûmqZ@,Å$ÕSå/õqº[Ë^Åâ[GK{89)ôOR8±çØdÎþþ þ9´nh}øÕŽ›ÂO¶ÿo¸qû/à+ÐD¾{ÊÎM>lMn#Éml÷m|’“Ý “|œì&ÜSÜeêŠð•ß ]]Ø1Úg§QÇ&gÍ €¿‡UxN% ªX`†×t·W®ùã°0  –ÇZzéÈsžY Ò0@ÑD Zr-a¬0fG(QèO·øßdóÿË € Òu`xÍþ¯(Ó†zémí uÀ+‹ÁÓU÷}$Ü3x¿B“wrtAÙ,ìgúü©þs@¨²Ž–Žâ<ÿô²~­¹¼œ8¾çèðOG_þåá/†O?øoa´0j§Ð”ZrIÄ`€``VÏ)5ïªð˜ÆAû‡KþËâÙ˜ó?ܹÖð‡+/N.xR¸|íº¡õv MØéi±æ€wßæ ¦þŸ+ñX©‘@É[.9ãQøÈÑW(þi8Gt>zôû‹Ç(ÄÔÑ vŒhŽ¿Ó­þ?ÕóM€Xغ ¼ñÀW‡Óœlgа:ZÚ߯ù“pBÏ1áÊûþÑ•hé"€ÌÁû¯]0'}=‚\p˜‘Óæ?!\{ÌUŠšÆ“ž>zÔûÑ݇Ù4I‡H@ ˜ésr%>–z®JH/¹ö®CßTÍdyûÒð÷G\Î[|¶At@uAæ‚)ÍLUÄOuÆ_áä“•ý_ ¥~β§Û4­ö–¶ð¦ƒþ_8¸ë€ð±>“,²n™u´C“ÓPªÈ/UØOö¼rWþ7v›ßÚÞ~ðëÂI½ÇÙDðG$^¸âyauûŠðÞ{ÿ! Û)4œ]€9zÿ¥Y‚€rž;ÕâÓ=™t`çšðGþ­âŸèœ³èIáïg2e¾A“wsPê/¨³ÿP¦Ã»8âoªŽvQ:zÞáÉ1~yXÒ¶ØÎ ±: ¦2V¨Wã{sSÜŸêì5~'hjG&×P¿ò°·‡Î޹:÷KF¼#,ÐP"]P€` –?«T@™s|ÏÑáý‡¿=ô¶öØdÂþ«Ã|WXÕ¾ÜΠA: º ¦+îK áŸêì¿¡ÿ°—{Ž ï=ìÒÐï¶3È”•IñÿwG¼Ó”£Sc €€²çóOöy®‚Ÿm™”.ô—ÿ]-v™´¢}Y¸2ý²¸m¡Áw@uAÔŠyÿd^z]ôwò†ÐÑÒngié4€wúfAsÛ11@À¬‹ôrýsöŸLI?{Ï¡o =ùyv$ŽHÁ¼ì׆|.og0GÝ3 rÓ¥žë¯/Ñ›—ÌõO‡ý/o_jgÀ^N›røËþÌŽ`Ž: º ê@&´æZÃ;’aÿ‡thgÀ$ž¹äÜð‡+/¶#¨ÇÄSïÓ=ž«ðû!z¯?ðÏÃɽÇÛ0…—®~a8sÁíêÜÕ0[S…¦)ÿgéáüÅgÛ0íŽ\øëƒþ¢¸8 Ôó¸@@å…~©ùÿ¹ ‚ˆJ:äÿUk^jG@™zó=á­ÿUqÚ Ô¥šÓP«‚ÝÙ2£;ß.;øu.÷:jÞááûý¡" jõ³ ^¹ð†_öï\mgÀ \¼üYáÉ Ï°#¨CT@ h¯ÅÏÏÕùw9óÜeÏg+^`Lráu^–´-¶3¨í±æ*¦-òs³ü~ˆVº€ÙËö{‘³”®ðÚ^iGPã¨n € ›E}-¿ß¥ÉÈ )Þ˜¬bÞÕÒig@œ±à”pá’§ØÔî}Û"€ê\3A$ž¿ü™á„žc쨢W¯ùÓ°¼}©A: º!sÁõ~â-è'[ñß_[¢³ºceøÓÕ†þ7¢¡ñá0\.Þ/Œ‡cû|½£¥#´µìú3”Oþ¥Wp qÌËw‡×ìÿŠðæ»ÞmgPƒN‹. €€© z`’äë|UèL Iêc¤0Ö=6o F6…‡‡7† ÉmóèÖ°c´/ôõo;ÆúÂðøHE?;ŸË‡žü¼dú¼ÐÓÚ“Üï‹Z„eÉYèemKŠg£ÓÛŠöeÅçQ{{¦|cÓ÷ì ªûþm@U üU%ÒÂäÄžcíˆY7´>ܾóîpÏÀ}áÞÁÂÚäãúᇊgóka¬0¶n/ÞÂÐÔÏ]š¬R`×þá Îô¶&ÚuP8¬ûК„Tןí÷âðí? ýc;í ªØaÑU(Þëýsüõ¥i¥ÃÅ_¶úíˆ*IÏìßÔw{ømÿ­á–þÛÃMý·…í£;ö÷Ý8²¹xûùö_=úXGK{8¢ûÐp̼#±óŽ 'öS\ÑžÙY˜ŒÂøãUÿ7\³î“vUÓb*@¹^¼ò÷Ââ¶…vÄ,lÙnÜñ«ðãm7†·ÿ²éÏð¦kü¦ï–â-„/†–d•ñúg.xbr;%žŒpÖqfž·ì™á뛾î¸×Π*LP§¿¹vÍnMÇêdåÿ‹ìˆØœýßÝòÃð­Íß·í¼+êmM§*ÜžlczûÔƒÿZ\?àÜEOç->;Üu€ƒ¡éú —ì÷Çáõw¾ÓΠ*\@P–?_óÒd®··¯rFÃ÷·ÞœÁýNøÅŽßÔl£{$Y¬ðŸþ÷â-]3à‚d ‰§/yªie:eþ‰á¬…§'ëüÄÎ`Ör9SÔäo¬]@LN_prñÆôÒÅô¾¼ñ¿Âløz̗ؔç1w Üþ1™Óþ‰õÿ\ .^ö¬°çj;fé(€¶ý¼*Î € †Æ\x¹…ÿ¦•^žïº¯ßÜüÝâ¼xJ _ÚððŸ¾Y –þxÕï‡#“…™ÜªŽá™KÏ-î3˜ ‹¨uíMî)‹žé:ÐŽ(!]µÿ_þbøÂ†¯(ü+THþ¥g¶ÓÛ)½'„KּıV­üÝðMÂ%fÙ)± Àœ¿Íñf•ÌMÏÎòxépìϾþ³açØ€R%éB‰_IÖOøÃ›ÿ¼¸ŽB:B€Ç¼pÅóCGK‡ÁŒ¹$'€€JÿvBF´&— {ñªß³#ö²slg¸òÞkÂknk¸gð~;¤FÒ—ŒxÃS¼Š»,n[ž»ìév3 ˜Ì…É¥ÚVw¬´#v»mçÉõׇ¯nú¶3Óuòóí¿ /¿õµáGÛ~jgìö‚Ï ]-v3$L|“JæþÿA2ܘ] Õý[²Èß_Üö–°~è!;¤ÎÒÑo»ë}áCë® #…‘Ìï­óÃ3’+ÀÌ: 3á/(Q;kÁiÅKe]º°ß;î¾2|øO»ûJC˜ëùJø«Û/ ÛF·g~\¼ì¢bHw^7€‰þïŠgg~¤…æî|gøþÖ â¦þÛ«nûëpÿàúLï‡4œ{ò‚ÓÌ êü€`/ÇÌ;"¹™é}pïàºpÉ­o,®öOcypèáðÿnK¸9 ²ì÷VüsÀ„Â"Ûgÿӳ˯»ãíá¡áG *ñº;Þ~Ýwsf÷AÒe=¨cPS{¬l_^œÿŸåâÿ¯îx[Ø4²ÅÁÐàLJ›ïzw¸¥ÿŽÌîSu¨”€G]¼ü¢Ïå3¹í÷ >^sÇ[ÿMdçØ@xãîØ¹6“ÛŸ†uËÛ—:*ÓÞÒ.Xü”LnûöÑá-ÉÙä-#[M¦o¬? ð®°adSö:Épîg,yšƒ€ Ž€ qÎÂ3CokOæ¶;½¼ßÛ×^zÈAФÒQ—Þõžâ´€¬yÆ’sÍë¦lFvçen›ÓëËÿí½W‡_î¸ÉÐäÒiï½çƒÅ6Í’t À)½'8(¯*,¬îXNì=&sÛýÅ _ßÞü@$¾¿õ†ð…G¾’¹í~f2 Êa€ 'SÛ<<>ÞuÏÂÐø° 2#…‘pùÚ«2Õ¶­¹Öä5|¶ÆgúÀõû»kЈÎ\ðݤmQ¦¶ùÃ|*Ü=p¯ÆÔ½ƒëµë?›©m¾pÉS5r_ØðÕpçÀÚÌlï!]†;×hx¦d a]-áŒù§df{Ç ãáïîûpñ#q+Œ…Þÿ±L]à)‹~GÃ3uÔ]OZxjèhiÏÌöþû†¯%—‹»[ÃgÄoûn _ßôÝ OÒèLÉ"€ Þš¡3†}cýáÓý›FϘ¯ÿL² àP&¶5N€’P#@6õäç…S矔™íýç‡ÿ=ìíÓð³ydkqäGV˜ÀT¬07Zí`®µðôЖkËĶnÝþ㑯iôŒúç‡þ=\´ô¼Ð›ï‰~[Ÿ–|„ïœ|½r=¡÷¸G¯KFÌËwOùüt˜ô2“%;´É׺Z:¦üiØ<Õõ;“ïo›âÿhɵ„y-SÿžÝù®âóJiOþÖu$ÿÏ­ýw„WÝö×@dÏS™™mýôƒŸ ãƒ=£vŒõ…ëùrxɪD¿­«;V†ÃºÎÔ(ßióO.Þ²jnî¿-Ü5pOôÛ™Žò™ê²hEcF k²²Bø—Íý§„¯oúNôÛØÛÚS\ xLÁ€È’tèÿá݇D¿é¥ÿ~¸õ§œI}sógâʧfd­(—5)'õW\0úoÓ÷’ÕÞG58“Ú1Ú~°õ†è·óÄÞc46Ù ÷¸Llçmþ¾ÆfJßÞòƒè·ñ˜yG„Ž–v {‹ [À±Ñoã}ƒdb‘7fçÆí¿Œþ‘m¹¶pt»€` @dÄ’¶EaMÇêè·3 gv™½ÑÂX6¦ô«±aO` ²"+Ãÿ¿»ùG›òŽ•-?ÊÀë^{Œ@f€ œ ¼cçÚ°nh½Æ¦,¿ì»©xň˜Y3f ²âÄ Œøñ6—þ£|épà¶ý"êm´<¦à*€È‚%m‹“ùÿ«2ܨ±©È 8fŽï9ZCC° 2âØ œÜ8²9Ü™L€Jü,¹ÀHa$êm<ªû0 ÁUGÍ;<úmüáÖŸXà‰Š Œ†_ï¸9êm<:¯(+0™ºã/~²ýš¹!òcgaë‚°¼}©†&ó¬€èå’Gtõ6Ž%×tÿMß-›ùß¿‰~î6 \Ñ;¸ë€ÐïŠzoî¿=ìÐØÌÈÚû–‘­Qoã‘󬦉 zY˜ÿû‹ œÁ¥¶EÁ¯úâ^ÀB€` @d@:þ¿Øñk ͬüïŽßF½}GtZœ™Œ@ô@ä#†Æ‡Â-ýwhhfÄ=Š$t@ç~šlF fm¹¶p`çþQocZüF56³²nh}ôë¤ë@¦W@Ìì\Zsù¨·ñ·ý·ihªâÖwÆt Èx` ¢îðgàŒßͪv,ÝùûÁ™Ls@DíÈ;üigî&€2ߌ ÛÆŒ€ yÝ7ø@Ø1Ú§¡©Š[’`¬0íö­êX:[:44™U° bû€[ûïÔÈTÍ`rE‰{×E»}ée2 € /˜€Hõ¶ö„¥m‹£ÞÆ;îÖÐTÕk£Þ¾ƒ#¿*L€Xš¿îØ) ºîÚyOÜ€dXÁ@Äê È/ù•.x×À=šªº3òcê —$ÃÆŒ@¬èÜ/êí{`è¡°sl@CSÝ`çÚ¨/¶_ÇJLf\±ZÓ±:úB ªmÇX_xdxc´Û·¢}Yh͵jh2É€ˆVìgúî¸W#ãØª´’kI.¸\#“ÍÀ€ˆQz†/=Ó³˜/×ÆÜºoð¨·oµid50qvðWÏôÅܯ¡©‰û#Öt¬ÒÈd301Ú/òþha´¸ ÔÂ}CF@”€€ˆQìgøî\Æ cššˆ}z‰+U®€8€Î¸óÿ©¥£}aëèöˆ€Õ™L2QZý€42ޱJ}˜4° b´²=îË|­6ÿŸcCG»m­¹|XܺP#“½À@Ä&—ü[Ú¶Xq³ðÐpÜÇØòö¥™ìÖ@l´ö†Ž–ṽCD½}ËÚ–hd²Ì‘V»¨YÇ>ò3{Ãã#aóÈ Mm€ÈG,3€54>† #“~­lg²’ÿãçñ%ÿvŽ ”øyÃþ¼Í#[í`@Äey[Üû´0+ 9Qããl(ö`nF<í7ô~ùÎÉ×GÝîWÝ÷‘b=6Ù™ð¤°îëŸôûF £a0)Ì'30>FK\–µotòŸ7šü¼ñAo4€ Y;öõ²~È€ÔÞ¦d”I:Ú¤½¥-Êí[n @&}yã Pæ€5€Úuì#ÚûððLÍ¥EÒ†‘MÑn_ìA!@6ŽlÖÈÔéX‹7Xj€æûêÞ†7idê Ç6-i[Zrº# šÚÒ¶Åq#êD<Ú$ŸË'— ¯‘@4³Em ã†7jdêÄ6-j] ‘@4«Ž–ŽÐ™Üâ.ʬ@޵á¸5#@4±…‘wèwŒö…¡ña M}€Èæ…Í+öáÿ›G·jdêfËè¶ÈS@4oy‡~k䎷úF€Ð¡oÔ‚lD@ýìÃã#ñ¾_´ @4q‡>öÛ52u>æâ ˜ ‰€VTÓ¶ˆ9—ÐÔ@äS¬@ݹx—ÐÄzó=Qoß6#TMO~žд@kÜÀöÑ™ºêëvÛæå»40€æíÐwG½}}c;52u•^ V-¡5—×È gÇXŸF¦¾Àø@ÔÛ×ù{€x€–ÈGŒökdêŒÅÌ€h>¹ä_W¾3Úí+$ÿúÇM ¾"{h ÎŽ|r&/ bÕŸÌÿ/ŒkhêjçØ`ôï€Ð‘o¸êÄ}ܹ @b™úwÑ/èR€  fp|H#SÿÀ"€€h4]-qŸÉÔÈÔÝ@äÇ]gK‡FÐ|ùv…TYì#Ú[Ú42€æëÈǘÀœÉé%(cÕ‘3@óuäc0fõ—^zrx|8Úí3@3väsF@-Ä< ö‘C "íÈÇ}&/æ³°4¶þˆ/Ø! #ßhF £™91ñ±ûÈ!:òMh<ŒidæÄX!ÞcÏ šPì#Æ’ÅØ@På÷ #@4ŸØó5€9 â Ÿ,  µåâÊks%ê5LÐ|ZsùÈk0WÇ^¼áS‹. €&|cÉÅýÖ2f@{Þ7@B>ò·#pìU_.ù€fëÈçàØ«L>ò©C "}c@mŽ=k ä£à*Ìѱg @4ÖKÜo-1_Š"}Òb Í'—‹»#o€tHŒÐ|¢¿ €Ë"€ þ޼EqìÕ¢C¢K éä"kÌñN?ÉY@ó)„¸çÈç½u2WErÄ5òx°¶€&ìÈÇ}†<ŸËkdæèv¼Çž©5 š1ˆ|•ü¼Åʘ³c/Þ`ÜÕ5@4Ÿø§€ Ú\]@3vä£ `®Ž½xÿl ù¢_À['s£5×q`€¦3nÔèØ‹÷϶«€hBcA59ö¢¾ €@Ó)âžÐb@æ*p@4TG>¸ *c :òŠ0xô¶5Ð@†ÇGP­F ‘Œb¼u2WÇž5Ð@†Æ‡ã.Â,ÈœñþÙ3@óŽ=0Ç^ Þ7F40€f3Tˆ;h ¨þûÆøÐlb?“×ÕÒ©‘™m¹¶h·mP  €ÈGtå»42s¢;âðI # 6Ç^ÄáÓàø Ð|@Ü#ºóê/—üëhivûb¿z€8€Ø§´˜ÀwI𔆱2@ˆ¼#ßm æ"ˆ@  Œ †ñÂx´Û—®Änõâ>æLЄ É¿ØG¨·Ø§ž Ižà¼|·F¦®:#Æ52€fûB€FPgó"°c´O#€hFÑOÈ ¨ó1qè4Z3@³êëzûzó=™ú‡N}cÎþ€hZÛ"λ°uF¦®æç{#~¿Ø¡ Zí 6úmQoߢ¶ù™ºZØoèdþ?”%Wæó  Î@ÜgôŒÀ1WÅÀ˜I¡_É÷@ÍlÝõö-à˜@cüeÿ &¶EÄ<›Æ“ÏåCok¼ Oš€¢¿>€`&€Ôõx›ŸôrÑnŸ(ü€ a™@}€¸·£ýE¸ P±¯ÇnM†eC]€È§œ@Ä…C áµéÐ'szÇ ã¿›ç‚V—¤>bq²Ý(ü@ó*$ÿ¶G~VoQëB M]Ä6õ€ÂªŸWéMÔßæ‘-QoßÂ6#¨# )Šÿjû³ùYi­Ÿß}Ë €šÛ8²YQUû›"¯ úÂ?7ËïÍÕàwJ ÿ¶~ô£Çyä‘m{jW3-ÊÔIÌaÓÀø`ñMXøÏÅ÷N§ewßþéOú¥ù|~à¶Ûn»iÏÿ+j G´ ¨Ó±qàì?)þsux~zk[±bż«®ºê²®®®³ÿäOþä콟$jŒlŠzû–´-ÒÈÔ'h‹9Ø¢PøWgÎÇsŸûÜU/zÑ‹®MŠÿ'%gþŸ¿eË–áäñôÒ\ c? ËÛ–idêÐÓÈ…¥‡M2\øçªô»¥óý;_ýêWwî¹ç~º­­í;v|鵯}í÷“ÇÇö~²¨™ØG¬h_ª‘©¹Åm C[®MÍQüçªðóÊý?÷Ì÷ïxï{ßûÌcŽ9æš–––ù…Bað?øÁ»’LJÂcgÿs ¦6D¾À²ö%ų³…]#ª &–G4 PøÏ|¾rëþÈG>òûí·ß›Ã®‘aÆ ¾æšknOîŽì.þ÷I jbÛèö0R‰vûZ“uT­@퀸§šX€È‹ÿR—ù+瀹In-» ýŽäŒÿ’Ï|æ3×$Åÿ[÷ÿccc}øÃþ`rwxbñ_ì¿j[ VÒ3ã›G¶&Cåã-`Òâl£†ZcmK¢Þ¾ô="-ü«ñøÄç‹ÿ¿øÅ‡=ûÙϾ¶³³óø½Ÿp÷Ýw¿ó§?ýiÚ9Û+Èí¹oPSoˆzû¬@Í€ÈGľVQÿ¹i ù\™çÊüY{ ÿâÿw¼ãç^|ñÅ_›Xü üä/ÿò/¯“ ýßós@M­z8êí[Ù±\#SãÀ¨qá_iñ_îÏ™¬ÀÏ•ñܽ¿¾gØZüÏûЇ>ôÊ“O>ùŸóùüijPã7ÜpÃeÉÇÁðØÙÿÇý?¦5õÐpÜÀêö•™ÚcñcCãC¡l§F`.‹ÿjþÕ|,LRü·uÔQ ßò–·¼oÑ¢E¿7Ù7lÙ²å_Þÿþ÷ÿ"¹;Zâç@Í=ù€5«425µª}E´Û¶Ñhü¶Ånß³ç±â|ÿ?øƒ?8ìùÏþG“!ÿ'LöKŒoûìg?ûÞðø³ÿ!LX@ÔÔ‘ûu¨Åm Cw¾+ÚíÛ0lþ? ]üײðŸêg¤gýÓZ½ó²Ë.{Z2äÿêdÈÉ9ëÖ­ûà×¾öµõ»‹ÿÉ~æ£!€¨©Ø§¤—ìléƒÉPf¨¶Ø¦õÃid±ø¯duÿJ>/ç¹Åùþ݉+¯¼òUûï¿ÿs¹Òuûððð]W\qÅÇî…ÿÆ'ü\Wê+]àk`|0â¿"¹¨çh3×@ÜÇÖú!u+üg[ü—Z̯œÏ'»?ñóGÏúŸuÖY«?ö±}ò€xËTÅêæ›o¾|íÚµ;ÂcsÿsS…F5÷ÐÐ#áà®".ÒV…»îÕÐT]ìáRìk„Ð0Åÿl ÿ©+÷ŒÿTß“ß}ëxÍk^sê9çœómmmûO÷ ÷õõ}çÒK/ýÆ„ââüS€:wò“i1tî§‘ÌÀzs_øWRü϶Ø/u9Àô]É*þ/:âˆ#Þ™œõïœî. #ßýîwßÜ»†þ?n¸ÿ„@ÀU€zuòãæ{Pçþ™š8°sMÜï Ö`n‹ÿjœõŸî~©¯·ì¾µ}ôÑ‹Þô¦7½{ñâÅ¿[înܸñ_>ò‘ÜvýŸì¬˜Pü» P÷®»HëZ£‘©º–\KXÓ±:Úíëë;Fû44‹ìB ÿJŠÿjþ{LkñŽ—¿üåÇ_xá…W'—ø;²Ü_<¹ìߎ뮻ëìÿØ„}7ÕS€Ú»gðþ¨·ï€Ž5Åbm¼0®±©šÕí+CGK{´Ûg@ªÌöù3î?“¿¸Êrëzï{ßû¼cŽ9æÝ---=•üò÷Ýwß?|ûÛß~pŠâ² ¥ø˜«5wïຨ·¯½¥-)ÖVhhªê ®¸§–˜ÿÀÿ¹ÿS­æ¿÷c¹)ÛSøú;òÈ#—^{íµï=î¸ã>Xiñ?44to|"ìºì_¡ÄïS*°P{ÛGw„­£ÛÃÂÖùQkë†ÔØT|m W`Š"½Pæóf”{Ö&gú÷þøè*ÿ/}éK»è¢‹þ¡’!ÿ{»é¦›þvݺuýá±³ÿ{ï³i?ÔŽ‘O8¨óLu©ØG ˜QqŸ õ?ë?Ýc¥n{Îú§Cþç½ë]ïú½ç>÷¹_˜iñßßßÿ³·½ím_ »Îþ‡I~‡©Bˆ"P÷E> àˆîC42Uupä¡’5(³pŸlˆýl‚„ÜÅþl þ‰Å:â¾+™ç¿üSŸúÔU'žxâßçóùžîñüàïI>…]—ý›ìwœªø/Þ7¨‹{ˆzûPEéâtî' †"¾0Gÿo9—»’¥ó»kíŽW¼âO¸à‚ ®JÎú6› J.û÷¥«¯¾úîËþMÜ¿{ ¡ôÕ@½€¸G¬h_V\ã ]ëfëЮƒB>—vû†Æ‡Â#Ã5t†å“Y¨£…1;h„²~º"¿Ô×ZvßÚ“‚¿û=ïyÏK;ì°7ær¹ŽÙlTrÙ¿Ïþóv]ö¯0Eñÿ¸‚â}PŸ`àþè·ñ°îƒÃÛ¥±©Ê±³ôÒ …99!D£H/ÀÜÿ³=ë?ñ~ñ¬ÿù矿ÿK^ò’+,XðäjlX²èß'¾üå/§éÑ …}¨¤øOï €ºØ8²9ú+¤ÓTåXêŠ{JÉÝ÷iäÌ÷Ò-CŠõª%ÁÕ*üË)òKþé›ZºÐ_ç›ßüæóN;í´¿mmm]ZÝpÕUW}4”>û&¹_r{÷êæ®k£Þ¾#ºÕÈTéXŠ;X+ȼ¼ QUüOµ˜ßT_ß³Ð_çªU«ìcû›'=éI«VñŸºõÖ[?xÇwl _øo²@b²Ï÷Ùf#€º¹}àîpÊü£Ý¾cç©‘™µ¶\[8¸+î+¬¸WCO#"‘«x±ëfê±ç42Ð(…ÿd…s%gý;^þò—Ÿxá…^‘Ìû?ªš¹sçÎÛ“Ëþ]v]ö¯œ3þ{¾÷v@ÝݱóoiÛâ°²}yxhøÍŒ5ï°Ðù=w ¦5Z-†A±Šy‘K ¢"¾0ƒï)÷k³™ë?Õýô–¾‰µ%ÿ¼w¿ûÝ|øá‡¿a¶ ýMæÇ?þñ߆ÇÎþ‡ ÿ‰[TÓq=G…‡6 ˜¹ØG’¤klݦ¡§1^1Ÿ$oÓ³ðŸ.Èï¾u>ûÙÏ>ä…/|áûz{{O«ÅoÙ²å¿?ðü8ì:û?ÛÂÿQÞ}ºY?ôpèë=ùyñóŽ ßÚü}ÍÌ€ž¸€»ý/Kz‰¼Žˆ·¯=âÑ À”…z¡ŒÇfZøÏ¶øŸn¸ÿž!ÿ]—_~ùóŽ?þø·åóù5ÚWc_ÿú×?ö]øoâ6•ó¸˜;éœÖ;wÞNê=6Þ ç( Í,zF¹èG˜ÿ_fÏ/òKäµ·´kdÈV¡?ÝógòT«ð/Uôïù<¿»nn?ýôÓW\rÉ%ï\ºté3k¹zè¡/}æ3Ÿ¹%ýs0á÷,”ØþB¹í"êêÎd!À˜€tñ¶t„C:Ò*µ_ÇÊäR™ ¢ÞFW(Ϩ Ò²¾œb²¢ÿqgý/½ôÒ žøÄ'¾3Yáy-7p|||àºë®»&ì:û?^b[g| EPW±¯žÁ=©÷¸ðí?ÑØTìøž££ßÆ»å qÈr_˜á÷MõØlÎúOöùžËûÏú¿ò•¯|˲eËžê°:ËÚµk?ó½ï}ï°ëìÿd«ýÏŠ¨«[úïˆ~ŸØ{¢€‰ù2™»z.…pe‰}@GNŠþªþ“öSûÓÝO ÿ=Cþ»ÞúÖ·^xÊ)§¼£Ögý÷ÙüÁ~ð韽ŠÿB™ÁCYûXÔÕº¡Ãæ‘­aqÛBEìÓSIFôõ6Þ7ø@ÒØe+ŒF½}-²[ø—TRø—*ø+ ö>ëßqÚi§¥gýß¼|ùòºœõßãæ›oþè]wݵ5”žû?“ý½O@ êîæþÛÃY O‹vûÒyÜ«:V„“«@¹é:0ê`,•…@Õ Æ£Þ¾yùn qøåžíŸôõe• ý/g‘¿½Ïúwï>ëÿözõßc``àþ÷½ï}ׇÇÎþ×D‹ã¨·›úo~Oé=ACSÙ13?þcFPI÷4DñÞÿßÄb¼Ô×§+øgzK‹þâ"ÉYÿ5×^{í•Éœÿkê]ü§~úÓŸ^½mÛ¶°ïÙÿR·™r þ~ÛpÆ‚S—7þ—Ʀl'÷ý6Þ¶óN -@Ü¡Ba_Ÿ*0¨æ¥ýöÜò{Šÿ·½ímO?ùä“/›‹Â?µ}ûöß\qÅßJîŽTi_—$êîöäJÃã#Ée Ú¢ÝÆS矺ó]açØ€gZ]É|è“zâÒ×üÝ÷hì2D¾@½/·èÜ{‘ºB—ûÿÎd¥ÿéVùÏï¾uœzê©+/¹ä’7%sýŸ7‡û»ðíoûCaßËþM¶/\hÖŽíHÜŽë9*Úml˵…S{O ÿ½õ48Ó:mÁÉQb©ô5ûÊöÕ{x8/?O#C\A¡ÂçWòœ™,öWêÌZø§—!é¼ôÒKŸ‘Ìõ[[[Ûò¹Üy6løïüã7†]sÿg³ŸËjksâ¦þÛ¢ßÆß‰x¡Cªë¬ñ+¿é»ECW`ÇX_ÔÛ7¿µG#Csü•|=WáÏžjž˜¢¸o)ñyË^…÷Ygµÿ§>õ©«Ï8ãŒ«çºøýÜç>÷á°ëì¡Ä>˜­}‚#€9+~Ås¢ÞÆt€Ö\krÖsTƒSRk.NOFÄî×ý7kì ôE,n[¤‘!AAaBÑ^(3P˜épÿ0IðèYÿË/¿üyÇ{ì[’¿!.»³nݺÿüêW¿zWxlá¿ÉöA9gö “|^ØëñGï €9ñ«¾›Š‹\åsùh·±'âš®ð?ÛnÔà”tRïqÅc%fãÉ%í²°øg5ííZÌWò¼É>ŸîûË)ü§*úÃîÂ?½¥óë:_ð‚ýœç<çí½½½ 3änlllàŸøÄµaß¹ÿå*LSü—ü>0'úÇvW?fÞ‘QoçKž"`Jç.:;úm¼s`mñ5O@ä#–´  ÁŠûRÅw©âºÇJÝŸ®èŸê÷)w¾~wñßqÈ!‡,zýë_ÿkÖ¬yI.—k¨Åvî¸ãŽùÙÏ~öpØ÷ì%gý§ &%æÌÛ}ð¤O ½É\×£}œÇéhéO^xzôÛiþåúÆâ.z™^ P0  LuFºû“M˜iQÎpÿ}ùK ÿ§$óüßÖÑÑq`£íØááámúЇþ5ìºì_¹Å~ašÇ å|E9óó¿Š~Ó«çœs>ÖˆÅꦛnºníÚµ[Âcgÿ+Y8±0Mñ_jþ¿5€¹uKÿíÅK]Å^=}ÉSÃ7|]ƒó8ç->'úmLÁüåŽßjìJ€ÈG¤Vu¬÷®ÓØÐœEaš¯Urö¦ þíSü'Å~÷Ûßþöß?æ˜c^—Ïç4êÎ|äÊ+¯üBxüÙÿ\‰â>”(ôÃ4AÀ¤ß/æ°0+.xf2L>fGvŽšwx¸µÿΣ–·/ §ôžýv¦ÃÿLJ4x…b¿ @1h_¡¡¡1‹û™þ“ÿ•¬ü_iá¿g¸:¯¿ãe/{Ù.¸à‚wtwwßè;øÆoüä¶mÛÒ”·œ…ÿJÓ(É`Neehðï.–ÆfÏYöôÐ’‹ÿÏð϶ÿRcÏ@ìWH­îX©¡¡± þé öRC÷'>6ÃüK ÷O ÿ®#6ŒlÒèÿ{Ö’ó3±­7fä5^õ #Vw Tôç¦)öËYѿԀr~—rÎüï=׿ó²Ë.»èÄO|S{{{Ó¤‰?üá?>::š‹/cŸNu–¿Ô× ÓFs*ÿ¹nh}ôÛٚˇç.†§è‚dîzuˆØ=<¼!Ü5pŸt}”tý„˜Ô¹¿††Æ raêùù¡D±BéÅs¡ò3ÿé-=qÝ‘Üæ½èE/:áºë®ûä©§žú÷ÍTüoݺõ–«¯¾úûÉÝÑr õ B€ʼ@ú˜˜s?Þú³Llçs–^æ·öjðÌ÷¨ráùË/ÊĶþhëO“ÞGA£Ï@ºß6ŽlŽzWv,½ù UôW; ˜ÉÐÿIW÷O÷[‘÷Á þ?{çG}¦ÿ×ê½[ÕêrÅ4 ¤¹”#—Â%!„;ÒŽ$—ÜýÓ.—äH¹¦0¦cŒ1Æ`Ó1¶%Ù–mõÞ¥Õêÿ{FŒ¼Zm™í³3ÏןùlÑîÎÎoGò>oyÞË×çååÅ݈¥7Þª.&d~ï¿W_÷ž  Bˆ ØÚ¿ÝÇ™¡f^ÿsÉÇøÛœ Ζê´E¶8Öçû^â]Ö V—^ÍšØ þ@Kõ©¦Ï[Ò;[šr÷Ϲîºë>÷óŸÿü™ªªª«,XwÏ»ºv¨Ñ„ÈxMIàÙo‚?òÿÙÇ3@‰9o5JÏdŸ-Žõ²…ÔÜ߉=éßçK?e‹cp ÊÎá=üÐCÀž! µü  ‰­øbÞ›¸wø¤øOð üåx¹Ö5×\sÎwÞ¹nåÊ•?MJJ*ˆÓµv®_¿þ6™Éþ{ øþ¾Ä¿À9ûa€sPêúBÿ˶8Ö”„dù\é'ù¡Û”^(•iå¶8Ömý;djzŠzX½¬Ì\Êšsø „º%ÊñrÿÌ|à *cþ'uyw<¸ûû¢¥¥åù|p—xîý7"ü½=ÎhÀœû „˜D,l·Í±~°è"Yž¹˜ºÍÈHL—Ï—}Ê6ÇûtÏf~è!Ò9aý €S³OÔZ!¦  ,ߎýF³þºðGYFIIIáõ×_ÍÕW_ýDQQÑDâû„Ó霺ï¾ûîùcÿþTøºBˆyxeàMÍõÚÿ».oUý«6€Ø‡«Ê?§FAÚâXáþÿÆà.~è!Ò:Þnùc„1*Û‰™Ð7bÚg¤·ßˆð÷ ÐúüÕ–õÃþðcùË_6,^¼ø;‰‰Ê8É477?µiÓ¦f9^úï+KoÄÌOÄw€ß*!¦`rzR¶¼f›ã…ñÕå%—ñƒ· 'f-—,¼Ä6ÇûtϺÿ‡cm¶8Î3sNå‡MHì‚Þn{ „RþïšõŸíó¿êª«Þ½fÍšµgœqÆúY¦ONeÿÇUÃßÄ{￯콯*ßž‚ ³× „˜†=[lu¼ŸU^õé5üà-NjBŠVña§2ç Ý›ùÁ‡# *ìH¹¤ð|~Ø„˜#àM¸‹_òï*þõŒ¿Öçî¹çÖÞzë­¿úèG?º6++k•Õ¶©©éÑ×^{­Íƒø÷gÜç-àÍàoÚÇ6/À!Ä4lxUú¶9^þ¸î;Zo8±.ߨü²T¥UØæxßÚ%GÆñƒãÎq5!¥×òǹ(µ\–Ñ…XŠÙÿPKý]ûüÓ—,YRò‡?üáÚo}ë[O-\¸ð­¨IÇÈ7Þ¸Vfzÿî"<áhÿ¿xØÇœë BÌóÇR9†?Û»ÍVÇ\‘Z*ß®ú7~ø®ÿïW›x¤k?ø0rtÜmS#R !QþFzû>ƽÄß½Ç_þ©©©¹ÿû¿ÿ{Å/ù˧kkk¿¦úü³¬ºÀ»vízXUÀÉÕ!þ{õ½ ÿ`úÿ}2@1O÷?ÿ½òñâñ÷hïøºÊþÛ Tðlé}‘~94vÄÇyQþÙR¶ˆ8!±xº?Ð>ÿDá¯ü}÷»ßýÀ]wÝõ؉'žø“¤¤¤"+/æäääÐ 7ܰN|gÿ½ w#SŒT°€ìÞ+-cö+þ·E_óòÞÃÀ"%ÈOë¿§õÿÛ‰'»ŸÕ =Iøh=l‹ãLX WW\Á‘€„ÄVøkê— ó³þšÁß7¾ñsaðwÎ9çÜžž^o‡E}óÍ78|ø0ú·|eÿ ÿio¯+ž„¿~›BˆéØØ»ÅvÇŒ/½ÿYó Í-žÄ7Ùª¢ñ—‹(%) muÜ0«{”åÿaçàX‹mŽõÌÜUòÅl ÄDÂ_Äxù¿žõGÆ?ó3ŸùÌ©wÜqÇ _|ñÊàï»,ìøøxߟþô§õ2?ûo¤_ß_@Ä{5€§×ð„ól:B ¦€?­ûž4¤s&v¼‚Œ?2ÿ5i•¶;öm};lÓ¯MìR ó•ŠÏË HH´ÁT¸ôÓœý/½ôÒ†›o¾ùW—_~ùº‚‚‚˜˜à$''KfffLT¹þ¯ëè耣õ”^öˆË¿·×sß×¼K!¦£U¾zuð-[{vR–üfÉËŠÌ¥<⌴„TùYýÙ¶Šã¾Ž‡yDø*ôLöÙæx“$© ÚÊÅçòÃ'$6Â_ƹŸ«Á_ÆòåËË”³ÿw¯¹æšÇKJJþaÁ‚‰±þUUU¢ö/ÃÃÃQ_Ô±±±î?þñŠ÷ì(â_Ä÷(A÷ÏÂ!Ä”¬ï|¶Ǟ•˜)¿^ü#95ûDžqö™­²égÖ8²_ÞÚÍ!bë»ÏVÇ›¤tZ¢~¦Å)E<‰\À“Ø÷•ñw5øCÆ?£²²ráo~ó›¯]wÝu”³ÿ—¢o~á_]]-§vD¸9óÔíÛ·¯íëë’ãÙÿHˆ_•îO—Ú‡G!¦ãïý/KÇD—m¿ü!›üsõå÷ºƒçú^à ab&ÊÏþKsý·+kÛ×óDˆpà=¹ï²Ýqã˜OÉ^)Ow?'Oö<+{”Il¼üýNV-] ¦.HQí])êz†v™ª~65í­}Ûyb3‹qýN·çh™ÿ¬oûÛ_¶lÙ—”É—5ÿòòr©¨¨ééiÙ½{·(“iWÙÿ'eÆøÏéçáÁ–ýûsÿ7â30Í!Ä”8§òp×Sreùgl»ø¢øÃºoÉšö‡dõÑ¿ÙÒÁì¬ÌZ&?®ýŽ$çÙv ŽŒ·2Haö ï·í±§'¤ÉG^ªmÇ”ÇÄ[C{d×p“4© HÇd·ôÙ³Îä„$íï,Äyò‚dm_é‰é’¢®g¨Ë4uÞ,™êçºÏV¢âÞóó’Ôó2 ýÎ0@LX ÆÌÿÜ„Æ×¿þõ¬\¹òK©©©e±xójŒ &ú±%&&jYÿ;wÊèèhÌô…^¸WFå¸ó NÿþÆý‰øŸ /î?g€bZïÚ(W”}Jû‚eßÿ¡ȧK>&•©rÝ¡ßËÈÔ(O “ð‘¢Käk•_Òz–íÌ­÷i;9ìÖàòÔRm»´ðüÙû0v²k¢G§†Ä¡2ë£Îq•aŸÒ~–¢D{Fbš›Oծǒ̄t~˜ÄìAw៨ ý2¾öµ¯}褓Nú‚þå±þÈúã:]»vÉädìFÐ ýýï¿QfzÿC1ø æ¶x xbšBˆ©éSæWÏön“K ηýZœw†¬ÎøÖðæÐ.ž1Fߨü²\˜¶í×ÙM½[yRD"k¼(6É6SƒqYj‰”IIܼg#U„ÄPü'¸<&)???ý«_ýêO9å”+b%ü‘å/++å70+üAWW—455ÉÔÔÔ\•;=£ƒ•¡Ç×KOOkµÀ–-[îQïa\<;ÿ­ ¬ì?¨ì?„ÓóPç“ ¼CiJ±\¿ä'r¯ê·¾õØ-óE¢ Æ“}§úߤ0¹€‹¡¸«mÝl¶•D–7ßfÀ"`\(*‡P±@ˆ‰®Nÿ‰Jh§^{íµï;ýôÓ¯T‚ÙTÂ;vL80+öuœN§Œk"ÞA«€€2*”žžž°úûûþõ¯Ý"Þ³ÿF‚ÁVˆ—à€'hH‰`úôºúâ{Jö \ ™i ¸¼ä2Íë-7Ë+ƒorQ¢@^R®\Yñù@á…Úg@D‘ =›¹QâÍ¡·åCEïãBXx 8¹Ä ]økÚ0-- Âÿý«V­ú¬º“¨£/áÁ¿oß>ikk›÷<Tdddx|Í¥K—j?knnÛ{ݼyó—ì¿3ÌA€°gÿ „Äw¶ÝÇ€Õi‹äWjìÜ jZ­\”€qdÿ°ðýò/e—kýÃä87½“½ÿQPbà0 ˜õ €Ú)ÊÜï‚3Ï<óó™™™±xSº«¿k¿+÷púïíí÷3¸ÿã9YYYó~–’’"Ë—/u\Úˆ@÷ª`Aöÿ–[n î¤ñíì¿'ñO@BH|ñÚà[²S9?ÃqÌ•«²O’õªUâÞŽõA;b÷oF äܼwËÊ?-Ui\7ÞÚ­ŸHôèTŽ÷ô°P@M $† ë7Ìd•O½æšk.z×»Þõ©X ÝÕßpúûí·1no®úUb¾½½]rrr´¿¥a{ß›6mBïÿ˜ÌïýD @ <1ïq BâTü¢á\ ŸôS%U™êKå‘® ÚØÀ‚ûF´ AÎÏ{¯|¶ìR“VÉñøMbZþª²ÿ$úlïUˆ aÐ@H,¿:äææ&_yå•窌ÿ'•p.•ð_´h‘&þ¼>nppPsúŸ˜˜˜s?n=zT  ËïŽY(‹/ž}m¼N¸zÿUÅAóm·Ýö¢ûËìÿ< „Ä;^×ü–e.æbx ¤Ê'Š?¢ÆÓ]ª¦'lUUOq|˜A²T6îâ‚óäcÅPÖr.ˆžîyNÍaoäBÄ€^‘dÀ°¥ˆÄŠ”édùÞ÷¾w™2÷{¿rõÏÉ{Pb¢}þÞ2þ:púollÔÌýܸö3˜úyz ª««çLèè_»¤Êþûêý1iöŸBH\qgÛýò³úÿäBø ¤Èû•Y¶Æ‘ýò°jØÜûw5{Œ‹ãÆŠÌ%òᢋå‚ü³´ ñÍÈÔ¨Ütô..DŒxcp—ö0{ÿð3$Q?çœéròð29mäI=;åÓ1ù~’šªeüKJJü àÍé÷#“_WW7¯r@wú/-[Ô€×èîîËq¨)ûTï?²ÿfïý÷ `€7¼ØÿŠìVUËY`˜¥õjlÝ5òu5·þ¥WUeÀ6mÇã¶]“ŵrž*ó?/ÿ½R‘ZÊ“$ЊÓ=ÙË…ˆýùªšüqvÞ™\Œ8‡$ZäNe˪¡rÒè2IšNŒÉ{Ð…?D¹¯RW±¾ÿ~imms¿ÃáÐñW__?ïy*,Y²Dòóç6@üãùá@eÿת =û©~ÿpgÿ…BHÜÞã?¹Uþ°ôgÅ辪*¦vØÆ”øß>ðš¼2ð†¼¬Z+¬>A™ý“³Vhf‰gåAÑ$Í£‡e]Çc\ˆƒj,H`€D–…Žy×ÐJY6ª²ä’“÷¡ŽQ~ÅÅÅsJñ}áÍéhhH  zÀ=»\þ=®òõ¾ö©Þÿ—dnï¿ø÷ÁT øýAeÿ „Äè=FûÂü³¹A’¦± GÇÛ´`ÀÎá=šÏœÆãú‹µÊ¬¡òaEæRMôŸµD’$óƒŒûûõá?‹cÚÁň1Ûúwhí<é i\Œ8&-$BTL”ÈéC'JÝxeÌ’%áÈø/\¸Ð°ðãããšÙÄþ¬rUÕpîÇø¾šš)((ð¸¿eË–i•ž€Y Ù–cÛ¸qã½xIñÜû¬à×Ã’ýg€—`þøY¹ghYm†/ *#^±°T>ª¦€AÇìÙ+ÃûäàX‹´Œ“–ñ£ªm`ÂTï_lJRÊ¢´2©N[$K”è_šÑ •iå¬ 3v>®µß؃öŒ`d4¾Éd€„%÷Æ«å]Ã+µ@ÌÎk%Ä«ªª¤¨¨(àçkcþÐA5ÀÁƒe``@sóÏÎΞ÷¼¼¼ÔHA-ãï);oPXkeÿü:###ZÉ?Üÿ‘ÝG;;h€ ¿*T„ƒ 6Éþ‡³÷?ìÙ!qË=íÊ‹.ÒD!‰<äe)ÅÚæ‹ ç¤ M kÛ˜*SFÕÀÄ;A)U>>:53‰ EUo¤¼SÁ‘ ^_†Q¦Ë,µeð˱)@à纃Ð|#ˆy€¡g» È¡†Ä'ô !å̇U›Ûð I›ŽÝdß1j/'''è×hkk“}ûöÍÉÐðïСC’––¦‰ÿää¹Á~~´`Œ ?µ‰¡‚ìÿwÞé-ûï+j;€»¸)ûÏ!$n ùó‘Ûäµ×r1L2ò yRœÇŰkÚ’7‡vq!L<žìÞ$W”ý#Na †’É"MôÇÒØâ™~”úgeeý:ü(ïGo¿ë}¸ÝÞÞ®àôï^Ú)pú7Zm.ó¿§žzjËþ"øEŒgÿ§ý {1ýg€×À FvçF /{GšåÖÖ5\“òX×Fùlé'$qA"#.¬ F•²h†~g $“±ëï‡ðGÉ=Jý=•ãÊú÷ìÙ£eúu&''µ’j~÷Ò~8ý£"Àhà×}KOOÏÞ»îºëe™qþDà‡3û/†ì?„¸çw-7ÉÉÙ'H^R.ƒ0—ùŸ¼ž®ÿ&¦Kùo<×÷½â” V?¤L'ËÊ‘ÅZÎTVÌÞ2î(µ¯¨¨ðê²pä‡ÙŸ«Ó?Êô8 dÀè@w`0ˆ1âßáýÿ±gžyæ>u1.sGÿ…kÜ_T³ÿ Bâž>Ç€üß¡äê¿ËÅ $LüöðrX>sswÛrAþYœz‡dÒ€x!ß‘#«FNFk&±¥÷þÈø»÷à‹»Ó¿>⯥¥E»Ž¶‚ââù^CFœþ=ŽòÕû@9ÿïð!þÃ!ú£–ýÇÏ „Ä=Ûú·Ë¦Þ­Ì„èxLžîyŽ =$;^S;Vq1â w¹V=Q.',•Åc51 ê!îgüܾèëë“]»vÍ:ý£  ¹¹Y›€*¸ùçççÏ{žQ§wdèïïù}oÞ¼yÌdÿuþ7úX‘(fÿ„Kðû–ÕrrÖ N $v 7Ê GïàBÄw´Þ'§«‘¬ˆ/RÕ”$åßà˜žâbؘ gºVæáŸ;•Ó÷‚¾þòòr)--Õy8qwúÓúýáΟ””$ ûúÑ à©ÀÈþ»N†–Ûn»íïâÙùß]äkþÕì?„Ë0à”ø•\¿ä'Ú89BH`t«žòø5ûþãŒ]ÃM²¥ïE9/ï=\Œxª ÿwû7ˆþ# JŒÅÖȽõ(ó_¸paÀYv#>|X駃¬<úýQ €j8úcÜŸ+:ýÏS¹Jø‡£üëÖ­¨÷éîüoDè›6ûÏ!Är_„ÿtäVùfåU\ B¦ßÛ÷3ÍXŽÄ7½SÎÊ=]e”ùµ.žÈLH—aÀ.ÀÔãûNY!E“ù1?(·Gv=772&Ê(ñoll”®®®ÙûŽ;¦mzàañâÅZ€+ð€Ù_(#dÐ}‚E™¶þõ¯Ý"3£ÿü úP²ÿžÄ¾7röŸBˆåx¸ó)Y–Ñ ï/¼‹Aˆ¦Õ¿Ÿ7ÿNöäbÄ)­ãíÊ»áqùTÉG¹ñHÌä"Ø€‚©\9á2ÿ4gjLß 2ü±‡ŒvväZàæ¿{÷îÙ|dûQò¯JêµÛ999R__?Ïc ##Cÿ¡N@ËA¨¼øâ‹ª÷=&Þ{ÿžì¿ø øöF³ÿsÇ!Ärü¶åF©M¯’¥*@ñÍŸUÕ Œ4I|skë9;ï )O-åbÄ h]§•™_µœ2²\*&Jbÿ~”ÐFo¸Fùù}ýpúÇ%ÑÄ¿ž‘/**’êêêyí¨DX¶lYÈÆƒ>Àp0Ô{îTÙÿge~ï°Žÿ±Îþ „K3áœÔüþ¼ôRœÇ!Ä ··®•uÊõŸÄ?ãÎq¹^?ÙðÆ ™œ`9 ¹Úø¾•#K”Á_ZÌßîès?÷RûH€ ?œþ!ÂÊÿÑÿ¯›ñá}`s£ÿPŒDûA(ìØ±c½ `ŒÈÌè¿@ÌÿLŸýg€bY:&ºä?öýD®_üÉNÊâ‚âÚeno½— a!^xCê|B>¶ðƒ\Œ8€Ö IeûëÆ«´ÿêñrS¼'ô×ChCX‡ÛÑß—ðnjjÒÄ7ÿ‘#G¤½½}öçÈúÃhÐPœþ=~ÿ ÑüOM(èùË_þ²A,šýg€bi0#û?÷ÿL~½øÇ’–Ê!äžì~V~×r‚üåÈmZûÓŠÌ%\ ³XÏèNþËÇê%ÙiI…2zô÷ëž,®Nÿ‡C+ùœ1¸DÙ}w³AÜñh Ø'ZBáµ×^{TâE¦$0ó¿¸Èþ3@±<˜ ðƒ¿Ÿ×ÿ'ÇòŽøÿÕ¡?iæÄz`®üÏþVµ@]'¹I9\“Å€¸&~KÆj´Þþ…“¦xOÒÑþÈüGdû÷îÝ;›u‡øÞ·oŸLLLh·ÑÏq~îï NÿK—.ÕÌÉkÅA0(Ÿ‚Õûÿ¤Ì8ÿOIèŽÿ¡dÿ݃H!FAYì/þQþ_í7ÙK(þ)þ-¦`¬ãõK~Âê'“΀ø@ý¹¬ž(—£ Jü×j%ÿf šÆ~ž@¦ýþºÓww·{ˆ8ý»÷ûë"¿®®n^p¢¤¤D»?Nÿžµü_Ó“­­­ýÄ¿¥²ÿ BlÇßûwÈÿÛÿsùIýwÕ—¯4.±4Îi§üþÈjÍñŸØ“ú_–5ÿR~\û­ Š˜Ž4ùûf+ñÑpÎG™´ûû=ûÆÆF-ÓîÞïàE·w‘n§wP‘à„È]½zõ#2“ýw(úã*ûÏ!Ä–¼2ø¦\ÛôC¹®áû4É"–eÔ9¦•€#èEìÍKý¯Ê×ÿK~Zÿ=)N)ₘ&À €XR8™§eúWŽ,– §¹>‹””)++Ó6÷2úX±~ÍÍÍÚõžžíºÞïЖ€Í=€ žÆÿ…×öƒ`ؽ{÷ÓÊ¿ }ÜŸ©³ÿ BlKãÈ~ùwøyÃIiJ1„Xж‰ùþþë´Q˜„€}£ÍrMã÷ä¿ëþƒ#M`@´A/ÿòÑz9A‰þ‚©\Ó½¿¬¬,MôǬ¿žšT"eþª<Þc¿?²ýUUUóD~¤œþÝù_gggÐÏWÕ wÜqÇz9žý¤ü?î²ÿ BlÍÁ±¹zÏÈj¯•Ó²Oâ‚KðæÐ.ùñ_KŸ£Ÿ‹AæÐ=Ù+ßhú¾|¶ôò9µÑ5¶d° *`tßâ±j-Û_1^bºi@úèëG™¤ÅrâXöìÙ£eü=õûë~øÌYó´4Y±b…viúúú4?‚`Qc 7© Dôì¸zþM™ýg€b{”)àw÷ý|©üŸåò’Ë8&Ä-p÷°ãq¹áèíÚ,xB<~¡WçÆí­÷Ê«ªê»Õ_•òÔR.JŒÈL`@¤@Õx¹rðo†ñjI˜6_° eþÈôCøãºÙ×Ìþ†‡‡=öû#ÿx±jŸÈ˜{gggkcþ¢Õº€Ê„`QÕŽ»îºë!®žý7"úM—ýg€BdÆ( éûFšå;Õ×pn6‰;F¦FäW‡þ,Ïõ½ÀÅ †xkh·üË®oÈ?,¼T¾¨ 4E>l+‰JôW+Ñ¿Tù5¨ŒÊ´9'_˜±Ì߈þ;wj‚¿··Wë÷G©½2ûç縀 ‚‘rúwæA?ÿÀϽþúëÇdÆù?œæ¦Íþ3@!.<Û»M•ï×þ»T§-₸rÿ{ð÷Zß?!à˜vȺŽÇd[ßø´\Tp« ¢¦2$-HdÅN((ÉS1Y"KFkdÙX½2ó3g +11Q둇ðGÀÌÀéeÿ(ÿÇh=˜ÿ¹0$)i®ŒŒ´Ó¿'ðþ\A4¦î¹çže¦÷Ê€˜·DöŸBqcÿèAùÊžoËeÿÄ–bjPÊ}WÛ:¹³í>­Š…`Aðèç'Sçþö—ÿþí‹™‰™ÒïàBHÉd‘¬©WÙþ:Étš×K!==]JKK¥¤¤Ä4nþ¾8vì²âšøGÖÙWòòò´ž× ´œþ=xéè>ð}èС¿¿ôÒK-2ÓûïMì[.ûÏ!„x`Â9©µìxMþCõÈrJ1#ß?p6Þpqhìˆü¤ùÿ¤üX©|¨è}òᢋ%;1‹ A2TëE¿0ऊ' µò~l9Sæ=/!ŽaЇlaaaÔÊáCYtPö~ôý»‚ †{†Upúw7Œ0& Áüoú¾ûî['Ç{ÿžñ"áËþO‡"ò „ x}ðm¹r÷µruÅÚ—afĈ™¸¸à<HD86Þ¦AQ€ó G†ªtŽªu= ªÌPiv`ô°4«1­lÝñIádž,Q‚¹*ïÏwä˜ú½ê¦~ååå’š?^BȤ£ä¥ÿCCCšø‡ã¿+8&l®À`ùòåZ•C,@ù°>|ø¥-[¶4Ëqçÿp˜ÿyôf0@!addjT~søÍ\í«‹¾Hob.Ì?[žê~VUª¼ÎÅ ûû·¾óIm«L+—÷åŸ+gç)µéU\ ¤ÿ€÷®ÆÎŽ;'¸8¤L‰£HêÆ*eÅh½äMå˜þ-»fûÍjêç W§ÿÎÎNã9=õ¨^¨­­Õƺm§w`þ×ßô¨Ûé‡zÙÿ ñý¥ü߈ØzïÿìçÊ¿4Qaûݯ/p»î¾%x¸ô´%z¸Ä†ßؼ ^ùÇgøñbŒDeÖtÙÂ÷Ë¿”]®ú6éÞLbz·¿¸ë›2æçb¨Q¦Ú¢Þ›wºœ‘³JNÌZnÛÉ)£Î192Öª‰{dóõÌ~÷dO’Eÿ¢ÉR•é¯Ñ¶Ì)óÿÿªgûÑß« x¨@ôCü#£¿¶¶¶¹ßy”q!ýÝM èÀý± v_úI ø€$,Hà˜Š.ý¸Ürìn.‰([ÇßBlp±_šÑ 'gŸ +3—É’Œz)Hγ̱NNOª–ˆvi;¦Jø[å6u—ú¡‰~ݽéxm\ˆþxìí÷F__ŸìÚµKë÷‡Ùn»‚Ì>Æü¹7ÐP]]ÓcG˪‚eÆ ÉÜì Yþ`&xî1Éþkç2ÿEço†ûY@Hœ/½_©øœœ’½’‹AbF¹}y÷·47BÌ@Qr¨Ï¨ÑÚ¦*SËU A…i+úTÉ~Ïd¯tLti}ú3Bÿ˜–ÝoŸèTß¾§ù¡†$õõ³b¼D+ï7»{¿+èç‡Ã}¼õö{™~ôù£Œ~ïÞ½Ú¥+ýÈð£ÊÁ5øQWW§Æˆ¼ï`P>W\qÅwe&ûA×ì¿§¬¿å²ÿ3¿‹„B‚¢qdŸ\»÷G²2k™|ºäcòžÜwqQHô¿T/H’k«®–o6ý€B…˜‚.•ïêï‘¿÷ï8. Ô¿…)…RœR$ÅÉE³× ’ò$7)WmÙjËÑ.Ñn*¨Øž‘^G¿&îñžºõË µ9z¥s¢[ý¬OËò“È<$•ãešsÃX•¤L§ÄÅûFy;úÞ‘íÇè;«€5þNëŸ×Çý¹’““# sÊûcéôï‰PÌÿ6oÞ¬gÿ§Ä˜ù_0®ÿîß“pYöŸB ;‡öÈÿú_HÌ@öû /'º7q1ˆ)Ap vlþHMH‘µe%fjUÉ ’µv«Ì„t¯;453®lLõäCôãö8}1bFº3MjÇiýüµ‹$a:~Zå222´,7¶XÜE”Í755iÙsOf ¨¨h^y¬þÝ•àÆfªç¹ãŽ;^’™Ì¿/±ì8@‘àÇ*øC 0@!a@Œ]^r™¼;÷4Ž$Qã+Ÿ—ú_ÖÊ™ ‰gà–mÐ1ÄňrYR?^¥zúk¥ÂQ"ñTŒ³;”øCô#n5&''µ~gÿŽŽù£'afXQQ1GüÃüâßLw£Â@x饗Vˆ ºfÿb|ôŸSŒ—òÉèÇ$ûÏ!„D€·†vk[Yj‰|¸èbù`áEZi+!‘$G•N¥â ùÅ¡?p1!ÁíòÉb©­”ú‰*)œŒ¿2y\”øÃÍ?ÞÆ÷eddDvîÜ©eÎ÷ïß?otUU•qí04Óº„bþ§Ž¿çæ›oÞ,áËþK?ó'죒ýg€B"H«r޾éè]rÛ±{µ‘YŸ,þˆ¬È\Â…!ã’ÂódCÏfymð-.!$¬èýüÈôÃÈ/ËãpQÒ®gûãu|ŸQàì¿{÷nmÜLÿpâ¾¾¾~^o¿œþ=ñïp8‚zî믿þØÐÐz…(ùÇš™T1¨ ~pß»víÚ ‚ýâÙù?Ðò‘8Ïþ3@!1Â9íœõ ø“ ¼7÷t9/ÿ½ò®ì“ !ó™’˳=[Õ,óV.!Ä'iÎT©šPeßãåÚ¨¾ g|–Æ#ƒ ?¸Ù£ÌßJ.þ†¾W(¡¿wï^-SÞÚÚ*ÇŽ›÷˜ììlmÌ¿0ûËÌÌ4í±›ýW¦Êùÿ™Ÿý& œ/€?aÕì?„bàvýlï6mè+T`‚Ài*°$£ž D&%!Y®­úWùÖÞicÒ!ĕܩl©WYþ:ÕÏ_9Q—¥ý:®ýÈö£Çߎ 7Nÿ½½½ràÀ­ÿßd÷QâïZ aF§">hó?Õþð\cc#žìߥþÁøˆÄaöŸB1®•7©Ûe)År¦ œžsЬÌZ&Ù‰Y\$bˆS²O‹”ßÄÆž-\ BlŽæÚ?¡\ûUY½Êò:â»>55uVôCÄÚ™±±1ÍéýþèûG¹¼;0=¬¬¬œs|Ð `ööˆ‚`zݺuÈþÃaJÂcøç+ Ù!Ää´NtÈCOhÀhÁ3—kÁ€³–KuÚ".ñÊ5‹¾ ;^—~ǃ›‘6­JûUY½ÖÏ_%©Î”¸>d©u3?”ú›Í¥>`¬œþq‰òw³?€1X3WÌêô¶¶ ž§ü^ܶmÛA™ÉþÍú:P¼~OÂÝÙ!$Þj´ 6ŒzEÉrRÖ Õ*P'õé5RŸQ£¦ är¡ˆF®š4ñ¥ò–ß¾‹AˆÅÑ üR3¶HjÕV>Y¬Ýï¢&~Èö£„¢ÿ8]]]ÒÔÔ¤•ýÃéß=KîiÌŸÙþ=8FFF‚zîã?þ Ïþ‡jþçÏÐW ÀTÙ!$Þ¿LöȦޭڦS˜œ/uéÕ3µáú¢´2I^lË5BÅуrVî¶<þ½Ožê~VÞVÓ'!Ö"y:I*ÇË´ íø"ɞʌÿcR¢b¢⟢>0øC¯GG‡æú?==W#Âäåý®ífwú÷D°Ùµ.o©@ã;gb?˜@€ˆ÷€˜gÿ „ Ò=Ù«m(ýÖAhaJ¡”«‚²”uYªµTàRÝÎIʶı:†ä¨r¾oÙ¯m;‡ö('ü'ä_-þ‘f¬h7ðÙÿ{ÕWäê=ßÇôA‰s¬dà§'z]ð#c­‹~Š7•¨„>úüáòïÍéþÿ®†ˆñàôïÎÄÄ„6Ê06nÜøÌwþ÷—õd  Hœfÿ „»|iPÿ:&º´íuy{þ†„T)HÎÓªÐB€Ö\ê÷¡”„‰i’ž®.£7&jÌ9.ÃS#225*#ÎR×!ô;'»¥}¢Sk‰Àe›Êôã1Þø}ËM²zùolY *OTîi¿ „ÄI*Ë_?%ú×X"˯ UôôCø£§ß›àe`W§ÕßîQCàCü'%%͹oÙ²eÚzÇÈþ»W6AM@h¾ûî»_•ã½ÿá,ÿ÷V ‚â#`q‘Ï!„ŸŒ+‘­û %+1S ¤'¤i— é³÷Ë;_Ø%aN°ÿ˵½³)õÿ®»`sŽÉä´C»>ä–a%ø1!´Œ“{Û–Ï–~Ü–ŸñçË>©šD „bnå¯V~ý5’8h‰ãJOOŸývwï8ý¿ýöÛ288¨™ý Í{L^^žÔÕÕÍqõÇ}K—.ÕÊÿã §Ó)íííA=Wÿ­Ç×™ßûjù¿øþq“ýg€BHÐ M k[<ñ·¶ûå¢ü³µö»*oV]%ßÛ÷Sž¼„˜Œ$%ð+&J4Áß0^-9SÖÇÈÞ#Ò~ôžë¢ŸY}ã@ô#óK˜þÏ{Œ§1¸x\ëîîn ü¡ ;n¾ùf˜"MúüÁD3ƒ¨Š|!„A¥Ã„üNµ\×ð}[ÿ9§Êyyï‘çú^àÉ@HŒqÍòWW¨/åÖÈò#Ì3?²ý0õ›§z(í·sœþe``@ëýG€;é‡MkUSS#eeeq{Üð7†;v<¬¼PZ¨gÿ–ÿ:þÏŸp7möŸB!¶cûÀk²­»m§|­òJyeð͸«Þ $ÞA–¿rB ~åÖ_3V!yS9–96Wç~˜ø¹–¡“àÐþ@Ï¿{?¼>ÒÕ:Xw8ý»Þo {lqð‡ªŒèWÙÿâ9û®^O·==^ĤÙ!„Ø’?´Ü¬&œ,i ©¶;v;~¡ürm !‘EÏòc«QÂ?eÚ:&¤šè‡ØÌÎΞ¥$4 ô÷ïß?ëòïÉé& s|„Ó¼{+;úoçÎO*cDD¦$|åÿ"Ëþ3@!Ä–`Â]ÊàÊòÏØòø/[øy¦çyÙ5ÜÄ“0‚±›åpì¯ÔDÉd‘eŽ Fr(íÇÑÍÒ~»´LMMÉîÝ»5§ÿC‡Iggç¼Çxó‡` œþ]ï‹GÐâàé˜ Wj·ŠFû9rDúúú´ €{ï;޳ººZ­¨ƒ` Ìþ"åô«€Àèè¨GÏttt¼­â¹÷?Ðòw‘/bÌýß[° ª¢žB!$ê|B.-¸@gÔÚòø¿^y¥¼6ø–Œ:Çx2[‘ëÈ’ê‰ -Ë_;±H¦ãßäN/ë׿·²þHŠo–ö{BÏž=ÒÝÝ-]]]šÛ¿»ðFÐýþøütð™.]ºT›­õV@½ÿîû2ÂæÍ›]{ÿƒÍö» ùpJÁ€¨  „Â/dÓNùÍáäÏË®³¥!`qJ‘\Qö)¹áè<ˆµy§´‚®ýVӇ̰žåw5ï³äGÇÁ…‰‰‰Y§ÿÖÖV­ÀÓg‰~|®ºÓ´Åy¤ˆ¨L~ÀÏ8ú·¿ýmû;Wñï«üßh@Äxö_<<>ꢞB!$@GöÉc]åÃEÛòø?^üay¦÷yÙ;ÒÌ“XФé$©W~ãUÊįJ2-PÚ!¨g÷qiÆù﬘‹îô£;dý‘ýwŸ#„¾kNÿµµµ~×'^âp8~ÞŽ;™šš‚c¢CB3ý d"€/ןKäÏ „B"ÉMÇî’³óΔ¼¤Û{â‚D¹¶êjù·=ßSßF¦y2¸&C¹ö׌-’%c5R£Jü§ãúx\Ëú!ú‘íG™x´Å7Kûƒ}þ»víÒLþöïßï±ßŸiCCÜ,?\þuú·€€§*¨I }7ÝtÓ&ñªÈwößÔ0@!„¼Ã cHn:z§|§ú[ÿÒŒUq‰<ÒõOwäNekcú–ŒÖZµ½ÞºàÇ–””diñmÕ@Üíáðòÿ½{÷jãþÜAÛ²üzPdž`ÆÿÅRœGzŸýÀ@Ù¹sçSjr°Ì7ÿ §ë¿/ñ#øþõ‰É_)!„žì~V.)<_NÎ:Á–Çÿ•ŠÏjº'{x2ÓS8™§²üµ–èç‡À×Å>Fô™µŸÆQ3êµr•±–¦¦&íÒ’’©¬¬œ½­{à<ˆ¥8Æ>ƒÉþ£ìÿöÛoB|;ÿ‡ÒÿoÄì/ì¿éB‘ B!sþ§ž–ß·¬–¿.ûµ$-H´Ýñg$fÈ¿.ºB~Ú|=Ob:`ÒY9^úŽè¯’¬©Œø=%¸Pö ±±çjúmñÍÒþðc»ÆÆF­Ï_eªµ O}îUUUZ¿<àôKW±l%ÇTB3úOµP<§Æ&v‹ÿÑŠ~obÞ[ .³ÿ B!h=¬F>.Ÿ(þˆ-ÿÂü³åéžçä¥þWy2Sˆþò‰bUÚ_#KÇêâÚÄeýz–åýz¿7Kû­´@ŸÿîÝ»5q‹Þôüó‡s™T‚ÄZœGcŸ˜‚ÌÛzà‘ã£ÿÂÕÿ/>n‹‡`€ø˜Bä3@!„Èm­÷ÊùùgIQr-ÿ«‹¾$¯î”qçOSÑ¿L‰þŒ8ýzYYYZ–ßìãùX1:èg‡Ó?.1Ú-î è¡óB§¨¨hŽ@¬Åy¤÷‰ ‰§)þ8räÈŽ­[·ÏÎÿÎ b@øö¦Ïþ3@!„xadjTþrä6ùAíµ¶<þŠÔRùLéÇå–c÷ðd ýžž®ev±¡Ä߈Pbi䃑Fͥלþaö‡ì¶§þvT€`Ì.uàò_QQaq}¶··kmòôÓO?¬.•ž’ð:ÿ{sÿ72þ/®²ÿ B!>x¶w›\ª ÏÈYeË㿼ä2y¦çy94v„'‰Š©œ,“å£õÚȾTgJÜJ¶õ>~Ý­?šB,Ä·ÕƒÈöÃá_ÔIss³ôôÌ7QEÆÎþúùc¬««Ó²ÿfç‘Þ'„?&#Jww÷ÞuëÖ픹½ÿ¾‚F"ÆLÿŒû¸Èþ3@!„øá-7ËÍËO””„dÛ{Ò‚$¹¶êjùfÓ4sDBÂ…îÞÂØbÉudÅÝû׳üüF³üVêdÝéâýþ¨píûúÚ"€6œ;Ñ:ÌPB^k”mÛ¶!û1 ž²ÿÁTˆØ0ûÏ!„⇣ãm²¶c½|¶ô¶<þ³–«*ˆ ÔxÄM<HHdOeÊâ±j9at±OÆÕ{×{ù!úéåg–ܺA d²‘õGö‚×álïŽû˜?8ü£ —fçÑØg0£ÿÔºvÞvÛm/ˆç£ß- °›ì?„BˆþÖ¶N.Ê?GÊRKlyüÿZq…¼Øÿ²ô9x2€Èp*±3Z++Æê¥tb¡Öç/@äëeýØtÇ~«Ã …0Òýþpú—¦¦&íÒ÷1"Aü{rú7ƒ8ô>Qá)HâW_}õ1å­0*ÆFÿ…êøo´% .³ÿ B!€þïZn’ë¾oËãÏNÊ’«*>/¿<ôGž Ä€š©ž(—“F–JÃxµ$L'ÄÅÛ†èAi?úù‘éÏÈȰ¥P·zÐ"TÆÆÆ4§YlÈü»—´£b¤¦¦F ŽO‘ÁuŒþ ô}Z) Ìè?µ¶Ã·Þzë™ýg4Ûïßåû¾Jÿ½‰zoUq×Ç!„b€í¯ÉÖ¾írvÞ¶<~˜!>Ýóœ¼6øOâ‘|G®,­“•ªÄ?g*>úú!Ô öuÑo4ËÏ,¹=ƒºÓ??®ïÛ·ož›½§1eeesÚÌ(Î#½ONúúú~ÞîÝ»ŸVSP~æ-û®i"JÁÓ  „B òÇ#7Ëi9'IzBšíŽ¥Ûÿ^u•|i×µ29=É“Ì|‘œN”ºñ*-Û_5^%þh®®ý,ígÐÂ0¯kllÔÌþpýàÁƒó„±û˜?˜jkk¥°°0¢Ÿk<àüïþ<¨àŠãî»ï~Lf²ÿþ„~ ãÙñðxS‰z!„Ð1Ñ%wµÝ/_.ÿ¬-Qj¹üSÉ?hk@ìMÅD‰œ8ºDsòOvšÿë$z®õL?D?]ûí´×8p@ÛLÿàüïNff¦–ù×ûûõJ8ýëÂ×êÞöÏ„ÎÎ΀_WY¶íܹ3õ줲ýâá¾i/A1(äg B!fæ¾öGä’‚ó¥:m‘-ÿseŸçúþ.-cÇx2ØŒ$I”%#µò®‘•²p²ÀôïYXݵýüF„³ä Z¸¿WŒöCï:®=zÔã {÷18÷ þá)a&q}zÚÄ?*'}©‡~x½xÎþG:àI¸ÇuÖŸB!$HÓùÍáä·Kþ'®ÍÃEò‚dù÷Ê«å[{¤¾Mó„°yŽl•í_*' /•´éTS¿WÝÄY~W?Šo-‚uÏž=ÒÓÓ£­Ess³vÝ÷1¨ðçôo§€<<Mü¡žóæÆ÷‹ïòÿ`Þļ·@€%Fÿ1@!„„À[C»å™žçå}çÚòøOÉ>A.,8[[bUUyÜÉñX©ƒ]\º‰ŸÞ{m'¡Î Eø× #ýàô?<<¬ X˜ýÁôÏ÷1púGÏ?zÿãAœGcŸšx‘èÍ›7?ŒBŒ•þ; D|/÷ùËþÇU4œB!$þrôvywîi’•˜iËãÿ·Š‘íý¯ÉàÔO ‘æL•G–ÈÉ£Ë%×a^'ÿ´´4­ì‚+%%%î'ƒæ¢_õ‹š;¯¹ýcÌŸûìz|ŒôCÐIG¯ç˜±Ÿ?P‚Éþ«`KË]wÝõŠÌuþµì_ £Â>n³ÿ B!AÒ;Ù'·[#_«ü’-??9O®¬øŒ\ø¯<,@îT¶¬Z¡•ú'O›óë!D?2ýþz¦Ÿâ›A‹p_WW—æô¬?²ÖMMMó²×ÉÉÉZ¿Þb‚}ÕÔÔHQQQTÅy4ÎÿP÷744¤m²}ûöGÕńڦ$<ýÿžÄ¿xŽˆÅ²ÿ B!!ðPçr±jX–¹Ø–ÇÿᢋeC÷fy{¸‘'CœR4™/§Ÿ(ËFë$AL÷þÝ×ÝûQêo'¡nu̶n®NÿÈø#ó Wà1ñ¯WÀé¿¡¡aŽÓ´Äy<`ž(*àÒ·zõêgÅÿè?§^æïMä"ìã:ûÏ!„Ê—!õïw-7ÉŸ—ý–†€8æk«®–¯ìù¶2Gœâ G`ŒßéC'JÝx¥éÎ]dX!øˆ~fÉÍ%¾ãqÝðž!üèõGÏ?ª\ÉÊÊÒľnî§;ý£2Å âÜl±±1éíí ø5UûÅSªj`XRt‰-¿6½J>^üa¹·}=OÓ+Ñÿ™C'Kùd±©Þ2©ÈôcC65X5Šo-y,D>œþ»»»µÛ¸T³çç [´¸šû!0…`‚Ufç±è£AM^˜¸ýöÛŸùÙÿ@+Äø÷W`Ùì?„BHX}ôorNÞ™’—”kËãÿ—²’-½/HëDO‚ ÿòÑzyÏЩÚH?³1…q}W¸´‹P·:ñ²n0ùƒÓ¿Þ£ÞÑÑ!‡ž÷8÷1îÁ€xçîûŒäþÐ:ÑÙÙðóT%Ƶ!ãð"ìC­ð׉`„BˆÕ€þGï’ÿ¨¾Æ–ÇŸš*ߨú²|oßÏx2˜Lø×Ž-’³‡N“…“æxOJt Ã…l¿7Â,¹¹Ä·ÕÖÍÕéÇvôèQnõÕÕÕ²páÂ9Á€E‹Ed-âÍàÏXË@³ÿxKëׯDfÌÿûˆàbß[Ùÿ´UÎ!„0ðT÷³riáùrrÖ ¶<þ3rVɹyï–-}/òd0ÕãårÎ໤d²ÈïýÒèé7:¶â›A‹H=}é»wïF¹¹ö˜ææfmV½+îcþð:¨p Dc]â1 €u &û¯Z^ݼyóA™ÉþO‡qñߨ¸Ÿòg B!–ù«þý¾eµüuÙ¯%iA¢-×àk•WÊ+ƒoÊðÔOˆs?dü—Æü½è}ýý®#Ó¬*8-ÿ7Îë†Ì4 þðþÐÿë0ýsÅ}ÌÎc”üëÁ€Xˆóx @ü;Ž€÷÷Ì3Ï û™‹N—-OÂÝŸù_\Ã!„&šG˃Ë'‹?bËã/LΗ/”].wï½}¢SîïxDëÚ¨eÿIdX2V+õ¿G2œ‘aŒFíy¦ø¦ø6㺠jârrR» #:dþuçòòrmÓÅ0Fü¹;ýGKœ»ï3Þ'  å"˜ìÿ¶mÛôìÿ”„¯ä_Ä÷8@o¢ÞŸùŸå`€B‰k;–‹ Αºôê¸x¿FÉÚö‡eSïó☞â!R¦“å}ýï•å£õQþè{ŽGÁiu¸nÆcý öÑëPþž”ÿ» ]8ûÃ× ÛïÍé?bÙ û ç>±Öî‹FPÕ]·Þzëó23ú/Ð1FÄ¿'áïmb€ø ø\J!„âýË’Ñ¿k¹I~»äd˜÷‹»î胿iû$DbB‰£P>Ô{ä;r"dPgþèy¦àŒ®øæº…-0o¾¹¹yVÈ¢ýàÁƒs„-Ä~CCÃì9Ÿ””Ó?þAöß5àb”7ß|óÉÑ™ž O½ÿ¡D¼Wx „#À!„BæóÖÐne ÷¼\¬FšêKü;Žþw·= o7òƒŠ§¯ó”ËâtbÄö„^glf¡ß\7£ïëÀšéœ«Usäç<ÿpú×+]t§Ýù?žºYxŒ>q!T»ÆÈêÕ«Ÿ”ãåÿÑvù÷'ì-Ÿýg€B‰27½]Þ“{šd%fÆü½ ´ÿÙÞ­šð?4v„N€àGÉÿÊÑÅÝÊœKKKµÌ§Ù§Õẅ¾èëß³gÏœqsþî"bñâųcýt§ÿH™ýÙ5 € Ý{!TÛÆ&UÁÑ'Á÷þ‹ø/ý¯!bÓì?„BH”éì“[ŽÝ#_¯¼2fïaÔ9&Ot=£ùÀ D‡L5Öï²Þ‹¤traÄö,gYY™dggSp « ¬´€£?ÆüéNÿØZzzzæ<Î}ÌF[VUUEõó²’ÁŸ7ເ6Œ ž7µfÍšGåøè?#‚ß)¾3ûþÜÿö¶Èþ3@!„Ä€õjœÞ%çɲÌÅQÝoŸå‡}?Ðù˜ :†øAD‘²‰bùh匌ó>¾øçååi½þÑmFñÍu‹púGæãæzÎaþ744÷ï—û˜?T¿`‹¥XŽgƒ?_ÀsAÿ<¡¥¥å¥W_}õ˜ÌÏþ‡Ë0˜–Ûeÿ „Bbñ_ýƒ!àŸ–^' "/ÖZ':äŽGåQ5Êoœ£ü¢NÃXµ|¨ï|IŠP¿jjª6æ,XwŠoẙp-áojjšuúGÉ9në•:îcþõÏÏÏ7@·B@¯×ÞÞÔsŸxâ‰õb,ûh @ÄÿØ?ñòø@¿% B!1 qd¿<Öý´|¤èÒˆícÿèA¹¯ýyFò›â(¿˜°rd±\Ü–$Hd=Èú#Óéžõ§à¤Pçµ@‰¹«³?Úçô㽡¿¥þš¨Q~uuu;ý3 `eðYŠøö£>ºGæŽþ‹D¶_<ܨh·üø!„±úèÝrNÞ»%/)7¬¯ËQ~±£ß;xª¼{蔈¼>úœ‘õ4ÚëOñÍ E¼¬úû]þѰoß¾9#çpþÃì/++K»––¦‰Ýü/ÜbÙªýüì ¦÷<ÿüóÈñì¿3ÌA_O¢>PÏ!„§†äÆ£wÊT5ô/rïŒòû[Û:Ù5ÜÄűø?àLY¥FýE‚ÌÌL©¨¨ðëðOñm.¡ÎuóýX|dùûúúfïëííÕz€Èǘ?ˆ~€ X$þãAœGcŸø,ÆÇo!8zûí·¿$ž³ÿ¡¼‰x_†þÿ+ îg B!ÄOuoV†€È)Ù'õ|Ç´CòÛ¦ ÿÃcG¹ &ÿ¼[N^‘×G¹³»¹E$…z¼¯LåvïÞ-ÃÃó÷¡×\ÇÍyÊû!þõà~*++ç‰W–®UðòË/?ª‚;ˆøýlß¿·q€âå>Ûfý „BÌòÅ]ýû½2¼qùÿIÒã&q#S£òd÷&YÓþtMöp!Í"þû•ø ¿øGv3V%ÿß ZDrÝ úáôïš]†ðw7›ƒßÊüõL?a˜za±lõ€²ÿîæ‹FP~ƒ·ÝvÛ³b¼÷ßÈcÄ€ð€@îöq B!Ä?ÇZ”Kÿcò©’ú}lŸ£_ò{J{¦Fù=­FùMpÁLÆÙƒ§EDüëýþ0=£ˆdÐÂJëQ ±¯ W‡Ã!û÷ï×Lÿ\qó‡Òÿšší÷"\b™¾éïï—‘‘‘€Ÿ§‚:*ûÿ˜Ìdÿ§d~–?Ô²£.ÿÌþ3@!„˜”ôÿùÈmò£Úo͹ßh³Üßþ¨lìÝ"Îi'Ê„œ9t²œ1tRØ_β²2KNŠo®›ëÏQâôèqÏx ÀuÄJý!öõ1¨„Ù.)Σ·Ï`{ÿU0ç¹t«« ¾ìß]ˆ{Êþ 0ûÏ!„b>žëý»¼¤ ÏÌ]5;Êï…þ—¹0&Ydÿà z›uáCÁIñm•uƒ›?„>Jÿuà€1“““ÇŠÊô744ÌŽùCÆÁ€hTÂ0 påà?ǘ1—_·nëè¿HŒüñ_Àì?„Bˆ¹ù2ÌnÍ”½#Í\ “S3^¡™þ…| ‡¹Y ýÍV‘ ZXoÝ ðÝþ1òOe‰çŒùC†Nÿz¦???_óÀЋýüÑÛg°ÙUÝñʶmÛÊñ츂"ÆÚ" `€B!á§m¢Cm\³SèÈ“÷] ¾ÙãøÂ~ÿH8ýS|3hËuC¹»ÓGG‡>|xÎópî#ó¯gúQ ãÍé?VbÙ.dÿ‡†‚3š}úé§×Ëñì¿«øD ÀŸ¨ŸRð[60À!„BHd:Óå{.‘TgJØ^ýÎÿ˜›QpÚg-âyÝ`"רØ8Ç鿵µUŽ;6çq………Z™¿îô¬?²ÿ¡ˆeöóO°Îÿêón¾ÿþûß”™ì¿7ÁL @ÄXÿ ~ÚŽ# „B1*Ô§äz/’œ©¬°ŠÿÊÊJIOO·¼ˆdÐÂ^ëæîôK”ü»z¸üÃðLjì8œþ­,Î#½O´i¸Oc0ÊÖ­[õì¿‘ÑF«DŒWbþgK „B1ÈEƒï–²‰â°½¾¨‡"þ)¾)¾Íºnpú?räÈìmTìÝ»wNY9^ bÙ’’§Û'*4‚AµztÝ|óÍÏËÌè¿H•û{Êô-ó·}ù?„B!Y1Z/' / Ûë!ó2gwñOÁiŸµ°âºaßpõïîîž½½ÿÿ®cþéG¿¿îy‘‘‘!ÕÕÕÚ]À²Ÿ?úû„_C°Ùÿ×^{íQ5ÒqLæöþ»_†*þE¼—üsô„B!¡SƒíýWûw®]»VýÈØ¿@¿ûÞÊþ™ýg€B!Ä7 Ô¿‹ûÏ’Ôé”°¼ÌÎŒô9ÛIpZ+¯„~ss³–ý×ñ4æ¥þ(ù×Ëüñ{€±¨ Á_ä÷itÃÃÃA;ÿ:tè…_|±Ef²ÿÓaÜDü·*Ú§ù—‰ÛþŸÄ% „B¼sÒÈR©_–×JNN–ŠŠŠ ¾ü3Kn.ñÍu›qú‡Ðw-ǘ?xàÒõ¼_¼xñ¬Ù%*`ð{€ ÅytöitÁfÿ±‹‡~øA9žýwÿ.ñ/~ æ„B!„¹äLeɹ§‡åµ vÊË˵Œ'E$Åw¼¯>ÆüŽŽÎÞ‡ì1®cþéǘ?ŒûEEEZL ï™èì®U olذa¯ÌïýWÿ¿'ï)`¤ß?ó@!„B¬JÿS¦“ÃòZ=‘îu6›à´:v]7ˆDˆW¡1h@K€NNNŽÔ××kA/}äe Þ D7 Bö_6nÜøÌdÿÃ1úÏß@O¢ŸÙ!„B‚géh­ÔŒW„åµòóó51MÉ,9×-k¡¿oß¾9BßÓ˜¿ÂÂB­ÇÏG ªª*¬Nÿ „wŸèûGG0ôôôì¿÷Þ{_WW' Š#Â_<¹?ØÇ1@!„b%õ?ð̰¼J 1ò"’â;Þ×­½½Fo~Çü¡ÕÙ~¼'8ýCüë-çáßg8ö×ÖÖôs·lÙ²N]ÀôÁ5ûJÙ¿'ñ/ž#â?ûϪ!„BærÖÀ*ÉšÊùuÐ÷¯ !+ N«Ãu›/4QÞßÙÙ9{¿§1Xdý‘ý~Aü'%%ÙVœGcŸ¡î¯¿¿_FFF‚Ú·j9vë­·¾(ž{ÿƒû'D~ žÙ!„B¼S4™/§Ž¬Ëk•––j蜱ß\·à‹‘~(ù‡HÔ™œœÔÌþ\E#Êüaö—­ÝFË‹7§;‰óx ²#XÔØ¿‡Ô92f `${/bÜøÏ— ³ÿ B!„ãü3d„þHCßßñ¸nÚH?W¡?66¦Ý‡Ÿé ÌÉ’%³&—¨ÄéŸØPÁá:É!ԹгzõêgßÿF³ýVˆø®ð÷3CKÄ!„Bˆ i«–ê‰ÐÿPòɾŠo®[¤×¢ß]èÃ(Õ¨ бßâÅ‹gËüÃáôoç€@4÷‡ËPzÿ_}õÕGT ÀˆxÏþGj@0¢ŸÙ!„BŽ“0 ç¾+ä×Áx”þ£$š‚3òâ›ëþµ€Óÿþýûç8ýwwwËÁƒçˆÕ¼¼<©««ÓÊü±-Z´(¢U/,ß/øœÇÇǃz®jºù曟cÎÿDŒgÿ½ | ~!„B¼sòÈ2Éwä†ü:¹¹¹’‘‘·ë@ñmï úÁáìïš%Æ}GŽ™ó8”øWVVj×ásëhПÇò}sï¯ë>½!Þ~ûí§Ôy1 dzÿáÎö{ø¾\ÿ}n?c€˜ÿÿ)ü]à2B!‘<$gú—)U]TTDÁÉ EÜ­®Cø»Âá>dý‘ýwÎþÅÅÅÚuˆ~W§;‰óxtuuÍiïÕ2~Ë-·<*ž³ÿáÿç¯Ü?Ñ„B!„ãœ:¼B2é!¿D‘»ë9'…ºÙ×=ý釒p‡Ã¡õû«ïÙûpn£ä¥ÿF—ååå>þ0_@Ÿw(Ù5b“:_º$4ç£Uâð0r°c€B!Ä*¤N§ÈéC'†ü:è}ÎÊÊ¢àdÐ"®Ö“Ó?úÂ1æŽÿ:(óǘ?˜þ8ý#àìñÒà/vLj쿫‘c (_ˆ©5kÖ<"3Ùÿ) Ìõß)Ƴÿžn‹xo ù¶‚¥ÿ„BH¬:AÒ¦SCz d@}¹þSp2haÆuÃø7w§dü‘ùG€Êü1æãþðºèÿ—Ó¿f8FÿÎÎΠ_Oµ‰l{ùå—aá)ûl5€ø¸. {fÿ <á !„Ï ÷ÕÈŠ_ÙP÷hŠo-̼nýýýšÓ¿k&-ÍÍÍsÜÿQæ___¯Mµ@ «¢¢"¢Nÿ Dˆ×Ï7з|ÿý÷? .1š’ð¸þ{ÿbà9"Ìþ3@!„'Ž,‘4ghÙdEõžh+ NŠoë®JÀ]Gúá²µµUŽ;6çq0´¬®®ÖŽ-óçêôoeqnÅ€€Ý7ÏÐ1ZZZ^Ú¼yó1ÞûŠ?€Ï¥ Qð30À!„Bì†ÊgÊiÃ+C~£}Ðê\‹X¯îÃ8¿¶¶¶9÷yrú‡¹_YY™ö©©©Ú˜?ì*έÀ„‡P²ÿ=ôÐ:9Þûïîöªë¿»0göŸŽ¿#\B!d†¥£u’3ši_FF†¶Q|3haöuÃ~àôßÓÓ3{ÊÿÑï?888GdÖÔÔhm-Æ–(û7âôo瀀ÙÆŽ}}}AïûèÑ£¯>õÔSMâyô_ Yñ!þýU0ûÏa@€B œÓ†Oéùøòéxœßö[7úÁÕßu¤Ÿ'§ôùÃé_ïñGk ªâ]œGcŸf?F´x¸?>{ì±ûåxï(f"Æ«üµ0ûÏ!„BˆjÇIñdaH¯‘„Òh NŠo3¯~cc£_§xYÀé=þx}LµÐ«ì&–­vŒø¼]«<EµŒ¼ñðÃï’ùÙ_åÿFƒ"ƲÿÞZ(ø ÁþÍàB± g ŸÒóñÅ:ÜcÐÌ*"´ˆßuÐÊþ]…> :4G,fffÊâÅ‹µIxÏ(ùGé4ÛˆÜ>]=‚aÆ ®Îÿ¡–ÿ‡+ûŒ¦¡Þa€¢žB±¥“ eÑxiH¯‘››ëÕâ›âÛ ëæ.ô½9ý£Ì¿®®NëñG@wú·“8·r@ãGGGƒ~~GGÇ®µk×¾!3Ùÿé0o"Ƴÿâáñ„âö˱€¿„BÈ\N^ÒóñE=??Ÿ‚Ó¦â;Ö "ßUè{sú/))ÑÜýÚY þý¶hð?Ljׄó(¨ìÿ}êb\ægÿCqÿŸö!æý¹þû øÓF„Ó‹÷H½¶ü…"„B,EêtŠ,« é5ýG¦4ÞE$ƒÖ[7OB³ß÷ïß?ÇTUUi#,Zuú·S@ ^\½EGkÖ¬yM]uûN O+€/áÎÑ 0 `ðñì…!„BËÔ迤éà¿òxÊþS|S|›aÝ0ÒÏÝé€MMMsD D~}}½È¸ ‡Ó?æ:Fœ!íSý[+ž{ÿÃÕëïIà{ 0ûÏ!„BHàœ4²4¤ççääD5û¯BÝê˜mÝ ôáêï:Ò€ÈüCê ¼fÚmŒ±Œä(Kb·Ox@¸š?ŠÊþï½ûî»_‘ùÎÿ¡šþ‰Ûâ! >ù _'üüñ—†Bˆ¥)šÌiôŸ¯ì¿™D$³äöZ7O#ýù=|øð‘˜žž®ùCU¥¥¥Ú(K+ôº²O;#Ú>Üýå‰'ž¸GæfÿÃ]þïMøöÌþ3@/þÛø @!Ķœ<²,¤çc,šƒ4Šo-¢µèñFÏ¿Ó霽¯¥¥ežñ*WPöŸ˜˜¨U°”——k³ ×hìÓLjÏßõœ@Ú­zÿ_ÏÙÿPûûŒýcöŸ x/'ù‚^‡ÙB!öù’3(ËÆêBz ŒK³»à´ü—±8Z75žMŽ92+.!ø8 }}}s·páBÍðïUwú7ÚÆÂ€@üí#ÿ0ú/ž|òIoÎÿ¡D˜ýg€D5hàí¿„B,Ï’ÑZIs¦ý|ôL»ÎF…ˆd–œë¦Ï¡C‡æ”xÃäf®b¥þú9ŒÌ?ª(–­{Œmmm!½XÚuï½÷"ûïc£þ‚ ˆ0ûÏE{ØŸïk¤†«!„؄ǖ„ô|Ý1â›A‹X® ý`ì7888{Ÿ'ôø×ÕÕÍV­àüÕËÖ=FdþGFFBÚ·êý¿W¼gÿýœb¬ôŸÙH¾F² €BˆmÈrfÈ¢‰àÅÊ¥1'ÝÊ‚Óò_–,°nãããóœþáÐÜÜa€>öoxöðç¬éäRB±™ÎôÊÿažª`–œA‹@€ÉJü‘í×AÀáÇý:ýDu=ˆý>1‘¡ KÏoÚ´i¿„–ýwŠqã?_ÙÿPG—3`À€åF\ÿýôë.1!„+±d4<îÿßêÑX ˆ~8ýë%þxLKK˼ÑnîNÿÈúÿÿöÎôK®ê<÷»Z#HÍó<ÙÁ&ä.Ç^we%Yɧ¬ø[¾äËýî§L˱×JlÇ8v°c ÌÅÈ„0ó`l Â!BcKjI­¡Õ-©5vwÝýžÖi>}†½÷Ù§êTÕï·V­šëTUWuçyß÷ÙaÒ'‰åN7äòÞÞÞB­s†¶lÙò_ú¤|è’ªÿE–ü£úÒõá—£–py^@x^¾ð—_ùÜOÿ·>–ĘI×]‘C-å|-átü  ŽÇýoãÏPIj x¼ZÆù¼Óá±ü&Mû??üâÿU‹Õj—'&ÖiÓ¦u¤PÇ´hüûvöìÙ Ù?lñ—ciùŽѤÈKúÇh_CàôéÓ…—ýûä“O^zûí·»Uzõ?ÉQöKþùªþçi'Àè(s /ü/Í W¯_‰ ý¤C-Ãp1²v*1ÚÛ0¨žÏüÑëä7iÒÂ… oЇ®O<^Qm7Á‰iQdù6©ô‡ÂNBÝ$ìïÒ¥Kãn7þ|µjÕªà=ƒJÂþä¸Å2íûÅð±ìŸ6™.?üðÃaõ?oé?ÛÊYÕD>@Gû"÷O[ éË9ùò‡âÞG€²0|~ €Ö3Lªþ&@׵ߴ®¿ú«¿ú”®:G¡çˆoL‹¢·•eÛŽ;6®[–÷ñ û–/_®/^œ–¤©üûHúo–Xfž¿ò™)¸ìŸÚ¹sç³}ôQ¯òSý71”¢ú€Ð/å¾ñ€º2[ -Ð#JWìò®k§k±ÓñC=átÝ£Pã@ˈÿzÎeñ߈´Ñ¶DMuí÷¨ëÖ[o½ÅõIJKµkeµÊ‚ñ]÷MÄ[<é_*ºÝÝÝãD£´ù¯^½z,àO–¥# Ý:†€9.\FFŠ Ã&Ïßwß}?U£ÀÃ9¢¿H€RÙKýQýÇO†AÒÎRÝÓa$"ö•øÏêðe˜P  ë²<ñ_74ºt«ô§\Ÿ¤ˆ,„:¦EYHû¶„ý‰ ßé8zôèøóÉ“ÕúõëÇ>sæÌ ÒþãB’yþÎÙ¦à?áÝwßÝÚÓÓsFå·þ—Uý7öTÿ1@%·ø§íH%uýc;U1 Oü'JÐŽbÞ‡ö;ÿ=I˾©}á _X2cÆŒ¹®/,\Z­ÓÅ7¦…ÿÛJÒ¿„û…ámÒ çûûûÇÝNºPDüK¥<Ö‚ 2W¥hw±Œ!0Š|NâÙ¶hãéÔ=÷ܳU]Oþ·YîÏWõ?m€ê?‚_e·î×r./bÄEZë¿R€ùÿnÓyÿ¬jªø—ߨ?û³?û¬ë“—¥ÕÊjÿG|w¶i!k¶‹Øg·uv0ïv„Hþ„ˆÿ0éÉ’%FIÿU®TëËÙ¦|nNž®M„KÊ®ú_w4”PDðc `´½ÐOkLýѪ¬u8ÓÄ’ðOšùÏ3ÒvÞ’vkžv2 ºæ@ÚÿþøïC–ÙýMœpÙ_ÿõ_oÔ¢išË“±%3×UœˆïÖ~ßä9Kª¿þð¼¸9rd‚P”ªð'¡2ó/íÿzžÕݦ<Ž˜HñdzE?Æï·lÙò?j4ùßt‰?s IoPýÇF‰5 `b$%þ'íœeµý»´þ#øZ[èçÝÆ¦í¿– øÓ~»>ûÙÏ~ÚõÅHû¸“ŽPïÓ¢Œ÷M’þe™¿óçÏÝOÎË(@16lØ0–ô?{öì`É¿èç°™ÂqÞümúþ“Íÿä'?yL]oýQnóþ¦ãÊÀ("ø10ø=ÊÙéªgg þ¼ªýÚu¦âß×òì…´¦9àÒöo:rV¬XQùöªäíý¾]¾|9û“ãÐ eÿ$0Št›è¼Š±®“ùóç«›o¾¹RÂqÞ\£EfþO:Ux[{÷î}õ¥—^Ú«Ò«ÿ¶F€RTÿ1À» Ïªú§¥g}qj†F@VÕ?)ô¯®Ê ÿCè´¶àÏû¿ïCüõIëдIºzµÓ“×;àñ¤uÄ7¦…-Rñ—ùþ0¬M–ýÓâkÌ ‘Š¿$ýOž<9hõ_´h‘“…!ÐÛLÛÞ‰' ÿéû_~衇~¢Oʇ0¯úï# PE?Ɔ€Á"*þóŒ•bØT`ÒÄ¿IÕÑкB?ï¶yâßÔˆG‡¿Uµ¿üË¿\¥M€é./JB×5sÝŠB½íw´<¼o2ë/Iÿ¡˜ÓK­•ÿ¸€“JÿªU«Æ%ýûZzC } Y)b`` ðcíØ±ã—~øáqeWý·¹.®%¨þc€ƒ°wyœ¬²zÎé¸àW âß6õ¿¬öŒ€Ö3 òÂÿLÅô7jÂoÐm·Ýö)×',@UÅ7ÝÕß$¤M!²d[Ô ‰&ýKëYIÿ­¿Mù Egœ¹÷Þ{ªFgÿ³‚ÿ²ZÿGTvû?Õ (ÙHZÚ¯føÅ¨Å®Ïüqñß•¶Ã¥Ê›ýGä´®èW9¿.â$Å~ u’ú×'oÿG|cZ˜¼>9¡Mú?|øpкˆkÖ¬ þ œ\¸páØc4C¸"Ϋû¾öõõùþS/¿üò½ò„¬8tíÿ§mê^Û¿RTÿ1 á†@üËbr›´Ëâ†@™âßt‰(h-ÁŸv½©øW†¿5ñεšž£v2d‡ÝG@+ õ¶ßy*ñ}“Ö~™÷“þå¼ÌûÇÃþdÎݺujÖ¬YÁy ú‹&ý7K¸R­¯æö®^½:aµôcì}à^Qã[ÿmÂþLgþó:ò„=Õ „½Å}ÒBmˆî<% åAüWeÙ?ö†šó¿6í÷ÀTü§u¥…«Ø¨?üÃ?œ¯Eü—',â?k'*yµÄwÞ·+W®â?¬ÒJÈßž={&Tm¥Í_–ù ?c:¤RÝtÓMm)\Ù¦ŸíIëÿÈÈHáÍ>õÔShSJ>IÕÛÔÓêžp§ú–æ€I@ÍáK4¢&†*å âß¶z­#úÓ~LçÿÓ~o’Bjkþç~‹ë“¯zõñ]­÷MÂÙDüËò~‚tHå?<Oú—–ÿ"KMb´¿! Ÿ¥x‰ úóøÚ3Ï<ó¡º^ý÷Õú¯Õ hº9Õ`Û'ømÿHÿ豟u›"â?ë÷&ìùÿõ®/(mþ¿•…zÛï5é}ëïïfüà ­¬ÑÞÝÝ=AÔÍ™3'˜ùá/ÀâÅ‹ÕÔ©SK’ˆóÖ7ä3ÏŽpAQõ²«Ñà¿á ñï£õ_)ªÿPHÌ›\gÚPOØñª{xŽ.€/ÑÏ^@k.ËþeµÿÇ«ÿ¡ PÓ3Õ«\Ÿ¸IB½ü÷¢êý£GÏSÇŽ ÎÇ‘”I÷—×"¢_Ä¿˜åÖßf™Û“Ö™ÿ/ÊöíÛYöoØ@ü»Œ(Eõšj˜fÔ ¿Dõ”°ºÊnùÏÚÑËñˆ{€ÖûyÂßEüGoÿѱµš®¸.wÿ­$ÖiíoÎû&UIf¤R»ÿþ  .Fu'J0ç/HÒÿ‚ Æ%ý7J¸b´Öö$;âìÙ³…G§œ¸ûQ׫ÿy~ñ¯TþòiÂê?dˆn“ëâ?ÍHýµœ/_-e[I&€RåWÿ1ZÓðYýO:wXÕç?ÿùES¦L™åj´’Poû¡Š½o’ì/-þá\¶Th%ìOrÆíDë ¿ÌûËÜ¿ Iÿ2öü00¢¡—ê›ðX.<ûì³?Ò9ƒêzð_\Ü­ü×SÄ=Õ h²‰fd™õ á?_WÌýt²¸7½­Éo…Ië¿JÿAûÿç>÷¹µ®/Îf.›*yg"ö%ìïâÅ‹ÁùÁÁÁ ì/Þ¦Oú—%þL“þ10¤³DV‘(ŠGyï‘GyKVÿmBÿlÓÿ©þc@ Þäº$‘ŸgÔžG’ðÏë8ÈÛÄh_SÀGûÒÜ¿JÿÁoÐÊ•+ oˆoL‹8Rá?xðà˜Ø?sæLÐöxRññ?iÒ¤±¤¡’ü•¿Í*¼Fù|…£%EÐc)W~øáGôIYö/ü—×àög:@õJ0LGLFòŒ…¤î‚¤ãºƒ€Ð>F€I@Z¶LVè_=ÁC—ž³^ãôäõθm8â»ZB½ Æ’þÃöì#GŽL¸Tú%é?ü‰ø/ÃP¢Zß¾¯ñøñã^Zÿß{⦅¿ýöÛÝêú²e$þ›¤þ+•<*@õ,D¾Ë}MMŸßéKÚŽËÒQк@ü7"-P6J–øïJØ­Íž=Ûika@Ur áôéÓã’þ¥ @.‹#ÉþË–-Kúñ/&@#Þ öØžMáxIôÌÿ‰ï~÷»?Õ'/_û?9¢ü&þ tüaiÿ7 té(Hÿy_æ_x€¶3”Jî ËjÿW¦âÕªU3uËõ—'ï{]öª uL‹üÛ†ËúÉR‚^K=˜÷×âj‚(Œ&ýK»¿$ýKû§W âÈç+ü¬eëÖ­?Ô+HJåPñŸd¤Uò©þc@D¾ X¤ ÍÈÿ5ƒ/y-)ü³ÌÞ¤±´pÙ$á¯2ÄÿØNæŸþ韮UŽÝcÑvmªäkZHÒ¿´ü‡Ë°IUVÄ<˜Mæü%éÖ¬Ñ'ä84:E¸bøÙÞÉ“'ƒ“¢:tè­Ç|»ºÞúï*þ‹Œ˜vPýÇ€›qá^d ïtž¨¯ñEhYÑŸõ¿=ÉN[&þ[0¢’«ÿ*cGS:Vº¾ ªuTE|w’i!•ØhÒ¿´eKØŸ˜Q¢Iÿ‚,ñ'Ký’ˆór¶Yå×(KJÆ;K\П݋÷ßÿ£j´õØ“ø·øõ ñž×À¾?”`dUçm»Š ÿ²?yýÉú_œô;4:–õ¿;^ýÏ›7­éöëeN? zg½Q+ ¾«iZ\ºt)˜ñ¿råJp^ª²º¢:AØI¥_*ÿÒ Û–ÿo¼q^ámVõ5бtâÄ /Û{çwžúàƒŽªÑêÿpIâ_eüV*;ýßec€-e×t™ÉH@|G®^à9&št(þI´i¦nšÕoÿOÚÙLÛñºôzëNÀ”)SêlZH¶»»{,é_F’„Ùüùó•î2 ^Ÿ‹-*µsC ½_£|Æ|´þëq•ž»îºk›>yÅAü䈥ò—÷3íPŠê?TÆP*IÀ"ϱž#ô]·GÕ ù¿KIÿ“ëA-ç7-^ùîdÖ2žCM¯Ã¾ÔåET¹ýŸÖþrß·3gÎŒ-ë'Ù}ûöÍÿGYºtipÄ0Š&ýwšpÅ(Ž|Æ|´þËÓâ‰'Ðc+ƒÊlÙ¿¢Éÿy¢ß¦úŸ PP€§í˜åUk²N»î(Ö<¾Vh,yfn’él»¬m^»é„ùÝÂ?E§°/vyAIUêí,¾›ý¾I¶··78-!{öì F¢H¢¿$ýÏ;78/sÿ"þÓV@œcä!F“¯Ôÿ>úèù_üâ¨ñÁeˆ¥ìºØoÇ€’¾© ¶c¦ _ÏÑ·ýÊ2\§TÂïNÔ@ÈÚá¬é–j±æ´ÿ’f ÔÛó½×"Uÿþþþà¼Tb%é_B㟠û güu‡‰QÒ?â¼qÛlÅ×(ÆSÉ H3LMÛŠ´ÞïQžÈÏúýªçlcì¶ðༀ€ªˆoL‹ìÛŠÈ—y-ž‚óR‰•óq‘§»IñŽ‡Ìž=Û9éC€×"fÓàà —ç±uëÖj3¡ßƒøOê°É úÛé²éÈþyf€­øP)¿5ñÐÀ¼ T×âÅ‹W”a ¾ÛÇ´6YæïêÕ«Á6;¦Ž=:áv:LR­[·n,é_ªþ3fÌ@œcÚ¦Týeu èÏñ¯{ì±·UrðŸMò¿I RÙ•¥¨þc@K˜¦F€‰u¹ÉŽ´®hw]A¦–³™—ý½ªéíå./@DžÌy#ÔÛ©¼Ê²~"Â$y}ÿþýc#QdY¿•+WŽ%ýËùF„Db´ÿkñï£õ_Yguêÿ#úä¥kâ?-øo$Ãð1@õZÀPF@Öå6B¾Æ?€¶þ¦ÿû“*ú&[O8Ÿ–:Ý¥ç´}‹;Zû«÷¾IÒOOOp^ªÿöŽDY±bE°´Ÿ&ý‹ uˆór¶ÙίÑcê¿zá…~¤ ,IR׫ÿ6Uÿ¢3ÿYéÿTÿ1 b&@ÞmëbÝTÈ#øÚOðgýOÏ ‘­©äðÙ´û&IÛ:´°Ài‡grþ.â»uM \“ƒ ³×ö'&@éY»vm0ç/HÒÿüùóS;C¨ÖómÏÛéÓ§½<–YyÓ¦M¯©Ñà¿°úošúïcÙ¿¼¥õPa@¶;}>¾ð„Tó7&ïwZNLÖé¬ß%ÃzLÃéJþ<—ÖŒÀª õv55$é`` 8/]Òö|IIÿá’ˆs ¢Û”Ç“Ö;ñ`$\¼÷Þ{P[ÿËHýW&@üÿq^Õ (q­æñöyË=e}ik^T—¼pٸொ|“Ùÿøó¨iw“®äßà´Ã3Ùl—‡Öþj™Y·•9ë0é_n×ÛÛ˜qDô¯_¿~l DRþ‹$ýc`Ä‘œ‰‹/zy.o¼ñÆ–;vÈ,ËUåüg“úŸUåO›ÿwÙgß<5‡/^Íò Zã ÐÖÂÞö÷ ÉÈký·5£'<çÛn»m‰óÏäöÝåéDÓâÊ•+êàÁƒÁ±¶)ŸAé<ñ´þßyçϪÑÔ“6ÿ$ŸvY#–ýC`@ƒL›¹¤2Û@å°M¨Þo‡­Q&ü³N'm;É,Ⱥ\ÞµlٲŮ/¸ ~Þ7©øKå_:†††‚yÿ¤à5 ú“À?ABþDüO›6­aï-íÿ¾†'ñë]Эÿƒwß}÷ýjtîH%Wð‹,÷—×þŸ÷[AðTpg®h+~­À}]aï 5Œ‚´Yþ´ö~ßti·Ðé‡Fï¬Û,ˆP/ÿ½p}ßdÖ_’þeÖZZ®%é_*°ñ¿·,ñ'Kû 2ÿ/aQˆj=¯ÑÇ6O:5áóçŠNýd×®]ÇÔõÖÿ¬p¿"ÁJ±ì´ÝŽZ­àý)ÎùçP-lW‰Šþ¬$ÿ¢¿)µY³f9aû7⻵M iñ?~üxðüŰ¿øzëRé_·nºé¦›‚ó2÷/F@ž„!Àk´E (Yöχzû¾ûî{E¶þ«ìп¢Ái"Ÿeÿ0 ƒ€¼/,U{€öÿ IûŸoÛêŸw¿¼Öÿð¸kÆŒN@Ùíÿt ”ÿ¾IÕ?œ³–åþ´`špiï—¤YÞOП— ÀåýÆà5f!(’úïƒË—/|ç;ßyPoýw©ú(·à¿$#€eÿ0 Ã_zövÚç·$IÀ›Šú¬ß‡¬ûtÝpà NKJU¡ÞÓÂ÷û&þÇ«ÁÁÁà±å´qDìKҸܣ¤ü‡]W ßÛñ/ù>žÎÖ­[ÒÝ,§ÔhëÚÜ¿Ë쿯à?–ýÃŒ€†™ÐLa1ëŸöüjºÂ;ÛåΡ(D|·2[-•~]! Ä–´ü'µ\K•íÚµÁk—ÃܹsKKúïdCÓcù Š!å`ùú£>ú[u½õ?+½?ÏhFðûþÐ"F@³Í¨îïCÖo„‰èw1j ÷©Å®«éyn§ÅÛmßÕ08d¾:Lú@Âþ.]º4ávK—.UK–, zŒ&ý#\y¾·)¦T__Ÿ—íèÕ,Në[ßzDŸ¼¤Ê ý+3ø‘˜ÐF¿5‹ÛÛü–ØÞ¶¦çºõ(ÿä™./&è¡ÞÝRa “þey?Yæ/Þn-ÏeõêÕàvhuÎC<éáŠ!às›á’ò¹ôñ°O=õÔý:ÔR‚-†Ôõà?Ûöÿøì?Á€Öf¦d {×YjñãÏ|æ3sô±S)ßµ Åw³M ©®†Iÿ2g-#qÑ'†ŽÌûëU!‚ó’ô/âßôïŒ!ÀktA–ü»zõª—Çzÿý÷ŸyòÉ'§Fƒÿ† …ÿˆè·]P)‚ÿ0r¾ä˜e’´­š®öÎu}Àhâ»zGx{þa{õ‘#G‚óqâIÿ:2˜ù/ò7bžC ™ù—nèÕ,üû¿ÿûObâßVø».ùçügc``@‡6;r€Y`óûQÓÞ9¾ Äwµ i©––ÿsçΧ%쯿¿Âí$ÕݺucOé´„+¯±ÌmÊø‰Tÿ} ;.~ÿûß¿ûü¨›pUe/ùç*üóÒÿóöïë—€wÃÊÅe¯»Œ.€šáeÒ×Ý5{öì–0è.°{}ÒR-KûIÀŸ¬É¼¿G›p;iñ_µjÕXÒ¿þ<”žô!Àû*Ȳ“žæþÕ‹/¾ø£wÞy§[¥/ùgø7’p(˜·ÏβÐʺ¬ àjd þø*2tõ×ÙHš G¨7ÿ½Ñ/â_L€´°?A’þåþ-¥å_F®¼Æ²·)#)² …öíÛ÷Æ~ðƒ—Tò’Ib>MøÛVýÓL»\)Zÿ1 #Ì€fÎø›l[Vh耭.¾«nZˆà—9©¬ŠÈ:pàÀ1&»µk×Õþ`§U'üKêRÒ?ÂCÀ÷6¥e``ÀËãêñ–ÞÛo¿ý‡jtÉ¿!•Þúïsî_©ìö‚ÿ0 ƒ{×>c\w€NzwZЗ@Ç€¿÷B¸œš‹gÊ”)AÒÿŒ3ÆÎÛ$ýw²pÅô(Žt¥È*>Пó¡Í›7ߣG $ØBZÿ‡ ÿ¢-ÿÿa4<í߯@¨iè4ð5ÿPoì{.í'jrZªþaêIö—¤YÞ/osÿo¼ñÆ–mÛ¶íT£­ÿÃâݵÀµC OäÓúÐ03 i, 8è§€Ö~ÿ·íïï—ùçà6Ò â*Ž$ûKØß7Žz;ú'•ÿ¬àÆN®TëËABÿ’:S\8tèÐ;wÜqǶ˜ø¯+û—%•ð7mý c!Ÿ6ã_3ÿî«+ÂN­$ìÛ¥c@BÔBAµoß¾`®:ŽÌöË2bÓ§O÷–ô!€!`ƒ´ýK>…tÈeï׿þõûõIyÀ¤Ð¿¼j¿MH`‘Öÿ´Ûd7½0  ~Öy¯ÛÒIð“u%j™­ýÅM 9}ôèÑ@ðKÈŸ„ýIè_úkÖ¬ëÎ3 Ì¤  4dL%É rA^—7mÚô]=î"k[†sÿ&U}›Ù~_­ÿÿaTÂ@ˆ/¨æÍ›7ÝuC¾3ª*¾›mZHµ_ZýEðŸ?>XæohhhÂí/^¬–/_>v^fÿÀN›uGœ7w›bR>}ÚÛsx饗}íµ×öªìÐ?›¶Ûª‘ÖD=@é&@Ò¨ÀtÅxj+¿Ðvï!%â_Ž¥Z’þ“ÙêÕ«ÅÌ Î‹13{öì Iÿ$\çÙfÒöİòú÷ñÇ¿tÏ=÷¼ Fçþ‡T~èŸIÛ¿mÕ?ñ­P´þ4Aì+±_K8®éñiõjšRñ—tÿPPé´ ·‘P?™÷Ÿ5kÖØyÓ¤  ßÛ|†þõõõíû×ý×ÿ§ÆÏýÛˆ~q_…ÖÀ„}ùÛÐÎ@+ŠôVÉ#ÙiIú—%Ô<˜ØN-á~7n þ ý+’ô!€!P ©¼|ù²—ÇÒá:ñÿ.%p^Ÿû·ý#­ÿ*CüÛ~Ì €ÒÍé¨ä@'w ˆˆ’ƒÌù˼¿ÌýÇ‘`¿uëÖ‰}i÷÷ô!€!`ƒ˜V.\ðòXÚøºúè£ÞõÁôè³WTþ<¿ËŒ¿© $Öm«ý´þcxöµœÛL˜–6(n²qKñ@kömå2©ú‹’*ª$ý'-¡¶`ÁµråʱûKÒ8Ш×ÙLáŠ8¯Þû*ã*Þž×Ë/¿¼ù™gžÙ¡Fçþ‡•¿ê¿1€¸p§õ0 T¡ïíquùÔvxƒZ}©A™™îéé *¨YIÿ+V¬P‹-;/aÒ§WªõÕÚÞÕ«Wƒ_¡;wî|öî»ï~."þó„½Mõ?é>ÍLýÇÀ(dÔlŒƒ"€‹ ! 0Y@IØŸTýEHÉÌ\LI²ÿÚµkƒtÿð¼ˆÉ@¸b4k{b\IèŸdUø@‡]îú—ù—ÍúäE5ú7œ#ìóþ‹ü©áo*èiýÇhˆ!6wÉi7•·«9¦…ÜVD¿,ó'Õ~iÿ?zôè„ÛIÈ߆ Ô 7Üœ—¹1$ôáŠ!Ь÷U΋øOêTqAw¾ôjñ§^òrP%'þÛTÿóFF”YÕŸÖÀ€ÊˆüÂèJr¥÷WZ½µ? ™õ?~üxPEíîîNLú—ù~Yæ/û²¼Ÿ¤  ¢HP¥ë^K›—6mÚt—î„9¥Òÿ]ÃþŠ.ù§bAšø§õ0 ‚?5,PÎë:óÛ)­ýYô÷÷K»sÐþŸ–ô/B_ÚþÃ÷Jò¥ò_æ{GÀï« }}}‰•®Oõ¿øÅý¯¾úê'j4ñX™Wþó–ú³1ÒÄ9­ÿ€-iL¸_­ƒ•x³º z{{@’Ó%é?©ŠºtéRµdÉ’±Ç‘ö™ù ;ªõl³Û“´ÿÁÁAoÏí­·Þú¯Gyä7ñŸ'à]ĽmÊ?­ÿ€íg h!ÐåKT´‚øn&”&3þ"ž¤ýß¾}Aû ÷[µj•š7oÞØe3gÎ F®ÍÞ^øÙõ…6ÀÞøÆ7¾ñ”>)íW•ÝR~®•W3 MüÓúàG 'ù$h¡Ž‹4þ .»lúôé’þ®l³YÛ“Š¿´ýûÿòÔž~úé<ÿüóéÓ—#âߤêïZùQöIÿ¶)ÿ|À€† þB3R ¯×‡Ъ­ýY¢IZþÏŸ?Òö‹¥ÅݺujÖ¬Yc—IÊRÒ?ÂC ۓϬ˜Xq㪯¿þúã›7oþMLüûªúçÍý§& ¥Ì—üË}ûùYèŠÑP.PÞ«j`ÙFDÚm¥]Z–ù“´ô'N¨C‡M¸$úKØŸTûC¤ê=ß ÂqÞ¾ï«\/3ÿ>Åÿ‡~øüüÇüâšøRf¡6KÚVü}-ùGë?`@eÿоBÁZ¥µ? ™óïéé D“1âÌœ9S­_¿>èdÎ_æý‹$ý7K¸R­oÏ×(§e©?ù<ûBÞÕËý=¢F—ûRÙíü¶³ý.#6sÿÊQü@ㄽéí›=ЪDÍ…ÁÁAYÓ<3éþüùjÕªUc÷ “þË ûÃÀpA‚+¥ƒÅ½½½éK_úžö%Ód¹?Ûöÿ¤êü8­Â¯.óµäæ@eŒ€1ôŽùP;ew œ={6˜ù—ÊÿÞ½{3 ÎÒ¥KƒCˆ$ýËü¿l«Q] ¼¯yHå_B+=š Ý_ùÊWî8+_³Ä—Ð?ÛÊ\ô³ä`@G ;©µ"¾F!ÔË@Òå SIú·MKuíÚµA¥?Dfý£áU®ˆs ßâ_a'ÿíßþíÛÚ니1ï#ðÏÖ`î0 3LݶN ¥¹ ·Ñ­ÍêܹsÁA*ÿñ(™ë—°¿o¼qì2Iùžo7É6³·YÅ×(·—¶Ÿâ_bwÜqÇ7µ)v,&þ‹þe%ûXšÊ@èÛŠ ¨6E Ÿeu—Ûæ!B?Lú—¤ôîîî ¢KD¾„ýI«(¤ê/+´‚pÅèŒ×þùœù×£07mÚtÇöíÛ»•[Û^û¿Mõ_©üŸ"s0 Ú\)÷íÛ¨Jk—/_Ä¿ÌûK蟜Ž3gεfÍš±p?9–eþ|$ý#\1|m3¬üûÿÚ»ºyóæ;_|ñÅ"â?¯õßGÛž  R„¿R´þtuÝú[ láS¤càÂ… AØŸ$ýˆYæOZ¦£H¨ß† ƽIú—@„+†@•¶)·—e*¥›¥ tæÿðÿ°IwÉ ¦ˆŸÂ?­ÚŸgÄ…âs0 å ƒ h ÐšaÒN_¦PT\:u*h“–ç)añ%Ò$ìoÍš5A«ˆ¬Š iÿ>D⼜mvâû*ùbf•5zóÑG½ü¥/}é‡×ÒþÓÄÙ#*½Å?Mø#þÀ`g¶p@•‚£Hµ_ZþeY4NŸ|òI03E‚þ–/_>î2ép]qÞ¸mvÚû*Ÿciù/cÞ_رcdz_þò—7ë“Ä¿kÕ?/ðÏfÞ_)?‰ÿEþ_`@ËÁŽóµ/gÊ EÍ€˜ö'Iÿ"úu[sp:Dªý«W¯VsçÎ'æ¤å¿ìn ^£ bdIKY-ÿò2^yå•ǾûÝïþòšøJÿE«ýYsÿ¶iÿy‚?OÄ#ð*#ÌkžÇø¶çâ=ñ–T­@„’TþŘá´oß¾qÏQ¾ÌûK¥?jˆø&ý#\1š½M1­¤å_L€2Ð;ôË_þò¡xàU}ö’­ü»¶ü›¤ý'Uý‹ÿe'ý/¤õ0 ­ h0 ÉmëZ`T¾À©ö‡IÿúwðàÁq¢LæúEüKÀߨÛäÉAò4áŠ!Ðìmʪe¥ü z,æâ–-[îyê©§ÞÕg/;Šÿ<ÑŸ—öo»€R„þ€»FÑB¹P€Ì×7䉿ŒHµ_ÿ„'NÈ:æã®O û“nÿ6ÂŒ€¿ò·ÙÉï«t«HÕ¿Ìï•Îý8£«þw¾ð _ÿC–âß4ÀeÖ¿Ëý!þZOÌ«ñYí²c—ëYùBeÆFY¢Jªýb"üň’ö'Ar("ü¨Öó}mSNËøŠTýËjùôwåÀí·ß~§Å<¦Ï^qÿE–ú³­þ+År€m*Ú½íúþýûÏ_Ûïr1Rµ”ùùF¦¨0“óaÒ¿œÖ¯E9sfœˆ“°¿yóæ{™ÿŸ6mÂC Û ó*ʧéîîþŸ¯|å+÷õ÷÷Ÿ½&þ‡-¾kÕßt©?“ªšèwóˆÀ€J ý¤*Ía·Ã:l쬞‹Ÿ]DÀ4ˆ"¦Ãñãǃª©l_’þen:DÚûׯ_´øGEœˆ¹Îfe„+†@YÛóJ>·e-ï>ýßýîw¿üÚ×¾ö¸þÞ„Ëü\3ê†âßµêïÒþ¯”ùr$þ`"X¡F® S™ñ—9i1vïÞ=nô›o¾Y­]»vœÐ—Ó²Ì_–HCœ7f›þ¾ÊçV>Ãr(ÝYprÓ¦Mß{å•W>QÃþêʼõßEü×-Ä’ð¯çüßBüt”è·¹oæy1Š<¹FR1 “þõsÄ´‚ºhÑ"µbÅŠñ;d×–ù³¼FŸÛòÒÓÓ³óßøÆ½‡–/ÌU•öçZýÏÿI˺¤þg#þÀÒ¨ëjd_‘iÄJ:¸l,àOf¦¥í_rBA—ö'c 2€pÅhæ6¥SE>³ 2Êêï½÷Þõ«_ýIdÞXŸ÷÷Qý7ÿEçÿÿ€ üäŒíPëÊzU k'Ož ø“. ü «¨Rá_·nÒ# ãî'¿Ì\ ^cò•Ï­t«4Ýapþç?ÿùüã¿­ìæým ños@ü€¥PÏØ9NÚ ÑK.ò¤_Fª¾<®Ìû‡ª¯¯O8p`L°‰È—¤ÿ¨Ð“þÅo‡8/g›¼¯é÷oÔœˆþž|òï|ç¾]»vU£Kü åˆtWÀVü›eŠ h{3Àdy¬`‡û´¦è†¥ šºïãñ¤Aºô:æc×'…ýIÒ¿ˆÿø’„TëyئÜNæü¥ê߈9ÿp³Û·oßvûí·?©¿3¯‰ÿá Ñ_¤ú_EñoúZNÔ›\n³ãìt;v¬¯è“ôiˆˆêíí›ñ#àÈ‘#c×'…ý…ËüÉ1ÂC ‘Û ?³ þÒaÐ÷ÄO<ôôÓO¿§&¦ü—mTEüÓú€Q±#ß!Ñz…;$èLxQ$%]’þEdÉA„¿˜¡¸[µj•š?þ¸ûL™2%p¼F×m‰ð—VÿF AwÃüî[ßúÖC:å_¾»Ñ–ÿ<Ño:P/Yü+ñoò?ñ†;ÁÁÎ÷ÁƒÏksYWÏSóÄ(J4éÿšÈ[öOÚú7lØ fΜ9î>Òuà+éCCÀ”Pø‡]*BÚü_xá…-÷Ýwß+jbП/ â?oÉ¿¬ÓˆÀ€¶íµlcì´4ýZH/* L ‰4úRýÏïÛ·/0ø"þã#þ7}útÄy ÛÄôH¾¯ÿ‹/6\ø zTg×]wÝõ ú;¦®ÏúçsŸ@⿎ø ;£Àµý?¼lD'í2$¬Ïe%i–¤U¡ÈÚ»w¯Î'…ý ñ¤„+¯±¬mÊgTV¢C£[ým®]xå•Wž¸çž{^T£³þWcÂßVô»Tüó?â0x  ‰Æ€ÍõbH¯ý§Š)ˆ.ÉgbHÀ_Ø=VþCñ¿`ÁµråÊq¢,\æ/n \1|oSªü¡ðo===;¿ÿýï?¼sçÎpy¿°êŸ$ü}ˆ h p¯eœ·yŒ´ç¤®‘³gÏö.Y²¤Ð“!ojH+µˆÿ°¢mû¡')ÿ .wŸp™?“¤  WÄÈ’Ž”p Êf ¿çž{î¹-=ôЯUú¬£ €2’þÿ€P‚`rŸºÞ½E7nšMú‹ië_·nš5kÖ¸ûHÅßÇ*¼Æ$ĈSªYmþÑ—¥¿ ïÜyç›uf<áßFø›Š|ÑøÀGqžwyÖŽ®M—@=çò`gþäÉ“… PyèNÕ××7Nü‡3ÿÒ= añ`¿p™?„«Ÿmbz\¿½˜Vò¹õ±ŠEQô ‡Ÿxâ‰ÍÛ¶mû0"ü‡s¸m ¿IÈŸ–ÿF‰ èH3!ËÈ[g»®×?^¶púôéÀˆ °={ö—ÝtÓMAå?:Û/N’ÿåà0ˆ!€é‘´M™í—Ϫš\í¥ý~ûÛßn½ûÕFÄ5ò7¢®Ïúç ÿ"@-ÿÿ€#ú}<¦0òÞ{ï+ú`"¦¤¢*ûøåѤÿ¸øO û¤# úX´ïó‹~6¥Ò_dÉJßoÃîÝ»}ß}÷=©ÛþO^þYíþ¶­ÿ¶•~Ä?´€!4ûŸ8nçüèÑ£´0:§÷¬"OJVT´KZooï¸kcÒöîܹ@øÇÃþD JËZÒ?††€éc†-þýú;±û±Ç{\/ï·W.í7¤òÛïMŽm*ü¾…?â0šl ˜îLè ýÉ¢€ˆ­0¬ON‹ø—–ë¨(ñáµqãÆ aaÒ¿‹džC \޲b•þ1´éuâå—_þÙµtÿPø%m[ÀÆ ð=ë_OúˆÀ((ê³.7 L\ pppð„žÅ_[Ôôc),8AÈ8p ¸Í§?ýé a²€\æK`R­ïŒmV´½zuþ7ß|sÛý÷ßÿ’>-³0òD‡-…¸Kåßg»ÿH‚¸Gü`@ „¬ÓÁκE7$"Lýu¢ùѦƒƒ‘€[n¹eB{¿Œ Ä Ä2¯1 ù…íýUòËø>\x÷Ýwuï½÷þ·þ^œWésþ¶@‘ná?¢²ÛüóÚýÿ€`¸³[³¸ír€ñó#ýýý…—1&ËüÅééé „¢,óˆÑ¤ÿv®îŸ+ü¡ðo£jèçxyÇŽ/?øàƒÏèÏ~¿]Ö/«â_dîßEø×3žG^û¿Bü`@µÌ“ ÀèmGtRÿÑ2žŒ,ÿ'þeË–M¸NªþÒú߉âC û>¡à—C4G¢Êèçyù£>úÍÃ?üs½ÊEV²–à²ìŸË±ëÌ¿Bü`€?ñn3×orÿzÎŽu°ó¯—$;üÅ/~Ñë‹‘°?ÿóæÍ› Eüç%ýw²!ÐI¦G(øE臢¿•Šÿ®]»^“Šww·´À\Éþ.-ÿ>Ë^âñ¢Ýd‡8É$ÈzœzÎñÈ[o½Õ£[­‡uÿ$//J‹:ií—Tÿ(’ô/â_Ž[]¸v‚8/iéV÷[¥ÂGú{ÿý÷_Öÿ_é¥4¥Õ? ÷6×yíøeE—øËû‚ø @è+»j~Öý]+k§]B¯è¥{õ2~K}¼Xñö~¹lÚ´iÞ…%†@u· üpŽ¿UÅ~ý]9µ}ûv™ñ1îþyB»ìê¿mÂxRvÕÄ?4ÁPˆŸ¶ÍZ•µ°9êËH”ÚdNKû¿J9–n90Zï5Êu¡ÐoõÊ~§N:ðÚk¯=·yóæwdÞ_%/ç—gý÷Õæï3èñ¼Ð` é¼R9gÏž=ºpá†<ñPFç½C 4Ĉš­*–ÛÉ€íˆÈ~Tø·#2£—°ÜñÜsÏýê™gžÙ¥®Ï÷Û¶ùûªþþ.Ay¢¿n(öÿ€à(ô]#íXúÂÙ³~ýúæ½H-&C™Dh„Æ€kçíû¹¢wÜ!ùíVÑÏBÏ÷ŸýàƒÞxì±Ç^Ø·oßiu=ÑßDøÿ>Ûümgýó*þõŒÿ)ˆÀ(Yô'…¦d™#ÇŽ;\å7$4Ò„h܈ŸO3 :ň,¡¸~–ùÒ)ß¹ãÇòöÛo¿¶eË–·õ*#¢ÄBLûÿ6Uÿ,Ñ?¢Ò«ü6Iÿˆ ¨°q`ÒÊ;òûßÿþàßüÍß´ì 7¯¡ØC“ ¼,É(ð1†àÓE{ô¾Q1}/¢—Ç·£è\Šþ;w¾ùôÓO¿ª{Õøj¿mÝEü1Êj÷/:ïø Ÿ&èm—T9;õ#ï¾ûî Ô~nÊ”)³ÚöÍMζÄM„Ð3.àã糄xÒuI‚Š¡?ç—:ôþo~ó›ßþô§?Ý¡Ï_V«ýyÉø6ÂßUü—!úm+þˆ (Qôçí0ç‰ý´}¥ÒÛE< ë•Íž=û3üIÌMh ´Ù3tôèÑwìØ±ýÉ'Ÿ|[g^œSÉ-þ#*»MÞ¶ÝÞG€k«¿KË?â(ô]/¯ À¤â7Ü×××íô;yòä]»v½«[üßÜ¿Ÿº¾|ŸI ŸRvKè𹜟ÉkQÊß¼?â0J6’L•°³¯2vòÇ:tUôàÚµky·¡¥9sæÌ‘?üðí­[·þV‹ÿ“1ÑïRéw(Òà³Íßµåñ€-`Ô Ì€DsðàÁ}_øÂxG¡¥Ð«\Õ•~]àß¿ëå—_ÞþÖ[oIý¦•ñ"¡6¢ÞEð»üùhù75ÿ€PPØ›ÜÖt9À¤þ!жçoÿöo}*xçÊ•+ƒ:ÈïCÜÿþ¶mÛ~¯—ð‹Ïô+·Yx_¿¨ø÷]ñ7ýÌû`@…Òù´Ûe-˜$ ‚´½{÷ž9pàÀÖ… ~~ÆŒKùS@•èïïïÙ·oߺÂÿ»çŸ~¯TþÕø*4½?-Å_)3ÿ.+؈}[ ë{®”yË?âÀspÙO¨%œŽÇOG] ÇñÓáaRÆé)ú0]¦ýÑýÑ¢¿ø‹¿ø_«V­ºuñâÅŸ™5kÖ2ös ‘èU)N÷ôôìÖÆÔîW_}õÃkóü"ö‡Trrž.sæßÕ ðQé/º´ŸMË?â<ì+äiâ?ÏÈ:Ä €ð0ùÚaJx¼qãÆyÚ¸uÍš5-Z´nΜ9ë¦L™rNð,ø?ÁÿÚk¯íÒA~'Ôõ |¹>ÑÛˆ¶ý"€RÅæüÿЂ€‹ Ö 7¢¦@`Lš4iòŸüÉŸ¬ÐW®\¹^ ¬ÕK®Ð—OáO &œ;wîdooï¾Ý»wüæ›oîÚ±c‡Tø³æøGÄk#«þEýˆr7lÌ SÀô´­¨Gü?êŽ@šøW)Âßt Ið§™&ÝÁñôéÓ§Þzë­‹n¹å–•ºS`Í’%KVkS`‰Î˜Ç>RgséÒ¥³z™ÉÃÇŽëÖiýµàÿD¨üà>“5ëMEQ#`¤„ëÚ¥êø~Ô €¸ðWÊ< ­ –#þ³.7=LJ0&-[¶lÖÿñ‹)°\›Ëu·Àʹsç.×ÝSù8´W¯^½¨ûŽëê~·nçßóë_ÿz÷Ç|ZoãÏZžOÛfVþ}WöËø3­ô#þ0 û Íp1’: L·˜:?`òm·Ý¶pÆ K´A°hÁ‚‹u·À¢›nºi¾î˜ÛÕÕ5‰Jký¾¾¾cZìíîî>¢çö{ôÒ|Q±Îï'µñ›V­‹VþËÿ+Cø+UnÀ_^Ë¿©¨Gø?ê¼฿55 ÐåÙ09d ÿ$SB©ô.…IÑÓz”`òg?ûÙ…ŸúÔ§ks`ñ¼yóêÐÁ…7ß|óÂo¼qN­Vëâ#Ô0êÒ¾¯9¥…þñ'NÕKEö|ðÁGtU¿/"î³Bú\ÛÔ]M€FUÿË ósyýižª?´˜eä‰_&@-ÃÈ2j†Ï]ÅkÂvµ0Esuðà<=N0_3OwÌÕËΙ9sæ\}ýlV'°C üs:¿O‡òÖ"ÿÔ™3gNëYý“‡:©ƒùNœ?þJLÜǯ2û6‚?ï2Û–ÿ2 2™3þˆ ¨¨þJÙ˜„º˜6Õÿ,‘ŸõÚ”q>}nºS`êÚµkgëî9º{àfmÌÑÁMú0[Ü4mÚ´õaFxÜŽûoõz}äòåËç/^¼xîÂ… ú õý¹]ÉÐÇguË~ÿÉ“'t»þÉK1Ak²ÜžMå9í6e¶ý—!ø}Ïñûžñ/"üÿЄýÛ¥Ò+ðY]6¿Ö` í}°¹oÚèAü¹t-_¾|ÆâÅ‹gép™zÔ`æ mÜ(Çzašî(Ð>Á´ôaºœrg}<]ç?uêÔ ó@Ÿl»âÈÈÈÐðððUîz¶^¹ºråÊ%9?44tE_?,— ZØ_ЇKZÜ_Ї‹ºBA ûA}¸¨Åü NÛ¿ Ûôôã…óöiËÒůËã&"ÓÆð-üóD³Lå úmÿTý0 ÷|Œ˜ŒÔ,¿Mð_# •s¾fñ~*e6¦e@˜>7a•&ØŠˆá<Áž'] —ª¿oáo+ø}.Âßæ}**üÿ˜Ì[ž¨§ˆÈº¸´XÑŠ°º&æ“.Éëu@Y&f@^³¼ée¶@ÝñzSÑ^/p_¡oz™ëò~6F@Ù]J•/üM €¬¿±Ïª?âš ú]vÎk†"k$"ú£Â¿+fäµÜ§™J•×P†x7yÿk ü<¹]Q ‘-ÿ¦bßFø›ˆvSÀÅ`0y]yïKÞ{n*ü}|¦d D ‚<³ žbDüt\øçUþãâ¾®Šwø6Ê0eY‹½Ä¿Röíÿʳ€¯;nS)¿mþuÇ¿£‹ Gü`@ ‚Þõvq# K¤¦ µ$#ÀVø›´þ»Œ¸ÌñÛš.—7Ò@üþ®f€* þ} ÓÓ¶ŸÄ?TØ0íH3ÒF¢â?Ɉ›¶þgêùÊÈúðeøií,þm¸ïËMžË\áosÂZØÈúy"o$Cè+e>ïŸ×úï»ÀFø72Ô¯Ÿ…f &€Oño"ü}^f*þ]…¿‰ `rñ€-$ìMDZ€©@ …~žÕ}ë¿I€‹!`"ümDU‚Ë^%À§à·ý6†@Q# ¨¸/bV ü0¼™QC O”¦ ˆ¨ÿi§£&D—ÊoûwIÿ/+ÀÖ pû¾Vr("ú}[ Y9EM"‚ß·ðÏ3ÿÐfÂÞä>iݦąžàOö>’ÿ›è2àb ¸~>l¯·5š=ÿo+þ}˜Íüõï?Â:Ì0YöÏÖˆš*CüÛ´ügµý»Îÿ·b@Úýê?®F€oÀÖ pÿ>M×ÓE¿4Âñ€ú6÷I:V–F@TôÇ/«e¶©ÿšÿo‡,_³ÿeÿ""¸è(€oqï#³Àæýò%ümÅ<ÂZÐH ÿËp1âÂ_ˆSáßìù3 OÔךð(jTÕ(£+ ˆÐoT•¿QÂñ€-n˜ÞÞdi@SÀ5ð¯ˆè/*þ›5Pó,ÊZy ¨ PÖe¦·±}\…>íþ€ÈO¼mÖ(@R7@Ýâñ]fý« þ}Ž˜ ÿšçÏ‚/# Q«5\Í€¢×¹›ˆ}„?@‡Pã-€’ö%L*Üysö&¢ÝµÒßnâ¿VàoÕ(3 Ñ«Ø ã²M²Ä¾éue Ä?@ @4“¬PÀ¢i—™þ¹ši×ÿ­0ÿ_D(–5àKü—-â)ö]–ïCø´t@™û¦Ø$qߤror}Þã› ýªÿÕ<üÝ|Š8á˜'}UZükï“Ëþ\2lÅhÌß"Þå9æ]Wô2„??ÒM7\żë\E~™‚ßwտȾ ÏxWñêÛ(Ã4pݶËù¬÷áPIÀD|û¾Ì‡ø/Û(Ã(_+øÌ>M_"ßå5ç½ÇÀ€¦ïcØš®b¾UÅ~­„÷·UÄ¿O1ìºDž¯¥õšQÕ/Kô#ü0¼‹T—yû¢íúÍšã/k‰¿V0|‰ÛzÏûôýÀ€Jìkíða´‹ð¯Ú>^³L_b¼¬ ~+ˆ~„?@ÃLß"݇ /Kà·CÅ¿,# ¨`n¤aàCð¹áÐV&€/ñîSð·’è÷¹XVˆ\Yf@3/s¹ÑÐÖûEŒ€F {ߢ¾Ö€÷¯ÑÔ=ÞÖE8—aøüUý~ˆ*k”eØÞ¶ À÷mÊØô%}ˆ[qݬË} ~„?`F@ ——u]Y"¿Êûv¾Åm½×UeVÑÐû!µ ]׈ë}ì³5k_¯^òýê%^_¥–ýzþ&€д}‘Zů÷y›2öÛÊØÿkteºìñŸè €’€fˆõZ“_o£³ aY/éöõÞ¦ìׂè€BLâ-€6lï×l!_á_e¡Y¦x®JžÞBà‡ ’û'e òFŠ÷ZßÛVµõŠÝ¾LqŽè `?¥…{­bï[Õ…j#x½¯ÑÀþJ ‰ôZßv3êM|~À¨ð~K­MŸS;RoÓÇAô@ö_j-ô\[y®ÕÄs½MÞ `_¦ÉÛ`¬"¹ÞF¯€`¿¦Mö£Úi®S„7‚0Út‡ý¬æQç9ðÃìïðÜø~à€} ž7±üø°Obø±`_ ûü¨°}~¸ØÇD>?Nì‡â€öÛõÀ øß7D xàÿ¦'¶¸»OÌoIEND®B`‚qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/dmg.iconset/icon_16x16.png0000644000175100001770000000074714616416776027616 0ustar runnerdocker‰PNG  IHDR(-SêPLTEÿÿÿ¿¿¿®®®¶¶¶DÌUcÅn³³³µµµ´´´ºººµµµºÁ»¹¹¹ÅÅŹ¹¹AÍRAÍRtÇ~ÊÊÊÁÁÁÄÄÄAÍRBÍSLÊ\NÊ]OÑ_PÊ_PÑ`\Ôj]ÔlcÈocÖqdÖrkØx{܇|ÜˆŠÆ‘à˜¥Ê©©Ì®´Àµ½É¿ÀÓÃÆÆÆÇÇÇÈÈÈÊÊÊÌÌÌÌÓÌÍÍÍÎÏÎÏÏÏÏòÔÓó×ÕÕÕÕôØÖÖÖÖ×ÖררõÛØõÜÚÚÚÛöÞÜÜÜÜÝÜÜößÝÝÝÝöàßßßß÷âà÷ãáááâââãããèèèìúîÿÿÿ£\­tRNS,£¶O´ªýâ 3é xE2• @H~¹©_\ŒíÀ±ƒbÄöñ1×í·ü¥­²m´•ßÞ^ó‘ïÁV ÀQÿX [úq;¾>×k«¿à>¹+˜³Ë°éÐV™vkä+¸}A  õü"ÆÕÿ±â••zíW¼.öÝÓu¾¹º‹¯ þ‚{)€Ôò™ŠÚC /Œ BɸV¸{Žîõ|­klHH,À+îXx?€ZÂ7öŠÃÇ‹6¿>ŸÔëÅç!²ïm—¿èh¸°%€ZÎÛ³ØóÜscßÀ¹,£wLò‘<@ ¤ŽHËy ®­Ü¿&eÍ,æ­>°ÎÓuï“ÁÎx—{ÒŸ @Êøé†>žÞ—V¾“ÒkmÕû ¿öDcë¡íÖlD›†‡;tÂëZÚŽ@HþöB©îeGςׂ!Ô)øAb‚¢ €çè?‚x^Ð}Cï@§/7Ëš€t€ûy‚@ðžW÷‚cÇù&z}×¢‡=Ç0"9îw`0+€à‰¶ ÷ôÐa¶¿Ÿîã·ý«<Ýú‚.Í—´¦P¼qþ^oþ?æóûé>pˆ Û66ðpÏN¡øxÐç>µÿ.{ÖW÷Òî·ÿyº%ìdüŽ&‹ÿK DÏf‹[yî­OöÀÍpDK­—8ÀAÙµˆLB1  j¢qÇ –Ésüüx?8k0>´ß‘ʳ(”ðzÚrýx?ßɓм™ €ßK‰)>ýÃÀ½åÿ{ùò~úÈ3 ½§Yø¼›àÓ? ÎÔóÙíÏŽÆ®žî§ÿ–a€£ÇžPì÷yŸþa¼–Ðúµð-Â^€±á© æÄt92ŒàÓ?Œ×`¿±DU_¢R<”V€)¼^€´™ŸÏ0ôLA¦P2J;ö´«úùaórz1Úo)€Œô{Áò?WùúaÛvx‡§ Z<üm  0Ðnù+iÑtr1Ц”Å5(€À¦áxÁÜ= }ý°aDYªªé(€À€×QZ3vÍöõÆãÀ5€@HxkM—”æÌýÖÞÜbÉc @æÀ»k»yzX'ü>Å×Û¬Ýó<ÝW<æêQ(Ô¿{ÁHŸ6ÙœúÇLO÷ë!¦ @  ëúÏ==¬C·ñõÃöíΩžî«Õ²ö @æÀ‡ëzzzXGlçë‡ 1 î(€0|omwOëØ“}ý°Mßõ³§ûºoÉã @æ€×Ã@±ÅöóÃ6GÖ)¤j°&€踺³§‡õÇ]3}ý°-Ú»”…@ @8¾ºê=O+Òl~~Ø~•ó ½ þ‚û(€ÌLõñ‚{—øúaózZð¿ç7£P2GZ/{ÎÓÊR[??l^§Åã¨p  0€±^^€f??l;ÿõ=a2çP2J0IÖ vÞéë‡íбèÇœm=´^K#À‰uæÞéy"­_‡UÂ÷6äd% øËàß4Rœèõ\ÀÛ´H«£Îâ•Ù ¤DL£Ï­Þû”fÍšyê©§ŠPâ<<ãþ_žH«±à~ÿž<p3üü’…[µjU~РAÕ×'b¸G: Òqõ‡žîç›­#(Á'ÃÇ{’<ãå—_®;|øðu¯¿þz-ùu € ‡mëéE'¡ïç‹Mý<ÝϧûP‚!N«þ)j•/*ù÷.]º<=räȃÙÙÙ_˯‹SB¾ Ú:Ê—÷3fÇ·žîç«Þ¥ø_B­úÅÊ—/_á‹/¾è;jÔ(!`ßí·ß~™üþé€|Ùã`Pœ)èÇûÁ ?©šDH˜8­úy•a#À÷÷FÕþæ›oÃøÁ®]»v’ß/-yšdA €kÔ¼µ§6^iÄ“HMî?v ê{9.ÿ*@ @B ¤¯/YFúùOJ¯müC† Y_ªT©ÊòßÎTPˆÂhpÔ—4\ØÒW÷âõ\ÀM‡¶Æí¼âƹ(‘­úùíUÿÊ+¯¬&·üCl÷پ}û'Õg•RP˜‚ËþüÍÓC‹sÒaÌùÌÝsãv Gd‘TªúÒHÜVý‚jÕÿÇsÏ=÷àСC·šÆß·oß¹òß/•,«àtîÂpÔö‰žÚÁ> bT™·€æÈ”Vá Ö €\aV}¼¦” ô]Ô£G^ÒØ™Æ/y¼iӦȟ»HòõYt5ÈoMAk¬÷to®î’ÒF$ ÑÂ(¡Wý³{ì±»daÏ÷سgÏïäÏ]!yv ’%”»À,@(6Yü_Ͼ+JoƒìÿÇëD X[‘ã•…ä×@§áG^¿T™2e*uëÖí3™Ú;êfü#FŒ8R§Næò竪Ï9 ©Aåÿ³0Ñ çŸoüÚ×ÿ™¼/Øyø_”V?¹üåL€"Ê(ó*ƒÏm¬ú…•ñ–‘¾~K¹ê¯v3|›;w%¾¦äÅ’çjÀ‚ªPˆЍ…÷‚ rÅ»anÔg2ÖØà± ¾§-Ù÷«§ëè´æãL€Ê0ó(!°·û0Ú³n»í¶k¾üòË1á ”)À•+W¾[¾îrÉóá.¨ ÀS5¡¡„"*á¼Ñ÷T^û‹+ßò|íñªŒu$y¼z|.ÔÊ\T{>e Õ÷JžuÖY|ðÁä–~$ÆvìØq€|íµ’U$Ë!E¨EÿOQ» @(Þ2ïnqÀc=vx}ªf¬Ø¿ÚÓuã~ã}Ç©Ié8f-P[­Î¶qžª¶úET°®¬Ìß?Év_çàÁƒ÷”.]º‘ þUTÁ?sõç<€HøÝÎižWÒÛǧ䚳7ñ|͉8à¤û†Þž®Õˆ÷Ä1éC¸VEçK+-®ì£ÌÃ?\ÿ믿žáÛ|á…zË÷¸NåþË©ê?sõ§D—<öØøD>üɼÞwdú†ã.{6î×ôÌo¯z¾hrsŠvRI€ëµrôå6lX÷óÏ?ê’ÓcÆŒ±bõßU¬X±†ò½®”¼0ÄꟋQŽê5`¯b½6 Hʸ0´#Çbüó÷.NÈuÝáq΢õ7Z É#KŸ±Î+Ä“vË_¯ÈxæàH7ˆ-ZŸ³· ñmg¦!7I¢;ï’ºuëÞòÙgŸ —F|ÔÍðçÌ™#f̘rõ—.ÃJX°ú—×jÿ «? Rv[ÿ¥ˆXÉÐd”ˆë»sáƒòøïŸb¾F”߯’Ç¿÷H¨ÑE5”½úýe€ï›áÏ›7OlÙ²ELŸ>¹}ëûÓ¦M;i'0pàÀß‹-zGˆÕß,2¢DBż–³ê@M!épÛüæ¾}¦þ3«…x÷Ýw' 6ì@(Ãß¾}»Ø¶m›˜2eŠÁ@KæÎ+–-[vÒkÚµk×SÚÕ šïÿ÷T®þi#± qŸ¸»JôÙ<ÈÚÖF:LÓ}QÓkS«Ç?–í¾H¢v'6Û¯x=ép÷¢G|÷5þéAñηňQ#·ðãÆ ,;vì»wï›6mãÇ2 hýû/¿ü"vîÜ)¦NzÂëdßÿŽSO=5ÒÕŸçDŸZk$Ví_›°‡õO¹Ã@Åܼ=‹¬N¼)2û0s÷ËuÀ÷÷Ý›°ÏWÂ(ŒòÚà~*%¾gÆŇ»‰‘£F:>Œ|Ñ¢Eâ÷ß· \³fÝ}¢W¯^bìØ±bÕªU–ñCÌ×·mÛ¶»æûûbõO+ûµCÜV]¿[ÿdgï]T8 P˜Êç¥îÏwŠ6SŸ½Æõq ÚMœ8Q,]ºTüñÇ>øë¯¿ 9¿OÈÞ~1a±~ýzËøAìô÷0`À¶ üG­þfÞ?¥§ ¥•Xñ†>icüëlŒË៑òÖyM’º €Û‘Šg¤áÌûÅKS:ŠAc»þwß}'~ûí7±k×® _Ã÷—ѧOË÷ߺuë_ÆDÃðý?S«ÿ%!Vÿ\€÷Øû Hm¦ÂG~ö·×’¶‹Jf9v9ÄÃÓžOü4dš¾ûêÕ«O0z›ØüðÃâÃ?ýúõ³R~ˆØÆ ÐßOw.\øcõ·;þR~Ö`Z âßîœXã_p“Õß߇ëz&EPè†+øöoL~W =ÄÕèÑÿùçŸ-ßÝÉðADûGÌÒyV¤«½nüàO?ýtÂ{wèСw‘ÿ\€üñûÊ(~а`ïñŸ÷ú¢ÂrïÑ} ½×î ªÂĿÔ×Dß±Ù!W{øî‹/¶ŒÛÍðíH¿ôã-ãGÐ1ÓðA¸ ½æÿŒ3Îhä×Õ?­Àæë«?»ì „ñ#íè§â˜ú î³…¼` ‡¯6}·k½mV3ñÌ/‹/Ƕ~»“ïDDúè{ÿý÷­×®\¹ÒÑøAˆ‰þ9ò¤Ÿ~~^ý3B¬‡cAó”ºD‹w¼%Žåôâ÷×~"«gzJw9~ÄJ•¢q 5(Æ9芌I fÝ+žùþeÑsü—®é;=‡m{¨m¾É%K–Xþ¾œ×o½^ô;qÒ¤I}žÜ)ì“mÂw9äý}³úgŒèiÂi»fù6U¸çÈ^kÕõûï±ñ¢‡¬©·×t=7öµjûAT=bƒ­=êÿŸ’EQ(`Šç®zOýð‚è1þó°Fíø?þh­Úf/gΜ)Þ~ûm!‡yŠÉ“'[¥¾¡Œß þÉ~ÿaÒ†nôóêŸq`óÞ%mÄðmã¬ÑZ~C¼NüMÞ0»¡¸wzkñêwo‹>ã²#j·…ÁbõçÛ»Eú±Ú¿ñÆBN÷±ïÊøAôh³þWªTé^iCW9TýùfõÏXÐ…(FÁd›å®ô<?Þx*Ígí…ííø¹‰h5õñþ¤®bpˆè}¬[|“H類_žÚƒYý®‘~“›7o>!ø'gýM–öSG û,ï×Õ?ãÀäMó‹VËÚ[i0´«~ÿÇ ñ‹œz³ãðNqèØáµúð1âãµÐòŠí|,íµ¸–ŒùÝϾCÜõÓCâÙï_‰hk¯WéÍž=ÛÊÛGÐ ElñQ؃•_Öí[;ˆp†osþüù'Ìù¿þúëÛHû¹Z²†‡ø¡æŸÇ1dèb«/Su¡NÆAŽ;ôŽc„ܼùç»Ä#²0çÉÅ7cE/m§–:é§ŒšèËÕŸ`>´´8vüXL€’Õ”ÈJ<ÔÝ>¾WÄ«<¶ö³fÍË—/·zíM?Ü€XEîÃ;?ÝÚY ~€Ï2Jô¶ßÞ½{/—vs‹š"TAôá4ë)²mtL®@<KŠ‹4ûn«æ=õƒÇDÀC=¢èX7lØ`ãl:b¬€×¡ÙG¦ê„<½Ç2bTñ¹}®› àZõûxðÁßQ“„/V3KŠøÊø)IšVK‡ªýP²PhÖ=¢Ý/‰" à!bÄ =äÏa|Xé‘nà €›DbüxLíyíµ×ħŸ~jí4ìÏÖ?פ“àµö=õïßsîܹëi}”Vçúvõ§$‰WwŽi0zÇ$ÿ­ô?ßm¥êB Ñ0ëîQ\ƒ>zlµaô¶áÛ´ÀMbuðy¨é‡ñ#âè½þ™&C ²zêïé§ŸþT¯¬ŽùÖOÊ›ìYŸq®œËäâ¶Ë_Jýæ9 åöþIñÑÄý·ß~kùÙˆª#W£±i €.áÀM"l×1¹Æ°ã nN 0@kúÙ-›~h§üê«>?ÿ(I&Jb?Ópºs§,zÿâ”7Dÿ1ß„Ý򣄮Ü]|LF"zן<äóÐyçw´—ªå÷l¿µüRüRü"‹ˆ6ÚÓtà¦I8Š«éŒGÂúöðéÃêŠíµM[t'n"K0ÿEÌAÚi¥ùtÄ5éŸïtáßÓG~É‚‰ªì×lúñýêOØ©ÀÀ¬Ýó:»Û÷‘Y˜|‹/0ú+)ÚcÁpà&ѸÑñ30xäø»wïnî %DÑ‚1ïÿxÍš5[©²_ß¶üR|F¯Çq£YiÂïSâ~:pÙwZt†»ÌÂÿþûïÅÂ… ­-> ߦ-n"à5h Þ}o½õ–5È©FóóM†ó!,FÙïMFÙ¯/›~(>â]‹ŽêXsü,š$â$Þ–ÓÙcû;>V{¤í`ø¨—·©¸‰@¢Ü\Ç!C¬`ê€ÿ¯¾› E*fÙoãÆ_RÙ/ÀGDÇ`8ì:²Û:¸4Ò“‰¢’ûæä÷\W|luaø6ÀM¢q¼MÀÐYŒcU÷¡¥ƪ_‡y-^‚hÿŽd»ðj—²__6ýP|7¹øN±öÀGÃßrh›øHž$|K‚ŽÝ®'+÷¾ßÛÑÇÇ¡HáÙthܯÁÀhܬô²ßÚöã>æsºŽXï©þ´nݺsÐÊ~)>#NûÕ¹y¨ý¯“ÀÁ Èé÷×ÏuP&ôpà&‰rÜj@øøÈñ¿÷Þ{Vá®M¿“^‰ú9 ¼=he¿ròÎÅ¢½KE‡Þù‡É¹ýÆ8Éø%G:ÆoÓI¢q¼#uðïØ’£™ƒ;a úu8]WA€{¡ÿ¾^|ñÅ>Ò>®“¬¤²_ €O1IJ Âì»ÏÀC.8Nâ ŒGM~«=òûHóáÜ)‚ ·üÊ!ûå´ßÆZÙïÙjõLêÃI>˜ôÑIÆÓp°òÛà&‰r¼Ôàsá‹£²C;‘ž4¯Å¤WAÀuã÷£ÿÎäçŽV³þWöKÈP¶ýáy×m$``Ï—Å'“ñœ-¨¯þõêÕ{F5ý8•ývõw€JjÑzº¬øÓ‡y`V5øµ‘ @*‚¨éGzi¾Z_ë׿vñôBèÂ)w ó²rNú©žYÿñ€ò€àq˜9¿.n"ªšló1´Ónè»â&RшA4‚€¯õc¾Àúõëw±úªì7(¬RÈq^Ec fðO¯÷Gä+i¤ì` þ?júáëãx.Ì´cúõ™L„  2R7~9Pd‰Öò{¾ZýÏH—Õ_€Üê† «Ê&(Ýe4¨àc½ô‡þ, Ê7HF0Ðü"ý]ºtù«¡G¿6“‰ûÞð<꾃 °ú_£­þ%ÓiõÏÒ.Þ€BÊ¿A{c%Uô€èç$ÑÑT²™d Å{É”ò>I”¦¶”|X²M‡&™Í>‘@²kðØ ¸«¿}hˆÉd ‚Þî«EþÓzõ7 ¯jh(ªÎUÊw¹ò0÷¼® ˆàs+™þKÇPý[ò6ÉúJ [ÊŠ¹ úöõò7HF0Ð|®=ºë«¯¾²Î°¯Ñ¼Îd\$}تþjÕªõ˜æû;µüæúêïȯ¹g©XÀ…ªóé2Õ‰Fˆ«Ôî€L kª‡óÕ—ŽúôÛ*Uªô¶®æö?”Ä#€šþììlËøéGÔ]¿F“¡Ä ‚€ÿÖb£æÿ[µÐ9­þ-û4PP튫/«ÒU±²«Iã%ª!¥šÚ¡An’§Ó¾oæþ‘þs2¨TÔ`z&õ"Ò:!¸>“É3ð'ûý\|ñÅ÷kUç¤ó꯻z6ÀbÊ8K5?œ£Áæ¹dJXNÕj\ R䨯—†5T˜ÑDã&ñFê࿈ô£¤‘~¤Ú°í†{bÓIb„Pbâõ¨4¦ýd«•]óoæýÓjõwÚäÕD °‚Ó•WyÐJÉä³”jCµE¹œÚ•Õ–yôEzé¯nX‰vÜ‚ø>R{(ëE]?jì±ò›`2‚`Ôû£ÝxSáÂ…ïP.n¥tÌûG*y”ÚåWÛžBJ «b!25,¢xšòIK*¨˜'OžÚ²„vŸ~2¯›Ñ$«&¯9r¤µåG¤I0|7&SPxdIiѢś*Ø}©*†;3ªþ¢qt!È«nþµ3 SÃüš T‚p†zH/GT5Òf¤µœvɪ Àçàî7ÞxCôéÓÇJGbå×J )ø”G뿯O>ùd¶Ê®\‘ur¿Ú¯þá„ ·&dj™×ˆÓÀ¨Ø²eË'Ìü¿i(^Ü/ÁÀE‹Ye½0~9BÛ þá{ )©}Ї=èó’K.yHeUªd<í'íW7Èå dê¨ïÊ hPI¯ÞÓjlqÝ ‘5ø\¹šþUÓ¿müNô*¡Ä ” @ŒÌ­Û¶m{¨;í¨#¾S!djø7‡¢-¸•å1Õýõ‡m´¦1$²&ÄÀŒê–×bEú‘ãÇu˜L• à=Œr_*²PT]¥2*vÑO`'ýé-ĺ`‹Š²íKemŠYè´&"ˆïaÖ V}¤ú0º )H€M'!H¶ }þÖÖ¿jÕª˜ów­ ü—îE?Dú@A%Ø®V“%µ ôÁŸºDãD ÄÏIC²ü}Dú‘ï7߉ÉE™[ÿÇ[ÿ›T1UE—ÀWÂw`Wl"E…ùt—Ëö*ûÁWh¯` ÞÇp¿öÚkV¤Fãw¢W1ˆ‡ àóÍ‚Ùì3++§â*UGaò‘±?"XPHmUá³^!ÄÞ¦×D"±a¸8”+?ŽãFÖ?nbLAÀÏ›C>dzr[éÒ¥ÑÕŠÓ}«[§À€ð¥S+W Y´_orò…ãåÀØÑ¿¹}(ôA==¢ÿ )©ÌÐ_ö ¹õÖ[Ñç_Gmý/P[»â?·`gN˜Þ$«kê]€(q %^ƒøÿ0(œË‡9ý(¦™={ö_ÆïÄd ‚nüf?øÌ3ÏôÎÊi«®¡Eý¹õ'+åK•*uƒþëà5h þ ?m¼ü±åf §îD?Œè=þ œ<4Mþ¾nÏÊéôCÁOyný‰  ÀI#ÜË–-{s$àÕ ÀÏÃÏG°í¼¨¤ÃÊoÓM‰A¢×dýdeâŠ"EŠÜ••“òC§Ÿ]ðè?h¨ û×ëE+‘º¤!Â`çĶ>¿.&S)ø Óøe9òŽŠ+>(W7fåTû!åg÷ùåÖŸªÀw­P½zõú¡À«ƒD¤Û~Œðš>}ºeüNL„ „'AÀkÌ&û\wÝu8Øùþ+”ßÀ)J¨íN?ný‰@ @~]d5ÛíúC@]¨Ê¸HjàCcZ/xØg ú¯ÓM R!x­™îÃl¿fÍšuRA?äû+;øýÜú€"¶œþùÿ2GG+º`ÃGY/ª QàAMðƒ 8?²">úh÷¬œ:ý0F ùþÒ.~?·þD àü’%KÖÑ~Là WïÖ*kGú?ûì31qâÄ¿ ߉¡Ä Y‚€Ÿw2þvíÚõV´øVUA?3ßO¿Ÿ´XA@Yp­nv)p4»üûàÁƒEÇŽ­C9±‹ÀÊoÒO‚€×a‡bæú_xá…Y9gYÔVû”qúÑï'°Or®5|øðƒ¶ å5\—œ.(šA¤+?Ò}pàóÛt‚X!”D"x³µ|ýõ×Ge圓€qéÕµˆ¿]ìàx0r¯) w»y`$»øÐÈí£º£º‘ãG´_“©¤"Í"eü£5ãG™/F{•ÍrŽø3èG^쓜¯–]y«tc@N<œÀð0½Ñ~øþ0,¿ý"fm¿íóËmÿ eü×+ãÇT_¤û00Å)âO¿ŸH Àüº²Òm9,Ô.Ó{`øèáGîÆ^~›nB*AÀû:ùûhîiݺuO?‘)pR3䲿}ªn0('ãGeêø1ºKž#h aü¦˜L• à¿Xõ¶ü2h¹·aƳr¢ý×fåTù™ÆÏt‘Ö€‡ýŸÒ G™cÁMãG°[}tòaZ/Ò…¶ñ;Ñ« „ƒhñ§@(Ó”Ëd 4ðÄ!©µCã§}€}ˆ+"Ü—Éy|Ù¡Š™«#¼ðïpL¦Zð5 ß,éÕ«û¤¿?8wîÜhìÁž8$µº ø9ÿ)4~"À‚üvÕ矾«[-â0únݺY<°¥†‘Ùt‚d ¾ër[ñUGß*Y×ÿ¼¼_ß…(ïÅ0O¤úÊfåDûiüDÆvT·U‘ƒŸH{0-ªVÆs•áÀˆ0üò6µ²6½ôÒKÛÉÕ¶ë³Ï>;HvýM…0H{ ‚mñ2rÔä÷ï߇tCVÊÓ§ËêׯÿŽôçÿ« ¾±ÚÞÿ[­ô0úÚjµGýþ¥ÊÇ¿À0üâj»j˜UŸÆOddÀ®,­bfå¤ËàG£Z¹s Èh Dáne”Í‹/þÈÕW_ý|½zõÞlҤɇ=ôP϶mÛfwèÐa¨ä0ƒCe>¾_«V­¾’u=7nܹN:ÿ«P¡¢õ-Ô{6QŸÑ@­ðÿR×p£ èÕR"£¯ª­öçi>~)ÃçªOP 7  Ú”P®ÚƒQ‰ò£k(1¸F ±®2Ê[”þ[k}µJƒ ]Ø@ý{}%*Øi ÿVõžu5c¿F}ö•Êà«©ëºH3úsÕj¦ hž¡mõ *‘s3|?‘±n€ ,¤‰rãç(㪨Œ­ŠZm«+C¼BåUÊ@k)c­­‚pש݃¯S¼V½¦–z«”Ø\¡>£ºÚÖWÑ ¾‚ÚÞŸ£ÄÊ6úbjµ/¢î¥@˜Ÿ†OP´X@>µZQ+hIe\ÿPÆVN ÂùÊ+)£¬¬ ôe¬UÕ*]]ãeŠú÷ª©Ÿ­ª^[E½×Eê½+ªÏ²WøsÔµœ¥üú†Ñ›«}^Ãð¹Ý'ˆ®€½( Œ Fuº2²ʧ>SàÙš0”UZN¹ç©Uº‚2`7VP?{žz]9õ^¶¡Ÿ­{)ÍàOW;•SÕJo}>Ãè¹âD®€-ön ¿2®ÂÊØŠ¨ÕötµC€1W†YRéß•HØBa³´Fýûgj^R½WqõÞghÆ^Ä0x}{o½ÛjOÃ'BpŠ¢-”RÔÅ¡ˆ2Ö¢J(l±p£ý3E #/¬¨{~ÃàVzÓèiøáAri•[„<šñéÂ`‹ƒ-4¡EýgókFžO{ÿ¼+¼nð4z‚H ä2ŒMStˆ–y æŽÐØiô‘D1'áÄÂͰÿ¡¡Óà "Â/AAAAàÿÉsÃ$tö3IEND®B`‚qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/dmg.iconset/icon_512x512.png0000644000175100001770000006455014616416776027762 0ustar runnerdocker‰PNG  IHDRôxÔúi/IDATxÚíx\å•þϨYÕ²Üe[²Ü ˜^B ”dI²v—ì&dÙH²d—ä¿!Mo”¥‡P–j:Û€PmÍ4î6î½K¶z™™ÿ÷^ëÚ£ñ­SîÜ{çýù¹dI£;ºÝ÷=ç;ç|"„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„Øá%àï›Bò€8/¿[B!yo (ü}BÉC3@ÁÈŸß!ׄŠ<E!~wþî !ü”?z#@×ï-’æ×BH>ˆÜá׆ÚPÂ)ü‘M!„„ÝXý?žO&€BìßU$÷ù „äSôo$ôq‡F ”&€7ÿð¿ÕÇ"³„æ¨ßéÛ¼0¼ùWü“E=ùã½G¤÷­ÓŒ_#„ FøN#~ýýXÂáÄ„Îðælñ˜¼Á/VG‰:ú%˜§€¯ BH€•øÇ{E¿[êèêý²A½ (âë'âoíG’>VØ+þ'?}Î¥£*.åå$„C™wì¬a½âßc`"IoïÁ¡04ÁÿˆPÔ+þå'Ï>ûçJüÀËI!¦ KÚ.ÆYO+À É™øG,Ä¿â¤Yg_YZ_ù}^NB±Õ@}‰4fbÌîÕñ0üð$¸â_pˆøÏ<ëʲѕ—ðrBˆ-Ò·F*fòu¡ÌÐSü«û±æ_¢‰ÿ“g]QÖPEñ'„Ô @¢ °[÷¼! ð·ø'¿_`ùïÿ'”ø©º˜—“BSØ{D¢|£VëxXDŸ xâ_d ÅÿÄ'ÎúYÙXŠ?!„¤‘ˆ'e"a‹¿UÚ_ÿÊg|ágåc«¾ÇËI!)gtOºïÆmŒ@ M @pÄ_7Å"ˆÿ¸þBÉLÀÌ„€àˆrä9ÅŸBÒÎ$€˜É}X$„üýRüùBHf3ÉÙV»û7 ñXü×Äÿ»¼œ„’QP`q?¥ šø§øBH† €‘à;Ý95äžPü !$ß3f& æžøWüûQü !$«˜Üjm&ü¬ žŠÅŸB²zŸ¶~»{; aäO!¼WÛ¡ÍÐøWü/§øBˆ'÷k«È?´u4BÉ÷ @(#|Š?!„{•ÿ4B!yñÓPü !„ØÐgh(þ„Âûx¥þi(þ„BòŠ?!„ð^N@(þ„BhÅŸB ÅŸâO!„€âOñ'„B@ñ§øB¡ øSü !„ÐPü !„Š?!„B@ñ'„Bh(þ„B ÅŸB¡ øB!4B!„€âO!„ÐPü !„Š?!„’§€âO!„€âOñ'„B@ñ§øB¡ øSü !„ÐPü)þ„BhB þâ@ü+(þ„BhÂ!þâ@üKzÅÿgB!4Á6ÉQ…øWRü !„Ð;ú7ÿÅŸB @xÅß*åŸøŠ?!„€™»ŠÿbŠ?!„|¢(ÄÑ¿•ø§ýg(ñGñÏGUËÀâ2¸x ö¶º¨¿T–KyA™”«·eý$)Ð>vñ¸´D[µwÛbÒm“Öh»z¿]šº÷JcO“ìîn”=ÝMÒÔ³—›BEñ7ûX²(½Ú†jõ£ø‡ûÅ)’1eõ2¾¬AêJGʨ~µ2²÷()(öä9tźeSçÙÒ¹M½Ý*;6˪öµ²¶}£ôÄ{øK"„Ðd8`ý&EþßãË!\ RÑüQUSeZåT™T>^‰fr ŒÆØ²ÑÚ‘HO<ªLÀYÞö©,jY&7/–]Ý{øK$„Фý›-Àô;ñɳ~Z>¦Šâ’šüS«—ãú¥EøÁyî…2¡|Œv|yðÙÚÇ%xoßGòöÞ÷哿¥Òïæ/™Bà"ú1®þ‡(Uâ _Á¥@­Ë¯Äþ¬Ÿ“ûc¼FPFô.?ä‹ÚѦj ÞÝ·@^Þ󺼿ïc‰ªŒ!„Л³È?1PÄ—@0©í7L‹”Ïxš–ê;å…eòùšSµ£Q¾Òø†<³óÙ¬²„’¯ bò~òÇŒ¦þò%,&–“ó‡þœQó)Œä篯Fu)üÓÐ/Ë?=O4/’Y;ž“ù{?”¸úG!ùžH³À¾‚Á‘•Sä»#¾!‡WNæÅ8ð¢ŽÈ±UGjÇâ–år÷–‡eaËR^BHÞ€D±7ÿ3ÁÕò¼PNè4/†0F7Mü½V4xǦ鲮cc^^‡¹ÇÌôô|g,8Ÿ/>Bã?ù}#3À @€è§ï|}ØßË7†-ç­{AFéØÃŽ”§U}À=[‘v5˜ˆdóáÒ ¡ðy&ÀÊŸq\ÿiòßõ?”¡%ƒy1Rµ_Su§ 8^®^÷g. dt¡°#ƒöõbÑ7úxrôáKÀ_ÂõoµÈ5ãIñÏÃK†Ê'—Žú¶6g€d'@3Ì4€àÿnìåZ•?ɬ@!0¡|¬üz͵j/‚}¼(ͨ[ W39{7F ±äL¿ûó¤?Qü³È•‡É_&_# ¥u¼½ñðBhü(úÉ_c– 9ä´'ÉŸ'^%CŠñbd™Zµ$p«2Zh©$™ºòBhülÌZir ¦ÚýrÌO<Û‰ˆ¶µñ5ã!ǪBK’›L„·B„Ì€™ 9àì§Ëÿ4\–·Óür Z,ÿ0ö š€ŒÜlx !4~þˆCѧÈ!'U+?ýC­…ŠäÊ”ÈoÇüT«¿ éÜ@ù&4AÍÐx̤òñò«1ÿ‘¿ÀC÷?2¬d/Fª7.€@d„‘nÁ®}w¥”ª4ñËï¤Fk¿,ް#µ(o%„ ˆ†€FÀCñÿr̵숿ÀŒ€Žºˆ"¥ — !–|»ö_Ø~æc¾:ä\9½æ^f @^fH–˜R1I.öU^ŸsYÝÅ2šn%„ÐAè)üƒjó+. ]ÅK´Uš£-¡ú™úU)p _´Ì<û¬’¬rQí×eT¿y¾Û»vʆŽÍ²¥s›lÖŽ­Úû±Ni‹¶Kg¼SºbÝ}ÿˆÔvÅe¥RVXª8/&#û —êÀÛQ¥#Ô5¨ ÄÏÿ™'ÈçÔRÀëoóÅë$Â`¡t†€d ˆßùj#?³§»I©ír?l^(îûD¶vípý=zâ=Z6@ÏÀ@$3 ¨Z¦UM•#*&Ëá•“µÂ;¿‘AAà»{?ÔL±Ë°ŒŠÐr?ªûŽû Dòóß”gw½"+ÚVyrΦž½ZT­GÖÈœ9ð49{ÐéÚŒ~?}¾>ìäþ­ñEÌ ¡ Ä'ô?ZÇøê9­i_/³wþUæîyCÚc9}.›ÔÒÂô­Ë[gÈ©*íŽ"É©ªXÒ/àù<»ë%ÙÕ½‡/fË ¡ ä`T¤þ}{Ä¿øæù ­Ïæ‡UÔÿ–ÚºÝ_›·ãù¼Ùô®vœ\}œ\<òB]:*çÏ Å›ßþrÓÆÿã ÚòµÎ%dKH†9uÀñ2±|\ΟG4•G·Í–o/½L檔¿ßÄ?™wö~ ß[ö¹gË#‡æ‚/ >S4å ÚÊ0@h9ý£ò?× šÿ²•¿”»¶<$*fëQ¦åám3åÒWªe‚-9}.¨ßø×á_ã‹ÚòÊ[(¡ DãøþGÉØ²Ñ9}K[WÊ–_.KZWö:®j_+—,û©ªÆ_ÓçqŽ*Räp kÃK !Šú圞ÿ­½ïÉO>ý•ªºßøk‰BÅ_®¹Z[¾ÈØ$è˃Ïá Ûìʽ !¢EþÇö?2gç³é=ùíšë|±~ž)°$pÕº[r:˜ç«CΑ’îÈ ¡ Ä„¯¨H1W7Äm«åënÒ3l ˜?ÛÇÍKrr~ 1úLõ‰|fh Ésú©¸gülNν³{·\¹ê*öK%ð»µ×i?k.øÒà/ðEn˜à-”Ð<çój~|Ea¹ççEkßÕëþ¬MÚ ;¨køãÚ›$y~×ö6 É€’çœ;茜œ÷ÉÏÊGÍ‹òæ:/Tû<½ë…]D¾£ ¯ ‹ Ég”#*óü¼;ºvÉý[òo^=íÎÁˆÞ3jh½2@hHóùšSsRü‡Yú¹žéŸ °™ÑÃÛfy~ÞúÒ‘ÒPZÇ|b€€î@Òætµþï5ÛÔ|ÿ—÷¼ž·×üùݯÈ7Ô”>d_¼ý]ŸšÑ]ç33п‡KÕŽ—-ÑVíýBO•–Y~}YA™š°XhúùBõ¹²ÂRËïQQP~`þÀõn—çÔ®–„ÐÏT\#‡ULðü¼˜ñÆ–?§`ÖÁŒíÏÈF]äéy±a· >ȤïyÍAA( \ iqRõ±ž§AÑ ÷ÂîyyíŸQÛõzÝý0¾¼A{œu æÄ…€ÐqbÿcûÄO©˜äé91ò·#Äþ¤Ê¾žfYÚºÂÓsY9…Þ° €ÐÏ™P>FíXâé9ßÝû/¼ ìûØÓóM*Ï‹î8€ÐÏÉÅðŸš?æ…7á} ÀÐ’ÁR]ÔŸ>çÖâ1“˽5ë;6ÉÖÎí¼ð&¬l[ãùP q,Ì9¬ 4Ä{àqÀëw#Áo‹<¾|,/|® k ñ’ŠÂrÑo˜§ç\زŒÞ†Å-Ë==ß„²1¼èÌ’O ÜëA0+ÚVñÂûìM`ÀÖâ!cÊê==ßžî&NÿsÀêöuj@gç«+¡¶·-å…g€Ð¼É”z[üÅèߨ"xmûÏ·,Ðævâ)£ËFÑø”m«==ߘ²:^ôÂ9„€xJm‰·€^‹ZYéñµV2”=§B@<¢(R(ƒ‹zzÎ í›xá²±c‹Ç`/za ¡ žÞð "Þ½lºãݲ½›€NÙÔ¹ÕÓóÕ2[ÀB@¼b¸Çýÿ›;·1ÊqÁžîFO7LÞ€B@ò¯#¾M§´ƒªÂ·(Ó䃊k¤¤ ˜>‡¿oBR¥ˆ—€¸Šø<6;i\›&µ 0Ö£ö<´-ìùÒCØéŒuIW¼ËðsíÑUýÕÞïŠuñbâ‘ð8廹ƒÂâ÷k†×DªàŒçgô¹Ì=f¦§?û÷—_®½m¶®ÇÇãqõ¹6ÃÇ¢¾ÅËåBhHZxݸ½k'/ºKvx\49< W²E•ÖWxÝöµ§§‰Ý%»U! — e+ !4$Ü`½·º¨ÊÓsîêÞà ïÖ4u{kšª‹*yÑ ¡ aÛªA@^mZzZyá]Òèq ª°Šfú{ý#•Í6§®[Ç€BhH¸©*ôöFïõZvXÀ®€f•çY1†…4„Ðp€¢ OÏ×ÈÀ”ñ²€BhHÈ©.êïéùš¹þŸ2-Qï®3„аg<¾Ñ·y˜Æ^^»²Â2m—HB mÀÛ"À¶X;/z®ÚC+™ „€„—JÏ34©_»OÏןu„Ððâu`+ @o—O0#‚B@BJI¤$Ô"® €·æ©(ÂmE¡ ¡ÅëB/.¤cž¼½vÅ4„Ð0ooòÜ*5kíôøµQÌ‹N +^GyÑx”=Õk'Þ^;¶B@BL¡Ç ‡ 0æ‰K„Ð0g ˜ 03‡ÌB@B‹×iÞ˜Ð&PÀ !4$ÄÀë @Œ= ׎m€„ЀŒÑïáEȵ£ „€Ðd0Šå3„’ûKÄÛ—Kœ—|ï¥ ¾ÍÔ àEOþEURäá(`f „èkˆ‹HÏÛµÞŠÂr))(æ…wÉ£ÐÌ !¹þHºß„€8&¦¶|õºuî©öÚ0@ˆ_„?bq@ï‘,ê}?B@\±³k7 €ÏXìíÒIcO/:!Þˆ¿è[=z_|íµ×6ÜqÇ“ðâŠí];== ýŸØÝM@H¢~£›EþXK-»á†>7~üø~ýë_¯a qÉŽ®]žžoXÉ^t— -ì±ØÃ‹Nˆ·¿Óÿôê|Ùm·Ýö/uuu×.]ºô+Û·oëŸ$Ä· ¶d/ºK†÷ê±häE'$ûâŸñ'þß(ê‡ð÷Þ­Ž( qŸèö:0”ÝuÀ;ӄΦž}¼è„x/üñ×"ÿýèGÓN?ýô{úõë× oÛ·ßñàƒnÐÅ£ î2Þf¼NgÒ‚~ª°Ê³ó¡&€â™øGL>¦û•^wÝuÿn#øéFýHùk½ýßûÞ÷ŽRiÿëKKK'Ú=±… Þ¼víÚæ$ñ$ýŸsHj¬éðv`jÅ$^t&•óö5àñR¼6$EŒ¡ˆ3£à¶¯ÿ€ð«I~ý¯¿þú‹¿ò•¯<éDü[ZZýéOzNö§þãç8øúåý­—Ï 8Ù³óM«œÊ‹nwª¼½FkÚ7øîDU4î¥(E ùÂ#Y‹úQè÷­o}ëUíÿ§øõ×_¿A-tÊþ¡?¦âO@ýM®˜ ¹íˆuò ‰cËF{k;ü—ðÞðJ ¿•Ð×ú {ú•ÿæ7¿ùÊ´iÓ~S\\<ÀéIwíÚõúí·ßþaoôo6e€¤Çª¶užž‘ÖÔÊÉòá¾Oxñ 8¢ò0OG#Õ¾®}£/ €·¯KÞBC.ÞÉÛ|Ìn󻨿Ÿêé¯ýþ÷¿ÿó¡C‡þƒ«¿Éx<:{öì¿ÈÁyÿF™fHúlëÚ¡í?¨¸Æ³sb€ÀäÚxœþG(ºü†×yÈJ‘¼5 q ÃRÔ¯Úûþîè£þ•Šú‡¸}B›6mšóôÓO¯’ƒóþž[Ã"@’2KZWxz¾cªŽàE75GS¼ýÝ·¬ðåuð:P]ÔŸ/¾üÊ8ùœÝ4¿BIhíƒð«¨¿Nmâs½zûçTÄ_ ýéxàî‘ým1ƒçg€dX–ËiNòì|‡©:ìA€ì9ÈÐ’Á2¡|¬§ç\ܺܗע+Þí±¨â 0?Ì@b ÛÈ¿@æ‡飲_ÿú×ç!êWC}§ú?ýôÓ'ÔÌÿ­rèУè?®ÌÀˆÖ¸O«9™>‰ÓT7†—ëÿ`i«?3^/K0À ƒÈ?yQå¹çž;þÁ¼óøã¿%ñïîîÞ{ë­·>¤Þíƒ ,L3$uV¶­‘Öh›T–{vÎ3jN•ÛŸæÅOº&^‹¬ As· ?3at³¯‰'½5‹üÒÿšø«¾þ Uáÿ/S¦Lù………Õib‹?¬†þ4%Dÿ}¢|“Cû’2Xoý¸e±œZ}‚g眨†ÝŒêW+›:·ò À’ȤŠñžžs±ZúñëÀ–h‹§çÀ @ØMAÄøÛeŠzÅ¿ì’K.9öÌ3ÏüMyyyF š:::¶ßtÓM³¥ïÚÜ©àI‹÷-ôüœ_ø9^ø^>¯¢¯ÓÿïíûÈ·×£Ùã%€ý†óEžè߬]ÎIŸQ[Ÿ¶kŸ:Ê'MšTû—¿üåççwÞã™íoñ½÷¦«-[zÅ¿Otoù —HF @³÷my_|–<¼m¦t{\ðå7°ÓyêZxÍ;{?ð¯èñ60ºtoáüÅ&ò94ݯ‹¿Vä§ú\YRR’Q·¨Fþ®»á†^”ýkÿ1§Qâ×Ñ´ØØ±EKÇ#-ï5j0ÖYO“çw¿š××þ”ê㥶ß0Oω €¶wíôí5iìiòô|X‚éWP¢mEB1^óO½º_K÷_tÑE‡ŸuÖYWª1¾Y)ÒyõÕWïéééÁhÔ¨‰ÐÇ„K$Û¼Ýôžçç¼°öŸ¤8RœÇw¦ˆ|cø×ý'áµ9AfT¿¼ „KäTô'§úõêþ UÜ7ò¶ÛnûùùçŸ?;[â¿gÏž%wÝu×;rp»_+Ñ73DÒçͽÞ€a%Cä†~)o¯9Ú!'•ϋߵŸ À>$T&@Äù@]üËUuÍÕW_}‘Ú‰ïÕúúú‹#‘¬E(ñ§žzênõVþc‚Kÿä¯fHFÀT¸Æî&ÏÏ{QíZ 6ß@ÛåŒúwÏÏ‹ôÿòÖOi’8®êHÞÂaì?ñÐ…¿Týÿû¿ÿû¬‡zhÎá‡þ{ÕÓŸÕùè›7o~gÖ¬YKä`ß¿Ùa·À É€Uÿ^kzÛóóbûå£/ÕÒ°ùÄ¥£¾#ƒ‹z~Þ¿îžëûkÓØ½×óõø“ªótÉŠð»‰úuá¯ºà‚ ¦a˜Ïé§Ÿ~_YYÙ¤l?Y5ò7öøã?˜ý›¶4$#¼´ûõœœ÷(µ ο×~=o®ó!ç :ÝóóöÄ{äå=¯ûþúÀŒz=*E€7ø ¼ „'ú7Šøõ {4á?å”Sî¼óÎß|ó›ßœSSSs–ˆ7½¸7nüÛܹs×ÈÁÊÿ˜šú™üÿNvŒ°¢m•¬ïØ”“¶¨UÅp›U' »ç…úUu¸\VqNÎý¦*ôÜÛ³/×iUÛZÏ_‡ßv¾ÌÛó–ììÞÍ›A0Å?±°/Öû6±íO3‡vXÍ~ðƒ=zôEjŠ_¥—OTÿÑG}ô19tíßM@„K$+Y€=¯åè/8"?©ÿ|n@x÷ @¡ÙïÇþ,gOìx&0×jUûZÏÏYUT)¥Ö¢Jýø¡—¿bèСƒ®½öÚ謹—ÆŽ{i*â¯IEEEÊOtݺu¯¿ùæ›ëz£ÿ¨ðÛFÿÂ%’IþºëÕœ ç)ŠÊ/ÇüDÎU)òðEþSåºñ¿ÎÙ:óÇÍ‹e™Ï‹ÿú€u99ïø²1rÏa7ÈW†œ#å…eY9Gea… T&óÆ”Õó¦“ù @â†=åjxÏ5·ÿ몭ï9ÕÞ÷sµUï T„„ Ò¿imMmR¥Šþ{T­¢ÿ.é›þ7z'Ñ?'’ÌÒ¤Rį5¾­†ôäfT/Š/ýÒPZ'wmyÈó½á³Á—Ÿ#?ªû¶28¹ûS}tûì@]3,äŠEÕrYÝÅòƒ‘©Í²VkÙˆ]»´M³ÚcJe ´š˜¹õ…¬åR\P,å¥RVX*%‘Í@ôSŸÃ×Tª¯íÁû}³?øž_þäBÞxÒ¼mHßÊ~cú’Ë.»ìój§¾‹•€§Ôo ᯫ«“ÊòåË¥±±1õ×ôªUóÞÿ}ìÀÕ-Ö…vË}'þþI&yjç_sftþyØWäðÊÉrÕº›UmÀ¶@^G¤”!$Ÿ÷x§¿d>U;>¾¿ïã@];Ô*x=2ˆü•‡iG¶€IÀò—_7f P@/ð%üÅ—^zéi'tÒ·Uº>%áGšÔ¨Q2dÈéêê’… ˆüãñ¸¨ùÚûªk@¢Ñ¨ö56Ñ÷Ã?ü„Iô÷kÿÜ d¤Š?iY"Ó*§æôyL©˜(w«tì#*z}|ûSÒëÈÝ(¢¨‹G^¨¥zsÍÿmy(¯Ãj“ªQCjCý·†× 2mÑvÞxRGâ1¼øâ‹?ãŒ3¾[YY9.]á‡ÈCôÕV½šÀCèÕØ^QÂöüª*ihhE‹Ù›ðO?}õÃ?ÜÔk¢bßþç(úg€d…·>!Ó&LÍùó@ -‚_t¦<²m–ÖÇŽv6¿ÞÌOª>V¾UûÏjÂß8_<§ù{?T»=~È×àj“*¬Å‡ò‚2€4@1ßøÃÓN>ù䯩5ú1™~°k×.Y±b¢wlÙ«Eþˆø*(UHˆ–>Ûï­ŒC×ý÷ßè?¹ï?*©Uþ'þŸ€d!új^$KZWÈÔŠI¾x>üãúK4q}eÏßäEÕ.¸®c£/žÛ â9sàg土÷UQê'îØ<=°¯A.âg(Œ†úo µ»º÷ð¦ã’Uÿ>¹}¬\òðÃ׫ˆ?¥]úŒ„lÙ²EÖ¬Y£‰~SS“õëâšøÜŽöó*TíÀË*K€uÌnÑ·ë°ŒþiHÖ¸gË#rÄßúê9Al/öUíÀÜ /ZмP6tlötSüŽQãcÏø5Fvš/'>½óíº•–h«,jY®uP„ÝçÇŠäˆö‰r\ëRU-y•âZü•aÐD|ðàÁ}>Q_½zµlݺU{Û¶mZ @AAŒ7N3 ÝÝÝvÑçôéÓgªw;ä`ë_Ôeôo–   ÙÀ0<æ3NðåóÃF:úf:è^XܲLÕ.,Õj¶¨ÂÁ¦ž½»A×– “IªžèU˜xDåõï_°µs»fà‚ÎËj.EØ @¶Ú Cwbertëar”:JãýRújg?-⇨ˆµ–òß½{·–òß¾}»Œ9RÔ¾Ú1yòd­ PgçNû=+–-[öâÒ¥KÓþ“‰3@<áN•B>©ú˜œ¶°9a@QeTNÔŽX§f¶vm—m;¤KÍ7@TÙëÑÚ¹pÀåïo×*9к…¶­¡%ƒ5‘‡ð£š?H ríú¿h?_ÐAKê¥uß‘²‚Òðf ˜°¢¦§Z‰þd9²}²ÅS[0`€¨É}<ù-Y²DZZZ´”?|=–JKKEÍÐÞê òWÛùZžS ¶«í~ý[õý§ý÷ùs§ Y-xl›­ÖÞÿ)pÏýÙcËFkG>1{ÇóZG€‰y³éÝœ·¥fÕp àPP[ßY«"þ)2¶³Nû¿ëï¡Ä‘¾ÚÖWKù›Jˆ?¢~µKŸ º Ò‘¿ê,ìóDÿø:+T÷À j9a—ô­ü·[pý3@²ÎCÛžS§MI#þCkîÚòp¨~¦'wÌ‘/ <-%å4ÅLųSÚÆË±mSe ŠüSkõX§Ç¿^¸gÖñUš^:;;µ¢?…#FhŸ4hLœ8±Oq`¢°‹þï¾ûî§ÄÙŽN³†f€€d•U‰}ͺ[å¶ÉWçlŽ=±Ãs~µúZµ•ng¨~®OÕTÀ·´Z”Cš` @MO9\öÙ6IJc©­ïCøkkkµ5~5þ×öëQ০óIss³¬]»V[ï×kð>–ŒÀ2Ý8`e*^Qsÿýcí¿Ç$úŠ}ëŸeôO@|øpM¸e5ÔgåÊ•Z…?L¢¤ù±T#1iÒ$­SÀêñd…šú7Oe¶;ˆþí6ý±þiˆ§Ü¼ñÿ´ùìÙœNÜv?ìßvnß4]Ž®:B½þFÐ4ÚGŠ\Çh5¸?õ¹ˆÔ!üÉÃ{ì@å¾jÉÓ"x¤þaPݬÌÄa‡f[3€AŒ¶0==ôÐ,9Ø÷ŸÕ蟀x æñ_¹úrã„ßÉ„ò±¼ 9ro›™?+Ú:¯Vµ(7MüïÛRiöƒA=‡µ“i*ÚïM½V¯èÇú¾Y+ŸmmmÚLˆ?Šý°Ëßøñã1FX3'ËvŪêÿoüñæ^ñÏêÚ? É ˜[~E¯ ¨/É ’#flZú} ¯~æ¥j<õïÖÞ ¿óÿB3"8lƒ€PÉ?AEùG´M”Q]ÃÓªÛ€@#Ò‡ðÛEçf §‘?Zü°îê~´ùÁTàý &8ZB@§ÀÞ½{­¢ÿèc=7޵»-㙈þiHNhìn’­ü¹\5î´]ûˆw`ÐÏÝ›–GÕ.‰ùæ\»þV¹¢á?CQŠ €’¥‘ÝÃdJûxm>I<½n!Tñ£¢…}X›O¬õcºÖû‘¾6l˜f& þøÞú°' {`Õû¿~ýú·ß}÷Ý rpê_ªÑÜDðÙ@üCsO‹\¾êwò‡±W¨q­‡ó‚x@g¬K«ö£i~^_‡—Õ†P;Õ:¿hø±/¶\N+à.€AÝdJÇx™Ú6A*béÿHïC˜1£ßÍú¾}ÌõǶ=ˆ½^70fÌ­xÐ 6éÿø¬Y³’gþ§ý›Š= ñX€ øá¨—¿òE^,‚?¤¿—«½Èþ½*¾¿ü§ò‹1?–#Õþ ÌxÖòåÞ>AÓ›.H¿c}…}©¬ï'ƒJ}U‰¯­õ£ØÿÇz?Æ#›€ª¼ï¤þ1)Ð µ-ð{óæÍ[-é÷ý»ŠþiHÎÁ  [6Þ­íÎwYÝÅj®~?^” 󺚉݆ۥ5ÚÆ‹‘¶ÑýñÊ_Éi5'ËÅ#¾)µý†/ j°”áån–nÁæ;Û´)}#º‡fdé;ì! GªßIž£{‘ªÐÇz?„Æ š¹€à£ÐÏi¥¿¡ùÞ¶Í2úŸ={ö“r°ï߳蟀ø†w¿&KZVªµÙKU]À$^ s•m~©á„AzgïûÚœ€¯9WkU Ó²ÂR-›æ'úÅKTË^ŠöÇÉèΪq/3[^#ú†è£/Ý4"ˆÐ-Z¤õùc½â·n*ý“±ÛøG úø¥—^Z!gþÇ$µ¾×Ñ? ñ›:·È®ü…\0ô«ÚB̤Oea/‚Т:sdz2kÇs2Mm!|Þà³ääêã|µ“ ²e:6iƒÖ´¯W6׫÷×ûFüém¯“‰ ÒÐ5R ã™é´@êxþT«ù­@Š~áÂ…ZÁ†ûTTThÕý8¯›J#PHhUü÷ì³Ï>!×þí2þiˆïÀXZT¨¿¼çuùÞÈo†z#/¸°öåõ¦·ecÇ^ ‡Ôà(R­‚S+&Ëqý§É±UGª!ÔvÏÙßÏ‚¾¹s«2Ä[µ·:6k¢¿^‰O¼ÇW× “ù&v6Èøöz©ëªÍèß*"oˆ>Fë¦*Àv`2Ÿê½×ÄÛú"Àq¾8ŸÛJÿC^KJøaÌP…‹Ÿyæ™%IÑÌÀd%úߟA .‘¤÷‚Þ£0á€Ù)N8`%}þïÍåmÏ¿`jà¿×~iðÁ¾O´bK’˜0²ßpm‹è1¥õ2´dˆÖE0¨¸F{; È¾¨ -ÑÙÙµ[öô4%¼Ý%[;whY°Ýݾ¾(äßQ¯ÖõÇÈÈža’Éò´ðA𱾟h?Ìñÿàƒ´‚?ˆ5΋íS­ôOFß-Ð Õ÷ÿ5ùï õ.vÒûÿž¤#*öÛÿÒЄTj_¨–‰÷üaí2·ñM^ˆ,ƒ/KÕÒUa¤@­Íï°öh‡tÇ»]„Y­ÒÖô!ú™*ä;póV‚‹úÙXÛ7‹ÌQéÿÉ'ŸhÃ}€¾!†aí¿¦¦&íó,_¾Ütý_ Z÷Ío~ó2õ.¦uôf¬ @Ô"3 rèðG¶ŒK$,lY*?ýô·Ú,÷/>ClÍõmü‡jµÄ†?Í*ú$ÙBßíÞ“W[,íèªí´7®³^f e/ŒÔÅÚ>"o'[ðfTú/Y²D ÷ÙÀd?<û¡ ]°œ€ €o¿ýöÓð†b=ø'kkÿÌ0hÐþtÚ€“äÌšÏj›¼D xQl˜³ëE¹qÃÿñBCJcý¤^mºƒª}¤øËc™OÁ£’b áÏDß¾PéáGµ?Šýí£Ç¿ªªJ}ˆ¦Œˆêí×#ÔÞ;Tôÿeö¤ý›þå nP(õÂîyÚõ×Ï 8QN쌣̻Œ9OeMÐn¹´u%/ÑÐSûc;Qħ¶ÆgÞHCh‘R‡èãm¶SüF@ð,X õùÃÀˆ ºY BÚ?S…†vÅï½÷Þ3Jü[¥ïº¾Yäwp¤ <{ÔÞÏì|Q;P¥=­rªv €pRùxO*·ƒÖmRÿ}¹DMÀ‹Æ£¼ yúÑÕ›ÚWQþ žìŒB†ÈCì‘ÞGÄŸ­*~' Õb?ôøc Å…|˜€t+ý@êKF¨MöÝ{ï½/÷FýFѽ“ôÿ!ž#•蟀„ôsc­@Q¶§Z¸Æ—7¨·£¥AUpçrµí];e˜ª Ϩ`ÿÇ¡çÉãÛŸæ‹%O¨Œ•KCÇHÓU'£;FhCz²Di}>æægjB_: Ò_m²ƒÍv´ÈÏoܸqZ?ÖþQx˜i¶nÝjú9µ­ð ª0pŸ8ëùÏjôO@Bв° ,ŽDjÔ²AmÉ0ÕÖ5L[S„v®êãÕêýj©*ªÔŠ S©vîT{Ï·ª%жX›ìRË|˜Ãc]ûFYܺ\ËX\=þäµd‘ þ­öyMM¿ƒ!áŒò‡vÒÖòǪô~¦«ö“E½óØ€Ât.Rü‡„ÄJì1Òi˜ oå ñGú©ÿLÓÞÞnºí¯Ê>´ßsÏ=Ï&DÿFSÿÒ‰þiq¶$Æ‘l ’AK²¨+ÀMTï<ÀÀ˜–hëþ?zÕæ¥§Ô[•èc˜‘·l¼Gî=순,OàgúϺïÊÿ¬¾Š/„P+ÕñhëùêÀT¾l…èCP!¢ýdñÍ¥ ˆF£Z¥ÿG}t  õuuuZ‘ßäÉ“µ!CÙÀ*úWKsÕ»¤ï¦?‰Bo·á]ôÏI€„d’ÍãÈ4[:·©‰‡³´h<`Ì- 'ßlz—¿ä ¢nõµ=Cd ¿k” ë,ÙÜ3ñ±¦ÁGϾ¾¦ï‡h?µÆ® ?ªýUµ½ö1 ÷A-*ý!þøY²e<̶ýU» ö¨¡?O'Eÿv›þd\ðiñ l›-g¨6ƺÒ99ÿÕ}O>j^Ä]¢úúÎRûXÛÏvDÉ|?ªåÄ>×Ñ~"---òá‡b]+ƒIÁz? 2“&M:$[‘I°‰L€k×®}Sí7°Yìûþãb?þ7cf€€ú„?oº[®ÿ«œœ#l/Rˆ¿lº¿ ¢­å÷ T|£T¤?*«kùE{J>Þ"ÕŸªØ{m Pyÿþûïk3ýQé¡Ç:?L Òÿí‹ç£oÌ“çfÑú‡-£ÿ¨ËÈ?+Ñ? !9sú_ozG>7à䜜ÿ†|I^R/}Ú¶†¿ P/RQ~­6}oLç(©ŠfoÚ%"d ÁÑ#äÄ x~Kí[±mÛ6­ÍEx¤ø!þh÷úÿÈ‘# JrÆ#ÔhßKɨ"Ä^{íµUb¿éYñŸdË Ð’cnÛxŸê8:'[Ïb‚"füÇŠ+/’ÌSÝS© >úòGªa<…’½žyˆ#Òú|´ÄAøÒMíçjç]·nV鯊ë´ÁÄ`ºŸnœVú§k¬ÿÌ;÷Ù¿ÙObßTÌwþ³Ëd¬Úƒ€³³{·Lß:C¾?ò[99ÿ¤òqòÕÁçÊìÏó—ჺÈÄŽ1Jøë´–½l¥ö‘ÖG„¯GùéöæûŨ¢:m§=¬÷ëm~úV¾¥¥¥Úz?Ì@ªÂîæq(<´ÚôGíú÷QBôoõ›íðÇ6@BÂÊÌÏÊYOÓå‚ïŒøWy£i¾ìêÞÃ_F(RqýÈÎaZñބΆ¬¥ö!TzZ‡“m2!Ô^fPà‡yþhõÔ?€9˜è‡ŸâoVéŸ C€Ö¿äÏë¼óÎ;ˆþ;ÄÝà»Þÿ ¾. !9snÙx·Ü4ñ÷Y-ô2³þ£îÛòÛ5×ñ—‘!°¹_[ÏW­zűìÜn!v{¤ôñV¯t÷Cj?ÓÆ µµUT5½6Óß¾ý»-ê[ùâgGÚ?¹xÑ©°»yžúã‰@õ¿ª&`—ûûºô]û7ücµÓŸÙÎl$$,,jY&/í~]ÎtzNÎBDÌxgïüe¤zCj­zSÛÇËøÎÑYÙ\±×Ãm¼ê\­ù£Ðîã?Ö*ýQp‡ç€ê~¬ócôpr¥&£|3Ð÷®#Ô,‚¿ªÉ€mÒwW?«êÿ˜dh›_BÈí›ïW"|¬ô/ªÊÉùõÙÙ~ZÑWéýz5c’ZÓGz?Ó‘¾Þ“¯GùN÷«÷:‚Ϧ1@¥?ÒþØÐGïñG±®Ç¨Q£ +ýÓv§3›ü‡±¿Ó§OQÿ¹úcùg<ú§ Ägìëi–{·>*—Õ]œ“ó-,Öþ“ܵù!þ2,(T‘>ò@ôÇwŒ–’xfG:#ÊÇZ> ÛpØ °ñsj?Ýó¡ÂÅ~hóàd<ô­|Qô‡‘ÄnŸO& f`ö¿*Kñê¦M›PPÓ-öé³e€ŒŠ= !`ÎΗäì§Ë”Љ99ÿ?ýŠÌÝó¦¬n_Ç_F¢P¨(ä;¼c‚&úýb™ÝU}ëzµ¾>y/h|&³X_GÄÿé§ŸÊêÕ«µï­oå«¿Mœéïeêß*úWÏ;úøãÏ‘C[ÿÜìú'ÙŽþiñ!Øh·MºZëÓ÷<ºj³.]q¥ö\òŠh¹¶¦Dû$Г¹¥½b‚¯¯å‡1‚O…îîn­Ê¯÷øë[ùBôQéow½Ò-ð³z,jô"Äd6nÜ8_Í&Ø,éoù›Õ蟀Ÿ²²mµÌÙõ’|uȹ99ÿaäKƒ¿ Ïíz9o£} æ9²m¢4¨‰|™êÌHž¾gW±–Ô¾›¯EZ)ÿ5kÖèñ×ÛüpÝ`pݼHû›=Öj׿çž{cõÖ¿Ä©™Øò7£†€€Ÿr×–‡´û0³?\<ò›òVÓ{ÒÔ³7o®9¶Õ=B‰þ´¶ÉÒ?š™-c±~¯÷å#Š… sj?óíÝ»÷@ä¿k×.ícz›*ýa¿·×i=;¡?·dTWÀÒçŸ~¹ºéÛè?ë3hñ1mÑv­åäüU…•òƒQÉUënýµ¢6Ý9¶åp™Ô>F«êÏT¤¯ñéÛç†E¨³ñÜÐR·|ùrmÍF_ÛÐРù¡Ò¿¶¶6kÂîæqèH0üóÆo$þéw<þiñ9/«zÎôy9ªêðœœÓ _Ú=O>l^Êë;²k˜ßr„ŒU#yÓMóC4áësöƒ:'&ëüHù£èÃ~âGª×QïõOe'¿L&šÍýWÛoU­óåÐMœ¶Š—Ñ? !>Ex7o¼Kî:ì)Šæä9üWýÅòÝe?–®Xw(®éþõý:9±eš ï’¶è£b_ôƒ6k?ׯ‚Šˆ_µÌiâßÑÑq`#û¡×?±Ò?QÏ„!ÀÔ?³Á?jGÂ9ªM1yì¯Ù€§›þÐPÖwl’'wÌ‘¯ûûœœT¿Zù×açËý[ üµDïþg[Ž“a]ƒÓú>hC«©©ÑŽLòù)*Ïösƒb¤/Rꬭë»ùaùo±±O¶DÝícñµx®F(ãÒ¬Æþ¾*}7ý1Ûú×Í🬚Bv <½æ^24'çÿ×áÿ óßÔÌH¥¶ÙýLó±ZÊ?Uôb>¤£õ>ý|àSýˆôQì‡tº>àGßÍO½Ò?Õh=Ó†;þaç?#TíÂKêóͲ¿øÏjòŸÕŽžS „ßÓ©FóÞ¾izÎÎ_)’×_’“ŠÒ»î}±é4¹`÷—R} /ªÏ§L™¢£AüSÃl|m¦"x/Ÿúç1Ó_õËk‘?Äذašè£Ò=þFYœ;ñpóœSy\òcÍ¢µŒÑ­Öþÿ8­øOe3„ä#Ø®÷ݽ äÄêcrrþ‰åãd|yƒ|Ú¶Ö÷ת(^¤÷ÐrdJUýH=#ÒGÄ1J7Ú[Ÿê×¢ÒkþS}ÀO}}½ :T«òG»_&¢õL?] (N4bíÚµo¨Ÿi§8Ûõ/Ñd]ài Þt]u„”{vÎÖh›¼¨:Ù>Köt7ùþaLï™ûN–ʨ»H]ŸÌ‡¶3£Â3¦öÓ;†ú Ò0hD¥?RÿȰ$Vú»õl³èê©§žéþÅßwci 8[:·É£Jˆÿ­ö‚¬Ÿk{×Nyfç‹òÌ®5àwJcýä³ÍÇ©é}“\=Bñð£Šß­è„­8/ÓçÃÇõ©~*ZÖÖÒqõÝüôuÿLŠz& &šýUÆà“yóæ­–¾ƒ|9ö—€ðȶÙrFÍg¥®tDV¾ÿÚö òøö§enãÒ⚌Um}gï;U›ÛïFø±æ áOÔÃ>sçÃú>†û@ôQì!EEb¥?Úþ²-ê鮳^Îmú¬¶îïôð£Â€|vMËîÝ»5чø#òÇÀ˜.´P"ë2räÈ”~6/ gµéšcШÿ¼&}ÿÄÄyÿ¿ä:ú§ $Àìîn”¶=)ßù-ÇiuÈ_w½*3v<#;ºvòçF‘ßYj½ßém¢3}6Ä7hÏ Ûä®[·NµÂ?| *ü!üuuuZ ÓÑz¶ *ÿ1ªØˆ… þUÍþG_ ÝÚ¿oÆþÒ2fîxVÛ°g\Yƒå×ííÙ'Oí|Afí|Nš{ZûóÓ6UNß{‚㨟õ3µŸóáó¨ð‡h"j^¿~½öõXï‡ècCŸäÖÊL‰z6 Uô¯2÷ßÿ_{£ÿÄÁ?F™«ŠOÇþÒ2¢*•ËÆ»å¦‰¿7œÒ·­k‡fžÝõŠ6M0È`¨Úüœ€5~DœN+Ì™ÚOý¹éú Òó8Ðæ7qâDmŠýð{p»›_. ÖþÍ¢ÕÍðšb´GÌçþ[Uþç,Ú§ $„,jY¦õ¼¦m¬³¦}½ÌØþŒ¼ªZù¢iå³sü±{Ÿ°¡ Ö›[ûü&¾aYv@¤Œ6?¬÷c²&ý¡ÍODþÉc}ýRàgjÌ¢õ}bO>ù¤>øÇ*ýïfßœM¤ $ܱyºœ\}¬lìØ¸V>;ŽlìXüQaŽÃ.]æÔ¾WÏ £q!þØØgõêÕÚ¸\,·`ºf+ ãÄ„å¢ÀÏêqØòó ŒPS ?˜?>fw‹» 섟BHjìëi–‹–þ—¶Ö&ÆuÔËÔX_' Ò<±ÈŒ|öžzãQéñ×{üa¼Pð‡áJ¨½ÀãݦýsmöGà 5øÇ(úw3PüýÓ"Â&þµ]C弯Ï;ÚÐHüÃ*¾¹~nHTøCôa° €K´÷á-¢ÿL‰³×†kÿfÑ¿jo\5sæÌ…Ò·ï?*ûK@ ¥ñ~r^Óé¶;ùá¦ñdž2Lígÿ¹a#é‹´?"f¬ó#êGôo6Ó?[† “FÂoý¿õÖ[úØßn±ßö7&>üC@ñ7êVø¥ÆÓ¤´ÒQäñgŸÝç¡Ç,Túëm~h³D±ŸÞæ—XéïE´žéÌÄß,úWõÛ§OŸþ–ôÝò×nýßé f!œØ:MÆtÖÙ~Öœ“ÅŸ©ýÌ?7¤ø‘êGÔA?hóƒØO˜0ADþÉ•þ¹öTg·öÿÁÌQû´‰³µ·ci!sýOi>ÚöëPm•‡ëü+V¬ÐŠý0ác~Ñf‰?XëG»¥Ù„Å Tþ£ýÏ%ü{ï¹çž—“¢ÿDá·ÛøGüjh!¾ @ý;kï©Ú[+Ðg>|øpFðY>ÚúöÇF>z›2.ìƒÑ¾X~I¬ôw+Î~1~«ècÕÒ*l»Åýè_ßDû4„ßrBË2¬gõ K¥šQiž©>㯅 b´/ÄéÿöövMð±‹Zü¬:.üXàgõ8«ÊeÚÕØßçäб¿v)»1À9þi!¾ ¦§ZNl>ÊòkpS‡ø˜­7ûM|ýüܬ¾ÇæÍ›µJˆ>züa üȺ åJ·Ï×Ë(ßÍcýcYà µ¥ñ˪àq·šþ·kô…ÀÓB|Ï™jØ]Ë_MM”——3‚ÏÒùðxô÷£Ê_oóÃǰÞ6?˜€ÒÒÒœ {6 ÕŽêãÝ>ø`òà§|9ø‡€â+êºjetç˯ð¸)ú£1p÷µˆ„‘êW[ÜjéÌõG¦E/ö³ªôª!@wÚÍPfèoK—.Ý*ÿ¤2ö××u4„Ü¡n‹§ï³ÞÞ7v¤Ÿý"¾~àS=Ÿªr×*ý‘ò×ÛüPh™Xé™þnŸŸß Öþ““øížx≧¢»-Í Å¯Ñ? !$§Lé'C»­ ÿúÇö¾Œà3"~DþXçGú3þ±ÆñG¥?ŽÄs­ÀÏìq0=¦UwÕ俵âlì¯]€]„Ò熬þlÓó}ågË3µŸ¹¯Eú•þC´ûaw?}ªŸ]¥®¢üLÓ.úöÙgg‰³-3ö—€â&¶7È€h˯IŽ@s%û9‚Oõ|Hó£Ú?±Ò_oóCÊ¿²²2¥ˆ=†C0ÓÀâÚ|ôüóÏ/“CÇþZ˜8üà !$¿9¾õËÏ£âSçÁgî¹ÌñG¡DiTÁ£Èó þ‰•þ¹ölTþ[Dÿ¢¢ÿ'åÐÊÿ¨‰ p’òç€O‰ !ÄsPõ?¬Ûºªßh[Ù ‹o®Ÿ†Ý ÕßÜܬ¾E¥?Šûôõþºº:mÉÅ­Èú¹00ù±XæÀÏo†*‚üä™gžYœý;ÝøÇ÷ci!¾àØÖ©–ŸGäH”©ýÌ<7¬ó#Õô7„b }Ðã?räÈ•þ~ŠÖ3ù8<]VÌ™3çqٿ寛Mìªÿ}K¾€@Ìg&$ÌTE+¤¡s”éçq3·‹þ™Úwþ=õ"ò‡øc¸†ü`yE³Ë ø™=Uÿ¸f¨¥… Ñ¿Ýà«~_ŽýÍGˆ4 !ùÄámµ«èÛ͆A|sýÜÐÖ‡J2(ú«®®>öwRéC€:d=¬xî¹çfDÿ‰GTÌûþ©+¬ „xúwxûË/ÁŽs?m ‚àa¦?Ö¼‘À´?½Ò¨ôÏ…°çÂ`¼±Ùv¿½Ñÿ¢Ù³g/ç3ÿ¬ûû~O€¢ü¹í«=ƒ02¦k”ôVš~‘?¦Ð1‚Oý|xãÆZ¥?ÒÞ¨ôÇÇôüÌ*ýD6H~fÃÈ_« €jûKŒþízÿÍ–Xæc €‘) „xÀäöq)EÿLí;û¨ôGÊ© »A ±Ò‘¿ÓJÿ\Eë™~2!fþe”Ïš5+9ú7kù ä¦?ùf¬Ä…€„ä€Âx¡Œë¨3ÿ|aá´t®…:#7!Ÿ*ýí£èoݺuZÔ«Wúc#%ˆ?Ì€¢u¯ ÝÐÐ[ùßžý›õý»Ùù€Ä@ìÍŽ(oË„xzÿûÅÍgúc=nîLí»ÿZ÷¡Â_Ÿì‡ÿ¨ô×·òÅÚ¿ŸÄÙ«sÚŒüÅ4ÄTôÿ‰Aôš-óÅ$‹¿]äíu{„˜Ô1Æòó0Aß\?7´õ!íßÖÖv ×K)cÇŽÕÄ•þ~ßÉ/çÄuA6Äê¡jÇ¿Gåе³â¿@nù›O«,€þ~,Á´Ï;vÖ)ê-zŽŠ{\“„£ áˆ$b`8"BH~1x?ñmâßI‘*î+¿ô‘oüFý¥Vøa·?/Zÿ2rƒñ‘1@u; þ v¨ôG €^é·‰¦*HéûäǺ}œ“¶?•1ùÛ+¯¼²ÒEôÈ-ó͘ â¡ÿ"ñ‹oé}[”p81 ?ÉcÑ·~ýÀßMñ™gž9^ |YªÑ˜#øTÏ…?TúãÀt?ÐÐР ?Öû­*ýƒfÜ>Æ™¡ B÷ôéÓýwf úlAy €UÊ?ñsV&¿äný5‘ð±¢ñ/L¸‘YehH>Gþf⿟¢ã?~²Õ7u[ü—ÏÆÑ-ŠüPÜ€ÍmPÜ7nÜ8-åñ/**: ša-ð3{Úþ°Õ±K–,yaÁ‚› @ÞEÿaÊ™3—fôKš<¾ ÷ó 74a€Pü‰Lÿ:µ}˜Ù7E¥ºQk÷8ô|fƒb?ù¡âí~X>A±*ýý£›"—âœkC`·ÛŸ2mwÞyçL1Þñ/o¢ÿ0'f –tcJ~³¯OŽþ n~B#@húAÂßOL­GWªÙþ¦ýýËq¿ö Â¢ñÇz?ŠþpíÐæ‡B?ôùûQœ“›M#kƒÃ ù?­2(;Åxê_&¢€‹Ü"  hÂ[3ñOŒþ¹þO(ü}E_’„?Ñèf¹H­ÿO²ú;ˆù]|sýÜ0Εþz±25552fÌ-òÇûA™à—­Ì–FÐögc¢vß|óÍODÿVÃÜFÿœè#C`$þ—â_ Ækÿv±·ÊEþÉêx³oˆµëÄêÿ¬ÜÞQ€>XëÇ[˜6ÿÐ9ñÆSO=…‘¿Å?ôÑX €YÕÄà3ýäåDá/0¹ñ1ú'ùý‹þ%Fÿzv ®DËtû?ˆXrû_¾ûÅ_DüèñÇX_ ³Á?Úü0ÞÑ¿™ø%ZÏäc1ùЮðmùË_¦KßÂ?£Vp'3ÿCý‡1(þf¿œXÒÍ,Yücâ|ÝŸ€ä›0[û×—Ñô¯ÓÞWûÏ7˜}cLªãšÿÁï¶>}?´ûAÜñc¦?Úüô­’ó±ÀÏ챘‚ˆŒ‰ï¾ûîÌ•+Wnç}ÿyý‡ÉØM42‰¢OzkÔæDÑ'ù"ôfŸ3öShðõÚߘ®ÑfßÔ¬ú?÷hllÔŠüÍêc}õJDýV“óÕ`.Ú"­PŸß¬Úþ戻¡?1 ÑŽù–A·Ê$ÞÐâ&ÂO@òÙØ ý1ÿ¸êï/T3þMa];L|ªçƒè£ÚˆŸÃLŒõE›2%n¿&DÖïFÂ.õ/Sëþ÷*£ ï÷Ò#îZþb‚ÿòÅ­û›™€¸X§ùüÑ|2FÅÉéP}¶†f >ûÙÏŽRëÕÅV Ÿ×üñ9ìä‡k0ÞÃ~0ÆëýHý£Ò3ýígúœ0Jv=ÿj9eþŒ3>㿘˜ÿYeBý‡1àÆ™qõÓ|3‰™²‚¤¯Ñ#ÿŸ4i’iôoT˜iñõƒ‰0ëûXïG{ŠýPü‡%Œõ­®®¶¬ôÏwCà$õ¯ê:î¸ãþµ‹qáŸQ&À*ò]ôF`g̾6î ê§à“|~#P`ùG’n¤%b¦ QüómÜ/*û!þˆbùà `2"ˆ?Öüñ}Ü>ÿ|0÷»cÇ»žyï½÷ž\¼xñf1Ný;]q^@`g¬>O@húŠÉ¡Ó6ù*=Êì›;Yÿ£1@ôŠ6?}ÍŸÓ+ý!þ¨ôOü¾¬øï 2&0PV¨¯YuÍ5×`Þ?RÿÝ)Š wùËw`f$IÜ“72%Úô!Ÿü7’ü·“¾iÿägDŽt’ÈêMÀGèíG¥?„`_Jµ[¢e¥¦EÖÏFÂì¹vvvjÝV¨lJ×í·ß~«zÛ*wû3úc7õ/ÔÑØ €‘ 03bõÇý“<#n`’_ÿ‰¢ot3Ô– Êˡ95a÷«o胔?Œ@b¥?Rþz¥˜¢õL>ÎaÕ¿ÌŸ?ÿ‰wÞygX§þýåEyrC‹8¼Ñ™EDŒþ 1ΉD¥²U–¿¤ÆôÆSäìÖc°yófM¼0ÖÃ~ð³c¦?Rÿ0FÙVü÷Rÿ«¯¿þz=õß%é¥þCýç‹°‹äíÖú)þ$Þ.Sfõw9ú裇ʡ3\¿ƒTž Öôt?ÄëôJµI’Öãït¬o>Ìù·«úGêÿÎ;ï¼U™·©£ €F0B#@Á'ùÑýXÔšQ ŠÚ†›žLÝØÑï”>•ç†õõë×k[ùb¬/¯ÏôWµÚš¿^éïרÛ†¦ Ýv êÿ­·ÞZ-ÖÿÌ6û‰IÈGþÒ˜ÿ¹¾Oò³,XÜ$`e$´C¥¶‡š}Ä?Ìkþ¨ô‡øcÈÏ–-[´!Ý?fÌ­Ò‡Ñ÷Ïç?³¯ƒø£MÒ ¤þ¯¾úêÙr°ê¿GÌÿDŠ^„E¼÷þ‚i H¾ÿMD\DüÉ;œÒúÐ÷@ªÂV?þ#F`S$Í À?gC±$Ì”j™¥ç¾ûî»#¡êßMôïtÚ_hÍ €sS@H‰80Nßgn€Zë®2{€›ílsÁ§úÜУñW;ÏiÅ~‰•þØÍ•þ~Y¿'-@Uü?6oÞ¼•²?õo%üQaá !ÄÔ즪„Éû(Ðßì‹õõÿ°¬ùãkQè‡jŒõEµº^éÁ>hó³{LCÐ÷k‘ú·›ö§–W]{íµ‰ì¢«ô^4„·Q¿.ö“ÿG¬ €hiTúCøÑãb?¬W'Vú#ò7*xt*–aYÏwsN,Ømô£2Í7Üpƒ>ðG/üK§ï?o ÿh!™ÂÐ¨Ž–‚<î"áGÁÚý@b¥?ÖüõÇçûz¾ÓÇ¢å»"Ú}ùìÙ³o[¾|9*,“×ýͶü52yYøG@IUìEÌwÇ<°O€JyW:1^‹}¦ŒÒü~ô÷cH @ªôèÑšø#ú·KsÓj¨ôkiÅ¢E‹þúÐCÍëYÿVÑ^þÑBÒ5fFêQ £E€ÙˆàSýÚ––Mü±Þ¯G«¨ôÇ559¥óç³!pºËZþþøÇ?>(û·ù5kù3[û;0y•   „¤› 8d+mµà8¤™MMMZ‹Ä•êøYÐßÁ>½Ò?(Q·_ž+"»uÿŽŽŽæë®»îeÀ0ÐiêŸ=ÿ4„¯ ª€/TGZK~4)ˆ¿>Ö•ýXïGºÀÉxã|/ð3ýþh›´û¶O<ñÄ­ .Ü(Ίþ£3ñ·~vBH’À›e|LÂ¡ç­ ]àc€ô4&ú¡Ðÿ/++ÓÄE(öÓ§æC´žÉçŠA?0v¨Q¿3üñ÷äЖ?3#à¦÷?/£BHºf y@DÁ¹¾¯øu&"}½ÅO니=þXëO¬ô÷«ÈúÕèEvëþªÍòcµî?Cö¯ûwÙDÿÉUÿN¶úçcôO@q"ö‡ŠŠŠ’L<—Ækü˜ì‡õ~}¬/¦úÕ××k‘?Œ@£n?<ó0ìÙ+T‘åÖßþö·7'úMŒþS­üÏë@4„¬dTdœÒ}ÅOû )ÿ+VhUÿÂ-|!üˆþYà—Úãð9DþÈ®X¡2m7ß|óu*ó‚Þ@¬û'¶üY™€äÂ?¦þi!YÊôùœš„—ÑûŠ×3P鯷ù©Ês­f)¤û!þÉ•þF¢Ç?óÇ!›‚ìŠ*3›1cÆ-óçÏÇ¿‰ýþV•ÿnÖü%ߣBH¦ AD d±ñ“1€8­[·î@¥?ÆúêÅ~ØÆWµ7æU´žéÇÂ\9¨ø—·ÞzëQŠþŒúýíÖÿ¶ûåu !$ã(‘Lù¾’«}ô }ùë•þ}Dþ¨øGb¥¿ŸEÖ¯†Àá˜_d^^¿æškžã¢?3gÛý2õO@ÉVF ÓKÙŠöu ö(öK¬ôÇ&>ØÊâ´¿Yë" ³Ç¢ÝÛ%Û±uëÖEW^yåêÝ6—âû¢?³h?oÍ !$%¡7û¿ËB7‚â•Ø}­¾¡ÏÊ•+Túc¤omm­V臹þ\ÏOïq¨£p"þjy`ÃÏþóë1ñOý¹£èßJèYH!™BµlÅrýœD¥‰•þˆò±™¦ú©VFíÈÇh=“çĦI;Ó§Dïÿ*Tk \X‡CñO¥å©BH¶PÞ=6!k¢îô{`-ëýˆü¡b¬ï„ 4ÑGÊÅAY¿}Ð]¯?Úýn»í¶«?ùä£1¿NÚýìÖýÍ¢ý¼74„tˆDsÝn„%]±wk P‰Žõ~½Òëü´÷¡Ò3ý½ØÉ/̆À©ø+3ØýàƒÞ0wîÜårhÅ8Ÿùï6êg&€€’IñªÍ«ËêAv¢-c€ÿcËY´ùáÀó€à;V‹øñ~b± üR{¬SñWŸÎœ9óÖY³f-ƒÿf©ÿd#`ý' }Þ·üÑB²M\€žt3™6#5S^~ýaÆI]]–þ‡øÛ‰ üì ñG1¥“õÕW§?ðÀoJßv¿ä ~ìRÿqáº? !ÄìÛ·/#€L­ù#Íñ×+ýñ=1Ösý‘öG¿*çã(ྠà×׉ÁSƒ~Wc~Ÿ—CÛýìvùsjÌ¢}šBH¶PvÝ™0™0(ðCÄ¿|ùr­Òëûîƒö>´ùá’Èúõ¹b´occ£#ñÿý÷g_uÕU3Å<íof’ßí Š? !$‹ÄÕþîݽ7ÛHº 5>ü ÍFëüz± €U¥? ósb´¯ú;úúÅ‹¿¤v÷{´7òïã‚?»èßÌ$ =×ýi!^‰¿þŽªîîT£s wͱÛ.Æ‚¤·ùá|Hóc¦?fùCüõJÿ GÝ~x®0YNÆû‚¥K—¾|ÅWÜ£Þ5ÛÚ×éö¾õK@ñ‹à'\‰n›™Hu€SáB:æùãÀÿ±Ö5ûAüÆú²ÀÏÝsÅÿU­‡£}€j¹|SøMÿ.›è?Õâ?£×%Í !Ä#Çp•b˜ àtK Û·oׄ©€*Tûëâïר;H™üþ0KENX¶lÙ<ùß©×"Güµ÷ ¿“ˆŸE4„ŸdZ­„bm¶ÁN*Æi~läñÇ®~øÞèïÇ.~Xë7ëËõ|÷C›ŠýœÖq,\¸ð5ßÿ>Ù¿æŸ8ßß*âwýÇ„E4„ÿ™%­vQdº@èj9l#«ÍÇ:ÿĉµb?LùÃô¨ÛÏ×µç8ÄçÏŸ?óøÃ ‡âŸJÚ?YèYôG@É5*=Übg–O%ÚO{Ì#ò‡ø£ Å~hóÃ÷FÔ3m¡ Rf!•窯÷£“Âé)ÔŸn¼ñÆç\ˆ¿“´¿QÔÏ¢?Bˆ—¾A´•øÿ˜ Ë @&: JˆüQéý( ¢Š5#€Jÿ|Ö3õ8¤ü±Þï4åÙþÏ>ûì]ŠyrpÈ“ùþN6ûaÑ !ÄçÆK–‹ëoÞ›À[LœCÁ"£1B;tñ·Z^ !°Þ"»â´Ê(ÖtÏ=÷Üô /,–C‡ü¸í÷§øÓB‚h”p4eÚèÂáÇÝüð ÷Á,]üÝŽ¦!8ôwƒìŠ›n Õz¹öÿ÷o\²d 6Zègm~FóþÝTýSüi!9Žø“‰©b±ÝVLe ‚áÇŽ~¬óc¸Æùb­Å~º°±ÀÏýãæÇ`kýjƒ¥÷ñ‹_ÜÖ„µ‚ýâï$ê7«Iq›×"¡ „x,ø’•ÅUŠ~O& ÒüzäýPàñÇ:?ªýqx!²a+ðÓƒ ¤üÝìÔ¨ CÚÔçÉk®¹æi9Xì×#Ƴý­ÄßIÑ_ÜàuFñ§ „øÀ$¾© xvÛEóNg@œõ£¿Æ RSS£õøCàõ#ú×…‹ëù·ϣµÂïvƒ&Õq±ýþûï¿ýÅ_\"SþÝ¢µÿÄ·f›ü˜‰?¡ „dYÜ#&7̨Êü]vßkÍvò µ£}!þØÕ…~µµµšq@ê_¯ô÷«ÈúÕ £‚¿T–bV¯^=_õ÷ß½sçÎF1NùGm"~#ñONùÇŠ?Í !$¦@LnÐq©·ª¨²S µ©ÂC„¬ –”1u›ú ê)LöC±ÄßIö€† /ˆø!ü©ìÇ ~_­sæÌ¹ÿ¾ûî{S¬·ò5û¿•ø;™òGñ§ „äHôͲFo1  Q õp+`&h*ºÔ Òò‡˜É©Š? !Äg‚q)øÉ)[-ÂS©û­V'Â:4D ‘= âAüñ9RÔ àÿ\Ï7fJ?RöuÔVÊ ~øáÇß|óÍÕ½Âß%Öã{FývBˆOÍ€þ³­WoÞ1U¸·Íî~ žA¥?„K‰Vè‡V?½Íëþ~Žºsé#S‚#¢TÁå†Y³f=>{öìåÐi~fsûÍD¿'AôôúSüi!4 É7gí&¯Öð79µ0jÉà@…?Rþfâo'–AZÏwúXÔGè¢ÌI&D¨VËj÷¾Y¨îW3áwbœÌô·šðGñ§ „Pø“·D?øàƒMßùÎw,¿‰.þÈôïß_[ë‡èCü+ýƒ­§j^ øz]ðS­à7CkÞª&ù½pï½÷þ­w÷ÆÄa>f‡[á·Zï§øÓBBbú˜•ÎoQâÕ¬Öï«ìÄëü¾Dñr´îöqøZ½&B›©?U›±éí·ß~ùÎ;ï|]«Ý¡ðÛmÝk¶ÖoõSüi!ŽünÖúÍ>ªzÏ·©ú, @¢0BüЯŽ%€Ä_c4ø'h†"yüœºèëc‘³ý{S†lѼyó^™1cÖø; „?æÂX rÔïd;_Š? !ħ¢¯i°:¢ª|‡2\,A“ÑÍ€nô÷Í ‚׆@ùd±Ç[ÙŠêÍP©ýæåË—¿£Šû^]°`Áfé»aO, ñ¥õSüi!4‹¬@⡉€*òÛ„ùý™ÂI¤œh ÿ¯ˆD·údqO|« º~‰œü’TÿÖ­[—«Œ·zè¡ù*£’<À'f¹Û‰½UÄïDøjG(þ4„€eì {ÔT¿µS§NõZ}!Ä^ƒÁK‹/~gæÌ™o¬X±b§:µ/Y¬í €ð[¥ûÍ ý(þ4„€DúNf¦ÿq¨ôó§gžy&¯h–~OjÖ†O?ýôcµ-ïü÷ß)þné;±Ï(B7~«%³ïc'üN·ó¥øç€/!ÄæÞI: ŽÂÞ£(á(î=ÊTEõƒ>øˆè3‚—4}TWEç–-[–/[¶ì“^xaÁªU«öÈ¡ó˜­É[e¬Öõí"~'é~Š? !$ âÀàm L€:*Ž9æ˜úÓO?ýØúúúÃKX‚P+NŒÔÕXÞNõ6® ðÚ•¨koÕ.†8ÚÔN|Úû*šoV#v›Ô|ý}*}ߨÚ÷*¡oRkø=6ÑyÜ&²6}7Ñ¿]V nó¼ì*û™ò§ „„܈X/Õ$‹~âÛ‚$`$üN10 f_“ü«ŸÙLÄŒö>°q}z‘Ñ[»iŠfÑ¿YzÞ­ ˆ;ˆöcb¾çƒðSü} çBœ`40Y$"IïG“7ùq…½_ëÔˆ‰€[}˜|}º×ÂÊ$~,fò9'‡Sñwc쾇“ç%BH~Š~¢°™€Ä#j"’1ñ/0È2ˆK3 6ï§c¬RÛv†À‰ 0‹¾Ý.8z ? !„¤ '§»ÍÐ…Èmôï$•ïÔ dÃ8Í ¤ý»1F-{©Š¾Sá§øÓBB˜0,&Âo¶s`AÂ×§³öo—pbÜ·‘¿ø‹MäoUWàÔ¤"øN«úõÓBHÁˆ™|>Ñ87…|nÅ?’Ÿ5Uñw’ ˆ‰»e7n¢|Fý4„ ¼m@„=f"þqáwý›™€t²V·‹tÍ2é.¸É¤áSø !$mCàÆÄ\FýÙŽþs±i3ŽàÛ‰=…?Äp!$•û…U+ž™°»}§Q¿W~1"™| ?ÿ  !ÄõýÂÎDl„¾ h?Õ´ÄÅÏçTSépcÄÅÇí„>Õú(ü4„Þ3›;Sà¦Âßíz6ZÓÉX s<…ÿ»‰îÓÕKñ§ „Ç&À©É|¤Ÿ©Ö¿l™§ÙtDž¢Oh!žšgc{~>U±wõ§[`%°™4©<…ŸÐBrj2!îN¾¯Óç•iŠ»s'Ÿs"òñ6B@!Žï!nÛM$ï4ÂÏFÚ?ÝŒ@:Q{ª‘}<ÅŸÐBHZ÷‘TÛm4Ÿ­h?S&Àîÿ©~Îé¹)ú„€â #à4Bwŧígº0QΤ¸Sô !Ä÷÷7‚J4ÉÀsLWLã9ú8EŸÐBqo‰dùó^ÝãÒÀ3Y GÑ'4„@Þg"YøžÙ¸ßųôõqž !…¼„~ Vâ|,!ÌBByÿñË=-îÓïE !„÷%ŸA¡'üC#„߯(ô„P„²{ÅB!„B!„B!„B!„xÊÿ½Œ£ŒXçIEND®B`‚qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/dmg.iconset/icon_256x256@2x.png0000644000175100001770000006455014616416776030346 0ustar runnerdocker‰PNG  IHDRôxÔúi/IDATxÚíx\å•þϨYÕ²Üe[²Ü ˜^B ”dI²v—ì&dÙH²d—ä¿!Mo”¥‡P–j:Û€PmÍ4î6î½K¶z™™ÿ÷^ëÚ£ñ­SîÜ{çýù¹dI£;ºÝ÷=ç;ç|"„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„Øá%àï›Bò€8/¿[B!yo (ü}BÉC3@ÁÈŸß!ׄŠ<E!~wþî !ü”?z#@×ï-’æ×BH>ˆÜá׆ÚPÂ)ü‘M!„„ÝXý?žO&€BìßU$÷ù „äSôo$ôq‡F ”&€7ÿð¿ÕÇ"³„æ¨ßéÛ¼0¼ùWü“E=ùã½G¤÷­ÓŒ_#„ FøN#~ýýXÂáÄ„Îðælñ˜¼Á/VG‰:ú%˜§€¯ BH€•øÇ{E¿[êèêý²A½ (âë'âoíG’>VØ+þ'?}Î¥£*.åå$„C™wì¬a½âßc`"IoïÁ¡04ÁÿˆPÔ+þå'Ï>ûçJüÀËI!¦ KÚ.ÆYO+À É™øG,Ä¿â¤Yg_YZ_ù}^NB±Õ@}‰4fbÌîÕñ0üð$¸â_pˆøÏ<ëʲѕ—ðrBˆ-Ò·F*fòu¡ÌÐSü«û±æ_¢‰ÿ“g]QÖPEñ'„Ô @¢ °[÷¼! ð·ø'¿_`ùïÿ'”ø©º˜—“BSØ{D¢|£VëxXDŸ xâ_d ÅÿÄ'ÎúYÙXŠ?!„¤‘ˆ'e"a‹¿UÚ_ÿÊg|ágåc«¾ÇËI!)gtOºïÆmŒ@ M @pÄ_7Å"ˆÿ¸þBÉLÀÌ„€àˆrä9ÅŸBÒÎ$€˜É}X$„üýRüùBHf3ÉÙV»û7 ñXü×Äÿ»¼œ„’QP`q?¥ šø§øBH† €‘à;Ý95äžPü !$ß3f& æžøWüûQü !$«˜Üjm&ü¬ žŠÅŸB²zŸ¶~»{; aäO!¼WÛ¡ÍÐøWü/§øBˆ'÷k«È?´u4BÉ÷ @(#|Š?!„{•ÿ4B!yñÓPü !„ØÐgh(þ„Âûx¥þi(þ„BòŠ?!„ð^N@(þ„BhÅŸB ÅŸâO!„€âOñ'„B@ñ§øB¡ øSü !„ÐPü !„Š?!„B@ñ'„Bh(þ„B ÅŸB¡ øB!4B!„€âO!„ÐPü !„Š?!„’§€âO!„€âOñ'„B@ñ§øB¡ øSü !„ÐPü)þ„BhB þâ@ü+(þ„BhÂ!þâ@üKzÅÿgB!4Á6ÉQ…øWRü !„Ð;ú7ÿÅŸB @xÅß*åŸøŠ?!„€™»ŠÿbŠ?!„|¢(ÄÑ¿•ø§ýg(ñGñÏGUËÀâ2¸x ö¶º¨¿T–KyA™”«·eý$)Ð>vñ¸´D[µwÛbÒm“Öh»z¿]šº÷JcO“ìîn”=ÝMÒÔ³—›BEñ7ûX²(½Ú†jõ£ø‡ûÅ)’1eõ2¾¬AêJGʨ~µ2²÷()(öä9tźeSçÙÒ¹M½Ý*;6˪öµ²¶}£ôÄ{øK"„Ðd8`ý&EþßãË!\ RÑüQUSeZåT™T>^‰fr ŒÆØ²ÑÚ‘HO<ªLÀYÞö©,jY&7/–]Ý{øK$„Фý›-Àô;ñɳ~Z>¦Šâ’šüS«—ãú¥EøÁyî…2¡|Œv|yðÙÚÇ%xoßGòöÞ÷哿¥Òïæ/™Bà"ú1®þ‡(Uâ _Á¥@­Ë¯Äþ¬Ÿ“ûc¼FPFô.?ä‹ÚѦj ÞÝ·@^Þ󺼿ïc‰ªŒ!„Л³È?1PÄ—@0©í7L‹”Ïxš–ê;å…eòùšSµ£Q¾Òø†<³óÙ¬²„’¯ bò~òÇŒ¦þò%,&–“ó‡þœQó)Œä篯Fu)üÓÐ/Ë?=O4/’Y;ž“ù{?”¸úG!ùžH³À¾‚Á‘•Sä»#¾!‡WNæÅ8ð¢ŽÈ±UGjÇâ–år÷–‡eaËR^BHÞ€D±7ÿ3ÁÕò¼PNè4/†0F7Mü½V4xǦ鲮cc^^‡¹ÇÌôô|g,8Ÿ/>Bã?ù}#3À @€è§ï|}ØßË7†-ç­{AFéØÃŽ”§U}À=[‘v5˜ˆdóáÒ ¡ðy&ÀÊŸq\ÿiòßõ?”¡%ƒy1Rµ_Su§ 8^®^÷g. dt¡°#ƒöõbÑ7úxrôáKÀ_ÂõoµÈ5ãIñÏÃK†Ê'—Žú¶6g€d'@3Ì4€àÿnìåZ•?ɬ@!0¡|¬üz͵j/‚}¼(ͨ[ W39{7F ±äL¿ûó¤?Qü³È•‡É_&_# ¥u¼½ñðBhü(úÉ_c– 9ä´'ÉŸ'^%CŠñbd™Zµ$p«2Zh©$™ºòBhülÌZir ¦ÚýrÌO<Û‰ˆ¶µñ5ã!ǪBK’›L„·B„Ì€™ 9àì§Ëÿ4\–·Óür Z,ÿ0ö š€ŒÜlx !4~þˆCѧÈ!'U+?ýC­…ŠäÊ”ÈoÇüT«¿ éÜ@ù&4AÍÐx̤òñò«1ÿ‘¿ÀC÷?2¬d/Fª7.€@d„‘nÁ®}w¥”ª4ñËï¤Fk¿,ް#µ(o%„ ˆ†€FÀCñÿr̵숿ÀŒ€Žºˆ"¥ — !–|»ö_Ø~æc¾:ä\9½æ^f @^fH–˜R1I.öU^ŸsYÝÅ2šn%„ÐAè)üƒjó+. ]ÅK´Uš£-¡ú™úU)p _´Ì<û¬’¬rQí×eT¿y¾Û»vʆŽÍ²¥s›lÖŽ­Úû±Ni‹¶Kg¼SºbÝ}ÿˆÔvÅe¥RVXª8/&#û —êÀÛQ¥#Ô5¨ ÄÏÿ™'ÈçÔRÀëoóÅë$Â`¡t†€d ˆßùj#?³§»I©ír?l^(îûD¶vípý=zâ=Z6@ÏÀ@$3 ¨Z¦UM•#*&Ëá•“µÂ;¿‘AAà»{?ÔL±Ë°ŒŠÐr?ªûŽû Dòóß”gw½"+ÚVyrΦž½ZT­GÖÈœ9ð49{ÐéÚŒ~?}¾>ìäþ­ñEÌ ¡ Ä'ô?ZÇøê9­i_/³wþUæîyCÚc9}.›ÔÒÂô­Ë[gÈ©*íŽ"É©ªXÒ/àù<»ë%ÙÕ½‡/fË ¡ ä`T¤þ}{Ä¿øæù ­Ïæ‡UÔÿ–ÚºÝ_›·ãù¼Ùô®vœ\}œ\<òB]:*çÏ Å›ßþrÓÆÿã ÚòµÎ%dKH†9uÀñ2±|\ΟG4•G·Í–o/½L檔¿ßÄ?™wö~ ß[ö¹gË#‡æ‚/ >S4å ÚÊ0@h9ý£ò?× šÿ²•¿”»¶<$*fëQ¦åám3åÒWªe‚-9}.¨ßø×á_ã‹ÚòÊ[(¡ DãøþGÉØ²Ñ9}K[WÊ–_.KZWö:®j_+—,û©ªÆ_ÓçqŽ*Räp kÃK !Šú圞ÿ­½ïÉO>ý•ªºßøk‰BÅ_®¹Z[¾ÈØ$è˃Ïá Ûìʽ !¢EþÇö?2gç³é=ùíšë|±~ž)°$pÕº[r:˜ç«CΑ’îÈ ¡ Ä„¯¨H1W7Äm«åënÒ3l ˜?ÛÇÍKrr~ 1úLõ‰|fh Ésú©¸gülNν³{·\¹ê*öK%ð»µ×i?k.øÒà/ðEn˜à-”Ð<çój~|Ea¹ççEkßÕëþ¬MÚ ;¨køãÚ›$y~×ö6 É€’çœ;茜œ÷ÉÏÊGÍ‹òæ:/Tû<½ë…]D¾£ ¯ ‹ Ég”#*óü¼;ºvÉý[òo^=íÎÁˆÞ3jh½2@hHóùšSsRü‡Yú¹žéŸ °™ÑÃÛfy~ÞúÒ‘ÒPZÇ|b€€î@Òætµþï5ÛÔ|ÿ—÷¼ž·×üùݯÈ7Ô”>d_¼ý]ŸšÑ]ç33п‡KÕŽ—-ÑVíýBO•–Y~}YA™š°XhúùBõ¹²ÂRËïQQP~`þÀõn—çÔ®–„ÐÏT\#‡ULðü¼˜ñÆ–?§`ÖÁŒíÏÈF]äéy±a· >ȤïyÍAA( \ iqRõ±ž§AÑ ÷ÂîyyíŸQÛõzÝý0¾¼A{œu æÄ…€ÐqbÿcûÄO©˜äé91ò·#Äþ¤Ê¾žfYÚºÂÓsY9…Þ° €ÐÏ™P>FíXâé9ßÝû/¼ ìûØÓóM*Ï‹î8€ÐÏÉÅðŸš?æ…7á} ÀÐ’ÁR]ÔŸ>çÖâ1“˽5ë;6ÉÖÎí¼ð&¬l[ãùP q,Ì9¬ 4Ä{àqÀëw#Áo‹<¾|,/|® k ñ’ŠÂrÑo˜§ç\زŒÞ†Å-Ë==ß„²1¼èÌ’O ÜëA0+ÚVñÂûìM`ÀÖâ!cÊê==ßžî&NÿsÀêöuj@gç«+¡¶·-å…g€Ð¼É”z[üÅèߨ"xmûÏ·,Ðævâ)£ËFÑø”m«==ߘ²:^ôÂ9„€xJm‰·€^‹ZYéñµV2”=§B@<¢(R(ƒ‹zzÎ í›xá²±c‹Ç`/za ¡ žÞð "Þ½lºãݲ½›€NÙÔ¹ÕÓóÕ2[ÀB@¼b¸Çýÿ›;·1ÊqÁžîFO7LÞ€B@ò¯#¾M§´ƒªÂ·(Ó䃊k¤¤ ˜>‡¿oBR¥ˆ—€¸Šø<6;i\›&µ 0Ö£ö<´-ìùÒCØéŒuIW¼ËðsíÑUýÕÞïŠuñbâ‘ð8廹ƒÂâ÷k†×DªàŒçgô¹Ì=f¦§?û÷—_®½m¶®ÇÇãqõ¹6ÃÇ¢¾ÅËåBhHZxݸ½k'/ºKvx\49< W²E•ÖWxÝöµ§§‰Ý%»U! — e+ !4$Ü`½·º¨ÊÓsîêÞà ïÖ4u{kšª‹*yÑ ¡ aÛªA@^mZzZyá]Òèq ª°Šfú{ý#•Í6§®[Ç€BhH¸©*ôöFïõZvXÀ®€f•çY1†…4„Ðp€¢ OÏ×ÈÀ”ñ²€BhHÈ©.êïéùš¹þŸ2-Qï®3„аg<¾Ñ·y˜Æ^^»²Â2m—HB mÀÛ"À¶X;/z®ÚC+™ „€„—JÏ34©_»OÏןu„Ððâu`+ @o—O0#‚B@BJI¤$Ô"® €·æ©(ÂmE¡ ¡ÅëB/.¤cž¼½vÅ4„Ð0ooòÜ*5kíôøµQÌ‹N +^GyÑx”=Õk'Þ^;¶B@BL¡Ç ‡ 0æ‰K„Ð0g ˜ 03‡ÌB@B‹×iÞ˜Ð&PÀ !4$ÄÀë @Œ= ׎m€„ЀŒÑïáEȵ£ „€Ðd0Šå3„’ûKÄÛ—Kœ—|ï¥ ¾ÍÔ àEOþEURäá(`f „èkˆ‹HÏÛµÞŠÂr))(æ…wÉ£ÐÌ !¹þHºß„€8&¦¶|õºuî©öÚ0@ˆ_„?bq@ï‘,ê}?B@\±³k7 €ÏXìíÒIcO/:!Þˆ¿è[=z_|íµ×6ÜqÇ“ðâŠí];== ýŸØÝM@H¢~£›EþXK-»á†>7~üø~ýë_¯a qÉŽ®]žžoXÉ^t— -ì±ØÃ‹Nˆ·¿Óÿôê|Ùm·Ýö/uuu×.]ºô+Û·oëŸ$Ä· ¶d/ºK†÷ê±häE'$ûâŸñ'þß(ê‡ð÷Þ­Ž( qŸèö:0”ÝuÀ;ӄΦž}¼è„x/üñ×"ÿýèGÓN?ýô{úõë× oÛ·ßñàƒnÐÅ£ î2Þf¼NgÒ‚~ª°Ê³ó¡&€â™øGL>¦û•^wÝuÿn#øéFýHùk½ýßûÞ÷ŽRiÿëKKK'Ú=±… Þ¼víÚæ$ñ$ýŸsHj¬éðv`jÅ$^t&•óö5àñR¼6$EŒ¡ˆ3£à¶¯ÿ€ð«I~ý¯¿þú‹¿ò•¯<éDü[ZZýéOzNö§þãç8øúåý­—Ï 8Ù³óM«œÊ‹nwª¼½FkÚ7øîDU4î¥(E ùÂ#Y‹úQè÷­o}ëUíÿ§øõ×_¿A-tÊþ¡?¦âO@ýM®˜ ¹íˆuò ‰cËF{k;ü—ðÞðJ ¿•Ð×ú {ú•ÿæ7¿ùÊ´iÓ~S\\<ÀéIwíÚõúí·ßþaoôo6e€¤Çª¶užž‘ÖÔÊÉòá¾Oxñ 8¢ò0OG#Õ¾®}£/ €·¯KÞBC.ÞÉÛ|Ìn󻨿Ÿêé¯ýþ÷¿ÿó¡C‡þƒ«¿Éx<:{öì¿ÈÁyÿF™fHúlëÚ¡í?¨¸Æ³sb€ÀäÚxœþG(ºü†×yÈJ‘¼5 q ÃRÔ¯Úûþîè£þ•Šú‡¸}B›6mšóôÓO¯’ƒóþž[Ã"@’2KZWxz¾cªŽàE75GS¼ýÝ·¬ðåuð:P]ÔŸ/¾üÊ8ùœÝ4¿BIhíƒð«¨¿Nmâs½zûçTÄ_ ýéxàî‘ým1ƒçg€dX–ËiNòì|‡©:ìA€ì9ÈÐ’Á2¡|¬§ç\ܺܗע+Þí±¨â 0?Ì@b ÛÈ¿@æ‡飲_ÿú×ç!êWC}§ú?ýôÓ'ÔÌÿ­rèУè?®ÌÀˆÖ¸O«9™>‰ÓT7†—ëÿ`i«?3^/K0À ƒÈ?yQå¹çž;þÁ¼óøã¿%ñïîîÞ{ë­·>¤Þíƒ ,L3$uV¶­‘Öh›T–{vÎ3jN•ÛŸæÅOº&^‹¬ As· ?3at³¯‰'½5‹üÒÿšø«¾þ Uáÿ/S¦Lù………Õib‹?¬†þ4%Dÿ}¢|“Cû’2Xoý¸e±œZ}‚g眨†ÝŒêW+›:·ò À’ȤŠñžžs±ZúñëÀ–h‹§çÀ @ØMAÄøÛeŠzÅ¿ì’K.9öÌ3ÏüMyyyF š:::¶ßtÓM³¥ïÚÜ©àI‹÷-ôüœ_ø9^ø^>¯¢¯ÓÿïíûÈ·×£Ùã%€ý†óEžè߬]ÎIŸQ[Ÿ¶kŸ:Ê'MšTû—¿üåççwÞã™íoñ½÷¦«-[zÅ¿Otoù —HF @³÷my_|–<¼m¦t{\ðå7°ÓyêZxÍ;{?ð¯èñ60ºtoáüÅ&ò94ݯ‹¿Vä§ú\YRR’Q·¨Fþ®»á†^”ýkÿ1§Qâ×Ñ´ØØ±EKÇ#-ï5j0ÖYO“çw¿š××þ”ê㥶ß0Oω €¶wíôí5iìiòô|X‚éWP¢mEB1^óO½º_K÷_tÑE‡ŸuÖYWª1¾Y)ÒyõÕWïéééÁhÔ¨‰ÐÇ„K$Û¼Ýôžçç¼°öŸ¤8RœÇw¦ˆ|cø×ý'áµ9AfT¿¼ „KäTô'§úõêþ UÜ7ò¶ÛnûùùçŸ?;[â¿gÏž%wÝu×;rp»_+Ñ73DÒçͽÞ€a%Cä†~)o¯9Ú!'•ϋߵŸ À>$T&@Äù@]üËUuÍÕW_}‘Ú‰ïÕúúú‹#‘¬E(ñ§žzênõVþc‚Kÿä¯fHFÀT¸Æî&ÏÏ{QíZ 6ß@ÛåŒúwÏÏ‹ôÿòÖOi’8®êHÞÂaì?ñÐ…¿Týÿû¿ÿû¬‡zhÎá‡þ{ÕÓŸÕùè›7o~gÖ¬YKä`ß¿Ùa·À É€Uÿ^kzÛóóbûå£/ÕÒ°ùÄ¥£¾#ƒ‹z~Þ¿îžëûkÓØ½×óõø“ªótÉŠð»‰úuá¯ºà‚ ¦a˜Ïé§Ÿ~_YYÙ¤l?Y5ò7öøã?˜ý›¶4$#¼´ûõœœ÷(µ ο×~=o®ó!ç :ÝóóöÄ{äå=¯ûþúÀŒz=*E€7ø ¼ „'ú7Šøõ {4á?å”Sî¼óÎß|ó›ßœSSSs–ˆ7½¸7nüÛܹs×ÈÁÊÿ˜šú™üÿNvŒ°¢m•¬ïØ”“¶¨UÅp›U' »ç…úUu¸\VqNÎý¦*ôÜÛ³/×iUÛZÏ_‡ßv¾ÌÛó–ììÞÍ›A0Å?±°/Öû6±íO3‡vXÍ~ðƒ=zôEjŠ_¥—OTÿÑG}ô19tíßM@„K$+Y€=¯åè/8"?©ÿ|n@x÷ @¡ÙïÇþ,gOìx&0×jUûZÏÏYUT)¥Ö¢Jýø¡—¿bèСƒ®½öÚ謹—ÆŽ{i*â¯IEEEÊOtݺu¯¿ùæ›ëz£ÿ¨ðÛFÿÂ%’IþºëÕœ ç)ŠÊ/ÇüDÎU)òðEþSåºñ¿ÎÙ:óÇÍ‹e™Ï‹ÿú€u99ïø²1rÏa7ÈW†œ#å…eY9Gea… T&óÆ”Õó¦“ù @â†=åjxÏ5·ÿ몭ï9ÕÞ÷sµUï T„„ Ò¿imMmR¥Šþ{T­¢ÿ.é›þ7z'Ñ?'’ÌÒ¤Rį5¾­†ôäfT/Š/ýÒPZ'wmyÈó½á³Á—Ÿ#?ªû¶28¹ûS}tûì@]3,äŠEÕrYÝÅòƒ‘©Í²VkÙˆ]»´M³ÚcJe ´š˜¹õ…¬åR\P,å¥RVX*%‘Í@ôSŸÃ×Tª¯íÁû}³?øž_þäBÞxÒ¼mHßÊ~cú’Ë.»ìój§¾‹•€§Ôo ᯫ«“ÊòåË¥±±1õ×ôªUóÞÿ}ìÀÕ-Ö…vË}'þþI&yjç_sftþyØWäðÊÉrÕº›UmÀ¶@^G¤”!$Ÿ÷x§¿d>U;>¾¿ïã@];Ô*x=2ˆü•‡iG¶€IÀò—_7f P@/ð%üÅ—^zéi'tÒ·Uº>%áGšÔ¨Q2dÈéêê’… ˆüãñ¸¨ùÚûªk@¢Ñ¨ö56Ñ÷Ã?ü„Iô÷kÿÜ d¤Š?iY"Ó*§æôyL©˜(w«tì#*z}|ûSÒëÈÝ(¢¨‹G^¨¥zsÍÿmy(¯Ãj“ªQCjCý·†× 2mÑvÞxRGâ1¼øâ‹?ãŒ3¾[YY9.]á‡ÈCôÕV½šÀCèÕØ^QÂöüª*ihhE‹Ù›ðO?}õÃ?ÜÔk¢bßþç(úg€d…·>!Ó&LÍùó@ -‚_t¦<²m–ÖÇŽv6¿ÞÌOª>V¾UûÏjÂß8_<§ù{?T»=~È×àj“*¬Å‡ò‚2€4@1ßøÃÓN>ù䯩5ú1™~°k×.Y±b¢wlÙ«Eþˆø*(UHˆ–>Ûï­ŒC×ý÷ßè?¹ï?*©Uþ'þŸ€d!új^$KZWÈÔŠI¾x>üãúK4q}eÏßäEÕ.¸®c£/žÛ â9sàg土÷UQê'îØ<=°¯A.âg(Œ†úo µ»º÷ð¦ã’Uÿ>¹}¬\òðÃ׫ˆ?¥]úŒ„lÙ²EÖ¬Y£‰~SS“õëâšøÜŽöó*TíÀË*K€uÌnÑ·ë°ŒþiHÖ¸gË#rÄßúê9Al/öUíÀÜ /ZмP6tlötSüŽQãcÏø5Fvš/'>½óíº•–h«,jY®uP„ÝçÇŠäˆö‰r\ëRU-y•âZü•aÐD|ðàÁ}>Q_½zµlݺU{Û¶mZ @AAŒ7N3 ÝÝÝvÑçôéÓgªw;ä`ë_Ôeôo–   ÙÀ0<æ3NðåóÃF:úf:è^XܲLÕ.,Õj¶¨ÂÁ¦ž½»A×– “IªžèU˜xDåõï_°µs»fà‚ÎËj.EØ @¶Ú Cwbertëar”:JãýRújg?-⇨ˆµ–òß½{·–òß¾}»Œ9RÔ¾Ú1yòd­ PgçNû=+–-[öâÒ¥KÓþ“‰3@<áN•B>©ú˜œ¶°9a@QeTNÔŽX§f¶vm—m;¤KÍ7@TÙëÑÚ¹pÀåïo×*9к…¶­¡%ƒ5‘‡ð£š?H ríú¿h?_ÐAKê¥uß‘²‚Òðf ˜°¢¦§Z‰þd9²}²ÅS[0`€¨É}<ù-Y²DZZZ´”?|=–JKKEÍÐÞê òWÛùZžS ¶«í~ý[õý§ý÷ùs§ Y-xl›­ÖÞÿ)pÏýÙcËFkG>1{ÇóZG€‰y³éÝœ·¥fÕp àPP[ßY«"þ)2¶³Nû¿ëï¡Ä‘¾ÚÖWKù›Jˆ?¢~µKŸ º Ò‘¿ê,ìóDÿø:+T÷À j9a—ô­ü·[pý3@²ÎCÛžS§MI#þCkîÚòp¨~¦'wÌ‘/ <-%å4ÅLųSÚÆË±mSe ŠüSkõX§Ç¿^¸gÖñUš^:;;µ¢?…#FhŸ4hLœ8±Oq`¢°‹þï¾ûî§ÄÙŽN³†f€€d•U‰}ͺ[å¶ÉWçlŽ=±Ãs~µúZµ•ng¨~®OÕTÀ·´Z”Cš` @MO9\öÙ6IJc©­ïCøkkkµ5~5þ×öëQ০óIss³¬]»V[ï×kð>–ŒÀ2Ý8`e*^Qsÿýcí¿Ç$úŠ}ëŸeôO@|øpM¸e5ÔgåÊ•Z…?L¢¤ù±T#1iÒ$­SÀêñd…šú7Oe¶;ˆþí6ý±þiˆ§Ü¼ñÿ´ùìÙœNÜv?ìßvnß4]Ž®:B½þFÐ4ÚGŠ\Çh5¸?õ¹ˆÔ!üÉÃ{ì@å¾jÉÓ"x¤þaPݬÌÄa‡f[3€AŒ¶0==ôÐ,9Ø÷ŸÕ蟀x æñ_¹úrã„ßÉ„ò±¼ 9ro›™?+Ú:¯Vµ(7MüïÛRiöƒA=‡µ“i*ÚïM½V¯èÇú¾Y+ŸmmmÚLˆ?Šý°Ëßøñã1FX3'ËvŪêÿoüñæ^ñÏêÚ? É ˜[~E¯ ¨/É ’#flZú} ¯~æ¥j<õïÖÞ ¿óÿB3"8lƒ€PÉ?AEùG´M”Q]ÃÓªÛ€@#Ò‡ðÛEçf §‘?Zü°îê~´ùÁTàý &8ZB@§ÀÞ½{­¢ÿèc=7޵»-㙈þiHNhìn’­ü¹\5î´]ûˆw`ÐÏÝ›–GÕ.‰ùæ\»þV¹¢á?CQŠ €’¥‘ÝÃdJûxm>I<½n!Tñ£¢…}X›O¬õcºÖû‘¾6l˜f& þøÞú°' {`Õû¿~ýú·ß}÷Ý rpê_ªÑÜDðÙ@üCsO‹\¾êwò‡±W¨q­‡ó‚x@g¬K«ö£i~^_‡—Õ†P;Õ:¿hø±/¶\N+à.€AÝdJÇx™Ú6A*béÿHïC˜1£ßÍú¾}ÌõǶ=ˆ½^70fÌ­xÐ 6éÿø¬Y³’gþ§ý›Š= ñX€ øá¨—¿òE^,‚?¤¿—«½Èþ½*¾¿ü§ò‹1?–#Õþ ÌxÖòåÞ>AÓ›.H¿c}…}©¬ï'ƒJ}U‰¯­õ£ØÿÇz?Æ#›€ª¼ï¤þ1)Ð µ-ð{óæÍ[-é÷ý»ŠþiHÎÁ  [6Þ­íÎwYÝÅj®~?^” 󺚉݆ۥ5ÚÆ‹‘¶ÑýñÊ_Éi5'ËÅ#¾)µý†/ j°”áån–nÁæ;Û´)}#º‡fdé;ì! GªßIž£{‘ªÐÇz?„Æ š¹€à£ÐÏi¥¿¡ùÞ¶Í2úŸ={ö“r°ï߳蟀ø†w¿&KZVªµÙKU]À$^ s•m~©á„AzgïûÚœ€¯9WkU Ó²ÂR-›æ'úÅKTË^ŠöÇÉèΪq/3[^#ú†è£/Ý4"ˆÐ-Z¤õùc½â·n*ý“±ÛøG úø¥—^Z!gþÇ$µ¾×Ñ? ñ›:·È®ü…\0ô«ÚB̤Oea/‚Т:sdz2kÇs2Mm!|Þà³ääêã|µ“ ²e:6iƒÖ´¯W6׫÷×ûFüém¯“‰ ÒÐ5R ã™é´@êxþT«ù­@Š~áÂ…ZÁ†ûTTThÕý8¯›J#PHhUü÷ì³Ï>!×þí2þiˆïÀXZT¨¿¼çuùÞÈo†z#/¸°öåõ¦·ecÇ^ ‡Ôà(R­‚S+&Ëqý§É±UGª!ÔvÏÙßÏ‚¾¹s«2Ä[µ·:6k¢¿^‰O¼ÇW× “ù&v6Èøöz©ëªÍèß*"oˆ>Fë¦*Àv`2Ÿê½×ÄÛú"Àq¾8ŸÛJÿC^KJøaÌP…‹Ÿyæ™%IÑÌÀd%úߟA .‘¤÷‚Þ£0á€Ù)N8`%}þïÍåmÏ¿`jà¿×~iðÁ¾O´bK’˜0²ßpm‹è1¥õ2´dˆÖE0¨¸F{; È¾¨ -ÑÙÙµ[öô4%¼Ý%[;whY°Ýݾ¾(äßQ¯ÖõÇÈÈža’Éò´ðA𱾟h?Ìñÿàƒ´‚?ˆ5΋íS­ôOFß-Ð Õ÷ÿ5ùï õ.vÒûÿž¤#*öÛÿÒЄTj_¨–‰÷üaí2·ñM^ˆ,ƒ/KÕÒUa¤@­Íï°öh‡tÇ»]„Y­ÒÖô!ú™*ä;póV‚‹úÙXÛ7‹ÌQéÿÉ'ŸhÃ}€¾!†aí¿¦¦&íó,_¾Ütý_ Z÷Ío~ó2õ.¦uôf¬ @Ô"3 rèðG¶ŒK$,lY*?ýô·Ú,÷/>ClÍõmü‡jµÄ†?Í*ú$ÙBßíÞ“W[,íèªí´7®³^f e/ŒÔÅÚ>"o'[ðfTú/Y²D ÷ÙÀd?<û¡ ]°œ€ €o¿ýöÓð†b=ø'kkÿÌ0hÐþtÚ€“äÌšÏj›¼D xQl˜³ëE¹qÃÿñBCJcý¤^mºƒª}¤øËc™OÁ£’b áÏDß¾PéáGµ?Šýí£Ç¿ªªJ}ˆ¦Œˆêí×#ÔÞ;Tôÿeö¤ý›þå nP(õÂîyÚõ×Ï 8QN쌣̻Œ9OeMÐn¹´u%/ÑÐSûc;Qħ¶ÆgÞHCh‘R‡èãm¶SüF@ð,X õùÃÀˆ ºY BÚ?S…†vÅï½÷Þ3Jü[¥ïº¾Yäwp¤ <{ÔÞÏì|Q;P¥=­rªv €pRùxO*·ƒÖmRÿ}¹DMÀ‹Æ£¼ yúÑÕ›ÚWQþ žìŒB†ÈCì‘ÞGÄŸ­*~' Õb?ôøc Å…|˜€t+ý@êKF¨MöÝ{ï½/÷FýFѽ“ôÿ!ž#•蟀„ôsc­@Q¶§Z¸Æ—7¨·£¥AUpçrµí];e˜ª Ϩ`ÿÇ¡çÉãÛŸæ‹%O¨Œ•KCÇHÓU'£;FhCz²Di}>æægjB_: Ò_m²ƒÍv´ÈÏoܸqZ?ÖþQx˜i¶nÝjú9µ­ð ª0pŸ8ëùÏjôO@Bв° ,ŽDjÔ²AmÉ0ÕÖ5L[S„v®êãÕêýj©*ªÔŠ S©vîT{Ï·ª%жX›ìRË|˜Ãc]ûFYܺ\ËX\=þäµd‘ þ­öyMM¿ƒ!áŒò‡vÒÖòǪô~¦«ö“E½óØ€Ât.Rü‡„ÄJì1Òi˜ oå ñGú©ÿLÓÞÞnºí¯Ê>´ßsÏ=Ï&DÿFSÿÒ‰þiq¶$Æ‘l ’AK²¨+ÀMTï<ÀÀ˜–hëþ?zÕæ¥§Ô[•èc˜‘·l¼Gî=순,OàgúϺïÊÿ¬¾Š/„P+ÕñhëùêÀT¾l…èCP!¢ýdñÍ¥ ˆF£Z¥ÿG}t  õuuuZ‘ßäÉ“µ!CÙÀ*úWKsÕ»¤ï¦?‰Bo·á]ôÏI€„d’ÍãÈ4[:·©‰‡³´h<`Ì- 'ßlz—¿ä ¢nõµ=Cd ¿k” ë,ÙÜ3ñ±¦ÁGϾ¾¦ï‡h?µÆ® ?ªýUµ½ö1 ÷A-*ý!þøY²e<̶ýU» ö¨¡?O'Eÿv›þd\ðiñ l›-g¨6ƺÒ99ÿÕ}O>j^Ä]¢úúÎRûXÛÏvDÉ|?ªåÄ>×Ñ~"---òá‡b]+ƒIÁz? 2“&M:$[‘I°‰L€k×®}Sí7°Yìûþãb?þ7cf€€ú„?oº[®ÿ«œœ#l/Rˆ¿lº¿ ¢­å÷ T|£T¤?*«kùE{J>Þ"ÕŸªØ{m Pyÿþûïk3ýQé¡Ç:?L Òÿí‹ç£oÌ“çfÑú‡-£ÿ¨ËÈ?+Ñ? !9sú_ozG>7à䜜ÿ†|I^R/}Ú¶†¿ P/RQ~­6}oLç(©ŠfoÚ%"d ÁÑ#äÄ x~Kí[±mÛ6­ÍEx¤ø!þh÷úÿÈ‘# JrÆ#ÔhßKɨ"Ä^{íµUb¿éYñŸdË Ð’cnÛxŸê8:'[Ïb‚"füÇŠ+/’ÌSÝS© >úòGªa<…’½žyˆ#Òú|´ÄAøÒMíçjç]·nV鯊ë´ÁÄ`ºŸnœVú§k¬ÿÌ;÷Ù¿ÙObßTÌwþ³Ëd¬Úƒ€³³{·Lß:C¾?ò[99ÿ¤òqòÕÁçÊìÏó—ჺÈÄŽ1Jøë´–½l¥ö‘ÖG„¯GùéöæûŨ¢:m§=¬÷ëm~úV¾¥¥¥Úz?Ì@ªÂîæq(<´ÚôGíú÷QBôoõ›íðÇ6@BÂÊÌÏÊYOÓå‚ïŒøWy£i¾ìêÞÃ_F(RqýÈÎaZñބΆ¬¥ö!TzZ‡“m2!Ô^fPà‡yþhõÔ?€9˜è‡ŸâoVéŸ C€Ö¿äÏë¼óÎ;ˆþ;ÄÝà»Þÿ ¾. !9snÙx·Ü4ñ÷Y-ô2³þ£îÛòÛ5×ñ—‘!°¹_[ÏW­zűìÜn!v{¤ôñV¯t÷Cj?ÓÆ µµUT5½6Óß¾ý»-ê[ùâgGÚ?¹xÑ©°»yžúã‰@õ¿ª&`—ûûºô]û7ücµÓŸÙÎl$$,,jY&/í~]ÎtzNÎBDÌxgïüe¤zCj­zSÛÇËøÎÑYÙ\±×Ãm¼ê\­ù£Ðîã?Ö*ýQp‡ç€ê~¬ócôpr¥&£|3Ð÷®#Ô,‚¿ªÉ€mÒwW?«êÿ˜dh›_BÈí›ïW"|¬ô/ªÊÉùõÙÙ~ZÑWéýz5c’ZÓGz?Ó‘¾Þ“¯GùN÷«÷:‚Ϧ1@¥?ÒþØÐGïñG±®Ç¨Q£ +ýÓv§3›ü‡±¿Ó§OQÿ¹úcùg<ú§ Ägìëi–{·>*—Õ]œ“ó-,Öþ“ܵù!þ2,(T‘>ò@ôÇwŒ–’xfG:#ÊÇZ> ÛpØ °ñsj?Ýó¡ÂÅ~hóàd<ô­|Qô‡‘ÄnŸO& f`ö¿*Kñê¦M›PPÓ-öé³e€ŒŠ= !`ÎΗäì§Ë”Љ99ÿ?ýŠÌÝó¦¬n_Ç_F¢P¨(ä;¼c‚&úýb™ÝU}ëzµ¾>y/h|&³X_GÄÿé§ŸÊêÕ«µï­oå«¿Mœéïeêß*úWÏ;úøãÏ‘C[ÿÜìú'ÙŽþiñ!Øh·MºZëÓ÷<ºj³.]q¥ö\òŠh¹¶¦Dû$Г¹¥½b‚¯¯å‡1‚O…îîn­Ê¯÷øë[ùBôQéow½Ò-ð³z,jô"Äd6nÜ8_Í&Ø,éoù›Õ蟀Ÿ²²mµÌÙõ’|uȹ99ÿaäKƒ¿ Ïíz9o£} æ9²m¢4¨‰|™êÌHž¾gW±–Ô¾›¯EZ)ÿ5kÖèñ×ÛüpÝ`pݼHû›=Öj׿çž{cõÖ¿Ä©™Øò7£†€€Ÿr×–‡´û0³?\<ò›òVÓ{ÒÔ³7o®9¶Õ=B‰þ´¶ÉÒ?š™-c±~¯÷å#Š… sj?óíÝ»÷@ä¿k×.ícz›*ýa¿·×i=;¡?·dTWÀÒçŸ~¹ºéÛè?ë3hñ1mÑv­åäüU…•òƒQÉUënýµ¢6Ý9¶åp™Ô>F«êÏT¤¯ñéÛç†E¨³ñÜÐR·|ùrmÍF_ÛÐРù¡Ò¿¶¶6kÂîæqèH0üóÆo$þéw<þiñ9/«zÎôy9ªêðœœÓ _Ú=O>l^Êë;²k˜ßr„ŒU#yÓMóC4áësöƒ:'&ëüHù£èÃ~âGª×QïõOe'¿L&šÍýWÛoU­óåÐMœ¶Š—Ñ? !>Ex7o¼Kî:ì)Šæä9üWýÅòÝe?–®Xw(®éþõý:9±eš ï’¶è£b_ôƒ6k?ׯ‚Šˆ_µÌiâßÑÑq`#û¡×?±Ò?QÏ„!ÀÔ?³Á?jGÂ9ªM1yì¯Ù€§›þÐPÖwl’'wÌ‘¯ûûœœT¿Zù×açËý[ üµDïþg[Ž“a]ƒÓú>hC«©©ÑŽLòù)*Ïösƒb¤/Rꬭë»ùaùo±±O¶DÝícñµx®F(ãÒ¬Æþ¾*}7ý1Ûú×Í🬚Bv <½æ^24'çÿ×áÿ óßÔÌH¥¶ÙýLó±ZÊ?Uôb>¤£õ>ý|àSýˆôQì‡tº>àGßÍO½Ò?Õh=Ó†;þaç?#TíÂKêóͲ¿øÏjòŸÕŽžS „ßÓ©FóÞ¾izÎÎ_)’×_’“ŠÒ»î}±é4¹`÷—R} /ªÏ§L™¢£AüSÃl|m¦"x/Ÿúç1Ó_õËk‘?Äذašè£Ò=þFYœ;ñpóœSy\òcÍ¢µŒÑ­Öþÿ8­øOe3„ä#Ø®÷ݽ äÄêcrrþ‰åãd|yƒ|Ú¶Ö÷ת(^¤÷ÐrdJUýH=#ÒGÄ1J7Ú[Ÿê×¢ÒkþS}ÀO}}½ :T«òG»_&¢õL?] (N4bíÚµo¨Ÿi§8Ûõ/Ñd]ài Þt]u„”{vÎÖh›¼¨:Ù>Köt7ùþaLï™ûN–ʨ»H]ŸÌ‡¶3£Â3¦öÓ;†ú Ò0hD¥?RÿȰ$Vú»õl³èê©§žéþÅßwci 8[:·É£Jˆÿ­ö‚¬Ÿk{×Nyfç‹òÌ®5àwJcýä³ÍÇ©é}“\=Bñð£Šß­è„­8/ÓçÃÇõ©~*ZÖÖÒqõÝüôuÿLŠz& &šýUÆà“yóæ­–¾ƒ|9ö—€ðȶÙrFÍg¥®tDV¾ÿÚö òøö§enãÒ⚌Um}gï;U›ÛïFø±æ áOÔÃ>sçÃú>†û@ôQì!EEb¥?Úþ²-ê鮳^Îmú¬¶îïôð£Â€|vMËîÝ»5чø#òÇÀ˜.´P"ë2räÈ”~6/ gµéšcШÿ¼&}ÿÄÄyÿ¿ä:ú§ $Àìîn”¶=)ßù-ÇiuÈ_w½*3v<#;ºvòçF‘ßYj½ßém¢3}6Ä7hÏ Ûä®[·NµÂ?| *ü!üuuuZ ÓÑz¶ *ÿ1ªØˆ… þUÍþG_ ÝÚ¿oÆþÒ2fîxVÛ°g\Yƒå×ííÙ'Oí|Afí|Nš{ZûóÓ6UNß{‚㨟õ3µŸóáó¨ð‡h"j^¿~½öõXï‡ècCŸäÖÊL‰z6 Uô¯2÷ßÿ_{£ÿÄÁ?F™«ŠOÇþÒ2¢*•ËÆ»å¦‰¿7œÒ·­k‡fžÝõŠ6M0È`¨Úüœ€5~DœN+Ì™ÚOý¹éú Òó8Ðæ7qâDmŠýð{p»›_. ÖþÍ¢ÕÍðšb´GÌçþ[Uþç,Ú§ $„,jY¦õ¼¦m¬³¦}½ÌØþŒ¼ªZù¢iå³sü±{Ÿ°¡ Ö›[ûü&¾aYv@¤Œ6?¬÷c²&ý¡ÍODþÉc}ýRàgjÌ¢õ}bO>ù¤>øÇ*ýïfßœM¤ $ܱyºœ\}¬lìØ¸V>;ŽlìXüQaŽÃ.]æÔ¾WÏ £q!þØØgõêÕÚ¸\,·`ºf+ ãÄ„å¢ÀÏêqØòó ŒPS ?˜?>fw‹» 섟BHjìëi–‹–þ—¶Ö&ÆuÔËÔX_' Ò<±ÈŒ|öžzãQéñ×{üa¼Pð‡áJ¨½ÀãݦýsmöGà 5øÇ(úw3PüýÓ"Â&þµ]C弯Ï;ÚÐHüÃ*¾¹~nHTøCôa° €K´÷á-¢ÿL‰³×†kÿfÑ¿jo\5sæÌ…Ò·ï?*ûK@ ¥ñ~r^Óé¶;ùá¦ñdž2Lígÿ¹a#é‹´?"f¬ó#êGôo6Ó?[† “FÂoý¿õÖ[úØßn±ßö7&>üC@ñ7êVø¥ÆÓ¤´ÒQäñgŸÝç¡Ç,Túëm~h³D±ŸÞæ—XéïE´žéÌÄß,úWõÛ§OŸþ–ôÝò×nýßé f!œØ:MÆtÖÙ~Öœ“ÅŸ©ýÌ?7¤ø‘êGÔA?hóƒØO˜0ADþÉ•þ¹öTg·öÿÁÌQû´‰³µ·ci!sýOi>ÚöëPm•‡ëü+V¬ÐŠý0ác~Ñf‰?XëG»¥Ù„Å Tþ£ýÏ%ü{ï¹çž—“¢ÿDá·ÛøGüjh!¾ @ý;kï©Ú[+Ðg>|øpFðY>ÚúöÇF>z›2.ìƒÑ¾X~I¬ôw+Î~1~«ècÕÒ*l»Åýè_ßDû4„ßrBË2¬gõ K¥šQiž©>㯅 b´/ÄéÿöövMð±‹Zü¬:.üXàgõ8«ÊeÚÕØßçäб¿v)»1À9þi!¾ ¦§ZNl>ÊòkpS‡ø˜­7ûM|ýüܬ¾ÇæÍ›µJˆ>züa üȺ åJ·Ï×Ë(ßÍcýcYà µ¥ñ˪àq·šþ·kô…ÀÓB|Ï™jØ]Ë_MM”——3‚ÏÒùðxô÷£Ê_oóÃǰÞ6?˜€ÒÒÒœ {6 ÕŽêãÝ>ø`òà§|9ø‡€â+êºjetç˯ð¸)ú£1p÷µˆ„‘êW[ÜjéÌõG¦E/ö³ªôª!@wÚÍPfèoK—.Ý*ÿ¤2ö××u4„Ü¡n‹§ï³ÞÞ7v¤Ÿý"¾~àS=Ÿªr×*ý‘ò×ÛüPh™Xé™þnŸŸß Öþ““øížx≧¢»-Í Å¯Ñ? !$§Lé'C»­ ÿúÇö¾Œà3"~DþXçGú3þ±ÆñG¥?ŽÄs­ÀÏìq0=¦UwÕ俵âlì¯]€]„Ò熬þlÓó}ågË3µŸ¹¯Eú•þC´ûaw?}ªŸ]¥®¢üLÓ.úöÙgg‰³-3ö—€â&¶7È€h˯IŽ@s%û9‚Oõ|Hó£Ú?±Ò_oóCÊ¿²²2¥ˆ=†C0ÓÀâÚ|ôüóÏ/“CÇþZ˜8üà !$¿9¾õËÏ£âSçÁgî¹ÌñG¡DiTÁ£Èó þ‰•þ¹ölTþ[Dÿ¢¢ÿ'åÐÊÿ¨‰ p’òç€O‰ !ÄsPõ?¬Ûºªßh[Ù ‹o®Ÿ†Ý ÕßÜܬ¾E¥?Šûôõþºº:mÉÅ­Èú¹00ù±XæÀÏo†*‚üä™gžYœý;ÝøÇ÷ci!¾àØÖ©–ŸGäH”©ýÌ<7¬ó#Õô7„b }Ðã?räÈ•þ~ŠÖ3ù8<]VÌ™3çqٿ寛Mìªÿ}K¾€@Ìg&$ÌTE+¤¡s”éçq3·‹þ™Úwþ=õ"ò‡øc¸†ü`yE³Ë ø™=Uÿ¸f¨¥… Ñ¿Ýà«~_ŽýÍGˆ4 !ùÄámµ«èÛ͆A|sýÜÐÖ‡J2(ú«®®>öwRéC€:d=¬xî¹çfDÿ‰GTÌûþ©+¬ „xúwxûË/ÁŽs?m ‚àa¦?Ö¼‘À´?½Ò¨ôÏ…°çÂ`¼±Ùv¿½Ñÿ¢Ù³g/ç3ÿ¬ûû~O€¢ü¹í«=ƒ02¦k”ôVš~‘?¦Ð1‚Oý|xãÆZ¥?ÒÞ¨ôÇÇôüÌ*ýD6H~fÃÈ_« €jûKŒþízÿÍ–Xæc €‘) „xÀäöq)EÿLí;û¨ôGÊ© »A ±Ò‘¿ÓJÿ\Eë™~2!fþe”Ïš5+9ú7kù ä¦?ùf¬Ä…€„ä€Âx¡Œë¨3ÿ|aá´t®…:#7!Ÿ*ýí£èoݺuZÔ«Wúc#%ˆ?Ì€¢u¯ ÝÐÐ[ùßžý›õý»Ùù€Ä@ìÍŽ(oË„xzÿûÅÍgúc=nîLí»ÿZ÷¡Â_Ÿì‡ÿ¨ô×·òÅÚ¿ŸÄÙ«sÚŒüÅ4ÄTôÿ‰Aôš-óÅ$‹¿]äíu{„˜Ô1Æòó0Aß\?7´õ!íßÖÖv ×K)cÇŽÕÄ•þ~ßÉ/çÄuA6Äê¡jÇ¿Gåе³â¿@nù›O«,€þ~,Á´Ï;vÖ)ê-zŽŠ{\“„£ áˆ$b`8"BH~1x?ñmâßI‘*î+¿ô‘oüFý¥Vøa·?/Zÿ2rƒñ‘1@u; þ v¨ôG €^é·‰¦*HéûäǺ}œ“¶?•1ùÛ+¯¼²ÒEôÈ-ó͘ â¡ÿ"ñ‹oé}[”p81 ?ÉcÑ·~ýÀßMñ™gž9^ |YªÑ˜#øTÏ…?TúãÀt?ÐÐР ?Öû­*ýƒfÜ>Æ™¡ B÷ôéÓýwf úlAy €UÊ?ñsV&¿äný5‘ð±¢ñ/L¸‘YehH>Gþf⿟¢ã?~²Õ7u[ü—ÏÆÑ-ŠüPÜ€ÍmPÜ7nÜ8-åñ/**: ša-ð3{Úþ°Õ±K–,yaÁ‚› @ÞEÿaÊ™3—fôKš<¾ ÷ó 74a€Pü‰Lÿ:µ}˜Ù7E¥ºQk÷8ô|fƒb?ù¡âí~X>A±*ýý£›"—âœkC`·ÛŸ2mwÞyçL1Þñ/o¢ÿ0'f –tcJ~³¯OŽþ n~B#@húAÂßOL­GWªÙþ¦ýýËq¿ö Â¢ñÇz?ŠþpíÐæ‡B?ôùûQœ“›M#kƒÃ ù?­2(;Åxê_&¢€‹Ü"  hÂ[3ñOŒþ¹þO(ü}E_’„?Ñèf¹H­ÿO²ú;ˆù]|sýÜ0Εþz±25552fÌ-òÇûA™à—­Ì–FÐögc¢vß|óÍODÿVÃÜFÿœè#C`$þ—â_ Ækÿv±·ÊEþÉêx³oˆµëÄêÿ¬ÜÞQ€>XëÇ[˜6ÿÐ9ñÆSO=…‘¿Å?ôÑX €YÕÄà3ýäåDá/0¹ñ1ú'ùý‹þ%Fÿzv ®DËtû?ˆXrû_¾ûÅ_DüèñÇX_ ³Á?Úü0ÞÑ¿™ø%ZÏäc1ùЮðmùË_¦KßÂ?£Vp'3ÿCý‡1(þf¿œXÒÍ,Yücâ|ÝŸ€ä›0[û×—Ñô¯ÓÞWûÏ7˜}cLªãšÿÁï¶>}?´ûAÜñc¦?Úüô­’ó±ÀÏ챘‚ˆŒ‰ï¾ûîÌ•+Wnç}ÿyý‡ÉØM42‰¢OzkÔæDÑ'ù"ôfŸ3öShðõÚߘ®ÑfßÔ¬ú?÷hllÔŠüÍêc}õJDýV“óÕ`.Ú"­PŸß¬Úþ戻¡?1 ÑŽù–A·Ê$ÞÐâ&ÂO@òÙØ ý1ÿ¸êï/T3þMa];L|ªçƒè£ÚˆŸÃLŒõE›2%n¿&DÖïFÂ.õ/Sëþ÷*£ ï÷Ò#îZþb‚ÿòÅ­û›™€¸X§ùüÑ|2FÅÉéP}¶†f >ûÙÏŽRëÕÅV Ÿ×üñ9ìä‡k0ÞÃ~0ÆëýHý£Ò3ýígúœ0Jv=ÿj9eþŒ3>㿘˜ÿYeBý‡1àÆ™qõÓ|3‰™²‚¤¯Ñ#ÿŸ4i’iôoT˜iñõƒ‰0ëûXïG{ŠýPü‡%Œõ­®®¶¬ôÏwCà$õ¯ê:î¸ãþµ‹qáŸQ&À*ò]ôF`g̾6î ê§à“|~#P`ùG’n¤%b¦ QüómÜ/*û!þˆbùà `2"ˆ?Öüñ}Ü>ÿ|0÷»cÇ»žyï½÷ž\¼xñf1Ný;]q^@`g¬>O@húŠÉ¡Ó6ù*=Êì›;Yÿ£1@ôŠ6?}ÍŸÓ+ý!þ¨ôOü¾¬øï 2&0PV¨¯YuÍ5×`Þ?RÿÝ)Š wùËw`f$IÜ“72%Úô!Ÿü7’ü·“¾iÿägDŽt’ÈêMÀGèíG¥?„`_Jµ[¢e¥¦EÖÏFÂì¹vvvjÝV¨lJ×í·ß~«zÛ*wû3úc7õ/ÔÑØ €‘ 03bõÇý“<#n`’_ÿ‰¢ot3Ô– Êˡ95a÷«o胔?Œ@b¥?Rþz¥˜¢õL>ÎaÕ¿ÌŸ?ÿ‰wÞygX§þýåEyrC‹8¼Ñ™EDŒþ 1ΉD¥²U–¿¤ÆôÆSäìÖc°yófM¼0ÖÃ~ð³c¦?Rÿ0FÙVü÷Rÿ«¯¿þz=õß%é¥þCýç‹°‹äíÖú)þ$Þ.Sfõw9ú裇ʡ3\¿ƒTž Öôt?ÄëôJµI’Öãït¬o>Ìù·«úGêÿÎ;ï¼U™·©£ €F0B#@Á'ùÑýXÔšQ ŠÚ†›žLÝØÑï”>•ç†õõë×k[ùb¬/¯ÏôWµÚš¿^éïרÛ†¦ Ýv êÿ­·ÞZ-ÖÿÌ6û‰IÈGþÒ˜ÿ¹¾Oò³,XÜ$`e$´C¥¶‡š}Ä?Ìkþ¨ô‡øcÈÏ–-[´!Ý?fÌ­Ò‡Ñ÷Ïç?³¯ƒø£MÒ ¤þ¯¾úêÙr°ê¿GÌÿDŠ^„E¼÷þ‚i H¾ÿMD\DüÉ;œÒúÐ÷@ªÂV?þ#F`S$Í À?gC±$Ì”j™¥ç¾ûî»#¡êßMôïtÚ_hÍ €sS@H‰80Nßgn€Zë®2{€›ílsÁ§úÜУñW;ÏiÅ~‰•þØÍ•þ~Y¿'-@Uü?6oÞ¼•²?õo%üQaá !ÄÔ즪„Éû(Ðßì‹õõÿ°¬ùãkQè‡jŒõEµº^éÁ>hó³{LCÐ÷k‘ú·›ö§–W]{íµ‰ì¢«ô^4„·Q¿.ö“ÿG¬ €hiTúCøÑãb?¬W'Vú#ò7*xt*–aYÏwsN,Ømô£2Í7Üpƒ>ðG/üK§ï?o ÿh!™ÂÐ¨Ž–‚<î"áGÁÚý@b¥?ÖüõÇçûz¾ÓÇ¢å»"Ú}ùìÙ³o[¾|9*,“×ýͶü52yYøG@IUìEÌwÇ<°O€JyW:1^‹}¦ŒÒü~ô÷cH @ªôèÑšø#ú·KsÓj¨ôkiÅ¢E‹þúÐCÍëYÿVÑ^þÑBÒ5fFêQ £E€ÙˆàSýÚ––Mü±Þ¯G«¨ôÇ559¥óç³!pºËZþþøÇ?>(û·ù5kù3[û;0y•   „¤› 8d+mµà8¤™MMMZ‹Ä•êøYÐßÁ>½Ò?(Q·_ž+"»uÿŽŽŽæë®»îeÀ0ÐiêŸ=ÿ4„¯ ª€/TGZK~4)ˆ¿>Ö•ýXïGºÀÉxã|/ð3ýþh›´û¶O<ñÄ­ .Ü(Ίþ£3ñ·~vBH’À›e|LÂ¡ç­ ]àc€ô4&ú¡Ðÿ/++ÓÄE(öÓ§æC´žÉçŠA?0v¨Q¿3üñ÷äЖ?3#à¦÷?/£BHºf y@DÁ¹¾¯øu&"}½ÅO니=þXëO¬ô÷«ÈúÕèEvëþªÍòcµî?Cö¯ûwÙDÿÉUÿN¶úçcôO@q"ö‡ŠŠŠ’L<—Ækü˜ì‡õ~}¬/¦úÕ××k‘?Œ@£n?<ó0ìÙ+T‘åÖßþö·7'úMŒþS­üÏë@4„¬dTdœÒ}ÅOû )ÿ+VhUÿÂ-|!üˆþYà—Úãð9DþÈ®X¡2m7ß|óu*ó‚Þ@¬û'¶üY™€äÂ?¦þi!YÊôùœš„—ÑûŠ×3P鯷ù©Ês­f)¤û!þÉ•þF¢Ç?óÇ!›‚ìŠ*3›1cÆ-óçÏÇ¿‰ýþV•ÿnÖü%ߣBH¦ AD d±ñ“1€8­[·î@¥?ÆúêÅ~ØÆWµ7æU´žéÇÂ\9¨ø—·ÞzëQŠþŒúýíÖÿ¶ûåu !$ã(‘Lù¾’«}ô }ùë•þ}Dþ¨øGb¥¿ŸEÖ¯†Àá˜_d^^¿æškžã¢?3gÛý2õO@ÉVF ÓKÙŠöu ö(öK¬ôÇ&>ØÊâ´¿Yë" ³Ç¢ÝÛ%Û±uëÖEW^yåêÝ6—âû¢?³h?oÍ !$%¡7û¿ËB7‚â•Ø}­¾¡ÏÊ•+Túc¤omm­V臹þ\ÏOïq¨£p"þjy`ÃÏþóë1ñOý¹£èßJèYH!™BµlÅrýœD¥‰•þˆò±™¦ú©VFíÈÇh=“çĦI;Ó§Dïÿ*Tk \X‡CñO¥å©BH¶PÞ=6!k¢îô{`-ëýˆü¡b¬ï„ 4ÑGÊÅAY¿}Ð]¯?Úýn»í¶«?ùä£1¿NÚýìÖýÍ¢ý¼74„tˆDsÝn„%]±wk P‰Žõ~½Òëü´÷¡Ò3ý½ØÉ/̆À©ø+3ØýàƒÞ0wîÜårhÅ8Ÿùï6êg&€€’IñªÍ«ËêAv¢-c€ÿcËY´ùáÀó€à;V‹øñ~b± üR{¬SñWŸÎœ9óÖY³f-ƒÿf©ÿd#`ý' }Þ·üÑB²M\€žt3™6#5S^~ýaÆI]]–þ‡øÛ‰ üì ñG1¥“õÕW§?ðÀoJßv¿ä ~ìRÿqáº? !ÄìÛ·/#€L­ù#Íñ×+ýñ=1Ösý‘öG¿*çã(ྠà×׉ÁSƒ~Wc~Ÿ—CÛýìvùsjÌ¢}šBH¶PvÝ™0™0(ðCÄ¿|ùr­Òëûîƒö>´ùá’Èúõ¹b´occ£#ñÿý÷g_uÕU3Å<íof’ßí Š? !$‹ÄÕþîݽ7ÛHº 5>ü ÍFëüz± €U¥? ósb´¯ú;úúÅ‹¿¤v÷{´7òïã‚?»èßÌ$ =×ýi!^‰¿þŽªîîT£s wͱÛ.Æ‚¤·ùá|Hóc¦?fùCüõJÿ GÝ~x®0YNÆû‚¥K—¾|ÅWÜ£Þ5ÛÚ×éö¾õK@ñ‹à'\‰n›™Hu€SáB:æùãÀÿ±Ö5ûAüÆú²ÀÏÝsÅÿU­‡£}€j¹|SøMÿ.›è?Õâ?£×%Í !Ä#Çp•b˜ àtK Û·oׄ©€*Tûëâïר;H™üþ0KENX¶lÙ<ùß©×"Güµ÷ ¿“ˆŸE4„ŸdZ­„bm¶ÁN*Æi~läñÇ®~øÞèïÇ.~Xë7ëËõ|÷C›ŠýœÖq,\¸ð5ßÿ>Ù¿æŸ8ßß*âwýÇ„E4„ÿ™%­vQdº@èj9l#«ÍÇ:ÿĉµb?LùÃô¨ÛÏ×µç8ÄçÏŸ?óøÃ ‡âŸJÚ?YèYôG@É5*=Übg–O%ÚO{Ì#ò‡ø£ Å~hóÃ÷FÔ3m¡ Rf!•窯÷£“Âé)ÔŸn¼ñÆç\ˆ¿“´¿QÔÏ¢?Bˆ—¾A´•øÿ˜ Ë @&: JˆüQéý( ¢Š5#€Jÿ|Ö3õ8¤ü±Þï4åÙþÏ>ûì]ŠyrpÈ“ùþN6ûaÑ !ÄçÆK–‹ëoÞ›À[LœCÁ"£1B;tñ·Z^ !°Þ"»â´Ê(ÖtÏ=÷Üô /,–C‡ü¸í÷§øÓB‚h”p4eÚèÂáÇÝüð ÷Á,]üÝŽ¦!8ôwƒìŠ›n Õz¹öÿ÷o\²d 6Zègm~FóþÝTýSüi!9Žø“‰©b±ÝVLe ‚áÇŽ~¬óc¸Æùb­Å~º°±ÀÏýãæÇ`kýjƒ¥÷ñ‹_ÜÖ„µ‚ýâï$ê7«Iq›×"¡ „x,ø’•ÅUŠ~O& ÒüzäýPàñÇ:?ªýqx!²a+ðÓƒ ¤üÝìÔ¨ CÚÔçÉk®¹æi9Xì×#Ƴý­ÄßIÑ_ÜàuFñ§ „øÀ$¾© xvÛEóNg@œõ£¿Æ RSS£õøCàõ#ú×…‹ëù·ϣµÂïvƒ&Õq±ýþûï¿ýÅ_\"SþÝ¢µÿÄ·f›ü˜‰?¡ „dYÜ#&7̨Êü]vßkÍvò µ£}!þØÕ…~µµµšq@ê_¯ô÷«ÈúÕ £‚¿T–bV¯^=_õ÷ß½sçÎF1NùGm"~#ñONùÇŠ?Í !$¦@LnÐq©·ª¨²S µ©ÂC„¬ –”1u›ú ê)LöC±ÄßIö€† /ˆø!ü©ìÇ ~_­sæÌ¹ÿ¾ûî{S¬·ò5û¿•ø;™òGñ§ „äHôͲFo1  Q õp+`&h*ºÔ Òò‡˜É©Š? !Äg‚q)øÉ)[-ÂS©û­V'Â:4D ‘= âAüñ9RÔ àÿ\Ï7fJ?RöuÔVÊ ~øáÇß|óÍÕ½Âß%Öã{FývBˆOÍ€þ³­WoÞ1U¸·Íî~ žA¥?„K‰Vè‡V?½Íëþ~Žºsé#S‚#¢TÁå†Y³f=>{öìåÐi~fsûÍD¿'AôôúSüi!4 É7gí&¯Öð79µ0jÉà@…?Rþfâo'–AZÏwúXÔGè¢ÌI&D¨VËj÷¾Y¨îW3áwbœÌô·šðGñ§ „Pø“·D?øàƒMßùÎw,¿‰.þÈôïß_[ë‡èCü+ýƒ­§j^ øz]ðS­à7CkÞª&ù½pï½÷þ­w÷ÆÄa>f‡[á·Zï§øÓBBbú˜•ÎoQâÕ¬Öï«ìÄëü¾Dñr´îöqøZ½&B›©?U›±éí·ß~ùÎ;ï|]«Ý¡ðÛmÝk¶ÖoõSüi!ŽünÖúÍ>ªzÏ·©ú, @¢0BüЯŽ%€Ä_c4ø'h†"yüœºèëc‘³ý{S†lѼyó^™1cÖø; „?æÂX rÔïd;_Š? !ħ¢¯i°:¢ª|‡2\,A“ÑÍ€nô÷Í ‚׆@ùd±Ç[ÙŠêÍP©ýæåË—¿£Šû^]°`Áfé»aO, ñ¥õSüi!4‹¬@⡉€*òÛ„ùý™ÂI¤œh ÿ¯ˆD·údqO|« º~‰œü’TÿÖ­[—«Œ·zè¡ù*£’<À'f¹Û‰½UÄïDøjG(þ4„€eì {ÔT¿µS§NõZ}!Ä^ƒÁK‹/~gæÌ™o¬X±b§:µ/Y¬í €ð[¥ûÍ ý(þ4„€DúNf¦ÿq¨ôó§gžy&¯h–~OjÖ†O?ýôcµ-ïü÷ß)þné;±Ï(B7~«%³ïc'üN·ó¥øç€/!ÄæÞI: ŽÂÞ£(á(î=ÊTEõƒ>øˆè3‚—4}TWEç–-[–/[¶ì“^xaÁªU«öÈ¡ó˜­É[e¬Öõí"~'é~Š? !$ âÀàm L€:*Ž9æ˜úÓO?ýØúúúÃKX‚P+NŒÔÕXÞNõ6® ðÚ•¨koÕ.†8ÚÔN|Úû*šoV#v›Ô|ý}*}ߨÚ÷*¡oRkø=6ÑyÜ&²6}7Ñ¿]V nó¼ì*û™ò§ „„܈X/Õ$‹~âÛ‚$`$üN10 f_“ü«ŸÙLÄŒö>°q}z‘Ñ[»iŠfÑ¿YzÞ­ ˆ;ˆöcb¾çƒðSü} çBœ`40Y$"IïG“7ùq…½_ëÔˆ‰€[}˜|}º×ÂÊ$~,fò9'‡Sñwc쾇“ç%BH~Š~¢°™€Ä#j"’1ñ/0È2ˆK3 6ï§c¬RÛv†À‰ 0‹¾Ý.8z ? !„¤ '§»ÍÐ…Èmôï$•ïÔ dÃ8Í ¤ý»1F-{©Š¾Sá§øÓBB˜0,&Âo¶s`AÂ×§³öo—pbÜ·‘¿ø‹MäoUWàÔ¤"øN«úõÓBHÁˆ™|>Ñ87…|nÅ?’Ÿ5Uñw’ ˆ‰»e7n¢|Fý4„ ¼m@„=f"þqáwý›™€t²V·‹tÍ2é.¸É¤áSø !$mCàÆÄ\FýÙŽþs±i3ŽàÛ‰=…?Äp!$•û…U+ž™°»}§Q¿W~1"™| ?ÿ  !ÄõýÂÎDl„¾ h?Õ´ÄÅÏçTSépcÄÅÇí„>Õú(ü4„Þ3›;Sà¦Âßíz6ZÓÉX s<…ÿ»‰îÓÕKñ§ „Ç&À©É|¤Ÿ©Ö¿l™§ÙtDž¢Oh!žšgc{~>U±wõ§[`%°™4©<…ŸÐBrj2!îN¾¯Óç•iŠ»s'Ÿs"òñ6B@!Žï!nÛM$ï4ÂÏFÚ?ÝŒ@:Q{ª‘}<ÅŸÐBHZ÷‘TÛm4Ÿ­h?S&Àîÿ©~Îé¹)ú„€â #à4Bwŧígº0QΤ¸Sô !Ä÷÷7‚J4ÉÀsLWLã9ú8EŸÐBqo‰dùó^ÝãÒÀ3Y GÑ'4„@Þg"YøžÙ¸ßųôõqž !…¼„~ Vâ|,!ÌBByÿñË=-îÓïE !„÷%ŸA¡'üC#„߯(ô„P„²{ÅB!„B!„B!„B!„xÊÿ½Œ£ŒXçIEND®B`‚qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/dmg.iconset/icon_32x32.png0000644000175100001770000000253614616416776027610 0ustar runnerdocker‰PNG  IHDR D¤ŠÆ¸PLTE7­E6§C6§C6©D––– ¢¢¢–––NNN«««­­­ÌÌÌzzz ‡‡‡ÑÑÑ...¢¢¢OOO§§§¤¤¤ÈÈÈUUU²²²‘‘‘²²²ªªª¬¬¬¥¥¥"""ššš­­­ppp 888bbbfffjjj]]]///AÍRFÎWHÏX}݉ß÷âÿÿÿéùë”ãžnÙ{ýþýêúì©è°¢æªÝöàŒá–ÅðÊþÿþaÕoKÐ[òüóãøæèùê¼íÂHÏYBÍSûþûÇð̧è¯[Ôj³ëºûþüùýúCÎTÆðË¥ç­öý÷ïûñìúîÚõݺíÀOÑ_ðûñÏòÔmÙzTÒdóüôÙõÜíúïUÉc—ÜÉÉÉ€ÞŒñûò™ä¢â™ãøåƒÞŽÐóÔÉñÍÀîÅFÍVhÅs¦ÅªØÙØÞÞÞÙÙÙ“ãïûðÓó×h×uÒñÖÞåßÈÐÉÇÌÈãããñññÝÝÝëëëTÒcÎòÒh×vKË[†ÂŽÂÈÃÜÜÜéééìììïïïÔÔÔÚÚÚbÖpüþü_ÇlÁÆÁßßßæææèèèÑÑÑäääWÓfKËZ¿Ã¿àààâââåååçççÍÍÍØØØÒÒÒxÁÕÕÕáááÈÈÈÖÖÖÛÛÛÃÃÃ×××½½½ÏÏÏÓÓÓ¼¼¼ËËËÌÌÌÎÎι¹¹ÆÆÆÇÇǺºº¾¾¾¿¿¿»•ľftRNS —œ)2 ›4 $ .372?(—auØß#þ…!ñ?«-þXÐ5qÚ:>QVWZfßþw&(/Fì¿9éäL,ÜÝY%ÀíŸL+M‡–›ŽkL#6"(wäïIDATÕÁMKqÇñïoþÿÿÎÌÎn©(nùPƒ°ƒ!Ö±‡S"BèÔ¨K/ êЩSï k—.£§‹‚K ‹Ž™ëª³»ÓÌú\½>þ¢Cþ”z XrNÔ6 "ã•[ö:{¢8µ€+&á4ÿ`ðÀ…I4Í¿xXhu•©ÍAV`Ñ1M’3V›àHØcÁ¹@¹#«b¡åÈùRLOA¤Ô¶ÈZ1,›Ÿýœ££ ϲ£¢ò/Àá*R›™àG%ðØ¬ød|ê5çj5r^%²;õƒc›Íxìró£p¦0\¥´p’ÌØY{ÛË®pBú0Åæñåî<0UË®÷—õ.¼€Ò%åÖ#y5¨Ì)ró‹æüÌ•ê5[ÙÜ5æ“ǾïÏ>GSs7J¥F5Š ËÆ˜¦4Ùó8˜ ã`( ‡ŠÎÍâãdߣ0 6‚-ß÷{K7½¤Þrc¾$:$=ô¿®o:Ã-©º”Xh..÷ž¦C™p±>¡zTH}½ÛjbIYêJgéèŠËã­¾Rx4¾gçë)R☜e­ïœV¤ÕÙ©ûîMy­ HÙ– †Õ°DðòUA#síÄAêN'ÕñmDOã0²Ùó14¯»K}Ïg)™ßù>…ú^„Z°IEND®B`‚qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/dmg.iconset/icon_32x32@2x.png0000644000175100001770000000456714616416776030170 0ustar runnerdocker‰PNG  IHDR@@ªiqÞ >IDATxÚí[ PT×¥¨ic Ä’4ŽN&¶Ó1mCÆ8±Ú¦‰budb@ BÒVƫѶ”1±hŠ:iLkJ@ ­5‡—ÊK°‚€ò~¿ßï÷à ¿ç»sÎν¸À¢‹²3û;ß,³{îÝó}ÿãüçìu΃Ì`3˜Á f0ƒÌ`ÓÞŒT & sg10?c]“Ç MždXÌð4Ã3 ?˜EÀœ¬ÌÌt)¼>79tß«YoÒl›ë÷æñ¨Õ ùgV½ ä¹?âó6Òù³úBž ð"Ç@oÉs^bxâA0Ögò+€1¯ zKþaÀj±2øõ3òÅë²·ÒÞ²èhÍIòi8G'ëÏÐGÕŸ’Kñûz!‹á¹é~áy¿¥ðöhº;:HYçp—$ Dšè>(;H§Ï«ñ8XÀðÂt¾l{á.‰œ¶–ÙŸG69ïØ¬û«,»G..²žNÈ×6(&Ýï%t'Ó[B(¸õ¥õfÒðذb ¢E^˶,¼¤í}Z篘prO:mÊuºoœsáï©n°Q=ndl„Þ.Ü=¥“¥Ë¬ äërõdÛ¾é  9ŽŽE!cÿ„6¥þLä<ÒCnM5a]ö¶Ù#€}¾‹‚ÐÍAS^“w§H=¾l Rý¾¶¶!ç­Ù#€GÅGŠÉ¡‚Ou<ÄQDŽkkë³fXÒäf›÷Δנ'›« xÿËÖ0 wJŸ‹÷]Hm‹â#U^ØÐèVC”Èmwé_&-‚£ÐZ€Ð¶HõD{îõi51÷’ ‚,÷Ò_®tÄ©'Ú5Ü£ÕÄvïSô¬ôÖ_BdðÍèð¥À¾²õW€ -¡ŠÉNÔÞÊq°ò˜â¤Ä `,ãfÌ7{*­g“µÏwòšc5Ÿi\fP'ŽÓâù666–ëtÔümÒŠ® gYg' MÔøÆFÇ›¡ïpâ8ßøž»»ûÏÃÂÂÒÝÜÜ^ЉîŠÉ¢/˜êšÔÞ õø†¡æIšNç§A€• c|33³gOœ8áuùòå___~œ¯›½€|'X>P5©Çpf€b),²#þ¾1ŸÕ(p—"Ó` Î5öìÙã”IÌû]K—.ý{ÿ) ðŸæ‹Š cûûº†ܷܿ)³/W1ö½RÏ)Ûë¤î›t¨êcòªþ„>®õÑZkkkÿȸ¸¸Ñ«W¯8tèÐiÆíÇ<5t#€mî;Ô?rG1馡 k"߆/ètÓyŠéL ¾{ýŠ1×{R5ÞocÎvd]åÄ›!ÇÉÓ2ÝŽ&ž Fü^QQ¥¤¤Pvv6…„„ôZXXlàáoª3€ýå•Zam­èë2gÿ¨÷Wì2åf—¿ã¾ñ6™´;åÏt&î]¿~***¨­­¨±±‘ÒÓÓÉÓÓ3']Üû* ü®h¯TàFÇF§`·†Ð×tvpŽm€P'"ÚcèTã¿É«êïê¢Ò裂^ûœ¢b£)33“¨¯¯êêê(::Z`¹ßϼ¿Qæ}# O‰«ŽKÅ Kš›ø¿X¿ ¦t â–·7nÿ†ö&{ÒÉx_ŠŒ”<[]]M===q ¤¤„óÔÝÝM………tøðዌÓOù»ª@› ÇåZ¸¦½K‡“ŽÓùØ/)))IÊg{{{ÕäHŽŽêêê’Æ01†—/_nÏ8=ËO¼tz$¦-óò“ã‘Ú:Aç¸>syüÏ‹‘¾@×®]£¬¬,ª­­¥ÖÖV)¤AP ¼b—šš*}ÞÞÞ.¡¬¬ŒØúC^†ESyFRq·Zcçø^²…Æ…ÑíÛ·©ªªJÊ릦&jnn¦––5A/C„ØØX)2ð9¡€ÄÄıµk׺2>KµñþŒ \l»,­õšj€wâ'˜4•——KG1ƒ¨äAƒˆˆqéÒ%Âr‡1bÄB-ðóóËu„sg…áý%òXÂã555’õõõŠ(i€Ï"""¤ñbœ  lÙ²åºAþcñt¶Ã/>Jò2Þ¢ð˜*..¦ÊÊJ)ô!Àø(iï òB,ùxÜ‡íø Wð;§¶Þ—ÿ4¶âQ °?ùJNN–B¤ ˆ Bð¬oĘ˜i,Ä‚‰kðŠÈÑÑÑ“ñx~:Þ˜ò%c-Æm 3„í î>>>ʹ¹RÕ† %< Dh£Ò#MJKK¥±€M\‡¥ðÔ©SYÜû–Ó}NH<÷âê9®âLà‡ ?111ÙÈÂù.ÂZ^QÄÇÇÓ7¤ð0€B訨VùwN7÷5‰0/f3€ùüùÅ«W¯¶e5áQx½rå ¥¥¥QAAtwËA£täÈ‘~b>Ü×$ÂLÁXvDeîää´a “" ð^xx8eddR$//OB~~¾¹ h‹«LMM×óÖés‚3ñÄ)'-wíÚµž^Q€bǶ°RNão4:@NNŽ$†\Ú¿jÕ*7þxÜ·µéú·A€§vîܹ  رã+©9B1ä‚` K‘¡M›6y°ûýŒ‡þ¼ÙN^`éââ²ý¾b°B&å<¸uë–„ñ‚ܼyB ;;;åßb^·ŒçèAs[[['ôòäQ ‡Í 1ä‚ào¬õÁÁÁ]›7o>È¯Z"ïôE€ï.Y²äUæñ1°ÔhŒ!^ÑÞb9d!?ìíígeeåÈ+¾_YTúB^<ˆ~c«Þ,”GpŠ ÓCTøï±Õ`r{xx|µlÙ²ìº_ò‚gÁ=¯Wäå]'B÷•… ne=Á{{ûã®®®¾¬8ú³úð¹Ý±5kÖüI¥Rmeã~ͰšŸì>Í«ý<} {MÏ#/à¶£;\Á/PÐ^æ¯Öüýçùúnɉ›ê£×'ë:pb‹øþÝœ¿.âï/à¤çʈë5ùñBsbâ¿ä˜È~ÉUÉÂ\'¤ÿ¤›h”ÀƒAIEND®B`‚qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/dmg.iconset/icon_128x128@2x.png0000644000175100001770000002605014616416776030333 0ustar runnerdocker‰PNG  IHDR\r¨f+ïIDATxÚí] ¼MÕþ¿2Fez¥'‘’¢P¯i¢áyõ„¡Òô"¥TÒø4hEÒ@t‘y“"óÉ£¶O´ªýâ 3é xE2• @H~¹©_\ŒíÀ±ƒbÄöñ1×í·ü¥­²m´•ßÞ^ó‘ïÁV ÀQÿX [úq;¾>×k«¿à>¹+˜³Ë°éÐV™vkä+¸}A  õü"ÆÕÿ±â••zíW¼.öÝÓu¾¹º‹¯ þ‚{)€Ôò™ŠÚC /Œ BɸV¸{Žîõ|­klHH,À+îXx?€ZÂ7öŠÃÇ‹6¿>ŸÔëÅç!²ïm—¿èh¸°%€ZÎÛ³ØóÜscßÀ¹,£wLò‘<@ ¤ŽHËy ®­Ü¿&eÍ,æ­>°ÎÓuï“ÁÎx—{ÒŸ @Êøé†>žÞ—V¾“ÒkmÕû ¿öDcë¡íÖlD›†‡;tÂëZÚŽ@HþöB©îeGςׂ!Ô)øAb‚¢ €çè?‚x^Ð}Cï@§/7Ëš€t€ûy‚@ðžW÷‚cÇù&z}×¢‡=Ç0"9îw`0+€à‰¶ ÷ôÐa¶¿Ÿîã·ý«<Ýú‚.Í—´¦P¼qþ^oþ?æóûé>pˆ Û66ðpÏN¡øxÐç>µÿ.{ÖW÷Òî·ÿyº%ìdüŽ&‹ÿK DÏf‹[yî­OöÀÍpDK­—8ÀAÙµˆLB1  j¢qÇ –Ésüüx?8k0>´ß‘ʳ(”ðzÚrýx?ßɓм™ €ßK‰)>ýÃÀ½åÿ{ùò~úÈ3 ½§Yø¼›àÓ? ÎÔóÙíÏŽÆ®žî§ÿ–a€£ÇžPì÷yŸþa¼–Ðúµð-Â^€±á© æÄt92ŒàÓ?Œ×`¿±DU_¢R<”V€)¼^€´™ŸÏ0ôLA¦P2J;ö´«úùaórz1Úo)€Œô{Áò?WùúaÛvx‡§ Z<üm  0Ðnù+iÑtr1Ц”Å5(€À¦áxÁÜ= }ý°aDYªªé(€À€×QZ3vÍöõÆãÀ5€@HxkM—”æÌýÖÞÜbÉc @æÀ»k»yzX'ü>Å×Û¬Ýó<ÝW<æêQ(Ô¿{ÁHŸ6ÙœúÇLO÷ë!¦ @  ëúÏ==¬C·ñõÃöíΩžî«Õ²ö @æÀ‡ëzzzXGlçë‡ 1 î(€0|omwOëØ“}ý°Mßõ³§ûºoÉã @æ€×Ã@±ÅöóÃ6GÖ)¤j°&€踺³§‡õÇ]3}ý°-Ú»”…@ @8¾ºê=O+Òl~~Ø~•ó ½ þ‚û(€ÌLõñ‚{—øúaózZð¿ç7£P2GZ/{ÎÓÊR[??l^§Åã¨p  0€±^^€f??l;ÿõ=a2çP2J0IÖ vÞéë‡íбèÇœm=´^K#À‰uæÞéy"­_‡UÂ÷6äd% øËàß4Rœèõ\ÀÛ´H«£Îâ•Ù ¤DL£Ï­Þû”fÍšyê©§ŠPâ<<ãþ_žH«±à~ÿž<p3üü’…[µjU~РAÕ×'b¸G: Òqõ‡žîç›­#(Á'ÃÇ{’<ãå—_®;|øðu¯¿þz-ùu € ‡mëéE'¡ïç‹Mý<ÝϧûP‚!N«þ)j•/*ù÷.]º<=räȃÙÙÙ_˯‹SB¾ Ú:Ê—÷3fÇ·žîç«Þ¥ø_B­úÅÊ—/_á‹/¾è;jÔ(!`ßí·ß~™üþé€|Ùã`Pœ)èÇûÁ ?©šDH˜8­úy•a#À÷÷FÕþæ›oÃøÁ®]»v’ß/-yšdA €kÔ¼µ§6^iÄ“HMî?v ê{9.ÿ*@ @B ¤¯/YFúùOJ¯müC† Y_ªT©ÊòßÎTPˆÂhpÔ—4\ØÒW÷âõ\ÀM‡¶Æí¼âƹ(‘­úùíUÿÊ+¯¬&·üCl÷پ}û'Õg•RP˜‚ËþüÍÓC‹sÒaÌùÌÝsãv Gd‘TªúÒHÜVý‚jÕÿÇsÏ=÷àСC·šÆß·oß¹òß/•,«àtîÂpÔö‰žÚÁ> bT™·€æÈ”Vá Ö €\aV}¼¦” ô]Ô£G^ÒØ™Æ/y¼iӦȟ»HòõYt5ÈoMAk¬÷to®î’ÒF$ ÑÂ(¡Wý³{ì±»daÏ÷سgÏïäÏ]!yv ’%”»À,@(6Yü_Ͼ+JoƒìÿÇëD X[‘ã•…ä×@§áG^¿T™2e*uëÖí3™Ú;êfü#FŒ8R§Næò竪Ï9 ©Aåÿ³0Ñ çŸoüÚ×ÿ™¼/Øyø_”V?¹üåL€"Ê(ó*ƒÏm¬ú…•ñ–‘¾~K¹ê¯v3|›;w%¾¦äÅ’çjÀ‚ªPˆЍ…÷‚ rÅ»anÔg2ÖØà± ¾§-Ù÷«§ëè´æãL€Ê0ó(!°·û0Ú³n»í¶k¾üòË1á ”)À•+W¾[¾îrÉóá.¨ ÀS5¡¡„"*á¼Ñ÷T^û‹+ßò|íñªŒu$y¼z|.ÔÊ\T{>e Õ÷JžuÖY|ðÁä–~$ÆvìØq€|íµ’U$Ë!E¨EÿOQ» @(Þ2ïnqÀc=vx}ªf¬Ø¿ÚÓuã~ã}Ç©Ié8f-P[­Î¶qžª¶úET°®¬Ìß?Év_çàÁƒ÷”.]º‘ þUTÁ?sõç<€HøÝÎižWÒÛǧ䚳7ñ|͉8à¤û†Þž®Õˆ÷Ä1éC¸VEçK+-®ì£ÌÃ?\ÿ믿žáÛ|á…zË÷¸NåþË©ê?sõ§D—<öØøD>üɼÞwdú†ã.{6î×ôÌo¯z¾hrsŠvRI€ëµrôå6lX÷óÏ?ê’ÓcÆŒ±bõßU¬X±†ò½®”¼0ÄꟋQŽê5`¯b½6 Hʸ0´#Çbüó÷.NÈuÝáq΢õ7Z É#KŸ±Î+Ä“vË_¯ÈxæàH7ˆ-ZŸ³· ñmg¦!7I¢;ï’ºuëÞòÙgŸ —F|ÔÍðçÌ™#f̘rõ—.ÃJX°ú—×jÿ «? Rv[ÿ¥ˆXÉÐd”ˆë»sáƒòøïŸb¾F”߯’Ç¿÷H¨ÑE5”½úýe€ï›áÏ›7OlÙ²ELŸ>¹}ëûÓ¦M;i'0pàÀß‹-zGˆÕß,2¢DBż–³ê@M!épÛüæ¾}¦þ3«…x÷Ýw' 6ì@(Ãß¾}»Ø¶m›˜2eŠÁ@KæÎ+–-[vÒkÚµk×SÚÕ šïÿ÷T®þi#± qŸ¸»JôÙ<ÈÚÖF:LÓ}QÓkS«Ç?–í¾H¢v'6Û¯x=ép÷¢G|÷5þéAñηňQ#·ðãÆ ,;vì»wï›6mãÇ2 hýû/¿ü"vîÜ)¦NzÂëdßÿŽSO=5ÒÕŸçDŸZk$Ví_›°‡õO¹Ã@Åܼ=‹¬N¼)2û0s÷ËuÀ÷÷Ý›°ÏWÂ(ŒòÚà~*%¾gÆŇ»‰‘£F:>Œ|Ñ¢Eâ÷ß· \³fÝ}¢W¯^bìØ±bÕªU–ñCÌ×·mÛ¶»æûûbõO+ûµCÜV]¿[ÿdgï]T8 P˜Êç¥îÏwŠ6SŸ½Æõq ÚMœ8Q,]ºTüñÇ>øë¯¿ 9¿OÈÞ~1a±~ýzËøAìô÷0`À¶ üG­þfÞ?¥§ ¥•Xñ†>icüëlŒË៑òÖyM’º €Û‘Šg¤áÌûÅKS:ŠAc»þwß}'~ûí7±k×® _Ã÷—ѧOË÷ߺuë_ÆDÃðý?S«ÿ%!Vÿ\€÷Øû Hm¦ÂG~ö·×’¶‹Jf9v9ÄÃÓžOü4dš¾ûêÕ«O0z›ØüðÃâÃ?ýúõ³R~ˆØÆ ÐßOw.\øcõ·;þR~Ö`Z âßîœXã_p“Õß߇ëz&EPè†+øöoL~W =ÄÕèÑÿùçŸ-ßÝÉðADûGÌÒyV¤«½nüàO?ýtÂ{wèСw‘ÿ\€üñûÊ(~а`ïñŸ÷ú¢ÂrïÑ} ½×î ªÂĿÔ×Dß±Ù!W{øî‹/¶ŒÛÍðíH¿ôã-ãGÐ1ÓðA¸ ½æÿŒ3Îhä×Õ?­Àæë«?»ì „ñ#íè§â˜ú î³…¼` ‡¯6}·k½mV3ñÌ/‹/Ƕ~»“ïDDúè{ÿý÷­×®\¹ÒÑøAˆ‰þ9ò¤Ÿ~~^ý3B¬‡cAó”ºD‹w¼%Žåôâ÷×~"«gzJw9~ÄJ•¢q 5(Æ9芌I fÝ+žùþeÑsü—®é;=‡m{¨m¾É%K–Xþ¾œ×o½^ô;qÒ¤I}žÜ)ì“mÂw9äý}³úgŒèiÂi»fù6U¸çÈ^kÕõûï±ñ¢‡¬©·×t=7öµjûAT=bƒ­=êÿŸ’EQ(`Šç®zOýð‚è1þó°Fíø?þh­Úf/gΜ)Þ~ûm!‡yŠÉ“'[¥¾¡Œß þÉ~ÿaÒ†nôóêŸq`óÞ%mÄðmã¬ÑZ~C¼NüMÞ0»¡¸wzkñêwo‹>ã²#j·…ÁbõçÛ»Eú±Ú¿ñÆBN÷±ïÊøAôh³þWªTé^iCW9TýùfõÏXÐ…(FÁd›å®ô<?Þx*Ígí…ííø¹‰h5õñþ¤®bpˆè}¬[|“H類_žÚƒYý®‘~“›7o>!ø'gýM–öSG û,ï×Õ?ãÀäMó‹VËÚ[i0´«~ÿÇ ñ‹œz³ãðNqèØáµúð1âãµÐòŠí|,íµ¸–ŒùÝϾCÜõÓCâÙï_‰hk¯WéÍž=ÛÊÛGÐ ElñQ؃•_Öí[;ˆp†osþüù'Ìù¿þúëÛHû¹Z²†‡ø¡æŸÇ1dèb«/Su¡NÆAŽ;ôŽc„ܼùç»Ä#²0çÉÅ7cE/m§–:é§ŒšèËÕŸ`>´´8vüXL€’Õ”ÈJ<ÔÝ>¾WÄ«<¶ö³fÍË—/·zíM?Ü€XEîÃ;?ÝÚY ~€Ï2Jô¶ßÞ½{/—vs‹š"TAôá4ë)²mtL®@<KŠ‹4ûn«æ=õƒÇDÀC=¢èX7lØ`ãl:b¬€×¡ÙG¦ê„<½Ç2bTñ¹}®› àZõûxðÁßQ“„/V3KŠøÊø)IšVK‡ªýP²PhÖ=¢Ý/‰" à!bÄ =äÏa|Xé‘nà €›DbüxLíyíµ×ħŸ~jí4ìÏÖ?פ“àµö=õïßsîܹëi}”Vçúvõ§$‰WwŽi0zÇ$ÿ­ô?ßm¥êB Ñ0ëîQ\ƒ>zlµaô¶áÛ´ÀMbuðy¨é‡ñ#âè½þ™&C ²zêïé§ŸþT¯¬ŽùÖOÊ›ìYŸq®œËäâ¶Ë_Jýæ9 åöþIñÑÄý·ß~kùÙˆª#W£±i €.áÀM"l×1¹Æ°ã nN 0@kúÙ-›~h§üê«>?ÿ(I&Jb?Ópºs§,zÿâ”7Dÿ1ß„Ý򣄮Ü]|LF"zן<äóÐyçw´—ªå÷l¿µüRüRü"‹ˆ6ÚÓtà¦I8Š«éŒGÂúöðéÃêŠíµM[t'n"K0ÿEÌAÚi¥ùtÄ5éŸïtáßÓG~É‚‰ªì×lúñýêOØ©ÀÀ¬Ýó:»Û÷‘Y˜|‹/0ú+)ÚcÁpà&ѸÑñ30xäø»wïnî %DÑ‚1ïÿxÍš5[©²_ß¶üR|F¯Çq£YiÂïSâ~:pÙwZt†»ÌÂÿþûïÅÂ… ­-> ߦ-n"à5h Þ}o½õ–5È©FóóM†ó!,FÙïMFÙ¯/›~(>â]‹ŽêXsü,š$â$Þ–ÓÙcû;>V{¤í`ø¨—·©¸‰@¢Ü\Ç!C¬`ê€ÿ¯¾› E*fÙoãÆ_RÙ/ÀGDÇ`8ì:²Û:¸4Ò“‰¢’ûæä÷\W|luaø6ÀM¢q¼MÀÐYŒcU÷¡¥ƪ_‡y-^‚hÿŽd»ðj—²__6ýP|7¹øN±öÀGÃßrh›øHž$|K‚ŽÝ®'+÷¾ßÛÑÇÇ¡HáÙthܯÁÀhܬô²ßÚöã>æsºŽXï©þ´nݺsÐÊ~)>#NûÕ¹y¨ý¯“ÀÁ Èé÷×ÏuP&ôpà&‰rÜj@øøÈñ¿÷Þ{Vá®M¿“^‰ú9 ¼=he¿ròÎÅ¢½KE‡Þù‡É¹ýÆ8Éø%G:ÆoÓI¢q¼#uðïØ’£™ƒ;a úu8]WA€{¡ÿ¾^|ñÅ>Ò>®“¬¤²_ €O1IJ Âì»ÏÀC.8Nâ ŒGM~«=òûHóáÜ)‚ ·üÊ!ûå´ßÆZÙïÙjõLêÃI>˜ôÑIÆÓp°òÛà&‰r¼Ôàsá‹£²C;‘ž4¯Å¤WAÀuã÷£ÿÎäçŽV³þWöKÈP¶ýáy×m$``Ï—Å'“ñœ-¨¯þõêÕ{F5ý8•ývõw€JjÑzº¬øÓ‡y`V5øµ‘ @*‚¨éGzi¾Z_ë׿vñôBèÂ)w ó²rNú©žYÿñ€ò€àq˜9¿.n"ªšló1´Ónè»â&RшA4‚€¯õc¾Àúõëw±úªì7(¬RÈq^Ec fðO¯÷Gä+i¤ì` þ?júáëãx.Ì´cúõ™L„  2R7~9Pd‰Öò{¾ZýÏH—Õ_€Üê† «Ê&(Ýe4¨àc½ô‡þ, Ê7HF0Ðü"ý]ºtù«¡G¿6“‰ûÞð<꾃 °ú_£­þ%ÓiõÏÒ.Þ€BÊ¿A{c%Uô€èç$ÑÑT²™d Å{É”ò>I”¦¶”|X²M‡&™Í>‘@²kðØ ¸«¿}hˆÉd ‚Þî«EþÓzõ7 ¯jh(ªÎUÊw¹ò0÷¼® ˆàs+™þKÇPý[ò6ÉúJ [ÊŠ¹ úöõò7HF0Ð|®=ºë«¯¾²Î°¯Ñ¼Îd\$}تþjÕªõ˜æû;µüæúêïȯ¹g©XÀ…ªóé2Õ‰Fˆ«Ôî€L kª‡óÕ—ŽúôÛ*Uªô¶®æö?”Ä#€šþììlËøéGÔ]¿F“¡Ä ‚€ÿÖb£æÿ[µÐ9­þ-û4PP튫/«ÒU±²«Iã%ª!¥šÚ¡An’§Ó¾oæþ‘þs2¨TÔ`z&õ"Ò:!¸>“É3ð'ûý\|ñÅ÷kUç¤ó꯻z6ÀbÊ8K5?œ£Áæ¹dJXNÕj\ R䨯—†5T˜ÑDã&ñFê࿈ô£¤‘~¤Ú°í†{bÓIb„Pbâõ¨4¦ýd«•]óoæýÓjõwÚäÕD °‚Ó•WyÐJÉä³”jCµE¹œÚ•Õ–yôEzé¯nX‰vÜ‚ø>R{(ëE]?jì±ò›`2‚`Ôû£ÝxSáÂ…ïP.n¥tÌûG*y”ÚåWÛžBJ «b!25,¢xšòIK*¨˜'OžÚ²„vŸ~2¯›Ñ$«&¯9r¤µåG¤I0|7&SPxdIiѢś*Ø}©*†;3ªþ¢qt!È«nþµ3 SÃüš T‚p†zH/GT5Òf¤µœvɪ Àçàî7ÞxCôéÓÇJGbå×J )ø”G뿯O>ùd¶Ê®\‘ur¿Ú¯þá„ ·&dj™×ˆÓÀ¨Ø²eË'Ìü¿i(^Ü/ÁÀE‹Ye½0~9BÛ þá{ )©}Ї=èó’K.yHeUªd<í'íW7Èå dê¨ïÊ hPI¯ÞÓjlqÝ ‘5ø\¹šþUÓ¿müNô*¡Ä ” @ŒÌ­Û¶m{¨;í¨#¾S!djø7‡¢-¸•å1Õýõ‡m´¦1$²&ÄÀŒê–×bEú‘ãÇu˜L• à=Œr_*²PT]¥2*vÑO`'ýé-ĺ`‹Š²íKemŠYè´&"ˆïaÖ V}¤ú0º )H€M'!H¶ }þÖÖ¿jÕª˜ów­ ü—îE?Dú@A%Ø®V“%µ ôÁŸºDãD ÄÏIC²ü}Dú‘ï7߉ÉE™[ÿÇ[ÿ›T1UE—ÀWÂw`Wl"E…ùt—Ëö*ûÁWh¯` ÞÇp¿öÚkV¤Fãw¢W1ˆ‡ àóÍ‚Ùì3++§â*UGaò‘±?"XPHmUá³^!ÄÞ¦×D"±a¸8”+?ŽãFÖ?nbLAÀÏ›C>dzr[éÒ¥ÑÕŠÓ}«[§À€ð¥S+W Y´_orò…ãåÀØÑ¿¹}(ôA==¢ÿ )©ÌÐ_ö ¹õÖ[Ñç_Gmý/P[»â?·`gN˜Þ$«kê]€(q %^ƒøÿ0(œË‡9ý(¦™={ö_ÆïÄd ‚nüf?øÌ3ÏôÎÊi«®¡Eý¹õ'+åK•*uƒþëà5h þ ?m¼ü±åf §îD?Œè=þ œ<4Mþ¾nÏÊéôCÁOyný‰  ÀI#ÜË–-{s$àÕ ÀÏÃÏG°í¼¨¤ÃÊoÓM‰A¢×dýdeâŠ"EŠÜ••“òC§Ÿ]ðè?h¨ û×ëE+‘º¤!Â`çĶ>¿.&S)ø Óøe9òŽŠ+>(W7fåTû!åg÷ùåÖŸªÀw­P½zõú¡À«ƒD¤Û~Œðš>}ºeüNL„ „'AÀkÌ&û\wÝu8Øùþ+”ßÀ)J¨íN?ný‰@ @~]d5ÛíúC@]¨Ê¸HjàCcZ/xØg ú¯ÓM R!x­™îÃl¿fÍšuRA?äû+;øýÜú€"¶œþùÿ2GG+º`ÃGY/ª QàAMðƒ 8?²">úh÷¬œ:ý0F ùþÒ.~?·þD àü’%KÖÑ~Là WïÖ*kGú?ûì31qâÄ¿ ߉¡Ä Y‚€Ÿw2þvíÚõV´øVUA?3ßO¿Ÿ´XA@Yp­nv)p4»üûàÁƒEÇŽ­C9±‹ÀÊoÒO‚€×a‡bæú_xá…Y9gYÔVû”qúÑï'°Or®5|øðƒ¶ å5\—œ.(šA¤+?Ò}pàóÛt‚X!”D"x³µ|ýõ×Ge圓€qéÕµˆ¿]ìàx0r¯) w»y`$»øÐÈí£º£º‘ãG´_“©¤"Í"eü£5ãG™/F{•ÍrŽø3èG^쓜¯–]y«tc@N<œÀð0½Ñ~øþ0,¿ý"fm¿íóËmÿ eü×+ãÇT_¤û00Å)âO¿ŸH Àüº²Òm9,Ô.Ó{`øèáGîÆ^~›nB*AÀû:ùûhîiݺuO?‘)pR3䲿}ªn0('ãGeêø1ºKž#h aü¦˜L• à¿Xõ¶ü2h¹·aƳr¢ý×fåTù™ÆÏt‘Ö€‡ýŸÒ G™cÁMãG°[}tòaZ/Ò…¶ñ;Ñ« „ƒhñ§@(Ó”Ëd 4ðÄ!©µCã§}€}ˆ+"Ü—Éy|Ù¡Š™«#¼ðïpL¦Zð5 ß,éÕ«û¤¿?8wîÜhìÁž8$µº ø9ÿ)4~"À‚üvÕ矾«[-â0únݺY<°¥†‘Ùt‚d ¾ër[ñUGß*Y×ÿ¼¼_ß…(ïÅ0O¤úÊfåDûiüDÆvT·U‘ƒŸH{0-ªVÆs•áÀˆ0üò6µ²6½ôÒKÛÉÕ¶ë³Ï>;HvýM…0H{ ‚mñ2rÔä÷ï߇tCVÊÓ§ËêׯÿŽôçÿ« ¾±ÚÞÿ[­ô0úÚjµGýþ¥ÊÇ¿À0üâj»j˜UŸÆOddÀ®,­bfå¤ËàG£Z¹s Èh Dáne”Í‹/þÈÕW_ý|½zõÞlҤɇ=ôP϶mÛfwèÐa¨ä0ƒCe>¾_«V­¾’u=7nܹN:ÿ«P¡¢õ-Ô{6QŸÑ@­ðÿR×p£ èÕR"£¯ª­öçi>~)ÃçªOP 7  Ú”P®ÚƒQ‰ò£k(1¸F ±®2Ê[”þ[k}µJƒ ]Ø@ý{}%*Øi ÿVõžu5c¿F}ö•Êà«©ëºH3úsÕj¦ hž¡mõ *‘s3|?‘±n€ ,¤‰rãç(㪨Œ­ŠZm«+C¼BåUÊ@k)c­­‚pש݃¯S¼V½¦–z«”Ø\¡>£ºÚÖWÑ ¾‚ÚÞŸ£ÄÊ6úbjµ/¢î¥@˜Ÿ†OP´X@>µZQ+hIe\ÿPÆVN ÂùÊ+)£¬¬ ôe¬UÕ*]]ãeŠú÷ª©Ÿ­ª^[E½×Eê½+ªÏ²WøsÔµœ¥üú†Ñ›«}^Ãð¹Ý'ˆ®€½( Œ Fuº2²ʧ>SàÙš0”UZN¹ç©Uº‚2`7VP?{žz]9õ^¶¡Ÿ­{)ÍàOW;•SÕJo}>Ãè¹âD®€-ön ¿2®ÂÊØŠ¨ÕötµC€1W†YRéß•HØBa³´Fýûgj^R½WqõÞghÆ^Ä0x}{o½ÛjOÃ'BpŠ¢-”RÔÅ¡ˆ2Ö¢J(l±p£ý3E #/¬¨{~ÃàVzÓèiøáAri•[„<šñéÂ`‹ƒ-4¡EýgókFžO{ÿ¼+¼nð4z‚H ä2ŒMStˆ–y æŽÐØiô‘D1'áÄÂͰÿ¡¡Óà "Â/AAAAàÿÉsÃ$tö3IEND®B`‚qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/dmg.iconset/icon_16x16@2x.png0000644000175100001770000000253614616416776030166 0ustar runnerdocker‰PNG  IHDR D¤ŠÆ¸PLTE7­E6§C6§C6©D––– ¢¢¢–––NNN«««­­­ÌÌÌzzz ‡‡‡ÑÑÑ...¢¢¢OOO§§§¤¤¤ÈÈÈUUU²²²‘‘‘²²²ªªª¬¬¬¥¥¥"""ššš­­­ppp 888bbbfffjjj]]]///AÍRFÎWHÏX}݉ß÷âÿÿÿéùë”ãžnÙ{ýþýêúì©è°¢æªÝöàŒá–ÅðÊþÿþaÕoKÐ[òüóãøæèùê¼íÂHÏYBÍSûþûÇð̧è¯[Ôj³ëºûþüùýúCÎTÆðË¥ç­öý÷ïûñìúîÚõݺíÀOÑ_ðûñÏòÔmÙzTÒdóüôÙõÜíúïUÉc—ÜÉÉÉ€ÞŒñûò™ä¢â™ãøåƒÞŽÐóÔÉñÍÀîÅFÍVhÅs¦ÅªØÙØÞÞÞÙÙÙ“ãïûðÓó×h×uÒñÖÞåßÈÐÉÇÌÈãããñññÝÝÝëëëTÒcÎòÒh×vKË[†ÂŽÂÈÃÜÜÜéééìììïïïÔÔÔÚÚÚbÖpüþü_ÇlÁÆÁßßßæææèèèÑÑÑäääWÓfKËZ¿Ã¿àààâââåååçççÍÍÍØØØÒÒÒxÁÕÕÕáááÈÈÈÖÖÖÛÛÛÃÃÃ×××½½½ÏÏÏÓÓÓ¼¼¼ËËËÌÌÌÎÎι¹¹ÆÆÆÇÇǺºº¾¾¾¿¿¿»•ľftRNS —œ)2 ›4 $ .372?(—auØß#þ…!ñ?«-þXÐ5qÚ:>QVWZfßþw&(/Fì¿9éäL,ÜÝY%ÀíŸL+M‡–›ŽkL#6"(wäïIDATÕÁMKqÇñïoþÿÿÎÌÎn©(nùPƒ°ƒ!Ö±‡S"BèÔ¨K/ êЩSï k—.£§‹‚K ‹Ž™ëª³»ÓÌú\½>þ¢Cþ”z XrNÔ6 "ã•[ö:{¢8µ€+&á4ÿ`ðÀ…I4Í¿xXhu•©ÍAV`Ñ1M’3V›àHØcÁ¹@¹#«b¡åÈùRLOA¤Ô¶ÈZ1,›Ÿýœ££ ϲ£¢ò/Àá*R›™àG%ðØ¬ød|ê5çj5r^%²;õƒc›Íxìró£p¦0\¥´p’ÌØY{ÛË®pBú0Åæñåî<0UË®÷—õ.¼€Ò%åÖ#y5¨Ì)ró‹æüÌ•ê5[ÙÜ5æ“ǾïÏ>GSs7J¥F5Š ËÆ˜¦4Ùó8˜ ã`( ‡ŠÎÍâãdߣ0 6‚-ß÷{K7½¤Þrc¾$:$=ô¿®o:Ã-©º”Xh..÷ž¦C™p±>¡zTH}½ÛjbIYêJgéèŠËã­¾Rx4¾gçë)R☜e­ïœV¤ÕÙ©ûîMy­ HÙ– †Õ°DðòUA#síÄAêN'ÕñmDOã0²Ùó14¯»K}Ïg)™ßù>…ú^„Z°IEND®B`‚qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/dmg.iconset/icon_128x128.png0000644000175100001770000001221014616416776027752 0ustar runnerdocker‰PNG  IHDR€€Ã>aËOIDATxÚí] |WÚ¿D"ŠR ÚŽF‹êbf|­òÍ7Ó–)ÃÐiƒh1šªÖZŒù™©©eø‰µ–Qû6öÝXcO¬„„ˆXƒ$d±ïÁùÎÿÍsÒãí}ßÜå½7÷ÆyüžŸäÞ÷ž÷ÍyþÏsžíœk³)R¤H‘"EŠ)R¤H‘"EŠ)R¤H‘"EŠ)R¤H‘"EŠ)R¤H‘"EŠ)R¤H‘"EŠ)Rä ³ÃÅ;ÌöæÏ¯À9sIÎÁÄ¥;ÅbÞ‚h>}BËKp~†sÎ/p®Æù%ÎÕ;Ř·9ÿŒsišWŸ>ÐZÞpÍß¿{è#¦Ø}æóY•¬B€/@æ¾´ýíM§+ÁY €_r~––Õ⾽𫿽¬ÉL%4ËðçŠ4Ï>côÂÿþ,%0à7œ«Ð2PÂðSá/UÂ÷ Þ&‡º´/@ ßûhDAòŠ)á?]hÌùçŠ+á+(á+(á+(á+x#½«„ÿ”@?RÕU’çé@ežž/ŒÜþgǾfߥNg²¶±C7Øù»iìòý,vãáMv5÷:K¿w‰%ß>Év_f 2V°oN`-ªàíÙ[(8ýâ|–z÷"s…î=ºÏ¢®îg=’ÿ¡`ö—¤ÄëÞø#Gû7»‘{“YE{¯Å°„Ï]~3zP‚Ì?  <ùÇ5köäD2OÐÕÜkì«ã³ïúø©@i*@4ôÔ†‰Üye/ó$Ý~x›…%õ±M8h‹: (@4òÔ6õâ<æ ºx/ƒ5oošÆµ-Ò`ºicOüQŸ$~Ŷ{¦ý˜ÿC0áü öyR_öqB{?.Dæ'G»±þ)CتËXæƒìA°äÒËðA|;wys¶ùºêÎYMèŽú3Ó²‡ŽwÿÑ @V ™“ÖD@Çm¾`¹&ÂJº•Âþÿ‰Óã=3V³F´0c¥%påÙ$ž‘¶Àprïòe!4ñK—Ç^›¹Ùpl$’õàÍÈÛ §"€“wÎN.èÎØí»š.=í$‰œ¥›oiIÁz«ãÌRóÔàÏG>34Óx½ó±ÞnßcOѼôen  úðHg#þöô(É;w÷‚%÷qv‚á=boñ8Zé¤`ijÓNܺ¬Í–Ü>„!dô4Zî `Ä[svN4תûå°Ìè8«Éj'±H åöiÉë–<À²ûÄßH4¼¾>`5Y'(R¸óè®áÄ}d¡÷l–h~v¼[a`«ÃØâÚ©0ÐùÊ_[ÓZ¾•U¶ùéË ï5ñüLU. À;6¢ì9–NÚä s ï…¦€B’4F”Æ+vVNÚÉŒè?Ü:(ä1¢3wR-´‘ç&Þkùåu …xßF”|û”¥“†Â­ÏÚªPèzü¯†“ŠðÐÊIvæ;·N @Ç£==žþ±Ét²á½Vò&€B@›„.†“Š>+'müyc'pñ¥Õ …€?îh^±tÒ¾¿0שР€WAm 'Bè÷³ê^‹2V=­‰ ùdÖbßI£ÂˆÜÙÈáL*B€|J+6ô–jÞ¼ùsÓ§Oç€~?G‹4î0êþFÔ7ePQ@1;ÛùĆžò=zô¨¿zõê-;w~ÑoÊÁCÐLGù½tÃû %½ˆ@¯õ8¥µÊ AƒÚ¯]»6‹kÿ€Á§07}‰áÄ.½ô_ËœM£¶3G‹Nfd¥¯â&ž8›¹råÊ5§M›6uÆ ¹öŸâ¿ã„Ñç| ÿ:3Îpbß}ZûüäÉ“£¹ŒÞ'í¯ê®ö*äbjö+xû6öøÁñ{ðø®$W{GȚр“à åtϦ±mÙçû¾f#vŽcK#–?!ôíÛ·³Ã‡kÞ¼=¡ƒ¯^½ÊV­ZÅx¦O»N>a ÆjÙ²å߸ŒÞÂaÞVh¿OÀŒõǽÁ‘¼m’·‡ÙöÖ¡NÆtb_ïù›¸m [»qíæ=**J[³áÈ]»vMc#áÃÛ_´hÌ»æèé…/œ¿9sæ$Q’èU«´ßçàlÿŸÖš±šy*” å¦ý›¨alö–yOh9{Bð˜xxî0ï.\ЄoÙ è—ü´.b|„yò2‹ñ<ËСC—q¹ü–JÄ©9IJoõ[€Çò†{»Ž&_˜Í£P‡»»‡ä{ñˆÓav!øÔÔT-Q´ à=¤uy¡GWŒ!¥,/ß«Y³f{”‡é0ïgm©´_ÊÙ<ð•ò~—ZÉxšVxö0ùHµBX€Ù2 [ý2 @€hβx²5‘­Š=@ <¤v¯h*ú ä[™Ú½­Ôþ§mb>Ï/Á" ƒ¹ ZqcbbØÌ™3µl “lU̱k×.Mû›5kÖG*ú”·"í«ÀyúÖÙšð¡™(»z+ _ rÁ0÷ðôaY˜dP™@<oã²hbeÑG‡VDwÏ_÷fz+ _ rñúš5kØüùó53.'Ë ˆBð|­[·`uÑÇl{±ÂŒ†EÂñCÍ Ð[gA\·xñb-̃ðÅx2° òx¶Ù³g'Ú)úyBûÄ·†!Çüë¢*|4]"Þ‡ãS AÙ³Î:ƒ&ãêÇ”Ç6^‡UÂÚò —ÃÛRѧ”•‰#”¢8³6íLiɹ-çO9w$îä‡üÎaœ»wêÔi!4 !– Ù 8ë ÂɃ³Ç ã ãÊãÛƒ¸'ºƒÈó‘´ÿy«Ó¾FßZŽ–ºÔpؘv©¼Kሿñû4™-8‡Ž7n& YcuQâΚæñ#€1ev¸I"žõ{À›=¿¢µ¿†ÕE3Gðºé ô¯€Æz~Æ(›¾N)TTÑþÄ×苘hÄç²\qѺÅ4´uÞ> ÙQ@ yÀ _OÀõÊÚoÏ ˆ]¨å¨èP™¤*™#â(ªAùôJ•*µ\¿~ý#N½eÀÌÄÏhÝâ;r5ó0É,ÀP Ðÿáó1oT«V-”,ou+>€A -¥È1,ã§\–’'h›®ÝªU«0L4´MÇÞ2`æ âuäôQÔð‘DB™XfgëQƒÀsõêÕk²´Í«²'ã~GO›*Aè§\RZÒjõîÝ{ &ûëd8º àzäôáé£ HfA°3€@ÉÏÄCôiN{ü«y2ëç Šé@áo\‚&¦ô¾Ùò;‘ý“µÑ‘eÝ;pöD@°+€]¾0ýuëÖ “¶x‹ŠŸWµ¿(Q1]d PgäÈ‘³0á·d“\Ð2€n „y°Ø¥#XÁ@P´Ã÷qÇŽéÜûªtÀCÉÂÒþ¢8³¯Ž=z1€M˜b{Ë€ ˜{$x ­!8Á2ô€Á Þß¼y³¦ýÇ_ËŸ­™þ—tI¥ý ˜PO)`ö¬xùòåZj€§dvøÛ»ðS§Nã]¾­©ÚW“Lieú­&öµQ£F-ÁÄc¿½ìŒé­^C1ž>„ë ¸ T ñ |üT–¶§D[m ³Ë*ÓïÀ=rÙ @H¼£­Ï>CfWŸ…Ç¿téÒÌ:uê|A!ß«”¯(/ÅüJû=€z‹ ìµ×‡dÖy8{0щÌ ®ÿ ³Ï—•œúõë÷ Ôúëºu_™~O`ðàÁÓD@—£ÍG’ù}€Af#0\/>îOd4hР'¥zߤl_Eµî{uû÷ï?Rde@@ØŽ !¬ƒ`A°+€À}ÄaN<’8]«V­.’ðAÏ%Ÿª„ï! P»k×®‡0P €àóê›æí£” Ë ³ g ­ÇaÆ Û„S¿(Ö“Šl?SÂ÷^kìË-Z´[½óÂÖ¾áCh`$}›Bƒ`,#Bðt|k:¿çP~ïV¶¼þŠ×Éì Í—=~ 8M2<ì*Th‚Ì›’<¾Ì¿ã}„u²ÐÁü€‡œ¾}ûÎ BeﶼΞº”㯨„ï]ˆ3õ1ù y¿^¦,,Tâ @´baiÀI‚!\0~†÷q­|R§tbçCžØIàG“¸àßÿÑ–·—¯>¬…zÈá RÂ÷‰&Ñëø/M@»5vÛê…è,sM¿ÂÏê‹éÖ­Û,îà!´ûØ–WÑC|ÿÒz˜|”vËI¡ž¾­€èu¬HéV´Z}À9¤^½z½xëu8ÿª•9ëÆŒ³‡Ã~€ÂÏm8Ês'8'ãw¼>dÈM}úôYضmÛ±¼q§tAÓ?²åµ›Á»G×ѯIð5tÈäë“Kÿ܃H“,ƒ‹UIEND®B`‚qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/background@2x.png0000644000175100001770000065077414616416776026313 0ustar runnerdocker‰PNG  IHDR° 3à›sRGB®Îé pHYs%%IR$ð@IDATxìÝÙ²9’jfn™•ê÷9jUU×ЭáEZêIÃ¥.dÆ ]èe¦çè£Êdfÿbý;Hµt¤žLUå c#p8Àá¾ÿgÿé¿ý—Ÿžž^üðÃ/>|ÿý‹§Ï?ñã?¾øaçŸÏñý¤£ûâ‹/çŸ}öYÒš×û÷ï_¼øìÅ‹¾ÿáÅËW¯Âç󡓇^ï[ÊKS÷œ¼ðïûß¿xóæMÒ¿ÿáû?þðcähy±r-Ûsõã•0õ©[½=¤kÇ÷s4Ï9É”ÓN² ¥½š¶_ýõ‹×¯_?Ú¿><§½|9íÿ>¼ôWó•ÿ|èÕKN2+‡_e–özÚýî»ï¦ÿ^¦ÝÊ h>ú|d=å•S¾²é§wß½Kÿéÿ†—#ö+WþÒîýßû¿óç?]±úÿŒƒÕÿ»þwÝõí¿µÿŽ/À~dÛ²Yk7¯ýÿù‹§µÿ×ÿ[ÿoýÿëÿfqá Ö !¾Å¬ Öiÿ§øÏÓOÿì—o-@eìüå,Wîà†s•´òW¯ÐœHå‚8¼\_é¤)H"þìó”†f(™sñS/þç„ ªlŸMº2®´o¾x“kçxGŽ!z7:M¹«ÓRðúÓ´ð“?íÂyåéÜÂ|o£<} ] ê?þðâõ«×` xÕ:Ò/W¿¡—î¨ç|he.miŸ«¼½+WàL>o˜¼xõòUÚðå—_ÜúnÀ°<´!†Æ$ºn½Î÷þïýßùtŠy±óÿYçV÷ЫÿWÿw·¶X‹²–LÜô]ÿ¯~Ùõ?6ÆÚkÿ­ý¿öÿúëÿ­ÿ¿þ?âï‚ÿ<ý³ À²C‡£&f„A ² €¦ K˜—O‡¶†kË@jÐJ<ÉÿþûÙ¡4€ ¾——ÝCÛi¤ÞîŠÂ³¡à ™šŽöÃð)“Vž©kò€J”ä£l™]iÚðÚ:x—¿rhì³ãIºþ‘î¼}੬s£trÝÛö¨ghb¼}vhR>RŽŒSNPÿQx^ü*ËsÒ>; Êéùh+£tO‹ÉóúÍ×”«C~S{±÷ïç°ñÔq´óç?€þ®÷èŽÕÿ?æá€¾XýÖ¬%»þ?lc#aâ]ÿ×þû|í¿ØwùÕÚÿQt'›kíÿg?OÇè“„‰Ù ‚¾Zÿïø’úb:iý¿ËîÐëÿŸ±ñ»îÿ?ýá¿ùÅ[ Œ¶EÜ $.µ‘‰Ñ'ªÒ->ÂÃ8›ó:»›WZ>çX~&Ü”¡ŒÞ½{ÐÊ,Ðe÷’ ùzäºï.R<ñÇÇ<éM ³IC—Á<纤IŸC=WÆ£½'áÐ:ÇÿÓEE_I×oo²ó øFf€¹°ÊKõ«HÚÓçgÇ—¾!c ÔfòÛ>iäe]¹¦N×ݹþ­úíÀÂÊùîý»<ïöwéxîýŸ›{Ð~«„öåÞÿó_?Æ®ù“³3®åë3qóJ»óÿôáÎÿÕÿ«ÿÏZOOìú?àø®ÿÙo)Yûïzp»ößÚÿkÿ¯ÿ7>ZíîõÿÖÿ_ÿÿcü';°+ 0ƒQ (ªÚ „&“èrT7­ñÓËçïiHtY<{-Æ÷¤{¥ðÔŸô©Çßr"ü[#'t“^Þ¹~@iCü0 -Ÿ‚ó .?N=–Ð48Woù…çdJ×O÷à[]©ôÚÖ×°Ê×N+4ò‡r~’ÚN²OMᙺÐÜä”Qy´/‡~i Zyð³+îÔy^Cì½I%½ÿí½Ó§{ÿ¯y6ãU0~Œ»Ž-çMk¼óÿèŸÿç)©qcœ˜K«ÿWÿw<ˆÍ‘3.výï¡G­×óG[c®wý_û¯vªqa¼$ž?ÆŒcí¿gûÛ*0œÙtõQ:mþ迵ÿÛg ­ýt®^1ŸÖþ_û¿þ|õ­q±þÿÁ/ô‰þ¸ÇÿØþߨן™´ÞM?;ŠÞ$6 (œ¡| ª<5G^€ÆµéŽÜo6Þ„2>îÞÃþ»o¿ hæ5·/çƒç©kþ|õÕW³«ixZ¬Éq$"7PÆÇÛK’m¥Ê£ÁÿMÒs˜<ùŸÍŽ&|Ñëç6©€&Ö‘c8¢úM)mµ£IÐ/>-«½ú }rÝp4òí:#¯éâç­—¼ »º¤Wæö2{ÿ;&Îýë=ïý?£ÊXÞù¿óß8ˆÎ¹tÑ!mõÿêÿ¬9G]|dìíú >]³ëÿÚkÿ­:ÿ×þ_ûŸM¹þßø„ëÿ­ÿÙNÖÿÿ_à??ÿË?~ËàôtÜ«{›<ÉǤà†I‡e€›¼Þ§ggá¦ÈkàÐôºÎÍÝÑ)”p”üÚ!4 ˜0'<±—-s“7¹q˜1¿’~l¨?z®Çÿëÿÿbýÿ¿=þóô³?ÿÕ[*íFüºȼOÈNP@H•¾bçõ=Xòñ@Mò´Á3`Ëüa~ÝøÄ)ãù£²êÀ«AÙOƒüÈ9S~áp9”HÊOº¶¡q]ž)sñNÛ§L'[u‹RÚ7¯Ez5&;½Ì»¡Ð;r=ÿ\“K^ÚzÆìÀb œBÛúÈô)o¯þUÖòÔ†{žc«<]+'06^îWSÇ\ÛMN Ç\„nïÿp÷þïüßùÿlÑÑW­þ_ýo\ø'ìú¿ël‘ˮȠ˜?ì#:£6[mí¿³kí¿ ìê‰îc§¶zÇPíÙ^‹ÑÇ>^û?nÔÚÿëÿÕNë|YÿoýÿßUÿÿé§`ðì1¤ Mã2Xð%ƪóY<üS â: à„Q{ñŽ8§\»àô:ü/^ê+ø$? ÊÅ7õ#¸B¯÷Û+Y‡_; º; ?AºÃµÝ[‚Wëœ[0+kë÷Ë‚ò…×ÇÚÃwxÔ #C xíר„ou;wÌšX~ò….â• &ÝŽ,¡t¹˜?è}U±ùm3:ÆdÞ«:ùèõϵÁÞúš>îÓüKÛœ]î|â½ÿúvïÿ´Ææ5ŸÎ©ÿ;ÿéŒê¢:nèógÆMðÕÿ«ÿéÔ¬33nî¡ã¥ñ®ÿ§wvýŸñ2]AǬý÷ü¸:×(Yûoíÿµÿ×ÿ³VX?×ÿ[ÿßúÀ>¿Æ„ë¦ÇÎb§Ï¿ÿ›üÿ§Ÿýå¯ßôx„¯Q(nBÓ`Î.”È{ì‹®´²úAte}ï@ ‚nÎ2u^’>iœ‡Wõä;†écráÖÑúÊ×uCÏÅê@ -#.²ÛA ®Ô?¯ ÖÉ&‹sáÞ®ËÃy·(Ã{xiCvlMýéƒ C/H‹<ÓêuÞ´¶ïP^]=ùBèæ\¬ôBø]yç|êHÎùsÏ7]“™¬‚ëùó¸ŸM»·ýܽÉÙûÿè÷½ÿg/í»ôÕØ£ëÿeèdÌèÇúGXÿÿ·ßÿúù_üúm@èÀÆÇ Ô]!˜ 17€&Á;Îb“ô HÁ‹ž“‘ sYÐb´Üé”Ëvlj=‰|0X¡+ÜåqÞ£ùâc¡8ùø$\´çâÈ¥þVä(èä\z&:™æôt7¥ êV?Àk“ö¤ÍóÊ¡ å…¤L™†»ì©Ê¼»b2Ô”_úÆm'ŽMk¬íêÊû9oä¹õ‡üƒvíýïØÝûÿñÜ2v2–΀Êx‘ ùc'kç¿~¡K„ÿÓôË„Ž!sKÐ7÷¼Õÿ«ÿwý?±¥Wwý?z"ÊâúS"¾wšÚEkÿ­ý·öÿÚÿÑ —¾¨ž ;Øt¬óøH>3¾šóµÿŸõ«>ÓGBtëå/J[ûÿôÓúÿgÕ5w:‡Œ—έž‹ÿ>íÿ'¿B'bê¯ÓÕÁª²OCÁ’¤Ô×`NÙ¹Vö^ï^[L”¯Sw>.~¢7c´Å‰)àsë Ý#¯¼Ä®óáñaZƒ/mÚæ{ýOZÁ°ò/Ÿ(*ù@)ò]|Å”äͯ&Îd×Ñ1Œôš:c“ÐidC‡äœ|¥ðu¤/&–W™‡ûä$k]‰¯z‡IòÅw¾x”úòoZó½b(%y{ÿÓúCŸ‰÷vïÆJÆË5f’0}46ƒèÒs­ß ÆV¯wþïü72Vÿ¯þ§cwýßõß8p¬ýwìIëfVÏYC×þ{v†Öþ×3F±¹Öþ§7Öÿ[ÿÂ\ÿÿø]õï£,æ9rOëùïŠÿÿ2Æ0c4cãÕòžs>ïç²)ч‹:äüûù'®[gõnœÈsí( gൎžspÊí§õËkð‹i -ãZü^Îkx4H¿óó á»wï7Ú+a>°î咞º×áü½ïIMÿµ]•M¾«¥¬[òåµ¾²³kþÝe*ïµóZ¬Nþù÷™ô ŒœaœòÊ9>åuïÃjÔž~2˜÷þ§ßöþgH|4†îãIîÎÿ£̵ÿ«ÿWÿïú¿ëÿÚµñ¬‘kÿ‡Õú„Í[»·ódíÿËWZûÿá³tŒ¬ÿwìËõÿ>~ÀS¿¸1=»þÿï·ÿ?ï½£fÂÌÿ,ÀÐ"½¡¬¸‡¼€%” „|öã™|V¾±4N0‹ÓÛ×áºx½zùjÀ÷ç5¿‹ŠL Ï=®‘P3ÿ¾Ÿ«—Ž<§ ³óiÒ[tJ±¼Ébw”tuõ—´YÒ|äÒÑŸ·l›[Oå@«µ^»l¦Þð0Ìî­ìþò}¯É«óŸ²sÝ]]å‰Ï½žÓ›÷«>L”¿‡–—ž>¸â€]­º…æGžéï½ÿ¯26öþ±óçÿÿD·TÞuMôÕÿG±Î_:uõÿ1,wýßõß|Xûo²®ý·öÿÌ…µÿÏúhÁ\ÿoý¿õÿ¸_›Ú¼XÿÿÿyúéŸýòm£tÞ(Ùv ë»Óâm;›q’2ãÀJj°*OQ¬Ð‹½Žå0¤@)@ÊÀ'ø1úÅòò”±Ã„wëB¯Ž¡WQå`()çäßò-ÂϳãJ¹ü 8XêjPC^åO{®b=OeW}­÷Í›7‡ßiè€dê"oë&“ó–SïãÅ)weÌN+ «K.±r}Íí~ü7í½êìÇÆQƒL<Ä ênÿI«œ[F^ûýÞÿÓWí³½ÿ;ÿ£Ovþ¯þýºú×ÿ]ÿ×þƒ*vSí©µÿÖþ7j7²ë×þ_ÿ/ã¡~ÙŒõÿÖÿ_ÿÿàÁo`3/žþÙX&K>R â¼6gaEøùÓ ‡LZ_å>Ÿë÷òôûYh”…µ Í÷£f›,àC^¬‰ûŠavI¡¿<…Ö‘ÝQØ©¤<ÀF^/çx+OñKw­n´Ê4<Út¥)+¿<œ?}~ý* ~s­ŒÐ²bôAû È÷4åÈñj€/éÚàuÂòÒ#ðtÕ5…R½?ÇH‘Ý\§îâ%”úöµô×.°×¯^çUIiÀ&2µöþŸñµ÷çæÜ5ïœ b:E|Ÿë;ÿWÿ¯þßõÿ®vý_ûoí¿µÿ×þ_ÿoý¿±™×ÿ_ÿÿÿÉGÜ9e×à.`¦ÀÆ÷;^Îáu‘î \1Ô¤qì@Ó\ã'OüþÝyEðl:Î Þ@‹¼²CÀ«uŠ•w@õµô݉¼Ÿ£+¡£8ÈZ9Ð 54ÃÀ9Äj'¼€^“îÚáZz1<€zv„ @ —O/Ó4ê¥ÞÒN;¾ûöÛìäd½~ý*‚Vö0"ßÔSùWîÐÜþd·›þ™2µah”m»ÅÚAN1~þµMuÊ÷þïýÏð2žnaçÿÎÿÕÿ«ÿwý?ƨÆ]ÿǾ[û/«äÚkÿ¯ý¿þ?jý¿Ûf’ñ;ùšëÿcýÿ). ÆÂ ‹øûÀž~ö¿~Pã <®§¢ûw«^ÍÀäР)˜••üʹïèH€+ ¤(W€­ôy(0ËVŽF+ë(m ÌŸ^‹ Þ8÷õ¦¡-]ùX| ìÈÏù Æ/çû\MG+àËx¨ì:k]n†Pþ÷vIwMɉñm~ÛÒr•ëÓ8¼oü] Êù'DN}@€­¼å‘>Yå“#<¦Üx”©<{ÿÏxÕ‡újïÿÎÿÿ«ÿWÿïú¿ëÿù„µQ`×kÿ}l×ê¶ÃÚǯÝÙ~ µ9×þ?v¸~ê‘þ¹õ‘kaíÿç~hÜ}šõÿŽo¸þßÁ:æš[ëÿÿvûÿy…0nžÙoá 0çUâ*Ñ(Ë:òQNÀðcÊ™eBÏeÌ´¼²ùÙì X±˜7à/¿uY@FxwÀáßzJ[Ôiø {R“vÏë9Z48±_*T¡s2ˆÉïÛW¾Uù>­Wˆ¼”uŒ0þÂçj[_ñ“ÿnvCá%ˆïÇIÌߤßûþ΄Š\­Ïë“î_cZû¨U9[Ú62‘Fy×{ÿ÷þWƈø>¥íü?:fçÿêÿÕÿ»þ[k»®v=î÷?³¾ŽÎÜõí?ãÄøXûo¾]²ö¿áð‘í_›<Æø•w·½Œê—µÿ Ì'l?ê+6™£iåõ<6ìЬÿ7>ßôKýøõÿÖÿÏ<0€žùmðÿžþðßüâmçY”b&ùhÐ*K M'¿óLþKiÄH3¦­ù¡Vx8§P”;ËDók…å…<çí¬GÇ ½´¼Â7%Ñâ%M·>1!*çd†Fk^^ %îåD¶‘åÃûùPüЬ’M=5@Û.ù•UYçò¨# uª‡ì↓“_Kôjâ¼’YÞÊ´=•ýÓ´^‹[gËTñG›û²é®„òLÿLЏýˆ@¾#ü¦ü\¤œ]­K™;´ùUEü¦mý–YûI~è÷þ§öþïüßù¿úõÿ®ÿvïîú¿ößÚkÿ×'ª-_Ûõ=­×âÚäÍ_ûÿø£ñoÖÿ[ÿïò_ùÂÂúÿÇŸÿ]öÿŸ~úç¿zëfW)ö¼ŠÓµÐü(Z¤àÇäP® ^±VQÒA·¦Ã/Õ5ÈZN¾s¯¹å›WøŽÁçÛLŒ¾C—w0*e"Ïáëfq0dlh{ÚéÊ},ß?ß®z¯G*ç[Uv3…F[3Ê ÉùÆ–ôÔ%+rœ:ÕSð§mC›¾™²‡üšhøÏQÙ£Qÿ§A~iÂIÙ!j¡o¹€ÿö‹ºBù4nÚ½Ž¦‰SîjgdvŸ®C¾°÷ÿôëÞÿÿ™#3_¢Gvþá/2¡zоq¾úÿY'ßû'uý¹ëæÕÿçIa—ç]ÿÏ é¼ÚõÿôG猸!:yí¿tǽ_þ¦¾jþÚgôè;xÖþ_ûý¿3ªW×ÿ[ÿ^üÇÀž~>ßÀ2ð1NÄF„QÒ@ =ÃPx˜š`Q‹àâE\K ¡}\O¾óGšòW=]0±éBé¯ò‘!õOCÓK™¦ ‚sï@§ms­~A¡õ~? 8ôW{~¡@Í¿Ï}H~øµŒ<|í´úp_ò•S<€ðMî)¼~´ðá# »éÒ>J¶¹y^D£s]™”éyŸÎT–¤§ç ¨°N%>IÙiëÞÿ3Þ÷þgpîüßù±úõ¿u*ëímýÌú"ãZ³\g Ûõ×ÿ'ñpÙÆOÒfȬý·öÕQ›µçbaíÿÓy:}Ng­ýß¾˜xý¿õÿø®ëÿÜ ºô÷Åÿú£¿üã·@ èi PJbÒ9ò”D לôÒB;çÒ&‚Á$ßn&ç‚k4ás•‡ËxÐ.«–-_ÀÓ£,º¹–§¾ÖÕºïe[—ø‘~ɯ|ŽÉS·ò}°mRNP6 €h®[Wå_€ O×òå"ë”ô}-e½¦èu;t}• Ä×4­CÙ„©8¼Û?CsߦÂ,Ó§BŒÂ‹ßÓ‚»|xö¾Jwíèî‡ÈÙ.÷mh÷þŸq¨ßöþïüPgŽÎxØù¿úŸÚ\ý¿ëÖÓ]ÿŸm¸±%Öþ[û/väÚÿÛÖ aíÿc;ЛÆÈúÅúæ?֘Ț:¾íúÿÇg_ÿÆ‚_!4Q|ÿ©¿\—3àH ŽÄ—bñjŽë *€Bsè¥ß•±k£>Ý8{Êù by‚:EB?}®Î_<ñØšøNl¹Ë>pÕ_MœÂ™òêdtˆñ6QÈD:÷ ­w*Dê6‘êk»ÈL/‡>ÍÇ]€j=À«¼¶xÕÕòœd(1¤•o®§^}Ø4t•ŸLvf_H;ߪBÛ:Ð$¨ËÉÞÿGÿíý?£ÝwÎ̃ö‡ñí|çÿqÎÍ¥ÿGë:jõÿê:ÃXè:æÚÑun2vý÷ÚÚô}Ú~éÚÜ~sí@#M°ÆçzæÛ®ÿkÿuL'kÿ­ýOO¬ýlsƒ®t¬ÿ÷ vŒèkñúgHõ§ñÂ^Yÿÿ·Ãÿ{úÅ_ýÉ[c¹ F8ƒiç1˜\_4v òj`¡±ÓXãp­<# 4ùÒα²­ó¸ÌÏÉdÚ¡W¢õ(_ÃÃèÖ]IM¿Ç•_ŒOCëvÝÁ+6xÉ«4Î_½òÔ¾OÝú$ånä"Ï£Ìðéýl¤ÝS–üÎÛØ )½¼ÊYöþ§§õÉÞÿÿæÏÎÿÕÿ«ÿwýßõí?ÆÁÚÇv_û^£]ûý¿±ëwÅy¸þð!â­ÿ·þÿŒ‘øñë c£~7¼âáËßqÕr·ôßEÿÿ`i§]í¬@=×D2™ú½¥tàжƒÒ?é¬qVæ_À¨gœ(¯Ðõ;P´RÀü|ÞQÕ:?ŠOý™àC;w-ƒ™,–A´dñúá£Ü\Kkˆ¬®/ZéhÄŒrèµü*7Y¹Ò8ïk†Ò¾ýöÛ F)àæ‹/¾@U¬ƒ„ŒÒZ‡²œÇ˜û“9»Ï¦Ðù¥ÆT%æûT#ëazJÃK‹¯Ô“54íu•¿ó¤»K¾/6õºnØû~©Q¿è«öÝÞÿÿæ«ñ°ó?~õÿêÿçµ#ëÍ®ÿÖÒ]ÿMS›Â'Öþ;öåÚtÄ æŠ5UüéÁžM¸ì°!Xûº`íÿÆK¢õÿ>ŠþÈ„9:ŸêǬÿwÆŠÞÑ7í·^SÒ„õÿ/ì@gÀ%èÞ9þoÅž~>ßÀrSï!€üs:JpeÊt¢d@Ìõ‰g \ü²] Ú€3W§¨Ñu°Oeh]Ò³]~be*‹4õ©£ƒO^ó•Ký“ßÖ׋xϲ{Ñk‚ýV`Ê ®±¡ ž¨Þ¼yó‘ J;.yÐyÍ ´Bd¹hÐ÷5,Oç r…ð¢ S§zŸ²Èºx=÷ÞèÓ¦‘Á9Y\kCû&ù“ö~Úç£õŸæµ~qh'Þû?;÷þg,ÞÇÇÎÿg{çõ~ãÕÿ«ÿÏŠ»ëÿ®ÿÛ„=rÙ5c`Ä&[ûoí¿µÿÏCîÚWlos¦¾ÌÚÿëÿƒ—ëÿ­ÿOM\P®8ß¿žóß'ÿÿe@’[(Î*MÊ40á]ÐvT”ëäM ¹?@P¢!„~Ä89&ìyÅ®OZ’?埕´oêÌ7.>Ò{”ç]¦ò&_e9¸é¹™Mo”g( áuRW­‚øq |6ímyeüúàppðÇnœ¯¾ú* Êu/<-ÈÚ ˜ÉÃÏ–áa”€F>ðìÓ€V™)Ô3òM Ú¡Mô&¶i“€ÎY—‰k¸¥qþÃÈëú>È+cúçâ·÷_¯îýßù¿óŸ^ˆ#¬þ_ý¿ëÿ·y×ÿç…ìv -q4ÅÚµ­Öþ›qÙ–Öç„­ýŸ%õñG߬ýÿ¬Sî>Iu‹ÎÊšxý¿õÿŒãD¸Û©Ö éëÿŸ¾ù]ôÿŸ~:qèâæÏOÆ uXœgÜbiÂ&×à“ôÓé¬;MÁй úCQO ê/MËMóÿy‘ú7÷òw:pï1^º6$ç'5uº4)ggC°T>¯¤2òï¢ûî»ï^|ù“Ÿ„oËjµ¾ »°®]Nøãé×ZMúëÙ™åƒÇ1~dø§ŽéðÉ€›:È0¤ä§§'v.„ÇõXi¡¾ úŽ ¹ÏSh§m{ÿ÷þ#;ÿwþôHuÊêÿÕÿ]ÛžW’ÇHÆŒÕ(ÏTG]ÛwýŸ‡V»þG·Ð/Æ«ií¿µÿª#ºþÌ"4ÿ×þç_4¬ý¿þß(Ïõÿn¾íÃN½Ò\÷xÌ>ðeȲIN8›8\ׇ_ÿÿGxôët–«puÞG>‚´è¦tmû÷ÙF¬nÿ‡°ÿž~öç¿zKX7²õWòšf1AüJ/v( 9×Ïï¹+ßmmδ=Gß­€É¼ÿ™<=‡^¨,ÊËëžf@–^ìXã.DÆêÚÆ\“#Æ”]Yó¡õ)ã:QÆdD/´¾ùæ›_~ùå£=½Ê­þBÌj=ÿuˆm™2®çâIo}§ü´aò€NÕ¦]d“§DxMÛR‡òsdœ|4çÒ§ŠðKùáÙºÚ7øIS'š½ÿ{ÿgHñv‰Œ«#;ÿè½óõ¿9"¬þßõ×ÿc?Ä®™9¡?zníXûoí¿Ø˜Ñ˜·?36Öþ?¾•yr޵ÿõƒÐ¸ºäž¶þ_¦Îú×Z³þÿï®ÿÿøEŸA ªÊà®jxPÎçÉ}r 8ÇfJ“…éR¾å%M~¯[FQ<úDN^è§š ÈáñPX žyùÅÃI|\x3¥þ{|XT;¼ ˆ?z`“W¥·NiÚ2õ8íEh¿ûö»¯_¿ž]U¯r¶äK;2?ƒø©CzꙜv‘®ã+/ØÒÐ ®˜'QúøÑw“ŽOË„çðÖ¶€S“¯®¢¢Ê9€ v5”_eÚû¿÷ß:&îcÅX”nÜìüßùo<Ð9«ÿWÿÓY»n:‚ž…ñ‘.éš“±s+£üY³výßõÿÙÖ1.„£kÖþ˺<ý!^ûoís#cbíÿôƒ5dý¿®¥³’Ìk®cý¿«¦ÌúÿӵŢ?Ænûmôÿ³‹Áä¸ÿ¼­×‰4¬  ‡U(¸ÓØn ©Î°+H°s© ÔXù%Bùʈm£W¦ QÊ\Ž1ú*¡È5×ʤŽËn]¶üáÙÐt2U>¼+_æÖ§tò©wÚ‰/Œå/<¡%ˆéå€_ÒìÀúbvdùp»WõAeS®?¾¾(ç×úÔ©È‚ö.Ã\„Fš lóÑ;ošó¶S\z»N¹ITãÞÿYüöþŸ±³ó?seçÿõzíêÿèÊÕÿçáN××]ÿwý¯}µößÚ͵ÿ×þ_ÿoý¿ø´ãú%Zçlñúÿëÿ³øVÅ$ŠYüŸâ?O¿ø·ÿü-ÐÃûævì|ÿá|¿ÉSu;“ùvu§Æ ô1ó¦Æà$! ¤Ô¸±ó‡ñOy¢‘_ ª þ~¸>tnÒ‡÷ó z©É—wä~Þ‚íƒÓyÝï*Y.:UúIz–uÎÛ‰`®›Ö]^zF^4y]hd2X¥?È÷íµûJ¿OÙÔ©Â viáÛ>‘†ß§rµ®¦çñÔ¯íbyÎ}ˆ¾¡ý/v('F§Nu§ÿ6>PŸþ¿½ÿ{ÿwþ›/;ÿç•çù·úÿèp»|«“Wÿÿ˜õn×ÿ]ÿ×þ[ûoíÿµÿù"ëÿ­ÿÇvŽÏ}ù§l¦úºëÿ¯ÿÿÿ<ýá¿þ£·WÏ^½|õ4(¤>mf´Œ€›:wö*®ÒÊ3ˆ{@Á[^êPHöȰLb Ò{¸V7p¨OzåÙyÕº†8 Rdz2£N}ÏÏ=]^Ö§ÒÚ^¼´E¾¸uºP6´&轜z¿þúë?™¼k·|ü^ÍñÍ×ç»Yß~ûmøµ, ËŽ7mT¿PYÛ—I»Ò+oehߢù4¨[H;®]5®SÏÔUÙ÷þ?ï’ÛûÆÅÎÿÿÕ_tÎêÿ³¾­þ÷MÉ]ÿ­¡]Ãk7X[wýÿøÚÚkÿÕFeë®ý¿ö¿5ôîÛ¬ÿ·þŸµ³¾­Xà‹­ÿ0=rïŸõÿ7ùOÿí¿Œí5ëÞ|ò¡òh»Œf ¶‚9íL->Ý:*¯tOæGè¾Kùu6t{%O(ñFçº Së²+j2Ì<üJ…»õÄgÿŽ'qO“ðÁ»íékŠÒð!?Ù•iŸ)']Yà:ôÿäŸü“Äú,rÎâ͘SîÝwïÂG¹¶“ ®ÕMÜʂבi^œ6 ×Îà{yt‚²} ÔwºÈ[º”“ðàѶ<Ê^m ;™öþïýßù¿óõÿêkK×­®)]/wýßõ?¶ÇØ'½Žm3¶ÄÚkÿ­ý¿ö?_£þŠsá~ݵeý¿õÿŒõÿ×ÿ7îøÏÓ?ýÓŸ¿e`œa¦ËRÆØ'¼ÿ0ßxzóEÎ)Jåó¡/ˆÂpµËý‡ ³FK• tŽîyÎ{„vêÂGÁï@ C¨²Ci¡>äq.½yÚ´Š,ó:HÂаO¥}È2i‚Äs¨·H:` ­×Ku¯=•Ÿ|À-Û'•!ûI›*_¼zý*×x¶]dÏéwAžºËoN’îOÒ&n¾4ç‚vÞÝKÙ¥ü|0ý JžÎRN=v1õÕÄt¨ºæh~TåÔIæÆèÉÕXŸxm0ßáºø÷‰ á•vÍk”Êôwø`›:œ—/ÚÞi=oß5͵£²§Ïn¼Ô+¿u ûˆöª]~ÙñVïÞÿ½ÿ;ÿwþÓ¯ôÊêÿ££õEõôê+Ç »þûb×ÿµÿ̈µÿÖþ_ûý¿ky\ÿo:býÿõÿ‹a˜li=í¤ýÿá?O¿œ¸[`ó tƒô|6¯¸ý;á‘?Û—ó {^!ú¼@«‚ d«L¨²†ÄW¨B‹ïy)øÉô÷”«{Šeð‡×\œVM {=ÀÞvŒ½|òý§pI#—¸ N˦ýS>ò\ùø£—'Ý9þÊçõ½¹Î®/5LšWv;©=‡¦Û¤Õ§þú¯ÿ:¯ʳ{Í®5}Ô'W耥§¿ÜÖ‚rŸtÏC Tþ¶ 2)MÀ“<òk›€FߥüœÛs´÷ÿŒ½ÿ"ùc íüßù¿úõÿ®ÿ»þ¯ýwìÁµÿÎkÿ¯ýÏg\ÿoý?ÃúÿëÿÿøÏgÿñ¿þçÇ$ xa7R Íœxà†ép úx=¯¿}7ßpš„¼=„`2ß|R`c‘Csçÿ„®ú8ÊhЪ?²L" Í=<øH#¿2t·—ëli½äÙY%¼ðƯØ‘¦.<Õjp-½ýAÎôÉ”_'nä½ê£Ô£ÜµãúPû_~ñÂw©ÔÛP¹]«ãÞWåQúÄ€¼kûzûHýÚ€lxœs:Ȩܣ¿®¾e„íý?Ÿ¾ßûæ~ÇpÇûÎÿÿtÒêÿ³®þßõ×ÿµÿèõÿΛw–ýàƒíkÿ¯ý¿þßñéÖÿ[ÿƲþÿñ1ÿ>ðŸìÀŠ1~½b x"¾À"×Y»u순‰Ó?´ "Àï>ùµtå‰/G( ã~Îu!1¾‚²ø ɿʓώ'ùø¥ÌðH}¯æXXŸ²ë©u–§kò’?íK-§N<‹òçÓWd “>rž6"¸êw`éÊsïoH~˜A¬“–ëKÎ) Tk»ÉSšÆxJ:‘‰ìBóå)O~çCthF|eÚ?Ê(¯œ´¾Ôk ×Þ½´÷ßøØù¿óõÿêÿ]ÿwý_ûoí¿ØÇ—íÉVlXûÿøìèµÿ×ÿ37ŒÇúÇ—âOÄ7¥Áuܯé’ú±ÎãË_ºFÙôå•οUÞ\[ÿÿ¹ß~_üÿ|Ë 1 ¡ƒR¦Cš&6`¤)××üÐ  ‹³c ÕùE_ïìúqÞ0ŠsôêìÂûÝûÙ=tÉÕ"Voüä;:°¥MÂ@5×d™ØyA¡äL¾§f‘Wþ9\ãoç“×üð~v©)3ùb“¦ôÊ8\“ƒœÊ5´å,ô~ùÏ+{ê$‹²Ù=¥þÊ€JÒq¸ÿºSùà}?¿÷±:OæUÂK†ÒÊÂwêä5TfmÐodÐïBúwbuISnïÿ/{ÿwþïü_ýO'®þßõ×ÿµÿjK±j­ý·öÿÚÿëÿ­ÿ·þÿúÿ7üçé§ñë· -çK ´¨3.®!Æ(·õÊçÛï¾µ:ÐFáày?¯¯}ñÅ…Í v.=ƒB€åìØúö¼æÒ_=TȀ璩²¨O¾Ðv Íuþà…üŽ.# P¨FÅÓÈ ÌÓËó‹…ÊðK{.ÙÑŸpÒÕÙ'–‡GÁ'çåzÐàLÓ6mò ­È6r´¿åÙv:œh å[Ù\ßÏÑDæIJu*K}y"pk·…ôå£^ç=*ÏÞÿc„ê_«Ïöþïüßù¿úŸXýÖñ®=»þïú¿öß±1ÍpìvÕÚÇ~¢+Öþ_ûý¿õÿÖÿþL ½¸þÿùÕkýÀ¾¶nþø_!dx2:5Äuл+ ]vò}¦ÙE”×Í&­²v89§˜ðy„9/p4²Ë SîþàrŽŸ¢^~e°Ø #€Ñ«—ϯÞMFhð oÜ®\ãaW9¿úê«üÂ" GzÁô^ƒT!]L çùs5‰\ hòde€8ýÒWðš/Vÿ# =YÕ©5ö|³K¿èk€ZÃGe'1²5sbõyÓ«R’v#9ió]ËWî½ÿ{ÿwþðÖœØùÿüê¨þp¬þ¿´éêÿtÄ®ÿ»þ{мöß±¿Öþ[ûŸ#¾öÿúëÿ­ÿY‹è#~ìéõÿ& âoÿ<ýá¿þ£·€‡ ö( ŸäèÓ‘w°ôûL¡¾¯Sój^ý‹¸°ë›n·OøM,ÍÍs}?Réõÿ¯ó›E½Ñ&GË–¾@Óù5¿Ãßî0*]šî¶òÑr¯æõãå•/ÙìvúnvC}óÍ7‘×®¨„iÔ>l^Ÿìýþµ1ãpïÿÎÿÌ‘Û$´óÿèÓÕÿG·Ž²=úÖØ¸wø¬þ?kX×@ñ®ÿgÍÙõí¿µÿæ!óÚÿ±ï­µ5Öþ_ÿÏцõÿÖÿ‡Ôç×;ÿ}ñÿŸ~úç¿zkh°ÐÉQ`@õݼÊÜø8МÊn KÁâ€>ùºÂ{h„7î°HHºn‚4ü9BxÉoÝÎñlÝß½ûnd;¯ùàëS`èéh ÍÝ x# å†çfOœ…BÚçsNçxpT²HçÂõüx$}Ê¡r~Žùã[^m›z‡í?|¾MvVõ^I×#Üùž—„9ŸŠNݹ$Éé÷´gò{*#¹ÊsïÿÇ÷G—ꟽÿ;ÿwþ¯þ_ý¿ë¿5¡kv×qîÿkÿÕ¶b­ý763»tBmϵÿg„°Åç¨.Yûÿ|¢€½½þßúëÿŸˆ£7×ÿ=YIož¬ì:¯àyÅ:;t,¾¦*Ùœï6aà»RvDÝÓÓáã1^^áÐY̤9”- Õ4tJLÝ‚rhfѤq*ÉfAôäRÞ«¹¤cÔŠo¯AÍEøáåûR^퓯œƒ,Òu~m›Bx5P+Ó»:OËÒÆ§ÿr~•L#ú–é¹X;´[Üv©Ïù½ÿÚž‡¼“/('¨W »*ésvµ¿õâåð*fäUÿÞÿ½ÿÆãÎÿÿ£7躥ºBL'­þ?ëWuùêÿ3.¬=ÖãÆúç¾~Íâ÷X­Q»þŸþØõÿÙ.ZûïØµæÐÚÌÖµÿ…®ÁtêÚÿëÿÅ_]ÿoýÿÑ ¿—þÿ/çBŠp4ãç IwãxÚìcì: åcôYœKc¬2D«`ß.ù`‡Pöe“?¼Sçà>oE mi*OëÇ«òô[Vh@/“Úá#ð_óõ‹ï?Ä?iKéú‘füÓÆyÝoù€m*_1´ÎçO>\Zã[9ù~]Q9²>íׯN;} ](¯Ldkh_ë€Iê”vï;çäh½ø¹_‘ b5yx’Áñó³md«ü‘ïâ»÷ïÿÎÿÑq;ÿν ¬þ_ý¿ëÿ±+vý_û¯6ÛÚÇ^ÒìȵÿŸíðµÿg÷Ôúëÿ xýÿ ëÿÓ¸cÖ‡OTÁ%8ÿ§øÏÓ?ýÓŸ¿·Âaz\‡´žÛ¤â€FWz:iGô ð2€ŠP:å hÁnK@—‰5¢ƒ]~Òçƒê¯_×Dø’CêÛ!•²ßò–.è”7Cï× #—z&=çëu¢M®Î$gè&]è”J¥¾ H²óŒ\î𠃶‹"Å%Ë0¹v8 gm:ðvG✦®¶AŠþ« êhJË/v½ ~å©÷Cʃ†\sÿ´¡A~i=ßû¿÷çÿÎÿèÉK/T´Õÿ«ÿo·¬q»þgÍÚ:ýqv8ïú¯?Öþ[û/öçè6fmq±°ö­÷µÿù'ëÿµuý¿õÿkw¯ÿá??ÿ‹_¿-’W†f—NO‹‰<»š à„ö2Pïß©ƒ+¿êða” ãc¸ <$ßÂ…¶7¤×]ÐÄ&ìóñx‡piê¦ÐÜ@4÷s `Éâècä¥ÉÂ8i“¶¹v¨? “øBIÕƒGåÂß¹ºÅ½ )/݇ðšóW#CiÑãߺ¤Ç4m»‡ÈxOøä<ò\«®š÷)×Úw…O¯s?'ßý:i?÷ÀíÑ:„½ÿ`ÝûúÁ˜06vþïü_ý¿úßœ¬×:ºëÿ®ÿ±ÆžaÛ°iŒZ"kÿ­ý·öÿÚÿtÿeý¿õÿ¼æe}¨¿¿öv½þ¿Ùò?†õÿÿfüçégów€pÇöWÁ êó+}>èΉíGÕt¦ü>1¦±s §G™$êPWyßce‹0Ko^Œæ§4Xl1ÈÈláÍPJÙ9ËCãè5ºò‡è!¿6kûIe;Jw®ÍäÒ×zÇ5Ëõã˜t¯é¨ `4i)7õ ¨€#íþb'ô0|LneÐÝS#îÅ£¼å{ñQVÂ-T¶&=è.¹Õå~ ëùÞ}±÷¿cÇøÛù¿óõÿêÿ]ÿwý_ûoí?ö'˜ Äkÿ¯ýßq°þßy¼þßúÿ}È·þÿ,ÿøÏÓOÿì—ouòÝi ¨‘ú ¥çU3NL¿ 8N¹)&ô&« ã+ xäÚ¢w ±Éw®!hçø0 Ñ@g“vÊJ/ÀS^[†!íhÑí\«ßáš"u”æì:‚ÓÌ¢;h—78Źžó(šÉK;>œWkÛ—_~™úIÊÚÓã³yÕQ•µínÐ;Gß4õ§Îôî‘C¹x9Gß²úÊwÅäÝwáß Œ€Fèuë-|›khÈA®½ÿÇAÕ_ßïýŒ›ŒÃÿ;ÿçÁÁêÿÕÿ»þgY}¬ýgíÜõ?ëæÚ±Õô»·6—S®ikÿûÔßµÿ×þ_ÿïÙ÷£?Öÿ{Þô9Š¢>íúÿëÿ Åvž~1q7H$ú×Ðs¯™=ÀšÉê¯>Ú|•G׿Ü`ó¡tiê094ƒµÇ„SÿÔ3uõºYÞç³ËuP ˜óîý»€:­8¤eœçCéÚ7GëT~v¡Qv <äÓFåSÿäYhfâ>‰¬¬ä"óÄdΫ1hæ:u_òÈ#_$×êÐ9Ú&¹áßv\ôÊ¡>¥ŸË·¾öCùâw?oû’¶÷ïÿ5ðvþïü7VÿŸ‡«ÿg=ñ°ëÿ®ÿkÿ½‰@?²ŸÖþ;6åö·n¬ý¿öÿúñÙÖÿ[ÿ¿þ8¬AXÿfqP‹ƒIüí🧟Í7°t®íTà¦OŠ ´ ³X¦ `b´Ê\!Œp„úñÅO~ò“€3åoÇžè ÎñW^P®<\‡÷4`öÝ·ßåú€R^Ÿ›W9FÕ«×óKˆƒæ«G¼tvQiÃüÁúì*¸TöIïñý"YÛÔöåûWX£eênà‡w_%LþI|´¯¯vkwH}þG6|z¨]äâ¶W\¹œ7½uà›s¼RÉisNý™Pžb¼ÎñrÔKVqó´K›÷þÏøÝûŸ±ÒqhìtîŠ]ïü?;3_§?„ÿ«ÿƒÕÿ»þÇöˆ °ëÿÚY7­këÚkÿ BíüØ36Ä=ä¯ý¿þŸq ¬ÿwÞîZÿÃ¥?Œ‹"Õ)]gêãÓ'¿-þÿ“¸W¶AmHÏ,@Kh€hë¬J/`ƒŽƒ¨JPnh[‡4ߘRÖá‰î½å«ð™ò®½æV E¹Ê€¾²ˆLyZÇT~ê —L2þx’MŽ××Î+wPƒGÛ$SNZlÛ™eÏùäi¾ø£=Už~!We$oûí"J]¥ã‰/´-ß6û.˜þ¼ÓVæ~3ÌÏx~>4^A¤ÔôAÚ0é½/b<ï|Ô ÐC/¿¡}ß¶Io;ÚW{ÿ÷þg¼7ÆÜÄC;ÿŽÚù¿ú¿z³s¥s¤ñêÿ]ÿwý_ûoí¿µÿ×þö±êƒX7ë ‰ë[é+þI|”Ë·ñëïñbæzý?¾àúëÿ?àæP›ó·ÁÿÏGÜ *´U”Ms“¥U9 ï+vò ,í@aHëSEŠ¢åå½ûî]x1ÐDU>xÖh—8‰ã t‰|öÌ®-r„ÿÐH÷šžŠ)&òEžáÝïE‘Ímâ8IŠlhÈóáûH9—¦îÆÚ€_®‡Ç×íјüxÔý¼<ü„½ÿgìý¿ÆéÎÿèÿx«Þ«N£3Vÿ?¯«ÿwý7',¶»þ¯ý·ößñتkÿ{íÿõÿø¸ëÿ–MÉž:7æ$¾ññO×ÿ×7úbýÿóFš¾xúgówàäÖŒ’õPO~ÃT‡FZé -ˆ-#/@Ê Pßò:`Ðß@3‡¾å[–áwê82Hw ³‹¨ô@-þ€šæ+_~™g~$Í¡0È÷°7­C p*(¤hx‘Aƒç¯_D €tí(1V ×È霕”ħtâHyÂiãì¼òˈs]y©ïº•Uº2ÑËó+>¸¯/ìC7<Ów#?h¬åäÛIž¹ù‡ghõ¹ÁrÕ«žso>®7¼FàÔuÑ(#}ïÿõþÙû?s3£ûôGÇYÇÎÎÿÿGǬþ_ýÀÁ¬MÖ¢9ª/vý^÷­-úe×ÿ3>è®'1ýòç¬7kÿ­ý·öÿÚÿŸÕ‡[ÿoý¿õÿëüÿ§ŸÿÕŸ¼eô]ìg XPôc„@ D©‘4¦ÂG;ˆø¤ò´ŒˆU¾Q%O=~í ˜¥æ¦)t]ObÊ‘C¾Wà8µxå¸@ü[‡òå%ÆÂ-œ×üÎî­È'B^«Ú“ë Äq^Þx…ߤ5–ßôƇïNÓ6ÀWi¥× ‘Ösí€Â·Ÿ[Ÿôö¿´‚@øÈ{ÿáðÆ0&Q¯w^úVûî²â‘ûðÀ½<SiB<ZÒñþ@¨È6×êÖ–½ÿgl苽ÿ3Zvþïü¿tNôÒêÿè…êüÕÿ»þw,˜»þ;J_4˜#c\[cí¿µÿb[­ý¿öÿúôäú¼ÎY/æÿÝgޝz­]CÖÿÿÝöÿó ¬k#DŒ7À cÎŒL\ƒÂ€Ao"9ò$ë22úDc²nàPqй*r͈€R­«u'¾xÈë¾O_s>² }„K.9Éç]ir9÷º¡×æ"·zçp^þ¡¹€™»LL«/~úA&:´°Hríû>êt-]šYÉŸºÔá{YʵÒ^|µU|É…V}v«}ñæ‹4Sû=u–÷úÍù>>¾Çu¼ð™ÒÒÒ.ç¹g×üIBhöþ<&÷þϹƤñl¼SŽÿ;ÿ=Ť[Vÿ¯þÏXÈRrÖ1ëc×ÿ±.¹ëÿÚkÿ­ýO/Y;¯õsíÿË–¸Öúfb¡:4çc‹ÆÏIÎü¹ìÒõÿ˜ëéŒõÿÖÿÿöÿŸ~:¯VΨώÊ‚såz);y@væªP8nD@IDAT  C7Ê7—çš‚î!ô>n.þ~tüÕ9Sí+·óIzN“>GœæË–ÿp /ovœì«<ðø¤Ž¢¹öMµ·ýÊ¥ŽÉK›&J;/Ã3ùv£RùŽ–¶ ÅK;]÷Cƒvž}?}Æpó·ôÛðR§ò ÎÕù4€•và¯-Ê·ÿô±ð~ò¡ÍÒ_ÏÎ6´ú9m>åK®ö{îé\ËKþÄÒRÏÈ‚NŸ {ÿ¯Ý„{ÿwþg®îüb ÂôÇèŽÕÿ«ÿ­^Yˬ%»þa×ÿØkÿ­ýW»´ö«ucíÿKg®ýÿ l c¥¾‰8¾ÙØß!ºÖ™<@½Ðó—-¿þßùâßM§¬ÿw|]fëúÿÏoRý¶úÿùˆ»‰/ÄðÌÙ9w§€«K™Xx ¦ÜÚ(|¢dÎ.–€>Wž|×@‘—¯æÕ¹yïØ„z”:¡ò ~Õp²ÑÊ'×#oèæ" ‹QÒKƒŸkAYº.ùhŒC€Êá!Œä·tÍÃëó§);2 #—üðŸÌúëÿ­ÿÿ»íÿûÂc(<+“ß?‹(‘  ÆÎ!M¢K™¤Ü¥H(eñæ¼0Z âN ßÞÙ±3çQ:+Çù:'GøŒ ‘ãJ—€gø‹É7L '™xã«\hGªÓÞc9—//ÛMç\ý©oÒ¤+ëºé-¯]ΡJòÂÒ´)íºäl»b°MZ¯õÁŠ&qø”ï\=Îî9ÝÅ%u ¥éyùÈÝ,|q¦ŒëÜ—”›~žöú½ÿ{ÿ(sÆÈÎscçÿêÿÕÿ»þ[#wý_û¯¶•xí¿µÿƒµÿ˜»qü‹êÊõÿŽ_¨_„õÿÎ&ŽõÿÏxXÿÿïŽÿ<ýÑü !@ª`ˆEP4ê%y9&($ß«q‘<·DºðP‚×Uß4sÚAüaœD߆¢ôJÎuÑu<8çY4††|àmEø_ßošsN¨ôðöÚDö’I<å=”îE›úˆœ—®íQ¦òHÈ£/9½Ò UÞÒ—Ÿël©š²^÷R5èÃì^U|¶-ª7`ÖÕå- ?ß½ª<­çóÙ~¯ÐØŠßûTyöþïýï˜Ùùt…¹cþ GÑ!—îØù¿ú¿ú³sgõÿ®ÿ»þ¯ý·ößù‘¡ûz¹öÿysÂZQ{bíŸoYÿ¹þßúÿëÿ¼)çÿyúÕ¿ûoß½ð¥,À”,c P%"‰ $‘W Ê´XeÇS ¬óŠ^Ò¦ èÊÓ†(¼”Ã+sÞê(÷(õ9 °eÒ†øú0ú|Ûi˜á+ˆÉÖ÷šj®ñÔpË¢¡À)Óòa24®Õ+N¹¡wŽ×ÃIžäБwÎÉXyÅê͇J”=?•POúnÊhOÚDœK~WÙÒéd[ì‡  SxÏk”z_êW¶÷D¹Šd>òš†Þ¯V¶ó ”%0L$}ïÿÞÿ_csçÿÎújõÿêÿ]ÿÏ!¯ïìú¿ößÚkÿ¯ý¿þŸµ`ý¿Tó5ùœëÿ¯ÿ?¨I°‡bü)ÿ`øÏ¯þý¿x« IwWl‘Öï qf\›¸@¬î~âô0áüžÜk@­¿;ž4 öÉ0)“z&ö­ƒ~XOºs²hü‡³Ûjä$£ ,@«{ /¾:Œõ×9¯üâ$<¯;“‹¿t2µÐK ýœkGÁ'%FG©É«Ó9°ÈŽ6mÒyiÛœ'ob´xeaœº·Ÿ¤q"~@+ý?ùžZ´ïäEqL™a˜VxÚ¥Ý¯ß È8à•~P—ò(”÷«ˆ~±GMÞÈÐohK¿÷￱±ótßÌ+óÂá|çÿÀõƒ@¯­þ_ýo,æÉ®ÿ»þ¯ý·öŸµaíÿµÿÙ’]êÃH3>Öÿ;¾¬þi?­ÿ·þÿúÿÿsüçéŸþéÏß28¨Љ#Ä©£6×IŸ‰gL.àËGaÊ0\£†&€R¯¡ ÆròêvQœ ÉWN]@iŽïg×Pv$©è’É+ˆÒîõ++p5À¥‚7q:'-õˆS'àÒÈzàŸÉø$§m’…G¯ àù0»ö“Ÿü$<ÂsFé³ûç‘ÌQǼԙ8ç÷ëÒÈ èc¼Ï9š×€€;Lˆ*_ù‹ÉQ°‚,hÊÇwoü\2¹ÖeÈÐCé€Ò›7o"Âc—ÊÈ8ûòË/§µç„ÿði]‘ÏÙeF^²§´oÊþ êV^½Ý-'_: /}ß0̽TßÄWŸM 4i{ÿ÷þwíüßù¿úÿèW:rõÿ®ÿ–Ï]ÿ­ÅÖ`«¬ý·ö_íÑØ²ÆÅèËœ_1ýézíÿóКӱöÿúÆ@æÉÌõÿÖÿ_ÿÿoÿ<ýá¿þ£·‹Ç¨ái¢`wFx}4ýHx@¢™€è…ó›WÔð@É7©&vŽw< ‘ Ü:ïà ~òH‚<­PZ‹ºÐâ='É÷Ä•¶ £ÜCYÌùOyåÃæSNõæp>¯Ú%Øñ•0õœšÎb„™?|ä®r’þC@i §0"×÷æÜŽ(¡²9G£¼£<Oh\·Þ¶-÷lÊäûVCˆh(ˆFYê§Ü»ÉìÄA‡_úldÙûï»a{ÿwþïü_ý¿úßú°ëÿ®ÿÆÁÚkÿ±×þ_ûŸï±þßúÖ…õÿ×ÿÿq0«c›Á-þ1🧟ÿÕ¿-H°äz5ã`f Ž,аPe,(‹Øìê‘Hf$§Ôüò_æ:e'ˆ’Ø%íÄàÝ€—€OC•¤ëÒö•Â]ïg'y„îN*@ù†_yêØî¼ÊÇÌ•™2êKY¯(ެ^ÝSO¨‹ùÛO˜yÒ4|¾0KŸªÏ.e• ˆt*t~oÛ§m×}­ùx ‰'­|5€œúÇÑváFY°ìÍ€[øÉ»ƒthújæÞÿóÚêÞÿÿ;ÿWÿ¯þßõ×ÿµÿØcµéÖþ›ÏX¬ý»íÿqJÆa17Öÿ[ÿoýÿõÿéƒhüçé§öË·Nj¤z:ˆP€¯çu5r¯^ç¨âÚ(ßbÎXàÃ{Òñtî °¨üj 4&€ä\zwá縗ÅÓµ…=æÞ?ï cp$ !£Ã/üM8éyš¤>!»±nõ|ò+󚥺>}5QºvºI•·¿¬X™IwÀ®“˜Ü¾UU€)ÀÓU7YúÍ+çêî+ŠÊ•v2D= 0xµ4ýÐû£OÆ ¾¤½ŸvUn¼›N–ìô•ô«ÓÚç{ÿ÷þïü?¯&ïü_ý¿ú×ÿ®£Ykg]çÌîú¿ö{‹¶ö;rícá~¬ý|·útb:tý¿ã§­ÿ·þ?!´þÿ±'ª+ôý9;°þä-¢;†bxfòؘµhùöÛo_üÁüAÒ þ ÁÔa‘¨PÒ¾"OÙVZ£Îµƒ®„‚>ñL©ûÊô-)u ¦¾‚¨ŽðŸFˆñ¤#y&½í+þÚ °™ lÁ›ÉŒb´@ºÔq•ÃO=Ÿ x…kìø x=ê™k•‰\CƒŸóß|ý›ô½Ý[ý»t¯$ ÎñqèK±²‚Ö¹uMo19ÈW:i‚ôÞë½ÿ{ÿwþïü§#ªª/)µÕÿ«ÿ­!»þ_Nø®ÿ±€·ì vGl¶È\³sÖþ[ûÏØXûÿØÛkÿ¼aý¿õÿ¬ f }‘xýÿõÿg,4ü¯ðŸ§_þÛþÖ/ã1Pƒ1H85Ú«yíLLñ0d \?ú¬,Z±a(ïÝìZòs[J38/¡ ¦àñÝðóÄR9üÁ1Òe¤«ûC¿ÿ4;¿üÜ*Kh‘8çùCú){ýÓàNëÇï]€ÐU¯ôÔ;uöDe< ¨<ʑѢŒ¿š¼÷~®¦á¹ë0"Ý®/»³ðL?Í·°ðÕï¾;¿,x Ufôá1éÂãüªOùïm“&øž•ö ³ð ïpM¿y2(ìý?ßÛû?ãd†°q½óÿèŒÿ«ÿWÿïúŸ…rþìú¿ößÚkÿ¯ý¿þßúëÿ¯ÿ~ô®\câ`/ƒ7ücà?O¿üwÿâm@G_=c°å½nÀÀcþ|‘Wa¿þúë6ÝÙ$ó0eb_Á±/bà Ç@~ʈþÐS<€:èaÀ˜l1ðJyòv§ÙRÏö óªàËù š2‚òêî7 ”-xÔþØ3ôâÊÙ>9¿Ëw§‘—chŸö£}„§¯Q¶\bí¹ZÏÞÿsï÷þïüßù¿úÿ#}¼ú?kÊ®ÿ»þ³nÖþ[û )¬ý¿öü ~Îø4ëÿ­ÿg<Ð|Kñúÿëÿÿ½à?¿þÿê­Áå[LvJupõ=dß´*HÔ*ô°Yœ”-¯ÀåQ³CŠpý ½ó|khƒ7@ú \ÁÇn$y¶¦«K9qÀ˜)[P§eíuÊè/Z¼Kè(M»Å”ÅÛ'ô’¡õ¢qž6\ò¨³ë]†ðŸ<¼ôÉ"BÊæÁ'¡²K¾óòm-2JÓf‡ ‡j Vöé„ôƒ|²i#°¯í’.´ x ëk…v~ Ò„È?õjcûaïÿYlõÇÞÿw¯ïÐíüÖAæNæÕÎÿèØÕÿ«ÿ­%Ywf-ÜõŸ†ø8ìúýõØúBXûo¶®ý÷‘ýI¬ý¿öÿúëÿ­ÿÿ öÑ‹ãt<|wþÇúÿçÄ´åÓÏþüWo9©yÍnŒ NI ±5€+ÒQ•δ Jì×Ù†0ÆH€‘9ÈL÷ÆHQÖÑE©Æ‹o#$°‹èö®+Ån©¢õê°HzxN=Ò}¸¼@”Õ(u‘O=è\—_å dÁ›Æ™]‹ÃsÊŸ¥YG&ü¦¾†Ö‘ëçä <ò5?r¤¿®ÂêÊõä¡ý|ú¥¯Gj3`ËҨ׵vHßlå«Ç!/õ˘ Œuý~Eú{Úº÷îËô×Þÿÿ;ÿ0c.¬þ_ý¿ëÿY;ýµ–f‡É¬£ ]ßsýœ¼ëÿèµÿÖþcDzC…µÿ×þϳþ_æÃúG/¬ÿ¿þÿß ÿùÕ¿ÿ—ó ¬çÝTÀ,¯Ž Ò ÄNŒ†šÇæH^@i¥D’fb¬ h2ôÇ1´s Èr€åvºœßâ‚3å‡Þ¯ ¢E†Où·>å¦7"wâ)$ïÞøH{„¢¯bâ§M~Ññ«¯¾ Ýo~ó›€N¯íÈšBh? •CºvªO ¢ºšO¾OÝQš]XBΧ úå÷þŸo‘#{ÿÃj|'ÆGÇóÎÿÿtˆP]t‘‡¾siõÿtÔêÿè]ÿŸ–íúl6FÌÚkÿ±Á­+kÿ¯ýÏ¿©ÿõ°'ÖÿËü`w­ÿ·þÿï»ÿÿôGùÇo9§ÞM7!J£`ˆ4 Š…¥ÍÝ™•ï:¯¾]À žå£\¯¥éte¾øâ‹Ä>¤î:ü‡PžÎ•õÝ&AºàÕ–8N7À ŸC{^gð+„á94¾oÔºGŽL€¢WÛí†J½°ã\x¶?8bÒÏë#›„ÇðÑÊoÙЪÒî4ýuEü¢ÞÃç[Xù7åÒ¦á+è¿òÿáýäÂ=w ÕÜŸ‰ûQ~¼õÑhwÚ3p…ÿÞÿÙ¸÷?£§ó6ãbçÿÎÿÑA«ÿÏÃÕÿg÷²5Å!XWœïúÖê®Ïµsºf§³æÏ®ÿkÿuŒ¬ý÷Yìrý±öÿÚÿ÷ì]_âÿ¬ÿ—å£k‰ù²þß`ëÿg\ü¾úÿO?¸› 5ª ˆRÕ„iüt·‘4å,>ÊÔéõn7z@φŒ¹ÛhýòwâÑ©÷®°ðîûáò8PžVœÐ)ã¸Ó¥¾K^r+‡>í»Ú˜ER]O‚‘Ñ«’dÿñúõµÈ éRxùМr‡ß€"³öL‚kG”îðó*£ LöuÓ£´§Ló•ï‡Ü¥¹ÎÆ/Љ,‚ö&Oý C›pÕw_ÂîÀ½~¼¤7͵_ÇÞÿ½ÿZoF;ÄžÇÝÎÿÿô=b,¬þ¿^5[ý¿ëÿ¨Ë®í÷µ–u½ëÿÚcl=Æ=ºößÚÿÕÆÃÚÿëÿuÓÁúëÿÓ ëÿÏ¥_^¯¬ø˜ uD2YÆÈЏþk 2‰ÐÁqé9zç^ƒãæºþ¸PVVãÍÓÛ{°[Ê6bqäÁ{Ê©£2Š]¿™\x ®ÛQ¤~’Xýzê9ú ”|Ƃެ¾¶§,ÙúM |IMö¨3ç©ãjO¸þ´dw¸«ßyåEŽ·ºúQ`õ¨MëREwd¡š—‹!8½š«+館ïÓ£TäZWûVzä™§ðCî½ÿ{ÿ—Ž'çÆŠ±h¼ôÜxr¾óç?-d<¬þ_ý¿ëÿ®ÿÖNXûoí¿Ù½™AqýYûíÿõÿÖÿ[ÿÿl ²d®ÿÿ7à??»>âΨàp 50€>ùú¤_yC[§D™3@(¯Xpf¡ƒòCÏXIy·!wã2b.pÇ«¼÷®ÜU˜‚O”ÇWÙ:Ësñâý\ÊæuD`Ôð{õúüò`^3pJPÛåúñºÝˆUùå´òŒŽ‘u=ùäQøe‡æª'<†®}©|ë~äqôoüµ[Ð^áQvxyï߽ϮuË÷ °ö½2‘vx6–&T8WÏ÷–LBc²µ^çÂãþ9ßûŸñ³÷ÆÆ5ÎŒŽAç;ÿÏüºÏ%ýâèÜOÞÎÿŒ!:¦;ZWÿ¯þßõ××þ»*®ý·öÿÚÿÌŽÊúóVÓúëÿ¯ÿ6KðCq¿;]G_Œã5¯Õ=€žñ[)9F™&‡žó!–çh’‰6qw0•¿XÅDZ;Àp„ó«¬r¾ PP© Øw°ü"bΧ.ÎÐG½}bÃz7`O?ìî×ü(?25©¾Ÿr‡ç| ~Ê´žîÀ"§Pdב|²Eþa¤N2ÞÁ.yè ö$Ò„ôÛÄá9eÅå‚ëOåHÞÐ|˜>)?} ¡Ê¯/νѦòQNèõÅîQÇ=¿yâ»\=—9öþïýŸ±š°óçÿêÿ‡>]ý¿ëÿ®ÿkÿ­ý·öíx1»¹öúÚÿëÿulÔ·ríU@qóŽ}þÆïš1”¼õÿŽ:ý¡_Öÿ_ÿÿSüçéWÿþ_¾5u Òíy¶ó8×dËäBsí2)¥u"»À5¡Ë€»^»›ôî8zÐÏ‚Eø<>Ž;¼ b ‘_ð(²M%ýÂWpFî|3k®_èTP ½²m—k`žvmˆÊ¿t➯ΠxæX]”´#²L{ɉ‡C¾ÃyÛ:$Ðçü–׺ÅÀ²/àZèôÑß¼µ&±²Èl¡ôæUž–Eòiyu”~ïÿô÷ÞÿÿtÌÎÿè«Äêÿ£{«'Wÿ[õgݱVMÜ5ÇÃ#×Òwý¿LÜ×ô]ÿO¬ý·ö»´¶·‡Økÿ¯ýoLTG:Ïš»þ_|<ýñ©ÿ6ËËúëÿs[j‹¹0^÷üÓñóÛæÿ?ýl>⮑‹.©¢,\\Áâ2‰I/­4çîå¤Q:å[ã›òÔh”6Ùí%¸và¡sÑ‹}J¬e¥§³§FOÁœ€ò=«¹¶~óÍ7‹ø*ç°s«¯(öfrRñ’ß4²‘ØÖòmyÓ'±ÚçB›SO^‡¸êk[‡uøú&IŸ:;Ú¤=ÂE›v e…Ȃﴗü•I~•[¦!¹ž?òò͉‹V™ôáÐáãx”Ÿ¼ð@t…´uh¥—Všs|öþïýßù¿óŸN¨Ž¤VÿϘ ÛWÿ?Ö”¬}Ó'ÆÇ®ÿgÝõí¿ÚZÕkÿ­ýOG®ý¿þݰþßúÿð…õÿþóô‹¿ú“·&F ¦`›#ÀˆqÙ¸(¨ä©ª×ðt¦]L£ÐÏ7©(\´Žò½ÇÒ)Žïç›Yo^Ÿ§-Czï/5à€d¾mÕWÃCPÍ>ÄÏk‚¯_½Î®,2`¹óô*!`*ÀÌð,E¶éƒ8`8¦Ný`çYäùE2œÅåh¨¶Ÿ´cx9Èà\ùÒÌ’¾<Å¥øÏ9yœëóž+_¾¥k›‡ôÑKîYiõ¿2BåQFØû?ìÞÿÿ3svþG%Dç¬þ_ýo}Ùõÿy­žÅ3kû®ÿc/®ýeiެý÷l×¾¬]»öÿ8Öþ_ÿ¯>ØúëÿÓ0…êIc#þüúÿù¶9_¬8PãéÿùÓŸ¿å¨7è¸v0£àQ@  `1Ñ€9bG;Ù¢ôr:_%BÆî\„®[Å]ü:å’?uã%°¤~‡ï[•V~ë&§ëÈ0eðà`ÔqŽö ½4‡:•W–œø(—zcêŸ<ÁÎ"A™@gùIrøØe èqÒÓÁÚ2‡vØá•_GÚ¶áݵÃKÝ…ö™üôãжÚ^|Ú?èõ/ÀÈ•¾ËõH2yÉ>x8Ðû–VÚŸšCòÈW=~Gö‰§?Úg•ïÿÿöþ@zçÿÌÇ3•‚g>>æÐÎÿÕÿ³ûvôoõçêÿ]ÿÙ»þ 6óB_Dg®ý·öߨŸlϵÿŸ?]b~¬ý|ÏúCëÿ­ÿÇÇgwýÿé:Vñûàÿ?ýü/ýÖÎ¥|¯‚:f¡ ìÈÑ1è:@!× q‹ŒtçÒ ¹>á€!øùvEH¤c”k}´&¿õµ×Ê~ýõ×/¾üòË삚B)gK|²–¾àÊëÙ©„·|²>hÜä¹.@Uðëó‘1ü¦®)–²Êµ*@0í8:¯ >‡ö+€É.µ‚gÚ‡ov©‡<¡&nž˜¼÷àZ: Š<‚ÅlC«ï&¬÷ ¾öoxëó¶oïºjïÿSÆIΗŽ}cgçÿÑ_;ÿWÿÓ÷«ÿwý·ïú¿ößÚkÿ×î^ûý?öòúëÿ¯ÿ6Ïü}ã?O?ÿ‹_¿Ë++€ÄÁympͱ÷ÄyÚ—byb0©³[à*ÉÐL¹À• .¯¿Ô= Ò3ÙïÎó¤ÙÑñþƒ×G¦¹Æó«¯¾zñÝÈ#ÏGÜß‚ÐÎ9ÈÓv׫‚ò6èÚrHo{ ò Ò>Þ úÈvÅu\•ä í‡\OQmæìûøûë‰åË“¦êѯÒ#§ú& ©,ÒË_^^{9ÈT9uMy—üIÌ=©Oø”/ðòÊ8œ7¸Öνÿg!r/öþÏ÷vþg^˜'ŸæMç¡9¹óÿú¥×Ñ!«ÿWÿ[{:WÌ›®QVéŽÎ!1=»ëÿ®ÿkÿ=ÛÌkÿ­ý_;}íÿõÿ¬£ëÿ­ÿ_¿ã÷Íÿÿì?þ×ÿücw@e.\N˜s¥>ù0ú¤w+oÁ4:¬LÿÉO~òâÛo¿Í¯û‰kŒ¢s^ðÄ9PÇ1l'hÔ›!­N@;”¦Œ \¿&ˆî¯ÿß¿~ñÅ›/Nù¡¹¿ÎdÇÖ=èR€§‹z¼^§OR¿ókG$}SW—÷*Ziá7²0ÊÉWKÝòÔKVuÆ€Ÿtý èë‰di¿*ãðêû è Z|œ£s-ßucùêä;—ÿ*»çF»±´m‚2åßÞÿ½ÿ;ÿÏŽÌÿçUîÕÿg·/=¹ú×ÿ]ÿÏæ¬ý·ößÚÿãO°½Ç–^ûÿÙ—°VÖ79ëæúõ¹Öÿ;>î8žëÿÞ0Oøçp•õÿ®ñ?ò+ŽÙtœÎòÔsNžŒkRÊÇ }å)GYFòañ‰ïÀͰþ Aß@Ñ—§¸287ÁêîN%»¨Ôƒ¿ÅÒë‚ï²ÃÉGÛ•‹ƒ5Œóˆs­|”Ä”Ô.MÀǹC]òÉh@#ƒéBÏíp}xÎ÷±¦=‘s~QìZÀë7¿ùMèÐ ’&=ñ\£×gßM[ÈâÚî2íÁÈDÃ@]7Y%¡0·äôYé¤'ÿj—{†®€ÕÉòdžÐ¾W‡²)?ÌÒ¶©“Ìt…¯¼½ÿ{ÿQãcçÿÎ?pa<ÜCôâ$ЫÿWÿwlXFº¦tld‡ëŒc¦kÏ®ÿ»þkÿ­ýÇΰ¾¬ý,øè͵ÿ×ÿ[ÿ/¶ÄúÿcT]><;‹OGü.úÿO?ý‹_½|¤›K9€†K‹PÅëzGŒÊTZ–c"/ßÅFÚÝ¡æø¦Žã^Öy¯Ë»ÎÈÄÅ+ñò+a„FßYr&£• Çksìx²’?†³ïR Úy@«ôHø*O>ô•3<¯ôœ?ÒðòtÞGÛ]“9´“ÿæÍ€nïÎ7±ôMƒ|ßÝ_Ò >í;Ûy­Bÿ†×Ч¿Å¨•É;­ôÊÎyv¡Í®/|ûaz´øeÚ¼^™¸úògïÿÞÿÿ;ÿ]ýæ»ú×ÿ]ÿÏ+Á1Ø —í`~¬ý·ößÚÿkÿGŒnXÿoý?caýÿõÿk/ü}â?O?ûó_½-c1c$ß~šs †3o:ú=§=ƒvH„@;0¾ùæ›ð:ÍI-BGð hAïÚàNÞ¼ª'¤þI+@ƒg·äz²ÿ&¯½ýpd™kuÅk¯_¿9 Ó€2ùþÌȆ%>#ë¼™ú‡¿:-º‰‡mdš4Œò¤¥O&ÖîÒ¡iºøq­>´#£>I:srÿÈúÙ7ߨš ¯+ åMvGøÖá MÚ™'¥E'­ ˆúËo2 ¿¦UÞ$ÌŸ”:AÞÞÿ½ÿ;ÿwþ¯þ_ý¿ëÿ®ÿkÿM´ößyлöÆÂÃVfÛ¯ý¿þ_}§õÿÖÿ·V¬ÿÿÀSà° !øËßÿ™_!üã·”.PCˆÑ#PdÒSñœ¬pqf@.à•M½³¡Ç?€ >@”Ù™$$C0×Ï»±¤ÉU‡²{òM« |X© æÃæÀœ¼Jàš×þRnÊ—«ç›x*ŽN]dÖäl<Éõ‰ë—¯æ£ïó¯txj >ÊáÙev{ ½FWã(`w>ÒÉ/ xY¦äyEïÚ3¿BèZÛt? ½ê”Å,ÉÃ{dtº'¿²¢%a¯÷þïý7fŒŸ[×q>ƒeçÿÎÿèÊcõÿê눵k×ÿ]ÿ×þ{¶÷Öþ‹qû’íÀÎŒmºöôåÚÿëÿ™æÄúëÿ¯ÿÿŒ ýïâ?°ê¬ú…‹LŒ‚?{&]žÐI<€—²œ˜×^}?÷”–#ÎÄðDP¶’k”þ±Û+PÊqœ¥)«Lœf&¸®¬®KCŽä2°KKã•+•'Ç órF>¡;”ð`ˆ‹ó]­ ¤#óT”6â#¨·úÐLzé€S—üúÔ¿ÊÞ¢« _À¾¹¾xø`»XúÝOtUtø´½é×Ó6¯’Kšü¼÷zÉZp.;ÍÔ‡^çØû¿÷ÿ_ÆÅÎÿ€ÏäØù?ã‚îVÿ¯þÏ8°Î\sc×ÿ]ÿ×þ; ÍÚkÿÓ‹Ç'YûßZ¡/ÖÿÿìúQ´õÿÖÿçW¬ÿ0ˆó°çàÿ'øO, FgÈÈõü2Q:@»Ÿú*_>0(º”tMóÅ›6J«À þ€–€+sþò鼂‡šs^žÊr—\ âž'áú¨!£x*Lª²ÝÅ•„a1¥ßÏ’O>å€U¯É§¬ïN‘É·±Ð4BþC'ß9¹Ú.i®#“ôÙ †·üæõÉ CÇ÷º€nú¦ík5`°_ꟴòÐ;øøR¦ý•ºæm~Ž^Ob®'íJsKÛû¿÷ß8Þù¿óõÿyHB_®þŸW×z¥/výßõ?óbí¿‡}¶ößÚÿlìµÿ¯5é‹õÿê‡ñÍÖÿ;»×õEŽËeSä˜EE ÿƒ¿šÔIŸ²Ñµ|Û)'Ä>ã—_4NÖÿÿÝôÿŸ~ñWòà én¤ÁÀút–ÁÄ¡Y˜Ìu'¥XQßÐ ¬©«±¼ûíxwÀþMùÊ;„ü9@ê«—¯RŸkyž :y5 9|‹ `ux‘¹<µ·» jœ“ ™§msØ¤Ž»ìåÙtJk*Jÿ„_ú㼉&Oï&ÆK¾k1ž?Úµ6m11MHÿ•’Ÿô<&®½®‰°¨fd#ãU‡ë½ÿ{ÿåÿÑ&Ñw;ÿŽ¥_VÿýºúÿÌkÆ®ÿ»þkÿûkí¿µÿ×þ?þ‹urý¿ñÀâ³5sý¿³Ùƒ¯É'®Ï©„ƹ¸®¥5½±|åëW§w‡nýÿkËô'¿/þ¬3Å Hó™×× xÌPÉn©¼Ê6ù|¾å½]×v K.fè ÀôWï:‰/@¥Âž?¤âí•Ù<—ÊåˆlÜ‘g Øãµ½kð»™@¨ ð¡ùò'_¾øúë¯OÑ™LuNðpt¢IWÞk}#a~í¯Ü=ê˜ò#Ðãš,•ñõüâàd¥~<•yzy{4®){@UÁ1Îúä«[—úÅÄ\_ò¨= Jú0J·’=ד¯>AwWÖÄWš¼Ð;¹ÂÞÿ½ÿ;ÿwþ¯þ?†Öêÿ]ÿwý??ÞÃD`[°+Öþ[ûoíÿãgÄξlyöu特²öÿ|e|ë(_#ý³þßñ»®1³þ_¦ÌsjŒ<ÆÊÉzäÝçÖÁ&Öÿÿ}öÿŸþŸ?ýùÛÐAùFÿÎИíàÒŸæU?àI»€|oÉ+”’'pœNôZ :ƒ¯€‘ÉÙü(¯x£w =uf䆶tëýÜuPg>sÚ]Þ)%SøOz^w¼äøØÒûÕW_Ä"?þ1P‡¦A»ÉÝpúáYï†?™•Á/mzõ ³‡LíS²´_üFù÷zXá1DÒuJv‚ ÕS°*´CAF|”k?¥?¯Š¤ã•²×=’¥ïì¶!?^•5<öþ§?öþïü¿¦QÆCŒÿ«ÿéÓÕÿ»þïú¿ö]Plí¿µÿÇ=^›zíÿõÿÖÿ;ø@}Ôõÿ×ÿ‡M8‚Wsok0 c¤ã„ÿu?¯?&.þóô³?ÿÕ[L)<À €Êuž©*%Jg»4„’þòË/ƒ°( H4é½VYÒ.à »ð= çoNó§ ù¦‚¿É»®=ä%«½Hv‘±|•!wh&þÉO~¹ùÃÇ®×çßìNškßÀjµC^Ûð©l){ÉY¾•¹y€2è;yú ˆä¼éꔑVÚd×›@¢^¨ b}WÙÄBóS¿ü¡kZ¤ ­Cº{ÿÝå½ÿÆãWÓó¿ãdçÿÑaGæVú‰î¸›_™S™¯'oçÿêÿêyccõÿ™æpþæ4>c½Þõ×ÿŒ…™CÂÚkÿÑ«,·X±kÿÿú“n]ûÿ¼5´þ_†GþÔ®§O×ÿ£Aü[ÿï·Áÿ{úÙ_þú­ë–ÙTCҠ΂0†¥­Â^t-Ýî*†7PÅëxÊËsÍAe¯¬‘§œWèÄ® ÞÄúÖ?LÃGÚ'çhÈ"ßGø[Èf—9šng ŠœÎSUbùX¹×&µmäõ­ì´Àç2¬™Iò=Q™Y~údø?M;„ôáE‹®idlÿTN“?íºcÌ9ù•wT~å°eاî)+n]`\L¹4¼9‘ ™!™r•Aš' ä+%Ь…Rvxüæ7¿ ˆ¥n V%ò¶íbõ™œýîCó6µ¾‰iò*ùýša§*`ÒÄÀ¨ðœþœ“|T¾_Yý,´ž¶ÈõGýªgãO¡å¯ìôɽ>úòì®+×d¸Ó£Ûû¿÷çÿùîŸ9âØù¿úÿ±ÞÌxXý¿ë×ϬÅ3&vý_ûoí¿OìÖ±'ÏüXûíÿãûñ7ê“Ä/q1ú“GSÿGºëÆ!Yÿ/ý£ÿ2§¦SÖÿ32Îfõÿ&r÷çÙ(BæÙœËûmõÿŸ~úg¿| çfhѰ~ëJc]û¦”s;«Úl3 &‘üûÑN³ 'ÿRMh\“CìWíø²#,uà£ð'í0 8ä#òû+jäÔãÆ|7»­Þ¼~ó˜Ø¯_Ÿ]bøx¢*¸©ß¹ÝYøsž0qåït^STG®‡P¬Ü‡÷g÷YÚxñÀ7²µ¿ô£x•kC£ñDcgØ£þICSúðÐgC§ŒºÄÒÕEÑ÷<×W]èº+KzÛ…¯ëðšsÁùÞÿéˆ[?íýßù¿óõ?]¹úÿ¬Y‹fÍØõ×ÿó§¶O批2‡ÀÎXûïììÔµçÖþ[ûŸÉæ^ûý?kêúëÿgѽàáèúÿC©-1‹ç‹§?þÿê-”òÁö3y°º #h¦P®§gv(£ü€7B.ÎMS¦i”~éébü²E?œ|€}Ùð–NhåúÊ ë¦ûE@ –6”ÝR^#üÿØ»³eMv#;ЇgçtÈb=N›©Š3kú9Ú$U±©ïú¢Íò¢/úÛ¬CVÏ™‡lÿ±þ™¢TªQÍâBflD‡8Ü׈@£=n~^‚Žov\ÉO‘ý·În*¢hP-€^všá|Ò.4øHÛòsn×0‹¬Û§ÓFeÕc± ò|rN.aË¥0ÓN›òêÄ;zçÛÏÎ%\Aº N¿9_ðlø÷þ0÷ ÷¿ó?s¦óÿúÁü ¿hzÄyõõ¿±!æÍ®Asž´¬­;~&½ë×JÆ…˜>©ýwlÁÚµÿéÎÚÿõÿø¼ë³Õÿ«ÿ_ÿÿacšO?üÅÏßR” ˆ*®ß¼y³` ¢lOç½æøŒ!*ß!̈Ù:/¶ùL9¶í¦p†½Œà‡As½‡Á;™,ãC;ç©/r…-:õm™! "¤§Ž]¦­Êj‡wXo oåµ…,úá^Ÿº¤ã#Ûù˜äû®”ßøÐ.¤Ò~5;Ìðšºòž0×küå¾€×ÉÏíÿ¯ïcðaªŒ#a¯¯‹í‹ß@#{ëºúµ÷@ɹ/éëÞÿÎÿÎÿ3'¢WÿTÿWÿ[×­a×Úä\èúvC?Öì®ÿµÿ®¹1ÆÖÎs¥ö{~»cÿÄ6¯ý_ûŸÍEæ}Ì뿘;—ŸÂgÉz»ä1’äͱeêÿm·l_ÌÙú„úñêÿÕÿÏøømõÿŸ~úWò–ðDÊÁ!]#ïJõÁŸrK7;ž(a†‡]Bhì„Ú÷b]“g'’Jæzó?Ãïæ0Žgw“úºêÊÔ»§+³2†Î¿ïÌ#~À¡ì„bTkC@µ¯¿þz í´GC|•çˆ&LêwCôˆÄ‡oÏŽªäËÓŽ€O®å…Çò¼Ú6S²Î=Žvê|îO¼ÂcO.~äðëäËÙ ÜÒn;϶??)#-íÃ#<ïürŽoîcïÿ,žÓ1¹w½ÿÿÿÕÿteõÿ©¬õÖ7kJÖ®ÿ]ÿÙyµÿžm·ØµÿjÿG_²ù×6g¯³ÑkÿïæýSÿﬧñÕôI‚óú§7èU}‘1SÿÿyóJÆÌê˜é§„Œ©\‡Îµ¾Œ÷Ûèÿ?ýä/ÿøm¦!i,£Ôµ&-JfÍJ¾÷G1^v7Ó€EI·œ+»åçBÇåPgvg-Ø2t;eMÖù" 2hÅòÅž 2Ÿ,=@–´€:€+é ÀM;ì x„úâÍ ÐEž…¿æÓ}Öð¶Î)»4ã¯þäéiÙöþîý»Ó÷A1¼R‡~¹ /à†ÿT²õäÅî÷:Ñâ/ÍýØÇ§O´)ÛJñ^C»ç£_Þ×ùDîiÎÃ;ùä MïïÿcÏX:ÿ;ÿé˜êÿ£ªÿ}Ðõ¾L<¡ëÿìf¯ý÷±S0kgí?vníÿÚÿõÿv¡`O_¾íúns]ÿ¯þ¿u‚ÿMOÄ—^ÿÿ7ã?O?ü󟽌x4Pç1@à$ /C]Љ‚N6É_Pi:Ž—ÇÁyŸG݆fÃ9ÏB+xÔïå‹—;‰Éà@C ˜àzþlÞæ_i›n}œ2òõ‡·vE6²úÕÃȬ¬wU­ìÚ6i1Ä  Jºó|eQyÇ:÷°‘!¼É’Ç*”Ùcø‹ÑŸ2j]r§-v¡y„9U¯ú):/¸w-Lmc<VÒR×òCsë·ä‰µ ½ÿ½ÿÿÿt½B'Ð ô†£úÿèÔêÿ®ÿ]ÿkÿÑ“µÿŽ]Yû¿ö?ÿ'>ÖúPõÿþ[ý¿úÿùßõÿxD°•þó9ðBxí%壈€Th/9×ñÒrR¡ka¯ç4Ê+[Ð@/¯ß¼^>áOþ‚XY4@ŽSÒ_Η¿øâ‹Ý¥5óÿM‘Á¤€&ÏŽ-ùQ¤xlË‹ÝÉR^9uk»k´w@ȹ4y©/mVîžÆñÔú´ô#ž”Ù>£}õEú-}tÊŸÝgk(“yÚ÷ù´Oÿ¨û€X,ܼãä;> IÇß¹r©³÷¿÷ßxéü„;ÿ«ÿ«ÿ»þg=§­—‚õSº ­ëí?c¡öߨç×+Hjÿ?¦öÿñ5Ì GB|qý¿ã_?ëúÆEýÿóJ'6Fýÿÿ6þóôÓ¿þÓ·c•í;>(\à‹ÉdçS ¸¯÷RÅKž²Ò :åN‡?ÿzOiIcþYØ–n®<(0/Z‚“¿u YÐHsÒ)ûp6í¬Âkòïò(ÿþÃ|¥pò__/¦Çò&4¹¶›i—ÉS'ÀHì=Y@¹<ˆF§ÎÄøx‡Wùò+m·ÒåRÚêKÎÕ`Úº¦(y÷ÑHïøšÚ¤|äp~?È ŒL€>•KמÍždòŽõ«÷ú¿÷Ç q¸Gççÿ¥'雌 ºƒ¡wªÿÏÚSýßõ¿ëÿ±/è úÅWû¯öß®3kHíÿÚÿõÿÎzi>˜õÿF?̾húD¿ñ›×ÿ¯ÿÿô¿üo?xëëƒÞe@pÜÇâØw,펡™TŒ10G0ˆ„]†n΋Af;Ú >e˜/Ùý´qÊdgZA:PÅ0MÙäVÈæ¶r^ΔrèÅ»ü=Ú˜Myd!õé„8•ŸGôÖкÚùäKw òrú­cêöq¾§óxŸk€ÑUsŽne»vmý#çY¾gN_å‚Ì®v Ò®\O‚h¹ÄÓ•¹Ê¡Ð.‡‘ãzozí'“`›öôþ÷þwþŸ—•›;æPçÿ|IÖŽÑK§ÒÕÿÕÿÖ¬]ÿ»þ³éKúA\û¯öŸ±@GX;jÿoRû¿þßõz™}Ç":¡þßóμ]C¬%Ó/ÑôˆPÿÿœÛÖÚñçëÿ_›Ž~·e(ð 'šmߤ‰¥·æb¯õ4P€-t÷rÚ-¯¤§­â;Ø„&}·}%ax% ÿô‹:#OêJ½F­òp<í°óêÊÜ:ðÛvôþo·ôþŸ(tþwþWÿŸµ-ú¶ú¿ë׿”×þ«ýWû¿öÿ¬ã§|‘øõÿNŸè¡þßY/ÖלqžÖO>â£Ç¿MŒBï9êÿ×ÿåò_á?O?ú‹?z @TqhEüêê:;¡ (ÊJº'/@Š »ƒsFz¨É _ç¨:=â·e§Œ€Fyqø1Vž«ð*ï­‚ÆQž;à'ËÚ5AÝv_­ÜÿǤ¹Êüj¶uúô5ž^ÿË/ùÙo¾8e/yL"ÊG°s)<É— ÷h{2®˜ Þƒå—uQîÚ´»Ãn´x.ß‘÷ôˆ‰{¶Yâ-¤^±{öõ7_ï–Bü\kcÚ, 8†‡k}¯~|zÿ{ÿ;ÿ;ÿé1zdõíèŽêÿ³±ú¿ë¿5³ëÿå N_°jÿÇ c[Õþ;?¸Öþ?ã"kÿ×ÿ«ÿwìJëFýÿúÿÿXøÏÓÏÿã¿~ë%zÖ:,ã¸ìûž80£‰]Ðú§\€“€=›7ùø \[ÜS‡ó€,sœçÄàeÊ-ÐsÕ#ý—¿üå|¡àÕÊñõW_}\ÿЫo*Û÷;á§|ê Ú =;‘ðEëúàùÒÝCÚHC«}[ÏìSG-e´Ù!¤Ýy'9ïý¹DןÓïºþôž^Ûg/GÖ½5ógø¤h":å…}¿ØÕŽ•Gò4ëÕëWódïïççÿè:ºp:‘Ѝþ¯þŸEdל®ÿVÒó*ëj×ÿÚµÿjÿ×þ¿Þ:ºÑ=úÃQÿ¯þ_|åø§ÆEüàø©ìîõi¯¸þìîúÿþóô‡ÿþ§o ¤tðXÇe™kÊè|¹î-è<ŠfÀíù åI=@É” X#ÎyÀ—-s-I£‹Òc J˵ú|F’3åq–ßÿýßßøÝœ¿~ýzÓÃ7õMalØ%=|Gø•0¥-Ú*˜ló7³±RPÂðRG”³óLDqúCyuá'Þ2ã úUN¾„mèäåËÒñMßà¿ÎäÕWáK>r¦¼z`zzµ×ùò˜¼È&^)ßûßûo¼uþwþÓ=ÕÿÕÿ]ÿ»þ×þ;¶äÚ\c/Ýí>iµÿjÿ×þ¯ÿGÔÿ«ÿ¿>uýÿÅôÅâãW æH¾¦ŒÃ:êHZ®ÿ6üçé'ówÄCö¥:LÆy¡ñ…=çyɵ´ux‡„Ž@Ò ~½?` ^¡W&õä‹}ò2òÄi<ÔŹúœ+G6 úÔ›úÐí Ê'-ޏt|·ã¦°ò&¸ãQÇ—¯^~öúÕë=G«ÜÃWP—òicÀ#Ýn[ iÚîŸ]VÊ ú+r¬¬“·ýƒöêCeÃð ü)·.9îíÄ×û®¤q6·×Ä‘§-©#}„à¸FéÐlÛ& ç½ÿ½ÿ™—ÿÿôˆ@7DGTÿWÿwý?6N×ÿÚ«GGÖþ«ý_û¿þ;©þ_ýÿúÿÿ<øÏÓçXÀÛá-Æ@1P0@¡˜¥;ÖÁ5IYC7ö+|)«º(s¼ï€ÐåÅPòíþ1á9Ëû‹ÿ¤©S Qd™¤ÝŽ*~È6åB—ºðˆ¬hw‡ÖÐyçÔ’fG×T|€í½ä%£ô?ÿçÿüÙë7om¶vA«áI&2ë²8÷bym÷^ºÚ&/²F>´>Šnûw®—ßðõ¥3ŸÇT ,@˵gÎmNùjøªƒLé“|ÎÚn,eñÛº®ûöQ=ó÷ÿŒÇÞÿÎÿÎÿêÿêÿ®ÿÖKG×ÿÚµÿjÿóMÖ†›ºöý¿úõÿëÿÿÏÅæŸ¼µ8>9÷àæPØ;ä ’¤ÉWnÎg@IDAT;œÐ„:瀣찲 ˆ´“þ¢Ý]Oð#¨caP‡@&A9²ìùÄ„> м•ib´Q.â€:‘OþfÚ<ùv`ƒÂë»ßûî­äpàîíÖF­€ ŒÜï?œ/6žúžß¶ž•ï4c늌òµÐD¶Ý%5ü¿ mß_5ËwÒ|9P†Ÿ4ò¡¾[M™‹§¾F+ MÝèÓ/½ÿ§ÿ{ÿw˜ì81ÆŒ„û<˜AÔùßù¿CÉ‘à¼úôíÌ‘™HÕÿ3ºþÍÔõ× ú¡ößù”~¨ýWû?¶zíÿú|µúõÿëÿÿ÷ñŸ°8& `„úàÆå„˜Dâ\çxç×ËË=¯èß#èñµ»'€O€“€/Œ[.ß¿;ï´Bo7’ÇÜÐ:;x`¡à/^\\´çô”SVPœïÉ•¾íž™Ç°D—÷B}óî›GÙÈA^A9 •v„óh£ÇôìPƒ}êÿõÈúèSmشӇν÷JÈ;ª¤i§ÅLØÝkè¦>àÁ£ÞIӯꖞ>×7xHo»'^¾W¼<¾ýXvi½ÿÇñîýŸqkL^ónâŒ!ãL<ƒJÂŒ×k|uþ¯þëü?úÍx¡Wªÿ¯5µú×!º£ëÿ±ºþ×þ£'kÿÕþ_“^û¿þ_ý¿‡Ï?¤þýÿ]+oøÏÓÿïÿë[àÆ‹ùª]Þ„HZ€‰Ñ9ªu“Ö‰44€åbŠ7L^Î}éN€‡¸b×Ò~Qp@3Þ2^ªãÅÓy”PÚ‡ZÖ›¦j'‹Gí×+çÐ%¸V¯xe§Oai'–ïO–ïÏ®/;«¤ÙÉ$äÑFåWÒåGÎìxBžäÝó)³ ÒH©ÍÊ….å=æ—jòíCûÜšó¤úT_ýõÖ^izò#~òÑo_NL´+ÏÄ®4Ê,è†ïÿ¾'Mßõþ?Ïc¶ó¿óß¼¨þ¯þ_}0cÁ?kJ×ÿóãU×ÿ³\?l¸ì çµÿjÿY?jÿ?¡öý?c þß/×ÿSbm‰Ì‹úÿg õNRÿÿôÇož~þÿÍ[‹K@ƒh•1@„ìÀxõ¼_™UÄ9G»€ÊÐ3x@Ð%@ú¶ž!Ü›5Ö·ÙMê(“~ç½u\²’Ï•™¨äœròÔ»¼ÉpMv=iWä²ðH$¿˜’GØzÄW[#_Ú˜zÕžsåœ;”÷þÝÆÒð!k\KÏ=Q~Û?õÕ»oæEôJÛ¤;_Pnòïu*°¢(¶ —,ʨmø¦®íËKÀÞÿÞÿÎÿÎÿQÕÿ£«ÿÏújyȺ!Îy×ÿ®ÿ숼“ÍáÇ´Úµÿè öæÚ™µÿuÇÚàtgíÿúüßúõÿéÈúÿgƒÓݶ|úáŸÿì-cBðHÞ‚{uƆð(4Š•ãò t|ü¨ÑÃh½x„Îå(@ 4n€EÈÍyùbaœ/ô`–Þ—ü¦~çÊ, 5u“‰¬ ¾Lù•-1ù&¨7;ªî2å|™­-ÜÃhe!O@¨<å1ÀÕ·f‘ Ÿ}„pÒÈÅH'ÏÒx!ûÔ䛽Bx'0èô%:çÊ8¶þá«Ýú Oõ3ø–öâ­ÌÊ3²G>`JpOOçB•“ SíÊ94èzÿ§ß{ÿ;ÿg^˜{ÿ4ÈÑËô…@g8è:+zÊeÎC·®?É«þ?? TÿwýÏüèú_û.­ýwœ³ÚÿµÿëÿÕÿ«ÿ6íÔÿÿÛñŸ§üâçoTë Ä²šønh[`「s¨ø2ûî›çÝLëÜ\¼q^”}H}õÕW \P€Y@txy40`Š|áªmÏñ!'|‘ôGþå„.ß[úòãqMXãqbW€(í èã\YAdùòË/7ºù*`€¥­chÔ­ýâ<Æ'ï¼ã‚‘rÞéµ<‡nÛ¡Ý×ù‚`#Œò9´Ñášlbõâ»×#×Ë‘Uº4rùË/w·˜4òÈOØ:‡ßÞ>_P ÍC¦NÜûßûŸá`,uþwþŸ¯¹}AqVÿŸ¯ÓZ#¢oÅÕÿgŒX“ôÇãèú¿*5k~Þ“éºëí?:õ1Wè‘ÚºäôÍÚ°µÿkÿÏܨÿWÿr #è…‡~¸ô&ûãž¾´—¿[ÿÿ_†ÿÿô³¿þÓ·‹Üð„ntFò‹ì¤³ÊîBk C¼´< /Å£wv êá Z0hÀ#ô_¼ùb•2:ùÒ-gÁ’úI˜]E1åDÆ¥¿d’®Î´eeœ4ñÒM{—ÇÐØÉ¤^»«ìÆ9ßù:á¾ÿýïöŸþÓúì÷ÿ÷WÎLuà¥/Ÿç¼LÂîf!¿t‡ÇLl„Êã&Êâ(áÈ—w‰¥-F<Òέs€¾}yý´Ñ.1»ÌÄò‚6Ù¦Êá}vcm{]LP¯vI³+‹|BÊ;L½ÿ½ÿÆ…Ðùv7š?BçÿÙ]DáTÿWÿ[;]ÿ»þ×þ«ýWû¿ö?;‰ŸQÿïøžú£þßlÿ–­PÿæÇõ.ñø[õÿÿvüçéG³‹b1ˆ:OB™ÇߣvH­³6/kâÌ.H£ìÚï̦;@¿ûÝïÎËØÏWñÐÛyK]qS·A½ïG˜:Ÿ|sÔåPnË^qÊ£u„¯rÎå§Îµ‰¯ðRWÚ„Nø½ßû½Ýe”6‰}æR,£ðwà;—{Žž€1à’€FþX:mÂwTŠÜ)£'ÿ;;чh땼Êã…î™rï0TfïÙ%>xËäE–Ô•¾‘ßûœŒ}Òûßùo®wþWÿWÿwýïú_û¯ößÙaɆ\û»öíÿñµÆ™áHÕÿÿëá_Ý|®ú·§œŒ• «?&®ÿ6Äð×ëÿŸõE_ü&üçéÇñGo;h&`D­8Ï$|xVÝT&eÅòЉ•p½ðÈÝH÷G î`>A9GêÞ?xÍn¦KêÙ-öC¿p¯_ÙÈâ\ý®…•ÿZ\?ª‡ü“oêà©^e¶®Ké(Ÿ2xFV†kÎÑç]^h‡´ßµüðÍcúÔ—ñÑ?úMêÔoÚﱇi›4Â+‡·t±Ç=Ö#Oín°« i‡:"û=–Žlìý?ã,ýÖû@XýÐùßù׿Ñ)ÆFõÿù¨ú¿ë×ÿÚµÿjÿ×þ¯ÿÇFZ›iüA>Eý¿u5¾h|Ïúÿs¨ÿÿ?†ÿ<ýàÏ~úÖÄ2©ç+ÒT îLšàÜDÌd|ùj^Â9`IŸxyB®ôó(ÛA0¹SÛ%ÃS ØÁ?À‰òBdã(ãZ@ûúÍë½v ÀgÃ¥(Ò¶“˜¬çöNá‘÷ìNÒôáéœcvo£<} ] *ÀèÕËWwzín+|'l¿\ýæO‡ôéÍ÷|h¤ ü´%}®>íϵX¹ “ò´@r~ñÅ ne7ÞxÈsszåõþ÷þwþ?ïðìüÖ¹Ñ=ôDõõ¿ÅÏ$ˆ‹ÝÙÛõÿy-×/]ÿÝSûïôCí¿Úÿ£jÿ×ÿ³n:ØVñÃêÿ­Iqì‰Ñ•õÿÞÀ¾Š ^ÿÿõgOxXû(Ý b43i'“‰µÉ4™déÀO‡Vº2) ‰A+M`À}ûí¼Ï)!¼ÝE4±¯çááN&/ž ™ÔdJ:ÚÃo¤Ü44@AP ô(+ã Ò´áæ-ÞáâÙñ$#+Ýyú ¿®Dfu“#m{ÔC91Þæ1Á•o®ýÖàŸX:þ DM¾z’–úN™06eÐè4ÊGFéyùü«×\S_òðDG^éâð ŸÞÿÞí}Ü;ÿg÷¥¾èü¯þ¾®þïúßõÿØSúA¨ýWû¯öíÿúõÿø•wÉ“CõÿëÿÃþ®øÏÓüûŸ¼ÂØqáyË€ŒŽ“Øœ4@Ëüg  Š6}SP$? GòBËÁcÌÈ_€dÊ¡÷ÉLBÛ%0tì^ÂÙÑt¶oÃ.ð<ñ—îH½Ò“¶Ì†:0‘zñ¦IŸC=WÆ£½'á¹ þŸ‚JúJº~{=àOÚAf€ÐÇ‹¼Y9¦Ji—¶‘i*|äšy©[Ú'¼ûòõ%8ý§N-Èε´­úíÀÂÃ.·wïßí}${ú ]ïÿtà܃k$\½ÛûŸþØy2ÔxŒ]aÓ÷ìôUæ¡8y¡íüŸìü_ýG÷ÆIõÿ€ãÕÿ]ÿ͇ѱ£®ÿµÿjÿ±¿Ù¶µÿÏ“(Y?kÿ×ÿ«ÿ÷üÔTüZóƒOÇá[Ç/ošô9Ðl˜8þÎIx.cM®ÿÿÿOÿow`¹an¬›ÌàTX(â„Æ¨ÊÍwóOã§yÁ{”Äøpdñî|Oú<®3ÿÔ/0äìøx÷Í»•zRké&=¼÷zäÚ,ÿ¡c``¦üœ?hpñÕ¬8–hœ«7ü"³ôÈZï²€H¡×Gy +|í´B“þ³øl['N;–vå8²l]s­?"§º"O&§rú%-H䙯ïc+û¼[ì£IŽÙ„Íëý?qõGïÿ5ÏfÌ Æˆq—±å{Lû/ºsýÜ&õæA}‘v¢òN)ÊÀŽ&A¿ø¤¬öê—ó.‡|»ÎÈ…²ihܺ}·Õ¤ž>™Ê¥+û$‹œ§^òZøýª+=2§ï”éýϘ8÷/÷PÜûF•±Üùßùo¬Î¹tÑQý_ýßõ¿ëÿÚg¹8Üu^ûïüà£;jÿÕþ¯ý?¾Êü¯ÿwž$ªÿWÿßxöàÏÂYÿP¸Æuè¸Åâ??š¯28ü:îÑ=€Íîäâ€:u–)´÷é×áL‘—À¡Éuœ›»£:»4¾3ï‚Z~íZá†YÎ/,g±ßGæ†/¡ñ„ª ø‡4b¿Ê7i/MdØAÇuÊ>d½òÕ•¾˜B+KÊFerD.un_ yÊ}ﻼÞÿG_ëGý¥ÎõcïçÿÎÑBçõõ׺ 묵µëÿ±Õ¬µÿjÿÅŽ2O„ÚÿµÿëÿÕÿ«ÿ_ÿ†ÇØ>2¾ößÿÙw`1¾0²›IøÕl3”6ýÉón1Ú]O@)GŸ0$»UðpžðñB6%æÿîÄ‚}Áã>`ʉ×L¾ÉƒF}Þíäö¾¹æ^ÀÙΘrdqA/¸ÖWb!têXl^0ïìûoè·Ó‡.ƪ˜##ÆO_9Oàk<ÒoC¼´oì:»ÉãrdÚ¯0 ýÒM¬‚tmÍuúzåÙû9÷áªM Kü]“©÷¿÷ßXêü~¦¾óÿ€¸ÕÿÕÿÖ ëI×ÿ1º&XsÙâ®ÿµÿŒƒÚdž×ô…ù‘›ô\U<ÿkÿûYíÿúæ‹`Ž8¯ÿwüÚ£+VU¬ÿRÿÿàt¬`Ìü.úÿO?üóŸ½Õ»Ð\Àˆ¯‹éž¬&“r@sòVòˆÇ÷ÏØfmÂõ'  žÛÙó5ÂýºðIeg=û¨,peë»xäfÝùÊ_9`Ú/\L¦Iæ-?éÚ†Æuxnm™°mŸ2Ïuœ5Fé¶o^ÐîшÝéEΡM9çÊ-Ę®É%oÛzÆìÀâ œB›úÈô)oþEÖðÔ†{¾Ç$æ^¹VNð¼Ünsm7:aۮ̽ÿÀíý?kÆ”q³ãeâŒÁÎÿÎãÂ?¡ú¿ú×¢k]ÙA1ºþ{ªëí¿Úc?Ôþ_ªöý¿úc Ôÿ_½þÿÁ2ØÁjœ Á3ÎÕùûôƒ°tÚ#ó1Ò‘I_Çu°‹ï:+·ֿ9ñw¯Dœpj.¾”´sUi3:ÎÄ>W;tòÑ?êŸk VêKúòqŸæß¶ÍùÐõþ÷þ“F¥ñÐùßù¿ºéÒCôGtjõõ?‘µ(†;å±ëËè®ÿVè[Œý o²Óµ›ßõÿôÃÕµÿ¶;vœÔþ«ý_û¿þ_|Gš!k®óú¨ÿÿÛïÿ?ýð/~þÖ ^’q9GŒIqŒ¥Y7uÎ.”ÈsÌ¡­,òåÚóîÂ`xϹ‰ã5†'0äQ=ùÆš|2àçÜáܾ9ws±r¨¤Ks„Ùí Q×Ö? ÆÉ"‹sáÞá…‡G(Ã{xiÃîØšú•ÅûÒ½!/²F6qÂvõu½ts.ÖÇBäöñ1}&ßóP®ÉLVÁõüyÜϤÝÛNÞ ½ÿ~ïýwÆJççõõÿ®/Ö¾®ÿ]ÿÇhX;…2çµÿŽ=«7jÿ;zíïÚÿ;OÖ?–öqµØæŽÍ~ì­Úÿ§Oè•{å|ûjÖŸúg éõÿŽPÿÿ·ßÿúÑ/~þö:eð1(uW‡Ù,:£?ä-дIg!ÂkÙ àA³ü‡&¼ Y´îyÊíãnû%öñÂx_!<Ä÷#ùâ#ÉOä»äâGýh”U+rtr.}':™æôd7¥¸@ÕM€—~Qo¼u(/lÊä%DþÍ»ÊêÏmûÄdˆ3¾)³u\Œp¼§;×vußy‡&`›ëälª÷?c·÷ÿy~#±rÌ$œ´ÎÿÓOÿÕÿÕÿ–À®ÿte×ÿ£¶/fLÜ×k«PûïÙ&5oµÿ޽]û¿öý¿ú»PÜþÄßIýÿé›ßÿÿÉW-œîzŒ® ’û ÈyÀ’½€(+ØÜUèñ?‹’òu¼/eA+€àfŽ\+¯l…á¾çá%–·/¦Ê.è@ž É÷øß·ÝTÊ…OÊ(Y“¿Néð:_M9G­ŒÚ=ýƒæªG,è4uDø¯œ“¯”zÛËÃ'üÄË}ò’ÝóP.ý•¯¾;_yá§\ø'-ù¶ dÙ¼aÜûÆjïÿß;@>ù“±¶É3vfðì€íü~·\çÿóø¡[¢k«ÿ«ÿŒ®ÿ]ÿ­±µÿjÿvõÚÖ×5ûÂÚ!omÖ¹vžµDìºöí±_ÎØÉø¨ÿwÍvú„Ks^ÿïØ¨3ÆOlÕ虇o?»È'¯GYÅï¹úòASÿߤÛ~ŠŽNåúŸÂþáfí``\ƒ<‹Užôb*œ[8'•‰¾b4Ž»ü¯ÅIºk‡#ÒÕ‘snø ý´~y ¾˜–2®ÃïÅ<ˆG‚ô;?¾{÷ni¤{$Ì ÖBvï½çï½OjÀ ´+²©Ñ3¶xÚ±%_^Úøè+;»æß]¦ðøV;§ü|îpòÏ¿ïHŸä’¯¼rŽOyÝû0€šeO? ½ÿ½ÿ `_cʘ¸¡ûùæÍŸÇ 4®çºóÿèµÌÝÎÿÑG3.è:/z/z²úŸÚ-\ýÿX³2FºþíÚõÿc€'º5±µ¨ö_í?ã@X}::U`³Ð'µÿ?žCµÿëÿ­/ZÿoõEýÿßnÿž{㌎ҟÿ;°/ EzBXqyŒP¦ŒùίϰØw, 0 Ü’Çáâ¼¼|ñr ÷›?Œ—& ~ä¹Ç‘cåT÷üûv^¬:òœ6ÌΧIO=ÒÅáM»£¤[äò%5@–4/¹säó¶isê‰hµÖc— ÒÔ»| ³{k·Âz¾òÔ}Ê\õ_¨nxâs¯çôæÅýª¼î!å¥o\±> ­º…ä¯<Óï½ÿ/wlôþÕùßùÿßÐ-уw]Sý_ý? Ê®+]ÿϺÜõÿKµÿjÿ±1kÿÏìµÿëÿÍ\¨ÿwücCýÿÑõÿÿAøÏÓþì§o8 €(ÒîN‹s´w z@I –s}+ô€+[휆,j¥R>ÁÑ'–ç§ŒN@ ¼S÷þB«Î¡§Ð Jå‚üû¾ù…÷žgÇ•rûxÓŨ!/òo{®b9ßÊ®úRïëׯ¿ÒÐÉÔ;­¼©›LÎSN½îÁ^O¹s2íØG4çêÊ+—-Œ‡ðã¿Ûޫμl9ÈäÀCœÐûo'aïÆCÆiâŒù™wæMçÿÑ7úE_uþWÿïzRýßõÖ×®ÿµÿjÿÕþã`í¦ØSµÿëÿ ±ùuõÿêÿïxˆ_>ã£þÿoÆžþp,µ2¬#ê׳óXŸ÷ó§çÇÛäÒ¢|•û|®ßÈ“÷'¡¡”A0h÷ýQó˜žòÀš8î.)ô×§:vwÔ¸ÇJå6òx9¼&¾t×êF«L‚:¶MWš²òÃÃùÓç×W‡Öµ2BÊŠÑ;í³‹ìž¦9^ð%]}-ýõ ìÕËWû¨¤4`™€Z ½ÿg|õþwþæsALwˆïs½ó¿ú¿ú¿ëÿ]'tý¯ýWû¯öíÿúõÿÆf®ÿ_ÿÿŸÿÙ—¸sÊÁ]ÀL€o8v¼˜Ãã"ÙA¸b¨IãØ=€¦¹ÆOžøý»óˆ 7ÐuÅ"¯ìd,à•<±ò¨ ¾”Æ'ãý-X |²FŽÔrËÀ9Äj'¼½&ݵõôcêêÙ&^<½Øv Q'€hë í´ã›¯¿Þ\€¬W¯^® ‘}雩'ò%ŽÜKsû³»ÝôÏ”ù¨ C£lÚ-ÖrŠñó/mŠSÞûßû¿ÃËxº…ÎÿÎÿêÿêÿ®ÿç‡1ª±ëÿØwµÿv•¬ýWû¿öý?~Tý¿Ûf’ñ;ùšõÿŽQÿ` Ç`ÿøÏÓñó· jÜ”ÇõTvoÕ‚W3094hfÝ…rî=:àJâ)Ê`A+=AžZ˜åF+G£•u„v ÌŸ\‹Þ8÷õ¤¡ ]øX|ìÈßóAŒ_Ìû¹’ŽVÀ—ñ PÙu–ºÜ !üïí’îš’ã›ü´%å"×§ñò¾ñw-(矰rê3Úlá-|ðÉzÈ(ŸËcÊMG™ÈÓûÆ«>ÔW½ÿÿÿÕÿÕÿ]ÿ»þŸ×AXvPûïc»VŸ°jÿ[B¸/nžÙoá 0çQâ(ÑU–tìKCÀ)gr”Yz|.c&å•ÝÏ&_ÀŠÅ<ù©È2Â;ÿÔÚ ÞøHÃÝÚ´{^ÎÑ¢À‰}©D…ÎÉ &¿w_yVäû´t!ðRÖ1Â,ð·|®¶å?ùïf7^‚ø~œÄý»é÷¾¿ó¡V®ÔçñI÷/1©?} ÔŠœ©Û62‘Fy×½ÿ½ÿÆ•1"¾AiÿGÇtþWÿWÿwý·Öf]Íz쇟¬¿tf×ÿÚƉñQûï×çÉ 2amÐËÖX»´öÿö‹¾¸Û^ÆNôËdl^®c÷'Æ ú§öÿóÐúÔ¡oêÿ]soÆUý¿úÿ¿þÿÓüûŸ¼ÝEc&5¥(ØÑeIù-¨1éÎwò_»ÖH›2?-ùK?¬ðpNY(§ƒ€(¾V$¤VϹüÔ¹çs-ÞGø¦Z¼¤ âÔ'&DäœÌ¥ÑšPežòV¶‘åÃûyQüЬ$›zb€¦]ò#«²‘À…_u(OÈ.þè89ûµD&Î#™á­Lä‰ìŸ¦åZœ:S&"y´9ï!›îÚžÛ?“"N?"ïX~S~.¶\ïïÆš1sGÆÊ~UÓxš±wÙežÈ_úÎÿí‡Îÿêÿêÿ®ÿ]ÿkÿÙ½]û¯öíÿúñ‰ãËÅÆv}O˵86yòëÿÀkûRù ŸÊ¸‰·?òC³œ¦¼’é#¤ä¼ø§_RŸüðIœ´{I+›v®ÌîÓuÈzÿO¿öþwþg^¯éü? ÂßK×EOÑ7ΫÿŸu²nJÿ8O¸ëæê6‚µþô›uÎ:ž>[Ú+qçd×ÿí{¿ü¦¾J~×ÿ3xôCí¿Úÿµÿkÿ×ÿ;c kmý¿úôâ?þóô£y–wÀˆq"0èl˜E(ÂÐ[”s<LM`Ô¬èbhñp-0„öq}å=Ò”¿ê‰Á„M %çxx” [ïðø4$=4+Ó´ApîèmÛ\“EPFH½ßÅ^ú«½€Ÿ¥@ͿϽH~ø¥Œ<|í´úp_ò•Û>™<†4ðMîWXýÈðÁGÀã¤Kû(ý²ÉßmÂh´c®#“29×·ŠE–Mßvœ_À¼„u*yôÉ–¶öþŸñÞû?ƒgÆGçç?Rý_ýoÚõö¶~îú"Ãzt­'»†uýïú?ãÄøØñp ãgÓfÈÔþ«ýGuÄf͹X¨ýúa ùët:«öúbâúõÿØõÿn]ú»âÿ?ýø/þè­zº%1éyJ"†‡kÎ zi1N¤1LƒI¾ÝLÎ×h–ÏUÀâqB»¬R6|O²èæZžúRWê¾—M]âGú%¿ò{Lžº•Ï#€i“r‚² bˆæ:uEù¨ðt-OPne’Þ¯¥¬Ç=n….[É—øúƒ&u(»a*^Þ韡¹ï Ó?Ë,Ó§Â….Þ;¦wùðÌ}•îÚ‘Ý+f7º½oCÛûÆ¡~ëýïüPïñÐù_ýOmVÿwýßõ´ëÿ³ 7¶Dí¿ÚkGÖþü°m½jÿÛÞ4FêÿõÿÌ ~¬1±kêø¶õÿÏ^ÿÆ‚¯š(Þÿd÷A²fÀ‘_ŠÅ£u:.ƒ( Ì¡—~WÆ®Œú èÆÙSÎ'ˆå ê yIô¹:ñÄC¼ÀÖÄwz`Ë]–åsWùjâÞöÉ‹“‘A ÆÛD!êÜ;´NL¡«îí£«¾´‹ÌdðrèS»­ôkê^íc‹W])ŸÉI†ð“AZøî5ðdޤ¡‹üúÀÎ,ÀàËÒλŠÐ¦4Ôå¤÷ÿѽÿÿÿ£ƒ/Ÿù@¿9¯þ?à ]JFWÿwýïú_û9UûïùÇXk©#z’ ]ûÿüo=M¿Ä6¯ý_ÿÏXÈaŒÔÿãz×ÿ·®ìx»³þÿÁž~ò—üÖ¢PÃ@±ËÇBãü>ÐlÞÐË3Éä;ìôÖ8\+¯“ÑI“/Mà)›:Ëü H­!ˆv%RÏ^_<–ÏðeW’´OCä㓺]ü[lÉ»ý0ò;ùâ|6žÜÊIÛòÃι°ïΚXxõÃtÒCc±zÙr· r‘çQføä~¦?¶Ý[×)ŸþÃMèÑEŽ•¥÷{ZŸôþwþwþWÿWÿwýïú_û¯ö_íÆaíÞ\ý?þÒy¿sý?ã¡þ¿^x|HþCýÿéƒé–à Û'°‰+üj0‡€%Í¯È z'$\©`Þ·„™¼$Ècï\Rnr·ðæì#tyÔZ'yë¡ÐSß=~ŸºX!4ÙR×Vy¦ìÊFæ+<®É¥£] fÀÁõü9õÌ5ðmhœç1Ci_ýõ.DŒŠèÍ›7 P HDViBê\ çÁv1»ú*²¡u´à×û¥ÆTmþ0Ü÷S‘Wp Pšý•z²†FiGø£Ýô)±ï˜º¶ý[ª÷_7ôþ_cGgÌø˜²Gçÿy·]çõ?Ý]ýô5AGì:Üõ× •õ¸ëÿ8íó …ÚǾ¬ýÇG8ÝYûì+ÿÙYW¨ýχ¼Âô ŸemP¾ŠdkÍFõÿêÿñ_ëÿ›/Ñ«gŠ\>Ü5¢_þ%úÿO?šw`ÝAŒG̉Ž:¥ä ®¬Ñz:j'Ò\ŸøR8èñ ²C·Ê™²¾”ëaŸÊ ¨ }·Ë]e"‹4õ©C,ÈK¾r[ÿ¤çæ×ëðŒLcô˜`ÞÅ1bÄØPÏT¯_¿þÄZ J;.yÐyÌ´ÂÊrѬó3ùèº1r—ð¢ myZïSðê(qrá~Û£®z\kCúfó'íý´ÏKë?ÍKýâ¥Xÿõþ÷þgNBçÿ3ˆÝù½Ÿ¸ú¿úÿ¬¸»þfm²Íùê’9GÑõ¿ëí¿ó#ç.¬ó‡íņ3Oµÿjÿÿx]û¿þ5Qÿ¯þÿY/Ögÿôÿ_ì"9`‹È¢i1||g&Èã+~ŒNštÂÀ5€Ìc€c†n¹M•1à ݜÊóˆ]~iÙ|yø -GøÃ¼Y i÷cßey½sÞçôÔp «3™“¾ü‘Ï¡M eaÛwRRW©Óñë)ð}R^_Nü±ë{ßûÞ‚X(×¼ðÜGì¦>ÀH~¶Œ£ häÏ> h•ÑV»^V¾éoA;´i½‰mÚ$ s6½µq C÷14Î5òºÞû;eî2nÿ\üzÿ·[{ÿg ;g¼ÿÿÕÿ_ïÕÿÏ?¢Øu‹–8š¢ë×ÿ6;>Œ ëÈŒ•Úµÿjÿ³¨žƒ¹QûÿyM¹û$£8ëÊêé¶úõÿÌãD¸û)léõÿOßüKôÿŸ~0/q_ÐÅÍÿü˜qXw@ò®Xšp§ÙkTÛO§³î4K(ætE=œÕš”› æÿó"õnîåï2dàÞc¼tiÀžŸÔ­Ó5G9;“M€¥ðy5 • °ÿ.ºo¾ùæ³/¾ûÝ囲Z­–Ï€SyÄ<}ÝqA«©ãÕìÌòÂûu~døo+ìJ‡Ï¸©3 SÁöƒüíé‰ Ëc>_î:‡´}G†½ÏSh§m½ÿ½ÿÆHçç¿q@gD§Dï'–/Üiöš6ZUó¬oBÝ^ý??ZTÿ?Ö&ãÁªÙõ¿ëtDtË(˜ù_û}™Pû¯öÿ(ÏÚÿ—ûÂüˆ¿só†t0Êœp~Äw®þŸNúض‹Ý—øôÝÇ4[¦ö_ýÿÿ öÿÓÿügoMz9FD¾’—4Æà‡ú( å4çúù9w彈ì#Gq •>Ù º ÷?SŸ9^ˆ,ê‡×=B ½Ø5°Æ[¨KÌׯÃäÅÓ¼h}Ê,P6u«Œè…ôÑW_}õÙ_|±×èz£|I·¿Ð³R~èS‡øÑ–+o2—ôÔwÊŸ¾:-¨6í"›<%–×´më˜kñ@“¿¼.pnûâT¡Ð)?qêJßà'-4½ÿ½ÿ掷kÜ츚1Òù@ïÎÿêsD /«ÿÏúa-ôGÎ鎮ÿ]ÿׯØÑqû3c£ö_í¿ŒØ¢t†8ºäžVû§Níÿk­©ÿWÿ¯þÿ¬%ÿýÿÇ;°,vqD³Ü‡žqXç›?ëÉLà˜ Í.>x^Òäç:eÔ¹ ÏÄŸþ"+oé§šUHÃÇ ñ‚P¦1žyûÅÃI|\x£ÒÏú÷x±¨vxôÀ&!ý/v('F§Nuoÿ)0l¼ ~ûùõþ÷þwþ›/ÿóÈóü«þ?:Ü.ßèäêÿ_ïz×õ¿ëí¿ÚµÿkÿóEêÿÕÿc;¯Ï}ù§l¦øºõÿëÿÿSà?Oðï~ü–òèÙË/€…”_›í#à&΄=Š+´ò âPð–·õ ¨${äX&±é9\«8”_zåÙy•º†xA¤•qèÉŒF8õ=<÷ty9RŸvHK{ñÒùâÔéz²¡5AïåÔûå—_~öÝyÉ»vËÇïå_}yÞ›õõ×_/¿”ty¶6ª_ˆ¬éËM»Ò#odHߢù4¨[Øv\»j\o=SWdïýÞ%×ûÆEççôSýÖ·êï”ìúo Í»ÁÚÚõÿãÐjÿÕþ‹ÊÖ­ý_ûßz÷mêÿÕÿ³vÆ· |±úÿ#Ñ#÷þ©ÿ?¸Éÿùÿþßc{Ãú«o>yQy 4‹]F 3[Àœt¦¶î Ÿl•ºOæGè¾Kùu&d{$OñFç: Sê²+j2˜y2ø”Z>î>ÖŸý[8žÄüš„ÞiOS”†ùÉ®LúL9éʧСÿ½ßû½õÙÊ9‹7cN¹wß¼[>Ê¥dp­nâF¼ŽLóà´½vfßË£”ŠÉóž.ò†nËOú$© ÞMÚTùÙËW/÷Ï´‹ Ësú]§îð›“M÷gÓ&N¾4ç‚fQ–†PE~-ɋǥ¯ÜçcE9À'ÒBâã:`‰tàJqú;È"Í{­ÄÙFˆ6`ËSd¾ø{Ùyv/í®(åç…é‰Pòt–r걋)&n‡ªkŽäÇHUNdNŒž\‰õ‰Ç÷=\ÿÜ qÀ!¼¶]ó¥2yÁ> °MÎÃmœ§ï’æÚÙ·Ïn¼Ô+?u ûˆöªÝ~ÙñVoïïçç?ýJ¯Tÿ­/¢§«ÿ­'tý?öE×ÿÚfDí¿Úÿµÿëÿ]Ëcý¿éˆúÿõÿƒa˜li=í¤ýmøÏÓOç%îØýÝ =ß™GÜÎþå± ¶/æ {!ú¼@+‚EÈ&V™e ‰0„%P„ßó¶à'Ðß_R®î)¶ƒyÍ5ÀiÁª‰d¯XÃÛŽ±OÞÿt.iäÄIÙmÿ”_y®|üÑË“îå÷ñ½¹Þ]_j˜4;¯ìvR?zM¶I«OýÍßüÍ>V(Ïî5»ÖôQ~¹B·Ø¶óô—ÛPî“îy(ÈŸ¶A&¥ x’G^bmÐè»-?çöõþŸñÑû¿CdÿCÿÿÕÿÕÿ]ÿ»þ×þ;ö`í¿óÄFíÿÚÿ|Æúõÿ8 õÿëÿÿøÏwþÿçÿúõ˜d ^Ø´ fN;žäã·e†ÇÖwñ:`Ž…õiw=¥ÎðtM^òoû¶–S'ž‚Eùóé+2I9ß6"¸êw½ÀÒ•çz½¿!ùÕ bý¸i{}É9eji7yB“Oé@'2‘]H¾<åÉï|ˆ͈¯LúGå•“–ǃr ôêý×K½ÿÆGççõõ×ÿ®ÿµÿjÿ­}|ÙžlÅ„ÚÿÇÿ`G×þ¯ÿgn ŽúÇ—âO¬o:Jƒê¸_Ó%ñc¯/ée·/¯tþ­òæZýÿç~û]ñÿ÷X‰A`D2’4±#M¹<æ‡nк8;Zœ_ôøíà]?®Ñ;Fë½|»ð~÷~v]r冈•Å?ùŽ li“0PÍ5Y&vPhs&߯f+¯ür¸ÆßÎ'ùáý8ìRSfòÅ&Mè•q¸&9•KH=ÊYè}ùÏ#{ê$‹²»{Jý”•¤ãpÿºSøà}?¿÷±:OæQÂK†ÐÊ–ïÔ)ÈKˆÌÚ ßÈ ß…í߉Õ%M¹Þÿ3^zÿ;ÿ;ÿ«ÿéÄêÿ®ÿ]ÿkÿÅ–b;ÅþªýWû¿öý¿úõÿëÿÿÃðŸ§üâçoZΗhg\CŒQn"ê‘=Î×ß|mu^@…€çý<¾öæÍ›ÇÂæ;—žA!@ˆrvl}ý^sÉWÕG²,ÀsÉYÔ'_H;Ðîõþ=À ù ¸Œ,@¡O#ƒ2O/Î ”á·í¹dGÂIWïÊ>±<<>9ÿ«Ðƒ`š¶i“wh­l#Gú[žm§#ÀÙ6±¾‘ÍõýÍÊ<é‹Rʶ¾ýEàÖn )þèÃG½ÎsDžÞÿc„ê_«Ïzÿ;ÿ;ÿ«ÿéêÿ³Žgíéúßõ¿öß±1ÍpìvUí¿c?ѵÿkÿ×ÿ«ÿWÿÿù5%ôbýÿóÕkýÀ¾¶nþWø¯2¼âÀŠ8èÙ•„.» û~¦ÙE´›M>ZeíprN1áósàhd!—¿2L¹ïÿû{ŽŸ—¢^~d°Ø #€ÑËÏÞMÆÒ๼ s¸r‡]EäüÞ÷¾·_XôHxƒÞcê!¤ë“–óü¹šD®4ûËÊqú%à%_¬þGz²ªS;bìyg—~Ñ×µ„ÊNâʖ̉ÕäÝ^•²i7’“6Ñ¥|äîýïýïü?à­9Ñùÿüè¨þpTÿ_Ú´ú;¢ë׿"×þ;öWí¿ÚÿñÚÿõÿêÿÕÿ¿¬ÅGô‘?ötýÿƒ‰,ñ÷Àžþàßýø- Ç!ˆ½# ç9òëÈ»Xò~¦¥¾Sórý[pa×'ÝnŸå7±47ÏõýØJ¯?øùË_.P”Íar¤lè4¯ùþøf‡QèÔd·•—–{4///| Ín§of7ÔW_}µòÚµa5¿}´k,m•-õ,ý­ïeШÏÇÈ[Àhòî! Rú½z×1B‹!ù¡e$áBiéO|Djã#lÛˆIÚ;´õi€<<„íÞÿÞÿÛ®vþwþWÿ?ï¨þ^ç»þŸÝËYŸÙ±ºþŸ÷xÖþ«ý>öjlÎ5<çOíÿ÷k×þ?>•qQÿ¯þ_ýÿúÿY;²VÿyúÉ_ýÉÛŒñ ÈØyÞ¿{?»€^|öÅ< è‘ÎlÞû„©ó;È"߀cÌ1ÞÂlm”žÊ%¹ÆGì‘ÄÝR8´BxâlBÔÁ?Í·ô¸æ(ä¤K3€’òyYÛVÞKŽðJÇÙ5v¯ ?ya³«-Ú9ÄúôÁ^ÈŸ¶“ŸÔi›Ü›7ž éʧ®óxây<«”[ÙôÅE¿¼§½I÷+iÎÑ8ÜßO§“—_ zÿŸ¿6föþwþï¹MâÌIIÿGŸVÿÝ:Êöè[cãvžáSýÖ°¬â®ÿgÍéú_û¯ößüÈ\ûí{ëGlÚÿõÿü8’Pÿ¯þ?Ü þ;¿ÞùïŠÿÿôƒ?ÿÙ[“@ƒ…LŽªoæQ>àÀÇ>àÔîº,¨1á7?@×ò!ÃM§;,R $]7Aþ!¼ä§nçx¦îoÞ}3²Çüðõ ˆ© 0ôt4‰æî.x# å†ïÍžx iœï ˜sò8ǃ£*Eºx/\Ï?€Ç¦O9TÎÏñ1|Ã+mSà0ý‡ï‚oS§U¹WÒõÅwÞç%aΧ¢S÷^’äôû¶gòs"#¹Â³÷ÿãû£KõOïççõõ×kBÖì¬â„®ÿµÿb[±ÇjÿÍÌ.Û³öÿŒ¶øÑ%µÿÏ+ ØÛõÿêÿÕÿ?ˆ£7ëÿ¿X=Iož¬ÝtÁóKè*ÖÙ¡cñ0EÉæ¼· #êž¾><ãå>ÅLšCÙRICP¡ÄÔ-(‡`M§’lD¿\Ê{9 —t`ŒZÑáí1¨¹X~xy¿”Gûä+ç ‹t…_Ú¦B ÔÈŸô¬ÎÓ²m㯧ÿöü*»2\èS&çbíÐnqÚ¥>ç÷þK{òN¾ œ ^ìþP›>gWûS/^b®¼êïýïý7;ÿ;ÿGoÐ3tKt…˜Nªþ?ëWtyõÿÖëqbýs_¿fñ{¬Ö¨®ÿ§?ºþ?ÛEµÿŽ]kÕþc¶Öþ7²Ó©µÿëÿ­¿Zÿ¯þÿè†ßIÿÿ§ó!E8šqŽó IvãøµÙËØu ÊsÑ dq.±Ê‚}ºhä[€B Û”Ýüá½uîóxWÔІ&ò¤~¼"OÞe…Öô2©^ÿåW_~öáý‡qÀOÚº¼¤ÿmã9_y®ŽU×@Mû´×Úw…O¯÷~N¾ûu^Ò~îÚ£u½ÿ`íý?ý`LÿÿÕÿÕÿ~ÀÙµâZG»þwý_»aì¶ ›Æøˆ%Rû¯ö_íÿÚÿtÿ¥þ_ý?yYâï¯_{»®ÿo¶üסþÿoÆž~8/qøwl ¢ 0_éóBwNl^ª¦3ågð‰0‰3h8=Ê Q‡ºÂû+„YzòÖh~:@€Å3€Œ|ÀÞ ¥-;çbyh¹F—Cþ=ä×fm?é£lçEéε™\ÚâZï¸b¹~“î1½U MÚ–›z…TÀ‘ôG¾€˜ = “[tg÷Ôˆ{ñoùG|”•p ‘-IºKnu¹èrÞû¯/zÿ3vŒ¿ÎÿÎÿêÿêÿ®ÿ]ÿkÿÕþc²ÙbA\û¿öÆAý¿ópý¿úÿù‘¯þÿ,ÿøÏÓþì§ouòÝi]Pc냖žGÍ81y/à8妘Л¬‚4ޝ4à‘k‹ÞÆ&ß¹† ãÀDMÚ)+=Ox!L†´s DiçZýש#4gלfÝyA»¼Á)Îõœ¯¢™¼mLJó¨£smûâ‹/¶>@’2‚öäøÎ<ê¨ÎÈšv§ è£Ošú·ÎíÝ#‡r9ðrŽ>eõ•÷ŠÉ»ï:Ã?AëÔûn®¡!¹zÿƒª¿¾íýŒ›‡ÿÿóÃAõõ×ÿ]VkÿY;»þïºYûom5}ÁîÍeÄĆKZí¿cŸú[û¿öý¿gßþ¨ÿ÷¼écuæ(Šø´õÿëÿ Ávž~2/q7H$ú—s™=ÀšÉê¯>Ú|•G—æÜßY8•@IDAT`ó¢tiê094ƒµÇ„SÿÔ3uå:YÞç³Ëu¾È@Ìy÷þÝ‚:©8¤eœï‹ÒµoŽÔ©üì:B£ìxȧÊoý“g¡˜‰óKdd%°2OL6áì°ƒf®·îKyä €äZÝ:GBÚ$wù§½r¨Oéçò©/ý¾øÝÏÓ¾Mëýïý¿^çç¿¡Pý~D¨þŸõtÆC×ÿ®ÿµÿ^¯@?²Ÿjÿ›òaÛ[7jÿ×þ¯ÿ·>[ý¿úÿñÇa Bý˜ÅA-&ñ÷Þ~8ïÀÒ¹:4 P€›üR Å0£U.à a„#Ô¯?ûîw¿»àLøÛ±„‡_ôçø+/(®—÷4`öÍ×ßìõ¥<>7ÿ®rŒª—¯æKˆƒæ+Gš|©O?¡÷ÿŒƒÞÿkœvþ¯éü?À[ô^tQýÿ¼nTÿwý7',¶]ÿkÿÕþ;þ[µöÿ±±kÿ×ÿããÖÿ;>,›’=)dnÌÉúÆÇ?­ÿ¯oôEýÿóDš¾xúÃy‰»ŽYàäÖŒ’õPŽ%žü„3¨´ÐA[2SFÞ)3@½?Ê》þ.4sèS>e~§Ž#ƒt:»ˆBÔ2ìè I¾òá·SãÌM³CèG ò>,ÀMêœ )º¼È Áó×@ºv”ˆ+ÐkätNŽ€JJâ:q¤<á´qv^ù2â\‡FÞÖw݇È*]™ÄèåùJ£îëË#ûÐ Ïí»‘4–ròí$[ž{óÏ¥ÕçËU¯zνù¸Þå5o]2Ò{ÿ¨¨ïôOïÿÌÍݧ?2Î2v:ÿ;ÿŽ©þ¯þ?àà®MÖ¢9¢/ºþ?¯ûÖýÒõÿŒú#ëÉš~ûç¬7µÿjÿÕþ¯ýÿøpõÿêÿÕÿÿ­óÿŸ~ô—ü–Ñ#d±wœ `AÑe´ Z JŒ¤1>ÚAÄ'•/ eDĨòŽ*yêñµ7`–šc˜n¡ëz·9ä{ŽS‹×È‚êP>¼Äx@¸…ó˜ßÙ½µòÉŸ°Õ íÙë ÄqÞx-¿IK,?é‰ßœ¦m€¯ÐJ"-çÚ…O?§>ééið‘÷þÃá`L£^ï¼ô­öÝeÅcïç‚îå˜B³Äó'õo:õ²Íµºµ¥÷ÿŒ }Ñû?£¥ó¿óÿÒ9«—ªÿW/DçWÿwýÏX0?ºþ;J_$˜#c\[£ö_í¿µ­jÿ×þ¯ÿGOÖÿãuÎz1ÿï>óúª×º‘5¤þÿ¿lÿßum„X£Áp,Ð1ç ŒLƒÂ€Ao"9ö—¬ËÈÈ/“½à^Ç:WE®qP*u¥î/òr Ï¯¯{>² }„K.9ÉçYir9÷¸¡ÇæVnõÎá<ü—æfî21­~}ñÓj4Ô¡€@’kï÷Q§kéÒìÌÚü©KÞ—¥\úaÛ‹¯¶Š/¹ÐªÏnµ7¯ßl3µß¯Îò^½>/ÒÇÇû¸î}±çC#oùLiiÛ.ç{=ήûg–¦÷ÿã1Ùû?ä“ƳñbL9:ÿ;ÿýŠI·TÿWÿïXØ¥ä¬cÖG×ÿ±.Ùõ¿ö_í¿Úÿô¢q°kçµ~Öþ¿l‰k ‰o&¢C÷|lÑõs6gþ\viý?æúvFý¿úÿÿ¢ýÿ§Ì#„Q 3êwÇeÁ9]åz);y@væ¢P  C¼î*ß½<×tv¡÷rsñ·£x¤ã¯Î™jX¹OÒsšô9Öi¾hùúB`ðæ`¯“}•ŸÔñ@4×Þi£ö´_¹­cò¶Mm;/Ãsó/íF ¤ò-mA‹—vºÎ‹í<ûvúŒá*0æÜÒoWÀKÊ'8WçÓVÚ¿¶(ŸþÓÇÂûɇ6K5;ÛÐêçmûð _r¥ß÷žÎµ¼ÍŸXÚÖ3² ÓgBïÿµ›°÷¿óçjçÿ**LŒî¨þ¯þ·zíZf-éúl„®ÿkSÔþ«ý»4ö«u£öÿ¥3kÿ?ÆÛÂX‰o"^ßlìï%ºÖ™ýõJ@Ï_r¤|ý¿ò­7RÿïøºÌÖúÿÏORý¶úÿûw_XÃsÏιëý•pu) OÀ”»Â@»JŸU2gË‚>Wž|×@‘/çѹyîØ„z”:!ò ¾j8Ùhå“ë‘7ts± ‹QÒCƒŸkAYºnóÑ ‡”ÃCÉ%N=è’‡×çOSvd@G.ùËò” =£íÃûŸ†oÚ©ñÚÝa êrú`„Ozñæ}îyÓ©ç ¾¨˜:];w§Öçþ”–¼œ»&×WûS·ú‘­6áÞûßûolf|dldþtþwþWÿWÿwýŸÝá£'…¬£Î»þü؃>â¨Öþ;6jl°ÚÏþ¾`3×þ¯ýO_°=ù.«O/»þͨ‘ÍGSÿo}>}%lÿìÙ9w]ÿïà úȸY|ú¨þÿÿ?üÿ}„Сøãhf hܰ}ñ÷äÏrñÑ ¿ÆúFxl˜A>IÛ?év|v¡™—‰¯‚ ý¾—S¯r†®Gó„ÐPQR;‡Úä‹¡4Þñ¤žK3|Èa'Ó–UÇÅO½ J ÷SdÀ*¿´“¾2 _×ÎÑ‹—÷Ô« O¬Í 4bá›o¾ÁdŸe&¤žÃK¾zðIPνYLÞd໼¦.ôÚšvG&4ÒÐEn<ñÞë‰ïŸQUGxˆ…ÞÿÞÿG^ü?ÿ:ÿŸ+ú(s­óÿè•U7]=&¶õ¿ú¿úß\éúßõŸMÉv£ãØ£y)1:JM¾XÎEv´i“ÎÛ¶ÍùæMŒ¯]§nçé'iœˆ_  µý?ù~µHßÉ[Å1e†á¶Â¯]Úýêõ€Œ^éu)By_EôuļuóF–ý†6ô½ÿ½ÿÆFçÿè¾™Wæ…ÃyçÿÀõƒ@¯UÿWÿ Æ„yÒõ¿ëí¿ÚÖ†ÚÿµÿÙ’YâÃH3>êÿ_Vÿ¤ŸêÿÕÿ¯ÿÿ߯žþÕ¿ýÑ[@•B1q„uFâ¨Íõ¦ÏÄŒ€3&ðå£0e®«†f¥]¼†j1–“G0»ˆÖ š|åÔt‘æøvv íŽ$]2yQÚ½~e ¸ðfÎIÛzÄŽ©€³àÒÈzàŸÉø$'m’…G®ày1»öÝï~wy:—öúÍ›­leÙµ? p)•>~Ù»økƒzðw A|É­ïɰÛ/y²ûÌ}R½¼À4|Ô¹}¥Ðyú¹÷ÿŒÓÞÿÎÿhŸüéü¯þ¾74¢GéÔêÿ®ÿÆC×ÿKiŽí‘¹bnÔþ«ý·¶ç*Næ{íÿÚÿçÇ{c¡þßÑ›õÿÆ#¯ÿ¿ƒa}ó±)ÄõÿÿûøÏÓñ³·ïß½_`ÄBÈÒi”‹”6'{¾Š÷BGòâÜíƒg(/ˆ÷ù÷á±Ò¥×¯_¯]*#àì‹/¾˜Öž°ü‡OêZðœ]fä%ûööMB9Ã?AÝÊ«7»åäKB᥯ñ†{/•Åwã«OÈ&Pš€´ÞÿÞÿŒ£ÎÿÎÿêÿ£_éÈêÿ®ÿ–Ï®ÿÇÖbk°UjÿÕþ‹=º¶¬q1úrϯ˜þt]ûÿühÍé¨ý_ÿÏØy2s£þ_ýÿúÿüçéþÝßZh,F †_»{0« ¤ÉKÂ$š ˆ^8±yDí/”}'ÕÄÎñ΂42Sç¼ÁOI' Bk1PZ¼çdóýâ€Ú¶ £ÜCYÌùOxí‹Í§œ2êÝÃù<hw–`Ç׆©çÔt#üÈüáÛ#w”“ôå?Ô (Má탌È#ìã{snG”Ùœ£QÞž€'4®SoÚ¶÷lÊìû­†‘²ÔO{ï&3~Ûg#Kï¿÷†õþwþwþWÿWÿ[ºþwý7jÿÕþc+Öþ¯ýÏ÷¨ÿWÿϺPÿ¿þÿ¯#±:.b3¸Å?þóô£¿ü£·i,¹Íã¸,03€GhØYPe,h±ÙÕ#m!™‘œRóå¿M˜ë-;ùC´ ‰]QÒî@ Þ x ø$DIºm) Ðõ~v"‘GÈî¤4+ßð O›Wû2seæ@§Œú¶¬GGVî©g¨‹ùÓ¿0<ö—¦áóí€YúT}t[V™‘N…Îïmû´íz"uâ#/aãI _ §þq¤]ø£Q,{=à~òî š<šÙû[íýïüïü¯þ¯þïúßõ¿ö{,6]í¿yEíÿµûkÿS2‹¹Qÿ¯þ_ýÿúÿôÁ?5þóôƒ?ûéÛ'1ÒG = Ä(@Wó¸H¹—/ŽsTqm”w1g,ðË{Òñtî<`QøÅHL ɹôì<ÂÏq/‹§k )zÌ?¼ÞÆàØ€†Œ_ø›p Òók’ú„Ýu«à³_iœÇ,ÕðÉ£‰ÒµÓMмù²bd&Ý»Lbr{WU¦ž®ºÉ’w^9WwQT.´“±@ÔÓƒWK·rôÉ‚qC§ïiï§]‘邏e;}%ýê´ôyïïçÿy4¹ó¿ú¿ú¿ëÖÑ]kg]çÌvý¯ýÇÞb§ÕþcGÖþ7îGíÿã»Å§Ó¡õÿŽŸVÿ¯þ^!TÿÿØÑúƒþœXüH‘Ckxfò,°1kÐòõ×_öýïÓþ ÁÔa‘¨PÒÞ"OÙT£Îµƒ.„‚~㘶î+Ó»¤Ô-˜ò¢8–ÿ4BŒ'%¸r‘gÙÓ±2Ë_»6” x3™+‡-në¸Êá§žï x…kìø x=ê™k•Y¹†?ç¿üò—Û÷voå%ìÒ=’(8ÇÇ¡/ÅÊ ZçZÔ%=eÄä _è¤ Òs¯{ÿ{ÿ;ÿ;ÿéˆè„èKJ­ú¿úßÒõÿr»þ¯ý¼eO°;Öö`‹Ì5;§ö_í?c£öÿ±·kÿ¼¡þ_ý?ëD‚YB_l\ÿ¿þÿŒ…„ÿþóôÓ¿ú“·¾ŒÇ@=F`d@" Æ áÔh/ç±31ÅÀpyé³²hņ¡¼w³kÉ Îm)ÝÁy 0o†Ÿ_,•Ã#]PFºº?äýO³óËçVX@‹Ä{¾H?e¯ÚÜIýø² ºê•¾õNyQ¿DåÈhQÆ_Mžû\~®¦á¹ë0"Ý®/»³ðÜ~šwaá«ÿÞ}s¾,x[ÞC4‹Ìè—Ǥ ó«>iä¿·Mšà}VÚ3Ì–ßÒy×ô›_…ÞÿóN±Þÿ'3„ëÎÿ£3:ÿ«ÿ«ÿ»þïB9ºþ×þ«ýWû¿öý¿úõÿëÿŸþÁטx±—Áþ9🧟þõŸ¾ @èÈ£g ¶}®°ð˜_äEØ/¿ür›ìl’Çù]0eb_À±/bà Ç@þ–ügA#Lñê „cv‹é€WÊ“7;ȶõ\`:ú¾œ?À )#(¯î¼Ó@Ù€Gé{†^9“§î' k:dy-ó‘åÔ-lû'v­ŸñÔ¯Ú·isg‰,)“:||r~—ïN#oa }ÚöFœ]ÿ¯/P½¡/„Úóckí¿ìOz¤öíÿúõÿêÿ?ƒ}ôâ8ßÿQÿÿ¼ƒ˜¶|úáŸÿì-'u³ã‚S²†ÆØÀé€(ƒJgÚ%öu¶!\cd‘9ÈL÷®‘¢¬#‹RŒïFXÀ.¢Û³®@»¥‚Ö«À éà9õH÷âòIdPV£ÔE>õ s~‘ƒodv-^žSþ´h›udÂoêKH{ýœ¼|ÉÇÛ_Wauíõä¡ý|ú%Gj3`ËШ׵vHßlå«Ç!oë—1A;êòþŠíïikïÿÜ—é¯ÞÿÎÿÎÿ̘ ÕÿÕÿ]ÿÏÚ鯵tw˜Ì:šõ}¯Ÿ“»þþ¨ýWûËjÿ×þ_Ÿ§þß·úG/Ôÿ¯ÿÿ÷Â~öþõ¼ëy70Ë£cƒt,b'FCMXÇæH^@i¥,ˆ$ÍÄ X³ ÉÐÇÐÎ% ËR”Ø}èöüœ ?ô¾2ˆ>áŸúðXCsäd9—'>åÎ+çøIßz&ήé[‘Íœf!–º†ýð¤/ïKÂ¥MÛ‡æé¤‘cé¯2A ¼²^ ¬£ÏudAïúÏyÚòHÛÜgºÈ‰Nß o ™¼\«÷¿÷?c­óÿì*íü?ú«úÿ(Ö]#æ4zUjõÿÙílm2_ºþ›3óÏZ=G×ÿã¬ëvOí¿ÚOóãiíÿí‚]Kjÿ×ÿ«ÿ7ËåØSù¸×5{ËQÿ¿þ?‚yÇž~ô‹Ÿ¿±²Æy9úù¢b‡]R^(ð°HŒyç–¬ÏÉž¯ñ6e\Œœb´Ž1båðöòp#׎#u›È\gah"zõå—œ7¯ßì[ú•——|åâˆ{Iy¾¬¦ŽKC'ˆÉ±²Ù•4çkd,¾k˜OŒÖB“2ê:†ûÇp Ï*ïÖuš²×+ÞÃOžþûú«¯6Ï{¾¶Ì€†»+nÚ°ÿ†OÂÖ}] Í‘üÿ‘y2÷Q°m³ë9”OŸés÷UÞûßûï1⌇+ÿ;_:ÿ«ÿ«ÿ»þÓ‰ël×ÿÚµÿjÿ3ï­ ±½×€ªý_ÿÿ5>ÀV¸ûjõÿêÿ×ÿÿ‡ã?O?™¯îìš?€ €Çd `%ÙÉG#5vîFä8Ä4†Þ‡oÏKÉå‡ÿù/ÿe ‡ö<Îà+„Ësh¼ß(/u_e82Ѝ¸Ún7ÔÖ{;ÎÕgúƒ#&ý<>r€±Ix¼­ü”]ZõOZÂ&_WÄß9 êý8|Þ…µÿ¦Ü¶iø ú/üßxÿ¹pß—»-ÕÜŸ‰óR~¼õÑhwÚ3p…ïÿììýßÑ“y»ã¢ó¿ótPõÿùq úÿì^¶¦8ëŠó®ÿg­Îú;'kövÖüéú_û/c¤ößwÖ.×µÿkÿß`Ïú²þOý¿]>²–˜/õÿ¨ÿ¿ãâwÕÿúÁ¼ÄÝdˆQµ Ð€(1PM˜ÀOvIS.Áâ£Lœ^Ïv£ô á’1wS­/ßy&zï ï<.å×J€:ewº­ï’—ÜÊ¡ßö]mÜER]O‚‘Ñ£’dÿõõõµ•o¤HáåEsÊ~Z™µod\;Vé?2 ÊäH_'}•ö”I¾òy‘»4×û‚ñ t"‹ ½›§þ„¡ÝpÕw_–ÿÜ{ýxIOšk¾ŽÞÿÞÿ ­o fˆ=»ÎÿÎú‚1ªÿ¯Gͪÿ»þºÌÚ~_kiQ×]ÿkÿ±õ#ôhí¿ÚÿÑÆCíÿúÙtPÿ¯þ?ÝPÿ6(ýôz„0`Àlj#²“eŒ¬U¢ÇA¦#Ñ:8.9GïÜcpÜ\×ÀÊ Òb¼ùõöì–²X¼òà=åÔÅ®_ÏN.¼×Îí(R?ÉN¬¼H}ë9ò”|Ƃެ<¶§,ÙòN |IMö¨3ç[ÇÕžàú“6’ÝáZ¬~ç‘9ÞêÊKÕ£4©KÙ‘…^HÞ^ ÁéÕ½º’NŠú>=BE~!u¥o¥¯\#ó~ÈÝûßûo¼d<97VŒEã%çÆ“óÎÿÎZÈx¨þ¯þïúßõßÚ!Ð µÿjÿÍ@ØÝ›;(®?µÿkÿ×ÿ«ÿWÿÿl ²dÖÿÿ øÏ¯—¸3*8œB  Ï¾}Ò€/¼¡S¢L€ ”G,8³ÐÁGù¡g¬ly·aïÆeÄ\àŽVûÜ»rWy` >¦<¾ÊÆYž‹ÏÞÀ¥ì>ŽŒ~/_/îc†N êO»\?·±"¿|€Öþ#ã„cd@O>yÔŸ0nÙ¡¹êYC—¾T>u?ò8ú7þÚ-h¯ð(;¼Œ¼÷ïÞï®uË÷°ô½2+íðL,M¨p®žï-™„ÄdK½Îÿ?öîmi“Ý8ô"ÿÞ­µ$]΄-‘7’7s²EJöxÎ|0}àƒ¹Á‰˜ËpÈÁµéîEN>/êýþê=²,É’‰îúQ$ È|?T•ð¸Î÷þgüìýŸ±q3c§cÐùÎÿ3¿îsI¿8:÷“·ó?cˆŽéŽÖÕÿ«ÿwýßõßkÿ]?*®ý·öÿÚÿÌŽÊúóTÓúëÿ¯ÿ6KðC/q¿;]G_Œã5Õ=€žñ[)9F™&‡žó!–çh’‰6qw0•¿XÅDZ;Àp„ó«¬rÞ PP© Ø{°|1çSçè£ÞþbÃz7`O_ìîk~”™€TßM¹Ãs^?eZOw`‘Ó(²ëH>Ù"ÿ0R'ï`—LŸ”Ÿ>†Påë‹so´©|”z}±{ÔqÏožø.WÏ¥G޽ÿ{ÿg¬&ìüßù¿úÿ¡OWÿïú¿ëÿÚkÿ­ý_;^Ìn®½¾öÿúõ­\{Pܼc`Ÿ¿ñ»f %oý¿ã‡Nè—õÿ×ÿÿÿyúéÿþ¯Þš:ˆ@éö<Ûy œk²er¡¹v™”Ò:]àšÐeÀ]ÝMzw=h‡gÁ"|/ÇÞ± ÐÈ/xÙ¦’~ð圑;ïÌšë:TC¯lÛåX†§][¢ò/¸çÀ«€sžyV%íˆ,Ó^râáïpÞ¶Éã%ô9¿åµn1°lÄ ¸:}t£Å·oG@­I¬,ò#ÛE(½y•§e‘|Z^¥ßû?ý½÷ç?³ó?zÁ*±úÿèÞêÉÕÿVýYw¬UwÍñã‘ké»þ_?LÜ×ô]ÿO¬ý·ö»´¶·±×þ_ûߘ¨Žtž5wý¿øxúãSÿm–—õÿÖÿç¶&Ôsa¼4îù§ãç·Íÿúá¼Ä]#-]04RDY¸¸‚Åe“^ZiÎ5Ü#ÊI£tÊ·Æ+6å©Ñ( l²ÛKpíÀCç¢{?”X=ÊJOgO~sÊû¬æÚøõ×_d,⫝̸Ãέ>¢Ø›ÉIÅK~ÓÈFN`[Ë·mäMŸÄjŸ mrL=y⪯mÖáë\x$}êìh“ömÚ5|”" ¾Ó^òW&yøUnm˜†äzZüÈË;'.ZeÒ‡C‡ãQ~òÂÑÒÖ¡•^ZiÎñÙû¿÷çÿÎ:¡:’nXý?c‚n_ýÿXS²öMŸ»þŸv×ÿµÿjkUW¬ý·ö?¹öÿútÃúëÿÃÖÿ?øÏÓÿúÏßš.,˜‚mŽ#Æeࢠ’_U=†§3íb…~ÞIEá¢u”ï=–Hq|7ïÌzýêüÚ2Ä¡çyÿR~HæÝV}d0ü8ÕìCüÑù<&øêå«ìÊ"c–;O¦Ì /ÀRd›>ˆvcêÔvn‘Ež/(’á,.@ƒDµø¤Ã˹@çÊ—®`–|ôå).­À—xÎÉã\Ÿ÷\ùò-]Û<¤^rÏJ«ÿ•*2ÂÞÿ`÷þïüŸ™³ó?*!:gõÿêëË®ÿÏkõ,žYÛwý{qí¿(Ksdí¿g{¸öeíÚµÿÇᘰöÿúõÁÖÿ[ÿŸ~„)TOñç×ÿÏ»ÍùbÅ9€Oÿì/~ô–£Þ ãÚyÀŒ‚G.€ÅDæˆíd‹Ò‹é|•R»sºnwðgè”KþÔ—tÀ’úÞoUZù­›œ®#ÔÁƒƒUPÇ9Ú7ôÒêT^Yrâ£\ꌩò;‹e å'Éác—~< ÇIOkËÚa‡W¾Ž8´mûk‡—6º í3ùéÇ¡m?´½ø´Ðë_€+}—ë‘dò’?<|ðp ÷.­´?5‡ä‘¯züŽìO´Ï*ÿÞÿþíý?€ôÎÿ™g*5Î||Ì¡ÿ«ÿg÷íèßêÏÕÿ»þ³=výlæ…¾ˆÎ\ûoí¿±?Ùžkÿ?¿ºÄüXûÿøžõ‡Öÿ[ÿ=ÎîúÿÓt¬â÷ÁÿúÑ_ýì­K,ø^9tÌBAØ‘£cÐt€B®âéÎ¥0r}ÂCðóî*Š:HÆ(×úhM~ëk®•ýꫯ>ûüóϳ j ¥œ-uòÉZú‚+¯f§ÞòÉú q“çºUÁ¯ïŒá7uM±”U®}Pù‚iÇiÌÐyñ9´_Lv©<Ón<¼³K=ä 5qóÄä½×ÒUä,f“Zm x7éd½õµÃ[Ÿ·}{ÿÓU{ÿϘ2Nzt¾tì;;ÿþÚù¿úŸ¾_ý¿ë¿5x×ÿµÿÖþ[û¿v÷Úÿëÿ±—×ÿ[ÿýÿ³yæÿyúÑ/~öv,¯8¬çµÁ5ÇÞ¯ ÎëоË/f“:»® mÀ” \©àòðKÝ“ =“ýîªQÃvÒF½Ò àô±CiÊÊXñ5Ató_þæ³7¯ßœòCsœÉŽ­{(Ð¥Oõx¼NŸ¤~ç׎,Hú$¦®=^.ïQ<´ÒÂoda”“¯ —ºå©—¬êŒ?éú ÐÇÉÒ~UÆáÑ÷AÐ?´ø8GçZ¾ëÆòÕ'Èw.ÿevÏvciÛeÊ¿½ÿ{ÿwþŸ™;ÿϣܫÿÏn_zrõÿ®ÿ»þŸæ¬ý·ößÚÿãO°½Ç–^ûÿÙ—°VÖ79ëæúõ¹Öÿ;>î8žëÿÞ0Oøçp•õÿ®ñ_ò+ŽÙtœÎò«çœ<פ”#úÊS޲ŒäÅâß›aý@‚¾¢/Oqepn‚;ÔÝJvQ©‹¥Çßd‡“—¶+kçˆs­|”Ä”Ô.MÀǹC]òÉh@#ƒéBÏíp}xÎû±¦=‘s¾‚(v-àõË_þ2tè…I“žx®Ñë³o§-dqmw™öàGd¢a ®›¬’ÐŒ ˜[rú¬tÒ“µË=CWÀêäNy2Ohß«CÙ”fiÛÔIæGºÂWÞÞÿ½ÿƨñ±óç¿\÷½8 ôÇêÿÕÿ–‘®)Ùá:ãĘéÚ³ëÿ®ÿÆÇÚkÿ±3¬/kÿ >zsíÿõÿÖÿ‹-±þÿU—ÏÎâßÓ¿‹þÿÓ~ñÓ·€4PcÓb)Ðpi±ªx\ÏàˆQ9€JCËrLäåýQâ!°ØH»;4ÀïÔqÜË:ïuy×ÙÀ™²x%¾@r%ŒÐè»#+@Îdôå òôxln‚OA2âÇpö^*A;h• _åɇ¾r†ç•ž‚óG^~÷Òv×díä¿~= Û»óN,}Ó _Çw÷—tƒOûÀv«Ð¿á5ôéoñjeòN+=²3Bž]h³ë ß¾˜-~Ù…6W柮¾üÙû¿÷çÿÎÿ£AWÿŸ¹@ç®þßõ×ÿóHp 6Ãe;˜kÿ­ý·öÿÚÿÑ£Öÿ[ÿÏXXÿýÿÚ ÿ˜øÏÓþÓ·e,fŒäÝOsÎ Äpæ @Gßç gÐi€(bÆ×_>@§9  Eè~-è]ÜÉ›Gõ„Ô?ihðì–\¿ì¿Îco¿:²Ìµ:ÈⱿW¯^Ði@™¼fdÇ Ÿ‰‘u‡LýÃ_ÝÄC62Mš@FyÒÒ'kwéÐ4]ü¸VÚ‘QŸ$9¹¿dýl›wTM†Ç…ò&»#|ë€p&mŒÌ“ÒÈ¢“ÖDýå7á…_Ó*oæOÊ oïÿÞÿÿ;ÿWÿ¯þßõ×ÿµÿÆ&ZûïüлöÆÂÃVfÛ¯ý¿þ_}§õÿÖÿ·V¬ÿÿÀSà° !øË?ÿ™¯þÙ[J¨¡Äè€ (2é©xÎV¸83 ðÊŽ¦^‡ÙÐã@ ÊìL ’!˜ëçÝXÒäªCÙ‚=y§Õ¾¬Ô?óbs`N%pÍc)7åËÈÕÎóÎ <G§.2ër6žäúÄõ‹—óÒ÷ùW:<µåðìÎ2»½„^£«ñ°» éä—<Œ,ÓGò<"‰÷G홯ºÖvݯ†^uÊâG–äá=2ºNÝ“_YÑ’°×{ÿ÷þ3ÆOŒ­kŽ8ŸÁ²óçt å±úõ¿uÄÚµëÿ®ÿkÿ=Û{kÿŸŒ}Év`gÆ6]û?úríÿõÿÌ sbý¿õÿ×ÿÆ„þ[ñŸXuV}áÄ"S £àOÀžI—'tà¥,'æÕ€WßÍ‹ÆýJˈgbx"([É5ÊÿØí(å8ÎÒ”U&N³\WV×¥!GòFØ¥¥ñʈÊ/Ç órF>¡;”ð`ˆ‹ó^­ ¤#óT”6â#¨·úÐLzé€S—üúÔ¿ÊÞ—¢« _À¾¹¾xxa»XúÝ/žèªèði{Ó7®§m;$—4ùyîõ’µ á\>v𩽠α÷ïÿ5¾Œ‹ÿŸÉ±óÆÝ#¬þ_ýŸq`¹æÆ®ÿ»þ¯ýw@šµÿÖþ§O²ö¿µB_¬ÿ7þÙõQ´õÿÖÿçW¬ÿ0ˆócÏÁ!þ>øO, FgÈÈõü2Q:@»Ÿú(_^0(º”t/Mýæu¥Uà@KÀ•9ñtÁÃMŽ9/Oe¹K®qÏ“pýÔQ<&UÙîâJ°˜Ò÷gÉ'ŸrÀª×äSÖ{§ÈäÝXè ¡ÿ¡“ïœ\m—4בIúìÃ[~óúË CÇûº€nú¦ík5`°_ꟴòÐ;øøR¦ý•ºæm~Ž^Ob®'íJsKÛû¿÷ß8Þù¿óõÿù‘„¾\ý?;®®õJ_ìú¿ëæÅÚûlí¿µÿÙØkÿ_;kÒëÿÕã›­ÿwv¯ë‹—ʦÈ1‹Šþþ–¿šÔIŸ²Ñµ|Û)'Ä>ã—_4NÖÿÿÝôÿŸ~ü×þà én¤ÁÀút–ÁÄ¡Y˜Ìu'¥XQßÐ ¬©«±¼ûíxwÀþ¦|åBþŽ õå‹—©Ïµ<¿ :y9 9¼‹ `ux‘¹<µ·» jœ“ ™§msØ¤Ž»ìåÙtJk*Jÿ„_úã<‰&¿ÞMŒ—|×b<m×Ú´ÅÄ4!ýWFH~Òð˜ü¹ö¸&¢š‘ŒW®÷þïý7–wþG›Dßíü?:–~Yýôëêÿ3?¬»þïúo¬ýw쯵ÿÖþ_ûÿø/ÖÉõÿÆ‹ÏvÖÌõÿÎf¾&Ÿ¸>§>ç⺖ÖôÆò•¯_Þºõÿ¯ ,Ó?6žü¾øÿ°Î34f Ícd_+à1C%»¥ò(Ûäwðy”çv]ÛE$,¹˜¡/Ó¯Þu^€J„)<:HÅÚ+³y.•ËÙ¸#=ΰÇc{×àw3PàCóùŸöÕW_=~5Fg2Õ9ÁÃщ&]yõ„ùÚ^¸{Ô1åG Ç5Y*ã«ùâàd¥~<•yzq{4®){@UÁ1Îúä«[—úbb®/yÔ%}¥[ÉžëÉWŸ »+kâ+M^è\aïÿÞÿÿ;ÿWÿCkõÿ®ÿ»þŸ÷0Ø습ÿÖþ[ûÿø±³/[ž}Ýyb®¬ý?¯CŸÅ:Ê×Hÿ¬ÿwü®k̬ÿ—)sÆÆœ#±r²y÷¹u°‰õÿŸýÿ§ö?zû:(ßèß³\úÓ<ê<)b÷-y„€Rò œ§=ˆÎà+`dr6?ÊkF ÞèhO¹¡-Áz?wÝԇϜv—€gJÉþ“žÇ/ù>¶ô~ùå—±È Ô¡iÐnr7œ~8@Ö»áOfeðK[‡^}Ãì!Sû”,í—¿‘Aþ½^Vx ‘t’`CGFõ¬ íPåÚOéÏ«"éx¥ìudé;»mÈWe ½ÿé½ÿ;ÿ¯i”ñP cçÿêútõÿ®ÿ»þ¯ýGÔ[ûoíÿ1Æcצ^ûý¿õÿ>PuýÿõÿaŽàÁÆÛŒÂé8áÝÏ뉋ÿ<ýðç?}‹‰#…8P¹.À3U¥Dél—€PÒŸþyö%‰&½×*KÚ|áq¾çbáüÍiþ´ò#ß4Pð7y×5°‡¼dµÉN"2–¯2äÍÄ_|ñEäzä»\Ÿ³;i®½«mÔymç²¥ì%gùVææFÈ ïäé' ’ó¦«GPF>ZiC’]oN‰z¡2ˆõ]e ÍOýò‡®i!6´éþíýw—÷þg\MoÌÿŽ“ÿG‡u™[é'ºãvn~eNe¾ž¼ÿ«ÿ«çÕÿg^˜7Âù›ÓüùtŽõz×ÿ]ÿ3f kÿ­ýG¯²ÜbÅ®ýÿ·ô'ݺöÿyjhý¿ ü©]OŸ®ÿGƒø·þßoƒÿ÷ôÿúÙ[×-³;©†¤Aa K[…=èZºÝU o ŠÇñ”—皃&Ê%,X#O9Љ]¼‰12ô­˜†/´OÎÑE¾ð·Í./r4ÝÎ,@9¦ªÄò²rMjÛÈë=ZÙiÏeX3“äûEefùé“áÿ4íÒ‡-º¦‘±ýS9Mü´_èŽ1çäWÞQùñ¨†FºæQÃòB_YÛf´À†Ép9ÈÒã$^²ïýßû¿óçÿM‡­þ_ýo-Ùõÿ¬×ÖØ]ÿ×þ[ûoíÿèĵÿ×ÿ[ÿïáßòK×ÿ?8Aým¾ûúÿg³Î?þóô§õgo˜\»®ÚÙÒœ ŒXÛ ;‘'♼urÐ{¬ÐgBç–}öúõëSnhðù”_À–aŸº§¬¸u€q1å Ð<òæDþd†dÊUi~ah _)f-”²Ãã—¿üe@,uµ (‘·m«Ïäì{š°©õM L“WyÈïk†œF¨€I£ÂsúsNòRùN|eõ³ÐzÚ"×õc¨žk<…–¿²Ó'÷røè˳»®\“áNnïÿÞÿÿç½æˆcçÿêÿÇz3ãaõÿ®ÿ]?³ϘØõí¿µÿ>±[Çž<ócíÿµÿïÇߨO¿ÄÅèOMý鮇dý¿ôþËœšNYÿÏÈ8›AÖÿ?˜ÈÝŸg£™gs.ï·ÕÿúÁ_þäm€ž˜Q EÃú®+uíRÎí¬jG°Ì4˜DòïG;Í‚žüK5¡qM±¯ÚñeGXêÀGá+NÚapÈKå÷+jäÔãÆ|;»­^¿zý˜Ø¯^]bøøEU pS¿s»³2ðçvKyŒö¸ù} :¾Ýq%¿uTôß}8»©ˆ¢m@µjxÙi†?ðI»Ðà#-åçÜ®/`YÓ§ÓFeÕc± ò|zN.!åÚ˜i'€Myuâݽóô³s W.ˆÛoΞ ÿ½ÿì=Øû¿ó¿sfçÿ1$ôƒùAÑ&ôˆóÕÿ«ÿ Áø0o²ÍyÓº¶füLú®ÿ»þ³P:.ÄôÉÚÇ\ûoíºsíÿõÿø¼ñÙÖÿ[ÿýÿ‡iN<ýð?{KQ2 ¨¸~óæMÀDlOç½æøŒ!*ß!̈Ù:/.‚þ¦Û6)œ!F/#øaÐ\ïãaðN&ËøÐÎyë«\e‹N})3ä$@„ôÖ‘aÚª¬vx‡ð¦¼ðV^[È¢îõ©K:>¹Ižw…´|â @»I¤ýjv˜ðšºúž0×1þ‡2/ ÇuòË3ý?àÕá} >L•q4äúºH_üÙ©ëê×½ÿJÎ}i_ïýßù¿óÿ̉êÆèŸÕÿ«ÿ­ëÖ°kmr.ìúvC?Öì]ÿ×þ»æÆ[™#æÊÚìùtGþÔ6_ûí6ýÙ÷1Ç1w.?…ÏÒõ¦vÉc$É›#eÖÿK·¤/æ,>¡~¼…õÿÖÿïøømõÿŸ~òïþÅ[Â[<<!pT(‡t¼+ ×Ë…nvðgø=ÀÆñìnR_€¡«®N½{º2y|‘0tþ}oñu'£Z ª}óÍ71´Ûq ñ(ÏM™Ôï<†è‰ßUÍ—§Ÿ\Ë+ð¼ÚÐ6S²Î=Žvê|îO¼Ê#'?røuòåìni·géÏOÊHkûð(Ï;¿žãÛû¸÷Ïé˜Þ»½ÿ;ÿwþ¯þ§+WÿÊZo}³¦tÝØõ×vÞÚ϶[mˆµÿÖþ¯¾dóÇ6g¯³Ñ×þÏæý³þßYOë«é“çëÿÞ WõEÇÌúÿÏ›W:f¢c¦Ÿ:¦z]:×ú²vÜo£ÿÿôã¿þó·m˜†´±ŒRר´*™ š)Ô|ïb¼d7Ó€EM·œ+›òs¡ãz¨³»³¶ ]¦¬É:_T­X¾Ø3ÁEæ;¥È’VPp%=Ü´ÃŽ°‚W@¨Ïß|€®òþš_Ló­á)¤Î)š‰ñWóô´n{÷þÝé‡û ^­C¿\…¸á?•¤ž¾Øý^'Zü¥¹yŒqúD›º­ïðÚœOŒ>¼¯ó‰îiÎË»ùä+ÍÞÿ½ÿyê64 Wä¼7 ­àQ¿—/^f“Á†@1ÁõüI^ò¯´¤[§Œ|Aýå­]•¬~õpT2+ë]U‘]Û&­†Xù TIwÞ¯,*ïˆsÊ›,}¬B™Ã_Œþ”Pë’»m±{ Í#Ì©zÕOÑyÁ½kajÛà°’ÖºÂÍ­ßš'Ö62ìýßû¿óç?@¯Ð t½áXýtêêÿ]ÿwý_ûž\ûïØ•kÿ¯ýÏÿ©jý¿‡ÿ¶þßúÿùßëÿ?ðˆb+ÿüçûÀ áµ—”"RY ½ä\ÇKë h…®…\Ïi•W· ^^¿y>åOþ‚XY4@ŽSÓ_Η?ÿüóìÒ‚ù€¦Ê`R É³cK~)Ûúbw²†”WNÝÚîír.M^ëk›•»§qüu—¾íÀ£ýˆ'e–g´¯¾h¿µNù³û,†2™§}ߟöéu뀅É0®A¾ãÓÐtü+×:÷þïý7^vþ?Â;ÿWÿ¯þßõ¿ë9ýh½¬ŸÒi»þ¯ýg,¬ý7öùõ ’µÿ³öÿñ5Ì GC}ñúÇ¿~ÖëÿëÿŸW:±1Öÿÿ¯ã?O?ù÷ÿòíXeyÇ… |1™ì|ª—øz/U ¹æ)+Í Sîtøó¯÷”–4柅-ts-àAyÑzœüÔ1$dA#Í!H+@¤ìÃÙ´³ ¯É¿Ë£üûó•ÂÉ}½˜4ʘÐôÚn¦8/“§N€‘Ø{²€r}„ Oññ¯*$òõW*Ú¦ÚåZÛêKÎÕ`J]S”¼y4Ò;¾æŸ6)_9œß²# OåÒµ'ùÓLÞñ¢ríýŸþßûŸ1hæØù¿óÿÒ“ôMÇÝAÐ;«ÿÏÚ³ú×ÿ]ÿ}AWÐ,¾µÿÖþË:1ãA°†¬ý¿öÿúg½4ÌõÿF?̾hûD¿õ›¯ÿ¿þÿÓÿò¿ýà­¯zw”Áq‹#ïXÊŽ¡™TŒ10G0ˆ„,C7çÅ ³ mŸ2Ì—î~Ê@œ2Ý…VT1L[¶y€²9¤EÎË™R½Ø`—Ÿó¡­ÙÔGRŸNˆSùyD/†ÖÕžÊ'_ºk—Ó§Ž©KÈã|Oçñ>×£UsŽ.²]»¿RÿÈy–ÓW½ sÂÕ´BÛÕëIˆæ‘Kü“®ÌUýƒ6FŽë½]赟L‚]lÚE%¶œ@IDAT³÷ïÿÎÿó²rsÇÚù?_’µcôÒ©tÇêÿÕÿÖ®»þïúÏV¤/éñÚkÿ t„µcíÿñMÖþ_ÿïz½LžÀ±ˆNXÿïyg^ÖkÉôKu="¬ÿÎt†µvüùõÿ¯MG:/q7`b€Ì‚ãýOSFªü‚"¸&-Û…gÀ¡›9”»×˜Oçq‚&hríø)0Õǘ²kiʨŸ.Ÿ7óX!yð‘Gn¿x7(Kíp“?z)ûásLôhŸü~渠 ÐÄ¡ ÿa%ñ62äübZ¸ý•ú¦¬mÞ_•~Z²‡öÚv]™R?æ@ÓCÝ-K.ùÊ“MËÝïUyàFye¾›XH™Ißûÿ úµO|Érï¿~;ÿwþ¯þ_ýVÊ]ÿϣƻþµö_lŵÿÖþA=bÓ_¶¹4ö¤µcíÿãÓ¬ÿ7þõŒ þØú牟õÿiŠâŽÎ×÷¯ÿ~$ûÿÉKÜŽú€2:* Ç€DÎį́RÖÅ:6×3 ÅŽù“Þ×ѽydm€è©ÇàZ.u]“W! ÊdfQš9oŒ«Éî°; Ý»yä/ïmšó*‚Ðd§•sïÃÊù””õk‡Ãæ28ø’ÿõW_=·e(ð 'š´oÒÄÒ€[s‘ký# T` ݽœv À+ém«ø6¡iߥ¯$ ¯¦áß~Qgåi]­÷ÃÈ" Zþާv^]™©¿´cïºeïÿù€ÂÎÿÿ«ÿÏÚV}»ú×ÿ]ÿýR¾ößÚkÿ¯ý?ëãø)_¤þÆú§Oô‡°þßY/âkÎ8aO ñS§øèõo£Ð{Žõÿ×ÿåò·ðŸ§ýÕŸ½…Š ª8 ´‚"~uuÝPe%ÝÀ“W Å„ÍàœÑ‡Þ#jòÊ×¹ªNø¥ì”Ð(/.?FBä¹Ê¯úÞ*hå™?ù)kgÔuÛ}¹/þIs•ùÕlëôék<½0þ—_ýò³Ïß|~Ê^ò˜D”`çRy’¯¡îÑöf\1¼Ë/1ê¢Üµ)»Ãn´x†ïÈ{zÄÄ=Û,ñZ¯Ø=ûæÛo²¥?×ÚØ6‹ˆŽåáZß«Ÿ½ÿ{ÿwþïü§Çè‘èÛÑ«ÿÏÄÕÿ»þ[3wý¿Ôé vÃÚFÅqÂØVkÿ\×þ?ã¢×þ_ÿoý¿cWZ7Öÿ_ÿÿ ÿyúÙøWo½DÏÀŠÃ2ŽKÞ÷Ä è(Hð(è‚Ö?å œìIÞäã€rmqoÎ ²Ìuž?€—) çªGú/ùËùBÁ«ÈñÍ×_\ÿЫo*ËûðS¾u‹mÞHø¢u}ð‚üéî¡m¤¡Õ¾Ô3»ÀÔQ@KmvmwßÉEÎ{†èúsú]ן¾ÃSÀ+}ördÍ­™?çmDSÐ)/äýbW;"äi֫ׯæȽÿ{ÿwþïü]GÎA'R«ÿWÿÏ"’5g×+éy•€uu×ÿµÿÖþ[ûíÿëý¡£ýØ£?ëÿ­ÿW_¹þ©qQ?¸~*»;>í¯ÿ_»{ýÿ¿ ÿyú“û“·R<â¸Ì sM/× GÑ ¸œYžÔ”L¹‚5âž|I™ liš]•QZ¯Õç3’œ)³üÑýQâwsþúõ뤗oë›ÂØØ5½|GøÈ˜ÒmL¶¿ù›¿Il§”°¼ÔQåì¼QÜþP^]ø‰SfAA¿J#Ãé×ð£ÔN^¿ü(ßö þq&¯¾*_ò‘³åÕ#«ÐèÔ«½ÎÃcò*›x¥üÞÿ½ÿÆÛÎÿÿtÏêÿÕÿ»þïú¿öß±%cs½t·û¤­ý·öÿÚÿëÿÑëÿ­ÿŸzýÿ` ú"xÄø•‚9Òƒ¯)ã°Ž:šÖë¿ ÿyúñ¼Ä1ÆÀü¢4P‡ÉØ ¯4¾°çñiuÄÅè¤ã›Ž›ÂÊ'LpÇ£Ž/_½üìõ«×9G«\Žá+¨Kù¶±à‘n·ˆhš¶ûg—•²‚þª‘uòÒ?h¯>Tö8 ÏÀŸrápÉqo'¾Þw%³™6^Gž¶´Žö€cŒÒ¡IÛ& ç{ÿ÷þw^îüßùOtCuÄêÿÕÿ»þg×ÿµÿ¢GG®ý·öÿÚÿëÿ±“Öÿ[ÿýÿÿ1øÏÓŸÎ;°€+¶Ã[Œb `€B1KwÄÁ5IYC7ò¾–U]•9Þw@ èòb(ùvÿ˜ðœåüâ?iêTHTY&)ÛQÅÙ¦\éZ•mvh wN(é€avtMÅøÑÞK^ò0JÿËù/Ÿ½~óæÑf[aZ O2‘Y?ŹËkƒ¼÷ÒÕ6y•µò¡õéTtéß¹¿áëKg>©AY€–k;Ïœ ÚÜòÔðU™Ú'ýœµÝXÊâ—º®ûöQ=Ãsïÿ{ÿwþïü_ý¿ú×ë¥c×ÿµÿÖþ[ûŸozlêµÿ×ÿ[ÿoýÿõÿÿçâ?óáßZœ€œ{ps(ì‚ò IÒôNhÊsÀQwXÙDʤ¿h³ëé~¤u, êÈ$(G–œ_@Lé» È‹L£­rÔ©|ò˜ióäÛ *¯/¾ü"F+9¸{»µ…Q+à(#÷ûç‹§¾çÇ÷F ÔùN3RWe”¯•€&²e—Ôðwþf€´¼¿j(ÂwÒ|9P†Ÿ4ò¡¾ ˆ¦ÌÅS_£жnôí—½ÿ§ÿ÷þg˜dœcÆGÃ}Ì Úù¿ó?Cé‘à|õÿèÛ™#3‘VÿÏxØõl¦]ÿ³fÐkÿ@釵ÿÖþ¯­¾öÿú|µõÿÖÿ_ÿÿÿÿ €Åá0a#Ö€—b%0Ä'¸îñ0ί——{^Ñ¿GþÐãkwOŸ'_1¶\¾wÞi…Þn$¹¡u0vð,ÀBÁ ^8\\´çô”SVPžçäJO»çEæ5,Ñõ½Pß¾ûöQ¶rWPh¥@ á<Úè1=;ÔÆ`Ÿú=²>úT’vúй÷^ }G•4í´˜ Ù½†nê<ê4ýªnéís}ƒ‡tqÚ=qø^qx|÷±ìÒöþÇ{ïÿŒ[còšwˆ3v„Ž3ñ * 3^¯ñµó?úoçÿÑoÆ ½²úÿZSWÿg¢;vý?¶À®ÿkÿÑ“kÿ­ý“¾öÿúëÿ=|Öú!ëÿ¯ÿŸµò†ÿ<ýùÿñ¿¾n¼˜¯ÚõÝHˆ¤5˜£Z“'vÒÐZ”«A*N˜¼žûÒ2 pÅ®¥|Qp@3Þ2^ªãÅÓy”PÚ‡ZâMSµ“Å£v‚ëÈ9t ®Õ+ŽÌãTã)„vbùùdùðþìú²³JšLBmTp%]~åìŽ'´åIÞœO™€H#¥6+Wº–÷˜_w¨É· ískÎcêR}óÍ7©»¼ÚõôFüä£O_NL´‘gb×@eºá¿÷?ïIÓw{ÿŸçŠ1»óç¿y±úõôÁŒÿ¬)»þŸ¯vý?»ÁõCÂeg8_ûoí?ëÇÚÿÇOXûý?c`ý¿_ÆÿS"¶DçÅúÿg õN²þÿéß„ÿ<ýì?üë·—‚Qœ•1@„îî‘ÞÀxõ¼_™UÄ=G@eè¼Pt)P ¾Ô3„¹Y`}7@ÝD Ž2àwÞ©ã’•ÄèxFf¢’sBËÉoPox“ášìzÒ®Êeá5H~1%zÄW[+_ÛØzÕÞsåœ;”÷þ]bé øµ ®Š¥÷ž(ŸöOA}õîÛyý€RÀ6éÎÊMþ½NåVEÚpÉ¢ŒºÑ–oëJ_^îýßû¿óçÿ(ŠÕÿ£WÿŸõÕòÐuCÜó]ÿwýgGô}œl?¦­ý·öÁÞŒ¹ö¿îˆ Nw®ý¿þÿwý¿õÿéÈõÿϧ»mùôßÿô-cBðH^À‰\……±!< bå¸<?jô0Z/¥³@y' ›`zs^¾˜Gç }˜Ðû’ßÔï\™ZS7™ÈðeÊG¶Æä› ÞËÔó27Z[¸‡Qd!OA¨>å1ÀÕwf‘ Ÿõù¦Go Þ :}‰Î¹2ŽÔ?|µ[?á©~_h/ÞÊDž‘…<òS‚{zÚ8ªœ|òh#çРÛû?ý¾÷çÿÌ soç? rô2}!Ðz„ΪžrÙóÒ¥Àõ§y«ÿÏ«ÿwýïüØõí?ºtí¿ãœ­ý¿öÿúëÿ­ÿ6í¬ÿÿwã?O?øÅÏÞ2¨â Ô²šønh[`뀌s¨ø2y÷Íón¦87/DœeÇR_ýu€+ 0 è‚/L‘/\µårÙÈWYÐHä_NhøÞÒÃÇ5!ÆãÄ®QÚWÐǹ²‚:ÈòÕW_%ºù*`¥Ô14êÖ~qã“wÞqÁH9ïô Ï¡K;´û:6Â(ßC®É&V/¾¹¹^Ž¬Ò¥‘û«_~•ÝbÒÈ#¿!u¿¼}? š‡L%œxïÿÞÿciçÿÎÿó5×£/(ÎÕÿçë´Öˆê[ñêÿ3F¬Iúãqìú•Ú5¿ïÉt½ëÿÚtêc®Ð#kÿé’GÐ7±a×þ_ûæÆúëÿQt½ðЗÞdÜÓC{ù»ëÿÿnøÿO?ý÷ÿòmÁ"7¼¡†ÝѼÇ";鬲Yh `ˆ—–wá²xôÎî!A=áDƒÏy™„ìf!¿t‡ÇLl„êã&Êâ(áÊ×w‰µ-F<ÚÎÔ9@_^^?m´KÌ.3±<‡  @¶©rxŸÝXi¯‹ êÕ.ive‘Ohyç•iïÿÞÿŽGãBØùv7š?ÂÎÿ³»ˆÂYý¿úßÚáØõ×ÿµÿÖþ[ûív?cý¿ã{êõÿf3Èø·l…õÿg~\ﯿµþÿßÿ<ýhv`Q,Cç E(ûøcÔ©8kóòq1°¦Îl@ec¿0k˜f€~ñÅó2öóU<ôv^ÄRWÁÖmPçýSGù“¯`ŽºÊ¥ì·xÆ€Kù°tÚ„ï ¨T¹[F?0Oþ÷2ч(õJ^õñB÷L¹w*“{vɃÞòy•¥uµoäïý?ÎGlj>Ùû¿óß\ßù¿úõÿ®ÿ»þ¯ý·ößÙaɆŒý½öÿÚÿãk3ÑZÿoü¯‡uó¹Öÿ»=åd¬Lˆþ˜xýÿ³!†¿¾þÿY_ôÅožþô¯þì-pÁcÍDŒ ç„€Ϫ›€Ê´¬X:±’®¹é¾ó(àæ”s´îìøÁkv3XRO¶Ø=þ½~e+‹sõ»"ÿµ¸~Tù'ßÔÁS½Ê¤®Ké(ß2xVV†kÏÑ÷]^h ‡´ßµüòícúÔ—ñÑ?úMëÔoÚﱇm›4Â+‡·t±Ç=Ö#Oe7ØÕ†¶C•ýKÇG6îý?ã¬ý¶÷ÿ€°úaçÿÎÿ»þ­N16VÿŸVÿïú¿ëÿÚkÿ­ý¿öÿúl¤ØLãò)Öÿ‹«ùðEë{®ÿ0‡õÿÿÛðŸ§üåOÞšX&•àÜce@ƒ*àΤ ÎMÄNÆ—¯æ%œ–tð‰Ã r¥ŸGÙ¢ÀäzNmJ†§°ƒå…ÊÆ!PƵ€öõ›×¹v^ À'áRmÛIlÖs{§ðÈ{v'iúòtÎ1»·Qž>.`ôêå«Ç;½²Û ß é—«ß\ãé>½™8çC#](à§-ísõi¯ÅÊ™”ÐjxÈùùçŸÜê6n¼ñç÷ºõÊÛû¿÷çÿóÏÿÏ:·º‡žXý¿úßâg ÄÆEvöîúÿ¼–ë—]ÿݳöß釵ÿÖþ½°öÿúÖMÛª~Øú1)Ž=1ºrýÿƒ7°¯jƒ¯ÿÿú³§?¹¬‡z®ŒG{OÂsü?•ô•týözÀ!;Ÿ´ƒÌ/ Vy 9¦Ji—¶‘i*­|äšy©[Û'¼yùzNÿ©S ºs­íD«~;°ð°ËíÝûw¹do?¡Ûû?8÷à WïîýodžÌ5ÞcWHzÎN_uŠ›WÚÿÓ;ÿ£ÿèÁ8Yý?àøêÿ]ÿ͇Õ±£]ÿ×þ[ûï|ĈýͶ]ûÿ<‰ÒõsíÿõÿÖÿ{~jª~­ùÁ§ã‡ð­ë‹“&}4 ×ß9 Ïe¬ÉëÿÿÿÓÿË,7Ìu“€œ EÐU½ù®{þiü4/x¯ƒÒŽ,žÂïIŸÇuæŸú†œï¾}yШ§u¹B7éåë‘ hþC_ÇÀÀlùœ?hpñÕ¬:–hœ«·ü*³ôÊYZï²€H¥×G} «|í´BÓþ³ø¤­·¡G–Ô5×ú£rª«òtr*§_Ú‚ÖAži| Œìón±&9f’·÷ÿtÆÕ{ÿ¯y6cV0FŒ»Ž-çMk¼óÿèŸÿç%㦺mõÿêÿޱ9²ëÿùA¯s„µ^Ï]tl¹Þõí¿µÿŽý±öÿÚÿt£¯±WoæzÖ“ú_tèúçýÊúÂSQÖï–^ÿïÌŸõÿÍš26~ ýÿ±!ŸÕ£Îޢ׉ iâqeA•_ͧ±í D`K_\š„+­çxS0ÊxI™˜öí7ß4ó˜ÛçóU¿p›?_~ùe&\ø‡=¨ë¿&åÓ€bmHÊc…Ê£ÁÿUŽÄøä˜ö_tçú¹Mêí#‚ú¢íDõR”M‚~ðiYíÕ/ó.‡|»ÎÈ[…’44n]Þm5i§§O¦rmgdŸdqƒóÖK^ ¿_u¥Wæö2{ÿ;&Îýë=ïý?£ÊXÞù¿óß8ˆÎ¹tѱúõÿ®ÿ»þÇæ8ËÅà®óµÿÎ>ºcí¿µÿ×þ_eþ¯ÿwž$ZÿoýcàÙƒ? çúÿƒzÀ5®CÿÀ-‚ÿüh¾BÈàðë¸G÷6ÙÉ3Ä7tj–)”Çûôëp¦ÈkàÐôºÎÍÝÑ)]ß›wAE_;„"Üð"Ëù…å,öydnøO¨º€/pH#òU¾IÀxi|i*C×ñQ™ À Zk 9Jï:Ååb” ÒÑã ìpÍÑG#y~IuŽF_Û½%FÞ7>Ê>d½òÕÕ¾˜B‘¥e+‡2=*—:ÓWÃ_ž2dÏ}—·÷ÿÑ×úQé#‡sý¸÷çæèŒ açÿêÿÕÿ»þÓ]g­­»þ[ÍÚ¹ößÚµ£Ìaíÿµÿ×ÿ[ÿoýÿõÿa8pŒð‘ñµÿ>øOÞÅøÂÈn&áW³ÍPÚxô'¾Î»Å(»ž€R¦Ž>3¶`Hw«àá¼áã…lJÌÿìÄ‚¼àq„G_°åÄ1“oò QŸw;¹„<Â7×ÜË8éŒ)Gù‚kmp%J§Ž€dó‚y/`Ï¿¡O§]U1GFŒŸ¾rÞþÀ»×x´ß†8´oì:»ÉãreÊW†>tD#« ][{ݾŽ<¹Ÿs®:ÐÔ°Äß5™öþïý7–vþ??S¿óÿ€¸«ÿWÿ['¬'»þÑ5ÁšËFïú¿öŸq°öß±áõ}a~4Ô&=×cÏÿµÿ¿ûlíÿõÿÌÁq¾þßñk®ˆªˆÿZ²þÿÁ1èXÁ˜ù}ôÿŸ~øóŸ¾ÕYh.`Ä×ÅtO V“I9  9y+}ÄÎã{‚gl;È’pý)hƒg:{¾F˜¯ûŸTvÖ³ÊWRßÅ£7ëÎW~ä€)_¸˜L7’Ì)?éÚ†Æuy¦Œ¶LHÛ§Lâ¹®³Æ(MûæíÈN/rmË9W.cvþ¹&—¼´õŒÙÅ*8…¶õ‘éSÞý«¬å© ÷ =Ç$ö^¹VNð¼Ü¦Ž¹¶›¶+3ÇÞÿàîý?kÇ”q“ñ2qÇàÎÿÿÆ…ÂêÿÕÿY‹®u%ƒbþìúì©]ÿ×þ[ûo쇵ÿcC­ý¿þßúc ¬ÿ}ýÿƒe°‹Õ8Šgœ«ó÷é`é´Gæb´#›Çu°‹oœçCëßœø›ë€H€NÍÅ—’vn¢*ƒg¯ÃÿâE¤‚Oòª\|S?‚+ôºqß½Á" ¾v@uw~‚ôÖo÷–àÑ:ç:¬²¶~/Z—/|¸^Ö¾Ã=^d¨§ýÂãú›Ðà]z×1f'¤ßCÛÕ›Xùõµ`GVâë:ó£*–OÛŒŽ3‘çj‡N>úGýs Äj}M÷iþ¥m·nïÿÞcÒ¨4vþïünºôýQºúõ?ѵ¨†;å‘õetÈ®ÿVè[Œý oºÓµÉßõÿôÃÕkÿ¥;2NÖþ[ûíÿõÿê;Ò ]s¯ÿwð‡õÿûýÿ§þÕÏÞÔ1 —sÔ˜ÀMÜÔ9»P"Ï1—¾´²<Ê×kÏ» 1Àðžs«Æk 3N`È£zòŒ5ùdÀϹù£|{îºçbåPM—æ(²ÛA¢®Ô? ÖÉ"‹sáÞå…‡ÐG”á=¼´!;¶¦~eñ¾‡¶GoÈ«¬•MÜ®¾®C7çb},TiÓge2ñ=åšÌd\ÏŸÇýlÚ½íäMØûÿè÷½ÿÏãÎXÙù¿óõÿêÿ¬/Ö¾]ÿwý£!v eÎ×þ;ö¬ÞXûïØÑ±¿×þÏ<‰-~,íãj±Í'›ýØ[kÿŸ>¡WîýÕóôÕ¬?ëÿ¤?z¬ÿwp„õÿûýÿ§ýâgoqa SƒRw…p(Í¢3úC^€¦$…¯8²Àƒ&ü‡¦¼ Y´îyÊåq·‰ýûxa¼Š¯PâûÑ|ñ‘d€'ò]r ñ£~4ʪ¿€9 :9—ž‰N¦9=ÝÍE)¨ºÉðÒ/Êâ— å…¤L^CåOÞUV¦í“¡Î`ù¶Lê¸áxOw®íê¾ó.MÁ6×Í?ØÔÞÿŽÝ½ÿÏóËyŒ•3`&á¤íü?ý´óõÿêKà®ÿtå®ÿG¤/fLÜ×k«°öß³MjÞ8Öþ;ööÚÿkÿ¯ÿ·þ_ŠÛŸú!âûq#Yÿúæ÷ÅÿòB §»^£«ƒä>(z^°$×eE›Û *=ÞågQR¾ Ž÷¥´XnæèµòÊPî9//±¼¼x|˜*Ð<šïñ¿·ÝTÊ•OË(_Y›§tx¯¦œÇ£"£vO@ÿ ¹êѦƒÿÈ9ùJ©×‘¾˜X>å'÷É+HvÏCú+_}w¾òÊO¹òoZóm1È’¼a¼÷ÿŒÕ½ÿg|g€|ò§c-É3vfðdÀîü~·ÜÎÿçñC·T×®þ_ýodìú¿ë¿5ví¿µÿŒ»:¶õu;°vÈ‹Í:×λ–ˆ]¯ý¿ö?ÈØ©/gìt|¬ÿwÍvú„Ì¥9_ÿïØ¨3ÆOmÕꙇo?»È'¯G‰Žâ÷\}ù YÿߤK?UG·zýOaÿ¿p³2˜× oÅb•7½‚˜ çΉEe¢ï柣†ÿµ8Iwí0pBº:zÎÀ-´ŸÖ/¯ÁÓZÆuù½˜Çñh~ççÂwïÞ…FºG¼`Ý!t`wðÞëpþÞû¤ j»*›=c‹§[òåµ¾²³kþÝe*ï´sÊOÁç'ÿüûžô @.ùÊ+çø”×½ ¨Yöô³°÷ïìkL÷1t?OÞüyÌ@ãz®wþ½Ö¹»óôÑŒ º‡Î«Þ«ž\ýOm^ýÿX³:Fvý?Úu×ÿžêÖÆÖ¢µÿÖþ3„èÓÑ©›…>Yûÿã9´öÿúñE×ÿ‹¾Xÿÿ·ÛÿŸçÞ8££ôçö´Ho¨+î!Ï‚eÊ€ïýú, ‹¼cih€Yà–>Wçåå‹—½Oþ0MüÈs+GäT÷üûn^¬^:òœ6ÌΧIo=ÒÅåM»£¤[äú%5@–4/¹sôó¶msë©hµÖc— ÒÔ>†Ù½•­°žïŸr-¬ýÿÜí»O³þßñ ×ÿ;8ÃCÇ\skýÿßnÿ?æÅÍ3û-&ã¼J@\%e9@G^Ê~L9“£ Lèñ¹Œ™–W6ŸM¾€‹yþò['d„wþ­§´E½ñ‘†º‡!5i÷¼ž£E€ûR‰ “AL~ï¾ò¬Ê÷ièWÛúˆŸüw³ /A|?Nbþ&ýÞ÷wþ#Täj}ŸtÿãÐúÛ×@­ÊÙúÓ¶‘‰4Ê»Þû¿÷߸2FÄ÷1(mçÿÑ1;ÿWÿ¯þßõßZÛuµë±~ºþÒ™»þ¯ýgœkÿýú¼ŸÅÀ* ÙÔS´í’_Y•­¬.4øªCy²@vñGÇÉÉ×=š8d–·2•§²šÖkqël™ˆäÑæ¾‡lº+¡<Ó?“"n?"ï¿)?)·÷ïÇš1sGÆJ¾ªi<ÍØî»ì:Oä‡~çúaçÿêÿÕÿ»þïú¿öŸÝÛkÿ­ý¿öÿúõ‰ëËÕÆv}O뵸6yó×ÿ;xDüÛõÿ/ýÿ§üü§o¡=ïÄq-4?m&°Ã¹IÔ‰u(9¶ãôÎ?“4èÖ8³á—‹‹ Ê ò{Ì-ï¼Âw|ïf²èºèî`TÊDž° HÃa±¡íi;¤+ ôцロwW ½Ç#•ó®*¿f„f®ý»´|é©Kfä8tê©óß¶¡MßLÙC~ú¯ô¥ò>•1‰·?òKNS^ÉöRr /þí—Ö'¿|7í^GÓÄʶ‘Ù}ºùÂÞÿÓ¯{ÿwþw^Gìü? ÂßK×UOÑ7ÎWÿ?ëdÝÔþqÞp×Í«ÿÙÖúÓ;tn×9ëxCû,´Wbæä®ÿé{¿ü¦¾jþ®ÿgð臵ÿÖþ_ûíÿõÿÎèZ»þßúôâÿüçéGó,ï€ãD `ÐI˜E(ÂÐ Ê9‰S51] -®¥†Ð>®¯¼GšòW=5˜°©¡äò‘!õOCÓK™¦ ‚sÏ@§msMA¡õ~7@8ôW{?¡@Í¿ï{‘üðkyøÚiõá¿ä+—>™<†4ðMîWXýÈðÁGÀã¤Kû(ý²ÉÏ6a4Ú1וI™žë[Å*KÒÓŽó ˜—°N%>IÙiëÞÿ3Þ÷þÏà™ñ±óç?²úõ¿(ëímýÌú"Ãzt­'YÃvýßõƉñ‘ñp ã'i3dÖþ[ûê¨ÍÚs±°öÿé‡ò×étÖÚÿ틉×ÿ[ÿݱþÿÁ ªK_üÿ§?ý«?{kÀ€žÆà $&#OIÔðpÍ™A/­Æ‰4†‰`0É·›É¹àMø\å,'´ËªeËðô(‹n®å©¯uµî{ÙÖ%~¤_ò+ŸcòÔ­|l›”” ˆ šëÖU9ä ÂÓµA,OP' HèK¢ÏÕù‹'â[ßé-wYÂç®úÕÄ)œöÉ«“ÑA ÆÛD!êÜ;´NL¡«îôÑU_ÛEf2x9ô©ÝVúµõ¯òØâUWËwr’¡üÅdV¾¹žÌÑ4t•_Ø™| í¼«më@“ .'{ÿý·÷çÿÎÿÑÁ—Žï| ßœ¯þ?à ]JV¯þßõ×ÿµÿ˜Skÿ=ÿk-uTO²¡×þ??Ä[OÛ/µÍ×þ_ÿÏXèaŒ¬ÿÇõ^ÿߺ’ñ0vçúÿÿyúñ_ÿù[‹nA Å. óûB“¼¡—g’ÉwØé¬q¸V^'£“&_šÀ9R¶u—ùŠ!ˆv%ZO®/á3ñ¥pÐâd‡.Ê™²¾”ëaŸÊ ¨ =Ûå®2•EšúÔ!ä5_¹Ô?é½¹Çõ:<+“Ç=&ØwEqL€56”Á³Õëׯ?±DiÇ%:ÙàVˆ,MœŸÉGÇЭ‘‹v*|´å) ß§àÕQâäÂ}Ú£®z\kCû&ù“ö~Úç¥õŸæµ~qh'Ö{ÿ÷þwNÂÎÿg{çõ~ãÕÿ«ÿÏŠ›õ·k“õhΣKæÅ®ÿ»þ¯ýw~äÌÂ:Ø^l8óıößÚÿ†ÄÇ?^¯ý¿þ5±þßúÿg½ˆÏþ{èÿ¿È"9`‹è¢i1||o&Èã+~ŒNštÂÀ5€Ìc€c†¦\ReÌpB7§‡ò§§†]ÉÜôðG>‡61”…´ï¤¤®Z§â×Sà{ú´¼2¾>8œü±ëË/¿ ˆ€r]À ÏŒ ëÈŒ•µÿÖþ[ûŸEõ̵ÿŸ×”»O2Šã±®D‡L·­ÿ·þŸÙcœw?… "}ýÿÓ7¿‹þÿÓæ%î]Üüï³³k„A  wš\£J?κÓ,¡˜kÐ=õpViZn*˜ÿÏ;ˆÔ¸¹—¿ËÐ{ñе9?©©Ó5G9;“M€¥òy5 • Ý·ß~ûÙç_|¾-«Õú(|œê#&øãé뎭¦ŽW³3Ë ïãüÈðO6Òá“7u6a*H?ÈOOOì\ù|¹ëÒôrŸ§ÐNÛöþïý7Fvþïü7èŒê”êýÆò…;M®i£¨šg}SšêöÕÿó£ÅêÿÇÚdnˆ„2ñtÈË'ñq]àJ?ëßãÅ¢ÚáQ@üÑ›<ò(½õpJ»:íEh¿ýæÛÏ^½z5»ª^älÉ—vd~=ðS‡ôÔ3/8­‘VÇW^Lý¡k»5¿DêãGß]ím™ðÞÚ–‰:ùê §a¦œÃ½µ{¬¡ü*ÓÞÿ½ÿ;ÿwþÓÕ w]A7I§7Vÿ¯þïú¶ëÿ®ÿôDl—›Ž 'Fa|¤KjsdìÜÊ(l–µÿÖþ{¶u áèšµÿ³.Oˆ×þ_ÿÏÜȘXÿ/ý` Yÿ¿ké¬$¿ãþv`Y0¿º@©vòŒ’,èÂa î4¶[‡"UÆ® Á®«‚P³òäK4ò•{ŒB™‚D)s9Fè;#×\+“:.c¨uÙò‰g&ðEwv&M…wå«ÑÔúÔƒN¾#õÞúË_ xBK6Ó‹¿¤Ùõfvdyq»GõAeS®Ù?|7<LRÎ5 NüÓ–2£½Ë0Vô¤¡S¶ùè7ÍyÛ).=á]§Ü$ªqïÿ(¿½ÿgììüÏ\Ùù=^»ú?ºrõÿùq§ëë®ÿ»þ×¾Zûoí?‹æÚÿkÿ¯ÿ·þ_|ÚñG}‰Ö9›A¼þÿúÿl¾U1‰b_üçéÇÿî_¼zx߀;ß}8ïoò«ªI‚|;ŠºS Hcz™yÓcpŒRjÜØùÃøÇ§<ÑÈ/PÕFˆ?\/:· éÃûù‚Gjò幟/œÏã~W¹ÈrÑé¨ÒOÒ³¬sÞNìsÝ´îò Ð3ò¢Éã‚@#“qÀ*ýA¾o®ÝWú…|ʦNN°K ßö‰4ü>•«u5=׈§~mËsîEô í±C91:uª;ý§À°ñ‚úôøíýßû¿óß|Ùù?<Ï¿ÕÿG‡Ûå[¼úÿ×Yïvýßõí¿µÿÖþ_ûŸ/²þßúlçøÜ—Êfª¯»þÿúÿÿøÏÓÿ›?}Kyôìå‹—@ƒBê¯ÍŒvƒpSçÂ^ÅUZyq(xËK=êÉy– @,Az×êõ—^yv^µ®!ˆ‡žÌh„Sß3ÀsO—×£õi‡´¶/m‘/n®” ­ z/§Þ¯¾úê³/æ%ïÚ-¿—s|ýÕyoÖ7ß|~- èòmmT¿PYÛ—I»Ò+oehߢù4¨[H;®]5®SÏÔUÙ÷þ?ï’ÛûÆÅÎÿÿÕ_tÎêÿ³¾­þ÷NÉ]ÿ­¡]Ãk7X[wýÿø´µÿÖþ«ÊÖ]ûíkèÝ·Yÿoý?kg}[±À[ÿÿ`$zäÞ?ëÿnòþ?ÿר^ã°þjÀ›O^T^Íâc—ÃŒÁV0§i åѽáÓ­£òJðd®ñqp„î;±”oPgC±Gò„‚1kt® 2µ.»¢&3ÀÌ“Á? Tø¸ûXO|öoáxGðk>x·=}LQ>ä'»2í3å¤+ œB‡þþàë³È9‹7cN¹wß¾ åÚN2¸V7q+ ^G¦ypÚ€^;;€ïåÑ ÊÅäyOyK—ò“> mË£ìäáEv2íýßû¿óçÿêÿÕÿÖ–®[]Sº^îú¿ël±:NzÛfl‰µÿÖþ[ûí¾FýçÂýºkËúëÿëÿ¯ÿoÜñŸ§þ?zËÀ088'ÂL—¤Œ±!OxÿaÞñôúMÎ)JåûC_…áj—ú „g–*# @,è Ýóœ÷íÔ…4‚߆Pe‡ÒB}Èã\zó´ hYæq„¡ `'ž:JûeÒ‰çPo'tÀZ—ê^z*?ù€[¶O*C†w“6U~öòÕË\ãÙv‘!<§ßyê.¿9Iº?I›¸ùÒœ òí%ÙåµO’éϤX›zÕµ÷ÿŒ³ôÏôÍÞÿÿ戹³óõÿêÿ]ÿ³lΟ]ÿ×þ‹­¶öß±-Çæ\ûí>ÆúLJ]ÿoýÿõÿϦ¥bµŸè >•pÏsÞ#´ã{±»¥')½ùõôã¿þó·´ìú)ð1‹²4„*òkI_<.xåÆ8åüŸH‰ë‚%Ò+Äuéï ‹4ïµw!Ú‚-¦È|ñ÷²óî^Ê®(åç…é‰Pòt–r걋©&¦CÕ5Gók¤*§N27FO®ÆúÄcƒy×Å¿7H\p¯´k£T¦/¸Ã'ÛÔá¼|Ñö>Hëyû®i®•=}vã¥^ù­ÝG´W=èòeÇ[½{ÿ÷þïüßùO¿Ò+«ÿŽÖÕÓ«ÿ­'ìúì‹]ÿ×þ3#Öþ[ûíÿõÿ®åqý¿éˆõÿ×ÿ/†a^°¥ö´Cöwá?O?™—¸[`óºAz¾7¸ý;á‘?Ûçó…=}^ UA²‰U&TYCâ+ a T¡Å÷¼üäúûKÊÕ=Å2øÃk®N«&½` o;Æ^ê/W耥§¿ÜÖ‚rŸtÏC Tþ¶ 2)MÀ“<òk›€FߥüœÛs´÷ÿŒ½ÿ"ùc íüßù¿úõÿ®ÿ»þ¯ýwìÁµÿÎkÿ¯ýÏg\ÿoý?Ãúÿëÿÿ#ðŸïýÇÿû?ýzL²€v# ÒÌÁ‰n× WóøÛ·ó§IxÐÉ+ÐCø&óÎ'694wþ@誣Œ¦­ú#Ë$ÙÐÜÃï€4ò+Cw{¹Î–ÖK>`U‹o|å°ÀŽ4uá©@Pƒkéír¦O† ü:q#ïU¥å®׋Úß|þ&ï¥RoCåv­Ž{_•Géò®íëí#õkw²á tpÎé £rþºú–¶÷ÿ|ú~ïÿ™ûÃï;ÿwþÓI«ÿÏz¸ú×ÿ]ÿ×þ£×þ;ObÜmXöƒ¶¯ý¿öÿúǧ[ÿoýËúÿÇÇüÇÀ²+ÆøõxˆE(à‰ø‹\sdíÖ±# pR $NÿÐ6ˆ?Þûäk#èÊ ^ŽQ:ÇýëBb|eñ’•'ŸOòñK™á‘ú.^̱°>e×Së,O×ä%Ú—ZNx åïO_‘LúÈyÚˆàªßu€¥+Ïu¼¿!ùÕ bý˜´\_rNY ZÛMžÒ4ÆS:ЉLdš/Oyò;¢C3â+ÓþQFyå¤õñ ^½öþ륽ÿÆÇÎÿÿ«ÿWÿïú¿ëÿÚkÿÅ>¾lO¶bÃÚÿÇÿ`G¯ý¿þŸ¹a,8Öÿ;¾"¾é( >¨ã~M—Ôu_þÒ5ʦ/¯tþ­òæÚúÿÏýöûâÿçX‰AÐ`D2Ò4±#M¹>æ‡nÐ]œ­Î/zü2xg×kô€Qœ£—Ï`ÞïÞÏî¡K®Þ±²xã'ßÑ-mª¹&ËÄÎ %gòýjyåßxÃ5þv>yÌïÇa—š2“/6iJ¯ŒÃ59È©\CëQÎBïËÙS'Y”Íî)õPT’ŽÃýëNåƒ÷ýüÞÇê•q±þßúëÿ¯ÿßµ£kEñŸ§ÿ»ñö#cü26@ž÷ïÞÏ. Ÿ}>z$€3Û÷>aêü²È7àsŒ·ò›@¥·rI®ñ{$ñ€Fg·”­Pžø›Ðuðo@sç-ýÅ®9 yihPR¾Ï!k[ä½ä(¯vœ]c÷ºð“çœ]mÑÎ!~зBxý!ÛN|Z§mroÞ x6l¤+ߺÎã‰çñH¬Z.²é‹‹>¼§½M÷+iÏÑ8*Tk£@IDATÜßO§›×_ öþ?mÌ8Üû¿ó?sä6‰;'%íü?útõÿÑ­£l¾56nç>«ÿÏÖ5P¼ëÿYsvý_ûoí¿ù‘yíÿØ÷ÖÚkÿ¯ÿçÇ‘†õÿÖÿ‡Ôç×;ÿ}ñÿŸ~ðóŸ¾5 4Xèä(° úvåî|è Ne7Ð¥`ñ@ Ÿü]á=4B‡›NwX¤$]7Aþ!¼ä·nçx¶îoß};²Çüðõ ˆ© 0ôt4‰æî¼‘ÐrÃs³'ÎB!m‚ó Š9's<8ªY¤ sázþ<’>åP9?ÇÇüñ-¯¶M=€Ãö¾ߦN;«z¯¤ë‹î¼ÏKœOE§î\’äô{Ú3ù½•‘\å¹÷ÿãû£KõÏÞÿÿ;ÿWÿ¯þßõßšÐ5»ëƒ¸a×ÿµÿj[±ÇÖþ›™]:¡¶çÚÿ3BØâsT—¬ý^QÀÞ^ÿoý¿õÿÏâèÍõÿ_DOVGÒ›ðŸg+»€Î#x~ b:_S•ìaÎ{›0ð^);¢îééðáÑ/ð è,fÒÊj:€ %¦nA9´³‚hÒ8•d³ úåRÞ˹¤cÔŠoAÍEøáåýR퓯œƒ,Òu~m›Bx5P+Ó»:OËÒÆ_Oÿåü*™F.ô-Ós±vh·¸íRŸó{ÿµ=y'_PNP¯@v?TÒçìjëÅËáQÌÈ«þ½ÿ{ÿÇÿ;ÿGoÐ3tKu…˜NZýÖ¯êòÕÿg\X{¬ÇõÏ}ýšÅï±Z£vý?ý±ëÿ³]´öß±kÍ¡µÿ˜­kÿ ]ƒéÔµÿ×ÿ‹¿ºþßúÿ£~/ýÿŸÌ#„áhÆ9Î/$Ýã×f/c×1h(Ï£Èâ\c•!ZûtÑÈ·;„¶-›üá:÷y¼+jhKSyZ?^•§ï²Bëz™Ô/ÿêë¯>ûðþC@ð“¶”®/iÆ?mœÇ ñ–øÑ¦ò£Aë|þäÅ¥5¾•“ïëŠÊ‘õÙh¿¾~8íô‚v¡¼ 0‘­¡}¬&©Sڽ£õâç~E6ˆÕäáIǯ~5;ÛF¶Êù.¾{ÿ÷þïü·óÿèŒÑ ÂêÿÕÿ»þ»b×ÿµÿj³­ýwì%ýÀŽ\ûÿÙ_ûvO­ÿ·þߨñ‡×ÿŸ±°þ1;†aípxE\‚óñ÷Åžþù_üèm¼ Ðã:¤õÜn$4ºÒ+ÐI;‚ 'H€—T„Ò)o@ vûXºL¬ìò“>/Tõò<.$—êP§Ø©¼}ø–·tA§¼z_'Œ\ê™ôœ¯Ö‰6m¸:“œ¡›tu¢S(•ú. ÉÎ3r¸Ãƒ Ú,Š—,ÃäÚá4œµuêÀÛ!‰sšºÚ)ú¯2¨£ý)-_($ì„{üÊS ¹æþiCƒüÒz¾÷ïÿÎÿÿÑ“—^¨:i«ÿWÿß~ܲÆíúŸ56këôÇÙá¼ë¿þXûoí¿ØŸ£#ؘµÅÅÂÚÿµÞ×þ矬ÿwÖÖõÿÖÿ¯Ý½þÿ…ÿüè?{[ % Í.Ÿyv5À íe ÞßRW~Õ/àÃ.(AÇÇpxH¾… moH¯» ‰MØ7óòx‡piê¦ÐÜ@4÷s `Éâèeä¥ÉÂ8i“¶¹v¨? “øBIÕƒGåÂß¹ºÅ½ )/Ý/á5ç/G†Ò¢Ç¿uI!;iÚv‘ñžðÉyä¹:V]5=îS®µï Ÿ^ç~N¾ûu^Ò~îÚ£u{ÿÀº÷ÿôƒ1alìüßù¿úõ¿p²V\ëè®ÿ»þÇn{†mæ1>j‰¬ý·ößÚÿkÿÓü—õÿÖÿó˜—õ¡þ~üÚÛõúÿfËßëÿÿfüçé‡ów€pÇöWÁ êó•>/tçÄö¥j:S~ŸÓØ9ƒ†Ó£Lu¨«¼ï±²E˜¥7/FóÓš,¶˜dä¶ðf(¥ìœ‹å¡qô]ùCô_›µý¤²¥;×fri‹k½ãˆåúqLºÇô T0š´”›z…TÀ‘öG¿€Ø = “[tg÷Ôˆ{ñ(oùG|”•p •­IºKnu¹èz¾÷__ìýïØ1þvþïü_ý¿ú×ÿ]ÿ×þ[ûýÉf#ˆñÚÿkÿw¬ÿw~^ÿoýÿþÈ·þÿ,ÿøÏÓþò'ouòÝi ¨‘ú ¥çQ3NLß 8N¹)&ô&« ã+ xäÚ¢w ±Éw®!hçø0 Ñ@g“vÊJ/ÀS^[†!íhÑí\«ßáš"u”æì:‚ÓÌ¢;/h—78Źžó(šÉK;>œGkÛ矞úIÊÚÓã{ó¨£:+kÛÝ6 w޾iêOéÝ#‡r=ðr޾eõ•÷ŠÉ»ï:ÿAÐëÖ[y7×Ѓ\{ÿƒª¿¾Ûûÿ7‡;ÿwþÏ«ÿWÿïúŸeõ±öŸµs×ÿ¬›kÿÅVÓìÞÚ\FLm¸¦­ýwìS×þ_ûý¿gßþXÿïyÓGtæ(Šú´ëÿ¯ÿo,Ûyúñ¼ÄÝ ‘è_CÏ=fök&¨¼úhkðU]šsƒÍ‹Ò¥©Ãä|Ð ÖNýSÏÔÕëNdyߟX®ûu@BA(`λ÷ïê´àz”qž¥kß­S=øÙu„FÙ)ðO•Oý“g¡˜‰ûKde%™'&›pvXA3שû’Gù ¹V·€ÎÑÐ6É ÿ¶ã¢Wõ)ý\¾õµÊ¿ûyÛ—´½ÿ{ÿ¯·óç¿¡°úÿüˆ°úÖÓ»þïú¿ößëØ ô#ûií¿cS>l{ëÆÚÿkÿ¯ÿŸmý¿õÿëÄõÿaµ8˜ÄþóôÃy–ÎÕ¡]€ Üô—¢-è,Ö€)˜­rW#¡~ýÙ_|p¦üíXÂÃ/ú‚sü•”+×á= ˜}ûÍ·¹> ”ÇçæßUŽQõòÕ| qÐrõàˆ—Î.*m˜?XŸ]×€ŠÃ>é}#¾/’µMm_ÞuU1Z¦îö~x÷QÂäŸÄGûú8`±v‡„Ðçd燺ÑEî!n{Å•ËyÓ[¾9Ç+•œ6çÔŸ å)ÆËá/÷@½d7O»´yïÿŒß½ÿ+‡ÆNç®ØõÎÿ³Ó1óuúCØù¿úß8Xý¿ë¿qpl˜»þ¯ý—uÓÚé°¶®ý·ö¿± ÔÎ=1cCÜCþÚÿëÿÂúçé®õÿg0\úø(PÒu¦>>}òÛâÿ?y‰{`Ô†dñÀ´„¦x¶Îªô6è8h€ª冶uHóŽ)e~ѽw |õâ>SÞµÇÜ ¤(WÐW1I Oë˜ÊOä’IÆ¡ÃO²©ÃñêÚyå.jðh›€dÊICë…íb;³ ì9ŸH&½÷EŒçºzèå7´ïÛ6émGûjïÿÞÿŒãƘ›¸chçÿÑQ;ÿWÿWov®tŽ4^ý¿ëÿ®ÿkÿ­ý·öÿÚÿÏ>V}ëf}!q}+}Å?‰rù6¾þ/f®×ÿã ®ÿ·þÿ3nþµ9üÿ¼Ä BPEÙ47YZ•ú>b'O°ÀÒ†´þªHQ´¼¼wß¾ /:€¨ÊÏíÒ'q|.‘oÀžÙµEŽðéÓS1ÅD¾È3¼û¾(²¹-@')C‘ y>|w)çÒÔÝXðËõðøÕõB{4&?^µ†G_/OZ‚:æÐ7xTnym£GSú*éè”i?NBÚæZP§s¥S‡þô‘ -÷i8PÞúgØ>š|©O?aïÿ{ÿ¯qºó?:dçÿÞª÷ªÓèŒÕÿÏëÆêÿ]ÿÍ ‹í®ÿkÿ­ýwü¶êÚÿÇÆ^ûý?>îúLJeS²'…Î9‰o|üÓõÿõ¾Xÿÿ<‘¦/žþd^â®cœ<ÀšQ²þÏêâÉo8ƒêÐH+´¥±eäH™êýQ úhæÐ·|Ë2üNGétv•¨eØÐAÓ|åË/Sã̤Ù!t€£yà¦uˆN… /2hðüõEÄH׎2cåzœÎÉQPII|J''œ6ÎÎ+_FœëÒÈK}×}¨¬Ò•iŒ^ž¯4zá¾¾<²ÝðLßü ±–“o'Yxææž¡ÕçËU¯zνù¸ÞðS×E£Œô½ÿTÔwúgïÿÌÍŒîÓg;;ÿwþ³úõÿ³6Y‹æ¨¾ØõÿyÝ·¶è—]ÿÏø ?ºžÄôËŸ³Þ¬ý·ößÚÿkÿ¯>Üúëÿ­ÿÿ[çÿ?ýè¯ÿü-£Gèbï8SÀ‚¢Ë( Z J¤1>ÚAÄ'•/ eDÔ¨òŽ*yêñµ7`–šk˜¦Ðu=‰)GùãÔâ•ãYðoÊ——·pó;»·"Ÿü y¬nxhO®/Çyyã~“ÖX~Ó¾8MÛ_¥•^'DZϵ ß~n}ÒÛÿÒ á#ïý‡ÃÀ˜4F½6Þyé[í»ËŠGîgÀ÷òL¥ ñüiýIÇcø¡"Û\«[[öþŸ±¡/öþÏhÙù¿óÿÒ9ÑK«ÿ£ªóWÿïúß±`~ìúì(}Ñ`ŽŒqqlµÿÖþ‹mµöÿÚÿëÿÑ“ëÿñ:g½˜ÿwŸ9¾êµnt YÿÿwÛÿÏ;°®1ÜxG€Ž902q ½‰äÈ/Y—‘Ñ_4&;à^G«"׌8(ÕºZw⋇¼èûëkÎG´pÉ@"'ù<+M.ç7ôØ\äVïÎË?40s—‰iõ닟~P£ ¤íì’\{¿:]K—fgVò§.ux_–r퇴_m_r¡UŸÝjo^¿I3µß¯Îò^½>/ÒÇÇû¸î}‘ó¡‘>SZZÚå<×ãLàš?IÍÞÿÇäÞÿ ט4žcʱóç¿_1é–Õÿ«ÿ3²”œuÌúãØõìƒKgîú¿ößÚkÿÓ‹ÆAÖÎký\ûÿ²%®5¤¾™X¨ÍùØ¢ñs’3.»tý?æz:cý¿õÿ§ýÿ§Ì#„U 3ê³c‡²àœF¹^ŠÃN9@ *(èÇÁòÍ幦 »C½—›‹¿Å#uÎT;ÀÊí|’žÓ¤Ï§ùr å?è Á›ƒ'û*<>©ã#€h®½ÓFím¿r©còÒ¦‰ÒÎËðLþE£ÝhTÞ£¥-hñÒN×}Ñ gßMŸ1\Æ|À-ýv¼Ô©|ƒsu> `¥øk‹òí?},¼Ÿ|h³ôW³³ ­~NÛ‡Où’«ýž{:×ò’?±´Ô3² ÓgÂÞÿk7áÞÿÿ™«;ÿ£¨0ý1ºcõÿê«WÖ2kÉ®ÿÇFØõ?6ÅÚkÿÕ.­ýjÝXûÿÒ™kÿ?ÆÛÂX©o"Žo6öwˆ®u&? ^ èùKŽ–_ÿï€|ñï¦SÖÿ;¾.³uýÿç'©~[ýÿ¼ÄÝÄbxæìœ»Î¯€«K™Xx ¦ÜÚ(|¢dÎ.–€>Wž|×@‘/çѹyîØ„z”:¡ò ¾j8Ùhå“ë‘7tsÅÎ(é¥Áϵ ,]—|4Æ¡@åðGFr‰[ºæáõÿ²woK›ìÆy ù¯î^I—3aËÜS²ì¹Ž Ù")Ëš3LDø`nÐsÚk×Ý‹œ|^ÔûýÕmʲ¬M2Ñ]?ª€D"™ï‡ªúîÓ”БK~øOž2¥g´½{;àÓðm;õ!^Ù6± .‡ Føt¡'è{ÈÛþh}h¼8_ðEÅÖéÚ¹C8µ>÷§´æõÜ5\^íoÝêsTn´Ú„ûÞÿ½ÿÆfÇGÇFçÏÎÿÿ«ÿWÿïú?»ÃGO ]Gïúÿþcúˆ£ºöß±Qkƒ­ý÷ìè 6óÚÿkÿÓlO¾Kôé¥cãߌI>šõÿâóé+!ý“³sîzý¿ƒ3è#ã&>øôÑúÿÿ{øÿy„Сøëhv hܰ¼ø{òg¹xo_c= 3è˧i¹ñ“n×À' ͼL< ¦ôSø^N½Ê9ºÍJc@UIe´ÍCi¼ãI==B3|Èa'Sʪãâ§Þ€RCãý°Ê‡vÒ#Óðuí½8¼§^e€|bmfp  ß|ó &y–™z/ùêÁ§A9÷& ˜¼ÉÀ7¼¦.ôÚÚvW&4ÒÐUn<ñÎõÄ÷Ϩª£<ÄÂÞÿ½ÿG^ü?ÿvþ?;VôQçÚÎÿ£W¢4nº¨zLlëÿêÿÕÿæÊ®ÿ»þ³)Ù.ct»c”Gí英_ÄŽµÿÖþ[û~_ûÿ¡#Ø^އ_6z„®¨‰³þßúëÿÿnûÿ¾Bx …ge`òûgÑeA8²£!ÄØ9$  @t)“”» å¢,ÞœFkAÀ ô[À;;væå;WóðŸkÎ_wqÉÇCBiz^>òC7 _œ†)ã:÷%妟§}‡~ïÿÞÿÊœ1²óßÜØù¿úõÿ®ÿÖÈ]ÿ×þ«m%^ûoíã`íÿ&Ånÿ¢ºrý¿ãêaý¿³‰cýÿ3Öÿÿûã?O?œ¯¤ †X”%@£îP’—cÒBò= ÉsK¤ o%x]eñM@3§ÄïÆIôn(J¯ôè\]ǃápžEchÈ'ÐFQ„ÿõþ¦9ç„JoýAd/™”ÁSÞCé^´©€(ÁyéÚe*4<ú’Ó+­ Qå-}ù¹Î–ª)ëq? Uƒ>̰áUÅgÛ¢zf]ýPÞÒðóÞ«ÊÓz¾;Ûïõ[ñ{Ÿ*ÏÞÿ½ÿ3;ÿ®0wÌ?¡ó(:äÒ;ÿWÿWvî¬þßõ×ÿµÿÖþ;º¯—kÿŸ''¬µ'Öþ÷ú–õÿؘëÿ­ÿ¿þÿû›rþG🧟üÕŸ½~óöMÀ—°S²Œ1@•tˆ4&*D^*Ðb•O²Î#zI›2 +/L¢ðR¯¼Ì}x«O Ü£Ôç<4À–IâëÅèón§a†¯ &[ïj¨¹ÆPÀ-‹†§LˇÉиV¯8å†Þ9^'ex’C?DÞ9'cå«7/* Pöü«„zÒwSF{Ò&â\ò¸Ê–N'Ûb?Â{£ÔûêT¿²½'ÊP$Óð‘×4ô¾ZXÙÞÍ)K`˜þHúÞÿ½ÿ¾ ÆæÎÿÿôÕêÿÕÿ»þŸ„<¾³ëÿÚkÿ­ý¿öÿúÖ‚õÿPÍ×äs®ÿ¿þÿ &ÁŠQð#¤ü£á??ù÷öZ @’î®*Ø"­ïAâ̸6qXÝýÄé-`Âù=¹×€Z ~w 04Θ\À—÷”a¸F! M¥,^CŒåäÕì.¢8A“¯œº€.Òßή¡ìHRÑ%“G¥ÝëWVàj€KoâtNZê;¦NÀ¥‘õÀ?“ñA OÛ$ ^Àóbví³Ï> OçÒ^}òI*‹l#»¶àÔ.µÒÇ/{mPþ!ˆ/¹õ=²íð’§»ÏÜG Õ‹ LÃGý•ÛW ·Ÿ÷þŸqº÷ç&Úvþ¯þ¯¾74ªGéÔÕÿ»þ»þ_JslÎscí¿µÿb{Fq2ß×þ_ûÿüxo,¬ÿwôæú㑯ÿŸÁß|l ñúÿÿ}üçéû?ÿÉë·oޱвt墥ÍIΣx/ p$¯ÎÝÙ>x(@€ò‚8Ï¿ðœQú«ÙýóÈæ¨c^êÌ œóûuiäô1ÞçMƒkÀNÀ¦D•¯üÅä(XA4åã½7~.™\kŠ2dè¡ô@éÕ«Wá±Kedœ}úé§ÓÚsÂø´®È€çì2#/ÙÓ?Ú7å ÿu+¯Þî–“/…—¾Æoæ^*‹oâ«OÈ&Pš€´½ÿ{ÿ;Žvþïü_ýô+¹ú×Ëç®ÿÇÖbk°UÖþ[û¯öhlYãbôeί˜þt½öÿùÑšÓ±öÿúÆ@æÉÌõÿÖÿ_ÿÿÿyúãóÃ׋Ǩá×DÁîŒðòiú’ð€D3Ñ ç16¨à€’wRMìï.x@#¸uÞÁüä1yZ¡´u¡Å{N’ï?TÚ2@Žre1çw>å•›O9eÔ›Ãù<hw–`ÇWÂÔsj:‹~d~÷í‘»ÊIzøu¥)œ>Àˆ U’®KÛG t½Häº;©Mä~å©c»ó*/3Wftʨ/e=¢8²ztO= .>äoüÂðÈ/MÃçÛ³ô©úèRV™€H§Bç÷¶}Øv=ÑÇ:ñ‘—xÒÊWÈ©mþh”€Ë^ ¸…Ÿ¼;H‡¦fîý?­îýßù¿óõÿêÿ]ÿwý_û=V›ní¿yÅÚÿ±û×þ§dscý¿õÿÖÿ_ÿŸ>øÇÆž¾÷?~]à¤Fúh¡ ÓXèñrW)÷âããÜU\Ûå]LÀ |xO:žÎý‚,*¿ÉD 9—ÞGø9îeñtm!Eù»·Ï»Â hÈèð…¿ Ç =¿&©OÈn¬[=Ÿ|¥q³TÀ§&J×N7©òöËŠ•˜tì 0‰Éí]U˜<]u“¥ï¼r®î>¢¨\i'#@ÔÓƒWKÓ½?ú$`ÜÐé;AÚÛiW寻édÁN_I¿:­}¾÷ïÿÎÿóhòÎÿÕÿ«ÿwýï:šµvÖuÎì®ÿkÿ±·Øikÿ±#×þ7îÇÚÿÇw«O'¦C×ÿ;~Úúëÿ÷Bëÿ{¢ºBП³ëO_)ºc(†×`&O€Y{€@¯¿þú£?üÃ?LzÁ4˜:,RJÚ»Cä)ÛJkÔ¹vcÐ5€PÐ'€)u_™Þ%¥nÀÔG5ÀþÓ1ž”`ä"ϲ·=beÂ_»6”-x3™‘CŒH—:®rø©ç;^áãZ ;þ^zæGe"×Ðàçü‹/¿HßÛ½Õ—°K÷H¢à‡¾++hkP×ô–“ƒ|¥“&Hï½Þû¿÷çÿÎ:¢:¡ú’R[ý¿úß²ëÿå„ïúûxËž`wÄö`‹Ì5;gí¿µÿŒµÿ½½öÿûÖÿ[ÿÏ:Ñ`–Љ×ÿ_ÿÆBÃÿyúñ¿û—¯}zŒÀÈ€DŒA©1Ð^ÌcgbЇ! 1àúÒgeÑŠ Cyof×’œÛRšÁy U0o†Ÿ_,•Ã#]PFººßõýO³óËçVX@‹Ä9ÏÒOÙëŸ6wZ?~‡ì„®z¥§Þ©³ *ã׀ʣ-Êø«ÉsŸáçjêž»þ#Òíú²; ÏôÓ¼ _ý÷æ›óeAÀ[x Ь2£IçW}ÒÈo›4Áû¬´g˜…_輇kúÍ/ƒÂÞÿóN±½ÿ3Nf×;ÿÎØù¿úõÿ®ÿY(çÏ®ÿkÿ­ý·öÿÚÿëÿ­ÿ·þÿúÿç£p…à{¼áŸÿyúñ_ýÙë$€Ž>zÆ`ËsÝ€-€Çü+ø"¯Â~ùå—lº³Iç7`ÊÄ ¾‚c^ÄÀŽü”ü' ¦xuЀ1Ùb:à•òäíN²¥ž ìAçQ?À—ó4eåÕÝw([ð¨ý°gèÅ•³yê>pÒ²¦CÂ+ÌG–{P·öOìZ?ã©_µ/is]g‰,-Ó:||r~—ïN#/Ç0Ð>íGû#N£l¹ÄÚ9rµž½ÿçÞïýßù¿óõÿ{úxõÖ”]ÿwýgݬý·öRXûíÿøüœñiÖÿ[ÿÏx ø–âõÿ×ÿÿÁ~ú×ÿúµÁå]LvJupõ9dï´*HÔ*ô°Yœ”-ÀåQ³CŠp} ½ó¼khƒ7@ú \ÁÇn$y¶¦«K9qÀ˜)[P§eíuÊ è/Z¼Kè(M»Å”ÅÛ'ô’¡õ¢qž6\ò¨³ë]†ðŸ<¼ôÉ"BÊæÁ¡²K¾óòn-2JÓf‡ ‡j Vöé„ôƒ|²i#°¯í’.´ x ëc…v~ Ò„È?õjcûaïÿYlõÇÞÿw¯÷ÐíüÖAæNæÕÎÿèØÕÿ«ÿ­%Ywf-ÜõŸ†x?ìú}zì }!¬ý7?¶®ý÷žýI¬ý¿öÿúëÿ­ÿÿ öÑ‹ãt<|wþÇúÿçÄ´åÓ÷ö“לÔ¡¨±s7¢GÁ‘"¦5ôÞ}{^J.¿üÿëý¯€ð0É ’)S0«ËƒHgò-€Òäñ·á˘ :9 5é÷¦†'™S×€HP½‚d-ç}^­¿FkÛ§ÜôFäN<…äÝûi0BôQLü´É?ÿüóÐ}ñÅ^Ú‘5…Ð~*‡tíTŸ(Du5Ÿ|~ÝQš]XBΧ úå÷þŸw‘#{ÿÃj|'ÆGÇóÎÿÿtˆP]t‘‡¾siõÿtÔêÿè]ÿŸ,ÛõÿØlŒ˜µÿÖþcƒ[WÖþ_ûŸSÿëaO¬ÿ—ùÁîZÿoýÿßwÿÿ釿ø“לSϦ›¥Q0DšÅÂÒ ƒæîÌÊwGß.`ÏòQ®×Òtº2Ÿ|òIb/RwþÃG(OçÊzo“ ]ðhK§à†Ï¡=3ø ax÷õ¥îQ†# (@ÅÕv»¡Rïì8WžíŽ˜ôóøÈÆ&áñ|´ò[6´êŸ´†;M¿®ˆ¿s@ÔÛqø¼ +ÿ¦\Ú4|ýWþoß½}€\¸çån¡šû3q_Ê·~8²íN{®ðßû?;÷þgôtÞf\ìüßù?:hõÿùq`õÿÙ½lMqÖç»þŸµºës휮Ùé¬ù³ëÿÚ#kÿ}'v¹þXûíÿûì]_âÿ¬ÿ—å£k‰ù²þß`ëÿg\ü¾úÿOß›—¸› 5ª ˆRÕ„iüt·‘4å,>ÊÔéõl7z@φŒ¹Ûh}ùÎ3ñèÔ{WXx÷ùpy(¿VœÐ)ã¸Ó¥¾K^r+‡>í»Ú˜ER]O‚‘Ñ£’dÿõõõµÈ éRxyÑœr‡ß€"³öL‚kG”îðó(£ LöuÓ£´§Ló•ï‹Ü¥¹Î Æ/Љ,‚ö&Oý C›pÕw_ÂîÀ½~¼¤7͵_ÇÞÿ½ÿZoF;ÄžÇÝÎÿÿô=b,¬þ¿5[ý¿ëÿ¨Ë®í÷µ–u½ëÿÚcl=Æ=ºößÚÿÕÆÃÚÿëÿuÓÁúëÿÓ ëÿÏ¥_¬ø˜ uD2YÆÈЏþk 2‰ÐÁqé9zçƒãæºþ¸PVVãͯ·÷`·”mÄâȃ÷”SGe»~5;¹ð\;·£Hý$;±ú"õÔ9rô(ùŒ „Y}lOY²õ@ø’šìPgÎSÇÕžpýiÉîp-V¿óÊ‹ouõ¥ÀêQšÖ¥ŠîÈB/4/Cpz5WWÒIQ߇G©È/´®ö­ôÈ52Oá‡Ü{ÿ÷þ/OÎcÑxé¹ñä|çÿÎZÈxXý¿ú×ÿ]ÿ­°ößÚ3²{3ƒâú³öÿÚÿëÿ­ÿ·þÿÙ@dÉ\ÿÿ7à?ß¿^âΨàp 50€>yú¤_yC[§D™3@(Xpf¡ƒòCÏXIy·!wã2b.pÇ«<÷®ÜU˜‚O”ÇWÙ:ËsñÑÛ¸”ÍãˆÀ¨á÷âåùò`3pJPÛåúñ¸ÝˆUùå´òŒŽ‘u=ùäQøe‡æª'<†®}©|ë~äqôoüµ[Ð^áQvxyo߼ͮuË÷°ö½2‘vx6–&T8WÏ÷–LBc²µ^çÂãþ9ßûŸñ³÷ÆÆ5ÎŒŽAç;ÿÏüºÏ%ýâèÜOÞÎÿŒ!:¦;ZWÿ¯þßõ×?<®ýwý¨¸ößÚÿkÿ38*ëÿÍSMëÿ­ÿ¿þÿÙ,Á}¼Äýît}1Ž×]ý¿ëÿ®ÿkÿ­ý·öíx1»¹öúÚÿëÿulÔ·ríQ@qóŽ}þÆïš1”¼õÿŽ:ý¡_Öÿ_ÿÿCüçé'ÿþ_½6u Òíy¶ó8×dËäBsí2)¥u"»À5¡Ë€»»›ôî8zÐÏ‚Eø<^Ž;¼ b ‘_ð(²M%ýá‹ 8#wÞ™5×èTP ½²m—k`žvmˆÊ¿t➯ΠxæX]”´#²L{ɉ‡C¾ÃyÛ:$—Ðçü–׺ÅÀ²/àZèôÑß¼µ&±²Èl¡ôæUž–Eòayu”~ïÿô÷ÞÿÿtÌÎÿè«Äêÿ£{«'Wÿ[õgݱVMÜ5ÇG®¥ïúý0ýq_Ówý?ý±ößÚìÒÚÞ~Ä^ûíc¢:ÒyÖÜõÿâãéý·Y^Öÿ[ÿŸÛšP[Ì…ñҸ玟ß6ÿÿéûów´XtÁÐHeáâ —ILzi¥9×p('Ò)߯ؔ§D£,°Én/Áµ‹^ìýPbõ(+==5úÌ9(ﳚk àW_}õž±ˆ¯r;·úˆbo&'/ùM#9m-ß¶‘7}«}.´É1õäqˆ«¾¶uX‡¯wrá‘ô©³£MÚ#\´i×ðQVˆ,øN{É_™äáW¹µa’ëiñ#/h•I>ŽGùÉ DWH[‡Vzi¥9ÇgïÿÞÿÿ;ÿé„êHºaõÿŒ º}õÿcMÉÚ7}b|ìúØ]ÿ×þ«­U]±ößÚÿtäÚÿëÿÑ ëÿ­ÿ_Xÿÿà?O?úË?}mb¸°` ¶9Œ— €‹‚J~UõžÎ´‹ `úy'…‹ÖQ¾÷X: Åñí¼3ëÕËókˇžäýK ø ™w[õ‘ÁðãT³ñ{çó˜àË/³+‹ŒXî<=J˜ 03¼K‘mú ØŽ©S?عEy¾ H†³¸ Õvâ“v /çœ+_º‚YòÑ—§¸´b_â9's}ÞsåË·tmó>zÉ=+­þWF¨<Ê{ÿ€Ýû¿ófÎÎÿ¨„èœÕÿ«ÿ­/»þ?¯Õ³xfmßõìŵÿ¢,Í‘µÿžíáÚ—µk×þ‡cÂÚÿëÿÕ[ÿoýú¦P=ilÄŸ_ÿ?ï6ç‹çj<ý³?ÿÁkŽzƒŽkç3 º ˜#v´“-JOç«D(ÂØ‹Ðu«¸ë€?C§\ò§n¼¤–Ôïð~«ÒÊoÝät¦ ¬‚:ÎÑ>@¸¡—æP§òÊ’åR`Lý“'ØY$(Sè,?I» ôã=Nz:X[æÐ;¼òuÄ¡mÞ\;¼´Ñ]hŸÉO?mû¡íŧýƒ^ÿü€\é»\$“—üá!àƒ‡½wi¥ý©9$|åÐãwdŸxú£}Vù÷þðoïÿ¤wþÏ|Þ úÈvÅu\•ä í‡\OQmæì{ùûˉåË“¦êѯÒ#§ú& ©,ÒË_^{9ÈT9uMy—üIÌ=©Oø/ðòÊ8œ7¸Öνÿg!r/öþÏûvþg^˜'ŸæMç¡9¹óÿúÒëèÕÿ«ÿ­=+æM×(«tG瘞Ýõ×ÿµÿžmæµÿÖþ¯¾öÿúÖÑõÿÖÿ¯ßñûæÿç?ü§ÿøëî€Ê\¸œ0ç J;|òbôIïVÞ‚!htX_˜þÙgŸ}ôõ×_çë~â£èœ˜³ößÚkÿ?Áö[zíÿg_ÂZYß䬛ëÿÕçZÿïø¸ãx®ÿ?zÃ<áŸÃUÖÿ?¸Æß„ÿdV³é8åWÏ9y2®H>(G4ô•§e É‹Å'¾7Ãú=€}E_žâÊàÜw¨»;•ì¢RþK ¾È'/mW.Ö0Η çZù(‰)#¨]š€s‡ºå“; Ñ€FÓ„žÛáúðœ÷cM{"ç|QìZÀë‹/¾z!@Ò¤'žkôúì›i Y\Û]¦=øãh¨ë&«$4£æ–œ>+ôä_írÏа:¹SžÌÚ÷êP6å‡YÚ6u’ù‘®ð•·÷ï¿1j|ìüßùïÆÃ=D/Ný±úõdže¤kJÇFv¸Î81fºöìú¿ë¿ñ±ößÚì ëËÚÿÇ‚Þ\ûý¿õÿbK¬ÿ?FÕåó³ø÷tÄï¢ÿÿô½Ÿÿä5à# ÔØ´XÊ4\Z,€*×38bT Òвyy”x,6Òî 0Ç;u÷²Î{]Þuv p@&†,^‰/‡\ #4úîÈ 3}9¨¼=››`Ç“EŒø1œ½—JÐÎZ¥GÂWyò¡¯œáy¥§àü‘†—_ç½´Ý5™C;ù¯^ èöæ¼Kß4È×ñÝý%ÝàÓ¾°Ç*ôox }ú[|Z™¼ÓJìŒgÚìú·/¦G‹_v¡Íã•ùg€«/öþïýßù¿óÿhÐÕÿg.й«ÿwýßõÿ<ƒÍpÙæÇÚkÿ­ý¿öôÀè†õÿÖÿ3Öÿ_ÿ¿öÂ?$þóôýŸýäu‹#y÷Óœ3H1œyÐÑ÷9è´C DŠØñÕW_…ÐiNh:‚_@ z×wòæQ=!õOZ<»%×/û¯òØÛ¯Ž,s­²xìïåËWtP&ïŸÙð¡DÃgâcdÇ!SÿðW§E7ñУL“&Qž´ôÉÄÚ]:4M?®Õ‡vdÔ'IÇcNî/Y?ÛãæU“áqE¡¼ÉîßÃ: ¤I#ó¤ô²è¤uQùMFxá×´Ê›„ù“²C'ÈÛû¿÷çÿÎÿÕÿ«ÿwýßõí¿±‰Öþ;?ô®ýŸ±ð°•Ùökÿ¯ÿWßiý¿õÿ­ëÿ?ð¸lBþò÷Äæ+„òšÒj`(1z`ŠLz*žs€A.ÎÀ ȼ²£©×a6ôøPÁˆ2;“Ä€dæúy7–4¹êP¶`OÞiu/+õOÁ¼Ø˜“G \óØ_ÊMùòrµó¼³OÅÑ©‹Ìú€œ'ù½>qýñ‹yéûü+žÚ‚rxvg™Ý^B¯ÑÕø Ø]…tòKF–é#y‘Äû½öÌW]k»€îWC¯:eñ#Kòð]§îɯ¬hIØë½ÿ{ÿã§GÆÖ5GœÏ`Ùù¿ó?:…òXý¿úß:bíÚõ×ÿµÿží½µÿb\ƾd;°3c›®ý}¹öÿúæ…9±þßúÿëÿ?cBÿ£øO¬:«¾pb‘)Qð'`ϤË:‰ðR–órÀ«oçEã~¥eĈ31<”-€äeìö ”rgiÊ*§Y ®+«ëÒ#y£ ìÒÒxå Då—ã Ðy9#ŸÐJx0ÄÅy¯ÖÒ‘y*JñÔ[€}h&½‹tÀ©K~}ê_eïKÑÕ…/` ß\_<¼°ÝN,ýîOtUtø´½é×Ó6’Kšü<÷zÉZp.;ÍÔ‡^çØû¿÷ÿ_ÆÅÎÿ€ÏäØù?ã‚îVÿ¯þÏ8°Î\sc×ÿ]ÿ×þ; ÍÚkÿÓ‹Ç'YûßZ¡/Öÿÿìú(Úúëÿó+Öÿ?Äù±çàü'£3 däzþ™( ŠÝO}”//]JºÀŽ—¦¿úäU¥Uà@KÀ•9ÿøé<‚‡šs^žÊr—\ âž'áú¨!£x*Lª²ÝÅ•„a1¥ïÏ’O>å€U¯É§¬÷N‘É»±Ð4BþC'ß9¹Ú.i®#“ôÙ †·üæõ—†Ž÷uÝôMÛ'ÖjÀ`¾Ô?iå¡wð-ð¥Lû+uÍ5Úü½žÄ\OÚ#”æ–¶÷ï¿q¼óçÿêÿó# }¹úv\]땾Øõ×ÿÌ‹µÿöÙÚkÿ³±×þ¿vÖ¤/Öÿ«Æ7[ÿïì^×9.”M‘cý%ü7þjR'}ÊF×òm§œûŒ_~Ñ8YÿÿwÓÿúÑ_þék€0¤»‘: ëÃX‡F d `2×”`Ey|;@3°¦®Æòî´ãMÜû›ò•wù;r€ Ô¿H}®åùUÐÉ‹©Èá]T«{À‹Ì婽ÝePãœhÈ,˜8m›kôÀ&uÜe/ϦSZSQú'üÒçqH4ùõnb¼ä»ãùk»Ö¦-&¦ é¿2Bò“~€ÇäϵÇ5ÕŒld¼êp½÷￱¼ó?Ú$únçÿѱôËêÿ£_WÿŸùaÍØõ×ã`í¿c­ý·öÿÚÿDZN®ÿ7X|¶³f®ÿw6{ð5ùÄõ9õ‘Ð8×µ´¦7–¯|ýêôîЭÿm`™þ±ñä÷Åÿ€u¦˜¡1i#óøZ*Ù-•GÙ&¿ƒÏ» <·ëÚ."!`ÉÅ }˜~õ®“ðTê LáùÓA*~Ð^™Ís©\ŽÈvÀéq¶€=Û»¿› „ÊšO?ûô£/¿üòñ«1:“©Î ŽN4éÊ{¬o$Ì×þðz7ÀÝ£Ž)?=®ÉR_Î'+õã©ÌÓÇg±Gãš²Tã¨O¾ºu©/&æú’GèQÒ‡Qº•칞|õ º»²&¾Òä…ÞÉöþïýßù¿óõÿ1´Vÿïú¿ëÿùxmÁ®Xûoí¿µÿŸ;û²åÙ×'æÊÚÿó:”ñY¬£|ôÏúÇïºÆÌú™2glÌ©1ò+'ë‘wŸ[›Xÿÿ÷Ùÿúgþƒ× ƒòþ¡1ÛÁ¥?Í£~À“)vyß’G(%¿Àp:Ñcè ¾F&gó£¼fâÞöÔ™‘ÚÒ¬÷s× @apøÌiw x¦”Lá?éyÜñ’àcKï矋üøÇ@ší&wÃé‡d½þdV¿´uèÕ7Ì2µOÉÒ~yðäßë`…ÇI×)Ù 6tdTOÁªÐñQ®ý”þ¼*’ŽWÊ^÷H–¾³Û†üxUÖðØûŸþØû¿óÿšF2vþ¯þ§OWÿïú¿ëÿÚtAm°µÿÖþc<öxmêµÿ×ÿ[ÿïàõQ×ÿ_ÿ6á^Ìa¼­Á(Œ‘Žþ×ý¼þ˜¸øÏÓ÷ö“ט8Rx€•ëþOÓ!}xÑ¢kÛ?•ÓäÀOû…îsN~å•hh¤›a5,/ô•µmF l˜ §‘ƒ,=Nâ%ûÞÿ½ÿ;ÿwþßtØêÿÕÿÖ’]ÿÏzmÝõí¿µÿÖþN\ûý¿õÿþ-¿týÿƒÔßæ»¯ÿ6ëücà?O?üÅŸ¼`ríºjgKs.0bmƒîDœˆgòÖÉAï±BŸ [öÑ«W¯N¹¡ÁçC~[†}êž²âÖÆÅ”+@óÈ›ù’’)W¤ù…¡|¥šµPÊ/¾ø" –ºZ”ÈÛ¶‹Õgrö½ÍØÔú&¦É«<ä÷5ÃN#TÀ¤‰Qá9ý9'y©|'¾²úYh=m‘ë÷ú1TÏÆ5žBË_Ùé“{9|ôåÙ]W®Ép§G·÷ïÿÎÿóÞ?sıóõÿc½™ñ°ú×ÿ®ŸY‹gLìú¿ößÚØ­cOžù±öÿÚÿÇ÷ãoÔ'‰_âbô'¦þt×C²þ_úGÿeNM§¬ÿgdœÍ ëÿLäîϳQ„̳9—÷Ûêÿ?}ï/~ü:@Ï Ì(Тa}וƺöN)çvVµ# ØfL"ù÷£fAOþ¥šÐ¸&‡ØWíø²#,uà£ð'í0 8ä%òû5òêqc¾™ÝV¯^¾zLì—/Ï.1|ü¢*¸©ß¹ÝYøsž0qåïtSTG®‡P¬Ü»·g÷YÚxñÀ7²µ¿ô£x•kC£ñDcgØ£þICSúðÐgC§ŒºÄÒÕEÑ÷<×W]èº+KzÛ…¯ëðšsÁùÞÿéˆ[?íýßù¿óõ?]¹úÿ¬Y‹fÍØõ×ÿó§¶O批2‡ÀÎXûïììÔµçÖþ[ûŸÉæ^ûý?kêúëÿgѽàÇÑõÿ†R[bÏžþä¯ÿõk  (å…ígò `u5FÐL¡\OÏìPFùo„!]œ›¦LÓ(}‡SÓÅøe‹~8yû(²á-ÐÊõ‘A×M÷E@ –6”ÝR#D£=n~_‚Žow\Éo•ý·ïÎn*¢hP­€^všá|Ò.4øHKù9·ë ˜EÖôé´QYõX¬€ Ât@IDAT‚<Ÿž“KH¹öÁfÚ `S^x÷@ï<ýì\¤ âö›ó€gÃïÿ{öþïüïœÙù ý`~Ð_´ =â|õÿêcC0>Ì›¬AsÞ´®­?“¾ëÿ®ÿ,”Ž 1}²öß±×þ[ûŸî\ûý?>o|¶õÿÖÿ_ÿÿacšOßÿùO_S” ˆ*®?ùä“€-ˆØ žÎ{;ÌðCT¾C(˜³u^\,ýL9¶mR8CŒ^Fðà¹ÞÇÃàL–ñ¡óÖW¹ÊúRfÈH€é­# ´UYíð+àMyá­¼¶E?ÜëS—t|r;“<ï iùÄ€v&’HûÕì0 à5uõ=a®cüe^@ëä—gúÀ«Ãû|˜*ãhÈõu‘¾ø 4²S×Õ¯{ÿ”œûÒ¾Þû¿óçÿ™ÕÑ?«ÿWÿ[×­a×Úä\Øõÿì†~¬Ù»þ¯ýwÍ1¶2GÌ•µÿØóéŽü©m¾öÿÚÿl.ú³ïcŽÿbî\~ Ÿ¥ëMí’ÇH’7Gʬÿ—nI_ÌY|Býx ëÿ­ÿßññÛêÿ?ýøßýËׄ·xx$Bà¨PéyW® þ– Ýìx¢t »„ÐØ •÷b]“'I%s|àÏð{€9ŒãÙݤ¾CW]z÷teòø #aèüûÎ<âêN(Fµ6Tûúë¯ch·=ââQž#š42©ß!x Ñ#ï¾=;ªš/O; >¹–Wáyµ¡m¦d{íÔùÜŸx•GN.~äðëä‹Ù ÜÒn;ÏÒŸ”‘ÖöáQžw~=Ç·÷qïÿ,žÓ1½w{ÿwþïü_ýOW®þ? •µÞúfM麱ëÿ®ÿì¼µÿžm·Úkÿ­ý_}ÉæmÎ^g£¯ýŸÍúgý¿³žÖWÓ' Î×ÿ;½A¯ê‹Ž™õÿŸ7¯tÌDÇL?5tLõºt®õeí¸ßFÿÿéGù§¯Û0 ic¥®5°iU24S¨ùÞÅxÉn¦‹šn9W6åçBÇõPgwglºLY“u¾¨ Z±|±g‚‹Ìw K/%­ àJz¸i‡a¯€PŸ~òiºÊøk~1Í{´†§:§lh&Æ_ýÍÓ7ÒºíýÍÛ7§îƒbxµýrà†ÿT’zúb÷{hñ—æ~ä1Æémê¶R¼Ãchs>1úð¾Î'J¸§9/ïæ“¯4{ÿ÷þ?æñŒaçÿÎ:fõÿÑ «ÿ}°ëÿ|™x®ÿ³›}í¿÷‚Y;×þcç®ý¿öÿúY(ØÓ—oßm®×ÿ[ÿß:Áÿ¦'êË×G_ÿÿ7ã?OßÿÙO^F<¨ó „8éÂËPt¢ SMò*M‡£Ññò88oû¨ÛÐ$\‘óÞ(´‚Gý^|ü"“˜ 4äŠ ®çOò’¥%Ýú8eä ê/oíªldõ«‡£2YY慠ìÚ6i5ÄÊ  Jºó~eQyGœ{ØÈPÞdécÊäþbô§Ì€Z—Üm‹ÝchaNÕ«~ŠÎ î] SÛØÏ€•´Ö~hnýÖ<±¶‘aïÿÞÿÿ;ÿéz…N è Çêÿ£SWÿïú¿ëÿÚôäÚÇ®\ûíþO}¬øPëÿ=ü·õÿÖÿÏÿ^ÿÿG[ùûà?ß^¯¼¤|Êí%ç:^Zo@+t-äzN«¼º ôòê“WáSø4à/ˆ•E”á85ýÅ|)ðÓO?Í.­!˜ÿhª v š<;¶äW‘âQ°­/v'`HyåÔ­í®ÑÞ!çÒäµ¾¶Y¹{Ç_PwéÛ<ÚxRfyFûê‹ö[ûè”?»Ïb(“yÚ÷ÝiŸþQ÷±X˜¼ãä;> MÇß¹r­sïÿÞãeçÿ3 ¼óõÿêÿ]ÿ»žÓÖKÁú)]¶ëÿÚÆÂÚcŸ_¯ Yûÿø1kÿ_ÃÜp4ÔG¯ÿwüëgý±þŸq±þÿy¥cýÿ¿ÿyúñ_ýÙë±ÊòŽ øb2ÙùT.ñõ^ªrÍSVšA§Üéðç_ï)-iÌ? [èæZÀƒó¢õ*8ù©cHÈ‚FšCV€HÙ‡³ig^“—Gù·ïæ+…“ÿêz1=>h”0¡éµÝLq^&O#±÷dåú#Až:ãã^UHäë¯T´!L?´ʵþ¶Õ— «À”º¦(yóh¤w|Í?mR¾r8¿d)F&@ŸÊ¥kOò‡'™¼ãE=äÚû?ý¿÷?cÐ8̱óçÿ¥'雎 ºƒ¡wVÿŸµgõÿ®ÿ»þû‚® X|kÿ­ý—ubƃ` YûíÿõÿÎzi>˜ëÿ~˜ÿ|Ñö‰~ê7;_ÿýÿ§ÿãÿúÞk_ôî(‚ã>GÞ±”C3©c`Ž` Y†n΋Af;Ú>e˜/Ýý”8eº3 ­ ¨b˜¶ló+dsH‹œ—3¥z±Á.?çC[³© 2¤>œ§òóˆ^ ­«=•O¾t× /§OS—ÇùžÎã}®Fªæ]d»v¥þ‘ó,ß3§¯zAæ„«h…¶«×“Í#—ø']™«úm8Œ×{»Ðk?™»Ø´gïÿÞÿÿçeåæŽ9´ó¾$kÇè¥SéŽÕÿ«ÿ­]?výßõŸ­H_ÒâµÿÖþ3èkÇÚÿ㛬ý¿þßõz™ùýÌqA3  ‰CþÃJãmdÈùÅ´pû+õMY;Ú¼¿*ý<´díµíº2¥~2̦‡º[–\ò•'š–»ß«òÀòÊ|;±2“¾÷ÿôkŸø’åÞ;ývþïü_ý¿úÿ¬”»þŸGwý;jí¿ØŠkÿ­ýƒzþĦ¿lsiìIkÇÚÿǧYÿoüëü±õÿÎ?ëÿÓ'Äÿ!®ï/^ÿÿüHö!þ“—¸?õetT@މœÛ™Q¥¬‹ul®gŠó'½¯£{òÈÚ-ÐSÁµ\êº&¯B@•ÉÌ¢4sÞW“Ýawº7óÈ_ÞÛ4çU¡ ÈN+çÞ‡•ó)(ëׇÍ#dp ð%ÿ«/¿|nËPàAN4iߤ‰¥·æ"×úG¨Àº{9í€WÒÛVñlBÓ¾K_I^Mÿý¢ÎÊÓºZﻑE@+´üO;켺2S~iÇÞÿtËÞÿó…ÿ;ÿWÿŸµ­úvõÿ®ÿ»þû¥|í¿µÿÖþ_ûÖÇñS¾HýõÿNŸèaý¿³^Äלqžâ§NñÑëß6F¡÷ëÿ¯ÿ?Êå¿Áž~ð‹?y /@TqhEüêêº;¡ (ÊJº'¯@Š ›Á9£½GÔ䕯sTñKÙ)# Q^\~Œ„Ès•^õ½UÐ8Ê3~òSÖΨ ê¶û*r_ü“æ*ó«ÙÖéÓ×xzaü_~ñѧŸ|zÊ^ò˜D”`çRy’¯¡îÑöf\1¼Ë/1ê¢Üµ)»Ãn´x†ïÈ{zÄÄ=Û,ñZ¯Ø=ûú›¯³¥?×ÚØ6‹ˆŽåáZß«Ÿ½ÿ{ÿwþïü§Çè‘èÛÑ«ÿÏÄÕÿ»þ[3wý¿Ôé vÃÚFÅqÂØVkÿ\×þ?ã¢×þ_ÿoý¿cWZ7Öÿ_ÿÿ ÿyúé_ÿ«×^¢g`ÅaÇ%ï{âÀŒt$xtAëŸrN ö$oòñ@¹¶¸·çY æ:ÏÀË” ÐsÕ#ý‹/¾˜/¼Œ_õÕûõ½ú¦²¼ß ?å[·XÐé݉„/Z‡PÐ/È/îÚ&@ZíK=³ L´”Ñf‡Ðv÷\ä¼÷gˆ®?§ßuýé;<¼Òg/FÖÜšù3|ÚF4•òBÞ/vµ#òHžf½|õrÜû¿÷çÿÎÿÑutát"±úõÿ,"Ysvý·’žW XWwý_ûoí¿µÿ×þ¿Þ:ºÑ=úñþßúõ•ëŸõƒë§²»ãÓ^ñúÿµ»×ÿÿÛðŸ§ñoüÚ@  3€G—d®)£ó庴 ó(š—óA@ Ë“z€’)W°FÜó‚/)s-M£«Òc Jëµú|F’3åq–?ú£?JüfÎ_½z•ôòm}S›;¢¦—ïùSÚ¢­‚ÉöË_þ2±RPÂòRG•³óNDqûCyuá'N™qý* §_ÀR:yýò£t|Û7øÇ™¼úª|ÉGΖW¬B S¯ö:É«lbà•ò{ÿ÷þo;ÿwþÓ=«ÿWÿïú¿ëÿÚÇ–ŒÍ5öÒÝî“¶ößÚÿkÿ¯ÿG¬ÿ·þ|êõÿƒ1è‹àãW æH¾¦PŒÃ:êhZ¯ÿ6üçéGówÄCò‹Ò@&cƒ¼ÒøÂžÇó¼äZZÞ!¡#tŸ_ïƒWé•i=ýbŸ|€ŒçÊ‘ È£>õ¶>tyAù¤Õ£“Žo:n +Ÿ0yÀ:¾xùâ£W/_å­r9†¯ .åÛÆ‚GºÝ" iÚîŸ]VÊ ú«rDÖÉKÿ ½úPÙã0<Ê…Ã%ǽøzß•4ÎfÚxMyÚÒ:ÚGhŽ1J‡&m›4<œïýßûßy¹óç?="Ð Õ«ÿWÿïúlœ]ÿ×þ‹n¹ößÚÿkÿ¯ÿÇNZÿoýÿõÿÿiðŸ§Î;°€+¶Ã[Œb `€B1KwÄÁ5IYC7ò¾–U]•9Þw@ èòñPòíþ1á9ËùÅÒÔ© ¨²LR¶£Š²M¹Òµ.<*+ÚìÐ:ïœ:PÒÃì蚊𣽗¼äa”þ—ÿò_>zõÉ'6Û Ðjx’‰Ìú,νX^何®¶É«¬•­O§¢KÿÎuø __:óyLõÊ´\Ûyæ\Ðæ–/ †¯:ÈÔ>éç¬íÆR¿ÔuÝ·÷êž{ÿÏxÜû¿óçÿêÿÕÿ»þ[/»þ¯ý·ößÚÿ|“ØÐcS¯ý¿þßúëÿ¯ÿÿ¿ÿ™GôÚâ øä܃›CaìW€H:¦ïpBS>蜎ºÃÊ( R&ýE›]Oð#¨caP‡@&A9²äübJßE^dšm•‹¸ Nå“ÀL›'ß,`Py}öùg1ZÉáÀÝÛ­-ŒZ@¹ß¾;_l<õ=?¾7¥žÈwš‘º*£|­4‘-»¤†¿óOHËû«†"|'Í—eøI#ZàK±€hÊ\<õ5ZmëFß~Ùûúï†IƉ1f|4ÜçÁ ¢ÿ;ÿ34Œ‘ê ÎWÿ¾92iõÿŒ‡]ÿÇfÚõ?ký°ößù”~XûoíÿÚêkÿ¯ÿÇW[ÿoýÿõÿÿûøO,‡ á°ܸœ“(!>Áu‡q~½¼ÜóŠþ=ò‡_»{ ø8)øÂˆ±åòí›óN+ôv#yÌ ­ƒ±ƒg ^ðÂáÈàâ¢=§§œ²‚²xô<'WzÚ=/2¯a‰®ï…úæÍ7²•ƒ¼‚r@+í çÑFéÙ¡6ûÔÿë‘õѧڴӇν÷Jè;ª¤i§ÅLÈî5tSðàQï¤éWuKoŸë<¤‹Óî‰Ã÷ŠÃãÛ÷e—¶÷ÿ8Þ{ÿgܓ׼Ë@œ±#tœ‰gPI˜ñz¯ÿÑ;ÿ~3^è•Õÿךºú?ëݱëÿ±vý_ûž\ûoíÿÀ˜lôµÿ×ÿ[ÿïá³ÖYÿýÿ¬•7üçéOÿïÿó5pããùª]ß„HZ€‰Ñ9ª5Iqb'  E¹¤â„Éë¹/Ý)ðáÐWìZÊ4ã-ãe :>~:J{7@K¼éaªv²xÔNp9‡®ÁµzÅ‘yœj<…ÐN,ß!Ÿ,ïÞž]_vVI³“Iè£Ê®¤Ë¯œÝñ„¶<É›ó)i¤ÔfåJ×òóë5ùv¡}nÍy Rý@ª¯¿þ:u—WÛ£ž>ˆŸ|ôéˉɃ6òLìH£L@7ü÷þç=iúnïÿó\1fwþïü7/Vÿ¯þ>˜±àŸ5e×ÿóãÕ®ÿg7¸~H¸ì çkÿ­ýgýXûÿø kÿ¯ÿg ¬ÿ÷EüÏ1%bKt^¬ÿ–Pá$ëÿŸþøMøÏÓOÿú_¿¶¸ä0ˆâ¬Œ"twôÆ«ÿChäøÊ,¨"î9Ú*CÏà €2 Kõ¥ž!ÌÍëÛ‚ì&Èu”é¿óN—¬$FçÀ32•œZN~ƒzÛ ÐdדvU. ¯@ò‹)y„Ô#¾ÚZùÚÆÖ«öž+çÜ¡ü›·oKoÀ‡¬Up}DP,½÷Dù´ ê«7ß̋蔶IwPnòïu*°¢(Ò†KeÔ¶|[WúòpïÿÞÿÿ;ÿGQ¬þ¸úÿ¬¯–‡®âžïú¿ë?;¢ïãdsø1mí¿µÿè öfì̵ÿuGlpºsíÿõÿø¿ëÿ­ÿOG®ÿ68Ým˧ïÿì'¯‚GòNäê,,Œ áQh+ÇåèxÿQ£‡Ñzñ(Ê;Q€@hÜ ‹Ð›óâãy„q¾Ð€ ½/ùMýΕ  5u“‰¬_¦|dkL¾ ê펪»L= s£µ…{Eò„êãQƒ\};`™ðÉ#„“F.F:yBã…ìSÿ‘ozô áÝÀ Ó—èœ+ãHýÃW»õžêgð…öâ­LäYÈ#0%¸§§s¡ÊÉÐ)6r º½ÿÓï{ÿwþϼ0÷vþÓ G/Óá Gè¬ê)—=/] \š·úÿü(°ú×ÿÎ]ÿ×þ£K×þ;ÎÙÚÿkÿ¯ÿ·þßúÿgÓÎúÿ;þóô½Ÿÿô5ƒ*J-«‰ï†¶¶ȸ1‡Š/“wß<ïfŠssñBÄyQöq õÕW_¸ ³€.èðòh`ÁùÂU[Îñ!'|•ôGþ儆ï-=üx\by猔óN¯ðº´C»¯ó€`#Œò=´Ñášlbõâ›ë‘ëÅÈ*]¹¿üâËì“Fù ©søàí»ÅÐRF'_ å,XR?³«¨²œÊúK&éêl["㤉C7í ¡±“I½vWÙs¿óuÂýáþáGÿù?ÿçþèþ(rvr¨/õxù<çe²›…üÒ3±ª›(ˆ£„+_ß%Ö¶¼9ðh;Sç}yyý´Ñ.1»ÌÄò‚6Ù¦Êá}vc¥½.&¨W»¤Ù•E>¡åW¦½ÿ{ÿ; açÿÙÝhþ;ÿÏî" gõÿêk‡c×ÿ]ÿ×þ[ûoíÿµÿÙIüŒõÿŽï©?Öÿ›Í ãß²ÖÿŸùq½K¼þÖúÿ;þóôƒÙE±D '¡ìãoŒQ;¤â¬ÍËÇÅÀš:³i”ý~À¬ašúÙgŸÍËØÏWñÐÛyUK]u[·A÷#LåO¾‚9êr(—²WÜòh嫜sùm£sm"GÁ+<…ÖÕ6¡þàþ ; ì‚Ò&±Ï\Š`þ|ç2çøà . häÀÒi¾3 RånýÀ<ùßÉD¢Ô+ xÕÇ Ý3åÞ `¨LîÙ%>xËäU–ÖÕ¾‘¿÷ÿ8'údïÿÎs}çÿêÿÕÿ»þïú¿ößÚg‡%2ö÷Úÿkÿ¯5Î Gjý¿ñ¿þÕÍçZÿïö”“±2!úcâõÿφþúúÿg}Ñ¿ ÿyúá/þä5pÁcÍDŒ ç„€Ϫ›€Ê´¬X:±’®=r7Ò}çQÀÌ'(çhÝÙñƒ×ìf*°¤žl±zü…{ýÊVçêw-Dþkq}¯òO¾©ƒ§z•I]—ÒQ¾e𬬠מ£ï»¼Ði¿kùåÛÇô©/â£ô šÖ©ß´ßc;Û6i„Woéb z¬GžþÊn°« m‡:*û=–ŽlÜûÆYûmïÿaõÃÎÿÿwý[bl¬þ??­þßõ×ÿµÿÖþ[ûíÿõÿØH±™ÆäS¬ÿWóá‹Ö÷\ÿÿ`ëÿÿá?Oßû‹¿6±L*Á¹ÇÊ€4UÀIœ›ˆŒ/^ÎK8,éà‡ äJ?²D1€ÉõœÚ” O1`ÿ'Ê •C Œkí«O^åÚyDŸ„KQ´m'±YÏíÂ#ïÙ¤ èËÓ9ÇìÞFyú@º@T€ÑË/ïôÊn+|'¤_®~s§Cúôfâœt¡€Ÿ¶´ÏÕ§ý½+WdR~@«ád ç§Ÿ~p«Û¸ñÆCž{ÜëÖ+oïÿÞÿÿÏ;è¯+•YÝähÛõPNŒ·yL0ò͵B þ‰¥ã jòÕÓ´ÖwÊÜ€±)ƒFß Q¾2JïËç_¾:àšúê—':òJ—_ùìýßû ½{cgçÿÙ}©/vþ¯þ¯¾^ý¿ëÿ®ÿÇžÒÂÚkÿ­ý¿öÿúëÿñ+ï6’'‡Öÿ_ÿîðwÅžþøßþè5ÆŽ Ï[Ü`t˜Äæ¤Zæ?](P”ô¤ H~Aæ•–ƒÇ˜‘€dÊ¡÷ÉLBÛ%0tì^ÂÙÑt¶§ax„žøKw´^éM ³áL¤^Aœ4és¨çÊx´÷$<—ÁÿCPI_I×o¯²óI;È ðú8`•— ‘cª”öxi™¦Ò:ÁGž¡™—ºµ}ÒÈ›—¯‡àôŸ:µ ;×ÚN´ê· »ÜÞ¼}“ûHööº½ÿÓs®‘põîÞÿöGæÉ Pã]0v…¤çìôU硸y¥Ýù?¸ó?úÕÿޝþßõß|˜qPk1Úõí¿µÿÎGŒØßlÛµÿÏ“(]?×þ_ÿoý¿ç§¦êך|:~ߺ~±8iÒç@“0qý“ð\Æš¼þÿÿžþ_v`¹an¬›ÌàTX(ê„Ö¨êÍwÝóã§yÁ{”Æøpdñî|Oú<®3ÿÔ/0äìøxó͛ȃF=­ ȺI/ï\\@›ðú:f˧àüAƒ‹¯fÕ±DÓà\½åW™¥WÎÒz—•D*½>êcXåk§šöŸÅ'm¸ímä8²¤®¹Ö•S]•§“S9ýÒ´òLãóX`dŸw‹½7É1›¼½ÿ§3®þØûͳ³‚1bÜul9oZãÿGÿìü?¿(7Õm«ÿWÿw<ˆÍ‘]ÿÏz#ô¨õzþè¢ckÌõ®ÿkÿ­ýwìµÿ×þ§}½z3׳žÔÿ¢C×ÿ;ïWÖžŠ²¶x·ôúgþ¬ÿoÖœ±ñ[èÿ ùü¨…pv½J\àH+{ ªüj>Õh%"[úâÒ$\i=Ç›‚QÆKÊÄì´o¾þ& ™ÇÜ>¯ú…ÛüùüóÏ3áÂ?´èA]Çø5)Ÿk@R+T þwÀ¨r$Æ'Ç´ÿ¢;×ÏmRoÔm' ªï”¢ ìhô‹€OËj¯~ ˜w9ühäÛuFÞ*”¤¡Ap èòn«I;=}2•k;#û$‹œ·^òZøýª+½2·ï”Ùûß1qî_ï¡xïÿUÆòÎÿÿÆAtΥ댎Õÿ«ÿwýßõ?6ÇY.w¯ýw~ðÑkÿ­ý¿öÿø*óý¿ó$ÑúëÿÏüY8×ÿÔ®qúnüçóB‡_Ç=º°ÉNž!.¸¡Sã°L¡<Þ§_‡ 0E^‡¦×unîŽNéìÒøÎ¼ * üÚ!á†YÎ/,g±Ï#s×ÐxBÕ|C‘¯òMÆKãKS2(𸎇ŒÊ\^Ðú[[ÈQzçèÔ). £LŽo`‡kŽ>éxÈóKªs4úÚî-1šð¾ñQö!땯®öÅŠ,-[9”éQ¹Ô™¾þò”!{½ÿ¾ÖúK9œëǽÿ;ÿ3GgL;ÿWÿ¯þßõŸ.è:kmÝõÿØjÖεÿÖþ«ežkÿ¯ý¿þßúëÿ¯ÿÃc䀌¯ýwÁò,ÆFv3 ¿šm†ÒÆ£8ñuÞ-FÙõ4”2uô™±Cº[ç ï/dSbþg'Öä#<ú€-'Ž™|“ú¼Û È%ä¾¹æ^ÀIgL9²8È È\kƒ+±P:u$›Ì{{þ }:}èj¬Š92büô•óö޽ƣý6Ä¡ýÄ®³›<Îñà W¦|…aèC7qA4² Òµµ×íëÈ“û9÷áªM Kü]“iïÿÞciçÿó3õ;ÿˆ»úõ¿uÂz²ëÿ]¬¹lñ®ÿkÿkÿ^_ÐæGCmÒs=Vñü_ûÿÛÖþ_ÿÏ|Ìçëÿ¿öèŠ¨Šø¯Õ!ëÿƒŽŒ™ßGÿÿéû?ûÉk…æF|]L÷Ô`5™tÚ“°ÒGì<¾'xƶƒ, ן‚6x¦³çk„ùºðIeg={¯,p%õ]äíÑ¿ÊZžÚpÒsLbï•kåÀ˽ñaê˜k»éÐ i»2sìý?îÞÿã°vL7/w îüßùo\ø'¬þ_ýŸµèZW2(æÏ®ÿÇžÚõí¿µÿÆ~Xû?6ÔÚÿëÿ­ÿ7Âúÿñ××ÿ?X»±Xs¡xƹ:Ÿ¾7–N{d^ F;²éq\ë°øÆYq>´þ͉¿¹ˆ8áÔ\|)iç&ª2xö:ü/^D*ø$? ÊÅ7õ#¸B¯÷ÝÜ(²àkTwgá'Hoývo ­s®Ã*kë÷¢uù»ëeíá;|ÐãE†:pÚ/<®/° Þ¥wcvbAú=´]½‰•__ vd%¾®s1Ð9ú¨bù´Íè8y®vèä£Ô?×@¬Ö×ôðqŸæ_Úæ|èöþïý7&JãaçÿÎÿè¦KÑÕ©«ÿWÿÓ]‹j¸SY_F‡ìúo…¾õÇØú¦ë1]›ü]ÿO?\ý±ö_º#ãdí¿µÿ×þ_ÿ¯¾#ÍÐ5×ùúXÿÿ·ßÿúþ/~úÚ Žɸœ£Æ¤¸Fhâ¦ÎÙ…y޹ô¥•åQ¾^{Þ]ˆ†÷œ›X5^k˜qrCÕ“ï`¬É'~ÎÎåÛs×=+€jº4GùÝu¥þyT°NYœ ÷>(/<„>:  ïᥠٱ5õ+‹÷=´=zC^e­lâ†tõuº9ëc¡rH{ÿ˜>+“‰ïy(×d&«àzþ<îgÓîm'oÂÞÿG¿ïýwÆÊÎÿÿ«ÿWÿg}±öíú¿ëÿ ±SØ(s¾öß±gõÆÚÇŽŽý½öæIlñciW‹m>áØìÇÞZûÿô ½rﯞ§¯fýYÿï $ýÑcý¿ƒ#¬ÿÿÛïÿ?ýàç?}}Œ 2x”º+„ClÑò4%é,DxÅ‘½4á?4åU`È¢uÏS.»Mì—ØÇ ãU|…òßæ‹$<‘ï’cˆõ£QVý¬ÈQÐɹôLt2Íèén.J1@ÕM€—~Qo¼u(/$eò*ò®²ú3mŸ˜ uË·eRÇÅÇ{ºsmW÷wi ¶¹nþÁ¦öþwìîýž_ÆÈc¬œ3 'mçÿé§ÿ«ÿWÿ[wý§+wý?ú }1c⾆X[…µÿžmRóƱöß±·×þ_ûý¿õÿ²PÜþÔßÉúÿÓ7¿/þÿ“¯Z8Ýõ]$÷AÑó‚%¹€(+ØÜUéñ.?‹’òu¼/% À p3G¯•W¶€ÂpÏyy‰ååÅãÃTÙ€ä™Ð|ÿÅ0¸í¦R®|ZFùÊÚü8¥Ãë|5å<µ{úÍU>è4uDøGÎÉWJ½ŽôÅÄòð)?q¸O^A²{ÊÐ_ùê»ó•W~ʕӚo‹±@–ä ã½ÿg¬îý?ã;äƒ?kIž±3ƒ'vçÿó»åvþ?º¥ºvõÿê#c×ÿ]ÿ­±kÿ­ýg8ØÕ±­¯kö…µC^lÖ¹vÞµDìzíÿµÿ9@ÆN}9c§ãcý¿kþ°Ó'd.ÍùúÇFí˜1~j«VÏ<|ûÙEnÈ%_yåòº÷a5Ëž~öþïý€})câ>†îçÉ›?h\ÏõÎÿ£×:wwþ>šqA÷ÐyÕ{Õ“«ÿ©íÑ«ÿkVÇÈ®ÿG»îúÿ>ÀSÝÚØZ´ößÚÆ}::U`³Ð'kÿ¿?‡Öþ_ÿ/¾èúÑëÿÿvûÿóÜgt”þüÏÀ¾€é u`Å=äY0 Lò_Ÿ„a‘w, 0 ÜÒÇáê¼¼øøÅ@o“?ŒCÓ…?òÜãÊ9Õ=ÿ¾«—Ž<§ ³óiÒ[tFqy“Åî(é¹~I %ÍKîý¼mÛÜz*Z­õØeƒ4õ†Ï€avoe+¬çû'OݧÌUÿ…ê–'>÷zNo^ܯú0ÁëZ^zúàŠõQiÕ-4?òL¿ïý‘±±÷À¨ÿ;ÿÿÝR=x×5«ÿWÿÏ‚’ue×ÿ³.ïú€¥µÿÖþcc®ý??²¯ý¿þßÌ…õÿŽÌ`Xÿtãúÿ/üçé{ñã×@œÀNiw§Å9Ú»ƒ= ¤˹>€zÀ•­vÎC5€R€”Oðcô‰å9ä)c‡ïÖ_hÕ9ô4zÁB©œC?Ê·¿ðÞóì¸R.Ÿ1]<ò*Úsíëy*»êk½¯^½:üHC$Sïy[7™œ·œz݃\O¹s2íÈ#šsu剕ëÆCøþß´÷ª³/GA29ð7ìý·“pïÇCÇiãŽùwæÍÎÿ£oô‹¾Úù¿ú?ëÉêÿ]ÿg}Ýõí¿µÿÖþã vSí©µÿ×ÿ3j7òëÖÿ[ÿ?ã¡~ùŒõÿ3þóô/ÀÒYy”!ލ_ÏÎc}Üï>=?ÞÆ —Vå«Üwçúí€<}Jƒ6ïšÇ$ð”kâ>b˜]Rè¯O¡udwÔ¸ÇJå6ò x9¯¼&¾t×êF«Lƒ:Ò¦+MYùåáüé»×W‡Öµ2BËŠÑ;í³‹ìž¦9^ ð%]€!^Bù¡o_Kwí{ùâe•”l P«aïÿ_{ÿwþgÎ]óι ¦;Ä÷¹¾óõÿêÿ]ÿï:a×ÿµÿÖþ[ûíÿõÿÖÿ›yýÿõÿÿ‘ðŸ¼ÄSöx îf l|;À°ãã9<.ÒT€+†š4ŽÝhšküä‰ß¾9r]7Y,òÊNF¯æ‰•w@õµ4>5ïçhÁJè䓵r´î– ÿç«<òzMºk‡kéÆÔÔ³#L}üôqÚF¢Ô[ÚiÇ7_\€¬—/_DÐÊFúfê©|+whn²ÛMÿL™÷Ú04ʶÝbí §?ÿÚ¦:å{ÿ÷þgxO·°óçÿêÿÕÿ»þŸƨÆ]ÿǾ[û/«äÚkÿ¯ý¿þ?jý¿Ûf’ñ;ùšëÿcýÿ)`W€EüCà?OßÿùO_Ô¸(ë©ìþÞª€W3094h fÝ…rî=:àJã)Ê`A+½Až Ìr£•£ÑÊ:J›ó§×â‚7ν@½ihKW>Ÿ;òs>ˆñÇó~®¦£ðe¼Ô€Fvµ.7C(ÿ{»¤»¦äÄø6¿mi¹ÊõaÞ7þ®åü"§>  ÀVÞòÈ Ÿ¬‡ŒòÉSn <ÊTž½ÿg¼êC}µ÷çÿÎÿÕÿ«ÿwýßõÿ¼ÂÚ(°k„µÿÞ·kõ Ûaí¿c‹×îl¿ˆ…Úœkÿ;\?õHÿÜúȵ°öÿs?´?î>ÍúÇ7\ÿïà sÍ­õÿ»ýÿè†Ô¤ÝózŽ NìK%*tN1ù½ûÊ;°*߇u ó‘€—²Ž&À_ø\më#~òßÌn(¼ñý8‰ù›ô{ßßùP‘«õy|ÒýkŒCëo_µ*gëOÛF&Ò(ïzïÿÞãÊßÇ ´ÿGÇìü_ý¿ú×km×Õ®Ç~øéúKgîú¿öŸqb|¬ý÷ëóä…™ô²5b—®ýŸ~ÑwÛËØ©~™Œäõºvc ªÖþþZŸ:ôÍú×Ü›qµþßúÿ¿þÿÓÿ۽΢1“šRì該¤üjLºóLþk·QŒ´)cð3Кúa…‡sÊB9Dñµ" <çò[gÎçZœGø¦Z¼¤ âÖ'&DåœÌÐhÍÇPVeÞò"ÛÈòîí¼(~èVɦž m—üʪlep¡ÁWÊ“²‹?:NN¾–èÑÄy$³¼•©<•ýô^‹[gË@$6÷=dÓ] å™þ™qû|GøMù¹H¹½ÿ{ÿ;ÖŒ™û82VòUMãiÆvße×y"?ô;ÿÓ;ÿWÿ¯þßõ×ÿµÿìÞ^ûoíÿµÿ×ÿ«O\_®6¶ë{Z¯ÅµÉ›¿þßÁ#âß®ÿÿ{éÿ?}ïg?y µè¤èy'Žk¡ù™h3™€ÎM¢N¬Cɱ§wþ™¤A·Æ™ ¿\\TxLPVïÜcnyç¾³à{7“E?ÀÐEw£R&ò„M@†Œ mOÛ!]Y 6|ûí¼»jè=©œwUù5#4síß= …àKO]2#Ç¡SOÿ¶ múfÊòÓx¥/•Ÿð¡ŒI¼ý‘_špšòJ¶’[xño¿´>ùåÓ¸i÷:š&V¶íŒÌîÓuÈöþŸ~Ýû¿ó¿ó:zdçÿQþ^º®zоq¾úÿY'ë¦öó†»n^ýÏF°ÖŸÞ¡s»ÎYÇÚg¡½3'wýOoÜûå7õUówý?ƒG?¬ý·öÿÚÿkÿ¯ÿwÆ@×ÚõÿÖÿ£ÿ)ðŸ§Ì;° ¼FŒ1€@'ai C/(ç$<LM`ÔÄt1´x¸–Bû¸¾òiÊ_õÔ`¦†’s<<ÊG†Ô;<> M/Mdš6Î=¶Í5Ye„ÖûíQ àÐ_íü„f5ÿ¾ëEòïeäák§Õ» ü’¯\údòÒÀ7Aº_aõ#Ã{.í½ôCzÈ&?Û„ÑhÇ\W&ez®o«,IO;Î/`^Â:•<ú$e§­{ÿÏxßû?ƒgÆÇÎÿÿtÈêÿÕÿ ¬··õ3ë‹ ëѵžd Ûõ×ÿ'ÆGÆÃ56ŒŸ¤ÍYûoí?ª£6kÏÅÂÚÿ§bÈ_§ÓYkÿ·/&^ÿoý?vÇúÿ7¨.ý}ñÿŸ~ø‹?ymÀ€žÆà $&#OIÔðpÍ™A/­Æ‰4†‰`0É·›É¹àMø\å,'´ËªeËðô(‹n®å©¯uµî{ÙÖ%~¤_ò+ŸcòÔ­|l›”” ˆ šëÖU9ä ÂÓµA,OP' HèK¢ÏÕù‹'â[ßé-wYÂç®úÕÄ)œöÉ«“ÑA ÆÛD!êÜ;´NL¡«îôÑU_ÛEf2x9ô©ÝVúµõ¯òØâUWËwr’¡üÅdV¾¹žÌÑ4t•_Ø™| í¼«më@“ .'{ÿý·÷çÿÎÿÑÁ—Žï| ßœ¯þ?à ]JV¯þßõ×ÿµÿ˜Skÿ=ÿk-uTO²¡×þ??Ä[OÛ/µÍ×þ_ÿÏXèaŒ¬ÿÇõ^ÿߺ’ñ0vçúÿÿyúÑ_þék‹nA Å. óûB“¼¡—g’ÉwØé¬q¸V^'£“&_šÀ9R¶u—ùŠ!ˆv%ZO®/á3>Ÿ'·rÒR~Ø9òÕYß @'½4«Ç£•y¿×Ù·?‘SÛ¯þ#‹CgÈs¤ÏGž.€·â©[Ÿ¤Ü-ƒ\äy”>½Ÿí´;uòí?lД]åˆ,{ÿÓÓúdïÿÎÿÿ«ÿWÿïú¿ëÿÚkÿ­ýÏ8\ûŸ7·þé¼ßyý?ãaý½ðøü‡õÿ§¦[Š3¤O`WøÕ`Kš_‘z'$\©`ß·„™¼$Ècï\RnrS89y„®ï  u’S…Þúîñ£øÔ`…Ðdk]©ò(?lÙÈFæ+<®É¥£ 3`Œàzþœzæø€¶4Îû˜¡´¯¿þ: £„"úä“OP+HDViBë Ðs`YÌ®¾ªlhÝ-øu¾Ôx€ªäüŸŠ¼‚k€Òè¯Ô“54êl;ÊmÒ§DÞ/0u¥ý)µ÷_7ìý¿ÆŽÎ˜ñ1$ÇÎÿón»ÿ«ÿéîÕÿGOPtDÖá]ÿ³~­¬Ç»þÓ>¯PXûïØ—kÿñN`w®ý?ö•ÿì¬+¬ýχ¼Âô Ÿ%6(_E²µ&Ñúëÿñ_×ÿ7_ªWϹ|¸kþT¿ü.úÿO?˜w`ÝAŒG̉Ž:µä Wb´žŽÊDšë_ Ý!žAv袜)ëK ¹.ö¡ Š Ò³]î*SY¤©ObA^ó•Ký“Þ›{\¯Ã³2yŒÑc‚}WLjQcC< P½zõê=+@”v\ò ó˜ h…ÈrÑÄù™|t ݹ!¼h§ÂG[žò}^%N.¼Ñ§=úáªÇµ6´o’?io§}^Zÿa^ë‡vbý·÷ïç”±!ìü±wþWï7^ý¿úÿ¬¸Y»6Yæ<ºdÎQìú¿ëÿÚçGÎ,¬ó‡íņ3Okÿ­ýoH¼ÿãõÚÿëÿQëÿ­ÿÖ‹øì¿‡þÿÇY$lÑ]4-¦€ïÌy|ÅÑI“N¸fy pÌДKªŒNèæôPžGìúKKòåá3´áwód%¤Ý¿ay½s^ÞçôÔp «3™›þÈçÐ&†²ö]€”ÀUë´@üz |g@Ÿ–WÆ×‡ƒÓ€?vc}þùç±P® xá™Gì¦>ÀH~¶Œ£4òg´Êh«]/‘oú[Ðm  71°M›tΦ·×0tKãüW#¯ëÜß)s—1ýsñÛûŸnÝû?cиÈ8œñ"ìüßù¿úÿëü±úÿù‡¢QY·h‰£)výßõÿÝc§MƇ±a™±²ößÚkÿ³¨žƒ¹±öÿóšr÷IFq<Ö•èé¶õÿÖÿ3{Œáî§°A¤¯ÿúæwÑÿúÞ¼Ä= ‹›ÿÝcvÖaÍ€0ä]±4áN“kTé§ÓYwš‚%s º‡¢Îê/MËMóÿy‘ú7÷òw:pï1^º6 ç'5uºâ(gg  °T>/¤2òï¢ûæ›o>úô³Ï·eµZ…Ï€S}Ä<}Ý1 ÕÔñrvfyá}œþ©#ÂF:|2à¦Î2Léùéé‰ á1Ÿ/wÝCZƒ¾#CîóÚiÛÞÿ½ÿÆÈÎÿÿÆQR½ßX¾p§É5mUó¬oJSݾú~´XýÿX›Œ«æ®ÿ»þWGT·Œ‚™ÿkÿ±/Öþ[û”çÚÿ—SûÂü¨¿só†t0Êœp~Äw]ný?ô¾mW»¯ñé»÷iRfí¿õÿÿØÿOßÿÙO^›ô&rˆ~%¯iŒ 4À¡ôUÊhÎõósîÊ{Ù1FŽâ@+½|º4 ÷?SŸ9^¨,ê—×=B*½Ø5°Æ‹ŒÔµGæëWaòñÓ¼h}Ê(›ºÕFFôBû諯¾úèÓO?Í5ú‚^Ç(iú =0«õà‡¾uˆm¹ò&3 ¤·¾Sþô%Ð) Ú´‹lò”¯i[ê˜kq  É¯ œK_œ*:å'n]íü¤•fïÿÞ3ãí7W3FvþÐ{çÿêsD /WÿŸõÃZ"èžÓ»þïú#£ãögÆÆÚkÿulÔ¥3„ÆÕ%÷´µÿ3uÖþ¿ÖšõÿÖÿ[ÿÖ’ßAÿÿñ, ]AÑ.÷Å¡†gVÆyòg=9 œã3¥Éâs'å%M~¯[FYx&þðYy¡Ÿrh¢†â¡Lc<òòÅÃI|\x£ÒÏú÷x±¨vxôÀ&õ “ïH½·>@GÆòžÐ’ Äôñ€_ÒìÀúdvdyq»GõAeS®Ùß};<LRÎ5 NüÓ–2£½Ë0Vô¤¡S¶ùè7ÍyÛ).=á]§Ü$ªqïÿ(¿½ÿgììüÏ\Ùù=^»ú?ºrõÿùq§ëë®ÿ»þ×¾Zûoí?‹æÚÿkÿ¯ÿ·þ_|ÚñG}‰Ö9›A¼þÿúÿl¾U1‰bWüçéGÿî_¾zx߀;ß¾;ïoò«ªI‚|;ŠºS Hcz™yÓcpŒRjÜØùÃøÇ§<ÑÈ/PÕFˆß]/:· éÝÛù‚Gjò幟/œÏã~W¹ÈrÑé¨ÒOÒ³¬sÞNìsÝ´îò Ð3ò¢Éã‚@#“qÀ*ýA¾¯¯ÝWú…|ʦNN°K ßö‰4ü>”«u5=׈§~mËsîEô í±C91:uª;ý§À°ñ‚úôøíýßû¿óß|Ùù?<Ï¿ÕÿG‡Ûå[¼úÿ×Yïvýßõí¿µÿÖþ_ûŸ/²þßúlçøÜ—Êfª¯»þÿúÿÿøÏÓÿ›¾¦€x·=}LQ>ä'»2í3å¤+ œB‡þþàë³È9‹7cN¹7ß¼ åÚN2¸V7q+ ^G¦ypÚ€^;;€ïåÑ ÊÅäyOyK—ò“> mË£ìäáEv2íýßû¿óçÿêÿÕÿÖ–®[]Sº^îú¿ël±:NzÛfl‰µÿÖþ[ûí¾FýçÂýºkËúëÿëÿ¯ÿoÜñŸ§þç?xÍÀ088'ÂL—¤Œ±!OxûnÞñôꓜS2”Êw‡¾ ÃÕ.#ôï.@Ï-UF€XÐ8ºç9ïÚ© i¿1 ¡Ê¥…úǹôæiÐ*²Ìã CÀN‘.×K¤W*ˆëÒßAiÞk%î6B´[L‘ùâïeçݽ”]QÊÏ Ó¡äé,åÔcSML‡ªkŽæ×HUNdnŒž\õ‰Çó®‹o¸à^i×}¿÷ÿÌýŽáŽ÷ÿ;ÿé¤Õÿg=\ý¿ëÿ®ÿkÿчkÿ'1î6,ûÁ Û×þ_ûý¿ãÓ­ÿ·þ?ŒeýÿãcþSà?Ùcüz<Ä"ðD|E®9²vëØ8)§hD€ï}òµtå‰/G( ã~Îu!1¾‚²ø ɿʓώ'ùø¥ÌðH}¯æXXŸ²ë©u–§kò’?íK-§N<‹ò÷§¯È@&}äüØÓëÿL$Ä?ÿyúwÿé'o9AìQ> ÈÑ_GÞÀÒ÷3…vú¾NÍ‹yô/ à®oºÝ>á7±47ÏõýH¥×ü¿úòËE½Ñ&GË–¾@Óùšßáow•®@Mw[yi¹GóúòòÊ€lv;};»¡¾þúëÈkWTÂ4j~/ú`×XÛ8„‘­õ„þÖw€2hÔ÷ÇÈ `4y÷P©ýŒ^½q †ÐbˆF~iI¸AZûß‘Úø©3˜¤Ü¡üÕ§òðÒ{ÿ÷þ߯0puçÿÎÿÕÿÏ»Vÿ?¯ó»þŸÝË]ŸÙµvý?ïñ\ûoí¿ÚðµWksÆðœ?kÿ¿‹=¾öÿñ©Œ‹õÿÖÿ[ÿýÿ®]+Šÿ<ýô¿üû7ã°ò¼{ûnv}úÉgó( G8³}ï¦Îï ‹|Ž1Çx+o° ´Qz+—ä±GhtvKYàÐ å‰?° =Pÿ4wÞÒ?½À5ç@!/ ÍJÊ÷9dm‹¼—åÕŽ³kì^~òB€³«-Ú9ÄúöA¯?äoÛɃOë´Mîõëφtå[×y<ñ<‰UËE6}qч÷´·é~%í9‡ûûéÓéÃæõWƒ½ÿÏ_3÷þïüϹMâÎII;ÿ>]ýtë(Û£oÛy‡Ïêÿ³†u ïúÖœ]ÿ×þ[ûo~d^û?ö½õ£¶ÆÚÿëÿùq¤aý¿õÿáõßùõÎWüÿ§þéÏߘ,trØP};òw>ô§²èR°x Æ„O~®ð¡ÃM§;,R’®› Ž^ò[·s<[÷·o¿ÙÎc~øzÄÔzºš‚DswÞÈh¹á¹Ùg¡6ÁyÅœ“Ç9U,҅ƹp=ÿIŸr¨œŸãCþø–WÛ¦Àaû߀oS§U½WÒõÅwÞç%aΧ¢Sw.Irú=í™üÞƒÊH®òÜûÿáýÑ¥úgïÿÎÿÿ«ÿWÿïúoMèšÝõAܰëÿÚµ­ØckÿÍÌ.PÛsíÿ!lñ9ªKÖþ?¯(`o¯ÿ·þßúÿçqôæúÿŸFOVGÒ›ðŸg+»€Î#x~ b:_S•ìaÎ{›0ð^);¢îééðáÑ/ð è,fÒÊj:€ %¦nA9´³‚hÒ8•d³ úåRÞ‹¹¤cÔŠoAÍEøáåýR퓯œƒ,Òu~m›Bx5P+Ó»:OËÒÆ_Oÿåü*™F.ô-Ós±vh·¸íRŸó{ÿµ=y'_PNP¯@v?TÒçìjëÅËáQÌÈ«þ½ÿ{ÿÇÿ;ÿGoÐ3tKu…˜NZýÖ¯êòÕÿg\X{¬ÇõÏ}ýšÅï±Z£vý?ý±ëÿ³]´öß±kÍ¡µÿ˜­kÿ ]ƒéÔµÿ×ÿ‹¿ºþßúÿ£~'ýÿŸÍ#„áhÆ9Î/$Ýã×f/c×1h(Ï£Èâ\c•!ZûtÑÈ·;„¶-›üá:÷y¼+jhKSyZ?^•§ï²Bëz™Ô/ÿêë¯>yÿî}@ð“¶”®/iÆ?mœÇ ñ–øÑ¦ò£Aë|þäÅ¥5¾•“ïëŠÊ‘õÙh¿¾~8íô‚v¡¼ 0‘­¡}¬&©Sڽ£õâç~E6ˆÕäáIǯ~5;ÛF¶Êù.¾{ÿ÷þïü·óÿèŒÑ ÂêÿÕÿ»þ»b×ÿµÿj³­ýwì%ýÀŽ\ûÿÙ_ûvO­ÿ·þߨñ‡×ÿŸ±°þ1;†aípxE\‚óñ÷ÅžþíÿøM¼ Ðã:¤õÜn$4ºÒ+ÐI;‚ 'H€—T„Ò)o@ vûXºL¬ìò“>/Tùâ<.$—êP§Ø©¼}ø–·tA§¼z_'Œ\ê™ôœ¯Ö‰6m¸:“œ¡›tu¢S(•ú. ÉÎ3r¸Ãƒ Ú,Š—,ÃäÚá4œµuêÀÛ!‰sšºÚ)ú¯2¨£ý)-_($ì„{üÊS ¹æþiCƒüÒz¾÷ïÿÎÿÿÑ“—^¨:i«ÿWÿß~ܲÆíúŸ56këôÇÙá¼ë¿þXûoí¿ØŸ£#ؘµÅÅÂÚÿµÞ×þ矬ÿwÖÖõÿÖÿ¯Ý½þÿ…ÿüø—¿xS % Í.Ÿyv5À íe ÞßRW~Õ/àÃ.(AÇÇpxH¾… moH¯» ‰MØ×óòx‡piê¦ÐÜ@4÷s `Éâèeä¥ÉÂ8i“¶¹v¨? “øBIÕƒGåÂß¹ºÅ½ )/Ý/á5ç/F†Ò¢Ç¿uI!;iÚv‘ñžðÑyä¹:V]5=îS®µï _ç~N¾ûu^Ò~îÚ£u{ÿÀº÷ÿôƒ1alìüßù¿úõ¿p²V\ëè®ÿ»þÇn{†mæ1>j‰¬ý·ößÚÿkÿÓü—õÿÖÿó˜—õ¡þ~üÚÛõúÿfËß ëÿÿfüçéGów€pÇöWÁ êó•>/tçÄö¥j:S~ŸÓØ9ƒ†Ó£Lu¨«¼ï±²E˜¥7/FóÓš,¶˜dä¶ðf(¥ìœ‹å¡qô]ùCô_›µý¤²¥;×fri‹k½ãˆåúqLºÇô T0š´”›z…TÀ‘öG¿€Ø = “[tg÷Ôˆ{ñ(oùG|”•p •­IºKnu¹èz¾÷__ìýïØ1þvþïü_ý¿ú×ÿ]ÿ×þ[ûýÉf#ˆñÚÿkÿw¬ÿw~^ÿoýÿþÈ·þÿ,ÿ øÏÓÿägotòÝi ¨‘ú ¥çQ3NLß 8N¹)&ô&« ã+ xäÚ¢w ±Éw®!hçx? Ñ@g“vÊJ/ÀS^[†!íhÑí\«ßáš"u”æì:‚ÓÌ¢;/h—78Źžó(šÉK;ÞŸGkÛgŸ}–úIÊÚÓã{ó¨£:+kÛÝ6 w޾iêOéÝ#‡r=ðr޾eõ•÷ŠÉ»ï:ÿAÐëÖ[y7×Ѓ\{ÿƒª¿¾Ûûÿ7‡;ÿwþÏ«ÿWÿïúŸeõ±öŸµs×ÿ¬›kÿÅVÓìÞÚ\FLm¸¦­ýwìS×þ_ûý¿gßþXÿïyÓGtæ(Šú´ëÿ¯ÿo,Ûyúé¼ÄÝ ‘è_CÏ=fök&¨¼ú`kðU]šsƒÍ‹Ò¥©Ãä|Ð ÖNýSÏÔÕëNdyߟX®ûu@BA(`ÎÛwoê´àz”qž¥kß­S=øÙu„FÙ)ðO•Oý“g¡˜‰ûKde%™'&›pvXA3שû’Gù ¹V·€ÎÑÐ6É ÿ¶ã¢Wõ)ý\¾õµÊ¿ûyÛ—´½ÿ{ÿ¯·óç¿¡°úÿüˆ°úÖÓ»þïú¿öß«Ø ô#ûií¿cS>l{ëÆÚÿkÿ¯ÿŸmý¿õÿëÄõÿaµ8˜Ä? ÿyúѼKçêÐ.@núKQtkÀLŒV¹‚+„ŽP¿þäóÏ?8Sþv,áá}Á9þÊ Ê•‡ëðž†̾ýæÛ\PÊãsóï*Ǩzñr¾„8h¹zpÄKg•6̬Ϯ‚k@ÅaŸô¾ßÉÚ¦¶/Àª-Swû?¼û(aòOâ£}}°ƒX»CBèó?²áÓCÝè"÷·½âÊå¼é­ßœã•JN›sêÏ„òãåpŽ—{ ^²Š›§]Ú¼÷ÆïÞÿŒ•ŽCc§sWìzçÿÙé˜ù:ý!ìü_ýo¬þßõß88¶GL€]ÿ×þ˺iítX[×þ[ûßXjçÇž˜±!î!íÿõÿŒaý¿ót×úÿ3.ýa\ ¨Né:SŸ>ùmñÿŸ¼Ä½ ° jC²x`ZBÓ¼@[gUzt4@U‚rCÛ:¤yÇ”²¿èÞ;P¾zñŸ)ïÚcnR”« è+‹È$§uLå§rÉ$ãÐá'ÙÔáxyí¼r—5x´M@2夡õÂv±YPöœOž6á‹?ÚSåérUFò¶ß.¢ÔUz1žèðBÛòm³÷‚éÏ;meî;Ã|ÆóûCãDJM¤ “Þû"ÆóÎGÝ=ôòÚ÷m›ô¶£}µ÷ïÆ‹qcÌMÜ1´óÿè¨ÿ«ÿ«7;W:G¯þßõ×ÿµÿÖþ[ûíÿg«>ˆu³¾¸¾•¾âŸÄG¹|_3×ëÿñ×ÿ[ÿÿ7„Úœ¿ þ^âNP¡ ¨¢lš›,­Ê}±“'X`i CZU¤(Z^ÞÛo߆@Tåƒgvi€“8¾@—È7`ÏìÚ"Gøt驘b"_äÞ}_ÙÜ Ž“”¡È††<ï¿;€”siên¬ øåzxüêz¡=“¯€Zã/—'-Asè<*·¼¶Ñ£)}•ttÊ´'!ms-¨Ó¹Ò©C úH–û4(oý3ìNM¾ÇƒÔ‡§€Ÿ°÷ÿŒƒ½ÿ×8Ýù²óÿoÕ{ÕitÆêÿçucõÿ®ÿæ„Åv×ÿµÿÖþ;þ[uíÿcc¯ý¿þwý¿ãò)Ù“BçÆœÄ7>þéúÿúF_¬ÿžHÓO¿?/q×1N`Í(Yÿgõñä7œAuh¤•ÚÒØ2ò¤Ìõþ(ý 4sè[¾e~§Ž#ƒt:»ˆJÔ2ì è i¾òå—©qæGÒì:Àу¼ pÓ:ħ‚BІ4xþú"b¤kG€ˆ±ò½FNçä(¨¤$>¥w@ÊNgç•/#Îui䥾ë>TVéÊ4F/ÏW½p__Ù‡nx¦ïF~ÐXËÉ·“,éíið‘÷îýá`L£^ï¼ô­öÝeÅ#÷3à{y¦Ò„xþ´þ¤ã1üP‘m®Õ­-{ÿÏØÐ{ÿg´ìüßùéœè¥ÕÿÑ Õù«ÿwýïX0?vý?v”¾h0GƸ8¶ÆÚkÿŶZûíÿõÿèÉõÿx³^Ìÿ»Ï_õZ7º†¬ÿÿ/ÛÿÏ;°®1ÜxG€Ž902q ½‰äÈ/Y—‘Ñ_4&;à^G«"׌8(ÕºZw⋇¼èûëkÎG´pÉ@"'ù<+M.ç7ôØ\äVïÎË?40s—‰iõ닟~P£ ¤íì’\{¿:]K—fgVò§.ux_–r퇴_m_r¡UŸÝj¯_½N3µß¯Îò^¾:/ÒÇÇû¸î}‘ó¡‘>SZZÚå<×ãLàš?IÍÞÿÇäÞÿ ט4žcʱóç¿_1é–Õÿ«ÿ3²”œuÌúãØõìƒKgîú¿ößÚkÿÓ‹ÆAÖÎký\ûÿ²%®5¤¾™X¨ÍùØ¢ñs’3.»tý?æz:cý¿õÿÿEûÿO?œG«@gÔgÇeÁ9r½‡< ;s€@U(PÐ!Žƒå›ËsMAw‡z/77ŠG:þꜩv€•Ûù$=§IŸ#Nóå@Ë8Ѓ7;NöUx|RÇÑ\{§ÚÛ~åRÇä¥M¥—á™ü‹F»Ñ©¼GK[Ð⥮û¢A;Ͼ›>c¸ Œù€[úí x©Sùçê|ÀJ;ð×åÛúXx7ùÐfé/ggZýœ¶Ÿò%Wû=÷t®å%bi©gdA§Ï„½ÿ×n½ÿ;ÿ3WwþG1PaúctÇêÿÕÿV¯¬eÖ’]ÿ°ëlеÿÖþ«]ZûÕº±öÿ¥3×þŒ¶…±RßDßlìï]ëL~@½Ðó—-¿þßùâßM§¬ÿw|]fëúÿÏORý¶úÿy‰»‰/ÄðÌÙ9w_ W—2±ðL¹+ ´Q2øDÉœ],}®<ù®"Ÿ¾˜Gçæ¹cêQvè„ʃþqøªád£•O®GÞÐÍE@;£¤—?ׂ²t]òÑ ‡”ÃCÉ%n=蚇×÷Ÿ¦ìÈ€Ž\òÃò”)=£íý»Ÿ†oÛ©ñÊî°‰u9ý0§ ½8ùCß{@ÞöGëCãÅù‚/*¶N×Ωõ¹?¥5¯ç®ÉàòjëVŸ£r£Õ&Ü÷þïý76;>:6:vþïü_ý¿ú×ÿÙ>zRè:ê|×ÿ{ÐGÕµÿŽZlí¿gÿ@_°™×þ_ûŸ¾`{ò]¢O/ÿfÔHòѬÿŸO_ 韜s×ëÿœA7ñÁ§ÖÿÿßÃÿÏ#„n Å_G³@ã†åÅß“?ËŃüë‰ðH˜A_>MËŸt»Ž>YhæeâQ0¥ŸÂ÷rêUÎÁÐõhžPªJ*pø m¾JãOêéšáC;™RV?õ”ï§è€U>´“™†¯kçèÅá=õ*äk3ƒXøöÛo1ɳ̄ÔsxÉW> ʹ7ÁäM¾á5u¡×Ö¶»2¡‘†®rã‰w®'¾FUå!öþïýÏ8òâÿù·óÿÙ±¢:×vþ½¥qÓEÕcb[ÿWÿ¯þ7WvýßõŸMÉv£ãØ£ïvfø b²õð®&€škü5ܲh(pÊ´|˜ kõŠSnèãõpR†'9ôCäs2V^±zó¢ÒeÏ¿J¨'}7e´'m"Î%¿«lét²-öCÐ)¼ç1J½¯Nõ+Û{¢\E2 yMCï«…•íý|¡‘²†é¤ïýßû?૱`lîüßùO_­þ_ý¿ëÿùAÈã;»þ¯ý·ößÚÿkÿ¯ÿg-XÿïÕ|M>çúÿëÿjì¡?BÊ?þóóÿúGoÔ$é-Òú$ÎŒkˆÕÝOœÞ&œß“{ 衵àwÇ“Æá‘Á>y&eRÏÄÞuÐëIwNÿ~v[œd¤“huäÅW’ £þ:ç•_<‚ä…çáugrñ—N¦özi¡Ÿsí(øä¥Äè(5ùbu:ÙѦM:/m›óäMŒ¯,ŒS·óö“4NįÐJÿO¾_-Úwò¢8¦Ì0L+üÚ¥Ý/_ È8à•~P—ò(”÷UD_GìËQ“7²ôÚÒïýßûolìüÝ7óʼp8ßùpý Ðk«ÿWÿ Æ„y²ëÿ®ÿkÿ­ýgmXûí¶d׆ú0ÒŒõÿŽ/«ÚOëÿ­ÿ¿þÿߎÿ<ýÛ?þñ@•B1q„8#uÔæ:é3±#@#àŒÉ|ù L†kÒÐPÊâ5TÁXN^Áî"Š4ùÊ© è"ÍñÝìÊŽ$]2yQÚ½~e ¸Tð&N礥±cêà\Yü3ò´M²ðèuÿüóðt.íÕëש,²ìÚ‚P ¸ÔJ¿ì]üµA=ø;† ¾äÖ÷dȶÃKžî>sT/.0 õWn_)tÞ~ÞûÆéÞÿÿ™hýÙù¿ú¿úÞШ¥SWÿïúo<ìú)ͱ=:W̵ÿÖþ‹íÅÉ|_ûíÿóã½±°þßÑ›ëÿG¾þC|ó±)ÄëÿÿñŸ§ýòçoÞ½}`ÄBÈÒi”‹”6'9â½€À‘¼:wgûàY Ê â<ÿ><ÂsFé¯f÷Ï#˜£Ž x©37pÎï×¥‘ÐÇxŸs4 ®;w˜U¾ò“£`YД÷Þø¹dr­)Ê¡‡>Ò¥W¯^E„Ç.•‘ pöÙgŸMkÏ ÿáÓº"ž³ËŒ¼dOÿhß ”3üÔ­¼z»[N¾t ^ú¿a˜{©,¾‰¯>!›@iÒöþïýï8Úù¿óõÿѯtäêÿ]ÿ-Ÿ»þ[‹­ÁVYûoí¿Ú£±e‹Ñ—9¿búÓõÚÿçGkNÇÚÿëÿ™'37Öÿ[ÿýÿ8þóôïþÓOÞXh,F †_»{0ÂË ¤éKÂÍD/œÇØ<¢v€JÞI5±s¼»àLàÖyoð“Ç@ä h…ÒZ Ô…ï9I¾_üPiË9Ê=”Åœßù”W^l>å”QoçóX ÝY‚_ SÏ©é,Fø‘ùýwGî*'éá?Ô”¦pú`#òy|oÎíˆ*›s4Ê;Êð„ÆuëmÛrϦLÞo54€ˆ†‚h”¥~ʽ›ÌNtø¥ÏF–½ÿÞ¶÷çÿÎÿÕÿ«ÿ­»þïúo¬ý·ö[qíÿµÿùëÿ­ÿg]Xÿýÿ_Fbu b3¸Åÿ üçéÇþo Ò,¹Í㸘@ƒ# 4ìT™ $Ê"6»z¤’É)5_þKÂ\§ìäQ@»¢¤Ý¼ðði¨’t]Ú>RX ëÝìD"ÐÝIh"ßð+OÛWy™¹2s SF})ëőգ{ê uñ!Ûà&€G~i>ß ˜¥OÕç@—²ÊD::¿·íã¶ë‰>Ö‰|¼„Ä“V¾@Nýãh»ðG£, XöjÀ-üäÝA:4}4sïÿyluïÿÎÿÿ«ÿWÿïú¿ëÿÚì±ÚtkÿÍk,ÖþÝ¿öÿ8%ã°˜ëÿ­ÿ·þÿúÿôÁ?7þóôÃ?ùÙ›'5ÒG =Ä(@—ó¸H¹Ÿç¨âÚ(ïbÎXàÃ{Òñtî<`QùÕhL ɹôî<ÂÏq/‹§k )zÌß¿{ÞÆàH@CF‡/üM8éù5I}BvcÝêøä+󘥺>}4QºvºI•·_V¬ÌÀ¤;`W€ILnïª*Àà骛,}ç•su÷EåJ;¢ž¼Zš~èýÑ'ã†Nß ÒÞM»*7ÞM'ËvúJúÕiíó½ÿ{ÿwþŸG“wþ¯þ_ý¿ë×Ѭµ³®sfwý_û½ÅN[û¹ö¿±p?Öþ?¾[}:1ºþßñÓÖÿ[ÿ¿¯ZÿÿØÕúƒþœXøHÑC1¼Æ3ylÌÚ´‚|óÍ7Ÿüà?HzÁ4˜:,RJÚ»Cä)ÛJkÔ¹vcÐ5€PÐ'€)u_™Þ%¥nÀÔG5ÀþÓ1ž”`ä"ϲ·=beÂ_»6”-x3™‘CŒH—:®rø©ç{^áãZ ;þ^zæGe"×Ðàçü˯¾LßÛ½Õ—°K÷H¢à‡¾++hkP×ô–“ƒ|¥“&Hï½Þû¿÷çÿÎ:¢:¡ú’R[ý¿úß²ëÿå„ïúûxËž`wÄö`‹Ì5;gí¿µÿŒµÿ½½öÿ‡Öÿ[ÿÏ:Ñ`–Љ×ÿ_ÿÆBÃÿÿyúÙù÷o|zŒÀÈ€DŒA©1Ð^ÌcgbЇ! 1àúÒgeÑŠ Cyog×’œÛRšÁy U0o‡Ÿ_,•Ã#]PFººß÷ýO³óËçVX@‹Ä9ÏÒOÙëŸ6wZ?~‡ì„®z¥§Þ©³ *ã׀ʣ-Êø«ÉsŸáçjêž»þ#Òíú²; ÏôÓ¼ _ý÷öÛóeAÀ[x Ь2£IçW}ÒÈo›4Áû¬´g˜…_輇kúÍ/ƒÂÞÿóN±½ÿ3Nf×;ÿÎØù¿úõÿ®ÿY(çÏ®ÿkÿ­ý·öÿÚÿëÿ­ÿ·þÿúÿç£p…à{¼áþóô³¿ø£7H}ôŒÁ–çº[ùWðE^…ýꫯØtg“<ÎoÀ”‰|Ç ¼ˆ'ù)#>øO@#Lñê „c²ÅtÀ+åÉÛdK=؃Σ~€/ç0hÊÊ«»ï4P¶àQû#`ÏЋ+góÔ}à¤dM‡„W˜,÷ n!íŸØµ~ÆS¿j_ÒæºÎYZ¦u>ø øäü.ßF^Ža }ÚöFœ>FÙr‰µsäj={ÿϽßû¿óçÿêÿôñêÿ¬)»þïúϺYûoí?6¤°öÿÚÿñ7ø9ãÓ¬ÿ·þŸñ@?ð-Åëÿ¯ÿÿO‚ÿüâ/ÿãƒË»˜ì”êàêsÈÞiU¨ Tè`²87(-ZË;¢f‡áúzçy7ÖÐo€(ô¸‚ÝHòlMW—râ€1S¶ NËÚë”Ð_´x–ÐQšv‹)‹·#Nè%CëEãt9¿Ågʽ¯ ¢E†Où·>ðq¯kö–cýÿõÿÙìÌ;þóôã_þâÍŒ•çåèç‹zˆvIy¡8ÀÀb 1æX^°>'9ñ6e\Œœb´Ž1båðöòp#׎#u›ÈŒ³04• ½úúKÎëW¯ó–~åå5_¹:â^RÞ/«©#“cbiè19"›]Is#kdða>1ZCM˨ëîNÀžUßÔuš’ëÈ÷ð“§ÿ¾ùúëäyÏWÊ h˜]qÓ†ü> ©ûº@Û£ùþ#ódæQ°´ÙõÊ·Ïô¹û*Hßû¿÷ßcÄ+;ÿ3_vþ¯þ_ý¿ë?è°Îîú¿ößÚkÿ3ï­ µ½c@­ý¿þÿk|<€­p÷ÕÖÿ[ÿýÿ<þóôÓù af×ül4€8&[+ùqf'PÔØ¹Ñ£àHÓzï¿;/%—_þÿý¿ÿ÷@x˜äÉ”)˜U€åÁ¤3ùÀÀ iòøÛðeLœКôûSÓ̩k@$¨^A²–ó>¯Ö_£µíSnz#r'žBòîý€´G!ú(&~Ú䋎_|ñEè¾üòË€N/íÈšBh?•CºvªO ¢ºšO¾¿î(Í.,!çS}ƒò{ÿϻȌ‘½ÿÇa5>Œã£ãyçÿÎ:D¨Î‹.ºÆÈC_¹´ú:jõôÇ®ÿÏ?–íúl6FÌÚkÿ±Á­+kÿ¯ýÏ¿©ÿõ°'ÖÿËü`w­ÿ·þÿïºÿÿô“?ûƒ7œSϦ›¥Q0DšÅÂÒ ƒæîÌÊwGß.`ÏòQ®×Òtº2¯_¿NìEê®Ãøåé\Yïm¤ m‰ãtÜð9´çq_! Ï¡ñ~£¾Ô=Êpd¨¸Ún7Tê½€çêÀ³ýÁ“~9ÀØ$<^€V~ˆVý“Öp§é×ñwˆz7Ÿwaåß”K›†¯ ÿÊÿÝûw ÷¼Ü-Ts&îKùñÖG@¢ÝiÏÀþ{ÿgàÞÿŒžÎÛŒ‹ÿ;ÿG­þ??¬þ?»—­)Áºâ|×ÿ³Vw}®Ó5;5vý_û¯cdí¿ïÅ.×kÿ¯ýÿ½ëKüŸõÿ²|t-1_Öÿ `ýÿŒ‹ßUÿÿé‡ów“¡FU@¡Qj š0 €Ÿî6’¦\ƒÅG™:½žíFèÂ1w[­/ßy&zï ï>.å×J€:ewºÔwÉKnåЧ}W³HªëâI02zT’쿾¾¾ù$@ //šSîð;PdÖ¾‘IpíˆÒ~e”éѾnz”ö”i¾ò}‘»4×yÁø:‘EÐÞä©¿ah®úî BøÏ¸×—ô¦¹vàëØû¿÷¿C+ã-Ðh‡Øó¸Ûù¿óŸ¾ GŒ…Õÿ×£f«ÿwýuÙµý¾ÖÒ¢®wý_ûoŒ­Ç¡G×þ[û¿úÁxXûý¿n:XÿoýºaýÿÙ ô³ë‚¤ŽH&ËYQ¢×­A¦#Ñ:8.=GïÜcpÜ\×ÀÊ Òj¼ùõöì–²Xyðžrꨌbׯf'^‚kçv©€d'V_¤ž:GŽ>%Ÿ±`°#«í)K¶¾_R“ýêÌyê¸Ú®?m#Ù®Åêw^y‘ã­®¾X=ê@ÓºTÑYè…æåbN¯æêJ:)êûø(ù…ÖÕ¾•¹Fæ)ü{ïÿÞã¥ãɹ±b,/=7žœïüßùO «ÿWÿïú¿ë¿µC Öþ[ûoBvofP\Öþ_ûý¿õÿÖÿ?ˆ,™ëÿÿüçG×KÜN¡Ð'/BŸ4àË#ohë”(S`å Î,tðQ~è+)ï6än\FÌîØa•çÞ•»ÊSðI˜òø*[gy.>y7—²y5ü^¼<_Ìc†N êo»\?·±*¿|€Vþ‘qÂ1² 'Ÿ<êo·ìÐ\õ„Çе/•oÝ<Žþ¿v Ú+<Êo#ïÝÛwÙÕ nùÞÖ¾W&ÒÏÆÒ„‚ çêùÞ’IhL¶Öë\xÜ?ç{ÿ3~öþÏØ¸Æ™±Ó1è|çÿ™_÷¹¤_ûÉÛùŸ1DÇtGëêÿÕÿ»þïúï‡Çµÿ®×þ[ûífGeý¿yªiý¿õÿ×ÿ?›%ø¡—¸ß®£/ÆñšÇê@Ïø­À”€£L“‰CÏùËs4ÉD›¸;˜Ê_¬âãØ`8ÂùUV9ï(¨TPì=X¾ˆ˜ó©‹óôQo±a½°§/v÷5?ÊL @ªï¦Üá9/ƒŸ2­§;°ÈéÙu$Ÿl‘©“Œw°Kº‚=ÉŸ4!ý6qxNYqy…àúS9’74ï§OÊOC¨òõŹ7ÚT>Ê ½¾Ø=ê¸ç7O|—«çÒ#ÇÞÿ½ÿ3Vvþïü_ýÿЧ«ÿwýßõí¿µÿÖþ¯/f7×^_ûý¿ŽúV®= (nÞ1°Ïßø]3†’·þßñC§?ôËúÿëÿŒÿ<ýü¿þ‡7¦Ž"Pº=Ïvçšl™\h®]@&¥´ND`¸&tp×cw“ÞGÚáY°ŸÇËq‡wA¬4ò E¶©¤_ |qgäÎ;³æúÓ ª¡W¶ír ,ÃÓ®-Qù—NÜsàUÀ¹ϼ«‹’vD–i/9ñpÈw8o[‡äñúœßòZ·X6â\ >ºÑâÛ€·# Ö$Vù‘í"”Þ¼ÊÓ²H>.¯ŽÒïýŸþÞû¿óŸŽÙù½`•Xýtoõäê«þ¬;Öª‰»æøñȵô]ÿ¯¦?îkú®ÿ§?Öþ[û]ZÛÛØkÿ¯ýoLTG:Ïš»þ_|<ýñ±ÿ6ËËúëÿs[j‹¹0^÷üãñóÛæÿ?ýh^⮑‹.©¢,\\Áâ2‰I/­4çîå¤Q:å[ã›òÔh”6Ùí%¸và¡sÑ‹½J¬e¥§³§F¿‚9å}Vsmüúë¯?0ñUÎaçVQìÍä¤â%¿id#'°­åÛ6ò¦ObµÏ…69¦ž<qÕ×¶ëðõN.<’>uv´I{„‹6í>Ê ‘ßi/ù+“<ü*·6LCr=-~äå­2éáÃÇñ(?yáè iëÐJ/­4çøìýßû¿óç?PI7¬þŸ1A·¯þ¬)Yû¦OŒ]ÿÏ»ëÿÚµµª+Öþ[ûŸŽ\ûý?ºaý¿õÿá ëÿüçé§þ‡oLŒLÁ6G€ã²pQPɯªÃÓ™v1ŒB?濫pÑ:Ê÷K¤8¾›wf½zy~mâÐs€¼©¿$ón«>2~‚jö!þà||ùâeve‘±Ë§G Sf†`)²MÄ»À1uê;·È"ÏÉp— A¢ÚN|ÒŽáå\ ƒsåKW0K>úò—V àK<çäq®Ï{®|ù–®mÒG/¹g¥ÕÿÊ•Gaïÿ°{ÿwþÏÌÙù•³úõ¿õe×ÿçµzϬí»þ½¸ö_”¥9²öß³=\û²víÚÿãpLXûý¿ú`ëÿ­ÿO?ª'øóëÿçÝæ|±â@§óÇ?~ÃQoÐqí<`FÁ£€@Àb¢sÄŽv²EéÓé|•R»sºnwðgè”KþÔ—tÀ’úÞoUZù­›œ®#ÔÁƒƒUPÇ9Ú7ôÒêT^Yrâ£\ꌩò;‹e å'Éác—~< ÇIOkËÚa‡W¾Ž8´mÃÛk‡—6º í3ùéÇ¡m?´½ø´Ðë_€+}—ë‘dò’?<|ðp ÷.­´?5‡ä‘¯züŽìO´Ï*ÿÞÿþíý?€ôÎÿ™g*5Î||Ì¡ÿ«ÿg÷íèßêÏÕÿ»þ³=výlæ…¾ˆÎ\ûoí¿±?Ùžkÿ?¿ºÄüXûÿøžõ‡Öÿ[ÿ=ÎîúÿÓt¬âwÁÿúñŸýâK,ø^9tÌBAØ‘£cÐt€B®âéÎ¥0r}ÂCðóî*Š:HÆ(×úhM~ëk®•ýꫯ>ùì³Ï² j ¥œ-uòÉZú‚+/g§ÞòÉú q“çºUÁ¯ïŒá7uM±”U®}Pù‚iÇiÌÐyñ9´_Lv©<Ón<¼³K=ä 5qóÄä½×ÒUä,f“Zm x7éd½õµÃ[Ÿ·}{ÿÓU{ÿϘ2Nzt¾tì;;ÿþÚù¿úŸ¾_ý¿ë¿5x×ÿµÿÖþ[û¿v÷Úÿëÿ±—×ÿ[ÿýÿ³yæŸÿyúñ/ñf,¯8¬çµÁ5ÇÞ¯ ÎëÐ~: –_Ì&uv \ Ú€)¸RÁå5à—º'Az&ûÝyž4;:Þ½÷ãÈ4×x~ñÅŸ|;òÈó÷·€ ´sNò´äõ¨ <€ º¶ƒÒÛÞ‚<¨´w‚>²]qWeyBû!×ST›9û^þþrbùò¤i‡zô«ôÈ©¾ h*‹ôò——ÇG2UN]SÞå#sdê>æ ‚ÿ™æIç§yÓyhNîü¿¾ô::dõÿêkOçŠyÓ5Êj#ÝÑ9$¦gwýßõí¿g›yí¿µÿk§¯ý¿þŸutý¿õÿëwü®ùÿßû¿ÿßÿç×Ý•¹p9aΔvøäÅè“Þ­¼CÐè°¾0ýóÏ?ÿä›o¾É×ýÄ5FÑ9/xâ¨c÷QÚ¶“4êÍV' JSFP®ÀН ¢û«¿þ«O^¿z}ÊÍýq&;¶î¡@—:<] Ôãñ:}’ú_;² 铘º ôx¹¼GñÐJ ¿‘…QN¾‚\ê–§^²ª3ü¤ëO€@O$KûU‡GoÜAÿhÐâãkù®ËWŸ ß¹üÙ=7rØ¥m”)üöþïýßùvdîü?r¯þ?»}éÉÕÿ»þïú>˜³ößÚkÿ?Áö[zíÿg_ÂZYß䬛ëÿÕçZÿïø¸ãx®ÿ?zÃ<áŸÃUÖÿ?¸Æß†ÿdV³é8åWÏ9y2®H>(G4ô•§e É‹Å'¾7Ãú€}E_žâÊàÜw¨»;•ì¢RþK ¾È'/mW.Ö0Η çZù(‰)#¨]š€s‡ºå“; Ñ€FÓ„žÛáúðœ÷cM{"ç|QìZÀëË/¿ z!@Ò¤'žkôúìÛi Y\Û]¦=øãh¨ë&«$4£æ–œ>+ôä_írÏа:¹SžÌÚ÷êP6å‡YÚ6u’ù‘®ð•·÷ï¿1j|ìüßùïÆÃ=D/Ný±úõdže¤kJÇFv¸Î81fºöìú¿ë¿ñ±ößÚì ëËÚÿÇ‚Þ\ûý¿õÿbK¬ÿ?FÕåó³ø÷tÄ¿Dÿÿ釿üùÀG¨±i±”h¸´XU<®gpĨ@¥¡e9&òòþ(ñXl¤Ý`Žwê8îe÷º¼ëì@à€L Y¼_ ¹FhôÝ‘ g2úrPyz<67ÁŽ'‹ ñc8{/• ´J„¯òäC_9ÃóJOÁù# /¿Î{i»k2‡vò_½Ðííy'–¾i¯ã»ûKºÁ§}`;Uèßðúô·øµ2y§•Ù!Ï.´Ùõ…o_L¿ìB›Ç+óÏW_þìýßû¿óçÿÑ «ÿÏ\ sWÿïú¿ëÿy$8›á²̵ÿÖþ[ûíÿèÑ ëÿ­ÿg,¬ÿ¿þí…JüçéGúó7e,fŒäÝOsÎ Äpæ @Gßç gÐi€(bÆ×_>@§9  Eè~-è]ÜÉ›Gõ„Ô?ihðì–\¿ì¿Êco¿:²Ìµ:ÈⱿ—/_Ði@™¼fdÇ Ÿ‰‘u‡LýÃ_ÝÄC62Mš@FyÒÒ'kwéÐ4]ü¸VÚ‘QŸ$9¹¿dýl›wTM†Ç…ò&»#|ë€p&mŒÌ“ÒÈ¢“ÖDýå7á…_Ó*oæOÊ oïÿÞÿÿ;ÿWÿ¯þßõ×ÿµÿÆ&ZûïüлöÆÂÃVfÛ¯ý¿þ_}§õÿÖÿ·V¬ÿÿÀSà° !øË?ÿ™¯þÁJ¨¡Äè€ (2é©xÎV¸83 ðÊŽ¦^‡ÙÐã@ ÊìL ’!˜ëçÝXÒäªCÙ‚=y§Õ¾¬Ô?óbs`N%pÍc)7åËÈÕÎóÎ <G§.2ër6žäúÄõ§/æ¥ïó¯txj >ÊáÙev{ ½FWã(`w>ÒÉ/ xY¦äyDïÚ3_!t­íº_ ½ê”Å,ÉÃ{dtº'¿²¢%a¯÷þïý7fŒŸ[×q>ƒeçÿÎÿèÊcõÿê눵k×ÿ]ÿ×þ{¶÷Öþ‹qû’íÀÎŒmºöôåÚÿëÿ™æÄúëÿ¯ÿÿŒ ýÏâ?°ê¬ú‰E¦@FÁŸ€=“.Oè$ÀKYNÌ˯¾›û•–#ÎÄðDP¶’k”þ±Û+PÊqœ¥)«Lœf&¸®¬®KCŽä2°KKã•+•_Ž/@çäŒ|Bw(áÁç½ZHGæ©(mÄGPo"ô¡™ô.Ò§.ùõ©•½/EW¾€5|s}ñðÂv;±ô»_<ÑUÑáÓö¦o\OÛ“cçÿŒ ºGXý¿ú?ãÀ:sÍ]ÿwý_ûï€4kÿ­ýO/Ÿdík…¾Xÿoü³ë£hëÿ­ÿϯXÿÿ`çÇžƒCü}ðŸXŒÎ,‘ëùd¢t€(v?õQ¾¼`Pt)é;^šþêõ«6J«À þ€–€+sþéÓy49æ¼<•å.¹Ä=OÂõPCFñT˜Te»‹+ ÃbJ?ÞŸ%Ÿ|Ê «^“OYï"“wc¡+h„>ü‡N¾srµ]Ò\G&é³ oùÍë// ïëºé›¶O¬Õ€Á|©ÒÊCïà[àK™öWêšk´ ø9z=‰¹ž´G(Í-mïÿÞãxçÿÎÿÕÿçGúrõÿ츺Ö+}±ëÿ®ÿ™kÿ=ì³µÿÖþgc¯ýí¬I_¬ÿW?Œo¶þßÙ½®/r\>(›"Ç,*úKøþjR'}ÊF×òm§œûŒ_~Ñ8Yÿÿ_¦ÿÿôÓ?ÿÃ7`Hw#uÖÇ;° &ÈÀd®;) (ÀŠòøv€f`M]åÝhÇ›¸ö7å+ïòwä¨/>}‘ú\Ëó« “R‘û¨V÷€™ËS{»Ë Æ99ÐY0qÚ6×èMê¸Ë^žM§´¦¢ôOø¥?ÎJÓÐ@IDATãhòëÝÄxÉw-Æó×v­M[LLÒe„ä'ýÉŸkk",ªÙÈxÕázïÿÞcyç´IôÝÎÿ£cé—ÕÿG¿®þ?óÚ±ëÿ®ÿÆÁÚÇþZûoíÿµÿÿb\ÿo<°ølgÍ\ÿïlöàkò‰ësê#¡q.®kiMo,_ùúÕéÝ¡[ÿÿÚÀ2ýcãÉïŠÿëL1CcÒ4Ÿ}þÙ'_}õÕãWct&S<hÒ•÷XßH˜¯ýáõ~€»GS~z\“¥2¾œ/NVêÇS™§OÏbÆ5e¨*8Æ9PŸ|uëR_LÌõ%:Т¤£t+Ùs=ùêtweM|¥É ½“+ìýßû¿óçÿêÿch­þßõ×ÿóñ&Û‚]±ößÚkÿ?#vöe˳¯;OÌ•µÿçu(ã³XGùéŸõÿŽßu™õÿ2eÎØ˜Scä1VNÖ#ï>·6±þÿï²ÿÿôoþøÇo@åý;Cc¶ƒKšGý€'Rìò¾%PJ~3àt¢ÇÑ|ŒLÎæGyÍĽí©3#7´¥3Xï简:Ãàð™ÓîðL)™ÂÒó¸ã%?ÀÇ–Þ/¾ø" ùñ:4 ÚMî†ÓÈz;üɬ ~iëЫo˜=djŸ’¥ýòà72È¿× À !’®S²lèȨž‚U¡ 2â£\û)ýyU$¯”½î‘,}g· ùñª¬á±÷?ý±÷çÿ52 dìü_ýOŸ®þßõ×ÿµÿè‚Ú`kÿ­ý?ÆxìñÚÔkÿ¯ÿ·þßÁ꣮ÿ¿þ?l¼"˜Ãx[ƒQ#'ü¯ûyý1qñŸ§ýéÏß`âHáNT® ðLU)Q:Û¥ ”ôgŸ}„½@I@¢IïµÊ’v_xÜ…ï¹X8sš?m€üÈ7 üMÞu ì!/YíE²“ˆŒå« ¹C3ñ矹ùÃÇ®×çßìNškïÀjµC^Ûð±l){ÉY¾•¹y€2è;yú ˆä¼éꔑVÚd×›@¢^¨ b}WÙÄBóS¿ü¡kZ¤ ­Cº{ÿÝå½ÿÆãWÓó¿ãdçÿÑaGæVú‰î¸›_™S™¯'oçÿêÿêyccõÿ™æpþæ4>žc½Þõ×ÿŒ…™CÂÚkÿÑ«,·X±kÿÿ ýI·®ýžZÿ/Ã#j×Ó§ëÿÑ þ­ÿ÷Ûàÿ=ýèÏ~ñÆÀuËìNª!iPgAÃÒVaº–nwèâq<å广 ‰2‚G ÖÈSÎ#tb×obŒ }ë¦á‹Ç#í£s4d‘ïÀ#ü-d³Ë‹M·3 EN瀩*±¼¬Üc“Ú6òzVvZàsÖÌ$ù~Q™Y~údø?M;„ôáE‹®idlÿTN“?íºcÌ9ù•wT~ó Ø2ìS÷”·®0.¦\šGÞœÈ?ÌL¹Ê Í/ ä+%Ь…Rvx|ùå—±Ô Ô* DÞ¶]¬>“³ï}h~À¦Ö710M^å!¿¯p¡&M Œ ÏéÏ9ÉKå;ñ•ÕÏBëi‹\Сz6®ñZþÊNŸÜËá# /ÏîºrM†;=º½ÿ{ÿwþŸ÷þ™#Žÿ«ÿëÍŒ‡Õÿ»þwýÌZIü£?y4õ¤»n’õÿÒ?ú/sj:eý?#ãlYÿÿ`"wž"džÍ¹¼ßVÿÿé‡ò³7zn`F ë»®4ÖµwJ9·³ªQÀ0Ó`É¿í4 zò/Õ„Æ59ľhÇ—a©…¯8i‡YÀ!/ ”߯¨‘GPóíì¶zõòÕcb¿|yv‰áãU1ÀMýÎíÎÊÀŸó„‰+~¥ó˜¢:r=„båÞ¿;»ÏÒÆ‹¾¸‘­ý¥À«ìX}Œ';ÃõOšÒ‡‡>:eÔ%–®.Š¾ç¹¾êB×]YÒÛ.|]‡×œ Î÷þOGÜúiïÿÎÿÿ«ÿéÊÕÿg}ÌZ4kÆ®ÿ»þÇp˜?µ}2OÌ•9vÆÚgg§¾¨=·ößÚÿìL6÷ÚÿëÿYS×ÿ[ÿ?‹æè?Ž®ÿ0”Ú³x~òôùß)!@)/l?“g«Ëð¨1€f åzz6`‡2Êx#éâÜ4eš@é;œš.Æ/[ôÃÉ ØG‘ oé„V® ºnº/±´¡|ì–ò!íqóût|»ãJ~ë¨,è¿{vSEÛ€jÔð²Ó à“v¡ÁGZÊϹ]_À,²¦O§ÊªÇb ä øôœ\Bʵ0ÓN›òêÄ»zçégç® ]·ßœ<þ{ÿØ{°÷ççÌÎÿcHèóƒþ¢Mèç«ÿWÿ‚ñaÞd šó¦umÍø™ô]ÿwýg¡t\ˆé“µÿŽ-¸ößÚÿtçÚÿëÿñyã³­ÿ·þÿúÿÓœxúÑ/ñ†¢d@Pqýúõë€-ˆØ žÎ{7ÌðCT¾C(˜³u^\,ýL9¶mR8CŒ^Fðà¹ÞÇÃàL–ñ¡óÖW¹ÊúRfÈH€é­# ´UYíð+àMyá­¼¶E?ÜëS—t|r;“<ï iùÄ€v&’HûÕì0 à5uõ=a®cüe^@ëä—gúÀ«Ãû|˜*ãhÈõu‘¾ø 4²S×Õ¯{ÿ”œûÒ¾Þû¿óçÿ™ÕÑ?«ÿWÿ[×­a×Úä\Øõÿì†~¬Ù»þ¯ýwÍ1¶2GÌ•µÿØóéŽü©m¾öÿÚÿl.ú³ïcŽÿbî\~ Ÿ¥ëMí’ÇH’7Gʬÿ—nI_ÌY|Býx ëÿ­ÿßññÛêÿ?ýì¿üû7„·xx$Bà¨PéyW® þ– Ýìx¢t »„ÐØ •÷b]“'I%s|àÏð{€9ŒãÙݤ¾CW]z÷teòø #aèüûÞ<âêN(Fµ6Tûæ›obh·=ââQž#š42©ß!x Ñ#ï¿;;ªš/O; >¹–Wáyµ¡m¦d{íÔùÜŸx•GN.~äðëä‹Ù ÜÒn;ÏÒŸ•‘ÖöáQžw~=Ç·÷qïÿ,žÓ1½w{ÿwþïü_ýOW®þ? •µÞúfM麱ëÿ®ÿì¼µÿžm·Úkÿ­ý_}ÉæmÎ^g£¯ýŸÍúgý¿³žÖWÓ' Î×ÿ;½A¯ê‹Ž™õÿŸ7¯tÌDÇL?5tLõºt®õeí¸ßFÿÿé§þ‡oÚ0 ic¥®5°iU24S¨ùÞÅxÉn¦‹šn9W6åçBÇõPgwglºLY“u¾¨ Z±|±g‚‹Ìw K/%­ àJz¸i‡a¯€PŸ½þ,]å ü5¿˜æ=ZÃSHS64ã¯þæéiÝöþöÝÛÓ÷A1¼Z‡~¹ pÃ*I=}±û½N´øKs?òãô‰6u[)Þá1´9Ÿ}x_ç%ÜÓœ—wóÉWš½ÿ{ÿóxÆŠ°óç?³úÿè†ÕÿÇ>Øõ¾LDøÜÃ=Ú'¿Ÿ9.h¤4qèÂ@Éc¼ 9¿˜Ön¥¾)kG›÷W¥Ÿ‡–졽¶]W¦ÔO†9ÐôPwË’K¾òäAÓr÷{Ux£Q^™ï&RfÒ÷þ?ƒ~í_²Üûo§ßÎÿÿ«ÿWÿŸ•r×ÿó¨ñ®ÿcG­ý[qí¿µÿcPÏŸØô—m.=iíXûÿø4ëÿ=ã‚?¶þßyâgýšâ„øŸ£3ÄõýÅëÿŸÉ>Æò÷‡£> ŒŽ È1 ‘s;3ª”u±ŽÍõLC±cþ¤÷uto@Y zê1¸–K]×äU¨2™ÙA€fÎãj²;ìÎB÷vùË{›æ¼Š ôÙiåÜû°r>eeýÚá°y„ ޾äýÕWÏm <ȉ&í›4±4àÖ\äZÿHØBw/§ÝðJzÛ*¾ƒMhÚwé+ ëiø·_ÔYyZWë}?²h…–?€ãi‡WWfêÀ/íØûŸnÙû> °óçÿêÿ³¶Uß®þßõ׿”¯ý·ößÚÿkÿÏú8~ŠÀ©¿±þßéý!¬ÿwÖ‹øš3NØSBüÔé#>zýÛÆ(ôžcýÿõÿG¹ü üçéÇöo âH€*­ ˆ_]]w'”EYI7ðäH1a38gô¡÷ˆš¼òun€ªÓ#~);e4ʋˑy®rÀ«¾· GyfÀO~ÊÚ5AÝv_Eî‹ÿcÒ\e~5Û:}úO/Œÿò«/?ùìõg§ì%IDùv.•'ù:ámoÆ“Á{°ü£.Ê]›²;ìF‹gøŽ¼§GLܳÍo¡õŠÝ³o¾ý&[ ñs­m³€(àX®õ½úñÙû¿÷çÿÎzŒ‰¾ݱúÿì@\ý¿ë¿5s×ÿËA¾`7¬ýgT'ŒmµößùÁuíÿ3.úwíÿõÿÖÿ;v¥ucýÿõÿÿ©ðŸ§_üåxã%zV–q\ò¾'Ìh`@GA"€GA´þ)Wà¤`Oò&”k‹{ëp^Å`®óÜø¼L¹=W=Ò¿üòËùBÁËÈñÍ×_XÿЫo*ËûðS¾u‹mÞHø¢u}ð‚üéî¡m¤¡Õ¾Ô3»ÀÔQ@KmvmwßÉEÎ{†èúsú]ן¾ÃSÀ+}öbdÍ­™?çmDSÐ)/äýbW;"äiÖËW/çȽÿ{ÿwþïü]GÎA'R«ÿWÿÏ"’5g×+éy•€uu×ÿµÿÖþ[ûíÿëý¡£ýØ£?ëÿ­ÿW_¹þ©qQ?¸~*»;>í¯ÿ_»{ýÿ¿ ÿyúýÿü³7R<â¸Ì sM/× GÑ ¸œYžÔ”L¹‚5âž|I™ liš]•QZ¯Õç3’œ)³üÞïý^â·sþêÕ«¤—oë›ÂØØ5½|GøÈ˜ÒmL¶¿ú«¿Jl§”°¼ÔQåì¼QÜþP^]ø‰SfAA¿J#ÃéÃð£ÔN^¿ü(ßö þq&¯¾*_ò‘³åÕ#«ÐèÔ«½ÎÃcò*›x¥üÞÿ½ÿÆÛÎÿÿtÏêÿÕÿ»þïú¿öß±%cs½t·û¤­ý·öÿÚÿëÿÑëÿ­ÿŸzýÿ` ú"xÄø•‚9Òƒ¯)ã°Ž:šÖë¿ ÿyúé¼Ä1ÆÀü¢4P‡ÉØ ¯4¾°çñiuÄÅè¤ã›Ž›ÂÊ'LpÇ£Ž/^¾øäÕËW9G«\Žá+¨Kù¶±à‘n·ˆhš¶ûg—•²‚þª‘uòÒ?h¯>Tö8 ÏÀŸrápÉqo'¾Þw%³™6^Gž¶´Žö€cŒÒ¡IÛ& ç{ÿ÷þw^îüßùOtCuÄêÿÕÿ»þg×ÿµÿ¢GG®ý·öÿÚÿëÿ±“Öÿ[ÿýÿÿ5øÏÓOæXÀÛá-Æ@1P0@¡˜¥;âàš¤€¬¡›?ù _Ë*‡®Êï; tùt(ùvÿ˜ðœåüâ?iêTHTY&)ÛQÅÙ¦\éZ•mvh wN(é€avtMÅøÑÞK^ò0Jÿú¯ÿú“W¯_?Úl+l@«áI&2ë²8÷bym÷NºÚ&¯²V>´>Š.ý;×á7|}éÌç1Õ#( Ðrmç™sA›[¾€¾ê Sû¤Ÿ³¶KYüR×uß>¨gxîý?ãqïÿÎÿÿ«ÿWÿïúo½tìú¿ößÚkÿóMbCM½öÿúëÿ­ÿ¿þÿÿ¿øÏÑJîÞnmaÔ øÊÈýîýùbã©ïùñ½(õD¾ÓŒÔUåk% ‰lÙ%5ü¿ -﯊ð4_N”á'|h/Æ¢)sñÔ×h´­}ûeïÿéÿ½ÿ&'ƘñÑpŸ3ˆvþïüÏÐ0FªG$8_ý?úvæÈL¤Õÿ3vý›i×ÿ¬ôÃÚçPúaí¿µÿk«¯ý¿þ_mý¿õÿ×ÿÿã?°8& `„ÃpãrBL¢†ø×=ÆùõòrÏ+ú÷Èz|íî)àSà¤à #Æ–ËwoÏ;­ÐÛä17´ÆžX(xÁ ‡#ƒ‹‹öœžrÊ ÊâÑóœ\éi÷¼È¼†%º¾êÛ·ß>ÊVò Ê­´$œG=¦g‡ÚìSÿ¯GÖGŸjCÒN:÷Þ+¡ï¨’¦3!»×ÐM}ÀƒG½“¦_Õ-½}®oð.N»'ß+ï>”]ÚÞÿãxïýŸqkL^ó.qÆŽÐq&žA%aÆë5¾vþGÿíü?úÍx¡WVÿ_kêêÿ¬CtÇ®ÿÇØõí?zrí¿µÿc²Ñ×þ_ÿoý¿‡ÏZ?dýÿõÿ³VÞðŸ§?ü¿þ7ÀOç«v}7"i &Fç¨Ö$ʼn44€åjŠ&¯ç¾t§ À‡C\±k)_ÐŒ·Œ—êøôéLè}Éoêw®L­©›Ld ø2å#[còMPowTÝeêy™­-ÜÃ(²§ Tò à껳ȄO!œ4r1ÒÉ/dŸú|Ó£7Pï¾Dç\Gê¾Ú­ŸðT?ƒ/´oe"ÏÈBù€)Á==mœ UN>€Ny´‘shÐíýŸ~ßû¿óæ…¹·óŸ9z™¾è =BgUO¹ìyéRàúÓ¼ÕÿçGÕÿ»þw~ìú¿ö]ºößqÎÖþ_ûý¿õÿÖÿ?›vÖÿÿ»ñŸ§þòoTqPjYM|7´-°u@Æ9T|™¼ûæy7Sœ›‹"΋²c©¯¿þ:À˜tA‡—G ¦È®ÚrŽ9lä«,h¤?ò/'4|oéáÇãšãqbW€(í+èã\YAdùꫯÝ|°ÀRêuk¿¸ñÉ;ï¸`¤œwz…çÐ¥Ú}a”ï¡×d«ß\\/FVéÒÈýÕ—_e·˜4òÈoHÃïoß(†æ!S 'Þû¿÷¿ÃÁXÚù¿óÿ|Íõè Šsõÿù:­5¢úV¼úÿŒk’þx»þG¥vÍï{2]ïú¿öú˜+ôÈÚºäôMlصÿ×þŸ¹±þßú”A/<ôÃ¥7Ù÷ôÐ^þîúÿÿ2üÿ§ŸÿŽ)Xä†7Àp£;0š÷XdÇ U6 ­ ñÒò.¼@ÞÙ=$¨‡#\€(`ЀGè?{ýY”2:ùÒ-gÁ’úQ˜]E5åTÆÐ_2IWgÛ'Mºiox Lêµ»Ênœóø¯Ðè?øÁ'ÿí¿ý·O~ï÷~/rvr¨/õxù<çe²›…üÒ3±ª›(ˆ£„+_ß%Ö¶¼9ðh;Sç}yyý´Ñ.1»ÌÄò‚6Ù¦Êá}vc¥½.&¨W»¤Ù•E>¡åW¦½ÿ{ÿ; açÿÙÝhþ;ÿÏî" gõÿêk‡c×ÿ]ÿ×þ[ûoíÿµÿÙIüŒõÿŽï©?Öÿ›Í ãß²ÖÿŸùq½K¼þÖúÿ7þóôãÙE±D '¡ìãoŒQ;¤â¬ÍËÇÅÀš:³i”ý~À¬ašúùçŸÏËØÏWñÐÛyUK]u[·A÷#LåO¾‚9êr(—²WÜòh嫜sùm£sm"GÁ+<…ÖÕ6¡þÕ¿úWÙe”6‰}æR,£ðwà;—9ÇOÀpI@#?–N›ð½•*wËèFàÉÿ^&ú¥^iÀ«>^èž)÷vCerÏ.yðÁ[¾ ¯²´®öü½ÿÇùè8Ñ'{ÿwþ›ë;ÿWÿ¯þßõ×ÿµÿÖþ;;,Ù±¿×þ_û|­qf8Rëÿÿõð¯n>×ú·§œŒ• ѯÿ6Äð××ÿ?닾øMøÏÓOþìÞw<ÐL4ÀˆZqÞIøð¬º ¨LËŠå¡+ àúÔ#w ÝwÜÁ|‚rŽÖ?xÍn¦KêÉû¡Ç_¸×¯leq®~×Bä¿×ê!ÿä›:xªW™Ôu)å[ÏÊÊpí9ú¾Ë MA àö»–_¾}l@Ÿú >úGŸ iúMû=¶Sà°m“Fxåð–.ö¸ Çzäé¯ì»ÚÐv¨£²ßcéøÀƽÿgœµßöþV?ìüßù׿Õ)ÆÆêÿó#Ðêÿ]ÿwý_ûoí¿µÿ×þ_ÿ›iüA>Åúq5¾h}Ïõÿæ°þÿÿþóôÃ?ùÙˤœ{¬ HcPÜ™4Á¹‰ØÉøâ弄sÀ’>qxB®ôó(ÛA˜\À©-@Éðvð/p¢¼PÙ8ʸоzý*×Î 4 ø$\Š¢m;‰ÍznïyÏî$m@_žÎ9f÷6ÊÓÒ¢Œ^¾xùx§Wv[á;!ýrõ›k<Ò§7ç|h¤ ü´¥}®>íïµX¹"“òZ  9?ûì³€[ÝÆ7òÜã^·^y{ÿ÷þïüÞá¹óÿYçV÷ЫÿWÿ[ü¬A‚ظÈÎÞ]ÿŸ×rý²ëÿ±{Öþ;ý°ößÚÿ£Öþ_ÿϺé`[Õ[ÿ/&ű'FW®ÿðöUmðõÿ_}òôû€•Gé뤙I™L&V’h:ÉÚŸ>ZéÊ´,¤­4÷Ýwó>§>†84ò²‹hb_ÏÃÃ;L^<:©ÉÔt´ï‡ßH™44@AP ô(+ã Ò´áæ-Þå_âÙñ$#+Ýyû ¿®Tfu“£m{ÔC91Þæ1ÁÈ7×þ 1ø'–Ž€¨ÉWOÓZß)sƦ }ƒFùÊ(½/Ÿùê€kê«C^žèÈ+]\~å³÷ï?€ö>îÿg÷¥¾Øù¿ú¿úzõÿ®ÿ»þ{J?kÿ­ý·öÿÚÿëÿ­ÿǯ¼ÛHžZÿý¸Ãßÿyúwÿù§o€0v\xÞ²à£ãÀ$6' Ð2ÿèB¢¤'åEò z4¯´<ÆŒü$S½OfÚ,¡c÷ÒÎŽ¦³ý8 »À#<ðÄ_º£õJoZ˜ t`"õ â¤IŸC=WÆ£½'á¹ þƒJúJº~{5àOÚAf€ÐÇ«¼‰S¥´ÇKÛÈ4•Ö >ò ͼԭí“FÞ¼|=§ÿÔ©ݹÖv¢U¿XxØåööÝÛÜG²·ŸÐíýŸœ{p„«w÷þ·?2Of€+$=g§¯:ÅÍ+íÎÿéÀÿÑt`œ¬þp|õÿ®ÿæÃŒƒêX‹Ñ®ÿkÿ­ýw>bÄþfÛ®ýžDéú¹öÿúëÿ=?5U¿ÖüàÓñCøÖõ‹ÅI“>š„‰ëç2Öäõÿÿ÷ôÿ²Ë scÝ$`§ÂBQ'´FUo¾ëž?Í Þë 4Ƈ#‹§pç{Òçqù§~!gÇÇÛoßF4êi]@®ÐMzyçzäÚ„ÿÐ×100[>ç\|5«Ž%šçê-¿Ê,½r–Ö»¬ RéõQÃ*_;­Ð´ÿ,>iëÄmGh#Ç‘%u͵þ¨œêª<œÊé—¶ ugŸÇ#û¼[ìƒIŽÙ„äíý?qõÇÞÿkžÍ˜Œã®cËyÓïü?úgçÿùEɸ©n[ý¿ú¿ãAlŽìú~Ðë¡G­×óG[c®wý_ûoí¿c¬ý¿ö?ÝèkìÕ›¹žõ¤þºþßy¿²¾ðT”µÅ»¥×ÿ;ógý³æ„ŒßBÿlÈçGõ(„³£èUâGšx\ÙcPåWói¬F;(ØÒ—&áJë9ÞŒ2^R&f§}ûÍ·Í<æöÙ|Õ/ÜæÏ_|‘ þ¡Eê:ƯIù4 XÛ’òX¡òhð¿F•#1>9¦ýݹ~n“zûˆ ¾h;Q}§e`G“ _|ZV{õKÀ¼ËáG#ß®3òV¡$ ‚[@—w[MÚéé“©\ÛÙ'YÜà¼õ’×ÂïW]镹}§ÌÞÿމsÿzÅ{ÿϨ2–wþïü7¢s.]gt¬þ_ý¿ëÿ®ÿ±9Îrq¸ë|í¿óƒîXûoíÿµÿÇW™ÿëÿ'‰Öÿ[ÿßxöàϹþÿ pëÐ?p‹à??ž¯28ü:îÑ=€Mvò qÁ ‡e åñ>ý:\€)ò84½®sswtJg—Æ÷æ]PQàס7¼Èr~a9‹}™¾„ƪ.à Òˆ|•oÒ0^_šÊAÇuYûý?óE0Gœ¯ÿwüÚ£+¢*â¿V‡¬ÿp :V0f~ýÿ§ýéÏßè€,40âëbº§«É¤ƒМ<€•>bçñ=Á3¶dI¸þ´Á3=_#Ì×ý€O*;ëÙe+©ïâÑ›uç+?rÀ”/\L¦I攟tmCãº*‡´é³2™øž€rMf² ®çÏã~6íÞvò&ìýôûÞÿçqg¬ìüßù¿úõÖkß®ÿ»þÑ;…2çkÿ{Vo¬ýwìèØßkÿgžÄ?–öqµØæŽÍ~ì­µÿOŸÐ+÷þêyújÖŸõÿÎ@Ò=Öÿ;8Âúÿ¿ýþÿÓù‹7Ǹ0Ð)ƒA©»B8ÈfÑý!/@S’ÎB„WÙ àAþCS^†,Z÷<åò¸ÛÄ~‰}¼0^ÅW(ñýh¾øH2Àù.9†øQ?eÕ_ÀŠœKÏD'Ó€žîæ¢TÝdxéeñÆKP‡òBR&¯¡ò'ï*«?Óö‰ÉPg°|[&u\Œp¼§;×vußy—¦`›ëæljïÇîÞÿçùeŒ<ÆÊ0“pÒvþŸ~Úù¿úõ¿%p׺r×ÿ£Ò3&îkˆµUXûïÙ&5okÿ{{íÿµÿ×ÿ[ÿ/ ÅíOýñý¸‘¬ÿ?}ó»âÿ?ù ¡…Ó]¯ÑÕAr=/X’kˆ²"€ÍmP•ïò³()_PÇûRZ¬7sôZye ( ÷œ——X^^<>L• è@ž Í÷ø_ ƒÛn*åʧe”¯¬ÍS:¼ÎWSÎãQ‘Q»' Ð\õ胀NS‡A„äœ|¥ÔëH_L,Ÿò‡ûä$»ç¡ ý•¯¾;_yå§\ù7­ù¶ dIÞ0ÞûÆêÞÿ3¾3@>úÓ±–ä;3x2`wþ?¿[nçÿóø¡[ªkWÿ¯þ72výßõß»ößÚƃ]Ûúºf_X;äÅfkç]KÄ®×þ_ûŸdìÔ—3v:>Öÿ»æ;}BæÒœ¯ÿwlÔŽã§¶jõÌ÷Ÿ]䯓ףDGñ{®¾|ЬÿoÒ¥Ÿª£ÛG½þç°ÿ?u³2˜× oÅb•7½‚˜ çΉEe¢ï柣†ÿµ8Iwí0pBº:zÎÀ-´×/¯ÁÓZÆuù}:âÑ ýÎÏ#„oß¾ t„yÁºCèÀîà½×áü÷I ÔvU65zÆO;¶äËk}eg×ü»ËTßi生‚ÏNþù÷=é€\ò•WÎñ1¯{P³ìégaïÿÞÿØ×˜2&îcè~ž¼ùó˜Æõ\ïü?z­swçÿè£tW½W=¹úŸÚ-¼úÿ±fuŒìú´ë®ÿ<Õ­­Ekÿ­ýgѧ£S6 }²öÿ‡shíÿõÿâ‹®ÿ}±þÿo·ÿ?ϽqFGéÏÿ ì h‘ÞPVÜCž#Ê”!ßûõY@yÇÒгÀ-}®ÎË‹O_ ô.ùÃ84]xð#Ï=®‘SÝóï»y±zéÈsÚ0;Ÿ&½õHg—7Y쎒n‘ë—ÔYÒ¼äÎÑÏÛ¶Í­§r ÕZ]6HSoø f÷V¶Âz¾òÔ}Ê\õ_¨nyâs¯çôæÅýª¼î¡å¥§®X•VÝBó#ÏôûÞÿ{ÿŒÚù¿óÿoÑ-Õƒw]³úõÿ,(YWvý?ëò®ÿXZûoí?6æÚÿó#ûÚÿëÿÍ\XÿïøÇ †õÿG7®ÿÿž~ø'?{Äiì@‘vwZœ£½;0hÐJj°œëX¡\Ùjç0dQ(Hø?FŸXžCž2v8ðnÝù…VCO# ,”Ê9ù÷£|û ï=ÏŽ+åòxÓŨ!¯ò§=×±ž§²«¾ÖûêÕ«Ão€4t@2õŽ@‘·u“ÉyË©×=Èõ”;'ÓŽ<¢9WWžX¹na<„þM{¯:û²qä “qÃÞ; ÷þw}ú4õ@£LQÊ-íÔã›·o³’ õòå‹ZÙÃHÛL9•¯çÊšÛŸ¬vÓ>“çƒ: ¼­·³zÓ?ÿZ§:åûü÷ù§{éO·°ãÇÿêÿÕÿ;ÿŸƨÆÿǾ[û/³äÚkÿ¯ý¿þ?jý¿Ûb’ñ;ùšëÿcýÿ)`W€EüCà?O?üåÏßÔ¸(û)ì¾oUÀ«é˜4³îB¹¶€¸Òsù ° ß Mf¹ÑJQiy¥M†ùÓ{ç‚7®m Þ8´¥+“Oé¹ÄøÓÙŸ«ñh|¯5 ‘Ug-ËÃÊÿ^/ñî)9g|›Þº4_åúøÞ7þîùü"§6  ÀVÞÒÈ Ÿ¤‡ŒÒÉ“o2<òTž}þ§¿jCmµÏÇÿŽÿÕÿ«ÿwþßùÿlanØ5ÂÚÚµÚ„í°öß±Åkw¶]œ…Úœkÿ;\;õHûÜÚȽ°öÿs;´=î>ÍúÇ7\ÿïà s­õÿ»ýÿ¼B˜›gô›8(LÆy•€s•h”åÙ”0ü˜|GA™Ðãs3Í/o>›|+&óü¥·L Èïv8ü[Ni‹zã#tCjâîi½F‹çìK% tMgòÛûÊX•ïã2Ðy…HÀK^Çà/|®ºõ?éßÎj(¼çûq"ó7ñ÷¶¿ó¡"WËóú¤ç×3-¿m Ôªœ-?u™H#¿û}þûüõ+}ÄùÞÅíø?:fÇÿêÿÕÿ;ÿ›k;¯v>öÃOç_:sçÿµÿôýcí¿ßœ7/4Ȅؠ—­»tíÿ´‹¶¸Û^úNõË$$­÷µû{Æ úgíÿ硵©CÛ¬ÿw½éWëÿ­ÿÿÛèÿ?ýá¿ûÉ›L3¨)EÁŠž*KÊ/ ÆÄ»Îà¿VÅH›<:?­é¡Vx¸¦,äÓ@@_+RQÀs-½eæzîó ßäC‹—8Á¹å9¢rNbhÔæÓ («2o~‘mdyÿn6Š:€U@²)§hë%½²Ê[Y\hðU†üdì⎓“¯%z5q^É,oy*Oeÿ8®÷Î-³y ’G»Ù4WBy¦}&ƹíˆ@º#ü&ÿÜ$ß>ÿ}þíkú̽é+ùª¦þ4}»{ÙuœHýŽÿ´ÃŽÿÕÿ«ÿwþßùí?«·×þ[ûíÿõÿê×—«íþ×{çÚäM_ÿïàño×ÿÿ½ôÿŸ~ðg?{µè èuŽ{¡éh3˜€® ¢¬Cɱ§wþ¤A·Æ™ ¿Ü\TxLWîÚknÙó ß™ðíÍdÒ0tÑÝÁ¨ä‰=7î^Fãœåm=#³çtÒ…}þ§]÷ùïøï¸ŽÙñ„¿—®«ž¢o\¯þÖÉš©íãºá®›Wÿ³Ìõ§uèÜÎsæñ†¶Yh¯ÈŒÉÿÓ÷vùÛÚªé;ÿŸÎ£Öþ[ûíÿµÿ×ÿ;} síúëÿÑ‹ÿøÏÓf,ï€ãD `ÐI˜I(ÂÐ Ê9‘S51Ý -îņÐ>GœüW95˜°©¡ä¯ò‘!åCãK™¦‚kï@§nsOA¡å~7@8ôW}?¡@Í¿ïÛH~ø54|­´z_ÒåK›LCø&ˆ÷+¬vdøà#àqâÅ}HÙ¤g™0õ˜ûÊ$O¯µ­l•%ñ©ÇùÌ&¬SÈ£M’wêºÏÿô÷}þÓy¦ìøßñO‡¬þ_ýoÊ|{›?3¿H0]óIæ°ÿwþŸ~¢¤?\}CÿIÜt™µÿÖþ£:j³öÚYXûÿ´C ùërkíÿ¶Åœ×ÿ[ÿݱþÿÁ ªK_üÿ§ÿù½Ñ `@OcpPÏ‘§$jx¸çÌ WãDÃDЙ¤[ÍäZp&|®ü¯ZeÕ¼å xzäE7÷ҔײZö=oËr~Ä_òËŸcÒ”-_lää ˆ šû–U9¤ ÂÓ½4A¾È:9í¯%¯×½n…®KÉC|ýAÓ2äM˜‚ûí34÷UaÚ'üÈ2m*Ä(¼èp±ï˜ÜåóÏU¼{GW?DÌntynC»ÏÿôCí¶ÏÇ?€:ctúÃŽÿÕÿÔæêÿÿ3ŸîüÿlÃ-±ößÚ±#×þü°m¾Öþ?¶½©¬ÿ§S¬ÿglðcõ‰Ì©ãÛ®ÿ|öõÿ§/ø ¡bÿ'«ot’t˜Gjpä|)¯Öi¸v¢(0‡^ü]»w0êг'ŸOK” (ºIô¹;ñÄÃ9ÀÖœïôÀ–»,ásWýjâdNý¤ÕÉh'pÆÛ@!êÚZ§E&ÓUvÚè*¯õ"3¼ÚÔj+íÚr€Wymñ*«ù;8ÉPþÎdW¾¹žÌÑ8t•_X™| íìU„¶e IP–‹}þöÛç¿ãÇÿèàKÇw<Ðo®Wÿp†.¥G«¿Wÿïü¿óÿÚÌ©µÿžŒ5—:ª'ÙÐkÿŸâͧm—Úækÿ¯ÿ§/ôÐGÖÿãz¯ÿo^I»sýÿƒÿ<ýä/~ñƤ[PCG±ÊÇDãú>€Ð$mè¥dÒVúkîå×ÈèÄI'pŽäm™Çe~¤b¢CŽ–“û‹Gø OàPW%‰û8T~g|Z¶û‚?Î&[ò¦F~×/>=Ÿ'·|â’ع²wÖœ•Yß@'¾4&«Ç«•Ùß묌 ƒÛŸÈ©îWû‘Å¡1¤9Òæ#O'À[ö”­M’ï–@.ò<ò Ÿ>϶Gê²Nþ¶6hJ®rD–}þiim²ÏÇÿŽÿÕÿ«ÿwþßùí¿µÿÖþg®ýÏ›[ÿ¿töw^ÿOXÿ_+<>$ÿaýÿiƒi–â iØÄ~=˜ÃÀçWä€À WCÊØý–0“V€ÙalÏ%ù&5™“’WèºT­r(ô–w??²OYVM¶–•"€âõÃæld¾ÂãžüW<Ú1ÆîçÏ)gîhK㺯Š{ûöm&"F EôúõëTÁ ‘UœÐ2ô\ X&³«­*ZÏ@ ~“/5 *éÃ0ûS‘WpPšý{’†F™­Gù£MüäÈþSVêŸ\ûü5Ã>ÿ«ïhŒéÓArìø?{Ûíø_ýOw¯þ?z‚š #2ïüŸùhe>ÞùœöÙBaí¿c_®ýÇG8ݹöÿØWþ³³®°ö?ò Ó.|–Ø |ÑæšœÖÿ[ÿÿºþ¿ñR½z†ÈåÃ]ã§úåwÑÿúÑìu1 0èÔ&\‰Ñz*iîÏùR8èñt²CåLY_JÈ}°eUŸårWžÊ"NyÊp¤5]¾”?ñ}¸Çõ:<+“×½&ؽ¢8&@ŒòàY€êÕ«W€X¢Ôã’×lð@+D–‹&ÎϤ£cèÖÈ áE;>êòïcðê(qrá>õÑW9îÕ¡m“ô‰{7õ³iýÇi-ß9´sÖ~ûü÷ùwLéÂŽÿg{Çõ~Ï«ÿWÿŸ7óoç&óÑ\G—Ì5Šÿwþ_ûïüÈ™‰uþ°½ØpƉcí¿µÿu‰¼^ûý?jbý¿õÿÏ|Ÿý÷Ðÿÿ4“ä€- “¦Éðñ½ ¯ø1:iÒ × 2¯Žš|‰•0Ý Ý\ÊóŠ]iIº4|†–#ü~6A–CÜýˆñ–—Ñ;×å}.O º:ƒ¹ñá|ub( ©ßH‰\µLÄo&Ã÷ôi~y|}p8¸ øc5Ö_| å¾€žyÅnÊL‰¤ágÉè0J@#xöq@+ºZõù¦½õP§zs¶©“€ÎÕ´VÎ5 =ÇÒ¸þõÈë>ÏwòÜeLû\üöù§Y÷ùOÔ/Ò§¿;þwü¯þ› Vÿ?ÿP4Š"ó-q4ÅÎÿ;ÿ¿¬´IÿÐ7Ì#ÓWÖþ[ûoíÕs06ÖþžSî>É(ŽÇ¼2ͶþßúF~"Üý6ˆøõÿOÛü.úÿO?˜Mܺxøß?fgÖt@Úu'Üir*ítëNS°„b®A÷PÔÃYù¥i¾)`þ?¯ Ràæžÿ.C;îýŒ—€®Èõ‰M™î8òY™h,•ÏË© €ü»è¾ùæ›O>ûüóðm^µÖFá3àT_1ÁO_w h5e¼œ•Y6¼ó Ã?eDØH‡O:Ü”Ù@†) í =-=g×BxÌçËÝ÷× íÈç²ãÇ¿~@gT§Tï÷,]¸Óäž6ŠªyÖ7¥©n_ý??Z¬þÌMúƒYsçÿÿ«#ª[FÁÌÿµÿØ— kÿ­ý?ÊsíÿË¿©}a|Ôß¹Ÿã†t0òœp~Äw_ný?ô¡mW»¯çÓvÒ$ÏÚëÿÿ/°ÿŸ~øg?{cÐÈ5"ú•¼Æ1&Ð?„ÒWYÈ 9÷Ïï¹Ëo#²cŒÅV|ùt)h"î¦Øõqù@IDATû,÷è z£<¤i/ôÀ¬–ƒú–áü¨Ë•6‰a ¾åü§-NÕ¦^d“&GxMÝRÆÜ;ÇšôðºÀ¹´Å)B¦“Î-«mƒŸ¸Òìóßç¯c¦¿]ý&ýjúÈŽÿzïø_ýoŒôåêÿ3˜KíÑkºcçÿÿcc¤wÜþLßXûoí¿öÚ¢t†ÐsuÉ=níÿ µÿ¯¹fý¿õÿÖÿŸ¹äwÐÿìe"°*ˆ#ÚÉà>9Ôð¬ÃÊ8OúÌ'2s`¦4™|.ð¤¼ÄIï}ó(3Ïœ?þEVZè'š(¤áãØ ”iŒ§CZ¾x8‘ûoTú™ÿ‹ª‡WñGlòÊ£ø–Ã)íDê:´¡ýæí7Ÿ¼|ùrVU½ ÈØ’.îÈü zà§ ñ)g68­‘VÇWZLý¡k½=¿DjãGÛ]õmžðÞê–:éÊ §a&ŸÃ³µz¬¡ü*Ó>ÿ}þ;þwüÓÕ w]A7‰§7Vÿ¯þïü¶óÿÎÿôDl—›Ž 'Fa| Kjs¤ïÜòÈl–µÿÖþ{¶uõ áèšµÿ3/O{8¯ý¿þŸ±‘>±þ_ÚÁ²þçÒ™I~Çýÿ¬À2a:~}R12¬ä%YÐ…Ã"ÜéÙjŠT«‚«® BÍÌ“/ÑH—ÇÙkò$JžË1BßN¹æ^ž”qC-Ë’O<3€/º³2iʼ@(¼+_¦–§tÒ)÷ÖèÈXþ΀'´d1}:à—8+°^ÏŠ,·{5PT6ùêð‘ýýwÃcÀ$ùÜâœaêÒ@f´wæÆŒž8tò6½ëƹn=KOx÷É7‘JÜç?ÊoŸÿé;;þ3Vvü_¯×®þ®\ý~ÜéüºóÿÎÿµ¯Öþ[ûϤ¹öÿÚÿëÿ­ÿŸvüQ_¢uÍfp^ÿý6ߪ˜D1‹ÿYüçé'ùÇo€ö°bç»÷gÿ&¿ªZ™$H·¢¨+•€4:¡ÍÌG“`„(RãÆÊÆ?>å‰FzªVÂYð÷ýµÑ¹UHïßÍô8R“.íÈý äØp>¯û]ù"ËE§¡J?QϲÎu±Ì}ãºÊ+@ÏÈ‹&¯  Æ«´ùÞ^«¯´ ùäM™ œ`•¾mqø},WËj|îOùêî,͵èÚþÎùœÑ)SÙi?† êÓþá·ÏŸÿŽãeÇÿ¼ò<ÿVÿn•ouòêÿßd¾ÛùçÿµÿÖþ[ûí¾Èúëÿ±ãs_þ)›©¾îúÿëÿÿcà?Oøoü†òêÙ‹O_< ©¿63ÚuFÀM;{Wi¥éÄ=  à--å ¨${¤X&±ñ=Ü+8Ô_z¥YyÕ²†8 Rdz2£NyÏÏ=^Z–§âZ_¼ÔEºsËt lh Ð{>å~õÕWŸ|>›¼«·tü^ÌñõWg߬·o߆_óºl ­ŽÊ*kÛ2qW|å­ m[4e ©ÇµªÆ}Ê™²*û>ÿçUrûüO¿Øñ¿ã¿ú‹ÎYýæ·Õÿö”ÜùßÚ9¼vƒ¹uçÿ@[ûoí¿Ú¨lݵÿ×þ7‡Þ}›õÿÖÿ3wÖ·uøbëÿŒD‹ÜÛgýÿÁMþ¯ÿ÷ÿÛkÖ_xóÑFå5ÐL>V1ÌlsÚ˜:Z^Ý>]:*­tOæGè¾Kþe6´{%O(ñFç¾ S˲*jÌ<éüJ…§õœÏú-Oâ~MÂïÖ§¯)ŠÃ‡üd—§m&ŸxySèÐÿ³öÏrÖf‘s&oÆœ|ß~ómøÈ×z’Á½²‰[Yð:2Í+€SôêÙ|ÏN(&Í>]ä-]òOüD\ÿ> ç‚Cx¥^ó¥<ÝàŸlS†ëòEÛç ®×m»Æ¹wTö´Ù—r¥· tÐ^å Ë—oåîóßç¿ãÇ?ýJ¯¬þ?:Z[TO¯þ7sœ°óÿ±/vþ_ûψXûoíÿµÿ×ÿ»¦Çõÿ¦!Öÿ_ÿ¿†qÁ–ØÓAÜÿyúélân‚ÍèéùÞ¼âvÖï„GþèlŸÍö¼Bôy5€VAÈæ¬0¡Ê_aK  í|OKÆþ ¿oR®ìÉ–Î^sp X5gÙËÖð¶bìÓ'û?€K¹œ â4oê?ù#Ï•Ž?ziâ]ã/^ß›û¬úRÂÄYyeµ“òÑshºLZyÚèW¿úU^+”fõšUkÚ¨¿\¡ –zžöòX Ê}Ô<%Pù[7Ȥ8OòHëYÝ4Ú.ùçÚš£}þ§ìóOÉ}hÇÿŽÿÕÿ«ÿwþßùí¿c®ýwÞØXûí>ãúëÿqÖÿ_ÿ_?ø§À¾÷ŸþŸÿü›1É^X€H3'¸¡C:܃>^ÎëoßÌNñ “V ‡ðLfÏ'6&94wþ@è*£Œ¦­ò#ËDÙÐÜÃï€4Ò+CW{¹Ï’ÖK>`•U§ÞøÊaqÊÂS9€ ÷âÛäL› AùuàFÞ«eÕSË,O÷ä%ê—RN™x &åïO[‘LÚÈuêˆà*ß}€¥+Í}¼¿!ùõtb호Ü_rN^ ZëMžÒôŒ§x ™È.4]šüäw=D‡fÄ—§í#üò‰ëëA½zíó×Jûüõÿ;þWÿ¯þßùçÿµÿÖþ‹}|ÙžlņµÿÿÁŽ^ûý?cC_p¬ÿw|)þD|ÓQ|PÇýž.©ë:¾ü¥käM[^ñü[ùµõÿŸÛí÷ÅÿÏX:‰NР“íD2 Ò8gFœ|}ÍÝ !º8;:Z_ôø¥óΪ÷è£8G/žÁ.¼¿}7«‡.¹ú@œåÅ?éŽvlq1PÍ5Xæìº PR&ݯf‘Wú9Üãoå“×üð~V©É3éÎMéåq¸'9åkh9ò™è}ùÏ+{Ê$‹¼Y=¥üÊ€Jâq¸Ý©|ð¾_ßÛX™§ó*á%Ci¥ á;e Ò*³:h72hw!í;ge‰“oŸÿé/ûüwüïø_ýO'®þßùçÿµÿjK±j­ý·öÿÚÿëÿ­ÿ·þÿúÿ?üçé¿üù‡‰–óå ´¨3î\CŒQn."ê•=ÎÛoÞšh£ðð¼›××^¿~ý˜¸Ñœ`åÒ3(‘ÏŠ­·_ãu0—~õPyd KžK¦Ê¢<éBë6÷ù{€ò;¸Œ,@¡O#ƒ¹.ÿ+Óƒ`šº©“=´"ÛÈÑö–fÙépV ÍY(ßÊæþ~&2O|PªSXÊË/·z›HñG_>ÊuÝ£òìó?F¨öÕ°ÚlŸÿŽÿÿ«ÿéÕÿgïܳóÿÎÿkÿóØ Ç~`W­ýwì'ºbíÿµÿ×ÿ[ÿoýÿçmJèÅõÿÏW¯µûÚ¼ù7ð_!dx2:5Äuл* ]v ÙŸiVåu³IG+¯N®)&|a® ÜLäÒ#Ãäûƒ?øƒ\ãgStÂK¯ &;AeÄã0zñéó«w“<ÛÁ0×€+÷xXUDÎ/¾ø"_Xôˆ/xƒÞkÊ!¤û€Iá<®*‘«M~Y N»ô¼¦;+ÿ†ž¬ÊT{öìÒ.Ú ÖðAÞ‰ŒlMœ³ò¼iU1‰»‘œ¸ù‹®ù+÷>ÿ}þ;þxkLìø~uT{8Vÿ_Útõbçÿÿýмöß±¿Öþ[ûŸ#¾öÿúëÿ­ÿY‹Ó>üØÓëÿL$ÄßÿyúÃûã7€‡àl( Ÿäè¯#ßÀÒý™B;m_§æÅ¼úpa×7ÞjŸð›³8ÏýýH¡×ü¿úòËE}Ð&Gó–¾@ÓùšßáoW•®@MW[Ù´Ü«yݼ¼ò ›ÕNßÌj¨¯¿þ:òZ•0•šß‹>X5Ö:adk9¡¿µ  õý1òMÚ=Dj;£Wnƒ!4¢‘^ZF.d×öÄ·@¤:>BÊL%&*O(µi<<„´Ç>ÿ}þ·> \Ýñ¿ãõÿóªÕÿÏóüÎÿgõrçg6Am§ÿÏ>žkÿ­ýW¾öjmΞógíÿw±Ç×þ?>•~±þßúëÿ¯ÿß¹£sEñŸ§Ÿüå¿ùÀ¿€ € çÝ·ïfЧŸ|6¯z%€3Û}Ÿ0u}Y¤ëpŒ9Æ[yƒM â[¸(÷ø8{%ñ€Fgµ” ­Pžø›Ðuðo@sç-þÓ \s ²ihP’¿ï!«[ä½ä(¯6œUc÷²ð“æœ]uQÏ!~з Bxý!ëN|Z¦er¯_x6lÄËß²Îë‰çõH¬š/²i‹‹>¼§¾÷+i¯Ñ8<ßOŸN6­¿ìóþÚ˜~¸ÏÇÆÈmwLŠÚñôéêÿ£[GÙ}«oÜ®Û}VÿŸ9¬s óÎÿgÎÙùí¿µÿæGæµÿcß›?jk¬ý¿þŸGÖÿ[ÿnPÿ_ïú÷ÅÿúÁŸýìA ÂBG Õ7ó*pàã@_p*«.‹jLø¤è ï¡ÚÝ4ºÃ$ ézâðçá%½e»Æ³eóí7#ÛyÍï_Ï€˜²CO@ShžnÀé-<{Ι(ÄMpN1×äqGU ‹x¡çܸŸÄO>T®Ïñ!|Ë«uSà°í‡oÀ·)Óʪ>+ñÚb„;ûy‰˜ë)è”[’œvO}&½Ï 2’«<÷ùø|4©öÙç¿ãÇÿêÿÕÿ;ÿ›:gw~pnØùí¿ÚVì±µÿÆff—N¨í¹öÿô¶øÕ%kÿŸ- ØÛëÿ­ÿ·þÿù@½¹þÿ§Ñ“Õ‘ô&üçÀÊ* ó ž_B£Xg…ŽÉÀT%{@˜³oö•²"êŸ=ãå>ÉLœCÞRCP¡Ä”-ȇ`VM§’l&D¿\J{1 —x`ŒRÑáí5¨¹ ?¼ì/åÕ>éò9È"^Cá׺Ʉ‡Pµò7¾³óÔ,uüÍ´_®¯¼‘iäBß<½vVõvn½”çúÞ~­ÏCÞIä”+]Ç•ø¹ºêßrñrx3ò*Ÿÿ>ýqÇÿŽÿÑô ÝR]áL'­þ?óWuùêÿÓ/Ì=æãžµÏ}þšÉï1š£vþ?í±óÿ³]´öß±k¡µÿ˜­kÿë ƒéÔµÿ×ÿ‹¿ºþßúÿ£~/ýÿŸÎ+„áhÆ9Î/$]ã×f›±k4”gŒÑ dq-ޱÊ­‚}ºh¤›€B ÛæMúðN™ƒû<öŠÚÒTž–Wåé^Vh@/ƒÚaø¯¾þê“÷ïÞÄ?©KéºI3þ©ã¼nˆ·tÀ:•¯3´®çO6.­ñ-Ÿt_W”¬ÏFûõõé§ Ú…ò*ÀD¶†¶°˜¤Lq÷¶sMŽ–‹ŸçÙ V“†'¿þõ¬lÙ*仸îóßç¿ãtÜŽÿ£3F/«ÿWÿïüìŠÿ×þ«Í¶öß±—´;ríÿg;|íÿY=µþßúcCÆ^ÿúÂúÿÅ4Ãa‹*¸çãÿyú—ú£7ñV8,@ë×k«‘Ð芯@' ^PJ'¿-Xí` è2g•hg—žøÙPýå‹óº _r(C™ÎVHeCöá[Þâòjè}0r)gâs=¼Z&ÚÔájLr†n╉N TÊ»€$+ÏÈUà2¨°(R\² “k…ÓpV×)o‡p$ÎeÊjÄh¿Ê Œ¶§¸|¡°îyð+Oexb4äšø§ Ò{ˆëõ>ÿ}þ;þwüGO^z¡zèÄ­þ_ýûqË·óæØÌ­Óg…óÎÿÚcí¿µÿbŽŽ`cÖwÖþ¯õ¾ö?ÿdý¿3·®ÿ·þíîõÿ/üçG¿üù›)yehVéÔø4™H³ª©Nh/õ¾H\éU¿€«  Ãeà!é&.´} ½ï„ælÀ¾žÍãBÀ¥)›BóÑܯV€%“£ÍÈK“‰qâ&"usïP~@'ç %U• ×Êvî=PH~ñ~q¯¹~12”=þ-K| Ù‰S·{ˆŒ÷ˆ®#Ïհʨéñœr¯~Wøø>ÏsÒ=¯³Iûy6´Gëöù€uŸÿi}Bߨñ¿ãõÿê?àd®¸æÑÿwþÝ0ö Û†M£ÔYûoí¿µÿ×þ§#ø/ëÿ­ÿç5/óCýýøµ·ûõÿ–¿ÖÿÿÛñŸ§Î&îàŽå¯‚NÔæ+}6tçÄvS5)½ÏÓ³k §Gž$ÊPVyßÏòaß´ÍOh°Xb‘ØÂ›¡”¼sí, £÷èzH¢‡üê¬î'~”íl”îZÉ¥.{ –ûÇ1ñ^Ó+PÀhâ’oÊ PGÚýbô0| nyÐÕS#îÅ£¼¥{ñ‘WÄ-T¶F=è.¹•åy ëõ>m±Ï¿}GÿÛñ¿ãõÿêÿÿwþ_ûoí?ö'˜à,8¯ý¿öûÁúçàõÿÖÿï|ëÿÏDñ€ÿ<ýàßÿôF¾;­5R´ô¼jƉé¾P€à”‡`Bo° â8¾â€GîMz›t×*‚vŽ÷ t6q'¯ø<å…°yÒ®VýÐνòî)RGiΪ#8ÍLº³A»´Á)Îý\GÑLZêñþ¼êèZÝ>ûì³”H’GPŸß›W•YY[ïÖ½kôS~ÊLë9äë—kôÍ«­ì+&í¾ê ÿy4Bï[nydo®¡!¹öùU{}·ÏÿÑoÒwüïøŸVÿ¯þßù?Óêcî?sçÎÿ™7×þ‹­¦-ؽµ¹ô˜Úp[ûïØ§þ®ý¿öÿúϾý±þßó¢èÌQõi×ÿ_ÿ__(¶óô“ÙÄ]'é_C¯½fök&¨¼ú`ið•];škÍFéâ”ap>hkŽ §ü)gÊê}²´ïÏ ,÷ý: ¡ 0çÛwßÔiÀ!åÈã:¥«ß-S9øYu„FÞÉðOåOù“f¢˜9÷—ÈÊJ!2Ï™lÂYa5ÍܧìKiä+€ä^Ù:GCë$5ü[‹^>Ô'÷sþ–×v(_üî×­_âöùïó¿:ÞŽÿÿºÂêÿó#Âêÿ™O§?ìü¿óÿÚ¯b'Ðì§µÿŽMù°íÍkÿ¯ý¿þ_|¶õÿÖÿ¯?kÖÿ‡YÔâ`7üç釳–ÆÕ € Üô—¢-èLÖ€)˜3Zù ®F8Býæ“Ï?ÿ<àLù[±„‡_ô×øË/ÈWîÃ{* 0ûæí7¹? ”×çæß•Qõâå| qÐrõàˆ—Î**u˜?XŸUW‡ŠÃ>ñÝßÉZ§Ö/û_]`UŒ–)»m€Þ}•0é'òQ¿¾ØN¬Þ!!ôùÙðé¡lt‘{ˆ[_çÊåºñ-ß\ã•BNséÏ„òtÆËá/Ï@¹dunšz©ó>ÿé¿ûüÓWÚõŽ]g÷;þÏJÇŒ×iaÇÿêý`õÿÎÿúÁ±=bìü¿ö_æMs§ÃܺößÚÿú‚P;?öÄô çÒ×þ_ÿO?Öÿ;ow­ÿ?áÒúE‘€ê”Î3õñé“ßÿÿÉ&îU€­P+’És КàÚ:«â Ø ã ªäÚ–!ÎSò:ü¢{o@éÊÅ#|&¿{¯¹H‘¯2 ¯,Î@&<-c ?eK"‡<ɦ ÇËkå•§ ¨Á£u’É'­ Û­Ì‚²çzÒÔ _üÑž"O»«2’·ív¥¬Ò;ã‰/´Íß:ÛL{Þi+s÷ óÏïW)5m:L|Ÿ‹3žw>Êè¡—ÞжoÝÄ·m«}þûüÓ_ô}nÎíC;þŽÚñ¿ú¿z³c¥c¤çÕÿ;ÿïü¿ößÚkÿ¯ýÿìcÕ1oÖr®o¥­ø'ñQ.߯×ßãÅÌýú|ÁõÿÖÿÀ¡6çoƒÿŸMÜ *´U”óÅU9 ï+vÒ,í@aˆë¯ŠEóKûö›oË ªòÁ³F»8ÀI_ Kä°gVm‘#ü‡F¼×ôL1‘/ò ïîE6ˆã"y(²¡!Ïûï åZœ²{Vür?<~}mhÆàÇ+ Öðè&ðÒÄ%(cmƒGå–Ö:z5¥{P‰G'OÛq"R7÷‚2];ð(2´§ qyNÃòÖ>Ãî´Ñ¤{=Hyx ø ûüO?ØçõÓÿÑ!;þðV½WFg¬þž7VÿïüoL˜lwþ_ûoí¿ã?°U×þ?6öÚÿëÿñq×ÿ;>,›’=)tlÌE|ã㟮ÿ¯m´Åúÿç4mñô¯fw àäÖŒ’õ:POzÃéT‡F\é -íˆÍ#-@ÊtPûGy0èo ™CßüÍËð;eÄ;ÐYETz –n_@MÓå/¿ 3>g…ÐŽd?,ÀMËp8’5¼È Âó× ]+ÊDŒ•è5rº&GA%9ñ)s;¤4áÔqV^ù2âÜ—FZÊ»žCe/OÏè¥ùJ£ ÷µå‘}è†gÚnä5Ÿt+ÉÂ3ÿð ­6×Y®r•sžÍ‡å†×œ².yÄïó? ¢¶Ó>ûügl¦wŸöh?kßÙñ¿ãÿè˜Õÿ«ÿ8˜¹É\4GõÅÎÿÏó¾¹E»ìüúýÑù$¦_þœùfí¿µÿÖþ_ûÿ{õáÖÿ[ÿoýÿß:ÿÿéGñ‹7Œ¡“½kàL Š~,£€h(5’ÆTø`ŸTº€–Q£ÊUÒ”ãkoÀ,%×0M¦ë~"“ҽǩÅ+Dzàß2ä//g< ÜÂyÍï¬ÞŠ|Ò'䵺á¡>¹¿@×åWøM\ÏÒßóá;€ÓÔ ðUZñuBÄõZ= ðmç–'¾í/® >ÒÞ½?¼ñŒ‰cÔ«ã—¶U¿»¬xäy<ð,ÀTšÏŸ–Ÿx<†?*²Í½²ÕeŸÿéÚbŸÿô–ÿ;þ/½´ú?z¡:õÿÎÿí ÆÇÎÿÇŽÒ ÆÈÇÖXûoí¿ØVkÿ¯ý¿þ=¹þ¯sæ‹ù÷™ã«^óFçõÿ·ýÿìu-„ˆÑàÁ8tÌu€‘9× ÐaÐHŽü’uýEc’nàPqй rψ€R-«eç|ñÖ}}ÍõÈ‚ö.¹Hä$Ÿw¥ÉåÚë†^›‹ÜÊÃuù‡æfî21­~sñÓJ4€”¡€@’{ûû(Ó½xqVf%}ÊR†ý²äk;¤¾øª«ó%ZåY­öúÕëTSýýê,í嫳‘>>ö㺷E®‡FZøLnq©—ëÜ3kþ$"4ûü?ì“ûü§ƒ\}RÖ_ô)ÇŽÿÿ~Ť[Vÿ¯þO_ÈTræ1ócçÿ±.¹óÿÚkÿ­ýO/ê™;¯ùsíÿË–¸æúfÎBuh®ÇŸ“”ùsÙ¥ëÿ1×Óëÿ­ÿÿ;íÿ?ý`^!¬^Ÿ;”ç4ÊõRVò€¬ÌU¡@A‡8n”onÏ=ÝBèmnîüÝ(ñø+s†ÚVn×õ'~Ž8Í—-ýá@_ Þì8ÙW~àðIDsoO¥·þò¥ŒIKæ”z^†gÒ/õF ¤²–º ÅK=Ýw£A+Ͼ›6c¸ Œù€[Úí x)Sþ×Ê|ÀJ=ðWùÛ~ÚXx7éÐfñ/geZ휺Ÿò%WÛ=Ïtî¥%}ÎâRÎÈ‚N› ûü¯Õ„ûüwüg¬îøb Â´ÇèŽÕÿ«ÿÍ^™ËÌ%;ÿaçÿØkÿ­ýW»´ö«ycíÿKg®ýÿè l }¥¾‰s|³±¿CtÍ3ùõŠ@Ï_r4ÿúä‹7²þßñu™­ëÿ?¿IõÛêÿgw_ˆá™«sí>¿®.ebâ)˜rWh£dð‰’9«Xú\iÒÝE>}1¯ÎÍ{ÇÔ#ïÐ •ýãðUÃIF+\´¡››€,VF‰/ ~îy麤£0 (‡‡42’˹å k^ßš¼#:rIÿI“§ôŒ¶÷ï|¾­§6Ä+«Ãæ,(Ë!h€>è“>ô}äm{´<46Î|Q±eºwíN©Ïí)®i½vO†—Wý[¶ò•­:á¾ÏŸ¿¾ÙþѾÑñ³ãÇÿêÿÕÿ;ÿÏêðÑ“BçQ×;ÿøÚƒ6⨮ýwlÔÚ`kÿ=ûڂͼöÿÚÿôÛ“ï}z騸7£F’Žfý¿ø|ÚJHûäê\»_ÿïà ÚH¿‰>m´þÿÿ?üÿ¼BèÁPüu4Û‘4X6þžô™.>èäW_Ï „éôåÓ¸<ø‰·êà“‰f6‚)ýd¾çS®|†®Wó„ÒèPUR€ÃmÓ¡4öxRNÐ rXÉ”¼Ê¸ø)7 ÔÐØŸ¢VþÐN|d¾î]£wï)W Ÿ³:38Ð8 ß|ó &y—™Z/éÊÁ§A>Ï& ˜´IÀ7¼¦,ôêÚzW&4âÐUn<ñÎýœïŸQUFy8 ûü÷ù§Ùøþíøv¬è£ŽµÿG¯DiÜtQõ˜³¥ÿ«ÿWÿ+;ÿïüϦd»ŒÑqìŽQµ?¢/Æ~qv¬ý·ößÚÿó#øÚÿÁör<ü²Ñ#tEuH|˜õÿÖÿ[ÿÿwÛÿ÷Âc(<+ƒß?“(‘  ÆÊ!M¢K™$ߥH(yñæ¼0Z âN ßÞY±3×Q:s–7ŽóuMŽð"Ç/.Ïðw&ß0y€@~ÉÄ_ùB;RúãȵtiYn:×ÊOy'^^÷o~õr U’þ§N©×%gëƒmâz¯ T4‘ç|çîqþsÏùë*.éx(S(M¯ËGzèfâ‹Ó0yÜç¹$ß´óÔïÐïóßç@™ÓGvü;þWÿ¯þßùß¹óÿÚµ­œ×þ[û_?Xûÿ€I±Ç¿¨®\ÿïø…ÚEXÿï,âXÿÿô‡õÿÿþøÏÓç+„©‚!&e@ Ш+”¤å˜x t¯ÆABDÒ<ñBÀ@ ^W^|ÐÌe;ñûqí Eé•û¢ëxp"®3i ùÀÚ(Šð¿öoškN¨øðöÚDö’I<¥=”îE›òˆ\—®õ‘§òˆÈ£-9½â UÞÒ—Ÿû,©š¼^÷R5hì^U|–-*7`ÖÕå-?û^Už–óýY~¯ÐXŠßçTyöùïóoŸÙñt…±cü GÑ!—îØñ¿ú¿ú³cgõÿÎÿ;ÿ¯ý·ößùÈÐ}¾\ûÿ¼9a®¨=±ö¿í[Öÿcc®ÿ·þÿúÿ.ÊùÁž~öþäÍ·ï¾ øÒ &`J–1¨ÇD’H+Peš¬²â)PÖyE/q“teô! /ùðÊfîÃ[yå¥>ס¶LÜ_£ÏÞNà _Á™l=ìÕPs? &€[& Nžæ“¡q¯\çäz×x=œ”áIíy皌•×Y¹Ù¨4@Ùó¯ÊIÛMõIˆsɯãÊ[:l‰ýt ïyRë+Sùòö™È@‘LÃGZãÐûjae{?_h¤,aÚ#ñûü÷ùøª/è›;þwüÓW«ÿWÿïü~òúÎÎÿkÿ­ý·öÿÚÿëÿ™ Öÿ;@5_“Ϲþÿúÿƒš{(FÁó†ÿüì?þÉ%Iººª`‹¸îƒÄ™qo౺ú‰Ó[À„ó{R¯=´&ü®xR9<ÒÙ' À$OÊ™³½º±žx×dQù÷ïgµÕÈIFAÿ}þúÆŽÿÑ}3®Œ ‡ëÿ×½¶úõ¿¾ O';ÿïü¿ößÚ憵ÿ×þgKvn¨#NÿXÿïø²Ú§í´þßúÿëÿÿ×ñŸ§ù§?zÈà R(Žg¤ŽÚÜ'~`hœ1¸€/„ÉÃpBšJ™¼†*ËI«#ØUDq‚&]>e]Ä9¾›UCY‘¤ K&¯ Š»—/¯ÀÔ— ÞÄ霸”ãì˜r8—FÖÿLÂG<­“$6…óúÿÿmüç釿üÙ›wß¾ 0b¢di4ÊEŠ›‹\Gñ^@àHZ»³|ðLP€ùç¼ÿ><Âszé¯gõÏ# ˜£Œ x)3p®ï÷¥‘ÐGŸk4 î;w˜U¾òw&GÁ ² )ûÞø¹dr¯*ò¡‡6Ò¥W¯^E„Ç*•‘ pöÙgŸMmÏÿáÓ²"ž³ÊŒ¼dOû¨ß ”+ü”-¿r»ZNºx ^Ú¿a˜g)/¾9_mB6Ò¤íóßçß~´ãÇÿêÿ£_éÈÕÿ;ÿ›>wþ?¶[ƒ­²ößÚµGcËê£/s}éO÷kÿŸ­9kÿ¯ÿ§dœÌØXÿoýÿõÿÿîøÏÓþÛ¿1јŒ8.@ ¿& V÷`„—HÓMÂÍD/œ×ؼ¢v€Jö¤š³k¼;á à–yoð“Æ@¤ h…Òš ”…ï¹Hº_üP©Ë9ò=”Å\ßù”W66Ÿ|ò(7‡ëy-Ðê,ÁН„)ç”t&#üÈüþ»#w•“øðêJ“9m0€y„¼¾7×VD •Í5ùå xBã¾å¶nyf“'û[ ¢¡ e©òì&±~i³‘eŸ¿}Ãöùïøßñ¿úõ¿ùaçÿÿõƒµÿÖþc+®ý¿ö?ßcý¿õÿÌ ëÿ¯ÿÿ›ÁHÌŽAl·ø§Àž~ôô¦ MÀ’ëÕ<ŽK€™48²@ÀN@•é°@¢Lb³ªG\ ™‘œRóå¿DÌ}òNú$±*J܈Á»/Ÿ†*I÷¥í+…ºÞÍJ$ò]T€&ò ¿òÔ°]y•ÍÌå™<ÊK^¯(ެ^ÝSN¨‹ù[¿0<òKÓðùnÀ,mª<ºä•' Ò)Ðõ½n×]KôµN|¤ã%äŽÖ 4òÀ€e¯ÜÂOÚ¤CÓW3÷ùŸ×V÷ùïøßñ¿úõÿÎÿ;ÿ¯ýÇ«M·ößlc±öìþµÿÇ)‡ÅØXÿoý¿õÿ×ÿ§þ±ñŸ§üûŸ¾)pR#}´ÐÐiG,€ôx9¯«€ä{ñéqn€*î­€²pÆÞ§k¿à‹Ê¯Æ@Ïd¢\‹ïÊ#ü÷¼xº7‘¢Çüý»çUa Ž4dtøÂß„cž_“”'d5Ö­€O¾Ò8¯Y* àÓWÅ«§‡TyûeÅÊ Lºv˜œÉm¯ªLž®²ÉÒ=¯\+»¯(ÊWÚIõ4ÀàUÓ´CŸ6 7tÚN÷nêU¹ñnî²ã/àõ(gîq”'r ~®¿üêË´½Õ[Ý„]¼W×ø8´¥³¼‚Ú¹uogr¯tâñ}Öûü÷ùïøßñOGT'T_Rj«ÿWÿ›Cvþ¿œðÿc?oÙìŽØl‘¹gç¬ý·öŸ¾±öÿ±·×þÿp!Âúëÿ™'Œú"çõÿ×ÿŸ¾Ððßž~ú—üÆ—ñ¨ÇŒ H„Á$œíżvæLñ0d :\7}–­³n(íÛYµdƒsKJÓ9/¡ ¦àñÍðó‹¥|øƒcÄ òˆWöûîÿ4+¿|nˆ%´Hœëü!ýä½þ©p§åãwÈ.@è*W|Ê2û ¢<~ ¨<ò‘ѤŒ¿’¼÷~î¦á¹é0"Þª/«³ðL;Í^Xøj¿o¿9_¼…÷ÐÍ*3úð˜xáq}•'Žü÷º‰ìg¥>Ã,üBg®i7¿ ûüÏžbûü§ŸLÖ¯wü±ãõÿêÿÿ3QΟÿ×þ[ûoíÿµÿ×ÿ[ÿoýÿõÿÏGÿà Á5æìeð† üçé§ÿáOÞ tôÕ3[Þël<æ_Áiö«¯¾ `Ó•MÒ8¿SæÌà+8VàÅxÂ1ž<Îÿ h„)@t€0`L–˜x%?y»R€l)ç{ÐyÕðåúMA~ewOy µ=ö ½sålš²œt€¬ið ó‘å”-¤þsv¯ñԮꗸ¹¯³D–æi™>>¹¾Ëw§‘–c¨Ÿú£}„§¯Q6_Îê9rµœ}þçÙïóßñ¿ãõÿúxõæ”ÿwþgݬý·öRXûíÿøüœñiÖÿ[ÿO ø–Îëÿ¯ÿÿ‚ÿüü¯þÍË^LVJµsõ=d{Z$êúX€,®uJ“–Wà²GÔ¬"\w¡w½±†FÐyD¡¿À|¬F’fiº²äs3y ê4¯µNÙ€þ¢Å°„ŽÒ´ZL^¼qB/Z.שÃ%2ë°ÞeÿIÃK›L&"$o®|*»è;/{k‘Qœ:;-Tc°²O#¤¤“M}­—x¡uÀ]_+´òK'Dþ)WÛûüÏd«=öù¸{íC·ãÿY;W;þ£cWÿ¯þ7—dÞ™¹pçâðóÿõê±7´…°ößüغößö'=²öÿÚÿëÿ­ÿ·þÿ3ØG/ŽÓñðÝùëÿŸ=ˆi˧þÙÏÞpRóšÝœ’ckWÄ¢t*i”³¯³ aŒ‘#s ™æ‘"¯£“R{#$°Šèö®+Åj©¢õʰHzxN9âm\^ ‰ òª”²È§tî˯r²àMÏ:™Ý;‡çä?5JµŽLøMy -#÷ÏÑéxäk:~äH{]™••ûICûýi—¾©Î€A,K£\÷ê!Îù~`+]9i)_Ây¬¨ëþiï©ë>ÿy.Ó^ûüwüïø?ÀŒ±°úõÿÎÿgîô×\š&36t~ÏýsôÎÿ£?Öþ[ûËÖþ_û?>Ïúëÿ½°þÿúÿ'üçgÿñ_ÏXÏ«©€Y^¤#@ˆ• 5!ŽÍ¼€"âJ ˆ$ÎÀ,XÐdèchåå)ò ì>t¹¾ Δz_D‹ ŸòoyxÄÐyY®¥9Ÿ|g…•küħœ9wUøÈE¤C3—ˆÅư¾‚øð¾ä!\ë”64N'Ž¡¿òMðòÚ@Y.FŸûÊ‚Þýã<×­Ë#.©Ït•¶Þ@2i¸: ×>ÿ}þík;þϪÒÿG­þ?Š5sÄ\V¯Š]ýV;››Œ—ÿ™ùg®žcçÿã¬kvÏÚkÿ=ͧkÿ§ 2—¬ý¿þßú3]Ž=õ{ݳ·ëÿ¯ÿφ`gÞñŸ§ýòço¦¯ÄÀ8›£Ÿ/ê!vX%eCq€€EGbֱ̻l°>¹Žñ6yÜ댜b´Ž1Îòámóp=׊#eÈŒ³04• ½òúKÎëW¯³K¿üÒš._q›”÷ËjÊÈà˜³8t‚39"›UIs#kdða>g´ºšæQÖ1Ü?€É<³4¾)ëT%÷‘ïá'Mû½ýúë¤Ùç+y4̪¸©Cþ Ÿ†”}Ý íÑôÿ‘yó*Xêì~ùÛfÚÜsÄïóßçï5âö‡ô•ÿ/;þWÿ¯þßùŸNt˜gwþ_ûoí¿µÿ™÷æ†ÚÞ1 Öþ_ÿÿ5>ÀV¸ûjëÿ­ÿ¿þÿßÿyúÉ|…0£kþ6@ƒ­€•ô8³“ŽF(jìÚƒèQp¤ˆi ½÷ßMÉ¥—ÿù/ÿ%yA2y f`yðéL:°0Cš¼þ6|BA'×´&þ>ÁÔð$sÊ ªW¬ùìçÕòk´¶~òMkDîœ'“´{;à#îFˆ¾Š‰Ÿ:ù¢ã_|º/¿ü2 ÓK+²&ÚC寞ÊS…¨¬¦“ïã¯;г KÈõäAß ÿ>ÿ³™>²Ïÿ8¬ú‡~¢´?ïøßñO‡ÕyÑEWyèë¡1–VÿOC­þþØùÿùDzÿÍÆˆYûoí?6¸yeíÿµÿù7õ¿öÄúì®õÿÖÿÿ}÷ÿŸ~üçô†sêÝtB 4 †ˆ3¡˜X:`ÐÜYéîóêÛÌàY>òõ^œF—çõë×9ÛHÝ}ø¡<]Ëkß&A¼àÕ–8N7À ŸC{^gðÂðûuS÷(Ñ P âª»ÕP)÷v\+϶GLüy}äcñØ­ôæ ­ò'®áNÓ¯+âïõn>{aåßäK†¯ ýÊÿÝûw ÷lîªy>sî¦üxk‡# Ñê´gà ÿ}þ³pŸzOÇmúÅŽÿÿ£ƒVÿŸVÿŸÕËæ‡`^q½óÿ™«;?×ÎéœÆš?;ÿ¯ý×>²öß÷b—kµÿ×þ¿ÿÀÞù%þÏú™>:—/ëÿ °þúÅï«ÿÿôƒÙÄÝ`¨QPh@”¨Là§«ÄÉ×`ò‘§N¯w»Ñz†0dÌÝæ@ëËwÞ‰G§Ü»Â»ï‡Kã@ùµà„NÇ.å]ò’[>ô©ßUÇL’ʺxŒŒ^•$ûo®¯¯E¾IÂËFsò~ŠÌê72 îQºÃÏ«Œ‚<=ÚÖÒžÿ}þíZéoFÛÅžûÝŽÿÿô=¢/¬þ¿^5[ý¿óÿ¨ËÎí÷¹–u¿óÿÚcl=ú=ºößÚÿÕúÃÚÿëÿuÑÁúëÿÓ ëÿÏ¥Ÿ^¯¬ø uD2XÆÈŠsý×d- ƒãÒkô®½ÇÍuüq#¯ ®Æ›_oïÁj)ˈ#Þ“O•ÑÙý«YÉ…—àÞµEÊ Y‰ÕÔSæÈÑW ¤3LVdõµ=yÉÖ=ð%5Ù Î\§Œ«>àúÓ:’ÝáÞYù®+/r¼•ÕM•£ 4-K]‘…^hZn†à´j£¼R‘_hYm[ñ‘kdžÌ¹÷ùïó×_ÚŸ\ë+ú¢þÒkýÉõŽÿÿ´þ°úõÿÎÿ;ÿ›;:aí¿µÿ¦#dõf:Åõgíÿµÿ×ÿ[ÿoýÿ³€È”¹þÿß‚ÿüðÚÄQÁáj`}²úÄ_iC[§Dž3@(¯Xpf¡ƒüCÏXI~!Oã2b.pÇ «¼÷.ß•˜‚OÂäÇWÞ:ËsóÉ»¸äÍëˆÀ¨á÷âåùò`^3pJP~ëåþñºÝˆUù¥´òŒŽ‘u=éäQ~øe‡æ*'<†®m)Ë~¤qôoüÕ[P_á‘wxyï¾}—U Ê–n°¶½<‘vxö,N(¨p-™„žÉÖr] ççzŸúÏ>ÿéW?ÓwÚ]ïø?ãë>–´‹£c?i;þӇ蘮h]ý¿úçÿÿýð¸ößõ£âÚkÿ¯ýÏLਬÿ7o5­ÿ·þÿúÿg±?ô±‰ûÝé:úb¯y­îôŒß L È1ÊD0˜8ôœgi®&hsî ¦òwVðqì0áüÊ+Ÿ} *Õt¶–/"æzÊâü}”Û_l@ߨÓÝ}Íò#Sê»ÉwxÎfð“§åt9€"«Ž¤“-ò#e’ñvICW°'é'¤Ý枓׹¼Bpý©Iš÷Ó&å§!Tùúâ<u*ù„Þ_ìeÜÓ›æ|—«×â#Ç>ÿ}þÓWvüïø_ýÿЧ«ÿwþßùí¿µÿÖþ¯ïÌn®½¾öÿúíõ­Ü{йiÇÀ>ãwMJÚúÇöÐ.ëÿ¯ÿÿ1þóô³ÿø¯ß::ˆ@éö:Ëytœk°ep¡¹V”â:]àšÐ¥Ã]¯ÝM|W=h‡gÁ"|›ãï‚Xh¤<ŠlSH¿@øâÎÈ=³æþÓ ª¡—·õr,ÃÓª-Qù—ι×À«€sžÙ«“’zD–©/9ñpHw¸n]‡ä± }®oi-ÛX6â\ 6ºÑâÛ€·# ÖDVé‘í"ß´ÊÓ¼H>ίŒÒïóŸöÞç¿ãŸŽÙñ½`–Xýtoõäê³þÌ;æª9wÎñã‘{ñ;ÿ_?L{ÜçôÿO{¬ý·ö»´¶·±×þ_û_Ÿ¨Žt9wý¿øxÚãcÿm¦—õÿÖÿç¶&Ôs£¿ôÜëûÏo›ÿÿôÃÙÄ]%M0TRDY¸¹‚Ée"_Zq®UÜ+ò‰£tÊ·Æ+6å©ÑÈ l²ÚKpïÀCã¢w¶?”³räŸÆžý æ”ý¬æÞøõ×_`,â+ŸÃÊ­¾¢Ø‡ÉIÅKzãÈFN`[ó·näM›ÄjŸurL9yâ*¯uÖákO.<?e¶·‰{„‹6õ>ò ‘ß©/ù+“4ü*·:LEr?5~¤eω‹Vž´áÐáãx䟴ð@t…ÔuhÅ—Vœk|öùïóßñ¿ãŸN¨Ž¤VÿOŸ ÛWÿ?æ”Ì}Ó&úÇÎÿg‚Ýùí¿ÚZÕkÿ­ýOG®ý¿þݰþßúÿð…õÿþóô“¿øÅ£À… S°Ì`ĸl\Tò«ª×ð4¦UL£ÐÏžT.ZGùÞÏâ)ŽïfϬW/ϯ-Czý—ð @2{[õ•ÁðãT³ñ×óšàË/³*‹ŒXî<½J˜ 03¼K‘mÚ ØŽ)S;X¹Ei¾ H†3¹ Õzâ“z /×\Ë_º‚YÒÑ—§si|9Ï5y\kó^Ë_¾¥k‡ôÑJžYiµ¿ÿÿ3rvüG%Dç¬þ_ýo~Ùùÿy®žÉ3sûÎÿc/®ýeiŒ¬ý÷l×¾¬]»öÿ8Öþ_ÿ¯>ØúëÿÓ0…êI}#þüúÿÙÛœ/Vœ¨ñô/þôGo8ê ®Ì(xèX 4`޳£lRút_!BÆîÜ„®KÅÝü:ù’>eã%°¤|‡ý­J+½e“Ó}d˜môÚàäJÛå~$™´¤<èí¥•ú§ä<ÒåCß‘}ÎÓm³Ê¿Ïÿ€ûü ½ãÆãJA3chÇÿêÿY};ú·úsõÿÎÿlÿÇ›q¡-¢3×þ[ûoìO¶çÚÿÏ[—kÿß³þÐúëÿñ±ÇÙ]ÿÚŽ€Uü>øÿO?ú󟿱r©€ß« G€Ž™@(+r4 :€PÈ=CÜ$#Þµ¸FîO8`~ö®b )s€`Œ|-/€Ö¤·¼–á^Þ¯¾úê“Ï>û,« &SòYR'¬¥/¸òrV*á-¬yî PüúþÈ~SÖdK^ùÚ•? ˜zœÊ WŸCÛÀd•ZÁ3õÆÃž]Ê!O@¨97Í™¼÷à^< Š<‚Él"C«Žï&ž¬÷ ¼¶oxkóÖoŸšjŸÿéSúIŽ—ö}}gÇÿÑ_;þWÿÓ÷«ÿwþ7ïü¿ößÚkÿ×î^ûý?öòúëÿ¯ÿÏüCã?O?úåÏߌå‡@âà¼6¸çØûÄuÚOÄò‹À¤În«$C0åW*¸´üRöDˆÏ`¿;ÏgEÇ»÷^c™æÏ/¾øâ“oFi6qÿ„v®É@žÖƒ¼^”°A×zC|ë[§•úñNÐG¶ë\ÇU^AšÐvÈýdUgξÍß_ÎYº4qê¡í*>r*ošÊ"¾ü¥åµÇ‘ƒL•SÓ”wùHŸÈ<#™ò„ùÑÉ/Ãuƒ{õÜç&"ÏbŸÿìG°ã?ãÂ8éø4n:Éÿ×—^G‡¬þ_ýoîéX1n:G™mÄ;:†œéÙÿwþ_ûïÙf^ûoíÿÚékÿ¯ÿg]ÿoýÿú¿oþÿ÷þÓÿóŸÓP —æšAi…O6FŸø.å-‚FƒuÃôÏ?ÿü“·oßæë~Î5Fѹ.xâ¨cõQÚ¶4êÃW' J“G¯ÀН ¢ûÕ_ÿê“ׯ^ŸüCsÉŠ­{(Ð¥ O'åx½N›r#ÄÂ@IDAT¤|×׊,HúD¦¬=6—÷*Zqá7²0ÊÉWKÙÒ”KVeÆ€Ÿxí èë‰di»Êãðêç h Z|\£s/Ý}ÏÒ•'Hw-ýEVÏVc©ÛyÊ¿}þûüwüŸ™;þϫܫÿÏj_zrõÿÎÿ;ÿŸæ¬ý·ößÚÿãO°½Ç–^ûÿÙ—0WÖ79óæúõ¹Öÿ;>î8žëÿÞ0Nøçp•õÿ®ñ_ò+ŽÙ4œÆò«ç\<× ¤”#úJ“²Œdcñ9ß›aý@‚¾¢/OçÊàÚw(»+•¬¢Rþ&K¯ ¾È '›¶Ëkçˆs/”Ää”.NÀǵCYüIh@#éBÏõpxÎþXSŸÈ9_Atv/àõå—_†½ iâsž{ôÚ웩 YÜ[]¦>øãh(ë&«(4£摜6+ø¤_õòÌа:©“ŸÌÚöÊ7ù‡Yê6e’ù/ó•¶ÏŸ¿>ªìøßñïúÃ=D/Ný±úõû†i¤sJûFV¸N?Ñg:÷ìü¿ó¿þ±ößÚì óËÚÿÇ‚Þ\ûý¿õÿbK¬ÿ?FÕåó³ø÷tÄï¢ÿÿôƒ_þì à#TÙÔXÌ4Üš,€*^×Ó9bT ÒмiÙ?ÊyL6âî 0Çž:Ž{^×½/ï:;8 C¯œ/‡\ #4ú®È 3 ÝTZ€¯ÍM°âÉ$HFüÎö¥Ôó€Vi‘ð•Ÿ|è+gx^ñÉ8Äáå×y›¶»'sh'ýÕ«ݾ={bi›é¾«¿Äë|êw¶óZ…ö ¯¡O{;_ VïÔÒ+;#äY…6«¾ðíÆôhñË*´y½2ÿtpååÏ>ÿ}þ;þwü ºúÿŒ:wõÿÎÿ;ÿŸW‚c0°.ÛÁøXûoí¿µÿ×þݰþßúúÂúÿëÿ×^ø‡Äž~øg?{SÆÎŒ‘ìý4× @ g^tt?§=ƒvˆ„@+0¾þúëð:ÍE-BGð hAï^çNÚ¼ª'¤ü‰+@ƒg—äúeÿU^{ûõ‘eî•A¯ý½|ùê€NÊdÿ™‘ J4|æ|Œ¬ó:dÊþÊ4éæ<ôh#ÓÄ d”&.m2gõ.šÆ;?vdÔ&‰Çc.Ÿåq³GÕ$x]Q(o²;Â÷°iRÇÈ<1Ý@¸N Ê/¿I/üWy1’wèiûü÷ùïøßñ¿úõÿÎÿ;ÿ¯ý76ÑÚç‡ÞµÿÓ¶2Û~íÿõÿê;­ÿ·þ¿¹býÿž×€MÁ_þžøÏ|…ðÞPº@  FL@‘‰OÁs °"ÀÅu˜¹€WV4õ>̆ÿ*øQfe’³ ‚¹^%Nª2ä-Ø“=­.ð`¥üɘÍ9y•À5¯ý%ßä/ WÏžxÊŽNYdÖäìy¢?h÷Ÿ¾˜Mßç_éðT|äó+ˬöz®ÆPÀê*|Ä“_ð0²LIóŠ$ÞÔg¾Bè^Ýt¿zÅÉ‹Y’†÷Èè>eOzeEKÂÞïóßç¯Ïè?=Ò·®1âz:ËŽÿÿÑ)”ÇêÿÕÿæs×Îÿ;ÿ¯ý÷lï­ýã2ö%ÛÛtíÿè˵ÿ×ÿ3.Œ‰õÿÖÿ_ÿÿúÅ`ÕYõ…“LŒ‚?{&^šÐÉy/y91/¼ún6÷+-#Æ9sÀAÞHîP&øÇj¯@)Çq'¯ÿ}þWÿÒ/vü|ÇŽÿét°úõúyæ;ÿïü¿ößiÖþ[ûŸ^<>ÉÚÿæ m±þßøg×GÑÖÿ[ÿŸ_±þÿÁ Î=‡øŸÁ`Q0³@Fîç‰Ò¢XýÔWù²Á8 èRÒvlšþêõ«6J«À þ€–€+sýéÓy49æº<åå.¹œ{ˆë †ŒÎS`båí*®D ‹ÉýØ?K:ùäV½'Ÿ¼ö"“½±Ð4BþC'Ý5¹Z/qî#“øY †·ô¦õ—†Žýº€nÚ¦õsVkÀ`¾”?qå¡uð-ð%OÛ+eÍ=Úü½ŸÈÜOÜ#”æ·ÏŸ¿~¼ãÇÿêÿó# }¹úV\]ó•¶ØùçÿŒ‹µÿöÙÚkÿ³±×þ¿VÖ¤-Öÿ«Æ7[ÿï¬^×9.”M‘c&í%ü 5±?y£kù¶“Oˆ}Æ/¿h\¬ÿÿ»éÿ?ýä/~ñà éj¤vAÇúx–ÎÄ¡q²0™ûJ °"?¾í éXSVÏÒî´ý͹öoK—ß!äïÈÒQ_|ú"å¹—æWA/¤"‡½¨V÷€™ËS}»Ê Æ99ÐY0pZ7÷èMʸË^ž§´¦ ´Oø¥=ÎëhòëÝœñ’îÞÏßXµ6u10 Hÿå’žø<&}î½®‰°¨fd#ãU†û}þûüõåÿÑ&Ñw;þŽ¥_VÿýºúÿŒsÆÎÿ;ÿëkÿûkí¿µÿ×þ?þ‹yrý¿ñÀâ³9sý¿³Øƒ¯É'®Ï©„žssÝ‹k|ÏÒå¯_Öºõÿ¯,Ó>žü¾øÿ°ÎÓ5¦#Íkd^_+à1]%«¥ò*Û¤·óÙ Ê{»î­"–\ÌЀéWï:ˆ/@¥vÂdž?í¤ÎÚ+±inåËÙ¸#>ΰÇk{Wç÷0PéàCóÙçŸ}òÕW_=~5Fg0Õ9ÁÃÑ&^~¯õ„ùÚ^ï¸{”1ùG Ç=Y*ãËùâà$¥|<åyúôLöhÜSö€ª‚cœåIW¶&õÅÄÜ_ò(= Jü0J³’=÷“®ÞÃD`[°+Öþ[ûoíÿãgÄξlyöulj±²öÿl‡2>‹y”¯‘öYÿïø]WŸYÿ/Cæô¹ÔG}å$=Òîcë`ëÿÿ>ûÿOÿâOôætP¾Ñ¿Ó5f9¸ø§yÕxR Å* û-y…€Rò œ§½ˆNç+`dp6=Êkz ÞèhO™é¹¡-Îz¿vßÔ‡Ï\v•€wJÉþŸ×/ù>–ô~ñÅ±È Ô¡iPor7œv8@ַßÌòà—º½ò†ÙC¦¶)YÚ.~#ƒô{¹¬ð"ñ%+Á†ŽŒÊ)XÚ¡ #>òµÒžWAâñJÞëIÒvVÛ¯ÊûüÓûüwü_Ã(ý¡@ÆŽÿÕÿôéêÿÿwþ_û.¨ ¶ößÚÿcŒÇ¯M½öÿúëÿ| >êúÿëÿÃ&Á+‚9Œ·5…>Ò~Âÿº_×s.þóôÃ?ûÙLÉ<À €Ê}ž)*9Jg¹4„’þì³Ï‚°( H4ñ½WXâ.à »ð½vÎß\æO+ =òM“vÝ{ÈKVk‘¬$"cùÊCîÐÌùóÏ?\ôácÕûóoV'ͽ=°ZGõÖ:|,[ò^r–oen`„ ÚNšv"¹n¼ry¤£7$Yõæ¨*ƒ³¶«lÎBÓS¾ô¡k\Ä ­C¼ûü=å}þúãéWÓó¿ýdÇÿÑaGÆVÚ‰î¸]_S¯'mÇÿêÿêy}cõÿÆpþæ2>c½ßùçÿô…CÂÚkÿÑ«,·X±kÿÿ ýI·®ýÞZÿ/Ý#j×Ó§ëÿÑ þ­ÿ÷Ûàÿ=ýðÏþFÇõȬNª!©SgBÃÒRa¯ºouèâu<ù¥¹ç 9e¯¬‘&ŸWèœÝ¼‰12ô-˜†/¸®ÑEºð7‘Í*/r4ÞÊ,@9]¦ªÄ²Y¹×&ÕmäµVVZàsÖÌ$é~Q™Q~Údø?M=„´áE‹®qdlûTNƒ?õºbÌ5ùåwT~æ°eاìÉëܲÀ¸™|his!ý@2C2ù*ƒ8¿04¯”@³fJÞáñå—_ÄR6P«€y[wgåœÝ÷¡é›ZÞœiÒ*ù}Í0€Ó0iÎÀ¨ðœöœ‹l*ß/¯vZNkäþƒv Õ³q§ÐüWrÚäž}yvÕ•{2ÜéÑíóßç¿ãÿìûgŒ8vü¯þÌ7ÓVÿïüßù3sñô‰ÿ×þ[ûï#»uìÉ3>Öþ_ûÿø~üú$ñKÜŒþäÑÔÿï¾ç¬ÿ—öÑ~SÓ(ëÿég1Èúÿ¹ûól!ãl®¥ý¶úÿO?ø÷?} çfhQ±îu¥²îí)åÚʪ6DÀLƒA$ý~´ÑLèI¿T÷äpö•@+¾¬KøÈ|w˜²I ô~E<‚r<˜ofµÕ«—¯ûå˳J ¿¨:Ü”ïÚê¬tü¹N˜såït^STFî‡ÐY¾÷ïÎê³Ôñâ/ndk{iGð*+Ö†Fã‰ÆÊ°Gù‡¦ôá¡Í†Ne9‹WEßëÜ_e¡ëª,ñ­¾îÃk®×ûü§!ní´ÏÇÿŽÿÕÿtåêÿ3?f.š9cçÿÿc8ÌŸÚ>'ÆÊ;cí¿³²S[Ôž[ûoív&›{íÿõÿÌ©ëÿ­ÿŸIsô‚G×ÿ?Jm‰™~7AÇ·+®¤·ŒÊ‚þ»÷g5QÔ ¨V@ /+Íð>©|Ä%ÿ\[õÌ"kÚtê(¯rLVÀ@Aš€O¯É%$_Û`3õ°É¯L¼{ wvv-â âç¶›ë€gßÿû öùïøï˜Ùñ í`|Ð_´ =âzõÿê}CÐ?Œ›ÌAsݸέé?¿óÿÎÿ,”ö gúdí¿c ®ý·ö?ݹöÿú|Þølëÿ­ÿ¿þÿÃÆ4&ž~øËŸ¿¡(TÜ¿~ý:` ¢6ˆ§ñÞ ó|Æ•î æÄ,w.‚þ¦Û61œ!F/#øaÐ\ûñ0x'‘e|hçºåU®²E§¼är B|ËÈ„0u•W=ìa¼)/¼åW²h‡{yÊ@n×c’g¯æÏùÐ.œÄÒ~=+ÌxMYÝ'Ì}Œÿ¡Ìô¸Nzy¦ý¼:¼Á‡©<ކÜ_7i‹¿…FrʺÚuŸÿ€’ó\ÚÖûüwüïø?c¢º1úgõÿêóº9ìš›\ ;ÿŸÕÐ9{çÿµÿ®±1ÆVƈ±²ö{>Í‘?µÍ×þ_ûŸÍEv?æø/ÆÎå§ðY:ßÔ.yô$is$Ïúi–´Å\Å'ÔŽ·°þßúÿí¿­þÿÓOÿòßÞäá•£B98Ä«ä]i¸×ù›/t³â‰Ò 3<¬Bc%TöźO’Bæ>éÀŸá÷sdzºIy†®²:ôîñòäõAFÂÐù÷½yÅ8Ô•PŒju(¨ööíÛÚ­s ñ(ÏM™”&è‰÷ßUM—¦ŸÜK+ð¼êÐ:S²®½ŽvÊ|nO¼Ê#?røuòŬn©·•giÏòˆkýð(Ï;¿^ãÛç¸Ï&Ïi˜>»}þ;þwü¯þ§+WÿÊ\o~3§tÞØùçvÞÚ϶[mˆµÿÖþ¯¾dóÇ6g¯³Ñ×þÏâí³þß™Oë«i“×ëÿÖ WµEûÌúÿÏ‹WÚg¢c¦Ú§z_:÷Ú²vÜo£ÿÿô“¿øÅ›VLEZYF©{l\•L:Ídjºý£/YÍ4`QãMçò&ÿÜh¸Êì꬀-C—!k°ÎåAë,ÝÙ;ÁEæÛ‘ÅÈWPp%>ÜÔʰ‚W@¨Ï^€®òþš_L³ÖðRæä ÍœñW~Ó´¸.{ÿöÝ·§îbxµ íreà†ÿ’rº±û½L´ø‹ó<òã´‰:uY)Þá1´¹ž3úð¾®ç”ps]ÞM'_iöùïóŒãé+ÂŽÿÿtÌêÿ£Vÿû`çÿù2ñ„ÿg5ûÚ:3w®ýÇÎ]ûíÿõÿ2Q°§/ß6¾Ûܯÿ·þ¿y‚ÿMOÔ—¯¾þÿߎÿ<ýðÏ~ö0âÕ@Ç 4ÀI'^†º  l’Pi†—ÆÁy×W݆&á:¹îƒB+xÕïŧ/2ˆÉà@C ˜à~þ$-éW\âÍ“Gº üòV¯ÊFV¿z8*™åµWUdW·‰«!V>hUâ]÷+‹ò;âÜÀF†ò&K_«'ÇðwFò ¨uÉݺX=†ææR¹Ê§èlpï^˜ÒÆ6x¬Äµ¬ðCsk·¦9«öùïóßñ¿ãŸN WèºÞp¬þ?:uõÿÎÿ;ÿ¯ýGO®ýwìʵÿ×þçÿÔÇŠµþßÃ[ÿoýÿüïõÿxD±•¿þó}à…ðÊ&壈€T&h›œkxq}-нû¹¬òê4Ð˫ׯ§<ðiÀ_p– P†ãÔøó¥ÀÏ>û,«´†`þ ©2XhҬؒ^EŠGÁ¶nìN6Àüò)[ÝÝ£½B®ÅIky­³|÷8Ž¿ ìÒ·x´ñ¤ÌòŽöÕm·¶ÑÉVŸÅP&óÔïûS?í£ìb°0iÆ5Hw|¿kùZæ>ÿ}þúËŽÿg@xÇÿêÿÕÿ;ÿw>§Í—‚ùS¼ nçÿµÿô…µÿÆ>¿¶ Yûÿø1kÿ_ÃØp4ÔGq^ÿïø×Ïúcý?ýbýÿ³¥cýÿÿ:þóôÓÿð'oÆ*Ë.ðÅ`²ò©\Î×¾T5äš&¯8N¾ÓàÏ¿ÞSZâ˜&¶Ðͽ€f£õ*8é)cHÈ‚FœCW€HÞ‡³ie^“~—Gþwïç+…“þêÚ˜4ò˜ÐôÞj¦8/“¦L€‘³}²€r}… M™=ãc¯*$òõW*Ú¦ZùZ~ëêK®•`JY“•¼y5Ò_óO䯮ïY „‘ Чpñê“ôáI&{¼(‡\ûü§ý÷ù§ê‡9vüïø¿ô$}Ó~AwÐ#ôÎêÿ3÷¬þßùçÿc_Ðô‹oí¿µÿ2OLÌ!kÿ¯ý¿þß™/ãcý¿ÑóŸ/Ú6Ñ.Býf×ëÿ¯ÿÿô¿ý?xãëƒöŽÒ!8îcqd¥¬šAÅssHÈ4ts^t2ËÁжóÉÃ|éê§tÄÉÓ•Qhñ@Ý´y›X!›C\伜)ùÐ;ëìÒs=´5›úÊ Cêãq ?¯èÅкêSù¤‹w²9}ʘ²„¼Î÷t^ïs0 P5×è"Ûµú+åœgúž8mÕ2'\õ@+´^½Ÿˆ€h^¹Ä?ñò\ùÐ?hÃaä¸öíB¯þd¬bSŸ}þûüwüŸÍÊchÇÿ|IÖŠÑK§Ò«ÿWÿ›7:ìü¿ó?[‘¾¤œ×þ[ûO_ #Ìkÿo²öÿú×ö2yÇ$:aý¿ç•y™CÌ%Ó.Õôˆ°þÿ8ÓæÚñç×ÿ¿ýx6q×ab€Ì„cÿ'©@#UzA‘\—åÂÓáÐM†ò݃ûtÌ‹§ë8Ashr­ø)0Õט²jiò(Ÿ.Ÿ×óZ!yð‘Fn¿x7ÈKõð?Ø”}ˆð¹‡ &zÔOz?s\Ð HhâÐ…ÿ0€’Çxr}1­ÜöJy“׊6ûW¥‡–졽–]W¦”O†9ÐôPvó’KºüäAÓ|÷gUx£‘_žïæ,$ÏÄïóýÚ&¾d¹ÏßJ¿ÿ;þWÿ¯þ?3åÎÿçUãÿÇŽZû/¶âÚkÿÇ ž?±é/Û\{ÒܱöÿñiÖÿÿzúlý¿óÆÏúÿ4Å ñ?Gg8×÷w^ÿÿüHö1þ“MÜŽú€2* Ç€D®­Ì¨RÖÄ6÷3 ó'­¯¡ûòÊÚ-ÐS¯Á5_ʺ¯L@•IÌ ¢4sÝ3®»Ãê,tßÎ+Ù·i®«B?@•V®í‡•ëÉ(ëׇÍ#¤s ð%ý믾z®ËPàAN4©ßÄ9‹nÍMîµ8P-t÷|ê-¯Ä·®Îw° MÛ.m%bx5ÿ¶‹2+OËj¹ïG­Ðüp<õ°òêJLø¥ûüÓ,ûüÏvüïø_ýæ¶êÛÕÿ;ÿïüï—òµÿÖþ[ûíÿ™ÇOø"õ7Öÿ;m¢=„õÿÎ|_sú {JˆŸ:mÄG¯Û3 ­çXÿýÿQ.ÿyúÑŸÿѨx ŠCG+(âWW÷] ¥CQVâuàU÷­‚ÆQžé𓞼VFMP¶ÕW‘ûâÿ4Wž_ϲNŸ¾ÆÓ†ñ_~õå'Ÿ½þìä½ä1ˆ(ÁÊ¥ò$_CÜ£îM¸Îd°–_b”E¹«SV‡Ýhñ ß‘÷´ˆ{–Yâ-´\gÏìí7o³¤?÷êØ:;Ëý¶W>>ûü÷ùïøßñOÑ#Ñ·£;VÿŸˆ«ÿwþ7gîü9¨Ó솵ÿôŠã„±­Öþ;?¸®ýúEÿ®ý¿þßúÇ®4o¬ÿ¿þÿ?þóôó¿ú×ol¢§cÅaÇ%û=q`F: < º õO¾'{’6éø Ü›Ü[†ë‚,:sçžÀËä Ðs•#þË/¿œ/¼Œo¿þúÃò‡^ySXöwÂOþ–í,¨ƒø®D­C(èƒäHw­ ­ú¥œY¦ŒZò¨³Ch½»'9ïí¢ëÏiwMÚO¯´Ù‹‘5fþ ŸÖMe@'¿ýÅ®zDÑS­—¯^Î+ûü÷ùïøßñ?ºŽ.œƒN¤"Vÿ¯þŸI$sÎÎÿfÒ³•€yuçÿµÿÖþ[ûíÿkÿÐÑ~ìÑŽõÿÖÿ«¯\ÿT¿¨\?•ÝŸö:¯ÿ_»{ýÿÿþóô¯þÝOßèHtðˆã2Ì=et¾\w€t^EÓár=dybP2ù Ö8÷ºàKò\`KãœÑUé1Åõ^y>#É™ò:Ë?ÿçÿ<çoçúÕ«W‰/ß–7™± °ãÔøòá#?`J]ÔU0Ø~õ«_ål¥”°¼”Qåìºѹí!¿²ðsNžqí*Ž § _ÀR:iýò£x|Û6øÇ™¼Úª|ÉGÎæWެB S®úºI«lÎÀ+ù÷ùïó×ßvüïø§{Vÿ¯þßùçÿµÿŽ-›k쥻Ý'ní¿µÿ×þ_ÿ.XÿoýÿøÔëÿcÐÁ#ƯŒ‘|M¡‡yÔѸÞÿ÷🧟Ì&îˆ1†ä¥: Æi¥ñ…=¯çÙäZ\Þ!¡#xŸ_ïƒWéåi9ýbŸt€Œ4çVêâZy®å#GyÊmyè²AùÄÕwF'ß4Üd–?aÒ€;^u|ñòÅ'¯^¾Ê5Zùr _AYò·Ž4»I,@ÓÔÝ?«¬ä´W刬“–öA{µ¡¼Çaxþä ‡KŽ{=ñµß•8Îfêx iêÒ2ÚFhŽ1J‡&u›8<\ïóßçßq¹ãÇ?="Ð Õ«ÿWÿïülœÿ×þ‹n¹ößÚÿkÿ¯ÿÇNZÿoýÿõÿÿiðŸ§ÏXÀËáMÆ@g `€B1‹wÄÁ5HYC7ò¾æ•]•9Þw@ èòéPÒ­þ1à9ËùÅâ”)¨²LT–£:?d›|¥kYxTV´Y¡5töœ:PÒì蚂𣾗¼äa”þõ_ÿõ'¯^¿~ÔÙRØ€VÓLdÖdqmcyuöN¼Ò&­²V>´>Š.í;÷á7|}éÌç1•#È Ðroå™kA›¿€¾Ê SÛ¤Ÿ³¶K^üRÖõÜ>(gxîó?ýqŸÿŽÿÿ«ÿWÿïüo¾tìü¿ößÚkÿóMbCM½öÿúëÿ­ÿ¿þÿÿZüg^!üÉ“3às…]°CZ"ñ@šîᄦ|йu…•P@¤ ú‹6«ž.àGÑJî^ouaÔ øÊÈýîýùbã)ïùõ½(åD¾S”U¥«% ‰lY%5ü]¿ -ûW EøNœ/'ÊðG>´À—cÑä¹xjk´Ú–¾í²Ïÿ´ÿ>ÿt“ô}Lÿh¸ƒéD;þwü§kè#Õ#"\¯þ};cdÒêÿé;ÿÍ´óæ úaí¿ó(ý°ößÚÿµÕ×þ_ÿ¯¶þßúÿëÿÿ·ñŸX0Âa ¸q9!QC|‚ûãüÚ¼ÜûŠþ=Ò‡_«{ ø8)øÂˆ±äòÝ·gO+ôV#yÍ ­ƒ±ƒg ^°ápdpsў˓O^A^õžÌkX¢ë¾Pß|ûÍ#oå ¯ ÐJ=€@ÂyµÑkzV¨Á>åÿfd}´©:$î´¡kû^ Ý£JœzšÌ„¬^C7ååNœvU¶ø¶¹¶ÁC¼sê=çð½Îáñ݇²‹Ûçï}þÓoõÉkÜ¥#NßÚÏœ§S‰˜þzõ¯ÿÑ;þ~Ó_è•Õÿלºú?óݱóÿ±vþ_ûž\ûoíÿÀ˜lôµÿ×ÿ[ÿïá³ÖYÿýÿÌ•7üçéÿçÿþ¸ñé|Õ®{#!×`btŽjMTœØ‰Ch‘¯©s¤õÚ—îäøph€+V-å‹‚šñ–ñÒQŸ>W Ž %Þô0U:Y¼j'¸œC×à^¹Î‘yœj<…ÐÎYºC:YÞ¿;«¾¬¬g%“ÐWå\‰—^9»â my’7ד' ÒH©Îò•®ù½æ×jÒ­Cû\›ó¤òToß¾MÙåÕú(§¯0â'}ÚrÎäAyæìH#O@7ü÷ùgŸ4m·Ïÿy¬è³;þwü«ÿWÿGL_ðÏœ²óÿùñjçÿ³\;$\v†ëµÿÖþ3¬ýü„µÿ×ÿÓÖÿû2þ瘱%:.Öÿ?S¨¿p’õÿO{ümøÏÓÏÿêß¼1¹äЉ⬌"tuøÆ«ÿC¨çó•XPŹ×h¨ =ƒ7Ê€. ”—r†0k¬ï²š Ô‘§üÎ;e\²’ÏÈLTrNh>éÿ{÷¶­Én\z“«û úyl™Ü"7%Ëý"²EJ¶ûÒ=F]ø¢_Ðcôcx¨Í}¨ªMv|9ÿ•U¦:¶Iªr!H 1dfƒzÛ ÐdדvU. ¯@ò‹)y„Ô#¾ÚZùÚÆÖ«öž+çÜ¡üÛwoKoÀ‡¬Up}DP,½÷Dù´ ê«·ß͋蔶IwPnòïu*°¢(Ò†KeÔ¶|[WúòpïÿÞÿÿ;ÿGQ¬þ¸úÿ¬¯–‡®âžïú¿ë?;¢ïãdsø1mí¿µÿè öfì̵ÿuGlpºsíÿõÿø¿ëÿ­ÿOG®ÿ68Ým˧Ÿüâ«7Œ Á#y'ruƆð(4Š•ãò t|ø¨ÑÃh½x”Îå(@ 4n€EèÍyùbaœ/ô`BïK~S¿sehMÝd"kÀ—)Ù“o‚z»£ê.SÏÈÜhmáF‘…<¡úx”Ç`WߘE&|òᤑ‹‘NžÐx!ûÔ䛽Bx70èô%:çÊ8RÿðÕný„§ú|¡½x+yFòÈL îéiã\¨ròtÊ£œCƒnïÿôûÞÿÿ3/̽ÿ4ÈÑËô…@g8è:«zÊeÏK—ןæ­þ?? ¬þßõ¿óc×ÿµÿèÒµÿŽs¶öÿÚÿëÿ­ÿ·þÿÙ´³þÿÿÿyúñ/þ†A¥–ÕÄwCÛ[dܘCÅ—É»ožw3ʹx!â¼(û8úæ›o\P€Y@txy4°`Š|áª-çøÈF¾Ê‚Fú#ÿrBÃ÷–~<® 1'vˆÒ¾‚>ΕÔA–¯¿þ:1ÐÍW ,¥Ž¡Q·ö‹ûŸ¼óŽ FÊy§Wx]Ú¡Ý×y@°FùÚèpM6±zñÍõÈõrd•.Ü_ÿêëì“Fù ©søàí‡ÅСåW¦½ÿ{ÿ; açÿÙÝhþ;ÿÏî" gõÿêk‡c×ÿ]ÿ×þ[ûoíÿµÿÙIüŒõÿŽï©?Öÿ›Í ãß²ÖÿŸùq½K¼þÖúÿÿsüçéËÙE±D '¡ìãoŒQ;¤â¬ÍËÇÅÀš:³i”ý~À¬ašúùçŸÏËØÏWñÐÛyUK]u[·A÷#LåO¾‚9êr(—²WÜòh嫜sùm£sm"GÁ+<…ÖÕ6¡þèþ(; ì‚Ò&±Ï\Š`þ|ç2çøà . häÀÒi~0 RånýÀ<ù?ÈD¢Ô+ xÕÇ Ý3åÞ`¨LîÙ%>xËäU–ÖÕ¾‘¿÷ÿ8'údïÿÎs}çÿêÿÕÿ»þïú¿ößÚg‡%2ö÷Úÿkÿ¯5Î Gjý¿ñ¿þÕÍçZÿïö”“±2!úcâõÿφþúúÿg}Ñ¿ ÿyú“¿úÓ7À4 0"€Vœw><«n*Ó²byèÄJ¸^xän¤ûΣ€;˜OPÎѺ³ã¯ÙÍT`I=Ùb?ôø ÷ú•­,ÎÕïZˆü×âúA=äŸ|SOõ*“º.¥£|ËàYY®=Gßwy¡)Ò~×òË· èS_ÄGÿè4­S¿i¿Çv ¶mÒ¯ÞÒÅôX<ý•Ý`WÚuTö{,ظ÷ÿŒ³öÛÞÿÂê‡ÿ;ÿïú·:ÅØXý~Zý¿ëÿ®ÿkÿ­ý·öÿÚÿëÿ±‘b3?ȧXÿ/®æÃ­ï¹þÿÁÖÿÿ_Þ~ü—?{cb™T‚s•i ª€;“&87;_¾š—pXÒÁ'/@È•~e;ˆb“ë8µ(žbÀþN”*‡@×Úן¾Îµó ˆ> —¢hÛNb³žÛ;…GÞ³;IЗ§sŽÙ½òôt¨£W/_=Þé•ÝVøNH¿\ýæO‡ôéÍÄ9éB?miŸ«Oû{-V®È¤ü€VÃÈ@ÎÏ>û,àV·qã‡<÷¸×­WÞÞÿ½ÿ;ÿŸwxîüÖ¹Õ=ôÄêÿÕÿ?k 6.²³w×ÿçµ\¿ìúìžµÿN?¬ý·öÿè…µÿ×ÿ³n:ØVõÃÖÿ‹Iqì‰Ñ•ëÿ¼}U|ýÿן<ýË ÀÊ£t€ˆuÒ̤L&+É4díÀO‡Vº2- ©A+M`À}ÿý¼Ï©!¼ì"šØ×óððN'“φNj25íûá7R& PFT=Êʸ‚4mx„¹F‹wù—Æ£xvè¯+•YÝähÛõPNŒ·yL0ò͵B þ‰¥ã jòÕÓ´ÖwÊÜ€±)ƒFß Q¾2JïËç_½>àšúê—':òJ—_ùìýßû ½{cgçÿÙ}©/vþ¯þ¯¾^ý¿ëÿ®ÿÇžÒÂÚkÿ­ý¿öÿúëÿñ+ï6’'‡Öÿ_ÿîð·Åžþøßþô ÆŽ Ï[Ü`t˜Äæ¤Zæ?](P”ô¤ H~Aæ•–ƒÇ˜‘€dÊ¡÷ÉLBÛ%0tì^ÂÙÑt¶§ax„žøKw´^éM ³áL¤^Aœ4és¨çÊx´÷$<—ÁÿcPI_I×o¯²óI;È ðú8`•— ‘cª”öxi™¦Ò:ÁGž¡™—ºµ}ÒÈ›—¯‡àôŸ:µ ;×ÚN´ê· »ÜÞ¾{›ûHööº½ÿÓs®‘põîÞÿöGæÉ Pã]0v…¤çìôU硸y¥Ýù?¸ó?úÕÿޝþßõß|˜qPk1Úõí¿µÿÎGŒØßlÛµÿÏ“(]?×þ_ÿoý¿ç§¦êך|:~ߺ~±8iÒç@“0qý“ð\Æš¼þÿÿžþ_v`¹an¬›ÌàTX(ê„Ö¨êÍwÝóã§yÁ{”Æøpdñî|Oú<®3ÿÔ/0äìøxûÝÛȃF=­ ȺI/ï\\@›ðú:f˧àüAƒ‹¯fÕ±DÓà\½åW™¥WÎÒz—•D*½>êcXåk§šöŸÅ'm¸ímä8²¤®¹Ö•S]•§“S9ýÒ´òLãóX`dŸw‹}0É1›¼½ÿ§3®þØûͳ³‚1bÜul9oZãÿGÿìü?¿(7Õm«ÿWÿw<ˆÍ‘]ÿÏz#ô¨õzþè¢ckÌõ®ÿkÿ­ýwìµÿ×þ§}½z3׳žÔÿ¢C×ÿ;ïWÖžŠ²¶x·ôúgþ¬ÿoÖœ±ñ;èÿ ùü¨…pv½N\àH+{ ªüj>Õh%"[úâÒ$\i=Ç›‚QÆKÊÄì´ï¾ý. ™ÇÜ>›¯ú…Ûüùâ‹/2áÂ?´èA]Çø5)Ÿk@R+T þwÀ¨r$Æ'Ç´ÿ¢;×ÏmRoÔm' ªï”¢ ìhô‹€OËj¯~ ˜w9ühäÛuFÞ*”¤¡Ap èòn«I;=}2•k;#û$‹œ·^òZøýª+½2·ï”Ùûß1qî_ï¡xïÿUÆòÎÿÿÆAtΥ댎Õÿ«ÿwýßõ?6ÇY.w¯ýw~ðÑkÿ­ý¿öÿø*óý¿ó$ÑúëÿÏüY8×ÿÔ®qúnüçËù !ƒÃ¯ãÝØd'ÏÜЩqX¦PïӯØ"¯CÓë:7wG§tviü`Þ~íŠpË,ç–³Øç‘¹áKh<¡ê¾À!ÈWù& ã¥ñ¥© x\ÇCFe./hý­-ä(½stê—?ˆQ&HG7°Ã5Gt<äù%Õ9}m÷–Mxßø(ûõÊWWûb E––­Êô¨\êL_ yÊ=÷]ÞÞÿG_ëGý¥ÎõãÞÿÿ™£3&„ÿ«ÿWÿïúOtµ¶îúl5kçÚkÿÕŽ2O„µÿ×þ_ÿoý¿õÿ×ÿ‡áÀ1rÀGÆ×þÛà?yã #»™„_Ï6CiãÑ?œø:ï£ìzJ™:úÌØ‚!Ý­‚‡ó†²)1ÿ³kò‚Ç} À–ÇL¾ÉƒF}Þíäòß\s/ à¤3¦Ydä ®µÁ•X(:’Í æ½€=ÿ†>>t5VÅ1~úÊyûï^ãÑ~âÐ~j×ÙMçxp+S¾Â0ô¡›¸ YéÚÚëöuäÉýœûpÕ¦†%þ®É´÷￱´óÿù™úÿÄ]ý¿úß:a=ÙõŒ® Ö\6‚x×ÿµÿŒƒµÿŽ ¯/è ó£¡6鹫xþ¯ýÿý'kÿ¯ÿg¾æˆóõÿŽ_{tETEü×êõÿŽAÇ ÆÌ¢ÿÿô“_|õFd¡¹€_Ó=5XM&ä0€æä¬ô;ï ž±í KÂõ§  žéìùa¾î|RÙYÏ>( \I}Þ¬;_ù‘s¦|áb2ÝH2§ü¤k×å™2Ú2!mŸ2‰çºÎ£4í›´{4";½È9´-ç\¹@ŒÙùçš\òÒÖ0fW¨àÚÖG¦y{ô¯²–§6܃ô“Ø{åZ9ÀðroɨrñMý®ÐëÆ}÷7Š,øÚÕÝYø Ò[¿Ý[‚Gëœë°ÊÚú½h]¾ðþzY{øôx‘¡œö ë lBƒwé]ǘX~mWobå×ׂY‰¯ë\ÌtŽ>ªX>m3:ÎDž«:ùèõÏ5«õ5=|ܧù—¶9º½ÿ{ÿI£ÒxØù¿ó?ºéÒCôGuêêÿÕÿtD×¢î”GÖ—Ñ!»þ[¡oý1öƒ¾ézL×&×ÿÓW¬ý—îÈ8Yûoíÿµÿ×ÿ«ïH3tÍu¾þßÁÖÿÿÝ÷ÿŸ~òW?cPÇ€d\ÎQcR\#4qSçìB‰<Ç\úÒÊò(_¯=ï.ÄÃ{ÎM¬¯5Ì89€!êÉw0Öä“?ççŽòí¹ëž‹•@5]š£|Èn‰ºRÿ<*X'‹,Î…{”BP†÷ðÒ†ìØšú•ÅûÚ½!¯²V6qCºúºÝœ‹õ±P9¤}xLŸ•ÉÄ÷<”k2“Up=÷³i÷¶“7aïÿ£ß÷þ?;ceçÿÎÿÕÿ«ÿ³¾XûvýßõŒ†Ø)l”9_ûïØ³zcí¿cGÇþ^û?ó$¶ø±´«Å6Ÿplöco­ýú„^¹÷WÏÓW³þ¬ÿw’þè±þßÁÖÿÿÝ÷ÿŸ¾üåÏßãÂ@§ >¥î áP ›Egô‡¼MI: ^qd/€MøMy²hÝó”Ëãnû%öñÂx_¡<Ä÷£ùâ#ÉOä»äâGýh”U+rtr.=Lszº›‹R Pu“à¥_”Å/AÊ I™¼†ÊŸ¼«¬þLÛ'&CÁòm™Ôq1Âñžî\ÛÕ}ç]š‚m®›°©½ÿ»{ÿŸç—1ò+gÀLÂIÛùúiçÿêÿÕÿ–À]ÿéÊ]ÿ>H_̘¸¯!ÖVaí¿g›Ô¼q¬ýwìíµÿ×þ_ÿoý¿,·?õCÄ÷ãF²þÿôÍŠÿÿä+„Nw½FWÉ}Pô¼`I® ÊŠ6·AUz¼ËÏ¢¤|AïK h°ÜÌÑkå•- 0Üs^^byyñø0U6 y&4ßã1 n»©”+Ÿ–Q¾²6?Néð:_M9GEF힀þAsÕ£:Mþ‘sò•R¯#}1±<|ÊOî“W잇2ôW¾úî|啟råß´æÛb,%yÃxïÿ«{ÿÏøÎùèOÇZ’gìÌàÉ€Ýùÿün¹ÿÏã‡n©®]ý¿úßÈØõ×kìÚkÿvulëëš}aí›u®w-»^ûí±S_ÎØéøXÿïš?ìô ™Ks¾þß±Q;fŒŸÚªÕ3ß~v‘O^Åï¹úòA³þ¿I—~ªŽnõúÃþáfe00®AÞŠÅ*oz1Î-œ‹ÊDßÏ?1G… ÿkq’îÚaà„tuôœ[>h?®_^ƒ/¦5´Œëò{1âÑ ýÎÏ#„oß¾ t„yÁºCèÀîà½×áü÷I ÔvU65zÆO;¶äËk}eg×ü»ËTßk生‚ÏNþù÷é€\ò•WÎñ1¯{P³ìégaïÿÞÿØ×˜2&îcè~ž¼ùó˜Æõ\ïü?z­swçÿè£tW½W=¹úŸÚ-¼úÿ±fuŒìú´ë®ÿ<Õ­­Ekÿ­ýgѧ£S6 }²öÿ‡shíÿõÿâ‹®ÿ}±þÿï¶ÿ?ϽqFGéÏÿ ì h‘ÞPVÜCž#Ê”!?øÍY@yÇÒгÀ-}®ÎËË/z—üaš.<ø‘çWŽÈ©îù÷ý¼X½tä9m˜O“Þz¤3ŠË›,vGI·ÈõKj€,i^rçèçmÛæÖS9Ðj­Ç.¤©7| ³{+[a=ß?yê>e®ú/T·<ñ¹×szóâ~Õ‡ ^÷ÐòÒÓW¬J«n¡ù‘gú}ïÿËŒ½ÿFíüßùÿßÑ-Õƒw]³úõÿ,(YWvý?ëò®ÿXZûoí?6æÚÿó#ûÚÿëÿÍ\XÿïøÇ †õÿG7®ÿÿ÷ž~ü—?{Äiì@‘vwZœ£½;0hÐJj°œëX¡\Ùjç0dQ(Hø?FŸXžCž2v8ðnÝù…VCO# ,”Ê9ù÷£|û ï=ÏŽ+åòxÓŨ!¯ò§=×±ž§²«¾ÖûúõëÃo€4t@2õŽ@‘·u“ÉyË©×=Èõ”;'ÓŽ<¢9WWžX¹na<„þM{¯:û²qä “qÃÞ; ÷þw»ÈîiÊ‘ãå_ÒµÁã„å¥~+ðtÕ5…R½?ÇH‘Ý\§îâ%”úöµô÷×.°W/_åQIiÀ2µöþŸñµ÷çæÜ5ïœ bºC|Ÿë;ÿWÿ¯þßõÿ®vý_ûoí¿µÿ×þ_ÿoý¿±™×ÿ_ÿÿ ÿÉKÜ9eÇà.`¦ÀÆ÷;^Ìáq‘î \1Ô¤qì@Ó\ã'OüîíyDèºÈb‘Wv2x5O¬¼C*¨¯¥ñ©Áx?G VB'Ÿ¬•£u·\ø8‡Xíä‘ÐkÒ];\K/0¦ žaèÅÓ‹´:D©·´ÓŽï¾ý6;¹Y¯^½Œ •=ŒôÍÔSùWîÐÜþd·›þ™2´ah”m»ÅÚAN1~þµMuÊ÷þïýÏð2žnaçÿÎÿÕÿ«ÿwý??ŒQ»þ}·ö_VɵÿÖþ_ûý?~Ôú·Í$ãwò5×ÿ?8ÆúÿSÀ8®‹ø‡Àž~òËŸ¿ ¨qP×SÙý½U¯f`rhÐ̺ åÜ{t$À•ÆR”+À‚Vzƒ<˜åF+G£•u”6æO¯Åoœ{zÓЖ®|,>väç|ãó~®¦£ðe¼Ô€Fvµ.7C(ÿ{»¤»¦äÄø6¿mi¹ÊõqÞ7þ®åü"§>  ÀVÞòÈ Ÿ¬‡ŒòÉSn <ÊTž½ÿg¼êC}µ÷çÿÎÿÕÿ«ÿwýßõÿ¼ÂÚ(°k„µÿ>´kõ Ûaí¿c‹×îl¿ˆ…Úœkÿ;\?õHÿÜúȵ°öÿs?´?î>ÍúÇ7\ÿïà sÍ­õÿ·ýÿè†Ô¤ÝózŽ NìK%*tN1ù½ûÊ;°*ßÇu ó‘€—²Ž&À_ø\më#~òßÎn(¼ñý8‰ù›ô{ßßùP‘«õy|ÒýkŒCëo_µ*gëOÛF&Ò(ïzïÿÞãÊßÇ ´ÿGÇìü_ý¿ú×km×Õ®Ç~øéúKgîú¿öŸqb|¬ý÷›óä…™ô²5b—®ýŸ~ÑwÛËØ©~™Œäõºvc ªÖþþZŸ:ôÍú×Ü›qµþßúÿ¿‹þÿÓÿÛŸ¾É¢1“šRì該¤üjLºóLþk·QŒ´)cð3Кúa…‡sÊB9Dñµ" <çò[gÎçZœGø¦Z¼¤ âÖ'&DåœÌÐhÍ‹ («2oy‘mdyÿn^?t«€dSO жK~eU¶²¸Ðà«åÉÙÅ''_Kôhâ<’YÞÊTžÊþqZ¯Å­³e ’G›û²é®„òLÿLЏýˆ@¾#ü¦ü\¤ÜÞÿ½ÿkÆÌ}+ùª¦ñ4c»ï²ë<‘úÿé‡ÿ«ÿWÿïú¿ëÿÚvo¯ý·öÿÚÿëÿÕ'®/WÛõ=­×âÚäÍ_ÿïàño×ÿÿƒôÿŸ~ü‹¯Þ@-:)zÞ‰ãZh~&ÚL&`‡s“¨ëPrlÇé&iЭqfÃ/”ä;÷˜[Þy…ï,øÞÍdÑ0tÑÝÁ¨”‰ÐoÎWÿp†.¥G«¿Wÿïú¿ëÿÚÌ©µÿžŒµ–:ª'ÙÐkÿŸâ­§í—Úækÿ¯ÿg,ô0FÖÿãz¯ÿo]Éx»sýÿƒÿ<ýô¯ÿìE· †b—…Æù}¡IÞÐË3Éä;ìôÖ8\+¯“ÑI“/Mà)Û:Ëü HÅD;‡­'×ðžÀ¡îJ’öq¨üb|Z·ë‚?b‹-yÓ#¿ó—/ÎgãÉ­œ´”vÎ…¼;kbuàAÖ÷ÐI/ÅêñheÞïuvF…ÁíOäÔö«ÿÈâÐòéó‘§ à­xêÖ')wË ye†Oïgû#íN]§|û4¥GW9"ËÞÿô´>Ùû¿óçÿêÿÕÿ»þïú¿ößÚkÿ3×þçÍ­ÿÇ_:ïw^ÿÏxXÿ_/<>$ÿaýÿéƒé–â éØÄ~=˜ÃÀ’æWä€À WG*Ø÷-a&¯ ²ÃØ;—”›ÜNN¡ë{ häÔC¡·¾{ü(>uX!4ÙZWª<ŠÇ[6²‘ù kò_éhÄ #¸ž?§ž¹> -ó>f(íÛo¿ÍBÄ(¡ˆ>ýôÓTÁ ‘UšÐ:ô\ X³«¯*Z÷@ ~“/5 *ùÃ0ï§"¯à 4ú+õd :ÛŽòG›ô)‘÷ L]iJíý× {ÿ¯±£3f|Ìɱóÿ¼Ûnçÿêº{õÿÑÔ‘ux×ÿ¬@+ëñ®ÿã´Ï+Öþ;öåÚ|„Økÿ}å?;ë kÿó!¯0ýÂg‰ ÊW‘l­I´þßúü×õÿÍ—êÕ3E.îš?Õ/¿þÿÓ—ó¬;ˆñè€9Ñ1@§v€–AQAz¶Ë]e*‹4õ©C,Èk¾r©Ò{sëuxV&1zL°ïŠâ˜1jl(ƒgª×¯_bˆÒŽKt³Á­Y.š8?“Ž¡[#7„íTøhËS@¾Á«£ÄÉ…7ú´G?\õ¸Ö†öMò'íÝ´ÏKë?ÎkýâÐN¬ÿöþïýïœ26„ÿÏ öÎÿêýÆ«ÿWÿŸ7ëo×&ëÑœG—Ì9Š]ÿwý_ûïüÈ™…uþ°½Øpæ‰cí¿µÿ ‰¼^ûý?jbý¿õÿÏzŸýÐÿ‘ErÀÐEÓb øøÁLÇWü4é„k™ÇÇ M¹¤Ê˜á„nNåyÄ®¿´$_>CË~?/AVBÚýˆñ–—Ñ;çå}NO º:“¹éá|mb( ißHI\µN Äo¦Àôiye|}p88 øc7Ö_| 庀žyÄnêL‰äágËè0J@#xöq@«Œ¶Úõù¦¿íЦzÛ´I@çlz+q C÷±4Î=òºÎý2wÓ?¿½ÿéÖ½ÿ3‹ŒÃ/ÂÎÿÿ«ÿ¿Í«ÿŸ(E‘u‹–8šb×ÿ]ÿß?vÚd|Ö‘+kÿ­ý·ö?‹ê9˜kÿ?¯)wŸdÇc]‰™n[ÿoý?³Ç8î~ Dúúÿ§o~ýÿ§ÏKܺ¸ù?ÿ<|[V«õQø 8ÕGLðÇÓ×ZM¯fg–ÞÇùáŸ:"l¤Ã'nêl ÃT~ŸžžØ¹óùr×=¤5è;2ä>O ¶íýßûoŒìüßùoÐÕ)Õûå wš\ÓFQ5Ïú¦4Õí«ÿçG‹ÕÿµÉx°jîú¿ëuDuË(˜ù¿öû²aí¿µÿGy®ýù7µ/Ìú;÷ø1oø@—£Ì çG|×õáÖÿÓIÚvµûŸ¾û&eÖþ[ÿÿÿûÿé'¿øêIo"׈èWòšÆ˜@üJ_e¡€æ\??箼‘cä(´Ò˧[A“pÿ3õ™è…Ê¢¡qyÝÓ(¤Ò‹]kŒ°È8@]Ûxd¾~õ&/žæEëS&@ÙÔ­62¢ÚGß|óÍ'Ÿ}öY®Ñô:FyHÓ_èY­?ô­CühË•7™a ½õò§/NÕ¦]d“§DxMÛRÇ\‹cM~x]à\úâT¡Ð)?qëjßà'­4{ÿ÷þ˜o׸ɸš1²óÿ€Þ;ÿWÿ›#}¹úÿ¬ÖAôœîØõ×ÿØ·?36Öþ[û¯c£¶(!4®.¹§­ýŸ©³öÿµÖ¬ÿ·þßúÿ³–üúÿw`Yì âˆv1¸/5<ë°2Γ?ëÉLà˜)MŸ <)/iò{Ý2êÌÂ3ñÇ¿ÈÊ ý”C…4|Ü/eãé—/NâãºÀ•~Ö¿Ç‹EµÃ£€ø£6yäQzëá”v!uÚŠÐ~÷íwŸ¼zõjvU½ ÈØ’/íÈü zà§é©g^pZ#­Ž¯¼˜úC×vÿz~‰ÔǾ»ÚÛ2á9¼µ-uòÕNÃL9‡{k÷XCùU¦½ÿ{ÿwþïü§ªn’No¬þ_ýßõm×ÿ]ÿ鉨.7AOŒÂø@—ÔæÈØ¹•QþØ,kÿ­ý÷lëÂÑ5kÿg]žþ¯ý¿þŸ¹‘1±þ_úÁ²þ×ÒYI~ÏýÿìÀ²`:~}R12ìä%YÐ…Ã"Üil·EªŒ]A‚]W¡fåÉ—hä+#ö…2‰RærŒÐwF®¹V&u\ÆPë²åÏLà‹îìLš:/ ïÊW£©õ©|Gê½õ:2–¿ð„–l ¦~I³ëÓÙ‘åÅí Ô•M¹:|dÿýð0I9×€8ñ#L[ÈŒö.Ã\XÑ“†NÙæ£wÞ4çm§¸ô„wr“¨Æ½ÿ£üöþŸ±³ó?seçÿõxíêÿèÊÕÿçÇ®¯»þïú_ûjí¿µÿ,škÿ¯ý¿þßúñiÇõ%Zçlñúÿëÿ³øVÅ$ŠYümñŸ§Ÿþ»õèá}vì|ÿþ¼¿É¯ªv& òí(êN% AèeæM#ŒÁI0BH©qcçãŸòD#¿@U!ü}½èÜ.¤÷ïæ z©É—wä~r¼p>û]å"ËE§£J?IϲÎy;±ÌuÓºË+@ÏÈ‹& LÆ«ôù¾½v_éò)›:U8Á.-|Û'ÒðûX®ÖÕô\#žúµ],ϹÑ7´ÿÅåÄèÔ©îôŸÃÆ êÓÿá·÷ïÿÎóeçÿ<ò<ÿVÿn—ouòêÿßd½Ûõ×ÿµÿÖþ[ûí¾Èúëÿ±ãs_þ)›©¾îúÿëÿÿcà?Oüoþä äѳ—/^> ©¿63Ú FÀM;{WiåÄ=  à-/õ ¨${äX&±é=\«8Ô_zåÙyÕº†8 Rdz2£N}ÏÏ=]^Ö§ÒÚ^¼´E¾¸uºP6´&轜z¿þúëO>Ÿ—¼k·|ü^ÎñÍ×ç½Yß~ûmøµ, Ë ´µQýBem_&íJ¯¼•¡}‹æã n!í¸vÕ¸N=SWeßûÿ¼Knïÿ;ÿwþWÑ9«ÿÏú¶úß;%wý·†v ¯Ý`mÝõÿÃÐÖþ[û¯6*[wíÿµÿ­¡wßfý¿õÿ¬õmÅ_lýÿƒ‘è‘{ÿ¬ÿ?¸Éÿõÿüßc{Ãúëo>zQy 4‹]F 3[Áœv¦–G÷†O·ŽÊ+]À“¹ÆÇÁºïÄR¾A ÄÉ Æp¬Ñ¹.ÈԺ슚Ì3Oÿ€Ráãîc=ñÙ¿…ã @Á¯IøàÝöô1EiøŸìÊ´Ï”“®,p ú?ú£?J¬Ï"ç,ÞŒ9åÞ~÷6|”k;ÉàZÝÄ­,x™æÀizíì¾—G'( “ç=]ä-]ÊOú$Ò~bB•J õ!séÍÓ. Ud™ÇA†6€xê(íC–I $žC½@Ò[h=^"¨xè©üänÙ>© ÞNÚTùÉËW/sgÛE†ðœ~ä©»üæ$éþ$mâæKs.È´—Ld—×>I¦?“`mêU×Þÿ3ÎÒ?Ó7{ÿwþ›#æÎÎÿÕÿ«ÿwýϲ9vý_û/¶ÚÚǶ›síÿµÿùëÿvý¿õÿ×ÿ?›–ŠIÔ~¢'øTÂ=ÏyÐŽïÅî–Vœ¤ôæ×ÓOÿúÏÞpвë§ÀÇ,ÊҪȯ%}ñ¸tà•ãüqD”ó|"] $>® –H®T×¥¿ƒ,Ò¼×JÜm„h ¶˜"óÅßËλ{)»¢”Ÿ¦$BÉÓYÊ©Ç.¦>š˜U×ͯ‘ªœ:ÉÜ=¹ë æ=\ÿÞ qÁ!¼Ò®yŒR™¾àŸlS‡óòEÛû ­çí»¦¹vTöôÙ—zå·tÐ^õ Ë—oõîýßû¿óç?ýJ¯¬þ?:Z_TO¯þ·rœ°ëÿ±/vý_ûÏŒXûoíÿµÿ×ÿ»–Çõÿ¦#Öÿ_ÿ¿†yÁ–ØÓAÚÿ ÿyúÙ¼ÄÝ›/Ð ÒóƒyÄíìß ü1Ø>›/ìy„èóz­ ‚M¬2¡Ê_aK  -¾ç¥àGÐß_R®î)–Á^s p X51€ìÕkxÛ1öâÉûŸÀ%\â‚8-›öOùÈsåã^žtçø+ŸÇ÷æ:»¾Ô0iv^Ùí¤~ôšn“VŸ>ú›¿ù›ãúëÿqÖÿ_ÿß8ø§À~ðÿóú͘d/ìF @¤™ƒÜ0 ®A¯æñ·ïæN“ð “W ‡ðLæO l,rhîü€ÐUGMZõG–I²¡¹‡ßiäW†îör-­—|À ;«„ÞøÊaiêÂS=€ ×ÒÛäLŸ AùuâFÞ«>J=Ê];®µúÙ§y/•z*·kuÜûªÝúëÿÃXÖÿ?>æ?þ“X1ƯÇC,BOÄXäš#k·ŽQ€“!qú‡¶@øñÞ'_AWžhðrˆ²Ð9î×è\ã+(‹Ÿü«<ùìx’_Ê Ôwñ:`Ž…õ)»žZgyº&/ùÓ¾ÔrêÄS°(ÿpúŠ dÒGÎÓFWý®,]y®ãý ɯgëǤåú’sÊÕÚnò”¦1žÒNd"»Ð|yÊ“ßùš_™ö2Ê+'­õèµ÷_/íý7>vþïü_ý¿ú×ÿ]ÿ×þ[û/öñe{²Öþ?þ;zíÿõÿÌ cÁ±þßñ¥øñMGiðA÷kº¤~¬óøò—®Q6}y¥óo•7×Öÿî·?ÿ?ïÀ2H ‚ƒDè ‚”馉 iÊõ1?tƒ†èâìhu~Ñã—Á;»~\£wŒâ½|»ð~ûnv]rõ†ˆ•Å?ùŽli“0PÍ5Y&v^P(9“ïW³È+ÿƃ®ñ·óÉc~x?»Ô”™|±ISze®ÉANåZrz_þóÈž:É¢lvO©€2 ’tî_w*¼ïç÷>VçiÃZeíprN1áós^àhd!—¦Ü~ô£œãç¥è„—_,v‚ÆHÇ`ôòÅó£w“<ÛÁ0ç€+×xØUDÎ/¾ø"_XôH/xƒÞcê!¤ë€Iá<®&‘«M~Y N¿ô¼æ‹ÕÿCOVujG=ïìÒ/ú ÖðAÙIŒlÍœXýGÞôª”¤ÝHNÚüE×ò•{ïÿÞÿÿ¼5'vþ??:ª?«ÿ/mºú?±ëÿ®ÿ~E^ûïØ_kÿ­ýÏ_ûý¿õÿÖÿ¿¬ÅGô?öôúÿ ñwÀžþøßüÉ@ŽC{G†Orôב·°ôýL¡¾¯Sórý‹¸°ë›n·OøM,ÍÍs}?Réõÿ¯õ«E½Ñ&GË–¾@Óùšßáow•®@Mw[yi¹GóúòòÊ€lv;}7»¡¾ùæ›ÈkWTÂ4j~/ú`×XÛ8„‘­õ„þÖw€2hÔÇÈ `4y÷P©ýŒ^½q †ÐbˆF~iI¸AZûß‘Úø©3˜¤Ü¡üÕ§òðÒ{ÿ÷þ߯0puçÿÎÿÕÿÏ»Vÿ?¯ó»þŸÝË]ŸÙµvý?ïñ\ûoí¿ÚðµWksÆðœ?kÿ¿‹=¾öÿñ©Œ‹õÿÖÿ[ÿýÿ®]+Šÿ<ýôßý«7ã°ò¼{ûnv½øä³yÐ#œÙ¾÷ SçwE¾ǘc¼•7ØÚ(½•KrØ#‰4:»¥,ph…òÄØ„¨ƒš;oé/.pÍ9PÈ HC3€’ò}YÛ"ï%Gyµãì»×…Ÿ<‡àìj‹vñƒ¾}ÂëùÛvòàÓ:m“ûôÓφtå[×y<ñ<‰UËE6}qч÷´·é~%í9‡ûûâéôaóú«ÁÞÿ篇{ÿwþgŽÜ&q礤ÿGŸ®þ?ºu”íÑ·ÆÆí¼ÃgõÿYúŠwý?kήÿkÿ­ý7?2¯ýûÞúQ[cíÿõÿü8Ò°þßúÿpƒúïüzç(þÿÓñÕ“@ƒ…NŽªïæQ>àÀǾàTv] Ô˜ðÉ/ÐÞC#t¸ét‡E*@Òu¤áÏÂK~ëvŽgëþîíw#ÛyÌï_Ï€˜ºCO@ShînÀù-7<7{â,Ò&8Ï ˜sò8ǃ£*EºÐ8®çÀ#éS•ós|ÈßòjÛÔ8lÿáðmê´³ª÷Jº¾áÎû¼$ÌùTtêÎ%IN¿§=“ß{PÉUž{ÿ?¼?ºTÿìýßù¿óõÿêÿ]ÿ­ ]³»>ˆvý_û¯¶{lí¿±™Ù¥j{®ý?#„->GuÉÚÿçìíõÿÖÿ[ÿÿ| ŽÞ\ÿÿEôdu$½ ÿy°² è<‚ç—Ð(ÖÙ¡cñ0UÉæ¼· #êžžñòŸ€Îb&Í¡l©¦¡¨Pbê”C 0+ˆ&SI6 ¢_.å½K:0F­èðöÔ\„^Þ/åÑ>ùÊ9È"]Gá×¶)„‡Pµò7½«ó´,müÍô_ί²‘iäBß2=k‡v‹Û.õ9¿÷_Ûówòåõ d7ðc@%}ήö·^¼ÅŒ¼êßû¿÷ßxÜù¿óô=C·TWˆé¤Õÿgýª._ýÆ…µÇzÜXÿÜׯYük 5j×ÿÓ»þ?ÛEkÿ»ÖZûÙºö¿±Ð5˜N]ûý¿ø«ëÿ­ÿ?ºáÒÿÿÙ` o†RÊιXG¯Ñõ?DùµYÛOú(ÛyQºsm&—¶¸Ö;®X®Ǥ{L¯@U£IK¹©W(@iô ˆÐÃð1¹•AwvO¸ò–ïqÄGY ·PÙšô »äV—û®ç{ÿõÅÞÿŽãoçÿÎÿÕÿ«ÿwýßõí¿µÿØŸl`6‚X¯ý¿öÇÁúçàõÿÖÿï|ëÿÏBñ€ÿ<ýø/öF'ßÖ€©Zz5ãÄô½P€à”›`Bo² Ò8¾Ò€G®-z›|ç‚vŽ÷ t6i§¬ô<å…°eÒÎVýÐεú®)RGiή#8Í,ºó‚vyƒSœë9¢™¼´ãýyÔѹ¶}öÙg©¤Œ ==~0:ª³²¶Ýmzç蛦þÔ™Þ=r(×/çè[V_y¯˜¼û®3ü”нn½å‘ws 9ȵ÷ÿ8¨úëû½ÿq“q¸óçÿüp°úõÿ®ÿYVkÿY;wýϺ¹ö_l5}Áî­ÍeÄÔ†kÚÚÇ>õwíÿµÿ×ÿ{öýèõÿž7}DgŽ¢¨O»þÿúÿÆB±§ŸÎKÜ ‰þ5ôÜcf°f2:À«¶_åÑu 97ؼ(]š:LÎÍ`-À1áÔ?õL]½îD–÷ÃÙåº_d „æ¼}÷6 Në©GçyQºöÍÑ:ÕƒŸ]Gh”ù´QùÔ?yZ€™¸¿DVVò‘yb² g‡Õ4sº/y䑯’ku è m“Üðo;.zåPŸÒÏå[_û¡|ñ»Ÿ·}IÛû¿÷ÿx;ÿwþ «ÿÏ«ÿg=ñ°ëÿ®ÿkÿ½Ž@?²ŸÖþ;6åö·n¬ý¿öÿúñÙÖÿ[ÿ¿þ8¬AXÿfqP‹ƒIüÝ🧟Ì;°t®íTিhAg±LAÀÄh•+¸Báõ›O>ÿüó€3åoÇ~ќ㯼 \y¸ïi(Àì»o¿Ëõ¥<>7ÿ®rŒª—¯æKˆƒæ«G¼tvQiÃüÁúì*¸TöIïñ}‘¬mjûòþ« ¬ŠÑ2u·ðû&ÿ$>Ú×Ç;ˆµ;$„>ÿ#>=Ô.rqÛ+®\ΛÞ:ðÍ9^©ä´9§þL(O1^çx¹ê%«¸yÚ¥Í{ÿgüîýÏXé84v:wÅ®wþŸŽ™¯ÓÂÎÿÕÿÆÁêÿ]ÿƒc{ÄØõí¿¬›ÖN‡µuí¿µÿ¡v~ì‰âò×þ_ÿÏ8Öÿ;Ow­ÿ?ƒáÒÆE‘€ê”®3õñé“ßÿÿÉKܫ۠6$‹ç %4 À ´uV¥°AÇAT%(7´­CšwL)ëð‹î½å«ð™ò®=æV E¹Ê€¾²ˆLyZÇT~ê —L2þx’MŽW×Î+wPƒGÛ$SNZ/lÛ™eÏùäi¾ø£=Už~!We$oûí"J]¥ã‰/´-ß6{/˜þ¼ÓVæ¾3Ìg<84A¤ÔôAÚ0é½/b<ï|Ô ÐC/¿¡}ß¶Io;ÚW{ÿ÷þg¼7ÆÜÄC;ÿŽÚù¿ú¿z³s¥s¤ñêÿ]ÿwý_ûoí¿µÿ×þö±êƒX7ë ‰ë[é+þI|”Ë·ñõ÷x1s½þ_pý¿õÿŸpóG¨Íù»àÿç%îÚ€*ʦ¹ÉÒªÐ÷;y‚–v 0¤õWEŠ¢åå½ýîmx1ÐDU>xÖh—8‰ã t‰|öÌ®-r„ÿÐH÷˜žŠ)&òEžáÝ÷E‘Ímâ8IŠlhÈóþûH9—¦îÆÚ€_®‡Ç¯¯Ú£1ùñ ¨5<úxyÒÔ1‡¾Á£rËk=šÒwPIG§LûqÒ6ׂ:;ð(:ô§ i¹OÃòÖ?ÃîôÑä{,›’=)tnÌI|ã㟮ÿ¯oôÅúÿç‰4}ñô/ç%î:&Àɬ%ëÿ  !žü†3¨´ÒA[:[F^€” ÞåqÀ ¿f}Ë·,ÃïÔqdî@gQéZ†}4ÍW¾ü25ÎüHšB8:`÷anZ‡àTPHÑð"ƒÏ__D €tí(1V ×È霕”ħtâHyÂiãì¼òeĹ.¼Ôw݇Ê*]™ÆèåùJ£îëË#ûÐ ÏôÝÈk9ùv’…gnþáZ}n°\õªçÜ›ë ¯8u]4ÊHßû@E}§öþÏÜÌè>ýÑqÖ±³óçÿÑ1«ÿWÿp0k“µhŽê‹]ÿŸ×}k‹~ÙõÿŒú£ëIL¿ü9ëÍÚkÿ­ý¿öÿêíÿ·þßúÿ¿sþÿÓ—ýgo=B{çÀ™ýXF!ÐQj$©ðÁ">©|-#¢F•wTÉS¯½³Ô\Ã4…®ëIL9rÈ÷§¯È‚ëP¾¼Äx@¸…ó˜ßÙ½ùäOÈcuÃC{r}8ÎË¯ð›´Æò›ÞøðÀiÚø*­ô:!Òz®Pøösë“Þþ—VyïÞÞøÆ¤1êµñÎKßjß]V² }„K.9ÉçYir9÷¸¡Çæ"·zçp^þ¡¹€™»LL«ß\üôƒM uh`äÚû}ÔéZº4;³’?u©Ãû²”k?¤½øj«ø’ ­úìVûôõ§i¦öûÕYÞ«×çEúøx×½/r>4òÂgJKK»œçzœ \ó' ¡Ùûÿá˜Üû?ä“ƳñbL9vþïü÷+&ݲúõÆB–’³ŽY»þ}péÌ]ÿ×þ[ûoízÑ8ÈÚy­Ÿkÿ_¶Äµ†Ô7 Õ¡9[4~NræÏe—®ÿÇ\Og¬ÿ·þÿïµÿÿôãy„° tF}vìPœÓ(×KqØÉ²3T…â8¸Q¾¹<×tw¡÷rsñ÷£x¤ã¯Î™jX¹OÒsšô9â4_´ü‡}!0xs°ãd_åGÀ'u|͵wÚ¨½íW.uL^Ú4QÚyžÉ¿h´-Ê{´´-^Úéº/´óìûé3†«À˜¸¥ß®€—:•op®Î§¬´mQ¾ý§…w“m–þjv¶¡ÕÏiûð)_rµßsOçZ^ò'––zFtúLØûí&Üû¿ó?suç¦?Fw¬þ_ýoõÊZf-ÙõÿØ»þǦXûoí¿Ú¥µ_­kÿ_:síÿÇX`[+õMÄñÍÆþѵÎäÔ+=ÉÑòëÿ/þÝtÊúÇ×e¶®ÿÿü$ÕïªÿŸ—¸›øB Ïœs×ù•pu) OÁ”»Â@%ƒO”ÌÙÅÐçÊ“ï(òâå<:7Ï›P²C'TôÃW '­|r=ò†n.²Ø%½4ø¹”¥ë’fÀ8t( òÈH.qëA×<¼~ø4eGtä’þ“§Lémïß ø4|ÛN}ˆWv‡M,¨Ë!è€>]èÅÉúÞò¶?Z/Î|Q±uºvîN­Ïý)­y=wM†—Wû[·ú•­6á¾÷￱ÙñѱÑù³óçÿêÿÕÿ»þÏîðÑ“B×Qç»þøØƒ>⨮ýwlÔÚ`kÿ=ûú‚ͼöÿÚÿôÛ“ï}z騸7£F’fý¿ø|úJHÿä윻^ÿïà úȸ‰>}´þÿÿþ!tc(þ:šÈ7,/þžüY.>ä×XO„G úòiZnü¤ÛuðÉB3/‚)ý¾—S¯r†®Gó„ÒPUR™€ÃmóÅPïxROÐ rØÉ”²ê¸ø©7 ÔÐx?E¬ò¡ôÈ4|];G/ï©W ŸX›hÄÂwß}‡Iže&¤žÃK¾zðiPν &o2𠯩 ½¶¶Ý• 4t•O¼s=ñý3ªê(±°÷ïÆ‘ÿÏ¿ÿÏŽ}Ô¹¶óÿè•(›.ªÛú¿úõ¿¹²ëÿ®ÿlJ¶ËÇîåQû#úbì±cí¿µÿÖþŸÁ×þè¶—ãá—¡+ªCâìÿ·þßúÿ¿ßþ¿¯CáY˜üþY4@@Žìhˆ1v h]Ê$å.EB¹(‹7ç…ÑZpýðÎŽ9Ò™XÙ8Î×99ÂgdˆWº´<Ã_L¾aòü’‰7¾Ê…v¤:í=Æ‘sùò²ÝtÎÕŸú&Mº²®›ÞòÚåª$/ü'M›Ò®Kζ+Û¤õZ¨h‡OùÎÕã<üçšó×]\òñP§Pšž—üÐͧaʸÎ}I¹éçiß¡ßû¿÷ÿ€2gŒìü77vþ¯þ_ý¿ë¿5r×ÿµÿj[‰×þ[ûß8Xûÿ€I±Ç¿¨®\ÿïø…úEXÿïlâXÿÿŒ‡õÿÿþøÏÓŸÌWRC,Ê€ Qw(ÉË1é@!ùƒ„ˆä¹%Ò…€7€¼®²ø& ™Óâ÷ã$z7¥Wzt®‹®ãÁ‰p8Ï¢14äh£(ÂÿzÓœsB¥‡·Çþ ²—LÊà)ï¡t/ÚÔ?@”à¼tm2•Gš@}Éé•VШò–¾ü\gKÕ”õ¸ªAfØðªâ³mQ½³®~(oiøyïUåi=?œí÷ú­ø½O•gïÿÞÿŽ™ÿGW˜;æŸÐyréŽÿ«ÿ«?;wVÿïú¿ëÿÚkÿ Ý×˵ÿϓ֊Úkÿ{}ËúlÌõÿÖÿ_ÿÿÃM9ÿ+øÏÓWÿþÏß¼}÷6àK X€)YÆ J:DH"¯@• h±Êާ@Y罤MЕ¦ Qx)‡W^æ>¼Õ'PîQês`ˤ ñõbôy·Ó0ÃW“­‡w5Ô\㨠à–ECS¦åÃdh\«WœrC﯇“2<É¡"±òŠÕ›•({þUB=é»)£=iq.ù \eK§“m±‚€Ná=Qê}uª_ÙÞå(’iøÈkz_-¬lïç ”%0L$}ïÿÞÿ_csçÿÎújõÿêÿ]ÿÏBßÙõí¿µÿÖþ_ûý?kÁú¨ækò9×ÿ_ÿP“`Å(øRþÑðŸ¯þß¿Q¤»« ¶Hë{83®M\ Vw?qz ˜p~Oî5 ‡Ö‚ßO‡Gû䘔I={×A_¬'Ý9Y4þýûÙm5r’QN Õ=_HF€ŽúëœW~ñ’ž‡×ÉÅ_:™Ú?襅~ε£à“—££Ôä‹ÕéXdG›6é¼´mΓ71Z¼²0NÝÎÛOÒ8¿@+ý?ù~µhßÉ‹â˜2Ã0­ðk—v¿z= ã€WúA]Ê£PÞW}±/GMÞÈÐohK¿÷￱±ótßÌ+óÂá|çÿÀõƒ@¯­þ_ýo,æÉ®ÿ»þ¯ý·öŸµaíÿµÿÙ’]êÃH3>Öÿ;¾¬þi?­ÿ·þÿúÿÿ}üçé_üÅ—oT ÅÄâŒÔQ›ë¤ÏÄŒ€3&ðåƒ0e®QHC@)‹×Pc9yu»‹(NÐä+§. ‹4Ç÷³k(;’TtÉäDi÷ú•8€àRÁ›8“–zÄŽ©€pid=ðÏd|ÈÓ6É£×ð¼˜Ý@ûüóÏÃÓ¹´×Ÿ~šÊ"ÛÈ®-øµ€K­ôñËÞÅ_Ôƒ¿C`âKn}O†l;¼äéî3÷HõòÓðQåö•Bçíç½ÿgœîýßùŸ‰öÑŸÿ«ÿ«ï êQ:uõÿ®ÿÆÃ®ÿ—ÒÛ£sÅÜXûoí¿ØžQœÌ÷µÿ×þ??Þ ëÿ½¹þßxäëÿg0Ä7›B¼þÿÿÿyúÉ/¿zóîí»#@–N£\t ´9ÉyäÕ¹;ÛÏP^çù÷áž3J=»yÀuLÀK¹s~¿.¼€>Æûœ£ip Ø ¸3À€¨ò•¿˜+È‚¦|¼÷&ÀÏ%“kMQ† =ô‘>(½~ý:"ûlZ{n@øŸÖðœ]fä%{úGû&¡œáß nåÕÛÝrò¥¡ðÒ×ø ÃÜKeñM|õ ÙJ¶÷ïÇÑÎÿÿ«ÿ~¥#WÿïúoùÜõÿØZl ¶ÊÚkÿÕ-k\Œ¾ÌùÓŸ®×þ??Zs:Öþ_ÿÏÈ<™¹±þßúÿëÿÿÝñŸ§?þ7òÆBc1â¸5üš(ØÝ€^] M_h& zá<Ææµ¼PòNª‰ãÝhd·Î;xƒŸ<’ O@+”Öb .´xÏIòýâ€J[ÈQî¡,æüΧ¼òbó)§Œzs8ŸÇíÎìøJ˜zNMg1ÂÌï¿?rW9Iÿ¡ 4…Ó‘GÈã{snG”PÙœ£QÞQž€'4®[oÛ–{6eò~«¡D4D£,õSîÝdvâ Ã/}6²ìý÷Þ°½ÿ;ÿwþ¯þ_ýo}Øõ×ã`í¿µÿØŠkÿ¯ýÏ÷Xÿoý?ëÂúÿëÿÿf0«c›Á-þ)ðŸ§/ÿúOߤ Xr=šÇq 03€GhØ ¨2H”ElvõH $3’Sj¾ü—„¹NÙÉ¢€$vEI»1x7à%àÓP%麴}¤°@×»Ù‰D¡»“ ÐD¾áWž:¶;¯ò2seæ@§ŒúRÖ#Š#«G÷ÔêâCþ¶Á/LüÒ4|¾0KŸªÏ.e• ˆt*t~oÛÇm×}¬ùx ‰'­|5€œúÇÑváFY°ìõ€[øÉ»ƒthúhæÞÿóØêÞÿÿ;ÿWÿ¯þßõ×ÿµÿØcµéÖþ›×X¬ý»íÿqJÆa17Öÿ[ÿoýÿõÿéƒlüçéÇù³7Nj¤z:ˆP€¯æq5r/_ç¨âÚ(ïbÎXàÃ{Òñtî<`QùÕhL ɹôî<ÂÏq/‹§k )zÌß¿{ÞÆàH@CF‡/üM8éù5I}BvcÝêøä+󘥺>}4QºvºI•·_V¬ÌÀ¤;`W€ILnïª*Àà骛,}ç•su÷EåJ;¢ž¼Zš~èýÑ'ã†Nß ÒÞM»*7ÞM'ËvúJúÕiíó½ÿ{ÿwþŸG“wþ¯þ_ý¿ë×Ѭµ³®sfwý_û½ÅN[û¹ö¿±p?Öþ?¾[}:1ºþßñÓÖÿ[ÿ¿¯ZÿÿØÕúƒþœXöHÑC1¼Æ3ylÌÚ´‚|ûí·ŸüèG?JzÁ4˜:,RJÚ»Cä)ÛJkÔ¹vcÐ5€PÐ'€)u_™Þ%¥nÀÔG5ÀþÓ1ž”`ä"ϲ·=beÂ_»6”-x3™‘CŒH—:®rø©ç^áãZ ;þ^zæGe"×ÐàçüW_ÿ*}o÷V_Â.Ý#‰‚s|úR¬¬ u®@]Ó[FLò•Nš ½÷zïÿÞÿÿ;ÿéˆê„êKJmõÿêkÈ®ÿ—¾ëìà-{‚ÝÛƒ-2×융ÿÖþ36Öþ?ööÚÿnDXÿoý?ëDƒYB_$^ÿýÿ ÿ#üçégÿî_½ñe<ê1B#a0 §Æ@{9‰)†,Ä€ëKŸ•E+6 å½]K^pnKiç%TÁ<¾~~±TpŒtAéê~ß÷?ÍÎ/Ÿ[b -ç<H?e¯ÚÜiýø² ºê•žz§Î>‚¨Œ_*rd´(ã¯&Ï}†Ÿ«©GxîúŒH·ëËî,<ÓOó.,|õßÛïΗoá=4@³ÊŒ><&]xœ_õI#ÿ½mÒï³Òža~¡ó®é7¿ {ÿÏ;ÅöþÏ8™!l\ïü?:cçÿêÿÕÿ»þg¡œ?»þ¯ý·ößÚÿkÿ¯ÿ·þßúÿëÿŸþÁ‚kLìeð† üçégÿþÏß tôÑ3[žël<æ_Áyö믿`ÓMò8¿S&fð+ð"žp ä§Œøà?0ŨƒŒÉÓ¯”'ow -õ\`:ú¾œ?À )#(¯î¾Ó@Ù‚Gí€=C/®œÍS÷“5^a>²Üƒº…´b×úOýª}I›ë:Kdi™Öùà3à“ó»|wy9†öi?ÚGqúeË%ÖΑ«õìý?÷~ïÿÎÿÿ«ÿ?ÐÇ«ÿ³¦ìú¿ë?ëfí¿µÿØÂÚÿkÿÇßàçŒO³þßúÆýÀ·¯ÿ¿þÿ?þóóÿóÿxcpy“R\}Ù;­ u ý,@ç¥EË#pyGÔì"\ßBï<ïÆÁà …þWð±Iž­éêRN0fÊÔiY{òú‹oÀ:JÓn1eñvÄ ½dh½hœ§ —<ê¬Ãz—!ü'/}2…ˆ²9GðQ¨ì’ï¼¼[‹ŒÒ´Ù!衃•}:!ý ŸlÚìk»¤ mèúX¡_‚4!òO½ÚØ~Øû[ý±÷ÀÝë=t;ÿŸu¹“yµó?:võÿêkIÖY wý§!> »þ__ {C_kÿÍ­kÿ}`Ò#kÿ¯ý¿þßúëÿ?ƒ}ôâ8ßÿ±þÿy1mùô“_|õ†“šÇìÆ¸à”ÄÐ[¸"ePéL» Ä¾Î6„1FŒÌ9@fº7FвŽ.J5^¼! ]D·g],vK­W€¥@Ò3Àsê‘îÅå’È ¬F©‹|êAçºü*! Þ460ÈìZžSþ´(Í:2á7õ5´Ž\?'gà‘¯ùø‘#ýuVW®'í§_úx¤6±,z]k‡4ñýÀV¾zòR¿Œ ÊØQ×÷W¤¿§­{ÿç¾Líýßù¿óÿ3æÂêÿÕÿ»þŸµÓ_kiv˜Ì:ÚÐõ=×ÏÉ»þþXûoí?v,;TXûíÿø<ëÿe>¬ÿwôÂúÿëÿÿðŸ¯þÿžw`=ï¦fytlŽ!vb40Ô„86@ðŠH(% ’4³`M@“¡?Ž¡K@–¤('°ûÐåüœ)?ô¾2ˆ>åßúðˆ¡9ò²œËŸrg‡•sü¤§ž‰»«@úä"Ò¡™Ó.ÄRcØ_Azx_ò®mJš§“FŽÐ_e‚xe½@Y)FŸëÊ‚Þõ#žó¶å‘–ÜgºÊ‰Nß o ™¼\kïÿÞÿ޵ÿgWéÎÿ£¿VÿÅš5bN«W¥®þ?»­MæË®ÿæÌü³VϱëÿqÖõ»gí¿µÿžæÇÓµÿÓYKÖþ_ÿoý¿Y.ÇžúÀǽ®Ù[Žõÿ×ÿgC°3ïøÏÓ—¿üù›+10ÎËÑÏõ;ì’òBq€€Å@bÌ;7°¼`}Nrãmʸ69Åh5bÄÊáíåáF®Gê6‘ gah*zõõ—œO_š·ô+/¯ùÊÕ÷’ò~YM™KC'ˆÉÙìJšóY#‹€o ó‰ÑBhZF]Çpÿp¦ð¬Òø¦®Ó”\G¼‡Ÿ<ý÷í7ß$Ï{¾Rf@Ã슛6äßðiHÝ×ÚÍð™'3‚¥Í®çP¾}¦ÏÝWAúÞÿ½ÿ#îxÈXÙùŸù²óõÿêÿ]ÿéD‡uv×ÿµÿÖþ[ûŸyom¨íjíÿõÿø_ããl…»¯¶þßúÿëÿÿýñŸ§ŸÎW3»æ` Ä1Ù XÉ3;ùh„¢ÆÎ݈GŠ˜ÖÐ{ÿýy)¹üòÿ¯ÿõ¿ÂÃ$/H¦LÁ¬,~ ɶfH“Ç߆/cB(èä<€Ö¤ß˜ždN]"Aõ ’µœ÷yµþ­mŸrÓ‘;ñ’wï|¤=ÂÑG1ñÓ&_tüâ‹/B÷«_ý* Ó+;²¦ÚCå®êS…¨®æ“ïã¯;J³ KÈù”Aß üÞÿó.2cdïÿqXãÄøèxÞù¿óŸªó¢‹®1òÐ×Cc.­þŸŽZýý±ëÿóe»þ›³ößÚlpëÊÚÿkÿóoê=ì‰õÿ2?Ø]ëÿ­ÿÿ‡îÿ?ýÉ_ýéΩgÓMÒ("Í‚baé„Aswfå»Î£o0ƒgù(×ki:]™O?ý4±©»ÿá#”§se½·I.x´%ŽÓ pÃçОÇ|…0<‡ÆûúR÷(Ñ P âj»ÝP©÷vœ«ÏöGLúy|äc“ðx>Zù-ZõOZæ_WÄß9 êÝ8|Þ…•S.m¾‚þ+ÿwïß=@.Üór·PÍý™¸/åÇ[?Y‰v§=WøïýŸ€{ÿ3z:o3.vþïü´úÿü8°úÿì^¶¦8ëŠó]ÿÏZÝõ¹vN×ìtÖüÙõí¿Ž‘µÿ~»\¬ý¿öÿýö®/ñÖÿËòѵÄ|Yÿo0€õÿ3.þPýÿ§ÏKÜM†U…D©jÂ4~ºÛHšr eêôz¶= gCÆÜm ´¾|ç™xtê½+,¼û|¸<”_+Nè”qÜéRß%/¹•CŸö]mÌ"©®‹'ÁÈèQI²ÿæúúZä t)¼¼hN¹Ãï@‘YûF&Áµ#Jwøy”QP¦GûºéQÚS¦ùÊ÷EîÒ\çãèDA{“§þ†¡M¸ê»/á?wà^?^Ò›æÚ¯cïÿÞÿ­Œ·@£bÏãnçÿÎú‚1Vÿ_š­þßõÔe×öûZK‹ºÞõí¿1¶c„]ûoíÿêãaíÿõÿºé`ý¿õÿé†õÿgƒÒÏ®G V|L:"™,cdE‰N\ÿµ™ŽD èà¸ô½sÁqs]\(+H«ñæ×Û{°[Ê6bqäÁ{Ê©£2Š]¿ž\x ®ÛQ¤~’X}‘zê9ú”|Ƃެ>¶§,ÙúN |IMö¨3ç©ãjO¸þ´dw¸«ßyåEŽ·ºúR`õ¨MëREwd¡š—‹!8½š«+館ïã£TäZWûVzä™§ðCî½ÿ{ÿ—Ž'çÆŠ±h¼ôÜxr¾óç?-d<¬þ_ý¿ëÿ®ÿÖNXûoí¿Ù½™AqýYûíÿõÿÖÿ[ÿÿl ²d®ÿÿ[ðŸŸ\/qgTp8…@Ÿ¼}Ò€/¼¡­S¢L ”G,8³ÐÁGù¡g¬¤¼Û»q1¸c‡Už{Wî*LÁ'aÊã«lå¹øäÝ\ÊæqD`Ôð{ùê|y08%¨¿írýxÜnĪüòZùGÆ ÇÈ:€ž|ò¨¿aܲCsÕC×¾T¾u?ò8ú7þÚ-h¯ð(;¼Œ¼woßeWƒºå{Xû^™H;<K *œ«ç{K&¡1ÙZ¯sáqÿœïýÏøÙû?cãgÆNÇ óÿg~Ýç’~qtî'oçÆÓ­«ÿWÿïú¿ë¿×þ»~T\ûoíÿµÿ™ •õÿ橦õÿÖÿ_ÿÿl–à‡>^â~wºŽ¾Çk«{=ã·SrŒ2L&=çC,Ï9Ð$mâî`*±Šcw€!àçWYå¼  R@±³” Ä@IDAT÷`ù"bΧ.ÎÐG½ýņôvÀž¾ØÝ×ü(?25©¾Ÿr‡ç¼ ~Ê´žîÀ"§Pdב|²Eþa¤N2ÞÁ.yè ö$Ò„ôÛÄá9eÅå‚ëOåHÞмŸ>)?} ¡Ê×çÞhSù('ôúb÷¨ãžß<ñ]®žK{ÿ÷þÏXMØù¿óõÿCŸ®þßõ×ÿµÿÖþ[û¿v¼˜Ý\{}íÿõÿ:6ê[¹ö( ¸yÇÀ>ãwÍJÞúÇþÐ/ëÿ¯ÿÿ1þóôÕø×oLD t{ží<Î5Ù2¹Ð\»€LJiˆÀ.pMè2à®Çî&½;Ž´Ã³`>—ãï‚Xhä<ŠlSI¿@øòÎÈwfÍõ‹ ª¡W¶ír ,ÃÓ®-Qù—NÜsàUÀ¹ϼ«‹’vD–i/9ñpÈw8o[‡äñúœßòZ·X6â\ >ºÑâÛ€·# Ö$Vù‘í"”Þ¼ÊÓ²H>.¯ŽÒïýŸþÞû¿óŸŽÙù½`•Xýtoõäê«þ¬;Öª‰»æøñȵô]ÿ¯¦?îkú®ÿ§?Öþ[û]ZÛÛØkÿ¯ýoLTG:Ïš»þ_|<ýñ±ÿ6ËËúëÿs[j‹¹0^÷üãñó»æÿ?ýd^⮑‹.©¢,\\Áâ2‰I/­4çîå¤Q:å[ã›òÔh”6Ùí%¸và¡sÑ‹½J¬e¥§³§F¿‚9å}Vsmüæ›o>0ñUÎaçVQìÍä¤â%¿id#'°­åÛ6ò¦ObµÏ…69¦ž<qÕ×¶ëðõN.<’>uv´I{„‹6í>Ê ‘ßi/ù+“<ü*·6LCr=-~äå­2éáÃÇñ(?yáè iëÐJ/­4çøìýßû¿óç?PI7¬þŸ1A·¯þ¬)Yû¦OŒ]ÿÏ»ëÿÚµµª+Öþ[ûŸŽ\ûý?ºaý¿õÿá ëÿüçé§ýgoLŒLÁ6G€ã²pQPɯªÃÓ™v1ŒB?濫pÑ:Ê÷K¤8¾Ÿwf½~u~mâÐs€¼©¿$ón«>2~‚jö!þà||õòUve‘±Ë§G Sf†`)²MÄ»À1uê;·È"ÏÉp— A¢ÚN|ÒŽáå\ ƒsåKW0K>úò—V àK<çäq®Ï{®|ù–®mÒG/¹g¥ÕÿÊ•Gaïÿ°{ÿwþÏÌÙù•³úõ¿õe×ÿçµzϬí»þ½¸ö_”¥9²öß³=\û²víÚÿãpLXûý¿ú`ëÿ­ÿO?ª'øóëÿçÝæ|±â@§þ_¾á¨7è¸v0£àQ@  `1Ñ€9bG;Ù¢ôb:_%BÆî\„®[Å]ü:å’?uã%°¤~‡÷[•V~ë&§ëÈ0eðà`ÔqŽö ½4‡:•W–œø(—zcêŸ<ÁÎ"A™@gùIrøØe èqÒÓÁÚ2‡vØá•¯#mÛðöÚá¥îBûL~úqhÛm/>íôúàäJßåz$™¼ä<è½K+íOÍ!yä+‡¿#ûÄÓí³Ê¿÷ÿ€{ÿ ½óæã™JA3shçÿêÿÙ};ú·úsõÿ®ÿl]ÿÇ›y¡/¢3×þ[ûoìO¶çÚÿϯ.1?Öþ?¾gý¡õÿÖÿãc³»þÿô«øCðÿŸ¾ü«Ÿ¿±s©€ß« G€ŽY@(;rt :€PÈ5CÜ"#ݹ´F®O8`~Þ]Å@Rç)ÀåZ_­Éo}­Ãµ²_ýõ'Ÿ}öYvAM¡”³¥N>YK_påÕìTÂ[>Y4nò\ *øõÑ1ü¦®)–²Êµ*@0í8: >‡ö+€É.µ‚gÚ‡wv©‡<¡&nž˜¼÷àZ: Š<‚ÅlC«ï&¬÷ ¾öoxëó¶oïºjïÿSÆIΗŽ}cgçÿÑ_;ÿWÿÓ÷«ÿwý·ïú¿ößÚkÿ×î^ûý?öòúëÿ¯ÿ6ÏüCã?O_þòçoÆòŠÃ qp^\sìý â¼í‹±üb0©³[à*ÉÐL¹À• .¯¿Ô= Ò3ÙïÎó¤ÙÑñî½ÇG¦¹Æó‹/¾øä»‘Gž—¸¿¡s2§í ¯GålеäÞöä)@¥}¼ô‘íŠë¸*+ÈÚ¹ž¢ÚÌÙ÷ò÷WË—'M;Ô£_¥GNõM@SY¤—¿¼<ö8r©rêšò.ù“˜{ SŸð1_à!:å•q8op­{ÿÏBä^ìýŸ÷ìüϼ0O:?Í›ÎCsrçÿõ¥×Ñ!«ÿWÿ[{:WÌ›®QVéŽÎ!1=»ëÿ®ÿkÿ=ÛÌkÿ­ý_;}íÿõÿ¬£ëÿ­ÿ_¿ãÍÿÿÁüÏÿé7Ý•¹p9aΔvøäÅè“Þ­¼CÐè°¾0ýóÏ?ÿäÛo¿Í×ýÄ5FÑ9/xâ¨c÷QÚ¶“4êÍV' JSFP®ÀН ¢û›ÿ÷o>ùôõ§§üÐÜg²cë t©ÀÓÅ@=¯Ó'©ßùµ# ’>‰©«@—Ë{­´ðYåä+È¥nyê%«:cÀOºþôñD²´_•qxôÆ}ô€->Îѹ–ﺱ|õ òË™Ýs#‡ÝXÚ6A™òÇoïÿÞÿÿgGæÎÿó(÷êÿ³Û—ž\ý¿ëÿ®ÿçƒ9kÿ­ý·öÿølï±¥×þö%¬•õMκ¹þ_}®õÿŽ;Žçúÿ£7Ìþ9\eýÿƒkü÷ðŸìÀŠc6§³üê9'Ï@Ƶ©Àå㈆¾ò”£¬#y±øÄwàfX o èËS\œ›àuw§’]TêÁßbéqÁwÙáä¥íÊÅÁÆù²á\+%1eµKðqîP×£|r$ÐÈ`:€Ðs;\žó~¬iO䜯 Š] xýêW¿ z!@Ò¤'žkôúì»i Y\Û]¦=øãh¨ë&«$4£æ–œ>+ôä_írÏа:¹SžÌÚ÷êP6å‡YÚ6u’ù‘®ð•·÷ï¿1j|ìüßùïÆÃ=D/Ný±úõdže¤kJÇFv¸Î81fºöìú¿ë¿ñ±ößÚì ëËÚÿÇ‚Þ\ûý¿õÿbK¬ÿ?FÕåó³ø÷tÄï£ÿÿôã_~õð‘jlZ,å.-@ë1*PihYމ¼¼?J<iw‡˜ã:Ž{Yç½.ï:;8 C¯ÄÈC®„}wdÈ™Œ¾T^€ÍM°ãÉ"HFüÎÞK%hç­Ò#á«<ùÐWÎð¼ÒSpþHÃ˯ó^ÚîšÌ¡üׯt{{Þ‰¥oäëøîþ’nðiߨÎcú7¼†>ý-¾@­LÞi¥GvFȳ mv}áÛÓ£Å/»ÐæñÊü3ÀÕ—?{ÿ÷þïüßù4èêÿ3èÜÕÿ»þïú ŽÁÀf¸lócí¿µÿÖþ_û?z`tÃúëÿ ëÿ¯ÿ_{áÿyúÉ/¾zSÆbÆHÞý4ç @ gÞtô}Nzí€"v`|óÍ7átš“Z„ŽàЂ޵Á¼yTOHý“V€ÏnÉõËþë<ööë#Ë\«ƒ,û{õêõ”ÉûgF6|(Ñð™øYçqÈÔ?üÕiÑM<ôh#Ó¤ d”'-}2±v—MÓÅkõ¡õIÒñ˜“ûKÖÏö¸yGÕdx\Q(o²;Â÷°iÒÆÈ<)},:i]@Ô_~“^ø5­ò&aþ¤ìÐ òöþïýßù¿óõÿêÿ]ÿwý_ûol¢µÿνkÿg, gãIþ O\¿x9/}Ÿ¥ÃS[ðQÏî,³ÛKè5º?@»«ð‘N~iÀÃÈ2}$Ï#’xОù ¡kmÐýzèU§,~dIÞ#£ëÔ=ù•- {½÷ï¿1cüôÈØºæˆó,;ÿwþG§P«ÿWÿ[G¬]»þïú¿öß³½·ö_ŒËØ—lvflÓµÿ£/×þ_ÿϼ0'Öÿ[ÿýÿgLèÿ €UgÕN,22 þì™tyB@'ñ^Êrb^ xõý¼hܯ´Œq&æ€'‚²\ ,ðÝ^RŽã,MYeâ4+0Áueu]r$o”]Z¯\¨ür|: gäºC †¸8ïÕº@:2OEi#>‚z ¡ͤw‘8uɯOý«ì})ººð¬á›ë‹‡¶Û‰¥ßý≮ŠŸ¶7}ãzÚæ±CrI“Ÿç^/Y Îåc§™úÐ â{ÿ÷þ_ã˸Øùð™;ÿg\Ð=ÂêÿÕÿÖ™knìú¿ëÿÚ¤Yûoízñø$kÿ[+ôÅúãŸ]E[ÿoý~Åúÿƒ8?öâoƒÿÀ¢`tfŒ\Ï ¥D±û©òå〢KIØñÒôן¾`à¡´ ¼àh ¸2ç/žÎ#xx É1çå©,wɵ îy®?€2Š§Â¤*Û]\ISúñþ,ùäSNXõš|Êz ]A#ôá?tò“«í’æ:2IŸÝ`xËo^yaèx_ÐMß´}b­ àKý“Vzß_Ê´¿R×\£MÀÏÑëIÌõ¤=Bini{ÿ÷þÇ;ÿwþ¯þ??’З«ÿgÇÕµ^é‹]ÿwýϼXûïaŸ­ý·ö?{íÿkgMúbý¿úa|³õÿÎîu}‘ãòAÙ9fQÑ_Âã¯&uÒ§lt-ßvÊ ±Ïøå“õÿ?ýÿ§ŸþõŸ½xCº©ƒÀ@0°>Þe0qhÄ@–&sÝIi@V”Ç·4kêj,ï>@;Þİ¿-_y‡¿#È@}ùâeês-ϯ‚N^HEï¢XÝ^d.Oíí.ƒçä@CfÁÄiÛ\£6©ã.{y6ÒšŠÒ?á—þ8C¢É¯wã%ßµÏߨµ6m11MHÿ•’Ÿô<&®=®‰°¨fd#ãU‡ë½ÿ{ÿåÿÑ&Ñw;ÿŽ¥_VÿýºúÿÌkÆ®ÿ»þkÿûkí¿µÿ×þ?þ‹urý¿ñÀâ³5sý¿³Ùƒ¯É'®Ï©„ƹ¸®¥5½±|åëW§w‡nýÿkËô'(þ¬3Å Hó™Ç× xÌPÉn©<Ê6ù|Þå¹]×v K.fè Àô«wÄ€ Ra ÏŸRñƒöÊlžKårD¶îH³ìñØÞ5øÝL TøÐ|öùgŸ|ýõ×_Ñ™LuNðpt¢IWÞc}#a¾ö‡×ûîuLùèqM–Êøj¾88Y©Oež^œÅkÊPUpŒs >ùêÖ¥¾˜˜ëKu DIFéV²çzòÕ'èîÊšøJ“z'WØû¿÷çÿÎÿÕÿÇÐZý¿ëÿ®ÿçã=L¶»bí¿µÿÖþ?~FììË–g_wž˜+kÿÏëPÆg±Žò5Ò?ëÿ¿ë3ëÿeÊœ±1§ÆÈc¬œ¬GÞ}nlbýÿ?dÿÿéŸÿÅ—o@åý;Cc¶ƒKšGý€'Rìò¾%PJ~3àt¢ÇÑ|ŒLÎæGyÍĽí©3#7´¥3Xï简:Ãàð™ÓîðL)™ÂÒó¸ã%?ÀÇ–Þ/¾ø" ùñ:4 ÚMî†ÓÈz;üɬ ~iëЫo˜=djŸ’¥ýòà72È¿× À !’®S²lèȨž‚U¡ 2â£\û)ýyU$¯”½î‘,}g· ùñª¬á±÷?ý±÷çÿ52 dìü_ýOŸ®þßõ×ÿµÿè‚Ú`kÿ­ý?ÆxìñÚÔkÿ¯ÿ·þßÁ꣮ÿ¿þ?l¼"˜Ãx[ƒQ#'ü¯ûyý1qñŸ§Ÿüâ«7˜8Rx€•ë¼hÑ5ŒíŸÊirà§ýBwŒ9'¿òŽÊG 44ÒÍ0–úÊÚ6£6L†ÓÈA–'ñ’}ïÿÞÿÿ;ÿo:lõÿêkÉ®ÿg½¶Æîú¿ößÚkÿG'®ý¿þßúÿ–_ºþÿÁ êoóÝ×ÿ?›uþ-🧟ýö×o˜\»®ÚÙÒœ ŒXÛ ;‘'♼urÐ{¬ÐgBç–}ñúõëSnhðùœ_À–aŸº§¬¸u€q1å Ð<òæDþd†dÊUi~ah _)f-”²Ã㫯¾ ˆ¥n V%ò¶íbõ™œ}ïCó6µ¾‰iò*ù}Í0€Ó0ib`TxNÎI^*߉¯¬~ZO[äú“~ Õ³q§ÐòWvúä^}yvוk2ÜéÑíýßû¿óÿ¼÷Ïqìü_ýÿXof<¬þßõ¿ëgÖâ»þ¯ý·ößgvëØ“g~¬ý¿öÿñýøõIâ—¸ýÉ£©ÿ#Ýuã¬ÿ—þÑ™SÓ)ëÿg3Èúÿ¹ûól!ólÎå}Wýÿ§ÿí/Þè¹Z4¬ïºÒX×Þ)åÜΪvDÀLƒI$ÿ~´Ó,èÉ¿T×äûJ _v„¥|¾â¤f‡¼$P~¿¢FA=nÌ7³Ûêõ«×‰ýêÕÙ%†_TÅ7õ;·;+Î&®|ø•ÎcŠêÈõŠ•ûøáì>K/øâF¶ö—~t¯²cmhô1žhì {Ô?ihJúlè”Q—Xºº(úžçúª ]weIo»ðu^s.8ßû?që§½ÿ;ÿwþ¯þ§+WÿŸõ1kѬ»þïúÃaþÔöÉ<1WæØkÿú¢öÜÚkÿ³3ÙÜkÿ¯ÿgM]ÿoýÿ,š£ü8ºþÿÁPjKÌâùÅÓ¯ÿþ?¼RB€R^Ø~&ÏV—áQc$ÍÊõôlÀe”ðF(ÒŹiÊ4 €Òw85]Œ_¶è‡“°"ÞÒ ­\tÝt_biCùØ-å1B4Úãæ÷%èøvÇ•üÖQYÐûñì¦"жÕ ¨áe§þÀ'íBƒ´”Ÿs»¾€YdMŸN•UÅ (Èðé9¹„”k `¦6åÕ‰wôÎÓÏÎ%\Aº n¿9x6ü÷þ°÷`ïÿÎÿΙÿÇÐæýE›Ð#ÎWÿ¯þ76ãüÉ4çMëÚšñ3é»þïúÏBé¸Ó'kÿ[pí¿µÿéεÿ×ÿãóÆg[ÿoýÿõÿ6¦9ñô“¿ûÕ[Š’Q@Åõ—_~°QÄÓy€y>cˆÊwsb¶Î‹ ‚… €)ǶM gˆÑË~4×ûx¼“É2>´sÞú*WÙ¢S_Ê 9 !½udA˜¶*«Þa¼)/¼•ײè‡{}ê’Ž@nçc’ç]!-ŸøÐ.ÂDÒi¿Ÿf¼¦®¾'ÌuŒÿ¡Ì èqüòLÿxuxƒSe ¹¾.Ò„Fvêºúuïÿ€’s_Ú×{ÿwþïü?s¢º1úgõÿêëº5ìZ›œ »þŸÝÐ5{×ÿµÿ®¹1ÆV戹²ö{>Ý‘?µÍ×þ_ûŸÍEö}Ìñ_ÌËOá³t½©]òIòæH™õÿÒ-é‹9‹O¨oaý¿õÿ;>¾«þÿÓ/þóÿý–ðDÊÁ!]#ïJõÁßr¡›O”N@˜áa—;¡ò^¬kòd"©d®“ü~0‡q<»›Ô`誫Sïž®Ld$ ß›Gü€CÝ Å¨Ö†‚jïÞ½‹¡ÝöˆkˆGyŽhÒȤ~‡à1DH|üöì¨j¾<í(øäZ^y„çÕ†¶™’uîq´SçsâU9¹ø‘ï“/g'pK»í1úð¾Î'J¸§9/ïæ“¯4{ÿ÷þ?æñŒaçÿÎ:fõÿÑ «ÿ}°ëÿ|™x®ÿ³›}í¿O‚Y;×þcç®ý¿öÿúY(ØÓ—oßm®×ÿ[ÿß:Áÿ¦'êË×G_ÿÿã?O?ùÍ/ßF<¨ó „8éÂËPt¢ SMò*M‡£Ññò88ú¨ÛÐ$\‘óÞ(´‚Gý^¾x™ILrÅ×ó'yɿҒn}œ2òõ—·vU6²úÕÃQȬ¬wUEvm›´båƒP%Ýy¿²¨¼#Î=ld(o²ô± er 1úSf@­Kî¶Åî140§êU?Eç÷®…©mlƒgÀJZë ?4·~kžXÛȰ÷ïÿÎÿÿt½B'Ð ô†cõÿÑ©«ÿwýßõí?zrí¿cW®ý¿ö?ÿ§>V|¨õÿþÛúëÿâ¯ÿÿÀ#Š­üà?ß^¯½¤|Êí%ç:^Zo@+t-äzN«¼º ôòúË×áSø4à/ˆ•E”á85ýå|)ðÍ›7Ù¥5óÿM•Á¤@“gÇ–ü*R< ¶õÅîd )¯œºµÝ5Ú; ä\š¼Ö×6+wOãø ê.}ÛGûOÊ,Ïh_}Ñ~kòg÷Y e2Oû¾?íÓ?ê> Ö “7`\ƒ|Çç¡éø;W®uîýßûo¼ìü„wþ¯þ_ý¿ë×súÑz)X?¥ Òvý_ûÏXXûoìóë$kÿ?fíÿãk˜ކú(âõÿŽý¬?Öÿ3.Öÿ?¯tbc¬ÿÿÏã?O¿ø/ÿþíXeyÇ… |1™ì|ª—øz/U ¹æ)+Í Sîtøó¯÷”–4柅-ts-àAyÑzœüÔ1$dA#Í!H+@¤ìÃÙ´³ ¯É¿Ë£ü‡ó•ÂÉ}½˜4ʘÐôÚn¦8/“§N€‘Ø{²€r}„ Oññ¯*$òõW*Ú¦ÚåZÛêKÎÕ`J]S”¼y4Ò;¾æŸ6)_9œß²# OåÒµ'ùÓLÞñ¢ríýŸþßûŸ1hæØù¿óÿÒ“ôMÇÝAÐ;«ÿÏÚ³ú×ÿ]ÿ}AWÐ,¾µÿÖþË:1ãA°†¬ý¿öÿúg½4ÌõÿF?̾hûD¿õ›¯ÿ¿þÿÓÿõÿþø­¯zw”Áq‹#ïXÊŽ¡™TŒ10G0ˆ„,C7çÅ ³ mŸ2Ì—î~Ê@œ2Ý…VT1L[¶y€²9¤EÎË™R½Ø`—Ÿó¡­ÙÔGRŸOˆSùyD/†ÖÕžÊ'_ºk—Ó§Ž©KÈã|Oçñ>×£UsŽ.²]»¿RÿÈy–ÓW½ sÂÕ´BÛÕëIˆæ‘Kü“®ÌUýƒ6FŽë½]赟L‚]lÚ³÷ïÿÎÿó²rsÇÚù?_’µcôÒ©tÇêÿÕÿÖ®»þïúÏV¤/éñÚkÿ t„µcíÿñMÖþ_ÿïz½LžÀ±ˆNXÿïyg^ÖkÉôKu="¬ÿÎt†µvüùõÿ¯MG?›—¸01@fÁñþ'ƒ©@#U~A‘\“–íÂ3àÐMÊ݃ë Ì‹§ó8A4¹vü˜êcLÙµ4eÔ‰¿Ï—Ï—óX!yð‘Gn¿x7(Kíp“?y)ûásLôhŸü~渠 ÐÄ¡ ÿa%ñ62äübZ¸ý•ú¦¬mÞ_•~Z²‡öÚv]™R?æ@ÓCÝ-K.ùÊ“MËÝïUyàFye¾XH™Ißûÿ úµO|Érï¿~;ÿwþ¯þ_ýVÊ]ÿϣƻþµö_lŵÿÖþA=bÓ_¶¹4ö¤µcíÿãÓ¬ÿ7þõŒ þØú牟õÿiŠâŽÎ×÷¯ÿ~$ûÿÉKÜŽú€2:* Ç€DÎį́RÖÅ:6×3 ÅŽù“Þ×ѽydm€è©ÇàZ.u]“W! ÊdfQš9oŒ«Éî°; Ýûyä/ïmšó*‚Ðd§•sïÃÊù””õk‡Ãæ28ø’ÿõï~÷Ü–¡ÀƒœhÒ¾IKnÍE®õ4P-t÷rÚ-¯¤·­â;Ø„¦}—¾’0¼š†ûE•§uµÞ#‹€Vhù8žvØyue¦üÒŽ½ÿé–½ÿç ;ÿwþ¯þ?k[õíêÿ]ÿwý÷KùÚkÿ­ý¿öÿ¬ã§|‘úëÿ>ÑÂúg½ˆ¯9ã„=%ÄO>â£×¿mŒBï9Öÿ_ÿ”Ë…ÿ<ýô·¿~ /@TqhEüêêº;¡ (ÊJº'¯@Š ›Á9£½GÔ䕯sTñKÙ)# Q^\~Œ„Ès•^õ½UÐ8Ê3~òSÖΨ ê¶û*r_ü“æ*óûÙÖéÓ×xzaüW¿ûê‹7_¾9e/yL"ÊG°s©<É×Ð ÷h{3®˜ Þƒå—uQîÚ”Ýa7Z<Ãwä==bâžm–x ­Wìž½ûæ]¶âçZÛf1QÀ±<\ë{õã³÷ïÿÎÿÿô=};ºcõÿÙ¸ú×kæ®ÿ—ƒ:}ÁnXûϨ8NÛjí¿óƒëÚÿg\ôïÚÿëÿ­ÿwìJëÆúÿëÿÿÏž~õ÷ÿÏ[/Ñ3°â°Œã’÷=q`F: < º õO¹'{’7ùø \[Ü[‡ó‚,sçÆàeÊè¹ê‘þÕW_Í ^EŽw_ýiýC¯¾©,ïwÂOùÖ-´Azw"á‹Ö!ôÁ ò ¤»‡¶ †VûRÏìSG-e´Ù!´Ý}'9ïý¢ëÏéw]úO¯ôÙË‘5·fþ Ÿ¶Me@§¼÷‹]íˆ<’§Y¯^¿šG ÷þïýßù¿ót]8HE¬þ_ý?‹HÖœ]ÿ­¤çUÖÕ]ÿ×þ[ûoíÿµÿ¯÷‡Žnôcþp¬ÿ·þ_}åú§ÆEýàú©ìîø´W¼þíîõÿÿ%üçé¯þæo ¤:xÄq™Aæš2:_®;@ :¢p9²<©(™rkÄ=/ø’2ØÒ41º*=¢´^«Ïg$9SgùÑ~”øýœ¿~ý:éåÛú¦06vDM/ß>ò¦´E[“íÿñÛ)%,/uT9;ïD·?”W~â”GPЯÒÈpúð%ü(u “×/?JÇ·}ƒœÉ«¯Ê—|älyõÀ*ô:õj¯óð˜¼Ê&^)¿÷ï¿ñ¶óç?ݳúõÿ®ÿ»þ¯ýwlÉØ\c/Ýí>ikÿ­ý¿öÿútÁúëÿǧ^ÿ?ƒ¾1~¥`Žôàk Å8¬£Ž¦õú_ž~>/qGŒ10$¿( Ôa26È+/ìy<ÏK®¥ÅáB`:I'üùõþ€1x•^™ÖÓ/öÉÈÈ·ñPçês®Ù€<êSoëC—”OZq1:éø¦ã¦°ò “Üñ¨ãËW/¿xýêuÎÑ*—cø êR¾m,x¤Û-bš¦íþÙe¥¬ ¿*Gd¼ôÚ«•=Ã3ð§\8\rÜÛ‰¯÷]Iãl¦×Ä‘§-­£}„à£thÒ¶IÃÃùÞÿ½ÿ—;ÿwþÓ#ÝP±úõÿ®ÿÇÆÙõí¿èÆÑ‘kÿ­ý¿öÿúì¤õÿÖÿ_ÿÿ þóô³ypÅvx‹1ÐC ÌP(féŽ8¸&) kèæO¾Âײʡ«2ÇûH]^ %ßîž³œ_ü'Mʉ*Ë$e;ªø!Û”+]룲¢Í­¡óΩ%0ÌŽ®©ø?Ú{ÉKFé?ýÓ?}ñúË/m¶6 Õð$™õYœ{±¼6Èû ]m“WY+ZŸNE—þëð¾¾tæó˜ê”h¹¶ó̹ Í-_@ _u©}ÒÏYÛ¥,~©ëºoŸÔ3<÷þŸñ¸÷çÿÎÿÕÿ«ÿwý·^:vý_ûoí¿µÿù&±¡Ç¦^ûý¿õÿÖÿ_ÿÿ/þ3þü­Åðȹ7‡Â.Ø!¯‘t Mßᄦ|Ð9u‡•P@¤Lú‹6»ž.àG:PÇ L‚rdÉùÄ”¾ мÈ41Ú*qAÊ'?€™6O¾XÀ òúÁ£•ܽÝÚ¨ð”‘ûÃÇóÅÆSßóã{#Pê‰|§©«2Ê×J@Ù²Kjø;ÿr€´¼¿j(ÂwÒ|9P†Ÿ4ò¡¾ ˆ¦ÌÅS_£жnôí—½ÿ§ÿ÷þg˜dœcÆGÃ}Ì Úù¿ó?Cé‘à|õÿèÛ™#3‘VÿÏxØõl¦]ÿ³fÐkÿ@釵ÿÖþ¯­¾öÿú|µõÿÖÿ_ÿÿ¿ÿÀâp˜0€kÀË 1‰â\÷xç×ËË=¯èß#èñµ»§€O“‚/Œ[.?¼?ï´Bo7’ÇÜÐ:;x`¡à/Ž ..ÚszÊ)+(‹GÏsr¥§Ýó"ó–èú^¨oÞó([9È+(´Ò pmô˜žjc°OýY}ª I;}èÜ{¯„¾£JšvZÌ„ì^C7õõNš~U·ôö¹¾ÁCº8íž8|¯8<¾ýTvi{ÿã½÷Æ­1yÍ» Ä;BÇ™x•„¯×øÚùý·óÿè7ã…^Yý­©«ÿ³Ñ»þ[`×ÿµÿèɵÿÖþŒÉF_ûý¿õÿ>kýõÿ×ÿÏZyÞþúÿûo/æ«v}7"i &Fç¨Ö$ʼn44€åjŠ&¯ç¾t§ À‡C\±k)_ÐŒ·Œ—êxñt%”öq€–xÓÃTídñ¨à:r]ƒkõŠ#ó8Õx ¡X¾C>Y>~8»¾ì¬’f'“ÐG•\I—_9»ã my’7çS& ÒH©ÍÊ•®å=æ×jòíCûÜšó¤úTïÞ½KÝåÕö¨§0â'}úrbò <»Ò(Ð ÿ½ÿyOš¾Ûûÿퟂúêý7ó"ú¥€mÒ”›ü{ʬ(Š´á’Eu£-ßÖ•¾¼Üû¿÷çÿÎÿQ«ÿG'®þ?ë«å¡ë†¸ç»þïúÏŽèû8Ù~L[ûoí?:ƒ½;síÝœî\ûý?þïúëÿÓ‘ëÿŸ NwÛòé'¿ùå[Æ„à‘¼€¹: cCxÅÊqy:>}Ôèa´^y„pÒÈÅH'Oh¼}ê?òMÞ@!¼túse©øj·~ÂSý ¾Ð^¼•‰<# yä¦÷ô´q.T9ù:åÑFΡA·÷ú}ïÿÎÿ™æÞÎäèeúB 3ôU=å²ç¥KëOóVÿŸVÿïúßù±ëÿÚtéÚÇ9[ûíÿõÿÖÿ[ÿÿlÚYÿÿ_Æž~üw¿zË ŠƒRËj⻡m­2nÌ¡âËäÝ7Ï»™âÜ\¼q^”}H}ýõ×®(À,  :¼<X0E¾pÕ–s|È d#_eA#ý‘9¡á{K?ׄ»Di_AçÊ ê Ëï~÷»Ä@7_,°”:†FÝÚ/îc|òÎ;.)ç^á9ti‡v_çÁFå{h£Ã5ÙÄêÅ7×#×Ë‘Uº4rÿî«ße·˜4òÈoHÃïoß(†æ!S 'Þû¿÷¿ÃÁXÚù¿óÿ|Íõè Šsõÿù:­5¢úV¼úÿŒk’þx»þG¥vÍï{2]ïú¿öú˜+ôÈÚºäôMlصÿ×þŸ¹±þßú”A/<ôÃ¥7Ù÷ôÐ^þîúÿþÿÓ/ÿË¿[°È o(€áFw`4ï±ÈŽA:«lZâ¥å]x,½³{HPG¸QÀ пùòM”2:ùÒ-gÁ’úY˜]E5åTÆÐ_2IWgÛ'Mºiox Lêµ»Ênœóø¯Ðè/ÿò/¿ø‡ø‡/~ô£EÎNuà¥/Ÿç¼LBv³_ºÃc&6Bõqåq”påë»ÄÚ–#mgê //¯Ÿ6Ú%f—™XžCÐ ÛT9¼Ïn¬´×Åõj—4»²È'´¼óÊ´÷ïÇ£q!ìü?»ÍaçÿÙ]Dá¬þ_ýoípìú¿ëÿÚkÿ­ý¿ö?;‰Ÿ±þßñ=õÇú³dü[¶Âúÿ3?®w‰×ßZÿÿ_Æž~:;°(ƒ€¡ó„"”}ü1j‡Tœµyù¸XSg6 ²±ß˜5L3@ðƒÌËØÏWñÐÛyUK]u[·A÷#LåO¾‚9êr(—²WÜòh嫜sùm£sm"GÁ+<…ÖÕ6¡þâ/þ"; ì‚Ò&±Ï\Š`þ|ç2çøà . häÀÒi¾7 RånýÀ<ùßËD¢Ô+ xÕÇ Ý3åÞ`¨LîÙ%>xËäU–ÖÕ¾‘¿÷ÿ8'údïÿÎs}çÿêÿÕÿ»þïú¿ößÚg‡%2ö÷Úÿkÿ¯5Î Gjý¿ñ¿þÕÍçZÿïö”“±2!úcâõÿφþúúÿg}Ñ ÿyúÙoý¸ƒà1€f¢FЊóNBÀ‡gÕM@eZV,XI× Ü €tßypó Ê9Zwvüà5»™ ,©'[ì‡á^¿²•Źú] ‘ÿZ\?©‡ü“oêà©^eR×¥t”o<++õçèû./4€CÚïZ~ùö±}êK€øè}‚¦uê7í÷ØNöMá•Ã[ºØã‚ë‘§¿²ìjCÛ¡ŽÊ~¥ã#÷þŸqÖ~Ûû@Xý°óçÿ]ÿV§«ÿÏ@«ÿwýßõí¿µÿÖþ_ûý?6Rl¦ñùëÿÅÕ|ø¢õ=×ÿ?˜Ãúÿÿ}øÏÓÿöoM,“Jpî±2 ApgÒç&b'ãËWóÎK:øÄá¹ÒÏ£lQ `r=§¶%ÃS ØÁ¿À‰òBeã(ãZ@ûúË×¹v^ À'áRmÛIlÖs{§ðÈ{v'iúòtÎ1»·Qž>.`ôêå«Ç;½²Û ß é—«ß\ãé>½™8çC#](à§-ísõi¯ÅÊ™”ÐjxÈùæÍ›€[ÝÆ7òÜã^·^y{ÿ÷þïüÞá¹óÿYçV÷ЫÿWÿ[ü¬A‚ظÈÎÞ]ÿŸ×rý²ëÿ±{Öþ;ý°ößÚÿ£Öþ_ÿϺé`[Õ[ÿ/&ű'FW®ÿðöUmðõÿ_ñôW€•Gé뤙I™L&V’h:ÉÚ/ž­teZRƒVšÀ€ûöÛyŸSCyÙE4±¯çááN&/ž Ôdj:ÚÃo¤L Œ ¨ z”•qiÚðsïò/Gñìx’Α•î¼}Ð_W*³ºÉѶ=ꡜoó˜`ä›kÿ„üKÇ?@Ôä«§i­ï”¹cS¾A£|e”Þ—Ï¿z}À5õÕ!/Otä•..¿òÙû¿÷@{÷ÆÎÎÿ³ûR_ìü_ý_}½ú×ÿ]ÿ=¥„µÿÖþ[ûíÿõÿÖÿãWÞm$O­ÿ¿þ?Üá_‹ÿ<ý»¿ùù[ Œž·,¸Áè80‰ÍI´ÌºP (éI9@‘ü‚Í+-1#?É”Cï“™„¶K`èØ½4„³£él?NÃ.ð<ñ—îh½Ò›fØH½‚8iÒçPÏ•ñhïIx.ƒÿç ’¾’®ß^8dç“vàôqÀ*/A"ÇT)íñÒ62M¥u‚÷‘ìí't{ÿ§ç\#áêݽÿíÌ“ Æ»`ì IÏÙé«ÎCqóJ»ó:pçôÝ#'«ÿ_ý¿ë¿ù0ã :Öb´ëÿÚkÿ±¿Ù¶kÿŸ'Qº~®ý¿þßúÏOMÕ¯5?øtü¾uýbqÒ¤Ï&aâú;'Ṍ5yýÿÿ3ý¿ìÀrÃÜX7 ˜Á©°PÔ ­QÕ›ïºçŸÇOó‚÷:(ñáÈâ)Üùžôy\gþ©_`ÈÙññþ›÷‘zZ+t“^Þ¹¹€6á?ôu Ì–OÁùƒ_ͪc‰¦Á¹z˯2K¯œ¥õ.+ˆTz}ÔǰÊ×N+4í?‹OÚ:qÛÚÈqdI]s­?*§º*O'§rú¥-h䙯ç±ÀÈ>ïûd’c6!y{ÿOg\ý±÷ÿšg3fcĸëØrÞ´Æ;ÿþÙù~Q2nªÛVÿ¯þïx›#»þŸô:GèQëõüÑEÇÖ˜ë]ÿ×þ[ûïØkÿ¯ýO7ú{õf®g=©ÿE‡®ÿwÞ¯¬/<emñnéõÿÎüYÿ߬9!cã;èÿ ùü¨…pv½N\àH+{ ªüj>Õh%"[úâÒ$\i=Ç›‚QÆKÊÄì´oÞ}ÐÌcnoæ«~á6~øÃfÂ…hуºŽñkR> (Ö6€¤"¨/ÚN@Tß)EØÑ$蟖Õ^ý0ïrøÑȷ댼U(ICƒàÐåÝV“vzúd*×vFöI78o½äµðûUWzenß)³÷¿câÜ¿ÞCñÞÿ3ªŒåÿ;ÿƒèœK׫ÿWÿïú¿ël޳\î:_ûïüà£;Öþ[ûíÿñUæÿúçI¢õÿÖÿ7ž=ø³p®ÿ?¨\ã:ôÜ"øÏOç+„ ¿Ž{t`“r8×{ÿwþgŽÎ˜vþ¯þ_ý¿ë?]ÐuÖÚºëÿ±Õ¬kÿ­ýW;Ê<Öþ_ûý¿õÿÖÿ_ÿ†ÇÈ_û_ƒÿäXŒ/Œìf~?Û ¥Gÿpâë¼[Œ²ëi(eêè3c †t· Î>]ȦÄüÏN¬!È Gxô5[N3ù&õy·KÈ#|sͽ,€“ΘrdqA/¸ÖWb¡têH6/˜÷öüútúÐÕXsdÄøé+çí¼{GûmˆCû¥]g7yœãÁA®Lù ÃЇnâ‚hd¤kk¯Ûב'÷sîÃUš–ø»&ÓÞÿ½ÿÆÒÎÿçgêwþwõÿêë„õd×ÿ1º&XsÙâ]ÿ×þ3Öþ;6¼¾ /̆ڤçz¬âù¿öÿ·_¬ý¿þŸù"˜#Î×ÿ;~íÑQñ_«CÖÿ?8+3ŽþÿÓO~óË·: ÍŒøº˜î©Áj2é ‡4'`¥Øy|OðŒmY®?mðLgÏ×óu?à“ÊÎzöIYàJê»xôfÝùÊœ0å “éF’9å']Ûи.ϔі iû”I<×uÖ¥iß¼ Ý£ÙéEΡm9çÊbÌÎ?×ä’—¶Þ€1;°¸B§Ð¶>2}ÎÛ£•µ<µá¤ç˜ÄÞ+×Ê >€—{ãÂÔ1×vÓ¡ÒveæØûܽÿÇaí˜2n2^&îÜù¿ó߸ðOXý¿ú?kѵ®dPÌŸ]ÿ=µëÿÚkÿý°öl¨µÿ×ÿ[ÿo „õÿ㯯ÿ° vc±çBñŒsuþ>ýx,öȼ@ŒvdÓã¸Öañ³â|hý›s p©¹øRÒÎMTeðìuø_¼ˆTðI~@•‹oêGp…^7î»7¸QdÁרîÎÂOÞúíÞÍ¿´ÍùÐíýßûoL•ÆÃÎÿÿÑM—¢?ªSWÿ¯þ§#ºÕp§<²¾ŒÙõß }ë±ôM×cº6ù»þŸ~¸úcí¿tGÆÉÚkÿ¯ý¿þ_}Gš¡k®óõÿþ°þÿwßÿúÉoõÖ Žɸœ£Æ¤¸Fhâ¦ÎÙ…y޹ô¥•åQ¾^{Þ]ˆ†÷œ›X5^k˜qrCÕ“ï`¬É'~ÎÎåÛs×=+€jº4GùÝu¥þyT°NYœ ÷>(/<„>:  ïᥠٱ5õ+‹÷=´=zC^e­lâ†tõuº9ëc¡rHûô˜>+“‰ïy(×d&«àzþ<îgÓîm'oÂÞÿG¿ïýwÆÊÎÿÿ«ÿWÿg}±öíú¿ëÿ ±SØ(s¾öß±gõÆÚÇŽŽý½öæIlñciW‹m>áØìÇÞZûÿô ½rﯞ§¯fýYÿï $ýÑcý¿ƒ#¬ÿÿÝ÷ÿŸ~úw¿z{Œ 2ø”º+„ClÑò4%é,DxÅ‘½4á?4åU`È¢uÏS.»Mì—ØÇ ãU|…òßæ‹$<‘ï’cˆõ£QVý¬ÈQÐɹôLt2Íèén.J1@ÕM€—~Qo¼u(/$eò*ò®²ú3mŸ˜ uË·eRÇÅÇ{ºsmW÷wi ¶¹nþÁ¦öþwìîýž_ÆÈc¬œ3 'mçÿé§ÿ«ÿWÿ[wý§+wý?ú }1c⾆X[…µÿžmRóƱöß±·×þ_ûý¿õÿ²PÜþÔßÉúÿÓ7.þÿ“¯Z8Ýõ]$÷AÑó‚%¹€(+ØÜUéñ.?‹’òu¼/% À p3G¯•W¶€ÂpÏyy‰ååÅãÃTÙ€ä™Ð|ÿÅ0¸í¦R®|ZFùÊÚü8¥Ãë|5å<µ{úÍU>è4uDøGÎÉWJ½ŽôÅÄòð)?q¸O^A²{ÊÐ_ùê»ó•W~ʕӚo‹±@–ä ã½ÿg¬îý?ã;ä³?kIž±3ƒ'vçÿó»åvþ?º¥ºvõÿê#c×ÿ]ÿ­±kÿ­ýg8ØÕ±­¯kö…µC^lÖ¹vÞµDìzíÿµÿ9@ÆN}9c§ãcý¿kþ°Ó'd.ÍùúÇFí˜1~j«VÏ<|ûÙEn4Ò=æë¡»ƒ÷^‡óÞ'5`PÛUÙÔè[<íØ’/¯m|ô•]óï.Sy|«S~ >w8ùçß÷¤OrÉW^9Çç¼î}X@Ͳ§Ÿ…½ÿ{ÿ`_cʘ¸¡ûyòæÏc×s½óÿèµÎÝÿ£f\Ð=t^õ^õäêj{´ðêÿÇšÕ1²ëÿÑ®»þ ðT·6¶­ý·öŸq DŸŽNØ,ôÉÚÿŸÎ¡µÿ×ÿ‹/ºþ_ôÅúÿßmÿž{㌎ҟÿØÐ"½¡¬¸‡< F”)#B¾÷‡³€0,òŽ¥¡f[ú8\——/^ô!ùÃ84]xð#Ï=®‘SÝóïÛy±zéÈsÚ0;Ÿ&½õHg—7Y쎒n‘ë—ÔYÒ¼äÎÑÏÛ¶Í­§r ÕZ]6HSoø f÷V¶Âz¾òÔ}Ê\õ_¨nyâs¯çôæÅýª¼î¡å¥§®X•VÝBó#ÏôûÞÿ—{ÿŒÚù¿óÿŸÑ-Õƒw]³úõÿ,(YWvý?ëò®ÿXZûoí?6æÚÿó#ûÚÿëÿÍ\XÿïøÇ †õÿG7®ÿÿ?„ÿ<ýøoñˆÓØ)€"íî´8G{w`Р”Ô`9×°B¸²ÕÎ9`È¢P 2ð ~Œ>±<‡»ÈîiÊ‘ãå_ÒµÁã„å¥þ(ðtÕ5…R½?ÇH‘Ý\§îâ%”úöµô×.°W/_åQIiÀ2µöþŸñµ÷çæÜ5ïœ bºC|Ÿë;ÿWÿ¯þßõÿ®vý_ûoí¿µÿ×þ_ÿoý¿±™×ÿ_ÿÿßÿÉKÜ9eÇà.`¦ÀÆ·;^Ìáq‘î \1Ô¤qì@Ó\ã'OüáýyDèºÈb‘Wv2x5O¬¼C*¨¯¥ñ©Áx?G VB'Ÿ¬•£u·\ø8‡Xíä‘ÐkÒ];\K/0¦ žaèÅÓ‹´:D©·´ÓŽoÞ½ËN.@Ö«W/#he#}3õT¾Æ•;4·?Ùí¦¦Ì'meÛn±vSŒŸmSò½ÿ{ÿ3¼Œ§[Øù¿óõÿêÿ]ÿÏcTã®ÿcß­ý—Urí¿µÿ×þ_ÿµþßm3Éø|ÍõÿޱþÿÀ0Ž+À"þgà?O?ù»_½ ¨qP×SÙý½U¯f`rhÐ̺ åÜ{t$À•ÆR”+À‚Vzƒ<˜åF+G£•u”6æO¯Åoœ{zÓЖ®|,>väç|ãó~®¦£ðe¼Ô€Fvµ.7C(ÿ{»¤»¦äÄø6¿mi¹ÊõyÞ7þ®åü"§>  ÀVÞòÈ Ÿ¬‡ŒòÉSn <ÊTž½ÿg¼êC}µ÷çÿÎÿÕÿ«ÿwýßõÿ¼ÂÚ(°k„µÿ>µkõ Ûaí¿c‹×îl¿ˆ…Úœkÿ;\?õHÿÜúȵ°öÿs?´?î>ÍúÇ7\ÿïà sÍ­õÿ¿Ûþ!Ì‹›gö[8(LÆy•€¸J4Êr€Ž¼”0ü˜r&GA™Ðãs3-¯l>›|+óüå·N Èï8ü[Oi‹zã# tCjÒîy=G‹'ö¥:'ƒ˜üÞ}åX•ïó:Ðy„HÀKYÇà/|®¶õ?ùïg7^‚ø~œÄüMú½ïïüG¨ÈÕú<>éþ5Æ¡õ·¯Z•³õ§m#i”w½÷ï¿qeŒˆïcPÚÎÿ£cvþ¯þ_ý¿ë¿µ¶ëj×c?ütý¥3wý_ûÏ81>ÖþûÃyòB‡Lˆ zÙ±K×þO¿è‹»íeìT¿LFòz]»¿1Õ?kÿ?ÿ­Oúfý¿kî͸Zÿoýÿï¢ÿÿôïþæço³h̤¦;zª,)¿€“î<“ÿÚm#mÊü ´æ‡~XáᜲPNQ|­HHEϹüÖ™ó¹ç¾)‡/i‚¸õ‰ Q9'34ZóâʪÌ[AdY>~˜ÅÀ* ÙÔS´í’_Y•­¬.4øªCy²@vñGÇÉÉ×=š8d–·2•§²žÖkqël™ˆäÑæ¾‡lº+¡<Ó?“"n?"ï¿)?)·÷ïÇš1sGÆJ¾ªi<ÍØî»ì:Oä‡~çúaçÿêÿÕÿ»þïú¿öŸÝÛkÿ­ý¿öÿúõ‰ëËÕÆv}O뵸6yó×ÿ;xDüÛõÿÿ,ýÿ§ÿæ—o¡=ïÄq-4?m&°Ã¹IÔ‰u(9¶ãôÎ?“4èÖ8³á—‹‹ Ê ò{Ì-ï¼Âw|ïf²èºèî`TÊDž° HÃa±¡íi;¤+ ôцo¿wW ½Ç#•ó®*¿f„f®ý»´|é©Kfä8tê©óß¶¡MßLÙC~ú¯ô¥ò>—1‰·?òKNS^ÉöRr /þí—Ö'¿|7í^GÓÄʶ‘Ù}ºùÂÞÿÓ¯{ÿwþw^Gìü? ÂßK×UOÑ7ÎWÿ?ëdÝÔþqÞp×Í«ÿÙÖúÓ;tn×9ëxCû,´Wbæä®ÿé{¿ü±¾jþ®ÿgð臵ÿÖþ_ûíÿõÿÎèZ»þßúôâÿ üçé§ó,ï€ãD `ÐI˜E(ÂÐ Ê9‰S51] -®¥†Ð>®¯¼GšòW=5˜°©¡äò‘!õÏCÓK™¦ ‚sÏ@§msMA¡õ~;@8ôW{?¡@Í¿ï{‘üðkyøÚiõñ¿ä+—>™<†4ðMîWXýÈðÁGÀã¤Kû$ý²ÉÏ6a4Ú1וI™žë[Å*KÒÓŽó ˜—°N%>IÙiëÞÿ3Þ÷þÏà™ñ±óç?²úõ¿(ëímýÌú"Ãzt­'YÃvýßõƉñ‘ñp ã'i3dÖþ[ûê¨ÍÚs±°öÿé‡ò×étÖÚÿ틉×ÿ[ÿݱþÿÁ ªKÿ\üÿ§Ÿýö×o €ÐÓ”Ĥsä)‰®93è¥Õ8‘Æ0 &ùv39\£ Ÿ«<€Åã„vYµlùžeÑ͵<õµ®Ö}/ÛºÄôK~åsLžº•ï#€m“r‚²1Dsݺ*‡üTxº–'(Y§¤÷k)ë1E[¡ëVò_дe¦âðnÿ Í}W˜þ ?²LŸ 1 /:\¼wL îòáÙû*ݵ£»"f7ºÜ·¡ÝûÆ¡~Ûû¿ó@9:ãaçÿêjsõÿ®ÿYOwý¶áÆ–Xûoí¿Ø‘kÿ?~ض^kÿÛÞ4FÖÿ3(Öÿ37ø±ÆDÖÔñm×ÿ?>ûúÿ3|…ÐDñþ'»o ’ ˜Gjp$¾‹Gët\Q ˜C/ý®Œ];õ èÆÙSÎ'ˆå ê }Iô¹:ñÄC`kâ;=°å.Kø\ÀU¿š8…Ó>yu2:Äx›(d¢@{‡Öé‘)tÕ>ºêk»ÈL/‡>µÛJ¿¶àU[¼êjùNN2”¿˜ ÒÊ7×À“9š†®òë;³ƒ/¤w¡mhÔådïÿ£ÿöþïüßù?:øÒñô›óÕÿœ¡KéÑêïÕÿ»þïú¿ösjí¿çc­¥ŽêI6ôÚÿç‡xëiû¥¶ùÚÿëÿ =Œ‘õÿ¸Þëÿ[W2Æî\ÿÿà?O?ÿOýÖ¢[PÃ@±ËÇBãü>Ð$oèå™dòvúk®•×Éè¤É—&pŽ”mÇe~¤b¢C‰Ö“ë‹Gø OàPw%Iû ­ÛuÁ±Å–¼é‡‘ßùËç³ñäVNZÊ;çBÞ5±:ð ëÇ褗Æbõx´2ï÷:;£Âàö'rjûÕdqè yŽôùÈÓðVuˆyÍW.õOzoîq½ÏÊä1F ö]Q F eð,@õúõëO@¬QÚqɃÎc6x "ËEçgòÑ1tkä†ð¢ my È÷9xu”8¹ðFŸö臫×ÚоIþ¤}˜öyiýçy­_Ú‰õßÞÿ½ÿSƆ°óÿÄÞù_½ßxõÿêÿ³âfýíÚd=šóè’9G±ëÿ®ÿkÿ9³°Î¶Î-¯Œ¯§ìÆúá 庀žyÄnêL‰äágËè0J@#xöy@«Œ¶Úõù¦¿íЦzÛ´I@çlz+q C÷±4Î?òºÎý2wÓ?¿½ÿéÖ½ÿ3‹ŒÃ/ÂÎÿÿ«ÿßåˆÕÿÏ?¢ÈºEKM±ëÿ®ÿ;m2>Œ ëÈŒ•µÿÖþ[ûŸEõ̵ÿŸ×”»O2Šã±®D‡L·­ÿ·þŸÙcœw?… "}ýÿÓ7ŠþÿÓç%î]Üüï³³k„A  wš\£J?κÓ,¡˜kÐ=õpViZn*˜ÿÏ;ˆÔ¸¹—¿ËÐ{ñе9?©©Ó5G9;“M€¥òy5 • Ý7ß|óÅ›ü |[V«õQø 8ÕGLðÇÓ×ZM¯fg–ÞÇùáŸ:"l¤Ã'nêl ÃT~ŸžžØ¹óùr×=¤5è;2ä>O ¶íýßûoŒìüßùoÐÕ)Õûå wš\ÓFQ5Ïú¦4Õí«ÿçG‹ÕÿµÉx°jîú¿ëuDuË(˜ù¿öû²aí¿µÿGy®ýù7µ/Ìú;÷ø1oø@—£Ì çG|×õáÖÿÓIŸÚvµûŸ¾û”&eÖþ[ÿÿƒýÿô“ßüò­Io"׈èWòšÆ˜@üJ_e¡€æ\??箼‘cä(´Ò˧[A“pÿ3õ™è…Ê¢¡qyÝÓ(¤Ò‹]kŒ°È8@]Ûxd¾~õ&/žæEëS&@ÙÔ­62¢ÚG_ýõoÞ¼É5ú‚^Ç(iú =0«õà‡¾uˆm¹ò&3 ¤·¾Sþô%Ð) Ú´‹lò”¯i[ê˜kq  É¯ œK_œ*:å'n]íü¤•fïÿÞ3ãí7W3FvþÐ{çÿêsD /WÿŸõÃZ"èžÓ»þïú#£ãögÆÆÚkÿulÔ¥3„ÆÕ%÷´µÿ3uÖþ¿ÖšõÿÖÿ[ÿÖ’?Aÿÿñ, ]AÑ.÷Å¡†gVÆyòg=9 œã3¥Éâs'å%M~¯[FYx&þüYy¡Ÿrh¢†â¡Lc<òòÅÃI|\x£ÒÏú÷x±¨vxôÀ& 1080 11D50 2457 1138.32 568.00 com.apple.InterfaceBuilder.CocoaPlugin 2457 NSWindowTemplate NSView NSMenu NSMenuItem NSCustomObject com.apple.InterfaceBuilder.CocoaPlugin PluginDependencyRecalculationVersion NSApplication FirstResponder NSApplication AMainMenu CocoaApplication 1048576 2147483647 NSImage NSMenuCheckmark NSImage NSMenuMixedState submenuAction: CocoaApplication About CocoaApplication 2147483647 YES YES 1048576 2147483647 Preferences… , 1048576 2147483647 YES YES 1048576 2147483647 Services 1048576 2147483647 submenuAction: Services _NSServicesMenu YES YES 1048576 2147483647 Hide CocoaApplication h 1048576 2147483647 Hide Others h 1572864 2147483647 Show All 1048576 2147483647 YES YES 1048576 2147483647 Quit CocoaApplication q 1048576 2147483647 _NSAppleMenu File 1048576 2147483647 submenuAction: File New n 1048576 2147483647 Open… o 1048576 2147483647 Open Recent 1048576 2147483647 submenuAction: Open Recent Clear Menu 1048576 2147483647 _NSRecentDocumentsMenu YES YES 1048576 2147483647 Close w 1048576 2147483647 Save… s 1048576 2147483647 Revert to Saved 2147483647 YES YES 1048576 2147483647 Page Setup... P 1179648 2147483647 Print… p 1048576 2147483647 Edit 1048576 2147483647 submenuAction: Edit Undo z 1048576 2147483647 Redo Z 1179648 2147483647 YES YES 1048576 2147483647 Cut x 1048576 2147483647 Copy c 1048576 2147483647 Paste v 1048576 2147483647 Paste and Match Style V 1572864 2147483647 Delete 1048576 2147483647 Select All a 1048576 2147483647 YES YES 1048576 2147483647 Find 1048576 2147483647 submenuAction: Find Find… f 1048576 2147483647 1 Find and Replace… f 1572864 2147483647 12 Find Next g 1048576 2147483647 2 Find Previous G 1179648 2147483647 3 Use Selection for Find e 1048576 2147483647 7 Jump to Selection j 1048576 2147483647 Spelling and Grammar 1048576 2147483647 submenuAction: Spelling and Grammar Show Spelling and Grammar : 1048576 2147483647 Check Document Now ; 1048576 2147483647 YES YES 2147483647 Check Spelling While Typing 1048576 2147483647 Check Grammar With Spelling 1048576 2147483647 Correct Spelling Automatically 2147483647 Substitutions 1048576 2147483647 submenuAction: Substitutions Show Substitutions 2147483647 YES YES 2147483647 Smart Copy/Paste f 1048576 2147483647 1 Smart Quotes g 1048576 2147483647 2 Smart Dashes 2147483647 Smart Links G 1179648 2147483647 3 Text Replacement 2147483647 Transformations 2147483647 submenuAction: Transformations Make Upper Case 2147483647 Make Lower Case 2147483647 Capitalize 2147483647 Speech 1048576 2147483647 submenuAction: Speech Start Speaking 1048576 2147483647 Stop Speaking 1048576 2147483647 Format 2147483647 submenuAction: Format Font 2147483647 submenuAction: Font Show Fonts t 1048576 2147483647 Bold b 1048576 2147483647 2 Italic i 1048576 2147483647 1 Underline u 1048576 2147483647 YES YES 2147483647 Bigger + 1048576 2147483647 3 Smaller - 1048576 2147483647 4 YES YES 2147483647 Kern 2147483647 submenuAction: Kern Use Default 2147483647 Use None 2147483647 Tighten 2147483647 Loosen 2147483647 Ligatures 2147483647 submenuAction: Ligatures Use Default 2147483647 Use None 2147483647 Use All 2147483647 Baseline 2147483647 submenuAction: Baseline Use Default 2147483647 Superscript 2147483647 Subscript 2147483647 Raise 2147483647 Lower 2147483647 YES YES 2147483647 Show Colors C 1048576 2147483647 YES YES 2147483647 Copy Style c 1572864 2147483647 Paste Style v 1572864 2147483647 _NSFontMenu Text 2147483647 submenuAction: Text Align Left { 1048576 2147483647 Center | 1048576 2147483647 Justify 2147483647 Align Right } 1048576 2147483647 YES YES 2147483647 Writing Direction 2147483647 submenuAction: Writing Direction YES Paragraph 2147483647 CURlZmF1bHQ 2147483647 CUxlZnQgdG8gUmlnaHQ 2147483647 CVJpZ2h0IHRvIExlZnQ 2147483647 YES YES 2147483647 YES Selection 2147483647 CURlZmF1bHQ 2147483647 CUxlZnQgdG8gUmlnaHQ 2147483647 CVJpZ2h0IHRvIExlZnQ 2147483647 YES YES 2147483647 Show Ruler 2147483647 Copy Ruler c 1310720 2147483647 Paste Ruler v 1310720 2147483647 View 1048576 2147483647 submenuAction: View Show Toolbar t 1572864 2147483647 Customize Toolbar… 1048576 2147483647 Window 1048576 2147483647 submenuAction: Window Minimize m 1048576 2147483647 Zoom 1048576 2147483647 YES YES 1048576 2147483647 Bring All to Front 1048576 2147483647 _NSWindowsMenu Help 2147483647 submenuAction: Help CocoaApplication Help ? 1048576 2147483647 _NSHelpMenu _NSMainMenu 15 2 {{335, 390}, {480, 360}} 1954021376 CocoaApplication NSWindow 256 {480, 360} {{0, 0}, {2560, 1418}} {10000000000000, 10000000000000} YES AppDelegate NSFontManager terminate: 449 orderFrontStandardAboutPanel: 142 delegate 495 performMiniaturize: 37 arrangeInFront: 39 print: 86 runPageLayout: 87 clearRecentDocuments: 127 performClose: 193 toggleContinuousSpellChecking: 222 undo: 223 copy: 224 checkSpelling: 225 paste: 226 stopSpeaking: 227 cut: 228 showGuessPanel: 230 redo: 231 selectAll: 232 startSpeaking: 233 delete: 235 performZoom: 240 performFindPanelAction: 241 centerSelectionInVisibleArea: 245 toggleGrammarChecking: 347 toggleSmartInsertDelete: 355 toggleAutomaticQuoteSubstitution: 356 toggleAutomaticLinkDetection: 357 saveDocument: 362 revertDocumentToSaved: 364 runToolbarCustomizationPalette: 365 toggleToolbarShown: 366 hide: 367 hideOtherApplications: 368 unhideAllApplications: 370 newDocument: 373 openDocument: 374 raiseBaseline: 426 lowerBaseline: 427 copyFont: 428 subscript: 429 superscript: 430 tightenKerning: 431 underline: 432 orderFrontColorPanel: 433 useAllLigatures: 434 loosenKerning: 435 pasteFont: 436 unscript: 437 useStandardKerning: 438 useStandardLigatures: 439 turnOffLigatures: 440 turnOffKerning: 441 toggleAutomaticSpellingCorrection: 456 orderFrontSubstitutionsPanel: 458 toggleAutomaticDashSubstitution: 461 toggleAutomaticTextReplacement: 463 uppercaseWord: 464 capitalizeWord: 467 lowercaseWord: 468 pasteAsPlainText: 486 performFindPanelAction: 487 performFindPanelAction: 488 performFindPanelAction: 489 showHelp: 493 alignCenter: 518 pasteRuler: 519 toggleRuler: 520 alignRight: 521 copyRuler: 522 alignJustified: 523 alignLeft: 524 makeBaseWritingDirectionNatural: 525 makeBaseWritingDirectionLeftToRight: 526 makeBaseWritingDirectionRightToLeft: 527 makeTextWritingDirectionNatural: 528 makeTextWritingDirectionLeftToRight: 529 makeTextWritingDirectionRightToLeft: 530 performFindPanelAction: 535 addFontTrait: 421 addFontTrait: 422 modifyFont: 423 orderFrontFontPanel: 424 modifyFont: 425 window 532 0 -2 File's Owner -1 First Responder -3 Application 29 19 56 217 83 81 75 78 72 82 124 77 73 79 112 74 125 126 205 202 198 207 214 199 203 197 206 215 218 216 200 219 201 204 220 213 210 221 208 209 57 58 134 150 136 144 129 143 236 131 149 145 130 24 92 5 239 23 295 296 297 298 211 212 195 196 346 348 349 350 351 354 371 372 375 376 377 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 450 451 452 453 454 457 459 460 462 465 466 485 490 491 492 494 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 534 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{380, 496}, {480, 360}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin 535 ABCardController NSObject id id id id id id id addCardViewField: id copy: id cut: id doDelete: id find: id paste: id saveChanges: id ABCardView NSButton NSManagedObjectContext NSSearchField NSTextField NSWindow mCardView ABCardView mEditButton NSButton mManagedObjectContext NSManagedObjectContext mSearchField NSSearchField mStatusTextField NSTextField mWindow NSWindow IBProjectSource ./Classes/ABCardController.h ABCardView NSView id id commitAndSave: id statusImageClicked: id NSObjectController NSImageView NSView ABNameFrameView NSView NSImage ABImageView mBindingsController NSObjectController mBuddyStatusImage NSImageView mHeaderView NSView mNameView ABNameFrameView mNextKeyView NSView mUserImage NSImage mUserImageView ABImageView IBProjectSource ./Classes/ABCardView.h ABImageView NSImageView id id id id copy: id cut: id delete: id paste: id IBProjectSource ./Classes/ABImageView.h DVTBorderedView DVTLayoutView_ML contentView NSView contentView contentView NSView IBProjectSource ./Classes/DVTBorderedView.h DVTDelayedMenuButton NSButton IBProjectSource ./Classes/DVTDelayedMenuButton.h DVTGradientImageButton NSButton IBProjectSource ./Classes/DVTGradientImageButton.h DVTImageAndTextCell NSTextFieldCell IBProjectSource ./Classes/DVTImageAndTextCell.h DVTImageAndTextColumn NSTableColumn IBProjectSource ./Classes/DVTImageAndTextColumn.h DVTLayoutView_ML NSView IBProjectSource ./Classes/DVTLayoutView_ML.h DVTOutlineView NSOutlineView IBProjectSource ./Classes/DVTOutlineView.h DVTSplitView NSSplitView IBProjectSource ./Classes/DVTSplitView.h DVTStackView_ML DVTLayoutView_ML IBProjectSource ./Classes/DVTStackView_ML.h DVTTableView NSTableView IBProjectSource ./Classes/DVTTableView.h DVTViewController NSViewController IBProjectSource ./Classes/DVTViewController.h HFController NSObject selectAll: id selectAll: selectAll: id IBProjectSource ./Classes/HFController.h HFRepresenterTextView NSView selectAll: id selectAll: selectAll: id IBProjectSource ./Classes/HFRepresenterTextView.h IBEditor NSObject id id id id id changeFont: id performCopy: id performCut: id selectAll: id sizeSelectionToFit: id IBProjectSource ./Classes/IBEditor.h IDECapsuleListView DVTStackView_ML dataSource id dataSource dataSource id IBProjectSource ./Classes/IDECapsuleListView.h IDEDMArrayController NSArrayController IBProjectSource ./Classes/IDEDMArrayController.h IDEDMEditor IDEEditor DVTBorderedView NSView IDEDMEditorSourceListController DVTSplitView bottomToolbarBorderView DVTBorderedView sourceListSplitViewPane NSView sourceListViewController IDEDMEditorSourceListController splitView DVTSplitView IBProjectSource ./Classes/IDEDMEditor.h IDEDMEditorController IDEViewController IBProjectSource ./Classes/IDEDMEditorController.h IDEDMEditorSourceListController IDEDMEditorController DVTBorderedView IDEDMEditor DVTImageAndTextColumn DVTOutlineView NSTreeController borderedView DVTBorderedView parentEditor IDEDMEditor primaryColumn DVTImageAndTextColumn sourceListOutlineView DVTOutlineView sourceListTreeController NSTreeController IBProjectSource ./Classes/IDEDMEditorSourceListController.h IDEDMHighlightImageAndTextCell DVTImageAndTextCell IBProjectSource ./Classes/IDEDMHighlightImageAndTextCell.h IDEDataModelBrowserEditor IDEDMEditorController IDEDataModelPropertiesTableController IDECapsuleListView NSArrayController IDEDataModelPropertiesTableController IDEDataModelEntityContentsEditor IDEDataModelPropertiesTableController attributesTableViewController IDEDataModelPropertiesTableController capsuleView IDECapsuleListView entityArrayController NSArrayController fetchedPropertiesTableViewController IDEDataModelPropertiesTableController parentEditor IDEDataModelEntityContentsEditor relationshipsTableViewController IDEDataModelPropertiesTableController IBProjectSource ./Classes/IDEDataModelBrowserEditor.h IDEDataModelConfigurationEditor IDEDMEditorController IDECapsuleListView IDEDataModelEditor IDEDataModelConfigurationTableController capsuleListView IDECapsuleListView parentEditor IDEDataModelEditor tableController IDEDataModelConfigurationTableController IBProjectSource ./Classes/IDEDataModelConfigurationEditor.h IDEDataModelConfigurationTableController IDEDMEditorController NSArrayController NSArrayController IDEDataModelConfigurationEditor XDTableView configurationsArrayController NSArrayController entitiesArrayController NSArrayController parentEditor IDEDataModelConfigurationEditor tableView XDTableView IBProjectSource ./Classes/IDEDataModelConfigurationTableController.h IDEDataModelDiagramEditor IDEDMEditorController XDDiagramView IDEDataModelEntityContentsEditor diagramView XDDiagramView parentEditor IDEDataModelEntityContentsEditor IBProjectSource ./Classes/IDEDataModelDiagramEditor.h IDEDataModelEditor IDEDMEditor DVTDelayedMenuButton DVTDelayedMenuButton NSSegmentedControl IDEDataModelConfigurationEditor IDEDataModelEntityContentsEditor IDEDataModelFetchRequestEditor NSSegmentedControl NSTabView addEntityButton DVTDelayedMenuButton addPropertyButton DVTDelayedMenuButton browserDiagramSegmentControl NSSegmentedControl configurationViewController IDEDataModelConfigurationEditor entityContentsViewController IDEDataModelEntityContentsEditor fetchRequestViewController IDEDataModelFetchRequestEditor hierarchySegmentControl NSSegmentedControl tabView NSTabView IBProjectSource ./Classes/IDEDataModelEditor.h IDEDataModelEntityContentsEditor IDEDMEditorController IDEDataModelBrowserEditor IDEDataModelDiagramEditor IDEDataModelEditor NSTabView browserViewController IDEDataModelBrowserEditor diagramViewController IDEDataModelDiagramEditor parentEditor IDEDataModelEditor tabView NSTabView IBProjectSource ./Classes/IDEDataModelEntityContentsEditor.h IDEDataModelFetchRequestEditor IDEDMEditorController NSArrayController IDEDataModelEditor IDECapsuleListView entityController NSArrayController parentEditor IDEDataModelEditor tableView IDECapsuleListView IBProjectSource ./Classes/IDEDataModelFetchRequestEditor.h IDEDataModelPropertiesTableController IDEDMEditorController IDEDMArrayController NSTableColumn NSArrayController IDEDataModelBrowserEditor IDEDMHighlightImageAndTextCell XDTableView arrayController IDEDMArrayController entitiesColumn NSTableColumn entityArrayController NSArrayController parentEditor IDEDataModelBrowserEditor propertyNameAndImageCell IDEDMHighlightImageAndTextCell tableView XDTableView IBProjectSource ./Classes/IDEDataModelPropertiesTableController.h IDEDocDownloadsTableViewController NSObject NSButtonCell DVTTableView IDEDocViewingPrefPaneController _downloadButtonCell NSButtonCell _tableView DVTTableView prefPaneController IDEDocViewingPrefPaneController IBProjectSource ./Classes/IDEDocDownloadsTableViewController.h IDEDocSetOutlineView NSOutlineView IBProjectSource ./Classes/IDEDocSetOutlineView.h IDEDocSetOutlineViewController NSObject id id id id id getDocSetAction: id showProblemInfoForUpdate: id subscribeToPublisherAction: id unsubscribeFromPublisher: id updateDocSetAction: id docSetOutlineView IDEDocSetOutlineView docSetOutlineView docSetOutlineView IDEDocSetOutlineView IBProjectSource ./Classes/IDEDocSetOutlineViewController.h IDEDocViewingPrefPaneController IDEViewController id id id id id id id id id id id addSubscription: id checkForAndInstallUpdatesNow: id deleteDocSet: id downloadAction: id minimumFontSizeComboBoxAction: id minimumFontSizeEnabledAction: id showHelp: id showSubscriptionSheet: id subscriptionCancelAction: id toggleAutoCheckForAndInstallUpdates: id toggleDocSetInfo: id DVTGradientImageButton DVTGradientImageButton DVTGradientImageButton NSSplitView NSView NSView DVTBorderedView DVTBorderedView NSButton NSTextView IDEDocSetOutlineViewController IDEDocDownloadsTableViewController NSComboBox NSTextField NSButton NSTextField NSWindow NSButton _addButton DVTGradientImageButton _deleteButton DVTGradientImageButton _showInfoAreaButton DVTGradientImageButton _splitView NSSplitView _splitViewDocSetInfoSubview NSView _splitViewDocSetsListSubview NSView borderedViewAroundSplitView DVTBorderedView borderedViewBelowTable DVTBorderedView checkAndInstallNowButton NSButton docSetInfoTextView NSTextView docSetOutlineViewController IDEDocSetOutlineViewController downloadsTableViewController IDEDocDownloadsTableViewController minimumFontSizeControl NSComboBox noUpdatesAvailableMessage NSTextField showInfoButton NSButton subscriptionTextField NSTextField subscriptionWindow NSWindow validateAddSubscriptionButton NSButton IBProjectSource ./Classes/IDEDocViewingPrefPaneController.h IDEEditor IDEViewController IBProjectSource ./Classes/IDEEditor.h IDEViewController DVTViewController IBProjectSource ./Classes/IDEViewController.h IKImageView id id id id copy: id crop: id cut: id paste: id IBProjectSource ./Classes/IKImageView.h NSDocument id id id id id id printDocument: id revertDocumentToSaved: id runPageLayout: id saveDocument: id saveDocumentAs: id saveDocumentTo: id IBProjectSource ./Classes/NSDocument.h NSResponder _insertFindPattern: id _insertFindPattern: _insertFindPattern: id IBProjectSource ./Classes/NSResponder.h QLPreviewBubble NSObject id id hide: id show: id parentWindow NSWindow parentWindow parentWindow NSWindow IBProjectSource ./Classes/QLPreviewBubble.h QTMovieView id id id id id showAll: id showCustomButton: id toggleLoops: id zoomIn: id zoomOut: id IBProjectSource ./Classes/QTMovieView.h WebView id id id id reloadFromOrigin: id resetPageZoom: id zoomPageIn: id zoomPageOut: id IBProjectSource ./Classes/WebView.h XDDiagramView NSView id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id _graphLayouterMenuItemAction: id _zoomPopUpButtonAction: id alignBottomEdges: id alignCentersHorizontallyInContainer: id alignCentersVerticallyInContainer: id alignHorizontalCenters: id alignLeftEdges: id alignRightEdges: id alignTopEdges: id alignVerticalCenters: id bringToFront: id collapseAllCompartments: id copy: id cut: id delete: id deleteBackward: id deleteForward: id deselectAll: id diagramZoomIn: id diagramZoomOut: id expandAllCompartments: id flipHorizontally: id flipVertically: id layoutGraphicsConcentrically: id layoutGraphicsHierarchically: id lock: id makeSameHeight: id makeSameWidth: id moveDown: id moveDownAndModifySelection: id moveLeft: id moveLeftAndModifySelection: id moveRight: id moveRightAndModifySelection: id moveUp: id moveUpAndModifySelection: id paste: id rollDownAllCompartments: id rollUpAllCompartments: id selectAll: id sendToBack: id sizeToFit: id toggleGridShown: id toggleHiddenGraphicsShown: id togglePageBreaksShown: id toggleRuler: id toggleSnapsToGrid: id unlock: id _diagramController IDEDataModelDiagramEditor _diagramController _diagramController IDEDataModelDiagramEditor IBProjectSource ./Classes/XDDiagramView.h XDTableView NSTableView showAllTableColumns: id showAllTableColumns: showAllTableColumns: id IBProjectSource ./Classes/XDTableView.h AppDelegate NSObject id id applicationShouldTerminate: id applicationWillFinishLaunching: id IBProjectSource ./Classes/AppDelegate.h 0 IBCocoaFramework YES 3 {11, 11} {10, 3} YES qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/en_US.lproj/InfoPlist.strings0000644000175100001770000000005414616416776030550 0ustar runnerdocker/* Localized versions of Info.plist keys */ qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/0000755000175100001770000000000014616416776030135 5ustar runnerdocker././@LongLink0000644000000000000000000000015000000000000011577 Lustar rootrootqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appiconset/qbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appicons0000755000175100001770000000000014616416776033222 5ustar runnerdocker././@LongLink0000644000000000000000000000017300000000000011604 Lustar rootrootqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appiconset/icon_512x512@2x.pngqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appicons0000644000175100001770000017413014616416776033232 0ustar runnerdocker‰PNG  IHDR+ƒøIDATxÚìÝxdW}7à3õ•¶w¯{ïÆÆpÌGsòBB ‚ ùZƒ˜lbBŒLy )`=´ÐbÀš{Y—õºlß•V]óÝ;»kïÊiFšÍœû¾ûÌ£Ñh¤Õ½çÎèü÷œsC²*gÞFÁ.@gðú`" ð: Ã(À뀌 ($¯S2F °¼6Èa€"ÈðëÑ{@öŠpA€‚hòס×9@œ Mös€×Ÿ×2 XÀ  @¼îrMú{(Λïÿ(D€:¿Þr^ë̲ /ÌÁÿ‰¼Îjð½^ÓÙU¨ñó Ê¯±\ül²Sà×#8@^[~On^×Þ'澘ŸíÏ*ÔàwÀëªÊÏÏUáÿòZˆC5ÎêªôàõT…ç×âk^ÿ þj…Bx-Õ¨ðÏUñgy/hþ‚¦Å}¡FA€@^C³(ÖsüŒ\_çÞâ*ügó˜@T©øŸiá_­pÀû@óåê…*=G ¯þ•~>ÛÀû@ã‡3-þgûy5~G©â¶…5CïÍTzf¿0ƒçUú˜@™|Í”{¾ÜB¿Ú@-_ÿÞS…{íÞtEy¥÷+ùZ¹Û*@ô¯•jžáŸêþž[K…ÀL_ûÞ+æ&(˜É<þÉŠùÂîÛøîÛl!€ÿÿ•Üßû±´èoMní»o-»o•þ.Þ š+˜Iávüéç£Ém ¹ìL"ÕjÀ¬‹ÿrβ— Ê-üs{ÿmÉ­ëÌ/]ø¦Îýæ½ZP®ïžò…»ѽú˜…Ý÷ “<¶wŸSÐ @ñ?õc•œÝÏMñqÏ™ÿî3ÿý‚7'Åÿ«4j ûN#XüOVì禦 „Ètñ_nÁ¿÷Çü>Åÿ=—h"f e’>éT#„PüOóX¥Cû§;óß¶»ø“â€Yöus“üaŠ@ PFQ¯È€â¿Ì Ôcû?ã ŠªLWôçÊ Êýhêâ¿’!ÿ¹ €üÞÅ×=¯ÔDT9(5쿜À(d¾øŸéÙþ½ï?:ìÿŒë/økÅ?5 &ªtø%!€€@ _üW²Ø_©â¿œ¢ÿq þqýùoê:¨çÏ45 ¡ô¢€!Tg húâ¿Ò!ÿÓ{ù?ÿ¯»êUüPíþoK(½ÀdŸWs*€AQÿåœõß3çWñÿùóߨø ZBé)“…!ÔfQ@}ñ?ÙçûžùO‹ÿƒÿÔ¬<Ý!L=% ÔÏ5 @™+þ+ òŠÿWh"æ((L7(þÃãÏöO~æÿsŠ&˜„PÝQ )ŠÿÜ$o !”?Üï3ÿékpÞéŸ;ÿ ]‡(þ¨[žˆ¯ð{«9 @8 €¨Šÿ©€G‡ý§Å·â€úõ‹§[pº>s%£@Sÿå.öWê±=Åræÿ¼´ø¹& Nö.þ'Ž(LÓwžlxÿt£ÈDñ?õ™ÿK‹ÿùŠêÝ?žl$ëÄû…iúÏ…*ý.Âd ø?Tñ@Ã…÷'*g‘?…}ƒj± Pü+þÈT?¹eŠ~ëd!ÁtýéÜ4}ðœÝÞŒ@ñ_¿â^Rü¿^ñÀj ûÎÿ/Õç-LÓ·v†¿Iÿ•ÿåÞZÿ4Xyº³ÿ!L?`ºþ·³þ Èÿ3+þ§{óLõ½‡ý+þhÔ „éרóy˜ä9{>ŸêjSý>FÔ‰(þÿrSô…C‰>q5ûë ©ŠÿÅ?ML̤¿¢.þ­ö@³S…Sõ»Ë½Rˆºø™& ‰€rB€Éž¯à@ôÅ‹â€È€©úÌÕê«#€¦+þsŠÿy§ÿ«â€¦ ¦{N%!@n–¿hªâÿõ݇)þhŠ T_wªyÿ¹*üß@ñu¦šËŸ›¦O­°€âš¨ø%úÃ¥úÑ!”^$p&ýx ø€ö­seþ³í‡#Å?4PÊ*-îPü@ÿå\(þ  ûÙSÍëŸnñ?€ÿФ!ÀLæÿϤÿ0ýíé.ïWêk }(þ ÉúÞå† (þ ÉûÞ¹2¿& €âš°ï=Uq_é:¹*þ^Pü+þ Fýp‹þ @ñ÷Ãs3øž‰×s¤ÿЍq]/Å?4a_|&W@Š(þ Yúæ³] Ð(Þ`ÿÐ`}ó\Šv€Å¿â¼¯x€â2Þ—GŠPÔ#À‹â@€â_ñ ÑoGŠ À†â@€â_ñ @ñ¯ø€ÆêÏ#Å?¨à…¯ø øWüPü+þ ¹ê(þÿÿŠŠÅ?€Å¿â@€âŠŠÅ?€Å¿â@€â_ñ @ñ¯ø øWüÀöÿ øWüPü+þ(þÿÿŠŠ(þ ø øWüPü+þ(þÿÿŠŠ(þ ø@ øWü Pü+þ(þÿš¥øŸî{ÿ"(þsŠÙ ÿš¼¸Wü Pü+þd­ø/õ=Šÿ ü‰÷ÿ"/þseÜÿ0¨FñߢøÐþdÏ/µØŸâ@@ÿ3]ñºùþŠ TZüçBesþ»ÿÍ©Õ.hª¿ÞÅË>Åÿ¿÷†îCÿÍÈ€æ,þgò}åùWühÐp 7Åsf2ä?§øPÿ¿Ü⿜ÿK…{ßZ÷*þ_¯øh~Öh®â?Ì øŸ¬ðŸîÌë^ÅÿË5 0QWKgèÎw‡žäÖïÚ}^ñM$ýøè™\kñ¹{t´t„ÑÂh+Œ=úØŽ±¾Gï§ï ã…ñ°slgòµþâÇã¡l Ùù€L‡¥FTRøï{©?Å?dJ>—‹Z„%m‹Ãâ¶…aiñã¢äã¢âÇ%É­7ßzZçí.ôssò{‚$èK‚­£ÛÖѭaÓÈæ°ydkØ8²%ù¸ë–Þß:ºmŸ @@3øSù¥«tÑ?Å?d È_Þ¾4¬n_Vu캥÷ê: ìß±:´äZšbz[{Š·ô÷Ÿ.,xdxcX?üpxph×mÏý{ïOF ;(M”;ï¿ÜÿÿEÉYüû‡wë>8ÚuPXÙ¾<’ŸÏÌ>HÂ=AGè}|8ðÐð†pçÀÚpçε~Ü”ŒPÏ¢¾Ü¯M7ôªï+µÚ¿âšÌüÖÞpü¼£Ã»‹ýôc:”Ÿ©Ãý:Voç,<óÑÇÓ©{€ÛvÞ~Ówsqª€€F rÓ„¥n-Šh>é¢{GwNžB8¥÷„âYþ¹š“›týƒÓÚžN›ÿ„GK§ ü|ǯÃoûn ¿ìûmqZ@,Å$ÕSå/õqº[Ë^Åâ[GK{89)ôOR8±çØdÎþþ þ9´nh}øÕŽ›ÂO¶ÿo¸qû/à+ÐD¾{ÊÎM>lMn#Éml÷m|’“Ý “|œì&ÜSÜeêŠð•ß ]]Ø1Úg§QÇ&gÍ €¿‡UxN% ªX`†×t·W®ùã°0  –ÇZzéÈsžY Ò0@ÑD Zr-a¬0fG(QèO·øßdóÿË € Òu`xÍþ¯(Ó†zémí uÀ+‹ÁÓU÷}$Ü3x¿B“wrtAÙ,ìgúü©þs@¨²Ž–Žâ<ÿô²~­¹¼œ8¾çèðOG_þåá/†O?øoa´0j§Ð”ZrIÄ`€``VÏ)5ïªð˜ÆAû‡KþËâÙ˜ó?ܹÖð‡+/N.xR¸|íº¡õv MØéi±æ€wßæ ¦þŸ+ñX©‘@É[.9ãQøÈÑW(þi8Gt>zôû‹Ç(ÄÔÑ vŒhŽ¿Ó­þ?ÕóM€Xغ ¼ñÀW‡Óœlgа:ZÚ߯ù“pBÏ1áÊûþÑ•hé"€ÌÁû¯]0'}=‚\p˜‘Óæ?!\{ÌUŠšÆ“ž>zÔûÑ݇Ù4I‡H@ ˜ésr%>–z®JH/¹ö®CßTÍdyûÒð÷G\Î[|¶At@uAæ‚)ÍLUÄOuÆ_áä“•ý_ ¥~β§Û4­ö–¶ð¦ƒþ_8¸ë€ð±>“,²n™u´C“ÓPªÈ/UØOö¼rWþ7v›ßÚÞ~ðëÂI½ÇÙDðG$^¸âyauûŠðÞ{ÿ! Û)4œ]€9zÿ¥Y‚€rž;ÕâÓ=™t`çšðGþ­âŸèœ³èIáïg2e¾A“wsPê/¨³ÿP¦Ã»8âoªŽvQ:zÞáÉ1~yXÒ¶ØÎ ±: ¦2V¨Wã{sSÜŸêì5~'hjG&×P¿ò°·‡Î޹:÷KF¼#,ÐP"]P€` –?«T@™s|ÏÑáý‡¿=ô¶öØdÂþ«Ã|WXÕ¾ÜΠA: º ¦+îK áŸêì¿¡ÿ°—{Ž ï=ìÒÐï¶3È”•IñÿwG¼Ó”£Sc €€²çóOöy®‚Ÿm™”.ô—ÿ]-v™´¢}Y¸2ý²¸m¡Áw@uAÔŠyÿd^z]ôwò†ÐÑÒngié4€wúfAsÛ11@À¬‹ôrýsöŸLI?{Ï¡o =ùyv$ŽHÁ¼ì׆|.og0GÝ3 rÓ¥žë¯/Ñ›—ÌõO‡ý/o_jgÀ^N›røËþÌŽ`Ž: º ê@&´æZÃ;’aÿ‡thgÀ$ž¹äÜð‡+/¶#¨ÇÄSïÓ=ž«ðû!z¯?ðÏÃɽÇÛ0…—®~a8sÁíêÜÕ0[S…¦)ÿgéáüÅgÛ0íŽ\øëƒþ¢¸8 Ôó¸@@å…~©ùÿ¹ ‚ˆJ:äÿUk^jG@™zó=á­ÿUqÚ Ô¥šÓP«‚ÝÙ2£;ß.;øu.÷:jÞááûý¡" jõ³ ^¹ð†_öï\mgÀ \¼üYáÉ Ï°#¨CT@ h¯ÅÏÏÕùw9óÜeÏg+^`Lráu^–´-¶3¨í±æ*¦-òs³ü~ˆVº€ÙËö{‘³”®ðÚ^iGPã¨n € ›E}-¿ß¥ÉÈ )Þ˜¬bÞÕÒig@œ±à”pá’§ØÔî}Û"€ê\3A$ž¿ü™á„žc쨢W¯ùÓ°¼}©A: º!sÁõ~â-è'[ñß_[¢³ºceøÓÕ†þ7¢¡ñá0\.Þ/Œ‡cû|½£¥#´µìú3”Oþ¥Wp qÌËw‡×ìÿŠðæ»ÞmgPƒN‹. €€© z`’äë|UèL Iêc¤0Ö=6o F6…‡‡7† ÉmóèÖ°c´/ôõo;ÆúÂðøHE?;ŸË‡žü¼dú¼ÐÓÚ“Üï‹Z„eÉYèemKŠg£ÓÛŠöeÅçQ{{¦|cÓ÷ì ªûþm@U üU%ÒÂäÄžcíˆY7´>ܾóîpÏÀ}áÞÁÂÚäãúᇊgóka¬0¶n/ÞÂÐÔÏ]š¬R`×þá Îô¶&ÚuP8¬ûК„Tןí÷âðí? ýc;í ªØaÑU(Þëýsüõ¥i¥ÃÅ_¶úíˆ*IÏìßÔw{ømÿ­á–þÛÃMý·…í£;ö÷Ý8²¹xûùö_=úXGK{8¢ûÐp̼#±óŽ 'öS\ÑžÙY˜ŒÂøãUÿ7\³î“vUÓb*@¹^¼ò÷Ââ¶…vÄ,lÙnÜñ«ðãm7†·ÿ²éÏð¦kü¦ï–â-„/†–d•ñúg.xbr;%žŒpÖqfž·ì™á뛾î¸×Π*LP§¿¹vÍnMÇêdåÿ‹ìˆØœýßÝòÃð­Íß·í¼+êmM§*ÜžlczûÔƒÿZ\?àÜEOç->;Üu€ƒ¡éú —ì÷Çáõw¾ÓΠ*\@P–?_óÒd®··¯rFÃ÷·ÞœÁýNøÅŽßÔl£{$Y¬ðŸþ÷â-]3à‚d ‰§/yªie:eþ‰á¬…§'ëüÄÎ`Ör9SÔäo¬]@LN_prñÆôÒÅô¾¼ñ¿Âløz̗ؔç1w Üþ1™Óþ‰õÿ\ .^ö¬°çj;fé(€¶ý¼*Î € †Æ\x¹…ÿ¦•^žïº¯ßÜüÝâ¼xJ _ÚððŸ¾Y –þxÕï‡#“…™ÜªŽá™KÏ-î3˜ ‹¨uíMî)‹žé:ÐŽ(!]µÿ_þbøÂ†¯(ü+THþ¥g¶ÓÛ)½'„KּıV­üÝðMÂ%fÙ)± Àœ¿Íñf•ÌMÏÎòxépìϾþ³açØ€R%éB‰_IÖOøÃ›ÿ¼¸ŽB:B€Ç¼pÅóCGK‡ÁŒ¹$'€€JÿvBF´&— {ñªß³#ö²slg¸òÞkÂknk¸gð~;¤FÒ—ŒxÃS¼Š»,n[ž»ìév3 ˜Ì…É¥ÚVw¬´#v»mçÉõׇ¯nú¶3Óuòóí¿ /¿õµáGÛ~jgìö‚Ï ]-v3$L|“JæþÿA2ܘ] Õý[²Èß_Üö–°~è!;¤ÎÒÑo»ë}áCë® #…‘Ìï­óÃ3’+ÀÌ: 3á/(Q;kÁiÅKe]º°ß;î¾2|øO»ûJC˜ëùJø«Û/ ÛF·g~\¼ì¢bHw^7€‰þïŠgg~¤…æî|gøþÖ â¦þÛ«nûëpÿàúLï‡4œ{ò‚ÓÌ êü€`/ÇÌ;"¹™é}pïàºpÉ­o,®öOcypèáðÿnK¸9 ²ì÷VüsÀ„Â"Ûgÿӳ˯»ãíá¡áG *ñº;Þ~Ýwsf÷AÒe=¨cPS{¬l_^œÿŸåâÿ¯îx[Ø4²ÅÁÐàLJ›ïzw¸¥ÿŽÌîSu¨”€G]¼ü¢Ïå3¹í÷ >^sÇ[ÿMdçØ@xãîØ¹6“ÛŸ†uËÛ—:*ÓÞÒ.Xü”LnûöÑá-ÉÙä-#[M¦o¬? ð®°adSö:Épîg,yšƒ€ Ž€ qÎÂ3CokOæ¶;½¼ßÛ×^zÈAФÒQ—Þõžâ´€¬yÆ’sÍë¦lFvçen›ÓëËÿí½W‡_î¸ÉÐäÒiï½çƒÅ6Í’t À)½'8(¯*,¬îXNì=&sÛýÅ _ßÞü@$¾¿õ†ð…G¾’¹í~f2 Êa€ 'SÛ<<>ÞuÏÂÐø° 2#…‘pùÚ«2Õ¶­¹Öä5|¶ÆgúÀõû»kЈÎ\ðݤmQ¦¶ùÃ|*Ü=p¯ÆÔ½ƒëµë?›©m¾pÉS5r_ØðÕpçÀÚÌlï!]†;×hx¦d a]-áŒù§df{Ç ãáïîûpñ#q+Œ…Þÿ±L]à)‹~GÃ3uÔ]OZxjèhiÏÌöþû†¯%—‹»[ÃgÄoûn _ßôÝ OÒèLÉ"€ Þš¡3†}cýáÓý›FϘ¯ÿL² àP&¶5N€’P#@6õäç…S矔™íýç‡ÿ=ìíÓð³ydkqäGV˜ÀT¬07Zí`®µðôЖkËĶnÝþ㑯iôŒúç‡þ=\´ô¼Ð›ï‰~[Ÿ–|„ïœ|½r=¡÷¸G¯KFÌËwOùüt˜ô2“%;´É׺Z:¦üiØ<Õõ;“ïo›âÿhɵ„y-SÿžÝù®âóJiOþÖu$ÿÏ­ýw„WÝö×@dÏS™™mýôƒŸ ãƒ=£vŒõ…ëùrxɪD¿­«;V†ÃºÎÔ(ßióO.Þ²jnî¿-Ü5pOôÛ™Žò™ê²hEcF k²²Bø—Íý§„¯oúNôÛØÛÚS\ xLÁ€È’tèÿá݇D¿é¥ÿ~¸õ§œI}sógâʧfd­(—5)'õW\0úoÓ÷’ÕÞG58“Ú1Ú~°õ†è·óÄÞc46Ù ÷¸Llçmþ¾ÆfJßÞòƒè·ñ˜yG„Ž–v {‹ [À±Ñoã}ƒdb‘7fçÆí¿Œþ‘m¹¶pt»€` @dÄ’¶EaMÇêè·3 gv™½ÑÂX6¦ô«±aO` ²"+Ãÿ¿»ùG›òŽ•-?ÊÀë^{Œ@f€ œ ¼cçÚ°nh½Æ¦,¿ì»©xň˜Y3f ²âÄ Œøñ6—þ£|épà¶ý"êm´<¦à*€È‚%m‹“ùÿ«2ܨ±©È 8fŽï9ZCC° 2âØ œÜ8²9Ü™L€Jü,¹ÀHa$êm<ªû0 ÁUGÍ;<úmüáÖŸXà‰Š Œ†_ï¸9êm<:¯(+0™ºã/~²ýš¹!òcgaë‚°¼}©†&ó¬€èå’Gtõ6Ž%×tÿMß-›ùß¿‰~î6 \Ñ;¸ë€ÐïŠzoî¿=ìÐØÌÈÚû–‘­Qoã‘󬦉 zY˜ÿû‹ œÁ¥¶EÁ¯úâ^ÀB€` @d@:þ¿Øñk ͬüïŽßF½}GtZœ™Œ@ô@ä#†Æ‡Â-ýwhhfÄ=Š$t@ç~šlF fm¹¶p`çþQocZüF56³²nh}ôë¤ë@¦W@Ìì\Zsù¨·ñ·ý·ihªâÖwÆt Èx` ¢îðgàŒßͪv,ÝùûÁ™Ls@DíÈ;üigî&€2ߌ ÛÆŒ€ yÝ7ø@Ø1Ú§¡©Š[’`¬0íö­êX:[:44™U° bû€[ûïÔÈTÍ`rE‰{×E»}ée2 € /˜€Hõ¶ö„¥m‹£ÞÆ;îÖÐTÕk£Þ¾ƒ#¿*L€Xš¿îØ) ºîÚyOÜ€dXÁ@Äê È/ù•.x×À=šªº3òcê —$ÃÆŒ@¬èÜ/êí{`è¡°sl@CSÝ`çÚ¨/¶_ÇJLf\±ZÓ±:úB ªmÇX_xdxc´Û·¢}Yh͵jh2É€ˆVìgúî¸W#ãØª´’kI.¸\#“ÍÀ€ˆQz†/=Ó³˜/×ÆÜºoð¨·oµid50qvðWÏôÅܯ¡©‰û#Öt¬ÒÈd301Ú/òþha´¸ ÔÂ}CF@”€€ˆQìgøî\Æ cššˆ}z‰+U®€8€Î¸óÿ©¥£}aëèöˆ€Õ™L2QZý€42ޱJ}˜4° b´²=îË|­6ÿŸcCG»m­¹|XܺP#“½À@Ä&—ü[Ú¶Xq³ðÐpÜÇØòö¥™ìÖ@l´ö†Ž–ṽCD½}ËÚ–hd²Ì‘V»¨YÇ>ò3{Ãã#aóÈ Mm€ÈG,3€54>† #“~­lg²’ÿãçñ%ÿvŽ ”øyÃþ¼Í#[í`@Äey[Üû´0+ 9Qããl(ö`nF<í7ô~ùÎÉ×GÝîWÝ÷‘b=6Ù™ð¤°îëŸôûF £a0)Ì'30>FK\–µotòŸ7šü¼ñAo4€ Y;öõ²~È€ÔÞ¦d”I:Ú¤½¥-Êí[n @&}yã Pæ€5€Úuì#ÚûððLÍ¥EÒ†‘MÑn_ìA!@6ŽlÖÈÔéX‹7Xj€æûêÞ†7idê Ç6-i[Zrº# šÚÒ¶Åq#êD<Ú$ŸË'— ¯‘@4³Em ã†7jdêÄ6-j] ‘@4«Ž–ŽÐ™Üâ.ʬ@޵á¸5#@4±…‘wèwŒö…¡ña M}€Èæ…Í+öáÿ›G·jdêfËè¶ÈS@4oy‡~k䎷úF€Ð¡oÔ‚lD@ýìÃã#ñ¾_´ @4q‡>öÛ52u>æâ ˜ ‰€VTÓ¶ˆ9—ÐÔ@äS¬@ݹx—ÐÄzó=Qoß6#TMO~žд@kÜÀöÑ™ºêëvÛæå»40€æíÐwG½}}c;52u•^ V-¡5—×È gÇXŸF¦¾Àø@ÔÛ×ù{€x€–ÈGŒökdêŒÅÌ€h>¹ä_W¾3Úí+$ÿúÇM ¾"{h ÎŽ|r&/ bÕŸÌÿ/ŒkhêjçØ`ôï€Ð‘o¸êÄ}ܹ @b™úwÑ/èR€  fp|H#SÿÀ"€€h4]-qŸÉÔÈÔÝ@äÇ]gK‡FÐ|ùv…TYì#Ú[Ú42€æëÈǘÀœÉé%(cÕ‘3@óuäc0fõ—^zrx|8Úí3@3väsF@-Ä< ö‘C "íÈÇ}&/æ³°4¶þˆ/Ø! #ßhF £™91ñ±ûÈ!:òMh<ŒidæÄX!ÞcÏ šPì#Æ’ÅØ@På÷ #@4ŸØó5€9 â Ÿ,  µåâÊks%ê5LÐ|ZsùÈk0WÇ^¼áS‹. €&|cÉÅýÖ2f@{Þ7@B>ò·#pìU_.ù€fëÈçàØ«L>ò©C "}c@mŽ=k ä£à*Ìѱg @4ÖKÜo-1_Š"}Òb Í'—‹»#o€tHŒÐ|¢¿ €Ë"€ þ޼EqìÕ¢C¢K éä"kÌñN?ÉY@ó)„¸çÈç½u2WErÄ5òx°¶€&ìÈÇ}†<ŸËkdæèv¼Çž©5 š1ˆ|•ü¼Åʘ³c/Þ`ÜÕ5@4Ÿø§€ Ú\]@3vä£ `®Ž½xÿl ù¢_À['s£5×q`€¦3nÔèØ‹÷϶«€hBcA59ö¢¾ €@Ó)âžÐb@æ*p@4TG>¸ *c :òŠ0xô¶5Ð@†ÇGP­F ‘Œb¼u2WÇž5Ð@†Æ‡ã.Â,ÈœñþÙ3@óŽ=0Ç^ Þ7F40€f3Tˆ;h ¨þûÆøÐlb?“×ÕÒ©‘™m¹¶h·mP  €ÈGtå»42s¢;âðI # 6Ç^ÄáÓàø Ð|@Ü#ºóê/—üëhivûb¿z€8€Ø§´˜ÀwI𔆱2@ˆ¼#ßm æ"ˆ@  Œ †ñÂx´Û—®Änõâ>æLЄ É¿ØG¨·Ø§ž Ižà¼|·F¦®:#Æ52€fûB€FPgó"°c´O#€hFÑOÈ ¨ó1qè4Z3@³êëzûzó=™ú‡N}cÎþ€hZÛ"λ°uF¦®æç{#~¿Ø¡ Zí 6úmQoߢ¶ù™ºZØoèdþ?”%Wæó  Î@ÜgôŒÀ1WÅÀ˜I¡_É÷@ÍlÝõö-à˜@cüeÿ &¶EÄ<›Æ“ÏåCok¼ Oš€¢¿>€`&€Ôõx›ŸôrÑnŸ(ü€ a™@}€¸·£ýE¸ P±¯ÇnM†eC]€È§œ@Ä…C áµéÐ'szÇ ã¿›ç‚V—¤>bq²Ý(ü@ó*$ÿ¶G~VoQëB M]Ä6õ€ÂªŸWéMÔßæ‘-QoßÂ6#¨# )Šÿjû³ùYi­Ÿß}Ë €šÛ8²YQUû›"¯ úÂ?7ËïÍÕàwJ ÿ¶~ô£Çyä‘m{jW3-ÊÔIÌaÓÀø`ñMXøÏÅ÷N§ewßþéOú¥ù|~à¶Ûn»iÏÿ+j G´ ¨Ó±qàì?)þsux~zk[±bż«®ºê²®®®³ÿäOþä콟$jŒlŠzû–´-ÒÈÔ'h‹9Ø¢PøWgÎÇsŸûÜU/zÑ‹®MŠÿ'%gþŸ¿eË–áäñôÒ\ c? ËÛ–idêÐÓÈ…¥‡M2\øçªô»¥óý;_ýêWwî¹ç~º­­í;v|鵯}í÷“ÇÇö~²¨™ØG¬h_ª‘©¹Åm C[®MÍQüçªðóÊý?÷Ì÷ïxï{ßûÌcŽ9æš–––ù…Bað?øÁ»’LJÂcgÿs ¦6D¾À²ö%ų³…]#ª &–G4 PøÏ|¾rëþÈG>òûí·ß›Ã®‘aÆ ¾æšknOîŽì.þ÷I jbÛèö0R‰vûZ“uT­@퀸§šX€È‹ÿR—ù+瀹In-» ýŽäŒÿ’Ï|æ3×$Åÿ[÷ÿccc}øÃþ`rwxbñ_ì¿j[ VÒ3ã›G¶&Cåã-`Òâl£†ZcmK¢Þ¾ô="-ü«ñøÄç‹ÿ¿øÅ‡=ûÙϾ¶³³óø½Ÿp÷Ýw¿ó§?ýiÚ9Û+Èí¹oPSoˆzû¬@Í€ÈGľVQÿ¹i ù\™çÊüY{ ÿâÿw¼ãç^|ñÅ_›Xü üä/ÿò/¯“ ýßós@M­z8êí[Ù±\#SãÀ¨qá_iñ_îÏ™¬ÀÏ•ñܽ¿¾gØZüÏûЇ>ôÊ“O>ùŸóùüijPã7ÜpÃeÉÇÁðØÙÿÇý?¦5õÐpÜÀêö•™ÚcñcCãC¡l§F`.‹ÿjþÕ|,LRü·uÔQ ßò–·¼oÑ¢E¿7Ù7lÙ²å_Þÿþ÷ÿ"¹;Zâç@Í=ù€5«425µª}E´Û¶Ñhü¶Ånß³ç±â|ÿ?øƒ?8ìùÏþG“!ÿ'LöKŒoûìg?ûÞðø³ÿ!LX@ÔÔ‘ûu¨Åm Cw¾+ÚíÛ0lþ? ]üײðŸêg¤gýÓZ½ó²Ë.{Z2äÿêdÈÉ9ëÖ­ûà×¾öµõ»‹ÿÉ~æ£!€¨©Ø§¤—ìléƒÉPf¨¶Ø¦õÃid±ø¯duÿJ>/ç¹Åùþ݉+¯¼òUûï¿ÿs¹Òuûððð]W\qÅÇî…ÿÆ'ü\Wê+]àk`|0â¿"¹¨çh3×@ÜÇÖú!u+üg[ü—Z̯œÏ'»?ñóGÏúŸuÖY«?ö±}ò€xËTÅêæ›o¾|íÚµ;ÂcsÿsS…F5÷ÐÐ#áà®".ÒV…»îÕÐT]ìáRìk„Ð0Åÿl ÿ©+÷ŒÿTß“ß}ëxÍk^sê9çœómmmûO÷ ÷õõ}çÒK/ýÆ„ââüS€:wò“i1tî§‘ÌÀzs_øWRü϶Ø/u9Àô]É*þ/:âˆ#Þ™œõïœî. #ßýîwßÜ»†þ?n¸ÿ„@ÀU€zuòãæ{Pçþ™š8°sMÜï Ö`n‹ÿjœõŸî~©¯·ì¾µ}ôÑ‹Þô¦7½{ñâÅ¿[înܸñ_>ò‘ÜvýŸì¬˜Pü» P÷®»HëZ£‘©º–\KXÓ±:Úíëë;Fû44‹ìB ÿJŠÿjþ{LkñŽ—¿üåÇ_xá…W'—ø;²Ü_<¹ìߎ뮻ëìÿØ„}7ÕS€Ú»gðþ¨·ï€Ž5Åbm¼0®±©šÕí+CGK{´Ûg@ªÌöù3î?“¿¸Êrëzï{ßû¼cŽ9æÝ---=•üò÷Ýwß?|ûÛß~pŠâ² ¥ø˜«5wïຨ·¯½¥-)ÖVhhªê ®¸§–˜ÿÀÿ¹ÿS­æ¿÷c¹)ÛSøú;òÈ#—^{íµï=î¸ã>Xiñ?44to|"ìºì_¡ÄïS*°P{ÛGw„­£ÛÃÂÖùQkë†ÔØT|m W`Š"½Pæóf”{Ö&gú÷þøè*ÿ/}éK»è¢‹þ¡’!ÿ{»é¦›þvݺuýá±³ÿ{ï³i?ÔŽ‘O8¨óLu©ØG ˜QqŸ õ?ë?Ýc¥n{Îú§Cþç½ë]ïú½ç>÷¹_˜iñßßßÿ³·½ím_ »Îþ‡I~‡©Bˆ"P÷E> àˆîC42Uupä¡’5(³pŸlˆýl‚„ÜÅþl þ‰Å:â¾+™ç¿üSŸúÔU'žxâßçóùžîñüàïI>…]—ý›ìwœªø/Þ7¨‹{ˆzûPEéâtî' †"¾0Gÿo9—»’¥ó»kíŽW¼âO¸à‚ ®JÎú6› J.û÷¥«¯¾úîËþMÜ¿{ ¡ôÕ@½€¸G¬h_V\ã ]ëfëЮƒB>—vû†Æ‡Â#Ã5t†å“Y¨£…1;h„²~º"¿Ô×ZvßÚ“‚¿û=ïyÏK;ì°7ær¹ŽÙlTrÙ¿Ïþóv]ö¯0Eñÿ¸‚â}PŸ`àþè·ñ°îƒÃÛ¥±©Ê±³ôÒ …99!D£H/ÀÜÿ³=ë?ñ~ñ¬ÿù矿ÿK^ò’+,XðäjlX²èß'¾üå/§éÑ …}¨¤øOï €ºØ8²9ú+¤ÓTåXêŠ{JÉÝ÷iäÌ÷Ò-CŠõª%ÁÕ*üË)òKþé›ZºÐ_ç›ßüæóN;í´¿mmm]ZÝpÕUW}4”>û&¹_r{÷êæ®k£Þ¾#ºÕÈTéXŠ;X+ȼ¼ QUüOµ˜ßT_ß³Ð_çªU«ìcû›'=éI«VñŸºõÖ[?xÇwl _øo²@b²Ï÷Ùf#€º¹}àîpÊü£Ý¾cç©‘™µ¶\[8¸+î+¬¸WCO#"‘«x±ëfê±ç42Ð(…ÿd…s%gý;^þò—Ÿxá…^‘Ìû?ªš¹sçÎÛ“Ëþ]v]ö¯œ3þ{¾÷v@ÝݱóoiÛâ°²}yxhøÍŒ5ï°Ðù=w ¦5Z-†A±Šy‘K ¢"¾0ƒï)÷k³™ë?Õýô–¾‰µ%ÿ¼w¿ûÝ|øá‡¿a¶ ýMæÇ?þñ߆ÇÎþ‡ ÿ‰[TÓq=G…‡6 ˜¹ØG’¤klݦ¡§1^1Ÿ$oÓ³ðŸ.Èï¾u>ûÙÏ>ä…/|áûz{{O«ÅoÙ²å¿?ðü8ì:û?ÛÂÿQÞ}ºY?ôpèë=ùyñóŽ ßÚü}ÍÌ€ž¸€»ý/Kz‰¼Žˆ·¯=âÑ À”…z¡ŒÇfZøÏ¶øŸn¸ÿž!ÿ]—_~ùóŽ?þø·åóù5ÚWc_ÿú×?ö]øoâ6•ó¸˜;éœÖ;wÞNê=6Þ ç( Í,zF¹èG˜ÿ_fÏ/òKäµ·´kdÈV¡?ÝógòT«ð/Uôïù<¿»nn?ýôÓW\rÉ%ï\ºté3k¹zè¡/}æ3Ÿ¹%ýs0á÷,”ØþB¹í"êêÎd!À˜€tñ¶t„C:Ò*µ_ÇÊäR™ ¢ÞFW(Ϩ Ò²¾œb²¢ÿqgý/½ôÒ žøÄ'¾3Yáy-7p|||àºë®»&ì:û?^b[g| EPW±¯žÁ=©÷¸ðí?ÑØTìøž££ßÆ»å qÈr_˜á÷MõØlÎúOöùžËûÏú¿ò•¯|˲eËžê°:ËÚµk?ó½ï}ï°ëìÿd«ýÏŠ¨«[úïˆ~ŸØ{¢€‰ù2™»z.…pe‰}@GNŠþªþ“öSûÓÝO ÿ=Cþ»ÞúÖ·^xÊ)§¼£Ögý÷ÙüÁ~ð韽ŠÿB™ÁCYûXÔÕº¡Ãæ‘­aqÛBEìÓSIFôõ6Þ7ø@ÒØe+ŒF½}-²[ø—TRø—*ø+ ö>ëßqÚi§¥gýß¼|ùòºœõßãæ›oþè]wݵ5”žû?“ý½O@ êîæþÛÃY O‹vûÒyÜ«:V„“«@¹é:0ê`,•…@Õ Æ£Þ¾yùn qøåžíŸôõe• ý/g‘¿½Ïúwï>ëÿözõßc``àþ÷½ï}ׇÇÎþ×D‹ã¨·›úo~Oé=ACSÙ13?þcFPI÷4DñÞÿßÄb¼Ô×§+øgzK‹þâ"ÉYÿ5×^{í•Éœÿkê]ü§~úÓŸ^½mÛ¶°ïÙÿR·™r þ~ÛpÆ‚S—7þ—Ʀl'÷ý6Þ¶óN -@Ü¡Ba_Ÿ*0¨æ¥ýöÜò{Šÿ·½ímO?ùä“/›‹Â?µ}ûöß\qÅßJîŽTi_—$êîöäJÃã#Ée Ú¢ÝÆS矺ó]açØ€gZ]É|è“zâÒ×üÝ÷hì2D¾@½/·èÜ{‘ºB—ûÿÎd¥ÿéVùÏï¾uœzê©+/¹ä’7%sýŸ7‡û»ðíoûCaßËþM¶/\hÖŽíHÜŽë9*Úml˵…S{O ÿ½õ48Ó:mÁÉQb©ô5ûÊöÕ{x8/?O#C\A¡ÂçWòœ™,öWêÌZø§—!é¼ôÒKŸ‘Ìõ[[[Ûò¹Üy6løïüã7†]sÿg³ŸËjksâ¦þÛ¢ßÆß‰x¡Cªë¬ñ+¿é»ECW`ÇX_ÔÛ7¿µG#Csü•|=WáÏžjž˜¢¸o)ñyË^…÷Ygµÿ§>õ©«Ï8ãŒ«çºøýÜç>÷á°ëì¡Ä>˜­}‚#€9+~Ås¢ÞÆt€Ö\krÖsTƒSRk.NOFÄî×ý7kì ôE,n[¤‘!AAaBÑ^(3P˜épÿ0IðèYÿË/¿üyÇ{ì[’¿!.»³nݺÿüêW¿zWxlá¿ÉöA9gö “|^ØëñGï €9ñ«¾›Š‹\åsùh·±'âš®ð?ÛnÔà”tRïqÅc%fãÉ%í²°øg5ííZÌWò¼É>ŸîûË)ü§*úÃîÂ?½¥óë:_ð‚ýœç<çí½½½ 3änlllàŸøÄµaß¹ÿå*LSü—ü>0'úÇvW?fÞ‘QoçKž"`Jç.:;úm¼s`mñ5O@ä#–´  ÁŠûRÅw©âºÇJÝŸ®èŸê÷)w¾~wñßqÈ!‡,zýë_ÿkÖ¬yI.—k¨Åvî¸ãŽùÙÏ~öpØ÷ì%gý§ &%æÌÛ}ð¤O ½É\×£}œÇéhéO^xzôÛiþåúÆâ.z™^ P0  LuFºû“M˜iQÎpÿ}ùK ÿ§$óüßÖÑÑq`£íØááámúЇþ5ìºì_¹Å~ašÇ å|E9óó¿Š~Ó«çœs>ÖˆÅꦛnºníÚµ[Âcgÿ+Y8±0Mñ_jþ¿5€¹uKÿíÅK]Å^=}ÉSÃ7|]ƒó8ç->'úmLÁüåŽßjìJ€ÈG¤Vu¬÷®ÓØÐœEaš¯Urö¦ þíSü'Å~÷Ûßþöß?æ˜c^—Ïç4êÎ|äÊ+¯üBxüÙÿ\‰â>”(ôÃ4AÀ¤ß/æ°0+.xf2L>fGvŽšwx¸µÿΣ–·/ §ôžýv¦ÃÿLJ4x…b¿ @1h_¡¡¡1‹û™þ“ÿ•¬ü_iá¿g¸:¯¿ãe/{Ù.¸à‚wtwwßè;øÆoüä¶mÛÒ”·œ…ÿJÓ(É`Neehðï.–ÆfÏYöôÐ’‹ÿÏð϶ÿRcÏ@ìWH­îX©¡¡± þé öRC÷'>6ÃüK ÷O ÿ®#6ŒlÒèÿ{Ö’ó3±­7fä5^õ #Vw Tôç¦)öËYѿԀr~—rÎüï=׿ó²Ë.»èÄO|S{{{Ó¤‰?üá?>::š‹/cŸNu–¿Ô× ÓFs*ÿ¹nh}ôÛٚˇç.†§è‚dîzuˆØ=<¼!Ü5pŸt}”tý„˜Ô¹¿††Æ raêùù¡D±BéÅs¡ò3ÿé-=qÝ‘Üæ½èE/:áºë®ûä©§žú÷ÍTüoݺõ–«¯¾úûÉÝÑr õ B€ʼ@ú˜˜s?Þú³Llçs–^æ·öjðÌ÷¨ráùË/ÊĶþhëO“ÞGA£Ï@ºß6ŽlŽzWv,½ù UôW; ˜ÉÐÿIW÷O÷[‘÷Á þ?{çG}¦ÿ×ê½[ÕêrÅ4 ¤¹”#—Â%!„;ÒŽ$—ÜýÓ.—äH¹¦0¦cŒ1Æ`Ó1¶%Ù–mõÞ¥Õêÿ{FŒ¼Zm™í³3ÏןùlÑîÎÎoGò>oyÞË×çååÅ݈¥7Þª.&d~ï¿W_÷ž  Bˆ ØÚ¿ÝÇ™¡f^ÿsÉÇøÛœ Ζê´E¶8Öçû^â]Ö V—^ÍšØ þ@Kõ©¦Ï[Ò;[šr÷Ϲîºë>÷óŸÿü™ªªª«,XwÏ»ºv¨Ñ„ÈxMIàÙo‚?òÿÙÇ3@‰9o5JÏdŸ-Žõ²…ÔÜ߉=éßçK?e‹cp ÊÎá=üÐCÀž! µü  ‰­øbÞ›¸wø¤øOð üåx¹Ö5×\sÎwÞ¹nåÊ•?MJJ*ˆÓµv®_¿þ6™Éþ{ øþ¾Ä¿À9ûa€sPêúBÿ˶8Ö”„dù\é'ù¡Û”^(•iå¶8Ömý;djzŠzX½¬Ì\Êšsø „º%ÊñrÿÌ|à *cþ'uyw<¸ûû¢¥¥åù|p—xîý7"ü½=ÎhÀœû „˜D,l·Í±~°è"Yž¹˜ºÍÈHL—Ï—}Ê6ÇûtÏf~è!Ò9aý €S³OÔZ!¦  ,ߎýF³þºðGYFIIIáõ×_ÍÕW_ýDQQÑDâû„Ó霺ï¾ûîùcÿþTøºBˆyxeàMÍõÚÿ».oUý«6€Ø‡«Ê?§FAÚâXáþÿÆà.~è!Ò:Þnùc„1*Û‰™Ð7bÚg¤·ßˆð÷ ÐúüÕ–õÃþðcùË_6,^¼ø;‰‰Ê8É477?µiÓ¦f9^úï+KoÄÌOÄw€ß*!¦`rzR¶¼f›ã…ñÕå%—ñƒ· 'f-—,¼Ä6ÇûtϺÿ‡cm¶8Î3sNå‡MHì‚Þn{ „RþïšõŸíó¿êª«Þ½fÍšµgœqÆúY¦ONeÿÇUÃßÄ{￯콯*ßž‚ ³× „˜†=[lu¼ŸU^õé5üà-NjBŠVña§2ç Ý›ùÁ‡# *ìH¹¤ð|~Ø„˜#àM¸‹_òï*þõŒ¿Öçî¹çÖÞzë­¿úèG?º6++k•Õ¶©©éÑ×^{­Íƒø÷gÜç-àÍàoÚÇ6/À!Ä4lxUú¶9^þ¸î;Zo8±.ߨü²T¥UØæxßÚ%GÆñƒãÎq5!¥×òǹ(µ\–Ñ…XŠÙÿPKý]ûüÓ—,YRò‡?üáÚo}ë[O-\¸ð­¨IÇÈ7Þ¸Vfzÿî"<áhÿ¿xØÇœë BÌóÇR9†?Û»ÍVÇ\‘Z*ß®ú7~ø®ÿïW›x¤k?ø0rtÜmS#R !QþFzû>ƽÄß½Ç_þ©©©¹ÿû¿ÿ{Å/ù˧kkk¿¦úü³¬ºÀ»vízXUÀÉÕ!þ{õ½ ÿ`úÿ}2@1O÷?ÿ½òñâñ÷hïøºÊþÛ Tðlé}‘~94vÄÇyQþÙR¶ˆ8!±xº?Ð>ÿDá¯ü}÷»ßýÀ]wÝõ؉'žø“¤¤¤"+/æäääÐ 7ܰN|gÿ½ w#SŒT°€ìÞ+-cö+þ·E_óòÞÃÀ"%ÈOë¿§õÿÛ‰'»ŸÕ =Iøh=l‹ãLX WW\Á‘€„ÄVøkê— ó³þšÁß7¾ñsaðwÎ9çÜžž^o‡E}óÍ78|ø0ú·|eÿ ÿio¯+ž„¿~›BˆéØØ»ÅvÇŒ/½ÿYó Í-žÄ7Ùª¢ñ—‹(%) muÜ0«{”åÿaçàX‹mŽõÌÜUòÅl ÄDÂ_Äxù¿žõGÆ?ó3ŸùÌ©wÜqÇ _|ñÊàï»,ìøøxߟþô§õ2?ûo¤_ß_@Ä{5€§×ð„ól:B ¦€?­ûž4¤s&v¼‚Œ?2ÿ5i•¶;öm};lÓ¯MìR ó•ŠÏË HH´ÁT¸ôÓœý/½ôÒ†›o¾ùW—_~ùº‚‚‚˜˜à$''KfffLT¹þ¯ëè耣õ”^öˆË¿·×sß×¼K!¦£U¾zuð-[{vR–üfÉËŠÌ¥<⌴„TùYýÙ¶Šã¾Ž‡yDø*ôLöÙæx“$© ÚÊÅçòÃ'$6Â_ƹŸ«Á_ÆòåËË”³ÿw¯¹æšÇKJJþaÁ‚‰±þUUU¢ö/ÃÃÃQ_Ô±±±î?þñŠ÷ì(â_Ä÷(A÷ÏÂ!Ä”¬ï|¶Ǟ•˜)¿^ü#95ûDžqö™­²égÖ8²_ÞÚÍ!bë»ÏVÇ›¤tZ¢~¦Å)E<‰\À“Ø÷•ñw5øCÆ?£²²ráo~ó›¯]wÝu”³ÿ—¢o~á_]]-§vD¸9óÔíÛ·¯íëë’ãÙÿHˆ_•îO—Ú‡G!¦ãïý/KÇD—m¿ü!›üsõå÷ºƒçú^à ab&ÊÏþKsý·+kÛ×óDˆpà=¹ï²Ýqã˜OÉ^)Ow?'Oö<+{”Il¼üýNV-] ¦.HQí])êz†v™ª~65í­}Ûyb3‹qýN·çh™ÿ¬oûÛ_¶lÙ—”É—5ÿòòr©¨¨ééiÙ½{·(“iWÙÿ'eÆøÏéçáÁ–ýûsÿ7â30Í!Ä”8§òp×Sreùgl»ø¢øÃºoÉšö‡dõÑ¿ÙÒÁì¬ÌZ&?®ýŽ$çÙv ŽŒ·2Haö ï·í±§'¤ÉG^ªmÇ”ÇÄ[C{d×p“4© HÇd·ôÙ³Îä„$íï,Äyò‚dm_é‰é’¢®g¨Ë4uÞ,™êçºÏV¢âÞóó’Ôó2 ýÎ0@LX ÆÌÿÜ„Æ×¿þõ¬\¹òK©©©e±xójŒ &ú±%&&jYÿ;wÊèèhÌô…^¸WFå¸ó NÿþÆý‰øŸ /î?g€bZïÚ(W”}Jû‚eßÿ¡ȧK>&•©rÝ¡ßËÈÔ(O “ð‘¢Käk•_Òz–íÌ­÷i;9ìÖàòÔRm»´ðüÙû0v²k¢G§†Ä¡2ë£Îq•aŸÒ~–¢D{Fbš›Oծǒ̄t~˜ÄìAw៨ ý2¾öµ¯}褓Nú‚þå±þÈúã:]»vÉädìFÐ ýýï¿QfzÿC1ø æ¶x xbšBˆ©éSæWÏön“K ηýZœw†¬ÎøÖðæÐ.ž1Fߨü²\˜¶í×ÙM½[yRD"k¼(6É6SƒqYj‰”IIܼg#U„ÄPü'¸<&)???ý«_ýêO9å”+b%ü‘å/++å70+üAWW—455ÉÔÔÔ\•;=£ƒ•¡Ç×KOOkµÀ–-[îQïa\<;ÿ­ ¬ì?¨ì?„ÓóPç“ ¼CiJ±\¿ä'r¯ê·¾õØ-óE¢ Æ“}§úߤ0¹€‹¡¸«mÝl¶•D–7ßfÀ"`\(*‡P±@ˆ‰®Nÿ‰Jh§^{íµï;ýôÓ¯T‚ÙTÂ;vL80+öuœN§Œk"ÞA«€€2*”žžž°úûûþõ¯Ý"Þ³ÿF‚ÁVˆ—à€'hH‰`úôºúâ{Jö \ ™i ¸¼ä2Íë-7Ë+ƒorQ¢@^R®\Yñù@á…Úg@D‘ =›¹QâÍ¡·åCEïãBXx 8¹Ä ]økÚ0-- Âÿý«V­ú¬º“¨£/áÁ¿oß>ikk›÷<Tdddx|Í¥K—j?knnÛ{ݼyó—ì¿3ÌA€°gÿ „Äw¶ÝÇ€Õi‹äWjìÜ jZ­\”€qdÿ°ðýò/e—kýÃä87½“½ÿQPbà0 ˜õ €Ú)ÊÜï‚3Ï<óó™™™±xSº«¿k¿+÷púïíí÷3¸ÿã9YYYó~–’’"Ë—/u\Úˆ@÷ª`Aöÿ–[n î¤ñíì¿'ñO@BH|ñÚà[²S9?ÃqÌ•«²O’õªUâÞŽõA;b÷oF äܼwËÊ?-Ui\7ÞÚ­ŸHôèTŽ÷ô°P@M $† ë7Ìd•O½æšk.z×»Þõ©X ÝÕßpúûí·1no®úUb¾½½]rrr´¿¥a{ß›6mBïÿ˜ÌïýD @ <1ïq BâTü¢á\ ŸôS%U™êKå‘® ÚØÀ‚ûF´ AÎÏ{¯|¶ìR“VÉñøMbZþª²ÿ$úlïUˆ aÐ@H,¿:äææ&_yå•窌ÿ'•p.•ð_´h‘&þ¼>nppPsúŸ˜˜˜s?n=zT  ËïŽY(‹/ž}m¼N¸zÿUÅAóm·Ýö¢ûËìÿ< „Ä;^×ü–e.æbx ¤Ê'Š?¢ÆÓ]ª¦'lUUOq|˜A²T6îâ‚óäcÅPÖr.ˆžîyNÍaoäBÄ€^‘dÀ°¥ˆÄŠ”édùÞ÷¾w™2÷{¿rõÏÉ{Pb¢}þÞ2þ:púollÔÌýܸö3˜úyz ª««çLèè_»¤Êþûêý1iöŸBH\qgÛýò³úÿäBø ¤Èû•Y¶Æ‘ýò°jØÜûw5{Œ‹ãÆŠÌ%òᢋå‚ü³´ ñÍÈÔ¨Ütô..DŒxcp—ö0{ÿð3$Q?çœéròð29mäI=;åÓ1ù~’šªeüKJJü àÍé÷#“_WW7¯r@wú/-[Ô€×èîîËq¨)ûTï?²ÿfïý÷ `€7¼ØÿŠìVUËY`˜¥õjlÝ5òu5·þ¥WUeÀ6mÇã¶]“ŵrž*ó?/ÿ½R‘ZÊ“$ЊÓ=ÙË…ˆýùªšüqvÞ™\Œ8‡$ZäNe˪¡rÒè2IšNŒÉ{Ð…?D¹¯RW±¾ÿ~imms¿ÃáÐñW__?ïy*,Y²Dòóç6@üãùá@eÿת =û©~ÿpgÿ…BHÜÞã?¹Uþ°ôgÅ辪*¦vØÆ”øß>ðš¼2ð†¼¬Z+¬>A™ý“³Vhf‰gåAÑ$Í£‡e]Çc\ˆƒj,H`€D–…Žy×ÐJY6ª²ä’“÷¡ŽQ~ÅÅÅsJñ}áÍéhhH  zÀ=»\þ=®òõ¾ö©Þÿ—dnï¿ø÷ÁT øýAeÿ „Äè=FûÂü³¹A’¦± GÇÛ´`ÀÎá=šÏœÆãú‹µÊ¬¡òaEæRMôŸµD’$óƒŒûûõá?‹cÚÁň1Ûúwhí<é i\Œ8&-$BTL”ÈéC'JÝxeÌ’%áÈø/\¸Ð°ðãããšÙÄþ¬rUÕpîÇø¾šš)((ð¸¿eË–i•ž€Y Ù–cÛ¸qã½xIñÜû¬à×Ã’ýg€—`þøY¹ghYm†/ *#^±°T>ª¦€AÇìÙ+ÃûäàX‹´Œ“–ñ£ªm`ÂTï_lJRÊ¢´2©N[$K”è_šÑ •iå¬ 3v>®µß؃öŒ`d4¾Éd€„%÷Æ«å]Ã+µ@ÌÎk%Ä«ªª¤¨¨(àçkcþÐA5ÀÁƒe``@sóÏÎΞ÷¼¼¼ÔHA-ãï);oPXkeÿü:###ZÉ?Üÿ‘ÝG;;h€ ¿*T„ƒ 6Éþ‡³÷?ìÙ!qË=íÊ‹.ÒD!‰<äe)ÅÚæ‹ ç¤ M kÛ˜*SFÕÀÄ;A)U>>:53‰ EUo¤¼SÁ‘ ^_†Q¦Ë,µeð˱)@à纃Ð|#ˆy€¡g» È¡†Ä'ô !å̇U›Ûð I›ŽÝdß1j/'''è×hkk“}ûöÍÉÐðïСC’––¦‰ÿää¹Á~~´`Œ ?µ‰¡‚ìÿwÞé-ûï+j;€»¸)ûÏ!$n ùó‘Ûäµ×r1L2ò yRœÇŰkÚ’7‡vq!L<žìÞ$W”ý#Na †’É"MôÇÒØâ™~”úgeeý:ü(ïGo¿ë}¸ÝÞÞ®àôï^Ú)pú7Zm.ó¿§žzjËþ"øEŒgÿ§ý {1ýg€×À FvçF /{GšåÖÖ5\“òX×Fùlé'$qA"#.¬ F•²h†~g $“±ëï‡ðGÉ=Jý=•ãÊú÷ìÙ£eúu&''µ’j~÷Ò~8ý£"Àhà×}KOOÏÞ»îºëe™qþDà‡3û/†ì?„¸çw-7ÉÉÙ'H^R.ƒ0—ùŸ¼ž®ÿ&¦Kùo<×÷½â” V?¤L'ËÊ‘ÅZÎTVÌÞ2î(µ¯¨¨ðê²pä‡ÙŸ«Ó?Êô8 dÀè@w`0ˆ1âßáýÿ±gžyæ>u1.sGÿ…kÜ_T³ÿ Bâž>Ç€üß¡äê¿ËÅ $LüöðrX>sswÛrAþYœz‡dÒ€x!ß‘#«FNFk&±¥÷þÈø»÷à‹»Ó¿>⯥¥E»Ž¶‚ââù^CFœþ=ŽòÕû@9ÿïð!þÃ!ú£–ýÇÏ „Ä=Ûú·Ë¦Þ­Ì„èxLžîyŽ =$;^S;Vq1â w¹V=Q.',•Åc51 ê!îgüܾèëë“]»vÍ:ý£  ¹¹Y›€*¸ùçççÏ{žQ§wdèïïù}oÞ¼yÌdÿuþ7úX‘(fÿ„Kðû–ÕrrÖ N $v 7Ê GïàBÄw´Þ'§«‘¬ˆ/RÕ”$åßà˜žâbؘ gºVæáŸ;•Ó÷‚¾þòòr)--Õy8qwúÓúýáΟ””$ ûúÑ à©ÀÈþ»N†–Ûn»íïâÙùß]äkþÕì?„Ë0à”ø•\¿ä'Ú89BH`t«žòø5ûþãŒ]ÃM²¥ïE9/ï=\Œxª ÿwû7ˆþ# JŒÅÖȽõ(ó_¸paÀYv#>|X駃¬<úýQ €j8úcÜŸ+:ýÏS¹Jø‡£üëÖ­¨÷éîüoDè›6ûÏ!Är_„ÿtäVùfåU\ B¦ßÛ÷3ÍXŽÄ7½SÎÊ=]e”ùµ.žÈLH—aÀ.ÀÔãûNY!E“ù1?(·Gv=772&Ê(ñoll”®®®ÙûŽ;¦mzàañâÅZ€+ð€Ù_(#dÐ}‚E™¶þõ¯Ý"3£ÿü úP²ÿžÄ¾7röŸBˆåx¸ó)Y–Ñ ï/¼‹Aˆ¦Õ¿Ÿ7ÿNöäbÄ)­ãíÊ»áqùTÉG¹ñHÌä"Ø€‚©\9á2ÿ4gjLß 2ü±‡ŒvväZàæ¿{÷îÙ|dûQò¯JêµÛ999R__?Ïc ##Cÿ¡N@ËA¨¼øâ‹ª÷=&Þ{ÿžì¿ø øöF³ÿsÇ!Ärü¶åF©M¯’¥*@ñÍŸUÕ Œ4I|skë9;ï )O-åbÄ h]§•™_µœ2²\*&Jbÿ~”ÐFo¸Fùù}ýpúÇ%ÑÄ¿ž‘/**’êêêyí¨DX¶lYÈÆƒ>Àp0Ô{îTÙÿge~ï°Žÿ±Îþ „K3áœÔüþ¼ôRœÇ!Ä ··®•uÊõŸÄ?ãÎq¹^?ÙðÆ ™œ`9 ¹Úø¾•#K”Á_ZÌßîès?÷RûH€ ?œþ!ÂÊÿÑÿ¯›ñá}`s£ÿPŒDûA(ìØ±c½ `ŒÈÌè¿@ÌÿLŸýg€bY:&ºä?öýD®_üÉNÊâ‚âÚeno½— a!^xCê|B>¶ðƒ\Œ8€Ö IeûëÆ«´ÿêñrS¼'ô×ChCX‡ÛÑß—ðnjjÒÄ7ÿ‘#G¤½½}öçÈúÃhÐPœþ=~ÿ ÑüOM(èùË_þ²A,šýg€bi0#û?÷ÿL~½øÇ’–Ê!äžì~V~×r‚üåÈmZûÓŠÌ%\ ³XÏèNþËÇê%ÙiI…2zô÷ëž,®Nÿ‡C+ùœ1¸DÙ}w³AÜñh Ø'ZBáµ×^{TâE¦$0ó¿¸Èþ3@±<˜ ðƒ¿Ÿ×ÿ'ÇòŽøÿÕ¡?iæÄz`®üÏþVµ@]'¹I9\“Å€¸&~KÆj´Þþ…“¦xOÒÑþÈüGdû÷îÝ;›u‡øÞ·oŸLLLh·ÑÏq~îï NÿK—.ÕÌÉkÅA0(Ÿ‚Õûÿ¤Ì8ÿOIèŽÿ¡dÿ݃H!FAYì/þQþ_í7ÙK(þ)þ-¦`¬ãõK~Âê'“΀ø@ý¹¬ž(—£ Jü×j%ÿf šÆ~ž@¦ýþºÓww·{ˆ8ý»÷ûë"¿®®n^p¢¤¤D»?Nÿžµü_Ó“­­­ýÄ¿¥²ÿ BlÇßûwÈÿÛÿsùIýwÕ—¯4.±4Îi§üþÈjÍñŸØ“ú_–5ÿR~\û­ Š˜Ž4ùûf+ñÑpÎG™´ûû=ûÆÆF-ÓîÞïàE·w‘n§wP‘à„È]½zõ#2“ýw(úã*ûÏ!Ä–¼2ø¦\ÛôC¹®áû4É"–eÔ9¦•€#èEìÍKý¯Ê×ÿK~Zÿ=)N)ₘ&À €XR8™§eúWŽ,– §¹>‹””)++Ó6÷2úX±~ÍÍÍÚõžžíºÞïЖ€Í=€ žÆÿ…×öƒ`ؽ{÷ÓÊ¿ }ÜŸ©³ÿ BlKãÈ~ùwøyÃIiJ1„Xж‰ùþþë´Q˜„€}£ÍrMã÷ä¿ëþƒ#M`@´A/ÿòÑz9A‰þ‚©\Ó½¿¬¬,MôǬ¿žšT"eþª<Þc¿?²ýUUUóD~¤œþÝù_gggÐÏWÕ wÜqÇz9žý¤ü?î²ÿ BlÍÁ±¹zÏÈj¯•Ó²Oâ‚KðæÐ.ùñ_KŸ£Ÿ‹AæÐ=Ù+ßhú¾|¶ôò9µÑ5¶d° *`tßâ±j-Û_1^bºi@úèëG™¤ÅrâXöìÙ£eü=õûë~øÌYó´4Y±b…viúúú4?‚`Qc 7© Dôì¸zþM™ýg€b{”)àw÷ý|©üŸåò’Ë8&Ä-p÷°ãq¹áèíÚ,xB<~¡WçÆí­÷Ê«ªê»Õ_•òÔR.JŒÈL`@¤@Õx¹rðo†ñjI˜6_° eþÈôCøãºÙ×Ìþ†‡‡=öû#ÿx±jŸÈ˜{gggkcþ¢Õº€Ê„`QÕŽ»îºë!®žý7"úM—ýg€BdÆ( éûFšå;Õ×pn6‰;F¦FäW‡þ,Ïõ½ÀÅ †xkh·üË®oÈ?,¼T¾¨ 4E>l+‰JôW+Ñ¿Tù5¨ŒÊ´9'_˜±Ì߈þ;wj‚¿··Wë÷G©½2ûç縀 ‚‘rúwæA?ÿÀϽþúëÇdÆù?œæ¦Íþ3@!.<Û»M•ï×þ»T§-₸rÿ{ð÷Zß?!à˜vȺŽÇd[ßø´\Tp« ¢¦2$-HdÅN((ÉS1Y"KFkdÙX½2ó3g +11Q둇ðGÀÌÀéeÿ(ÿÇh=˜ÿ¹0$)i®ŒŒ´Ó¿'ðþ\A4¦î¹çže¦÷Ê€˜·DöŸBqcÿèAùÊžoËeÿÄ–bjPÊ}WÛ:¹³í>­Š…`Aðèç'Sçþö—ÿþí‹™‰™ÒïàBHÉd‘¬©WÙþ:Étš×K!==]JKK¥¤¤Ä4nþ¾8vì²âšøGÖÙWòòò´ž× ´œþ=xéè>ð}èС¿¿ôÒK-2ÓûïMì[.ûÏ!„x`Â9©µìxMþCõÈrJ1#ß?p6Þpqhìˆü¤ùÿ¤üX©|¨è}òᢋ%;1‹ A2TëE¿0ऊ' µò~l9Sæ=/!ŽaЇlaaaÔÊáCYtPö~ôý»‚ †{†Upúw7Œ0& Áüoú¾ûî['Ç{ÿžñ"áËþO‡"ò „ x}ðm¹r÷µruÅÚ—afĈ™¸¸à<HD86Þ¦AQ€ó G†ªtŽªu= ªÌPiv`ô°4«1­lÝñIádž,Q‚¹*ïÏwä˜ú½ê¦~ååå’š?^BȤ£ä¥ÿCCCšø‡ã¿+8&l®À`ùòåZ•C,@ù°>|ø¥-[¶4Ëqçÿp˜ÿyôf0@!addjT~søÍ\í«‹¾Hob.Ì?[žê~VUª¼ÎÅ ûû·¾óIm«L+—÷åŸ+gç)µéU\ ¤ÿ€÷®ÆÎŽ;'¸8¤L‰£HêÆ*eÅh½äMå˜þ-»fûÍjêç W§ÿÎÎNã9=õ¨^¨­­Õƺm§w`þ×ßô¨Ûé‡zÙÿ ñý¥ü߈ØzïÿìçÊ¿4Qaûݯ/p»î¾%x¸ô´%z¸Ä†ßؼ ^ùÇgøñbŒDeÖtÙÂ÷Ë¿”]®ú6éÞLbz·¿¸ë›2æçb¨Q¦Ú¢Þ›wºœ‘³JNÌZnÛÉ)£Î192Öª‰{dóõÌ~÷dO’Eÿ¢ÉR•é¯Ñ¶Ì)óÿÿªgûÑß« x¨@ôCü#£¿¶¶¶¹ßy”q!ýÝM èÀý± v_úI ø€$,Hà˜Š.ý¸Ürìn.‰([ÇßBlp±_šÑ 'gŸ +3—É’Œz)Hγ̱NNOª–ˆvi;¦Jø[å6u—ú¡‰~ݽéxm\ˆþxìí÷F__ŸìÚµKë÷‡Ùn»‚Ì>Æü¹7ÐP]]ÓcG˪‚eÆ ÉÜì Yþ`&xî1Éþkç2ÿEço†ûY@Hœ/½_©øœœ’½’‹AbF¹}y÷·47BÌ@Qr¨Ï¨ÑÚ¦*SËU A…i+úTÉ~Ïd¯tLti}ú3Bÿ˜–ÝoŸèTß¾§ù¡†$õõ³b¼D+ï7»{¿+èç‡Ã}¼õö{™~ôù£Œ~ïÞ½Ú¥+ýÈð£ÊÁ5øQWW§Æˆ¼ï`P>W\qÅwe&ûA×ì¿§¬¿å²ÿ3¿‹„B‚¢qdŸ\»÷G²2k™|ºäcòžÜwqQHô¿T/H’k«®–o6ý€B…˜‚.•ïêï‘¿÷ï8. Ô¿…)…RœR$ÅÉE³× ’ò$7)WmÙjËÑ.Ñn*¨Øž‘^G¿&îñžºõË µ9z¥s¢[ý¬OËò“È<$•ãešsÃX•¤L§ÄÅûFy;úÞ‘íÇè;«€5þNëŸ×Çý¹’““# sÊûcéôï‰PÌÿ6oÞ¬gÿ§Ä˜ù_0®ÿîß“pYöŸB ;‡öÈÿú_HÌ@öû /'º7q1ˆ)Ap vlþHMH‘µe%fjUÉ ’µv«Ì„t¯;453®lLõäCôãö8}1bFº3MjÇiýüµ‹$a:~Zå222´,7¶XÜE”Í755iÙsOf ¨¨h^y¬þÝ•àÆfªç¹ãŽ;^’™Ì¿/±ì8@‘àÇ*øC 0@!a@Œ]^r™¼;÷4Ž$Qã+Ÿ—ú_ÖÊ™ ‰gà–mÐ1ÄňrYR?^¥zúk¥ÂQ"ñTŒ³;”øCô#n5&''µ~gÿŽŽù£'afXQQ1GüÃüâßLw£Â@x饗Vˆ ºfÿb|ôŸSŒ—òÉèÇ$ûÏ!„D€·†vk[Yj‰|¸èbù`áEZi+!‘$G•N¥â ùÅ¡?p1!ÁíòÉb©­”ú‰*)œŒ¿2y\”øÃÍ?ÞÆ÷eddDvîÜ©eÎ÷ïß?otUU•qí04Óº„bþ§Ž¿çæ›oÞ,áËþK?ó'죒ýg€B"H«r޾éè]rÛ±{µ‘YŸ,þˆ¬È\Â…!ã’ÂódCÏfymð-.!$¬èýüÈôÃÈ/ËãpQÒ®gûãu|ŸQàì¿{÷nmÜLÿpâ¾¾¾~^o¿œþ=ñïp8‚zî믿þØÐÐz…(ùÇš™T1¨ ~pß»víÚ ‚ýâÙù?Ðò‘8Ïþ3@!1Â9íœõ ø“ ¼7÷t9/ÿ½ò®ì“ !ó™’˳=[Õ,óV.!Ä'iÎT©šPeßãåÚ¨¾ g|–Æ#ƒ ?¸Ù£ÌßJ.þ†¾W(¡¿wï^-SÞÚÚ*ÇŽ›÷˜ììlmÌ¿0ûËÌÌ4í±›ýW¦Êùÿ™Ÿý& œ/€?aÕì?„bàvýlï6mè+T`‚Ài*°$£ž D&%!Y®­úWùÖÞicÒ!ĕܩl©WYþ:ÕÏ_9Q—¥ý:®ýÈö£Çߎ 7Nÿ½½½ràÀ­ÿßd÷QâïZ aF§">hó?Õþð\cc#žìߥþÁøˆÄaöŸB1®•7©Ûe)År¦ œžsЬÌZ&Ù‰Y\$bˆS²O‹”ßÄÆž-\ BlŽæÚ?¡\ûUY½Êò:â»>55uVôCÄÚ™±±1ÍéýþèûG¹¼;0=¬¬¬œs|Ð `ööˆ‚`zݺuÈþÃaJÂcøç+ Ù!Ää´NtÈCOhÀhÁ3—kÁ€³–KuÚ".ñÊ5‹¾ ;^—~ǃ›‘6­JûUY½ÖÏ_%©Î”¸>d©u3?”ú›Í¥>`¬œþq‰òw³?€1X3WÌêô¶¶ ž§ü^ܶmÛA™ÉþÍú:P¼~OÂÝÙ!$Þj´ 6ŒzEÉrRÖ Õ*P'õé5RŸQ£¦ är¡ˆF®š4ñ¥ò–ß¾‹AˆÅÑ üR3¶HjÕV>Y¬Ýï¢&~Èö£„¢ÿ8]]]ÒÔÔ¤•ýÃéß=KîiÌŸÙþ=8FFF‚zîã?þ Ïþ‡jþçÏÐW ÀTÙ!$Þ¿LöȦޭڦS˜œ/uéÕ3µáú¢´2I^lË5BÅуrVî¶<þ½Ožê~VÞVÓ'!Ö"y:I*ÇË´ íø"ɞʌÿcR¢b¢⟢>0øC¯GG‡æú?==W#Âäåý®ífwú÷D°Ùµ.o©@ã;gb?˜@€ˆ÷€˜gÿ „ Ò=Ù«m(ýÖAhaJ¡”«‚²”uYªµTàRÝÎIʶı:†ä¨r¾oÙ¯m;‡ö('ü'ä_-þ‘f¬h7ðÙÿ{ÕWäê=ßÇôA‰s¬dà§'z]ð#c­‹~Š7•¨„>úüáòïÍéþÿ®†ˆñàôïÎÄÄ„6Ê06nÜøÌwþ÷—õd  Hœfÿ „»|iPÿ:&º´íuy{þ†„T)HÎÓªÐB€Ö\ê÷¡”„‰i’ž®.£7&jÌ9.ÃS#225*#ÎR×!ô;'»¥}¢Sk‰Àe›Êôã1Þø}ËM²zùolY *OTîi¿ „ÄI*Ë_?%ú×X"˯ UôôCø£§ß›àe`W§ÕßîQCàCü'%%͹oÙ²eÚzÇÈþ»W6AM@h¾ûî»_•ã½ÿá,ÿ÷V ‚â#`q‘Ï!„ŸŒ+‘­û %+1S ¤'¤i— é³÷Ë;_Ø%aN°ÿ˵½³)õÿ®»`sŽÉä´C»>ä–a%ø1!´Œ“{Û–Ï–~Ü–ŸñçË>©šD „bnå¯V~ý5’8h‰ãJOOŸývwï8ý¿ýöÛ288¨™ý Í{L^^žÔÕÕÍqõÇ}K—.ÕÊÿã §Ó)íííA=Wÿ­Ç×™ßûjù¿øþq“ýg€BHÐ M k[<ñ·¶ûå¢ü³µö»*oV]%ßÛ÷Sž¼„˜Œ$%ð+&J4Áß0^-9SÖÇÈÞ#Ò~ôžë¢ŸY}ã@ô#óK˜þÏ{Œ§1¸x\ëîîn ü¡ ;n¾ùf˜"MúüÁD3ƒ¨Š|!„A¥Ã„üNµ\×ð}[ÿ9§Êyyï‘çú^àÉ@HŒqÍòWW¨/åÖÈò#Ì3?²ý0õ›§z(í·sœþe``@ëýG€;é‡MkUSS#eeeq{Üð7†;v<¬¼PZ¨gÿ–ÿ:þÏŸp7möŸB!¶cûÀk²­»m§|­òJyeð͸«Þ $ÞA–¿rB ~åÖ_3V!yS9–96Wç~˜ø¹–¡“àÐþ@Ï¿{?¼>ÒÕ:Xw8ý»Þo {lqð‡ªŒèWÙÿâ9û®^O·==^ĤÙ!„Ø’?´Ü¬&œ,i ©¶;v;~¡ürm !‘EÏòc«QÂ?eÚ:&¤šè‡ØÌÎΞ¥$4 ô÷ïß?ëòïÉé& s|„Ó¼{+;úoçÎO*cDD¦$|åÿ"Ëþ3@!Ä–`Â]ÊàÊòÏØòø/[øy¦çyÙ5ÜÄ“0‚±›åpì¯ÔDÉd‘eŽ Fr(íÇÑÍÒ~»´LMMÉîÝ»5§ÿC‡Iggç¼Çxó‡` œþ]ï‹GÐâàé˜ Wj·ŠFû9rDúúú´ €{ï;޳ººZ­¨ƒ` Ìþ"åô«€Àèè¨GÏttt¼­â¹÷?Ðòw‘/bÌýß[° ª¢žB!$ê|B.-¸@gÔÚòø¿^y¥¼6ø–Œ:Çx2[‘ëÈ’ê‰ -Ë_;±H¦ãßäN/ë׿·²þHŠo–ö{BÏž=ÒÝÝ-]]]šÛ¿»ðFÐýþøütð™.]ºT›­õV@½ÿîû2ÂæÍ›]{ÿƒÍö» ùpJÁ€¨  „Â/dÓNùÍáäÏË®³¥!`qJ‘\Qö)¹áè<ˆµy§´‚®ýVӇ̰žåw5ï³äGÇÁ…‰‰‰Y§ÿÖÖV­ÀÓg‰~|®ºÓ´Åy¤ˆ¨L~ÀÏ8ú·¿ýmû;Wñï«üßh@Äxö_<<>ꢞB!$@GöÉc]åÃEÛòø?^üay¦÷yÙ;ÒÌ“XФé$©W~ãUÊįJ2-PÚ!¨g÷qiÆù﬘‹îô£;dý‘ýwŸ#„¾kNÿµµµ~×'^âp8~ÞŽ;™šš‚c¢CB3ý d"€/ןKäÏ „B"ÉMÇî’³óΔ¼¤Û{â‚D¹¶êjù·=ßSßF¦y2¸&C¹ö׌-’%c5R£Jü§ãúx\Ëú!ú‘íG™x´Å7Kûƒ}þ»víÒLþöïßï±ßŸiCCÜ,?\þuú·€€§*¨I }7ÝtÓ&ñªÈwößÔ0@!„¼Ã cHn:z§|§ú[ÿÒŒUq‰<ÒõOwäNekcú–ŒÖZµ½ÞºàÇ–””diñmÕ@Üíáðòÿ½{÷jãþÜAÛ²üzPdž`ÆÿÅRœGzŸýÀ@Ù¹sçSjr°Ì7ÿ §ë¿/ñ#øþõ‰É_)!„žì~V.)<_NÎ:Á–Çÿ•ŠÏjº'{x2ÓS8™§²üµ–èç‡À×Å>Fô™µŸÆQ3êµr•±–¦¦&íÒ’’©¬¬œ½­{à<ˆ¥8Æ>ƒÉþ£ìÿöÛoB|;ÿ‡ÒÿoÄì/ì¿éB‘ B!sþ§ž–ß·¬–¿.ûµ$-H´Ýñg$fÈ¿.ºB~Ú|=Ob:`ÒY9^úŽè¯’¬©Œø=%¸Pö ±±çjúmñÍÒþðc»ÆÆF­Ï_eªµ O}îUUUZ¿<àôKW±l%ÇTB3úOµP<§Æ&v‹ÿÑŠ~obÞ[ .³ÿ B!h=¬F>.Ÿ(þˆ-ÿÂü³åéžçä¥þWy2Sˆþò‰bUÚ_#KÇêâÚÄeýz–åýz¿7Kû­´@ŸÿîÝ»5q‹Þôüó‡s™T‚ÄZœGcŸ˜‚ÌÛzà‘ã£ÿÂÕÿ/>n‹‡`€ø˜Bä3@!„Èm­÷ÊùùgIQr-ÿ«‹¾$¯î”qçOSÑ¿L‰þŒ8ýzYYYZ–ßìãùX1:èg‡Ó?.1Ú-î è¡óB§¨¨hŽ@¬Åy¤÷‰ ‰§)þ8räÈŽ­[·ÏÎÿÎ b@øö¦Ïþ3@!„xadjTþrä6ùAíµ¶<þŠÔRùLéÇå–c÷ðd ýžž®ev±¡Ä߈Pbi䃑Fͥלþaö‡ì¶§þvT€`Ì.uàò_QQaq}¶··kmòôÓO?¬.•ž’ð:ÿ{sÿ72þ/®²ÿ B!>x¶w›\ª ÏÈYeË㿼ä2y¦çy94v„'‰Š©œ,“å£õÚȾTgJÜJ¶õ>~Ý­?šB,Ä·ÕƒÈöÃá_ÔIss³ôôÌ7QEÆÎþúùc¬««Ó²ÿfç‘Þ'„?&#Jww÷ÞuëÖ픹½ÿ¾‚F"ÆLÿŒû¸Èþ3@!„øá-7ËÍËO””„dÛ{Ò‚$¹¶êjùfÓ4sDBÂ…îÞÂØbÉudÅÝû׳üüF³üVêdÝéâýþ¨píûúÚ"€6œ;Ñ:ÌPB^k”mÛ¶!û1 ž²ÿÁTˆØ0ûÏ!„⇣ãm²¶c½|¶ô¶<þ³–«*ˆ ÔxÄM<HHdOeÊâ±j9at±OÆÕ{×{ù!úéåg–ܺA d²‘õGö‚×álïŽû˜?8ü£ —fçÑØg0£ÿÔºvÞvÛm/ˆç£ß- °›ì?„BˆþÖ¶N.Ê?GÊRKlyüÿZq…¼Øÿ²ô9x2€Èp*±3Z++Æê¥tb¡Öç/@äëeýØtÇ~«Ã …0Òýþpú—¦¦&íÒ÷1"Aü{rú7ƒ8ô>Qá)HâW_}õ1å­0*ÆFÿ…êøo´% .³ÿ B!€þïZn’ë¾oËãÏNÊ’«*>/¿<ôGž Ä€š©ž(—“F–JÃxµ$L'ÄÅÛ†èAi?úù‘éÏÈȰ¥P·zÐ"TÆÆÆ4§YlÈü»—´£b¤¦¦F ŽO‘ÁuŒþ ô}Z) Ìè?µ¶Ã·Þzë™ýg4Ûïßåû¾Jÿ½‰zoUq×Ç!„b€í¯ÉÖ¾írvÞ¶<~˜!>Ýóœ¼6øOâ‘|G®,­“•ªÄ?g*>úú!Ô öuÑo4ËÏ,¹=ƒºÓ??®ïÛ·ož›½§1eeesÚÌ(Î#½ONúúú~ÞîÝ»ŸVSP~æ-û®i"JÁÓ  „B òÇ#7Ëi9'IzBšíŽ¥Ûÿ^u•|i×µ29=É“Ì|‘œN”ºñ*-Û_5^%þh®®ý,ígÐÂ0¯kllÔÌþpýàÁƒó„±û˜?˜jkk¥°°0¢Ÿk<àüïþ<¨àŠãî»ï~Lf²ÿþ„~ ãÙñðxS‰z!„Ð1Ñ%wµÝ/_.ÿ¬-Qj¹üSÉ?hk@ìMÅD‰œ8ºDsòOvšÿë$z®õL?D?]ûí´×8p@ÛLÿàüïNff¦–ù×ûûõJ8ýëÂ×êÞöÏ„ÎÎ΀_WY¶íܹ3õ줲ýâá¾i/A1(äg B!fæ¾öGä’‚ó¥:m‘-ÿseŸçúþ.-cÇx2ØŒ$I”%#µò®‘•²p²ÀôïYXݵýüF„³ä Z¸¿WŒöCï:®=zÔã {÷18÷ þá)a&q}zÚÄ?*'}©‡~x½xÎþG:àI¸ÇuÖŸB!$HÓùÍáä·Kþ'®ÍÃEò‚dù÷Ê«å[{¤¾Mó„°yŽl•í_*' /•´éTS¿WÝÄY~W?Šo-‚uÏž=ÒÓÓ£­Ess³vÝ÷1¨ðçôo§€<<Mü¡žóæÆ÷‹ïòÿ`Þļ·@€%Fÿ1@!„„À[C»å™žçå}çÚòøOÉ>A.,8[[bUUyÜÉñX©ƒ]\º‰ŸÞ{m'¡Î Eø× #ýàô?<<¬ X˜ýÁôÏ÷1púGÏ?zÿãAœGcŸšx‘èÍ›7?ŒBŒ•þ; D|/÷ùËþÇU4œB!$þrôvywîi’•˜iËãÿ·Š‘íý¯ÉàÔO ‘æL•G–ÈÉ£Ë%×a^'ÿ´´4­ì‚+%%%î'ƒæ¢_õ‹š;¯¹ýcÌŸûìz|ŒôCÐIG¯ç˜±Ÿ?P‚Éþ«`KË]wÝõŠÌuþµì_ £Â>n³ÿ B!AÒ;Ù'·[#_«ü’-??9O®¬øŒ\ø¯<,@îT¶¬Z¡•ú'O›óë!D?2ýþz¦Ÿâ›A‹p_WW—æô¬?²ÖMMMó²×ÉÉÉZ¿Þb‚}ÕÔÔHQQQTÅy4ÎÿP÷744¤m²}ûöGÕńڦ$<ýÿžÄ¿xŽˆÅ²ÿ B!!ðPçr±jX–¹Ø–ÇÿᢋeC÷fy{¸‘'CœR4™/§Ÿ(ËFë$AL÷þÝ×ÝûQêo'¡nu̶n®NÿÈø#ó Wà1ñ¯WÀé¿¡¡aŽÓ´Äy<`ž(*àÒ·zõêgÅÿè?§^æïMä"ìã:ûÏ!„Ê—!õïw-7ÉŸ—ý–†€8æk«®–¯ìù¶2Gœâ G`ŒßéC'JÝx¥éÎ]dX!øˆ~fÉÍ%¾ãqÝðž!üèõGÏ?ª\ÉÊÊÒľnî§;ý£2Å âÜl±±1éíí ø5UûÅSªj`XRt‰-¿6½J>^üa¹·}=OÓ+Ñÿ™C'Kùd±©Þ2©ÈôcC65X5Šo-y,D>œþ»»»µÛ¸T³çç [´¸šû!0…`‚Ufç±è£AM^˜¸ýöÛŸùÙÿ@+Äø÷W`Ùì?„BHX}ôorNÞ™’—”kËãÿ—²’-½/HëDO‚ ÿòÑzyÏЩÚH?³1…q}W¸´‹P·:ñ²n0ùƒÓ¿Þ£ÞÑÑ!‡ž÷8÷1îÁ€xçîûŒäþÐ:ÑÙÙðóT%Ƶ!ãð"ìC­ð׉`„BˆÕ€þGï’ÿ¨¾Æ–ÇŸš*ߨú²|oßÏx2˜Lø×Ž-’³‡N“…“æxOJt Ã…l¿7Â,¹¹Ä·ÕÖÍÕéÇvôèQnõÕÕÕ²páÂ9Á€E‹Ed-âÍàÏXË@³ÿxKëׯDfÌÿûˆàbß[Ùÿ´UÎ!„0ðT÷³riáùrrÖ ¶<þ3rVɹyï–-}/òd0ÕãårÎ໤d²ÈïýÒèé7:¶â›A‹H=}é»wïF¹¹ö˜ææfmV½+îcþð:¨p Dc]â1 €u &û¯Z^ݼyóA™ÉþO‡qñߨ¸Ÿòg B!–ù«þý¾eµüuÙ¯%iA¢-×àk•WÊ+ƒoÊðÔOˆs?dü—Æü½è}ýý®#Ó¬*8-ÿ7Îë†Ì4 þðþÐÿë0ýsÅ}ÌÎc”üëÁ€Xˆóx @ü;Ž€÷÷Ì3Ï û™‹N—-OÂÝŸù_\Ã!„&šG˃Ë'‹?bËã/LΗ/”].wï½}¢SîïxDëÚ¨eÿIdX2V+õ¿G2œ‘aŒFíy¦ø¦ø6㺠jârrR» #:dþuçòòrmÓÅ0Fü¹;ýGKœ»ï3Þ'  å"˜ìÿ¶mÛôìÿ”„¯ä_Ä÷8@o¢ÞŸùŸå`€B‰k;–‹ Αºôê¸x¿FÉÚö‡eSïó☞â!R¦“å}ýï•å£õQþè{ŽGÁiu¸nÆcý öÑëPþž”ÿ» ]8ûÃ× ÛïÍé?bÙ û ç>±Öî‹FPÕ]·Þzëó23ú/Ð1FÄ¿'áïmb€ø ø\J!„âýË’Ñ¿k¹I~»äd˜÷‹»î胿iû$DbB‰£P>Ô{ä;r"dPgþèy¦àŒ®øæº…-0o¾¹¹yVÈ¢ýàÁƒs„-Ä~CCÃì9Ÿ””Ó?þAöß5àb”7ß|óÉÑ™ž O½ÿ¡D¼Wx „#À!„BæóÖÐne ÷¼\¬FšêKü;Žþw·= o7òƒŠ§¯ó”ËâtbÄö„^glf¡ß\7£ïëÀšéœ«Usäç<ÿpú×+]t§Ýù?žºYxŒ>q!T»ÆÈêÕ«Ÿ”ãåÿÑvù÷'ì-Ÿýg€B‰27½]Þ“{šd%fÆü½ ´ÿÙÞ­šð?4v„N€àGÉÿÊÑÅÝÊœKKKµÌ§Ù§Õẅ¾èëß³gÏœqsþî"bñâųcýt§ÿH™ýÙ5 € Ý{!TÛÆ&UÁÑ'Á÷þ‹ø/ý¯!bÓì?„BH”éì“[ŽÝ#_¯¼2fïaÔ9&Ot=£ùÀ D‡L5Öï²Þ‹¤traÄö,gYY™dggSp « ¬´€£?ÆüéNÿØZzzzæ<Î}ÌF[VUUEõó²’ÁŸ7ເ6Œ ž7µfÍšGåøè?#‚ß)¾3ûþÜÿö¶Èþ3@!„Ä€õjœÞ%çɲÌÅQÝoŸå‡}?Ðù˜ :†øAD‘²‰bùh匌ó>¾øçååi½þÑmFñÍu‹púGæãæzÎaþ744÷ï—û˜?T¿`‹¥XŽgƒ?_ÀsAÿ<¡¥¥å¥W_}õ˜ÌÏþ‡Ë0˜–Ûeÿ „Bbñ_ýƒ!àŸ–^' "/ÖZ':äŽGåQ5Êoœ£ü¢NÃXµ|¨ï|IŠP¿jjª6æ,XwŠoẙp-áojjšuúGÉ9në•:îcþõÏÏÏ7@·B@¯×ÞÞÔsŸxâ‰õb,ûh @ÄÿØ?ñòø@¿% B!1 qd¿<Öý´|¤èÒˆícÿèA¹¯ýyFò›â(¿˜°rd±\Ü–$Hd=Èú#Óéžõ§à¤Pçµ@‰¹«³?Úçô㽡¿¥þš¨Q~uuu;ý3 `eðYŠøö£>ºGæŽþ‹D¶_<ܨh·üø!„±úèÝrNÞ»%/)7¬¯ËQ~±£ß;xª¼{蔈¼>úœ‘õ4ÚëOñÍ E¼¬úû]þѰoß¾9#çpþÃì/++K»––¦‰Ýü/ÜbÙªýüì ¦÷<ÿüóÈñì¿3ÌA_O¢>PÏ!„§†äÆ£wÊT5ô/rïŒòû[Û:Ù5ÜÄűø?àLY¥FýE‚ÌÌL©¨¨ðëðOñm.¡ÎuóýX|dùûúúfïëííÕz€Èǘ?ˆ~€ X$þãAœGcŸø,ÆÇo!8zûí·¿$ž³ÿ¡¼‰x_†þÿ+ îg B!ÄOuoV†€È)Ù'õ|Ç´CòÛ¦ ÿÃcG¹ &ÿ¼[N^‘×G¹³»¹E$…z¼¯LåvïÞ-ÃÃó÷¡×\ÇÍyÊû!þõà~*++ç‰W–®UðòË/?ª‚;ˆøýlß¿·q€âå>Ûfý „BÌòÅ]ýû½2¼qùÿIÒã&q#S£òd÷&YÓþtMöp!Í"þû•ø ¿øGv3V%ÿß ZDrÝ úáôïš]†ðw7›ƒßÊüõL?a˜za±lõ€²ÿîæ‹FP~ƒ·ÝvÛ³b¼÷ßÈcÄ€ð€@îöq B!Ä?ÇZ”Kÿcò©’ú}lŸ£_ò{J{¦Fù=­FùMpÁLÆÙƒ§EDüëýþ0=£ˆdÐÂJëQ ±¯ W‡Ã!û÷ï×Lÿ\qó‡Òÿšší÷"\b™¾éïï—‘‘‘€Ÿ§‚:*ûÿ˜Ìdÿ§d~–?Ô²£.ÿÌþ3@!„˜”ôÿùÈmò£Úo͹ßh³Üßþ¨lìÝ"Îi'Ê„œ9t²œ1tRØ_β²2KNŠo®›ëÏQâôèqÏx ÀuÄJý!öõ1¨„Ù.)Σ·Ï`{ÿU0ç¹t«« ¾ìß]ˆ{Êþ 0ûÏ!„b>žëý»¼¤ ÏÌ]5;Êï…þ—¹0&Ydÿà z›uáCÁIñm•uƒ›?„>Jÿuà€1“““ÇŠÊô744ÌŽùCÆÁ€hTÂ0 påà?ǘ1—_·nëè¿HŒüñ_Àì?„Bˆ¹ù2ÌnÍ”½#Í\ “S3^¡™þ…| ‡¹Y ýÍV‘ ZXoÝ ðÝþ1òOe‰çŒùC†Nÿz¦???_óÀЋýüÑÛg°ÙUÝñʶmÛÊñ츂"ÆÚ" `€B!á§m¢Cm\³SèÈ“÷] ¾ÙãøÂ~ÿH8ýS|3hËuC¹»ÓGG‡>|xÎópî#ó¯gúQ ãÍé?VbÙ.dÿ‡†‚3š}úé§×Ëñì¿«øD ÀŸ¨ŸRð[60À!„BHd:Óå{.‘TgJØ^ýÎÿ˜›QpÚg-âyÝ`"רØ8Ç鿵µUŽ;6çq………Z™¿îô¬?²ÿ¡ˆeöóO°Îÿêón¾ÿþûß”™ì¿7ÁL @ÄXÿ ~ÚŽ# „B1*Ô§äz/’œ©¬°ŠÿÊÊJIOO·¼ˆdÐÂ^ëæîôK”ü»z¸üÃðLjì8œþ­,Î#½O´i¸Oc0ÊÖ­[õì¿‘ÑF«DŒWbþgK „B1ÈEƒï–²‰â°½¾¨‡"þ)¾)¾Íºnpú?räÈìmTìÝ»wNY9^ bÙ’’§Û'*4‚AµztÝ|óÍÏËÌè¿H•û{Êô-ó·}ù?„B!Y1Z/' / Ûë!ó2gwñOÁiŸµ°âºaßpõïîîž½½ÿÿ®cþéG¿¿îy‘‘‘!ÕÕÕÚ]À²Ÿ?úû„_C°Ùÿ×^{íQ5ÒqLæöþ»_†*þE¼—üsô„B!¡SƒíýWûw®]»VýÈØ¿@¿ûÞÊþ™ýg€B!Ä7 Ô¿‹ûÏ’Ôé”°¼ÌÎŒô9ÛIpZ+¯„~ss³–ý×ñ4æ¥þ(ù×Ëüñ{€±¨ Á_ä÷itÃÃÃA;ÿ:tè…_|±Ef²ÿÓaÜDü·*Ú§ù—‰ÛþŸÄ% „B¼sÒÈR©_–×JNN–ŠŠŠ ¾ü3Kn.ñÍu›qú‡Ðw-ǘ?xàÒõ¼_¼xñ¬Ù%*`ð{€ ÅytöitÁfÿ±‹‡~øA9žýwÿ.ñ/~ æ„B!„¹äLeɹ§‡åµ vÊË˵Œ'E$Åw¼¯>ÆüŽŽÎÞ‡ì1®cþéǘ?ŒûEEEZL ï™èì®U olذa¯ÌïýWÿ¿'ï)`¤ß?ó@!„B¬JÿS¦“ÃòZ=‘îu6›à´:v]7ˆDˆW¡1h@K€NNNŽÔ××kA/}äe Þ D7 Bö_6nÜøÌdÿÃ1úÏß@O¢ŸÙ!„B‚géh­ÔŒW„åµòóó51MÉ,9×-k¡¿oß¾9BßÓ˜¿ÂÂB­ÇÏG ªª*¬Nÿ „wŸèûGG0ôôôì¿÷Þ{_WW' Š#Â_<¹?ØÇ1@!„b%õ?ð̰¼J 1ò"’â;Þ×­½½Fo~Çü¡ÕÙ~¼'8ýCüë-çáßg8ö×ÖÖôs·lÙ²N]ÀôÁ5ûJÙ¿'ñ/ž#â?ûϪ!„BærÖÀ*ÉšÊùuÐ÷¯ !+ N«Ãu›/4QÞßÙÙ9{¿§1Xdý‘ý~Aü'%%ÙVœGcŸ¡î¯¿¿_FFF‚Ú·j9vë­·¾(ž{ÿƒû'D~ žÙ!„B¼S4™/§Ž¬Ëk•––j蜱ß\·à‹‘~(ù‡HÔ™œœÔÌþ\E#Êüaö—­ÝFË‹7§;‰óx ²#XÔØ¿‡Ô92f `${/bÜøÏ— ³ÿ B!„ãü3d„þHCßßñ¸nÚH?W¡?66¦Ý‡Ÿé ÌÉ’%³&—¨ÄéŸØPÁá:É!ԹгzõêgßÿF³ýVˆø®ð÷3CKÄ!„Bˆ i«–ê‰ÐÿPòɾŠo®[¤×¢ß]èÃ(Õ¨ бßâÅ‹gËüÃáôoç€@4÷‡ËPzÿ_}õÕGT ÀˆxÏþGj@0¢ŸÙ!„BŽ“0 ç¾+ä×Áx”þ£$š‚3òâ›ëþµ€Óÿþýûç8ýwwwËÁƒçˆÕ¼¼<©««ÓÊü±-Z´(¢U/,ß/øœÇÇǃz®jºù曟cÎÿDŒgÿ½ | ~!„B¼sòÈ2Éwä†ü:¹¹¹’‘‘·ë@ñmï úÁáìïš%Æ}GŽ™ó8”øWVVj×ásëhПÇò}sï¯ë>½!Þ~ûí§Ôy1 dzÿáÎö{ø¾\ÿ}n?c€˜ÿÿ)ü]à2B!‘<$gú—)U]TTDÁÉ EÜ­®Cø»Âá>dý‘ýwÎþÅÅÅÚuˆ~W§;‰óxtuuÍiïÕ2~Ë-·<*ž³ÿáÿç¯Ü?Ñ„B!„ãœ:¼B2é!¿D‘»ë9'…ºÙ×=ý釒p‡Ã¡õû«ïÙûpn£ä¥ÿF—ååå>þ0_@Ÿw(Ù5b“:_º$4ç£Uâð0r°c€B!Ä*¤N§ÈéC'†ü:è}ÎÊÊ¢àdÐ"®Ö“Ó?úÂ1æŽÿ:(óǘ?˜þ8ý#àìñÒà/vLj쿫‘c (_ˆ©5kÖ<"3Ùÿ) Ìõß)Ƴÿžn‹xo ù¶‚¥ÿ„BH¬:AÒ¦SCz d@}¹þSp2haÆuÃø7w§dü‘ùG€Êü1æãþðºèÿ—Ó¿f8FÿÎÎΠ_Oµ‰l{ùå—aá)ûl5€ø¸. {fÿ <á !„Ï ÷ÕÈŠ_ÙP÷hŠo-̼nýýýšÓ¿k&-ÍÍÍsÜÿQæ___¯Mµ@ «¢¢"¢Nÿ Dˆ×Ï7з|ÿý÷? .1š’ð¸þ{ÿbà9"Ìþ3@!„'Ž,‘4ghÙdEõžh+ NŠoë®JÀ]Gúá²µµUŽ;6çq0´¬®®ÖŽ-óçêôoeqnÅ€€Ý7ÏÐ1ZZZ^Ú¼yó1ÞûŠ?€Ï¥ Qð30À!„Bì†ÊgÊiÃ+C~£}Ðê\‹X¯îÃ8¿¶¶¶9÷yrú‡¹_YY™ö©©©Ú˜?ì*έÀ„‡P²ÿ=ôÐ:9Þûïîöªë¿»0göŸŽ¿#\B!d†¥£u’3ši_FF†¶Q|3haöuÃ~àôßÓÓ3{ÊÿÑï?888GdÖÔÔhm-Æ–(û7âôo瀀ÙÆŽ}}}AïûèÑ£¯>õÔSMâyô_ Yñ!þýU0ûÏa@€B œÓ†Oéùøòéxœßö[7úÁÕßu¤Ÿ'§ôùÃé_ïñGk ªâ]œGcŸf?F´x¸?>{ì±ûåxï(f"Æ«üµ0ûÏ!„BˆjÇIñdaH¯‘„Òh NŠo3¯~cc£_§xYÀé=þx}LµÐ«ì&–­vŒø¼]«<EµŒ¼ñðÃï’ùÙ_åÿFƒ"ƲÿÞZ(ø ÁþÍàB± g ŸÒóñÅ:ÜcÐÌ*"´ˆßuÐÊþ]…> :4G,fffÊâÅ‹µIxÏ(ùGé4ÛˆÜ>]=‚aÆ ®Îÿ¡–ÿ‡+ûŒ¦¡Þa€¢žB±¥“ eÑxiH¯‘››ëÕâ›âÛ ëæ.ô½9ý£Ì¿®®NëñG@wú·“8·r@ãGGGƒ~~GGÇ®µk×¾!3Ùÿé0o"Ƴÿâáñ„âö˱€¿„BÈ\N^ÒóñE=??Ÿ‚Ó¦â;Ö "ßUè{sú/))ÑÜýÚY þý¶hð?Ljׄó(¨ìÿ}êb\ægÿCqÿŸö!æý¹þû øÓF„Ó‹÷H½¶ü…"„B,EêtŠ,« é5ýG¦4ÞE$ƒÖ[7OB³ß÷ïß?ÇTUUi#,Zuú·S@ ^\½EGkÖ¬yM]uûN O+€/áÎÑ 0 `ðñì…!„BËÔ迤éà¿òxÊþS|S|›aÝ0ÒÏÝé€MMMsD D~}}½È¸ ‡Ó?æ:Fœ!íSý[+ž{ÿÃÕëïIà{ 0ûÏ!„BHàœ4²4¤ççääD5û¯BÝê˜mÝ ôáêï:Ò€ÈüCê ¼fÚmŒ±Œä(Kb·Ox@¸š?ŠÊþï½ûî»_‘ùÎÿ¡šþ‰Ûâ! >ù _'üüñ—†Bˆ¥)šÌiôŸ¯ì¿™D$³äöZ7O#ýù=|øð‘˜žž®ùCU¥¥¥Ú(K+ôº²O;#Ú>Üýå‰'ž¸GæfÿÃ]þïMøöÌþ3@/þÛø @!Ķœ<²,¤çc,šƒ4Šo-¢µèñFÏ¿Ó霽¯¥¥ežñ*WPöŸ˜˜¨U°”——k³ ×hìÓLjÏßõœ@Ú­zÿ_ÏÙÿPûûŒýcöŸ x/'ù‚^‡ÙB!öù’3(ËÆêBz ŒK³»à´ü—±8Z75žMŽ92+.!ø8 }}}s·páBÍðïUwú7ÚÆÂ€@üí#ÿ0ú/ž|òIoÎÿ¡D˜ýg€D5hàí¿„B,Ï’ÑZIs¦ý|ôL»ÎF…ˆd–œë¦Ï¡C‡æ”xÃäf®b¥þú9ŒÌ?ª(–­{Œmmm!½XÚuï½÷"ûïc£þ‚ ˆ0ûÏE{ØŸïk¤†«!„؄ǖ„ô|Ý1â›A‹X® ý`ì7888{Ÿ'ôø×ÕÕÍV­àüÕËÖ=FdþGFFBÚ·êý¿W¼gÿýœb¬ôŸÙH¾F² €BˆmÈrfÈ¢‰àÅÊ¥1'ÝÊ‚Óò_–,°nãããóœþáÐÜÜa€>öoxöðç¬éäRB±™ÎôÊÿažª`–œA‹@€ÉJü‘í×AÀáÇý:ýDu=ˆý>1‘¡ KÏoÚ´i¿„–ýwŠqã?_ÙÿPG—3`À€åF\ÿýôë.1!„+±d4<îÿßêÑX ˆ~8ýë%þxLKK˼ÑnîNÿÈúÿÿöÎôK®ê<÷»Z#HÍó<ÙÁ&ä.Ç^we%Yɧ¬ø[¾äËýî§L˱×JlÇ8v°c ÌÅÈ„0ó`l Â!BcKjI­¡Õ-©5vwÝýžÖi>}†½÷Ù§êTÕï·V­šëTUWuçyß÷ÙaÒ'‰åN7äòÞÞÞB­s†¶lÙò_ú¤|è’ªÿE–ü£úÒõá—£–py^@x^¾ð—_ùÜOÿ·>–ĘI×]‘C-å|-átü  ŽÇýoãÏPIj x¼ZÆù¼Óá±ü&Mû??üâÿU‹Õj—'&ÖiÓ¦u¤PÇ´hüûvöìÙ Ù?lñ—ciùŽѤÈKúÇh_CàôéÓ…—ýûä“O^zûí·»Uzõ?ÉQöKþùªþçi'Àè(s /ü/Í W¯_‰ ý¤C-Ãp1²v*1ÚÛ0¨žÏüÑëä7iÒÂ… oЇ®O<^Qm7Á‰iQdù6©ô‡ÂNBÝ$ìïÒ¥Kãn7þ|µjÕªà=ƒJÂþä¸Å2íûÅð±ìŸ6™.?üðÃaõ?oé?ÛÊYÕD>@Gû"÷O[ éË9ùò‡âÞG€²0|~ €Ö3Lªþ&@׵ߴ®¿ú«¿ú”®:G¡çˆoL‹¢·•eÛŽ;6®[–÷ñ û–/_®/^œ–¤©üûHúo–Xfž¿ò™)¸ìŸÚ¹sç³}ôQ¯òSý71”¢ú€Ð/å¾ñ€º2[ -Ð#JWìò®k§k±ÓñC=átÝ£Pã@ˈÿzÎeñ߈´Ñ¶DMuí÷¨ëÖ[o½ÅõIJKµkeµÊ‚ñ]÷MÄ[<é_*ºÝÝÝãD£´ù¯^½z,àO–¥# Ý:†€9.\FFŠ Ã&Ïßwß}?U£ÀÃ9¢¿H€RÙKýQýÇO†AÒÎRÝÓa$"ö•øÏêðe˜P  ë²<ñ_74ºt«ô§\Ÿ¤ˆ,„:¦EYHû¶„ý‰ ßé8zôèøóÉ“ÕúõëÇ>sæÌ ÒþãB’yþÎÙ¦à?áÝwßÝÚÓÓsFå·þ—Uý7öTÿ1@%·ø§íH%uýc;U1 Oü'JÐŽbÞ‡ö;ÿ=I˾©}á _X2cÆŒ¹®/,\Z­ÓÅ7¦…ÿÛJÒ¿„û…ámÒ çûûûÇÝNºPDüK¥<Ö‚ 2W¥hw±Œ!0Š|NâÙ¶hãéÔ=÷ܳU]Oþ·YîÏWõ?m€ê?‚_e·î×r./bÄEZë¿R€ùÿnÓyÿ¬jªø—ߨ?û³?û¬ë“—¥ÕÊjÿG|w¶i!k¶‹Øg·uv0ïv„Hþ„ˆÿ0éÉ’%FIÿU®TëËÙ¦|nNž®M„KÊ®ú_w4”PDðc `´½ÐOkLýѪ¬u8ÓÄ’ðOšùÏ3ÒvÞ’vkžv2 ºæ@ÚÿþøïC–ÙýMœpÙ_ÿõ_oÔ¢išË“±%3×UœˆïÖ~ßä9Kª¿þð¼¸9rd‚P”ªð'¡2ó/íÿzžÕݦ<Ž˜HñdzE?Æï·lÙò?j4ùßt‰?s IoPýÇF‰5 `b$%þ'íœeµý»´þ#øZ[èçÝÆ¦í¿– øÓ~»>ûÙÏ~ÚõÅHû¸“ŽPïÓ¢Œ÷M’þe™¿óçÏÝOÎË(@16lØ0–ô?{öì`É¿èç°™ÂqÞümúþ“Íÿä'?yL]oýQnóþ¦ãÊÀ("ø10ø=ÊÙéªgg þ¼ªýÚu¦âß×òì…´¦9àÒöo:rV¬XQùöªäíý¾]¾|9û“ãÐ eÿ$0Št›è¼Š±®“ùóç«›o¾¹RÂqÞ\£EfþO:Ux[{÷î}õ¥—^Ú«Ò«ÿ¶F€RTÿ1À» Ïªú§¥g}qj†F@VÕ?)ô¯®Ê ÿCè´¶àÏû¿ïCüõIëдIºzµÓ“×;àñ¤uÄ7¦…-Rñ—ùþ0¬M–ýÓâkÌ ‘Š¿$ýOž<9hõ_´h‘“…!ÐÛLÛÞ‰' ÿéû_~衇~¢Oʇ0¯úï# PE?Ɔ€Á"*þóŒ•bØT`ÒÄ¿IÕÑкB?ï¶yâßÔˆG‡¿Uµ¿üË¿\¥M€é./JB×5sÝŠB½íw´<¼o2ë/Iÿ¡˜ÓK­•ÿ¸€“JÿªU«Æ%ýûZzC } Y)b`` ðcíØ±ã—~øáqeWý·¹.®%¨þc€ƒ°wyœ¬²zÎé¸àW âß6õ¿¬öŒ€Ö3 òÂÿLÅô7jÂoÐm·Ýö)×',@UÅ7ÝÕß$¤M!²d[Ô ‰&ýKëYIÿ­¿Mù Egœ¹÷Þ{ªFgÿ³‚ÿ²ZÿGTvû?Õ (ÙHZÚ¯føÅ¨Å®Ïüqñß•¶Ã¥Ê›ýGä´®èW9¿.â$Å~ u’ú×'oÿG|cZ˜¼>9¡Mú?|øpкˆkÖ¬ þ œ\¸páØc4C¸"Ϋû¾öõõùþS/¿üò½ò„¬8tíÿ§mê^Û¿RTÿ1 á†@üËbr›´Ëâ†@™âßt‰(h-ÁŸv½©øW†¿5ñεšž£v2d‡ÝG@+ õ¶ßy*ñ}“Ö~™÷“þå¼ÌûÇÃþdÎݺujÖ¬YÁy ú‹&ý7K¸R­¯æö®^½:aµôcì}à^Qã[ÿmÂþLgþó:ò„=Õ „½Å}ÒBmˆî<% åAüWeÙ?ö†šó¿6í÷ÀTü§u¥…«Ø¨?üÃ?œ¯Eü—',â?k'*yµÄwÞ·+W®â?¬ÒJÈßž={&Tm¥Í_–ù ?c:¤RÝtÓMm)\Ù¦ŸíIëÿÈÈHáÍ>õÔShSJ>IÕÛÔÓêžp§ú–æ€I@ÍáK4¢&†*å âß¶z­#úÓ~LçÿÓ~o’Bjkþç~‹ë“¯zõñ]­÷MÂÙDüËò~‚tHå?<Oú—–ÿ"KMb´¿! Ÿ¥x‰ úóøÚ3Ï<ó¡º^ý÷Õú¯Õ hº9Õ`Û'ømÿHÿ豟u›"â?ë÷&ìùÿõ®/(mþ¿•…zÛï5é}ëïïfüà ­¬ÑÞÝÝ=AÔÍ™3'˜ùá/ÀâÅ‹ÕÔ©SK’ˆóÖ7ä3ÏŽpAQõ²«Ñà¿á ñï£õ_)ªÿPHÌ›\gÚPOØñª{xŽ.€/ÑÏ^@k.ËþeµÿÇ«ÿ¡ PÓ3Õ«\Ÿ¸IB½ü÷¢êý£GÏSÇŽ ÎÇ‘”I÷—×"¢_Ä¿˜åÖßf™Û“Ö™ÿ/ÊöíÛYöoØ@ü»Œ(Eõšj˜fÔ ¿Dõ”°ºÊnùÏÚÑËñˆ{€ÖûyÂßEüGoÿѱµš®¸.wÿ­$ÖiíoÎû&UIf¤R»ÿþ  .Fu'J0ç/HÒÿ‚ Æ%ý7J¸b´Öö$;âìÙ³…G§œ¸ûQ׫ÿy~ñ¯TþòiÂê?dˆn“ëâ?ÍHýµœ/_-e[I&€RåWÿ1ZÓðYýO:wXÕç?ÿùES¦L™åj´’Poû¡Š½o’ì/-þá\¶Th%ìOrÆíDë ¿ÌûËÜ¿ Iÿ2öü00¢¡—ê›ðX.<ûì³?Ò9ƒêzð_\Ü­ü×SÄ=Õ h²‰fd™õ á?_WÌýt²¸7½­Éo…Ië¿JÿAûÿç>÷¹µ®/Îf.›*yg"ö%ìïâÅ‹ÁùÁÁÁ ì/Þ¦Oú—%þL“þ10¤³DV‘(ŠGyï‘GyKVÿmBÿlÓÿ©þc@ Þäº$‘ŸgÔžG’ðÏë8ÈÛÄh_SÀGûÒÜ¿JÿÁoÐÊ•+ oˆoL‹8Rá?xðà˜Ø?sæLÐöxRññ?iÒ¤±¤¡’ü•¿Í*¼Fù|…£%EÐc)W~øáGôIYö/ü—×àög:@õJ0LGLFòŒ…¤î‚¤ãºƒ€Ð>F€I@Z¶LVè_=ÁC—ž³^ãôäõθm8â»ZB½ Æ’þÃöì#GŽL¸Tú%é?ü‰ø/ÃP¢Zß¾¯ñøñã^Zÿß{⦅¿ýöÛÝêú²e$þ›¤þ+•<*@õ,D¾Ë}MMŸßéKÚŽËÒQк@ü7"-P6J–øïJØ­Íž=Ûika@Ur áôéÓã’þ¥ @.‹#ÉþË–-Kúñ/&@#Þ öØžMáxIôÌÿ‰ï~÷»?Õ'/_û?9¢ü&þ tüaiÿ7 té(Hÿy_æ_x€¶3”Jî ËjÿW¦âÕªU3uËõ—'ï{]öª uL‹üÛ†ËúÉR‚^K=˜÷×âj‚(Œ&ýK»¿$ýKû§W âÈç+ü¬eëÖ­?Ô+HJåPñŸd¤Uò©þc@D¾ X¤ ÍÈÿ5ƒ/y-)ü³ÌÞ¤±´pÙ$á¯2ÄÿØNæŸþ韮UŽÝcÑvmªäkZHÒ¿´ü‡Ë°IUVÄ<˜Mæü%éÖ¬Ñ'ä84:E¸bøÙÞÉ“'ƒ“¢:tè­Ç|»ºÞúï*þ‹Œ˜vPýÇ€›qá^d ïtž¨¯ñEhYÑŸõ¿=ÉN[&þ[0¢’«ÿ*cGS:Vº¾ ªuTE|w’i!•ØhÒ¿´eKØŸ˜Q¢Iÿ‚,ñ'Ký’ˆór¶Yå×(KJÆ;K\П݋÷ßÿ£j´õØ“ø·øõ ñž×À¾?”`dUçm»Š ÿ²?yýÉú_œô;4:–õ¿;^ýÏ›7­éöëeN? zg½Q+ ¾«iZ\ºt)˜ñ¿råJp^ª²º¢:AØI¥_*ÿÒ Û–ÿo¼q^ámVõ5бtâÄ /Û{çwžúàƒŽªÑêÿpIâ_eüV*;ýßec€-e×t™ÉH@|G®^à9&št(þI´i¦nšÕoÿOÚÙLÛñºôzëNÀ”)SêlZH¶»»{,é_F’„Ùüùó•î2 ^Ÿ‹-*µsC ½_£|Æ|´þëq•ž»îºk›>yÅAü䈥ò—÷3íPŠê?TÆP*IÀ"ϱž#ô]·GÕ ù¿KIÿ“ëA-ç7-^ùîdÖ2žCM¯Ã¾ÔåET¹ýŸÖþrß·3gÎŒ-ë'Ù}ûöÍÿGYºtipÄ0Š&ýwšpÅ(Ž|Æ|´þËÓâ‰'Ðc+ƒÊlÙ¿¢Éÿy¢ß¦úŸ PP€§í˜åUk²N»î(Ö<¾Vh,yfn’él»¬m^»é„ùÝÂ?E§°/vyAIUêí,¾›ý¾I¶··78-!{öì F¢H¢¿$ýÏ;78/sÿ"þÓV@œcä!F“¯Ôÿ>úèù_üâ¨ñÁeˆ¥ìºØoÇ€’¾© ¶c¦ _ÏÑ·ýÊ2\§TÂïNÔ@ÈÚá¬é–j±æ´ÿ’f ÔÛó½×"Uÿþþþà¼Tb%é_B㟠û güu‡‰QÒ?â¼qÛlÅ×(ÆSÉ H3LMÛŠ´ÞïQžÈÏúýªçlcì¶ðༀ€ªˆoL‹ìÛŠÈ—y-ž‚óR‰•óq‘§»IñŽ‡Ìž=Û9éC€×"fÓàà —ç±uëÖj3¡ßƒøOê°É úÛé²éÈþyf€­øP)¿5ñÐÀ¼ T×âÅ‹W”a ¾ÛÇ´6YæïêÕ«Á6;¦Ž=:áv:LR­[·n,é_ªþ3fÌ@œcÚ¦Týeu èÏñ¯{ì±·UrðŸMò¿I RÙ•¥¨þc@K˜¦F€‰u¹ÉŽ´®hw]A¦–³™—ý½ªéíå./@DžÌy#ÔÛ©¼Ê²~"Â$y}ÿþýc#QdY¿•+WŽ%ýËùF„Db´ÿkñï£õ_Yguêÿ#úä¥kâ?-øo$Ãð1@õZÀPF@Öå6B¾Æ?€¶þ¦ÿû“*ú&[O8Ÿ–:Ý¥ç´}‹;Zû«÷¾IÒOOOp^ªÿöŽDY±bE°´Ÿ&ý‹ uˆór¶ÙίÑcê¿zá…~¤ ,IR׫ÿ6Uÿ¢3ÿYéÿTÿ1 b&@ÞmëbÝTÈ#øÚOðgýOÏ ‘­©äðÙ´û&IÛ:´°Ài‡grþ.â»uM \“ƒ ³×ö'&@éY»vm0ç/HÒÿüùóS;C¨ÖómÏÛéÓ§½<–YyÓ¦M¯©Ñà¿°úošúïcÙ¿¼¥õPa@¶;}>¾ð„Tó7&ïwZNLÖé¬ß%ÃzLÃéJþ<—ÖŒÀª õv55$é`` 8/]Òö|IIÿá’ˆs ¢Û”Ç“Ö;ñ`$\¼÷Þ{P[ÿËHýW&@üÿq^Õ (q­æñöyË=e}ik^T—¼pٸொ|“Ùÿøó¨iw“®äßà´Ã3Ùl—‡Öþj™Y·•9ë0é_n×ÛÛ˜qDô¯_¿~l DRþ‹$ýc`Ä‘œ‰‹/zy.o¼ñÆ–;vÈ,ËUåüg“úŸUåO›ÿwÙgß<5‡/^Íò Zã ÐÖÂÞö÷ ÉÈký·5£'<çÛn»m‰óÏäöÝåéDÓâÊ•+êàÁƒÁ±¶)ŸAé<ñ´þßyçϪÑÔ“6ÿ$ŸvY#–ýC`@ƒL›¹¤2Û@å°M¨Þo‡­Q&ü³N'm;É,Ⱥ\ÞµlٲŮ/¸ ~Þ7©øKå_:†††‚yÿ¤à5 ú“À?ABþDüO›6­aï-íÿ¾†'ñë]Эÿƒwß}÷ýjtîH%Wð‹,÷—×þŸ÷[AðTpg®h+~­À}]aï 5Œ‚´Yþ´ö~ßti·Ðé‡Fï¬Û,ˆP/ÿ½p}ßdÖ_’þeÖZZ®%é_*°ñ¿·,ñ'Kû 2ÿ/aQˆj=¯ÑÇ6O:5áóçŠNýd×®]ÇÔõÖÿ¬p¿"ÁJ±ì´ÝŽZ­àý)ÎùçP-lW‰Šþ¬$ÿ¢¿)µY³f9aû7⻵M iñ?~üxðüŰ¿øzëRé_·nºé¦›‚ó2÷/F@ž„!Àk´E (Yöχzû¾ûî{E¶þ«ìп¢Ái"Ÿeÿ0 ƒ€¼/,U{€öÿ IûŸoÛêŸw¿¼Öÿð¸kÆŒN@Ùíÿt ”ÿ¾IÕ?œ³–åþ´`špiï—¤YÞOП— ÀåýÆà5f!(’úïƒË—/|ç;ßyPoýw©ú(·à¿$#€eÿ0 Ã_zövÚç·$IÀ›Šú¬ß‡¬ûtÝpà NKJU¡ÞÓÂ÷û&þÇ«ÁÁÁà±å´qDìKҸܣ¤ü‡]W ßÛñ/ù>žÎÖ­[ÒÝ,§ÔhëÚÜ¿Ë쿯à?–ýÃŒ€†™ÐLa1ëŸöüjºÂ;ÛåΡ(D|·2[-•~]! Ä–´ü'µ\K•íÚµÁk—ÃܹsKKúïdCÓcù Š!å`ùú£>ú[u½õ?+½?ÏhFðûþÐ"F@³Í¨îïCÖo„‰èw1j ÷©Å®«éyn§ÅÛmßÕ08d¾:Lú@Âþ.]º4ávK—.UK–, zŒ&ý#\y¾·)¦T__Ÿ—íèÕ,Në[ßzDŸ¼¤Ê ý+3ø‘˜ÐF¿5‹ÛÛü–ØÞ¶¦çºõ(ÿä™./&è¡ÞÝRa “þey?Yæ/Þn-ÏeõêÕàvhuÎC<éáŠ!às›á’ò¹ôñ°O=õÔý:ÔR‚-†Ôõà?Ûöÿøì?Á€Öf¦d {×YjñãÏ|æ3sô±S)ßµ Åw³M ©®†Iÿ2g-#qÑ'†ŽÌûëU!‚ó’ô/âßôïŒ!ÀktA–ü»zõª—Çzÿý÷ŸyòÉ'§Fƒÿ† …ÿˆè·]P)‚ÿ0r¾ä˜e’´­š®öÎu}Àhâ»zGx{þa{õ‘#G‚óqâIÿ:2˜ù/ò7bžC ™ù—nèÕ,üû¿ÿûObâßVø».ùçügc``@‡6;r€Y`óûQÓÞ9¾ Äwµ i©––ÿsçΧ%쯿¿Âí$ÕݺucOé´„+¯±ÌmÊø‰Tÿ} ;.~ÿûß¿ûü¨›pUe/ùç*üóÒÿóöïë—€wÃÊÅe¯»Œ.€šáeÒ×Ý5{öì–0è.°{}ÒR-KûIÀŸ¬É¼¿G›p;iñ_µjÕXÒ¿þ<”žô!Àû*Ȳ“žæþÕ‹/¾ø£wÞy§[¥/ùgø7’p(˜·ÏβÐʺ¬ àjd þø*2tõ×ÙHš G¨7ÿ½Ñ/â_L€´°?A’þåþ-¥å_F®¼Æ²·)#)² …öíÛ÷Æ~ðƒ—Tò’Ib>MøÛVýÓL»\)Zÿ1 #Ì€fÎø›l[Vh耭.¾«nZˆà—9©¬ŠÈ:pàÀ1&»µk×Õþ`§U'üKêRÒ?ÂCÀ÷6¥e``ÀËãêñ–ÞÛo¿ý‡jtÉ¿!•Þúïsî_©ìö‚ÿ0 ƒ{×>c\w€NzwZЗ@Ç€¿÷B¸œš‹gÊ”)AÒÿŒ3ÆÎÛ$ýw²pÅô(Žt¥È*>Пó¡Í›7ߣG $ØBZÿ‡ ÿ¢-ÿÿa4<í߯@¨iè4ð5ÿPoì{.í'jrZªþaêIö—¤YÞ/osÿo¼ñÆ–mÛ¶íT£­ÿÃâݵÀµC OäÓúÐ03 i, 8è§€Ö~ÿ·íïï—ùçà6Ò â*Ž$ûKØß7Žz;ú'•ÿ¬àÆN®TëËABÿ’:S\8tèÐ;wÜqǶ˜ø¯+û—%•ð7mý c!Ÿ6ã_3ÿî«+ÂN­$ìÛ¥c@BÔBAµoß¾`®:ŽÌöË2bÓ§O÷–ô!€!`ƒ´ýK>…tÈeï׿þõûõIyÀ¤Ð¿¼j¿MH`‘Öÿ´Ûd7½0  ~Öy¯ÛÒIð“u%j™­ýÅM 9}ôèÑ@ðKÈŸ„ýIè_úkÖ¬ëÎ3 Ì¤  4dL%É rA^—7mÚô]=î"k[†sÿ&U}›Ù~_­ÿÿaTÂ@ˆ/¨æÍ›7ÝuC¾3ª*¾›mZHµ_ZýEðŸ?>XæohhhÂí/^¬–/_>v^fÿÀN›uGœ7w›bR>}ÚÛsx饗}íµ×öªìÐ?›¶Ûª‘ÖD=@é&@Ò¨ÀtÅxj+¿Ðvï!%â_Ž¥Z’þ“ÙêÕ«ÅÌ Î‹13{öì Iÿ$\çÙfÒöİòú÷ñÇ¿tÏ=÷¼ Fçþ‡T~èŸIÛ¿mÕ?ñ­P´þ4Aì+±_K8®éñiõjšRñ—tÿPPé´ ·‘P?™÷Ÿ5kÖØyÓ¤  ßÛ|†þõõõíû×ý×ÿ§ÆÏýÛˆ~q_…ÖÀ„}ùÛÐÎ@+ŠôVÉ#ÙiIú—%Ô<˜ØN-á~7n þ ý+’ô!€!P ©¼|ù²—ÇÒá:ñÿ.%p^Ÿû·ý#­ÿ*CüÛ~Ì €ÒÍé¨ä@'w ˆˆ’ƒÌù˼¿ÌýÇ‘`¿uëÖ‰}i÷÷ô!€!`ƒ˜V.\ðòXÚøºúè£ÞõÁôè³WTþ<¿ËŒ¿© $Öm«ý´þcxöµœÛL˜–6(n²qKñ@kömå2©ú‹’*ª$ý'-¡¶`ÁµråʱûKÒ8Ш×ÙLáŠ8¯Þû*ã*Þž×Ë/¿¼ù™gžÙ¡Fçþ‡•¿ê¿1€¸p§õ0 T¡ïíquùÔvxƒZ}©A™™îéé *¨YIÿ+V¬P‹-;/aÒ§WªõÕÚÞÕ«Wƒ_¡;wî|öî»ï~."þó„½Mõ?é>ÍLýÇÀ(dÔlŒƒ"€‹ ! 0Y@IØŸTýEHÉÌ\LI²ÿÚµkƒtÿð¼ˆÉ@¸b4k{b\IèŸdUø@‡]îú—ù—ÍúäE5ú7œ#ìóþ‹ü©áo*èiýÇhˆ!6wÉi7•·«9¦…ÜVD¿,ó'Õ~iÿ?zôè„ÛIÈ߆ Ô 7Üœ—¹1$ôáŠ!Ь÷U΋øOêTqAw¾ôjñ§^òrP%'þÛTÿóFF”YÕŸÖÀ€ÊˆüÂèJr¥÷WZ½µ? ™õ?~üxPEíîîNLú—ù~Yæ/û²¼Ÿ¤  ¢HP¥ë^K›—6mÚt—î„9¥Òÿ]ÃþŠ.ù§bAšø§õ0 ‚?5,PÎë:óÛ)­ýYô÷÷K»sÐþŸ–ô/B_ÚþÃ÷Jò¥ò_æ{GÀï« }}}‰•®Oõ¿øÅý¯¾úê'j4ñX™Wþó–ú³1ÒÄ9­ÿ€-iL¸_­ƒ•x³º z{{@’Ó%é?©ŠºtéRµdÉ’±Ç‘ö™ù ;ªõl³Û“´ÿÁÁAoÏí­·Þú¯Gyä7ñŸ'à]ĽmÊ?­ÿ€íg h!ÐåKT´‚øn&”&3þ"ž¤ýß¾}Aû ÷[µj•š7oÞØe3gÎ F®ÍÞ^øÙõ…6ÀÞøÆ7¾ñ”>)íW•ÝR~®•W3 MüÓúàG 'ù$h¡Ž‹4þ .»lúôé’þ®l³YÛ“Š¿´ýûÿòÔž~úé<ÿüóéÓ—#âߤêïZùQöIÿ¶)ÿ|À€† þB3R ¯×‡Ъ­ýY¢IZþÏŸ?Òö‹¥ÅݺujÖ¬Yc—IÊRÒ?ÂC ۓϬ˜Xq㪯¿þúã›7oþMLüûªúçÍý§& ¥Ì—üË}ûùYèŠÑP.PÞ«j`ÙFDÚm¥]Z–ù“´ô'N¨C‡M¸$úKØŸTûC¤ê=ß ÂqÞ¾ï«\/3ÿ>Åÿ‡~øüüÇüâšøRf¡6KÚVü}-ùGë?`@eÿоBÁZ¥µ? ™óïéé D“1âÌœ9S­_¿>èdÎ_æý‹$ý7K¸R­oÏ×(§e©?ù<ûBÞÕËý=¢F—ûRÙíü¶³ý.#6sÿÊQü@ㄽéí›=ЪDÍ…ÁÁAYÓ<3éþüùjÕªUc÷ “þË ûÃÀpA‚+¥ƒÅ½½½éK_úžö%Ód¹?Ûöÿ¤êü8­Â¯.óµäæ@eŒ€1ôŽùP;ew œ={6˜ù—ÊÿÞ½{3 ÎÒ¥KƒCˆ$ýËü¿l«Q] ¼¯yHå_B+=š Ý_ùÊWî8+_³Ä—Ð?ÛÊ\ô³ä`@G ;©µ"¾F!ÔË@Òå SIú·MKuíÚµA¥?Dfý£áU®ˆs ßâ_a'ÿíßþíÛÚ니1ï#ðÏÖ`î0 3LݶN ¥¹ ·Ñ­ÍêܹsÁA*ÿñ(™ë—°¿o¼qì2Iùžo7É6³·YÅ×(·—¶Ÿâ_bwÜqÇ7µ)v,&þ‹þe%ûXšÊ@èÛŠ ¨6E Ÿeu—Ûæ!B?Lú—¤ôîîî ¢KD¾„ýI«(¤ê/+´‚pÅèŒ×þùœù×£07mÚtÇöíÛ»•[Û^û¿Mõ_©üŸ"s0 Ú\)÷íÛ¨Jk—/_Ä¿ÌûK蟜Ž3gεfÍš±p?9–eþ|$ý#\1|m3¬üûÿÚ»ºyóæ;_|ñÅ"â?¯õßGÛž  R„¿R´þtuÝú[ láS¤càÂ… AØŸ$ýˆYæOZ¦£H¨ß† ƽIú—@„+†@•¶)·—e*¥›¥ tæÿðÿ°IwÉ ¦ˆŸÂ?­ÚŸgÄ…âs0 å ƒ h ÐšaÒN_¦PT\:u*h“–ç)añ%Ò$ìoÍš5A«ˆ¬Š iÿ>D⼜mvâû*ùbf•5zóÑG½ü¥/}é‡×ÒþÓÄÙ#*½Å?Mø#þÀ`g¶p@•‚£Hµ_ZþeY4NŸ|òI03E‚þ–/_>î2ép]qÞ¸mvÚû*Ÿciù/cÞ_رcdz_þò—7ë“Ä¿kÕ?/ðÏfÞ_)?‰ÿEþ_`@ËÁŽóµ/gÊ EÍ€˜ö'Iÿ"úu[sp:Dªý«W¯VsçÎ'æ¤å¿ìn ^£ bdIKY-ÿò2^yå•ǾûÝïþòšøJÿE«ýYsÿ¶iÿy‚?OÄ#ð*#ÌkžÇø¶çâ=ñ–T­@„’TþŘá´oß¾qÏQ¾ÌûK¥?jˆø&ý#\1š½M1­¤å_L€2Ð;ôË_þò¡xàU}ö’­ü»¶ü›¤ý'Uý‹ÿe'ý/¤õ0 ­ h0 ÉmëZ`T¾À©ö‡IÿúwðàÁq¢LæúEüKÀߨÛäÉAò4áŠ!Ðìmʪe¥ü z,æâ–-[îyê©§ÞÕg/;Šÿ<ÑŸ—öo»€R„þ€»FÑB¹P€Ì×7䉿ŒHµ_ÿ„'NÈ:æã®O û“nÿ6ÂŒ€¿ò·ÙÉï«t«HÕ¿Ìï•Îý8£«þw¾ð _ÿC–âß4ÀeÖ¿Ëý!þZOÌ«ñYí²c—ëYùBeÆFY¢Jªýb"üň’ö'Ar("ü¨Öó}mSNËøŠTýËjùôwåÀí·ß~§Å<¦Ï^qÿE–ú³­þ+År€m*Ú½íúþýûÏ_Ûïr1Rµ”ùùF¦¨0“óaÒ¿œÖ¯E9sfœˆ“°¿yóæ{™ÿŸ6mÂC Û ó*ʧéîîþŸ¯|å+÷õ÷÷Ÿ½&þ‡-¾kÕßt©?“ªšèwóˆÀ€J ý¤*Ía·Ã:l쬞‹Ÿ]DÀ4ˆ"¦Ãñãǃª©l_’þen:DÚûׯ_´øGEœˆ¹Îfe„+†@YÛóJ>·e-ï>ýßýîw¿üÚ×¾ö¸þÞ„Ëü\3ê†âßµêïÒþ¯”ùr$þ`"X¡F® S™ñ—9i1vïÞ=nô›o¾Y­]»vœÐ—Ó²Ì_–HCœ7f›þ¾ÊçV>Ãr(ÝYprÓ¦Mß{å•W>QÃþêʼõßEü×-Ä’ð¯çüßBüt”è·¹oæy1Š<¹FR1 “þõsÄ´‚ºhÑ"µbÅŠñ;d×–ù³¼FŸÛòÒÓÓ³óßøÆ½‡–/ÌU•öçZýÏÿI˺¤þg#þÀÒ¨ëjd_‘iÄJ:¸l,àOf¦¥í_rBA—ö'c 2€pÅhæ6¥SE>³ 2Êêï½÷Þõ«_ýIdÞXŸ÷÷Qý7ÿEçÿÿ€ üäŒíPëÊzU k'Ož ø“. ü «¨Rá_·nÒ# ãî'¿Ì\ ^cò•Ï­t«4Ýapþç?ÿùüã¿­ìæým ños@ü€¥PÏØ9NÚ ÑK.ò¤_Fª¾<®Ìû‡ª¯¯O8p`L°‰È—¤ÿ¨Ð“þÅo‡8/g›¼¯é÷oÔœˆþž|òï|ç¾]»vU£Kü åˆtWÀVü›eŠ h{3Àdy¬`‡û´¦è†¥ šºïãñ¤Aºô:æc×'…ýIÒ¿ˆÿø’„TëyئÜNæü¥ê߈9ÿp³Û·oßvûí·?©¿3¯‰ÿá Ñ_¤ú_EñoúZNÔ›\n³ãìt;v¬¯è“ôiˆˆêíí›ñ#àÈ‘#c×'…ý…ËüÉ1ÂC ‘Û ?³ þÒaÐ÷ÄO<ôôÓO¿§&¦ü—mTEüÓú€Q±#ß!Ñz…;$èLxQ$%]’þEdÉA„¿˜¡¸[µj•š?þ¸ûL™2%p¼F×m‰ð—VÿF AwÃüî[ßúÖC:å_¾»Ñ–ÿ<Ño:P/Yü+ñoò?ñ†;ÁÁÎ÷ÁƒÏksYWÏSóÄ(J4éÿšÈ[öOÚú7lØ fΜ9î>Òuà+éCCÀ”Pø‡]*BÚü_xá…-÷Ýwß+jbП/ â?oÉ¿¬ÓˆÀ€¶íµlcì´4ýZH/* L ‰4úRýÏïÛ·/0ø"þã#þ7}útÄy ÛÄôH¾¯ÿ‹/6\ø zTg×]wÝõ ú;¦®ÏúçsŸ@⿎ø ;£Àµý?¼lD'í2$¬Ïe%i–¤U¡ÈÚ»w¯Î'…ý ñ¤„+¯±¬mÊgTV¢C£[ým®]xå•Wž¸çž{^T£³þWcÂßVô»Tüó?â0x  ‰Æ€ÍõbH¯ý§Š)ˆ.ÉgbHÀ_Ø=VþCñ¿`ÁµråÊq¢,\æ/n \1|oSªü¡ðo===;¿ÿýï?¼sçÎpy¿°êŸ$ü}ˆ h p¯eœ·yŒ´ç¤®‘³gÏö.Y²¤Ð“!ojH+µˆÿ°¢mû¡')ÿ .wŸp™?“¤  WÄÈ’Ž”p Êf ¿çž{î¹-=ôЯUú¬£ €2’þÿ€P‚`rŸºÞ½E7nšMú‹ië_·nš5kÖ¸ûHÅßÇ*¼Æ$ĈSªYmþÑ—¥¿ ïÜyç›uf<áßFø›Š|ÑøÀGqžwyÖŽ®M—@=çò`gþäÉ“… PyèNÕ××7Nü‡3ÿÒ= añ`¿p™?„«Ÿmbz\¿½˜Vò¹õ±ŠEQô ‡Ÿxâ‰ÍÛ¶mû0"ü‡s¸m ¿IÈŸ–ÿF‰ èH3!ËÈ[g»®×?^¶púôéÀˆ °={ö—ÝtÓMAå?:Û/N’ÿåà0ˆ!€é‘´M™í—Ϫš\í¥ý~ûÛßn½ûÕFÄ5ò7¢®Ïúç ÿ"@-ÿÿ€#ú}<¦0òÞ{ï+ú`"¦¤¢*ûøåѤÿ¸øO û¤# úX´ïó‹~6¥Ò_dÉJßoÃîÝ»}ß}÷=©ÛþO^þYíþ¶­ÿ¶•~Ä?´€!4ûŸ8nçüèÑ£´0:§÷¬"OJVT´KZooï¸kcÒöîܹ@øÇÃþD JËZÒ?††€éc†-þýú;±û±Ç{\/ï·W.í7¤òÛïMŽm*ü¾…?â0šl ˜îLè ýÉ¢€ˆ­0¬ON‹ø—–ë¨(ñáµqãÆ aaÒ¿‹džC \޲b•þ1´éuâå—_þÙµtÿPø%m[ÀÆ ð=ë_OúˆÀ((ê³.7 L\ pppð„žÅ_[Ôôc),8AÈ8p ¸Í§?ýé a²€\æK`R­ïŒmV´½zuþ7ß|sÛý÷ßÿ’>-³0òD‡-…¸Kåßg»ÿH‚¸Gü`@ „¬ÓÁκE7$"Lýu¢ùѦƒƒ‘€[n¹eB{¿Œ Ä Ä2¯1 ù…íýUòËø>\x÷Ýwuï½÷þ·þ^œWésþ¶@‘ná?¢²ÛüóÚýÿ€`¸³[³¸ír€ñó#ýýý…—1&ËüÅééé „¢,óˆÑ¤ÿv®îŸ+ü¡ðo£jèçxyÇŽ/?øàƒÏèÏ~¿]Ö/«â_dîßEø×3žG^û¿Bü`@µÌ“ ÀèmGtRÿÑ2žŒ,ÿ'þeË–M¸NªþÒú߉âC û>¡à—C4G¢Êèçyù£>úÍÃ?üs½ÊEV²–à²ìŸË±ëÌ¿Bü`€?ñn3×orÿzÎŽu°ó¯—$;üÅ/~Ñë‹‘°?ÿóæÍ› Eüç%ýw²!ÐI¦G(øE臢¿•Šÿ®]»^“Šww·´À\Éþ.-ÿ>Ë^âñ¢Ýd‡8É$ÈzœzÎñÈ[o½Õ£[­‡uÿ$//J‹:ií—Tÿ(’ô/â_Ž[]¸v‚8/iéV÷[¥ÂGú{ÿý÷_Öÿ_é¥4¥Õ? ÷6×yíøeE—øËû‚ø @è+»j~Öý]+k§]B¯è¥{õ2~K}¼Xñö~¹lÚ´iÞ…%†@u· üpŽ¿UÅ~ý]9µ}ûv™ñ1îþyB»ìê¿mÂxRvÕÄ?4ÁPˆŸ¶ÍZ•µ°9êËH”ÚdNKû¿J9–n90Zï5Êu¡ÐoõÊ~§N:ðÚk¯=·yóæwdÞ_%/ç—gý÷Õæï3èñ¼Ð` é¼R9gÏž=ºpá†<ñPFç½C 4Ĉš­*–ÛÉ€íˆÈ~Tø·#2£—°ÜñÜsÏýê™gžÙ¥®Ï÷Û¶ùûªþþ.Ay¢¿n(öÿ€à(ô]#íXúÂÙ³~ýúæ½H-&C™Dh„Æ€kçíû¹¢wÜ!ùíVÑÏBÏ÷ŸýàƒÞxì±Ç^Ø·oßiu=ÑßDøÿ>Ûümgýó*þõŒÿ)ˆÀ(Yô'…¦d™#ÇŽ;\å7$4Ò„h܈ŸO3 :ň,¡¸~–ùÒ)ß¹ãÇòöÛo¿¶eË–·õ*#¢ÄBLûÿ6Uÿ,Ñ?¢Ò«ü6Iÿˆ ¨°q`ÒÊ;òûßÿþàßüÍß´ì 7¯¡ØC“ ¼,É(ð1†àÓE{ô¾Q1}/¢—Ç·£è\Šþ;w¾ùôÓO¿ª{Õøj¿mÝEü1Êj÷/:ïø Ÿ&èm—T9;õ#ï¾ûî Ô~nÊ”)³ÚöÍMζÄM„Ð3.àã糄xÒuI‚Š¡?ç—:ôþo~ó›ßþô§?Ý¡Ï_V«ýyÉø6ÂßUü—!úm+þˆ (Qôçí0ç‰ý´}¥ÒÛE< ë•Íž=û3üIÌMh ´Ù3tôèÑwìØ±ýÉ'Ÿ|[g^œSÉ-þ#*»MÞ¶ÝÞG€k«¿KË?â(ô]/¯ À¤â7Ü×××íô;yòä]»v½«[üßÜ¿Ÿº¾|ŸI ŸRvKè𹜟ÉkQÊß¼?â0J6’L•°³¯2vòÇ:tUôàÚµky·¡¥9sæÌ‘?üðí­[·þV‹ÿ“1ÑïRéw(Òà³Íßµåñ€-`Ô Ì€DsðàÁ}_øÂxG¡¥Ð«\Õ•~]àß¿ëå—_ÞþÖ[oIý¦•ñ"¡6¢ÞEð»üùhù75ÿ€PPØ›ÜÖt9À¤þ!жçoÿöo}*xçÊ•+ƒ:ÈïCÜÿþ¶mÛ~¯—ð‹Ïô+·Yx_¿¨ø÷]ñ7ýÌû`@…Òù´Ûe-˜$ ‚´½{÷ž9pàÀÖ… ~~ÆŒKùS@•èïïïÙ·oߺÂÿ»çŸ~¯TþÕø*4½?-Å_)3ÿ.+؈}[ ë{®”yË?âÀspÙO¨%œŽÇOG] ÇñÓáaRÆé)ú0]¦ýÑýÑ¢¿ø‹¿ø_«V­ºuñâÅŸ™5kÖ2ös ‘èU)N÷ôôìÖÆÔîW_}õÃkóü"ö‡Trrž.sæßÕ ðQé/º´ŸMË?â<ì+äiâ?ÏÈ:Ä €ð0ùÚaJx¼qãÆyÚ¸uÍš5-Z´nΜ9ë¦L™rNð,ø?ÁÿÚk¯íÒA~'Ôõ |¹>ÑÛˆ¶ý"€RÅæüÿЂ€‹ Ö 7¢¦@`Lš4iòŸüÉŸ¬ÐW®\¹^ ¬ÕK®Ð—OáO &œ;wîdooï¾Ý»wüæ›oîÚ±c‡Tø³æøGÄk#«þEýˆr7lÌ SÀô´­¨Gü?êŽ@šøW)Âßt Ið§™&ÝÁñôéÓ§Þzë­‹n¹å–•ºS`Í’%KVkS`‰Î˜Ç>RgséÒ¥³z™ÉÃÇŽëÖiýµàÿD¨üà>“5ëMEQ#`¤„ëÚ¥êø~Ô €¸ðWÊ< ­ –#þ³.7=LJ0&-[¶lÖÿñ‹)°\›Ëu·Àʹsç.×ÝSù8´W¯^½¨ûŽëê~·nçßóë_ÿz÷Ç|ZoãÏZžOÛfVþ}WöËø3­ô#þ0 û Íp1’: L·˜:?`òm·Ý¶pÆ K´A°hÁ‚‹u·À¢›nºi¾î˜ÛÕÕ5‰Jký¾¾¾cZìíîî>¢çö{ôÒ|Q±Îï'µñ›V­‹VþËÿ+Cø+UnÀ_^Ë¿©¨Gø?ê¼฿55 ÐåÙ09d ÿ$SB©ô.…IÑÓz”`òg?ûÙ…ŸúÔ§ks`ñ¼yóêÐÁ…7ß|óÂo¼qN­Vëâ#Ô0êÒ¾¯9¥…þñ'NÕKEö|ðÁGtU¿/"î³Bú\ÛÔ]M€FUÿË ósyýižª?´˜eä‰_&@-ÃÈ2j†Ï]ÅkÂvµ0Esuðà<=N0_3OwÌÕËΙ9sæ\}ýlV'°C üs:¿O‡òÖ"ÿÔ™3gNëYý“‡:©ƒùNœ?þJLÜǯ2û6‚?ï2Û–ÿ2 2™3þˆ ¨¨þJÙ˜„º˜6Õÿ,‘ŸõÚ”q>}nºS`êÚµkgëî9º{àfmÌÑÁMú0[Ü4mÚ´õaFxÜŽûoõz}äòåËç/^¼xîÂ… ú õý¹]ÉÐÇguË~ÿÉ“'t»þÉK1Ak²ÜžMå9í6e¶ý—!ø}Ïñûžñ/"üÿЄýÛ¥Ò+ðY]6¿Ö` í}°¹oÚèAü¹t-_¾|ÆâÅ‹gép™zÔ`æ mÜ(Çzašî(Ð>Á´ôaºœrg}<]ç?uêÔ ó@Ÿl»âÈÈÈÐðððUîz¶^¹ºråÊ%9?44tE_?,— ZØ_ЇKZÜ_Ї‹ºBA ûA}¸¨Åü NÛ¿ Ûôôã…óöiËÒůËã&"ÓÆð-üóD³Lå úmÿTý0 ÷|Œ˜ŒÔ,¿Mð_# •s¾fñ~*e6¦e@˜>7a•&ØŠˆá<Áž'] —ª¿oáo+ø}.Âßæ}**üÿ˜Ì[ž¨§ˆÈº¸´XÑŠ°º&æ“.Éëu@Y&f@^³¼ée¶@ÝñzSÑ^/p_¡oz™ëò~6F@Ù]J•/üM €¬¿±Ïª?âš ú]vÎk†"k$"ú£Â¿+fäµÜ§™J•×P†x7yÿk ü<¹]Q ‘-ÿ¦bßFø›ˆvSÀÅ`0y]yïKÞ{n*ü}|¦d D ‚<³ žbDüt\øçUþãâ¾®Šwø6Ê0eY‹½Ä¿Röíÿʳ€¯;nS)¿mþuÇ¿£‹ Gü`@ ‚Þõvq# K¤¦ µ$#ÀVø›´þ»Œ¸ÌñÛš.—7Ò@üþ®f€* þ} ÓÓ¶ŸÄ?TØ0íH3ÒF¢â?Ɉ›¶þgêùÊÈúðeøií,þm¸ïËMžË\áosÂZØÈúy"o$Cè+e>ïŸ×úï»ÀFø72Ô¯Ÿ…f &€Oño"ü}^f*þ]…¿‰ `rñ€-$ìMDZ€©@ …~žÕ}ë¿I€‹!`"ümDU‚Ë^%À§à·ý6†@Q# ¨¸/bV ü0¼™QC O”¦ ˆ¨ÿi§£&D—ÊoûwIÿ/+ÀÖ pû¾Vr("ú}[ Y9EM"‚ß·ðÏ3ÿÐfÂÞä>iݦąžàOö>’ÿ›è2àb ¸~>l¯·5š=ÿo+þ}˜Íüõï?Â:Ì0YöÏÖˆš*CüÛ´ügµý»Îÿ·b@Úýê?®F€oÀÖ pÿ>M×ÓE¿4Âñ€ú6÷I:V–F@TôÇ/«e¶©ÿšÿo‡,_³ÿeÿ""¸è(€oqï#³Àæýò%ümÅ<ÂZÐH ÿËp1âÂ_ˆSáßìù3 OÔךð(jTÕ(£+ ˆÐoT•¿QÂñ€-n˜ÞÞdi@SÀ5ð¯ˆè/*þ›5Pó,ÊZy ¨ PÖe¦·±}\…>íþ€ÈO¼mÖ(@R7@Ýâñ]fý« þ}Ž˜ ÿšçÏ‚/# Q«5\Í€¢×¹›ˆ}„?@‡Pã-€’ö%L*Üysö&¢ÝµÒßnâ¿VàoÕ(3 Ñ«Ø ã²M²Ä¾éue Ä?@ @4“¬PÀ¢i—™þ¹ši×ÿ­0ÿ_D(–5àKü—-â)ö]–ïCø´t@™û¦Ø$qߤror}Þã› ýªÿÕ<üÝ|Š8á˜'}UZükï“Ëþ\2lÅhÌß"Þå9æ]Wô2„??ÒM7\żë\E~™‚ßwտȾ ÏxWñêÛ(Ã4pݶËù¬÷áPIÀD|û¾Ì‡ø/Û(Ã(_+øÌ>M_"ßå5ç½ÇÀ€¦ïcØš®b¾UÅ~­„÷·UÄ¿O1ìºDž¯¥õšQÕ/Kô#ü0¼‹T—yû¢íúÍšã/k‰¿V0|‰ÛzÏûôýÀ€Jìkíða´‹ð¯Ú>^³L_b¼¬ ~+ˆ~„?@ÃLß"݇ /Kà·CÅ¿,# ¨`n¤aàCð¹áÐV&€/ñîSð·’è÷¹XVˆ\Yf@3/s¹ÑÐÖûEŒ€F {ߢ¾Ö€÷¯ÑÔ=ÞÖE8—aøüUý~ˆ*k”eØÞ¶ À÷mÊØô%}ˆ[qݬË} ~„?`F@ ——u]Y"¿Êûv¾Åm½×UeVÑÐû!µ ]׈ë}ì³5k_¯^òýê%^_¥–ýzþ&€д}‘Zů÷y›2öÛÊØÿkteºìñŸè €’€fˆõZ“_o£³ aY/éöõÞ¦ìׂè€BLâ-€6lï×l!_á_e¡Y¦x®JžÞBà‡ ’û'e òFŠ÷ZßÛVµõŠÝ¾LqŽè `?¥…{­bï[Õ…j#x½¯ÑÀþJ ‰ôZßv3êM|~À¨ð~K­MŸS;RoÓÇAô@ö_j-ô\[y®ÕÄs½MÞ `_¦ÉÛ`¬"¹ÞF¯€`¿¦Mö£Úi®S„7‚0Út‡ý¬æQç9ðÃìïðÜø~à€} ž7±üø°Obø±`_ ûü¨°}~¸ØÇD>?Nì‡â€öÛõÀ øß7D xàÿ¦'¶¸»OÌoIEND®B`‚././@LongLink0000644000000000000000000000016600000000000011606 Lustar rootrootqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appiconset/icon_16x16.pngqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appicons0000644000175100001770000000074714616416776033234 0ustar runnerdocker‰PNG  IHDR(-SêPLTEÿÿÿ¿¿¿®®®¶¶¶DÌUcÅn³³³µµµ´´´ºººµµµºÁ»¹¹¹ÅÅŹ¹¹AÍRAÍRtÇ~ÊÊÊÁÁÁÄÄÄAÍRBÍSLÊ\NÊ]OÑ_PÊ_PÑ`\Ôj]ÔlcÈocÖqdÖrkØx{܇|ÜˆŠÆ‘à˜¥Ê©©Ì®´Àµ½É¿ÀÓÃÆÆÆÇÇÇÈÈÈÊÊÊÌÌÌÌÓÌÍÍÍÎÏÎÏÏÏÏòÔÓó×ÕÕÕÕôØÖÖÖÖ×ÖררõÛØõÜÚÚÚÛöÞÜÜÜÜÝÜÜößÝÝÝÝöàßßßß÷âà÷ãáááâââãããèèèìúîÿÿÿ£\­tRNS,£¶O´ªýâ 3é xE2• @H~¹©_\ŒíÀ±ƒbÄöñ1×í·ü¥­²m´•ßÞ^ó‘ïÁV ÀQÿX [úq;¾>×k«¿à>¹+˜³Ë°éÐV™vkä+¸}A  õü"ÆÕÿ±â••zíW¼.öÝÓu¾¹º‹¯ þ‚{)€Ôò™ŠÚC /Œ BɸV¸{Žîõ|­klHH,À+îXx?€ZÂ7öŠÃÇ‹6¿>ŸÔëÅç!²ïm—¿èh¸°%€ZÎÛ³ØóÜscßÀ¹,£wLò‘<@ ¤ŽHËy ®­Ü¿&eÍ,æ­>°ÎÓuï“ÁÎx—{ÒŸ @Êøé†>žÞ—V¾“ÒkmÕû ¿öDcë¡íÖlD›†‡;tÂëZÚŽ@HþöB©îeGςׂ!Ô)øAb‚¢ €çè?‚x^Ð}Cï@§/7Ëš€t€ûy‚@ðžW÷‚cÇù&z}×¢‡=Ç0"9îw`0+€à‰¶ ÷ôÐa¶¿Ÿîã·ý«<Ýú‚.Í—´¦P¼qþ^oþ?æóûé>pˆ Û66ðpÏN¡øxÐç>µÿ.{ÖW÷Òî·ÿyº%ìdüŽ&‹ÿK DÏf‹[yî­OöÀÍpDK­—8ÀAÙµˆLB1  j¢qÇ –Ésüüx?8k0>´ß‘ʳ(”ðzÚrýx?ßɓм™ €ßK‰)>ýÃÀ½åÿ{ùò~úÈ3 ½§Yø¼›àÓ? ÎÔóÙíÏŽÆ®žî§ÿ–a€£ÇžPì÷yŸþa¼–Ðúµð-Â^€±á© æÄt92ŒàÓ?Œ×`¿±DU_¢R<”V€)¼^€´™ŸÏ0ôLA¦P2J;ö´«úùaórz1Úo)€Œô{Áò?WùúaÛvx‡§ Z<üm  0Ðnù+iÑtr1Ц”Å5(€À¦áxÁÜ= }ý°aDYªªé(€À€×QZ3vÍöõÆãÀ5€@HxkM—”æÌýÖÞÜbÉc @æÀ»k»yzX'ü>Å×Û¬Ýó<ÝW<æêQ(Ô¿{ÁHŸ6ÙœúÇLO÷ë!¦ @  ëúÏ==¬C·ñõÃöíΩžî«Õ²ö @æÀ‡ëzzzXGlçë‡ 1 î(€0|omwOëØ“}ý°Mßõ³§ûºoÉã @æ€×Ã@±ÅöóÃ6GÖ)¤j°&€踺³§‡õÇ]3}ý°-Ú»”…@ @8¾ºê=O+Òl~~Ø~•ó ½ þ‚û(€ÌLõñ‚{—øúaózZð¿ç7£P2GZ/{ÎÓÊR[??l^§Åã¨p  0€±^^€f??l;ÿõ=a2çP2J0IÖ vÞéë‡íбèÇœm=´^K#À‰uæÞéy"­_‡UÂ÷6äd% øËàß4Rœèõ\ÀÛ´H«£Îâ•Ù ¤DL£Ï­Þû”fÍšyê©§ŠPâ<<ãþ_žH«±à~ÿž<p3üü’…[µjU~РAÕ×'b¸G: Òqõ‡žîç›­#(Á'ÃÇ{’<ãå—_®;|øðu¯¿þz-ùu € ‡mëéE'¡ïç‹Mý<ÝϧûP‚!N«þ)j•/*ù÷.]º<=räȃÙÙÙ_˯‹SB¾ Ú:Ê—÷3fÇ·žîç«Þ¥ø_B­úÅÊ—/_á‹/¾è;jÔ(!`ßí·ß~™üþé€|Ùã`Pœ)èÇûÁ ?©šDH˜8­úy•a#À÷÷FÕþæ›oÃøÁ®]»v’ß/-yšdA €kÔ¼µ§6^iÄ“HMî?v ê{9.ÿ*@ @B ¤¯/YFúùOJ¯müC† Y_ªT©ÊòßÎTPˆÂhpÔ—4\ØÒW÷âõ\ÀM‡¶Æí¼âƹ(‘­úùíUÿÊ+¯¬&·üCl÷پ}û'Õg•RP˜‚ËþüÍÓC‹sÒaÌùÌÝsãv Gd‘TªúÒHÜVý‚jÕÿÇsÏ=÷àСC·šÆß·oß¹òß/•,«àtîÂpÔö‰žÚÁ> bT™·€æÈ”Vá Ö €\aV}¼¦” ô]Ô£G^ÒØ™Æ/y¼iӦȟ»HòõYt5ÈoMAk¬÷to®î’ÒF$ ÑÂ(¡Wý³{ì±»daÏ÷سgÏïäÏ]!yv ’%”»À,@(6Yü_Ͼ+JoƒìÿÇëD X[‘ã•…ä×@§áG^¿T™2e*uëÖí3™Ú;êfü#FŒ8R§Næò竪Ï9 ©Aåÿ³0Ñ çŸoüÚ×ÿ™¼/Øyø_”V?¹üåL€"Ê(ó*ƒÏm¬ú…•ñ–‘¾~K¹ê¯v3|›;w%¾¦äÅ’çjÀ‚ªPˆЍ…÷‚ rÅ»anÔg2ÖØà± ¾§-Ù÷«§ëè´æãL€Ê0ó(!°·û0Ú³n»í¶k¾üòË1á ”)À•+W¾[¾îrÉóá.¨ ÀS5¡¡„"*á¼Ñ÷T^û‹+ßò|íñªŒu$y¼z|.ÔÊ\T{>e Õ÷JžuÖY|ðÁä–~$ÆvìØq€|íµ’U$Ë!E¨EÿOQ» @(Þ2ïnqÀc=vx}ªf¬Ø¿ÚÓuã~ã}Ç©Ié8f-P[­Î¶qžª¶úET°®¬Ìß?Év_çàÁƒ÷”.]º‘ þUTÁ?sõç<€HøÝÎižWÒÛǧ䚳7ñ|͉8à¤û†Þž®Õˆ÷Ä1éC¸VEçK+-®ì£ÌÃ?\ÿ믿žáÛ|á…zË÷¸NåþË©ê?sõ§D—<öØøD>üɼÞwdú†ã.{6î×ôÌo¯z¾hrsŠvRI€ëµrôå6lX÷óÏ?ê’ÓcÆŒ±bõßU¬X±†ò½®”¼0ÄꟋQŽê5`¯b½6 Hʸ0´#Çbüó÷.NÈuÝáq΢õ7Z É#KŸ±Î+Ä“vË_¯ÈxæàH7ˆ-ZŸ³· ñmg¦!7I¢;ï’ºuëÞòÙgŸ —F|ÔÍðçÌ™#f̘rõ—.ÃJX°ú—×jÿ «? Rv[ÿ¥ˆXÉÐd”ˆë»sáƒòøïŸb¾F”߯’Ç¿÷H¨ÑE5”½úýe€ï›áÏ›7OlÙ²ELŸ>¹}ëûÓ¦M;i'0pàÀß‹-zGˆÕß,2¢DBż–³ê@M!épÛüæ¾}¦þ3«…x÷Ýw' 6ì@(Ãß¾}»Ø¶m›˜2eŠÁ@KæÎ+–-[vÒkÚµk×SÚÕ šïÿ÷T®þi#± qŸ¸»JôÙ<ÈÚÖF:LÓ}QÓkS«Ç?–í¾H¢v'6Û¯x=ép÷¢G|÷5þéAñηňQ#·ðãÆ ,;vì»wï›6mãÇ2 hýû/¿ü"vîÜ)¦NzÂëdßÿŽSO=5ÒÕŸçDŸZk$Ví_›°‡õO¹Ã@Åܼ=‹¬N¼)2û0s÷ËuÀ÷÷Ý›°ÏWÂ(ŒòÚà~*%¾gÆŇ»‰‘£F:>Œ|Ñ¢Eâ÷ß· \³fÝ}¢W¯^bìØ±bÕªU–ñCÌ×·mÛ¶»æûûbõO+ûµCÜV]¿[ÿdgï]T8 P˜Êç¥îÏwŠ6SŸ½Æõq ÚMœ8Q,]ºTüñÇ>øë¯¿ 9¿OÈÞ~1a±~ýzËøAìô÷0`À¶ üG­þfÞ?¥§ ¥•Xñ†>icüëlŒË៑òÖyM’º €Û‘Šg¤áÌûÅKS:ŠAc»þwß}'~ûí7±k×® _Ã÷—ѧOË÷ߺuë_ÆDÃðý?S«ÿ%!Vÿ\€÷Øû Hm¦ÂG~ö·×’¶‹Jf9v9ÄÃÓžOü4dš¾ûêÕ«O0z›ØüðÃâÃ?ýúõ³R~ˆØÆ ÐßOw.\øcõ·;þR~Ö`Z âßîœXã_p“Õß߇ëz&EPè†+øöoL~W =ÄÕèÑÿùçŸ-ßÝÉðADûGÌÒyV¤«½nüàO?ýtÂ{wèСw‘ÿ\€üñûÊ(~а`ïñŸ÷ú¢ÂrïÑ} ½×î ªÂĿÔ×Dß±Ù!W{øî‹/¶ŒÛÍðíH¿ôã-ãGÐ1ÓðA¸ ½æÿŒ3Îhä×Õ?­Àæë«?»ì „ñ#íè§â˜ú î³…¼` ‡¯6}·k½mV3ñÌ/‹/Ƕ~»“ïDDúè{ÿý÷­×®\¹ÒÑøAˆ‰þ9ò¤Ÿ~~^ý3B¬‡cAó”ºD‹w¼%Žåôâ÷×~"«gzJw9~ÄJ•¢q 5(Æ9芌I fÝ+žùþeÑsü—®é;=‡m{¨m¾É%K–Xþ¾œ×o½^ô;qÒ¤I}žÜ)ì“mÂw9äý}³úgŒèiÂi»fù6U¸çÈ^kÕõûï±ñ¢‡¬©·×t=7öµjûAT=bƒ­=êÿŸ’EQ(`Šç®zOýð‚è1þó°Fíø?þh­Úf/gΜ)Þ~ûm!‡yŠÉ“'[¥¾¡Œß þÉ~ÿaÒ†nôóêŸq`óÞ%mÄðmã¬ÑZ~C¼NüMÞ0»¡¸wzkñêwo‹>ã²#j·…ÁbõçÛ»Eú±Ú¿ñÆBN÷±ïÊøAôh³þWªTé^iCW9TýùfõÏXÐ…(FÁd›å®ô<?Þx*Ígí…ííø¹‰h5õñþ¤®bpˆè}¬[|“H類_žÚƒYý®‘~“›7o>!ø'gýM–öSG û,ï×Õ?ãÀäMó‹VËÚ[i0´«~ÿÇ ñ‹œz³ãðNqèØáµúð1âãµÐòŠí|,íµ¸–ŒùÝϾCÜõÓCâÙï_‰hk¯WéÍž=ÛÊÛGÐ ElñQ؃•_Öí[;ˆp†osþüù'Ìù¿þúëÛHû¹Z²†‡ø¡æŸÇ1dèb«/Su¡NÆAŽ;ôŽc„ܼùç»Ä#²0çÉÅ7cE/m§–:é§ŒšèËÕŸ`>´´8vüXL€’Õ”ÈJ<ÔÝ>¾WÄ«<¶ö³fÍË—/·zíM?Ü€XEîÃ;?ÝÚY ~€Ï2Jô¶ßÞ½{/—vs‹š"TAôá4ë)²mtL®@<KŠ‹4ûn«æ=õƒÇDÀC=¢èX7lØ`ãl:b¬€×¡ÙG¦ê„<½Ç2bTñ¹}®› àZõûxðÁßQ“„/V3KŠøÊø)IšVK‡ªýP²PhÖ=¢Ý/‰" à!bÄ =äÏa|Xé‘nà €›DbüxLíyíµ×ħŸ~jí4ìÏÖ?פ“àµö=õïßsîܹëi}”Vçúvõ§$‰WwŽi0zÇ$ÿ­ô?ßm¥êB Ñ0ëîQ\ƒ>zlµaô¶áÛ´ÀMbuðy¨é‡ñ#âè½þ™&C ²zêïé§ŸþT¯¬ŽùÖOÊ›ìYŸq®œËäâ¶Ë_Jýæ9 åöþIñÑÄý·ß~kùÙˆª#W£±i €.áÀM"l×1¹Æ°ã nN 0@kúÙ-›~h§üê«>?ÿ(I&Jb?Ópºs§,zÿâ”7Dÿ1ß„Ý򣄮Ü]|LF"zן<äóÐyçw´—ªå÷l¿µüRüRü"‹ˆ6ÚÓtà¦I8Š«éŒGÂúöðéÃêŠíµM[t'n"K0ÿEÌAÚi¥ùtÄ5éŸïtáßÓG~É‚‰ªì×lúñýêOØ©ÀÀ¬Ýó:»Û÷‘Y˜|‹/0ú+)ÚcÁpà&ѸÑñ30xäø»wïnî %DÑ‚1ïÿxÍš5[©²_ß¶üR|F¯Çq£YiÂïSâ~:pÙwZt†»ÌÂÿþûïÅÂ… ­-> ߦ-n"à5h Þ}o½õ–5È©FóóM†ó!,FÙïMFÙ¯/›~(>â]‹ŽêXsü,š$â$Þ–ÓÙcû;>V{¤í`ø¨—·©¸‰@¢Ü\Ç!C¬`ê€ÿ¯¾› E*fÙoãÆ_RÙ/ÀGDÇ`8ì:²Û:¸4Ò“‰¢’ûæä÷\W|luaø6ÀM¢q¼MÀÐYŒcU÷¡¥ƪ_‡y-^‚hÿŽd»ðj—²__6ýP|7¹øN±öÀGÃßrh›øHž$|K‚ŽÝ®'+÷¾ßÛÑÇÇ¡HáÙthܯÁÀhܬô²ßÚöã>æsºŽXï©þ´nݺsÐÊ~)>#NûÕ¹y¨ý¯“ÀÁ Èé÷×ÏuP&ôpà&‰rÜj@øøÈñ¿÷Þ{Vá®M¿“^‰ú9 ¼=he¿ròÎÅ¢½KE‡Þù‡É¹ýÆ8Éø%G:ÆoÓI¢q¼#uðïØ’£™ƒ;a úu8]WA€{¡ÿ¾^|ñÅ>Ò>®“¬¤²_ €O1IJ Âì»ÏÀC.8Nâ ŒGM~«=òûHóáÜ)‚ ·üÊ!ûå´ßÆZÙïÙjõLêÃI>˜ôÑIÆÓp°òÛà&‰r¼Ôàsá‹£²C;‘ž4¯Å¤WAÀuã÷£ÿÎäçŽV³þWöKÈP¶ýáy×m$``Ï—Å'“ñœ-¨¯þõêÕ{F5ý8•ývõw€JjÑzº¬øÓ‡y`V5øµ‘ @*‚¨éGzi¾Z_ë׿vñôBèÂ)w ó²rNú©žYÿñ€ò€àq˜9¿.n"ªšló1´Ónè»â&RшA4‚€¯õc¾Àúõëw±úªì7(¬RÈq^Ec fðO¯÷Gä+i¤ì` þ?júáëãx.Ì´cúõ™L„  2R7~9Pd‰Öò{¾ZýÏH—Õ_€Üê† «Ê&(Ýe4¨àc½ô‡þ, Ê7HF0Ðü"ý]ºtù«¡G¿6“‰ûÞð<꾃 °ú_£­þ%ÓiõÏÒ.Þ€BÊ¿A{c%Uô€èç$ÑÑT²™d Å{É”ò>I”¦¶”|X²M‡&™Í>‘@²kðØ ¸«¿}hˆÉd ‚Þî«EþÓzõ7 ¯jh(ªÎUÊw¹ò0÷¼® ˆàs+™þKÇPý[ò6ÉúJ [ÊŠ¹ úöõò7HF0Ð|®=ºë«¯¾²Î°¯Ñ¼Îd\$}تþjÕªõ˜æû;µüæúêïȯ¹g©XÀ…ªóé2Õ‰Fˆ«Ôî€L kª‡óÕ—ŽúôÛ*Uªô¶®æö?”Ä#€šþììlËøéGÔ]¿F“¡Ä ‚€ÿÖb£æÿ[µÐ9­þ-û4PP튫/«ÒU±²«Iã%ª!¥šÚ¡An’§Ó¾oæþ‘þs2¨TÔ`z&õ"Ò:!¸>“É3ð'ûý\|ñÅ÷kUç¤ó꯻z6ÀbÊ8K5?œ£Áæ¹dJXNÕj\ R䨯—†5T˜ÑDã&ñFê࿈ô£¤‘~¤Ú°í†{bÓIb„Pbâõ¨4¦ýd«•]óoæýÓjõwÚäÕD °‚Ó•WyÐJÉä³”jCµE¹œÚ•Õ–yôEzé¯nX‰vÜ‚ø>R{(ëE]?jì±ò›`2‚`Ôû£ÝxSáÂ…ïP.n¥tÌûG*y”ÚåWÛžBJ «b!25,¢xšòIK*¨˜'OžÚ²„vŸ~2¯›Ñ$«&¯9r¤µåG¤I0|7&SPxdIiѢś*Ø}©*†;3ªþ¢qt!È«nþµ3 SÃüš T‚p†zH/GT5Òf¤µœvɪ Àçàî7ÞxCôéÓÇJGbå×J )ø”G뿯O>ùd¶Ê®\‘ur¿Ú¯þá„ ·&dj™×ˆÓÀ¨Ø²eË'Ìü¿i(^Ü/ÁÀE‹Ye½0~9BÛ þá{ )©}Ї=èó’K.yHeUªd<í'íW7Èå dê¨ïÊ hPI¯ÞÓjlqÝ ‘5ø\¹šþUÓ¿müNô*¡Ä ” @ŒÌ­Û¶m{¨;í¨#¾S!djø7‡¢-¸•å1Õýõ‡m´¦1$²&ÄÀŒê–×bEú‘ãÇu˜L• à=Œr_*²PT]¥2*vÑO`'ýé-ĺ`‹Š²íKemŠYè´&"ˆïaÖ V}¤ú0º )H€M'!H¶ }þÖÖ¿jÕª˜ów­ ü—îE?Dú@A%Ø®V“%µ ôÁŸºDãD ÄÏIC²ü}Dú‘ï7߉ÉE™[ÿÇ[ÿ›T1UE—ÀWÂw`Wl"E…ùt—Ëö*ûÁWh¯` ÞÇp¿öÚkV¤Fãw¢W1ˆ‡ àóÍ‚Ùì3++§â*UGaò‘±?"XPHmUá³^!ÄÞ¦×D"±a¸8”+?ŽãFÖ?nbLAÀÏ›C>dzr[éÒ¥ÑÕŠÓ}«[§À€ð¥S+W Y´_orò…ãåÀØÑ¿¹}(ôA==¢ÿ )©ÌÐ_ö ¹õÖ[Ñç_Gmý/P[»â?·`gN˜Þ$«kê]€(q %^ƒøÿ0(œË‡9ý(¦™={ö_ÆïÄd ‚nüf?øÌ3ÏôÎÊi«®¡Eý¹õ'+åK•*uƒþëà5h þ ?m¼ü±åf §îD?Œè=þ œ<4Mþ¾nÏÊéôCÁOyný‰  ÀI#ÜË–-{s$àÕ ÀÏÃÏG°í¼¨¤ÃÊoÓM‰A¢×dýdeâŠ"EŠÜ••“òC§Ÿ]ðè?h¨ û×ëE+‘º¤!Â`çĶ>¿.&S)ø Óøe9òŽŠ+>(W7fåTû!åg÷ùåÖŸªÀw­P½zõú¡À«ƒD¤Û~Œðš>}ºeüNL„ „'AÀkÌ&û\wÝu8Øùþ+”ßÀ)J¨íN?ný‰@ @~]d5ÛíúC@]¨Ê¸HjàCcZ/xØg ú¯ÓM R!x­™îÃl¿fÍšuRA?äû+;øýÜú€"¶œþùÿ2GG+º`ÃGY/ª QàAMðƒ 8?²">úh÷¬œ:ý0F ùþÒ.~?·þD àü’%KÖÑ~Là WïÖ*kGú?ûì31qâÄ¿ ߉¡Ä Y‚€Ÿw2þvíÚõV´øVUA?3ßO¿Ÿ´XA@Yp­nv)p4»üûàÁƒEÇŽ­C9±‹ÀÊoÒO‚€×a‡bæú_xá…Y9gYÔVû”qúÑï'°Or®5|øðƒ¶ å5\—œ.(šA¤+?Ò}pàóÛt‚X!”D"x³µ|ýõ×Ge圓€qéÕµˆ¿]ìàx0r¯) w»y`$»øÐÈí£º£º‘ãG´_“©¤"Í"eü£5ãG™/F{•ÍrŽø3èG^쓜¯–]y«tc@N<œÀð0½Ñ~øþ0,¿ý"fm¿íóËmÿ eü×+ãÇT_¤û00Å)âO¿ŸH Àüº²Òm9,Ô.Ó{`øèáGîÆ^~›nB*AÀû:ùûhîiݺuO?‘)pR3䲿}ªn0('ãGeêø1ºKž#h aü¦˜L• à¿Xõ¶ü2h¹·aƳr¢ý×fåTù™ÆÏt‘Ö€‡ýŸÒ G™cÁMãG°[}tòaZ/Ò…¶ñ;Ñ« „ƒhñ§@(Ó”Ëd 4ðÄ!©µCã§}€}ˆ+"Ü—Éy|Ù¡Š™«#¼ðïpL¦Zð5 ß,éÕ«û¤¿?8wîÜhìÁž8$µº ø9ÿ)4~"À‚üvÕ矾«[-â0únݺY<°¥†‘Ùt‚d ¾ër[ñUGß*Y×ÿ¼¼_ß…(ïÅ0O¤úÊfåDûiüDÆvT·U‘ƒŸH{0-ªVÆs•áÀˆ0üò6µ²6½ôÒKÛÉÕ¶ë³Ï>;HvýM…0H{ ‚mñ2rÔä÷ï߇tCVÊÓ§ËêׯÿŽôçÿ« ¾±ÚÞÿ[­ô0úÚjµGýþ¥ÊÇ¿À0üâj»j˜UŸÆOddÀ®,­bfå¤ËàG£Z¹s Èh Dáne”Í‹/þÈÕW_ý|½zõÞlҤɇ=ôP϶mÛfwèÐa¨ä0ƒCe>¾_«V­¾’u=7nܹN:ÿ«P¡¢õ-Ô{6QŸÑ@­ðÿR×p£ èÕR"£¯ª­öçi>~)ÃçªOP 7  Ú”P®ÚƒQ‰ò£k(1¸F ±®2Ê[”þ[k}µJƒ ]Ø@ý{}%*Øi ÿVõžu5c¿F}ö•Êà«©ëºH3úsÕj¦ hž¡mõ *‘s3|?‘±n€ ,¤‰rãç(㪨Œ­ŠZm«+C¼BåUÊ@k)c­­‚pש݃¯S¼V½¦–z«”Ø\¡>£ºÚÖWÑ ¾‚ÚÞŸ£ÄÊ6úbjµ/¢î¥@˜Ÿ†OP´X@>µZQ+hIe\ÿPÆVN ÂùÊ+)£¬¬ ôe¬UÕ*]]ãeŠú÷ª©Ÿ­ª^[E½×Eê½+ªÏ²WøsÔµœ¥üú†Ñ›«}^Ãð¹Ý'ˆ®€½( Œ Fuº2²ʧ>SàÙš0”UZN¹ç©Uº‚2`7VP?{žz]9õ^¶¡Ÿ­{)ÍàOW;•SÕJo}>Ãè¹âD®€-ön ¿2®ÂÊØŠ¨ÕötµC€1W†YRéß•HØBa³´Fýûgj^R½WqõÞghÆ^Ä0x}{o½ÛjOÃ'BpŠ¢-”RÔÅ¡ˆ2Ö¢J(l±p£ý3E #/¬¨{~ÃàVzÓèiøáAri•[„<šñéÂ`‹ƒ-4¡EýgókFžO{ÿ¼+¼nð4z‚H ä2ŒMStˆ–y æŽÐØiô‘D1'áÄÂͰÿ¡¡Óà "Â/AAAAàÿÉsÃ$tö3IEND®B`‚././@LongLink0000644000000000000000000000017000000000000011601 Lustar rootrootqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appiconset/icon_512x512.pngqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appicons0000644000175100001770000006455014616416776033236 0ustar runnerdocker‰PNG  IHDRôxÔúi/IDATxÚíx\å•þϨYÕ²Üe[²Ü ˜^B ”dI²v—ì&dÙH²d—ä¿!Mo”¥‡P–j:Û€PmÍ4î6î½K¶z™™ÿ÷^ëÚ£ñ­SîÜ{çýù¹dI£;ºÝ÷=ç;ç|"„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„Øá%àï›Bò€8/¿[B!yo (ü}BÉC3@ÁÈŸß!ׄŠ<E!~wþî !ü”?z#@×ï-’æ×BH>ˆÜá׆ÚPÂ)ü‘M!„„ÝXý?žO&€BìßU$÷ù „äSôo$ôq‡F ”&€7ÿð¿ÕÇ"³„æ¨ßéÛ¼0¼ùWü“E=ùã½G¤÷­ÓŒ_#„ FøN#~ýýXÂáÄ„Îðælñ˜¼Á/VG‰:ú%˜§€¯ BH€•øÇ{E¿[êèêý²A½ (âë'âoíG’>VØ+þ'?}Î¥£*.åå$„C™wì¬a½âßc`"IoïÁ¡04ÁÿˆPÔ+þå'Ï>ûçJüÀËI!¦ KÚ.ÆYO+À É™øG,Ä¿â¤Yg_YZ_ù}^NB±Õ@}‰4fbÌîÕñ0üð$¸â_pˆøÏ<ëʲѕ—ðrBˆ-Ò·F*fòu¡ÌÐSü«û±æ_¢‰ÿ“g]QÖPEñ'„Ô @¢ °[÷¼! ð·ø'¿_`ùïÿ'”ø©º˜—“BSØ{D¢|£VëxXDŸ xâ_d ÅÿÄ'ÎúYÙXŠ?!„¤‘ˆ'e"a‹¿UÚ_ÿÊg|ágåc«¾ÇËI!)gtOºïÆmŒ@ M @pÄ_7Å"ˆÿ¸þBÉLÀÌ„€àˆrä9ÅŸBÒÎ$€˜É}X$„üýRüùBHf3ÉÙV»û7 ñXü×Äÿ»¼œ„’QP`q?¥ šø§øBH† €‘à;Ý95äžPü !$ß3f& æžøWüûQü !$«˜Üjm&ü¬ žŠÅŸB²zŸ¶~»{; aäO!¼WÛ¡ÍÐøWü/§øBˆ'÷k«È?´u4BÉ÷ @(#|Š?!„{•ÿ4B!yñÓPü !„ØÐgh(þ„Âûx¥þi(þ„BòŠ?!„ð^N@(þ„BhÅŸB ÅŸâO!„€âOñ'„B@ñ§øB¡ øSü !„ÐPü !„Š?!„B@ñ'„Bh(þ„B ÅŸB¡ øB!4B!„€âO!„ÐPü !„Š?!„’§€âO!„€âOñ'„B@ñ§øB¡ øSü !„ÐPü)þ„BhB þâ@ü+(þ„BhÂ!þâ@üKzÅÿgB!4Á6ÉQ…øWRü !„Ð;ú7ÿÅŸB @xÅß*åŸøŠ?!„€™»ŠÿbŠ?!„|¢(ÄÑ¿•ø§ýg(ñGñÏGUËÀâ2¸x ö¶º¨¿T–KyA™”«·eý$)Ð>vñ¸´D[µwÛbÒm“Öh»z¿]šº÷JcO“ìîn”=ÝMÒÔ³—›BEñ7ûX²(½Ú†jõ£ø‡ûÅ)’1eõ2¾¬AêJGʨ~µ2²÷()(öä9tźeSçÙÒ¹M½Ý*;6˪öµ²¶}£ôÄ{øK"„Ðd8`ý&EþßãË!\ RÑüQUSeZåT™T>^‰fr ŒÆØ²ÑÚ‘HO<ªLÀYÞö©,jY&7/–]Ý{øK$„Фý›-Àô;ñɳ~Z>¦Šâ’šüS«—ãú¥EøÁyî…2¡|Œv|yðÙÚÇ%xoßGòöÞ÷哿¥Òïæ/™Bà"ú1®þ‡(Uâ _Á¥@­Ë¯Äþ¬Ÿ“ûc¼FPFô.?ä‹ÚѦj ÞÝ·@^Þ󺼿ïc‰ªŒ!„Л³È?1PÄ—@0©í7L‹”Ïxš–ê;å…eòùšSµ£Q¾Òø†<³óÙ¬²„’¯ bò~òÇŒ¦þò%,&–“ó‡þœQó)Œä篯Fu)üÓÐ/Ë?=O4/’Y;ž“ù{?”¸úG!ùžH³À¾‚Á‘•Sä»#¾!‡WNæÅ8ð¢ŽÈ±UGjÇâ–år÷–‡eaËR^BHÞ€D±7ÿ3ÁÕò¼PNè4/†0F7Mü½V4xǦ鲮cc^^‡¹ÇÌôô|g,8Ÿ/>Bã?ù}#3À @€è§ï|}ØßË7†-ç­{AFéØÃŽ”§U}À=[‘v5˜ˆdóáÒ ¡ðy&ÀÊŸq\ÿiòßõ?”¡%ƒy1Rµ_Su§ 8^®^÷g. dt¡°#ƒöõbÑ7úxrôáKÀ_ÂõoµÈ5ãIñÏÃK†Ê'—Žú¶6g€d'@3Ì4€àÿnìåZ•?ɬ@!0¡|¬üz͵j/‚}¼(ͨ[ W39{7F ±äL¿ûó¤?Qü³È•‡É_&_# ¥u¼½ñðBhü(úÉ_c– 9ä´'ÉŸ'^%CŠñbd™Zµ$p«2Zh©$™ºòBhülÌZir ¦ÚýrÌO<Û‰ˆ¶µñ5ã!ǪBK’›L„·B„Ì€™ 9àì§Ëÿ4\–·Óür Z,ÿ0ö š€ŒÜlx !4~þˆCѧÈ!'U+?ýC­…ŠäÊ”ÈoÇüT«¿ éÜ@ù&4AÍÐx̤òñò«1ÿ‘¿ÀC÷?2¬d/Fª7.€@d„‘nÁ®}w¥”ª4ñËï¤Fk¿,ް#µ(o%„ ˆ†€FÀCñÿr̵숿ÀŒ€Žºˆ"¥ — !–|»ö_Ø~æc¾:ä\9½æ^f @^fH–˜R1I.öU^ŸsYÝÅ2šn%„ÐAè)üƒjó+. ]ÅK´Uš£-¡ú™úU)p _´Ì<û¬’¬rQí×eT¿y¾Û»vʆŽÍ²¥s›lÖŽ­Úû±Ni‹¶Kg¼SºbÝ}ÿˆÔvÅe¥RVXª8/&#û —êÀÛQ¥#Ô5¨ ÄÏÿ™'ÈçÔRÀëoóÅë$Â`¡t†€d ˆßùj#?³§»I©ír?l^(îûD¶vípý=zâ=Z6@ÏÀ@$3 ¨Z¦UM•#*&Ëá•“µÂ;¿‘AAà»{?ÔL±Ë°ŒŠÐr?ªûŽû Dòóß”gw½"+ÚVyrΦž½ZT­GÖÈœ9ð49{ÐéÚŒ~?}¾>ìäþ­ñEÌ ¡ Ä'ô?ZÇøê9­i_/³wþUæîyCÚc9}.›ÔÒÂô­Ë[gÈ©*íŽ"É©ªXÒ/àù<»ë%ÙÕ½‡/fË ¡ ä`T¤þ}{Ä¿øæù ­Ïæ‡UÔÿ–ÚºÝ_›·ãù¼Ùô®vœ\}œ\<òB]:*çÏ Å›ßþrÓÆÿã ÚòµÎ%dKH†9uÀñ2±|\ΟG4•G·Í–o/½L檔¿ßÄ?™wö~ ß[ö¹gË#‡æ‚/ >S4å ÚÊ0@h9ý£ò?× šÿ²•¿”»¶<$*fëQ¦åám3åÒWªe‚-9}.¨ßø×á_ã‹ÚòÊ[(¡ DãøþGÉØ²Ñ9}K[WÊ–_.KZWö:®j_+—,û©ªÆ_ÓçqŽ*Räp kÃK !Šú圞ÿ­½ïÉO>ý•ªºßøk‰BÅ_®¹Z[¾ÈØ$è˃Ïá Ûìʽ !¢EþÇö?2gç³é=ùíšë|±~ž)°$pÕº[r:˜ç«CΑ’îÈ ¡ Ä„¯¨H1W7Äm«åënÒ3l ˜?ÛÇÍKrr~ 1úLõ‰|fh Ésú©¸gülNν³{·\¹ê*öK%ð»µ×i?k.øÒà/ðEn˜à-”Ð<çój~|Ea¹ççEkßÕëþ¬MÚ ;¨køãÚ›$y~×ö6 É€’çœ;茜œ÷ÉÏÊGÍ‹òæ:/Tû<½ë…]D¾£ ¯ ‹ Ég”#*óü¼;ºvÉý[òo^=íÎÁˆÞ3jh½2@hHóùšSsRü‡Yú¹žéŸ °™ÑÃÛfy~ÞúÒ‘ÒPZÇ|b€€î@Òætµþï5ÛÔ|ÿ—÷¼ž·×üùݯÈ7Ô”>d_¼ý]ŸšÑ]ç33п‡KÕŽ—-ÑVíýBO•–Y~}YA™š°XhúùBõ¹²ÂRËïQQP~`þÀõn—çÔ®–„ÐÏT\#‡ULðü¼˜ñÆ–?§`ÖÁŒíÏÈF]äéy±a· >ȤïyÍAA( \ iqRõ±ž§AÑ ÷ÂîyyíŸQÛõzÝý0¾¼A{œu æÄ…€ÐqbÿcûÄO©˜äé91ò·#Äþ¤Ê¾žfYÚºÂÓsY9…Þ° €ÐÏ™P>FíXâé9ßÝû/¼ ìûØÓóM*Ï‹î8€ÐÏÉÅðŸš?æ…7á} ÀÐ’ÁR]ÔŸ>çÖâ1“˽5ë;6ÉÖÎí¼ð&¬l[ãùP q,Ì9¬ 4Ä{àqÀëw#Áo‹<¾|,/|® k ñ’ŠÂrÑo˜§ç\زŒÞ†Å-Ë==ß„²1¼èÌ’O ÜëA0+ÚVñÂûìM`ÀÖâ!cÊê==ßžî&NÿsÀêöuj@gç«+¡¶·-å…g€Ð¼É”z[üÅèߨ"xmûÏ·,Ðævâ)£ËFÑø”m«==ߘ²:^ôÂ9„€xJm‰·€^‹ZYéñµV2”=§B@<¢(R(ƒ‹zzÎ í›xá²±c‹Ç`/za ¡ žÞð "Þ½lºãݲ½›€NÙÔ¹ÕÓóÕ2[ÀB@¼b¸Çýÿ›;·1ÊqÁžîFO7LÞ€B@ò¯#¾M§´ƒªÂ·(Ó䃊k¤¤ ˜>‡¿oBR¥ˆ—€¸Šø<6;i\›&µ 0Ö£ö<´-ìùÒCØéŒuIW¼ËðsíÑUýÕÞïŠuñbâ‘ð8廹ƒÂâ÷k†×DªàŒçgô¹Ì=f¦§?û÷—_®½m¶®ÇÇãqõ¹6ÃÇ¢¾ÅËåBhHZxݸ½k'/ºKvx\49< W²E•ÖWxÝöµ§§‰Ý%»U! — e+ !4$Ü`½·º¨ÊÓsîêÞà ïÖ4u{kšª‹*yÑ ¡ aÛªA@^mZzZyá]Òèq ª°Šfú{ý#•Í6§®[Ç€BhH¸©*ôöFïõZvXÀ®€f•çY1†…4„Ðp€¢ OÏ×ÈÀ”ñ²€BhHÈ©.êïéùš¹þŸ2-Qï®3„аg<¾Ñ·y˜Æ^^»²Â2m—HB mÀÛ"À¶X;/z®ÚC+™ „€„—JÏ34©_»OÏןu„Ððâu`+ @o—O0#‚B@BJI¤$Ô"® €·æ©(ÂmE¡ ¡ÅëB/.¤cž¼½vÅ4„Ð0ooòÜ*5kíôøµQÌ‹N +^GyÑx”=Õk'Þ^;¶B@BL¡Ç ‡ 0æ‰K„Ð0g ˜ 03‡ÌB@B‹×iÞ˜Ð&PÀ !4$ÄÀë @Œ= ׎m€„ЀŒÑïáEȵ£ „€Ðd0Šå3„’ûKÄÛ—Kœ—|ï¥ ¾ÍÔ àEOþEURäá(`f „èkˆ‹HÏÛµÞŠÂr))(æ…wÉ£ÐÌ !¹þHºß„€8&¦¶|õºuî©öÚ0@ˆ_„?bq@ï‘,ê}?B@\±³k7 €ÏXìíÒIcO/:!Þˆ¿è[=z_|íµ×6ÜqÇ“ðâŠí];== ýŸØÝM@H¢~£›EþXK-»á†>7~üø~ýë_¯a qÉŽ®]žžoXÉ^t— -ì±ØÃ‹Nˆ·¿Óÿôê|Ùm·Ýö/uuu×.]ºô+Û·oëŸ$Ä· ¶d/ºK†÷ê±häE'$ûâŸñ'þß(ê‡ð÷Þ­Ž( qŸèö:0”ÝuÀ;ӄΦž}¼è„x/üñ×"ÿýèGÓN?ýô{úõë× oÛ·ßñàƒnÐÅ£ î2Þf¼NgÒ‚~ª°Ê³ó¡&€â™øGL>¦û•^wÝuÿn#øéFýHùk½ýßûÞ÷ŽRiÿëKKK'Ú=±… Þ¼víÚæ$ñ$ýŸsHj¬éðv`jÅ$^t&•óö5àñR¼6$EŒ¡ˆ3£à¶¯ÿ€ð«I~ý¯¿þú‹¿ò•¯<éDü[ZZýéOzNö§þãç8øúåý­—Ï 8Ù³óM«œÊ‹nwª¼½FkÚ7øîDU4î¥(E ùÂ#Y‹úQè÷­o}ëUíÿ§øõ×_¿A-tÊþ¡?¦âO@ýM®˜ ¹íˆuò ‰cËF{k;ü—ðÞðJ ¿•Ð×ú {ú•ÿæ7¿ùÊ´iÓ~S\\<ÀéIwíÚõúí·ßþaoôo6e€¤Çª¶užž‘ÖÔÊÉòá¾Oxñ 8¢ò0OG#Õ¾®}£/ €·¯KÞBC.ÞÉÛ|Ìn󻨿Ÿêé¯ýþ÷¿ÿó¡C‡þƒ«¿Éx<:{öì¿ÈÁyÿF™fHúlëÚ¡í?¨¸Æ³sb€ÀäÚxœþG(ºü†×yÈJ‘¼5 q ÃRÔ¯Úûþîè£þ•Šú‡¸}B›6mšóôÓO¯’ƒóþž[Ã"@’2KZWxz¾cªŽàE75GS¼ýÝ·¬ðåuð:P]ÔŸ/¾üÊ8ùœÝ4¿BIhíƒð«¨¿Nmâs½zûçTÄ_ ýéxàî‘ým1ƒçg€dX–ËiNòì|‡©:ìA€ì9ÈÐ’Á2¡|¬§ç\ܺܗע+Þí±¨â 0?Ì@b ÛÈ¿@æ‡飲_ÿú×ç!êWC}§ú?ýôÓ'ÔÌÿ­rèУè?®ÌÀˆÖ¸O«9™>‰ÓT7†—ëÿ`i«?3^/K0À ƒÈ?yQå¹çž;þÁ¼óøã¿%ñïîîÞ{ë­·>¤Þíƒ ,L3$uV¶­‘Öh›T–{vÎ3jN•ÛŸæÅOº&^‹¬ As· ?3at³¯‰'½5‹üÒÿšø«¾þ Uáÿ/S¦Lù………Õib‹?¬†þ4%Dÿ}¢|“Cû’2Xoý¸e±œZ}‚g眨†ÝŒêW+›:·ò À’ȤŠñžžs±ZúñëÀ–h‹§çÀ @ØMAÄøÛeŠzÅ¿ì’K.9öÌ3ÏüMyyyF š:::¶ßtÓM³¥ïÚÜ©àI‹÷-ôüœ_ø9^ø^>¯¢¯ÓÿïíûÈ·×£Ùã%€ý†óEžè߬]ÎIŸQ[Ÿ¶kŸ:Ê'MšTû—¿üåççwÞã™íoñ½÷¦«-[zÅ¿Otoù —HF @³÷my_|–<¼m¦t{\ðå7°ÓyêZxÍ;{?ð¯èñ60ºtoáüÅ&ò94ݯ‹¿Vä§ú\YRR’Q·¨Fþ®»á†^”ýkÿ1§Qâ×Ñ´ØØ±EKÇ#-ï5j0ÖYO“çw¿š××þ”ê㥶ß0Oω €¶wíôí5iìiòô|X‚éWP¢mEB1^óO½º_K÷_tÑE‡ŸuÖYWª1¾Y)ÒyõÕWïéééÁhÔ¨‰ÐÇ„K$Û¼Ýôžçç¼°öŸ¤8RœÇw¦ˆ|cø×ý'áµ9AfT¿¼ „KäTô'§úõêþ UÜ7ò¶ÛnûùùçŸ?;[â¿gÏž%wÝu×;rp»_+Ñ73DÒçͽÞ€a%Cä†~)o¯9Ú!'•ϋߵŸ À>$T&@Äù@]üËUuÍÕW_}‘Ú‰ïÕúúú‹#‘¬E(ñ§žzênõVþc‚Kÿä¯fHFÀT¸Æî&ÏÏ{QíZ 6ß@ÛåŒúwÏÏ‹ôÿòÖOi’8®êHÞÂaì?ñÐ…¿Týÿû¿ÿû¬‡zhÎá‡þ{ÕÓŸÕùè›7o~gÖ¬YKä`ß¿Ùa·À É€Uÿ^kzÛóóbûå£/ÕÒ°ùÄ¥£¾#ƒ‹z~Þ¿îžëûkÓØ½×óõø“ªótÉŠð»‰úuá¯ºà‚ ¦a˜Ïé§Ÿ~_YYÙ¤l?Y5ò7öøã?˜ý›¶4$#¼´ûõœœ÷(µ ο×~=o®ó!ç :ÝóóöÄ{äå=¯ûþúÀŒz=*E€7ø ¼ „'ú7Šøõ {4á?å”Sî¼óÎß|ó›ßœSSSs–ˆ7½¸7nüÛܹs×ÈÁÊÿ˜šú™üÿNvŒ°¢m•¬ïØ”“¶¨UÅp›U' »ç…úUu¸\VqNÎý¦*ôÜÛ³/×iUÛZÏ_‡ßv¾ÌÛó–ììÞÍ›A0Å?±°/Öû6±íO3‡vXÍ~ðƒ=zôEjŠ_¥—OTÿÑG}ô19tíßM@„K$+Y€=¯åè/8"?©ÿ|n@x÷ @¡ÙïÇþ,gOìx&0×jUûZÏÏYUT)¥Ö¢Jýø¡—¿bèСƒ®½öÚ謹—ÆŽ{i*â¯IEEEÊOtݺu¯¿ùæ›ëz£ÿ¨ðÛFÿÂ%’IþºëÕœ ç)ŠÊ/ÇüDÎU)òðEþSåºñ¿ÎÙ:óÇÍ‹e™Ï‹ÿú€u99ïø²1rÏa7ÈW†œ#å…eY9Gea… T&óÆ”Õó¦“ù @â†=åjxÏ5·ÿ몭ï9ÕÞ÷sµUï T„„ Ò¿imMmR¥Šþ{T­¢ÿ.é›þ7z'Ñ?'’ÌÒ¤Rį5¾­†ôäfT/Š/ýÒPZ'wmyÈó½á³Á—Ÿ#?ªû¶28¹ûS}tûì@]3,äŠEÕrYÝÅòƒ‘©Í²VkÙˆ]»´M³ÚcJe ´š˜¹õ…¬åR\P,å¥RVX*%‘Í@ôSŸÃ×Tª¯íÁû}³?øž_þäBÞxÒ¼mHßÊ~cú’Ë.»ìój§¾‹•€§Ôo ᯫ«“ÊòåË¥±±1õ×ôªUóÞÿ}ìÀÕ-Ö…vË}'þþI&yjç_sftþyØWäðÊÉrÕº›UmÀ¶@^G¤”!$Ÿ÷x§¿d>U;>¾¿ïã@];Ô*x=2ˆü•‡iG¶€IÀò—_7f P@/ð%üÅ—^zéi'tÒ·Uº>%áGšÔ¨Q2dÈéêê’… ˆüãñ¸¨ùÚûªk@¢Ñ¨ö56Ñ÷Ã?ü„Iô÷kÿÜ d¤Š?iY"Ó*§æôyL©˜(w«tì#*z}|ûSÒëÈÝ(¢¨‹G^¨¥zsÍÿmy(¯Ãj“ªQCjCý·†× 2mÑvÞxRGâ1¼øâ‹?ãŒ3¾[YY9.]á‡ÈCôÕV½šÀCèÕØ^QÂöüª*ihhE‹Ù›ðO?}õÃ?ÜÔk¢bßþç(úg€d…·>!Ó&LÍùó@ -‚_t¦<²m–ÖÇŽv6¿ÞÌOª>V¾UûÏjÂß8_<§ù{?T»=~È×àj“*¬Å‡ò‚2€4@1ßøÃÓN>ù䯩5ú1™~°k×.Y±b¢wlÙ«Eþˆø*(UHˆ–>Ûï­ŒC×ý÷ßè?¹ï?*©Uþ'þŸ€d!új^$KZWÈÔŠI¾x>üãúK4q}eÏßäEÕ.¸®c£/žÛ â9sàg土÷UQê'îØ<=°¯A.âg(Œ†úo µ»º÷ð¦ã’Uÿ>¹}¬\òðÃ׫ˆ?¥]úŒ„lÙ²EÖ¬Y£‰~SS“õëâšøÜŽöó*TíÀË*K€uÌnÑ·ë°ŒþiHÖ¸gË#rÄßúê9Al/öUíÀÜ /ZмP6tlötSüŽQãcÏø5Fvš/'>½óíº•–h«,jY®uP„ÝçÇŠäˆö‰r\ëRU-y•âZü•aÐD|ðàÁ}>Q_½zµlݺU{Û¶mZ @AAŒ7N3 ÝÝÝvÑçôéÓgªw;ä`ë_Ôeôo–   ÙÀ0<æ3NðåóÃF:úf:è^XܲLÕ.,Õj¶¨ÂÁ¦ž½»A×– “IªžèU˜xDåõï_°µs»fà‚ÎËj.EØ @¶Ú Cwbertëar”:JãýRújg?-⇨ˆµ–òß½{·–òß¾}»Œ9RÔ¾Ú1yòd­ PgçNû=+–-[öâÒ¥KÓþ“‰3@<áN•B>©ú˜œ¶°9a@QeTNÔŽX§f¶vm—m;¤KÍ7@TÙëÑÚ¹pÀåïo×*9к…¶­¡%ƒ5‘‡ð£š?H ríú¿h?_ÐAKê¥uß‘²‚Òðf ˜°¢¦§Z‰þd9²}²ÅS[0`€¨É}<ù-Y²DZZZ´”?|=–JKKEÍÐÞê òWÛùZžS ¶«í~ý[õý§ý÷ùs§ Y-xl›­ÖÞÿ)pÏýÙcËFkG>1{ÇóZG€‰y³éÝœ·¥fÕp àPP[ßY«"þ)2¶³Nû¿ëï¡Ä‘¾ÚÖWKù›Jˆ?¢~µKŸ º Ò‘¿ê,ìóDÿø:+T÷À j9a—ô­ü·[pý3@²ÎCÛžS§MI#þCkîÚòp¨~¦'wÌ‘/ <-%å4ÅLųSÚÆË±mSe ŠüSkõX§Ç¿^¸gÖñUš^:;;µ¢?…#FhŸ4hLœ8±Oq`¢°‹þï¾ûî§ÄÙŽN³†f€€d•U‰}ͺ[å¶ÉWçlŽ=±Ãs~µúZµ•ng¨~®OÕTÀ·´Z”Cš` @MO9\öÙ6IJc©­ïCøkkkµ5~5þ×öëQ০óIss³¬]»V[ï×kð>–ŒÀ2Ý8`e*^Qsÿýcí¿Ç$úŠ}ëŸeôO@|øpM¸e5ÔgåÊ•Z…?L¢¤ù±T#1iÒ$­SÀêñd…šú7Oe¶;ˆþí6ý±þiˆ§Ü¼ñÿ´ùìÙœNÜv?ìßvnß4]Ž®:B½þFÐ4ÚGŠ\Çh5¸?õ¹ˆÔ!üÉÃ{ì@å¾jÉÓ"x¤þaPݬÌÄa‡f[3€AŒ¶0==ôÐ,9Ø÷ŸÕ蟀x æñ_¹úrã„ßÉ„ò±¼ 9ro›™?+Ú:¯Vµ(7MüïÛRiöƒA=‡µ“i*ÚïM½V¯èÇú¾Y+ŸmmmÚLˆ?Šý°Ëßøñã1FX3'ËvŪêÿoüñæ^ñÏêÚ? É ˜[~E¯ ¨/É ’#flZú} ¯~æ¥j<õïÖÞ ¿óÿB3"8lƒ€PÉ?AEùG´M”Q]ÃÓªÛ€@#Ò‡ðÛEçf §‘?Zü°îê~´ùÁTàý &8ZB@§ÀÞ½{­¢ÿèc=7޵»-㙈þiHNhìn’­ü¹\5î´]ûˆw`ÐÏÝ›–GÕ.‰ùæ\»þV¹¢á?CQŠ €’¥‘ÝÃdJûxm>I<½n!Tñ£¢…}X›O¬õcºÖû‘¾6l˜f& þøÞú°' {`Õû¿~ýú·ß}÷Ý rpê_ªÑÜDðÙ@üCsO‹\¾êwò‡±W¨q­‡ó‚x@g¬K«ö£i~^_‡—Õ†P;Õ:¿hø±/¶\N+à.€AÝdJÇx™Ú6A*béÿHïC˜1£ßÍú¾}ÌõǶ=ˆ½^70fÌ­xÐ 6éÿø¬Y³’gþ§ý›Š= ñX€ øá¨—¿òE^,‚?¤¿—«½Èþ½*¾¿ü§ò‹1?–#Õþ ÌxÖòåÞ>AÓ›.H¿c}…}©¬ï'ƒJ}U‰¯­õ£ØÿÇz?Æ#›€ª¼ï¤þ1)Ð µ-ð{óæÍ[-é÷ý»ŠþiHÎÁ  [6Þ­íÎwYÝÅj®~?^” 󺚉݆ۥ5ÚÆ‹‘¶ÑýñÊ_Éi5'ËÅ#¾)µý†/ j°”áån–nÁæ;Û´)}#º‡fdé;ì! GªßIž£{‘ªÐÇz?„Æ š¹€à£ÐÏi¥¿¡ùÞ¶Í2úŸ={ö“r°ï߳蟀ø†w¿&KZVªµÙKU]À$^ s•m~©á„AzgïûÚœ€¯9WkU Ó²ÂR-›æ'úÅKTË^ŠöÇÉèΪq/3[^#ú†è£/Ý4"ˆÐ-Z¤õùc½â·n*ý“±ÛøG úø¥—^Z!gþÇ$µ¾×Ñ? ñ›:·È®ü…\0ô«ÚB̤Oea/‚Т:sdz2kÇs2Mm!|Þà³ääêã|µ“ ²e:6iƒÖ´¯W6׫÷×ûFüém¯“‰ ÒÐ5R ã™é´@êxþT«ù­@Š~áÂ…ZÁ†ûTTThÕý8¯›J#PHhUü÷ì³Ï>!×þí2þiˆïÀXZT¨¿¼çuùÞÈo†z#/¸°öåõ¦·ecÇ^ ‡Ôà(R­‚S+&Ëqý§É±UGª!ÔvÏÙßÏ‚¾¹s«2Ä[µ·:6k¢¿^‰O¼ÇW× “ù&v6Èøöz©ëªÍèß*"oˆ>Fë¦*Àv`2Ÿê½×ÄÛú"Àq¾8ŸÛJÿC^KJøaÌP…‹Ÿyæ™%IÑÌÀd%úߟA .‘¤÷‚Þ£0á€Ù)N8`%}þïÍåmÏ¿`jà¿×~iðÁ¾O´bK’˜0²ßpm‹è1¥õ2´dˆÖE0¨¸F{; È¾¨ -ÑÙÙµ[öô4%¼Ý%[;whY°Ýݾ¾(äßQ¯ÖõÇÈÈža’Éò´ðA𱾟h?Ìñÿàƒ´‚?ˆ5΋íS­ôOFß-Ð Õ÷ÿ5ùï õ.vÒûÿž¤#*öÛÿÒЄTj_¨–‰÷üaí2·ñM^ˆ,ƒ/KÕÒUa¤@­Íï°öh‡tÇ»]„Y­ÒÖô!ú™*ä;póV‚‹úÙXÛ7‹ÌQéÿÉ'ŸhÃ}€¾!†aí¿¦¦&íó,_¾Ütý_ Z÷Ío~ó2õ.¦uôf¬ @Ô"3 rèðG¶ŒK$,lY*?ýô·Ú,÷/>ClÍõmü‡jµÄ†?Í*ú$ÙBßíÞ“W[,íèªí´7®³^f e/ŒÔÅÚ>"o'[ðfTú/Y²D ÷ÙÀd?<û¡ ]°œ€ €o¿ýöÓð†b=ø'kkÿÌ0hÐþtÚ€“äÌšÏj›¼D xQl˜³ëE¹qÃÿñBCJcý¤^mºƒª}¤øËc™OÁ£’b áÏDß¾PéáGµ?Šýí£Ç¿ªªJ}ˆ¦Œˆêí×#ÔÞ;Tôÿeö¤ý›þå nP(õÂîyÚõ×Ï 8QN쌣̻Œ9OeMÐn¹´u%/ÑÐSûc;Qħ¶ÆgÞHCh‘R‡èãm¶SüF@ð,X õùÃÀˆ ºY BÚ?S…†vÅï½÷Þ3Jü[¥ïº¾Yäwp¤ <{ÔÞÏì|Q;P¥=­rªv €pRùxO*·ƒÖmRÿ}¹DMÀ‹Æ£¼ yúÑÕ›ÚWQþ žìŒB†ÈCì‘ÞGÄŸ­*~' Õb?ôøc Å…|˜€t+ý@êKF¨MöÝ{ï½/÷FýFѽ“ôÿ!ž#•蟀„ôsc­@Q¶§Z¸Æ—7¨·£¥AUpçrµí];e˜ª Ϩ`ÿÇ¡çÉãÛŸæ‹%O¨Œ•KCÇHÓU'£;FhCz²Di}>æægjB_: Ò_m²ƒÍv´ÈÏoܸqZ?ÖþQx˜i¶nÝjú9µ­ð ª0pŸ8ëùÏjôO@Bв° ,ŽDjÔ²AmÉ0ÕÖ5L[S„v®êãÕêýj©*ªÔŠ S©vîT{Ï·ª%жX›ìRË|˜Ãc]ûFYܺ\ËX\=þäµd‘ þ­öyMM¿ƒ!áŒò‡vÒÖòǪô~¦«ö“E½óØ€Ât.Rü‡„ÄJì1Òi˜ oå ñGú©ÿLÓÞÞnºí¯Ê>´ßsÏ=Ï&DÿFSÿÒ‰þiq¶$Æ‘l ’AK²¨+ÀMTï<ÀÀ˜–hëþ?zÕæ¥§Ô[•èc˜‘·l¼Gî=순,OàgúϺïÊÿ¬¾Š/„P+ÕñhëùêÀT¾l…èCP!¢ýdñÍ¥ ˆF£Z¥ÿG}t  õuuuZ‘ßäÉ“µ!CÙÀ*úWKsÕ»¤ï¦?‰Bo·á]ôÏI€„d’ÍãÈ4[:·©‰‡³´h<`Ì- 'ßlz—¿ä ¢nõµ=Cd ¿k” ë,ÙÜ3ñ±¦ÁGϾ¾¦ï‡h?µÆ® ?ªýUµ½ö1 ÷A-*ý!þøY²e<̶ýU» ö¨¡?O'Eÿv›þd\ðiñ l›-g¨6ƺÒ99ÿÕ}O>j^Ä]¢úúÎRûXÛÏvDÉ|?ªåÄ>×Ñ~"---òá‡b]+ƒIÁz? 2“&M:$[‘I°‰L€k×®}Sí7°Yìûþãb?þ7cf€€ú„?oº[®ÿ«œœ#l/Rˆ¿lº¿ ¢­å÷ T|£T¤?*«kùE{J>Þ"ÕŸªØ{m Pyÿþûïk3ýQé¡Ç:?L Òÿí‹ç£oÌ“çfÑú‡-£ÿ¨ËÈ?+Ñ? !9sú_ozG>7à䜜ÿ†|I^R/}Ú¶†¿ P/RQ~­6}oLç(©ŠfoÚ%"d ÁÑ#äÄ x~Kí[±mÛ6­ÍEx¤ø!þh÷úÿÈ‘# JrÆ#ÔhßKɨ"Ä^{íµUb¿éYñŸdË Ð’cnÛxŸê8:'[Ïb‚"füÇŠ+/’ÌSÝS© >úòGªa<…’½žyˆ#Òú|´ÄAøÒMíçjç]·nV鯊ë´ÁÄ`ºŸnœVú§k¬ÿÌ;÷Ù¿ÙObßTÌwþ³Ëd¬Úƒ€³³{·Lß:C¾?ò[99ÿ¤òqòÕÁçÊìÏó—ჺÈÄŽ1Jøë´–½l¥ö‘ÖG„¯GùéöæûŨ¢:m§=¬÷ëm~úV¾¥¥¥Úz?Ì@ªÂîæq(<´ÚôGíú÷QBôoõ›íðÇ6@BÂÊÌÏÊYOÓå‚ïŒøWy£i¾ìêÞÃ_F(RqýÈÎaZñބΆ¬¥ö!TzZ‡“m2!Ô^fPà‡yþhõÔ?€9˜è‡ŸâoVéŸ C€Ö¿äÏë¼óÎ;ˆþ;ÄÝà»Þÿ ¾. !9snÙx·Ü4ñ÷Y-ô2³þ£îÛòÛ5×ñ—‘!°¹_[ÏW­zűìÜn!v{¤ôñV¯t÷Cj?ÓÆ µµUT5½6Óß¾ý»-ê[ùâgGÚ?¹xÑ©°»yžúã‰@õ¿ª&`—ûûºô]û7ücµÓŸÙÎl$$,,jY&/í~]ÎtzNÎBDÌxgïüe¤zCj­zSÛÇËøÎÑYÙ\±×Ãm¼ê\­ù£Ðîã?Ö*ýQp‡ç€ê~¬ócôpr¥&£|3Ð÷®#Ô,‚¿ªÉ€mÒwW?«êÿ˜dh›_BÈí›ïW"|¬ô/ªÊÉùõÙÙ~ZÑWéýz5c’ZÓGz?Ó‘¾Þ“¯GùN÷«÷:‚Ϧ1@¥?ÒþØÐGïñG±®Ç¨Q£ +ýÓv§3›ü‡±¿Ó§OQÿ¹úcùg<ú§ Ägìëi–{·>*—Õ]œ“ó-,Öþ“ܵù!þ2,(T‘>ò@ôÇwŒ–’xfG:#ÊÇZ> ÛpØ °ñsj?Ýó¡ÂÅ~hóàd<ô­|Qô‡‘ÄnŸO& f`ö¿*Kñê¦M›PPÓ-öé³e€ŒŠ= !`ÎΗäì§Ë”Љ99ÿ?ýŠÌÝó¦¬n_Ç_F¢P¨(ä;¼c‚&úýb™ÝU}ëzµ¾>y/h|&³X_GÄÿé§ŸÊêÕ«µï­oå«¿Mœéïeêß*úWÏ;úøãÏ‘C[ÿÜìú'ÙŽþiñ!Øh·MºZëÓ÷<ºj³.]q¥ö\òŠh¹¶¦Dû$Г¹¥½b‚¯¯å‡1‚O…îîn­Ê¯÷øë[ùBôQéow½Ò-ð³z,jô"Äd6nÜ8_Í&Ø,éoù›Õ蟀Ÿ²²mµÌÙõ’|uȹ99ÿaäKƒ¿ Ïíz9o£} æ9²m¢4¨‰|™êÌHž¾gW±–Ô¾›¯EZ)ÿ5kÖèñ×ÛüpÝ`pݼHû›=Öj׿çž{cõÖ¿Ä©™Øò7£†€€Ÿr×–‡´û0³?\<ò›òVÓ{ÒÔ³7o®9¶Õ=B‰þ´¶ÉÒ?š™-c±~¯÷å#Š… sj?óíÝ»÷@ä¿k×.ícz›*ýa¿·×i=;¡?·dTWÀÒçŸ~¹ºéÛè?ë3hñ1mÑv­åäüU…•òƒQÉUënýµ¢6Ý9¶åp™Ô>F«êÏT¤¯ñéÛç†E¨³ñÜÐR·|ùrmÍF_ÛÐРù¡Ò¿¶¶6kÂîæqèH0üóÆo$þéw<þiñ9/«zÎôy9ªêðœœÓ _Ú=O>l^Êë;²k˜ßr„ŒU#yÓMóC4áësöƒ:'&ëüHù£èÃ~âGª×QïõOe'¿L&šÍýWÛoU­óåÐMœ¶Š—Ñ? !>Ex7o¼Kî:ì)Šæä9üWýÅòÝe?–®Xw(®éþõý:9±eš ï’¶è£b_ôƒ6k?ׯ‚Šˆ_µÌiâßÑÑq`#û¡×?±Ò?QÏ„!ÀÔ?³Á?jGÂ9ªM1yì¯Ù€§›þÐPÖwl’'wÌ‘¯ûûœœT¿Zù×açËý[ üµDïþg[Ž“a]ƒÓú>hC«©©ÑŽLòù)*Ïösƒb¤/Rꬭë»ùaùo±±O¶DÝícñµx®F(ãÒ¬Æþ¾*}7ý1Ûú×Í🬚Bv <½æ^24'çÿ×áÿ óßÔÌH¥¶ÙýLó±ZÊ?Uôb>¤£õ>ý|àSýˆôQì‡tº>àGßÍO½Ò?Õh=Ó†;þaç?#TíÂKêóͲ¿øÏjòŸÕŽžS „ßÓ©FóÞ¾izÎÎ_)’×_’“ŠÒ»î}±é4¹`÷—R} /ªÏ§L™¢£AüSÃl|m¦"x/Ÿúç1Ó_õËk‘?Äذašè£Ò=þFYœ;ñpóœSy\òcÍ¢µŒÑ­Öþÿ8­øOe3„ä#Ø®÷ݽ äÄêcrrþ‰åãd|yƒ|Ú¶Ö÷ת(^¤÷ÐrdJUýH=#ÒGÄ1J7Ú[Ÿê×¢ÒkþS}ÀO}}½ :T«òG»_&¢õL?] (N4bíÚµo¨Ÿi§8Ûõ/Ñd]ài Þt]u„”{vÎÖh›¼¨:Ù>Köt7ùþaLï™ûN–ʨ»H]ŸÌ‡¶3£Â3¦öÓ;†ú Ò0hD¥?RÿȰ$Vú»õl³èê©§žéþÅßwci 8[:·É£Jˆÿ­ö‚¬Ÿk{×Nyfç‹òÌ®5àwJcýä³ÍÇ©é}“\=Bñð£Šß­è„­8/ÓçÃÇõ©~*ZÖÖÒqõÝüôuÿLŠz& &šýUÆà“yóæ­–¾ƒ|9ö—€ðȶÙrFÍg¥®tDV¾ÿÚö òøö§enãÒ⚌Um}gï;U›ÛïFø±æ áOÔÃ>sçÃú>†û@ôQì!EEb¥?Úþ²-ê鮳^Îmú¬¶îïôð£Â€|vMËîÝ»5чø#òÇÀ˜.´P"ë2räÈ”~6/ gµéšcШÿ¼&}ÿÄÄyÿ¿ä:ú§ $Àìîn”¶=)ßù-ÇiuÈ_w½*3v<#;ºvòçF‘ßYj½ßém¢3}6Ä7hÏ Ûä®[·NµÂ?| *ü!üuuuZ ÓÑz¶ *ÿ1ªØˆ… þUÍþG_ ÝÚ¿oÆþÒ2fîxVÛ°g\Yƒå×ííÙ'Oí|Afí|Nš{ZûóÓ6UNß{‚㨟õ3µŸóáó¨ð‡h"j^¿~½öõXï‡ècCŸäÖÊL‰z6 Uô¯2÷ßÿ_{£ÿÄÁ?F™«ŠOÇþÒ2¢*•ËÆ»å¦‰¿7œÒ·­k‡fžÝõŠ6M0È`¨Úüœ€5~DœN+Ì™ÚOý¹éú Òó8Ðæ7qâDmŠýð{p»›_. ÖþÍ¢ÕÍðšb´GÌçþ[Uþç,Ú§ $„,jY¦õ¼¦m¬³¦}½ÌØþŒ¼ªZù¢iå³sü±{Ÿ°¡ Ö›[ûü&¾aYv@¤Œ6?¬÷c²&ý¡ÍODþÉc}ýRàgjÌ¢õ}bO>ù¤>øÇ*ýïfßœM¤ $ܱyºœ\}¬lìØ¸V>;ŽlìXüQaŽÃ.]æÔ¾WÏ £q!þØØgõêÕÚ¸\,·`ºf+ ãÄ„å¢ÀÏêqØòó ŒPS ?˜?>fw‹» 섟BHjìëi–‹–þ—¶Ö&ÆuÔËÔX_' Ò<±ÈŒ|öžzãQéñ×{üa¼Pð‡áJ¨½ÀãݦýsmöGà 5øÇ(úw3PüýÓ"Â&þµ]C弯Ï;ÚÐHüÃ*¾¹~nHTøCôa° €K´÷á-¢ÿL‰³×†kÿfÑ¿jo\5sæÌ…Ò·ï?*ûK@ ¥ñ~r^Óé¶;ùá¦ñdž2Lígÿ¹a#é‹´?"f¬ó#êGôo6Ó?[† “FÂoý¿õÖ[úØßn±ßö7&>üC@ñ7êVø¥ÆÓ¤´ÒQäñgŸÝç¡Ç,Túëm~h³D±ŸÞæ—XéïE´žéÌÄß,úWõÛ§OŸþ–ôÝò×nýßé f!œØ:MÆtÖÙ~Öœ“ÅŸ©ýÌ?7¤ø‘êGÔA?hóƒØO˜0ADþÉ•þ¹öTg·öÿÁÌQû´‰³µ·ci!sýOi>ÚöëPm•‡ëü+V¬ÐŠý0ác~Ñf‰?XëG»¥Ù„Å Tþ£ýÏ%ü{ï¹çž—“¢ÿDá·ÛøGüjh!¾ @ý;kï©Ú[+Ðg>|øpFðY>ÚúöÇF>z›2.ìƒÑ¾X~I¬ôw+Î~1~«ècÕÒ*l»Åýè_ßDû4„ßrBË2¬gõ K¥šQiž©>㯅 b´/ÄéÿöövMð±‹Zü¬:.üXàgõ8«ÊeÚÕØßçäб¿v)»1À9þi!¾ ¦§ZNl>ÊòkpS‡ø˜­7ûM|ýüܬ¾ÇæÍ›µJˆ>züa üȺ åJ·Ï×Ë(ßÍcýcYà µ¥ñ˪àq·šþ·kô…ÀÓB|Ï™jØ]Ë_MM”——3‚ÏÒùðxô÷£Ê_oóÃǰÞ6?˜€ÒÒÒœ {6 ÕŽêãÝ>ø`òà§|9ø‡€â+êºjetç˯ð¸)ú£1p÷µˆ„‘êW[ÜjéÌõG¦E/ö³ªôª!@wÚÍPfèoK—.Ý*ÿ¤2ö××u4„Ü¡n‹§ï³ÞÞ7v¤Ÿý"¾~àS=Ÿªr×*ý‘ò×ÛüPh™Xé™þnŸŸß Öþ““øížx≧¢»-Í Å¯Ñ? !$§Lé'C»­ ÿúÇö¾Œà3"~DþXçGú3þ±ÆñG¥?ŽÄs­ÀÏìq0=¦UwÕ俵âlì¯]€]„Ò熬þlÓó}ågË3µŸ¹¯Eú•þC´ûaw?}ªŸ]¥®¢üLÓ.úöÙgg‰³-3ö—€â&¶7È€h˯IŽ@s%û9‚Oõ|Hó£Ú?±Ò_oóCÊ¿²²2¥ˆ=†C0ÓÀâÚ|ôüóÏ/“CÇþZ˜8üà !$¿9¾õËÏ£âSçÁgî¹ÌñG¡DiTÁ£Èó þ‰•þ¹ölTþ[Dÿ¢¢ÿ'åÐÊÿ¨‰ p’òç€O‰ !ÄsPõ?¬Ûºªßh[Ù ‹o®Ÿ†Ý ÕßÜܬ¾E¥?Šûôõþºº:mÉÅ­Èú¹00ù±XæÀÏo†*‚üä™gžYœý;ÝøÇ÷ci!¾àØÖ©–ŸGäH”©ýÌ<7¬ó#Õô7„b }Ðã?räÈ•þ~ŠÖ3ù8<]VÌ™3çqٿ寛Mìªÿ}K¾€@Ìg&$ÌTE+¤¡s”éçq3·‹þ™Úwþ=õ"ò‡øc¸†ü`yE³Ë ø™=Uÿ¸f¨¥… Ñ¿Ýà«~_ŽýÍGˆ4 !ùÄámµ«èÛ͆A|sýÜÐÖ‡J2(ú«®®>öwRéC€:d=¬xî¹çfDÿ‰GTÌûþ©+¬ „xúwxûË/ÁŽs?m ‚àa¦?Ö¼‘À´?½Ò¨ôÏ…°çÂ`¼±Ùv¿½Ñÿ¢Ù³g/ç3ÿ¬ûû~O€¢ü¹í«=ƒ02¦k”ôVš~‘?¦Ð1‚Oý|xãÆZ¥?ÒÞ¨ôÇÇôüÌ*ýD6H~fÃÈ_« €jûKŒþízÿÍ–Xæc €‘) „xÀäöq)EÿLí;û¨ôGÊ© »A ±Ò‘¿ÓJÿ\Eë™~2!fþe”Ïš5+9ú7kù ä¦?ùf¬Ä…€„ä€Âx¡Œë¨3ÿ|aá´t®…:#7!Ÿ*ýí£èoݺuZÔ«Wúc#%ˆ?Ì€¢u¯ ÝÐÐ[ùßžý›õý»Ùù€Ä@ìÍŽ(oË„xzÿûÅÍgúc=nîLí»ÿZ÷¡Â_Ÿì‡ÿ¨ô×·òÅÚ¿ŸÄÙ«sÚŒüÅ4ÄTôÿ‰Aôš-óÅ$‹¿]äíu{„˜Ô1Æòó0Aß\?7´õ!íßÖÖv ×K)cÇŽÕÄ•þ~ßÉ/çÄuA6Äê¡jÇ¿Gåе³â¿@nù›O«,€þ~,Á´Ï;vÖ)ê-zŽŠ{\“„£ áˆ$b`8"BH~1x?ñmâßI‘*î+¿ô‘oüFý¥Vøa·?/Zÿ2rƒñ‘1@u; þ v¨ôG €^é·‰¦*HéûäǺ}œ“¶?•1ùÛ+¯¼²ÒEôÈ-ó͘ â¡ÿ"ñ‹oé}[”p81 ?ÉcÑ·~ýÀßMñ™gž9^ |YªÑ˜#øTÏ…?TúãÀt?ÐÐР ?Öû­*ýƒfÜ>Æ™¡ B÷ôéÓýwf úlAy €UÊ?ñsV&¿äný5‘ð±¢ñ/L¸‘YehH>Gþf⿟¢ã?~²Õ7u[ü—ÏÆÑ-ŠüPÜ€ÍmPÜ7nÜ8-åñ/**: ša-ð3{Úþ°Õ±K–,yaÁ‚› @ÞEÿaÊ™3—fôKš<¾ ÷ó 74a€Pü‰Lÿ:µ}˜Ù7E¥ºQk÷8ô|fƒb?ù¡âí~X>A±*ýý£›"—âœkC`·ÛŸ2mwÞyçL1Þñ/o¢ÿ0'f –tcJ~³¯OŽþ n~B#@húAÂßOL­GWªÙþ¦ýýËq¿ö Â¢ñÇz?ŠþpíÐæ‡B?ôùûQœ“›M#kƒÃ ù?­2(;Åxê_&¢€‹Ü"  hÂ[3ñOŒþ¹þO(ü}E_’„?Ñèf¹H­ÿO²ú;ˆù]|sýÜ0Εþz±25552fÌ-òÇûA™à—­Ì–FÐögc¢vß|óÍODÿVÃÜFÿœè#C`$þ—â_ Ækÿv±·ÊEþÉêx³oˆµëÄêÿ¬ÜÞQ€>XëÇ[˜6ÿÐ9ñÆSO=…‘¿Å?ôÑX €YÕÄà3ýäåDá/0¹ñ1ú'ùý‹þ%Fÿzv ®DËtû?ˆXrû_¾ûÅ_DüèñÇX_ ³Á?Úü0ÞÑ¿™ø%ZÏäc1ùЮðmùË_¦KßÂ?£Vp'3ÿCý‡1(þf¿œXÒÍ,Yücâ|ÝŸ€ä›0[û×—Ñô¯ÓÞWûÏ7˜}cLªãšÿÁï¶>}?´ûAÜñc¦?Úüô­’ó±ÀÏ챘‚ˆŒ‰ï¾ûîÌ•+Wnç}ÿyý‡ÉØM42‰¢OzkÔæDÑ'ù"ôfŸ3öShðõÚߘ®ÑfßÔ¬ú?÷hllÔŠüÍêc}õJDýV“óÕ`.Ú"­PŸß¬Úþ戻¡?1 ÑŽù–A·Ê$ÞÐâ&ÂO@òÙØ ý1ÿ¸êï/T3þMa];L|ªçƒè£ÚˆŸÃLŒõE›2%n¿&DÖïFÂ.õ/Sëþ÷*£ ï÷Ò#îZþb‚ÿòÅ­û›™€¸X§ùüÑ|2FÅÉéP}¶†f >ûÙÏŽRëÕÅV Ÿ×üñ9ìä‡k0ÞÃ~0ÆëýHý£Ò3ýígúœ0Jv=ÿj9eþŒ3>㿘˜ÿYeBý‡1àÆ™qõÓ|3‰™²‚¤¯Ñ#ÿŸ4i’iôoT˜iñõƒ‰0ëûXïG{ŠýPü‡%Œõ­®®¶¬ôÏwCà$õ¯ê:î¸ãþµ‹qáŸQ&À*ò]ôF`g̾6î ê§à“|~#P`ùG’n¤%b¦ QüómÜ/*û!þˆbùà `2"ˆ?Öüñ}Ü>ÿ|0÷»cÇ»žyï½÷ž\¼xñf1Ný;]q^@`g¬>O@húŠÉ¡Ó6ù*=Êì›;Yÿ£1@ôŠ6?}ÍŸÓ+ý!þ¨ôOü¾¬øï 2&0PV¨¯YuÍ5×`Þ?RÿÝ)Š wùËw`f$IÜ“72%Úô!Ÿü7’ü·“¾iÿägDŽt’ÈêMÀGèíG¥?„`_Jµ[¢e¥¦EÖÏFÂì¹vvvjÝV¨lJ×í·ß~«zÛ*wû3úc7õ/ÔÑØ €‘ 03bõÇý“<#n`’_ÿ‰¢ot3Ô– Êˡ95a÷«o胔?Œ@b¥?Rþz¥˜¢õL>ÎaÕ¿ÌŸ?ÿ‰wÞygX§þýåEyrC‹8¼Ñ™EDŒþ 1ΉD¥²U–¿¤ÆôÆSäìÖc°yófM¼0ÖÃ~ð³c¦?Rÿ0FÙVü÷Rÿ«¯¿þz=õß%é¥þCýç‹°‹äíÖú)þ$Þ.Sfõw9ú裇ʡ3\¿ƒTž Öôt?ÄëôJµI’Öãït¬o>Ìù·«úGêÿÎ;ï¼U™·©£ €F0B#@Á'ùÑýXÔšQ ŠÚ†›žLÝØÑï”>•ç†õõë×k[ùb¬/¯ÏôWµÚš¿^éïרÛ†¦ Ýv êÿ­·ÞZ-ÖÿÌ6û‰IÈGþÒ˜ÿ¹¾Oò³,XÜ$`e$´C¥¶‡š}Ä?Ìkþ¨ô‡øcÈÏ–-[´!Ý?fÌ­Ò‡Ñ÷Ïç?³¯ƒø£MÒ ¤þ¯¾úêÙr°ê¿GÌÿDŠ^„E¼÷þ‚i H¾ÿMD\DüÉ;œÒúÐ÷@ªÂV?þ#F`S$Í À?gC±$Ì”j™¥ç¾ûî»#¡êßMôïtÚ_hÍ €sS@H‰80Nßgn€Zë®2{€›ílsÁ§úÜУñW;ÏiÅ~‰•þØÍ•þ~Y¿'-@Uü?6oÞ¼•²?õo%üQaá !ÄÔ즪„Éû(Ðßì‹õõÿ°¬ùãkQè‡jŒõEµº^éÁ>hó³{LCÐ÷k‘ú·›ö§–W]{íµ‰ì¢«ô^4„·Q¿.ö“ÿG¬ €hiTúCøÑãb?¬W'Vú#ò7*xt*–aYÏwsN,Ømô£2Í7Üpƒ>ðG/üK§ï?o ÿh!™ÂÐ¨Ž–‚<î"áGÁÚý@b¥?ÖüõÇçûz¾ÓÇ¢å»"Ú}ùìÙ³o[¾|9*,“×ýͶü52yYøG@IUìEÌwÇ<°O€JyW:1^‹}¦ŒÒü~ô÷cH @ªôèÑšø#ú·KsÓj¨ôkiÅ¢E‹þúÐCÍëYÿVÑ^þÑBÒ5fFêQ £E€ÙˆàSýÚ––Mü±Þ¯G«¨ôÇ559¥óç³!pºËZþþøÇ?>(û·ù5kù3[û;0y•   „¤› 8d+mµà8¤™MMMZ‹Ä•êøYÐßÁ>½Ò?(Q·_ž+"»uÿŽŽŽæë®»îeÀ0ÐiêŸ=ÿ4„¯ ª€/TGZK~4)ˆ¿>Ö•ýXïGºÀÉxã|/ð3ýþh›´û¶O<ñÄ­ .Ü(Ίþ£3ñ·~vBH’À›e|LÂ¡ç­ ]àc€ô4&ú¡Ðÿ/++ÓÄE(öÓ§æC´žÉçŠA?0v¨Q¿3üñ÷äЖ?3#à¦÷?/£BHºf y@DÁ¹¾¯øu&"}½ÅO니=þXëO¬ô÷«ÈúÕèEvëþªÍòcµî?Cö¯ûwÙDÿÉUÿN¶úçcôO@q"ö‡ŠŠŠ’L<—Ækü˜ì‡õ~}¬/¦úÕ××k‘?Œ@£n?<ó0ìÙ+T‘åÖßþö·7'úMŒþS­üÏë@4„¬dTdœÒ}ÅOû )ÿ+VhUÿÂ-|!üˆþYà—Úãð9DþÈ®X¡2m7ß|óu*ó‚Þ@¬û'¶üY™€äÂ?¦þi!YÊôùœš„—ÑûŠ×3P鯷ù©Ês­f)¤û!þÉ•þF¢Ç?óÇ!›‚ìŠ*3›1cÆ-óçÏÇ¿‰ýþV•ÿnÖü%ߣBH¦ AD d±ñ“1€8­[·î@¥?ÆúêÅ~ØÆWµ7æU´žéÇÂ\9¨ø—·ÞzëQŠþŒúýíÖÿ¶ûåu !$ã(‘Lù¾’«}ô }ùë•þ}Dþ¨øGb¥¿ŸEÖ¯†Àá˜_d^^¿æškžã¢?3gÛý2õO@ÉVF ÓKÙŠöu ö(öK¬ôÇ&>ØÊâ´¿Yë" ³Ç¢ÝÛ%Û±uëÖEW^yåêÝ6—âû¢?³h?oÍ !$%¡7û¿ËB7‚â•Ø}­¾¡ÏÊ•+Túc¤omm­V臹þ\ÏOïq¨£p"þjy`ÃÏþóë1ñOý¹£èßJèYH!™BµlÅrýœD¥‰•þˆò±™¦ú©VFíÈÇh=“çĦI;Ó§Dïÿ*Tk \X‡CñO¥å©BH¶PÞ=6!k¢îô{`-ëýˆü¡b¬ï„ 4ÑGÊÅAY¿}Ð]¯?Úýn»í¶«?ùä£1¿NÚýìÖýÍ¢ý¼74„tˆDsÝn„%]±wk P‰Žõ~½Òëü´÷¡Ò3ý½ØÉ/̆À©ø+3ØýàƒÞ0wîÜårhÅ8Ÿùï6êg&€€’IñªÍ«ËêAv¢-c€ÿcËY´ùáÀó€à;V‹øñ~b± üR{¬SñWŸÎœ9óÖY³f-ƒÿf©ÿd#`ý' }Þ·üÑB²M\€žt3™6#5S^~ýaÆI]]–þ‡øÛ‰ üì ñG1¥“õÕW§?ðÀoJßv¿ä ~ìRÿqáº? !ÄìÛ·/#€L­ù#Íñ×+ýñ=1Ösý‘öG¿*çã(ྠà×׉ÁSƒ~Wc~Ÿ—CÛýìvùsjÌ¢}šBH¶PvÝ™0™0(ðCÄ¿|ùr­Òëûîƒö>´ùá’Èúõ¹b´occ£#ñÿý÷g_uÕU3Å<íof’ßí Š? !$‹ÄÕþîݽ7ÛHº 5>ü ÍFëüz± €U¥? ósb´¯ú;úúÅ‹¿¤v÷{´7òïã‚?»èßÌ$ =×ýi!^‰¿þŽªîîT£s wͱÛ.Æ‚¤·ùá|Hóc¦?fùCüõJÿ GÝ~x®0YNÆû‚¥K—¾|ÅWÜ£Þ5ÛÚ×éö¾õK@ñ‹à'\‰n›™Hu€SáB:æùãÀÿ±Ö5ûAüÆú²ÀÏÝsÅÿU­‡£}€j¹|SøMÿ.›è?Õâ?£×%Í !Ä#Çp•b˜ àtK Û·oׄ©€*Tûëâïר;H™üþ0KENX¶lÙ<ùß©×"Güµ÷ ¿“ˆŸE4„ŸdZ­„bm¶ÁN*Æi~läñÇ®~øÞèïÇ.~Xë7ëËõ|÷C›ŠýœÖq,\¸ð5ßÿ>Ù¿æŸ8ßß*âwýÇ„E4„ÿ™%­vQdº@èj9l#«ÍÇ:ÿĉµb?LùÃô¨ÛÏ×µç8ÄçÏŸ?óøÃ ‡âŸJÚ?YèYôG@É5*=Übg–O%ÚO{Ì#ò‡ø£ Å~hóÃ÷FÔ3m¡ Rf!•窯÷£“Âé)ÔŸn¼ñÆç\ˆ¿“´¿QÔÏ¢?Bˆ—¾A´•øÿ˜ Ë @&: JˆüQéý( ¢Š5#€Jÿ|Ö3õ8¤ü±Þï4åÙþÏ>ûì]ŠyrpÈ“ùþN6ûaÑ !ÄçÆK–‹ëoÞ›À[LœCÁ"£1B;tñ·Z^ !°Þ"»â´Ê(ÖtÏ=÷Üô /,–C‡ü¸í÷§øÓB‚h”p4eÚèÂáÇÝüð ÷Á,]üÝŽ¦!8ôwƒìŠ›n Õz¹öÿ÷o\²d 6Zègm~FóþÝTýSüi!9Žø“‰©b±ÝVLe ‚áÇŽ~¬óc¸Æùb­Å~º°±ÀÏýãæÇ`kýjƒ¥÷ñ‹_ÜÖ„µ‚ýâï$ê7«Iq›×"¡ „x,ø’•ÅUŠ~O& ÒüzäýPàñÇ:?ªýqx!²a+ðÓƒ ¤üÝìÔ¨ CÚÔçÉk®¹æi9Xì×#Ƴý­ÄßIÑ_ÜàuFñ§ „øÀ$¾© xvÛEóNg@œõ£¿Æ RSS£õøCàõ#ú×…‹ëù·ϣµÂïvƒ&Õq±ýþûï¿ýÅ_\"SþÝ¢µÿÄ·f›ü˜‰?¡ „dYÜ#&7̨Êü]vßkÍvò µ£}!þØÕ…~µµµšq@ê_¯ô÷«ÈúÕ £‚¿T–bV¯^=_õ÷ß½sçÎF1NùGm"~#ñONùÇŠ?Í !$¦@LnÐq©·ª¨²S µ©ÂC„¬ –”1u›ú ê)LöC±ÄßIö€† /ˆø!ü©ìÇ ~_­sæÌ¹ÿ¾ûî{S¬·ò5û¿•ø;™òGñ§ „äHôͲFo1  Q õp+`&h*ºÔ Òò‡˜É©Š? !Äg‚q)øÉ)[-ÂS©û­V'Â:4D ‘= âAüñ9RÔ àÿ\Ï7fJ?RöuÔVÊ ~øáÇß|óÍÕ½Âß%Öã{FývBˆOÍ€þ³­WoÞ1U¸·Íî~ žA¥?„K‰Vè‡V?½Íëþ~Žºsé#S‚#¢TÁå†Y³f=>{öìåÐi~fsûÍD¿'AôôúSüi!4 É7gí&¯Öð79µ0jÉà@…?Rþfâo'–AZÏwúXÔGè¢ÌI&D¨VËj÷¾Y¨îW3áwbœÌô·šðGñ§ „Pø“·D?øàƒMßùÎw,¿‰.þÈôïß_[ë‡èCü+ýƒ­§j^ øz]ðS­à7CkÞª&ù½pï½÷þ­w÷ÆÄa>f‡[á·Zï§øÓBBbú˜•ÎoQâÕ¬Öï«ìÄëü¾Dñr´îöqøZ½&B›©?U›±éí·ß~ùÎ;ï|]«Ý¡ðÛmÝk¶ÖoõSüi!ŽünÖúÍ>ªzÏ·©ú, @¢0BüЯŽ%€Ä_c4ø'h†"yüœºèëc‘³ý{S†lѼyó^™1cÖø; „?æÂX rÔïd;_Š? !ħ¢¯i°:¢ª|‡2\,A“ÑÍ€nô÷Í ‚׆@ùd±Ç[ÙŠêÍP©ýæåË—¿£Šû^]°`Áfé»aO, ñ¥õSüi!4‹¬@⡉€*òÛ„ùý™ÂI¤œh ÿ¯ˆD·údqO|« º~‰œü’TÿÖ­[—«Œ·zè¡ù*£’<À'f¹Û‰½UÄïDøjG(þ4„€eì {ÔT¿µS§NõZ}!Ä^ƒÁK‹/~gæÌ™o¬X±b§:µ/Y¬í €ð[¥ûÍ ý(þ4„€DúNf¦ÿq¨ôó§gžy&¯h–~OjÖ†O?ýôcµ-ïü÷ß)þné;±Ï(B7~«%³ïc'üN·ó¥øç€/!ÄæÞI: ŽÂÞ£(á(î=ÊTEõƒ>øˆè3‚—4}TWEç–-[–/[¶ì“^xaÁªU«öÈ¡ó˜­É[e¬Öõí"~'é~Š? !$ âÀàm L€:*Ž9æ˜úÓO?ýØúúúÃKX‚P+NŒÔÕXÞNõ6® ðÚ•¨koÕ.†8ÚÔN|Úû*šoV#v›Ô|ý}*}ߨÚ÷*¡oRkø=6ÑyÜ&²6}7Ñ¿]V nó¼ì*û™ò§ „„܈X/Õ$‹~âÛ‚$`$üN10 f_“ü«ŸÙLÄŒö>°q}z‘Ñ[»iŠfÑ¿YzÞ­ ˆ;ˆöcb¾çƒðSü} çBœ`40Y$"IïG“7ùq…½_ëÔˆ‰€[}˜|}º×ÂÊ$~,fò9'‡Sñwc쾇“ç%BH~Š~¢°™€Ä#j"’1ñ/0È2ˆK3 6ï§c¬RÛv†À‰ 0‹¾Ý.8z ? !„¤ '§»ÍÐ…Èmôï$•ïÔ dÃ8Í ¤ý»1F-{©Š¾Sá§øÓBB˜0,&Âo¶s`AÂ×§³öo—pbÜ·‘¿ø‹MäoUWàÔ¤"øN«úõÓBHÁˆ™|>Ñ87…|nÅ?’Ÿ5Uñw’ ˆ‰»e7n¢|Fý4„ ¼m@„=f"þqáwý›™€t²V·‹tÍ2é.¸É¤áSø !$mCàÆÄ\FýÙŽþs±i3ŽàÛ‰=…?Äp!$•û…U+ž™°»}§Q¿W~1"™| ?ÿ  !ÄõýÂÎDl„¾ h?Õ´ÄÅÏçTSépcÄÅÇí„>Õú(ü4„Þ3›;Sà¦Âßíz6ZÓÉX s<…ÿ»‰îÓÕKñ§ „Ç&À©É|¤Ÿ©Ö¿l™§ÙtDž¢Oh!žšgc{~>U±wõ§[`%°™4©<…ŸÐBrj2!îN¾¯Óç•iŠ»s'Ÿs"òñ6B@!Žï!nÛM$ï4ÂÏFÚ?ÝŒ@:Q{ª‘}<ÅŸÐBHZ÷‘TÛm4Ÿ­h?S&Àîÿ©~Îé¹)ú„€â #à4Bwŧígº0QΤ¸Sô !Ä÷÷7‚J4ÉÀsLWLã9ú8EŸÐBqo‰dùó^ÝãÒÀ3Y GÑ'4„@Þg"YøžÙ¸ßųôõqž !…¼„~ Vâ|,!ÌBByÿñË=-îÓïE !„÷%ŸA¡'üC#„߯(ô„P„²{ÅB!„B!„B!„B!„xÊÿ½Œ£ŒXçIEND®B`‚././@LongLink0000644000000000000000000000017300000000000011604 Lustar rootrootqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appiconset/icon_256x256@2x.pngqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appicons0000644000175100001770000006455014616416776033236 0ustar runnerdocker‰PNG  IHDRôxÔúi/IDATxÚíx\å•þϨYÕ²Üe[²Ü ˜^B ”dI²v—ì&dÙH²d—ä¿!Mo”¥‡P–j:Û€PmÍ4î6î½K¶z™™ÿ÷^ëÚ£ñ­SîÜ{çýù¹dI£;ºÝ÷=ç;ç|"„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„Øá%àï›Bò€8/¿[B!yo (ü}BÉC3@ÁÈŸß!ׄŠ<E!~wþî !ü”?z#@×ï-’æ×BH>ˆÜá׆ÚPÂ)ü‘M!„„ÝXý?žO&€BìßU$÷ù „äSôo$ôq‡F ”&€7ÿð¿ÕÇ"³„æ¨ßéÛ¼0¼ùWü“E=ùã½G¤÷­ÓŒ_#„ FøN#~ýýXÂáÄ„Îðælñ˜¼Á/VG‰:ú%˜§€¯ BH€•øÇ{E¿[êèêý²A½ (âë'âoíG’>VØ+þ'?}Î¥£*.åå$„C™wì¬a½âßc`"IoïÁ¡04ÁÿˆPÔ+þå'Ï>ûçJüÀËI!¦ KÚ.ÆYO+À É™øG,Ä¿â¤Yg_YZ_ù}^NB±Õ@}‰4fbÌîÕñ0üð$¸â_pˆøÏ<ëʲѕ—ðrBˆ-Ò·F*fòu¡ÌÐSü«û±æ_¢‰ÿ“g]QÖPEñ'„Ô @¢ °[÷¼! ð·ø'¿_`ùïÿ'”ø©º˜—“BSØ{D¢|£VëxXDŸ xâ_d ÅÿÄ'ÎúYÙXŠ?!„¤‘ˆ'e"a‹¿UÚ_ÿÊg|ágåc«¾ÇËI!)gtOºïÆmŒ@ M @pÄ_7Å"ˆÿ¸þBÉLÀÌ„€àˆrä9ÅŸBÒÎ$€˜É}X$„üýRüùBHf3ÉÙV»û7 ñXü×Äÿ»¼œ„’QP`q?¥ šø§øBH† €‘à;Ý95äžPü !$ß3f& æžøWüûQü !$«˜Üjm&ü¬ žŠÅŸB²zŸ¶~»{; aäO!¼WÛ¡ÍÐøWü/§øBˆ'÷k«È?´u4BÉ÷ @(#|Š?!„{•ÿ4B!yñÓPü !„ØÐgh(þ„Âûx¥þi(þ„BòŠ?!„ð^N@(þ„BhÅŸB ÅŸâO!„€âOñ'„B@ñ§øB¡ øSü !„ÐPü !„Š?!„B@ñ'„Bh(þ„B ÅŸB¡ øB!4B!„€âO!„ÐPü !„Š?!„’§€âO!„€âOñ'„B@ñ§øB¡ øSü !„ÐPü)þ„BhB þâ@ü+(þ„BhÂ!þâ@üKzÅÿgB!4Á6ÉQ…øWRü !„Ð;ú7ÿÅŸB @xÅß*åŸøŠ?!„€™»ŠÿbŠ?!„|¢(ÄÑ¿•ø§ýg(ñGñÏGUËÀâ2¸x ö¶º¨¿T–KyA™”«·eý$)Ð>vñ¸´D[µwÛbÒm“Öh»z¿]šº÷JcO“ìîn”=ÝMÒÔ³—›BEñ7ûX²(½Ú†jõ£ø‡ûÅ)’1eõ2¾¬AêJGʨ~µ2²÷()(öä9tźeSçÙÒ¹M½Ý*;6˪öµ²¶}£ôÄ{øK"„Ðd8`ý&EþßãË!\ RÑüQUSeZåT™T>^‰fr ŒÆØ²ÑÚ‘HO<ªLÀYÞö©,jY&7/–]Ý{øK$„Фý›-Àô;ñɳ~Z>¦Šâ’šüS«—ãú¥EøÁyî…2¡|Œv|yðÙÚÇ%xoßGòöÞ÷哿¥Òïæ/™Bà"ú1®þ‡(Uâ _Á¥@­Ë¯Äþ¬Ÿ“ûc¼FPFô.?ä‹ÚѦj ÞÝ·@^Þ󺼿ïc‰ªŒ!„Л³È?1PÄ—@0©í7L‹”Ïxš–ê;å…eòùšSµ£Q¾Òø†<³óÙ¬²„’¯ bò~òÇŒ¦þò%,&–“ó‡þœQó)Œä篯Fu)üÓÐ/Ë?=O4/’Y;ž“ù{?”¸úG!ùžH³À¾‚Á‘•Sä»#¾!‡WNæÅ8ð¢ŽÈ±UGjÇâ–år÷–‡eaËR^BHÞ€D±7ÿ3ÁÕò¼PNè4/†0F7Mü½V4xǦ鲮cc^^‡¹ÇÌôô|g,8Ÿ/>Bã?ù}#3À @€è§ï|}ØßË7†-ç­{AFéØÃŽ”§U}À=[‘v5˜ˆdóáÒ ¡ðy&ÀÊŸq\ÿiòßõ?”¡%ƒy1Rµ_Su§ 8^®^÷g. dt¡°#ƒöõbÑ7úxrôáKÀ_ÂõoµÈ5ãIñÏÃK†Ê'—Žú¶6g€d'@3Ì4€àÿnìåZ•?ɬ@!0¡|¬üz͵j/‚}¼(ͨ[ W39{7F ±äL¿ûó¤?Qü³È•‡É_&_# ¥u¼½ñðBhü(úÉ_c– 9ä´'ÉŸ'^%CŠñbd™Zµ$p«2Zh©$™ºòBhülÌZir ¦ÚýrÌO<Û‰ˆ¶µñ5ã!ǪBK’›L„·B„Ì€™ 9àì§Ëÿ4\–·Óür Z,ÿ0ö š€ŒÜlx !4~þˆCѧÈ!'U+?ýC­…ŠäÊ”ÈoÇüT«¿ éÜ@ù&4AÍÐx̤òñò«1ÿ‘¿ÀC÷?2¬d/Fª7.€@d„‘nÁ®}w¥”ª4ñËï¤Fk¿,ް#µ(o%„ ˆ†€FÀCñÿr̵숿ÀŒ€Žºˆ"¥ — !–|»ö_Ø~æc¾:ä\9½æ^f @^fH–˜R1I.öU^ŸsYÝÅ2šn%„ÐAè)üƒjó+. ]ÅK´Uš£-¡ú™úU)p _´Ì<û¬’¬rQí×eT¿y¾Û»vʆŽÍ²¥s›lÖŽ­Úû±Ni‹¶Kg¼SºbÝ}ÿˆÔvÅe¥RVXª8/&#û —êÀÛQ¥#Ô5¨ ÄÏÿ™'ÈçÔRÀëoóÅë$Â`¡t†€d ˆßùj#?³§»I©ír?l^(îûD¶vípý=zâ=Z6@ÏÀ@$3 ¨Z¦UM•#*&Ëá•“µÂ;¿‘AAà»{?ÔL±Ë°ŒŠÐr?ªûŽû Dòóß”gw½"+ÚVyrΦž½ZT­GÖÈœ9ð49{ÐéÚŒ~?}¾>ìäþ­ñEÌ ¡ Ä'ô?ZÇøê9­i_/³wþUæîyCÚc9}.›ÔÒÂô­Ë[gÈ©*íŽ"É©ªXÒ/àù<»ë%ÙÕ½‡/fË ¡ ä`T¤þ}{Ä¿øæù ­Ïæ‡UÔÿ–ÚºÝ_›·ãù¼Ùô®vœ\}œ\<òB]:*çÏ Å›ßþrÓÆÿã ÚòµÎ%dKH†9uÀñ2±|\ΟG4•G·Í–o/½L檔¿ßÄ?™wö~ ß[ö¹gË#‡æ‚/ >S4å ÚÊ0@h9ý£ò?× šÿ²•¿”»¶<$*fëQ¦åám3åÒWªe‚-9}.¨ßø×á_ã‹ÚòÊ[(¡ DãøþGÉØ²Ñ9}K[WÊ–_.KZWö:®j_+—,û©ªÆ_ÓçqŽ*Räp kÃK !Šú圞ÿ­½ïÉO>ý•ªºßøk‰BÅ_®¹Z[¾ÈØ$è˃Ïá Ûìʽ !¢EþÇö?2gç³é=ùíšë|±~ž)°$pÕº[r:˜ç«CΑ’îÈ ¡ Ä„¯¨H1W7Äm«åënÒ3l ˜?ÛÇÍKrr~ 1úLõ‰|fh Ésú©¸gülNν³{·\¹ê*öK%ð»µ×i?k.øÒà/ðEn˜à-”Ð<çój~|Ea¹ççEkßÕëþ¬MÚ ;¨køãÚ›$y~×ö6 É€’çœ;茜œ÷ÉÏÊGÍ‹òæ:/Tû<½ë…]D¾£ ¯ ‹ Ég”#*óü¼;ºvÉý[òo^=íÎÁˆÞ3jh½2@hHóùšSsRü‡Yú¹žéŸ °™ÑÃÛfy~ÞúÒ‘ÒPZÇ|b€€î@Òætµþï5ÛÔ|ÿ—÷¼ž·×üùݯÈ7Ô”>d_¼ý]ŸšÑ]ç33п‡KÕŽ—-ÑVíýBO•–Y~}YA™š°XhúùBõ¹²ÂRËïQQP~`þÀõn—çÔ®–„ÐÏT\#‡ULðü¼˜ñÆ–?§`ÖÁŒíÏÈF]äéy±a· >ȤïyÍAA( \ iqRõ±ž§AÑ ÷ÂîyyíŸQÛõzÝý0¾¼A{œu æÄ…€ÐqbÿcûÄO©˜äé91ò·#Äþ¤Ê¾žfYÚºÂÓsY9…Þ° €ÐÏ™P>FíXâé9ßÝû/¼ ìûØÓóM*Ï‹î8€ÐÏÉÅðŸš?æ…7á} ÀÐ’ÁR]ÔŸ>çÖâ1“˽5ë;6ÉÖÎí¼ð&¬l[ãùP q,Ì9¬ 4Ä{àqÀëw#Áo‹<¾|,/|® k ñ’ŠÂrÑo˜§ç\زŒÞ†Å-Ë==ß„²1¼èÌ’O ÜëA0+ÚVñÂûìM`ÀÖâ!cÊê==ßžî&NÿsÀêöuj@gç«+¡¶·-å…g€Ð¼É”z[üÅèߨ"xmûÏ·,Ðævâ)£ËFÑø”m«==ߘ²:^ôÂ9„€xJm‰·€^‹ZYéñµV2”=§B@<¢(R(ƒ‹zzÎ í›xá²±c‹Ç`/za ¡ žÞð "Þ½lºãݲ½›€NÙÔ¹ÕÓóÕ2[ÀB@¼b¸Çýÿ›;·1ÊqÁžîFO7LÞ€B@ò¯#¾M§´ƒªÂ·(Ó䃊k¤¤ ˜>‡¿oBR¥ˆ—€¸Šø<6;i\›&µ 0Ö£ö<´-ìùÒCØéŒuIW¼ËðsíÑUýÕÞïŠuñbâ‘ð8廹ƒÂâ÷k†×DªàŒçgô¹Ì=f¦§?û÷—_®½m¶®ÇÇãqõ¹6ÃÇ¢¾ÅËåBhHZxݸ½k'/ºKvx\49< W²E•ÖWxÝöµ§§‰Ý%»U! — e+ !4$Ü`½·º¨ÊÓsîêÞà ïÖ4u{kšª‹*yÑ ¡ aÛªA@^mZzZyá]Òèq ª°Šfú{ý#•Í6§®[Ç€BhH¸©*ôöFïõZvXÀ®€f•çY1†…4„Ðp€¢ OÏ×ÈÀ”ñ²€BhHÈ©.êïéùš¹þŸ2-Qï®3„аg<¾Ñ·y˜Æ^^»²Â2m—HB mÀÛ"À¶X;/z®ÚC+™ „€„—JÏ34©_»OÏןu„Ððâu`+ @o—O0#‚B@BJI¤$Ô"® €·æ©(ÂmE¡ ¡ÅëB/.¤cž¼½vÅ4„Ð0ooòÜ*5kíôøµQÌ‹N +^GyÑx”=Õk'Þ^;¶B@BL¡Ç ‡ 0æ‰K„Ð0g ˜ 03‡ÌB@B‹×iÞ˜Ð&PÀ !4$ÄÀë @Œ= ׎m€„ЀŒÑïáEȵ£ „€Ðd0Šå3„’ûKÄÛ—Kœ—|ï¥ ¾ÍÔ àEOþEURäá(`f „èkˆ‹HÏÛµÞŠÂr))(æ…wÉ£ÐÌ !¹þHºß„€8&¦¶|õºuî©öÚ0@ˆ_„?bq@ï‘,ê}?B@\±³k7 €ÏXìíÒIcO/:!Þˆ¿è[=z_|íµ×6ÜqÇ“ðâŠí];== ýŸØÝM@H¢~£›EþXK-»á†>7~üø~ýë_¯a qÉŽ®]žžoXÉ^t— -ì±ØÃ‹Nˆ·¿Óÿôê|Ùm·Ýö/uuu×.]ºô+Û·oëŸ$Ä· ¶d/ºK†÷ê±häE'$ûâŸñ'þß(ê‡ð÷Þ­Ž( qŸèö:0”ÝuÀ;ӄΦž}¼è„x/üñ×"ÿýèGÓN?ýô{úõë× oÛ·ßñàƒnÐÅ£ î2Þf¼NgÒ‚~ª°Ê³ó¡&€â™øGL>¦û•^wÝuÿn#øéFýHùk½ýßûÞ÷ŽRiÿëKKK'Ú=±… Þ¼víÚæ$ñ$ýŸsHj¬éðv`jÅ$^t&•óö5àñR¼6$EŒ¡ˆ3£à¶¯ÿ€ð«I~ý¯¿þú‹¿ò•¯<éDü[ZZýéOzNö§þãç8øúåý­—Ï 8Ù³óM«œÊ‹nwª¼½FkÚ7øîDU4î¥(E ùÂ#Y‹úQè÷­o}ëUíÿ§øõ×_¿A-tÊþ¡?¦âO@ýM®˜ ¹íˆuò ‰cËF{k;ü—ðÞðJ ¿•Ð×ú {ú•ÿæ7¿ùÊ´iÓ~S\\<ÀéIwíÚõúí·ßþaoôo6e€¤Çª¶užž‘ÖÔÊÉòá¾Oxñ 8¢ò0OG#Õ¾®}£/ €·¯KÞBC.ÞÉÛ|Ìn󻨿Ÿêé¯ýþ÷¿ÿó¡C‡þƒ«¿Éx<:{öì¿ÈÁyÿF™fHúlëÚ¡í?¨¸Æ³sb€ÀäÚxœþG(ºü†×yÈJ‘¼5 q ÃRÔ¯Úûþîè£þ•Šú‡¸}B›6mšóôÓO¯’ƒóþž[Ã"@’2KZWxz¾cªŽàE75GS¼ýÝ·¬ðåuð:P]ÔŸ/¾üÊ8ùœÝ4¿BIhíƒð«¨¿Nmâs½zûçTÄ_ ýéxàî‘ým1ƒçg€dX–ËiNòì|‡©:ìA€ì9ÈÐ’Á2¡|¬§ç\ܺܗע+Þí±¨â 0?Ì@b ÛÈ¿@æ‡飲_ÿú×ç!êWC}§ú?ýôÓ'ÔÌÿ­rèУè?®ÌÀˆÖ¸O«9™>‰ÓT7†—ëÿ`i«?3^/K0À ƒÈ?yQå¹çž;þÁ¼óøã¿%ñïîîÞ{ë­·>¤Þíƒ ,L3$uV¶­‘Öh›T–{vÎ3jN•ÛŸæÅOº&^‹¬ As· ?3at³¯‰'½5‹üÒÿšø«¾þ Uáÿ/S¦Lù………Õib‹?¬†þ4%Dÿ}¢|“Cû’2Xoý¸e±œZ}‚g眨†ÝŒêW+›:·ò À’ȤŠñžžs±ZúñëÀ–h‹§çÀ @ØMAÄøÛeŠzÅ¿ì’K.9öÌ3ÏüMyyyF š:::¶ßtÓM³¥ïÚÜ©àI‹÷-ôüœ_ø9^ø^>¯¢¯ÓÿïíûÈ·×£Ùã%€ý†óEžè߬]ÎIŸQ[Ÿ¶kŸ:Ê'MšTû—¿üåççwÞã™íoñ½÷¦«-[zÅ¿Otoù —HF @³÷my_|–<¼m¦t{\ðå7°ÓyêZxÍ;{?ð¯èñ60ºtoáüÅ&ò94ݯ‹¿Vä§ú\YRR’Q·¨Fþ®»á†^”ýkÿ1§Qâ×Ñ´ØØ±EKÇ#-ï5j0ÖYO“çw¿š××þ”ê㥶ß0Oω €¶wíôí5iìiòô|X‚éWP¢mEB1^óO½º_K÷_tÑE‡ŸuÖYWª1¾Y)ÒyõÕWïéééÁhÔ¨‰ÐÇ„K$Û¼Ýôžçç¼°öŸ¤8RœÇw¦ˆ|cø×ý'áµ9AfT¿¼ „KäTô'§úõêþ UÜ7ò¶ÛnûùùçŸ?;[â¿gÏž%wÝu×;rp»_+Ñ73DÒçͽÞ€a%Cä†~)o¯9Ú!'•ϋߵŸ À>$T&@Äù@]üËUuÍÕW_}‘Ú‰ïÕúúú‹#‘¬E(ñ§žzênõVþc‚Kÿä¯fHFÀT¸Æî&ÏÏ{QíZ 6ß@ÛåŒúwÏÏ‹ôÿòÖOi’8®êHÞÂaì?ñÐ…¿Týÿû¿ÿû¬‡zhÎá‡þ{ÕÓŸÕùè›7o~gÖ¬YKä`ß¿Ùa·À É€Uÿ^kzÛóóbûå£/ÕÒ°ùÄ¥£¾#ƒ‹z~Þ¿îžëûkÓØ½×óõø“ªótÉŠð»‰úuá¯ºà‚ ¦a˜Ïé§Ÿ~_YYÙ¤l?Y5ò7öøã?˜ý›¶4$#¼´ûõœœ÷(µ ο×~=o®ó!ç :ÝóóöÄ{äå=¯ûþúÀŒz=*E€7ø ¼ „'ú7Šøõ {4á?å”Sî¼óÎß|ó›ßœSSSs–ˆ7½¸7nüÛܹs×ÈÁÊÿ˜šú™üÿNvŒ°¢m•¬ïØ”“¶¨UÅp›U' »ç…úUu¸\VqNÎý¦*ôÜÛ³/×iUÛZÏ_‡ßv¾ÌÛó–ììÞÍ›A0Å?±°/Öû6±íO3‡vXÍ~ðƒ=zôEjŠ_¥—OTÿÑG}ô19tíßM@„K$+Y€=¯åè/8"?©ÿ|n@x÷ @¡ÙïÇþ,gOìx&0×jUûZÏÏYUT)¥Ö¢Jýø¡—¿bèСƒ®½öÚ謹—ÆŽ{i*â¯IEEEÊOtݺu¯¿ùæ›ëz£ÿ¨ðÛFÿÂ%’IþºëÕœ ç)ŠÊ/ÇüDÎU)òðEþSåºñ¿ÎÙ:óÇÍ‹e™Ï‹ÿú€u99ïø²1rÏa7ÈW†œ#å…eY9Gea… T&óÆ”Õó¦“ù @â†=åjxÏ5·ÿ몭ï9ÕÞ÷sµUï T„„ Ò¿imMmR¥Šþ{T­¢ÿ.é›þ7z'Ñ?'’ÌÒ¤Rį5¾­†ôäfT/Š/ýÒPZ'wmyÈó½á³Á—Ÿ#?ªû¶28¹ûS}tûì@]3,äŠEÕrYÝÅòƒ‘©Í²VkÙˆ]»´M³ÚcJe ´š˜¹õ…¬åR\P,å¥RVX*%‘Í@ôSŸÃ×Tª¯íÁû}³?øž_þäBÞxÒ¼mHßÊ~cú’Ë.»ìój§¾‹•€§Ôo ᯫ«“ÊòåË¥±±1õ×ôªUóÞÿ}ìÀÕ-Ö…vË}'þþI&yjç_sftþyØWäðÊÉrÕº›UmÀ¶@^G¤”!$Ÿ÷x§¿d>U;>¾¿ïã@];Ô*x=2ˆü•‡iG¶€IÀò—_7f P@/ð%üÅ—^zéi'tÒ·Uº>%áGšÔ¨Q2dÈéêê’… ˆüãñ¸¨ùÚûªk@¢Ñ¨ö56Ñ÷Ã?ü„Iô÷kÿÜ d¤Š?iY"Ó*§æôyL©˜(w«tì#*z}|ûSÒëÈÝ(¢¨‹G^¨¥zsÍÿmy(¯Ãj“ªQCjCý·†× 2mÑvÞxRGâ1¼øâ‹?ãŒ3¾[YY9.]á‡ÈCôÕV½šÀCèÕØ^QÂöüª*ihhE‹Ù›ðO?}õÃ?ÜÔk¢bßþç(úg€d…·>!Ó&LÍùó@ -‚_t¦<²m–ÖÇŽv6¿ÞÌOª>V¾UûÏjÂß8_<§ù{?T»=~È×àj“*¬Å‡ò‚2€4@1ßøÃÓN>ù䯩5ú1™~°k×.Y±b¢wlÙ«Eþˆø*(UHˆ–>Ûï­ŒC×ý÷ßè?¹ï?*©Uþ'þŸ€d!új^$KZWÈÔŠI¾x>üãúK4q}eÏßäEÕ.¸®c£/žÛ â9sàg土÷UQê'îØ<=°¯A.âg(Œ†úo µ»º÷ð¦ã’Uÿ>¹}¬\òðÃ׫ˆ?¥]úŒ„lÙ²EÖ¬Y£‰~SS“õëâšøÜŽöó*TíÀË*K€uÌnÑ·ë°ŒþiHÖ¸gË#rÄßúê9Al/öUíÀÜ /ZмP6tlötSüŽQãcÏø5Fvš/'>½óíº•–h«,jY®uP„ÝçÇŠäˆö‰r\ëRU-y•âZü•aÐD|ðàÁ}>Q_½zµlݺU{Û¶mZ @AAŒ7N3 ÝÝÝvÑçôéÓgªw;ä`ë_Ôeôo–   ÙÀ0<æ3NðåóÃF:úf:è^XܲLÕ.,Õj¶¨ÂÁ¦ž½»A×– “IªžèU˜xDåõï_°µs»fà‚ÎËj.EØ @¶Ú Cwbertëar”:JãýRújg?-⇨ˆµ–òß½{·–òß¾}»Œ9RÔ¾Ú1yòd­ PgçNû=+–-[öâÒ¥KÓþ“‰3@<áN•B>©ú˜œ¶°9a@QeTNÔŽX§f¶vm—m;¤KÍ7@TÙëÑÚ¹pÀåïo×*9к…¶­¡%ƒ5‘‡ð£š?H ríú¿h?_ÐAKê¥uß‘²‚Òðf ˜°¢¦§Z‰þd9²}²ÅS[0`€¨É}<ù-Y²DZZZ´”?|=–JKKEÍÐÞê òWÛùZžS ¶«í~ý[õý§ý÷ùs§ Y-xl›­ÖÞÿ)pÏýÙcËFkG>1{ÇóZG€‰y³éÝœ·¥fÕp àPP[ßY«"þ)2¶³Nû¿ëï¡Ä‘¾ÚÖWKù›Jˆ?¢~µKŸ º Ò‘¿ê,ìóDÿø:+T÷À j9a—ô­ü·[pý3@²ÎCÛžS§MI#þCkîÚòp¨~¦'wÌ‘/ <-%å4ÅLųSÚÆË±mSe ŠüSkõX§Ç¿^¸gÖñUš^:;;µ¢?…#FhŸ4hLœ8±Oq`¢°‹þï¾ûî§ÄÙŽN³†f€€d•U‰}ͺ[å¶ÉWçlŽ=±Ãs~µúZµ•ng¨~®OÕTÀ·´Z”Cš` @MO9\öÙ6IJc©­ïCøkkkµ5~5þ×öëQ০óIss³¬]»V[ï×kð>–ŒÀ2Ý8`e*^Qsÿýcí¿Ç$úŠ}ëŸeôO@|øpM¸e5ÔgåÊ•Z…?L¢¤ù±T#1iÒ$­SÀêñd…šú7Oe¶;ˆþí6ý±þiˆ§Ü¼ñÿ´ùìÙœNÜv?ìßvnß4]Ž®:B½þFÐ4ÚGŠ\Çh5¸?õ¹ˆÔ!üÉÃ{ì@å¾jÉÓ"x¤þaPݬÌÄa‡f[3€AŒ¶0==ôÐ,9Ø÷ŸÕ蟀x æñ_¹úrã„ßÉ„ò±¼ 9ro›™?+Ú:¯Vµ(7MüïÛRiöƒA=‡µ“i*ÚïM½V¯èÇú¾Y+ŸmmmÚLˆ?Šý°Ëßøñã1FX3'ËvŪêÿoüñæ^ñÏêÚ? É ˜[~E¯ ¨/É ’#flZú} ¯~æ¥j<õïÖÞ ¿óÿB3"8lƒ€PÉ?AEùG´M”Q]ÃÓªÛ€@#Ò‡ðÛEçf §‘?Zü°îê~´ùÁTàý &8ZB@§ÀÞ½{­¢ÿèc=7޵»-㙈þiHNhìn’­ü¹\5î´]ûˆw`ÐÏÝ›–GÕ.‰ùæ\»þV¹¢á?CQŠ €’¥‘ÝÃdJûxm>I<½n!Tñ£¢…}X›O¬õcºÖû‘¾6l˜f& þøÞú°' {`Õû¿~ýú·ß}÷Ý rpê_ªÑÜDðÙ@üCsO‹\¾êwò‡±W¨q­‡ó‚x@g¬K«ö£i~^_‡—Õ†P;Õ:¿hø±/¶\N+à.€AÝdJÇx™Ú6A*béÿHïC˜1£ßÍú¾}ÌõǶ=ˆ½^70fÌ­xÐ 6éÿø¬Y³’gþ§ý›Š= ñX€ øá¨—¿òE^,‚?¤¿—«½Èþ½*¾¿ü§ò‹1?–#Õþ ÌxÖòåÞ>AÓ›.H¿c}…}©¬ï'ƒJ}U‰¯­õ£ØÿÇz?Æ#›€ª¼ï¤þ1)Ð µ-ð{óæÍ[-é÷ý»ŠþiHÎÁ  [6Þ­íÎwYÝÅj®~?^” 󺚉݆ۥ5ÚÆ‹‘¶ÑýñÊ_Éi5'ËÅ#¾)µý†/ j°”áån–nÁæ;Û´)}#º‡fdé;ì! GªßIž£{‘ªÐÇz?„Æ š¹€à£ÐÏi¥¿¡ùÞ¶Í2úŸ={ö“r°ï߳蟀ø†w¿&KZVªµÙKU]À$^ s•m~©á„AzgïûÚœ€¯9WkU Ó²ÂR-›æ'úÅKTË^ŠöÇÉèΪq/3[^#ú†è£/Ý4"ˆÐ-Z¤õùc½â·n*ý“±ÛøG úø¥—^Z!gþÇ$µ¾×Ñ? ñ›:·È®ü…\0ô«ÚB̤Oea/‚Т:sdz2kÇs2Mm!|Þà³ääêã|µ“ ²e:6iƒÖ´¯W6׫÷×ûFüém¯“‰ ÒÐ5R ã™é´@êxþT«ù­@Š~áÂ…ZÁ†ûTTThÕý8¯›J#PHhUü÷ì³Ï>!×þí2þiˆïÀXZT¨¿¼çuùÞÈo†z#/¸°öåõ¦·ecÇ^ ‡Ôà(R­‚S+&Ëqý§É±UGª!ÔvÏÙßÏ‚¾¹s«2Ä[µ·:6k¢¿^‰O¼ÇW× “ù&v6Èøöz©ëªÍèß*"oˆ>Fë¦*Àv`2Ÿê½×ÄÛú"Àq¾8ŸÛJÿC^KJøaÌP…‹Ÿyæ™%IÑÌÀd%úߟA .‘¤÷‚Þ£0á€Ù)N8`%}þïÍåmÏ¿`jà¿×~iðÁ¾O´bK’˜0²ßpm‹è1¥õ2´dˆÖE0¨¸F{; È¾¨ -ÑÙÙµ[öô4%¼Ý%[;whY°Ýݾ¾(äßQ¯ÖõÇÈÈža’Éò´ðA𱾟h?Ìñÿàƒ´‚?ˆ5΋íS­ôOFß-Ð Õ÷ÿ5ùï õ.vÒûÿž¤#*öÛÿÒЄTj_¨–‰÷üaí2·ñM^ˆ,ƒ/KÕÒUa¤@­Íï°öh‡tÇ»]„Y­ÒÖô!ú™*ä;póV‚‹úÙXÛ7‹ÌQéÿÉ'ŸhÃ}€¾!†aí¿¦¦&íó,_¾Ütý_ Z÷Ío~ó2õ.¦uôf¬ @Ô"3 rèðG¶ŒK$,lY*?ýô·Ú,÷/>ClÍõmü‡jµÄ†?Í*ú$ÙBßíÞ“W[,íèªí´7®³^f e/ŒÔÅÚ>"o'[ðfTú/Y²D ÷ÙÀd?<û¡ ]°œ€ €o¿ýöÓð†b=ø'kkÿÌ0hÐþtÚ€“äÌšÏj›¼D xQl˜³ëE¹qÃÿñBCJcý¤^mºƒª}¤øËc™OÁ£’b áÏDß¾PéáGµ?Šýí£Ç¿ªªJ}ˆ¦Œˆêí×#ÔÞ;Tôÿeö¤ý›þå nP(õÂîyÚõ×Ï 8QN쌣̻Œ9OeMÐn¹´u%/ÑÐSûc;Qħ¶ÆgÞHCh‘R‡èãm¶SüF@ð,X õùÃÀˆ ºY BÚ?S…†vÅï½÷Þ3Jü[¥ïº¾Yäwp¤ <{ÔÞÏì|Q;P¥=­rªv €pRùxO*·ƒÖmRÿ}¹DMÀ‹Æ£¼ yúÑÕ›ÚWQþ žìŒB†ÈCì‘ÞGÄŸ­*~' Õb?ôøc Å…|˜€t+ý@êKF¨MöÝ{ï½/÷FýFѽ“ôÿ!ž#•蟀„ôsc­@Q¶§Z¸Æ—7¨·£¥AUpçrµí];e˜ª Ϩ`ÿÇ¡çÉãÛŸæ‹%O¨Œ•KCÇHÓU'£;FhCz²Di}>æægjB_: Ò_m²ƒÍv´ÈÏoܸqZ?ÖþQx˜i¶nÝjú9µ­ð ª0pŸ8ëùÏjôO@Bв° ,ŽDjÔ²AmÉ0ÕÖ5L[S„v®êãÕêýj©*ªÔŠ S©vîT{Ï·ª%жX›ìRË|˜Ãc]ûFYܺ\ËX\=þäµd‘ þ­öyMM¿ƒ!áŒò‡vÒÖòǪô~¦«ö“E½óØ€Ât.Rü‡„ÄJì1Òi˜ oå ñGú©ÿLÓÞÞnºí¯Ê>´ßsÏ=Ï&DÿFSÿÒ‰þiq¶$Æ‘l ’AK²¨+ÀMTï<ÀÀ˜–hëþ?zÕæ¥§Ô[•èc˜‘·l¼Gî=순,OàgúϺïÊÿ¬¾Š/„P+ÕñhëùêÀT¾l…èCP!¢ýdñÍ¥ ˆF£Z¥ÿG}t  õuuuZ‘ßäÉ“µ!CÙÀ*úWKsÕ»¤ï¦?‰Bo·á]ôÏI€„d’ÍãÈ4[:·©‰‡³´h<`Ì- 'ßlz—¿ä ¢nõµ=Cd ¿k” ë,ÙÜ3ñ±¦ÁGϾ¾¦ï‡h?µÆ® ?ªýUµ½ö1 ÷A-*ý!þøY²e<̶ýU» ö¨¡?O'Eÿv›þd\ðiñ l›-g¨6ƺÒ99ÿÕ}O>j^Ä]¢úúÎRûXÛÏvDÉ|?ªåÄ>×Ñ~"---òá‡b]+ƒIÁz? 2“&M:$[‘I°‰L€k×®}Sí7°Yìûþãb?þ7cf€€ú„?oº[®ÿ«œœ#l/Rˆ¿lº¿ ¢­å÷ T|£T¤?*«kùE{J>Þ"ÕŸªØ{m Pyÿþûïk3ýQé¡Ç:?L Òÿí‹ç£oÌ“çfÑú‡-£ÿ¨ËÈ?+Ñ? !9sú_ozG>7à䜜ÿ†|I^R/}Ú¶†¿ P/RQ~­6}oLç(©ŠfoÚ%"d ÁÑ#äÄ x~Kí[±mÛ6­ÍEx¤ø!þh÷úÿÈ‘# JrÆ#ÔhßKɨ"Ä^{íµUb¿éYñŸdË Ð’cnÛxŸê8:'[Ïb‚"füÇŠ+/’ÌSÝS© >úòGªa<…’½žyˆ#Òú|´ÄAøÒMíçjç]·nV鯊ë´ÁÄ`ºŸnœVú§k¬ÿÌ;÷Ù¿ÙObßTÌwþ³Ëd¬Úƒ€³³{·Lß:C¾?ò[99ÿ¤òqòÕÁçÊìÏó—ჺÈÄŽ1Jøë´–½l¥ö‘ÖG„¯GùéöæûŨ¢:m§=¬÷ëm~úV¾¥¥¥Úz?Ì@ªÂîæq(<´ÚôGíú÷QBôoõ›íðÇ6@BÂÊÌÏÊYOÓå‚ïŒøWy£i¾ìêÞÃ_F(RqýÈÎaZñބΆ¬¥ö!TzZ‡“m2!Ô^fPà‡yþhõÔ?€9˜è‡ŸâoVéŸ C€Ö¿äÏë¼óÎ;ˆþ;ÄÝà»Þÿ ¾. !9snÙx·Ü4ñ÷Y-ô2³þ£îÛòÛ5×ñ—‘!°¹_[ÏW­zűìÜn!v{¤ôñV¯t÷Cj?ÓÆ µµUT5½6Óß¾ý»-ê[ùâgGÚ?¹xÑ©°»yžúã‰@õ¿ª&`—ûûºô]û7ücµÓŸÙÎl$$,,jY&/í~]ÎtzNÎBDÌxgïüe¤zCj­zSÛÇËøÎÑYÙ\±×Ãm¼ê\­ù£Ðîã?Ö*ýQp‡ç€ê~¬ócôpr¥&£|3Ð÷®#Ô,‚¿ªÉ€mÒwW?«êÿ˜dh›_BÈí›ïW"|¬ô/ªÊÉùõÙÙ~ZÑWéýz5c’ZÓGz?Ó‘¾Þ“¯GùN÷«÷:‚Ϧ1@¥?ÒþØÐGïñG±®Ç¨Q£ +ýÓv§3›ü‡±¿Ó§OQÿ¹úcùg<ú§ Ägìëi–{·>*—Õ]œ“ó-,Öþ“ܵù!þ2,(T‘>ò@ôÇwŒ–’xfG:#ÊÇZ> ÛpØ °ñsj?Ýó¡ÂÅ~hóàd<ô­|Qô‡‘ÄnŸO& f`ö¿*Kñê¦M›PPÓ-öé³e€ŒŠ= !`ÎΗäì§Ë”Љ99ÿ?ýŠÌÝó¦¬n_Ç_F¢P¨(ä;¼c‚&úýb™ÝU}ëzµ¾>y/h|&³X_GÄÿé§ŸÊêÕ«µï­oå«¿Mœéïeêß*úWÏ;úøãÏ‘C[ÿÜìú'ÙŽþiñ!Øh·MºZëÓ÷<ºj³.]q¥ö\òŠh¹¶¦Dû$Г¹¥½b‚¯¯å‡1‚O…îîn­Ê¯÷øë[ùBôQéow½Ò-ð³z,jô"Äd6nÜ8_Í&Ø,éoù›Õ蟀Ÿ²²mµÌÙõ’|uȹ99ÿaäKƒ¿ Ïíz9o£} æ9²m¢4¨‰|™êÌHž¾gW±–Ô¾›¯EZ)ÿ5kÖèñ×ÛüpÝ`pݼHû›=Öj׿çž{cõÖ¿Ä©™Øò7£†€€Ÿr×–‡´û0³?\<ò›òVÓ{ÒÔ³7o®9¶Õ=B‰þ´¶ÉÒ?š™-c±~¯÷å#Š… sj?óíÝ»÷@ä¿k×.ícz›*ýa¿·×i=;¡?·dTWÀÒçŸ~¹ºéÛè?ë3hñ1mÑv­åäüU…•òƒQÉUënýµ¢6Ý9¶åp™Ô>F«êÏT¤¯ñéÛç†E¨³ñÜÐR·|ùrmÍF_ÛÐРù¡Ò¿¶¶6kÂîæqèH0üóÆo$þéw<þiñ9/«zÎôy9ªêðœœÓ _Ú=O>l^Êë;²k˜ßr„ŒU#yÓMóC4áësöƒ:'&ëüHù£èÃ~âGª×QïõOe'¿L&šÍýWÛoU­óåÐMœ¶Š—Ñ? !>Ex7o¼Kî:ì)Šæä9üWýÅòÝe?–®Xw(®éþõý:9±eš ï’¶è£b_ôƒ6k?ׯ‚Šˆ_µÌiâßÑÑq`#û¡×?±Ò?QÏ„!ÀÔ?³Á?jGÂ9ªM1yì¯Ù€§›þÐPÖwl’'wÌ‘¯ûûœœT¿Zù×açËý[ üµDïþg[Ž“a]ƒÓú>hC«©©ÑŽLòù)*Ïösƒb¤/Rꬭë»ùaùo±±O¶DÝícñµx®F(ãÒ¬Æþ¾*}7ý1Ûú×Í🬚Bv <½æ^24'çÿ×áÿ óßÔÌH¥¶ÙýLó±ZÊ?Uôb>¤£õ>ý|àSýˆôQì‡tº>àGßÍO½Ò?Õh=Ó†;þaç?#TíÂKêóͲ¿øÏjòŸÕŽžS „ßÓ©FóÞ¾izÎÎ_)’×_’“ŠÒ»î}±é4¹`÷—R} /ªÏ§L™¢£AüSÃl|m¦"x/Ÿúç1Ó_õËk‘?Äذašè£Ò=þFYœ;ñpóœSy\òcÍ¢µŒÑ­Öþÿ8­øOe3„ä#Ø®÷ݽ äÄêcrrþ‰åãd|yƒ|Ú¶Ö÷ת(^¤÷ÐrdJUýH=#ÒGÄ1J7Ú[Ÿê×¢ÒkþS}ÀO}}½ :T«òG»_&¢õL?] (N4bíÚµo¨Ÿi§8Ûõ/Ñd]ài Þt]u„”{vÎÖh›¼¨:Ù>Köt7ùþaLï™ûN–ʨ»H]ŸÌ‡¶3£Â3¦öÓ;†ú Ò0hD¥?RÿȰ$Vú»õl³èê©§žéþÅßwci 8[:·É£Jˆÿ­ö‚¬Ÿk{×Nyfç‹òÌ®5àwJcýä³ÍÇ©é}“\=Bñð£Šß­è„­8/ÓçÃÇõ©~*ZÖÖÒqõÝüôuÿLŠz& &šýUÆà“yóæ­–¾ƒ|9ö—€ðȶÙrFÍg¥®tDV¾ÿÚö òøö§enãÒ⚌Um}gï;U›ÛïFø±æ áOÔÃ>sçÃú>†û@ôQì!EEb¥?Úþ²-ê鮳^Îmú¬¶îïôð£Â€|vMËîÝ»5чø#òÇÀ˜.´P"ë2räÈ”~6/ gµéšcШÿ¼&}ÿÄÄyÿ¿ä:ú§ $Àìîn”¶=)ßù-ÇiuÈ_w½*3v<#;ºvòçF‘ßYj½ßém¢3}6Ä7hÏ Ûä®[·NµÂ?| *ü!üuuuZ ÓÑz¶ *ÿ1ªØˆ… þUÍþG_ ÝÚ¿oÆþÒ2fîxVÛ°g\Yƒå×ííÙ'Oí|Afí|Nš{ZûóÓ6UNß{‚㨟õ3µŸóáó¨ð‡h"j^¿~½öõXï‡ècCŸäÖÊL‰z6 Uô¯2÷ßÿ_{£ÿÄÁ?F™«ŠOÇþÒ2¢*•ËÆ»å¦‰¿7œÒ·­k‡fžÝõŠ6M0È`¨Úüœ€5~DœN+Ì™ÚOý¹éú Òó8Ðæ7qâDmŠýð{p»›_. ÖþÍ¢ÕÍðšb´GÌçþ[Uþç,Ú§ $„,jY¦õ¼¦m¬³¦}½ÌØþŒ¼ªZù¢iå³sü±{Ÿ°¡ Ö›[ûü&¾aYv@¤Œ6?¬÷c²&ý¡ÍODþÉc}ýRàgjÌ¢õ}bO>ù¤>øÇ*ýïfßœM¤ $ܱyºœ\}¬lìØ¸V>;ŽlìXüQaŽÃ.]æÔ¾WÏ £q!þØØgõêÕÚ¸\,·`ºf+ ãÄ„å¢ÀÏêqØòó ŒPS ?˜?>fw‹» 섟BHjìëi–‹–þ—¶Ö&ÆuÔËÔX_' Ò<±ÈŒ|öžzãQéñ×{üa¼Pð‡áJ¨½ÀãݦýsmöGà 5øÇ(úw3PüýÓ"Â&þµ]C弯Ï;ÚÐHüÃ*¾¹~nHTøCôa° €K´÷á-¢ÿL‰³×†kÿfÑ¿jo\5sæÌ…Ò·ï?*ûK@ ¥ñ~r^Óé¶;ùá¦ñdž2Lígÿ¹a#é‹´?"f¬ó#êGôo6Ó?[† “FÂoý¿õÖ[úØßn±ßö7&>üC@ñ7êVø¥ÆÓ¤´ÒQäñgŸÝç¡Ç,Túëm~h³D±ŸÞæ—XéïE´žéÌÄß,úWõÛ§OŸþ–ôÝò×nýßé f!œØ:MÆtÖÙ~Öœ“ÅŸ©ýÌ?7¤ø‘êGÔA?hóƒØO˜0ADþÉ•þ¹öTg·öÿÁÌQû´‰³µ·ci!sýOi>ÚöëPm•‡ëü+V¬ÐŠý0ác~Ñf‰?XëG»¥Ù„Å Tþ£ýÏ%ü{ï¹çž—“¢ÿDá·ÛøGüjh!¾ @ý;kï©Ú[+Ðg>|øpFðY>ÚúöÇF>z›2.ìƒÑ¾X~I¬ôw+Î~1~«ècÕÒ*l»Åýè_ßDû4„ßrBË2¬gõ K¥šQiž©>㯅 b´/ÄéÿöövMð±‹Zü¬:.üXàgõ8«ÊeÚÕØßçäб¿v)»1À9þi!¾ ¦§ZNl>ÊòkpS‡ø˜­7ûM|ýüܬ¾ÇæÍ›µJˆ>züa üȺ åJ·Ï×Ë(ßÍcýcYà µ¥ñ˪àq·šþ·kô…ÀÓB|Ï™jØ]Ë_MM”——3‚ÏÒùðxô÷£Ê_oóÃǰÞ6?˜€ÒÒÒœ {6 ÕŽêãÝ>ø`òà§|9ø‡€â+êºjetç˯ð¸)ú£1p÷µˆ„‘êW[ÜjéÌõG¦E/ö³ªôª!@wÚÍPfèoK—.Ý*ÿ¤2ö××u4„Ü¡n‹§ï³ÞÞ7v¤Ÿý"¾~àS=Ÿªr×*ý‘ò×ÛüPh™Xé™þnŸŸß Öþ““øížx≧¢»-Í Å¯Ñ? !$§Lé'C»­ ÿúÇö¾Œà3"~DþXçGú3þ±ÆñG¥?ŽÄs­ÀÏìq0=¦UwÕ俵âlì¯]€]„Ò熬þlÓó}ågË3µŸ¹¯Eú•þC´ûaw?}ªŸ]¥®¢üLÓ.úöÙgg‰³-3ö—€â&¶7È€h˯IŽ@s%û9‚Oõ|Hó£Ú?±Ò_oóCÊ¿²²2¥ˆ=†C0ÓÀâÚ|ôüóÏ/“CÇþZ˜8üà !$¿9¾õËÏ£âSçÁgî¹ÌñG¡DiTÁ£Èó þ‰•þ¹ölTþ[Dÿ¢¢ÿ'åÐÊÿ¨‰ p’òç€O‰ !ÄsPõ?¬Ûºªßh[Ù ‹o®Ÿ†Ý ÕßÜܬ¾E¥?Šûôõþºº:mÉÅ­Èú¹00ù±XæÀÏo†*‚üä™gžYœý;ÝøÇ÷ci!¾àØÖ©–ŸGäH”©ýÌ<7¬ó#Õô7„b }Ðã?räÈ•þ~ŠÖ3ù8<]VÌ™3çqٿ寛Mìªÿ}K¾€@Ìg&$ÌTE+¤¡s”éçq3·‹þ™Úwþ=õ"ò‡øc¸†ü`yE³Ë ø™=Uÿ¸f¨¥… Ñ¿Ýà«~_ŽýÍGˆ4 !ùÄámµ«èÛ͆A|sýÜÐÖ‡J2(ú«®®>öwRéC€:d=¬xî¹çfDÿ‰GTÌûþ©+¬ „xúwxûË/ÁŽs?m ‚àa¦?Ö¼‘À´?½Ò¨ôÏ…°çÂ`¼±Ùv¿½Ñÿ¢Ù³g/ç3ÿ¬ûû~O€¢ü¹í«=ƒ02¦k”ôVš~‘?¦Ð1‚Oý|xãÆZ¥?ÒÞ¨ôÇÇôüÌ*ýD6H~fÃÈ_« €jûKŒþízÿÍ–Xæc €‘) „xÀäöq)EÿLí;û¨ôGÊ© »A ±Ò‘¿ÓJÿ\Eë™~2!fþe”Ïš5+9ú7kù ä¦?ùf¬Ä…€„ä€Âx¡Œë¨3ÿ|aá´t®…:#7!Ÿ*ýí£èoݺuZÔ«Wúc#%ˆ?Ì€¢u¯ ÝÐÐ[ùßžý›õý»Ùù€Ä@ìÍŽ(oË„xzÿûÅÍgúc=nîLí»ÿZ÷¡Â_Ÿì‡ÿ¨ô×·òÅÚ¿ŸÄÙ«sÚŒüÅ4ÄTôÿ‰Aôš-óÅ$‹¿]äíu{„˜Ô1Æòó0Aß\?7´õ!íßÖÖv ×K)cÇŽÕÄ•þ~ßÉ/çÄuA6Äê¡jÇ¿Gåе³â¿@nù›O«,€þ~,Á´Ï;vÖ)ê-zŽŠ{\“„£ áˆ$b`8"BH~1x?ñmâßI‘*î+¿ô‘oüFý¥Vøa·?/Zÿ2rƒñ‘1@u; þ v¨ôG €^é·‰¦*HéûäǺ}œ“¶?•1ùÛ+¯¼²ÒEôÈ-ó͘ â¡ÿ"ñ‹oé}[”p81 ?ÉcÑ·~ýÀßMñ™gž9^ |YªÑ˜#øTÏ…?TúãÀt?ÐÐР ?Öû­*ýƒfÜ>Æ™¡ B÷ôéÓýwf úlAy €UÊ?ñsV&¿äný5‘ð±¢ñ/L¸‘YehH>Gþf⿟¢ã?~²Õ7u[ü—ÏÆÑ-ŠüPÜ€ÍmPÜ7nÜ8-åñ/**: ša-ð3{Úþ°Õ±K–,yaÁ‚› @ÞEÿaÊ™3—fôKš<¾ ÷ó 74a€Pü‰Lÿ:µ}˜Ù7E¥ºQk÷8ô|fƒb?ù¡âí~X>A±*ýý£›"—âœkC`·ÛŸ2mwÞyçL1Þñ/o¢ÿ0'f –tcJ~³¯OŽþ n~B#@húAÂßOL­GWªÙþ¦ýýËq¿ö Â¢ñÇz?ŠþpíÐæ‡B?ôùûQœ“›M#kƒÃ ù?­2(;Åxê_&¢€‹Ü"  hÂ[3ñOŒþ¹þO(ü}E_’„?Ñèf¹H­ÿO²ú;ˆù]|sýÜ0Εþz±25552fÌ-òÇûA™à—­Ì–FÐögc¢vß|óÍODÿVÃÜFÿœè#C`$þ—â_ Ækÿv±·ÊEþÉêx³oˆµëÄêÿ¬ÜÞQ€>XëÇ[˜6ÿÐ9ñÆSO=…‘¿Å?ôÑX €YÕÄà3ýäåDá/0¹ñ1ú'ùý‹þ%Fÿzv ®DËtû?ˆXrû_¾ûÅ_DüèñÇX_ ³Á?Úü0ÞÑ¿™ø%ZÏäc1ùЮðmùË_¦KßÂ?£Vp'3ÿCý‡1(þf¿œXÒÍ,Yücâ|ÝŸ€ä›0[û×—Ñô¯ÓÞWûÏ7˜}cLªãšÿÁï¶>}?´ûAÜñc¦?Úüô­’ó±ÀÏ챘‚ˆŒ‰ï¾ûîÌ•+Wnç}ÿyý‡ÉØM42‰¢OzkÔæDÑ'ù"ôfŸ3öShðõÚߘ®ÑfßÔ¬ú?÷hllÔŠüÍêc}õJDýV“óÕ`.Ú"­PŸß¬Úþ戻¡?1 ÑŽù–A·Ê$ÞÐâ&ÂO@òÙØ ý1ÿ¸êï/T3þMa];L|ªçƒè£ÚˆŸÃLŒõE›2%n¿&DÖïFÂ.õ/Sëþ÷*£ ï÷Ò#îZþb‚ÿòÅ­û›™€¸X§ùüÑ|2FÅÉéP}¶†f >ûÙÏŽRëÕÅV Ÿ×üñ9ìä‡k0ÞÃ~0ÆëýHý£Ò3ýígúœ0Jv=ÿj9eþŒ3>㿘˜ÿYeBý‡1àÆ™qõÓ|3‰™²‚¤¯Ñ#ÿŸ4i’iôoT˜iñõƒ‰0ëûXïG{ŠýPü‡%Œõ­®®¶¬ôÏwCà$õ¯ê:î¸ãþµ‹qáŸQ&À*ò]ôF`g̾6î ê§à“|~#P`ùG’n¤%b¦ QüómÜ/*û!þˆbùà `2"ˆ?Öüñ}Ü>ÿ|0÷»cÇ»žyï½÷ž\¼xñf1Ný;]q^@`g¬>O@húŠÉ¡Ó6ù*=Êì›;Yÿ£1@ôŠ6?}ÍŸÓ+ý!þ¨ôOü¾¬øï 2&0PV¨¯YuÍ5×`Þ?RÿÝ)Š wùËw`f$IÜ“72%Úô!Ÿü7’ü·“¾iÿägDŽt’ÈêMÀGèíG¥?„`_Jµ[¢e¥¦EÖÏFÂì¹vvvjÝV¨lJ×í·ß~«zÛ*wû3úc7õ/ÔÑØ €‘ 03bõÇý“<#n`’_ÿ‰¢ot3Ô– Êˡ95a÷«o胔?Œ@b¥?Rþz¥˜¢õL>ÎaÕ¿ÌŸ?ÿ‰wÞygX§þýåEyrC‹8¼Ñ™EDŒþ 1ΉD¥²U–¿¤ÆôÆSäìÖc°yófM¼0ÖÃ~ð³c¦?Rÿ0FÙVü÷Rÿ«¯¿þz=õß%é¥þCýç‹°‹äíÖú)þ$Þ.Sfõw9ú裇ʡ3\¿ƒTž Öôt?ÄëôJµI’Öãït¬o>Ìù·«úGêÿÎ;ï¼U™·©£ €F0B#@Á'ùÑýXÔšQ ŠÚ†›žLÝØÑï”>•ç†õõë×k[ùb¬/¯ÏôWµÚš¿^éïרÛ†¦ Ýv êÿ­·ÞZ-ÖÿÌ6û‰IÈGþÒ˜ÿ¹¾Oò³,XÜ$`e$´C¥¶‡š}Ä?Ìkþ¨ô‡øcÈÏ–-[´!Ý?fÌ­Ò‡Ñ÷Ïç?³¯ƒø£MÒ ¤þ¯¾úêÙr°ê¿GÌÿDŠ^„E¼÷þ‚i H¾ÿMD\DüÉ;œÒúÐ÷@ªÂV?þ#F`S$Í À?gC±$Ì”j™¥ç¾ûî»#¡êßMôïtÚ_hÍ €sS@H‰80Nßgn€Zë®2{€›ílsÁ§úÜУñW;ÏiÅ~‰•þØÍ•þ~Y¿'-@Uü?6oÞ¼•²?õo%üQaá !ÄÔ즪„Éû(Ðßì‹õõÿ°¬ùãkQè‡jŒõEµº^éÁ>hó³{LCÐ÷k‘ú·›ö§–W]{íµ‰ì¢«ô^4„·Q¿.ö“ÿG¬ €hiTúCøÑãb?¬W'Vú#ò7*xt*–aYÏwsN,Ømô£2Í7Üpƒ>ðG/üK§ï?o ÿh!™ÂÐ¨Ž–‚<î"áGÁÚý@b¥?ÖüõÇçûz¾ÓÇ¢å»"Ú}ùìÙ³o[¾|9*,“×ýͶü52yYøG@IUìEÌwÇ<°O€JyW:1^‹}¦ŒÒü~ô÷cH @ªôèÑšø#ú·KsÓj¨ôkiÅ¢E‹þúÐCÍëYÿVÑ^þÑBÒ5fFêQ £E€ÙˆàSýÚ––Mü±Þ¯G«¨ôÇ559¥óç³!pºËZþþøÇ?>(û·ù5kù3[û;0y•   „¤› 8d+mµà8¤™MMMZ‹Ä•êøYÐßÁ>½Ò?(Q·_ž+"»uÿŽŽŽæë®»îeÀ0ÐiêŸ=ÿ4„¯ ª€/TGZK~4)ˆ¿>Ö•ýXïGºÀÉxã|/ð3ýþh›´û¶O<ñÄ­ .Ü(Ίþ£3ñ·~vBH’À›e|LÂ¡ç­ ]àc€ô4&ú¡Ðÿ/++ÓÄE(öÓ§æC´žÉçŠA?0v¨Q¿3üñ÷äЖ?3#à¦÷?/£BHºf y@DÁ¹¾¯øu&"}½ÅO니=þXëO¬ô÷«ÈúÕèEvëþªÍòcµî?Cö¯ûwÙDÿÉUÿN¶úçcôO@q"ö‡ŠŠŠ’L<—Ækü˜ì‡õ~}¬/¦úÕ××k‘?Œ@£n?<ó0ìÙ+T‘åÖßþö·7'úMŒþS­üÏë@4„¬dTdœÒ}ÅOû )ÿ+VhUÿÂ-|!üˆþYà—Úãð9DþÈ®X¡2m7ß|óu*ó‚Þ@¬û'¶üY™€äÂ?¦þi!YÊôùœš„—ÑûŠ×3P鯷ù©Ês­f)¤û!þÉ•þF¢Ç?óÇ!›‚ìŠ*3›1cÆ-óçÏÇ¿‰ýþV•ÿnÖü%ߣBH¦ AD d±ñ“1€8­[·î@¥?ÆúêÅ~ØÆWµ7æU´žéÇÂ\9¨ø—·ÞzëQŠþŒúýíÖÿ¶ûåu !$ã(‘Lù¾’«}ô }ùë•þ}Dþ¨øGb¥¿ŸEÖ¯†Àá˜_d^^¿æškžã¢?3gÛý2õO@ÉVF ÓKÙŠöu ö(öK¬ôÇ&>ØÊâ´¿Yë" ³Ç¢ÝÛ%Û±uëÖEW^yåêÝ6—âû¢?³h?oÍ !$%¡7û¿ËB7‚â•Ø}­¾¡ÏÊ•+Túc¤omm­V臹þ\ÏOïq¨£p"þjy`ÃÏþóë1ñOý¹£èßJèYH!™BµlÅrýœD¥‰•þˆò±™¦ú©VFíÈÇh=“çĦI;Ó§Dïÿ*Tk \X‡CñO¥å©BH¶PÞ=6!k¢îô{`-ëýˆü¡b¬ï„ 4ÑGÊÅAY¿}Ð]¯?Úýn»í¶«?ùä£1¿NÚýìÖýÍ¢ý¼74„tˆDsÝn„%]±wk P‰Žõ~½Òëü´÷¡Ò3ý½ØÉ/̆À©ø+3ØýàƒÞ0wîÜårhÅ8Ÿùï6êg&€€’IñªÍ«ËêAv¢-c€ÿcËY´ùáÀó€à;V‹øñ~b± üR{¬SñWŸÎœ9óÖY³f-ƒÿf©ÿd#`ý' }Þ·üÑB²M\€žt3™6#5S^~ýaÆI]]–þ‡øÛ‰ üì ñG1¥“õÕW§?ðÀoJßv¿ä ~ìRÿqáº? !ÄìÛ·/#€L­ù#Íñ×+ýñ=1Ösý‘öG¿*çã(ྠà×׉ÁSƒ~Wc~Ÿ—CÛýìvùsjÌ¢}šBH¶PvÝ™0™0(ðCÄ¿|ùr­Òëûîƒö>´ùá’Èúõ¹b´occ£#ñÿý÷g_uÕU3Å<íof’ßí Š? !$‹ÄÕþîݽ7ÛHº 5>ü ÍFëüz± €U¥? ósb´¯ú;úúÅ‹¿¤v÷{´7òïã‚?»èßÌ$ =×ýi!^‰¿þŽªîîT£s wͱÛ.Æ‚¤·ùá|Hóc¦?fùCüõJÿ GÝ~x®0YNÆû‚¥K—¾|ÅWÜ£Þ5ÛÚ×éö¾õK@ñ‹à'\‰n›™Hu€SáB:æùãÀÿ±Ö5ûAüÆú²ÀÏÝsÅÿU­‡£}€j¹|SøMÿ.›è?Õâ?£×%Í !Ä#Çp•b˜ àtK Û·oׄ©€*Tûëâïר;H™üþ0KENX¶lÙ<ùß©×"Güµ÷ ¿“ˆŸE4„ŸdZ­„bm¶ÁN*Æi~läñÇ®~øÞèïÇ.~Xë7ëËõ|÷C›ŠýœÖq,\¸ð5ßÿ>Ù¿æŸ8ßß*âwýÇ„E4„ÿ™%­vQdº@èj9l#«ÍÇ:ÿĉµb?LùÃô¨ÛÏ×µç8ÄçÏŸ?óøÃ ‡âŸJÚ?YèYôG@É5*=Übg–O%ÚO{Ì#ò‡ø£ Å~hóÃ÷FÔ3m¡ Rf!•窯÷£“Âé)ÔŸn¼ñÆç\ˆ¿“´¿QÔÏ¢?Bˆ—¾A´•øÿ˜ Ë @&: JˆüQéý( ¢Š5#€Jÿ|Ö3õ8¤ü±Þï4åÙþÏ>ûì]ŠyrpÈ“ùþN6ûaÑ !ÄçÆK–‹ëoÞ›À[LœCÁ"£1B;tñ·Z^ !°Þ"»â´Ê(ÖtÏ=÷Üô /,–C‡ü¸í÷§øÓB‚h”p4eÚèÂáÇÝüð ÷Á,]üÝŽ¦!8ôwƒìŠ›n Õz¹öÿ÷o\²d 6Zègm~FóþÝTýSüi!9Žø“‰©b±ÝVLe ‚áÇŽ~¬óc¸Æùb­Å~º°±ÀÏýãæÇ`kýjƒ¥÷ñ‹_ÜÖ„µ‚ýâï$ê7«Iq›×"¡ „x,ø’•ÅUŠ~O& ÒüzäýPàñÇ:?ªýqx!²a+ðÓƒ ¤üÝìÔ¨ CÚÔçÉk®¹æi9Xì×#Ƴý­ÄßIÑ_ÜàuFñ§ „øÀ$¾© xvÛEóNg@œõ£¿Æ RSS£õøCàõ#ú×…‹ëù·ϣµÂïvƒ&Õq±ýþûï¿ýÅ_\"SþÝ¢µÿÄ·f›ü˜‰?¡ „dYÜ#&7̨Êü]vßkÍvò µ£}!þØÕ…~µµµšq@ê_¯ô÷«ÈúÕ £‚¿T–bV¯^=_õ÷ß½sçÎF1NùGm"~#ñONùÇŠ?Í !$¦@LnÐq©·ª¨²S µ©ÂC„¬ –”1u›ú ê)LöC±ÄßIö€† /ˆø!ü©ìÇ ~_­sæÌ¹ÿ¾ûî{S¬·ò5û¿•ø;™òGñ§ „äHôͲFo1  Q õp+`&h*ºÔ Òò‡˜É©Š? !Äg‚q)øÉ)[-ÂS©û­V'Â:4D ‘= âAüñ9RÔ àÿ\Ï7fJ?RöuÔVÊ ~øáÇß|óÍÕ½Âß%Öã{FývBˆOÍ€þ³­WoÞ1U¸·Íî~ žA¥?„K‰Vè‡V?½Íëþ~Žºsé#S‚#¢TÁå†Y³f=>{öìåÐi~fsûÍD¿'AôôúSüi!4 É7gí&¯Öð79µ0jÉà@…?Rþfâo'–AZÏwúXÔGè¢ÌI&D¨VËj÷¾Y¨îW3áwbœÌô·šðGñ§ „Pø“·D?øàƒMßùÎw,¿‰.þÈôïß_[ë‡èCü+ýƒ­§j^ øz]ðS­à7CkÞª&ù½pï½÷þ­w÷ÆÄa>f‡[á·Zï§øÓBBbú˜•ÎoQâÕ¬Öï«ìÄëü¾Dñr´îöqøZ½&B›©?U›±éí·ß~ùÎ;ï|]«Ý¡ðÛmÝk¶ÖoõSüi!ŽünÖúÍ>ªzÏ·©ú, @¢0BüЯŽ%€Ä_c4ø'h†"yüœºèëc‘³ý{S†lѼyó^™1cÖø; „?æÂX rÔïd;_Š? !ħ¢¯i°:¢ª|‡2\,A“ÑÍ€nô÷Í ‚׆@ùd±Ç[ÙŠêÍP©ýæåË—¿£Šû^]°`Áfé»aO, ñ¥õSüi!4‹¬@⡉€*òÛ„ùý™ÂI¤œh ÿ¯ˆD·údqO|« º~‰œü’TÿÖ­[—«Œ·zè¡ù*£’<À'f¹Û‰½UÄïDøjG(þ4„€eì {ÔT¿µS§NõZ}!Ä^ƒÁK‹/~gæÌ™o¬X±b§:µ/Y¬í €ð[¥ûÍ ý(þ4„€DúNf¦ÿq¨ôó§gžy&¯h–~OjÖ†O?ýôcµ-ïü÷ß)þné;±Ï(B7~«%³ïc'üN·ó¥øç€/!ÄæÞI: ŽÂÞ£(á(î=ÊTEõƒ>øˆè3‚—4}TWEç–-[–/[¶ì“^xaÁªU«öÈ¡ó˜­É[e¬Öõí"~'é~Š? !$ âÀàm L€:*Ž9æ˜úÓO?ýØúúúÃKX‚P+NŒÔÕXÞNõ6® ðÚ•¨koÕ.†8ÚÔN|Úû*šoV#v›Ô|ý}*}ߨÚ÷*¡oRkø=6ÑyÜ&²6}7Ñ¿]V nó¼ì*û™ò§ „„܈X/Õ$‹~âÛ‚$`$üN10 f_“ü«ŸÙLÄŒö>°q}z‘Ñ[»iŠfÑ¿YzÞ­ ˆ;ˆöcb¾çƒðSü} çBœ`40Y$"IïG“7ùq…½_ëÔˆ‰€[}˜|}º×ÂÊ$~,fò9'‡Sñwc쾇“ç%BH~Š~¢°™€Ä#j"’1ñ/0È2ˆK3 6ï§c¬RÛv†À‰ 0‹¾Ý.8z ? !„¤ '§»ÍÐ…Èmôï$•ïÔ dÃ8Í ¤ý»1F-{©Š¾Sá§øÓBB˜0,&Âo¶s`AÂ×§³öo—pbÜ·‘¿ø‹MäoUWàÔ¤"øN«úõÓBHÁˆ™|>Ñ87…|nÅ?’Ÿ5Uñw’ ˆ‰»e7n¢|Fý4„ ¼m@„=f"þqáwý›™€t²V·‹tÍ2é.¸É¤áSø !$mCàÆÄ\FýÙŽþs±i3ŽàÛ‰=…?Äp!$•û…U+ž™°»}§Q¿W~1"™| ?ÿ  !ÄõýÂÎDl„¾ h?Õ´ÄÅÏçTSépcÄÅÇí„>Õú(ü4„Þ3›;Sà¦Âßíz6ZÓÉX s<…ÿ»‰îÓÕKñ§ „Ç&À©É|¤Ÿ©Ö¿l™§ÙtDž¢Oh!žšgc{~>U±wõ§[`%°™4©<…ŸÐBrj2!îN¾¯Óç•iŠ»s'Ÿs"òñ6B@!Žï!nÛM$ï4ÂÏFÚ?ÝŒ@:Q{ª‘}<ÅŸÐBHZ÷‘TÛm4Ÿ­h?S&Àîÿ©~Îé¹)ú„€â #à4Bwŧígº0QΤ¸Sô !Ä÷÷7‚J4ÉÀsLWLã9ú8EŸÐBqo‰dùó^ÝãÒÀ3Y GÑ'4„@Þg"YøžÙ¸ßųôõqž !…¼„~ Vâ|,!ÌBByÿñË=-îÓïE !„÷%ŸA¡'üC#„߯(ô„P„²{ÅB!„B!„B!„B!„xÊÿ½Œ£ŒXçIEND®B`‚././@LongLink0000644000000000000000000000016600000000000011606 Lustar rootrootqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appiconset/icon_32x32.pngqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appicons0000644000175100001770000000253614616416776033232 0ustar runnerdocker‰PNG  IHDR D¤ŠÆ¸PLTE7­E6§C6§C6©D––– ¢¢¢–––NNN«««­­­ÌÌÌzzz ‡‡‡ÑÑÑ...¢¢¢OOO§§§¤¤¤ÈÈÈUUU²²²‘‘‘²²²ªªª¬¬¬¥¥¥"""ššš­­­ppp 888bbbfffjjj]]]///AÍRFÎWHÏX}݉ß÷âÿÿÿéùë”ãžnÙ{ýþýêúì©è°¢æªÝöàŒá–ÅðÊþÿþaÕoKÐ[òüóãøæèùê¼íÂHÏYBÍSûþûÇð̧è¯[Ôj³ëºûþüùýúCÎTÆðË¥ç­öý÷ïûñìúîÚõݺíÀOÑ_ðûñÏòÔmÙzTÒdóüôÙõÜíúïUÉc—ÜÉÉÉ€ÞŒñûò™ä¢â™ãøåƒÞŽÐóÔÉñÍÀîÅFÍVhÅs¦ÅªØÙØÞÞÞÙÙÙ“ãïûðÓó×h×uÒñÖÞåßÈÐÉÇÌÈãããñññÝÝÝëëëTÒcÎòÒh×vKË[†ÂŽÂÈÃÜÜÜéééìììïïïÔÔÔÚÚÚbÖpüþü_ÇlÁÆÁßßßæææèèèÑÑÑäääWÓfKËZ¿Ã¿àààâââåååçççÍÍÍØØØÒÒÒxÁÕÕÕáááÈÈÈÖÖÖÛÛÛÃÃÃ×××½½½ÏÏÏÓÓÓ¼¼¼ËËËÌÌÌÎÎι¹¹ÆÆÆÇÇǺºº¾¾¾¿¿¿»•ľftRNS —œ)2 ›4 $ .372?(—auØß#þ…!ñ?«-þXÐ5qÚ:>QVWZfßþw&(/Fì¿9éäL,ÜÝY%ÀíŸL+M‡–›ŽkL#6"(wäïIDATÕÁMKqÇñïoþÿÿÎÌÎn©(nùPƒ°ƒ!Ö±‡S"BèÔ¨K/ êЩSï k—.£§‹‚K ‹Ž™ëª³»ÓÌú\½>þ¢Cþ”z XrNÔ6 "ã•[ö:{¢8µ€+&á4ÿ`ðÀ…I4Í¿xXhu•©ÍAV`Ñ1M’3V›àHØcÁ¹@¹#«b¡åÈùRLOA¤Ô¶ÈZ1,›Ÿýœ££ ϲ£¢ò/Àá*R›™àG%ðØ¬ød|ê5çj5r^%²;õƒc›Íxìró£p¦0\¥´p’ÌØY{ÛË®pBú0Åæñåî<0UË®÷—õ.¼€Ò%åÖ#y5¨Ì)ró‹æüÌ•ê5[ÙÜ5æ“ǾïÏ>GSs7J¥F5Š ËÆ˜¦4Ùó8˜ ã`( ‡ŠÎÍâãdߣ0 6‚-ß÷{K7½¤Þrc¾$:$=ô¿®o:Ã-©º”Xh..÷ž¦C™p±>¡zTH}½ÛjbIYêJgéèŠËã­¾Rx4¾gçë)R☜e­ïœV¤ÕÙ©ûîMy­ HÙ– †Õ°DðòUA#síÄAêN'ÕñmDOã0²Ùó14¯»K}Ïg)™ßù>…ú^„Z°IEND®B`‚././@LongLink0000644000000000000000000000017100000000000011602 Lustar rootrootqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appiconset/icon_32x32@2x.pngqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appicons0000644000175100001770000000456714616416776033240 0ustar runnerdocker‰PNG  IHDR@@ªiqÞ >IDATxÚí[ PT×¥¨ic Ä’4ŽN&¶Ó1mCÆ8±Ú¦‰budb@ BÒVƫѶ”1±hŠ:iLkJ@ ­5‡—ÊK°‚€ò~¿ßï÷à ¿ç»sÎν¸À¢‹²3û;ß,³{îÝó}ÿãüçìu΃Ì`3˜Á f0ƒÌ`ÓÞŒT & sg10?c]“Ç MždXÌð4Ã3 ?˜EÀœ¬ÌÌt)¼>79tß«YoÒl›ë÷æñ¨Õ ùgV½ ä¹?âó6Òù³úBž ð"Ç@oÉs^bxâA0Ögò+€1¯ zKþaÀj±2øõ3òÅë²·ÒÞ²èhÍIòi8G'ëÏÐGÕŸ’Kñûz!‹á¹é~áy¿¥ðöhº;:HYçp—$ Dšè>(;H§Ï«ñ8XÀðÂt¾l{á.‰œ¶–ÙŸG69ïØ¬û«,»G..²žNÈ×6(&Ýï%t'Ó[B(¸õ¥õfÒðذb ¢E^˶,¼¤í}Z篘prO:mÊuºoœsáï©n°Q=ndl„Þ.Ü=¥“¥Ë¬ äërõdÛ¾é  9ŽŽE!cÿ„6¥þLä<ÒCnM5a]ö¶Ù#€}¾‹‚ÐÍAS^“w§H=¾l Rý¾¶¶!ç­Ù#€GÅGŠÉ¡‚Ou<ÄQDŽkkë³fXÒäf›÷Δנ'›« xÿËÖ0 wJŸ‹÷]Hm‹â#U^ØÐèVC”Èmwé_&-‚£ÐZ€Ð¶HõD{îõi51÷’ ‚,÷Ò_®tÄ©'Ú5Ü£ÕÄvïSô¬ôÖ_BdðÍèð¥À¾²õW€ -¡ŠÉNÔÞÊq°ò˜â¤Ä `,ãfÌ7{*­g“µÏwòšc5Ÿi\fP'ŽÓâù666–ëtÔümÒŠ® gYg' MÔøÆFÇ›¡ïpâ8ßøž»»ûÏÃÂÂÒÝÜÜ^ЉîŠÉ¢/˜êšÔÞ õø†¡æIšNç§A€• c|33³gOœ8áuùòå___~œ¯›½€|'X>P5©Çpf€b),²#þ¾1ŸÕ(p—"Ó` Î5öìÙã”IÌû]K—.ý{ÿ) ðŸæ‹Š cûûº†ܷܿ)³/W1ö½RÏ)Ûë¤î›t¨êcòªþ„>®õÑZkkkÿȸ¸¸Ñ«W¯8tèÐiÆíÇ<5t#€mî;Ô?rG1馡 k"߆/ètÓyŠéL ¾{ýŠ1×{R5ÞocÎvd]åÄ›!ÇÉÓ2ÝŽ&ž Fü^QQ¥¤¤Pvv6…„„ôZXXlàáoª3€ýå•Zam­èë2gÿ¨÷Wì2åf—¿ã¾ñ6™´;åÏt&î]¿~***¨­­¨±±‘ÒÓÓÉÓÓ3']Üû* ü®h¯TàFÇF§`·†Ð×tvpŽm€P'"ÚcèTã¿É«êïê¢Ò裂^ûœ¢b£)33“¨¯¯êêê(::Z`¹ßϼ¿Qæ}# O‰«ŽKÅ Kš›ø¿X¿ ¦t â–·7nÿ†ö&{ÒÉx_ŠŒ”<[]]M===q ¤¤„óÔÝÝM………tøðዌÓOù»ª@› ÇåZ¸¦½K‡“ŽÓùØ/)))IÊg{{{ÕäHŽŽêêê’Æ01†—/_nÏ8=ËO¼tz$¦-óò“ã‘Ú:Aç¸>syüÏ‹‘¾@×®]£¬¬,ª­­¥ÖÖV)¤AP ¼b—šš*}ÞÞÞ.¡¬¬ŒØúC^†ESyFRq·Zcçø^²…Æ…ÑíÛ·©ªªJÊ릦&jnn¦––5A/C„ØØX)2ð9¡€ÄÄıµk׺2>KµñþŒ \l»,­õšj€wâ'˜4•——KG1ƒ¨äAƒˆˆqéÒ%Âr‡1bÄB-ðóóËu„sg…áý%òXÂã555’õõõŠ(i€Ï"""¤ñbœ  lÙ²åºAþcñt¶Ã/>Jò2Þ¢ð˜*..¦ÊÊJ)ô!Àø(iï òB,ùxÜ‡íø Wð;§¶Þ—ÿ4¶âQ °?ùJNN–B¤ ˆ Bð¬oĘ˜i,Ä‚‰kðŠÈÑÑÑ“ñx~:Þ˜ò%c-Æm 3„í î>>>ʹ¹RÕ† %< Dh£Ò#MJKK¥±€M\‡¥ðÔ©SYÜû–Ó}NH<÷âê9®âLà‡ ?111ÙÈÂù.ÂZ^QÄÇÇÓ7¤ð0€B訨VùwN7÷5‰0/f3€ùüùÅ«W¯¶e5áQx½rå ¥¥¥QAAtwËA£täÈ‘~b>Ü×$ÂLÁXvDeîää´a “" ð^xx8eddR$//OB~~¾¹ h‹«LMM×óÖés‚3ñÄ)'-wíÚµž^Q€bǶ°RNão4:@NNŽ$†\Ú¿jÕ*7þxÜ·µéú·A€§vîܹ  رã+©9B1ä‚` K‘¡M›6y°ûýŒ‡þ¼ÙN^`éââ²ý¾b°B&å<¸uë–„ñ‚ܼyB ;;;åßb^·ŒçèAs[[['ôòäQ ‡Í 1ä‚ào¬õÁÁÁ]›7o>È¯Z"ïôE€ï.Y²äUæñ1°ÔhŒ!^ÑÞb9d!?ìíígeeåÈ+¾_YTúB^<ˆ~c«Þ,”GpŠ ÓCTøï±Õ`r{xx|µlÙ²ìº_ò‚gÁ=¯Wäå]'B÷•… ne=Á{{ûã®®®¾¬8ú³úð¹Ý±5kÖüI¥Rmeã~ͰšŸì>Í«ý<} {MÏ#/à¶£;\Á/PÐ^æ¯Öüýçùúnɉ›ê£×'ë:pb‹øþÝœ¿.âï/à¤çʈë5ùñBsbâ¿ä˜È~ÉUÉÂ\'¤ÿ¤›h”ÀƒAIEND®B`‚././@LongLink0000644000000000000000000000017300000000000011604 Lustar rootrootqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appiconset/icon_128x128@2x.pngqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appicons0000644000175100001770000002605014616416776033227 0ustar runnerdocker‰PNG  IHDR\r¨f+ïIDATxÚí] ¼MÕþ¿2Fez¥'‘’¢P¯i¢áyõ„¡Òô"¥TÒø4hEÒ@t‘y“"óÉ£¶O´ªýâ 3é xE2• @H~¹©_\ŒíÀ±ƒbÄöñ1×í·ü¥­²m´•ßÞ^ó‘ïÁV ÀQÿX [úq;¾>×k«¿à>¹+˜³Ë°éÐV™vkä+¸}A  õü"ÆÕÿ±â••zíW¼.öÝÓu¾¹º‹¯ þ‚{)€Ôò™ŠÚC /Œ BɸV¸{Žîõ|­klHH,À+îXx?€ZÂ7öŠÃÇ‹6¿>ŸÔëÅç!²ïm—¿èh¸°%€ZÎÛ³ØóÜscßÀ¹,£wLò‘<@ ¤ŽHËy ®­Ü¿&eÍ,æ­>°ÎÓuï“ÁÎx—{ÒŸ @Êøé†>žÞ—V¾“ÒkmÕû ¿öDcë¡íÖlD›†‡;tÂëZÚŽ@HþöB©îeGςׂ!Ô)øAb‚¢ €çè?‚x^Ð}Cï@§/7Ëš€t€ûy‚@ðžW÷‚cÇù&z}×¢‡=Ç0"9îw`0+€à‰¶ ÷ôÐa¶¿Ÿîã·ý«<Ýú‚.Í—´¦P¼qþ^oþ?æóûé>pˆ Û66ðpÏN¡øxÐç>µÿ.{ÖW÷Òî·ÿyº%ìdüŽ&‹ÿK DÏf‹[yî­OöÀÍpDK­—8ÀAÙµˆLB1  j¢qÇ –Ésüüx?8k0>´ß‘ʳ(”ðzÚrýx?ßɓм™ €ßK‰)>ýÃÀ½åÿ{ùò~úÈ3 ½§Yø¼›àÓ? ÎÔóÙíÏŽÆ®žî§ÿ–a€£ÇžPì÷yŸþa¼–Ðúµð-Â^€±á© æÄt92ŒàÓ?Œ×`¿±DU_¢R<”V€)¼^€´™ŸÏ0ôLA¦P2J;ö´«úùaórz1Úo)€Œô{Áò?WùúaÛvx‡§ Z<üm  0Ðnù+iÑtr1Ц”Å5(€À¦áxÁÜ= }ý°aDYªªé(€À€×QZ3vÍöõÆãÀ5€@HxkM—”æÌýÖÞÜbÉc @æÀ»k»yzX'ü>Å×Û¬Ýó<ÝW<æêQ(Ô¿{ÁHŸ6ÙœúÇLO÷ë!¦ @  ëúÏ==¬C·ñõÃöíΩžî«Õ²ö @æÀ‡ëzzzXGlçë‡ 1 î(€0|omwOëØ“}ý°Mßõ³§ûºoÉã @æ€×Ã@±ÅöóÃ6GÖ)¤j°&€踺³§‡õÇ]3}ý°-Ú»”…@ @8¾ºê=O+Òl~~Ø~•ó ½ þ‚û(€ÌLõñ‚{—øúaózZð¿ç7£P2GZ/{ÎÓÊR[??l^§Åã¨p  0€±^^€f??l;ÿõ=a2çP2J0IÖ vÞéë‡íбèÇœm=´^K#À‰uæÞéy"­_‡UÂ÷6äd% øËàß4Rœèõ\ÀÛ´H«£Îâ•Ù ¤DL£Ï­Þû”fÍšyê©§ŠPâ<<ãþ_žH«±à~ÿž<p3üü’…[µjU~РAÕ×'b¸G: Òqõ‡žîç›­#(Á'ÃÇ{’<ãå—_®;|øðu¯¿þz-ùu € ‡mëéE'¡ïç‹Mý<ÝϧûP‚!N«þ)j•/*ù÷.]º<=räȃÙÙÙ_˯‹SB¾ Ú:Ê—÷3fÇ·žîç«Þ¥ø_B­úÅÊ—/_á‹/¾è;jÔ(!`ßí·ß~™üþé€|Ùã`Pœ)èÇûÁ ?©šDH˜8­úy•a#À÷÷FÕþæ›oÃøÁ®]»v’ß/-yšdA €kÔ¼µ§6^iÄ“HMî?v ê{9.ÿ*@ @B ¤¯/YFúùOJ¯müC† Y_ªT©ÊòßÎTPˆÂhpÔ—4\ØÒW÷âõ\ÀM‡¶Æí¼âƹ(‘­úùíUÿÊ+¯¬&·üCl÷پ}û'Õg•RP˜‚ËþüÍÓC‹sÒaÌùÌÝsãv Gd‘TªúÒHÜVý‚jÕÿÇsÏ=÷àСC·šÆß·oß¹òß/•,«àtîÂpÔö‰žÚÁ> bT™·€æÈ”Vá Ö €\aV}¼¦” ô]Ô£G^ÒØ™Æ/y¼iӦȟ»HòõYt5ÈoMAk¬÷to®î’ÒF$ ÑÂ(¡Wý³{ì±»daÏ÷سgÏïäÏ]!yv ’%”»À,@(6Yü_Ͼ+JoƒìÿÇëD X[‘ã•…ä×@§áG^¿T™2e*uëÖí3™Ú;êfü#FŒ8R§Næò竪Ï9 ©Aåÿ³0Ñ çŸoüÚ×ÿ™¼/Øyø_”V?¹üåL€"Ê(ó*ƒÏm¬ú…•ñ–‘¾~K¹ê¯v3|›;w%¾¦äÅ’çjÀ‚ªPˆЍ…÷‚ rÅ»anÔg2ÖØà± ¾§-Ù÷«§ëè´æãL€Ê0ó(!°·û0Ú³n»í¶k¾üòË1á ”)À•+W¾[¾îrÉóá.¨ ÀS5¡¡„"*á¼Ñ÷T^û‹+ßò|íñªŒu$y¼z|.ÔÊ\T{>e Õ÷JžuÖY|ðÁä–~$ÆvìØq€|íµ’U$Ë!E¨EÿOQ» @(Þ2ïnqÀc=vx}ªf¬Ø¿ÚÓuã~ã}Ç©Ié8f-P[­Î¶qžª¶úET°®¬Ìß?Év_çàÁƒ÷”.]º‘ þUTÁ?sõç<€HøÝÎižWÒÛǧ䚳7ñ|͉8à¤û†Þž®Õˆ÷Ä1éC¸VEçK+-®ì£ÌÃ?\ÿ믿žáÛ|á…zË÷¸NåþË©ê?sõ§D—<öØøD>üɼÞwdú†ã.{6î×ôÌo¯z¾hrsŠvRI€ëµrôå6lX÷óÏ?ê’ÓcÆŒ±bõßU¬X±†ò½®”¼0ÄꟋQŽê5`¯b½6 Hʸ0´#Çbüó÷.NÈuÝáq΢õ7Z É#KŸ±Î+Ä“vË_¯ÈxæàH7ˆ-ZŸ³· ñmg¦!7I¢;ï’ºuëÞòÙgŸ —F|ÔÍðçÌ™#f̘rõ—.ÃJX°ú—×jÿ «? Rv[ÿ¥ˆXÉÐd”ˆë»sáƒòøïŸb¾F”߯’Ç¿÷H¨ÑE5”½úýe€ï›áÏ›7OlÙ²ELŸ>¹}ëûÓ¦M;i'0pàÀß‹-zGˆÕß,2¢DBż–³ê@M!épÛüæ¾}¦þ3«…x÷Ýw' 6ì@(Ãß¾}»Ø¶m›˜2eŠÁ@KæÎ+–-[vÒkÚµk×SÚÕ šïÿ÷T®þi#± qŸ¸»JôÙ<ÈÚÖF:LÓ}QÓkS«Ç?–í¾H¢v'6Û¯x=ép÷¢G|÷5þéAñηňQ#·ðãÆ ,;vì»wï›6mãÇ2 hýû/¿ü"vîÜ)¦NzÂëdßÿŽSO=5ÒÕŸçDŸZk$Ví_›°‡õO¹Ã@Åܼ=‹¬N¼)2û0s÷ËuÀ÷÷Ý›°ÏWÂ(ŒòÚà~*%¾gÆŇ»‰‘£F:>Œ|Ñ¢Eâ÷ß· \³fÝ}¢W¯^bìØ±bÕªU–ñCÌ×·mÛ¶»æûûbõO+ûµCÜV]¿[ÿdgï]T8 P˜Êç¥îÏwŠ6SŸ½Æõq ÚMœ8Q,]ºTüñÇ>øë¯¿ 9¿OÈÞ~1a±~ýzËøAìô÷0`À¶ üG­þfÞ?¥§ ¥•Xñ†>icüëlŒË៑òÖyM’º €Û‘Šg¤áÌûÅKS:ŠAc»þwß}'~ûí7±k×® _Ã÷—ѧOË÷ߺuë_ÆDÃðý?S«ÿ%!Vÿ\€÷Øû Hm¦ÂG~ö·×’¶‹Jf9v9ÄÃÓžOü4dš¾ûêÕ«O0z›ØüðÃâÃ?ýúõ³R~ˆØÆ ÐßOw.\øcõ·;þR~Ö`Z âßîœXã_p“Õß߇ëz&EPè†+øöoL~W =ÄÕèÑÿùçŸ-ßÝÉðADûGÌÒyV¤«½nüàO?ýtÂ{wèСw‘ÿ\€üñûÊ(~а`ïñŸ÷ú¢ÂrïÑ} ½×î ªÂĿÔ×Dß±Ù!W{øî‹/¶ŒÛÍðíH¿ôã-ãGÐ1ÓðA¸ ½æÿŒ3Îhä×Õ?­Àæë«?»ì „ñ#íè§â˜ú î³…¼` ‡¯6}·k½mV3ñÌ/‹/Ƕ~»“ïDDúè{ÿý÷­×®\¹ÒÑøAˆ‰þ9ò¤Ÿ~~^ý3B¬‡cAó”ºD‹w¼%Žåôâ÷×~"«gzJw9~ÄJ•¢q 5(Æ9芌I fÝ+žùþeÑsü—®é;=‡m{¨m¾É%K–Xþ¾œ×o½^ô;qÒ¤I}žÜ)ì“mÂw9äý}³úgŒèiÂi»fù6U¸çÈ^kÕõûï±ñ¢‡¬©·×t=7öµjûAT=bƒ­=êÿŸ’EQ(`Šç®zOýð‚è1þó°Fíø?þh­Úf/gΜ)Þ~ûm!‡yŠÉ“'[¥¾¡Œß þÉ~ÿaÒ†nôóêŸq`óÞ%mÄðmã¬ÑZ~C¼NüMÞ0»¡¸wzkñêwo‹>ã²#j·…ÁbõçÛ»Eú±Ú¿ñÆBN÷±ïÊøAôh³þWªTé^iCW9TýùfõÏXÐ…(FÁd›å®ô<?Þx*Ígí…ííø¹‰h5õñþ¤®bpˆè}¬[|“H類_žÚƒYý®‘~“›7o>!ø'gýM–öSG û,ï×Õ?ãÀäMó‹VËÚ[i0´«~ÿÇ ñ‹œz³ãðNqèØáµúð1âãµÐòŠí|,íµ¸–ŒùÝϾCÜõÓCâÙï_‰hk¯WéÍž=ÛÊÛGÐ ElñQ؃•_Öí[;ˆp†osþüù'Ìù¿þúëÛHû¹Z²†‡ø¡æŸÇ1dèb«/Su¡NÆAŽ;ôŽc„ܼùç»Ä#²0çÉÅ7cE/m§–:é§ŒšèËÕŸ`>´´8vüXL€’Õ”ÈJ<ÔÝ>¾WÄ«<¶ö³fÍË—/·zíM?Ü€XEîÃ;?ÝÚY ~€Ï2Jô¶ßÞ½{/—vs‹š"TAôá4ë)²mtL®@<KŠ‹4ûn«æ=õƒÇDÀC=¢èX7lØ`ãl:b¬€×¡ÙG¦ê„<½Ç2bTñ¹}®› àZõûxðÁßQ“„/V3KŠøÊø)IšVK‡ªýP²PhÖ=¢Ý/‰" à!bÄ =äÏa|Xé‘nà €›DbüxLíyíµ×ħŸ~jí4ìÏÖ?פ“àµö=õïßsîܹëi}”Vçúvõ§$‰WwŽi0zÇ$ÿ­ô?ßm¥êB Ñ0ëîQ\ƒ>zlµaô¶áÛ´ÀMbuðy¨é‡ñ#âè½þ™&C ²zêïé§ŸþT¯¬ŽùÖOÊ›ìYŸq®œËäâ¶Ë_Jýæ9 åöþIñÑÄý·ß~kùÙˆª#W£±i €.áÀM"l×1¹Æ°ã nN 0@kúÙ-›~h§üê«>?ÿ(I&Jb?Ópºs§,zÿâ”7Dÿ1ß„Ý򣄮Ü]|LF"zן<äóÐyçw´—ªå÷l¿µüRüRü"‹ˆ6ÚÓtà¦I8Š«éŒGÂúöðéÃêŠíµM[t'n"K0ÿEÌAÚi¥ùtÄ5éŸïtáßÓG~É‚‰ªì×lúñýêOØ©ÀÀ¬Ýó:»Û÷‘Y˜|‹/0ú+)ÚcÁpà&ѸÑñ30xäø»wïnî %DÑ‚1ïÿxÍš5[©²_ß¶üR|F¯Çq£YiÂïSâ~:pÙwZt†»ÌÂÿþûïÅÂ… ­-> ߦ-n"à5h Þ}o½õ–5È©FóóM†ó!,FÙïMFÙ¯/›~(>â]‹ŽêXsü,š$â$Þ–ÓÙcû;>V{¤í`ø¨—·©¸‰@¢Ü\Ç!C¬`ê€ÿ¯¾› E*fÙoãÆ_RÙ/ÀGDÇ`8ì:²Û:¸4Ò“‰¢’ûæä÷\W|luaø6ÀM¢q¼MÀÐYŒcU÷¡¥ƪ_‡y-^‚hÿŽd»ðj—²__6ýP|7¹øN±öÀGÃßrh›øHž$|K‚ŽÝ®'+÷¾ßÛÑÇÇ¡HáÙthܯÁÀhܬô²ßÚöã>æsºŽXï©þ´nݺsÐÊ~)>#NûÕ¹y¨ý¯“ÀÁ Èé÷×ÏuP&ôpà&‰rÜj@øøÈñ¿÷Þ{Vá®M¿“^‰ú9 ¼=he¿ròÎÅ¢½KE‡Þù‡É¹ýÆ8Éø%G:ÆoÓI¢q¼#uðïØ’£™ƒ;a úu8]WA€{¡ÿ¾^|ñÅ>Ò>®“¬¤²_ €O1IJ Âì»ÏÀC.8Nâ ŒGM~«=òûHóáÜ)‚ ·üÊ!ûå´ßÆZÙïÙjõLêÃI>˜ôÑIÆÓp°òÛà&‰r¼Ôàsá‹£²C;‘ž4¯Å¤WAÀuã÷£ÿÎäçŽV³þWöKÈP¶ýáy×m$``Ï—Å'“ñœ-¨¯þõêÕ{F5ý8•ývõw€JjÑzº¬øÓ‡y`V5øµ‘ @*‚¨éGzi¾Z_ë׿vñôBèÂ)w ó²rNú©žYÿñ€ò€àq˜9¿.n"ªšló1´Ónè»â&RшA4‚€¯õc¾Àúõëw±úªì7(¬RÈq^Ec fðO¯÷Gä+i¤ì` þ?júáëãx.Ì´cúõ™L„  2R7~9Pd‰Öò{¾ZýÏH—Õ_€Üê† «Ê&(Ýe4¨àc½ô‡þ, Ê7HF0Ðü"ý]ºtù«¡G¿6“‰ûÞð<꾃 °ú_£­þ%ÓiõÏÒ.Þ€BÊ¿A{c%Uô€èç$ÑÑT²™d Å{É”ò>I”¦¶”|X²M‡&™Í>‘@²kðØ ¸«¿}hˆÉd ‚Þî«EþÓzõ7 ¯jh(ªÎUÊw¹ò0÷¼® ˆàs+™þKÇPý[ò6ÉúJ [ÊŠ¹ úöõò7HF0Ð|®=ºë«¯¾²Î°¯Ñ¼Îd\$}تþjÕªõ˜æû;µüæúêïȯ¹g©XÀ…ªóé2Õ‰Fˆ«Ôî€L kª‡óÕ—ŽúôÛ*Uªô¶®æö?”Ä#€šþììlËøéGÔ]¿F“¡Ä ‚€ÿÖb£æÿ[µÐ9­þ-û4PP튫/«ÒU±²«Iã%ª!¥šÚ¡An’§Ó¾oæþ‘þs2¨TÔ`z&õ"Ò:!¸>“É3ð'ûý\|ñÅ÷kUç¤ó꯻z6ÀbÊ8K5?œ£Áæ¹dJXNÕj\ R䨯—†5T˜ÑDã&ñFê࿈ô£¤‘~¤Ú°í†{bÓIb„Pbâõ¨4¦ýd«•]óoæýÓjõwÚäÕD °‚Ó•WyÐJÉä³”jCµE¹œÚ•Õ–yôEzé¯nX‰vÜ‚ø>R{(ëE]?jì±ò›`2‚`Ôû£ÝxSáÂ…ïP.n¥tÌûG*y”ÚåWÛžBJ «b!25,¢xšòIK*¨˜'OžÚ²„vŸ~2¯›Ñ$«&¯9r¤µåG¤I0|7&SPxdIiѢś*Ø}©*†;3ªþ¢qt!È«nþµ3 SÃüš T‚p†zH/GT5Òf¤µœvɪ Àçàî7ÞxCôéÓÇJGbå×J )ø”G뿯O>ùd¶Ê®\‘ur¿Ú¯þá„ ·&dj™×ˆÓÀ¨Ø²eË'Ìü¿i(^Ü/ÁÀE‹Ye½0~9BÛ þá{ )©}Ї=èó’K.yHeUªd<í'íW7Èå dê¨ïÊ hPI¯ÞÓjlqÝ ‘5ø\¹šþUÓ¿müNô*¡Ä ” @ŒÌ­Û¶m{¨;í¨#¾S!djø7‡¢-¸•å1Õýõ‡m´¦1$²&ÄÀŒê–×bEú‘ãÇu˜L• à=Œr_*²PT]¥2*vÑO`'ýé-ĺ`‹Š²íKemŠYè´&"ˆïaÖ V}¤ú0º )H€M'!H¶ }þÖÖ¿jÕª˜ów­ ü—îE?Dú@A%Ø®V“%µ ôÁŸºDãD ÄÏIC²ü}Dú‘ï7߉ÉE™[ÿÇ[ÿ›T1UE—ÀWÂw`Wl"E…ùt—Ëö*ûÁWh¯` ÞÇp¿öÚkV¤Fãw¢W1ˆ‡ àóÍ‚Ùì3++§â*UGaò‘±?"XPHmUá³^!ÄÞ¦×D"±a¸8”+?ŽãFÖ?nbLAÀÏ›C>dzr[éÒ¥ÑÕŠÓ}«[§À€ð¥S+W Y´_orò…ãåÀØÑ¿¹}(ôA==¢ÿ )©ÌÐ_ö ¹õÖ[Ñç_Gmý/P[»â?·`gN˜Þ$«kê]€(q %^ƒøÿ0(œË‡9ý(¦™={ö_ÆïÄd ‚nüf?øÌ3ÏôÎÊi«®¡Eý¹õ'+åK•*uƒþëà5h þ ?m¼ü±åf §îD?Œè=þ œ<4Mþ¾nÏÊéôCÁOyný‰  ÀI#ÜË–-{s$àÕ ÀÏÃÏG°í¼¨¤ÃÊoÓM‰A¢×dýdeâŠ"EŠÜ••“òC§Ÿ]ðè?h¨ û×ëE+‘º¤!Â`çĶ>¿.&S)ø Óøe9òŽŠ+>(W7fåTû!åg÷ùåÖŸªÀw­P½zõú¡À«ƒD¤Û~Œðš>}ºeüNL„ „'AÀkÌ&û\wÝu8Øùþ+”ßÀ)J¨íN?ný‰@ @~]d5ÛíúC@]¨Ê¸HjàCcZ/xØg ú¯ÓM R!x­™îÃl¿fÍšuRA?äû+;øýÜú€"¶œþùÿ2GG+º`ÃGY/ª QàAMðƒ 8?²">úh÷¬œ:ý0F ùþÒ.~?·þD àü’%KÖÑ~Là WïÖ*kGú?ûì31qâÄ¿ ߉¡Ä Y‚€Ÿw2þvíÚõV´øVUA?3ßO¿Ÿ´XA@Yp­nv)p4»üûàÁƒEÇŽ­C9±‹ÀÊoÒO‚€×a‡bæú_xá…Y9gYÔVû”qúÑï'°Or®5|øðƒ¶ å5\—œ.(šA¤+?Ò}pàóÛt‚X!”D"x³µ|ýõ×Ge圓€qéÕµˆ¿]ìàx0r¯) w»y`$»øÐÈí£º£º‘ãG´_“©¤"Í"eü£5ãG™/F{•ÍrŽø3èG^쓜¯–]y«tc@N<œÀð0½Ñ~øþ0,¿ý"fm¿íóËmÿ eü×+ãÇT_¤û00Å)âO¿ŸH Àüº²Òm9,Ô.Ó{`øèáGîÆ^~›nB*AÀû:ùûhîiݺuO?‘)pR3䲿}ªn0('ãGeêø1ºKž#h aü¦˜L• à¿Xõ¶ü2h¹·aƳr¢ý×fåTù™ÆÏt‘Ö€‡ýŸÒ G™cÁMãG°[}tòaZ/Ò…¶ñ;Ñ« „ƒhñ§@(Ó”Ëd 4ðÄ!©µCã§}€}ˆ+"Ü—Éy|Ù¡Š™«#¼ðïpL¦Zð5 ß,éÕ«û¤¿?8wîÜhìÁž8$µº ø9ÿ)4~"À‚üvÕ矾«[-â0únݺY<°¥†‘Ùt‚d ¾ër[ñUGß*Y×ÿ¼¼_ß…(ïÅ0O¤úÊfåDûiüDÆvT·U‘ƒŸH{0-ªVÆs•áÀˆ0üò6µ²6½ôÒKÛÉÕ¶ë³Ï>;HvýM…0H{ ‚mñ2rÔä÷ï߇tCVÊÓ§ËêׯÿŽôçÿ« ¾±ÚÞÿ[­ô0úÚjµGýþ¥ÊÇ¿À0üâj»j˜UŸÆOddÀ®,­bfå¤ËàG£Z¹s Èh Dáne”Í‹/þÈÕW_ý|½zõÞlҤɇ=ôP϶mÛfwèÐa¨ä0ƒCe>¾_«V­¾’u=7nܹN:ÿ«P¡¢õ-Ô{6QŸÑ@­ðÿR×p£ èÕR"£¯ª­öçi>~)ÃçªOP 7  Ú”P®ÚƒQ‰ò£k(1¸F ±®2Ê[”þ[k}µJƒ ]Ø@ý{}%*Øi ÿVõžu5c¿F}ö•Êà«©ëºH3úsÕj¦ hž¡mõ *‘s3|?‘±n€ ,¤‰rãç(㪨Œ­ŠZm«+C¼BåUÊ@k)c­­‚pש݃¯S¼V½¦–z«”Ø\¡>£ºÚÖWÑ ¾‚ÚÞŸ£ÄÊ6úbjµ/¢î¥@˜Ÿ†OP´X@>µZQ+hIe\ÿPÆVN ÂùÊ+)£¬¬ ôe¬UÕ*]]ãeŠú÷ª©Ÿ­ª^[E½×Eê½+ªÏ²WøsÔµœ¥üú†Ñ›«}^Ãð¹Ý'ˆ®€½( Œ Fuº2²ʧ>SàÙš0”UZN¹ç©Uº‚2`7VP?{žz]9õ^¶¡Ÿ­{)ÍàOW;•SÕJo}>Ãè¹âD®€-ön ¿2®ÂÊØŠ¨ÕötµC€1W†YRéß•HØBa³´Fýûgj^R½WqõÞghÆ^Ä0x}{o½ÛjOÃ'BpŠ¢-”RÔÅ¡ˆ2Ö¢J(l±p£ý3E #/¬¨{~ÃàVzÓèiøáAri•[„<šñéÂ`‹ƒ-4¡EýgókFžO{ÿ¼+¼nð4z‚H ä2ŒMStˆ–y æŽÐØiô‘D1'áÄÂͰÿ¡¡Óà "Â/AAAAàÿÉsÃ$tö3IEND®B`‚././@LongLink0000644000000000000000000000017100000000000011602 Lustar rootrootqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appiconset/icon_16x16@2x.pngqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appicons0000644000175100001770000000253614616416776033232 0ustar runnerdocker‰PNG  IHDR D¤ŠÆ¸PLTE7­E6§C6§C6©D––– ¢¢¢–––NNN«««­­­ÌÌÌzzz ‡‡‡ÑÑÑ...¢¢¢OOO§§§¤¤¤ÈÈÈUUU²²²‘‘‘²²²ªªª¬¬¬¥¥¥"""ššš­­­ppp 888bbbfffjjj]]]///AÍRFÎWHÏX}݉ß÷âÿÿÿéùë”ãžnÙ{ýþýêúì©è°¢æªÝöàŒá–ÅðÊþÿþaÕoKÐ[òüóãøæèùê¼íÂHÏYBÍSûþûÇð̧è¯[Ôj³ëºûþüùýúCÎTÆðË¥ç­öý÷ïûñìúîÚõݺíÀOÑ_ðûñÏòÔmÙzTÒdóüôÙõÜíúïUÉc—ÜÉÉÉ€ÞŒñûò™ä¢â™ãøåƒÞŽÐóÔÉñÍÀîÅFÍVhÅs¦ÅªØÙØÞÞÞÙÙÙ“ãïûðÓó×h×uÒñÖÞåßÈÐÉÇÌÈãããñññÝÝÝëëëTÒcÎòÒh×vKË[†ÂŽÂÈÃÜÜÜéééìììïïïÔÔÔÚÚÚbÖpüþü_ÇlÁÆÁßßßæææèèèÑÑÑäääWÓfKËZ¿Ã¿àààâââåååçççÍÍÍØØØÒÒÒxÁÕÕÕáááÈÈÈÖÖÖÛÛÛÃÃÃ×××½½½ÏÏÏÓÓÓ¼¼¼ËËËÌÌÌÎÎι¹¹ÆÆÆÇÇǺºº¾¾¾¿¿¿»•ľftRNS —œ)2 ›4 $ .372?(—auØß#þ…!ñ?«-þXÐ5qÚ:>QVWZfßþw&(/Fì¿9éäL,ÜÝY%ÀíŸL+M‡–›ŽkL#6"(wäïIDATÕÁMKqÇñïoþÿÿÎÌÎn©(nùPƒ°ƒ!Ö±‡S"BèÔ¨K/ êЩSï k—.£§‹‚K ‹Ž™ëª³»ÓÌú\½>þ¢Cþ”z XrNÔ6 "ã•[ö:{¢8µ€+&á4ÿ`ðÀ…I4Í¿xXhu•©ÍAV`Ñ1M’3V›àHØcÁ¹@¹#«b¡åÈùRLOA¤Ô¶ÈZ1,›Ÿýœ££ ϲ£¢ò/Àá*R›™àG%ðØ¬ød|ê5çj5r^%²;õƒc›Íxìró£p¦0\¥´p’ÌØY{ÛË®pBú0Åæñåî<0UË®÷—õ.¼€Ò%åÖ#y5¨Ì)ró‹æüÌ•ê5[ÙÜ5æ“ǾïÏ>GSs7J¥F5Š ËÆ˜¦4Ùó8˜ ã`( ‡ŠÎÍâãdߣ0 6‚-ß÷{K7½¤Þrc¾$:$=ô¿®o:Ã-©º”Xh..÷ž¦C™p±>¡zTH}½ÛjbIYêJgéèŠËã­¾Rx4¾gçë)R☜e­ïœV¤ÕÙ©ûîMy­ HÙ– †Õ°DðòUA#síÄAêN'ÕñmDOã0²Ùó14¯»K}Ïg)™ßù>…ú^„Z°IEND®B`‚././@LongLink0000644000000000000000000000017000000000000011601 Lustar rootrootqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appiconset/icon_128x128.pngqbs-src-2.3.1/examples/cocoa-application/CocoaApplication/CocoaApplication.xcassets/AppIcon.appicons0000644000175100001770000001221014616416776033220 0ustar runnerdocker‰PNG  IHDR€€Ã>aËOIDATxÚí] |WÚ¿D"ŠR ÚŽF‹êbf|­òÍ7Ó–)ÃÐiƒh1šªÖZŒù™©©eø‰µ–Qû6öÝXcO¬„„ˆXƒ$d±ïÁùÎÿÍsÒãí}ßÜå½7÷ÆyüžŸäÞ÷ž÷ÍyþÏsžíœk³)R¤H‘"EŠ)R¤H‘"EŠ)R¤H‘"EŠ)R¤H‘"EŠ)R¤H‘"EŠ)R¤H‘"EŠ)Rä ³ÃÅ;ÌöæÏ¯À9sIÎÁÄ¥;ÅbÞ‚h>}BËKp~†sÎ/p®Æù%ÎÕ;Ř·9ÿŒsišWŸ>ÐZÞpÍß¿{è#¦Ø}æóY•¬B€/@æ¾´ýíM§+ÁY €_r~––Õ⾽𫿽¬ÉL%4ËðçŠ4Ï>côÂÿþ,%0à7œ«Ð2PÂðSá/UÂ÷ Þ&‡º´/@ ßûhDAòŠ)á?]hÌùçŠ+á+(á+(á+(á+x#½«„ÿ”@?RÕU’çé@ežž/ŒÜþgǾfߥNg²¶±C7Øù»iìòý,vãáMv5÷:K¿w‰%ß>Év_f 2V°oN`-ªàíÙ[(8ýâ|–z÷"s…î=ºÏ¢®îg=’ÿ¡`ö—¤ÄëÞø#Gû7»‘{“YE{¯Å°„Ï]~3zP‚Ì?  <ùÇ5köäD2OÐÕÜkì«ã³ïúø©@i*@4ôÔ†‰Üye/ó$Ý~x›…%õ±M8h‹: (@4òÔ6õâ<æ ºx/ƒ5oošÆµ-Ò`ºicOüQŸ$~Ŷ{¦ý˜ÿC0áü öyR_öqB{?.Dæ'G»±þ)CتËXæƒìA°äÒËðA|;wys¶ùºêÎYMèŽú3Ó²‡ŽwÿÑ @V ™“ÖD@Çm¾`¹&ÂJº•Âþÿ‰Óã=3V³F´0c¥%påÙ$ž‘¶Àprïòe!4ñK—Ç^›¹Ùpl$’õàÍÈÛ §"€“wÎN.èÎØí»š.=í$‰œ¥›oiIÁz«ãÌRóÔàÏG>34Óx½ó±ÞnßcOѼôen  úðHg#þöô(É;w÷‚%÷qv‚á=boñ8Zé¤`ijÓNܺ¬Í–Ü>„!dô4Zî `Ä[svN4תûå°Ìè8«Éj'±H åöiÉë–<À²ûÄßH4¼¾>`5Y'(R¸óè®áÄ}d¡÷l–h~v¼[a`«ÃØâÚ©0ÐùÊ_[ÓZ¾•U¶ùéË ï5ñüLU. À;6¢ì9–NÚä s ï…¦€B’4F”Æ+vVNÚÉŒè?Ü:(ä1¢3wR-´‘ç&Þkùåu …xßF”|û”¥“†Â­ÏÚªPèzü¯†“ŠðÐÊIvæ;·N @Ç£==žþ±Ét²á½Vò&€B@›„.†“Š>+'müyc'pñ¥Õ …€?îh^±tÒ¾¿0שР€WAm 'Bè÷³ê^‹2V=­‰ ùdÖbßI£ÂˆÜÙÈáL*B€|J+6ô–jÞ¼ùsÓ§Oç€~?G‹4î0êþFÔ7ePQ@1;ÛùĆžò=zô¨¿zõê-;w~ÑoÊÁCÐLGù½tÃû %½ˆ@¯õ8¥µÊ AƒÚ¯]»6‹kÿ€Á§07}‰áÄ.½ô_ËœM£¶3G‹Nfd¥¯â&ž8›¹råÊ5§M›6uÆ ¹öŸâ¿ã„Ñç| ÿ:3Îpbß}ZûüäÉ“£¹ŒÞ'í¯ê®ö*äbjö+xû6öøÁñ{ðø®$W{GȚр“à åtϦ±mÙçû¾f#vŽcK#–?!ôíÛ·³Ã‡kÞ¼=¡ƒ¯^½ÊV­ZÅx¦O»N>a ÆjÙ²å߸ŒÞÂaÞVh¿OÀŒõǽÁ‘¼m’·‡ÙöÖ¡NÆtb_ïù›¸m [»qíæ=**J[³áÈ]»vMc#áÃÛ_´hÌ»æèé…/œ¿9sæ$Q’èU«´ßçàlÿŸÖš±šy*” å¦ý›¨alö–yOh9{Bð˜xxî0ï.\ЄoÙ è—ü´.b|„yò2‹ñ<ËСC—q¹ü–JÄ©9IJoõ[€Çò†{»Ž&_˜Í£P‡»»‡ä{ñˆÓav!øÔÔT-Q´ à=¤uy¡GWŒ!¥,/ß«Y³f{”‡é0ïgm©´_ÊÙ<ð•ò~—ZÉxšVxö0ùHµBX€Ù2 [ý2 @€hβx²5‘­Š=@ <¤v¯h*ú ä[™Ú½­Ôþ§mb>Ï/Á" ƒ¹ ZqcbbØÌ™3µl “lU̱k×.Mû›5kÖG*ú”·"í«ÀyúÖÙšð¡™(»z+ _ rÁ0÷ðôaY˜dP™@<oã²hbeÑG‡VDwÏ_÷fz+ _ rñúš5kØüùó53.'Ë ˆBð|­[·`uÑÇl{±ÂŒ†EÂñCÍ Ð[gA\·xñb-̃ðÅx2° òx¶Ù³g'Ú)úyBûÄ·†!Çüë¢*|4]"Þ‡ãS AÙ³Î:ƒ&ãêÇ”Ç6^‡UÂÚò —ÃÛRѧ”•‰#”¢8³6íLiɹ-çO9w$îä‡üÎaœ»wêÔi!4 !– Ù 8ë ÂɃ³Ç ã ãÊãÛƒ¸'ºƒÈó‘´ÿy«Ó¾FßZŽ–ºÔpؘv©¼Kሿñû4™-8‡Ž7n& YcuQâΚæñ#€1ev¸I"žõ{À›=¿¢µ¿†ÕE3Gðºé ô¯€Æz~Æ(›¾N)TTÑþÄ×苘hÄç²\qѺÅ4´uÞ> ÙQ@ yÀ _OÀõÊÚoÏ ˆ]¨å¨èP™¤*™#â(ªAùôJ•*µ\¿~ý#N½eÀÌÄÏhÝâ;r5ó0É,ÀP Ðÿáó1oT«V-”,ou+>€A -¥È1,ã§\–’'h›®ÝªU«0L4´MÇÞ2`æ âuäôQÔð‘DB™XfgëQƒÀsõêÕk²´Í«²'ã~GO›*Aè§\RZÒjõîÝ{ &ûëd8º àzäôáé£ HfA°3€@ÉÏÄCôiN{ü«y2ëç Šé@áo\‚&¦ô¾Ùò;‘ý“µÑ‘eÝ;pöD@°+€]¾0ýuëÖ “¶x‹ŠŸWµ¿(Q1]d PgäÈ‘³0á·d“\Ð2€n „y°Ø¥#XÁ@P´Ã÷qÇŽéÜûªtÀCÉÂÒþ¢8³¯Ž=z1€M˜b{Ë€ ˜{$x ­!8Á2ô€Á Þß¼y³¦ýÇ_ËŸ­™þ—tI¥ý ˜PO)`ö¬xùòåZj€§dvøÛ»ðS§Nã]¾­©ÚW“Lieú­&öµQ£F-ÁÄc¿½ìŒé­^C1ž>„ë ¸ T ñ |üT–¶§D[m ³Ë*ÓïÀ=rÙ @H¼£­Ï>CfWŸ…Ç¿téÒÌ:uê|A!ß«”¯(/ÅüJû=€z‹ ìµ×‡dÖy8{0щÌ ®ÿ ³Ï—•œúõë÷ Ôúëºu_™~O`ðàÁÓD@—£ÍG’ù}€Af#0\/>îOd4hР'¥zߤl_Eµî{uû÷ï?Rde@@ØŽ !¬ƒ`A°+€À}ÄaN<’8]«V­.’ðAÏ%Ÿª„ï! P»k×®‡0P €àóê›æí£” Ë ³ g ­ÇaÆ Û„S¿(Ö“Šl?SÂ÷^kìË-Z´[½óÂÖ¾áCh`$}›Bƒ`,#Bðt|k:¿çP~ïV¶¼þŠ×Éì Í—=~ 8M2<ì*Th‚Ì›’<¾Ì¿ã}„u²ÐÁü€‡œ¾}ûÎ BeﶼΞº”㯨„ï]ˆ3õ1ù y¿^¦,,Tâ @´baiÀI‚!\0~†÷q­|R§tbçCžØIàG“¸àßÿÑ–·—¯>¬…zÈá RÂ÷‰&Ñëø/M@»5vÛê…è,sM¿ÂÏê‹éÖ­Û,îà!´ûØ–WÑC|ÿÒz˜|”vËI¡ž¾­€èu¬HéV´Z}À9¤^½z½xëu8ÿª•9ëÆŒ³‡Ã~€ÂÏm8Ês'8'ãw¼>dÈM}úôYضmÛ±¼q§tAÓ?²åµ›Á»G×ѯIð5tÈäë“Kÿ܃H“,ƒ‹UIEND®B`‚qbs-src-2.3.1/examples/compiled-qml/0000755000175100001770000000000014616416776016657 5ustar runnerdockerqbs-src-2.3.1/examples/compiled-qml/main.cpp0000644000175100001770000000520614616416776020312 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); return app.exec(); } qbs-src-2.3.1/examples/compiled-qml/compiled-qml.qbs0000644000175100001770000000512614616416776021755 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ CppApplication { Depends { name: "Qt.quick" } files: [ "cheese.jpg", "main.cpp", "qml.qrc" ] Group { name: "QML Files" files: ["*.qml"] } } qbs-src-2.3.1/examples/compiled-qml/main.qml0000644000175100001770000000511114616416776020314 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ import QtQuick 2.4 import QtQuick.Window 2.2 Window { visible: true MainForm { anchors.fill: parent mouseArea.onClicked: { Qt.quit(); } } } qbs-src-2.3.1/examples/compiled-qml/cheese.jpg0000644000175100001770000000572514616416776020626 0ustar runnerdockerÿØÿàJFIFHHÿîAdobed@ÿÛ„      ÿÀ^^ÿÝ ÿÄ¢  s!1AQa"q2‘¡±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ŠšªºÊÚêúÿÚ ?ûAÓo¢‡Ç<7‰éÔéâk)n£rM ðÈ‚¥²AZ†úFù"7P¦cåâvù`ä•ÁHØt=F V¤š1`¤ìkã’ ¬I’Q­È‘·ê„4¯ÅŽûwÉlIb:¯ž<¿£Ìmîï+84ha£þU6~§§ïNŸ~eøžž/'‡zÿÑû?JíÔöÏ §¨Qy?Ö=°ˆq-Òš„j{d¼&aÆpJ‘Jt"˜øtŽ0UÔ‡nÛŒ ;@ÞÚ ˆšbJƒÄѨ|ù +|µ=ໞYâäÈbBÿ!%OßÇ,ˆÅÖý̼IŽTôk+[-:Ö+ e¶´€)þQ«îNç!–|g•À§šÝNÊ=NÂæÍ¶€PžÌ7ÊÄD½'«!#a…i¾\’ݽ;‹vJÕÆÿÛ˜Ù#,G„¹-€©Ï ·¨J/çŽÚ9îfqP!yôEI9|HËY²h>Ró'æšõKébÐIÓlQˆÒž«Ýœƒ×Àe>)ŸZr#†1çºqå_>y¢Öîõ‹‡¾µ”"L`R¬v÷ȆíÄ%ÈSé›I–EŠhÛœR…daЩfA ‹ØZ¨=5µ„ 1€{|ˆ34›jzïNMïí<™†¸5 ‘ZW·Ë5µŒ¬ k-©­ð9$.ãN„ø}H%A]ÈÔøø×#JÿÿÔûCÉ)Øðzz…zt ôÉÄð›Ô‹K­´}Ní ¿U”±fŽZ”ÿ`À~'›<ûÆ\'¸Ý|ý+Ò†ÄZ'è«`¾¤«xÊ(!ŒÛ“56ÄiñBbRÉ]"þò@jñrO¯4*³Ü¹øª±<@Ø|€ðrä–Be.e”ˆ ª@?>”Ê:3s1 Ü.ʵýXlõE!Üo°&§¬ z×åŠUÐöë¡} 4ðÚ¸ÄyªrRO]öOL<;Õ£‰ÿÕû8ÀÖ£®x]½B“G^„×¹Ä*€·]Ù¶5ÛÄâ(VH _‰ºøòDŒx‚6ªc¢€6##Í’Ÿ¨T|@úâ`–ê\ñ=ÎB’ºª*¤×ß TJT{cJ»wQ·l•*àkþKxd$ÛÔoô`WÿÖû=Q×–xSÔ/$q$liÓÙRnK‹}Q»³¡º†mÁb4ö­r2‘$&1âºf‡æhîª5;É®9 $2HÅ¢„Ҟ؀@«t¢9=âÔ¹†'‘x4ˆ®ÉàXTŒÈɵ*Ƈ®ô4Êì³RcÇzn{âÔL½‡\°´&жþq¯õ–”¯Ñ€Á"j«)$PŽ»ä¦V¦%#š’y)‘¥ÿ×û;ÐPÇ<*Þ¡PPûõÄ«¤U(A^JÀ†SЂ(AƃanöÑGéÃaF¯Ùgäƒè¥Oß™~.!¿þý¿$LõTS#3™$¶ÔÙ‹“'¾¬€¦…jFÕ4`½ÇÏä”5Á"ƒ¹é’Ç»0/8ùÂÇÊvB{ Ó\KQmj†!jeEz岘€óc—Ïòþsù¦æê–‘Ckk_†10»1©ÊŒæz·Œ1Ròoæ<úÄñXêð¤rÌBÅs*9”“JøŒÌA©5Ï«dа'¥wtã³Tdô–µíN™ŽÜÿÿÐû4ÊÛýÆxCÔ¶ŒAZ‘Ö§$‚¨O&@¯°Û¯øTo@r*´ÍU AÔø{âW§A×®ˆC¼m+- Fãl³c7Ë¿™¶7:šeˆ‚ÖÖ¡bDë@?‰9‹’w77 ÆK,ŠF›uðË,Ä0 [!‡Ë2YÜE…Ò}[.Òi½1!ñ#¾lqJñ‚]|ÅJ“~'Óú2¾­ÿÑû9-üNxCÔ0/2k^e°Ôôû- F‹QŠxÚ{¹¦vP[øþÖÕ©öÆy죌˫?µvx‘ =t=A"´>ã$Fì¹A¹p¶ pU vß׆Q€ì—râ4à ‡™yÃËku¨&«lÞµåw*àSìrYôüQãÇËöì«ÒQZF†„§«â‚”¨Úž,Àã2<7»q¡»'m®\E|˜ìÔO†CI£žLüÞÏö°É©ˆ”ÏÒŠâ´‚ºˆÃÿ7ÄŸ¦™¸ÍÁÃCo–ßo7w=U9ÓM©˜öÝOÿÒûy“§9/Ññîøôa>Ý^ÚêÜeÓL+È$ÔB|wäGß•œÚ~+ž;;ÝHú~‰G-}[{•'ŸP–)¾©d–Öá}麻ñïSÊ´ñ É㙜%áDF5½o*ëw¿¾€ b ÄI>idâÅá”§!ðÔeiÿÙqbs-src-2.3.1/examples/compiled-qml/qml.qrc0000644000175100001770000000023414616416776020156 0ustar runnerdocker main.qml MainForm.ui.qml cheese.jpg qbs-src-2.3.1/examples/compiled-qml/MainForm.ui.qml0000644000175100001770000000522114616416776021516 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ import QtQuick 2.3 Rectangle { property alias mouseArea: mouseArea width: 360 height: 360 MouseArea { id: mouseArea anchors.fill: parent } Image { anchors.centerIn: parent source: "cheese.jpg" } } qbs-src-2.3.1/README.md0000644000175100001770000000222314616416776013734 0ustar runnerdocker# Qbs Qbs is a build automation tool designed to conveniently manage the build process of software projects across multiple platforms. Qbs can be used for any software project, regardless of programming language, toolkit, or libraries used. ## Documentation Qbs product documentation is available at [doc.qt.io/qbs](http://doc.qt.io/qbs/index.html) The project's homepage is [wiki.qt.io/qbs](http://wiki.qt.io/qbs) ## Supported platforms Qbs binaries are available for Windows, macOS, Linux, and FreeBSD. For more information about how to install Qbs on your platform, see the [Installing](https://doc.qt.io/qbs/installing.html) page in the documentation. Qbs allows to build applications for different platforms, for the list of supported platforms and the details about each platform, see the [Target Platforms](https://doc.qt.io/qbs/platforms.html) page. ## Building Qbs For information about building Qbs from sources, see ["Appendix A: Building Qbs"](http://doc.qt.io/qbs/building-qbs.html). ## Reporting Bugs Please report any bugs in our [bug tracker](https://bugreports.qt.io/browse/QBS). ## Contributing See [Contributing to Qbs](CONTRIBUTING.md) qbs-src-2.3.1/.mailmap0000644000175100001770000000266014616416776014103 0ustar runnerdocker qbs-src-2.3.1/.clang-format0000644000175100001770000000631614616416776015037 0ustar runnerdocker# .clang-format for Qbs # based on https://github.com/qt-creator/qt-creator/blob/v12.0.1/.clang-format # # This is for clang-format >= 5.0. # # Use ../../tests/clang-format-test/clang-format-test.cpp for documenting problems # or testing changes. # --- Language: Cpp AccessModifierOffset: -4 AlignAfterOpenBracket: AlwaysBreak AlignConsecutiveAssignments: false AlignConsecutiveDeclarations: false AlignEscapedNewlines: DontAlign AlignOperands: true AlignTrailingComments: true AllowAllParametersOfDeclarationOnNextLine: true AllowShortBlocksOnASingleLine: Never AllowShortCaseLabelsOnASingleLine: false AllowShortFunctionsOnASingleLine: Inline AllowShortIfStatementsOnASingleLine: false AllowShortLoopsOnASingleLine: false AlwaysBreakAfterReturnType: None AlwaysBreakBeforeMultilineStrings: false AlwaysBreakTemplateDeclarations: Yes BinPackArguments: false BinPackParameters: false BraceWrapping: AfterClass: true AfterControlStatement: Never AfterEnum: false AfterFunction: true AfterNamespace: false AfterObjCDeclaration: false AfterStruct: true AfterUnion: false BeforeCatch: false BeforeElse: false IndentBraces: false SplitEmptyFunction: false SplitEmptyRecord: false SplitEmptyNamespace: false BreakBeforeBinaryOperators: All BreakBeforeBraces: Custom BreakBeforeInheritanceComma: false BreakBeforeTernaryOperators: true BreakConstructorInitializersBeforeComma: false BreakConstructorInitializers: BeforeComma BreakAfterJavaFieldAnnotations: false BreakStringLiterals: true ColumnLimit: 100 CommentPragmas: '^ IWYU pragma:' CompactNamespaces: false ConstructorInitializerAllOnOneLineOrOnePerLine: false ConstructorInitializerIndentWidth: 4 ContinuationIndentWidth: 4 Cpp11BracedListStyle: true DerivePointerAlignment: false DisableFormat: false ExperimentalAutoDetectBinPacking: false FixNamespaceComments: true ForEachMacros: - forever # avoids { wrapped to next line - foreach - Q_FOREACH - BOOST_FOREACH IncludeCategories: - Regex: '^ int main() { printf("Hello, world\n"); return 0; } //! [0] qbs-src-2.3.1/tutorial/chapter-1/myproject.qbs0000644000175100001770000000017114616416776020627 0ustar runnerdocker//! [0] Project { name: "My Project" minimumQbsVersion: "2.0" references: [ "app/app.qbs" ] } //! [0] qbs-src-2.3.1/tutorial/chapter-3/0000755000175100001770000000000014616416776016107 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-3/lib/0000755000175100001770000000000014616416776016655 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-3/lib/lib.qbs0000644000175100001770000000100414616416776020125 0ustar runnerdocker//! [0] // lib/lib.qbs DynamicLibrary { name: "mylib" files: [ "lib.c", "lib.h", "lib_global.h", ] version: "1.0.0" install: true Depends { name: "cpp" } cpp.defines: ["MYLIB_LIBRARY", "CRUCIAL_DEFINE"] cpp.sonamePrefix: qbs.targetOS.contains("darwin") ? "@rpath" : undefined Export { Depends { name: "cpp" } cpp.includePaths: [exportingProduct.sourceDirectory] } Depends { name: "bundle" } bundle.isBundle: false } //! [0] qbs-src-2.3.1/tutorial/chapter-3/lib/lib.c0000644000175100001770000000026614616416776017573 0ustar runnerdocker //! [0] // lib/lib.cpp #include "lib.h" #ifndef CRUCIAL_DEFINE # error CRUCIAL_DEFINE not defined #endif const char *get_string() { return "Hello from library"; } //! [0] qbs-src-2.3.1/tutorial/chapter-3/lib/lib_global.h0000644000175100001770000000076514616416776021124 0ustar runnerdocker//! [0] // lib/lib_global.h #ifndef LIB_GLOBAL_H #define LIB_GLOBAL_H #if defined(_WIN32) || defined(WIN32) #define MYLIB_DECL_EXPORT __declspec(dllexport) #define MYLIB_DECL_IMPORT __declspec(dllimport) #else #define MYLIB_DECL_EXPORT __attribute__((visibility("default"))) #define MYLIB_DECL_IMPORT __attribute__((visibility("default"))) #endif #if defined(MYLIB_LIBRARY) #define MYLIB_EXPORT MYLIB_DECL_EXPORT #else #define MYLIB_EXPORT MYLIB_DECL_IMPORT #endif #endif // LIB_GLOBAL_H //! [0] qbs-src-2.3.1/tutorial/chapter-3/lib/lib.h0000644000175100001770000000021314616416776017570 0ustar runnerdocker#ifndef LIB_H #define LIB_H //! [0] // lib/lib.h #include "lib_global.h" MYLIB_EXPORT const char *get_string(); //! [0] #endif // LIB_H qbs-src-2.3.1/tutorial/chapter-3/app/0000755000175100001770000000000014616416776016667 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-3/app/app.qbs0000644000175100001770000000112114616416776020151 0ustar runnerdocker//! [1] // app/app.qbs import qbs.FileInfo CppApplication { Depends { name: "mylib" } name: "My Application" targetName: "myapp" files: "main.c" version: "1.0.0" consoleApplication: true install: true //! [0] cpp.rpaths: { if (!cpp.rpathOrigin) return []; return [ FileInfo.joinPaths( cpp.rpathOrigin, FileInfo.relativePath( FileInfo.joinPaths("/", product.installDir), FileInfo.joinPaths("/", "lib"))) ]; } //! [0] } //! [1] qbs-src-2.3.1/tutorial/chapter-3/app/main.c0000644000175100001770000000020314616416776017752 0ustar runnerdocker#include #include "lib.h" int main() { printf("Hello, world\n"); printf("%s\n", get_string()); return 0; } qbs-src-2.3.1/tutorial/chapter-3/myproject.qbs0000644000175100001770000000017714616416776020637 0ustar runnerdockerProject { name: "My Project" minimumQbsVersion: "2.0" references: [ "app/app.qbs", "lib/lib.qbs" ] } qbs-src-2.3.1/tutorial/chapter-5/0000755000175100001770000000000014616416776016111 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-5/lib/0000755000175100001770000000000014616416776016657 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-5/lib/lib.qbs0000644000175100001770000000023614616416776020135 0ustar runnerdockerMyLibrary { name: "mylib" files: [ "lib.c", "lib.h", "lib_global.h", ] cpp.defines: base.concat(['CRUCIAL_DEFINE']) } qbs-src-2.3.1/tutorial/chapter-5/lib/lib.c0000644000175100001770000000022414616416776017567 0ustar runnerdocker#include "lib.h" #ifndef CRUCIAL_DEFINE # error CRUCIAL_DEFINE not defined #endif const char *get_string() { return "Hello from library"; } qbs-src-2.3.1/tutorial/chapter-5/lib/lib_global.h0000644000175100001770000000071714616416776021123 0ustar runnerdocker#ifndef LIB_GLOBAL_H #define LIB_GLOBAL_H #if defined(_WIN32) || defined(WIN32) #define MYLIB_DECL_EXPORT __declspec(dllexport) #define MYLIB_DECL_IMPORT __declspec(dllimport) #else #define MYLIB_DECL_EXPORT __attribute__((visibility("default"))) #define MYLIB_DECL_IMPORT __attribute__((visibility("default"))) #endif #if defined(MYLIB_LIBRARY) #define MYLIB_EXPORT MYLIB_DECL_EXPORT #else #define MYLIB_EXPORT MYLIB_DECL_IMPORT #endif #endif // LIB_GLOBAL_H qbs-src-2.3.1/tutorial/chapter-5/lib/lib.h0000644000175100001770000000015614616416776017600 0ustar runnerdocker#ifndef LIB_H #define LIB_H #include "lib_global.h" MYLIB_EXPORT const char *get_string(); #endif // LIB_H qbs-src-2.3.1/tutorial/chapter-5/app/0000755000175100001770000000000014616416776016671 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-5/app/app.qbs0000644000175100001770000000502314616416776020160 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2021 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ MyApplication { Depends { name: "mylib" } name: "My Application" targetName: "myapp" files: "main.c" } qbs-src-2.3.1/tutorial/chapter-5/app/main.c0000644000175100001770000000503714616416776017766 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2023 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include "lib.h" int main() { printf("Hello, world\n"); printf("%s\n", get_string()); return 0; } qbs-src-2.3.1/tutorial/chapter-5/qbs/0000755000175100001770000000000014616416776016676 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-5/qbs/imports/0000755000175100001770000000000014616416776020373 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-5/qbs/imports/MyAutoTest.qbs0000644000175100001770000000014514616416776023160 0ustar runnerdocker//! [0] // qbs/imports/MyAutoTest.qbs MyApplication { type: base.concat(["autotest"]) } //! [0] qbs-src-2.3.1/tutorial/chapter-5/qbs/imports/MyLibrary.qbs0000644000175100001770000000070414616416776023015 0ustar runnerdockerDynamicLibrary { version: "1.0.0" install: true Depends { name: 'cpp' } property string libraryMacro: name.replace(" ", "_").toUpperCase() + "_LIBRARY" cpp.defines: [libraryMacro] cpp.sonamePrefix: qbs.targetOS.contains("darwin") ? "@rpath" : undefined Export { Depends { name: "cpp" } cpp.includePaths: [exportingProduct.sourceDirectory] } Depends { name: 'bundle' } bundle.isBundle: false } qbs-src-2.3.1/tutorial/chapter-5/qbs/imports/MyApplication.qbs0000644000175100001770000000072614616416776023660 0ustar runnerdockerimport qbs.FileInfo CppApplication { version: "1.0.0" consoleApplication: true install: true installDebugInformation: true cpp.rpaths: { if (!cpp.rpathOrigin) return []; return [ FileInfo.joinPaths( cpp.rpathOrigin, FileInfo.relativePath( FileInfo.joinPaths("/", product.installDir), FileInfo.joinPaths("/", "lib"))) ]; } } qbs-src-2.3.1/tutorial/chapter-5/myproject.qbs0000644000175100001770000000040014616416776020626 0ustar runnerdockerProject { name: "My Project" minimumQbsVersion: "2.0" // ![0] references: [ "app/app.qbs", "lib/lib.qbs", "test/test.qbs", ] // ![0] qbsSearchPaths: "qbs" AutotestRunner { timeout: 60 } } qbs-src-2.3.1/tutorial/chapter-5/test/0000755000175100001770000000000014616416776017070 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-5/test/test.qbs0000644000175100001770000000016614616416776020561 0ustar runnerdocker//! [0] // test/test.qbs MyAutoTest { Depends { name: "mylib" } name: "mytest" files: "test.c" } //! [0] qbs-src-2.3.1/tutorial/chapter-5/test/test.c0000644000175100001770000000062114616416776020212 0ustar runnerdocker//! [0] // test/test.c #include "lib.h" #include #include int main(int argc, char *argv[]) { if (argc > 2) { printf("usage: test [value]\n"); return 1; } const char *expected = argc == 2 ? argv[1] : "Hello from library"; if (strcmp(get_string(), expected) != 0) { printf("text differs\n"); return 1; } return 0; } //! [0]qbs-src-2.3.1/tutorial/tutorial.qbs0000644000175100001770000000005714616416776016675 0ustar runnerdockerProduct { files: [ "*/**", ] } qbs-src-2.3.1/tutorial/chapter-8/0000755000175100001770000000000014616416776016114 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-8/lib/0000755000175100001770000000000014616416776016662 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-8/lib/lib.qbs0000644000175100001770000000022614616416776020137 0ustar runnerdockerMyLibrary { name: "mylib" files: [ "lib.c", "lib.h", ] Depends { name: 'cpp' } cpp.defines: ['CRUCIAL_DEFINE'] } qbs-src-2.3.1/tutorial/chapter-8/lib/lib.c0000644000175100001770000000022414616416776017572 0ustar runnerdocker#include "lib.h" #ifndef CRUCIAL_DEFINE # error CRUCIAL_DEFINE not defined #endif const char *get_string() { return "Hello from library"; } qbs-src-2.3.1/tutorial/chapter-8/lib/lib_global.h0000644000175100001770000000107414616416776021123 0ustar runnerdocker#ifndef LIB_GLOBAL_H #define LIB_GLOBAL_H #if defined(_WIN32) || defined(WIN32) #define MY_LIB_DECL_EXPORT __declspec(dllexport) #define MY_LIB_DECL_IMPORT __declspec(dllimport) #else #define MY_LIB_DECL_EXPORT __attribute__((visibility("default"))) #define MY_LIB_DECL_IMPORT __attribute__((visibility("default"))) #endif // ![0] // lib/lib_global.h #if defined(MYLIB_STATIC_LIBRARY) #define MYLIB_EXPORT #else #if defined(MYLIB_LIBRARY) #define MYLIB_EXPORT MY_LIB_DECL_EXPORT #else #define MYLIB_EXPORT MY_LIB_DECL_IMPORT #endif #endif // ![0] #endif // LIB_GLOBAL_Hqbs-src-2.3.1/tutorial/chapter-8/lib/lib.h0000644000175100001770000000015614616416776017603 0ustar runnerdocker#ifndef LIB_H #define LIB_H #include "lib_global.h" MYLIB_EXPORT const char *get_string(); #endif // LIB_H qbs-src-2.3.1/tutorial/chapter-8/app/0000755000175100001770000000000014616416776016674 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-8/app/app.qbs0000644000175100001770000000502314616416776020163 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2021 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ MyApplication { Depends { name: "mylib" } name: "My Application" targetName: "myapp" files: "main.c" } qbs-src-2.3.1/tutorial/chapter-8/app/main.c0000644000175100001770000000503714616416776017771 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2023 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include "lib.h" int main() { printf("Hello, world\n"); printf("%s\n", get_string()); return 0; } qbs-src-2.3.1/tutorial/chapter-8/qbs/0000755000175100001770000000000014616416776016701 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-8/qbs/imports/0000755000175100001770000000000014616416776020376 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-8/qbs/imports/MyAutoTest.qbs0000644000175100001770000000472414616416776023172 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2023 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ MyApplication { type: ["application", "autotest"] } qbs-src-2.3.1/tutorial/chapter-8/qbs/imports/MyLibrary.qbs0000644000175100001770000000171014616416776023016 0ustar runnerdocker// ![0] Library { Depends { name: "cpp" } Depends { name: "mybuildconfig" } type: mybuildconfig.staticBuild ? "staticlibrary" : "dynamiclibrary" version: "1.0.0" install: !mybuildconfig.staticBuild || mybuildconfig.installStaticLib installDir: mybuildconfig.libInstallDir readonly property string _nameUpper : name.replace(" ", "_").toUpperCase() property string libraryMacro: _nameUpper + "_LIBRARY" property string staticLibraryMacro: _nameUpper + "_STATIC_LIBRARY" cpp.defines: mybuildconfig.staticBuild ? [staticLibraryMacro] : [libraryMacro] cpp.sonamePrefix: qbs.targetOS.contains("darwin") ? "@rpath" : undefined Export { Depends { name: "cpp" } cpp.includePaths: [exportingProduct.sourceDirectory] cpp.defines: exportingProduct.mybuildconfig.staticBuild ? [exportingProduct.staticLibraryMacro] : [] } Depends { name: "bundle" } bundle.isBundle: false } // ![0] qbs-src-2.3.1/tutorial/chapter-8/qbs/imports/MyApplication.qbs0000644000175100001770000000525314616416776023663 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2023 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ CppApplication { Depends { name: "mybuildconfig" } version: "1.0.0" cpp.rpaths: mybuildconfig.libRPaths consoleApplication: true installDir: mybuildconfig.appInstallDir install: true installDebugInformation: project.installDebugInformation } qbs-src-2.3.1/tutorial/chapter-8/qbs/modules/0000755000175100001770000000000014616416776020351 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-8/qbs/modules/mybuildconfig/0000755000175100001770000000000014616416776023204 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-8/qbs/modules/mybuildconfig/mybuildconfig.qbs0000644000175100001770000000137714616416776026556 0ustar runnerdockerimport qbs.FileInfo Module { Depends { name: "cpp" } property string appInstallDir: "bin" property string libDirName: "lib" property string libInstallDir: qbs.targetOS.contains("windows") ? "bin" : libDirName property bool staticBuild: false property bool installStaticLib: true property bool enableRPath: true property stringList libRPaths: { if (enableRPath && cpp.rpathOrigin && product.installDir) { return [ FileInfo.joinPaths( cpp.rpathOrigin, FileInfo.relativePath( FileInfo.joinPaths('/', product.installDir), FileInfo.joinPaths('/', libDirName))) ]; } return []; } } qbs-src-2.3.1/tutorial/chapter-8/myproject.qbs0000644000175100001770000000114214616416776020635 0ustar runnerdockerProject { property bool withTests: true property bool installDebugInformation: true property stringList autotestArguments: [] property stringList autotestWrapper: [] name: "My Project" minimumQbsVersion: "2.0" references: [ "app/app.qbs", "lib/lib.qbs", ] qbsSearchPaths: "qbs" SubProject { filePath: "test/test.qbs" Properties { condition: parent.withTests } } AutotestRunner { condition: parent.withTests arguments: parent.autotestArguments wrapper: parent.autotestWrapper } } qbs-src-2.3.1/tutorial/chapter-8/test/0000755000175100001770000000000014616416776017073 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-8/test/test.qbs0000644000175100001770000000476014616416776020570 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2021 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ MyAutoTest { Depends { name: "mylib" } name: "mytest" files: "test.c" } qbs-src-2.3.1/tutorial/chapter-8/test/test.c0000644000175100001770000000056214616416776020221 0ustar runnerdocker#include "lib.h" #include #include int main(int argc, char *argv[]) { if (argc > 2) { printf("usage: test [value]\n"); return 1; } const char *expected = argc == 2 ? argv[1] : "Hello from library"; if (strcmp(get_string(), expected) != 0) { printf("text differs\n"); return 1; } return 0; } qbs-src-2.3.1/tutorial/chapter-6/0000755000175100001770000000000014616416776016112 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-6/lib/0000755000175100001770000000000014616416776016660 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-6/lib/lib.qbs0000644000175100001770000000023614616416776020136 0ustar runnerdockerMyLibrary { name: "mylib" files: [ "lib.c", "lib.h", "lib_global.h", ] cpp.defines: base.concat(['CRUCIAL_DEFINE']) } qbs-src-2.3.1/tutorial/chapter-6/lib/lib.c0000644000175100001770000000022414616416776017570 0ustar runnerdocker#include "lib.h" #ifndef CRUCIAL_DEFINE # error CRUCIAL_DEFINE not defined #endif const char *get_string() { return "Hello from library"; } qbs-src-2.3.1/tutorial/chapter-6/lib/lib_global.h0000644000175100001770000000071714616416776021124 0ustar runnerdocker#ifndef LIB_GLOBAL_H #define LIB_GLOBAL_H #if defined(_WIN32) || defined(WIN32) #define MYLIB_DECL_EXPORT __declspec(dllexport) #define MYLIB_DECL_IMPORT __declspec(dllimport) #else #define MYLIB_DECL_EXPORT __attribute__((visibility("default"))) #define MYLIB_DECL_IMPORT __attribute__((visibility("default"))) #endif #if defined(MYLIB_LIBRARY) #define MYLIB_EXPORT MYLIB_DECL_EXPORT #else #define MYLIB_EXPORT MYLIB_DECL_IMPORT #endif #endif // LIB_GLOBAL_H qbs-src-2.3.1/tutorial/chapter-6/lib/lib.h0000644000175100001770000000015614616416776017601 0ustar runnerdocker#ifndef LIB_H #define LIB_H #include "lib_global.h" MYLIB_EXPORT const char *get_string(); #endif // LIB_H qbs-src-2.3.1/tutorial/chapter-6/app/0000755000175100001770000000000014616416776016672 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-6/app/app.qbs0000644000175100001770000000502314616416776020161 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2021 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ MyApplication { Depends { name: "mylib" } name: "My Application" targetName: "myapp" files: "main.c" } qbs-src-2.3.1/tutorial/chapter-6/app/main.c0000644000175100001770000000503714616416776017767 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2023 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include "lib.h" int main() { printf("Hello, world\n"); printf("%s\n", get_string()); return 0; } qbs-src-2.3.1/tutorial/chapter-6/qbs/0000755000175100001770000000000014616416776016677 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-6/qbs/imports/0000755000175100001770000000000014616416776020374 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-6/qbs/imports/MyAutoTest.qbs0000644000175100001770000000006614616416776023163 0ustar runnerdockerMyApplication { type: base.concat(["autotest"]) } qbs-src-2.3.1/tutorial/chapter-6/qbs/imports/MyLibrary.qbs0000644000175100001770000000101114616416776023006 0ustar runnerdockerDynamicLibrary { version: project.version install: true installDebugInformation: project.installDebugInformation Depends { name: 'cpp' } property string libraryMacro: name.replace(" ", "_").toUpperCase() + "_LIBRARY" cpp.defines: [libraryMacro] cpp.sonamePrefix: qbs.targetOS.contains("darwin") ? "@rpath" : undefined Export { Depends { name: "cpp" } cpp.includePaths: [exportingProduct.sourceDirectory] } Depends { name: 'bundle' } bundle.isBundle: false } qbs-src-2.3.1/tutorial/chapter-6/qbs/imports/MyApplication.qbs0000644000175100001770000000103014616416776023646 0ustar runnerdockerimport qbs.FileInfo //! [0] CppApplication { version: project.version consoleApplication: true install: true installDebugInformation: project.installDebugInformation // ... //! [0] cpp.rpaths: { if (!cpp.rpathOrigin) return []; return [ FileInfo.joinPaths( cpp.rpathOrigin, FileInfo.relativePath( FileInfo.joinPaths("/", product.installDir), FileInfo.joinPaths("/", "lib"))) ]; } } qbs-src-2.3.1/tutorial/chapter-6/myproject.qbs0000644000175100001770000000132714616416776020640 0ustar runnerdocker//! [0] Project { property string version: "1.0.0" property bool installDebugInformation: true property bool withTests: false property stringList autotestArguments: [] property stringList autotestWrapper: [] name: "My Project" minimumQbsVersion: "2.0" // ... //! [0] references: [ "app/app.qbs", "lib/lib.qbs", ] qbsSearchPaths: "qbs" //! [1] SubProject { filePath: "test/test.qbs" Properties { condition: parent.withTests } } //! [1] //! [2] AutotestRunner { condition: parent.withTests arguments: parent.autotestArguments wrapper: parent.autotestWrapper } //! [2] } qbs-src-2.3.1/tutorial/chapter-6/test/0000755000175100001770000000000014616416776017071 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-6/test/test.qbs0000644000175100001770000000476014616416776020566 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2021 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ MyAutoTest { Depends { name: "mylib" } name: "mytest" files: "test.c" } qbs-src-2.3.1/tutorial/chapter-6/test/test.c0000644000175100001770000000056214616416776020217 0ustar runnerdocker#include "lib.h" #include #include int main(int argc, char *argv[]) { if (argc > 2) { printf("usage: test [value]\n"); return 1; } const char *expected = argc == 2 ? argv[1] : "Hello from library"; if (strcmp(get_string(), expected) != 0) { printf("text differs\n"); return 1; } return 0; } qbs-src-2.3.1/tutorial/chapter-4/0000755000175100001770000000000014616416776016110 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-4/lib/0000755000175100001770000000000014616416776016656 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-4/lib/lib.qbs0000644000175100001770000000027614616416776020140 0ustar runnerdocker//! [0] // lib/lib.qbs MyLibrary { name: "mylib" files: [ "lib.c", "lib.h", "lib_global.h", ] cpp.defines: base.concat(["CRUCIAL_DEFINE"]) } //! [0] qbs-src-2.3.1/tutorial/chapter-4/lib/lib.c0000644000175100001770000000022414616416776017566 0ustar runnerdocker#include "lib.h" #ifndef CRUCIAL_DEFINE # error CRUCIAL_DEFINE not defined #endif const char *get_string() { return "Hello from library"; } qbs-src-2.3.1/tutorial/chapter-4/lib/lib_global.h0000644000175100001770000000071714616416776021122 0ustar runnerdocker#ifndef LIB_GLOBAL_H #define LIB_GLOBAL_H #if defined(_WIN32) || defined(WIN32) #define MYLIB_DECL_EXPORT __declspec(dllexport) #define MYLIB_DECL_IMPORT __declspec(dllimport) #else #define MYLIB_DECL_EXPORT __attribute__((visibility("default"))) #define MYLIB_DECL_IMPORT __attribute__((visibility("default"))) #endif #if defined(MYLIB_LIBRARY) #define MYLIB_EXPORT MYLIB_DECL_EXPORT #else #define MYLIB_EXPORT MYLIB_DECL_IMPORT #endif #endif // LIB_GLOBAL_H qbs-src-2.3.1/tutorial/chapter-4/lib/lib.h0000644000175100001770000000015614616416776017577 0ustar runnerdocker#ifndef LIB_H #define LIB_H #include "lib_global.h" MYLIB_EXPORT const char *get_string(); #endif // LIB_H qbs-src-2.3.1/tutorial/chapter-4/app/0000755000175100001770000000000014616416776016670 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-4/app/app.qbs0000644000175100001770000000022714616416776020160 0ustar runnerdocker//! [0] // app/app.qbs MyApplication { Depends { name: "mylib" } name: "My Application" targetName: "myapp" files: "main.c" } //! [0] qbs-src-2.3.1/tutorial/chapter-4/app/main.c0000644000175100001770000000020314616416776017753 0ustar runnerdocker#include #include "lib.h" int main() { printf("Hello, world\n"); printf("%s\n", get_string()); return 0; } qbs-src-2.3.1/tutorial/chapter-4/qbs/0000755000175100001770000000000014616416776016675 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-4/qbs/imports/0000755000175100001770000000000014616416776020372 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-4/qbs/imports/MyLibrary.qbs0000644000175100001770000000076214616416776023020 0ustar runnerdocker//! [0] // qbs/imports/MyLibrary.qbs DynamicLibrary { version: "1.0.0" install: true Depends { name: 'cpp' } property string libraryMacro: name.replace(" ", "_").toUpperCase() + "_LIBRARY" cpp.defines: [libraryMacro] cpp.sonamePrefix: qbs.targetOS.contains("darwin") ? "@rpath" : undefined Export { Depends { name: "cpp" } cpp.includePaths: [exportingProduct.sourceDirectory] } Depends { name: 'bundle' } bundle.isBundle: false } //! [0] qbs-src-2.3.1/tutorial/chapter-4/qbs/imports/MyApplication.qbs0000644000175100001770000000074614616416776023661 0ustar runnerdocker//! [0] // qbs/imports/MyApplication.qbs import qbs.FileInfo CppApplication { version: "1.0.0" consoleApplication: true install: true cpp.rpaths: { if (!cpp.rpathOrigin) return []; return [ FileInfo.joinPaths( cpp.rpathOrigin, FileInfo.relativePath( FileInfo.joinPaths("/", product.installDir), FileInfo.joinPaths("/", "lib"))) ]; } } //! [0] qbs-src-2.3.1/tutorial/chapter-4/myproject.qbs0000644000175100001770000000025014616416776020630 0ustar runnerdocker//! [0] Project { name: "My Project" minimumQbsVersion: "2.0" references: [ "app/app.qbs", "lib/lib.qbs" ] qbsSearchPaths: "qbs" } //! [0] qbs-src-2.3.1/tutorial/chapter-2/0000755000175100001770000000000014616416776016106 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-2/lib/0000755000175100001770000000000014616416776016654 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-2/lib/lib.qbs0000644000175100001770000000070514616416776020133 0ustar runnerdocker//! [0] StaticLibrary { name: "mylib" files: [ "lib.c", "lib.h", ] version: "1.0.0" install: true //! [1] Depends { name: 'cpp' } cpp.defines: ['CRUCIAL_DEFINE'] //! [1] //! [2] Export { Depends { name: "cpp" } cpp.includePaths: [exportingProduct.sourceDirectory] } //! [2] //! [3] Depends { name: 'bundle' } bundle.isBundle: false //! [3] } //! [0] qbs-src-2.3.1/tutorial/chapter-2/lib/lib.c0000644000175100001770000000026514616416776017571 0ustar runnerdocker//! [0] // lib/lib.cpp #include "lib.h" #ifndef CRUCIAL_DEFINE # error CRUCIAL_DEFINE not defined #endif const char *get_string() { return "Hello from library"; } //! [0] qbs-src-2.3.1/tutorial/chapter-2/lib/lib.h0000644000175100001770000000014714616416776017575 0ustar runnerdocker//! [0] // lib/lib.h #ifndef LIB_H #define LIB_H const char *get_string(); #endif // LIB_H //! [0] qbs-src-2.3.1/tutorial/chapter-2/app/0000755000175100001770000000000014616416776016666 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-2/app/app.qbs0000644000175100001770000000033714616416776020160 0ustar runnerdockerCppApplication { Depends { name: "mylib" } name: "My Application" targetName: "myapp" files: "main.c" version: "1.0.0" consoleApplication: true install: true installDebugInformation: true } qbs-src-2.3.1/tutorial/chapter-2/app/main.c0000644000175100001770000000020314616416776017751 0ustar runnerdocker#include #include "lib.h" int main() { printf("Hello, world\n"); printf("%s\n", get_string()); return 0; } qbs-src-2.3.1/tutorial/chapter-2/myproject.qbs0000644000175100001770000000021714616416776020631 0ustar runnerdocker//! [0] Project { name: "My Project" minimumQbsVersion: "2.0" references: [ "app/app.qbs", "lib/lib.qbs" ] } //! [0] qbs-src-2.3.1/tutorial/chapter-7/0000755000175100001770000000000014616416776016113 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-7/lib/0000755000175100001770000000000014616416776016661 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-7/lib/lib.qbs0000644000175100001770000000504214616416776020137 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ MyLibrary { name: "mylib" files: [ "lib.c", "lib.h", ] Depends { name: 'cpp' } cpp.defines: ['CRUCIAL_DEFINE'] } qbs-src-2.3.1/tutorial/chapter-7/lib/lib.c0000644000175100001770000000022414616416776017571 0ustar runnerdocker#include "lib.h" #ifndef CRUCIAL_DEFINE # error CRUCIAL_DEFINE not defined #endif const char *get_string() { return "Hello from library"; } qbs-src-2.3.1/tutorial/chapter-7/lib/lib_global.h0000644000175100001770000000071714616416776021125 0ustar runnerdocker#ifndef LIB_GLOBAL_H #define LIB_GLOBAL_H #if defined(_WIN32) || defined(WIN32) #define MYLIB_DECL_EXPORT __declspec(dllexport) #define MYLIB_DECL_IMPORT __declspec(dllimport) #else #define MYLIB_DECL_EXPORT __attribute__((visibility("default"))) #define MYLIB_DECL_IMPORT __attribute__((visibility("default"))) #endif #if defined(MYLIB_LIBRARY) #define MYLIB_EXPORT MYLIB_DECL_EXPORT #else #define MYLIB_EXPORT MYLIB_DECL_IMPORT #endif #endif // LIB_GLOBAL_H qbs-src-2.3.1/tutorial/chapter-7/lib/lib.h0000644000175100001770000000015614616416776017602 0ustar runnerdocker#ifndef LIB_H #define LIB_H #include "lib_global.h" MYLIB_EXPORT const char *get_string(); #endif // LIB_H qbs-src-2.3.1/tutorial/chapter-7/app/0000755000175100001770000000000014616416776016673 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-7/app/app.qbs0000644000175100001770000000016714616416776020166 0ustar runnerdockerMyApplication { Depends { name: "mylib" } name: "My Application" targetName: "myapp" files: "main.c" } qbs-src-2.3.1/tutorial/chapter-7/app/main.c0000644000175100001770000000503714616416776017770 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2023 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include "lib.h" int main() { printf("Hello, world\n"); printf("%s\n", get_string()); return 0; } qbs-src-2.3.1/tutorial/chapter-7/qbs/0000755000175100001770000000000014616416776016700 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-7/qbs/imports/0000755000175100001770000000000014616416776020375 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-7/qbs/imports/MyAutoTest.qbs0000644000175100001770000000472414616416776023171 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2023 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ MyApplication { type: ["application", "autotest"] } qbs-src-2.3.1/tutorial/chapter-7/qbs/imports/MyLibrary.qbs0000644000175100001770000000123614616416776023020 0ustar runnerdockerDynamicLibrary { version: project.version install: true installDebugInformation: project.installDebugInformation //! [0] // qbs/imports/MyLibrary.qbs // ... Depends { name: "mybuildconfig" } installDir: mybuildconfig.libInstallDir Depends { name: "cpp" } property string libraryMacro: name.replace(" ", "_").toUpperCase() + "_LIBRARY" cpp.defines: [libraryMacro] cpp.sonamePrefix: qbs.targetOS.contains("darwin") ? "@rpath" : undefined Export { // ... //! [0] Depends { name: "cpp" } cpp.includePaths: [exportingProduct.sourceDirectory] } Depends { name: 'bundle' } bundle.isBundle: false } qbs-src-2.3.1/tutorial/chapter-7/qbs/imports/MyApplication.qbs0000644000175100001770000000040314616416776023652 0ustar runnerdocker//! [0] CppApplication { Depends { name: "mybuildconfig" } installDir: mybuildconfig.appInstallDir version: "1.0.0" // ... //! [0] consoleApplication: true install: true installDebugInformation: project.installDebugInformation } qbs-src-2.3.1/tutorial/chapter-7/qbs/modules/0000755000175100001770000000000014616416776020350 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-7/qbs/modules/mybuildconfig/0000755000175100001770000000000014616416776023203 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-7/qbs/modules/mybuildconfig/mybuildconfig.qbs0000644000175100001770000000137314616416776026551 0ustar runnerdockerimport qbs.FileInfo //! [1] //! [0] // qbs/modules/mybuildconfig.qbs Module { property string appInstallDir: "bin" property string libDirName: "lib" property string libInstallDir: qbs.targetOS.contains("windows") ? appInstallDir : libDirName //! [0] Depends { name: "cpp" } property bool enableRPath: true property stringList libRPaths: { if (enableRPath && cpp.rpathOrigin && product.installDir) { return [FileInfo.joinPaths(cpp.rpathOrigin, FileInfo.relativePath( FileInfo.joinPaths('/', product.installDir), FileInfo.joinPaths('/', libInstallDir)))]; } return []; } cpp.rpaths: libRPaths } //! [1] qbs-src-2.3.1/tutorial/chapter-7/myproject.qbs0000644000175100001770000000114214616416776020634 0ustar runnerdockerProject { property bool withTests: true property bool installDebugInformation: true property stringList autotestArguments: [] property stringList autotestWrapper: [] name: "My Project" minimumQbsVersion: "2.0" references: [ "app/app.qbs", "lib/lib.qbs", ] qbsSearchPaths: "qbs" SubProject { filePath: "test/test.qbs" Properties { condition: parent.withTests } } AutotestRunner { condition: parent.withTests arguments: parent.autotestArguments wrapper: parent.autotestWrapper } } qbs-src-2.3.1/tutorial/chapter-7/test/0000755000175100001770000000000014616416776017072 5ustar runnerdockerqbs-src-2.3.1/tutorial/chapter-7/test/test.qbs0000644000175100001770000000476014616416776020567 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2021 Ivan Komissarov (abbapoh@gmail.com) ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of Qbs. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ MyAutoTest { Depends { name: "mylib" } name: "mytest" files: "test.c" } qbs-src-2.3.1/tutorial/chapter-7/test/test.c0000644000175100001770000000056214616416776020220 0ustar runnerdocker#include "lib.h" #include #include int main(int argc, char *argv[]) { if (argc > 2) { printf("usage: test [value]\n"); return 1; } const char *expected = argc == 2 ? argv[1] : "Hello from library"; if (strcmp(get_string(), expected) != 0) { printf("text differs\n"); return 1; } return 0; } qbs-src-2.3.1/.dockerignore0000644000175100001770000000002714616416776015131 0ustar runnerdocker* !docker/* !scripts/* qbs-src-2.3.1/qbs.qbs0000644000175100001770000000227414616416776013757 0ustar runnerdockerProject { minimumQbsVersion: "1.6" qbsSearchPaths: ["qbs-resources"] property bool withCode: true property bool withDocumentation: true property bool withTests: withCode property stringList autotestArguments: [] property stringList autotestWrapper: [] references: [ "docker/docker.qbs", "examples/examples.qbs", "share/share.qbs", "scripts/scripts.qbs", "tutorial/tutorial.qbs", ] SubProject { filePath: "doc/doc.qbs" Properties { condition: parent.withDocumentation } } SubProject { filePath: "src/src.qbs" Properties { condition: parent.withCode } } SubProject { filePath: "tests/tests.qbs" Properties { condition: parent.withTests } } Product { name: "version" files: ["VERSION"] } Product { name: "cmake project files for qbs" files: ["**/CMakeLists.txt"] } Product { name: "continuous integration files" files: [ ".clang-tidy", "docker-compose.yml", ".github/**/*.yml", ] } } qbs-src-2.3.1/cmake/0000755000175100001770000000000014616416776013536 5ustar runnerdockerqbs-src-2.3.1/cmake/QbsDocumentation.cmake0000644000175100001770000002634014616416776020024 0ustar runnerdocker# Options: option(QBS_INSTALL_HTML_DOCS "Whether to install Qbs HTML Documentation" OFF) option(QBS_INSTALL_QCH_DOCS "Whether to install Qbs QCH Documentation" OFF) option(QBS_INSTALL_MAN_PAGE "Whether to install Qbs man page" OFF) # Get information on directories from qmake # as this is not yet exported by cmake. # Used for QT_INSTALL_DOCS function(qt_query_qmake) if (NOT TARGET Qt${QT_VERSION_MAJOR}::qmake) message(FATAL_ERROR "Qmake was not found. Add find_package(Qt5 COMPONENTS Core) to CMake to enable.") endif() # dummy check for if we already queried qmake if (QT_INSTALL_BINS) return() endif() get_target_property(_qmake_binary Qt${QT_VERSION_MAJOR}::qmake IMPORTED_LOCATION) execute_process(COMMAND "${_qmake_binary}" "-query" TIMEOUT 10 RESULT_VARIABLE _qmake_result OUTPUT_VARIABLE _qmake_stdout OUTPUT_STRIP_TRAILING_WHITESPACE) if (NOT "${_qmake_result}" STREQUAL "0") message(FATAL_ERROR "Qmake did not execute successfully: ${_qmake_result}.") endif() # split into lines: string(REPLACE "\n" ";" _lines "${_qmake_stdout}") foreach(_line ${_lines}) # split line into key/value pairs string(REPLACE ":" ";" _parts "${_line}") list(GET _parts 0 _key) list(REMOVE_AT _parts 0) string(REPLACE ";" ":" _value "${_parts}") set("${_key}" "${_value}" CACHE PATH "qmake import of ${_key}" FORCE) endforeach() endfunction() function(_qbs_setup_doc_targets) # Set up important targets: if (NOT TARGET qbs_html_docs) add_custom_target(qbs_html_docs COMMENT "Build HTML documentation") endif() if (NOT TARGET qbs_qch_docs) add_custom_target(qbs_qch_docs COMMENT "Build QCH documentation") endif() if (NOT TARGET BuildQbsDocumentation) add_custom_target( BuildQbsDocumentation ALL COMMENT "Build Qbs documentation") add_dependencies(BuildQbsDocumentation qbs_html_docs qbs_qch_docs) endif() if (NOT TARGET qbs_docs) add_custom_target( qbs_docs ALL COMMENT "Build Qbs documentation") add_dependencies(qbs_docs BuildQbsDocumentation) endif() endfunction() function(_find_python_module module) string(TOUPPER ${module} module_upper) if (NOT PY_${module_upper}) if (ARGC GREATER 1 AND ARGV1 STREQUAL "REQUIRED") set(${module}_FIND_REQUIRED TRUE) endif() # A module's location is usually a directory, but for binary modules # it's a .so file. execute_process(COMMAND "${Python3_EXECUTABLE}" "-c" "import re, ${module}; print(re.compile('/__init__.py.*').sub('',${module}.__file__))" RESULT_VARIABLE _${module}_status OUTPUT_VARIABLE _${module}_location ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) if (NOT _${module}_status) set(PY_${module_upper} ${_${module}_location} CACHE STRING "Location of Python module ${module}") endif() endif() find_package_handle_standard_args(PY_${module} DEFAULT_MSG PY_${module_upper}) endfunction() function(_qbs_setup_qdoc_targets _qdocconf_file _retval) cmake_parse_arguments(_arg "" "HTML_DIR;INSTALL_DIR;POSTFIX" "INDEXES;INCLUDE_DIRECTORIES;FRAMEWORK_PATHS;ENVIRONMENT_EXPORTS;SOURCES" ${ARGN}) foreach(_index ${_arg_INDEXES}) list(APPEND _qdoc_index_args "-indexdir;${_index}") endforeach() set(_env "") foreach(_export ${_arg_ENVIRONMENT_EXPORTS}) if (NOT DEFINED "${_export}") message(FATAL_ERROR "${_export} is not known when trying to export it to qdoc.") endif() list(APPEND _env "${_export}=${${_export}}") endforeach() get_target_property(_qdoc Qt${QT_VERSION_MAJOR}::qdoc IMPORTED_LOCATION) set(_full_qdoc_command "${_qdoc}") if (_env) set(_full_qdoc_command "${CMAKE_COMMAND}" "-E" "env" ${_env} "${_qdoc}") endif() if (_arg_HTML_DIR STREQUAL "") set(_arg_HTML_DIR "${CMAKE_CURRENT_BINARY_DIR}/doc") endif() get_filename_component(_target "${_qdocconf_file}" NAME_WE) set(_html_outputdir "${_arg_HTML_DIR}") file(MAKE_DIRECTORY "${_html_outputdir}") set(_qdoc_include_args "") if (_arg_INCLUDE_DIRECTORIES OR _arg_FRAMEWORK_PATHS) # pass include directories to qdoc via hidden @ option, since we need to generate a file # to be able to resolve the generators inside the include paths set(_qdoc_includes "${CMAKE_CURRENT_BINARY_DIR}/cmake/qdoc_${_target}.inc") set(_qdoc_include_args "@${_qdoc_includes}") set(_includes "") if (_arg_INCLUDE_DIRECTORIES) set(_includes "-I$\n") endif() set(_frameworks "") if (_arg_FRAMEWORK_PATHS) set(_frameworks "-F$\n") endif() file(GENERATE OUTPUT "${_qdoc_includes}" CONTENT "${_includes}${_frameworks}" ) endif() set(_html_artifact "${_html_outputdir}/index.html") add_custom_command( OUTPUT "${_html_artifact}" COMMAND cmake -E remove_directory "${_html_outputdir}" COMMAND ${_full_qdoc_command} -outputdir "${_html_outputdir}" "${_qdocconf_file}" ${_qdoc_index_args} ${_qdoc_include_args} DEPENDS "${_qdocconf_file}" ${_arg_SOURCES} COMMENT "Build HTML documentation from ${_qdocconf_file}" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" VERBATIM ) if (NOT Python3_Interpreter_FOUND) message(WARNING "Cannot find python3 binary. Qbs documentation will not be built.") return() endif() _find_python_module(lxml) _find_python_module(bs4) if (NOT PY_LXML OR NOT PY_BS4) message(WARNING "Cannot import lxml and bs4 python modules. Qbs documentation will not be built.") return() endif() set(_fixed_html_artifact "${CMAKE_CURRENT_BINARY_DIR}/qbsdoc.dummy") set(_fix_qml_imports_script ${Qbs_SOURCE_DIR}/doc/fix-qmlimports.py) add_custom_command( OUTPUT "${_fixed_html_artifact}" COMMAND ${Python3_EXECUTABLE} "${_fix_qml_imports_script}" ${_html_outputdir} COMMAND cmake -E touch ${_fixed_html_artifact} DEPENDS "${_html_artifact}" "${_fix_qml_imports_script}" COMMENT "Fixing bogus QML import statements" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" VERBATIM ) set(_html_target "qbs_html_docs_${_target}") add_custom_target(${_html_target} DEPENDS "${_fixed_html_artifact}") add_dependencies(qbs_html_docs "${_html_target}") # artifacts might be required for QCH-only installation, so we build them # always, and skip HTML docs installation here if (QBS_INSTALL_HTML_DOCS) install(DIRECTORY "${_html_outputdir}" DESTINATION "${_arg_INSTALL_DIR}" COMPONENT qbs_docs) endif() set("${_retval}" "${_html_outputdir}" PARENT_SCOPE) endfunction() function(_qbs_setup_qhelpgenerator_targets _qdocconf_file _html_outputdir) cmake_parse_arguments(_arg "" "QCH_DIR;INSTALL_DIR" "" ${ARGN}) if (_arg_UNPARSED_ARGUMENTS) message(FATAL_ERROR "qdoc_build_qdocconf_file has unknown arguments: ${_arg_UNPARSED_ARGUMENTS}.") endif() if (NOT _arg_QCH_DIR) set(_arg_QCH_DIR "${CMAKE_CURRENT_BINARY_DIR}/doc") endif() if (NOT TARGET Qt${QT_VERSION_MAJOR}::qhelpgenerator) message(WARNING "qhelpgenerator missing: No QCH documentation targets were generated. Add find_package(Qt5 COMPONENTS Help) to CMake to enable.") return() endif() get_filename_component(_target "${_qdocconf_file}" NAME_WE) set(_html_target "qbs_html_docs_${_target}") if (NOT TARGET ${_html_target}) return() endif() set(_qch_outputdir "${_arg_QCH_DIR}") file(MAKE_DIRECTORY "${_qch_outputdir}") set(_fixed_html_artifact "${CMAKE_CURRENT_BINARY_DIR}/qbsdoc.dummy") set(_qhp_artifact "${_html_outputdir}/${_target}.qhp") set(_qch_artifact "${_qch_outputdir}/${_target}.qch") add_custom_command( OUTPUT "${_qch_artifact}" COMMAND Qt${QT_VERSION_MAJOR}::qhelpgenerator "${_qhp_artifact}" -o "${_qch_artifact}" DEPENDS "${_fixed_html_artifact}" COMMENT "Build QCH documentation from ${_qdocconf_file}" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" VERBATIM ) set(_qch_target "qbs_qch_docs_${_target}") add_custom_target("${_qch_target}" DEPENDS "${_qch_artifact}") add_dependencies(qbs_qch_docs "${_qch_target}") install(FILES "${_qch_outputdir}/${_target}.qch" DESTINATION "${_arg_INSTALL_DIR}" COMPONENT qbs_docs) endfunction() # Helper functions: function(_qbs_qdoc_build_qdocconf_file _qdocconf_file) _qbs_setup_doc_targets() if (NOT TARGET Qt${QT_VERSION_MAJOR}::qdoc) message(WARNING "No qdoc binary found: No documentation targets were generated") return() endif() cmake_parse_arguments(_arg "QCH" "HTML_DIR;QCH_DIR;INSTALL_DIR;POSTFIX" "INDEXES;INCLUDE_DIRECTORIES;FRAMEWORK_PATHS;ENVIRONMENT_EXPORTS;SOURCES" ${ARGN}) if (_arg_UNPARSED_ARGUMENTS) message(FATAL_ERROR "qdoc_build_qdocconf_file has unknown arguments: ${_arg_UNPARSED_ARGUMENTS}.") endif() if (NOT _arg_INSTALL_DIR) message(FATAL_ERROR "No INSTALL_DIR set when calling qdoc_build_qdocconf_file") endif() _qbs_setup_qdoc_targets("${_qdocconf_file}" _html_outputdir HTML_DIR "${_arg_HTML_DIR}" INSTALL_DIR "${_arg_INSTALL_DIR}" INDEXES ${_arg_INDEXES} ENVIRONMENT_EXPORTS ${_arg_ENVIRONMENT_EXPORTS} POSTFIX "${_arg_POSTFIX}" INCLUDE_DIRECTORIES ${_arg_INCLUDE_DIRECTORIES} FRAMEWORK_PATHS ${_arg_FRAMEWORK_PATHS} SOURCES ${_arg_SOURCES} ) if (_arg_QCH) _qbs_setup_qhelpgenerator_targets("${_qdocconf_file}" "${_html_outputdir}" QCH_DIR "${_arg_QCH_DIR}" INSTALL_DIR "${_arg_INSTALL_DIR}") endif() endfunction() function(add_qbs_documentation qdocconf_file) cmake_parse_arguments(_arg "" "" "INCLUDE_DIRECTORIES;FRAMEWORK_PATHS;SOURCES" ${ARGN}) if (_arg_UNPARSED_ARGUMENTS) message(FATAL_ERROR "add_qbs_documentation has unknown arguments: ${_arg_UNPARSED_ARGUMENTS}.") endif() ### Skip docs setup if that is not needed! if (NOT QBS_INSTALL_HTML_DOCS AND NOT QBS_INSTALL_QCH_DOCS) return() endif() qt_query_qmake() set(SRCDIR "${Qbs_SOURCE_DIR}/doc") set(_qch_params) # if QBS_INSTALL_QCH_DOCS is No, qch generation will be skipped entirely if (QBS_INSTALL_QCH_DOCS) set(_qch_params QCH QCH_DIR "${CMAKE_CURRENT_BINARY_DIR}") endif() set(_qdoc_params HTML_DIR "${CMAKE_CURRENT_BINARY_DIR}/${QBS_DOC_HTML_DIR_NAME}") list(APPEND _qdoc_params INSTALL_DIR "${QBS_DOC_INSTALL_DIR}") # Set up environment for qdoc: string(REPLACE "." "" QBS_VERSION_TAG "${QBS_VERSION}") list(APPEND _qdoc_params ENVIRONMENT_EXPORTS SRCDIR QBS_VERSION QBS_VERSION_TAG QT_INSTALL_DOCS ) _qbs_qdoc_build_qdocconf_file(${qdocconf_file} ${_qch_params} ${_qdoc_params} INCLUDE_DIRECTORIES ${_arg_INCLUDE_DIRECTORIES} FRAMEWORK_PATHS ${_arg_FRAMEWORK_PATHS} SOURCES ${_arg_SOURCES} ) endfunction() qbs-src-2.3.1/cmake/QbsBuildConfig.cmake0000644000175100001770000002434414616416776017402 0ustar runnerdockeroption(WITH_TESTS "Build Tests" ON) option(WITH_UNIT_TESTS "Build Unit Tests" OFF) option(INSTALL_PUBLIC_HEADERS "Whether to install public headers" ON) option(QBS_ENABLE_RPATH "Whether to enable RPATH" ON) include(CMakeDependentOption) cmake_dependent_option(QBS_QUICKJS_LEAK_CHECK "Whether to check for quickjs leaks at the end" ON "CMAKE_BUILD_TYPE STREQUAL Debug" OFF) set(QBS_APP_INSTALL_DIR "bin" CACHE STRING "Relative install location for Qbs binaries.") # default paths set(QBS_LIBDIR_NAME "lib") if(WIN32) set(_DEFAULT_LIB_INSTALL_DIR ${QBS_APP_INSTALL_DIR}) set(_DEFAULT_LIBEXEC_INSTALL_DIR ${QBS_APP_INSTALL_DIR}) else() set(_DEFAULT_LIB_INSTALL_DIR ${QBS_LIBDIR_NAME}) set(_DEFAULT_LIBEXEC_INSTALL_DIR "libexec/qbs") endif() # path options set(QBS_OUTPUT_PREFIX "" CACHE STRING "Qbs build output location relative to CMAKE_BINARY_DIR.") set(QBS_LIB_INSTALL_DIR "${_DEFAULT_LIB_INSTALL_DIR}" CACHE STRING "Relative install location for Qbs libraries.") set(QBS_DLL_INSTALL_DIR "${QBS_LIB_INSTALL_DIR}" CACHE STRING "Relative install location for Qbs DLLs.") set(QBS_LIBEXEC_INSTALL_DIR "${_DEFAULT_LIBEXEC_INSTALL_DIR}" CACHE STRING "Relative install location for Qbs libexec.") set(QBS_PLUGINS_INSTALL_BASE "${QBS_LIBDIR_NAME}" CACHE STRING "Relative install location for Qbs plugins.") set(QBS_RESOURCES_INSTALL_BASE "." CACHE STRING "Relative install location for Qbs resources.") set(QBS_HEADERS_INSTALL_DIR "include/qbs" CACHE STRING "Relative install location for Qbs headers.") set(QBS_DOC_INSTALL_DIR "${QBS_RESOURCES_INSTALL_BASE}/share/doc/qbs" CACHE STRING "Relative install location for Qbs documentation.") set(QBS_DOC_HTML_DIR_NAME "html" CACHE STRING "The name of the dir with HTML files, appended to QBS_DOC_INSTALL_DIR.") set(QBS_PLUGINS_INSTALL_DIR "${QBS_PLUGINS_INSTALL_BASE}/qbs/plugins") set(QBS_RESOURCES_INSTALL_DIR "${QBS_RESOURCES_INSTALL_BASE}/share") # rpaths file(RELATIVE_PATH QBS_RELATIVE_LIBEXEC_RPATH "/${QBS_LIBEXEC_INSTALL_DIR}" "/${QBS_LIB_INSTALL_DIR}") file(RELATIVE_PATH QBS_RELATIVE_APP_RPATH "/${QBS_APP_INSTALL_DIR}" "/${QBS_LIB_INSTALL_DIR}") file(RELATIVE_PATH QBS_RELATIVE_PLUGINS_RPATH "/${QBS_PLUGINS_INSTALL_DIR}" "/${QBS_LIB_INSTALL_DIR}") if(WIN32 OR NOT QBS_ENABLE_RPATH) set(QBS_MACOSX_RPATH OFF) set(QBS_LIB_RPATH "") set(QBS_LIBEXEC_RPATH "") set(QBS_APP_RPATH "") set(QBS_PLUGINS_RPATH "") elseif(APPLE) set(QBS_MACOSX_RPATH ON) set(QBS_LIB_RPATH "@loader_path") set(QBS_LIBEXEC_RPATH "@loader_path/${QBS_RELATIVE_LIBEXEC_RPATH}") set(QBS_APP_RPATH "@loader_path/${QBS_RELATIVE_APP_RPATH}") set(QBS_PLUGINS_RPATH "@loader_path/${QBS_RELATIVE_PLUGINS_RPATH}") else() set(QBS_MACOSX_RPATH OFF) set(QBS_LIB_RPATH "\$ORIGIN") set(QBS_LIBEXEC_RPATH "\$ORIGIN/${QBS_RELATIVE_LIBEXEC_RPATH}") set(QBS_APP_RPATH "\$ORIGIN/${QBS_RELATIVE_APP_RPATH}") set(QBS_PLUGINS_RPATH "\$ORIGIN/${QBS_RELATIVE_PLUGINS_RPATH}") endif() function(get_update_path_command var) if(WIN32) get_target_property(_QTCORE_LIBRARY Qt${QT_VERSION_MAJOR}::Core IMPORTED_LOCATION_RELEASE) if(NOT _QTCORE_LIBRARY) get_target_property(_QTCORE_LIBRARY Qt${QT_VERSION_MAJOR}::Core IMPORTED_LOCATION_DEBUG) endif() get_filename_component(_QT_LIBRARY_PATH "${_QTCORE_LIBRARY}" DIRECTORY) get_target_property(_QBS_LIBRARY_PATH qbscore LIBRARY_OUTPUT_DIRECTORY) file(TO_NATIVE_PATH "${_QT_LIBRARY_PATH}\;${_QBS_LIBRARY_PATH}\;$ENV{PATH}" _NEW_PATH) set(${var} "PATH=${_NEW_PATH}" PARENT_SCOPE) else() set(${var} "") endif() endfunction() if(WITH_UNIT_TESTS) set(QBS_UNIT_TESTS_DEFINES "QBS_ENABLE_UNIT_TESTS") else() set(QBS_UNIT_TESTS_DEFINES "") endif() file(RELATIVE_PATH QBS_RELATIVE_LIBEXEC_PATH "/${QBS_APP_INSTALL_DIR}" "/${QBS_LIBEXEC_INSTALL_DIR}") file(RELATIVE_PATH QBS_RELATIVE_SEARCH_PATH "/${QBS_APP_INSTALL_DIR}" "/${QBS_RESOURCES_INSTALL_BASE}") file(RELATIVE_PATH QBS_RELATIVE_PLUGINS_PATH "/${QBS_APP_INSTALL_DIR}" "/${QBS_PLUGINS_INSTALL_BASE}") set(DEFAULT_DEFINES "") if(WIN32) list(APPEND DEFAULT_DEFINES UNICODE _UNICODE _SCL_SECURE_NO_WARNINGS) endif() if(WITH_TESTS) list(APPEND DEFAULT_DEFINES QBS_WITH_TESTS) endif() # CMake 3.10 doesn't have list(TRANSFORM) function(list_transform_prepend var prefix) set(temp "") foreach(f ${${var}}) list(APPEND temp "${prefix}${f}") endforeach() set(${var} "${temp}" PARENT_SCOPE) endfunction() function(add_qbs_app target_name) cmake_parse_arguments(_arg "" "DESTINATION" "DEFINES;PUBLIC_DEFINES;DEPENDS;PUBLIC_DEPENDS;INCLUDES;PUBLIC_INCLUDES;SOURCES;" ${ARGN} ) if (${_arg_UNPARSED_ARGUMENTS}) message(FATAL_ERROR "add_qbs_app had unparsed arguments") endif() set(_DESTINATION "${QBS_APP_INSTALL_DIR}") if(_arg_DESTINATION) set(_DESTINATION "${_arg_DESTINATION}") endif() add_executable(${target_name} ${_arg_SOURCES}) target_compile_definitions( ${target_name} PRIVATE ${_arg_DEFINES} ${DEFAULT_DEFINES} PUBLIC ${_arg_PUBLIC_DEFINES}) target_include_directories( ${target_name} PRIVATE ${_arg_INCLUDES} PUBLIC ${_arg_PUBLIC_INCLUDES}) target_link_libraries(${target_name} PRIVATE ${_arg_DEPENDS} PUBLIC ${_arg_PUBLIC_DEPENDS}) set_target_properties(${target_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${QBS_OUTPUT_PREFIX}${_DESTINATION} BUILD_RPATH "${QBS_APP_RPATH}" INSTALL_RPATH "${QBS_APP_RPATH}" MACOSX_RPATH ${QBS_MACOSX_RPATH} ) install(TARGETS ${target_name} RUNTIME DESTINATION ${_DESTINATION}) endfunction() function(add_qbs_library target_name) cmake_parse_arguments(_arg "STATIC" "" "DEFINES;PUBLIC_DEFINES;DEPENDS;PUBLIC_DEPENDS;INCLUDES;PUBLIC_INCLUDES;SOURCES;" ${ARGN} ) if (${_arg_UNPARSED_ARGUMENTS}) message(FATAL_ERROR "add_qbs_library had unparsed arguments") endif() set(library_type SHARED) if (_arg_STATIC) set(library_type STATIC) endif() string(REGEX REPLACE "\\.[0-9]+$" "" _SOVERSION ${QBS_VERSION}) add_library(${target_name} ${library_type} ${_arg_SOURCES}) target_compile_definitions( ${target_name} PRIVATE ${_arg_DEFINES} ${DEFAULT_DEFINES} PUBLIC ${_arg_PUBLIC_DEFINES}) target_include_directories( ${target_name} PRIVATE ${_arg_INCLUDES} PUBLIC ${_arg_PUBLIC_INCLUDES} INTERFACE $) target_link_libraries(${target_name} PRIVATE ${_arg_DEPENDS} PUBLIC ${_arg_PUBLIC_DEPENDS}) set_target_properties(${target_name} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${QBS_OUTPUT_PREFIX}${QBS_LIB_INSTALL_DIR} LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${QBS_OUTPUT_PREFIX}${QBS_LIB_INSTALL_DIR} RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${QBS_OUTPUT_PREFIX}${QBS_DLL_INSTALL_DIR} BUILD_RPATH "${QBS_LIB_RPATH}" INSTALL_RPATH "${QBS_LIB_RPATH}" MACOSX_RPATH ${QBS_MACOSX_RPATH} SOVERSION ${_SOVERSION} VERSION ${QBS_VERSION} ) if (NOT _arg_STATIC) install(TARGETS ${target_name} LIBRARY DESTINATION ${QBS_LIB_INSTALL_DIR} RUNTIME DESTINATION ${QBS_DLL_INSTALL_DIR} ) endif() if(MSVC) target_compile_options(${target_name} PUBLIC /EHsc) endif() endfunction() function(add_qbs_plugin target_name) cmake_parse_arguments(_arg "" "" "DEFINES;PUBLIC_DEFINES;DEPENDS;PUBLIC_DEPENDS;INCLUDES;PUBLIC_INCLUDES;SOURCES;" ${ARGN} ) if (${_arg_UNPARSED_ARGUMENTS}) message(FATAL_ERROR "add_qbs_plugin had unparsed arguments") endif() add_library(${target_name} SHARED ${_arg_SOURCES}) target_compile_definitions( ${target_name} PRIVATE ${_arg_DEFINES} ${DEFAULT_DEFINES} PUBLIC ${_arg_PUBLIC_DEFINES}) target_include_directories( ${target_name} PRIVATE ${_arg_INCLUDES} PUBLIC ${_arg_PUBLIC_INCLUDES}) target_link_libraries(${target_name} PRIVATE ${_arg_DEPENDS} PUBLIC ${_arg_PUBLIC_DEPENDS}) set_target_properties(${target_name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${QBS_OUTPUT_PREFIX}${QBS_PLUGINS_INSTALL_DIR} RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${QBS_OUTPUT_PREFIX}${QBS_PLUGINS_INSTALL_DIR} BUILD_RPATH "${QBS_PLUGINS_RPATH}" INSTALL_RPATH "${QBS_PLUGINS_RPATH}" MACOSX_RPATH ${QBS_MACOSX_RPATH} ) install(TARGETS ${target_name} LIBRARY DESTINATION ${QBS_PLUGINS_INSTALL_DIR} RUNTIME DESTINATION ${QBS_PLUGINS_INSTALL_DIR} ) endfunction() function(add_qbs_test test_name) cmake_parse_arguments(_arg "" "" "DEFINES;PUBLIC_DEFINES;DEPENDS;PUBLIC_DEPENDS;INCLUDES;PUBLIC_INCLUDES;SOURCES;" ${ARGN} ) if (${_arg_UNPARSED_ARGUMENTS}) message(FATAL_ERROR "add_qbs_test had unparsed arguments") endif() set(target_name "tst_${test_name}") string(TOUPPER ${test_name} suite_name) # cmake is beatiful, here we have string(REPLACE - _ suite_name ${suite_name}) # and here we have add_executable(${target_name} ${_arg_SOURCES}) target_compile_definitions(${target_name} PRIVATE "QBS_TEST_SUITE_NAME=\"${suite_name}\"" "SRCDIR=\"${CMAKE_CURRENT_SOURCE_DIR}\"" ) target_compile_definitions( ${target_name} PRIVATE ${_arg_DEFINES} ${DEFAULT_DEFINES} PUBLIC ${_arg_PUBLIC_DEFINES}) target_include_directories( ${target_name} PRIVATE ${_arg_INCLUDES} "${CMAKE_CURRENT_SOURCE_DIR}/../../../src" PUBLIC ${_arg_PUBLIC_INCLUDES} ) target_link_libraries( ${target_name} PRIVATE ${_arg_DEPENDS} qbscore qbsconsolelogger Qt${QT_VERSION_MAJOR}::Test PUBLIC ${_arg_PUBLIC_DEPENDS} ) set_target_properties(${target_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${QBS_OUTPUT_PREFIX}${QBS_APP_INSTALL_DIR} BUILD_RPATH "${QBS_APP_RPATH}" INSTALL_RPATH "${QBS_APP_RPATH}" MACOSX_RPATH ${QBS_MACOSX_RPATH} ) install(TARGETS ${target_name} RUNTIME DESTINATION ${QBS_APP_INSTALL_DIR}) add_test(NAME ${target_name} COMMAND ${target_name}) endfunction() qbs-src-2.3.1/.clang-tidy0000644000175100001770000000411714616416776014515 0ustar runnerdocker--- Checks: > -*, bugprone-*, -bugprone-easily-swappable-parameters, -bugprone-narrowing-conversions, -bugprone-throw-keyword-missing, cppcoreguidelines-interfaces-global-init, cppcoreguidelines-pro-type-member-init, cppcoreguidelines-slicing, fuchsia-virtual-inheritance, google-build-explicit-make-pair, google-build-namespaces, google-global-names-in-headers, google-objc-*, -google-readability-casting, google-readability-namespace-comments, google-runtime-operator, misc-definitions-in-headers, misc-misplaced-const, misc-new-delete-overloads, misc-non-copyable-objects, misc-redundant-expression, misc-static-assert, misc-uniqueptr-reset-release, misc-unused-*, modernize-avoid-bind, modernize-deprecated-headers, modernize-loop-convert, modernize-make-*, modernize-pass-by-value, modernize-redundant-void-arg, modernize-replace-*, modernize-return-braced-init-list, modernize-shrink-to-fit, modernize-unary-static-assert, modernize-use-auto, modernize-use-bool-literals, modernize-use-emplace, modernize-use-equals-*, modernize-use-noexcept, modernize-use-nullptr, modernize-use-override, modernize-use-transparent-functors, modernize-use-using, performance-*, -performance-no-int-to-ptr, readability-avoid-const-params-in-decls, readability-container-size-empty, readability-delete-null-pointer, readability-deleted-default, readability-identifier-naming, readability-misleading-indentation, readability-misplaced-array-index, readability-non-const-parameter, readability-redundant-*, -readability-redundant-member-init, readability-simplify-boolean-expr, readability-static-definition-in-anonymous-namespace, readability-uniqueptr-delete-release WarningsAsErrors: > bugprone-*, cppcoreguidelines-*, google-*, misc-unused-*, modernize-*, performance-*, readability-*, -readability-container-size-empty HeaderFilterRegex: '' AnalyzeTemporaryDtors: false qbs-src-2.3.1/CMakeLists.txt0000644000175100001770000000375314616416776015226 0ustar runnerdockercmake_minimum_required(VERSION 3.10) if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.15") cmake_policy(VERSION 3.15) endif() ## Add paths to check for cmake modules: list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") include(FeatureSummary) include(QbsBuildConfig) include(QbsDocumentation) file(STRINGS VERSION QBS_VERSION) project(Qbs VERSION ${QBS_VERSION}) # Force C++ standard, do not fall back, do not use compiler extensions set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) # Set up Qt stuff: set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) if(WITH_TESTS) enable_testing() set(QT_TEST_COMPONENT Test) set(IMPLICIT_DEPENDS Qt${QT_VERSION_MAJOR}::Test) endif() find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Concurrent Core Gui Network Widgets Xml ${QT_TEST_COMPONENT} REQUIRED ) find_package(Qt${QT_VERSION_MAJOR} OPTIONAL_COMPONENTS Script QUIET) if (Qt6_FOUND) find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core5Compat REQUIRED) if(NOT TARGET Qt6Core5Compat) if(CMAKE_VERSION VERSION_LESS 3.18) set_property(TARGET Qt6::Core5Compat PROPERTY IMPORTED_GLOBAL TRUE) # hack for CMake < 3.18 endif() add_library(Qt6Core5Compat ALIAS Qt6::Core5Compat) endif() else() if(NOT TARGET Qt6Core5Compat) add_library(Qt6Core5Compat INTERFACE) endif() find_package(Qt${QT_VERSION_MAJOR} OPTIONAL_COMPONENTS DocTools) endif() if (QBS_INSTALL_HTML_DOCS OR QBS_INSTALL_QCH_DOCS) find_package(Python3 COMPONENTS Interpreter) if (Qt6_FOUND) find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Tools REQUIRED) else() find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Help REQUIRED) endif() endif() add_subdirectory(src) add_subdirectory(doc) add_subdirectory(share) if(WITH_TESTS) add_subdirectory(tests) endif() qbs-src-2.3.1/dist/0000755000175100001770000000000014616416776013421 5ustar runnerdockerqbs-src-2.3.1/dist/.gitignore0000644000175100001770000000000214616416776015401 0ustar runnerdocker* qbs-src-2.3.1/bin/0000755000175100001770000000000014616416776013226 5ustar runnerdockerqbs-src-2.3.1/bin/ibmsvc.xml0000644000175100001770000000112214616416776015227 0ustar runnerdocker qbs-src-2.3.1/bin/ibqbs.bat0000644000175100001770000000007514616416776015020 0ustar runnerdocker@xgConsole /profile=%~dp0\ibmsvc.xml /command="qbs -j 20 %*" qbs-src-2.3.1/LGPL_EXCEPTION.txt0000644000175100001770000000225014616416776015372 0ustar runnerdockerThe Qt Company LGPL Exception version 1.1 As an additional permission to the GNU Lesser General Public License version 2.1, the object code form of a "work that uses the Library" may incorporate material from a header file that is part of the Library. You may distribute such object code under terms of your choice, provided that: (i) the header files of the Library have not been modified; and (ii) the incorporated material is limited to numerical parameters, data structure layouts, accessors, macros, inline functions and templates; and (iii) you comply with the terms of Section 6 of the GNU Lesser General Public License version 2.1. Moreover, you may apply this exception to a modified version of the Library, provided that such modification does not involve copying material from the Library into the modified Library's header files unless such material is limited to (i) numerical parameters; (ii) data structure layouts; (iii) accessors; and (iv) small macros, templates and inline functions of five lines or less in length. Furthermore, you are not required to apply this additional permission to a modified version of the Library. qbs-src-2.3.1/release/0000755000175100001770000000000014616416776014076 5ustar runnerdockerqbs-src-2.3.1/VERSION0000644000175100001770000000000614616416776013522 0ustar runnerdocker2.3.1 qbs-src-2.3.1/LICENSE.GPL3-EXCEPT0000644000175100001770000010701314616416776015157 0ustar runnerdockerThis is the GNU General Public License version 3, annotated with The Qt Company GPL Exception 1.0: ------------------------------------------------------------------------- The Qt Company GPL Exception 1.0 Exception 1: As a special exception you may create a larger work which contains the output of this application and distribute that work under terms of your choice, so long as the work is not otherwise derived from or based on this application and so long as the work does not in itself generate output that contains the output from this application in its original or modified form. Exception 2: As a special exception, you have permission to combine this application with Plugins licensed under the terms of your choice, to produce an executable, and to copy and distribute the resulting executable under the terms of your choice. However, the executable must be accompanied by a prominent notice offering all users of the executable the entire source code to this application, excluding the source code of the independent modules, but including any changes you have made to this application, under the terms of this license. ------------------------------------------------------------------------- GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . qbs-src-2.3.1/changelogs/0000755000175100001770000000000014616416776014570 5ustar runnerdockerqbs-src-2.3.1/changelogs/changes-1.18.0.md0000644000175100001770000000517114616416776017251 0ustar runnerdocker# General * capnp: The outputDir property is now public and read-only. * setup-toochains: Include the Xcode version into the profile name profile when auto-detection an Xcode installation. * innosetup module: Add support for InnoSetup v6 * JSON API: Use the full display name of multiplexed products in the dependencies array. This allows clients to for example to properly update the search path for multiplexed dynamic libraries. # Language * Deprecate the product variable inside Export items in favor of a new exportingProduct variable. It will be removed in Qbs 1.20 (QBS-1576). * Qbs now checks string and stringList values according to the allowedValues property in the PropertyOptions item. # Protocol Buffers Support (Protobuf Module) * The deprecated protocBinary property has been removed. Use compilerPath instead. * A nanopb submodule has been added. * The outputDir property is now public and read-only. # C/C++ Support * baremetal: cpp.generateCompilerListingFiles has been implemented for KEIL ARM Clang * baremetal: cpp.enableDefinesByLanguage does now work with SDCC as well. # Qt Support * Moc is now disabled when building aggregate products. # Android Support * Support for the new directory layout of Qt6 has been added (QBS-1609). * Input file generation for androiddeployqt has been improved (QBS-1613). * Debugging experience of multi-architecture Android projects with Qbs and Qt Creator has been improved. Binaries are now generated in a directory layout that Qt Creator expects and debug information is no longer stripped away. # Documentation * baremetal: A new WiFi access point example for the ESP8266 MCU using the GCC toolchain has been added. * baremetal: A new example for Nordic's pca10001 board has been added. It supports GCC, KEIL and IAR. * baremetal: The stm32f103 example supports IAR as well. * A howto has been added showing how to easily disable compiler warnings. * Instructions for building Qbs with CMake have been added (QBS-1618). # Important Bug Fixes * Qt modules could not be used in Export item when building for Android (QBS-1576). * Variable substitution in Info.plist files was broken for '@VAR@' syntax (QBS-1601). * CppApplication failed to build for Android when using Qt > 5.14.0 and multiplexing over multiple architectures (QBS-1608). * Moc output was broken when including Boost project header files (QBS-1621). # Contributors * Alberto Mardegan * André Pönitz * Christian Kandeler * Christian Stenger * Cristian Adam * Denis Shienkov * Eike Ziller * Ivan Komissarov * Jochen Ulrich * Kai Dohmen * Mitch Curtis * Orgad Shaneh * Raphaël Cotty * Richard Weickelt qbs-src-2.3.1/changelogs/changes-1.14.1.md0000644000175100001770000000023414616416776017241 0ustar runnerdocker# Important bugfixes * Qt support: Fix static builds on Windows (QBS-1465). * Qt support: Fix static builds with Qt >= 5.13.1. * Darwin: Adapt to Xcode 11. qbs-src-2.3.1/changelogs/changes-1.20.1.md0000644000175100001770000000055514616416776017244 0ustar runnerdocker# General * Fixed target linker flags on FreeBSD (QBS-1312). * Fixed file time precision on FreeBSD. * Added additional logging to the Qt module provider when no qmakes were found. * Some fixes to CMake build. * Fixed incorrect usage of the qmlcachegen binary (QBS-1676). # Android Support * Added stripping for release builds. * Fix generation of aab packages. qbs-src-2.3.1/changelogs/changes-1.14.0.md0000644000175100001770000000167014616416776017245 0ustar runnerdocker# Language * The `PathProbe` item was extended to support looking for multiple files and filtering candidate files. # C/C++ Support * Added support for Visual Studio 2019. * Added support for clang-cl. * Various improvements for bare-metal toolchains, including new example projects and support for the SDCC toolchain. # Qt Support * Added the `Qt.android_support.extraLibs` property. # Other modules * The `pkgconfig` module now has a `sysroot` property. * Added gRPC support to the `protobuf.cpp` module. # Android Support * Removed support for NDK < r19. * Added new `Android.sdk` properties `versionCode` and `versionName`. # Infrastructure * Added configuration files for Travis CI. * Various fixes and improvements in the Debian Docker image; updated to to Qt 5.11.3. # Contributors * BogDan Vatra * Christian Kandeler * Christian Stenger * Davide Pesavento * Denis Shienkov * hjk * Ivan Komissarov * Joerg Bornemann * Richard Weickelt qbs-src-2.3.1/changelogs/changes-1.12.1.md0000644000175100001770000000100514616416776017234 0ustar runnerdocker# Important bugfixes * Lifted the restriction that the -march option cannot appear in cpp.*Flags (QBS-1018). * All required header files get installed now (QBS-1370). * Fixed rpaths not ending up on the command line under certain circumstances (QBS-1372). * Fixed possible crash when scanning qrc files (QBS-1375). * Fixed spurious re-building of .pc and .qbs module files. * Fixed possible crash on storing a build graph after re-resolving. * Fixed possible assertion on input artifacts with alwaysUpdated == false. qbs-src-2.3.1/changelogs/changes-2.3.0.md0000644000175100001770000000255014616416776017162 0ustar runnerdocker# General * Added an LSP language server that provides support for following symbols and completion in IDEs (QBS-395). * Module properties are now directly available within groups in modules (QBS-1770). * Added possibility to export products to CMake via the new Exporter.cmake module. * Deprecated the pkgconfig-based fallback module provider. * If a project needs to be re-resolved, we now print the reason. * Added some tutorials. * Wildards handling was rewritten to track changes more accurate. * Module 'validate' scripts are no longer run for erroneous product in IDE mode. * Add example how to use Exporters. # C/C++ Support * Private dependencies of products are not traversed more than once anymore (QBS-1714). # Language * Module properties are now accessible for groups in modules (QBS-1770). * Fixed pathList properties in Probes (QBS-1785). * The qbspkgconfig.mergeDependencies property was removed. * ModuleProviders now support the 'allowedValues' property of the PropertyDeclaration item (QBS-1748). # Apple * Adapted darwin support to Xcode 15.3. # CI * Changed Linux Docker images from Focal to Jammy. * Updated compilers and linters to recent versions. * Added clang-format job to check code style. * The project.withExamples property was removed. # Contributors * Christian Kandeler * Dmitrii Meshkov * Ivan Komissarov * Raphael Cotty * Richard Weickelt qbs-src-2.3.1/changelogs/changes-1.6.00000644000175100001770000000163114616416776016564 0ustar runnerdocker* Added lex_yacc module. * Introduced property cpp.systemRunPaths. * Introduced the ability to check a module's version in a Depends item. * Introduced cpp.driverFlags, which allows specifying flags to be passed to the compiler driver (in any mode), but never the system linker. * Introduced cpp.linkerMode property to allow selection of the correct linker (C driver, C++ driver, or system linker) based on the objects being linked. * Added automatic escaping of arguments passed to the cpp.linkerFlags and cpp.platformLinkerFlags properties using the -Wl or -Xlinker syntaxes. To revert to the old behavior, Project.minimumQbsVersion can be set to a version lower than 1.6. * Each build configuration now requires a unique name, which is specified on the command line in the same place that qbs.buildVariant used to be specified. This allows building for multiple configurations with the same variant. qbs-src-2.3.1/changelogs/changes-1.8.00000644000175100001770000000317014616416776016566 0ustar runnerdockerFeatures: * General: * It is no longer strictly required to provide a profile. * Sub-second timestamp resolutions are now supported on Unix systems. * Added a convenient replacement for product.moduleProperty("module", "property"), namely product.module.property. * The loadFile and loadExtension functions are deprecated in favor of the new require function, which accepts arguments of either form accepted by the deprecated functions. * Added new tool qbs-create-project to set up a new qbs project from an existing source tree. * FileTagger items can now have conditions. * Probe items can now appear directly under a Project item. * Cpp module: * Added support for QNX and the QCC toolchain * Added the cpp.useRPathLink property to control whether to use the -rpath-link linker option. * Provided the means to easily combine source files for the C language family in order to support "amalgamation builds". * Introduced cpp.treatSystemHeadersAsDependencies. * Qt modules: * Introduced property Qt.core.combineMocOutput. * Introduced Qt.core.enableKeywords for simple disabling of the "signals", "slots" and "emit" symbols. Important bug fixes: * Improved scalability of parallel builds on Linux by starting Process commands via a dedicated launcher process. Behavior changes: * The base directory for source files changed from the product source directory to the parent directory of the file where the files are listed. qbs-src-2.3.1/changelogs/changes-1.7.00000644000175100001770000000204714616416776016567 0ustar runnerdockerFeatures: * Added a generator for Visual Studio projects. * The Group item is now nestable. * Stricter type checking for properties. * Added support for generating qrc files. * Added full support for the QtScxml module. * Introduced cpp.soVersion. * Added support for building Inno Setup packages. * Tentative support for Visual Studio 2017. * We now assume UTF-8 encoding for project files. * In Scanner items, input.fileName now contains a filename rather than the full path. * Warnings encountered during project resolving are now stored and re-displayed when the project is loaded. * Documentation was improved in several places, most notably for the Rule item. * Support for the deprecated Transformer item was removed. Important bug fixes: * Long paths on Windows are handled (QBS-1068). * Cyclic module dependencies are detected (QBS-1044). * The libqbscore soname now includes the minor version, so that it will not stay the same across ABI changes (QBS-1002). qbs-src-2.3.1/changelogs/changes-1.20.0.md0000644000175100001770000000410114616416776017232 0ustar runnerdocker# General * CMake and Qbs builds now fully support building with Qt6. * Qbs now prints the old properties set when refusing to build a project with changed properties. * Added convenience command to qbs-config to add a profile in one go instead of setting properties separately (QTCREATORBUG-25463). * Added profiling timer for module providers. # C/C++ Support * Added support for the COSMIC COLDFIRE (also known as M68K) compiler (QBS-1648). * Added support for the COSMIC HCS08 compiler (QBS-1641). * Added support for the COSMIC HCS12 compiler (QBS-1640). * Added support for the COSMIC STM8 compiler (QBS-1639). * Added support for the COSMIC STM32 compiler (QBS-1638). * Added support for the new Digital Mars toolchain (QBS-1636). * The new cpp.enableCxxLanguageMacro property was added for the MSVC toolchain that controls the /Zc:__cplusplus required for proper support of the new C++ standards (QBS-1655). * Added support for the "c++20" language version for the MSVC toolchain which results in adding the /std:c++latest flag (QBS-1656). # Qt Support * Consider "external" modules * Fix support for qml binaries that were moved to the libexec directory in Qt 6.2 (QBS-1636). # Android Support * Added option to use dex compiler d8 instead of dx. * Ministro support was removed. * Fix link with static stl on Android (QBS-1654) * The default Android Asset Packaging Tool was change from aapt to aapt2. # Apple Support * Qbs now uses embedded build specs from Xcode 12.4 when bundle.useXcodeBuildSpecs is true instead of older specs from Xcode 9.2. # Important Bug Fixes * Fix handling cpp.linkerWrapper with the MSVC toolchain (QBS-1653). # Infrastructure * Windows-only tests are moved to a separate tst_blackbox_windows binary. * Qbs was updated to 1.18.2 in Docker images as well as in GitHub actions jobs. * Added Qbs build and tests with the MinGW toolchain. * Added CMake build with Qt6 on Linux. # Contributors * Christian Kandeler * Denis Shienkov * Eike Ziller * Ivan Komissarov * Jan Blackquill * Mitch Curtis * Oswald Buddenhagen * Raphaël Cotty * Richard Weickelt qbs-src-2.3.1/changelogs/changes-2.1.2.md0000644000175100001770000000105214616416776017156 0ustar runnerdocker# General * Fixed handling JS floating-point values for x86. * Fixed scope pollution and potential crash when assigning to provider properties (QBS-1747). * Fixed potential access to freed JSValues (QBS-1751). # Qt * Fixed building against Qt with "profiling" build variant (QBS-1758). # Apple * Fixed bundle module with Xcode-less profiles. * Fixed ApplicationExtension with Xcode-less profiles. # Infrastructure * Added CI job to be able to test XCode-less profiles on macOS. # Contributors * Christian Kandeler * Dmitry Shachnev * Ivan Komissarov qbs-src-2.3.1/changelogs/changes-1.13.1.md0000644000175100001770000000106114616416776017237 0ustar runnerdocker# Important bugfixes * Qt support: Plugins are no longer linked into static libraries when building against a static Qt (QBS-1441). * Qt support: Fixed excessively long linker command lines (QBS-1441). * Qt support: Host libraries are now looked up at the right location (QBS-1445). * Qt support: Fixed failure to find Qt modules in Qt Creator when re-parsing a project that hasn't been built yet. * macOS: Properties in bundle.infoPlist are no longer overridden (QBS-1447). * iOS: Fixed generation of default Info.plist (QBS-1447). qbs-src-2.3.1/changelogs/changes-1.23.1.md0000644000175100001770000000115314616416776017242 0ustar runnerdocker# C/C++ Support * Added support for c17 and c2x values in cpp.cLanguageVersion. * Added support for cpp.cLanguageVersion for the MSVC toolchain. * Fix passing linker scripts to iar and keil toolchains (QBS-1704). # Qt Support * Adapted to new location of qscxmlc in Qt 6.3. * Adapted to new location of qhelpgenerator in Qt 6.3. * Fixed setting up Qt 6.3 with qbspkgconfig. * Added QtScript module to the source tarballs (QBS-1703). # Other modules * Fixed protobuf linking on macOS 11. * Fixed handling empty variables in qbspkgconfig (QBS-1702) # Contributors * Christian Kandeler * Ivan Komissarov * Orgad Shaneh qbs-src-2.3.1/changelogs/changes-1.6.10000644000175100001770000000040714616416776016565 0ustar runnerdockerFeatures: * Added cpp.linkerWrapper property. Important bug fixes: * Fixed a number of bugs evaluating module properties (QBS-845, QBS-1005). * Fixed x86_64 > x86 cross compiling (QBS-1028). * Fixed dynamic rules with generated inputs (QBS-1029). qbs-src-2.3.1/changelogs/changes-1.9.1.md0000644000175100001770000000037314616416776017171 0ustar runnerdocker# Important bugfixes * Lower the response file threshold on Windows to fix build failures with mingw (QBS-1201). * Fix explicitly specified build variant being ignored for Darwin targets (QBS-1202). * Fix building for the AVR architecture (QBS-1203). qbs-src-2.3.1/changelogs/changes-1.7.10000644000175100001770000000037114616416776016566 0ustar runnerdockerImportant bug fixes: * Fixed race condition in qmake build (QBS-1091) * Qt Creator no longer leaves empty build directories behind after cancelled project loading (QTCREATORBUG-17543) * Fixed an exception crossing the API boundary qbs-src-2.3.1/changelogs/changes-1.7.20000644000175100001770000000045214616416776016567 0ustar runnerdockerImportant bug fixes: * macOS: Fixed App Extension builds on older versions of Xcode/macOS * Windows: Fixed handling of files on network shares * Fixed syntax error in Qt module that occurred with static Qt builds * Several fixes for the Visual Studio generator (QBS-1077, QBS-1100) qbs-src-2.3.1/changelogs/changes-1.10.1.md0000644000175100001770000000123514616416776017237 0ustar runnerdocker# Important bugfixes * Fix assertion on project loading (QBS-1275). * Fix crash when the "original" value is misused (QBS-1255). * Fix qtquickcompiler support for qml files in subdirectories (QBS-1261). * Fix constant rebuilding after moving an external header file (QBS-1285). * Fix GCC support for "bare metal" systems (QBS-1263, QBS-1265). * Fix using ids in Depends items (QBS-1264). * Fix access to module instances in dependency parameters (QBS-1253). * Fix race condition when creating Inno Setup, NSIS, or WiX installers. * Fix release builds for Android with NDK r12 and above (QBS-1256). * Fix parametrized dependencies in Export and Module items (QBS-1287). qbs-src-2.3.1/changelogs/changes-1.11.0.md0000644000175100001770000000606714616416776017247 0ustar runnerdocker# General * Added `qbs.targetPlatform` and `qbs.hostPlatform` properties which are scalar versions of `qbs.targetOS` and `qbs.hostOS`. `qbs.targetPlatform` is a "write-only" property that can be used to set the OS/platform that is being targeted, while `qbs.targetOS` and `qbs.hostOS` should continue to be used to *read* the OS/platform that is being targeted. `qbs.targetOS` is also now read-only. * The "run" functionality as used by the command-line command of the same name now considers an executable's library dependencies, that is, it adds the paths they are located in to the respective environment variable (e.g. PATH on Windows). # Language * Modules can now declare target artifacts using the new `filesAreTargets` property of the `Group` item. * The Module.setupRunEnvironment script now has a new parameter `config`. Users can set it via the `--setup-run-env-config` option of the `run` command. The only value currently supported is `ignore-lib-dependencies`, which turns off the abovementioned injection of library dependencies' paths into the run environment. * Module.setupBuildEnvironment and Module.setupRunEnvironment now have access to the `product` and `project` variables. With regards to accessing module properties, these script now behave like rules, rather than normal properties. * Added the `BinaryFile` service for reading and writing binary data files. * The `SubProject` item now has a condition property. # C/C++ Support * Added property `cpp.rpathOrigin` which evaluates to `@loader_path` on Darwin and `$ORIGIN` on other Unix-like platforms. * Added the `qbs.toolchainType` property, which is a scalar version of the `qbs.toolchain` property and is used to set the current toolchain. * Added `cpp.driverLinkerFlags` for flags to be passed to the compiler driver only when linking. * We now properly support `"c++17"` as a possible value of `cpp.cxxLanguageVersion`. * The auto-detection mechanism for GCC-like compilers now considers typical mingw prefixes. # Qt Support * Added the Qt.scxml.generateStateMethods property to back the --statemethods option. # Command-line interface * Configuration names are now passed as "config:". * Options do not have to precede property assignments anymore. * Referencing a non-existing product in a property override now results in an error. # Documentation * Major overhaul of the module and item reference for improved readability. * Added a how-to on the topic of pre-compiled headers. * Added documentation for the built-in XML support. * Added documentation for qbs.Utilities. * Added documentation on how to target specific platforms. # Important bug fixes * Fixed some inconsistencies related to item ids (QBS-1016, QBS-1262). * Fixed slow project resolving on macOS (QBS-1277). * Fixed problems with qtquickcompiler support in Qt 5.11 (QBS-1299). * Fixed race conditions in multi-configuration builds (QBS-1308). # Other * The `InnoSetup`, `nsis`, and `wix` modules' rules now have a dependency on installable artifacts of dependencies. * Introduced the `ico` module for creating .ico and .cur files. qbs-src-2.3.1/changelogs/changes-1.8.10000644000175100001770000000077614616416776016600 0ustar runnerdockerImportant bug fixes: * Qbs-specific build errors are now correctly linked in Qt Creator's issues pane (QBS-1151). * Fixed automatic base profile assignment for MSVC Qt installations (QBS-1141) * Various QNX fixes (QBS-1136, QBS-1137, QBS-1138, QBS-1139, QBS-1143). Behavior changes: * Users now get early error messages if they forget the "modules", "products" or "projects" prefix in command line property overrides such as "modules.cpp.enableExceptions:false". qbs-src-2.3.1/changelogs/changes-1.21.0.md0000644000175100001770000000412014616416776017234 0ustar runnerdocker# General * A new qbsModuleProviders property was added to Project and Product items which allows to specify which providers will be run (QBS-1604). * Added a new library for reading *.pc files which allows to avoid launching multiple pkg-config processes and also gives QBS more information about dependencies between *.pc files (QBS-1615). * A new qbspkgconfig provider was added which will replace the fallback provider (QBS-1614). This new provider uses the built-in library and is capable of setting Qt libraries as well. * capnproto and protobuf modules can now use runtime provided by the qbspkgconfig provider. * A new ConanfileProbe.verbose property was added which can be useful to debug problems with Conan. * Qbs no longer migrates the "profiles/" dir from earlier Qbs versions (QTCREATORBUG-26475). Old directories might be cleaned up manually. * FileInfo now always uses high-precision timer on all OSes. * Fixed a problem with overriding stringList properties in ModuleProviders from command-line. # C/C++ Support * Added support for c++23. * Add Elbrus E2K architecture for the GCC toolchain (QBS-1675). * COSMIC cpp module now avoids using relative file paths as much as possible. * Some refactoring was done in the cpp modules to share more code. # Android Support * Added Android.ndk.buildId property which allows to overwrite the default value (sha1) for the --build-id linker flag. * Fixed reading *.prl files with Qt >= 6.0. * Fixed rcc path with Qt >= 6.2. # Documentation * Added a new page with the list of ModuleProviders. * Qt provider now has its own page. * Clarified that application won't be runnable by default, unless env or rpaths are set correctly. # Infrastructure * Added standalone job for building documentation. * Xcode version was bumped to 12.5.1. * Added OpenSUSE Leap docker image. * Added Android tests with different NDK versions. * Fixed QMake build with Qt 6. # Contributors * Christian Kandeler * Christian Stenger * Davide Pesavento * Denis Shienkov * Ivan Komissarov * Kai Dohmen * Orgad Shaneh * Raphaël Cotty * Richard Weickelt * Thorbjørn Lindeijer qbs-src-2.3.1/changelogs/changes-1.23.2.md0000644000175100001770000000026614616416776017247 0ustar runnerdocker# Qt Support * Set _ENABLE_EXTENDED_ALIGNED_STORAGE for MSVC # Documentation * Fix installation with cmake # Contributors * Christian Kandeler * Ivan Komissarov * Marius Gripsgard qbs-src-2.3.1/changelogs/changes-2.0.2.md0000644000175100001770000000054514616416776017163 0ustar runnerdocker# General * Fixed handling of non-string exceptions (QBS-1734). * Fixed Utilities.versionCompare() for four-segment versions numbers (QBS-1733). # Qt Support * Added special handling for unclean paths in prl files (QBS-1732). * Fixed support for static plugins and Qt >= 6.5 (QBS-1732). # Contributors * Christian Kandeler * Ivan Komissarov * Leon Buckel qbs-src-2.3.1/changelogs/changes-1.22.0.md0000644000175100001770000000210714616416776017240 0ustar runnerdocker# General * A new Host service was introduced, providing information about the host system that used to be available from the qbs module, but did not really belong there. In addition, some more qbs module properties have moved to the FileInfo service. * The product variable in Export items now points to the importing product, rather than the exporting one. * Probes are now also available in ModuleProvider items. # C/C++ Support * Added support for the Open Watcom toolchain. * Reduced unneeded re-linking on Linux by ignoring changes to weak symbols in library dependencies by default. # Qt Support * Android multi-arch packages are supported again wth Qt >= 6.3. * We now use cpp.systemIncludePaths for Qt headers, so that building Qt applications no longer triggers warnings from Qt headers unrelated to the user code. # Infrastructure * Added coverage for Digital Mars compiler. * Added coverage for static Qt builds. # Contributors * Christian Kandeler * Denis Shienkov * Ivan Komissarov * Jan Blackquill * Leena Miettinen * Marius Gripsgard * Mitch Curtis * Raphael Cotty qbs-src-2.3.1/changelogs/changes-1.17.0.md0000644000175100001770000000651214616416776017250 0ustar runnerdocker# General * The lookup order in PathProbe changed to [environmentPaths, searchPaths, platformEnvironmentPaths, platformSearchPaths]. * The pathPrefix and platformPaths properties have been removed from the PathProbe item. They were deprecated since Qbs 1.13. * The protocBinary property in the protobuf module has been renamed to compilerPath. * A new module capnp for Cap'n Proto in C++ applications has been added. Cap'n Proto is a serialization protocol similar to protobuf. * The qbs-setup-android tool got a --system flag to install profiles system-wide similar to qbs-setup-qt and qbs-setup-toolchains. # Language * The product and project variables are now available on the right-hand-side of moduleProvider expressions and the default scope is product (QBS-1587). # C/C++ Support * Lots of improvements have been made on toolchain support for bare-metal devices in general. Bare-metal targets can be selected by setting qbs.targetPlatform to 'none'. * KEIL: The ARMCLANG, C166 and C251 toolchains are now supported. * IAR: National's CR16, Microchip's AVR32, NXP's M68K, Renesas' M8/16C/M32C/R32C/SuperH targets and RISC-V targets are now supported. * GCC: National's CR16, NXP M68K, Renesas M32C/M32R/SuperH/V850 as well as RISC-V and Xtensa targets are now supported. * MSVC: Module definition files can now be used to provide the linker with information about exports and attributes (QBS-571). * MSVC: "/external:I" is now used to set system include paths (QBS-1573). * MSVC: cpp.generateCompilerListingFiles is now supported to generate assembler listings. * Xcode: macOS framework paths on the command line are now automatically deduplicated (QBS-1552). * Xcode: Support for Xcode 12.0 has been added (QBS-1582). # Qt Support * The Qt for Android modules have been cleaned up. Support for ARMv5, MIPS and MIPS64 targets has been removed (QBS-1496). * Initial support for Qt6 has been added. # Android Support * A packageType property has been added to the Android.sdk module which allows to create Android App bundles (aab) instead of apk packages only. * A aaptName property has been added to the Android.sdk module which allows to use aapt2 (QBS-1562) since aapt has been deprecated. # Documentation * New bare-metal examples have been added and existing examples have been ported to more toolchains. * A new how-to about cpp.rPaths has been added (QBS-1204). * Various minor improvements have been made. # Important Bug Fixes * Building Qt for Android applications as static libraries has been fixed (QBS-1545). * Trailing slashes are no longer removed from Visual Studio environment variables (QBS-1551). * The MSVC cpp module did not use the cpp.distributionIncludePaths property (QBS-1572). * The visual studio generator has been fixed to work with Visual Studio 16.6 (QBS-1569). * Fixed extraction of build information from CONFIG and QT_CONFIG variables in Qt installations (QBS-1387). * The version number is no longer appended to .so files on Android (QBS-1578). * Compiler defines are now correctly passed to moc when processing header files (QBS-1592). # Contributors * Alberto Mardegan * Christian Gagneraud * Christian Kandeler * Christian Stenger * Denis Shienkov * Ivan Komissarov * Jake Petroules * Jochen Ulrich * Mitch Curtis * Oliver Wolff * Raphaël Cotty * Richard Weickelt * Sergey Zhuravlev qbs-src-2.3.1/changelogs/changes-2.3.1.md0000644000175100001770000000064714616416776017170 0ustar runnerdocker# Language * Fixed look-up of qbs properties in module providers via probes (QBS-1742). # Apple support * Fixed codesing module when multiplexing over build variants (QBS-1775). # Qt support * Fixed retrieving minimum macOS/iOS versions for Qt 6.7.1. # CI * Fixed release jobs. * Fixed macOS 14.2 job. * Updated GitHub actions to recent versions to avoid warnings. # Contributors * Christian Kandeler * Ivan Komissarov qbs-src-2.3.1/changelogs/changes-2.0.1.md0000644000175100001770000000133214616416776017155 0ustar runnerdocker# General * Fixed crash when importing missing JavaScript file (QBS-1730). # C/C++ Support * Fixed building applications with mingw toolchain and Qt6 (QBS-1724). # Apple Support * Added support for Xcode 14.3. * Fixed codesigning on macOS (QBS-1722). * Fixed detecting Xcode via xcode-select tool. # Qt Support * Fixed support for Qt 6.3 on iOS. * Fixed install-qt.sh to properly support Qt for iOS. * Do not setup Qt in qbspkgconfig when cross compiling (QBS-1717). # Build System * Fixed qbsbuildconfig module. * Fixed build with Qt6.5. * Updated CI to test via Qt 6.5 on macOS and Windows. * Updated CI to test via Xcode 14.2 on macOS. # Contributors * Björn Schäpers * Christian Kandeler * Ivan Komissarov * Kai Dohmen qbs-src-2.3.1/changelogs/changes-1.17.1.md0000644000175100001770000000035714616416776017252 0ustar runnerdocker# Important bugfixes * Android: Fix support for Qt 5.15 (QBS-1580). * Android: Allow exporting of Qt modules in Export items (QBS-1576) * Darwin: Fix ios-simulator builds with XCode 12 # Contributors * Raphaël Cotty * Ivan Komissarov qbs-src-2.3.1/changelogs/changes-2.1.0.md0000644000175100001770000000156714616416776017167 0ustar runnerdocker# General * Improved speed and correctness of project resolving. * Fixed possible segmentation fault when quitting a session. * Fixed regression in BinaryFile (QBS-1740). * Added possibility to import and export Qbs settings in the JSON format (QBS-1685). # Modules * Dependencies are no longer merged by default in the qbspkgconfig module provider (QBS-1710). * Protobuf modules now export the desired c++ version (c++17 on macOS, c++14 otherwise). # Apple Support * Updated dmgbuild to the upstream. # Documentation * Added documentation for the path, filePath, product and project variables. * Added sample codesign settings to the Cocoa Touch Application example. # Build System * Updated Qt static Docker image to Qt 6.5.0 and Qbs 1.24. # Contributors * Andrey Filipenkov * Christian Kandeler * Denis Shienkov * Ivan Komissarov * Marc Mutz * Raphael Cotty * Thiemo van Engelen qbs-src-2.3.1/changelogs/changes-1.12.2.md0000644000175100001770000000104114616416776017235 0ustar runnerdocker# Important bugfixes * The Visual Studio 2017 Build Tools are properly supported now. * Android NDK r18 is properly supported now. * Removed invalid assertion that prevented deriving from the Properties item. * Fixed build error on some BSD hosts (QBS-1395). * setup-qt fixes: * The QtWebkit module is now properly detected (QBS-1399). * The case of the qtmain library being called "qt5main" is properly handled now (QBS-767). * Building against a Qt that was built with sanitizing support works out of the box now (QBS-1387). qbs-src-2.3.1/changelogs/changes-1.11.1.md0000644000175100001770000000050614616416776017240 0ustar runnerdocker# Important bugfixes * Speed up run environment setup (QTCREATORBUG-20175). * Fix qbs command line generated by the Visual Studio project generator (QBS-1303). * Install all required header files when building Qbs with qmake. * Fix undefined behavior in the qbscore library where a reference to a temporary object was stored. qbs-src-2.3.1/changelogs/changes-1.18.2.md0000644000175100001770000000171614616416776017254 0ustar runnerdocker# C/C++ Support * qbs-setup-toolchains is now able to detect clang-cl properly * The Library and Include probes take more paths into account on Linux to better support containerization systems such as Flatpak. * Xcode autodetection now uses xcode-select to find Xcode on the system. # Protocol Buffers Support (Protobuf Module) * A missing nanopb generator file extension on windows has been added. * The problem that property _libraryName was incorrect when protobuf was not found has been fixed. # Android Support * An assertion when building Android applications using additional java classes with native methods has been fixed (QBS-1628). # Qt Support * A problem related to handling Qt6EntryPoint in the Qt module provider has been fixed. # Infrastructure * A Qt4 docker image for basic testing has been added. # Contributors * Christian Kandeler * Eike Ziller * Ivan Komissarov * Jan Blackquill * Kai Dohmen * Raphaël Cotty * Richard Weickelt qbs-src-2.3.1/changelogs/changes-1.19.1.md0000644000175100001770000000047014616416776017250 0ustar runnerdocker# C/C++ Support * Fix system include support with MSVC >= 19.29.30037 # Qt Support * Fix possible command line length issue with qmlimportscanner when cross-compiling (QBS-1633). # Apple platforms * Fix stripping debug symbols in multiplexed products when cpp.separateDebugInformation is false (QBS-1647) qbs-src-2.3.1/changelogs/changes-2.0.0.md0000644000175100001770000000111314616416776017151 0ustar runnerdocker# General * Switched JavaScript engine from QtScript to QuickJS * Removed the long-deprecated loadFile() and loadExtension() functions * Removed the qmake project files # Qt support * Adapt to androiddeployqt on Windows no longer accepting tool paths without suffix in 6.4 (QTBUG-111558) # BareMetal support * Added support for HPPA architectures # Other modules * Renamed "name" to "appName" in the freedesktop module to prevent clash with built-in property # Infrastructure * Added USBSAN CI job # Contributors * Christian Kandeler * Ivan Komissarov * Orgad Shaneh * Pino Toscano qbs-src-2.3.1/changelogs/changes-2.2.1.md0000644000175100001770000000040614616416776017160 0ustar runnerdocker# Language * Fixed JavaScript Date() constructor on Windows (QBS-1768). # C/C++ support * Worked around crash in cl.exe when retrieving built-in defines (QBS-1743). # CI * Fixed building release packages. # Contributors * Christian Kandeler * Ivan Komissarov qbs-src-2.3.1/changelogs/changes-1.24.1.md0000644000175100001770000000023014616416776017236 0ustar runnerdocker# C/C++ Support Fix macros and include paths retrieval for IAR # Build System Add fix for cmake >= 3.18 # Contributors * Denis Shienkov * Eike Ziller qbs-src-2.3.1/changelogs/changes-1.13.0.md0000644000175100001770000000322614616416776017243 0ustar runnerdocker# General * Added a lot more documentation. * The `--show-progress` command line option is now supported on Windows. # Language * Introduced module providers. * The `Depends` item now falls back to `pkg-config` to locate dependencies whose names do not correspond to a qbs module. * Added the concept of job pools for limiting concurrent execution of commands by type. * Added support for rules without output artifacts. * Added `atEnd` function to the `Process` service. * Added `canonicalPath` function to the `FileInfo` service. * Removed the need to add "import qbs" at the head of project files. * The `Application`, `DynamicLibrary` and `StaticLibrary` items now have properties for more convenient installation of target binaries. # C/C++ Support * Added recursive dependency scanning of GNU ld linkerscripts. * Added new `cpp` property `linkerVariant` to force use of `gold`, `bfd` or `lld`. # Qt Support * It is no longer required to call `setup-qt` before building Qt projects. * Introduced the property `Qt.core.enableBigResources` for the creation of "big" Qt resources. * Static builds now pull in the default set of plugins as specified by Qt, and the user can specify the set of plugins by type. * Files can be explicitly tagged as mocable now. # Other modules * Added `protobuf` support for C++ and Objective-C. * Introduced the `texttemplate` module, a facility similar to qmake's `SUBSTITUTES` feature. # Android Support * The `AndroidApk` item was deprecated, a normal `Application` item can be used instead. * Building Qt apps is properly supported now, by making use of the `androiddeployqt` tool. # Autotest support * Introduced the `autotest` module. qbs-src-2.3.1/changelogs/changes-1.19.2.md0000644000175100001770000000033714616416776017253 0ustar runnerdocker# Important Bug Fixes * codesign: Fix checking if product is a framework (QBS-1649) * codesign: Add additional signing flags at end of command (QBS-1651) * codesign: Add new codesign.timestampAlgorithm property (QBS-1651) qbs-src-2.3.1/changelogs/changes-2.2.0.md0000644000175100001770000000233114616416776017156 0ustar runnerdocker# General * Improved speed of project resolving by employing multiple CPU cores, if available. * Improved speed of probes execution on macOS. * Object and array (var and varList) properties are now immutable in Probe items. # Language * Modules can now contain `Parameters` items. * ModuleProviders can now contain `PropertyOptions` items. # C/C++ support * Allow `"mold"` as value for `cpp.linkerVariant`. * The systemIncludePaths property is now handled correctly for clang-cl. # Apple support * Updated dmgbuild tool. This fixes bug that additional licenses are not shown in the combobox in the resulting DMG image. # Qt support * Only create qbs modules for those Qt modules that products actually need. * Users can now opt out of using RPATH when linking on Linux. # Other * Protobuf module now requires pkg-config or built-in runtime. * Protobuf module now requires C++17 on all platforms. * Capnproto module: the outputDir property is now mutable. * Added support for Groups to the VisualStudio generator. * pkgconfig module provider: mergeDependencies property is deprecated. # Contributors * Christian Kandeler * Dmitrii Meshkov * Ivan Komissarov * Nick Karg * Serhii Olendarenko * Thiemo van Engelen * Thorbjørn Lindeijer qbs-src-2.3.1/changelogs/changes-1.9.0.md0000644000175100001770000000531214616416776017166 0ustar runnerdocker# General * Setting module property values from the command line can now be done per product. * Introduced new properties `qbs.architectures` and `qbs.buildVariants` to allow product multiplexing by `qbs.architecture` and `qbs.buildVariant`, respectively. * When rebuilding a project, the environment, project file and property values are taken from the existing build graph. # Language * `Depends` items can now be parameterized to set special module parameters for one particular product dependency. The new item type `Parameter` is used to declare such parameters in a module. The new item type `Parameters` is used to allow products to set default values for such parameters in their `Export` item. * The functions `loadExtension` and `loadFile` have been deprecated and will be removed in a future version. Use the `require` function instead. # Custom Rules and Commands * Artifacts corresponding to the `explicitlyDependsOn` property are now available under this name in rules and commands. * A rule's `auxiliaryInputs` and `explicitlyDependsOn` tags are now also matched against rules of dependencies, if these rules are creating target artifacts. * Rules now have a property `requiresInputs`. If it is `false`, the rule will be run even if no artifacts are present that match its input tags. * Added a new property `relevantEnvironmentVariables` to the `Command` class. Use it if the command runs an external tool whose behavior can be influenced by special environment variables. # C/C++ Support * Added the `cpp.link` parameter to enable library dependencies to be excluded from linking. * When pulling in static library products, the new `Depends` parameter `cpp.linkWholeArchive` can now be specified to force all the library's objects into the target binary. * When pulling in library products, the new `Depends` parameter `cpp.symbolLinkMode` can now be specified to control how the library is linked into the target binary on Apple platforms: specifically, whether the library is linked as weak, lazy, reexported, and/or upward (see the `ld64` man page for more information). * The property `cpp.useCxxPrecompiledHeader`, as well as the variants for the other languages, now defaults to true. * The property `cpp.cxxLanguageVersion` now gets mapped to MSVC's `/std` option, if applicable. # Apple * Added support for building macOS disk images. # Android * Product multiplexing is no longer done via profiles, but via architecture, employing the new `qbs.architectures` property (see above). As a result, the `setup-android` command now sets up only one profile, rather than one for each architecture. * Added support for NDK Unified Headers. # Documentation * Added a "How-to" section. qbs-src-2.3.1/changelogs/changes-1.19.0.md0000644000175100001770000000471414616416776017254 0ustar runnerdocker# General * New codesign module was added to implement code signing for Apple, Android and Windows platforms (QBS-899, QBS-1546). * It is now possible to build Qbs with Qt 6. * Project files update API depending on the Qt.gui module was removed. This allows to enable project files update API unconditionally when building Qbs. * Convenience items such as Application, DynamicLibrary and StaticLibrary now properly install artifacts when multiplexing. # C/C++ Support * Qbs now supports multiple MSVC compiler versions installed in one Visual Studio installation (QBS-1498). Also, multiple compiler versions are properly detected by qbs setup-toolchains. * It is now possible to specify Windows SDK version for the MSVC and clang-cl toolchains via the new cpp.windowsSdkVersion property. * baremetal: Fix generation of compiler listing files with custom extension for the SDCC compiler. * baremetal: Fix generation of compiler listing files for the ARMCC compiler. * baremetal: Fix detection for Keil toolchains. * baremetal: Add support for HCS08 architectures to SDCC and IAR toolchains (QBS-1631, QBS-1629). * baremetal: Add support for HCS12 architectures to GCC and IAR toolchains (QBS-1630, QBS-1550). # Qt Support * Fix possible command line length issue with qmlimportscanner (QBS-1633). * Fix accessing binaries from libexec for Qt 6.1 and above (QBS-1636). # Android Support * Added a workaround for the Qt.Network module dependencies for 5.15.0 < Qt < 5.15.3 (QTBUG-87288) * Fix aapt command invocation on Windows. * Added support for ndk 22.1.7171670. # Documentation * Added How-To about codesigning on Apple platforms. * Cocoa Touch Application example is brought up-to date to use modern Apple practices. * Added example how to use the cpp.linkerVariant property. * Added missing documentation for the cpp.toolchainInstallPath property. * Added missing documentation for the supported 'bare-metal' architectures. # Important Bug Fixes * Added support for Xcode 12.5 (QBS-1644). * Fix support for Python 3.9 for building Apple DMG images (QBS-1642). # Infrastructure * Ubuntu Focal image was updated to use Qt 5.15.2 and Qbs 1.17.1. * Added automated tests for Qt 6 for macOS, Linux and Windows. * Added a self-hosted runner to run 'bare-metal' tests on Windows. # Contributors * Andrey Filipenkov * Denis Shienkov * Christian Kandeler * Jan Blackquill * Jake Petroules * Ivan Komissarov * Max Bespalov * Mitch Curtis * Orgad Shaneh * Raphaël Cotty * Richard Weickelt qbs-src-2.3.1/changelogs/changes-1.22.1.md0000644000175100001770000000054614616416776017246 0ustar runnerdocker# General * Adapted to changes in Xcode 13.3 (QBS-1693). * Re-added several bugfixes from 1.21.1 that got lost in 1.22.0. # Qt Support * Fixed building against static Qt 6 (QBS-1692). # Android Support * Fixed wrong include path being added to the command line (QBS-1691). # Documentation * Fixed outdated use of "product" in Export items (QBS-1694). qbs-src-2.3.1/changelogs/changes-2.1.1.md0000644000175100001770000000032714616416776017161 0ustar runnerdocker# General * Fixed Probe lookup in multiplexed products. * Fixed excessively slow module merging in some circumstances. * Fixed building QuickJS on x86 systems. # Contributors * Christian Kandeler * Ivan Komissarov qbs-src-2.3.1/changelogs/changes-1.12.0.md0000644000175100001770000000355714616416776017251 0ustar runnerdocker# General * Added new module `Exporter.qbs` for creating qbs modules from products. * Added new module `Exporter.pkgconfig` for creating pkg-config metadata files. * Introduced the concept of system-level qbs settings. * Added a Makefile generator. * All command descriptions now contain the product name. # Language * The `explicitlyDependsOn` property of the `Rule` item no longer considers target artifacts of product dependencies. The new property `explicitlyDependsOnFromDependencies` can be used for that purpose. * The `excludedAuxiliaryInputs` property of the `Rule` item has been renamed to `excludedInputs`. The old name is now deprecated. * Added a new property type `varList`. * Added `FileInfo.suffix` and `FileInfo.completeSuffix`. * The deprecated JS extensions `XmlDomDocument` and `XmlDomElement` have been removed. Use `Xml.DomDocument` and `Xml.DomDocument` instead. # C/C++ Support * For MSVC static libraries, compiler-generated PDB files are now tagged as `debuginfo_cl` to make them installable. * The `cxxLanguageVersion` property can now be set to different values in different modules, and the highest value will be chosen. # Qt Support * Amalgamation builds work properly now in the presence of "mocable" files. * Fixed some redundancy on the linker command line. # Other modules * Added support for `%option outfile` and `%output` to the `lex_yacc` module. * The `vcs` module now creates the header file even if no repository is present. # Autotest support * Added an `auxiliaryInputs` property to the `AutotestRunner` item for specifying run-time dependencies of test executables. * The `AutotestRunner` item now has a `workingDirectory` property. By default, the respective test executable's location is used. # Important bug fixes * Disabled products no longer cause their exported dependencies to get pulled into the importing product (QBS-1250). qbs-src-2.3.1/changelogs/changes-2.2.2.md0000644000175100001770000000100614616416776017156 0ustar runnerdocker# General * Fixed name collision check for multi-part modules (QBS-1772). * Fixed potential assertion when attaching properties on non-present modules (QBS-1776). # C/C++ * Fixed handling assember flags with MSVC (QBS-1774). # Qt * Fixed the qbspkgconfig Qt provider for the case when there is no Qt (QBS-1777). # Other * Make protobuf usable without qbspkgconfig again (QBS-1663). * Add support for the definePrefix option to qbspkgconfig. # Contributors * Björn Schäpers * Christian Kandeler * Ivan Komissarov qbs-src-2.3.1/changelogs/changes-1.24.0.md0000644000175100001770000000045314616416776017244 0ustar runnerdocker# General * Users can now control if and when warnings for deprecated properties are emitted. * Added FileInfo.executableSuffix(). # Qt Support * Minimum windows version is now 10.0, like for cmake and qmake. # Contributors * Christian Kandeler * Ivan Komissarov * Petr Mikhalicin * Raphael Cotty qbs-src-2.3.1/changelogs/changes-1.10.0.md0000644000175100001770000000353714616416776017245 0ustar runnerdocker# General * Added the `vcs` module to provide VCS repository information. Git and Subversion are supported initially. * Added initial support for the Universal Windows Platform. * Improved a lot of error messages. # Language * Profiles can now be defined within a project using the `Profile` item. * Groups without a prefix now inherit the one of the parent group. * Both the `Module` and the `FileTagger` item now have a `priority` property, allowing them to override conflicting instances. * It is now possible to add file tags to generated artifacts by setting the new `fileTags` property in a group that has a `fileTagsFilter`. * Added new open mode `TextFile.Append`. * Added the `filePath` function to the `TextFile` class. * `Process` and `TextFile` objects in rules, commands and configure scripts are now closed automatically after script execution. # C/C++ Support * Added the `cpufeatures` module for abstracting compiler flags related to CPU features such as SSE. * Added property `cpp.discardUnusedData` abstracting linker options that strip unneeded symbols or sections. * Added property `cpp.variantSuffix` for making binary names unique when multiplexing products. * Added property `cpp.compilerDefinesByLanguage` providing the compiler's pre-defined macros. # Android * The deprecated `apkbuilder` tool is no longer used. # Qt * Added support for the Qt Quick compiler. * Added support for `qmlcachegen`. # Command-line interface * Removed some non-applicable options from a number of tools. * The `run` command can now deploy and run Android apps on devices, and deploy and run iOS and tvOS apps on the simulator. * Added new command `list-products`. # Documentation * Added porting guide for qmake projects. * Added in-depth descriptions of all command-line tools. * Added "How-to" for creating modules for third-party libraries. * Added a man page. qbs-src-2.3.1/changelogs/changes-1.23.0.md0000644000175100001770000000066214616416776017245 0ustar runnerdocker# C/C++ Support * Added new module Sanitizers.address for simple cross-platform ASan configuration. # Qt Support * Add the now-required /permissive- flag for MSVC automatically. # Android Support * Support use of cmdline-tools in addition to SDK tools. * Consider .jar files also in the product itself, not just in dependencies. # Contributors * Christian Kandeler * Dmitry Shachnev * Ivan Komissarov * Max Bespalov * Orgad Shaneh qbs-src-2.3.1/changelogs/changes-1.15.0.md0000644000175100001770000000327714616416776017253 0ustar runnerdocker# General * Added a session command which offers a JSON-based API for interaction with other tools via stdin/ stdout. This allows for proper Qbs support in IDEs that do not use Qt or even C++. # Language * Probes are now evaluated before Profile items and can be used to create profiles on project level. * AutotestRunner got a separate job pool. * Added a timeout property to Command, JavaScriptCommand and AutotestRunner. This allows to identify and kill stuck commands. # C/C++ Support * Ensure proper support of Xcode 11. * Linker map files can be generated with all toolchains. * Bare metal toolchains can now generate listing files. * Improve the command line output filtering of bare metal toolchains. * Added support for clang in mingw mode on Windows. * Added msp430 support to GCC and IAR. * Added STM8 support to IAR and SDCC. * Added IDE project generators for IAR Embedded Workbench for ARM, AVR, 8051, MSP430, and STM8 architectures. * Added IDE project generators for KEIL uVision v4 for ARM and 8051 architectures. * Added more bare metal project examples for various target platforms. * The IAR, KEIL and SDCC toolchains are now found automatically in various. locations by the setup-toolchains command and by probes if no installPath is set in the profile. # Infrastructure * Automated build and testing on Ubuntu, macOS and Windows. * Added Ubuntu bionic Docker image which replaces Debian stretch. * Updated Qt in the Ubuntu and Windows Docker images to 5.12. * When building Qbs, Qt libraries can now be bundled on Linux, macOS and Windows. # Contributors * Alberto Mardegan * Christian Kandeler * Denis Shienkov * Ivan Komissarov * Jochen Ulrich * Joerg Bornemann * Richard Weickelt qbs-src-2.3.1/changelogs/changes-1.16.0.md0000644000175100001770000001224114616416776017243 0ustar runnerdocker# General * A new freedesktop module helps UNIX application developers to follow the freedesktop.org guidelines. * The Android module now allows resourcesDir, sourcesDir and assetsDir to be specified as relative paths. * A new ConanfileProbe allows better and more flexible integration of Qbs and the Conan package manager. * A new hostArchitecture property has been added to the qbs module. # Language * List properties in modules are now merged according to inter-module dependencies. This is important when flags like cpp.staticLibraries are contributed by multiple modules with dependencies between each other. (QBS-1517). * Dependency matching of multiplexed products is now less strict and does not require all multiplex properties to match. For instance, if product A is multiplexed over qbs.architecture and qbs.buildVariant while product B is only multiplexed over one of these axes, then Qbs no longer fails (QBS-1515). # C/C++ Support * The Renesas RL78 architecture is now supported in GCC and IAR and the toolchains are auto-detected by qbs-setup-toolchains. * The Renesas RX as well as the RH850, V850, 78K are now supported in IAR and the toolchains are auto-detected by qbs-setup-toolchains. * The MPLAB X32 GCC-based toolchain is now auto-detected on Windows. * Multiple occurrences of static libraries on the linker command line are now pruned and the last instance always wins when using GCC or LLVM-based toolchains. This avoids problems with excessively long linker command lines (QBS-1273). * Clang-cl and MSVC toolchains use the compiler frontend instead of the linker when linking. The old behavior can be restored by setting cpp.linkerMode to "manual". This allows to use sanitizers with clang-cl by passing "-fsanitise=xxx" via cpp.driverFlags (QBS-1522). * The clang-cl toolchain now uses "link.exe" as the default linker. "lld-link.exe" can be explicitly selected by setting cpp.linkerVariant to "lld" (QBS-1522). * The MSVC, clang-cl and MinGW toolchains are now automatically detected if the profile does not set an explicit installation location, for instance because no profile was given. * Installation of separate debug information can now be enabled and configured by simply setting the installDebugInformation and debugInformationInstallDir properties in the Application and Library convenience items. This works for toolchains based upon GCC, MSVC or clang-cl. * Xcode version 11.4 is now supported on macOS. # Qt Support * Qbs now supports Qt 5.14 for Android which comes as a multi-architecture package. The qbs-setup-android tool has been updated accordingly (QBS-1497). * JSON metatype files generated by moc (Qt >= 5.15) are supported by setting Qt.core.generateMetaTypesFile and Qt.core.metaTypesInstallDir (QBS-1531). * Pure debug builds of Qt (>= 5.14) with MinGW are now properly supported. They don't have the 'd' suffix (QTBUG-80792). * The QML type declaration mechanism introduced in Qt 5.15 is now supported by the Qt.qml module (QBS-1531). * Generated qmltypes files are now named according to the product's targetName property (QTBUG-82710). # Documentation * The how-to chapter has been extended with sections about debugging Qbs files and about building separate debug information in C++ projects. * The item and module reference documentation has been improved for the cpp.libraryPaths, cpp.dynamicLibraries (QBS-1516), qbs.toolchainType and qbs.toolchain properties as well as the Export item and the Library convenience item. * Documentation for various path probes has been added (QBS-1187). * The README was extended and a CONTRIBUTING file has been added which provides useful information for potential contributors. This is important for people looking at our github mirror. # Infrastructure * The Debian Docker image has been removed. * We are now using ccache and clcache in our CI pipelines to shrink the build time. * Clang-tidy is now used to identify potential problems in the code base and a lot of action was taken upon a lot of findings. * A Docker image for testing Qbs with Android and Qt has been added. # Important Bug Fixes * Fix nullpointer access and heap-use-after-free error (QBS-1485). * Select the right instance when Depends.profiles is used on a dependency with an aggregator product (QBS-1513). * Fix crash when specifying a non-existing profile in Depends.profiles (QBS-1514). * Try harder to detect GCC toolchains in qbs-setup-toolchains (QBS-1524). * Code signing for Core Foundation Bundles on macOS has been fixed. * Automatic artifact scanning now prefers artifacts from product dependencies if multiple candidates are found. This improves dependency tracking in complex projects (QBS-1532). * The grpcIncludePath property in the probufcpp module has been fixed (QBS-1542). * Qbs does no longer crash when accessing a property of a non-existent module in "IDE mode". # Contributors * Alberto Mardegan * Björn Schäpers * BogDan Vatra * Christian Kandeler * Christian Stenger * Denis Shienkov * Ivan Komissarov * Jochen Ulrich * Joerg Bornemann * Leon Buckel * Marius Sincovici * Maximilian Goldstein * Mitch Curtis * Oliver Wolff * Orgad Shaneh * Raphaël Cotty * Richard Weickelt qbs-src-2.3.1/LICENSE.LGPLv30000644000175100001770000001756014616416776014502 0ustar runnerdocker GNU LESSER GENERAL PUBLIC LICENSE The Qt Toolkit is Copyright (C) 2015 The Qt Company Ltd. Contact: http://www.qt.io/licensing You may use, distribute and copy the Qt GUI Toolkit under the terms of GNU Lesser General Public License version 3, which is displayed below. ------------------------------------------------------------------------- GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright © 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this licensedocument, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, “this License†refers to version 3 of the GNU Lesser General Public License, and the “GNU GPL†refers to version 3 of the GNU General Public License. “The Library†refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An “Application†is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A “Combined Work†is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the “Linked Versionâ€. The “Minimal Corresponding Source†for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The “Corresponding Application Code†for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License “or any later version†applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. qbs-src-2.3.1/docker/0000755000175100001770000000000014616416776013725 5ustar runnerdockerqbs-src-2.3.1/docker/jammy/0000755000175100001770000000000014616416776015042 5ustar runnerdockerqbs-src-2.3.1/docker/jammy/test-android-no-qt.Dockerfile0000644000175100001770000001034114616416776022463 0ustar runnerdocker# # Android SDK/NDK for testing Qbs # FROM ubuntu:jammy LABEL Description="Ubuntu test environment for Qbs for Android" # Allow colored output on command line. ENV TERM=xterm-color # # Make it possible to change UID/GID in the entrypoint script. The docker # container usually runs as root user on Linux hosts. When the Docker container # mounts a folder on the host and creates files there, those files would be # owned by root instead of the current user. Thus we create a user here who's # UID will be changed in the entrypoint script to match the UID of the current # host user. # ARG USER_UID=1000 ARG USER_NAME=devel RUN apt-get update -qq && \ apt-get install -qq -y \ ca-certificates \ gosu \ sudo && \ groupadd -g ${USER_UID} ${USER_NAME} && \ useradd -s /bin/bash -u ${USER_UID} -g ${USER_NAME} -o -c "" -m ${USER_NAME} && \ usermod -a -G sudo ${USER_NAME} && \ echo "%devel ALL = (ALL) NOPASSWD: ALL" >> /etc/sudoers COPY docker/entrypoint.sh /sbin/entrypoint.sh ENTRYPOINT ["/sbin/entrypoint.sh"] # Qbs build dependencies RUN apt-get update -qq && \ apt-get install -qq -y --no-install-recommends \ ca-certificates \ curl \ libasan5 \ libglib2.0-0 \ openjdk-8-jdk-headless \ p7zip-full \ unzip ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 RUN echo "export JAVA_HOME=${JAVA_HOME}" > /etc/profile.d/android.sh && \ echo "export PATH=${JAVA_HOME}/bin:\${PATH}" >> /etc/profile.d/android.sh ARG ANDROID_NDK_VERSION ENV ANDROID_HOME="/home/${USER_NAME}/android" ENV ANDROID_SDK_ROOT=${ANDROID_HOME} ENV ANDROID_NDK_ROOT=${ANDROID_HOME}/"ndk"/${ANDROID_NDK_VERSION} ENV PATH="${JAVA_HOME}:${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/cmdline-tools/bin:$PATH" RUN echo "export ANDROID_HOME=/home/${USER_NAME}/android" >> /etc/profile.d/android.sh && \ echo "export ANDROID_SDK_ROOT=${ANDROID_SDK_ROOT}" >> /etc/profile.d/android.sh && \ echo "export ANDROID_NDK_ROOT=${ANDROID_NDK_ROOT}" >> /etc/profile.d/android.sh && \ echo "export PATH=${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/cmdline-tools/bin:\$PATH" >> /etc/profile.d/android.sh # # We ned to run the following steps as the target user # USER ${USER_NAME} RUN mkdir ${ANDROID_HOME} # Get Android command line tools ARG COMMAND_LINE_TOOLS_VERSION="6858069" RUN curl -s https://dl.google.com/android/repository/commandlinetools-linux-${COMMAND_LINE_TOOLS_VERSION}_latest.zip > ${ANDROID_HOME}/commandlinetools.zip && \ unzip ${ANDROID_HOME}/commandlinetools.zip -d ${ANDROID_HOME} && \ rm -v ${ANDROID_HOME}/commandlinetools.zip # Accept SDK license ARG ANDROID_PLATFORM="android-29" ARG BUILD_TOOLS="29.0.2" RUN yes | sdkmanager "--sdk_root=${ANDROID_HOME}" --verbose --licenses && \ sdkmanager "--sdk_root=${ANDROID_HOME}" --update && \ sdkmanager "--sdk_root=${ANDROID_HOME}" "platforms;${ANDROID_PLATFORM}" RUN yes | sdkmanager "--sdk_root=${ANDROID_HOME}" "build-tools;${BUILD_TOOLS}" RUN yes | sdkmanager "--sdk_root=${ANDROID_HOME}" "platform-tools" RUN yes | sdkmanager "--sdk_root=${ANDROID_HOME}" "tools" RUN yes | sdkmanager "--sdk_root=${ANDROID_HOME}" "ndk;${ANDROID_NDK_VERSION}" RUN /usr/lib/jvm/java-8-openjdk-amd64/bin/keytool -genkey -keystore /home/${USER_NAME}/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname 'CN=Android Debug,O=Android,C=US' # Install ndk samples in ${ANDROID_NDK_ROOT}/samples RUN cd ${ANDROID_NDK_ROOT} && \ curl -sLO https://github.com/android/ndk-samples/archive/master.zip && \ unzip -q master.zip && \ rm -v master.zip && \ mv ndk-samples-master samples # Install android-BasicMediaDecoder in ${ANDROID_SDK_ROOT}/samples RUN mkdir ${ANDROID_SDK_ROOT}/samples && \ cd ${ANDROID_SDK_ROOT}/samples && \ curl -sLO https://github.com/googlearchive/android-BasicMediaDecoder/archive/master.zip && \ unzip -q master.zip && \ rm -v master.zip && \ mv android-BasicMediaDecoder-master android-BasicMediaDecoder # Download buildtool to generate aab packages in ${ANDROID_SDK_ROOT} RUN cd ${ANDROID_SDK_ROOT} && \ curl -sLO https://github.com/google/bundletool/releases/download/1.3.0/bundletool-all-1.3.0.jar USER root qbs-src-2.3.1/docker/jammy/test-android.Dockerfile0000644000175100001770000001261414616416776021434 0ustar runnerdocker# # Android SDK/NDK + Qt for Android for testing Qbs # FROM ubuntu:jammy LABEL Description="Ubuntu test environment for Qbs and Qt for Android" # Allow colored output on command line. ENV TERM=xterm-color # # Make it possible to change UID/GID in the entrypoint script. The docker # container usually runs as root user on Linux hosts. When the Docker container # mounts a folder on the host and creates files there, those files would be # owned by root instead of the current user. Thus we create a user here who's # UID will be changed in the entrypoint script to match the UID of the current # host user. # ARG USER_UID=1000 ARG USER_NAME=devel RUN apt-get update -qq && \ apt-get install -qq -y \ ca-certificates \ gosu \ sudo && \ groupadd -g ${USER_UID} ${USER_NAME} && \ useradd -s /bin/bash -u ${USER_UID} -g ${USER_NAME} -o -c "" -m ${USER_NAME} && \ usermod -a -G sudo ${USER_NAME} && \ echo "%devel ALL = (ALL) NOPASSWD: ALL" >> /etc/sudoers COPY docker/entrypoint.sh /sbin/entrypoint.sh ENTRYPOINT ["/sbin/entrypoint.sh"] # Qbs build dependencies RUN apt-get update -qq && \ apt-get install -qq -y --no-install-recommends \ ca-certificates \ curl \ libasan5 \ libglib2.0-0 \ locales \ openjdk-8-jdk-headless \ p7zip-full \ unzip # Set the locale RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && \ locale-gen ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 RUN echo "export JAVA_HOME=${JAVA_HOME}" > /etc/profile.d/android.sh && \ echo "export PATH=${JAVA_HOME}/bin:\${PATH}" >> /etc/profile.d/android.sh ARG ANDROID_NDK_VERSION ENV ANDROID_HOME="/home/${USER_NAME}/android" ENV ANDROID_SDK_ROOT=${ANDROID_HOME} ENV ANDROID_NDK_ROOT=${ANDROID_HOME}/"ndk"/${ANDROID_NDK_VERSION} ENV PATH="${JAVA_HOME}:${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/cmdline-tools/bin:$PATH" RUN echo "export ANDROID_HOME=/home/${USER_NAME}/android" >> /etc/profile.d/android.sh && \ echo "export ANDROID_SDK_ROOT=${ANDROID_SDK_ROOT}" >> /etc/profile.d/android.sh && \ echo "export ANDROID_NDK_ROOT=${ANDROID_NDK_ROOT}" >> /etc/profile.d/android.sh && \ echo "export PATH=${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/cmdline-tools/bin:\$PATH" >> /etc/profile.d/android.sh # # We ned to run the following steps as the target user # USER ${USER_NAME} RUN mkdir ${ANDROID_HOME} # Get Android command line tools ARG COMMAND_LINE_TOOLS_VERSION="6858069" RUN curl -s https://dl.google.com/android/repository/commandlinetools-linux-${COMMAND_LINE_TOOLS_VERSION}_latest.zip > ${ANDROID_HOME}/commandlinetools.zip && \ unzip ${ANDROID_HOME}/commandlinetools.zip -d ${ANDROID_HOME} && \ rm -v ${ANDROID_HOME}/commandlinetools.zip # Accept SDK license ARG ANDROID_PLATFORM="android-30" ARG BUILD_TOOLS="29.0.2" RUN yes | sdkmanager "--sdk_root=${ANDROID_HOME}" --verbose --licenses && \ sdkmanager "--sdk_root=${ANDROID_HOME}" --update && \ sdkmanager "--sdk_root=${ANDROID_HOME}" "platforms;${ANDROID_PLATFORM}" RUN yes | sdkmanager "--sdk_root=${ANDROID_HOME}" "build-tools;${BUILD_TOOLS}" RUN yes | sdkmanager "--sdk_root=${ANDROID_HOME}" "platform-tools" RUN yes | sdkmanager "--sdk_root=${ANDROID_HOME}" "tools" RUN yes | sdkmanager "--sdk_root=${ANDROID_HOME}" "ndk;${ANDROID_NDK_VERSION}" RUN /usr/lib/jvm/java-8-openjdk-amd64/bin/keytool -genkey -keystore /home/${USER_NAME}/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname 'CN=Android Debug,O=Android,C=US' # Install ndk samples in ${ANDROID_NDK_ROOT}/samples RUN cd ${ANDROID_NDK_ROOT} && \ curl -sLO https://github.com/android/ndk-samples/archive/master.zip && \ unzip -q master.zip && \ rm -v master.zip && \ mv ndk-samples-master samples # Install android-BasicMediaDecoder in ${ANDROID_SDK_ROOT}/samples RUN mkdir ${ANDROID_SDK_ROOT}/samples && \ cd ${ANDROID_SDK_ROOT}/samples && \ curl -sLO https://github.com/googlearchive/android-BasicMediaDecoder/archive/master.zip && \ unzip -q master.zip && \ rm -v master.zip && \ mv android-BasicMediaDecoder-master android-BasicMediaDecoder # Download buildtool to generate aab packages in ${ANDROID_SDK_ROOT} RUN cd ${ANDROID_SDK_ROOT} && \ curl -sLO https://github.com/google/bundletool/releases/download/1.3.0/bundletool-all-1.3.0.jar USER root # # Install Qt and Qbs for Linux from qt.io # ARG QT_VERSION COPY scripts/install-qt.sh install-qt.sh RUN if [ "${QT_VERSION}" \< "5.14" ] || [ ! "${QT_VERSION}" \< "6.0.0" ]; then \ QT_ABIS="android_armv7 android_arm64_v8a android_x86 android_x86_64"; \ else \ QT_ABIS="any"; \ fi; \ if [ ! "${QT_VERSION}" \< "6.0.0" ]; then \ ./install-qt.sh --version ${QT_VERSION} qtbase qtdeclarative icu; \ if [ "${QT_VERSION}" \< "6.1.0" ]; then \ QT_COMPONENTS="qtbase qtdeclarative qttools qtquickcontrols2 qtquicktimeline svg"; \ else \ QT_COMPONENTS="qtbase qtdeclarative qttools qtquicktimeline svg"; \ fi; \ else \ QT_COMPONENTS="qtbase qtdeclarative qttools qtimageformats"; \ fi; \ for abi in ${QT_ABIS}; do \ ./install-qt.sh --version ${QT_VERSION} --target android --toolchain ${abi} ${QT_COMPONENTS}; \ done && \ echo "export QT_VERSION=${QT_VERSION}" >> /etc/profile.d/qt.sh qbs-src-2.3.1/docker/jammy/test-qt4.Dockerfile0000644000175100001770000000246214616416776020524 0ustar runnerdocker# # Testing Qbs with qt4 # FROM ubuntu:jammy LABEL Description="Ubuntu qt4 test environment for Qbs" # Allow colored output on command line. ENV TERM=xterm-color # # Make it possible to change UID/GID in the entrypoint script. The docker # container usually runs as root user on Linux hosts. When the Docker container # mounts a folder on the host and creates files there, those files would be # owned by root instead of the current user. Thus we create a user here who's # UID will be changed in the entrypoint script to match the UID of the current # host user. # ARG USER_UID=1000 ARG USER_NAME=devel RUN apt-get update -qq && \ apt-get install -qq -y \ ca-certificates \ gosu \ software-properties-common \ sudo && \ groupadd -g ${USER_UID} ${USER_NAME} && \ useradd -s /bin/bash -u ${USER_UID} -g ${USER_NAME} -o -c "" -m ${USER_NAME} && \ usermod -a -G sudo ${USER_NAME} && \ echo "%devel ALL = (ALL) NOPASSWD: ALL" >> /etc/sudoers COPY docker/entrypoint.sh /sbin/entrypoint.sh ENTRYPOINT ["/sbin/entrypoint.sh"] # Install baremetal toolchains and Qbs runtime dependencies. RUN sudo add-apt-repository ppa:ubuntuhandbook1/ppa -y && \ apt-get update -qq && \ apt-get install -qq -y \ build-essential \ libqt4-dev \ qt4-dev-tools qbs-src-2.3.1/docker/jammy/Dockerfile0000644000175100001770000000724714616416776017046 0ustar runnerdocker# # Install Qt and Qbs for Linux # FROM ubuntu:jammy LABEL Description="Ubuntu development environment for Qbs with Qt and various dependencies for testing Qbs modules and functionality" ARG QT_VERSION ARG QTCREATOR_VERSION # Allow colored output on command line. ENV TERM=xterm-color # # Make it possible to change UID/GID in the entrypoint script. The docker # container usually runs as root user on Linux hosts. When the Docker container # mounts a folder on the host and creates files there, those files would be # owned by root instead of the current user. Thus we create a user here who's # UID will be changed in the entrypoint script to match the UID of the current # host user. # ARG USER_UID=1000 ARG USER_NAME=devel RUN apt-get update -qq && \ apt-get install -qq -y \ ca-certificates \ gosu \ sudo && \ groupadd -g ${USER_UID} ${USER_NAME} && \ useradd -s /bin/bash -u ${USER_UID} -g ${USER_NAME} -o -c "" -m ${USER_NAME} && \ usermod -a -G sudo ${USER_NAME} && \ echo "%devel ALL = (ALL) NOPASSWD: ALL" >> /etc/sudoers COPY docker/entrypoint.sh /sbin/entrypoint.sh ENTRYPOINT ["/sbin/entrypoint.sh"] # # Qbs build dependencies RUN apt-get update -qq && \ DEBIAN_FRONTEND="noninteractive" apt-get install -qq -y --no-install-recommends \ bison \ build-essential \ ca-certificates \ capnproto \ ccache \ clang-15 \ clang-tidy-15 \ cmake \ curl \ flex \ git \ help2man \ icoutils \ libcapnp-dev \ libdbus-1-3 \ libfreetype6 \ libfontconfig1 \ libgl1-mesa-dev \ libgl1-mesa-glx \ libnanopb-dev \ libprotobuf-dev \ libgrpc++-dev \ libxkbcommon-x11-0 \ locales \ nanopb \ ninja-build \ nsis \ pkg-config \ protobuf-compiler \ protobuf-compiler-grpc \ psmisc \ python3-pip \ python3-setuptools \ p7zip-full \ subversion \ unzip \ zip && \ update-alternatives --install /usr/bin/clang clang /usr/bin/clang-15 100 && \ update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-15 100 && \ update-alternatives --install /usr/bin/clang-check clang-check /usr/bin/clang-check-15 100 && \ update-alternatives --install /usr/bin/python python /usr/bin/python3 100 && \ pip install beautifulsoup4 lxml protobuf==3.19.1 pyyaml # Set the locale RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && \ locale-gen ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 ENV LLVM_INSTALL_DIR=/usr/lib/llvm-15 # # Install Qt and Qbs for Linux from qt.io # COPY scripts/install-qt.sh install-qt.sh RUN ./install-qt.sh --version ${QT_VERSION} qtbase qtdeclarative qttools qtx11extras qtscxml qt5compat icu && \ ./install-qt.sh --version ${QTCREATOR_VERSION} qtcreator && \ echo "export PATH=/opt/Qt/${QT_VERSION}/gcc_64/bin:/opt/Qt/Tools/QtCreator/bin:\${PATH}" > /etc/profile.d/qt.sh ENV PATH=/opt/Qt/${QT_VERSION}/gcc_64/bin:/opt/Qt/Tools/QtCreator/bin:${PATH} # Configure Qbs USER $USER_NAME RUN qbs-setup-toolchains /usr/bin/g++ gcc && \ qbs-setup-toolchains /usr/bin/clang clang && \ qbs-setup-qt /opt/Qt/${QT_VERSION}/gcc_64/bin/qmake qt-gcc_64 && \ qbs config profiles.qt-gcc_64.baseProfile gcc && \ qbs-setup-qt /opt/Qt/${QT_VERSION}/gcc_64/bin/qmake qt-clang_64 && \ qbs config profiles.qt-clang_64.baseProfile clang && \ qbs config defaultProfile qt-gcc_64 # Switch back to root user for the entrypoint script. USER root # Work-around for QTBUG-79020 RUN echo "export QT_NO_GLIB=1" >> /etc/profile.d/qt.sh qbs-src-2.3.1/docker/jammy/test-baremetal.Dockerfile0000644000175100001770000000303014616416776021740 0ustar runnerdocker# # Baremetal toolchains for testing Qbs # FROM ubuntu:jammy LABEL Description="Ubuntu baremetal test environment for Qbs" # Allow colored output on command line. ENV TERM=xterm-color # # Make it possible to change UID/GID in the entrypoint script. The docker # container usually runs as root user on Linux hosts. When the Docker container # mounts a folder on the host and creates files there, those files would be # owned by root instead of the current user. Thus we create a user here who's # UID will be changed in the entrypoint script to match the UID of the current # host user. # ARG USER_UID=1000 ARG USER_NAME=devel RUN apt-get update -qq && \ apt-get install -qq -y \ ca-certificates \ gosu \ sudo && \ groupadd -g ${USER_UID} ${USER_NAME} && \ useradd -s /bin/bash -u ${USER_UID} -g ${USER_NAME} -o -c "" -m ${USER_NAME} && \ usermod -a -G sudo ${USER_NAME} && \ echo "%devel ALL = (ALL) NOPASSWD: ALL" >> /etc/sudoers COPY docker/entrypoint.sh /sbin/entrypoint.sh ENTRYPOINT ["/sbin/entrypoint.sh"] # Install baremetal toolchains and Qbs runtime dependencies. RUN apt-get update -qq && \ apt-get install -qq -y \ libasan5 \ libglib2.0-0 \ libgssapi-krb5-2 \ libgl1-mesa-glx \ gcc-arm-none-eabi \ gcc-avr \ avr-libc \ gcc-msp430 \ sdcc \ binutils-xtensa-lx106 \ gcc-xtensa-lx106 \ gcc-riscv64-unknown-elf # Work-around for QTBUG-79020. RUN echo "export QT_NO_GLIB=1" >> /etc/profile.d/qt.sh qbs-src-2.3.1/docker/jammy/test-qt6-static.Dockerfile0000644000175100001770000001441714616416776022016 0ustar runnerdocker# # Testing Qbs with static qt6 # FROM ubuntu:jammy LABEL Description="Ubuntu static qt6 test environment for Qbs" ARG QT_VERSION ARG QTCREATOR_VERSION # Allow colored output on command line. ENV TERM=xterm-color # # Make it possible to change UID/GID in the entrypoint script. The docker # container usually runs as root user on Linux hosts. When the Docker container # mounts a folder on the host and creates files there, those files would be # owned by root instead of the current user. Thus we create a user here who's # UID will be changed in the entrypoint script to match the UID of the current # host user. # ARG USER_UID=1000 ARG USER_NAME=devel RUN apt-get update -qq && \ apt-get install -qq -y \ wget \ ca-certificates \ gosu \ software-properties-common \ sudo && \ groupadd -g ${USER_UID} ${USER_NAME} && \ useradd -s /bin/bash -u ${USER_UID} -g ${USER_NAME} -o -c "" -m ${USER_NAME} && \ usermod -a -G sudo ${USER_NAME} && \ echo "%devel ALL = (ALL) NOPASSWD: ALL" >> /etc/sudoers COPY docker/entrypoint.sh /sbin/entrypoint.sh ENTRYPOINT ["/sbin/entrypoint.sh"] RUN wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null RUN echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ jammy main' | tee /etc/apt/sources.list.d/kitware.list >/dev/null RUN cat /etc/apt/sources.list.d/kitware.list RUN apt-get update -qq && \ DEBIAN_FRONTEND="noninteractive" apt-get install -qq -y --no-install-recommends \ build-essential \ git \ perl \ clang-15 \ cmake \ python3 \ zlib1g-dev \ libzstd-dev \ libdbus-1-dev \ libglib2.0-dev \ libssl-dev \ libdrm-dev \ libegl-dev \ libwayland-dev \ libvulkan-dev \ libicu-dev \ libb2-dev \ libclang-15-dev \ libsystemd-dev \ libfontconfig1-dev \ libfreetype6-dev \ libx11-dev \ libx11-xcb-dev \ libxext-dev \ libxfixes-dev \ libxi-dev \ libxrender-dev \ libxcb1-dev \ libxcb-glx0-dev \ libxcb-keysyms1-dev \ libxcb-image0-dev \ libxcb-shm0-dev \ libxcb-icccm4-dev \ libxcb-sync0-dev \ libxcb-xfixes0-dev \ libxcb-shape0-dev \ libxcb-randr0-dev \ libxcb-render-util0-dev \ libxcb-xinerama0-dev \ libxkbcommon-dev \ libxkbcommon-x11-dev \ libxcb-xinput-dev \ ninja-build \ libudev-dev \ libxcb-cursor-dev \ libxcb-composite0-dev \ libxcb-dri2-0-dev \ libxcb-dri3-dev \ libxcb-ewmh-dev \ libxcb-present-dev \ libxcb-present-dev \ libxcb-record0-dev \ libxcb-res0-dev \ libxcb-screensaver0-dev \ libxcb-sync-dev \ libxcb-util-dev \ libxcb-xf86dri0-dev \ libxcb-xtest0-dev \ libxcb-xv0-dev \ libxcb-xvmc0-dev \ libxcb-damage0-dev \ libxcb-dpms0-dev \ libgstreamer1.0-dev \ llvm-15-dev \ apt-transport-https ENV QT_HOME="/home/${USER_NAME}/qt" USER ${USER_NAME} RUN mkdir ${QT_HOME} RUN cd ${QT_HOME} && git clone https://code.qt.io/qt/qt5.git RUN cd ${QT_HOME}/qt5 && git checkout v${QT_VERSION} && perl init-repository RUN mkdir ${QT_HOME}/static-build && cd ${QT_HOME}/static-build && ../qt5/configure -prefix /opt/Qt/${QT_VERSION}/gcc_64 RUN cd ${QT_HOME}/static-build && cmake --build . --parallel USER root RUN cd ${QT_HOME}/static-build && cmake --install . FROM ubuntu:jammy LABEL Description="Ubuntu static qt6 test environment for Qbs" ARG QT_VERSION ARG QTCREATOR_VERSION RUN mkdir -p /opt/Qt COPY --from=0 /opt/Qt/${QT_VERSION} /opt/Qt/${QT_VERSION} # Allow colored output on command line. ENV TERM=xterm-color ARG USER_UID=1000 ARG USER_NAME=devel RUN apt-get update -qq && \ apt-get install -qq -y \ ca-certificates \ gosu \ software-properties-common \ sudo && \ groupadd -g ${USER_UID} ${USER_NAME} && \ useradd -s /bin/bash -u ${USER_UID} -g ${USER_NAME} -o -c "" -m ${USER_NAME} && \ usermod -a -G sudo ${USER_NAME} && \ echo "%devel ALL = (ALL) NOPASSWD: ALL" >> /etc/sudoers COPY docker/focal/entrypoint.sh /sbin/entrypoint.sh ENTRYPOINT ["/sbin/entrypoint.sh"] # Qbs build dependencies RUN apt-get update -qq && \ DEBIAN_FRONTEND="noninteractive" apt-get install -qq -y --no-install-recommends \ bison \ build-essential \ ca-certificates \ capnproto \ ccache \ clang-15 \ clang-tidy-15 \ cmake \ curl \ flex \ git \ help2man \ icoutils \ libcapnp-dev \ libdbus-1-3 \ libfreetype6 \ libfontconfig1 \ libgl1-mesa-dev \ libgl1-mesa-glx \ libnanopb-dev \ libprotobuf-dev \ libgrpc++-dev \ libxkbcommon-x11-0 \ nanopb \ ninja-build \ nsis \ pkg-config \ protobuf-compiler \ protobuf-compiler-grpc \ psmisc \ python3-pip \ python3-setuptools \ p7zip-full \ subversion \ unzip \ zip \ libb2-1 \ libpcre++ && \ update-alternatives --install /usr/bin/clang clang /usr/bin/clang-15 100 && \ update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-15 100 && \ update-alternatives --install /usr/bin/clang-check clang-check /usr/bin/clang-check-15 100 && \ update-alternatives --install /usr/bin/python python /usr/bin/python3 100 && \ pip install beautifulsoup4 lxml protobuf pyyaml ENV LLVM_INSTALL_DIR=/usr/lib/llvm-15 # # Install Qbs for Linux from qt.io # COPY scripts/install-qt.sh install-qt.sh RUN ./install-qt.sh --version ${QTCREATOR_VERSION} qtcreator && \ echo "export PATH=/opt/Qt/${QT_VERSION}/gcc_64/bin:/opt/Qt/Tools/QtCreator/bin:\${PATH}" > /etc/profile.d/qt.sh ENV PATH=/opt/Qt/${QT_VERSION}/gcc_64/bin:/opt/Qt/Tools/QtCreator/bin:${PATH} # Configure Qbs USER $USER_NAME RUN qbs-setup-toolchains /usr/bin/g++ gcc && \ qbs-setup-qt /opt/Qt/${QT_VERSION}/gcc_64/bin/qmake qt-gcc_64 && \ qbs config profiles.qt-gcc_64.baseProfile gcc && \ qbs config defaultProfile qt-gcc_64 # Switch back to root user for the entrypoint script. USER root # Work-around for QTBUG-79020 RUN echo "export QT_NO_GLIB=1" >> /etc/profile.d/qt.sh qbs-src-2.3.1/docker/leap/0000755000175100001770000000000014616416776014646 5ustar runnerdockerqbs-src-2.3.1/docker/leap/Dockerfile0000644000175100001770000000557614616416776016655 0ustar runnerdocker# # Install Qt and Qbs for Linux # FROM opensuse/leap:15.3 LABEL Description="OpenSUSE development environment for Qbs with Qt and various dependencies for testing Qbs modules and functionality" ARG QT_VERSION ARG QTCREATOR_VERSION # Allow colored output on command line. ENV TERM=xterm-color # # Make it possible to change UID/GID in the entrypoint script. The docker # container usually runs as root user on Linux hosts. When the Docker container # mounts a folder on the host and creates files there, those files would be # owned by root instead of the current user. Thus we create a user here who's # UID will be changed in the entrypoint script to match the UID of the current # host user. # ARG USER_UID=1000 ARG USER_NAME=devel RUN zypper in -y \ ca-certificates \ sudo \ system-user-mail \ system-group-wheel && \ groupadd -g ${USER_UID} ${USER_NAME} && \ useradd -s /bin/bash -u ${USER_UID} -g ${USER_NAME} -o -c "" -m ${USER_NAME} && \ usermod -a -G wheel ${USER_NAME} && \ echo "%devel ALL = (ALL) NOPASSWD: ALL" >> /etc/sudoers COPY docker/leap/entrypoint.sh /sbin/entrypoint.sh ENTRYPOINT ["/sbin/entrypoint.sh"] # # Qbs build dependencies RUN zypper install -y \ bison \ capnproto \ ccache \ cmake \ command-not-found \ curl \ gcc10 \ gcc10-c++ \ glibc-devel-static \ flex \ fontconfig \ git \ gzip \ help2man \ icoutils \ libcapnp-devel \ libgthread-2_0-0 \ libfreetype6 \ Mesa-libGL-devel \ Mesa-libGL1 \ nanopb-devel \ ninja \ perl \ pkg-config \ psmisc \ python3-pip \ p7zip-full \ subversion \ tar \ unzip \ which \ zip && \ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 && \ update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 100 && \ pip install --upgrade pip && \ pip install beautifulsoup4 lxml # # Install Qt and Qbs for Linux from qt.io # COPY scripts/install-qt.sh install-qt.sh RUN ./install-qt.sh --version ${QT_VERSION} qtbase qtdeclarative qttools qtx11extras qtscxml qt5compat icu && \ ./install-qt.sh --version ${QTCREATOR_VERSION} qtcreator && \ echo "export PATH=/opt/Qt/${QT_VERSION}/gcc_64/bin:/opt/Qt/Tools/QtCreator/bin:\${PATH}" > /etc/profile.d/qt.sh ENV PATH=/opt/Qt/${QT_VERSION}/gcc_64/bin:/opt/Qt/Tools/QtCreator/bin:${PATH} # Configure Qbs USER $USER_NAME RUN qbs-setup-toolchains /usr/bin/g++ gcc && \ qbs-setup-qt /opt/Qt/${QT_VERSION}/gcc_64/bin/qmake qt-gcc_64 && \ qbs config profiles.qt-gcc_64.baseProfile gcc && \ qbs config defaultProfile qt-gcc_64 # Switch back to root user for the entrypoint script. USER root # Work-around for QTBUG-79020 RUN echo "export QT_NO_GLIB=1" >> /etc/profile.d/qt.sh qbs-src-2.3.1/docker/leap/entrypoint.sh0000755000175100001770000000720414616416776017423 0ustar runnerdocker#!/usr/bin/env bash set -e ############################################################################# ## ## Copyright (C) 2019 Richard Weickelt ## Contact: https://www.qt.io/licensing/ ## ## This file is part of Qbs. ## ## $QT_BEGIN_LICENSE:LGPL$ ## Commercial License Usage ## Licensees holding valid commercial Qt licenses may use this file in ## accordance with the commercial license agreement provided with the ## Software or, alternatively, in accordance with the terms contained in ## a written agreement between you and The Qt Company. For licensing terms ## and conditions see https://www.qt.io/terms-conditions. For further ## information use the contact form at https://www.qt.io/contact-us. ## ## GNU Lesser General Public License Usage ## Alternatively, this file may be used under the terms of the GNU Lesser ## General Public License version 3 as published by the Free Software ## Foundation and appearing in the file LICENSE.LGPL3 included in the ## packaging of this file. Please review the following information to ## ensure the GNU Lesser General Public License version 3 requirements ## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ## ## GNU General Public License Usage ## Alternatively, this file may be used under the terms of the GNU ## General Public License version 2.0 or (at your option) the GNU General ## Public license version 3 or any later version approved by the KDE Free ## Qt Foundation. The licenses are as published by the Free Software ## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ## included in the packaging of this file. Please review the following ## information to ensure the GNU General Public License requirements will ## be met: https://www.gnu.org/licenses/gpl-2.0.html and ## https://www.gnu.org/licenses/gpl-3.0.html. ## ## $QT_END_LICENSE$ ## ############################################################################# # # Entrypoint script when starting the container. The script checks the current # working directory and changes the uid/gid of developer/users to match whatever # is found in the working directory. This is useful to match the user and group # of mounted volumes into the container # # If not root, re-run script as root to fix ids # if [ "$(id -u)" != "0" ]; then exec sudo -i /sbin/entrypoint.sh "$@" fi # # Try to determine the uid of the working directory and adjust the current # user's uid/gid accordingly. # USER_GID=${USER_GID:-$(stat -c "%g" .)} USER_UID=${USER_UID:-$(stat -c "%u" .)} USER_NAME=${USER_NAME:-devel} USER_GROUP=${USER_GROUP:-devel} EXEC="" export HOME=/home/${USER_NAME} # # This is a problem on Linux hosts when we mount a folder from the # user file system and write artifacts into that. Thus, we downgrade # the current user and make sure that the uid and gid matches the one # of the mounted project folder. # # This work-around is not needed on Windows hosts as Windows doesn't # have such a concept. # if [ "${USER_UID}" != "0" ]; then if [ "$(id -u ${USER_NAME})" != "${USER_UID}" ]; then usermod -o -u ${USER_UID} ${USER_NAME} # After changing the user's uid, all files in user's home directory # automatically get the new uid. fi current_gid=$(id -g ${USER_NAME}) if [ "$(id -g ${USER_NAME})" != "${USER_GID}" ]; then groupmod -o -g ${USER_GID} ${USER_GROUP} # Set the new gid on all files in the home directory that still have the # old gid. find /home/${USER_NAME} -gid "${current_gid}" ! -type l -exec chgrp ${USER_GID} {} \; fi fi EXEC="exec sudo -u ${USER_NAME} -g ${USER_GROUP}" if [ -z "$1" ]; then ${EXEC} bash -l else ${EXEC} bash -l -c "$*" fi qbs-src-2.3.1/docker/windowsservercore/0000755000175100001770000000000014616416776017517 5ustar runnerdockerqbs-src-2.3.1/docker/windowsservercore/Dockerfile0000644000175100001770000000503114616416776021510 0ustar runnerdocker FROM mcr.microsoft.com/windows/servercore:1809 LABEL Description="Windows Server Core development environment for Qbs with Qt, Chocolatey and various dependencies for testing Qbs modules and functionality" # Disable crash dialog for release-mode runtimes RUN reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting" /v Disabled /t REG_DWORD /d 1 /f RUN reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting" /v DontShowUI /t REG_DWORD /d 1 /f # Install VS 2019 from the website since chocolatey has broken .NET 4.8 (dotnetfx package) which is a # dependency for the visualstudio2019buildtools package RUN powershell -NoProfile -ExecutionPolicy Bypass -Command \ Invoke-WebRequest "https://aka.ms/vs/16/release/vs_community.exe" \ -OutFile "%TEMP%\vs_community.exe" -UseBasicParsing RUN "%TEMP%\vs_community.exe" --quiet --wait --norestart --noUpdateInstaller \ --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 \ --add Microsoft.VisualStudio.Component.Windows10SDK.20348 RUN powershell -NoProfile -ExecutionPolicy Bypass -Command \ $Env:chocolateyVersion = '0.10.15' ; \ $Env:chocolateyUseWindowsCompression = 'false' ; \ "[Net.ServicePointManager]::SecurityProtocol = \"tls12, tls11, tls\"; iex ((New-Object System.Net.WebClient).DownloadString('http://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin" RUN choco install -y python --version 3.9 && \ choco install -y 7zip --version 19.0 && \ choco install -y git --version 2.24.0 --params "/GitAndUnixToolsOnPath" && \ choco install -y vswhere # for building the documentation RUN pip install beautifulsoup4 lxml # clcache for speeding up MSVC builds ENV CLCACHE_DIR="C:/.ccache" RUN certutil -generateSSTFromWU roots.sst && \ certutil -addstore -f root roots.sst && \ del roots.sst && \ pip install --trusted-host=pypi.org \ git+https://github.com/frerich/clcache.git@cae73d8255d78db8ba11e23c51fd2c9a89e7475b ########### Install Qt ############# ARG QT_VERSION COPY scripts/install-qt.sh install-qt.sh RUN bash -c "./install-qt.sh -d /c/Qt --version ${QT_VERSION} --toolchain win64_msvc2019_64 qtbase qtdeclarative qttools qt5compat" ENV QTDIR64=C:\\Qt\\${QT_VERSION}\\msvc2019_64 ########### Install Qbs ############# ARG QTCREATOR_VERSION RUN bash -c "./install-qt.sh -d /c/Qt --version ${QTCREATOR_VERSION} qtcreator" RUN setx PATH "C:\\Qt\\Tools\\QtCreator\\bin;%PATH%" RUN qbs setup-toolchains --detect && \ qbs setup-qt %QTDIR64%/bin/qmake.exe qt64 && \ qbs config defaultProfile qt64 qbs-src-2.3.1/docker/docker.qbs0000644000175100001770000000042114616416776015700 0ustar runnerdocker // This is a convenience product to be able to use Qt Creator for editing the docker files. // For building and managing the images, use docker-compose as explained in // https://doc.qt.io/qbs/building-qbs.html#using-docker. Product { name: "docker" files: "**" } qbs-src-2.3.1/docker/entrypoint.sh0000755000175100001770000000720014616416776016476 0ustar runnerdocker#!/usr/bin/env bash set -e ############################################################################# ## ## Copyright (C) 2019 Richard Weickelt ## Contact: https://www.qt.io/licensing/ ## ## This file is part of Qbs. ## ## $QT_BEGIN_LICENSE:LGPL$ ## Commercial License Usage ## Licensees holding valid commercial Qt licenses may use this file in ## accordance with the commercial license agreement provided with the ## Software or, alternatively, in accordance with the terms contained in ## a written agreement between you and The Qt Company. For licensing terms ## and conditions see https://www.qt.io/terms-conditions. For further ## information use the contact form at https://www.qt.io/contact-us. ## ## GNU Lesser General Public License Usage ## Alternatively, this file may be used under the terms of the GNU Lesser ## General Public License version 3 as published by the Free Software ## Foundation and appearing in the file LICENSE.LGPL3 included in the ## packaging of this file. Please review the following information to ## ensure the GNU Lesser General Public License version 3 requirements ## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ## ## GNU General Public License Usage ## Alternatively, this file may be used under the terms of the GNU ## General Public License version 2.0 or (at your option) the GNU General ## Public license version 3 or any later version approved by the KDE Free ## Qt Foundation. The licenses are as published by the Free Software ## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ## included in the packaging of this file. Please review the following ## information to ensure the GNU General Public License requirements will ## be met: https://www.gnu.org/licenses/gpl-2.0.html and ## https://www.gnu.org/licenses/gpl-3.0.html. ## ## $QT_END_LICENSE$ ## ############################################################################# # # Entrypoint script when starting the container. The script checks the current # working directory and changes the uid/gid of developer/users to match whatever # is found in the working directory. This is useful to match the user and group # of mounted volumes into the container # # If not root, re-run script as root to fix ids # if [ "$(id -u)" != "0" ]; then exec gosu root /sbin/entrypoint.sh "$@" fi # # Try to determine the uid of the working directory and adjust the current # user's uid/gid accordingly. # USER_GID=${USER_GID:-$(stat -c "%g" .)} USER_UID=${USER_UID:-$(stat -c "%u" .)} USER_NAME=${USER_NAME:-devel} USER_GROUP=${USER_GROUP:-devel} EXEC="" export HOME=/home/${USER_NAME} # # This is a problem on Linux hosts when we mount a folder from the # user file system and write artifacts into that. Thus, we downgrade # the current user and make sure that the uid and gid matches the one # of the mounted project folder. # # This work-around is not needed on Windows hosts as Windows doesn't # have such a concept. # if [ "${USER_UID}" != "0" ]; then if [ "$(id -u ${USER_NAME})" != "${USER_UID}" ]; then usermod -o -u ${USER_UID} ${USER_NAME} # After changing the user's uid, all files in user's home directory # automatically get the new uid. fi current_gid=$(id -g ${USER_NAME}) if [ "$(id -g ${USER_NAME})" != "${USER_GID}" ]; then groupmod -o -g ${USER_GID} ${USER_GROUP} # Set the new gid on all files in the home directory that still have the # old gid. find /home/${USER_NAME} -gid "${current_gid}" ! -type l -exec chgrp ${USER_GID} {} \; fi fi EXEC="exec gosu ${USER_NAME}:${USER_GROUP}" if [ -z "$1" ]; then ${EXEC} bash -l else ${EXEC} bash -l -c "$*" fi qbs-src-2.3.1/doc/0000755000175100001770000000000014616416776013223 5ustar runnerdockerqbs-src-2.3.1/doc/classic.css0000644000175100001770000001032014616416776015352 0ustar runnerdockerBODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { font-family: Arial, Geneva, Helvetica, sans-serif; } H1 { text-align: center; font-size: 160%; } H2 { font-size: 120%; } H3 { font-size: 100%; } h3.fn,span.fn { background-color: #eee; border-width: 1px; border-style: solid; border-color: #ddd; font-weight: bold; padding: 6px 0px 6px 10px; margin: 42px 0px 0px 0px; } hr { border: 0; color: #a0a0a0; background-color: #ccc; height: 1px; width: 100%; text-align: left; margin: 34px 0px 34px 0px; } table.valuelist { border-width: 1px 1px 1px 1px; border-style: solid; border-color: #dddddd; border-collapse: collapse; background-color: #f0f0f0; } table.indextable { border-width: 1px 1px 1px 1px; border-collapse: collapse; background-color: #f0f0f0; border-color:#555; font-size: 110%; } table td.largeindex { border-width: 1px 1px 1px 1px; border-collapse: collapse; background-color: #f0f0f0; border-color:#555; font-size: 120%; } table.valuelist th { border-width: 1px 1px 1px 2px; padding: 4px; border-style: solid; border-color: #666; color:white; background-color:#666; } th.titleheader { border-width: 1px 0px 1px 0px; padding: 4px; border-style: solid; border-color: #444; color:white; background-color:#555555; font-size: 110%; } th.largeheader { border-width: 1px 0px 1px 0px; padding: 4px; border-style: solid; border-color: #444; color:white; background-color:#555555; font-size: 120%; } p { margin-left: 4px; margin-top: 8px; margin-bottom: 8px; } a:link { color: #0046ad; text-decoration: none } a:visited { color: #672967; text-decoration: none } a.obsolete { color: #661100; text-decoration: none } a.compat { color: #661100; text-decoration: none } a.obsolete:visited { color: #995500; text-decoration: none } a.compat:visited { color: #995500; text-decoration: none } body { background: #ffffff; color: black } table.generic, table.annotated { border-width: 1px; border-color:#bbb; border-style:solid; border-collapse:collapse; } table td.memItemLeft { width: 180px; padding: 2px 0px 0px 8px; margin: 4px; border-width: 1px; border-color: #E0E0E0; border-style: none; font-size: 100%; white-space: nowrap } table td.memItemRight { padding: 2px 8px 0px 8px; margin: 4px; border-width: 1px; border-color: #E0E0E0; border-style: none; font-size: 100%; } table tr.odd { background: #f0f0f0; color: black; } table tr.even { background: #e4e4e4; color: black; } table.annotated th { padding: 3px; text-align: left } table.annotated td { padding: 3px; } table tr pre { padding-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; border: none; background: none } tr.qt-style { background: #96E066; color: black } body pre { padding: 0.2em; border: #e7e7e7 1px solid; background: #f1f1f1; color: black } table tr.qt-code pre { padding: 0.2em; border: #e7e7e7 1px solid; background: #f1f1f1; color: black } span.preprocessor, span.preprocessor a { color: darkblue; } span.comment { color: darkred; font-style: italic } span.string,span.char { color: darkgreen; } .title { text-align: center } .subtitle { font-size: 0.8em } .small-subtitle { font-size: 0.65em } .qmlitem { padding: 0; } .qmlname { white-space: nowrap; font-weight: bold; font-size: 125%; } .qmltype { font-weight: bold; font-size: 125%; } .qmlproto, .qmldoc { // border-top: 1px solid #84b0c7; } .qmlproto { padding: 0; //background-color: #e4e4e4;//#d5e1e8; //font-weight: bold; //-webkit-border-top-left-radius: 8px; //-webkit-border-top-right-radius: 8px; //-moz-border-radius-topleft: 8px; //-moz-border-radius-topright: 8px; } .qmldoc { border-top: 1px solid #e4e4e4; //padding: 2px 5px; //background-color: #eef3f5; //border-top-width: 0; //-webkit-border-bottom-left-radius: 8px; //-webkit-border-bottom-right-radius: 8px; //-moz-border-radius-bottomleft: 8px; //-moz-border-radius-bottomright: 8px; } .qmldoc p, .qmldoc dl, .qmldoc ul { //margin: 6px 0; } *.qmlitem p { //margin-top: 0px; //margin-bottom: 0px; } qbs-src-2.3.1/doc/fix-qmlimports.py0000755000175100001770000001322014616416776016571 0ustar runnerdocker#!/usr/bin/env python3 ############################################################################# ## ## Copyright (C) 2017 The Qt Company Ltd. ## Contact: https://www.qt.io/licensing/ ## ## This file is part of Qbs. ## ## $QT_BEGIN_LICENSE:LGPL$ ## Commercial License Usage ## Licensees holding valid commercial Qt licenses may use this file in ## accordance with the commercial license agreement provided with the ## Software or, alternatively, in accordance with the terms contained in ## a written agreement between you and The Qt Company. For licensing terms ## and conditions see https://www.qt.io/terms-conditions. For further ## information use the contact form at https://www.qt.io/contact-us. ## ## GNU Lesser General Public License Usage ## Alternatively, this file may be used under the terms of the GNU Lesser ## General Public License version 3 as published by the Free Software ## Foundation and appearing in the file LICENSE.LGPL3 included in the ## packaging of this file. Please review the following information to ## ensure the GNU Lesser General Public License version 3 requirements ## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ## ## GNU General Public License Usage ## Alternatively, this file may be used under the terms of the GNU ## General Public License version 2.0 or (at your option) the GNU General ## Public license version 3 or any later version approved by the KDE Free ## Qt Foundation. The licenses are as published by the Free Software ## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ## included in the packaging of this file. Please review the following ## information to ensure the GNU General Public License requirements will ## be met: https://www.gnu.org/licenses/gpl-2.0.html and ## https://www.gnu.org/licenses/gpl-3.0.html. ## ## $QT_END_LICENSE$ ## ############################################################################# from __future__ import print_function import os import glob import errno import sys import argparse import shutil import urllib from subprocess import Popen, PIPE import re from collections import Counter import platform useShell = (platform.system() == 'Windows') gotSoup = True try: from bs4 import BeautifulSoup except ImportError: print('Warning: Failed to import BeautifulSoup. Some functionality is disabled.', file=sys.stderr) gotSoup = False qmlTypeString = ' QML Type' # Modifies a QML Type reference page to look like a generic # JavaScript reference - Removes the 'QML Type' strings from # the titles as well as the import statement information. # This is used in the Installer Framework docs, which contain # JS reference documentation generated using commands specific # to documenting QML code. # # Parameters: a Beautiful Soup object constructed with an opened # html file to process. # # Returns True if the element tree was modified, False otherwise def modifyQMLReference(soup): pageTitle = soup.head.title.string soup.head.title.string = pageTitle.replace(qmlTypeString, '') for t in soup.find_all('h1', class_='title'): t.string = t.string.replace(qmlTypeString, '') for table in soup.find_all('table'): td = table.find('td') if td and td.string: if 'Import Statement:' in td.string: td.parent.extract() return True return False if __name__ == '__main__': parser = argparse.ArgumentParser( description = """Removes bogus import statements from the offline docs""") parser.add_argument('outputdir', help = 'output directory of the generated html files') args = parser.parse_args() if not gotSoup: print('Error: This script requires the Beautiful Soup library.', file=sys.stderr) sys.exit(1) if not os.path.isdir(args.outputdir): print('Error: No such directory:', args.outputdir, file=sys.stderr) sys.exit(1) # compile a list of all html files in the outputdir htmlFiles = [] for f in os.listdir(args.outputdir): fullPath = os.path.join(args.outputdir, f) if os.path.isdir(fullPath): continue if os.path.splitext(f)[1] == '.html': htmlFiles.append(fullPath) sys.stdout.flush() modified = {} pre_blocks = {} fileCount = 0 progStep = max(16, len(htmlFiles)) / 16 for html in htmlFiles: fileCount += 1 if not (fileCount % progStep): print('.', end='') sys.stdout.flush() with open(html, 'r+', encoding='utf8') as file_: try: soup = BeautifulSoup(file_, 'lxml') actions = [] val = 0 if modifyQMLReference(soup): actions.append('Removed QML type info') for a in actions: modified[a] = modified.get(a, 0) + 1 if actions: file_.seek(0) file_.write(str(soup)) file_.truncate() file_.close() except (AttributeError, KeyError): print('\nFailed to parse', html, ':', sys.exc_info()[0], file=sys.stderr) except IOError as e: print('\nError:', e, file=sys.stderr) except ValueError as e: print('\nError:', e, file=sys.stderr) if 'lxml' in str(e): print('(If using pip, try \"pip install lxml\")', file=sys.stderr) quit(1) for k, v in modified.items(): print ('\n\t', k, 'in %d files' % v, end='') pb = pre_blocks.get(k, 0) if pb: print (' (', pb, '
 blocks)', sep='', end='')
    print('\n')
qbs-src-2.3.1/doc/appendix/0000755000175100001770000000000014616416776015033 5ustar  runnerdockerqbs-src-2.3.1/doc/appendix/qbs-porting.qdoc0000644000175100001770000003454514616416776020163 0ustar  runnerdocker/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qbs.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \previouspage building-qbs.html
    \page porting-to-qbs.html
    \nextpage json-api.html

    \title Appendix B: Migrating from Other Build Systems

    You can use the \l{create-project}{qbs create-project} command to
    automatically generate \QBS project files from an arbitrary directory
    structure. This is a useful starting point when migrating from other
    build tools, such as qmake or CMake.

    To use the tool, switch to the project directory and run the
    \c {qbs create-project} command, which is located in the \c bin directory of
    the \QBS installation directory (or the Qt Creator installation directory).

    After generating the initial .qbs file, add the missing configuration
    variables and functions to it, as described in the following sections.

    \section1 Migrating from qmake

    The following sections describe the \QBS equivalents of qmake variable
    values.

    \section2 CONFIG

    Specify project configuration and compiler options.

    \section3 console

    Set the \l{Product::consoleApplication}{Product.consoleApplication} property
    to \c true for the \l{Application}, \l{CppApplication},or \l{QtApplication}
    item. For example:

    \code
    Application {
        name: "helloworld"
        files: "main.cpp"
        Depends { name: "cpp" }
        consoleApplication: true
    }
    \endcode

    \section3 ordered

    This qmake variable has no direct equivalent in \QBS. Instead, the build
    order is determined by implicit and explicit dependencies between products.
    To add an explicit dependency, add a \l{Depends} item to a
    \l{Product}{product}:

    \code
    CppApplication {
        name: "myapp"
        Depends { name: "mylib" }
    }
    \endcode

    The \c myapp product depends on and links to the \c mylib product, and is
    therefore built after it.

    \section3 qt

    In qmake, the Qt dependency is implicit, whereas in \QBS it is not.
    If \c {CONFIG -= qt}, add a \l{Depends} item to specify that
    the \l{Product}{product} depends on the \l{cpp} module:

    \code
    Product {
        Depends { name: "cpp" }
    }
    \endcode

    \section2 DEFINES

    Set the \l{cpp::defines}{cpp.defines} property for the \l{Product}{product}.

    \note To reference \c cpp.defines, you must specify a dependency on the
    \l{cpp} module.

    \code
    Product {
        Depends { name: "cpp" }
        cpp.defines: ["SUPPORT_MY_FEATURES"]
    }
    \endcode

    \section2 DESTDIR

    We recommend that you use the \l{Installing Files}{installation mechanism}
    to specify the location of the target file:

    \code
    Application {
        Group {
            name: "Runtime resources"
            files: "*.qml"
            qbs.install: true
            qbs.installDir: "share/myproject"
        }
        Group {
            name: "The App itself"
            fileTagsFilter: "application"
            qbs.install: true
            qbs.installDir: "bin"
        }
    }
    \endcode

    If that is not possible, you can use the \l{Product::}{destinationDirectory}
    property:

    \code
    DynamicLibrary {
        name: "mydll"
        destinationDirectory: "libDir"
    }
    \endcode

    \section2 HEADERS, SOURCES, FORMS, RESOURCES, OTHER_FILES

    Include header, source, form, and resource files as well as any
    other files as values of a \l{Product::files}{Product.files}
    or \l{Group::files}{Group.files}  property:

    \code
    QtApplication {
        name: "myapp"
        files: ["myapp.h", "myapp.cpp", "myapp.ui", "myapp.qrc", "readme.txt"]
    }
    \endcode

    \QBS uses \l{FileTagger}{file taggers} to figure out what kind of file
    it is dealing with.

    \section2 ICON

    There is no direct equivalent in \QBS. If you add a \l{Depends} {dependency}
    to the \l{ib} module and add the \c .xcassets directory as a value of the
    \l{Product::files}{Product.files} property, \QBS takes care of setting the
    application icon automatically when building for Apple platforms:

    \code
    Application {
        name: "myapp"
        files [".xcassets"]
        Depends { name: "ib" }
    }
    \endcode

    Alternatively, you can set the icon name as the value of the
    \l{bundle::infoPlist}{bundle.infoPlist} parameter, specify a dependency to
    the \l{ib} module, and add the application \c .icns file as a value of the
    \l{Product::}{files} property:

    \code
    Application {
        name: "myapp"
        files ["myapp.icns"]
        Depends { name: "ib" }
        bundle.infoPlist: ({"CFBundleIconFile": "myapp"})
    \endcode

    \section2 INCLUDEPATH

    Add the paths to the include files as values of the \l{cpp::includePaths}
    {cpp.includePaths} property:

    \code
    CppApplication {
        cpp.includePaths: ["..", "some/other/dir"]
    }
    \endcode

    \section2 LIBS

    For libraries that are part of the project, use \l{Depends} items.

    To pull in external libraries, use the \l{cpp::libraryPaths}
    {cpp.libraryPaths} property for the Unix \c -L (library path) flags and the
    \l{cpp::dynamicLibraries}{cpp.dynamicLibraries} and \l{cpp::staticLibraries}
    {cpp.staticLibraries} properties for the
    \c -l (library) flags.

    For example, \c {LIBS += -L/usr/local/lib -lm} would become:

    \code
    CppApplication {
        cpp.libraryPaths: ["/usr/local/lib"]
        cpp.dynamicLibraries: ["m"]
    }
    \endcode

    \section2 OUT_PWD

    Use the \l{Product::buildDirectory}{Product.buildDirectory} property
    to refer to the base output directory of the generated artifacts.

    \section2 PWD

    Corresponds to the the file-scope variable \c path.

    \section2 _PRO_FILE_

    Corresponds to the file-scope variable \c filePath when used in a
    \l{Project}{project} or \l{Product}{product}.

    \section2 _PRO_FILE_PWD_

    Corresponds to the \l{Project::sourceDirectory}{Project.sourceDirectory} or
    \l{Product::sourceDirectory}{Product.sourceDirectory} property.

    \section2 QMAKE_ASSET_CATALOGS

    Add a \l{Depends}{dependency} to the \l{ib} module and add the \c .xcassets
    directory as a value of the \l{Product::}{files} property:

    \code
    Application {
        name: "myapp"
        files [".xcassets"]
        Depends { name: "ib" }
    }
    \endcode

    \section2 QMAKE_BUNDLE_DATA

    For the time being, you can manually place files in the appropriate location
    using the \l{Installing Files}{installation mechanism}. Better solutions are
    under development.

    \section2 QMAKE_BUNDLE_EXTENSION

    Set the \l{bundle::extension}{bundle.extension} property.

    \note Unlike qmake, \QBS automatically prepends a period (.) to the property
    value.

    \section2 QMAKE_{C,CXX,OBJECTIVE}_CFLAGS{_DEBUG,_RELEASE}

    Use the \l{cpp::commonCompilerFlags}{cpp.commonCompilerFlags} property or
    the properties corresponding to each compiler flags variable:

    \table
        \header
            \li qmake Variable
            \li cpp Module Property
        \row
            \li \c QMAKE_CFLAGS_DEBUG

                \c QMAKE_CFLAGS_RELEASE
            \li \l{cpp::cFlags}{cpp.cFlags}
        \row
            \li \c QMAKE_CXXFLAGS_DEBUG

                \c QMAKE_CXXFLAGS_RELEASE
            \li \l{cpp::cxxFlags}{cpp.cxxFlags}
        \row
            \li \c QMAKE_OBJECTIVE_CFLAGS
            \li \l{cpp::objcFlags}{cpp.objcFlags}

                \l{cpp::objcxxFlags}{cpp.objcxxFlags}
    \endtable

    Use \l{Properties} items or simple conditionals as values of the
    \l{qbs::buildVariant}{qbs.buildVariant} property to simulate the \c _DEBUG
    and \c _RELEASE variants of the qmake variables.

    \section2 QMAKE_FRAMEWORK_BUNDLE_NAME

    Set the \l{bundle::bundleName}{bundle.bundleName} property (which is derived
    from \l{Product::targetName}{Product.targetName}) combined with
    \l{bundle::extension}{bundle.extension}.

    \section2 QMAKE_FRAMEWORK_VERSION

    Set the \l{bundle::frameworkVersion}{bundle.frameworkVersion} property.

    \section2 QMAKE_INFO_PLIST

    Include the \c info.plist file as a value of \l{Product::}{files} property
    and specify a dependency to the \l{bundle} module:

    \code
    Application {
        name: "myapp"
        files ["info.plist"]
        Depends { name: "bundle" }
    }
    \endcode

    \QBS will automatically add any necessary properties to your \c Info.plist
    file. Typically, it determines the appropriate values from the other
    properties in the project, and therefore you do not need to use the
    \c {Info.plist.in > Info.plist} configuration mechanism. Further, you almost
    never need to embed placeholders into the source \c Info.plist file. Set the
    \l{bundle::processInfoPlist}{bundle.processInfoPlist} property to \c false
    to disable this behavior:

    \code
    \\ ...
        bundle.processInfoPlist: false
    \endcode

    In addition to, or instead of, using an actual \c Info.plist file, you can
    add \c Info.plist properties using the \l{bundle::infoPlist}
    {bundle.infoPlist} property. For example:

    \code
    \\ ...
        bundle.infoPlist: ({
            "NSHumanReadableCopyright": "Copyright (c) 2017 Bob Inc",
            "Some other key", "Some other value, & XML special characters are no problem! >;) éžå‡¡!"
        })
    \endcode

    \section2 QMAKE_LFLAGS

    Set the \l{cpp::linkerFlags}{cpp.linkerFlags} property for the \l{Product}
    {product}.

    \section2 QMAKE_{MACOSX,IOS,TVOS,WATCHOS}_DEPLOYMENT_TARGET

    For each qmake deployment target variable, use the corresponding property of
    the \l{cpp} module:

    \table
        \header
            \li qmake Variable
            \li cpp Module Property
        \row
            \li \c QMAKE_MACOSX_DEPLOYMENT_TARGET
            \li \l{cpp::minimumMacosVersion}{cpp.minimumMacosVersion}
        \row
            \li \c QMAKE_IOS_DEPLOYMENT_TARGET
            \li \l{cpp::minimumIosVersion}{cpp.minimumIosVersion}
        \row
            \li \c QMAKE_TVOS_DEPLOYMENT_TARGET
            \li \l{cpp::minimumTvosVersion}{cpp.minimumTvosVersion}
        \row
            \li \c QMAKE_WATCHOS_DEPLOYMENT_TARGET
            \li \l{cpp::minimumWatchosVersion}{cpp.minimumWatchosVersion}
    \endtable

    \section2 QMAKE_RPATHDIR

    Set the \l{cpp::rpaths}{cpp.rpaths} property for the \l{Product}{product}.

    \section2 QMAKE_SONAME_PREFIX

    Use the \l{cpp::sonamePrefix}{cpp.sonamePrefix} property for the \l{Product}
    {product}.

    \section2 QML_IMPORT_PATH

    Used only for Qt Creator QML syntax highlighting. Inside a \l{Product},
    \l{Application}, \l{CppApplication}, or \l{QtApplication}, create a
    \c qmlImportPaths property:

    \code
    Product {
        name: "myProduct"
        property stringList qmlImportPaths: [sourceDirectory + "/path/to/qml/"]
    }
    \endcode

    \section2 QT

    Add a \l{Depends} item to the \l{Product}{product} that specifies the
    dependencies to \l{Qt} modules. For example:

    \code
    QtApplication {
        Depends { name: "Qt.widgets" }
    }
    \endcode

    You could also use the following form that is equivalent to the previous
    one:

    \code
    QtApplication {
        Depends { name: "Qt"; submodules: "widgets" }
    }
    \endcode

    \section2 QTPLUGIN

    Building static applications often requires linking to static QPA plugins,
    such as \c qminimal. You can use the following syntax to enable \QBS to
    link to the required plugins:

    \code
    QtApplication {
        name: "myapp"
        Depends { name: "Qt"; submodules: ["core", "gui", "widgets"] }
        Depends { name: "Qt.qminimal"; condition: Qt.core.staticBuild }
    }
    \endcode

    \section2 RC_FILE

    Add Windows resource files to the value of the \l{Product::files}
    {Product.files} property.

    \section2 TARGET

    Use the \l{Product::targetName}{Product.targetName} property to specify the
    base file name of target artifacts.

    \section2 TEMPLATE

    \section3 app

    Use \l{Application} or \l{CppApplication} as the \l{Product}{product}:

    \code
    CppApplication {
        name: "helloworld"
        files: "main.cpp"
    }
    \endcode

    This is roughly equivalent to:

    \code
    Product {
        name: "helloworld"
        type: "application"
        files: "main.cpp"
        Depends { name: "cpp" }
    }
    \endcode

    \section3 lib

    Use either \l{DynamicLibrary} or \l{StaticLibrary} as the \l{Product}
    {product}, depending on whether the value of \c CONFIG in the .pro file is
    \c shared or \c static. For example, if the value is \c shared:

    \code
    DynamicLibrary {
        name: "mydll"
        files: ["mySourceFile.cpp"]
        Depends { name: "cpp" }
    }
    \endcode

    \section3 subdirs

    In a \l{Project} item, specify subdirectories as values of the
    \l{Project::}{references} property:

    \code
    Project {
        references: [
            "app/app.qbs",
            "lib/lib.qbs"
        ]
    }
    \endcode

    \section2 message(), warning(), error(), log()

    You can use the \l{Console API} to print info, warning, error, and log messages to the console.

    \code
    Product {
        name: {
            console.info("--> now evaluating the product name");
            return "theName";
        }
        Depends { name: "cpp" }
        cpp.includePath: { throw "An error occurred." }
    }
    \endcode
*/
qbs-src-2.3.1/doc/appendix/json-api.qdoc0000644000175100001770000011074014616416776017426 0ustar  runnerdocker/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qbs.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \previouspage porting-to-qbs.html
    \nextpage attributions.html
    \page json-api.html

    \title Appendix C: The JSON API

    This API is the recommended way to provide \QBS support to an IDE.
    It is accessible via the \l{session} command.

    \section1 Packet Format

    All information is exchanged via \e packets, which have the following
    structure:
    \code
    packet = "qbsmsg:"  []  
    \endcode
    First comes a fixed string indentifying the start of a packet, followed
    by the size of the actual data in bytes. After that, further meta data
    might follow. There is none currently, but future extensions might add
    some. A line feed character marks the end of the meta data section
    and is followed immediately by the payload, which is a single JSON object
    encoded in Base64 format. We call this object a \e message.

    \section1 Messages

    The message data is UTF8-encoded.

    Most messages are either \e requests or \e replies. Requests are messages
    sent to \QBS via the session's standard input channel. Replies are messages
    sent by \QBS via the session's standard output channel. A reply always
    corresponds to one specific request. Every request (with the exception
    of the \l{quit-message}{quit request}) expects exactly one reply. A reply implies
    that the requested operation has finished. At the very least, it carries
    information about whether the operation succeeded, and often contains
    additional data specific to the respective request.

    Every message object has a \c type property, which is a string that uniquely
    identifies the message type.

    All requests block the session for other requests, including those of the
    same type. For instance, if client code wishes to restart building the
    project with different parameters, it first has to send a
    \l{cancel-message}{cancel} request, wait for the current build job's reply,
    and only then can it request another build. The only other message beside
    \l{cancel-message}{cancel} that can legally be sent while a request
    is currently being handled is the \l{quit-message}{quit} message.

    A reply object may carry an \c error property, indicating that the respective
    operation has failed. If this property is not present, the request was successful.
    The format of the \c error property is described \l{ErrorInfo}{here}.

    In the remainder of this page, we describe the structure of all messages
    that can be sent to and received from \QBS, respectively. The property
    tables may have a column titled \e Mandatory, whose values indicate whether
    the respective message property is always present. If this column is missing,
    all properties of the respective message are mandatory, unless otherwise
    noted.

    \section1 The \c hello Message

    This message is sent by \QBS exactly once, right after the session was started.
    It is the only message from \QBS that is not a response to a request.
    The value of the \c type property is \c "hello", the other properties are
    as follows:
    \table
    \header \li Property          \li Type
    \row    \li api-level         \li int
    \row    \li api-compat-level  \li int
    \row    \li lsp-socket        \li string
    \endtable

    The value of \c api-level is increased whenever the API is extended, for instance
    by adding new messages or properties.

    The value of \c api-compat-level is increased whenever incompatible changes
    are being done to this API. A tool written for API level \c n should refuse
    to work with a \QBS version with an API compatibility level greater than \c n,
    because it cannot guarantee proper behavior. This value will not change unless
    it is absolutely necessary.

    The value of \c api-compat-level is always less than or equal to the
    value of \c api-level.

    The value of \c lsp-socket is a path to a local domain socket (on Unix) or
    a named pipe (on Windows). It provides a server implementing the
    \l{https://microsoft.github.io/language-server-protocol}{Language Server Protocol}.

    \section1 Resolving a Project

    To instruct \QBS to load a project from disk, a request of type
    \c resolve-project is sent. The other properties are:
    \table
    \header \li Property                     \li Type                \li Mandatory
    \row    \li build-root                   \li \l FilePath         \li yes
    \row    \li configuration-name           \li string              \li no
    \row    \li data-mode                    \li \l DataMode         \li no
    \row    \li deprecation-warning-mode     \li string              \li no
    \row    \li dry-run                      \li bool                \li no
    \row    \li environment                  \li \l Environment      \li no
    \row    \li error-handling-mode          \li string              \li no
    \row    \li fallback-provider-enabled    \li bool                \li no
    \row    \li force-probe-execution        \li bool                \li no
    \row    \li log-time                     \li bool                \li no
    \row    \li log-level                    \li \l LogLevel         \li no
    \row    \li max-job-count                \li int                 \li no
    \row    \li module-properties            \li list of strings     \li no
    \row    \li overridden-properties        \li object              \li no
    \row    \li project-file-path            \li FilePath            \li if resolving from scratch
    \row    \li restore-behavior             \li string              \li no
    \row    \li settings-directory           \li string              \li no
    \row    \li top-level-profile            \li string              \li no
    \row    \li wait-lock-build-graph        \li bool                \li no
    \endtable

    The \c environment property defines the environment to be used for resolving
    the project, as well as for all subsequent \QBS operations on this project.

    The \c error-handling-mode specifies how \QBS should deal with issues
    in project files, such as assigning to an unknown property. The possible
    values are \c "strict" and \c "relaxed". In strict mode, \QBS will
    immediately abort and set the reply's \c error property accordingly.
    In relaxed mode, \QBS will continue to resolve the project if possible.
    A \l{warning-message}{warning message} will be emitted for every error that
    was encountered, and the reply's \c error property will \e not be set.
    The default error handling mode is \c "strict".

    If the \c log-time property is \c true, then \QBS will emit \l log-data messages
    containing information about which part of the operation took how much time.

    The \c module-properties property lists the names of the module properties
    which should be contained in the \l{ProductData}{product data} that
    will be sent in the reply message. For instance, if the project to be resolved
    is C++-based and the client code is interested in which C++ version the
    code uses, then \c module-properties would contain \c{"cpp.cxxLanguageVersion"}.

    The \c overridden-properties property is used to override the values of
    module, product or project properties. The possible ways to specify
    keys are described \l{Overriding Property Values from the Command Line}{here}.

    The \c restore-behavior property specifies if and how to make use of
    an existing build graph. The value \c "restore-only" indicates that
    a build graph should be loaded from disk and used as-is. In this mode,
    it is an error if the build graph file does not exist.
    The value \c "resolve-only" indicates that the project should be resolved
    from scratch and that an existing build graph should be ignored. In this mode,
    it is an error if the \c "project-file-path" property is not present.
    The default value is \c "restore-and-track-changes", which uses an
    existing build graph if possible and re-resolves the project if no
    build graph was found or if the parameters are different from the ones
    used when the project was last resolved.

    The \c top-level-profile property specifies which \QBS profile to use
    for resolving the project. It corresponds to the \c profile key when
    using the \l resolve command.

    All other properties correspond to command line options of the \l resolve
    command, and their semantics are described there.

    When the project has been resolved, \QBS will reply with a \c project-resolved
    message. The possible properties are:
    \table
    \header \li Property      \li Type                    \li Mandatory
    \row    \li error         \li \l ErrorInfo            \li no
    \row    \li project-data  \li \l TopLevelProjectData  \li no
    \endtable

    The \c error-info property is present if and only if the operation
    failed. The \c project-data property is present if and only if
    the conditions stated by the request's \c data-mode property
    are fulfilled.

    All other project-related requests need a resolved project to operate on.
    If there is none, they will fail.

    There is at most one resolved project per session. If client code wants to
    open several projects or one project in different configurations, it needs
    to start additional sessions.

    \section1 Building a Project

    To build a project, a request of type \c build-project is sent. The other properties,
    none of which are mandatory, are listed below:
    \table
    \header \li Property                     \li Type
    \row    \li active-file-tags             \li string list
    \row    \li changed-files                \li \l FilePath list
    \row    \li check-outputs                \li bool
    \row    \li check-timestamps             \li bool
    \row    \li clean-install-root           \li bool
    \row    \li data-mode                    \li \l DataMode
    \row    \li dry-run                      \li bool
    \row    \li command-echo-mode            \li string
    \row    \li enforce-project-job-limits   \li bool
    \row    \li files-to-consider            \li \l FilePath list
    \row    \li install                      \li bool
    \row    \li job-limits                   \li list of objects
    \row    \li keep-going                   \li bool
    \row    \li log-level                    \li \l LogLevel
    \row    \li log-time                     \li bool
    \row    \li max-job-count                \li int
    \row    \li module-properties            \li list of strings
    \row    \li products                     \li list of strings or \c "all"
    \endtable

    All boolean properties except \c install default to \c false.

    The \c active-file-tags and \c files-to-consider are used to limit the
    build to certain output tags and/or source files.
    For instance, if only C/C++ object files should get built, then
    \c active-file-tags would be set to \c "obj".

    The objects in a \c job-limits array consist of a string property \c pool
    and an int property \c limit.

    If the \c log-time property is \c true, then \QBS will emit \l log-data messages
    containing information about which part of the operation took how much time.

    If \c products is an array, the elements must correspond to the
    \c full-display-name property of previously retrieved \l ProductData,
    and only these products will get built.
    If \c products is the string \c "all", then all products in the project will
    get built.
    If \c products is not present, then products whose
    \l{Product::builtByDefault}{builtByDefault} property is \c false will
    be skipped.

    The \c module-properties property has the same meaning as in the
    \l{Resolving a Project}{resolve-project} request.

    All other properties correspond to options of the \l build command.

    When the build has finished, \QBS will reply with a \c project-built
    message. The possible properties are:
    \table
    \header \li Property      \li Type                    \li Mandatory
    \row    \li error         \li \l ErrorInfo            \li no
    \row    \li project-data  \li \l TopLevelProjectData  \li no
    \endtable

    The \c error-info property is present if and only if the operation
    failed. The \c project-data property is present if and only if
    the conditions stated by the request's \c data-mode property
    are fulfilled.

    Unless the \c command-echo-mode value is \c "silent", a message of type
    \c command-description is emitted for every command to be executed.
    It consists of two string properties \c highlight and \c message,
    where \c message is the message to present to the user and \c highlight
    is a hint on how to display the message. It corresponds to the
    \l{Command and JavaScriptCommand}{Command} property of the same name.

    For finished process commands, a message of type \c process-result
    might be emitted. The other properties are:
    \table
    \header \li Property               \li Type
    \row    \li arguments              \li list of strings
    \row    \li error                  \li string
    \row    \li executable-file-path   \li \l FilePath
    \row    \li exit-code              \li int
    \row    \li stderr                 \li list of strings
    \row    \li stdout                 \li list of strings
    \row    \li success                \li bool
    \row    \li working-directory      \li \l FilePath
    \endtable

    The \c error string is one of \c "failed-to-start", \c "crashed", \c "timed-out",
    \c "write-error", \c "read-error" and \c "unknown-error".
    Its value is not meaningful unless \c success is \c false.

    The \c stdout and \c stderr properties describe the process's standard
    output and standard error output, respectively, split into lines.

    The \c success property is \c true if the process finished without errors
    and an exit code of zero.

    The other properties describe the exact command that was executed.

    This message is only emitted if the process failed or it has printed data
    to one of the output channels.

    \section1 Cleaning a Project

    To remove a project's build artifacts, a request of type \c clean-project
    is sent. The other properties are:
    \table
    \header \li Property     \li Type
    \row    \li dry-run      \li bool
    \row    \li keep-going   \li bool
    \row    \li log-level    \li \l LogLevel
    \row    \li log-time     \li bool
    \row    \li products     \li list of strings
    \endtable

    The elements of the \c products array correspond to a \c full-display-name
    of a \l ProductData. If this property is present, only the respective
    products' artifacts are removed.

    If the \c log-time property is \c true, then \QBS will emit \l log-data messages
    containing information about which part of the operation took how much time.

    All other properties correspond to options of the \l clean command.

    None of these properties are mandatory.

    After all artifacts have been removed, \QBS replies with a
    \c project-cleaned message. If the operation was successful, this message
    has no properties. Otherwise, a property \c error of type \l ErrorInfo
    indicates what went wrong.

    \section1 Installing a Project

    Installing is normally part of the \l{Building a Project}{build}
    process. To do it in a separate step, the \c install property
    is set to \c false when building and a dedicated \c install-project
    message is sent. The other properties are:
    \table
    \header \li Property             \li Type
    \row    \li clean-install-root   \li bool
    \row    \li dry-run              \li bool
    \row    \li install-root         \li \l FilePath
    \row    \li keep-going           \li bool
    \row    \li log-level            \li \l LogLevel
    \row    \li log-time             \li bool
    \row    \li products             \li list of strings
    \row    \li use-sysroot          \li bool
    \endtable

    The elements of the \c products array correspond to a \c full-display-name
    of a \l ProductData. If this property is present, only the respective
    products' artifacts are installed.

    If the \c log-time property is \c true, then \QBS will emit \l log-data messages
    containing information about which part of the operation took how much time.

    If the \c use-sysroot property is \c true and \c install-root is not present,
    then the install root will be \l{qbs::sysroot}{qbs.sysroot}.

    All other properties correspond to options of the \l install command.

    None of these properties are mandatory.

    \target cancel-message
    \section1 Canceling an Operation

    Potentially long-running operations can be aborted using the \c cancel-job
    request. This message does not have any properties. There is no dedicated
    reply message; instead, the usual reply for the request associated with
    the currently running operation will be sent, with the \c error property
    set to indicate that it was canceled.

    If there is no operation in progress, this request will have no effect.
    In particular, if it arrives after the operation that it was supposed to
    cancel has already finished (i.e. there is a race condition), the reply
    received by client code will not contain a cancellation-related error.

    \section1 Adding and Removing Source Files

    Source files can be added to and removed from \QBS project files with
    the \c add-files and \c remove-files messages, respectively. These two
    requests have the same set of properties:
    \table
    \header \li Property  \li Type
    \row    \li files     \li \l FilePath list
    \row    \li group     \li string
    \row    \li product   \li string
    \endtable

    The \c files property specifies which files should be added or removed.

    The \c product property corresponds to the \c full-display-name of
    a \l ProductData and specifies to which product to apply the operation.

    The \c group property corresponds to the \c name of a \l GroupData
    and specifies to which group in the product to apply the operation.

    After the operation has finished, \QBS replies with a \c files-added
    and \c files-removed message, respectively. Again, the properties are
    the same:
    \table
    \header \li Property       \li Type                     \li Mandatory
    \row    \li error          \li \l ErrorInfo             \li no
    \row    \li failed-files   \li \l FilePath list         \li no
    \endtable

    If the \c error property is present, the operation has at least
    partially failed and \c failed-files will list the files
    that could not be added or removed.

    \section1 The \c get-run-environment Message

    This request retrieves the full run environment for a specific
    executable product, taking into account the
    \l{Module::setupRunEnvironment}{setupRunEnvironment} scripts
    of all modules pulled in by the product. The properties are as follows:
    \table
    \header \li Property           \li Type              \li Mandatory
    \row    \li base-environment   \li \l Environment    \li no
    \row    \li config             \li list of strings   \li no
    \row    \li product            \li string            \li yes
    \endtable

    The \c base-environment property defines the environment into which
    the \QBS-specific values should be merged.

    The \c config property corresponds to the \l{--setup-run-env-config}
    option of the \l run command.

    The \c product property specifies the product whose environment to
    retrieve. The value must correspond to the \c full-display-name
    of some \l ProductData in the project.

    \QBS will reply with a \c run-environment message. In case of failure,
    it will contain a property \c error of type \l ErrorInfo, otherwise
    it will contain a property \c full-environment of type \l Environment.

    \section1 The \c get-generated-files-for-sources Message

    This request allows client code to retrieve information about
    which artifacts are generated from a given source file.
    Its sole property is a list \c products, whose elements are objects
    with the two properties \c full-display-name and \c requests.
    The first identifies the product to which the requests apply, and
    it must match the property of the same name in a \l ProductData
    in the project.
    The latter is a list of objects with the following properties:
    \table
    \header \li Property      \li Type              \li Mandatory
    \row    \li source-file   \li \l FilePath       \li yes
    \row    \li tags          \li list of strings   \li no
    \row    \li recursive     \li bool              \li no
    \endtable

    The \c source-file property specifies a source file in the respective
    product.

    The \c tags property constrains the possible file tags of the generated
    files to be matched. This is relevant if a source files serves as input
    to more than one rule or the rule generates more than one type of output.

    If the \c recursive property is \c true, files indirectly generated
    from the source file will also be returned. The default is \c false.
    For instance, íf this property is enabled for a C++ source file,
    the final link target (e.g. a library or an application executable)
    will be returned in addition to the object file.

    \QBS will reply with a \c generated-files-for-sources message, whose
    structure is similar to the request. It also has a single object list
    property \c products, whose elements consist of a string property
    \c full-display-name and an object list property \c results.
    The properties of these objects are:
    \table
    \header \li Property          \li Type
    \row    \li source-file       \li \l FilePath
    \row    \li generated-files   \li \l FilePath list
    \endtable

    The \c source-file property corresponds to an entry of the same name
    in the request, and the \c generated-files are the files which are
    generated by \QBS rules that take the source file as an input,
    taking the constraints specified in the request into account.

    Source files for which the list would be empty are not listed.
    Similarly, products for which the \c results list would be empty
    are also omitted.

    \note The results may be incomplete if the project has not been fully built.

    \section1 Closing a Project

    A project is closed with a \c release-project message. This request has
    no properties.

    \QBS will reply with a \c project-released message. If no project was open,
    the reply will contain an \c error property of type \l ErrorInfo.

    \target quit-message
    \section1 Closing the Session

    To close the session, a \c quit message is sent. This request has no
    properties.

    \QBS will cancel all currently running operations and then close itself.
    No reply will be sent.

    \section1 Progress Messages

    While a request is being handled, \QBS may emit progress information in order
    to enable client code to display a progress bar.

    \target task-started
    \section2 The \c task-started Message

    This is always the first progress-related message for a specific request.
    It appears at most once per request.
    It consists of a string property \c description, whose value can be displayed
    to users, and an integer property \c max-progress that indicates which
    progress value corresponds to 100 per cent.

    \target task-progress
    \section2 The \c task-progress Message

    This message updates the progress via an integer property \c progress.

    \target new-max-progress
    \section2 The \c new-max-progress Message

    This message is emitted if the original estimated maximum progress has
    to be corrected. Its integer property \c max-progress updates the
    value from a preceding \l task-started message.

    \section1 Messages for Users

    There are two types of messages that purely contain information to be
    presented to users.

    \target log-data
    \section2 The \c log-data Message

    This object has a string property \c message, which is the text to be
    shown to the user.

    \target warning-message
    \section2 The \c warning Message

    This message has a single property \c warning of type \l ErrorInfo.

    \section1 The \c protocol-error Message

    \QBS sends this message as a reply to a request with an unknown \c type.
    It contains an \c error property of type \l ErrorInfo.

    \section1 Project Data

    If a request can alter the build graph data, the associated reply may contain
    a \c project-data property whose value is of type \l TopLevelProjectData.

    \section2 TopLevelProjectData

    This data type represents the entire project. It has the same properties
    as \l PlainProjectData. If it is part of a \c project-resolved message,
    these additional properties are also present:
    \table
    \header \li Property                \li Type
    \row    \li build-directory         \li \l FilePath
    \row    \li build-graph-file-path   \li \l FilePath
    \row    \li build-system-files      \li \l FilePath list
    \row    \li overridden-properties   \li object
    \row    \li profile-data            \li object
    \endtable

    The value of \c build-directory is the top-level build directory.

    The \c build-graph-file-path value is the path to the build graph file.

    The \c build-system-files value contains all \QBS project files, including
    modules and JavaScript helper files.

    The value of \c overridden-properties is the one that was passed in when
    the project was last \l{Resolving a Project}{resolved}.

    The \c profile-data property maps the names of the profiles used in the project
    to the respective property maps. Unless profile multiplexing is used, this
    object will contain exactly one property.

    \section2 PlainProjectData

    This data type describes a \l Project item. The properties are as follows:
    \table
    \header \li Property         \li Type
    \row    \li is-enabled       \li bool
    \row    \li location         \li \l FilePath
    \row    \li name             \li string
    \row    \li products         \li \l ProductData list
    \row    \li sub-projects     \li \l PlainProjectData list
    \endtable

    The \c is-enabled property corresponds to the project's
    \l{Project::condition}{condition}.

    The \c location property is the exact position in a \QBS project file
    where the corresponding \l Project item was defined.

    The \c products and \c sub-projects are what the project has pulled in via
    its \l{Project::references}{references} property.

    \section2 ProductData

    This data type describes a \l Product item. The properties are as follows:
    \table
    \header \li Property                     \li Type
    \row    \li build-directory              \li \l FilePath
    \row    \li dependencies                 \li list of strings
    \row    \li full-display-name            \li string
    \row    \li generated-artifacts          \li \l ArtifactData list
    \row    \li groups                       \li \l GroupData list
    \row    \li is-enabled                   \li bool
    \row    \li is-multiplexed               \li bool
    \row    \li is-runnable                  \li bool
    \row    \li location                     \li \l Location
    \row    \li module-properties            \li \l ModulePropertiesData
    \row    \li multiplex-configuration-id   \li string
    \row    \li name                         \li string
    \row    \li properties                   \li object
    \row    \li target-executable            \li \l FilePath
    \row    \li target-name                  \li string
    \row    \li type                         \li list of strings
    \row    \li version                      \li string
    \endtable

    The elements of the \c dependencies array correspond to the full-display-name
    properties of the products that this product has pulled in via \l Depends items.

    The \c generated-artifacts are files that are created by the \l{Rule}{rules}
    in this product.

    The \c groups list corresponds to the \l Group items in this product.
    In addition, a "pseudo-group" is created for the \l{Product::files}{files}
    property of the product itself. Its name is the same as the product's.

    The \c is-enabled property corresponds to the product's
    \l{Product::condition}{condition}. A product may also get disabled
    if it contains errors and \QBS was was instructed to operate in relaxed mode
    when the project was \l{Resolving a Project}{resolved}.

    The \c is-multiplexed property is true if and only if the product is
    \l{Multiplexing}{multiplexed} over one ore more properties.

    The \c is-runnable property indicates whether one of the product's
    target artifacts is an executable file.
    In that case, the file is available via the \c target-executable property.

    The \c location property is the exact position in a \QBS project file
    where the corresponding \l Product item was defined.

    The \c module-properties object provides the values of the module properties
    that were requested when the project was \l{Resolving a Project}{resolved}.

    The \c name property is the value given in the \l{Product::name}{Product item},
    whereas \c full-display-name is a name that uniquely identifies the
    product in the entire project, even in the presence of multiplexing.
    In the absence of multiplexing, it is the same as \c name. In either case,
    it is suitable for being presented to users.

    See the \l Product item documentation for a description of the other
    properties.

    \section2 GroupData

    This data type describes a \l Group item. The properties are:
    \table
    \header \li Property                          \li Type
    \row    \li is-enabled                        \li bool
    \row    \li location                          \li \l Location
    \row    \li module-properties                 \li \l ModulePropertiesData
    \row    \li name                              \li string
    \row    \li prefix                            \li string
    \row    \li source-artifacts                  \li \l ArtifactData list
    \row    \li source-artifacts-from-wildcards   \li \l ArtifactData list
    \endtable

    The \c is-enabled property corresponds to the groups's
    \l{Group::condition}{condition}. However, if the group's product
    is disabled, this property will always be \c false.

    The \c location property is the exact position in a \QBS project file
    where the corresponding \l Group item occurs.

    The \c module-properties object provides the values of the module properties
    that were requested when the project was \l{Resolving a Project}{resolved}.
    If no module properties are set on the Group level and the value would therefore
    be the same as in the group's product, then this property is omitted.

    The \c source-artifacts list corresponds the the files listed verbatim
    in the group's \l{Group::files}{files} property.

    The \c source-artifacts-from-wildcards list represents the the files
    expanded from wildcard entries in the group's \l{Group::files}{files} property.

    See the \l Group item documentation for a description of the other
    properties.

    \section2 ArtifactData

    This data type represents files that occur in the project, either as sources
    or as outputs of a rules. \QBS project files, on the other hand, are not
    artifacts. The properties are:
    \table
    \header \li Property            \li Type
    \row    \li file-path           \li \l FilePath
    \row    \li file-tags           \li list of strings
    \row    \li install-data        \li object
    \row    \li is-executable       \li bool
    \row    \li is-generated        \li bool
    \row    \li is-target           \li bool
    \row    \li module-properties   \li \l ModulePropertiesData
    \endtable

    The \c install-data property is an object whose \c is-installable property
    indicates whether the artifact gets installed. If so, then the \l FilePath
    properties \c install-file-path and \c install-root provide further
    information.

    The \c is-target property is true if the artifact is a target artifact
    of its product, that is, \c is-generated is true and \c file-tags
    intersects with the \l{Product::type}{product type}.

    The \c module-properties object provides the values of the module properties
    that were requested when the project was \l{Resolving a Project}{resolved}.
    This property is only present for generated artifacts. For source artifacts,
    the value can be retrieved from their \l{GroupData}{group}.

    The other properties should be self-explanatory.

    \section2 ModulePropertiesData

    This data type maps fully qualified module property names to their
    respective values.

    \section1 Other Custom Data Types

    There are a number of custom data types that serve as building blocks in
    various messages. They are described below.

    \section2 FilePath

    A \e FilePath is a string that describes a file or directory. FilePaths are
    always absolute and use forward slashes for separators, regardless of
    the host operating system.

    \section2 Location

    A \e Location is an object representing a file path and possibly also a position
    within the respective file. It consists of the following properties:
    \table
    \header \li Property      \li Type           \li Mandatory
    \row    \li file-path     \li \l FilePath    \li yes
    \row    \li line          \li int            \li no
    \row    \li column        \li int            \li no
    \endtable

    \section2 ErrorInfo

    An \e ErrorInfo is an object representing error information. Its sole property
    \c items is an array of objects with the following structure:
    \table
    \header \li Property      \li Type           \li Mandatory
    \row    \li description   \li string         \li yes
    \row    \li location      \li \l Location    \li no
    \endtable

    \section2 DataMode

    This is the type of the \c data-mode property in a
    \l{Resolving a project}{resolve} or \l{Building a project}{build}
    request. It is used to indicate under which circumstances
    the reply message should include the project data. The possible
    values have string type and are as follows:
    \list
        \li \c "never": Do not attach project data to the reply.
        \li \c "always": Do attach project data to the reply.
        \li \c "only-if-changed": Attach project data to the reply only
                                  if it is different from the current
                                  project data.
    \endlist
    The default value is \c "never".

    \section2 LogLevel

    This is the type of the \c log-level property that can occur
    in various requests. It is used to indicate whether the client would like
    to receive \l log-data and/or \l{warning-message}{warning} messages.
    The possible values have string type and are as follows:
    \list
        \li "error": Do not log anything.
        \li "warning": \QBS may emit \l{warning-message}{warnings}, but no
                       \l log-data messages.
        \li "info": In addition to warnings, \QBS may emit informational
                    \l log-data messages.
        \li "debug": \QBS may emit debug output. No messages will be generated;
                     instead, the standard error output channel will be used.
    \endlist
    The default value is \c "info".

    \section2 Environment

    This data type describes a set of environment variables. It is an object
    whose keys are names of environment variables and whose values are
    the values of these environment variables.

*/
qbs-src-2.3.1/doc/CMakeLists.txt0000644000175100001770000000157214616416776015770 0ustar  runnerdockerset(_DOC_SOURCES
    ../README.md
    ../CONTRIBUTING.md
    classic.css
    external-resources.qdoc
    fixnavi.pl
    howtos.qdoc
    qbs.qdoc
    qbs-online.qdocconf
    config/style/qt5-sidebar.html
    )

file(GLOB_RECURSE _DOC_APPENDIX_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/appendix/*")
file(GLOB_RECURSE _DOC_REFERENCE_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/reference/*")
file(GLOB_RECURSE _DOC_TEMPLATES_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/templates/*")
file(GLOB_RECURSE _DOC_IMAGES_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/images/*")
file(GLOB_RECURSE _DOC_TARGETS_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/targets/*")

add_qbs_documentation(
    "qbs.qdocconf"
    SOURCES
        ${_DOC_SOURCES}
        ${_DOC_APPENDIX_SOURCES}
        ${_DOC_REFERENCE_SOURCES}
        ${_DOC_TEMPLATES_SOURCES}
        ${_DOC_IMAGES_SOURCES}
        ${_DOC_TARGETS_SOURCES}
    )

add_subdirectory(man)
qbs-src-2.3.1/doc/external-resources.qdoc0000644000175100001770000000655514616416776017740 0ustar  runnerdocker/****************************************************************************
**
** Copyright (C) 2022 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qbs.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \externalpage https://developer.apple.com/library/content/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Optimizing/Optimizing.html#//apple_ref/doc/uid/TP40012302-CH7-SW28
    \title Adopt the @2x Naming Convention
*/

/*!
    \externalpage https://login.qt.io/
    \title Qt Account
*/

/*!
    \externalpage https://www.qt.io/ide/
    \title Qt Creator
*/

/*!
    \externalpage https://www.qt.io/download/
    \title Qt SDK
*/

/*!
    \externalpage https://doc.qt.io/qt-5/licensing.html
    \title Qt Licensing
*/

/*!
    \externalpage https://www.gnu.org/licenses/gpl-2.0.html
    \title GNU General Public License, version 2
*/

/*!
    \externalpage http://www.linfo.org/bsdlicense.html
    \title BSD
*/

/*!
    \externalpage https://chocolatey.org/packages/qbs
    \title Chocolatey
*/

/*!
    \externalpage https://www.macports.org/ports.php?by=name&substr=qbs
    \title MacPorts
*/

/*!
    \externalpage https://brew.sh/
    \title Homebrew
*/

/*!
    \externalpage  http://www.typescriptlang.org
    \title TypeScript
*/

/*!
    \externalpage http://www.typescriptlang.org/docs/handbook/compiler-options.html
    \title Compiler Options
*/

/*!
    \externalpage https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/dyld.1.html
    \title DYLD documentation
*/

/*!
    \externalpage https://dmgbuild.readthedocs.io/en/latest/settings.html#background
    \title dmgbuild - Settings
*/

/*!
    \externalpage http://www.jrsoftware.org/isinfo.php
    \title Inno Setup
*/

/*!
    \externalpage http://nodejs.org
    \title Node.js
*/

/*!
    \externalpage http://wixtoolset.org
    \title Windows Installer XML Toolset
*/

/*!
    \externalpage https://clang.llvm.org/docs/JSONCompilationDatabase.html
    \title JSON Compilation Database Format Specification
*/

/*!
    \externalpage https://github.com/protocolbuffers/protobuf
    \title protoc
*/

/*!
    \externalpage https://github.com/nanopb/nanopb
    \title nanopb
*/

/*!
    \externalpage https://ccache.samba.org/
    \title ccache
*/

/*!
    \externalpage https://ccache.samba.org/manual.html#_precompiled_headers
    \title ccache documentation about precompiled headers
*/
qbs-src-2.3.1/doc/codeattributions.qdoc0000644000175100001770000002375314616416776017467 0ustar  runnerdocker/*!

\ingroup attributions-libs
\ingroup attributions-qbs
\page qbs-attribution-ds_store.html attribution
\target ds_store

\title ds_store
\brief MIT License

Manipulate Finder .DS_Store files from Python

Used in the qbs dmg module for building Apple disk images.

The sources can be found in src/3rdparty/python/lib/python2.7/site-packages/ds_store.

\l{https://github.com/al45tair/ds_store}{Project Homepage}, upstream version: 1.1.2


\badcode
Copyright (c) 2014 Alastair Houghton
\endcode

\l{https://spdx.org/licenses/MIT.html}{MIT License}.

\badcode
Copyright (c) 2014 Alastair Houghton

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
\endcode
*/

/*!

\ingroup attributions-libs
\ingroup attributions-qbs
\page qbs-attribution-dmgbuild.html attribution
\target dmgbuild

\title dmgbuild
\brief MIT License

macOS command line utility to build disk images

Used in the qbs dmg module for building Apple disk images.

The sources can be found in src/3rdparty/python/lib/python2.7/site-packages/dmgbuild.

\l{https://github.com/al45tair/dmgbuild}{Project Homepage}, upstream version: 1.3.1


\badcode
Copyright (c) 2014 Alastair Houghton
\endcode

\l{https://spdx.org/licenses/MIT.html}{MIT License}.

\badcode
Copyright (c) 2014 Alastair Houghton

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
\endcode
*/

/*!

\ingroup attributions-libs
\ingroup attributions-qbs
\page qbs-attribution-mac_alias.html attribution
\target mac_alias

\title mac_alias
\brief MIT License

Generate/parse Mac OS Alias records from Python

Used in the qbs dmg module for building Apple disk images.

The sources can be found in src/3rdparty/python/lib/python2.7/site-packages/mac_alias.

\l{https://github.com/al45tair/mac_alias}{Project Homepage}, upstream version: 2.0.6


\badcode
Copyright (c) 2014 Alastair Houghton
\endcode

\l{https://spdx.org/licenses/MIT.html}{MIT License}.

\badcode
Copyright (c) 2014 Alastair Houghton

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
\endcode
*/

/*!

\ingroup attributions-libs
\ingroup attributions-qbs
\page qbs-attribution-biplist.html attribution
\target biplist

\title biplist
\brief BSD 3-clause "New" or "Revised" License

biplist is a library for reading/writing binary plists.

Used in the qbs dmg module for building Apple disk images.

The sources can be found in src/3rdparty/python/lib/python2.7/site-packages/biplist.

\l{https://bitbucket.org/wooster/biplist}{Project Homepage}, upstream version: 1.0.2


\badcode
Copyright (c) 2010, Andrew Wooster
\endcode

\l{https://spdx.org/licenses/BSD-3-Clause.html}{BSD 3-clause "New" or "Revised" License}.

\badcode
Copyright (c) 2010, Andrew Wooster
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.
    * Neither the name of biplist nor the names of its contributors may be
      used to endorse or promote products derived from this software without
      specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\endcode
*/

/*!

\ingroup attributions-libs
\ingroup attributions-qbs
\page qbs-attribution-cppscanner.html attribution
\target cppscanner

\title cppscanner
\brief MIT License

The cpp scanner module is used to parse C/C++ files and to find includes
in them.

The sources can be found in src/plugins/scanner/cpp.

\badcode
Copyright (c) 2008 Roberto Raggi
\endcode

\l{https://spdx.org/licenses/MIT.html}{MIT License}.

\badcode
// Copyright (c) 2008 Roberto Raggi 
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
\endcode
*/

/*!

\ingroup attributions-libs
\ingroup attributions-qbs
\page qbs-attribution-quickjs.html attribution
\target quickjs

\title QuickJS
\brief MIT License

The JavaScript engine used to evaluate all JavaScript code in \QBS project files.

The sources can be found in src/shared/quickjs.

\badcode
Copyright (c) 2017-2021 Fabrice Bellard
Copyright (c) 2017-2021 Charlie Gordon
\endcode

\l{https://spdx.org/licenses/MIT.html}{MIT License}.

\badcode
QuickJS Javascript Engine

Copyright (c) 2017-2021 Fabrice Bellard
Copyright (c) 2017-2021 Charlie Gordon

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
\endcode
*/
qbs-src-2.3.1/doc/howtos.qdoc0000644000175100001770000007314614616416776015431 0ustar  runnerdocker/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qbs.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/
/*!
    \previouspage tutorial-8.html
    \nextpage reference.html
    \page howtos.html

    \title How-tos

    This page provides concrete instructions for common scenarios.

    \list
    \li \l{How do I build a Qt-based project?}
    \li \l{How do I make my app build against my library?}
    \li \l{How do I build release with debug information?}
    \li \l{How do I separate and install debugging symbols?}
    \li \l{How do I use precompiled headers?}
    \li \l{How do I make use of rpaths?}
    \li \l{How do I make sure my generated sources are getting compiled?}
    \li \l{How do I run my autotests?}
    \li \l{How do I use ccache?}
    \li \l{How do I create a module for a third-party library?}
    \li \l{How do I build against libraries that provide pkg-config files?}
    \li \l{How do I create application bundles and frameworks on iOS, macOS, tvOS, and watchOS?}
    \li \l{How do I apply C/C++ preprocessor macros to only a subset of the files in my product?}
    \li \l{How do I disable a compiler warning?}
    \li \l{How do I make the state of my Git repository available to my source files?}
    \li \l{How do I limit the number of concurrent jobs for the linker only?}
    \li \l{How do I add QML files to a project?}
    \li \l{How do I define a reusable Group of files that can be included in other \QBS files?}
    \li \l{How do I access properties of a base type?}
    \li \l{How do I print the value of a property?}
    \li \l{How do I debug \QBS scripts?}
    \li \l{How do I sign an application for an Apple platform?}
    \endlist

    \section1 How do I build a Qt-based project?

    First of all, your project files need to declare \l{Depends}{dependencies}
    on \l{Qt} modules.

    To build the project, you need a matching \e profile. The following commands
    set up and use a Qt-specific profile:
    \code
    $ qbs setup-qt /usr/bin/qmake qt
    $ cd my_project
    $ qbs profile:qt
    \endcode
    If you plan to use this profile a lot, consider making it the default one:
    \code
    $ qbs config defaultProfile qt
    $ cd my_project
    $ qbs
    \endcode
    See \l{Managing Qt Versions} for more details.
    \note These instructions are only relevant for building from the command line.
    If you use Qt Creator, profiles are set up automatically from the information in the Kit.

    \section1 How do I make my app build against my library?

    This is achieved by introducing a \e dependency between the two products using the
    \l{Depends} item. Here is a simple, but complete example:
    \code
    Project {
        CppApplication {
            name : "the-app"
            files : [ "main.cpp" ]
            Depends { name: "the-lib" }
        }
        DynamicLibrary {
            name: "the-lib"
            Depends { name: "cpp" }
            files: [
                "lib.cpp",
                "lib.h",
            ]
            Export {
                Depends { name: "cpp" }
                cpp.includePaths: [exportingProduct.sourceDirectory]
           }
        }
    }
    \endcode

    The product \c the-lib is a dynamic library. It expects other products to build against it, and
    for that purpose, it exports an include path (via an \l{Export} item), so that the
    source files in these products can include the library's header file.

    The product \c the-app is an application that expresses its intent to link against \c the-lib
    by declaring a dependency on it. Now \c main.cpp can include \c lib.h (because of the exported
    include path) and the application binary will link against the library (because the linker
    \l{Rule}{rule} in the \l{cpp} module considers library dependencies as inputs).
    \note In a non-trivial project, the two products would not be defined in the same file.
          Instead, you would put them into files of their own and use the
          \l{Project::references}{Project.references} property to pull them into the project.
          The product definitions would stay exactly the same. In particular, their location
          in the project tree is irrelevant to the relationship between them.

    \section2 Choosing Between Dynamic and Statically-built Qt Projects

    To build \c "the-lib" as either a dynamic or static library, depending on
    how Qt was built, you can use the following code:

    \code
    Product {
        name: "the-lib"
        type: Qt.core.staticBuild ? "staticlibrary" : "dynamiclibrary"

        Depends { name: "Qt.core" }
        // ...
    }
    \endcode

    \section1 How do I build release with debug information?

    You can simply use the \c{"profiling"} \l{qbs::buildVariant}{qbs.buildVariant}:
    \code
    qbs build qbs.buildVariant:profiling
    \endcode

    \section1 How do I separate and install debugging symbols?

    First, you need to set the \l{cpp::debugInformation}{cpp.debugInformation} and
    \l{cpp::separateDebugInformation}{cpp.separateDebugInformation}
    properties to \c true or use some conditional expression in your product:
    \code
    CppApplication {
        // ...
        cpp.debugInformation: qbs.buildVariant !== "release"
        cpp.separateDebugInformation: true
    }
    \endcode

    Now, you can install your \l{Application}{application}, \l{DynamicLibrary}{dynamic library}
    or \l{LoadableModule}{loadable module} among with its debugging symbols as follows:
    \code
    CppApplication {
        // ...
        install: true
        installDir: "bin"
        installDebugInformation: true
        debugInformationInstallDir: "bin"
    }
    \endcode

    If you are not using \l{List of Convenience Items}{convenience items},
    you can install debug symbols manually using the \l{Group} item. If the
    \l{cpp::separateDebugInformation}{cpp.separateDebugInformation} property is set to \c true,
    \QBS will create debugging symbols with the corresponding file tags
    \c "debuginfo_app" (for an application), \c "debuginfo_dll" (for a dynamic library),
    or \c "debuginfo_loadablemodule" (for a macOS plugin).

    \code
    Product {
        type: "application"
        Depends { name: "cpp" }
        cpp.debugInformation: qbs.buildVariant !== "release"
        cpp.separateDebugInformation: true
        Group {
            fileTagsFilter: cpp.separateDebugInformation ? ["debuginfo_app"] : []
            qbs.install: true
            qbs.installDir: "bin"
            qbs.installSourceBase: buildDirectory
        }
    }
    \endcode

    If you're building a shared library, you need to use the \c "debuginfo_dll" tag instead:
    \code
    Product {
        type: "dynamic_library"
        // ...
        Group {
            fileTagsFilter: cpp.separateDebugInformation ? ["debuginfo_dll"] : []
            qbs.install: true
            qbs.installDir: "lib"
            qbs.installSourceBase: buildDirectory
        }
    }
    \endcode

    If you're building a macOS plugin, you need to use the \c "debuginfo_loadablemodule"
    tag instead:
    \code
    Product {
        type: "loadablemodule"
        // ...
        Group {
            fileTagsFilter: cpp.separateDebugInformation ? ["debuginfo_loadablemodule"] : []
            qbs.install: true
            qbs.installDir: "PlugIns"
            qbs.installSourceBase: buildDirectory
        }
    }
    \endcode

    \section1 How do I use precompiled headers?

    If you use a \l Group item to add a precompiled header file to a product
    and mark it with the \l{filetags-cpp}{relevant file tag} (\c c_pch_src,
    \c cpp_pch_src, \c objc_pch_src, or \c objcpp_pch_src), it is used
    automatically.

    Only one precompiled header is allowed per product and language.

    For example:

    \code
    CppApplication {
        name: "the-app"
        files: ["main.cpp"]

        Group {
            files: ["precompiled-header.pch"]
            fileTags: ["cpp_pch_src"]
        }
    }
    \endcode

    \section1 How do I make use of rpaths?

    rpath designates the run-time search path used by the dynamic linker when loading
    libraries on UNIX platforms. This concept does not apply to Windows.

    Suppose you have a project with two dynamic library products \c LibraryA and \c LibraryB
    and one dependent application product. Also, \c LibraryB depends on \c LibraryA. The
    application is installed to the \c bin folder and the libraries are installed to the
    \c lib folder next to the \c bin folder. You want the application to be able to find the
    dependent libraries relative to its own location. This can be achieved by usage of the
    \l{cpp::rpaths}{cpp.rpaths} property.

    First, you need to set \l{cpp::rpaths}{cpp.rpaths} in your libraries so they can
    find dependent libraries in the same folder where they are located. This can be
    done as follows:

    \snippet ../examples/rpaths/rpaths.qbs 0

    We are setting \l{cpp::rpaths}{cpp.rpaths} to \l{cpp::rpathOrigin}{cpp.rpathOrigin} which
    expands to \c "$ORIGIN" on Linux and to \c "@loader_path" on macOS.

    On macOS you also need to set \l{cpp::sonamePrefix}{cpp.sonamePrefix} to \c "@rpath" to
    tell the dynamic linker to use RPATHs when loading this library.

    \c LibraryB looks exactly the same:

    \snippet ../examples/rpaths/rpaths.qbs 1

    In a real project, it might be a good idea to move common properties to some base item
    and inherit it in library items.

    The application item is a bit different. It sets \l{cpp::rpaths}{cpp.rpaths} to the
    \c "lib" folder which is located one level up from the \c bin folder:

    \snippet ../examples/rpaths/rpaths.qbs 2

    \section1 How do I make sure my generated sources are getting compiled?

    The rules in a \QBS project do not care whether its inputs are actual source files
    listed on the right-hand side of a \l{Product::files}{files} property or artifacts
    that were generated by another rule. For instance, the C++ compiler rule considers
    all input files of type "cpp", no matter how they got into the product. The following
    example project demonstrates this. One of its source files exists in the repository,
    the other one is generated at build time. Both are getting compiled the same way.
    \note Do not try to add the generated files to a \c files property. Declaring them
    as rule outputs is all that is needed to make \QBS know about them.
    \code
    import qbs.TextFile
    CppApplication {
        files: ["impl.cpp", "impl.h"]
        cpp.includePaths: sourceDirectory
        Rule {
            multiplex: true
            Artifact { filePath: "main.cpp"; fileTags: "cpp" }
            prepare: {
                var cmd = new JavaScriptCommand();
                cmd.description = "generating " + output.fileName;
                cmd.sourceCode = function() {
                    var f = new TextFile(output.filePath, TextFile.WriteOnly);
                    f.writeLine("#include ");
                    f.writeLine("int main()");
                    f.writeLine("{");
                    f.writeLine("    return functionFromImpl();");
                    f.writeLine("}");
                    f.close();
                };
                return cmd;
            }
        }
    }
    \endcode

    \section1 How do I run my autotests?

    There are two simple things you need to do in your project. Firstly, you
    mark your test executables as such. This is done by adding the tag \c{"autotest"}
    to the product type:
    \code
    CppApplication {
        name: "test1"
        type: base.concat("autotest")
        // ...
    }
    \endcode
    The second step is to instantiate an \l AutotestRunner product in your project:
    \code
    Project {
        // ...
        AutotestRunner { name: "run_my_tests" }
    }
    \endcode
    Building an AutotestRunner product does not produce artifacts, but triggers execution of all
    applications whose products are tagged as autotests:
    \code
    $ qbs -p run_my_tests
    test1: PASS
    test2: PASS
    test3: FAIL
    ...
    \endcode
    See the \l{AutotestRunner}{AutotestRunner documentation} for how to fine-tune the behavior.

    \section1 How do I use ccache?

    \l ccache is a popular C/C++ compiler cache on Unix to speed up compiling the
    same content multiple times.

    \QBS excels at tracking dependencies and avoiding needless recompilations, so
    for linear development of one project and configuration using ccache
    has little benefit. But if you switch between revisions of a project,
    or build the same project with different configurations, a global cache like
    ccache can speed up compilations significantly.

    ccache can be used by setting up symbolic links to compiler executables
    (such as \c g++, \c gcc) in the file system. In this setup, the use of ccache is
    transparent to \QBS. If you prefer to call ccache explicitly, you should
    set \l{cpp::compilerWrapper}{cpp.compilerWrapper} to \c ccache.

    \note Using precompiled headers might prevent ccache from actually
    using cached results. To work around this, you can set
    \c{sloppiness=pch_defines,time_macros} in your local ccache options.
    See the \l{ccache documentation about precompiled headers} for further details.

    \section1 How do I create a module for a third-party library?

    If you have pre-built binary files in your source tree, you can create
    modules for them and then introduce dependencies between your project and
    the modules to pull in the functionality of a third-party library.

    Create the following folder structure to store the module files:

    \code
    $projectroot/modules/ThirdParty
    \endcode

    Then create a file in the directory that specifies the module properties
    for each supported toolchain. The filename must have the \c .qbs extension.
    The module will be pulled in if a product declares a dependency on it.

    In the following example, \c lib1.dylib is a multi-architecture library
    containing both 32-bit and 64-bit code.

    \code
    ---ThirdParty.qbs---

    Module {
        Depends { name: "cpp" }
        cpp.includePaths: ["/somewhere/include"]
        Properties {
            condition: qbs.targetOS.includes("android")
            cpp.dynamicLibraries: ["/somewhere/android/" + Android.ndk.abi + "/lib1.so"]
        }
        Properties {
            condition: qbs.targetOS.includes("macos")
            cpp.dynamicLibraries: ["/somewhere/macos/lib1.dylib"]
        }
        Properties {
            condition: qbs.targetOS.includes("windows") && qbs.architecture === "x86"
            cpp.dynamicLibraries: ["/somewhere/windows_x86/lib1.lib"]
        }
        Properties {
            condition: qbs.targetOS.includes("windows") && qbs.architecture === "x86_64"
            cpp.dynamicLibraries: ["/somewhere/windows_x86_64/lib1.lib"]
        }
    }
    \endcode

    Finally, declare dependencies on \c ThirdParty in your project:

    \code
    CppApplication {
        name: "the-app"
        files: ["main.cpp"]
        Depends { name: "ThirdParty" }
    }
    \endcode

    \section1 How do I create application bundles and frameworks on iOS, macOS, tvOS, and watchOS?

    Creating an application bundle or framework is achieved by introducing a
    dependency on the \l{bundle} module and setting the \l{bundle::isBundle}
    {bundle.isBundle} property to \c true.

    Here is a simple example for an application:

    \code
    Application {
        Depends { name: "cpp" }
        Depends { name: "bundle" }
        bundle.isBundle: true
        name: "the-app"
        files: ["main.cpp"]
    }
    \endcode

    and for a framework:

    \code
    DynamicLibrary {
        Depends { name: "cpp" }
        Depends { name: "bundle" }
        bundle.isBundle: true
        name: "the-lib"
        files: ["lib.cpp", "lib.h"]
    }
    \endcode

    \QBS also supports building static frameworks. You can create one by
    replacing the \l{DynamicLibrary} item with a \l{StaticLibrary} item in the
    example above.

    \note When using the \l{Application} item (or convenience items, such as
    \l{CppApplication}, \l{DynamicLibrary}, and \l{StaticLibrary}), your
    products will be built as bundles on Apple platforms by default (this
    behavior is subject to change in a future release).

    To explicitly control whether your product is built as a bundle, set the \c bundle.isBundle
    property. Setting the \l{Product::}{consoleApplication} property of your
    product will also influence whether your product is built as a bundle.

    Building your application against your framework is the same as linking a normal dynamic or
    static library; see the \l{How do I make my app build against my library?} section for an
    example.

    \section1 How do I build against libraries that provide pkg-config files?

    Just add a \l Depends item that matches the name of the pkg-config module,
    set the \l Product::qbsModuleProviders property to \c "qbspkgconfig",
    and \QBS will employ
    \l{https://www.freedesktop.org/wiki/Software/pkg-config}{pkg-config}
    to find the headers and libraries if no matching \QBS module can be found. For instance,
    to build against the OpenSSL library, you would write this:
    \code
    qbsModuleProviders: "qbspkgconfig"
    Depends { name: "openssl" }
    \endcode
    That's it. The pkg-config behavior can be fine-tuned via the \l qbspkgconfig provider.

    Internally, this functionality is implemented via \l {Module Providers}

    \section1 How do I apply C/C++ preprocessor macros to only a subset of the files in my product?

    Use a \l{Group} item to define a subset of project files. To add
    macros within the group, you need to use the \c outer.concat property,
    because you are adding macros to those specified in the outer scope.

    In the following example, \c MACRO_EVERYWHERE is defined for all files in
    the \l{Product} unless a Group overrides the macro, whereas
    \c MACRO_GROUP is only defined for \c groupFile.cpp.

    \code
    Product {
        Depends { name: "cpp" }
        cpp.defines: ["MACRO_EVERYWHERE"]
        Group {
            cpp.defines: outer.concat("MACRO_GROUP")
            files: "groupFile.cpp"
        }
    }
    \endcode

    The \c cpp.defines statements inside a \c Group only apply to the files in
    that \c Group, and therefore you cannot use a \c Group to include a bunch of
    files and globally visible macros. The macros must be specified in a
    \l{Properties} item at the same level as the \c Group if
    they need to be visible to files outside the \c Group:

    \code
    Product {
        Depends { name: "cpp" }
        Group {
            condition: project.supportMyFeature
            files: "myFile.cpp"
        }

        property stringList commonDefines: ["ONE", "TWO"]

        Properties {
            condition: project.supportMyFeature
            cpp.defines: commonDefines.concat("MYFEATURE_SUPPORTED")
        }
    }
    \endcode

    \section1 How do I disable a compiler warning?

    You can use the \l {cpp::commonCompilerFlags}{cpp.commonCompilerFlags} property
    to pass flags to the compiler. For example, to disable deprecation warnings:

    \code
    CppApplication {
        // ...

        readonly property bool isMsvc: qbs.toolchain.includes("msvc")

        cpp.commonCompilerFlags: isMsvc ? "/wd4996" : "-Wno-deprecated-declarations"
    }
    \endcode

    It is also possible to disable all warnings at once by setting the
    \l {cpp::commonCompilerFlags}{cpp.warningLevel} property to \c "none".
    Usually this approach is discouraged, but it can be useful in some cases,
    such as when compiling third party code:

    \code
    Group {
        cpp.warningLevel: "none"

        files: [
            "3rdparty.h",
            "3rdparty.cpp"
        ]
    }
    \endcode

    \section1 How do I make the state of my Git repository available to my source files?

    Add a dependency to the \l{vcs} module to your product:
    \code
    CppApplication {
        // ...
        Depends { name: "vcs" }
        // ...
    }
    \endcode
    Your source files will now have access to a macro whose value is a string representing the
    current Git or Subversion HEAD:
    \code
    #include 
    #include 

    int main()
    {
        std::cout << "I was built from " << VCS_REPO_STATE << std::endl;
    }
    \endcode

    This value is also available via the \l{vcs::repoState}{vcs.repoState}
    property.

    \section1 How do I limit the number of concurrent jobs for the linker only?
    \target job-pool-howto

    While it is usually desirable to run as many compiler jobs as there are CPU cores,
    the same is not true for linker jobs. The reason is that linkers are typically
    I/O bound rather than CPU bound. When building large libraries, they also tend
    to use up enormous amounts of memory. Therefore, we'd like to make sure that
    only a few linkers are running at the same time without limiting other types
    of jobs. In \QBS, this is achieved via \e{job pools}. There are several ways
    to make use of them.

    Firstly, you can provide a limit via the command line:
    \code
    $ qbs --job-limits linker:4
    \endcode
    The above call instructs \QBS to run at most four linker instances at the same
    time, while leaving the general number of concurrent jobs at the default
    value, which is derived from the number of CPU cores.
    The \c linker string on the command line refers to the job pool of the same
    name, which the \l{cpp-job-pools}{cpp module} assigns to all its commands that
    invoke a linker.

    Secondly, you can set a limit via the settings, either generally
    or for a specific profile:
    \code
    $ qbs config preferences.jobLimit.linker 4
    $ qbs config profiles.myprofile.preferences.jobLimit.linker 2
    \endcode

    And finally, you can also set the limit per project or per product, using a
    \l JobLimit item:
    \code
    Product {
        name: "my_huge_library"
        JobLimit {
            jobPool: "linker"
            jobCount: 1
        }
        // ...
    }
    \endcode
    The above construct ensures that this specific library is never linked at
    the same time as any other binary in the project.

    Job limits set on the command line override those from the settings, which in turn
    override the ones defined within a project. Use the \c{--enforce-project-job-limits}
    option to give the job limits defined via \c JobLimit items maximum precedence.

    \section1 How do I add QML files to a project?

    The simplest way to add QML files to a project is to add them to a
    \l {https://doc.qt.io/qt/resources.html}{Qt resource file}:

    \code
    QtGuiApplication {
        // ...

        files: "main.cpp"

        Group {
            prefix: "qml/"
            files: ["main.qml", "HomePage.qml"]
            fileTags: ["qt.qml.qml", "qt.core.resource_data"]
        }
    }
    \endcode

    In the example above, we declare each QML file as having the
    \l {filetags-qtcore}{"qt.core.resource_data"} file tag. This ensures
    that it is added to a generated resource file.

    \section1 How do I define a reusable Group of files that can be included in other \QBS files?

    Suppose you have an application and tests for that application, and that
    the project is structured in the following way:

    \badcode
    ├── app
    │   ├── app.qbs
    │   ├── ...
    │   └── qml
    │       └── ui
    │           ├── AboutPopup.qml
    │           └── ...
    ├── my-project.qbs
    └── tests
        ├── tst_app.cpp
        ├── ...
        └── tests.qbs
    \endcode

    Both projects need access to the QML files used by the
    application. To demonstrate how this can be done, we'll create a file
    named \c qml-ui.qbs and put it in the \c app/qml/ui directory:

    \code
    Group {
        prefix: path + "/"
        fileTags: ["qt.qml.qml", "qt.core.resource_data"]
        files: [
            "AboutPopup.qml",
            // ...
        ]
    }
    \endcode

    This Group is a variation of the one in the
    \l {How do I add QML files to a project?}{section above}.

    If no prefix is specified, the file names listed in the \c files property
    are resolved relative to the \e importing product's (e.g. \c app.qbs)
    directory. For that reason, we set the prefix to inform \QBS that the file
    names should be resolved relative to the \e imported item instead:
    \c qml-ui.qbs. Conveniently, this also means that we don't need to specify
    the path prefix for each file.

    The application can then import the file like so:

    \code
    import "qml/ui/qml-ui.qbs" as QmlUiFiles

    QtGuiApplication {
        // ...

        files: "main.cpp"

        QmlUiFiles {}
    }
    \endcode

    The tests can use a relative path to import the file:

    \code
    import "../app/qml/ui/qml-ui.qbs" as QmlUiFiles

    QtGuiApplication {
        // ...

        files: "tst_app.cpp"

        QmlUiFiles {}
    }
    \endcode

    \section1 How do I access properties of a base type?

    You can use the \l base property. For example, to append to a list of files
    that come from the base type, you can use \c {base.concat()}:

    \code
    // TestBase.qbs

    QtGuiApplication {
        files: [
            "TestCaseBase.h",
            "TestCaseBase.cpp"
        ]
    }
    \endcode

    \code
    // tst_stuff.qbs
    TestBase {
        files: base.concat(["tst_stuff.cpp"])
    }
    \endcode

    See \l {Special Property Values} for more details.

    \section1 How do I print the value of a property?

    Use the \l {Console API}{console API}. For example, suppose your project
    is not built the way you expect it to be, and you suspect that
    \c qbs.targetOS has the wrong value:

    \code
    readonly property bool unix: qbs.targetOS.includes("unix")
    \endcode

    To find out the value of \c qbs.targetOS, use \c {console.info()}:

    \code
    readonly property bool unix: {
        console.info("qbs.targetOS: " + qbs.targetOS)
        return qbs.targetOS.includes("unix")
    }
    \endcode

    It is also possible to throw an exception with the text saying what is wrong - this might
    be useful if the property contains invalid or unsupported value:
    \code
    readonly property bool unix: {
        if (qbs.targetOS.includes("darwin"))
            throw "Apple platforms are not supported";
        return qbs.targetOS.includes("unix")
    }
    \endcode

    \section1 How do I debug \QBS scripts?

    To debug the value of a specific property, see the \l{How do I print the value of a property}
    section.

    Similar debugging techniques could be used within \l{Rule}{Rules} or \c .js files.

    It is also possible to increase \QBS' logging level using the \c --more-verbose (\c -v) option
    of the \c{qbs build} command:

    \code
    qbs build -v config:release
    \endcode

    \QBS uses the Qt Categorized Logging system which allows to configure logging categories
    in \l{https://doc.qt.io/qt-5/qloggingcategory.html#configuring-categories}{multiple ways}. For
    example, to enable debug logging for the \c moduleloader category, use the following command:
    \code
    QT_LOGGING_RULES="qbs.moduleloader.debug=true" qbs resolve
    \endcode

    To list all the files in the project directory and show whether they are known to qbs in the
    respective configuration, use the \c{qbs status} command:
    \code
    qbs status config:release
    \endcode

    \section1 How do I sign an application for an Apple platform?

    To sign an application for an Apple platform, you need to use the \l{codesign} module.

    \code
        Depends { name: "codesign" }
    \endcode

    Several properties should be set to do signing as shown below.

    Make sure that bundle and team indentifiers match the one used for signing:

    \code
        bundle.identifierPrefix: "com.johndoe"
        codesign.teamIdentifier: "John Doe"
    \endcode

    It is also possible to use an ID of the team identifier instead of a name:
    \code
        codesign.teamIdentifier: "1234ABCDEF"
    \endcode

    \QBS will then try to find the matching signing identity and provisioning profile based on
    \l{codesign::signingType}{codesign.signingType}.

    It is also possible to specify \l{codesign::signingIdentity}{codesign.signingIdentity}
    manually:

    \code
        codesign.signingIdentity: "Apple Development: johndoe@apple.com (ABCDEF1234)"
    \endcode

    It is also possible to use an ID of the signing identity instead of a name:
    \code
        codesign.signingIdentity: "ABCDEF1234567890ABCDEF1234567890ABCDEF12"
    \endcode

    If \QBS cannot find the suitable provisioning profile, you can specify it manually as well:
    \code
        codesign.provisioningProfile: "abcdef12-1234-5678-1111-abcdef123456"
    \endcode
*/
qbs-src-2.3.1/doc/qbs-online.qdocconf0000644000175100001770000000170714616416776017015 0ustar  runnerdockerinclude(config/qbs-project.qdocconf)

HTML.footer = \
    "   \n" \
    "   

\n" \ " © 2022 The Qt Company Ltd.\n" \ " Documentation contributions included herein are the copyrights of\n" \ " their respective owners. " \ " The documentation provided herein is licensed under the terms of the" \ " GNU Free Documentation" \ " License version 1.3 as published by the Free Software Foundation. " \ " Qt and respective logos are trademarks of The Qt Company Ltd " \ " in Finland and/or other countries worldwide. All other trademarks are property\n" \ " of their respective owners.

\n" include($QT_INSTALL_DOCS/global/qt-html-templates-online.qdocconf) # Add an .html file with sidebar content, used in the online style HTML.stylesheets += config/style/qt5-sidebar.html qbs-src-2.3.1/doc/targets/0000755000175100001770000000000014616416776014674 5ustar runnerdockerqbs-src-2.3.1/doc/targets/qbs-target-integrity.qdoc0000644000175100001770000000317314616416776021635 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qbs. ** ** $QT_BEGIN_LICENSE:FDL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Free Documentation License Usage ** Alternatively, this file may be used under the terms of the GNU Free ** Documentation License version 1.3 as published by the Free Software ** Foundation and appearing in the file included in the packaging of ** this file. Please review the following information to ensure ** the GNU Free Documentation License version 1.3 requirements ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. ** $QT_END_LICENSE$ ** ****************************************************************************/ /*! \page qbs-target-integrity.html \ingroup platforms \title Building for INTEGRITY \brief Platform notes for INTEGRITY. The Green Hills INTEGRITY RTOS is not yet supported but is planned for a future release. For more information about developing applications for the Green Hills INTEGRITY RTOS, see the \l{https://www.ghs.com/products/rtos/integrity.html} {INTEGRITY Product Documentation}. */ qbs-src-2.3.1/doc/targets/qbs-target-windows.qdoc0000644000175100001770000000601314616416776021305 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qbs. ** ** $QT_BEGIN_LICENSE:FDL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Free Documentation License Usage ** Alternatively, this file may be used under the terms of the GNU Free ** Documentation License version 1.3 as published by the Free Software ** Foundation and appearing in the file included in the packaging of ** this file. Please review the following information to ensure ** the GNU Free Documentation License version 1.3 requirements ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. ** $QT_END_LICENSE$ ** ****************************************************************************/ /*! \page qbs-target-windows.html \ingroup platforms \title Building for Windows \brief Platform notes for Windows. This topic describes the \QBS features specific to Windows. \note \QBS does not currently support building applications using .NET technologies and languages such as C#, F#, and Visual Basic. At this time we recommend that you use MSBuild and the tools shipped with the various implementations of the .NET platform. \section1 Windows Resources The \l{ico} module contains rules and properties for building Windows icon (.ico) and cursor (.cur) files from a set of raw PNGs. \section1 Universal Windows Platform Building applications for the Universal Windows Platform is currently only partially supported. Notably, support for building APPX packages is missing, but will be added in a future release. Relevant properties include: \list \li \l{cpp::windowsApiFamily}{cpp.windowsApiFamily} \li \l{cpp::windowsApiAdditionalPartitions} {cpp.windowsApiAdditionalPartitions} \li \l{cpp::requireAppContainer}{cpp.requireAppContainer} \endlist See the \l{cpp} module for more information. \note \QBS does not (and will not) support building Windows Runtime applications targeting Windows 8 or Windows 8.1. We encourage users to instead build desktop applications for older versions of Windows, or migrate to Windows 10 and the Universal Windows Platform. \section1 Building Windows Installers The following modules contain properties and rules for building Windows installers using a number of different technologies: \list \li \l{innosetup} - Inno Setup \li \l{nsis} - Nullsoft Scriptable Install System \li \l{wix} - Windows Installer XML Toolset \endlist */ qbs-src-2.3.1/doc/targets/qbs-target-vxworks.qdoc0000644000175100001770000000314714616416776021343 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qbs. ** ** $QT_BEGIN_LICENSE:FDL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Free Documentation License Usage ** Alternatively, this file may be used under the terms of the GNU Free ** Documentation License version 1.3 as published by the Free Software ** Foundation and appearing in the file included in the packaging of ** this file. Please review the following information to ensure ** the GNU Free Documentation License version 1.3 requirements ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. ** $QT_END_LICENSE$ ** ****************************************************************************/ /*! \page qbs-target-vxworks.html \ingroup platforms \title Building for VxWorks \brief Platform notes for VxWorks. The Wind River VxWorks RTOS is not yet supported but is planned for a future release. For more information about developing applications for the WindRiver VxWorks RTOS, see the \l{https://www.windriver.com/products/vxworks/} {VxWorks Product Documentation}. */ qbs-src-2.3.1/doc/targets/qbs-target-macos.qdoc0000644000175100001770000000620014616416776020713 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qbs. ** ** $QT_BEGIN_LICENSE:FDL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Free Documentation License Usage ** Alternatively, this file may be used under the terms of the GNU Free ** Documentation License version 1.3 as published by the Free Software ** Foundation and appearing in the file included in the packaging of ** this file. Please review the following information to ensure ** the GNU Free Documentation License version 1.3 requirements ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. ** $QT_END_LICENSE$ ** ****************************************************************************/ /*! \page qbs-target-macos.html \ingroup platforms \title Building for macOS \brief Platform notes for macOS. This topic describes the \QBS features specific to macOS. \include qbs-target-apple-common.qdocinc xcode \include qbs-target-apple-common.qdocinc building user interfaces \include qbs-target-apple-common.qdocinc creating app bundles \include qbs-target-apple-common.qdocinc architectures and variants \section1 Building macOS Disk Images The \l{AppleDiskImage} and \l{AppleApplicationDiskImage} items have a dependency on the \l{dmg} module. The former represents a product that is a basic Apple disk image, while the latter extends the former to create a drag 'n' drop disk image installer used for installing single application bundles. For example, the following code snippet creates a macOS disk image with a custom background and icon layout: \code AppleApplicationDiskImage { targetName: "cocoa-application-" + version version: "1.0" files: [ "CocoaApplication/dmg.iconset", "CocoaApplication/en_US.lproj/LICENSE", // comment out the following line to use a solid-color background // (see dmg.backgroundColor below) "CocoaApplication/background*" ] dmg.backgroundColor: "#41cd52" dmg.badgeVolumeIcon: true dmg.iconPositions: [ {"x": 200, "y": 200, "path": "Cocoa Application.app"}, {"x": 400, "y": 200, "path": "Applications"} ] dmg.windowX: 420 dmg.windowY: 250 dmg.windowWidth: 600 dmg.windowHeight: 422 // this includes the macOS title bar height of 22 dmg.iconSize: 64 } \endcode \image qbs-dmg.png In addition, \QBS supports multi-language license agreement prompts that appear when the DMG is opened, with full Unicode and rich-text formatting support. */ qbs-src-2.3.1/doc/targets/qbs-target-watchos.qdoc0000644000175100001770000000322414616416776021264 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qbs. ** ** $QT_BEGIN_LICENSE:FDL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Free Documentation License Usage ** Alternatively, this file may be used under the terms of the GNU Free ** Documentation License version 1.3 as published by the Free Software ** Foundation and appearing in the file included in the packaging of ** this file. Please review the following information to ensure ** the GNU Free Documentation License version 1.3 requirements ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. ** $QT_END_LICENSE$ ** ****************************************************************************/ /*! \page qbs-target-watchos.html \ingroup platforms \title Building for watchOS \brief Platform notes for watchOS. This topic describes the \QBS features specific to watchOS. \include qbs-target-apple-common.qdocinc xcode \include qbs-target-apple-common.qdocinc building user interfaces \include qbs-target-apple-common.qdocinc creating app bundles \include qbs-target-apple-common.qdocinc architectures and variants */ qbs-src-2.3.1/doc/targets/qbs-target-android.qdoc0000644000175100001770000000622114616416776021234 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qbs. ** ** $QT_BEGIN_LICENSE:FDL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Free Documentation License Usage ** Alternatively, this file may be used under the terms of the GNU Free ** Documentation License version 1.3 as published by the Free Software ** Foundation and appearing in the file included in the packaging of ** this file. Please review the following information to ensure ** the GNU Free Documentation License version 1.3 requirements ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. ** $QT_END_LICENSE$ ** ****************************************************************************/ /*! \page qbs-target-android.html \ingroup platforms \title Building for Android \brief Platform notes for Android. To develop applications for Android, you need development tools provided by the Android SDK from Google, and (optionally) a C/C++ toolchain provided by the Android NDK. \note \QBS does not yet support the Kotlin programming language. \section1 Creating Android Application Packages On Android, applications are distributed in a specially structured type of ZIP package called an APK. The following files should be created and bundled into an APK: \list \li Android assets. \li Android resource files. \li AndroidManifest.xml, which provides meta-information about your application. \li Compiled Java code, which serves as the entry point into your application and that automatically executes the native code in your application (if there is any). \li Shared libraries containing native code. \endlist You can use the \l{Application} item to build application packages for Android. If the \l{qbs::targetPlatform}{target platform} is \c{"android"}, then the Application item has a dependency on the \l{Android.sdk} module, which contains the properties and rules to create Android application packages from source files. You can use the \l{DynamicLibrary} item to build native Android libraries that are bundled into the APK. The \c qbs.architectures property specifies the architectures to build for, with the default value \c armv7a. If you have only one native library, you can simply list its sources within the main Application item, and it will get built and packaged automatically. The \l{DynamicLibrary} item, as well as the \l CppApplication item, has a dependency on the \l{Android.ndk} module, and contains the properties and rules to create native libraries. */ qbs-src-2.3.1/doc/targets/qbs-target-apple-common.qdocinc0000644000175100001770000001010014616416776022664 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qbs. ** ** $QT_BEGIN_LICENSE:FDL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Free Documentation License Usage ** Alternatively, this file may be used under the terms of the GNU Free ** Documentation License version 1.3 as published by the Free Software ** Foundation and appearing in the file included in the packaging of ** this file. Please review the following information to ensure ** the GNU Free Documentation License version 1.3 requirements ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. ** $QT_END_LICENSE$ ** ****************************************************************************/ /*! //! [xcode] \note \QBS does not yet support the Swift programming language. The \l{xcode} module contains properties and rules for Xcode-based development. //! [xcode] //! [building user interfaces] \section1 Building User Interfaces The \l{ib} module contains properties and rules for building Interface Builder documents, storyboards, asset catalogs, and icon sets. //! [building user interfaces] //! [creating app bundles] \section1 Creating App Bundles The \l{bundle} module contains properties and rules for building and working with Core Foundation bundles (application bundles and frameworks) on Apple platforms. To build an application product as a bundle, or a dynamic or static library product as a framework, add a dependency on the bundle module and set the \l{bundle::isBundle}{bundle.isBundle} property to \c true: \code Depends { name: "bundle" } bundle.isBundle: true \endcode \QBS also provides a number of powerful features to assist in creating the Info.plist file that is part of your bundle. In fact, you do not need to provide an Info.plist file at all. Instead, \QBS will generate one automatically with the necessary keys, based on the values of module properties set in the product. If you do specify an Info.plist file, \QBS may still inject additional keys into the final output from other sources. One notable source of Info.plist keys are \e partial Info.plist files which are generated as a result of compiling other resources like asset catalogs, XIBs/NIBs, and storyboards. You may also use the \c bundle.infoPlist property to apply a set of key-value pairs to be added to the final Info.plist. This can be used instead of or in addition to an actual Info.plist file on disk. //! [creating app bundles] //! [architectures and variants] \section1 Multiple Architectures and Build Variants \QBS uses \l{Multiplexing}{multiplexing} to create multi-architecture \e fat binaries and multi-variant frameworks, where a single framework can contain both a release and debug build of a library on Apple platforms. You can set the \c qbs.architectures property to a list of CPU architectures (such as \c x86, \c x86_64, \c armv7a, \c armv7k, and \c arm64), and the \c qbs.buildVariants property to a list of build variants (such as \c debug and \c release), and \QBS will transparently perform the necessary steps to produce the various artifacts and combine them into a single bundle. Since the individual build configurations are completely independent of one another, you can continue to use conditional branches in your projects such as the following: \code Properties { condition: qbs.buildVariant === "release" cpp.optimization: "small" } \endcode //! [architectures and variants] */ qbs-src-2.3.1/doc/targets/qbs-target-tvos.qdoc0000644000175100001770000000321014616416776020602 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qbs. ** ** $QT_BEGIN_LICENSE:FDL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Free Documentation License Usage ** Alternatively, this file may be used under the terms of the GNU Free ** Documentation License version 1.3 as published by the Free Software ** Foundation and appearing in the file included in the packaging of ** this file. Please review the following information to ensure ** the GNU Free Documentation License version 1.3 requirements ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. ** $QT_END_LICENSE$ ** ****************************************************************************/ /*! \page qbs-target-tvos.html \ingroup platforms \title Building for tvOS \brief Platform notes for tvOS. This topic describes the \QBS features specific to tvOS. \include qbs-target-apple-common.qdocinc xcode \include qbs-target-apple-common.qdocinc building user interfaces \include qbs-target-apple-common.qdocinc creating app bundles \include qbs-target-apple-common.qdocinc architectures and variants */ qbs-src-2.3.1/doc/targets/qbs-target-qnx.qdoc0000644000175100001770000000522514616416776020425 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qbs. ** ** $QT_BEGIN_LICENSE:FDL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Free Documentation License Usage ** Alternatively, this file may be used under the terms of the GNU Free ** Documentation License version 1.3 as published by the Free Software ** Foundation and appearing in the file included in the packaging of ** this file. Please review the following information to ensure ** the GNU Free Documentation License version 1.3 requirements ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. ** $QT_END_LICENSE$ ** ****************************************************************************/ /*! \page qbs-target-qnx.html \ingroup platforms \title Building for QNX \brief Platform notes for QNX. To develop applications for the QNX Neutrino RTOS, you need to install the QNX Software Development Platform (SDP) on a Linux, macOS, or Windows development host. You can deploy the QNX Neutrino RTOS on a target system, such as embedded hardware, a virtual machine, or a PC. \QBS automatically determines the location of the SDP base directory if the SDP is installed at one of the standard locations, such as \c ~/qnx700, \c /opt/qnx700, or \c C:\qnx700. In addition, \QBS uses the SDP and the information it has about the host operating system to determine the location of the QNX host and target directories. If the QNX SDP path could not be determined automatically, you must add a dependency to the \l{qnx} module to your application and set the \l{qnx::sdkDir}{qnx.sdkDir} property: \code Application { name: "helloworld" files: "main.cpp" Depends { name: "cpp" } Depends { name: "qnx" } qnx.sdkDir: "/path/to/qnx700" } \endcode Alternatively, you can set the \c qnx.sdkDir property in a profile or on the command line. \QBS supports QNX SDP version 6.5 and above. For more information about developing applications for the QNX Neutrino RTOS, see the \l{http://www.qnx.com/developers/docs/} {QNX Product Documentation}. */ qbs-src-2.3.1/doc/targets/qbs-target-platforms.qdoc0000644000175100001770000000427114616416776021626 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qbs. ** ** $QT_BEGIN_LICENSE:FDL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Free Documentation License Usage ** Alternatively, this file may be used under the terms of the GNU Free ** Documentation License version 1.3 as published by the Free Software ** Foundation and appearing in the file included in the packaging of ** this file. Please review the following information to ensure ** the GNU Free Documentation License version 1.3 requirements ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. ** $QT_END_LICENSE$ ** ****************************************************************************/ /*! \previouspage installing-files.html \group platforms \nextpage shell.html \title Target Platforms \QBS has built-in support for building applications for all major platforms. Platform support is implemented as a set of \l{List of Modules}{modules} that products depend on. The following topics describe the features specific to a particular platform, point out things to look out for, and provide tips for fully benefiting from the \QBS functions. In addition to the platforms explicitly listed below, \QBS should generally work on other UNIX and Unix-like platforms but these are not regularly tested or officially supported. \QBS recognizes the existence of at least AIX, HP-UX, Solaris, FreeBSD, NetBSD, OpenBSD, GNU Hurd, and Haiku, but provides no explicit support (except some minimal support for FreeBSD). For instructions on how to setup the target platform, see the \l {qbs::targetPlatform}{qbs.targetPlatform} property. */ qbs-src-2.3.1/doc/targets/qbs-target-ios.qdoc0000644000175100001770000000320414616416776020404 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qbs. ** ** $QT_BEGIN_LICENSE:FDL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Free Documentation License Usage ** Alternatively, this file may be used under the terms of the GNU Free ** Documentation License version 1.3 as published by the Free Software ** Foundation and appearing in the file included in the packaging of ** this file. Please review the following information to ensure ** the GNU Free Documentation License version 1.3 requirements ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. ** $QT_END_LICENSE$ ** ****************************************************************************/ /*! \page qbs-target-ios.html \ingroup platforms \title Building for iOS \brief Platform notes for iOS. This topic describes the \QBS features specific to iOS. \include qbs-target-apple-common.qdocinc xcode \include qbs-target-apple-common.qdocinc building user interfaces \include qbs-target-apple-common.qdocinc creating app bundles \include qbs-target-apple-common.qdocinc architectures and variants */ qbs-src-2.3.1/doc/targets/qbs-target-linux.qdoc0000644000175100001770000000266714616416776020765 0ustar runnerdocker/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qbs. ** ** $QT_BEGIN_LICENSE:FDL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Free Documentation License Usage ** Alternatively, this file may be used under the terms of the GNU Free ** Documentation License version 1.3 as published by the Free Software ** Foundation and appearing in the file included in the packaging of ** this file. Please review the following information to ensure ** the GNU Free Documentation License version 1.3 requirements ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. ** $QT_END_LICENSE$ ** ****************************************************************************/ /*! \page qbs-target-linux.html \ingroup platforms \title Building for Linux \brief Platform notes for Linux. To develop applications for Linux, you need a GCC or Clang toolchain installed on your host machine. */ qbs-src-2.3.1/doc/config/0000755000175100001770000000000014616416776014470 5ustar runnerdockerqbs-src-2.3.1/doc/config/qbs-project.qdocconf0000644000175100001770000000220114616416776020432 0ustar runnerdockerinclude($QT_INSTALL_DOCS/global/qt-cpp-defines.qdocconf) include($QT_INSTALL_DOCS/global/compat.qdocconf) include($QT_INSTALL_DOCS/global/fileextensions.qdocconf) project = "Qbs" description = "Qbs Manual" #Words to ignore for auto-linking ignorewords += macOS headerdirs = sourcedirs = .. imagedirs = ../images ../templates/images exampledirs = .. include(macros.qdocconf) sources.fileextensions = "*.qdoc" qhp.projects = Qbs qhp.Qbs.file = qbs.qhp qhp.Qbs.namespace = org.qt-project.qbs.$QBS_VERSION_TAG qhp.Qbs.virtualFolder = doc qhp.Qbs.indexTitle = Qbs qhp.Qbs.filterAttributes = qbs $QBS_VERSION qhp.Qbs.customFilters.Qbs.name = Qbs $QBS_VERSION qhp.Qbs.customFilters.Qbs.filterAttributes = qbs $QBS_VERSION qhp.Qbs.indexRoot = qhp.Qbs.subprojects = manual qhp.Qbs.subprojects.manual.title = Qbs Manual qhp.Qbs.subprojects.manual.indexTitle = Qbs Manual qhp.Qbs.subprojects.manual.type = manual # Doxygen compatibility commands macro.see = "\\sa" macro.function = "\\fn" navigation.homepage = "Qbs Manual" buildversion = "Qbs $QBS_VERSION" qbs-src-2.3.1/doc/config/macros.qdocconf0000644000175100001770000000560114616416776017474 0ustar runnerdockermacro.QBS = "Qbs" macro.qbsversion = $QBS_VERSION macro.defaultvalue = "Default:" macro.nodefaultvalue = "Default: Undefined" macro.appleproperty = "This property is specific to Apple platforms." macro.androidproperty = "This property is specific to Android platforms." macro.unixproperty = "This property is specific to Unix platforms." macro.windowsproperty = "This property is specific to Windows." macro.baremetalproperty = "This property is specific to bare-metal platforms." macro.funsince.HTML = "

This function was introduced in version \1.

" macro.aacute.HTML = "á" macro.Aring.HTML = "Å" macro.aring.HTML = "å" macro.Auml.HTML = "Ä" macro.author = "\\b{Author:}" macro.BR.HTML = "
" macro.copyright.HTML = "©" macro.eacute.HTML = "é" macro.gui = "\\b" macro.HR.HTML = "
" macro.iacute.HTML = "í" macro.key = "\\b" macro.macos = "macOS" macro.menu = "\\b" macro.oslash.HTML = "ø" macro.ouml.HTML = "ö" macro.QA = "\\e{Qt Assistant}" macro.QD = "\\e{Qt Designer}" macro.QL = "\\e{Qt Linguist}" macro.QQV = "\\e{Qt QML Viewer}" macro.param = "\\e" macro.raisedaster.HTML = "*" macro.rarrow.HTML = "→" macro.reg.HTML = "®" macro.return = "Returns" macro.starslash = "\\c{*/}" macro.begincomment = "\\c{/*}" macro.endcomment = "\\c{*/}" macro.uuml.HTML = "ü" macro.mdash.HTML = "—" macro.pi.HTML = "Π" macro.beginqdoc.HTML = "/*!" macro.endqdoc.HTML = "*/" macro.borderedimage = "\\div {class=\"border\"} \\image \1\n\\enddiv" macro.beginfloatleft.HTML = "