[
  {
    "path": ".bazelignore",
    "content": "# Exclude Bazel roots (workspaces)\nc/fuzz\ngo\njava\njs\nresearch\n"
  },
  {
    "path": ".editorconfig",
    "content": "# http://editorconfig.org\n# Consistent coding style across different editors.\n\n# Top-most file\nroot = true\n\n# Global styles:\n#   - indent 2 spaces\n#   - add final new line\n#   - trim trailing whitespace\n[*]\ncharset = utf-8\nend_of_line = lf\nindent_size = 2\nindent_style = space\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n# BUILD:\n#   - indent 4 spaces\n[BUILD]\nindent_size = 4\n\n# Makefile:\n#   - indent 1 tab\n[Makefile]\nindent_size = tab\nindent_style = tab\n\n# Markdown:\n#   - indent 4 spaces\n#   - trailing whitespace is significant\n[*.md]\nindent_size = 4\ntrim_trailing_whitespace = false\n\n# Python\n#   - indent 4 spaces\n[*.py]\nindent_size = 4\n"
  },
  {
    "path": ".gitattributes",
    "content": "tests/testdata/* binary\n\n# Exclude everything\n**/** export-ignore\n\n# Allowlist some filenames\n.bazelignore !export-ignore\nBUILD.bazel !export-ignore\nCHANGELOG.md !export-ignore\nCMakeLists.txt !export-ignore\nCONTRIBUTING.md !export-ignore\nLICENSE !export-ignore\nMANIFEST.in !export-ignore\nMODULE.bazel !export-ignore\nREADME !export-ignore\nREADME.md !export-ignore\nSECURITY.md !export-ignore\nsetup.cfg !export-ignore\nsetup.py !export-ignore\n\n# Add sources\nc !export-ignore\nc/** !export-ignore\nc/common/dictionary.bin* export-ignore\nc/fuzz export-ignore\n\n# Add man pages\ndocs !export-ignore\ndocs/** !export-ignore\ndocs/brotli-comparison-study-2015-09-22.pdf export-ignore\n\n# Add python bindings + tests\npython !export-ignore\npython/** !export-ignore\n\n# Add go bindings + tests\ngo !export-ignore\ngo/** !export-ignore\n\n# Add more build files.\nscripts !export-ignore\nscripts/download_testdata.sh !export-ignore\nscripts/libbrotli*.pc.in !export-ignore\n\n# Add testdata\ntests !export-ignore\ntests/*.sh !export-ignore\ntests/*.cmake !export-ignore\ntests/testdata !export-ignore\ntests/testdata/empty !export-ignore\ntests/testdata/empty.compressed !export-ignore\ntests/testdata/ukkonooa !export-ignore\ntests/testdata/ukkonooa.compressed !export-ignore\ntests/testdata/zerosukkanooa.compressed !export-ignore\n\n# Add JNI wrappers\njava !export-ignore\njava/org !export-ignore\njava/org/brotli !export-ignore\njava/org/brotli/wrapper !export-ignore\njava/org/brotli/wrapper/** !export-ignore\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "# Copyright 2023 Google Inc. All Rights Reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\nversion: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n"
  },
  {
    "path": ".github/workflows/build_test.yml",
    "content": "# Copyright 2021 Google Inc. All Rights Reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\n# Workflow for building and running tests under Ubuntu\n\nname: Build/Test\n\non:\n  push:\n    branches:\n      - master\n  pull_request:\n    types: [opened, reopened, labeled, unlabeled, synchronize]\n\npermissions:\n  contents: read\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}\n  cancel-in-progress: ${{ github.event_name == 'pull_request' }}\n\njobs:\n  build_test:\n    name: Build and test ${{ matrix.name }}\n    runs-on: ${{ matrix.os || 'ubuntu-latest' }}\n    defaults:\n      run:\n        shell: bash\n    strategy:\n      fail-fast: false\n      matrix:\n        include:\n          - name: cmake:gcc\n            build_system: cmake\n            c_compiler: gcc\n            cxx_compiler: g++\n\n          - name: cmake:gcc-old\n            build_system: cmake\n            c_compiler: gcc\n            cxx_compiler: g++\n            os: ubuntu-22.04\n\n          - name: cmake:clang\n            build_system: cmake\n            c_compiler: clang\n            cxx_compiler: clang\n\n          - name: cmake:clang-old\n            build_system: cmake\n            c_compiler: clang\n            cxx_compiler: clang\n            os: ubuntu-22.04\n\n          - name: cmake:package\n            build_system: cmake\n            cmake_args: -DBROTLI_BUILD_FOR_PACKAGE=ON\n\n          - name: cmake:static\n            build_system: cmake\n            cmake_args: -DBUILD_SHARED_LIBS=OFF\n\n          - name: cmake:clang:asan\n            build_system: cmake\n            sanitizer: address\n            c_compiler: clang\n            cxx_compiler: clang++\n\n          - name: cmake:clang:tsan\n            build_system: cmake\n            sanitizer: thread\n            c_compiler: clang\n            cxx_compiler: clang++\n\n          - name: cmake:clang:ubsan\n            build_system: cmake\n            sanitizer: undefined\n            c_compiler: clang\n            cxx_compiler: clang++\n            c_flags: -fno-sanitize-recover=undefined,integer\n\n          - name: cmake:qemu-arm-neon-gcc\n            build_system: cmake\n            c_compiler: arm-linux-gnueabihf-gcc\n            cxx_compiler: arm-linux-gnueabihf-g++\n            c_flags: -march=armv7-a -mfloat-abi=hard -mfpu=neon\n            extra_apt_pkgs: gcc-arm-linux-gnueabihf libc6-dev-armhf-cross qemu-user\n\n          - name: cmake-osx:clang\n            build_system: cmake\n            c_compiler: clang\n            cxx_compiler: clang++\n            os: macos-latest\n\n          - name: cmake-osx:gcc\n            build_system: cmake\n            c_compiler: gcc\n            cxx_compiler: g++\n            os: macos-latest\n\n          - name: cmake-ios:clang\n            build_system: cmake\n            c_compiler: clang\n            cxx_compiler: clang++\n            os: macos-latest\n            skip_tests: true  # TODO(eustas): run tests in a simulator\n            cmake_args: >-\n              -DCMAKE_SYSTEM_NAME=iOS\n              -DCMAKE_OSX_ARCHITECTURES=arm64\n\n          - name: cmake-win64:msvc-rel\n            build_system: cmake\n            cmake_generator: Visual Studio 17 2022\n            cmake_config: Release\n            os: windows-latest\n\n          - name: cmake-win64:msvc-dbg\n            build_system: cmake\n            cmake_generator: Visual Studio 17 2022\n            cmake_config: Debug\n            os: windows-latest\n\n          - name: fuzz:clang\n            build_system: fuzz\n            c_compiler: clang\n            cxx_compiler: clang++\n\n          - name: python3.10:clang\n            build_system: python\n            python_version: \"3.10\"\n            c_compiler: clang\n            cxx_compiler: clang++\n\n          - name: python3.14:clang\n            build_system: python\n            python_version: \"3.14\"\n            c_compiler: clang\n            cxx_compiler: clang++\n\n          - name: python3.14t:clang\n            build_system: python\n            python_version: \"3.14t\"\n            c_compiler: clang\n            cxx_compiler: clang++\n\n          - name: python3.14-win\n            build_system: python\n            python_version: \"3.14\"\n            os: windows-latest\n\n          - name: maven\n            build_system: maven\n\n          - name: bazel:root\n            build_system: bazel\n            bazel_project: .\n\n          - name: bazel:go\n            build_system: bazel\n            bazel_project: go\n\n          - name: bazel:java\n            build_system: bazel\n            bazel_project: java\n\n          - name: bazel:research\n            build_system: bazel\n            bazel_project: research\n\n          - name: bazel-osx:root\n            build_system: bazel\n            bazel_project: .\n            os: macos-latest\n\n          - name: bazel-osx:go\n            build_system: bazel\n            bazel_project: go\n            os: macos-latest\n\n          - name: bazel-osx:java\n            build_system: bazel\n            bazel_project: java\n            os: macos-latest\n\n          - name: bazel-osx:research\n            build_system: bazel\n            bazel_project: research\n            os: macos-latest\n\n          - name: bazel-win:root\n            build_system: bazel\n            bazel_project: .\n            os: windows-latest\n\n          # TODO(eustas): restore when go is fixed\n          #- name: bazel-win:go\n          #  build_system: bazel\n          #  bazel_project: go\n          #  os: windows-latest\n\n          # TODO(eustas): restore when kotlin is fixed\n          #- name: bazel-win:java\n          #  build_system: bazel\n          #  bazel_project: java\n          #  os: windows-latest\n\n          - name: bazel-win:research\n            build_system: bazel\n            bazel_project: research\n            os: windows-latest\n\n    env:\n      CC: ${{ matrix.c_compiler || 'gcc' }}\n      CXX: ${{ matrix.cxx_compiler || 'gcc' }}\n\n    steps:\n\n    - name: Harden Runner\n      uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2\n      with:\n        egress-policy: audit\n\n    - name: Install extra deps @ Ubuntu\n      if: ${{ runner.os == 'Linux' }}\n      # Already installed: bazel, clang{13-15}, cmake, gcc{9.5-13.1}, java{8,11,17,21}, maven, python{3.10}\n      run: |\n        EXTRA_PACKAGES=\"${{ matrix.extra_apt_pkgs || '' }}\"\n        sudo apt update\n        sudo apt install -y ${EXTRA_PACKAGES}\n\n    - name: Checkout the source\n      uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0\n      with:\n        submodules: false\n        fetch-depth: 1\n\n    - name: Configure / Build / Test with CMake\n      if: ${{ matrix.build_system == 'cmake' }}\n      run: |\n        export ASAN_OPTIONS=detect_leaks=0\n        declare -a CMAKE_OPTIONS=(${{ matrix.cmake_args || '' }})\n        CMAKE_OPTIONS+=(\"-DCMAKE_VERBOSE_MAKEFILE=ON\")\n        [ ! -z '${{ matrix.c_compiler || '' }}' ] && CMAKE_OPTIONS+=(-DCMAKE_C_COMPILER='${{ matrix.c_compiler }}')\n        [ ! -z '${{ matrix.cxx_compiler || '' }}' ] && CMAKE_OPTIONS+=(-DCMAKE_CXX_COMPILER='${{ matrix.cxx_compiler }}')\n        [ ! -z '${{ matrix.sanitizer || '' }}' ] && CMAKE_OPTIONS+=(-DENABLE_SANITIZER='${{ matrix.sanitizer }}')\n        [ ! -z '${{ matrix.cmake_generator || '' }}' ] && export CMAKE_GENERATOR='${{ matrix.cmake_generator }}'\n        declare -a CMAKE_BUILD_OPTIONS=()\n        [ ! -z '${{ matrix.cmake_config || '' }}' ] && CMAKE_BUILD_OPTIONS+=(--config '${{ matrix.cmake_config }}')\n        declare -a CMAKE_TEST_OPTIONS=()\n        [ ! -z '${{ matrix.cmake_config || '' }}' ] && CMAKE_TEST_OPTIONS+=(-C '${{ matrix.cmake_config }}')\n\n        cmake -B out . ${CMAKE_OPTIONS[*]} -DCMAKE_C_FLAGS='${{ matrix.c_flags || '' }}'\n        cmake --build out ${CMAKE_BUILD_OPTIONS[*]}\n        cd out\n        [ ! -z '${{ matrix.skip_tests || '' }}' ] || ctest ${CMAKE_TEST_OPTIONS[*]}\n        cd ..\n\n    - name: Quick Fuzz\n      if: ${{ matrix.build_system == 'fuzz' }}\n      run: |\n        mkdir ${RUNNER_TEMP}/decode_corpora\n        unzip java/org/brotli/integration/fuzz_data.zip -d ${RUNNER_TEMP}/decode_corpora\n        cd ${GITHUB_WORKSPACE}/c/fuzz\n        bazelisk build --config=asan-libfuzzer :decode_fuzzer\n        for f in `ls ${RUNNER_TEMP}/decode_corpora`\n        do\n          echo \"Testing $f\"\n          ./bazel-bin/decode_fuzzer_bin ${RUNNER_TEMP}/decode_corpora/$f\n        done\n\n    - name: Build with Bazel\n      if: ${{ matrix.build_system == 'bazel' }}\n      run: |\n        cd ${GITHUB_WORKSPACE}/${{ matrix.bazel_project }}\n        bazelisk build -c opt ...:all --java_runtime_version=remotejdk_21\n\n    - name: Fix symlinks for Bazel (Windows)\n      if: ${{ matrix.build_system == 'bazel' && runner.os == 'Windows' && matrix.bazel_project == 'java' }}\n      shell: python\n      run: |\n        import fnmatch\n        import os\n        import os.path\n        from shutil import copyfile\n        os.chdir('${{ matrix.bazel_project }}')\n        print('Searching for manifests in ' + os.getcwd())\n        matches = []\n        for root, dirnames, filenames in os.walk('bazel-bin\\\\org\\\\brotli'):\n          for filename in fnmatch.filter(filenames, '*.runfiles_manifest'):\n            matches.append(os.path.join(root, filename))\n        for match in matches:\n          print('Scanning manifest ' + match)\n          runfiles = match[:-len('_manifest')]\n          with open(match) as manifest:\n            for entry in manifest:\n              entry = entry.strip()\n              if not entry.startswith(\"_main\"):\n                continue\n              if entry.startswith(\"_main/external\"):\n                continue\n              (alias, space, link) = entry.partition(' ')\n              if alias.endswith('.jar') or alias.endswith('.exe'):\n                continue\n              link = link.replace('/', '\\\\')\n              alias = alias.replace('/', '\\\\')\n              dst = os.path.join(runfiles, alias)\n              if not os.path.exists(dst):\n                print(link + ' -> ' + dst)\n                parent = os.path.dirname(dst)\n                if not os.path.exists(parent):\n                  os.makedirs(parent)\n                copyfile(link, dst)\n        print('Finished resolving symlinks')\n\n    - name: Test with Bazel\n      if: ${{ matrix.build_system == 'bazel' }}\n      run: |\n        cd ${GITHUB_WORKSPACE}/${{ matrix.bazel_project }}\n        bazelisk query \"tests(...)\" --output=label > ${RUNNER_TEMP}/tests.lst\n        [ -s ${RUNNER_TEMP}/tests.lst ] && bazelisk test -c opt ...:all --java_runtime_version=remotejdk_21\n        bazelisk clean\n\n    - name: Build / Test with Maven\n      if: ${{ matrix.build_system == 'maven' }}\n      run: |\n        export MAVEN_OPTS=-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn\n        cd java/org/brotli\n        mvn -B install\n        # TODO(eustas): nuke maven build?\n        # cd integration\n        # mvn -B verify\n\n    - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0\n      if: ${{ matrix.build_system == 'python' }}\n      with:\n        python-version: ${{ matrix.python_version }}\n\n     # TODO(eustas): use modern setuptools (split out testing)\n    - name: Build / Test with Python\n      if: ${{ matrix.build_system == 'python' }}\n      run: |\n        python -VV\n        pip install \"setuptools>=70.0.0\" pytest\n        python setup.py build_ext --inplace\n        pytest ./python/tests\n\n  build_test_dotnet:\n    name: Build and test with .NET\n    runs-on: ubuntu-latest\n    steps:\n\n    - name: Checkout the source\n      uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0\n      with:\n        submodules: false\n        fetch-depth: 1\n\n    - name: Build / Test\n      run: |\n        cd csharp\n        dotnet build brotlidec.csproj --configuration Release\n        dotnet test brotlidec.Tests.csproj\n\n"
  },
  {
    "path": ".github/workflows/build_test_wasm.yml",
    "content": "# Copyright 2025 Google Inc. All Rights Reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\n# Workflow for building and running tests with WASM\n\nname: Build/Test WASM\n\non:\n  push:\n    branches:\n      - master\n  pull_request:\n    types: [opened, reopened, labeled, unlabeled, synchronize]\n\npermissions:\n  contents: read\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}\n  cancel-in-progress: ${{ github.event_name == 'pull_request' }}\n\njobs:\n  build_test_wasm:\n    name: Build and test with WASM\n    runs-on: ubuntu-latest\n    env:\n      CCACHE_DIR: ${{ github.workspace }}/.ccache\n      BUILD_TARGET: wasm32\n      EM_VERSION: 3.1.51\n      # As of 28.08.2025 ubuntu-latest is 24.04; it is shipped with node 22.18\n      NODE_VERSION: 22\n\n    steps:\n\n    - name: Harden Runner\n      uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2\n      with:\n        egress-policy: audit\n\n    - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0\n      with:\n        submodules: true\n        fetch-depth: 1\n\n    - name: Install node\n      uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0\n      with:\n        node-version: ${{env.NODE_VERSION}}\n\n    - name: Get non-EMSDK node path\n      run: which node >> $HOME/.base_node_path\n\n    - name: Install emsdk\n      uses: mymindstorm/setup-emsdk@6ab9eb1bda2574c4ddb79809fc9247783eaf9021 # v14\n      with:\n        version: ${{env.EM_VERSION}}\n        no-cache: true\n\n    - name: Set EMSDK node version\n      run: |\n        echo \"NODE_JS='$(cat $HOME/.base_node_path)'\" >> $EMSDK/.emscripten\n        emsdk construct_env\n\n    - name: Build\n      run: |\n        LDFLAGS=\" -s ALLOW_MEMORY_GROWTH=1 -s NODERAWFS=1 \" emcmake cmake -B out .\n        cmake --build out\n        cd out; ctest --output-on-failure; cd ..\n"
  },
  {
    "path": ".github/workflows/codeql.yml",
    "content": "name: \"CodeQL\"\n\non:\n  push:\n    branches: [ \"master\" ]\n  pull_request:\n    # The branches below must be a subset of the branches above\n    branches: [ \"master\" ]\n  schedule:\n    - cron: '18 15 * * 0'\n\npermissions:\n  contents: read\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}\n  cancel-in-progress: ${{ github.event_name == 'pull_request' }}\n\njobs:\n  analyze:\n    name: Analyze\n    runs-on: 'ubuntu-latest'\n    timeout-minutes: 360\n    permissions:\n      actions: read\n      contents: read\n      security-events: write\n\n    strategy:\n      fail-fast: false\n      matrix:\n        language: [ 'cpp', 'java', 'javascript', 'python' ]\n        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby', 'swift' ]\n\n    steps:\n\n    - name: Harden Runner\n      uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2\n      with:\n        egress-policy: audit\n\n    - name: Checkout repository\n      uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0\n\n    # Initializes the CodeQL tools for scanning.\n    - name: Initialize CodeQL\n      uses: github/codeql-action/init@e12f0178983d466f2f6028f5cc7a6d786fd97f4b # v3.29.5\n      with:\n        languages: ${{ matrix.language }}\n        # CodeQL is currently crashing on files with large lists:\n        #   https://github.com/github/codeql/issues/13656\n        config: |\n          paths-ignore:\n            - research\n            - js/test_data.*\n\n    - if: matrix.language == 'cpp'\n      name: Build CPP\n      uses: github/codeql-action/autobuild@e12f0178983d466f2f6028f5cc7a6d786fd97f4b # v3.29.5\n\n    - if: matrix.language == 'cpp' || matrix.language == 'java'\n      name: Build Java\n      run: |\n        cd ${GITHUB_WORKSPACE}/java\n        bazelisk build --spawn_strategy=local --nouse_action_cache -c opt ...:all\n\n    - if: matrix.language == 'javascript'\n      name: Build JS\n      uses: github/codeql-action/autobuild@e12f0178983d466f2f6028f5cc7a6d786fd97f4b # v3.29.5\n\n    - if: matrix.language == 'cpp' || matrix.language == 'python'\n      name: Build Python\n      run: |\n        python -VV\n        pip install \"setuptools>=70.0.0\"\n        python setup.py build_ext\n\n    - name: Perform CodeQL Analysis\n      uses: github/codeql-action/analyze@e12f0178983d466f2f6028f5cc7a6d786fd97f4b # v3.29.5\n      with:\n        category: \"/language:${{matrix.language}}\"\n        ref: \"${{ github.ref != 'master' && github.ref || '/refs/heads/master' }}\"\n        sha: \"${{ github.sha }}\"\n"
  },
  {
    "path": ".github/workflows/fuzz.yml",
    "content": "# Copyright 2020 Google Inc. All Rights Reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\n# Workflow for building / running oss-fuzz.\n\nname: CIFuzz\n\non: [pull_request]\n\npermissions:\n  contents: read\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}\n  cancel-in-progress: ${{ github.event_name == 'pull_request' }}\n\njobs:\n  Fuzzing:\n    runs-on: ubuntu-latest\n    steps:\n\n    - name: Harden Runner\n      uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2\n      with:\n        egress-policy: audit\n\n    - name: Build Fuzzers\n      uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@3e6a7fd7bcd631647ab9beed1fe0897498e6af39 # 22.09.2025\n      with:\n        oss-fuzz-project-name: 'brotli'\n        dry-run: false\n\n    - name: Run Fuzzers\n      uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@3e6a7fd7bcd631647ab9beed1fe0897498e6af39 # 22.09.2025\n      with:\n        oss-fuzz-project-name: 'brotli'\n        fuzz-seconds: 600\n        dry-run: false\n\n    - name: Upload Crash\n      uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2\n      if: failure()\n      with:\n        name: artifacts\n        path: ./out/artifacts\n"
  },
  {
    "path": ".github/workflows/lint.yml",
    "content": "# Copyright 2025 Google Inc. All Rights Reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\n# Workflow for checking typos and buildifier, formatting, etc.\n\nname: \"Lint\"\n\non:\n  push:\n    branches: [ \"master\" ]\n  pull_request:\n    branches: [ \"master\" ]\n  schedule:\n    - cron: '18 15 * * 0'\n\npermissions:\n  contents: read\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}\n  cancel-in-progress: ${{ github.event_name == 'pull_request' }}\n\njobs:\n  check:\n    name: Lint\n    runs-on: 'ubuntu-latest'\n\n    steps:\n\n    - name: Harden Runner\n      uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2\n      with:\n        egress-policy: audit\n\n    - name: Checkout repository\n      uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0\n\n    - name: Install tools\n      run: |\n        eval \"$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)\"\n        brew install buildifier ruff typos-cli\n\n    - name: Check typos\n      run: |\n        eval \"$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)\"\n        ./scripts/check_typos.sh\n\n    - name: Lint Python code\n      run: |\n        eval \"$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)\"\n        ruff check --extend-select=C4,C90,PERF,RET,SIM,W\n\n    # TODO(eustas): run buildifier\n"
  },
  {
    "path": ".github/workflows/release.yaml",
    "content": "# Copyright 2023 Google Inc. All Rights Reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\n# Workflow for building the release binaries.\n\nname: Release build / deploy\non:\n  push:\n    branches:\n      - master\n      - v*.*.*\n  release:\n    types: [ published ]\n  pull_request:\n    types: [opened, reopened, labeled, unlabeled, synchronize]\n\npermissions:\n  contents: read\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}\n  cancel-in-progress: ${{ github.event_name == 'pull_request' }}\n\njobs:\n  windows_build:\n    name: Windows Build (vcpkg / ${{ matrix.triplet }})\n    runs-on: ${{ matrix.runs_on }}\n    strategy:\n      fail-fast: false\n      matrix:\n        include:\n          - triplet: x86-windows-dynamic\n            arch: '-A Win32'\n            build_shared_libs: 'ON'\n            runs_on: windows-latest\n          - triplet: x64-windows-dynamic\n            arch: '-A x64'\n            build_shared_libs: 'ON'\n            runs_on: windows-latest\n          - triplet: arm64-windows-dynamic\n            arch: '-A ARM64'\n            build_shared_libs: 'ON'\n            runs_on: windows-11-arm\n          - triplet: x86-windows-static\n            arch: '-A Win32'\n            build_shared_libs: 'OFF'\n            runs_on: windows-latest\n          - triplet: x64-windows-static\n            arch: '-A x64'\n            build_shared_libs: 'OFF'\n            runs_on: windows-latest\n          - triplet: arm64-windows-static\n            arch: '-A ARM64'\n            build_shared_libs: 'OFF'\n            runs_on: windows-11-arm\n\n    env:\n      VCPKG_VERSION: '2022.11.14'\n      VCPKG_ROOT: vcpkg\n      VCPKG_DISABLE_METRICS: 1\n\n    steps:\n\n    - name: Harden Runner\n      uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2\n      with:\n        egress-policy: audit\n\n    - name: Checkout the source\n      uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0\n      with:\n        submodules: false\n        fetch-depth: 1\n\n    - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0\n      id: cache-vcpkg\n      with:\n        path: vcpkg\n        key: release-${{ runner.os }}-vcpkg-${{ env.VCPKG_VERSION }}-${{ matrix.triplet }}\n\n    - name: Download vcpkg\n      if: steps.cache-vcpkg.outputs.cache-hit != 'true'\n      shell: 'powershell'\n      run: |\n        Invoke-WebRequest -Uri \"https://github.com/microsoft/vcpkg/archive/refs/tags/${{ env.VCPKG_VERSION }}.zip\" -OutFile \"vcpkg.zip\"\n\n    - name: Bootstrap vcpkg\n      if: steps.cache-vcpkg.outputs.cache-hit != 'true'\n      shell: 'bash'\n      run: |\n        set -x\n        unzip -q vcpkg.zip\n        rm -rf ${VCPKG_ROOT}\n        mv vcpkg-${VCPKG_VERSION} ${VCPKG_ROOT}\n        ${VCPKG_ROOT}/bootstrap-vcpkg.sh\n\n    - name: Configure\n      shell: 'bash'\n      run: |\n        set -x\n        mkdir out\n        cmake -Bout -H. ${{ matrix.arch }} \\\n          -DBUILD_TESTING=OFF \\\n          -DBUILD_SHARED_LIBS=${{ matrix.build_shared_libs }} \\\n          -DCMAKE_BUILD_TYPE=Release \\\n          -DCMAKE_INSTALL_PREFIX=`pwd`/prefix \\\n          -DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake \\\n          -DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }} \\\n        #\n\n    - name: Build\n      shell: 'bash'\n      run: |\n        set -x\n        cmake --build out --config Release\n\n    - name: Install\n      shell: 'bash'\n      run: |\n        set -x\n        cmake --build out --config Release --target install\n        cp LICENSE prefix/bin/LICENSE.brotli\n\n    - name: Package release zip\n      shell: 'powershell'\n      run: |\n        Compress-Archive -Path prefix\\bin\\* `\n          -DestinationPath brotli-${{matrix.triplet}}.zip\n\n    - name: Upload package\n      uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2\n      with:\n        name: brotli-${{matrix.triplet}}\n        path: brotli-${{matrix.triplet}}.zip\n        compression-level: 0\n\n  testdata_upload:\n    name: Upload testdata\n    runs-on: 'ubuntu-latest'\n    defaults:\n      run:\n        shell: bash\n    steps:\n\n    - name: Harden Runner\n      uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2\n      with:\n        egress-policy: audit\n\n    - name: Checkout the source\n      uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0\n      with:\n        submodules: false\n        fetch-depth: 1\n\n    - name: Compress testdata\n      run: |\n        tar cvfJ testdata.txz tests/testdata\n\n    - name: Upload archive\n      uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2\n      with:\n        name: testdata\n        path: testdata.txz\n        compression-level: 0\n\n  publish_release_assets:\n    name: Publish release assets\n    needs: [windows_build, testdata_upload]\n    if: github.event_name == 'release'\n    runs-on: [ubuntu-latest]\n    permissions:\n      contents: write\n\n    steps:\n    - name: Checkout the source\n      uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0\n      with:\n        submodules: false\n        fetch-depth: 1\n\n    - name: Download all artifacts\n      uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0\n      with:\n        path: release_assets\n        merge-multiple: true\n\n    - name: Publish assets\n      env:\n        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n      run: |\n        gh release upload ${{ github.event.release.tag_name }} ./release_assets/*\n\n  archive_build:\n    needs: publish_release_assets\n    name: Build and test from archive\n    runs-on: 'ubuntu-latest'\n    defaults:\n      run:\n        shell: bash\n    steps:\n\n    - name: Harden Runner\n      uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2\n      with:\n        egress-policy: audit\n\n    - name: Checkout the source\n      uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0\n      with:\n        submodules: false\n        fetch-depth: 1\n\n    - name: Archive\n      run: |\n        git archive HEAD -o archive.tgz\n\n    - name: Pick tag\n      run: |\n        echo \"BROTLI_TAG=$(git describe --tags --abbrev=0)\" >> $GITHUB_ENV\n\n    - name: Extract\n      run: |\n        mkdir archive\n        cd archive\n        tar xvzf ../archive.tgz\n\n    - name: Download testdata\n      run: |\n        cd archive\n        scripts/download_testdata.sh\n\n    - name: Configure and Build\n      run: |\n        cd archive\n        cmake -B out .\n        cmake --build out\n\n    - name: Test\n      run: |\n        cd archive\n        cd out\n        ctest\n"
  },
  {
    "path": ".github/workflows/scorecard.yml",
    "content": "# This workflow uses actions that are not certified by GitHub. They are provided\n# by a third-party and are governed by separate terms of service, privacy\n# policy, and support documentation.\n\nname: Scorecard supply-chain security\n\non:\n  # For Branch-Protection check. Only the default branch is supported. See\n  # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection\n  branch_protection_rule:\n  # To guarantee Maintained check is occasionally updated. See\n  # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained\n  schedule:\n    - cron: '23 21 * * 1'\n  push:\n    branches: [ \"master\" ]\n\n# Declare default permissions as read only.\npermissions: read-all\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}\n  cancel-in-progress: ${{ github.event_name == 'pull_request' }}\n\njobs:\n  analysis:\n    name: Scorecard analysis\n    runs-on: ubuntu-latest\n    permissions:\n      # Needed to upload the results to code-scanning dashboard.\n      security-events: write\n      # Needed to publish results and get a badge (see publish_results below).\n      id-token: write\n      # Uncomment the permissions below if installing in a private repository.\n      # contents: read\n      # actions: read\n\n    steps:\n      - name: Harden Runner\n        uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2\n        with:\n          egress-policy: audit\n\n      - name: \"Checkout code\"\n        uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0\n        with:\n          persist-credentials: false\n\n      - name: \"Run analysis\"\n        uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3\n        with:\n          results_file: results.sarif\n          results_format: sarif\n          # (Optional) \"write\" PAT token. Uncomment the `repo_token` line below if:\n          # - you want to enable the Branch-Protection check on a *public* repository, or\n          # - you are installing Scorecard on a *private* repository\n          # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat.\n          # repo_token: ${{ secrets.SCORECARD_TOKEN }}\n\n          # Public repositories:\n          #   - Publish results to OpenSSF REST API for easy access by consumers\n          #   - Allows the repository to include the Scorecard badge.\n          #   - See https://github.com/ossf/scorecard-action#publishing-results.\n          # For private repositories:\n          #   - `publish_results` will always be set to `false`, regardless\n          #     of the value entered here.\n          publish_results: true\n\n      # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF\n      # format to the repository Actions tab.\n      - name: \"Upload artifact\"\n        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2\n        with:\n          name: SARIF file\n          path: results.sarif\n          retention-days: 5\n\n      # Upload the results to GitHub's code scanning dashboard.\n      - name: \"Upload to code-scanning\"\n        uses: github/codeql-action/upload-sarif@e12f0178983d466f2f6028f5cc7a6d786fd97f4b # v2.23.3\n        with:\n          sarif_file: results.sarif\n"
  },
  {
    "path": ".gitignore",
    "content": "# C\n*.d\n*.o\n*.obj\nbin/\nbuildfiles/\n**/obj/\ndist/\n**/bazel-*\n\n# Python\n__pycache__/\n*.py[cod]\n*.so\n*.egg-info/\n\n# Tests\n*.txt.uncompressed\n*.br\n*.unbr\n"
  },
  {
    "path": "BUILD.bazel",
    "content": "# Description:\n#   Brotli is a generic-purpose lossless compression algorithm.\n\nload(\"@rules_cc//cc:cc_binary.bzl\", \"cc_binary\")\nload(\"@rules_cc//cc:cc_library.bzl\", \"cc_library\")\n\npackage(\n    default_visibility = [\"//visibility:public\"],\n)\n\nlicenses([\"notice\"])  # MIT\n\nexports_files([\"LICENSE\"])\n\nconfig_setting(\n    name = \"clang-cl\",\n    flag_values = {\n        \"@bazel_tools//tools/cpp:compiler\": \"clang-cl\",\n    },\n    visibility = [\"//visibility:public\"],\n)\n\nconfig_setting(\n    name = \"msvc\",\n    flag_values = {\n        \"@bazel_tools//tools/cpp:compiler\": \"msvc-cl\",\n    },\n    visibility = [\"//visibility:public\"],\n)\n\nSTRICT_C_OPTIONS = select({\n    \":msvc\": [],\n    \":clang-cl\": [\n        \"/W4\",\n        \"-Wconversion\",\n        \"-Wlong-long\",\n        \"-Wmissing-declarations\",\n        \"-Wmissing-prototypes\",\n        \"-Wno-strict-aliasing\",\n        \"-Wshadow\",\n        \"-Wsign-compare\",\n        \"-Wno-sign-conversion\",\n    ],\n    \"//conditions:default\": [\n        \"--pedantic-errors\",\n        \"-Wall\",\n        \"-Wconversion\",\n        \"-Werror\",\n        \"-Wextra\",\n        \"-Wlong-long\",\n        \"-Wmissing-declarations\",\n        \"-Wmissing-prototypes\",\n        \"-Wno-strict-aliasing\",\n        \"-Wshadow\",\n        \"-Wsign-compare\",\n    ],\n})\n\nfilegroup(\n    name = \"public_headers\",\n    srcs = glob([\"c/include/brotli/*.h\"]),\n)\n\nfilegroup(\n    name = \"common_headers\",\n    srcs = glob([\"c/common/*.h\"]),\n)\n\nfilegroup(\n    name = \"common_sources\",\n    srcs = glob([\"c/common/*.c\"]),\n)\n\nfilegroup(\n    name = \"dec_headers\",\n    srcs = glob([\"c/dec/*.h\"]),\n)\n\nfilegroup(\n    name = \"dec_sources\",\n    srcs = glob([\"c/dec/*.c\"]),\n)\n\nfilegroup(\n    name = \"enc_headers\",\n    srcs = glob([\"c/enc/*.h\"]),\n)\n\nfilegroup(\n    name = \"enc_sources\",\n    srcs = glob([\"c/enc/*.c\"]),\n)\n\ncc_library(\n    name = \"brotli_inc\",\n    hdrs = [\":public_headers\"],\n    copts = STRICT_C_OPTIONS,\n    strip_include_prefix = \"c/include\",\n)\n\ncc_library(\n    name = \"brotlicommon\",\n    srcs = [\":common_sources\"],\n    hdrs = [\":common_headers\"],\n    copts = STRICT_C_OPTIONS,\n    deps = [\":brotli_inc\"],\n)\n\ncc_library(\n    name = \"brotlidec\",\n    srcs = [\":dec_sources\"],\n    hdrs = [\":dec_headers\"],\n    copts = STRICT_C_OPTIONS,\n    deps = [\":brotlicommon\"],\n)\n\ncc_library(\n    name = \"brotlienc\",\n    srcs = [\":enc_sources\"],\n    hdrs = [\":enc_headers\"],\n    copts = STRICT_C_OPTIONS,\n    linkopts = select({\n        \":clang-cl\": [],\n        \":msvc\": [],\n        \"//conditions:default\": [\"-lm\"],\n    }),\n    deps = [\":brotlicommon\"],\n)\n\ncc_binary(\n    name = \"brotli\",\n    srcs = [\"c/tools/brotli.c\"],\n    copts = STRICT_C_OPTIONS,\n    linkstatic = 1,\n    deps = [\n        \":brotlidec\",\n        \":brotlienc\",\n    ],\n)\n\nfilegroup(\n    name = \"dictionary\",\n    srcs = [\"c/common/dictionary.bin\"],\n)\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## Unreleased\n\n## [1.2.0] - 2025-10-27\n\n### SECURITY\n - python: added `Decompressor::can_accept_more_data` method and optional\n           `output_buffer_limit` argument `Decompressor::process`;\n           that allows mitigation of unexpectedly large output;\n           reported by Charles Chan (https://github.com/charleswhchan)\n\n### Added\n - **decoder / encoder: added static initialization to reduce binary size**\n - python: allow limiting decoder output (see SECURITY section)\n - CLI: `brcat` alias; allow decoding concatenated brotli streams\n - kt: pure Kotlin decoder\n - cgo: support \"raw\" dictionaries\n - build: Bazel modules\n\n### Removed\n - java: dropped `finalize()` for native entities\n\n### Fixed\n - java: in `compress` pass correct length to native encoder\n\n### Improved\n - build: install man pages\n - build: updated / fixed / refined Bazel buildfiles\n - encoder: faster encoding\n - cgo: link via pkg-config\n - python: modernize extension / allow multi-phase module initialization\n\n### Changed\n - decoder / encoder: static tables use \"small\" model (allows 2GiB+ binaries)\n\n\n## [1.1.0] - 2023-08-28\n\n### Added\n - decoder: `BrotliDecoderAttachDictionary`\n - decoder: `BrotliDecoderOnFinish` callback behind `BROTLI_REPORTING`\n - decoder: `BrotliDecoderSetMetadataCallbacks`\n - encoder: `BrotliEncoderPrepareDictionary`,\n            `BrotliEncoderDestroyPreparedDictionary`,\n            `BrotliEncoderAttachPreparedDictionary`\n - decoder: `BrotliEncoderOnFinish` callback behind `BROTLI_REPORTING`\n - common: `BrotliSharedDictionaryCreateInstance`,\n           `BrotliSharedDictionaryDestroyInstance`,\n           `BrotliSharedDictionaryAttach`\n - CLI: `--dictionary` option\n - java: encoder wrapper: `Parameters.mode`\n - java: `Brotli{Input|Output}Stream.attachDictionary`\n - java: wrapper: partial byte array input\n - typescript: decoder (transpiled from Java)\n\n### Removed\n - build: `BROTLI_BUILD_PORTABLE` option\n\n### Fixed\n - java: JNI decoder failed sometimes on power of 2 payloads\n\n### Improved\n - java / js: smaller decoder footprint\n - decoder: faster decoding\n - encoder: faster encoding\n - encoder: smaller stack frames\n\n\n## [1.0.9] - 2020-08-27\n\nRe-release of 1.0.8.\n\n\n## [1.0.8] - 2020-08-27\n\n### SECURITY\n - CVE-2020-8927: potential overflow when input chunk is >2GiB\n\n### Added\n - encoder: `BROTLI_PARAM_STREAM_OFFSET`\n\n### Improved\n - CLI: better reporting\n - CLI: workaround for \"lying feof\"\n - java: faster decoding\n - java: support \"large window\"\n - encoder: use less memory\n - release: filter sources for the tarball\n\n\n## [1.0.7] - 2018-10-23\n\n### Improved\n - decoder: faster decoding on ARM CPU\n\n\n## [1.0.6] - 2018-09-13\n\n### Fixed\n - build: AutoMake and CMake build\n - java: JDK 8<->9 incompatibility\n\n\n## [1.0.5] - 2018-06-27\n\n### Added\n - scripts: extraction of static dictionary from RFC\n\n### Improved\n - encoder: better compression at quality 1\n - encoder: better compression with \"large window\"\n\n\n## [1.0.4] - 2018-03-29\n\n### Added\n - encoder: `BROTLI_PARAM_NPOSTFIX`, `BROTLI_PARAM_NDIRECT`\n - CLI: `--large_window` option\n\n### Improved\n - encoder: better compression\n\n\n## [1.0.3] - 2018-03-02\n\n### Added\n - decoder: `BROTLI_DECODER_PARAM_LARGE_WINDOW` enum\n - encoder: `BROTLI_PARAM_LARGE_WINDOW` enum\n - java: `BrotliInputStream.setEager`\n\n### Fixed\n - build: AutoMake build in some environments\n - encoder: fix one-shot q=10 1-byte input compression\n\n### Improved\n - encoder: better font compression\n\n\n## [1.0.2] - 2017-11-28\n\n### Added\n - build: AutoMake\n - research: better dictionary generators\n\n\n## [1.0.1] - 2017-09-22\n\n### Changed\n - clarifications in `README.md`\n\n\n## [1.0.0] - 2017-09-20\n\n### Added\n - decoder: `BrotliDecoderSetParameter`\n - csharp: decoder (transpiled from Java)\n - java: JNI wrappers\n - javascript: decoder (transpiled from Java)\n - python: streaming decompression\n - research: dictionary generator\n\n### Changed\n - CLI: rename `bro` to `brotli`\n\n### Removed\n - decoder: `BrotliDecoderSetCustomDictionary`\n - encoder: `BrotliEncoderSetCustomDictionary`\n\n### Improved\n - java: faster decoding\n - encoder: faster compression\n\n\n## [0.6.0] - 2017-04-10\n\n### Added\n - CLI: `--no-copy-stat option\n - java: pure java decoder\n - build: fuzzers\n - research: `brotlidump` tool to explore brotli streams\n - go: wrapper\n\n### Removed\n - decoder: API with plain `Brotli` prefix\n\n### Deprecated\n - encoder: `BrotliEncoderInputBlockSize`, `BrotliEncoderCopyInputToRingBuffer`,\n            `BrotliEncoderWriteData`\n\n### Improved\n - encoder: faster compression\n - encoder: denser compression\n - decoder: faster decompression\n - python: release GIL\n - python: use zero-copy API\n\n\n## [0.5.2] - 2016-08-11\n\n### Added\n - common: `BROTLI_BOOL`, `BROTLI_TRUE`, `BROTLI_FALSE`\n - decoder: API with `BrotliDecoder` prefix instead of plain `Brotli`\n - build: Bazel, CMake\n\n### Deprecated\n - decoder: API with plain `Brotli` prefix\n\n### Changed\n - boolean argument / result types are re-branded as `BROTLI_BOOL`\n\n### Improved\n - build: reduced amount of warnings in various build environments\n - encoder: faster compression\n - encoder: lower memory usage\n\n\n## [0.5.0] - 2016-06-15\n\n### Added\n - common: library has been assembled from shared parts of decoder and encoder\n - encoder: C API\n\n### Removed\n - encoder: C++ API\n\n\n## [0.4.0] - 2016-06-14\n\n### Added\n - encoder: faster compression modes (quality 0 and 1)\n - decoder: `BrotliGetErrorCode`, `BrotliErrorString` and\n            `BROTLI_ERROR_CODES_LIST`\n\n### Removed\n - decoder: deprecated streaming API (using `BrotliInput`)\n\n### Fixed\n - decoder: possible pointer underflow\n\n### Improved\n - encoder: faster compression\n\n\n## [0.3.0] - 2015-12-22\n\n### LICENSE\nLicense have been upgraded to more permissive MIT.\n\n### Added\n - CLI: `--window` option\n - `tools/version.h` file\n - decoder: low level streaming API\n - decoder: custom memory manager API\n\n### Deprecated\n - decoder: streaming API using `BrotliInput` struct\n\n### Fixed\n - decoder: processing of uncompressed blocks\n - encoder: possible division by zero\n\n### Improved\n - encoder: faster decompression\n - build: more portable builds for various CPU architectures\n\n\n## [0.2.0] - 2015-09-01\n\n### Added\n - CLI: `--verbose` and `--repeat` options\n\n### Fixed\n - decoder: processing of uncompressed blocks\n - encoder: block stitching on quality 10 / 11\n\n### Improved\n - build: CI/CD integration\n - build: better test coverage\n - encoder: better compression of UTF-8 content\n - encoder: faster decompression\n\n\n## [0.1.0] - 2015-08-11\n\nInitial release.\n"
  },
  {
    "path": "CMakeLists.txt",
    "content": "# Available CMake versions:\n#  - Ubuntu  20.04 LTS   : 3.16.3\n#  - Solaris 11.4 SRU 15 : 3.15\ncmake_minimum_required(VERSION 3.15)\n\n# Since this project's version is loaded from other files, this policy\n# will help suppress the warning generated by cmake.\n# This policy is set because we can't provide \"VERSION\" in \"project\" command.\n# Use `cmake --help-policy CMP0048` for more information.\ncmake_policy(SET CMP0048 NEW)\nproject(brotli C)\n\nif (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)\n  message(STATUS \"Setting build type to Release as none was specified\")\n  set(CMAKE_BUILD_TYPE \"Release\" CACHE STRING \"Choose the type of build\" FORCE)\nelse()\n  message(STATUS \"Build type is '${CMAKE_BUILD_TYPE}'\")\nendif()\n\ninclude(CheckCSourceCompiles)\ncheck_c_source_compiles(\n  \"#if defined(__EMSCRIPTEN__)\n   int main() {return 0;}\n   #endif\"\n  BROTLI_EMSCRIPTEN\n)\nif (BROTLI_EMSCRIPTEN)\n  message(\"-- Compiler is EMSCRIPTEN\")\nelse()\n  message(\"-- Compiler is not EMSCRIPTEN\")\nendif()\n\nif (BROTLI_EMSCRIPTEN)\n  message(STATUS \"Switching to static build for EMSCRIPTEN\")\n  set(BUILD_SHARED_LIBS OFF)\nendif()\n\n# Reflect CMake variable as a build option.\noption(BUILD_SHARED_LIBS \"Build shared libraries\" ON)\nset(BROTLI_BUILD_TOOLS ON CACHE BOOL \"Build/install CLI tools\")\nset(BROTLI_BUILD_FOR_PACKAGE OFF CACHE BOOL \"Build/install both shared and static libraries\")\n\nif (BROTLI_BUILD_FOR_PACKAGE AND NOT BUILD_SHARED_LIBS)\n  message(FATAL_ERROR \"Both BROTLI_BUILD_FOR_PACKAGE and BUILD_SHARED_LIBS are set\")\nendif()\n\n# If Brotli is being bundled in another project, we don't want to\n# install anything.  However, we want to let people override this, so\n# we'll use the BROTLI_BUNDLED_MODE variable to let them do that; just\n# set it to OFF in your project before you add_subdirectory(brotli).\nget_directory_property(BROTLI_PARENT_DIRECTORY PARENT_DIRECTORY)\nif (NOT DEFINED BROTLI_BUNDLED_MODE)\n  # Bundled mode hasn't been set one way or the other, set the default\n  # depending on whether or not we are the top-level project.\n  if (BROTLI_PARENT_DIRECTORY)\n    set(BROTLI_BUNDLED_MODE ON)\n  else()\n    set(BROTLI_BUNDLED_MODE OFF)\n  endif()\nendif()  # BROTLI_BUNDLED_MODE\nmark_as_advanced(BROTLI_BUNDLED_MODE)\n\ninclude(GNUInstallDirs)\n\n# Reads macro from .h file; it is expected to be a single-line define.\nfunction(read_macro PATH MACRO OUTPUT)\n  file(STRINGS ${PATH} _line REGEX \"^#define +${MACRO} +(.+)$\")\n  string(REGEX REPLACE \"^#define +${MACRO} +(.+)$\" \"\\\\1\" _val \"${_line}\")\n  set(${OUTPUT} ${_val} PARENT_SCOPE)\nendfunction(read_macro)\n\n# Version information\nread_macro(\"c/common/version.h\" \"BROTLI_VERSION_MAJOR\" BROTLI_VERSION_MAJOR)\nread_macro(\"c/common/version.h\" \"BROTLI_VERSION_MINOR\" BROTLI_VERSION_MINOR)\nread_macro(\"c/common/version.h\" \"BROTLI_VERSION_PATCH\" BROTLI_VERSION_PATCH)\nset(BROTLI_VERSION \"${BROTLI_VERSION_MAJOR}.${BROTLI_VERSION_MINOR}.${BROTLI_VERSION_PATCH}\")\nmark_as_advanced(BROTLI_VERSION BROTLI_VERSION_MAJOR BROTLI_VERSION_MINOR BROTLI_VERSION_PATCH)\n\n# ABI Version information\nread_macro(\"c/common/version.h\" \"BROTLI_ABI_CURRENT\" BROTLI_ABI_CURRENT)\nread_macro(\"c/common/version.h\" \"BROTLI_ABI_REVISION\" BROTLI_ABI_REVISION)\nread_macro(\"c/common/version.h\" \"BROTLI_ABI_AGE\" BROTLI_ABI_AGE)\nmath(EXPR BROTLI_ABI_COMPATIBILITY \"${BROTLI_ABI_CURRENT} - ${BROTLI_ABI_AGE}\")\nmark_as_advanced(BROTLI_ABI_CURRENT BROTLI_ABI_REVISION BROTLI_ABI_AGE BROTLI_ABI_COMPATIBILITY)\n\nif (ENABLE_SANITIZER)\n  set(CMAKE_C_FLAGS \" ${CMAKE_C_FLAGS} -fsanitize=${ENABLE_SANITIZER}\")\n  set(CMAKE_CXX_FLAGS \" ${CMAKE_CXX_FLAGS} -fsanitize=${ENABLE_SANITIZER}\")\n  set(CMAKE_EXE_LINKER_FLAGS \"${CMAKE_EXE_LINKER_FLAGS} -fsanitize=${ENABLE_SANITIZER}\")\nendif ()\n\ninclude(CheckLibraryExists)\nset(LIBM_LIBRARY)\nset(LIBM_DEP)\nCHECK_LIBRARY_EXISTS(m log2 \"\" HAVE_LIB_M)\nif (HAVE_LIB_M)\n  set(LIBM_LIBRARY \"m\")\n  if (NOT BUILD_SHARED_LIBS)\n    set(LIBM_DEP \"-lm\")\n  endif()\nendif()\n\nset(BROTLI_INCLUDE_DIRS \"${CMAKE_CURRENT_SOURCE_DIR}/c/include\")\nmark_as_advanced(BROTLI_INCLUDE_DIRS)\n\nif (BROTLI_BUILD_FOR_PACKAGE)\n  set(BROTLI_SHARED_LIBRARIES brotlienc brotlidec brotlicommon)\n  set(BROTLI_STATIC_LIBRARIES brotlienc-static brotlidec-static brotlicommon-static)\n  set(BROTLI_LIBRARIES ${BROTLI_SHARED_LIBRARIES} ${LIBM_LIBRARY})\nelse()  # NOT BROTLI_BUILD_FOR_PACKAGE\n  if (BUILD_SHARED_LIBS)\n    set(BROTLI_SHARED_LIBRARIES brotlienc brotlidec brotlicommon)\n    set(BROTLI_STATIC_LIBRARIES)\n  else()  # NOT BUILD_SHARED_LIBS\n    set(BROTLI_SHARED_LIBRARIES)\n    set(BROTLI_STATIC_LIBRARIES brotlienc brotlidec brotlicommon)\n  endif()\n  set(BROTLI_LIBRARIES ${BROTLI_SHARED_LIBRARIES} ${BROTLI_STATIC_LIBRARIES} ${LIBM_LIBRARY})\nendif()  # BROTLI_BUILD_FOR_PACKAGE\nmark_as_advanced(BROTLI_LIBRARIES)\n\nif (MSVC)\n  message(STATUS \"Defining _CRT_SECURE_NO_WARNINGS to avoid warnings about security\")\n\n  add_definitions(-D_CRT_SECURE_NO_WARNINGS)\nendif()\n\nfile(GLOB_RECURSE BROTLI_COMMON_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} c/common/*.c)\nfile(GLOB_RECURSE BROTLI_DEC_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} c/dec/*.c)\nfile(GLOB_RECURSE BROTLI_ENC_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} c/enc/*.c)\n\nadd_library(brotlicommon ${BROTLI_COMMON_SOURCES})\nadd_library(brotlidec ${BROTLI_DEC_SOURCES})\nadd_library(brotlienc ${BROTLI_ENC_SOURCES})\n\nif (BROTLI_BUILD_FOR_PACKAGE)\n  add_library(brotlicommon-static STATIC ${BROTLI_COMMON_SOURCES})\n  add_library(brotlidec-static STATIC ${BROTLI_DEC_SOURCES})\n  add_library(brotlienc-static STATIC ${BROTLI_ENC_SOURCES})\nendif()\n\n# Older CMake versions does not understand INCLUDE_DIRECTORIES property.\ninclude_directories(${BROTLI_INCLUDE_DIRS})\n\nif (BUILD_SHARED_LIBS)\n  foreach(lib ${BROTLI_SHARED_LIBRARIES})\n    target_compile_definitions(${lib} PUBLIC \"BROTLI_SHARED_COMPILATION\" )\n    string(TOUPPER \"${lib}\" LIB)\n    set_target_properties (${lib} PROPERTIES DEFINE_SYMBOL \"${LIB}_SHARED_COMPILATION\")\n  endforeach()\nendif()  # BUILD_SHARED_LIBS\n\nforeach(lib ${BROTLI_SHARED_LIBRARIES} ${BROTLI_STATIC_LIBRARIES})\n  target_link_libraries(${lib} ${LIBM_LIBRARY})\n  set_property(TARGET ${lib} APPEND PROPERTY INCLUDE_DIRECTORIES ${BROTLI_INCLUDE_DIRS})\n  set_target_properties(${lib} PROPERTIES\n    VERSION \"${BROTLI_ABI_COMPATIBILITY}.${BROTLI_ABI_AGE}.${BROTLI_ABI_REVISION}\"\n    SOVERSION \"${BROTLI_ABI_COMPATIBILITY}\")\n  if (NOT BROTLI_EMSCRIPTEN)\n    set_target_properties(${lib} PROPERTIES POSITION_INDEPENDENT_CODE TRUE)\n  endif()\n  set_property(TARGET ${lib} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES \"$<BUILD_INTERFACE:${BROTLI_INCLUDE_DIRS}>\")\nendforeach()  # BROTLI_xxx_LIBRARIES\n\ntarget_link_libraries(brotlidec brotlicommon)\ntarget_link_libraries(brotlienc brotlicommon)\n\n# For projects stuck on older versions of CMake, this will set the\n# BROTLI_INCLUDE_DIRS and BROTLI_LIBRARIES variables so they still\n# have a relatively easy way to use Brotli:\n#\n#   include_directories(${BROTLI_INCLUDE_DIRS})\n#   target_link_libraries(foo ${BROTLI_LIBRARIES})\nif (BROTLI_PARENT_DIRECTORY)\n  set(BROTLI_INCLUDE_DIRS \"${BROTLI_INCLUDE_DIRS}\" PARENT_SCOPE)\n  set(BROTLI_LIBRARIES \"${BROTLI_LIBRARIES}\" PARENT_SCOPE)\nendif()\n\n# Build the brotli executable\nif (BROTLI_BUILD_TOOLS)\n  add_executable(brotli c/tools/brotli.c)\n  target_link_libraries(brotli ${BROTLI_LIBRARIES})\n  # brotli is a CLI tool\n  set_target_properties(brotli PROPERTIES MACOSX_BUNDLE OFF)\nendif()\n\n# Installation\nif (NOT BROTLI_BUNDLED_MODE)\n  if (BROTLI_BUILD_TOOLS)\n    install(\n      TARGETS brotli\n      RUNTIME DESTINATION \"${CMAKE_INSTALL_BINDIR}\"\n    )\n  endif()\n\n  install(\n    TARGETS ${BROTLI_SHARED_LIBRARIES} ${BROTLI_STATIC_LIBRARIES}\n    ARCHIVE DESTINATION \"${CMAKE_INSTALL_LIBDIR}\"\n    LIBRARY DESTINATION \"${CMAKE_INSTALL_LIBDIR}\"\n    RUNTIME DESTINATION \"${CMAKE_INSTALL_BINDIR}\"\n  )\n\n  install(\n    DIRECTORY ${BROTLI_INCLUDE_DIRS}/brotli\n    DESTINATION \"${CMAKE_INSTALL_INCLUDEDIR}\"\n  )\nendif()  # BROTLI_BUNDLED_MODE\n\n# Tests\n\n# Integration tests, those depend on `brotli` binary\nif (NOT BROTLI_DISABLE_TESTS AND BROTLI_BUILD_TOOLS)\n  # If we're targeting Windows but not running on Windows, we need Wine\n  # to run the tests...\n  if (WIN32 AND NOT CMAKE_HOST_WIN32)\n    find_program(BROTLI_WRAPPER NAMES wine)\n\n    if (NOT BROTLI_WRAPPER)\n      message(STATUS \"wine not found, disabling tests\")\n      set(BROTLI_DISABLE_TESTS TRUE)\n    endif()\n  endif()  # WIN32 emulation\n  if (BROTLI_EMSCRIPTEN)\n    find_program(BROTLI_WRAPPER NAMES node)\n    if (NOT BROTLI_WRAPPER)\n      message(STATUS \"node not found, disabling tests\")\n      set(BROTLI_DISABLE_TESTS TRUE)\n    endif()\n  endif()  # BROTLI_EMSCRIPTEN\nendif()  # BROTLI_DISABLE_TESTS\n\n# NB: BROTLI_DISABLE_TESTS might have changed.\nif (NOT BROTLI_DISABLE_TESTS AND BROTLI_BUILD_TOOLS)\n  # If our compiler is a cross-compiler that we know about (arm/aarch64),\n  # then we need to use qemu to execute the tests.\n  if (\"${CMAKE_C_COMPILER}\" MATCHES \"^.*/arm-linux-gnueabihf-.*$\")\n    message(STATUS \"Detected arm-linux-gnueabihf cross-compilation\")\n    set(BROTLI_WRAPPER \"qemu-arm\")\n    set(BROTLI_WRAPPER_LD_PREFIX \"/usr/arm-linux-gnueabihf\")\n  endif()\n\n  if (\"${CMAKE_C_COMPILER}\" MATCHES \"^.*/arm-linux-gnueabi-.*$\")\n    message(STATUS \"Detected arm-linux-gnueabi cross-compilation\")\n    set(BROTLI_WRAPPER \"qemu-arm\")\n    set(BROTLI_WRAPPER_LD_PREFIX \"/usr/arm-linux-gnueabi\")\n  endif()\n\n  if (\"${CMAKE_C_COMPILER}\" MATCHES \"^.*/aarch64-linux-gnu-.*$\")\n    message(STATUS \"Detected aarch64-linux-gnu cross-compilation\")\n    set(BROTLI_WRAPPER \"qemu-aarch64\")\n    set(BROTLI_WRAPPER_LD_PREFIX \"/usr/aarch64-linux-gnu\")\n  endif()\n\n  include(CTest)\n  enable_testing()\n\n  set(ROUNDTRIP_INPUTS\n    tests/testdata/alice29.txt\n    tests/testdata/asyoulik.txt\n    tests/testdata/lcet10.txt\n    tests/testdata/plrabn12.txt\n    c/enc/encode.c\n    c/common/dictionary.h\n    c/dec/decode.c)\n\n  foreach(INPUT ${ROUNDTRIP_INPUTS})\n    get_filename_component(OUTPUT_NAME \"${INPUT}\" NAME)\n\n    set(OUTPUT_FILE \"${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_NAME}\")\n    set(INPUT_FILE \"${CMAKE_CURRENT_SOURCE_DIR}/${INPUT}\")\n\n    if (EXISTS \"${INPUT_FILE}\")\n      foreach(quality 1 6 9 11)\n        add_test(NAME \"${BROTLI_TEST_PREFIX}roundtrip/${INPUT}/${quality}\"\n          COMMAND \"${CMAKE_COMMAND}\"\n            -DBROTLI_WRAPPER=${BROTLI_WRAPPER}\n            -DBROTLI_WRAPPER_LD_PREFIX=${BROTLI_WRAPPER_LD_PREFIX}\n            -DBROTLI_CLI=$<TARGET_FILE:brotli>\n            -DQUALITY=${quality}\n            -DINPUT=${INPUT_FILE}\n            -DOUTPUT=${OUTPUT_FILE}.${quality}\n            -P ${CMAKE_CURRENT_SOURCE_DIR}/tests/run-roundtrip-test.cmake)\n      endforeach()\n    else()\n      message(NOTICE \"Test file ${INPUT} does not exist; OK on tarball builds; consider running scripts/download_testdata.sh before configuring.\")\n    endif()\n  endforeach()\n\n  file(GLOB_RECURSE\n    COMPATIBILITY_INPUTS\n    RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n    tests/testdata/*.compressed*)\n\n  foreach(INPUT ${COMPATIBILITY_INPUTS})\n    string(REGEX REPLACE \"([a-zA-Z0-9\\\\.]+)\\\\.compressed(\\\\.[0-9]+)?$\" \"\\\\1\" UNCOMPRESSED_INPUT \"${INPUT}\")\n    if (EXISTS ${UNCOMPRESSED_INPUT})\n      add_test(NAME \"${BROTLI_TEST_PREFIX}compatibility/${INPUT}\"\n        COMMAND \"${CMAKE_COMMAND}\"\n          -DBROTLI_WRAPPER=${BROTLI_WRAPPER}\n          -DBROTLI_WRAPPER_LD_PREFIX=${BROTLI_WRAPPER_LD_PREFIX}\n          -DBROTLI_CLI=$<TARGET_FILE:brotli>\n          -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/${INPUT}\n          -P ${CMAKE_CURRENT_SOURCE_DIR}/tests/run-compatibility-test.cmake)\n    endif()\n  endforeach()\nendif()  # BROTLI_DISABLE_TESTS\n\n# Generate a pkg-config files\n\nfunction(generate_pkg_config_path outvar path)\n  string(LENGTH \"${path}\" path_length)\n\n  set(path_args ${ARGV})\n  list(REMOVE_AT path_args 0 1)\n  list(LENGTH path_args path_args_remaining)\n\n  set(\"${outvar}\" \"${path}\")\n\n  while(path_args_remaining GREATER 1)\n    list(GET path_args 0 name)\n    list(GET path_args 1 value)\n\n    get_filename_component(value_full \"${value}\" ABSOLUTE)\n    string(LENGTH \"${value}\" value_length)\n\n    if (path_length EQUAL value_length AND path STREQUAL value)\n      set(\"${outvar}\" \"\\${${name}}\")\n      break()\n    elseif (path_length GREATER value_length)\n      # We might be in a subdirectory of the value, but we have to be\n      # careful about a prefix matching but not being a subdirectory\n      # (for example, /usr/lib64 is not a subdirectory of /usr/lib).\n      # We'll do this by making sure the next character is a directory\n      # separator.\n      string(SUBSTRING \"${path}\" ${value_length} 1 sep)\n      if (sep STREQUAL \"/\")\n        string(SUBSTRING \"${path}\" 0 ${value_length} s)\n        if (s STREQUAL value)\n          string(SUBSTRING \"${path}\" \"${value_length}\" -1 suffix)\n          set(\"${outvar}\" \"\\${${name}}${suffix}\")\n          break()\n        endif()\n      endif()\n    endif()\n\n    list(REMOVE_AT path_args 0 1)\n    list(LENGTH path_args path_args_remaining)\n  endwhile()\n\n  set(\"${outvar}\" \"${${outvar}}\" PARENT_SCOPE)\nendfunction(generate_pkg_config_path)\n\nfunction(transform_pc_file INPUT_FILE OUTPUT_FILE VERSION)\n  file(READ ${INPUT_FILE} TEXT)\n\n  set(PREFIX \"${CMAKE_INSTALL_PREFIX}\")\n  string(REGEX REPLACE \"@prefix@\" \"${PREFIX}\" TEXT ${TEXT})\n  string(REGEX REPLACE \"@exec_prefix@\" \"${PREFIX}\" TEXT ${TEXT})\n  string(REGEX REPLACE \"@libm@\" \"${LIBM_DEP}\" TEXT ${TEXT})\n\n  generate_pkg_config_path(LIBDIR \"${CMAKE_INSTALL_FULL_LIBDIR}\" prefix \"${PREFIX}\")\n  string(REGEX REPLACE \"@libdir@\" \"${LIBDIR}\" TEXT ${TEXT})\n\n  generate_pkg_config_path(INCLUDEDIR \"${CMAKE_INSTALL_FULL_INCLUDEDIR}\" prefix \"${PREFIX}\")\n  string(REGEX REPLACE \"@includedir@\" \"${INCLUDEDIR}\" TEXT ${TEXT})\n\n  string(REGEX REPLACE \"@PACKAGE_VERSION@\" \"${VERSION}\" TEXT ${TEXT})\n\n  file(WRITE ${OUTPUT_FILE} ${TEXT})\nendfunction()\n\ntransform_pc_file(\"scripts/libbrotlicommon.pc.in\" \"${CMAKE_CURRENT_BINARY_DIR}/libbrotlicommon.pc\" \"${BROTLI_VERSION}\")\n\ntransform_pc_file(\"scripts/libbrotlidec.pc.in\" \"${CMAKE_CURRENT_BINARY_DIR}/libbrotlidec.pc\" \"${BROTLI_VERSION}\")\n\ntransform_pc_file(\"scripts/libbrotlienc.pc.in\" \"${CMAKE_CURRENT_BINARY_DIR}/libbrotlienc.pc\" \"${BROTLI_VERSION}\")\n\nif (NOT BROTLI_BUNDLED_MODE)\n  install(FILES \"${CMAKE_CURRENT_BINARY_DIR}/libbrotlicommon.pc\"\n    DESTINATION \"${CMAKE_INSTALL_LIBDIR}/pkgconfig\")\n  install(FILES \"${CMAKE_CURRENT_BINARY_DIR}/libbrotlidec.pc\"\n    DESTINATION \"${CMAKE_INSTALL_LIBDIR}/pkgconfig\")\n  install(FILES \"${CMAKE_CURRENT_BINARY_DIR}/libbrotlienc.pc\"\n    DESTINATION \"${CMAKE_INSTALL_LIBDIR}/pkgconfig\")\nendif()  # BROTLI_BUNDLED_MODE\n\nif (BROTLI_BUILD_TOOLS)\n  install(FILES \"docs/brotli.1\"\n    DESTINATION \"${CMAKE_INSTALL_MANDIR}/man1\")\nendif()\n\ninstall(FILES docs/constants.h.3 docs/decode.h.3 docs/encode.h.3 docs/types.h.3\n  DESTINATION \"${CMAKE_INSTALL_MANDIR}/man3\")\n\nif (ENABLE_COVERAGE STREQUAL \"yes\")\n  setup_target_for_coverage(coverage test coverage)\nendif()\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "Want to contribute? Great! First, read this page (including the small print at\nthe end).\n\n### Before you contribute\nBefore we can use your code, you must sign the\n[Google Individual Contributor License Agreement]\n(https://cla.developers.google.com/about/google-individual)\n(CLA), which you can do online. The CLA is necessary mainly because you own the\ncopyright to your changes, even after your contribution becomes part of our\ncodebase, so we need your permission to use and distribute your code. We also\nneed to be sure of various other things—for instance that you'll tell us if you\nknow that your code infringes on other people's patents. You don't have to sign\nthe CLA until after you've submitted your code for review and a member has\napproved it, but you must do it before we can put your code into our codebase.\nBefore you start working on a larger contribution, you should get in touch with\nus first through the issue tracker with your idea so that we can help out and\npossibly guide you. Coordinating up front makes it much easier to avoid\nfrustration later on.\n\n### Code reviews\nAll submissions, including submissions by project members, require review. We\nuse Github pull requests for this purpose.\n\n### Code style\nCode should follow applicable formatting and style guides described in\n[Google Style Guides](https://google.github.io/styleguide/). C code should be\nC89 compatible.\n\n### The small print\nContributions made by corporations are covered by a different agreement than\nthe one above, the [Software Grant and Corporate Contributor License Agreement]\n(https://cla.developers.google.com/about/google-corporate).\n"
  },
  {
    "path": "LICENSE",
    "content": "Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "MANIFEST.in",
    "content": "include CONTRIBUTING.md\ninclude c/common/*.c\ninclude c/common/*.h\ninclude c/dec/*.c\ninclude c/dec/*.h\ninclude c/enc/*.c\ninclude c/enc/*.h\ninclude c/include/brotli/*.h\ninclude LICENSE\ninclude MANIFEST.in\ninclude python/_brotli.cc\ninclude python/brotli.py\ninclude python/README.md\ninclude python/tests/*\ninclude README.md\ninclude setup.py\ninclude tests/testdata/*\ninclude c/tools/brotli.c\n"
  },
  {
    "path": "MODULE.bazel",
    "content": "# Copyright 2025 The Brotli Authors. All rights reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\n\"\"\"Brotli reference implementation\"\"\"\n\nmodule(\n    name = \"brotli\",\n    version = \"1.2.0\",\n    repo_name = \"org_brotli\",\n)\n\nbazel_dep(name = \"rules_cc\", version = \"0.2.17\")\n"
  },
  {
    "path": "README",
    "content": "BROTLI DATA COMPRESSION LIBRARY\n\nBrotli is a generic-purpose lossless compression algorithm that compresses data\nusing a combination of a modern variant of the LZ77 algorithm, Huffman coding\nand 2nd order context modeling, with a compression ratio comparable to the best\ncurrently available general-purpose compression methods. It is similar in speed\nwith deflate but offers more dense compression.\n\nThe specification of the Brotli Compressed Data Format is defined in RFC 7932\nhttps://datatracker.ietf.org/doc/html/rfc7932\n\nBrotli is open-sourced under the MIT License, see the LICENSE file.\n\nBrotli mailing list:\nhttps://groups.google.com/g/brotli\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\">\n  <img src=\"https://github.com/google/brotli/actions/workflows/build_test.yml/badge.svg\" alt=\"GitHub Actions Build Status\" href=\"https://github.com/google/brotli/actions?query=branch%3Amaster\">\n  <img src=\"https://oss-fuzz-build-logs.storage.googleapis.com/badges/brotli.svg\" alt=\"Fuzzing Status\" href=\"https://oss-fuzz-build-logs.storage.googleapis.com/index.html#brotli\">\n</p>\n<p align=\"center\"><img src=\"https://brotli.org/brotli.svg\" alt=\"Brotli\" width=\"64\"></p>\n\n### Introduction\n\nBrotli is a generic-purpose lossless compression algorithm that compresses data\nusing a combination of a modern variant of the LZ77 algorithm, Huffman coding\nand 2nd order context modeling, with a compression ratio comparable to the best\ncurrently available general-purpose compression methods. It is similar in speed\nwith deflate but offers more dense compression.\n\nThe specification of the Brotli Compressed Data Format is defined in\n[RFC 7932](https://datatracker.ietf.org/doc/html/rfc7932).\n\nBrotli is open-sourced under the MIT License, see the LICENSE file.\n\n> **Please note:** brotli is a \"stream\" format; it does not contain\n> meta-information, like checksums or uncompressed data length. It is possible\n> to modify \"raw\" ranges of the compressed stream and the decoder will not\n> notice that.\n\n### Installation\n\nIn most Linux distributions, installing `brotli` is just a matter of using\nthe package management system. For example in Debian-based distributions:\n`apt install brotli` will install `brotli`. On MacOS, you can use\n[Homebrew](https://brew.sh/): `brew install brotli`.\n\n[![brotli packaging status](https://repology.org/badge/vertical-allrepos/brotli.svg?exclude_unsupported=1&columns=3&exclude_sources=modules,site&header=brotli%20packaging%20status)](https://repology.org/project/brotli/versions)\n\nOf course you can also build brotli from sources.\n\n### Build instructions\n\n#### Vcpkg\n\nYou can download and install brotli using the\n[vcpkg](https://github.com/Microsoft/vcpkg/) dependency manager:\n\n    git clone https://github.com/Microsoft/vcpkg.git\n    cd vcpkg\n    ./bootstrap-vcpkg.sh\n    ./vcpkg integrate install\n    ./vcpkg install brotli\n\nThe brotli port in vcpkg is kept up to date by Microsoft team members and\ncommunity contributors. If the version is out of date, please [create an issue\nor pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.\n\n#### Bazel\n\nSee [Bazel](https://www.bazel.build/)\n\n#### CMake\n\nThe basic commands to build and install brotli are:\n\n    $ mkdir out && cd out\n    $ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./installed ..\n    $ cmake --build . --config Release --target install\n\nYou can use other [CMake](https://cmake.org/) configuration.\n\n#### Python\n\nTo install the latest release of the Python module, run the following:\n\n    $ pip install brotli\n\nTo install the tip-of-the-tree version, run:\n\n    $ pip install --upgrade git+https://github.com/google/brotli\n\nSee the [Python readme](python/README.md) for more details on installing\nfrom source, development, and testing.\n\n### Contributing\n\nWe glad to answer/library related questions in\n[brotli mailing list](https://groups.google.com/g/brotli).\n\nRegular issues / feature requests should be reported in\n[issue tracker](https://github.com/google/brotli/issues).\n\nFor reporting vulnerability please read [SECURITY](SECURITY.md).\n\nFor contributing changes please read [CONTRIBUTING](CONTRIBUTING.md).\n\n### Benchmarks\n* [Squash Compression Benchmark](https://quixdb.github.io/squash-benchmark/) / [Unstable Squash Compression Benchmark](https://quixdb.github.io/squash-benchmark/unstable/)\n* [Large Text Compression Benchmark](https://mattmahoney.net/dc/text.html)\n* [Lzturbo Benchmark](https://sites.google.com/site/powturbo/home/benchmark)\n\n### Related projects\n> **Disclaimer:** Brotli authors take no responsibility for the third party projects mentioned in this section.\n\nIndependent [decoder](https://github.com/madler/brotli) implementation\nby Mark Adler, based entirely on format specification.\n\nJavaScript port of brotli [decoder](https://github.com/devongovett/brotli.js).\nCould be used directly via `npm install brotli`\n\nHand ported [decoder / encoder](https://github.com/dominikhlbg/BrotliHaxe)\nin haxe by Dominik Homberger.\nOutput source code: JavaScript, PHP, Python, Java and C#\n\n7Zip [plugin](https://github.com/mcmilk/7-Zip-Zstd)\n\nDart compression framework with\n[fast FFI-based Brotli implementation](https://pub.dev/documentation/es_compression/latest/brotli/)\nwith ready-to-use prebuilt binaries for Win/Linux/Mac\n"
  },
  {
    "path": "SECURITY.md",
    "content": "### Reporting\n\nTo report a security issue, please use [https://g.co/vulnz](https://g.co/vulnz).\nWe use g.co/vulnz for our intake, and do coordination and disclosure here on\nGitHub (including using GitHub Security Advisory). The Google Security Team will\nrespond within 5 working days of your report on g.co/vulnz.\n"
  },
  {
    "path": "c/common/constants.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"constants.h\"\n\nconst BROTLI_MODEL(\"small\")\nBrotliPrefixCodeRange _kBrotliPrefixCodeRanges[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = {\n    {1, 2},     {5, 2},     {9, 2},   {13, 2},    {17, 3},    {25, 3},\n    {33, 3},    {41, 3},    {49, 4},  {65, 4},    {81, 4},    {97, 4},\n    {113, 5},   {145, 5},   {177, 5}, {209, 5},   {241, 6},   {305, 6},\n    {369, 7},   {497, 8},   {753, 9}, {1265, 10}, {2289, 11}, {4337, 12},\n    {8433, 13}, {16625, 24}};\n"
  },
  {
    "path": "c/common/constants.h",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/**\n * @file\n * Common constants used in decoder and encoder API.\n */\n\n#ifndef BROTLI_COMMON_CONSTANTS_H_\n#define BROTLI_COMMON_CONSTANTS_H_\n\n#include \"platform.h\"\n\n/* Specification: 7.3. Encoding of the context map */\n#define BROTLI_CONTEXT_MAP_MAX_RLE 16\n\n/* Specification: 2. Compressed representation overview */\n#define BROTLI_MAX_NUMBER_OF_BLOCK_TYPES 256\n\n/* Specification: 3.3. Alphabet sizes: insert-and-copy length */\n#define BROTLI_NUM_LITERAL_SYMBOLS 256\n#define BROTLI_NUM_COMMAND_SYMBOLS 704\n#define BROTLI_NUM_BLOCK_LEN_SYMBOLS 26\n#define BROTLI_MAX_CONTEXT_MAP_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + \\\n                                        BROTLI_CONTEXT_MAP_MAX_RLE)\n#define BROTLI_MAX_BLOCK_TYPE_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 2)\n\n/* Specification: 3.5. Complex prefix codes */\n#define BROTLI_REPEAT_PREVIOUS_CODE_LENGTH 16\n#define BROTLI_REPEAT_ZERO_CODE_LENGTH 17\n#define BROTLI_CODE_LENGTH_CODES (BROTLI_REPEAT_ZERO_CODE_LENGTH + 1)\n/* \"code length of 8 is repeated\" */\n#define BROTLI_INITIAL_REPEATED_CODE_LENGTH 8\n\n/* \"Large Window Brotli\" */\n\n/**\n * The theoretical maximum number of distance bits specified for large window\n * brotli, for 64-bit encoders and decoders. Even when in practice 32-bit\n * encoders and decoders only support up to 30 max distance bits, the value is\n * set to 62 because it affects the large window brotli file format.\n * Specifically, it affects the encoding of simple huffman tree for distances,\n * see Specification RFC 7932 chapter 3.4.\n */\n#define BROTLI_LARGE_MAX_DISTANCE_BITS 62U\n#define BROTLI_LARGE_MIN_WBITS 10\n/**\n * The maximum supported large brotli window bits by the encoder and decoder.\n * Large window brotli allows up to 62 bits, however the current encoder and\n * decoder, designed for 32-bit integers, only support up to 30 bits maximum.\n */\n#define BROTLI_LARGE_MAX_WBITS 30\n\n/* Specification: 4. Encoding of distances */\n#define BROTLI_NUM_DISTANCE_SHORT_CODES 16\n/**\n * Maximal number of \"postfix\" bits.\n *\n * Number of \"postfix\" bits is stored as 2 bits in meta-block header.\n */\n#define BROTLI_MAX_NPOSTFIX 3\n#define BROTLI_MAX_NDIRECT 120\n#define BROTLI_MAX_DISTANCE_BITS 24U\n#define BROTLI_DISTANCE_ALPHABET_SIZE(NPOSTFIX, NDIRECT, MAXNBITS) ( \\\n    BROTLI_NUM_DISTANCE_SHORT_CODES + (NDIRECT) +                    \\\n    ((MAXNBITS) << ((NPOSTFIX) + 1)))\n/* BROTLI_NUM_DISTANCE_SYMBOLS == 1128 */\n#define BROTLI_NUM_DISTANCE_SYMBOLS \\\n    BROTLI_DISTANCE_ALPHABET_SIZE(  \\\n        BROTLI_MAX_NDIRECT, BROTLI_MAX_NPOSTFIX, BROTLI_LARGE_MAX_DISTANCE_BITS)\n\n/* ((1 << 26) - 4) is the maximal distance that can be expressed in RFC 7932\n   brotli stream using NPOSTFIX = 0 and NDIRECT = 0. With other NPOSTFIX and\n   NDIRECT values distances up to ((1 << 29) + 88) could be expressed. */\n#define BROTLI_MAX_DISTANCE 0x3FFFFFC\n\n/* ((1 << 31) - 4) is the safe distance limit. Using this number as a limit\n   allows safe distance calculation without overflows, given the distance\n   alphabet size is limited to corresponding size\n   (see kLargeWindowDistanceCodeLimits). */\n#define BROTLI_MAX_ALLOWED_DISTANCE 0x7FFFFFFC\n\n\n/* Specification: 4. Encoding of Literal Insertion Lengths and Copy Lengths */\n#define BROTLI_NUM_INS_COPY_CODES 24\n\n/* 7.1. Context modes and context ID lookup for literals */\n/* \"context IDs for literals are in the range of 0..63\" */\n#define BROTLI_LITERAL_CONTEXT_BITS 6\n\n/* 7.2. Context ID for distances */\n#define BROTLI_DISTANCE_CONTEXT_BITS 2\n\n/* 9.1. Format of the Stream Header */\n/* Number of slack bytes for window size. Don't confuse\n   with BROTLI_NUM_DISTANCE_SHORT_CODES. */\n#define BROTLI_WINDOW_GAP 16\n#define BROTLI_MAX_BACKWARD_LIMIT(W) (((size_t)1 << (W)) - BROTLI_WINDOW_GAP)\n\ntypedef struct BrotliDistanceCodeLimit {\n  uint32_t max_alphabet_size;\n  uint32_t max_distance;\n} BrotliDistanceCodeLimit;\n\n/* This function calculates maximal size of distance alphabet, such that the\n   distances greater than the given values can not be represented.\n\n   This limits are designed to support fast and safe 32-bit decoders.\n   \"32-bit\" means that signed integer values up to ((1 << 31) - 1) could be\n   safely expressed.\n\n   Brotli distance alphabet symbols do not represent consecutive distance\n   ranges. Each distance alphabet symbol (excluding direct distances and short\n   codes), represent interleaved (for NPOSTFIX > 0) range of distances.\n   A \"group\" of consecutive (1 << NPOSTFIX) symbols represent non-interleaved\n   range. Two consecutive groups require the same amount of \"extra bits\".\n\n   It is important that distance alphabet represents complete \"groups\".\n   To avoid complex logic on encoder side about interleaved ranges\n   it was decided to restrict both sides to complete distance code \"groups\".\n */\nBROTLI_UNUSED_FUNCTION BrotliDistanceCodeLimit BrotliCalculateDistanceCodeLimit(\n    uint32_t max_distance, uint32_t npostfix, uint32_t ndirect) {\n  BrotliDistanceCodeLimit result;\n  /* Marking this function as unused, because not all files\n     including \"constants.h\" use it -> compiler warns about that. */\n  BROTLI_UNUSED(&BrotliCalculateDistanceCodeLimit);\n  if (max_distance <= ndirect) {\n    /* This case never happens / exists only for the sake of completeness. */\n    result.max_alphabet_size = max_distance + BROTLI_NUM_DISTANCE_SHORT_CODES;\n    result.max_distance = max_distance;\n    return result;\n  } else {\n    /* The first prohibited value. */\n    uint32_t forbidden_distance = max_distance + 1;\n    /* Subtract \"directly\" encoded region. */\n    uint32_t offset = forbidden_distance - ndirect - 1;\n    uint32_t ndistbits = 0;\n    uint32_t tmp;\n    uint32_t half;\n    uint32_t group;\n    /* Postfix for the last dcode in the group. */\n    uint32_t postfix = (1u << npostfix) - 1;\n    uint32_t extra;\n    uint32_t start;\n    /* Remove postfix and \"head-start\". */\n    offset = (offset >> npostfix) + 4;\n    /* Calculate the number of distance bits. */\n    tmp = offset / 2;\n    /* Poor-man's log2floor, to avoid extra dependencies. */\n    while (tmp != 0) {ndistbits++; tmp = tmp >> 1;}\n    /* One bit is covered with subrange addressing (\"half\"). */\n    ndistbits--;\n    /* Find subrange. */\n    half = (offset >> ndistbits) & 1;\n    /* Calculate the \"group\" part of dcode. */\n    group = ((ndistbits - 1) << 1) | half;\n    /* Calculated \"group\" covers the prohibited distance value. */\n    if (group == 0) {\n      /* This case is added for correctness; does not occur for limit > 128. */\n      result.max_alphabet_size = ndirect + BROTLI_NUM_DISTANCE_SHORT_CODES;\n      result.max_distance = ndirect;\n      return result;\n    }\n    /* Decrement \"group\", so it is the last permitted \"group\". */\n    group--;\n    /* After group was decremented, ndistbits and half must be recalculated. */\n    ndistbits = (group >> 1) + 1;\n    /* The last available distance in the subrange has all extra bits set. */\n    extra = (1u << ndistbits) - 1;\n    /* Calculate region start. NB: ndistbits >= 1. */\n    start = (1u << (ndistbits + 1)) - 4;\n    /* Move to subregion. */\n    start += (group & 1) << ndistbits;\n    /* Calculate the alphabet size. */\n    result.max_alphabet_size = ((group << npostfix) | postfix) + ndirect +\n        BROTLI_NUM_DISTANCE_SHORT_CODES + 1;\n    /* Calculate the maximal distance representable by alphabet. */\n    result.max_distance = ((start + extra) << npostfix) + postfix + ndirect + 1;\n    return result;\n  }\n}\n\n/* Represents the range of values belonging to a prefix code:\n   [offset, offset + 2^nbits) */\ntypedef struct {\n  uint16_t offset;\n  uint8_t nbits;\n} BrotliPrefixCodeRange;\n\n/* \"Soft-private\", it is exported, but not \"advertised\" as API. */\nBROTLI_COMMON_API extern const BROTLI_MODEL(\"small\")\nBrotliPrefixCodeRange _kBrotliPrefixCodeRanges[BROTLI_NUM_BLOCK_LEN_SYMBOLS];\n\n#endif  /* BROTLI_COMMON_CONSTANTS_H_ */\n"
  },
  {
    "path": "c/common/context.c",
    "content": "#include \"context.h\"\n\n#include \"platform.h\"\n\n/* Common context lookup table for all context modes. */\nconst BROTLI_MODEL(\"small\") uint8_t _kBrotliContextLookupTable[2048] = {\n  /* CONTEXT_LSB6, last byte. */\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n\n  /* CONTEXT_LSB6, second last byte, */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n\n  /* CONTEXT_MSB6, last byte. */\n   0,  0,  0,  0,  1,  1,  1,  1,  2,  2,  2,  2,  3,  3,  3,  3,\n   4,  4,  4,  4,  5,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,\n   8,  8,  8,  8,  9,  9,  9,  9, 10, 10, 10, 10, 11, 11, 11, 11,\n  12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,\n  16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19,\n  20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23,\n  24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27,\n  28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,\n  32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35,\n  36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39,\n  40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43,\n  44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47,\n  48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51,\n  52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,\n  56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59,\n  60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63,\n\n  /* CONTEXT_MSB6, second last byte, */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n\n  /* CONTEXT_UTF8, last byte. */\n  /* ASCII range. */\n   0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  4,  0,  0,  4,  0,  0,\n   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,\n   8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12,\n  44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12,\n  12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48,\n  52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12,\n  12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56,\n  60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12,  0,\n  /* UTF8 continuation byte range. */\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  /* UTF8 lead byte range. */\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n\n  /* CONTEXT_UTF8 second last byte. */\n  /* ASCII range. */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,\n  1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,\n  1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0,\n  /* UTF8 continuation byte range. */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* UTF8 lead byte range. */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n\n  /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */\n   0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n  48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56,\n\n  /* CONTEXT_SIGNED, second last byte. */\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,\n};\n"
  },
  {
    "path": "c/common/context.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Lookup table to map the previous two bytes to a context id.\n\n  There are four different context modeling modes defined here:\n    CONTEXT_LSB6: context id is the least significant 6 bits of the last byte,\n    CONTEXT_MSB6: context id is the most significant 6 bits of the last byte,\n    CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text,\n    CONTEXT_SIGNED: second-order context model tuned for signed integers.\n\n  If |p1| and |p2| are the previous two bytes, and |mode| is current context\n  mode, we calculate the context as:\n\n    context = ContextLut(mode)[p1] | ContextLut(mode)[p2 + 256].\n\n  For CONTEXT_UTF8 mode, if the previous two bytes are ASCII characters\n  (i.e. < 128), this will be equivalent to\n\n    context = 4 * context1(p1) + context2(p2),\n\n  where context1 is based on the previous byte in the following way:\n\n    0  : non-ASCII control\n    1  : \\t, \\n, \\r\n    2  : space\n    3  : other punctuation\n    4  : \" '\n    5  : %\n    6  : ( < [ {\n    7  : ) > ] }\n    8  : , ; :\n    9  : .\n    10 : =\n    11 : number\n    12 : upper-case vowel\n    13 : upper-case consonant\n    14 : lower-case vowel\n    15 : lower-case consonant\n\n  and context2 is based on the second last byte:\n\n    0 : control, space\n    1 : punctuation\n    2 : upper-case letter, number\n    3 : lower-case letter\n\n  If the last byte is ASCII, and the second last byte is not (in a valid UTF8\n  stream it will be a continuation byte, value between 128 and 191), the\n  context is the same as if the second last byte was an ASCII control or space.\n\n  If the last byte is a UTF8 lead byte (value >= 192), then the next byte will\n  be a continuation byte and the context id is 2 or 3 depending on the LSB of\n  the last byte and to a lesser extent on the second last byte if it is ASCII.\n\n  If the last byte is a UTF8 continuation byte, the second last byte can be:\n    - continuation byte: the next byte is probably ASCII or lead byte (assuming\n      4-byte UTF8 characters are rare) and the context id is 0 or 1.\n    - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1\n    - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3\n\n  The possible value combinations of the previous two bytes, the range of\n  context ids and the type of the next byte is summarized in the table below:\n\n  |--------\\-----------------------------------------------------------------|\n  |         \\                         Last byte                              |\n  | Second   \\---------------------------------------------------------------|\n  | last byte \\    ASCII            |   cont. byte        |   lead byte      |\n  |            \\   (0-127)          |   (128-191)         |   (192-)         |\n  |=============|===================|=====================|==================|\n  |  ASCII      | next: ASCII/lead  |  not valid          |  next: cont.     |\n  |  (0-127)    | context: 4 - 63   |                     |  context: 2 - 3  |\n  |-------------|-------------------|---------------------|------------------|\n  |  cont. byte | next: ASCII/lead  |  next: ASCII/lead   |  next: cont.     |\n  |  (128-191)  | context: 4 - 63   |  context: 0 - 1     |  context: 2 - 3  |\n  |-------------|-------------------|---------------------|------------------|\n  |  lead byte  | not valid         |  next: ASCII/lead   |  not valid       |\n  |  (192-207)  |                   |  context: 0 - 1     |                  |\n  |-------------|-------------------|---------------------|------------------|\n  |  lead byte  | not valid         |  next: cont.        |  not valid       |\n  |  (208-)     |                   |  context: 2 - 3     |                  |\n  |-------------|-------------------|---------------------|------------------|\n*/\n\n#ifndef BROTLI_COMMON_CONTEXT_H_\n#define BROTLI_COMMON_CONTEXT_H_\n\n#include \"platform.h\"\n\ntypedef enum ContextType {\n  CONTEXT_LSB6 = 0,\n  CONTEXT_MSB6 = 1,\n  CONTEXT_UTF8 = 2,\n  CONTEXT_SIGNED = 3\n} ContextType;\n\n/* \"Soft-private\", it is exported, but not \"advertised\" as API. */\n/* Common context lookup table for all context modes. */\nBROTLI_COMMON_API extern const uint8_t _kBrotliContextLookupTable[2048];\n\ntypedef const uint8_t* ContextLut;\n\n/* typeof(MODE) == ContextType; returns ContextLut */\n#define BROTLI_CONTEXT_LUT(MODE) (&_kBrotliContextLookupTable[(MODE) << 9])\n\n/* typeof(LUT) == ContextLut */\n#define BROTLI_CONTEXT(P1, P2, LUT) ((LUT)[P1] | ((LUT) + 256)[P2])\n\n#endif  /* BROTLI_COMMON_CONTEXT_H_ */\n"
  },
  {
    "path": "c/common/dictionary.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"dictionary.h\"\n#include \"platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#if !defined(BROTLI_EXTERNAL_DICTIONARY_DATA)\n/* Embed kBrotliDictionaryData */\n#include \"dictionary_inc.h\"\nstatic const BROTLI_MODEL(\"small\") BrotliDictionary kBrotliDictionary = {\n#else\nstatic BROTLI_MODEL(\"small\") BrotliDictionary kBrotliDictionary = {\n#endif\n  /* size_bits_by_length */\n  {\n    0, 0, 0, 0, 10, 10, 11, 11,\n    10, 10, 10, 10, 10, 9, 9, 8,\n    7, 7, 8, 7, 7, 6, 6, 5,\n    5, 0, 0, 0, 0, 0, 0, 0\n  },\n\n  /* offsets_by_length */\n  {\n    0, 0, 0, 0, 0, 4096, 9216, 21504,\n    35840, 44032, 53248, 63488, 74752, 87040, 93696, 100864,\n    104704, 106752, 108928, 113536, 115968, 118528, 119872, 121280,\n    122016, 122784, 122784, 122784, 122784, 122784, 122784, 122784\n  },\n\n  /* data_size ==  sizeof(kBrotliDictionaryData) */\n  122784,\n\n  /* data */\n#if defined(BROTLI_EXTERNAL_DICTIONARY_DATA)\n  NULL\n#else\n  kBrotliDictionaryData\n#endif\n};\n\nconst BrotliDictionary* BrotliGetDictionary(void) {\n  return &kBrotliDictionary;\n}\n\nvoid BrotliSetDictionaryData(const uint8_t* data) {\n#if defined(BROTLI_EXTERNAL_DICTIONARY_DATA)\n  if (!!data && !kBrotliDictionary.data) {\n    kBrotliDictionary.data = data;\n  }\n#else\n  BROTLI_UNUSED(data);  // Appease -Werror=unused-parameter\n#endif\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/common/dictionary.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Collection of static dictionary words. */\n\n#ifndef BROTLI_COMMON_DICTIONARY_H_\n#define BROTLI_COMMON_DICTIONARY_H_\n\n#include \"platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\ntypedef struct BrotliDictionary {\n  /**\n   * Number of bits to encode index of dictionary word in a bucket.\n   *\n   * Specification: Appendix A. Static Dictionary Data\n   *\n   * Words in a dictionary are bucketed by length.\n   * @c 0 means that there are no words of a given length.\n   * Dictionary consists of words with length of [4..24] bytes.\n   * Values at [0..3] and [25..31] indices should not be addressed.\n   */\n  uint8_t size_bits_by_length[32];\n\n  /* assert(offset[i + 1] == offset[i] + (bits[i] ? (i << bits[i]) : 0)) */\n  uint32_t offsets_by_length[32];\n\n  /* assert(data_size == offsets_by_length[31]) */\n  size_t data_size;\n\n  /* Data array is not bound, and should obey to size_bits_by_length values.\n     Specified size matches default (RFC 7932) dictionary. Its size is\n     defined by data_size */\n  const uint8_t* data;\n} BrotliDictionary;\n\nBROTLI_COMMON_API const BrotliDictionary* BrotliGetDictionary(void);\n\n/**\n * Sets dictionary data.\n *\n * When dictionary data is already set / present, this method is no-op.\n *\n * Dictionary data MUST be provided before BrotliGetDictionary is invoked.\n * This method is used ONLY in multi-client environment (e.g. C + Java),\n * to reduce storage by sharing single dictionary between implementations.\n */\nBROTLI_COMMON_API void BrotliSetDictionaryData(const uint8_t* data);\n\n#define BROTLI_MIN_DICTIONARY_WORD_LENGTH 4\n#define BROTLI_MAX_DICTIONARY_WORD_LENGTH 24\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_COMMON_DICTIONARY_H_ */\n"
  },
  {
    "path": "c/common/dictionary_inc.h",
    "content": "static const BROTLI_MODEL(\"small\") uint8_t kBrotliDictionaryData[] = {\n116,105,109,101,100,111,119,110,108,105,102,101,108,101,102,116,98,97,99,107,99,\n111,100,101,100,97,116,97,115,104,111,119,111,110,108,121,115,105,116,101,99,105\n,116,121,111,112,101,110,106,117,115,116,108,105,107,101,102,114,101,101,119,111\n,114,107,116,101,120,116,121,101,97,114,111,118,101,114,98,111,100,121,108,111,\n118,101,102,111,114,109,98,111,111,107,112,108,97,121,108,105,118,101,108,105,\n110,101,104,101,108,112,104,111,109,101,115,105,100,101,109,111,114,101,119,111,\n114,100,108,111,110,103,116,104,101,109,118,105,101,119,102,105,110,100,112,97,\n103,101,100,97,121,115,102,117,108,108,104,101,97,100,116,101,114,109,101,97,99,\n104,97,114,101,97,102,114,111,109,116,114,117,101,109,97,114,107,97,98,108,101,\n117,112,111,110,104,105,103,104,100,97,116,101,108,97,110,100,110,101,119,115,\n101,118,101,110,110,101,120,116,99,97,115,101,98,111,116,104,112,111,115,116,117\n,115,101,100,109,97,100,101,104,97,110,100,104,101,114,101,119,104,97,116,110,97\n,109,101,76,105,110,107,98,108,111,103,115,105,122,101,98,97,115,101,104,101,108\n,100,109,97,107,101,109,97,105,110,117,115,101,114,39,41,32,43,104,111,108,100,\n101,110,100,115,119,105,116,104,78,101,119,115,114,101,97,100,119,101,114,101,\n115,105,103,110,116,97,107,101,104,97,118,101,103,97,109,101,115,101,101,110,99,\n97,108,108,112,97,116,104,119,101,108,108,112,108,117,115,109,101,110,117,102,\n105,108,109,112,97,114,116,106,111,105,110,116,104,105,115,108,105,115,116,103,\n111,111,100,110,101,101,100,119,97,121,115,119,101,115,116,106,111,98,115,109,\n105,110,100,97,108,115,111,108,111,103,111,114,105,99,104,117,115,101,115,108,97\n,115,116,116,101,97,109,97,114,109,121,102,111,111,100,107,105,110,103,119,105,\n108,108,101,97,115,116,119,97,114,100,98,101,115,116,102,105,114,101,80,97,103,\n101,107,110,111,119,97,119,97,121,46,112,110,103,109,111,118,101,116,104,97,110,\n108,111,97,100,103,105,118,101,115,101,108,102,110,111,116,101,109,117,99,104,\n102,101,101,100,109,97,110,121,114,111,99,107,105,99,111,110,111,110,99,101,108,\n111,111,107,104,105,100,101,100,105,101,100,72,111,109,101,114,117,108,101,104,\n111,115,116,97,106,97,120,105,110,102,111,99,108,117,98,108,97,119,115,108,101,\n115,115,104,97,108,102,115,111,109,101,115,117,99,104,122,111,110,101,49,48,48,\n37,111,110,101,115,99,97,114,101,84,105,109,101,114,97,99,101,98,108,117,101,102\n,111,117,114,119,101,101,107,102,97,99,101,104,111,112,101,103,97,118,101,104,97\n,114,100,108,111,115,116,119,104,101,110,112,97,114,107,107,101,112,116,112,97,\n115,115,115,104,105,112,114,111,111,109,72,84,77,76,112,108,97,110,84,121,112,\n101,100,111,110,101,115,97,118,101,107,101,101,112,102,108,97,103,108,105,110,\n107,115,111,108,100,102,105,118,101,116,111,111,107,114,97,116,101,116,111,119,\n110,106,117,109,112,116,104,117,115,100,97,114,107,99,97,114,100,102,105,108,101\n,102,101,97,114,115,116,97,121,107,105,108,108,116,104,97,116,102,97,108,108,97,\n117,116,111,101,118,101,114,46,99,111,109,116,97,108,107,115,104,111,112,118,111\n,116,101,100,101,101,112,109,111,100,101,114,101,115,116,116,117,114,110,98,111,\n114,110,98,97,110,100,102,101,108,108,114,111,115,101,117,114,108,40,115,107,105\n,110,114,111,108,101,99,111,109,101,97,99,116,115,97,103,101,115,109,101,101,116\n,103,111,108,100,46,106,112,103,105,116,101,109,118,97,114,121,102,101,108,116,\n116,104,101,110,115,101,110,100,100,114,111,112,86,105,101,119,99,111,112,121,49\n,46,48,34,60,47,97,62,115,116,111,112,101,108,115,101,108,105,101,115,116,111,\n117,114,112,97,99,107,46,103,105,102,112,97,115,116,99,115,115,63,103,114,97,121\n,109,101,97,110,38,103,116,59,114,105,100,101,115,104,111,116,108,97,116,101,115\n,97,105,100,114,111,97,100,118,97,114,32,102,101,101,108,106,111,104,110,114,105\n,99,107,112,111,114,116,102,97,115,116,39,85,65,45,100,101,97,100,60,47,98,62,\n112,111,111,114,98,105,108,108,116,121,112,101,85,46,83,46,119,111,111,100,109,\n117,115,116,50,112,120,59,73,110,102,111,114,97,110,107,119,105,100,101,119,97,\n110,116,119,97,108,108,108,101,97,100,91,48,93,59,112,97,117,108,119,97,118,101,\n115,117,114,101,36,40,39,35,119,97,105,116,109,97,115,115,97,114,109,115,103,111\n,101,115,103,97,105,110,108,97,110,103,112,97,105,100,33,45,45,32,108,111,99,107\n,117,110,105,116,114,111,111,116,119,97,108,107,102,105,114,109,119,105,102,101,\n120,109,108,34,115,111,110,103,116,101,115,116,50,48,112,120,107,105,110,100,114\n,111,119,115,116,111,111,108,102,111,110,116,109,97,105,108,115,97,102,101,115,\n116,97,114,109,97,112,115,99,111,114,101,114,97,105,110,102,108,111,119,98,97,98\n,121,115,112,97,110,115,97,121,115,52,112,120,59,54,112,120,59,97,114,116,115,\n102,111,111,116,114,101,97,108,119,105,107,105,104,101,97,116,115,116,101,112,\n116,114,105,112,111,114,103,47,108,97,107,101,119,101,97,107,116,111,108,100,70,\n111,114,109,99,97,115,116,102,97,110,115,98,97,110,107,118,101,114,121,114,117,\n110,115,106,117,108,121,116,97,115,107,49,112,120,59,103,111,97,108,103,114,101,\n119,115,108,111,119,101,100,103,101,105,100,61,34,115,101,116,115,53,112,120,59,\n46,106,115,63,52,48,112,120,105,102,32,40,115,111,111,110,115,101,97,116,110,111\n,110,101,116,117,98,101,122,101,114,111,115,101,110,116,114,101,101,100,102,97,\n99,116,105,110,116,111,103,105,102,116,104,97,114,109,49,56,112,120,99,97,109,\n101,104,105,108,108,98,111,108,100,122,111,111,109,118,111,105,100,101,97,115,\n121,114,105,110,103,102,105,108,108,112,101,97,107,105,110,105,116,99,111,115,\n116,51,112,120,59,106,97,99,107,116,97,103,115,98,105,116,115,114,111,108,108,\n101,100,105,116,107,110,101,119,110,101,97,114,60,33,45,45,103,114,111,119,74,83\n,79,78,100,117,116,121,78,97,109,101,115,97,108,101,121,111,117,32,108,111,116,\n115,112,97,105,110,106,97,122,122,99,111,108,100,101,121,101,115,102,105,115,104\n,119,119,119,46,114,105,115,107,116,97,98,115,112,114,101,118,49,48,112,120,114,\n105,115,101,50,53,112,120,66,108,117,101,100,105,110,103,51,48,48,44,98,97,108,\n108,102,111,114,100,101,97,114,110,119,105,108,100,98,111,120,46,102,97,105,114,\n108,97,99,107,118,101,114,115,112,97,105,114,106,117,110,101,116,101,99,104,105,\n102,40,33,112,105,99,107,101,118,105,108,36,40,34,35,119,97,114,109,108,111,114,\n100,100,111,101,115,112,117,108,108,44,48,48,48,105,100,101,97,100,114,97,119,\n104,117,103,101,115,112,111,116,102,117,110,100,98,117,114,110,104,114,101,102,\n99,101,108,108,107,101,121,115,116,105,99,107,104,111,117,114,108,111,115,115,\n102,117,101,108,49,50,112,120,115,117,105,116,100,101,97,108,82,83,83,34,97,103,\n101,100,103,114,101,121,71,69,84,34,101,97,115,101,97,105,109,115,103,105,114,\n108,97,105,100,115,56,112,120,59,110,97,118,121,103,114,105,100,116,105,112,115,\n35,57,57,57,119,97,114,115,108,97,100,121,99,97,114,115,41,59,32,125,112,104,112\n,63,104,101,108,108,116,97,108,108,119,104,111,109,122,104,58,229,42,47,13,10,32\n,49,48,48,104,97,108,108,46,10,10,65,55,112,120,59,112,117,115,104,99,104,97,116\n,48,112,120,59,99,114,101,119,42,47,60,47,104,97,115,104,55,53,112,120,102,108,\n97,116,114,97,114,101,32,38,38,32,116,101,108,108,99,97,109,112,111,110,116,111,\n108,97,105,100,109,105,115,115,115,107,105,112,116,101,110,116,102,105,110,101,\n109,97,108,101,103,101,116,115,112,108,111,116,52,48,48,44,13,10,13,10,99,111,\n111,108,102,101,101,116,46,112,104,112,60,98,114,62,101,114,105,99,109,111,115,\n116,103,117,105,100,98,101,108,108,100,101,115,99,104,97,105,114,109,97,116,104,\n97,116,111,109,47,105,109,103,38,35,56,50,108,117,99,107,99,101,110,116,48,48,48\n,59,116,105,110,121,103,111,110,101,104,116,109,108,115,101,108,108,100,114,117,\n103,70,82,69,69,110,111,100,101,110,105,99,107,63,105,100,61,108,111,115,101,110\n,117,108,108,118,97,115,116,119,105,110,100,82,83,83,32,119,101,97,114,114,101,\n108,121,98,101,101,110,115,97,109,101,100,117,107,101,110,97,115,97,99,97,112,\n101,119,105,115,104,103,117,108,102,84,50,51,58,104,105,116,115,115,108,111,116,\n103,97,116,101,107,105,99,107,98,108,117,114,116,104,101,121,49,53,112,120,39,39\n,41,59,41,59,34,62,109,115,105,101,119,105,110,115,98,105,114,100,115,111,114,\n116,98,101,116,97,115,101,101,107,84,49,56,58,111,114,100,115,116,114,101,101,\n109,97,108,108,54,48,112,120,102,97,114,109,226,128,153,115,98,111,121,115,91,48\n,93,46,39,41,59,34,80,79,83,84,98,101,97,114,107,105,100,115,41,59,125,125,109,\n97,114,121,116,101,110,100,40,85,75,41,113,117,97,100,122,104,58,230,45,115,105,\n122,45,45,45,45,112,114,111,112,39,41,59,13,108,105,102,116,84,49,57,58,118,105,\n99,101,97,110,100,121,100,101,98,116,62,82,83,83,112,111,111,108,110,101,99,107,\n98,108,111,119,84,49,54,58,100,111,111,114,101,118,97,108,84,49,55,58,108,101,\n116,115,102,97,105,108,111,114,97,108,112,111,108,108,110,111,118,97,99,111,108,\n115,103,101,110,101,32,226,128,148,115,111,102,116,114,111,109,101,116,105,108,\n108,114,111,115,115,60,104,51,62,112,111,117,114,102,97,100,101,112,105,110,107,\n60,116,114,62,109,105,110,105,41,124,33,40,109,105,110,101,122,104,58,232,98,97,\n114,115,104,101,97,114,48,48,41,59,109,105,108,107,32,45,45,62,105,114,111,110,\n102,114,101,100,100,105,115,107,119,101,110,116,115,111,105,108,112,117,116,115,\n47,106,115,47,104,111,108,121,84,50,50,58,73,83,66,78,84,50,48,58,97,100,97,109,\n115,101,101,115,60,104,50,62,106,115,111,110,39,44,32,39,99,111,110,116,84,50,49\n,58,32,82,83,83,108,111,111,112,97,115,105,97,109,111,111,110,60,47,112,62,115,\n111,117,108,76,73,78,69,102,111,114,116,99,97,114,116,84,49,52,58,60,104,49,62,\n56,48,112,120,33,45,45,60,57,112,120,59,84,48,52,58,109,105,107,101,58,52,54,90,\n110,105,99,101,105,110,99,104,89,111,114,107,114,105,99,101,122,104,58,228,39,41\n,41,59,112,117,114,101,109,97,103,101,112,97,114,97,116,111,110,101,98,111,110,\n100,58,51,55,90,95,111,102,95,39,93,41,59,48,48,48,44,122,104,58,231,116,97,110,\n107,121,97,114,100,98,111,119,108,98,117,115,104,58,53,54,90,74,97,118,97,51,48,\n112,120,10,124,125,10,37,67,51,37,58,51,52,90,106,101,102,102,69,88,80,73,99,97,\n115,104,118,105,115,97,103,111,108,102,115,110,111,119,122,104,58,233,113,117,\n101,114,46,99,115,115,115,105,99,107,109,101,97,116,109,105,110,46,98,105,110,\n100,100,101,108,108,104,105,114,101,112,105,99,115,114,101,110,116,58,51,54,90,\n72,84,84,80,45,50,48,49,102,111,116,111,119,111,108,102,69,78,68,32,120,98,111,\n120,58,53,52,90,66,79,68,89,100,105,99,107,59,10,125,10,101,120,105,116,58,51,53\n,90,118,97,114,115,98,101,97,116,39,125,41,59,100,105,101,116,57,57,57,59,97,110\n,110,101,125,125,60,47,91,105,93,46,76,97,110,103,107,109,194,178,119,105,114,\n101,116,111,121,115,97,100,100,115,115,101,97,108,97,108,101,120,59,10,9,125,101\n,99,104,111,110,105,110,101,46,111,114,103,48,48,53,41,116,111,110,121,106,101,\n119,115,115,97,110,100,108,101,103,115,114,111,111,102,48,48,48,41,32,50,48,48,\n119,105,110,101,103,101,97,114,100,111,103,115,98,111,111,116,103,97,114,121,99,\n117,116,115,116,121,108,101,116,101,109,112,116,105,111,110,46,120,109,108,99,\n111,99,107,103,97,110,103,36,40,39,46,53,48,112,120,80,104,46,68,109,105,115,99,\n97,108,97,110,108,111,97,110,100,101,115,107,109,105,108,101,114,121,97,110,117,\n110,105,120,100,105,115,99,41,59,125,10,100,117,115,116,99,108,105,112,41,46,10,\n10,55,48,112,120,45,50,48,48,68,86,68,115,55,93,62,60,116,97,112,101,100,101,109\n,111,105,43,43,41,119,97,103,101,101,117,114,111,112,104,105,108,111,112,116,115\n,104,111,108,101,70,65,81,115,97,115,105,110,45,50,54,84,108,97,98,115,112,101,\n116,115,85,82,76,32,98,117,108,107,99,111,111,107,59,125,13,10,72,69,65,68,91,48\n,93,41,97,98,98,114,106,117,97,110,40,49,57,56,108,101,115,104,116,119,105,110,\n60,47,105,62,115,111,110,121,103,117,121,115,102,117,99,107,112,105,112,101,124,\n45,10,33,48,48,50,41,110,100,111,119,91,49,93,59,91,93,59,10,76,111,103,32,115,\n97,108,116,13,10,9,9,98,97,110,103,116,114,105,109,98,97,116,104,41,123,13,10,48\n,48,112,120,10,125,41,59,107,111,58,236,102,101,101,115,97,100,62,13,115,58,47,\n47,32,91,93,59,116,111,108,108,112,108,117,103,40,41,123,10,123,13,10,32,46,106,\n115,39,50,48,48,112,100,117,97,108,98,111,97,116,46,74,80,71,41,59,10,125,113,\n117,111,116,41,59,10,10,39,41,59,10,13,10,125,13,50,48,49,52,50,48,49,53,50,48,\n49,54,50,48,49,55,50,48,49,56,50,48,49,57,50,48,50,48,50,48,50,49,50,48,50,50,50\n,48,50,51,50,48,50,52,50,48,50,53,50,48,50,54,50,48,50,55,50,48,50,56,50,48,50,\n57,50,48,51,48,50,48,51,49,50,48,51,50,50,48,51,51,50,48,51,52,50,48,51,53,50,48\n,51,54,50,48,51,55,50,48,49,51,50,48,49,50,50,48,49,49,50,48,49,48,50,48,48,57,\n50,48,48,56,50,48,48,55,50,48,48,54,50,48,48,53,50,48,48,52,50,48,48,51,50,48,48\n,50,50,48,48,49,50,48,48,48,49,57,57,57,49,57,57,56,49,57,57,55,49,57,57,54,49,\n57,57,53,49,57,57,52,49,57,57,51,49,57,57,50,49,57,57,49,49,57,57,48,49,57,56,57\n,49,57,56,56,49,57,56,55,49,57,56,54,49,57,56,53,49,57,56,52,49,57,56,51,49,57,\n56,50,49,57,56,49,49,57,56,48,49,57,55,57,49,57,55,56,49,57,55,55,49,57,55,54,49\n,57,55,53,49,57,55,52,49,57,55,51,49,57,55,50,49,57,55,49,49,57,55,48,49,57,54,\n57,49,57,54,56,49,57,54,55,49,57,54,54,49,57,54,53,49,57,54,52,49,57,54,51,49,57\n,54,50,49,57,54,49,49,57,54,48,49,57,53,57,49,57,53,56,49,57,53,55,49,57,53,54,\n49,57,53,53,49,57,53,52,49,57,53,51,49,57,53,50,49,57,53,49,49,57,53,48,49,48,48\n,48,49,48,50,52,49,51,57,52,48,48,48,48,57,57,57,57,99,111,109,111,109,195,161,\n115,101,115,116,101,101,115,116,97,112,101,114,111,116,111,100,111,104,97,99,101\n,99,97,100,97,97,195,177,111,98,105,101,110,100,195,173,97,97,115,195,173,118,\n105,100,97,99,97,115,111,111,116,114,111,102,111,114,111,115,111,108,111,111,116\n,114,97,99,117,97,108,100,105,106,111,115,105,100,111,103,114,97,110,116,105,112\n,111,116,101,109,97,100,101,98,101,97,108,103,111,113,117,195,169,101,115,116,\n111,110,97,100,97,116,114,101,115,112,111,99,111,99,97,115,97,98,97,106,111,116,\n111,100,97,115,105,110,111,97,103,117,97,112,117,101,115,117,110,111,115,97,110,\n116,101,100,105,99,101,108,117,105,115,101,108,108,97,109,97,121,111,122,111,110\n,97,97,109,111,114,112,105,115,111,111,98,114,97,99,108,105,99,101,108,108,111,\n100,105,111,115,104,111,114,97,99,97,115,105,208,183,208,176,208,189,208,176,208\n,190,208,188,209,128,208,176,209,128,209,131,209,130,208,176,208,189,208,181,208\n,191,208,190,208,190,209,130,208,184,208,183,208,189,208,190,208,180,208,190,209\n,130,208,190,208,182,208,181,208,190,208,189,208,184,209,133,208,157,208,176,208\n,181,208,181,208,177,209,139,208,188,209,139,208,146,209,139,209,129,208,190,208\n,178,209,139,208,178,208,190,208,157,208,190,208,190,208,177,208,159,208,190,208\n,187,208,184,208,189,208,184,208,160,208,164,208,157,208,181,208,156,209,139,209\n,130,209,139,208,158,208,189,208,184,208,188,208,180,208,176,208,151,208,176,208\n,148,208,176,208,157,209,131,208,158,208,177,209,130,208,181,208,152,208,183,208\n,181,208,185,208,189,209,131,208,188,208,188,208,162,209,139,209,131,208,182,217\n,129,217,138,216,163,217,134,217,133,216,167,217,133,216,185,217,131,217,132,216\n,163,217,136,216,177,216,175,217,138,216,167,217,129,217,137,217,135,217,136,217\n,132,217,133,217,132,217,131,216,167,217,136,217,132,217,135,216,168,216,179,216\n,167,217,132,216,165,217,134,217,135,217,138,216,163,217,138,217,130,216,175,217\n,135,217,132,216,171,217,133,216,168,217,135,217,132,217,136,217,132,217,138,216\n,168,217,132,216,167,217,138,216,168,217,131,216,180,217,138,216,167,217,133,216\n,163,217,133,217,134,216,170,216,168,217,138,217,132,217,134,216,173,216,168,217\n,135,217,133,217,133,216,180,217,136,216,180,102,105,114,115,116,118,105,100,101\n,111,108,105,103,104,116,119,111,114,108,100,109,101,100,105,97,119,104,105,116,\n101,99,108,111,115,101,98,108,97,99,107,114,105,103,104,116,115,109,97,108,108,\n98,111,111,107,115,112,108,97,99,101,109,117,115,105,99,102,105,101,108,100,111,\n114,100,101,114,112,111,105,110,116,118,97,108,117,101,108,101,118,101,108,116,\n97,98,108,101,98,111,97,114,100,104,111,117,115,101,103,114,111,117,112,119,111,\n114,107,115,121,101,97,114,115,115,116,97,116,101,116,111,100,97,121,119,97,116,\n101,114,115,116,97,114,116,115,116,121,108,101,100,101,97,116,104,112,111,119,\n101,114,112,104,111,110,101,110,105,103,104,116,101,114,114,111,114,105,110,112,\n117,116,97,98,111,117,116,116,101,114,109,115,116,105,116,108,101,116,111,111,\n108,115,101,118,101,110,116,108,111,99,97,108,116,105,109,101,115,108,97,114,103\n,101,119,111,114,100,115,103,97,109,101,115,115,104,111,114,116,115,112,97,99,\n101,102,111,99,117,115,99,108,101,97,114,109,111,100,101,108,98,108,111,99,107,\n103,117,105,100,101,114,97,100,105,111,115,104,97,114,101,119,111,109,101,110,97\n,103,97,105,110,109,111,110,101,121,105,109,97,103,101,110,97,109,101,115,121,\n111,117,110,103,108,105,110,101,115,108,97,116,101,114,99,111,108,111,114,103,\n114,101,101,110,102,114,111,110,116,38,97,109,112,59,119,97,116,99,104,102,111,\n114,99,101,112,114,105,99,101,114,117,108,101,115,98,101,103,105,110,97,102,116,\n101,114,118,105,115,105,116,105,115,115,117,101,97,114,101,97,115,98,101,108,111\n,119,105,110,100,101,120,116,111,116,97,108,104,111,117,114,115,108,97,98,101,\n108,112,114,105,110,116,112,114,101,115,115,98,117,105,108,116,108,105,110,107,\n115,115,112,101,101,100,115,116,117,100,121,116,114,97,100,101,102,111,117,110,\n100,115,101,110,115,101,117,110,100,101,114,115,104,111,119,110,102,111,114,109,\n115,114,97,110,103,101,97,100,100,101,100,115,116,105,108,108,109,111,118,101,\n100,116,97,107,101,110,97,98,111,118,101,102,108,97,115,104,102,105,120,101,100,\n111,102,116,101,110,111,116,104,101,114,118,105,101,119,115,99,104,101,99,107,\n108,101,103,97,108,114,105,118,101,114,105,116,101,109,115,113,117,105,99,107,\n115,104,97,112,101,104,117,109,97,110,101,120,105,115,116,103,111,105,110,103,\n109,111,118,105,101,116,104,105,114,100,98,97,115,105,99,112,101,97,99,101,115,\n116,97,103,101,119,105,100,116,104,108,111,103,105,110,105,100,101,97,115,119,\n114,111,116,101,112,97,103,101,115,117,115,101,114,115,100,114,105,118,101,115,\n116,111,114,101,98,114,101,97,107,115,111,117,116,104,118,111,105,99,101,115,105\n,116,101,115,109,111,110,116,104,119,104,101,114,101,98,117,105,108,100,119,104,\n105,99,104,101,97,114,116,104,102,111,114,117,109,116,104,114,101,101,115,112,\n111,114,116,112,97,114,116,121,67,108,105,99,107,108,111,119,101,114,108,105,118\n,101,115,99,108,97,115,115,108,97,121,101,114,101,110,116,114,121,115,116,111,\n114,121,117,115,97,103,101,115,111,117,110,100,99,111,117,114,116,121,111,117,\n114,32,98,105,114,116,104,112,111,112,117,112,116,121,112,101,115,97,112,112,108\n,121,73,109,97,103,101,98,101,105,110,103,117,112,112,101,114,110,111,116,101,\n115,101,118,101,114,121,115,104,111,119,115,109,101,97,110,115,101,120,116,114,\n97,109,97,116,99,104,116,114,97,99,107,107,110,111,119,110,101,97,114,108,121,98\n,101,103,97,110,115,117,112,101,114,112,97,112,101,114,110,111,114,116,104,108,\n101,97,114,110,103,105,118,101,110,110,97,109,101,100,101,110,100,101,100,84,101\n,114,109,115,112,97,114,116,115,71,114,111,117,112,98,114,97,110,100,117,115,105\n,110,103,119,111,109,97,110,102,97,108,115,101,114,101,97,100,121,97,117,100,105\n,111,116,97,107,101,115,119,104,105,108,101,46,99,111,109,47,108,105,118,101,100\n,99,97,115,101,115,100,97,105,108,121,99,104,105,108,100,103,114,101,97,116,106,\n117,100,103,101,116,104,111,115,101,117,110,105,116,115,110,101,118,101,114,98,\n114,111,97,100,99,111,97,115,116,99,111,118,101,114,97,112,112,108,101,102,105,\n108,101,115,99,121,99,108,101,115,99,101,110,101,112,108,97,110,115,99,108,105,\n99,107,119,114,105,116,101,113,117,101,101,110,112,105,101,99,101,101,109,97,105\n,108,102,114,97,109,101,111,108,100,101,114,112,104,111,116,111,108,105,109,105,\n116,99,97,99,104,101,99,105,118,105,108,115,99,97,108,101,101,110,116,101,114,\n116,104,101,109,101,116,104,101,114,101,116,111,117,99,104,98,111,117,110,100,\n114,111,121,97,108,97,115,107,101,100,119,104,111,108,101,115,105,110,99,101,115\n,116,111,99,107,32,110,97,109,101,102,97,105,116,104,104,101,97,114,116,101,109,\n112,116,121,111,102,102,101,114,115,99,111,112,101,111,119,110,101,100,109,105,\n103,104,116,97,108,98,117,109,116,104,105,110,107,98,108,111,111,100,97,114,114,\n97,121,109,97,106,111,114,116,114,117,115,116,99,97,110,111,110,117,110,105,111,\n110,99,111,117,110,116,118,97,108,105,100,115,116,111,110,101,83,116,121,108,101\n,76,111,103,105,110,104,97,112,112,121,111,99,99,117,114,108,101,102,116,58,102,\n114,101,115,104,113,117,105,116,101,102,105,108,109,115,103,114,97,100,101,110,\n101,101,100,115,117,114,98,97,110,102,105,103,104,116,98,97,115,105,115,104,111,\n118,101,114,97,117,116,111,59,114,111,117,116,101,46,104,116,109,108,109,105,120\n,101,100,102,105,110,97,108,89,111,117,114,32,115,108,105,100,101,116,111,112,\n105,99,98,114,111,119,110,97,108,111,110,101,100,114,97,119,110,115,112,108,105,\n116,114,101,97,99,104,82,105,103,104,116,100,97,116,101,115,109,97,114,99,104,\n113,117,111,116,101,103,111,111,100,115,76,105,110,107,115,100,111,117,98,116,97\n,115,121,110,99,116,104,117,109,98,97,108,108,111,119,99,104,105,101,102,121,111\n,117,116,104,110,111,118,101,108,49,48,112,120,59,115,101,114,118,101,117,110,\n116,105,108,104,97,110,100,115,67,104,101,99,107,83,112,97,99,101,113,117,101,\n114,121,106,97,109,101,115,101,113,117,97,108,116,119,105,99,101,48,44,48,48,48,\n83,116,97,114,116,112,97,110,101,108,115,111,110,103,115,114,111,117,110,100,101\n,105,103,104,116,115,104,105,102,116,119,111,114,116,104,112,111,115,116,115,108\n,101,97,100,115,119,101,101,107,115,97,118,111,105,100,116,104,101,115,101,109,\n105,108,101,115,112,108,97,110,101,115,109,97,114,116,97,108,112,104,97,112,108,\n97,110,116,109,97,114,107,115,114,97,116,101,115,112,108,97,121,115,99,108,97,\n105,109,115,97,108,101,115,116,101,120,116,115,115,116,97,114,115,119,114,111,\n110,103,60,47,104,51,62,116,104,105,110,103,46,111,114,103,47,109,117,108,116,\n105,104,101,97,114,100,80,111,119,101,114,115,116,97,110,100,116,111,107,101,110\n,115,111,108,105,100,40,116,104,105,115,98,114,105,110,103,115,104,105,112,115,\n115,116,97,102,102,116,114,105,101,100,99,97,108,108,115,102,117,108,108,121,102\n,97,99,116,115,97,103,101,110,116,84,104,105,115,32,47,47,45,45,62,97,100,109,\n105,110,101,103,121,112,116,69,118,101,110,116,49,53,112,120,59,69,109,97,105,\n108,116,114,117,101,34,99,114,111,115,115,115,112,101,110,116,98,108,111,103,115\n,98,111,120,34,62,110,111,116,101,100,108,101,97,118,101,99,104,105,110,97,115,\n105,122,101,115,103,117,101,115,116,60,47,104,52,62,114,111,98,111,116,104,101,\n97,118,121,116,114,117,101,44,115,101,118,101,110,103,114,97,110,100,99,114,105,\n109,101,115,105,103,110,115,97,119,97,114,101,100,97,110,99,101,112,104,97,115,\n101,62,60,33,45,45,101,110,95,85,83,38,35,51,57,59,50,48,48,112,120,95,110,97,\n109,101,108,97,116,105,110,101,110,106,111,121,97,106,97,120,46,97,116,105,111,\n110,115,109,105,116,104,85,46,83,46,32,104,111,108,100,115,112,101,116,101,114,\n105,110,100,105,97,110,97,118,34,62,99,104,97,105,110,115,99,111,114,101,99,111,\n109,101,115,100,111,105,110,103,112,114,105,111,114,83,104,97,114,101,49,57,57,\n48,115,114,111,109,97,110,108,105,115,116,115,106,97,112,97,110,102,97,108,108,\n115,116,114,105,97,108,111,119,110,101,114,97,103,114,101,101,60,47,104,50,62,97\n,98,117,115,101,97,108,101,114,116,111,112,101,114,97,34,45,47,47,87,99,97,114,\n100,115,104,105,108,108,115,116,101,97,109,115,80,104,111,116,111,116,114,117,\n116,104,99,108,101,97,110,46,112,104,112,63,115,97,105,110,116,109,101,116,97,\n108,108,111,117,105,115,109,101,97,110,116,112,114,111,111,102,98,114,105,101,\n102,114,111,119,34,62,103,101,110,114,101,116,114,117,99,107,108,111,111,107,115\n,86,97,108,117,101,70,114,97,109,101,46,110,101,116,47,45,45,62,10,60,116,114,\n121,32,123,10,118,97,114,32,109,97,107,101,115,99,111,115,116,115,112,108,97,105\n,110,97,100,117,108,116,113,117,101,115,116,116,114,97,105,110,108,97,98,111,114\n,104,101,108,112,115,99,97,117,115,101,109,97,103,105,99,109,111,116,111,114,116\n,104,101,105,114,50,53,48,112,120,108,101,97,115,116,115,116,101,112,115,67,111,\n117,110,116,99,111,117,108,100,103,108,97,115,115,115,105,100,101,115,102,117,\n110,100,115,104,111,116,101,108,97,119,97,114,100,109,111,117,116,104,109,111,\n118,101,115,112,97,114,105,115,103,105,118,101,115,100,117,116,99,104,116,101,\n120,97,115,102,114,117,105,116,110,117,108,108,44,124,124,91,93,59,116,111,112,\n34,62,10,60,33,45,45,80,79,83,84,34,111,99,101,97,110,60,98,114,47,62,102,108,\n111,111,114,115,112,101,97,107,100,101,112,116,104,32,115,105,122,101,98,97,110,\n107,115,99,97,116,99,104,99,104,97,114,116,50,48,112,120,59,97,108,105,103,110,\n100,101,97,108,115,119,111,117,108,100,53,48,112,120,59,117,114,108,61,34,112,97\n,114,107,115,109,111,117,115,101,77,111,115,116,32,46,46,46,60,47,97,109,111,110\n,103,98,114,97,105,110,98,111,100,121,32,110,111,110,101,59,98,97,115,101,100,99\n,97,114,114,121,100,114,97,102,116,114,101,102,101,114,112,97,103,101,95,104,111\n,109,101,46,109,101,116,101,114,100,101,108,97,121,100,114,101,97,109,112,114,\n111,118,101,106,111,105,110,116,60,47,116,114,62,100,114,117,103,115,60,33,45,45\n,32,97,112,114,105,108,105,100,101,97,108,97,108,108,101,110,101,120,97,99,116,\n102,111,114,116,104,99,111,100,101,115,108,111,103,105,99,86,105,101,119,32,115,\n101,101,109,115,98,108,97,110,107,112,111,114,116,115,32,40,50,48,48,115,97,118,\n101,100,95,108,105,110,107,103,111,97,108,115,103,114,97,110,116,103,114,101,101\n,107,104,111,109,101,115,114,105,110,103,115,114,97,116,101,100,51,48,112,120,59\n,119,104,111,115,101,112,97,114,115,101,40,41,59,34,32,66,108,111,99,107,108,105\n,110,117,120,106,111,110,101,115,112,105,120,101,108,39,41,59,34,62,41,59,105,\n102,40,45,108,101,102,116,100,97,118,105,100,104,111,114,115,101,70,111,99,117,\n115,114,97,105,115,101,98,111,120,101,115,84,114,97,99,107,101,109,101,110,116,\n60,47,101,109,62,98,97,114,34,62,46,115,114,99,61,116,111,119,101,114,97,108,116\n,61,34,99,97,98,108,101,104,101,110,114,121,50,52,112,120,59,115,101,116,117,112\n,105,116,97,108,121,115,104,97,114,112,109,105,110,111,114,116,97,115,116,101,\n119,97,110,116,115,116,104,105,115,46,114,101,115,101,116,119,104,101,101,108,\n103,105,114,108,115,47,99,115,115,47,49,48,48,37,59,99,108,117,98,115,115,116,\n117,102,102,98,105,98,108,101,118,111,116,101,115,32,49,48,48,48,107,111,114,101\n,97,125,41,59,13,10,98,97,110,100,115,113,117,101,117,101,61,32,123,125,59,56,48\n,112,120,59,99,107,105,110,103,123,13,10,9,9,97,104,101,97,100,99,108,111,99,107\n,105,114,105,115,104,108,105,107,101,32,114,97,116,105,111,115,116,97,116,115,70\n,111,114,109,34,121,97,104,111,111,41,91,48,93,59,65,98,111,117,116,102,105,110,\n100,115,60,47,104,49,62,100,101,98,117,103,116,97,115,107,115,85,82,76,32,61,99,\n101,108,108,115,125,41,40,41,59,49,50,112,120,59,112,114,105,109,101,116,101,108\n,108,115,116,117,114,110,115,48,120,54,48,48,46,106,112,103,34,115,112,97,105,\n110,98,101,97,99,104,116,97,120,101,115,109,105,99,114,111,97,110,103,101,108,45\n,45,62,60,47,103,105,102,116,115,115,116,101,118,101,45,108,105,110,107,98,111,\n100,121,46,125,41,59,10,9,109,111,117,110,116,32,40,49,57,57,70,65,81,60,47,114,\n111,103,101,114,102,114,97,110,107,67,108,97,115,115,50,56,112,120,59,102,101,\n101,100,115,60,104,49,62,60,115,99,111,116,116,116,101,115,116,115,50,50,112,120\n,59,100,114,105,110,107,41,32,124,124,32,108,101,119,105,115,115,104,97,108,108,\n35,48,51,57,59,32,102,111,114,32,108,111,118,101,100,119,97,115,116,101,48,48,\n112,120,59,106,97,58,227,130,115,105,109,111,110,60,102,111,110,116,114,101,112,\n108,121,109,101,101,116,115,117,110,116,101,114,99,104,101,97,112,116,105,103,\n104,116,66,114,97,110,100,41,32,33,61,32,100,114,101,115,115,99,108,105,112,115,\n114,111,111,109,115,111,110,107,101,121,109,111,98,105,108,109,97,105,110,46,78,\n97,109,101,32,112,108,97,116,101,102,117,110,110,121,116,114,101,101,115,99,111,\n109,47,34,49,46,106,112,103,119,109,111,100,101,112,97,114,97,109,83,84,65,82,84\n,108,101,102,116,32,105,100,100,101,110,44,32,50,48,49,41,59,10,125,10,102,111,\n114,109,46,118,105,114,117,115,99,104,97,105,114,116,114,97,110,115,119,111,114,\n115,116,80,97,103,101,115,105,116,105,111,110,112,97,116,99,104,60,33,45,45,10,\n111,45,99,97,99,102,105,114,109,115,116,111,117,114,115,44,48,48,48,32,97,115,\n105,97,110,105,43,43,41,123,97,100,111,98,101,39,41,91,48,93,105,100,61,49,48,98\n,111,116,104,59,109,101,110,117,32,46,50,46,109,105,46,112,110,103,34,107,101,\n118,105,110,99,111,97,99,104,67,104,105,108,100,98,114,117,99,101,50,46,106,112,\n103,85,82,76,41,43,46,106,112,103,124,115,117,105,116,101,115,108,105,99,101,104\n,97,114,114,121,49,50,48,34,32,115,119,101,101,116,116,114,62,13,10,110,97,109,\n101,61,100,105,101,103,111,112,97,103,101,32,115,119,105,115,115,45,45,62,10,10,\n35,102,102,102,59,34,62,76,111,103,46,99,111,109,34,116,114,101,97,116,115,104,\n101,101,116,41,32,38,38,32,49,52,112,120,59,115,108,101,101,112,110,116,101,110,\n116,102,105,108,101,100,106,97,58,227,131,105,100,61,34,99,78,97,109,101,34,119,\n111,114,115,101,115,104,111,116,115,45,98,111,120,45,100,101,108,116,97,10,38,\n108,116,59,98,101,97,114,115,58,52,56,90,60,100,97,116,97,45,114,117,114,97,108,\n60,47,97,62,32,115,112,101,110,100,98,97,107,101,114,115,104,111,112,115,61,32,\n34,34,59,112,104,112,34,62,99,116,105,111,110,49,51,112,120,59,98,114,105,97,110\n,104,101,108,108,111,115,105,122,101,61,111,61,37,50,70,32,106,111,105,110,109,\n97,121,98,101,60,105,109,103,32,105,109,103,34,62,44,32,102,106,115,105,109,103,\n34,32,34,41,91,48,93,77,84,111,112,66,84,121,112,101,34,110,101,119,108,121,68,\n97,110,115,107,99,122,101,99,104,116,114,97,105,108,107,110,111,119,115,60,47,\n104,53,62,102,97,113,34,62,122,104,45,99,110,49,48,41,59,10,45,49,34,41,59,116,\n121,112,101,61,98,108,117,101,115,116,114,117,108,121,100,97,118,105,115,46,106,\n115,39,59,62,13,10,60,33,115,116,101,101,108,32,121,111,117,32,104,50,62,13,10,\n102,111,114,109,32,106,101,115,117,115,49,48,48,37,32,109,101,110,117,46,13,10,9\n,13,10,119,97,108,101,115,114,105,115,107,115,117,109,101,110,116,100,100,105,\n110,103,98,45,108,105,107,116,101,97,99,104,103,105,102,34,32,118,101,103,97,115\n,100,97,110,115,107,101,101,115,116,105,115,104,113,105,112,115,117,111,109,105,\n115,111,98,114,101,100,101,115,100,101,101,110,116,114,101,116,111,100,111,115,\n112,117,101,100,101,97,195,177,111,115,101,115,116,195,161,116,105,101,110,101,\n104,97,115,116,97,111,116,114,111,115,112,97,114,116,101,100,111,110,100,101,110\n,117,101,118,111,104,97,99,101,114,102,111,114,109,97,109,105,115,109,111,109,\n101,106,111,114,109,117,110,100,111,97,113,117,195,173,100,195,173,97,115,115,\n195,179,108,111,97,121,117,100,97,102,101,99,104,97,116,111,100,97,115,116,97,\n110,116,111,109,101,110,111,115,100,97,116,111,115,111,116,114,97,115,115,105,\n116,105,111,109,117,99,104,111,97,104,111,114,97,108,117,103,97,114,109,97,121,\n111,114,101,115,116,111,115,104,111,114,97,115,116,101,110,101,114,97,110,116,\n101,115,102,111,116,111,115,101,115,116,97,115,112,97,195,173,115,110,117,101,\n118,97,115,97,108,117,100,102,111,114,111,115,109,101,100,105,111,113,117,105,\n101,110,109,101,115,101,115,112,111,100,101,114,99,104,105,108,101,115,101,114,\n195,161,118,101,99,101,115,100,101,99,105,114,106,111,115,195,169,101,115,116,97\n,114,118,101,110,116,97,103,114,117,112,111,104,101,99,104,111,101,108,108,111,\n115,116,101,110,103,111,97,109,105,103,111,99,111,115,97,115,110,105,118,101,108\n,103,101,110,116,101,109,105,115,109,97,97,105,114,101,115,106,117,108,105,111,\n116,101,109,97,115,104,97,99,105,97,102,97,118,111,114,106,117,110,105,111,108,\n105,98,114,101,112,117,110,116,111,98,117,101,110,111,97,117,116,111,114,97,98,\n114,105,108,98,117,101,110,97,116,101,120,116,111,109,97,114,122,111,115,97,98,\n101,114,108,105,115,116,97,108,117,101,103,111,99,195,179,109,111,101,110,101,\n114,111,106,117,101,103,111,112,101,114,195,186,104,97,98,101,114,101,115,116,\n111,121,110,117,110,99,97,109,117,106,101,114,118,97,108,111,114,102,117,101,114\n,97,108,105,98,114,111,103,117,115,116,97,105,103,117,97,108,118,111,116,111,115\n,99,97,115,111,115,103,117,195,173,97,112,117,101,100,111,115,111,109,111,115,97\n,118,105,115,111,117,115,116,101,100,100,101,98,101,110,110,111,99,104,101,98,\n117,115,99,97,102,97,108,116,97,101,117,114,111,115,115,101,114,105,101,100,105,\n99,104,111,99,117,114,115,111,99,108,97,118,101,99,97,115,97,115,108,101,195,179\n,110,112,108,97,122,111,108,97,114,103,111,111,98,114,97,115,118,105,115,116,97,\n97,112,111,121,111,106,117,110,116,111,116,114,97,116,97,118,105,115,116,111,99,\n114,101,97,114,99,97,109,112,111,104,101,109,111,115,99,105,110,99,111,99,97,114\n,103,111,112,105,115,111,115,111,114,100,101,110,104,97,99,101,110,195,161,114,\n101,97,100,105,115,99,111,112,101,100,114,111,99,101,114,99,97,112,117,101,100,\n97,112,97,112,101,108,109,101,110,111,114,195,186,116,105,108,99,108,97,114,111,\n106,111,114,103,101,99,97,108,108,101,112,111,110,101,114,116,97,114,100,101,110\n,97,100,105,101,109,97,114,99,97,115,105,103,117,101,101,108,108,97,115,115,105,\n103,108,111,99,111,99,104,101,109,111,116,111,115,109,97,100,114,101,99,108,97,\n115,101,114,101,115,116,111,110,105,195,177,111,113,117,101,100,97,112,97,115,97\n,114,98,97,110,99,111,104,105,106,111,115,118,105,97,106,101,112,97,98,108,111,\n195,169,115,116,101,118,105,101,110,101,114,101,105,110,111,100,101,106,97,114,\n102,111,110,100,111,99,97,110,97,108,110,111,114,116,101,108,101,116,114,97,99,\n97,117,115,97,116,111,109,97,114,109,97,110,111,115,108,117,110,101,115,97,117,\n116,111,115,118,105,108,108,97,118,101,110,100,111,112,101,115,97,114,116,105,\n112,111,115,116,101,110,103,97,109,97,114,99,111,108,108,101,118,97,112,97,100,\n114,101,117,110,105,100,111,118,97,109,111,115,122,111,110,97,115,97,109,98,111,\n115,98,97,110,100,97,109,97,114,105,97,97,98,117,115,111,109,117,99,104,97,115,\n117,98,105,114,114,105,111,106,97,118,105,118,105,114,103,114,97,100,111,99,104,\n105,99,97,97,108,108,195,173,106,111,118,101,110,100,105,99,104,97,101,115,116,\n97,110,116,97,108,101,115,115,97,108,105,114,115,117,101,108,111,112,101,115,111\n,115,102,105,110,101,115,108,108,97,109,97,98,117,115,99,111,195,169,115,116,97,\n108,108,101,103,97,110,101,103,114,111,112,108,97,122,97,104,117,109,111,114,112\n,97,103,97,114,106,117,110,116,97,100,111,98,108,101,105,115,108,97,115,98,111,\n108,115,97,98,97,195,177,111,104,97,98,108,97,108,117,99,104,97,195,129,114,101,\n97,100,105,99,101,110,106,117,103,97,114,110,111,116,97,115,118,97,108,108,101,\n97,108,108,195,161,99,97,114,103,97,100,111,108,111,114,97,98,97,106,111,101,115\n,116,195,169,103,117,115,116,111,109,101,110,116,101,109,97,114,105,111,102,105,\n114,109,97,99,111,115,116,111,102,105,99,104,97,112,108,97,116,97,104,111,103,97\n,114,97,114,116,101,115,108,101,121,101,115,97,113,117,101,108,109,117,115,101,\n111,98,97,115,101,115,112,111,99,111,115,109,105,116,97,100,99,105,101,108,111,\n99,104,105,99,111,109,105,101,100,111,103,97,110,97,114,115,97,110,116,111,101,\n116,97,112,97,100,101,98,101,115,112,108,97,121,97,114,101,100,101,115,115,105,\n101,116,101,99,111,114,116,101,99,111,114,101,97,100,117,100,97,115,100,101,115,\n101,111,118,105,101,106,111,100,101,115,101,97,97,103,117,97,115,38,113,117,111,\n116,59,100,111,109,97,105,110,99,111,109,109,111,110,115,116,97,116,117,115,101,\n118,101,110,116,115,109,97,115,116,101,114,115,121,115,116,101,109,97,99,116,105\n,111,110,98,97,110,110,101,114,114,101,109,111,118,101,115,99,114,111,108,108,\n117,112,100,97,116,101,103,108,111,98,97,108,109,101,100,105,117,109,102,105,108\n,116,101,114,110,117,109,98,101,114,99,104,97,110,103,101,114,101,115,117,108,\n116,112,117,98,108,105,99,115,99,114,101,101,110,99,104,111,111,115,101,110,111,\n114,109,97,108,116,114,97,118,101,108,105,115,115,117,101,115,115,111,117,114,99\n,101,116,97,114,103,101,116,115,112,114,105,110,103,109,111,100,117,108,101,109,\n111,98,105,108,101,115,119,105,116,99,104,112,104,111,116,111,115,98,111,114,100\n,101,114,114,101,103,105,111,110,105,116,115,101,108,102,115,111,99,105,97,108,\n97,99,116,105,118,101,99,111,108,117,109,110,114,101,99,111,114,100,102,111,108,\n108,111,119,116,105,116,108,101,62,101,105,116,104,101,114,108,101,110,103,116,\n104,102,97,109,105,108,121,102,114,105,101,110,100,108,97,121,111,117,116,97,117\n,116,104,111,114,99,114,101,97,116,101,114,101,118,105,101,119,115,117,109,109,\n101,114,115,101,114,118,101,114,112,108,97,121,101,100,112,108,97,121,101,114,\n101,120,112,97,110,100,112,111,108,105,99,121,102,111,114,109,97,116,100,111,117\n,98,108,101,112,111,105,110,116,115,115,101,114,105,101,115,112,101,114,115,111,\n110,108,105,118,105,110,103,100,101,115,105,103,110,109,111,110,116,104,115,102,\n111,114,99,101,115,117,110,105,113,117,101,119,101,105,103,104,116,112,101,111,\n112,108,101,101,110,101,114,103,121,110,97,116,117,114,101,115,101,97,114,99,104\n,102,105,103,117,114,101,104,97,118,105,110,103,99,117,115,116,111,109,111,102,\n102,115,101,116,108,101,116,116,101,114,119,105,110,100,111,119,115,117,98,109,\n105,116,114,101,110,100,101,114,103,114,111,117,112,115,117,112,108,111,97,100,\n104,101,97,108,116,104,109,101,116,104,111,100,118,105,100,101,111,115,115,99,\n104,111,111,108,102,117,116,117,114,101,115,104,97,100,111,119,100,101,98,97,116\n,101,118,97,108,117,101,115,79,98,106,101,99,116,111,116,104,101,114,115,114,105\n,103,104,116,115,108,101,97,103,117,101,99,104,114,111,109,101,115,105,109,112,\n108,101,110,111,116,105,99,101,115,104,97,114,101,100,101,110,100,105,110,103,\n115,101,97,115,111,110,114,101,112,111,114,116,111,110,108,105,110,101,115,113,\n117,97,114,101,98,117,116,116,111,110,105,109,97,103,101,115,101,110,97,98,108,\n101,109,111,118,105,110,103,108,97,116,101,115,116,119,105,110,116,101,114,70,\n114,97,110,99,101,112,101,114,105,111,100,115,116,114,111,110,103,114,101,112,\n101,97,116,76,111,110,100,111,110,100,101,116,97,105,108,102,111,114,109,101,100\n,100,101,109,97,110,100,115,101,99,117,114,101,112,97,115,115,101,100,116,111,\n103,103,108,101,112,108,97,99,101,115,100,101,118,105,99,101,115,116,97,116,105,\n99,99,105,116,105,101,115,115,116,114,101,97,109,121,101,108,108,111,119,97,116,\n116,97,99,107,115,116,114,101,101,116,102,108,105,103,104,116,104,105,100,100,\n101,110,105,110,102,111,34,62,111,112,101,110,101,100,117,115,101,102,117,108,\n118,97,108,108,101,121,99,97,117,115,101,115,108,101,97,100,101,114,115,101,99,\n114,101,116,115,101,99,111,110,100,100,97,109,97,103,101,115,112,111,114,116,115\n,101,120,99,101,112,116,114,97,116,105,110,103,115,105,103,110,101,100,116,104,\n105,110,103,115,101,102,102,101,99,116,102,105,101,108,100,115,115,116,97,116,\n101,115,111,102,102,105,99,101,118,105,115,117,97,108,101,100,105,116,111,114,\n118,111,108,117,109,101,82,101,112,111,114,116,109,117,115,101,117,109,109,111,\n118,105,101,115,112,97,114,101,110,116,97,99,99,101,115,115,109,111,115,116,108,\n121,109,111,116,104,101,114,34,32,105,100,61,34,109,97,114,107,101,116,103,114,\n111,117,110,100,99,104,97,110,99,101,115,117,114,118,101,121,98,101,102,111,114,\n101,115,121,109,98,111,108,109,111,109,101,110,116,115,112,101,101,99,104,109,\n111,116,105,111,110,105,110,115,105,100,101,109,97,116,116,101,114,67,101,110,\n116,101,114,111,98,106,101,99,116,101,120,105,115,116,115,109,105,100,100,108,\n101,69,117,114,111,112,101,103,114,111,119,116,104,108,101,103,97,99,121,109,97,\n110,110,101,114,101,110,111,117,103,104,99,97,114,101,101,114,97,110,115,119,101\n,114,111,114,105,103,105,110,112,111,114,116,97,108,99,108,105,101,110,116,115,\n101,108,101,99,116,114,97,110,100,111,109,99,108,111,115,101,100,116,111,112,105\n,99,115,99,111,109,105,110,103,102,97,116,104,101,114,111,112,116,105,111,110,\n115,105,109,112,108,121,114,97,105,115,101,100,101,115,99,97,112,101,99,104,111,\n115,101,110,99,104,117,114,99,104,100,101,102,105,110,101,114,101,97,115,111,110\n,99,111,114,110,101,114,111,117,116,112,117,116,109,101,109,111,114,121,105,102,\n114,97,109,101,112,111,108,105,99,101,109,111,100,101,108,115,78,117,109,98,101,\n114,100,117,114,105,110,103,111,102,102,101,114,115,115,116,121,108,101,115,107,\n105,108,108,101,100,108,105,115,116,101,100,99,97,108,108,101,100,115,105,108,\n118,101,114,109,97,114,103,105,110,100,101,108,101,116,101,98,101,116,116,101,\n114,98,114,111,119,115,101,108,105,109,105,116,115,71,108,111,98,97,108,115,105,\n110,103,108,101,119,105,100,103,101,116,99,101,110,116,101,114,98,117,100,103,\n101,116,110,111,119,114,97,112,99,114,101,100,105,116,99,108,97,105,109,115,101,\n110,103,105,110,101,115,97,102,101,116,121,99,104,111,105,99,101,115,112,105,114\n,105,116,45,115,116,121,108,101,115,112,114,101,97,100,109,97,107,105,110,103,\n110,101,101,100,101,100,114,117,115,115,105,97,112,108,101,97,115,101,101,120,\n116,101,110,116,83,99,114,105,112,116,98,114,111,107,101,110,97,108,108,111,119,\n115,99,104,97,114,103,101,100,105,118,105,100,101,102,97,99,116,111,114,109,101,\n109,98,101,114,45,98,97,115,101,100,116,104,101,111,114,121,99,111,110,102,105,\n103,97,114,111,117,110,100,119,111,114,107,101,100,104,101,108,112,101,100,67,\n104,117,114,99,104,105,109,112,97,99,116,115,104,111,117,108,100,97,108,119,97,\n121,115,108,111,103,111,34,32,98,111,116,116,111,109,108,105,115,116,34,62,41,\n123,118,97,114,32,112,114,101,102,105,120,111,114,97,110,103,101,72,101,97,100,\n101,114,46,112,117,115,104,40,99,111,117,112,108,101,103,97,114,100,101,110,98,\n114,105,100,103,101,108,97,117,110,99,104,82,101,118,105,101,119,116,97,107,105,\n110,103,118,105,115,105,111,110,108,105,116,116,108,101,100,97,116,105,110,103,\n66,117,116,116,111,110,98,101,97,117,116,121,116,104,101,109,101,115,102,111,114\n,103,111,116,83,101,97,114,99,104,97,110,99,104,111,114,97,108,109,111,115,116,\n108,111,97,100,101,100,67,104,97,110,103,101,114,101,116,117,114,110,115,116,114\n,105,110,103,114,101,108,111,97,100,77,111,98,105,108,101,105,110,99,111,109,101\n,115,117,112,112,108,121,83,111,117,114,99,101,111,114,100,101,114,115,118,105,\n101,119,101,100,38,110,98,115,112,59,99,111,117,114,115,101,65,98,111,117,116,32\n,105,115,108,97,110,100,60,104,116,109,108,32,99,111,111,107,105,101,110,97,109,\n101,61,34,97,109,97,122,111,110,109,111,100,101,114,110,97,100,118,105,99,101,\n105,110,60,47,97,62,58,32,84,104,101,32,100,105,97,108,111,103,104,111,117,115,\n101,115,66,69,71,73,78,32,77,101,120,105,99,111,115,116,97,114,116,115,99,101,\n110,116,114,101,104,101,105,103,104,116,97,100,100,105,110,103,73,115,108,97,110\n,100,97,115,115,101,116,115,69,109,112,105,114,101,83,99,104,111,111,108,101,102\n,102,111,114,116,100,105,114,101,99,116,110,101,97,114,108,121,109,97,110,117,97\n,108,83,101,108,101,99,116,46,10,10,79,110,101,106,111,105,110,101,100,109,101,\n110,117,34,62,80,104,105,108,105,112,97,119,97,114,100,115,104,97,110,100,108,\n101,105,109,112,111,114,116,79,102,102,105,99,101,114,101,103,97,114,100,115,107\n,105,108,108,115,110,97,116,105,111,110,83,112,111,114,116,115,100,101,103,114,\n101,101,119,101,101,107,108,121,32,40,101,46,103,46,98,101,104,105,110,100,100,\n111,99,116,111,114,108,111,103,103,101,100,117,110,105,116,101,100,60,47,98,62,\n60,47,98,101,103,105,110,115,112,108,97,110,116,115,97,115,115,105,115,116,97,\n114,116,105,115,116,105,115,115,117,101,100,51,48,48,112,120,124,99,97,110,97,\n100,97,97,103,101,110,99,121,115,99,104,101,109,101,114,101,109,97,105,110,66,\n114,97,122,105,108,115,97,109,112,108,101,108,111,103,111,34,62,98,101,121,111,\n110,100,45,115,99,97,108,101,97,99,99,101,112,116,115,101,114,118,101,100,109,97\n,114,105,110,101,70,111,111,116,101,114,99,97,109,101,114,97,60,47,104,49,62,10,\n95,102,111,114,109,34,108,101,97,118,101,115,115,116,114,101,115,115,34,32,47,62\n,13,10,46,103,105,102,34,32,111,110,108,111,97,100,108,111,97,100,101,114,79,120\n,102,111,114,100,115,105,115,116,101,114,115,117,114,118,105,118,108,105,115,116\n,101,110,102,101,109,97,108,101,68,101,115,105,103,110,115,105,122,101,61,34,97,\n112,112,101,97,108,116,101,120,116,34,62,108,101,118,101,108,115,116,104,97,110,\n107,115,104,105,103,104,101,114,102,111,114,99,101,100,97,110,105,109,97,108,97,\n110,121,111,110,101,65,102,114,105,99,97,97,103,114,101,101,100,114,101,99,101,\n110,116,80,101,111,112,108,101,60,98,114,32,47,62,119,111,110,100,101,114,112,\n114,105,99,101,115,116,117,114,110,101,100,124,124,32,123,125,59,109,97,105,110,\n34,62,105,110,108,105,110,101,115,117,110,100,97,121,119,114,97,112,34,62,102,97\n,105,108,101,100,99,101,110,115,117,115,109,105,110,117,116,101,98,101,97,99,111\n,110,113,117,111,116,101,115,49,53,48,112,120,124,101,115,116,97,116,101,114,101\n,109,111,116,101,101,109,97,105,108,34,108,105,110,107,101,100,114,105,103,104,\n116,59,115,105,103,110,97,108,102,111,114,109,97,108,49,46,104,116,109,108,115,\n105,103,110,117,112,112,114,105,110,99,101,102,108,111,97,116,58,46,112,110,103,\n34,32,102,111,114,117,109,46,65,99,99,101,115,115,112,97,112,101,114,115,115,111\n,117,110,100,115,101,120,116,101,110,100,72,101,105,103,104,116,115,108,105,100,\n101,114,85,84,70,45,56,34,38,97,109,112,59,32,66,101,102,111,114,101,46,32,87,\n105,116,104,115,116,117,100,105,111,111,119,110,101,114,115,109,97,110,97,103,\n101,112,114,111,102,105,116,106,81,117,101,114,121,97,110,110,117,97,108,112,97,\n114,97,109,115,98,111,117,103,104,116,102,97,109,111,117,115,103,111,111,103,108\n,101,108,111,110,103,101,114,105,43,43,41,32,123,105,115,114,97,101,108,115,97,\n121,105,110,103,100,101,99,105,100,101,104,111,109,101,34,62,104,101,97,100,101,\n114,101,110,115,117,114,101,98,114,97,110,99,104,112,105,101,99,101,115,98,108,\n111,99,107,59,115,116,97,116,101,100,116,111,112,34,62,60,114,97,99,105,110,103,\n114,101,115,105,122,101,45,45,38,103,116,59,112,97,99,105,116,121,115,101,120,\n117,97,108,98,117,114,101,97,117,46,106,112,103,34,32,49,48,44,48,48,48,111,98,\n116,97,105,110,116,105,116,108,101,115,97,109,111,117,110,116,44,32,73,110,99,46\n,99,111,109,101,100,121,109,101,110,117,34,32,108,121,114,105,99,115,116,111,100\n,97,121,46,105,110,100,101,101,100,99,111,117,110,116,121,95,108,111,103,111,46,\n70,97,109,105,108,121,108,111,111,107,101,100,77,97,114,107,101,116,108,115,101,\n32,105,102,80,108,97,121,101,114,116,117,114,107,101,121,41,59,118,97,114,32,102\n,111,114,101,115,116,103,105,118,105,110,103,101,114,114,111,114,115,68,111,109,\n97,105,110,125,101,108,115,101,123,105,110,115,101,114,116,66,108,111,103,60,47,\n102,111,111,116,101,114,108,111,103,105,110,46,102,97,115,116,101,114,97,103,101\n,110,116,115,60,98,111,100,121,32,49,48,112,120,32,48,112,114,97,103,109,97,102,\n114,105,100,97,121,106,117,110,105,111,114,100,111,108,108,97,114,112,108,97,99,\n101,100,99,111,118,101,114,115,112,108,117,103,105,110,53,44,48,48,48,32,112,97,\n103,101,34,62,98,111,115,116,111,110,46,116,101,115,116,40,97,118,97,116,97,114,\n116,101,115,116,101,100,95,99,111,117,110,116,102,111,114,117,109,115,115,99,104\n,101,109,97,105,110,100,101,120,44,102,105,108,108,101,100,115,104,97,114,101,\n115,114,101,97,100,101,114,97,108,101,114,116,40,97,112,112,101,97,114,83,117,98\n,109,105,116,108,105,110,101,34,62,98,111,100,121,34,62,10,42,32,84,104,101,84,\n104,111,117,103,104,115,101,101,105,110,103,106,101,114,115,101,121,78,101,119,\n115,60,47,118,101,114,105,102,121,101,120,112,101,114,116,105,110,106,117,114,\n121,119,105,100,116,104,61,67,111,111,107,105,101,83,84,65,82,84,32,97,99,114,\n111,115,115,95,105,109,97,103,101,116,104,114,101,97,100,110,97,116,105,118,101,\n112,111,99,107,101,116,98,111,120,34,62,10,83,121,115,116,101,109,32,68,97,118,\n105,100,99,97,110,99,101,114,116,97,98,108,101,115,112,114,111,118,101,100,65,\n112,114,105,108,32,114,101,97,108,108,121,100,114,105,118,101,114,105,116,101,\n109,34,62,109,111,114,101,34,62,98,111,97,114,100,115,99,111,108,111,114,115,99,\n97,109,112,117,115,102,105,114,115,116,32,124,124,32,91,93,59,109,101,100,105,97\n,46,103,117,105,116,97,114,102,105,110,105,115,104,119,105,100,116,104,58,115,\n104,111,119,101,100,79,116,104,101,114,32,46,112,104,112,34,32,97,115,115,117,\n109,101,108,97,121,101,114,115,119,105,108,115,111,110,115,116,111,114,101,115,\n114,101,108,105,101,102,115,119,101,100,101,110,67,117,115,116,111,109,101,97,\n115,105,108,121,32,121,111,117,114,32,83,116,114,105,110,103,10,10,87,104,105,\n108,116,97,121,108,111,114,99,108,101,97,114,58,114,101,115,111,114,116,102,114,\n101,110,99,104,116,104,111,117,103,104,34,41,32,43,32,34,60,98,111,100,121,62,98\n,117,121,105,110,103,98,114,97,110,100,115,77,101,109,98,101,114,110,97,109,101,\n34,62,111,112,112,105,110,103,115,101,99,116,111,114,53,112,120,59,34,62,118,115\n,112,97,99,101,112,111,115,116,101,114,109,97,106,111,114,32,99,111,102,102,101,\n101,109,97,114,116,105,110,109,97,116,117,114,101,104,97,112,112,101,110,60,47,\n110,97,118,62,107,97,110,115,97,115,108,105,110,107,34,62,73,109,97,103,101,115,\n61,102,97,108,115,101,119,104,105,108,101,32,104,115,112,97,99,101,48,38,97,109,\n112,59,32,10,10,73,110,32,32,112,111,119,101,114,80,111,108,115,107,105,45,99,\n111,108,111,114,106,111,114,100,97,110,66,111,116,116,111,109,83,116,97,114,116,\n32,45,99,111,117,110,116,50,46,104,116,109,108,110,101,119,115,34,62,48,49,46,\n106,112,103,79,110,108,105,110,101,45,114,105,103,104,116,109,105,108,108,101,\n114,115,101,110,105,111,114,73,83,66,78,32,48,48,44,48,48,48,32,103,117,105,100,\n101,115,118,97,108,117,101,41,101,99,116,105,111,110,114,101,112,97,105,114,46,\n120,109,108,34,32,32,114,105,103,104,116,115,46,104,116,109,108,45,98,108,111,99\n,107,114,101,103,69,120,112,58,104,111,118,101,114,119,105,116,104,105,110,118,\n105,114,103,105,110,112,104,111,110,101,115,60,47,116,114,62,13,117,115,105,110,\n103,32,10,9,118,97,114,32,62,39,41,59,10,9,60,47,116,100,62,10,60,47,116,114,62,\n10,98,97,104,97,115,97,98,114,97,115,105,108,103,97,108,101,103,111,109,97,103,\n121,97,114,112,111,108,115,107,105,115,114,112,115,107,105,216,177,216,175,217,\n136,228,184,173,230,150,135,231,174,128,228,189,147,231,185,129,233,171,148,228,\n191,161,230,129,175,228,184,173,229,155,189,230,136,145,228,187,172,228,184,128,\n228,184,170,229,133,172,229,143,184,231,174,161,231,144,134,232,174,186,229,157,\n155,229,143,175,228,187,165,230,156,141,229,138,161,230,151,182,233,151,180,228,\n184,170,228,186,186,228,186,167,229,147,129,232,135,170,229,183,177,228,188,129,\n228,184,154,230,159,165,231,156,139,229,183,165,228,189,156,232,129,148,231,179,\n187,230,178,161,230,156,137,231,189,145,231,171,153,230,137,128,230,156,137,232,\n175,132,232,174,186,228,184,173,229,191,131,230,150,135,231,171,160,231,148,168,\n230,136,183,233,166,150,233,161,181,228,189,156,232,128,133,230,138,128,230,156,\n175,233,151,174,233,162,152,231,155,184,229,133,179,228,184,139,232,189,189,230,\n144,156,231,180,162,228,189,191,231,148,168,232,189,175,228,187,182,229,156,168,\n231,186,191,228,184,187,233,162,152,232,181,132,230,150,153,232,167,134,233,162,\n145,229,155,158,229,164,141,230,179,168,229,134,140,231,189,145,231,187,156,230,\n148,182,232,151,143,229,134,133,229,174,185,230,142,168,232,141,144,229,184,130,\n229,156,186,230,182,136,230,129,175,231,169,186,233,151,180,229,143,145,229,184,\n131,228,187,128,228,185,136,229,165,189,229,143,139,231,148,159,230,180,187,229,\n155,190,231,137,135,229,143,145,229,177,149,229,166,130,230,158,156,230,137,139,\n230,156,186,230,150,176,233,151,187,230,156,128,230,150,176,230,150,185,229,188,\n143,229,140,151,228,186,172,230,143,144,228,190,155,229,133,179,228,186,142,230,\n155,180,229,164,154,232,191,153,228,184,170,231,179,187,231,187,159,231,159,165,\n233,129,147,230,184,184,230,136,143,229,185,191,229,145,138,229,133,182,228,187,\n150,229,143,145,232,161,168,229,174,137,229,133,168,231,172,172,228,184,128,228,\n188,154,229,145,152,232,191,155,232,161,140,231,130,185,229,135,187,231,137,136,\n230,157,131,231,148,181,229,173,144,228,184,150,231,149,140,232,174,190,232,174,\n161,229,133,141,232,180,185,230,149,153,232,130,178,229,138,160,229,133,165,230,\n180,187,229,138,168,228,187,150,228,187,172,229,149,134,229,147,129,229,141,154,\n229,174,162,231,142,176,229,156,168,228,184,138,230,181,183,229,166,130,228,189,\n149,229,183,178,231,187,143,231,149,153,232,168,128,232,175,166,231,187,134,231,\n164,190,229,140,186,231,153,187,229,189,149,230,156,172,231,171,153,233,156,128,\n232,166,129,228,187,183,230,160,188,230,148,175,230,140,129,229,155,189,233,153,\n133,233,147,190,230,142,165,229,155,189,229,174,182,229,187,186,232,174,190,230,\n156,139,229,143,139,233,152,133,232,175,187,230,179,149,229,190,139,228,189,141,\n231,189,174,231,187,143,230,181,142,233,128,137,230,139,169,232,191,153,230,160,\n183,229,189,147,229,137,141,229,136,134,231,177,187,230,142,146,232,161,140,229,\n155,160,228,184,186,228,186,164,230,152,147,230,156,128,229,144,142,233,159,179,\n228,185,144,228,184,141,232,131,189,233,128,154,232,191,135,232,161,140,228,184,\n154,231,167,145,230,138,128,229,143,175,232,131,189,232,174,190,229,164,135,229,\n144,136,228,189,156,229,164,167,229,174,182,231,164,190,228,188,154,231,160,148,\n231,169,182,228,184,147,228,184,154,229,133,168,233,131,168,233,161,185,231,155,\n174,232,191,153,233,135,140,232,191,152,230,152,175,229,188,128,229,167,139,230,\n131,133,229,134,181,231,148,181,232,132,145,230,150,135,228,187,182,229,147,129,\n231,137,140,229,184,174,229,138,169,230,150,135,229,140,150,232,181,132,230,186,\n144,229,164,167,229,173,166,229,173,166,228,185,160,229,156,176,229,157,128,230,\n181,143,232,167,136,230,138,149,232,181,132,229,183,165,231,168,139,232,166,129,\n230,177,130,230,128,142,228,185,136,230,151,182,229,128,153,229,138,159,232,131,\n189,228,184,187,232,166,129,231,155,174,229,137,141,232,181,132,232,174,175,229,\n159,142,229,184,130,230,150,185,230,179,149,231,148,181,229,189,177,230,139,155,\n232,129,152,229,163,176,230,152,142,228,187,187,228,189,149,229,129,165,229,186,\n183,230,149,176,230,141,174,231,190,142,229,155,189,230,177,189,232,189,166,228,\n187,139,231,187,141,228,189,134,230,152,175,228,186,164,230,181,129,231,148,159,\n228,186,167,230,137,128,228,187,165,231,148,181,232,175,157,230,152,190,231,164,\n186,228,184,128,228,186,155,229,141,149,228,189,141,228,186,186,229,145,152,229,\n136,134,230,158,144,229,156,176,229,155,190,230,151,133,230,184,184,229,183,165,\n229,133,183,229,173,166,231,148,159,231,179,187,229,136,151,231,189,145,229,143,\n139,229,184,150,229,173,144,229,175,134,231,160,129,233,162,145,233,129,147,230,\n142,167,229,136,182,229,156,176,229,140,186,229,159,186,230,156,172,229,133,168,\n229,155,189,231,189,145,228,184,138,233,135,141,232,166,129,231,172,172,228,186,\n140,229,150,156,230,172,162,232,191,155,229,133,165,229,143,139,230,131,133,232,\n191,153,228,186,155,232,128,131,232,175,149,229,143,145,231,142,176,229,159,185,\n232,174,173,228,187,165,228,184,138,230,148,191,229,186,156,230,136,144,228,184,\n186,231,142,175,229,162,131,233,166,153,230,184,175,229,144,140,230,151,182,229,\n168,177,228,185,144,229,143,145,233,128,129,228,184,128,229,174,154,229,188,128,\n229,143,145,228,189,156,229,147,129,230,160,135,229,135,134,230,172,162,232,191,\n142,232,167,163,229,134,179,229,156,176,230,150,185,228,184,128,228,184,139,228,\n187,165,229,143,138,232,180,163,228,187,187,230,136,150,232,128,133,229,174,162,\n230,136,183,228,187,163,232,161,168,231,167,175,229,136,134,229,165,179,228,186,\n186,230,149,176,231,160,129,233,148,128,229,148,174,229,135,186,231,142,176,231,\n166,187,231,186,191,229,186,148,231,148,168,229,136,151,232,161,168,228,184,141,\n229,144,140,231,188,150,232,190,145,231,187,159,232,174,161,230,159,165,232,175,\n162,228,184,141,232,166,129,230,156,137,229,133,179,230,156,186,230,158,132,229,\n190,136,229,164,154,230,146,173,230,148,190,231,187,132,231,187,135,230,148,191,\n231,173,150,231,155,180,230,142,165,232,131,189,229,138,155,230,157,165,230,186,\n144,230,153,130,233,150,147,231,156,139,229,136,176,231,131,173,233,151,168,229,\n133,179,233,148,174,228,184,147,229,140,186,233,157,158,229,184,184,232,139,177,\n232,175,173,231,153,190,229,186,166,229,184,140,230,156,155,231,190,142,229,165,\n179,230,175,148,232,190,131,231,159,165,232,175,134,232,167,132,229,174,154,229,\n187,186,232,174,174,233,131,168,233,151,168,230,132,143,232,167,129,231,178,190,\n229,189,169,230,151,165,230,156,172,230,143,144,233,171,152,229,143,145,232,168,\n128,230,150,185,233,157,162,229,159,186,233,135,145,229,164,132,231,144,134,230,\n157,131,233,153,144,229,189,177,231,137,135,233,147,182,232,161,140,232,191,152,\n230,156,137,229,136,134,228,186,171,231,137,169,229,147,129,231,187,143,232,144,\n165,230,183,187,229,138,160,228,184,147,229,174,182,232,191,153,231,167,141,232,\n175,157,233,162,152,232,181,183,230,157,165,228,184,154,229,138,161,229,133,172,\n229,145,138,232,174,176,229,189,149,231,174,128,228,187,139,232,180,168,233,135,\n143,231,148,183,228,186,186,229,189,177,229,147,141,229,188,149,231,148,168,230,\n138,165,229,145,138,233,131,168,229,136,134,229,191,171,233,128,159,229,146,168,\n232,175,162,230,151,182,229,176,154,230,179,168,230,132,143,231,148,179,232,175,\n183,229,173,166,230,160,161,229,186,148,232,175,165,229,142,134,229,143,178,229,\n143,170,230,152,175,232,191,148,229,155,158,232,180,173,228,185,176,229,144,141,\n231,167,176,228,184,186,228,186,134,230,136,144,229,138,159,232,175,180,230,152,\n142,228,190,155,229,186,148,229,173,169,229,173,144,228,184,147,233,162,152,231,\n168,139,229,186,143,228,184,128,232,136,172,230,156,131,229,147,161,229,143,170,\n230,156,137,229,133,182,229,174,131,228,191,157,230,138,164,232,128,140,228,184,\n148,228,187,138,229,164,169,231,170,151,229,143,163,229,138,168,230,128,129,231,\n138,182,230,128,129,231,137,185,229,136,171,232,174,164,228,184,186,229,191,133,\n233,161,187,230,155,180,230,150,176,229,176,143,232,175,180,230,136,145,229,128,\n145,228,189,156,228,184,186,229,170,146,228,189,147,229,140,133,230,139,172,233,\n130,163,228,185,136,228,184,128,230,160,183,229,155,189,229,134,133,230,152,175,\n229,144,166,230,160,185,230,141,174,231,148,181,232,167,134,229,173,166,233,153,\n162,229,133,183,230,156,137,232,191,135,231,168,139,231,148,177,228,186,142,228,\n186,186,230,137,141,229,135,186,230,157,165,228,184,141,232,191,135,230,173,163,\n229,156,168,230,152,142,230,152,159,230,149,133,228,186,139,229,133,179,231,179,\n187,230,160,135,233,162,152,229,149,134,229,138,161,232,190,147,229,133,165,228,\n184,128,231,155,180,229,159,186,231,161,128,230,149,153,229,173,166,228,186,134,\n232,167,163,229,187,186,231,173,145,231,187,147,230,158,156,229,133,168,231,144,\n131,233,128,154,231,159,165,232,174,161,229,136,146,229,175,185,228,186,142,232,\n137,186,230,156,175,231,155,184,229,134,140,229,143,145,231,148,159,231,156,159,\n231,154,132,229,187,186,231,171,139,231,173,137,231,186,167,231,177,187,229,158,\n139,231,187,143,233,170,140,229,174,158,231,142,176,229,136,182,228,189,156,230,\n157,165,232,135,170,230,160,135,231,173,190,228,187,165,228,184,139,229,142,159,\n229,136,155,230,151,160,230,179,149,229,133,182,228,184,173,229,128,139,228,186,\n186,228,184,128,229,136,135,230,140,135,229,141,151,229,133,179,233,151,173,233,\n155,134,229,155,162,231,172,172,228,184,137,229,133,179,230,179,168,229,155,160,\n230,173,164,231,133,167,231,137,135,230,183,177,229,156,179,229,149,134,228,184,\n154,229,185,191,229,183,158,230,151,165,230,156,159,233,171,152,231,186,167,230,\n156,128,232,191,145,231,187,188,229,144,136,232,161,168,231,164,186,228,184,147,\n232,190,145,232,161,140,228,184,186,228,186,164,233,128,154,232,175,132,228,187,\n183,232,167,137,229,190,151,231,178,190,229,141,142,229,174,182,229,186,173,229,\n174,140,230,136,144,230,132,159,232,167,137,229,174,137,232,163,133,229,190,151,\n229,136,176,233,130,174,228,187,182,229,136,182,229,186,166,233,163,159,229,147,\n129,232,153,189,231,132,182,232,189,172,232,189,189,230,138,165,228,187,183,232,\n174,176,232,128,133,230,150,185,230,161,136,232,161,140,230,148,191,228,186,186,\n230,176,145,231,148,168,229,147,129,228,184,156,232,165,191,230,143,144,229,135,\n186,233,133,146,229,186,151,231,132,182,229,144,142,228,187,152,230,172,190,231,\n131,173,231,130,185,228,187,165,229,137,141,229,174,140,229,133,168,229,143,145,\n229,184,150,232,174,190,231,189,174,233,162,134,229,175,188,229,183,165,228,184,\n154,229,140,187,233,153,162,231,156,139,231,156,139,231,187,143,229,133,184,229,\n142,159,229,155,160,229,185,179,229,143,176,229,144,132,231,167,141,229,162,158,\n229,138,160,230,157,144,230,150,153,230,150,176,229,162,158,228,185,139,229,144,\n142,232,129,140,228,184,154,230,149,136,230,158,156,228,187,138,229,185,180,232,\n174,186,230,150,135,230,136,145,229,155,189,229,145,138,232,175,137,231,137,136,\n228,184,187,228,191,174,230,148,185,229,143,130,228,184,142,230,137,147,229,141,\n176,229,191,171,228,185,144,230,156,186,230,162,176,232,167,130,231,130,185,229,\n173,152,229,156,168,231,178,190,231,165,158,232,142,183,229,190,151,229,136,169,\n231,148,168,231,187,167,231,187,173,228,189,160,228,187,172,232,191,153,228,185,\n136,230,168,161,229,188,143,232,175,173,232,168,128,232,131,189,229,164,159,233,\n155,133,232,153,142,230,147,141,228,189,156,233,163,142,230,160,188,228,184,128,\n232,181,183,231,167,145,229,173,166,228,189,147,232,130,178,231,159,173,228,191,\n161,230,157,161,228,187,182,230,178,187,231,150,151,232,191,144,229,138,168,228,\n186,167,228,184,154,228,188,154,232,174,174,229,175,188,232,136,170,229,133,136,\n231,148,159,232,129,148,231,155,159,229,143,175,230,152,175,229,149,143,233,161,\n140,231,187,147,230,158,132,228,189,156,231,148,168,232,176,131,230,159,165,232,\n179,135,230,150,153,232,135,170,229,138,168,232,180,159,232,180,163,229,134,156,\n228,184,154,232,174,191,233,151,174,229,174,158,230,150,189,230,142,165,229,143,\n151,232,174,168,232,174,186,233,130,163,228,184,170,229,143,141,233,166,136,229,\n138,160,229,188,186,229,165,179,230,128,167,232,140,131,229,155,180,230,156,141,\n229,139,153,228,188,145,233,151,178,228,187,138,230,151,165,229,174,162,230,156,\n141,232,167,128,231,156,139,229,143,130,229,138,160,231,154,132,232,175,157,228,\n184,128,231,130,185,228,191,157,232,175,129,229,155,190,228,185,166,230,156,137,\n230,149,136,230,181,139,232,175,149,231,167,187,229,138,168,230,137,141,232,131,\n189,229,134,179,229,174,154,232,130,161,231,165,168,228,184,141,230,150,173,233,\n156,128,230,177,130,228,184,141,229,190,151,229,138,158,230,179,149,228,185,139,\n233,151,180,233,135,135,231,148,168,232,144,165,233,148,128,230,138,149,232,175,\n137,231,155,174,230,160,135,231,136,177,230,131,133,230,145,132,229,189,177,230,\n156,137,228,186,155,232,164,135,232,163,189,230,150,135,229,173,166,230,156,186,\n228,188,154,230,149,176,229,173,151,232,163,133,228,191,174,232,180,173,231,137,\n169,229,134,156,230,157,145,229,133,168,233,157,162,231,178,190,229,147,129,229,\n133,182,229,174,158,228,186,139,230,131,133,230,176,180,229,185,179,230,143,144,\n231,164,186,228,184,138,229,184,130,232,176,162,232,176,162,230,153,174,233,128,\n154,230,149,153,229,184,136,228,184,138,228,188,160,231,177,187,229,136,171,230,\n173,140,230,155,178,230,139,165,230,156,137,229,136,155,230,150,176,233,133,141,\n228,187,182,229,143,170,232,166,129,230,151,182,228,187,163,232,179,135,232,168,\n138,232,190,190,229,136,176,228,186,186,231,148,159,232,174,162,233,152,133,232,\n128,129,229,184,136,229,177,149,231,164,186,229,191,131,231,144,134,232,180,180,\n229,173,144,231,182,178,231,171,153,228,184,187,233,161,140,232,135,170,231,132,\n182,231,186,167,229,136,171,231,174,128,229,141,149,230,148,185,233,157,169,233,\n130,163,228,186,155,230,157,165,232,175,180,230,137,147,229,188,128,228,187,163,\n231,160,129,229,136,160,233,153,164,232,175,129,229,136,184,232,138,130,231,155,\n174,233,135,141,231,130,185,230,172,161,230,149,184,229,164,154,229,176,145,232,\n167,132,229,136,146,232,181,132,233,135,145,230,137,190,229,136,176,228,187,165,\n229,144,142,229,164,167,229,133,168,228,184,187,233,161,181,230,156,128,228,189,\n179,229,155,158,231,173,148,229,164,169,228,184,139,228,191,157,233,154,156,231,\n142,176,228,187,163,230,163,128,230,159,165,230,138,149,231,165,168,229,176,143,\n230,151,182,230,178,146,230,156,137,230,173,163,229,184,184,231,148,154,232,135,\n179,228,187,163,231,144,134,231,155,174,229,189,149,229,133,172,229,188,128,229,\n164,141,229,136,182,233,135,145,232,158,141,229,185,184,231,166,143,231,137,136,\n230,156,172,229,189,162,230,136,144,229,135,134,229,164,135,232,161,140,230,131,\n133,229,155,158,229,136,176,230,128,157,230,131,179,230,128,142,230,160,183,229,\n141,143,232,174,174,232,174,164,232,175,129,230,156,128,229,165,189,228,186,167,\n231,148,159,230,140,137,231,133,167,230,156,141,232,163,133,229,185,191,228,184,\n156,229,138,168,230,188,171,233,135,135,232,180,173,230,150,176,230,137,139,231,\n187,132,229,155,190,233,157,162,230,157,191,229,143,130,232,128,131,230,148,191,\n230,178,187,229,174,185,230,152,147,229,164,169,229,156,176,229,138,170,229,138,\n155,228,186,186,228,187,172,229,141,135,231,186,167,233,128,159,229,186,166,228,\n186,186,231,137,169,232,176,131,230,149,180,230,181,129,232,161,140,233,128,160,\n230,136,144,230,150,135,229,173,151,233,159,169,229,155,189,232,180,184,230,152,\n147,229,188,128,229,177,149,231,155,184,233,151,156,232,161,168,231,142,176,229,\n189,177,232,167,134,229,166,130,230,173,164,231,190,142,229,174,185,229,164,167,\n229,176,143,230,138,165,233,129,147,230,157,161,230,172,190,229,191,131,230,131,\n133,232,174,184,229,164,154,230,179,149,232,167,132,229,174,182,229,177,133,228,\n185,166,229,186,151,232,191,158,230,142,165,231,171,139,229,141,179,228,184,190,\n230,138,165,230,138,128,229,183,167,229,165,165,232,191,144,231,153,187,229,133,\n165,228,187,165,230,157,165,231,144,134,232,174,186,228,186,139,228,187,182,232,\n135,170,231,148,177,228,184,173,229,141,142,229,138,158,229,133,172,229,166,136,\n229,166,136,231,156,159,230,173,163,228,184,141,233,148,153,229,133,168,230,150,\n135,229,144,136,229,144,140,228,187,183,229,128,188,229,136,171,228,186,186,231,\n155,145,231,157,163,229,133,183,228,189,147,228,184,150,231,186,170,229,155,162,\n233,152,159,229,136,155,228,184,154,230,137,191,230,139,133,229,162,158,233,149,\n191,230,156,137,228,186,186,228,191,157,230,140,129,229,149,134,229,174,182,231,\n187,180,228,191,174,229,143,176,230,185,190,229,183,166,229,143,179,232,130,161,\n228,187,189,231,173,148,230,161,136,229,174,158,233,153,133,231,148,181,228,191,\n161,231,187,143,231,144,134,231,148,159,229,145,189,229,174,163,228,188,160,228,\n187,187,229,138,161,230,173,163,229,188,143,231,137,185,232,137,178,228,184,139,\n230,157,165,229,141,143,228,188,154,229,143,170,232,131,189,229,189,147,231,132,\n182,233,135,141,230,150,176,229,133,167,229,174,185,230,140,135,229,175,188,232,\n191,144,232,161,140,230,151,165,229,191,151,232,179,163,229,174,182,232,182,133,\n232,191,135,229,156,159,229,156,176,230,181,153,230,177,159,230,148,175,228,187,\n152,230,142,168,229,135,186,231,171,153,233,149,191,230,157,173,229,183,158,230,\n137,167,232,161,140,229,136,182,233,128,160,228,185,139,228,184,128,230,142,168,\n229,185,191,231,142,176,229,156,186,230,143,143,232,191,176,229,143,152,229,140,\n150,228,188,160,231,187,159,230,173,140,230,137,139,228,191,157,233,153,169,232,\n175,190,231,168,139,229,140,187,231,150,151,231,187,143,232,191,135,232,191,135,\n229,142,187,228,185,139,229,137,141,230,148,182,229,133,165,229,185,180,229,186,\n166,230,157,130,229,191,151,231,190,142,228,184,189,230,156,128,233,171,152,231,\n153,187,233,153,134,230,156,170,230,157,165,229,138,160,229,183,165,229,133,141,\n232,180,163,230,149,153,231,168,139,231,137,136,229,157,151,232,186,171,228,189,\n147,233,135,141,229,186,134,229,135,186,229,148,174,230,136,144,230,156,172,229,\n189,162,229,188,143,229,156,159,232,177,134,229,135,186,229,131,185,228,184,156,\n230,150,185,233,130,174,231,174,177,229,141,151,228,186,172,230,177,130,232,129,\n140,229,143,150,229,190,151,232,129,140,228,189,141,231,155,184,228,191,161,233,\n161,181,233,157,162,229,136,134,233,146,159,231,189,145,233,161,181,231,161,174,\n229,174,154,229,155,190,228,190,139,231,189,145,229,157,128,231,167,175,230,158,\n129,233,148,153,232,175,175,231,155,174,231,154,132,229,174,157,232,180,157,230,\n156,186,229,133,179,233,163,142,233,153,169,230,142,136,230,157,131,231,151,133,\n230,175,146,229,174,160,231,137,169,233,153,164,228,186,134,232,169,149,232,171,\n150,231,150,190,231,151,133,229,143,138,230,151,182,230,177,130,232,180,173,231,\n171,153,231,130,185,229,132,191,231,171,165,230,175,143,229,164,169,228,184,173,\n229,164,174,232,174,164,232,175,134,230,175,143,228,184,170,229,164,169,230,180,\n165,229,173,151,228,189,147,229,143,176,231,129,163,231,187,180,230,138,164,230,\n156,172,233,161,181,228,184,170,230,128,167,229,174,152,230,150,185,229,184,184,\n232,167,129,231,155,184,230,156,186,230,136,152,231,149,165,229,186,148,229,189,\n147,229,190,139,229,184,136,230,150,185,228,190,191,230,160,161,229,155,173,232,\n130,161,229,184,130,230,136,191,229,177,139,230,160,143,231,155,174,229,145,152,\n229,183,165,229,175,188,232,135,180,231,170,129,231,132,182,233,129,147,229,133,\n183,230,156,172,231,189,145,231,187,147,229,144,136,230,161,163,230,161,136,229,\n138,179,229,138,168,229,143,166,229,164,150,231,190,142,229,133,131,229,188,149,\n232,181,183,230,148,185,229,143,152,231,172,172,229,155,155,228,188,154,232,174,\n161,232,170,170,230,152,142,233,154,144,231,167,129,229,174,157,229,174,157,232,\n167,132,232,140,131,230,182,136,232,180,185,229,133,177,229,144,140,229,191,152,\n232,174,176,228,189,147,231,179,187,229,184,166,230,157,165,229,144,141,229,173,\n151,231,153,188,232,161,168,229,188,128,230,148,190,229,138,160,231,155,159,229,\n143,151,229,136,176,228,186,140,230,137,139,229,164,167,233,135,143,230,136,144,\n228,186,186,230,149,176,233,135,143,229,133,177,228,186,171,229,140,186,229,159,\n159,229,165,179,229,173,169,229,142,159,229,136,153,230,137,128,229,156,168,231,\n187,147,230,157,159,233,128,154,228,191,161,232,182,133,231,186,167,233,133,141,\n231,189,174,229,189,147,230,151,182,228,188,152,231,167,128,230,128,167,230,132,\n159,230,136,191,228,186,167,233,129,138,230,136,178,229,135,186,229,143,163,230,\n143,144,228,186,164,229,176,177,228,184,154,228,191,157,229,129,165,231,168,139,\n229,186,166,229,143,130,230,149,176,228,186,139,228,184,154,230,149,180,228,184,\n170,229,177,177,228,184,156,230,131,133,230,132,159,231,137,185,230,174,138,229,\n136,134,233,161,158,230,144,156,229,176,139,229,177,158,228,186,142,233,151,168,\n230,136,183,232,180,162,229,138,161,229,163,176,233,159,179,229,143,138,229,133,\n182,232,180,162,231,187,143,229,157,154,230,140,129,229,185,178,233,131,168,230,\n136,144,231,171,139,229,136,169,231,155,138,232,128,131,232,153,145,230,136,144,\n233,131,189,229,140,133,232,163,133,231,148,168,230,136,182,230,175,148,232,181,\n155,230,150,135,230,152,142,230,139,155,229,149,134,229,174,140,230,149,180,231,\n156,159,230,152,175,231,156,188,231,157,155,228,188,153,228,188,180,229,168,129,\n230,156,155,233,162,134,229,159,159,229,141,171,231,148,159,228,188,152,230,131,\n160,232,171,150,229,163,135,229,133,172,229,133,177,232,137,175,229,165,189,229,\n133,133,229,136,134,231,172,166,229,144,136,233,153,132,228,187,182,231,137,185,\n231,130,185,228,184,141,229,143,175,232,139,177,230,150,135,232,181,132,228,186,\n167,230,160,185,230,156,172,230,152,142,230,152,190,229,175,134,231,162,188,229,\n133,172,228,188,151,230,176,145,230,151,143,230,155,180,229,138,160,228,186,171,\n229,143,151,229,144,140,229,173,166,229,144,175,229,138,168,233,128,130,229,144,\n136,229,142,159,230,157,165,233,151,174,231,173,148,230,156,172,230,150,135,231,\n190,142,233,163,159,231,187,191,232,137,178,231,168,179,229,174,154,231,187,136,\n228,186,142,231,148,159,231,137,169,228,190,155,230,177,130,230,144,156,231,139,\n144,229,138,155,233,135,143,228,184,165,233,135,141,230,176,184,232,191,156,229,\n134,153,231,156,159,230,156,137,233,153,144,231,171,158,228,186,137,229,175,185,\n232,177,161,232,180,185,231,148,168,228,184,141,229,165,189,231,187,157,229,175,\n185,229,141,129,229,136,134,228,191,131,232,191,155,231,130,185,232,175,132,229,\n189,177,233,159,179,228,188,152,229,138,191,228,184,141,229,176,145,230,172,163,\n232,181,143,229,185,182,228,184,148,230,156,137,231,130,185,230,150,185,229,144,\n145,229,133,168,230,150,176,228,191,161,231,148,168,232,174,190,230,150,189,229,\n189,162,232,177,161,232,181,132,230,160,188,231,170,129,231,160,180,233,154,143,\n231,157,128,233,135,141,229,164,167,228,186,142,230,152,175,230,175,149,228,184,\n154,230,153,186,232,131,189,229,140,150,229,183,165,229,174,140,231,190,142,229,\n149,134,229,159,142,231,187,159,228,184,128,229,135,186,231,137,136,230,137,147,\n233,128,160,231,148,162,229,147,129,230,166,130,229,134,181,231,148,168,228,186,\n142,228,191,157,231,149,153,229,155,160,231,180,160,228,184,173,229,156,139,229,\n173,152,229,130,168,232,180,180,229,155,190,230,156,128,230,132,155,233,149,191,\n230,156,159,229,143,163,228,187,183,231,144,134,232,180,162,229,159,186,229,156,\n176,229,174,137,230,142,146,230,173,166,230,177,137,233,135,140,233,157,162,229,\n136,155,229,187,186,229,164,169,231,169,186,233,166,150,229,133,136,229,174,140,\n229,150,132,233,169,177,229,138,168,228,184,139,233,157,162,228,184,141,229,134,\n141,232,175,154,228,191,161,230,132,143,228,185,137,233,152,179,229,133,137,232,\n139,177,229,155,189,230,188,130,228,186,174,229,134,155,228,186,139,231,142,169,\n229,174,182,231,190,164,228,188,151,229,134,156,230,176,145,229,141,179,229,143,\n175,229,144,141,231,168,177,229,174,182,229,133,183,229,138,168,231,148,187,230,\n131,179,229,136,176,230,179,168,230,152,142,229,176,143,229,173,166,230,128,167,\n232,131,189,232,128,131,231,160,148,231,161,172,228,187,182,232,167,130,231,156,\n139,230,184,133,230,165,154,230,144,158,231,172,145,233,166,150,233,160,129,233,\n187,132,233,135,145,233,128,130,231,148,168,230,177,159,232,139,143,231,156,159,\n229,174,158,228,184,187,231,174,161,233,152,182,230,174,181,232,168,187,229,134,\n138,231,191,187,232,175,145,230,157,131,229,136,169,229,129,154,229,165,189,228,\n188,188,228,185,142,233,128,154,232,174,175,230,150,189,229,183,165,231,139,128,\n230,133,139,228,185,159,232,174,184,231,142,175,228,191,157,229,159,185,229,133,\n187,230,166,130,229,191,181,229,164,167,229,158,139,230,156,186,231,165,168,231,\n144,134,232,167,163,229,140,191,229,144,141,99,117,97,110,100,111,101,110,118,\n105,97,114,109,97,100,114,105,100,98,117,115,99,97,114,105,110,105,99,105,111,\n116,105,101,109,112,111,112,111,114,113,117,101,99,117,101,110,116,97,101,115,\n116,97,100,111,112,117,101,100,101,110,106,117,101,103,111,115,99,111,110,116,\n114,97,101,115,116,195,161,110,110,111,109,98,114,101,116,105,101,110,101,110,\n112,101,114,102,105,108,109,97,110,101,114,97,97,109,105,103,111,115,99,105,117,\n100,97,100,99,101,110,116,114,111,97,117,110,113,117,101,112,117,101,100,101,115\n,100,101,110,116,114,111,112,114,105,109,101,114,112,114,101,99,105,111,115,101,\n103,195,186,110,98,117,101,110,111,115,118,111,108,118,101,114,112,117,110,116,\n111,115,115,101,109,97,110,97,104,97,98,195,173,97,97,103,111,115,116,111,110,\n117,101,118,111,115,117,110,105,100,111,115,99,97,114,108,111,115,101,113,117,\n105,112,111,110,105,195,177,111,115,109,117,99,104,111,115,97,108,103,117,110,97\n,99,111,114,114,101,111,105,109,97,103,101,110,112,97,114,116,105,114,97,114,114\n,105,98,97,109,97,114,195,173,97,104,111,109,98,114,101,101,109,112,108,101,111,\n118,101,114,100,97,100,99,97,109,98,105,111,109,117,99,104,97,115,102,117,101,\n114,111,110,112,97,115,97,100,111,108,195,173,110,101,97,112,97,114,101,99,101,\n110,117,101,118,97,115,99,117,114,115,111,115,101,115,116,97,98,97,113,117,105,\n101,114,111,108,105,98,114,111,115,99,117,97,110,116,111,97,99,99,101,115,111,\n109,105,103,117,101,108,118,97,114,105,111,115,99,117,97,116,114,111,116,105,101\n,110,101,115,103,114,117,112,111,115,115,101,114,195,161,110,101,117,114,111,112\n,97,109,101,100,105,111,115,102,114,101,110,116,101,97,99,101,114,99,97,100,101,\n109,195,161,115,111,102,101,114,116,97,99,111,99,104,101,115,109,111,100,101,108\n,111,105,116,97,108,105,97,108,101,116,114,97,115,97,108,103,195,186,110,99,111,\n109,112,114,97,99,117,97,108,101,115,101,120,105,115,116,101,99,117,101,114,112,\n111,115,105,101,110,100,111,112,114,101,110,115,97,108,108,101,103,97,114,118,\n105,97,106,101,115,100,105,110,101,114,111,109,117,114,99,105,97,112,111,100,114\n,195,161,112,117,101,115,116,111,100,105,97,114,105,111,112,117,101,98,108,111,\n113,117,105,101,114,101,109,97,110,117,101,108,112,114,111,112,105,111,99,114,\n105,115,105,115,99,105,101,114,116,111,115,101,103,117,114,111,109,117,101,114,\n116,101,102,117,101,110,116,101,99,101,114,114,97,114,103,114,97,110,100,101,101\n,102,101,99,116,111,112,97,114,116,101,115,109,101,100,105,100,97,112,114,111,\n112,105,97,111,102,114,101,99,101,116,105,101,114,114,97,101,45,109,97,105,108,\n118,97,114,105,97,115,102,111,114,109,97,115,102,117,116,117,114,111,111,98,106,\n101,116,111,115,101,103,117,105,114,114,105,101,115,103,111,110,111,114,109,97,\n115,109,105,115,109,111,115,195,186,110,105,99,111,99,97,109,105,110,111,115,105\n,116,105,111,115,114,97,122,195,179,110,100,101,98,105,100,111,112,114,117,101,\n98,97,116,111,108,101,100,111,116,101,110,195,173,97,106,101,115,195,186,115,101\n,115,112,101,114,111,99,111,99,105,110,97,111,114,105,103,101,110,116,105,101,\n110,100,97,99,105,101,110,116,111,99,195,161,100,105,122,104,97,98,108,97,114,\n115,101,114,195,173,97,108,97,116,105,110,97,102,117,101,114,122,97,101,115,116,\n105,108,111,103,117,101,114,114,97,101,110,116,114,97,114,195,169,120,105,116,\n111,108,195,179,112,101,122,97,103,101,110,100,97,118,195,173,100,101,111,101,\n118,105,116,97,114,112,97,103,105,110,97,109,101,116,114,111,115,106,97,118,105,\n101,114,112,97,100,114,101,115,102,195,161,99,105,108,99,97,98,101,122,97,195,\n161,114,101,97,115,115,97,108,105,100,97,101,110,118,195,173,111,106,97,112,195,\n179,110,97,98,117,115,111,115,98,105,101,110,101,115,116,101,120,116,111,115,108\n,108,101,118,97,114,112,117,101,100,97,110,102,117,101,114,116,101,99,111,109,\n195,186,110,99,108,97,115,101,115,104,117,109,97,110,111,116,101,110,105,100,111\n,98,105,108,98,97,111,117,110,105,100,97,100,101,115,116,195,161,115,101,100,105\n,116,97,114,99,114,101,97,100,111,208,180,208,187,209,143,209,135,209,130,208,\n190,208,186,208,176,208,186,208,184,208,187,208,184,209,141,209,130,208,190,208,\n178,209,129,208,181,208,181,208,179,208,190,208,191,209,128,208,184,209,130,208,\n176,208,186,208,181,209,137,208,181,209,131,208,182,208,181,208,154,208,176,208,\n186,208,177,208,181,208,183,208,177,209,139,208,187,208,190,208,189,208,184,208,\n146,209,129,208,181,208,191,208,190,208,180,208,173,209,130,208,190,209,130,208,\n190,208,188,209,135,208,181,208,188,208,189,208,181,209,130,208,187,208,181,209,\n130,209,128,208,176,208,183,208,190,208,189,208,176,208,179,208,180,208,181,208,\n188,208,189,208,181,208,148,208,187,209,143,208,159,209,128,208,184,208,189,208,\n176,209,129,208,189,208,184,209,133,209,130,208,181,208,188,208,186,209,130,208,\n190,208,179,208,190,208,180,208,178,208,190,209,130,209,130,208,176,208,188,208,\n161,208,168,208,144,208,188,208,176,209,143,208,167,209,130,208,190,208,178,208,\n176,209,129,208,178,208,176,208,188,208,181,208,188,209,131,208,162,208,176,208,\n186,208,180,208,178,208,176,208,189,208,176,208,188,209,141,209,130,208,184,209,\n141,209,130,209,131,208,146,208,176,208,188,209,130,208,181,209,133,208,191,209,\n128,208,190,209,130,209,131,209,130,208,189,208,176,208,180,208,180,208,189,209,\n143,208,146,208,190,209,130,209,130,209,128,208,184,208,189,208,181,208,185,208,\n146,208,176,209,129,208,189,208,184,208,188,209,129,208,176,208,188,209,130,208,\n190,209,130,209,128,209,131,208,177,208,158,208,189,208,184,208,188,208,184,209,\n128,208,189,208,181,208,181,208,158,208,158,208,158,208,187,208,184,209,134,209,\n141,209,130,208,176,208,158,208,189,208,176,208,189,208,181,208,188,208,180,208,\n190,208,188,208,188,208,190,208,185,208,180,208,178,208,181,208,190,208,189,208,\n190,209,129,209,131,208,180,224,164,149,224,165,135,224,164,185,224,165,136,224,\n164,149,224,165,128,224,164,184,224,165,135,224,164,149,224,164,190,224,164,149,\n224,165,139,224,164,148,224,164,176,224,164,170,224,164,176,224,164,168,224,165,\n135,224,164,143,224,164,149,224,164,149,224,164,191,224,164,173,224,165,128,224,\n164,135,224,164,184,224,164,149,224,164,176,224,164,164,224,165,139,224,164,185,\n224,165,139,224,164,134,224,164,170,224,164,185,224,165,128,224,164,175,224,164,\n185,224,164,175,224,164,190,224,164,164,224,164,149,224,164,165,224,164,190,106,\n97,103,114,97,110,224,164,134,224,164,156,224,164,156,224,165,139,224,164,133,\n224,164,172,224,164,166,224,165,139,224,164,151,224,164,136,224,164,156,224,164,\n190,224,164,151,224,164,143,224,164,185,224,164,174,224,164,135,224,164,168,224,\n164,181,224,164,185,224,164,175,224,165,135,224,164,165,224,165,135,224,164,165,\n224,165,128,224,164,152,224,164,176,224,164,156,224,164,172,224,164,166,224,165,\n128,224,164,149,224,164,136,224,164,156,224,165,128,224,164,181,224,165,135,224,\n164,168,224,164,136,224,164,168,224,164,143,224,164,185,224,164,176,224,164,137,\n224,164,184,224,164,174,224,165,135,224,164,149,224,164,174,224,164,181,224,165,\n139,224,164,178,224,165,135,224,164,184,224,164,172,224,164,174,224,164,136,224,\n164,166,224,165,135,224,164,147,224,164,176,224,164,134,224,164,174,224,164,172,\n224,164,184,224,164,173,224,164,176,224,164,172,224,164,168,224,164,154,224,164,\n178,224,164,174,224,164,168,224,164,134,224,164,151,224,164,184,224,165,128,224,\n164,178,224,165,128,216,185,217,132,217,137,216,165,217,132,217,137,217,135,216,\n176,216,167,216,162,216,174,216,177,216,185,216,175,216,175,216,167,217,132,217,\n137,217,135,216,176,217,135,216,181,217,136,216,177,216,186,217,138,216,177,217,\n131,216,167,217,134,217,136,217,132,216,167,216,168,217,138,217,134,216,185,216,\n177,216,182,216,176,217,132,217,131,217,135,217,134,216,167,217,138,217,136,217,\n133,217,130,216,167,217,132,216,185,217,132,217,138,216,167,217,134,216,167,217,\n132,217,131,217,134,216,173,216,170,217,137,217,130,216,168,217,132,217,136,216,\n173,216,169,216,167,216,174,216,177,217,129,217,130,216,183,216,185,216,168,216,\n175,216,177,217,131,217,134,216,165,216,176,216,167,217,131,217,133,216,167,216,\n167,216,173,216,175,216,165,217,132,216,167,217,129,217,138,217,135,216,168,216,\n185,216,182,217,131,217,138,217,129,216,168,216,173,216,171,217,136,217,133,217,\n134,217,136,217,135,217,136,216,163,217,134,216,167,216,172,216,175,216,167,217,\n132,217,135,216,167,216,179,217,132,217,133,216,185,217,134,216,175,217,132,217,\n138,216,179,216,185,216,168,216,177,216,181,217,132,217,137,217,133,217,134,216,\n176,216,168,217,135,216,167,216,163,217,134,217,135,217,133,216,171,217,132,217,\n131,217,134,216,170,216,167,217,132,216,167,216,173,217,138,216,171,217,133,216,\n181,216,177,216,180,216,177,216,173,216,173,217,136,217,132,217,136,217,129,217,\n138,216,167,216,176,216,167,217,132,217,131,217,132,217,133,216,177,216,169,216,\n167,217,134,216,170,216,167,217,132,217,129,216,163,216,168,217,136,216,174,216,\n167,216,181,216,163,217,134,216,170,216,167,217,134,217,135,216,167,217,132,217,\n138,216,185,216,182,217,136,217,136,217,130,216,175,216,167,216,168,217,134,216,\n174,217,138,216,177,216,168,217,134,216,170,217,132,217,131,217,133,216,180,216,\n167,216,161,217,136,217,135,217,138,216,167,216,168,217,136,217,130,216,181,216,\n181,217,136,217,133,216,167,216,177,217,130,217,133,216,163,216,173,216,175,217,\n134,216,173,217,134,216,185,216,175,217,133,216,177,216,163,217,138,216,167,216,\n173,216,169,217,131,216,170,216,168,216,175,217,136,217,134,217,138,216,172,216,\n168,217,133,217,134,217,135,216,170,216,173,216,170,216,172,217,135,216,169,216,\n179,217,134,216,169,217,138,216,170,217,133,217,131,216,177,216,169,216,186,216,\n178,216,169,217,134,217,129,216,179,216,168,217,138,216,170,217,132,217,132,217,\n135,217,132,217,134,216,167,216,170,217,132,217,131,217,130,217,132,216,168,217,\n132,217,133,216,167,216,185,217,134,217,135,216,163,217,136,217,132,216,180,217,\n138,216,161,217,134,217,136,216,177,216,163,217,133,216,167,217,129,217,138,217,\n131,216,168,217,131,217,132,216,176,216,167,216,170,216,177,216,170,216,168,216,\n168,216,163,217,134,217,135,217,133,216,179,216,167,217,134,217,131,216,168,217,\n138,216,185,217,129,217,130,216,175,216,173,216,179,217,134,217,132,217,135,217,\n133,216,180,216,185,216,177,216,163,217,135,217,132,216,180,217,135,216,177,217,\n130,216,183,216,177,216,183,217,132,216,168,112,114,111,102,105,108,101,115,101,\n114,118,105,99,101,100,101,102,97,117,108,116,104,105,109,115,101,108,102,100,\n101,116,97,105,108,115,99,111,110,116,101,110,116,115,117,112,112,111,114,116,\n115,116,97,114,116,101,100,109,101,115,115,97,103,101,115,117,99,99,101,115,115,\n102,97,115,104,105,111,110,60,116,105,116,108,101,62,99,111,117,110,116,114,121,\n97,99,99,111,117,110,116,99,114,101,97,116,101,100,115,116,111,114,105,101,115,\n114,101,115,117,108,116,115,114,117,110,110,105,110,103,112,114,111,99,101,115,\n115,119,114,105,116,105,110,103,111,98,106,101,99,116,115,118,105,115,105,98,108\n,101,119,101,108,99,111,109,101,97,114,116,105,99,108,101,117,110,107,110,111,\n119,110,110,101,116,119,111,114,107,99,111,109,112,97,110,121,100,121,110,97,109\n,105,99,98,114,111,119,115,101,114,112,114,105,118,97,99,121,112,114,111,98,108,\n101,109,83,101,114,118,105,99,101,114,101,115,112,101,99,116,100,105,115,112,108\n,97,121,114,101,113,117,101,115,116,114,101,115,101,114,118,101,119,101,98,115,\n105,116,101,104,105,115,116,111,114,121,102,114,105,101,110,100,115,111,112,116,\n105,111,110,115,119,111,114,107,105,110,103,118,101,114,115,105,111,110,109,105,\n108,108,105,111,110,99,104,97,110,110,101,108,119,105,110,100,111,119,46,97,100,\n100,114,101,115,115,118,105,115,105,116,101,100,119,101,97,116,104,101,114,99,\n111,114,114,101,99,116,112,114,111,100,117,99,116,101,100,105,114,101,99,116,102\n,111,114,119,97,114,100,121,111,117,32,99,97,110,114,101,109,111,118,101,100,115\n,117,98,106,101,99,116,99,111,110,116,114,111,108,97,114,99,104,105,118,101,99,\n117,114,114,101,110,116,114,101,97,100,105,110,103,108,105,98,114,97,114,121,108\n,105,109,105,116,101,100,109,97,110,97,103,101,114,102,117,114,116,104,101,114,\n115,117,109,109,97,114,121,109,97,99,104,105,110,101,109,105,110,117,116,101,115\n,112,114,105,118,97,116,101,99,111,110,116,101,120,116,112,114,111,103,114,97,\n109,115,111,99,105,101,116,121,110,117,109,98,101,114,115,119,114,105,116,116,\n101,110,101,110,97,98,108,101,100,116,114,105,103,103,101,114,115,111,117,114,99\n,101,115,108,111,97,100,105,110,103,101,108,101,109,101,110,116,112,97,114,116,\n110,101,114,102,105,110,97,108,108,121,112,101,114,102,101,99,116,109,101,97,110\n,105,110,103,115,121,115,116,101,109,115,107,101,101,112,105,110,103,99,117,108,\n116,117,114,101,38,113,117,111,116,59,44,106,111,117,114,110,97,108,112,114,111,\n106,101,99,116,115,117,114,102,97,99,101,115,38,113,117,111,116,59,101,120,112,\n105,114,101,115,114,101,118,105,101,119,115,98,97,108,97,110,99,101,69,110,103,\n108,105,115,104,67,111,110,116,101,110,116,116,104,114,111,117,103,104,80,108,\n101,97,115,101,32,111,112,105,110,105,111,110,99,111,110,116,97,99,116,97,118,\n101,114,97,103,101,112,114,105,109,97,114,121,118,105,108,108,97,103,101,83,112,\n97,110,105,115,104,103,97,108,108,101,114,121,100,101,99,108,105,110,101,109,101\n,101,116,105,110,103,109,105,115,115,105,111,110,112,111,112,117,108,97,114,113,\n117,97,108,105,116,121,109,101,97,115,117,114,101,103,101,110,101,114,97,108,115\n,112,101,99,105,101,115,115,101,115,115,105,111,110,115,101,99,116,105,111,110,\n119,114,105,116,101,114,115,99,111,117,110,116,101,114,105,110,105,116,105,97,\n108,114,101,112,111,114,116,115,102,105,103,117,114,101,115,109,101,109,98,101,\n114,115,104,111,108,100,105,110,103,100,105,115,112,117,116,101,101,97,114,108,\n105,101,114,101,120,112,114,101,115,115,100,105,103,105,116,97,108,112,105,99,\n116,117,114,101,65,110,111,116,104,101,114,109,97,114,114,105,101,100,116,114,97\n,102,102,105,99,108,101,97,100,105,110,103,99,104,97,110,103,101,100,99,101,110,\n116,114,97,108,118,105,99,116,111,114,121,105,109,97,103,101,115,47,114,101,97,\n115,111,110,115,115,116,117,100,105,101,115,102,101,97,116,117,114,101,108,105,\n115,116,105,110,103,109,117,115,116,32,98,101,115,99,104,111,111,108,115,86,101,\n114,115,105,111,110,117,115,117,97,108,108,121,101,112,105,115,111,100,101,112,\n108,97,121,105,110,103,103,114,111,119,105,110,103,111,98,118,105,111,117,115,\n111,118,101,114,108,97,121,112,114,101,115,101,110,116,97,99,116,105,111,110,115\n,60,47,117,108,62,13,10,119,114,97,112,112,101,114,97,108,114,101,97,100,121,99,\n101,114,116,97,105,110,114,101,97,108,105,116,121,115,116,111,114,97,103,101,97,\n110,111,116,104,101,114,100,101,115,107,116,111,112,111,102,102,101,114,101,100,\n112,97,116,116,101,114,110,117,110,117,115,117,97,108,68,105,103,105,116,97,108,\n99,97,112,105,116,97,108,87,101,98,115,105,116,101,102,97,105,108,117,114,101,99\n,111,110,110,101,99,116,114,101,100,117,99,101,100,65,110,100,114,111,105,100,\n100,101,99,97,100,101,115,114,101,103,117,108,97,114,32,38,97,109,112,59,32,97,\n110,105,109,97,108,115,114,101,108,101,97,115,101,65,117,116,111,109,97,116,103,\n101,116,116,105,110,103,109,101,116,104,111,100,115,110,111,116,104,105,110,103,\n80,111,112,117,108,97,114,99,97,112,116,105,111,110,108,101,116,116,101,114,115,\n99,97,112,116,117,114,101,115,99,105,101,110,99,101,108,105,99,101,110,115,101,\n99,104,97,110,103,101,115,69,110,103,108,97,110,100,61,49,38,97,109,112,59,72,\n105,115,116,111,114,121,32,61,32,110,101,119,32,67,101,110,116,114,97,108,117,\n112,100,97,116,101,100,83,112,101,99,105,97,108,78,101,116,119,111,114,107,114,\n101,113,117,105,114,101,99,111,109,109,101,110,116,119,97,114,110,105,110,103,67\n,111,108,108,101,103,101,116,111,111,108,98,97,114,114,101,109,97,105,110,115,98\n,101,99,97,117,115,101,101,108,101,99,116,101,100,68,101,117,116,115,99,104,102,\n105,110,97,110,99,101,119,111,114,107,101,114,115,113,117,105,99,107,108,121,98,\n101,116,119,101,101,110,101,120,97,99,116,108,121,115,101,116,116,105,110,103,\n100,105,115,101,97,115,101,83,111,99,105,101,116,121,119,101,97,112,111,110,115,\n101,120,104,105,98,105,116,38,108,116,59,33,45,45,67,111,110,116,114,111,108,99,\n108,97,115,115,101,115,99,111,118,101,114,101,100,111,117,116,108,105,110,101,97\n,116,116,97,99,107,115,100,101,118,105,99,101,115,40,119,105,110,100,111,119,112\n,117,114,112,111,115,101,116,105,116,108,101,61,34,77,111,98,105,108,101,32,107,\n105,108,108,105,110,103,115,104,111,119,105,110,103,73,116,97,108,105,97,110,100\n,114,111,112,112,101,100,104,101,97,118,105,108,121,101,102,102,101,99,116,115,\n45,49,39,93,41,59,10,99,111,110,102,105,114,109,67,117,114,114,101,110,116,97,\n100,118,97,110,99,101,115,104,97,114,105,110,103,111,112,101,110,105,110,103,100\n,114,97,119,105,110,103,98,105,108,108,105,111,110,111,114,100,101,114,101,100,\n71,101,114,109,97,110,121,114,101,108,97,116,101,100,60,47,102,111,114,109,62,\n105,110,99,108,117,100,101,119,104,101,116,104,101,114,100,101,102,105,110,101,\n100,83,99,105,101,110,99,101,99,97,116,97,108,111,103,65,114,116,105,99,108,101,\n98,117,116,116,111,110,115,108,97,114,103,101,115,116,117,110,105,102,111,114,\n109,106,111,117,114,110,101,121,115,105,100,101,98,97,114,67,104,105,99,97,103,\n111,104,111,108,105,100,97,121,71,101,110,101,114,97,108,112,97,115,115,97,103,\n101,44,38,113,117,111,116,59,97,110,105,109,97,116,101,102,101,101,108,105,110,\n103,97,114,114,105,118,101,100,112,97,115,115,105,110,103,110,97,116,117,114,97,\n108,114,111,117,103,104,108,121,46,10,10,84,104,101,32,98,117,116,32,110,111,116\n,100,101,110,115,105,116,121,66,114,105,116,97,105,110,67,104,105,110,101,115,\n101,108,97,99,107,32,111,102,116,114,105,98,117,116,101,73,114,101,108,97,110,\n100,34,32,100,97,116,97,45,102,97,99,116,111,114,115,114,101,99,101,105,118,101,\n116,104,97,116,32,105,115,76,105,98,114,97,114,121,104,117,115,98,97,110,100,105\n,110,32,102,97,99,116,97,102,102,97,105,114,115,67,104,97,114,108,101,115,114,97\n,100,105,99,97,108,98,114,111,117,103,104,116,102,105,110,100,105,110,103,108,97\n,110,100,105,110,103,58,108,97,110,103,61,34,114,101,116,117,114,110,32,108,101,\n97,100,101,114,115,112,108,97,110,110,101,100,112,114,101,109,105,117,109,112,97\n,99,107,97,103,101,65,109,101,114,105,99,97,69,100,105,116,105,111,110,93,38,113\n,117,111,116,59,77,101,115,115,97,103,101,110,101,101,100,32,116,111,118,97,108,\n117,101,61,34,99,111,109,112,108,101,120,108,111,111,107,105,110,103,115,116,97,\n116,105,111,110,98,101,108,105,101,118,101,115,109,97,108,108,101,114,45,109,111\n,98,105,108,101,114,101,99,111,114,100,115,119,97,110,116,32,116,111,107,105,110\n,100,32,111,102,70,105,114,101,102,111,120,121,111,117,32,97,114,101,115,105,109\n,105,108,97,114,115,116,117,100,105,101,100,109,97,120,105,109,117,109,104,101,\n97,100,105,110,103,114,97,112,105,100,108,121,99,108,105,109,97,116,101,107,105,\n110,103,100,111,109,101,109,101,114,103,101,100,97,109,111,117,110,116,115,102,\n111,117,110,100,101,100,112,105,111,110,101,101,114,102,111,114,109,117,108,97,\n100,121,110,97,115,116,121,104,111,119,32,116,111,32,83,117,112,112,111,114,116,\n114,101,118,101,110,117,101,101,99,111,110,111,109,121,82,101,115,117,108,116,\n115,98,114,111,116,104,101,114,115,111,108,100,105,101,114,108,97,114,103,101,\n108,121,99,97,108,108,105,110,103,46,38,113,117,111,116,59,65,99,99,111,117,110,\n116,69,100,119,97,114,100,32,115,101,103,109,101,110,116,82,111,98,101,114,116,\n32,101,102,102,111,114,116,115,80,97,99,105,102,105,99,108,101,97,114,110,101,\n100,117,112,32,119,105,116,104,104,101,105,103,104,116,58,119,101,32,104,97,118,\n101,65,110,103,101,108,101,115,110,97,116,105,111,110,115,95,115,101,97,114,99,\n104,97,112,112,108,105,101,100,97,99,113,117,105,114,101,109,97,115,115,105,118,\n101,103,114,97,110,116,101,100,58,32,102,97,108,115,101,116,114,101,97,116,101,\n100,98,105,103,103,101,115,116,98,101,110,101,102,105,116,100,114,105,118,105,\n110,103,83,116,117,100,105,101,115,109,105,110,105,109,117,109,112,101,114,104,\n97,112,115,109,111,114,110,105,110,103,115,101,108,108,105,110,103,105,115,32,\n117,115,101,100,114,101,118,101,114,115,101,118,97,114,105,97,110,116,32,114,111\n,108,101,61,34,109,105,115,115,105,110,103,97,99,104,105,101,118,101,112,114,111\n,109,111,116,101,115,116,117,100,101,110,116,115,111,109,101,111,110,101,101,120\n,116,114,101,109,101,114,101,115,116,111,114,101,98,111,116,116,111,109,58,101,\n118,111,108,118,101,100,97,108,108,32,116,104,101,115,105,116,101,109,97,112,101\n,110,103,108,105,115,104,119,97,121,32,116,111,32,32,65,117,103,117,115,116,115,\n121,109,98,111,108,115,67,111,109,112,97,110,121,109,97,116,116,101,114,115,109,\n117,115,105,99,97,108,97,103,97,105,110,115,116,115,101,114,118,105,110,103,125,\n41,40,41,59,13,10,112,97,121,109,101,110,116,116,114,111,117,98,108,101,99,111,\n110,99,101,112,116,99,111,109,112,97,114,101,112,97,114,101,110,116,115,112,108,\n97,121,101,114,115,114,101,103,105,111,110,115,109,111,110,105,116,111,114,32,39\n,39,84,104,101,32,119,105,110,110,105,110,103,101,120,112,108,111,114,101,97,100\n,97,112,116,101,100,71,97,108,108,101,114,121,112,114,111,100,117,99,101,97,98,\n105,108,105,116,121,101,110,104,97,110,99,101,99,97,114,101,101,114,115,41,46,32\n,84,104,101,32,99,111,108,108,101,99,116,83,101,97,114,99,104,32,97,110,99,105,\n101,110,116,101,120,105,115,116,101,100,102,111,111,116,101,114,32,104,97,110,\n100,108,101,114,112,114,105,110,116,101,100,99,111,110,115,111,108,101,69,97,115\n,116,101,114,110,101,120,112,111,114,116,115,119,105,110,100,111,119,115,67,104,\n97,110,110,101,108,105,108,108,101,103,97,108,110,101,117,116,114,97,108,115,117\n,103,103,101,115,116,95,104,101,97,100,101,114,115,105,103,110,105,110,103,46,\n104,116,109,108,34,62,115,101,116,116,108,101,100,119,101,115,116,101,114,110,99\n,97,117,115,105,110,103,45,119,101,98,107,105,116,99,108,97,105,109,101,100,74,\n117,115,116,105,99,101,99,104,97,112,116,101,114,118,105,99,116,105,109,115,84,\n104,111,109,97,115,32,109,111,122,105,108,108,97,112,114,111,109,105,115,101,112\n,97,114,116,105,101,115,101,100,105,116,105,111,110,111,117,116,115,105,100,101,\n58,102,97,108,115,101,44,104,117,110,100,114,101,100,79,108,121,109,112,105,99,\n95,98,117,116,116,111,110,97,117,116,104,111,114,115,114,101,97,99,104,101,100,\n99,104,114,111,110,105,99,100,101,109,97,110,100,115,115,101,99,111,110,100,115,\n112,114,111,116,101,99,116,97,100,111,112,116,101,100,112,114,101,112,97,114,101\n,110,101,105,116,104,101,114,103,114,101,97,116,108,121,103,114,101,97,116,101,\n114,111,118,101,114,97,108,108,105,109,112,114,111,118,101,99,111,109,109,97,110\n,100,115,112,101,99,105,97,108,115,101,97,114,99,104,46,119,111,114,115,104,105,\n112,102,117,110,100,105,110,103,116,104,111,117,103,104,116,104,105,103,104,101,\n115,116,105,110,115,116,101,97,100,117,116,105,108,105,116,121,113,117,97,114,\n116,101,114,67,117,108,116,117,114,101,116,101,115,116,105,110,103,99,108,101,97\n,114,108,121,101,120,112,111,115,101,100,66,114,111,119,115,101,114,108,105,98,\n101,114,97,108,125,32,99,97,116,99,104,80,114,111,106,101,99,116,101,120,97,109,\n112,108,101,104,105,100,101,40,41,59,70,108,111,114,105,100,97,97,110,115,119,\n101,114,115,97,108,108,111,119,101,100,69,109,112,101,114,111,114,100,101,102,\n101,110,115,101,115,101,114,105,111,117,115,102,114,101,101,100,111,109,83,101,\n118,101,114,97,108,45,98,117,116,116,111,110,70,117,114,116,104,101,114,111,117,\n116,32,111,102,32,33,61,32,110,117,108,108,116,114,97,105,110,101,100,68,101,110\n,109,97,114,107,118,111,105,100,40,48,41,47,97,108,108,46,106,115,112,114,101,\n118,101,110,116,82,101,113,117,101,115,116,83,116,101,112,104,101,110,10,10,87,\n104,101,110,32,111,98,115,101,114,118,101,60,47,104,50,62,13,10,77,111,100,101,\n114,110,32,112,114,111,118,105,100,101,34,32,97,108,116,61,34,98,111,114,100,101\n,114,115,46,10,10,70,111,114,32,10,10,77,97,110,121,32,97,114,116,105,115,116,\n115,112,111,119,101,114,101,100,112,101,114,102,111,114,109,102,105,99,116,105,\n111,110,116,121,112,101,32,111,102,109,101,100,105,99,97,108,116,105,99,107,101,\n116,115,111,112,112,111,115,101,100,67,111,117,110,99,105,108,119,105,116,110,\n101,115,115,106,117,115,116,105,99,101,71,101,111,114,103,101,32,66,101,108,103,\n105,117,109,46,46,46,60,47,97,62,116,119,105,116,116,101,114,110,111,116,97,98,\n108,121,119,97,105,116,105,110,103,119,97,114,102,97,114,101,32,79,116,104,101,\n114,32,114,97,110,107,105,110,103,112,104,114,97,115,101,115,109,101,110,116,105\n,111,110,115,117,114,118,105,118,101,115,99,104,111,108,97,114,60,47,112,62,13,\n10,32,67,111,117,110,116,114,121,105,103,110,111,114,101,100,108,111,115,115,32,\n111,102,106,117,115,116,32,97,115,71,101,111,114,103,105,97,115,116,114,97,110,\n103,101,60,104,101,97,100,62,60,115,116,111,112,112,101,100,49,39,93,41,59,13,10\n,105,115,108,97,110,100,115,110,111,116,97,98,108,101,98,111,114,100,101,114,58,\n108,105,115,116,32,111,102,99,97,114,114,105,101,100,49,48,48,44,48,48,48,60,47,\n104,51,62,10,32,115,101,118,101,114,97,108,98,101,99,111,109,101,115,115,101,108\n,101,99,116,32,119,101,100,100,105,110,103,48,48,46,104,116,109,108,109,111,110,\n97,114,99,104,111,102,102,32,116,104,101,116,101,97,99,104,101,114,104,105,103,\n104,108,121,32,98,105,111,108,111,103,121,108,105,102,101,32,111,102,111,114,32,\n101,118,101,110,114,105,115,101,32,111,102,38,114,97,113,117,111,59,112,108,117,\n115,111,110,101,104,117,110,116,105,110,103,40,116,104,111,117,103,104,68,111,\n117,103,108,97,115,106,111,105,110,105,110,103,99,105,114,99,108,101,115,70,111,\n114,32,116,104,101,65,110,99,105,101,110,116,86,105,101,116,110,97,109,118,101,\n104,105,99,108,101,115,117,99,104,32,97,115,99,114,121,115,116,97,108,118,97,108\n,117,101,32,61,87,105,110,100,111,119,115,101,110,106,111,121,101,100,97,32,115,\n109,97,108,108,97,115,115,117,109,101,100,60,97,32,105,100,61,34,102,111,114,101\n,105,103,110,32,65,108,108,32,114,105,104,111,119,32,116,104,101,68,105,115,112,\n108,97,121,114,101,116,105,114,101,100,104,111,119,101,118,101,114,104,105,100,\n100,101,110,59,98,97,116,116,108,101,115,115,101,101,107,105,110,103,99,97,98,\n105,110,101,116,119,97,115,32,110,111,116,108,111,111,107,32,97,116,99,111,110,\n100,117,99,116,103,101,116,32,116,104,101,74,97,110,117,97,114,121,104,97,112,\n112,101,110,115,116,117,114,110,105,110,103,97,58,104,111,118,101,114,79,110,108\n,105,110,101,32,70,114,101,110,99,104,32,108,97,99,107,105,110,103,116,121,112,\n105,99,97,108,101,120,116,114,97,99,116,101,110,101,109,105,101,115,101,118,101,\n110,32,105,102,103,101,110,101,114,97,116,100,101,99,105,100,101,100,97,114,101,\n32,110,111,116,47,115,101,97,114,99,104,98,101,108,105,101,102,115,45,105,109,97\n,103,101,58,108,111,99,97,116,101,100,115,116,97,116,105,99,46,108,111,103,105,\n110,34,62,99,111,110,118,101,114,116,118,105,111,108,101,110,116,101,110,116,101\n,114,101,100,102,105,114,115,116,34,62,99,105,114,99,117,105,116,70,105,110,108,\n97,110,100,99,104,101,109,105,115,116,115,104,101,32,119,97,115,49,48,112,120,59\n,34,62,97,115,32,115,117,99,104,100,105,118,105,100,101,100,60,47,115,112,97,110\n,62,119,105,108,108,32,98,101,108,105,110,101,32,111,102,97,32,103,114,101,97,\n116,109,121,115,116,101,114,121,47,105,110,100,101,120,46,102,97,108,108,105,110\n,103,100,117,101,32,116,111,32,114,97,105,108,119,97,121,99,111,108,108,101,103,\n101,109,111,110,115,116,101,114,100,101,115,99,101,110,116,105,116,32,119,105,\n116,104,110,117,99,108,101,97,114,74,101,119,105,115,104,32,112,114,111,116,101,\n115,116,66,114,105,116,105,115,104,102,108,111,119,101,114,115,112,114,101,100,\n105,99,116,114,101,102,111,114,109,115,98,117,116,116,111,110,32,119,104,111,32,\n119,97,115,108,101,99,116,117,114,101,105,110,115,116,97,110,116,115,117,105,99,\n105,100,101,103,101,110,101,114,105,99,112,101,114,105,111,100,115,109,97,114,\n107,101,116,115,83,111,99,105,97,108,32,102,105,115,104,105,110,103,99,111,109,\n98,105,110,101,103,114,97,112,104,105,99,119,105,110,110,101,114,115,60,98,114,\n32,47,62,60,98,121,32,116,104,101,32,78,97,116,117,114,97,108,80,114,105,118,97,\n99,121,99,111,111,107,105,101,115,111,117,116,99,111,109,101,114,101,115,111,108\n,118,101,83,119,101,100,105,115,104,98,114,105,101,102,108,121,80,101,114,115,\n105,97,110,115,111,32,109,117,99,104,67,101,110,116,117,114,121,100,101,112,105,\n99,116,115,99,111,108,117,109,110,115,104,111,117,115,105,110,103,115,99,114,105\n,112,116,115,110,101,120,116,32,116,111,98,101,97,114,105,110,103,109,97,112,112\n,105,110,103,114,101,118,105,115,101,100,106,81,117,101,114,121,40,45,119,105,\n100,116,104,58,116,105,116,108,101,34,62,116,111,111,108,116,105,112,83,101,99,\n116,105,111,110,100,101,115,105,103,110,115,84,117,114,107,105,115,104,121,111,\n117,110,103,101,114,46,109,97,116,99,104,40,125,41,40,41,59,10,10,98,117,114,110\n,105,110,103,111,112,101,114,97,116,101,100,101,103,114,101,101,115,115,111,117,\n114,99,101,61,82,105,99,104,97,114,100,99,108,111,115,101,108,121,112,108,97,115\n,116,105,99,101,110,116,114,105,101,115,60,47,116,114,62,13,10,99,111,108,111,\n114,58,35,117,108,32,105,100,61,34,112,111,115,115,101,115,115,114,111,108,108,\n105,110,103,112,104,121,115,105,99,115,102,97,105,108,105,110,103,101,120,101,99\n,117,116,101,99,111,110,116,101,115,116,108,105,110,107,32,116,111,68,101,102,97\n,117,108,116,60,98,114,32,47,62,10,58,32,116,114,117,101,44,99,104,97,114,116,\n101,114,116,111,117,114,105,115,109,99,108,97,115,115,105,99,112,114,111,99,101,\n101,100,101,120,112,108,97,105,110,60,47,104,49,62,13,10,111,110,108,105,110,101\n,46,63,120,109,108,32,118,101,104,101,108,112,105,110,103,100,105,97,109,111,110\n,100,117,115,101,32,116,104,101,97,105,114,108,105,110,101,101,110,100,32,45,45,\n62,41,46,97,116,116,114,40,114,101,97,100,101,114,115,104,111,115,116,105,110,\n103,35,102,102,102,102,102,102,114,101,97,108,105,122,101,86,105,110,99,101,110,\n116,115,105,103,110,97,108,115,32,115,114,99,61,34,47,80,114,111,100,117,99,116,\n100,101,115,112,105,116,101,100,105,118,101,114,115,101,116,101,108,108,105,110,\n103,80,117,98,108,105,99,32,104,101,108,100,32,105,110,74,111,115,101,112,104,32\n,116,104,101,97,116,114,101,97,102,102,101,99,116,115,60,115,116,121,108,101,62,\n97,32,108,97,114,103,101,100,111,101,115,110,39,116,108,97,116,101,114,44,32,69,\n108,101,109,101,110,116,102,97,118,105,99,111,110,99,114,101,97,116,111,114,72,\n117,110,103,97,114,121,65,105,114,112,111,114,116,115,101,101,32,116,104,101,115\n,111,32,116,104,97,116,77,105,99,104,97,101,108,83,121,115,116,101,109,115,80,\n114,111,103,114,97,109,115,44,32,97,110,100,32,32,119,105,100,116,104,61,101,38,\n113,117,111,116,59,116,114,97,100,105,110,103,108,101,102,116,34,62,10,112,101,\n114,115,111,110,115,71,111,108,100,101,110,32,65,102,102,97,105,114,115,103,114,\n97,109,109,97,114,102,111,114,109,105,110,103,100,101,115,116,114,111,121,105,\n100,101,97,32,111,102,99,97,115,101,32,111,102,111,108,100,101,115,116,32,116,\n104,105,115,32,105,115,46,115,114,99,32,61,32,99,97,114,116,111,111,110,114,101,\n103,105,115,116,114,67,111,109,109,111,110,115,77,117,115,108,105,109,115,87,104\n,97,116,32,105,115,105,110,32,109,97,110,121,109,97,114,107,105,110,103,114,101,\n118,101,97,108,115,73,110,100,101,101,100,44,101,113,117,97,108,108,121,47,115,\n104,111,119,95,97,111,117,116,100,111,111,114,101,115,99,97,112,101,40,65,117,\n115,116,114,105,97,103,101,110,101,116,105,99,115,121,115,116,101,109,44,73,110,\n32,116,104,101,32,115,105,116,116,105,110,103,72,101,32,97,108,115,111,73,115,\n108,97,110,100,115,65,99,97,100,101,109,121,10,9,9,60,33,45,45,68,97,110,105,101\n,108,32,98,105,110,100,105,110,103,98,108,111,99,107,34,62,105,109,112,111,115,\n101,100,117,116,105,108,105,122,101,65,98,114,97,104,97,109,40,101,120,99,101,\n112,116,123,119,105,100,116,104,58,112,117,116,116,105,110,103,41,46,104,116,109\n,108,40,124,124,32,91,93,59,10,68,65,84,65,91,32,42,107,105,116,99,104,101,110,\n109,111,117,110,116,101,100,97,99,116,117,97,108,32,100,105,97,108,101,99,116,\n109,97,105,110,108,121,32,95,98,108,97,110,107,39,105,110,115,116,97,108,108,101\n,120,112,101,114,116,115,105,102,40,116,121,112,101,73,116,32,97,108,115,111,38,\n99,111,112,121,59,32,34,62,84,101,114,109,115,98,111,114,110,32,105,110,79,112,\n116,105,111,110,115,101,97,115,116,101,114,110,116,97,108,107,105,110,103,99,111\n,110,99,101,114,110,103,97,105,110,101,100,32,111,110,103,111,105,110,103,106,\n117,115,116,105,102,121,99,114,105,116,105,99,115,102,97,99,116,111,114,121,105,\n116,115,32,111,119,110,97,115,115,97,117,108,116,105,110,118,105,116,101,100,108\n,97,115,116,105,110,103,104,105,115,32,111,119,110,104,114,101,102,61,34,47,34,\n32,114,101,108,61,34,100,101,118,101,108,111,112,99,111,110,99,101,114,116,100,\n105,97,103,114,97,109,100,111,108,108,97,114,115,99,108,117,115,116,101,114,112,\n104,112,63,105,100,61,97,108,99,111,104,111,108,41,59,125,41,40,41,59,117,115,\n105,110,103,32,97,62,60,115,112,97,110,62,118,101,115,115,101,108,115,114,101,\n118,105,118,97,108,65,100,100,114,101,115,115,97,109,97,116,101,117,114,97,110,\n100,114,111,105,100,97,108,108,101,103,101,100,105,108,108,110,101,115,115,119,\n97,108,107,105,110,103,99,101,110,116,101,114,115,113,117,97,108,105,102,121,109\n,97,116,99,104,101,115,117,110,105,102,105,101,100,101,120,116,105,110,99,116,68\n,101,102,101,110,115,101,100,105,101,100,32,105,110,10,9,60,33,45,45,32,99,117,\n115,116,111,109,115,108,105,110,107,105,110,103,76,105,116,116,108,101,32,66,111\n,111,107,32,111,102,101,118,101,110,105,110,103,109,105,110,46,106,115,63,97,114\n,101,32,116,104,101,107,111,110,116,97,107,116,116,111,100,97,121,39,115,46,104,\n116,109,108,34,32,116,97,114,103,101,116,61,119,101,97,114,105,110,103,65,108,\n108,32,82,105,103,59,10,125,41,40,41,59,114,97,105,115,105,110,103,32,65,108,115\n,111,44,32,99,114,117,99,105,97,108,97,98,111,117,116,34,62,100,101,99,108,97,\n114,101,45,45,62,10,60,115,99,102,105,114,101,102,111,120,97,115,32,109,117,99,\n104,97,112,112,108,105,101,115,105,110,100,101,120,44,32,115,44,32,98,117,116,32\n,116,121,112,101,32,61,32,10,13,10,60,33,45,45,116,111,119,97,114,100,115,82,101\n,99,111,114,100,115,80,114,105,118,97,116,101,70,111,114,101,105,103,110,80,114,\n101,109,105,101,114,99,104,111,105,99,101,115,86,105,114,116,117,97,108,114,101,\n116,117,114,110,115,67,111,109,109,101,110,116,80,111,119,101,114,101,100,105,\n110,108,105,110,101,59,112,111,118,101,114,116,121,99,104,97,109,98,101,114,76,\n105,118,105,110,103,32,118,111,108,117,109,101,115,65,110,116,104,111,110,121,\n108,111,103,105,110,34,32,82,101,108,97,116,101,100,69,99,111,110,111,109,121,\n114,101,97,99,104,101,115,99,117,116,116,105,110,103,103,114,97,118,105,116,121,\n108,105,102,101,32,105,110,67,104,97,112,116,101,114,45,115,104,97,100,111,119,\n78,111,116,97,98,108,101,60,47,116,100,62,13,10,32,114,101,116,117,114,110,115,\n116,97,100,105,117,109,119,105,100,103,101,116,115,118,97,114,121,105,110,103,\n116,114,97,118,101,108,115,104,101,108,100,32,98,121,119,104,111,32,97,114,101,\n119,111,114,107,32,105,110,102,97,99,117,108,116,121,97,110,103,117,108,97,114,\n119,104,111,32,104,97,100,97,105,114,112,111,114,116,116,111,119,110,32,111,102,\n10,10,83,111,109,101,32,39,99,108,105,99,107,39,99,104,97,114,103,101,115,107,\n101,121,119,111,114,100,105,116,32,119,105,108,108,99,105,116,121,32,111,102,40,\n116,104,105,115,41,59,65,110,100,114,101,119,32,117,110,105,113,117,101,32,99,\n104,101,99,107,101,100,111,114,32,109,111,114,101,51,48,48,112,120,59,32,114,101\n,116,117,114,110,59,114,115,105,111,110,61,34,112,108,117,103,105,110,115,119,\n105,116,104,105,110,32,104,101,114,115,101,108,102,83,116,97,116,105,111,110,70,\n101,100,101,114,97,108,118,101,110,116,117,114,101,112,117,98,108,105,115,104,\n115,101,110,116,32,116,111,116,101,110,115,105,111,110,97,99,116,114,101,115,115\n,99,111,109,101,32,116,111,102,105,110,103,101,114,115,68,117,107,101,32,111,102\n,112,101,111,112,108,101,44,101,120,112,108,111,105,116,119,104,97,116,32,105,\n115,104,97,114,109,111,110,121,97,32,109,97,106,111,114,34,58,34,104,116,116,112\n,105,110,32,104,105,115,32,109,101,110,117,34,62,10,109,111,110,116,104,108,121,\n111,102,102,105,99,101,114,99,111,117,110,99,105,108,103,97,105,110,105,110,103,\n101,118,101,110,32,105,110,83,117,109,109,97,114,121,100,97,116,101,32,111,102,\n108,111,121,97,108,116,121,102,105,116,110,101,115,115,97,110,100,32,119,97,115,\n101,109,112,101,114,111,114,115,117,112,114,101,109,101,83,101,99,111,110,100,32\n,104,101,97,114,105,110,103,82,117,115,115,105,97,110,108,111,110,103,101,115,\n116,65,108,98,101,114,116,97,108,97,116,101,114,97,108,115,101,116,32,111,102,32\n,115,109,97,108,108,34,62,46,97,112,112,101,110,100,100,111,32,119,105,116,104,\n102,101,100,101,114,97,108,98,97,110,107,32,111,102,98,101,110,101,97,116,104,68\n,101,115,112,105,116,101,67,97,112,105,116,97,108,103,114,111,117,110,100,115,41\n,44,32,97,110,100,32,112,101,114,99,101,110,116,105,116,32,102,114,111,109,99,\n108,111,115,105,110,103,99,111,110,116,97,105,110,73,110,115,116,101,97,100,102,\n105,102,116,101,101,110,97,115,32,119,101,108,108,46,121,97,104,111,111,46,114,\n101,115,112,111,110,100,102,105,103,104,116,101,114,111,98,115,99,117,114,101,\n114,101,102,108,101,99,116,111,114,103,97,110,105,99,61,32,77,97,116,104,46,101,\n100,105,116,105,110,103,111,110,108,105,110,101,32,112,97,100,100,105,110,103,97\n,32,119,104,111,108,101,111,110,101,114,114,111,114,121,101,97,114,32,111,102,\n101,110,100,32,111,102,32,98,97,114,114,105,101,114,119,104,101,110,32,105,116,\n104,101,97,100,101,114,32,104,111,109,101,32,111,102,114,101,115,117,109,101,100\n,114,101,110,97,109,101,100,115,116,114,111,110,103,62,104,101,97,116,105,110,\n103,114,101,116,97,105,110,115,99,108,111,117,100,102,114,119,97,121,32,111,102,\n32,77,97,114,99,104,32,49,107,110,111,119,105,110,103,105,110,32,112,97,114,116,\n66,101,116,119,101,101,110,108,101,115,115,111,110,115,99,108,111,115,101,115,\n116,118,105,114,116,117,97,108,108,105,110,107,115,34,62,99,114,111,115,115,101,\n100,69,78,68,32,45,45,62,102,97,109,111,117,115,32,97,119,97,114,100,101,100,76,\n105,99,101,110,115,101,72,101,97,108,116,104,32,102,97,105,114,108,121,32,119,\n101,97,108,116,104,121,109,105,110,105,109,97,108,65,102,114,105,99,97,110,99,\n111,109,112,101,116,101,108,97,98,101,108,34,62,115,105,110,103,105,110,103,102,\n97,114,109,101,114,115,66,114,97,115,105,108,41,100,105,115,99,117,115,115,114,\n101,112,108,97,99,101,71,114,101,103,111,114,121,102,111,110,116,32,99,111,112,\n117,114,115,117,101,100,97,112,112,101,97,114,115,109,97,107,101,32,117,112,114,\n111,117,110,100,101,100,98,111,116,104,32,111,102,98,108,111,99,107,101,100,115,\n97,119,32,116,104,101,111,102,102,105,99,101,115,99,111,108,111,117,114,115,105,\n102,40,100,111,99,117,119,104,101,110,32,104,101,101,110,102,111,114,99,101,112,\n117,115,104,40,102,117,65,117,103,117,115,116,32,85,84,70,45,56,34,62,70,97,110,\n116,97,115,121,105,110,32,109,111,115,116,105,110,106,117,114,101,100,85,115,117\n,97,108,108,121,102,97,114,109,105,110,103,99,108,111,115,117,114,101,111,98,106\n,101,99,116,32,100,101,102,101,110,99,101,117,115,101,32,111,102,32,77,101,100,\n105,99,97,108,60,98,111,100,121,62,10,101,118,105,100,101,110,116,98,101,32,117,\n115,101,100,107,101,121,67,111,100,101,115,105,120,116,101,101,110,73,115,108,97\n,109,105,99,35,48,48,48,48,48,48,101,110,116,105,114,101,32,119,105,100,101,108,\n121,32,97,99,116,105,118,101,32,40,116,121,112,101,111,102,111,110,101,32,99,97,\n110,99,111,108,111,114,32,61,115,112,101,97,107,101,114,101,120,116,101,110,100,\n115,80,104,121,115,105,99,115,116,101,114,114,97,105,110,60,116,98,111,100,121,\n62,102,117,110,101,114,97,108,118,105,101,119,105,110,103,109,105,100,100,108,\n101,32,99,114,105,99,107,101,116,112,114,111,112,104,101,116,115,104,105,102,116\n,101,100,100,111,99,116,111,114,115,82,117,115,115,101,108,108,32,116,97,114,103\n,101,116,99,111,109,112,97,99,116,97,108,103,101,98,114,97,115,111,99,105,97,108\n,45,98,117,108,107,32,111,102,109,97,110,32,97,110,100,60,47,116,100,62,10,32,\n104,101,32,108,101,102,116,41,46,118,97,108,40,41,102,97,108,115,101,41,59,108,\n111,103,105,99,97,108,98,97,110,107,105,110,103,104,111,109,101,32,116,111,110,\n97,109,105,110,103,32,65,114,105,122,111,110,97,99,114,101,100,105,116,115,41,59\n,10,125,41,59,10,102,111,117,110,100,101,114,105,110,32,116,117,114,110,67,111,\n108,108,105,110,115,98,101,102,111,114,101,32,66,117,116,32,116,104,101,99,104,\n97,114,103,101,100,84,105,116,108,101,34,62,67,97,112,116,97,105,110,115,112,101\n,108,108,101,100,103,111,100,100,101,115,115,84,97,103,32,45,45,62,65,100,100,\n105,110,103,58,98,117,116,32,119,97,115,82,101,99,101,110,116,32,112,97,116,105,\n101,110,116,98,97,99,107,32,105,110,61,102,97,108,115,101,38,76,105,110,99,111,\n108,110,119,101,32,107,110,111,119,67,111,117,110,116,101,114,74,117,100,97,105,\n115,109,115,99,114,105,112,116,32,97,108,116,101,114,101,100,39,93,41,59,10,32,\n32,104,97,115,32,116,104,101,117,110,99,108,101,97,114,69,118,101,110,116,39,44,\n98,111,116,104,32,105,110,110,111,116,32,97,108,108,10,10,60,33,45,45,32,112,108\n,97,99,105,110,103,104,97,114,100,32,116,111,32,99,101,110,116,101,114,115,111,\n114,116,32,111,102,99,108,105,101,110,116,115,115,116,114,101,101,116,115,66,101\n,114,110,97,114,100,97,115,115,101,114,116,115,116,101,110,100,32,116,111,102,97\n,110,116,97,115,121,100,111,119,110,32,105,110,104,97,114,98,111,117,114,70,114,\n101,101,100,111,109,106,101,119,101,108,114,121,47,97,98,111,117,116,46,46,115,\n101,97,114,99,104,108,101,103,101,110,100,115,105,115,32,109,97,100,101,109,111,\n100,101,114,110,32,111,110,108,121,32,111,110,111,110,108,121,32,116,111,105,109\n,97,103,101,34,32,108,105,110,101,97,114,32,112,97,105,110,116,101,114,97,110,\n100,32,110,111,116,114,97,114,101,108,121,32,97,99,114,111,110,121,109,100,101,\n108,105,118,101,114,115,104,111,114,116,101,114,48,48,38,97,109,112,59,97,115,32\n,109,97,110,121,119,105,100,116,104,61,34,47,42,32,60,33,91,67,116,105,116,108,\n101,32,61,111,102,32,116,104,101,32,108,111,119,101,115,116,32,112,105,99,107,\n101,100,32,101,115,99,97,112,101,100,117,115,101,115,32,111,102,112,101,111,112,\n108,101,115,32,80,117,98,108,105,99,77,97,116,116,104,101,119,116,97,99,116,105,\n99,115,100,97,109,97,103,101,100,119,97,121,32,102,111,114,108,97,119,115,32,111\n,102,101,97,115,121,32,116,111,32,119,105,110,100,111,119,115,116,114,111,110,\n103,32,32,115,105,109,112,108,101,125,99,97,116,99,104,40,115,101,118,101,110,\n116,104,105,110,102,111,98,111,120,119,101,110,116,32,116,111,112,97,105,110,116\n,101,100,99,105,116,105,122,101,110,73,32,100,111,110,39,116,114,101,116,114,101\n,97,116,46,32,83,111,109,101,32,119,119,46,34,41,59,10,98,111,109,98,105,110,103\n,109,97,105,108,116,111,58,109,97,100,101,32,105,110,46,32,77,97,110,121,32,99,\n97,114,114,105,101,115,124,124,123,125,59,119,105,119,111,114,107,32,111,102,115\n,121,110,111,110,121,109,100,101,102,101,97,116,115,102,97,118,111,114,101,100,\n111,112,116,105,99,97,108,112,97,103,101,84,114,97,117,110,108,101,115,115,32,\n115,101,110,100,105,110,103,108,101,102,116,34,62,60,99,111,109,83,99,111,114,65\n,108,108,32,116,104,101,106,81,117,101,114,121,46,116,111,117,114,105,115,116,67\n,108,97,115,115,105,99,102,97,108,115,101,34,32,87,105,108,104,101,108,109,115,\n117,98,117,114,98,115,103,101,110,117,105,110,101,98,105,115,104,111,112,115,46,\n115,112,108,105,116,40,103,108,111,98,97,108,32,102,111,108,108,111,119,115,98,\n111,100,121,32,111,102,110,111,109,105,110,97,108,67,111,110,116,97,99,116,115,\n101,99,117,108,97,114,108,101,102,116,32,116,111,99,104,105,101,102,108,121,45,\n104,105,100,100,101,110,45,98,97,110,110,101,114,60,47,108,105,62,10,10,46,32,87\n,104,101,110,32,105,110,32,98,111,116,104,100,105,115,109,105,115,115,69,120,112\n,108,111,114,101,97,108,119,97,121,115,32,118,105,97,32,116,104,101,115,112,97,\n195,177,111,108,119,101,108,102,97,114,101,114,117,108,105,110,103,32,97,114,114\n,97,110,103,101,99,97,112,116,97,105,110,104,105,115,32,115,111,110,114,117,108,\n101,32,111,102,104,101,32,116,111,111,107,105,116,115,101,108,102,44,61,48,38,97\n,109,112,59,40,99,97,108,108,101,100,115,97,109,112,108,101,115,116,111,32,109,\n97,107,101,99,111,109,47,112,97,103,77,97,114,116,105,110,32,75,101,110,110,101,\n100,121,97,99,99,101,112,116,115,102,117,108,108,32,111,102,104,97,110,100,108,\n101,100,66,101,115,105,100,101,115,47,47,45,45,62,60,47,97,98,108,101,32,116,111\n,116,97,114,103,101,116,115,101,115,115,101,110,99,101,104,105,109,32,116,111,32\n,105,116,115,32,98,121,32,99,111,109,109,111,110,46,109,105,110,101,114,97,108,\n116,111,32,116,97,107,101,119,97,121,115,32,116,111,115,46,111,114,103,47,108,97\n,100,118,105,115,101,100,112,101,110,97,108,116,121,115,105,109,112,108,101,58,\n105,102,32,116,104,101,121,76,101,116,116,101,114,115,97,32,115,104,111,114,116,\n72,101,114,98,101,114,116,115,116,114,105,107,101,115,32,103,114,111,117,112,115\n,46,108,101,110,103,116,104,102,108,105,103,104,116,115,111,118,101,114,108,97,\n112,115,108,111,119,108,121,32,108,101,115,115,101,114,32,115,111,99,105,97,108,\n32,60,47,112,62,10,9,9,105,116,32,105,110,116,111,114,97,110,107,101,100,32,114,\n97,116,101,32,111,102,117,108,62,13,10,32,32,97,116,116,101,109,112,116,112,97,\n105,114,32,111,102,109,97,107,101,32,105,116,75,111,110,116,97,107,116,65,110,\n116,111,110,105,111,104,97,118,105,110,103,32,114,97,116,105,110,103,115,32,97,\n99,116,105,118,101,115,116,114,101,97,109,115,116,114,97,112,112,101,100,34,41,\n46,99,115,115,40,104,111,115,116,105,108,101,108,101,97,100,32,116,111,108,105,\n116,116,108,101,32,103,114,111,117,112,115,44,80,105,99,116,117,114,101,45,45,62\n,13,10,13,10,32,114,111,119,115,61,34,32,111,98,106,101,99,116,105,110,118,101,\n114,115,101,60,102,111,111,116,101,114,67,117,115,116,111,109,86,62,60,92,47,115\n,99,114,115,111,108,118,105,110,103,67,104,97,109,98,101,114,115,108,97,118,101,\n114,121,119,111,117,110,100,101,100,119,104,101,114,101,97,115,33,61,32,39,117,\n110,100,102,111,114,32,97,108,108,112,97,114,116,108,121,32,45,114,105,103,104,\n116,58,65,114,97,98,105,97,110,98,97,99,107,101,100,32,99,101,110,116,117,114,\n121,117,110,105,116,32,111,102,109,111,98,105,108,101,45,69,117,114,111,112,101,\n44,105,115,32,104,111,109,101,114,105,115,107,32,111,102,100,101,115,105,114,101\n,100,67,108,105,110,116,111,110,99,111,115,116,32,111,102,97,103,101,32,111,102,\n32,98,101,99,111,109,101,32,110,111,110,101,32,111,102,112,38,113,117,111,116,59\n,77,105,100,100,108,101,32,101,97,100,39,41,91,48,67,114,105,116,105,99,115,115,\n116,117,100,105,111,115,62,38,99,111,112,121,59,103,114,111,117,112,34,62,97,115\n,115,101,109,98,108,109,97,107,105,110,103,32,112,114,101,115,115,101,100,119,\n105,100,103,101,116,46,112,115,58,34,32,63,32,114,101,98,117,105,108,116,98,121,\n32,115,111,109,101,70,111,114,109,101,114,32,101,100,105,116,111,114,115,100,101\n,108,97,121,101,100,67,97,110,111,110,105,99,104,97,100,32,116,104,101,112,117,\n115,104,105,110,103,99,108,97,115,115,61,34,98,117,116,32,97,114,101,112,97,114,\n116,105,97,108,66,97,98,121,108,111,110,98,111,116,116,111,109,32,99,97,114,114,\n105,101,114,67,111,109,109,97,110,100,105,116,115,32,117,115,101,65,115,32,119,\n105,116,104,99,111,117,114,115,101,115,97,32,116,104,105,114,100,100,101,110,111\n,116,101,115,97,108,115,111,32,105,110,72,111,117,115,116,111,110,50,48,112,120,\n59,34,62,97,99,99,117,115,101,100,100,111,117,98,108,101,32,103,111,97,108,32,\n111,102,70,97,109,111,117,115,32,41,46,98,105,110,100,40,112,114,105,101,115,116\n,115,32,79,110,108,105,110,101,105,110,32,74,117,108,121,115,116,32,43,32,34,103\n,99,111,110,115,117,108,116,100,101,99,105,109,97,108,104,101,108,112,102,117,\n108,114,101,118,105,118,101,100,105,115,32,118,101,114,121,114,39,43,39,105,112,\n116,108,111,115,105,110,103,32,102,101,109,97,108,101,115,105,115,32,97,108,115,\n111,115,116,114,105,110,103,115,100,97,121,115,32,111,102,97,114,114,105,118,97,\n108,102,117,116,117,114,101,32,60,111,98,106,101,99,116,102,111,114,99,105,110,\n103,83,116,114,105,110,103,40,34,32,47,62,10,9,9,104,101,114,101,32,105,115,101,\n110,99,111,100,101,100,46,32,32,84,104,101,32,98,97,108,108,111,111,110,100,111,\n110,101,32,98,121,47,99,111,109,109,111,110,98,103,99,111,108,111,114,108,97,119\n,32,111,102,32,73,110,100,105,97,110,97,97,118,111,105,100,101,100,98,117,116,32\n,116,104,101,50,112,120,32,51,112,120,106,113,117,101,114,121,46,97,102,116,101,\n114,32,97,112,111,108,105,99,121,46,109,101,110,32,97,110,100,102,111,111,116,\n101,114,45,61,32,116,114,117,101,59,102,111,114,32,117,115,101,115,99,114,101,\n101,110,46,73,110,100,105,97,110,32,105,109,97,103,101,32,61,102,97,109,105,108,\n121,44,104,116,116,112,58,47,47,32,38,110,98,115,112,59,100,114,105,118,101,114,\n115,101,116,101,114,110,97,108,115,97,109,101,32,97,115,110,111,116,105,99,101,\n100,118,105,101,119,101,114,115,125,41,40,41,59,10,32,105,115,32,109,111,114,101\n,115,101,97,115,111,110,115,102,111,114,109,101,114,32,116,104,101,32,110,101,\n119,105,115,32,106,117,115,116,99,111,110,115,101,110,116,32,83,101,97,114,99,\n104,119,97,115,32,116,104,101,119,104,121,32,116,104,101,115,104,105,112,112,101\n,100,98,114,62,60,98,114,62,119,105,100,116,104,58,32,104,101,105,103,104,116,61\n,109,97,100,101,32,111,102,99,117,105,115,105,110,101,105,115,32,116,104,97,116,\n97,32,118,101,114,121,32,65,100,109,105,114,97,108,32,102,105,120,101,100,59,110\n,111,114,109,97,108,32,77,105,115,115,105,111,110,80,114,101,115,115,44,32,111,\n110,116,97,114,105,111,99,104,97,114,115,101,116,116,114,121,32,116,111,32,105,\n110,118,97,100,101,100,61,34,116,114,117,101,34,115,112,97,99,105,110,103,105,\n115,32,109,111,115,116,97,32,109,111,114,101,32,116,111,116,97,108,108,121,102,\n97,108,108,32,111,102,125,41,59,13,10,32,32,105,109,109,101,110,115,101,116,105,\n109,101,32,105,110,115,101,116,32,111,117,116,115,97,116,105,115,102,121,116,111\n,32,102,105,110,100,100,111,119,110,32,116,111,108,111,116,32,111,102,32,80,108,\n97,121,101,114,115,105,110,32,74,117,110,101,113,117,97,110,116,117,109,110,111,\n116,32,116,104,101,116,105,109,101,32,116,111,100,105,115,116,97,110,116,70,105,\n110,110,105,115,104,115,114,99,32,61,32,40,115,105,110,103,108,101,32,104,101,\n108,112,32,111,102,71,101,114,109,97,110,32,108,97,119,32,97,110,100,108,97,98,\n101,108,101,100,102,111,114,101,115,116,115,99,111,111,107,105,110,103,115,112,\n97,99,101,34,62,104,101,97,100,101,114,45,119,101,108,108,32,97,115,83,116,97,\n110,108,101,121,98,114,105,100,103,101,115,47,103,108,111,98,97,108,67,114,111,\n97,116,105,97,32,65,98,111,117,116,32,91,48,93,59,10,32,32,105,116,44,32,97,110,\n100,103,114,111,117,112,101,100,98,101,105,110,103,32,97,41,123,116,104,114,111,\n119,104,101,32,109,97,100,101,108,105,103,104,116,101,114,101,116,104,105,99,97,\n108,70,70,70,70,70,70,34,98,111,116,116,111,109,34,108,105,107,101,32,97,32,101,\n109,112,108,111,121,115,108,105,118,101,32,105,110,97,115,32,115,101,101,110,112\n,114,105,110,116,101,114,109,111,115,116,32,111,102,117,98,45,108,105,110,107,\n114,101,106,101,99,116,115,97,110,100,32,117,115,101,105,109,97,103,101,34,62,\n115,117,99,99,101,101,100,102,101,101,100,105,110,103,78,117,99,108,101,97,114,\n105,110,102,111,114,109,97,116,111,32,104,101,108,112,87,111,109,101,110,39,115,\n78,101,105,116,104,101,114,77,101,120,105,99,97,110,112,114,111,116,101,105,110,\n60,116,97,98,108,101,32,98,121,32,109,97,110,121,104,101,97,108,116,104,121,108,\n97,119,115,117,105,116,100,101,118,105,115,101,100,46,112,117,115,104,40,123,115\n,101,108,108,101,114,115,115,105,109,112,108,121,32,84,104,114,111,117,103,104,\n46,99,111,111,107,105,101,32,73,109,97,103,101,40,111,108,100,101,114,34,62,117,\n115,46,106,115,34,62,32,83,105,110,99,101,32,117,110,105,118,101,114,115,108,97,\n114,103,101,114,32,111,112,101,110,32,116,111,33,45,45,32,101,110,100,108,105,\n101,115,32,105,110,39,93,41,59,13,10,32,32,109,97,114,107,101,116,119,104,111,32\n,105,115,32,40,34,68,79,77,67,111,109,97,110,97,103,101,100,111,110,101,32,102,\n111,114,116,121,112,101,111,102,32,75,105,110,103,100,111,109,112,114,111,102,\n105,116,115,112,114,111,112,111,115,101,116,111,32,115,104,111,119,99,101,110,\n116,101,114,59,109,97,100,101,32,105,116,100,114,101,115,115,101,100,119,101,114\n,101,32,105,110,109,105,120,116,117,114,101,112,114,101,99,105,115,101,97,114,\n105,115,105,110,103,115,114,99,32,61,32,39,109,97,107,101,32,97,32,115,101,99,\n117,114,101,100,66,97,112,116,105,115,116,118,111,116,105,110,103,32,10,9,9,118,\n97,114,32,77,97,114,99,104,32,50,103,114,101,119,32,117,112,67,108,105,109,97,\n116,101,46,114,101,109,111,118,101,115,107,105,108,108,101,100,119,97,121,32,116\n,104,101,60,47,104,101,97,100,62,102,97,99,101,32,111,102,97,99,116,105,110,103,\n32,114,105,103,104,116,34,62,116,111,32,119,111,114,107,114,101,100,117,99,101,\n115,104,97,115,32,104,97,100,101,114,101,99,116,101,100,115,104,111,119,40,41,59\n,97,99,116,105,111,110,61,98,111,111,107,32,111,102,97,110,32,97,114,101,97,61,\n61,32,34,104,116,116,60,104,101,97,100,101,114,10,60,104,116,109,108,62,99,111,\n110,102,111,114,109,102,97,99,105,110,103,32,99,111,111,107,105,101,46,114,101,\n108,121,32,111,110,104,111,115,116,101,100,32,46,99,117,115,116,111,109,104,101,\n32,119,101,110,116,98,117,116,32,102,111,114,115,112,114,101,97,100,32,70,97,109\n,105,108,121,32,97,32,109,101,97,110,115,111,117,116,32,116,104,101,102,111,114,\n117,109,115,46,102,111,111,116,97,103,101,34,62,77,111,98,105,108,67,108,101,109\n,101,110,116,115,34,32,105,100,61,34,97,115,32,104,105,103,104,105,110,116,101,\n110,115,101,45,45,62,60,33,45,45,102,101,109,97,108,101,32,105,115,32,115,101,\n101,110,105,109,112,108,105,101,100,115,101,116,32,116,104,101,97,32,115,116,97,\n116,101,97,110,100,32,104,105,115,102,97,115,116,101,115,116,98,101,115,105,100,\n101,115,98,117,116,116,111,110,95,98,111,117,110,100,101,100,34,62,60,105,109,\n103,32,73,110,102,111,98,111,120,101,118,101,110,116,115,44,97,32,121,111,117,\n110,103,97,110,100,32,97,114,101,78,97,116,105,118,101,32,99,104,101,97,112,101,\n114,84,105,109,101,111,117,116,97,110,100,32,104,97,115,101,110,103,105,110,101,\n115,119,111,110,32,116,104,101,40,109,111,115,116,108,121,114,105,103,104,116,58\n,32,102,105,110,100,32,97,32,45,98,111,116,116,111,109,80,114,105,110,99,101,32,\n97,114,101,97,32,111,102,109,111,114,101,32,111,102,115,101,97,114,99,104,95,110\n,97,116,117,114,101,44,108,101,103,97,108,108,121,112,101,114,105,111,100,44,108\n,97,110,100,32,111,102,111,114,32,119,105,116,104,105,110,100,117,99,101,100,112\n,114,111,118,105,110,103,109,105,115,115,105,108,101,108,111,99,97,108,108,121,\n65,103,97,105,110,115,116,116,104,101,32,119,97,121,107,38,113,117,111,116,59,\n112,120,59,34,62,13,10,112,117,115,104,101,100,32,97,98,97,110,100,111,110,110,\n117,109,101,114,97,108,67,101,114,116,97,105,110,73,110,32,116,104,105,115,109,\n111,114,101,32,105,110,111,114,32,115,111,109,101,110,97,109,101,32,105,115,97,\n110,100,44,32,105,110,99,114,111,119,110,101,100,73,83,66,78,32,48,45,99,114,101\n,97,116,101,115,79,99,116,111,98,101,114,109,97,121,32,110,111,116,99,101,110,\n116,101,114,32,108,97,116,101,32,105,110,68,101,102,101,110,99,101,101,110,97,99\n,116,101,100,119,105,115,104,32,116,111,98,114,111,97,100,108,121,99,111,111,108\n,105,110,103,111,110,108,111,97,100,61,105,116,46,32,84,104,101,114,101,99,111,\n118,101,114,77,101,109,98,101,114,115,104,101,105,103,104,116,32,97,115,115,117,\n109,101,115,60,104,116,109,108,62,10,112,101,111,112,108,101,46,105,110,32,111,\n110,101,32,61,119,105,110,100,111,119,102,111,111,116,101,114,95,97,32,103,111,\n111,100,32,114,101,107,108,97,109,97,111,116,104,101,114,115,44,116,111,32,116,\n104,105,115,95,99,111,111,107,105,101,112,97,110,101,108,34,62,76,111,110,100,\n111,110,44,100,101,102,105,110,101,115,99,114,117,115,104,101,100,98,97,112,116,\n105,115,109,99,111,97,115,116,97,108,115,116,97,116,117,115,32,116,105,116,108,\n101,34,32,109,111,118,101,32,116,111,108,111,115,116,32,105,110,98,101,116,116,\n101,114,32,105,109,112,108,105,101,115,114,105,118,97,108,114,121,115,101,114,\n118,101,114,115,32,83,121,115,116,101,109,80,101,114,104,97,112,115,101,115,32,\n97,110,100,32,99,111,110,116,101,110,100,102,108,111,119,105,110,103,108,97,115,\n116,101,100,32,114,105,115,101,32,105,110,71,101,110,101,115,105,115,118,105,101\n,119,32,111,102,114,105,115,105,110,103,32,115,101,101,109,32,116,111,98,117,116\n,32,105,110,32,98,97,99,107,105,110,103,104,101,32,119,105,108,108,103,105,118,\n101,110,32,97,103,105,118,105,110,103,32,99,105,116,105,101,115,46,102,108,111,\n119,32,111,102,32,76,97,116,101,114,32,97,108,108,32,98,117,116,72,105,103,104,\n119,97,121,111,110,108,121,32,98,121,115,105,103,110,32,111,102,104,101,32,100,\n111,101,115,100,105,102,102,101,114,115,98,97,116,116,101,114,121,38,97,109,112,\n59,108,97,115,105,110,103,108,101,115,116,104,114,101,97,116,115,105,110,116,101\n,103,101,114,116,97,107,101,32,111,110,114,101,102,117,115,101,100,99,97,108,108\n,101,100,32,61,85,83,38,97,109,112,83,101,101,32,116,104,101,110,97,116,105,118,\n101,115,98,121,32,116,104,105,115,115,121,115,116,101,109,46,104,101,97,100,32,\n111,102,58,104,111,118,101,114,44,108,101,115,98,105,97,110,115,117,114,110,97,\n109,101,97,110,100,32,97,108,108,99,111,109,109,111,110,47,104,101,97,100,101,\n114,95,95,112,97,114,97,109,115,72,97,114,118,97,114,100,47,112,105,120,101,108,\n46,114,101,109,111,118,97,108,115,111,32,108,111,110,103,114,111,108,101,32,111,\n102,106,111,105,110,116,108,121,115,107,121,115,99,114,97,85,110,105,99,111,100,\n101,98,114,32,47,62,13,10,65,116,108,97,110,116,97,110,117,99,108,101,117,115,67\n,111,117,110,116,121,44,112,117,114,101,108,121,32,99,111,117,110,116,34,62,101,\n97,115,105,108,121,32,98,117,105,108,100,32,97,111,110,99,108,105,99,107,97,32,\n103,105,118,101,110,112,111,105,110,116,101,114,104,38,113,117,111,116,59,101,\n118,101,110,116,115,32,101,108,115,101,32,123,10,100,105,116,105,111,110,115,110\n,111,119,32,116,104,101,44,32,119,105,116,104,32,109,97,110,32,119,104,111,111,\n114,103,47,87,101,98,111,110,101,32,97,110,100,99,97,118,97,108,114,121,72,101,\n32,100,105,101,100,115,101,97,116,116,108,101,48,48,44,48,48,48,32,123,119,105,\n110,100,111,119,104,97,118,101,32,116,111,105,102,40,119,105,110,100,97,110,100,\n32,105,116,115,115,111,108,101,108,121,32,109,38,113,117,111,116,59,114,101,110,\n101,119,101,100,68,101,116,114,111,105,116,97,109,111,110,103,115,116,101,105,\n116,104,101,114,32,116,104,101,109,32,105,110,83,101,110,97,116,111,114,85,115,\n60,47,97,62,60,75,105,110,103,32,111,102,70,114,97,110,99,105,115,45,112,114,111\n,100,117,99,104,101,32,117,115,101,100,97,114,116,32,97,110,100,104,105,109,32,\n97,110,100,117,115,101,100,32,98,121,115,99,111,114,105,110,103,97,116,32,104,\n111,109,101,116,111,32,104,97,118,101,114,101,108,97,116,101,115,105,98,105,108,\n105,116,121,102,97,99,116,105,111,110,66,117,102,102,97,108,111,108,105,110,107,\n34,62,60,119,104,97,116,32,104,101,102,114,101,101,32,116,111,67,105,116,121,32,\n111,102,99,111,109,101,32,105,110,115,101,99,116,111,114,115,99,111,117,110,116,\n101,100,111,110,101,32,100,97,121,110,101,114,118,111,117,115,115,113,117,97,114\n,101,32,125,59,105,102,40,103,111,105,110,32,119,104,97,116,105,109,103,34,32,97\n,108,105,115,32,111,110,108,121,115,101,97,114,99,104,47,116,117,101,115,100,97,\n121,108,111,111,115,101,108,121,83,111,108,111,109,111,110,115,101,120,117,97,\n108,32,45,32,60,97,32,104,114,109,101,100,105,117,109,34,68,79,32,78,79,84,32,70\n,114,97,110,99,101,44,119,105,116,104,32,97,32,119,97,114,32,97,110,100,115,101,\n99,111,110,100,32,116,97,107,101,32,97,32,62,13,10,13,10,13,10,109,97,114,107,\n101,116,46,104,105,103,104,119,97,121,100,111,110,101,32,105,110,99,116,105,118,\n105,116,121,34,108,97,115,116,34,62,111,98,108,105,103,101,100,114,105,115,101,\n32,116,111,34,117,110,100,101,102,105,109,97,100,101,32,116,111,32,69,97,114,108\n,121,32,112,114,97,105,115,101,100,105,110,32,105,116,115,32,102,111,114,32,104,\n105,115,97,116,104,108,101,116,101,74,117,112,105,116,101,114,89,97,104,111,111,\n33,32,116,101,114,109,101,100,32,115,111,32,109,97,110,121,114,101,97,108,108,\n121,32,115,46,32,84,104,101,32,97,32,119,111,109,97,110,63,118,97,108,117,101,61\n,100,105,114,101,99,116,32,114,105,103,104,116,34,32,98,105,99,121,99,108,101,97\n,99,105,110,103,61,34,100,97,121,32,97,110,100,115,116,97,116,105,110,103,82,97,\n116,104,101,114,44,104,105,103,104,101,114,32,79,102,102,105,99,101,32,97,114,\n101,32,110,111,119,116,105,109,101,115,44,32,119,104,101,110,32,97,32,112,97,121\n,32,102,111,114,111,110,32,116,104,105,115,45,108,105,110,107,34,62,59,98,111,\n114,100,101,114,97,114,111,117,110,100,32,97,110,110,117,97,108,32,116,104,101,\n32,78,101,119,112,117,116,32,116,104,101,46,99,111,109,34,32,116,97,107,105,110,\n32,116,111,97,32,98,114,105,101,102,40,105,110,32,116,104,101,103,114,111,117,\n112,115,46,59,32,119,105,100,116,104,101,110,122,121,109,101,115,115,105,109,112\n,108,101,32,105,110,32,108,97,116,101,123,114,101,116,117,114,110,116,104,101,\n114,97,112,121,97,32,112,111,105,110,116,98,97,110,110,105,110,103,105,110,107,\n115,34,62,10,40,41,59,34,32,114,101,97,32,112,108,97,99,101,92,117,48,48,51,67,\n97,97,98,111,117,116,32,97,116,114,62,13,10,9,9,99,99,111,117,110,116,32,103,105\n,118,101,115,32,97,60,83,67,82,73,80,84,82,97,105,108,119,97,121,116,104,101,109\n,101,115,47,116,111,111,108,98,111,120,66,121,73,100,40,34,120,104,117,109,97,\n110,115,44,119,97,116,99,104,101,115,105,110,32,115,111,109,101,32,105,102,32,40\n,119,105,99,111,109,105,110,103,32,102,111,114,109,97,116,115,32,85,110,100,101,\n114,32,98,117,116,32,104,97,115,104,97,110,100,101,100,32,109,97,100,101,32,98,\n121,116,104,97,110,32,105,110,102,101,97,114,32,111,102,100,101,110,111,116,101,\n100,47,105,102,114,97,109,101,108,101,102,116,32,105,110,118,111,108,116,97,103,\n101,105,110,32,101,97,99,104,97,38,113,117,111,116,59,98,97,115,101,32,111,102,\n73,110,32,109,97,110,121,117,110,100,101,114,103,111,114,101,103,105,109,101,115\n,97,99,116,105,111,110,32,60,47,112,62,13,10,60,117,115,116,111,109,86,97,59,38,\n103,116,59,60,47,105,109,112,111,114,116,115,111,114,32,116,104,97,116,109,111,\n115,116,108,121,32,38,97,109,112,59,114,101,32,115,105,122,101,61,34,60,47,97,62\n,60,47,104,97,32,99,108,97,115,115,112,97,115,115,105,118,101,72,111,115,116,32,\n61,32,87,104,101,116,104,101,114,102,101,114,116,105,108,101,86,97,114,105,111,\n117,115,61,91,93,59,40,102,117,99,97,109,101,114,97,115,47,62,60,47,116,100,62,\n97,99,116,115,32,97,115,73,110,32,115,111,109,101,62,13,10,13,10,60,33,111,114,\n103,97,110,105,115,32,60,98,114,32,47,62,66,101,105,106,105,110,103,99,97,116,97\n,108,195,160,100,101,117,116,115,99,104,101,117,114,111,112,101,117,101,117,115,\n107,97,114,97,103,97,101,105,108,103,101,115,118,101,110,115,107,97,101,115,112,\n97,195,177,97,109,101,110,115,97,106,101,117,115,117,97,114,105,111,116,114,97,\n98,97,106,111,109,195,169,120,105,99,111,112,195,161,103,105,110,97,115,105,101,\n109,112,114,101,115,105,115,116,101,109,97,111,99,116,117,98,114,101,100,117,114\n,97,110,116,101,97,195,177,97,100,105,114,101,109,112,114,101,115,97,109,111,109\n,101,110,116,111,110,117,101,115,116,114,111,112,114,105,109,101,114,97,116,114,\n97,118,195,169,115,103,114,97,99,105,97,115,110,117,101,115,116,114,97,112,114,\n111,99,101,115,111,101,115,116,97,100,111,115,99,97,108,105,100,97,100,112,101,\n114,115,111,110,97,110,195,186,109,101,114,111,97,99,117,101,114,100,111,109,195\n,186,115,105,99,97,109,105,101,109,98,114,111,111,102,101,114,116,97,115,97,108,\n103,117,110,111,115,112,97,195,173,115,101,115,101,106,101,109,112,108,111,100,\n101,114,101,99,104,111,97,100,101,109,195,161,115,112,114,105,118,97,100,111,97,\n103,114,101,103,97,114,101,110,108,97,99,101,115,112,111,115,105,98,108,101,104,\n111,116,101,108,101,115,115,101,118,105,108,108,97,112,114,105,109,101,114,111,\n195,186,108,116,105,109,111,101,118,101,110,116,111,115,97,114,99,104,105,118,\n111,99,117,108,116,117,114,97,109,117,106,101,114,101,115,101,110,116,114,97,100\n,97,97,110,117,110,99,105,111,101,109,98,97,114,103,111,109,101,114,99,97,100,\n111,103,114,97,110,100,101,115,101,115,116,117,100,105,111,109,101,106,111,114,\n101,115,102,101,98,114,101,114,111,100,105,115,101,195,177,111,116,117,114,105,\n115,109,111,99,195,179,100,105,103,111,112,111,114,116,97,100,97,101,115,112,97,\n99,105,111,102,97,109,105,108,105,97,97,110,116,111,110,105,111,112,101,114,109,\n105,116,101,103,117,97,114,100,97,114,97,108,103,117,110,97,115,112,114,101,99,\n105,111,115,97,108,103,117,105,101,110,115,101,110,116,105,100,111,118,105,115,\n105,116,97,115,116,195,173,116,117,108,111,99,111,110,111,99,101,114,115,101,103\n,117,110,100,111,99,111,110,115,101,106,111,102,114,97,110,99,105,97,109,105,110\n,117,116,111,115,115,101,103,117,110,100,97,116,101,110,101,109,111,115,101,102,\n101,99,116,111,115,109,195,161,108,97,103,97,115,101,115,105,195,179,110,114,101\n,118,105,115,116,97,103,114,97,110,97,100,97,99,111,109,112,114,97,114,105,110,\n103,114,101,115,111,103,97,114,99,195,173,97,97,99,99,105,195,179,110,101,99,117\n,97,100,111,114,113,117,105,101,110,101,115,105,110,99,108,117,115,111,100,101,\n98,101,114,195,161,109,97,116,101,114,105,97,104,111,109,98,114,101,115,109,117,\n101,115,116,114,97,112,111,100,114,195,173,97,109,97,195,177,97,110,97,195,186,\n108,116,105,109,97,101,115,116,97,109,111,115,111,102,105,99,105,97,108,116,97,\n109,98,105,101,110,110,105,110,103,195,186,110,115,97,108,117,100,111,115,112,\n111,100,101,109,111,115,109,101,106,111,114,97,114,112,111,115,105,116,105,111,\n110,98,117,115,105,110,101,115,115,104,111,109,101,112,97,103,101,115,101,99,117\n,114,105,116,121,108,97,110,103,117,97,103,101,115,116,97,110,100,97,114,100,99,\n97,109,112,97,105,103,110,102,101,97,116,117,114,101,115,99,97,116,101,103,111,\n114,121,101,120,116,101,114,110,97,108,99,104,105,108,100,114,101,110,114,101,\n115,101,114,118,101,100,114,101,115,101,97,114,99,104,101,120,99,104,97,110,103,\n101,102,97,118,111,114,105,116,101,116,101,109,112,108,97,116,101,109,105,108,\n105,116,97,114,121,105,110,100,117,115,116,114,121,115,101,114,118,105,99,101,\n115,109,97,116,101,114,105,97,108,112,114,111,100,117,99,116,115,122,45,105,110,\n100,101,120,58,99,111,109,109,101,110,116,115,115,111,102,116,119,97,114,101,99,\n111,109,112,108,101,116,101,99,97,108,101,110,100,97,114,112,108,97,116,102,111,\n114,109,97,114,116,105,99,108,101,115,114,101,113,117,105,114,101,100,109,111,\n118,101,109,101,110,116,113,117,101,115,116,105,111,110,98,117,105,108,100,105,\n110,103,112,111,108,105,116,105,99,115,112,111,115,115,105,98,108,101,114,101,\n108,105,103,105,111,110,112,104,121,115,105,99,97,108,102,101,101,100,98,97,99,\n107,114,101,103,105,115,116,101,114,112,105,99,116,117,114,101,115,100,105,115,\n97,98,108,101,100,112,114,111,116,111,99,111,108,97,117,100,105,101,110,99,101,\n115,101,116,116,105,110,103,115,97,99,116,105,118,105,116,121,101,108,101,109,\n101,110,116,115,108,101,97,114,110,105,110,103,97,110,121,116,104,105,110,103,97\n,98,115,116,114,97,99,116,112,114,111,103,114,101,115,115,111,118,101,114,118,\n105,101,119,109,97,103,97,122,105,110,101,101,99,111,110,111,109,105,99,116,114,\n97,105,110,105,110,103,112,114,101,115,115,117,114,101,118,97,114,105,111,117,\n115,32,60,115,116,114,111,110,103,62,112,114,111,112,101,114,116,121,115,104,111\n,112,112,105,110,103,116,111,103,101,116,104,101,114,97,100,118,97,110,99,101,\n100,98,101,104,97,118,105,111,114,100,111,119,110,108,111,97,100,102,101,97,116,\n117,114,101,100,102,111,111,116,98,97,108,108,115,101,108,101,99,116,101,100,76,\n97,110,103,117,97,103,101,100,105,115,116,97,110,99,101,114,101,109,101,109,98,\n101,114,116,114,97,99,107,105,110,103,112,97,115,115,119,111,114,100,109,111,100\n,105,102,105,101,100,115,116,117,100,101,110,116,115,100,105,114,101,99,116,108,\n121,102,105,103,104,116,105,110,103,110,111,114,116,104,101,114,110,100,97,116,\n97,98,97,115,101,102,101,115,116,105,118,97,108,98,114,101,97,107,105,110,103,\n108,111,99,97,116,105,111,110,105,110,116,101,114,110,101,116,100,114,111,112,\n100,111,119,110,112,114,97,99,116,105,99,101,101,118,105,100,101,110,99,101,102,\n117,110,99,116,105,111,110,109,97,114,114,105,97,103,101,114,101,115,112,111,110\n,115,101,112,114,111,98,108,101,109,115,110,101,103,97,116,105,118,101,112,114,\n111,103,114,97,109,115,97,110,97,108,121,115,105,115,114,101,108,101,97,115,101,\n100,98,97,110,110,101,114,34,62,112,117,114,99,104,97,115,101,112,111,108,105,99\n,105,101,115,114,101,103,105,111,110,97,108,99,114,101,97,116,105,118,101,97,114\n,103,117,109,101,110,116,98,111,111,107,109,97,114,107,114,101,102,101,114,114,\n101,114,99,104,101,109,105,99,97,108,100,105,118,105,115,105,111,110,99,97,108,\n108,98,97,99,107,115,101,112,97,114,97,116,101,112,114,111,106,101,99,116,115,99\n,111,110,102,108,105,99,116,104,97,114,100,119,97,114,101,105,110,116,101,114,\n101,115,116,100,101,108,105,118,101,114,121,109,111,117,110,116,97,105,110,111,\n98,116,97,105,110,101,100,61,32,102,97,108,115,101,59,102,111,114,40,118,97,114,\n32,97,99,99,101,112,116,101,100,99,97,112,97,99,105,116,121,99,111,109,112,117,\n116,101,114,105,100,101,110,116,105,116,121,97,105,114,99,114,97,102,116,101,109\n,112,108,111,121,101,100,112,114,111,112,111,115,101,100,100,111,109,101,115,116\n,105,99,105,110,99,108,117,100,101,115,112,114,111,118,105,100,101,100,104,111,\n115,112,105,116,97,108,118,101,114,116,105,99,97,108,99,111,108,108,97,112,115,\n101,97,112,112,114,111,97,99,104,112,97,114,116,110,101,114,115,108,111,103,111,\n34,62,60,97,100,97,117,103,104,116,101,114,97,117,116,104,111,114,34,32,99,117,\n108,116,117,114,97,108,102,97,109,105,108,105,101,115,47,105,109,97,103,101,115,\n47,97,115,115,101,109,98,108,121,112,111,119,101,114,102,117,108,116,101,97,99,\n104,105,110,103,102,105,110,105,115,104,101,100,100,105,115,116,114,105,99,116,\n99,114,105,116,105,99,97,108,99,103,105,45,98,105,110,47,112,117,114,112,111,115\n,101,115,114,101,113,117,105,114,101,115,101,108,101,99,116,105,111,110,98,101,\n99,111,109,105,110,103,112,114,111,118,105,100,101,115,97,99,97,100,101,109,105,\n99,101,120,101,114,99,105,115,101,97,99,116,117,97,108,108,121,109,101,100,105,\n99,105,110,101,99,111,110,115,116,97,110,116,97,99,99,105,100,101,110,116,77,97,\n103,97,122,105,110,101,100,111,99,117,109,101,110,116,115,116,97,114,116,105,110\n,103,98,111,116,116,111,109,34,62,111,98,115,101,114,118,101,100,58,32,38,113,\n117,111,116,59,101,120,116,101,110,100,101,100,112,114,101,118,105,111,117,115,\n83,111,102,116,119,97,114,101,99,117,115,116,111,109,101,114,100,101,99,105,115,\n105,111,110,115,116,114,101,110,103,116,104,100,101,116,97,105,108,101,100,115,\n108,105,103,104,116,108,121,112,108,97,110,110,105,110,103,116,101,120,116,97,\n114,101,97,99,117,114,114,101,110,99,121,101,118,101,114,121,111,110,101,115,116\n,114,97,105,103,104,116,116,114,97,110,115,102,101,114,112,111,115,105,116,105,\n118,101,112,114,111,100,117,99,101,100,104,101,114,105,116,97,103,101,115,104,\n105,112,112,105,110,103,97,98,115,111,108,117,116,101,114,101,99,101,105,118,101\n,100,114,101,108,101,118,97,110,116,98,117,116,116,111,110,34,32,118,105,111,108\n,101,110,99,101,97,110,121,119,104,101,114,101,98,101,110,101,102,105,116,115,\n108,97,117,110,99,104,101,100,114,101,99,101,110,116,108,121,97,108,108,105,97,\n110,99,101,102,111,108,108,111,119,101,100,109,117,108,116,105,112,108,101,98,\n117,108,108,101,116,105,110,105,110,99,108,117,100,101,100,111,99,99,117,114,114\n,101,100,105,110,116,101,114,110,97,108,36,40,116,104,105,115,41,46,114,101,112,\n117,98,108,105,99,62,60,116,114,62,60,116,100,99,111,110,103,114,101,115,115,114\n,101,99,111,114,100,101,100,117,108,116,105,109,97,116,101,115,111,108,117,116,\n105,111,110,60,117,108,32,105,100,61,34,100,105,115,99,111,118,101,114,72,111,\n109,101,60,47,97,62,119,101,98,115,105,116,101,115,110,101,116,119,111,114,107,\n115,97,108,116,104,111,117,103,104,101,110,116,105,114,101,108,121,109,101,109,\n111,114,105,97,108,109,101,115,115,97,103,101,115,99,111,110,116,105,110,117,101\n,97,99,116,105,118,101,34,62,115,111,109,101,119,104,97,116,118,105,99,116,111,\n114,105,97,87,101,115,116,101,114,110,32,32,116,105,116,108,101,61,34,76,111,99,\n97,116,105,111,110,99,111,110,116,114,97,99,116,118,105,115,105,116,111,114,115,\n68,111,119,110,108,111,97,100,119,105,116,104,111,117,116,32,114,105,103,104,116\n,34,62,10,109,101,97,115,117,114,101,115,119,105,100,116,104,32,61,32,118,97,114\n,105,97,98,108,101,105,110,118,111,108,118,101,100,118,105,114,103,105,110,105,\n97,110,111,114,109,97,108,108,121,104,97,112,112,101,110,101,100,97,99,99,111,\n117,110,116,115,115,116,97,110,100,105,110,103,110,97,116,105,111,110,97,108,82,\n101,103,105,115,116,101,114,112,114,101,112,97,114,101,100,99,111,110,116,114,\n111,108,115,97,99,99,117,114,97,116,101,98,105,114,116,104,100,97,121,115,116,\n114,97,116,101,103,121,111,102,102,105,99,105,97,108,103,114,97,112,104,105,99,\n115,99,114,105,109,105,110,97,108,112,111,115,115,105,98,108,121,99,111,110,115,\n117,109,101,114,80,101,114,115,111,110,97,108,115,112,101,97,107,105,110,103,118\n,97,108,105,100,97,116,101,97,99,104,105,101,118,101,100,46,106,112,103,34,32,47\n,62,109,97,99,104,105,110,101,115,60,47,104,50,62,10,32,32,107,101,121,119,111,\n114,100,115,102,114,105,101,110,100,108,121,98,114,111,116,104,101,114,115,99,\n111,109,98,105,110,101,100,111,114,105,103,105,110,97,108,99,111,109,112,111,115\n,101,100,101,120,112,101,99,116,101,100,97,100,101,113,117,97,116,101,112,97,107\n,105,115,116,97,110,102,111,108,108,111,119,34,32,118,97,108,117,97,98,108,101,\n60,47,108,97,98,101,108,62,114,101,108,97,116,105,118,101,98,114,105,110,103,105\n,110,103,105,110,99,114,101,97,115,101,103,111,118,101,114,110,111,114,112,108,\n117,103,105,110,115,47,76,105,115,116,32,111,102,32,72,101,97,100,101,114,34,62,\n34,32,110,97,109,101,61,34,32,40,38,113,117,111,116,59,103,114,97,100,117,97,116\n,101,60,47,104,101,97,100,62,10,99,111,109,109,101,114,99,101,109,97,108,97,121,\n115,105,97,100,105,114,101,99,116,111,114,109,97,105,110,116,97,105,110,59,104,\n101,105,103,104,116,58,115,99,104,101,100,117,108,101,99,104,97,110,103,105,110,\n103,98,97,99,107,32,116,111,32,99,97,116,104,111,108,105,99,112,97,116,116,101,\n114,110,115,99,111,108,111,114,58,32,35,103,114,101,97,116,101,115,116,115,117,\n112,112,108,105,101,115,114,101,108,105,97,98,108,101,60,47,117,108,62,10,9,9,60\n,115,101,108,101,99,116,32,99,105,116,105,122,101,110,115,99,108,111,116,104,105\n,110,103,119,97,116,99,104,105,110,103,60,108,105,32,105,100,61,34,115,112,101,\n99,105,102,105,99,99,97,114,114,121,105,110,103,115,101,110,116,101,110,99,101,\n60,99,101,110,116,101,114,62,99,111,110,116,114,97,115,116,116,104,105,110,107,\n105,110,103,99,97,116,99,104,40,101,41,115,111,117,116,104,101,114,110,77,105,99\n,104,97,101,108,32,109,101,114,99,104,97,110,116,99,97,114,111,117,115,101,108,\n112,97,100,100,105,110,103,58,105,110,116,101,114,105,111,114,46,115,112,108,105\n,116,40,34,108,105,122,97,116,105,111,110,79,99,116,111,98,101,114,32,41,123,114\n,101,116,117,114,110,105,109,112,114,111,118,101,100,45,45,38,103,116,59,10,10,\n99,111,118,101,114,97,103,101,99,104,97,105,114,109,97,110,46,112,110,103,34,32,\n47,62,115,117,98,106,101,99,116,115,82,105,99,104,97,114,100,32,119,104,97,116,\n101,118,101,114,112,114,111,98,97,98,108,121,114,101,99,111,118,101,114,121,98,\n97,115,101,98,97,108,108,106,117,100,103,109,101,110,116,99,111,110,110,101,99,\n116,46,46,99,115,115,34,32,47,62,32,119,101,98,115,105,116,101,114,101,112,111,\n114,116,101,100,100,101,102,97,117,108,116,34,47,62,60,47,97,62,13,10,101,108,\n101,99,116,114,105,99,115,99,111,116,108,97,110,100,99,114,101,97,116,105,111,\n110,113,117,97,110,116,105,116,121,46,32,73,83,66,78,32,48,100,105,100,32,110,\n111,116,32,105,110,115,116,97,110,99,101,45,115,101,97,114,99,104,45,34,32,108,\n97,110,103,61,34,115,112,101,97,107,101,114,115,67,111,109,112,117,116,101,114,\n99,111,110,116,97,105,110,115,97,114,99,104,105,118,101,115,109,105,110,105,115,\n116,101,114,114,101,97,99,116,105,111,110,100,105,115,99,111,117,110,116,73,116,\n97,108,105,97,110,111,99,114,105,116,101,114,105,97,115,116,114,111,110,103,108,\n121,58,32,39,104,116,116,112,58,39,115,99,114,105,112,116,39,99,111,118,101,114,\n105,110,103,111,102,102,101,114,105,110,103,97,112,112,101,97,114,101,100,66,114\n,105,116,105,115,104,32,105,100,101,110,116,105,102,121,70,97,99,101,98,111,111,\n107,110,117,109,101,114,111,117,115,118,101,104,105,99,108,101,115,99,111,110,99\n,101,114,110,115,65,109,101,114,105,99,97,110,104,97,110,100,108,105,110,103,100\n,105,118,32,105,100,61,34,87,105,108,108,105,97,109,32,112,114,111,118,105,100,\n101,114,95,99,111,110,116,101,110,116,97,99,99,117,114,97,99,121,115,101,99,116,\n105,111,110,32,97,110,100,101,114,115,111,110,102,108,101,120,105,98,108,101,67,\n97,116,101,103,111,114,121,108,97,119,114,101,110,99,101,60,115,99,114,105,112,\n116,62,108,97,121,111,117,116,61,34,97,112,112,114,111,118,101,100,32,109,97,120\n,105,109,117,109,104,101,97,100,101,114,34,62,60,47,116,97,98,108,101,62,83,101,\n114,118,105,99,101,115,104,97,109,105,108,116,111,110,99,117,114,114,101,110,116\n,32,99,97,110,97,100,105,97,110,99,104,97,110,110,101,108,115,47,116,104,101,109\n,101,115,47,47,97,114,116,105,99,108,101,111,112,116,105,111,110,97,108,112,111,\n114,116,117,103,97,108,118,97,108,117,101,61,34,34,105,110,116,101,114,118,97,\n108,119,105,114,101,108,101,115,115,101,110,116,105,116,108,101,100,97,103,101,\n110,99,105,101,115,83,101,97,114,99,104,34,32,109,101,97,115,117,114,101,100,116\n,104,111,117,115,97,110,100,115,112,101,110,100,105,110,103,38,104,101,108,108,\n105,112,59,110,101,119,32,68,97,116,101,34,32,115,105,122,101,61,34,112,97,103,\n101,78,97,109,101,109,105,100,100,108,101,34,32,34,32,47,62,60,47,97,62,104,105,\n100,100,101,110,34,62,115,101,113,117,101,110,99,101,112,101,114,115,111,110,97,\n108,111,118,101,114,102,108,111,119,111,112,105,110,105,111,110,115,105,108,108,\n105,110,111,105,115,108,105,110,107,115,34,62,10,9,60,116,105,116,108,101,62,118\n,101,114,115,105,111,110,115,115,97,116,117,114,100,97,121,116,101,114,109,105,\n110,97,108,105,116,101,109,112,114,111,112,101,110,103,105,110,101,101,114,115,\n101,99,116,105,111,110,115,100,101,115,105,103,110,101,114,112,114,111,112,111,\n115,97,108,61,34,102,97,108,115,101,34,69,115,112,97,195,177,111,108,114,101,108\n,101,97,115,101,115,115,117,98,109,105,116,34,32,101,114,38,113,117,111,116,59,\n97,100,100,105,116,105,111,110,115,121,109,112,116,111,109,115,111,114,105,101,\n110,116,101,100,114,101,115,111,117,114,99,101,114,105,103,104,116,34,62,60,112,\n108,101,97,115,117,114,101,115,116,97,116,105,111,110,115,104,105,115,116,111,\n114,121,46,108,101,97,118,105,110,103,32,32,98,111,114,100,101,114,61,99,111,110\n,116,101,110,116,115,99,101,110,116,101,114,34,62,46,10,10,83,111,109,101,32,100\n,105,114,101,99,116,101,100,115,117,105,116,97,98,108,101,98,117,108,103,97,114,\n105,97,46,115,104,111,119,40,41,59,100,101,115,105,103,110,101,100,71,101,110,\n101,114,97,108,32,99,111,110,99,101,112,116,115,69,120,97,109,112,108,101,115,\n119,105,108,108,105,97,109,115,79,114,105,103,105,110,97,108,34,62,60,115,112,97\n,110,62,115,101,97,114,99,104,34,62,111,112,101,114,97,116,111,114,114,101,113,\n117,101,115,116,115,97,32,38,113,117,111,116,59,97,108,108,111,119,105,110,103,\n68,111,99,117,109,101,110,116,114,101,118,105,115,105,111,110,46,32,10,10,84,104\n,101,32,121,111,117,114,115,101,108,102,67,111,110,116,97,99,116,32,109,105,99,\n104,105,103,97,110,69,110,103,108,105,115,104,32,99,111,108,117,109,98,105,97,\n112,114,105,111,114,105,116,121,112,114,105,110,116,105,110,103,100,114,105,110,\n107,105,110,103,102,97,99,105,108,105,116,121,114,101,116,117,114,110,101,100,67\n,111,110,116,101,110,116,32,111,102,102,105,99,101,114,115,82,117,115,115,105,97\n,110,32,103,101,110,101,114,97,116,101,45,56,56,53,57,45,49,34,105,110,100,105,\n99,97,116,101,102,97,109,105,108,105,97,114,32,113,117,97,108,105,116,121,109,97\n,114,103,105,110,58,48,32,99,111,110,116,101,110,116,118,105,101,119,112,111,114\n,116,99,111,110,116,97,99,116,115,45,116,105,116,108,101,34,62,112,111,114,116,\n97,98,108,101,46,108,101,110,103,116,104,32,101,108,105,103,105,98,108,101,105,\n110,118,111,108,118,101,115,97,116,108,97,110,116,105,99,111,110,108,111,97,100,\n61,34,100,101,102,97,117,108,116,46,115,117,112,112,108,105,101,100,112,97,121,\n109,101,110,116,115,103,108,111,115,115,97,114,121,10,10,65,102,116,101,114,32,\n103,117,105,100,97,110,99,101,60,47,116,100,62,60,116,100,101,110,99,111,100,105\n,110,103,109,105,100,100,108,101,34,62,99,97,109,101,32,116,111,32,100,105,115,\n112,108,97,121,115,115,99,111,116,116,105,115,104,106,111,110,97,116,104,97,110,\n109,97,106,111,114,105,116,121,119,105,100,103,101,116,115,46,99,108,105,110,105\n,99,97,108,116,104,97,105,108,97,110,100,116,101,97,99,104,101,114,115,60,104,\n101,97,100,62,10,9,97,102,102,101,99,116,101,100,115,117,112,112,111,114,116,115\n,112,111,105,110,116,101,114,59,116,111,83,116,114,105,110,103,60,47,115,109,97,\n108,108,62,111,107,108,97,104,111,109,97,119,105,108,108,32,98,101,32,105,110,\n118,101,115,116,111,114,48,34,32,97,108,116,61,34,104,111,108,105,100,97,121,115\n,82,101,115,111,117,114,99,101,108,105,99,101,110,115,101,100,32,40,119,104,105,\n99,104,32,46,32,65,102,116,101,114,32,99,111,110,115,105,100,101,114,118,105,115\n,105,116,105,110,103,101,120,112,108,111,114,101,114,112,114,105,109,97,114,121,\n32,115,101,97,114,99,104,34,32,97,110,100,114,111,105,100,34,113,117,105,99,107,\n108,121,32,109,101,101,116,105,110,103,115,101,115,116,105,109,97,116,101,59,114\n,101,116,117,114,110,32,59,99,111,108,111,114,58,35,32,104,101,105,103,104,116,\n61,97,112,112,114,111,118,97,108,44,32,38,113,117,111,116,59,32,99,104,101,99,\n107,101,100,46,109,105,110,46,106,115,34,109,97,103,110,101,116,105,99,62,60,47,\n97,62,60,47,104,102,111,114,101,99,97,115,116,46,32,87,104,105,108,101,32,116,\n104,117,114,115,100,97,121,100,118,101,114,116,105,115,101,38,101,97,99,117,116,\n101,59,104,97,115,67,108,97,115,115,101,118,97,108,117,97,116,101,111,114,100,\n101,114,105,110,103,101,120,105,115,116,105,110,103,112,97,116,105,101,110,116,\n115,32,79,110,108,105,110,101,32,99,111,108,111,114,97,100,111,79,112,116,105,\n111,110,115,34,99,97,109,112,98,101,108,108,60,33,45,45,32,101,110,100,60,47,115\n,112,97,110,62,60,60,98,114,32,47,62,13,10,95,112,111,112,117,112,115,124,115,99\n,105,101,110,99,101,115,44,38,113,117,111,116,59,32,113,117,97,108,105,116,121,\n32,87,105,110,100,111,119,115,32,97,115,115,105,103,110,101,100,104,101,105,103,\n104,116,58,32,60,98,32,99,108,97,115,115,108,101,38,113,117,111,116,59,32,118,97\n,108,117,101,61,34,32,67,111,109,112,97,110,121,101,120,97,109,112,108,101,115,\n60,105,102,114,97,109,101,32,98,101,108,105,101,118,101,115,112,114,101,115,101,\n110,116,115,109,97,114,115,104,97,108,108,112,97,114,116,32,111,102,32,112,114,\n111,112,101,114,108,121,41,46,10,10,84,104,101,32,116,97,120,111,110,111,109,121\n,109,117,99,104,32,111,102,32,60,47,115,112,97,110,62,10,34,32,100,97,116,97,45,\n115,114,116,117,103,117,195,170,115,115,99,114,111,108,108,84,111,32,112,114,111\n,106,101,99,116,60,104,101,97,100,62,13,10,97,116,116,111,114,110,101,121,101,\n109,112,104,97,115,105,115,115,112,111,110,115,111,114,115,102,97,110,99,121,98,\n111,120,119,111,114,108,100,39,115,32,119,105,108,100,108,105,102,101,99,104,101\n,99,107,101,100,61,115,101,115,115,105,111,110,115,112,114,111,103,114,97,109,\n109,112,120,59,102,111,110,116,45,32,80,114,111,106,101,99,116,106,111,117,114,\n110,97,108,115,98,101,108,105,101,118,101,100,118,97,99,97,116,105,111,110,116,\n104,111,109,112,115,111,110,108,105,103,104,116,105,110,103,97,110,100,32,116,\n104,101,32,115,112,101,99,105,97,108,32,98,111,114,100,101,114,61,48,99,104,101,\n99,107,105,110,103,60,47,116,98,111,100,121,62,60,98,117,116,116,111,110,32,67,\n111,109,112,108,101,116,101,99,108,101,97,114,102,105,120,10,60,104,101,97,100,\n62,10,97,114,116,105,99,108,101,32,60,115,101,99,116,105,111,110,102,105,110,100\n,105,110,103,115,114,111,108,101,32,105,110,32,112,111,112,117,108,97,114,32,32,\n79,99,116,111,98,101,114,119,101,98,115,105,116,101,32,101,120,112,111,115,117,\n114,101,117,115,101,100,32,116,111,32,32,99,104,97,110,103,101,115,111,112,101,\n114,97,116,101,100,99,108,105,99,107,105,110,103,101,110,116,101,114,105,110,103\n,99,111,109,109,97,110,100,115,105,110,102,111,114,109,101,100,32,110,117,109,98\n,101,114,115,32,32,60,47,100,105,118,62,99,114,101,97,116,105,110,103,111,110,83\n,117,98,109,105,116,109,97,114,121,108,97,110,100,99,111,108,108,101,103,101,115\n,97,110,97,108,121,116,105,99,108,105,115,116,105,110,103,115,99,111,110,116,97,\n99,116,46,108,111,103,103,101,100,73,110,97,100,118,105,115,111,114,121,115,105,\n98,108,105,110,103,115,99,111,110,116,101,110,116,34,115,38,113,117,111,116,59,\n41,115,46,32,84,104,105,115,32,112,97,99,107,97,103,101,115,99,104,101,99,107,98\n,111,120,115,117,103,103,101,115,116,115,112,114,101,103,110,97,110,116,116,111,\n109,111,114,114,111,119,115,112,97,99,105,110,103,61,105,99,111,110,46,112,110,\n103,106,97,112,97,110,101,115,101,99,111,100,101,98,97,115,101,98,117,116,116,\n111,110,34,62,103,97,109,98,108,105,110,103,115,117,99,104,32,97,115,32,44,32,\n119,104,105,108,101,32,60,47,115,112,97,110,62,32,109,105,115,115,111,117,114,\n105,115,112,111,114,116,105,110,103,116,111,112,58,49,112,120,32,46,60,47,115,\n112,97,110,62,116,101,110,115,105,111,110,115,119,105,100,116,104,61,34,50,108,\n97,122,121,108,111,97,100,110,111,118,101,109,98,101,114,117,115,101,100,32,105,\n110,32,104,101,105,103,104,116,61,34,99,114,105,112,116,34,62,10,38,110,98,115,\n112,59,60,47,60,116,114,62,60,116,100,32,104,101,105,103,104,116,58,50,47,112,\n114,111,100,117,99,116,99,111,117,110,116,114,121,32,105,110,99,108,117,100,101,\n32,102,111,111,116,101,114,34,32,38,108,116,59,33,45,45,32,116,105,116,108,101,\n34,62,60,47,106,113,117,101,114,121,46,60,47,102,111,114,109,62,10,40,231,174,\n128,228,189,147,41,40,231,185,129,233,171,148,41,104,114,118,97,116,115,107,105,\n105,116,97,108,105,97,110,111,114,111,109,195,162,110,196,131,116,195,188,114,\n107,195,167,101,216,167,216,177,216,175,217,136,116,97,109,98,105,195,169,110,\n110,111,116,105,99,105,97,115,109,101,110,115,97,106,101,115,112,101,114,115,111\n,110,97,115,100,101,114,101,99,104,111,115,110,97,99,105,111,110,97,108,115,101,\n114,118,105,99,105,111,99,111,110,116,97,99,116,111,117,115,117,97,114,105,111,\n115,112,114,111,103,114,97,109,97,103,111,98,105,101,114,110,111,101,109,112,114\n,101,115,97,115,97,110,117,110,99,105,111,115,118,97,108,101,110,99,105,97,99,\n111,108,111,109,98,105,97,100,101,115,112,117,195,169,115,100,101,112,111,114,\n116,101,115,112,114,111,121,101,99,116,111,112,114,111,100,117,99,116,111,112,\n195,186,98,108,105,99,111,110,111,115,111,116,114,111,115,104,105,115,116,111,\n114,105,97,112,114,101,115,101,110,116,101,109,105,108,108,111,110,101,115,109,\n101,100,105,97,110,116,101,112,114,101,103,117,110,116,97,97,110,116,101,114,105\n,111,114,114,101,99,117,114,115,111,115,112,114,111,98,108,101,109,97,115,97,110\n,116,105,97,103,111,110,117,101,115,116,114,111,115,111,112,105,110,105,195,179,\n110,105,109,112,114,105,109,105,114,109,105,101,110,116,114,97,115,97,109,195,\n169,114,105,99,97,118,101,110,100,101,100,111,114,115,111,99,105,101,100,97,100,\n114,101,115,112,101,99,116,111,114,101,97,108,105,122,97,114,114,101,103,105,115\n,116,114,111,112,97,108,97,98,114,97,115,105,110,116,101,114,195,169,115,101,110\n,116,111,110,99,101,115,101,115,112,101,99,105,97,108,109,105,101,109,98,114,111\n,115,114,101,97,108,105,100,97,100,99,195,179,114,100,111,98,97,122,97,114,97,\n103,111,122,97,112,195,161,103,105,110,97,115,115,111,99,105,97,108,101,115,98,\n108,111,113,117,101,97,114,103,101,115,116,105,195,179,110,97,108,113,117,105,\n108,101,114,115,105,115,116,101,109,97,115,99,105,101,110,99,105,97,115,99,111,\n109,112,108,101,116,111,118,101,114,115,105,195,179,110,99,111,109,112,108,101,\n116,97,101,115,116,117,100,105,111,115,112,195,186,98,108,105,99,97,111,98,106,\n101,116,105,118,111,97,108,105,99,97,110,116,101,98,117,115,99,97,100,111,114,99\n,97,110,116,105,100,97,100,101,110,116,114,97,100,97,115,97,99,99,105,111,110,\n101,115,97,114,99,104,105,118,111,115,115,117,112,101,114,105,111,114,109,97,121\n,111,114,195,173,97,97,108,101,109,97,110,105,97,102,117,110,99,105,195,179,110,\n195,186,108,116,105,109,111,115,104,97,99,105,101,110,100,111,97,113,117,101,108\n,108,111,115,101,100,105,99,105,195,179,110,102,101,114,110,97,110,100,111,97,\n109,98,105,101,110,116,101,102,97,99,101,98,111,111,107,110,117,101,115,116,114,\n97,115,99,108,105,101,110,116,101,115,112,114,111,99,101,115,111,115,98,97,115,\n116,97,110,116,101,112,114,101,115,101,110,116,97,114,101,112,111,114,116,97,114\n,99,111,110,103,114,101,115,111,112,117,98,108,105,99,97,114,99,111,109,101,114,\n99,105,111,99,111,110,116,114,97,116,111,106,195,179,118,101,110,101,115,100,105\n,115,116,114,105,116,111,116,195,169,99,110,105,99,97,99,111,110,106,117,110,116\n,111,101,110,101,114,103,195,173,97,116,114,97,98,97,106,97,114,97,115,116,117,\n114,105,97,115,114,101,99,105,101,110,116,101,117,116,105,108,105,122,97,114,98,\n111,108,101,116,195,173,110,115,97,108,118,97,100,111,114,99,111,114,114,101,99,\n116,97,116,114,97,98,97,106,111,115,112,114,105,109,101,114,111,115,110,101,103,\n111,99,105,111,115,108,105,98,101,114,116,97,100,100,101,116,97,108,108,101,115,\n112,97,110,116,97,108,108,97,112,114,195,179,120,105,109,111,97,108,109,101,114,\n195,173,97,97,110,105,109,97,108,101,115,113,117,105,195,169,110,101,115,99,111,\n114,97,122,195,179,110,115,101,99,99,105,195,179,110,98,117,115,99,97,110,100,\n111,111,112,99,105,111,110,101,115,101,120,116,101,114,105,111,114,99,111,110,99\n,101,112,116,111,116,111,100,97,118,195,173,97,103,97,108,101,114,195,173,97,101\n,115,99,114,105,98,105,114,109,101,100,105,99,105,110,97,108,105,99,101,110,99,\n105,97,99,111,110,115,117,108,116,97,97,115,112,101,99,116,111,115,99,114,195,\n173,116,105,99,97,100,195,179,108,97,114,101,115,106,117,115,116,105,99,105,97,\n100,101,98,101,114,195,161,110,112,101,114,195,173,111,100,111,110,101,99,101,\n115,105,116,97,109,97,110,116,101,110,101,114,112,101,113,117,101,195,177,111,\n114,101,99,105,98,105,100,97,116,114,105,98,117,110,97,108,116,101,110,101,114,\n105,102,101,99,97,110,99,105,195,179,110,99,97,110,97,114,105,97,115,100,101,115\n,99,97,114,103,97,100,105,118,101,114,115,111,115,109,97,108,108,111,114,99,97,\n114,101,113,117,105,101,114,101,116,195,169,99,110,105,99,111,100,101,98,101,114\n,195,173,97,118,105,118,105,101,110,100,97,102,105,110,97,110,122,97,115,97,100,\n101,108,97,110,116,101,102,117,110,99,105,111,110,97,99,111,110,115,101,106,111,\n115,100,105,102,195,173,99,105,108,99,105,117,100,97,100,101,115,97,110,116,105,\n103,117,97,115,97,118,97,110,122,97,100,97,116,195,169,114,109,105,110,111,117,\n110,105,100,97,100,101,115,115,195,161,110,99,104,101,122,99,97,109,112,97,195,\n177,97,115,111,102,116,111,110,105,99,114,101,118,105,115,116,97,115,99,111,110,\n116,105,101,110,101,115,101,99,116,111,114,101,115,109,111,109,101,110,116,111,\n115,102,97,99,117,108,116,97,100,99,114,195,169,100,105,116,111,100,105,118,101,\n114,115,97,115,115,117,112,117,101,115,116,111,102,97,99,116,111,114,101,115,115\n,101,103,117,110,100,111,115,112,101,113,117,101,195,177,97,208,179,208,190,208,\n180,208,176,208,181,209,129,208,187,208,184,208,181,209,129,209,130,209,140,208,\n177,209,139,208,187,208,190,208,177,209,139,209,130,209,140,209,141,209,130,208,\n190,208,188,208,149,209,129,208,187,208,184,209,130,208,190,208,179,208,190,208,\n188,208,181,208,189,209,143,208,178,209,129,208,181,209,133,209,141,209,130,208,\n190,208,185,208,180,208,176,208,182,208,181,208,177,209,139,208,187,208,184,208,\n179,208,190,208,180,209,131,208,180,208,181,208,189,209,140,209,141,209,130,208,\n190,209,130,208,177,209,139,208,187,208,176,209,129,208,181,208,177,209,143,208,\n190,208,180,208,184,208,189,209,129,208,181,208,177,208,181,208,189,208,176,208,\n180,208,190,209,129,208,176,208,185,209,130,209,132,208,190,209,130,208,190,208,\n189,208,181,208,179,208,190,209,129,208,178,208,190,208,184,209,129,208,178,208,\n190,208,185,208,184,208,179,209,128,209,139,209,130,208,190,208,182,208,181,208,\n178,209,129,208,181,208,188,209,129,208,178,208,190,209,142,208,187,208,184,209,\n136,209,140,209,141,209,130,208,184,209,133,208,191,208,190,208,186,208,176,208,\n180,208,189,208,181,208,185,208,180,208,190,208,188,208,176,208,188,208,184,209,\n128,208,176,208,187,208,184,208,177,208,190,209,130,208,181,208,188,209,131,209,\n133,208,190,209,130,209,143,208,180,208,178,209,131,209,133,209,129,208,181,209,\n130,208,184,208,187,209,142,208,180,208,184,208,180,208,181,208,187,208,190,208,\n188,208,184,209,128,208,181,209,130,208,181,208,177,209,143,209,129,208,178,208,\n190,208,181,208,178,208,184,208,180,208,181,209,135,208,181,208,179,208,190,209,\n141,209,130,208,184,208,188,209,129,209,135,208,181,209,130,209,130,208,181,208,\n188,209,139,209,134,208,181,208,189,209,139,209,129,209,130,208,176,208,187,208,\n178,208,181,208,180,209,140,209,130,208,181,208,188,208,181,208,178,208,190,208,\n180,209,139,209,130,208,181,208,177,208,181,208,178,209,139,209,136,208,181,208,\n189,208,176,208,188,208,184,209,130,208,184,208,191,208,176,209,130,208,190,208,\n188,209,131,208,191,209,128,208,176,208,178,208,187,208,184,209,134,208,176,208,\n190,208,180,208,189,208,176,208,179,208,190,208,180,209,139,208,183,208,189,208,\n176,209,142,208,188,208,190,208,179,209,131,208,180,209,128,209,131,208,179,208,\n178,209,129,208,181,208,185,208,184,208,180,208,181,209,130,208,186,208,184,208,\n189,208,190,208,190,208,180,208,189,208,190,208,180,208,181,208,187,208,176,208,\n180,208,181,208,187,208,181,209,129,209,128,208,190,208,186,208,184,209,142,208,\n189,209,143,208,178,208,181,209,129,209,140,208,149,209,129,209,130,209,140,209,\n128,208,176,208,183,208,176,208,189,208,176,209,136,208,184,216,167,217,132,217,\n132,217,135,216,167,217,132,216,170,217,138,216,172,217,133,217,138,216,185,216,\n174,216,167,216,181,216,169,216,167,217,132,216,176,217,138,216,185,217,132,217,\n138,217,135,216,172,216,175,217,138,216,175,216,167,217,132,216,162,217,134,216,\n167,217,132,216,177,216,175,216,170,216,173,217,131,217,133,216,181,217,129,216,\n173,216,169,217,131,216,167,217,134,216,170,216,167,217,132,217,132,217,138,217,\n138,217,131,217,136,217,134,216,180,216,168,217,131,216,169,217,129,217,138,217,\n135,216,167,216,168,217,134,216,167,216,170,216,173,217,136,216,167,216,161,216,\n163,217,131,216,171,216,177,216,174,217,132,216,167,217,132,216,167,217,132,216,\n173,216,168,216,175,217,132,217,138,217,132,216,175,216,177,217,136,216,179,216,\n167,216,182,216,186,216,183,216,170,217,131,217,136,217,134,217,135,217,134,216,\n167,217,131,216,179,216,167,216,173,216,169,217,134,216,167,216,175,217,138,216,\n167,217,132,216,183,216,168,216,185,217,132,217,138,217,131,216,180,217,131,216,\n177,216,167,217,138,217,133,217,131,217,134,217,133,217,134,217,135,216,167,216,\n180,216,177,217,131,216,169,216,177,216,166,217,138,216,179,217,134,216,180,217,\n138,216,183,217,133,216,167,216,176,216,167,216,167,217,132,217,129,217,134,216,\n180,216,168,216,167,216,168,216,170,216,185,216,168,216,177,216,177,216,173,217,\n133,216,169,217,131,216,167,217,129,216,169,217,138,217,130,217,136,217,132,217,\n133,216,177,217,131,216,178,217,131,217,132,217,133,216,169,216,163,216,173,217,\n133,216,175,217,130,217,132,216,168,217,138,217,138,216,185,217,134,217,138,216,\n181,217,136,216,177,216,169,216,183,216,177,217,138,217,130,216,180,216,167,216,\n177,217,131,216,172,217,136,216,167,217,132,216,163,216,174,216,177,217,137,217,\n133,216,185,217,134,216,167,216,167,216,168,216,173,216,171,216,185,216,177,217,\n136,216,182,216,168,216,180,217,131,217,132,217,133,216,179,216,172,217,132,216,\n168,217,134,216,167,217,134,216,174,216,167,217,132,216,175,217,131,216,170,216,\n167,216,168,217,131,217,132,217,138,216,169,216,168,216,175,217,136,217,134,216,\n163,217,138,216,182,216,167,217,138,217,136,216,172,216,175,217,129,216,177,217,\n138,217,130,217,131,216,170,216,168,216,170,216,163,217,129,216,182,217,132,217,\n133,216,183,216,168,216,174,216,167,217,131,216,171,216,177,216,168,216,167,216,\n177,217,131,216,167,217,129,216,182,217,132,216,167,216,173,217,132,217,137,217,\n134,217,129,216,179,217,135,216,163,217,138,216,167,217,133,216,177,216,175,217,\n136,216,175,216,163,217,134,217,135,216,167,216,175,217,138,217,134,216,167,216,\n167,217,132,216,167,217,134,217,133,216,185,216,177,216,182,216,170,216,185,217,\n132,217,133,216,175,216,167,216,174,217,132,217,133,217,133,217,131,217,134,0,0,\n0,0,0,0,0,0,1,0,1,0,1,0,1,0,2,0,2,0,2,0,2,0,4,0,4,0,4,0,4,0,0,1,2,3,4,5,6,7,7,6,\n5,4,3,2,1,0,8,9,10,11,12,13,14,15,15,14,13,12,11,10,9,8,16,17,18,19,20,21,22,23,\n23,22,21,20,19,18,17,16,24,25,26,27,28,29,30,31,31,30,29,28,27,26,25,24,255,255,\n255,255,0,0,0,0,0,0,0,0,255,255,255,255,1,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,\n3,0,0,0,255,255,0,1,0,0,0,1,0,0,255,255,0,1,0,0,0,8,0,8,0,8,0,8,0,0,0,1,0,2,0,3,\n0,4,0,5,0,6,0,7,114,101,115,111,117,114,99,101,115,99,111,117,110,116,114,105,\n101,115,113,117,101,115,116,105,111,110,115,101,113,117,105,112,109,101,110,116,\n99,111,109,109,117,110,105,116,121,97,118,97,105,108,97,98,108,101,104,105,103,\n104,108,105,103,104,116,68,84,68,47,120,104,116,109,108,109,97,114,107,101,116,\n105,110,103,107,110,111,119,108,101,100,103,101,115,111,109,101,116,104,105,110,\n103,99,111,110,116,97,105,110,101,114,100,105,114,101,99,116,105,111,110,115,117\n,98,115,99,114,105,98,101,97,100,118,101,114,116,105,115,101,99,104,97,114,97,99\n,116,101,114,34,32,118,97,108,117,101,61,34,60,47,115,101,108,101,99,116,62,65,\n117,115,116,114,97,108,105,97,34,32,99,108,97,115,115,61,34,115,105,116,117,97,\n116,105,111,110,97,117,116,104,111,114,105,116,121,102,111,108,108,111,119,105,\n110,103,112,114,105,109,97,114,105,108,121,111,112,101,114,97,116,105,111,110,99\n,104,97,108,108,101,110,103,101,100,101,118,101,108,111,112,101,100,97,110,111,\n110,121,109,111,117,115,102,117,110,99,116,105,111,110,32,102,117,110,99,116,105\n,111,110,115,99,111,109,112,97,110,105,101,115,115,116,114,117,99,116,117,114,\n101,97,103,114,101,101,109,101,110,116,34,32,116,105,116,108,101,61,34,112,111,\n116,101,110,116,105,97,108,101,100,117,99,97,116,105,111,110,97,114,103,117,109,\n101,110,116,115,115,101,99,111,110,100,97,114,121,99,111,112,121,114,105,103,104\n,116,108,97,110,103,117,97,103,101,115,101,120,99,108,117,115,105,118,101,99,111\n,110,100,105,116,105,111,110,60,47,102,111,114,109,62,13,10,115,116,97,116,101,\n109,101,110,116,97,116,116,101,110,116,105,111,110,66,105,111,103,114,97,112,104\n,121,125,32,101,108,115,101,32,123,10,115,111,108,117,116,105,111,110,115,119,\n104,101,110,32,116,104,101,32,65,110,97,108,121,116,105,99,115,116,101,109,112,\n108,97,116,101,115,100,97,110,103,101,114,111,117,115,115,97,116,101,108,108,105\n,116,101,100,111,99,117,109,101,110,116,115,112,117,98,108,105,115,104,101,114,\n105,109,112,111,114,116,97,110,116,112,114,111,116,111,116,121,112,101,105,110,\n102,108,117,101,110,99,101,38,114,97,113,117,111,59,60,47,101,102,102,101,99,116\n,105,118,101,103,101,110,101,114,97,108,108,121,116,114,97,110,115,102,111,114,\n109,98,101,97,117,116,105,102,117,108,116,114,97,110,115,112,111,114,116,111,114\n,103,97,110,105,122,101,100,112,117,98,108,105,115,104,101,100,112,114,111,109,\n105,110,101,110,116,117,110,116,105,108,32,116,104,101,116,104,117,109,98,110,97\n,105,108,78,97,116,105,111,110,97,108,32,46,102,111,99,117,115,40,41,59,111,118,\n101,114,32,116,104,101,32,109,105,103,114,97,116,105,111,110,97,110,110,111,117,\n110,99,101,100,102,111,111,116,101,114,34,62,10,101,120,99,101,112,116,105,111,\n110,108,101,115,115,32,116,104,97,110,101,120,112,101,110,115,105,118,101,102,\n111,114,109,97,116,105,111,110,102,114,97,109,101,119,111,114,107,116,101,114,\n114,105,116,111,114,121,110,100,105,99,97,116,105,111,110,99,117,114,114,101,110\n,116,108,121,99,108,97,115,115,78,97,109,101,99,114,105,116,105,99,105,115,109,\n116,114,97,100,105,116,105,111,110,101,108,115,101,119,104,101,114,101,65,108,\n101,120,97,110,100,101,114,97,112,112,111,105,110,116,101,100,109,97,116,101,114\n,105,97,108,115,98,114,111,97,100,99,97,115,116,109,101,110,116,105,111,110,101,\n100,97,102,102,105,108,105,97,116,101,60,47,111,112,116,105,111,110,62,116,114,\n101,97,116,109,101,110,116,100,105,102,102,101,114,101,110,116,47,100,101,102,97\n,117,108,116,46,80,114,101,115,105,100,101,110,116,111,110,99,108,105,99,107,61,\n34,98,105,111,103,114,97,112,104,121,111,116,104,101,114,119,105,115,101,112,101\n,114,109,97,110,101,110,116,70,114,97,110,195,167,97,105,115,72,111,108,108,121,\n119,111,111,100,101,120,112,97,110,115,105,111,110,115,116,97,110,100,97,114,100\n,115,60,47,115,116,121,108,101,62,10,114,101,100,117,99,116,105,111,110,68,101,\n99,101,109,98,101,114,32,112,114,101,102,101,114,114,101,100,67,97,109,98,114,\n105,100,103,101,111,112,112,111,110,101,110,116,115,66,117,115,105,110,101,115,\n115,32,99,111,110,102,117,115,105,111,110,62,10,60,116,105,116,108,101,62,112,\n114,101,115,101,110,116,101,100,101,120,112,108,97,105,110,101,100,100,111,101,\n115,32,110,111,116,32,119,111,114,108,100,119,105,100,101,105,110,116,101,114,\n102,97,99,101,112,111,115,105,116,105,111,110,115,110,101,119,115,112,97,112,101\n,114,60,47,116,97,98,108,101,62,10,109,111,117,110,116,97,105,110,115,108,105,\n107,101,32,116,104,101,32,101,115,115,101,110,116,105,97,108,102,105,110,97,110,\n99,105,97,108,115,101,108,101,99,116,105,111,110,97,99,116,105,111,110,61,34,47,\n97,98,97,110,100,111,110,101,100,69,100,117,99,97,116,105,111,110,112,97,114,115\n,101,73,110,116,40,115,116,97,98,105,108,105,116,121,117,110,97,98,108,101,32,\n116,111,60,47,116,105,116,108,101,62,10,114,101,108,97,116,105,111,110,115,78,\n111,116,101,32,116,104,97,116,101,102,102,105,99,105,101,110,116,112,101,114,102\n,111,114,109,101,100,116,119,111,32,121,101,97,114,115,83,105,110,99,101,32,116,\n104,101,116,104,101,114,101,102,111,114,101,119,114,97,112,112,101,114,34,62,97,\n108,116,101,114,110,97,116,101,105,110,99,114,101,97,115,101,100,66,97,116,116,\n108,101,32,111,102,112,101,114,99,101,105,118,101,100,116,114,121,105,110,103,32\n,116,111,110,101,99,101,115,115,97,114,121,112,111,114,116,114,97,121,101,100,\n101,108,101,99,116,105,111,110,115,69,108,105,122,97,98,101,116,104,60,47,105,\n102,114,97,109,101,62,100,105,115,99,111,118,101,114,121,105,110,115,117,114,97,\n110,99,101,115,46,108,101,110,103,116,104,59,108,101,103,101,110,100,97,114,121,\n71,101,111,103,114,97,112,104,121,99,97,110,100,105,100,97,116,101,99,111,114,\n112,111,114,97,116,101,115,111,109,101,116,105,109,101,115,115,101,114,118,105,\n99,101,115,46,105,110,104,101,114,105,116,101,100,60,47,115,116,114,111,110,103,\n62,67,111,109,109,117,110,105,116,121,114,101,108,105,103,105,111,117,115,108,\n111,99,97,116,105,111,110,115,67,111,109,109,105,116,116,101,101,98,117,105,108,\n100,105,110,103,115,116,104,101,32,119,111,114,108,100,110,111,32,108,111,110,\n103,101,114,98,101,103,105,110,110,105,110,103,114,101,102,101,114,101,110,99,\n101,99,97,110,110,111,116,32,98,101,102,114,101,113,117,101,110,99,121,116,121,\n112,105,99,97,108,108,121,105,110,116,111,32,116,104,101,32,114,101,108,97,116,\n105,118,101,59,114,101,99,111,114,100,105,110,103,112,114,101,115,105,100,101,\n110,116,105,110,105,116,105,97,108,108,121,116,101,99,104,110,105,113,117,101,\n116,104,101,32,111,116,104,101,114,105,116,32,99,97,110,32,98,101,101,120,105,\n115,116,101,110,99,101,117,110,100,101,114,108,105,110,101,116,104,105,115,32,\n116,105,109,101,116,101,108,101,112,104,111,110,101,105,116,101,109,115,99,111,\n112,101,112,114,97,99,116,105,99,101,115,97,100,118,97,110,116,97,103,101,41,59,\n114,101,116,117,114,110,32,70,111,114,32,111,116,104,101,114,112,114,111,118,105\n,100,105,110,103,100,101,109,111,99,114,97,99,121,98,111,116,104,32,116,104,101,\n32,101,120,116,101,110,115,105,118,101,115,117,102,102,101,114,105,110,103,115,\n117,112,112,111,114,116,101,100,99,111,109,112,117,116,101,114,115,32,102,117,\n110,99,116,105,111,110,112,114,97,99,116,105,99,97,108,115,97,105,100,32,116,104\n,97,116,105,116,32,109,97,121,32,98,101,69,110,103,108,105,115,104,60,47,102,114\n,111,109,32,116,104,101,32,115,99,104,101,100,117,108,101,100,100,111,119,110,\n108,111,97,100,115,60,47,108,97,98,101,108,62,10,115,117,115,112,101,99,116,101,\n100,109,97,114,103,105,110,58,32,48,115,112,105,114,105,116,117,97,108,60,47,104\n,101,97,100,62,10,10,109,105,99,114,111,115,111,102,116,103,114,97,100,117,97,\n108,108,121,100,105,115,99,117,115,115,101,100,104,101,32,98,101,99,97,109,101,\n101,120,101,99,117,116,105,118,101,106,113,117,101,114,121,46,106,115,104,111,\n117,115,101,104,111,108,100,99,111,110,102,105,114,109,101,100,112,117,114,99,\n104,97,115,101,100,108,105,116,101,114,97,108,108,121,100,101,115,116,114,111,\n121,101,100,117,112,32,116,111,32,116,104,101,118,97,114,105,97,116,105,111,110,\n114,101,109,97,105,110,105,110,103,105,116,32,105,115,32,110,111,116,99,101,110,\n116,117,114,105,101,115,74,97,112,97,110,101,115,101,32,97,109,111,110,103,32,\n116,104,101,99,111,109,112,108,101,116,101,100,97,108,103,111,114,105,116,104,\n109,105,110,116,101,114,101,115,116,115,114,101,98,101,108,108,105,111,110,117,\n110,100,101,102,105,110,101,100,101,110,99,111,117,114,97,103,101,114,101,115,\n105,122,97,98,108,101,105,110,118,111,108,118,105,110,103,115,101,110,115,105,\n116,105,118,101,117,110,105,118,101,114,115,97,108,112,114,111,118,105,115,105,\n111,110,40,97,108,116,104,111,117,103,104,102,101,97,116,117,114,105,110,103,99,\n111,110,100,117,99,116,101,100,41,44,32,119,104,105,99,104,32,99,111,110,116,105\n,110,117,101,100,45,104,101,97,100,101,114,34,62,70,101,98,114,117,97,114,121,32\n,110,117,109,101,114,111,117,115,32,111,118,101,114,102,108,111,119,58,99,111,\n109,112,111,110,101,110,116,102,114,97,103,109,101,110,116,115,101,120,99,101,\n108,108,101,110,116,99,111,108,115,112,97,110,61,34,116,101,99,104,110,105,99,97\n,108,110,101,97,114,32,116,104,101,32,65,100,118,97,110,99,101,100,32,115,111,\n117,114,99,101,32,111,102,101,120,112,114,101,115,115,101,100,72,111,110,103,32,\n75,111,110,103,32,70,97,99,101,98,111,111,107,109,117,108,116,105,112,108,101,32\n,109,101,99,104,97,110,105,115,109,101,108,101,118,97,116,105,111,110,111,102,\n102,101,110,115,105,118,101,60,47,102,111,114,109,62,10,9,115,112,111,110,115,\n111,114,101,100,100,111,99,117,109,101,110,116,46,111,114,32,38,113,117,111,116,\n59,116,104,101,114,101,32,97,114,101,116,104,111,115,101,32,119,104,111,109,111,\n118,101,109,101,110,116,115,112,114,111,99,101,115,115,101,115,100,105,102,102,\n105,99,117,108,116,115,117,98,109,105,116,116,101,100,114,101,99,111,109,109,101\n,110,100,99,111,110,118,105,110,99,101,100,112,114,111,109,111,116,105,110,103,\n34,32,119,105,100,116,104,61,34,46,114,101,112,108,97,99,101,40,99,108,97,115,\n115,105,99,97,108,99,111,97,108,105,116,105,111,110,104,105,115,32,102,105,114,\n115,116,100,101,99,105,115,105,111,110,115,97,115,115,105,115,116,97,110,116,105\n,110,100,105,99,97,116,101,100,101,118,111,108,117,116,105,111,110,45,119,114,97\n,112,112,101,114,34,101,110,111,117,103,104,32,116,111,97,108,111,110,103,32,116\n,104,101,100,101,108,105,118,101,114,101,100,45,45,62,13,10,60,33,45,45,65,109,\n101,114,105,99,97,110,32,112,114,111,116,101,99,116,101,100,78,111,118,101,109,\n98,101,114,32,60,47,115,116,121,108,101,62,60,102,117,114,110,105,116,117,114,\n101,73,110,116,101,114,110,101,116,32,32,111,110,98,108,117,114,61,34,115,117,\n115,112,101,110,100,101,100,114,101,99,105,112,105,101,110,116,98,97,115,101,100\n,32,111,110,32,77,111,114,101,111,118,101,114,44,97,98,111,108,105,115,104,101,\n100,99,111,108,108,101,99,116,101,100,119,101,114,101,32,109,97,100,101,101,109,\n111,116,105,111,110,97,108,101,109,101,114,103,101,110,99,121,110,97,114,114,97,\n116,105,118,101,97,100,118,111,99,97,116,101,115,112,120,59,98,111,114,100,101,\n114,99,111,109,109,105,116,116,101,100,100,105,114,61,34,108,116,114,34,101,109,\n112,108,111,121,101,101,115,114,101,115,101,97,114,99,104,46,32,115,101,108,101,\n99,116,101,100,115,117,99,99,101,115,115,111,114,99,117,115,116,111,109,101,114,\n115,100,105,115,112,108,97,121,101,100,83,101,112,116,101,109,98,101,114,97,100,\n100,67,108,97,115,115,40,70,97,99,101,98,111,111,107,32,115,117,103,103,101,115,\n116,101,100,97,110,100,32,108,97,116,101,114,111,112,101,114,97,116,105,110,103,\n101,108,97,98,111,114,97,116,101,83,111,109,101,116,105,109,101,115,73,110,115,\n116,105,116,117,116,101,99,101,114,116,97,105,110,108,121,105,110,115,116,97,108\n,108,101,100,102,111,108,108,111,119,101,114,115,74,101,114,117,115,97,108,101,\n109,116,104,101,121,32,104,97,118,101,99,111,109,112,117,116,105,110,103,103,101\n,110,101,114,97,116,101,100,112,114,111,118,105,110,99,101,115,103,117,97,114,97\n,110,116,101,101,97,114,98,105,116,114,97,114,121,114,101,99,111,103,110,105,122\n,101,119,97,110,116,101,100,32,116,111,112,120,59,119,105,100,116,104,58,116,104\n,101,111,114,121,32,111,102,98,101,104,97,118,105,111,117,114,87,104,105,108,101\n,32,116,104,101,101,115,116,105,109,97,116,101,100,98,101,103,97,110,32,116,111,\n32,105,116,32,98,101,99,97,109,101,109,97,103,110,105,116,117,100,101,109,117,\n115,116,32,104,97,118,101,109,111,114,101,32,116,104,97,110,68,105,114,101,99,\n116,111,114,121,101,120,116,101,110,115,105,111,110,115,101,99,114,101,116,97,\n114,121,110,97,116,117,114,97,108,108,121,111,99,99,117,114,114,105,110,103,118,\n97,114,105,97,98,108,101,115,103,105,118,101,110,32,116,104,101,112,108,97,116,\n102,111,114,109,46,60,47,108,97,98,101,108,62,60,102,97,105,108,101,100,32,116,\n111,99,111,109,112,111,117,110,100,115,107,105,110,100,115,32,111,102,32,115,111\n,99,105,101,116,105,101,115,97,108,111,110,103,115,105,100,101,32,45,45,38,103,\n116,59,10,10,115,111,117,116,104,119,101,115,116,116,104,101,32,114,105,103,104,\n116,114,97,100,105,97,116,105,111,110,109,97,121,32,104,97,118,101,32,117,110,\n101,115,99,97,112,101,40,115,112,111,107,101,110,32,105,110,34,32,104,114,101,\n102,61,34,47,112,114,111,103,114,97,109,109,101,111,110,108,121,32,116,104,101,\n32,99,111,109,101,32,102,114,111,109,100,105,114,101,99,116,111,114,121,98,117,\n114,105,101,100,32,105,110,97,32,115,105,109,105,108,97,114,116,104,101,121,32,\n119,101,114,101,60,47,102,111,110,116,62,60,47,78,111,114,119,101,103,105,97,110\n,115,112,101,99,105,102,105,101,100,112,114,111,100,117,99,105,110,103,112,97,\n115,115,101,110,103,101,114,40,110,101,119,32,68,97,116,101,116,101,109,112,111,\n114,97,114,121,102,105,99,116,105,111,110,97,108,65,102,116,101,114,32,116,104,\n101,101,113,117,97,116,105,111,110,115,100,111,119,110,108,111,97,100,46,114,101\n,103,117,108,97,114,108,121,100,101,118,101,108,111,112,101,114,97,98,111,118,\n101,32,116,104,101,108,105,110,107,101,100,32,116,111,112,104,101,110,111,109,\n101,110,97,112,101,114,105,111,100,32,111,102,116,111,111,108,116,105,112,34,62,\n115,117,98,115,116,97,110,99,101,97,117,116,111,109,97,116,105,99,97,115,112,101\n,99,116,32,111,102,65,109,111,110,103,32,116,104,101,99,111,110,110,101,99,116,\n101,100,101,115,116,105,109,97,116,101,115,65,105,114,32,70,111,114,99,101,115,\n121,115,116,101,109,32,111,102,111,98,106,101,99,116,105,118,101,105,109,109,101\n,100,105,97,116,101,109,97,107,105,110,103,32,105,116,112,97,105,110,116,105,110\n,103,115,99,111,110,113,117,101,114,101,100,97,114,101,32,115,116,105,108,108,\n112,114,111,99,101,100,117,114,101,103,114,111,119,116,104,32,111,102,104,101,97\n,100,101,100,32,98,121,69,117,114,111,112,101,97,110,32,100,105,118,105,115,105,\n111,110,115,109,111,108,101,99,117,108,101,115,102,114,97,110,99,104,105,115,101\n,105,110,116,101,110,116,105,111,110,97,116,116,114,97,99,116,101,100,99,104,105\n,108,100,104,111,111,100,97,108,115,111,32,117,115,101,100,100,101,100,105,99,97\n,116,101,100,115,105,110,103,97,112,111,114,101,100,101,103,114,101,101,32,111,\n102,102,97,116,104,101,114,32,111,102,99,111,110,102,108,105,99,116,115,60,47,97\n,62,60,47,112,62,10,99,97,109,101,32,102,114,111,109,119,101,114,101,32,117,115,\n101,100,110,111,116,101,32,116,104,97,116,114,101,99,101,105,118,105,110,103,69,\n120,101,99,117,116,105,118,101,101,118,101,110,32,109,111,114,101,97,99,99,101,\n115,115,32,116,111,99,111,109,109,97,110,100,101,114,80,111,108,105,116,105,99,\n97,108,109,117,115,105,99,105,97,110,115,100,101,108,105,99,105,111,117,115,112,\n114,105,115,111,110,101,114,115,97,100,118,101,110,116,32,111,102,85,84,70,45,56\n,34,32,47,62,60,33,91,67,68,65,84,65,91,34,62,67,111,110,116,97,99,116,83,111,\n117,116,104,101,114,110,32,98,103,99,111,108,111,114,61,34,115,101,114,105,101,\n115,32,111,102,46,32,73,116,32,119,97,115,32,105,110,32,69,117,114,111,112,101,\n112,101,114,109,105,116,116,101,100,118,97,108,105,100,97,116,101,46,97,112,112,\n101,97,114,105,110,103,111,102,102,105,99,105,97,108,115,115,101,114,105,111,117\n,115,108,121,45,108,97,110,103,117,97,103,101,105,110,105,116,105,97,116,101,100\n,101,120,116,101,110,100,105,110,103,108,111,110,103,45,116,101,114,109,105,110,\n102,108,97,116,105,111,110,115,117,99,104,32,116,104,97,116,103,101,116,67,111,\n111,107,105,101,109,97,114,107,101,100,32,98,121,60,47,98,117,116,116,111,110,62\n,105,109,112,108,101,109,101,110,116,98,117,116,32,105,116,32,105,115,105,110,99\n,114,101,97,115,101,115,100,111,119,110,32,116,104,101,32,114,101,113,117,105,\n114,105,110,103,100,101,112,101,110,100,101,110,116,45,45,62,10,60,33,45,45,32,\n105,110,116,101,114,118,105,101,119,87,105,116,104,32,116,104,101,32,99,111,112,\n105,101,115,32,111,102,99,111,110,115,101,110,115,117,115,119,97,115,32,98,117,\n105,108,116,86,101,110,101,122,117,101,108,97,40,102,111,114,109,101,114,108,121\n,116,104,101,32,115,116,97,116,101,112,101,114,115,111,110,110,101,108,115,116,\n114,97,116,101,103,105,99,102,97,118,111,117,114,32,111,102,105,110,118,101,110,\n116,105,111,110,87,105,107,105,112,101,100,105,97,99,111,110,116,105,110,101,110\n,116,118,105,114,116,117,97,108,108,121,119,104,105,99,104,32,119,97,115,112,114\n,105,110,99,105,112,108,101,67,111,109,112,108,101,116,101,32,105,100,101,110,\n116,105,99,97,108,115,104,111,119,32,116,104,97,116,112,114,105,109,105,116,105,\n118,101,97,119,97,121,32,102,114,111,109,109,111,108,101,99,117,108,97,114,112,\n114,101,99,105,115,101,108,121,100,105,115,115,111,108,118,101,100,85,110,100,\n101,114,32,116,104,101,118,101,114,115,105,111,110,61,34,62,38,110,98,115,112,59\n,60,47,73,116,32,105,115,32,116,104,101,32,84,104,105,115,32,105,115,32,119,105,\n108,108,32,104,97,118,101,111,114,103,97,110,105,115,109,115,115,111,109,101,32,\n116,105,109,101,70,114,105,101,100,114,105,99,104,119,97,115,32,102,105,114,115,\n116,116,104,101,32,111,110,108,121,32,102,97,99,116,32,116,104,97,116,102,111,\n114,109,32,105,100,61,34,112,114,101,99,101,100,105,110,103,84,101,99,104,110,\n105,99,97,108,112,104,121,115,105,99,105,115,116,111,99,99,117,114,115,32,105,\n110,110,97,118,105,103,97,116,111,114,115,101,99,116,105,111,110,34,62,115,112,\n97,110,32,105,100,61,34,115,111,117,103,104,116,32,116,111,98,101,108,111,119,32\n,116,104,101,115,117,114,118,105,118,105,110,103,125,60,47,115,116,121,108,101,\n62,104,105,115,32,100,101,97,116,104,97,115,32,105,110,32,116,104,101,99,97,117,\n115,101,100,32,98,121,112,97,114,116,105,97,108,108,121,101,120,105,115,116,105,\n110,103,32,117,115,105,110,103,32,116,104,101,119,97,115,32,103,105,118,101,110,\n97,32,108,105,115,116,32,111,102,108,101,118,101,108,115,32,111,102,110,111,116,\n105,111,110,32,111,102,79,102,102,105,99,105,97,108,32,100,105,115,109,105,115,\n115,101,100,115,99,105,101,110,116,105,115,116,114,101,115,101,109,98,108,101,\n115,100,117,112,108,105,99,97,116,101,101,120,112,108,111,115,105,118,101,114,\n101,99,111,118,101,114,101,100,97,108,108,32,111,116,104,101,114,103,97,108,108,\n101,114,105,101,115,123,112,97,100,100,105,110,103,58,112,101,111,112,108,101,32\n,111,102,114,101,103,105,111,110,32,111,102,97,100,100,114,101,115,115,101,115,\n97,115,115,111,99,105,97,116,101,105,109,103,32,97,108,116,61,34,105,110,32,109,\n111,100,101,114,110,115,104,111,117,108,100,32,98,101,109,101,116,104,111,100,32\n,111,102,114,101,112,111,114,116,105,110,103,116,105,109,101,115,116,97,109,112,\n110,101,101,100,101,100,32,116,111,116,104,101,32,71,114,101,97,116,114,101,103,\n97,114,100,105,110,103,115,101,101,109,101,100,32,116,111,118,105,101,119,101,\n100,32,97,115,105,109,112,97,99,116,32,111,110,105,100,101,97,32,116,104,97,116,\n116,104,101,32,87,111,114,108,100,104,101,105,103,104,116,32,111,102,101,120,112\n,97,110,100,105,110,103,84,104,101,115,101,32,97,114,101,99,117,114,114,101,110,\n116,34,62,99,97,114,101,102,117,108,108,121,109,97,105,110,116,97,105,110,115,99\n,104,97,114,103,101,32,111,102,67,108,97,115,115,105,99,97,108,97,100,100,114,\n101,115,115,101,100,112,114,101,100,105,99,116,101,100,111,119,110,101,114,115,\n104,105,112,60,100,105,118,32,105,100,61,34,114,105,103,104,116,34,62,13,10,114,\n101,115,105,100,101,110,99,101,108,101,97,118,101,32,116,104,101,99,111,110,116,\n101,110,116,34,62,97,114,101,32,111,102,116,101,110,32,32,125,41,40,41,59,13,10,\n112,114,111,98,97,98,108,121,32,80,114,111,102,101,115,115,111,114,45,98,117,116\n,116,111,110,34,32,114,101,115,112,111,110,100,101,100,115,97,121,115,32,116,104\n,97,116,104,97,100,32,116,111,32,98,101,112,108,97,99,101,100,32,105,110,72,117,\n110,103,97,114,105,97,110,115,116,97,116,117,115,32,111,102,115,101,114,118,101,\n115,32,97,115,85,110,105,118,101,114,115,97,108,101,120,101,99,117,116,105,111,\n110,97,103,103,114,101,103,97,116,101,102,111,114,32,119,104,105,99,104,105,110,\n102,101,99,116,105,111,110,97,103,114,101,101,100,32,116,111,104,111,119,101,118\n,101,114,44,32,112,111,112,117,108,97,114,34,62,112,108,97,99,101,100,32,111,110\n,99,111,110,115,116,114,117,99,116,101,108,101,99,116,111,114,97,108,115,121,109\n,98,111,108,32,111,102,105,110,99,108,117,100,105,110,103,114,101,116,117,114,\n110,32,116,111,97,114,99,104,105,116,101,99,116,67,104,114,105,115,116,105,97,\n110,112,114,101,118,105,111,117,115,32,108,105,118,105,110,103,32,105,110,101,97\n,115,105,101,114,32,116,111,112,114,111,102,101,115,115,111,114,10,38,108,116,59\n,33,45,45,32,101,102,102,101,99,116,32,111,102,97,110,97,108,121,116,105,99,115,\n119,97,115,32,116,97,107,101,110,119,104,101,114,101,32,116,104,101,116,111,111,\n107,32,111,118,101,114,98,101,108,105,101,102,32,105,110,65,102,114,105,107,97,\n97,110,115,97,115,32,102,97,114,32,97,115,112,114,101,118,101,110,116,101,100,\n119,111,114,107,32,119,105,116,104,97,32,115,112,101,99,105,97,108,60,102,105,\n101,108,100,115,101,116,67,104,114,105,115,116,109,97,115,82,101,116,114,105,101\n,118,101,100,10,10,73,110,32,116,104,101,32,98,97,99,107,32,105,110,116,111,110,\n111,114,116,104,101,97,115,116,109,97,103,97,122,105,110,101,115,62,60,115,116,\n114,111,110,103,62,99,111,109,109,105,116,116,101,101,103,111,118,101,114,110,\n105,110,103,103,114,111,117,112,115,32,111,102,115,116,111,114,101,100,32,105,\n110,101,115,116,97,98,108,105,115,104,97,32,103,101,110,101,114,97,108,105,116,\n115,32,102,105,114,115,116,116,104,101,105,114,32,111,119,110,112,111,112,117,\n108,97,116,101,100,97,110,32,111,98,106,101,99,116,67,97,114,105,98,98,101,97,\n110,97,108,108,111,119,32,116,104,101,100,105,115,116,114,105,99,116,115,119,105\n,115,99,111,110,115,105,110,108,111,99,97,116,105,111,110,46,59,32,119,105,100,\n116,104,58,32,105,110,104,97,98,105,116,101,100,83,111,99,105,97,108,105,115,116\n,74,97,110,117,97,114,121,32,49,60,47,102,111,111,116,101,114,62,115,105,109,105\n,108,97,114,108,121,99,104,111,105,99,101,32,111,102,116,104,101,32,115,97,109,\n101,32,115,112,101,99,105,102,105,99,32,98,117,115,105,110,101,115,115,32,84,104\n,101,32,102,105,114,115,116,46,108,101,110,103,116,104,59,32,100,101,115,105,114\n,101,32,116,111,100,101,97,108,32,119,105,116,104,115,105,110,99,101,32,116,104,\n101,117,115,101,114,65,103,101,110,116,99,111,110,99,101,105,118,101,100,105,110\n,100,101,120,46,112,104,112,97,115,32,38,113,117,111,116,59,101,110,103,97,103,\n101,32,105,110,114,101,99,101,110,116,108,121,44,102,101,119,32,121,101,97,114,\n115,119,101,114,101,32,97,108,115,111,10,60,104,101,97,100,62,10,60,101,100,105,\n116,101,100,32,98,121,97,114,101,32,107,110,111,119,110,99,105,116,105,101,115,\n32,105,110,97,99,99,101,115,115,107,101,121,99,111,110,100,101,109,110,101,100,\n97,108,115,111,32,104,97,118,101,115,101,114,118,105,99,101,115,44,102,97,109,\n105,108,121,32,111,102,83,99,104,111,111,108,32,111,102,99,111,110,118,101,114,\n116,101,100,110,97,116,117,114,101,32,111,102,32,108,97,110,103,117,97,103,101,\n109,105,110,105,115,116,101,114,115,60,47,111,98,106,101,99,116,62,116,104,101,\n114,101,32,105,115,32,97,32,112,111,112,117,108,97,114,115,101,113,117,101,110,\n99,101,115,97,100,118,111,99,97,116,101,100,84,104,101,121,32,119,101,114,101,97\n,110,121,32,111,116,104,101,114,108,111,99,97,116,105,111,110,61,101,110,116,101\n,114,32,116,104,101,109,117,99,104,32,109,111,114,101,114,101,102,108,101,99,116\n,101,100,119,97,115,32,110,97,109,101,100,111,114,105,103,105,110,97,108,32,97,\n32,116,121,112,105,99,97,108,119,104,101,110,32,116,104,101,121,101,110,103,105,\n110,101,101,114,115,99,111,117,108,100,32,110,111,116,114,101,115,105,100,101,\n110,116,115,119,101,100,110,101,115,100,97,121,116,104,101,32,116,104,105,114,\n100,32,112,114,111,100,117,99,116,115,74,97,110,117,97,114,121,32,50,119,104,97,\n116,32,116,104,101,121,97,32,99,101,114,116,97,105,110,114,101,97,99,116,105,111\n,110,115,112,114,111,99,101,115,115,111,114,97,102,116,101,114,32,104,105,115,\n116,104,101,32,108,97,115,116,32,99,111,110,116,97,105,110,101,100,34,62,60,47,\n100,105,118,62,10,60,47,97,62,60,47,116,100,62,100,101,112,101,110,100,32,111,\n110,115,101,97,114,99,104,34,62,10,112,105,101,99,101,115,32,111,102,99,111,109,\n112,101,116,105,110,103,82,101,102,101,114,101,110,99,101,116,101,110,110,101,\n115,115,101,101,119,104,105,99,104,32,104,97,115,32,118,101,114,115,105,111,110,\n61,60,47,115,112,97,110,62,32,60,60,47,104,101,97,100,101,114,62,103,105,118,101\n,115,32,116,104,101,104,105,115,116,111,114,105,97,110,118,97,108,117,101,61,34,\n34,62,112,97,100,100,105,110,103,58,48,118,105,101,119,32,116,104,97,116,116,111\n,103,101,116,104,101,114,44,116,104,101,32,109,111,115,116,32,119,97,115,32,102,\n111,117,110,100,115,117,98,115,101,116,32,111,102,97,116,116,97,99,107,32,111,\n110,99,104,105,108,100,114,101,110,44,112,111,105,110,116,115,32,111,102,112,101\n,114,115,111,110,97,108,32,112,111,115,105,116,105,111,110,58,97,108,108,101,103\n,101,100,108,121,67,108,101,118,101,108,97,110,100,119,97,115,32,108,97,116,101,\n114,97,110,100,32,97,102,116,101,114,97,114,101,32,103,105,118,101,110,119,97,\n115,32,115,116,105,108,108,115,99,114,111,108,108,105,110,103,100,101,115,105,\n103,110,32,111,102,109,97,107,101,115,32,116,104,101,109,117,99,104,32,108,101,\n115,115,65,109,101,114,105,99,97,110,115,46,10,10,65,102,116,101,114,32,44,32,98\n,117,116,32,116,104,101,77,117,115,101,117,109,32,111,102,108,111,117,105,115,\n105,97,110,97,40,102,114,111,109,32,116,104,101,109,105,110,110,101,115,111,116,\n97,112,97,114,116,105,99,108,101,115,97,32,112,114,111,99,101,115,115,68,111,109\n,105,110,105,99,97,110,118,111,108,117,109,101,32,111,102,114,101,116,117,114,\n110,105,110,103,100,101,102,101,110,115,105,118,101,48,48,112,120,124,114,105,\n103,104,109,97,100,101,32,102,114,111,109,109,111,117,115,101,111,118,101,114,34\n,32,115,116,121,108,101,61,34,115,116,97,116,101,115,32,111,102,40,119,104,105,\n99,104,32,105,115,99,111,110,116,105,110,117,101,115,70,114,97,110,99,105,115,99\n,111,98,117,105,108,100,105,110,103,32,119,105,116,104,111,117,116,32,97,119,105\n,116,104,32,115,111,109,101,119,104,111,32,119,111,117,108,100,97,32,102,111,114\n,109,32,111,102,97,32,112,97,114,116,32,111,102,98,101,102,111,114,101,32,105,\n116,107,110,111,119,110,32,97,115,32,32,83,101,114,118,105,99,101,115,108,111,99\n,97,116,105,111,110,32,97,110,100,32,111,102,116,101,110,109,101,97,115,117,114,\n105,110,103,97,110,100,32,105,116,32,105,115,112,97,112,101,114,98,97,99,107,118\n,97,108,117,101,115,32,111,102,13,10,60,116,105,116,108,101,62,61,32,119,105,110\n,100,111,119,46,100,101,116,101,114,109,105,110,101,101,114,38,113,117,111,116,\n59,32,112,108,97,121,101,100,32,98,121,97,110,100,32,101,97,114,108,121,60,47,99\n,101,110,116,101,114,62,102,114,111,109,32,116,104,105,115,116,104,101,32,116,\n104,114,101,101,112,111,119,101,114,32,97,110,100,111,102,32,38,113,117,111,116,\n59,105,110,110,101,114,72,84,77,76,60,97,32,104,114,101,102,61,34,121,58,105,110\n,108,105,110,101,59,67,104,117,114,99,104,32,111,102,116,104,101,32,101,118,101,\n110,116,118,101,114,121,32,104,105,103,104,111,102,102,105,99,105,97,108,32,45,\n104,101,105,103,104,116,58,32,99,111,110,116,101,110,116,61,34,47,99,103,105,45,\n98,105,110,47,116,111,32,99,114,101,97,116,101,97,102,114,105,107,97,97,110,115,\n101,115,112,101,114,97,110,116,111,102,114,97,110,195,167,97,105,115,108,97,116,\n118,105,101,197,161,117,108,105,101,116,117,118,105,197,179,196,140,101,197,161,\n116,105,110,97,196,141,101,197,161,116,105,110,97,224,185,132,224,184,151,224,\n184,162,230,151,165,230,156,172,232,170,158,231,174,128,228,189,147,229,173,151,\n231,185,129,233,171,148,229,173,151,237,149,156,234,181,173,236,150,180,228,184,\n186,228,187,128,228,185,136,232,174,161,231,174,151,230,156,186,231,172,148,232,\n174,176,230,156,172,232,168,142,232,171,150,229,141,128,230,156,141,229,138,161,\n229,153,168,228,186,146,232,129,148,231,189,145,230,136,191,229,156,176,228,186,\n167,228,191,177,228,185,144,233,131,168,229,135,186,231,137,136,231,164,190,230,\n142,146,232,161,140,230,166,156,233,131,168,232,144,189,230,160,188,232,191,155,\n228,184,128,230,173,165,230,148,175,228,187,152,229,174,157,233,170,140,232,175,\n129,231,160,129,229,167,148,229,145,152,228,188,154,230,149,176,230,141,174,229,\n186,147,230,182,136,232,180,185,232,128,133,229,138,158,229,133,172,229,174,164,\n232,174,168,232,174,186,229,140,186,230,183,177,229,156,179,229,184,130,230,146,\n173,230,148,190,229,153,168,229,140,151,228,186,172,229,184,130,229,164,167,229,\n173,166,231,148,159,232,182,138,230,157,165,232,182,138,231,174,161,231,144,134,\n229,145,152,228,191,161,230,129,175,231,189,145,115,101,114,118,105,99,105,111,\n115,97,114,116,195,173,99,117,108,111,97,114,103,101,110,116,105,110,97,98,97,\n114,99,101,108,111,110,97,99,117,97,108,113,117,105,101,114,112,117,98,108,105,\n99,97,100,111,112,114,111,100,117,99,116,111,115,112,111,108,195,173,116,105,99,\n97,114,101,115,112,117,101,115,116,97,119,105,107,105,112,101,100,105,97,115,105\n,103,117,105,101,110,116,101,98,195,186,115,113,117,101,100,97,99,111,109,117,\n110,105,100,97,100,115,101,103,117,114,105,100,97,100,112,114,105,110,99,105,112\n,97,108,112,114,101,103,117,110,116,97,115,99,111,110,116,101,110,105,100,111,\n114,101,115,112,111,110,100,101,114,118,101,110,101,122,117,101,108,97,112,114,\n111,98,108,101,109,97,115,100,105,99,105,101,109,98,114,101,114,101,108,97,99,\n105,195,179,110,110,111,118,105,101,109,98,114,101,115,105,109,105,108,97,114,\n101,115,112,114,111,121,101,99,116,111,115,112,114,111,103,114,97,109,97,115,105\n,110,115,116,105,116,117,116,111,97,99,116,105,118,105,100,97,100,101,110,99,117\n,101,110,116,114,97,101,99,111,110,111,109,195,173,97,105,109,195,161,103,101,\n110,101,115,99,111,110,116,97,99,116,97,114,100,101,115,99,97,114,103,97,114,110\n,101,99,101,115,97,114,105,111,97,116,101,110,99,105,195,179,110,116,101,108,195\n,169,102,111,110,111,99,111,109,105,115,105,195,179,110,99,97,110,99,105,111,110\n,101,115,99,97,112,97,99,105,100,97,100,101,110,99,111,110,116,114,97,114,97,110\n,195,161,108,105,115,105,115,102,97,118,111,114,105,116,111,115,116,195,169,114,\n109,105,110,111,115,112,114,111,118,105,110,99,105,97,101,116,105,113,117,101,\n116,97,115,101,108,101,109,101,110,116,111,115,102,117,110,99,105,111,110,101,\n115,114,101,115,117,108,116,97,100,111,99,97,114,195,161,99,116,101,114,112,114,\n111,112,105,101,100,97,100,112,114,105,110,99,105,112,105,111,110,101,99,101,115\n,105,100,97,100,109,117,110,105,99,105,112,97,108,99,114,101,97,99,105,195,179,\n110,100,101,115,99,97,114,103,97,115,112,114,101,115,101,110,99,105,97,99,111,\n109,101,114,99,105,97,108,111,112,105,110,105,111,110,101,115,101,106,101,114,99\n,105,99,105,111,101,100,105,116,111,114,105,97,108,115,97,108,97,109,97,110,99,\n97,103,111,110,122,195,161,108,101,122,100,111,99,117,109,101,110,116,111,112,\n101,108,195,173,99,117,108,97,114,101,99,105,101,110,116,101,115,103,101,110,101\n,114,97,108,101,115,116,97,114,114,97,103,111,110,97,112,114,195,161,99,116,105,\n99,97,110,111,118,101,100,97,100,101,115,112,114,111,112,117,101,115,116,97,112,\n97,99,105,101,110,116,101,115,116,195,169,99,110,105,99,97,115,111,98,106,101,\n116,105,118,111,115,99,111,110,116,97,99,116,111,115,224,164,174,224,165,135,224\n,164,130,224,164,178,224,164,191,224,164,143,224,164,185,224,165,136,224,164,130\n,224,164,151,224,164,175,224,164,190,224,164,184,224,164,190,224,164,165,224,164\n,143,224,164,181,224,164,130,224,164,176,224,164,185,224,165,135,224,164,149,224\n,165,139,224,164,136,224,164,149,224,165,129,224,164,155,224,164,176,224,164,185\n,224,164,190,224,164,172,224,164,190,224,164,166,224,164,149,224,164,185,224,164\n,190,224,164,184,224,164,173,224,165,128,224,164,185,224,165,129,224,164,143,224\n,164,176,224,164,185,224,165,128,224,164,174,224,165,136,224,164,130,224,164,166\n,224,164,191,224,164,168,224,164,172,224,164,190,224,164,164,100,105,112,108,111\n,100,111,99,115,224,164,184,224,164,174,224,164,175,224,164,176,224,165,130,224,\n164,170,224,164,168,224,164,190,224,164,174,224,164,170,224,164,164,224,164,190,\n224,164,171,224,164,191,224,164,176,224,164,148,224,164,184,224,164,164,224,164,\n164,224,164,176,224,164,185,224,164,178,224,165,139,224,164,151,224,164,185,224,\n165,129,224,164,134,224,164,172,224,164,190,224,164,176,224,164,166,224,165,135,\n224,164,182,224,164,185,224,165,129,224,164,136,224,164,150,224,165,135,224,164,\n178,224,164,175,224,164,166,224,164,191,224,164,149,224,164,190,224,164,174,224,\n164,181,224,165,135,224,164,172,224,164,164,224,165,128,224,164,168,224,164,172,\n224,165,128,224,164,154,224,164,174,224,165,140,224,164,164,224,164,184,224,164,\n190,224,164,178,224,164,178,224,165,135,224,164,150,224,164,156,224,165,137,224,\n164,172,224,164,174,224,164,166,224,164,166,224,164,164,224,164,165,224,164,190,\n224,164,168,224,164,185,224,165,128,224,164,182,224,164,185,224,164,176,224,164,\n133,224,164,178,224,164,151,224,164,149,224,164,173,224,165,128,224,164,168,224,\n164,151,224,164,176,224,164,170,224,164,190,224,164,184,224,164,176,224,164,190,\n224,164,164,224,164,149,224,164,191,224,164,143,224,164,137,224,164,184,224,165,\n135,224,164,151,224,164,175,224,165,128,224,164,185,224,165,130,224,164,129,224,\n164,134,224,164,151,224,165,135,224,164,159,224,165,128,224,164,174,224,164,150,\n224,165,139,224,164,156,224,164,149,224,164,190,224,164,176,224,164,133,224,164,\n173,224,165,128,224,164,151,224,164,175,224,165,135,224,164,164,224,165,129,224,\n164,174,224,164,181,224,165,139,224,164,159,224,164,166,224,165,135,224,164,130,\n224,164,133,224,164,151,224,164,176,224,164,144,224,164,184,224,165,135,224,164,\n174,224,165,135,224,164,178,224,164,178,224,164,151,224,164,190,224,164,185,224,\n164,190,224,164,178,224,164,138,224,164,170,224,164,176,224,164,154,224,164,190,\n224,164,176,224,164,144,224,164,184,224,164,190,224,164,166,224,165,135,224,164,\n176,224,164,156,224,164,191,224,164,184,224,164,166,224,164,191,224,164,178,224,\n164,172,224,164,130,224,164,166,224,164,172,224,164,168,224,164,190,224,164,185,\n224,165,130,224,164,130,224,164,178,224,164,190,224,164,150,224,164,156,224,165,\n128,224,164,164,224,164,172,224,164,159,224,164,168,224,164,174,224,164,191,224,\n164,178,224,164,135,224,164,184,224,165,135,224,164,134,224,164,168,224,165,135,\n224,164,168,224,164,175,224,164,190,224,164,149,224,165,129,224,164,178,224,164,\n178,224,165,137,224,164,151,224,164,173,224,164,190,224,164,151,224,164,176,224,\n165,135,224,164,178,224,164,156,224,164,151,224,164,185,224,164,176,224,164,190,\n224,164,174,224,164,178,224,164,151,224,165,135,224,164,170,224,165,135,224,164,\n156,224,164,185,224,164,190,224,164,165,224,164,135,224,164,184,224,165,128,224,\n164,184,224,164,185,224,165,128,224,164,149,224,164,178,224,164,190,224,164,160,\n224,165,128,224,164,149,224,164,185,224,164,190,224,164,129,224,164,166,224,165,\n130,224,164,176,224,164,164,224,164,185,224,164,164,224,164,184,224,164,190,224,\n164,164,224,164,175,224,164,190,224,164,166,224,164,134,224,164,175,224,164,190,\n224,164,170,224,164,190,224,164,149,224,164,149,224,165,140,224,164,168,224,164,\n182,224,164,190,224,164,174,224,164,166,224,165,135,224,164,150,224,164,175,224,\n164,185,224,165,128,224,164,176,224,164,190,224,164,175,224,164,150,224,165,129,\n224,164,166,224,164,178,224,164,151,224,165,128,99,97,116,101,103,111,114,105,\n101,115,101,120,112,101,114,105,101,110,99,101,60,47,116,105,116,108,101,62,13,\n10,67,111,112,121,114,105,103,104,116,32,106,97,118,97,115,99,114,105,112,116,99\n,111,110,100,105,116,105,111,110,115,101,118,101,114,121,116,104,105,110,103,60,\n112,32,99,108,97,115,115,61,34,116,101,99,104,110,111,108,111,103,121,98,97,99,\n107,103,114,111,117,110,100,60,97,32,99,108,97,115,115,61,34,109,97,110,97,103,\n101,109,101,110,116,38,99,111,112,121,59,32,50,48,49,106,97,118,97,83,99,114,105\n,112,116,99,104,97,114,97,99,116,101,114,115,98,114,101,97,100,99,114,117,109,98\n,116,104,101,109,115,101,108,118,101,115,104,111,114,105,122,111,110,116,97,108,\n103,111,118,101,114,110,109,101,110,116,67,97,108,105,102,111,114,110,105,97,97,\n99,116,105,118,105,116,105,101,115,100,105,115,99,111,118,101,114,101,100,78,97,\n118,105,103,97,116,105,111,110,116,114,97,110,115,105,116,105,111,110,99,111,110\n,110,101,99,116,105,111,110,110,97,118,105,103,97,116,105,111,110,97,112,112,101\n,97,114,97,110,99,101,60,47,116,105,116,108,101,62,60,109,99,104,101,99,107,98,\n111,120,34,32,116,101,99,104,110,105,113,117,101,115,112,114,111,116,101,99,116,\n105,111,110,97,112,112,97,114,101,110,116,108,121,97,115,32,119,101,108,108,32,\n97,115,117,110,116,39,44,32,39,85,65,45,114,101,115,111,108,117,116,105,111,110,\n111,112,101,114,97,116,105,111,110,115,116,101,108,101,118,105,115,105,111,110,\n116,114,97,110,115,108,97,116,101,100,87,97,115,104,105,110,103,116,111,110,110,\n97,118,105,103,97,116,111,114,46,32,61,32,119,105,110,100,111,119,46,105,109,112\n,114,101,115,115,105,111,110,38,108,116,59,98,114,38,103,116,59,108,105,116,101,\n114,97,116,117,114,101,112,111,112,117,108,97,116,105,111,110,98,103,99,111,108,\n111,114,61,34,35,101,115,112,101,99,105,97,108,108,121,32,99,111,110,116,101,110\n,116,61,34,112,114,111,100,117,99,116,105,111,110,110,101,119,115,108,101,116,\n116,101,114,112,114,111,112,101,114,116,105,101,115,100,101,102,105,110,105,116,\n105,111,110,108,101,97,100,101,114,115,104,105,112,84,101,99,104,110,111,108,111\n,103,121,80,97,114,108,105,97,109,101,110,116,99,111,109,112,97,114,105,115,111,\n110,117,108,32,99,108,97,115,115,61,34,46,105,110,100,101,120,79,102,40,34,99,\n111,110,99,108,117,115,105,111,110,100,105,115,99,117,115,115,105,111,110,99,111\n,109,112,111,110,101,110,116,115,98,105,111,108,111,103,105,99,97,108,82,101,118\n,111,108,117,116,105,111,110,95,99,111,110,116,97,105,110,101,114,117,110,100,\n101,114,115,116,111,111,100,110,111,115,99,114,105,112,116,62,60,112,101,114,109\n,105,115,115,105,111,110,101,97,99,104,32,111,116,104,101,114,97,116,109,111,115\n,112,104,101,114,101,32,111,110,102,111,99,117,115,61,34,60,102,111,114,109,32,\n105,100,61,34,112,114,111,99,101,115,115,105,110,103,116,104,105,115,46,118,97,\n108,117,101,103,101,110,101,114,97,116,105,111,110,67,111,110,102,101,114,101,\n110,99,101,115,117,98,115,101,113,117,101,110,116,119,101,108,108,45,107,110,111\n,119,110,118,97,114,105,97,116,105,111,110,115,114,101,112,117,116,97,116,105,\n111,110,112,104,101,110,111,109,101,110,111,110,100,105,115,99,105,112,108,105,\n110,101,108,111,103,111,46,112,110,103,34,32,40,100,111,99,117,109,101,110,116,\n44,98,111,117,110,100,97,114,105,101,115,101,120,112,114,101,115,115,105,111,110\n,115,101,116,116,108,101,109,101,110,116,66,97,99,107,103,114,111,117,110,100,\n111,117,116,32,111,102,32,116,104,101,101,110,116,101,114,112,114,105,115,101,40\n,34,104,116,116,112,115,58,34,32,117,110,101,115,99,97,112,101,40,34,112,97,115,\n115,119,111,114,100,34,32,100,101,109,111,99,114,97,116,105,99,60,97,32,104,114,\n101,102,61,34,47,119,114,97,112,112,101,114,34,62,10,109,101,109,98,101,114,115,\n104,105,112,108,105,110,103,117,105,115,116,105,99,112,120,59,112,97,100,100,105\n,110,103,112,104,105,108,111,115,111,112,104,121,97,115,115,105,115,116,97,110,\n99,101,117,110,105,118,101,114,115,105,116,121,102,97,99,105,108,105,116,105,101\n,115,114,101,99,111,103,110,105,122,101,100,112,114,101,102,101,114,101,110,99,\n101,105,102,32,40,116,121,112,101,111,102,109,97,105,110,116,97,105,110,101,100,\n118,111,99,97,98,117,108,97,114,121,104,121,112,111,116,104,101,115,105,115,46,\n115,117,98,109,105,116,40,41,59,38,97,109,112,59,110,98,115,112,59,97,110,110,\n111,116,97,116,105,111,110,98,101,104,105,110,100,32,116,104,101,70,111,117,110,\n100,97,116,105,111,110,112,117,98,108,105,115,104,101,114,34,97,115,115,117,109,\n112,116,105,111,110,105,110,116,114,111,100,117,99,101,100,99,111,114,114,117,\n112,116,105,111,110,115,99,105,101,110,116,105,115,116,115,101,120,112,108,105,\n99,105,116,108,121,105,110,115,116,101,97,100,32,111,102,100,105,109,101,110,115\n,105,111,110,115,32,111,110,67,108,105,99,107,61,34,99,111,110,115,105,100,101,\n114,101,100,100,101,112,97,114,116,109,101,110,116,111,99,99,117,112,97,116,105,\n111,110,115,111,111,110,32,97,102,116,101,114,105,110,118,101,115,116,109,101,\n110,116,112,114,111,110,111,117,110,99,101,100,105,100,101,110,116,105,102,105,\n101,100,101,120,112,101,114,105,109,101,110,116,77,97,110,97,103,101,109,101,110\n,116,103,101,111,103,114,97,112,104,105,99,34,32,104,101,105,103,104,116,61,34,\n108,105,110,107,32,114,101,108,61,34,46,114,101,112,108,97,99,101,40,47,100,101,\n112,114,101,115,115,105,111,110,99,111,110,102,101,114,101,110,99,101,112,117,\n110,105,115,104,109,101,110,116,101,108,105,109,105,110,97,116,101,100,114,101,\n115,105,115,116,97,110,99,101,97,100,97,112,116,97,116,105,111,110,111,112,112,\n111,115,105,116,105,111,110,119,101,108,108,32,107,110,111,119,110,115,117,112,\n112,108,101,109,101,110,116,100,101,116,101,114,109,105,110,101,100,104,49,32,99\n,108,97,115,115,61,34,48,112,120,59,109,97,114,103,105,110,109,101,99,104,97,110\n,105,99,97,108,115,116,97,116,105,115,116,105,99,115,99,101,108,101,98,114,97,\n116,101,100,71,111,118,101,114,110,109,101,110,116,10,10,68,117,114,105,110,103,\n32,116,100,101,118,101,108,111,112,101,114,115,97,114,116,105,102,105,99,105,97,\n108,101,113,117,105,118,97,108,101,110,116,111,114,105,103,105,110,97,116,101,\n100,67,111,109,109,105,115,115,105,111,110,97,116,116,97,99,104,109,101,110,116,\n60,115,112,97,110,32,105,100,61,34,116,104,101,114,101,32,119,101,114,101,78,101\n,100,101,114,108,97,110,100,115,98,101,121,111,110,100,32,116,104,101,114,101,\n103,105,115,116,101,114,101,100,106,111,117,114,110,97,108,105,115,116,102,114,\n101,113,117,101,110,116,108,121,97,108,108,32,111,102,32,116,104,101,108,97,110,\n103,61,34,101,110,34,32,60,47,115,116,121,108,101,62,13,10,97,98,115,111,108,117\n,116,101,59,32,115,117,112,112,111,114,116,105,110,103,101,120,116,114,101,109,\n101,108,121,32,109,97,105,110,115,116,114,101,97,109,60,47,115,116,114,111,110,\n103,62,32,112,111,112,117,108,97,114,105,116,121,101,109,112,108,111,121,109,101\n,110,116,60,47,116,97,98,108,101,62,13,10,32,99,111,108,115,112,97,110,61,34,60,\n47,102,111,114,109,62,10,32,32,99,111,110,118,101,114,115,105,111,110,97,98,111,\n117,116,32,116,104,101,32,60,47,112,62,60,47,100,105,118,62,105,110,116,101,103,\n114,97,116,101,100,34,32,108,97,110,103,61,34,101,110,80,111,114,116,117,103,117\n,101,115,101,115,117,98,115,116,105,116,117,116,101,105,110,100,105,118,105,100,\n117,97,108,105,109,112,111,115,115,105,98,108,101,109,117,108,116,105,109,101,\n100,105,97,97,108,109,111,115,116,32,97,108,108,112,120,32,115,111,108,105,100,\n32,35,97,112,97,114,116,32,102,114,111,109,115,117,98,106,101,99,116,32,116,111,\n105,110,32,69,110,103,108,105,115,104,99,114,105,116,105,99,105,122,101,100,101,\n120,99,101,112,116,32,102,111,114,103,117,105,100,101,108,105,110,101,115,111,\n114,105,103,105,110,97,108,108,121,114,101,109,97,114,107,97,98,108,101,116,104,\n101,32,115,101,99,111,110,100,104,50,32,99,108,97,115,115,61,34,60,97,32,116,105\n,116,108,101,61,34,40,105,110,99,108,117,100,105,110,103,112,97,114,97,109,101,\n116,101,114,115,112,114,111,104,105,98,105,116,101,100,61,32,34,104,116,116,112,\n58,47,47,100,105,99,116,105,111,110,97,114,121,112,101,114,99,101,112,116,105,\n111,110,114,101,118,111,108,117,116,105,111,110,102,111,117,110,100,97,116,105,\n111,110,112,120,59,104,101,105,103,104,116,58,115,117,99,99,101,115,115,102,117,\n108,115,117,112,112,111,114,116,101,114,115,109,105,108,108,101,110,110,105,117,\n109,104,105,115,32,102,97,116,104,101,114,116,104,101,32,38,113,117,111,116,59,\n110,111,45,114,101,112,101,97,116,59,99,111,109,109,101,114,99,105,97,108,105,\n110,100,117,115,116,114,105,97,108,101,110,99,111,117,114,97,103,101,100,97,109,\n111,117,110,116,32,111,102,32,117,110,111,102,102,105,99,105,97,108,101,102,102,\n105,99,105,101,110,99,121,82,101,102,101,114,101,110,99,101,115,99,111,111,114,\n100,105,110,97,116,101,100,105,115,99,108,97,105,109,101,114,101,120,112,101,100\n,105,116,105,111,110,100,101,118,101,108,111,112,105,110,103,99,97,108,99,117,\n108,97,116,101,100,115,105,109,112,108,105,102,105,101,100,108,101,103,105,116,\n105,109,97,116,101,115,117,98,115,116,114,105,110,103,40,48,34,32,99,108,97,115,\n115,61,34,99,111,109,112,108,101,116,101,108,121,105,108,108,117,115,116,114,97,\n116,101,102,105,118,101,32,121,101,97,114,115,105,110,115,116,114,117,109,101,\n110,116,80,117,98,108,105,115,104,105,110,103,49,34,32,99,108,97,115,115,61,34,\n112,115,121,99,104,111,108,111,103,121,99,111,110,102,105,100,101,110,99,101,110\n,117,109,98,101,114,32,111,102,32,97,98,115,101,110,99,101,32,111,102,102,111,99\n,117,115,101,100,32,111,110,106,111,105,110,101,100,32,116,104,101,115,116,114,\n117,99,116,117,114,101,115,112,114,101,118,105,111,117,115,108,121,62,60,47,105,\n102,114,97,109,101,62,111,110,99,101,32,97,103,97,105,110,98,117,116,32,114,97,\n116,104,101,114,105,109,109,105,103,114,97,110,116,115,111,102,32,99,111,117,114\n,115,101,44,97,32,103,114,111,117,112,32,111,102,76,105,116,101,114,97,116,117,\n114,101,85,110,108,105,107,101,32,116,104,101,60,47,97,62,38,110,98,115,112,59,\n10,102,117,110,99,116,105,111,110,32,105,116,32,119,97,115,32,116,104,101,67,111\n,110,118,101,110,116,105,111,110,97,117,116,111,109,111,98,105,108,101,80,114,\n111,116,101,115,116,97,110,116,97,103,103,114,101,115,115,105,118,101,97,102,116\n,101,114,32,116,104,101,32,83,105,109,105,108,97,114,108,121,44,34,32,47,62,60,\n47,100,105,118,62,99,111,108,108,101,99,116,105,111,110,13,10,102,117,110,99,116\n,105,111,110,118,105,115,105,98,105,108,105,116,121,116,104,101,32,117,115,101,\n32,111,102,118,111,108,117,110,116,101,101,114,115,97,116,116,114,97,99,116,105,\n111,110,117,110,100,101,114,32,116,104,101,32,116,104,114,101,97,116,101,110,101\n,100,42,60,33,91,67,68,65,84,65,91,105,109,112,111,114,116,97,110,99,101,105,110\n,32,103,101,110,101,114,97,108,116,104,101,32,108,97,116,116,101,114,60,47,102,\n111,114,109,62,10,60,47,46,105,110,100,101,120,79,102,40,39,105,32,61,32,48,59,\n32,105,32,60,100,105,102,102,101,114,101,110,99,101,100,101,118,111,116,101,100,\n32,116,111,116,114,97,100,105,116,105,111,110,115,115,101,97,114,99,104,32,102,\n111,114,117,108,116,105,109,97,116,101,108,121,116,111,117,114,110,97,109,101,\n110,116,97,116,116,114,105,98,117,116,101,115,115,111,45,99,97,108,108,101,100,\n32,125,10,60,47,115,116,121,108,101,62,101,118,97,108,117,97,116,105,111,110,101\n,109,112,104,97,115,105,122,101,100,97,99,99,101,115,115,105,98,108,101,60,47,\n115,101,99,116,105,111,110,62,115,117,99,99,101,115,115,105,111,110,97,108,111,\n110,103,32,119,105,116,104,77,101,97,110,119,104,105,108,101,44,105,110,100,117,\n115,116,114,105,101,115,60,47,97,62,60,98,114,32,47,62,104,97,115,32,98,101,99,\n111,109,101,97,115,112,101,99,116,115,32,111,102,84,101,108,101,118,105,115,105,\n111,110,115,117,102,102,105,99,105,101,110,116,98,97,115,107,101,116,98,97,108,\n108,98,111,116,104,32,115,105,100,101,115,99,111,110,116,105,110,117,105,110,103\n,97,110,32,97,114,116,105,99,108,101,60,105,109,103,32,97,108,116,61,34,97,100,\n118,101,110,116,117,114,101,115,104,105,115,32,109,111,116,104,101,114,109,97,\n110,99,104,101,115,116,101,114,112,114,105,110,99,105,112,108,101,115,112,97,114\n,116,105,99,117,108,97,114,99,111,109,109,101,110,116,97,114,121,101,102,102,101\n,99,116,115,32,111,102,100,101,99,105,100,101,100,32,116,111,34,62,60,115,116,\n114,111,110,103,62,112,117,98,108,105,115,104,101,114,115,74,111,117,114,110,97,\n108,32,111,102,100,105,102,102,105,99,117,108,116,121,102,97,99,105,108,105,116,\n97,116,101,97,99,99,101,112,116,97,98,108,101,115,116,121,108,101,46,99,115,115,\n34,9,102,117,110,99,116,105,111,110,32,105,110,110,111,118,97,116,105,111,110,62\n,67,111,112,121,114,105,103,104,116,115,105,116,117,97,116,105,111,110,115,119,\n111,117,108,100,32,104,97,118,101,98,117,115,105,110,101,115,115,101,115,68,105,\n99,116,105,111,110,97,114,121,115,116,97,116,101,109,101,110,116,115,111,102,116\n,101,110,32,117,115,101,100,112,101,114,115,105,115,116,101,110,116,105,110,32,\n74,97,110,117,97,114,121,99,111,109,112,114,105,115,105,110,103,60,47,116,105,\n116,108,101,62,10,9,100,105,112,108,111,109,97,116,105,99,99,111,110,116,97,105,\n110,105,110,103,112,101,114,102,111,114,109,105,110,103,101,120,116,101,110,115,\n105,111,110,115,109,97,121,32,110,111,116,32,98,101,99,111,110,99,101,112,116,32\n,111,102,32,111,110,99,108,105,99,107,61,34,73,116,32,105,115,32,97,108,115,111,\n102,105,110,97,110,99,105,97,108,32,109,97,107,105,110,103,32,116,104,101,76,117\n,120,101,109,98,111,117,114,103,97,100,100,105,116,105,111,110,97,108,97,114,101\n,32,99,97,108,108,101,100,101,110,103,97,103,101,100,32,105,110,34,115,99,114,\n105,112,116,34,41,59,98,117,116,32,105,116,32,119,97,115,101,108,101,99,116,114,\n111,110,105,99,111,110,115,117,98,109,105,116,61,34,10,60,33,45,45,32,69,110,100\n,32,101,108,101,99,116,114,105,99,97,108,111,102,102,105,99,105,97,108,108,121,\n115,117,103,103,101,115,116,105,111,110,116,111,112,32,111,102,32,116,104,101,\n117,110,108,105,107,101,32,116,104,101,65,117,115,116,114,97,108,105,97,110,79,\n114,105,103,105,110,97,108,108,121,114,101,102,101,114,101,110,99,101,115,10,60,\n47,104,101,97,100,62,13,10,114,101,99,111,103,110,105,115,101,100,105,110,105,\n116,105,97,108,105,122,101,108,105,109,105,116,101,100,32,116,111,65,108,101,120\n,97,110,100,114,105,97,114,101,116,105,114,101,109,101,110,116,65,100,118,101,\n110,116,117,114,101,115,102,111,117,114,32,121,101,97,114,115,10,10,38,108,116,\n59,33,45,45,32,105,110,99,114,101,97,115,105,110,103,100,101,99,111,114,97,116,\n105,111,110,104,51,32,99,108,97,115,115,61,34,111,114,105,103,105,110,115,32,111\n,102,111,98,108,105,103,97,116,105,111,110,114,101,103,117,108,97,116,105,111,\n110,99,108,97,115,115,105,102,105,101,100,40,102,117,110,99,116,105,111,110,40,\n97,100,118,97,110,116,97,103,101,115,98,101,105,110,103,32,116,104,101,32,104,\n105,115,116,111,114,105,97,110,115,60,98,97,115,101,32,104,114,101,102,114,101,\n112,101,97,116,101,100,108,121,119,105,108,108,105,110,103,32,116,111,99,111,109\n,112,97,114,97,98,108,101,100,101,115,105,103,110,97,116,101,100,110,111,109,105\n,110,97,116,105,111,110,102,117,110,99,116,105,111,110,97,108,105,110,115,105,\n100,101,32,116,104,101,114,101,118,101,108,97,116,105,111,110,101,110,100,32,111\n,102,32,116,104,101,115,32,102,111,114,32,116,104,101,32,97,117,116,104,111,114,\n105,122,101,100,114,101,102,117,115,101,100,32,116,111,116,97,107,101,32,112,108\n,97,99,101,97,117,116,111,110,111,109,111,117,115,99,111,109,112,114,111,109,105\n,115,101,112,111,108,105,116,105,99,97,108,32,114,101,115,116,97,117,114,97,110,\n116,116,119,111,32,111,102,32,116,104,101,70,101,98,114,117,97,114,121,32,50,113\n,117,97,108,105,116,121,32,111,102,115,119,102,111,98,106,101,99,116,46,117,110,\n100,101,114,115,116,97,110,100,110,101,97,114,108,121,32,97,108,108,119,114,105,\n116,116,101,110,32,98,121,105,110,116,101,114,118,105,101,119,115,34,32,119,105,\n100,116,104,61,34,49,119,105,116,104,100,114,97,119,97,108,102,108,111,97,116,58\n,108,101,102,116,105,115,32,117,115,117,97,108,108,121,99,97,110,100,105,100,97,\n116,101,115,110,101,119,115,112,97,112,101,114,115,109,121,115,116,101,114,105,\n111,117,115,68,101,112,97,114,116,109,101,110,116,98,101,115,116,32,107,110,111,\n119,110,112,97,114,108,105,97,109,101,110,116,115,117,112,112,114,101,115,115,\n101,100,99,111,110,118,101,110,105,101,110,116,114,101,109,101,109,98,101,114,\n101,100,100,105,102,102,101,114,101,110,116,32,115,121,115,116,101,109,97,116,\n105,99,104,97,115,32,108,101,100,32,116,111,112,114,111,112,97,103,97,110,100,97\n,99,111,110,116,114,111,108,108,101,100,105,110,102,108,117,101,110,99,101,115,\n99,101,114,101,109,111,110,105,97,108,112,114,111,99,108,97,105,109,101,100,80,\n114,111,116,101,99,116,105,111,110,108,105,32,99,108,97,115,115,61,34,83,99,105,\n101,110,116,105,102,105,99,99,108,97,115,115,61,34,110,111,45,116,114,97,100,101\n,109,97,114,107,115,109,111,114,101,32,116,104,97,110,32,119,105,100,101,115,112\n,114,101,97,100,76,105,98,101,114,97,116,105,111,110,116,111,111,107,32,112,108,\n97,99,101,100,97,121,32,111,102,32,116,104,101,97,115,32,108,111,110,103,32,97,\n115,105,109,112,114,105,115,111,110,101,100,65,100,100,105,116,105,111,110,97,\n108,10,60,104,101,97,100,62,10,60,109,76,97,98,111,114,97,116,111,114,121,78,111\n,118,101,109,98,101,114,32,50,101,120,99,101,112,116,105,111,110,115,73,110,100,\n117,115,116,114,105,97,108,118,97,114,105,101,116,121,32,111,102,102,108,111,97,\n116,58,32,108,101,102,68,117,114,105,110,103,32,116,104,101,97,115,115,101,115,\n115,109,101,110,116,104,97,118,101,32,98,101,101,110,32,100,101,97,108,115,32,\n119,105,116,104,83,116,97,116,105,115,116,105,99,115,111,99,99,117,114,114,101,\n110,99,101,47,117,108,62,60,47,100,105,118,62,99,108,101,97,114,102,105,120,34,\n62,116,104,101,32,112,117,98,108,105,99,109,97,110,121,32,121,101,97,114,115,119\n,104,105,99,104,32,119,101,114,101,111,118,101,114,32,116,105,109,101,44,115,121\n,110,111,110,121,109,111,117,115,99,111,110,116,101,110,116,34,62,10,112,114,101\n,115,117,109,97,98,108,121,104,105,115,32,102,97,109,105,108,121,117,115,101,114\n,65,103,101,110,116,46,117,110,101,120,112,101,99,116,101,100,105,110,99,108,117\n,100,105,110,103,32,99,104,97,108,108,101,110,103,101,100,97,32,109,105,110,111,\n114,105,116,121,117,110,100,101,102,105,110,101,100,34,98,101,108,111,110,103,\n115,32,116,111,116,97,107,101,110,32,102,114,111,109,105,110,32,79,99,116,111,98\n,101,114,112,111,115,105,116,105,111,110,58,32,115,97,105,100,32,116,111,32,98,\n101,114,101,108,105,103,105,111,117,115,32,70,101,100,101,114,97,116,105,111,110\n,32,114,111,119,115,112,97,110,61,34,111,110,108,121,32,97,32,102,101,119,109,\n101,97,110,116,32,116,104,97,116,108,101,100,32,116,111,32,116,104,101,45,45,62,\n13,10,60,100,105,118,32,60,102,105,101,108,100,115,101,116,62,65,114,99,104,98,\n105,115,104,111,112,32,99,108,97,115,115,61,34,110,111,98,101,105,110,103,32,117\n,115,101,100,97,112,112,114,111,97,99,104,101,115,112,114,105,118,105,108,101,\n103,101,115,110,111,115,99,114,105,112,116,62,10,114,101,115,117,108,116,115,32,\n105,110,109,97,121,32,98,101,32,116,104,101,69,97,115,116,101,114,32,101,103,103\n,109,101,99,104,97,110,105,115,109,115,114,101,97,115,111,110,97,98,108,101,80,\n111,112,117,108,97,116,105,111,110,67,111,108,108,101,99,116,105,111,110,115,101\n,108,101,99,116,101,100,34,62,110,111,115,99,114,105,112,116,62,13,47,105,110,\n100,101,120,46,112,104,112,97,114,114,105,118,97,108,32,111,102,45,106,115,115,\n100,107,39,41,41,59,109,97,110,97,103,101,100,32,116,111,105,110,99,111,109,112,\n108,101,116,101,99,97,115,117,97,108,116,105,101,115,99,111,109,112,108,101,116,\n105,111,110,67,104,114,105,115,116,105,97,110,115,83,101,112,116,101,109,98,101,\n114,32,97,114,105,116,104,109,101,116,105,99,112,114,111,99,101,100,117,114,101,\n115,109,105,103,104,116,32,104,97,118,101,80,114,111,100,117,99,116,105,111,110,\n105,116,32,97,112,112,101,97,114,115,80,104,105,108,111,115,111,112,104,121,102,\n114,105,101,110,100,115,104,105,112,108,101,97,100,105,110,103,32,116,111,103,\n105,118,105,110,103,32,116,104,101,116,111,119,97,114,100,32,116,104,101,103,117\n,97,114,97,110,116,101,101,100,100,111,99,117,109,101,110,116,101,100,99,111,108\n,111,114,58,35,48,48,48,118,105,100,101,111,32,103,97,109,101,99,111,109,109,105\n,115,115,105,111,110,114,101,102,108,101,99,116,105,110,103,99,104,97,110,103,\n101,32,116,104,101,97,115,115,111,99,105,97,116,101,100,115,97,110,115,45,115,\n101,114,105,102,111,110,107,101,121,112,114,101,115,115,59,32,112,97,100,100,105\n,110,103,58,72,101,32,119,97,115,32,116,104,101,117,110,100,101,114,108,121,105,\n110,103,116,121,112,105,99,97,108,108,121,32,44,32,97,110,100,32,116,104,101,32,\n115,114,99,69,108,101,109,101,110,116,115,117,99,99,101,115,115,105,118,101,115,\n105,110,99,101,32,116,104,101,32,115,104,111,117,108,100,32,98,101,32,110,101,\n116,119,111,114,107,105,110,103,97,99,99,111,117,110,116,105,110,103,117,115,101\n,32,111,102,32,116,104,101,108,111,119,101,114,32,116,104,97,110,115,104,111,119\n,115,32,116,104,97,116,60,47,115,112,97,110,62,10,9,9,99,111,109,112,108,97,105,\n110,116,115,99,111,110,116,105,110,117,111,117,115,113,117,97,110,116,105,116,\n105,101,115,97,115,116,114,111,110,111,109,101,114,104,101,32,100,105,100,32,110\n,111,116,100,117,101,32,116,111,32,105,116,115,97,112,112,108,105,101,100,32,116\n,111,97,110,32,97,118,101,114,97,103,101,101,102,102,111,114,116,115,32,116,111,\n116,104,101,32,102,117,116,117,114,101,97,116,116,101,109,112,116,32,116,111,84,\n104,101,114,101,102,111,114,101,44,99,97,112,97,98,105,108,105,116,121,82,101,\n112,117,98,108,105,99,97,110,119,97,115,32,102,111,114,109,101,100,69,108,101,99\n,116,114,111,110,105,99,107,105,108,111,109,101,116,101,114,115,99,104,97,108,\n108,101,110,103,101,115,112,117,98,108,105,115,104,105,110,103,116,104,101,32,\n102,111,114,109,101,114,105,110,100,105,103,101,110,111,117,115,100,105,114,101,\n99,116,105,111,110,115,115,117,98,115,105,100,105,97,114,121,99,111,110,115,112,\n105,114,97,99,121,100,101,116,97,105,108,115,32,111,102,97,110,100,32,105,110,32\n,116,104,101,97,102,102,111,114,100,97,98,108,101,115,117,98,115,116,97,110,99,\n101,115,114,101,97,115,111,110,32,102,111,114,99,111,110,118,101,110,116,105,111\n,110,105,116,101,109,116,121,112,101,61,34,97,98,115,111,108,117,116,101,108,121\n,115,117,112,112,111,115,101,100,108,121,114,101,109,97,105,110,101,100,32,97,97\n,116,116,114,97,99,116,105,118,101,116,114,97,118,101,108,108,105,110,103,115,\n101,112,97,114,97,116,101,108,121,102,111,99,117,115,101,115,32,111,110,101,108,\n101,109,101,110,116,97,114,121,97,112,112,108,105,99,97,98,108,101,102,111,117,\n110,100,32,116,104,97,116,115,116,121,108,101,115,104,101,101,116,109,97,110,117\n,115,99,114,105,112,116,115,116,97,110,100,115,32,102,111,114,32,110,111,45,114,\n101,112,101,97,116,40,115,111,109,101,116,105,109,101,115,67,111,109,109,101,114\n,99,105,97,108,105,110,32,65,109,101,114,105,99,97,117,110,100,101,114,116,97,\n107,101,110,113,117,97,114,116,101,114,32,111,102,97,110,32,101,120,97,109,112,\n108,101,112,101,114,115,111,110,97,108,108,121,105,110,100,101,120,46,112,104,\n112,63,60,47,98,117,116,116,111,110,62,10,112,101,114,99,101,110,116,97,103,101,\n98,101,115,116,45,107,110,111,119,110,99,114,101,97,116,105,110,103,32,97,34,32,\n100,105,114,61,34,108,116,114,76,105,101,117,116,101,110,97,110,116,10,60,100,\n105,118,32,105,100,61,34,116,104,101,121,32,119,111,117,108,100,97,98,105,108,\n105,116,121,32,111,102,109,97,100,101,32,117,112,32,111,102,110,111,116,101,100,\n32,116,104,97,116,99,108,101,97,114,32,116,104,97,116,97,114,103,117,101,32,116,\n104,97,116,116,111,32,97,110,111,116,104,101,114,99,104,105,108,100,114,101,110,\n39,115,112,117,114,112,111,115,101,32,111,102,102,111,114,109,117,108,97,116,101\n,100,98,97,115,101,100,32,117,112,111,110,116,104,101,32,114,101,103,105,111,110\n,115,117,98,106,101,99,116,32,111,102,112,97,115,115,101,110,103,101,114,115,112\n,111,115,115,101,115,115,105,111,110,46,10,10,73,110,32,116,104,101,32,66,101,\n102,111,114,101,32,116,104,101,97,102,116,101,114,119,97,114,100,115,99,117,114,\n114,101,110,116,108,121,32,97,99,114,111,115,115,32,116,104,101,115,99,105,101,\n110,116,105,102,105,99,99,111,109,109,117,110,105,116,121,46,99,97,112,105,116,\n97,108,105,115,109,105,110,32,71,101,114,109,97,110,121,114,105,103,104,116,45,\n119,105,110,103,116,104,101,32,115,121,115,116,101,109,83,111,99,105,101,116,121\n,32,111,102,112,111,108,105,116,105,99,105,97,110,100,105,114,101,99,116,105,111\n,110,58,119,101,110,116,32,111,110,32,116,111,114,101,109,111,118,97,108,32,111,\n102,32,78,101,119,32,89,111,114,107,32,97,112,97,114,116,109,101,110,116,115,105\n,110,100,105,99,97,116,105,111,110,100,117,114,105,110,103,32,116,104,101,117,\n110,108,101,115,115,32,116,104,101,104,105,115,116,111,114,105,99,97,108,104,97,\n100,32,98,101,101,110,32,97,100,101,102,105,110,105,116,105,118,101,105,110,103,\n114,101,100,105,101,110,116,97,116,116,101,110,100,97,110,99,101,67,101,110,116,\n101,114,32,102,111,114,112,114,111,109,105,110,101,110,99,101,114,101,97,100,121\n,83,116,97,116,101,115,116,114,97,116,101,103,105,101,115,98,117,116,32,105,110,\n32,116,104,101,97,115,32,112,97,114,116,32,111,102,99,111,110,115,116,105,116,\n117,116,101,99,108,97,105,109,32,116,104,97,116,108,97,98,111,114,97,116,111,114\n,121,99,111,109,112,97,116,105,98,108,101,102,97,105,108,117,114,101,32,111,102,\n44,32,115,117,99,104,32,97,115,32,98,101,103,97,110,32,119,105,116,104,117,115,\n105,110,103,32,116,104,101,32,116,111,32,112,114,111,118,105,100,101,102,101,97,\n116,117,114,101,32,111,102,102,114,111,109,32,119,104,105,99,104,47,34,32,99,108\n,97,115,115,61,34,103,101,111,108,111,103,105,99,97,108,115,101,118,101,114,97,\n108,32,111,102,100,101,108,105,98,101,114,97,116,101,105,109,112,111,114,116,97,\n110,116,32,104,111,108,100,115,32,116,104,97,116,105,110,103,38,113,117,111,116,\n59,32,118,97,108,105,103,110,61,116,111,112,116,104,101,32,71,101,114,109,97,110\n,111,117,116,115,105,100,101,32,111,102,110,101,103,111,116,105,97,116,101,100,\n104,105,115,32,99,97,114,101,101,114,115,101,112,97,114,97,116,105,111,110,105,\n100,61,34,115,101,97,114,99,104,119,97,115,32,99,97,108,108,101,100,116,104,101,\n32,102,111,117,114,116,104,114,101,99,114,101,97,116,105,111,110,111,116,104,101\n,114,32,116,104,97,110,112,114,101,118,101,110,116,105,111,110,119,104,105,108,\n101,32,116,104,101,32,101,100,117,99,97,116,105,111,110,44,99,111,110,110,101,99\n,116,105,110,103,97,99,99,117,114,97,116,101,108,121,119,101,114,101,32,98,117,\n105,108,116,119,97,115,32,107,105,108,108,101,100,97,103,114,101,101,109,101,110\n,116,115,109,117,99,104,32,109,111,114,101,32,68,117,101,32,116,111,32,116,104,\n101,119,105,100,116,104,58,32,49,48,48,115,111,109,101,32,111,116,104,101,114,75\n,105,110,103,100,111,109,32,111,102,116,104,101,32,101,110,116,105,114,101,102,\n97,109,111,117,115,32,102,111,114,116,111,32,99,111,110,110,101,99,116,111,98,\n106,101,99,116,105,118,101,115,116,104,101,32,70,114,101,110,99,104,112,101,111,\n112,108,101,32,97,110,100,102,101,97,116,117,114,101,100,34,62,105,115,32,115,97\n,105,100,32,116,111,115,116,114,117,99,116,117,114,97,108,114,101,102,101,114,\n101,110,100,117,109,109,111,115,116,32,111,102,116,101,110,97,32,115,101,112,97,\n114,97,116,101,45,62,10,60,100,105,118,32,105,100,32,79,102,102,105,99,105,97,\n108,32,119,111,114,108,100,119,105,100,101,46,97,114,105,97,45,108,97,98,101,108\n,116,104,101,32,112,108,97,110,101,116,97,110,100,32,105,116,32,119,97,115,100,\n34,32,118,97,108,117,101,61,34,108,111,111,107,105,110,103,32,97,116,98,101,110,\n101,102,105,99,105,97,108,97,114,101,32,105,110,32,116,104,101,109,111,110,105,\n116,111,114,105,110,103,114,101,112,111,114,116,101,100,108,121,116,104,101,32,\n109,111,100,101,114,110,119,111,114,107,105,110,103,32,111,110,97,108,108,111,\n119,101,100,32,116,111,119,104,101,114,101,32,116,104,101,32,105,110,110,111,118\n,97,116,105,118,101,60,47,97,62,60,47,100,105,118,62,115,111,117,110,100,116,114\n,97,99,107,115,101,97,114,99,104,70,111,114,109,116,101,110,100,32,116,111,32,98\n,101,105,110,112,117,116,32,105,100,61,34,111,112,101,110,105,110,103,32,111,102\n,114,101,115,116,114,105,99,116,101,100,97,100,111,112,116,101,100,32,98,121,97,\n100,100,114,101,115,115,105,110,103,116,104,101,111,108,111,103,105,97,110,109,\n101,116,104,111,100,115,32,111,102,118,97,114,105,97,110,116,32,111,102,67,104,\n114,105,115,116,105,97,110,32,118,101,114,121,32,108,97,114,103,101,97,117,116,\n111,109,111,116,105,118,101,98,121,32,102,97,114,32,116,104,101,114,97,110,103,\n101,32,102,114,111,109,112,117,114,115,117,105,116,32,111,102,102,111,108,108,\n111,119,32,116,104,101,98,114,111,117,103,104,116,32,116,111,105,110,32,69,110,\n103,108,97,110,100,97,103,114,101,101,32,116,104,97,116,97,99,99,117,115,101,100\n,32,111,102,99,111,109,101,115,32,102,114,111,109,112,114,101,118,101,110,116,\n105,110,103,100,105,118,32,115,116,121,108,101,61,104,105,115,32,111,114,32,104,\n101,114,116,114,101,109,101,110,100,111,117,115,102,114,101,101,100,111,109,32,\n111,102,99,111,110,99,101,114,110,105,110,103,48,32,49,101,109,32,49,101,109,59,\n66,97,115,107,101,116,98,97,108,108,47,115,116,121,108,101,46,99,115,115,97,110,\n32,101,97,114,108,105,101,114,101,118,101,110,32,97,102,116,101,114,47,34,32,116\n,105,116,108,101,61,34,46,99,111,109,47,105,110,100,101,120,116,97,107,105,110,\n103,32,116,104,101,112,105,116,116,115,98,117,114,103,104,99,111,110,116,101,110\n,116,34,62,13,60,115,99,114,105,112,116,62,40,102,116,117,114,110,101,100,32,111\n,117,116,104,97,118,105,110,103,32,116,104,101,60,47,115,112,97,110,62,13,10,32,\n111,99,99,97,115,105,111,110,97,108,98,101,99,97,117,115,101,32,105,116,115,116,\n97,114,116,101,100,32,116,111,112,104,121,115,105,99,97,108,108,121,62,60,47,100\n,105,118,62,10,32,32,99,114,101,97,116,101,100,32,98,121,67,117,114,114,101,110,\n116,108,121,44,32,98,103,99,111,108,111,114,61,34,116,97,98,105,110,100,101,120,\n61,34,100,105,115,97,115,116,114,111,117,115,65,110,97,108,121,116,105,99,115,32\n,97,108,115,111,32,104,97,115,32,97,62,60,100,105,118,32,105,100,61,34,60,47,115\n,116,121,108,101,62,10,60,99,97,108,108,101,100,32,102,111,114,115,105,110,103,\n101,114,32,97,110,100,46,115,114,99,32,61,32,34,47,47,118,105,111,108,97,116,105\n,111,110,115,116,104,105,115,32,112,111,105,110,116,99,111,110,115,116,97,110,\n116,108,121,105,115,32,108,111,99,97,116,101,100,114,101,99,111,114,100,105,110,\n103,115,100,32,102,114,111,109,32,116,104,101,110,101,100,101,114,108,97,110,100\n,115,112,111,114,116,117,103,117,195,170,115,215,162,215,145,215,168,215,153,215\n,170,217,129,216,167,216,177,216,179,219,140,100,101,115,97,114,114,111,108,108,\n111,99,111,109,101,110,116,97,114,105,111,101,100,117,99,97,99,105,195,179,110,\n115,101,112,116,105,101,109,98,114,101,114,101,103,105,115,116,114,97,100,111,\n100,105,114,101,99,99,105,195,179,110,117,98,105,99,97,99,105,195,179,110,112,\n117,98,108,105,99,105,100,97,100,114,101,115,112,117,101,115,116,97,115,114,101,\n115,117,108,116,97,100,111,115,105,109,112,111,114,116,97,110,116,101,114,101,\n115,101,114,118,97,100,111,115,97,114,116,195,173,99,117,108,111,115,100,105,102\n,101,114,101,110,116,101,115,115,105,103,117,105,101,110,116,101,115,114,101,112\n,195,186,98,108,105,99,97,115,105,116,117,97,99,105,195,179,110,109,105,110,105,\n115,116,101,114,105,111,112,114,105,118,97,99,105,100,97,100,100,105,114,101,99,\n116,111,114,105,111,102,111,114,109,97,99,105,195,179,110,112,111,98,108,97,99,\n105,195,179,110,112,114,101,115,105,100,101,110,116,101,99,111,110,116,101,110,\n105,100,111,115,97,99,99,101,115,111,114,105,111,115,116,101,99,104,110,111,114,\n97,116,105,112,101,114,115,111,110,97,108,101,115,99,97,116,101,103,111,114,195,\n173,97,101,115,112,101,99,105,97,108,101,115,100,105,115,112,111,110,105,98,108,\n101,97,99,116,117,97,108,105,100,97,100,114,101,102,101,114,101,110,99,105,97,\n118,97,108,108,97,100,111,108,105,100,98,105,98,108,105,111,116,101,99,97,114,\n101,108,97,99,105,111,110,101,115,99,97,108,101,110,100,97,114,105,111,112,111,\n108,195,173,116,105,99,97,115,97,110,116,101,114,105,111,114,101,115,100,111,99,\n117,109,101,110,116,111,115,110,97,116,117,114,97,108,101,122,97,109,97,116,101,\n114,105,97,108,101,115,100,105,102,101,114,101,110,99,105,97,101,99,111,110,195,\n179,109,105,99,97,116,114,97,110,115,112,111,114,116,101,114,111,100,114,195,173\n,103,117,101,122,112,97,114,116,105,99,105,112,97,114,101,110,99,117,101,110,116\n,114,97,110,100,105,115,99,117,115,105,195,179,110,101,115,116,114,117,99,116,\n117,114,97,102,117,110,100,97,99,105,195,179,110,102,114,101,99,117,101,110,116,\n101,115,112,101,114,109,97,110,101,110,116,101,116,111,116,97,108,109,101,110,\n116,101,208,188,208,190,208,182,208,189,208,190,208,177,209,131,208,180,208,181,\n209,130,208,188,208,190,208,182,208,181,209,130,208,178,209,128,208,181,208,188,\n209,143,209,130,208,176,208,186,208,182,208,181,209,135,209,130,208,190,208,177,\n209,139,208,177,208,190,208,187,208,181,208,181,208,190,209,135,208,181,208,189,\n209,140,209,141,209,130,208,190,208,179,208,190,208,186,208,190,208,179,208,180,\n208,176,208,191,208,190,209,129,208,187,208,181,208,178,209,129,208,181,208,179,\n208,190,209,129,208,176,208,185,209,130,208,181,209,135,208,181,209,128,208,181,\n208,183,208,188,208,190,208,179,209,131,209,130,209,129,208,176,208,185,209,130,\n208,176,208,182,208,184,208,183,208,189,208,184,208,188,208,181,208,182,208,180,\n209,131,208,177,209,131,208,180,209,131,209,130,208,159,208,190,208,184,209,129,\n208,186,208,183,208,180,208,181,209,129,209,140,208,178,208,184,208,180,208,181,\n208,190,209,129,208,178,209,143,208,183,208,184,208,189,209,131,208,182,208,189,\n208,190,209,129,208,178,208,190,208,181,208,185,208,187,209,142,208,180,208,181,\n208,185,208,191,208,190,209,128,208,189,208,190,208,188,208,189,208,190,208,179,\n208,190,208,180,208,181,209,130,208,181,208,185,209,129,208,178,208,190,208,184,\n209,133,208,191,209,128,208,176,208,178,208,176,209,130,208,176,208,186,208,190,\n208,185,208,188,208,181,209,129,209,130,208,190,208,184,208,188,208,181,208,181,\n209,130,208,182,208,184,208,183,208,189,209,140,208,190,208,180,208,189,208,190,\n208,185,208,187,209,131,209,135,209,136,208,181,208,191,208,181,209,128,208,181,\n208,180,209,135,208,176,209,129,209,130,208,184,209,135,208,176,209,129,209,130,\n209,140,209,128,208,176,208,177,208,190,209,130,208,189,208,190,208,178,209,139,\n209,133,208,191,209,128,208,176,208,178,208,190,209,129,208,190,208,177,208,190,\n208,185,208,191,208,190,209,130,208,190,208,188,208,188,208,181,208,189,208,181,\n208,181,209,135,208,184,209,129,208,187,208,181,208,189,208,190,208,178,209,139,\n208,181,209,131,209,129,208,187,209,131,208,179,208,190,208,186,208,190,208,187,\n208,190,208,189,208,176,208,183,208,176,208,180,209,130,208,176,208,186,208,190,\n208,181,209,130,208,190,208,179,208,180,208,176,208,191,208,190,209,135,209,130,\n208,184,208,159,208,190,209,129,208,187,208,181,209,130,208,176,208,186,208,184,\n208,181,208,189,208,190,208,178,209,139,208,185,209,129,209,130,208,190,208,184,\n209,130,209,130,208,176,208,186,208,184,209,133,209,129,209,128,208,176,208,183,\n209,131,208,161,208,176,208,189,208,186,209,130,209,132,208,190,209,128,209,131,\n208,188,208,154,208,190,208,179,208,180,208,176,208,186,208,189,208,184,208,179,\n208,184,209,129,208,187,208,190,208,178,208,176,208,189,208,176,209,136,208,181,\n208,185,208,189,208,176,208,185,209,130,208,184,209,129,208,178,208,190,208,184,\n208,188,209,129,208,178,209,143,208,183,209,140,208,187,209,142,208,177,208,190,\n208,185,209,135,208,176,209,129,209,130,208,190,209,129,209,128,208,181,208,180,\n208,184,208,154,209,128,208,190,208,188,208,181,208,164,208,190,209,128,209,131,\n208,188,209,128,209,139,208,189,208,186,208,181,209,129,209,130,208,176,208,187,\n208,184,208,191,208,190,208,184,209,129,208,186,209,130,209,139,209,129,209,143,\n209,135,208,188,208,181,209,129,209,143,209,134,209,134,208,181,208,189,209,130,\n209,128,209,130,209,128,209,131,208,180,208,176,209,129,208,176,208,188,209,139,\n209,133,209,128,209,139,208,189,208,186,208,176,208,157,208,190,208,178,209,139,\n208,185,209,135,208,176,209,129,208,190,208,178,208,188,208,181,209,129,209,130,\n208,176,209,132,208,184,208,187,209,140,208,188,208,188,208,176,209,128,209,130,\n208,176,209,129,209,130,209,128,208,176,208,189,208,188,208,181,209,129,209,130,\n208,181,209,130,208,181,208,186,209,129,209,130,208,189,208,176,209,136,208,184,\n209,133,208,188,208,184,208,189,209,131,209,130,208,184,208,188,208,181,208,189,\n208,184,208,184,208,188,208,181,209,142,209,130,208,189,208,190,208,188,208,181,\n209,128,208,179,208,190,209,128,208,190,208,180,209,129,208,176,208,188,208,190,\n208,188,209,141,209,130,208,190,208,188,209,131,208,186,208,190,208,189,209,134,\n208,181,209,129,208,178,208,190,208,181,208,188,208,186,208,176,208,186,208,190,\n208,185,208,144,209,128,209,133,208,184,208,178,217,133,217,134,216,170,216,175,\n217,137,216,165,216,177,216,179,216,167,217,132,216,177,216,179,216,167,217,132,\n216,169,216,167,217,132,216,185,216,167,217,133,217,131,216,170,216,168,217,135,\n216,167,216,168,216,177,216,167,217,133,216,172,216,167,217,132,217,138,217,136,\n217,133,216,167,217,132,216,181,217,136,216,177,216,172,216,175,217,138,216,175,\n216,169,216,167,217,132,216,185,216,182,217,136,216,165,216,182,216,167,217,129,\n216,169,216,167,217,132,217,130,216,179,217,133,216,167,217,132,216,185,216,167,\n216,168,216,170,216,173,217,133,217,138,217,132,217,133,217,132,217,129,216,167,\n216,170,217,133,217,132,216,170,217,130,217,137,216,170,216,185,216,175,217,138,\n217,132,216,167,217,132,216,180,216,185,216,177,216,163,216,174,216,168,216,167,\n216,177,216,170,216,183,217,136,217,138,216,177,216,185,217,132,217,138,217,131,\n217,133,216,165,216,177,217,129,216,167,217,130,216,183,217,132,216,168,216,167,\n216,170,216,167,217,132,217,132,216,186,216,169,216,170,216,177,216,170,217,138,\n216,168,216,167,217,132,217,134,216,167,216,179,216,167,217,132,216,180,217,138,\n216,174,217,133,217,134,216,170,216,175,217,138,216,167,217,132,216,185,216,177,\n216,168,216,167,217,132,217,130,216,181,216,181,216,167,217,129,217,132,216,167,\n217,133,216,185,217,132,217,138,217,135,216,167,216,170,216,173,216,175,217,138,\n216,171,216,167,217,132,217,132,217,135,217,133,216,167,217,132,216,185,217,133,\n217,132,217,133,217,131,216,170,216,168,216,169,217,138,217,133,217,131,217,134,\n217,131,216,167,217,132,216,183,217,129,217,132,217,129,217,138,216,175,217,138,\n217,136,216,165,216,175,216,167,216,177,216,169,216,170,216,167,216,177,217,138,\n216,174,216,167,217,132,216,181,216,173,216,169,216,170,216,179,216,172,217,138,\n217,132,216,167,217,132,217,136,217,130,216,170,216,185,217,134,216,175,217,133,\n216,167,217,133,216,175,217,138,217,134,216,169,216,170,216,181,217,133,217,138,\n217,133,216,163,216,177,216,180,217,138,217,129,216,167,217,132,216,176,217,138,\n217,134,216,185,216,177,216,168,217,138,216,169,216,168,217,136,216,167,216,168,\n216,169,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,179,217,129,\n216,177,217,133,216,180,216,167,217,131,217,132,216,170,216,185,216,167,217,132,\n217,137,216,167,217,132,216,163,217,136,217,132,216,167,217,132,216,179,217,134,\n216,169,216,172,216,167,217,133,216,185,216,169,216,167,217,132,216,181,216,173,\n217,129,216,167,217,132,216,175,217,138,217,134,217,131,217,132,217,133,216,167,\n216,170,216,167,217,132,216,174,216,167,216,181,216,167,217,132,217,133,217,132,\n217,129,216,163,216,185,216,182,216,167,216,161,217,131,216,170,216,167,216,168,\n216,169,216,167,217,132,216,174,217,138,216,177,216,177,216,179,216,167,216,166,\n217,132,216,167,217,132,217,130,217,132,216,168,216,167,217,132,216,163,216,175,\n216,168,217,133,217,130,216,167,216,183,216,185,217,133,216,177,216,167,216,179,\n217,132,217,133,217,134,216,183,217,130,216,169,216,167,217,132,217,131,216,170,\n216,168,216,167,217,132,216,177,216,172,217,132,216,167,216,180,216,170,216,177,\n217,131,216,167,217,132,217,130,216,175,217,133,217,138,216,185,216,183,217,138,\n217,131,115,66,121,84,97,103,78,97,109,101,40,46,106,112,103,34,32,97,108,116,61\n,34,49,112,120,32,115,111,108,105,100,32,35,46,103,105,102,34,32,97,108,116,61,\n34,116,114,97,110,115,112,97,114,101,110,116,105,110,102,111,114,109,97,116,105,\n111,110,97,112,112,108,105,99,97,116,105,111,110,34,32,111,110,99,108,105,99,107\n,61,34,101,115,116,97,98,108,105,115,104,101,100,97,100,118,101,114,116,105,115,\n105,110,103,46,112,110,103,34,32,97,108,116,61,34,101,110,118,105,114,111,110,\n109,101,110,116,112,101,114,102,111,114,109,97,110,99,101,97,112,112,114,111,112\n,114,105,97,116,101,38,97,109,112,59,109,100,97,115,104,59,105,109,109,101,100,\n105,97,116,101,108,121,60,47,115,116,114,111,110,103,62,60,47,114,97,116,104,101\n,114,32,116,104,97,110,116,101,109,112,101,114,97,116,117,114,101,100,101,118,\n101,108,111,112,109,101,110,116,99,111,109,112,101,116,105,116,105,111,110,112,\n108,97,99,101,104,111,108,100,101,114,118,105,115,105,98,105,108,105,116,121,58,\n99,111,112,121,114,105,103,104,116,34,62,48,34,32,104,101,105,103,104,116,61,34,\n101,118,101,110,32,116,104,111,117,103,104,114,101,112,108,97,99,101,109,101,110\n,116,100,101,115,116,105,110,97,116,105,111,110,67,111,114,112,111,114,97,116,\n105,111,110,60,117,108,32,99,108,97,115,115,61,34,65,115,115,111,99,105,97,116,\n105,111,110,105,110,100,105,118,105,100,117,97,108,115,112,101,114,115,112,101,\n99,116,105,118,101,115,101,116,84,105,109,101,111,117,116,40,117,114,108,40,104,\n116,116,112,58,47,47,109,97,116,104,101,109,97,116,105,99,115,109,97,114,103,105\n,110,45,116,111,112,58,101,118,101,110,116,117,97,108,108,121,32,100,101,115,99,\n114,105,112,116,105,111,110,41,32,110,111,45,114,101,112,101,97,116,99,111,108,\n108,101,99,116,105,111,110,115,46,74,80,71,124,116,104,117,109,98,124,112,97,114\n,116,105,99,105,112,97,116,101,47,104,101,97,100,62,60,98,111,100,121,102,108,\n111,97,116,58,108,101,102,116,59,60,108,105,32,99,108,97,115,115,61,34,104,117,\n110,100,114,101,100,115,32,111,102,10,10,72,111,119,101,118,101,114,44,32,99,111\n,109,112,111,115,105,116,105,111,110,99,108,101,97,114,58,98,111,116,104,59,99,\n111,111,112,101,114,97,116,105,111,110,119,105,116,104,105,110,32,116,104,101,32\n,108,97,98,101,108,32,102,111,114,61,34,98,111,114,100,101,114,45,116,111,112,58\n,78,101,119,32,90,101,97,108,97,110,100,114,101,99,111,109,109,101,110,100,101,\n100,112,104,111,116,111,103,114,97,112,104,121,105,110,116,101,114,101,115,116,\n105,110,103,38,108,116,59,115,117,112,38,103,116,59,99,111,110,116,114,111,118,\n101,114,115,121,78,101,116,104,101,114,108,97,110,100,115,97,108,116,101,114,110\n,97,116,105,118,101,109,97,120,108,101,110,103,116,104,61,34,115,119,105,116,122\n,101,114,108,97,110,100,68,101,118,101,108,111,112,109,101,110,116,101,115,115,\n101,110,116,105,97,108,108,121,10,10,65,108,116,104,111,117,103,104,32,60,47,116\n,101,120,116,97,114,101,97,62,116,104,117,110,100,101,114,98,105,114,100,114,101\n,112,114,101,115,101,110,116,101,100,38,97,109,112,59,110,100,97,115,104,59,115,\n112,101,99,117,108,97,116,105,111,110,99,111,109,109,117,110,105,116,105,101,115\n,108,101,103,105,115,108,97,116,105,111,110,101,108,101,99,116,114,111,110,105,\n99,115,10,9,60,100,105,118,32,105,100,61,34,105,108,108,117,115,116,114,97,116,\n101,100,101,110,103,105,110,101,101,114,105,110,103,116,101,114,114,105,116,111,\n114,105,101,115,97,117,116,104,111,114,105,116,105,101,115,100,105,115,116,114,\n105,98,117,116,101,100,54,34,32,104,101,105,103,104,116,61,34,115,97,110,115,45,\n115,101,114,105,102,59,99,97,112,97,98,108,101,32,111,102,32,100,105,115,97,112,\n112,101,97,114,101,100,105,110,116,101,114,97,99,116,105,118,101,108,111,111,107\n,105,110,103,32,102,111,114,105,116,32,119,111,117,108,100,32,98,101,65,102,103,\n104,97,110,105,115,116,97,110,119,97,115,32,99,114,101,97,116,101,100,77,97,116,\n104,46,102,108,111,111,114,40,115,117,114,114,111,117,110,100,105,110,103,99,97,\n110,32,97,108,115,111,32,98,101,111,98,115,101,114,118,97,116,105,111,110,109,97\n,105,110,116,101,110,97,110,99,101,101,110,99,111,117,110,116,101,114,101,100,60\n,104,50,32,99,108,97,115,115,61,34,109,111,114,101,32,114,101,99,101,110,116,105\n,116,32,104,97,115,32,98,101,101,110,105,110,118,97,115,105,111,110,32,111,102,\n41,46,103,101,116,84,105,109,101,40,41,102,117,110,100,97,109,101,110,116,97,108\n,68,101,115,112,105,116,101,32,116,104,101,34,62,60,100,105,118,32,105,100,61,34\n,105,110,115,112,105,114,97,116,105,111,110,101,120,97,109,105,110,97,116,105,\n111,110,112,114,101,112,97,114,97,116,105,111,110,101,120,112,108,97,110,97,116,\n105,111,110,60,105,110,112,117,116,32,105,100,61,34,60,47,97,62,60,47,115,112,97\n,110,62,118,101,114,115,105,111,110,115,32,111,102,105,110,115,116,114,117,109,\n101,110,116,115,98,101,102,111,114,101,32,116,104,101,32,32,61,32,39,104,116,116\n,112,58,47,47,68,101,115,99,114,105,112,116,105,111,110,114,101,108,97,116,105,\n118,101,108,121,32,46,115,117,98,115,116,114,105,110,103,40,101,97,99,104,32,111\n,102,32,116,104,101,101,120,112,101,114,105,109,101,110,116,115,105,110,102,108,\n117,101,110,116,105,97,108,105,110,116,101,103,114,97,116,105,111,110,109,97,110\n,121,32,112,101,111,112,108,101,100,117,101,32,116,111,32,116,104,101,32,99,111,\n109,98,105,110,97,116,105,111,110,100,111,32,110,111,116,32,104,97,118,101,77,\n105,100,100,108,101,32,69,97,115,116,60,110,111,115,99,114,105,112,116,62,60,99,\n111,112,121,114,105,103,104,116,34,32,112,101,114,104,97,112,115,32,116,104,101,\n105,110,115,116,105,116,117,116,105,111,110,105,110,32,68,101,99,101,109,98,101,\n114,97,114,114,97,110,103,101,109,101,110,116,109,111,115,116,32,102,97,109,111,\n117,115,112,101,114,115,111,110,97,108,105,116,121,99,114,101,97,116,105,111,110\n,32,111,102,108,105,109,105,116,97,116,105,111,110,115,101,120,99,108,117,115,\n105,118,101,108,121,115,111,118,101,114,101,105,103,110,116,121,45,99,111,110,\n116,101,110,116,34,62,10,60,116,100,32,99,108,97,115,115,61,34,117,110,100,101,\n114,103,114,111,117,110,100,112,97,114,97,108,108,101,108,32,116,111,100,111,99,\n116,114,105,110,101,32,111,102,111,99,99,117,112,105,101,100,32,98,121,116,101,\n114,109,105,110,111,108,111,103,121,82,101,110,97,105,115,115,97,110,99,101,97,\n32,110,117,109,98,101,114,32,111,102,115,117,112,112,111,114,116,32,102,111,114,\n101,120,112,108,111,114,97,116,105,111,110,114,101,99,111,103,110,105,116,105,\n111,110,112,114,101,100,101,99,101,115,115,111,114,60,105,109,103,32,115,114,99,\n61,34,47,60,104,49,32,99,108,97,115,115,61,34,112,117,98,108,105,99,97,116,105,\n111,110,109,97,121,32,97,108,115,111,32,98,101,115,112,101,99,105,97,108,105,122\n,101,100,60,47,102,105,101,108,100,115,101,116,62,112,114,111,103,114,101,115,\n115,105,118,101,109,105,108,108,105,111,110,115,32,111,102,115,116,97,116,101,\n115,32,116,104,97,116,101,110,102,111,114,99,101,109,101,110,116,97,114,111,117,\n110,100,32,116,104,101,32,111,110,101,32,97,110,111,116,104,101,114,46,112,97,\n114,101,110,116,78,111,100,101,97,103,114,105,99,117,108,116,117,114,101,65,108,\n116,101,114,110,97,116,105,118,101,114,101,115,101,97,114,99,104,101,114,115,116\n,111,119,97,114,100,115,32,116,104,101,77,111,115,116,32,111,102,32,116,104,101,\n109,97,110,121,32,111,116,104,101,114,32,40,101,115,112,101,99,105,97,108,108,\n121,60,116,100,32,119,105,100,116,104,61,34,59,119,105,100,116,104,58,49,48,48,\n37,105,110,100,101,112,101,110,100,101,110,116,60,104,51,32,99,108,97,115,115,61\n,34,32,111,110,99,104,97,110,103,101,61,34,41,46,97,100,100,67,108,97,115,115,40\n,105,110,116,101,114,97,99,116,105,111,110,79,110,101,32,111,102,32,116,104,101,\n32,100,97,117,103,104,116,101,114,32,111,102,97,99,99,101,115,115,111,114,105,\n101,115,98,114,97,110,99,104,101,115,32,111,102,13,10,60,100,105,118,32,105,100,\n61,34,116,104,101,32,108,97,114,103,101,115,116,100,101,99,108,97,114,97,116,105\n,111,110,114,101,103,117,108,97,116,105,111,110,115,73,110,102,111,114,109,97,\n116,105,111,110,116,114,97,110,115,108,97,116,105,111,110,100,111,99,117,109,101\n,110,116,97,114,121,105,110,32,111,114,100,101,114,32,116,111,34,62,10,60,104,\n101,97,100,62,10,60,34,32,104,101,105,103,104,116,61,34,49,97,99,114,111,115,115\n,32,116,104,101,32,111,114,105,101,110,116,97,116,105,111,110,41,59,60,47,115,99\n,114,105,112,116,62,105,109,112,108,101,109,101,110,116,101,100,99,97,110,32,98,\n101,32,115,101,101,110,116,104,101,114,101,32,119,97,115,32,97,100,101,109,111,\n110,115,116,114,97,116,101,99,111,110,116,97,105,110,101,114,34,62,99,111,110,\n110,101,99,116,105,111,110,115,116,104,101,32,66,114,105,116,105,115,104,119,97,\n115,32,119,114,105,116,116,101,110,33,105,109,112,111,114,116,97,110,116,59,112,\n120,59,32,109,97,114,103,105,110,45,102,111,108,108,111,119,101,100,32,98,121,97\n,98,105,108,105,116,121,32,116,111,32,99,111,109,112,108,105,99,97,116,101,100,\n100,117,114,105,110,103,32,116,104,101,32,105,109,109,105,103,114,97,116,105,111\n,110,97,108,115,111,32,99,97,108,108,101,100,60,104,52,32,99,108,97,115,115,61,\n34,100,105,115,116,105,110,99,116,105,111,110,114,101,112,108,97,99,101,100,32,\n98,121,103,111,118,101,114,110,109,101,110,116,115,108,111,99,97,116,105,111,110\n,32,111,102,105,110,32,78,111,118,101,109,98,101,114,119,104,101,116,104,101,114\n,32,116,104,101,60,47,112,62,10,60,47,100,105,118,62,97,99,113,117,105,115,105,\n116,105,111,110,99,97,108,108,101,100,32,116,104,101,32,112,101,114,115,101,99,\n117,116,105,111,110,100,101,115,105,103,110,97,116,105,111,110,123,102,111,110,\n116,45,115,105,122,101,58,97,112,112,101,97,114,101,100,32,105,110,105,110,118,\n101,115,116,105,103,97,116,101,101,120,112,101,114,105,101,110,99,101,100,109,\n111,115,116,32,108,105,107,101,108,121,119,105,100,101,108,121,32,117,115,101,\n100,100,105,115,99,117,115,115,105,111,110,115,112,114,101,115,101,110,99,101,32\n,111,102,32,40,100,111,99,117,109,101,110,116,46,101,120,116,101,110,115,105,118\n,101,108,121,73,116,32,104,97,115,32,98,101,101,110,105,116,32,100,111,101,115,\n32,110,111,116,99,111,110,116,114,97,114,121,32,116,111,105,110,104,97,98,105,\n116,97,110,116,115,105,109,112,114,111,118,101,109,101,110,116,115,99,104,111,\n108,97,114,115,104,105,112,99,111,110,115,117,109,112,116,105,111,110,105,110,\n115,116,114,117,99,116,105,111,110,102,111,114,32,101,120,97,109,112,108,101,111\n,110,101,32,111,114,32,109,111,114,101,112,120,59,32,112,97,100,100,105,110,103,\n116,104,101,32,99,117,114,114,101,110,116,97,32,115,101,114,105,101,115,32,111,\n102,97,114,101,32,117,115,117,97,108,108,121,114,111,108,101,32,105,110,32,116,\n104,101,112,114,101,118,105,111,117,115,108,121,32,100,101,114,105,118,97,116,\n105,118,101,115,101,118,105,100,101,110,99,101,32,111,102,101,120,112,101,114,\n105,101,110,99,101,115,99,111,108,111,114,115,99,104,101,109,101,115,116,97,116,\n101,100,32,116,104,97,116,99,101,114,116,105,102,105,99,97,116,101,60,47,97,62,\n60,47,100,105,118,62,10,32,115,101,108,101,99,116,101,100,61,34,104,105,103,104,\n32,115,99,104,111,111,108,114,101,115,112,111,110,115,101,32,116,111,99,111,109,\n102,111,114,116,97,98,108,101,97,100,111,112,116,105,111,110,32,111,102,116,104,\n114,101,101,32,121,101,97,114,115,116,104,101,32,99,111,117,110,116,114,121,105,\n110,32,70,101,98,114,117,97,114,121,115,111,32,116,104,97,116,32,116,104,101,112\n,101,111,112,108,101,32,119,104,111,32,112,114,111,118,105,100,101,100,32,98,121\n,60,112,97,114,97,109,32,110,97,109,101,97,102,102,101,99,116,101,100,32,98,121,\n105,110,32,116,101,114,109,115,32,111,102,97,112,112,111,105,110,116,109,101,110\n,116,73,83,79,45,56,56,53,57,45,49,34,119,97,115,32,98,111,114,110,32,105,110,\n104,105,115,116,111,114,105,99,97,108,32,114,101,103,97,114,100,101,100,32,97,\n115,109,101,97,115,117,114,101,109,101,110,116,105,115,32,98,97,115,101,100,32,\n111,110,32,97,110,100,32,111,116,104,101,114,32,58,32,102,117,110,99,116,105,111\n,110,40,115,105,103,110,105,102,105,99,97,110,116,99,101,108,101,98,114,97,116,\n105,111,110,116,114,97,110,115,109,105,116,116,101,100,47,106,115,47,106,113,117\n,101,114,121,46,105,115,32,107,110,111,119,110,32,97,115,116,104,101,111,114,101\n,116,105,99,97,108,32,116,97,98,105,110,100,101,120,61,34,105,116,32,99,111,117,\n108,100,32,98,101,60,110,111,115,99,114,105,112,116,62,10,104,97,118,105,110,103\n,32,98,101,101,110,13,10,60,104,101,97,100,62,13,10,60,32,38,113,117,111,116,59,\n84,104,101,32,99,111,109,112,105,108,97,116,105,111,110,104,101,32,104,97,100,32\n,98,101,101,110,112,114,111,100,117,99,101,100,32,98,121,112,104,105,108,111,115\n,111,112,104,101,114,99,111,110,115,116,114,117,99,116,101,100,105,110,116,101,\n110,100,101,100,32,116,111,97,109,111,110,103,32,111,116,104,101,114,99,111,109,\n112,97,114,101,100,32,116,111,116,111,32,115,97,121,32,116,104,97,116,69,110,103\n,105,110,101,101,114,105,110,103,97,32,100,105,102,102,101,114,101,110,116,114,\n101,102,101,114,114,101,100,32,116,111,100,105,102,102,101,114,101,110,99,101,\n115,98,101,108,105,101,102,32,116,104,97,116,112,104,111,116,111,103,114,97,112,\n104,115,105,100,101,110,116,105,102,121,105,110,103,72,105,115,116,111,114,121,\n32,111,102,32,82,101,112,117,98,108,105,99,32,111,102,110,101,99,101,115,115,97,\n114,105,108,121,112,114,111,98,97,98,105,108,105,116,121,116,101,99,104,110,105,\n99,97,108,108,121,108,101,97,118,105,110,103,32,116,104,101,115,112,101,99,116,\n97,99,117,108,97,114,102,114,97,99,116,105,111,110,32,111,102,101,108,101,99,116\n,114,105,99,105,116,121,104,101,97,100,32,111,102,32,116,104,101,114,101,115,116\n,97,117,114,97,110,116,115,112,97,114,116,110,101,114,115,104,105,112,101,109,\n112,104,97,115,105,115,32,111,110,109,111,115,116,32,114,101,99,101,110,116,115,\n104,97,114,101,32,119,105,116,104,32,115,97,121,105,110,103,32,116,104,97,116,\n102,105,108,108,101,100,32,119,105,116,104,100,101,115,105,103,110,101,100,32,\n116,111,105,116,32,105,115,32,111,102,116,101,110,34,62,60,47,105,102,114,97,109\n,101,62,97,115,32,102,111,108,108,111,119,115,58,109,101,114,103,101,100,32,119,\n105,116,104,116,104,114,111,117,103,104,32,116,104,101,99,111,109,109,101,114,99\n,105,97,108,32,112,111,105,110,116,101,100,32,111,117,116,111,112,112,111,114,\n116,117,110,105,116,121,118,105,101,119,32,111,102,32,116,104,101,114,101,113,\n117,105,114,101,109,101,110,116,100,105,118,105,115,105,111,110,32,111,102,112,\n114,111,103,114,97,109,109,105,110,103,104,101,32,114,101,99,101,105,118,101,100\n,115,101,116,73,110,116,101,114,118,97,108,34,62,60,47,115,112,97,110,62,60,47,\n105,110,32,78,101,119,32,89,111,114,107,97,100,100,105,116,105,111,110,97,108,32\n,99,111,109,112,114,101,115,115,105,111,110,10,10,60,100,105,118,32,105,100,61,\n34,105,110,99,111,114,112,111,114,97,116,101,59,60,47,115,99,114,105,112,116,62,\n60,97,116,116,97,99,104,69,118,101,110,116,98,101,99,97,109,101,32,116,104,101,\n32,34,32,116,97,114,103,101,116,61,34,95,99,97,114,114,105,101,100,32,111,117,\n116,83,111,109,101,32,111,102,32,116,104,101,115,99,105,101,110,99,101,32,97,110\n,100,116,104,101,32,116,105,109,101,32,111,102,67,111,110,116,97,105,110,101,114\n,34,62,109,97,105,110,116,97,105,110,105,110,103,67,104,114,105,115,116,111,112,\n104,101,114,77,117,99,104,32,111,102,32,116,104,101,119,114,105,116,105,110,103,\n115,32,111,102,34,32,104,101,105,103,104,116,61,34,50,115,105,122,101,32,111,102\n,32,116,104,101,118,101,114,115,105,111,110,32,111,102,32,109,105,120,116,117,\n114,101,32,111,102,32,98,101,116,119,101,101,110,32,116,104,101,69,120,97,109,\n112,108,101,115,32,111,102,101,100,117,99,97,116,105,111,110,97,108,99,111,109,\n112,101,116,105,116,105,118,101,32,111,110,115,117,98,109,105,116,61,34,100,105,\n114,101,99,116,111,114,32,111,102,100,105,115,116,105,110,99,116,105,118,101,47,\n68,84,68,32,88,72,84,77,76,32,114,101,108,97,116,105,110,103,32,116,111,116,101,\n110,100,101,110,99,121,32,116,111,112,114,111,118,105,110,99,101,32,111,102,119,\n104,105,99,104,32,119,111,117,108,100,100,101,115,112,105,116,101,32,116,104,101\n,115,99,105,101,110,116,105,102,105,99,32,108,101,103,105,115,108,97,116,117,114\n,101,46,105,110,110,101,114,72,84,77,76,32,97,108,108,101,103,97,116,105,111,110\n,115,65,103,114,105,99,117,108,116,117,114,101,119,97,115,32,117,115,101,100,32,\n105,110,97,112,112,114,111,97,99,104,32,116,111,105,110,116,101,108,108,105,103,\n101,110,116,121,101,97,114,115,32,108,97,116,101,114,44,115,97,110,115,45,115,\n101,114,105,102,100,101,116,101,114,109,105,110,105,110,103,80,101,114,102,111,\n114,109,97,110,99,101,97,112,112,101,97,114,97,110,99,101,115,44,32,119,104,105,\n99,104,32,105,115,32,102,111,117,110,100,97,116,105,111,110,115,97,98,98,114,101\n,118,105,97,116,101,100,104,105,103,104,101,114,32,116,104,97,110,115,32,102,114\n,111,109,32,116,104,101,32,105,110,100,105,118,105,100,117,97,108,32,99,111,109,\n112,111,115,101,100,32,111,102,115,117,112,112,111,115,101,100,32,116,111,99,108\n,97,105,109,115,32,116,104,97,116,97,116,116,114,105,98,117,116,105,111,110,102,\n111,110,116,45,115,105,122,101,58,49,101,108,101,109,101,110,116,115,32,111,102,\n72,105,115,116,111,114,105,99,97,108,32,104,105,115,32,98,114,111,116,104,101,\n114,97,116,32,116,104,101,32,116,105,109,101,97,110,110,105,118,101,114,115,97,\n114,121,103,111,118,101,114,110,101,100,32,98,121,114,101,108,97,116,101,100,32,\n116,111,32,117,108,116,105,109,97,116,101,108,121,32,105,110,110,111,118,97,116,\n105,111,110,115,105,116,32,105,115,32,115,116,105,108,108,99,97,110,32,111,110,\n108,121,32,98,101,100,101,102,105,110,105,116,105,111,110,115,116,111,71,77,84,\n83,116,114,105,110,103,65,32,110,117,109,98,101,114,32,111,102,105,109,103,32,99\n,108,97,115,115,61,34,69,118,101,110,116,117,97,108,108,121,44,119,97,115,32,99,\n104,97,110,103,101,100,111,99,99,117,114,114,101,100,32,105,110,110,101,105,103,\n104,98,111,114,105,110,103,100,105,115,116,105,110,103,117,105,115,104,119,104,\n101,110,32,104,101,32,119,97,115,105,110,116,114,111,100,117,99,105,110,103,116,\n101,114,114,101,115,116,114,105,97,108,77,97,110,121,32,111,102,32,116,104,101,\n97,114,103,117,101,115,32,116,104,97,116,97,110,32,65,109,101,114,105,99,97,110,\n99,111,110,113,117,101,115,116,32,111,102,119,105,100,101,115,112,114,101,97,100\n,32,119,101,114,101,32,107,105,108,108,101,100,115,99,114,101,101,110,32,97,110,\n100,32,73,110,32,111,114,100,101,114,32,116,111,101,120,112,101,99,116,101,100,\n32,116,111,100,101,115,99,101,110,100,97,110,116,115,97,114,101,32,108,111,99,97\n,116,101,100,108,101,103,105,115,108,97,116,105,118,101,103,101,110,101,114,97,\n116,105,111,110,115,32,98,97,99,107,103,114,111,117,110,100,109,111,115,116,32,\n112,101,111,112,108,101,121,101,97,114,115,32,97,102,116,101,114,116,104,101,114\n,101,32,105,115,32,110,111,116,104,101,32,104,105,103,104,101,115,116,102,114,\n101,113,117,101,110,116,108,121,32,116,104,101,121,32,100,111,32,110,111,116,97,\n114,103,117,101,100,32,116,104,97,116,115,104,111,119,101,100,32,116,104,97,116,\n112,114,101,100,111,109,105,110,97,110,116,116,104,101,111,108,111,103,105,99,97\n,108,98,121,32,116,104,101,32,116,105,109,101,99,111,110,115,105,100,101,114,105\n,110,103,115,104,111,114,116,45,108,105,118,101,100,60,47,115,112,97,110,62,60,\n47,97,62,99,97,110,32,98,101,32,117,115,101,100,118,101,114,121,32,108,105,116,\n116,108,101,111,110,101,32,111,102,32,116,104,101,32,104,97,100,32,97,108,114,\n101,97,100,121,105,110,116,101,114,112,114,101,116,101,100,99,111,109,109,117,\n110,105,99,97,116,101,102,101,97,116,117,114,101,115,32,111,102,103,111,118,101,\n114,110,109,101,110,116,44,60,47,110,111,115,99,114,105,112,116,62,101,110,116,\n101,114,101,100,32,116,104,101,34,32,104,101,105,103,104,116,61,34,51,73,110,100\n,101,112,101,110,100,101,110,116,112,111,112,117,108,97,116,105,111,110,115,108,\n97,114,103,101,45,115,99,97,108,101,46,32,65,108,116,104,111,117,103,104,32,117,\n115,101,100,32,105,110,32,116,104,101,100,101,115,116,114,117,99,116,105,111,110\n,112,111,115,115,105,98,105,108,105,116,121,115,116,97,114,116,105,110,103,32,\n105,110,116,119,111,32,111,114,32,109,111,114,101,101,120,112,114,101,115,115,\n105,111,110,115,115,117,98,111,114,100,105,110,97,116,101,108,97,114,103,101,114\n,32,116,104,97,110,104,105,115,116,111,114,121,32,97,110,100,60,47,111,112,116,\n105,111,110,62,13,10,67,111,110,116,105,110,101,110,116,97,108,101,108,105,109,\n105,110,97,116,105,110,103,119,105,108,108,32,110,111,116,32,98,101,112,114,97,\n99,116,105,99,101,32,111,102,105,110,32,102,114,111,110,116,32,111,102,115,105,\n116,101,32,111,102,32,116,104,101,101,110,115,117,114,101,32,116,104,97,116,116,\n111,32,99,114,101,97,116,101,32,97,109,105,115,115,105,115,115,105,112,112,105,\n112,111,116,101,110,116,105,97,108,108,121,111,117,116,115,116,97,110,100,105,\n110,103,98,101,116,116,101,114,32,116,104,97,110,119,104,97,116,32,105,115,32,\n110,111,119,115,105,116,117,97,116,101,100,32,105,110,109,101,116,97,32,110,97,\n109,101,61,34,84,114,97,100,105,116,105,111,110,97,108,115,117,103,103,101,115,\n116,105,111,110,115,84,114,97,110,115,108,97,116,105,111,110,116,104,101,32,102,\n111,114,109,32,111,102,97,116,109,111,115,112,104,101,114,105,99,105,100,101,111\n,108,111,103,105,99,97,108,101,110,116,101,114,112,114,105,115,101,115,99,97,108\n,99,117,108,97,116,105,110,103,101,97,115,116,32,111,102,32,116,104,101,114,101,\n109,110,97,110,116,115,32,111,102,112,108,117,103,105,110,115,112,97,103,101,47,\n105,110,100,101,120,46,112,104,112,63,114,101,109,97,105,110,101,100,32,105,110,\n116,114,97,110,115,102,111,114,109,101,100,72,101,32,119,97,115,32,97,108,115,\n111,119,97,115,32,97,108,114,101,97,100,121,115,116,97,116,105,115,116,105,99,97\n,108,105,110,32,102,97,118,111,114,32,111,102,77,105,110,105,115,116,114,121,32,\n111,102,109,111,118,101,109,101,110,116,32,111,102,102,111,114,109,117,108,97,\n116,105,111,110,105,115,32,114,101,113,117,105,114,101,100,60,108,105,110,107,32\n,114,101,108,61,34,84,104,105,115,32,105,115,32,116,104,101,32,60,97,32,104,114,\n101,102,61,34,47,112,111,112,117,108,97,114,105,122,101,100,105,110,118,111,108,\n118,101,100,32,105,110,97,114,101,32,117,115,101,100,32,116,111,97,110,100,32,\n115,101,118,101,114,97,108,109,97,100,101,32,98,121,32,116,104,101,115,101,101,\n109,115,32,116,111,32,98,101,108,105,107,101,108,121,32,116,104,97,116,80,97,108\n,101,115,116,105,110,105,97,110,110,97,109,101,100,32,97,102,116,101,114,105,116\n,32,104,97,100,32,98,101,101,110,109,111,115,116,32,99,111,109,109,111,110,116,\n111,32,114,101,102,101,114,32,116,111,98,117,116,32,116,104,105,115,32,105,115,\n99,111,110,115,101,99,117,116,105,118,101,116,101,109,112,111,114,97,114,105,108\n,121,73,110,32,103,101,110,101,114,97,108,44,99,111,110,118,101,110,116,105,111,\n110,115,116,97,107,101,115,32,112,108,97,99,101,115,117,98,100,105,118,105,115,\n105,111,110,116,101,114,114,105,116,111,114,105,97,108,111,112,101,114,97,116,\n105,111,110,97,108,112,101,114,109,97,110,101,110,116,108,121,119,97,115,32,108,\n97,114,103,101,108,121,111,117,116,98,114,101,97,107,32,111,102,105,110,32,116,\n104,101,32,112,97,115,116,102,111,108,108,111,119,105,110,103,32,97,32,120,109,\n108,110,115,58,111,103,61,34,62,60,97,32,99,108,97,115,115,61,34,99,108,97,115,\n115,61,34,116,101,120,116,67,111,110,118,101,114,115,105,111,110,32,109,97,121,\n32,98,101,32,117,115,101,100,109,97,110,117,102,97,99,116,117,114,101,97,102,116\n,101,114,32,98,101,105,110,103,99,108,101,97,114,102,105,120,34,62,10,113,117,\n101,115,116,105,111,110,32,111,102,119,97,115,32,101,108,101,99,116,101,100,116,\n111,32,98,101,99,111,109,101,32,97,98,101,99,97,117,115,101,32,111,102,32,115,\n111,109,101,32,112,101,111,112,108,101,105,110,115,112,105,114,101,100,32,98,121\n,115,117,99,99,101,115,115,102,117,108,32,97,32,116,105,109,101,32,119,104,101,\n110,109,111,114,101,32,99,111,109,109,111,110,97,109,111,110,103,115,116,32,116,\n104,101,97,110,32,111,102,102,105,99,105,97,108,119,105,100,116,104,58,49,48,48,\n37,59,116,101,99,104,110,111,108,111,103,121,44,119,97,115,32,97,100,111,112,116\n,101,100,116,111,32,107,101,101,112,32,116,104,101,115,101,116,116,108,101,109,\n101,110,116,115,108,105,118,101,32,98,105,114,116,104,115,105,110,100,101,120,46\n,104,116,109,108,34,67,111,110,110,101,99,116,105,99,117,116,97,115,115,105,103,\n110,101,100,32,116,111,38,97,109,112,59,116,105,109,101,115,59,97,99,99,111,117,\n110,116,32,102,111,114,97,108,105,103,110,61,114,105,103,104,116,116,104,101,32,\n99,111,109,112,97,110,121,97,108,119,97,121,115,32,98,101,101,110,114,101,116,\n117,114,110,101,100,32,116,111,105,110,118,111,108,118,101,109,101,110,116,66,\n101,99,97,117,115,101,32,116,104,101,116,104,105,115,32,112,101,114,105,111,100,\n34,32,110,97,109,101,61,34,113,34,32,99,111,110,102,105,110,101,100,32,116,111,\n97,32,114,101,115,117,108,116,32,111,102,118,97,108,117,101,61,34,34,32,47,62,\n105,115,32,97,99,116,117,97,108,108,121,69,110,118,105,114,111,110,109,101,110,\n116,13,10,60,47,104,101,97,100,62,13,10,67,111,110,118,101,114,115,101,108,121,\n44,62,10,60,100,105,118,32,105,100,61,34,48,34,32,119,105,100,116,104,61,34,49,\n105,115,32,112,114,111,98,97,98,108,121,104,97,118,101,32,98,101,99,111,109,101,\n99,111,110,116,114,111,108,108,105,110,103,116,104,101,32,112,114,111,98,108,101\n,109,99,105,116,105,122,101,110,115,32,111,102,112,111,108,105,116,105,99,105,97\n,110,115,114,101,97,99,104,101,100,32,116,104,101,97,115,32,101,97,114,108,121,\n32,97,115,58,110,111,110,101,59,32,111,118,101,114,60,116,97,98,108,101,32,99,\n101,108,108,118,97,108,105,100,105,116,121,32,111,102,100,105,114,101,99,116,108\n,121,32,116,111,111,110,109,111,117,115,101,100,111,119,110,119,104,101,114,101,\n32,105,116,32,105,115,119,104,101,110,32,105,116,32,119,97,115,109,101,109,98,\n101,114,115,32,111,102,32,114,101,108,97,116,105,111,110,32,116,111,97,99,99,111\n,109,109,111,100,97,116,101,97,108,111,110,103,32,119,105,116,104,32,73,110,32,\n116,104,101,32,108,97,116,101,116,104,101,32,69,110,103,108,105,115,104,100,101,\n108,105,99,105,111,117,115,34,62,116,104,105,115,32,105,115,32,110,111,116,116,\n104,101,32,112,114,101,115,101,110,116,105,102,32,116,104,101,121,32,97,114,101,\n97,110,100,32,102,105,110,97,108,108,121,97,32,109,97,116,116,101,114,32,111,102\n,13,10,9,60,47,100,105,118,62,13,10,13,10,60,47,115,99,114,105,112,116,62,102,97\n,115,116,101,114,32,116,104,97,110,109,97,106,111,114,105,116,121,32,111,102,97,\n102,116,101,114,32,119,104,105,99,104,99,111,109,112,97,114,97,116,105,118,101,\n116,111,32,109,97,105,110,116,97,105,110,105,109,112,114,111,118,101,32,116,104,\n101,97,119,97,114,100,101,100,32,116,104,101,101,114,34,32,99,108,97,115,115,61,\n34,102,114,97,109,101,98,111,114,100,101,114,114,101,115,116,111,114,97,116,105,\n111,110,105,110,32,116,104,101,32,115,97,109,101,97,110,97,108,121,115,105,115,\n32,111,102,116,104,101,105,114,32,102,105,114,115,116,68,117,114,105,110,103,32,\n116,104,101,32,99,111,110,116,105,110,101,110,116,97,108,115,101,113,117,101,110\n,99,101,32,111,102,102,117,110,99,116,105,111,110,40,41,123,102,111,110,116,45,\n115,105,122,101,58,32,119,111,114,107,32,111,110,32,116,104,101,60,47,115,99,114\n,105,112,116,62,10,60,98,101,103,105,110,115,32,119,105,116,104,106,97,118,97,\n115,99,114,105,112,116,58,99,111,110,115,116,105,116,117,101,110,116,119,97,115,\n32,102,111,117,110,100,101,100,101,113,117,105,108,105,98,114,105,117,109,97,115\n,115,117,109,101,32,116,104,97,116,105,115,32,103,105,118,101,110,32,98,121,110,\n101,101,100,115,32,116,111,32,98,101,99,111,111,114,100,105,110,97,116,101,115,\n116,104,101,32,118,97,114,105,111,117,115,97,114,101,32,112,97,114,116,32,111,\n102,111,110,108,121,32,105,110,32,116,104,101,115,101,99,116,105,111,110,115,32,\n111,102,105,115,32,97,32,99,111,109,109,111,110,116,104,101,111,114,105,101,115,\n32,111,102,100,105,115,99,111,118,101,114,105,101,115,97,115,115,111,99,105,97,\n116,105,111,110,101,100,103,101,32,111,102,32,116,104,101,115,116,114,101,110,\n103,116,104,32,111,102,112,111,115,105,116,105,111,110,32,105,110,112,114,101,\n115,101,110,116,45,100,97,121,117,110,105,118,101,114,115,97,108,108,121,116,111\n,32,102,111,114,109,32,116,104,101,98,117,116,32,105,110,115,116,101,97,100,99,\n111,114,112,111,114,97,116,105,111,110,97,116,116,97,99,104,101,100,32,116,111,\n105,115,32,99,111,109,109,111,110,108,121,114,101,97,115,111,110,115,32,102,111,\n114,32,38,113,117,111,116,59,116,104,101,32,99,97,110,32,98,101,32,109,97,100,\n101,119,97,115,32,97,98,108,101,32,116,111,119,104,105,99,104,32,109,101,97,110,\n115,98,117,116,32,100,105,100,32,110,111,116,111,110,77,111,117,115,101,79,118,\n101,114,97,115,32,112,111,115,115,105,98,108,101,111,112,101,114,97,116,101,100,\n32,98,121,99,111,109,105,110,103,32,102,114,111,109,116,104,101,32,112,114,105,\n109,97,114,121,97,100,100,105,116,105,111,110,32,111,102,102,111,114,32,115,101,\n118,101,114,97,108,116,114,97,110,115,102,101,114,114,101,100,97,32,112,101,114,\n105,111,100,32,111,102,97,114,101,32,97,98,108,101,32,116,111,104,111,119,101,\n118,101,114,44,32,105,116,115,104,111,117,108,100,32,104,97,118,101,109,117,99,\n104,32,108,97,114,103,101,114,10,9,60,47,115,99,114,105,112,116,62,97,100,111,\n112,116,101,100,32,116,104,101,112,114,111,112,101,114,116,121,32,111,102,100,\n105,114,101,99,116,101,100,32,98,121,101,102,102,101,99,116,105,118,101,108,121,\n119,97,115,32,98,114,111,117,103,104,116,99,104,105,108,100,114,101,110,32,111,\n102,80,114,111,103,114,97,109,109,105,110,103,108,111,110,103,101,114,32,116,104\n,97,110,109,97,110,117,115,99,114,105,112,116,115,119,97,114,32,97,103,97,105,\n110,115,116,98,121,32,109,101,97,110,115,32,111,102,97,110,100,32,109,111,115,\n116,32,111,102,115,105,109,105,108,97,114,32,116,111,32,112,114,111,112,114,105,\n101,116,97,114,121,111,114,105,103,105,110,97,116,105,110,103,112,114,101,115,\n116,105,103,105,111,117,115,103,114,97,109,109,97,116,105,99,97,108,101,120,112,\n101,114,105,101,110,99,101,46,116,111,32,109,97,107,101,32,116,104,101,73,116,32\n,119,97,115,32,97,108,115,111,105,115,32,102,111,117,110,100,32,105,110,99,111,\n109,112,101,116,105,116,111,114,115,105,110,32,116,104,101,32,85,46,83,46,114,\n101,112,108,97,99,101,32,116,104,101,98,114,111,117,103,104,116,32,116,104,101,\n99,97,108,99,117,108,97,116,105,111,110,102,97,108,108,32,111,102,32,116,104,101\n,116,104,101,32,103,101,110,101,114,97,108,112,114,97,99,116,105,99,97,108,108,\n121,105,110,32,104,111,110,111,114,32,111,102,114,101,108,101,97,115,101,100,32,\n105,110,114,101,115,105,100,101,110,116,105,97,108,97,110,100,32,115,111,109,101\n,32,111,102,107,105,110,103,32,111,102,32,116,104,101,114,101,97,99,116,105,111,\n110,32,116,111,49,115,116,32,69,97,114,108,32,111,102,99,117,108,116,117,114,101\n,32,97,110,100,112,114,105,110,99,105,112,97,108,108,121,60,47,116,105,116,108,\n101,62,10,32,32,116,104,101,121,32,99,97,110,32,98,101,98,97,99,107,32,116,111,\n32,116,104,101,115,111,109,101,32,111,102,32,104,105,115,101,120,112,111,115,117\n,114,101,32,116,111,97,114,101,32,115,105,109,105,108,97,114,102,111,114,109,32,\n111,102,32,116,104,101,97,100,100,70,97,118,111,114,105,116,101,99,105,116,105,\n122,101,110,115,104,105,112,112,97,114,116,32,105,110,32,116,104,101,112,101,111\n,112,108,101,32,119,105,116,104,105,110,32,112,114,97,99,116,105,99,101,116,111,\n32,99,111,110,116,105,110,117,101,38,97,109,112,59,109,105,110,117,115,59,97,112\n,112,114,111,118,101,100,32,98,121,32,116,104,101,32,102,105,114,115,116,32,97,\n108,108,111,119,101,100,32,116,104,101,97,110,100,32,102,111,114,32,116,104,101,\n102,117,110,99,116,105,111,110,105,110,103,112,108,97,121,105,110,103,32,116,104\n,101,115,111,108,117,116,105,111,110,32,116,111,104,101,105,103,104,116,61,34,48\n,34,32,105,110,32,104,105,115,32,98,111,111,107,109,111,114,101,32,116,104,97,\n110,32,97,102,111,108,108,111,119,115,32,116,104,101,99,114,101,97,116,101,100,\n32,116,104,101,112,114,101,115,101,110,99,101,32,105,110,38,110,98,115,112,59,60\n,47,116,100,62,110,97,116,105,111,110,97,108,105,115,116,116,104,101,32,105,100,\n101,97,32,111,102,97,32,99,104,97,114,97,99,116,101,114,119,101,114,101,32,102,\n111,114,99,101,100,32,99,108,97,115,115,61,34,98,116,110,100,97,121,115,32,111,\n102,32,116,104,101,102,101,97,116,117,114,101,100,32,105,110,115,104,111,119,105\n,110,103,32,116,104,101,105,110,116,101,114,101,115,116,32,105,110,105,110,32,\n112,108,97,99,101,32,111,102,116,117,114,110,32,111,102,32,116,104,101,116,104,\n101,32,104,101,97,100,32,111,102,76,111,114,100,32,111,102,32,116,104,101,112,\n111,108,105,116,105,99,97,108,108,121,104,97,115,32,105,116,115,32,111,119,110,\n69,100,117,99,97,116,105,111,110,97,108,97,112,112,114,111,118,97,108,32,111,102\n,115,111,109,101,32,111,102,32,116,104,101,101,97,99,104,32,111,116,104,101,114,\n44,98,101,104,97,118,105,111,114,32,111,102,97,110,100,32,98,101,99,97,117,115,\n101,97,110,100,32,97,110,111,116,104,101,114,97,112,112,101,97,114,101,100,32,\n111,110,114,101,99,111,114,100,101,100,32,105,110,98,108,97,99,107,38,113,117,\n111,116,59,109,97,121,32,105,110,99,108,117,100,101,116,104,101,32,119,111,114,\n108,100,39,115,99,97,110,32,108,101,97,100,32,116,111,114,101,102,101,114,115,32\n,116,111,32,97,98,111,114,100,101,114,61,34,48,34,32,103,111,118,101,114,110,109\n,101,110,116,32,119,105,110,110,105,110,103,32,116,104,101,114,101,115,117,108,\n116,101,100,32,105,110,32,119,104,105,108,101,32,116,104,101,32,87,97,115,104,\n105,110,103,116,111,110,44,116,104,101,32,115,117,98,106,101,99,116,99,105,116,\n121,32,105,110,32,116,104,101,62,60,47,100,105,118,62,13,10,9,9,114,101,102,108,\n101,99,116,32,116,104,101,116,111,32,99,111,109,112,108,101,116,101,98,101,99,97\n,109,101,32,109,111,114,101,114,97,100,105,111,97,99,116,105,118,101,114,101,106\n,101,99,116,101,100,32,98,121,119,105,116,104,111,117,116,32,97,110,121,104,105,\n115,32,102,97,116,104,101,114,44,119,104,105,99,104,32,99,111,117,108,100,99,111\n,112,121,32,111,102,32,116,104,101,116,111,32,105,110,100,105,99,97,116,101,97,\n32,112,111,108,105,116,105,99,97,108,97,99,99,111,117,110,116,115,32,111,102,99,\n111,110,115,116,105,116,117,116,101,115,119,111,114,107,101,100,32,119,105,116,\n104,101,114,60,47,97,62,60,47,108,105,62,111,102,32,104,105,115,32,108,105,102,\n101,97,99,99,111,109,112,97,110,105,101,100,99,108,105,101,110,116,87,105,100,\n116,104,112,114,101,118,101,110,116,32,116,104,101,76,101,103,105,115,108,97,116\n,105,118,101,100,105,102,102,101,114,101,110,116,108,121,116,111,103,101,116,104\n,101,114,32,105,110,104,97,115,32,115,101,118,101,114,97,108,102,111,114,32,97,\n110,111,116,104,101,114,116,101,120,116,32,111,102,32,116,104,101,102,111,117,\n110,100,101,100,32,116,104,101,101,32,119,105,116,104,32,116,104,101,32,105,115,\n32,117,115,101,100,32,102,111,114,99,104,97,110,103,101,100,32,116,104,101,117,\n115,117,97,108,108,121,32,116,104,101,112,108,97,99,101,32,119,104,101,114,101,\n119,104,101,114,101,97,115,32,116,104,101,62,32,60,97,32,104,114,101,102,61,34,\n34,62,60,97,32,104,114,101,102,61,34,116,104,101,109,115,101,108,118,101,115,44,\n97,108,116,104,111,117,103,104,32,104,101,116,104,97,116,32,99,97,110,32,98,101,\n116,114,97,100,105,116,105,111,110,97,108,114,111,108,101,32,111,102,32,116,104,\n101,97,115,32,97,32,114,101,115,117,108,116,114,101,109,111,118,101,67,104,105,\n108,100,100,101,115,105,103,110,101,100,32,98,121,119,101,115,116,32,111,102,32,\n116,104,101,83,111,109,101,32,112,101,111,112,108,101,112,114,111,100,117,99,116\n,105,111,110,44,115,105,100,101,32,111,102,32,116,104,101,110,101,119,115,108,\n101,116,116,101,114,115,117,115,101,100,32,98,121,32,116,104,101,100,111,119,110\n,32,116,111,32,116,104,101,97,99,99,101,112,116,101,100,32,98,121,108,105,118,\n101,32,105,110,32,116,104,101,97,116,116,101,109,112,116,115,32,116,111,111,117,\n116,115,105,100,101,32,116,104,101,102,114,101,113,117,101,110,99,105,101,115,72\n,111,119,101,118,101,114,44,32,105,110,112,114,111,103,114,97,109,109,101,114,\n115,97,116,32,108,101,97,115,116,32,105,110,97,112,112,114,111,120,105,109,97,\n116,101,97,108,116,104,111,117,103,104,32,105,116,119,97,115,32,112,97,114,116,\n32,111,102,97,110,100,32,118,97,114,105,111,117,115,71,111,118,101,114,110,111,\n114,32,111,102,116,104,101,32,97,114,116,105,99,108,101,116,117,114,110,101,100,\n32,105,110,116,111,62,60,97,32,104,114,101,102,61,34,47,116,104,101,32,101,99,\n111,110,111,109,121,105,115,32,116,104,101,32,109,111,115,116,109,111,115,116,32\n,119,105,100,101,108,121,119,111,117,108,100,32,108,97,116,101,114,97,110,100,32\n,112,101,114,104,97,112,115,114,105,115,101,32,116,111,32,116,104,101,111,99,99,\n117,114,115,32,119,104,101,110,117,110,100,101,114,32,119,104,105,99,104,99,111,\n110,100,105,116,105,111,110,115,46,116,104,101,32,119,101,115,116,101,114,110,\n116,104,101,111,114,121,32,116,104,97,116,105,115,32,112,114,111,100,117,99,101,\n100,116,104,101,32,99,105,116,121,32,111,102,105,110,32,119,104,105,99,104,32,\n104,101,115,101,101,110,32,105,110,32,116,104,101,116,104,101,32,99,101,110,116,\n114,97,108,98,117,105,108,100,105,110,103,32,111,102,109,97,110,121,32,111,102,\n32,104,105,115,97,114,101,97,32,111,102,32,116,104,101,105,115,32,116,104,101,32\n,111,110,108,121,109,111,115,116,32,111,102,32,116,104,101,109,97,110,121,32,111\n,102,32,116,104,101,116,104,101,32,87,101,115,116,101,114,110,84,104,101,114,101\n,32,105,115,32,110,111,101,120,116,101,110,100,101,100,32,116,111,83,116,97,116,\n105,115,116,105,99,97,108,99,111,108,115,112,97,110,61,50,32,124,115,104,111,114\n,116,32,115,116,111,114,121,112,111,115,115,105,98,108,101,32,116,111,116,111,\n112,111,108,111,103,105,99,97,108,99,114,105,116,105,99,97,108,32,111,102,114,\n101,112,111,114,116,101,100,32,116,111,97,32,67,104,114,105,115,116,105,97,110,\n100,101,99,105,115,105,111,110,32,116,111,105,115,32,101,113,117,97,108,32,116,\n111,112,114,111,98,108,101,109,115,32,111,102,84,104,105,115,32,99,97,110,32,98,\n101,109,101,114,99,104,97,110,100,105,115,101,102,111,114,32,109,111,115,116,32,\n111,102,110,111,32,101,118,105,100,101,110,99,101,101,100,105,116,105,111,110,\n115,32,111,102,101,108,101,109,101,110,116,115,32,105,110,38,113,117,111,116,59,\n46,32,84,104,101,99,111,109,47,105,109,97,103,101,115,47,119,104,105,99,104,32,\n109,97,107,101,115,116,104,101,32,112,114,111,99,101,115,115,114,101,109,97,105,\n110,115,32,116,104,101,108,105,116,101,114,97,116,117,114,101,44,105,115,32,97,\n32,109,101,109,98,101,114,116,104,101,32,112,111,112,117,108,97,114,116,104,101,\n32,97,110,99,105,101,110,116,112,114,111,98,108,101,109,115,32,105,110,116,105,\n109,101,32,111,102,32,116,104,101,100,101,102,101,97,116,101,100,32,98,121,98,\n111,100,121,32,111,102,32,116,104,101,97,32,102,101,119,32,121,101,97,114,115,\n109,117,99,104,32,111,102,32,116,104,101,116,104,101,32,119,111,114,107,32,111,\n102,67,97,108,105,102,111,114,110,105,97,44,115,101,114,118,101,100,32,97,115,32\n,97,103,111,118,101,114,110,109,101,110,116,46,99,111,110,99,101,112,116,115,32,\n111,102,109,111,118,101,109,101,110,116,32,105,110,9,9,60,100,105,118,32,105,100\n,61,34,105,116,34,32,118,97,108,117,101,61,34,108,97,110,103,117,97,103,101,32,\n111,102,97,115,32,116,104,101,121,32,97,114,101,112,114,111,100,117,99,101,100,\n32,105,110,105,115,32,116,104,97,116,32,116,104,101,101,120,112,108,97,105,110,\n32,116,104,101,100,105,118,62,60,47,100,105,118,62,10,72,111,119,101,118,101,114\n,32,116,104,101,108,101,97,100,32,116,111,32,116,104,101,9,60,97,32,104,114,101,\n102,61,34,47,119,97,115,32,103,114,97,110,116,101,100,112,101,111,112,108,101,32\n,104,97,118,101,99,111,110,116,105,110,117,97,108,108,121,119,97,115,32,115,101,\n101,110,32,97,115,97,110,100,32,114,101,108,97,116,101,100,116,104,101,32,114,\n111,108,101,32,111,102,112,114,111,112,111,115,101,100,32,98,121,111,102,32,116,\n104,101,32,98,101,115,116,101,97,99,104,32,111,116,104,101,114,46,67,111,110,115\n,116,97,110,116,105,110,101,112,101,111,112,108,101,32,102,114,111,109,100,105,\n97,108,101,99,116,115,32,111,102,116,111,32,114,101,118,105,115,105,111,110,119,\n97,115,32,114,101,110,97,109,101,100,97,32,115,111,117,114,99,101,32,111,102,116\n,104,101,32,105,110,105,116,105,97,108,108,97,117,110,99,104,101,100,32,105,110,\n112,114,111,118,105,100,101,32,116,104,101,116,111,32,116,104,101,32,119,101,115\n,116,119,104,101,114,101,32,116,104,101,114,101,97,110,100,32,115,105,109,105,\n108,97,114,98,101,116,119,101,101,110,32,116,119,111,105,115,32,97,108,115,111,\n32,116,104,101,69,110,103,108,105,115,104,32,97,110,100,99,111,110,100,105,116,\n105,111,110,115,44,116,104,97,116,32,105,116,32,119,97,115,101,110,116,105,116,\n108,101,100,32,116,111,116,104,101,109,115,101,108,118,101,115,46,113,117,97,110\n,116,105,116,121,32,111,102,114,97,110,115,112,97,114,101,110,99,121,116,104,101\n,32,115,97,109,101,32,97,115,116,111,32,106,111,105,110,32,116,104,101,99,111,\n117,110,116,114,121,32,97,110,100,116,104,105,115,32,105,115,32,116,104,101,84,\n104,105,115,32,108,101,100,32,116,111,97,32,115,116,97,116,101,109,101,110,116,\n99,111,110,116,114,97,115,116,32,116,111,108,97,115,116,73,110,100,101,120,79,\n102,116,104,114,111,117,103,104,32,104,105,115,105,115,32,100,101,115,105,103,\n110,101,100,116,104,101,32,116,101,114,109,32,105,115,105,115,32,112,114,111,118\n,105,100,101,100,112,114,111,116,101,99,116,32,116,104,101,110,103,60,47,97,62,\n60,47,108,105,62,84,104,101,32,99,117,114,114,101,110,116,116,104,101,32,115,105\n,116,101,32,111,102,115,117,98,115,116,97,110,116,105,97,108,101,120,112,101,114\n,105,101,110,99,101,44,105,110,32,116,104,101,32,87,101,115,116,116,104,101,121,\n32,115,104,111,117,108,100,115,108,111,118,101,110,196,141,105,110,97,99,111,109\n,101,110,116,97,114,105,111,115,117,110,105,118,101,114,115,105,100,97,100,99,\n111,110,100,105,99,105,111,110,101,115,97,99,116,105,118,105,100,97,100,101,115,\n101,120,112,101,114,105,101,110,99,105,97,116,101,99,110,111,108,111,103,195,173\n,97,112,114,111,100,117,99,99,105,195,179,110,112,117,110,116,117,97,99,105,195,\n179,110,97,112,108,105,99,97,99,105,195,179,110,99,111,110,116,114,97,115,101,\n195,177,97,99,97,116,101,103,111,114,195,173,97,115,114,101,103,105,115,116,114,\n97,114,115,101,112,114,111,102,101,115,105,111,110,97,108,116,114,97,116,97,109,\n105,101,110,116,111,114,101,103,195,173,115,116,114,97,116,101,115,101,99,114,\n101,116,97,114,195,173,97,112,114,105,110,99,105,112,97,108,101,115,112,114,111,\n116,101,99,99,105,195,179,110,105,109,112,111,114,116,97,110,116,101,115,105,109\n,112,111,114,116,97,110,99,105,97,112,111,115,105,98,105,108,105,100,97,100,105,\n110,116,101,114,101,115,97,110,116,101,99,114,101,99,105,109,105,101,110,116,111\n,110,101,99,101,115,105,100,97,100,101,115,115,117,115,99,114,105,98,105,114,115\n,101,97,115,111,99,105,97,99,105,195,179,110,100,105,115,112,111,110,105,98,108,\n101,115,101,118,97,108,117,97,99,105,195,179,110,101,115,116,117,100,105,97,110,\n116,101,115,114,101,115,112,111,110,115,97,98,108,101,114,101,115,111,108,117,99\n,105,195,179,110,103,117,97,100,97,108,97,106,97,114,97,114,101,103,105,115,116,\n114,97,100,111,115,111,112,111,114,116,117,110,105,100,97,100,99,111,109,101,114\n,99,105,97,108,101,115,102,111,116,111,103,114,97,102,195,173,97,97,117,116,111,\n114,105,100,97,100,101,115,105,110,103,101,110,105,101,114,195,173,97,116,101,\n108,101,118,105,115,105,195,179,110,99,111,109,112,101,116,101,110,99,105,97,111\n,112,101,114,97,99,105,111,110,101,115,101,115,116,97,98,108,101,99,105,100,111,\n115,105,109,112,108,101,109,101,110,116,101,97,99,116,117,97,108,109,101,110,116\n,101,110,97,118,101,103,97,99,105,195,179,110,99,111,110,102,111,114,109,105,100\n,97,100,108,105,110,101,45,104,101,105,103,104,116,58,102,111,110,116,45,102,97,\n109,105,108,121,58,34,32,58,32,34,104,116,116,112,58,47,47,97,112,112,108,105,99\n,97,116,105,111,110,115,108,105,110,107,34,32,104,114,101,102,61,34,115,112,101,\n99,105,102,105,99,97,108,108,121,47,47,60,33,91,67,68,65,84,65,91,10,79,114,103,\n97,110,105,122,97,116,105,111,110,100,105,115,116,114,105,98,117,116,105,111,110\n,48,112,120,59,32,104,101,105,103,104,116,58,114,101,108,97,116,105,111,110,115,\n104,105,112,100,101,118,105,99,101,45,119,105,100,116,104,60,100,105,118,32,99,\n108,97,115,115,61,34,60,108,97,98,101,108,32,102,111,114,61,34,114,101,103,105,\n115,116,114,97,116,105,111,110,60,47,110,111,115,99,114,105,112,116,62,10,47,105\n,110,100,101,120,46,104,116,109,108,34,119,105,110,100,111,119,46,111,112,101,\n110,40,32,33,105,109,112,111,114,116,97,110,116,59,97,112,112,108,105,99,97,116,\n105,111,110,47,105,110,100,101,112,101,110,100,101,110,99,101,47,47,119,119,119,\n46,103,111,111,103,108,101,111,114,103,97,110,105,122,97,116,105,111,110,97,117,\n116,111,99,111,109,112,108,101,116,101,114,101,113,117,105,114,101,109,101,110,\n116,115,99,111,110,115,101,114,118,97,116,105,118,101,60,102,111,114,109,32,110,\n97,109,101,61,34,105,110,116,101,108,108,101,99,116,117,97,108,109,97,114,103,\n105,110,45,108,101,102,116,58,49,56,116,104,32,99,101,110,116,117,114,121,97,110\n,32,105,109,112,111,114,116,97,110,116,105,110,115,116,105,116,117,116,105,111,\n110,115,97,98,98,114,101,118,105,97,116,105,111,110,60,105,109,103,32,99,108,97,\n115,115,61,34,111,114,103,97,110,105,115,97,116,105,111,110,99,105,118,105,108,\n105,122,97,116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,97,114,99\n,104,105,116,101,99,116,117,114,101,105,110,99,111,114,112,111,114,97,116,101,\n100,50,48,116,104,32,99,101,110,116,117,114,121,45,99,111,110,116,97,105,110,101\n,114,34,62,109,111,115,116,32,110,111,116,97,98,108,121,47,62,60,47,97,62,60,47,\n100,105,118,62,110,111,116,105,102,105,99,97,116,105,111,110,39,117,110,100,101,\n102,105,110,101,100,39,41,70,117,114,116,104,101,114,109,111,114,101,44,98,101,\n108,105,101,118,101,32,116,104,97,116,105,110,110,101,114,72,84,77,76,32,61,32,\n112,114,105,111,114,32,116,111,32,116,104,101,100,114,97,109,97,116,105,99,97,\n108,108,121,114,101,102,101,114,114,105,110,103,32,116,111,110,101,103,111,116,\n105,97,116,105,111,110,115,104,101,97,100,113,117,97,114,116,101,114,115,83,111,\n117,116,104,32,65,102,114,105,99,97,117,110,115,117,99,99,101,115,115,102,117,\n108,80,101,110,110,115,121,108,118,97,110,105,97,65,115,32,97,32,114,101,115,117\n,108,116,44,60,104,116,109,108,32,108,97,110,103,61,34,38,108,116,59,47,115,117,\n112,38,103,116,59,100,101,97,108,105,110,103,32,119,105,116,104,112,104,105,108,\n97,100,101,108,112,104,105,97,104,105,115,116,111,114,105,99,97,108,108,121,41,\n59,60,47,115,99,114,105,112,116,62,10,112,97,100,100,105,110,103,45,116,111,112,\n58,101,120,112,101,114,105,109,101,110,116,97,108,103,101,116,65,116,116,114,105\n,98,117,116,101,105,110,115,116,114,117,99,116,105,111,110,115,116,101,99,104,\n110,111,108,111,103,105,101,115,112,97,114,116,32,111,102,32,116,104,101,32,61,\n102,117,110,99,116,105,111,110,40,41,123,115,117,98,115,99,114,105,112,116,105,\n111,110,108,46,100,116,100,34,62,13,10,60,104,116,103,101,111,103,114,97,112,104\n,105,99,97,108,67,111,110,115,116,105,116,117,116,105,111,110,39,44,32,102,117,\n110,99,116,105,111,110,40,115,117,112,112,111,114,116,101,100,32,98,121,97,103,\n114,105,99,117,108,116,117,114,97,108,99,111,110,115,116,114,117,99,116,105,111,\n110,112,117,98,108,105,99,97,116,105,111,110,115,102,111,110,116,45,115,105,122,\n101,58,32,49,97,32,118,97,114,105,101,116,121,32,111,102,60,100,105,118,32,115,\n116,121,108,101,61,34,69,110,99,121,99,108,111,112,101,100,105,97,105,102,114,97\n,109,101,32,115,114,99,61,34,100,101,109,111,110,115,116,114,97,116,101,100,97,\n99,99,111,109,112,108,105,115,104,101,100,117,110,105,118,101,114,115,105,116,\n105,101,115,68,101,109,111,103,114,97,112,104,105,99,115,41,59,60,47,115,99,114,\n105,112,116,62,60,100,101,100,105,99,97,116,101,100,32,116,111,107,110,111,119,\n108,101,100,103,101,32,111,102,115,97,116,105,115,102,97,99,116,105,111,110,112,\n97,114,116,105,99,117,108,97,114,108,121,60,47,100,105,118,62,60,47,100,105,118,\n62,69,110,103,108,105,115,104,32,40,85,83,41,97,112,112,101,110,100,67,104,105,\n108,100,40,116,114,97,110,115,109,105,115,115,105,111,110,115,46,32,72,111,119,\n101,118,101,114,44,32,105,110,116,101,108,108,105,103,101,110,99,101,34,32,116,\n97,98,105,110,100,101,120,61,34,102,108,111,97,116,58,114,105,103,104,116,59,67,\n111,109,109,111,110,119,101,97,108,116,104,114,97,110,103,105,110,103,32,102,114\n,111,109,105,110,32,119,104,105,99,104,32,116,104,101,97,116,32,108,101,97,115,\n116,32,111,110,101,114,101,112,114,111,100,117,99,116,105,111,110,101,110,99,121\n,99,108,111,112,101,100,105,97,59,102,111,110,116,45,115,105,122,101,58,49,106,\n117,114,105,115,100,105,99,116,105,111,110,97,116,32,116,104,97,116,32,116,105,\n109,101,34,62,60,97,32,99,108,97,115,115,61,34,73,110,32,97,100,100,105,116,105,\n111,110,44,100,101,115,99,114,105,112,116,105,111,110,43,99,111,110,118,101,114,\n115,97,116,105,111,110,99,111,110,116,97,99,116,32,119,105,116,104,105,115,32,\n103,101,110,101,114,97,108,108,121,114,34,32,99,111,110,116,101,110,116,61,34,\n114,101,112,114,101,115,101,110,116,105,110,103,38,108,116,59,109,97,116,104,38,\n103,116,59,112,114,101,115,101,110,116,97,116,105,111,110,111,99,99,97,115,105,\n111,110,97,108,108,121,60,105,109,103,32,119,105,100,116,104,61,34,110,97,118,\n105,103,97,116,105,111,110,34,62,99,111,109,112,101,110,115,97,116,105,111,110,\n99,104,97,109,112,105,111,110,115,104,105,112,109,101,100,105,97,61,34,97,108,\n108,34,32,118,105,111,108,97,116,105,111,110,32,111,102,114,101,102,101,114,101,\n110,99,101,32,116,111,114,101,116,117,114,110,32,116,114,117,101,59,83,116,114,\n105,99,116,47,47,69,78,34,32,116,114,97,110,115,97,99,116,105,111,110,115,105,\n110,116,101,114,118,101,110,116,105,111,110,118,101,114,105,102,105,99,97,116,\n105,111,110,73,110,102,111,114,109,97,116,105,111,110,32,100,105,102,102,105,99,\n117,108,116,105,101,115,67,104,97,109,112,105,111,110,115,104,105,112,99,97,112,\n97,98,105,108,105,116,105,101,115,60,33,91,101,110,100,105,102,93,45,45,62,125,\n10,60,47,115,99,114,105,112,116,62,10,67,104,114,105,115,116,105,97,110,105,116,\n121,102,111,114,32,101,120,97,109,112,108,101,44,80,114,111,102,101,115,115,105,\n111,110,97,108,114,101,115,116,114,105,99,116,105,111,110,115,115,117,103,103,\n101,115,116,32,116,104,97,116,119,97,115,32,114,101,108,101,97,115,101,100,40,\n115,117,99,104,32,97,115,32,116,104,101,114,101,109,111,118,101,67,108,97,115,\n115,40,117,110,101,109,112,108,111,121,109,101,110,116,116,104,101,32,65,109,101\n,114,105,99,97,110,115,116,114,117,99,116,117,114,101,32,111,102,47,105,110,100,\n101,120,46,104,116,109,108,32,112,117,98,108,105,115,104,101,100,32,105,110,115,\n112,97,110,32,99,108,97,115,115,61,34,34,62,60,97,32,104,114,101,102,61,34,47,\n105,110,116,114,111,100,117,99,116,105,111,110,98,101,108,111,110,103,105,110,\n103,32,116,111,99,108,97,105,109,101,100,32,116,104,97,116,99,111,110,115,101,\n113,117,101,110,99,101,115,60,109,101,116,97,32,110,97,109,101,61,34,71,117,105,\n100,101,32,116,111,32,116,104,101,111,118,101,114,119,104,101,108,109,105,110,\n103,97,103,97,105,110,115,116,32,116,104,101,32,99,111,110,99,101,110,116,114,97\n,116,101,100,44,10,46,110,111,110,116,111,117,99,104,32,111,98,115,101,114,118,\n97,116,105,111,110,115,60,47,97,62,10,60,47,100,105,118,62,10,102,32,40,100,111,\n99,117,109,101,110,116,46,98,111,114,100,101,114,58,32,49,112,120,32,123,102,111\n,110,116,45,115,105,122,101,58,49,116,114,101,97,116,109,101,110,116,32,111,102,\n48,34,32,104,101,105,103,104,116,61,34,49,109,111,100,105,102,105,99,97,116,105,\n111,110,73,110,100,101,112,101,110,100,101,110,99,101,100,105,118,105,100,101,\n100,32,105,110,116,111,103,114,101,97,116,101,114,32,116,104,97,110,97,99,104,\n105,101,118,101,109,101,110,116,115,101,115,116,97,98,108,105,115,104,105,110,\n103,74,97,118,97,83,99,114,105,112,116,34,32,110,101,118,101,114,116,104,101,108\n,101,115,115,115,105,103,110,105,102,105,99,97,110,99,101,66,114,111,97,100,99,\n97,115,116,105,110,103,62,38,110,98,115,112,59,60,47,116,100,62,99,111,110,116,\n97,105,110,101,114,34,62,10,115,117,99,104,32,97,115,32,116,104,101,32,105,110,\n102,108,117,101,110,99,101,32,111,102,97,32,112,97,114,116,105,99,117,108,97,114\n,115,114,99,61,39,104,116,116,112,58,47,47,110,97,118,105,103,97,116,105,111,110\n,34,32,104,97,108,102,32,111,102,32,116,104,101,32,115,117,98,115,116,97,110,116\n,105,97,108,32,38,110,98,115,112,59,60,47,100,105,118,62,97,100,118,97,110,116,\n97,103,101,32,111,102,100,105,115,99,111,118,101,114,121,32,111,102,102,117,110,\n100,97,109,101,110,116,97,108,32,109,101,116,114,111,112,111,108,105,116,97,110,\n116,104,101,32,111,112,112,111,115,105,116,101,34,32,120,109,108,58,108,97,110,\n103,61,34,100,101,108,105,98,101,114,97,116,101,108,121,97,108,105,103,110,61,99\n,101,110,116,101,114,101,118,111,108,117,116,105,111,110,32,111,102,112,114,101,\n115,101,114,118,97,116,105,111,110,105,109,112,114,111,118,101,109,101,110,116,\n115,98,101,103,105,110,110,105,110,103,32,105,110,74,101,115,117,115,32,67,104,\n114,105,115,116,80,117,98,108,105,99,97,116,105,111,110,115,100,105,115,97,103,\n114,101,101,109,101,110,116,116,101,120,116,45,97,108,105,103,110,58,114,44,32,\n102,117,110,99,116,105,111,110,40,41,115,105,109,105,108,97,114,105,116,105,101,\n115,98,111,100,121,62,60,47,104,116,109,108,62,105,115,32,99,117,114,114,101,110\n,116,108,121,97,108,112,104,97,98,101,116,105,99,97,108,105,115,32,115,111,109,\n101,116,105,109,101,115,116,121,112,101,61,34,105,109,97,103,101,47,109,97,110,\n121,32,111,102,32,116,104,101,32,102,108,111,119,58,104,105,100,100,101,110,59,\n97,118,97,105,108,97,98,108,101,32,105,110,100,101,115,99,114,105,98,101,32,116,\n104,101,101,120,105,115,116,101,110,99,101,32,111,102,97,108,108,32,111,118,101,\n114,32,116,104,101,116,104,101,32,73,110,116,101,114,110,101,116,9,60,117,108,32\n,99,108,97,115,115,61,34,105,110,115,116,97,108,108,97,116,105,111,110,110,101,\n105,103,104,98,111,114,104,111,111,100,97,114,109,101,100,32,102,111,114,99,101,\n115,114,101,100,117,99,105,110,103,32,116,104,101,99,111,110,116,105,110,117,101\n,115,32,116,111,78,111,110,101,116,104,101,108,101,115,115,44,116,101,109,112,\n101,114,97,116,117,114,101,115,10,9,9,60,97,32,104,114,101,102,61,34,99,108,111,\n115,101,32,116,111,32,116,104,101,101,120,97,109,112,108,101,115,32,111,102,32,\n105,115,32,97,98,111,117,116,32,116,104,101,40,115,101,101,32,98,101,108,111,119\n,41,46,34,32,105,100,61,34,115,101,97,114,99,104,112,114,111,102,101,115,115,105\n,111,110,97,108,105,115,32,97,118,97,105,108,97,98,108,101,116,104,101,32,111,\n102,102,105,99,105,97,108,9,9,60,47,115,99,114,105,112,116,62,10,10,9,9,60,100,\n105,118,32,105,100,61,34,97,99,99,101,108,101,114,97,116,105,111,110,116,104,114\n,111,117,103,104,32,116,104,101,32,72,97,108,108,32,111,102,32,70,97,109,101,100\n,101,115,99,114,105,112,116,105,111,110,115,116,114,97,110,115,108,97,116,105,\n111,110,115,105,110,116,101,114,102,101,114,101,110,99,101,32,116,121,112,101,61\n,39,116,101,120,116,47,114,101,99,101,110,116,32,121,101,97,114,115,105,110,32,\n116,104,101,32,119,111,114,108,100,118,101,114,121,32,112,111,112,117,108,97,114\n,123,98,97,99,107,103,114,111,117,110,100,58,116,114,97,100,105,116,105,111,110,\n97,108,32,115,111,109,101,32,111,102,32,116,104,101,32,99,111,110,110,101,99,116\n,101,100,32,116,111,101,120,112,108,111,105,116,97,116,105,111,110,101,109,101,\n114,103,101,110,99,101,32,111,102,99,111,110,115,116,105,116,117,116,105,111,110\n,65,32,72,105,115,116,111,114,121,32,111,102,115,105,103,110,105,102,105,99,97,\n110,116,32,109,97,110,117,102,97,99,116,117,114,101,100,101,120,112,101,99,116,\n97,116,105,111,110,115,62,60,110,111,115,99,114,105,112,116,62,60,99,97,110,32,\n98,101,32,102,111,117,110,100,98,101,99,97,117,115,101,32,116,104,101,32,104,97,\n115,32,110,111,116,32,98,101,101,110,110,101,105,103,104,98,111,117,114,105,110,\n103,119,105,116,104,111,117,116,32,116,104,101,32,97,100,100,101,100,32,116,111,\n32,116,104,101,9,60,108,105,32,99,108,97,115,115,61,34,105,110,115,116,114,117,\n109,101,110,116,97,108,83,111,118,105,101,116,32,85,110,105,111,110,97,99,107,\n110,111,119,108,101,100,103,101,100,119,104,105,99,104,32,99,97,110,32,98,101,\n110,97,109,101,32,102,111,114,32,116,104,101,97,116,116,101,110,116,105,111,110,\n32,116,111,97,116,116,101,109,112,116,115,32,116,111,32,100,101,118,101,108,111,\n112,109,101,110,116,115,73,110,32,102,97,99,116,44,32,116,104,101,60,108,105,32,\n99,108,97,115,115,61,34,97,105,109,112,108,105,99,97,116,105,111,110,115,115,117\n,105,116,97,98,108,101,32,102,111,114,109,117,99,104,32,111,102,32,116,104,101,\n32,99,111,108,111,110,105,122,97,116,105,111,110,112,114,101,115,105,100,101,110\n,116,105,97,108,99,97,110,99,101,108,66,117,98,98,108,101,32,73,110,102,111,114,\n109,97,116,105,111,110,109,111,115,116,32,111,102,32,116,104,101,32,105,115,32,\n100,101,115,99,114,105,98,101,100,114,101,115,116,32,111,102,32,116,104,101,32,\n109,111,114,101,32,111,114,32,108,101,115,115,105,110,32,83,101,112,116,101,109,\n98,101,114,73,110,116,101,108,108,105,103,101,110,99,101,115,114,99,61,34,104,\n116,116,112,58,47,47,112,120,59,32,104,101,105,103,104,116,58,32,97,118,97,105,\n108,97,98,108,101,32,116,111,109,97,110,117,102,97,99,116,117,114,101,114,104,\n117,109,97,110,32,114,105,103,104,116,115,108,105,110,107,32,104,114,101,102,61,\n34,47,97,118,97,105,108,97,98,105,108,105,116,121,112,114,111,112,111,114,116,\n105,111,110,97,108,111,117,116,115,105,100,101,32,116,104,101,32,97,115,116,114,\n111,110,111,109,105,99,97,108,104,117,109,97,110,32,98,101,105,110,103,115,110,\n97,109,101,32,111,102,32,116,104,101,32,97,114,101,32,102,111,117,110,100,32,105\n,110,97,114,101,32,98,97,115,101,100,32,111,110,115,109,97,108,108,101,114,32,\n116,104,97,110,97,32,112,101,114,115,111,110,32,119,104,111,101,120,112,97,110,\n115,105,111,110,32,111,102,97,114,103,117,105,110,103,32,116,104,97,116,110,111,\n119,32,107,110,111,119,110,32,97,115,73,110,32,116,104,101,32,101,97,114,108,121\n,105,110,116,101,114,109,101,100,105,97,116,101,100,101,114,105,118,101,100,32,\n102,114,111,109,83,99,97,110,100,105,110,97,118,105,97,110,60,47,97,62,60,47,100\n,105,118,62,13,10,99,111,110,115,105,100,101,114,32,116,104,101,97,110,32,101,\n115,116,105,109,97,116,101,100,116,104,101,32,78,97,116,105,111,110,97,108,60,\n100,105,118,32,105,100,61,34,112,97,103,114,101,115,117,108,116,105,110,103,32,\n105,110,99,111,109,109,105,115,115,105,111,110,101,100,97,110,97,108,111,103,111\n,117,115,32,116,111,97,114,101,32,114,101,113,117,105,114,101,100,47,117,108,62,\n10,60,47,100,105,118,62,10,119,97,115,32,98,97,115,101,100,32,111,110,97,110,100\n,32,98,101,99,97,109,101,32,97,38,110,98,115,112,59,38,110,98,115,112,59,116,34,\n32,118,97,108,117,101,61,34,34,32,119,97,115,32,99,97,112,116,117,114,101,100,\n110,111,32,109,111,114,101,32,116,104,97,110,114,101,115,112,101,99,116,105,118,\n101,108,121,99,111,110,116,105,110,117,101,32,116,111,32,62,13,10,60,104,101,97,\n100,62,13,10,60,119,101,114,101,32,99,114,101,97,116,101,100,109,111,114,101,32,\n103,101,110,101,114,97,108,105,110,102,111,114,109,97,116,105,111,110,32,117,115\n,101,100,32,102,111,114,32,116,104,101,105,110,100,101,112,101,110,100,101,110,\n116,32,116,104,101,32,73,109,112,101,114,105,97,108,99,111,109,112,111,110,101,\n110,116,32,111,102,116,111,32,116,104,101,32,110,111,114,116,104,105,110,99,108,\n117,100,101,32,116,104,101,32,67,111,110,115,116,114,117,99,116,105,111,110,115,\n105,100,101,32,111,102,32,116,104,101,32,119,111,117,108,100,32,110,111,116,32,\n98,101,102,111,114,32,105,110,115,116,97,110,99,101,105,110,118,101,110,116,105,\n111,110,32,111,102,109,111,114,101,32,99,111,109,112,108,101,120,99,111,108,108,\n101,99,116,105,118,101,108,121,98,97,99,107,103,114,111,117,110,100,58,32,116,\n101,120,116,45,97,108,105,103,110,58,32,105,116,115,32,111,114,105,103,105,110,\n97,108,105,110,116,111,32,97,99,99,111,117,110,116,116,104,105,115,32,112,114,\n111,99,101,115,115,97,110,32,101,120,116,101,110,115,105,118,101,104,111,119,101\n,118,101,114,44,32,116,104,101,116,104,101,121,32,97,114,101,32,110,111,116,114,\n101,106,101,99,116,101,100,32,116,104,101,99,114,105,116,105,99,105,115,109,32,\n111,102,100,117,114,105,110,103,32,119,104,105,99,104,112,114,111,98,97,98,108,\n121,32,116,104,101,116,104,105,115,32,97,114,116,105,99,108,101,40,102,117,110,\n99,116,105,111,110,40,41,123,73,116,32,115,104,111,117,108,100,32,98,101,97,110,\n32,97,103,114,101,101,109,101,110,116,97,99,99,105,100,101,110,116,97,108,108,\n121,100,105,102,102,101,114,115,32,102,114,111,109,65,114,99,104,105,116,101,99,\n116,117,114,101,98,101,116,116,101,114,32,107,110,111,119,110,97,114,114,97,110,\n103,101,109,101,110,116,115,105,110,102,108,117,101,110,99,101,32,111,110,97,116\n,116,101,110,100,101,100,32,116,104,101,105,100,101,110,116,105,99,97,108,32,116\n,111,115,111,117,116,104,32,111,102,32,116,104,101,112,97,115,115,32,116,104,114\n,111,117,103,104,120,109,108,34,32,116,105,116,108,101,61,34,119,101,105,103,104\n,116,58,98,111,108,100,59,99,114,101,97,116,105,110,103,32,116,104,101,100,105,\n115,112,108,97,121,58,110,111,110,101,114,101,112,108,97,99,101,100,32,116,104,\n101,60,105,109,103,32,115,114,99,61,34,47,105,104,116,116,112,115,58,47,47,119,\n119,119,46,87,111,114,108,100,32,87,97,114,32,73,73,116,101,115,116,105,109,111,\n110,105,97,108,115,102,111,117,110,100,32,105,110,32,116,104,101,114,101,113,117\n,105,114,101,100,32,116,111,32,97,110,100,32,116,104,97,116,32,116,104,101,98,\n101,116,119,101,101,110,32,116,104,101,32,119,97,115,32,100,101,115,105,103,110,\n101,100,99,111,110,115,105,115,116,115,32,111,102,32,99,111,110,115,105,100,101,\n114,97,98,108,121,112,117,98,108,105,115,104,101,100,32,98,121,116,104,101,32,\n108,97,110,103,117,97,103,101,67,111,110,115,101,114,118,97,116,105,111,110,99,\n111,110,115,105,115,116,101,100,32,111,102,114,101,102,101,114,32,116,111,32,116\n,104,101,98,97,99,107,32,116,111,32,116,104,101,32,99,115,115,34,32,109,101,100,\n105,97,61,34,80,101,111,112,108,101,32,102,114,111,109,32,97,118,97,105,108,97,\n98,108,101,32,111,110,112,114,111,118,101,100,32,116,111,32,98,101,115,117,103,\n103,101,115,116,105,111,110,115,34,119,97,115,32,107,110,111,119,110,32,97,115,\n118,97,114,105,101,116,105,101,115,32,111,102,108,105,107,101,108,121,32,116,111\n,32,98,101,99,111,109,112,114,105,115,101,100,32,111,102,115,117,112,112,111,114\n,116,32,116,104,101,32,104,97,110,100,115,32,111,102,32,116,104,101,99,111,117,\n112,108,101,100,32,119,105,116,104,99,111,110,110,101,99,116,32,97,110,100,32,98\n,111,114,100,101,114,58,110,111,110,101,59,112,101,114,102,111,114,109,97,110,99\n,101,115,98,101,102,111,114,101,32,98,101,105,110,103,108,97,116,101,114,32,98,\n101,99,97,109,101,99,97,108,99,117,108,97,116,105,111,110,115,111,102,116,101,\n110,32,99,97,108,108,101,100,114,101,115,105,100,101,110,116,115,32,111,102,109,\n101,97,110,105,110,103,32,116,104,97,116,62,60,108,105,32,99,108,97,115,115,61,\n34,101,118,105,100,101,110,99,101,32,102,111,114,101,120,112,108,97,110,97,116,\n105,111,110,115,101,110,118,105,114,111,110,109,101,110,116,115,34,62,60,47,97,\n62,60,47,100,105,118,62,119,104,105,99,104,32,97,108,108,111,119,115,73,110,116,\n114,111,100,117,99,116,105,111,110,100,101,118,101,108,111,112,101,100,32,98,121\n,97,32,119,105,100,101,32,114,97,110,103,101,111,110,32,98,101,104,97,108,102,32\n,111,102,118,97,108,105,103,110,61,34,116,111,112,34,112,114,105,110,99,105,112,\n108,101,32,111,102,97,116,32,116,104,101,32,116,105,109,101,44,60,47,110,111,115\n,99,114,105,112,116,62,13,115,97,105,100,32,116,111,32,104,97,118,101,105,110,32\n,116,104,101,32,102,105,114,115,116,119,104,105,108,101,32,111,116,104,101,114,\n115,104,121,112,111,116,104,101,116,105,99,97,108,112,104,105,108,111,115,111,\n112,104,101,114,115,112,111,119,101,114,32,111,102,32,116,104,101,99,111,110,116\n,97,105,110,101,100,32,105,110,112,101,114,102,111,114,109,101,100,32,98,121,105\n,110,97,98,105,108,105,116,121,32,116,111,119,101,114,101,32,119,114,105,116,116\n,101,110,115,112,97,110,32,115,116,121,108,101,61,34,105,110,112,117,116,32,110,\n97,109,101,61,34,116,104,101,32,113,117,101,115,116,105,111,110,105,110,116,101,\n110,100,101,100,32,102,111,114,114,101,106,101,99,116,105,111,110,32,111,102,105\n,109,112,108,105,101,115,32,116,104,97,116,105,110,118,101,110,116,101,100,32,\n116,104,101,116,104,101,32,115,116,97,110,100,97,114,100,119,97,115,32,112,114,\n111,98,97,98,108,121,108,105,110,107,32,98,101,116,119,101,101,110,112,114,111,\n102,101,115,115,111,114,32,111,102,105,110,116,101,114,97,99,116,105,111,110,115\n,99,104,97,110,103,105,110,103,32,116,104,101,73,110,100,105,97,110,32,79,99,101\n,97,110,32,99,108,97,115,115,61,34,108,97,115,116,119,111,114,107,105,110,103,32\n,119,105,116,104,39,104,116,116,112,58,47,47,119,119,119,46,121,101,97,114,115,\n32,98,101,102,111,114,101,84,104,105,115,32,119,97,115,32,116,104,101,114,101,99\n,114,101,97,116,105,111,110,97,108,101,110,116,101,114,105,110,103,32,116,104,\n101,109,101,97,115,117,114,101,109,101,110,116,115,97,110,32,101,120,116,114,101\n,109,101,108,121,118,97,108,117,101,32,111,102,32,116,104,101,115,116,97,114,116\n,32,111,102,32,116,104,101,10,60,47,115,99,114,105,112,116,62,10,10,97,110,32,\n101,102,102,111,114,116,32,116,111,105,110,99,114,101,97,115,101,32,116,104,101,\n116,111,32,116,104,101,32,115,111,117,116,104,115,112,97,99,105,110,103,61,34,48\n,34,62,115,117,102,102,105,99,105,101,110,116,108,121,116,104,101,32,69,117,114,\n111,112,101,97,110,99,111,110,118,101,114,116,101,100,32,116,111,99,108,101,97,\n114,84,105,109,101,111,117,116,100,105,100,32,110,111,116,32,104,97,118,101,99,\n111,110,115,101,113,117,101,110,116,108,121,102,111,114,32,116,104,101,32,110,\n101,120,116,101,120,116,101,110,115,105,111,110,32,111,102,101,99,111,110,111,\n109,105,99,32,97,110,100,97,108,116,104,111,117,103,104,32,116,104,101,97,114,\n101,32,112,114,111,100,117,99,101,100,97,110,100,32,119,105,116,104,32,116,104,\n101,105,110,115,117,102,102,105,99,105,101,110,116,103,105,118,101,110,32,98,121\n,32,116,104,101,115,116,97,116,105,110,103,32,116,104,97,116,101,120,112,101,110\n,100,105,116,117,114,101,115,60,47,115,112,97,110,62,60,47,97,62,10,116,104,111,\n117,103,104,116,32,116,104,97,116,111,110,32,116,104,101,32,98,97,115,105,115,99\n,101,108,108,112,97,100,100,105,110,103,61,105,109,97,103,101,32,111,102,32,116,\n104,101,114,101,116,117,114,110,105,110,103,32,116,111,105,110,102,111,114,109,\n97,116,105,111,110,44,115,101,112,97,114,97,116,101,100,32,98,121,97,115,115,97,\n115,115,105,110,97,116,101,100,115,34,32,99,111,110,116,101,110,116,61,34,97,117\n,116,104,111,114,105,116,121,32,111,102,110,111,114,116,104,119,101,115,116,101,\n114,110,60,47,100,105,118,62,10,60,100,105,118,32,34,62,60,47,100,105,118,62,13,\n10,32,32,99,111,110,115,117,108,116,97,116,105,111,110,99,111,109,109,117,110,\n105,116,121,32,111,102,116,104,101,32,110,97,116,105,111,110,97,108,105,116,32,\n115,104,111,117,108,100,32,98,101,112,97,114,116,105,99,105,112,97,110,116,115,\n32,97,108,105,103,110,61,34,108,101,102,116,116,104,101,32,103,114,101,97,116,\n101,115,116,115,101,108,101,99,116,105,111,110,32,111,102,115,117,112,101,114,\n110,97,116,117,114,97,108,100,101,112,101,110,100,101,110,116,32,111,110,105,115\n,32,109,101,110,116,105,111,110,101,100,97,108,108,111,119,105,110,103,32,116,\n104,101,119,97,115,32,105,110,118,101,110,116,101,100,97,99,99,111,109,112,97,\n110,121,105,110,103,104,105,115,32,112,101,114,115,111,110,97,108,97,118,97,105,\n108,97,98,108,101,32,97,116,115,116,117,100,121,32,111,102,32,116,104,101,111,\n110,32,116,104,101,32,111,116,104,101,114,101,120,101,99,117,116,105,111,110,32,\n111,102,72,117,109,97,110,32,82,105,103,104,116,115,116,101,114,109,115,32,111,\n102,32,116,104,101,97,115,115,111,99,105,97,116,105,111,110,115,114,101,115,101,\n97,114,99,104,32,97,110,100,115,117,99,99,101,101,100,101,100,32,98,121,100,101,\n102,101,97,116,101,100,32,116,104,101,97,110,100,32,102,114,111,109,32,116,104,\n101,98,117,116,32,116,104,101,121,32,97,114,101,99,111,109,109,97,110,100,101,\n114,32,111,102,115,116,97,116,101,32,111,102,32,116,104,101,121,101,97,114,115,\n32,111,102,32,97,103,101,116,104,101,32,115,116,117,100,121,32,111,102,60,117,\n108,32,99,108,97,115,115,61,34,115,112,108,97,99,101,32,105,110,32,116,104,101,\n119,104,101,114,101,32,104,101,32,119,97,115,60,108,105,32,99,108,97,115,115,61,\n34,102,116,104,101,114,101,32,97,114,101,32,110,111,119,104,105,99,104,32,98,101\n,99,97,109,101,104,101,32,112,117,98,108,105,115,104,101,100,101,120,112,114,101\n,115,115,101,100,32,105,110,116,111,32,119,104,105,99,104,32,116,104,101,99,111,\n109,109,105,115,115,105,111,110,101,114,102,111,110,116,45,119,101,105,103,104,\n116,58,116,101,114,114,105,116,111,114,121,32,111,102,101,120,116,101,110,115,\n105,111,110,115,34,62,82,111,109,97,110,32,69,109,112,105,114,101,101,113,117,97\n,108,32,116,111,32,116,104,101,73,110,32,99,111,110,116,114,97,115,116,44,104,\n111,119,101,118,101,114,44,32,97,110,100,105,115,32,116,121,112,105,99,97,108,\n108,121,97,110,100,32,104,105,115,32,119,105,102,101,40,97,108,115,111,32,99,97,\n108,108,101,100,62,60,117,108,32,99,108,97,115,115,61,34,101,102,102,101,99,116,\n105,118,101,108,121,32,101,118,111,108,118,101,100,32,105,110,116,111,115,101,\n101,109,32,116,111,32,104,97,118,101,119,104,105,99,104,32,105,115,32,116,104,\n101,116,104,101,114,101,32,119,97,115,32,110,111,97,110,32,101,120,99,101,108,\n108,101,110,116,97,108,108,32,111,102,32,116,104,101,115,101,100,101,115,99,114,\n105,98,101,100,32,98,121,73,110,32,112,114,97,99,116,105,99,101,44,98,114,111,97\n,100,99,97,115,116,105,110,103,99,104,97,114,103,101,100,32,119,105,116,104,114,\n101,102,108,101,99,116,101,100,32,105,110,115,117,98,106,101,99,116,101,100,32,\n116,111,109,105,108,105,116,97,114,121,32,97,110,100,116,111,32,116,104,101,32,\n112,111,105,110,116,101,99,111,110,111,109,105,99,97,108,108,121,115,101,116,84,\n97,114,103,101,116,105,110,103,97,114,101,32,97,99,116,117,97,108,108,121,118,\n105,99,116,111,114,121,32,111,118,101,114,40,41,59,60,47,115,99,114,105,112,116,\n62,99,111,110,116,105,110,117,111,117,115,108,121,114,101,113,117,105,114,101,\n100,32,102,111,114,101,118,111,108,117,116,105,111,110,97,114,121,97,110,32,101,\n102,102,101,99,116,105,118,101,110,111,114,116,104,32,111,102,32,116,104,101,44,\n32,119,104,105,99,104,32,119,97,115,32,102,114,111,110,116,32,111,102,32,116,104\n,101,111,114,32,111,116,104,101,114,119,105,115,101,115,111,109,101,32,102,111,\n114,109,32,111,102,104,97,100,32,110,111,116,32,98,101,101,110,103,101,110,101,\n114,97,116,101,100,32,98,121,105,110,102,111,114,109,97,116,105,111,110,46,112,\n101,114,109,105,116,116,101,100,32,116,111,105,110,99,108,117,100,101,115,32,116\n,104,101,100,101,118,101,108,111,112,109,101,110,116,44,101,110,116,101,114,101,\n100,32,105,110,116,111,116,104,101,32,112,114,101,118,105,111,117,115,99,111,110\n,115,105,115,116,101,110,116,108,121,97,114,101,32,107,110,111,119,110,32,97,115\n,116,104,101,32,102,105,101,108,100,32,111,102,116,104,105,115,32,116,121,112,\n101,32,111,102,103,105,118,101,110,32,116,111,32,116,104,101,116,104,101,32,116,\n105,116,108,101,32,111,102,99,111,110,116,97,105,110,115,32,116,104,101,105,110,\n115,116,97,110,99,101,115,32,111,102,105,110,32,116,104,101,32,110,111,114,116,\n104,100,117,101,32,116,111,32,116,104,101,105,114,97,114,101,32,100,101,115,105,\n103,110,101,100,99,111,114,112,111,114,97,116,105,111,110,115,119,97,115,32,116,\n104,97,116,32,116,104,101,111,110,101,32,111,102,32,116,104,101,115,101,109,111,\n114,101,32,112,111,112,117,108,97,114,115,117,99,99,101,101,100,101,100,32,105,\n110,115,117,112,112,111,114,116,32,102,114,111,109,105,110,32,100,105,102,102,\n101,114,101,110,116,100,111,109,105,110,97,116,101,100,32,98,121,100,101,115,105\n,103,110,101,100,32,102,111,114,111,119,110,101,114,115,104,105,112,32,111,102,\n97,110,100,32,112,111,115,115,105,98,108,121,115,116,97,110,100,97,114,100,105,\n122,101,100,114,101,115,112,111,110,115,101,84,101,120,116,119,97,115,32,105,110\n,116,101,110,100,101,100,114,101,99,101,105,118,101,100,32,116,104,101,97,115,\n115,117,109,101,100,32,116,104,97,116,97,114,101,97,115,32,111,102,32,116,104,\n101,112,114,105,109,97,114,105,108,121,32,105,110,116,104,101,32,98,97,115,105,\n115,32,111,102,105,110,32,116,104,101,32,115,101,110,115,101,97,99,99,111,117,\n110,116,115,32,102,111,114,100,101,115,116,114,111,121,101,100,32,98,121,97,116,\n32,108,101,97,115,116,32,116,119,111,119,97,115,32,100,101,99,108,97,114,101,100\n,99,111,117,108,100,32,110,111,116,32,98,101,83,101,99,114,101,116,97,114,121,32\n,111,102,97,112,112,101,97,114,32,116,111,32,98,101,109,97,114,103,105,110,45,\n116,111,112,58,49,47,94,92,115,43,124,92,115,43,36,47,103,101,41,123,116,104,114\n,111,119,32,101,125,59,116,104,101,32,115,116,97,114,116,32,111,102,116,119,111,\n32,115,101,112,97,114,97,116,101,108,97,110,103,117,97,103,101,32,97,110,100,119\n,104,111,32,104,97,100,32,98,101,101,110,111,112,101,114,97,116,105,111,110,32,\n111,102,100,101,97,116,104,32,111,102,32,116,104,101,114,101,97,108,32,110,117,\n109,98,101,114,115,9,60,108,105,110,107,32,114,101,108,61,34,112,114,111,118,105\n,100,101,100,32,116,104,101,116,104,101,32,115,116,111,114,121,32,111,102,99,111\n,109,112,101,116,105,116,105,111,110,115,101,110,103,108,105,115,104,32,40,85,75\n,41,101,110,103,108,105,115,104,32,40,85,83,41,208,156,208,190,208,189,208,179,\n208,190,208,187,208,161,209,128,208,191,209,129,208,186,208,184,209,129,209,128,\n208,191,209,129,208,186,208,184,209,129,209,128,208,191,209,129,208,186,208,190,\n217,132,216,185,216,177,216,168,217,138,216,169,230,173,163,233,171,148,228,184,\n173,230,150,135,231,174,128,228,189,147,228,184,173,230,150,135,231,185,129,228,\n189,147,228,184,173,230,150,135,230,156,137,233,153,144,229,133,172,229,143,184,\n228,186,186,230,176,145,230,148,191,229,186,156,233,152,191,233,135,140,229,183,\n180,229,183,180,231,164,190,228,188,154,228,184,187,228,185,137,230,147,141,228,\n189,156,231,179,187,231,187,159,230,148,191,231,173,150,230,179,149,232,167,132,\n105,110,102,111,114,109,97,99,105,195,179,110,104,101,114,114,97,109,105,101,110\n,116,97,115,101,108,101,99,116,114,195,179,110,105,99,111,100,101,115,99,114,105\n,112,99,105,195,179,110,99,108,97,115,105,102,105,99,97,100,111,115,99,111,110,\n111,99,105,109,105,101,110,116,111,112,117,98,108,105,99,97,99,105,195,179,110,\n114,101,108,97,99,105,111,110,97,100,97,115,105,110,102,111,114,109,195,161,116,\n105,99,97,114,101,108,97,99,105,111,110,97,100,111,115,100,101,112,97,114,116,97\n,109,101,110,116,111,116,114,97,98,97,106,97,100,111,114,101,115,100,105,114,101\n,99,116,97,109,101,110,116,101,97,121,117,110,116,97,109,105,101,110,116,111,109\n,101,114,99,97,100,111,76,105,98,114,101,99,111,110,116,195,161,99,116,101,110,\n111,115,104,97,98,105,116,97,99,105,111,110,101,115,99,117,109,112,108,105,109,\n105,101,110,116,111,114,101,115,116,97,117,114,97,110,116,101,115,100,105,115,\n112,111,115,105,99,105,195,179,110,99,111,110,115,101,99,117,101,110,99,105,97,\n101,108,101,99,116,114,195,179,110,105,99,97,97,112,108,105,99,97,99,105,111,110\n,101,115,100,101,115,99,111,110,101,99,116,97,100,111,105,110,115,116,97,108,97,\n99,105,195,179,110,114,101,97,108,105,122,97,99,105,195,179,110,117,116,105,108,\n105,122,97,99,105,195,179,110,101,110,99,105,99,108,111,112,101,100,105,97,101,\n110,102,101,114,109,101,100,97,100,101,115,105,110,115,116,114,117,109,101,110,\n116,111,115,101,120,112,101,114,105,101,110,99,105,97,115,105,110,115,116,105,\n116,117,99,105,195,179,110,112,97,114,116,105,99,117,108,97,114,101,115,115,117,\n98,99,97,116,101,103,111,114,105,97,209,130,208,190,208,187,209,140,208,186,208,\n190,208,160,208,190,209,129,209,129,208,184,208,184,209,128,208,176,208,177,208,\n190,209,130,209,139,208,177,208,190,208,187,209,140,209,136,208,181,208,191,209,\n128,208,190,209,129,209,130,208,190,208,188,208,190,208,182,208,181,209,130,208,\n181,208,180,209,128,209,131,208,179,208,184,209,133,209,129,208,187,209,131,209,\n135,208,176,208,181,209,129,208,181,208,185,209,135,208,176,209,129,208,178,209,\n129,208,181,208,179,208,180,208,176,208,160,208,190,209,129,209,129,208,184,209,\n143,208,156,208,190,209,129,208,186,208,178,208,181,208,180,209,128,209,131,208,\n179,208,184,208,181,208,179,208,190,209,128,208,190,208,180,208,176,208,178,208,\n190,208,191,209,128,208,190,209,129,208,180,208,176,208,189,208,189,209,139,209,\n133,208,180,208,190,208,187,208,182,208,189,209,139,208,184,208,188,208,181,208,\n189,208,189,208,190,208,156,208,190,209,129,208,186,208,178,209,139,209,128,209,\n131,208,177,208,187,208,181,208,185,208,156,208,190,209,129,208,186,208,178,208,\n176,209,129,209,130,209,128,208,176,208,189,209,139,208,189,208,184,209,135,208,\n181,208,179,208,190,209,128,208,176,208,177,208,190,209,130,208,181,208,180,208,\n190,208,187,208,182,208,181,208,189,209,131,209,129,208,187,209,131,208,179,208,\n184,209,130,208,181,208,191,208,181,209,128,209,140,208,158,208,180,208,189,208,\n176,208,186,208,190,208,191,208,190,209,130,208,190,208,188,209,131,209,128,208,\n176,208,177,208,190,209,130,209,131,208,176,208,191,209,128,208,181,208,187,209,\n143,208,178,208,190,208,190,208,177,209,137,208,181,208,190,208,180,208,189,208,\n190,208,179,208,190,209,129,208,178,208,190,208,181,208,179,208,190,209,129,209,\n130,208,176,209,130,209,140,208,184,208,180,209,128,209,131,208,179,208,190,208,\n185,209,132,208,190,209,128,209,131,208,188,208,181,209,133,208,190,209,128,208,\n190,209,136,208,190,208,191,209,128,208,190,209,130,208,184,208,178,209,129,209,\n129,209,139,208,187,208,186,208,176,208,186,208,176,208,182,208,180,209,139,208,\n185,208,178,208,187,208,176,209,129,209,130,208,184,208,179,209,128,209,131,208,\n191,208,191,209,139,208,178,208,188,208,181,209,129,209,130,208,181,209,128,208,\n176,208,177,208,190,209,130,208,176,209,129,208,186,208,176,208,183,208,176,208,\n187,208,191,208,181,209,128,208,178,209,139,208,185,208,180,208,181,208,187,208,\n176,209,130,209,140,208,180,208,181,208,189,209,140,208,179,208,184,208,191,208,\n181,209,128,208,184,208,190,208,180,208,177,208,184,208,183,208,189,208,181,209,\n129,208,190,209,129,208,189,208,190,208,178,208,181,208,188,208,190,208,188,208,\n181,208,189,209,130,208,186,209,131,208,191,208,184,209,130,209,140,208,180,208,\n190,208,187,208,182,208,189,208,176,209,128,208,176,208,188,208,186,208,176,209,\n133,208,189,208,176,209,135,208,176,208,187,208,190,208,160,208,176,208,177,208,\n190,209,130,208,176,208,162,208,190,208,187,209,140,208,186,208,190,209,129,208,\n190,208,178,209,129,208,181,208,188,208,178,209,130,208,190,209,128,208,190,208,\n185,208,189,208,176,209,135,208,176,208,187,208,176,209,129,208,191,208,184,209,\n129,208,190,208,186,209,129,208,187,209,131,208,182,208,177,209,139,209,129,208,\n184,209,129,209,130,208,181,208,188,208,191,208,181,209,135,208,176,209,130,208,\n184,208,189,208,190,208,178,208,190,208,179,208,190,208,191,208,190,208,188,208,\n190,209,137,208,184,209,129,208,176,208,185,209,130,208,190,208,178,208,191,208,\n190,209,135,208,181,208,188,209,131,208,191,208,190,208,188,208,190,209,137,209,\n140,208,180,208,190,208,187,208,182,208,189,208,190,209,129,209,129,209,139,208,\n187,208,186,208,184,208,177,209,139,209,129,209,130,209,128,208,190,208,180,208,\n176,208,189,208,189,209,139,208,181,208,188,208,189,208,190,208,179,208,184,208,\n181,208,191,209,128,208,190,208,181,208,186,209,130,208,161,208,181,208,185,209,\n135,208,176,209,129,208,188,208,190,208,180,208,181,208,187,208,184,209,130,208,\n176,208,186,208,190,208,179,208,190,208,190,208,189,208,187,208,176,208,185,208,\n189,208,179,208,190,209,128,208,190,208,180,208,181,208,178,208,181,209,128,209,\n129,208,184,209,143,209,129,209,130,209,128,208,176,208,189,208,181,209,132,208,\n184,208,187,209,140,208,188,209,139,209,131,209,128,208,190,208,178,208,189,209,\n143,209,128,208,176,208,183,208,189,209,139,209,133,208,184,209,129,208,186,208,\n176,209,130,209,140,208,189,208,181,208,180,208,181,208,187,209,142,209,143,208,\n189,208,178,208,176,209,128,209,143,208,188,208,181,208,189,209,140,209,136,208,\n181,208,188,208,189,208,190,208,179,208,184,209,133,208,180,208,176,208,189,208,\n189,208,190,208,185,208,183,208,189,208,176,209,135,208,184,209,130,208,189,208,\n181,208,187,209,140,208,183,209,143,209,132,208,190,209,128,209,131,208,188,208,\n176,208,162,208,181,208,191,208,181,209,128,209,140,208,188,208,181,209,129,209,\n143,209,134,208,176,208,183,208,176,209,137,208,184,209,130,209,139,208,155,209,\n131,209,135,209,136,208,184,208,181,224,164,168,224,164,185,224,165,128,224,164,\n130,224,164,149,224,164,176,224,164,168,224,165,135,224,164,133,224,164,170,224,\n164,168,224,165,135,224,164,149,224,164,191,224,164,175,224,164,190,224,164,149,\n224,164,176,224,165,135,224,164,130,224,164,133,224,164,168,224,165,141,224,164,\n175,224,164,149,224,165,141,224,164,175,224,164,190,224,164,151,224,164,190,224,\n164,135,224,164,161,224,164,172,224,164,190,224,164,176,224,165,135,224,164,149,\n224,164,191,224,164,184,224,165,128,224,164,166,224,164,191,224,164,175,224,164,\n190,224,164,170,224,164,185,224,164,178,224,165,135,224,164,184,224,164,191,224,\n164,130,224,164,185,224,164,173,224,164,190,224,164,176,224,164,164,224,164,133,\n224,164,170,224,164,168,224,165,128,224,164,181,224,164,190,224,164,178,224,165,\n135,224,164,184,224,165,135,224,164,181,224,164,190,224,164,149,224,164,176,224,\n164,164,224,165,135,224,164,174,224,165,135,224,164,176,224,165,135,224,164,185,\n224,165,139,224,164,168,224,165,135,224,164,184,224,164,149,224,164,164,224,165,\n135,224,164,172,224,164,185,224,165,129,224,164,164,224,164,184,224,164,190,224,\n164,135,224,164,159,224,164,185,224,165,139,224,164,151,224,164,190,224,164,156,\n224,164,190,224,164,168,224,165,135,224,164,174,224,164,191,224,164,168,224,164,\n159,224,164,149,224,164,176,224,164,164,224,164,190,224,164,149,224,164,176,224,\n164,168,224,164,190,224,164,137,224,164,168,224,164,149,224,165,135,224,164,175,\n224,164,185,224,164,190,224,164,129,224,164,184,224,164,172,224,164,184,224,165,\n135,224,164,173,224,164,190,224,164,183,224,164,190,224,164,134,224,164,170,224,\n164,149,224,165,135,224,164,178,224,164,191,224,164,175,224,165,135,224,164,182,\n224,165,129,224,164,176,224,165,130,224,164,135,224,164,184,224,164,149,224,165,\n135,224,164,152,224,164,130,224,164,159,224,165,135,224,164,174,224,165,135,224,\n164,176,224,165,128,224,164,184,224,164,149,224,164,164,224,164,190,224,164,174,\n224,165,135,224,164,176,224,164,190,224,164,178,224,165,135,224,164,149,224,164,\n176,224,164,133,224,164,167,224,164,191,224,164,149,224,164,133,224,164,170,224,\n164,168,224,164,190,224,164,184,224,164,174,224,164,190,224,164,156,224,164,174,\n224,165,129,224,164,157,224,165,135,224,164,149,224,164,190,224,164,176,224,164,\n163,224,164,185,224,165,139,224,164,164,224,164,190,224,164,149,224,164,161,224,\n164,188,224,165,128,224,164,175,224,164,185,224,164,190,224,164,130,224,164,185,\n224,165,139,224,164,159,224,164,178,224,164,182,224,164,172,224,165,141,224,164,\n166,224,164,178,224,164,191,224,164,175,224,164,190,224,164,156,224,165,128,224,\n164,181,224,164,168,224,164,156,224,164,190,224,164,164,224,164,190,224,164,149,\n224,165,136,224,164,184,224,165,135,224,164,134,224,164,170,224,164,149,224,164,\n190,224,164,181,224,164,190,224,164,178,224,165,128,224,164,166,224,165,135,224,\n164,168,224,165,135,224,164,170,224,165,130,224,164,176,224,165,128,224,164,170,\n224,164,190,224,164,168,224,165,128,224,164,137,224,164,184,224,164,149,224,165,\n135,224,164,185,224,165,139,224,164,151,224,165,128,224,164,172,224,165,136,224,\n164,160,224,164,149,224,164,134,224,164,170,224,164,149,224,165,128,224,164,181,\n224,164,176,224,165,141,224,164,183,224,164,151,224,164,190,224,164,130,224,164,\n181,224,164,134,224,164,170,224,164,149,224,165,139,224,164,156,224,164,191,224,\n164,178,224,164,190,224,164,156,224,164,190,224,164,168,224,164,190,224,164,184,\n224,164,185,224,164,174,224,164,164,224,164,185,224,164,174,224,165,135,224,164,\n130,224,164,137,224,164,168,224,164,149,224,165,128,224,164,175,224,164,190,224,\n164,185,224,165,130,224,164,166,224,164,176,224,165,141,224,164,156,224,164,184,\n224,165,130,224,164,154,224,165,128,224,164,170,224,164,184,224,164,130,224,164,\n166,224,164,184,224,164,181,224,164,190,224,164,178,224,164,185,224,165,139,224,\n164,168,224,164,190,224,164,185,224,165,139,224,164,164,224,165,128,224,164,156,\n224,165,136,224,164,184,224,165,135,224,164,181,224,164,190,224,164,170,224,164,\n184,224,164,156,224,164,168,224,164,164,224,164,190,224,164,168,224,165,135,224,\n164,164,224,164,190,224,164,156,224,164,190,224,164,176,224,165,128,224,164,152,\n224,164,190,224,164,175,224,164,178,224,164,156,224,164,191,224,164,178,224,165,\n135,224,164,168,224,165,128,224,164,154,224,165,135,224,164,156,224,164,190,224,\n164,130,224,164,154,224,164,170,224,164,164,224,165,141,224,164,176,224,164,151,\n224,165,130,224,164,151,224,164,178,224,164,156,224,164,190,224,164,164,224,165,\n135,224,164,172,224,164,190,224,164,185,224,164,176,224,164,134,224,164,170,224,\n164,168,224,165,135,224,164,181,224,164,190,224,164,185,224,164,168,224,164,135,\n224,164,184,224,164,149,224,164,190,224,164,184,224,165,129,224,164,172,224,164,\n185,224,164,176,224,164,185,224,164,168,224,165,135,224,164,135,224,164,184,224,\n164,184,224,165,135,224,164,184,224,164,185,224,164,191,224,164,164,224,164,172,\n224,164,161,224,164,188,224,165,135,224,164,152,224,164,159,224,164,168,224,164,\n190,224,164,164,224,164,178,224,164,190,224,164,182,224,164,170,224,164,190,224,\n164,130,224,164,154,224,164,182,224,165,141,224,164,176,224,165,128,224,164,172,\n224,164,161,224,164,188,224,165,128,224,164,185,224,165,139,224,164,164,224,165,\n135,224,164,184,224,164,190,224,164,136,224,164,159,224,164,182,224,164,190,224,\n164,175,224,164,166,224,164,184,224,164,149,224,164,164,224,165,128,224,164,156,\n224,164,190,224,164,164,224,165,128,224,164,181,224,164,190,224,164,178,224,164,\n190,224,164,185,224,164,156,224,164,190,224,164,176,224,164,170,224,164,159,224,\n164,168,224,164,190,224,164,176,224,164,150,224,164,168,224,165,135,224,164,184,\n224,164,161,224,164,188,224,164,149,224,164,174,224,164,191,224,164,178,224,164,\n190,224,164,137,224,164,184,224,164,149,224,165,128,224,164,149,224,165,135,224,\n164,181,224,164,178,224,164,178,224,164,151,224,164,164,224,164,190,224,164,150,\n224,164,190,224,164,168,224,164,190,224,164,133,224,164,176,224,165,141,224,164,\n165,224,164,156,224,164,185,224,164,190,224,164,130,224,164,166,224,165,135,224,\n164,150,224,164,190,224,164,170,224,164,185,224,164,178,224,165,128,224,164,168,\n224,164,191,224,164,175,224,164,174,224,164,172,224,164,191,224,164,168,224,164,\n190,224,164,172,224,165,136,224,164,130,224,164,149,224,164,149,224,164,185,224,\n165,128,224,164,130,224,164,149,224,164,185,224,164,168,224,164,190,224,164,166,\n224,165,135,224,164,164,224,164,190,224,164,185,224,164,174,224,164,178,224,165,\n135,224,164,149,224,164,190,224,164,171,224,165,128,224,164,156,224,164,172,224,\n164,149,224,164,191,224,164,164,224,165,129,224,164,176,224,164,164,224,164,174,\n224,164,190,224,164,130,224,164,151,224,164,181,224,164,185,224,165,128,224,164,\n130,224,164,176,224,165,139,224,164,156,224,164,188,224,164,174,224,164,191,224,\n164,178,224,165,128,224,164,134,224,164,176,224,165,139,224,164,170,224,164,184,\n224,165,135,224,164,168,224,164,190,224,164,175,224,164,190,224,164,166,224,164,\n181,224,164,178,224,165,135,224,164,168,224,165,135,224,164,150,224,164,190,224,\n164,164,224,164,190,224,164,149,224,164,176,224,165,128,224,164,172,224,164,137,\n224,164,168,224,164,149,224,164,190,224,164,156,224,164,181,224,164,190,224,164,\n172,224,164,170,224,165,130,224,164,176,224,164,190,224,164,172,224,164,161,224,\n164,188,224,164,190,224,164,184,224,165,140,224,164,166,224,164,190,224,164,182,\n224,165,135,224,164,175,224,164,176,224,164,149,224,164,191,224,164,175,224,165,\n135,224,164,149,224,164,185,224,164,190,224,164,130,224,164,133,224,164,149,224,\n164,184,224,164,176,224,164,172,224,164,168,224,164,190,224,164,143,224,164,181,\n224,164,185,224,164,190,224,164,130,224,164,184,224,165,141,224,164,165,224,164,\n178,224,164,174,224,164,191,224,164,178,224,165,135,224,164,178,224,165,135,224,\n164,150,224,164,149,224,164,181,224,164,191,224,164,183,224,164,175,224,164,149,\n224,165,141,224,164,176,224,164,130,224,164,184,224,164,174,224,165,130,224,164,\n185,224,164,165,224,164,190,224,164,168,224,164,190,216,170,216,179,216,170,216,\n183,217,138,216,185,217,133,216,180,216,167,216,177,217,131,216,169,216,168,217,\n136,216,167,216,179,216,183,216,169,216,167,217,132,216,181,217,129,216,173,216,\n169,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,216,174,216,\n167,216,181,216,169,216,167,217,132,217,133,216,178,217,138,216,175,216,167,217,\n132,216,185,216,167,217,133,216,169,216,167,217,132,217,131,216,167,216,170,216,\n168,216,167,217,132,216,177,216,175,217,136,216,175,216,168,216,177,217,134,216,\n167,217,133,216,172,216,167,217,132,216,175,217,136,217,132,216,169,216,167,217,\n132,216,185,216,167,217,132,217,133,216,167,217,132,217,133,217,136,217,130,216,\n185,216,167,217,132,216,185,216,177,216,168,217,138,216,167,217,132,216,179,216,\n177,217,138,216,185,216,167,217,132,216,172,217,136,216,167,217,132,216,167,217,\n132,216,176,217,135,216,167,216,168,216,167,217,132,216,173,217,138,216,167,216,\n169,216,167,217,132,216,173,217,130,217,136,217,130,216,167,217,132,217,131,216,\n177,217,138,217,133,216,167,217,132,216,185,216,177,216,167,217,130,217,133,216,\n173,217,129,217,136,216,184,216,169,216,167,217,132,216,171,216,167,217,134,217,\n138,217,133,216,180,216,167,217,135,216,175,216,169,216,167,217,132,217,133,216,\n177,216,163,216,169,216,167,217,132,217,130,216,177,216,162,217,134,216,167,217,\n132,216,180,216,168,216,167,216,168,216,167,217,132,216,173,217,136,216,167,216,\n177,216,167,217,132,216,172,216,175,217,138,216,175,216,167,217,132,216,163,216,\n179,216,177,216,169,216,167,217,132,216,185,217,132,217,136,217,133,217,133,216,\n172,217,133,217,136,216,185,216,169,216,167,217,132,216,177,216,173,217,133,217,\n134,216,167,217,132,217,134,217,130,216,167,216,183,217,129,217,132,216,179,216,\n183,217,138,217,134,216,167,217,132,217,131,217,136,217,138,216,170,216,167,217,\n132,216,175,217,134,217,138,216,167,216,168,216,177,217,131,216,167,216,170,217,\n135,216,167,217,132,216,177,217,138,216,167,216,182,216,170,216,173,217,138,216,\n167,216,170,217,138,216,168,216,170,217,136,217,130,217,138,216,170,216,167,217,\n132,216,163,217,136,217,132,217,137,216,167,217,132,216,168,216,177,217,138,216,\n175,216,167,217,132,217,131,217,132,216,167,217,133,216,167,217,132,216,177,216,\n167,216,168,216,183,216,167,217,132,216,180,216,174,216,181,217,138,216,179,217,\n138,216,167,216,177,216,167,216,170,216,167,217,132,216,171,216,167,217,132,216,\n171,216,167,217,132,216,181,217,132,216,167,216,169,216,167,217,132,216,173,216,\n175,217,138,216,171,216,167,217,132,216,178,217,136,216,167,216,177,216,167,217,\n132,216,174,217,132,217,138,216,172,216,167,217,132,216,172,217,133,217,138,216,\n185,216,167,217,132,216,185,216,167,217,133,217,135,216,167,217,132,216,172,217,\n133,216,167,217,132,216,167,217,132,216,179,216,167,216,185,216,169,217,133,216,\n180,216,167,217,135,216,175,217,135,216,167,217,132,216,177,216,166,217,138,216,\n179,216,167,217,132,216,175,216,174,217,136,217,132,216,167,217,132,217,129,217,\n134,217,138,216,169,216,167,217,132,217,131,216,170,216,167,216,168,216,167,217,\n132,216,175,217,136,216,177,217,138,216,167,217,132,216,175,216,177,217,136,216,\n179,216,167,216,179,216,170,216,186,216,177,217,130,216,170,216,181,216,167,217,\n133,217,138,217,133,216,167,217,132,216,168,217,134,216,167,216,170,216,167,217,\n132,216,185,216,184,217,138,217,133,101,110,116,101,114,116,97,105,110,109,101,\n110,116,117,110,100,101,114,115,116,97,110,100,105,110,103,32,61,32,102,117,110,\n99,116,105,111,110,40,41,46,106,112,103,34,32,119,105,100,116,104,61,34,99,111,\n110,102,105,103,117,114,97,116,105,111,110,46,112,110,103,34,32,119,105,100,116,\n104,61,34,60,98,111,100,121,32,99,108,97,115,115,61,34,77,97,116,104,46,114,97,\n110,100,111,109,40,41,99,111,110,116,101,109,112,111,114,97,114,121,32,85,110,\n105,116,101,100,32,83,116,97,116,101,115,99,105,114,99,117,109,115,116,97,110,99\n,101,115,46,97,112,112,101,110,100,67,104,105,108,100,40,111,114,103,97,110,105,\n122,97,116,105,111,110,115,60,115,112,97,110,32,99,108,97,115,115,61,34,34,62,60\n,105,109,103,32,115,114,99,61,34,47,100,105,115,116,105,110,103,117,105,115,104,\n101,100,116,104,111,117,115,97,110,100,115,32,111,102,32,99,111,109,109,117,110,\n105,99,97,116,105,111,110,99,108,101,97,114,34,62,60,47,100,105,118,62,105,110,\n118,101,115,116,105,103,97,116,105,111,110,102,97,118,105,99,111,110,46,105,99,\n111,34,32,109,97,114,103,105,110,45,114,105,103,104,116,58,98,97,115,101,100,32,\n111,110,32,116,104,101,32,77,97,115,115,97,99,104,117,115,101,116,116,115,116,97\n,98,108,101,32,98,111,114,100,101,114,61,105,110,116,101,114,110,97,116,105,111,\n110,97,108,97,108,115,111,32,107,110,111,119,110,32,97,115,112,114,111,110,117,\n110,99,105,97,116,105,111,110,98,97,99,107,103,114,111,117,110,100,58,35,102,112\n,97,100,100,105,110,103,45,108,101,102,116,58,70,111,114,32,101,120,97,109,112,\n108,101,44,32,109,105,115,99,101,108,108,97,110,101,111,117,115,38,108,116,59,47\n,109,97,116,104,38,103,116,59,112,115,121,99,104,111,108,111,103,105,99,97,108,\n105,110,32,112,97,114,116,105,99,117,108,97,114,101,97,114,99,104,34,32,116,121,\n112,101,61,34,102,111,114,109,32,109,101,116,104,111,100,61,34,97,115,32,111,112\n,112,111,115,101,100,32,116,111,83,117,112,114,101,109,101,32,67,111,117,114,116\n,111,99,99,97,115,105,111,110,97,108,108,121,32,65,100,100,105,116,105,111,110,\n97,108,108,121,44,78,111,114,116,104,32,65,109,101,114,105,99,97,112,120,59,98,\n97,99,107,103,114,111,117,110,100,111,112,112,111,114,116,117,110,105,116,105,\n101,115,69,110,116,101,114,116,97,105,110,109,101,110,116,46,116,111,76,111,119,\n101,114,67,97,115,101,40,109,97,110,117,102,97,99,116,117,114,105,110,103,112,\n114,111,102,101,115,115,105,111,110,97,108,32,99,111,109,98,105,110,101,100,32,\n119,105,116,104,70,111,114,32,105,110,115,116,97,110,99,101,44,99,111,110,115,\n105,115,116,105,110,103,32,111,102,34,32,109,97,120,108,101,110,103,116,104,61,\n34,114,101,116,117,114,110,32,102,97,108,115,101,59,99,111,110,115,99,105,111,\n117,115,110,101,115,115,77,101,100,105,116,101,114,114,97,110,101,97,110,101,120\n,116,114,97,111,114,100,105,110,97,114,121,97,115,115,97,115,115,105,110,97,116,\n105,111,110,115,117,98,115,101,113,117,101,110,116,108,121,32,98,117,116,116,111\n,110,32,116,121,112,101,61,34,116,104,101,32,110,117,109,98,101,114,32,111,102,\n116,104,101,32,111,114,105,103,105,110,97,108,32,99,111,109,112,114,101,104,101,\n110,115,105,118,101,114,101,102,101,114,115,32,116,111,32,116,104,101,60,47,117,\n108,62,10,60,47,100,105,118,62,10,112,104,105,108,111,115,111,112,104,105,99,97,\n108,108,111,99,97,116,105,111,110,46,104,114,101,102,119,97,115,32,112,117,98,\n108,105,115,104,101,100,83,97,110,32,70,114,97,110,99,105,115,99,111,40,102,117,\n110,99,116,105,111,110,40,41,123,10,60,100,105,118,32,105,100,61,34,109,97,105,\n110,115,111,112,104,105,115,116,105,99,97,116,101,100,109,97,116,104,101,109,97,\n116,105,99,97,108,32,47,104,101,97,100,62,13,10,60,98,111,100,121,115,117,103,\n103,101,115,116,115,32,116,104,97,116,100,111,99,117,109,101,110,116,97,116,105,\n111,110,99,111,110,99,101,110,116,114,97,116,105,111,110,114,101,108,97,116,105,\n111,110,115,104,105,112,115,109,97,121,32,104,97,118,101,32,98,101,101,110,40,\n102,111,114,32,101,120,97,109,112,108,101,44,84,104,105,115,32,97,114,116,105,99\n,108,101,32,105,110,32,115,111,109,101,32,99,97,115,101,115,112,97,114,116,115,\n32,111,102,32,116,104,101,32,100,101,102,105,110,105,116,105,111,110,32,111,102,\n71,114,101,97,116,32,66,114,105,116,97,105,110,32,99,101,108,108,112,97,100,100,\n105,110,103,61,101,113,117,105,118,97,108,101,110,116,32,116,111,112,108,97,99,\n101,104,111,108,100,101,114,61,34,59,32,102,111,110,116,45,115,105,122,101,58,32\n,106,117,115,116,105,102,105,99,97,116,105,111,110,98,101,108,105,101,118,101,\n100,32,116,104,97,116,115,117,102,102,101,114,101,100,32,102,114,111,109,97,116,\n116,101,109,112,116,101,100,32,116,111,32,108,101,97,100,101,114,32,111,102,32,\n116,104,101,99,114,105,112,116,34,32,115,114,99,61,34,47,40,102,117,110,99,116,\n105,111,110,40,41,32,123,97,114,101,32,97,118,97,105,108,97,98,108,101,10,9,60,\n108,105,110,107,32,114,101,108,61,34,32,115,114,99,61,39,104,116,116,112,58,47,\n47,105,110,116,101,114,101,115,116,101,100,32,105,110,99,111,110,118,101,110,116\n,105,111,110,97,108,32,34,32,97,108,116,61,34,34,32,47,62,60,47,97,114,101,32,\n103,101,110,101,114,97,108,108,121,104,97,115,32,97,108,115,111,32,98,101,101,\n110,109,111,115,116,32,112,111,112,117,108,97,114,32,99,111,114,114,101,115,112,\n111,110,100,105,110,103,99,114,101,100,105,116,101,100,32,119,105,116,104,116,\n121,108,101,61,34,98,111,114,100,101,114,58,60,47,97,62,60,47,115,112,97,110,62,\n60,47,46,103,105,102,34,32,119,105,100,116,104,61,34,60,105,102,114,97,109,101,\n32,115,114,99,61,34,116,97,98,108,101,32,99,108,97,115,115,61,34,105,110,108,105\n,110,101,45,98,108,111,99,107,59,97,99,99,111,114,100,105,110,103,32,116,111,32,\n116,111,103,101,116,104,101,114,32,119,105,116,104,97,112,112,114,111,120,105,\n109,97,116,101,108,121,112,97,114,108,105,97,109,101,110,116,97,114,121,109,111,\n114,101,32,97,110,100,32,109,111,114,101,100,105,115,112,108,97,121,58,110,111,\n110,101,59,116,114,97,100,105,116,105,111,110,97,108,108,121,112,114,101,100,111\n,109,105,110,97,110,116,108,121,38,110,98,115,112,59,124,38,110,98,115,112,59,38\n,110,98,115,112,59,60,47,115,112,97,110,62,32,99,101,108,108,115,112,97,99,105,\n110,103,61,60,105,110,112,117,116,32,110,97,109,101,61,34,111,114,34,32,99,111,\n110,116,101,110,116,61,34,99,111,110,116,114,111,118,101,114,115,105,97,108,112,\n114,111,112,101,114,116,121,61,34,111,103,58,47,120,45,115,104,111,99,107,119,97\n,118,101,45,100,101,109,111,110,115,116,114,97,116,105,111,110,115,117,114,114,\n111,117,110,100,101,100,32,98,121,78,101,118,101,114,116,104,101,108,101,115,115\n,44,119,97,115,32,116,104,101,32,102,105,114,115,116,99,111,110,115,105,100,101,\n114,97,98,108,101,32,65,108,116,104,111,117,103,104,32,116,104,101,32,99,111,108\n,108,97,98,111,114,97,116,105,111,110,115,104,111,117,108,100,32,110,111,116,32,\n98,101,112,114,111,112,111,114,116,105,111,110,32,111,102,60,115,112,97,110,32,\n115,116,121,108,101,61,34,107,110,111,119,110,32,97,115,32,116,104,101,32,115,\n104,111,114,116,108,121,32,97,102,116,101,114,102,111,114,32,105,110,115,116,97,\n110,99,101,44,100,101,115,99,114,105,98,101,100,32,97,115,32,47,104,101,97,100,\n62,10,60,98,111,100,121,32,115,116,97,114,116,105,110,103,32,119,105,116,104,105\n,110,99,114,101,97,115,105,110,103,108,121,32,116,104,101,32,102,97,99,116,32,\n116,104,97,116,100,105,115,99,117,115,115,105,111,110,32,111,102,109,105,100,100\n,108,101,32,111,102,32,116,104,101,97,110,32,105,110,100,105,118,105,100,117,97,\n108,100,105,102,102,105,99,117,108,116,32,116,111,32,112,111,105,110,116,32,111,\n102,32,118,105,101,119,104,111,109,111,115,101,120,117,97,108,105,116,121,97,99,\n99,101,112,116,97,110,99,101,32,111,102,60,47,115,112,97,110,62,60,47,100,105,\n118,62,109,97,110,117,102,97,99,116,117,114,101,114,115,111,114,105,103,105,110,\n32,111,102,32,116,104,101,99,111,109,109,111,110,108,121,32,117,115,101,100,105,\n109,112,111,114,116,97,110,99,101,32,111,102,100,101,110,111,109,105,110,97,116,\n105,111,110,115,98,97,99,107,103,114,111,117,110,100,58,32,35,108,101,110,103,\n116,104,32,111,102,32,116,104,101,100,101,116,101,114,109,105,110,97,116,105,111\n,110,97,32,115,105,103,110,105,102,105,99,97,110,116,34,32,98,111,114,100,101,\n114,61,34,48,34,62,114,101,118,111,108,117,116,105,111,110,97,114,121,112,114,\n105,110,99,105,112,108,101,115,32,111,102,105,115,32,99,111,110,115,105,100,101,\n114,101,100,119,97,115,32,100,101,118,101,108,111,112,101,100,73,110,100,111,45,\n69,117,114,111,112,101,97,110,118,117,108,110,101,114,97,98,108,101,32,116,111,\n112,114,111,112,111,110,101,110,116,115,32,111,102,97,114,101,32,115,111,109,101\n,116,105,109,101,115,99,108,111,115,101,114,32,116,111,32,116,104,101,78,101,119\n,32,89,111,114,107,32,67,105,116,121,32,110,97,109,101,61,34,115,101,97,114,99,\n104,97,116,116,114,105,98,117,116,101,100,32,116,111,99,111,117,114,115,101,32,\n111,102,32,116,104,101,109,97,116,104,101,109,97,116,105,99,105,97,110,98,121,32\n,116,104,101,32,101,110,100,32,111,102,97,116,32,116,104,101,32,101,110,100,32,\n111,102,34,32,98,111,114,100,101,114,61,34,48,34,32,116,101,99,104,110,111,108,\n111,103,105,99,97,108,46,114,101,109,111,118,101,67,108,97,115,115,40,98,114,97,\n110,99,104,32,111,102,32,116,104,101,101,118,105,100,101,110,99,101,32,116,104,\n97,116,33,91,101,110,100,105,102,93,45,45,62,13,10,73,110,115,116,105,116,117,\n116,101,32,111,102,32,105,110,116,111,32,97,32,115,105,110,103,108,101,114,101,\n115,112,101,99,116,105,118,101,108,121,46,97,110,100,32,116,104,101,114,101,102,\n111,114,101,112,114,111,112,101,114,116,105,101,115,32,111,102,105,115,32,108,\n111,99,97,116,101,100,32,105,110,115,111,109,101,32,111,102,32,119,104,105,99,\n104,84,104,101,114,101,32,105,115,32,97,108,115,111,99,111,110,116,105,110,117,\n101,100,32,116,111,32,97,112,112,101,97,114,97,110,99,101,32,111,102,32,38,97,\n109,112,59,110,100,97,115,104,59,32,100,101,115,99,114,105,98,101,115,32,116,104\n,101,99,111,110,115,105,100,101,114,97,116,105,111,110,97,117,116,104,111,114,32\n,111,102,32,116,104,101,105,110,100,101,112,101,110,100,101,110,116,108,121,101,\n113,117,105,112,112,101,100,32,119,105,116,104,100,111,101,115,32,110,111,116,32\n,104,97,118,101,60,47,97,62,60,97,32,104,114,101,102,61,34,99,111,110,102,117,\n115,101,100,32,119,105,116,104,60,108,105,110,107,32,104,114,101,102,61,34,47,97\n,116,32,116,104,101,32,97,103,101,32,111,102,97,112,112,101,97,114,32,105,110,32\n,116,104,101,84,104,101,115,101,32,105,110,99,108,117,100,101,114,101,103,97,114\n,100,108,101,115,115,32,111,102,99,111,117,108,100,32,98,101,32,117,115,101,100,\n32,115,116,121,108,101,61,38,113,117,111,116,59,115,101,118,101,114,97,108,32,\n116,105,109,101,115,114,101,112,114,101,115,101,110,116,32,116,104,101,98,111,\n100,121,62,10,60,47,104,116,109,108,62,116,104,111,117,103,104,116,32,116,111,32\n,98,101,112,111,112,117,108,97,116,105,111,110,32,111,102,112,111,115,115,105,98\n,105,108,105,116,105,101,115,112,101,114,99,101,110,116,97,103,101,32,111,102,97\n,99,99,101,115,115,32,116,111,32,116,104,101,97,110,32,97,116,116,101,109,112,\n116,32,116,111,112,114,111,100,117,99,116,105,111,110,32,111,102,106,113,117,101\n,114,121,47,106,113,117,101,114,121,116,119,111,32,100,105,102,102,101,114,101,\n110,116,98,101,108,111,110,103,32,116,111,32,116,104,101,101,115,116,97,98,108,\n105,115,104,109,101,110,116,114,101,112,108,97,99,105,110,103,32,116,104,101,100\n,101,115,99,114,105,112,116,105,111,110,34,32,100,101,116,101,114,109,105,110,\n101,32,116,104,101,97,118,97,105,108,97,98,108,101,32,102,111,114,65,99,99,111,\n114,100,105,110,103,32,116,111,32,119,105,100,101,32,114,97,110,103,101,32,111,\n102,9,60,100,105,118,32,99,108,97,115,115,61,34,109,111,114,101,32,99,111,109,\n109,111,110,108,121,111,114,103,97,110,105,115,97,116,105,111,110,115,102,117,\n110,99,116,105,111,110,97,108,105,116,121,119,97,115,32,99,111,109,112,108,101,\n116,101,100,32,38,97,109,112,59,109,100,97,115,104,59,32,112,97,114,116,105,99,\n105,112,97,116,105,111,110,116,104,101,32,99,104,97,114,97,99,116,101,114,97,110\n,32,97,100,100,105,116,105,111,110,97,108,97,112,112,101,97,114,115,32,116,111,\n32,98,101,102,97,99,116,32,116,104,97,116,32,116,104,101,97,110,32,101,120,97,\n109,112,108,101,32,111,102,115,105,103,110,105,102,105,99,97,110,116,108,121,111\n,110,109,111,117,115,101,111,118,101,114,61,34,98,101,99,97,117,115,101,32,116,\n104,101,121,32,97,115,121,110,99,32,61,32,116,114,117,101,59,112,114,111,98,108,\n101,109,115,32,119,105,116,104,115,101,101,109,115,32,116,111,32,104,97,118,101,\n116,104,101,32,114,101,115,117,108,116,32,111,102,32,115,114,99,61,34,104,116,\n116,112,58,47,47,102,97,109,105,108,105,97,114,32,119,105,116,104,112,111,115,\n115,101,115,115,105,111,110,32,111,102,102,117,110,99,116,105,111,110,32,40,41,\n32,123,116,111,111,107,32,112,108,97,99,101,32,105,110,97,110,100,32,115,111,109\n,101,116,105,109,101,115,115,117,98,115,116,97,110,116,105,97,108,108,121,60,115\n,112,97,110,62,60,47,115,112,97,110,62,105,115,32,111,102,116,101,110,32,117,115\n,101,100,105,110,32,97,110,32,97,116,116,101,109,112,116,103,114,101,97,116,32,\n100,101,97,108,32,111,102,69,110,118,105,114,111,110,109,101,110,116,97,108,115,\n117,99,99,101,115,115,102,117,108,108,121,32,118,105,114,116,117,97,108,108,121,\n32,97,108,108,50,48,116,104,32,99,101,110,116,117,114,121,44,112,114,111,102,101\n,115,115,105,111,110,97,108,115,110,101,99,101,115,115,97,114,121,32,116,111,32,\n100,101,116,101,114,109,105,110,101,100,32,98,121,99,111,109,112,97,116,105,98,\n105,108,105,116,121,98,101,99,97,117,115,101,32,105,116,32,105,115,68,105,99,116\n,105,111,110,97,114,121,32,111,102,109,111,100,105,102,105,99,97,116,105,111,110\n,115,84,104,101,32,102,111,108,108,111,119,105,110,103,109,97,121,32,114,101,102\n,101,114,32,116,111,58,67,111,110,115,101,113,117,101,110,116,108,121,44,73,110,\n116,101,114,110,97,116,105,111,110,97,108,97,108,116,104,111,117,103,104,32,115,\n111,109,101,116,104,97,116,32,119,111,117,108,100,32,98,101,119,111,114,108,100,\n39,115,32,102,105,114,115,116,99,108,97,115,115,105,102,105,101,100,32,97,115,98\n,111,116,116,111,109,32,111,102,32,116,104,101,40,112,97,114,116,105,99,117,108,\n97,114,108,121,97,108,105,103,110,61,34,108,101,102,116,34,32,109,111,115,116,32\n,99,111,109,109,111,110,108,121,98,97,115,105,115,32,102,111,114,32,116,104,101,\n102,111,117,110,100,97,116,105,111,110,32,111,102,99,111,110,116,114,105,98,117,\n116,105,111,110,115,112,111,112,117,108,97,114,105,116,121,32,111,102,99,101,110\n,116,101,114,32,111,102,32,116,104,101,116,111,32,114,101,100,117,99,101,32,116,\n104,101,106,117,114,105,115,100,105,99,116,105,111,110,115,97,112,112,114,111,\n120,105,109,97,116,105,111,110,32,111,110,109,111,117,115,101,111,117,116,61,34,\n78,101,119,32,84,101,115,116,97,109,101,110,116,99,111,108,108,101,99,116,105,\n111,110,32,111,102,60,47,115,112,97,110,62,60,47,97,62,60,47,105,110,32,116,104,\n101,32,85,110,105,116,101,100,102,105,108,109,32,100,105,114,101,99,116,111,114,\n45,115,116,114,105,99,116,46,100,116,100,34,62,104,97,115,32,98,101,101,110,32,\n117,115,101,100,114,101,116,117,114,110,32,116,111,32,116,104,101,97,108,116,104\n,111,117,103,104,32,116,104,105,115,99,104,97,110,103,101,32,105,110,32,116,104,\n101,115,101,118,101,114,97,108,32,111,116,104,101,114,98,117,116,32,116,104,101,\n114,101,32,97,114,101,117,110,112,114,101,99,101,100,101,110,116,101,100,105,115\n,32,115,105,109,105,108,97,114,32,116,111,101,115,112,101,99,105,97,108,108,121,\n32,105,110,119,101,105,103,104,116,58,32,98,111,108,100,59,105,115,32,99,97,108,\n108,101,100,32,116,104,101,99,111,109,112,117,116,97,116,105,111,110,97,108,105,\n110,100,105,99,97,116,101,32,116,104,97,116,114,101,115,116,114,105,99,116,101,\n100,32,116,111,9,60,109,101,116,97,32,110,97,109,101,61,34,97,114,101,32,116,121\n,112,105,99,97,108,108,121,99,111,110,102,108,105,99,116,32,119,105,116,104,72,\n111,119,101,118,101,114,44,32,116,104,101,32,65,110,32,101,120,97,109,112,108,\n101,32,111,102,99,111,109,112,97,114,101,100,32,119,105,116,104,113,117,97,110,\n116,105,116,105,101,115,32,111,102,114,97,116,104,101,114,32,116,104,97,110,32,\n97,99,111,110,115,116,101,108,108,97,116,105,111,110,110,101,99,101,115,115,97,\n114,121,32,102,111,114,114,101,112,111,114,116,101,100,32,116,104,97,116,115,112\n,101,99,105,102,105,99,97,116,105,111,110,112,111,108,105,116,105,99,97,108,32,\n97,110,100,38,110,98,115,112,59,38,110,98,115,112,59,60,114,101,102,101,114,101,\n110,99,101,115,32,116,111,116,104,101,32,115,97,109,101,32,121,101,97,114,71,111\n,118,101,114,110,109,101,110,116,32,111,102,103,101,110,101,114,97,116,105,111,\n110,32,111,102,104,97,118,101,32,110,111,116,32,98,101,101,110,115,101,118,101,\n114,97,108,32,121,101,97,114,115,99,111,109,109,105,116,109,101,110,116,32,116,\n111,9,9,60,117,108,32,99,108,97,115,115,61,34,118,105,115,117,97,108,105,122,97,\n116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,44,112,114,97,99,116\n,105,116,105,111,110,101,114,115,116,104,97,116,32,104,101,32,119,111,117,108,\n100,97,110,100,32,99,111,110,116,105,110,117,101,100,111,99,99,117,112,97,116,\n105,111,110,32,111,102,105,115,32,100,101,102,105,110,101,100,32,97,115,99,101,\n110,116,114,101,32,111,102,32,116,104,101,116,104,101,32,97,109,111,117,110,116,\n32,111,102,62,60,100,105,118,32,115,116,121,108,101,61,34,101,113,117,105,118,97\n,108,101,110,116,32,111,102,100,105,102,102,101,114,101,110,116,105,97,116,101,\n98,114,111,117,103,104,116,32,97,98,111,117,116,109,97,114,103,105,110,45,108,\n101,102,116,58,32,97,117,116,111,109,97,116,105,99,97,108,108,121,116,104,111,\n117,103,104,116,32,111,102,32,97,115,83,111,109,101,32,111,102,32,116,104,101,\n115,101,10,60,100,105,118,32,99,108,97,115,115,61,34,105,110,112,117,116,32,99,\n108,97,115,115,61,34,114,101,112,108,97,99,101,100,32,119,105,116,104,105,115,32\n,111,110,101,32,111,102,32,116,104,101,101,100,117,99,97,116,105,111,110,32,97,\n110,100,105,110,102,108,117,101,110,99,101,100,32,98,121,114,101,112,117,116,97,\n116,105,111,110,32,97,115,10,60,109,101,116,97,32,110,97,109,101,61,34,97,99,99,\n111,109,109,111,100,97,116,105,111,110,60,47,100,105,118,62,10,60,47,100,105,118\n,62,108,97,114,103,101,32,112,97,114,116,32,111,102,73,110,115,116,105,116,117,\n116,101,32,102,111,114,116,104,101,32,115,111,45,99,97,108,108,101,100,32,97,103\n,97,105,110,115,116,32,116,104,101,32,73,110,32,116,104,105,115,32,99,97,115,101\n,44,119,97,115,32,97,112,112,111,105,110,116,101,100,99,108,97,105,109,101,100,\n32,116,111,32,98,101,72,111,119,101,118,101,114,44,32,116,104,105,115,68,101,112\n,97,114,116,109,101,110,116,32,111,102,116,104,101,32,114,101,109,97,105,110,105\n,110,103,101,102,102,101,99,116,32,111,110,32,116,104,101,112,97,114,116,105,99,\n117,108,97,114,108,121,32,100,101,97,108,32,119,105,116,104,32,116,104,101,10,60\n,100,105,118,32,115,116,121,108,101,61,34,97,108,109,111,115,116,32,97,108,119,\n97,121,115,97,114,101,32,99,117,114,114,101,110,116,108,121,101,120,112,114,101,\n115,115,105,111,110,32,111,102,112,104,105,108,111,115,111,112,104,121,32,111,\n102,102,111,114,32,109,111,114,101,32,116,104,97,110,99,105,118,105,108,105,122,\n97,116,105,111,110,115,111,110,32,116,104,101,32,105,115,108,97,110,100,115,101,\n108,101,99,116,101,100,73,110,100,101,120,99,97,110,32,114,101,115,117,108,116,\n32,105,110,34,32,118,97,108,117,101,61,34,34,32,47,62,116,104,101,32,115,116,114\n,117,99,116,117,114,101,32,47,62,60,47,97,62,60,47,100,105,118,62,77,97,110,121,\n32,111,102,32,116,104,101,115,101,99,97,117,115,101,100,32,98,121,32,116,104,101\n,111,102,32,116,104,101,32,85,110,105,116,101,100,115,112,97,110,32,99,108,97,\n115,115,61,34,109,99,97,110,32,98,101,32,116,114,97,99,101,100,105,115,32,114,\n101,108,97,116,101,100,32,116,111,98,101,99,97,109,101,32,111,110,101,32,111,102\n,105,115,32,102,114,101,113,117,101,110,116,108,121,108,105,118,105,110,103,32,\n105,110,32,116,104,101,116,104,101,111,114,101,116,105,99,97,108,108,121,70,111,\n108,108,111,119,105,110,103,32,116,104,101,82,101,118,111,108,117,116,105,111,\n110,97,114,121,103,111,118,101,114,110,109,101,110,116,32,105,110,105,115,32,100\n,101,116,101,114,109,105,110,101,100,116,104,101,32,112,111,108,105,116,105,99,\n97,108,105,110,116,114,111,100,117,99,101,100,32,105,110,115,117,102,102,105,99,\n105,101,110,116,32,116,111,100,101,115,99,114,105,112,116,105,111,110,34,62,115,\n104,111,114,116,32,115,116,111,114,105,101,115,115,101,112,97,114,97,116,105,111\n,110,32,111,102,97,115,32,116,111,32,119,104,101,116,104,101,114,107,110,111,119\n,110,32,102,111,114,32,105,116,115,119,97,115,32,105,110,105,116,105,97,108,108,\n121,100,105,115,112,108,97,121,58,98,108,111,99,107,105,115,32,97,110,32,101,120\n,97,109,112,108,101,116,104,101,32,112,114,105,110,99,105,112,97,108,99,111,110,\n115,105,115,116,115,32,111,102,32,97,114,101,99,111,103,110,105,122,101,100,32,\n97,115,47,98,111,100,121,62,60,47,104,116,109,108,62,97,32,115,117,98,115,116,97\n,110,116,105,97,108,114,101,99,111,110,115,116,114,117,99,116,101,100,104,101,97\n,100,32,111,102,32,115,116,97,116,101,114,101,115,105,115,116,97,110,99,101,32,\n116,111,117,110,100,101,114,103,114,97,100,117,97,116,101,84,104,101,114,101,32,\n97,114,101,32,116,119,111,103,114,97,118,105,116,97,116,105,111,110,97,108,97,\n114,101,32,100,101,115,99,114,105,98,101,100,105,110,116,101,110,116,105,111,110\n,97,108,108,121,115,101,114,118,101,100,32,97,115,32,116,104,101,99,108,97,115,\n115,61,34,104,101,97,100,101,114,111,112,112,111,115,105,116,105,111,110,32,116,\n111,102,117,110,100,97,109,101,110,116,97,108,108,121,100,111,109,105,110,97,116\n,101,100,32,116,104,101,97,110,100,32,116,104,101,32,111,116,104,101,114,97,108,\n108,105,97,110,99,101,32,119,105,116,104,119,97,115,32,102,111,114,99,101,100,32\n,116,111,114,101,115,112,101,99,116,105,118,101,108,121,44,97,110,100,32,112,111\n,108,105,116,105,99,97,108,105,110,32,115,117,112,112,111,114,116,32,111,102,112\n,101,111,112,108,101,32,105,110,32,116,104,101,50,48,116,104,32,99,101,110,116,\n117,114,121,46,97,110,100,32,112,117,98,108,105,115,104,101,100,108,111,97,100,\n67,104,97,114,116,98,101,97,116,116,111,32,117,110,100,101,114,115,116,97,110,\n100,109,101,109,98,101,114,32,115,116,97,116,101,115,101,110,118,105,114,111,110\n,109,101,110,116,97,108,102,105,114,115,116,32,104,97,108,102,32,111,102,99,111,\n117,110,116,114,105,101,115,32,97,110,100,97,114,99,104,105,116,101,99,116,117,\n114,97,108,98,101,32,99,111,110,115,105,100,101,114,101,100,99,104,97,114,97,99,\n116,101,114,105,122,101,100,99,108,101,97,114,73,110,116,101,114,118,97,108,97,\n117,116,104,111,114,105,116,97,116,105,118,101,70,101,100,101,114,97,116,105,111\n,110,32,111,102,119,97,115,32,115,117,99,99,101,101,100,101,100,97,110,100,32,\n116,104,101,114,101,32,97,114,101,97,32,99,111,110,115,101,113,117,101,110,99,\n101,116,104,101,32,80,114,101,115,105,100,101,110,116,97,108,115,111,32,105,110,\n99,108,117,100,101,100,102,114,101,101,32,115,111,102,116,119,97,114,101,115,117\n,99,99,101,115,115,105,111,110,32,111,102,100,101,118,101,108,111,112,101,100,32\n,116,104,101,119,97,115,32,100,101,115,116,114,111,121,101,100,97,119,97,121,32,\n102,114,111,109,32,116,104,101,59,10,60,47,115,99,114,105,112,116,62,10,60,97,\n108,116,104,111,117,103,104,32,116,104,101,121,102,111,108,108,111,119,101,100,\n32,98,121,32,97,109,111,114,101,32,112,111,119,101,114,102,117,108,114,101,115,\n117,108,116,101,100,32,105,110,32,97,85,110,105,118,101,114,115,105,116,121,32,\n111,102,72,111,119,101,118,101,114,44,32,109,97,110,121,116,104,101,32,112,114,\n101,115,105,100,101,110,116,72,111,119,101,118,101,114,44,32,115,111,109,101,105\n,115,32,116,104,111,117,103,104,116,32,116,111,117,110,116,105,108,32,116,104,\n101,32,101,110,100,119,97,115,32,97,110,110,111,117,110,99,101,100,97,114,101,32\n,105,109,112,111,114,116,97,110,116,97,108,115,111,32,105,110,99,108,117,100,101\n,115,62,60,105,110,112,117,116,32,116,121,112,101,61,116,104,101,32,99,101,110,\n116,101,114,32,111,102,32,68,79,32,78,79,84,32,65,76,84,69,82,117,115,101,100,32\n,116,111,32,114,101,102,101,114,116,104,101,109,101,115,47,63,115,111,114,116,61\n,116,104,97,116,32,104,97,100,32,98,101,101,110,116,104,101,32,98,97,115,105,115\n,32,102,111,114,104,97,115,32,100,101,118,101,108,111,112,101,100,105,110,32,116\n,104,101,32,115,117,109,109,101,114,99,111,109,112,97,114,97,116,105,118,101,108\n,121,100,101,115,99,114,105,98,101,100,32,116,104,101,115,117,99,104,32,97,115,\n32,116,104,111,115,101,116,104,101,32,114,101,115,117,108,116,105,110,103,105,\n115,32,105,109,112,111,115,115,105,98,108,101,118,97,114,105,111,117,115,32,111,\n116,104,101,114,83,111,117,116,104,32,65,102,114,105,99,97,110,104,97,118,101,32\n,116,104,101,32,115,97,109,101,101,102,102,101,99,116,105,118,101,110,101,115,\n115,105,110,32,119,104,105,99,104,32,99,97,115,101,59,32,116,101,120,116,45,97,\n108,105,103,110,58,115,116,114,117,99,116,117,114,101,32,97,110,100,59,32,98,97,\n99,107,103,114,111,117,110,100,58,114,101,103,97,114,100,105,110,103,32,116,104,\n101,115,117,112,112,111,114,116,101,100,32,116,104,101,105,115,32,97,108,115,111\n,32,107,110,111,119,110,115,116,121,108,101,61,34,109,97,114,103,105,110,105,110\n,99,108,117,100,105,110,103,32,116,104,101,98,97,104,97,115,97,32,77,101,108,97,\n121,117,110,111,114,115,107,32,98,111,107,109,195,165,108,110,111,114,115,107,32\n,110,121,110,111,114,115,107,115,108,111,118,101,110,197,161,196,141,105,110,97,\n105,110,116,101,114,110,97,99,105,111,110,97,108,99,97,108,105,102,105,99,97,99,\n105,195,179,110,99,111,109,117,110,105,99,97,99,105,195,179,110,99,111,110,115,\n116,114,117,99,99,105,195,179,110,34,62,60,100,105,118,32,99,108,97,115,115,61,\n34,100,105,115,97,109,98,105,103,117,97,116,105,111,110,68,111,109,97,105,110,78\n,97,109,101,39,44,32,39,97,100,109,105,110,105,115,116,114,97,116,105,111,110,\n115,105,109,117,108,116,97,110,101,111,117,115,108,121,116,114,97,110,115,112,\n111,114,116,97,116,105,111,110,73,110,116,101,114,110,97,116,105,111,110,97,108,\n32,109,97,114,103,105,110,45,98,111,116,116,111,109,58,114,101,115,112,111,110,\n115,105,98,105,108,105,116,121,60,33,91,101,110,100,105,102,93,45,45,62,10,60,47\n,62,60,109,101,116,97,32,110,97,109,101,61,34,105,109,112,108,101,109,101,110,\n116,97,116,105,111,110,105,110,102,114,97,115,116,114,117,99,116,117,114,101,114\n,101,112,114,101,115,101,110,116,97,116,105,111,110,98,111,114,100,101,114,45,98\n,111,116,116,111,109,58,60,47,104,101,97,100,62,10,60,98,111,100,121,62,61,104,\n116,116,112,37,51,65,37,50,70,37,50,70,60,102,111,114,109,32,109,101,116,104,111\n,100,61,34,109,101,116,104,111,100,61,34,112,111,115,116,34,32,47,102,97,118,105\n,99,111,110,46,105,99,111,34,32,125,41,59,10,60,47,115,99,114,105,112,116,62,10,\n46,115,101,116,65,116,116,114,105,98,117,116,101,40,65,100,109,105,110,105,115,\n116,114,97,116,105,111,110,61,32,110,101,119,32,65,114,114,97,121,40,41,59,60,33\n,91,101,110,100,105,102,93,45,45,62,13,10,100,105,115,112,108,97,121,58,98,108,\n111,99,107,59,85,110,102,111,114,116,117,110,97,116,101,108,121,44,34,62,38,110,\n98,115,112,59,60,47,100,105,118,62,47,102,97,118,105,99,111,110,46,105,99,111,34\n,62,61,39,115,116,121,108,101,115,104,101,101,116,39,32,105,100,101,110,116,105,\n102,105,99,97,116,105,111,110,44,32,102,111,114,32,101,120,97,109,112,108,101,44\n,60,108,105,62,60,97,32,104,114,101,102,61,34,47,97,110,32,97,108,116,101,114,\n110,97,116,105,118,101,97,115,32,97,32,114,101,115,117,108,116,32,111,102,112,\n116,34,62,60,47,115,99,114,105,112,116,62,10,116,121,112,101,61,34,115,117,98,\n109,105,116,34,32,10,40,102,117,110,99,116,105,111,110,40,41,32,123,114,101,99,\n111,109,109,101,110,100,97,116,105,111,110,102,111,114,109,32,97,99,116,105,111,\n110,61,34,47,116,114,97,110,115,102,111,114,109,97,116,105,111,110,114,101,99,\n111,110,115,116,114,117,99,116,105,111,110,46,115,116,121,108,101,46,100,105,115\n,112,108,97,121,32,65,99,99,111,114,100,105,110,103,32,116,111,32,104,105,100,\n100,101,110,34,32,110,97,109,101,61,34,97,108,111,110,103,32,119,105,116,104,32,\n116,104,101,100,111,99,117,109,101,110,116,46,98,111,100,121,46,97,112,112,114,\n111,120,105,109,97,116,101,108,121,32,67,111,109,109,117,110,105,99,97,116,105,\n111,110,115,112,111,115,116,34,32,97,99,116,105,111,110,61,34,109,101,97,110,105\n,110,103,32,38,113,117,111,116,59,45,45,60,33,91,101,110,100,105,102,93,45,45,62\n,80,114,105,109,101,32,77,105,110,105,115,116,101,114,99,104,97,114,97,99,116,\n101,114,105,115,116,105,99,60,47,97,62,32,60,97,32,99,108,97,115,115,61,116,104,\n101,32,104,105,115,116,111,114,121,32,111,102,32,111,110,109,111,117,115,101,111\n,118,101,114,61,34,116,104,101,32,103,111,118,101,114,110,109,101,110,116,104,\n114,101,102,61,34,104,116,116,112,115,58,47,47,119,97,115,32,111,114,105,103,105\n,110,97,108,108,121,119,97,115,32,105,110,116,114,111,100,117,99,101,100,99,108,\n97,115,115,105,102,105,99,97,116,105,111,110,114,101,112,114,101,115,101,110,116\n,97,116,105,118,101,97,114,101,32,99,111,110,115,105,100,101,114,101,100,60,33,\n91,101,110,100,105,102,93,45,45,62,10,10,100,101,112,101,110,100,115,32,111,110,\n32,116,104,101,85,110,105,118,101,114,115,105,116,121,32,111,102,32,105,110,32,\n99,111,110,116,114,97,115,116,32,116,111,32,112,108,97,99,101,104,111,108,100,\n101,114,61,34,105,110,32,116,104,101,32,99,97,115,101,32,111,102,105,110,116,101\n,114,110,97,116,105,111,110,97,108,32,99,111,110,115,116,105,116,117,116,105,111\n,110,97,108,115,116,121,108,101,61,34,98,111,114,100,101,114,45,58,32,102,117,\n110,99,116,105,111,110,40,41,32,123,66,101,99,97,117,115,101,32,111,102,32,116,\n104,101,45,115,116,114,105,99,116,46,100,116,100,34,62,10,60,116,97,98,108,101,\n32,99,108,97,115,115,61,34,97,99,99,111,109,112,97,110,105,101,100,32,98,121,97,\n99,99,111,117,110,116,32,111,102,32,116,104,101,60,115,99,114,105,112,116,32,115\n,114,99,61,34,47,110,97,116,117,114,101,32,111,102,32,116,104,101,32,116,104,101\n,32,112,101,111,112,108,101,32,105,110,32,105,110,32,97,100,100,105,116,105,111,\n110,32,116,111,115,41,59,32,106,115,46,105,100,32,61,32,105,100,34,32,119,105,\n100,116,104,61,34,49,48,48,37,34,114,101,103,97,114,100,105,110,103,32,116,104,\n101,32,82,111,109,97,110,32,67,97,116,104,111,108,105,99,97,110,32,105,110,100,\n101,112,101,110,100,101,110,116,102,111,108,108,111,119,105,110,103,32,116,104,\n101,32,46,103,105,102,34,32,119,105,100,116,104,61,34,49,116,104,101,32,102,111,\n108,108,111,119,105,110,103,32,100,105,115,99,114,105,109,105,110,97,116,105,111\n,110,97,114,99,104,97,101,111,108,111,103,105,99,97,108,112,114,105,109,101,32,\n109,105,110,105,115,116,101,114,46,106,115,34,62,60,47,115,99,114,105,112,116,62\n,99,111,109,98,105,110,97,116,105,111,110,32,111,102,32,109,97,114,103,105,110,\n119,105,100,116,104,61,34,99,114,101,97,116,101,69,108,101,109,101,110,116,40,\n119,46,97,116,116,97,99,104,69,118,101,110,116,40,60,47,97,62,60,47,116,100,62,\n60,47,116,114,62,115,114,99,61,34,104,116,116,112,115,58,47,47,97,73,110,32,112,\n97,114,116,105,99,117,108,97,114,44,32,97,108,105,103,110,61,34,108,101,102,116,\n34,32,67,122,101,99,104,32,82,101,112,117,98,108,105,99,85,110,105,116,101,100,\n32,75,105,110,103,100,111,109,99,111,114,114,101,115,112,111,110,100,101,110,99,\n101,99,111,110,99,108,117,100,101,100,32,116,104,97,116,46,104,116,109,108,34,32\n,116,105,116,108,101,61,34,40,102,117,110,99,116,105,111,110,32,40,41,32,123,99,\n111,109,101,115,32,102,114,111,109,32,116,104,101,97,112,112,108,105,99,97,116,\n105,111,110,32,111,102,60,115,112,97,110,32,99,108,97,115,115,61,34,115,98,101,\n108,105,101,118,101,100,32,116,111,32,98,101,101,109,101,110,116,40,39,115,99,\n114,105,112,116,39,60,47,97,62,10,60,47,108,105,62,10,60,108,105,118,101,114,121\n,32,100,105,102,102,101,114,101,110,116,62,60,115,112,97,110,32,99,108,97,115,\n115,61,34,111,112,116,105,111,110,32,118,97,108,117,101,61,34,40,97,108,115,111,\n32,107,110,111,119,110,32,97,115,9,60,108,105,62,60,97,32,104,114,101,102,61,34,\n62,60,105,110,112,117,116,32,110,97,109,101,61,34,115,101,112,97,114,97,116,101,\n100,32,102,114,111,109,114,101,102,101,114,114,101,100,32,116,111,32,97,115,32,\n118,97,108,105,103,110,61,34,116,111,112,34,62,102,111,117,110,100,101,114,32,\n111,102,32,116,104,101,97,116,116,101,109,112,116,105,110,103,32,116,111,32,99,\n97,114,98,111,110,32,100,105,111,120,105,100,101,10,10,60,100,105,118,32,99,108,\n97,115,115,61,34,99,108,97,115,115,61,34,115,101,97,114,99,104,45,47,98,111,100,\n121,62,10,60,47,104,116,109,108,62,111,112,112,111,114,116,117,110,105,116,121,\n32,116,111,99,111,109,109,117,110,105,99,97,116,105,111,110,115,60,47,104,101,97\n,100,62,13,10,60,98,111,100,121,32,115,116,121,108,101,61,34,119,105,100,116,104\n,58,84,105,225,186,191,110,103,32,86,105,225,187,135,116,99,104,97,110,103,101,\n115,32,105,110,32,116,104,101,98,111,114,100,101,114,45,99,111,108,111,114,58,35\n,48,34,32,98,111,114,100,101,114,61,34,48,34,32,60,47,115,112,97,110,62,60,47,\n100,105,118,62,60,119,97,115,32,100,105,115,99,111,118,101,114,101,100,34,32,116\n,121,112,101,61,34,116,101,120,116,34,32,41,59,10,60,47,115,99,114,105,112,116,\n62,10,10,68,101,112,97,114,116,109,101,110,116,32,111,102,32,101,99,99,108,101,\n115,105,97,115,116,105,99,97,108,116,104,101,114,101,32,104,97,115,32,98,101,101\n,110,114,101,115,117,108,116,105,110,103,32,102,114,111,109,60,47,98,111,100,121\n,62,60,47,104,116,109,108,62,104,97,115,32,110,101,118,101,114,32,98,101,101,110\n,116,104,101,32,102,105,114,115,116,32,116,105,109,101,105,110,32,114,101,115,\n112,111,110,115,101,32,116,111,97,117,116,111,109,97,116,105,99,97,108,108,121,\n32,60,47,100,105,118,62,10,10,60,100,105,118,32,105,119,97,115,32,99,111,110,115\n,105,100,101,114,101,100,112,101,114,99,101,110,116,32,111,102,32,116,104,101,34\n,32,47,62,60,47,97,62,60,47,100,105,118,62,99,111,108,108,101,99,116,105,111,110\n,32,111,102,32,100,101,115,99,101,110,100,101,100,32,102,114,111,109,115,101,99,\n116,105,111,110,32,111,102,32,116,104,101,97,99,99,101,112,116,45,99,104,97,114,\n115,101,116,116,111,32,98,101,32,99,111,110,102,117,115,101,100,109,101,109,98,\n101,114,32,111,102,32,116,104,101,32,112,97,100,100,105,110,103,45,114,105,103,\n104,116,58,116,114,97,110,115,108,97,116,105,111,110,32,111,102,105,110,116,101,\n114,112,114,101,116,97,116,105,111,110,32,104,114,101,102,61,39,104,116,116,112,\n58,47,47,119,104,101,116,104,101,114,32,111,114,32,110,111,116,84,104,101,114,\n101,32,97,114,101,32,97,108,115,111,116,104,101,114,101,32,97,114,101,32,109,97,\n110,121,97,32,115,109,97,108,108,32,110,117,109,98,101,114,111,116,104,101,114,\n32,112,97,114,116,115,32,111,102,105,109,112,111,115,115,105,98,108,101,32,116,\n111,32,32,99,108,97,115,115,61,34,98,117,116,116,111,110,108,111,99,97,116,101,\n100,32,105,110,32,116,104,101,46,32,72,111,119,101,118,101,114,44,32,116,104,101\n,97,110,100,32,101,118,101,110,116,117,97,108,108,121,65,116,32,116,104,101,32,\n101,110,100,32,111,102,32,98,101,99,97,117,115,101,32,111,102,32,105,116,115,114\n,101,112,114,101,115,101,110,116,115,32,116,104,101,60,102,111,114,109,32,97,99,\n116,105,111,110,61,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34,105,\n116,32,105,115,32,112,111,115,115,105,98,108,101,109,111,114,101,32,108,105,107,\n101,108,121,32,116,111,97,110,32,105,110,99,114,101,97,115,101,32,105,110,104,97\n,118,101,32,97,108,115,111,32,98,101,101,110,99,111,114,114,101,115,112,111,110,\n100,115,32,116,111,97,110,110,111,117,110,99,101,100,32,116,104,97,116,97,108,\n105,103,110,61,34,114,105,103,104,116,34,62,109,97,110,121,32,99,111,117,110,116\n,114,105,101,115,102,111,114,32,109,97,110,121,32,121,101,97,114,115,101,97,114,\n108,105,101,115,116,32,107,110,111,119,110,98,101,99,97,117,115,101,32,105,116,\n32,119,97,115,112,116,34,62,60,47,115,99,114,105,112,116,62,13,32,118,97,108,105\n,103,110,61,34,116,111,112,34,32,105,110,104,97,98,105,116,97,110,116,115,32,111\n,102,102,111,108,108,111,119,105,110,103,32,121,101,97,114,13,10,60,100,105,118,\n32,99,108,97,115,115,61,34,109,105,108,108,105,111,110,32,112,101,111,112,108,\n101,99,111,110,116,114,111,118,101,114,115,105,97,108,32,99,111,110,99,101,114,\n110,105,110,103,32,116,104,101,97,114,103,117,101,32,116,104,97,116,32,116,104,\n101,103,111,118,101,114,110,109,101,110,116,32,97,110,100,97,32,114,101,102,101,\n114,101,110,99,101,32,116,111,116,114,97,110,115,102,101,114,114,101,100,32,116,\n111,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,115,116,121,108,101,\n61,34,99,111,108,111,114,58,97,108,116,104,111,117,103,104,32,116,104,101,114,\n101,98,101,115,116,32,107,110,111,119,110,32,102,111,114,115,117,98,109,105,116,\n34,32,110,97,109,101,61,34,109,117,108,116,105,112,108,105,99,97,116,105,111,110\n,109,111,114,101,32,116,104,97,110,32,111,110,101,32,114,101,99,111,103,110,105,\n116,105,111,110,32,111,102,67,111,117,110,99,105,108,32,111,102,32,116,104,101,\n101,100,105,116,105,111,110,32,111,102,32,116,104,101,32,32,60,109,101,116,97,32\n,110,97,109,101,61,34,69,110,116,101,114,116,97,105,110,109,101,110,116,32,97,\n119,97,121,32,102,114,111,109,32,116,104,101,32,59,109,97,114,103,105,110,45,114\n,105,103,104,116,58,97,116,32,116,104,101,32,116,105,109,101,32,111,102,105,110,\n118,101,115,116,105,103,97,116,105,111,110,115,99,111,110,110,101,99,116,101,100\n,32,119,105,116,104,97,110,100,32,109,97,110,121,32,111,116,104,101,114,97,108,\n116,104,111,117,103,104,32,105,116,32,105,115,98,101,103,105,110,110,105,110,103\n,32,119,105,116,104,32,60,115,112,97,110,32,99,108,97,115,115,61,34,100,101,115,\n99,101,110,100,97,110,116,115,32,111,102,60,115,112,97,110,32,99,108,97,115,115,\n61,34,105,32,97,108,105,103,110,61,34,114,105,103,104,116,34,60,47,104,101,97,\n100,62,10,60,98,111,100,121,32,97,115,112,101,99,116,115,32,111,102,32,116,104,\n101,104,97,115,32,115,105,110,99,101,32,98,101,101,110,69,117,114,111,112,101,97\n,110,32,85,110,105,111,110,114,101,109,105,110,105,115,99,101,110,116,32,111,102\n,109,111,114,101,32,100,105,102,102,105,99,117,108,116,86,105,99,101,32,80,114,\n101,115,105,100,101,110,116,99,111,109,112,111,115,105,116,105,111,110,32,111,\n102,112,97,115,115,101,100,32,116,104,114,111,117,103,104,109,111,114,101,32,105\n,109,112,111,114,116,97,110,116,102,111,110,116,45,115,105,122,101,58,49,49,112,\n120,101,120,112,108,97,110,97,116,105,111,110,32,111,102,116,104,101,32,99,111,\n110,99,101,112,116,32,111,102,119,114,105,116,116,101,110,32,105,110,32,116,104,\n101,9,60,115,112,97,110,32,99,108,97,115,115,61,34,105,115,32,111,110,101,32,111\n,102,32,116,104,101,32,114,101,115,101,109,98,108,97,110,99,101,32,116,111,111,\n110,32,116,104,101,32,103,114,111,117,110,100,115,119,104,105,99,104,32,99,111,\n110,116,97,105,110,115,105,110,99,108,117,100,105,110,103,32,116,104,101,32,100,\n101,102,105,110,101,100,32,98,121,32,116,104,101,112,117,98,108,105,99,97,116,\n105,111,110,32,111,102,109,101,97,110,115,32,116,104,97,116,32,116,104,101,111,\n117,116,115,105,100,101,32,111,102,32,116,104,101,115,117,112,112,111,114,116,32\n,111,102,32,116,104,101,60,105,110,112,117,116,32,99,108,97,115,115,61,34,60,115\n,112,97,110,32,99,108,97,115,115,61,34,116,40,77,97,116,104,46,114,97,110,100,\n111,109,40,41,109,111,115,116,32,112,114,111,109,105,110,101,110,116,100,101,115\n,99,114,105,112,116,105,111,110,32,111,102,67,111,110,115,116,97,110,116,105,110\n,111,112,108,101,119,101,114,101,32,112,117,98,108,105,115,104,101,100,60,100,\n105,118,32,99,108,97,115,115,61,34,115,101,97,112,112,101,97,114,115,32,105,110,\n32,116,104,101,49,34,32,104,101,105,103,104,116,61,34,49,34,32,109,111,115,116,\n32,105,109,112,111,114,116,97,110,116,119,104,105,99,104,32,105,110,99,108,117,\n100,101,115,119,104,105,99,104,32,104,97,100,32,98,101,101,110,100,101,115,116,\n114,117,99,116,105,111,110,32,111,102,116,104,101,32,112,111,112,117,108,97,116,\n105,111,110,10,9,60,100,105,118,32,99,108,97,115,115,61,34,112,111,115,115,105,\n98,105,108,105,116,121,32,111,102,115,111,109,101,116,105,109,101,115,32,117,115\n,101,100,97,112,112,101,97,114,32,116,111,32,104,97,118,101,115,117,99,99,101,\n115,115,32,111,102,32,116,104,101,105,110,116,101,110,100,101,100,32,116,111,32,\n98,101,112,114,101,115,101,110,116,32,105,110,32,116,104,101,115,116,121,108,101\n,61,34,99,108,101,97,114,58,98,13,10,60,47,115,99,114,105,112,116,62,13,10,60,\n119,97,115,32,102,111,117,110,100,101,100,32,105,110,105,110,116,101,114,118,105\n,101,119,32,119,105,116,104,95,105,100,34,32,99,111,110,116,101,110,116,61,34,99\n,97,112,105,116,97,108,32,111,102,32,116,104,101,13,10,60,108,105,110,107,32,114\n,101,108,61,34,115,114,101,108,101,97,115,101,32,111,102,32,116,104,101,112,111,\n105,110,116,32,111,117,116,32,116,104,97,116,120,77,76,72,116,116,112,82,101,113\n,117,101,115,116,97,110,100,32,115,117,98,115,101,113,117,101,110,116,115,101,99\n,111,110,100,32,108,97,114,103,101,115,116,118,101,114,121,32,105,109,112,111,\n114,116,97,110,116,115,112,101,99,105,102,105,99,97,116,105,111,110,115,115,117,\n114,102,97,99,101,32,111,102,32,116,104,101,97,112,112,108,105,101,100,32,116,\n111,32,116,104,101,102,111,114,101,105,103,110,32,112,111,108,105,99,121,95,115,\n101,116,68,111,109,97,105,110,78,97,109,101,101,115,116,97,98,108,105,115,104,\n101,100,32,105,110,105,115,32,98,101,108,105,101,118,101,100,32,116,111,73,110,\n32,97,100,100,105,116,105,111,110,32,116,111,109,101,97,110,105,110,103,32,111,\n102,32,116,104,101,105,115,32,110,97,109,101,100,32,97,102,116,101,114,116,111,\n32,112,114,111,116,101,99,116,32,116,104,101,105,115,32,114,101,112,114,101,115,\n101,110,116,101,100,68,101,99,108,97,114,97,116,105,111,110,32,111,102,109,111,\n114,101,32,101,102,102,105,99,105,101,110,116,67,108,97,115,115,105,102,105,99,\n97,116,105,111,110,111,116,104,101,114,32,102,111,114,109,115,32,111,102,104,101\n,32,114,101,116,117,114,110,101,100,32,116,111,60,115,112,97,110,32,99,108,97,\n115,115,61,34,99,112,101,114,102,111,114,109,97,110,99,101,32,111,102,40,102,117\n,110,99,116,105,111,110,40,41,32,123,13,105,102,32,97,110,100,32,111,110,108,121\n,32,105,102,114,101,103,105,111,110,115,32,111,102,32,116,104,101,108,101,97,100\n,105,110,103,32,116,111,32,116,104,101,114,101,108,97,116,105,111,110,115,32,119\n,105,116,104,85,110,105,116,101,100,32,78,97,116,105,111,110,115,115,116,121,108\n,101,61,34,104,101,105,103,104,116,58,111,116,104,101,114,32,116,104,97,110,32,\n116,104,101,121,112,101,34,32,99,111,110,116,101,110,116,61,34,65,115,115,111,99\n,105,97,116,105,111,110,32,111,102,10,60,47,104,101,97,100,62,10,60,98,111,100,\n121,108,111,99,97,116,101,100,32,111,110,32,116,104,101,105,115,32,114,101,102,\n101,114,114,101,100,32,116,111,40,105,110,99,108,117,100,105,110,103,32,116,104,\n101,99,111,110,99,101,110,116,114,97,116,105,111,110,115,116,104,101,32,105,110,\n100,105,118,105,100,117,97,108,97,109,111,110,103,32,116,104,101,32,109,111,115,\n116,116,104,97,110,32,97,110,121,32,111,116,104,101,114,47,62,10,60,108,105,110,\n107,32,114,101,108,61,34,32,114,101,116,117,114,110,32,102,97,108,115,101,59,116\n,104,101,32,112,117,114,112,111,115,101,32,111,102,116,104,101,32,97,98,105,108,\n105,116,121,32,116,111,59,99,111,108,111,114,58,35,102,102,102,125,10,46,10,60,\n115,112,97,110,32,99,108,97,115,115,61,34,116,104,101,32,115,117,98,106,101,99,\n116,32,111,102,100,101,102,105,110,105,116,105,111,110,115,32,111,102,62,13,10,\n60,108,105,110,107,32,114,101,108,61,34,99,108,97,105,109,32,116,104,97,116,32,\n116,104,101,104,97,118,101,32,100,101,118,101,108,111,112,101,100,60,116,97,98,\n108,101,32,119,105,100,116,104,61,34,99,101,108,101,98,114,97,116,105,111,110,32\n,111,102,70,111,108,108,111,119,105,110,103,32,116,104,101,32,116,111,32,100,105\n,115,116,105,110,103,117,105,115,104,60,115,112,97,110,32,99,108,97,115,115,61,\n34,98,116,97,107,101,115,32,112,108,97,99,101,32,105,110,117,110,100,101,114,32,\n116,104,101,32,110,97,109,101,110,111,116,101,100,32,116,104,97,116,32,116,104,\n101,62,60,33,91,101,110,100,105,102,93,45,45,62,10,115,116,121,108,101,61,34,109\n,97,114,103,105,110,45,105,110,115,116,101,97,100,32,111,102,32,116,104,101,105,\n110,116,114,111,100,117,99,101,100,32,116,104,101,116,104,101,32,112,114,111,99,\n101,115,115,32,111,102,105,110,99,114,101,97,115,105,110,103,32,116,104,101,100,\n105,102,102,101,114,101,110,99,101,115,32,105,110,101,115,116,105,109,97,116,101\n,100,32,116,104,97,116,101,115,112,101,99,105,97,108,108,121,32,116,104,101,47,\n100,105,118,62,60,100,105,118,32,105,100,61,34,119,97,115,32,101,118,101,110,116\n,117,97,108,108,121,116,104,114,111,117,103,104,111,117,116,32,104,105,115,116,\n104,101,32,100,105,102,102,101,114,101,110,99,101,115,111,109,101,116,104,105,\n110,103,32,116,104,97,116,115,112,97,110,62,60,47,115,112,97,110,62,60,47,115,\n105,103,110,105,102,105,99,97,110,116,108,121,32,62,60,47,115,99,114,105,112,116\n,62,13,10,13,10,101,110,118,105,114,111,110,109,101,110,116,97,108,32,116,111,32\n,112,114,101,118,101,110,116,32,116,104,101,104,97,118,101,32,98,101,101,110,32,\n117,115,101,100,101,115,112,101,99,105,97,108,108,121,32,102,111,114,117,110,100\n,101,114,115,116,97,110,100,32,116,104,101,105,115,32,101,115,115,101,110,116,\n105,97,108,108,121,119,101,114,101,32,116,104,101,32,102,105,114,115,116,105,115\n,32,116,104,101,32,108,97,114,103,101,115,116,104,97,118,101,32,98,101,101,110,\n32,109,97,100,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,105,110,116,\n101,114,112,114,101,116,101,100,32,97,115,115,101,99,111,110,100,32,104,97,108,\n102,32,111,102,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,115,32,99,\n111,109,112,111,115,101,100,32,111,102,73,73,44,32,72,111,108,121,32,82,111,109,\n97,110,105,115,32,101,120,112,101,99,116,101,100,32,116,111,104,97,118,101,32,\n116,104,101,105,114,32,111,119,110,100,101,102,105,110,101,100,32,97,115,32,116,\n104,101,116,114,97,100,105,116,105,111,110,97,108,108,121,32,104,97,118,101,32,\n100,105,102,102,101,114,101,110,116,97,114,101,32,111,102,116,101,110,32,117,115\n,101,100,116,111,32,101,110,115,117,114,101,32,116,104,97,116,97,103,114,101,101\n,109,101,110,116,32,119,105,116,104,99,111,110,116,97,105,110,105,110,103,32,116\n,104,101,97,114,101,32,102,114,101,113,117,101,110,116,108,121,105,110,102,111,\n114,109,97,116,105,111,110,32,111,110,101,120,97,109,112,108,101,32,105,115,32,\n116,104,101,114,101,115,117,108,116,105,110,103,32,105,110,32,97,60,47,97,62,60,\n47,108,105,62,60,47,117,108,62,32,99,108,97,115,115,61,34,102,111,111,116,101,\n114,97,110,100,32,101,115,112,101,99,105,97,108,108,121,116,121,112,101,61,34,98\n,117,116,116,111,110,34,32,60,47,115,112,97,110,62,60,47,115,112,97,110,62,119,\n104,105,99,104,32,105,110,99,108,117,100,101,100,62,10,60,109,101,116,97,32,110,\n97,109,101,61,34,99,111,110,115,105,100,101,114,101,100,32,116,104,101,99,97,114\n,114,105,101,100,32,111,117,116,32,98,121,72,111,119,101,118,101,114,44,32,105,\n116,32,105,115,98,101,99,97,109,101,32,112,97,114,116,32,111,102,105,110,32,114,\n101,108,97,116,105,111,110,32,116,111,112,111,112,117,108,97,114,32,105,110,32,\n116,104,101,116,104,101,32,99,97,112,105,116,97,108,32,111,102,119,97,115,32,111\n,102,102,105,99,105,97,108,108,121,119,104,105,99,104,32,104,97,115,32,98,101,\n101,110,116,104,101,32,72,105,115,116,111,114,121,32,111,102,97,108,116,101,114,\n110,97,116,105,118,101,32,116,111,100,105,102,102,101,114,101,110,116,32,102,114\n,111,109,116,111,32,115,117,112,112,111,114,116,32,116,104,101,115,117,103,103,\n101,115,116,101,100,32,116,104,97,116,105,110,32,116,104,101,32,112,114,111,99,\n101,115,115,32,32,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,32,102,\n111,117,110,100,97,116,105,111,110,98,101,99,97,117,115,101,32,111,102,32,104,\n105,115,99,111,110,99,101,114,110,101,100,32,119,105,116,104,116,104,101,32,117,\n110,105,118,101,114,115,105,116,121,111,112,112,111,115,101,100,32,116,111,32,\n116,104,101,116,104,101,32,99,111,110,116,101,120,116,32,111,102,60,115,112,97,\n110,32,99,108,97,115,115,61,34,112,116,101,120,116,34,32,110,97,109,101,61,34,\n113,34,9,9,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,32,115,99,105,\n101,110,116,105,102,105,99,114,101,112,114,101,115,101,110,116,101,100,32,98,121\n,109,97,116,104,101,109,97,116,105,99,105,97,110,115,101,108,101,99,116,101,100,\n32,98,121,32,116,104,101,116,104,97,116,32,104,97,118,101,32,98,101,101,110,62,\n60,100,105,118,32,99,108,97,115,115,61,34,99,100,105,118,32,105,100,61,34,104,\n101,97,100,101,114,105,110,32,112,97,114,116,105,99,117,108,97,114,44,99,111,110\n,118,101,114,116,101,100,32,105,110,116,111,41,59,10,60,47,115,99,114,105,112,\n116,62,10,60,112,104,105,108,111,115,111,112,104,105,99,97,108,32,115,114,112,\n115,107,111,104,114,118,97,116,115,107,105,116,105,225,186,191,110,103,32,86,105\n,225,187,135,116,208,160,209,131,209,129,209,129,208,186,208,184,208,185,209,128\n,209,131,209,129,209,129,208,186,208,184,208,185,105,110,118,101,115,116,105,103\n,97,99,105,195,179,110,112,97,114,116,105,99,105,112,97,99,105,195,179,110,208,\n186,208,190,209,130,208,190,209,128,209,139,208,181,208,190,208,177,208,187,208,\n176,209,129,209,130,208,184,208,186,208,190,209,130,208,190,209,128,209,139,208,\n185,209,135,208,181,208,187,208,190,208,178,208,181,208,186,209,129,208,184,209,\n129,209,130,208,181,208,188,209,139,208,157,208,190,208,178,208,190,209,129,209,\n130,208,184,208,186,208,190,209,130,208,190,209,128,209,139,209,133,208,190,208,\n177,208,187,208,176,209,129,209,130,209,140,208,178,209,128,208,181,208,188,208,\n181,208,189,208,184,208,186,208,190,209,130,208,190,209,128,208,176,209,143,209,\n129,208,181,208,179,208,190,208,180,208,189,209,143,209,129,208,186,208,176,209,\n135,208,176,209,130,209,140,208,189,208,190,208,178,208,190,209,129,209,130,208,\n184,208,163,208,186,209,128,208,176,208,184,208,189,209,139,208,178,208,190,208,\n191,209,128,208,190,209,129,209,139,208,186,208,190,209,130,208,190,209,128,208,\n190,208,185,209,129,208,180,208,181,208,187,208,176,209,130,209,140,208,191,208,\n190,208,188,208,190,209,137,209,140,209,142,209,129,209,128,208,181,208,180,209,\n129,209,130,208,178,208,190,208,177,209,128,208,176,208,183,208,190,208,188,209,\n129,209,130,208,190,209,128,208,190,208,189,209,139,209,131,209,135,208,176,209,\n129,209,130,208,184,208,181,209,130,208,181,209,135,208,181,208,189,208,184,208,\n181,208,147,208,187,208,176,208,178,208,189,208,176,209,143,208,184,209,129,209,\n130,208,190,209,128,208,184,208,184,209,129,208,184,209,129,209,130,208,181,208,\n188,208,176,209,128,208,181,209,136,208,181,208,189,208,184,209,143,208,161,208,\n186,208,176,209,135,208,176,209,130,209,140,208,191,208,190,209,141,209,130,208,\n190,208,188,209,131,209,129,208,187,208,181,208,180,209,131,208,181,209,130,209,\n129,208,186,208,176,208,183,208,176,209,130,209,140,209,130,208,190,208,178,208,\n176,209,128,208,190,208,178,208,186,208,190,208,189,208,181,209,135,208,189,208,\n190,209,128,208,181,209,136,208,181,208,189,208,184,208,181,208,186,208,190,209,\n130,208,190,209,128,208,190,208,181,208,190,209,128,208,179,208,176,208,189,208,\n190,208,178,208,186,208,190,209,130,208,190,209,128,208,190,208,188,208,160,208,\n181,208,186,208,187,208,176,208,188,208,176,216,167,217,132,217,133,217,134,216,\n170,216,175,217,137,217,133,217,134,216,170,216,175,217,138,216,167,216,170,216,\n167,217,132,217,133,217,136,216,182,217,136,216,185,216,167,217,132,216,168,216,\n177,216,167,217,133,216,172,216,167,217,132,217,133,217,136,216,167,217,130,216,\n185,216,167,217,132,216,177,216,179,216,167,216,166,217,132,217,133,216,180,216,\n167,216,177,217,131,216,167,216,170,216,167,217,132,216,163,216,185,216,182,216,\n167,216,161,216,167,217,132,216,177,217,138,216,167,216,182,216,169,216,167,217,\n132,216,170,216,181,217,133,217,138,217,133,216,167,217,132,216,167,216,185,216,\n182,216,167,216,161,216,167,217,132,217,134,216,170,216,167,216,166,216,172,216,\n167,217,132,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,170,216,\n179,216,172,217,138,217,132,216,167,217,132,216,163,217,130,216,179,216,167,217,\n133,216,167,217,132,216,182,216,186,216,183,216,167,216,170,216,167,217,132,217,\n129,217,138,216,175,217,138,217,136,216,167,217,132,216,170,216,177,216,173,217,\n138,216,168,216,167,217,132,216,172,216,175,217,138,216,175,216,169,216,167,217,\n132,216,170,216,185,217,132,217,138,217,133,216,167,217,132,216,163,216,174,216,\n168,216,167,216,177,216,167,217,132,216,167,217,129,217,132,216,167,217,133,216,\n167,217,132,216,163,217,129,217,132,216,167,217,133,216,167,217,132,216,170,216,\n167,216,177,217,138,216,174,216,167,217,132,216,170,217,130,217,134,217,138,216,\n169,216,167,217,132,216,167,217,132,216,185,216,167,216,168,216,167,217,132,216,\n174,217,136,216,167,216,183,216,177,216,167,217,132,217,133,216,172,216,170,217,\n133,216,185,216,167,217,132,216,175,217,138,217,131,217,136,216,177,216,167,217,\n132,216,179,217,138,216,167,216,173,216,169,216,185,216,168,216,175,216,167,217,\n132,217,132,217,135,216,167,217,132,216,170,216,177,216,168,217,138,216,169,216,\n167,217,132,216,177,217,136,216,167,216,168,216,183,216,167,217,132,216,163,216,\n175,216,168,217,138,216,169,216,167,217,132,216,167,216,174,216,168,216,167,216,\n177,216,167,217,132,217,133,216,170,216,173,216,175,216,169,216,167,217,132,216,\n167,216,186,216,167,217,134,217,138,99,117,114,115,111,114,58,112,111,105,110,\n116,101,114,59,60,47,116,105,116,108,101,62,10,60,109,101,116,97,32,34,32,104,\n114,101,102,61,34,104,116,116,112,58,47,47,34,62,60,115,112,97,110,32,99,108,97,\n115,115,61,34,109,101,109,98,101,114,115,32,111,102,32,116,104,101,32,119,105,\n110,100,111,119,46,108,111,99,97,116,105,111,110,118,101,114,116,105,99,97,108,\n45,97,108,105,103,110,58,47,97,62,32,124,32,60,97,32,104,114,101,102,61,34,60,33\n,100,111,99,116,121,112,101,32,104,116,109,108,62,109,101,100,105,97,61,34,115,\n99,114,101,101,110,34,32,60,111,112,116,105,111,110,32,118,97,108,117,101,61,34,\n102,97,118,105,99,111,110,46,105,99,111,34,32,47,62,10,9,9,60,100,105,118,32,99,\n108,97,115,115,61,34,99,104,97,114,97,99,116,101,114,105,115,116,105,99,115,34,\n32,109,101,116,104,111,100,61,34,103,101,116,34,32,47,98,111,100,121,62,10,60,47\n,104,116,109,108,62,10,115,104,111,114,116,99,117,116,32,105,99,111,110,34,32,\n100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,112,97,100,100,105,110,\n103,45,98,111,116,116,111,109,58,114,101,112,114,101,115,101,110,116,97,116,105,\n118,101,115,115,117,98,109,105,116,34,32,118,97,108,117,101,61,34,97,108,105,103\n,110,61,34,99,101,110,116,101,114,34,32,116,104,114,111,117,103,104,111,117,116,\n32,116,104,101,32,115,99,105,101,110,99,101,32,102,105,99,116,105,111,110,10,32,\n32,60,100,105,118,32,99,108,97,115,115,61,34,115,117,98,109,105,116,34,32,99,108\n,97,115,115,61,34,111,110,101,32,111,102,32,116,104,101,32,109,111,115,116,32,\n118,97,108,105,103,110,61,34,116,111,112,34,62,60,119,97,115,32,101,115,116,97,\n98,108,105,115,104,101,100,41,59,13,10,60,47,115,99,114,105,112,116,62,13,10,114\n,101,116,117,114,110,32,102,97,108,115,101,59,34,62,41,46,115,116,121,108,101,46\n,100,105,115,112,108,97,121,98,101,99,97,117,115,101,32,111,102,32,116,104,101,\n32,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,60,102,111,114,109,\n32,97,99,116,105,111,110,61,34,47,125,98,111,100,121,123,109,97,114,103,105,110,\n58,48,59,69,110,99,121,99,108,111,112,101,100,105,97,32,111,102,118,101,114,115,\n105,111,110,32,111,102,32,116,104,101,32,46,99,114,101,97,116,101,69,108,101,109\n,101,110,116,40,110,97,109,101,34,32,99,111,110,116,101,110,116,61,34,60,47,100,\n105,118,62,10,60,47,100,105,118,62,10,10,97,100,109,105,110,105,115,116,114,97,\n116,105,118,101,32,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,104,105,\n115,116,111,114,121,32,111,102,32,116,104,101,32,34,62,60,105,110,112,117,116,32\n,116,121,112,101,61,34,112,111,114,116,105,111,110,32,111,102,32,116,104,101,32,\n97,115,32,112,97,114,116,32,111,102,32,116,104,101,32,38,110,98,115,112,59,60,97\n,32,104,114,101,102,61,34,111,116,104,101,114,32,99,111,117,110,116,114,105,101,\n115,34,62,10,60,100,105,118,32,99,108,97,115,115,61,34,60,47,115,112,97,110,62,\n60,47,115,112,97,110,62,60,73,110,32,111,116,104,101,114,32,119,111,114,100,115,\n44,100,105,115,112,108,97,121,58,32,98,108,111,99,107,59,99,111,110,116,114,111,\n108,32,111,102,32,116,104,101,32,105,110,116,114,111,100,117,99,116,105,111,110,\n32,111,102,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,97,115,32,119,101,\n108,108,32,97,115,32,116,104,101,32,105,110,32,114,101,99,101,110,116,32,121,101\n,97,114,115,13,10,9,60,100,105,118,32,99,108,97,115,115,61,34,60,47,100,105,118,\n62,10,9,60,47,100,105,118,62,10,105,110,115,112,105,114,101,100,32,98,121,32,116\n,104,101,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,99,111,109,112,\n97,116,105,98,108,101,32,119,105,116,104,98,101,99,97,109,101,32,107,110,111,119\n,110,32,97,115,32,115,116,121,108,101,61,34,109,97,114,103,105,110,58,46,106,115\n,34,62,60,47,115,99,114,105,112,116,62,60,32,73,110,116,101,114,110,97,116,105,\n111,110,97,108,32,116,104,101,114,101,32,104,97,118,101,32,98,101,101,110,71,101\n,114,109,97,110,32,108,97,110,103,117,97,103,101,32,115,116,121,108,101,61,34,99\n,111,108,111,114,58,35,67,111,109,109,117,110,105,115,116,32,80,97,114,116,121,\n99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,98,111,114,100,101,114\n,61,34,48,34,32,99,101,108,108,32,109,97,114,103,105,110,104,101,105,103,104,116\n,61,34,116,104,101,32,109,97,106,111,114,105,116,121,32,111,102,34,32,97,108,105\n,103,110,61,34,99,101,110,116,101,114,114,101,108,97,116,101,100,32,116,111,32,\n116,104,101,32,109,97,110,121,32,100,105,102,102,101,114,101,110,116,32,79,114,\n116,104,111,100,111,120,32,67,104,117,114,99,104,115,105,109,105,108,97,114,32,\n116,111,32,116,104,101,32,47,62,10,60,108,105,110,107,32,114,101,108,61,34,115,\n119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,117,110,116,105,108,32,\n104,105,115,32,100,101,97,116,104,125,41,40,41,59,10,60,47,115,99,114,105,112,\n116,62,111,116,104,101,114,32,108,97,110,103,117,97,103,101,115,99,111,109,112,\n97,114,101,100,32,116,111,32,116,104,101,112,111,114,116,105,111,110,115,32,111,\n102,32,116,104,101,116,104,101,32,78,101,116,104,101,114,108,97,110,100,115,116,\n104,101,32,109,111,115,116,32,99,111,109,109,111,110,98,97,99,107,103,114,111,\n117,110,100,58,117,114,108,40,97,114,103,117,101,100,32,116,104,97,116,32,116,\n104,101,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,110,99,108,\n117,100,101,100,32,105,110,32,116,104,101,78,111,114,116,104,32,65,109,101,114,\n105,99,97,110,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,105,110\n,116,101,114,112,114,101,116,97,116,105,111,110,115,116,104,101,32,116,114,97,\n100,105,116,105,111,110,97,108,100,101,118,101,108,111,112,109,101,110,116,32,\n111,102,32,102,114,101,113,117,101,110,116,108,121,32,117,115,101,100,97,32,99,\n111,108,108,101,99,116,105,111,110,32,111,102,118,101,114,121,32,115,105,109,105\n,108,97,114,32,116,111,115,117,114,114,111,117,110,100,105,110,103,32,116,104,\n101,101,120,97,109,112,108,101,32,111,102,32,116,104,105,115,97,108,105,103,110,\n61,34,99,101,110,116,101,114,34,62,119,111,117,108,100,32,104,97,118,101,32,98,\n101,101,110,105,109,97,103,101,95,99,97,112,116,105,111,110,32,61,97,116,116,97,\n99,104,101,100,32,116,111,32,116,104,101,115,117,103,103,101,115,116,105,110,103\n,32,116,104,97,116,105,110,32,116,104,101,32,102,111,114,109,32,111,102,32,105,\n110,118,111,108,118,101,100,32,105,110,32,116,104,101,105,115,32,100,101,114,105\n,118,101,100,32,102,114,111,109,110,97,109,101,100,32,97,102,116,101,114,32,116,\n104,101,73,110,116,114,111,100,117,99,116,105,111,110,32,116,111,114,101,115,116\n,114,105,99,116,105,111,110,115,32,111,110,32,115,116,121,108,101,61,34,119,105,\n100,116,104,58,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,116,104,\n101,32,99,114,101,97,116,105,111,110,32,111,102,109,111,115,116,32,105,109,112,\n111,114,116,97,110,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,110,\n100,114,101,115,117,108,116,101,100,32,105,110,32,116,104,101,99,111,108,108,97,\n112,115,101,32,111,102,32,116,104,101,84,104,105,115,32,109,101,97,110,115,32,\n116,104,97,116,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,119,97,\n115,32,114,101,112,108,97,99,101,100,32,98,121,97,110,97,108,121,115,105,115,32,\n111,102,32,116,104,101,105,110,115,112,105,114,97,116,105,111,110,32,102,111,114\n,114,101,103,97,114,100,101,100,32,97,115,32,116,104,101,109,111,115,116,32,115,\n117,99,99,101,115,115,102,117,108,107,110,111,119,110,32,97,115,32,38,113,117,\n111,116,59,97,32,99,111,109,112,114,101,104,101,110,115,105,118,101,72,105,115,\n116,111,114,121,32,111,102,32,116,104,101,32,119,101,114,101,32,99,111,110,115,\n105,100,101,114,101,100,114,101,116,117,114,110,101,100,32,116,111,32,116,104,\n101,97,114,101,32,114,101,102,101,114,114,101,100,32,116,111,85,110,115,111,117,\n114,99,101,100,32,105,109,97,103,101,62,10,9,60,100,105,118,32,99,108,97,115,115\n,61,34,99,111,110,115,105,115,116,115,32,111,102,32,116,104,101,115,116,111,112,\n80,114,111,112,97,103,97,116,105,111,110,105,110,116,101,114,101,115,116,32,105,\n110,32,116,104,101,97,118,97,105,108,97,98,105,108,105,116,121,32,111,102,97,112\n,112,101,97,114,115,32,116,111,32,104,97,118,101,101,108,101,99,116,114,111,109,\n97,103,110,101,116,105,99,101,110,97,98,108,101,83,101,114,118,105,99,101,115,40\n,102,117,110,99,116,105,111,110,32,111,102,32,116,104,101,73,116,32,105,115,32,\n105,109,112,111,114,116,97,110,116,60,47,115,99,114,105,112,116,62,60,47,100,105\n,118,62,102,117,110,99,116,105,111,110,40,41,123,118,97,114,32,114,101,108,97,\n116,105,118,101,32,116,111,32,116,104,101,97,115,32,97,32,114,101,115,117,108,\n116,32,111,102,32,116,104,101,32,112,111,115,105,116,105,111,110,32,111,102,70,\n111,114,32,101,120,97,109,112,108,101,44,32,105,110,32,109,101,116,104,111,100,\n61,34,112,111,115,116,34,32,119,97,115,32,102,111,108,108,111,119,101,100,32,98,\n121,38,97,109,112,59,109,100,97,115,104,59,32,116,104,101,116,104,101,32,97,112,\n112,108,105,99,97,116,105,111,110,106,115,34,62,60,47,115,99,114,105,112,116,62,\n13,10,117,108,62,60,47,100,105,118,62,60,47,100,105,118,62,97,102,116,101,114,32\n,116,104,101,32,100,101,97,116,104,119,105,116,104,32,114,101,115,112,101,99,116\n,32,116,111,115,116,121,108,101,61,34,112,97,100,100,105,110,103,58,105,115,32,\n112,97,114,116,105,99,117,108,97,114,108,121,100,105,115,112,108,97,121,58,105,\n110,108,105,110,101,59,32,116,121,112,101,61,34,115,117,98,109,105,116,34,32,105\n,115,32,100,105,118,105,100,101,100,32,105,110,116,111,228,184,173,230,150,135,\n32,40,231,174,128,228,189,147,41,114,101,115,112,111,110,115,97,98,105,108,105,\n100,97,100,97,100,109,105,110,105,115,116,114,97,99,105,195,179,110,105,110,116,\n101,114,110,97,99,105,111,110,97,108,101,115,99,111,114,114,101,115,112,111,110,\n100,105,101,110,116,101,224,164,137,224,164,170,224,164,175,224,165,139,224,164,\n151,224,164,170,224,165,130,224,164,176,224,165,141,224,164,181,224,164,185,224,\n164,174,224,164,190,224,164,176,224,165,135,224,164,178,224,165,139,224,164,151,\n224,165,139,224,164,130,224,164,154,224,165,129,224,164,168,224,164,190,224,164,\n181,224,164,178,224,165,135,224,164,149,224,164,191,224,164,168,224,164,184,224,\n164,176,224,164,149,224,164,190,224,164,176,224,164,170,224,165,129,224,164,178,\n224,164,191,224,164,184,224,164,150,224,165,139,224,164,156,224,165,135,224,164,\n130,224,164,154,224,164,190,224,164,185,224,164,191,224,164,143,224,164,173,224,\n165,135,224,164,156,224,165,135,224,164,130,224,164,182,224,164,190,224,164,174,\n224,164,191,224,164,178,224,164,185,224,164,174,224,164,190,224,164,176,224,165,\n128,224,164,156,224,164,190,224,164,151,224,164,176,224,164,163,224,164,172,224,\n164,168,224,164,190,224,164,168,224,165,135,224,164,149,224,165,129,224,164,174,\n224,164,190,224,164,176,224,164,172,224,165,141,224,164,178,224,165,137,224,164,\n151,224,164,174,224,164,190,224,164,178,224,164,191,224,164,149,224,164,174,224,\n164,185,224,164,191,224,164,178,224,164,190,224,164,170,224,165,131,224,164,183,\n224,165,141,224,164,160,224,164,172,224,164,162,224,164,188,224,164,164,224,165,\n135,224,164,173,224,164,190,224,164,156,224,164,170,224,164,190,224,164,149,224,\n165,141,224,164,178,224,164,191,224,164,149,224,164,159,224,165,141,224,164,176,\n224,165,135,224,164,168,224,164,150,224,164,191,224,164,178,224,164,190,224,164,\n171,224,164,166,224,165,140,224,164,176,224,164,190,224,164,168,224,164,174,224,\n164,190,224,164,174,224,164,178,224,165,135,224,164,174,224,164,164,224,164,166,\n224,164,190,224,164,168,224,164,172,224,164,190,224,164,156,224,164,190,224,164,\n176,224,164,181,224,164,191,224,164,149,224,164,190,224,164,184,224,164,149,224,\n165,141,224,164,175,224,165,139,224,164,130,224,164,154,224,164,190,224,164,185,\n224,164,164,224,165,135,224,164,170,224,164,185,224,165,129,224,164,129,224,164,\n154,224,164,172,224,164,164,224,164,190,224,164,175,224,164,190,224,164,184,224,\n164,130,224,164,181,224,164,190,224,164,166,224,164,166,224,165,135,224,164,150,\n224,164,168,224,165,135,224,164,170,224,164,191,224,164,155,224,164,178,224,165,\n135,224,164,181,224,164,191,224,164,182,224,165,135,224,164,183,224,164,176,224,\n164,190,224,164,156,224,165,141,224,164,175,224,164,137,224,164,164,224,165,141,\n224,164,164,224,164,176,224,164,174,224,165,129,224,164,130,224,164,172,224,164,\n136,224,164,166,224,165,139,224,164,168,224,165,139,224,164,130,224,164,137,224,\n164,170,224,164,149,224,164,176,224,164,163,224,164,170,224,164,162,224,164,188,\n224,165,135,224,164,130,224,164,184,224,165,141,224,164,165,224,164,191,224,164,\n164,224,164,171,224,164,191,224,164,178,224,165,141,224,164,174,224,164,174,224,\n165,129,224,164,150,224,165,141,224,164,175,224,164,133,224,164,154,224,165,141,\n224,164,155,224,164,190,224,164,155,224,165,130,224,164,159,224,164,164,224,165,\n128,224,164,184,224,164,130,224,164,151,224,165,128,224,164,164,224,164,156,224,\n164,190,224,164,143,224,164,151,224,164,190,224,164,181,224,164,191,224,164,173,\n224,164,190,224,164,151,224,164,152,224,164,163,224,165,141,224,164,159,224,165,\n135,224,164,166,224,165,130,224,164,184,224,164,176,224,165,135,224,164,166,224,\n164,191,224,164,168,224,165,139,224,164,130,224,164,185,224,164,164,224,165,141,\n224,164,175,224,164,190,224,164,184,224,165,135,224,164,149,224,165,141,224,164,\n184,224,164,151,224,164,190,224,164,130,224,164,167,224,165,128,224,164,181,224,\n164,191,224,164,182,224,165,141,224,164,181,224,164,176,224,164,190,224,164,164,\n224,165,135,224,164,130,224,164,166,224,165,136,224,164,159,224,165,141,224,164,\n184,224,164,168,224,164,149,224,165,141,224,164,182,224,164,190,224,164,184,224,\n164,190,224,164,174,224,164,168,224,165,135,224,164,133,224,164,166,224,164,190,\n224,164,178,224,164,164,224,164,172,224,164,191,224,164,156,224,164,178,224,165,\n128,224,164,170,224,165,129,224,164,176,224,165,130,224,164,183,224,164,185,224,\n164,191,224,164,130,224,164,166,224,165,128,224,164,174,224,164,191,224,164,164,\n224,165,141,224,164,176,224,164,149,224,164,181,224,164,191,224,164,164,224,164,\n190,224,164,176,224,165,129,224,164,170,224,164,175,224,165,135,224,164,184,224,\n165,141,224,164,165,224,164,190,224,164,168,224,164,149,224,164,176,224,165,139,\n224,164,161,224,164,188,224,164,174,224,165,129,224,164,149,224,165,141,224,164,\n164,224,164,175,224,165,139,224,164,156,224,164,168,224,164,190,224,164,149,224,\n165,131,224,164,170,224,164,175,224,164,190,224,164,170,224,165,139,224,164,184,\n224,165,141,224,164,159,224,164,152,224,164,176,224,165,135,224,164,178,224,165,\n130,224,164,149,224,164,190,224,164,176,224,165,141,224,164,175,224,164,181,224,\n164,191,224,164,154,224,164,190,224,164,176,224,164,184,224,165,130,224,164,154,\n224,164,168,224,164,190,224,164,174,224,165,130,224,164,178,224,165,141,224,164,\n175,224,164,166,224,165,135,224,164,150,224,165,135,224,164,130,224,164,185,224,\n164,174,224,165,135,224,164,182,224,164,190,224,164,184,224,165,141,224,164,149,\n224,165,130,224,164,178,224,164,174,224,165,136,224,164,130,224,164,168,224,165,\n135,224,164,164,224,165,136,224,164,175,224,164,190,224,164,176,224,164,156,224,\n164,191,224,164,184,224,164,149,224,165,135,114,115,115,43,120,109,108,34,32,116\n,105,116,108,101,61,34,45,116,121,112,101,34,32,99,111,110,116,101,110,116,61,34\n,116,105,116,108,101,34,32,99,111,110,116,101,110,116,61,34,97,116,32,116,104,\n101,32,115,97,109,101,32,116,105,109,101,46,106,115,34,62,60,47,115,99,114,105,\n112,116,62,10,60,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34,32,60,47\n,115,112,97,110,62,60,47,97,62,60,47,108,105,62,118,101,114,116,105,99,97,108,45\n,97,108,105,103,110,58,116,47,106,113,117,101,114,121,46,109,105,110,46,106,115,\n34,62,46,99,108,105,99,107,40,102,117,110,99,116,105,111,110,40,32,115,116,121,\n108,101,61,34,112,97,100,100,105,110,103,45,125,41,40,41,59,10,60,47,115,99,114,\n105,112,116,62,10,60,47,115,112,97,110,62,60,97,32,104,114,101,102,61,34,60,97,\n32,104,114,101,102,61,34,104,116,116,112,58,47,47,41,59,32,114,101,116,117,114,\n110,32,102,97,108,115,101,59,116,101,120,116,45,100,101,99,111,114,97,116,105,\n111,110,58,32,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,98,111,114,\n100,101,114,45,99,111,108,108,97,112,115,101,58,97,115,115,111,99,105,97,116,101\n,100,32,119,105,116,104,32,66,97,104,97,115,97,32,73,110,100,111,110,101,115,105\n,97,69,110,103,108,105,115,104,32,108,97,110,103,117,97,103,101,60,116,101,120,\n116,32,120,109,108,58,115,112,97,99,101,61,46,103,105,102,34,32,98,111,114,100,\n101,114,61,34,48,34,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,10,111,\n118,101,114,102,108,111,119,58,104,105,100,100,101,110,59,105,109,103,32,115,114\n,99,61,34,104,116,116,112,58,47,47,97,100,100,69,118,101,110,116,76,105,115,116,\n101,110,101,114,114,101,115,112,111,110,115,105,98,108,101,32,102,111,114,32,115\n,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,47,102,97,118,105,99,111,\n110,46,105,99,111,34,32,47,62,111,112,101,114,97,116,105,110,103,32,115,121,115,\n116,101,109,34,32,115,116,121,108,101,61,34,119,105,100,116,104,58,49,116,97,114\n,103,101,116,61,34,95,98,108,97,110,107,34,62,83,116,97,116,101,32,85,110,105,\n118,101,114,115,105,116,121,116,101,120,116,45,97,108,105,103,110,58,108,101,102\n,116,59,10,100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,44,32,105,\n110,99,108,117,100,105,110,103,32,116,104,101,32,97,114,111,117,110,100,32,116,\n104,101,32,119,111,114,108,100,41,59,13,10,60,47,115,99,114,105,112,116,62,13,10\n,60,34,32,115,116,121,108,101,61,34,104,101,105,103,104,116,58,59,111,118,101,\n114,102,108,111,119,58,104,105,100,100,101,110,109,111,114,101,32,105,110,102,\n111,114,109,97,116,105,111,110,97,110,32,105,110,116,101,114,110,97,116,105,111,\n110,97,108,97,32,109,101,109,98,101,114,32,111,102,32,116,104,101,32,111,110,101\n,32,111,102,32,116,104,101,32,102,105,114,115,116,99,97,110,32,98,101,32,102,111\n,117,110,100,32,105,110,32,60,47,100,105,118,62,10,9,9,60,47,100,105,118,62,10,\n100,105,115,112,108,97,121,58,32,110,111,110,101,59,34,62,34,32,47,62,10,60,108,\n105,110,107,32,114,101,108,61,34,10,32,32,40,102,117,110,99,116,105,111,110,40,\n41,32,123,116,104,101,32,49,53,116,104,32,99,101,110,116,117,114,121,46,112,114,\n101,118,101,110,116,68,101,102,97,117,108,116,40,108,97,114,103,101,32,110,117,\n109,98,101,114,32,111,102,32,66,121,122,97,110,116,105,110,101,32,69,109,112,105\n,114,101,46,106,112,103,124,116,104,117,109,98,124,108,101,102,116,124,118,97,\n115,116,32,109,97,106,111,114,105,116,121,32,111,102,109,97,106,111,114,105,116,\n121,32,111,102,32,116,104,101,32,32,97,108,105,103,110,61,34,99,101,110,116,101,\n114,34,62,85,110,105,118,101,114,115,105,116,121,32,80,114,101,115,115,100,111,\n109,105,110,97,116,101,100,32,98,121,32,116,104,101,83,101,99,111,110,100,32,87,\n111,114,108,100,32,87,97,114,100,105,115,116,114,105,98,117,116,105,111,110,32,\n111,102,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,116,104,\n101,32,114,101,115,116,32,111,102,32,116,104,101,32,99,104,97,114,97,99,116,101,\n114,105,122,101,100,32,98,121,32,114,101,108,61,34,110,111,102,111,108,108,111,\n119,34,62,100,101,114,105,118,101,115,32,102,114,111,109,32,116,104,101,114,97,\n116,104,101,114,32,116,104,97,110,32,116,104,101,32,97,32,99,111,109,98,105,110,\n97,116,105,111,110,32,111,102,115,116,121,108,101,61,34,119,105,100,116,104,58,\n49,48,48,69,110,103,108,105,115,104,45,115,112,101,97,107,105,110,103,99,111,109\n,112,117,116,101,114,32,115,99,105,101,110,99,101,98,111,114,100,101,114,61,34,\n48,34,32,97,108,116,61,34,116,104,101,32,101,120,105,115,116,101,110,99,101,32,\n111,102,68,101,109,111,99,114,97,116,105,99,32,80,97,114,116,121,34,32,115,116,\n121,108,101,61,34,109,97,114,103,105,110,45,70,111,114,32,116,104,105,115,32,114\n,101,97,115,111,110,44,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,9,115\n,66,121,84,97,103,78,97,109,101,40,115,41,91,48,93,106,115,34,62,60,47,115,99,\n114,105,112,116,62,13,10,60,46,106,115,34,62,60,47,115,99,114,105,112,116,62,13,\n10,108,105,110,107,32,114,101,108,61,34,105,99,111,110,34,32,39,32,97,108,116,61\n,39,39,32,99,108,97,115,115,61,39,102,111,114,109,97,116,105,111,110,32,111,102,\n32,116,104,101,118,101,114,115,105,111,110,115,32,111,102,32,116,104,101,32,60,\n47,97,62,60,47,100,105,118,62,60,47,100,105,118,62,47,112,97,103,101,62,10,32,32\n,60,112,97,103,101,62,10,60,100,105,118,32,99,108,97,115,115,61,34,99,111,110,\n116,98,101,99,97,109,101,32,116,104,101,32,102,105,114,115,116,98,97,104,97,115,\n97,32,73,110,100,111,110,101,115,105,97,101,110,103,108,105,115,104,32,40,115,\n105,109,112,108,101,41,206,149,206,187,206,187,206,183,206,189,206,185,206,186,\n206,172,209,133,209,128,208,178,208,176,209,130,209,129,208,186,208,184,208,186,\n208,190,208,188,208,191,208,176,208,189,208,184,208,184,209,143,208,178,208,187,\n209,143,208,181,209,130,209,129,209,143,208,148,208,190,208,177,208,176,208,178,\n208,184,209,130,209,140,209,135,208,181,208,187,208,190,208,178,208,181,208,186,\n208,176,209,128,208,176,208,183,208,178,208,184,209,130,208,184,209,143,208,152,\n208,189,209,130,208,181,209,128,208,189,208,181,209,130,208,158,209,130,208,178,\n208,181,209,130,208,184,209,130,209,140,208,189,208,176,208,191,209,128,208,184,\n208,188,208,181,209,128,208,184,208,189,209,130,208,181,209,128,208,189,208,181,\n209,130,208,186,208,190,209,130,208,190,209,128,208,190,208,179,208,190,209,129,\n209,130,209,128,208,176,208,189,208,184,209,134,209,139,208,186,208,176,209,135,\n208,181,209,129,209,130,208,178,208,181,209,131,209,129,208,187,208,190,208,178,\n208,184,209,143,209,133,208,191,209,128,208,190,208,177,208,187,208,181,208,188,\n209,139,208,191,208,190,208,187,209,131,209,135,208,184,209,130,209,140,209,143,\n208,178,208,187,209,143,209,142,209,130,209,129,209,143,208,189,208,176,208,184,\n208,177,208,190,208,187,208,181,208,181,208,186,208,190,208,188,208,191,208,176,\n208,189,208,184,209,143,208,178,208,189,208,184,208,188,208,176,208,189,208,184,\n208,181,209,129,209,128,208,181,208,180,209,129,209,130,208,178,208,176,216,167,\n217,132,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,216,177,\n216,166,217,138,216,179,217,138,216,169,216,167,217,132,216,167,217,134,216,170,\n217,130,216,167,217,132,217,133,216,180,216,167,216,177,217,131,216,167,216,170,\n217,131,216,167,217,132,216,179,217,138,216,167,216,177,216,167,216,170,216,167,\n217,132,217,133,217,131,216,170,217,136,216,168,216,169,216,167,217,132,216,179,\n216,185,217,136,216,175,217,138,216,169,216,167,216,173,216,181,216,167,216,166,\n217,138,216,167,216,170,216,167,217,132,216,185,216,167,217,132,217,133,217,138,\n216,169,216,167,217,132,216,181,217,136,216,170,217,138,216,167,216,170,216,167,\n217,132,216,167,217,134,216,170,216,177,217,134,216,170,216,167,217,132,216,170,\n216,181,216,167,217,133,217,138,217,133,216,167,217,132,216,165,216,179,217,132,\n216,167,217,133,217,138,216,167,217,132,217,133,216,180,216,167,216,177,217,131,\n216,169,216,167,217,132,217,133,216,177,216,166,217,138,216,167,216,170,114,111,\n98,111,116,115,34,32,99,111,110,116,101,110,116,61,34,60,100,105,118,32,105,100,\n61,34,102,111,111,116,101,114,34,62,116,104,101,32,85,110,105,116,101,100,32,83,\n116,97,116,101,115,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,\n46,106,112,103,124,114,105,103,104,116,124,116,104,117,109,98,124,46,106,115,34,\n62,60,47,115,99,114,105,112,116,62,13,10,60,108,111,99,97,116,105,111,110,46,112\n,114,111,116,111,99,111,108,102,114,97,109,101,98,111,114,100,101,114,61,34,48,\n34,32,115,34,32,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,60,47,97,62,\n60,47,100,105,118,62,60,47,100,105,118,62,60,102,111,110,116,45,119,101,105,103,\n104,116,58,98,111,108,100,59,38,113,117,111,116,59,32,97,110,100,32,38,113,117,\n111,116,59,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,109,\n97,114,103,105,110,58,48,59,112,97,100,100,105,110,103,58,34,32,114,101,108,61,\n34,110,111,102,111,108,108,111,119,34,32,80,114,101,115,105,100,101,110,116,32,\n111,102,32,116,104,101,32,116,119,101,110,116,105,101,116,104,32,99,101,110,116,\n117,114,121,101,118,105,115,105,111,110,62,10,32,32,60,47,112,97,103,101,73,110,\n116,101,114,110,101,116,32,69,120,112,108,111,114,101,114,97,46,97,115,121,110,\n99,32,61,32,116,114,117,101,59,13,10,105,110,102,111,114,109,97,116,105,111,110,\n32,97,98,111,117,116,60,100,105,118,32,105,100,61,34,104,101,97,100,101,114,34,\n62,34,32,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,60,97,32,104,114,\n101,102,61,34,104,116,116,112,115,58,47,47,60,100,105,118,32,105,100,61,34,99,\n111,110,116,101,110,116,34,60,47,100,105,118,62,13,10,60,47,100,105,118,62,13,10\n,60,100,101,114,105,118,101,100,32,102,114,111,109,32,116,104,101,32,60,105,109,\n103,32,115,114,99,61,39,104,116,116,112,58,47,47,97,99,99,111,114,100,105,110,\n103,32,116,111,32,116,104,101,32,10,60,47,98,111,100,121,62,10,60,47,104,116,109\n,108,62,10,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,115,\n99,114,105,112,116,32,108,97,110,103,117,97,103,101,61,34,65,114,105,97,108,44,\n32,72,101,108,118,101,116,105,99,97,44,60,47,97,62,60,115,112,97,110,32,99,108,\n97,115,115,61,34,60,47,115,99,114,105,112,116,62,60,115,99,114,105,112,116,32,\n112,111,108,105,116,105,99,97,108,32,112,97,114,116,105,101,115,116,100,62,60,47\n,116,114,62,60,47,116,97,98,108,101,62,60,104,114,101,102,61,34,104,116,116,112,\n58,47,47,119,119,119,46,105,110,116,101,114,112,114,101,116,97,116,105,111,110,\n32,111,102,114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,100,\n111,99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,99,104,97,114,115,101\n,116,61,34,117,116,102,45,56,34,62,10,98,101,103,105,110,110,105,110,103,32,111,\n102,32,116,104,101,32,114,101,118,101,97,108,101,100,32,116,104,97,116,32,116,\n104,101,116,101,108,101,118,105,115,105,111,110,32,115,101,114,105,101,115,34,32\n,114,101,108,61,34,110,111,102,111,108,108,111,119,34,62,32,116,97,114,103,101,\n116,61,34,95,98,108,97,110,107,34,62,99,108,97,105,109,105,110,103,32,116,104,97\n,116,32,116,104,101,104,116,116,112,37,51,65,37,50,70,37,50,70,119,119,119,46,\n109,97,110,105,102,101,115,116,97,116,105,111,110,115,32,111,102,80,114,105,109,\n101,32,77,105,110,105,115,116,101,114,32,111,102,105,110,102,108,117,101,110,99,\n101,100,32,98,121,32,116,104,101,99,108,97,115,115,61,34,99,108,101,97,114,102,\n105,120,34,62,47,100,105,118,62,13,10,60,47,100,105,118,62,13,10,13,10,116,104,\n114,101,101,45,100,105,109,101,110,115,105,111,110,97,108,67,104,117,114,99,104,\n32,111,102,32,69,110,103,108,97,110,100,111,102,32,78,111,114,116,104,32,67,97,\n114,111,108,105,110,97,115,113,117,97,114,101,32,107,105,108,111,109,101,116,114\n,101,115,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,100,105\n,115,116,105,110,99,116,32,102,114,111,109,32,116,104,101,99,111,109,109,111,110\n,108,121,32,107,110,111,119,110,32,97,115,80,104,111,110,101,116,105,99,32,65,\n108,112,104,97,98,101,116,100,101,99,108,97,114,101,100,32,116,104,97,116,32,116\n,104,101,99,111,110,116,114,111,108,108,101,100,32,98,121,32,116,104,101,66,101,\n110,106,97,109,105,110,32,70,114,97,110,107,108,105,110,114,111,108,101,45,112,\n108,97,121,105,110,103,32,103,97,109,101,116,104,101,32,85,110,105,118,101,114,\n115,105,116,121,32,111,102,105,110,32,87,101,115,116,101,114,110,32,69,117,114,\n111,112,101,112,101,114,115,111,110,97,108,32,99,111,109,112,117,116,101,114,80,\n114,111,106,101,99,116,32,71,117,116,101,110,98,101,114,103,114,101,103,97,114,\n100,108,101,115,115,32,111,102,32,116,104,101,104,97,115,32,98,101,101,110,32,\n112,114,111,112,111,115,101,100,116,111,103,101,116,104,101,114,32,119,105,116,\n104,32,116,104,101,62,60,47,108,105,62,60,108,105,32,99,108,97,115,115,61,34,105\n,110,32,115,111,109,101,32,99,111,117,110,116,114,105,101,115,109,105,110,46,106\n,115,34,62,60,47,115,99,114,105,112,116,62,111,102,32,116,104,101,32,112,111,112\n,117,108,97,116,105,111,110,111,102,102,105,99,105,97,108,32,108,97,110,103,117,\n97,103,101,60,105,109,103,32,115,114,99,61,34,105,109,97,103,101,115,47,105,100,\n101,110,116,105,102,105,101,100,32,98,121,32,116,104,101,110,97,116,117,114,97,\n108,32,114,101,115,111,117,114,99,101,115,99,108,97,115,115,105,102,105,99,97,\n116,105,111,110,32,111,102,99,97,110,32,98,101,32,99,111,110,115,105,100,101,114\n,101,100,113,117,97,110,116,117,109,32,109,101,99,104,97,110,105,99,115,78,101,\n118,101,114,116,104,101,108,101,115,115,44,32,116,104,101,109,105,108,108,105,\n111,110,32,121,101,97,114,115,32,97,103,111,60,47,98,111,100,121,62,13,10,60,47,\n104,116,109,108,62,13,206,149,206,187,206,187,206,183,206,189,206,185,206,186,\n206,172,10,116,97,107,101,32,97,100,118,97,110,116,97,103,101,32,111,102,97,110,\n100,44,32,97,99,99,111,114,100,105,110,103,32,116,111,97,116,116,114,105,98,117,\n116,101,100,32,116,111,32,116,104,101,77,105,99,114,111,115,111,102,116,32,87,\n105,110,100,111,119,115,116,104,101,32,102,105,114,115,116,32,99,101,110,116,117\n,114,121,117,110,100,101,114,32,116,104,101,32,99,111,110,116,114,111,108,100,\n105,118,32,99,108,97,115,115,61,34,104,101,97,100,101,114,115,104,111,114,116,\n108,121,32,97,102,116,101,114,32,116,104,101,110,111,116,97,98,108,101,32,101,\n120,99,101,112,116,105,111,110,116,101,110,115,32,111,102,32,116,104,111,117,115\n,97,110,100,115,115,101,118,101,114,97,108,32,100,105,102,102,101,114,101,110,\n116,97,114,111,117,110,100,32,116,104,101,32,119,111,114,108,100,46,114,101,97,\n99,104,105,110,103,32,109,105,108,105,116,97,114,121,105,115,111,108,97,116,101,\n100,32,102,114,111,109,32,116,104,101,111,112,112,111,115,105,116,105,111,110,32\n,116,111,32,116,104,101,116,104,101,32,79,108,100,32,84,101,115,116,97,109,101,\n110,116,65,102,114,105,99,97,110,32,65,109,101,114,105,99,97,110,115,105,110,115\n,101,114,116,101,100,32,105,110,116,111,32,116,104,101,115,101,112,97,114,97,116\n,101,32,102,114,111,109,32,116,104,101,109,101,116,114,111,112,111,108,105,116,\n97,110,32,97,114,101,97,109,97,107,101,115,32,105,116,32,112,111,115,115,105,98,\n108,101,97,99,107,110,111,119,108,101,100,103,101,100,32,116,104,97,116,97,114,\n103,117,97,98,108,121,32,116,104,101,32,109,111,115,116,116,121,112,101,61,34,\n116,101,120,116,47,99,115,115,34,62,10,116,104,101,32,73,110,116,101,114,110,97,\n116,105,111,110,97,108,65,99,99,111,114,100,105,110,103,32,116,111,32,116,104,\n101,32,112,101,61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,99,111,105,110\n,99,105,100,101,32,119,105,116,104,32,116,104,101,116,119,111,45,116,104,105,114\n,100,115,32,111,102,32,116,104,101,68,117,114,105,110,103,32,116,104,105,115,32,\n116,105,109,101,44,100,117,114,105,110,103,32,116,104,101,32,112,101,114,105,111\n,100,97,110,110,111,117,110,99,101,100,32,116,104,97,116,32,104,101,116,104,101,\n32,105,110,116,101,114,110,97,116,105,111,110,97,108,97,110,100,32,109,111,114,\n101,32,114,101,99,101,110,116,108,121,98,101,108,105,101,118,101,100,32,116,104,\n97,116,32,116,104,101,99,111,110,115,99,105,111,117,115,110,101,115,115,32,97,\n110,100,102,111,114,109,101,114,108,121,32,107,110,111,119,110,32,97,115,115,117\n,114,114,111,117,110,100,101,100,32,98,121,32,116,104,101,102,105,114,115,116,32\n,97,112,112,101,97,114,101,100,32,105,110,111,99,99,97,115,105,111,110,97,108,\n108,121,32,117,115,101,100,112,111,115,105,116,105,111,110,58,97,98,115,111,108,\n117,116,101,59,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,107,34,32,112\n,111,115,105,116,105,111,110,58,114,101,108,97,116,105,118,101,59,116,101,120,\n116,45,97,108,105,103,110,58,99,101,110,116,101,114,59,106,97,120,47,108,105,98,\n115,47,106,113,117,101,114,121,47,49,46,98,97,99,107,103,114,111,117,110,100,45,\n99,111,108,111,114,58,35,116,121,112,101,61,34,97,112,112,108,105,99,97,116,105,\n111,110,47,97,110,103,117,97,103,101,34,32,99,111,110,116,101,110,116,61,34,60,\n109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,80,114,105,118,97\n,99,121,32,80,111,108,105,99,121,60,47,97,62,101,40,34,37,51,67,115,99,114,105,\n112,116,32,115,114,99,61,39,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,\n107,34,62,79,110,32,116,104,101,32,111,116,104,101,114,32,104,97,110,100,44,46,\n106,112,103,124,116,104,117,109,98,124,114,105,103,104,116,124,50,60,47,100,105,\n118,62,60,100,105,118,32,99,108,97,115,115,61,34,60,100,105,118,32,115,116,121,\n108,101,61,34,102,108,111,97,116,58,110,105,110,101,116,101,101,110,116,104,32,\n99,101,110,116,117,114,121,60,47,98,111,100,121,62,13,10,60,47,104,116,109,108,\n62,13,10,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,115,59,116,\n101,120,116,45,97,108,105,103,110,58,99,101,110,116,101,114,102,111,110,116,45,\n119,101,105,103,104,116,58,32,98,111,108,100,59,32,65,99,99,111,114,100,105,110,\n103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,32,98,\n101,116,119,101,101,110,34,32,102,114,97,109,101,98,111,114,100,101,114,61,34,48\n,34,32,34,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,108,\n105,110,107,32,104,114,101,102,61,34,104,116,116,112,58,47,47,104,116,109,108,52\n,47,108,111,111,115,101,46,100,116,100,34,62,10,100,117,114,105,110,103,32,116,\n104,105,115,32,112,101,114,105,111,100,60,47,116,100,62,60,47,116,114,62,60,47,\n116,97,98,108,101,62,99,108,111,115,101,108,121,32,114,101,108,97,116,101,100,32\n,116,111,102,111,114,32,116,104,101,32,102,105,114,115,116,32,116,105,109,101,59\n,102,111,110,116,45,119,101,105,103,104,116,58,98,111,108,100,59,105,110,112,117\n,116,32,116,121,112,101,61,34,116,101,120,116,34,32,60,115,112,97,110,32,115,116\n,121,108,101,61,34,102,111,110,116,45,111,110,114,101,97,100,121,115,116,97,116,\n101,99,104,97,110,103,101,9,60,100,105,118,32,99,108,97,115,115,61,34,99,108,101\n,97,114,100,111,99,117,109,101,110,116,46,108,111,99,97,116,105,111,110,46,32,70\n,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,97,32,119,105,100,\n101,32,118,97,114,105,101,116,121,32,111,102,32,60,33,68,79,67,84,89,80,69,32,\n104,116,109,108,62,13,10,60,38,110,98,115,112,59,38,110,98,115,112,59,38,110,98,\n115,112,59,34,62,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,115,116\n,121,108,101,61,34,102,108,111,97,116,58,108,101,102,116,59,99,111,110,99,101,\n114,110,101,100,32,119,105,116,104,32,116,104,101,61,104,116,116,112,37,51,65,37\n,50,70,37,50,70,119,119,119,46,105,110,32,112,111,112,117,108,97,114,32,99,117,\n108,116,117,114,101,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,32,47\n,62,105,116,32,105,115,32,112,111,115,115,105,98,108,101,32,116,111,32,72,97,114\n,118,97,114,100,32,85,110,105,118,101,114,115,105,116,121,116,121,108,101,115,\n104,101,101,116,34,32,104,114,101,102,61,34,47,116,104,101,32,109,97,105,110,32,\n99,104,97,114,97,99,116,101,114,79,120,102,111,114,100,32,85,110,105,118,101,114\n,115,105,116,121,32,32,110,97,109,101,61,34,107,101,121,119,111,114,100,115,34,\n32,99,115,116,121,108,101,61,34,116,101,120,116,45,97,108,105,103,110,58,116,104\n,101,32,85,110,105,116,101,100,32,75,105,110,103,100,111,109,102,101,100,101,114\n,97,108,32,103,111,118,101,114,110,109,101,110,116,60,100,105,118,32,115,116,121\n,108,101,61,34,109,97,114,103,105,110,32,100,101,112,101,110,100,105,110,103,32,\n111,110,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,\n32,116,104,101,60,100,105,118,32,99,108,97,115,115,61,34,104,101,97,100,101,114,\n46,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,100,101,115,116,\n114,117,99,116,105,111,110,32,111,102,32,116,104,101,115,108,105,103,104,116,108\n,121,32,100,105,102,102,101,114,101,110,116,105,110,32,97,99,99,111,114,100,97,\n110,99,101,32,119,105,116,104,116,101,108,101,99,111,109,109,117,110,105,99,97,\n116,105,111,110,115,105,110,100,105,99,97,116,101,115,32,116,104,97,116,32,116,\n104,101,115,104,111,114,116,108,121,32,116,104,101,114,101,97,102,116,101,114,\n101,115,112,101,99,105,97,108,108,121,32,105,110,32,116,104,101,32,69,117,114,\n111,112,101,97,110,32,99,111,117,110,116,114,105,101,115,72,111,119,101,118,101,\n114,44,32,116,104,101,114,101,32,97,114,101,115,114,99,61,34,104,116,116,112,58,\n47,47,115,116,97,116,105,99,115,117,103,103,101,115,116,101,100,32,116,104,97,\n116,32,116,104,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,\n46,97,32,108,97,114,103,101,32,110,117,109,98,101,114,32,111,102,32,84,101,108,\n101,99,111,109,109,117,110,105,99,97,116,105,111,110,115,34,32,114,101,108,61,34\n,110,111,102,111,108,108,111,119,34,32,116,72,111,108,121,32,82,111,109,97,110,\n32,69,109,112,101,114,111,114,97,108,109,111,115,116,32,101,120,99,108,117,115,\n105,118,101,108,121,34,32,98,111,114,100,101,114,61,34,48,34,32,97,108,116,61,34\n,83,101,99,114,101,116,97,114,121,32,111,102,32,83,116,97,116,101,99,117,108,109\n,105,110,97,116,105,110,103,32,105,110,32,116,104,101,67,73,65,32,87,111,114,108\n,100,32,70,97,99,116,98,111,111,107,116,104,101,32,109,111,115,116,32,105,109,\n112,111,114,116,97,110,116,97,110,110,105,118,101,114,115,97,114,121,32,111,102,\n32,116,104,101,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,45\n,60,108,105,62,60,101,109,62,60,97,32,104,114,101,102,61,34,47,116,104,101,32,65\n,116,108,97,110,116,105,99,32,79,99,101,97,110,115,116,114,105,99,116,108,121,32\n,115,112,101,97,107,105,110,103,44,115,104,111,114,116,108,121,32,98,101,102,111\n,114,101,32,116,104,101,100,105,102,102,101,114,101,110,116,32,116,121,112,101,\n115,32,111,102,116,104,101,32,79,116,116,111,109,97,110,32,69,109,112,105,114,\n101,62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,65,110,32,73,\n110,116,114,111,100,117,99,116,105,111,110,32,116,111,99,111,110,115,101,113,117\n,101,110,99,101,32,111,102,32,116,104,101,100,101,112,97,114,116,117,114,101,32,\n102,114,111,109,32,116,104,101,67,111,110,102,101,100,101,114,97,116,101,32,83,\n116,97,116,101,115,105,110,100,105,103,101,110,111,117,115,32,112,101,111,112,\n108,101,115,80,114,111,99,101,101,100,105,110,103,115,32,111,102,32,116,104,101,\n105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,116,104,101,116,104,101\n,111,114,105,101,115,32,104,97,118,101,32,98,101,101,110,105,110,118,111,108,118\n,101,109,101,110,116,32,105,110,32,116,104,101,100,105,118,105,100,101,100,32,\n105,110,116,111,32,116,104,114,101,101,97,100,106,97,99,101,110,116,32,99,111,\n117,110,116,114,105,101,115,105,115,32,114,101,115,112,111,110,115,105,98,108,\n101,32,102,111,114,100,105,115,115,111,108,117,116,105,111,110,32,111,102,32,116\n,104,101,99,111,108,108,97,98,111,114,97,116,105,111,110,32,119,105,116,104,119,\n105,100,101,108,121,32,114,101,103,97,114,100,101,100,32,97,115,104,105,115,32,\n99,111,110,116,101,109,112,111,114,97,114,105,101,115,102,111,117,110,100,105,\n110,103,32,109,101,109,98,101,114,32,111,102,68,111,109,105,110,105,99,97,110,32\n,82,101,112,117,98,108,105,99,103,101,110,101,114,97,108,108,121,32,97,99,99,101\n,112,116,101,100,116,104,101,32,112,111,115,115,105,98,105,108,105,116,121,32,\n111,102,97,114,101,32,97,108,115,111,32,97,118,97,105,108,97,98,108,101,117,110,\n100,101,114,32,99,111,110,115,116,114,117,99,116,105,111,110,114,101,115,116,111\n,114,97,116,105,111,110,32,111,102,32,116,104,101,116,104,101,32,103,101,110,101\n,114,97,108,32,112,117,98,108,105,99,105,115,32,97,108,109,111,115,116,32,101,\n110,116,105,114,101,108,121,112,97,115,115,101,115,32,116,104,114,111,117,103,\n104,32,116,104,101,104,97,115,32,98,101,101,110,32,115,117,103,103,101,115,116,\n101,100,99,111,109,112,117,116,101,114,32,97,110,100,32,118,105,100,101,111,71,\n101,114,109,97,110,105,99,32,108,97,110,103,117,97,103,101,115,32,97,99,99,111,\n114,100,105,110,103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110\n,116,32,102,114,111,109,32,116,104,101,115,104,111,114,116,108,121,32,97,102,116\n,101,114,119,97,114,100,115,104,114,101,102,61,34,104,116,116,112,115,58,47,47,\n119,119,119,46,114,101,99,101,110,116,32,100,101,118,101,108,111,112,109,101,110\n,116,66,111,97,114,100,32,111,102,32,68,105,114,101,99,116,111,114,115,60,100,\n105,118,32,99,108,97,115,115,61,34,115,101,97,114,99,104,124,32,60,97,32,104,114\n,101,102,61,34,104,116,116,112,58,47,47,73,110,32,112,97,114,116,105,99,117,108,\n97,114,44,32,116,104,101,77,117,108,116,105,112,108,101,32,102,111,111,116,110,\n111,116,101,115,111,114,32,111,116,104,101,114,32,115,117,98,115,116,97,110,99,\n101,116,104,111,117,115,97,110,100,115,32,111,102,32,121,101,97,114,115,116,114,\n97,110,115,108,97,116,105,111,110,32,111,102,32,116,104,101,60,47,100,105,118,62\n,13,10,60,47,100,105,118,62,13,10,13,10,60,97,32,104,114,101,102,61,34,105,110,\n100,101,120,46,112,104,112,119,97,115,32,101,115,116,97,98,108,105,115,104,101,\n100,32,105,110,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,\n112,97,114,116,105,99,105,112,97,116,101,32,105,110,32,116,104,101,97,32,115,116\n,114,111,110,103,32,105,110,102,108,117,101,110,99,101,115,116,121,108,101,61,34\n,109,97,114,103,105,110,45,116,111,112,58,114,101,112,114,101,115,101,110,116,\n101,100,32,98,121,32,116,104,101,103,114,97,100,117,97,116,101,100,32,102,114,\n111,109,32,116,104,101,84,114,97,100,105,116,105,111,110,97,108,108,121,44,32,\n116,104,101,69,108,101,109,101,110,116,40,34,115,99,114,105,112,116,34,41,59,72,\n111,119,101,118,101,114,44,32,115,105,110,99,101,32,116,104,101,47,100,105,118,\n62,10,60,47,100,105,118,62,10,60,100,105,118,32,108,101,102,116,59,32,109,97,114\n,103,105,110,45,108,101,102,116,58,112,114,111,116,101,99,116,105,111,110,32,97,\n103,97,105,110,115,116,48,59,32,118,101,114,116,105,99,97,108,45,97,108,105,103,\n110,58,85,110,102,111,114,116,117,110,97,116,101,108,121,44,32,116,104,101,116,\n121,112,101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,47,100,105,118,62,\n10,60,100,105,118,32,99,108,97,115,115,61,34,32,99,108,97,115,115,61,34,99,108,\n101,97,114,102,105,120,34,62,60,100,105,118,32,99,108,97,115,115,61,34,102,111,\n111,116,101,114,9,9,60,47,100,105,118,62,10,9,9,60,47,100,105,118,62,10,116,104,\n101,32,109,111,116,105,111,110,32,112,105,99,116,117,114,101,208,145,209,138,208\n,187,208,179,208,176,209,128,209,129,208,186,208,184,208,177,209,138,208,187,208\n,179,208,176,209,128,209,129,208,186,208,184,208,164,208,181,208,180,208,181,209\n,128,208,176,209,134,208,184,208,184,208,189,208,181,209,129,208,186,208,190,208\n,187,209,140,208,186,208,190,209,129,208,190,208,190,208,177,209,137,208,181,208\n,189,208,184,208,181,209,129,208,190,208,190,208,177,209,137,208,181,208,189,208\n,184,209,143,208,191,209,128,208,190,208,179,209,128,208,176,208,188,208,188,209\n,139,208,158,209,130,208,191,209,128,208,176,208,178,208,184,209,130,209,140,208\n,177,208,181,209,129,208,191,208,187,208,176,209,130,208,189,208,190,208,188,208\n,176,209,130,208,181,209,128,208,184,208,176,208,187,209,139,208,191,208,190,208\n,183,208,178,208,190,208,187,209,143,208,181,209,130,208,191,208,190,209,129,208\n,187,208,181,208,180,208,189,208,184,208,181,209,128,208,176,208,183,208,187,208\n,184,209,135,208,189,209,139,209,133,208,191,209,128,208,190,208,180,209,131,208\n,186,209,134,208,184,208,184,208,191,209,128,208,190,208,179,209,128,208,176,208\n,188,208,188,208,176,208,191,208,190,208,187,208,189,208,190,209,129,209,130,209\n,140,209,142,208,189,208,176,209,133,208,190,208,180,208,184,209,130,209,129,209\n,143,208,184,208,183,208,177,209,128,208,176,208,189,208,189,208,190,208,181,208\n,189,208,176,209,129,208,181,208,187,208,181,208,189,208,184,209,143,208,184,208\n,183,208,188,208,181,208,189,208,181,208,189,208,184,209,143,208,186,208,176,209\n,130,208,181,208,179,208,190,209,128,208,184,208,184,208,144,208,187,208,181,208\n,186,209,129,208,176,208,189,208,180,209,128,224,164,166,224,165,141,224,164,181\n,224,164,190,224,164,176,224,164,190,224,164,174,224,165,136,224,164,168,224,165\n,129,224,164,133,224,164,178,224,164,170,224,165,141,224,164,176,224,164,166,224\n,164,190,224,164,168,224,164,173,224,164,190,224,164,176,224,164,164,224,165,128\n,224,164,175,224,164,133,224,164,168,224,165,129,224,164,166,224,165,135,224,164\n,182,224,164,185,224,164,191,224,164,168,224,165,141,224,164,166,224,165,128,224\n,164,135,224,164,130,224,164,161,224,164,191,224,164,175,224,164,190,224,164,166\n,224,164,191,224,164,178,224,165,141,224,164,178,224,165,128,224,164,133,224,164\n,167,224,164,191,224,164,149,224,164,190,224,164,176,224,164,181,224,165,128,224\n,164,161,224,164,191,224,164,175,224,165,139,224,164,154,224,164,191,224,164,159\n,224,165,141,224,164,160,224,165,135,224,164,184,224,164,174,224,164,190,224,164\n,154,224,164,190,224,164,176,224,164,156,224,164,130,224,164,149,224,165,141,224\n,164,182,224,164,168,224,164,166,224,165,129,224,164,168,224,164,191,224,164,175\n,224,164,190,224,164,170,224,165,141,224,164,176,224,164,175,224,165,139,224,164\n,151,224,164,133,224,164,168,224,165,129,224,164,184,224,164,190,224,164,176,224\n,164,145,224,164,168,224,164,178,224,164,190,224,164,135,224,164,168,224,164,170\n,224,164,190,224,164,176,224,165,141,224,164,159,224,165,128,224,164,182,224,164\n,176,224,165,141,224,164,164,224,165,139,224,164,130,224,164,178,224,165,139,224\n,164,149,224,164,184,224,164,173,224,164,190,224,164,171,224,164,188,224,165,141\n,224,164,178,224,165,136,224,164,182,224,164,182,224,164,176,224,165,141,224,164\n,164,224,165,135,224,164,130,224,164,170,224,165,141,224,164,176,224,164,166,224\n,165,135,224,164,182,224,164,170,224,165,141,224,164,178,224,165,135,224,164,175\n,224,164,176,224,164,149,224,165,135,224,164,130,224,164,166,224,165,141,224,164\n,176,224,164,184,224,165,141,224,164,165,224,164,191,224,164,164,224,164,191,224\n,164,137,224,164,164,224,165,141,224,164,170,224,164,190,224,164,166,224,164,137\n,224,164,168,224,165,141,224,164,185,224,165,135,224,164,130,224,164,154,224,164\n,191,224,164,159,224,165,141,224,164,160,224,164,190,224,164,175,224,164,190,224\n,164,164,224,165,141,224,164,176,224,164,190,224,164,156,224,165,141,224,164,175\n,224,164,190,224,164,166,224,164,190,224,164,170,224,165,129,224,164,176,224,164\n,190,224,164,168,224,165,135,224,164,156,224,165,139,224,164,161,224,164,188,224\n,165,135,224,164,130,224,164,133,224,164,168,224,165,129,224,164,181,224,164,190\n,224,164,166,224,164,182,224,165,141,224,164,176,224,165,135,224,164,163,224,165\n,128,224,164,182,224,164,191,224,164,149,224,165,141,224,164,183,224,164,190,224\n,164,184,224,164,176,224,164,149,224,164,190,224,164,176,224,165,128,224,164,184\n,224,164,130,224,164,151,224,165,141,224,164,176,224,164,185,224,164,170,224,164\n,176,224,164,191,224,164,163,224,164,190,224,164,174,224,164,172,224,165,141,224\n,164,176,224,164,190,224,164,130,224,164,161,224,164,172,224,164,154,224,165,141\n,224,164,154,224,165,139,224,164,130,224,164,137,224,164,170,224,164,178,224,164\n,172,224,165,141,224,164,167,224,164,174,224,164,130,224,164,164,224,165,141,224\n,164,176,224,165,128,224,164,184,224,164,130,224,164,170,224,164,176,224,165,141\n,224,164,149,224,164,137,224,164,174,224,165,141,224,164,174,224,165,128,224,164\n,166,224,164,174,224,164,190,224,164,167,224,165,141,224,164,175,224,164,174,224\n,164,184,224,164,185,224,164,190,224,164,175,224,164,164,224,164,190,224,164,182\n,224,164,172,224,165,141,224,164,166,224,165,139,224,164,130,224,164,174,224,165\n,128,224,164,161,224,164,191,224,164,175,224,164,190,224,164,134,224,164,136,224\n,164,170,224,165,128,224,164,143,224,164,178,224,164,174,224,165,139,224,164,172\n,224,164,190,224,164,135,224,164,178,224,164,184,224,164,130,224,164,150,224,165\n,141,224,164,175,224,164,190,224,164,134,224,164,170,224,164,176,224,165,135,224\n,164,182,224,164,168,224,164,133,224,164,168,224,165,129,224,164,172,224,164,130\n,224,164,167,224,164,172,224,164,190,224,164,156,224,164,188,224,164,190,224,164\n,176,224,164,168,224,164,181,224,165,128,224,164,168,224,164,164,224,164,174,224\n,164,170,224,165,141,224,164,176,224,164,174,224,165,129,224,164,150,224,164,170\n,224,165,141,224,164,176,224,164,182,224,165,141,224,164,168,224,164,170,224,164\n,176,224,164,191,224,164,181,224,164,190,224,164,176,224,164,168,224,165,129,224\n,164,149,224,164,184,224,164,190,224,164,168,224,164,184,224,164,174,224,164,176\n,224,165,141,224,164,165,224,164,168,224,164,134,224,164,175,224,165,139,224,164\n,156,224,164,191,224,164,164,224,164,184,224,165,139,224,164,174,224,164,181,224\n,164,190,224,164,176,216,167,217,132,217,133,216,180,216,167,216,177,217,131,216\n,167,216,170,216,167,217,132,217,133,217,134,216,170,216,175,217,138,216,167,216\n,170,216,167,217,132,217,131,217,133,216,168,217,138,217,136,216,170,216,177,216\n,167,217,132,217,133,216,180,216,167,217,135,216,175,216,167,216,170,216,185,216\n,175,216,175,216,167,217,132,216,178,217,136,216,167,216,177,216,185,216,175,216\n,175,216,167,217,132,216,177,216,175,217,136,216,175,216,167,217,132,216,165,216\n,179,217,132,216,167,217,133,217,138,216,169,216,167,217,132,217,129,217,136,216\n,170,217,136,216,180,217,136,216,168,216,167,217,132,217,133,216,179,216,167,216\n,168,217,130,216,167,216,170,216,167,217,132,217,133,216,185,217,132,217,136,217\n,133,216,167,216,170,216,167,217,132,217,133,216,179,217,132,216,179,217,132,216\n,167,216,170,216,167,217,132,216,172,216,177,216,167,217,129,217,138,217,131,216\n,179,216,167,217,132,216,167,216,179,217,132,216,167,217,133,217,138,216,169,216\n,167,217,132,216,167,216,170,216,181,216,167,217,132,216,167,216,170,107,101,121\n,119,111,114,100,115,34,32,99,111,110,116,101,110,116,61,34,119,51,46,111,114,\n103,47,49,57,57,57,47,120,104,116,109,108,34,62,60,97,32,116,97,114,103,101,116,\n61,34,95,98,108,97,110,107,34,32,116,101,120,116,47,104,116,109,108,59,32,99,104\n,97,114,115,101,116,61,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,107,\n34,62,60,116,97,98,108,101,32,99,101,108,108,112,97,100,100,105,110,103,61,34,97\n,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,116,101,120,\n116,45,97,108,105,103,110,58,32,99,101,110,116,101,114,59,116,111,32,108,97,115,\n116,32,118,101,114,115,105,111,110,32,98,121,32,98,97,99,107,103,114,111,117,110\n,100,45,99,111,108,111,114,58,32,35,34,32,104,114,101,102,61,34,104,116,116,112,\n58,47,47,119,119,119,46,47,100,105,118,62,60,47,100,105,118,62,60,100,105,118,32\n,105,100,61,60,97,32,104,114,101,102,61,34,35,34,32,99,108,97,115,115,61,34,34,\n62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,99,114,105,112,\n116,34,32,115,114,99,61,34,104,116,116,112,58,47,47,10,60,115,99,114,105,112,116\n,32,108,97,110,103,117,97,103,101,61,34,47,47,69,78,34,32,34,104,116,116,112,58,\n47,47,119,119,119,46,119,101,110,99,111,100,101,85,82,73,67,111,109,112,111,110,\n101,110,116,40,34,32,104,114,101,102,61,34,106,97,118,97,115,99,114,105,112,116,\n58,60,100,105,118,32,99,108,97,115,115,61,34,99,111,110,116,101,110,116,100,111,\n99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,115,99,112,111,115,105,\n116,105,111,110,58,32,97,98,115,111,108,117,116,101,59,115,99,114,105,112,116,32\n,115,114,99,61,34,104,116,116,112,58,47,47,32,115,116,121,108,101,61,34,109,97,\n114,103,105,110,45,116,111,112,58,46,109,105,110,46,106,115,34,62,60,47,115,99,\n114,105,112,116,62,10,60,47,100,105,118,62,10,60,100,105,118,32,99,108,97,115,\n115,61,34,119,51,46,111,114,103,47,49,57,57,57,47,120,104,116,109,108,34,32,10,\n13,10,60,47,98,111,100,121,62,13,10,60,47,104,116,109,108,62,100,105,115,116,105\n,110,99,116,105,111,110,32,98,101,116,119,101,101,110,47,34,32,116,97,114,103,\n101,116,61,34,95,98,108,97,110,107,34,62,60,108,105,110,107,32,104,114,101,102,\n61,34,104,116,116,112,58,47,47,101,110,99,111,100,105,110,103,61,34,117,116,102,\n45,56,34,63,62,10,119,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,\n101,114,63,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,119,119,119,46,\n105,99,111,110,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,32,115,116,\n121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,58,116,121,112,101,61,34,\n116,101,120,116,47,99,115,115,34,32,47,62,10,109,101,116,97,32,112,114,111,112,\n101,114,116,121,61,34,111,103,58,116,60,105,110,112,117,116,32,116,121,112,101,\n61,34,116,101,120,116,34,32,32,115,116,121,108,101,61,34,116,101,120,116,45,97,\n108,105,103,110,58,116,104,101,32,100,101,118,101,108,111,112,109,101,110,116,32\n,111,102,32,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,34,116,\n101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102,45,56,105,115\n,32,99,111,110,115,105,100,101,114,101,100,32,116,111,32,98,101,116,97,98,108,\n101,32,119,105,100,116,104,61,34,49,48,48,37,34,32,73,110,32,97,100,100,105,116,\n105,111,110,32,116,111,32,116,104,101,32,99,111,110,116,114,105,98,117,116,101,\n100,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,115,32,\n98,101,116,119,101,101,110,100,101,118,101,108,111,112,109,101,110,116,32,111,\n102,32,116,104,101,32,73,116,32,105,115,32,105,109,112,111,114,116,97,110,116,32\n,116,111,32,60,47,115,99,114,105,112,116,62,10,10,60,115,99,114,105,112,116,32,\n32,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,49,62,60,47,\n115,112,97,110,62,60,115,112,97,110,32,105,100,61,103,98,76,105,98,114,97,114,\n121,32,111,102,32,67,111,110,103,114,101,115,115,60,105,109,103,32,115,114,99,61\n,34,104,116,116,112,58,47,47,105,109,69,110,103,108,105,115,104,32,116,114,97,\n110,115,108,97,116,105,111,110,65,99,97,100,101,109,121,32,111,102,32,83,99,105,\n101,110,99,101,115,100,105,118,32,115,116,121,108,101,61,34,100,105,115,112,108,\n97,121,58,99,111,110,115,116,114,117,99,116,105,111,110,32,111,102,32,116,104,\n101,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,105,100,41,105,\n110,32,99,111,110,106,117,110,99,116,105,111,110,32,119,105,116,104,69,108,101,\n109,101,110,116,40,39,115,99,114,105,112,116,39,41,59,32,60,109,101,116,97,32,\n112,114,111,112,101,114,116,121,61,34,111,103,58,208,145,209,138,208,187,208,179\n,208,176,209,128,209,129,208,186,208,184,10,32,116,121,112,101,61,34,116,101,120\n,116,34,32,110,97,109,101,61,34,62,80,114,105,118,97,99,121,32,80,111,108,105,99\n,121,60,47,97,62,97,100,109,105,110,105,115,116,101,114,101,100,32,98,121,32,116\n,104,101,101,110,97,98,108,101,83,105,110,103,108,101,82,101,113,117,101,115,116\n,115,116,121,108,101,61,38,113,117,111,116,59,109,97,114,103,105,110,58,60,47,\n100,105,118,62,60,47,100,105,118,62,60,47,100,105,118,62,60,62,60,105,109,103,32\n,115,114,99,61,34,104,116,116,112,58,47,47,105,32,115,116,121,108,101,61,38,113,\n117,111,116,59,102,108,111,97,116,58,114,101,102,101,114,114,101,100,32,116,111,\n32,97,115,32,116,104,101,32,116,111,116,97,108,32,112,111,112,117,108,97,116,105\n,111,110,32,111,102,105,110,32,87,97,115,104,105,110,103,116,111,110,44,32,68,46\n,67,46,32,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,45,97,\n109,111,110,103,32,111,116,104,101,114,32,116,104,105,110,103,115,44,111,114,103\n,97,110,105,122,97,116,105,111,110,32,111,102,32,116,104,101,112,97,114,116,105,\n99,105,112,97,116,101,100,32,105,110,32,116,104,101,116,104,101,32,105,110,116,\n114,111,100,117,99,116,105,111,110,32,111,102,105,100,101,110,116,105,102,105,\n101,100,32,119,105,116,104,32,116,104,101,102,105,99,116,105,111,110,97,108,32,\n99,104,97,114,97,99,116,101,114,32,79,120,102,111,114,100,32,85,110,105,118,101,\n114,115,105,116,121,32,109,105,115,117,110,100,101,114,115,116,97,110,100,105,\n110,103,32,111,102,84,104,101,114,101,32,97,114,101,44,32,104,111,119,101,118,\n101,114,44,115,116,121,108,101,115,104,101,101,116,34,32,104,114,101,102,61,34,\n47,67,111,108,117,109,98,105,97,32,85,110,105,118,101,114,115,105,116,121,101,\n120,112,97,110,100,101,100,32,116,111,32,105,110,99,108,117,100,101,117,115,117,\n97,108,108,121,32,114,101,102,101,114,114,101,100,32,116,111,105,110,100,105,99,\n97,116,105,110,103,32,116,104,97,116,32,116,104,101,104,97,118,101,32,115,117,\n103,103,101,115,116,101,100,32,116,104,97,116,97,102,102,105,108,105,97,116,101,\n100,32,119,105,116,104,32,116,104,101,99,111,114,114,101,108,97,116,105,111,110,\n32,98,101,116,119,101,101,110,110,117,109,98,101,114,32,111,102,32,100,105,102,\n102,101,114,101,110,116,62,60,47,116,100,62,60,47,116,114,62,60,47,116,97,98,108\n,101,62,82,101,112,117,98,108,105,99,32,111,102,32,73,114,101,108,97,110,100,10,\n60,47,115,99,114,105,112,116,62,10,60,115,99,114,105,112,116,32,117,110,100,101,\n114,32,116,104,101,32,105,110,102,108,117,101,110,99,101,99,111,110,116,114,105,\n98,117,116,105,111,110,32,116,111,32,116,104,101,79,102,102,105,99,105,97,108,32\n,119,101,98,115,105,116,101,32,111,102,104,101,97,100,113,117,97,114,116,101,114\n,115,32,111,102,32,116,104,101,99,101,110,116,101,114,101,100,32,97,114,111,117,\n110,100,32,116,104,101,105,109,112,108,105,99,97,116,105,111,110,115,32,111,102,\n32,116,104,101,104,97,118,101,32,98,101,101,110,32,100,101,118,101,108,111,112,\n101,100,70,101,100,101,114,97,108,32,82,101,112,117,98,108,105,99,32,111,102,98,\n101,99,97,109,101,32,105,110,99,114,101,97,115,105,110,103,108,121,99,111,110,\n116,105,110,117,97,116,105,111,110,32,111,102,32,116,104,101,78,111,116,101,44,\n32,104,111,119,101,118,101,114,44,32,116,104,97,116,115,105,109,105,108,97,114,\n32,116,111,32,116,104,97,116,32,111,102,32,99,97,112,97,98,105,108,105,116,105,\n101,115,32,111,102,32,116,104,101,97,99,99,111,114,100,97,110,99,101,32,119,105,\n116,104,32,116,104,101,112,97,114,116,105,99,105,112,97,110,116,115,32,105,110,\n32,116,104,101,102,117,114,116,104,101,114,32,100,101,118,101,108,111,112,109,\n101,110,116,117,110,100,101,114,32,116,104,101,32,100,105,114,101,99,116,105,111\n,110,105,115,32,111,102,116,101,110,32,99,111,110,115,105,100,101,114,101,100,\n104,105,115,32,121,111,117,110,103,101,114,32,98,114,111,116,104,101,114,60,47,\n116,100,62,60,47,116,114,62,60,47,116,97,98,108,101,62,60,97,32,104,116,116,112,\n45,101,113,117,105,118,61,34,88,45,85,65,45,112,104,121,115,105,99,97,108,32,112\n,114,111,112,101,114,116,105,101,115,111,102,32,66,114,105,116,105,115,104,32,67\n,111,108,117,109,98,105,97,104,97,115,32,98,101,101,110,32,99,114,105,116,105,99\n,105,122,101,100,40,119,105,116,104,32,116,104,101,32,101,120,99,101,112,116,105\n,111,110,113,117,101,115,116,105,111,110,115,32,97,98,111,117,116,32,116,104,101\n,112,97,115,115,105,110,103,32,116,104,114,111,117,103,104,32,116,104,101,48,34,\n32,99,101,108,108,112,97,100,100,105,110,103,61,34,48,34,32,116,104,111,117,115,\n97,110,100,115,32,111,102,32,112,101,111,112,108,101,114,101,100,105,114,101,99,\n116,115,32,104,101,114,101,46,32,70,111,114,104,97,118,101,32,99,104,105,108,100\n,114,101,110,32,117,110,100,101,114,37,51,69,37,51,67,47,115,99,114,105,112,116,\n37,51,69,34,41,41,59,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119\n,119,119,46,60,108,105,62,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,\n47,115,105,116,101,95,110,97,109,101,34,32,99,111,110,116,101,110,116,61,34,116,\n101,120,116,45,100,101,99,111,114,97,116,105,111,110,58,110,111,110,101,115,116,\n121,108,101,61,34,100,105,115,112,108,97,121,58,32,110,111,110,101,60,109,101,\n116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,88,45,110,101,119,32,68,\n97,116,101,40,41,46,103,101,116,84,105,109,101,40,41,32,116,121,112,101,61,34,\n105,109,97,103,101,47,120,45,105,99,111,110,34,60,47,115,112,97,110,62,60,115,\n112,97,110,32,99,108,97,115,115,61,34,108,97,110,103,117,97,103,101,61,34,106,97\n,118,97,115,99,114,105,112,116,119,105,110,100,111,119,46,108,111,99,97,116,105,\n111,110,46,104,114,101,102,60,97,32,104,114,101,102,61,34,106,97,118,97,115,99,\n114,105,112,116,58,45,45,62,13,10,60,115,99,114,105,112,116,32,116,121,112,101,\n61,34,116,60,97,32,104,114,101,102,61,39,104,116,116,112,58,47,47,119,119,119,46\n,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,114,101,102,61,34,60,47,\n100,105,118,62,13,10,60,100,105,118,32,99,108,97,115,115,61,34,60,115,99,114,105\n,112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,34,32,114,101,108,61,34,\n115,116,121,108,101,115,104,101,101,116,34,32,116,60,47,100,105,118,62,10,60,115\n,99,114,105,112,116,32,116,121,112,101,61,47,97,62,32,60,97,32,104,114,101,102,\n61,34,104,116,116,112,58,47,47,32,97,108,108,111,119,84,114,97,110,115,112,97,\n114,101,110,99,121,61,34,88,45,85,65,45,67,111,109,112,97,116,105,98,108,101,34,\n32,99,111,110,114,101,108,97,116,105,111,110,115,104,105,112,32,98,101,116,119,\n101,101,110,10,60,47,115,99,114,105,112,116,62,13,10,60,115,99,114,105,112,116,\n32,60,47,97,62,60,47,108,105,62,60,47,117,108,62,60,47,100,105,118,62,97,115,115\n,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,112,114,111,103,\n114,97,109,109,105,110,103,32,108,97,110,103,117,97,103,101,60,47,97,62,60,97,32\n,104,114,101,102,61,34,104,116,116,112,58,47,47,60,47,97,62,60,47,108,105,62,60,\n108,105,32,99,108,97,115,115,61,34,102,111,114,109,32,97,99,116,105,111,110,61,\n34,104,116,116,112,58,47,47,60,100,105,118,32,115,116,121,108,101,61,34,100,105,\n115,112,108,97,121,58,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101\n,61,34,113,34,60,116,97,98,108,101,32,119,105,100,116,104,61,34,49,48,48,37,34,\n32,98,97,99,107,103,114,111,117,110,100,45,112,111,115,105,116,105,111,110,58,34\n,32,98,111,114,100,101,114,61,34,48,34,32,119,105,100,116,104,61,34,114,101,108,\n61,34,115,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,54,62,60,117,\n108,62,60,108,105,62,60,97,32,104,114,101,102,61,34,32,32,60,109,101,116,97,32,\n104,116,116,112,45,101,113,117,105,118,61,34,99,115,115,34,32,109,101,100,105,97\n,61,34,115,99,114,101,101,110,34,32,114,101,115,112,111,110,115,105,98,108,101,\n32,102,111,114,32,116,104,101,32,34,32,116,121,112,101,61,34,97,112,112,108,105,\n99,97,116,105,111,110,47,34,32,115,116,121,108,101,61,34,98,97,99,107,103,114,\n111,117,110,100,45,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,\n102,45,56,34,32,97,108,108,111,119,116,114,97,110,115,112,97,114,101,110,99,121,\n61,34,115,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,34,116,\n101,13,10,60,109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,62,\n60,47,115,112,97,110,62,60,115,112,97,110,32,99,108,97,115,115,61,34,48,34,32,99\n,101,108,108,115,112,97,99,105,110,103,61,34,48,34,62,59,10,60,47,115,99,114,105\n,112,116,62,10,60,115,99,114,105,112,116,32,115,111,109,101,116,105,109,101,115,\n32,99,97,108,108,101,100,32,116,104,101,100,111,101,115,32,110,111,116,32,110,\n101,99,101,115,115,97,114,105,108,121,70,111,114,32,109,111,114,101,32,105,110,\n102,111,114,109,97,116,105,111,110,97,116,32,116,104,101,32,98,101,103,105,110,\n110,105,110,103,32,111,102,32,60,33,68,79,67,84,89,80,69,32,104,116,109,108,62,\n60,104,116,109,108,112,97,114,116,105,99,117,108,97,114,108,121,32,105,110,32,\n116,104,101,32,116,121,112,101,61,34,104,105,100,100,101,110,34,32,110,97,109,\n101,61,34,106,97,118,97,115,99,114,105,112,116,58,118,111,105,100,40,48,41,59,34\n,101,102,102,101,99,116,105,118,101,110,101,115,115,32,111,102,32,116,104,101,32\n,97,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,103,101,\n110,101,114,97,108,108,121,32,99,111,110,115,105,100,101,114,101,100,62,60,105,\n110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,34,62,60,47,115,\n99,114,105,112,116,62,13,10,60,115,99,114,105,112,116,116,104,114,111,117,103,\n104,111,117,116,32,116,104,101,32,119,111,114,108,100,99,111,109,109,111,110,32,\n109,105,115,99,111,110,99,101,112,116,105,111,110,97,115,115,111,99,105,97,116,\n105,111,110,32,119,105,116,104,32,116,104,101,60,47,100,105,118,62,10,60,47,100,\n105,118,62,10,60,100,105,118,32,99,100,117,114,105,110,103,32,104,105,115,32,108\n,105,102,101,116,105,109,101,44,99,111,114,114,101,115,112,111,110,100,105,110,\n103,32,116,111,32,116,104,101,116,121,112,101,61,34,105,109,97,103,101,47,120,45\n,105,99,111,110,34,32,97,110,32,105,110,99,114,101,97,115,105,110,103,32,110,117\n,109,98,101,114,100,105,112,108,111,109,97,116,105,99,32,114,101,108,97,116,105,\n111,110,115,97,114,101,32,111,102,116,101,110,32,99,111,110,115,105,100,101,114,\n101,100,109,101,116,97,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,\n32,60,105,110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,101,120\n,97,109,112,108,101,115,32,105,110,99,108,117,100,101,32,116,104,101,34,62,60,\n105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,105,112,97,114,116,105,\n99,105,112,97,116,105,111,110,32,105,110,32,116,104,101,116,104,101,32,101,115,\n116,97,98,108,105,115,104,109,101,110,116,32,111,102,10,60,47,100,105,118,62,10,\n60,100,105,118,32,99,108,97,115,115,61,34,38,97,109,112,59,110,98,115,112,59,38,\n97,109,112,59,110,98,115,112,59,116,111,32,100,101,116,101,114,109,105,110,101,\n32,119,104,101,116,104,101,114,113,117,105,116,101,32,100,105,102,102,101,114,\n101,110,116,32,102,114,111,109,109,97,114,107,101,100,32,116,104,101,32,98,101,\n103,105,110,110,105,110,103,100,105,115,116,97,110,99,101,32,98,101,116,119,101,\n101,110,32,116,104,101,99,111,110,116,114,105,98,117,116,105,111,110,115,32,116,\n111,32,116,104,101,99,111,110,102,108,105,99,116,32,98,101,116,119,101,101,110,\n32,116,104,101,119,105,100,101,108,121,32,99,111,110,115,105,100,101,114,101,100\n,32,116,111,119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,102,105,114,\n115,116,119,105,116,104,32,118,97,114,121,105,110,103,32,100,101,103,114,101,101\n,115,104,97,118,101,32,115,112,101,99,117,108,97,116,101,100,32,116,104,97,116,\n40,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,112,\n97,114,116,105,99,105,112,97,116,105,110,103,32,105,110,32,116,104,101,111,114,\n105,103,105,110,97,108,108,121,32,100,101,118,101,108,111,112,101,100,101,116,97\n,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,32,116,121,112,101,\n61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,105,110,116,101,114,99,104,97\n,110,103,101,97,98,108,121,32,119,105,116,104,109,111,114,101,32,99,108,111,115,\n101,108,121,32,114,101,108,97,116,101,100,115,111,99,105,97,108,32,97,110,100,32\n,112,111,108,105,116,105,99,97,108,116,104,97,116,32,119,111,117,108,100,32,111,\n116,104,101,114,119,105,115,101,112,101,114,112,101,110,100,105,99,117,108,97,\n114,32,116,111,32,116,104,101,115,116,121,108,101,32,116,121,112,101,61,34,116,\n101,120,116,47,99,115,115,116,121,112,101,61,34,115,117,98,109,105,116,34,32,110\n,97,109,101,61,34,102,97,109,105,108,105,101,115,32,114,101,115,105,100,105,110,\n103,32,105,110,100,101,118,101,108,111,112,105,110,103,32,99,111,117,110,116,114\n,105,101,115,99,111,109,112,117,116,101,114,32,112,114,111,103,114,97,109,109,\n105,110,103,101,99,111,110,111,109,105,99,32,100,101,118,101,108,111,112,109,101\n,110,116,100,101,116,101,114,109,105,110,97,116,105,111,110,32,111,102,32,116,\n104,101,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111\n,110,111,110,32,115,101,118,101,114,97,108,32,111,99,99,97,115,105,111,110,115,\n112,111,114,116,117,103,117,195,170,115,32,40,69,117,114,111,112,101,117,41,208,\n163,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,176,209,\n131,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,176,208,\n160,208,190,209,129,209,129,208,184,208,185,209,129,208,186,208,190,208,185,208,\n188,208,176,209,130,208,181,209,128,208,184,208,176,208,187,208,190,208,178,208,\n184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,208,184,209,\n131,208,191,209,128,208,176,208,178,208,187,208,181,208,189,208,184,209,143,208,\n189,208,181,208,190,208,177,209,133,208,190,208,180,208,184,208,188,208,190,208,\n184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,143,208,\n152,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,143,208,\n160,208,181,209,129,208,191,209,131,208,177,208,187,208,184,208,186,208,184,208,\n186,208,190,208,187,208,184,209,135,208,181,209,129,209,130,208,178,208,190,208,\n184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,142,209,\n130,208,181,209,128,209,128,208,184,209,130,208,190,209,128,208,184,208,184,208,\n180,208,190,209,129,209,130,208,176,209,130,208,190,209,135,208,189,208,190,216,\n167,217,132,217,133,216,170,217,136,216,167,216,172,216,175,217,136,217,134,216,\n167,217,132,216,167,216,180,216,170,216,177,216,167,217,131,216,167,216,170,216,\n167,217,132,216,167,217,130,216,170,216,177,216,167,216,173,216,167,216,170,104,\n116,109,108,59,32,99,104,97,114,115,101,116,61,85,84,70,45,56,34,32,115,101,116,\n84,105,109,101,111,117,116,40,102,117,110,99,116,105,111,110,40,41,100,105,115,\n112,108,97,121,58,105,110,108,105,110,101,45,98,108,111,99,107,59,60,105,110,112\n,117,116,32,116,121,112,101,61,34,115,117,98,109,105,116,34,32,116,121,112,101,\n32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,60,105,109,103,32,\n115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,46,34,32,34,104,116,116,\n112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,115,104,111,114,116,99,117,\n116,32,105,99,111,110,34,32,104,114,101,102,61,34,34,32,97,117,116,111,99,111,\n109,112,108,101,116,101,61,34,111,102,102,34,32,60,47,97,62,60,47,100,105,118,62\n,60,100,105,118,32,99,108,97,115,115,61,60,47,97,62,60,47,108,105,62,10,60,108,\n105,32,99,108,97,115,115,61,34,99,115,115,34,32,116,121,112,101,61,34,116,101,\n120,116,47,99,115,115,34,32,60,102,111,114,109,32,97,99,116,105,111,110,61,34,\n104,116,116,112,58,47,47,120,116,47,99,115,115,34,32,104,114,101,102,61,34,104,\n116,116,112,58,47,47,108,105,110,107,32,114,101,108,61,34,97,108,116,101,114,110\n,97,116,101,34,32,13,10,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,\n101,120,116,47,32,111,110,99,108,105,99,107,61,34,106,97,118,97,115,99,114,105,\n112,116,58,40,110,101,119,32,68,97,116,101,41,46,103,101,116,84,105,109,101,40,\n41,125,104,101,105,103,104,116,61,34,49,34,32,119,105,100,116,104,61,34,49,34,32\n,80,101,111,112,108,101,39,115,32,82,101,112,117,98,108,105,99,32,111,102,32,32,\n60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,116,101,\n120,116,45,100,101,99,111,114,97,116,105,111,110,58,117,110,100,101,114,116,104,\n101,32,98,101,103,105,110,110,105,110,103,32,111,102,32,116,104,101,32,60,47,100\n,105,118,62,10,60,47,100,105,118,62,10,60,47,100,105,118,62,10,101,115,116,97,98\n,108,105,115,104,109,101,110,116,32,111,102,32,116,104,101,32,60,47,100,105,118,\n62,60,47,100,105,118,62,60,47,100,105,118,62,60,47,100,35,118,105,101,119,112,\n111,114,116,123,109,105,110,45,104,101,105,103,104,116,58,10,60,115,99,114,105,\n112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,111,112,116,105,111,110,62,\n60,111,112,116,105,111,110,32,118,97,108,117,101,61,111,102,116,101,110,32,114,\n101,102,101,114,114,101,100,32,116,111,32,97,115,32,47,111,112,116,105,111,110,\n62,10,60,111,112,116,105,111,110,32,118,97,108,117,60,33,68,79,67,84,89,80,69,32\n,104,116,109,108,62,10,60,33,45,45,91,73,110,116,101,114,110,97,116,105,111,110,\n97,108,32,65,105,114,112,111,114,116,62,10,60,97,32,104,114,101,102,61,34,104,\n116,116,112,58,47,47,119,119,119,60,47,97,62,60,97,32,104,114,101,102,61,34,104,\n116,116,112,58,47,47,119,224,184,160,224,184,178,224,184,169,224,184,178,224,185\n,132,224,184,151,224,184,162,225,131,165,225,131,144,225,131,160,225,131,151,225\n,131,163,225,131,154,225,131,152,230,173,163,233,171,148,228,184,173,230,150,135\n,32,40,231,185,129,233,171,148,41,224,164,168,224,164,191,224,164,176,224,165,\n141,224,164,166,224,165,135,224,164,182,224,164,161,224,164,190,224,164,137,224,\n164,168,224,164,178,224,165,139,224,164,161,224,164,149,224,165,141,224,164,183,\n224,165,135,224,164,164,224,165,141,224,164,176,224,164,156,224,164,190,224,164,\n168,224,164,149,224,164,190,224,164,176,224,165,128,224,164,184,224,164,130,224,\n164,172,224,164,130,224,164,167,224,164,191,224,164,164,224,164,184,224,165,141,\n224,164,165,224,164,190,224,164,170,224,164,168,224,164,190,224,164,184,224,165,\n141,224,164,181,224,165,128,224,164,149,224,164,190,224,164,176,224,164,184,224,\n164,130,224,164,184,224,165,141,224,164,149,224,164,176,224,164,163,224,164,184,\n224,164,190,224,164,174,224,164,151,224,165,141,224,164,176,224,165,128,224,164,\n154,224,164,191,224,164,159,224,165,141,224,164,160,224,165,139,224,164,130,224,\n164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,224,164,168,\n224,164,133,224,164,174,224,165,135,224,164,176,224,164,191,224,164,149,224,164,\n190,224,164,181,224,164,191,224,164,173,224,164,191,224,164,168,224,165,141,224,\n164,168,224,164,151,224,164,190,224,164,161,224,164,191,224,164,175,224,164,190,\n224,164,129,224,164,149,224,165,141,224,164,175,224,165,139,224,164,130,224,164,\n149,224,164,191,224,164,184,224,165,129,224,164,176,224,164,149,224,165,141,224,\n164,183,224,164,190,224,164,170,224,164,185,224,165,129,224,164,129,224,164,154,\n224,164,164,224,165,128,224,164,170,224,165,141,224,164,176,224,164,172,224,164,\n130,224,164,167,224,164,168,224,164,159,224,164,191,224,164,170,224,165,141,224,\n164,170,224,164,163,224,165,128,224,164,149,224,165,141,224,164,176,224,164,191,\n224,164,149,224,165,135,224,164,159,224,164,170,224,165,141,224,164,176,224,164,\n190,224,164,176,224,164,130,224,164,173,224,164,170,224,165,141,224,164,176,224,\n164,190,224,164,170,224,165,141,224,164,164,224,164,174,224,164,190,224,164,178,\n224,164,191,224,164,149,224,165,139,224,164,130,224,164,176,224,164,171,224,164,\n188,224,165,141,224,164,164,224,164,190,224,164,176,224,164,168,224,164,191,224,\n164,176,224,165,141,224,164,174,224,164,190,224,164,163,224,164,178,224,164,191,\n224,164,174,224,164,191,224,164,159,224,165,135,224,164,161,100,101,115,99,114,\n105,112,116,105,111,110,34,32,99,111,110,116,101,110,116,61,34,100,111,99,117,\n109,101,110,116,46,108,111,99,97,116,105,111,110,46,112,114,111,116,46,103,101,\n116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,60,33,68,79\n,67,84,89,80,69,32,104,116,109,108,62,10,60,104,116,109,108,32,60,109,101,116,97\n,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,58,117,114,108,34,32\n,99,111,110,116,101,110,116,61,34,104,116,116,112,58,47,47,46,99,115,115,34,32,\n114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,115,116,121,108,101\n,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,62,116,121,112,101,61\n,34,116,101,120,116,47,99,115,115,34,32,104,114,101,102,61,34,119,51,46,111,114,\n103,47,49,57,57,57,47,120,104,116,109,108,34,32,120,109,108,116,121,112,101,61,\n34,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,34,32,109,101,116,104\n,111,100,61,34,103,101,116,34,32,97,99,116,105,111,110,61,34,108,105,110,107,32,\n114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,32,61,32,100,111\n,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,116,121,112,\n101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,34,32,47,62,99,101,108,108\n,112,97,100,100,105,110,103,61,34,48,34,32,99,101,108,108,115,112,46,99,115,115,\n34,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,32,60,47,97,62,60,\n47,108,105,62,60,108,105,62,60,97,32,104,114,101,102,61,34,34,32,119,105,100,116\n,104,61,34,49,34,32,104,101,105,103,104,116,61,34,49,34,34,62,60,97,32,104,114,\n101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,115,116,121,108,101,61,34,\n100,105,115,112,108,97,121,58,110,111,110,101,59,34,62,97,108,116,101,114,110,97\n,116,101,34,32,116,121,112,101,61,34,97,112,112,108,105,45,47,47,87,51,67,47,47,\n68,84,68,32,88,72,84,77,76,32,49,46,48,32,101,108,108,115,112,97,99,105,110,103,\n61,34,48,34,32,99,101,108,108,112,97,100,32,116,121,112,101,61,34,104,105,100,\n100,101,110,34,32,118,97,108,117,101,61,34,47,97,62,38,110,98,115,112,59,60,115,\n112,97,110,32,114,111,108,101,61,34,115,10,60,105,110,112,117,116,32,116,121,112\n,101,61,34,104,105,100,100,101,110,34,32,108,97,110,103,117,97,103,101,61,34,74,\n97,118,97,83,99,114,105,112,116,34,32,32,100,111,99,117,109,101,110,116,46,103,\n101,116,69,108,101,109,101,110,116,115,66,103,61,34,48,34,32,99,101,108,108,115,\n112,97,99,105,110,103,61,34,48,34,32,121,112,101,61,34,116,101,120,116,47,99,115\n,115,34,32,109,101,100,105,97,61,34,116,121,112,101,61,39,116,101,120,116,47,106\n,97,118,97,115,99,114,105,112,116,39,119,105,116,104,32,116,104,101,32,101,120,\n99,101,112,116,105,111,110,32,111,102,32,121,112,101,61,34,116,101,120,116,47,99\n,115,115,34,32,114,101,108,61,34,115,116,32,104,101,105,103,104,116,61,34,49,34,\n32,119,105,100,116,104,61,34,49,34,32,61,39,43,101,110,99,111,100,101,85,82,73,\n67,111,109,112,111,110,101,110,116,40,60,108,105,110,107,32,114,101,108,61,34,97\n,108,116,101,114,110,97,116,101,34,32,10,98,111,100,121,44,32,116,114,44,32,105,\n110,112,117,116,44,32,116,101,120,116,109,101,116,97,32,110,97,109,101,61,34,114\n,111,98,111,116,115,34,32,99,111,110,109,101,116,104,111,100,61,34,112,111,115,\n116,34,32,97,99,116,105,111,110,61,34,62,10,60,97,32,104,114,101,102,61,34,104,\n116,116,112,58,47,47,119,119,119,46,99,115,115,34,32,114,101,108,61,34,115,116,\n121,108,101,115,104,101,101,116,34,32,60,47,100,105,118,62,60,47,100,105,118,62,\n60,100,105,118,32,99,108,97,115,115,108,97,110,103,117,97,103,101,61,34,106,97,\n118,97,115,99,114,105,112,116,34,62,97,114,105,97,45,104,105,100,100,101,110,61,\n34,116,114,117,101,34,62,194,183,60,114,105,112,116,34,32,116,121,112,101,61,34,\n116,101,120,116,47,106,97,118,97,115,108,61,48,59,125,41,40,41,59,10,40,102,117,\n110,99,116,105,111,110,40,41,123,98,97,99,107,103,114,111,117,110,100,45,105,109\n,97,103,101,58,32,117,114,108,40,47,97,62,60,47,108,105,62,60,108,105,62,60,97,\n32,104,114,101,102,61,34,104,9,9,60,108,105,62,60,97,32,104,114,101,102,61,34,\n104,116,116,112,58,47,47,97,116,111,114,34,32,97,114,105,97,45,104,105,100,100,\n101,110,61,34,116,114,117,62,32,60,97,32,104,114,101,102,61,34,104,116,116,112,\n58,47,47,119,119,119,46,108,97,110,103,117,97,103,101,61,34,106,97,118,97,115,99\n,114,105,112,116,34,32,47,111,112,116,105,111,110,62,10,60,111,112,116,105,111,\n110,32,118,97,108,117,101,47,100,105,118,62,60,47,100,105,118,62,60,100,105,118,\n32,99,108,97,115,115,61,114,97,116,111,114,34,32,97,114,105,97,45,104,105,100,\n100,101,110,61,34,116,114,101,61,40,110,101,119,32,68,97,116,101,41,46,103,101,\n116,84,105,109,101,40,41,112,111,114,116,117,103,117,195,170,115,32,40,100,111,\n32,66,114,97,115,105,108,41,208,190,209,128,208,179,208,176,208,189,208,184,208,\n183,208,176,209,134,208,184,208,184,208,178,208,190,208,183,208,188,208,190,208,\n182,208,189,208,190,209,129,209,130,209,140,208,190,208,177,209,128,208,176,208,\n183,208,190,208,178,208,176,208,189,208,184,209,143,209,128,208,181,208,179,208,\n184,209,129,209,130,209,128,208,176,209,134,208,184,208,184,208,178,208,190,208,\n183,208,188,208,190,208,182,208,189,208,190,209,129,209,130,208,184,208,190,208,\n177,209,143,208,183,208,176,209,130,208,181,208,187,209,140,208,189,208,176,60,\n33,68,79,67,84,89,80,69,32,104,116,109,108,32,80,85,66,76,73,67,32,34,110,116,45\n,84,121,112,101,34,32,99,111,110,116,101,110,116,61,34,116,101,120,116,47,60,109\n,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,67,111,110,116,101,\n114,97,110,115,105,116,105,111,110,97,108,47,47,69,78,34,32,34,104,116,116,112,\n58,60,104,116,109,108,32,120,109,108,110,115,61,34,104,116,116,112,58,47,47,119,\n119,119,45,47,47,87,51,67,47,47,68,84,68,32,88,72,84,77,76,32,49,46,48,32,84,68,\n84,68,47,120,104,116,109,108,49,45,116,114,97,110,115,105,116,105,111,110,97,108\n,47,47,119,119,119,46,119,51,46,111,114,103,47,84,82,47,120,104,116,109,108,49,\n47,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,\n39,59,60,109,101,116,97,32,110,97,109,101,61,34,100,101,115,99,114,105,112,116,\n105,111,110,112,97,114,101,110,116,78,111,100,101,46,105,110,115,101,114,116,66,\n101,102,111,114,101,60,105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,\n100,101,110,34,32,110,97,106,115,34,32,116,121,112,101,61,34,116,101,120,116,47,\n106,97,118,97,115,99,114,105,40,100,111,99,117,109,101,110,116,41,46,114,101,97,\n100,121,40,102,117,110,99,116,105,115,99,114,105,112,116,32,116,121,112,101,61,\n34,116,101,120,116,47,106,97,118,97,115,105,109,97,103,101,34,32,99,111,110,116,\n101,110,116,61,34,104,116,116,112,58,47,47,85,65,45,67,111,109,112,97,116,105,98\n,108,101,34,32,99,111,110,116,101,110,116,61,116,109,108,59,32,99,104,97,114,115\n,101,116,61,117,116,102,45,56,34,32,47,62,10,108,105,110,107,32,114,101,108,61,\n34,115,104,111,114,116,99,117,116,32,105,99,111,110,60,108,105,110,107,32,114,\n101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,60,47,115,99,114,105\n,112,116,62,10,60,115,99,114,105,112,116,32,116,121,112,101,61,61,32,100,111,99,\n117,109,101,110,116,46,99,114,101,97,116,101,69,108,101,109,101,110,60,97,32,116\n,97,114,103,101,116,61,34,95,98,108,97,110,107,34,32,104,114,101,102,61,32,100,\n111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,115,66,105,\n110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101,61\n,97,46,116,121,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,\n105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,101,110,34,32,110,\n97,109,101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102,45,56,\n34,32,47,62,100,116,100,34,62,10,60,104,116,109,108,32,120,109,108,110,115,61,34\n,104,116,116,112,45,47,47,87,51,67,47,47,68,84,68,32,72,84,77,76,32,52,46,48,49,\n32,84,101,110,116,115,66,121,84,97,103,78,97,109,101,40,39,115,99,114,105,112,\n116,39,41,105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,101,110,\n34,32,110,97,109,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,101,120,\n116,47,106,97,118,97,115,34,32,115,116,121,108,101,61,34,100,105,115,112,108,97,\n121,58,110,111,110,101,59,34,62,100,111,99,117,109,101,110,116,46,103,101,116,69\n,108,101,109,101,110,116,66,121,73,100,40,61,100,111,99,117,109,101,110,116,46,\n99,114,101,97,116,101,69,108,101,109,101,110,116,40,39,32,116,121,112,101,61,39,\n116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,105,110,112,117,116,\n32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101,61,34,100,46,103,\n101,116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,115,110\n,105,99,97,108,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,\n46,67,47,47,68,84,68,32,72,84,77,76,32,52,46,48,49,32,84,114,97,110,115,105,116,\n60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34\n,62,10,10,60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116,47,99,\n115,115,34,62,105,111,110,97,108,46,100,116,100,34,62,10,60,104,116,109,108,32,\n120,109,108,110,115,61,104,116,116,112,45,101,113,117,105,118,61,34,67,111,110,\n116,101,110,116,45,84,121,112,101,100,105,110,103,61,34,48,34,32,99,101,108,108,\n115,112,97,99,105,110,103,61,34,48,34,104,116,109,108,59,32,99,104,97,114,115,\n101,116,61,117,116,102,45,56,34,32,47,62,10,32,115,116,121,108,101,61,34,100,105\n,115,112,108,97,121,58,110,111,110,101,59,34,62,60,60,108,105,62,60,97,32,104,\n114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,32,116,121,112,101,61,\n39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,62,208,180,208,181\n,209,143,209,130,208,181,208,187,209,140,208,189,208,190,209,129,209,130,208,184\n,209,129,208,190,208,190,209,130,208,178,208,181,209,130,209,129,209,130,208,178\n,208,184,208,184,208,191,209,128,208,190,208,184,208,183,208,178,208,190,208,180\n,209,129,209,130,208,178,208,176,208,177,208,181,208,183,208,190,208,191,208,176\n,209,129,208,189,208,190,209,129,209,130,208,184,224,164,170,224,165,129,224,164\n,184,224,165,141,224,164,164,224,164,191,224,164,149,224,164,190,224,164,149,224\n,164,190,224,164,130,224,164,151,224,165,141,224,164,176,224,165,135,224,164,184\n,224,164,137,224,164,168,224,165,141,224,164,185,224,165,139,224,164,130,224,164\n,168,224,165,135,224,164,181,224,164,191,224,164,167,224,164,190,224,164,168,224\n,164,184,224,164,173,224,164,190,224,164,171,224,164,191,224,164,149,224,165,141\n,224,164,184,224,164,191,224,164,130,224,164,151,224,164,184,224,165,129,224,164\n,176,224,164,149,224,165,141,224,164,183,224,164,191,224,164,164,224,164,149,224\n,165,137,224,164,170,224,165,128,224,164,176,224,164,190,224,164,135,224,164,159\n,224,164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,224,164\n,170,224,164,168,224,164,149,224,164,190,224,164,176,224,165,141,224,164,176,224\n,164,181,224,164,190,224,164,136,224,164,184,224,164,149,224,165,141,224,164,176\n,224,164,191,224,164,175,224,164,164,224,164,190\n};\n"
  },
  {
    "path": "c/common/platform.c",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"platform.h\"\n\n/* Default brotli_alloc_func */\nvoid* BrotliDefaultAllocFunc(void* opaque, size_t size) {\n  BROTLI_UNUSED(opaque);\n  return malloc(size);\n}\n\n/* Default brotli_free_func */\nvoid BrotliDefaultFreeFunc(void* opaque, void* address) {\n  BROTLI_UNUSED(opaque);\n  free(address);\n}\n"
  },
  {
    "path": "c/common/platform.h",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Macros for compiler / platform specific features and build options.\n\n   Build options are:\n    * BROTLI_BUILD_32_BIT disables 64-bit optimizations\n    * BROTLI_BUILD_64_BIT forces to use 64-bit optimizations\n    * BROTLI_BUILD_BIG_ENDIAN forces to use big-endian optimizations\n    * BROTLI_BUILD_ENDIAN_NEUTRAL disables endian-aware optimizations\n    * BROTLI_BUILD_LITTLE_ENDIAN forces to use little-endian optimizations\n    * BROTLI_BUILD_NO_RBIT disables \"rbit\" optimization for ARM CPUs\n    * BROTLI_BUILD_NO_UNALIGNED_READ_FAST forces off the fast-unaligned-read\n      optimizations (mainly for testing purposes)\n    * BROTLI_DEBUG dumps file name and line number when decoder detects stream\n      or memory error\n    * BROTLI_ENABLE_LOG enables asserts and dumps various state information\n    * BROTLI_ENABLE_DUMP overrides default \"dump\" behaviour\n*/\n\n#ifndef BROTLI_COMMON_PLATFORM_H_\n#define BROTLI_COMMON_PLATFORM_H_\n\n#include <string.h>  /* IWYU pragma: export memcmp, memcpy, memset */\n#include <stdlib.h>  /* IWYU pragma: export exit, free, malloc */\n#include <sys/types.h>  /* should include endian.h for us */\n\n#include <brotli/port.h>  /* IWYU pragma: export */\n#include <brotli/types.h>  /* IWYU pragma: export */\n\n#if BROTLI_MSVC_VERSION_CHECK(18, 0, 0)\n#include <intrin.h>\n#endif\n\n#if defined(BROTLI_ENABLE_LOG) || defined(BROTLI_DEBUG)\n#include <assert.h>\n#include <stdio.h>\n#endif\n\n/* The following macros were borrowed from https://github.com/nemequ/hedley\n * with permission of original author - Evan Nemerson <evan@nemerson.com> */\n\n/* >>> >>> >>> hedley macros */\n\n/* Define \"BROTLI_PREDICT_TRUE\" and \"BROTLI_PREDICT_FALSE\" macros for capable\n   compilers.\n\nTo apply compiler hint, enclose the branching condition into macros, like this:\n\n  if (BROTLI_PREDICT_TRUE(zero == 0)) {\n    // main execution path\n  } else {\n    // compiler should place this code outside of main execution path\n  }\n\nOR:\n\n  if (BROTLI_PREDICT_FALSE(something_rare_or_unexpected_happens)) {\n    // compiler should place this code outside of main execution path\n  }\n\n*/\n#if BROTLI_GNUC_HAS_BUILTIN(__builtin_expect, 3, 0, 0) || \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0) ||               \\\n    BROTLI_SUNPRO_VERSION_CHECK(5, 15, 0) ||              \\\n    BROTLI_ARM_VERSION_CHECK(4, 1, 0) ||                  \\\n    BROTLI_IBM_VERSION_CHECK(10, 1, 0) ||                 \\\n    BROTLI_TI_VERSION_CHECK(7, 3, 0) ||                   \\\n    BROTLI_TINYC_VERSION_CHECK(0, 9, 27)\n#define BROTLI_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))\n#define BROTLI_PREDICT_FALSE(x) (__builtin_expect(x, 0))\n#else\n#define BROTLI_PREDICT_FALSE(x) (x)\n#define BROTLI_PREDICT_TRUE(x) (x)\n#endif\n\n#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \\\n    !defined(__cplusplus)\n#define BROTLI_RESTRICT restrict\n#elif BROTLI_GNUC_VERSION_CHECK(3, 1, 0) ||                         \\\n    BROTLI_MSVC_VERSION_CHECK(14, 0, 0) ||                          \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0) ||                         \\\n    BROTLI_ARM_VERSION_CHECK(4, 1, 0) ||                            \\\n    BROTLI_IBM_VERSION_CHECK(10, 1, 0) ||                           \\\n    BROTLI_PGI_VERSION_CHECK(17, 10, 0) ||                          \\\n    BROTLI_TI_VERSION_CHECK(8, 0, 0) ||                             \\\n    BROTLI_IAR_VERSION_CHECK(8, 0, 0) ||                            \\\n    (BROTLI_SUNPRO_VERSION_CHECK(5, 14, 0) && defined(__cplusplus))\n#define BROTLI_RESTRICT __restrict\n#elif BROTLI_SUNPRO_VERSION_CHECK(5, 3, 0) && !defined(__cplusplus)\n#define BROTLI_RESTRICT _Restrict\n#else\n#define BROTLI_RESTRICT\n#endif\n\n#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \\\n    (defined(__cplusplus) && (__cplusplus >= 199711L))\n#define BROTLI_MAYBE_INLINE inline\n#elif defined(__GNUC_STDC_INLINE__) || defined(__GNUC_GNU_INLINE__) || \\\n    BROTLI_ARM_VERSION_CHECK(6, 2, 0)\n#define BROTLI_MAYBE_INLINE __inline__\n#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0) || \\\n    BROTLI_ARM_VERSION_CHECK(4, 1, 0) || BROTLI_TI_VERSION_CHECK(8, 0, 0)\n#define BROTLI_MAYBE_INLINE __inline\n#else\n#define BROTLI_MAYBE_INLINE\n#endif\n\n#if BROTLI_GNUC_HAS_ATTRIBUTE(always_inline, 4, 0, 0) ||                       \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0) ||                                    \\\n    BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) ||                                   \\\n    BROTLI_ARM_VERSION_CHECK(4, 1, 0) ||                                       \\\n    BROTLI_IBM_VERSION_CHECK(10, 1, 0) ||                                      \\\n    BROTLI_TI_VERSION_CHECK(8, 0, 0) ||                                        \\\n    (BROTLI_TI_VERSION_CHECK(7, 3, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__))\n#define BROTLI_INLINE BROTLI_MAYBE_INLINE __attribute__((__always_inline__))\n#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0)\n#define BROTLI_INLINE BROTLI_MAYBE_INLINE __forceinline\n#elif BROTLI_TI_VERSION_CHECK(7, 0, 0) && defined(__cplusplus)\n#define BROTLI_INLINE BROTLI_MAYBE_INLINE _Pragma(\"FUNC_ALWAYS_INLINE;\")\n#elif BROTLI_IAR_VERSION_CHECK(8, 0, 0)\n#define BROTLI_INLINE BROTLI_MAYBE_INLINE _Pragma(\"inline=forced\")\n#else\n#define BROTLI_INLINE BROTLI_MAYBE_INLINE\n#endif\n\n#if BROTLI_GNUC_HAS_ATTRIBUTE(noinline, 4, 0, 0) ||                            \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0) ||                                    \\\n    BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) ||                                   \\\n    BROTLI_ARM_VERSION_CHECK(4, 1, 0) ||                                       \\\n    BROTLI_IBM_VERSION_CHECK(10, 1, 0) ||                                      \\\n    BROTLI_TI_VERSION_CHECK(8, 0, 0) ||                                        \\\n    (BROTLI_TI_VERSION_CHECK(7, 3, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__))\n#define BROTLI_NOINLINE __attribute__((__noinline__))\n#elif BROTLI_MSVC_VERSION_CHECK(13, 10, 0)\n#define BROTLI_NOINLINE __declspec(noinline)\n#elif BROTLI_PGI_VERSION_CHECK(10, 2, 0)\n#define BROTLI_NOINLINE _Pragma(\"noinline\")\n#elif BROTLI_TI_VERSION_CHECK(6, 0, 0) && defined(__cplusplus)\n#define BROTLI_NOINLINE _Pragma(\"FUNC_CANNOT_INLINE;\")\n#elif BROTLI_IAR_VERSION_CHECK(8, 0, 0)\n#define BROTLI_NOINLINE _Pragma(\"inline=never\")\n#else\n#define BROTLI_NOINLINE\n#endif\n\n/* <<< <<< <<< end of hedley macros. */\n\n#if BROTLI_GNUC_HAS_ATTRIBUTE(unused, 2, 7, 0) || \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0)\n#define BROTLI_UNUSED_FUNCTION static BROTLI_INLINE __attribute__ ((unused))\n#else\n#define BROTLI_UNUSED_FUNCTION static BROTLI_INLINE\n#endif\n\n#if BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0)\n#define BROTLI_ALIGNED(N) __attribute__((aligned(N)))\n#else\n#define BROTLI_ALIGNED(N)\n#endif\n\n#if (defined(__ARM_ARCH) && (__ARM_ARCH == 7)) || \\\n    (defined(M_ARM) && (M_ARM == 7))\n#define BROTLI_TARGET_ARMV7\n#endif  /* ARMv7 */\n\n#if (defined(__ARM_ARCH) && (__ARM_ARCH == 8)) || \\\n    defined(__aarch64__) || defined(__ARM64_ARCH_8__)\n#define BROTLI_TARGET_ARMV8_ANY\n\n#if defined(__ARM_32BIT_STATE)\n#define BROTLI_TARGET_ARMV8_32\n#elif defined(__ARM_64BIT_STATE)\n#define BROTLI_TARGET_ARMV8_64\n#endif\n\n#endif  /* ARMv8 */\n\n#if defined(__ARM_NEON__) || defined(__ARM_NEON)\n#define BROTLI_TARGET_NEON\n#endif\n\n#if defined(__i386) || defined(_M_IX86)\n#define BROTLI_TARGET_X86\n#endif\n\n#if defined(__x86_64__) || defined(_M_X64)\n#define BROTLI_TARGET_X64\n#endif\n\n#if defined(__PPC64__)\n#define BROTLI_TARGET_POWERPC64\n#endif\n\n#if defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64\n#define BROTLI_TARGET_RISCV64\n#endif\n\n#if defined(__loongarch_lp64)\n#define BROTLI_TARGET_LOONGARCH64\n#endif\n\n/* This does not seem to be an indicator of z/Architecture (64-bit); neither\n   that allows to use unaligned loads. */\n#if defined(__s390x__)\n#define BROTLI_TARGET_S390X\n#endif\n\n#if defined(__mips64)\n#define BROTLI_TARGET_MIPS64\n#endif\n\n#if defined(__ia64__) || defined(_M_IA64)\n#define BROTLI_TARGET_IA64\n#endif\n\n#if defined(BROTLI_TARGET_X64) || defined(BROTLI_TARGET_ARMV8_64) || \\\n    defined(BROTLI_TARGET_POWERPC64) || defined(BROTLI_TARGET_RISCV64) || \\\n    defined(BROTLI_TARGET_LOONGARCH64) || defined(BROTLI_TARGET_MIPS64)\n#define BROTLI_TARGET_64_BITS 1\n#else\n#define BROTLI_TARGET_64_BITS 0\n#endif\n\n#if defined(BROTLI_BUILD_64_BIT)\n#define BROTLI_64_BITS 1\n#elif defined(BROTLI_BUILD_32_BIT)\n#define BROTLI_64_BITS 0\n#else\n#define BROTLI_64_BITS BROTLI_TARGET_64_BITS\n#endif\n\n#if (BROTLI_64_BITS)\n#define brotli_reg_t uint64_t\n#else\n#define brotli_reg_t uint32_t\n#endif\n\n#if defined(BROTLI_BUILD_BIG_ENDIAN)\n#define BROTLI_BIG_ENDIAN 1\n#elif defined(BROTLI_BUILD_LITTLE_ENDIAN)\n#define BROTLI_LITTLE_ENDIAN 1\n#elif defined(BROTLI_BUILD_ENDIAN_NEUTRAL)\n/* Just break elif chain. */\n#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)\n#define BROTLI_LITTLE_ENDIAN 1\n#elif defined(_WIN32) || defined(BROTLI_TARGET_X64)\n/* Win32 & x64 can currently always be assumed to be little endian */\n#define BROTLI_LITTLE_ENDIAN 1\n#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)\n#define BROTLI_BIG_ENDIAN 1\n/* Likely target platform is iOS / OSX. */\n#elif defined(BYTE_ORDER) && (BYTE_ORDER == LITTLE_ENDIAN)\n#define BROTLI_LITTLE_ENDIAN 1\n#elif defined(BYTE_ORDER) && (BYTE_ORDER == BIG_ENDIAN)\n#define BROTLI_BIG_ENDIAN 1\n#endif\n\n#if !defined(BROTLI_LITTLE_ENDIAN)\n#define BROTLI_LITTLE_ENDIAN 0\n#endif\n\n#if !defined(BROTLI_BIG_ENDIAN)\n#define BROTLI_BIG_ENDIAN 0\n#endif\n\n#if defined(BROTLI_BUILD_NO_UNALIGNED_READ_FAST)\n#define BROTLI_UNALIGNED_READ_FAST (!!0)\n#elif defined(BROTLI_TARGET_X86) || defined(BROTLI_TARGET_X64) ||       \\\n    defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY) || \\\n    defined(BROTLI_TARGET_RISCV64) || defined(BROTLI_TARGET_LOONGARCH64)\n/* These targets are known to generate efficient code for unaligned reads\n * (e.g. a single instruction, not multiple 1-byte loads, shifted and or'd\n * together). */\n#define BROTLI_UNALIGNED_READ_FAST (!!1)\n#else\n#define BROTLI_UNALIGNED_READ_FAST (!!0)\n#endif\n\n/* Portable unaligned memory access: read / write values via memcpy. */\n#if !defined(BROTLI_USE_PACKED_FOR_UNALIGNED)\n#if defined(__mips__) && (!defined(__mips_isa_rev) || __mips_isa_rev < 6)\n#define BROTLI_USE_PACKED_FOR_UNALIGNED 1\n#else\n#define BROTLI_USE_PACKED_FOR_UNALIGNED 0\n#endif\n#endif /* defined(BROTLI_USE_PACKED_FOR_UNALIGNED) */\n\n#if BROTLI_USE_PACKED_FOR_UNALIGNED\n\ntypedef union BrotliPackedValue {\n  uint16_t u16;\n  uint32_t u32;\n  uint64_t u64;\n  size_t szt;\n} __attribute__ ((packed)) BrotliPackedValue;\n\nstatic BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) {\n  const BrotliPackedValue* address = (const BrotliPackedValue*)p;\n  return address->u16;\n}\nstatic BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) {\n  const BrotliPackedValue* address = (const BrotliPackedValue*)p;\n  return address->u32;\n}\nstatic BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {\n  const BrotliPackedValue* address = (const BrotliPackedValue*)p;\n  return address->u64;\n}\nstatic BROTLI_INLINE size_t BrotliUnalignedReadSizeT(const void* p) {\n  const BrotliPackedValue* address = (const BrotliPackedValue*)p;\n  return address->szt;\n}\nstatic BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {\n  BrotliPackedValue* address = (BrotliPackedValue*)p;\n  address->u64 = v;\n}\n\n#else  /* not BROTLI_USE_PACKED_FOR_UNALIGNED */\n\nstatic BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) {\n  uint16_t t;\n  memcpy(&t, p, sizeof t);\n  return t;\n}\nstatic BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) {\n  uint32_t t;\n  memcpy(&t, p, sizeof t);\n  return t;\n}\nstatic BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {\n  uint64_t t;\n  memcpy(&t, p, sizeof t);\n  return t;\n}\nstatic BROTLI_INLINE size_t BrotliUnalignedReadSizeT(const void* p) {\n  size_t t;\n  memcpy(&t, p, sizeof t);\n  return t;\n}\nstatic BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {\n  memcpy(p, &v, sizeof v);\n}\n\n#endif  /* BROTLI_USE_PACKED_FOR_UNALIGNED */\n\n#if BROTLI_GNUC_HAS_BUILTIN(__builtin_bswap16, 4, 3, 0)\n#define BROTLI_BSWAP16(V) ((uint16_t)__builtin_bswap16(V))\n#else\n#define BROTLI_BSWAP16(V) ((uint16_t)( \\\n  (((V) & 0xFFU) << 8) | \\\n  (((V) >> 8) & 0xFFU)))\n#endif\n\n#if BROTLI_GNUC_HAS_BUILTIN(__builtin_bswap32, 4, 3, 0)\n#define BROTLI_BSWAP32(V) ((uint32_t)__builtin_bswap32(V))\n#else\n#define BROTLI_BSWAP32(V) ((uint32_t)( \\\n  (((V) & 0xFFU) << 24) | (((V) & 0xFF00U) << 8) | \\\n  (((V) >> 8) & 0xFF00U) | (((V) >> 24) & 0xFFU)))\n#endif\n\n#if BROTLI_GNUC_HAS_BUILTIN(__builtin_bswap64, 4, 3, 0)\n#define BROTLI_BSWAP64(V) ((uint64_t)__builtin_bswap64(V))\n#else\n#define BROTLI_BSWAP64(V) ((uint64_t)( \\\n  (((V) & 0xFFU) << 56) | (((V) & 0xFF00U) << 40) | \\\n  (((V) & 0xFF0000U) << 24) | (((V) & 0xFF000000U) << 8) | \\\n  (((V) >> 8) & 0xFF000000U) | (((V) >> 24) & 0xFF0000U) | \\\n  (((V) >> 40) & 0xFF00U) | (((V) >> 56) & 0xFFU)))\n#endif\n\n#if BROTLI_LITTLE_ENDIAN\n/* Straight endianness. Just read / write values. */\n#define BROTLI_UNALIGNED_LOAD16LE BrotliUnalignedRead16\n#define BROTLI_UNALIGNED_LOAD32LE BrotliUnalignedRead32\n#define BROTLI_UNALIGNED_LOAD64LE BrotliUnalignedRead64\n#define BROTLI_UNALIGNED_STORE64LE BrotliUnalignedWrite64\n#elif BROTLI_BIG_ENDIAN  /* BROTLI_LITTLE_ENDIAN */\nstatic BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p) {\n  uint16_t value = BrotliUnalignedRead16(p);\n  return BROTLI_BSWAP16(value);\n}\nstatic BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p) {\n  uint32_t value = BrotliUnalignedRead32(p);\n  return BROTLI_BSWAP32(value);\n}\nstatic BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p) {\n  uint64_t value = BrotliUnalignedRead64(p);\n  return BROTLI_BSWAP64(value);\n}\nstatic BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p, uint64_t v) {\n  uint64_t value = BROTLI_BSWAP64(v);\n  BrotliUnalignedWrite64(p, value);\n}\n#else  /* BROTLI_LITTLE_ENDIAN */\n/* Read / store values byte-wise; hopefully compiler will understand. */\nstatic BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p) {\n  const uint8_t* in = (const uint8_t*)p;\n  return (uint16_t)(in[0] | (in[1] << 8));\n}\nstatic BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p) {\n  const uint8_t* in = (const uint8_t*)p;\n  uint32_t value = (uint32_t)(in[0]);\n  value |= (uint32_t)(in[1]) << 8;\n  value |= (uint32_t)(in[2]) << 16;\n  value |= (uint32_t)(in[3]) << 24;\n  return value;\n}\nstatic BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p) {\n  const uint8_t* in = (const uint8_t*)p;\n  uint64_t value = (uint64_t)(in[0]);\n  value |= (uint64_t)(in[1]) << 8;\n  value |= (uint64_t)(in[2]) << 16;\n  value |= (uint64_t)(in[3]) << 24;\n  value |= (uint64_t)(in[4]) << 32;\n  value |= (uint64_t)(in[5]) << 40;\n  value |= (uint64_t)(in[6]) << 48;\n  value |= (uint64_t)(in[7]) << 56;\n  return value;\n}\nstatic BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p, uint64_t v) {\n  uint8_t* out = (uint8_t*)p;\n  out[0] = (uint8_t)v;\n  out[1] = (uint8_t)(v >> 8);\n  out[2] = (uint8_t)(v >> 16);\n  out[3] = (uint8_t)(v >> 24);\n  out[4] = (uint8_t)(v >> 32);\n  out[5] = (uint8_t)(v >> 40);\n  out[6] = (uint8_t)(v >> 48);\n  out[7] = (uint8_t)(v >> 56);\n}\n#endif  /* BROTLI_LITTLE_ENDIAN */\n\nstatic BROTLI_INLINE void* BROTLI_UNALIGNED_LOAD_PTR(const void* p) {\n  void* v;\n  memcpy(&v, p, sizeof(void*));\n  return v;\n}\n\nstatic BROTLI_INLINE void BROTLI_UNALIGNED_STORE_PTR(void* p, const void* v) {\n  memcpy(p, &v, sizeof(void*));\n}\n\n/* BROTLI_IS_CONSTANT macros returns true for compile-time constants. */\n#if BROTLI_GNUC_HAS_BUILTIN(__builtin_constant_p, 3, 0, 1) || \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0)\n#define BROTLI_IS_CONSTANT(x) (!!__builtin_constant_p(x))\n#else\n#define BROTLI_IS_CONSTANT(x) (!!0)\n#endif\n\n#if defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY)\n#define BROTLI_HAS_UBFX (!!1)\n#else\n#define BROTLI_HAS_UBFX (!!0)\n#endif\n\n#if defined(BROTLI_ENABLE_LOG)\n#define BROTLI_LOG(x) printf x\n#else\n#define BROTLI_LOG(x)\n#endif\n\n#if defined(BROTLI_DEBUG) || defined(BROTLI_ENABLE_LOG)\n#define BROTLI_ENABLE_DUMP_DEFAULT 1\n#define BROTLI_DCHECK(x) assert(x)\n#else\n#define BROTLI_ENABLE_DUMP_DEFAULT 0\n#define BROTLI_DCHECK(x)\n#endif\n\n#if !defined(BROTLI_ENABLE_DUMP)\n#define BROTLI_ENABLE_DUMP BROTLI_ENABLE_DUMP_DEFAULT\n#endif\n\n#if BROTLI_ENABLE_DUMP\nstatic BROTLI_INLINE void BrotliDump(const char* f, int l, const char* fn) {\n  fprintf(stderr, \"%s:%d (%s)\\n\", f, l, fn);\n  fflush(stderr);\n}\n#define BROTLI_DUMP() BrotliDump(__FILE__, __LINE__, __FUNCTION__)\n#else\n#define BROTLI_DUMP() (void)(0)\n#endif\n\n/* BrotliRBit assumes brotli_reg_t fits native CPU register type. */\n#if (BROTLI_64_BITS == BROTLI_TARGET_64_BITS)\n/* TODO(eustas): add appropriate icc/sunpro/arm/ibm/ti checks. */\n#if (BROTLI_GNUC_VERSION_CHECK(3, 0, 0) || defined(__llvm__)) && \\\n    !defined(BROTLI_BUILD_NO_RBIT)\n#if defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY)\n/* TODO(eustas): detect ARMv6T2 and enable this code for it. */\nstatic BROTLI_INLINE brotli_reg_t BrotliRBit(brotli_reg_t input) {\n  brotli_reg_t output;\n  __asm__(\"rbit %0, %1\\n\" : \"=r\"(output) : \"r\"(input));\n  return output;\n}\n#define BROTLI_RBIT(x) BrotliRBit(x)\n#endif  /* armv7 / armv8 */\n#endif  /* gcc || clang */\n#endif  /* brotli_reg_t is native */\n#if !defined(BROTLI_RBIT)\nstatic BROTLI_INLINE void BrotliRBit(void) { /* Should break build if used. */ }\n#endif  /* BROTLI_RBIT */\n\n#define BROTLI_REPEAT_4(X) {X; X; X; X;}\n#define BROTLI_REPEAT_5(X) {X; X; X; X; X;}\n#define BROTLI_REPEAT_6(X) {X; X; X; X; X; X;}\n\n#define BROTLI_UNUSED(X) (void)(X)\n\n#define BROTLI_MIN_MAX(T)                                                      \\\n  static BROTLI_INLINE T brotli_min_ ## T (T a, T b) { return a < b ? a : b; } \\\n  static BROTLI_INLINE T brotli_max_ ## T (T a, T b) { return a > b ? a : b; }\nBROTLI_MIN_MAX(double) BROTLI_MIN_MAX(float) BROTLI_MIN_MAX(int)\nBROTLI_MIN_MAX(size_t) BROTLI_MIN_MAX(uint32_t) BROTLI_MIN_MAX(uint8_t)\n#undef BROTLI_MIN_MAX\n#define BROTLI_MIN(T, A, B) (brotli_min_ ## T((A), (B)))\n#define BROTLI_MAX(T, A, B) (brotli_max_ ## T((A), (B)))\n\n#define BROTLI_SWAP(T, A, I, J) { \\\n  T __brotli_swap_tmp = (A)[(I)]; \\\n  (A)[(I)] = (A)[(J)];            \\\n  (A)[(J)] = __brotli_swap_tmp;   \\\n}\n\n#if BROTLI_64_BITS\n#if BROTLI_GNUC_HAS_BUILTIN(__builtin_ctzll, 3, 4, 0) || \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0)\n#define BROTLI_TZCNT64 __builtin_ctzll\n#elif BROTLI_MSVC_VERSION_CHECK(18, 0, 0)\n#if defined(BROTLI_TARGET_X64) && !defined(_M_ARM64EC)\n#define BROTLI_TZCNT64 _tzcnt_u64\n#else /* BROTLI_TARGET_X64 */\nstatic BROTLI_INLINE uint32_t BrotliBsf64Msvc(uint64_t x) {\n  uint32_t lsb;\n  _BitScanForward64(&lsb, x);\n  return lsb;\n}\n#define BROTLI_TZCNT64 BrotliBsf64Msvc\n#endif /* BROTLI_TARGET_X64 */\n#endif /* __builtin_ctzll */\n#endif /* BROTLI_64_BITS */\n\n#if BROTLI_GNUC_HAS_BUILTIN(__builtin_clz, 3, 4, 0) || \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0)\n#define BROTLI_BSR32(x) (31u ^ (uint32_t)__builtin_clz(x))\n#elif BROTLI_MSVC_VERSION_CHECK(18, 0, 0)\nstatic BROTLI_INLINE uint32_t BrotliBsr32Msvc(uint32_t x) {\n  unsigned long msb;\n  _BitScanReverse(&msb, x);\n  return (uint32_t)msb;\n}\n#define BROTLI_BSR32 BrotliBsr32Msvc\n#endif /* __builtin_clz */\n\n/* Default brotli_alloc_func */\nBROTLI_COMMON_API void* BrotliDefaultAllocFunc(void* opaque, size_t size);\n\n/* Default brotli_free_func */\nBROTLI_COMMON_API void BrotliDefaultFreeFunc(void* opaque, void* address);\n\n/* Circular logical rotates. */\nstatic BROTLI_INLINE uint16_t BrotliRotateRight16(uint16_t const value,\n                                             size_t count) {\n  count &= 0x0F; /* for fickle pattern recognition */\n  return (value >> count) | (uint16_t)(value << ((0U - count) & 0x0F));\n}\nstatic BROTLI_INLINE uint32_t BrotliRotateRight32(uint32_t const value,\n                                             size_t count) {\n  count &= 0x1F; /* for fickle pattern recognition */\n  return (value >> count) | (uint32_t)(value << ((0U - count) & 0x1F));\n}\nstatic BROTLI_INLINE uint64_t BrotliRotateRight64(uint64_t const value,\n                                             size_t count) {\n  count &= 0x3F; /* for fickle pattern recognition */\n  return (value >> count) | (uint64_t)(value << ((0U - count) & 0x3F));\n}\n\nBROTLI_UNUSED_FUNCTION void BrotliSuppressUnusedFunctions(void) {\n  BROTLI_UNUSED(&BrotliSuppressUnusedFunctions);\n  BROTLI_UNUSED(&BrotliUnalignedRead16);\n  BROTLI_UNUSED(&BrotliUnalignedRead32);\n  BROTLI_UNUSED(&BrotliUnalignedRead64);\n  BROTLI_UNUSED(&BrotliUnalignedReadSizeT);\n  BROTLI_UNUSED(&BrotliUnalignedWrite64);\n  BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD16LE);\n  BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD32LE);\n  BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD64LE);\n  BROTLI_UNUSED(&BROTLI_UNALIGNED_STORE64LE);\n  BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD_PTR);\n  BROTLI_UNUSED(&BROTLI_UNALIGNED_STORE_PTR);\n  BROTLI_UNUSED(&BrotliRBit);\n  BROTLI_UNUSED(&brotli_min_double);\n  BROTLI_UNUSED(&brotli_max_double);\n  BROTLI_UNUSED(&brotli_min_float);\n  BROTLI_UNUSED(&brotli_max_float);\n  BROTLI_UNUSED(&brotli_min_int);\n  BROTLI_UNUSED(&brotli_max_int);\n  BROTLI_UNUSED(&brotli_min_size_t);\n  BROTLI_UNUSED(&brotli_max_size_t);\n  BROTLI_UNUSED(&brotli_min_uint32_t);\n  BROTLI_UNUSED(&brotli_max_uint32_t);\n  BROTLI_UNUSED(&brotli_min_uint8_t);\n  BROTLI_UNUSED(&brotli_max_uint8_t);\n  BROTLI_UNUSED(&BrotliDefaultAllocFunc);\n  BROTLI_UNUSED(&BrotliDefaultFreeFunc);\n  BROTLI_UNUSED(&BrotliRotateRight16);\n  BROTLI_UNUSED(&BrotliRotateRight32);\n  BROTLI_UNUSED(&BrotliRotateRight64);\n#if BROTLI_ENABLE_DUMP\n  BROTLI_UNUSED(&BrotliDump);\n#endif\n\n#if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_I86)) && \\\n    !defined(_M_ARM64EC)\n/* _mm_prefetch() is not defined outside of x86/x64 */\n/* https://msdn.microsoft.com/fr-fr/library/84szxsww(v=vs.90).aspx */\n#include <mmintrin.h>\n#define PREFETCH_L1(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T0)\n#define PREFETCH_L2(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T1)\n#elif BROTLI_GNUC_HAS_BUILTIN(__builtin_prefetch, 3, 1, 0)\n#define PREFETCH_L1(ptr) \\\n  __builtin_prefetch((ptr), 0 /* rw==read */, 3 /* locality */)\n#define PREFETCH_L2(ptr) \\\n  __builtin_prefetch((ptr), 0 /* rw==read */, 2 /* locality */)\n#elif defined(__aarch64__)\n#define PREFETCH_L1(ptr)                                      \\\n  do {                                                        \\\n    __asm__ __volatile__(\"prfm pldl1keep, %0\" ::\"Q\"(*(ptr))); \\\n  } while (0)\n#define PREFETCH_L2(ptr)                                      \\\n  do {                                                        \\\n    __asm__ __volatile__(\"prfm pldl2keep, %0\" ::\"Q\"(*(ptr))); \\\n  } while (0)\n#else\n#define PREFETCH_L1(ptr) \\\n  do {                   \\\n    (void)(ptr);         \\\n  } while (0) /* disabled */\n#define PREFETCH_L2(ptr) \\\n  do {                   \\\n    (void)(ptr);         \\\n  } while (0) /* disabled */\n#endif\n\n/* The SIMD matchers are only faster at certain quality levels. */\n#if defined(_M_X64) && defined(BROTLI_TZCNT64)\n#define BROTLI_MAX_SIMD_QUALITY 7\n#elif defined(BROTLI_TZCNT64)\n#define BROTLI_MAX_SIMD_QUALITY 6\n#endif\n}\n\n#if defined(_MSC_VER)\n#define BROTLI_CRASH() __debugbreak(), (void)abort()\n#elif BROTLI_GNUC_HAS_BUILTIN(__builtin_trap, 3, 0, 0)\n#define BROTLI_CRASH() (void)__builtin_trap()\n#else\n#define BROTLI_CRASH() (void)abort()\n#endif\n\n/* Make BROTLI_TEST=0 act same as undefined. */\n#if defined(BROTLI_TEST) && ((1-BROTLI_TEST-1) == 0)\n#undef BROTLI_TEST\n#endif\n\n#if !defined(BROTLI_MODEL) && BROTLI_GNUC_HAS_ATTRIBUTE(model, 3, 0, 3) && \\\n    !defined(BROTLI_TARGET_IA64) && !defined(BROTLI_TARGET_LOONGARCH64)\n#define BROTLI_MODEL(M) __attribute__((model(M)))\n#else\n#define BROTLI_MODEL(M) /* M */\n#endif\n\n#if !defined(BROTLI_COLD) && BROTLI_GNUC_HAS_ATTRIBUTE(cold, 4, 3, 0)\n#define BROTLI_COLD __attribute__((cold))\n#else\n#define BROTLI_COLD /* cold */\n#endif\n\n#endif  /* BROTLI_COMMON_PLATFORM_H_ */\n"
  },
  {
    "path": "c/common/shared_dictionary.c",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Shared Dictionary definition and utilities. */\n\n#include <brotli/shared_dictionary.h>\n\n#include \"dictionary.h\"\n#include \"platform.h\"\n#include \"shared_dictionary_internal.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#if defined(BROTLI_EXPERIMENTAL)\n\n#define BROTLI_NUM_ENCODED_LENGTHS (SHARED_BROTLI_MAX_DICTIONARY_WORD_LENGTH \\\n    - SHARED_BROTLI_MIN_DICTIONARY_WORD_LENGTH + 1)\n\n/* Max allowed by spec */\n#define BROTLI_MAX_SIZE_BITS 15u\n\n/* Returns BROTLI_TRUE on success, BROTLI_FALSE on failure. */\nstatic BROTLI_BOOL ReadBool(const uint8_t* encoded, size_t size, size_t* pos,\n    BROTLI_BOOL* result) {\n  uint8_t value;\n  size_t position = *pos;\n  if (position >= size) return BROTLI_FALSE;  /* past file end */\n  value = encoded[position++];\n  if (value > 1) return BROTLI_FALSE;  /* invalid bool */\n  *result = TO_BROTLI_BOOL(value);\n  *pos = position;\n  return BROTLI_TRUE;  /* success */\n}\n\n/* Returns BROTLI_TRUE on success, BROTLI_FALSE on failure. */\nstatic BROTLI_BOOL ReadUint8(const uint8_t* encoded, size_t size, size_t* pos,\n    uint8_t* result) {\n  size_t position = *pos;\n  if (position + sizeof(uint8_t) > size) return BROTLI_FALSE;\n  *result = encoded[position++];\n  *pos = position;\n  return BROTLI_TRUE;\n}\n\n/* Returns BROTLI_TRUE on success, BROTLI_FALSE on failure. */\nstatic BROTLI_BOOL ReadUint16(const uint8_t* encoded, size_t size, size_t* pos,\n    uint16_t* result) {\n  size_t position = *pos;\n  if (position + sizeof(uint16_t) > size) return BROTLI_FALSE;\n  *result = BROTLI_UNALIGNED_LOAD16LE(&encoded[position]);\n  position += 2;\n  *pos = position;\n  return BROTLI_TRUE;\n}\n\n/* Reads a varint into a uint32_t, and returns error if it's too large */\n/* Returns BROTLI_TRUE on success, BROTLI_FALSE on failure. */\nstatic BROTLI_BOOL ReadVarint32(const uint8_t* encoded, size_t size,\n    size_t* pos, uint32_t* result) {\n  int num = 0;\n  uint8_t byte;\n  *result = 0;\n  for (;;) {\n    if (*pos >= size) return BROTLI_FALSE;\n    byte = encoded[(*pos)++];\n    if (num == 4 && byte > 15) return BROTLI_FALSE;\n    *result |= (uint32_t)(byte & 127) << (num * 7);\n    if (byte < 128) return BROTLI_TRUE;\n    num++;\n  }\n}\n\n/* Returns the total length of word list. */\nstatic size_t BrotliSizeBitsToOffsets(const uint8_t* size_bits_by_length,\n    uint32_t* offsets_by_length) {\n  uint32_t pos = 0;\n  uint32_t i;\n  for (i = 0; i <= SHARED_BROTLI_MAX_DICTIONARY_WORD_LENGTH; i++) {\n    offsets_by_length[i] = pos;\n    if (size_bits_by_length[i] != 0) {\n      pos += i << size_bits_by_length[i];\n    }\n  }\n  return pos;\n}\n\nstatic BROTLI_BOOL ParseWordList(size_t size, const uint8_t* encoded,\n    size_t* pos, BrotliDictionary* out) {\n  size_t offset;\n  size_t i;\n  size_t position = *pos;\n  if (position + BROTLI_NUM_ENCODED_LENGTHS > size) {\n    return BROTLI_FALSE;\n  }\n\n  memset(out->size_bits_by_length, 0, SHARED_BROTLI_MIN_DICTIONARY_WORD_LENGTH);\n  memcpy(out->size_bits_by_length + SHARED_BROTLI_MIN_DICTIONARY_WORD_LENGTH,\n      &encoded[position], BROTLI_NUM_ENCODED_LENGTHS);\n  for (i = SHARED_BROTLI_MIN_DICTIONARY_WORD_LENGTH;\n      i <= SHARED_BROTLI_MAX_DICTIONARY_WORD_LENGTH; i++) {\n    if (out->size_bits_by_length[i] > BROTLI_MAX_SIZE_BITS) {\n      return BROTLI_FALSE;\n    }\n  }\n  position += BROTLI_NUM_ENCODED_LENGTHS;\n  offset = BrotliSizeBitsToOffsets(\n      out->size_bits_by_length, out->offsets_by_length);\n\n  out->data = &encoded[position];\n  out->data_size = offset;\n  position += offset;\n  if (position > size) return BROTLI_FALSE;\n  *pos = position;\n  return BROTLI_TRUE;\n}\n\n/* Computes the cutOffTransforms of a BrotliTransforms which already has the\n   transforms data correctly filled in. */\nstatic void ComputeCutoffTransforms(BrotliTransforms* transforms) {\n  uint32_t i;\n  for (i = 0; i < BROTLI_TRANSFORMS_MAX_CUT_OFF + 1; i++) {\n    transforms->cutOffTransforms[i] = -1;\n  }\n  for (i = 0; i < transforms->num_transforms; i++) {\n    const uint8_t* prefix = BROTLI_TRANSFORM_PREFIX(transforms, i);\n    uint8_t type = BROTLI_TRANSFORM_TYPE(transforms, i);\n    const uint8_t* suffix = BROTLI_TRANSFORM_SUFFIX(transforms, i);\n    if (type <= BROTLI_TRANSFORM_OMIT_LAST_9 && *prefix == 0 && *suffix == 0 &&\n        transforms->cutOffTransforms[type] == -1) {\n      transforms->cutOffTransforms[type] = (int16_t)i;\n    }\n  }\n}\n\nstatic BROTLI_BOOL ParsePrefixSuffixTable(size_t size, const uint8_t* encoded,\n    size_t* pos, BrotliTransforms* out, uint16_t* out_table,\n    size_t* out_table_size) {\n  size_t position = *pos;\n  size_t offset = 0;\n  size_t stringlet_count = 0;  /* NUM_PREFIX_SUFFIX */\n  size_t data_length = 0;\n\n  /* PREFIX_SUFFIX_LENGTH */\n  if (!ReadUint16(encoded, size, &position, &out->prefix_suffix_size)) {\n    return BROTLI_FALSE;\n  }\n  data_length = out->prefix_suffix_size;\n\n  /* Must at least have space for null terminator. */\n  if (data_length < 1) return BROTLI_FALSE;\n  out->prefix_suffix = &encoded[position];\n  if (position + data_length >= size) return BROTLI_FALSE;\n  while (BROTLI_TRUE) {\n    /* STRING_LENGTH */\n    size_t stringlet_len = encoded[position + offset];\n    out_table[stringlet_count] = (uint16_t)offset;\n    stringlet_count++;\n    offset++;\n    if (stringlet_len == 0) {\n      if (offset == data_length) {\n        break;\n      } else {\n        return BROTLI_FALSE;\n      }\n    }\n    if (stringlet_count > 255) return BROTLI_FALSE;\n    offset += stringlet_len;\n    if (offset >= data_length) return BROTLI_FALSE;\n  }\n\n  position += data_length;\n  *pos = position;\n  *out_table_size = (uint16_t)stringlet_count;\n  return BROTLI_TRUE;\n}\n\nstatic BROTLI_BOOL ParseTransformsList(size_t size, const uint8_t* encoded,\n    size_t* pos, BrotliTransforms* out, uint16_t* prefix_suffix_table,\n    size_t* prefix_suffix_count) {\n  uint32_t i;\n  BROTLI_BOOL has_params = BROTLI_FALSE;\n  BROTLI_BOOL prefix_suffix_ok = BROTLI_FALSE;\n  size_t position = *pos;\n  size_t stringlet_cnt = 0;\n  if (position >= size) return BROTLI_FALSE;\n\n  prefix_suffix_ok = ParsePrefixSuffixTable(\n      size, encoded, &position, out, prefix_suffix_table, &stringlet_cnt);\n  if (!prefix_suffix_ok) return BROTLI_FALSE;\n  out->prefix_suffix_map = prefix_suffix_table;\n  *prefix_suffix_count = stringlet_cnt;\n\n  out->num_transforms = encoded[position++];\n  out->transforms = &encoded[position];\n  position += (size_t)out->num_transforms * 3;\n  if (position > size) return BROTLI_FALSE;\n  /* Check for errors and read extra parameters. */\n  for (i = 0; i < out->num_transforms; i++) {\n    uint8_t prefix_id = BROTLI_TRANSFORM_PREFIX_ID(out, i);\n    uint8_t type = BROTLI_TRANSFORM_TYPE(out, i);\n    uint8_t suffix_id = BROTLI_TRANSFORM_SUFFIX_ID(out, i);\n    if (prefix_id >= stringlet_cnt) return BROTLI_FALSE;\n    if (type >= BROTLI_NUM_TRANSFORM_TYPES) return BROTLI_FALSE;\n    if (suffix_id >= stringlet_cnt) return BROTLI_FALSE;\n    if (type == BROTLI_TRANSFORM_SHIFT_FIRST ||\n        type == BROTLI_TRANSFORM_SHIFT_ALL) {\n      has_params = BROTLI_TRUE;\n    }\n  }\n  if (has_params) {\n    out->params = &encoded[position];\n    position += (size_t)out->num_transforms * 2;\n    if (position > size) return BROTLI_FALSE;\n    for (i = 0; i < out->num_transforms; i++) {\n      uint8_t type = BROTLI_TRANSFORM_TYPE(out, i);\n      if (type != BROTLI_TRANSFORM_SHIFT_FIRST &&\n          type != BROTLI_TRANSFORM_SHIFT_ALL) {\n        if (out->params[i * 2] != 0 || out->params[i * 2 + 1] != 0) {\n          return BROTLI_FALSE;\n        }\n      }\n    }\n  } else {\n    out->params = NULL;\n  }\n  ComputeCutoffTransforms(out);\n  *pos = position;\n  return BROTLI_TRUE;\n}\n\nstatic BROTLI_BOOL DryParseDictionary(const uint8_t* encoded,\n    size_t size, uint32_t* num_prefix, BROTLI_BOOL* is_custom_static_dict) {\n  size_t pos = 0;\n  uint32_t chunk_size = 0;\n  uint8_t num_word_lists;\n  uint8_t num_transform_lists;\n  *is_custom_static_dict = BROTLI_FALSE;\n  *num_prefix = 0;\n\n  /* Skip magic header bytes. */\n  pos += 2;\n\n  /* LZ77_DICTIONARY_LENGTH */\n  if (!ReadVarint32(encoded, size, &pos, &chunk_size)) return BROTLI_FALSE;\n  if (chunk_size != 0) {\n    /* This limitation is not specified but the 32-bit Brotli decoder for now */\n    if (chunk_size > 1073741823) return BROTLI_FALSE;\n    *num_prefix = 1;\n    if (pos + chunk_size > size) return BROTLI_FALSE;\n    pos += chunk_size;\n  }\n\n  if (!ReadUint8(encoded, size, &pos, &num_word_lists)) {\n    return BROTLI_FALSE;\n  }\n  if (!ReadUint8(encoded, size, &pos, &num_transform_lists)) {\n    return BROTLI_FALSE;\n  }\n\n  if (num_word_lists > 0 || num_transform_lists > 0) {\n    *is_custom_static_dict = BROTLI_TRUE;\n  }\n\n  return BROTLI_TRUE;\n}\n\nstatic BROTLI_BOOL ParseDictionary(const uint8_t* encoded, size_t size,\n    BrotliSharedDictionary* dict) {\n  uint32_t i;\n  size_t pos = 0;\n  uint32_t chunk_size = 0;\n  size_t total_prefix_suffix_count = 0;\n  size_t transform_list_start[SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS];\n  uint16_t temporary_prefix_suffix_table[256];\n\n  /* Skip magic header bytes. */\n  pos += 2;\n\n  /* LZ77_DICTIONARY_LENGTH */\n  if (!ReadVarint32(encoded, size, &pos, &chunk_size)) return BROTLI_FALSE;\n  if (chunk_size != 0) {\n    if (pos + chunk_size > size) return BROTLI_FALSE;\n    dict->prefix_size[dict->num_prefix] = chunk_size;\n    dict->prefix[dict->num_prefix] = &encoded[pos];\n    dict->num_prefix++;\n    /* LZ77_DICTIONARY_LENGTH bytes. */\n    pos += chunk_size;\n  }\n\n  /* NUM_WORD_LISTS */\n  if (!ReadUint8(encoded, size, &pos, &dict->num_word_lists)) {\n    return BROTLI_FALSE;\n  }\n  if (dict->num_word_lists > SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS) {\n    return BROTLI_FALSE;\n  }\n\n  if (dict->num_word_lists != 0) {\n    dict->words_instances = (BrotliDictionary*)dict->alloc_func(\n        dict->memory_manager_opaque,\n        dict->num_word_lists * sizeof(*dict->words_instances));\n    if (!dict->words_instances) return BROTLI_FALSE;  /* OOM */\n  }\n  for (i = 0; i < dict->num_word_lists; i++) {\n    if (!ParseWordList(size, encoded, &pos, &dict->words_instances[i])) {\n      return BROTLI_FALSE;\n    }\n  }\n\n  /* NUM_TRANSFORM_LISTS */\n  if (!ReadUint8(encoded, size, &pos, &dict->num_transform_lists)) {\n    return BROTLI_FALSE;\n  }\n  if (dict->num_transform_lists > SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS) {\n    return BROTLI_FALSE;\n  }\n\n  if (dict->num_transform_lists != 0) {\n    dict->transforms_instances = (BrotliTransforms*)dict->alloc_func(\n        dict->memory_manager_opaque,\n        dict->num_transform_lists * sizeof(*dict->transforms_instances));\n    if (!dict->transforms_instances) return BROTLI_FALSE;  /* OOM */\n  }\n  for (i = 0; i < dict->num_transform_lists; i++) {\n    BROTLI_BOOL ok = BROTLI_FALSE;\n    size_t prefix_suffix_count = 0;\n    transform_list_start[i] = pos;\n    dict->transforms_instances[i].prefix_suffix_map =\n        temporary_prefix_suffix_table;\n    ok = ParseTransformsList(\n        size, encoded, &pos, &dict->transforms_instances[i],\n        temporary_prefix_suffix_table, &prefix_suffix_count);\n    if (!ok) return BROTLI_FALSE;\n    total_prefix_suffix_count += prefix_suffix_count;\n  }\n  if (total_prefix_suffix_count != 0) {\n    dict->prefix_suffix_maps = (uint16_t*)dict->alloc_func(\n        dict->memory_manager_opaque,\n        total_prefix_suffix_count * sizeof(*dict->prefix_suffix_maps));\n    if (!dict->prefix_suffix_maps) return BROTLI_FALSE;  /* OOM */\n  }\n  total_prefix_suffix_count = 0;\n  for (i = 0; i < dict->num_transform_lists; i++) {\n    size_t prefix_suffix_count = 0;\n    size_t position = transform_list_start[i];\n    uint16_t* prefix_suffix_map =\n      &dict->prefix_suffix_maps[total_prefix_suffix_count];\n    BROTLI_BOOL ok = ParsePrefixSuffixTable(\n        size, encoded, &position, &dict->transforms_instances[i],\n        prefix_suffix_map, &prefix_suffix_count);\n    if (!ok) return BROTLI_FALSE;\n    dict->transforms_instances[i].prefix_suffix_map = prefix_suffix_map;\n    total_prefix_suffix_count += prefix_suffix_count;\n  }\n\n  if (dict->num_word_lists != 0 || dict->num_transform_lists != 0) {\n    if (!ReadUint8(encoded, size, &pos, &dict->num_dictionaries)) {\n      return BROTLI_FALSE;\n    }\n    if (dict->num_dictionaries == 0 ||\n        dict->num_dictionaries > SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS) {\n      return BROTLI_FALSE;\n    }\n    for (i = 0; i < dict->num_dictionaries; i++) {\n      uint8_t words_index;\n      uint8_t transforms_index;\n      if (!ReadUint8(encoded, size, &pos, &words_index)) {\n        return BROTLI_FALSE;\n      }\n      if (words_index > dict->num_word_lists) return BROTLI_FALSE;\n      if (!ReadUint8(encoded, size, &pos, &transforms_index)) {\n        return BROTLI_FALSE;\n      }\n      if (transforms_index > dict->num_transform_lists) return BROTLI_FALSE;\n      dict->words[i] = words_index == dict->num_word_lists ?\n          BrotliGetDictionary() : &dict->words_instances[words_index];\n      dict->transforms[i] = transforms_index == dict->num_transform_lists ?\n          BrotliGetTransforms(): &dict->transforms_instances[transforms_index];\n    }\n    /* CONTEXT_ENABLED */\n    if (!ReadBool(encoded, size, &pos, &dict->context_based)) {\n      return BROTLI_FALSE;\n    }\n\n    /* CONTEXT_MAP */\n    if (dict->context_based) {\n      for (i = 0; i < SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS; i++) {\n        if (!ReadUint8(encoded, size, &pos, &dict->context_map[i])) {\n          return BROTLI_FALSE;\n        }\n        if (dict->context_map[i] >= dict->num_dictionaries) {\n          return BROTLI_FALSE;\n        }\n      }\n    }\n  } else {\n    dict->context_based = BROTLI_FALSE;\n    dict->num_dictionaries = 1;\n    dict->words[0] = BrotliGetDictionary();\n    dict->transforms[0] = BrotliGetTransforms();\n  }\n\n  return BROTLI_TRUE;\n}\n\n/* Decodes shared dictionary and verifies correctness.\n   Returns BROTLI_TRUE if dictionary is valid, BROTLI_FALSE otherwise.\n   The BrotliSharedDictionary must already have been initialized. If the\n   BrotliSharedDictionary already contains data, compound dictionaries\n   will be appended, but an error will be returned if it already has\n   custom words or transforms.\n   TODO(lode): link to RFC for shared brotli once published. */\nstatic BROTLI_BOOL DecodeSharedDictionary(\n    const uint8_t* encoded, size_t size, BrotliSharedDictionary* dict) {\n  uint32_t num_prefix = 0;\n  BROTLI_BOOL is_custom_static_dict = BROTLI_FALSE;\n  BROTLI_BOOL has_custom_static_dict =\n      dict->num_word_lists > 0 || dict->num_transform_lists > 0;\n\n  /* Check magic header bytes. */\n  if (size < 2) return BROTLI_FALSE;\n  if (encoded[0] != 0x91 || encoded[1] != 0) return BROTLI_FALSE;\n\n  if (!DryParseDictionary(encoded, size, &num_prefix, &is_custom_static_dict)) {\n    return BROTLI_FALSE;\n  }\n\n  if (num_prefix + dict->num_prefix > SHARED_BROTLI_MAX_COMPOUND_DICTS) {\n    return BROTLI_FALSE;\n  }\n\n  /* Cannot combine different static dictionaries, only prefix dictionaries */\n  if (has_custom_static_dict && is_custom_static_dict) return BROTLI_FALSE;\n\n  return ParseDictionary(encoded, size, dict);\n}\n\n#endif  /* BROTLI_EXPERIMENTAL */\n\nvoid BrotliSharedDictionaryDestroyInstance(\n    BrotliSharedDictionary* dict) {\n  if (!dict) {\n    return;\n  } else {\n    brotli_free_func free_func = dict->free_func;\n    void* opaque = dict->memory_manager_opaque;\n    /* Cleanup. */\n    free_func(opaque, dict->words_instances);\n    free_func(opaque, dict->transforms_instances);\n    free_func(opaque, dict->prefix_suffix_maps);\n    /* Self-destruction. */\n    free_func(opaque, dict);\n  }\n}\n\nBROTLI_BOOL BrotliSharedDictionaryAttach(\n    BrotliSharedDictionary* dict, BrotliSharedDictionaryType type,\n    size_t data_size, const uint8_t data[BROTLI_ARRAY_PARAM(data_size)]) {\n  if (!dict) {\n    return BROTLI_FALSE;\n  }\n#if defined(BROTLI_EXPERIMENTAL)\n  if (type == BROTLI_SHARED_DICTIONARY_SERIALIZED) {\n    return DecodeSharedDictionary(data, data_size, dict);\n  }\n#endif  /* BROTLI_EXPERIMENTAL */\n  if (type == BROTLI_SHARED_DICTIONARY_RAW) {\n    if (dict->num_prefix >= SHARED_BROTLI_MAX_COMPOUND_DICTS) {\n      return BROTLI_FALSE;\n    }\n    dict->prefix_size[dict->num_prefix] = data_size;\n    dict->prefix[dict->num_prefix] = data;\n    dict->num_prefix++;\n    return BROTLI_TRUE;\n  }\n  return BROTLI_FALSE;\n}\n\nBrotliSharedDictionary* BrotliSharedDictionaryCreateInstance(\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {\n  BrotliSharedDictionary* dict = 0;\n  if (!alloc_func && !free_func) {\n    dict = (BrotliSharedDictionary*)malloc(sizeof(BrotliSharedDictionary));\n  } else if (alloc_func && free_func) {\n    dict = (BrotliSharedDictionary*)alloc_func(\n        opaque, sizeof(BrotliSharedDictionary));\n  }\n  if (dict == 0) {\n    return 0;\n  }\n\n  /* TODO(eustas): explicitly initialize all the fields? */\n  memset(dict, 0, sizeof(BrotliSharedDictionary));\n\n  dict->context_based = BROTLI_FALSE;\n  dict->num_dictionaries = 1;\n  dict->num_word_lists = 0;\n  dict->num_transform_lists = 0;\n\n  dict->words[0] = BrotliGetDictionary();\n  dict->transforms[0] = BrotliGetTransforms();\n\n  dict->alloc_func = alloc_func ? alloc_func : BrotliDefaultAllocFunc;\n  dict->free_func = free_func ? free_func : BrotliDefaultFreeFunc;\n  dict->memory_manager_opaque = opaque;\n\n  return dict;\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/common/shared_dictionary_internal.h",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* (Transparent) Shared Dictionary definition. */\n\n#ifndef BROTLI_COMMON_SHARED_DICTIONARY_INTERNAL_H_\n#define BROTLI_COMMON_SHARED_DICTIONARY_INTERNAL_H_\n\n#include <brotli/shared_dictionary.h>\n\n#include \"dictionary.h\"\n#include \"platform.h\"\n#include \"transform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstruct BrotliSharedDictionaryStruct {\n  /* LZ77 prefixes (compound dictionary). */\n  uint32_t num_prefix;  /* max SHARED_BROTLI_MAX_COMPOUND_DICTS */\n  size_t prefix_size[SHARED_BROTLI_MAX_COMPOUND_DICTS];\n  const uint8_t* prefix[SHARED_BROTLI_MAX_COMPOUND_DICTS];\n\n  /* If set, the context map is used to select word and transform list from 64\n     contexts, if not set, the context map is not used and only words[0] and\n     transforms[0] are to be used. */\n  BROTLI_BOOL context_based;\n\n  uint8_t context_map[SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS];\n\n  /* Amount of word_list+transform_list combinations. */\n  uint8_t num_dictionaries;\n\n  /* Must use num_dictionaries values. */\n  const BrotliDictionary* words[SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS];\n\n  /* Must use num_dictionaries values. */\n  const BrotliTransforms* transforms[SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS];\n\n  /* Amount of custom word lists. May be 0 if only Brotli's built-in is used */\n  uint8_t num_word_lists;\n\n  /* Contents of the custom words lists. Must be NULL if num_word_lists is 0. */\n  BrotliDictionary* words_instances;\n\n  /* Amount of custom transform lists. May be 0 if only Brotli's built-in is\n     used */\n  uint8_t num_transform_lists;\n\n  /* Contents of the custom transform lists. Must be NULL if num_transform_lists\n     is 0. */\n  BrotliTransforms* transforms_instances;\n\n  /* Concatenated prefix_suffix_maps of the custom transform lists. Must be NULL\n     if num_transform_lists is 0. */\n  uint16_t* prefix_suffix_maps;\n\n  /* Memory management */\n  brotli_alloc_func alloc_func;\n  brotli_free_func free_func;\n  void* memory_manager_opaque;\n};\n\ntypedef struct BrotliSharedDictionaryStruct BrotliSharedDictionaryInternal;\n#define BrotliSharedDictionary BrotliSharedDictionaryInternal\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_COMMON_SHARED_DICTIONARY_INTERNAL_H_ */\n"
  },
  {
    "path": "c/common/static_init.h",
    "content": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/*\n   Central point for static initialization.\n\n   In case of \"lazy\" mode `BrotliXxxLazyStaticInit` is not provided by the\n   library. Embedder is responsible for providing it. This function should call\n   `BrotliXxxLazyStaticInitInner` on the first invocation. This function should\n   not return until execution of `BrotliXxxLazyStaticInitInner` is finished.\n   In C or before C++11 it is possible to call `BrotliXxxLazyStaticInitInner`\n   on start-up path and then `BrotliEncoderLazyStaticInit` is could be no-op;\n   another option is to use available thread execution controls to meet the\n   requirements. For possible C++11 implementation see static_init_lazy.cc.\n*/\n\n#ifndef THIRD_PARTY_BROTLI_COMMON_STATIC_INIT_H_\n#define THIRD_PARTY_BROTLI_COMMON_STATIC_INIT_H_\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* Static data is \"initialized\" in compile time. */\n#define BROTLI_STATIC_INIT_NONE 0\n/* Static data is initialized before \"main\". */\n#define BROTLI_STATIC_INIT_EARLY 1\n/* Static data is initialized when first encoder is created. */\n#define BROTLI_STATIC_INIT_LAZY 2\n\n#define BROTLI_STATIC_INIT_DEFAULT BROTLI_STATIC_INIT_NONE\n\n#if !defined(BROTLI_STATIC_INIT)\n#define BROTLI_STATIC_INIT BROTLI_STATIC_INIT_DEFAULT\n#endif\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE) && \\\n    (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_EARLY) && \\\n    (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_LAZY)\n#error Invalid value for BROTLI_STATIC_INIT\n#endif\n\n#if (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_EARLY)\n#if defined(BROTLI_EXTERNAL_DICTIONARY_DATA)\n#error BROTLI_STATIC_INIT_EARLY will fail with BROTLI_EXTERNAL_DICTIONARY_DATA\n#endif\n#endif  /* BROTLI_STATIC_INIT */\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  // THIRD_PARTY_BROTLI_COMMON_STATIC_INIT_H_\n"
  },
  {
    "path": "c/common/transform.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"platform.h\"\n#include \"transform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* RFC 7932 transforms string data */\nstatic const BROTLI_MODEL(\"small\") char kPrefixSuffix[217] =\n      \"\\1 \\2, \\10 of the \\4 of \\2s \\1.\\5 and \\4 \"\n/* 0x  _0 _2  __5        _E    _3  _6 _8     _E */\n      \"in \\1\\\"\\4 to \\2\\\">\\1\\n\\2. \\1]\\5 for \\3 a \\6 \"\n/* 2x     _3_ _5    _A_  _D_ _F  _2 _4     _A   _E */\n      \"that \\1\\'\\6 with \\6 from \\4 by \\1(\\6. T\"\n/* 4x       _5_ _7      _E      _5    _A _C */\n      \"he \\4 on \\4 as \\4 is \\4ing \\2\\n\\t\\1:\\3ed \"\n/* 6x     _3    _8    _D    _2    _7_ _ _A _C */\n      \"\\2=\\\"\\4 at \\3ly \\1,\\2=\\'\\5.com/\\7. This \\5\"\n/* 8x  _0 _ _3    _8   _C _E _ _1     _7       _F */\n      \" not \\3er \\3al \\4ful \\4ive \\5less \\4es\"\n/* Ax       _5   _9   _D    _2    _7     _D */\n      \"t \\4ize \\2\\xc2\\xa0\\4ous \\5 the \\2e \"; /* \\0 - implicit trailing zero. */\n/* Cx    _2    _7___ ___ _A    _F     _5        _8 */\n\nstatic const BROTLI_MODEL(\"small\") uint16_t kPrefixSuffixMap[50] = {\n  0x00, 0x02, 0x05, 0x0E, 0x13, 0x16, 0x18, 0x1E, 0x23, 0x25,\n  0x2A, 0x2D, 0x2F, 0x32, 0x34, 0x3A, 0x3E, 0x45, 0x47, 0x4E,\n  0x55, 0x5A, 0x5C, 0x63, 0x68, 0x6D, 0x72, 0x77, 0x7A, 0x7C,\n  0x80, 0x83, 0x88, 0x8C, 0x8E, 0x91, 0x97, 0x9F, 0xA5, 0xA9,\n  0xAD, 0xB2, 0xB7, 0xBD, 0xC2, 0xC7, 0xCA, 0xCF, 0xD5, 0xD8\n};\n\n/* RFC 7932 transforms */\nstatic const BROTLI_MODEL(\"small\") uint8_t kTransformsData[] = {\n  49, BROTLI_TRANSFORM_IDENTITY, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 0,\n   0, BROTLI_TRANSFORM_IDENTITY, 0,\n  49, BROTLI_TRANSFORM_OMIT_FIRST_1, 49,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 0,\n  49, BROTLI_TRANSFORM_IDENTITY, 47,\n   0, BROTLI_TRANSFORM_IDENTITY, 49,\n   4, BROTLI_TRANSFORM_IDENTITY, 0,\n  49, BROTLI_TRANSFORM_IDENTITY, 3,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 6,\n  49, BROTLI_TRANSFORM_OMIT_FIRST_2, 49,\n  49, BROTLI_TRANSFORM_OMIT_LAST_1, 49,\n   1, BROTLI_TRANSFORM_IDENTITY, 0,\n  49, BROTLI_TRANSFORM_IDENTITY, 1,\n   0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 0,\n  49, BROTLI_TRANSFORM_IDENTITY, 7,\n  49, BROTLI_TRANSFORM_IDENTITY, 9,\n  48, BROTLI_TRANSFORM_IDENTITY, 0,\n  49, BROTLI_TRANSFORM_IDENTITY, 8,\n  49, BROTLI_TRANSFORM_IDENTITY, 5,\n  49, BROTLI_TRANSFORM_IDENTITY, 10,\n  49, BROTLI_TRANSFORM_IDENTITY, 11,\n  49, BROTLI_TRANSFORM_OMIT_LAST_3, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 13,\n  49, BROTLI_TRANSFORM_IDENTITY, 14,\n  49, BROTLI_TRANSFORM_OMIT_FIRST_3, 49,\n  49, BROTLI_TRANSFORM_OMIT_LAST_2, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 15,\n  49, BROTLI_TRANSFORM_IDENTITY, 16,\n   0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 12,\n   5, BROTLI_TRANSFORM_IDENTITY, 49,\n   0, BROTLI_TRANSFORM_IDENTITY, 1,\n  49, BROTLI_TRANSFORM_OMIT_FIRST_4, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 18,\n  49, BROTLI_TRANSFORM_IDENTITY, 17,\n  49, BROTLI_TRANSFORM_IDENTITY, 19,\n  49, BROTLI_TRANSFORM_IDENTITY, 20,\n  49, BROTLI_TRANSFORM_OMIT_FIRST_5, 49,\n  49, BROTLI_TRANSFORM_OMIT_FIRST_6, 49,\n  47, BROTLI_TRANSFORM_IDENTITY, 49,\n  49, BROTLI_TRANSFORM_OMIT_LAST_4, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 22,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 23,\n  49, BROTLI_TRANSFORM_IDENTITY, 24,\n  49, BROTLI_TRANSFORM_IDENTITY, 25,\n  49, BROTLI_TRANSFORM_OMIT_LAST_7, 49,\n  49, BROTLI_TRANSFORM_OMIT_LAST_1, 26,\n  49, BROTLI_TRANSFORM_IDENTITY, 27,\n  49, BROTLI_TRANSFORM_IDENTITY, 28,\n   0, BROTLI_TRANSFORM_IDENTITY, 12,\n  49, BROTLI_TRANSFORM_IDENTITY, 29,\n  49, BROTLI_TRANSFORM_OMIT_FIRST_9, 49,\n  49, BROTLI_TRANSFORM_OMIT_FIRST_7, 49,\n  49, BROTLI_TRANSFORM_OMIT_LAST_6, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 21,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 1,\n  49, BROTLI_TRANSFORM_OMIT_LAST_8, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 31,\n  49, BROTLI_TRANSFORM_IDENTITY, 32,\n  47, BROTLI_TRANSFORM_IDENTITY, 3,\n  49, BROTLI_TRANSFORM_OMIT_LAST_5, 49,\n  49, BROTLI_TRANSFORM_OMIT_LAST_9, 49,\n   0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 1,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 8,\n   5, BROTLI_TRANSFORM_IDENTITY, 21,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 0,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 10,\n  49, BROTLI_TRANSFORM_IDENTITY, 30,\n   0, BROTLI_TRANSFORM_IDENTITY, 5,\n  35, BROTLI_TRANSFORM_IDENTITY, 49,\n  47, BROTLI_TRANSFORM_IDENTITY, 2,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 17,\n  49, BROTLI_TRANSFORM_IDENTITY, 36,\n  49, BROTLI_TRANSFORM_IDENTITY, 33,\n   5, BROTLI_TRANSFORM_IDENTITY, 0,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 21,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 5,\n  49, BROTLI_TRANSFORM_IDENTITY, 37,\n   0, BROTLI_TRANSFORM_IDENTITY, 30,\n  49, BROTLI_TRANSFORM_IDENTITY, 38,\n   0, BROTLI_TRANSFORM_UPPERCASE_ALL, 0,\n  49, BROTLI_TRANSFORM_IDENTITY, 39,\n   0, BROTLI_TRANSFORM_UPPERCASE_ALL, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 34,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 8,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 12,\n   0, BROTLI_TRANSFORM_IDENTITY, 21,\n  49, BROTLI_TRANSFORM_IDENTITY, 40,\n   0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 12,\n  49, BROTLI_TRANSFORM_IDENTITY, 41,\n  49, BROTLI_TRANSFORM_IDENTITY, 42,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 17,\n  49, BROTLI_TRANSFORM_IDENTITY, 43,\n   0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 5,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 10,\n   0, BROTLI_TRANSFORM_IDENTITY, 34,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 33,\n  49, BROTLI_TRANSFORM_IDENTITY, 44,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 5,\n  45, BROTLI_TRANSFORM_IDENTITY, 49,\n   0, BROTLI_TRANSFORM_IDENTITY, 33,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 30,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 30,\n  49, BROTLI_TRANSFORM_IDENTITY, 46,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 1,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 34,\n   0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 33,\n   0, BROTLI_TRANSFORM_UPPERCASE_ALL, 30,\n   0, BROTLI_TRANSFORM_UPPERCASE_ALL, 1,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 33,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 21,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 12,\n   0, BROTLI_TRANSFORM_UPPERCASE_ALL, 5,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 34,\n   0, BROTLI_TRANSFORM_UPPERCASE_ALL, 12,\n   0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 30,\n   0, BROTLI_TRANSFORM_UPPERCASE_ALL, 34,\n   0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 34,\n};\n\nstatic const BROTLI_MODEL(\"small\")\nBrotliTransforms kBrotliTransforms = {\n  sizeof(kPrefixSuffix),\n  (const uint8_t*)kPrefixSuffix,\n  kPrefixSuffixMap,\n  sizeof(kTransformsData) / (3 * sizeof(kTransformsData[0])),\n  kTransformsData,\n  NULL,  /* no extra parameters */\n  {0, 12, 27, 23, 42, 63, 56, 48, 59, 64}\n};\n\nconst BrotliTransforms* BrotliGetTransforms(void) {\n  return &kBrotliTransforms;\n}\n\nstatic int ToUpperCase(uint8_t* p) {\n  if (p[0] < 0xC0) {\n    if (p[0] >= 'a' && p[0] <= 'z') {\n      p[0] ^= 32;\n    }\n    return 1;\n  }\n  /* An overly simplified uppercasing model for UTF-8. */\n  if (p[0] < 0xE0) {\n    p[1] ^= 32;\n    return 2;\n  }\n  /* An arbitrary transform for three byte characters. */\n  p[2] ^= 5;\n  return 3;\n}\n\nstatic int Shift(uint8_t* word, int word_len, uint16_t parameter) {\n  /* Limited sign extension: scalar < (1 << 24). */\n  uint32_t scalar =\n      (parameter & 0x7FFFu) + (0x1000000u - (parameter & 0x8000u));\n  if (word[0] < 0x80) {\n    /* 1-byte rune / 0sssssss / 7 bit scalar (ASCII). */\n    scalar += (uint32_t)word[0];\n    word[0] = (uint8_t)(scalar & 0x7Fu);\n    return 1;\n  } else if (word[0] < 0xC0) {\n    /* Continuation / 10AAAAAA. */\n    return 1;\n  } else if (word[0] < 0xE0) {\n    /* 2-byte rune / 110sssss AAssssss / 11 bit scalar. */\n    if (word_len < 2) return 1;\n    scalar += (uint32_t)((word[1] & 0x3Fu) | ((word[0] & 0x1Fu) << 6u));\n    word[0] = (uint8_t)(0xC0 | ((scalar >> 6u) & 0x1F));\n    word[1] = (uint8_t)((word[1] & 0xC0) | (scalar & 0x3F));\n    return 2;\n  } else if (word[0] < 0xF0) {\n    /* 3-byte rune / 1110ssss AAssssss BBssssss / 16 bit scalar. */\n    if (word_len < 3) return word_len;\n    scalar += (uint32_t)((word[2] & 0x3Fu) | ((word[1] & 0x3Fu) << 6u) |\n        ((word[0] & 0x0Fu) << 12u));\n    word[0] = (uint8_t)(0xE0 | ((scalar >> 12u) & 0x0F));\n    word[1] = (uint8_t)((word[1] & 0xC0) | ((scalar >> 6u) & 0x3F));\n    word[2] = (uint8_t)((word[2] & 0xC0) | (scalar & 0x3F));\n    return 3;\n  } else if (word[0] < 0xF8) {\n    /* 4-byte rune / 11110sss AAssssss BBssssss CCssssss / 21 bit scalar. */\n    if (word_len < 4) return word_len;\n    scalar += (uint32_t)((word[3] & 0x3Fu) | ((word[2] & 0x3Fu) << 6u) |\n        ((word[1] & 0x3Fu) << 12u) | ((word[0] & 0x07u) << 18u));\n    word[0] = (uint8_t)(0xF0 | ((scalar >> 18u) & 0x07));\n    word[1] = (uint8_t)((word[1] & 0xC0) | ((scalar >> 12u) & 0x3F));\n    word[2] = (uint8_t)((word[2] & 0xC0) | ((scalar >> 6u) & 0x3F));\n    word[3] = (uint8_t)((word[3] & 0xC0) | (scalar & 0x3F));\n    return 4;\n  }\n  return 1;\n}\n\nint BrotliTransformDictionaryWord(uint8_t* dst, const uint8_t* word, int len,\n    const BrotliTransforms* transforms, int transform_idx) {\n  int idx = 0;\n  const uint8_t* prefix = BROTLI_TRANSFORM_PREFIX(transforms, transform_idx);\n  uint8_t type = BROTLI_TRANSFORM_TYPE(transforms, transform_idx);\n  const uint8_t* suffix = BROTLI_TRANSFORM_SUFFIX(transforms, transform_idx);\n  {\n    int prefix_len = *prefix++;\n    while (prefix_len--) { dst[idx++] = *prefix++; }\n  }\n  {\n    const int t = type;\n    int i = 0;\n    if (t <= BROTLI_TRANSFORM_OMIT_LAST_9) {\n      len -= t;\n    } else if (t >= BROTLI_TRANSFORM_OMIT_FIRST_1\n        && t <= BROTLI_TRANSFORM_OMIT_FIRST_9) {\n      int skip = t - (BROTLI_TRANSFORM_OMIT_FIRST_1 - 1);\n      word += skip;\n      len -= skip;\n    }\n    while (i < len) { dst[idx++] = word[i++]; }\n    if (t == BROTLI_TRANSFORM_UPPERCASE_FIRST) {\n      ToUpperCase(&dst[idx - len]);\n    } else if (t == BROTLI_TRANSFORM_UPPERCASE_ALL) {\n      uint8_t* uppercase = &dst[idx - len];\n      while (len > 0) {\n        int step = ToUpperCase(uppercase);\n        uppercase += step;\n        len -= step;\n      }\n    } else if (t == BROTLI_TRANSFORM_SHIFT_FIRST) {\n      uint16_t param = (uint16_t)(transforms->params[transform_idx * 2]\n          + (transforms->params[transform_idx * 2 + 1] << 8u));\n      Shift(&dst[idx - len], len, param);\n    } else if (t == BROTLI_TRANSFORM_SHIFT_ALL) {\n      uint16_t param = (uint16_t)(transforms->params[transform_idx * 2]\n          + (transforms->params[transform_idx * 2 + 1] << 8u));\n      uint8_t* shift = &dst[idx - len];\n      while (len > 0) {\n        int step = Shift(shift, len, param);\n        shift += step;\n        len -= step;\n      }\n    }\n  }\n  {\n    int suffix_len = *suffix++;\n    while (suffix_len--) { dst[idx++] = *suffix++; }\n    return idx;\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/common/transform.h",
    "content": "/* transforms is a part of ABI, but not API.\n\n   It means that there are some functions that are supposed to be in \"common\"\n   library, but header itself is not placed into include/brotli. This way,\n   aforementioned functions will be available only to brotli internals.\n */\n\n#ifndef BROTLI_COMMON_TRANSFORM_H_\n#define BROTLI_COMMON_TRANSFORM_H_\n\n#include \"platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nenum BrotliWordTransformType {\n  BROTLI_TRANSFORM_IDENTITY = 0,\n  BROTLI_TRANSFORM_OMIT_LAST_1 = 1,\n  BROTLI_TRANSFORM_OMIT_LAST_2 = 2,\n  BROTLI_TRANSFORM_OMIT_LAST_3 = 3,\n  BROTLI_TRANSFORM_OMIT_LAST_4 = 4,\n  BROTLI_TRANSFORM_OMIT_LAST_5 = 5,\n  BROTLI_TRANSFORM_OMIT_LAST_6 = 6,\n  BROTLI_TRANSFORM_OMIT_LAST_7 = 7,\n  BROTLI_TRANSFORM_OMIT_LAST_8 = 8,\n  BROTLI_TRANSFORM_OMIT_LAST_9 = 9,\n  BROTLI_TRANSFORM_UPPERCASE_FIRST = 10,\n  BROTLI_TRANSFORM_UPPERCASE_ALL = 11,\n  BROTLI_TRANSFORM_OMIT_FIRST_1 = 12,\n  BROTLI_TRANSFORM_OMIT_FIRST_2 = 13,\n  BROTLI_TRANSFORM_OMIT_FIRST_3 = 14,\n  BROTLI_TRANSFORM_OMIT_FIRST_4 = 15,\n  BROTLI_TRANSFORM_OMIT_FIRST_5 = 16,\n  BROTLI_TRANSFORM_OMIT_FIRST_6 = 17,\n  BROTLI_TRANSFORM_OMIT_FIRST_7 = 18,\n  BROTLI_TRANSFORM_OMIT_FIRST_8 = 19,\n  BROTLI_TRANSFORM_OMIT_FIRST_9 = 20,\n  BROTLI_TRANSFORM_SHIFT_FIRST = 21,\n  BROTLI_TRANSFORM_SHIFT_ALL = 22,\n  BROTLI_NUM_TRANSFORM_TYPES  /* Counts transforms, not a transform itself. */\n};\n\n#define BROTLI_TRANSFORMS_MAX_CUT_OFF BROTLI_TRANSFORM_OMIT_LAST_9\n\ntypedef struct BrotliTransforms {\n  uint16_t prefix_suffix_size;\n  /* Last character must be null, so prefix_suffix_size must be at least 1. */\n  const uint8_t* prefix_suffix;\n  const uint16_t* prefix_suffix_map;\n  uint32_t num_transforms;\n  /* Each entry is a [prefix_id, transform, suffix_id] triplet. */\n  const uint8_t* transforms;\n  /* Shift for BROTLI_TRANSFORM_SHIFT_FIRST and BROTLI_TRANSFORM_SHIFT_ALL,\n     must be NULL if and only if no such transforms are present. */\n  const uint8_t* params;\n  /* Indices of transforms like [\"\", BROTLI_TRANSFORM_OMIT_LAST_#, \"\"].\n     0-th element corresponds to [\"\", BROTLI_TRANSFORM_IDENTITY, \"\"].\n     -1, if cut-off transform does not exist. */\n  int16_t cutOffTransforms[BROTLI_TRANSFORMS_MAX_CUT_OFF + 1];\n} BrotliTransforms;\n\n/* T is BrotliTransforms*; result is uint8_t. */\n#define BROTLI_TRANSFORM_PREFIX_ID(T, I) ((T)->transforms[((I) * 3) + 0])\n#define BROTLI_TRANSFORM_TYPE(T, I)      ((T)->transforms[((I) * 3) + 1])\n#define BROTLI_TRANSFORM_SUFFIX_ID(T, I) ((T)->transforms[((I) * 3) + 2])\n\n/* T is BrotliTransforms*; result is const uint8_t*. */\n#define BROTLI_TRANSFORM_PREFIX(T, I) (&(T)->prefix_suffix[ \\\n    (T)->prefix_suffix_map[BROTLI_TRANSFORM_PREFIX_ID(T, I)]])\n#define BROTLI_TRANSFORM_SUFFIX(T, I) (&(T)->prefix_suffix[ \\\n    (T)->prefix_suffix_map[BROTLI_TRANSFORM_SUFFIX_ID(T, I)]])\n\nBROTLI_COMMON_API const BrotliTransforms* BrotliGetTransforms(void);\n\nBROTLI_COMMON_API int BrotliTransformDictionaryWord(\n    uint8_t* dst, const uint8_t* word, int len,\n    const BrotliTransforms* transforms, int transform_idx);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_COMMON_TRANSFORM_H_ */\n"
  },
  {
    "path": "c/common/version.h",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Version definition. */\n\n#ifndef BROTLI_COMMON_VERSION_H_\n#define BROTLI_COMMON_VERSION_H_\n\n/* Compose 3 components into a single number. In a hexadecimal representation\n   B and C components occupy exactly 3 digits. */\n#define BROTLI_MAKE_HEX_VERSION(A, B, C) ((A << 24) | (B << 12) | C)\n\n/* Those macros should only be used when library is compiled together with\n   the client. If library is dynamically linked, use BrotliDecoderVersion and\n   BrotliEncoderVersion methods. */\n\n#define BROTLI_VERSION_MAJOR 1\n#define BROTLI_VERSION_MINOR 2\n#define BROTLI_VERSION_PATCH 0\n\n#define BROTLI_VERSION BROTLI_MAKE_HEX_VERSION(                     \\\n  BROTLI_VERSION_MAJOR, BROTLI_VERSION_MINOR, BROTLI_VERSION_PATCH)\n\n/* This macro is used by build system to produce Libtool-friendly soname. See\n   https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html\n   Version evolution rules:\n    - interfaces added (or change is compatible)      -> current+1:0:age+1\n    - interfaces removed (or changed is incompatible) -> current+1:0:0\n    - interfaces not changed                          -> current:revision+1:age\n */\n\n#define BROTLI_ABI_CURRENT  3\n#define BROTLI_ABI_REVISION 0\n#define BROTLI_ABI_AGE      2\n\n#if BROTLI_VERSION_MAJOR != (BROTLI_ABI_CURRENT - BROTLI_ABI_AGE)\n#error ABI/API version inconsistency\n#endif\n\n#if BROTLI_VERSION_MINOR != BROTLI_ABI_AGE\n#error ABI/API version inconsistency\n#endif\n\n#if BROTLI_VERSION_PATCH != BROTLI_ABI_REVISION\n#error ABI/API version inconsistency\n#endif\n\n#endif  /* BROTLI_COMMON_VERSION_H_ */\n"
  },
  {
    "path": "c/dec/bit_reader.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Bit reading helpers */\n\n#include \"bit_reader.h\"\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nconst BROTLI_MODEL(\"small\")\nbrotli_reg_t kBrotliBitMask[33] = {     0x00000000,\n    0x00000001, 0x00000003, 0x00000007, 0x0000000F,\n    0x0000001F, 0x0000003F, 0x0000007F, 0x000000FF,\n    0x000001FF, 0x000003FF, 0x000007FF, 0x00000FFF,\n    0x00001FFF, 0x00003FFF, 0x00007FFF, 0x0000FFFF,\n    0x0001FFFF, 0x0003FFFF, 0x0007FFFF, 0x000FFFFF,\n    0x001FFFFF, 0x003FFFFF, 0x007FFFFF, 0x00FFFFFF,\n    0x01FFFFFF, 0x03FFFFFF, 0x07FFFFFF, 0x0FFFFFFF,\n    0x1FFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF\n};\n\nvoid BrotliInitBitReader(BrotliBitReader* br) {\n  br->val_ = 0;\n  br->bit_pos_ = 0;\n}\n\nBROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* br) {\n  size_t aligned_read_mask = (sizeof(br->val_) >> 1) - 1;\n  /* Fixing alignment after unaligned BrotliFillWindow would result accumulator\n     overflow. If unalignment is caused by BrotliSafeReadBits, then there is\n     enough space in accumulator to fix alignment. */\n  if (BROTLI_UNALIGNED_READ_FAST) {\n    aligned_read_mask = 0;\n  }\n  if (BrotliGetAvailableBits(br) == 0) {\n    br->val_ = 0;\n    if (!BrotliPullByte(br)) {\n      return BROTLI_FALSE;\n    }\n  }\n\n  while ((((size_t)br->next_in) & aligned_read_mask) != 0) {\n    if (!BrotliPullByte(br)) {\n      /* If we consumed all the input, we don't care about the alignment. */\n      return BROTLI_TRUE;\n    }\n  }\n  return BROTLI_TRUE;\n}\n\nBROTLI_BOOL BrotliSafeReadBits32Slow(BrotliBitReader* br,\n    brotli_reg_t n_bits, brotli_reg_t* val) {\n  brotli_reg_t low_val;\n  brotli_reg_t high_val;\n  BrotliBitReaderState memento;\n  BROTLI_DCHECK(n_bits <= 32);\n  BROTLI_DCHECK(n_bits > 24);\n  BrotliBitReaderSaveState(br, &memento);\n  if (!BrotliSafeReadBits(br, 16, &low_val) ||\n      !BrotliSafeReadBits(br, n_bits - 16, &high_val)) {\n    BrotliBitReaderRestoreState(br, &memento);\n    return BROTLI_FALSE;\n  }\n  *val = low_val | (high_val << 16);\n  return BROTLI_TRUE;\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/dec/bit_reader.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Bit reading helpers */\n\n#ifndef BROTLI_DEC_BIT_READER_H_\n#define BROTLI_DEC_BIT_READER_H_\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define BROTLI_SHORT_FILL_BIT_WINDOW_READ (sizeof(brotli_reg_t) >> 1)\n\n/* 162 bits + 7 bytes */\n#define BROTLI_FAST_INPUT_SLACK 28\n\nBROTLI_INTERNAL extern const brotli_reg_t kBrotliBitMask[33];\n\nstatic BROTLI_INLINE brotli_reg_t BitMask(brotli_reg_t n) {\n  if (BROTLI_IS_CONSTANT(n) || BROTLI_HAS_UBFX) {\n    /* Masking with this expression turns to a single\n       \"Unsigned Bit Field Extract\" UBFX instruction on ARM. */\n    return ~(~((brotli_reg_t)0) << n);\n  } else {\n    return kBrotliBitMask[n];\n  }\n}\n\ntypedef struct {\n  brotli_reg_t val_;       /* pre-fetched bits */\n  brotli_reg_t bit_pos_;   /* current bit-reading position in val_ */\n  const uint8_t* next_in;  /* the byte we're reading from */\n  const uint8_t* guard_in; /* position from which \"fast-path\" is prohibited */\n  const uint8_t* last_in;  /* == next_in + avail_in */\n} BrotliBitReader;\n\ntypedef struct {\n  brotli_reg_t val_;\n  brotli_reg_t bit_pos_;\n  const uint8_t* next_in;\n  size_t avail_in;\n} BrotliBitReaderState;\n\n/* Initializes the BrotliBitReader fields. */\nBROTLI_INTERNAL void BrotliInitBitReader(BrotliBitReader* br);\n\n/* Ensures that accumulator is not empty.\n   May consume up to sizeof(brotli_reg_t) - 1 bytes of input.\n   Returns BROTLI_FALSE if data is required but there is no input available.\n   For !BROTLI_UNALIGNED_READ_FAST this function also prepares bit reader for\n   aligned reading. */\nBROTLI_INTERNAL BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* br);\n\n/* Fallback for BrotliSafeReadBits32. Extracted as noninlined method to unburden\n   the main code-path. Never called for RFC brotli streams, required only for\n   \"large-window\" mode and other extensions. */\nBROTLI_INTERNAL BROTLI_NOINLINE BROTLI_BOOL BrotliSafeReadBits32Slow(\n    BrotliBitReader* br, brotli_reg_t n_bits, brotli_reg_t* val);\n\nstatic BROTLI_INLINE size_t\nBrotliBitReaderGetAvailIn(BrotliBitReader* const br) {\n  return (size_t)(br->last_in - br->next_in);\n}\n\nstatic BROTLI_INLINE void BrotliBitReaderSaveState(\n    BrotliBitReader* const from, BrotliBitReaderState* to) {\n  to->val_ = from->val_;\n  to->bit_pos_ = from->bit_pos_;\n  to->next_in = from->next_in;\n  to->avail_in = BrotliBitReaderGetAvailIn(from);\n}\n\nstatic BROTLI_INLINE void BrotliBitReaderSetInput(\n    BrotliBitReader* const br, const uint8_t* next_in, size_t avail_in) {\n  br->next_in = next_in;\n  br->last_in = (avail_in == 0) ? next_in : (next_in + avail_in);\n  if (avail_in + 1 > BROTLI_FAST_INPUT_SLACK) {\n    br->guard_in = next_in + (avail_in + 1 - BROTLI_FAST_INPUT_SLACK);\n  } else {\n    br->guard_in = next_in;\n  }\n}\n\nstatic BROTLI_INLINE void BrotliBitReaderRestoreState(\n    BrotliBitReader* const to, BrotliBitReaderState* from) {\n  to->val_ = from->val_;\n  to->bit_pos_ = from->bit_pos_;\n  to->next_in = from->next_in;\n  BrotliBitReaderSetInput(to, from->next_in, from->avail_in);\n}\n\nstatic BROTLI_INLINE brotli_reg_t BrotliGetAvailableBits(\n    const BrotliBitReader* br) {\n  return br->bit_pos_;\n}\n\n/* Returns amount of unread bytes the bit reader still has buffered from the\n   BrotliInput, including whole bytes in br->val_. Result is capped with\n   maximal ring-buffer size (larger number won't be utilized anyway). */\nstatic BROTLI_INLINE size_t BrotliGetRemainingBytes(BrotliBitReader* br) {\n  static const size_t kCap = (size_t)1 << BROTLI_LARGE_MAX_WBITS;\n  size_t avail_in = BrotliBitReaderGetAvailIn(br);\n  if (avail_in > kCap) return kCap;\n  return avail_in + (BrotliGetAvailableBits(br) >> 3);\n}\n\n/* Checks if there is at least |num| bytes left in the input ring-buffer\n   (excluding the bits remaining in br->val_). */\nstatic BROTLI_INLINE BROTLI_BOOL BrotliCheckInputAmount(\n    BrotliBitReader* const br) {\n  return TO_BROTLI_BOOL(br->next_in < br->guard_in);\n}\n\n/* Load more bits into accumulator. */\nstatic BROTLI_INLINE brotli_reg_t BrotliBitReaderLoadBits(brotli_reg_t val,\n                                                          brotli_reg_t new_bits,\n                                                          brotli_reg_t count,\n                                                          brotli_reg_t offset) {\n  BROTLI_DCHECK(\n      !((val >> offset) & ~new_bits & ~(~((brotli_reg_t)0) << count)));\n  (void)count;\n  return val | (new_bits << offset);\n}\n\n/* Guarantees that there are at least |n_bits| + 1 bits in accumulator.\n   Precondition: accumulator contains at least 1 bit.\n   |n_bits| should be in the range [1..24] for regular build. For portable\n   non-64-bit little-endian build only 16 bits are safe to request. */\nstatic BROTLI_INLINE void BrotliFillBitWindow(\n    BrotliBitReader* const br, brotli_reg_t n_bits) {\n#if (BROTLI_64_BITS)\n  if (BROTLI_UNALIGNED_READ_FAST && BROTLI_IS_CONSTANT(n_bits) &&\n      (n_bits <= 8)) {\n    brotli_reg_t bit_pos = br->bit_pos_;\n    if (bit_pos <= 8) {\n      br->val_ = BrotliBitReaderLoadBits(br->val_,\n          BROTLI_UNALIGNED_LOAD64LE(br->next_in), 56, bit_pos);\n      br->bit_pos_ = bit_pos + 56;\n      br->next_in += 7;\n    }\n  } else if (BROTLI_UNALIGNED_READ_FAST && BROTLI_IS_CONSTANT(n_bits) &&\n             (n_bits <= 16)) {\n    brotli_reg_t bit_pos = br->bit_pos_;\n    if (bit_pos <= 16) {\n      br->val_ = BrotliBitReaderLoadBits(br->val_,\n          BROTLI_UNALIGNED_LOAD64LE(br->next_in), 48, bit_pos);\n      br->bit_pos_ = bit_pos + 48;\n      br->next_in += 6;\n    }\n  } else {\n    brotli_reg_t bit_pos = br->bit_pos_;\n    if (bit_pos <= 32) {\n      br->val_ = BrotliBitReaderLoadBits(br->val_,\n          (uint64_t)BROTLI_UNALIGNED_LOAD32LE(br->next_in), 32, bit_pos);\n      br->bit_pos_ = bit_pos + 32;\n      br->next_in += BROTLI_SHORT_FILL_BIT_WINDOW_READ;\n    }\n  }\n#else\n  if (BROTLI_UNALIGNED_READ_FAST && BROTLI_IS_CONSTANT(n_bits) &&\n      (n_bits <= 8)) {\n    brotli_reg_t bit_pos = br->bit_pos_;\n    if (bit_pos <= 8) {\n      br->val_ = BrotliBitReaderLoadBits(br->val_,\n          BROTLI_UNALIGNED_LOAD32LE(br->next_in), 24, bit_pos);\n      br->bit_pos_ = bit_pos + 24;\n      br->next_in += 3;\n    }\n  } else {\n    brotli_reg_t bit_pos = br->bit_pos_;\n    if (bit_pos <= 16) {\n      br->val_ = BrotliBitReaderLoadBits(br->val_,\n          (uint32_t)BROTLI_UNALIGNED_LOAD16LE(br->next_in), 16, bit_pos);\n      br->bit_pos_ = bit_pos + 16;\n      br->next_in += BROTLI_SHORT_FILL_BIT_WINDOW_READ;\n    }\n  }\n#endif\n}\n\n/* Mostly like BrotliFillBitWindow, but guarantees only 16 bits and reads no\n   more than BROTLI_SHORT_FILL_BIT_WINDOW_READ bytes of input. */\nstatic BROTLI_INLINE void BrotliFillBitWindow16(BrotliBitReader* const br) {\n  BrotliFillBitWindow(br, 17);\n}\n\n/* Tries to pull one byte of input to accumulator.\n   Returns BROTLI_FALSE if there is no input available. */\nstatic BROTLI_INLINE BROTLI_BOOL BrotliPullByte(BrotliBitReader* const br) {\n  if (br->next_in == br->last_in) {\n    return BROTLI_FALSE;\n  }\n  br->val_ = BrotliBitReaderLoadBits(br->val_,\n      (brotli_reg_t)*br->next_in, 8, br->bit_pos_);\n  br->bit_pos_ += 8;\n  ++br->next_in;\n  return BROTLI_TRUE;\n}\n\n/* Returns currently available bits.\n   The number of valid bits could be calculated by BrotliGetAvailableBits. */\nstatic BROTLI_INLINE brotli_reg_t BrotliGetBitsUnmasked(\n    BrotliBitReader* const br) {\n  return br->val_;\n}\n\n/* Like BrotliGetBits, but does not mask the result.\n   The result contains at least 16 valid bits. */\nstatic BROTLI_INLINE brotli_reg_t BrotliGet16BitsUnmasked(\n    BrotliBitReader* const br) {\n  BrotliFillBitWindow(br, 16);\n  return (brotli_reg_t)BrotliGetBitsUnmasked(br);\n}\n\n/* Returns the specified number of bits from |br| without advancing bit\n   position. */\nstatic BROTLI_INLINE brotli_reg_t BrotliGetBits(\n    BrotliBitReader* const br, brotli_reg_t n_bits) {\n  BrotliFillBitWindow(br, n_bits);\n  return BrotliGetBitsUnmasked(br) & BitMask(n_bits);\n}\n\n/* Tries to peek the specified amount of bits. Returns BROTLI_FALSE, if there\n   is not enough input. */\nstatic BROTLI_INLINE BROTLI_BOOL BrotliSafeGetBits(\n    BrotliBitReader* const br, brotli_reg_t n_bits, brotli_reg_t* val) {\n  while (BrotliGetAvailableBits(br) < n_bits) {\n    if (!BrotliPullByte(br)) {\n      return BROTLI_FALSE;\n    }\n  }\n  *val = BrotliGetBitsUnmasked(br) & BitMask(n_bits);\n  return BROTLI_TRUE;\n}\n\n/* Advances the bit pos by |n_bits|. */\nstatic BROTLI_INLINE void BrotliDropBits(\n    BrotliBitReader* const br, brotli_reg_t n_bits) {\n  br->bit_pos_ -= n_bits;\n  br->val_ >>= n_bits;\n}\n\n/* Make sure that there are no spectre bits in accumulator.\n   This is important for the cases when some bytes are skipped\n   (i.e. never placed into accumulator). */\nstatic BROTLI_INLINE void BrotliBitReaderNormalize(BrotliBitReader* br) {\n  /* Actually, it is enough to normalize when br->bit_pos_ == 0 */\n  if (br->bit_pos_ < (sizeof(brotli_reg_t) << 3u)) {\n    br->val_ &= (((brotli_reg_t)1) << br->bit_pos_) - 1;\n  }\n}\n\nstatic BROTLI_INLINE void BrotliBitReaderUnload(BrotliBitReader* br) {\n  brotli_reg_t unused_bytes = BrotliGetAvailableBits(br) >> 3;\n  brotli_reg_t unused_bits = unused_bytes << 3;\n  br->next_in =\n      (unused_bytes == 0) ? br->next_in : (br->next_in - unused_bytes);\n  br->bit_pos_ -= unused_bits;\n  BrotliBitReaderNormalize(br);\n}\n\n/* Reads the specified number of bits from |br| and advances the bit pos.\n   Precondition: accumulator MUST contain at least |n_bits|. */\nstatic BROTLI_INLINE void BrotliTakeBits(BrotliBitReader* const br,\n                                         brotli_reg_t n_bits,\n                                         brotli_reg_t* val) {\n  *val = BrotliGetBitsUnmasked(br) & BitMask(n_bits);\n  BROTLI_LOG((\"[BrotliTakeBits]  %d %d %d val: %6x\\n\",\n              (int)BrotliBitReaderGetAvailIn(br), (int)br->bit_pos_,\n              (int)n_bits, (int)*val));\n  BrotliDropBits(br, n_bits);\n}\n\n/* Reads the specified number of bits from |br| and advances the bit pos.\n   Assumes that there is enough input to perform BrotliFillBitWindow.\n   Up to 24 bits are allowed to be requested from this method. */\nstatic BROTLI_INLINE brotli_reg_t BrotliReadBits24(\n    BrotliBitReader* const br, brotli_reg_t n_bits) {\n  BROTLI_DCHECK(n_bits <= 24);\n  if (BROTLI_64_BITS || (n_bits <= 16)) {\n    brotli_reg_t val;\n    BrotliFillBitWindow(br, n_bits);\n    BrotliTakeBits(br, n_bits, &val);\n    return val;\n  } else {\n    brotli_reg_t low_val;\n    brotli_reg_t high_val;\n    BrotliFillBitWindow(br, 16);\n    BrotliTakeBits(br, 16, &low_val);\n    BrotliFillBitWindow(br, 8);\n    BrotliTakeBits(br, n_bits - 16, &high_val);\n    return low_val | (high_val << 16);\n  }\n}\n\n/* Same as BrotliReadBits24, but allows reading up to 32 bits. */\nstatic BROTLI_INLINE brotli_reg_t BrotliReadBits32(\n    BrotliBitReader* const br, brotli_reg_t n_bits) {\n  BROTLI_DCHECK(n_bits <= 32);\n  if (BROTLI_64_BITS || (n_bits <= 16)) {\n    brotli_reg_t val;\n    BrotliFillBitWindow(br, n_bits);\n    BrotliTakeBits(br, n_bits, &val);\n    return val;\n  } else {\n    brotli_reg_t low_val;\n    brotli_reg_t high_val;\n    BrotliFillBitWindow(br, 16);\n    BrotliTakeBits(br, 16, &low_val);\n    BrotliFillBitWindow(br, 16);\n    BrotliTakeBits(br, n_bits - 16, &high_val);\n    return low_val | (high_val << 16);\n  }\n}\n\n/* Tries to read the specified amount of bits. Returns BROTLI_FALSE, if there\n   is not enough input. |n_bits| MUST be positive.\n   Up to 24 bits are allowed to be requested from this method. */\nstatic BROTLI_INLINE BROTLI_BOOL BrotliSafeReadBits(\n    BrotliBitReader* const br, brotli_reg_t n_bits, brotli_reg_t* val) {\n  BROTLI_DCHECK(n_bits <= 24);\n  while (BrotliGetAvailableBits(br) < n_bits) {\n    if (!BrotliPullByte(br)) {\n      return BROTLI_FALSE;\n    }\n  }\n  BrotliTakeBits(br, n_bits, val);\n  return BROTLI_TRUE;\n}\n\n/* Same as BrotliSafeReadBits, but allows reading up to 32 bits. */\nstatic BROTLI_INLINE BROTLI_BOOL BrotliSafeReadBits32(\n    BrotliBitReader* const br, brotli_reg_t n_bits, brotli_reg_t* val) {\n  BROTLI_DCHECK(n_bits <= 32);\n  if (BROTLI_64_BITS || (n_bits <= 24)) {\n    while (BrotliGetAvailableBits(br) < n_bits) {\n      if (!BrotliPullByte(br)) {\n        return BROTLI_FALSE;\n      }\n    }\n    BrotliTakeBits(br, n_bits, val);\n    return BROTLI_TRUE;\n  } else {\n    return BrotliSafeReadBits32Slow(br, n_bits, val);\n  }\n}\n\n/* Advances the bit reader position to the next byte boundary and verifies\n   that any skipped bits are set to zero. */\nstatic BROTLI_INLINE BROTLI_BOOL BrotliJumpToByteBoundary(BrotliBitReader* br) {\n  brotli_reg_t pad_bits_count = BrotliGetAvailableBits(br) & 0x7;\n  brotli_reg_t pad_bits = 0;\n  if (pad_bits_count != 0) {\n    BrotliTakeBits(br, pad_bits_count, &pad_bits);\n  }\n  BrotliBitReaderNormalize(br);\n  return TO_BROTLI_BOOL(pad_bits == 0);\n}\n\nstatic BROTLI_INLINE void BrotliDropBytes(BrotliBitReader* br, size_t num) {\n  /* Check detour is legal: accumulator must to be empty. */\n  BROTLI_DCHECK(br->bit_pos_ == 0);\n  BROTLI_DCHECK(br->val_ == 0);\n  br->next_in += num;\n}\n\n/* Copies remaining input bytes stored in the bit reader to the output. Value\n   |num| may not be larger than BrotliGetRemainingBytes. The bit reader must be\n   warmed up again after this. */\nstatic BROTLI_INLINE void BrotliCopyBytes(uint8_t* dest,\n                                          BrotliBitReader* br, size_t num) {\n  while (BrotliGetAvailableBits(br) >= 8 && num > 0) {\n    *dest = (uint8_t)BrotliGetBitsUnmasked(br);\n    BrotliDropBits(br, 8);\n    ++dest;\n    --num;\n  }\n  BrotliBitReaderNormalize(br);\n  if (num > 0) {\n    memcpy(dest, br->next_in, num);\n    BrotliDropBytes(br, num);\n  }\n}\n\nBROTLI_UNUSED_FUNCTION void BrotliBitReaderSuppressUnusedFunctions(void) {\n  BROTLI_UNUSED(&BrotliBitReaderSuppressUnusedFunctions);\n\n  BROTLI_UNUSED(&BrotliBitReaderGetAvailIn);\n  BROTLI_UNUSED(&BrotliBitReaderLoadBits);\n  BROTLI_UNUSED(&BrotliBitReaderRestoreState);\n  BROTLI_UNUSED(&BrotliBitReaderSaveState);\n  BROTLI_UNUSED(&BrotliBitReaderSetInput);\n  BROTLI_UNUSED(&BrotliBitReaderUnload);\n  BROTLI_UNUSED(&BrotliCheckInputAmount);\n  BROTLI_UNUSED(&BrotliCopyBytes);\n  BROTLI_UNUSED(&BrotliFillBitWindow16);\n  BROTLI_UNUSED(&BrotliGet16BitsUnmasked);\n  BROTLI_UNUSED(&BrotliGetBits);\n  BROTLI_UNUSED(&BrotliGetRemainingBytes);\n  BROTLI_UNUSED(&BrotliJumpToByteBoundary);\n  BROTLI_UNUSED(&BrotliReadBits24);\n  BROTLI_UNUSED(&BrotliReadBits32);\n  BROTLI_UNUSED(&BrotliSafeGetBits);\n  BROTLI_UNUSED(&BrotliSafeReadBits);\n  BROTLI_UNUSED(&BrotliSafeReadBits32);\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_DEC_BIT_READER_H_ */\n"
  },
  {
    "path": "c/dec/decode.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include <brotli/decode.h>\n\n#include \"../common/constants.h\"\n#include \"../common/context.h\"\n#include \"../common/dictionary.h\"\n#include \"../common/platform.h\"\n#include \"../common/shared_dictionary_internal.h\"\n#include \"../common/transform.h\"\n#include \"../common/version.h\"\n#include \"bit_reader.h\"\n#include \"huffman.h\"\n#include \"prefix.h\"\n#include \"state.h\"\n#include \"static_init.h\"\n\n#if defined(BROTLI_TARGET_NEON)\n#include <arm_neon.h>\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define BROTLI_FAILURE(CODE) (BROTLI_DUMP(), CODE)\n\n#define BROTLI_LOG_UINT(name)                                       \\\n  BROTLI_LOG((\"[%s] %s = %lu\\n\", __func__, #name, (unsigned long)(name)))\n#define BROTLI_LOG_ARRAY_INDEX(array_name, idx)                     \\\n  BROTLI_LOG((\"[%s] %s[%lu] = %lu\\n\", __func__, #array_name,        \\\n         (unsigned long)(idx), (unsigned long)array_name[idx]))\n\n#define HUFFMAN_TABLE_BITS 8U\n#define HUFFMAN_TABLE_MASK 0xFF\n\n/* We need the slack region for the following reasons:\n    - doing up to two 16-byte copies for fast backward copying\n    - inserting transformed dictionary word:\n        255 prefix + 32 base + 255 suffix */\nstatic const brotli_reg_t kRingBufferWriteAheadSlack = 542;\n\nstatic const BROTLI_MODEL(\"small\")\nuint8_t kCodeLengthCodeOrder[BROTLI_CODE_LENGTH_CODES] = {\n  1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n};\n\n/* Static prefix code for the complex code length code lengths. */\nstatic const BROTLI_MODEL(\"small\")\nuint8_t kCodeLengthPrefixLength[16] = {\n  2, 2, 2, 3, 2, 2, 2, 4, 2, 2, 2, 3, 2, 2, 2, 4,\n};\n\nstatic const BROTLI_MODEL(\"small\")\nuint8_t kCodeLengthPrefixValue[16] = {\n  0, 4, 3, 2, 0, 4, 3, 1, 0, 4, 3, 2, 0, 4, 3, 5,\n};\n\nBROTLI_BOOL BrotliDecoderSetParameter(\n    BrotliDecoderState* state, BrotliDecoderParameter p, uint32_t value) {\n  if (state->state != BROTLI_STATE_UNINITED) return BROTLI_FALSE;\n  switch (p) {\n    case BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:\n      state->canny_ringbuffer_allocation = !!value ? 0 : 1;\n      return BROTLI_TRUE;\n\n    case BROTLI_DECODER_PARAM_LARGE_WINDOW:\n      state->large_window = TO_BROTLI_BOOL(!!value);\n      return BROTLI_TRUE;\n\n    default: return BROTLI_FALSE;\n  }\n}\n\nBrotliDecoderState* BrotliDecoderCreateInstance(\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {\n  BrotliDecoderState* state = 0;\n  if (!BrotliDecoderEnsureStaticInit()) {\n    BROTLI_DUMP();\n    return 0;\n  }\n  if (!alloc_func && !free_func) {\n    state = (BrotliDecoderState*)malloc(sizeof(BrotliDecoderState));\n  } else if (alloc_func && free_func) {\n    state = (BrotliDecoderState*)alloc_func(opaque, sizeof(BrotliDecoderState));\n  }\n  if (state == 0) {\n    BROTLI_DUMP();\n    return 0;\n  }\n  if (!BrotliDecoderStateInit(state, alloc_func, free_func, opaque)) {\n    BROTLI_DUMP();\n    if (!alloc_func && !free_func) {\n      free(state);\n    } else if (alloc_func && free_func) {\n      free_func(opaque, state);\n    }\n    return 0;\n  }\n  return state;\n}\n\n/* Deinitializes and frees BrotliDecoderState instance. */\nvoid BrotliDecoderDestroyInstance(BrotliDecoderState* state) {\n  if (!state) {\n    return;\n  } else {\n    brotli_free_func free_func = state->free_func;\n    void* opaque = state->memory_manager_opaque;\n    BrotliDecoderStateCleanup(state);\n    free_func(opaque, state);\n  }\n}\n\n/* Saves error code and converts it to BrotliDecoderResult. */\nstatic BROTLI_NOINLINE BrotliDecoderResult SaveErrorCode(\n    BrotliDecoderState* s, BrotliDecoderErrorCode e, size_t consumed_input) {\n  s->error_code = (int)e;\n  s->used_input += consumed_input;\n  if ((s->buffer_length != 0) && (s->br.next_in == s->br.last_in)) {\n    /* If internal buffer is depleted at last, reset it. */\n    s->buffer_length = 0;\n  }\n  switch (e) {\n    case BROTLI_DECODER_SUCCESS:\n      return BROTLI_DECODER_RESULT_SUCCESS;\n\n    case BROTLI_DECODER_NEEDS_MORE_INPUT:\n      return BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT;\n\n    case BROTLI_DECODER_NEEDS_MORE_OUTPUT:\n      return BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT;\n\n    default:\n      return BROTLI_DECODER_RESULT_ERROR;\n  }\n}\n\n/* Decodes WBITS by reading 1 - 7 bits, or 0x11 for \"Large Window Brotli\".\n   Precondition: bit-reader accumulator has at least 8 bits. */\nstatic BrotliDecoderErrorCode DecodeWindowBits(BrotliDecoderState* s,\n                                               BrotliBitReader* br) {\n  brotli_reg_t n;\n  BROTLI_BOOL large_window = s->large_window;\n  s->large_window = BROTLI_FALSE;\n  BrotliTakeBits(br, 1, &n);\n  if (n == 0) {\n    s->window_bits = 16;\n    return BROTLI_DECODER_SUCCESS;\n  }\n  BrotliTakeBits(br, 3, &n);\n  if (n != 0) {\n    s->window_bits = (17u + n) & 63u;\n    return BROTLI_DECODER_SUCCESS;\n  }\n  BrotliTakeBits(br, 3, &n);\n  if (n == 1) {\n    if (large_window) {\n      BrotliTakeBits(br, 1, &n);\n      if (n == 1) {\n        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);\n      }\n      s->large_window = BROTLI_TRUE;\n      return BROTLI_DECODER_SUCCESS;\n    } else {\n      return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);\n    }\n  }\n  if (n != 0) {\n    s->window_bits = (8u + n) & 63u;\n    return BROTLI_DECODER_SUCCESS;\n  }\n  s->window_bits = 17;\n  return BROTLI_DECODER_SUCCESS;\n}\n\nstatic BROTLI_INLINE void memmove16(uint8_t* dst, uint8_t* src) {\n#if defined(BROTLI_TARGET_NEON)\n  vst1q_u8(dst, vld1q_u8(src));\n#else\n  uint32_t buffer[4];\n  memcpy(buffer, src, 16);\n  memcpy(dst, buffer, 16);\n#endif\n}\n\n/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */\nstatic BROTLI_NOINLINE BrotliDecoderErrorCode DecodeVarLenUint8(\n    BrotliDecoderState* s, BrotliBitReader* br, brotli_reg_t* value) {\n  brotli_reg_t bits;\n  switch (s->substate_decode_uint8) {\n    case BROTLI_STATE_DECODE_UINT8_NONE:\n      if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 1, &bits))) {\n        return BROTLI_DECODER_NEEDS_MORE_INPUT;\n      }\n      if (bits == 0) {\n        *value = 0;\n        return BROTLI_DECODER_SUCCESS;\n      }\n    /* Fall through. */\n\n    case BROTLI_STATE_DECODE_UINT8_SHORT:\n      if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 3, &bits))) {\n        s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_SHORT;\n        return BROTLI_DECODER_NEEDS_MORE_INPUT;\n      }\n      if (bits == 0) {\n        *value = 1;\n        s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;\n        return BROTLI_DECODER_SUCCESS;\n      }\n      /* Use output value as a temporary storage. It MUST be persisted. */\n      *value = bits;\n    /* Fall through. */\n\n    case BROTLI_STATE_DECODE_UINT8_LONG:\n      if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, *value, &bits))) {\n        s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_LONG;\n        return BROTLI_DECODER_NEEDS_MORE_INPUT;\n      }\n      *value = ((brotli_reg_t)1U << *value) + bits;\n      s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;\n      return BROTLI_DECODER_SUCCESS;\n\n    default:\n      return\n          BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);  /* COV_NF_LINE */\n  }\n}\n\n/* Decodes a metablock length and flags by reading 2 - 31 bits. */\nstatic BrotliDecoderErrorCode BROTLI_NOINLINE DecodeMetaBlockLength(\n    BrotliDecoderState* s, BrotliBitReader* br) {\n  brotli_reg_t bits;\n  int i;\n  for (;;) {\n    switch (s->substate_metablock_header) {\n      case BROTLI_STATE_METABLOCK_HEADER_NONE:\n        if (!BrotliSafeReadBits(br, 1, &bits)) {\n          return BROTLI_DECODER_NEEDS_MORE_INPUT;\n        }\n        s->is_last_metablock = bits ? 1 : 0;\n        s->meta_block_remaining_len = 0;\n        s->is_uncompressed = 0;\n        s->is_metadata = 0;\n        if (!s->is_last_metablock) {\n          s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NIBBLES;\n          break;\n        }\n        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_EMPTY;\n      /* Fall through. */\n\n      case BROTLI_STATE_METABLOCK_HEADER_EMPTY:\n        if (!BrotliSafeReadBits(br, 1, &bits)) {\n          return BROTLI_DECODER_NEEDS_MORE_INPUT;\n        }\n        if (bits) {\n          s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;\n          return BROTLI_DECODER_SUCCESS;\n        }\n        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NIBBLES;\n      /* Fall through. */\n\n      case BROTLI_STATE_METABLOCK_HEADER_NIBBLES:\n        if (!BrotliSafeReadBits(br, 2, &bits)) {\n          return BROTLI_DECODER_NEEDS_MORE_INPUT;\n        }\n        s->size_nibbles = (uint8_t)(bits + 4);\n        s->loop_counter = 0;\n        if (bits == 3) {\n          s->is_metadata = 1;\n          s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_RESERVED;\n          break;\n        }\n        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_SIZE;\n      /* Fall through. */\n\n      case BROTLI_STATE_METABLOCK_HEADER_SIZE:\n        i = s->loop_counter;\n        for (; i < (int)s->size_nibbles; ++i) {\n          if (!BrotliSafeReadBits(br, 4, &bits)) {\n            s->loop_counter = i;\n            return BROTLI_DECODER_NEEDS_MORE_INPUT;\n          }\n          if (i + 1 == (int)s->size_nibbles && s->size_nibbles > 4 &&\n              bits == 0) {\n            return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE);\n          }\n          s->meta_block_remaining_len |= (int)(bits << (i * 4));\n        }\n        s->substate_metablock_header =\n            BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED;\n      /* Fall through. */\n\n      case BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED:\n        if (!s->is_last_metablock) {\n          if (!BrotliSafeReadBits(br, 1, &bits)) {\n            return BROTLI_DECODER_NEEDS_MORE_INPUT;\n          }\n          s->is_uncompressed = bits ? 1 : 0;\n        }\n        ++s->meta_block_remaining_len;\n        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;\n        return BROTLI_DECODER_SUCCESS;\n\n      case BROTLI_STATE_METABLOCK_HEADER_RESERVED:\n        if (!BrotliSafeReadBits(br, 1, &bits)) {\n          return BROTLI_DECODER_NEEDS_MORE_INPUT;\n        }\n        if (bits != 0) {\n          return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_RESERVED);\n        }\n        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_BYTES;\n      /* Fall through. */\n\n      case BROTLI_STATE_METABLOCK_HEADER_BYTES:\n        if (!BrotliSafeReadBits(br, 2, &bits)) {\n          return BROTLI_DECODER_NEEDS_MORE_INPUT;\n        }\n        if (bits == 0) {\n          s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;\n          return BROTLI_DECODER_SUCCESS;\n        }\n        s->size_nibbles = (uint8_t)bits;\n        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_METADATA;\n      /* Fall through. */\n\n      case BROTLI_STATE_METABLOCK_HEADER_METADATA:\n        i = s->loop_counter;\n        for (; i < (int)s->size_nibbles; ++i) {\n          if (!BrotliSafeReadBits(br, 8, &bits)) {\n            s->loop_counter = i;\n            return BROTLI_DECODER_NEEDS_MORE_INPUT;\n          }\n          if (i + 1 == (int)s->size_nibbles && s->size_nibbles > 1 &&\n              bits == 0) {\n            return BROTLI_FAILURE(\n                BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE);\n          }\n          s->meta_block_remaining_len |= (int)(bits << (i * 8));\n        }\n        ++s->meta_block_remaining_len;\n        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;\n        return BROTLI_DECODER_SUCCESS;\n\n      default:\n        return\n            BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);  /* COV_NF_LINE */\n    }\n  }\n}\n\n/* Decodes the Huffman code.\n   This method doesn't read data from the bit reader, BUT drops the amount of\n   bits that correspond to the decoded symbol.\n   bits MUST contain at least 15 (BROTLI_HUFFMAN_MAX_CODE_LENGTH) valid bits. */\nstatic BROTLI_INLINE brotli_reg_t DecodeSymbol(brotli_reg_t bits,\n                                               const HuffmanCode* table,\n                                               BrotliBitReader* br) {\n  BROTLI_HC_MARK_TABLE_FOR_FAST_LOAD(table);\n  BROTLI_HC_ADJUST_TABLE_INDEX(table, bits & HUFFMAN_TABLE_MASK);\n  if (BROTLI_HC_FAST_LOAD_BITS(table) > HUFFMAN_TABLE_BITS) {\n    brotli_reg_t nbits = BROTLI_HC_FAST_LOAD_BITS(table) - HUFFMAN_TABLE_BITS;\n    BrotliDropBits(br, HUFFMAN_TABLE_BITS);\n    BROTLI_HC_ADJUST_TABLE_INDEX(table,\n        BROTLI_HC_FAST_LOAD_VALUE(table) +\n        ((bits >> HUFFMAN_TABLE_BITS) & BitMask(nbits)));\n  }\n  BrotliDropBits(br, BROTLI_HC_FAST_LOAD_BITS(table));\n  return BROTLI_HC_FAST_LOAD_VALUE(table);\n}\n\n/* Reads and decodes the next Huffman code from bit-stream.\n   This method peeks 16 bits of input and drops 0 - 15 of them. */\nstatic BROTLI_INLINE brotli_reg_t ReadSymbol(const HuffmanCode* table,\n                                             BrotliBitReader* br) {\n  return DecodeSymbol(BrotliGet16BitsUnmasked(br), table, br);\n}\n\n/* Same as DecodeSymbol, but it is known that there is less than 15 bits of\n   input are currently available. */\nstatic BROTLI_NOINLINE BROTLI_BOOL SafeDecodeSymbol(\n    const HuffmanCode* table, BrotliBitReader* br, brotli_reg_t* result) {\n  brotli_reg_t val;\n  brotli_reg_t available_bits = BrotliGetAvailableBits(br);\n  BROTLI_HC_MARK_TABLE_FOR_FAST_LOAD(table);\n  if (available_bits == 0) {\n    if (BROTLI_HC_FAST_LOAD_BITS(table) == 0) {\n      *result = BROTLI_HC_FAST_LOAD_VALUE(table);\n      return BROTLI_TRUE;\n    }\n    return BROTLI_FALSE;  /* No valid bits at all. */\n  }\n  val = BrotliGetBitsUnmasked(br);\n  BROTLI_HC_ADJUST_TABLE_INDEX(table, val & HUFFMAN_TABLE_MASK);\n  if (BROTLI_HC_FAST_LOAD_BITS(table) <= HUFFMAN_TABLE_BITS) {\n    if (BROTLI_HC_FAST_LOAD_BITS(table) <= available_bits) {\n      BrotliDropBits(br, BROTLI_HC_FAST_LOAD_BITS(table));\n      *result = BROTLI_HC_FAST_LOAD_VALUE(table);\n      return BROTLI_TRUE;\n    } else {\n      return BROTLI_FALSE;  /* Not enough bits for the first level. */\n    }\n  }\n  if (available_bits <= HUFFMAN_TABLE_BITS) {\n    return BROTLI_FALSE;  /* Not enough bits to move to the second level. */\n  }\n\n  /* Speculatively drop HUFFMAN_TABLE_BITS. */\n  val = (val & BitMask(BROTLI_HC_FAST_LOAD_BITS(table))) >> HUFFMAN_TABLE_BITS;\n  available_bits -= HUFFMAN_TABLE_BITS;\n  BROTLI_HC_ADJUST_TABLE_INDEX(table, BROTLI_HC_FAST_LOAD_VALUE(table) + val);\n  if (available_bits < BROTLI_HC_FAST_LOAD_BITS(table)) {\n    return BROTLI_FALSE;  /* Not enough bits for the second level. */\n  }\n\n  BrotliDropBits(br, HUFFMAN_TABLE_BITS + BROTLI_HC_FAST_LOAD_BITS(table));\n  *result = BROTLI_HC_FAST_LOAD_VALUE(table);\n  return BROTLI_TRUE;\n}\n\nstatic BROTLI_INLINE BROTLI_BOOL SafeReadSymbol(\n    const HuffmanCode* table, BrotliBitReader* br, brotli_reg_t* result) {\n  brotli_reg_t val;\n  if (BROTLI_PREDICT_TRUE(BrotliSafeGetBits(br, 15, &val))) {\n    *result = DecodeSymbol(val, table, br);\n    return BROTLI_TRUE;\n  }\n  return SafeDecodeSymbol(table, br, result);\n}\n\n/* Makes a look-up in first level Huffman table. Peeks 8 bits. */\nstatic BROTLI_INLINE void PreloadSymbol(int safe,\n                                        const HuffmanCode* table,\n                                        BrotliBitReader* br,\n                                        brotli_reg_t* bits,\n                                        brotli_reg_t* value) {\n  if (safe) {\n    return;\n  }\n  BROTLI_HC_MARK_TABLE_FOR_FAST_LOAD(table);\n  BROTLI_HC_ADJUST_TABLE_INDEX(table, BrotliGetBits(br, HUFFMAN_TABLE_BITS));\n  *bits = BROTLI_HC_FAST_LOAD_BITS(table);\n  *value = BROTLI_HC_FAST_LOAD_VALUE(table);\n}\n\n/* Decodes the next Huffman code using data prepared by PreloadSymbol.\n   Reads 0 - 15 bits. Also peeks 8 following bits. */\nstatic BROTLI_INLINE brotli_reg_t ReadPreloadedSymbol(const HuffmanCode* table,\n                                                  BrotliBitReader* br,\n                                                  brotli_reg_t* bits,\n                                                  brotli_reg_t* value) {\n  brotli_reg_t result = *value;\n  if (BROTLI_PREDICT_FALSE(*bits > HUFFMAN_TABLE_BITS)) {\n    brotli_reg_t val = BrotliGet16BitsUnmasked(br);\n    const HuffmanCode* ext = table + (val & HUFFMAN_TABLE_MASK) + *value;\n    brotli_reg_t mask = BitMask((*bits - HUFFMAN_TABLE_BITS));\n    BROTLI_HC_MARK_TABLE_FOR_FAST_LOAD(ext);\n    BrotliDropBits(br, HUFFMAN_TABLE_BITS);\n    BROTLI_HC_ADJUST_TABLE_INDEX(ext, (val >> HUFFMAN_TABLE_BITS) & mask);\n    BrotliDropBits(br, BROTLI_HC_FAST_LOAD_BITS(ext));\n    result = BROTLI_HC_FAST_LOAD_VALUE(ext);\n  } else {\n    BrotliDropBits(br, *bits);\n  }\n  PreloadSymbol(0, table, br, bits, value);\n  return result;\n}\n\n/* Reads up to limit symbols from br and copies them into ringbuffer,\n   starting from pos. Caller must ensure that there is enough space\n   for the write. Returns the amount of symbols actually copied. */\nstatic BROTLI_INLINE int BrotliCopyPreloadedSymbolsToU8(const HuffmanCode* table,\n                                                        BrotliBitReader* br,\n                                                        brotli_reg_t* bits,\n                                                        brotli_reg_t* value,\n                                                        uint8_t* ringbuffer,\n                                                        int pos,\n                                                        const int limit) {\n  /* Calculate range where CheckInputAmount is always true.\n     Start with the number of bytes we can read. */\n  int64_t new_lim = br->guard_in - br->next_in;\n  /* Convert to bits, since symbols use variable number of bits. */\n  new_lim *= 8;\n  /* At most 15 bits per symbol, so this is safe. */\n  new_lim /= 15;\n  const int kMaximalOverread = 4;\n  int pos_limit = limit;\n  int copies = 0;\n  if ((new_lim - kMaximalOverread) <= limit) {\n    // Safe cast, since new_lim is already < num_steps\n    pos_limit = (int)(new_lim - kMaximalOverread);\n  }\n  if (pos_limit < 0) {\n    pos_limit = 0;\n  }\n  copies = pos_limit;\n  pos_limit += pos;\n  /* Fast path, caller made sure it is safe to write,\n     we verified that is is safe to read. */\n  for (; pos < pos_limit; pos++) {\n    BROTLI_DCHECK(BrotliCheckInputAmount(br));\n    ringbuffer[pos] = (uint8_t)ReadPreloadedSymbol(table, br, bits, value);\n    BROTLI_LOG_ARRAY_INDEX(ringbuffer, pos);\n  }\n  /* Do the remainder, caller made sure it is safe to write,\n     we need to bverify that it is safe to read. */\n  while (BrotliCheckInputAmount(br) && copies < limit) {\n    ringbuffer[pos] = (uint8_t)ReadPreloadedSymbol(table, br, bits, value);\n    BROTLI_LOG_ARRAY_INDEX(ringbuffer, pos);\n    pos++;\n    copies++;\n  }\n  return copies;\n}\n\nstatic BROTLI_INLINE brotli_reg_t Log2Floor(brotli_reg_t x) {\n  brotli_reg_t result = 0;\n  while (x) {\n    x >>= 1;\n    ++result;\n  }\n  return result;\n}\n\n/* Reads (s->symbol + 1) symbols.\n   Totally 1..4 symbols are read, 1..11 bits each.\n   The list of symbols MUST NOT contain duplicates. */\nstatic BrotliDecoderErrorCode ReadSimpleHuffmanSymbols(\n    brotli_reg_t alphabet_size_max, brotli_reg_t alphabet_size_limit,\n    BrotliDecoderState* s) {\n  /* max_bits == 1..11; symbol == 0..3; 1..44 bits will be read. */\n  BrotliBitReader* br = &s->br;\n  BrotliMetablockHeaderArena* h = &s->arena.header;\n  brotli_reg_t max_bits = Log2Floor(alphabet_size_max - 1);\n  brotli_reg_t i = h->sub_loop_counter;\n  brotli_reg_t num_symbols = h->symbol;\n  while (i <= num_symbols) {\n    brotli_reg_t v;\n    if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, max_bits, &v))) {\n      h->sub_loop_counter = i;\n      h->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_READ;\n      return BROTLI_DECODER_NEEDS_MORE_INPUT;\n    }\n    if (v >= alphabet_size_limit) {\n      return\n          BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET);\n    }\n    h->symbols_lists_array[i] = (uint16_t)v;\n    BROTLI_LOG_UINT(h->symbols_lists_array[i]);\n    ++i;\n  }\n\n  for (i = 0; i < num_symbols; ++i) {\n    brotli_reg_t k = i + 1;\n    for (; k <= num_symbols; ++k) {\n      if (h->symbols_lists_array[i] == h->symbols_lists_array[k]) {\n        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME);\n      }\n    }\n  }\n\n  return BROTLI_DECODER_SUCCESS;\n}\n\n/* Process single decoded symbol code length:\n    A) reset the repeat variable\n    B) remember code length (if it is not 0)\n    C) extend corresponding index-chain\n    D) reduce the Huffman space\n    E) update the histogram */\nstatic BROTLI_INLINE void ProcessSingleCodeLength(brotli_reg_t code_len,\n    brotli_reg_t* symbol, brotli_reg_t* repeat, brotli_reg_t* space,\n    brotli_reg_t* prev_code_len, uint16_t* symbol_lists,\n    uint16_t* code_length_histo, int* next_symbol) {\n  *repeat = 0;\n  if (code_len != 0) {  /* code_len == 1..15 */\n    symbol_lists[next_symbol[code_len]] = (uint16_t)(*symbol);\n    next_symbol[code_len] = (int)(*symbol);\n    *prev_code_len = code_len;\n    *space -= 32768U >> code_len;\n    code_length_histo[code_len]++;\n    BROTLI_LOG((\"[ReadHuffmanCode] code_length[%d] = %d\\n\",\n        (int)*symbol, (int)code_len));\n  }\n  (*symbol)++;\n}\n\n/* Process repeated symbol code length.\n    A) Check if it is the extension of previous repeat sequence; if the decoded\n       value is not BROTLI_REPEAT_PREVIOUS_CODE_LENGTH, then it is a new\n       symbol-skip\n    B) Update repeat variable\n    C) Check if operation is feasible (fits alphabet)\n    D) For each symbol do the same operations as in ProcessSingleCodeLength\n\n   PRECONDITION: code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH or\n                 code_len == BROTLI_REPEAT_ZERO_CODE_LENGTH */\nstatic BROTLI_INLINE void ProcessRepeatedCodeLength(brotli_reg_t code_len,\n    brotli_reg_t repeat_delta, brotli_reg_t alphabet_size, brotli_reg_t* symbol,\n    brotli_reg_t* repeat, brotli_reg_t* space, brotli_reg_t* prev_code_len,\n    brotli_reg_t* repeat_code_len, uint16_t* symbol_lists,\n    uint16_t* code_length_histo, int* next_symbol) {\n  brotli_reg_t old_repeat;\n  brotli_reg_t extra_bits = 3;  /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */\n  brotli_reg_t new_len = 0;  /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */\n  if (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {\n    new_len = *prev_code_len;\n    extra_bits = 2;\n  }\n  if (*repeat_code_len != new_len) {\n    *repeat = 0;\n    *repeat_code_len = new_len;\n  }\n  old_repeat = *repeat;\n  if (*repeat > 0) {\n    *repeat -= 2;\n    *repeat <<= extra_bits;\n  }\n  *repeat += repeat_delta + 3U;\n  repeat_delta = *repeat - old_repeat;\n  if (*symbol + repeat_delta > alphabet_size) {\n    BROTLI_DUMP();\n    *symbol = alphabet_size;\n    *space = 0xFFFFF;\n    return;\n  }\n  BROTLI_LOG((\"[ReadHuffmanCode] code_length[%d..%d] = %d\\n\",\n      (int)*symbol, (int)(*symbol + repeat_delta - 1), (int)*repeat_code_len));\n  if (*repeat_code_len != 0) {\n    brotli_reg_t last = *symbol + repeat_delta;\n    int next = next_symbol[*repeat_code_len];\n    do {\n      symbol_lists[next] = (uint16_t)*symbol;\n      next = (int)*symbol;\n    } while (++(*symbol) != last);\n    next_symbol[*repeat_code_len] = next;\n    *space -= repeat_delta << (15 - *repeat_code_len);\n    code_length_histo[*repeat_code_len] =\n        (uint16_t)(code_length_histo[*repeat_code_len] + repeat_delta);\n  } else {\n    *symbol += repeat_delta;\n  }\n}\n\n/* Reads and decodes symbol codelengths. */\nstatic BrotliDecoderErrorCode ReadSymbolCodeLengths(\n    brotli_reg_t alphabet_size, BrotliDecoderState* s) {\n  BrotliBitReader* br = &s->br;\n  BrotliMetablockHeaderArena* h = &s->arena.header;\n  brotli_reg_t symbol = h->symbol;\n  brotli_reg_t repeat = h->repeat;\n  brotli_reg_t space = h->space;\n  brotli_reg_t prev_code_len = h->prev_code_len;\n  brotli_reg_t repeat_code_len = h->repeat_code_len;\n  uint16_t* symbol_lists = h->symbol_lists;\n  uint16_t* code_length_histo = h->code_length_histo;\n  int* next_symbol = h->next_symbol;\n  if (!BrotliWarmupBitReader(br)) {\n    return BROTLI_DECODER_NEEDS_MORE_INPUT;\n  }\n  while (symbol < alphabet_size && space > 0) {\n    const HuffmanCode* p = h->table;\n    brotli_reg_t code_len;\n    BROTLI_HC_MARK_TABLE_FOR_FAST_LOAD(p);\n    if (!BrotliCheckInputAmount(br)) {\n      h->symbol = symbol;\n      h->repeat = repeat;\n      h->prev_code_len = prev_code_len;\n      h->repeat_code_len = repeat_code_len;\n      h->space = space;\n      return BROTLI_DECODER_NEEDS_MORE_INPUT;\n    }\n    BrotliFillBitWindow16(br);\n    BROTLI_HC_ADJUST_TABLE_INDEX(p, BrotliGetBitsUnmasked(br) &\n        BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH));\n    BrotliDropBits(br, BROTLI_HC_FAST_LOAD_BITS(p));  /* Use 1..5 bits. */\n    code_len = BROTLI_HC_FAST_LOAD_VALUE(p);  /* code_len == 0..17 */\n    if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {\n      ProcessSingleCodeLength(code_len, &symbol, &repeat, &space,\n          &prev_code_len, symbol_lists, code_length_histo, next_symbol);\n    } else {  /* code_len == 16..17, extra_bits == 2..3 */\n      brotli_reg_t extra_bits =\n          (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) ? 2 : 3;\n      brotli_reg_t repeat_delta =\n          BrotliGetBitsUnmasked(br) & BitMask(extra_bits);\n      BrotliDropBits(br, extra_bits);\n      ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size,\n          &symbol, &repeat, &space, &prev_code_len, &repeat_code_len,\n          symbol_lists, code_length_histo, next_symbol);\n    }\n  }\n  h->space = space;\n  return BROTLI_DECODER_SUCCESS;\n}\n\nstatic BrotliDecoderErrorCode SafeReadSymbolCodeLengths(\n    brotli_reg_t alphabet_size, BrotliDecoderState* s) {\n  BrotliBitReader* br = &s->br;\n  BrotliMetablockHeaderArena* h = &s->arena.header;\n  BROTLI_BOOL get_byte = BROTLI_FALSE;\n  while (h->symbol < alphabet_size && h->space > 0) {\n    const HuffmanCode* p = h->table;\n    brotli_reg_t code_len;\n    brotli_reg_t available_bits;\n    brotli_reg_t bits = 0;\n    BROTLI_HC_MARK_TABLE_FOR_FAST_LOAD(p);\n    if (get_byte && !BrotliPullByte(br)) return BROTLI_DECODER_NEEDS_MORE_INPUT;\n    get_byte = BROTLI_FALSE;\n    available_bits = BrotliGetAvailableBits(br);\n    if (available_bits != 0) {\n      bits = (uint32_t)BrotliGetBitsUnmasked(br);\n    }\n    BROTLI_HC_ADJUST_TABLE_INDEX(p,\n        bits & BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH));\n    if (BROTLI_HC_FAST_LOAD_BITS(p) > available_bits) {\n      get_byte = BROTLI_TRUE;\n      continue;\n    }\n    code_len = BROTLI_HC_FAST_LOAD_VALUE(p);  /* code_len == 0..17 */\n    if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {\n      BrotliDropBits(br, BROTLI_HC_FAST_LOAD_BITS(p));\n      ProcessSingleCodeLength(code_len, &h->symbol, &h->repeat, &h->space,\n          &h->prev_code_len, h->symbol_lists, h->code_length_histo,\n          h->next_symbol);\n    } else {  /* code_len == 16..17, extra_bits == 2..3 */\n      brotli_reg_t extra_bits = code_len - 14U;\n      brotli_reg_t repeat_delta = (bits >> BROTLI_HC_FAST_LOAD_BITS(p)) &\n          BitMask(extra_bits);\n      if (available_bits < BROTLI_HC_FAST_LOAD_BITS(p) + extra_bits) {\n        get_byte = BROTLI_TRUE;\n        continue;\n      }\n      BrotliDropBits(br, BROTLI_HC_FAST_LOAD_BITS(p) + extra_bits);\n      ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size,\n          &h->symbol, &h->repeat, &h->space, &h->prev_code_len,\n          &h->repeat_code_len, h->symbol_lists, h->code_length_histo,\n          h->next_symbol);\n    }\n  }\n  return BROTLI_DECODER_SUCCESS;\n}\n\n/* Reads and decodes 15..18 codes using static prefix code.\n   Each code is 2..4 bits long. In total 30..72 bits are used. */\nstatic BrotliDecoderErrorCode ReadCodeLengthCodeLengths(BrotliDecoderState* s) {\n  BrotliBitReader* br = &s->br;\n  BrotliMetablockHeaderArena* h = &s->arena.header;\n  brotli_reg_t num_codes = h->repeat;\n  brotli_reg_t space = h->space;\n  brotli_reg_t i = h->sub_loop_counter;\n  for (; i < BROTLI_CODE_LENGTH_CODES; ++i) {\n    const uint8_t code_len_idx = kCodeLengthCodeOrder[i];\n    brotli_reg_t ix;\n    brotli_reg_t v;\n    if (BROTLI_PREDICT_FALSE(!BrotliSafeGetBits(br, 4, &ix))) {\n      brotli_reg_t available_bits = BrotliGetAvailableBits(br);\n      if (available_bits != 0) {\n        ix = BrotliGetBitsUnmasked(br) & 0xF;\n      } else {\n        ix = 0;\n      }\n      if (kCodeLengthPrefixLength[ix] > available_bits) {\n        h->sub_loop_counter = i;\n        h->repeat = num_codes;\n        h->space = space;\n        h->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX;\n        return BROTLI_DECODER_NEEDS_MORE_INPUT;\n      }\n    }\n    v = kCodeLengthPrefixValue[ix];\n    BrotliDropBits(br, kCodeLengthPrefixLength[ix]);\n    h->code_length_code_lengths[code_len_idx] = (uint8_t)v;\n    BROTLI_LOG_ARRAY_INDEX(h->code_length_code_lengths, code_len_idx);\n    if (v != 0) {\n      space = space - (32U >> v);\n      ++num_codes;\n      ++h->code_length_histo[v];\n      if (space - 1U >= 32U) {\n        /* space is 0 or wrapped around. */\n        break;\n      }\n    }\n  }\n  if (!(num_codes == 1 || space == 0)) {\n    return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CL_SPACE);\n  }\n  return BROTLI_DECODER_SUCCESS;\n}\n\n/* Decodes the Huffman tables.\n   There are 2 scenarios:\n    A) Huffman code contains only few symbols (1..4). Those symbols are read\n       directly; their code lengths are defined by the number of symbols.\n       For this scenario 4 - 49 bits will be read.\n\n    B) 2-phase decoding:\n    B.1) Small Huffman table is decoded; it is specified with code lengths\n         encoded with predefined entropy code. 32 - 74 bits are used.\n    B.2) Decoded table is used to decode code lengths of symbols in resulting\n         Huffman table. In worst case 3520 bits are read. */\nstatic BrotliDecoderErrorCode ReadHuffmanCode(brotli_reg_t alphabet_size_max,\n                                              brotli_reg_t alphabet_size_limit,\n                                              HuffmanCode* table,\n                                              brotli_reg_t* opt_table_size,\n                                              BrotliDecoderState* s) {\n  BrotliBitReader* br = &s->br;\n  BrotliMetablockHeaderArena* h = &s->arena.header;\n  /* State machine. */\n  for (;;) {\n    switch (h->substate_huffman) {\n      case BROTLI_STATE_HUFFMAN_NONE:\n        if (!BrotliSafeReadBits(br, 2, &h->sub_loop_counter)) {\n          return BROTLI_DECODER_NEEDS_MORE_INPUT;\n        }\n        BROTLI_LOG_UINT(h->sub_loop_counter);\n        /* The value is used as follows:\n           1 for simple code;\n           0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */\n        if (h->sub_loop_counter != 1) {\n          h->space = 32;\n          h->repeat = 0;  /* num_codes */\n          memset(&h->code_length_histo[0], 0, sizeof(h->code_length_histo[0]) *\n              (BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1));\n          memset(&h->code_length_code_lengths[0], 0,\n              sizeof(h->code_length_code_lengths));\n          h->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX;\n          continue;\n        }\n      /* Fall through. */\n\n      case BROTLI_STATE_HUFFMAN_SIMPLE_SIZE:\n        /* Read symbols, codes & code lengths directly. */\n        if (!BrotliSafeReadBits(br, 2, &h->symbol)) {  /* num_symbols */\n          h->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_SIZE;\n          return BROTLI_DECODER_NEEDS_MORE_INPUT;\n        }\n        h->sub_loop_counter = 0;\n      /* Fall through. */\n\n      case BROTLI_STATE_HUFFMAN_SIMPLE_READ: {\n        BrotliDecoderErrorCode result =\n            ReadSimpleHuffmanSymbols(alphabet_size_max, alphabet_size_limit, s);\n        if (result != BROTLI_DECODER_SUCCESS) {\n          return result;\n        }\n      }\n      /* Fall through. */\n\n      case BROTLI_STATE_HUFFMAN_SIMPLE_BUILD: {\n        brotli_reg_t table_size;\n        if (h->symbol == 3) {\n          brotli_reg_t bits;\n          if (!BrotliSafeReadBits(br, 1, &bits)) {\n            h->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_BUILD;\n            return BROTLI_DECODER_NEEDS_MORE_INPUT;\n          }\n          h->symbol += bits;\n        }\n        BROTLI_LOG_UINT(h->symbol);\n        table_size = BrotliBuildSimpleHuffmanTable(table, HUFFMAN_TABLE_BITS,\n                                                   h->symbols_lists_array,\n                                                   (uint32_t)h->symbol);\n        if (opt_table_size) {\n          *opt_table_size = table_size;\n        }\n        h->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;\n        return BROTLI_DECODER_SUCCESS;\n      }\n\n      /* Decode Huffman-coded code lengths. */\n      case BROTLI_STATE_HUFFMAN_COMPLEX: {\n        brotli_reg_t i;\n        BrotliDecoderErrorCode result = ReadCodeLengthCodeLengths(s);\n        if (result != BROTLI_DECODER_SUCCESS) {\n          return result;\n        }\n        BrotliBuildCodeLengthsHuffmanTable(h->table,\n                                           h->code_length_code_lengths,\n                                           h->code_length_histo);\n        memset(&h->code_length_histo[0], 0, sizeof(h->code_length_histo));\n        for (i = 0; i <= BROTLI_HUFFMAN_MAX_CODE_LENGTH; ++i) {\n          h->next_symbol[i] = (int)i - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);\n          h->symbol_lists[h->next_symbol[i]] = 0xFFFF;\n        }\n\n        h->symbol = 0;\n        h->prev_code_len = BROTLI_INITIAL_REPEATED_CODE_LENGTH;\n        h->repeat = 0;\n        h->repeat_code_len = 0;\n        h->space = 32768;\n        h->substate_huffman = BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS;\n      }\n      /* Fall through. */\n\n      case BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS: {\n        brotli_reg_t table_size;\n        BrotliDecoderErrorCode result = ReadSymbolCodeLengths(\n            alphabet_size_limit, s);\n        if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {\n          result = SafeReadSymbolCodeLengths(alphabet_size_limit, s);\n        }\n        if (result != BROTLI_DECODER_SUCCESS) {\n          return result;\n        }\n\n        if (h->space != 0) {\n          BROTLI_LOG((\"[ReadHuffmanCode] space = %d\\n\", (int)h->space));\n          return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE);\n        }\n        table_size = BrotliBuildHuffmanTable(\n            table, HUFFMAN_TABLE_BITS, h->symbol_lists, h->code_length_histo);\n        if (opt_table_size) {\n          *opt_table_size = table_size;\n        }\n        h->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;\n        return BROTLI_DECODER_SUCCESS;\n      }\n\n      default:\n        return\n            BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);  /* COV_NF_LINE */\n    }\n  }\n}\n\n/* Decodes a block length by reading 3..39 bits. */\nstatic BROTLI_INLINE brotli_reg_t ReadBlockLength(const HuffmanCode* table,\n                                                  BrotliBitReader* br) {\n  brotli_reg_t code;\n  brotli_reg_t nbits;\n  code = ReadSymbol(table, br);\n  nbits = _kBrotliPrefixCodeRanges[code].nbits;  /* nbits == 2..24 */\n  return _kBrotliPrefixCodeRanges[code].offset + BrotliReadBits24(br, nbits);\n}\n\n/* WARNING: if state is not BROTLI_STATE_READ_BLOCK_LENGTH_NONE, then\n   reading can't be continued with ReadBlockLength. */\nstatic BROTLI_INLINE BROTLI_BOOL SafeReadBlockLength(\n    BrotliDecoderState* s, brotli_reg_t* result, const HuffmanCode* table,\n    BrotliBitReader* br) {\n  brotli_reg_t index;\n  if (s->substate_read_block_length == BROTLI_STATE_READ_BLOCK_LENGTH_NONE) {\n    if (!SafeReadSymbol(table, br, &index)) {\n      return BROTLI_FALSE;\n    }\n  } else {\n    index = s->block_length_index;\n  }\n  {\n    brotli_reg_t bits;\n    brotli_reg_t nbits = _kBrotliPrefixCodeRanges[index].nbits;\n    brotli_reg_t offset = _kBrotliPrefixCodeRanges[index].offset;\n    if (!BrotliSafeReadBits(br, nbits, &bits)) {\n      s->block_length_index = index;\n      s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX;\n      return BROTLI_FALSE;\n    }\n    *result = offset + bits;\n    s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;\n    return BROTLI_TRUE;\n  }\n}\n\n/* Transform:\n    1) initialize list L with values 0, 1,... 255\n    2) For each input element X:\n    2.1) let Y = L[X]\n    2.2) remove X-th element from L\n    2.3) prepend Y to L\n    2.4) append Y to output\n\n   In most cases max(Y) <= 7, so most of L remains intact.\n   To reduce the cost of initialization, we reuse L, remember the upper bound\n   of Y values, and reinitialize only first elements in L.\n\n   Most of input values are 0 and 1. To reduce number of branches, we replace\n   inner for loop with do-while. */\nstatic BROTLI_NOINLINE void InverseMoveToFrontTransform(\n    uint8_t* v, brotli_reg_t v_len, BrotliDecoderState* state) {\n  /* Reinitialize elements that could have been changed. */\n  brotli_reg_t i = 1;\n  brotli_reg_t upper_bound = state->mtf_upper_bound;\n  uint32_t* mtf = &state->mtf[1];  /* Make mtf[-1] addressable. */\n  uint8_t* mtf_u8 = (uint8_t*)mtf;\n  /* Load endian-aware constant. */\n  const uint8_t b0123[4] = {0, 1, 2, 3};\n  uint32_t pattern;\n  memcpy(&pattern, &b0123, 4);\n\n  /* Initialize list using 4 consequent values pattern. */\n  mtf[0] = pattern;\n  do {\n    pattern += 0x04040404;  /* Advance all 4 values by 4. */\n    mtf[i] = pattern;\n    i++;\n  } while (i <= upper_bound);\n\n  /* Transform the input. */\n  upper_bound = 0;\n  for (i = 0; i < v_len; ++i) {\n    int index = v[i];\n    uint8_t value = mtf_u8[index];\n    upper_bound |= v[i];\n    v[i] = value;\n    mtf_u8[-1] = value;\n    do {\n      index--;\n      mtf_u8[index + 1] = mtf_u8[index];\n    } while (index >= 0);\n  }\n  /* Remember amount of elements to be reinitialized. */\n  state->mtf_upper_bound = upper_bound >> 2;\n}\n\n/* Decodes a series of Huffman table using ReadHuffmanCode function. */\nstatic BrotliDecoderErrorCode HuffmanTreeGroupDecode(\n    HuffmanTreeGroup* group, BrotliDecoderState* s) {\n  BrotliMetablockHeaderArena* h = &s->arena.header;\n  if (h->substate_tree_group != BROTLI_STATE_TREE_GROUP_LOOP) {\n    h->next = group->codes;\n    h->htree_index = 0;\n    h->substate_tree_group = BROTLI_STATE_TREE_GROUP_LOOP;\n  }\n  while (h->htree_index < group->num_htrees) {\n    brotli_reg_t table_size;\n    BrotliDecoderErrorCode result = ReadHuffmanCode(group->alphabet_size_max,\n        group->alphabet_size_limit, h->next, &table_size, s);\n    if (result != BROTLI_DECODER_SUCCESS) return result;\n    group->htrees[h->htree_index] = h->next;\n    h->next += table_size;\n    ++h->htree_index;\n  }\n  h->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE;\n  return BROTLI_DECODER_SUCCESS;\n}\n\n/* Decodes a context map.\n   Decoding is done in 4 phases:\n    1) Read auxiliary information (6..16 bits) and allocate memory.\n       In case of trivial context map, decoding is finished at this phase.\n    2) Decode Huffman table using ReadHuffmanCode function.\n       This table will be used for reading context map items.\n    3) Read context map items; \"0\" values could be run-length encoded.\n    4) Optionally, apply InverseMoveToFront transform to the resulting map. */\nstatic BrotliDecoderErrorCode DecodeContextMap(brotli_reg_t context_map_size,\n                                               brotli_reg_t* num_htrees,\n                                               uint8_t** context_map_arg,\n                                               BrotliDecoderState* s) {\n  BrotliBitReader* br = &s->br;\n  BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;\n  BrotliMetablockHeaderArena* h = &s->arena.header;\n\n  switch ((int)h->substate_context_map) {\n    case BROTLI_STATE_CONTEXT_MAP_NONE:\n      result = DecodeVarLenUint8(s, br, num_htrees);\n      if (result != BROTLI_DECODER_SUCCESS) {\n        return result;\n      }\n      (*num_htrees)++;\n      h->context_index = 0;\n      BROTLI_LOG_UINT(context_map_size);\n      BROTLI_LOG_UINT(*num_htrees);\n      *context_map_arg =\n          (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)context_map_size);\n      if (*context_map_arg == 0) {\n        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP);\n      }\n      if (*num_htrees <= 1) {\n        memset(*context_map_arg, 0, (size_t)context_map_size);\n        return BROTLI_DECODER_SUCCESS;\n      }\n      h->substate_context_map = BROTLI_STATE_CONTEXT_MAP_READ_PREFIX;\n    /* Fall through. */\n\n    case BROTLI_STATE_CONTEXT_MAP_READ_PREFIX: {\n      brotli_reg_t bits;\n      /* In next stage ReadHuffmanCode uses at least 4 bits, so it is safe\n         to peek 4 bits ahead. */\n      if (!BrotliSafeGetBits(br, 5, &bits)) {\n        return BROTLI_DECODER_NEEDS_MORE_INPUT;\n      }\n      if ((bits & 1) != 0) { /* Use RLE for zeros. */\n        h->max_run_length_prefix = (bits >> 1) + 1;\n        BrotliDropBits(br, 5);\n      } else {\n        h->max_run_length_prefix = 0;\n        BrotliDropBits(br, 1);\n      }\n      BROTLI_LOG_UINT(h->max_run_length_prefix);\n      h->substate_context_map = BROTLI_STATE_CONTEXT_MAP_HUFFMAN;\n    }\n    /* Fall through. */\n\n    case BROTLI_STATE_CONTEXT_MAP_HUFFMAN: {\n      brotli_reg_t alphabet_size = *num_htrees + h->max_run_length_prefix;\n      result = ReadHuffmanCode(alphabet_size, alphabet_size,\n                               h->context_map_table, NULL, s);\n      if (result != BROTLI_DECODER_SUCCESS) return result;\n      h->code = 0xFFFF;\n      h->substate_context_map = BROTLI_STATE_CONTEXT_MAP_DECODE;\n    }\n    /* Fall through. */\n\n    case BROTLI_STATE_CONTEXT_MAP_DECODE: {\n      brotli_reg_t context_index = h->context_index;\n      brotli_reg_t max_run_length_prefix = h->max_run_length_prefix;\n      uint8_t* context_map = *context_map_arg;\n      brotli_reg_t code = h->code;\n      BROTLI_BOOL skip_preamble = (code != 0xFFFF);\n      while (context_index < context_map_size || skip_preamble) {\n        if (!skip_preamble) {\n          if (!SafeReadSymbol(h->context_map_table, br, &code)) {\n            h->code = 0xFFFF;\n            h->context_index = context_index;\n            return BROTLI_DECODER_NEEDS_MORE_INPUT;\n          }\n          BROTLI_LOG_UINT(code);\n\n          if (code == 0) {\n            context_map[context_index++] = 0;\n            continue;\n          }\n          if (code > max_run_length_prefix) {\n            context_map[context_index++] =\n                (uint8_t)(code - max_run_length_prefix);\n            continue;\n          }\n        } else {\n          skip_preamble = BROTLI_FALSE;\n        }\n        /* RLE sub-stage. */\n        {\n          brotli_reg_t reps;\n          if (!BrotliSafeReadBits(br, code, &reps)) {\n            h->code = code;\n            h->context_index = context_index;\n            return BROTLI_DECODER_NEEDS_MORE_INPUT;\n          }\n          reps += (brotli_reg_t)1U << code;\n          BROTLI_LOG_UINT(reps);\n          if (context_index + reps > context_map_size) {\n            return\n                BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT);\n          }\n          do {\n            context_map[context_index++] = 0;\n          } while (--reps);\n        }\n      }\n    }\n    /* Fall through. */\n\n    case BROTLI_STATE_CONTEXT_MAP_TRANSFORM: {\n      brotli_reg_t bits;\n      if (!BrotliSafeReadBits(br, 1, &bits)) {\n        h->substate_context_map = BROTLI_STATE_CONTEXT_MAP_TRANSFORM;\n        return BROTLI_DECODER_NEEDS_MORE_INPUT;\n      }\n      if (bits != 0) {\n        InverseMoveToFrontTransform(*context_map_arg, context_map_size, s);\n      }\n      h->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE;\n      return BROTLI_DECODER_SUCCESS;\n    }\n\n    default:\n      return\n          BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);  /* COV_NF_LINE */\n  }\n}\n\n/* Decodes a command or literal and updates block type ring-buffer.\n   Reads 3..54 bits. */\nstatic BROTLI_INLINE BrotliDecoderErrorCode DecodeBlockTypeAndLength(\n    int safe, BrotliDecoderState* s, int tree_type) {\n  brotli_reg_t max_block_type = s->num_block_types[tree_type];\n  const HuffmanCode* type_tree = &s->block_type_trees[\n      tree_type * BROTLI_HUFFMAN_MAX_SIZE_258];\n  const HuffmanCode* len_tree = &s->block_len_trees[\n      tree_type * BROTLI_HUFFMAN_MAX_SIZE_26];\n  BrotliBitReader* br = &s->br;\n  brotli_reg_t* ringbuffer = &s->block_type_rb[tree_type * 2];\n  brotli_reg_t block_type;\n  if (max_block_type <= 1) {\n    return BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH;\n  }\n\n  /* Read 0..15 + 3..39 bits. */\n  if (!safe) {\n    block_type = ReadSymbol(type_tree, br);\n    s->block_length[tree_type] = ReadBlockLength(len_tree, br);\n  } else {\n    BrotliBitReaderState memento;\n    BrotliBitReaderSaveState(br, &memento);\n    if (!SafeReadSymbol(type_tree, br, &block_type)) {\n      return BROTLI_DECODER_NEEDS_MORE_INPUT;\n    }\n    if (!SafeReadBlockLength(s, &s->block_length[tree_type], len_tree, br)) {\n      s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;\n      BrotliBitReaderRestoreState(br, &memento);\n      return BROTLI_DECODER_NEEDS_MORE_INPUT;\n    }\n  }\n\n  if (block_type == 1) {\n    block_type = ringbuffer[1] + 1;\n  } else if (block_type == 0) {\n    block_type = ringbuffer[0];\n  } else {\n    block_type -= 2;\n  }\n  if (block_type >= max_block_type) {\n    block_type -= max_block_type;\n  }\n  ringbuffer[0] = ringbuffer[1];\n  ringbuffer[1] = block_type;\n  return BROTLI_DECODER_SUCCESS;\n}\n\nstatic BROTLI_INLINE void DetectTrivialLiteralBlockTypes(\n    BrotliDecoderState* s) {\n  size_t i;\n  for (i = 0; i < 8; ++i) s->trivial_literal_contexts[i] = 0;\n  for (i = 0; i < s->num_block_types[0]; i++) {\n    size_t offset = i << BROTLI_LITERAL_CONTEXT_BITS;\n    size_t error = 0;\n    size_t sample = s->context_map[offset];\n    size_t j;\n    for (j = 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS);) {\n      /* NOLINTNEXTLINE(bugprone-macro-repeated-side-effects) */\n      BROTLI_REPEAT_4({ error |= s->context_map[offset + j++] ^ sample; })\n    }\n    if (error == 0) {\n      s->trivial_literal_contexts[i >> 5] |= 1u << (i & 31);\n    }\n  }\n}\n\nstatic BROTLI_INLINE void PrepareLiteralDecoding(BrotliDecoderState* s) {\n  uint8_t context_mode;\n  size_t trivial;\n  brotli_reg_t block_type = s->block_type_rb[1];\n  brotli_reg_t context_offset = block_type << BROTLI_LITERAL_CONTEXT_BITS;\n  s->context_map_slice = s->context_map + context_offset;\n  trivial = s->trivial_literal_contexts[block_type >> 5];\n  s->trivial_literal_context = (trivial >> (block_type & 31)) & 1;\n  s->literal_htree = s->literal_hgroup.htrees[s->context_map_slice[0]];\n  context_mode = s->context_modes[block_type] & 3;\n  s->context_lookup = BROTLI_CONTEXT_LUT(context_mode);\n}\n\n/* Decodes the block type and updates the state for literal context.\n   Reads 3..54 bits. */\nstatic BROTLI_INLINE BrotliDecoderErrorCode DecodeLiteralBlockSwitchInternal(\n    int safe, BrotliDecoderState* s) {\n  BrotliDecoderErrorCode result = DecodeBlockTypeAndLength(safe, s, 0);\n  if (result != BROTLI_DECODER_SUCCESS) {\n    return result;\n  }\n  PrepareLiteralDecoding(s);\n  return BROTLI_DECODER_SUCCESS;\n}\n\nstatic BROTLI_NOINLINE BrotliDecoderErrorCode\nDecodeLiteralBlockSwitch(BrotliDecoderState* s) {\n  return DecodeLiteralBlockSwitchInternal(0, s);\n}\n\nstatic BROTLI_NOINLINE BrotliDecoderErrorCode SafeDecodeLiteralBlockSwitch(\n    BrotliDecoderState* s) {\n  return DecodeLiteralBlockSwitchInternal(1, s);\n}\n\n/* Block switch for insert/copy length.\n   Reads 3..54 bits. */\nstatic BROTLI_INLINE BrotliDecoderErrorCode DecodeCommandBlockSwitchInternal(\n    int safe, BrotliDecoderState* s) {\n  BrotliDecoderErrorCode result = DecodeBlockTypeAndLength(safe, s, 1);\n  if (result != BROTLI_DECODER_SUCCESS) {\n    return result;\n  }\n  s->htree_command = s->insert_copy_hgroup.htrees[s->block_type_rb[3]];\n  return BROTLI_DECODER_SUCCESS;\n}\n\nstatic BROTLI_NOINLINE BrotliDecoderErrorCode\nDecodeCommandBlockSwitch(BrotliDecoderState* s) {\n  return DecodeCommandBlockSwitchInternal(0, s);\n}\n\nstatic BROTLI_NOINLINE BrotliDecoderErrorCode\nSafeDecodeCommandBlockSwitch(BrotliDecoderState* s) {\n  return DecodeCommandBlockSwitchInternal(1, s);\n}\n\n/* Block switch for distance codes.\n   Reads 3..54 bits. */\nstatic BROTLI_INLINE BrotliDecoderErrorCode DecodeDistanceBlockSwitchInternal(\n    int safe, BrotliDecoderState* s) {\n  BrotliDecoderErrorCode result = DecodeBlockTypeAndLength(safe, s, 2);\n  if (result != BROTLI_DECODER_SUCCESS) {\n    return result;\n  }\n  s->dist_context_map_slice = s->dist_context_map +\n      (s->block_type_rb[5] << BROTLI_DISTANCE_CONTEXT_BITS);\n  s->dist_htree_index = s->dist_context_map_slice[s->distance_context];\n  return BROTLI_DECODER_SUCCESS;\n}\n\nstatic BROTLI_NOINLINE BrotliDecoderErrorCode\nDecodeDistanceBlockSwitch(BrotliDecoderState* s) {\n  return DecodeDistanceBlockSwitchInternal(0, s);\n}\n\nstatic BROTLI_BOOL BROTLI_NOINLINE SafeDecodeDistanceBlockSwitch(\n    BrotliDecoderState* s) {\n  return DecodeDistanceBlockSwitchInternal(1, s);\n}\n\nstatic size_t UnwrittenBytes(const BrotliDecoderState* s, BROTLI_BOOL wrap) {\n  size_t pos = wrap && s->pos > s->ringbuffer_size ?\n      (size_t)s->ringbuffer_size : (size_t)(s->pos);\n  size_t partial_pos_rb = (s->rb_roundtrips * (size_t)s->ringbuffer_size) + pos;\n  return partial_pos_rb - s->partial_pos_out;\n}\n\n/* Dumps output.\n   Returns BROTLI_DECODER_NEEDS_MORE_OUTPUT only if there is more output to push\n   and either ring-buffer is as big as window size, or |force| is true. */\nstatic BrotliDecoderErrorCode BROTLI_NOINLINE WriteRingBuffer(\n    BrotliDecoderState* s, size_t* available_out, uint8_t** next_out,\n    size_t* total_out, BROTLI_BOOL force) {\n  uint8_t* start =\n      s->ringbuffer + (s->partial_pos_out & (size_t)s->ringbuffer_mask);\n  size_t to_write = UnwrittenBytes(s, BROTLI_TRUE);\n  size_t num_written = *available_out;\n  if (num_written > to_write) {\n    num_written = to_write;\n  }\n  if (s->meta_block_remaining_len < 0) {\n    return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1);\n  }\n  if (next_out && !*next_out) {\n    *next_out = start;\n  } else {\n    if (next_out) {\n      memcpy(*next_out, start, num_written);\n      *next_out += num_written;\n    }\n  }\n  *available_out -= num_written;\n  BROTLI_LOG_UINT(to_write);\n  BROTLI_LOG_UINT(num_written);\n  s->partial_pos_out += num_written;\n  if (total_out) {\n    *total_out = s->partial_pos_out;\n  }\n  if (num_written < to_write) {\n    if (s->ringbuffer_size == (1 << s->window_bits) || force) {\n      return BROTLI_DECODER_NEEDS_MORE_OUTPUT;\n    } else {\n      return BROTLI_DECODER_SUCCESS;\n    }\n  }\n  /* Wrap ring buffer only if it has reached its maximal size. */\n  if (s->ringbuffer_size == (1 << s->window_bits) &&\n      s->pos >= s->ringbuffer_size) {\n    s->pos -= s->ringbuffer_size;\n    s->rb_roundtrips++;\n    s->should_wrap_ringbuffer = (size_t)s->pos != 0 ? 1 : 0;\n  }\n  return BROTLI_DECODER_SUCCESS;\n}\n\nstatic void BROTLI_NOINLINE WrapRingBuffer(BrotliDecoderState* s) {\n  if (s->should_wrap_ringbuffer) {\n    memcpy(s->ringbuffer, s->ringbuffer_end, (size_t)s->pos);\n    s->should_wrap_ringbuffer = 0;\n  }\n}\n\n/* Allocates ring-buffer.\n\n   s->ringbuffer_size MUST be updated by BrotliCalculateRingBufferSize before\n   this function is called.\n\n   Last two bytes of ring-buffer are initialized to 0, so context calculation\n   could be done uniformly for the first two and all other positions. */\nstatic BROTLI_BOOL BROTLI_NOINLINE BrotliEnsureRingBuffer(\n    BrotliDecoderState* s) {\n  uint8_t* old_ringbuffer = s->ringbuffer;\n  if (s->ringbuffer_size == s->new_ringbuffer_size) {\n    return BROTLI_TRUE;\n  }\n\n  s->ringbuffer = (uint8_t*)BROTLI_DECODER_ALLOC(s,\n      (size_t)(s->new_ringbuffer_size) + kRingBufferWriteAheadSlack);\n  if (s->ringbuffer == 0) {\n    /* Restore previous value. */\n    s->ringbuffer = old_ringbuffer;\n    return BROTLI_FALSE;\n  }\n  s->ringbuffer[s->new_ringbuffer_size - 2] = 0;\n  s->ringbuffer[s->new_ringbuffer_size - 1] = 0;\n\n  if (!!old_ringbuffer) {\n    memcpy(s->ringbuffer, old_ringbuffer, (size_t)s->pos);\n    BROTLI_DECODER_FREE(s, old_ringbuffer);\n  }\n\n  s->ringbuffer_size = s->new_ringbuffer_size;\n  s->ringbuffer_mask = s->new_ringbuffer_size - 1;\n  s->ringbuffer_end = s->ringbuffer + s->ringbuffer_size;\n\n  return BROTLI_TRUE;\n}\n\nstatic BrotliDecoderErrorCode BROTLI_NOINLINE\nSkipMetadataBlock(BrotliDecoderState* s) {\n  BrotliBitReader* br = &s->br;\n  int nbytes;\n\n  if (s->meta_block_remaining_len == 0) {\n    return BROTLI_DECODER_SUCCESS;\n  }\n\n  BROTLI_DCHECK((BrotliGetAvailableBits(br) & 7) == 0);\n\n  /* Drain accumulator. */\n  if (BrotliGetAvailableBits(br) >= 8) {\n    uint8_t buffer[8];\n    nbytes = (int)(BrotliGetAvailableBits(br)) >> 3;\n    BROTLI_DCHECK(nbytes <= 8);\n    if (nbytes > s->meta_block_remaining_len) {\n      nbytes = s->meta_block_remaining_len;\n    }\n    BrotliCopyBytes(buffer, br, (size_t)nbytes);\n    if (s->metadata_chunk_func) {\n      s->metadata_chunk_func(s->metadata_callback_opaque, buffer,\n                             (size_t)nbytes);\n    }\n    s->meta_block_remaining_len -= nbytes;\n    if (s->meta_block_remaining_len == 0) {\n      return BROTLI_DECODER_SUCCESS;\n    }\n  }\n\n  /* Direct access to metadata is possible. */\n  nbytes = (int)BrotliGetRemainingBytes(br);\n  if (nbytes > s->meta_block_remaining_len) {\n    nbytes = s->meta_block_remaining_len;\n  }\n  if (nbytes > 0) {\n    if (s->metadata_chunk_func) {\n      s->metadata_chunk_func(s->metadata_callback_opaque, br->next_in,\n                             (size_t)nbytes);\n    }\n    BrotliDropBytes(br, (size_t)nbytes);\n    s->meta_block_remaining_len -= nbytes;\n    if (s->meta_block_remaining_len == 0) {\n      return BROTLI_DECODER_SUCCESS;\n    }\n  }\n\n  BROTLI_DCHECK(BrotliGetRemainingBytes(br) == 0);\n\n  return BROTLI_DECODER_NEEDS_MORE_INPUT;\n}\n\nstatic BrotliDecoderErrorCode BROTLI_NOINLINE CopyUncompressedBlockToOutput(\n    size_t* available_out, uint8_t** next_out, size_t* total_out,\n    BrotliDecoderState* s) {\n  /* TODO(eustas): avoid allocation for single uncompressed block. */\n  if (!BrotliEnsureRingBuffer(s)) {\n    return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1);\n  }\n\n  /* State machine */\n  for (;;) {\n    switch (s->substate_uncompressed) {\n      case BROTLI_STATE_UNCOMPRESSED_NONE: {\n        int nbytes = (int)BrotliGetRemainingBytes(&s->br);\n        if (nbytes > s->meta_block_remaining_len) {\n          nbytes = s->meta_block_remaining_len;\n        }\n        if (s->pos + nbytes > s->ringbuffer_size) {\n          nbytes = s->ringbuffer_size - s->pos;\n        }\n        /* Copy remaining bytes from s->br.buf_ to ring-buffer. */\n        BrotliCopyBytes(&s->ringbuffer[s->pos], &s->br, (size_t)nbytes);\n        s->pos += nbytes;\n        s->meta_block_remaining_len -= nbytes;\n        if (s->pos < 1 << s->window_bits) {\n          if (s->meta_block_remaining_len == 0) {\n            return BROTLI_DECODER_SUCCESS;\n          }\n          return BROTLI_DECODER_NEEDS_MORE_INPUT;\n        }\n        s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_WRITE;\n      }\n      /* Fall through. */\n\n      case BROTLI_STATE_UNCOMPRESSED_WRITE: {\n        BrotliDecoderErrorCode result;\n        result = WriteRingBuffer(\n            s, available_out, next_out, total_out, BROTLI_FALSE);\n        if (result != BROTLI_DECODER_SUCCESS) {\n          return result;\n        }\n        if (s->ringbuffer_size == 1 << s->window_bits) {\n          s->max_distance = s->max_backward_distance;\n        }\n        s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_NONE;\n        break;\n      }\n    }\n  }\n  BROTLI_DCHECK(0);  /* Unreachable */\n}\n\nstatic BROTLI_BOOL AttachCompoundDictionary(\n    BrotliDecoderState* state, const uint8_t* data, size_t size) {\n  BrotliDecoderCompoundDictionary* addon = state->compound_dictionary;\n  if (state->state != BROTLI_STATE_UNINITED) return BROTLI_FALSE;\n  if (!addon) {\n    addon = (BrotliDecoderCompoundDictionary*)BROTLI_DECODER_ALLOC(\n        state, sizeof(BrotliDecoderCompoundDictionary));\n    if (!addon) return BROTLI_FALSE;\n    addon->num_chunks = 0;\n    addon->total_size = 0;\n    addon->br_length = 0;\n    addon->br_copied = 0;\n    addon->block_bits = -1;\n    addon->chunk_offsets[0] = 0;\n    state->compound_dictionary = addon;\n  }\n  if (addon->num_chunks == 15) return BROTLI_FALSE;\n  addon->chunks[addon->num_chunks] = data;\n  addon->num_chunks++;\n  addon->total_size += (int)size;\n  addon->chunk_offsets[addon->num_chunks] = addon->total_size;\n  return BROTLI_TRUE;\n}\n\nstatic void EnsureCompoundDictionaryInitialized(BrotliDecoderState* state) {\n  BrotliDecoderCompoundDictionary* addon = state->compound_dictionary;\n  /* 256 = (1 << 8) slots in block map. */\n  int block_bits = 8;\n  int cursor = 0;\n  int index = 0;\n  if (addon->block_bits != -1) return;\n  while (((addon->total_size - 1) >> block_bits) != 0) block_bits++;\n  block_bits -= 8;\n  addon->block_bits = block_bits;\n  while (cursor < addon->total_size) {\n    while (addon->chunk_offsets[index + 1] < cursor) index++;\n    addon->block_map[cursor >> block_bits] = (uint8_t)index;\n    cursor += 1 << block_bits;\n  }\n}\n\nstatic BROTLI_BOOL InitializeCompoundDictionaryCopy(BrotliDecoderState* s,\n    int address, int length) {\n  BrotliDecoderCompoundDictionary* addon = s->compound_dictionary;\n  int index;\n  EnsureCompoundDictionaryInitialized(s);\n  index = addon->block_map[address >> addon->block_bits];\n  while (address >= addon->chunk_offsets[index + 1]) index++;\n  if (addon->total_size < address + length) return BROTLI_FALSE;\n  /* Update the recent distances cache. */\n  s->dist_rb[s->dist_rb_idx & 3] = s->distance_code;\n  ++s->dist_rb_idx;\n  s->meta_block_remaining_len -= length;\n  addon->br_index = index;\n  addon->br_offset = address - addon->chunk_offsets[index];\n  addon->br_length = length;\n  addon->br_copied = 0;\n  return BROTLI_TRUE;\n}\n\nstatic int GetCompoundDictionarySize(BrotliDecoderState* s) {\n  return s->compound_dictionary ? s->compound_dictionary->total_size : 0;\n}\n\nstatic int CopyFromCompoundDictionary(BrotliDecoderState* s, int pos) {\n  BrotliDecoderCompoundDictionary* addon = s->compound_dictionary;\n  int orig_pos = pos;\n  while (addon->br_length != addon->br_copied) {\n    uint8_t* copy_dst = &s->ringbuffer[pos];\n    const uint8_t* copy_src =\n        addon->chunks[addon->br_index] + addon->br_offset;\n    int space = s->ringbuffer_size - pos;\n    int rem_chunk_length = (addon->chunk_offsets[addon->br_index + 1] -\n        addon->chunk_offsets[addon->br_index]) - addon->br_offset;\n    int length = addon->br_length - addon->br_copied;\n    if (length > rem_chunk_length) length = rem_chunk_length;\n    if (length > space) length = space;\n    memcpy(copy_dst, copy_src, (size_t)length);\n    pos += length;\n    addon->br_offset += length;\n    addon->br_copied += length;\n    if (length == rem_chunk_length) {\n      addon->br_index++;\n      addon->br_offset = 0;\n    }\n    if (pos == s->ringbuffer_size) break;\n  }\n  return pos - orig_pos;\n}\n\nBROTLI_BOOL BrotliDecoderAttachDictionary(\n    BrotliDecoderState* state, BrotliSharedDictionaryType type,\n    size_t data_size, const uint8_t data[BROTLI_ARRAY_PARAM(data_size)]) {\n  brotli_reg_t i;\n  brotli_reg_t num_prefix_before = state->dictionary->num_prefix;\n  if (state->state != BROTLI_STATE_UNINITED) return BROTLI_FALSE;\n  if (!BrotliSharedDictionaryAttach(state->dictionary, type, data_size, data)) {\n    return BROTLI_FALSE;\n  }\n  for (i = num_prefix_before; i < state->dictionary->num_prefix; i++) {\n    if (!AttachCompoundDictionary(\n        state, state->dictionary->prefix[i],\n        state->dictionary->prefix_size[i])) {\n      return BROTLI_FALSE;\n    }\n  }\n  return BROTLI_TRUE;\n}\n\n/* Calculates the smallest feasible ring buffer.\n\n   If we know the data size is small, do not allocate more ring buffer\n   size than needed to reduce memory usage.\n\n   When this method is called, metablock size and flags MUST be decoded. */\nstatic void BROTLI_NOINLINE BrotliCalculateRingBufferSize(\n    BrotliDecoderState* s) {\n  int window_size = 1 << s->window_bits;\n  int new_ringbuffer_size = window_size;\n  /* We need at least 2 bytes of ring buffer size to get the last two\n     bytes for context from there */\n  int min_size = s->ringbuffer_size ? s->ringbuffer_size : 1024;\n  int output_size;\n\n  /* If maximum is already reached, no further extension is retired. */\n  if (s->ringbuffer_size == window_size) {\n    return;\n  }\n\n  /* Metadata blocks does not touch ring buffer. */\n  if (s->is_metadata) {\n    return;\n  }\n\n  if (!s->ringbuffer) {\n    output_size = 0;\n  } else {\n    output_size = s->pos;\n  }\n  output_size += s->meta_block_remaining_len;\n  min_size = min_size < output_size ? output_size : min_size;\n\n  if (!!s->canny_ringbuffer_allocation) {\n    /* Reduce ring buffer size to save memory when server is unscrupulous.\n       In worst case memory usage might be 1.5x bigger for a short period of\n       ring buffer reallocation. */\n    while ((new_ringbuffer_size >> 1) >= min_size) {\n      new_ringbuffer_size >>= 1;\n    }\n  }\n\n  s->new_ringbuffer_size = new_ringbuffer_size;\n}\n\n/* Reads 1..256 2-bit context modes. */\nstatic BrotliDecoderErrorCode ReadContextModes(BrotliDecoderState* s) {\n  BrotliBitReader* br = &s->br;\n  int i = s->loop_counter;\n\n  while (i < (int)s->num_block_types[0]) {\n    brotli_reg_t bits;\n    if (!BrotliSafeReadBits(br, 2, &bits)) {\n      s->loop_counter = i;\n      return BROTLI_DECODER_NEEDS_MORE_INPUT;\n    }\n    s->context_modes[i] = (uint8_t)bits;\n    BROTLI_LOG_ARRAY_INDEX(s->context_modes, i);\n    i++;\n  }\n  return BROTLI_DECODER_SUCCESS;\n}\n\nstatic BROTLI_INLINE void TakeDistanceFromRingBuffer(BrotliDecoderState* s) {\n  int offset = s->distance_code - 3;\n  if (s->distance_code <= 3) {\n    /* Compensate double distance-ring-buffer roll for dictionary items. */\n    s->distance_context = 1 >> s->distance_code;\n    s->distance_code = s->dist_rb[(s->dist_rb_idx - offset) & 3];\n    s->dist_rb_idx -= s->distance_context;\n  } else {\n    int index_delta = 3;\n    int delta;\n    int base = s->distance_code - 10;\n    if (s->distance_code < 10) {\n      base = s->distance_code - 4;\n    } else {\n      index_delta = 2;\n    }\n    /* Unpack one of six 4-bit values. */\n    delta = ((0x605142 >> (4 * base)) & 0xF) - 3;\n    s->distance_code = s->dist_rb[(s->dist_rb_idx + index_delta) & 0x3] + delta;\n    if (s->distance_code <= 0) {\n      /* A huge distance will cause a BROTLI_FAILURE() soon.\n         This is a little faster than failing here. */\n      s->distance_code = 0x7FFFFFFF;\n    }\n  }\n}\n\nstatic BROTLI_INLINE BROTLI_BOOL SafeReadBits(\n    BrotliBitReader* const br, brotli_reg_t n_bits, brotli_reg_t* val) {\n  if (n_bits != 0) {\n    return BrotliSafeReadBits(br, n_bits, val);\n  } else {\n    *val = 0;\n    return BROTLI_TRUE;\n  }\n}\n\nstatic BROTLI_INLINE BROTLI_BOOL SafeReadBits32(\n    BrotliBitReader* const br, brotli_reg_t n_bits, brotli_reg_t* val) {\n  if (n_bits != 0) {\n    return BrotliSafeReadBits32(br, n_bits, val);\n  } else {\n    *val = 0;\n    return BROTLI_TRUE;\n  }\n}\n\n/*\n   RFC 7932 Section 4 with \"...\" shortenings and \"[]\" emendations.\n\n   Each distance ... is represented with a pair <distance code, extra bits>...\n   The distance code is encoded using a prefix code... The number of extra bits\n   can be 0..24... Two additional parameters: NPOSTFIX (0..3), and ...\n   NDIRECT (0..120) ... are encoded in the meta-block header...\n\n   The first 16 distance symbols ... reference past distances... ring buffer ...\n   Next NDIRECT distance symbols ... represent distances from 1 to NDIRECT...\n   [For] distance symbols 16 + NDIRECT and greater ... the number of extra bits\n   ... is given by the following formula:\n\n   [ xcode = dcode - NDIRECT - 16 ]\n   ndistbits = 1 + [ xcode ] >> (NPOSTFIX + 1)\n\n   ...\n*/\n\n/*\n   RFC 7932 Section 9.2 with \"...\" shortenings and \"[]\" emendations.\n\n   ... to get the actual value of the parameter NDIRECT, left-shift this\n   four-bit number by NPOSTFIX bits ...\n*/\n\n/* Remaining formulas from RFC 7932 Section 4 could be rewritten as following:\n\n     alphabet_size = 16 + NDIRECT + (max_distbits << (NPOSTFIX + 1))\n\n     half = ((xcode >> NPOSTFIX) & 1) << ndistbits\n     postfix = xcode & ((1 << NPOSTFIX) - 1)\n     range_start = 2 * (1 << ndistbits - 1 - 1)\n\n     distance = (range_start + half + extra) << NPOSTFIX + postfix + NDIRECT + 1\n\n   NB: ndistbits >= 1 -> range_start >= 0\n   NB: range_start has factor 2, as the range is covered by 2 \"halves\"\n   NB: extra -1 offset in range_start formula covers the absence of\n       ndistbits = 0 case\n   NB: when NPOSTFIX = 0, NDIRECT is not greater than 15\n\n   In other words, xcode has the following binary structure - XXXHPPP:\n    - XXX represent the number of extra distance bits\n    - H selects upper / lower range of distances\n    - PPP represent \"postfix\"\n\n  \"Regular\" distance encoding has NPOSTFIX = 0; omitting the postfix part\n  simplifies distance calculation.\n\n  Using NPOSTFIX > 0 allows cheaper encoding of regular structures, e.g. where\n  most of distances have the same reminder of division by 2/4/8. For example,\n  the table of int32_t values that come from different sources; if it is likely\n  that 3 highest bytes of values from the same source are the same, then\n  copy distance often looks like 4x + y.\n\n  Distance calculation could be rewritten to:\n\n    ndistbits = NDISTBITS(NDIRECT, NPOSTFIX)[dcode]\n    distance = OFFSET(NDIRECT, NPOSTFIX)[dcode] + extra << NPOSTFIX\n\n  NDISTBITS and OFFSET could be pre-calculated, as NDIRECT and NPOSTFIX could\n  change only once per meta-block.\n*/\n\n/* Calculates distance lookup table.\n   NB: it is possible to have all 64 tables precalculated. */\nstatic void CalculateDistanceLut(BrotliDecoderState* s) {\n  BrotliMetablockBodyArena* b = &s->arena.body;\n  brotli_reg_t npostfix = s->distance_postfix_bits;\n  brotli_reg_t ndirect = s->num_direct_distance_codes;\n  brotli_reg_t alphabet_size_limit = s->distance_hgroup.alphabet_size_limit;\n  brotli_reg_t postfix = (brotli_reg_t)1u << npostfix;\n  brotli_reg_t j;\n  brotli_reg_t bits = 1;\n  brotli_reg_t half = 0;\n\n  /* Skip short codes. */\n  brotli_reg_t i = BROTLI_NUM_DISTANCE_SHORT_CODES;\n\n  /* Fill direct codes. */\n  for (j = 0; j < ndirect; ++j) {\n    b->dist_extra_bits[i] = 0;\n    b->dist_offset[i] = j + 1;\n    ++i;\n  }\n\n  /* Fill regular distance codes. */\n  while (i < alphabet_size_limit) {\n    brotli_reg_t base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1;\n    /* Always fill the complete group. */\n    for (j = 0; j < postfix; ++j) {\n      b->dist_extra_bits[i] = (uint8_t)bits;\n      b->dist_offset[i] = base + j;\n      ++i;\n    }\n    bits = bits + half;\n    half = half ^ 1;\n  }\n}\n\n/* Precondition: s->distance_code < 0. */\nstatic BROTLI_INLINE BROTLI_BOOL ReadDistanceInternal(\n    int safe, BrotliDecoderState* s, BrotliBitReader* br) {\n  BrotliMetablockBodyArena* b = &s->arena.body;\n  brotli_reg_t code;\n  brotli_reg_t bits;\n  BrotliBitReaderState memento;\n  HuffmanCode* distance_tree = s->distance_hgroup.htrees[s->dist_htree_index];\n  if (!safe) {\n    code = ReadSymbol(distance_tree, br);\n  } else {\n    BrotliBitReaderSaveState(br, &memento);\n    if (!SafeReadSymbol(distance_tree, br, &code)) {\n      return BROTLI_FALSE;\n    }\n  }\n  --s->block_length[2];\n  /* Convert the distance code to the actual distance by possibly\n     looking up past distances from the s->dist_rb. */\n  s->distance_context = 0;\n  if ((code & ~0xFu) == 0) {\n    s->distance_code = (int)code;\n    TakeDistanceFromRingBuffer(s);\n    return BROTLI_TRUE;\n  }\n  if (!safe) {\n    bits = BrotliReadBits32(br, b->dist_extra_bits[code]);\n  } else {\n    if (!SafeReadBits32(br, b->dist_extra_bits[code], &bits)) {\n      ++s->block_length[2];\n      BrotliBitReaderRestoreState(br, &memento);\n      return BROTLI_FALSE;\n    }\n  }\n  s->distance_code =\n      (int)(b->dist_offset[code] + (bits << s->distance_postfix_bits));\n  return BROTLI_TRUE;\n}\n\nstatic BROTLI_INLINE void ReadDistance(\n    BrotliDecoderState* s, BrotliBitReader* br) {\n  ReadDistanceInternal(0, s, br);\n}\n\nstatic BROTLI_INLINE BROTLI_BOOL SafeReadDistance(\n    BrotliDecoderState* s, BrotliBitReader* br) {\n  return ReadDistanceInternal(1, s, br);\n}\n\nstatic BROTLI_INLINE BROTLI_BOOL ReadCommandInternal(\n    int safe, BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {\n  brotli_reg_t cmd_code;\n  brotli_reg_t insert_len_extra = 0;\n  brotli_reg_t copy_length;\n  CmdLutElement v;\n  BrotliBitReaderState memento;\n  if (!safe) {\n    cmd_code = ReadSymbol(s->htree_command, br);\n  } else {\n    BrotliBitReaderSaveState(br, &memento);\n    if (!SafeReadSymbol(s->htree_command, br, &cmd_code)) {\n      return BROTLI_FALSE;\n    }\n  }\n  v = kCmdLut[cmd_code];\n  s->distance_code = v.distance_code;\n  s->distance_context = v.context;\n  s->dist_htree_index = s->dist_context_map_slice[s->distance_context];\n  *insert_length = v.insert_len_offset;\n  if (!safe) {\n    if (BROTLI_PREDICT_FALSE(v.insert_len_extra_bits != 0)) {\n      insert_len_extra = BrotliReadBits24(br, v.insert_len_extra_bits);\n    }\n    copy_length = BrotliReadBits24(br, v.copy_len_extra_bits);\n  } else {\n    if (!SafeReadBits(br, v.insert_len_extra_bits, &insert_len_extra) ||\n        !SafeReadBits(br, v.copy_len_extra_bits, &copy_length)) {\n      BrotliBitReaderRestoreState(br, &memento);\n      return BROTLI_FALSE;\n    }\n  }\n  s->copy_length = (int)copy_length + v.copy_len_offset;\n  --s->block_length[1];\n  *insert_length += (int)insert_len_extra;\n  return BROTLI_TRUE;\n}\n\nstatic BROTLI_INLINE void ReadCommand(\n    BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {\n  ReadCommandInternal(0, s, br, insert_length);\n}\n\nstatic BROTLI_INLINE BROTLI_BOOL SafeReadCommand(\n    BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {\n  return ReadCommandInternal(1, s, br, insert_length);\n}\n\nstatic BROTLI_INLINE BROTLI_BOOL CheckInputAmount(\n    int safe, BrotliBitReader* const br) {\n  if (safe) {\n    return BROTLI_TRUE;\n  }\n  return BrotliCheckInputAmount(br);\n}\n\n/* NB: METHOD should return BROTLI_FALSE only in case there is not enough input;\n       in case of \"unsafe\" execution, when input is guaranteed to be sufficient,\n       result is ignored. */\n#define BROTLI_SAFE(METHOD)                       \\\n  {                                               \\\n    if (safe) {                                   \\\n      if (!Safe##METHOD) {                        \\\n        result = BROTLI_DECODER_NEEDS_MORE_INPUT; \\\n        goto saveStateAndReturn;                  \\\n      }                                           \\\n    } else {                                      \\\n      METHOD;                                     \\\n    }                                             \\\n  }\n\n/* NB: METHOD should return BROTLI_DECODER_SUCCESS, BROTLI_DECODER_ERROR_*, or\n   BROTLI_DECODER_NEEDS_MORE_INPUT; the later two break the processing. */\n#define BROTLI_SAFE_WITH_STATUS(METHOD)         \\\n  {                                             \\\n    BrotliDecoderErrorCode status;              \\\n    if (safe) {                                 \\\n      status = Safe##METHOD;                    \\\n    } else {                                    \\\n      status = METHOD;                          \\\n    }                                           \\\n    if (status != BROTLI_DECODER_SUCCESS) {     \\\n      result = status;                          \\\n      goto saveStateAndReturn;                  \\\n    }                                           \\\n  }\n\nstatic BROTLI_INLINE BrotliDecoderErrorCode ProcessCommandsInternal(\n    int safe, BrotliDecoderState* s) {\n  int pos = s->pos;\n  int i = s->loop_counter;\n  BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;\n  BrotliBitReader* br = &s->br;\n  int compound_dictionary_size = GetCompoundDictionarySize(s);\n\n  if (!CheckInputAmount(safe, br)) {\n    result = BROTLI_DECODER_NEEDS_MORE_INPUT;\n    goto saveStateAndReturn;\n  }\n  if (!safe) {\n    BROTLI_UNUSED(BrotliWarmupBitReader(br));\n  }\n\n  /* Jump into state machine. */\n  if (s->state == BROTLI_STATE_COMMAND_BEGIN) {\n    goto CommandBegin;\n  } else if (s->state == BROTLI_STATE_COMMAND_INNER) {\n    goto CommandInner;\n  } else if (s->state == BROTLI_STATE_COMMAND_POST_DECODE_LITERALS) {\n    goto CommandPostDecodeLiterals;\n  } else if (s->state == BROTLI_STATE_COMMAND_POST_WRAP_COPY) {\n    goto CommandPostWrapCopy;\n  } else {\n    return BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);  /* COV_NF_LINE */\n  }\n\nCommandBegin:\n  if (safe) {\n    s->state = BROTLI_STATE_COMMAND_BEGIN;\n  }\n  if (!CheckInputAmount(safe, br)) {\n    s->state = BROTLI_STATE_COMMAND_BEGIN;\n    result = BROTLI_DECODER_NEEDS_MORE_INPUT;\n    goto saveStateAndReturn;\n  }\n  if (BROTLI_PREDICT_FALSE(s->block_length[1] == 0)) {\n    BROTLI_SAFE_WITH_STATUS(DecodeCommandBlockSwitch(s));\n    goto CommandBegin;\n  }\n  /* Read the insert/copy length in the command. */\n  BROTLI_SAFE(ReadCommand(s, br, &i));\n  BROTLI_LOG((\"[ProcessCommandsInternal] pos = %d insert = %d copy = %d\\n\",\n              pos, i, s->copy_length));\n  if (i == 0) {\n    goto CommandPostDecodeLiterals;\n  }\n  s->meta_block_remaining_len -= i;\n\nCommandInner:\n  if (safe) {\n    s->state = BROTLI_STATE_COMMAND_INNER;\n  }\n  /* Read the literals in the command. */\n  if (s->trivial_literal_context) {\n    brotli_reg_t bits;\n    brotli_reg_t value;\n    PreloadSymbol(safe, s->literal_htree, br, &bits, &value);\n    if (!safe) {\n      // This is a hottest part of the decode, so we copy the loop below\n      // and optimize it by calculating the number of steps where all checks\n      // evaluate to false (ringbuffer size/block size/input size).\n      // Since all checks are loop invariant, we just need to find\n      // minimal number of iterations for a simple loop, and run\n      // the full version for the remainder.\n      int num_steps = i - 1;\n      if (num_steps > 0 && ((brotli_reg_t)(num_steps) > s->block_length[0])) {\n        // Safe cast, since block_length < steps\n        num_steps = (int)s->block_length[0];\n      }\n      if (s->ringbuffer_size >= pos &&\n          (s->ringbuffer_size - pos) <= num_steps) {\n        num_steps = s->ringbuffer_size - pos - 1;\n      }\n      if (num_steps < 0) {\n        num_steps = 0;\n      }\n      num_steps = BrotliCopyPreloadedSymbolsToU8(s->literal_htree, br, &bits,\n                                                 &value, s->ringbuffer, pos,\n                                                 num_steps);\n      pos += num_steps;\n      s->block_length[0] -= (brotli_reg_t)num_steps;\n      i -= num_steps;\n      do {\n        if (!CheckInputAmount(safe, br)) {\n          s->state = BROTLI_STATE_COMMAND_INNER;\n          result = BROTLI_DECODER_NEEDS_MORE_INPUT;\n          goto saveStateAndReturn;\n        }\n        if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) {\n          goto NextLiteralBlock;\n        }\n        BrotliCopyPreloadedSymbolsToU8(s->literal_htree, br, &bits, &value,\n                                       s->ringbuffer, pos, 1);\n        --s->block_length[0];\n        BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos);\n        ++pos;\n        if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) {\n          s->state = BROTLI_STATE_COMMAND_INNER_WRITE;\n          --i;\n          goto saveStateAndReturn;\n        }\n      } while (--i != 0);\n    } else { /* safe */\n      do {\n        if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) {\n          goto NextLiteralBlock;\n        }\n        brotli_reg_t literal;\n        if (!SafeReadSymbol(s->literal_htree, br, &literal)) {\n          result = BROTLI_DECODER_NEEDS_MORE_INPUT;\n          goto saveStateAndReturn;\n        }\n        s->ringbuffer[pos] = (uint8_t)literal;\n        --s->block_length[0];\n        BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos);\n        ++pos;\n        if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) {\n          s->state = BROTLI_STATE_COMMAND_INNER_WRITE;\n          --i;\n          goto saveStateAndReturn;\n        }\n      } while (--i != 0);\n    }\n  } else {\n    uint8_t p1 = s->ringbuffer[(pos - 1) & s->ringbuffer_mask];\n    uint8_t p2 = s->ringbuffer[(pos - 2) & s->ringbuffer_mask];\n    do {\n      const HuffmanCode* hc;\n      uint8_t context;\n      if (!CheckInputAmount(safe, br)) {\n        s->state = BROTLI_STATE_COMMAND_INNER;\n        result = BROTLI_DECODER_NEEDS_MORE_INPUT;\n        goto saveStateAndReturn;\n      }\n      if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) {\n        goto NextLiteralBlock;\n      }\n      context = BROTLI_CONTEXT(p1, p2, s->context_lookup);\n      BROTLI_LOG_UINT(context);\n      hc = s->literal_hgroup.htrees[s->context_map_slice[context]];\n      p2 = p1;\n      if (!safe) {\n        p1 = (uint8_t)ReadSymbol(hc, br);\n      } else {\n        brotli_reg_t literal;\n        if (!SafeReadSymbol(hc, br, &literal)) {\n          result = BROTLI_DECODER_NEEDS_MORE_INPUT;\n          goto saveStateAndReturn;\n        }\n        p1 = (uint8_t)literal;\n      }\n      s->ringbuffer[pos] = p1;\n      --s->block_length[0];\n      BROTLI_LOG_UINT(s->context_map_slice[context]);\n      BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos & s->ringbuffer_mask);\n      ++pos;\n      if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) {\n        s->state = BROTLI_STATE_COMMAND_INNER_WRITE;\n        --i;\n        goto saveStateAndReturn;\n      }\n    } while (--i != 0);\n  }\n  BROTLI_LOG_UINT(s->meta_block_remaining_len);\n  if (BROTLI_PREDICT_FALSE(s->meta_block_remaining_len <= 0)) {\n    s->state = BROTLI_STATE_METABLOCK_DONE;\n    goto saveStateAndReturn;\n  }\n\nCommandPostDecodeLiterals:\n  if (safe) {\n    s->state = BROTLI_STATE_COMMAND_POST_DECODE_LITERALS;\n  }\n  if (s->distance_code >= 0) {\n    /* Implicit distance case. */\n    s->distance_context = s->distance_code ? 0 : 1;\n    --s->dist_rb_idx;\n    s->distance_code = s->dist_rb[s->dist_rb_idx & 3];\n  } else {\n    /* Read distance code in the command, unless it was implicitly zero. */\n    if (BROTLI_PREDICT_FALSE(s->block_length[2] == 0)) {\n      BROTLI_SAFE_WITH_STATUS(DecodeDistanceBlockSwitch(s));\n    }\n    BROTLI_SAFE(ReadDistance(s, br));\n  }\n  BROTLI_LOG((\"[ProcessCommandsInternal] pos = %d distance = %d\\n\",\n              pos, s->distance_code));\n  if (s->max_distance != s->max_backward_distance) {\n    s->max_distance =\n        (pos < s->max_backward_distance) ? pos : s->max_backward_distance;\n  }\n  i = s->copy_length;\n  /* Apply copy of LZ77 back-reference, or static dictionary reference if\n     the distance is larger than the max LZ77 distance */\n  if (s->distance_code > s->max_distance) {\n    /* The maximum allowed distance is BROTLI_MAX_ALLOWED_DISTANCE = 0x7FFFFFFC.\n       With this choice, no signed overflow can occur after decoding\n       a special distance code (e.g., after adding 3 to the last distance). */\n    if (s->distance_code > BROTLI_MAX_ALLOWED_DISTANCE) {\n      BROTLI_LOG((\"Invalid backward reference. pos: %d distance: %d \"\n          \"len: %d bytes left: %d\\n\",\n          pos, s->distance_code, i, s->meta_block_remaining_len));\n      return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DISTANCE);\n    }\n    if (s->distance_code - s->max_distance - 1 < compound_dictionary_size) {\n      int address = compound_dictionary_size -\n          (s->distance_code - s->max_distance);\n      if (!InitializeCompoundDictionaryCopy(s, address, i)) {\n        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_COMPOUND_DICTIONARY);\n      }\n      pos += CopyFromCompoundDictionary(s, pos);\n      if (pos >= s->ringbuffer_size) {\n        s->state = BROTLI_STATE_COMMAND_POST_WRITE_1;\n        goto saveStateAndReturn;\n      }\n    } else if (i >= SHARED_BROTLI_MIN_DICTIONARY_WORD_LENGTH &&\n               i <= SHARED_BROTLI_MAX_DICTIONARY_WORD_LENGTH) {\n      uint8_t p1 = s->ringbuffer[(pos - 1) & s->ringbuffer_mask];\n      uint8_t p2 = s->ringbuffer[(pos - 2) & s->ringbuffer_mask];\n      uint8_t dict_id = s->dictionary->context_based ?\n          s->dictionary->context_map[BROTLI_CONTEXT(p1, p2, s->context_lookup)]\n          : 0;\n      const BrotliDictionary* words = s->dictionary->words[dict_id];\n      const BrotliTransforms* transforms = s->dictionary->transforms[dict_id];\n      int offset = (int)words->offsets_by_length[i];\n      brotli_reg_t shift = words->size_bits_by_length[i];\n      int address =\n          s->distance_code - s->max_distance - 1 - compound_dictionary_size;\n      int mask = (int)BitMask(shift);\n      int word_idx = address & mask;\n      int transform_idx = address >> shift;\n      /* Compensate double distance-ring-buffer roll. */\n      s->dist_rb_idx += s->distance_context;\n      offset += word_idx * i;\n      /* If the distance is out of bound, select a next static dictionary if\n         there exist multiple. */\n      if ((transform_idx >= (int)transforms->num_transforms ||\n          words->size_bits_by_length[i] == 0) &&\n          s->dictionary->num_dictionaries > 1) {\n        uint8_t dict_id2;\n        int dist_remaining = address -\n            (int)(((1u << shift) & ~1u)) * (int)transforms->num_transforms;\n        for (dict_id2 = 0; dict_id2 < s->dictionary->num_dictionaries;\n            dict_id2++) {\n          const BrotliDictionary* words2 = s->dictionary->words[dict_id2];\n          if (dict_id2 != dict_id && words2->size_bits_by_length[i] != 0) {\n            const BrotliTransforms* transforms2 =\n                s->dictionary->transforms[dict_id2];\n            brotli_reg_t shift2 = words2->size_bits_by_length[i];\n            int num = (int)((1u << shift2) & ~1u) *\n                (int)transforms2->num_transforms;\n            if (dist_remaining < num) {\n              dict_id = dict_id2;\n              words = words2;\n              transforms = transforms2;\n              address = dist_remaining;\n              shift = shift2;\n              mask = (int)BitMask(shift);\n              word_idx = address & mask;\n              transform_idx = address >> shift;\n              offset = (int)words->offsets_by_length[i] + word_idx * i;\n              break;\n            }\n            dist_remaining -= num;\n          }\n        }\n      }\n      if (BROTLI_PREDICT_FALSE(words->size_bits_by_length[i] == 0)) {\n        BROTLI_LOG((\"Invalid backward reference. pos: %d distance: %d \"\n            \"len: %d bytes left: %d\\n\",\n            pos, s->distance_code, i, s->meta_block_remaining_len));\n        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DICTIONARY);\n      }\n      if (BROTLI_PREDICT_FALSE(!words->data)) {\n        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET);\n      }\n      if (transform_idx < (int)transforms->num_transforms) {\n        const uint8_t* word = &words->data[offset];\n        int len = i;\n        if (transform_idx == transforms->cutOffTransforms[0]) {\n          memcpy(&s->ringbuffer[pos], word, (size_t)len);\n          BROTLI_LOG((\"[ProcessCommandsInternal] dictionary word: [%.*s]\\n\",\n                      len, word));\n        } else {\n          len = BrotliTransformDictionaryWord(&s->ringbuffer[pos], word, len,\n              transforms, transform_idx);\n          BROTLI_LOG((\"[ProcessCommandsInternal] dictionary word: [%.*s],\"\n                      \" transform_idx = %d, transformed: [%.*s]\\n\",\n                      i, word, transform_idx, len, &s->ringbuffer[pos]));\n          if (len == 0 && s->distance_code <= 120) {\n            BROTLI_LOG((\"Invalid length-0 dictionary word after transform\\n\"));\n            return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_TRANSFORM);\n          }\n        }\n        pos += len;\n        s->meta_block_remaining_len -= len;\n        if (pos >= s->ringbuffer_size) {\n          s->state = BROTLI_STATE_COMMAND_POST_WRITE_1;\n          goto saveStateAndReturn;\n        }\n      } else {\n        BROTLI_LOG((\"Invalid backward reference. pos: %d distance: %d \"\n            \"len: %d bytes left: %d\\n\",\n            pos, s->distance_code, i, s->meta_block_remaining_len));\n        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_TRANSFORM);\n      }\n    } else {\n      BROTLI_LOG((\"Invalid backward reference. pos: %d distance: %d \"\n          \"len: %d bytes left: %d\\n\",\n          pos, s->distance_code, i, s->meta_block_remaining_len));\n      return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DICTIONARY);\n    }\n  } else {\n    int src_start = (pos - s->distance_code) & s->ringbuffer_mask;\n    uint8_t* copy_dst = &s->ringbuffer[pos];\n    uint8_t* copy_src = &s->ringbuffer[src_start];\n    int dst_end = pos + i;\n    int src_end = src_start + i;\n    /* Update the recent distances cache. */\n    s->dist_rb[s->dist_rb_idx & 3] = s->distance_code;\n    ++s->dist_rb_idx;\n    s->meta_block_remaining_len -= i;\n    /* There are 32+ bytes of slack in the ring-buffer allocation.\n       Also, we have 16 short codes, that make these 16 bytes irrelevant\n       in the ring-buffer. Let's copy over them as a first guess. */\n    memmove16(copy_dst, copy_src);\n    if (src_end > pos && dst_end > src_start) {\n      /* Regions intersect. */\n      goto CommandPostWrapCopy;\n    }\n    if (dst_end >= s->ringbuffer_size || src_end >= s->ringbuffer_size) {\n      /* At least one region wraps. */\n      goto CommandPostWrapCopy;\n    }\n    pos += i;\n    if (i > 16) {\n      if (i > 32) {\n        memcpy(copy_dst + 16, copy_src + 16, (size_t)(i - 16));\n      } else {\n        /* This branch covers about 45% cases.\n           Fixed size short copy allows more compiler optimizations. */\n        memmove16(copy_dst + 16, copy_src + 16);\n      }\n    }\n  }\n  BROTLI_LOG_UINT(s->meta_block_remaining_len);\n  if (s->meta_block_remaining_len <= 0) {\n    /* Next metablock, if any. */\n    s->state = BROTLI_STATE_METABLOCK_DONE;\n    goto saveStateAndReturn;\n  } else {\n    goto CommandBegin;\n  }\nCommandPostWrapCopy:\n  {\n    int wrap_guard = s->ringbuffer_size - pos;\n    while (--i >= 0) {\n      s->ringbuffer[pos] =\n          s->ringbuffer[(pos - s->distance_code) & s->ringbuffer_mask];\n      ++pos;\n      if (BROTLI_PREDICT_FALSE(--wrap_guard == 0)) {\n        s->state = BROTLI_STATE_COMMAND_POST_WRITE_2;\n        goto saveStateAndReturn;\n      }\n    }\n  }\n  if (s->meta_block_remaining_len <= 0) {\n    /* Next metablock, if any. */\n    s->state = BROTLI_STATE_METABLOCK_DONE;\n    goto saveStateAndReturn;\n  } else {\n    goto CommandBegin;\n  }\n\nNextLiteralBlock:\n  BROTLI_SAFE_WITH_STATUS(DecodeLiteralBlockSwitch(s));\n  goto CommandInner;\n\nsaveStateAndReturn:\n  s->pos = pos;\n  s->loop_counter = i;\n  return result;\n}\n\n#undef BROTLI_SAFE\n\nstatic BROTLI_NOINLINE BrotliDecoderErrorCode ProcessCommands(\n    BrotliDecoderState* s) {\n  return ProcessCommandsInternal(0, s);\n}\n\nstatic BROTLI_NOINLINE BrotliDecoderErrorCode SafeProcessCommands(\n    BrotliDecoderState* s) {\n  return ProcessCommandsInternal(1, s);\n}\n\nBrotliDecoderResult BrotliDecoderDecompress(\n    size_t encoded_size,\n    const uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(encoded_size)],\n    size_t* decoded_size,\n    uint8_t decoded_buffer[BROTLI_ARRAY_PARAM(*decoded_size)]) {\n  BrotliDecoderState s;\n  BrotliDecoderResult result;\n  size_t total_out = 0;\n  size_t available_in = encoded_size;\n  const uint8_t* next_in = encoded_buffer;\n  size_t available_out = *decoded_size;\n  uint8_t* next_out = decoded_buffer;\n  if (!BrotliDecoderStateInit(&s, 0, 0, 0)) {\n    return BROTLI_DECODER_RESULT_ERROR;\n  }\n  result = BrotliDecoderDecompressStream(\n      &s, &available_in, &next_in, &available_out, &next_out, &total_out);\n  *decoded_size = total_out;\n  BrotliDecoderStateCleanup(&s);\n  if (result != BROTLI_DECODER_RESULT_SUCCESS) {\n    result = BROTLI_DECODER_RESULT_ERROR;\n  }\n  return result;\n}\n\n/* Invariant: input stream is never overconsumed:\n    - invalid input implies that the whole stream is invalid -> any amount of\n      input could be read and discarded\n    - when result is \"needs more input\", then at least one more byte is REQUIRED\n      to complete decoding; all input data MUST be consumed by decoder, so\n      client could swap the input buffer\n    - when result is \"needs more output\" decoder MUST ensure that it doesn't\n      hold more than 7 bits in bit reader; this saves client from swapping input\n      buffer ahead of time\n    - when result is \"success\" decoder MUST return all unused data back to input\n      buffer; this is possible because the invariant is held on enter */\nBrotliDecoderResult BrotliDecoderDecompressStream(\n    BrotliDecoderState* s, size_t* available_in, const uint8_t** next_in,\n    size_t* available_out, uint8_t** next_out, size_t* total_out) {\n  BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;\n  BrotliBitReader* br = &s->br;\n  size_t input_size = *available_in;\n#define BROTLI_SAVE_ERROR_CODE(code) \\\n    SaveErrorCode(s, (code), input_size - *available_in)\n  /* Ensure that |total_out| is set, even if no data will ever be pushed out. */\n  if (total_out) {\n    *total_out = s->partial_pos_out;\n  }\n  /* Do not try to process further in a case of unrecoverable error. */\n  if ((int)s->error_code < 0) {\n    return BROTLI_DECODER_RESULT_ERROR;\n  }\n  if (*available_out && (!next_out || !*next_out)) {\n    return BROTLI_SAVE_ERROR_CODE(\n        BROTLI_FAILURE(BROTLI_DECODER_ERROR_INVALID_ARGUMENTS));\n  }\n  if (!*available_out) next_out = 0;\n  if (s->buffer_length == 0) {  /* Just connect bit reader to input stream. */\n    BrotliBitReaderSetInput(br, *next_in, *available_in);\n  } else {\n    /* At least one byte of input is required. More than one byte of input may\n       be required to complete the transaction -> reading more data must be\n       done in a loop -> do it in a main loop. */\n    result = BROTLI_DECODER_NEEDS_MORE_INPUT;\n    BrotliBitReaderSetInput(br, &s->buffer.u8[0], s->buffer_length);\n  }\n  /* State machine */\n  for (;;) {\n    if (result != BROTLI_DECODER_SUCCESS) {\n      /* Error, needs more input/output. */\n      if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {\n        if (s->ringbuffer != 0) {  /* Pro-actively push output. */\n          BrotliDecoderErrorCode intermediate_result = WriteRingBuffer(s,\n              available_out, next_out, total_out, BROTLI_TRUE);\n          /* WriteRingBuffer checks s->meta_block_remaining_len validity. */\n          if ((int)intermediate_result < 0) {\n            result = intermediate_result;\n            break;\n          }\n        }\n        if (s->buffer_length != 0) {  /* Used with internal buffer. */\n          if (br->next_in == br->last_in) {\n            /* Successfully finished read transaction.\n               Accumulator contains less than 8 bits, because internal buffer\n               is expanded byte-by-byte until it is enough to complete read. */\n            s->buffer_length = 0;\n            /* Switch to input stream and restart. */\n            result = BROTLI_DECODER_SUCCESS;\n            BrotliBitReaderSetInput(br, *next_in, *available_in);\n            continue;\n          } else if (*available_in != 0) {\n            /* Not enough data in buffer, but can take one more byte from\n               input stream. */\n            result = BROTLI_DECODER_SUCCESS;\n            BROTLI_DCHECK(s->buffer_length < 8);\n            s->buffer.u8[s->buffer_length] = **next_in;\n            s->buffer_length++;\n            BrotliBitReaderSetInput(br, &s->buffer.u8[0], s->buffer_length);\n            (*next_in)++;\n            (*available_in)--;\n            /* Retry with more data in buffer. */\n            continue;\n          }\n          /* Can't finish reading and no more input. */\n          break;\n        } else {  /* Input stream doesn't contain enough input. */\n          /* Copy tail to internal buffer and return. */\n          *next_in = br->next_in;\n          *available_in = BrotliBitReaderGetAvailIn(br);\n          while (*available_in) {\n            s->buffer.u8[s->buffer_length] = **next_in;\n            s->buffer_length++;\n            (*next_in)++;\n            (*available_in)--;\n          }\n          break;\n        }\n        /* Unreachable. */\n      }\n\n      /* Fail or needs more output. */\n\n      if (s->buffer_length != 0) {\n        /* Just consumed the buffered input and produced some output. Otherwise\n           it would result in \"needs more input\". Reset internal buffer. */\n        s->buffer_length = 0;\n      } else {\n        /* Using input stream in last iteration. When decoder switches to input\n           stream it has less than 8 bits in accumulator, so it is safe to\n           return unused accumulator bits there. */\n        BrotliBitReaderUnload(br);\n        *available_in = BrotliBitReaderGetAvailIn(br);\n        *next_in = br->next_in;\n      }\n      break;\n    }\n    switch (s->state) {\n      case BROTLI_STATE_UNINITED:\n        /* Prepare to the first read. */\n        if (!BrotliWarmupBitReader(br)) {\n          result = BROTLI_DECODER_NEEDS_MORE_INPUT;\n          break;\n        }\n        /* Decode window size. */\n        result = DecodeWindowBits(s, br);  /* Reads 1..8 bits. */\n        if (result != BROTLI_DECODER_SUCCESS) {\n          break;\n        }\n        if (s->large_window) {\n          s->state = BROTLI_STATE_LARGE_WINDOW_BITS;\n          break;\n        }\n        s->state = BROTLI_STATE_INITIALIZE;\n        break;\n\n      case BROTLI_STATE_LARGE_WINDOW_BITS: {\n        brotli_reg_t bits;\n        if (!BrotliSafeReadBits(br, 6, &bits)) {\n          result = BROTLI_DECODER_NEEDS_MORE_INPUT;\n          break;\n        }\n        s->window_bits = bits & 63u;\n        if (s->window_bits < BROTLI_LARGE_MIN_WBITS ||\n            s->window_bits > BROTLI_LARGE_MAX_WBITS) {\n          result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);\n          break;\n        }\n        s->state = BROTLI_STATE_INITIALIZE;\n      }\n      /* Fall through. */\n\n      case BROTLI_STATE_INITIALIZE:\n        BROTLI_LOG_UINT(s->window_bits);\n        /* Maximum distance, see section 9.1. of the spec. */\n        s->max_backward_distance = (1 << s->window_bits) - BROTLI_WINDOW_GAP;\n\n        /* Allocate memory for both block_type_trees and block_len_trees. */\n        s->block_type_trees = (HuffmanCode*)BROTLI_DECODER_ALLOC(s,\n            sizeof(HuffmanCode) * 3 *\n                (BROTLI_HUFFMAN_MAX_SIZE_258 + BROTLI_HUFFMAN_MAX_SIZE_26));\n        if (s->block_type_trees == 0) {\n          result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES);\n          break;\n        }\n        s->block_len_trees =\n            s->block_type_trees + 3 * BROTLI_HUFFMAN_MAX_SIZE_258;\n\n        s->state = BROTLI_STATE_METABLOCK_BEGIN;\n      /* Fall through. */\n\n      case BROTLI_STATE_METABLOCK_BEGIN:\n        BrotliDecoderStateMetablockBegin(s);\n        BROTLI_LOG_UINT(s->pos);\n        s->state = BROTLI_STATE_METABLOCK_HEADER;\n      /* Fall through. */\n\n      case BROTLI_STATE_METABLOCK_HEADER:\n        result = DecodeMetaBlockLength(s, br);  /* Reads 2 - 31 bits. */\n        if (result != BROTLI_DECODER_SUCCESS) {\n          break;\n        }\n        BROTLI_DCHECK(s->meta_block_remaining_len <=\n                      (int)BROTLI_BLOCK_SIZE_CAP);\n        BROTLI_LOG_UINT(s->is_last_metablock);\n        BROTLI_LOG_UINT(s->meta_block_remaining_len);\n        BROTLI_LOG_UINT(s->is_metadata);\n        BROTLI_LOG_UINT(s->is_uncompressed);\n        if (s->is_metadata || s->is_uncompressed) {\n          if (!BrotliJumpToByteBoundary(br)) {\n            result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_1);\n            break;\n          }\n        }\n        if (s->is_metadata) {\n          s->state = BROTLI_STATE_METADATA;\n          if (s->metadata_start_func) {\n            s->metadata_start_func(s->metadata_callback_opaque,\n                                   (size_t)s->meta_block_remaining_len);\n          }\n          break;\n        }\n        if (s->meta_block_remaining_len == 0) {\n          s->state = BROTLI_STATE_METABLOCK_DONE;\n          break;\n        }\n        BrotliCalculateRingBufferSize(s);\n        if (s->is_uncompressed) {\n          s->state = BROTLI_STATE_UNCOMPRESSED;\n          break;\n        }\n        s->state = BROTLI_STATE_BEFORE_COMPRESSED_METABLOCK_HEADER;\n      /* Fall through. */\n\n      case BROTLI_STATE_BEFORE_COMPRESSED_METABLOCK_HEADER: {\n        BrotliMetablockHeaderArena* h = &s->arena.header;\n        s->loop_counter = 0;\n        /* Initialize compressed metablock header arena. */\n        h->sub_loop_counter = 0;\n        /* Make small negative indexes addressable. */\n        h->symbol_lists =\n            &h->symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1];\n        h->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;\n        h->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE;\n        h->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE;\n        s->state = BROTLI_STATE_HUFFMAN_CODE_0;\n      }\n      /* Fall through. */\n\n      case BROTLI_STATE_HUFFMAN_CODE_0:\n        if (s->loop_counter >= 3) {\n          s->state = BROTLI_STATE_METABLOCK_HEADER_2;\n          break;\n        }\n        /* Reads 1..11 bits. */\n        result = DecodeVarLenUint8(s, br, &s->num_block_types[s->loop_counter]);\n        if (result != BROTLI_DECODER_SUCCESS) {\n          break;\n        }\n        s->num_block_types[s->loop_counter]++;\n        BROTLI_LOG_UINT(s->num_block_types[s->loop_counter]);\n        if (s->num_block_types[s->loop_counter] < 2) {\n          s->loop_counter++;\n          break;\n        }\n        s->state = BROTLI_STATE_HUFFMAN_CODE_1;\n      /* Fall through. */\n\n      case BROTLI_STATE_HUFFMAN_CODE_1: {\n        brotli_reg_t alphabet_size = s->num_block_types[s->loop_counter] + 2;\n        int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_258;\n        result = ReadHuffmanCode(alphabet_size, alphabet_size,\n            &s->block_type_trees[tree_offset], NULL, s);\n        if (result != BROTLI_DECODER_SUCCESS) break;\n        s->state = BROTLI_STATE_HUFFMAN_CODE_2;\n      }\n      /* Fall through. */\n\n      case BROTLI_STATE_HUFFMAN_CODE_2: {\n        brotli_reg_t alphabet_size = BROTLI_NUM_BLOCK_LEN_SYMBOLS;\n        int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26;\n        result = ReadHuffmanCode(alphabet_size, alphabet_size,\n            &s->block_len_trees[tree_offset], NULL, s);\n        if (result != BROTLI_DECODER_SUCCESS) break;\n        s->state = BROTLI_STATE_HUFFMAN_CODE_3;\n      }\n      /* Fall through. */\n\n      case BROTLI_STATE_HUFFMAN_CODE_3: {\n        int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26;\n        if (!SafeReadBlockLength(s, &s->block_length[s->loop_counter],\n            &s->block_len_trees[tree_offset], br)) {\n          result = BROTLI_DECODER_NEEDS_MORE_INPUT;\n          break;\n        }\n        BROTLI_LOG_UINT(s->block_length[s->loop_counter]);\n        s->loop_counter++;\n        s->state = BROTLI_STATE_HUFFMAN_CODE_0;\n        break;\n      }\n\n      case BROTLI_STATE_UNCOMPRESSED: {\n        result = CopyUncompressedBlockToOutput(\n            available_out, next_out, total_out, s);\n        if (result != BROTLI_DECODER_SUCCESS) {\n          break;\n        }\n        s->state = BROTLI_STATE_METABLOCK_DONE;\n        break;\n      }\n\n      case BROTLI_STATE_METADATA:\n        result = SkipMetadataBlock(s);\n        if (result != BROTLI_DECODER_SUCCESS) {\n          break;\n        }\n        s->state = BROTLI_STATE_METABLOCK_DONE;\n        break;\n\n      case BROTLI_STATE_METABLOCK_HEADER_2: {\n        brotli_reg_t bits;\n        if (!BrotliSafeReadBits(br, 6, &bits)) {\n          result = BROTLI_DECODER_NEEDS_MORE_INPUT;\n          break;\n        }\n        s->distance_postfix_bits = bits & BitMask(2);\n        bits >>= 2;\n        s->num_direct_distance_codes = bits << s->distance_postfix_bits;\n        BROTLI_LOG_UINT(s->num_direct_distance_codes);\n        BROTLI_LOG_UINT(s->distance_postfix_bits);\n        s->context_modes =\n            (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)s->num_block_types[0]);\n        if (s->context_modes == 0) {\n          result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES);\n          break;\n        }\n        s->loop_counter = 0;\n        s->state = BROTLI_STATE_CONTEXT_MODES;\n      }\n      /* Fall through. */\n\n      case BROTLI_STATE_CONTEXT_MODES:\n        result = ReadContextModes(s);\n        if (result != BROTLI_DECODER_SUCCESS) {\n          break;\n        }\n        s->state = BROTLI_STATE_CONTEXT_MAP_1;\n      /* Fall through. */\n\n      case BROTLI_STATE_CONTEXT_MAP_1:\n        result = DecodeContextMap(\n            s->num_block_types[0] << BROTLI_LITERAL_CONTEXT_BITS,\n            &s->num_literal_htrees, &s->context_map, s);\n        if (result != BROTLI_DECODER_SUCCESS) {\n          break;\n        }\n        DetectTrivialLiteralBlockTypes(s);\n        s->state = BROTLI_STATE_CONTEXT_MAP_2;\n      /* Fall through. */\n\n      case BROTLI_STATE_CONTEXT_MAP_2: {\n        brotli_reg_t npostfix = s->distance_postfix_bits;\n        brotli_reg_t ndirect = s->num_direct_distance_codes;\n        brotli_reg_t distance_alphabet_size_max = BROTLI_DISTANCE_ALPHABET_SIZE(\n            npostfix, ndirect, BROTLI_MAX_DISTANCE_BITS);\n        brotli_reg_t distance_alphabet_size_limit = distance_alphabet_size_max;\n        BROTLI_BOOL allocation_success = BROTLI_TRUE;\n        if (s->large_window) {\n          BrotliDistanceCodeLimit limit = BrotliCalculateDistanceCodeLimit(\n              BROTLI_MAX_ALLOWED_DISTANCE, (uint32_t)npostfix,\n              (uint32_t)ndirect);\n          distance_alphabet_size_max = BROTLI_DISTANCE_ALPHABET_SIZE(\n              npostfix, ndirect, BROTLI_LARGE_MAX_DISTANCE_BITS);\n          distance_alphabet_size_limit = limit.max_alphabet_size;\n        }\n        result = DecodeContextMap(\n            s->num_block_types[2] << BROTLI_DISTANCE_CONTEXT_BITS,\n            &s->num_dist_htrees, &s->dist_context_map, s);\n        if (result != BROTLI_DECODER_SUCCESS) {\n          break;\n        }\n        allocation_success &= BrotliDecoderHuffmanTreeGroupInit(\n            s, &s->literal_hgroup, BROTLI_NUM_LITERAL_SYMBOLS,\n            BROTLI_NUM_LITERAL_SYMBOLS, s->num_literal_htrees);\n        allocation_success &= BrotliDecoderHuffmanTreeGroupInit(\n            s, &s->insert_copy_hgroup, BROTLI_NUM_COMMAND_SYMBOLS,\n            BROTLI_NUM_COMMAND_SYMBOLS, s->num_block_types[1]);\n        allocation_success &= BrotliDecoderHuffmanTreeGroupInit(\n            s, &s->distance_hgroup, distance_alphabet_size_max,\n            distance_alphabet_size_limit, s->num_dist_htrees);\n        if (!allocation_success) {\n          return BROTLI_SAVE_ERROR_CODE(\n              BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS));\n        }\n        s->loop_counter = 0;\n        s->state = BROTLI_STATE_TREE_GROUP;\n      }\n      /* Fall through. */\n\n      case BROTLI_STATE_TREE_GROUP: {\n        HuffmanTreeGroup* hgroup = NULL;\n        switch (s->loop_counter) {\n          case 0: hgroup = &s->literal_hgroup; break;\n          case 1: hgroup = &s->insert_copy_hgroup; break;\n          case 2: hgroup = &s->distance_hgroup; break;\n          default: return BROTLI_SAVE_ERROR_CODE(BROTLI_FAILURE(\n              BROTLI_DECODER_ERROR_UNREACHABLE));  /* COV_NF_LINE */\n        }\n        result = HuffmanTreeGroupDecode(hgroup, s);\n        if (result != BROTLI_DECODER_SUCCESS) break;\n        s->loop_counter++;\n        if (s->loop_counter < 3) {\n          break;\n        }\n        s->state = BROTLI_STATE_BEFORE_COMPRESSED_METABLOCK_BODY;\n      }\n      /* Fall through. */\n\n      case BROTLI_STATE_BEFORE_COMPRESSED_METABLOCK_BODY:\n        PrepareLiteralDecoding(s);\n        s->dist_context_map_slice = s->dist_context_map;\n        s->htree_command = s->insert_copy_hgroup.htrees[0];\n        if (!BrotliEnsureRingBuffer(s)) {\n          result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2);\n          break;\n        }\n        CalculateDistanceLut(s);\n        s->state = BROTLI_STATE_COMMAND_BEGIN;\n      /* Fall through. */\n\n      case BROTLI_STATE_COMMAND_BEGIN:\n      /* Fall through. */\n      case BROTLI_STATE_COMMAND_INNER:\n      /* Fall through. */\n      case BROTLI_STATE_COMMAND_POST_DECODE_LITERALS:\n      /* Fall through. */\n      case BROTLI_STATE_COMMAND_POST_WRAP_COPY:\n        result = ProcessCommands(s);\n        if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {\n          result = SafeProcessCommands(s);\n        }\n        break;\n\n      case BROTLI_STATE_COMMAND_INNER_WRITE:\n      /* Fall through. */\n      case BROTLI_STATE_COMMAND_POST_WRITE_1:\n      /* Fall through. */\n      case BROTLI_STATE_COMMAND_POST_WRITE_2:\n        result = WriteRingBuffer(\n            s, available_out, next_out, total_out, BROTLI_FALSE);\n        if (result != BROTLI_DECODER_SUCCESS) {\n          break;\n        }\n        WrapRingBuffer(s);\n        if (s->ringbuffer_size == 1 << s->window_bits) {\n          s->max_distance = s->max_backward_distance;\n        }\n        if (s->state == BROTLI_STATE_COMMAND_POST_WRITE_1) {\n          BrotliDecoderCompoundDictionary* addon = s->compound_dictionary;\n          if (addon && (addon->br_length != addon->br_copied)) {\n            s->pos += CopyFromCompoundDictionary(s, s->pos);\n            if (s->pos >= s->ringbuffer_size) continue;\n          }\n          if (s->meta_block_remaining_len == 0) {\n            /* Next metablock, if any. */\n            s->state = BROTLI_STATE_METABLOCK_DONE;\n          } else {\n            s->state = BROTLI_STATE_COMMAND_BEGIN;\n          }\n          break;\n        } else if (s->state == BROTLI_STATE_COMMAND_POST_WRITE_2) {\n          s->state = BROTLI_STATE_COMMAND_POST_WRAP_COPY;\n        } else {  /* BROTLI_STATE_COMMAND_INNER_WRITE */\n          if (s->loop_counter == 0) {\n            if (s->meta_block_remaining_len == 0) {\n              s->state = BROTLI_STATE_METABLOCK_DONE;\n            } else {\n              s->state = BROTLI_STATE_COMMAND_POST_DECODE_LITERALS;\n            }\n            break;\n          }\n          s->state = BROTLI_STATE_COMMAND_INNER;\n        }\n        break;\n\n      case BROTLI_STATE_METABLOCK_DONE:\n        if (s->meta_block_remaining_len < 0) {\n          result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2);\n          break;\n        }\n        BrotliDecoderStateCleanupAfterMetablock(s);\n        if (!s->is_last_metablock) {\n          s->state = BROTLI_STATE_METABLOCK_BEGIN;\n          break;\n        }\n        if (!BrotliJumpToByteBoundary(br)) {\n          result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_2);\n          break;\n        }\n        if (s->buffer_length == 0) {\n          BrotliBitReaderUnload(br);\n          *available_in = BrotliBitReaderGetAvailIn(br);\n          *next_in = br->next_in;\n        }\n        s->state = BROTLI_STATE_DONE;\n      /* Fall through. */\n\n      case BROTLI_STATE_DONE:\n        if (s->ringbuffer != 0) {\n          result = WriteRingBuffer(\n              s, available_out, next_out, total_out, BROTLI_TRUE);\n          if (result != BROTLI_DECODER_SUCCESS) {\n            break;\n          }\n        }\n        return BROTLI_SAVE_ERROR_CODE(result);\n    }\n  }\n  return BROTLI_SAVE_ERROR_CODE(result);\n#undef BROTLI_SAVE_ERROR_CODE\n}\n\nBROTLI_BOOL BrotliDecoderHasMoreOutput(const BrotliDecoderState* s) {\n  /* After unrecoverable error remaining output is considered nonsensical. */\n  if ((int)s->error_code < 0) {\n    return BROTLI_FALSE;\n  }\n  return TO_BROTLI_BOOL(\n      s->ringbuffer != 0 && UnwrittenBytes(s, BROTLI_FALSE) != 0);\n}\n\nconst uint8_t* BrotliDecoderTakeOutput(BrotliDecoderState* s, size_t* size) {\n  uint8_t* result = 0;\n  size_t available_out = *size ? *size : 1u << 24;\n  size_t requested_out = available_out;\n  BrotliDecoderErrorCode status;\n  if ((s->ringbuffer == 0) || ((int)s->error_code < 0)) {\n    *size = 0;\n    return 0;\n  }\n  WrapRingBuffer(s);\n  status = WriteRingBuffer(s, &available_out, &result, 0, BROTLI_TRUE);\n  /* Either WriteRingBuffer returns those \"success\" codes... */\n  if (status == BROTLI_DECODER_SUCCESS ||\n      status == BROTLI_DECODER_NEEDS_MORE_OUTPUT) {\n    *size = requested_out - available_out;\n  } else {\n    /* ... or stream is broken. Normally this should be caught by\n       BrotliDecoderDecompressStream, this is just a safeguard. */\n    if ((int)status < 0) SaveErrorCode(s, status, 0);\n    *size = 0;\n    result = 0;\n  }\n  return result;\n}\n\nBROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* s) {\n  return TO_BROTLI_BOOL(s->state != BROTLI_STATE_UNINITED ||\n      BrotliGetAvailableBits(&s->br) != 0);\n}\n\nBROTLI_BOOL BrotliDecoderIsFinished(const BrotliDecoderState* s) {\n  return TO_BROTLI_BOOL(s->state == BROTLI_STATE_DONE) &&\n      !BrotliDecoderHasMoreOutput(s);\n}\n\nBrotliDecoderErrorCode BrotliDecoderGetErrorCode(const BrotliDecoderState* s) {\n  return (BrotliDecoderErrorCode)s->error_code;\n}\n\nconst char* BrotliDecoderErrorString(BrotliDecoderErrorCode c) {\n  switch (c) {\n#define BROTLI_ERROR_CODE_CASE_(PREFIX, NAME, CODE) \\\n    case BROTLI_DECODER ## PREFIX ## NAME: return #PREFIX #NAME;\n#define BROTLI_NOTHING_\n    BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_CASE_, BROTLI_NOTHING_)\n#undef BROTLI_ERROR_CODE_CASE_\n#undef BROTLI_NOTHING_\n    default: return \"INVALID\";\n  }\n}\n\nuint32_t BrotliDecoderVersion(void) {\n  return BROTLI_VERSION;\n}\n\nvoid BrotliDecoderSetMetadataCallbacks(\n    BrotliDecoderState* state,\n    brotli_decoder_metadata_start_func start_func,\n    brotli_decoder_metadata_chunk_func chunk_func, void* opaque) {\n  state->metadata_start_func = start_func;\n  state->metadata_chunk_func = chunk_func;\n  state->metadata_callback_opaque = opaque;\n}\n\n/* Escalate internal functions visibility; for testing purposes only. */\n#if defined(BROTLI_TEST)\nBROTLI_BOOL BrotliSafeReadSymbolForTest(\n    const HuffmanCode*, BrotliBitReader*, brotli_reg_t*);\nBROTLI_BOOL BrotliSafeReadSymbolForTest(\n    const HuffmanCode* table, BrotliBitReader* br, brotli_reg_t* result) {\n  return SafeReadSymbol(table, br, result);\n}\nvoid BrotliInverseMoveToFrontTransformForTest(\n    uint8_t*, brotli_reg_t, BrotliDecoderState*);\nvoid BrotliInverseMoveToFrontTransformForTest(\n    uint8_t* v, brotli_reg_t l, BrotliDecoderState* s) {\n  InverseMoveToFrontTransform(v, l, s);\n}\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/dec/huffman.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Utilities for building Huffman decoding tables. */\n\n#include \"huffman.h\"\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define BROTLI_REVERSE_BITS_MAX 8\n\n#if defined(BROTLI_RBIT)\n#define BROTLI_REVERSE_BITS_BASE \\\n  ((sizeof(brotli_reg_t) << 3) - BROTLI_REVERSE_BITS_MAX)\n#else\n#define BROTLI_REVERSE_BITS_BASE 0\nstatic BROTLI_MODEL(\"small\")\nuint8_t kReverseBits[1 << BROTLI_REVERSE_BITS_MAX] = {\n  0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,\n  0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,\n  0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,\n  0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,\n  0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,\n  0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,\n  0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,\n  0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,\n  0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,\n  0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,\n  0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,\n  0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,\n  0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,\n  0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,\n  0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,\n  0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,\n  0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,\n  0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,\n  0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,\n  0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,\n  0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,\n  0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,\n  0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,\n  0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,\n  0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,\n  0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,\n  0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,\n  0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,\n  0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,\n  0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,\n  0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,\n  0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF\n};\n#endif  /* BROTLI_RBIT */\n\n#define BROTLI_REVERSE_BITS_LOWEST \\\n  ((brotli_reg_t)1 << (BROTLI_REVERSE_BITS_MAX - 1 + BROTLI_REVERSE_BITS_BASE))\n\n/* Returns reverse(num >> BROTLI_REVERSE_BITS_BASE, BROTLI_REVERSE_BITS_MAX),\n   where reverse(value, len) is the bit-wise reversal of the len least\n   significant bits of value. */\nstatic BROTLI_INLINE brotli_reg_t BrotliReverseBits(brotli_reg_t num) {\n#if defined(BROTLI_RBIT)\n  return BROTLI_RBIT(num);\n#else\n  return kReverseBits[num];\n#endif\n}\n\n/* Stores code in table[0], table[step], table[2*step], ..., table[end] */\n/* Assumes that end is an integer multiple of step */\nstatic BROTLI_INLINE void ReplicateValue(HuffmanCode* table,\n                                         int step, int end,\n                                         HuffmanCode code) {\n  do {\n    end -= step;\n    table[end] = code;\n  } while (end > 0);\n}\n\n/* Returns the table width of the next 2nd level table. |count| is the histogram\n   of bit lengths for the remaining symbols, |len| is the code length of the\n   next processed symbol. */\nstatic BROTLI_INLINE int NextTableBitSize(const uint16_t* const count,\n                                          int len, int root_bits) {\n  int left = 1 << (len - root_bits);\n  while (len < BROTLI_HUFFMAN_MAX_CODE_LENGTH) {\n    left -= count[len];\n    if (left <= 0) break;\n    ++len;\n    left <<= 1;\n  }\n  return len - root_bits;\n}\n\nvoid BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* table,\n                                        const uint8_t* const code_lengths,\n                                        uint16_t* count) {\n  HuffmanCode code;       /* current table entry */\n  int symbol;             /* symbol index in original or sorted table */\n  brotli_reg_t key;       /* prefix code */\n  brotli_reg_t key_step;  /* prefix code addend */\n  int step;               /* step size to replicate values in current table */\n  int table_size;         /* size of current table */\n  int sorted[BROTLI_CODE_LENGTH_CODES];  /* symbols sorted by code length */\n  /* offsets in sorted table for each length */\n  int offset[BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1];\n  int bits;\n  int bits_count;\n  BROTLI_DCHECK(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH <=\n                BROTLI_REVERSE_BITS_MAX);\n  BROTLI_DCHECK(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH == 5);\n\n  /* Generate offsets into sorted symbol table by code length. */\n  symbol = -1;\n  bits = 1;\n  /* BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH == 5 */\n  BROTLI_REPEAT_5({\n    symbol += count[bits];\n    offset[bits] = symbol;\n    bits++;\n  });\n  /* Symbols with code length 0 are placed after all other symbols. */\n  offset[0] = BROTLI_CODE_LENGTH_CODES - 1;\n\n  /* Sort symbols by length, by symbol order within each length. */\n  symbol = BROTLI_CODE_LENGTH_CODES;\n  do {\n    BROTLI_REPEAT_6({\n      symbol--;\n      sorted[offset[code_lengths[symbol]]--] = symbol;\n    });\n  } while (symbol != 0);\n\n  table_size = 1 << BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH;\n\n  /* Special case: all symbols but one have 0 code length. */\n  if (offset[0] == 0) {\n    code = ConstructHuffmanCode(0, (uint16_t)sorted[0]);\n    for (key = 0; key < (brotli_reg_t)table_size; ++key) {\n      table[key] = code;\n    }\n    return;\n  }\n\n  /* Fill in table. */\n  key = 0;\n  key_step = BROTLI_REVERSE_BITS_LOWEST;\n  symbol = 0;\n  bits = 1;\n  step = 2;\n  do {\n    for (bits_count = count[bits]; bits_count != 0; --bits_count) {\n      code = ConstructHuffmanCode((uint8_t)bits, (uint16_t)sorted[symbol++]);\n      ReplicateValue(&table[BrotliReverseBits(key)], step, table_size, code);\n      key += key_step;\n    }\n    step <<= 1;\n    key_step >>= 1;\n  } while (++bits <= BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);\n}\n\nuint32_t BrotliBuildHuffmanTable(HuffmanCode* root_table,\n                                 int root_bits,\n                                 const uint16_t* const symbol_lists,\n                                 uint16_t* count) {\n  HuffmanCode code;       /* current table entry */\n  HuffmanCode* table;     /* next available space in table */\n  int len;                /* current code length */\n  int symbol;             /* symbol index in original or sorted table */\n  brotli_reg_t key;       /* prefix code */\n  brotli_reg_t key_step;  /* prefix code addend */\n  brotli_reg_t sub_key;   /* 2nd level table prefix code */\n  brotli_reg_t sub_key_step;  /* 2nd level table prefix code addend */\n  int step;               /* step size to replicate values in current table */\n  int table_bits;         /* key length of current table */\n  int table_size;         /* size of current table */\n  int total_size;         /* sum of root table size and 2nd level table sizes */\n  int max_length = -1;\n  int bits;\n  int bits_count;\n\n  BROTLI_DCHECK(root_bits <= BROTLI_REVERSE_BITS_MAX);\n  BROTLI_DCHECK(BROTLI_HUFFMAN_MAX_CODE_LENGTH - root_bits <=\n                BROTLI_REVERSE_BITS_MAX);\n\n  while (symbol_lists[max_length] == 0xFFFF) max_length--;\n  max_length += BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1;\n\n  table = root_table;\n  table_bits = root_bits;\n  table_size = 1 << table_bits;\n  total_size = table_size;\n\n  /* Fill in the root table. Reduce the table size to if possible,\n     and create the repetitions by memcpy. */\n  if (table_bits > max_length) {\n    table_bits = max_length;\n    table_size = 1 << table_bits;\n  }\n  key = 0;\n  key_step = BROTLI_REVERSE_BITS_LOWEST;\n  bits = 1;\n  step = 2;\n  do {\n    symbol = bits - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);\n    for (bits_count = count[bits]; bits_count != 0; --bits_count) {\n      symbol = symbol_lists[symbol];\n      code = ConstructHuffmanCode((uint8_t)bits, (uint16_t)symbol);\n      ReplicateValue(&table[BrotliReverseBits(key)], step, table_size, code);\n      key += key_step;\n    }\n    step <<= 1;\n    key_step >>= 1;\n  } while (++bits <= table_bits);\n\n  /* If root_bits != table_bits then replicate to fill the remaining slots. */\n  while (total_size != table_size) {\n    memcpy(&table[table_size], &table[0],\n           (size_t)table_size * sizeof(table[0]));\n    table_size <<= 1;\n  }\n\n  /* Fill in 2nd level tables and add pointers to root table. */\n  key_step = BROTLI_REVERSE_BITS_LOWEST >> (root_bits - 1);\n  sub_key = (BROTLI_REVERSE_BITS_LOWEST << 1);\n  sub_key_step = BROTLI_REVERSE_BITS_LOWEST;\n  for (len = root_bits + 1, step = 2; len <= max_length; ++len) {\n    symbol = len - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);\n    for (; count[len] != 0; --count[len]) {\n      if (sub_key == (BROTLI_REVERSE_BITS_LOWEST << 1U)) {\n        table += table_size;\n        table_bits = NextTableBitSize(count, len, root_bits);\n        table_size = 1 << table_bits;\n        total_size += table_size;\n        sub_key = BrotliReverseBits(key);\n        key += key_step;\n        root_table[sub_key] = ConstructHuffmanCode(\n            (uint8_t)(table_bits + root_bits),\n            (uint16_t)(((size_t)(table - root_table)) - sub_key));\n        sub_key = 0;\n      }\n      symbol = symbol_lists[symbol];\n      code = ConstructHuffmanCode((uint8_t)(len - root_bits), (uint16_t)symbol);\n      ReplicateValue(\n          &table[BrotliReverseBits(sub_key)], step, table_size, code);\n      sub_key += sub_key_step;\n    }\n    step <<= 1;\n    sub_key_step >>= 1;\n  }\n  return (uint32_t)total_size;\n}\n\nuint32_t BrotliBuildSimpleHuffmanTable(HuffmanCode* table,\n                                       int root_bits,\n                                       uint16_t* val,\n                                       uint32_t num_symbols) {\n  uint32_t table_size = 1;\n  const uint32_t goal_size = 1U << root_bits;\n  switch (num_symbols) {\n    case 0:\n      table[0] = ConstructHuffmanCode(0, val[0]);\n      break;\n    case 1:\n      if (val[1] > val[0]) {\n        table[0] = ConstructHuffmanCode(1, val[0]);\n        table[1] = ConstructHuffmanCode(1, val[1]);\n      } else {\n        table[0] = ConstructHuffmanCode(1, val[1]);\n        table[1] = ConstructHuffmanCode(1, val[0]);\n      }\n      table_size = 2;\n      break;\n    case 2:\n      table[0] = ConstructHuffmanCode(1, val[0]);\n      table[2] = ConstructHuffmanCode(1, val[0]);\n      if (val[2] > val[1]) {\n        table[1] = ConstructHuffmanCode(2, val[1]);\n        table[3] = ConstructHuffmanCode(2, val[2]);\n      } else {\n        table[1] = ConstructHuffmanCode(2, val[2]);\n        table[3] = ConstructHuffmanCode(2, val[1]);\n      }\n      table_size = 4;\n      break;\n    case 3: {\n      int i, k;\n      for (i = 0; i < 3; ++i) {\n        for (k = i + 1; k < 4; ++k) {\n          if (val[k] < val[i]) {\n            uint16_t t = val[k];\n            val[k] = val[i];\n            val[i] = t;\n          }\n        }\n      }\n      table[0] = ConstructHuffmanCode(2, val[0]);\n      table[2] = ConstructHuffmanCode(2, val[1]);\n      table[1] = ConstructHuffmanCode(2, val[2]);\n      table[3] = ConstructHuffmanCode(2, val[3]);\n      table_size = 4;\n      break;\n    }\n    case 4: {\n      if (val[3] < val[2]) {\n        uint16_t t = val[3];\n        val[3] = val[2];\n        val[2] = t;\n      }\n      table[0] = ConstructHuffmanCode(1, val[0]);\n      table[1] = ConstructHuffmanCode(2, val[1]);\n      table[2] = ConstructHuffmanCode(1, val[0]);\n      table[3] = ConstructHuffmanCode(3, val[2]);\n      table[4] = ConstructHuffmanCode(1, val[0]);\n      table[5] = ConstructHuffmanCode(2, val[1]);\n      table[6] = ConstructHuffmanCode(1, val[0]);\n      table[7] = ConstructHuffmanCode(3, val[3]);\n      table_size = 8;\n      break;\n    }\n  }\n  while (table_size != goal_size) {\n    memcpy(&table[table_size], &table[0],\n           (size_t)table_size * sizeof(table[0]));\n    table_size <<= 1;\n  }\n  return goal_size;\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/dec/huffman.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Utilities for building Huffman decoding tables. */\n\n#ifndef BROTLI_DEC_HUFFMAN_H_\n#define BROTLI_DEC_HUFFMAN_H_\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define BROTLI_HUFFMAN_MAX_CODE_LENGTH 15\n\n/* BROTLI_NUM_BLOCK_LEN_SYMBOLS == 26 */\n#define BROTLI_HUFFMAN_MAX_SIZE_26 396\n/* BROTLI_MAX_BLOCK_TYPE_SYMBOLS == 258 */\n#define BROTLI_HUFFMAN_MAX_SIZE_258 632\n/* BROTLI_MAX_CONTEXT_MAP_SYMBOLS == 272 */\n#define BROTLI_HUFFMAN_MAX_SIZE_272 646\n\n#define BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH 5\n\n#if ((defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_32)) && \\\n  BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0))\n#define BROTLI_HUFFMAN_CODE_FAST_LOAD\n#endif\n\n#if !defined(BROTLI_HUFFMAN_CODE_FAST_LOAD)\n/* Do not create this struct directly - use the ConstructHuffmanCode\n * constructor below! */\ntypedef struct {\n  uint8_t bits;    /* number of bits used for this symbol */\n  uint16_t value;  /* symbol value or table offset */\n} HuffmanCode;\n\nstatic BROTLI_INLINE HuffmanCode ConstructHuffmanCode(const uint8_t bits,\n    const uint16_t value) {\n  HuffmanCode h;\n  h.bits = bits;\n  h.value = value;\n  return h;\n}\n\n/* Please use the following macros to optimize HuffmanCode accesses in hot\n * paths.\n *\n * For example, assuming |table| contains a HuffmanCode pointer:\n *\n *   BROTLI_HC_MARK_TABLE_FOR_FAST_LOAD(table);\n *   BROTLI_HC_ADJUST_TABLE_INDEX(table, index_into_table);\n *   *bits = BROTLI_HC_GET_BITS(table);\n *   *value = BROTLI_HC_GET_VALUE(table);\n *   BROTLI_HC_ADJUST_TABLE_INDEX(table, offset);\n *   *bits2 = BROTLI_HC_GET_BITS(table);\n *   *value2 = BROTLI_HC_GET_VALUE(table);\n *\n */\n\n#define BROTLI_HC_MARK_TABLE_FOR_FAST_LOAD(H)\n#define BROTLI_HC_ADJUST_TABLE_INDEX(H, V) H += (V)\n\n/* These must be given a HuffmanCode pointer! */\n#define BROTLI_HC_FAST_LOAD_BITS(H) (H->bits)\n#define BROTLI_HC_FAST_LOAD_VALUE(H) (H->value)\n\n#else /* BROTLI_HUFFMAN_CODE_FAST_LOAD */\n\ntypedef BROTLI_ALIGNED(4) uint32_t HuffmanCode;\n\nstatic BROTLI_INLINE HuffmanCode ConstructHuffmanCode(const uint8_t bits,\n    const uint16_t value) {\n  return (HuffmanCode) ((value & 0xFFFF) << 16) | (bits & 0xFF);\n}\n\n#define BROTLI_HC_MARK_TABLE_FOR_FAST_LOAD(H) uint32_t __fastload_##H = (*H)\n#define BROTLI_HC_ADJUST_TABLE_INDEX(H, V) H += (V); __fastload_##H = (*H)\n\n/* These must be given a HuffmanCode pointer! */\n#define BROTLI_HC_FAST_LOAD_BITS(H) ((__fastload_##H) & 0xFF)\n#define BROTLI_HC_FAST_LOAD_VALUE(H) ((__fastload_##H) >> 16)\n#endif /* BROTLI_HUFFMAN_CODE_FAST_LOAD */\n\n/* Builds Huffman lookup table assuming code lengths are in symbol order. */\nBROTLI_INTERNAL void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* root_table,\n    const uint8_t* const code_lengths, uint16_t* count);\n\n/* Builds Huffman lookup table assuming code lengths are in symbol order.\n   Returns size of resulting table. */\nBROTLI_INTERNAL uint32_t BrotliBuildHuffmanTable(HuffmanCode* root_table,\n    int root_bits, const uint16_t* const symbol_lists, uint16_t* count);\n\n/* Builds a simple Huffman table. The |num_symbols| parameter is to be\n   interpreted as follows: 0 means 1 symbol, 1 means 2 symbols,\n   2 means 3 symbols, 3 means 4 symbols with lengths [2, 2, 2, 2],\n   4 means 4 symbols with lengths [1, 2, 3, 3]. */\nBROTLI_INTERNAL uint32_t BrotliBuildSimpleHuffmanTable(HuffmanCode* table,\n    int root_bits, uint16_t* symbols, uint32_t num_symbols);\n\n/* Contains a collection of Huffman trees with the same alphabet size. */\n/* alphabet_size_limit is needed due to simple codes, since\n   log2(alphabet_size_max) could be greater than log2(alphabet_size_limit). */\ntypedef struct {\n  HuffmanCode** htrees;\n  HuffmanCode* codes;\n  uint16_t alphabet_size_max;\n  uint16_t alphabet_size_limit;\n  uint16_t num_htrees;\n} HuffmanTreeGroup;\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_DEC_HUFFMAN_H_ */\n"
  },
  {
    "path": "c/dec/prefix.c",
    "content": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"prefix.h\"\n\n#include \"../common/platform.h\"  /* IWYU pragma: keep */\n#include \"../common/static_init.h\"\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\n#include \"../common/constants.h\"\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#if (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_NONE)\n/* Embed kCmdLut. */\n#include \"prefix_inc.h\"\n#else\nBROTLI_COLD BROTLI_BOOL BrotliDecoderInitCmdLut(CmdLutElement* items) {\n  static const uint8_t kInsertLengthExtraBits[24] = {\n      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03,\n      0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0E, 0x18};\n  static const uint8_t kCopyLengthExtraBits[24] = {\n      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02,\n      0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x18};\n  static const uint8_t kCellPos[11] = {0, 1, 0, 1, 8, 9, 2, 16, 10, 17, 18};\n\n  uint16_t insert_length_offsets[24];\n  uint16_t copy_length_offsets[24];\n  insert_length_offsets[0] = 0;\n  copy_length_offsets[0] = 2;\n  for (size_t i = 0; i < 23; ++i) {\n    insert_length_offsets[i + 1] =\n        insert_length_offsets[i] + (uint16_t)(1u << kInsertLengthExtraBits[i]);\n    copy_length_offsets[i + 1] =\n        copy_length_offsets[i] + (uint16_t)(1u << kCopyLengthExtraBits[i]);\n  }\n\n  for (size_t symbol = 0; symbol < BROTLI_NUM_COMMAND_SYMBOLS; ++symbol) {\n    CmdLutElement* item = items + symbol;\n    const size_t cell_idx = symbol >> 6;\n    const size_t cell_pos = kCellPos[cell_idx];\n    const size_t copy_code = ((cell_pos << 3) & 0x18) + (symbol & 0x7);\n    const uint16_t copy_len_offset = copy_length_offsets[copy_code];\n    const size_t insert_code = (cell_pos & 0x18) + ((symbol >> 3) & 0x7);\n    item->copy_len_extra_bits = kCopyLengthExtraBits[copy_code];\n    item->context = (copy_len_offset > 4) ? 3 : ((uint8_t)copy_len_offset - 2);\n    item->copy_len_offset = copy_len_offset;\n    item->distance_code = (cell_idx >= 2) ? -1 : 0;\n    item->insert_len_extra_bits = kInsertLengthExtraBits[insert_code];\n    item->insert_len_offset = insert_length_offsets[insert_code];\n  }\n  return BROTLI_TRUE;\n}\n\nBROTLI_MODEL(\"small\")\nCmdLutElement kCmdLut[BROTLI_NUM_COMMAND_SYMBOLS];\n#endif  /* BROTLI_STATIC_INIT */\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/dec/prefix.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Lookup tables to map prefix codes to value ranges. This is used during\n   decoding of the block lengths, literal insertion lengths and copy lengths. */\n\n#ifndef BROTLI_DEC_PREFIX_H_\n#define BROTLI_DEC_PREFIX_H_\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"  /* IWYU pragma: keep */\n#include \"../common/static_init.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\ntypedef struct CmdLutElement {\n  uint8_t insert_len_extra_bits;\n  uint8_t copy_len_extra_bits;\n  int8_t distance_code;\n  uint8_t context;\n  uint16_t insert_len_offset;\n  uint16_t copy_len_offset;\n} CmdLutElement;\n\n#if (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_NONE)\nBROTLI_INTERNAL extern const BROTLI_MODEL(\"small\")\n    CmdLutElement kCmdLut[BROTLI_NUM_COMMAND_SYMBOLS];\n#else\nBROTLI_INTERNAL BROTLI_BOOL BrotliDecoderInitCmdLut(CmdLutElement* items);\nBROTLI_INTERNAL extern BROTLI_MODEL(\"small\")\n    CmdLutElement kCmdLut[BROTLI_NUM_COMMAND_SYMBOLS];\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_DEC_PREFIX_H_ */\n"
  },
  {
    "path": "c/dec/prefix_inc.h",
    "content": "const BROTLI_MODEL(\"small\")\nCmdLutElement kCmdLut[BROTLI_NUM_COMMAND_SYMBOLS] = {\n  { 0x00, 0x00, 0, 0x00, 0x0000, 0x0002 },\n  { 0x00, 0x00, 0, 0x01, 0x0000, 0x0003 },\n  { 0x00, 0x00, 0, 0x02, 0x0000, 0x0004 },\n  { 0x00, 0x00, 0, 0x03, 0x0000, 0x0005 },\n  { 0x00, 0x00, 0, 0x03, 0x0000, 0x0006 },\n  { 0x00, 0x00, 0, 0x03, 0x0000, 0x0007 },\n  { 0x00, 0x00, 0, 0x03, 0x0000, 0x0008 },\n  { 0x00, 0x00, 0, 0x03, 0x0000, 0x0009 },\n  { 0x00, 0x00, 0, 0x00, 0x0001, 0x0002 },\n  { 0x00, 0x00, 0, 0x01, 0x0001, 0x0003 },\n  { 0x00, 0x00, 0, 0x02, 0x0001, 0x0004 },\n  { 0x00, 0x00, 0, 0x03, 0x0001, 0x0005 },\n  { 0x00, 0x00, 0, 0x03, 0x0001, 0x0006 },\n  { 0x00, 0x00, 0, 0x03, 0x0001, 0x0007 },\n  { 0x00, 0x00, 0, 0x03, 0x0001, 0x0008 },\n  { 0x00, 0x00, 0, 0x03, 0x0001, 0x0009 },\n  { 0x00, 0x00, 0, 0x00, 0x0002, 0x0002 },\n  { 0x00, 0x00, 0, 0x01, 0x0002, 0x0003 },\n  { 0x00, 0x00, 0, 0x02, 0x0002, 0x0004 },\n  { 0x00, 0x00, 0, 0x03, 0x0002, 0x0005 },\n  { 0x00, 0x00, 0, 0x03, 0x0002, 0x0006 },\n  { 0x00, 0x00, 0, 0x03, 0x0002, 0x0007 },\n  { 0x00, 0x00, 0, 0x03, 0x0002, 0x0008 },\n  { 0x00, 0x00, 0, 0x03, 0x0002, 0x0009 },\n  { 0x00, 0x00, 0, 0x00, 0x0003, 0x0002 },\n  { 0x00, 0x00, 0, 0x01, 0x0003, 0x0003 },\n  { 0x00, 0x00, 0, 0x02, 0x0003, 0x0004 },\n  { 0x00, 0x00, 0, 0x03, 0x0003, 0x0005 },\n  { 0x00, 0x00, 0, 0x03, 0x0003, 0x0006 },\n  { 0x00, 0x00, 0, 0x03, 0x0003, 0x0007 },\n  { 0x00, 0x00, 0, 0x03, 0x0003, 0x0008 },\n  { 0x00, 0x00, 0, 0x03, 0x0003, 0x0009 },\n  { 0x00, 0x00, 0, 0x00, 0x0004, 0x0002 },\n  { 0x00, 0x00, 0, 0x01, 0x0004, 0x0003 },\n  { 0x00, 0x00, 0, 0x02, 0x0004, 0x0004 },\n  { 0x00, 0x00, 0, 0x03, 0x0004, 0x0005 },\n  { 0x00, 0x00, 0, 0x03, 0x0004, 0x0006 },\n  { 0x00, 0x00, 0, 0x03, 0x0004, 0x0007 },\n  { 0x00, 0x00, 0, 0x03, 0x0004, 0x0008 },\n  { 0x00, 0x00, 0, 0x03, 0x0004, 0x0009 },\n  { 0x00, 0x00, 0, 0x00, 0x0005, 0x0002 },\n  { 0x00, 0x00, 0, 0x01, 0x0005, 0x0003 },\n  { 0x00, 0x00, 0, 0x02, 0x0005, 0x0004 },\n  { 0x00, 0x00, 0, 0x03, 0x0005, 0x0005 },\n  { 0x00, 0x00, 0, 0x03, 0x0005, 0x0006 },\n  { 0x00, 0x00, 0, 0x03, 0x0005, 0x0007 },\n  { 0x00, 0x00, 0, 0x03, 0x0005, 0x0008 },\n  { 0x00, 0x00, 0, 0x03, 0x0005, 0x0009 },\n  { 0x01, 0x00, 0, 0x00, 0x0006, 0x0002 },\n  { 0x01, 0x00, 0, 0x01, 0x0006, 0x0003 },\n  { 0x01, 0x00, 0, 0x02, 0x0006, 0x0004 },\n  { 0x01, 0x00, 0, 0x03, 0x0006, 0x0005 },\n  { 0x01, 0x00, 0, 0x03, 0x0006, 0x0006 },\n  { 0x01, 0x00, 0, 0x03, 0x0006, 0x0007 },\n  { 0x01, 0x00, 0, 0x03, 0x0006, 0x0008 },\n  { 0x01, 0x00, 0, 0x03, 0x0006, 0x0009 },\n  { 0x01, 0x00, 0, 0x00, 0x0008, 0x0002 },\n  { 0x01, 0x00, 0, 0x01, 0x0008, 0x0003 },\n  { 0x01, 0x00, 0, 0x02, 0x0008, 0x0004 },\n  { 0x01, 0x00, 0, 0x03, 0x0008, 0x0005 },\n  { 0x01, 0x00, 0, 0x03, 0x0008, 0x0006 },\n  { 0x01, 0x00, 0, 0x03, 0x0008, 0x0007 },\n  { 0x01, 0x00, 0, 0x03, 0x0008, 0x0008 },\n  { 0x01, 0x00, 0, 0x03, 0x0008, 0x0009 },\n  { 0x00, 0x01, 0, 0x03, 0x0000, 0x000a },\n  { 0x00, 0x01, 0, 0x03, 0x0000, 0x000c },\n  { 0x00, 0x02, 0, 0x03, 0x0000, 0x000e },\n  { 0x00, 0x02, 0, 0x03, 0x0000, 0x0012 },\n  { 0x00, 0x03, 0, 0x03, 0x0000, 0x0016 },\n  { 0x00, 0x03, 0, 0x03, 0x0000, 0x001e },\n  { 0x00, 0x04, 0, 0x03, 0x0000, 0x0026 },\n  { 0x00, 0x04, 0, 0x03, 0x0000, 0x0036 },\n  { 0x00, 0x01, 0, 0x03, 0x0001, 0x000a },\n  { 0x00, 0x01, 0, 0x03, 0x0001, 0x000c },\n  { 0x00, 0x02, 0, 0x03, 0x0001, 0x000e },\n  { 0x00, 0x02, 0, 0x03, 0x0001, 0x0012 },\n  { 0x00, 0x03, 0, 0x03, 0x0001, 0x0016 },\n  { 0x00, 0x03, 0, 0x03, 0x0001, 0x001e },\n  { 0x00, 0x04, 0, 0x03, 0x0001, 0x0026 },\n  { 0x00, 0x04, 0, 0x03, 0x0001, 0x0036 },\n  { 0x00, 0x01, 0, 0x03, 0x0002, 0x000a },\n  { 0x00, 0x01, 0, 0x03, 0x0002, 0x000c },\n  { 0x00, 0x02, 0, 0x03, 0x0002, 0x000e },\n  { 0x00, 0x02, 0, 0x03, 0x0002, 0x0012 },\n  { 0x00, 0x03, 0, 0x03, 0x0002, 0x0016 },\n  { 0x00, 0x03, 0, 0x03, 0x0002, 0x001e },\n  { 0x00, 0x04, 0, 0x03, 0x0002, 0x0026 },\n  { 0x00, 0x04, 0, 0x03, 0x0002, 0x0036 },\n  { 0x00, 0x01, 0, 0x03, 0x0003, 0x000a },\n  { 0x00, 0x01, 0, 0x03, 0x0003, 0x000c },\n  { 0x00, 0x02, 0, 0x03, 0x0003, 0x000e },\n  { 0x00, 0x02, 0, 0x03, 0x0003, 0x0012 },\n  { 0x00, 0x03, 0, 0x03, 0x0003, 0x0016 },\n  { 0x00, 0x03, 0, 0x03, 0x0003, 0x001e },\n  { 0x00, 0x04, 0, 0x03, 0x0003, 0x0026 },\n  { 0x00, 0x04, 0, 0x03, 0x0003, 0x0036 },\n  { 0x00, 0x01, 0, 0x03, 0x0004, 0x000a },\n  { 0x00, 0x01, 0, 0x03, 0x0004, 0x000c },\n  { 0x00, 0x02, 0, 0x03, 0x0004, 0x000e },\n  { 0x00, 0x02, 0, 0x03, 0x0004, 0x0012 },\n  { 0x00, 0x03, 0, 0x03, 0x0004, 0x0016 },\n  { 0x00, 0x03, 0, 0x03, 0x0004, 0x001e },\n  { 0x00, 0x04, 0, 0x03, 0x0004, 0x0026 },\n  { 0x00, 0x04, 0, 0x03, 0x0004, 0x0036 },\n  { 0x00, 0x01, 0, 0x03, 0x0005, 0x000a },\n  { 0x00, 0x01, 0, 0x03, 0x0005, 0x000c },\n  { 0x00, 0x02, 0, 0x03, 0x0005, 0x000e },\n  { 0x00, 0x02, 0, 0x03, 0x0005, 0x0012 },\n  { 0x00, 0x03, 0, 0x03, 0x0005, 0x0016 },\n  { 0x00, 0x03, 0, 0x03, 0x0005, 0x001e },\n  { 0x00, 0x04, 0, 0x03, 0x0005, 0x0026 },\n  { 0x00, 0x04, 0, 0x03, 0x0005, 0x0036 },\n  { 0x01, 0x01, 0, 0x03, 0x0006, 0x000a },\n  { 0x01, 0x01, 0, 0x03, 0x0006, 0x000c },\n  { 0x01, 0x02, 0, 0x03, 0x0006, 0x000e },\n  { 0x01, 0x02, 0, 0x03, 0x0006, 0x0012 },\n  { 0x01, 0x03, 0, 0x03, 0x0006, 0x0016 },\n  { 0x01, 0x03, 0, 0x03, 0x0006, 0x001e },\n  { 0x01, 0x04, 0, 0x03, 0x0006, 0x0026 },\n  { 0x01, 0x04, 0, 0x03, 0x0006, 0x0036 },\n  { 0x01, 0x01, 0, 0x03, 0x0008, 0x000a },\n  { 0x01, 0x01, 0, 0x03, 0x0008, 0x000c },\n  { 0x01, 0x02, 0, 0x03, 0x0008, 0x000e },\n  { 0x01, 0x02, 0, 0x03, 0x0008, 0x0012 },\n  { 0x01, 0x03, 0, 0x03, 0x0008, 0x0016 },\n  { 0x01, 0x03, 0, 0x03, 0x0008, 0x001e },\n  { 0x01, 0x04, 0, 0x03, 0x0008, 0x0026 },\n  { 0x01, 0x04, 0, 0x03, 0x0008, 0x0036 },\n  { 0x00, 0x00, -1, 0x00, 0x0000, 0x0002 },\n  { 0x00, 0x00, -1, 0x01, 0x0000, 0x0003 },\n  { 0x00, 0x00, -1, 0x02, 0x0000, 0x0004 },\n  { 0x00, 0x00, -1, 0x03, 0x0000, 0x0005 },\n  { 0x00, 0x00, -1, 0x03, 0x0000, 0x0006 },\n  { 0x00, 0x00, -1, 0x03, 0x0000, 0x0007 },\n  { 0x00, 0x00, -1, 0x03, 0x0000, 0x0008 },\n  { 0x00, 0x00, -1, 0x03, 0x0000, 0x0009 },\n  { 0x00, 0x00, -1, 0x00, 0x0001, 0x0002 },\n  { 0x00, 0x00, -1, 0x01, 0x0001, 0x0003 },\n  { 0x00, 0x00, -1, 0x02, 0x0001, 0x0004 },\n  { 0x00, 0x00, -1, 0x03, 0x0001, 0x0005 },\n  { 0x00, 0x00, -1, 0x03, 0x0001, 0x0006 },\n  { 0x00, 0x00, -1, 0x03, 0x0001, 0x0007 },\n  { 0x00, 0x00, -1, 0x03, 0x0001, 0x0008 },\n  { 0x00, 0x00, -1, 0x03, 0x0001, 0x0009 },\n  { 0x00, 0x00, -1, 0x00, 0x0002, 0x0002 },\n  { 0x00, 0x00, -1, 0x01, 0x0002, 0x0003 },\n  { 0x00, 0x00, -1, 0x02, 0x0002, 0x0004 },\n  { 0x00, 0x00, -1, 0x03, 0x0002, 0x0005 },\n  { 0x00, 0x00, -1, 0x03, 0x0002, 0x0006 },\n  { 0x00, 0x00, -1, 0x03, 0x0002, 0x0007 },\n  { 0x00, 0x00, -1, 0x03, 0x0002, 0x0008 },\n  { 0x00, 0x00, -1, 0x03, 0x0002, 0x0009 },\n  { 0x00, 0x00, -1, 0x00, 0x0003, 0x0002 },\n  { 0x00, 0x00, -1, 0x01, 0x0003, 0x0003 },\n  { 0x00, 0x00, -1, 0x02, 0x0003, 0x0004 },\n  { 0x00, 0x00, -1, 0x03, 0x0003, 0x0005 },\n  { 0x00, 0x00, -1, 0x03, 0x0003, 0x0006 },\n  { 0x00, 0x00, -1, 0x03, 0x0003, 0x0007 },\n  { 0x00, 0x00, -1, 0x03, 0x0003, 0x0008 },\n  { 0x00, 0x00, -1, 0x03, 0x0003, 0x0009 },\n  { 0x00, 0x00, -1, 0x00, 0x0004, 0x0002 },\n  { 0x00, 0x00, -1, 0x01, 0x0004, 0x0003 },\n  { 0x00, 0x00, -1, 0x02, 0x0004, 0x0004 },\n  { 0x00, 0x00, -1, 0x03, 0x0004, 0x0005 },\n  { 0x00, 0x00, -1, 0x03, 0x0004, 0x0006 },\n  { 0x00, 0x00, -1, 0x03, 0x0004, 0x0007 },\n  { 0x00, 0x00, -1, 0x03, 0x0004, 0x0008 },\n  { 0x00, 0x00, -1, 0x03, 0x0004, 0x0009 },\n  { 0x00, 0x00, -1, 0x00, 0x0005, 0x0002 },\n  { 0x00, 0x00, -1, 0x01, 0x0005, 0x0003 },\n  { 0x00, 0x00, -1, 0x02, 0x0005, 0x0004 },\n  { 0x00, 0x00, -1, 0x03, 0x0005, 0x0005 },\n  { 0x00, 0x00, -1, 0x03, 0x0005, 0x0006 },\n  { 0x00, 0x00, -1, 0x03, 0x0005, 0x0007 },\n  { 0x00, 0x00, -1, 0x03, 0x0005, 0x0008 },\n  { 0x00, 0x00, -1, 0x03, 0x0005, 0x0009 },\n  { 0x01, 0x00, -1, 0x00, 0x0006, 0x0002 },\n  { 0x01, 0x00, -1, 0x01, 0x0006, 0x0003 },\n  { 0x01, 0x00, -1, 0x02, 0x0006, 0x0004 },\n  { 0x01, 0x00, -1, 0x03, 0x0006, 0x0005 },\n  { 0x01, 0x00, -1, 0x03, 0x0006, 0x0006 },\n  { 0x01, 0x00, -1, 0x03, 0x0006, 0x0007 },\n  { 0x01, 0x00, -1, 0x03, 0x0006, 0x0008 },\n  { 0x01, 0x00, -1, 0x03, 0x0006, 0x0009 },\n  { 0x01, 0x00, -1, 0x00, 0x0008, 0x0002 },\n  { 0x01, 0x00, -1, 0x01, 0x0008, 0x0003 },\n  { 0x01, 0x00, -1, 0x02, 0x0008, 0x0004 },\n  { 0x01, 0x00, -1, 0x03, 0x0008, 0x0005 },\n  { 0x01, 0x00, -1, 0x03, 0x0008, 0x0006 },\n  { 0x01, 0x00, -1, 0x03, 0x0008, 0x0007 },\n  { 0x01, 0x00, -1, 0x03, 0x0008, 0x0008 },\n  { 0x01, 0x00, -1, 0x03, 0x0008, 0x0009 },\n  { 0x00, 0x01, -1, 0x03, 0x0000, 0x000a },\n  { 0x00, 0x01, -1, 0x03, 0x0000, 0x000c },\n  { 0x00, 0x02, -1, 0x03, 0x0000, 0x000e },\n  { 0x00, 0x02, -1, 0x03, 0x0000, 0x0012 },\n  { 0x00, 0x03, -1, 0x03, 0x0000, 0x0016 },\n  { 0x00, 0x03, -1, 0x03, 0x0000, 0x001e },\n  { 0x00, 0x04, -1, 0x03, 0x0000, 0x0026 },\n  { 0x00, 0x04, -1, 0x03, 0x0000, 0x0036 },\n  { 0x00, 0x01, -1, 0x03, 0x0001, 0x000a },\n  { 0x00, 0x01, -1, 0x03, 0x0001, 0x000c },\n  { 0x00, 0x02, -1, 0x03, 0x0001, 0x000e },\n  { 0x00, 0x02, -1, 0x03, 0x0001, 0x0012 },\n  { 0x00, 0x03, -1, 0x03, 0x0001, 0x0016 },\n  { 0x00, 0x03, -1, 0x03, 0x0001, 0x001e },\n  { 0x00, 0x04, -1, 0x03, 0x0001, 0x0026 },\n  { 0x00, 0x04, -1, 0x03, 0x0001, 0x0036 },\n  { 0x00, 0x01, -1, 0x03, 0x0002, 0x000a },\n  { 0x00, 0x01, -1, 0x03, 0x0002, 0x000c },\n  { 0x00, 0x02, -1, 0x03, 0x0002, 0x000e },\n  { 0x00, 0x02, -1, 0x03, 0x0002, 0x0012 },\n  { 0x00, 0x03, -1, 0x03, 0x0002, 0x0016 },\n  { 0x00, 0x03, -1, 0x03, 0x0002, 0x001e },\n  { 0x00, 0x04, -1, 0x03, 0x0002, 0x0026 },\n  { 0x00, 0x04, -1, 0x03, 0x0002, 0x0036 },\n  { 0x00, 0x01, -1, 0x03, 0x0003, 0x000a },\n  { 0x00, 0x01, -1, 0x03, 0x0003, 0x000c },\n  { 0x00, 0x02, -1, 0x03, 0x0003, 0x000e },\n  { 0x00, 0x02, -1, 0x03, 0x0003, 0x0012 },\n  { 0x00, 0x03, -1, 0x03, 0x0003, 0x0016 },\n  { 0x00, 0x03, -1, 0x03, 0x0003, 0x001e },\n  { 0x00, 0x04, -1, 0x03, 0x0003, 0x0026 },\n  { 0x00, 0x04, -1, 0x03, 0x0003, 0x0036 },\n  { 0x00, 0x01, -1, 0x03, 0x0004, 0x000a },\n  { 0x00, 0x01, -1, 0x03, 0x0004, 0x000c },\n  { 0x00, 0x02, -1, 0x03, 0x0004, 0x000e },\n  { 0x00, 0x02, -1, 0x03, 0x0004, 0x0012 },\n  { 0x00, 0x03, -1, 0x03, 0x0004, 0x0016 },\n  { 0x00, 0x03, -1, 0x03, 0x0004, 0x001e },\n  { 0x00, 0x04, -1, 0x03, 0x0004, 0x0026 },\n  { 0x00, 0x04, -1, 0x03, 0x0004, 0x0036 },\n  { 0x00, 0x01, -1, 0x03, 0x0005, 0x000a },\n  { 0x00, 0x01, -1, 0x03, 0x0005, 0x000c },\n  { 0x00, 0x02, -1, 0x03, 0x0005, 0x000e },\n  { 0x00, 0x02, -1, 0x03, 0x0005, 0x0012 },\n  { 0x00, 0x03, -1, 0x03, 0x0005, 0x0016 },\n  { 0x00, 0x03, -1, 0x03, 0x0005, 0x001e },\n  { 0x00, 0x04, -1, 0x03, 0x0005, 0x0026 },\n  { 0x00, 0x04, -1, 0x03, 0x0005, 0x0036 },\n  { 0x01, 0x01, -1, 0x03, 0x0006, 0x000a },\n  { 0x01, 0x01, -1, 0x03, 0x0006, 0x000c },\n  { 0x01, 0x02, -1, 0x03, 0x0006, 0x000e },\n  { 0x01, 0x02, -1, 0x03, 0x0006, 0x0012 },\n  { 0x01, 0x03, -1, 0x03, 0x0006, 0x0016 },\n  { 0x01, 0x03, -1, 0x03, 0x0006, 0x001e },\n  { 0x01, 0x04, -1, 0x03, 0x0006, 0x0026 },\n  { 0x01, 0x04, -1, 0x03, 0x0006, 0x0036 },\n  { 0x01, 0x01, -1, 0x03, 0x0008, 0x000a },\n  { 0x01, 0x01, -1, 0x03, 0x0008, 0x000c },\n  { 0x01, 0x02, -1, 0x03, 0x0008, 0x000e },\n  { 0x01, 0x02, -1, 0x03, 0x0008, 0x0012 },\n  { 0x01, 0x03, -1, 0x03, 0x0008, 0x0016 },\n  { 0x01, 0x03, -1, 0x03, 0x0008, 0x001e },\n  { 0x01, 0x04, -1, 0x03, 0x0008, 0x0026 },\n  { 0x01, 0x04, -1, 0x03, 0x0008, 0x0036 },\n  { 0x02, 0x00, -1, 0x00, 0x000a, 0x0002 },\n  { 0x02, 0x00, -1, 0x01, 0x000a, 0x0003 },\n  { 0x02, 0x00, -1, 0x02, 0x000a, 0x0004 },\n  { 0x02, 0x00, -1, 0x03, 0x000a, 0x0005 },\n  { 0x02, 0x00, -1, 0x03, 0x000a, 0x0006 },\n  { 0x02, 0x00, -1, 0x03, 0x000a, 0x0007 },\n  { 0x02, 0x00, -1, 0x03, 0x000a, 0x0008 },\n  { 0x02, 0x00, -1, 0x03, 0x000a, 0x0009 },\n  { 0x02, 0x00, -1, 0x00, 0x000e, 0x0002 },\n  { 0x02, 0x00, -1, 0x01, 0x000e, 0x0003 },\n  { 0x02, 0x00, -1, 0x02, 0x000e, 0x0004 },\n  { 0x02, 0x00, -1, 0x03, 0x000e, 0x0005 },\n  { 0x02, 0x00, -1, 0x03, 0x000e, 0x0006 },\n  { 0x02, 0x00, -1, 0x03, 0x000e, 0x0007 },\n  { 0x02, 0x00, -1, 0x03, 0x000e, 0x0008 },\n  { 0x02, 0x00, -1, 0x03, 0x000e, 0x0009 },\n  { 0x03, 0x00, -1, 0x00, 0x0012, 0x0002 },\n  { 0x03, 0x00, -1, 0x01, 0x0012, 0x0003 },\n  { 0x03, 0x00, -1, 0x02, 0x0012, 0x0004 },\n  { 0x03, 0x00, -1, 0x03, 0x0012, 0x0005 },\n  { 0x03, 0x00, -1, 0x03, 0x0012, 0x0006 },\n  { 0x03, 0x00, -1, 0x03, 0x0012, 0x0007 },\n  { 0x03, 0x00, -1, 0x03, 0x0012, 0x0008 },\n  { 0x03, 0x00, -1, 0x03, 0x0012, 0x0009 },\n  { 0x03, 0x00, -1, 0x00, 0x001a, 0x0002 },\n  { 0x03, 0x00, -1, 0x01, 0x001a, 0x0003 },\n  { 0x03, 0x00, -1, 0x02, 0x001a, 0x0004 },\n  { 0x03, 0x00, -1, 0x03, 0x001a, 0x0005 },\n  { 0x03, 0x00, -1, 0x03, 0x001a, 0x0006 },\n  { 0x03, 0x00, -1, 0x03, 0x001a, 0x0007 },\n  { 0x03, 0x00, -1, 0x03, 0x001a, 0x0008 },\n  { 0x03, 0x00, -1, 0x03, 0x001a, 0x0009 },\n  { 0x04, 0x00, -1, 0x00, 0x0022, 0x0002 },\n  { 0x04, 0x00, -1, 0x01, 0x0022, 0x0003 },\n  { 0x04, 0x00, -1, 0x02, 0x0022, 0x0004 },\n  { 0x04, 0x00, -1, 0x03, 0x0022, 0x0005 },\n  { 0x04, 0x00, -1, 0x03, 0x0022, 0x0006 },\n  { 0x04, 0x00, -1, 0x03, 0x0022, 0x0007 },\n  { 0x04, 0x00, -1, 0x03, 0x0022, 0x0008 },\n  { 0x04, 0x00, -1, 0x03, 0x0022, 0x0009 },\n  { 0x04, 0x00, -1, 0x00, 0x0032, 0x0002 },\n  { 0x04, 0x00, -1, 0x01, 0x0032, 0x0003 },\n  { 0x04, 0x00, -1, 0x02, 0x0032, 0x0004 },\n  { 0x04, 0x00, -1, 0x03, 0x0032, 0x0005 },\n  { 0x04, 0x00, -1, 0x03, 0x0032, 0x0006 },\n  { 0x04, 0x00, -1, 0x03, 0x0032, 0x0007 },\n  { 0x04, 0x00, -1, 0x03, 0x0032, 0x0008 },\n  { 0x04, 0x00, -1, 0x03, 0x0032, 0x0009 },\n  { 0x05, 0x00, -1, 0x00, 0x0042, 0x0002 },\n  { 0x05, 0x00, -1, 0x01, 0x0042, 0x0003 },\n  { 0x05, 0x00, -1, 0x02, 0x0042, 0x0004 },\n  { 0x05, 0x00, -1, 0x03, 0x0042, 0x0005 },\n  { 0x05, 0x00, -1, 0x03, 0x0042, 0x0006 },\n  { 0x05, 0x00, -1, 0x03, 0x0042, 0x0007 },\n  { 0x05, 0x00, -1, 0x03, 0x0042, 0x0008 },\n  { 0x05, 0x00, -1, 0x03, 0x0042, 0x0009 },\n  { 0x05, 0x00, -1, 0x00, 0x0062, 0x0002 },\n  { 0x05, 0x00, -1, 0x01, 0x0062, 0x0003 },\n  { 0x05, 0x00, -1, 0x02, 0x0062, 0x0004 },\n  { 0x05, 0x00, -1, 0x03, 0x0062, 0x0005 },\n  { 0x05, 0x00, -1, 0x03, 0x0062, 0x0006 },\n  { 0x05, 0x00, -1, 0x03, 0x0062, 0x0007 },\n  { 0x05, 0x00, -1, 0x03, 0x0062, 0x0008 },\n  { 0x05, 0x00, -1, 0x03, 0x0062, 0x0009 },\n  { 0x02, 0x01, -1, 0x03, 0x000a, 0x000a },\n  { 0x02, 0x01, -1, 0x03, 0x000a, 0x000c },\n  { 0x02, 0x02, -1, 0x03, 0x000a, 0x000e },\n  { 0x02, 0x02, -1, 0x03, 0x000a, 0x0012 },\n  { 0x02, 0x03, -1, 0x03, 0x000a, 0x0016 },\n  { 0x02, 0x03, -1, 0x03, 0x000a, 0x001e },\n  { 0x02, 0x04, -1, 0x03, 0x000a, 0x0026 },\n  { 0x02, 0x04, -1, 0x03, 0x000a, 0x0036 },\n  { 0x02, 0x01, -1, 0x03, 0x000e, 0x000a },\n  { 0x02, 0x01, -1, 0x03, 0x000e, 0x000c },\n  { 0x02, 0x02, -1, 0x03, 0x000e, 0x000e },\n  { 0x02, 0x02, -1, 0x03, 0x000e, 0x0012 },\n  { 0x02, 0x03, -1, 0x03, 0x000e, 0x0016 },\n  { 0x02, 0x03, -1, 0x03, 0x000e, 0x001e },\n  { 0x02, 0x04, -1, 0x03, 0x000e, 0x0026 },\n  { 0x02, 0x04, -1, 0x03, 0x000e, 0x0036 },\n  { 0x03, 0x01, -1, 0x03, 0x0012, 0x000a },\n  { 0x03, 0x01, -1, 0x03, 0x0012, 0x000c },\n  { 0x03, 0x02, -1, 0x03, 0x0012, 0x000e },\n  { 0x03, 0x02, -1, 0x03, 0x0012, 0x0012 },\n  { 0x03, 0x03, -1, 0x03, 0x0012, 0x0016 },\n  { 0x03, 0x03, -1, 0x03, 0x0012, 0x001e },\n  { 0x03, 0x04, -1, 0x03, 0x0012, 0x0026 },\n  { 0x03, 0x04, -1, 0x03, 0x0012, 0x0036 },\n  { 0x03, 0x01, -1, 0x03, 0x001a, 0x000a },\n  { 0x03, 0x01, -1, 0x03, 0x001a, 0x000c },\n  { 0x03, 0x02, -1, 0x03, 0x001a, 0x000e },\n  { 0x03, 0x02, -1, 0x03, 0x001a, 0x0012 },\n  { 0x03, 0x03, -1, 0x03, 0x001a, 0x0016 },\n  { 0x03, 0x03, -1, 0x03, 0x001a, 0x001e },\n  { 0x03, 0x04, -1, 0x03, 0x001a, 0x0026 },\n  { 0x03, 0x04, -1, 0x03, 0x001a, 0x0036 },\n  { 0x04, 0x01, -1, 0x03, 0x0022, 0x000a },\n  { 0x04, 0x01, -1, 0x03, 0x0022, 0x000c },\n  { 0x04, 0x02, -1, 0x03, 0x0022, 0x000e },\n  { 0x04, 0x02, -1, 0x03, 0x0022, 0x0012 },\n  { 0x04, 0x03, -1, 0x03, 0x0022, 0x0016 },\n  { 0x04, 0x03, -1, 0x03, 0x0022, 0x001e },\n  { 0x04, 0x04, -1, 0x03, 0x0022, 0x0026 },\n  { 0x04, 0x04, -1, 0x03, 0x0022, 0x0036 },\n  { 0x04, 0x01, -1, 0x03, 0x0032, 0x000a },\n  { 0x04, 0x01, -1, 0x03, 0x0032, 0x000c },\n  { 0x04, 0x02, -1, 0x03, 0x0032, 0x000e },\n  { 0x04, 0x02, -1, 0x03, 0x0032, 0x0012 },\n  { 0x04, 0x03, -1, 0x03, 0x0032, 0x0016 },\n  { 0x04, 0x03, -1, 0x03, 0x0032, 0x001e },\n  { 0x04, 0x04, -1, 0x03, 0x0032, 0x0026 },\n  { 0x04, 0x04, -1, 0x03, 0x0032, 0x0036 },\n  { 0x05, 0x01, -1, 0x03, 0x0042, 0x000a },\n  { 0x05, 0x01, -1, 0x03, 0x0042, 0x000c },\n  { 0x05, 0x02, -1, 0x03, 0x0042, 0x000e },\n  { 0x05, 0x02, -1, 0x03, 0x0042, 0x0012 },\n  { 0x05, 0x03, -1, 0x03, 0x0042, 0x0016 },\n  { 0x05, 0x03, -1, 0x03, 0x0042, 0x001e },\n  { 0x05, 0x04, -1, 0x03, 0x0042, 0x0026 },\n  { 0x05, 0x04, -1, 0x03, 0x0042, 0x0036 },\n  { 0x05, 0x01, -1, 0x03, 0x0062, 0x000a },\n  { 0x05, 0x01, -1, 0x03, 0x0062, 0x000c },\n  { 0x05, 0x02, -1, 0x03, 0x0062, 0x000e },\n  { 0x05, 0x02, -1, 0x03, 0x0062, 0x0012 },\n  { 0x05, 0x03, -1, 0x03, 0x0062, 0x0016 },\n  { 0x05, 0x03, -1, 0x03, 0x0062, 0x001e },\n  { 0x05, 0x04, -1, 0x03, 0x0062, 0x0026 },\n  { 0x05, 0x04, -1, 0x03, 0x0062, 0x0036 },\n  { 0x00, 0x05, -1, 0x03, 0x0000, 0x0046 },\n  { 0x00, 0x05, -1, 0x03, 0x0000, 0x0066 },\n  { 0x00, 0x06, -1, 0x03, 0x0000, 0x0086 },\n  { 0x00, 0x07, -1, 0x03, 0x0000, 0x00c6 },\n  { 0x00, 0x08, -1, 0x03, 0x0000, 0x0146 },\n  { 0x00, 0x09, -1, 0x03, 0x0000, 0x0246 },\n  { 0x00, 0x0a, -1, 0x03, 0x0000, 0x0446 },\n  { 0x00, 0x18, -1, 0x03, 0x0000, 0x0846 },\n  { 0x00, 0x05, -1, 0x03, 0x0001, 0x0046 },\n  { 0x00, 0x05, -1, 0x03, 0x0001, 0x0066 },\n  { 0x00, 0x06, -1, 0x03, 0x0001, 0x0086 },\n  { 0x00, 0x07, -1, 0x03, 0x0001, 0x00c6 },\n  { 0x00, 0x08, -1, 0x03, 0x0001, 0x0146 },\n  { 0x00, 0x09, -1, 0x03, 0x0001, 0x0246 },\n  { 0x00, 0x0a, -1, 0x03, 0x0001, 0x0446 },\n  { 0x00, 0x18, -1, 0x03, 0x0001, 0x0846 },\n  { 0x00, 0x05, -1, 0x03, 0x0002, 0x0046 },\n  { 0x00, 0x05, -1, 0x03, 0x0002, 0x0066 },\n  { 0x00, 0x06, -1, 0x03, 0x0002, 0x0086 },\n  { 0x00, 0x07, -1, 0x03, 0x0002, 0x00c6 },\n  { 0x00, 0x08, -1, 0x03, 0x0002, 0x0146 },\n  { 0x00, 0x09, -1, 0x03, 0x0002, 0x0246 },\n  { 0x00, 0x0a, -1, 0x03, 0x0002, 0x0446 },\n  { 0x00, 0x18, -1, 0x03, 0x0002, 0x0846 },\n  { 0x00, 0x05, -1, 0x03, 0x0003, 0x0046 },\n  { 0x00, 0x05, -1, 0x03, 0x0003, 0x0066 },\n  { 0x00, 0x06, -1, 0x03, 0x0003, 0x0086 },\n  { 0x00, 0x07, -1, 0x03, 0x0003, 0x00c6 },\n  { 0x00, 0x08, -1, 0x03, 0x0003, 0x0146 },\n  { 0x00, 0x09, -1, 0x03, 0x0003, 0x0246 },\n  { 0x00, 0x0a, -1, 0x03, 0x0003, 0x0446 },\n  { 0x00, 0x18, -1, 0x03, 0x0003, 0x0846 },\n  { 0x00, 0x05, -1, 0x03, 0x0004, 0x0046 },\n  { 0x00, 0x05, -1, 0x03, 0x0004, 0x0066 },\n  { 0x00, 0x06, -1, 0x03, 0x0004, 0x0086 },\n  { 0x00, 0x07, -1, 0x03, 0x0004, 0x00c6 },\n  { 0x00, 0x08, -1, 0x03, 0x0004, 0x0146 },\n  { 0x00, 0x09, -1, 0x03, 0x0004, 0x0246 },\n  { 0x00, 0x0a, -1, 0x03, 0x0004, 0x0446 },\n  { 0x00, 0x18, -1, 0x03, 0x0004, 0x0846 },\n  { 0x00, 0x05, -1, 0x03, 0x0005, 0x0046 },\n  { 0x00, 0x05, -1, 0x03, 0x0005, 0x0066 },\n  { 0x00, 0x06, -1, 0x03, 0x0005, 0x0086 },\n  { 0x00, 0x07, -1, 0x03, 0x0005, 0x00c6 },\n  { 0x00, 0x08, -1, 0x03, 0x0005, 0x0146 },\n  { 0x00, 0x09, -1, 0x03, 0x0005, 0x0246 },\n  { 0x00, 0x0a, -1, 0x03, 0x0005, 0x0446 },\n  { 0x00, 0x18, -1, 0x03, 0x0005, 0x0846 },\n  { 0x01, 0x05, -1, 0x03, 0x0006, 0x0046 },\n  { 0x01, 0x05, -1, 0x03, 0x0006, 0x0066 },\n  { 0x01, 0x06, -1, 0x03, 0x0006, 0x0086 },\n  { 0x01, 0x07, -1, 0x03, 0x0006, 0x00c6 },\n  { 0x01, 0x08, -1, 0x03, 0x0006, 0x0146 },\n  { 0x01, 0x09, -1, 0x03, 0x0006, 0x0246 },\n  { 0x01, 0x0a, -1, 0x03, 0x0006, 0x0446 },\n  { 0x01, 0x18, -1, 0x03, 0x0006, 0x0846 },\n  { 0x01, 0x05, -1, 0x03, 0x0008, 0x0046 },\n  { 0x01, 0x05, -1, 0x03, 0x0008, 0x0066 },\n  { 0x01, 0x06, -1, 0x03, 0x0008, 0x0086 },\n  { 0x01, 0x07, -1, 0x03, 0x0008, 0x00c6 },\n  { 0x01, 0x08, -1, 0x03, 0x0008, 0x0146 },\n  { 0x01, 0x09, -1, 0x03, 0x0008, 0x0246 },\n  { 0x01, 0x0a, -1, 0x03, 0x0008, 0x0446 },\n  { 0x01, 0x18, -1, 0x03, 0x0008, 0x0846 },\n  { 0x06, 0x00, -1, 0x00, 0x0082, 0x0002 },\n  { 0x06, 0x00, -1, 0x01, 0x0082, 0x0003 },\n  { 0x06, 0x00, -1, 0x02, 0x0082, 0x0004 },\n  { 0x06, 0x00, -1, 0x03, 0x0082, 0x0005 },\n  { 0x06, 0x00, -1, 0x03, 0x0082, 0x0006 },\n  { 0x06, 0x00, -1, 0x03, 0x0082, 0x0007 },\n  { 0x06, 0x00, -1, 0x03, 0x0082, 0x0008 },\n  { 0x06, 0x00, -1, 0x03, 0x0082, 0x0009 },\n  { 0x07, 0x00, -1, 0x00, 0x00c2, 0x0002 },\n  { 0x07, 0x00, -1, 0x01, 0x00c2, 0x0003 },\n  { 0x07, 0x00, -1, 0x02, 0x00c2, 0x0004 },\n  { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0005 },\n  { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0006 },\n  { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0007 },\n  { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0008 },\n  { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0009 },\n  { 0x08, 0x00, -1, 0x00, 0x0142, 0x0002 },\n  { 0x08, 0x00, -1, 0x01, 0x0142, 0x0003 },\n  { 0x08, 0x00, -1, 0x02, 0x0142, 0x0004 },\n  { 0x08, 0x00, -1, 0x03, 0x0142, 0x0005 },\n  { 0x08, 0x00, -1, 0x03, 0x0142, 0x0006 },\n  { 0x08, 0x00, -1, 0x03, 0x0142, 0x0007 },\n  { 0x08, 0x00, -1, 0x03, 0x0142, 0x0008 },\n  { 0x08, 0x00, -1, 0x03, 0x0142, 0x0009 },\n  { 0x09, 0x00, -1, 0x00, 0x0242, 0x0002 },\n  { 0x09, 0x00, -1, 0x01, 0x0242, 0x0003 },\n  { 0x09, 0x00, -1, 0x02, 0x0242, 0x0004 },\n  { 0x09, 0x00, -1, 0x03, 0x0242, 0x0005 },\n  { 0x09, 0x00, -1, 0x03, 0x0242, 0x0006 },\n  { 0x09, 0x00, -1, 0x03, 0x0242, 0x0007 },\n  { 0x09, 0x00, -1, 0x03, 0x0242, 0x0008 },\n  { 0x09, 0x00, -1, 0x03, 0x0242, 0x0009 },\n  { 0x0a, 0x00, -1, 0x00, 0x0442, 0x0002 },\n  { 0x0a, 0x00, -1, 0x01, 0x0442, 0x0003 },\n  { 0x0a, 0x00, -1, 0x02, 0x0442, 0x0004 },\n  { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0005 },\n  { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0006 },\n  { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0007 },\n  { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0008 },\n  { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0009 },\n  { 0x0c, 0x00, -1, 0x00, 0x0842, 0x0002 },\n  { 0x0c, 0x00, -1, 0x01, 0x0842, 0x0003 },\n  { 0x0c, 0x00, -1, 0x02, 0x0842, 0x0004 },\n  { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0005 },\n  { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0006 },\n  { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0007 },\n  { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0008 },\n  { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0009 },\n  { 0x0e, 0x00, -1, 0x00, 0x1842, 0x0002 },\n  { 0x0e, 0x00, -1, 0x01, 0x1842, 0x0003 },\n  { 0x0e, 0x00, -1, 0x02, 0x1842, 0x0004 },\n  { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0005 },\n  { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0006 },\n  { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0007 },\n  { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0008 },\n  { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0009 },\n  { 0x18, 0x00, -1, 0x00, 0x5842, 0x0002 },\n  { 0x18, 0x00, -1, 0x01, 0x5842, 0x0003 },\n  { 0x18, 0x00, -1, 0x02, 0x5842, 0x0004 },\n  { 0x18, 0x00, -1, 0x03, 0x5842, 0x0005 },\n  { 0x18, 0x00, -1, 0x03, 0x5842, 0x0006 },\n  { 0x18, 0x00, -1, 0x03, 0x5842, 0x0007 },\n  { 0x18, 0x00, -1, 0x03, 0x5842, 0x0008 },\n  { 0x18, 0x00, -1, 0x03, 0x5842, 0x0009 },\n  { 0x02, 0x05, -1, 0x03, 0x000a, 0x0046 },\n  { 0x02, 0x05, -1, 0x03, 0x000a, 0x0066 },\n  { 0x02, 0x06, -1, 0x03, 0x000a, 0x0086 },\n  { 0x02, 0x07, -1, 0x03, 0x000a, 0x00c6 },\n  { 0x02, 0x08, -1, 0x03, 0x000a, 0x0146 },\n  { 0x02, 0x09, -1, 0x03, 0x000a, 0x0246 },\n  { 0x02, 0x0a, -1, 0x03, 0x000a, 0x0446 },\n  { 0x02, 0x18, -1, 0x03, 0x000a, 0x0846 },\n  { 0x02, 0x05, -1, 0x03, 0x000e, 0x0046 },\n  { 0x02, 0x05, -1, 0x03, 0x000e, 0x0066 },\n  { 0x02, 0x06, -1, 0x03, 0x000e, 0x0086 },\n  { 0x02, 0x07, -1, 0x03, 0x000e, 0x00c6 },\n  { 0x02, 0x08, -1, 0x03, 0x000e, 0x0146 },\n  { 0x02, 0x09, -1, 0x03, 0x000e, 0x0246 },\n  { 0x02, 0x0a, -1, 0x03, 0x000e, 0x0446 },\n  { 0x02, 0x18, -1, 0x03, 0x000e, 0x0846 },\n  { 0x03, 0x05, -1, 0x03, 0x0012, 0x0046 },\n  { 0x03, 0x05, -1, 0x03, 0x0012, 0x0066 },\n  { 0x03, 0x06, -1, 0x03, 0x0012, 0x0086 },\n  { 0x03, 0x07, -1, 0x03, 0x0012, 0x00c6 },\n  { 0x03, 0x08, -1, 0x03, 0x0012, 0x0146 },\n  { 0x03, 0x09, -1, 0x03, 0x0012, 0x0246 },\n  { 0x03, 0x0a, -1, 0x03, 0x0012, 0x0446 },\n  { 0x03, 0x18, -1, 0x03, 0x0012, 0x0846 },\n  { 0x03, 0x05, -1, 0x03, 0x001a, 0x0046 },\n  { 0x03, 0x05, -1, 0x03, 0x001a, 0x0066 },\n  { 0x03, 0x06, -1, 0x03, 0x001a, 0x0086 },\n  { 0x03, 0x07, -1, 0x03, 0x001a, 0x00c6 },\n  { 0x03, 0x08, -1, 0x03, 0x001a, 0x0146 },\n  { 0x03, 0x09, -1, 0x03, 0x001a, 0x0246 },\n  { 0x03, 0x0a, -1, 0x03, 0x001a, 0x0446 },\n  { 0x03, 0x18, -1, 0x03, 0x001a, 0x0846 },\n  { 0x04, 0x05, -1, 0x03, 0x0022, 0x0046 },\n  { 0x04, 0x05, -1, 0x03, 0x0022, 0x0066 },\n  { 0x04, 0x06, -1, 0x03, 0x0022, 0x0086 },\n  { 0x04, 0x07, -1, 0x03, 0x0022, 0x00c6 },\n  { 0x04, 0x08, -1, 0x03, 0x0022, 0x0146 },\n  { 0x04, 0x09, -1, 0x03, 0x0022, 0x0246 },\n  { 0x04, 0x0a, -1, 0x03, 0x0022, 0x0446 },\n  { 0x04, 0x18, -1, 0x03, 0x0022, 0x0846 },\n  { 0x04, 0x05, -1, 0x03, 0x0032, 0x0046 },\n  { 0x04, 0x05, -1, 0x03, 0x0032, 0x0066 },\n  { 0x04, 0x06, -1, 0x03, 0x0032, 0x0086 },\n  { 0x04, 0x07, -1, 0x03, 0x0032, 0x00c6 },\n  { 0x04, 0x08, -1, 0x03, 0x0032, 0x0146 },\n  { 0x04, 0x09, -1, 0x03, 0x0032, 0x0246 },\n  { 0x04, 0x0a, -1, 0x03, 0x0032, 0x0446 },\n  { 0x04, 0x18, -1, 0x03, 0x0032, 0x0846 },\n  { 0x05, 0x05, -1, 0x03, 0x0042, 0x0046 },\n  { 0x05, 0x05, -1, 0x03, 0x0042, 0x0066 },\n  { 0x05, 0x06, -1, 0x03, 0x0042, 0x0086 },\n  { 0x05, 0x07, -1, 0x03, 0x0042, 0x00c6 },\n  { 0x05, 0x08, -1, 0x03, 0x0042, 0x0146 },\n  { 0x05, 0x09, -1, 0x03, 0x0042, 0x0246 },\n  { 0x05, 0x0a, -1, 0x03, 0x0042, 0x0446 },\n  { 0x05, 0x18, -1, 0x03, 0x0042, 0x0846 },\n  { 0x05, 0x05, -1, 0x03, 0x0062, 0x0046 },\n  { 0x05, 0x05, -1, 0x03, 0x0062, 0x0066 },\n  { 0x05, 0x06, -1, 0x03, 0x0062, 0x0086 },\n  { 0x05, 0x07, -1, 0x03, 0x0062, 0x00c6 },\n  { 0x05, 0x08, -1, 0x03, 0x0062, 0x0146 },\n  { 0x05, 0x09, -1, 0x03, 0x0062, 0x0246 },\n  { 0x05, 0x0a, -1, 0x03, 0x0062, 0x0446 },\n  { 0x05, 0x18, -1, 0x03, 0x0062, 0x0846 },\n  { 0x06, 0x01, -1, 0x03, 0x0082, 0x000a },\n  { 0x06, 0x01, -1, 0x03, 0x0082, 0x000c },\n  { 0x06, 0x02, -1, 0x03, 0x0082, 0x000e },\n  { 0x06, 0x02, -1, 0x03, 0x0082, 0x0012 },\n  { 0x06, 0x03, -1, 0x03, 0x0082, 0x0016 },\n  { 0x06, 0x03, -1, 0x03, 0x0082, 0x001e },\n  { 0x06, 0x04, -1, 0x03, 0x0082, 0x0026 },\n  { 0x06, 0x04, -1, 0x03, 0x0082, 0x0036 },\n  { 0x07, 0x01, -1, 0x03, 0x00c2, 0x000a },\n  { 0x07, 0x01, -1, 0x03, 0x00c2, 0x000c },\n  { 0x07, 0x02, -1, 0x03, 0x00c2, 0x000e },\n  { 0x07, 0x02, -1, 0x03, 0x00c2, 0x0012 },\n  { 0x07, 0x03, -1, 0x03, 0x00c2, 0x0016 },\n  { 0x07, 0x03, -1, 0x03, 0x00c2, 0x001e },\n  { 0x07, 0x04, -1, 0x03, 0x00c2, 0x0026 },\n  { 0x07, 0x04, -1, 0x03, 0x00c2, 0x0036 },\n  { 0x08, 0x01, -1, 0x03, 0x0142, 0x000a },\n  { 0x08, 0x01, -1, 0x03, 0x0142, 0x000c },\n  { 0x08, 0x02, -1, 0x03, 0x0142, 0x000e },\n  { 0x08, 0x02, -1, 0x03, 0x0142, 0x0012 },\n  { 0x08, 0x03, -1, 0x03, 0x0142, 0x0016 },\n  { 0x08, 0x03, -1, 0x03, 0x0142, 0x001e },\n  { 0x08, 0x04, -1, 0x03, 0x0142, 0x0026 },\n  { 0x08, 0x04, -1, 0x03, 0x0142, 0x0036 },\n  { 0x09, 0x01, -1, 0x03, 0x0242, 0x000a },\n  { 0x09, 0x01, -1, 0x03, 0x0242, 0x000c },\n  { 0x09, 0x02, -1, 0x03, 0x0242, 0x000e },\n  { 0x09, 0x02, -1, 0x03, 0x0242, 0x0012 },\n  { 0x09, 0x03, -1, 0x03, 0x0242, 0x0016 },\n  { 0x09, 0x03, -1, 0x03, 0x0242, 0x001e },\n  { 0x09, 0x04, -1, 0x03, 0x0242, 0x0026 },\n  { 0x09, 0x04, -1, 0x03, 0x0242, 0x0036 },\n  { 0x0a, 0x01, -1, 0x03, 0x0442, 0x000a },\n  { 0x0a, 0x01, -1, 0x03, 0x0442, 0x000c },\n  { 0x0a, 0x02, -1, 0x03, 0x0442, 0x000e },\n  { 0x0a, 0x02, -1, 0x03, 0x0442, 0x0012 },\n  { 0x0a, 0x03, -1, 0x03, 0x0442, 0x0016 },\n  { 0x0a, 0x03, -1, 0x03, 0x0442, 0x001e },\n  { 0x0a, 0x04, -1, 0x03, 0x0442, 0x0026 },\n  { 0x0a, 0x04, -1, 0x03, 0x0442, 0x0036 },\n  { 0x0c, 0x01, -1, 0x03, 0x0842, 0x000a },\n  { 0x0c, 0x01, -1, 0x03, 0x0842, 0x000c },\n  { 0x0c, 0x02, -1, 0x03, 0x0842, 0x000e },\n  { 0x0c, 0x02, -1, 0x03, 0x0842, 0x0012 },\n  { 0x0c, 0x03, -1, 0x03, 0x0842, 0x0016 },\n  { 0x0c, 0x03, -1, 0x03, 0x0842, 0x001e },\n  { 0x0c, 0x04, -1, 0x03, 0x0842, 0x0026 },\n  { 0x0c, 0x04, -1, 0x03, 0x0842, 0x0036 },\n  { 0x0e, 0x01, -1, 0x03, 0x1842, 0x000a },\n  { 0x0e, 0x01, -1, 0x03, 0x1842, 0x000c },\n  { 0x0e, 0x02, -1, 0x03, 0x1842, 0x000e },\n  { 0x0e, 0x02, -1, 0x03, 0x1842, 0x0012 },\n  { 0x0e, 0x03, -1, 0x03, 0x1842, 0x0016 },\n  { 0x0e, 0x03, -1, 0x03, 0x1842, 0x001e },\n  { 0x0e, 0x04, -1, 0x03, 0x1842, 0x0026 },\n  { 0x0e, 0x04, -1, 0x03, 0x1842, 0x0036 },\n  { 0x18, 0x01, -1, 0x03, 0x5842, 0x000a },\n  { 0x18, 0x01, -1, 0x03, 0x5842, 0x000c },\n  { 0x18, 0x02, -1, 0x03, 0x5842, 0x000e },\n  { 0x18, 0x02, -1, 0x03, 0x5842, 0x0012 },\n  { 0x18, 0x03, -1, 0x03, 0x5842, 0x0016 },\n  { 0x18, 0x03, -1, 0x03, 0x5842, 0x001e },\n  { 0x18, 0x04, -1, 0x03, 0x5842, 0x0026 },\n  { 0x18, 0x04, -1, 0x03, 0x5842, 0x0036 },\n  { 0x06, 0x05, -1, 0x03, 0x0082, 0x0046 },\n  { 0x06, 0x05, -1, 0x03, 0x0082, 0x0066 },\n  { 0x06, 0x06, -1, 0x03, 0x0082, 0x0086 },\n  { 0x06, 0x07, -1, 0x03, 0x0082, 0x00c6 },\n  { 0x06, 0x08, -1, 0x03, 0x0082, 0x0146 },\n  { 0x06, 0x09, -1, 0x03, 0x0082, 0x0246 },\n  { 0x06, 0x0a, -1, 0x03, 0x0082, 0x0446 },\n  { 0x06, 0x18, -1, 0x03, 0x0082, 0x0846 },\n  { 0x07, 0x05, -1, 0x03, 0x00c2, 0x0046 },\n  { 0x07, 0x05, -1, 0x03, 0x00c2, 0x0066 },\n  { 0x07, 0x06, -1, 0x03, 0x00c2, 0x0086 },\n  { 0x07, 0x07, -1, 0x03, 0x00c2, 0x00c6 },\n  { 0x07, 0x08, -1, 0x03, 0x00c2, 0x0146 },\n  { 0x07, 0x09, -1, 0x03, 0x00c2, 0x0246 },\n  { 0x07, 0x0a, -1, 0x03, 0x00c2, 0x0446 },\n  { 0x07, 0x18, -1, 0x03, 0x00c2, 0x0846 },\n  { 0x08, 0x05, -1, 0x03, 0x0142, 0x0046 },\n  { 0x08, 0x05, -1, 0x03, 0x0142, 0x0066 },\n  { 0x08, 0x06, -1, 0x03, 0x0142, 0x0086 },\n  { 0x08, 0x07, -1, 0x03, 0x0142, 0x00c6 },\n  { 0x08, 0x08, -1, 0x03, 0x0142, 0x0146 },\n  { 0x08, 0x09, -1, 0x03, 0x0142, 0x0246 },\n  { 0x08, 0x0a, -1, 0x03, 0x0142, 0x0446 },\n  { 0x08, 0x18, -1, 0x03, 0x0142, 0x0846 },\n  { 0x09, 0x05, -1, 0x03, 0x0242, 0x0046 },\n  { 0x09, 0x05, -1, 0x03, 0x0242, 0x0066 },\n  { 0x09, 0x06, -1, 0x03, 0x0242, 0x0086 },\n  { 0x09, 0x07, -1, 0x03, 0x0242, 0x00c6 },\n  { 0x09, 0x08, -1, 0x03, 0x0242, 0x0146 },\n  { 0x09, 0x09, -1, 0x03, 0x0242, 0x0246 },\n  { 0x09, 0x0a, -1, 0x03, 0x0242, 0x0446 },\n  { 0x09, 0x18, -1, 0x03, 0x0242, 0x0846 },\n  { 0x0a, 0x05, -1, 0x03, 0x0442, 0x0046 },\n  { 0x0a, 0x05, -1, 0x03, 0x0442, 0x0066 },\n  { 0x0a, 0x06, -1, 0x03, 0x0442, 0x0086 },\n  { 0x0a, 0x07, -1, 0x03, 0x0442, 0x00c6 },\n  { 0x0a, 0x08, -1, 0x03, 0x0442, 0x0146 },\n  { 0x0a, 0x09, -1, 0x03, 0x0442, 0x0246 },\n  { 0x0a, 0x0a, -1, 0x03, 0x0442, 0x0446 },\n  { 0x0a, 0x18, -1, 0x03, 0x0442, 0x0846 },\n  { 0x0c, 0x05, -1, 0x03, 0x0842, 0x0046 },\n  { 0x0c, 0x05, -1, 0x03, 0x0842, 0x0066 },\n  { 0x0c, 0x06, -1, 0x03, 0x0842, 0x0086 },\n  { 0x0c, 0x07, -1, 0x03, 0x0842, 0x00c6 },\n  { 0x0c, 0x08, -1, 0x03, 0x0842, 0x0146 },\n  { 0x0c, 0x09, -1, 0x03, 0x0842, 0x0246 },\n  { 0x0c, 0x0a, -1, 0x03, 0x0842, 0x0446 },\n  { 0x0c, 0x18, -1, 0x03, 0x0842, 0x0846 },\n  { 0x0e, 0x05, -1, 0x03, 0x1842, 0x0046 },\n  { 0x0e, 0x05, -1, 0x03, 0x1842, 0x0066 },\n  { 0x0e, 0x06, -1, 0x03, 0x1842, 0x0086 },\n  { 0x0e, 0x07, -1, 0x03, 0x1842, 0x00c6 },\n  { 0x0e, 0x08, -1, 0x03, 0x1842, 0x0146 },\n  { 0x0e, 0x09, -1, 0x03, 0x1842, 0x0246 },\n  { 0x0e, 0x0a, -1, 0x03, 0x1842, 0x0446 },\n  { 0x0e, 0x18, -1, 0x03, 0x1842, 0x0846 },\n  { 0x18, 0x05, -1, 0x03, 0x5842, 0x0046 },\n  { 0x18, 0x05, -1, 0x03, 0x5842, 0x0066 },\n  { 0x18, 0x06, -1, 0x03, 0x5842, 0x0086 },\n  { 0x18, 0x07, -1, 0x03, 0x5842, 0x00c6 },\n  { 0x18, 0x08, -1, 0x03, 0x5842, 0x0146 },\n  { 0x18, 0x09, -1, 0x03, 0x5842, 0x0246 },\n  { 0x18, 0x0a, -1, 0x03, 0x5842, 0x0446 },\n  { 0x18, 0x18, -1, 0x03, 0x5842, 0x0846 },\n};\n"
  },
  {
    "path": "c/dec/state.c",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"state.h\"\n\n#include \"../common/dictionary.h\"\n#include \"../common/platform.h\"\n#include \"huffman.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#ifdef BROTLI_REPORTING\n/* When BROTLI_REPORTING is defined extra reporting module have to be linked. */\nvoid BrotliDecoderOnStart(const BrotliDecoderState* s);\nvoid BrotliDecoderOnFinish(const BrotliDecoderState* s);\n#define BROTLI_DECODER_ON_START(s) BrotliDecoderOnStart(s);\n#define BROTLI_DECODER_ON_FINISH(s) BrotliDecoderOnFinish(s);\n#else\n#if !defined(BROTLI_DECODER_ON_START)\n#define BROTLI_DECODER_ON_START(s) (void)(s);\n#endif\n#if !defined(BROTLI_DECODER_ON_FINISH)\n#define BROTLI_DECODER_ON_FINISH(s) (void)(s);\n#endif\n#endif\n\nBROTLI_BOOL BrotliDecoderStateInit(BrotliDecoderState* s,\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {\n  BROTLI_DECODER_ON_START(s);\n  if (!alloc_func) {\n    s->alloc_func = BrotliDefaultAllocFunc;\n    s->free_func = BrotliDefaultFreeFunc;\n    s->memory_manager_opaque = 0;\n  } else {\n    s->alloc_func = alloc_func;\n    s->free_func = free_func;\n    s->memory_manager_opaque = opaque;\n  }\n\n  s->error_code = 0; /* BROTLI_DECODER_NO_ERROR */\n\n  BrotliInitBitReader(&s->br);\n  s->state = BROTLI_STATE_UNINITED;\n  s->large_window = 0;\n  s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;\n  s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_NONE;\n  s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;\n  s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;\n\n  s->buffer_length = 0;\n  s->loop_counter = 0;\n  s->pos = 0;\n  s->rb_roundtrips = 0;\n  s->partial_pos_out = 0;\n  s->used_input = 0;\n\n  s->block_type_trees = NULL;\n  s->block_len_trees = NULL;\n  s->ringbuffer = NULL;\n  s->ringbuffer_size = 0;\n  s->new_ringbuffer_size = 0;\n  s->ringbuffer_mask = 0;\n\n  s->context_map = NULL;\n  s->context_modes = NULL;\n  s->dist_context_map = NULL;\n  s->context_map_slice = NULL;\n  s->dist_context_map_slice = NULL;\n\n  s->literal_hgroup.codes = NULL;\n  s->literal_hgroup.htrees = NULL;\n  s->insert_copy_hgroup.codes = NULL;\n  s->insert_copy_hgroup.htrees = NULL;\n  s->distance_hgroup.codes = NULL;\n  s->distance_hgroup.htrees = NULL;\n\n  s->is_last_metablock = 0;\n  s->is_uncompressed = 0;\n  s->is_metadata = 0;\n  s->should_wrap_ringbuffer = 0;\n  s->canny_ringbuffer_allocation = 1;\n\n  s->window_bits = 0;\n  s->max_distance = 0;\n  s->dist_rb[0] = 16;\n  s->dist_rb[1] = 15;\n  s->dist_rb[2] = 11;\n  s->dist_rb[3] = 4;\n  s->dist_rb_idx = 0;\n  s->block_type_trees = NULL;\n  s->block_len_trees = NULL;\n\n  s->mtf_upper_bound = 63;\n\n  s->compound_dictionary = NULL;\n  s->dictionary =\n      BrotliSharedDictionaryCreateInstance(alloc_func, free_func, opaque);\n  if (!s->dictionary) return BROTLI_FALSE;\n\n  s->metadata_start_func = NULL;\n  s->metadata_chunk_func = NULL;\n  s->metadata_callback_opaque = 0;\n\n  return BROTLI_TRUE;\n}\n\nvoid BrotliDecoderStateMetablockBegin(BrotliDecoderState* s) {\n  s->meta_block_remaining_len = 0;\n  s->block_length[0] = BROTLI_BLOCK_SIZE_CAP;\n  s->block_length[1] = BROTLI_BLOCK_SIZE_CAP;\n  s->block_length[2] = BROTLI_BLOCK_SIZE_CAP;\n  s->num_block_types[0] = 1;\n  s->num_block_types[1] = 1;\n  s->num_block_types[2] = 1;\n  s->block_type_rb[0] = 1;\n  s->block_type_rb[1] = 0;\n  s->block_type_rb[2] = 1;\n  s->block_type_rb[3] = 0;\n  s->block_type_rb[4] = 1;\n  s->block_type_rb[5] = 0;\n  s->context_map = NULL;\n  s->context_modes = NULL;\n  s->dist_context_map = NULL;\n  s->context_map_slice = NULL;\n  s->literal_htree = NULL;\n  s->dist_context_map_slice = NULL;\n  s->dist_htree_index = 0;\n  s->context_lookup = NULL;\n  s->literal_hgroup.codes = NULL;\n  s->literal_hgroup.htrees = NULL;\n  s->insert_copy_hgroup.codes = NULL;\n  s->insert_copy_hgroup.htrees = NULL;\n  s->distance_hgroup.codes = NULL;\n  s->distance_hgroup.htrees = NULL;\n}\n\nvoid BrotliDecoderStateCleanupAfterMetablock(BrotliDecoderState* s) {\n  BROTLI_DECODER_FREE(s, s->context_modes);\n  BROTLI_DECODER_FREE(s, s->context_map);\n  BROTLI_DECODER_FREE(s, s->dist_context_map);\n  BROTLI_DECODER_FREE(s, s->literal_hgroup.htrees);\n  BROTLI_DECODER_FREE(s, s->insert_copy_hgroup.htrees);\n  BROTLI_DECODER_FREE(s, s->distance_hgroup.htrees);\n}\n\nvoid BrotliDecoderStateCleanup(BrotliDecoderState* s) {\n  BrotliDecoderStateCleanupAfterMetablock(s);\n\n  BROTLI_DECODER_ON_FINISH(s);\n\n  BROTLI_DECODER_FREE(s, s->compound_dictionary);\n  BrotliSharedDictionaryDestroyInstance(s->dictionary);\n  s->dictionary = NULL;\n  BROTLI_DECODER_FREE(s, s->ringbuffer);\n  BROTLI_DECODER_FREE(s, s->block_type_trees);\n}\n\nBROTLI_BOOL BrotliDecoderHuffmanTreeGroupInit(BrotliDecoderState* s,\n    HuffmanTreeGroup* group, brotli_reg_t alphabet_size_max,\n    brotli_reg_t alphabet_size_limit, brotli_reg_t ntrees) {\n  /* 376 = 256 (1-st level table) + 4 + 7 + 15 + 31 + 63 (2-nd level mix-tables)\n     This number is discovered \"unlimited\" \"enough\" calculator; it is actually\n     a wee bigger than required in several cases (especially for alphabets with\n     less than 16 symbols). */\n  const size_t max_table_size = alphabet_size_limit + 376;\n  const size_t code_size = sizeof(HuffmanCode) * ntrees * max_table_size;\n  const size_t htree_size = sizeof(HuffmanCode*) * ntrees;\n  /* Pointer alignment is, hopefully, wider than sizeof(HuffmanCode). */\n  HuffmanCode** p = (HuffmanCode**)BROTLI_DECODER_ALLOC(s,\n      code_size + htree_size);\n  group->alphabet_size_max = (uint16_t)alphabet_size_max;\n  group->alphabet_size_limit = (uint16_t)alphabet_size_limit;\n  group->num_htrees = (uint16_t)ntrees;\n  group->htrees = p;\n  group->codes = p ? (HuffmanCode*)(&p[ntrees]) : NULL;\n  return !!p;\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/dec/state.h",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Brotli state for partial streaming decoding. */\n\n#ifndef BROTLI_DEC_STATE_H_\n#define BROTLI_DEC_STATE_H_\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n#include <brotli/shared_dictionary.h>\n#include <brotli/decode.h>\n#include \"bit_reader.h\"\n#include \"huffman.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* Graphviz diagram that describes state transitions:\n\ndigraph States {\n  graph [compound=true]\n  concentrate=true\n  node [shape=\"box\"]\n\n  UNINITED -> {LARGE_WINDOW_BITS -> INITIALIZE}\n  subgraph cluster_metablock_workflow {\n    style=\"rounded\"\n    label=< <B>METABLOCK CYCLE</B> >\n    METABLOCK_BEGIN -> METABLOCK_HEADER\n    METABLOCK_HEADER:sw -> METADATA\n    METABLOCK_HEADER:s -> UNCOMPRESSED\n    METABLOCK_HEADER:se -> METABLOCK_DONE:ne\n    METADATA:s -> METABLOCK_DONE:w\n    UNCOMPRESSED:s -> METABLOCK_DONE:n\n    METABLOCK_DONE:e -> METABLOCK_BEGIN:e [constraint=\"false\"]\n  }\n  INITIALIZE -> METABLOCK_BEGIN\n  METABLOCK_DONE -> DONE\n\n  subgraph cluster_compressed_metablock {\n    style=\"rounded\"\n    label=< <B>COMPRESSED METABLOCK</B> >\n\n    subgraph cluster_command {\n      style=\"rounded\"\n      label=< <B>HOT LOOP</B> >\n\n      _METABLOCK_DONE_PORT_ [shape=point style=invis]\n\n      {\n        // Set different shape for nodes returning from \"compressed metablock\".\n        node [shape=invhouse]; CMD_INNER CMD_POST_DECODE_LITERALS;\n        CMD_POST_WRAP_COPY; CMD_INNER_WRITE; CMD_POST_WRITE_1;\n      }\n\n      CMD_BEGIN -> CMD_INNER -> CMD_POST_DECODE_LITERALS -> CMD_POST_WRAP_COPY\n\n      // IO (\"write\") nodes are not in the hot loop!\n      CMD_INNER_WRITE [style=dashed]\n      CMD_INNER -> CMD_INNER_WRITE\n      CMD_POST_WRITE_1 [style=dashed]\n      CMD_POST_DECODE_LITERALS -> CMD_POST_WRITE_1\n      CMD_POST_WRITE_2 [style=dashed]\n      CMD_POST_WRAP_COPY -> CMD_POST_WRITE_2\n\n      CMD_POST_WRITE_1 -> CMD_BEGIN:s [constraint=\"false\"]\n      CMD_INNER_WRITE -> {CMD_INNER CMD_POST_DECODE_LITERALS}\n          [constraint=\"false\"]\n      CMD_BEGIN:ne -> CMD_POST_DECODE_LITERALS [constraint=\"false\"]\n      CMD_POST_WRAP_COPY -> CMD_BEGIN [constraint=\"false\"]\n      CMD_POST_DECODE_LITERALS -> CMD_BEGIN:ne [constraint=\"false\"]\n      CMD_POST_WRITE_2 -> CMD_POST_WRAP_COPY [constraint=\"false\"]\n      {rank=same; CMD_BEGIN; CMD_INNER; CMD_POST_DECODE_LITERALS;\n          CMD_POST_WRAP_COPY}\n      {rank=same; CMD_INNER_WRITE; CMD_POST_WRITE_1; CMD_POST_WRITE_2}\n\n      {CMD_INNER CMD_POST_DECODE_LITERALS CMD_POST_WRAP_COPY} ->\n          _METABLOCK_DONE_PORT_ [style=invis]\n      {CMD_INNER_WRITE CMD_POST_WRITE_1} -> _METABLOCK_DONE_PORT_\n          [constraint=\"false\" style=invis]\n    }\n\n    BEFORE_COMPRESSED_METABLOCK_HEADER:s -> HUFFMAN_CODE_0:n\n    HUFFMAN_CODE_0 -> HUFFMAN_CODE_1 -> HUFFMAN_CODE_2 -> HUFFMAN_CODE_3\n    HUFFMAN_CODE_0 -> METABLOCK_HEADER_2 -> CONTEXT_MODES -> CONTEXT_MAP_1\n    CONTEXT_MAP_1 -> CONTEXT_MAP_2 -> TREE_GROUP\n    TREE_GROUP -> BEFORE_COMPRESSED_METABLOCK_BODY:e\n    BEFORE_COMPRESSED_METABLOCK_BODY:s -> CMD_BEGIN:n\n\n    HUFFMAN_CODE_3:e -> HUFFMAN_CODE_0:ne [constraint=\"false\"]\n    {rank=same; HUFFMAN_CODE_0; HUFFMAN_CODE_1; HUFFMAN_CODE_2; HUFFMAN_CODE_3}\n    {rank=same; METABLOCK_HEADER_2; CONTEXT_MODES; CONTEXT_MAP_1; CONTEXT_MAP_2;\n        TREE_GROUP}\n  }\n  METABLOCK_HEADER:e -> BEFORE_COMPRESSED_METABLOCK_HEADER:n\n\n  _METABLOCK_DONE_PORT_ -> METABLOCK_DONE:se\n      [constraint=\"false\" ltail=cluster_command]\n\n  UNINITED [shape=Mdiamond];\n  DONE [shape=Msquare];\n}\n\n\n */\n\ntypedef enum {\n  BROTLI_STATE_UNINITED,\n  BROTLI_STATE_LARGE_WINDOW_BITS,\n  BROTLI_STATE_INITIALIZE,\n  BROTLI_STATE_METABLOCK_BEGIN,\n  BROTLI_STATE_METABLOCK_HEADER,\n  BROTLI_STATE_METABLOCK_HEADER_2,\n  BROTLI_STATE_CONTEXT_MODES,\n  BROTLI_STATE_COMMAND_BEGIN,\n  BROTLI_STATE_COMMAND_INNER,\n  BROTLI_STATE_COMMAND_POST_DECODE_LITERALS,\n  BROTLI_STATE_COMMAND_POST_WRAP_COPY,\n  BROTLI_STATE_UNCOMPRESSED,\n  BROTLI_STATE_METADATA,\n  BROTLI_STATE_COMMAND_INNER_WRITE,\n  BROTLI_STATE_METABLOCK_DONE,\n  BROTLI_STATE_COMMAND_POST_WRITE_1,\n  BROTLI_STATE_COMMAND_POST_WRITE_2,\n  BROTLI_STATE_BEFORE_COMPRESSED_METABLOCK_HEADER,\n  BROTLI_STATE_HUFFMAN_CODE_0,\n  BROTLI_STATE_HUFFMAN_CODE_1,\n  BROTLI_STATE_HUFFMAN_CODE_2,\n  BROTLI_STATE_HUFFMAN_CODE_3,\n  BROTLI_STATE_CONTEXT_MAP_1,\n  BROTLI_STATE_CONTEXT_MAP_2,\n  BROTLI_STATE_TREE_GROUP,\n  BROTLI_STATE_BEFORE_COMPRESSED_METABLOCK_BODY,\n  BROTLI_STATE_DONE\n} BrotliRunningState;\n\ntypedef enum {\n  BROTLI_STATE_METABLOCK_HEADER_NONE,\n  BROTLI_STATE_METABLOCK_HEADER_EMPTY,\n  BROTLI_STATE_METABLOCK_HEADER_NIBBLES,\n  BROTLI_STATE_METABLOCK_HEADER_SIZE,\n  BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED,\n  BROTLI_STATE_METABLOCK_HEADER_RESERVED,\n  BROTLI_STATE_METABLOCK_HEADER_BYTES,\n  BROTLI_STATE_METABLOCK_HEADER_METADATA\n} BrotliRunningMetablockHeaderState;\n\ntypedef enum {\n  BROTLI_STATE_UNCOMPRESSED_NONE,\n  BROTLI_STATE_UNCOMPRESSED_WRITE\n} BrotliRunningUncompressedState;\n\ntypedef enum {\n  BROTLI_STATE_TREE_GROUP_NONE,\n  BROTLI_STATE_TREE_GROUP_LOOP\n} BrotliRunningTreeGroupState;\n\ntypedef enum {\n  BROTLI_STATE_CONTEXT_MAP_NONE,\n  BROTLI_STATE_CONTEXT_MAP_READ_PREFIX,\n  BROTLI_STATE_CONTEXT_MAP_HUFFMAN,\n  BROTLI_STATE_CONTEXT_MAP_DECODE,\n  BROTLI_STATE_CONTEXT_MAP_TRANSFORM\n} BrotliRunningContextMapState;\n\ntypedef enum {\n  BROTLI_STATE_HUFFMAN_NONE,\n  BROTLI_STATE_HUFFMAN_SIMPLE_SIZE,\n  BROTLI_STATE_HUFFMAN_SIMPLE_READ,\n  BROTLI_STATE_HUFFMAN_SIMPLE_BUILD,\n  BROTLI_STATE_HUFFMAN_COMPLEX,\n  BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS\n} BrotliRunningHuffmanState;\n\ntypedef enum {\n  BROTLI_STATE_DECODE_UINT8_NONE,\n  BROTLI_STATE_DECODE_UINT8_SHORT,\n  BROTLI_STATE_DECODE_UINT8_LONG\n} BrotliRunningDecodeUint8State;\n\ntypedef enum {\n  BROTLI_STATE_READ_BLOCK_LENGTH_NONE,\n  BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX\n} BrotliRunningReadBlockLengthState;\n\n/* BrotliDecoderState addon, used for Compound Dictionary functionality. */\ntypedef struct BrotliDecoderCompoundDictionary {\n  int num_chunks;\n  int total_size;\n  int br_index;\n  int br_offset;\n  int br_length;\n  int br_copied;\n  const uint8_t* chunks[16];\n  int chunk_offsets[16];\n  int block_bits;\n  uint8_t block_map[256];\n} BrotliDecoderCompoundDictionary;\n\ntypedef struct BrotliMetablockHeaderArena {\n  BrotliRunningTreeGroupState substate_tree_group;\n  BrotliRunningContextMapState substate_context_map;\n  BrotliRunningHuffmanState substate_huffman;\n\n  brotli_reg_t sub_loop_counter;\n\n  brotli_reg_t repeat_code_len;\n  brotli_reg_t prev_code_len;\n\n  /* For ReadHuffmanCode. */\n  brotli_reg_t symbol;\n  brotli_reg_t repeat;\n  brotli_reg_t space;\n\n  /* Huffman table for \"histograms\". */\n  HuffmanCode table[32];\n  /* List of heads of symbol chains. */\n  uint16_t* symbol_lists;\n  /* Storage from symbol_lists. */\n  uint16_t symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1 +\n                               BROTLI_NUM_COMMAND_SYMBOLS];\n  /* Tails of symbol chains. */\n  int next_symbol[32];\n  uint8_t code_length_code_lengths[BROTLI_CODE_LENGTH_CODES];\n  /* Population counts for the code lengths. */\n  uint16_t code_length_histo[16];\n  /* TODO(eustas): +2 bytes padding */\n\n  /* For HuffmanTreeGroupDecode. */\n  int htree_index;\n  HuffmanCode* next;\n\n  /* For DecodeContextMap. */\n  brotli_reg_t context_index;\n  brotli_reg_t max_run_length_prefix;\n  brotli_reg_t code;\n  HuffmanCode context_map_table[BROTLI_HUFFMAN_MAX_SIZE_272];\n} BrotliMetablockHeaderArena;\n\ntypedef struct BrotliMetablockBodyArena {\n  uint8_t dist_extra_bits[544];\n  brotli_reg_t dist_offset[544];\n} BrotliMetablockBodyArena;\n\nstruct BrotliDecoderStateStruct {\n  BrotliRunningState state;\n\n  /* This counter is reused for several disjoint loops. */\n  int loop_counter;\n\n  BrotliBitReader br;\n\n  brotli_alloc_func alloc_func;\n  brotli_free_func free_func;\n  void* memory_manager_opaque;\n\n  /* Temporary storage for remaining input. Brotli stream format is designed in\n     a way, that 64 bits are enough to make progress in decoding. */\n  union {\n    uint64_t u64;\n    uint8_t u8[8];\n  } buffer;\n  brotli_reg_t buffer_length;\n\n  int pos;\n  int max_backward_distance;\n  int max_distance;\n  int ringbuffer_size;\n  int ringbuffer_mask;\n  int dist_rb_idx;\n  int dist_rb[4];\n  int error_code;\n  int meta_block_remaining_len;\n\n  uint8_t* ringbuffer;\n  uint8_t* ringbuffer_end;\n  HuffmanCode* htree_command;\n  const uint8_t* context_lookup;\n  uint8_t* context_map_slice;\n  uint8_t* dist_context_map_slice;\n\n  /* This ring buffer holds a few past copy distances that will be used by\n     some special distance codes. */\n  HuffmanTreeGroup literal_hgroup;\n  HuffmanTreeGroup insert_copy_hgroup;\n  HuffmanTreeGroup distance_hgroup;\n  HuffmanCode* block_type_trees;\n  HuffmanCode* block_len_trees;\n  /* This is true if the literal context map histogram type always matches the\n     block type. It is then not needed to keep the context (faster decoding). */\n  int trivial_literal_context;\n  /* Distance context is actual after command is decoded and before distance is\n     computed. After distance computation it is used as a temporary variable. */\n  int distance_context;\n  brotli_reg_t block_length[3];\n  brotli_reg_t block_length_index;\n  brotli_reg_t num_block_types[3];\n  brotli_reg_t block_type_rb[6];\n  brotli_reg_t distance_postfix_bits;\n  brotli_reg_t num_direct_distance_codes;\n  brotli_reg_t num_dist_htrees;\n  uint8_t* dist_context_map;\n  HuffmanCode* literal_htree;\n\n  /* For partial write operations. */\n  size_t rb_roundtrips;  /* how many times we went around the ring-buffer */\n  size_t partial_pos_out;  /* how much output to the user in total */\n\n  /* For InverseMoveToFrontTransform. */\n  brotli_reg_t mtf_upper_bound;\n  uint32_t mtf[64 + 1];\n\n  int copy_length;\n  int distance_code;\n\n  uint8_t dist_htree_index;\n  /* TODO(eustas): +3 bytes padding */\n\n  /* Less used attributes are at the end of this struct. */\n\n  brotli_decoder_metadata_start_func metadata_start_func;\n  brotli_decoder_metadata_chunk_func metadata_chunk_func;\n  void* metadata_callback_opaque;\n\n  /* For reporting. */\n  uint64_t used_input;  /* how many bytes of input are consumed */\n\n  /* States inside function calls. */\n  BrotliRunningMetablockHeaderState substate_metablock_header;\n  BrotliRunningUncompressedState substate_uncompressed;\n  BrotliRunningDecodeUint8State substate_decode_uint8;\n  BrotliRunningReadBlockLengthState substate_read_block_length;\n\n  int new_ringbuffer_size;\n  /* TODO(eustas): +4 bytes padding */\n\n  unsigned int is_last_metablock : 1;\n  unsigned int is_uncompressed : 1;\n  unsigned int is_metadata : 1;\n  unsigned int should_wrap_ringbuffer : 1;\n  unsigned int canny_ringbuffer_allocation : 1;\n  unsigned int large_window : 1;\n  unsigned int window_bits : 6;\n  unsigned int size_nibbles : 8;\n  /* TODO(eustas): +12 bits padding */\n\n  brotli_reg_t num_literal_htrees;\n  uint8_t* context_map;\n  uint8_t* context_modes;\n\n  BrotliSharedDictionary* dictionary;\n  BrotliDecoderCompoundDictionary* compound_dictionary;\n\n  uint32_t trivial_literal_contexts[8];  /* 256 bits */\n\n  union {\n    BrotliMetablockHeaderArena header;\n    BrotliMetablockBodyArena body;\n  } arena;\n};\n\ntypedef struct BrotliDecoderStateStruct BrotliDecoderStateInternal;\n#define BrotliDecoderState BrotliDecoderStateInternal\n\nBROTLI_INTERNAL BROTLI_BOOL BrotliDecoderStateInit(BrotliDecoderState* s,\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);\nBROTLI_INTERNAL void BrotliDecoderStateCleanup(BrotliDecoderState* s);\nBROTLI_INTERNAL void BrotliDecoderStateMetablockBegin(BrotliDecoderState* s);\nBROTLI_INTERNAL void BrotliDecoderStateCleanupAfterMetablock(\n    BrotliDecoderState* s);\nBROTLI_INTERNAL BROTLI_BOOL BrotliDecoderHuffmanTreeGroupInit(\n    BrotliDecoderState* s, HuffmanTreeGroup* group,\n    brotli_reg_t alphabet_size_max, brotli_reg_t alphabet_size_limit,\n    brotli_reg_t ntrees);\n\n#define BROTLI_DECODER_ALLOC(S, L) S->alloc_func(S->memory_manager_opaque, L)\n\n#define BROTLI_DECODER_FREE(S, X) {          \\\n  S->free_func(S->memory_manager_opaque, X); \\\n  X = NULL;                                  \\\n}\n\n/* Literal/Command/Distance block size maximum; same as maximum metablock size;\n   used as block size when there is no block switching. */\n#define BROTLI_BLOCK_SIZE_CAP (1U << 24)\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_DEC_STATE_H_ */\n"
  },
  {
    "path": "c/dec/static_init.c",
    "content": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"static_init.h\"\n\n#include \"../common/platform.h\"\n#include \"../common/static_init.h\"\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\n#include \"../common/dictionary.h\"\n#include \"prefix.h\"\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\nstatic BROTLI_BOOL DoBrotliDecoderStaticInit(void) {\n  BROTLI_BOOL ok = BrotliDecoderInitCmdLut(kCmdLut);\n  if (!ok) return BROTLI_FALSE;\n  return BROTLI_TRUE;\n}\n#endif  /* BROTLI_STATIC_INIT_NONE */\n\n#if (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_EARLY)\nstatic BROTLI_BOOL kEarlyInitOk;\nstatic __attribute__((constructor)) void BrotliDecoderStaticInitEarly(void) {\n  kEarlyInitOk = DoBrotliDecoderStaticInit();\n}\n#elif (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_LAZY)\nstatic BROTLI_BOOL kLazyInitOk;\nvoid BrotliDecoderLazyStaticInitInner(void) {\n  kLazyInitOk = DoBrotliDecoderStaticInit();\n}\n#endif  /* BROTLI_STATIC_INIT_EARLY */\n\nBROTLI_BOOL BrotliDecoderEnsureStaticInit(void) {\n#if (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_NONE)\n  return BROTLI_TRUE;\n#elif (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_EARLY)\n  return kEarlyInitOk;\n#else\n  return kLazyInitOk;\n#endif\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/dec/static_init.h",
    "content": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Central point for static initialization. */\n\n#ifndef THIRD_PARTY_BROTLI_DEC_STATIC_INIT_H_\n#define THIRD_PARTY_BROTLI_DEC_STATIC_INIT_H_\n\n#include \"../common/platform.h\"\n#include \"../common/static_init.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#if (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_LAZY)\nBROTLI_INTERNAL void BrotliDecoderLazyStaticInitInner(void);\nBROTLI_INTERNAL void BrotliDecoderLazyStaticInit(void);\n#endif  /* BROTLI_STATIC_INIT */\n\nBROTLI_INTERNAL BROTLI_BOOL BrotliDecoderEnsureStaticInit(void);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  // THIRD_PARTY_BROTLI_DEC_STATIC_INIT_H_\n"
  },
  {
    "path": "c/enc/backward_references.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Function to find backward reference copies. */\n\n#include \"backward_references.h\"\n\n#include \"../common/constants.h\"\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"command.h\"\n#include \"compound_dictionary.h\"\n#include \"encoder_dict.h\"\n#include \"hash.h\"\n#include \"params.h\"\n#include \"quality.h\"  /* IWYU pragma: keep for inc */\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstatic BROTLI_INLINE size_t ComputeDistanceCode(size_t distance,\n                                                size_t max_distance,\n                                                const int* dist_cache) {\n  if (distance <= max_distance) {\n    size_t distance_plus_3 = distance + 3;\n    size_t offset0 = distance_plus_3 - (size_t)dist_cache[0];\n    size_t offset1 = distance_plus_3 - (size_t)dist_cache[1];\n    if (distance == (size_t)dist_cache[0]) {\n      return 0;\n    } else if (distance == (size_t)dist_cache[1]) {\n      return 1;\n    } else if (offset0 < 7) {\n      return (0x9750468 >> (4 * offset0)) & 0xF;\n    } else if (offset1 < 7) {\n      return (0xFDB1ACE >> (4 * offset1)) & 0xF;\n    } else if (distance == (size_t)dist_cache[2]) {\n      return 2;\n    } else if (distance == (size_t)dist_cache[3]) {\n      return 3;\n    }\n  }\n  return distance + BROTLI_NUM_DISTANCE_SHORT_CODES - 1;\n}\n\n#define EXPAND_CAT(a, b) CAT(a, b)\n#define CAT(a, b) a ## b\n#define FN(X) EXPAND_CAT(X, HASHER())\n#define EXPORT_FN(X) EXPAND_CAT(X, EXPAND_CAT(PREFIX(), HASHER()))\n\n#define PREFIX() N\n#define ENABLE_COMPOUND_DICTIONARY 0\n\n#define HASHER() H2\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H3\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H4\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H5\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H6\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H40\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H41\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H42\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H54\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H35\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H55\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H65\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#if defined(BROTLI_MAX_SIMD_QUALITY)\n#define HASHER() H58\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H68\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#endif\n\n#undef ENABLE_COMPOUND_DICTIONARY\n#undef PREFIX\n#define PREFIX() D\n#define ENABLE_COMPOUND_DICTIONARY 1\n\n#define HASHER() H3\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#define HASHER() H4\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#define HASHER() H5\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#define HASHER() H6\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#define HASHER() H40\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#define HASHER() H41\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#define HASHER() H42\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#define HASHER() H55\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#define HASHER() H65\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#if defined(BROTLI_MAX_SIMD_QUALITY)\n#define HASHER() H58\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#define HASHER() H68\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#endif\n\n#undef ENABLE_COMPOUND_DICTIONARY\n#undef PREFIX\n\n#undef EXPORT_FN\n#undef FN\n#undef CAT\n#undef EXPAND_CAT\n\nvoid BrotliCreateBackwardReferences(size_t num_bytes,\n    size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    ContextLut literal_context_lut, const BrotliEncoderParams* params,\n    Hasher* hasher, int* dist_cache, size_t* last_insert_len,\n    Command* commands, size_t* num_commands, size_t* num_literals) {\n  if (params->dictionary.compound.num_chunks != 0) {\n    switch (params->hasher.type) {\n#define CASE_(N)                                                    \\\n      case N:                                                       \\\n        CreateBackwardReferencesDH ## N(num_bytes,                  \\\n            position, ringbuffer, ringbuffer_mask,                  \\\n            literal_context_lut, params, hasher, dist_cache,        \\\n            last_insert_len, commands, num_commands, num_literals); \\\n        return;\n      CASE_(3)\n      CASE_(4)\n      CASE_(5)\n      CASE_(6)\n#if defined(BROTLI_MAX_SIMD_QUALITY)\n      CASE_(58)\n      CASE_(68)\n#endif\n      CASE_(40)\n      CASE_(41)\n      CASE_(42)\n      CASE_(55)\n      CASE_(65)\n#undef CASE_\n      default:\n        BROTLI_DCHECK(BROTLI_FALSE);\n        break;\n    }\n  }\n\n  switch (params->hasher.type) {\n#define CASE_(N)                                                  \\\n    case N:                                                       \\\n      CreateBackwardReferencesNH ## N(num_bytes,                  \\\n          position, ringbuffer, ringbuffer_mask,                  \\\n          literal_context_lut, params, hasher, dist_cache,        \\\n          last_insert_len, commands, num_commands, num_literals); \\\n      return;\n    FOR_GENERIC_HASHERS(CASE_)\n#undef CASE_\n    default:\n      BROTLI_DCHECK(BROTLI_FALSE);\n      break;\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/backward_references.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Function to find backward reference copies. */\n\n#ifndef BROTLI_ENC_BACKWARD_REFERENCES_H_\n#define BROTLI_ENC_BACKWARD_REFERENCES_H_\n\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"command.h\"\n#include \"hash.h\"\n#include \"params.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* \"commands\" points to the next output command to write to, \"*num_commands\" is\n   initially the total amount of commands output by previous\n   CreateBackwardReferences calls, and must be incremented by the amount written\n   by this call. */\nBROTLI_INTERNAL void BrotliCreateBackwardReferences(size_t num_bytes,\n    size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    ContextLut literal_context_lut, const BrotliEncoderParams* params,\n    Hasher* hasher, int* dist_cache, size_t* last_insert_len,\n    Command* commands, size_t* num_commands, size_t* num_literals);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_BACKWARD_REFERENCES_H_ */\n"
  },
  {
    "path": "c/enc/backward_references_hq.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Function to find backward reference copies. */\n\n#include \"backward_references_hq.h\"\n\n#include \"../common/constants.h\"\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"command.h\"\n#include \"compound_dictionary.h\"\n#include \"encoder_dict.h\"\n#include \"fast_log.h\"\n#include \"find_match_length.h\"\n#include \"hash.h\"\n#include \"literal_cost.h\"\n#include \"memory.h\"\n#include \"params.h\"\n#include \"prefix.h\"\n#include \"quality.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* BrotliCalculateDistanceCodeLimit(BROTLI_MAX_ALLOWED_DISTANCE, 3, 120). */\n#define BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE 544\n\nstatic const float kInfinity = 1.7e38f;  /* ~= 2 ^ 127 */\n\nstatic const BROTLI_MODEL(\"small\") uint32_t kDistanceCacheIndex[] = {\n  0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,\n};\nstatic const BROTLI_MODEL(\"small\") int kDistanceCacheOffset[] = {\n  0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3\n};\n\nvoid BrotliInitZopfliNodes(ZopfliNode* array, size_t length) {\n  ZopfliNode stub;\n  size_t i;\n  stub.length = 1;\n  stub.distance = 0;\n  stub.dcode_insert_length = 0;\n  stub.u.cost = kInfinity;\n  for (i = 0; i < length; ++i) array[i] = stub;\n}\n\nstatic BROTLI_INLINE uint32_t ZopfliNodeCopyLength(const ZopfliNode* self) {\n  return self->length & 0x1FFFFFF;\n}\n\nstatic BROTLI_INLINE uint32_t ZopfliNodeLengthCode(const ZopfliNode* self) {\n  const uint32_t modifier = self->length >> 25;\n  return ZopfliNodeCopyLength(self) + 9u - modifier;\n}\n\nstatic BROTLI_INLINE uint32_t ZopfliNodeCopyDistance(const ZopfliNode* self) {\n  return self->distance;\n}\n\nstatic BROTLI_INLINE uint32_t ZopfliNodeDistanceCode(const ZopfliNode* self) {\n  const uint32_t short_code = self->dcode_insert_length >> 27;\n  return short_code == 0 ?\n      ZopfliNodeCopyDistance(self) + BROTLI_NUM_DISTANCE_SHORT_CODES - 1 :\n      short_code - 1;\n}\n\nstatic BROTLI_INLINE uint32_t ZopfliNodeCommandLength(const ZopfliNode* self) {\n  return ZopfliNodeCopyLength(self) + (self->dcode_insert_length & 0x7FFFFFF);\n}\n\n/* Temporary data for ZopfliCostModelSetFromCommands. */\ntypedef struct ZopfliCostModelArena {\n  uint32_t histogram_literal[BROTLI_NUM_LITERAL_SYMBOLS];\n  uint32_t histogram_cmd[BROTLI_NUM_COMMAND_SYMBOLS];\n  uint32_t histogram_dist[BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE];\n  float cost_literal[BROTLI_NUM_LITERAL_SYMBOLS];\n} ZopfliCostModelArena;\n\n/* Histogram based cost model for zopflification. */\ntypedef struct ZopfliCostModel {\n  /* The insert and copy length symbols. */\n  float cost_cmd_[BROTLI_NUM_COMMAND_SYMBOLS];\n  float* cost_dist_;\n  uint32_t distance_histogram_size;\n  /* Cumulative costs of literals per position in the stream. */\n  float* literal_costs_;\n  float min_cost_cmd_;\n  size_t num_bytes_;\n\n  /* Temporary data. */\n  union {\n    size_t literal_histograms[3 * 256];\n    ZopfliCostModelArena arena;\n  };\n} ZopfliCostModel;\n\nstatic void InitZopfliCostModel(\n    MemoryManager* m, ZopfliCostModel* self, const BrotliDistanceParams* dist,\n    size_t num_bytes) {\n  self->num_bytes_ = num_bytes;\n  self->literal_costs_ = BROTLI_ALLOC(m, float, num_bytes + 2);\n  self->cost_dist_ = BROTLI_ALLOC(m, float, dist->alphabet_size_limit);\n  self->distance_histogram_size = dist->alphabet_size_limit;\n  if (BROTLI_IS_OOM(m)) return;\n}\n\nstatic void CleanupZopfliCostModel(MemoryManager* m, ZopfliCostModel* self) {\n  BROTLI_FREE(m, self->literal_costs_);\n  BROTLI_FREE(m, self->cost_dist_);\n}\n\nstatic void SetCost(const uint32_t* histogram, size_t histogram_size,\n                    BROTLI_BOOL literal_histogram, float* cost) {\n  size_t sum = 0;\n  size_t missing_symbol_sum;\n  float log2sum;\n  float missing_symbol_cost;\n  size_t i;\n  for (i = 0; i < histogram_size; i++) {\n    sum += histogram[i];\n  }\n  log2sum = (float)FastLog2(sum);\n  missing_symbol_sum = sum;\n  if (!literal_histogram) {\n    for (i = 0; i < histogram_size; i++) {\n      if (histogram[i] == 0) missing_symbol_sum++;\n    }\n  }\n  missing_symbol_cost = (float)FastLog2(missing_symbol_sum) + 2;\n  for (i = 0; i < histogram_size; i++) {\n    if (histogram[i] == 0) {\n      cost[i] = missing_symbol_cost;\n      continue;\n    }\n\n    /* Shannon bits for this symbol. */\n    cost[i] = log2sum - (float)FastLog2(histogram[i]);\n\n    /* Cannot be coded with less than 1 bit */\n    if (cost[i] < 1) cost[i] = 1;\n  }\n}\n\nstatic void ZopfliCostModelSetFromCommands(ZopfliCostModel* self,\n                                           size_t position,\n                                           const uint8_t* ringbuffer,\n                                           size_t ringbuffer_mask,\n                                           const Command* commands,\n                                           size_t num_commands,\n                                           size_t last_insert_len) {\n  ZopfliCostModelArena* arena = &self->arena;\n  size_t pos = position - last_insert_len;\n  float min_cost_cmd = kInfinity;\n  size_t i;\n  float* cost_cmd = self->cost_cmd_;\n\n  memset(arena->histogram_literal, 0, sizeof(arena->histogram_literal));\n  memset(arena->histogram_cmd, 0, sizeof(arena->histogram_cmd));\n  memset(arena->histogram_dist, 0, sizeof(arena->histogram_dist));\n\n  for (i = 0; i < num_commands; i++) {\n    size_t inslength = commands[i].insert_len_;\n    size_t copylength = CommandCopyLen(&commands[i]);\n    size_t distcode = commands[i].dist_prefix_ & 0x3FF;\n    size_t cmdcode = commands[i].cmd_prefix_;\n    size_t j;\n\n    arena->histogram_cmd[cmdcode]++;\n    if (cmdcode >= 128) arena->histogram_dist[distcode]++;\n\n    for (j = 0; j < inslength; j++) {\n      arena->histogram_literal[ringbuffer[(pos + j) & ringbuffer_mask]]++;\n    }\n\n    pos += inslength + copylength;\n  }\n\n  SetCost(arena->histogram_literal, BROTLI_NUM_LITERAL_SYMBOLS, BROTLI_TRUE,\n          arena->cost_literal);\n  SetCost(arena->histogram_cmd, BROTLI_NUM_COMMAND_SYMBOLS, BROTLI_FALSE,\n          cost_cmd);\n  SetCost(arena->histogram_dist, self->distance_histogram_size, BROTLI_FALSE,\n          self->cost_dist_);\n\n  for (i = 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) {\n    min_cost_cmd = BROTLI_MIN(float, min_cost_cmd, cost_cmd[i]);\n  }\n  self->min_cost_cmd_ = min_cost_cmd;\n\n  {\n    float* literal_costs = self->literal_costs_;\n    float literal_carry = 0.0;\n    size_t num_bytes = self->num_bytes_;\n    literal_costs[0] = 0.0;\n    for (i = 0; i < num_bytes; ++i) {\n      literal_carry +=\n          arena->cost_literal[ringbuffer[(position + i) & ringbuffer_mask]];\n      literal_costs[i + 1] = literal_costs[i] + literal_carry;\n      literal_carry -= literal_costs[i + 1] - literal_costs[i];\n    }\n  }\n}\n\nstatic void ZopfliCostModelSetFromLiteralCosts(ZopfliCostModel* self,\n                                               size_t position,\n                                               const uint8_t* ringbuffer,\n                                               size_t ringbuffer_mask) {\n  float* literal_costs = self->literal_costs_;\n  float literal_carry = 0.0;\n  float* cost_dist = self->cost_dist_;\n  float* cost_cmd = self->cost_cmd_;\n  size_t num_bytes = self->num_bytes_;\n  size_t i;\n  BrotliEstimateBitCostsForLiterals(position, num_bytes, ringbuffer_mask,\n                                    ringbuffer, self->literal_histograms,\n                                    &literal_costs[1]);\n  literal_costs[0] = 0.0;\n  for (i = 0; i < num_bytes; ++i) {\n    literal_carry += literal_costs[i + 1];\n    literal_costs[i + 1] = literal_costs[i] + literal_carry;\n    literal_carry -= literal_costs[i + 1] - literal_costs[i];\n  }\n  for (i = 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) {\n    cost_cmd[i] = (float)FastLog2(11 + (uint32_t)i);\n  }\n  for (i = 0; i < self->distance_histogram_size; ++i) {\n    cost_dist[i] = (float)FastLog2(20 + (uint32_t)i);\n  }\n  self->min_cost_cmd_ = (float)FastLog2(11);\n}\n\nstatic BROTLI_INLINE float ZopfliCostModelGetCommandCost(\n    const ZopfliCostModel* self, uint16_t cmdcode) {\n  return self->cost_cmd_[cmdcode];\n}\n\nstatic BROTLI_INLINE float ZopfliCostModelGetDistanceCost(\n    const ZopfliCostModel* self, size_t distcode) {\n  return self->cost_dist_[distcode];\n}\n\nstatic BROTLI_INLINE float ZopfliCostModelGetLiteralCosts(\n    const ZopfliCostModel* self, size_t from, size_t to) {\n  return self->literal_costs_[to] - self->literal_costs_[from];\n}\n\nstatic BROTLI_INLINE float ZopfliCostModelGetMinCostCmd(\n    const ZopfliCostModel* self) {\n  return self->min_cost_cmd_;\n}\n\n/* REQUIRES: len >= 2, start_pos <= pos */\n/* REQUIRES: cost < kInfinity, nodes[start_pos].cost < kInfinity */\n/* Maintains the \"ZopfliNode array invariant\". */\nstatic BROTLI_INLINE void UpdateZopfliNode(ZopfliNode* nodes, size_t pos,\n    size_t start_pos, size_t len, size_t len_code, size_t dist,\n    size_t short_code, float cost) {\n  ZopfliNode* next = &nodes[pos + len];\n  next->length = (uint32_t)(len | ((len + 9u - len_code) << 25));\n  next->distance = (uint32_t)dist;\n  next->dcode_insert_length = (uint32_t)(\n      (short_code << 27) | (pos - start_pos));\n  next->u.cost = cost;\n}\n\ntypedef struct PosData {\n  size_t pos;\n  int distance_cache[4];\n  float costdiff;\n  float cost;\n} PosData;\n\n/* Maintains the smallest 8 cost difference together with their positions */\ntypedef struct StartPosQueue {\n  PosData q_[8];\n  size_t idx_;\n} StartPosQueue;\n\nstatic BROTLI_INLINE void InitStartPosQueue(StartPosQueue* self) {\n  self->idx_ = 0;\n}\n\nstatic size_t StartPosQueueSize(const StartPosQueue* self) {\n  return BROTLI_MIN(size_t, self->idx_, 8);\n}\n\nstatic void StartPosQueuePush(StartPosQueue* self, const PosData* posdata) {\n  size_t offset = ~(self->idx_++) & 7;\n  size_t len = StartPosQueueSize(self);\n  size_t i;\n  PosData* q = self->q_;\n  q[offset] = *posdata;\n  /* Restore the sorted order. In the list of |len| items at most |len - 1|\n     adjacent element comparisons / swaps are required. */\n  for (i = 1; i < len; ++i) {\n    if (q[offset & 7].costdiff > q[(offset + 1) & 7].costdiff) {\n      BROTLI_SWAP(PosData, q, offset & 7, (offset + 1) & 7);\n    }\n    ++offset;\n  }\n}\n\nstatic const PosData* StartPosQueueAt(const StartPosQueue* self, size_t k) {\n  return &self->q_[(k - self->idx_) & 7];\n}\n\n/* Returns the minimum possible copy length that can improve the cost of any */\n/* future position. */\nstatic size_t ComputeMinimumCopyLength(const float start_cost,\n                                       const ZopfliNode* nodes,\n                                       const size_t num_bytes,\n                                       const size_t pos) {\n  /* Compute the minimum possible cost of reaching any future position. */\n  float min_cost = start_cost;\n  size_t len = 2;\n  size_t next_len_bucket = 4;\n  size_t next_len_offset = 10;\n  while (pos + len <= num_bytes && nodes[pos + len].u.cost <= min_cost) {\n    /* We already reached (pos + len) with no more cost than the minimum\n       possible cost of reaching anything from this pos, so there is no point in\n       looking for lengths <= len. */\n    ++len;\n    if (len == next_len_offset) {\n      /* We reached the next copy length code bucket, so we add one more\n         extra bit to the minimum cost. */\n      min_cost += 1.0f;\n      next_len_offset += next_len_bucket;\n      next_len_bucket *= 2;\n    }\n  }\n  return len;\n}\n\n/* REQUIRES: nodes[pos].cost < kInfinity\n   REQUIRES: nodes[0..pos] satisfies that \"ZopfliNode array invariant\". */\nstatic uint32_t ComputeDistanceShortcut(const size_t block_start,\n                                        const size_t pos,\n                                        const size_t max_backward_limit,\n                                        const size_t gap,\n                                        const ZopfliNode* nodes) {\n  const size_t c_len = ZopfliNodeCopyLength(&nodes[pos]);\n  const size_t i_len = nodes[pos].dcode_insert_length & 0x7FFFFFF;\n  const size_t dist = ZopfliNodeCopyDistance(&nodes[pos]);\n  /* Since |block_start + pos| is the end position of the command, the copy part\n     starts from |block_start + pos - c_len|. Distances that are greater than\n     this or greater than |max_backward_limit| + |gap| are static dictionary\n     references, and do not update the last distances.\n     Also distance code 0 (last distance) does not update the last distances. */\n  if (pos == 0) {\n    return 0;\n  } else if (dist + c_len <= block_start + pos + gap &&\n             dist <= max_backward_limit + gap &&\n             ZopfliNodeDistanceCode(&nodes[pos]) > 0) {\n    return (uint32_t)pos;\n  } else {\n    return nodes[pos - c_len - i_len].u.shortcut;\n  }\n}\n\n/* Fills in dist_cache[0..3] with the last four distances (as defined by\n   Section 4. of the Spec) that would be used at (block_start + pos) if we\n   used the shortest path of commands from block_start, computed from\n   nodes[0..pos]. The last four distances at block_start are in\n   starting_dist_cache[0..3].\n   REQUIRES: nodes[pos].cost < kInfinity\n   REQUIRES: nodes[0..pos] satisfies that \"ZopfliNode array invariant\". */\nstatic void ComputeDistanceCache(const size_t pos,\n                                 const int* starting_dist_cache,\n                                 const ZopfliNode* nodes,\n                                 int* dist_cache) {\n  int idx = 0;\n  size_t p = nodes[pos].u.shortcut;\n  while (idx < 4 && p > 0) {\n    const size_t i_len = nodes[p].dcode_insert_length & 0x7FFFFFF;\n    const size_t c_len = ZopfliNodeCopyLength(&nodes[p]);\n    const size_t dist = ZopfliNodeCopyDistance(&nodes[p]);\n    dist_cache[idx++] = (int)dist;\n    /* Because of prerequisite, p >= c_len + i_len >= 2. */\n    p = nodes[p - c_len - i_len].u.shortcut;\n  }\n  for (; idx < 4; ++idx) {\n    dist_cache[idx] = *starting_dist_cache++;\n  }\n}\n\n/* Maintains \"ZopfliNode array invariant\" and pushes node to the queue, if it\n   is eligible. */\nstatic void EvaluateNode(\n    const size_t block_start, const size_t pos, const size_t max_backward_limit,\n    const size_t gap, const int* starting_dist_cache,\n    const ZopfliCostModel* model, StartPosQueue* queue, ZopfliNode* nodes) {\n  /* Save cost, because ComputeDistanceCache invalidates it. */\n  float node_cost = nodes[pos].u.cost;\n  nodes[pos].u.shortcut = ComputeDistanceShortcut(\n      block_start, pos, max_backward_limit, gap, nodes);\n  if (node_cost <= ZopfliCostModelGetLiteralCosts(model, 0, pos)) {\n    PosData posdata;\n    posdata.pos = pos;\n    posdata.cost = node_cost;\n    posdata.costdiff = node_cost -\n        ZopfliCostModelGetLiteralCosts(model, 0, pos);\n    ComputeDistanceCache(\n        pos, starting_dist_cache, nodes, posdata.distance_cache);\n    StartPosQueuePush(queue, &posdata);\n  }\n}\n\n/* Returns longest copy length. */\nstatic size_t UpdateNodes(\n    const size_t num_bytes, const size_t block_start, const size_t pos,\n    const uint8_t* ringbuffer, const size_t ringbuffer_mask,\n    const BrotliEncoderParams* params, const size_t max_backward_limit,\n    const int* starting_dist_cache, const size_t num_matches,\n    const BackwardMatch* matches, const ZopfliCostModel* model,\n    StartPosQueue* queue, ZopfliNode* nodes) {\n  const size_t stream_offset = params->stream_offset;\n  const size_t cur_ix = block_start + pos;\n  const size_t cur_ix_masked = cur_ix & ringbuffer_mask;\n  const size_t max_distance = BROTLI_MIN(size_t, cur_ix, max_backward_limit);\n  const size_t dictionary_start = BROTLI_MIN(size_t,\n      cur_ix + stream_offset, max_backward_limit);\n  const size_t max_len = num_bytes - pos;\n  const size_t max_zopfli_len = MaxZopfliLen(params);\n  const size_t max_iters = MaxZopfliCandidates(params);\n  size_t min_len;\n  size_t result = 0;\n  size_t k;\n  const CompoundDictionary* addon = &params->dictionary.compound;\n  size_t gap = addon->total_size;\n\n  BROTLI_DCHECK(cur_ix_masked + max_len <= ringbuffer_mask + 1);\n\n  EvaluateNode(block_start + stream_offset, pos, max_backward_limit, gap,\n      starting_dist_cache, model, queue, nodes);\n\n  {\n    const PosData* posdata = StartPosQueueAt(queue, 0);\n    float min_cost = (posdata->cost + ZopfliCostModelGetMinCostCmd(model) +\n        ZopfliCostModelGetLiteralCosts(model, posdata->pos, pos));\n    min_len = ComputeMinimumCopyLength(min_cost, nodes, num_bytes, pos);\n  }\n\n  /* Go over the command starting positions in order of increasing cost\n     difference. */\n  for (k = 0; k < max_iters && k < StartPosQueueSize(queue); ++k) {\n    const PosData* posdata = StartPosQueueAt(queue, k);\n    const size_t start = posdata->pos;\n    const uint16_t inscode = GetInsertLengthCode(pos - start);\n    const float start_costdiff = posdata->costdiff;\n    const float base_cost = start_costdiff + (float)GetInsertExtra(inscode) +\n        ZopfliCostModelGetLiteralCosts(model, 0, pos);\n\n    /* Look for last distance matches using the distance cache from this\n       starting position. */\n    size_t best_len = min_len - 1;\n    size_t j = 0;\n    for (; j < BROTLI_NUM_DISTANCE_SHORT_CODES && best_len < max_len; ++j) {\n      const size_t idx = kDistanceCacheIndex[j];\n      const size_t backward =\n          (size_t)(posdata->distance_cache[idx] + kDistanceCacheOffset[j]);\n      size_t prev_ix = cur_ix - backward;\n      size_t len = 0;\n      uint8_t continuation = ringbuffer[cur_ix_masked + best_len];\n      if (cur_ix_masked + best_len > ringbuffer_mask) {\n        break;\n      }\n      if (BROTLI_PREDICT_FALSE(backward > dictionary_start + gap)) {\n        /* Word dictionary -> ignore. */\n        continue;\n      }\n      if (backward <= max_distance) {\n        /* Regular backward reference. */\n        if (prev_ix >= cur_ix) {\n          continue;\n        }\n\n        prev_ix &= ringbuffer_mask;\n        if (prev_ix + best_len > ringbuffer_mask ||\n            continuation != ringbuffer[prev_ix + best_len]) {\n          continue;\n        }\n        len = FindMatchLengthWithLimit(&ringbuffer[prev_ix],\n                                       &ringbuffer[cur_ix_masked],\n                                       max_len);\n      } else if (backward > dictionary_start) {\n        size_t d = 0;\n        size_t offset;\n        size_t limit;\n        const uint8_t* source;\n        offset = dictionary_start + 1 + addon->total_size - 1;\n        while (offset >= backward + addon->chunk_offsets[d + 1]) d++;\n        source = addon->chunk_source[d];\n        offset = offset - addon->chunk_offsets[d] - backward;\n        limit = addon->chunk_offsets[d + 1] - addon->chunk_offsets[d] - offset;\n        limit = limit > max_len ? max_len : limit;\n        if (best_len >= limit ||\n            continuation != source[offset + best_len]) {\n          continue;\n        }\n        len = FindMatchLengthWithLimit(&source[offset],\n                                       &ringbuffer[cur_ix_masked],\n                                       limit);\n      } else {\n        /* \"Gray\" area. It is addressable by decoder, but this encoder\n           instance does not have that data -> should not touch it. */\n        continue;\n      }\n      {\n        const float dist_cost = base_cost +\n            ZopfliCostModelGetDistanceCost(model, j);\n        size_t l;\n        for (l = best_len + 1; l <= len; ++l) {\n          const uint16_t copycode = GetCopyLengthCode(l);\n          const uint16_t cmdcode =\n              CombineLengthCodes(inscode, copycode, j == 0);\n          const float cost = (cmdcode < 128 ? base_cost : dist_cost) +\n              (float)GetCopyExtra(copycode) +\n              ZopfliCostModelGetCommandCost(model, cmdcode);\n          if (cost < nodes[pos + l].u.cost) {\n            UpdateZopfliNode(nodes, pos, start, l, l, backward, j + 1, cost);\n            result = BROTLI_MAX(size_t, result, l);\n          }\n          best_len = l;\n        }\n      }\n    }\n\n    /* At higher iterations look only for new last distance matches, since\n       looking only for new command start positions with the same distances\n       does not help much. */\n    if (k >= 2) continue;\n\n    {\n      /* Loop through all possible copy lengths at this position. */\n      size_t len = min_len;\n      for (j = 0; j < num_matches; ++j) {\n        BackwardMatch match = matches[j];\n        size_t dist = match.distance;\n        BROTLI_BOOL is_dictionary_match =\n            TO_BROTLI_BOOL(dist > dictionary_start + gap);\n        /* We already tried all possible last distance matches, so we can use\n           normal distance code here. */\n        size_t dist_code = dist + BROTLI_NUM_DISTANCE_SHORT_CODES - 1;\n        uint16_t dist_symbol;\n        uint32_t distextra;\n        uint32_t distnumextra;\n        float dist_cost;\n        size_t max_match_len;\n        PrefixEncodeCopyDistance(\n            dist_code, params->dist.num_direct_distance_codes,\n            params->dist.distance_postfix_bits, &dist_symbol, &distextra);\n        distnumextra = dist_symbol >> 10;\n        dist_cost = base_cost + (float)distnumextra +\n            ZopfliCostModelGetDistanceCost(model, dist_symbol & 0x3FF);\n\n        /* Try all copy lengths up until the maximum copy length corresponding\n           to this distance. If the distance refers to the static dictionary, or\n           the maximum length is long enough, try only one maximum length. */\n        max_match_len = BackwardMatchLength(&match);\n        if (len < max_match_len &&\n            (is_dictionary_match || max_match_len > max_zopfli_len)) {\n          len = max_match_len;\n        }\n        for (; len <= max_match_len; ++len) {\n          const size_t len_code =\n              is_dictionary_match ? BackwardMatchLengthCode(&match) : len;\n          const uint16_t copycode = GetCopyLengthCode(len_code);\n          const uint16_t cmdcode = CombineLengthCodes(inscode, copycode, 0);\n          const float cost = dist_cost + (float)GetCopyExtra(copycode) +\n              ZopfliCostModelGetCommandCost(model, cmdcode);\n          if (cost < nodes[pos + len].u.cost) {\n            UpdateZopfliNode(nodes, pos, start, len, len_code, dist, 0, cost);\n            result = BROTLI_MAX(size_t, result, len);\n          }\n        }\n      }\n    }\n  }\n  return result;\n}\n\nstatic size_t ComputeShortestPathFromNodes(size_t num_bytes,\n    ZopfliNode* nodes) {\n  size_t index = num_bytes;\n  size_t num_commands = 0;\n  while ((nodes[index].dcode_insert_length & 0x7FFFFFF) == 0 &&\n      nodes[index].length == 1) --index;\n  nodes[index].u.next = BROTLI_UINT32_MAX;\n  while (index != 0) {\n    size_t len = ZopfliNodeCommandLength(&nodes[index]);\n    index -= len;\n    nodes[index].u.next = (uint32_t)len;\n    num_commands++;\n  }\n  return num_commands;\n}\n\n/* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */\nvoid BrotliZopfliCreateCommands(const size_t num_bytes,\n    const size_t block_start, const ZopfliNode* nodes, int* dist_cache,\n    size_t* last_insert_len, const BrotliEncoderParams* params,\n    Command* commands, size_t* num_literals) {\n  const size_t stream_offset = params->stream_offset;\n  const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);\n  size_t pos = 0;\n  uint32_t offset = nodes[0].u.next;\n  size_t i;\n  size_t gap = params->dictionary.compound.total_size;\n  for (i = 0; offset != BROTLI_UINT32_MAX; i++) {\n    const ZopfliNode* next = &nodes[pos + offset];\n    size_t copy_length = ZopfliNodeCopyLength(next);\n    size_t insert_length = next->dcode_insert_length & 0x7FFFFFF;\n    pos += insert_length;\n    offset = next->u.next;\n    if (i == 0) {\n      insert_length += *last_insert_len;\n      *last_insert_len = 0;\n    }\n    {\n      size_t distance = ZopfliNodeCopyDistance(next);\n      size_t len_code = ZopfliNodeLengthCode(next);\n      size_t dictionary_start = BROTLI_MIN(size_t,\n          block_start + pos + stream_offset, max_backward_limit);\n      BROTLI_BOOL is_dictionary =\n          TO_BROTLI_BOOL(distance > dictionary_start + gap);\n      size_t dist_code = ZopfliNodeDistanceCode(next);\n      InitCommand(&commands[i], &params->dist, insert_length,\n          copy_length, (int)len_code - (int)copy_length, dist_code);\n\n      if (!is_dictionary && dist_code > 0) {\n        dist_cache[3] = dist_cache[2];\n        dist_cache[2] = dist_cache[1];\n        dist_cache[1] = dist_cache[0];\n        dist_cache[0] = (int)distance;\n      }\n    }\n\n    *num_literals += insert_length;\n    pos += copy_length;\n  }\n  *last_insert_len += num_bytes - pos;\n}\n\nstatic size_t ZopfliIterate(size_t num_bytes, size_t position,\n    const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    const BrotliEncoderParams* params, const size_t gap, const int* dist_cache,\n    const ZopfliCostModel* model, const uint32_t* num_matches,\n    const BackwardMatch* matches, ZopfliNode* nodes) {\n  const size_t stream_offset = params->stream_offset;\n  const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);\n  const size_t max_zopfli_len = MaxZopfliLen(params);\n  StartPosQueue queue;\n  size_t cur_match_pos = 0;\n  size_t i;\n  nodes[0].length = 0;\n  nodes[0].u.cost = 0;\n  InitStartPosQueue(&queue);\n  for (i = 0; i + 3 < num_bytes; i++) {\n    size_t skip = UpdateNodes(num_bytes, position, i, ringbuffer,\n        ringbuffer_mask, params, max_backward_limit, dist_cache,\n        num_matches[i], &matches[cur_match_pos], model, &queue, nodes);\n    if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip = 0;\n    cur_match_pos += num_matches[i];\n    if (num_matches[i] == 1 &&\n        BackwardMatchLength(&matches[cur_match_pos - 1]) > max_zopfli_len) {\n      skip = BROTLI_MAX(size_t,\n          BackwardMatchLength(&matches[cur_match_pos - 1]), skip);\n    }\n    if (skip > 1) {\n      skip--;\n      while (skip) {\n        i++;\n        if (i + 3 >= num_bytes) break;\n        EvaluateNode(position + stream_offset, i, max_backward_limit, gap,\n            dist_cache, model, &queue, nodes);\n        cur_match_pos += num_matches[i];\n        skip--;\n      }\n    }\n  }\n  return ComputeShortestPathFromNodes(num_bytes, nodes);\n}\n\nstatic void MergeMatches(BackwardMatch* dst,\n    BackwardMatch* src1, size_t len1, BackwardMatch* src2, size_t len2) {\n  while (len1 > 0 && len2 > 0) {\n    size_t l1 = BackwardMatchLength(src1);\n    size_t l2 = BackwardMatchLength(src2);\n    if (l1 < l2 || ((l1 == l2) && (src1->distance < src2->distance))) {\n      *dst++ = *src1++;\n      len1--;\n    } else {\n      *dst++ = *src2++;\n      len2--;\n    }\n  }\n  while (len1-- > 0) *dst++ = *src1++;\n  while (len2-- > 0) *dst++ = *src2++;\n}\n\n/* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */\nsize_t BrotliZopfliComputeShortestPath(MemoryManager* m, size_t num_bytes,\n    size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    ContextLut literal_context_lut, const BrotliEncoderParams* params,\n    const int* dist_cache, Hasher* hasher, ZopfliNode* nodes) {\n  const size_t stream_offset = params->stream_offset;\n  const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);\n  const size_t max_zopfli_len = MaxZopfliLen(params);\n  StartPosQueue queue;\n  BackwardMatch* BROTLI_RESTRICT matches =\n      BROTLI_ALLOC(m, BackwardMatch, 2 * (MAX_NUM_MATCHES_H10 + 64));\n  const size_t store_end = num_bytes >= StoreLookaheadH10() ?\n      position + num_bytes - StoreLookaheadH10() + 1 : position;\n  size_t i;\n  const CompoundDictionary* addon = &params->dictionary.compound;\n  size_t gap = addon->total_size;\n  size_t lz_matches_offset =\n      (addon->num_chunks != 0) ? (MAX_NUM_MATCHES_H10 + 128) : 0;\n  ZopfliCostModel* model = BROTLI_ALLOC(m, ZopfliCostModel, 1);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(model) || BROTLI_IS_NULL(matches)) {\n    return 0;\n  }\n  nodes[0].length = 0;\n  nodes[0].u.cost = 0;\n  InitZopfliCostModel(m, model, &params->dist, num_bytes);\n  if (BROTLI_IS_OOM(m)) return 0;\n  ZopfliCostModelSetFromLiteralCosts(\n      model, position, ringbuffer, ringbuffer_mask);\n  InitStartPosQueue(&queue);\n  for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; i++) {\n    const size_t pos = position + i;\n    const size_t max_distance = BROTLI_MIN(size_t, pos, max_backward_limit);\n    const size_t dictionary_start = BROTLI_MIN(size_t,\n        pos + stream_offset, max_backward_limit);\n    size_t skip;\n    size_t num_matches;\n    int dict_id = 0;\n    if (params->dictionary.contextual.context_based) {\n      uint8_t p1 = pos >= 1 ?\n          ringbuffer[(size_t)(pos - 1) & ringbuffer_mask] : 0;\n      uint8_t p2 = pos >= 2 ?\n          ringbuffer[(size_t)(pos - 2) & ringbuffer_mask] : 0;\n      dict_id = params->dictionary.contextual.context_map[\n          BROTLI_CONTEXT(p1, p2, literal_context_lut)];\n    }\n    num_matches = FindAllMatchesH10(&hasher->privat._H10,\n        params->dictionary.contextual.dict[dict_id],\n        ringbuffer, ringbuffer_mask, pos, num_bytes - i, max_distance,\n        dictionary_start + gap, params, &matches[lz_matches_offset]);\n    if (addon->num_chunks != 0) {\n      size_t cd_matches = LookupAllCompoundDictionaryMatches(addon,\n          ringbuffer, ringbuffer_mask, pos, 3, num_bytes - i,\n          dictionary_start, params->dist.max_distance,\n          &matches[lz_matches_offset - 64], 64);\n      MergeMatches(matches, &matches[lz_matches_offset - 64], cd_matches,\n          &matches[lz_matches_offset], num_matches);\n      num_matches += cd_matches;\n    }\n    if (num_matches > 0 &&\n        BackwardMatchLength(&matches[num_matches - 1]) > max_zopfli_len) {\n      matches[0] = matches[num_matches - 1];\n      num_matches = 1;\n    }\n    skip = UpdateNodes(num_bytes, position, i, ringbuffer, ringbuffer_mask,\n        params, max_backward_limit, dist_cache, num_matches, matches, model,\n        &queue, nodes);\n    if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip = 0;\n    if (num_matches == 1 && BackwardMatchLength(&matches[0]) > max_zopfli_len) {\n      skip = BROTLI_MAX(size_t, BackwardMatchLength(&matches[0]), skip);\n    }\n    if (skip > 1) {\n      /* Add the tail of the copy to the hasher. */\n      StoreRangeH10(&hasher->privat._H10,\n          ringbuffer, ringbuffer_mask, pos + 1, BROTLI_MIN(\n          size_t, pos + skip, store_end));\n      skip--;\n      while (skip) {\n        i++;\n        if (i + HashTypeLengthH10() - 1 >= num_bytes) break;\n        EvaluateNode(position + stream_offset, i, max_backward_limit, gap,\n            dist_cache, model, &queue, nodes);\n        skip--;\n      }\n    }\n  }\n  CleanupZopfliCostModel(m, model);\n  BROTLI_FREE(m, model);\n  BROTLI_FREE(m, matches);\n  return ComputeShortestPathFromNodes(num_bytes, nodes);\n}\n\nvoid BrotliCreateZopfliBackwardReferences(MemoryManager* m, size_t num_bytes,\n    size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    ContextLut literal_context_lut, const BrotliEncoderParams* params,\n    Hasher* hasher, int* dist_cache, size_t* last_insert_len,\n    Command* commands, size_t* num_commands, size_t* num_literals) {\n  ZopfliNode* nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(nodes)) return;\n  BrotliInitZopfliNodes(nodes, num_bytes + 1);\n  *num_commands += BrotliZopfliComputeShortestPath(m, num_bytes,\n      position, ringbuffer, ringbuffer_mask, literal_context_lut, params,\n      dist_cache, hasher, nodes);\n  if (BROTLI_IS_OOM(m)) return;\n  BrotliZopfliCreateCommands(num_bytes, position, nodes, dist_cache,\n      last_insert_len, params, commands, num_literals);\n  BROTLI_FREE(m, nodes);\n}\n\nvoid BrotliCreateHqZopfliBackwardReferences(MemoryManager* m, size_t num_bytes,\n    size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    ContextLut literal_context_lut, const BrotliEncoderParams* params,\n    Hasher* hasher, int* dist_cache, size_t* last_insert_len,\n    Command* commands, size_t* num_commands, size_t* num_literals) {\n  const size_t stream_offset = params->stream_offset;\n  const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);\n  uint32_t* num_matches = BROTLI_ALLOC(m, uint32_t, num_bytes);\n  size_t matches_size = 4 * num_bytes;\n  const size_t store_end = num_bytes >= StoreLookaheadH10() ?\n      position + num_bytes - StoreLookaheadH10() + 1 : position;\n  size_t cur_match_pos = 0;\n  size_t i;\n  size_t orig_num_literals;\n  size_t orig_last_insert_len;\n  int orig_dist_cache[4];\n  size_t orig_num_commands;\n  ZopfliCostModel* model = BROTLI_ALLOC(m, ZopfliCostModel, 1);\n  ZopfliNode* nodes;\n  BackwardMatch* matches = BROTLI_ALLOC(m, BackwardMatch, matches_size);\n  const CompoundDictionary* addon = &params->dictionary.compound;\n  size_t gap = addon->total_size;\n  size_t shadow_matches =\n      (addon->num_chunks != 0) ? (MAX_NUM_MATCHES_H10 + 128) : 0;\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(model) ||\n      BROTLI_IS_NULL(num_matches) || BROTLI_IS_NULL(matches)) {\n    return;\n  }\n  for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; ++i) {\n    const size_t pos = position + i;\n    size_t max_distance = BROTLI_MIN(size_t, pos, max_backward_limit);\n    size_t dictionary_start = BROTLI_MIN(size_t,\n        pos + stream_offset, max_backward_limit);\n    size_t max_length = num_bytes - i;\n    size_t num_found_matches;\n    size_t cur_match_end;\n    size_t j;\n    int dict_id = 0;\n    if (params->dictionary.contextual.context_based) {\n      uint8_t p1 = pos >= 1 ?\n          ringbuffer[(size_t)(pos - 1) & ringbuffer_mask] : 0;\n      uint8_t p2 = pos >= 2 ?\n          ringbuffer[(size_t)(pos - 2) & ringbuffer_mask] : 0;\n      dict_id = params->dictionary.contextual.context_map[\n          BROTLI_CONTEXT(p1, p2, literal_context_lut)];\n    }\n    /* Ensure that we have enough free slots. */\n    BROTLI_ENSURE_CAPACITY(m, BackwardMatch, matches, matches_size,\n        cur_match_pos + MAX_NUM_MATCHES_H10 + shadow_matches);\n    if (BROTLI_IS_OOM(m)) return;\n    num_found_matches = FindAllMatchesH10(&hasher->privat._H10,\n        params->dictionary.contextual.dict[dict_id],\n        ringbuffer, ringbuffer_mask, pos, max_length,\n        max_distance, dictionary_start + gap, params,\n        &matches[cur_match_pos + shadow_matches]);\n    if (addon->num_chunks != 0) {\n      size_t cd_matches = LookupAllCompoundDictionaryMatches(addon,\n          ringbuffer, ringbuffer_mask, pos, 3, max_length,\n          dictionary_start, params->dist.max_distance,\n          &matches[cur_match_pos + shadow_matches - 64], 64);\n      MergeMatches(&matches[cur_match_pos],\n          &matches[cur_match_pos + shadow_matches - 64], cd_matches,\n          &matches[cur_match_pos + shadow_matches], num_found_matches);\n      num_found_matches += cd_matches;\n    }\n    cur_match_end = cur_match_pos + num_found_matches;\n    for (j = cur_match_pos; j + 1 < cur_match_end; ++j) {\n      BROTLI_DCHECK(BackwardMatchLength(&matches[j]) <=\n          BackwardMatchLength(&matches[j + 1]));\n    }\n    num_matches[i] = (uint32_t)num_found_matches;\n    if (num_found_matches > 0) {\n      const size_t match_len = BackwardMatchLength(&matches[cur_match_end - 1]);\n      if (match_len > MAX_ZOPFLI_LEN_QUALITY_11) {\n        const size_t skip = match_len - 1;\n        matches[cur_match_pos++] = matches[cur_match_end - 1];\n        num_matches[i] = 1;\n        /* Add the tail of the copy to the hasher. */\n        StoreRangeH10(&hasher->privat._H10,\n                      ringbuffer, ringbuffer_mask, pos + 1,\n                      BROTLI_MIN(size_t, pos + match_len, store_end));\n        memset(&num_matches[i + 1], 0, skip * sizeof(num_matches[0]));\n        i += skip;\n      } else {\n        cur_match_pos = cur_match_end;\n      }\n    }\n  }\n  orig_num_literals = *num_literals;\n  orig_last_insert_len = *last_insert_len;\n  memcpy(orig_dist_cache, dist_cache, 4 * sizeof(dist_cache[0]));\n  orig_num_commands = *num_commands;\n  nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(nodes)) return;\n  InitZopfliCostModel(m, model, &params->dist, num_bytes);\n  if (BROTLI_IS_OOM(m)) return;\n  for (i = 0; i < 2; i++) {\n    BrotliInitZopfliNodes(nodes, num_bytes + 1);\n    if (i == 0) {\n      ZopfliCostModelSetFromLiteralCosts(\n          model, position, ringbuffer, ringbuffer_mask);\n    } else {\n      ZopfliCostModelSetFromCommands(model, position, ringbuffer,\n          ringbuffer_mask, commands, *num_commands - orig_num_commands,\n          orig_last_insert_len);\n    }\n    *num_commands = orig_num_commands;\n    *num_literals = orig_num_literals;\n    *last_insert_len = orig_last_insert_len;\n    memcpy(dist_cache, orig_dist_cache, 4 * sizeof(dist_cache[0]));\n    *num_commands += ZopfliIterate(num_bytes, position, ringbuffer,\n        ringbuffer_mask, params, gap, dist_cache, model, num_matches, matches,\n        nodes);\n    BrotliZopfliCreateCommands(num_bytes, position, nodes, dist_cache,\n        last_insert_len, params, commands, num_literals);\n  }\n  CleanupZopfliCostModel(m, model);\n  BROTLI_FREE(m, model);\n  BROTLI_FREE(m, nodes);\n  BROTLI_FREE(m, matches);\n  BROTLI_FREE(m, num_matches);\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/backward_references_hq.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Function to find backward reference copies. */\n\n#ifndef BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_\n#define BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_\n\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"command.h\"\n#include \"hash.h\"\n#include \"memory.h\"\n#include \"params.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nBROTLI_INTERNAL void BrotliCreateZopfliBackwardReferences(MemoryManager* m,\n    size_t num_bytes,\n    size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    ContextLut literal_context_lut, const BrotliEncoderParams* params,\n    Hasher* hasher, int* dist_cache, size_t* last_insert_len,\n    Command* commands, size_t* num_commands, size_t* num_literals);\n\nBROTLI_INTERNAL void BrotliCreateHqZopfliBackwardReferences(MemoryManager* m,\n    size_t num_bytes,\n    size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    ContextLut literal_context_lut, const BrotliEncoderParams* params,\n    Hasher* hasher, int* dist_cache, size_t* last_insert_len,\n    Command* commands, size_t* num_commands, size_t* num_literals);\n\ntypedef struct ZopfliNode {\n  /* Best length to get up to this byte (not including this byte itself)\n     highest 7 bit is used to reconstruct the length code. */\n  uint32_t length;\n  /* Distance associated with the length. */\n  uint32_t distance;\n  /* Number of literal inserts before this copy; highest 5 bits contain\n     distance short code + 1 (or zero if no short code). */\n  uint32_t dcode_insert_length;\n\n  /* This union holds information used by dynamic-programming. During forward\n     pass |cost| it used to store the goal function. When node is processed its\n     |cost| is invalidated in favor of |shortcut|. On path back-tracing pass\n     |next| is assigned the offset to next node on the path. */\n  union {\n    /* Smallest cost to get to this byte from the beginning, as found so far. */\n    float cost;\n    /* Offset to the next node on the path. Equals to command_length() of the\n       next node on the path. For last node equals to BROTLI_UINT32_MAX */\n    uint32_t next;\n    /* Node position that provides next distance for distance cache. */\n    uint32_t shortcut;\n  } u;\n} ZopfliNode;\n\nBROTLI_INTERNAL void BrotliInitZopfliNodes(ZopfliNode* array, size_t length);\n\n/* Computes the shortest path of commands from position to at most\n   position + num_bytes.\n\n   On return, path->size() is the number of commands found and path[i] is the\n   length of the i-th command (copy length plus insert length).\n   Note that the sum of the lengths of all commands can be less than num_bytes.\n\n   On return, the nodes[0..num_bytes] array will have the following\n   \"ZopfliNode array invariant\":\n   For each i in [1..num_bytes], if nodes[i].cost < kInfinity, then\n     (1) nodes[i].copy_length() >= 2\n     (2) nodes[i].command_length() <= i and\n     (3) nodes[i - nodes[i].command_length()].cost < kInfinity */\nBROTLI_INTERNAL size_t BrotliZopfliComputeShortestPath(\n    MemoryManager* m, size_t num_bytes,\n    size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    ContextLut literal_context_lut, const BrotliEncoderParams* params,\n    const int* dist_cache, Hasher* hasher, ZopfliNode* nodes);\n\nBROTLI_INTERNAL void BrotliZopfliCreateCommands(\n    const size_t num_bytes, const size_t block_start, const ZopfliNode* nodes,\n    int* dist_cache, size_t* last_insert_len, const BrotliEncoderParams* params,\n    Command* commands, size_t* num_literals);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_ */\n"
  },
  {
    "path": "c/enc/backward_references_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: EXPORT_FN, FN */\n\nstatic BROTLI_NOINLINE void EXPORT_FN(CreateBackwardReferences)(\n    size_t num_bytes, size_t position,\n    const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    ContextLut literal_context_lut, const BrotliEncoderParams* params,\n    Hasher* hasher, int* dist_cache, size_t* last_insert_len,\n    Command* commands, size_t* num_commands, size_t* num_literals) {\n  HASHER()* privat = &hasher->privat.FN(_);\n  /* Set maximum distance, see section 9.1. of the spec. */\n  const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);\n  const size_t position_offset = params->stream_offset;\n\n  const Command* const orig_commands = commands;\n  size_t insert_length = *last_insert_len;\n  const size_t pos_end = position + num_bytes;\n  const size_t store_end = num_bytes >= FN(StoreLookahead)() ?\n      position + num_bytes - FN(StoreLookahead)() + 1 : position;\n\n  /* For speed up heuristics for random data. */\n  const size_t random_heuristics_window_size =\n      LiteralSpreeLengthForSparseSearch(params);\n  size_t apply_random_heuristics = position + random_heuristics_window_size;\n  const size_t gap = params->dictionary.compound.total_size;\n\n  /* Minimum score to accept a backward reference. */\n  const score_t kMinScore = BROTLI_SCORE_BASE + 100;\n\n  FN(PrepareDistanceCache)(privat, dist_cache);\n\n  while (position + FN(HashTypeLength)() < pos_end) {\n    size_t max_length = pos_end - position;\n    size_t max_distance = BROTLI_MIN(size_t, position, max_backward_limit);\n    size_t dictionary_start = BROTLI_MIN(size_t,\n        position + position_offset, max_backward_limit);\n    HasherSearchResult sr;\n    int dict_id = 0;\n    uint8_t p1 = 0;\n    uint8_t p2 = 0;\n    if (params->dictionary.contextual.context_based) {\n      p1 = position >= 1 ?\n          ringbuffer[(size_t)(position - 1) & ringbuffer_mask] : 0;\n      p2 = position >= 2 ?\n          ringbuffer[(size_t)(position - 2) & ringbuffer_mask] : 0;\n      dict_id = params->dictionary.contextual.context_map[\n          BROTLI_CONTEXT(p1, p2, literal_context_lut)];\n    }\n    sr.len = 0;\n    sr.len_code_delta = 0;\n    sr.distance = 0;\n    sr.score = kMinScore;\n    FN(FindLongestMatch)(privat, params->dictionary.contextual.dict[dict_id],\n        ringbuffer, ringbuffer_mask, dist_cache, position, max_length,\n        max_distance, dictionary_start + gap, params->dist.max_distance, &sr);\n    if (ENABLE_COMPOUND_DICTIONARY) {\n      LookupCompoundDictionaryMatch(&params->dictionary.compound, ringbuffer,\n          ringbuffer_mask, dist_cache, position, max_length,\n          dictionary_start, params->dist.max_distance, &sr);\n    }\n    if (sr.score > kMinScore) {\n      /* Found a match. Let's look for something even better ahead. */\n      int delayed_backward_references_in_row = 0;\n      --max_length;\n      for (;; --max_length) {\n        const score_t cost_diff_lazy = 175;\n        HasherSearchResult sr2;\n        sr2.len = params->quality < MIN_QUALITY_FOR_EXTENSIVE_REFERENCE_SEARCH ?\n            BROTLI_MIN(size_t, sr.len - 1, max_length) : 0;\n        sr2.len_code_delta = 0;\n        sr2.distance = 0;\n        sr2.score = kMinScore;\n        max_distance = BROTLI_MIN(size_t, position + 1, max_backward_limit);\n        dictionary_start = BROTLI_MIN(size_t,\n            position + 1 + position_offset, max_backward_limit);\n        if (params->dictionary.contextual.context_based) {\n          p2 = p1;\n          p1 = ringbuffer[position & ringbuffer_mask];\n          dict_id = params->dictionary.contextual.context_map[\n              BROTLI_CONTEXT(p1, p2, literal_context_lut)];\n        }\n        FN(FindLongestMatch)(privat,\n            params->dictionary.contextual.dict[dict_id],\n            ringbuffer, ringbuffer_mask, dist_cache, position + 1, max_length,\n            max_distance, dictionary_start + gap, params->dist.max_distance,\n            &sr2);\n        if (ENABLE_COMPOUND_DICTIONARY) {\n          LookupCompoundDictionaryMatch(\n              &params->dictionary.compound, ringbuffer,\n              ringbuffer_mask, dist_cache, position + 1, max_length,\n              dictionary_start, params->dist.max_distance, &sr2);\n        }\n        if (sr2.score >= sr.score + cost_diff_lazy) {\n          /* Ok, let's just write one byte for now and start a match from the\n             next byte. */\n          ++position;\n          ++insert_length;\n          sr = sr2;\n          if (++delayed_backward_references_in_row < 4 &&\n              position + FN(HashTypeLength)() < pos_end) {\n            continue;\n          }\n        }\n        break;\n      }\n      apply_random_heuristics =\n          position + 2 * sr.len + random_heuristics_window_size;\n      dictionary_start = BROTLI_MIN(size_t,\n          position + position_offset, max_backward_limit);\n      {\n        /* The first 16 codes are special short-codes,\n           and the minimum offset is 1. */\n        size_t distance_code = ComputeDistanceCode(\n            sr.distance, dictionary_start + gap, dist_cache);\n        if ((sr.distance <= (dictionary_start + gap)) && distance_code > 0) {\n          dist_cache[3] = dist_cache[2];\n          dist_cache[2] = dist_cache[1];\n          dist_cache[1] = dist_cache[0];\n          dist_cache[0] = (int)sr.distance;\n          FN(PrepareDistanceCache)(privat, dist_cache);\n        }\n        InitCommand(commands++, &params->dist, insert_length,\n            sr.len, sr.len_code_delta, distance_code);\n      }\n      *num_literals += insert_length;\n      insert_length = 0;\n      /* Put the hash keys into the table, if there are enough bytes left.\n         Depending on the hasher implementation, it can push all positions\n         in the given range or only a subset of them.\n         Avoid hash poisoning with RLE data. */\n      {\n        size_t range_start = position + 2;\n        size_t range_end = BROTLI_MIN(size_t, position + sr.len, store_end);\n        if (sr.distance < (sr.len >> 2)) {\n          range_start = BROTLI_MIN(size_t, range_end, BROTLI_MAX(size_t,\n              range_start, position + sr.len - (sr.distance << 2)));\n        }\n        FN(StoreRange)(privat, ringbuffer, ringbuffer_mask, range_start,\n                       range_end);\n      }\n      position += sr.len;\n    } else {\n      ++insert_length;\n      ++position;\n      /* If we have not seen matches for a long time, we can skip some\n         match lookups. Unsuccessful match lookups are very very expensive\n         and this kind of a heuristic speeds up compression quite\n         a lot. */\n      if (position > apply_random_heuristics) {\n        /* Going through uncompressible data, jump. */\n        if (position >\n            apply_random_heuristics + 4 * random_heuristics_window_size) {\n          /* It is quite a long time since we saw a copy, so we assume\n             that this data is not compressible, and store hashes less\n             often. Hashes of non compressible data are less likely to\n             turn out to be useful in the future, too, so we store less of\n             them to not to flood out the hash table of good compressible\n             data. */\n          const size_t kMargin =\n              BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 4);\n          size_t pos_jump =\n              BROTLI_MIN(size_t, position + 16, pos_end - kMargin);\n          for (; position < pos_jump; position += 4) {\n            FN(Store)(privat, ringbuffer, ringbuffer_mask, position);\n            insert_length += 4;\n          }\n        } else {\n          const size_t kMargin =\n              BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 2);\n          size_t pos_jump =\n              BROTLI_MIN(size_t, position + 8, pos_end - kMargin);\n          for (; position < pos_jump; position += 2) {\n            FN(Store)(privat, ringbuffer, ringbuffer_mask, position);\n            insert_length += 2;\n          }\n        }\n      }\n    }\n  }\n  insert_length += pos_end - position;\n  *last_insert_len = insert_length;\n  *num_commands += (size_t)(commands - orig_commands);\n}\n"
  },
  {
    "path": "c/enc/bit_cost.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Functions to estimate the bit cost of Huffman trees. */\n\n#include \"bit_cost.h\"\n\n#include \"../common/platform.h\"\n#include \"fast_log.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\ndouble BrotliBitsEntropy(const uint32_t* population, size_t size) {\n  size_t sum = 0;\n  double retval = 0;\n  const uint32_t* population_end = population + size;\n  size_t p;\n  if (size & 1) {\n    goto odd_number_of_elements_left;\n  }\n  while (population < population_end) {\n    p = *population++;\n    sum += p;\n    retval -= (double)p * FastLog2(p);\n odd_number_of_elements_left:\n    p = *population++;\n    sum += p;\n    retval -= (double)p * FastLog2(p);\n  }\n  if (sum) retval += (double)sum * FastLog2(sum);\n\n  if (retval < (double)sum) {\n    /* TODO(eustas): consider doing that per-symbol? */\n    /* At least one bit per literal is needed. */\n    retval = (double)sum;\n  }\n\n  return retval;\n}\n\n#define FN(X) X ## Literal\n#include \"bit_cost_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#define FN(X) X ## Command\n#include \"bit_cost_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#define FN(X) X ## Distance\n#include \"bit_cost_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/bit_cost.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Functions to estimate the bit cost of Huffman trees. */\n\n#ifndef BROTLI_ENC_BIT_COST_H_\n#define BROTLI_ENC_BIT_COST_H_\n\n#include \"../common/platform.h\"\n#include \"histogram.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nBROTLI_INTERNAL double BrotliBitsEntropy(\n    const uint32_t* population, size_t size);\nBROTLI_INTERNAL double BrotliPopulationCostLiteral(\n    const HistogramLiteral* histogram);\nBROTLI_INTERNAL double BrotliPopulationCostCommand(\n    const HistogramCommand* histogram);\nBROTLI_INTERNAL double BrotliPopulationCostDistance(\n    const HistogramDistance* histogram);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_BIT_COST_H_ */\n"
  },
  {
    "path": "c/enc/bit_cost_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN */\n\n#define HistogramType FN(Histogram)\n\ndouble FN(BrotliPopulationCost)(const HistogramType* histogram) {\n  static const double kOneSymbolHistogramCost = 12;\n  static const double kTwoSymbolHistogramCost = 20;\n  static const double kThreeSymbolHistogramCost = 28;\n  static const double kFourSymbolHistogramCost = 37;\n  const size_t data_size = FN(HistogramDataSize)();\n  int count = 0;\n  size_t s[5];\n  double bits = 0.0;\n  size_t i;\n  if (histogram->total_count_ == 0) {\n    return kOneSymbolHistogramCost;\n  }\n  for (i = 0; i < data_size; ++i) {\n    if (histogram->data_[i] > 0) {\n      s[count] = i;\n      ++count;\n      if (count > 4) break;\n    }\n  }\n  if (count == 1) {\n    return kOneSymbolHistogramCost;\n  }\n  if (count == 2) {\n    return (kTwoSymbolHistogramCost + (double)histogram->total_count_);\n  }\n  if (count == 3) {\n    const uint32_t histo0 = histogram->data_[s[0]];\n    const uint32_t histo1 = histogram->data_[s[1]];\n    const uint32_t histo2 = histogram->data_[s[2]];\n    const uint32_t histomax =\n        BROTLI_MAX(uint32_t, histo0, BROTLI_MAX(uint32_t, histo1, histo2));\n    return (kThreeSymbolHistogramCost +\n            2 * (histo0 + histo1 + histo2) - histomax);\n  }\n  if (count == 4) {\n    uint32_t histo[4];\n    uint32_t h23;\n    uint32_t histomax;\n    for (i = 0; i < 4; ++i) {\n      histo[i] = histogram->data_[s[i]];\n    }\n    /* Sort */\n    for (i = 0; i < 4; ++i) {\n      size_t j;\n      for (j = i + 1; j < 4; ++j) {\n        if (histo[j] > histo[i]) {\n          BROTLI_SWAP(uint32_t, histo, j, i);\n        }\n      }\n    }\n    h23 = histo[2] + histo[3];\n    histomax = BROTLI_MAX(uint32_t, h23, histo[0]);\n    return (kFourSymbolHistogramCost +\n            3 * h23 + 2 * (histo[0] + histo[1]) - histomax);\n  }\n\n  {\n    /* In this loop we compute the entropy of the histogram and simultaneously\n       build a simplified histogram of the code length codes where we use the\n       zero repeat code 17, but we don't use the non-zero repeat code 16. */\n    size_t max_depth = 1;\n    uint32_t depth_histo[BROTLI_CODE_LENGTH_CODES] = { 0 };\n    const double log2total = FastLog2(histogram->total_count_);\n    for (i = 0; i < data_size;) {\n      if (histogram->data_[i] > 0) {\n        /* Compute -log2(P(symbol)) = -log2(count(symbol)/total_count) =\n                                    = log2(total_count) - log2(count(symbol)) */\n        double log2p = log2total - FastLog2(histogram->data_[i]);\n        /* Approximate the bit depth by round(-log2(P(symbol))) */\n        size_t depth = (size_t)(log2p + 0.5);\n        bits += histogram->data_[i] * log2p;\n        if (depth > 15) {\n          depth = 15;\n        }\n        if (depth > max_depth) {\n          max_depth = depth;\n        }\n        ++depth_histo[depth];\n        ++i;\n      } else {\n        /* Compute the run length of zeros and add the appropriate number of 0\n           and 17 code length codes to the code length code histogram. */\n        uint32_t reps = 1;\n        size_t k;\n        for (k = i + 1; k < data_size && histogram->data_[k] == 0; ++k) {\n          ++reps;\n        }\n        i += reps;\n        if (i == data_size) {\n          /* Don't add any cost for the last zero run, since these are encoded\n             only implicitly. */\n          break;\n        }\n        if (reps < 3) {\n          depth_histo[0] += reps;\n        } else {\n          reps -= 2;\n          while (reps > 0) {\n            ++depth_histo[BROTLI_REPEAT_ZERO_CODE_LENGTH];\n            /* Add the 3 extra bits for the 17 code length code. */\n            bits += 3;\n            reps >>= 3;\n          }\n        }\n      }\n    }\n    /* Add the estimated encoding cost of the code length code histogram. */\n    bits += (double)(18 + 2 * max_depth);\n    /* Add the entropy of the code length code histogram. */\n    bits += BrotliBitsEntropy(depth_histo, BROTLI_CODE_LENGTH_CODES);\n  }\n  return bits;\n}\n\n#undef HistogramType\n"
  },
  {
    "path": "c/enc/block_encoder_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2014 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN */\n\n#define HistogramType FN(Histogram)\n\n/* Creates entropy codes for all block types and stores them to the bit\n   stream. */\nstatic void FN(BuildAndStoreEntropyCodes)(MemoryManager* m, BlockEncoder* self,\n    const HistogramType* histograms, const size_t histograms_size,\n    const size_t alphabet_size, HuffmanTree* tree,\n    size_t* storage_ix, uint8_t* storage) {\n  const size_t table_size = histograms_size * self->histogram_length_;\n  self->depths_ = BROTLI_ALLOC(m, uint8_t, table_size);\n  self->bits_ = BROTLI_ALLOC(m, uint16_t, table_size);\n  if (BROTLI_IS_OOM(m)) return;\n\n  {\n    size_t i;\n    for (i = 0; i < histograms_size; ++i) {\n      size_t ix = i * self->histogram_length_;\n      BuildAndStoreHuffmanTree(&histograms[i].data_[0], self->histogram_length_,\n          alphabet_size, tree, &self->depths_[ix], &self->bits_[ix],\n          storage_ix, storage);\n    }\n  }\n}\n\n#undef HistogramType\n"
  },
  {
    "path": "c/enc/block_splitter.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Block split point selection utilities. */\n\n#include \"block_splitter.h\"\n\n#include \"../common/platform.h\"\n#include \"bit_cost.h\"\n#include \"cluster.h\"\n#include \"command.h\"\n#include \"fast_log.h\"\n#include \"histogram.h\"\n#include \"memory.h\"\n#include \"quality.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstatic const size_t kMaxLiteralHistograms = 100;\nstatic const size_t kMaxCommandHistograms = 50;\nstatic const double kLiteralBlockSwitchCost = 28.1;\nstatic const double kCommandBlockSwitchCost = 13.5;\nstatic const double kDistanceBlockSwitchCost = 14.6;\nstatic const size_t kLiteralStrideLength = 70;\nstatic const size_t kCommandStrideLength = 40;\nstatic const size_t kDistanceStrideLength = 40;\nstatic const size_t kSymbolsPerLiteralHistogram = 544;\nstatic const size_t kSymbolsPerCommandHistogram = 530;\nstatic const size_t kSymbolsPerDistanceHistogram = 544;\nstatic const size_t kMinLengthForBlockSplitting = 128;\nstatic const size_t kIterMulForRefining = 2;\nstatic const size_t kMinItersForRefining = 100;\n\nstatic size_t CountLiterals(const Command* cmds, const size_t num_commands) {\n  /* Count how many we have. */\n  size_t total_length = 0;\n  size_t i;\n  for (i = 0; i < num_commands; ++i) {\n    total_length += cmds[i].insert_len_;\n  }\n  return total_length;\n}\n\nstatic void CopyLiteralsToByteArray(const Command* cmds,\n                                    const size_t num_commands,\n                                    const uint8_t* data,\n                                    const size_t offset,\n                                    const size_t mask,\n                                    uint8_t* literals) {\n  size_t pos = 0;\n  size_t from_pos = offset & mask;\n  size_t i;\n  for (i = 0; i < num_commands; ++i) {\n    size_t insert_len = cmds[i].insert_len_;\n    if (from_pos + insert_len > mask) {\n      size_t head_size = mask + 1 - from_pos;\n      memcpy(literals + pos, data + from_pos, head_size);\n      from_pos = 0;\n      pos += head_size;\n      insert_len -= head_size;\n    }\n    if (insert_len > 0) {\n      memcpy(literals + pos, data + from_pos, insert_len);\n      pos += insert_len;\n    }\n    from_pos = (from_pos + insert_len + CommandCopyLen(&cmds[i])) & mask;\n  }\n}\n\nstatic BROTLI_INLINE uint32_t MyRand(uint32_t* seed) {\n  /* Initial seed should be 7. In this case, loop length is (1 << 29). */\n  *seed *= 16807U;\n  return *seed;\n}\n\nstatic BROTLI_INLINE double BitCost(size_t count) {\n  return count == 0 ? -2.0 : FastLog2(count);\n}\n\n#define HISTOGRAMS_PER_BATCH 64\n#define CLUSTERS_PER_BATCH 16\n\n#define FN(X) X ## Literal\n#define DataType uint8_t\n/* NOLINTNEXTLINE(build/include) */\n#include \"block_splitter_inc.h\"\n#undef DataType\n#undef FN\n\n#define FN(X) X ## Command\n#define DataType uint16_t\n/* NOLINTNEXTLINE(build/include) */\n#include \"block_splitter_inc.h\"\n#undef FN\n\n#define FN(X) X ## Distance\n/* NOLINTNEXTLINE(build/include) */\n#include \"block_splitter_inc.h\"\n#undef DataType\n#undef FN\n\nvoid BrotliInitBlockSplit(BlockSplit* self) {\n  self->num_types = 0;\n  self->num_blocks = 0;\n  self->types = 0;\n  self->lengths = 0;\n  self->types_alloc_size = 0;\n  self->lengths_alloc_size = 0;\n}\n\nvoid BrotliDestroyBlockSplit(MemoryManager* m, BlockSplit* self) {\n  BROTLI_FREE(m, self->types);\n  BROTLI_FREE(m, self->lengths);\n}\n\n/* Extracts literals, command distance and prefix codes, then applies\n * SplitByteVector to create partitioning. */\nvoid BrotliSplitBlock(MemoryManager* m,\n                      const Command* cmds,\n                      const size_t num_commands,\n                      const uint8_t* data,\n                      const size_t pos,\n                      const size_t mask,\n                      const BrotliEncoderParams* params,\n                      BlockSplit* literal_split,\n                      BlockSplit* insert_and_copy_split,\n                      BlockSplit* dist_split) {\n  {\n    size_t literals_count = CountLiterals(cmds, num_commands);\n    uint8_t* literals = BROTLI_ALLOC(m, uint8_t, literals_count);\n    if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(literals)) return;\n    /* Create a continuous array of literals. */\n    CopyLiteralsToByteArray(cmds, num_commands, data, pos, mask, literals);\n    /* Create the block split on the array of literals.\n     * Literal histograms can have alphabet size up to 256.\n     * Though, to accommodate context modeling, less than half of maximum size\n     * is allowed. */\n    SplitByteVectorLiteral(\n        m, literals, literals_count,\n        kSymbolsPerLiteralHistogram, kMaxLiteralHistograms,\n        kLiteralStrideLength, kLiteralBlockSwitchCost, params,\n        literal_split);\n    if (BROTLI_IS_OOM(m)) return;\n    BROTLI_FREE(m, literals);\n    /* NB: this might be a good place for injecting extra splitting without\n     *     increasing encoder complexity; however, output partition would be less\n     *     optimal than one produced with forced splitting inside\n     *     SplitByteVector (FindBlocks / ClusterBlocks). */\n  }\n\n  {\n    /* Compute prefix codes for commands. */\n    uint16_t* insert_and_copy_codes = BROTLI_ALLOC(m, uint16_t, num_commands);\n    size_t i;\n    if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(insert_and_copy_codes)) return;\n    for (i = 0; i < num_commands; ++i) {\n      insert_and_copy_codes[i] = cmds[i].cmd_prefix_;\n    }\n    /* Create the block split on the array of command prefixes. */\n    SplitByteVectorCommand(\n        m, insert_and_copy_codes, num_commands,\n        kSymbolsPerCommandHistogram, kMaxCommandHistograms,\n        kCommandStrideLength, kCommandBlockSwitchCost, params,\n        insert_and_copy_split);\n    if (BROTLI_IS_OOM(m)) return;\n    /* TODO(eustas): reuse for distances? */\n    BROTLI_FREE(m, insert_and_copy_codes);\n  }\n\n  {\n    /* Create a continuous array of distance prefixes. */\n    uint16_t* distance_prefixes = BROTLI_ALLOC(m, uint16_t, num_commands);\n    size_t j = 0;\n    size_t i;\n    if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(distance_prefixes)) return;\n    for (i = 0; i < num_commands; ++i) {\n      const Command* cmd = &cmds[i];\n      if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {\n        distance_prefixes[j++] = cmd->dist_prefix_ & 0x3FF;\n      }\n    }\n    /* Create the block split on the array of distance prefixes. */\n    SplitByteVectorDistance(\n        m, distance_prefixes, j,\n        kSymbolsPerDistanceHistogram, kMaxCommandHistograms,\n        kDistanceStrideLength, kDistanceBlockSwitchCost, params,\n        dist_split);\n    if (BROTLI_IS_OOM(m)) return;\n    BROTLI_FREE(m, distance_prefixes);\n  }\n}\n\n#if defined(BROTLI_TEST)\nsize_t BrotliCountLiteralsForTest(const Command*, size_t);\nsize_t BrotliCountLiteralsForTest(const Command* cmds, size_t num_commands) {\n  return CountLiterals(cmds, num_commands);\n}\nvoid BrotliCopyLiteralsToByteArrayForTest(\n    const Command*, size_t, const uint8_t*, size_t, size_t, uint8_t*);\nvoid BrotliCopyLiteralsToByteArrayForTest(const Command* cmds,\n    size_t num_commands, const uint8_t* data, size_t offset, size_t mask,\n    uint8_t* literals) {\n  CopyLiteralsToByteArray(cmds, num_commands, data, offset, mask, literals);\n}\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/block_splitter.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Block split point selection utilities. */\n\n#ifndef BROTLI_ENC_BLOCK_SPLITTER_H_\n#define BROTLI_ENC_BLOCK_SPLITTER_H_\n\n#include \"../common/platform.h\"\n#include \"command.h\"\n#include \"memory.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\ntypedef struct BlockSplit {\n  size_t num_types;  /* Amount of distinct types */\n  size_t num_blocks;  /* Amount of values in types and length */\n  uint8_t* types;\n  uint32_t* lengths;\n\n  size_t types_alloc_size;\n  size_t lengths_alloc_size;\n} BlockSplit;\n\nBROTLI_INTERNAL void BrotliInitBlockSplit(BlockSplit* self);\nBROTLI_INTERNAL void BrotliDestroyBlockSplit(MemoryManager* m,\n                                             BlockSplit* self);\n\nBROTLI_INTERNAL void BrotliSplitBlock(MemoryManager* m,\n                                      const Command* cmds,\n                                      const size_t num_commands,\n                                      const uint8_t* data,\n                                      const size_t offset,\n                                      const size_t mask,\n                                      const BrotliEncoderParams* params,\n                                      BlockSplit* literal_split,\n                                      BlockSplit* insert_and_copy_split,\n                                      BlockSplit* dist_split);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_BLOCK_SPLITTER_H_ */\n"
  },
  {
    "path": "c/enc/block_splitter_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN, DataType */\n\n#define HistogramType FN(Histogram)\n\nstatic void FN(InitialEntropyCodes)(const DataType* data, size_t length,\n                                    size_t stride,\n                                    size_t num_histograms,\n                                    HistogramType* histograms) {\n  uint32_t seed = 7;\n  size_t block_length = length / num_histograms;\n  size_t i;\n  FN(ClearHistograms)(histograms, num_histograms);\n  for (i = 0; i < num_histograms; ++i) {\n    size_t pos = length * i / num_histograms;\n    if (i != 0) {\n      pos += MyRand(&seed) % block_length;\n    }\n    if (pos + stride >= length) {\n      pos = length - stride - 1;\n    }\n    FN(HistogramAddVector)(&histograms[i], data + pos, stride);\n  }\n}\n\nstatic void FN(RandomSample)(uint32_t* seed,\n                             const DataType* data,\n                             size_t length,\n                             size_t stride,\n                             HistogramType* sample) {\n  size_t pos = 0;\n  if (stride >= length) {\n    stride = length;\n  } else {\n    pos = MyRand(seed) % (length - stride + 1);\n  }\n  FN(HistogramAddVector)(sample, data + pos, stride);\n}\n\nstatic void FN(RefineEntropyCodes)(const DataType* data, size_t length,\n                                   size_t stride,\n                                   size_t num_histograms,\n                                   HistogramType* histograms,\n                                   HistogramType* tmp) {\n  size_t iters =\n      kIterMulForRefining * length / stride + kMinItersForRefining;\n  uint32_t seed = 7;\n  size_t iter;\n  iters = ((iters + num_histograms - 1) / num_histograms) * num_histograms;\n  for (iter = 0; iter < iters; ++iter) {\n    FN(HistogramClear)(tmp);\n    FN(RandomSample)(&seed, data, length, stride, tmp);\n    FN(HistogramAddHistogram)(&histograms[iter % num_histograms], tmp);\n  }\n}\n\n/* Assigns a block id from the range [0, num_histograms) to each data element\n   in data[0..length) and fills in block_id[0..length) with the assigned values.\n   Returns the number of blocks, i.e. one plus the number of block switches. */\nstatic size_t FN(FindBlocks)(const DataType* data, const size_t length,\n                             const double block_switch_bitcost,\n                             const size_t num_histograms,\n                             const HistogramType* histograms,\n                             double* insert_cost,\n                             double* cost,\n                             uint8_t* switch_signal,\n                             uint8_t* block_id) {\n  const size_t alphabet_size = FN(HistogramDataSize)();\n  const size_t bitmap_len = (num_histograms + 7) >> 3;\n  size_t num_blocks = 1;\n  size_t byte_ix;\n  size_t i;\n  size_t j;\n  BROTLI_DCHECK(num_histograms <= 256);\n\n  /* Trivial case: single histogram -> single block type. */\n  if (num_histograms <= 1) {\n    for (i = 0; i < length; ++i) {\n      block_id[i] = 0;\n    }\n    return 1;\n  }\n\n  /* Fill bitcost for each symbol of all histograms.\n   * Non-existing symbol cost: 2 + log2(total_count).\n   * Regular symbol cost: -log2(symbol_count / total_count). */\n  memset(insert_cost, 0,\n         sizeof(insert_cost[0]) * alphabet_size * num_histograms);\n  for (i = 0; i < num_histograms; ++i) {\n    insert_cost[i] = FastLog2((uint32_t)histograms[i].total_count_);\n  }\n  for (i = alphabet_size; i != 0;) {\n    /* Reverse order to use the 0-th row as a temporary storage. */\n    --i;\n    for (j = 0; j < num_histograms; ++j) {\n      insert_cost[i * num_histograms + j] =\n          insert_cost[j] - BitCost(histograms[j].data_[i]);\n    }\n  }\n\n  /* After each iteration of this loop, cost[k] will contain the difference\n     between the minimum cost of arriving at the current byte position using\n     entropy code k, and the minimum cost of arriving at the current byte\n     position. This difference is capped at the block switch cost, and if it\n     reaches block switch cost, it means that when we trace back from the last\n     position, we need to switch here. */\n  memset(cost, 0, sizeof(cost[0]) * num_histograms);\n  memset(switch_signal, 0, sizeof(switch_signal[0]) * length * bitmap_len);\n  for (byte_ix = 0; byte_ix < length; ++byte_ix) {\n    size_t ix = byte_ix * bitmap_len;\n    size_t symbol = data[byte_ix];\n    size_t insert_cost_ix = symbol * num_histograms;\n    double min_cost = 1e99;\n    double block_switch_cost = block_switch_bitcost;\n    static const size_t prologue_length = 2000;\n    static const double multiplier = 0.07 / 2000;\n    size_t k;\n    for (k = 0; k < num_histograms; ++k) {\n      /* We are coding the symbol with entropy code k. */\n      cost[k] += insert_cost[insert_cost_ix + k];\n      if (cost[k] < min_cost) {\n        min_cost = cost[k];\n        block_id[byte_ix] = (uint8_t)k;\n      }\n    }\n    /* More blocks for the beginning. */\n    if (byte_ix < prologue_length) {\n      block_switch_cost *= 0.77 + multiplier * (double)byte_ix;\n    }\n    for (k = 0; k < num_histograms; ++k) {\n      cost[k] -= min_cost;\n      if (cost[k] >= block_switch_cost) {\n        const uint8_t mask = (uint8_t)(1u << (k & 7));\n        cost[k] = block_switch_cost;\n        BROTLI_DCHECK((k >> 3) < bitmap_len);\n        switch_signal[ix + (k >> 3)] |= mask;\n      }\n    }\n  }\n\n  byte_ix = length - 1;\n  {  /* Trace back from the last position and switch at the marked places. */\n    size_t ix = byte_ix * bitmap_len;\n    uint8_t cur_id = block_id[byte_ix];\n    while (byte_ix > 0) {\n      const uint8_t mask = (uint8_t)(1u << (cur_id & 7));\n      BROTLI_DCHECK(((size_t)cur_id >> 3) < bitmap_len);\n      --byte_ix;\n      ix -= bitmap_len;\n      if (switch_signal[ix + (cur_id >> 3)] & mask) {\n        if (cur_id != block_id[byte_ix]) {\n          cur_id = block_id[byte_ix];\n          ++num_blocks;\n        }\n      }\n      block_id[byte_ix] = cur_id;\n    }\n  }\n  return num_blocks;\n}\n\nstatic size_t FN(RemapBlockIds)(uint8_t* block_ids, const size_t length,\n                                uint16_t* new_id, const size_t num_histograms) {\n  static const uint16_t kInvalidId = 256;\n  uint16_t next_id = 0;\n  size_t i;\n  for (i = 0; i < num_histograms; ++i) {\n    new_id[i] = kInvalidId;\n  }\n  for (i = 0; i < length; ++i) {\n    BROTLI_DCHECK(block_ids[i] < num_histograms);\n    if (new_id[block_ids[i]] == kInvalidId) {\n      new_id[block_ids[i]] = next_id++;\n    }\n  }\n  for (i = 0; i < length; ++i) {\n    block_ids[i] = (uint8_t)new_id[block_ids[i]];\n    BROTLI_DCHECK(block_ids[i] < num_histograms);\n  }\n  BROTLI_DCHECK(next_id <= num_histograms);\n  return next_id;\n}\n\nstatic void FN(BuildBlockHistograms)(const DataType* data, const size_t length,\n                                     const uint8_t* block_ids,\n                                     const size_t num_histograms,\n                                     HistogramType* histograms) {\n  size_t i;\n  FN(ClearHistograms)(histograms, num_histograms);\n  for (i = 0; i < length; ++i) {\n    FN(HistogramAdd)(&histograms[block_ids[i]], data[i]);\n  }\n}\n\n/* Given the initial partitioning build partitioning with limited number\n * of histograms (and block types). */\nstatic void FN(ClusterBlocks)(MemoryManager* m,\n                              const DataType* data, const size_t length,\n                              const size_t num_blocks,\n                              uint8_t* block_ids,\n                              BlockSplit* split) {\n  uint32_t* histogram_symbols = BROTLI_ALLOC(m, uint32_t, num_blocks);\n  uint32_t* u32 =\n      BROTLI_ALLOC(m, uint32_t, num_blocks + 4 * HISTOGRAMS_PER_BATCH);\n  const size_t expected_num_clusters = CLUSTERS_PER_BATCH *\n      (num_blocks + HISTOGRAMS_PER_BATCH - 1) / HISTOGRAMS_PER_BATCH;\n  size_t all_histograms_size = 0;\n  size_t all_histograms_capacity = expected_num_clusters;\n  HistogramType* all_histograms =\n      BROTLI_ALLOC(m, HistogramType, all_histograms_capacity);\n  size_t cluster_size_size = 0;\n  size_t cluster_size_capacity = expected_num_clusters;\n  uint32_t* cluster_size = BROTLI_ALLOC(m, uint32_t, cluster_size_capacity);\n  size_t num_clusters = 0;\n  HistogramType* histograms = BROTLI_ALLOC(m, HistogramType,\n      BROTLI_MIN(size_t, num_blocks, HISTOGRAMS_PER_BATCH));\n  size_t max_num_pairs =\n      HISTOGRAMS_PER_BATCH * HISTOGRAMS_PER_BATCH / 2;\n  size_t pairs_capacity = max_num_pairs + 1;\n  HistogramPair* pairs = BROTLI_ALLOC(m, HistogramPair, pairs_capacity);\n  size_t pos = 0;\n  uint32_t* clusters;\n  size_t num_final_clusters;\n  static const uint32_t kInvalidIndex = BROTLI_UINT32_MAX;\n  uint32_t* new_index;\n  size_t i;\n  uint32_t* BROTLI_RESTRICT const sizes =\n      u32 ? (u32 + 0 * HISTOGRAMS_PER_BATCH) : NULL;\n  uint32_t* BROTLI_RESTRICT const new_clusters =\n      u32 ? (u32 + 1 * HISTOGRAMS_PER_BATCH) : NULL;\n  uint32_t* BROTLI_RESTRICT const symbols =\n      u32 ? (u32 + 2 * HISTOGRAMS_PER_BATCH) : NULL;\n  uint32_t* BROTLI_RESTRICT const remap =\n      u32 ? (u32 + 3 * HISTOGRAMS_PER_BATCH) : NULL;\n  uint32_t* BROTLI_RESTRICT const block_lengths =\n      u32 ? (u32 + 4 * HISTOGRAMS_PER_BATCH) : NULL;\n  /* TODO(eustas): move to arena? */\n  HistogramType* tmp = BROTLI_ALLOC(m, HistogramType, 2);\n\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(histogram_symbols) ||\n      BROTLI_IS_NULL(u32) || BROTLI_IS_NULL(all_histograms) ||\n      BROTLI_IS_NULL(cluster_size) || BROTLI_IS_NULL(histograms) ||\n      BROTLI_IS_NULL(pairs) || BROTLI_IS_NULL(tmp)) {\n    return;\n  }\n\n  memset(u32, 0, (num_blocks + 4 * HISTOGRAMS_PER_BATCH) * sizeof(uint32_t));\n\n  /* Calculate block lengths (convert repeating values -> series length). */\n  {\n    size_t block_idx = 0;\n    for (i = 0; i < length; ++i) {\n      BROTLI_DCHECK(block_idx < num_blocks);\n      ++block_lengths[block_idx];\n      if (i + 1 == length || block_ids[i] != block_ids[i + 1]) {\n        ++block_idx;\n      }\n    }\n    BROTLI_DCHECK(block_idx == num_blocks);\n  }\n\n  /* Pre-cluster blocks (cluster batches). */\n  for (i = 0; i < num_blocks; i += HISTOGRAMS_PER_BATCH) {\n    const size_t num_to_combine =\n        BROTLI_MIN(size_t, num_blocks - i, HISTOGRAMS_PER_BATCH);\n    size_t num_new_clusters;\n    size_t j;\n    for (j = 0; j < num_to_combine; ++j) {\n      size_t k;\n      size_t block_length = block_lengths[i + j];\n      FN(HistogramClear)(&histograms[j]);\n      for (k = 0; k < block_length; ++k) {\n        FN(HistogramAdd)(&histograms[j], data[pos++]);\n      }\n      histograms[j].bit_cost_ = FN(BrotliPopulationCost)(&histograms[j]);\n      new_clusters[j] = (uint32_t)j;\n      symbols[j] = (uint32_t)j;\n      sizes[j] = 1;\n    }\n    num_new_clusters = FN(BrotliHistogramCombine)(\n        histograms, tmp, sizes, symbols, new_clusters, pairs, num_to_combine,\n        num_to_combine, HISTOGRAMS_PER_BATCH, max_num_pairs);\n    BROTLI_ENSURE_CAPACITY(m, HistogramType, all_histograms,\n        all_histograms_capacity, all_histograms_size + num_new_clusters);\n    BROTLI_ENSURE_CAPACITY(m, uint32_t, cluster_size,\n        cluster_size_capacity, cluster_size_size + num_new_clusters);\n    if (BROTLI_IS_OOM(m)) return;\n    for (j = 0; j < num_new_clusters; ++j) {\n      all_histograms[all_histograms_size++] = histograms[new_clusters[j]];\n      cluster_size[cluster_size_size++] = sizes[new_clusters[j]];\n      remap[new_clusters[j]] = (uint32_t)j;\n    }\n    for (j = 0; j < num_to_combine; ++j) {\n      histogram_symbols[i + j] = (uint32_t)num_clusters + remap[symbols[j]];\n    }\n    num_clusters += num_new_clusters;\n    BROTLI_DCHECK(num_clusters == cluster_size_size);\n    BROTLI_DCHECK(num_clusters == all_histograms_size);\n  }\n  BROTLI_FREE(m, histograms);\n\n  /* Final clustering. */\n  max_num_pairs =\n      BROTLI_MIN(size_t, 64 * num_clusters, (num_clusters / 2) * num_clusters);\n  if (pairs_capacity < max_num_pairs + 1) {\n    BROTLI_FREE(m, pairs);\n    pairs = BROTLI_ALLOC(m, HistogramPair, max_num_pairs + 1);\n    if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(pairs)) return;\n  }\n  clusters = BROTLI_ALLOC(m, uint32_t, num_clusters);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(clusters)) return;\n  for (i = 0; i < num_clusters; ++i) {\n    clusters[i] = (uint32_t)i;\n  }\n  num_final_clusters = FN(BrotliHistogramCombine)(\n      all_histograms, tmp, cluster_size, histogram_symbols, clusters, pairs,\n      num_clusters, num_blocks, BROTLI_MAX_NUMBER_OF_BLOCK_TYPES,\n      max_num_pairs);\n  BROTLI_FREE(m, pairs);\n  BROTLI_FREE(m, cluster_size);\n\n  /* Assign blocks to final histograms. */\n  new_index = BROTLI_ALLOC(m, uint32_t, num_clusters);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(new_index)) return;\n  for (i = 0; i < num_clusters; ++i) new_index[i] = kInvalidIndex;\n  pos = 0;\n  {\n    uint32_t next_index = 0;\n    for (i = 0; i < num_blocks; ++i) {\n      size_t j;\n      uint32_t best_out;\n      double best_bits;\n      FN(HistogramClear)(tmp);\n      for (j = 0; j < block_lengths[i]; ++j) {\n        FN(HistogramAdd)(tmp, data[pos++]);\n      }\n      /* Among equally good histograms prefer last used. */\n      /* TODO(eustas): should we give a block-switch discount here? */\n      best_out = (i == 0) ? histogram_symbols[0] : histogram_symbols[i - 1];\n      best_bits = FN(BrotliHistogramBitCostDistance)(\n          tmp, &all_histograms[best_out], tmp + 1);\n      for (j = 0; j < num_final_clusters; ++j) {\n        const double cur_bits = FN(BrotliHistogramBitCostDistance)(\n            tmp, &all_histograms[clusters[j]], tmp + 1);\n        if (cur_bits < best_bits) {\n          best_bits = cur_bits;\n          best_out = clusters[j];\n        }\n      }\n      histogram_symbols[i] = best_out;\n      if (new_index[best_out] == kInvalidIndex) {\n        new_index[best_out] = next_index++;\n      }\n    }\n  }\n  BROTLI_FREE(m, tmp);\n  BROTLI_FREE(m, clusters);\n  BROTLI_FREE(m, all_histograms);\n  BROTLI_ENSURE_CAPACITY(\n      m, uint8_t, split->types, split->types_alloc_size, num_blocks);\n  BROTLI_ENSURE_CAPACITY(\n      m, uint32_t, split->lengths, split->lengths_alloc_size, num_blocks);\n  if (BROTLI_IS_OOM(m)) return;\n\n  /* Rewrite final assignment to block-split. There might be less blocks\n   * than |num_blocks| due to clustering. */\n  {\n    uint32_t cur_length = 0;\n    size_t block_idx = 0;\n    uint8_t max_type = 0;\n    for (i = 0; i < num_blocks; ++i) {\n      cur_length += block_lengths[i];\n      if (i + 1 == num_blocks ||\n          histogram_symbols[i] != histogram_symbols[i + 1]) {\n        const uint8_t id = (uint8_t)new_index[histogram_symbols[i]];\n        split->types[block_idx] = id;\n        split->lengths[block_idx] = cur_length;\n        max_type = BROTLI_MAX(uint8_t, max_type, id);\n        cur_length = 0;\n        ++block_idx;\n      }\n    }\n    split->num_blocks = block_idx;\n    split->num_types = (size_t)max_type + 1;\n  }\n  BROTLI_FREE(m, new_index);\n  BROTLI_FREE(m, u32);\n  BROTLI_FREE(m, histogram_symbols);\n}\n\n/* Create BlockSplit (partitioning) given the limits, estimates and \"effort\"\n * parameters.\n *\n * NB: max_histograms is often less than number of histograms allowed by format;\n *     this is done intentionally, to save some \"space\" for context-aware\n *     clustering (here entropy is estimated for context-free symbols). */\nstatic void FN(SplitByteVector)(MemoryManager* m,\n                                const DataType* data, const size_t length,\n                                const size_t symbols_per_histogram,\n                                const size_t max_histograms,\n                                const size_t sampling_stride_length,\n                                const double block_switch_cost,\n                                const BrotliEncoderParams* params,\n                                BlockSplit* split) {\n  const size_t data_size = FN(HistogramDataSize)();\n  HistogramType* histograms;\n  HistogramType* tmp;\n  /* Calculate number of histograms; initial estimate is one histogram per\n   * specified amount of symbols; however, this value is capped. */\n  size_t num_histograms = length / symbols_per_histogram + 1;\n  if (num_histograms > max_histograms) {\n    num_histograms = max_histograms;\n  }\n\n  /* Corner case: no input. */\n  if (length == 0) {\n    split->num_types = 1;\n    return;\n  }\n\n  if (length < kMinLengthForBlockSplitting) {\n    BROTLI_ENSURE_CAPACITY(m, uint8_t,\n        split->types, split->types_alloc_size, split->num_blocks + 1);\n    BROTLI_ENSURE_CAPACITY(m, uint32_t,\n        split->lengths, split->lengths_alloc_size, split->num_blocks + 1);\n    if (BROTLI_IS_OOM(m)) return;\n    split->num_types = 1;\n    split->types[split->num_blocks] = 0;\n    split->lengths[split->num_blocks] = (uint32_t)length;\n    split->num_blocks++;\n    return;\n  }\n  histograms = BROTLI_ALLOC(m, HistogramType, num_histograms + 1);\n  tmp = histograms + num_histograms;\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(histograms)) return;\n  /* Find good entropy codes. */\n  FN(InitialEntropyCodes)(data, length,\n                          sampling_stride_length,\n                          num_histograms, histograms);\n  FN(RefineEntropyCodes)(data, length,\n                         sampling_stride_length,\n                         num_histograms, histograms, tmp);\n  {\n    /* Find a good path through literals with the good entropy codes. */\n    uint8_t* block_ids = BROTLI_ALLOC(m, uint8_t, length);\n    size_t num_blocks = 0;\n    const size_t bitmaplen = (num_histograms + 7) >> 3;\n    double* insert_cost = BROTLI_ALLOC(m, double, data_size * num_histograms);\n    double* cost = BROTLI_ALLOC(m, double, num_histograms);\n    uint8_t* switch_signal = BROTLI_ALLOC(m, uint8_t, length * bitmaplen);\n    uint16_t* new_id = BROTLI_ALLOC(m, uint16_t, num_histograms);\n    const size_t iters = params->quality < HQ_ZOPFLIFICATION_QUALITY ? 3 : 10;\n    size_t i;\n    if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(block_ids) ||\n        BROTLI_IS_NULL(insert_cost) || BROTLI_IS_NULL(cost) ||\n        BROTLI_IS_NULL(switch_signal) || BROTLI_IS_NULL(new_id)) {\n      return;\n    }\n    for (i = 0; i < iters; ++i) {\n      num_blocks = FN(FindBlocks)(data, length,\n                                  block_switch_cost,\n                                  num_histograms, histograms,\n                                  insert_cost, cost, switch_signal,\n                                  block_ids);\n      num_histograms = FN(RemapBlockIds)(block_ids, length,\n                                         new_id, num_histograms);\n      FN(BuildBlockHistograms)(data, length, block_ids,\n                               num_histograms, histograms);\n    }\n    BROTLI_FREE(m, insert_cost);\n    BROTLI_FREE(m, cost);\n    BROTLI_FREE(m, switch_signal);\n    BROTLI_FREE(m, new_id);\n    BROTLI_FREE(m, histograms);\n    FN(ClusterBlocks)(m, data, length, num_blocks, block_ids, split);\n    if (BROTLI_IS_OOM(m)) return;\n    BROTLI_FREE(m, block_ids);\n  }\n}\n\n#undef HistogramType\n"
  },
  {
    "path": "c/enc/brotli_bit_stream.c",
    "content": "/* Copyright 2014 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Brotli bit stream functions to support the low level format. There are no\n   compression algorithms here, just the right ordering of bits to match the\n   specs. */\n\n#include \"brotli_bit_stream.h\"\n\n#include \"../common/constants.h\"\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"entropy_encode.h\"\n#include \"entropy_encode_static.h\"\n#include \"fast_log.h\"\n#include \"histogram.h\"\n#include \"memory.h\"\n#include \"write_bits.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define MAX_HUFFMAN_TREE_SIZE (2 * BROTLI_NUM_COMMAND_SYMBOLS + 1)\n/* The maximum size of Huffman dictionary for distances assuming that\n   NPOSTFIX = 0 and NDIRECT = 0. */\n#define MAX_SIMPLE_DISTANCE_ALPHABET_SIZE \\\n  BROTLI_DISTANCE_ALPHABET_SIZE(0, 0, BROTLI_LARGE_MAX_DISTANCE_BITS)\n/* MAX_SIMPLE_DISTANCE_ALPHABET_SIZE == 140 */\n\nstatic BROTLI_INLINE uint32_t BlockLengthPrefixCode(uint32_t len) {\n  uint32_t code = (len >= 177) ? (len >= 753 ? 20 : 14) : (len >= 41 ? 7 : 0);\n  while (code < (BROTLI_NUM_BLOCK_LEN_SYMBOLS - 1) &&\n      len >= _kBrotliPrefixCodeRanges[code + 1].offset) ++code;\n  return code;\n}\n\nstatic BROTLI_INLINE void GetBlockLengthPrefixCode(uint32_t len, size_t* code,\n    uint32_t* n_extra, uint32_t* extra) {\n  *code = BlockLengthPrefixCode(len);\n  *n_extra = _kBrotliPrefixCodeRanges[*code].nbits;\n  *extra = len - _kBrotliPrefixCodeRanges[*code].offset;\n}\n\ntypedef struct BlockTypeCodeCalculator {\n  size_t last_type;\n  size_t second_last_type;\n} BlockTypeCodeCalculator;\n\nstatic void InitBlockTypeCodeCalculator(BlockTypeCodeCalculator* self) {\n  self->last_type = 1;\n  self->second_last_type = 0;\n}\n\nstatic BROTLI_INLINE size_t NextBlockTypeCode(\n    BlockTypeCodeCalculator* calculator, uint8_t type) {\n  size_t type_code = (type == calculator->last_type + 1) ? 1u :\n      (type == calculator->second_last_type) ? 0u : type + 2u;\n  calculator->second_last_type = calculator->last_type;\n  calculator->last_type = type;\n  return type_code;\n}\n\n/* |nibblesbits| represents the 2 bits to encode MNIBBLES (0-3)\n   REQUIRES: length > 0\n   REQUIRES: length <= (1 << 24) */\nstatic void BrotliEncodeMlen(size_t length, uint64_t* bits,\n                             size_t* numbits, uint64_t* nibblesbits) {\n  size_t lg = (length == 1) ? 1 : Log2FloorNonZero((uint32_t)(length - 1)) + 1;\n  size_t mnibbles = (lg < 16 ? 16 : (lg + 3)) / 4;\n  BROTLI_DCHECK(length > 0);\n  BROTLI_DCHECK(length <= (1 << 24));\n  BROTLI_DCHECK(lg <= 24);\n  *nibblesbits = mnibbles - 4;\n  *numbits = mnibbles * 4;\n  *bits = length - 1;\n}\n\nstatic BROTLI_INLINE void StoreCommandExtra(\n    const Command* cmd, size_t* storage_ix, uint8_t* storage) {\n  uint32_t copylen_code = CommandCopyLenCode(cmd);\n  uint16_t inscode = GetInsertLengthCode(cmd->insert_len_);\n  uint16_t copycode = GetCopyLengthCode(copylen_code);\n  uint32_t insnumextra = GetInsertExtra(inscode);\n  uint64_t insextraval = cmd->insert_len_ - GetInsertBase(inscode);\n  uint64_t copyextraval = copylen_code - GetCopyBase(copycode);\n  uint64_t bits = (copyextraval << insnumextra) | insextraval;\n  BrotliWriteBits(\n      insnumextra + GetCopyExtra(copycode), bits, storage_ix, storage);\n}\n\n/* Data structure that stores almost everything that is needed to encode each\n   block switch command. */\ntypedef struct BlockSplitCode {\n  BlockTypeCodeCalculator type_code_calculator;\n  uint8_t type_depths[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];\n  uint16_t type_bits[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];\n  uint8_t length_depths[BROTLI_NUM_BLOCK_LEN_SYMBOLS];\n  uint16_t length_bits[BROTLI_NUM_BLOCK_LEN_SYMBOLS];\n} BlockSplitCode;\n\n/* Stores a number between 0 and 255. */\nstatic void StoreVarLenUint8(size_t n, size_t* storage_ix, uint8_t* storage) {\n  if (n == 0) {\n    BrotliWriteBits(1, 0, storage_ix, storage);\n  } else {\n    size_t nbits = Log2FloorNonZero(n);\n    BrotliWriteBits(1, 1, storage_ix, storage);\n    BrotliWriteBits(3, nbits, storage_ix, storage);\n    BrotliWriteBits(nbits, n - ((size_t)1 << nbits), storage_ix, storage);\n  }\n}\n\n/* Stores the compressed meta-block header.\n   REQUIRES: length > 0\n   REQUIRES: length <= (1 << 24) */\nstatic void StoreCompressedMetaBlockHeader(BROTLI_BOOL is_final_block,\n                                           size_t length,\n                                           size_t* storage_ix,\n                                           uint8_t* storage) {\n  uint64_t lenbits;\n  size_t nlenbits;\n  uint64_t nibblesbits;\n\n  /* Write ISLAST bit. */\n  BrotliWriteBits(1, (uint64_t)is_final_block, storage_ix, storage);\n  /* Write ISEMPTY bit. */\n  if (is_final_block) {\n    BrotliWriteBits(1, 0, storage_ix, storage);\n  }\n\n  BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits);\n  BrotliWriteBits(2, nibblesbits, storage_ix, storage);\n  BrotliWriteBits(nlenbits, lenbits, storage_ix, storage);\n\n  if (!is_final_block) {\n    /* Write ISUNCOMPRESSED bit. */\n    BrotliWriteBits(1, 0, storage_ix, storage);\n  }\n}\n\n/* Stores the uncompressed meta-block header.\n   REQUIRES: length > 0\n   REQUIRES: length <= (1 << 24) */\nstatic void BrotliStoreUncompressedMetaBlockHeader(size_t length,\n                                                   size_t* storage_ix,\n                                                   uint8_t* storage) {\n  uint64_t lenbits;\n  size_t nlenbits;\n  uint64_t nibblesbits;\n\n  /* Write ISLAST bit.\n     Uncompressed block cannot be the last one, so set to 0. */\n  BrotliWriteBits(1, 0, storage_ix, storage);\n  BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits);\n  BrotliWriteBits(2, nibblesbits, storage_ix, storage);\n  BrotliWriteBits(nlenbits, lenbits, storage_ix, storage);\n  /* Write ISUNCOMPRESSED bit. */\n  BrotliWriteBits(1, 1, storage_ix, storage);\n}\n\nstatic void BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(\n    const int num_codes, const uint8_t* code_length_bitdepth,\n    size_t* storage_ix, uint8_t* storage) {\n  static const BROTLI_MODEL(\"small\")\n  uint8_t kStorageOrder[BROTLI_CODE_LENGTH_CODES] = {\n    1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15\n  };\n  /* The bit lengths of the Huffman code over the code length alphabet\n     are compressed with the following static Huffman code:\n       Symbol   Code\n       ------   ----\n       0          00\n       1        1110\n       2         110\n       3          01\n       4          10\n       5        1111 */\n  static const BROTLI_MODEL(\"small\")\n  uint8_t kHuffmanBitLengthHuffmanCodeSymbols[6] = {\n     0, 7, 3, 2, 1, 15\n  };\n  static const BROTLI_MODEL(\"small\")\n  uint8_t kHuffmanBitLengthHuffmanCodeBitLengths[6] = {\n    2, 4, 3, 2, 2, 4\n  };\n\n  size_t skip_some = 0;  /* skips none. */\n\n  /* Throw away trailing zeros: */\n  size_t codes_to_store = BROTLI_CODE_LENGTH_CODES;\n  if (num_codes > 1) {\n    for (; codes_to_store > 0; --codes_to_store) {\n      if (code_length_bitdepth[kStorageOrder[codes_to_store - 1]] != 0) {\n        break;\n      }\n    }\n  }\n  if (code_length_bitdepth[kStorageOrder[0]] == 0 &&\n      code_length_bitdepth[kStorageOrder[1]] == 0) {\n    skip_some = 2;  /* skips two. */\n    if (code_length_bitdepth[kStorageOrder[2]] == 0) {\n      skip_some = 3;  /* skips three. */\n    }\n  }\n  BrotliWriteBits(2, skip_some, storage_ix, storage);\n  {\n    size_t i;\n    for (i = skip_some; i < codes_to_store; ++i) {\n      size_t l = code_length_bitdepth[kStorageOrder[i]];\n      BrotliWriteBits(kHuffmanBitLengthHuffmanCodeBitLengths[l],\n          kHuffmanBitLengthHuffmanCodeSymbols[l], storage_ix, storage);\n    }\n  }\n}\n\nstatic void BrotliStoreHuffmanTreeToBitMask(\n    const size_t huffman_tree_size, const uint8_t* huffman_tree,\n    const uint8_t* huffman_tree_extra_bits, const uint8_t* code_length_bitdepth,\n    const uint16_t* code_length_bitdepth_symbols,\n    size_t* BROTLI_RESTRICT storage_ix, uint8_t* BROTLI_RESTRICT storage) {\n  size_t i;\n  for (i = 0; i < huffman_tree_size; ++i) {\n    size_t ix = huffman_tree[i];\n    BrotliWriteBits(code_length_bitdepth[ix], code_length_bitdepth_symbols[ix],\n                    storage_ix, storage);\n    /* Extra bits */\n    switch (ix) {\n      case BROTLI_REPEAT_PREVIOUS_CODE_LENGTH:\n        BrotliWriteBits(2, huffman_tree_extra_bits[i], storage_ix, storage);\n        break;\n      case BROTLI_REPEAT_ZERO_CODE_LENGTH:\n        BrotliWriteBits(3, huffman_tree_extra_bits[i], storage_ix, storage);\n        break;\n    }\n  }\n}\n\nstatic void StoreSimpleHuffmanTree(const uint8_t* depths,\n                                   size_t symbols[4],\n                                   size_t num_symbols,\n                                   size_t max_bits,\n                                   size_t* storage_ix, uint8_t* storage) {\n  /* value of 1 indicates a simple Huffman code */\n  BrotliWriteBits(2, 1, storage_ix, storage);\n  BrotliWriteBits(2, num_symbols - 1, storage_ix, storage);  /* NSYM - 1 */\n\n  {\n    /* Sort */\n    size_t i;\n    for (i = 0; i < num_symbols; i++) {\n      size_t j;\n      for (j = i + 1; j < num_symbols; j++) {\n        if (depths[symbols[j]] < depths[symbols[i]]) {\n          BROTLI_SWAP(size_t, symbols, j, i);\n        }\n      }\n    }\n  }\n\n  if (num_symbols == 2) {\n    BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);\n    BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);\n  } else if (num_symbols == 3) {\n    BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);\n    BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);\n    BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);\n  } else {\n    BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);\n    BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);\n    BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);\n    BrotliWriteBits(max_bits, symbols[3], storage_ix, storage);\n    /* tree-select */\n    BrotliWriteBits(1, depths[symbols[0]] == 1 ? 1 : 0, storage_ix, storage);\n  }\n}\n\n/* num = alphabet size\n   depths = symbol depths */\nvoid BrotliStoreHuffmanTree(const uint8_t* depths, size_t num,\n                            HuffmanTree* tree,\n                            size_t* storage_ix, uint8_t* storage) {\n  /* Write the Huffman tree into the brotli-representation.\n     The command alphabet is the largest, so this allocation will fit all\n     alphabets. */\n  /* TODO(eustas): fix me */\n  uint8_t huffman_tree[BROTLI_NUM_COMMAND_SYMBOLS];\n  uint8_t huffman_tree_extra_bits[BROTLI_NUM_COMMAND_SYMBOLS];\n  size_t huffman_tree_size = 0;\n  uint8_t code_length_bitdepth[BROTLI_CODE_LENGTH_CODES] = { 0 };\n  uint16_t code_length_bitdepth_symbols[BROTLI_CODE_LENGTH_CODES];\n  uint32_t huffman_tree_histogram[BROTLI_CODE_LENGTH_CODES] = { 0 };\n  size_t i;\n  int num_codes = 0;\n  size_t code = 0;\n\n  BROTLI_DCHECK(num <= BROTLI_NUM_COMMAND_SYMBOLS);\n\n  BrotliWriteHuffmanTree(depths, num, &huffman_tree_size, huffman_tree,\n                         huffman_tree_extra_bits);\n\n  /* Calculate the statistics of the Huffman tree in brotli-representation. */\n  for (i = 0; i < huffman_tree_size; ++i) {\n    ++huffman_tree_histogram[huffman_tree[i]];\n  }\n\n  for (i = 0; i < BROTLI_CODE_LENGTH_CODES; ++i) {\n    if (huffman_tree_histogram[i]) {\n      if (num_codes == 0) {\n        code = i;\n        num_codes = 1;\n      } else if (num_codes == 1) {\n        num_codes = 2;\n        break;\n      }\n    }\n  }\n\n  /* Calculate another Huffman tree to use for compressing both the\n     earlier Huffman tree with. */\n  BrotliCreateHuffmanTree(huffman_tree_histogram, BROTLI_CODE_LENGTH_CODES,\n                          5, tree, code_length_bitdepth);\n  BrotliConvertBitDepthsToSymbols(code_length_bitdepth,\n                                  BROTLI_CODE_LENGTH_CODES,\n                                  code_length_bitdepth_symbols);\n\n  /* Now, we have all the data, let's start storing it */\n  BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(num_codes, code_length_bitdepth,\n                                               storage_ix, storage);\n\n  if (num_codes == 1) {\n    code_length_bitdepth[code] = 0;\n  }\n\n  /* Store the real Huffman tree now. */\n  BrotliStoreHuffmanTreeToBitMask(huffman_tree_size,\n                                  huffman_tree,\n                                  huffman_tree_extra_bits,\n                                  code_length_bitdepth,\n                                  code_length_bitdepth_symbols,\n                                  storage_ix, storage);\n}\n\n/* Builds a Huffman tree from histogram[0:length] into depth[0:length] and\n   bits[0:length] and stores the encoded tree to the bit stream. */\nstatic void BuildAndStoreHuffmanTree(const uint32_t* histogram,\n                                     const size_t histogram_length,\n                                     const size_t alphabet_size,\n                                     HuffmanTree* tree,\n                                     uint8_t* depth,\n                                     uint16_t* bits,\n                                     size_t* storage_ix,\n                                     uint8_t* storage) {\n  size_t count = 0;\n  size_t s4[4] = { 0 };\n  size_t i;\n  size_t max_bits = 0;\n  for (i = 0; i < histogram_length; i++) {\n    if (histogram[i]) {\n      if (count < 4) {\n        s4[count] = i;\n      } else if (count > 4) {\n        break;\n      }\n      count++;\n    }\n  }\n\n  {\n    size_t max_bits_counter = alphabet_size - 1;\n    while (max_bits_counter) {\n      max_bits_counter >>= 1;\n      ++max_bits;\n    }\n  }\n\n  if (count <= 1) {\n    BrotliWriteBits(4, 1, storage_ix, storage);\n    BrotliWriteBits(max_bits, s4[0], storage_ix, storage);\n    depth[s4[0]] = 0;\n    bits[s4[0]] = 0;\n    return;\n  }\n\n  memset(depth, 0, histogram_length * sizeof(depth[0]));\n  BrotliCreateHuffmanTree(histogram, histogram_length, 15, tree, depth);\n  BrotliConvertBitDepthsToSymbols(depth, histogram_length, bits);\n\n  if (count <= 4) {\n    StoreSimpleHuffmanTree(depth, s4, count, max_bits, storage_ix, storage);\n  } else {\n    BrotliStoreHuffmanTree(depth, histogram_length, tree, storage_ix, storage);\n  }\n}\n\nstatic BROTLI_INLINE BROTLI_BOOL SortHuffmanTree(\n    const HuffmanTree* v0, const HuffmanTree* v1) {\n  return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_);\n}\n\nvoid BrotliBuildAndStoreHuffmanTreeFast(HuffmanTree* tree,\n                                        const uint32_t* histogram,\n                                        const size_t histogram_total,\n                                        const size_t max_bits,\n                                        uint8_t* depth, uint16_t* bits,\n                                        size_t* storage_ix,\n                                        uint8_t* storage) {\n  size_t count = 0;\n  size_t symbols[4] = { 0 };\n  size_t length = 0;\n  size_t total = histogram_total;\n  while (total != 0) {\n    if (histogram[length]) {\n      if (count < 4) {\n        symbols[count] = length;\n      }\n      ++count;\n      total -= histogram[length];\n    }\n    ++length;\n  }\n\n  if (count <= 1) {\n    BrotliWriteBits(4, 1, storage_ix, storage);\n    BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);\n    depth[symbols[0]] = 0;\n    bits[symbols[0]] = 0;\n    return;\n  }\n\n  memset(depth, 0, length * sizeof(depth[0]));\n  {\n    uint32_t count_limit;\n    for (count_limit = 1; ; count_limit *= 2) {\n      HuffmanTree* node = tree;\n      size_t l;\n      for (l = length; l != 0;) {\n        --l;\n        if (histogram[l]) {\n          if (BROTLI_PREDICT_TRUE(histogram[l] >= count_limit)) {\n            InitHuffmanTree(node, histogram[l], -1, (int16_t)l);\n          } else {\n            InitHuffmanTree(node, count_limit, -1, (int16_t)l);\n          }\n          ++node;\n        }\n      }\n      {\n        const int n = (int)(node - tree);\n        HuffmanTree sentinel;\n        int i = 0;      /* Points to the next leaf node. */\n        int j = n + 1;  /* Points to the next non-leaf node. */\n        int k;\n\n        SortHuffmanTreeItems(tree, (size_t)n, SortHuffmanTree);\n        /* The nodes are:\n           [0, n): the sorted leaf nodes that we start with.\n           [n]: we add a sentinel here.\n           [n + 1, 2n): new parent nodes are added here, starting from\n                        (n+1). These are naturally in ascending order.\n           [2n]: we add a sentinel at the end as well.\n           There will be (2n+1) elements at the end. */\n        InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1);\n        *node++ = sentinel;\n        *node++ = sentinel;\n\n        for (k = n - 1; k > 0; --k) {\n          int left, right;\n          if (tree[i].total_count_ <= tree[j].total_count_) {\n            left = i;\n            ++i;\n          } else {\n            left = j;\n            ++j;\n          }\n          if (tree[i].total_count_ <= tree[j].total_count_) {\n            right = i;\n            ++i;\n          } else {\n            right = j;\n            ++j;\n          }\n          /* The sentinel node becomes the parent node. */\n          node[-1].total_count_ =\n              tree[left].total_count_ + tree[right].total_count_;\n          node[-1].index_left_ = (int16_t)left;\n          node[-1].index_right_or_value_ = (int16_t)right;\n          /* Add back the last sentinel node. */\n          *node++ = sentinel;\n        }\n        if (BrotliSetDepth(2 * n - 1, tree, depth, 14)) {\n          /* We need to pack the Huffman tree in 14 bits. If this was not\n             successful, add fake entities to the lowest values and retry. */\n          break;\n        }\n      }\n    }\n  }\n  BrotliConvertBitDepthsToSymbols(depth, length, bits);\n  if (count <= 4) {\n    size_t i;\n    /* value of 1 indicates a simple Huffman code */\n    BrotliWriteBits(2, 1, storage_ix, storage);\n    BrotliWriteBits(2, count - 1, storage_ix, storage);  /* NSYM - 1 */\n\n    /* Sort */\n    for (i = 0; i < count; i++) {\n      size_t j;\n      for (j = i + 1; j < count; j++) {\n        if (depth[symbols[j]] < depth[symbols[i]]) {\n          BROTLI_SWAP(size_t, symbols, j, i);\n        }\n      }\n    }\n\n    if (count == 2) {\n      BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);\n      BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);\n    } else if (count == 3) {\n      BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);\n      BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);\n      BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);\n    } else {\n      BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);\n      BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);\n      BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);\n      BrotliWriteBits(max_bits, symbols[3], storage_ix, storage);\n      /* tree-select */\n      BrotliWriteBits(1, depth[symbols[0]] == 1 ? 1 : 0, storage_ix, storage);\n    }\n  } else {\n    uint8_t previous_value = 8;\n    size_t i;\n    /* Complex Huffman Tree */\n    StoreStaticCodeLengthCode(storage_ix, storage);\n\n    /* Actual RLE coding. */\n    for (i = 0; i < length;) {\n      const uint8_t value = depth[i];\n      size_t reps = 1;\n      size_t k;\n      for (k = i + 1; k < length && depth[k] == value; ++k) {\n        ++reps;\n      }\n      i += reps;\n      if (value == 0) {\n        BrotliWriteBits(kZeroRepsDepth[reps], kZeroRepsBits[reps],\n                        storage_ix, storage);\n      } else {\n        if (previous_value != value) {\n          BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[value],\n                          storage_ix, storage);\n          --reps;\n        }\n        if (reps < 3) {\n          while (reps != 0) {\n            reps--;\n            BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[value],\n                            storage_ix, storage);\n          }\n        } else {\n          reps -= 3;\n          BrotliWriteBits(kNonZeroRepsDepth[reps], kNonZeroRepsBits[reps],\n                          storage_ix, storage);\n        }\n        previous_value = value;\n      }\n    }\n  }\n}\n\nstatic size_t IndexOf(const uint8_t* v, size_t v_size, uint8_t value) {\n  size_t i = 0;\n  for (; i < v_size; ++i) {\n    if (v[i] == value) return i;\n  }\n  return i;\n}\n\nstatic void MoveToFront(uint8_t* v, size_t index) {\n  uint8_t value = v[index];\n  size_t i;\n  for (i = index; i != 0; --i) {\n    v[i] = v[i - 1];\n  }\n  v[0] = value;\n}\n\nstatic void MoveToFrontTransform(const uint32_t* BROTLI_RESTRICT v_in,\n                                 const size_t v_size,\n                                 uint32_t* v_out) {\n  size_t i;\n  uint8_t mtf[256];\n  uint32_t max_value;\n  if (v_size == 0) {\n    return;\n  }\n  max_value = v_in[0];\n  for (i = 1; i < v_size; ++i) {\n    if (v_in[i] > max_value) max_value = v_in[i];\n  }\n  BROTLI_DCHECK(max_value < 256u);\n  for (i = 0; i <= max_value; ++i) {\n    mtf[i] = (uint8_t)i;\n  }\n  {\n    size_t mtf_size = max_value + 1;\n    for (i = 0; i < v_size; ++i) {\n      size_t index = IndexOf(mtf, mtf_size, (uint8_t)v_in[i]);\n      BROTLI_DCHECK(index < mtf_size);\n      v_out[i] = (uint32_t)index;\n      MoveToFront(mtf, index);\n    }\n  }\n}\n\n/* Finds runs of zeros in v[0..in_size) and replaces them with a prefix code of\n   the run length plus extra bits (lower 9 bits is the prefix code and the rest\n   are the extra bits). Non-zero values in v[] are shifted by\n   *max_length_prefix. Will not create prefix codes bigger than the initial\n   value of *max_run_length_prefix. The prefix code of run length L is simply\n   Log2Floor(L) and the number of extra bits is the same as the prefix code. */\nstatic void RunLengthCodeZeros(const size_t in_size,\n    uint32_t* BROTLI_RESTRICT v, size_t* BROTLI_RESTRICT out_size,\n    uint32_t* BROTLI_RESTRICT max_run_length_prefix) {\n  uint32_t max_reps = 0;\n  size_t i;\n  uint32_t max_prefix;\n  for (i = 0; i < in_size;) {\n    uint32_t reps = 0;\n    for (; i < in_size && v[i] != 0; ++i) ;\n    for (; i < in_size && v[i] == 0; ++i) {\n      ++reps;\n    }\n    max_reps = BROTLI_MAX(uint32_t, reps, max_reps);\n  }\n  max_prefix = max_reps > 0 ? Log2FloorNonZero(max_reps) : 0;\n  max_prefix = BROTLI_MIN(uint32_t, max_prefix, *max_run_length_prefix);\n  *max_run_length_prefix = max_prefix;\n  *out_size = 0;\n  for (i = 0; i < in_size;) {\n    BROTLI_DCHECK(*out_size <= i);\n    if (v[i] != 0) {\n      v[*out_size] = v[i] + *max_run_length_prefix;\n      ++i;\n      ++(*out_size);\n    } else {\n      uint32_t reps = 1;\n      size_t k;\n      for (k = i + 1; k < in_size && v[k] == 0; ++k) {\n        ++reps;\n      }\n      i += reps;\n      while (reps != 0) {\n        if (reps < (2u << max_prefix)) {\n          uint32_t run_length_prefix = Log2FloorNonZero(reps);\n          const uint32_t extra_bits = reps - (1u << run_length_prefix);\n          v[*out_size] = run_length_prefix + (extra_bits << 9);\n          ++(*out_size);\n          break;\n        } else {\n          const uint32_t extra_bits = (1u << max_prefix) - 1u;\n          v[*out_size] = max_prefix + (extra_bits << 9);\n          reps -= (2u << max_prefix) - 1u;\n          ++(*out_size);\n        }\n      }\n    }\n  }\n}\n\n#define SYMBOL_BITS 9\n\ntypedef struct EncodeContextMapArena {\n  uint32_t histogram[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];\n  uint8_t depths[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];\n  uint16_t bits[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];\n} EncodeContextMapArena;\n\nstatic void EncodeContextMap(MemoryManager* m,\n                             EncodeContextMapArena* arena,\n                             const uint32_t* context_map,\n                             size_t context_map_size,\n                             size_t num_clusters,\n                             HuffmanTree* tree,\n                             size_t* storage_ix, uint8_t* storage) {\n  size_t i;\n  uint32_t* rle_symbols;\n  uint32_t max_run_length_prefix = 6;\n  size_t num_rle_symbols = 0;\n  uint32_t* BROTLI_RESTRICT const histogram = arena->histogram;\n  static const uint32_t kSymbolMask = (1u << SYMBOL_BITS) - 1u;\n  uint8_t* BROTLI_RESTRICT const depths = arena->depths;\n  uint16_t* BROTLI_RESTRICT const bits = arena->bits;\n\n  StoreVarLenUint8(num_clusters - 1, storage_ix, storage);\n\n  if (num_clusters == 1) {\n    return;\n  }\n\n  rle_symbols = BROTLI_ALLOC(m, uint32_t, context_map_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(rle_symbols)) return;\n  MoveToFrontTransform(context_map, context_map_size, rle_symbols);\n  RunLengthCodeZeros(context_map_size, rle_symbols,\n                     &num_rle_symbols, &max_run_length_prefix);\n  memset(histogram, 0, sizeof(arena->histogram));\n  for (i = 0; i < num_rle_symbols; ++i) {\n    ++histogram[rle_symbols[i] & kSymbolMask];\n  }\n  {\n    BROTLI_BOOL use_rle = TO_BROTLI_BOOL(max_run_length_prefix > 0);\n    BrotliWriteBits(1, (uint64_t)use_rle, storage_ix, storage);\n    if (use_rle) {\n      BrotliWriteBits(4, max_run_length_prefix - 1, storage_ix, storage);\n    }\n  }\n  BuildAndStoreHuffmanTree(histogram, num_clusters + max_run_length_prefix,\n                           num_clusters + max_run_length_prefix,\n                           tree, depths, bits, storage_ix, storage);\n  for (i = 0; i < num_rle_symbols; ++i) {\n    const uint32_t rle_symbol = rle_symbols[i] & kSymbolMask;\n    const uint32_t extra_bits_val = rle_symbols[i] >> SYMBOL_BITS;\n    BrotliWriteBits(depths[rle_symbol], bits[rle_symbol], storage_ix, storage);\n    if (rle_symbol > 0 && rle_symbol <= max_run_length_prefix) {\n      BrotliWriteBits(rle_symbol, extra_bits_val, storage_ix, storage);\n    }\n  }\n  BrotliWriteBits(1, 1, storage_ix, storage);  /* use move-to-front */\n  BROTLI_FREE(m, rle_symbols);\n}\n\n/* Stores the block switch command with index block_ix to the bit stream. */\nstatic BROTLI_INLINE void StoreBlockSwitch(BlockSplitCode* code,\n                                           const uint32_t block_len,\n                                           const uint8_t block_type,\n                                           BROTLI_BOOL is_first_block,\n                                           size_t* storage_ix,\n                                           uint8_t* storage) {\n  size_t typecode = NextBlockTypeCode(&code->type_code_calculator, block_type);\n  size_t lencode;\n  uint32_t len_nextra;\n  uint32_t len_extra;\n  if (!is_first_block) {\n    BrotliWriteBits(code->type_depths[typecode], code->type_bits[typecode],\n                    storage_ix, storage);\n  }\n  GetBlockLengthPrefixCode(block_len, &lencode, &len_nextra, &len_extra);\n\n  BrotliWriteBits(code->length_depths[lencode], code->length_bits[lencode],\n                  storage_ix, storage);\n  BrotliWriteBits(len_nextra, len_extra, storage_ix, storage);\n}\n\n/* Builds a BlockSplitCode data structure from the block split given by the\n   vector of block types and block lengths and stores it to the bit stream. */\nstatic void BuildAndStoreBlockSplitCode(const uint8_t* types,\n                                        const uint32_t* lengths,\n                                        const size_t num_blocks,\n                                        const size_t num_types,\n                                        HuffmanTree* tree,\n                                        BlockSplitCode* code,\n                                        size_t* storage_ix,\n                                        uint8_t* storage) {\n  uint32_t type_histo[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];\n  uint32_t length_histo[BROTLI_NUM_BLOCK_LEN_SYMBOLS];\n  size_t i;\n  BlockTypeCodeCalculator type_code_calculator;\n  memset(type_histo, 0, (num_types + 2) * sizeof(type_histo[0]));\n  memset(length_histo, 0, sizeof(length_histo));\n  InitBlockTypeCodeCalculator(&type_code_calculator);\n  for (i = 0; i < num_blocks; ++i) {\n    size_t type_code = NextBlockTypeCode(&type_code_calculator, types[i]);\n    if (i != 0) ++type_histo[type_code];\n    ++length_histo[BlockLengthPrefixCode(lengths[i])];\n  }\n  StoreVarLenUint8(num_types - 1, storage_ix, storage);\n  if (num_types > 1) {  /* TODO(eustas): else? could StoreBlockSwitch occur? */\n    BuildAndStoreHuffmanTree(&type_histo[0], num_types + 2, num_types + 2, tree,\n                             &code->type_depths[0], &code->type_bits[0],\n                             storage_ix, storage);\n    BuildAndStoreHuffmanTree(&length_histo[0], BROTLI_NUM_BLOCK_LEN_SYMBOLS,\n                             BROTLI_NUM_BLOCK_LEN_SYMBOLS,\n                             tree, &code->length_depths[0],\n                             &code->length_bits[0], storage_ix, storage);\n    StoreBlockSwitch(code, lengths[0], types[0], 1, storage_ix, storage);\n  }\n}\n\n/* Stores a context map where the histogram type is always the block type. */\nstatic void StoreTrivialContextMap(EncodeContextMapArena* arena,\n                                   size_t num_types,\n                                   size_t context_bits,\n                                   HuffmanTree* tree,\n                                   size_t* storage_ix,\n                                   uint8_t* storage) {\n  StoreVarLenUint8(num_types - 1, storage_ix, storage);\n  if (num_types > 1) {\n    size_t repeat_code = context_bits - 1u;\n    size_t repeat_bits = (1u << repeat_code) - 1u;\n    size_t alphabet_size = num_types + repeat_code;\n    uint32_t* BROTLI_RESTRICT const histogram = arena->histogram;\n    uint8_t* BROTLI_RESTRICT const depths = arena->depths;\n    uint16_t* BROTLI_RESTRICT const bits = arena->bits;\n    size_t i;\n    memset(histogram, 0, alphabet_size * sizeof(histogram[0]));\n    /* Write RLEMAX. */\n    BrotliWriteBits(1, 1, storage_ix, storage);\n    BrotliWriteBits(4, repeat_code - 1, storage_ix, storage);\n    histogram[repeat_code] = (uint32_t)num_types;\n    histogram[0] = 1;\n    for (i = context_bits; i < alphabet_size; ++i) {\n      histogram[i] = 1;\n    }\n    BuildAndStoreHuffmanTree(histogram, alphabet_size, alphabet_size,\n                             tree, depths, bits, storage_ix, storage);\n    for (i = 0; i < num_types; ++i) {\n      size_t code = (i == 0 ? 0 : i + context_bits - 1);\n      BrotliWriteBits(depths[code], bits[code], storage_ix, storage);\n      BrotliWriteBits(\n          depths[repeat_code], bits[repeat_code], storage_ix, storage);\n      BrotliWriteBits(repeat_code, repeat_bits, storage_ix, storage);\n    }\n    /* Write IMTF (inverse-move-to-front) bit. */\n    BrotliWriteBits(1, 1, storage_ix, storage);\n  }\n}\n\n/* Manages the encoding of one block category (literal, command or distance). */\ntypedef struct BlockEncoder {\n  size_t histogram_length_;\n  size_t num_block_types_;\n  const uint8_t* block_types_;  /* Not owned. */\n  const uint32_t* block_lengths_;  /* Not owned. */\n  size_t num_blocks_;\n  BlockSplitCode block_split_code_;\n  size_t block_ix_;\n  size_t block_len_;\n  size_t entropy_ix_;\n  uint8_t* depths_;\n  uint16_t* bits_;\n} BlockEncoder;\n\nstatic void InitBlockEncoder(BlockEncoder* self, size_t histogram_length,\n    size_t num_block_types, const uint8_t* block_types,\n    const uint32_t* block_lengths, const size_t num_blocks) {\n  self->histogram_length_ = histogram_length;\n  self->num_block_types_ = num_block_types;\n  self->block_types_ = block_types;\n  self->block_lengths_ = block_lengths;\n  self->num_blocks_ = num_blocks;\n  InitBlockTypeCodeCalculator(&self->block_split_code_.type_code_calculator);\n  self->block_ix_ = 0;\n  self->block_len_ = num_blocks == 0 ? 0 : block_lengths[0];\n  self->entropy_ix_ = 0;\n  self->depths_ = 0;\n  self->bits_ = 0;\n}\n\nstatic void CleanupBlockEncoder(MemoryManager* m, BlockEncoder* self) {\n  BROTLI_FREE(m, self->depths_);\n  BROTLI_FREE(m, self->bits_);\n}\n\n/* Creates entropy codes of block lengths and block types and stores them\n   to the bit stream. */\nstatic void BuildAndStoreBlockSwitchEntropyCodes(BlockEncoder* self,\n    HuffmanTree* tree, size_t* storage_ix, uint8_t* storage) {\n  BuildAndStoreBlockSplitCode(self->block_types_, self->block_lengths_,\n      self->num_blocks_, self->num_block_types_, tree, &self->block_split_code_,\n      storage_ix, storage);\n}\n\n/* Stores the next symbol with the entropy code of the current block type.\n   Updates the block type and block length at block boundaries. */\nstatic void StoreSymbol(BlockEncoder* self, size_t symbol, size_t* storage_ix,\n    uint8_t* storage) {\n  if (self->block_len_ == 0) {\n    size_t block_ix = ++self->block_ix_;\n    uint32_t block_len = self->block_lengths_[block_ix];\n    uint8_t block_type = self->block_types_[block_ix];\n    self->block_len_ = block_len;\n    self->entropy_ix_ = block_type * self->histogram_length_;\n    StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0,\n        storage_ix, storage);\n  }\n  --self->block_len_;\n  {\n    size_t ix = self->entropy_ix_ + symbol;\n    BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, storage);\n  }\n}\n\n/* Stores the next symbol with the entropy code of the current block type and\n   context value.\n   Updates the block type and block length at block boundaries. */\nstatic void StoreSymbolWithContext(BlockEncoder* self, size_t symbol,\n    size_t context, const uint32_t* context_map, size_t* storage_ix,\n    uint8_t* storage, const size_t context_bits) {\n  if (self->block_len_ == 0) {\n    size_t block_ix = ++self->block_ix_;\n    uint32_t block_len = self->block_lengths_[block_ix];\n    uint8_t block_type = self->block_types_[block_ix];\n    self->block_len_ = block_len;\n    self->entropy_ix_ = (size_t)block_type << context_bits;\n    StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0,\n        storage_ix, storage);\n  }\n  --self->block_len_;\n  {\n    size_t histo_ix = context_map[self->entropy_ix_ + context];\n    size_t ix = histo_ix * self->histogram_length_ + symbol;\n    BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, storage);\n  }\n}\n\n#define FN(X) X ## Literal\n/* NOLINTNEXTLINE(build/include) */\n#include \"block_encoder_inc.h\"\n#undef FN\n\n#define FN(X) X ## Command\n/* NOLINTNEXTLINE(build/include) */\n#include \"block_encoder_inc.h\"\n#undef FN\n\n#define FN(X) X ## Distance\n/* NOLINTNEXTLINE(build/include) */\n#include \"block_encoder_inc.h\"\n#undef FN\n\nstatic void JumpToByteBoundary(size_t* storage_ix, uint8_t* storage) {\n  *storage_ix = (*storage_ix + 7u) & ~7u;\n  storage[*storage_ix >> 3] = 0;\n}\n\ntypedef struct StoreMetablockArena {\n  BlockEncoder literal_enc;\n  BlockEncoder command_enc;\n  BlockEncoder distance_enc;\n  EncodeContextMapArena context_map_arena;\n} StoreMetablockArena;\n\nvoid BrotliStoreMetaBlock(MemoryManager* m,\n    const uint8_t* input, size_t start_pos, size_t length, size_t mask,\n    uint8_t prev_byte, uint8_t prev_byte2, BROTLI_BOOL is_last,\n    const BrotliEncoderParams* params, ContextType literal_context_mode,\n    const Command* commands, size_t n_commands, const MetaBlockSplit* mb,\n    size_t* storage_ix, uint8_t* storage) {\n\n  size_t pos = start_pos;\n  size_t i;\n  uint32_t num_distance_symbols = params->dist.alphabet_size_max;\n  uint32_t num_effective_distance_symbols = params->dist.alphabet_size_limit;\n  HuffmanTree* tree;\n  ContextLut literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode);\n  StoreMetablockArena* arena = NULL;\n  BlockEncoder* literal_enc = NULL;\n  BlockEncoder* command_enc = NULL;\n  BlockEncoder* distance_enc = NULL;\n  const BrotliDistanceParams* dist = &params->dist;\n  BROTLI_DCHECK(\n      num_effective_distance_symbols <= BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS);\n\n  StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);\n\n  tree = BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE);\n  arena = BROTLI_ALLOC(m, StoreMetablockArena, 1);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(tree) || BROTLI_IS_NULL(arena)) return;\n  literal_enc = &arena->literal_enc;\n  command_enc = &arena->command_enc;\n  distance_enc = &arena->distance_enc;\n  InitBlockEncoder(literal_enc, BROTLI_NUM_LITERAL_SYMBOLS,\n      mb->literal_split.num_types, mb->literal_split.types,\n      mb->literal_split.lengths, mb->literal_split.num_blocks);\n  InitBlockEncoder(command_enc, BROTLI_NUM_COMMAND_SYMBOLS,\n      mb->command_split.num_types, mb->command_split.types,\n      mb->command_split.lengths, mb->command_split.num_blocks);\n  InitBlockEncoder(distance_enc, num_effective_distance_symbols,\n      mb->distance_split.num_types, mb->distance_split.types,\n      mb->distance_split.lengths, mb->distance_split.num_blocks);\n\n  BuildAndStoreBlockSwitchEntropyCodes(literal_enc, tree, storage_ix, storage);\n  BuildAndStoreBlockSwitchEntropyCodes(command_enc, tree, storage_ix, storage);\n  BuildAndStoreBlockSwitchEntropyCodes(distance_enc, tree, storage_ix, storage);\n\n  BrotliWriteBits(2, dist->distance_postfix_bits, storage_ix, storage);\n  BrotliWriteBits(\n      4, dist->num_direct_distance_codes >> dist->distance_postfix_bits,\n      storage_ix, storage);\n  for (i = 0; i < mb->literal_split.num_types; ++i) {\n    BrotliWriteBits(2, literal_context_mode, storage_ix, storage);\n  }\n\n  if (mb->literal_context_map_size == 0) {\n    StoreTrivialContextMap(\n        &arena->context_map_arena, mb->literal_histograms_size,\n        BROTLI_LITERAL_CONTEXT_BITS, tree, storage_ix, storage);\n  } else {\n    EncodeContextMap(m, &arena->context_map_arena,\n        mb->literal_context_map, mb->literal_context_map_size,\n        mb->literal_histograms_size, tree, storage_ix, storage);\n    if (BROTLI_IS_OOM(m)) return;\n  }\n\n  if (mb->distance_context_map_size == 0) {\n    StoreTrivialContextMap(\n        &arena->context_map_arena, mb->distance_histograms_size,\n        BROTLI_DISTANCE_CONTEXT_BITS, tree, storage_ix, storage);\n  } else {\n    EncodeContextMap(m, &arena->context_map_arena,\n        mb->distance_context_map, mb->distance_context_map_size,\n        mb->distance_histograms_size, tree, storage_ix, storage);\n    if (BROTLI_IS_OOM(m)) return;\n  }\n\n  BuildAndStoreEntropyCodesLiteral(m, literal_enc, mb->literal_histograms,\n      mb->literal_histograms_size, BROTLI_NUM_LITERAL_SYMBOLS, tree,\n      storage_ix, storage);\n  if (BROTLI_IS_OOM(m)) return;\n  BuildAndStoreEntropyCodesCommand(m, command_enc, mb->command_histograms,\n      mb->command_histograms_size, BROTLI_NUM_COMMAND_SYMBOLS, tree,\n      storage_ix, storage);\n  if (BROTLI_IS_OOM(m)) return;\n  BuildAndStoreEntropyCodesDistance(m, distance_enc, mb->distance_histograms,\n      mb->distance_histograms_size, num_distance_symbols, tree,\n      storage_ix, storage);\n  if (BROTLI_IS_OOM(m)) return;\n  BROTLI_FREE(m, tree);\n\n  for (i = 0; i < n_commands; ++i) {\n    const Command cmd = commands[i];\n    size_t cmd_code = cmd.cmd_prefix_;\n    StoreSymbol(command_enc, cmd_code, storage_ix, storage);\n    StoreCommandExtra(&cmd, storage_ix, storage);\n    if (mb->literal_context_map_size == 0) {\n      size_t j;\n      for (j = cmd.insert_len_; j != 0; --j) {\n        StoreSymbol(literal_enc, input[pos & mask], storage_ix, storage);\n        ++pos;\n      }\n    } else {\n      size_t j;\n      for (j = cmd.insert_len_; j != 0; --j) {\n        size_t context =\n            BROTLI_CONTEXT(prev_byte, prev_byte2, literal_context_lut);\n        uint8_t literal = input[pos & mask];\n        StoreSymbolWithContext(literal_enc, literal, context,\n            mb->literal_context_map, storage_ix, storage,\n            BROTLI_LITERAL_CONTEXT_BITS);\n        prev_byte2 = prev_byte;\n        prev_byte = literal;\n        ++pos;\n      }\n    }\n    pos += CommandCopyLen(&cmd);\n    if (CommandCopyLen(&cmd)) {\n      prev_byte2 = input[(pos - 2) & mask];\n      prev_byte = input[(pos - 1) & mask];\n      if (cmd.cmd_prefix_ >= 128) {\n        size_t dist_code = cmd.dist_prefix_ & 0x3FF;\n        uint32_t distnumextra = cmd.dist_prefix_ >> 10;\n        uint64_t distextra = cmd.dist_extra_;\n        if (mb->distance_context_map_size == 0) {\n          StoreSymbol(distance_enc, dist_code, storage_ix, storage);\n        } else {\n          size_t context = CommandDistanceContext(&cmd);\n          StoreSymbolWithContext(distance_enc, dist_code, context,\n              mb->distance_context_map, storage_ix, storage,\n              BROTLI_DISTANCE_CONTEXT_BITS);\n        }\n        BrotliWriteBits(distnumextra, distextra, storage_ix, storage);\n      }\n    }\n  }\n  CleanupBlockEncoder(m, distance_enc);\n  CleanupBlockEncoder(m, command_enc);\n  CleanupBlockEncoder(m, literal_enc);\n  BROTLI_FREE(m, arena);\n  if (is_last) {\n    JumpToByteBoundary(storage_ix, storage);\n  }\n}\n\nstatic void BuildHistograms(const uint8_t* input,\n                            size_t start_pos,\n                            size_t mask,\n                            const Command* commands,\n                            size_t n_commands,\n                            HistogramLiteral* lit_histo,\n                            HistogramCommand* cmd_histo,\n                            HistogramDistance* dist_histo) {\n  size_t pos = start_pos;\n  size_t i;\n  for (i = 0; i < n_commands; ++i) {\n    const Command cmd = commands[i];\n    size_t j;\n    HistogramAddCommand(cmd_histo, cmd.cmd_prefix_);\n    for (j = cmd.insert_len_; j != 0; --j) {\n      HistogramAddLiteral(lit_histo, input[pos & mask]);\n      ++pos;\n    }\n    pos += CommandCopyLen(&cmd);\n    if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >= 128) {\n      HistogramAddDistance(dist_histo, cmd.dist_prefix_ & 0x3FF);\n    }\n  }\n}\n\nstatic void StoreDataWithHuffmanCodes(const uint8_t* input,\n                                      size_t start_pos,\n                                      size_t mask,\n                                      const Command* commands,\n                                      size_t n_commands,\n                                      const uint8_t* lit_depth,\n                                      const uint16_t* lit_bits,\n                                      const uint8_t* cmd_depth,\n                                      const uint16_t* cmd_bits,\n                                      const uint8_t* dist_depth,\n                                      const uint16_t* dist_bits,\n                                      size_t* storage_ix,\n                                      uint8_t* storage) {\n  size_t pos = start_pos;\n  size_t i;\n  for (i = 0; i < n_commands; ++i) {\n    const Command cmd = commands[i];\n    const size_t cmd_code = cmd.cmd_prefix_;\n    size_t j;\n    BrotliWriteBits(\n        cmd_depth[cmd_code], cmd_bits[cmd_code], storage_ix, storage);\n    StoreCommandExtra(&cmd, storage_ix, storage);\n    for (j = cmd.insert_len_; j != 0; --j) {\n      const uint8_t literal = input[pos & mask];\n      BrotliWriteBits(\n          lit_depth[literal], lit_bits[literal], storage_ix, storage);\n      ++pos;\n    }\n    pos += CommandCopyLen(&cmd);\n    if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >= 128) {\n      const size_t dist_code = cmd.dist_prefix_ & 0x3FF;\n      const uint32_t distnumextra = cmd.dist_prefix_ >> 10;\n      const uint32_t distextra = cmd.dist_extra_;\n      BrotliWriteBits(dist_depth[dist_code], dist_bits[dist_code],\n                      storage_ix, storage);\n      BrotliWriteBits(distnumextra, distextra, storage_ix, storage);\n    }\n  }\n}\n\n/* TODO(eustas): pull alloc/dealloc to caller? */\ntypedef struct MetablockArena {\n  HistogramLiteral lit_histo;\n  HistogramCommand cmd_histo;\n  HistogramDistance dist_histo;\n  /* TODO(eustas): merge bits and depth? */\n  uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS];\n  uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS];\n  uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS];\n  uint16_t cmd_bits[BROTLI_NUM_COMMAND_SYMBOLS];\n  uint8_t dist_depth[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];\n  uint16_t dist_bits[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];\n  HuffmanTree tree[MAX_HUFFMAN_TREE_SIZE];\n} MetablockArena;\n\nvoid BrotliStoreMetaBlockTrivial(MemoryManager* m,\n    const uint8_t* input, size_t start_pos, size_t length, size_t mask,\n    BROTLI_BOOL is_last, const BrotliEncoderParams* params,\n    const Command* commands, size_t n_commands,\n    size_t* storage_ix, uint8_t* storage) {\n  MetablockArena* arena = BROTLI_ALLOC(m, MetablockArena, 1);\n  uint32_t num_distance_symbols = params->dist.alphabet_size_max;\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(arena)) return;\n\n  StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);\n\n  HistogramClearLiteral(&arena->lit_histo);\n  HistogramClearCommand(&arena->cmd_histo);\n  HistogramClearDistance(&arena->dist_histo);\n\n  BuildHistograms(input, start_pos, mask, commands, n_commands,\n                  &arena->lit_histo, &arena->cmd_histo, &arena->dist_histo);\n\n  BrotliWriteBits(13, 0, storage_ix, storage);\n\n  BuildAndStoreHuffmanTree(arena->lit_histo.data_, BROTLI_NUM_LITERAL_SYMBOLS,\n                           BROTLI_NUM_LITERAL_SYMBOLS, arena->tree,\n                           arena->lit_depth, arena->lit_bits,\n                           storage_ix, storage);\n  BuildAndStoreHuffmanTree(arena->cmd_histo.data_, BROTLI_NUM_COMMAND_SYMBOLS,\n                           BROTLI_NUM_COMMAND_SYMBOLS, arena->tree,\n                           arena->cmd_depth, arena->cmd_bits,\n                           storage_ix, storage);\n  BuildAndStoreHuffmanTree(arena->dist_histo.data_,\n                           MAX_SIMPLE_DISTANCE_ALPHABET_SIZE,\n                           num_distance_symbols, arena->tree,\n                           arena->dist_depth, arena->dist_bits,\n                           storage_ix, storage);\n  StoreDataWithHuffmanCodes(input, start_pos, mask, commands,\n                            n_commands, arena->lit_depth, arena->lit_bits,\n                            arena->cmd_depth, arena->cmd_bits,\n                            arena->dist_depth, arena->dist_bits,\n                            storage_ix, storage);\n  BROTLI_FREE(m, arena);\n  if (is_last) {\n    JumpToByteBoundary(storage_ix, storage);\n  }\n}\n\nvoid BrotliStoreMetaBlockFast(MemoryManager* m,\n    const uint8_t* input, size_t start_pos, size_t length, size_t mask,\n    BROTLI_BOOL is_last, const BrotliEncoderParams* params,\n    const Command* commands, size_t n_commands,\n    size_t* storage_ix, uint8_t* storage) {\n  MetablockArena* arena = BROTLI_ALLOC(m, MetablockArena, 1);\n  uint32_t num_distance_symbols = params->dist.alphabet_size_max;\n  uint32_t distance_alphabet_bits =\n      Log2FloorNonZero(num_distance_symbols - 1) + 1;\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(arena)) return;\n\n  StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);\n\n  BrotliWriteBits(13, 0, storage_ix, storage);\n\n  if (n_commands <= 128) {\n    uint32_t histogram[BROTLI_NUM_LITERAL_SYMBOLS] = { 0 };\n    size_t pos = start_pos;\n    size_t num_literals = 0;\n    size_t i;\n    for (i = 0; i < n_commands; ++i) {\n      const Command cmd = commands[i];\n      size_t j;\n      for (j = cmd.insert_len_; j != 0; --j) {\n        ++histogram[input[pos & mask]];\n        ++pos;\n      }\n      num_literals += cmd.insert_len_;\n      pos += CommandCopyLen(&cmd);\n    }\n    BrotliBuildAndStoreHuffmanTreeFast(arena->tree, histogram, num_literals,\n                                       /* max_bits = */ 8,\n                                       arena->lit_depth, arena->lit_bits,\n                                       storage_ix, storage);\n    StoreStaticCommandHuffmanTree(storage_ix, storage);\n    StoreStaticDistanceHuffmanTree(storage_ix, storage);\n    StoreDataWithHuffmanCodes(input, start_pos, mask, commands,\n                              n_commands, arena->lit_depth, arena->lit_bits,\n                              kStaticCommandCodeDepth,\n                              kStaticCommandCodeBits,\n                              kStaticDistanceCodeDepth,\n                              kStaticDistanceCodeBits,\n                              storage_ix, storage);\n  } else {\n    HistogramClearLiteral(&arena->lit_histo);\n    HistogramClearCommand(&arena->cmd_histo);\n    HistogramClearDistance(&arena->dist_histo);\n    BuildHistograms(input, start_pos, mask, commands, n_commands,\n                    &arena->lit_histo, &arena->cmd_histo, &arena->dist_histo);\n    BrotliBuildAndStoreHuffmanTreeFast(arena->tree, arena->lit_histo.data_,\n                                       arena->lit_histo.total_count_,\n                                       /* max_bits = */ 8,\n                                       arena->lit_depth, arena->lit_bits,\n                                       storage_ix, storage);\n    BrotliBuildAndStoreHuffmanTreeFast(arena->tree, arena->cmd_histo.data_,\n                                       arena->cmd_histo.total_count_,\n                                       /* max_bits = */ 10,\n                                       arena->cmd_depth, arena->cmd_bits,\n                                       storage_ix, storage);\n    BrotliBuildAndStoreHuffmanTreeFast(arena->tree, arena->dist_histo.data_,\n                                       arena->dist_histo.total_count_,\n                                       /* max_bits = */\n                                       distance_alphabet_bits,\n                                       arena->dist_depth, arena->dist_bits,\n                                       storage_ix, storage);\n    StoreDataWithHuffmanCodes(input, start_pos, mask, commands,\n                              n_commands, arena->lit_depth, arena->lit_bits,\n                              arena->cmd_depth, arena->cmd_bits,\n                              arena->dist_depth, arena->dist_bits,\n                              storage_ix, storage);\n  }\n\n  BROTLI_FREE(m, arena);\n\n  if (is_last) {\n    JumpToByteBoundary(storage_ix, storage);\n  }\n}\n\n/* This is for storing uncompressed blocks (simple raw storage of\n   bytes-as-bytes). */\nvoid BrotliStoreUncompressedMetaBlock(BROTLI_BOOL is_final_block,\n                                      const uint8_t* BROTLI_RESTRICT input,\n                                      size_t position, size_t mask,\n                                      size_t len,\n                                      size_t* BROTLI_RESTRICT storage_ix,\n                                      uint8_t* BROTLI_RESTRICT storage) {\n  size_t masked_pos = position & mask;\n  BrotliStoreUncompressedMetaBlockHeader(len, storage_ix, storage);\n  JumpToByteBoundary(storage_ix, storage);\n\n  if (masked_pos + len > mask + 1) {\n    size_t len1 = mask + 1 - masked_pos;\n    memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len1);\n    *storage_ix += len1 << 3;\n    len -= len1;\n    masked_pos = 0;\n  }\n  memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len);\n  *storage_ix += len << 3;\n\n  /* We need to clear the next 4 bytes to continue to be\n     compatible with BrotliWriteBits. */\n  BrotliWriteBitsPrepareStorage(*storage_ix, storage);\n\n  /* Since the uncompressed block itself may not be the final block, add an\n     empty one after this. */\n  if (is_final_block) {\n    BrotliWriteBits(1, 1, storage_ix, storage);  /* islast */\n    BrotliWriteBits(1, 1, storage_ix, storage);  /* isempty */\n    JumpToByteBoundary(storage_ix, storage);\n  }\n}\n\n#if defined(BROTLI_TEST)\nvoid BrotliGetBlockLengthPrefixCodeForTest(uint32_t len, size_t* code,\n                                           uint32_t* n_extra, uint32_t* extra);\nvoid BrotliGetBlockLengthPrefixCodeForTest(uint32_t len, size_t* code,\n                                           uint32_t* n_extra, uint32_t* extra) {\n  GetBlockLengthPrefixCode(len, code, n_extra, extra);\n}\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/brotli_bit_stream.h",
    "content": "/* Copyright 2014 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Functions to convert brotli-related data structures into the\n   brotli bit stream. The functions here operate under\n   assumption that there is enough space in the storage, i.e., there are\n   no out-of-range checks anywhere.\n\n   These functions do bit addressing into a byte array. The byte array\n   is called \"storage\" and the index to the bit is called storage_ix\n   in function arguments. */\n\n#ifndef BROTLI_ENC_BROTLI_BIT_STREAM_H_\n#define BROTLI_ENC_BROTLI_BIT_STREAM_H_\n\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"command.h\"\n#include \"entropy_encode.h\"\n#include \"memory.h\"\n#include \"metablock.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* All Store functions here will use a storage_ix, which is always the bit\n   position for the current storage. */\n\nBROTLI_INTERNAL void BrotliStoreHuffmanTree(const uint8_t* depths, size_t num,\n    HuffmanTree* tree, size_t* storage_ix, uint8_t* storage);\n\nBROTLI_INTERNAL void BrotliBuildAndStoreHuffmanTreeFast(\n    HuffmanTree* tree, const uint32_t* histogram, const size_t histogram_total,\n    const size_t max_bits, uint8_t* depth, uint16_t* bits, size_t* storage_ix,\n    uint8_t* storage);\n\n/* REQUIRES: length > 0 */\n/* REQUIRES: length <= (1 << 24) */\nBROTLI_INTERNAL void BrotliStoreMetaBlock(MemoryManager* m,\n    const uint8_t* input, size_t start_pos, size_t length, size_t mask,\n    uint8_t prev_byte, uint8_t prev_byte2, BROTLI_BOOL is_last,\n    const BrotliEncoderParams* params, ContextType literal_context_mode,\n    const Command* commands, size_t n_commands, const MetaBlockSplit* mb,\n    size_t* storage_ix, uint8_t* storage);\n\n/* Stores the meta-block without doing any block splitting, just collects\n   one histogram per block category and uses that for entropy coding.\n   REQUIRES: length > 0\n   REQUIRES: length <= (1 << 24) */\nBROTLI_INTERNAL void BrotliStoreMetaBlockTrivial(MemoryManager* m,\n    const uint8_t* input, size_t start_pos, size_t length, size_t mask,\n    BROTLI_BOOL is_last, const BrotliEncoderParams* params,\n    const Command* commands, size_t n_commands,\n    size_t* storage_ix, uint8_t* storage);\n\n/* Same as above, but uses static prefix codes for histograms with a only a few\n   symbols, and uses static code length prefix codes for all other histograms.\n   REQUIRES: length > 0\n   REQUIRES: length <= (1 << 24) */\nBROTLI_INTERNAL void BrotliStoreMetaBlockFast(MemoryManager* m,\n    const uint8_t* input, size_t start_pos, size_t length, size_t mask,\n    BROTLI_BOOL is_last, const BrotliEncoderParams* params,\n    const Command* commands, size_t n_commands,\n    size_t* storage_ix, uint8_t* storage);\n\n/* This is for storing uncompressed blocks (simple raw storage of\n   bytes-as-bytes).\n   REQUIRES: length > 0\n   REQUIRES: length <= (1 << 24) */\nBROTLI_INTERNAL void BrotliStoreUncompressedMetaBlock(\n    BROTLI_BOOL is_final_block, const uint8_t* BROTLI_RESTRICT input,\n    size_t position, size_t mask, size_t len,\n    size_t* BROTLI_RESTRICT storage_ix, uint8_t* BROTLI_RESTRICT storage);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_BROTLI_BIT_STREAM_H_ */\n"
  },
  {
    "path": "c/enc/cluster.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Functions for clustering similar histograms together. */\n\n#include \"cluster.h\"\n\n#include \"../common/platform.h\"\n#include \"bit_cost.h\"  /* BrotliPopulationCost */\n#include \"fast_log.h\"\n#include \"histogram.h\"\n#include \"memory.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstatic BROTLI_INLINE BROTLI_BOOL HistogramPairIsLess(\n    const HistogramPair* p1, const HistogramPair* p2) {\n  if (p1->cost_diff != p2->cost_diff) {\n    return TO_BROTLI_BOOL(p1->cost_diff > p2->cost_diff);\n  }\n  return TO_BROTLI_BOOL((p1->idx2 - p1->idx1) > (p2->idx2 - p2->idx1));\n}\n\n/* Returns entropy reduction of the context map when we combine two clusters. */\nstatic BROTLI_INLINE double ClusterCostDiff(size_t size_a, size_t size_b) {\n  size_t size_c = size_a + size_b;\n  return (double)size_a * FastLog2(size_a) +\n    (double)size_b * FastLog2(size_b) -\n    (double)size_c * FastLog2(size_c);\n}\n\n#define CODE(X) X\n\n#define FN(X) X ## Literal\n#include \"cluster_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#define FN(X) X ## Command\n#include \"cluster_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#define FN(X) X ## Distance\n#include \"cluster_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#undef CODE\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/cluster.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Functions for clustering similar histograms together. */\n\n#ifndef BROTLI_ENC_CLUSTER_H_\n#define BROTLI_ENC_CLUSTER_H_\n\n#include \"../common/platform.h\"\n#include \"histogram.h\"\n#include \"memory.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\ntypedef struct HistogramPair {\n  uint32_t idx1;\n  uint32_t idx2;\n  double cost_combo;\n  double cost_diff;\n} HistogramPair;\n\n#define CODE(X) /* Declaration */;\n\n#define FN(X) X ## Literal\n#include \"cluster_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#define FN(X) X ## Command\n#include \"cluster_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#define FN(X) X ## Distance\n#include \"cluster_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#undef CODE\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_CLUSTER_H_ */\n"
  },
  {
    "path": "c/enc/cluster_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN, CODE */\n\n#define HistogramType FN(Histogram)\n\n/* Computes the bit cost reduction by combining out[idx1] and out[idx2] and if\n   it is below a threshold, stores the pair (idx1, idx2) in the *pairs queue. */\nBROTLI_INTERNAL void FN(BrotliCompareAndPushToQueue)(\n    const HistogramType* out, HistogramType* tmp, const uint32_t* cluster_size,\n    uint32_t idx1, uint32_t idx2, size_t max_num_pairs, HistogramPair* pairs,\n    size_t* num_pairs) CODE({\n  BROTLI_BOOL is_good_pair = BROTLI_FALSE;\n  HistogramPair p;\n  p.idx1 = p.idx2 = 0;\n  p.cost_diff = p.cost_combo = 0;\n  if (idx1 == idx2) {\n    return;\n  }\n  if (idx2 < idx1) {\n    uint32_t t = idx2;\n    idx2 = idx1;\n    idx1 = t;\n  }\n  p.idx1 = idx1;\n  p.idx2 = idx2;\n  p.cost_diff = 0.5 * ClusterCostDiff(cluster_size[idx1], cluster_size[idx2]);\n  p.cost_diff -= out[idx1].bit_cost_;\n  p.cost_diff -= out[idx2].bit_cost_;\n\n  if (out[idx1].total_count_ == 0) {\n    p.cost_combo = out[idx2].bit_cost_;\n    is_good_pair = BROTLI_TRUE;\n  } else if (out[idx2].total_count_ == 0) {\n    p.cost_combo = out[idx1].bit_cost_;\n    is_good_pair = BROTLI_TRUE;\n  } else {\n    double threshold = *num_pairs == 0 ? 1e99 :\n        BROTLI_MAX(double, 0.0, pairs[0].cost_diff);\n    double cost_combo;\n    *tmp = out[idx1];\n    FN(HistogramAddHistogram)(tmp, &out[idx2]);\n    cost_combo = FN(BrotliPopulationCost)(tmp);\n    if (cost_combo < threshold - p.cost_diff) {\n      p.cost_combo = cost_combo;\n      is_good_pair = BROTLI_TRUE;\n    }\n  }\n  if (is_good_pair) {\n    p.cost_diff += p.cost_combo;\n    if (*num_pairs > 0 && HistogramPairIsLess(&pairs[0], &p)) {\n      /* Replace the top of the queue if needed. */\n      if (*num_pairs < max_num_pairs) {\n        pairs[*num_pairs] = pairs[0];\n        ++(*num_pairs);\n      }\n      pairs[0] = p;\n    } else if (*num_pairs < max_num_pairs) {\n      pairs[*num_pairs] = p;\n      ++(*num_pairs);\n    }\n  }\n})\n\nBROTLI_INTERNAL size_t FN(BrotliHistogramCombine)(HistogramType* out,\n                                                  HistogramType* tmp,\n                                                  uint32_t* cluster_size,\n                                                  uint32_t* symbols,\n                                                  uint32_t* clusters,\n                                                  HistogramPair* pairs,\n                                                  size_t num_clusters,\n                                                  size_t symbols_size,\n                                                  size_t max_clusters,\n                                                  size_t max_num_pairs) CODE({\n  double cost_diff_threshold = 0.0;\n  size_t min_cluster_size = 1;\n  size_t num_pairs = 0;\n\n  {\n    /* We maintain a vector of histogram pairs, with the property that the pair\n       with the maximum bit cost reduction is the first. */\n    size_t idx1;\n    for (idx1 = 0; idx1 < num_clusters; ++idx1) {\n      size_t idx2;\n      for (idx2 = idx1 + 1; idx2 < num_clusters; ++idx2) {\n        FN(BrotliCompareAndPushToQueue)(out, tmp, cluster_size, clusters[idx1],\n            clusters[idx2], max_num_pairs, &pairs[0], &num_pairs);\n      }\n    }\n  }\n\n  while (num_clusters > min_cluster_size) {\n    uint32_t best_idx1;\n    uint32_t best_idx2;\n    size_t i;\n    if (pairs[0].cost_diff >= cost_diff_threshold) {\n      cost_diff_threshold = 1e99;\n      min_cluster_size = max_clusters;\n      continue;\n    }\n    /* Take the best pair from the top of heap. */\n    best_idx1 = pairs[0].idx1;\n    best_idx2 = pairs[0].idx2;\n    FN(HistogramAddHistogram)(&out[best_idx1], &out[best_idx2]);\n    out[best_idx1].bit_cost_ = pairs[0].cost_combo;\n    cluster_size[best_idx1] += cluster_size[best_idx2];\n    for (i = 0; i < symbols_size; ++i) {\n      if (symbols[i] == best_idx2) {\n        symbols[i] = best_idx1;\n      }\n    }\n    for (i = 0; i < num_clusters; ++i) {\n      if (clusters[i] == best_idx2) {\n        memmove(&clusters[i], &clusters[i + 1],\n                (num_clusters - i - 1) * sizeof(clusters[0]));\n        break;\n      }\n    }\n    --num_clusters;\n    {\n      /* Remove pairs intersecting the just combined best pair. */\n      size_t copy_to_idx = 0;\n      for (i = 0; i < num_pairs; ++i) {\n        HistogramPair* p = &pairs[i];\n        if (p->idx1 == best_idx1 || p->idx2 == best_idx1 ||\n            p->idx1 == best_idx2 || p->idx2 == best_idx2) {\n          /* Remove invalid pair from the queue. */\n          continue;\n        }\n        if (HistogramPairIsLess(&pairs[0], p)) {\n          /* Replace the top of the queue if needed. */\n          HistogramPair front = pairs[0];\n          pairs[0] = *p;\n          pairs[copy_to_idx] = front;\n        } else {\n          pairs[copy_to_idx] = *p;\n        }\n        ++copy_to_idx;\n      }\n      num_pairs = copy_to_idx;\n    }\n\n    /* Push new pairs formed with the combined histogram to the heap. */\n    for (i = 0; i < num_clusters; ++i) {\n      FN(BrotliCompareAndPushToQueue)(out, tmp, cluster_size, best_idx1,\n          clusters[i], max_num_pairs, &pairs[0], &num_pairs);\n    }\n  }\n  return num_clusters;\n})\n\n/* What is the bit cost of moving histogram from cur_symbol to candidate. */\nBROTLI_INTERNAL double FN(BrotliHistogramBitCostDistance)(\n    const HistogramType* histogram, const HistogramType* candidate,\n    HistogramType* tmp) CODE({\n  if (histogram->total_count_ == 0) {\n    return 0.0;\n  } else {\n    *tmp = *histogram;\n    FN(HistogramAddHistogram)(tmp, candidate);\n    return FN(BrotliPopulationCost)(tmp) - candidate->bit_cost_;\n  }\n})\n\n/* Find the best 'out' histogram for each of the 'in' histograms.\n   When called, clusters[0..num_clusters) contains the unique values from\n   symbols[0..in_size), but this property is not preserved in this function.\n   Note: we assume that out[]->bit_cost_ is already up-to-date. */\nBROTLI_INTERNAL void FN(BrotliHistogramRemap)(const HistogramType* in,\n    size_t in_size, const uint32_t* clusters, size_t num_clusters,\n    HistogramType* out, HistogramType* tmp, uint32_t* symbols) CODE({\n  size_t i;\n  for (i = 0; i < in_size; ++i) {\n    uint32_t best_out = i == 0 ? symbols[0] : symbols[i - 1];\n    double best_bits =\n        FN(BrotliHistogramBitCostDistance)(&in[i], &out[best_out], tmp);\n    size_t j;\n    for (j = 0; j < num_clusters; ++j) {\n      const double cur_bits =\n          FN(BrotliHistogramBitCostDistance)(&in[i], &out[clusters[j]], tmp);\n      if (cur_bits < best_bits) {\n        best_bits = cur_bits;\n        best_out = clusters[j];\n      }\n    }\n    symbols[i] = best_out;\n  }\n\n  /* Recompute each out based on raw and symbols. */\n  for (i = 0; i < num_clusters; ++i) {\n    FN(HistogramClear)(&out[clusters[i]]);\n  }\n  for (i = 0; i < in_size; ++i) {\n    FN(HistogramAddHistogram)(&out[symbols[i]], &in[i]);\n  }\n})\n\n/* Reorders elements of the out[0..length) array and changes values in\n   symbols[0..length) array in the following way:\n     * when called, symbols[] contains indexes into out[], and has N unique\n       values (possibly N < length)\n     * on return, symbols'[i] = f(symbols[i]) and\n                  out'[symbols'[i]] = out[symbols[i]], for each 0 <= i < length,\n       where f is a bijection between the range of symbols[] and [0..N), and\n       the first occurrences of values in symbols'[i] come in consecutive\n       increasing order.\n   Returns N, the number of unique values in symbols[]. */\nBROTLI_INTERNAL size_t FN(BrotliHistogramReindex)(MemoryManager* m,\n    HistogramType* out, uint32_t* symbols, size_t length) CODE({\n  static const uint32_t kInvalidIndex = BROTLI_UINT32_MAX;\n  uint32_t* new_index = BROTLI_ALLOC(m, uint32_t, length);\n  uint32_t next_index;\n  HistogramType* tmp;\n  size_t i;\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(new_index)) return 0;\n  for (i = 0; i < length; ++i) {\n      new_index[i] = kInvalidIndex;\n  }\n  next_index = 0;\n  for (i = 0; i < length; ++i) {\n    if (new_index[symbols[i]] == kInvalidIndex) {\n      new_index[symbols[i]] = next_index;\n      ++next_index;\n    }\n  }\n  /* TODO(eustas): by using idea of \"cycle-sort\" we can avoid allocation of\n     tmp and reduce the number of copying by the factor of 2. */\n  tmp = BROTLI_ALLOC(m, HistogramType, next_index);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(tmp)) return 0;\n  next_index = 0;\n  for (i = 0; i < length; ++i) {\n    if (new_index[symbols[i]] == next_index) {\n      tmp[next_index] = out[symbols[i]];\n      ++next_index;\n    }\n    symbols[i] = new_index[symbols[i]];\n  }\n  BROTLI_FREE(m, new_index);\n  for (i = 0; i < next_index; ++i) {\n    out[i] = tmp[i];\n  }\n  BROTLI_FREE(m, tmp);\n  return next_index;\n})\n\nBROTLI_INTERNAL void FN(BrotliClusterHistograms)(\n    MemoryManager* m, const HistogramType* in, const size_t in_size,\n    size_t max_histograms, HistogramType* out, size_t* out_size,\n    uint32_t* histogram_symbols) CODE({\n  uint32_t* cluster_size = BROTLI_ALLOC(m, uint32_t, in_size);\n  uint32_t* clusters = BROTLI_ALLOC(m, uint32_t, in_size);\n  size_t num_clusters = 0;\n  const size_t max_input_histograms = 64;\n  size_t pairs_capacity = max_input_histograms * max_input_histograms / 2;\n  /* For the first pass of clustering, we allow all pairs. */\n  HistogramPair* pairs = BROTLI_ALLOC(m, HistogramPair, pairs_capacity + 1);\n  /* TODO(eustas): move to \"persistent\" arena? */\n  HistogramType* tmp = BROTLI_ALLOC(m, HistogramType, 1);\n  size_t i;\n\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(cluster_size) ||\n      BROTLI_IS_NULL(clusters) || BROTLI_IS_NULL(pairs)|| BROTLI_IS_NULL(tmp)) {\n    return;\n  }\n\n  for (i = 0; i < in_size; ++i) {\n    cluster_size[i] = 1;\n  }\n\n  for (i = 0; i < in_size; ++i) {\n    out[i] = in[i];\n    out[i].bit_cost_ = FN(BrotliPopulationCost)(&in[i]);\n    histogram_symbols[i] = (uint32_t)i;\n  }\n\n  for (i = 0; i < in_size; i += max_input_histograms) {\n    size_t num_to_combine =\n        BROTLI_MIN(size_t, in_size - i, max_input_histograms);\n    size_t num_new_clusters;\n    size_t j;\n    for (j = 0; j < num_to_combine; ++j) {\n      clusters[num_clusters + j] = (uint32_t)(i + j);\n    }\n    num_new_clusters =\n        FN(BrotliHistogramCombine)(out, tmp, cluster_size,\n                                   &histogram_symbols[i],\n                                   &clusters[num_clusters], pairs,\n                                   num_to_combine, num_to_combine,\n                                   max_histograms, pairs_capacity);\n    num_clusters += num_new_clusters;\n  }\n\n  {\n    /* For the second pass, we limit the total number of histogram pairs.\n       After this limit is reached, we only keep searching for the best pair. */\n    size_t max_num_pairs = BROTLI_MIN(size_t,\n        64 * num_clusters, (num_clusters / 2) * num_clusters);\n    BROTLI_ENSURE_CAPACITY(\n        m, HistogramPair, pairs, pairs_capacity, max_num_pairs + 1);\n    if (BROTLI_IS_OOM(m)) return;\n\n    /* Collapse similar histograms. */\n    num_clusters = FN(BrotliHistogramCombine)(out, tmp, cluster_size,\n                                              histogram_symbols, clusters,\n                                              pairs, num_clusters, in_size,\n                                              max_histograms, max_num_pairs);\n  }\n  BROTLI_FREE(m, pairs);\n  BROTLI_FREE(m, cluster_size);\n  /* Find the optimal map from original histograms to the final ones. */\n  FN(BrotliHistogramRemap)(in, in_size, clusters, num_clusters,\n                           out, tmp, histogram_symbols);\n  BROTLI_FREE(m, tmp);\n  BROTLI_FREE(m, clusters);\n  /* Convert the context map to a canonical form. */\n  *out_size = FN(BrotliHistogramReindex)(m, out, histogram_symbols, in_size);\n  if (BROTLI_IS_OOM(m)) return;\n})\n\n#undef HistogramType\n"
  },
  {
    "path": "c/enc/command.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"command.h\"\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nconst uint32_t kBrotliInsBase[BROTLI_NUM_INS_COPY_CODES] = {\n    0,  1,  2,  3,  4,   5,   6,   8,   10,   14,   18,   26,\n    34, 50, 66, 98, 130, 194, 322, 578, 1090, 2114, 6210, 22594};\nconst uint32_t kBrotliInsExtra[BROTLI_NUM_INS_COPY_CODES] = {\n    0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 12, 14, 24};\nconst uint32_t kBrotliCopyBase[BROTLI_NUM_INS_COPY_CODES] = {\n    2,  3,  4,  5,  6,  7,   8,   9,   10,  12,  14,   18,\n    22, 30, 38, 54, 70, 102, 134, 198, 326, 582, 1094, 2118};\nconst uint32_t kBrotliCopyExtra[BROTLI_NUM_INS_COPY_CODES] = {\n    0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 24};\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/command.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* This class models a sequence of literals and a backward reference copy. */\n\n#ifndef BROTLI_ENC_COMMAND_H_\n#define BROTLI_ENC_COMMAND_H_\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n#include \"fast_log.h\"\n#include \"params.h\"\n#include \"prefix.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nBROTLI_INTERNAL extern const BROTLI_MODEL(\"small\")\nuint32_t kBrotliInsBase[BROTLI_NUM_INS_COPY_CODES];\nBROTLI_INTERNAL extern const BROTLI_MODEL(\"small\")\nuint32_t kBrotliInsExtra[BROTLI_NUM_INS_COPY_CODES];\nBROTLI_INTERNAL extern const BROTLI_MODEL(\"small\")\nuint32_t kBrotliCopyBase[BROTLI_NUM_INS_COPY_CODES];\nBROTLI_INTERNAL extern const BROTLI_MODEL(\"small\")\nuint32_t kBrotliCopyExtra[BROTLI_NUM_INS_COPY_CODES];\n\nstatic BROTLI_INLINE uint16_t GetInsertLengthCode(size_t insertlen) {\n  if (insertlen < 6) {\n    return (uint16_t)insertlen;\n  } else if (insertlen < 130) {\n    uint32_t nbits = Log2FloorNonZero(insertlen - 2) - 1u;\n    return (uint16_t)((nbits << 1) + ((insertlen - 2) >> nbits) + 2);\n  } else if (insertlen < 2114) {\n    return (uint16_t)(Log2FloorNonZero(insertlen - 66) + 10);\n  } else if (insertlen < 6210) {\n    return 21u;\n  } else if (insertlen < 22594) {\n    return 22u;\n  } else {\n    return 23u;\n  }\n}\n\nstatic BROTLI_INLINE uint16_t GetCopyLengthCode(size_t copylen) {\n  if (copylen < 10) {\n    return (uint16_t)(copylen - 2);\n  } else if (copylen < 134) {\n    uint32_t nbits = Log2FloorNonZero(copylen - 6) - 1u;\n    return (uint16_t)((nbits << 1) + ((copylen - 6) >> nbits) + 4);\n  } else if (copylen < 2118) {\n    return (uint16_t)(Log2FloorNonZero(copylen - 70) + 12);\n  } else {\n    return 23u;\n  }\n}\n\nstatic BROTLI_INLINE uint16_t CombineLengthCodes(\n    uint16_t inscode, uint16_t copycode, BROTLI_BOOL use_last_distance) {\n  uint16_t bits64 =\n      (uint16_t)((copycode & 0x7u) | ((inscode & 0x7u) << 3u));\n  if (use_last_distance && inscode < 8u && copycode < 16u) {\n    return (copycode < 8u) ? bits64 : (bits64 | 64u);\n  } else {\n    /* Specification: 5 Encoding of ... (last table) */\n    /* offset = 2 * index, where index is in range [0..8] */\n    uint32_t offset = 2u * ((copycode >> 3u) + 3u * (inscode >> 3u));\n    /* All values in specification are K * 64,\n       where   K = [2, 3, 6, 4, 5, 8, 7, 9, 10],\n           i + 1 = [1, 2, 3, 4, 5, 6, 7, 8,  9],\n       K - i - 1 = [1, 1, 3, 0, 0, 2, 0, 1,  2] = D.\n       All values in D require only 2 bits to encode.\n       Magic constant is shifted 6 bits left, to avoid final multiplication. */\n    offset = (offset << 5u) + 0x40u + ((0x520D40u >> offset) & 0xC0u);\n    return (uint16_t)(offset | bits64);\n  }\n}\n\nstatic BROTLI_INLINE void GetLengthCode(size_t insertlen, size_t copylen,\n                                        BROTLI_BOOL use_last_distance,\n                                        uint16_t* code) {\n  uint16_t inscode = GetInsertLengthCode(insertlen);\n  uint16_t copycode = GetCopyLengthCode(copylen);\n  *code = CombineLengthCodes(inscode, copycode, use_last_distance);\n}\n\nstatic BROTLI_INLINE uint32_t GetInsertBase(uint16_t inscode) {\n  return kBrotliInsBase[inscode];\n}\n\nstatic BROTLI_INLINE uint32_t GetInsertExtra(uint16_t inscode) {\n  return kBrotliInsExtra[inscode];\n}\n\nstatic BROTLI_INLINE uint32_t GetCopyBase(uint16_t copycode) {\n  return kBrotliCopyBase[copycode];\n}\n\nstatic BROTLI_INLINE uint32_t GetCopyExtra(uint16_t copycode) {\n  return kBrotliCopyExtra[copycode];\n}\n\ntypedef struct Command {\n  uint32_t insert_len_;\n  /* Stores copy_len in low 25 bits and copy_code - copy_len in high 7 bit. */\n  uint32_t copy_len_;\n  /* Stores distance extra bits. */\n  uint32_t dist_extra_;\n  uint16_t cmd_prefix_;\n  /* Stores distance code in low 10 bits\n     and number of extra bits in high 6 bits. */\n  uint16_t dist_prefix_;\n} Command;\n\n/* distance_code is e.g. 0 for same-as-last short code, or 16 for offset 1. */\nstatic BROTLI_INLINE void InitCommand(Command* self,\n    const BrotliDistanceParams* dist, size_t insertlen,\n    size_t copylen, int copylen_code_delta, size_t distance_code) {\n  /* Don't rely on signed int representation, use honest casts. */\n  uint32_t delta = (uint8_t)((int8_t)copylen_code_delta);\n  self->insert_len_ = (uint32_t)insertlen;\n  self->copy_len_ = (uint32_t)(copylen | (delta << 25));\n  /* The distance prefix and extra bits are stored in this Command as if\n     npostfix and ndirect were 0, they are only recomputed later after the\n     clustering if needed. */\n  PrefixEncodeCopyDistance(\n      distance_code, dist->num_direct_distance_codes,\n      dist->distance_postfix_bits, &self->dist_prefix_, &self->dist_extra_);\n  GetLengthCode(\n      insertlen, (size_t)((int)copylen + copylen_code_delta),\n      TO_BROTLI_BOOL((self->dist_prefix_ & 0x3FF) == 0), &self->cmd_prefix_);\n}\n\nstatic BROTLI_INLINE void InitInsertCommand(Command* self, size_t insertlen) {\n  self->insert_len_ = (uint32_t)insertlen;\n  self->copy_len_ = 4 << 25;\n  self->dist_extra_ = 0;\n  self->dist_prefix_ = BROTLI_NUM_DISTANCE_SHORT_CODES;\n  GetLengthCode(insertlen, 4, BROTLI_FALSE, &self->cmd_prefix_);\n}\n\nstatic BROTLI_INLINE uint32_t CommandRestoreDistanceCode(\n    const Command* self, const BrotliDistanceParams* dist) {\n  if ((self->dist_prefix_ & 0x3FFu) <\n      BROTLI_NUM_DISTANCE_SHORT_CODES + dist->num_direct_distance_codes) {\n    return self->dist_prefix_ & 0x3FFu;\n  } else {\n    uint32_t dcode = self->dist_prefix_ & 0x3FFu;\n    uint32_t nbits = self->dist_prefix_ >> 10;\n    uint32_t extra = self->dist_extra_;\n    uint32_t postfix_mask = (1U << dist->distance_postfix_bits) - 1U;\n    uint32_t hcode = (dcode - dist->num_direct_distance_codes -\n        BROTLI_NUM_DISTANCE_SHORT_CODES) >>\n        dist->distance_postfix_bits;\n    uint32_t lcode = (dcode - dist->num_direct_distance_codes -\n        BROTLI_NUM_DISTANCE_SHORT_CODES) & postfix_mask;\n    uint32_t offset = ((2U + (hcode & 1U)) << nbits) - 4U;\n    return ((offset + extra) << dist->distance_postfix_bits) + lcode +\n        dist->num_direct_distance_codes + BROTLI_NUM_DISTANCE_SHORT_CODES;\n  }\n}\n\nstatic BROTLI_INLINE uint32_t CommandDistanceContext(const Command* self) {\n  uint32_t r = self->cmd_prefix_ >> 6;\n  uint32_t c = self->cmd_prefix_ & 7;\n  if ((r == 0 || r == 2 || r == 4 || r == 7) && (c <= 2)) {\n    return c;\n  }\n  return 3;\n}\n\nstatic BROTLI_INLINE uint32_t CommandCopyLen(const Command* self) {\n  return self->copy_len_ & 0x1FFFFFF;\n}\n\nstatic BROTLI_INLINE uint32_t CommandCopyLenCode(const Command* self) {\n  uint32_t modifier = self->copy_len_ >> 25;\n  int32_t delta = (int8_t)((uint8_t)(modifier | ((modifier & 0x40) << 1)));\n  return (uint32_t)((int32_t)(self->copy_len_ & 0x1FFFFFF) + delta);\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_COMMAND_H_ */\n"
  },
  {
    "path": "c/enc/compound_dictionary.c",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"compound_dictionary.h\"\n\n#include \"../common/platform.h\"\n#include <brotli/shared_dictionary.h>\n#include \"memory.h\"\n\nstatic PreparedDictionary* CreatePreparedDictionaryWithParams(MemoryManager* m,\n    const uint8_t* source, size_t source_size, uint32_t bucket_bits,\n    uint32_t slot_bits, uint32_t hash_bits, uint16_t bucket_limit) {\n  /* Step 1: create \"bloated\" hasher. */\n  uint32_t num_slots = 1u << slot_bits;\n  uint32_t num_buckets = 1u << bucket_bits;\n  uint32_t hash_shift = 64u - bucket_bits;\n  uint64_t hash_mask = (~((uint64_t)0U)) >> (64 - hash_bits);\n  uint32_t slot_mask = num_slots - 1;\n  size_t alloc_size = (sizeof(uint32_t) << slot_bits) +\n      (sizeof(uint32_t) << slot_bits) +\n      (sizeof(uint16_t) << bucket_bits) +\n      (sizeof(uint32_t) << bucket_bits) +\n      (sizeof(uint32_t) * source_size);\n  uint8_t* flat = NULL;\n  PreparedDictionary* result = NULL;\n  uint16_t* num = NULL;\n  uint32_t* bucket_heads = NULL;\n  uint32_t* next_bucket = NULL;\n  uint32_t* slot_offsets = NULL;\n  uint16_t* heads = NULL;\n  uint32_t* items = NULL;\n  uint8_t** source_ref = NULL;\n  uint32_t i;\n  uint32_t* slot_size = NULL;\n  uint32_t* slot_limit = NULL;\n  uint32_t total_items = 0;\n  if (slot_bits > 16) return NULL;\n  if (slot_bits > bucket_bits) return NULL;\n  if (bucket_bits - slot_bits >= 16) return NULL;\n\n  flat = BROTLI_ALLOC(m, uint8_t, alloc_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(flat)) return NULL;\n\n  slot_size = (uint32_t*)flat;\n  slot_limit = (uint32_t*)(&slot_size[num_slots]);\n  num = (uint16_t*)(&slot_limit[num_slots]);\n  bucket_heads = (uint32_t*)(&num[num_buckets]);\n  next_bucket = (uint32_t*)(&bucket_heads[num_buckets]);\n  memset(num, 0, num_buckets * sizeof(num[0]));\n\n  /* TODO(eustas): apply custom \"store\" order. */\n  for (i = 0; i + 7 < source_size; ++i) {\n    const uint64_t h = (BROTLI_UNALIGNED_LOAD64LE(&source[i]) & hash_mask) *\n        kPreparedDictionaryHashMul64Long;\n    const uint32_t key = (uint32_t)(h >> hash_shift);\n    uint16_t count = num[key];\n    next_bucket[i] = (count == 0) ? ((uint32_t)(-1)) : bucket_heads[key];\n    bucket_heads[key] = i;\n    count++;\n    if (count > bucket_limit) count = bucket_limit;\n    num[key] = count;\n  }\n\n  /* Step 2: find slot limits. */\n  for (i = 0; i < num_slots; ++i) {\n    BROTLI_BOOL overflow = BROTLI_FALSE;\n    slot_limit[i] = bucket_limit;\n    while (BROTLI_TRUE) {\n      uint32_t limit = slot_limit[i];\n      size_t j;\n      uint32_t count = 0;\n      overflow = BROTLI_FALSE;\n      for (j = i; j < num_buckets; j += num_slots) {\n        uint32_t size = num[j];\n        /* Last chain may span behind 64K limit; overflow happens only if\n           we are about to use 0xFFFF+ as item offset. */\n        if (count >= 0xFFFF) {\n          overflow = BROTLI_TRUE;\n          break;\n        }\n        if (size > limit) size = limit;\n        count += size;\n      }\n      if (!overflow) {\n        slot_size[i] = count;\n        total_items += count;\n        break;\n      }\n      slot_limit[i]--;\n    }\n  }\n\n  /* Step 3: transfer data to \"slim\" hasher. */\n  alloc_size = sizeof(PreparedDictionary) + (sizeof(uint32_t) << slot_bits) +\n      (sizeof(uint16_t) << bucket_bits) + (sizeof(uint32_t) * total_items) +\n      sizeof(uint8_t*);\n\n  result = (PreparedDictionary*)BROTLI_ALLOC(m, uint8_t, alloc_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(result)) {\n    BROTLI_FREE(m, flat);\n    return NULL;\n  }\n  slot_offsets = (uint32_t*)(&result[1]);\n  heads = (uint16_t*)(&slot_offsets[num_slots]);\n  items = (uint32_t*)(&heads[num_buckets]);\n  source_ref = (uint8_t**)(&items[total_items]);\n\n  result->magic = kLeanPreparedDictionaryMagic;\n  result->num_items = total_items;\n  result->source_size = (uint32_t)source_size;\n  result->hash_bits = hash_bits;\n  result->bucket_bits = bucket_bits;\n  result->slot_bits = slot_bits;\n  BROTLI_UNALIGNED_STORE_PTR(source_ref, source);\n\n  total_items = 0;\n  for (i = 0; i < num_slots; ++i) {\n    slot_offsets[i] = total_items;\n    total_items += slot_size[i];\n    slot_size[i] = 0;\n  }\n  for (i = 0; i < num_buckets; ++i) {\n    uint32_t slot = i & slot_mask;\n    uint32_t count = num[i];\n    uint32_t pos;\n    size_t j;\n    size_t cursor = slot_size[slot];\n    if (count > slot_limit[slot]) count = slot_limit[slot];\n    if (count == 0) {\n      heads[i] = 0xFFFF;\n      continue;\n    }\n    heads[i] = (uint16_t)cursor;\n    cursor += slot_offsets[slot];\n    slot_size[slot] += count;\n    pos = bucket_heads[i];\n    for (j = 0; j < count; j++) {\n      items[cursor++] = pos;\n      pos = next_bucket[pos];\n    }\n    items[cursor - 1] |= 0x80000000;\n  }\n\n  BROTLI_FREE(m, flat);\n  return result;\n}\n\nPreparedDictionary* CreatePreparedDictionary(MemoryManager* m,\n    const uint8_t* source, size_t source_size) {\n  uint32_t bucket_bits = 17;\n  uint32_t slot_bits = 7;\n  uint32_t hash_bits = 40;\n  uint16_t bucket_limit = 32;\n  size_t volume = 16u << bucket_bits;\n  /* Tune parameters to fit dictionary size. */\n  while (volume < source_size && bucket_bits < 22) {\n    bucket_bits++;\n    slot_bits++;\n    volume <<= 1;\n  }\n  return CreatePreparedDictionaryWithParams(m,\n      source, source_size, bucket_bits, slot_bits, hash_bits, bucket_limit);\n}\n\nvoid DestroyPreparedDictionary(MemoryManager* m,\n    PreparedDictionary* dictionary) {\n  if (!dictionary) return;\n  BROTLI_FREE(m, dictionary);\n}\n\nBROTLI_BOOL AttachPreparedDictionary(\n    CompoundDictionary* compound, const PreparedDictionary* dictionary) {\n  size_t length = 0;\n  size_t index = 0;\n\n  if (compound->num_chunks == SHARED_BROTLI_MAX_COMPOUND_DICTS) {\n    return BROTLI_FALSE;\n  }\n\n  if (!dictionary) return BROTLI_FALSE;\n\n  length = dictionary->source_size;\n  index = compound->num_chunks;\n  compound->total_size += length;\n  compound->chunks[index] = dictionary;\n  compound->chunk_offsets[index + 1] = compound->total_size;\n  {\n    uint32_t* slot_offsets = (uint32_t*)(&dictionary[1]);\n    uint16_t* heads = (uint16_t*)(&slot_offsets[(size_t)1u << dictionary->slot_bits]);\n    uint32_t* items = (uint32_t*)(&heads[(size_t)1u << dictionary->bucket_bits]);\n    const void* tail = (void*)&items[dictionary->num_items];\n    if (dictionary->magic == kPreparedDictionaryMagic) {\n      compound->chunk_source[index] = (const uint8_t*)tail;\n    } else {\n      /* dictionary->magic == kLeanPreparedDictionaryMagic */\n      compound->chunk_source[index] =\n          (const uint8_t*)BROTLI_UNALIGNED_LOAD_PTR((const uint8_t**)tail);\n    }\n  }\n  compound->num_chunks++;\n  return BROTLI_TRUE;\n}\n"
  },
  {
    "path": "c/enc/compound_dictionary.h",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#ifndef BROTLI_ENC_PREPARED_DICTIONARY_H_\n#define BROTLI_ENC_PREPARED_DICTIONARY_H_\n\n#include \"../common/platform.h\"\n#include <brotli/shared_dictionary.h>\n#include \"memory.h\"\n\n/* \"Fat\" prepared dictionary, could be cooked outside of C implementation,\n * e.g. on Java side. LZ77 data is copied inside PreparedDictionary struct. */\nstatic const uint32_t kPreparedDictionaryMagic = 0xDEBCEDE0;\n\nstatic const uint32_t kSharedDictionaryMagic = 0xDEBCEDE1;\n\nstatic const uint32_t kManagedDictionaryMagic = 0xDEBCEDE2;\n\n/* \"Lean\" prepared dictionary. LZ77 data is referenced. It is the responsibility\n * of caller of \"prepare dictionary\" to keep the LZ77 data while prepared\n * dictionary is in use. */\nstatic const uint32_t kLeanPreparedDictionaryMagic = 0xDEBCEDE3;\n\nstatic const uint64_t kPreparedDictionaryHashMul64Long =\n    BROTLI_MAKE_UINT64_T(0x1FE35A7Bu, 0xD3579BD3u);\n\ntypedef struct PreparedDictionary {\n  uint32_t magic;\n  uint32_t num_items;\n  uint32_t source_size;\n  uint32_t hash_bits;\n  uint32_t bucket_bits;\n  uint32_t slot_bits;\n\n  /* --- Dynamic size members --- */\n\n  /* uint32_t slot_offsets[1 << slot_bits]; */\n  /* uint16_t heads[1 << bucket_bits]; */\n  /* uint32_t items[variable]; */\n\n  /* [maybe] uint8_t* source_ref, depending on magic. */\n  /* [maybe] uint8_t source[source_size], depending on magic. */\n} PreparedDictionary;\n\nBROTLI_INTERNAL PreparedDictionary* CreatePreparedDictionary(MemoryManager* m,\n    const uint8_t* source, size_t source_size);\n\nBROTLI_INTERNAL void DestroyPreparedDictionary(MemoryManager* m,\n    PreparedDictionary* dictionary);\n\ntypedef struct CompoundDictionary {\n  /* LZ77 prefix, compound dictionary */\n  size_t num_chunks;\n  size_t total_size;\n  /* Client instances. */\n  const PreparedDictionary* chunks[SHARED_BROTLI_MAX_COMPOUND_DICTS + 1];\n  const uint8_t* chunk_source[SHARED_BROTLI_MAX_COMPOUND_DICTS + 1];\n  size_t chunk_offsets[SHARED_BROTLI_MAX_COMPOUND_DICTS + 1];\n\n  size_t num_prepared_instances_;\n  /* Owned instances. */\n  PreparedDictionary* prepared_instances_[SHARED_BROTLI_MAX_COMPOUND_DICTS + 1];\n} CompoundDictionary;\n\nBROTLI_INTERNAL BROTLI_BOOL AttachPreparedDictionary(\n    CompoundDictionary* compound, const PreparedDictionary* dictionary);\n\n#endif /* BROTLI_ENC_PREPARED_DICTIONARY */\n"
  },
  {
    "path": "c/enc/compress_fragment.c",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Function for fast encoding of an input fragment, independently from the input\n   history. This function uses one-pass processing: when we find a backward\n   match, we immediately emit the corresponding command and literal codes to\n   the bit stream.\n\n   Adapted from the CompressFragment() function in\n   https://github.com/google/snappy/blob/master/snappy.cc */\n\n#include \"compress_fragment.h\"\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n#include \"brotli_bit_stream.h\"\n#include \"entropy_encode.h\"\n#include \"fast_log.h\"\n#include \"find_match_length.h\"\n#include \"hash_base.h\"\n#include \"write_bits.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define MAX_DISTANCE (long)BROTLI_MAX_BACKWARD_LIMIT(18)\n\nstatic BROTLI_INLINE uint32_t Hash(const uint8_t* p, size_t shift) {\n  const uint64_t h = (BROTLI_UNALIGNED_LOAD64LE(p) << 24) * kHashMul32;\n  return (uint32_t)(h >> shift);\n}\n\nstatic BROTLI_INLINE uint32_t HashBytesAtOffset(\n    uint64_t v, int offset, size_t shift) {\n  BROTLI_DCHECK(offset >= 0);\n  BROTLI_DCHECK(offset <= 3);\n  {\n    const uint64_t h = ((v >> (8 * offset)) << 24) * kHashMul32;\n    return (uint32_t)(h >> shift);\n  }\n}\n\nstatic BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_t* p2) {\n  return TO_BROTLI_BOOL(\n      BrotliUnalignedRead32(p1) == BrotliUnalignedRead32(p2) &&\n      p1[4] == p2[4]);\n}\n\n/* Builds a literal prefix code into \"depths\" and \"bits\" based on the statistics\n   of the \"input\" string and stores it into the bit stream.\n   Note that the prefix code here is built from the pre-LZ77 input, therefore\n   we can only approximate the statistics of the actual literal stream.\n   Moreover, for long inputs we build a histogram from a sample of the input\n   and thus have to assign a non-zero depth for each literal.\n   Returns estimated compression ratio millibytes/char for encoding given input\n   with generated code. */\nstatic size_t BuildAndStoreLiteralPrefixCode(BrotliOnePassArena* s,\n                                             const uint8_t* input,\n                                             const size_t input_size,\n                                             uint8_t depths[256],\n                                             uint16_t bits[256],\n                                             size_t* storage_ix,\n                                             uint8_t* storage) {\n  uint32_t* BROTLI_RESTRICT const histogram = s->histogram;\n  size_t histogram_total;\n  size_t i;\n  memset(histogram, 0, sizeof(s->histogram));\n\n  if (input_size < (1 << 15)) {\n    for (i = 0; i < input_size; ++i) {\n      ++histogram[input[i]];\n    }\n    histogram_total = input_size;\n    for (i = 0; i < 256; ++i) {\n      /* We weigh the first 11 samples with weight 3 to account for the\n         balancing effect of the LZ77 phase on the histogram. */\n      const uint32_t adjust = 2 * BROTLI_MIN(uint32_t, histogram[i], 11u);\n      histogram[i] += adjust;\n      histogram_total += adjust;\n    }\n  } else {\n    static const size_t kSampleRate = 29;\n    for (i = 0; i < input_size; i += kSampleRate) {\n      ++histogram[input[i]];\n    }\n    histogram_total = (input_size + kSampleRate - 1) / kSampleRate;\n    for (i = 0; i < 256; ++i) {\n      /* We add 1 to each population count to avoid 0 bit depths (since this is\n         only a sample and we don't know if the symbol appears or not), and we\n         weigh the first 11 samples with weight 3 to account for the balancing\n         effect of the LZ77 phase on the histogram (more frequent symbols are\n         more likely to be in backward references instead as literals). */\n      const uint32_t adjust = 1 + 2 * BROTLI_MIN(uint32_t, histogram[i], 11u);\n      histogram[i] += adjust;\n      histogram_total += adjust;\n    }\n  }\n  BrotliBuildAndStoreHuffmanTreeFast(s->tree, histogram, histogram_total,\n                                     /* max_bits = */ 8,\n                                     depths, bits, storage_ix, storage);\n  {\n    size_t literal_ratio = 0;\n    for (i = 0; i < 256; ++i) {\n      if (histogram[i]) literal_ratio += histogram[i] * depths[i];\n    }\n    /* Estimated encoding ratio, millibytes per symbol. */\n    return (literal_ratio * 125) / histogram_total;\n  }\n}\n\n/* Builds a command and distance prefix code (each 64 symbols) into \"depth\" and\n   \"bits\" based on \"histogram\" and stores it into the bit stream. */\nstatic void BuildAndStoreCommandPrefixCode(BrotliOnePassArena* s,\n    size_t* storage_ix, uint8_t* storage) {\n  const uint32_t* const histogram = s->cmd_histo;\n  uint8_t* const depth = s->cmd_depth;\n  uint16_t* const bits = s->cmd_bits;\n  uint8_t* BROTLI_RESTRICT const tmp_depth = s->tmp_depth;\n  uint16_t* BROTLI_RESTRICT const tmp_bits = s->tmp_bits;\n  /* TODO(eustas): do only once on initialization. */\n  memset(tmp_depth, 0, BROTLI_NUM_COMMAND_SYMBOLS);\n\n  BrotliCreateHuffmanTree(histogram, 64, 15, s->tree, depth);\n  BrotliCreateHuffmanTree(&histogram[64], 64, 14, s->tree, &depth[64]);\n  /* We have to jump through a few hoops here in order to compute\n     the command bits because the symbols are in a different order than in\n     the full alphabet. This looks complicated, but having the symbols\n     in this order in the command bits saves a few branches in the Emit*\n     functions. */\n  memcpy(tmp_depth, depth, 24);\n  memcpy(tmp_depth + 24, depth + 40, 8);\n  memcpy(tmp_depth + 32, depth + 24, 8);\n  memcpy(tmp_depth + 40, depth + 48, 8);\n  memcpy(tmp_depth + 48, depth + 32, 8);\n  memcpy(tmp_depth + 56, depth + 56, 8);\n  BrotliConvertBitDepthsToSymbols(tmp_depth, 64, tmp_bits);\n  memcpy(bits, tmp_bits, 48);\n  memcpy(bits + 24, tmp_bits + 32, 16);\n  memcpy(bits + 32, tmp_bits + 48, 16);\n  memcpy(bits + 40, tmp_bits + 24, 16);\n  memcpy(bits + 48, tmp_bits + 40, 16);\n  memcpy(bits + 56, tmp_bits + 56, 16);\n  BrotliConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]);\n  {\n    /* Create the bit length array for the full command alphabet. */\n    size_t i;\n    memset(tmp_depth, 0, 64);  /* only 64 first values were used */\n    memcpy(tmp_depth, depth, 8);\n    memcpy(tmp_depth + 64, depth + 8, 8);\n    memcpy(tmp_depth + 128, depth + 16, 8);\n    memcpy(tmp_depth + 192, depth + 24, 8);\n    memcpy(tmp_depth + 384, depth + 32, 8);\n    for (i = 0; i < 8; ++i) {\n      tmp_depth[128 + 8 * i] = depth[40 + i];\n      tmp_depth[256 + 8 * i] = depth[48 + i];\n      tmp_depth[448 + 8 * i] = depth[56 + i];\n    }\n    /* TODO(eustas): could/should full-length machinery be avoided? */\n    BrotliStoreHuffmanTree(\n        tmp_depth, BROTLI_NUM_COMMAND_SYMBOLS, s->tree, storage_ix, storage);\n  }\n  BrotliStoreHuffmanTree(&depth[64], 64, s->tree, storage_ix, storage);\n}\n\n/* REQUIRES: insertlen < 6210 */\nstatic BROTLI_INLINE void EmitInsertLen(size_t insertlen,\n                                        const uint8_t depth[128],\n                                        const uint16_t bits[128],\n                                        uint32_t histo[128],\n                                        size_t* storage_ix,\n                                        uint8_t* storage) {\n  if (insertlen < 6) {\n    const size_t code = insertlen + 40;\n    BrotliWriteBits(depth[code], bits[code], storage_ix, storage);\n    ++histo[code];\n  } else if (insertlen < 130) {\n    const size_t tail = insertlen - 2;\n    const uint32_t nbits = Log2FloorNonZero(tail) - 1u;\n    const size_t prefix = tail >> nbits;\n    const size_t inscode = (nbits << 1) + prefix + 42;\n    BrotliWriteBits(depth[inscode], bits[inscode], storage_ix, storage);\n    BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);\n    ++histo[inscode];\n  } else if (insertlen < 2114) {\n    const size_t tail = insertlen - 66;\n    const uint32_t nbits = Log2FloorNonZero(tail);\n    const size_t code = nbits + 50;\n    BrotliWriteBits(depth[code], bits[code], storage_ix, storage);\n    BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);\n    ++histo[code];\n  } else {\n    BrotliWriteBits(depth[61], bits[61], storage_ix, storage);\n    BrotliWriteBits(12, insertlen - 2114, storage_ix, storage);\n    ++histo[61];\n  }\n}\n\nstatic BROTLI_INLINE void EmitLongInsertLen(size_t insertlen,\n                                            const uint8_t depth[128],\n                                            const uint16_t bits[128],\n                                            uint32_t histo[128],\n                                            size_t* storage_ix,\n                                            uint8_t* storage) {\n  if (insertlen < 22594) {\n    BrotliWriteBits(depth[62], bits[62], storage_ix, storage);\n    BrotliWriteBits(14, insertlen - 6210, storage_ix, storage);\n    ++histo[62];\n  } else {\n    BrotliWriteBits(depth[63], bits[63], storage_ix, storage);\n    BrotliWriteBits(24, insertlen - 22594, storage_ix, storage);\n    ++histo[63];\n  }\n}\n\nstatic BROTLI_INLINE void EmitCopyLen(size_t copylen,\n                                      const uint8_t depth[128],\n                                      const uint16_t bits[128],\n                                      uint32_t histo[128],\n                                      size_t* storage_ix,\n                                      uint8_t* storage) {\n  if (copylen < 10) {\n    BrotliWriteBits(\n        depth[copylen + 14], bits[copylen + 14], storage_ix, storage);\n    ++histo[copylen + 14];\n  } else if (copylen < 134) {\n    const size_t tail = copylen - 6;\n    const uint32_t nbits = Log2FloorNonZero(tail) - 1u;\n    const size_t prefix = tail >> nbits;\n    const size_t code = (nbits << 1) + prefix + 20;\n    BrotliWriteBits(depth[code], bits[code], storage_ix, storage);\n    BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);\n    ++histo[code];\n  } else if (copylen < 2118) {\n    const size_t tail = copylen - 70;\n    const uint32_t nbits = Log2FloorNonZero(tail);\n    const size_t code = nbits + 28;\n    BrotliWriteBits(depth[code], bits[code], storage_ix, storage);\n    BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);\n    ++histo[code];\n  } else {\n    BrotliWriteBits(depth[39], bits[39], storage_ix, storage);\n    BrotliWriteBits(24, copylen - 2118, storage_ix, storage);\n    ++histo[39];\n  }\n}\n\nstatic BROTLI_INLINE void EmitCopyLenLastDistance(size_t copylen,\n                                                  const uint8_t depth[128],\n                                                  const uint16_t bits[128],\n                                                  uint32_t histo[128],\n                                                  size_t* storage_ix,\n                                                  uint8_t* storage) {\n  if (copylen < 12) {\n    BrotliWriteBits(depth[copylen - 4], bits[copylen - 4], storage_ix, storage);\n    ++histo[copylen - 4];\n  } else if (copylen < 72) {\n    const size_t tail = copylen - 8;\n    const uint32_t nbits = Log2FloorNonZero(tail) - 1;\n    const size_t prefix = tail >> nbits;\n    const size_t code = (nbits << 1) + prefix + 4;\n    BrotliWriteBits(depth[code], bits[code], storage_ix, storage);\n    BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);\n    ++histo[code];\n  } else if (copylen < 136) {\n    const size_t tail = copylen - 8;\n    const size_t code = (tail >> 5) + 30;\n    BrotliWriteBits(depth[code], bits[code], storage_ix, storage);\n    BrotliWriteBits(5, tail & 31, storage_ix, storage);\n    BrotliWriteBits(depth[64], bits[64], storage_ix, storage);\n    ++histo[code];\n    ++histo[64];\n  } else if (copylen < 2120) {\n    const size_t tail = copylen - 72;\n    const uint32_t nbits = Log2FloorNonZero(tail);\n    const size_t code = nbits + 28;\n    BrotliWriteBits(depth[code], bits[code], storage_ix, storage);\n    BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);\n    BrotliWriteBits(depth[64], bits[64], storage_ix, storage);\n    ++histo[code];\n    ++histo[64];\n  } else {\n    BrotliWriteBits(depth[39], bits[39], storage_ix, storage);\n    BrotliWriteBits(24, copylen - 2120, storage_ix, storage);\n    BrotliWriteBits(depth[64], bits[64], storage_ix, storage);\n    ++histo[39];\n    ++histo[64];\n  }\n}\n\nstatic BROTLI_INLINE void EmitDistance(size_t distance,\n                                       const uint8_t depth[128],\n                                       const uint16_t bits[128],\n                                       uint32_t histo[128],\n                                       size_t* storage_ix, uint8_t* storage) {\n  const size_t d = distance + 3;\n  const uint32_t nbits = Log2FloorNonZero(d) - 1u;\n  const size_t prefix = (d >> nbits) & 1;\n  const size_t offset = (2 + prefix) << nbits;\n  const size_t distcode = 2 * (nbits - 1) + prefix + 80;\n  BrotliWriteBits(depth[distcode], bits[distcode], storage_ix, storage);\n  BrotliWriteBits(nbits, d - offset, storage_ix, storage);\n  ++histo[distcode];\n}\n\nstatic BROTLI_INLINE void EmitLiterals(const uint8_t* input, const size_t len,\n                                       const uint8_t depth[256],\n                                       const uint16_t bits[256],\n                                       size_t* storage_ix, uint8_t* storage) {\n  size_t j;\n  for (j = 0; j < len; j++) {\n    const uint8_t lit = input[j];\n    BrotliWriteBits(depth[lit], bits[lit], storage_ix, storage);\n  }\n}\n\n/* REQUIRES: len <= 1 << 24. */\nstatic void BrotliStoreMetaBlockHeader(\n    size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix,\n    uint8_t* storage) {\n  size_t nibbles = 6;\n  /* ISLAST */\n  BrotliWriteBits(1, 0, storage_ix, storage);\n  if (len <= (1U << 16)) {\n    nibbles = 4;\n  } else if (len <= (1U << 20)) {\n    nibbles = 5;\n  }\n  BrotliWriteBits(2, nibbles - 4, storage_ix, storage);\n  BrotliWriteBits(nibbles * 4, len - 1, storage_ix, storage);\n  /* ISUNCOMPRESSED */\n  BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage);\n}\n\nstatic void UpdateBits(size_t n_bits, uint32_t bits, size_t pos,\n    uint8_t* array) {\n  while (n_bits > 0) {\n    size_t byte_pos = pos >> 3;\n    size_t n_unchanged_bits = pos & 7;\n    size_t n_changed_bits = BROTLI_MIN(size_t, n_bits, 8 - n_unchanged_bits);\n    size_t total_bits = n_unchanged_bits + n_changed_bits;\n    uint32_t mask =\n        (~((1u << total_bits) - 1u)) | ((1u << n_unchanged_bits) - 1u);\n    uint32_t unchanged_bits = array[byte_pos] & mask;\n    uint32_t changed_bits = bits & ((1u << n_changed_bits) - 1u);\n    array[byte_pos] =\n        (uint8_t)((changed_bits << n_unchanged_bits) | unchanged_bits);\n    n_bits -= n_changed_bits;\n    bits >>= n_changed_bits;\n    pos += n_changed_bits;\n  }\n}\n\nstatic void RewindBitPosition(const size_t new_storage_ix,\n                              size_t* storage_ix, uint8_t* storage) {\n  const size_t bitpos = new_storage_ix & 7;\n  const size_t mask = (1u << bitpos) - 1;\n  storage[new_storage_ix >> 3] &= (uint8_t)mask;\n  *storage_ix = new_storage_ix;\n}\n\nstatic BROTLI_BOOL ShouldMergeBlock(BrotliOnePassArena* s,\n    const uint8_t* data, size_t len, const uint8_t* depths) {\n  uint32_t* BROTLI_RESTRICT const histo = s->histogram;\n  static const size_t kSampleRate = 43;\n  size_t i;\n  memset(histo, 0, sizeof(s->histogram));\n  for (i = 0; i < len; i += kSampleRate) {\n    ++histo[data[i]];\n  }\n  {\n    const size_t total = (len + kSampleRate - 1) / kSampleRate;\n    double r = (FastLog2(total) + 0.5) * (double)total + 200;\n    for (i = 0; i < 256; ++i) {\n      r -= (double)histo[i] * (depths[i] + FastLog2(histo[i]));\n    }\n    return TO_BROTLI_BOOL(r >= 0.0);\n  }\n}\n\n/* Acceptable loss for uncompressible speedup is 2% */\n#define MIN_RATIO 980\n\nstatic BROTLI_INLINE BROTLI_BOOL ShouldUseUncompressedMode(\n    const uint8_t* metablock_start, const uint8_t* next_emit,\n    const size_t insertlen, const size_t literal_ratio) {\n  const size_t compressed = (size_t)(next_emit - metablock_start);\n  if (compressed * 50 > insertlen) {\n    return BROTLI_FALSE;\n  } else {\n    return TO_BROTLI_BOOL(literal_ratio > MIN_RATIO);\n  }\n}\n\nstatic void EmitUncompressedMetaBlock(const uint8_t* begin, const uint8_t* end,\n                                      const size_t storage_ix_start,\n                                      size_t* storage_ix, uint8_t* storage) {\n  const size_t len = (size_t)(end - begin);\n  RewindBitPosition(storage_ix_start, storage_ix, storage);\n  BrotliStoreMetaBlockHeader(len, 1, storage_ix, storage);\n  *storage_ix = (*storage_ix + 7u) & ~7u;\n  memcpy(&storage[*storage_ix >> 3], begin, len);\n  *storage_ix += len << 3;\n  storage[*storage_ix >> 3] = 0;\n}\n\nstatic BROTLI_MODEL(\"small\") uint32_t kCmdHistoSeed[128] = {\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 0, 0, 0, 0,\n};\n\nstatic BROTLI_INLINE void BrotliCompressFragmentFastImpl(\n    BrotliOnePassArena* s, const uint8_t* input, size_t input_size,\n    BROTLI_BOOL is_last, int* table, size_t table_bits,\n    size_t* storage_ix, uint8_t* storage) {\n  uint8_t* BROTLI_RESTRICT const cmd_depth = s->cmd_depth;\n  uint16_t* BROTLI_RESTRICT const cmd_bits = s->cmd_bits;\n  uint32_t* BROTLI_RESTRICT const cmd_histo = s->cmd_histo;\n  uint8_t* BROTLI_RESTRICT const lit_depth = s->lit_depth;\n  uint16_t* BROTLI_RESTRICT const lit_bits = s->lit_bits;\n  const uint8_t* ip_end;\n\n  /* \"next_emit\" is a pointer to the first byte that is not covered by a\n     previous copy. Bytes between \"next_emit\" and the start of the next copy or\n     the end of the input will be emitted as literal bytes. */\n  const uint8_t* next_emit = input;\n  /* Save the start of the first block for position and distance computations.\n  */\n  const uint8_t* base_ip = input;\n\n  static const size_t kFirstBlockSize = 3 << 15;\n  static const size_t kMergeBlockSize = 1 << 16;\n\n  const size_t kInputMarginBytes = BROTLI_WINDOW_GAP;\n  const size_t kMinMatchLen = 5;\n\n  const uint8_t* metablock_start = input;\n  size_t block_size = BROTLI_MIN(size_t, input_size, kFirstBlockSize);\n  size_t total_block_size = block_size;\n  /* Save the bit position of the MLEN field of the meta-block header, so that\n     we can update it later if we decide to extend this meta-block. */\n  size_t mlen_storage_ix = *storage_ix + 3;\n\n  size_t literal_ratio;\n\n  const uint8_t* ip;\n  int last_distance;\n\n  const size_t shift = 64u - table_bits;\n\n  BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);\n  /* No block splits, no contexts. */\n  BrotliWriteBits(13, 0, storage_ix, storage);\n\n  literal_ratio = BuildAndStoreLiteralPrefixCode(\n      s, input, block_size, s->lit_depth, s->lit_bits, storage_ix, storage);\n\n  {\n    /* Store the pre-compressed command and distance prefix codes. */\n    size_t i;\n    for (i = 0; i + 7 < s->cmd_code_numbits; i += 8) {\n      BrotliWriteBits(8, s->cmd_code[i >> 3], storage_ix, storage);\n    }\n  }\n  BrotliWriteBits(s->cmd_code_numbits & 7,\n                  s->cmd_code[s->cmd_code_numbits >> 3], storage_ix, storage);\n\n emit_commands:\n  /* Initialize the command and distance histograms. We will gather\n     statistics of command and distance codes during the processing\n     of this block and use it to update the command and distance\n     prefix codes for the next block. */\n  memcpy(s->cmd_histo, kCmdHistoSeed, sizeof(kCmdHistoSeed));\n\n  /* \"ip\" is the input pointer. */\n  ip = input;\n  last_distance = -1;\n  ip_end = input + block_size;\n\n  if (BROTLI_PREDICT_TRUE(block_size >= kInputMarginBytes)) {\n    /* For the last block, we need to keep a 16 bytes margin so that we can be\n       sure that all distances are at most window size - 16.\n       For all other blocks, we only need to keep a margin of 5 bytes so that\n       we don't go over the block size with a copy. */\n    const size_t len_limit = BROTLI_MIN(size_t, block_size - kMinMatchLen,\n                                        input_size - kInputMarginBytes);\n    const uint8_t* ip_limit = input + len_limit;\n\n    uint32_t next_hash;\n    for (next_hash = Hash(++ip, shift); ; ) {\n      /* Step 1: Scan forward in the input looking for a 5-byte-long match.\n         If we get close to exhausting the input then goto emit_remainder.\n\n         Heuristic match skipping: If 32 bytes are scanned with no matches\n         found, start looking only at every other byte. If 32 more bytes are\n         scanned, look at every third byte, etc.. When a match is found,\n         immediately go back to looking at every byte. This is a small loss\n         (~5% performance, ~0.1% density) for compressible data due to more\n         bookkeeping, but for non-compressible data (such as JPEG) it's a huge\n         win since the compressor quickly \"realizes\" the data is incompressible\n         and doesn't bother looking for matches everywhere.\n\n         The \"skip\" variable keeps track of how many bytes there are since the\n         last match; dividing it by 32 (i.e. right-shifting by five) gives the\n         number of bytes to move ahead for each iteration. */\n      uint32_t skip = 32;\n\n      const uint8_t* next_ip = ip;\n      const uint8_t* candidate;\n      BROTLI_DCHECK(next_emit < ip);\ntrawl:\n      do {\n        uint32_t hash = next_hash;\n        uint32_t bytes_between_hash_lookups = skip++ >> 5;\n        BROTLI_DCHECK(hash == Hash(next_ip, shift));\n        ip = next_ip;\n        next_ip = ip + bytes_between_hash_lookups;\n        if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) {\n          goto emit_remainder;\n        }\n        next_hash = Hash(next_ip, shift);\n        candidate = ip - last_distance;\n        if (IsMatch(ip, candidate)) {\n          if (BROTLI_PREDICT_TRUE(candidate < ip)) {\n            table[hash] = (int)(ip - base_ip);\n            break;\n          }\n        }\n        candidate = base_ip + table[hash];\n        BROTLI_DCHECK(candidate >= base_ip);\n        BROTLI_DCHECK(candidate < ip);\n\n        table[hash] = (int)(ip - base_ip);\n      } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate)));\n\n      /* Check copy distance. If candidate is not feasible, continue search.\n         Checking is done outside of hot loop to reduce overhead. */\n      if (ip - candidate > MAX_DISTANCE) goto trawl;\n\n      /* Step 2: Emit the found match together with the literal bytes from\n         \"next_emit\" to the bit stream, and then see if we can find a next match\n         immediately afterwards. Repeat until we find no match for the input\n         without emitting some literal bytes. */\n\n      {\n        /* We have a 5-byte match at ip, and we need to emit bytes in\n           [next_emit, ip). */\n        const uint8_t* base = ip;\n        size_t matched = 5 + FindMatchLengthWithLimit(\n            candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5);\n        int distance = (int)(base - candidate);  /* > 0 */\n        size_t insert = (size_t)(base - next_emit);\n        ip += matched;\n        BROTLI_LOG((\"[CompressFragment] pos = %d insert = %lu copy = %d\\n\",\n                    (int)(next_emit - base_ip), (unsigned long)insert, 2));\n        BROTLI_DCHECK(0 == memcmp(base, candidate, matched));\n        if (BROTLI_PREDICT_TRUE(insert < 6210)) {\n          EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,\n                        storage_ix, storage);\n        } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert,\n                                             literal_ratio)) {\n          EmitUncompressedMetaBlock(metablock_start, base, mlen_storage_ix - 3,\n                                    storage_ix, storage);\n          input_size -= (size_t)(base - input);\n          input = base;\n          next_emit = input;\n          goto next_block;\n        } else {\n          EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,\n                            storage_ix, storage);\n        }\n        EmitLiterals(next_emit, insert, lit_depth, lit_bits,\n                     storage_ix, storage);\n        if (distance == last_distance) {\n          BrotliWriteBits(cmd_depth[64], cmd_bits[64], storage_ix, storage);\n          ++cmd_histo[64];\n        } else {\n          EmitDistance((size_t)distance, cmd_depth, cmd_bits,\n                       cmd_histo, storage_ix, storage);\n          last_distance = distance;\n        }\n        EmitCopyLenLastDistance(matched, cmd_depth, cmd_bits, cmd_histo,\n                                storage_ix, storage);\n        BROTLI_LOG((\"[CompressFragment] pos = %d distance = %d\\n\"\n                    \"[CompressFragment] pos = %d insert = %d copy = %d\\n\"\n                    \"[CompressFragment] pos = %d distance = %d\\n\",\n                    (int)(base - base_ip), (int)distance,\n                    (int)(base - base_ip) + 2, 0, (int)matched - 2,\n                    (int)(base - base_ip) + 2, (int)distance));\n\n        next_emit = ip;\n        if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {\n          goto emit_remainder;\n        }\n        /* We could immediately start working at ip now, but to improve\n           compression we first update \"table\" with the hashes of some positions\n           within the last copy. */\n        {\n          uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);\n          uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift);\n          uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift);\n          table[prev_hash] = (int)(ip - base_ip - 3);\n          prev_hash = HashBytesAtOffset(input_bytes, 1, shift);\n          table[prev_hash] = (int)(ip - base_ip - 2);\n          prev_hash = HashBytesAtOffset(input_bytes, 2, shift);\n          table[prev_hash] = (int)(ip - base_ip - 1);\n\n          candidate = base_ip + table[cur_hash];\n          table[cur_hash] = (int)(ip - base_ip);\n        }\n      }\n\n      while (IsMatch(ip, candidate)) {\n        /* We have a 5-byte match at ip, and no need to emit any literal bytes\n           prior to ip. */\n        const uint8_t* base = ip;\n        size_t matched = 5 + FindMatchLengthWithLimit(\n            candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5);\n        if (ip - candidate > MAX_DISTANCE) break;\n        ip += matched;\n        last_distance = (int)(base - candidate);  /* > 0 */\n        BROTLI_DCHECK(0 == memcmp(base, candidate, matched));\n        EmitCopyLen(matched, cmd_depth, cmd_bits, cmd_histo,\n                    storage_ix, storage);\n        EmitDistance((size_t)last_distance, cmd_depth, cmd_bits,\n                     cmd_histo, storage_ix, storage);\n        BROTLI_LOG((\"[CompressFragment] pos = %d insert = %d copy = %d\\n\"\n                    \"[CompressFragment] pos = %d distance = %d\\n\",\n                    (int)(base - base_ip), 0, (int)matched,\n                    (int)(base - base_ip), (int)last_distance));\n\n        next_emit = ip;\n        if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {\n          goto emit_remainder;\n        }\n        /* We could immediately start working at ip now, but to improve\n           compression we first update \"table\" with the hashes of some positions\n           within the last copy. */\n        {\n          uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);\n          uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift);\n          uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift);\n          table[prev_hash] = (int)(ip - base_ip - 3);\n          prev_hash = HashBytesAtOffset(input_bytes, 1, shift);\n          table[prev_hash] = (int)(ip - base_ip - 2);\n          prev_hash = HashBytesAtOffset(input_bytes, 2, shift);\n          table[prev_hash] = (int)(ip - base_ip - 1);\n\n          candidate = base_ip + table[cur_hash];\n          table[cur_hash] = (int)(ip - base_ip);\n        }\n      }\n\n      next_hash = Hash(++ip, shift);\n    }\n  }\n\n emit_remainder:\n  BROTLI_DCHECK(next_emit <= ip_end);\n  input += block_size;\n  input_size -= block_size;\n  block_size = BROTLI_MIN(size_t, input_size, kMergeBlockSize);\n\n  /* Decide if we want to continue this meta-block instead of emitting the\n     last insert-only command. */\n  if (input_size > 0 &&\n      total_block_size + block_size <= (1 << 20) &&\n      ShouldMergeBlock(s, input, block_size, lit_depth)) {\n    BROTLI_DCHECK(total_block_size > (1 << 16));\n    /* Update the size of the current meta-block and continue emitting commands.\n       We can do this because the current size and the new size both have 5\n       nibbles. */\n    total_block_size += block_size;\n    UpdateBits(20, (uint32_t)(total_block_size - 1), mlen_storage_ix, storage);\n    goto emit_commands;\n  }\n\n  /* Emit the remaining bytes as literals. */\n  if (next_emit < ip_end) {\n    const size_t insert = (size_t)(ip_end - next_emit);\n    BROTLI_LOG((\"[CompressFragment] pos = %d insert = %lu copy = %d\\n\",\n                (int)(next_emit - base_ip), (unsigned long)insert, 2));\n    if (BROTLI_PREDICT_TRUE(insert < 6210)) {\n      EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,\n                    storage_ix, storage);\n      EmitLiterals(next_emit, insert, lit_depth, lit_bits, storage_ix, storage);\n    } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert,\n                                         literal_ratio)) {\n      EmitUncompressedMetaBlock(metablock_start, ip_end, mlen_storage_ix - 3,\n                                storage_ix, storage);\n    } else {\n      EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,\n                        storage_ix, storage);\n      EmitLiterals(next_emit, insert, lit_depth, lit_bits,\n                   storage_ix, storage);\n    }\n  }\n  next_emit = ip_end;\n\nnext_block:\n  /* If we have more data, write a new meta-block header and prefix codes and\n     then continue emitting commands. */\n  if (input_size > 0) {\n    metablock_start = input;\n    block_size = BROTLI_MIN(size_t, input_size, kFirstBlockSize);\n    total_block_size = block_size;\n    /* Save the bit position of the MLEN field of the meta-block header, so that\n       we can update it later if we decide to extend this meta-block. */\n    mlen_storage_ix = *storage_ix + 3;\n    BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);\n    /* No block splits, no contexts. */\n    BrotliWriteBits(13, 0, storage_ix, storage);\n    literal_ratio = BuildAndStoreLiteralPrefixCode(\n        s, input, block_size, lit_depth, lit_bits, storage_ix, storage);\n    BuildAndStoreCommandPrefixCode(s, storage_ix, storage);\n    goto emit_commands;\n  }\n\n  if (!is_last) {\n    /* If this is not the last block, update the command and distance prefix\n       codes for the next block and store the compressed forms. */\n    s->cmd_code[0] = 0;\n    s->cmd_code_numbits = 0;\n    BuildAndStoreCommandPrefixCode(s, &s->cmd_code_numbits, s->cmd_code);\n  }\n}\n\n#define FOR_TABLE_BITS_(X) X(9) X(11) X(13) X(15)\n\n#define BAKE_METHOD_PARAM_(B) \\\nstatic BROTLI_NOINLINE void BrotliCompressFragmentFastImpl ## B(             \\\n    BrotliOnePassArena* s, const uint8_t* input, size_t input_size,          \\\n    BROTLI_BOOL is_last, int* table, size_t* storage_ix, uint8_t* storage) { \\\n  BrotliCompressFragmentFastImpl(s, input, input_size, is_last, table, B,    \\\n      storage_ix, storage);                                                  \\\n}\nFOR_TABLE_BITS_(BAKE_METHOD_PARAM_)\n#undef BAKE_METHOD_PARAM_\n\nvoid BrotliCompressFragmentFast(\n    BrotliOnePassArena* s, const uint8_t* input, size_t input_size,\n    BROTLI_BOOL is_last, int* table, size_t table_size,\n    size_t* storage_ix, uint8_t* storage) {\n  const size_t initial_storage_ix = *storage_ix;\n  const size_t table_bits = Log2FloorNonZero(table_size);\n\n  if (input_size == 0) {\n    BROTLI_DCHECK(is_last);\n    BrotliWriteBits(1, 1, storage_ix, storage);  /* islast */\n    BrotliWriteBits(1, 1, storage_ix, storage);  /* isempty */\n    *storage_ix = (*storage_ix + 7u) & ~7u;\n    return;\n  }\n\n  switch (table_bits) {\n#define CASE_(B)                                                     \\\n    case B:                                                          \\\n      BrotliCompressFragmentFastImpl ## B(                           \\\n          s, input, input_size, is_last, table, storage_ix, storage);\\\n      break;\n    FOR_TABLE_BITS_(CASE_)\n#undef CASE_\n    default: BROTLI_DCHECK(0); break;\n  }\n\n  /* If output is larger than single uncompressed block, rewrite it. */\n  if (*storage_ix - initial_storage_ix > 31 + (input_size << 3)) {\n    EmitUncompressedMetaBlock(input, input + input_size, initial_storage_ix,\n                              storage_ix, storage);\n  }\n\n  if (is_last) {\n    BrotliWriteBits(1, 1, storage_ix, storage);  /* islast */\n    BrotliWriteBits(1, 1, storage_ix, storage);  /* isempty */\n    *storage_ix = (*storage_ix + 7u) & ~7u;\n  }\n}\n\n#undef FOR_TABLE_BITS_\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/compress_fragment.h",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Function for fast encoding of an input fragment, independently from the input\n   history. This function uses one-pass processing: when we find a backward\n   match, we immediately emit the corresponding command and literal codes to\n   the bit stream. */\n\n#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_H_\n#define BROTLI_ENC_COMPRESS_FRAGMENT_H_\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n#include \"entropy_encode.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\ntypedef struct BrotliOnePassArena {\n  uint8_t lit_depth[256];\n  uint16_t lit_bits[256];\n\n  /* Command and distance prefix codes (each 64 symbols, stored back-to-back)\n     used for the next block. The command prefix code is over a smaller alphabet\n     with the following 64 symbols:\n        0 - 15: insert length code 0, copy length code 0 - 15, same distance\n       16 - 39: insert length code 0, copy length code 0 - 23\n       40 - 63: insert length code 0 - 23, copy length code 0\n     Note that symbols 16 and 40 represent the same code in the full alphabet,\n     but we do not use either of them. */\n  uint8_t cmd_depth[128];\n  uint16_t cmd_bits[128];\n  uint32_t cmd_histo[128];\n\n  /* The compressed form of the command and distance prefix codes for the next\n     block. */\n  uint8_t cmd_code[512];\n  size_t cmd_code_numbits;\n\n  HuffmanTree tree[2 * BROTLI_NUM_LITERAL_SYMBOLS + 1];\n  uint32_t histogram[256];\n  uint8_t tmp_depth[BROTLI_NUM_COMMAND_SYMBOLS];\n  uint16_t tmp_bits[64];\n} BrotliOnePassArena;\n\n/* Compresses \"input\" string to the \"*storage\" buffer as one or more complete\n   meta-blocks, and updates the \"*storage_ix\" bit position.\n\n   If \"is_last\" is 1, emits an additional empty last meta-block.\n\n   \"cmd_depth\" and \"cmd_bits\" contain the command and distance prefix codes\n   (see comment in encode.h) used for the encoding of this input fragment.\n   If \"is_last\" is 0, they are updated to reflect the statistics\n   of this input fragment, to be used for the encoding of the next fragment.\n\n   \"*cmd_code_numbits\" is the number of bits of the compressed representation\n   of the command and distance prefix codes, and \"cmd_code\" is an array of\n   at least \"(*cmd_code_numbits + 7) >> 3\" size that contains the compressed\n   command and distance prefix codes. If \"is_last\" is 0, these are also\n   updated to represent the updated \"cmd_depth\" and \"cmd_bits\".\n\n   REQUIRES: \"input_size\" is greater than zero, or \"is_last\" is 1.\n   REQUIRES: \"input_size\" is less or equal to maximal metablock size (1 << 24).\n   REQUIRES: All elements in \"table[0..table_size-1]\" are initialized to zero.\n   REQUIRES: \"table_size\" is an odd (9, 11, 13, 15) power of two\n   OUTPUT: maximal copy distance <= |input_size|\n   OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18) */\nBROTLI_INTERNAL void BrotliCompressFragmentFast(BrotliOnePassArena* s,\n                                                const uint8_t* input,\n                                                size_t input_size,\n                                                BROTLI_BOOL is_last,\n                                                int* table, size_t table_size,\n                                                size_t* storage_ix,\n                                                uint8_t* storage);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_COMPRESS_FRAGMENT_H_ */\n"
  },
  {
    "path": "c/enc/compress_fragment_two_pass.c",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Function for fast encoding of an input fragment, independently from the input\n   history. This function uses two-pass processing: in the first pass we save\n   the found backward matches and literal bytes into a buffer, and in the\n   second pass we emit them into the bit stream using prefix codes built based\n   on the actual command and literal byte histograms. */\n\n#include \"compress_fragment_two_pass.h\"\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n#include \"bit_cost.h\"\n#include \"brotli_bit_stream.h\"\n#include \"entropy_encode.h\"\n#include \"fast_log.h\"\n#include \"find_match_length.h\"\n#include \"hash_base.h\"\n#include \"write_bits.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define MAX_DISTANCE (long)BROTLI_MAX_BACKWARD_LIMIT(18)\n\nstatic BROTLI_INLINE uint32_t Hash(const uint8_t* p,\n    size_t shift, size_t length) {\n  const uint64_t h =\n      (BROTLI_UNALIGNED_LOAD64LE(p) << ((8 - length) * 8)) * kHashMul32;\n  return (uint32_t)(h >> shift);\n}\n\nstatic BROTLI_INLINE uint32_t HashBytesAtOffset(uint64_t v, size_t offset,\n    size_t shift, size_t length) {\n  BROTLI_DCHECK(offset <= 8 - length);\n  {\n    const uint64_t h = ((v >> (8 * offset)) << ((8 - length) * 8)) * kHashMul32;\n    return (uint32_t)(h >> shift);\n  }\n}\n\nstatic BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_t* p2,\n    size_t length) {\n  if (BrotliUnalignedRead32(p1) == BrotliUnalignedRead32(p2)) {\n    if (length == 4) return BROTLI_TRUE;\n    return TO_BROTLI_BOOL(p1[4] == p2[4] && p1[5] == p2[5]);\n  }\n  return BROTLI_FALSE;\n}\n\n/* Builds a command and distance prefix code (each 64 symbols) into \"depth\" and\n   \"bits\" based on \"histogram\" and stores it into the bit stream. */\nstatic void BuildAndStoreCommandPrefixCode(BrotliTwoPassArena* s,\n                                           size_t* storage_ix,\n                                           uint8_t* storage) {\n  /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */\n  /* TODO(eustas): initialize once. */\n  memset(s->tmp_depth, 0, sizeof(s->tmp_depth));\n  BrotliCreateHuffmanTree(s->cmd_histo, 64, 15, s->tmp_tree, s->cmd_depth);\n  BrotliCreateHuffmanTree(&s->cmd_histo[64], 64, 14, s->tmp_tree,\n                          &s->cmd_depth[64]);\n  /* We have to jump through a few hoops here in order to compute\n     the command bits because the symbols are in a different order than in\n     the full alphabet. This looks complicated, but having the symbols\n     in this order in the command bits saves a few branches in the Emit*\n     functions. */\n  memcpy(s->tmp_depth, s->cmd_depth + 24, 24);\n  memcpy(s->tmp_depth + 24, s->cmd_depth, 8);\n  memcpy(s->tmp_depth + 32, s->cmd_depth + 48, 8);\n  memcpy(s->tmp_depth + 40, s->cmd_depth + 8, 8);\n  memcpy(s->tmp_depth + 48, s->cmd_depth + 56, 8);\n  memcpy(s->tmp_depth + 56, s->cmd_depth + 16, 8);\n  BrotliConvertBitDepthsToSymbols(s->tmp_depth, 64, s->tmp_bits);\n  memcpy(s->cmd_bits, s->tmp_bits + 24, 16);\n  memcpy(s->cmd_bits + 8, s->tmp_bits + 40, 16);\n  memcpy(s->cmd_bits + 16, s->tmp_bits + 56, 16);\n  memcpy(s->cmd_bits + 24, s->tmp_bits, 48);\n  memcpy(s->cmd_bits + 48, s->tmp_bits + 32, 16);\n  memcpy(s->cmd_bits + 56, s->tmp_bits + 48, 16);\n  BrotliConvertBitDepthsToSymbols(&s->cmd_depth[64], 64, &s->cmd_bits[64]);\n  {\n    /* Create the bit length array for the full command alphabet. */\n    size_t i;\n    memset(s->tmp_depth, 0, 64); /* only 64 first values were used */\n    memcpy(s->tmp_depth, s->cmd_depth + 24, 8);\n    memcpy(s->tmp_depth + 64, s->cmd_depth + 32, 8);\n    memcpy(s->tmp_depth + 128, s->cmd_depth + 40, 8);\n    memcpy(s->tmp_depth + 192, s->cmd_depth + 48, 8);\n    memcpy(s->tmp_depth + 384, s->cmd_depth + 56, 8);\n    for (i = 0; i < 8; ++i) {\n      s->tmp_depth[128 + 8 * i] = s->cmd_depth[i];\n      s->tmp_depth[256 + 8 * i] = s->cmd_depth[8 + i];\n      s->tmp_depth[448 + 8 * i] = s->cmd_depth[16 + i];\n    }\n    BrotliStoreHuffmanTree(s->tmp_depth, BROTLI_NUM_COMMAND_SYMBOLS,\n                           s->tmp_tree, storage_ix, storage);\n  }\n  BrotliStoreHuffmanTree(&s->cmd_depth[64], 64, s->tmp_tree, storage_ix,\n                         storage);\n}\n\nstatic BROTLI_INLINE void EmitInsertLen(\n    uint32_t insertlen, uint32_t** commands) {\n  if (insertlen < 6) {\n    **commands = insertlen;\n  } else if (insertlen < 130) {\n    const uint32_t tail = insertlen - 2;\n    const uint32_t nbits = Log2FloorNonZero(tail) - 1u;\n    const uint32_t prefix = tail >> nbits;\n    const uint32_t inscode = (nbits << 1) + prefix + 2;\n    const uint32_t extra = tail - (prefix << nbits);\n    **commands = inscode | (extra << 8);\n  } else if (insertlen < 2114) {\n    const uint32_t tail = insertlen - 66;\n    const uint32_t nbits = Log2FloorNonZero(tail);\n    const uint32_t code = nbits + 10;\n    const uint32_t extra = tail - (1u << nbits);\n    **commands = code | (extra << 8);\n  } else if (insertlen < 6210) {\n    const uint32_t extra = insertlen - 2114;\n    **commands = 21 | (extra << 8);\n  } else if (insertlen < 22594) {\n    const uint32_t extra = insertlen - 6210;\n    **commands = 22 | (extra << 8);\n  } else {\n    const uint32_t extra = insertlen - 22594;\n    **commands = 23 | (extra << 8);\n  }\n  ++(*commands);\n}\n\nstatic BROTLI_INLINE void EmitCopyLen(size_t copylen, uint32_t** commands) {\n  if (copylen < 10) {\n    **commands = (uint32_t)(copylen + 38);\n  } else if (copylen < 134) {\n    const size_t tail = copylen - 6;\n    const size_t nbits = Log2FloorNonZero(tail) - 1;\n    const size_t prefix = tail >> nbits;\n    const size_t code = (nbits << 1) + prefix + 44;\n    const size_t extra = tail - (prefix << nbits);\n    **commands = (uint32_t)(code | (extra << 8));\n  } else if (copylen < 2118) {\n    const size_t tail = copylen - 70;\n    const size_t nbits = Log2FloorNonZero(tail);\n    const size_t code = nbits + 52;\n    const size_t extra = tail - ((size_t)1 << nbits);\n    **commands = (uint32_t)(code | (extra << 8));\n  } else {\n    const size_t extra = copylen - 2118;\n    **commands = (uint32_t)(63 | (extra << 8));\n  }\n  ++(*commands);\n}\n\nstatic BROTLI_INLINE void EmitCopyLenLastDistance(\n    size_t copylen, uint32_t** commands) {\n  if (copylen < 12) {\n    **commands = (uint32_t)(copylen + 20);\n    ++(*commands);\n  } else if (copylen < 72) {\n    const size_t tail = copylen - 8;\n    const size_t nbits = Log2FloorNonZero(tail) - 1;\n    const size_t prefix = tail >> nbits;\n    const size_t code = (nbits << 1) + prefix + 28;\n    const size_t extra = tail - (prefix << nbits);\n    **commands = (uint32_t)(code | (extra << 8));\n    ++(*commands);\n  } else if (copylen < 136) {\n    const size_t tail = copylen - 8;\n    const size_t code = (tail >> 5) + 54;\n    const size_t extra = tail & 31;\n    **commands = (uint32_t)(code | (extra << 8));\n    ++(*commands);\n    **commands = 64;\n    ++(*commands);\n  } else if (copylen < 2120) {\n    const size_t tail = copylen - 72;\n    const size_t nbits = Log2FloorNonZero(tail);\n    const size_t code = nbits + 52;\n    const size_t extra = tail - ((size_t)1 << nbits);\n    **commands = (uint32_t)(code | (extra << 8));\n    ++(*commands);\n    **commands = 64;\n    ++(*commands);\n  } else {\n    const size_t extra = copylen - 2120;\n    **commands = (uint32_t)(63 | (extra << 8));\n    ++(*commands);\n    **commands = 64;\n    ++(*commands);\n  }\n}\n\nstatic BROTLI_INLINE void EmitDistance(uint32_t distance, uint32_t** commands) {\n  uint32_t d = distance + 3;\n  uint32_t nbits = Log2FloorNonZero(d) - 1;\n  const uint32_t prefix = (d >> nbits) & 1;\n  const uint32_t offset = (2 + prefix) << nbits;\n  const uint32_t distcode = 2 * (nbits - 1) + prefix + 80;\n  uint32_t extra = d - offset;\n  **commands = distcode | (extra << 8);\n  ++(*commands);\n}\n\n/* REQUIRES: len <= 1 << 24. */\nstatic void BrotliStoreMetaBlockHeader(\n    size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix,\n    uint8_t* storage) {\n  size_t nibbles = 6;\n  /* ISLAST */\n  BrotliWriteBits(1, 0, storage_ix, storage);\n  if (len <= (1U << 16)) {\n    nibbles = 4;\n  } else if (len <= (1U << 20)) {\n    nibbles = 5;\n  }\n  BrotliWriteBits(2, nibbles - 4, storage_ix, storage);\n  BrotliWriteBits(nibbles * 4, len - 1, storage_ix, storage);\n  /* ISUNCOMPRESSED */\n  BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage);\n}\n\nstatic BROTLI_INLINE void CreateCommands(const uint8_t* input,\n    size_t block_size, size_t input_size, const uint8_t* base_ip, int* table,\n    size_t table_bits, size_t min_match,\n    uint8_t** literals, uint32_t** commands) {\n  /* \"ip\" is the input pointer. */\n  const uint8_t* ip = input;\n  const size_t shift = 64u - table_bits;\n  const uint8_t* ip_end = input + block_size;\n  /* \"next_emit\" is a pointer to the first byte that is not covered by a\n     previous copy. Bytes between \"next_emit\" and the start of the next copy or\n     the end of the input will be emitted as literal bytes. */\n  const uint8_t* next_emit = input;\n\n  int last_distance = -1;\n  const size_t kInputMarginBytes = BROTLI_WINDOW_GAP;\n\n  if (BROTLI_PREDICT_TRUE(block_size >= kInputMarginBytes)) {\n    /* For the last block, we need to keep a 16 bytes margin so that we can be\n       sure that all distances are at most window size - 16.\n       For all other blocks, we only need to keep a margin of 5 bytes so that\n       we don't go over the block size with a copy. */\n    const size_t len_limit = BROTLI_MIN(size_t, block_size - min_match,\n                                        input_size - kInputMarginBytes);\n    const uint8_t* ip_limit = input + len_limit;\n\n    uint32_t next_hash;\n    for (next_hash = Hash(++ip, shift, min_match); ; ) {\n      /* Step 1: Scan forward in the input looking for a 6-byte-long match.\n         If we get close to exhausting the input then goto emit_remainder.\n\n         Heuristic match skipping: If 32 bytes are scanned with no matches\n         found, start looking only at every other byte. If 32 more bytes are\n         scanned, look at every third byte, etc.. When a match is found,\n         immediately go back to looking at every byte. This is a small loss\n         (~5% performance, ~0.1% density) for compressible data due to more\n         bookkeeping, but for non-compressible data (such as JPEG) it's a huge\n         win since the compressor quickly \"realizes\" the data is incompressible\n         and doesn't bother looking for matches everywhere.\n\n         The \"skip\" variable keeps track of how many bytes there are since the\n         last match; dividing it by 32 (ie. right-shifting by five) gives the\n         number of bytes to move ahead for each iteration. */\n      uint32_t skip = 32;\n\n      const uint8_t* next_ip = ip;\n      const uint8_t* candidate;\n\n      BROTLI_DCHECK(next_emit < ip);\ntrawl:\n      do {\n        uint32_t hash = next_hash;\n        uint32_t bytes_between_hash_lookups = skip++ >> 5;\n        ip = next_ip;\n        BROTLI_DCHECK(hash == Hash(ip, shift, min_match));\n        next_ip = ip + bytes_between_hash_lookups;\n        if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) {\n          goto emit_remainder;\n        }\n        next_hash = Hash(next_ip, shift, min_match);\n        candidate = ip - last_distance;\n        if (IsMatch(ip, candidate, min_match)) {\n          if (BROTLI_PREDICT_TRUE(candidate < ip)) {\n            table[hash] = (int)(ip - base_ip);\n            break;\n          }\n        }\n        candidate = base_ip + table[hash];\n        BROTLI_DCHECK(candidate >= base_ip);\n        BROTLI_DCHECK(candidate < ip);\n\n        table[hash] = (int)(ip - base_ip);\n      } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate, min_match)));\n\n      /* Check copy distance. If candidate is not feasible, continue search.\n         Checking is done outside of hot loop to reduce overhead. */\n      if (ip - candidate > MAX_DISTANCE) goto trawl;\n\n      /* Step 2: Emit the found match together with the literal bytes from\n         \"next_emit\", and then see if we can find a next match immediately\n         afterwards. Repeat until we find no match for the input\n         without emitting some literal bytes. */\n\n      {\n        /* We have a 6-byte match at ip, and we need to emit bytes in\n           [next_emit, ip). */\n        const uint8_t* base = ip;\n        size_t matched = min_match + FindMatchLengthWithLimit(\n            candidate + min_match, ip + min_match,\n            (size_t)(ip_end - ip) - min_match);\n        int distance = (int)(base - candidate);  /* > 0 */\n        int insert = (int)(base - next_emit);\n        ip += matched;\n        BROTLI_DCHECK(0 == memcmp(base, candidate, matched));\n        EmitInsertLen((uint32_t)insert, commands);\n        BROTLI_LOG((\"[CompressFragment] pos = %d insert = %d copy = %d\\n\",\n                    (int)(next_emit - base_ip), insert, 2));\n        memcpy(*literals, next_emit, (size_t)insert);\n        *literals += insert;\n        if (distance == last_distance) {\n          **commands = 64;\n          ++(*commands);\n        } else {\n          EmitDistance((uint32_t)distance, commands);\n          last_distance = distance;\n        }\n        EmitCopyLenLastDistance(matched, commands);\n        BROTLI_LOG((\"[CompressFragment] pos = %d distance = %d\\n\"\n                    \"[CompressFragment] pos = %d insert = %d copy = %d\\n\"\n                    \"[CompressFragment] pos = %d distance = %d\\n\",\n                    (int)(base - base_ip), (int)distance,\n                    (int)(base - base_ip) + 2, 0, (int)matched - 2,\n                    (int)(base - base_ip) + 2, (int)distance));\n\n        next_emit = ip;\n        if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {\n          goto emit_remainder;\n        }\n        {\n          /* We could immediately start working at ip now, but to improve\n             compression we first update \"table\" with the hashes of some\n             positions within the last copy. */\n          uint64_t input_bytes;\n          uint32_t cur_hash;\n          uint32_t prev_hash;\n          if (min_match == 4) {\n            input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);\n            cur_hash = HashBytesAtOffset(input_bytes, 3, shift, min_match);\n            prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 3);\n            prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 2);\n            prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 1);\n          } else {\n            input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 5);\n            prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 5);\n            prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 4);\n            prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 3);\n            input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 2);\n            cur_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);\n            prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 2);\n            prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 1);\n          }\n\n          candidate = base_ip + table[cur_hash];\n          table[cur_hash] = (int)(ip - base_ip);\n        }\n      }\n\n      while (ip - candidate <= MAX_DISTANCE &&\n          IsMatch(ip, candidate, min_match)) {\n        /* We have a 6-byte match at ip, and no need to emit any\n           literal bytes prior to ip. */\n        const uint8_t* base = ip;\n        size_t matched = min_match + FindMatchLengthWithLimit(\n            candidate + min_match, ip + min_match,\n            (size_t)(ip_end - ip) - min_match);\n        ip += matched;\n        last_distance = (int)(base - candidate);  /* > 0 */\n        BROTLI_DCHECK(0 == memcmp(base, candidate, matched));\n        EmitCopyLen(matched, commands);\n        EmitDistance((uint32_t)last_distance, commands);\n        BROTLI_LOG((\"[CompressFragment] pos = %d insert = %d copy = %d\\n\"\n                    \"[CompressFragment] pos = %d distance = %d\\n\",\n                    (int)(base - base_ip), 0, (int)matched,\n                    (int)(base - base_ip), (int)last_distance));\n\n        next_emit = ip;\n        if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {\n          goto emit_remainder;\n        }\n        {\n          /* We could immediately start working at ip now, but to improve\n             compression we first update \"table\" with the hashes of some\n             positions within the last copy. */\n          uint64_t input_bytes;\n          uint32_t cur_hash;\n          uint32_t prev_hash;\n          if (min_match == 4) {\n            input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);\n            cur_hash = HashBytesAtOffset(input_bytes, 3, shift, min_match);\n            prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 3);\n            prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 2);\n            prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 1);\n          } else {\n            input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 5);\n            prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 5);\n            prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 4);\n            prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 3);\n            input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 2);\n            cur_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);\n            prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 2);\n            prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 1);\n          }\n\n          candidate = base_ip + table[cur_hash];\n          table[cur_hash] = (int)(ip - base_ip);\n        }\n      }\n\n      next_hash = Hash(++ip, shift, min_match);\n    }\n  }\n\nemit_remainder:\n  BROTLI_DCHECK(next_emit <= ip_end);\n  /* Emit the remaining bytes as literals. */\n  if (next_emit < ip_end) {\n    const uint32_t insert = (uint32_t)(ip_end - next_emit);\n    EmitInsertLen(insert, commands);\n    BROTLI_LOG((\"[CompressFragment] pos = %d insert = %d copy = %d\\n\",\n                (int)(next_emit - base_ip), insert, 2));\n    memcpy(*literals, next_emit, insert);\n    *literals += insert;\n  }\n}\n\nstatic void StoreCommands(BrotliTwoPassArena* s,\n                          const uint8_t* literals, const size_t num_literals,\n                          const uint32_t* commands, const size_t num_commands,\n                          size_t* storage_ix, uint8_t* storage) {\n  static const BROTLI_MODEL(\"small\") uint32_t kNumExtraBits[128] = {\n      0,  0,  0,  0,  0,  0,  1,  1,  2,  2,  3,  3,  4,  4,  5,  5,\n      6,  7,  8,  9,  10, 12, 14, 24, 0,  0,  0,  0,  0,  0,  0,  0,\n      1,  1,  2,  2,  3,  3,  4,  4,  0,  0,  0,  0,  0,  0,  0,  0,\n      1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  7,  8,  9,  10, 24,\n      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,\n      1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,\n      9,  9,  10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16,\n      17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24,\n  };\n  static const BROTLI_MODEL(\"small\") uint32_t kInsertOffset[24] = {\n      0,  1,  2,  3,  4,   5,   6,   8,   10,   14,   18,   26,\n      34, 50, 66, 98, 130, 194, 322, 578, 1090, 2114, 6210, 22594,\n  };\n\n  size_t i;\n  memset(s->lit_histo, 0, sizeof(s->lit_histo));\n  /* TODO(eustas): is that necessary? */\n  memset(s->cmd_depth, 0, sizeof(s->cmd_depth));\n  /* TODO(eustas): is that necessary? */\n  memset(s->cmd_bits, 0, sizeof(s->cmd_bits));\n  memset(s->cmd_histo, 0, sizeof(s->cmd_histo));\n  for (i = 0; i < num_literals; ++i) {\n    ++s->lit_histo[literals[i]];\n  }\n  BrotliBuildAndStoreHuffmanTreeFast(s->tmp_tree, s->lit_histo, num_literals,\n                                     /* max_bits = */ 8, s->lit_depth,\n                                     s->lit_bits, storage_ix, storage);\n\n  for (i = 0; i < num_commands; ++i) {\n    const uint32_t code = commands[i] & 0xFF;\n    BROTLI_DCHECK(code < 128);\n    ++s->cmd_histo[code];\n  }\n  s->cmd_histo[1] += 1;\n  s->cmd_histo[2] += 1;\n  s->cmd_histo[64] += 1;\n  s->cmd_histo[84] += 1;\n  BuildAndStoreCommandPrefixCode(s, storage_ix, storage);\n\n  for (i = 0; i < num_commands; ++i) {\n    const uint32_t cmd = commands[i];\n    const uint32_t code = cmd & 0xFF;\n    const uint32_t extra = cmd >> 8;\n    BROTLI_DCHECK(code < 128);\n    BrotliWriteBits(s->cmd_depth[code], s->cmd_bits[code], storage_ix, storage);\n    BrotliWriteBits(kNumExtraBits[code], extra, storage_ix, storage);\n    if (code < 24) {\n      const uint32_t insert = kInsertOffset[code] + extra;\n      uint32_t j;\n      for (j = 0; j < insert; ++j) {\n        const uint8_t lit = *literals;\n        BrotliWriteBits(s->lit_depth[lit], s->lit_bits[lit], storage_ix,\n                        storage);\n        ++literals;\n      }\n    }\n  }\n}\n\n/* Acceptable loss for uncompressible speedup is 2% */\n#define MIN_RATIO 0.98\n#define SAMPLE_RATE 43\n\nstatic BROTLI_BOOL ShouldCompress(BrotliTwoPassArena* s,\n    const uint8_t* input, size_t input_size, size_t num_literals) {\n  double corpus_size = (double)input_size;\n  if ((double)num_literals < MIN_RATIO * corpus_size) {\n    return BROTLI_TRUE;\n  } else {\n    const double max_total_bit_cost = corpus_size * 8 * MIN_RATIO / SAMPLE_RATE;\n    size_t i;\n    memset(s->lit_histo, 0, sizeof(s->lit_histo));\n    for (i = 0; i < input_size; i += SAMPLE_RATE) {\n      ++s->lit_histo[input[i]];\n    }\n    return TO_BROTLI_BOOL(\n        BrotliBitsEntropy(s->lit_histo, 256) < max_total_bit_cost);\n  }\n}\n\nstatic void RewindBitPosition(const size_t new_storage_ix,\n                              size_t* storage_ix, uint8_t* storage) {\n  const size_t bitpos = new_storage_ix & 7;\n  const size_t mask = (1u << bitpos) - 1;\n  storage[new_storage_ix >> 3] &= (uint8_t)mask;\n  *storage_ix = new_storage_ix;\n}\n\nstatic void EmitUncompressedMetaBlock(const uint8_t* input, size_t input_size,\n                                      size_t* storage_ix, uint8_t* storage) {\n  BrotliStoreMetaBlockHeader(input_size, 1, storage_ix, storage);\n  *storage_ix = (*storage_ix + 7u) & ~7u;\n  memcpy(&storage[*storage_ix >> 3], input, input_size);\n  *storage_ix += input_size << 3;\n  storage[*storage_ix >> 3] = 0;\n}\n\nstatic BROTLI_INLINE void BrotliCompressFragmentTwoPassImpl(\n    BrotliTwoPassArena* s, const uint8_t* input, size_t input_size,\n    BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf,\n    int* table, size_t table_bits, size_t min_match,\n    size_t* storage_ix, uint8_t* storage) {\n  /* Save the start of the first block for position and distance computations.\n  */\n  const uint8_t* base_ip = input;\n  BROTLI_UNUSED(is_last);\n\n  while (input_size > 0) {\n    size_t block_size =\n        BROTLI_MIN(size_t, input_size, kCompressFragmentTwoPassBlockSize);\n    uint32_t* commands = command_buf;\n    uint8_t* literals = literal_buf;\n    size_t num_literals;\n    CreateCommands(input, block_size, input_size, base_ip, table,\n                   table_bits, min_match, &literals, &commands);\n    num_literals = (size_t)(literals - literal_buf);\n    if (ShouldCompress(s, input, block_size, num_literals)) {\n      const size_t num_commands = (size_t)(commands - command_buf);\n      BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);\n      /* No block splits, no contexts. */\n      BrotliWriteBits(13, 0, storage_ix, storage);\n      StoreCommands(s, literal_buf, num_literals, command_buf, num_commands,\n                    storage_ix, storage);\n    } else {\n      /* Since we did not find many backward references and the entropy of\n         the data is close to 8 bits, we can simply emit an uncompressed block.\n         This makes compression speed of uncompressible data about 3x faster. */\n      EmitUncompressedMetaBlock(input, block_size, storage_ix, storage);\n    }\n    input += block_size;\n    input_size -= block_size;\n  }\n}\n\n#define FOR_TABLE_BITS_(X) \\\n  X(8) X(9) X(10) X(11) X(12) X(13) X(14) X(15) X(16) X(17)\n\n#define BAKE_METHOD_PARAM_(B)                                                  \\\nstatic BROTLI_NOINLINE void BrotliCompressFragmentTwoPassImpl ## B(            \\\n    BrotliTwoPassArena* s, const uint8_t* input, size_t input_size,            \\\n    BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf,          \\\n    int* table, size_t* storage_ix, uint8_t* storage) {                        \\\n  size_t min_match = (B <= 15) ? 4 : 6;                                        \\\n  BrotliCompressFragmentTwoPassImpl(s, input, input_size, is_last, command_buf,\\\n      literal_buf, table, B, min_match, storage_ix, storage);                  \\\n}\nFOR_TABLE_BITS_(BAKE_METHOD_PARAM_)\n#undef BAKE_METHOD_PARAM_\n\nvoid BrotliCompressFragmentTwoPass(\n    BrotliTwoPassArena* s, const uint8_t* input, size_t input_size,\n    BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf,\n    int* table, size_t table_size, size_t* storage_ix, uint8_t* storage) {\n  const size_t initial_storage_ix = *storage_ix;\n  const size_t table_bits = Log2FloorNonZero(table_size);\n  switch (table_bits) {\n#define CASE_(B)                                      \\\n    case B:                                           \\\n      BrotliCompressFragmentTwoPassImpl ## B(         \\\n          s, input, input_size, is_last, command_buf, \\\n          literal_buf, table, storage_ix, storage);   \\\n      break;\n    FOR_TABLE_BITS_(CASE_)\n#undef CASE_\n    default: BROTLI_DCHECK(0); break;\n  }\n\n  /* If output is larger than single uncompressed block, rewrite it. */\n  if (*storage_ix - initial_storage_ix > 31 + (input_size << 3)) {\n    RewindBitPosition(initial_storage_ix, storage_ix, storage);\n    EmitUncompressedMetaBlock(input, input_size, storage_ix, storage);\n  }\n\n  if (is_last) {\n    BrotliWriteBits(1, 1, storage_ix, storage);  /* islast */\n    BrotliWriteBits(1, 1, storage_ix, storage);  /* isempty */\n    *storage_ix = (*storage_ix + 7u) & ~7u;\n  }\n}\n\n#undef FOR_TABLE_BITS_\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/compress_fragment_two_pass.h",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Function for fast encoding of an input fragment, independently from the input\n   history. This function uses two-pass processing: in the first pass we save\n   the found backward matches and literal bytes into a buffer, and in the\n   second pass we emit them into the bit stream using prefix codes built based\n   on the actual command and literal byte histograms. */\n\n#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_\n#define BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n#include \"entropy_encode.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* TODO(eustas): turn to macro. */\nstatic const size_t kCompressFragmentTwoPassBlockSize = 1 << 17;\n\ntypedef struct BrotliTwoPassArena {\n  uint32_t lit_histo[256];\n  uint8_t lit_depth[256];\n  uint16_t lit_bits[256];\n\n  uint32_t cmd_histo[128];\n  uint8_t cmd_depth[128];\n  uint16_t cmd_bits[128];\n\n  /* BuildAndStoreCommandPrefixCode */\n  HuffmanTree tmp_tree[2 * BROTLI_NUM_LITERAL_SYMBOLS + 1];\n  uint8_t tmp_depth[BROTLI_NUM_COMMAND_SYMBOLS];\n  uint16_t tmp_bits[64];\n} BrotliTwoPassArena;\n\n/* Compresses \"input\" string to the \"*storage\" buffer as one or more complete\n   meta-blocks, and updates the \"*storage_ix\" bit position.\n\n   If \"is_last\" is 1, emits an additional empty last meta-block.\n\n   REQUIRES: \"input_size\" is greater than zero, or \"is_last\" is 1.\n   REQUIRES: \"input_size\" is less or equal to maximal metablock size (1 << 24).\n   REQUIRES: \"command_buf\" and \"literal_buf\" point to at least\n              kCompressFragmentTwoPassBlockSize long arrays.\n   REQUIRES: All elements in \"table[0..table_size-1]\" are initialized to zero.\n   REQUIRES: \"table_size\" is a power of two\n   OUTPUT: maximal copy distance <= |input_size|\n   OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18) */\nBROTLI_INTERNAL void BrotliCompressFragmentTwoPass(BrotliTwoPassArena* s,\n                                                   const uint8_t* input,\n                                                   size_t input_size,\n                                                   BROTLI_BOOL is_last,\n                                                   uint32_t* command_buf,\n                                                   uint8_t* literal_buf,\n                                                   int* table,\n                                                   size_t table_size,\n                                                   size_t* storage_ix,\n                                                   uint8_t* storage);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ */\n"
  },
  {
    "path": "c/enc/dictionary_hash.c",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Hash table on the 4-byte prefixes of static dictionary words. */\n\n#include \"dictionary_hash.h\"\n\n#include \"../common/platform.h\"  /* IWYU pragma: keep */\n#include \"../common/static_init.h\"\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\n#include \"../common/dictionary.h\"\n#include \"hash_base.h\"\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\nBROTLI_BOOL BROTLI_COLD BrotliEncoderInitDictionaryHash(\n    const BrotliDictionary* dict, uint16_t* words, uint8_t* lengths) {\n  size_t global_idx = 0;\n  size_t len;\n  size_t i;\n  static const uint8_t frozen_idx[1688] = {0, 0, 8, 164, 32, 56, 31, 191, 36, 4,\n128, 81, 68, 132, 145, 129, 0, 0, 0, 28, 0, 8, 1, 1, 64, 3, 1, 0, 0, 0, 0, 0, 4,\n64, 1, 2, 128, 0, 132, 49, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 1, 0, 36, 152,\n0, 0, 0, 0, 128, 8, 0, 0, 128, 0, 0, 8, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,\n0, 0, 0, 1, 0, 64, 133, 0, 32, 0, 0, 128, 1, 0, 0, 0, 0, 4, 4, 4, 32, 16, 130,\n0, 128, 8, 0, 0, 0, 0, 0, 64, 0, 64, 0, 160, 0, 148, 53, 0, 0, 0, 0, 0, 128, 0,\n130, 0, 0, 0, 8, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 32, 1, 32, 129, 0, 12, 0,\n1, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 16, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8,\n0, 0, 2, 0, 0, 0, 0, 0, 32, 0, 0, 0, 2, 66, 128, 0, 0, 16, 0, 0, 0, 0, 64, 1, 6,\n128, 8, 0, 192, 24, 32, 0, 0, 8, 4, 128, 128, 2, 160, 0, 160, 0, 64, 0, 0, 2, 0,\n0, 0, 0, 0, 0, 0, 0, 0, 32, 1, 0, 0, 64, 0, 0, 0, 0, 0, 0, 32, 0, 66, 0, 2, 0,\n4, 0, 8, 0, 2, 0, 0, 33, 8, 0, 0, 0, 8, 0, 128, 162, 4, 128, 0, 2, 33, 0, 160,\n0, 8, 0, 64, 0, 160, 0, 129, 4, 0, 0, 32, 0, 0, 32, 0, 2, 0, 0, 0, 0, 0, 0, 128,\n0, 0, 0, 0, 0, 64, 10, 0, 0, 0, 0, 32, 64, 0, 0, 0, 0, 0, 16, 0, 16, 16, 0, 0,\n80, 2, 0, 0, 0, 0, 8, 0, 0, 16, 0, 8, 0, 0, 0, 8, 64, 128, 0, 0, 0, 8, 208, 0,\n0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 32, 0, 8, 0, 128, 0, 0, 0, 1, 0, 0, 0,\n16, 8, 1, 136, 0, 0, 36, 0, 64, 9, 0, 1, 32, 8, 0, 64, 64, 131, 16, 224, 32, 4,\n0, 4, 5, 160, 0, 131, 0, 4, 96, 0, 0, 184, 192, 0, 177, 205, 96, 0, 0, 0, 0, 2,\n0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 128, 0, 0, 8, 0, 0, 0, 0, 1, 4, 0, 1,\n0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 64, 69, 0, 0, 8, 2, 66, 32, 64, 0, 0, 0,\n0, 0, 1, 0, 128, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 16, 0, 0, 4, 128, 64,\n0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 8, 0, 0, 130, 16, 64, 128, 2, 64, 0, 0, 0, 128,\n2, 192, 64, 0, 65, 0, 0, 0, 16, 0, 0, 0, 32, 4, 2, 2, 76, 0, 0, 0, 4, 72, 52,\n131, 44, 76, 0, 0, 0, 0, 64, 1, 16, 148, 4, 0, 16, 10, 64, 0, 2, 0, 1, 0, 128,\n64, 68, 0, 0, 0, 0, 0, 64, 144, 0, 8, 0, 2, 0, 0, 0, 0, 0, 0, 3, 64, 0, 0, 0, 0,\n1, 128, 0, 0, 32, 66, 0, 0, 0, 40, 0, 18, 0, 0, 0, 0, 0, 33, 0, 0, 32, 0, 0, 32,\n0, 128, 4, 64, 145, 140, 0, 0, 0, 128, 0, 2, 0, 0, 20, 0, 80, 38, 0, 0, 32, 0,\n32, 64, 4, 4, 0, 4, 0, 0, 0, 129, 4, 0, 0, 144, 17, 32, 130, 16, 132, 24, 134,\n0, 0, 64, 2, 5, 50, 8, 194, 33, 1, 68, 117, 1, 8, 32, 161, 54, 0, 130, 34, 0, 0,\n0, 64, 128, 0, 0, 2, 0, 0, 0, 0, 32, 1, 0, 0, 0, 3, 14, 0, 0, 0, 0, 0, 16, 4, 0,\n0, 0, 0, 0, 0, 0, 0, 96, 1, 24, 18, 0, 1, 128, 24, 0, 64, 0, 4, 0, 16, 128, 0,\n64, 0, 0, 0, 64, 0, 8, 0, 0, 0, 0, 0, 66, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n0, 0, 0, 0, 16, 0, 64, 2, 0, 0, 0, 0, 6, 0, 8, 8, 2, 0, 64, 0, 0, 0, 0, 128, 2,\n2, 12, 64, 0, 64, 0, 8, 0, 128, 32, 0, 0, 10, 0, 0, 32, 0, 128, 32, 33, 8, 136,\n0, 96, 64, 0, 0, 0, 0, 0, 64, 4, 16, 4, 8, 0, 0, 0, 16, 0, 2, 0, 0, 1, 128, 0,\n64, 16, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 2, 0, 16, 0, 4, 0, 8, 0, 0, 0, 0, 0,\n20, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 136, 0, 0, 0, 0, 0, 8, 0,\n0, 0, 0, 0, 2, 0, 0, 0, 64, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0,\n0, 0, 4, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,\n0, 0, 0, 0, 2, 128, 0, 0, 0, 8, 2, 0, 0, 128, 0, 16, 2, 0, 0, 4, 0, 32, 0, 0, 1,\n4, 64, 64, 0, 4, 0, 1, 0, 16, 0, 32, 68, 4, 4, 65, 10, 0, 20, 37, 18, 1, 148, 0,\n32, 128, 3, 8, 0, 64, 0, 0, 0, 0, 0, 0, 4, 0, 16, 1, 128, 0, 0, 0, 128, 16, 0,\n0, 0, 0, 1, 128, 0, 0, 128, 64, 128, 64, 0, 130, 0, 164, 8, 0, 0, 1, 64, 128, 0,\n18, 0, 2, 150, 0, 8, 0, 0, 64, 0, 81, 0, 0, 16, 128, 2, 8, 36, 32, 129, 4, 144,\n13, 0, 0, 3, 8, 1, 0, 2, 0, 0, 64, 0, 5, 0, 1, 34, 1, 32, 2, 16, 128, 128, 128,\n0, 0, 0, 2, 0, 4, 18, 8, 12, 34, 32, 192, 6, 64, 224, 33, 0, 0, 137, 72, 64, 0,\n24, 8, 128, 128, 0, 16, 0, 32, 128, 128, 132, 8, 0, 0, 16, 0, 64, 0, 0, 4, 0, 0,\n16, 0, 4, 128, 64, 0, 0, 1, 0, 4, 64, 32, 144, 130, 2, 128, 0, 192, 0, 64, 82,\n64, 1, 32, 128, 128, 2, 0, 84, 0, 32, 0, 44, 24, 72, 80, 32, 16, 0, 0, 44, 16,\n96, 64, 1, 72, 131, 0, 0, 0, 16, 0, 0, 165, 0, 129, 2, 49, 48, 64, 64, 12, 64,\n176, 64, 84, 8, 128, 20, 64, 213, 136, 104, 1, 41, 15, 83, 170, 0, 0, 41, 1, 64,\n64, 0, 193, 64, 64, 8, 0, 128, 0, 0, 64, 8, 64, 8, 1, 16, 0, 8, 0, 0, 2, 1, 128,\n28, 84, 141, 97, 0, 0, 68, 0, 0, 129, 8, 0, 16, 8, 32, 0, 64, 0, 0, 0, 24, 0, 0,\n0, 192, 0, 8, 128, 0, 0, 0, 0, 0, 64, 0, 1, 0, 0, 0, 0, 40, 1, 128, 64, 0, 4, 2,\n32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 32, 8, 0, 32, 0, 0, 0, 16, 17, 0,\n2, 4, 0, 0, 33, 128, 2, 0, 0, 0, 0, 129, 0, 2, 0, 0, 0, 36, 0, 32, 2, 0, 0, 0,\n0, 0, 0, 32, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 32, 64, 0, 0, 0, 0, 0, 0,\n32, 0, 0, 32, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 16, 0, 0, 0, 0, 0, 0, 0,\n1, 0, 136, 0, 0, 24, 192, 128, 3, 0, 17, 18, 2, 0, 66, 0, 4, 24, 0, 9, 208, 167,\n0, 144, 20, 64, 0, 130, 64, 0, 2, 16, 136, 8, 74, 32, 0, 168, 0, 65, 32, 8, 12,\n1, 3, 1, 64, 180, 3, 0, 64, 0, 8, 0, 0, 32, 65, 0, 4, 16, 4, 16, 68, 32, 64, 36,\n32, 24, 33, 1, 128, 0, 0, 8, 0, 32, 64, 81, 0, 1, 10, 19, 8, 0, 0, 4, 5, 144, 0,\n0, 8, 128, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 0, 0, 80, 1, 0, 0,\n33, 0, 32, 66, 4, 2, 0, 1, 43, 2, 0, 0, 4, 32, 16, 0, 64, 0, 3, 32, 0, 2, 64,\n64, 116, 0, 65, 52, 64, 0, 17, 64, 192, 96, 8, 10, 8, 2, 4, 0, 17, 64, 0, 4, 0,\n0, 4, 128, 0, 0, 9, 0, 0, 130, 2, 0, 192, 0, 48, 128, 64, 0, 96, 0, 64, 0, 1,\n16, 32, 0, 1, 32, 6, 128, 2, 32, 0, 12, 0, 0, 48, 32, 8, 0, 0, 128, 0, 18, 0,\n0, 28, 24, 41, 16, 5, 32, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n0, 0, 0, 0, 1, 0, 0, 0, 16, 0, 0, 0, 0, 64, 0, 0, 0, 0, 8, 0, 0, 0, 0, 16, 128,\n0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0,\n0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n0, 0, 0, 0, 0, 0, 0};\n\n  memset(lengths, 0, BROTLI_ENC_NUM_HASH_BUCKETS);\n\n  for (len = BROTLI_MAX_DICTIONARY_WORD_LENGTH;\n       len >= BROTLI_MIN_DICTIONARY_WORD_LENGTH; --len) {\n    size_t length_lt_8 = len < 8 ? 1 : 0;\n    size_t n = 1u << dict->size_bits_by_length[len];\n    const uint8_t* dict_words = dict->data + dict->offsets_by_length[len];\n    for (i = 0; i < n; ++i) {\n      size_t j = n - 1 - i;\n      const uint8_t* word = dict_words + len * j;\n      const uint32_t key = Hash14(word);\n      size_t idx = (key << 1) + length_lt_8;\n      if ((lengths[idx] & 0x80) == 0) {\n        BROTLI_BOOL is_final = TO_BROTLI_BOOL(frozen_idx[global_idx / 8] &\n                                              (1u << (global_idx % 8)));\n        words[idx] = (uint16_t)j;\n        lengths[idx] = (uint8_t)(len + (is_final ? 0x80 : 0));\n      }\n      global_idx++;\n    }\n  }\n  for (i = 0; i < BROTLI_ENC_NUM_HASH_BUCKETS; ++i) {\n    lengths[i] &= 0x7F;\n  }\n\n  return BROTLI_TRUE;\n}\n\nBROTLI_MODEL(\"small\")\nuint16_t kStaticDictionaryHashWords[BROTLI_ENC_NUM_HASH_BUCKETS];\nBROTLI_MODEL(\"small\")\nuint8_t kStaticDictionaryHashLengths[BROTLI_ENC_NUM_HASH_BUCKETS];\n\n#else  /* BROTLI_STATIC_INIT */\n\n/* Embed kStaticDictionaryHashWords and kStaticDictionaryHashLengths. */\n#include \"dictionary_hash_inc.h\"\n\n#endif  /* BROTLI_STATIC_INIT */\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/dictionary_hash.h",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Hash table on the 4-byte prefixes of static dictionary words. */\n\n#ifndef BROTLI_ENC_DICTIONARY_HASH_H_\n#define BROTLI_ENC_DICTIONARY_HASH_H_\n\n#include \"../common/platform.h\"\n#include \"../common/static_init.h\"\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\n#include \"../common/dictionary.h\"\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* Bucket is (Hash14 * 2 + length_lt_8); in other words we reserve 2 buckets\n   for each hash - one for shorter words and one for longer words. */\n#define BROTLI_ENC_NUM_HASH_BUCKETS 32768\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\nBROTLI_BOOL BROTLI_INTERNAL BrotliEncoderInitDictionaryHash(\n    const BrotliDictionary* dictionary, uint16_t* words, uint8_t* lengths);\nBROTLI_INTERNAL extern BROTLI_MODEL(\"small\") uint16_t\n    kStaticDictionaryHashWords[BROTLI_ENC_NUM_HASH_BUCKETS];\nBROTLI_INTERNAL extern BROTLI_MODEL(\"small\") uint8_t\n    kStaticDictionaryHashLengths[BROTLI_ENC_NUM_HASH_BUCKETS];\n#else\nBROTLI_INTERNAL extern const BROTLI_MODEL(\"small\") uint16_t\n    kStaticDictionaryHashWords[BROTLI_ENC_NUM_HASH_BUCKETS];\nBROTLI_INTERNAL extern const BROTLI_MODEL(\"small\") uint8_t\n    kStaticDictionaryHashLengths[BROTLI_ENC_NUM_HASH_BUCKETS];\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_DICTIONARY_HASH_H_ */\n"
  },
  {
    "path": "c/enc/dictionary_hash_inc.h",
    "content": "const BROTLI_MODEL(\"small\")\nuint16_t kStaticDictionaryHashWords[BROTLI_ENC_NUM_HASH_BUCKETS] = {\n1002,0,0,0,0,0,0,0,0,683,0,0,0,0,0,0,0,1265,0,0,0,0,0,1431,0,0,0,0,0,0,40,0,0,0,\n0,155,8,741,0,624,0,0,0,0,0,0,0,0,0,0,0,0,66,503,0,0,0,451,0,0,0,0,0,0,0,835,70,\n0,0,539,0,0,0,0,0,0,0,0,0,113,0,0,0,0,718,0,0,0,0,0,0,520,0,1070,0,0,0,0,0,1515,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,610,0,0,750,0,0,0,307,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,964,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,999,0,0,0,0,0,0,0,0,\n645,75,0,649,52,282,0,200,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1621,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,211,225,0,0,687,718,0,0,110,0,58,0,0,0,0,0,0,345,0,0,301,0,0,\n0,203,0,0,1154,674,1949,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,1275,0,0,0,1231,254,\n0,0,0,0,0,0,0,277,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,0,0,800,0,0,0,29,\n116,100,490,0,0,0,0,0,1641,0,543,0,0,0,0,41,181,0,657,0,0,202,25,0,0,0,0,0,0,0,\n0,0,0,423,0,0,0,113,0,0,0,927,963,0,976,0,206,0,0,0,0,0,0,0,0,0,2002,0,0,0,0,0,\n0,0,0,0,0,0,696,0,1170,0,0,0,0,226,13,0,769,678,551,0,0,0,0,0,0,57,0,0,0,10,188,\n0,0,0,624,0,0,0,0,0,0,0,0,0,1941,130,0,0,0,0,378,269,0,0,528,0,1146,0,0,0,1105,\n0,1616,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,656,0,1940,0,0,0,0,0,173,0,0,0,0,0,0,0,0,0,\n0,0,457,342,810,0,0,0,0,620,0,0,0,0,0,0,0,967,95,447,406,0,0,0,477,0,1268,944,\n1941,0,0,0,629,0,0,0,0,0,375,0,0,0,1636,0,0,0,0,774,0,1,1034,0,0,0,0,0,824,0,0,\n0,0,0,118,0,0,560,296,0,0,0,0,0,0,0,0,1009,894,0,0,0,0,0,0,0,0,0,0,0,0,0,1474,\n366,0,0,0,0,0,0,0,0,0,79,1723,0,0,200,0,0,0,0,0,0,0,0,1759,372,0,16,0,943,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,258,0,0,900,1839,707,30,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,2004,0,0,10,115,0,50,0,0,0,0,0,0,0,0,0,0,520,1,0,738,98,482,0,0,0,0,\n0,0,0,0,0,0,701,2,0,0,0,0,0,0,0,0,557,0,0,0,0,0,0,0,0,0,347,0,0,0,0,572,0,0,0,0,\n0,0,0,0,0,832,0,0,797,809,0,0,0,0,0,0,0,0,0,0,0,528,0,0,0,861,0,0,294,0,0,0,109,\n0,0,0,0,0,0,0,0,1187,290,266,0,0,0,0,49,50,748,0,0,466,399,0,0,0,0,0,0,0,378,0,\n519,0,0,0,0,0,0,0,0,0,0,0,0,667,351,902,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,\n0,0,869,0,0,0,0,0,0,0,260,0,0,0,0,0,0,0,0,0,0,523,36,0,0,587,510,809,29,260,0,0,\n0,0,0,0,0,0,570,0,565,0,1464,0,0,0,0,0,0,10,0,0,787,399,380,200,0,0,0,0,516,0,\n844,887,0,0,0,0,0,0,0,44,0,0,0,305,1655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,786,10,0,0,\n0,0,0,0,0,0,0,2031,0,0,0,0,0,684,0,0,0,0,0,1480,0,0,0,27,0,0,0,395,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,813,511,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,0,206,\n496,0,0,0,0,0,909,0,891,0,0,0,0,0,0,0,0,0,687,0,0,0,1342,0,0,0,0,0,0,0,0,0,0,\n160,41,0,0,0,0,0,0,0,0,0,0,0,1718,778,0,0,0,0,0,0,0,0,0,0,1610,0,0,0,0,0,115,0,\n0,0,0,314,294,0,0,0,983,178,193,0,0,0,0,0,0,0,0,0,174,0,0,0,0,0,0,0,0,0,0,848,\n1796,0,0,0,0,0,0,221,0,687,1660,0,0,0,0,262,0,0,179,0,0,0,0,0,66,0,773,0,352,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,0,152,0,0,1197,0,0,0,0,0,0,0,0,0,0,0,0,560,0,0,\n564,0,0,0,797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,556,0,819,0,0,0,0,0,0,0,0,719,544,\n637,5,0,0,0,0,0,0,0,0,0,0,0,101,0,1441,0,0,0,893,0,0,0,0,0,0,0,0,0,238,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,1296,0,0,969,1729,314,60,0,0,0,0,0,1144,0,1147,0,0,0,0,0,\n0,0,0,0,0,437,1853,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,828,0,176,0,0,0,0,0,0,434,39,0,\n0,0,0,0,159,0,0,0,902,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,270,0,0,0,0,801,556,0,0,\n0,0,0,0,0,416,19,197,369,0,0,0,0,0,0,0,0,0,28,34,0,757,0,0,898,1553,0,721,0,0,0,\n0,1012,0,0,0,0,1102,0,898,183,0,0,0,0,0,0,0,136,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,247,277,0,0,0,435,0,0,0,0,0,1311,0,0,0,0,\n0,0,211,437,0,0,0,28,0,0,750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2012,0,702,\n0,808,0,0,0,0,739,166,0,0,0,0,0,0,719,170,500,0,0,0,0,0,0,0,0,1500,327,0,0,450,\n0,0,0,1318,0,0,0,1602,0,0,331,754,0,0,0,0,0,1368,0,0,557,0,0,0,799,850,0,0,0,0,\n0,0,0,0,908,0,0,0,0,0,19,62,459,0,0,0,0,0,0,0,0,0,0,0,0,1802,0,0,0,0,0,0,0,0,0,\n1397,0,0,0,0,120,238,0,0,0,0,0,0,0,0,0,0,0,1324,0,0,0,0,0,0,0,0,602,201,0,0,164,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,615,0,0,0,0,0,0,0,0,0,0,0,0,0,1243,0,0,0,0,968,0,0,\n0,0,0,0,882,0,0,0,907,329,100,0,0,0,0,0,0,0,0,0,0,0,176,26,9,0,0,265,256,0,0,0,\n0,0,0,0,0,0,643,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,610,0,0,0,0,973,2001,0,\n0,0,0,0,0,522,0,0,0,0,0,0,0,0,0,0,0,553,0,0,0,0,0,0,1582,0,1578,0,0,0,0,0,0,0,0,\n0,0,0,795,0,0,0,432,0,0,0,0,0,0,84,126,0,0,0,0,790,0,377,64,0,1529,0,0,0,0,530,\n1857,539,1104,0,0,0,0,0,0,0,0,0,0,0,0,977,0,0,0,34,0,0,0,0,0,0,0,0,0,0,0,24,26,\n0,0,918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,183,379,0,0,0,0,0,0,0,792,\n0,0,0,0,0,0,0,0,0,1920,0,0,0,0,0,0,0,0,0,771,0,0,0,1979,0,901,254,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,140,0,0,0,0,0,440,37,0,\n508,0,0,0,513,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,533,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,752,920,0,1048,0,153,0,\n0,391,0,0,1952,0,0,0,0,0,0,0,0,0,0,126,0,0,0,0,640,0,483,69,1616,0,0,0,0,0,734,\n0,0,0,0,0,0,480,0,495,0,472,0,0,0,0,0,0,0,0,874,229,0,0,0,0,948,0,0,0,0,0,0,0,0,\n1009,748,0,555,0,0,0,0,0,0,193,0,653,0,0,0,0,0,0,0,0,0,0,984,0,0,0,172,0,0,0,0,\n0,0,0,0,83,1568,0,0,384,0,0,0,0,0,0,0,164,880,0,0,0,0,0,0,0,0,0,0,0,367,121,0,0,\n828,0,0,0,0,0,0,0,1541,0,0,0,0,0,0,0,343,0,0,0,0,0,0,0,0,561,57,0,0,0,0,0,0,0,\n926,0,0,0,0,827,0,194,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,\n0,0,0,896,1249,0,0,0,0,0,1614,0,0,0,860,0,0,0,0,0,0,0,0,964,102,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,899,0,569,0,0,0,0,795,2045,0,0,0,\n0,0,0,104,52,0,0,0,0,0,604,0,0,0,0,779,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,\n494,0,677,0,0,0,0,0,0,0,508,0,0,0,0,0,0,0,0,0,1014,0,957,0,0,630,310,0,0,0,570,\n0,0,449,0,64,537,0,0,0,0,0,0,0,244,0,0,0,0,0,0,0,0,0,0,0,0,0,0,702,1650,49,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,338,0,0,0,0,1279,0,0,0,0,0,0,0,896,0,0,\n178,0,0,0,0,0,0,0,0,0,0,0,0,0,808,695,0,0,0,0,539,1117,0,0,0,0,0,0,0,0,257,0,\n1003,0,0,0,1,448,0,516,0,0,960,0,125,4,0,1268,30,748,0,0,852,0,0,0,6,0,0,848,\n236,1385,862,1811,0,0,0,0,698,803,0,0,0,0,0,0,0,610,992,0,0,878,0,1847,0,0,0,0,\n0,0,0,383,0,1404,0,0,0,0,986,0,347,0,0,0,0,0,0,0,0,0,0,0,592,572,0,1411,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,606,0,0,0,0,0,0,\n0,0,0,0,0,0,0,1829,0,0,0,0,0,0,0,0,0,0,0,0,700,748,0,0,0,0,0,0,365,0,0,127,0,0,\n83,198,0,0,0,0,0,0,864,55,0,0,0,0,726,1752,0,0,0,0,0,0,0,0,0,0,0,0,0,1066,0,764,\n0,0,0,0,683,0,550,309,0,0,874,1212,0,0,0,1364,0,986,381,723,0,0,0,1573,0,0,0,0,\n0,1025,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1559,0,0,0,0,493,133,0,0,0,0,148,\n119,0,0,0,0,0,0,537,14,541,0,635,126,0,0,0,495,0,0,0,0,861,998,1009,0,0,0,0,0,0,\n0,359,368,0,0,0,0,304,1577,0,0,0,0,0,1107,0,0,0,0,0,929,0,0,0,1142,0,0,0,0,289,\n175,0,432,0,219,0,0,0,0,0,785,0,0,595,0,0,0,0,0,0,0,0,0,0,0,0,0,80,0,0,0,0,0,0,\n931,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1323,0,0,0,0,290,0,559,1751,127,0,0,0,\n934,1167,0,963,0,260,0,0,0,573,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n580,1689,0,0,0,0,0,0,0,0,0,1164,0,0,982,1922,0,63,0,0,0,0,0,793,0,0,0,0,0,0,0,0,\n0,0,0,0,0,67,790,0,0,0,0,0,0,0,0,0,0,391,443,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,271,0,0,0,0,0,0,0,0,0,0,0,1140,0,0,0,0,340,300,0,897,0,0,0,0,0,0,\n0,0,0,0,890,0,0,0,0,818,321,53,0,0,0,0,0,0,0,0,0,468,0,243,0,870,0,0,0,1765,121,\n0,0,0,180,518,0,822,419,634,0,0,0,0,0,0,0,0,0,898,0,0,0,0,454,36,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,806,0,0,0,0,0,0,0,0,0,0,0,0,1326,0,104,0,0,0,0,0,0,0,\n0,0,260,0,0,0,0,0,0,0,0,0,0,0,0,542,45,0,0,263,1516,42,0,0,0,0,0,468,0,1005,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,288,87,0,0,0,0,0,0,0,0,502,988,133,0,0,0,0,0,0,\n141,0,0,872,1842,0,0,0,0,0,0,0,0,261,619,0,0,0,0,189,246,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,678,0,0,0,0,0,0,0,0,0,0,0,0,285,35,0,517,0,0,0,0,0,0,0,0,0,0,\n540,214,667,0,74,0,0,125,0,0,0,0,0,761,131,0,0,0,0,0,0,0,0,0,0,0,0,0,333,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1338,94,0,0,0,0,0,0,0,0,0,0,0,0,449,0,646,103,\n86,641,2028,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,869,87,277,117,39,0,0,0,0,0,0,0,0,938,\n297,0,0,0,0,558,464,0,0,0,0,0,0,0,0,0,0,731,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1608,0,\n0,0,0,0,0,0,1429,0,0,733,1010,0,0,338,1656,0,0,0,1038,979,2010,0,0,0,0,0,0,0,\n1005,0,0,121,0,0,0,219,20,0,0,0,0,0,0,872,1440,0,0,0,683,0,1070,0,0,522,0,0,0,0,\n439,669,0,0,0,0,0,0,0,0,1245,0,0,0,0,0,1218,0,0,547,233,0,0,0,0,0,0,0,0,0,482,0,\n0,0,0,0,0,0,886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,795,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,371,0,0,0,0,0,0,0,0,0,0,0,0,0,622,0,625,0,0,0,339,29,0,0,338,0,0,0,\n0,130,0,0,0,0,0,0,0,0,0,307,0,0,0,0,0,0,0,0,0,0,2044,0,0,0,0,0,0,0,0,308,770,0,\n0,0,0,0,1266,0,0,0,0,0,0,0,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,690,739,0,0,\n0,0,0,0,0,990,0,0,0,1831,0,0,0,0,0,0,0,0,0,0,0,0,0,613,0,0,0,0,0,0,0,0,0,0,0,0,\n0,763,0,878,0,0,0,977,0,100,0,0,0,0,0,0,0,0,0,463,0,0,0,0,623,318,0,0,296,463,\n137,0,0,454,0,0,0,1527,58,0,0,0,0,0,0,0,18,48,0,0,0,0,0,729,0,0,0,442,0,0,0,0,\n40,449,0,853,0,0,0,0,0,0,227,0,0,0,0,0,0,1491,0,0,0,0,0,0,0,0,0,0,161,55,0,450,\n0,1174,62,0,207,0,0,0,0,0,0,0,0,869,0,0,0,0,80,213,0,0,0,0,0,0,0,0,0,0,354,820,\n0,0,747,0,0,0,954,0,0,1073,0,556,0,0,0,692,0,191,0,804,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,831,162,0,0,35,0,0,0,0,0,0,0,0,1235,0,0,0,0,0,1234,0,0,\n0,0,0,0,0,0,0,0,96,0,0,0,0,0,0,0,149,0,0,0,902,204,0,0,833,0,287,366,0,0,0,0,0,\n0,992,2020,0,0,0,0,0,0,0,0,0,0,0,356,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,784,0,0,567,\n630,0,0,0,539,0,0,27,0,0,0,0,0,0,0,0,0,0,755,0,0,0,0,0,0,0,0,0,0,0,0,814,0,0,0,\n0,0,0,0,0,0,0,0,0,0,987,0,0,255,761,194,0,1086,0,0,0,0,0,0,1016,0,0,1396,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,562,271,913,0,0,0,0,0,0,0,0,320,153,45,475,0,0,\n0,0,0,0,0,713,0,327,0,0,0,0,0,0,604,552,3,359,0,0,0,0,853,80,0,0,0,0,0,0,0,2016,\n6,887,0,0,0,0,975,0,961,0,0,0,0,0,916,1891,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,100,101,390,708,0,0,0,587,983,512,0,0,0,0,0,0,0,0,0,0,0,645,0,0,0,851,0,0,0,\n0,0,498,140,217,0,0,0,1448,0,0,0,0,0,0,0,0,0,905,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n643,105,0,792,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,535,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,1748,0,0,0,0,0,754,0,0,0,0,0,0,0,0,0,0,0,0,91,0,0,1565,0,91,792,\n939,3,370,0,0,0,0,95,0,0,0,0,551,7,619,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1150,0,\n0,0,0,0,0,0,0,0,0,0,0,0,671,0,0,0,0,0,888,368,149,0,0,105,1134,0,983,0,0,458,31,\n0,643,0,0,0,312,0,740,0,0,0,1642,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,59,68,0,0,0,0,\n0,867,795,0,0,0,0,970,1977,0,0,0,0,0,0,0,1148,0,775,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,970,0,0,0,0,0,0,0,0,0,665,71,0,0,0,0,827,0,0,0,0,0,0,0,0,0,\n0,479,0,0,0,0,0,0,0,0,99,607,0,0,0,0,0,0,0,1960,0,0,0,793,0,0,871,41,0,0,241,94,\n0,0,0,0,209,0,0,1497,0,0,0,0,0,0,0,0,0,98,0,0,0,463,0,0,0,0,291,0,0,0,0,0,0,0,0,\n0,0,984,0,0,0,0,0,205,0,0,0,0,0,0,205,42,0,801,0,0,0,0,0,635,0,0,533,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,371,0,1282,0,0,0,825,0,0,0,0,0,0,0,0,0,357,879,467,0,317,0,0,\n0,0,0,0,0,924,0,0,0,0,849,1795,0,0,0,0,895,1799,43,0,0,0,0,0,0,0,0,0,0,1820,0,0,\n0,0,0,0,0,525,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,110,0,493,0,174,417,0,0,\n0,0,0,583,733,0,0,0,0,0,0,481,215,0,0,0,0,477,0,0,0,0,0,0,0,0,308,0,0,0,0,0,0,0,\n0,297,126,0,0,361,1551,0,0,0,0,0,0,871,1807,0,0,0,0,0,1307,0,685,0,0,0,0,0,0,0,\n797,0,858,0,565,0,0,0,0,0,0,0,0,0,0,0,0,434,252,826,0,0,0,0,0,0,791,0,0,0,0,509,\n231,178,601,0,0,0,0,0,0,0,0,43,1591,0,0,0,0,0,1683,0,0,0,0,45,0,0,0,0,0,0,0,0,0,\n0,1120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,556,494,0,398,0,0,0,1030,0,0,0,0,0,0,\n168,0,0,0,0,0,0,0,0,0,0,973,0,642,0,0,0,0,0,0,0,0,0,1615,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,378,594,0,1093,0,679,112,0,0,0,0,1492,540,1374,714,\n1486,0,0,0,0,825,1511,0,0,0,0,0,0,0,0,0,0,0,0,0,952,0,0,736,143,0,700,0,1540,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1557,0,0,0,860,990,0,0,0,807,0,0,0,0,0,131,\n515,0,646,0,0,0,0,117,728,508,121,0,0,0,0,0,0,357,0,0,0,0,0,0,237,0,0,0,0,0,0,0,\n0,0,1784,0,0,0,0,0,0,0,0,0,0,0,713,348,1536,0,738,0,0,0,0,0,0,0,434,0,0,0,0,0,0,\n366,1877,39,0,0,0,0,0,0,580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,873,0,0,0,0,171,0,625,\n550,107,343,943,0,0,0,0,0,0,0,768,0,0,0,0,0,0,0,799,0,0,0,894,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,1673,0,0,0,0,0,0,0,0,0,0,0,1052,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n272,0,441,0,0,3,9,0,0,0,1182,0,1346,0,0,0,0,0,0,0,0,682,0,0,1004,24,0,0,968,0,0,\n0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,185,0,0,0,578,\n474,0,0,0,0,0,0,0,0,0,0,0,0,0,0,113,530,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,556,0,0,0,0,0,0,16,1317,0,0,97,0,0,0,703,0,0,0,0,0,0,0,0,892,0,0,0,1571,0,0,\n426,186,0,1101,0,0,0,0,0,0,0,0,937,585,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,644,291,\n0,0,0,0,749,0,162,0,0,381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,762,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,628,21,0,0,0,0,0,0,0,0,919,0,0,0,0,0,0,0,0,0,\n633,0,0,0,0,332,0,0,0,0,0,0,0,0,0,1489,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,832,398,0,645,0,0,0,13,0,0,0,0,0,0,0,0,0,0,20,0,800,0,0,0,0,0,0,0,0,0,\n0,0,0,0,1993,0,0,0,0,769,0,0,0,665,0,0,0,0,0,0,0,0,0,0,1426,0,0,0,0,60,0,0,0,\n641,1874,0,644,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1757,0,0,0,0,0,937,0,1652,0,654,0,\n0,0,0,0,0,0,527,0,0,0,0,0,0,0,0,0,0,0,0,0,226,0,0,0,0,0,1486,0,0,0,0,0,0,0,0,0,\n0,0,325,0,0,0,0,0,0,0,1345,0,0,91,0,404,0,0,0,0,0,0,0,0,0,0,0,0,973,0,0,0,0,0,0,\n0,1176,0,549,0,0,0,0,0,0,0,0,0,0,976,0,0,0,0,0,21,0,0,0,0,0,51,0,0,0,0,314,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,198,6,0,1093,0,0,0,0,0,0,0,0,0,\n0,0,0,0,1776,0,0,0,0,0,1528,0,419,0,0,0,0,0,0,0,0,76,138,0,0,0,0,638,29,0,0,0,0,\n0,0,0,1418,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1710,0,0,0,0,0,\n0,0,0,0,0,0,0,532,23,0,0,0,0,0,0,0,862,0,0,946,592,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,70,0,0,0,0,0,0,0,0,0,812,0,0,0,76,0,0,988,0,442,0,0,0,896,0,0,0,0,0,0,\n483,0,0,0,0,1709,0,0,0,0,0,0,119,0,0,0,117,0,309,0,0,0,0,0,596,976,0,0,0,0,0,0,\n0,0,0,0,0,768,0,0,0,0,0,0,0,0,0,518,0,0,0,0,0,0,0,0,0,0,0,0,0,0,863,0,0,0,24,\n145,1020,0,0,1984,0,0,0,0,0,0,0,658,0,0,0,0,0,0,0,0,0,0,106,1827,0,1010,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,582,87,0,0,0,0,0,0,0,267,0,0,0,703,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,496,0,0,0,0,1121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,249,561,0,0,0,0,0,\n0,0,760,0,0,154,0,0,0,255,0,419,323,0,0,0,0,0,368,0,0,0,0,0,0,0,0,0,0,522,0,0,0,\n0,0,0,0,551,562,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,92,0,0,0,0,\n0,0,0,284,525,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,958,0,0,594,0,0,0,0,0,0,6,479,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,61,0,0,0,0,0,0,0,820,1641,0,1556,0,0,0,0,0,0,0,302,0,0,\n0,0,0,148,0,0,676,0,0,0,0,0,0,1674,0,0,0,0,0,0,178,0,0,0,0,0,0,0,94,389,0,0,0,0,\n91,8,0,0,0,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,0,0,0,747,0,0,0,0,0,0,0,1746,0,0,0,0,\n0,24,0,1352,158,1530,0,0,718,130,280,1401,0,0,0,0,0,1946,8,0,0,0,0,1607,0,0,0,0,\n0,0,882,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,417,0,0,0,1597,633,433,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,234,0,0,0,0,0,0,0,0,680,1950,0,0,0,0,249,5,0,0,0,\n0,0,0,0,0,0,1216,0,1773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,509,180,0,0,0,0,0,0,0,1002,\n0,0,0,0,0,0,0,0,0,0,0,0,0,931,0,0,0,0,0,0,0,0,747,943,0,1837,0,0,0,0,0,0,0,641,\n0,0,0,0,280,0,0,0,5,0,0,0,0,0,72,545,0,0,0,0,0,0,0,0,0,742,0,0,254,151,872,0,0,\n0,0,0,0,0,0,0,0,0,0,921,0,0,517,833,0,1680,0,0,436,251,584,0,0,0,0,0,0,0,0,0,0,\n0,24,500,0,0,0,0,0,0,0,0,195,1775,514,389,0,0,0,0,0,0,0,743,0,0,0,0,0,0,292,0,0,\n0,227,1283,774,1805,0,0,0,0,0,0,0,0,0,0,119,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0,913,\n1910,0,0,0,1826,490,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1162,700,30,\n0,0,0,721,839,0,0,0,617,0,0,0,0,0,0,0,0,0,169,428,0,0,0,0,0,1648,637,1205,0,0,0,\n1596,0,0,4,266,0,0,0,0,0,0,0,0,0,0,0,862,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,\n0,279,157,391,604,0,0,713,945,877,973,0,0,0,0,0,0,0,0,0,0,0,0,0,0,859,567,628,\n1846,0,0,0,0,0,0,0,0,0,762,0,0,191,0,0,0,0,298,0,0,767,909,0,0,0,0,0,0,0,795,0,\n0,301,0,0,1970,0,0,0,0,0,0,0,0,0,1236,0,0,0,0,0,0,644,369,15,0,160,71,0,0,0,0,0,\n1447,0,0,0,0,0,0,0,0,735,1255,76,0,0,0,0,0,0,0,0,0,0,474,0,0,0,0,0,0,0,0,0,0,\n841,0,0,0,0,0,0,0,0,0,0,836,0,0,0,0,0,1622,0,0,735,0,0,0,0,1601,804,1390,394,0,\n0,0,0,0,0,96,0,289,0,0,35,688,0,0,0,667,0,513,0,0,0,0,0,0,0,2034,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,704,0,1524,0,1078,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,306,\n0,0,0,0,0,0,0,431,0,1196,0,0,54,0,15,1448,0,1418,0,0,0,0,0,0,0,0,0,907,0,0,0,0,\n0,0,194,1767,0,0,0,0,0,840,0,900,0,0,0,0,0,0,0,0,0,0,0,1436,0,0,0,0,642,1560,0,\n0,0,0,0,0,94,386,0,0,0,0,0,0,0,0,0,0,830,416,0,0,20,731,0,0,0,0,0,0,0,0,697,0,0,\n662,0,0,0,0,0,0,0,0,0,861,0,0,0,0,0,0,0,871,671,864,0,928,7,0,332,0,0,0,0,1055,\n0,0,0,0,0,0,986,0,0,0,0,0,44,76,0,0,0,0,0,0,0,0,0,0,300,0,0,0,0,0,0,0,175,518,\n831,1108,0,0,0,836,0,1852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,843,1804,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,246,0,0,0,610,202,0,0,36,0,0,0,240,654,13,0,0,0,0,0,0,0,\n0,391,0,403,0,0,0,0,0,0,0,0,0,0,75,0,366,815,0,0,631,0,0,0,0,0,0,0,0,345,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,952,0,0,0,0,0,0,0,0,0,0,0,673,35,662,0,287,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,5,34,0,0,0,0,0,0,0,0,151,0,427,0,0,382,0,0,0,329,0,0,279,0,0,0,\n0,0,0,0,0,0,0,906,0,0,366,843,0,1443,0,1372,992,0,36,123,0,649,0,0,0,0,0,767,0,\n1018,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,995,0,0,0,0,0,0,0,72,368,0,0,1345,0,0,0,\n589,0,0,0,0,0,0,0,0,0,1988,0,0,220,541,0,0,0,686,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,32,196,0,0,0,0,0,0,0,0,0,0,0,0,0,381,0,0,0,0,0,0,0,0,0,1452,0,\n0,0,616,0,0,0,0,0,0,0,0,0,1229,0,0,0,0,0,0,0,0,0,0,667,120,0,0,0,0,0,0,0,1146,0,\n0,0,0,0,0,0,0,0,0,0,352,0,0,0,0,0,293,0,0,0,0,0,0,0,0,0,0,0,0,0,935,0,1050,0,\n147,88,0,0,923,0,0,0,0,0,934,0,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,341,222,0,0,0,0,0,0,0,0,0,0,293,0,0,0,0,0,0,0,0,0,0,0,0,\n637,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1159,0,0,0,847,0,0,0,0,0,0,683,0,867,944,0,0,\n0,0,0,1809,0,0,0,0,0,0,0,0,0,0,395,170,0,0,0,0,0,0,0,0,0,0,618,535,0,1625,0,0,0,\n0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,778,0,0,0,0,0,46,0,2032,0,0,37,\n1458,0,938,363,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,314,0,0,0,0,0,0,889,0,0,0,0,0,0,0,\n0,0,0,0,462,0,0,0,0,525,0,0,23,0,0,0,0,0,0,0,0,0,0,0,676,0,0,0,0,0,0,0,0,0,0,0,\n0,498,725,0,0,0,0,7,0,0,0,0,773,0,0,0,164,0,0,0,0,0,0,0,0,936,583,659,1462,0,\n220,0,0,0,0,803,0,0,544,119,0,0,0,0,0,0,0,0,0,0,0,181,176,0,1192,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,1878,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0,0,0,0,\n944,0,0,0,0,0,0,0,273,0,0,0,0,0,855,0,0,0,0,5,127,0,0,0,0,0,0,0,0,752,230,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,162,0,654,48,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,197,\n0,0,0,0,0,0,0,963,0,0,0,0,0,0,0,0,0,0,858,0,0,0,0,0,0,0,0,0,0,676,1978,0,0,102,\n972,0,0,0,0,0,0,0,361,0,461,0,0,0,472,0,0,0,0,0,0,0,0,0,0,0,0,0,0,747,905,0,0,0,\n155,0,0,0,0,0,0,0,0,0,0,319,163,0,0,0,0,0,0,0,0,0,848,0,0,36,631,0,0,0,0,0,1769,\n0,0,0,0,0,144,0,0,0,0,0,0,0,0,0,0,369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,555,247,0,0,\n996,0,0,189,0,0,0,0,0,0,0,0,0,0,280,0,0,0,0,0,0,0,0,0,0,0,526,746,0,0,345,0,0,0,\n1017,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,651,428,0,0,0,1162,230,327,546,792,0,0,0,\n1203,0,0,0,0,0,0,0,0,0,672,189,0,0,0,0,0,0,99,0,0,0,298,0,0,0,0,0,0,555,397,0,0,\n0,0,0,1157,0,0,0,0,0,0,0,0,0,0,398,1523,0,366,0,0,787,0,0,0,282,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,157,0,941,0,0,0,0,0,1336,0,0,116,0,0,0,0,0,0,787,0,0,0,0,0,0,0,0,0,\n0,170,160,0,1815,0,0,0,0,0,866,0,0,0,0,0,0,0,0,0,689,0,0,0,0,820,0,498,108,0,0,\n0,1119,0,0,0,244,609,1005,0,581,0,0,0,0,0,895,0,0,0,1898,0,0,0,0,0,926,0,0,0,0,\n0,0,0,0,0,0,0,0,0,538,496,294,301,0,0,0,18,0,0,757,0,0,0,0,0,1263,0,820,0,722,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2028,0,0,0,0,124,1875,0,0,0,881,0,0,0,1348,\n0,0,0,0,0,0,0,911,0,954,0,0,0,0,414,0,0,0,0,517,0,0,0,0,0,816,0,0,0,0,0,0,0,0,\n713,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,593,150,0,0,0,0,\n0,553,0,0,0,0,0,0,0,0,0,0,108,0,0,0,0,420,0,0,0,0,0,0,0,0,0,0,0,1777,0,0,55,493,\n0,0,81,0,321,980,0,0,0,0,0,0,0,0,0,0,0,0,0,0,362,112,0,74,0,0,0,0,0,0,0,625,0,0,\n0,0,0,0,377,16,0,0,61,281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,1031,0,0,0,0,0,0,51,0,\n0,0,0,0,0,0,211,309,15,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,789,173,0,439,9,648,\n0,0,294,0,0,0,0,0,0,0,374,8,0,1099,0,0,0,0,0,0,0,575,0,0,0,518,0,0,0,702,0,0,0,\n0,0,0,87,0,0,0,438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,464,122,0,0,0,1802,0,0,0,0,\n0,0,499,0,0,0,87,476,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,840,283,0,0,0,0,1620,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,609,1160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,600,\n323,372,0,0,0,0,471,722,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,\n477,1304,0,1774,0,0,88,0,438,12,0,0,0,0,0,0,0,0,671,997,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,639,22,0,0,782,681,0,0,0,0,0,0,0,0,0,0,1013,664,0,942,0,1349,0,0,0,0,0,0,0,\n0,0,0,0,0,356,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,215,289,0,1975,\n109,450,0,0,0,0,0,0,0,0,0,0,705,0,0,664,0,0,0,0,0,0,0,1238,0,0,318,0,0,0,0,0,0,\n0,0,0,0,0,0,0,960,1872,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,0,0,0,0,0,0,0,0,0,239,\n777,0,26,0,0,0,0,0,0,0,0,0,0,0,0,375,414,0,17,0,0,0,1350,0,955,0,0,0,0,0,0,0,0,\n887,960,0,0,0,0,0,0,0,0,0,0,708,710,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,919,0,0,0,\n0,502,280,7,45,0,0,0,0,777,0,0,0,0,410,0,1110,0,0,0,0,0,0,414,341,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,787,0,0,0,436,0,0,0,0,0,0,0,1707,613,377,96,0,0,0,0,451,\n0,0,0,0,0,0,0,0,0,0,0,0,0,680,0,483,916,0,0,0,0,0,0,937,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,739,0,0,0,0,0,0,0,0,82,0,0,663,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,128,0,0,0,0,0,0,0,0,1087,0,0,0,0,0,0,0,503,0,0,0,0,0,0,9,113,104,324,0,460,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,935,702,434,485,1014,949,423,0,900,\n0,0,0,0,0,0,0,2018,574,0,0,0,0,0,0,0,0,0,0,0,0,1206,0,0,0,0,0,0,0,0,38,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,1022,0,0,0,0,143,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,2029,0,0,0,0,0,0,0,0,0,0,0,0,523,0,0,0,0,0,0,625,0,0,425,37,0,0,0,1943,0,0,0,\n0,0,765,0,0,0,0,0,0,0,0,0,0,551,0,0,0,0,0,0,0,0,0,0,0,0,168,0,0,1010,0,0,1994,0,\n0,0,91,0,0,0,0,532,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1884,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,240,15,0,0,0,1227,0,1534,0,0,0,0,0,0,0,0,0,0,0,0,0,0,392,0,\n0,0,0,0,0,0,0,0,0,0,0,655,562,395,0,0,0,501,1019,0,0,0,0,509,267,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1099,0,0,0,0,0,0,948,0,0,0,0,0,0,0,\n462,114,0,0,258,404,0,1717,0,0,0,0,82,1061,0,724,0,0,0,0,0,1133,0,0,0,0,0,0,\n1021,841,0,1021,0,0,0,0,0,0,0,0,0,0,488,373,37,0,0,0,0,564,0,0,0,0,0,513,0,0,0,\n825,0,0,899,0,0,778,0,0,12,1417,0,1116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,545,0,5,\n0,0,0,0,0,0,0,192,0,0,763,0,0,0,0,0,0,0,755,759,0,0,0,0,0,0,0,0,0,370,0,1237,0,\n0,0,0,0,0,298,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,\n0,0,0,0,814,991,0,757,57,0,0,0,0,0,0,0,0,0,540,0,0,0,0,608,0,0,0,0,0,0,0,0,1014,\n0,0,0,902,0,0,0,0,553,1668,0,0,0,0,0,0,0,0,0,559,60,0,0,0,0,0,511,0,0,675,0,0,\n156,0,0,0,0,0,0,709,0,698,0,0,0,1745,0,0,0,0,0,0,0,0,0,714,0,0,0,0,0,0,0,0,206,\n8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,776,0,0,0,0,0,0,0,0,0,1272,0,0,\n0,0,0,1059,0,0,0,0,0,0,406,0,0,0,0,0,0,0,0,0,0,947,0,0,0,0,0,0,168,0,0,0,0,0,0,\n870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,554,0,0,0,0,784,908,0,0,0,0,0,0,\n0,396,358,0,0,0,0,0,0,0,0,2,228,0,0,0,0,0,0,0,0,0,0,0,845,14,0,716,1820,594,0,\n81,1428,0,161,0,782,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,998,0,\n0,0,0,0,0,0,0,0,0,0,0,1043,0,1496,0,0,0,0,0,0,0,0,781,0,0,0,0,0,0,0,817,1114,0,\n1814,958,0,0,0,0,812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,236,643,0,0,0,0,0,0,0,0,0,1172,0,0,0,0,0,0,0,0,0,1338,0,0,0,\n0,0,0,0,0,0,0,0,54,0,0,0,256,0,0,351,0,955,1885,0,469,0,0,0,1270,0,744,0,313,0,\n0,0,0,0,0,0,0,402,969,0,0,0,0,0,0,50,0,0,0,0,572,0,0,0,0,847,0,0,0,0,0,0,0,248,\n43,0,369,0,0,0,0,0,0,0,0,0,0,0,0,0,766,0,363,0,0,0,0,0,0,0,0,0,0,0,678,0,0,409,\n258,82,249,0,0,0,0,0,0,0,0,0,0,0,0,32,393,0,788,0,0,0,1281,509,1968,0,0,0,0,39,\n291,0,0,0,589,0,0,54,1059,0,0,0,0,0,0,824,0,0,0,0,0,0,0,0,0,0,1005,0,1598,0,0,0,\n0,0,919,0,0,0,0,0,0,0,0,52,132,0,0,0,0,0,328,0,0,0,0,173,0,0,0,0,0,65,1411,0,0,\n0,0,0,0,0,0,0,0,442,0,842,0,0,0,0,0,0,0,0,0,534,0,0,0,0,0,0,0,0,0,0,0,0,0,845,\n210,0,0,0,0,0,0,0,0,892,0,0,223,0,0,0,0,529,0,0,0,807,0,137,218,0,1444,0,0,0,0,\n0,332,661,0,0,0,0,0,0,0,76,1517,0,0,0,0,0,0,0,0,0,0,0,418,0,0,0,0,0,0,0,0,481,\n379,0,0,0,0,0,149,18,0,0,0,0,0,0,0,0,742,304,142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,799,925,195,51,0,0,0,0,688,0,0,0,0,697,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,1169,751,0,0,0,452,929,0,221,0,1437,0,0,0,0,955,1251,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,132,0,0,0,0,0,865,0,0,0,0,0,0,0,767,\n672,42,0,0,0,1050,0,0,0,0,0,0,0,0,368,44,0,0,0,0,0,0,0,570,29,0,0,0,0,0,0,227,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,522,0,0,0,0,0,0,0,1529,0,0,0,0,0,0,739,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,1667,0,0,0,0,0,0,132,511,0,138,208,1020,0,0,23,565,0,344,0,0,0,\n0,0,922,0,0,0,0,0,0,0,240,0,0,415,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,402,0,0,754,31,716,0,982,731,0,0,0,0,0,0,0,888,0,0,0,803,847,0,0,823,\n0,0,0,0,0,0,785,0,0,2,0,0,0,0,0,0,0,532,0,0,681,0,0,314,0,384,684,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,649,447,0,1818,1007,0,321,0,66,360,0,0,0,385,0,0,0,0,0,0,\n0,900,73,254,0,0,0,0,683,1959,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,86,0,0,725,0,0,0,0,0,196,0,0,0,0,0,831,0,0,0,0,723,0,0,0,0,0,994,627,0,0,\n0,0,0,0,0,0,0,0,764,66,0,0,0,0,205,36,0,0,0,0,0,0,0,950,0,0,0,887,111,0,0,831,\n388,165,0,0,0,0,0,155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,780,755,0,0,0,0,898,146,0,0,0,\n0,0,0,0,45,7,0,0,0,0,0,0,0,0,607,0,0,0,0,0,0,65,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,\n621,600,0,367,0,0,0,0,0,0,0,561,0,559,0,585,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,672,157,0,0,0,0,714,0,0,0,\n0,0,456,0,925,0,0,0,0,0,0,0,0,19,0,0,0,0,1473,0,0,0,0,0,0,0,0,0,0,113,0,0,0,0,0,\n0,0,0,0,0,0,0,0,69,463,0,0,82,193,2,471,0,0,0,0,633,0,0,0,0,0,0,1148,129,1392,\n542,803,0,0,0,0,0,0,0,0,0,0,0,0,438,0,0,0,0,0,0,875,0,0,0,0,0,237,0,0,0,0,0,0,0,\n65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,563,0,0,0,9,444,0,0,43,1260,0,0,0,0,0,0,\n971,0,0,699,0,0,0,0,0,1116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,829,242,0,\n0,593,0,0,0,0,0,0,0,0,201,36,224,0,0,0,0,0,0,1430,0,1806,0,523,0,0,212,1889,0,0,\n0,827,0,0,0,0,0,2043,136,242,0,0,0,0,0,0,284,148,10,0,0,0,0,0,0,1249,0,0,0,807,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,94,0,0,0,494,0,0,0,0,0,0,0,0,1510,0,0,0,0,0,\n0,0,0,0,0,505,1306,0,0,764,268,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1703,0,0,0,0,159,964,583,0,0,0,\n0,0,0,515,0,0,854,0,0,0,0,0,0,0,0,0,0,0,0,1123,0,0,0,0,0,0,0,136,0,0,0,0,0,1782,\n0,0,44,1287,0,0,0,0,0,732,0,0,0,0,313,679,0,0,316,0,0,0,0,595,0,0,0,0,0,0,753,\n147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,0,0,0,0,414,0,1762,0,0,0,0,0,0,0,0,\n0,0,0,599,0,0,0,0,0,0,0,0,0,1749,0,0,0,1627,0,488,0,0,0,0,0,83,0,0,0,0,676,0,0,\n1639,0,0,0,0,0,0,0,0,0,278,0,0,0,0,0,0,97,0,14,1085,0,0,0,0,0,0,781,388,0,849,\n59,229,0,0,0,0,0,1115,0,0,0,0,108,0,0,0,0,700,0,0,0,0,0,0,0,0,0,1414,0,0,0,0,0,\n0,0,0,0,0,0,0,0,660,737,1035,0,0,0,0,0,0,521,690,0,0,0,0,0,0,0,0,0,0,0,0,272,0,\n0,0,0,0,0,0,0,0,0,1744,0,0,0,0,0,0,128,733,0,0,277,0,0,0,0,0,0,0,0,0,4,0,0,0,0,\n0,0,0,0,0,0,0,0,0,936,1981,40,0,0,0,0,0,0,0,0,775,0,0,0,0,0,0,0,0,0,306,0,0,0,0,\n0,0,0,979,0,0,0,0,0,611,0,0,0,0,0,178,0,0,0,1969,0,0,0,0,0,0,0,664,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,390,0,0,0,1510,0,0,0,0,0,0,0,0,0,0,0,493,0,0,37,0,0,0,0,724,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,1537,0,0,168,473,0,0,0,105,0,0,0,0,\n627,438,0,0,0,0,0,0,0,0,0,0,11,1256,0,0,0,1626,0,779,0,0,0,0,25,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,308,0,0,0,0,0,741,0,671,0,0,0,0,649,150,0,0,99,521,0,0,3,339,0,0,0,\n543,0,0,0,0,0,0,0,0,0,1358,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,234,155,\n0,0,0,0,0,0,0,1628,0,766,0,0,0,0,0,0,0,0,0,0,0,0,0,829,0,0,0,1445,0,0,0,486,0,0,\n0,0,2,1635,0,0,0,0,558,0,0,0,0,0,0,0,0,0,0,1461,0,0,0,0,0,599,0,0,0,0,0,0,0,0,0,\n1376,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,93,0,0,0,0,0,0,447,0,0,66,1432,0,0,0,0,\n0,0,307,0,413,609,0,0,0,930,0,0,0,0,21,939,0,0,0,0,0,962,4,651,0,0,0,0,15,579,0,\n0,0,0,0,597,0,0,0,0,0,981,0,0,0,545,0,0,0,0,0,0,0,1558,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,800,17,0,0,17,0,907,0,0,0,110,0,0,0,53,458,0,1983,0,0,0,0,0,0,0,0,0,0,443,0,\n0,0,0,0,0,0,0,0,0,0,924,1844,0,1232,0,0,0,0,70,519,0,993,0,0,0,0,0,0,14,530,0,\n907,0,0,0,0,0,733,0,0,0,0,0,0,0,0,55,0,188,531,56,0,0,1693,0,0,0,0,0,0,0,0,441,\n0,192,928,0,0,0,0,0,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1525,0,259,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,512,185,0,464,1603,0,0,0,0,0,0,0,0,0,0,0,1113,\n284,720,0,0,722,0,0,0,0,0,13,0,0,0,0,0,0,0,4,289,43,0,0,0,0,0,0,1694,0,0,0,0,\n193,0,0,0,0,409,0,0,0,0,0,0,0,0,0,0,0,0,308,0,0,1863,0,0,0,0,0,0,0,0,0,790,0,0,\n745,1002,0,0,0,0,0,0,0,0,0,289,68,477,13,0,0,0,0,0,0,0,0,0,0,609,0,0,0,0,0,0,0,\n0,0,0,0,367,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,528,0,0,0,0,0,0,0,0,0,694,58,\n548,0,0,0,0,0,0,687,0,0,0,0,1749,0,0,0,0,0,0,0,0,1004,661,0,0,0,0,0,0,445,0,0,0,\n74,0,0,0,0,213,0,0,0,0,0,0,0,0,0,0,0,0,0,834,0,0,189,1672,0,0,0,0,0,0,0,1548,\n192,0,0,0,0,0,0,0,0,0,0,0,0,0,32,751,0,78,0,0,0,0,0,0,544,1602,105,473,0,0,0,0,\n0,0,156,1949,0,1779,0,0,0,0,0,0,0,0,0,0,0,763,0,0,0,0,0,0,0,0,29,0,0,0,0,0,0,0,\n0,0,0,883,0,0,0,0,0,0,0,488,0,617,0,0,50,0,694,1518,785,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,546,0,0,0,0,0,0,0,0,0,0,22,0,0,0,0,1016,0,0,0,577,0,0,0,0,0,0,\n184,935,114,720,0,0,100,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,95,14,0,969,0,0,0,0,0,0,0,\n727,0,1021,0,0,0,0,0,1190,0,0,0,0,0,0,0,0,0,0,0,0,0,153,0,0,0,0,0,0,0,0,0,798,0,\n587,0,0,695,42,0,1929,141,957,0,465,7,908,0,0,450,148,0,0,0,1166,0,0,0,0,0,0,0,\n0,0,0,0,0,253,0,1003,0,0,0,0,0,0,0,0,0,0,0,46,0,0,879,0,806,0,1868,0,0,0,0,0,\n1846,0,0,0,730,0,0,0,0,0,0,0,965,0,0,0,0,506,0,0,0,10,0,0,0,22,0,0,0,0,0,0,0,0,\n0,0,0,0,0,960,296,0,0,0,0,0,0,0,0,0,0,0,587,0,0,0,0,20,0,0,0,32,982,0,0,0,0,0,0,\n0,0,0,0,941,0,0,0,0,435,0,0,0,0,0,0,71,419,0,0,0,0,0,0,688,740,94,345,0,0,679,\n582,0,0,0,0,0,0,0,945,0,0,0,0,0,0,0,0,0,0,0,0,539,0,684,1993,0,0,0,659,0,583,0,\n803,0,704,0,0,0,0,0,198,181,347,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,481,405,203,0,0,99,826,0,0,0,0,0,0,0,492,0,408,0,0,0,0,0,0,0,0,0,0,4,0,0,\n0,0,665,349,137,0,0,0,0,612,1270,0,0,0,0,0,371,0,0,0,826,0,0,0,0,21,1535,858,\n374,0,0,0,0,0,0,311,0,0,0,991,1968,0,0,0,0,494,1647,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,769,0,0,0,0,0,642,0,0,157,123,0,0,0,1435,0,0,0,0,0,0,0,0,0,0,79,0,0,0,\n0,0,0,1425,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106,393,486,1690,0,0,0,0,\n0,0,0,0,0,0,0,0,756,184,0,0,0,1382,0,0,0,175,0,1493,0,1007,0,0,0,0,0,0,0,0,0,0,\n0,219,0,0,0,0,515,99,0,851,0,0,0,0,0,1278,0,0,0,0,0,0,0,1000,982,0,762,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,910,1819,0,0,0,0,0,0,906,0,0,0,0,0,0,0,0,0,0,1730,0,0,\n0,0,0,0,0,0,0,0,0,1185,0,0,0,0,0,0,0,0,40,0,0,0,147,0,0,0,0,0,0,0,0,0,0,0,0,0,\n650,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,30,0,553,0,0,20,597,0,1614,0,0,0,0,0,327,\n49,0,0,0,0,0,0,0,78,0,0,786,134,0,0,0,12,496,0,0,0,0,0,0,0,0,0,0,42,204,0,614,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,147,247,0,0,0,0,942,0,0,2023,0,0,0,0,\n0,0,67,285,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1309,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,532,0,0,0,0,0,0,0,\n1692,0,0,0,0,55,1704,0,0,0,0,988,0,0,0,223,0,0,0,0,0,0,0,57,1123,0,0,0,0,0,1764,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2015,0,0,0,1599,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,129,0,0,0,0,0,0,0,0,0,0,0,534,0,0,0,0,0,0,0,0,0,0,0,\n0,0,504,621,1248,321,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1397,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,441,75,0,0,0,0,0,0,0,0,0,0,841,0,0,0,0,0,693,0,650,314,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,913,0,0,0,0,0,0,0,0,0,0,0,0,0,0,880,0,475,0,\n0,1016,179,602,111,329,0,0,0,1864,0,0,0,0,846,1888,0,0,780,0,0,0,82,0,0,0,0,821,\n0,0,0,0,0,0,0,0,0,0,0,956,112,0,0,0,261,455,0,0,0,0,0,0,337,385,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,184,1865,0,0,721,16,0,486,0,0,0,265,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,621,0,0,0,0,0,0,0,0,234,0,0,815,0,0,743,\n1987,205,197,0,0,0,0,0,0,0,0,0,314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,219,452,589,0,\n176,333,0,0,0,0,0,0,0,1110,47,0,0,0,0,0,0,0,0,0,0,0,864,0,0,300,0,1237,0,0,0,0,\n0,0,0,0,0,0,0,1685,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,135,395,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,631,0,0,0,0,0,0,835,0,0,0,606,459,0,979,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,612,0,0,0,0,0,0,0,0,158,372,0,854,0,0,0,0,0,\n0,0,1492,0,0,0,833,0,0,0,0,0,0,0,1739,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n195,0,0,0,0,0,0,0,0,730,1997,0,0,0,0,0,0,0,0,61,0,0,0,0,0,0,0,266,751,0,0,0,0,0,\n0,0,821,0,0,0,715,0,0,0,868,0,959,0,0,0,0,0,0,0,0,0,0,0,1053,0,0,0,950,0,1081,0,\n1595,0,0,0,0,59,0,0,0,0,0,0,0,0,0,0,47,684,0,0,0,0,0,0,1606,0,777,0,1020,0,0,0,\n1094,0,0,0,0,0,0,0,350,0,0,0,0,0,0,242,1812,0,0,0,967,0,0,0,473,286,0,0,0,0,0,0,\n798,629,222,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,513,337,306,0,0,0,0,0,0,0,0,0,\n146,0,0,1646,0,0,0,0,0,465,0,0,0,525,0,0,0,0,0,0,299,165,0,0,0,0,0,0,0,1064,0,0,\n0,0,0,596,0,0,0,0,0,0,0,0,0,0,0,0,0,0,238,1741,0,1233,451,1824,0,0,0,0,733,495,\n0,0,0,0,0,1204,0,0,0,559,341,0,224,21,0,0,0,0,0,0,0,0,97,1446,0,0,0,0,0,0,0,729,\n0,0,565,727,0,1948,0,0,0,519,0,0,0,0,0,0,0,0,0,1193,0,0,0,0,0,0,790,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,323,2,201,0,0,59,0,0,34,0,896,961,0,1285,0,0,46,0,479,0,0,\n0,0,549,0,663,0,0,0,0,0,783,65,682,0,0,0,0,0,11,0,0,0,0,0,522,0,0,0,52,0,0,0,0,\n0,383,0,0,0,0,0,0,0,0,127,0,0,0,0,0,397,194,0,0,635,0,0,0,0,0,0,0,0,0,0,975,0,0,\n0,0,0,0,0,0,0,0,116,0,51,0,0,858,0,1075,535,448,0,0,0,0,0,610,0,0,0,0,0,0,0,0,0,\n0,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,267,673,319,94,92,0,551,0,0,218,\n1406,69,256,0,0,952,1980,0,833,0,0,0,0,0,0,0,0,0,0,0,0,39,0,0,0,0,0,0,0,81,0,0,\n0,352,634,0,0,0,0,0,618,0,0,0,0,0,0,73,339,0,0,0,0,0,0,0,0,0,0,0,0,0,0,169,759,\n0,0,0,0,0,0,0,0,0,0,0,0,0,1075,0,0,0,0,0,0,482,649,0,0,0,0,0,0,0,0,386,336,0,0,\n0,1035,0,0,0,0,0,0,0,0,0,0,0,924,0,73,0,0,0,0,0,1971,0,0,0,0,0,0,0,0,0,1344,0,\n501,0,0,0,0,0,0,0,0,46,799,0,0,0,0,0,0,0,276,0,0,0,0,0,0,0,770,0,0,0,0,0,0,0,0,\n0,0,0,0,0,158,0,0,0,0,0,1432,0,0,0,0,0,0,0,0,0,0,25,0,0,2001,0,0,0,0,0,0,0,0,0,\n0,0,0,0,478,0,0,0,0,0,0,91,1461,211,602,0,0,0,0,0,0,0,0,0,1068,0,0,124,567,0,0,\n0,1006,0,0,0,0,0,0,0,0,0,735,812,0,0,323,0,0,0,304,0,0,0,0,0,0,0,0,0,148,0,0,0,\n0,0,0,0,0,0,523,0,0,144,730,0,0,981,0,0,111,0,0,132,0,0,0,0,0,0,890,0,0,0,0,0,\n444,0,1787,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,2041,932,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,937,0,995,0,0,255,0,0,138,863,965,0,0,631,0,0,0,0,1394,16,652,0,0,0,0,0,0,\n0,0,0,0,0,0,0,897,0,321,0,0,0,0,0,922,0,619,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,844,0,0,0,0,0,0,1659,0,1100,0,0,0,1173,0,1930,268,251,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,390,711,0,0,0,0,0,0,0,0,0,0,0,0,0,744,0,0,0,0,0,0,0,0,0,624,0,0,0,\n1998,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1125,0,0,0,594,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,268,0,0,0,0,0,0,0,563,0,0,0,0,0,0,0,0,2,39,0,0,0,1332,0,0,0,0,0,\n0,0,508,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66,796,0,0,0,0,527,0,0,0,0,98,0,0,576,0,\n0,0,0,0,122,0,276,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,645,0,0,0,0,\n0,0,0,0,0,0,0,290,0,0,762,1292,0,0,0,1315,0,1955,0,0,0,0,0,0,0,0,0,0,210,131,0,\n0,0,0,797,0,38,0,11,488,0,936,0,441,0,0,0,0,0,595,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n991,0,0,0,0,0,0,0,0,0,0,0,653,0,523,0,0,0,903,0,0,0,0,0,0,0,0,0,0,0,0,80,0,0,0,\n0,0,0,0,0,0,432,0,0,314,0,0,0,0,232,1368,534,0,0,0,0,0,27,0,0,0,12,0,0,0,0,0,0,\n0,0,0,264,736,0,1657,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1117,0,127,0,0,0,1208,0,1294,\n0,0,0,0,364,0,0,0,0,0,125,1334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,792,0,0,0,0,0,0,0,\n849,699,0,0,0,0,0,968,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1446,\n124,397,0,0,0,0,0,0,0,0,0,0,0,641,0,0,0,0,0,0,0,0,0,0,0,0,127,346,0,0,517,75,0,\n0,0,0,0,0,0,0,83,0,0,0,0,0,0,1031,0,0,0,0,0,0,0,1470,0,954,0,0,345,304,410,0,0,\n0,0,734,0,0,0,0,0,1822,0,0,0,1798,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,161,\n1865,69,0,0,0,0,0,0,922,0,0,0,0,0,0,0,0,0,0,0,541,0,627,0,0,0,0,0,0,0,0,0,166,0,\n0,0,0,0,0,0,0,0,849,0,0,0,0,0,0,0,717,0,0,0,0,0,0,0,0,0,0,0,0,0,0,600,0,0,0,0,0,\n0,654,0,0,188,273,0,0,0,543,0,410,87,0,0,941,0,0,186,250,0,1785,0,0,0,0,0,1339,\n462,961,0,780,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,529,0,0,0,0,0,0,474,1276,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,24,948,0,0,0,0,657,753,0,0,0,0,941,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,706,985,837,0,1861,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,933,0,0,0,0,0,\n0,0,0,0,767,0,0,0,0,0,0,0,641,0,0,0,1233,114,0,883,0,274,2008,0,1794,285,0,0,\n571,0,0,0,0,0,0,0,0,0,0,823,960,16,617,0,431,0,0,0,0,0,0,0,0,0,0,567,0,401,0,2,\n781,424,33,0,2006,0,0,274,0,0,1882,0,794,0,0,0,1848,0,0,0,0,0,0,448,47,0,0,0,\n1199,0,0,0,0,0,0,0,0,417,0,0,0,0,0,0,0,0,0,0,295,0,0,0,0,0,0,0,1019,0,0,0,0,0,0,\n0,0,0,0,0,0,0,620,0,0,0,0,464,0,0,0,0,208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,442,0,930,0,0,0,0,0,516,68,0,0,0,0,0,1128,104,0,0,0,0,0,0,0,0,787,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,491,0,0,0,0,0,0,711,0,0,9,0,101,441,0,0,0,0,0,0,0,0,\n0,0,160,396,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,679,326,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,1128,0,0,0,0,0,737,0,1796,0,0,0,0,0,0,0,0,0,0,0,0,338,574,0,0,\n0,0,0,1096,491,405,0,0,0,0,0,1081,0,0,0,0,0,0,0,0,0,0,0,0,0,1676,0,1207,0,0,0,0,\n0,0,969,354,0,0,0,0,598,0,297,0,0,0,0,0,0,0,0,1772,751,0,37,0,0,1828,0,0,0,0,0,\n0,0,0,0,257,191,582,0,0,0,0,0,0,790,0,0,0,0,0,47,0,0,0,0,0,0,0,449,306,1011,0,0,\n0,0,0,299,0,0,0,0,0,0,837,0,0,0,0,0,0,10,329,0,0,0,0,0,1320,0,0,0,0,0,0,158,657,\n0,1191,0,0,0,0,0,0,7,0,974,1939,0,1665,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,288,\n66,0,0,0,0,494,175,0,1643,0,0,0,0,0,0,0,0,570,750,719,0,0,0,0,0,0,0,0,0,0,0,0,0,\n13,0,0,1247,0,0,221,356,0,0,0,0,0,0,0,0,0,0,694,1809,0,0,0,0,0,0,0,411,0,44,31,\n0,0,0,0,669,0,673,0,0,0,0,0,0,0,0,0,1303,704,299,0,0,0,275,0,0,216,1761,0,0,0,0,\n0,0,0,0,0,0,0,1319,0,0,428,0,0,0,0,0,0,0,0,0,0,514,0,0,0,0,0,0,49,55,102,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,364,0,0,0,0,379,0,921,971,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,1258,0,0,0,1058,0,0,0,0,0,656,0,0,0,0,0,144,0,0,0,0,0,0,0,0,0,0,\n0,1373,10,605,0,0,0,0,0,0,0,838,0,1012,0,0,0,0,0,0,0,0,0,0,0,0,0,0,154,365,0,0,\n0,0,0,0,0,0,0,340,0,0,0,0,0,810,0,0,0,0,0,0,495,0,0,0,0,0,0,0,0,0,261,0,535,248,\n0,358,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,567,445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,697,0,0,0,1336,0,0,0,0,0,0,0,0,917,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,972,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,351,0,0,0,0,0,0,0,0,0,0,\n0,0,0,286,0,0,56,438,0,0,0,0,0,1950,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,738,0,0,0,0,0,\n0,0,0,0,0,969,2047,0,0,0,0,0,0,0,818,0,0,0,0,0,0,0,866,0,0,0,0,0,0,0,1467,0,0,0,\n0,0,0,0,0,0,0,0,0,0,972,0,355,0,0,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,267,189,104,0,0,0,0,1613,0,0,0,0,0,0,0,116,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,886,0,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45,0,0,863,0,0,0,0,0,\n0,0,1953,450,1773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,381,0,0,0,0,0,0,0,\n0,0,0,0,0,1142,0,1189,0,0,0,663,0,0,0,0,0,0,0,846,0,0,528,0,393,378,0,0,0,0,0,0,\n325,899,680,1880,0,1770,0,0,0,0,0,648,0,0,0,0,0,0,185,167,0,2046,0,0,0,0,0,0,\n249,1645,0,152,0,0,0,1733,0,0,0,0,0,1006,0,0,0,0,0,420,0,0,0,832,0,0,0,0,0,351,\n0,0,0,0,6,40,0,0,60,0,0,0,0,1354,745,724,0,0,0,0,0,0,0,0,772,1951,275,108,639,0,\n0,0,0,0,0,0,0,0,500,1758,0,0,0,0,0,0,0,0,0,0,0,1886,711,205,0,0,965,865,0,0,0,\n534,0,0,0,0,691,0,0,0,237,443,0,878,0,0,0,0,0,1410,0,0,0,0,0,0,0,0,0,0,0,0,0,\n995,0,0,0,0,0,0,0,0,0,0,0,0,0,578,0,0,0,0,881,0,0,0,0,0,0,0,0,822,0,923,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,924,0,0,0,665,0,0,0,0,0,1901,0,0,0,0,0,950,498,93,\n0,0,0,1451,0,0,0,0,0,747,828,788,400,184,0,198,0,0,0,0,0,0,0,0,0,0,0,994,0,0,0,\n0,0,0,0,0,615,320,0,0,0,978,843,905,0,0,0,0,0,0,0,0,850,974,0,0,0,0,6,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,509,0,0,0,0,0,273,0,0,0,0,0,0,0,0,0,0,0,0,0,\n201,0,0,0,1041,0,0,0,1040,0,0,0,0,0,0,0,0,0,693,234,774,0,336,0,1399,22,0,805,\n802,777,167,789,0,0,1705,0,0,0,0,0,0,0,0,0,0,0,10,13,11,0,0,204,264,0,0,56,0,0,\n1917,0,470,0,0,0,0,0,0,0,0,0,0,0,1198,0,0,0,0,0,0,0,0,0,0,1015,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,715,0,0,1002,0,0,0,298,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,867,0,0,724,0,0,0,0,0,0,0,0,0,0,0,0,768,0,0,0,0,0,1066,0,0,0,0,67,0,174,948,\n0,0,0,0,0,0,0,0,0,0,0,0,0,764,0,0,0,0,75,137,0,756,0,0,0,0,0,0,1008,842,643,0,0,\n0,67,0,0,0,0,0,0,0,0,0,0,0,135,821,0,0,0,0,0,0,0,0,736,0,389,355,0,0,786,0,0,0,\n0,0,0,2044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1030,0,0,0,1083,0,0,0,0,0,\n1226,0,0,0,0,356,319,8,389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,474,0,0,0,427,\n0,413,0,730,0,0,0,0,0,373,0,0,0,0,0,0,0,0,0,799,0,0,0,1793,0,0,0,322,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,89,290,2,0,0,0,0,0,0,0,0,0,0,672,\n699,1860,0,0,0,737,0,0,0,1612,0,0,0,0,0,0,0,0,0,0,0,145,124,884,0,0,0,0,0,387,0,\n0,0,0,0,0,0,0,0,0,0,679,0,550,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1305,0,0,0,0,0,0,0,\n576,0,0,0,0,0,0,0,686,0,607,0,0,37,0,0,0,0,0,0,0,0,0,101,1726,0,0,0,0,0,958,0,0,\n0,903,0,0,0,0,147,0,0,0,0,0,0,0,0,0,0,0,367,0,0,0,0,690,0,705,273,0,0,887,0,0,0,\n0,0,0,0,0,0,0,0,90,0,0,0,0,0,0,0,908,0,0,0,0,0,0,0,1261,0,0,497,1235,0,429,0,0,\n0,0,904,0,12,125,0,0,0,841,0,0,0,0,0,860,946,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,768,0,770,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,271,0,0,0,0,0,0,0,719,0,699,581,0,0,0,0,0,0,0,0,0,0,862,304,0,631,0,0,0,0,880,\n1513,0,0,0,0,0,981,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,434,0,0,0,0,0,550,0,0,476,930,\n824,553,0,0,452,0,151,0,0,0,0,0,0,772,0,292,135,0,0,0,0,0,0,0,504,0,0,1089,0,0,\n0,0,0,0,0,0,0,0,0,783,0,0,0,0,0,0,206,393,0,0,0,0,0,0,0,0,232,912,0,0,0,0,0,977,\n0,0,716,98,0,0,0,0,0,733,0,0,0,0,0,0,0,0,19,0,0,0,0,668,0,360,0,0,0,0,0,0,656,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,726,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,1269,0,0,463,0,\n0,0,0,0,0,1454,0,1287,245,0,989,0,0,0,0,0,0,0,0,0,107,164,0,0,0,0,0,0,0,1061,0,\n0,0,0,2,484,0,0,0,0,0,0,0,1127,0,0,0,0,0,0,0,460,0,0,0,0,0,932,0,0,0,0,0,0,0,\n588,625,0,0,0,0,76,92,0,0,0,0,0,0,0,0,0,0,0,0,0,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n763,0,622,0,0,0,253,0,546,0,0,110,0,256,916,0,0,35,212,0,0,746,0,0,0,150,0,0,\n1466,0,0,0,1299,0,0,0,0,0,0,0,0,0,1518,0,0,0,0,0,0,0,0,0,0,0,0,0,1229,0,0,0,816,\n0,0,0,0,0,0,159,0,0,0,0,0,734,869,126,1716,0,0,0,0,0,0,202,232,0,0,0,0,212,0,0,\n0,0,0,111,1003,0,0,0,0,0,0,0,0,0,0,0,1712,0,0,216,0,0,0,0,516,0,0,0,0,0,650,0,0,\n0,0,57,99,0,0,0,0,300,574,0,0,0,0,1023,0,0,302,0,1871,0,728,252,0,0,461,0,0,0,\n323,0,0,0,0,0,0,775,461,0,0,0,0,0,0,172,0,0,464,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,73,727,0,1023,0,0,0,0,0,0,0,0,0,0,577,0,0,0,0,0,0,0,0,1037,0,0,0,0,0,0,\n0,0,280,677,0,0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,159,0,446,1730,0,0,0,0,0,0,0,0,0,\n395,0,0,0,0,145,0,0,0,0,0,0,0,20,0,0,426,608,0,0,0,0,0,977,0,250,0,0,0,0,0,100,\n0,0,0,0,1982,0,0,0,0,0,476,0,0,0,0,0,0,594,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,447,0,0,0,0,526,0,0,14,1124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,188,0,0,0,0,0,0,0,0,362,301,0,0,0,1743,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,872,0,831,0,0,208,202,0,0,0,0,0,0,0,1954,0,\n0,0,0,516,872,0,0,313,224,0,0,24,0,11,546,0,0,0,1937,242,241,46,0,0,0,830,1273,\n0,0,0,0,0,0,0,825,327,1006,0,0,0,0,0,1580,516,366,0,0,0,0,0,1736,0,0,0,0,0,0,0,\n0,0,0,0,1935,0,826,0,0,0,0,139,331,0,0,0,0,0,0,0,0,0,0,0,288,0,916,0,0,0,0,0,\n1888,0,0,0,0,0,0,0,1471,0,1570,0,394,0,0,0,0,0,0,0,1931,0,1719,0,658,228,0,0,0,\n0,0,374,0,0,0,0,735,0,0,0,0,0,0,323,498,0,1063,0,0,0,0,155,0,0,0,0,0,0,0,0,906,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,616,\n902,0,0,0,0,0,692,0,0,0,0,0,0,823,0,0,0,305,0,0,0,0,0,0,0,681,0,0,0,0,0,214,\n1004,0,0,0,0,0,0,0,23,0,0,1703,0,0,0,0,0,0,0,0,0,1443,0,0,19,714,0,0,0,0,64,737,\n0,0,345,1758,0,0,579,47,0,0,539,139,0,0,0,0,388,0,0,0,0,253,0,0,0,0,0,0,252,0,\n745,0,0,0,0,0,0,0,0,0,0,0,504,107,0,871,0,0,0,229,0,0,0,0,0,903,0,0,71,0,0,549,\n6,47,0,0,0,0,0,0,0,0,0,980,865,705,0,0,0,161,0,0,0,0,143,1331,0,0,0,1388,33,724,\n0,0,0,19,0,0,0,395,0,0,0,0,0,846,210,0,0,0,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,695,937,497,0,0,0,0,0,718,0,0,0,0,0,0,0,1581,0,\n0,0,0,0,0,161,49,0,0,0,0,0,0,0,0,0,597,0,0,0,1094,0,0,0,811,908,0,0,0,0,0,0,0,0,\n0,0,1471,0,0,0,0,0,0,0,0,0,0,42,1935,0,0,0,2014,66,2007,0,0,586,0,0,0,0,0,0,0,0,\n0,28,1077,0,0,0,1221,0,0,62,0,0,0,0,0,0,0,0,0,0,1766,0,0,0,0,0,0,0,0,0,0,0,0,25,\n0,499,1388,0,0,97,10,0,0,0,0,0,481,0,0,0,0,0,0,0,0,0,0,37,134,155,486,0,1442,0,\n0,0,0,0,591,0,0,0,0,0,0,310,1173,0,0,0,0,409,1156,0,0,0,482,0,0,263,926,0,0,0,0,\n0,0,0,0,0,0,0,0,0,804,0,0,0,0,0,0,0,0,0,0,0,0,0,1265,0,415,0,348,0,0,0,1012,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,165,1803,0,0,0,0,0,0,0,408,\n0,0,0,0,0,0,257,1321,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1138,0,0,0,249,0,\n0,0,576,0,0,0,0,231,0,0,0,288,0,0,0,0,0,0,0,0,0,433,1487,569,1678,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,87,0,0,0,0,0,779,538,0,0,0,413,0,0,0,\n0,0,0,0,0,0,0,495,0,0,0,0,0,191,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,530,567,\n0,0,0,0,0,1484,0,0,0,0,0,0,815,609,0,0,0,0,0,484,0,0,0,0,0,0,0,0,0,0,900,0,0,0,\n0,1335,0,1724,0,0,0,0,0,0,0,0,0,0,0,640,0,0,0,0,0,0,0,0,0,0,0,1831,0,0,0,0,0,0,\n0,0,0,0,0,0,0,474,0,0,0,0,0,0,0,0,0,1103,0,1504,655,1034,0,0,0,0,0,305,0,0,0,0,\n0,0,0,0,0,1236,0,0,429,217,0,0,0,0,739,278,0,0,0,0,0,0,0,708,0,0,0,0,0,1840,233,\n0,0,0,0,0,0,0,0,2017,0,0,0,0,0,1488,0,0,0,1590,0,0,0,0,0,1800,28,0,0,0,0,0,0,0,\n0,0,45,0,36,0,22,1442,378,0,0,0,0,0,0,1507,0,0,0,0,0,0,0,0,0,0,39,0,0,1054,725,\n1955,0,2036,0,0,0,0,0,0,0,0,0,0,896,1871,0,0,0,0,0,0,0,0,0,0,805,0,0,0,0,2046,0,\n0,0,0,17,712,0,617,55,320,271,0,0,0,0,0,0,0,0,0,445,0,184,103,0,0,0,0,0,0,0,0,\n659,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,676,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n337,0,0,0,506,0,0,0,0,0,843,77,0,458,0,0,0,0,0,1420,382,109,142,330,0,0,0,0,0,0,\n0,0,0,0,0,0,87,0,0,0,492,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1239,0,0,0,0,0,0,\n211,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1049,0,321,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,1985,0,0,122,0,0,234,0,0,0,1098,0,0,0,0,0,0,549,253,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,522,131,0,0,149,0,0,0,0,0,0,0,0,0,0,0,0,0,0,507,0,0,0,0,811,630,0,0,0,343,\n0,0,0,0,0,448,591,455,0,1381,0,0,0,0,0,0,0,575,0,0,0,0,0,1175,0,0,0,0,0,0,0,0,0,\n653,0,0,0,1761,0,1198,0,0,0,0,297,1127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,678,0,0,\n164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,0,45,0,0,0,0,0,121,0,0,0,0,0,0,\n0,0,125,0,0,0,1622,0,0,0,0,0,721,145,0,0,0,970,792,0,0,0,715,0,0,0,0,0,1999,0,0,\n74,531,0,0,65,0,0,0,105,220,0,0,0,0,0,0,0,960,0,0,0,0,0,0,428,19,0,0,401,96,0,0,\n0,0,0,1595,116,0,1021,0,0,0,0,0,750,1961,0,0,148,0,0,0,0,0,0,0,0,0,0,0,0,0,75,0,\n0,1383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,779,0,0,0,0,0,0,0,0,598,0,424,0,0,0,0,0,0,0,\n1222,0,0,0,876,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,187,0,8,0,0,0,0,0,\n0,0,429,0,685,0,0,0,0,0,0,0,0,0,0,0,132,472,0,0,0,0,0,0,0,0,0,938,0,0,874,0,0,0,\n0,0,774,0,0,0,0,0,92,0,0,0,0,0,0,830,701,0,0,0,0,0,426,350,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,603,59,0,0,0,0,0,0,0,0,0,0,293,0,0,0,0,0,0,0,0,0,0,0,0,0,0,441,163,4,0,\n0,0,0,0,0,0,0,0,806,0,0,0,0,0,0,233,0,0,0,0,1994,0,1739,0,0,393,0,47,1038,0,0,0,\n309,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,363,0,0,0,175,0,0,0,0,0,0,0,666,\n0,0,1675,0,1600,0,0,0,808,0,0,0,0,0,0,0,0,0,0,0,280,54,0,0,0,0,0,0,0,0,421,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0,0,103,254,0,262,1,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,805,0,0,0,0,0,0,0,0,0,1630,0,0,0,0,0,0,0,0,0,0,0,0,0,671,972,989,0,0,\n0,0,0,0,0,889,0,0,0,1382,0,0,0,0,0,0,0,775,0,0,0,0,0,0,0,0,0,0,388,202,0,0,0,0,\n16,560,0,0,0,841,0,0,566,0,0,0,938,0,0,0,0,0,0,0,0,0,0,912,0,0,0,1361,0,0,0,0,0,\n0,618,236,0,1854,0,0,318,190,0,1376,0,0,0,0,0,0,0,349,0,0,0,0,951,1972,0,0,0,0,\n0,0,344,0,0,0,0,0,0,0,0,850,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,163,85,0,487,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,145,0,83,0,0,1013,0,0,0,1922,0,0,169,557,66,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,1193,82,0,352,454,57,0,0,1333,396,107,0,370,0,0,0,0,0,0,0,0,0,204,0,0,0,\n0,0,1706,0,0,0,0,0,0,0,0,0,0,0,0,394,1204,0,0,0,0,0,1007,0,0,0,1696,0,1519,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,981,0,0,0,0,1072,0,0,0,712,0,1629,0,0,0,0,0,0,0,728,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1271,0,0,0,1608,16,0,0,0,0,485,0,0,0,0,0,0,\n153,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1991,0,0,0,0,0,0,0,0,52,0,21,0,\n0,0,0,0,0,0,0,0,819,0,0,0,0,0,917,0,0,0,0,784,0,0,0,0,135,0,0,0,0,0,454,0,0,0,0,\n0,0,0,0,0,852,1719,0,0,0,0,0,852,0,0,0,0,0,952,0,0,0,0,568,0,0,0,0,0,448,0,0,0,\n67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1826,657,0,729,666,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n669,0,0,0,0,0,0,0,402,0,0,152,0,0,0,0,912,0,0,0,0,0,0,51,320,0,445,0,0,0,0,308,\n0,0,0,0,0,386,0,0,239,0,0,130,83,0,143,0,348,0,0,0,0,0,0,0,958,0,0,0,0,0,210,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,430,0,0,0,0,0,0,0,0,0,0,0,0,7,213,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,801,0,0,0,0,0,0,0,0,0,936,0,108,0,0,\n0,0,0,0,0,0,0,885,587,219,398,364,0,1165,0,0,342,241,303,0,0,0,0,0,0,0,0,0,0,\n1454,0,0,0,0,0,0,0,0,0,0,254,562,0,786,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1294,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,493,216,0,0,0,0,219,341,0,0,0,0,0,\n0,0,0,0,0,130,1734,154,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,701,604,0,0,879,0,195,\n666,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1669,0,0,0,1791,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,1228,0,0,0,0,0,623,0,0,0,0,0,0,0,798,0,0,0,0,0,0,0,0,0,0,0,0,84,\n122,0,0,0,837,0,0,0,0,0,0,1013,0,0,577,0,0,0,460,932,0,0,0,0,0,0,0,0,0,0,0,31,\n131,0,0,0,605,0,0,0,1246,0,0,0,0,68,278,165,307,781,0,0,0,0,0,0,33,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,1113,0,0,720,1953,203,0,0,0,0,0,0,0,425,326,0,0,0,0,0,\n0,0,0,0,0,241,1316,0,0,0,0,0,416,0,0,0,1300,0,847,0,0,662,358,0,0,0,0,839,1823,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,654,1522,0,0,0,0,0,0,163,0,0,0,0,0,314,978,0,0,0,\n601,0,0,0,0,0,946,434,0,0,0,402,411,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,1467,\n410,0,0,0,0,0,0,0,0,0,0,0,0,0,0,483,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,677,0,0,0,0,0,0,0,0,0,0,0,0,70,0,0,0,0,1405,0,0,0,0,0,0,108,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,777,0,0,0,0,0,747,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,505,0,326,0,0,164,628,654,0,0,0,\n37,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,668,152,0,0,0,0,0,0,0,0,0,0,0,581,\n0,0,0,0,44,126,89,0,0,0,0,0,0,0,0,1531,0,0,0,0,0,0,0,0,203,1167,0,0,0,0,0,0,0,0,\n531,1232,0,0,0,0,0,943,0,670,231,880,0,1617,0,0,0,1957,0,0,0,0,0,0,0,975,0,0,0,\n0,0,0,0,0,0,0,0,242,0,0,0,0,0,0,0,0,0,421,0,0,14,834,0,0,0,0,0,0,0,0,0,0,0,0,\n465,0,0,0,0,0,834,688,413,855,0,0,0,590,0,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,\n0,45,169,0,0,0,0,0,0,0,0,0,0,0,198,0,0,565,585,0,0,0,0,0,0,0,0,0,0,0,0,0,691,0,\n0,0,593,0,0,0,0,0,0,0,0,0,913,116,0,0,0,0,1360,0,0,0,802,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,673,308,0,709,1006,1895,0,228,0,0,0,1840,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,608,0,0,0,0,0,0,0,0,0,1573,0,2039,136,540,0,0,0,0,0,0,0,\n897,0,0,938,1878,0,0,0,0,0,0,0,0,0,1469,0,999,0,299,0,0,0,0,0,0,0,578,0,0,0,0,0,\n456,0,0,0,1679,163,693,0,0,0,0,0,0,48,755,0,0,0,0,0,0,0,0,0,0,0,0,338,0,0,0,0,\n1091,0,0,0,0,695,0,0,1464,0,0,0,0,0,975,0,0,335,0,0,1979,0,0,0,0,269,1566,630,\n396,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1815,634,0,0,0,966,0,0,0,0,0,0,0,9,\n412,0,958,0,0,579,382,0,212,0,0,0,0,965,681,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,655,\n0,0,0,0,67,0,0,0,0,0,0,751,0,0,0,0,423,231,0,0,1016,300,0,0,0,0,100,237,0,0,0,\n1370,0,0,0,1208,0,0,0,0,0,1219,129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,199,0,0,427,0,0,\n0,0,949,665,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,712,0,0,0,0,0,1186,0,0,0,0,0,0,0,0,0,0,295,312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n151,0,0,0,0,588,4,0,0,0,0,0,414,104,0,0,757,263,0,561,0,0,0,320,0,0,0,0,0,0,0,0,\n0,0,0,225,0,0,0,0,37,817,0,974,0,0,0,0,0,0,0,0,0,0,0,0,0,2026,131,235,16,0,590,\n1157,0,0,0,0,0,0,0,0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,140,390,0,0,0,0,\n0,0,0,1144,0,0,0,464,0,0,0,0,0,0,0,0,0,0,0,0,204,407,303,1218,0,0,0,0,5,325,0,0,\n0,0,12,800,0,1783,0,0,0,0,0,0,0,0,0,0,504,621,0,0,0,0,0,0,0,0,0,920,0,376,0,0,0,\n0,0,218,580,0,768,454,0,0,0,0,0,0,0,0,0,0,0,0,676,0,0,0,0,0,0,164,0,0,0,0,0,0,0,\n0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,120,285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,226,343,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,0,0,1812,0,0,8,0,0,0,21,1125,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,1327,0,0,0,0,575,1598,0,0,0,0,0,0,0,0,0,895,0,0,0,959,0,0,\n0,0,0,1759,173,0,0,0,0,266,261,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,1427,0,0,300,1033,0,0,0,0,0,0,0,0,0,0,0,584,0,0,0,0,52,734,\n0,0,217,239,0,1129,0,0,0,0,0,0,0,0,732,20,0,0,0,0,0,0,0,0,0,0,0,418,0,0,0,613,0,\n0,0,0,0,0,0,0,0,632,0,0,85,984,0,0,0,0,909,694,7,1109,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,167,0,0,0,0,280,62,0,0,33,0,0,359,186,980,0,0,0,0,0,0,0,0,0,0,0,585,0,0,0,\n211,0,0,336,145,0,1130,0,873,0,0,840,263,0,0,0,0,0,0,0,0,0,916,0,0,0,0,0,0,0,0,\n0,0,155,0,0,0,461,97,0,0,0,0,0,1356,0,0,0,0,0,0,0,593,0,0,0,0,0,1392,0,0,0,0,\n126,0,0,0,0,1179,0,0,0,0,0,162,0,0,0,0,0,765,0,187,0,1286,0,0,0,0,0,0,0,0,0,635,\n0,0,23,215,0,0,0,1306,0,0,97,716,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,657,0,\n0,0,0,0,0,0,0,299,0,0,0,0,0,0,134,0,0,0,0,0,0,0,0,0,0,0,658,1082,0,0,0,0,0,2002,\n0,0,0,0,0,0,833,248,0,0,0,0,0,1654,0,0,531,0,0,0,0,0,0,634,0,0,0,0,0,0,0,0,0,\n853,573,249,0,0,0,0,0,0,0,0,527,0,0,0,0,1419,0,0,0,0,0,0,20,49,0,0,0,992,0,0,0,\n728,0,0,0,0,0,0,0,0,0,0,0,0,497,1579,0,0,0,0,62,268,0,0,0,0,0,0,0,1201,0,0,0,0,\n0,0,0,0,0,0,0,0,495,193,0,0,0,0,106,0,0,859,0,0,23,0,0,0,0,0,0,0,813,925,0,0,\n223,613,953,0,0,0,0,0,0,0,0,666,0,0,0,0,0,0,0,0,0,670,0,0,40,216,0,0,0,0,0,0,\n259,0,0,0,440,1114,0,0,0,0,0,0,0,0,74,475,0,0,188,139,0,797,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,1572,0,0,0,0,39,0,0,0,0,0,0,0,0,0,0,0,0,1594,0,0,0,0,0,0,0,290,0,232,\n0,0,887,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,14,0,0,0,0,0,741,0,0,0,992,0,\n0,0,0,0,0,0,0,111,0,0,425,0,0,0,0,0,789,0,0,0,1593,0,1768,0,0,233,0,0,0,0,943,0,\n0,0,0,0,0,0,955,225,245,0,0,0,0,0,0,241,0,0,0,0,1943,0,0,0,1284,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,709,0,0,0,0,0,0,554,0,0,0,0,0,0,0,0,1564,0,0,0,\n443,0,0,0,0,0,0,280,0,0,0,0,0,0,0,0,729,0,0,0,348,0,0,0,0,0,0,0,758,848,298,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,829,1422,189,121,0,0,632,812,0,0,556,0,0,0,0,0,436,172,\n530,844,232,984,0,0,0,0,0,0,0,0,0,0,147,0,0,0,0,0,0,0,0,537,0,0,0,0,0,859,0,0,\n842,0,0,0,0,0,0,0,0,0,0,1291,0,0,0,0,0,0,0,0,0,0,0,1482,612,392,0,0,0,262,31,0,\n0,0,0,0,0,0,0,0,0,753,549,0,0,0,0,0,0,696,0,0,0,0,0,0,0,834,0,0,0,0,0,771,0,0,0,\n0,0,0,0,0,0,0,0,0,0,921,0,0,0,674,0,0,0,0,0,0,0,0,0,0,308,444,0,0,0,0,0,0,805,\n180,0,0,278,271,0,0,214,505,0,1215,0,0,0,0,0,0,387,271,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,1645,42,92,0,459,0,0,330,1557,0,0,0,0,0,0,0,0,113,18,0,0,0,\n1742,0,0,0,965,0,0,0,0,0,0,0,0,0,0,0,0,0,182,0,0,65,0,0,0,0,0,0,0,0,0,0,0,0,973,\n0,0,0,0,0,328,0,0,588,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1786,\n0,0,962,1985,0,0,0,308,508,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,588,0,0,0,0,0,0,614,793,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,290,0,0,0,0,0,0,0,0,0,0,1136,0,0,0,0,0,0,0,0,0,0,796,719,0,0,\n326,210,0,0,0,701,758,472,0,0,0,1947,278,1079,0,0,0,0,0,0,497,41,0,0,634,46,961,\n0,810,524,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,532,0,997,0,0,0,0,0,0,0,0,0,0,0,1301,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1298,0,671,0,0,0,306,0,0,0,0,0,0,0,0,0,0,\n693,1823,0,0,0,759,0,0,0,0,0,1932,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,182,0,0,0,1964,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,0,0,0,0,0,0,424,857,0,0,0,0,671,328,0,\n529,0,0,0,0,0,716,0,1509,80,67,0,0,0,0,59,141,0,0,0,0,0,0,783,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1498,0,0,0,0,343,430,803,1183,677,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1357,53,0,0,0,0,590,0,0,0,0,0,0,0,0,0,0,\n0,0,0,329,0,0,0,0,0,0,0,469,0,0,0,0,0,0,0,0,0,0,460,0,0,1743,0,0,963,340,0,0,0,\n0,0,1603,0,0,250,0,0,0,0,0,646,218,0,1794,0,0,0,571,0,455,0,0,0,1012,0,0,0,0,0,\n0,0,0,0,0,0,0,597,161,0,349,0,524,0,0,0,0,0,0,0,0,0,0,0,0,322,432,0,0,0,0,0,0,\n325,223,0,0,0,0,0,566,0,0,0,1394,481,436,0,48,457,610,756,618,0,0,0,755,0,1217,\n0,0,0,0,0,197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,544,492,107,414,0,0,0,0,0,0,0,0,0,0,0,\n1007,0,0,0,0,5,0,0,1580,0,0,0,0,0,0,0,0,0,0,0,0,0,673,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,1843,0,0,0,0,0,0,0,0,0,165,0,0,0,0,0,0,809,885,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,498,0,0,0,306,9,0,0,0,0,0,0,0,437,721,146,0,0,0,0,0,0,0,0,0,0,0,177,0,0,0,0,\n0,0,0,1377,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,959,0,0,0,1928,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1435,0,481,0,0,0,0,0,0,142,84,0,0,0,0,0,\n1015,0,0,0,315,0,0,0,0,0,0,759,0,0,0,0,0,0,0,0,712,0,0,0,1722,0,0,0,0,0,0,0,0,0,\n0,0,0,222,0,985,1414,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1273,\n538,706,0,0,0,0,0,0,0,0,115,0,0,0,0,0,0,0,0,0,0,1781,0,0,0,0,0,431,97,665,42,\n237,0,0,0,264,0,0,213,0,0,0,0,0,0,0,455,0,0,0,906,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n624,0,574,0,0,0,0,0,0,0,0,0,0,0,0,354,0,0,0,1558,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,\n235,723,1813,0,0,0,957,0,830,0,0,0,0,0,0,0,0,0,0,0,0,23,0,0,496,0,0,0,0,0,0,0,\n547,239,88,0,0,0,0,0,0,0,0,0,1310,0,0,0,0,0,0,0,0,80,1076,0,0,118,0,0,0,479,274,\n0,0,0,0,0,0,0,0,0,0,0,497,0,0,669,261,0,0,0,0,13,0,0,0,0,0,0,791,250,642,0,0,0,\n1429,939,949,0,0,0,0,0,0,0,0,0,0,0,0,0,818,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,982,330,0,0,0,0,545,0,0,0,0,0,0,947,0,1188,0,0,0,0,0,904,0,0,0,0,0,1372,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,693,377,0,0,0,0,0,0,0,0,0,0,0,0,0,0,695,0,0,\n713,386,0,0,0,0,128,1575,0,0,0,0,0,0,424,893,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,904,0,0,0,0,0,552,322,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,1808,49,0,0,0,0,\n1832,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,421,0,0,442,415,0,0,289,\n0,0,0,0,0,206,110,0,0,0,0,0,205,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n19,1539,0,0,0,0,0,1340,0,1194,0,0,0,0,0,0,0,0,549,0,0,0,0,0,0,0,0,1720,0,0,0,0,\n0,0,0,0,0,319,0,0,0,0,112,1180,0,0,0,0,0,0,0,0,0,0,0,967,0,0,0,0,0,0,0,0,0,1940,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,735,0,0,0,0,0,0,0,0,0,897,132,0,0,0,0,0,0,0,\n0,0,0,38,838,0,0,0,379,218,8,660,1017,0,0,0,0,0,0,111,387,647,877,0,0,53,790,0,\n0,0,0,0,0,0,0,458,0,0,0,0,0,0,954,0,0,0,394,0,1367,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,882,0,0,0,0,0,0,0,1409,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,124,342,199,0,0,0,0,\n0,0,0,0,0,0,724,628,0,0,0,0,804,266,0,0,0,0,0,208,0,79,0,0,0,0,0,0,0,0,741,0,0,\n0,0,0,0,0,0,0,0,606,0,1494,821,1553,0,0,135,405,0,0,178,100,0,0,0,0,0,0,0,0,0,0,\n0,0,0,481,0,0,0,1378,0,0,0,0,0,0,0,0,0,0,0,0,0,791,33,1227,857,0,467,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,447,0,0,0,0,0,0,86,128,0,0,0,0,0,0,587,0,0,0,692,1018,0,\n195,0,0,0,0,0,0,0,1546,0,0,0,0,0,0,0,0,0,0,0,684,0,0,345,0,0,0,0,0,0,365,0,1683,\n0,0,472,0,433,0,0,0,0,0,0,0,28,0,0,0,997,0,705,3,0,0,0,0,0,0,0,0,0,229,0,0,0,0,\n102,0,0,0,0,866,1022,0,0,0,0,0,0,0,0,0,55,0,115,0,0,0,0,933,0,0,0,0,0,0,0,702,0,\n0,0,0,0,0,0,1728,26,484,0,0,0,185,618,417,0,803,0,0,0,0,0,0,0,0,0,0,0,1262,0,0,\n0,0,0,0,0,0,0,0,0,0,0,633,0,0,0,0,0,0,0,0,0,0,0,0,0,479,262,0,0,0,0,0,0,830,0,0,\n0,0,26,70,0,0,0,0,0,0,0,0,217,0,640,51,0,0,360,1586,0,0,0,0,0,652,0,0,0,0,0,766,\n0,0,0,0,298,737,0,0,0,0,0,0,0,0,0,0,655,222,906,0,0,1013,991,2009,0,0,0,0,503,0,\n0,0,216,154,0,0,0,716,0,844,0,0,0,0,621,252,0,0,0,0,748,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,103,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,576,0,0,0,648,0,0,0,331,0,0,0,\n0,0,0,0,0,0,0,0,0,632,0,0,0,518,107,0,0,0,0,0,0,0,0,851,0,0,0,0,504,0,0,0,0,0,0,\n0,0,0,0,0,0,7,883,0,0,0,0,0,0,0,922,0,0,0,0,0,0,0,0,91,993,0,0,0,0,0,0,200,131,\n10,0,0,0,0,0,0,0,0,0,0,0,0,0,365,1433,0,0,0,0,28,103,0,0,798,1013,0,0,0,0,0,0,0,\n0,39,1925,0,853,0,0,271,519,0,0,0,0,338,0,0,300,470,419,0,0,0,0,0,0,836,0,0,0,0,\n0,0,1937,0,0,0,0,0,393,0,0,357,0,0,0,0,0,703,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,387,0,0,0,0,0,0,75,708,453,1351,0,303,0,0,772,0,0,0,0,0,0,0,0,749,0,0,\n0,0,0,0,0,0,0,0,0,0,0,1065,0,0,717,226,0,0,0,0,0,890,431,626,0,0,0,0,706,0,0,0,\n51,698,0,0,0,0,0,0,0,0,0,0,0,828,0,0,17,0,0,0,0,1929,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,871,498,0,101,1793,0,0,0,0,0,0,435,0,\n0,0,0,0,966,0,129,1644,0,0,0,0,0,0,0,0,0,0,0,0,0,997,502,0,0,0,0,0,0,0,0,0,0,0,\n0,823,0,1927,0,0,0,0,98,1756,0,0,0,0,0,0,0,0,0,0,0,0,8,0,160,1046,0,492,0,0,0,0,\n0,0,129,45,0,0,0,0,0,0,353,558,0,0,0,0,0,785,0,0,0,1145,189,0,0,0,26,353,0,0,0,\n0,0,2024,0,0,0,606,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,855,0,0,0,0,0,0,0,0,0,0,0,\n0,0,2011,0,0,5,4,0,0,461,764,0,0,0,1449,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1445,0,0,\n0,1168,0,0,0,233,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,216,0,0,0,286,0,0,0,\n3,0,0,0,723,536,0,0,0,0,0,285,0,0,0,560,0,0,0,0,0,690,0,0,0,0,0,1246,0,0,63,0,\n33,0,0,0,0,0,520,1862,0,0,0,0,0,0,0,0,0,0,0,0,630,0,0,0,0,554,0,0,0,0,0,1001,0,\n0,0,0,0,446,0,0,0,0,0,0,0,1313,0,0,837,636,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,278,\n0,0,0,0,0,0,0,0,868,0,0,0,0,1010,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n1231,0,304,0,506,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,93,1408,794,\n843,704,0,285,114,485,898,145,0,19,2035,0,0,0,1933,0,0,0,0,0,0,0,1728,0,0,0,0,0,\n0,0,0,746,0,0,0,0,0,0,0,995,1964,0,0,0,0,0,0,0,0,0,0,0,1550,0,874,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,1018,0,0,0,814,126,0,0,1264,0,0,814,955,0,0,0,0,0,0,\n0,981,0,0,0,0,0,0,0,0,915,56,0,0,100,0,0,0,0,0,0,0,0,0,638,0,0,0,0,738,0,0,0,0,\n0,0,0,0,0,758,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1112,0,0,214,0,0,0,133,0,196,\n168,0,0,0,0,0,1152,0,1245,0,0,538,169,871,1816,0,0,413,133,0,0,0,978,0,0,43,93,\n371,0,0,0,0,0,0,526,25,0,754,335,0,0,0,0,182,0,0,0,0,0,0,0,0,0,0,0,39,601,0,0,0,\n0,0,0,0,181,370,0,0,1652,358,0,0,0,0,0,0,0,0,0,176,286,0,788,0,0,0,0,0,1223,780,\n254,1003,896,0,0,0,1447,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,744,0,0,0,0,0,126,0,\n41,788,0,0,0,629,0,0,0,0,0,0,0,0,0,0,0,293,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,420,37,1900,0,0,0,0,542,1570,957,0,0,0,0,0,0,\n0,373,31,0,0,0,0,125,325,0,0,0,0,0,0,323,0,0,1547,0,0,0,0,0,0,0,0,0,0,0,0,0,\n1216,0,0,0,0,0,0,198,1905,629,15,0,0,0,0,0,0,20,75,543,1353,0,0,0,533,0,0,6,0,0,\n0,0,0,0,538,0,0,0,0,0,0,0,0,0,0,0,338,0,0,0,0,11,0,0,0,284,659,0,989,0,0,0,0,0,\n0,0,0,0,848,0,0,507,0,0,0,0,0,0,0,0,188,991,884,0,0,0,0,60,959,0,0,0,0,0,1653,0,\n0,922,337,0,638,0,0,500,0,0,0,0,0,0,0,0,0,0,0,166,0,0,0,0,0,0,0,0,0,0,0,0,418,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,760,0,0,0,0,0,0,1277,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,770,0,0,0,0,0,0,0,243,89,0,0,0,0,0,0,0,0,0,1396,0,\n560,0,0,3,1658,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,586,0,0,1271,0,0,0,505,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,637,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1947,\n41,445,0,0,0,0,0,0,0,0,57,189,0,0,371,0,0,0,0,552,0,883,0,923,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,875,0,0,0,1788,49,0,0,0,0,0,\n0,0,0,0,0,0,661,0,0,1945,0,0,0,0,0,794,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,1135,0,0,0,745,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,410,0,976,0,0,0,0,0,703,0,0,\n0,0,0,0,187,322,0,0,0,227,0,0,0,0,560,0,31,1395,0,0,0,0,0,466,0,0,0,0,643,167,0,\n0,0,1428,0,412,0,0,0,0,0,0,0,0,0,1118,562,0,0,0,0,0,256,0,0,0,0,0,0,1771,0,0,0,\n0,0,1190,132,0,66,0,0,0,0,0,0,0,0,0,0,317,0,0,0,63,0,0,0,0,0,0,0,1475,0,0,0,0,0,\n0,0,288,0,0,0,0,608,0,0,0,0,0,0,0,0,1225,0,1189,0,0,0,0,0,0,0,1468,0,0,0,0,0,\n689,120,0,0,0,0,0,0,0,1,0,329,0,0,0,0,226,0,0,0,0,0,1855,0,0,461,0,0,0,0,1346,0,\n0,0,0,0,85,0,0,299,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1171,0,0,\n0,980,0,0,0,0,0,0,0,0,637,279,0,0,0,0,0,293,0,0,0,0,528,17,0,0,0,0,5,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,601,0,0,0,0,0,0,779,0,\n196,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1322,737,752,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,412,192,80,0,0,8,1470,0,0,0,0,0,0,0,0,0,873,0,0,0,0,0,835,0,0,0,0,256,\n38,986,0,0,0,0,0,0,0,0,0,91,257,278,911,0,0,0,0,0,0,0,0,749,151,0,0,0,0,0,0,0,0,\n0,0,0,0,989,0,0,990,0,0,90,194,0,0,0,0,0,425,0,0,0,0,0,774,0,0,0,0,0,0,0,0,0,0,\n646,827,752,0,0,0,662,0,22,21,0,0,0,0,0,0,95,239,0,0,0,431,0,0,0,0,0,874,0,0,\n265,65,0,0,0,1350,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1887,0,0,0,0,0,0,0,809,\n0,696,0,1074,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,630,0,0,802,0,0,0,56,776,0,\n970,0,0,797,0,0,0,0,0,400,0,0,1951,0,0,41,0,11,118,0,0,0,0,0,0,0,0,251,615,0,0,\n0,1044,0,0,0,0,0,0,0,0,0,0,0,225,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,370,0,0,0,0,\n104,48,209,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,930,0,0,0,0,\n0,0,0,0,0,0,0,1286,0,759,0,120,385,0,0,0,429,0,0,0,0,0,0,0,0,820,0,0,0,0,0,0,\n199,0,10,151,0,0,0,761,365,0,0,0,0,0,0,0,0,0,46,1086,0,0,0,0,11,1624,58,344,0,0,\n1008,1868,0,0,0,888,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,711,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,440,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,914,1913,0,958,0,885,0,0,0,0,0,0,0,0,0,0,0,\n0,0,847,276,0,302,65,0,0,0,510,0,1514,0,0,0,0,0,0,152,291,0,0,0,0,0,0,0,0,0,0,0,\n0,282,589,0,0,0,0,0,0,0,0,0,0,0,0,0,130,0,0,463,42,0,0,0,0,0,372,0,0,0,0,0,0,0,\n0,0,680,0,0,0,0,0,0,0,0,977,1997,0,0,0,810,0,0,0,0,0,0,0,0,0,1390,0,0,0,644,0,0,\n867,982,0,0,0,0,0,0,0,540,0,123,0,0,0,1978,0,0,0,0,789,623,0,1723,0,1220,0,0,0,\n0,0,0,0,480,0,0,0,0,0,0,0,0,0,0,0,888,0,0,0,0,0,0,0,0,0,0,0,0,299,1995,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,788,179,0,0,0,0,0,0,431,156,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1373,39,80,196,0,0,507,0,0,0,646,0,0,0,0,\n0,1214,0,0,0,0,926,0,0,0,1,114,0,0,0,0,0,446,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,490,0,0,0,491,0,1584,0,0,507,250,0,0,0,158,\n10,362,1,0,0,0,0,0,0,0,0,0,408,228,860,480,0,779,0,0,0,557,0,0,142,197,0,0,0,0,\n0,0,0,0,0,0,0,1490,11,378,316,1057,0,0,18,579,299,1546,0,177,0,0,0,0,0,0,0,0,0,\n411,0,0,0,0,727,439,0,0,0,0,0,1528,0,0,0,0,0,0,58,0,482,0,0,0,505,1952,0,0,0,0,\n0,0,0,0,0,0,0,242,0,0,0,0,0,0,0,953,0,0,0,0,802,0,0,0,0,0,0,0,0,0,0,290,0,0,791,\n52,0,0,0,0,0,0,0,0,0,0,0,112,0,0,0,0,0,1028,0,0,138,0,0,0,0,1811,0,0,0,0,0,0,\n934,1821,0,0,0,0,371,38,0,0,0,1296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,723,0,0,0,0,0,\n0,0,0,0,0,0,0,0,1330,0,0,0,0,0,0,0,1255,296,109,0,0,0,0,0,660,0,0,0,0,270,591,0,\n0,0,0,0,0,0,1090,81,0,0,0,0,391,0,0,0,0,249,322,0,0,0,0,0,0,0,1412,0,0,0,0,0,0,\n0,0,0,0,526,632,0,0,0,0,0,0,235,144,0,0,0,0,0,940,0,0,0,52,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,309,196,0,0,0,0,0,1912,0,1290,0,686,0,0,625,0,0,0,0,0,0,0,0,0,0,0,412,0,\n0,0,0,43,0,0,0,0,11,967,758,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,0,0,0,0,0,0,0,0,0,0,\n873,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,890,0,0,2,0,0,0,0,0,0,0,0,1774,\n393,263,0,0,0,0,0,0,818,456,0,0,251,178,393,97,0,0,0,0,0,674,168,0,0,0,0,0,0,0,\n159,1639,0,0,0,0,0,0,0,0,59,934,0,191,0,0,0,0,346,165,0,877,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,128,0,0,0,0,0,0,1297,0,0,0,0,0,0,164,0,0,0,15,132,241,1073,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,228,324,53,0,0,910,0,0,0,0,0,0,0,0,734,705,\n217,73,0,0,0,0,0,0,0,0,636,389,0,1409,0,0,0,0,0,893,0,0,0,0,21,0,0,0,0,0,0,0,0,\n0,0,0,0,0,721,0,0,0,959,0,0,0,0,1433,0,0,0,0,0,0,0,0,0,0,0,0,174,189,0,0,0,0,0,\n0,0,0,0,0,22,2,0,0,815,354,0,0,0,0,425,0,411,60,13,1611,0,0,0,0,0,0,0,0,0,0,0,0,\n0,1478,596,0,0,398,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,1159,0,0,0,0,0,\n592,223,0,0,0,0,0,0,0,245,64,0,0,0,0,278,0,604,0,0,1502,265,0,0,0,0,0,0,0,310,\n1763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,129,0,0,0,0,0,0,0,0,0,1356,0,0,0,0,0,0,0,\n0,505,0,0,0,0,0,0,0,1000,0,0,966,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,839,0,0,0,0,0,0,\n0,0,0,0,0,0,0,637,0,0,0,0,0,0,0,0,0,0,0,0,0,0,590,0,0,0,0,280,0,0,0,1386,0,0,0,\n281,0,1064,0,0,0,0,0,917,0,0,15,555,0,0,1014,1883,0,0,0,965,0,0,117,33,0,0,0,\n801,0,0,0,0,0,877,0,824,0,0,0,0,0,0,0,0,0,0,0,365,0,0,0,0,0,0,774,7,0,430,0,0,\n231,360,0,0,0,0,0,0,0,0,822,740,0,0,929,1485,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,852,0,0,0,0,17,0,0,0,0,0,0,1001,0,0,0,0,35,831,0,0,384,457,0,0,0,1351,0,27,\n0,0,984,0,264,552,0,401,0,0,0,710,0,1211,0,0,11,205,0,0,0,0,0,0,0,0,0,0,0,0,5,\n579,0,717,0,0,1011,0,0,0,0,0,0,0,0,0,0,0,0,0,0,805,0,0,0,0,0,0,0,0,0,0,0,489,0,\n0,0,1024,0,0,0,0,0,0,0,0,0,892,0,0,0,0,0,0,0,0,0,0,0,0,473,0,0,0,659,864,0,0,0,\n0,0,0,152,819,0,51,0,0,0,0,0,0,0,0,0,0,130,0,0,0,0,0,229,0,0,0,0,674,0,0,0,0,0,\n0,0,0,0,770,52,79,0,0,0,1666,0,409,0,0,0,0,0,0,0,195,0,688,0,0,0,0,0,0,0,0,0,0,\n0,889,174,160,0,0,0,0,0,0,0,0,0,0,0,0,0,872,0,918,569,268,0,0,0,1224,0,1361,0,0,\n0,0,0,0,0,0,0,374,0,0,0,0,0,731,0,0,0,0,190,0,0,0,0,0,0,0,202,506,444,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,835,0,17,1526,0,0,0,0,0,477,0,0,\n994,1374,76,0,0,0,0,0,0,0,355,287,0,1389,0,0,0,0,0,0,455,384,0,0,0,264,0,0,0,0,\n0,0,0,0,0,0,0,0,1001,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,851,175,359,0,0,0,0,0,0,0,\n0,287,740,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,857,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n819,1402,0,0,0,0,0,0,174,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1649,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,655,573,0,0,0,0,0,0,0,0,128,351,0,0,0,0,0,0,\n0,0,0,0,0,918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,687,0,0,0,0,0,0,0,0,0,1525,\n0,0,0,1009,0,0,0,0,0,0,0,340,0,0,0,0,0,0,0,0,0,0,861,0,176,0,0,0,0,0,0,0,0,0,96,\n985,0,615,0,0,0,0,0,0,0,1919,0,0,0,0,0,1131,0,0,0,0,0,0,0,247,0,0,0,0,27,23,0,0,\n0,0,0,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1015,0,0,0,0,0,1088,0,0,\n0,0,0,1585,0,0,0,0,227,0,0,0,478,360,0,0,0,95,0,0,0,0,0,0,699,0,0,0,26,0,0,0,0,\n1119,0,0,0,739,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,741,67,0,0,0,0,0,0,464,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,0,96,0,0,0,26,342,0,0,0,0,0,0,203,0,0,449,0,\n0,0,0,0,0,0,0,0,0,256,311,0,0,0,0,0,0,758,0,0,0,0,0,0,0,0,827,0,0,0,0,581,64,0,\n1047,0,0,0,0,0,288,0,0,0,0,0,1375,0,0,0,0,0,0,0,0,0,0,0,1309,0,0,0,0,0,0,0,0,\n376,12,0,0,0,0,0,154,0,1520,0,1753,95,502,0,0,0,0,0,0,0,269,291,1197,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,1341,0,1017,0,0,0,0,0,0,0,\n0,857,1810,533,0,0,1453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,836,211,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,19,0,156,0,0,0,0,1009,0,0,0,0,0,0,0,0,0,0,0,0,0,820,0,0,\n0,0,0,0,0,0,0,228,0,0,0,1131,0,1276,0,0,0,0,0,0,0,0,0,0,0,0,849,1792,0,0,389,\n291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,525,0,0,\n0,453,0,0,0,0,666,0,0,0,422,0,355,0,0,0,0,165,0,260,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,865,0,0,0,0,0,0,0,1625,0,0,0,234,0,1383,0,0,0,0,0,0,0,0,306,0,0,0,802,1921,\n0,0,0,0,0,0,180,0,0,0,0,1312,814,0,0,0,0,0,0,0,0,0,0,707,0,0,0,1493,11,61,733,0,\n0,0,341,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,1014,0,0,0,0,0,0,0,142,102,0,0,30,0,0,\n823,0,1045,0,0,0,1930,0,1512,0,0,0,0,0,0,0,87,0,1243,245,0,0,0,0,0,0,0,48,68,0,\n0,0,0,0,0,0,0,126,77,625,938,0,0,351,0,0,0,174,1668,0,707,0,0,0,0,0,0,0,0,0,0,0,\n403,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,282,0,0,0,0,0,0,8,44,0,0,363,115,0,0,0,0,0,0,\n0,0,0,0,0,0,545,761,0,0,835,1254,0,0,0,0,930,1936,0,0,0,0,0,0,0,0,653,0,0,0,0,0,\n344,0,0,1483,673,185,0,0,460,93,753,478,0,0,0,0,0,1020,0,0,0,0,0,0,0,103,0,0,0,\n499,0,0,0,0,0,0,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,0,968,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,3,0,0,0,0,399,0,0,0,0,224,563,0,0,0,0,0,704,0,0,0,0,0,0,0,0,0,0,0,\n1559,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,861,0,0,0,0,946,333,746,0,0,0,0,0,\n0,0,910,0,0,0,0,0,0,0,0,0,0,0,0,0,652,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n1393,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1514,0,0,0,0,201,0,510,717,0,0,528,0,0,0,0,\n20,0,0,0,1251,0,0,0,1163,0,0,0,307,0,0,0,0,0,1091,0,0,0,0,0,0,0,0,0,0,0,429,0,0,\n0,881,0,0,0,0,0,621,0,0,0,0,0,0,0,736,0,348,0,868,0,0,0,0,433,0,0,0,771,1495,0,\n0,0,0,215,0,0,0,0,0,124,0,0,0,0,0,0,0,0,0,0,0,55,0,0,0,0,0,0,0,112,62,0,856,270,\n0,572,0,0,0,0,939,0,0,0,0,0,0,0,352,0,0,0,0,0,0,0,0,0,647,0,0,0,0,10,0,0,0,0,0,\n0,0,220,0,0,0,0,0,0,0,0,0,0,0,0,0,464,0,0,109,0,0,0,1746,0,0,0,515,0,0,0,566,0,\n0,0,0,0,0,67,40,0,0,722,992,0,0,923,0,0,0,0,0,0,1145,0,0,0,0,0,0,0,0,0,0,0,568,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,247,0,0,0,0,645,0,0,328,0,0,0,0,0,0,0,0,0,0,0,0,\n1363,0,0,0,0,0,1280,0,0,0,0,0,0,0,0,0,0,7,28,360,162,0,0,0,0,0,0,0,0,0,0,0,764,\n0,0,833,862,0,856,0,0,0,0,0,0,736,92,0,0,948,1944,0,1479,63,590,0,0,0,1521,0,0,\n0,709,0,0,61,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,483,0,0,0,0,1213,\n0,0,0,0,29,1022,0,1712,0,466,0,0,0,0,0,0,0,0,0,0,0,0,0,731,0,0,0,0,0,0,171,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,241,0,0,0,0,0,0,0,0,0,0,0,964,2005,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,1100,0,0,0,954,0,0,0,0,0,0,0,0,0,1958,0,0,34,549,994,0,0,449,\n137,850,0,0,670,146,0,0,0,0,518,159,0,0,0,0,0,0,0,0,151,0,0,1027,0,0,0,0,0,0,0,\n0,0,0,983,0,0,0,0,993,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,141,501,0,0,0,\n0,0,0,0,0,0,452,0,0,0,0,0,0,0,0,0,0,233,149,0,0,0,0,0,0,0,0,582,0,0,0,801,0,0,0,\n0,0,0,70,0,0,369,0,36,0,0,0,0,0,0,0,204,721,430,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1817,16,1078,1021,0,0,\n406,0,0,0,0,0,69,0,0,0,0,0,1830,0,0,0,824,0,0,0,0,0,0,0,0,0,826,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,816,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1000,717,1845,0,423,0,0,\n0,0,0,0,0,0,510,0,0,1048,0,0,0,618,0,0,0,520,0,0,0,0,990,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,321,0,0,0,0,0,0,0,1135,0,0,921,0,0,0,24,397,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,856,0,0,0,139,282,981,0,288,0,0,0,1890,651,56,0,0,0,0,0,0,0,\n0,261,0,0,0,0,0,0,0,0,0,0,0,617,1403,0,1205,0,0,563,0,0,0,0,0,0,0,0,333,0,0,0,0,\n0,369,0,0,0,0,0,0,0,0,0,622,0,0,0,1407,0,0,0,0,0,0,0,0,0,0,0,0,624,160,0,363,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,619,0,174,292,0,0,656,616,0,0,0,685,0,0,0,0,0,0,0,0,0,0,0,0,0,647,0,0,0,631,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1267,0,0,0,1797,0,0,0,1684,0,0,469,0,531,\n1230,73,0,0,0,0,0,0,0,0,0,268,0,0,0,0,0,102,558,109,65,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,595,0,0,0,0,0,374,1832,0,0,0,0,0,0,16,0,405,6,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,881,0,1495,0,0,0,0,0,0,0,0,0,142,0,0,0,0,0,0,0,0,0,0,21,466,23,\n257,0,0,0,0,0,0,77,404,0,0,0,0,0,0,712,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,860,\n1848,0,0,652,629,0,0,0,0,13,377,0,1842,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1501,0,\n0,0,1906,0,0,0,0,0,0,0,0,0,0,0,0,0,491,234,171,0,0,0,0,631,1186,0,0,0,0,0,0,0,0,\n0,0,0,0,931,0,170,0,0,0,0,0,0,0,0,0,0,1587,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n765,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,424,0,0,714,0,0,0,0,685,0,0,0,0,0,\n0,285,0,0,0,0,0,0,429,0,0,0,0,0,0,0,0,0,0,71,18,0,0,0,0,0,0,0,0,0,0,116,828,0,0,\n0,0,0,0,289,0,0,0,0,0,0,0,0,675,0,0,0,1424,0,0,0,0,0,647,0,0,0,1334,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,36,209,0,0,0,0,0,0,0,342,0,0,0,928,0,0,0,0,0,1838,118,856,654,\n318,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,915,895,454,0,0,513,1425,0,0,\n0,0,0,0,791,0,153,0,0,0,0,0,0,796,909,445,345,0,0,0,0,0,0,0,0,578,0,0,0,1387,0,\n0,0,555,0,0,0,0,0,0,766,0,0,0,0,0,0,0,0,0,0,541,0,0,0,0,0,0,0,0,0,0,0,0,0,880,0,\n0,0,0,0,1506,0,0,983,0,768,0,0,0,0,584,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,737,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,226,30,426,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,462,0,0,0,385,0,398,0,0,0,0,0,0,\n0,0,0,347,0,0,0,0,125,1259,644,136,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,469,0,0,0,0,0,\n1367,0,0,0,0,0,0,0,0,0,0,0,719,0,0,0,0,0,0,0,0,0,0,0,0,0,1423,0,0,0,0,0,0,0,0,0,\n749,0,0,0,0,546,645,0,0,0,0,0,0,277,0,0,1275,0,0,0,0,0,0,0,453,536,555,0,0,987,\n1107,0,0,90,0,0,0,0,0,0,0,0,860,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n257,0,1768,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1071,0,0,0,0,0,0,0,0,0,0,0,0,0,83,\n0,835,0,0,0,0,0,0,0,2006,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,696,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,95,1718,0,0,0,0,0,0,0,26,0,550,0,0,0,0,0,901,0,0,0,0,0,\n0,822,0,0,122,0,0,0,807,0,0,0,0,0,262,0,620,601,34,0,0,170,0,0,0,0,537,0,0,0,0,\n0,0,0,0,0,332,0,0,208,1909,182,261,0,0,0,1721,0,0,0,0,0,933,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,1609,0,895,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,812,0,0,942,1916,0,0,0,0,\n0,0,0,778,0,0,0,137,0,1314,0,0,0,0,0,0,0,1661,0,0,0,0,0,0,0,1591,0,0,0,0,0,0,\n820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,185,89,0,1160,230,6,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,63,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1740,0,0,177,\n170,0,1961,0,0,0,0,0,0,0,0,0,0,0,0,91,0,17,44,0,0,0,0,0,0,0,0,0,270,0,296,0,0,0,\n0,0,0,0,1523,0,0,0,0,0,0,0,0,0,0,757,7,0,0,0,0,0,0,0,0,0,0,530,588,0,0,0,0,0,0,\n0,0,0,786,0,0,0,0,0,580,627,88,447,57,0,0,0,0,0,0,0,0,845,735,0,0,0,0,0,31,15,0,\n460,521,12,424,0,0,0,1302,0,0,0,0,0,0,0,595,0,0,0,13,548,97,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,1472,452,1767,0,0,0,0,0,0,0,0,0,0,115,0,0,0,0,0,0,1543,0,1111,0,0,0,0,\n1,0,359,488,0,267,0,0,0,1983,0,0,0,0,0,0,0,1155,0,1575,0,1438,31,0,0,377,101,0,\n0,0,0,0,0,0,0,0,0,0,0,0,476,0,0,0,0,0,0,0,0,2023,0,0,0,0,0,1836,0,0,0,0,35,843,\n0,0,0,0,0,0,0,554,0,0,0,536,625,207,0,1371,0,0,0,424,785,336,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,896,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,750,0,0,0,0,238,0,0,\n0,0,0,383,0,0,0,0,0,0,0,0,603,725,11,0,0,0,0,0,0,0,0,0,476,0,0,0,0,0,1552,0,0,0,\n0,0,0,0,680,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,435,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n1431,0,0,13,112,0,0,356,0,0,0,0,0,0,0,0,0,0,1963,0,0,0,1244,18,0,0,0,0,0,0,867,\n0,0,0,0,0,0,50,708,73,592,0,502,0,0,0,0,0,0,161,347,0,0,0,0,470,33,0,246,571,10,\n0,465,614,0,237,0,0,0,0,0,24,18,0,506,0,0,0,0,0,0,33,309,0,0,0,0,0,0,0,0,0,0,\n140,0,0,0,0,1056,0,0,0,1704,0,0,0,0,0,0,0,1036,0,0,0,0,0,0,0,0,0,1315,432,86,\n264,524,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,107,0,0,0,0,0,123,927,0,0,957,1149,0,0,\n0,0,0,778,0,502,196,0,0,0,0,1312,0,0,0,0,0,0,0,855,0,0,0,0,0,0,0,0,0,0,45,1400,\n0,0,0,1003,0,0,0,0,0,1097,0,0,0,0,0,0,0,0,545,612,0,0,0,0,0,0,0,0,0,0,0,0,54,0,\n0,0,0,172,0,0,0,1029,0,0,0,0,0,0,0,0,0,568,0,0,0,732,617,0,0,974,94,989,733,0,0,\n0,0,0,0,1789,0,0,665,2015,0,0,0,0,0,0,806,287,0,0,0,0,0,1539,0,0,0,0,0,0,0,0,0,\n0,182,1563,0,0,0,0,0,0,0,0,0,484,0,0,0,0,0,1623,0,0,0,0,0,0,0,0,878,1833,0,1569,\n0,0,0,0,0,0,0,0,93,0,715,994,0,0,0,0,0,63,0,591,0,0,0,0,0,0,0,749,0,0,0,0,547,\n366,0,0,0,1747,0,0,0,0,0,0,0,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1463,0,772,\n893,0,0,0,48,0,0,941,0,0,690,1785,106,440,0,0,0,0,0,0,0,0,0,0,32,0,332,216,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,852,0,\n0,416,564,0,918,0,1764,0,0,3,0,0,274,0,0,0,0,501,0,0,0,0,0,0,0,851,743,0,49,0,\n879,0,0,47,0,0,0,0,0,0,865,0,1202,0,0,0,0,0,0,47,272,0,0,0,0,0,0,0,0,0,0,0,1455,\n0,0,0,0,891,1911,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,761,0,0,0,0,0,0,0,0,0,407,0,\n183,0,0,490,0,0,0,0,0,0,0,35,731,0,0,0,0,0,0,0,819,0,0,0,0,0,0,0,0,0,0,0,0,0,\n575,0,0,0,0,45,818,0,0,77,222,0,0,0,0,849,1880,0,0,0,633,0,1308,0,0,0,0,0,0,0,0,\n0,0,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,817,0,0,0,0,0,0,0,0,0,882,0,0,0,914,0,0,0,0,\n0,0,0,0,0,0,865,0,0,426,399,58,0,0,0,0,0,0,538,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,876,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,566,0,63,12,0,0,0,\n0,0,0,0,0,0,0,0,0,0,3,114,0,0,0,0,0,0,0,0,576,0,0,0,0,0,0,0,0,933,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,692,0,0,0,0,0,0,0,0,0,0,0,0,752,0,0,0,0,\n0,0,0,0,375,0,1011,0,0,96,0,0,0,0,0,0,0,0,0,148,0,0,0,0,0,0,0,0,0,0,0,337,56,\n666,0,246,394,0,0,0,0,0,0,0,0,437,0,0,0,506,0,0,0,0,1003,0,1163,0,328,0,0,0,0,0,\n0,0,0,1000,0,0,0,0,0,744,101,0,0,0,0,0,726,0,0,176,0,146,9,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,839,0,0,0,0,0,0,223,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,246,1931,29,0,0,1771,0,0,0,0,0,846,6,157,0,0,0,0,0,0,0,0,0,875,0,0,477,\n773,177,639,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1747,0,0,0,0,158,873,0,659,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,391,0,0,0,0,0,0,0,0,0,0,0,0,668,883,0,78,628,0,0,0,\n0,0,0,0,0,0,0,0,0,1460,0,962,0,0,0,0,0,460,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,199,0,\n0,0,388,474,0,271,0,333,608,0,0,0,0,0,0,49,0,988,0,707,617,0,0,0,0,0,0,0,756,0,\n0,0,0,0,1583,0,0,0,0,0,0,0,0,0,0,285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,344,0,0,0,0,0,\n0,0,0,515,1709,0,0,0,0,0,0,0,0,404,0,0,0,0,500,0,0,0,0,0,0,0,0,0,68,216,0,0,0,0,\n0,0,0,488,353,0,0,177,236,0,0,458,490,0,0,0,0,0,0,756,1504,0,757,0,1735,0,0,108,\n598,0,0,0,0};\nconst BROTLI_MODEL(\"small\")\nuint8_t kStaticDictionaryHashLengths[BROTLI_ENC_NUM_HASH_BUCKETS] = {\n8,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,0,12,0,0,0,0,4,22,5,0,\n4,0,0,0,0,0,0,0,0,0,0,0,0,14,6,0,0,0,5,0,0,0,0,0,0,0,7,13,0,0,4,0,0,0,0,0,0,0,0,\n0,6,0,0,0,0,8,0,0,0,0,0,0,7,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,4,0,0,0,4,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,10,4,0,5,13,7,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,8,7,0,0,9,0,8,0,0,0,0,0,0,6,0,\n0,9,0,0,0,11,0,0,6,8,7,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,7,0,0,0,6,8,0,0,0,0,0,\n0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,9,0,0,0,8,4,13,7,0,0,0,0,0,\n7,0,5,0,0,0,0,8,5,0,5,0,0,8,7,0,0,0,0,0,0,0,0,0,0,9,0,0,0,8,0,0,0,10,4,0,5,0,4,\n0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,8,7,0,4,9,4,0,0,0,0,0,0,\n9,0,0,0,8,5,0,0,0,6,0,0,0,0,0,0,0,0,0,7,18,0,0,0,0,4,9,0,0,4,0,6,0,0,0,6,0,6,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,5,8,7,0,0,0,\n0,9,0,0,0,0,0,0,0,8,6,10,6,0,0,0,4,0,6,8,6,0,0,0,4,0,0,0,0,0,5,0,0,0,6,0,0,0,0,\n10,0,12,7,0,0,0,0,0,4,0,0,0,0,0,5,0,0,8,7,0,0,0,0,0,0,0,0,9,5,0,0,0,0,0,0,0,0,0,\n0,0,0,0,6,11,0,0,0,0,0,0,0,0,0,8,7,0,0,10,0,0,0,0,0,0,0,0,6,10,0,17,0,8,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,8,6,9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n7,0,0,11,4,0,5,0,0,0,0,0,0,0,0,0,0,10,5,0,6,8,5,0,0,0,0,0,0,0,0,0,0,11,5,0,0,0,\n0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,9,0,0,0,0,5,0,0,0,0,0,0,0,0,0,6,0,0,8,7,0,0,0,0,0,\n0,0,0,0,0,0,5,0,0,0,6,0,0,10,0,0,0,20,0,0,0,0,0,0,0,0,6,9,5,0,0,0,0,10,4,8,0,0,\n4,13,0,0,0,0,0,0,0,9,0,9,0,0,0,0,0,0,0,0,0,0,0,0,4,8,6,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,12,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,12,5,0,0,10,4,10,7,13,\n0,0,0,0,0,0,0,0,6,0,6,0,6,0,0,0,0,0,0,19,0,0,4,12,6,9,0,0,0,0,4,0,4,11,0,0,0,0,\n0,0,0,12,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,4,0,0,0,0,0,0,0,0,0,6,0,0,0,0,\n0,5,0,0,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,8,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,9,6,0,0,0,0,0,4,0,4,0,0,0,0,0,0,0,0,0,4,0,0,0,\n6,0,0,0,0,0,0,0,0,0,0,13,6,0,0,0,0,0,0,0,0,0,0,0,6,8,0,0,0,0,0,0,0,0,0,0,6,0,0,\n0,0,0,5,0,0,0,0,14,4,0,0,0,4,12,5,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,8,6,0,\n0,0,0,0,0,12,0,9,6,0,0,0,0,13,0,0,5,0,0,0,0,0,4,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,13,0,9,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,5,0,0,0,6,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,6,0,6,0,0,0,0,0,0,0,0,8,7,8,4,0,0,0,0,0,0,0,0,0,0,0,7,0,7,0,0,0,4,0,\n0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,8,6,8,4,0,0,0,0,0,6,0,7,0,\n0,0,0,0,0,0,0,0,0,10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,7,0,0,0,0,0,0,9,5,0,0,\n0,0,0,7,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,9,4,0,0,0,0,0,0,0,4,\n12,5,11,0,0,0,0,0,0,0,0,0,8,7,0,5,0,0,8,7,0,5,0,0,0,0,8,0,0,0,0,7,0,4,10,0,0,0,\n0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n13,5,0,0,0,4,0,0,0,0,0,6,0,0,0,0,0,0,14,5,0,0,0,7,0,0,10,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,6,0,4,0,5,0,0,0,0,8,5,0,0,0,0,0,0,9,5,9,0,0,0,0,0,0,0,0,6,9,0,\n0,4,0,0,0,7,0,0,0,6,0,0,10,4,0,0,0,0,0,6,0,0,10,0,0,0,8,5,0,0,0,0,0,0,0,0,10,0,\n0,0,0,0,18,4,12,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,8,7,0,0,0,\n0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,8,4,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,\n0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,8,0,0,0,0,0,0,6,0,0,0,4,10,5,0,0,0,0,0,0,0,0,0,0,\n0,4,8,7,0,0,8,6,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,\n0,0,0,8,6,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,6,0,7,0,0,0,0,0,0,\n0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,8,7,0,0,0,0,8,0,12,6,0,6,0,0,0,0,9,7,11,7,0,0,0,\n0,0,0,0,0,0,0,0,0,11,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,10,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,\n0,0,0,6,0,0,0,7,0,4,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,14,0,0,0,0,0,8,4,0,4,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,20,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,12,5,0,7,0,5,0,0,10,0,0,7,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,6,0,4,9,7,0,0,0,\n0,0,7,0,0,0,0,0,0,10,0,9,0,9,0,0,0,0,0,0,0,0,4,9,0,0,0,0,6,0,0,0,0,0,0,0,0,11,4,\n0,6,0,0,0,0,0,0,8,0,8,0,0,0,0,0,0,0,0,0,0,4,0,0,0,5,0,0,0,0,0,0,0,0,13,6,0,0,11,\n0,0,0,0,0,0,0,9,7,0,0,0,0,0,0,0,0,0,0,0,6,18,0,0,4,0,0,0,0,0,0,0,6,0,0,0,0,0,0,\n0,5,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,0,0,6,0,0,0,0,9,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,11,7,0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,0,11,\n4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,4,0,0,0,0,8,\n6,0,0,0,0,0,0,9,6,0,0,0,0,0,4,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,0,0,\n0,6,0,6,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,6,0,6,0,0,10,6,0,0,0,7,0,0,8,0,8,7,0,\n0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,9,0,0,0,0,6,0,0,0,0,0,0,0,5,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,\n0,0,0,8,7,0,0,0,0,0,0,0,0,12,0,12,0,0,0,11,6,0,5,0,0,12,0,12,5,0,7,11,6,0,0,11,\n0,0,0,12,0,0,4,12,7,8,6,0,0,0,0,8,5,0,0,0,0,0,0,0,4,11,0,0,6,0,7,0,0,0,0,0,0,0,\n5,0,6,0,0,0,0,8,0,10,0,0,0,0,0,0,0,0,0,0,0,9,7,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,\n0,0,0,0,0,0,0,0,0,11,7,0,0,0,0,0,0,10,0,0,5,0,0,12,6,0,0,0,0,0,0,10,6,0,0,0,0,8,\n6,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,5,0,0,0,0,11,0,10,6,0,0,8,6,0,0,0,6,0,7,10,6,0,\n0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,10,7,0,0,0,0,\n10,6,0,0,0,0,0,0,8,5,11,0,8,4,0,0,0,4,0,0,0,0,9,4,8,0,0,0,0,0,0,0,11,6,0,0,0,0,\n10,7,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,7,0,0,0,0,9,6,0,5,0,7,0,0,0,0,0,7,0,0,11,0,0,\n0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,\n0,0,0,0,13,0,8,6,13,0,0,0,11,7,0,7,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,6,0,0,9,6,0,6,0,0,0,0,0,5,0,0,0,0,0,0,0,0,\n0,0,0,0,0,5,9,0,0,0,0,0,0,0,0,0,0,4,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,9,7,0,7,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,\n5,11,5,0,0,0,0,0,0,0,0,0,4,0,7,0,6,0,0,0,6,20,0,0,0,10,7,0,5,14,4,0,0,0,0,0,0,0,\n0,0,6,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,\n0,0,6,0,4,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,9,7,0,0,11,6,15,0,0,0,0,0,\n10,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,7,0,0,0,0,0,0,0,0,9,7,13,0,0,0,0,0,\n0,7,0,0,8,6,0,0,0,0,0,0,0,0,9,4,0,0,0,0,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,5,0,0,0,0,0,0,0,0,0,0,0,0,8,5,0,4,0,0,0,0,0,0,0,0,0,0,12,6,8,0,12,0,0,7,0,0,0,\n0,0,5,10,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,\n14,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,8,7,10,7,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,18,6,\n14,7,0,0,0,0,0,0,0,0,11,6,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,0,11,7,0,0,10,7,0,0,0,6,8,6,0,0,0,0,0,0,0,6,0,0,\n19,0,0,0,9,5,0,0,0,0,0,0,11,7,0,0,0,7,0,6,0,0,11,0,0,0,0,4,8,0,0,0,0,0,0,0,0,6,\n0,0,0,0,0,6,0,0,8,4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,7,\n0,7,0,0,0,7,15,0,0,5,0,0,0,0,10,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,7,0,0,\n0,0,0,0,0,0,9,6,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n11,7,0,0,0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,\n0,0,5,0,4,0,0,0,4,0,4,0,0,0,0,0,0,0,0,0,6,0,0,0,0,11,6,0,0,8,5,14,0,0,4,0,0,0,7,\n17,0,0,0,0,0,0,0,13,5,0,0,0,0,0,5,0,0,0,5,0,0,0,0,16,6,0,4,0,0,0,0,0,0,12,0,0,0,\n0,0,0,6,0,0,0,0,0,0,0,0,0,0,12,5,0,5,0,6,10,0,12,0,0,0,0,0,0,0,0,7,0,0,0,0,8,4,\n0,0,0,0,0,0,0,0,0,0,8,7,0,0,8,0,0,0,8,0,0,6,0,7,0,0,0,5,0,6,0,4,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,22,0,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,0,0,\n0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,18,0,0,0,9,4,0,0,8,0,9,7,0,0,0,0,0,0,8,6,0,0,0,0,\n0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,9,7,0,0,0,6,0,0,14,0,0,0,0,\n0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,7,10,4,\n0,6,0,0,0,0,0,0,8,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,9,6,0,0,0,0,0,0,\n0,0,11,6,12,7,0,0,0,0,0,0,0,6,0,5,0,0,0,0,0,0,9,6,11,6,0,0,0,0,9,5,0,0,0,0,0,0,\n0,6,8,5,0,0,0,0,8,0,10,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,\n5,10,7,0,0,0,5,8,7,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,4,8,7,0,0,0,6,0,0,\n0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,6,0,0,0,0,0,0,0,0,0,0,0,0,22,\n0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,5,0,0,0,0,0,0,0,\n0,0,0,0,0,17,0,0,6,0,6,12,4,19,6,0,0,0,0,16,0,0,0,0,7,15,7,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,4,10,4,0,0,8,7,0,7,0,0,9,\n4,0,6,0,0,0,4,0,5,0,0,0,7,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,7,10,0,0,0,0,0,11,7,0,0,\n0,0,12,6,0,0,0,0,0,0,0,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,\n0,0,0,0,0,0,0,0,0,10,4,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,8,7,0,0,\n0,0,0,0,0,6,0,0,0,4,0,0,11,4,0,0,12,7,0,0,0,0,9,0,0,6,0,0,0,0,0,0,0,0,0,5,0,0,0,\n4,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,6,0,0,0,0,0,0,9,4,0,6,0,0,0,0,0,4,\n0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,6,0,0,0,5,0,0,0,0,0,0,0,0,0,7,9,6,0,7,0,\n0,0,0,0,0,0,6,0,0,0,0,8,6,0,0,0,0,10,6,11,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,5,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,5,0,4,8,0,0,0,0,0,9,7,0,0,0,0,0,0,\n13,5,0,0,0,0,8,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,8,5,0,0,11,7,0,0,0,0,0,0,8,6,0,\n0,0,0,0,7,0,4,0,0,0,0,0,0,0,5,0,6,0,5,0,0,0,0,0,0,0,0,0,0,0,0,10,4,9,0,0,0,0,0,\n0,4,0,0,0,0,10,5,10,7,0,0,0,0,0,0,0,0,16,7,0,0,0,0,0,7,0,0,0,0,11,0,0,0,0,0,0,0,\n0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,5,0,4,0,0,0,7,0,0,0,0,0,0,13,0,0,\n0,0,0,0,0,0,0,0,7,0,4,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,13,7,0,7,0,4,16,0,0,0,0,6,8,7,9,7,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,\n0,6,0,0,8,5,0,4,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,5,11,7,0,0,11,\n0,0,0,0,0,9,5,0,4,0,0,0,0,9,7,8,6,0,0,0,0,0,0,10,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,\n0,7,0,0,0,0,0,0,0,0,0,0,0,4,10,6,0,7,0,0,0,0,0,0,0,5,0,0,0,0,0,0,10,7,10,0,0,0,\n0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,7,0,6,8,7,12,4,0,0,0,0,0,0,0,5,14,\n0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,\n6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,4,0,0,20,4,0,0,0,7,0,6,0,0,0,0,0,0,0,0,8,0,\n0,6,15,0,0,6,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,12,0,0,0,9,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,5,0,0,0,0,0,0,8,6,0,0,18,0,0,0,10,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,9,6,0,\n6,0,0,0,0,0,0,0,0,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,7,0,0,0,0,9,0,9,0,0,4,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,9,5,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,10,0,0,0,0,7,0,0,0,0,0,0,0,0,0,7,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,8,0,8,0,0,0,16,0,0,0,0,0,0,0,\n0,0,0,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,8,0,0,0,11,0,0,0,0,0,0,0,0,0,0,\n6,0,0,0,0,11,0,0,0,9,7,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,7,0,7,0,6,\n0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,\n0,0,0,0,0,0,0,6,0,0,18,0,8,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,7,0,4,0,0,0,\n0,0,0,0,0,0,0,8,0,0,0,0,0,16,0,0,0,0,0,16,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,18,0,0,0,0,0,0,0,0,0,9,7,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,4,0,\n0,0,0,0,0,0,0,9,4,0,0,0,0,12,5,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,12,5,0,0,0,0,0,0,0,5,0,0,10,6,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,9,0,0,0,11,0,0,6,0,6,0,0,\n0,7,0,0,0,0,0,0,8,0,0,0,0,6,0,0,0,0,0,0,19,0,0,0,12,0,9,0,0,0,0,0,10,7,0,0,0,0,\n0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,16,7,12,\n0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,12,6,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,10,5,0,0,0,0,0,0,0,4,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,7,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,4,0,0,0,0,0,0,0,4,0,0,9,0,0,0,8,0,12,4,0,0,0,0,\n0,4,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,5,0,\n0,0,0,0,0,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,8,6,0,6,0,0,0,0,0,0,\n0,4,0,0,0,0,0,6,0,0,9,0,0,0,0,0,0,6,0,0,0,0,0,0,11,0,0,0,0,0,0,0,10,6,0,0,0,0,8,\n6,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,7,0,0,0,0,0,7,0,6,\n10,7,0,0,10,5,11,6,0,0,0,0,0,7,16,0,0,0,0,6,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,5,0,0,0,7,9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,0,\n0,0,0,0,0,8,7,0,0,0,0,11,6,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n8,7,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,12,7,0,7,0,0,0,\n0,0,0,0,6,0,0,0,0,9,0,0,0,23,0,0,0,0,0,10,5,0,0,0,0,0,0,0,0,0,4,0,0,11,7,10,0,0,\n0,0,0,0,0,0,0,0,0,0,6,0,0,8,7,0,7,0,0,8,7,8,0,0,0,0,0,0,0,0,0,0,0,14,5,0,0,0,0,\n0,0,0,0,18,6,8,7,0,0,0,0,0,0,0,4,0,0,0,0,0,0,11,0,0,0,9,7,12,6,0,0,0,0,0,0,0,0,\n0,0,12,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,0,7,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,6,8,7,0,0,0,6,10,0,0,0,9,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,6,\n10,7,0,0,0,7,0,0,8,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,\n0,0,0,8,7,8,6,0,0,11,7,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,4,8,7,0,0,0,0,0,0,0,0,\n0,5,0,0,13,0,0,0,0,5,0,0,9,7,0,0,0,0,0,0,0,4,0,0,11,0,0,7,0,0,0,0,0,0,0,0,0,6,0,\n0,0,0,0,0,12,7,19,0,8,6,0,0,0,0,0,6,0,0,0,0,0,0,0,0,10,6,8,0,0,0,0,0,0,0,0,0,0,\n6,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,7,0,0,12,0,0,0,0,6,9,6,\n14,0,0,0,0,0,0,6,0,5,0,0,8,7,0,0,0,6,0,4,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,4,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,5,0,\n7,0,0,10,0,9,7,0,6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,12,6,0,0,0,0,0,5,0,6,0,0,0,0,\n0,0,0,0,0,0,0,6,0,0,0,0,9,7,0,0,0,0,0,0,11,6,0,0,0,0,0,0,0,0,0,0,11,7,0,0,13,7,\n0,0,0,0,0,0,0,0,12,0,0,4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,6,11,5,0,5,13,0,8,0,\n0,0,0,6,0,0,0,0,0,0,11,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,11,5,\n9,6,0,0,0,4,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,10,0,0,0,8,5,0,0,9,0,0,0,8,7,9,0,0,0,0,0,0,0,0,7,0,6,0,0,0,0,0,0,0,0,0,\n0,11,0,13,6,0,0,9,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,\n0,0,0,0,0,5,21,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,5,0,0,0,0,0,0,0,0,10,0,8,0,\n0,6,0,0,0,4,0,0,9,0,0,0,0,0,0,0,0,0,0,4,0,0,8,6,0,6,0,7,10,0,8,4,0,4,0,0,0,0,0,\n5,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,6,12,0,0,7,0,0,0,5,0,0,\n0,0,0,0,0,0,0,6,0,0,8,6,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n15,7,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,6,0,0,24,7,0,0,0,0,0,0,0,0,0,\n7,0,0,0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,6,0,\n0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,4,12,0,0,7,0,0,0,0,0,5,0,0,0,0,0,0,0,0,15,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,8,0,0,0,\n0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,9,0,9,6,\n0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,8,4,0,7,0,0,0,0,0,0,0,0,\n22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,4,0,7,0,0,21,7,0,7,9,6,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,8,0,0,6,\n0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,23,0,0,0,0,7,0,0,0,\n4,0,0,0,0,0,0,0,0,9,4,11,7,0,5,0,0,0,0,11,0,0,4,20,0,0,0,0,0,0,0,0,0,0,0,11,5,0,\n7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n21,0,0,0,0,0,0,7,0,0,0,0,0,0,0,5,0,0,0,0,0,6,0,0,0,0,11,6,0,0,0,0,0,0,0,0,9,6,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,5,0,4,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,\n0,0,0,10,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,8,7,0,0,11,7,0,0,0,0,0,0,0,4,\n0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,0,5,0,0,0,0,0,0,0,0,0,0,8,7,0,\n0,0,0,0,0,0,0,0,6,0,0,21,6,0,0,0,0,0,6,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,14,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,8,0,0,7,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,\n0,0,0,8,7,0,0,11,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,5,0,0,0,7,13,7,10,4,0,\n0,0,6,0,0,0,0,0,0,0,0,0,5,10,0,0,0,0,0,0,5,0,0,0,7,0,0,0,0,0,0,8,4,0,0,0,0,0,6,\n0,0,0,0,0,0,0,0,0,0,12,7,0,6,0,0,10,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,6,0,\n0,0,0,0,7,0,0,8,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,10,5,0,6,0,0,0,0,0,4,0,0,0,0,\n0,0,0,0,0,4,0,0,0,0,9,0,11,4,0,0,0,6,0,0,0,5,12,7,0,5,0,0,0,0,0,4,0,0,0,7,0,0,0,\n0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,13,6,10,0,0,0,17,0,0,4,0,0,0,0,0,6,0,4,0,5,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,11,7,0,0,0,7,0,0,0,6,0,0,0,0,0,0,\n0,6,0,4,0,0,0,0,8,0,0,0,0,5,0,0,0,0,0,4,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,9,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,5,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,12,0,0,\n0,0,7,0,0,0,0,0,0,0,0,0,0,0,7,0,0,16,4,0,0,11,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n8,7,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,8,6,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,\n7,0,0,0,0,0,0,9,0,0,0,0,0,0,0,12,5,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,5,0,\n5,18,7,0,0,14,0,0,0,0,0,0,0,9,4,0,7,0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,0,0,0,\n8,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,5,0,0,0,7,0,0,0,0,0,0,11,0,0,0,\n10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,14,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n11,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,14,6,0,0,0,0,11,4,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,10,7,0,6,0,0,9,0,9,5,0,0,0,0,0,\n0,0,0,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,8,5,0,0,0,0,0,0,0,0,0,0,11,4,0,6,\n0,6,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,12,4,0,6,8,6,0,0,0,0,0,0,0,0,0,0,8,0,0,5,0,0,0,0,0,0,0,7,0,0,13,0,0,0,0,0,0,0,\n0,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,12,7,0,6,0,0,0,\n0,0,0,0,0,0,0,0,0,13,4,0,7,0,0,0,7,0,7,0,0,0,0,0,0,0,0,10,4,0,0,0,0,0,0,0,0,0,0,\n9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,10,6,21,5,0,0,0,0,8,0,0,0,0,4,0,\n7,0,0,0,0,0,0,11,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,4,0,0,0,0,0,0,\n0,7,9,6,11,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,7,10,0,0,0,0,0,0,6,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,19,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,7,0,0,0,0,0,0,9,4,10,4,0,7,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,9,7,9,7,10,4,0,7,0,0,0,0,0,0,0,6,12,0,\n0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,\n0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,8,0,\n0,0,0,0,0,5,0,0,8,7,0,0,0,7,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,\n0,0,0,0,4,0,0,8,0,0,6,0,0,0,7,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,7,9,7,0,0,0,4,8,0,0,0,0,6,11,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,10,0,0,0,0,0,0,0,13,4,0,0,\n12,6,0,6,0,0,0,0,8,7,0,7,0,0,0,0,0,6,0,0,0,0,0,0,12,6,0,4,0,0,0,0,0,0,0,0,0,0,9,\n7,22,0,0,0,0,4,0,0,0,0,0,6,0,0,0,4,0,0,9,0,0,6,0,0,24,7,0,7,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,10,6,0,5,0,0,0,0,0,0,0,7,0,0,8,0,0,0,0,0,0,0,10,5,0,0,0,0,0,0,0,0,0,7,0,\n7,0,0,0,0,0,0,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,\n0,0,0,0,0,7,12,0,9,4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,8,0,0,0,0,0,0,0,0,4,0,0,0,7,0,\n0,0,0,8,7,0,0,0,0,0,0,0,0,0,4,18,0,0,0,0,0,10,0,0,5,0,0,11,0,0,0,0,0,0,5,0,6,0,\n0,0,6,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,\n4,0,0,0,0,0,0,10,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,\n0,0,0,5,8,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,20,7,0,0,0,0,0,0,0,0,0,0,0,4,9,0,12,\n6,8,0,14,7,0,5,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,10,0,0,\n0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,9,6,0,7,12,0,0,0,0,4,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,\n0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,4,0,0,9,0,\n12,6,0,5,0,0,0,6,0,4,0,6,0,0,0,0,0,0,0,0,10,7,0,0,0,0,0,0,8,0,0,0,0,4,0,0,0,0,\n10,0,0,0,0,0,0,0,8,6,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,0,0,\n6,0,0,12,6,20,5,0,0,0,0,0,0,0,0,0,0,0,0,9,5,0,5,0,0,0,6,13,7,0,0,0,0,15,6,0,0,0,\n6,0,0,13,7,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,5,0,7,0,0,0,0,0,4,0,0,0,0,0,0,0,0,\n10,6,0,0,0,0,0,6,0,0,0,0,9,0,0,0,0,0,19,6,0,0,0,0,0,0,0,0,0,0,13,0,11,0,0,0,0,0,\n0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,0,0,0,0,0,0,10,0,0,6,0,0,0,0,8,0,0,\n0,9,0,15,4,0,6,0,0,0,0,0,6,12,0,0,0,0,0,0,0,14,7,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,\n0,0,0,0,0,8,7,0,0,0,0,0,6,10,0,0,0,0,0,0,0,0,7,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,7,10,5,0,0,0,0,8,0,0,0,0,4,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,6,12,0,0,0,10,7,0,5,0,6,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,6,0,4,0,0,0,0,0,7,0,0,0,0,0,0,0,4,9,6,0,0,0,7,0,0,0,0,0,0,0,0,8,6,0,0,\n0,0,0,0,0,4,12,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,7,0,\n0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,12,6,0,6,9,4,0,0,8,4,0,6,\n0,0,0,0,0,4,0,0,0,0,0,0,0,6,0,0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,8,0,0,6,13,4,0,5,8,0,0,0,0,0,0,0,8,0,0,0,10,5,0,0,9,0,0,0,0,0,0,6,0,0,\n24,0,0,0,0,0,0,0,8,0,0,7,0,0,12,0,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,7,0,\n6,8,0,10,0,9,7,0,0,0,5,0,0,0,0,0,0,0,4,8,5,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,0,4,0,0,0,0,0,6,0,0,0,0,0,5,0,0,0,0,8,0,0,\n0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,10,4,0,0,0,0,0,0,0,6,0,0,0,4,20,0,0,7,\n10,6,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,7,0,0,0,0,9,6,0,0,0,0,0,0,0,4,\n12,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,9,4,0,5,0,0,\n0,0,0,0,0,6,0,6,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,6,9,0,0,0,0,7,0,0,0,0,0,6,0,5,0,0,0,0,0,0,0,0,9,0,0,0,\n0,6,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,17,7,0,0,13,6,14,6,0,0,0,0,\n8,0,0,0,0,0,0,7,12,7,8,7,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,4,0,0,0,0,0,4,0,\n0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,12,4,0,0,10,7,0,0,0,\n0,0,0,10,0,0,6,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,12,0,0,6,\n0,0,0,0,0,0,0,0,8,7,12,0,0,0,0,0,0,6,0,6,0,4,0,0,18,6,0,0,0,6,0,0,0,0,0,6,10,6,\n0,0,0,0,0,0,8,7,14,0,0,0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,\n0,0,0,8,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,8,7,0,0,10,5,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,\n0,0,9,4,8,0,0,0,0,0,0,4,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,4,0,0,0,0,\n0,6,0,0,9,7,0,0,0,0,0,5,0,0,0,0,8,7,0,0,14,0,0,0,0,6,0,0,0,0,0,0,9,6,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,5,0,7,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,\n0,0,0,6,0,0,0,6,0,4,0,0,0,0,0,4,0,0,0,0,12,0,0,7,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,\n0,12,0,16,6,0,0,0,0,0,0,11,7,0,4,8,7,0,0,0,0,0,6,0,0,0,0,16,0,0,0,0,6,0,0,0,0,0,\n0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,4,10,7,0,0,0,0,0,0,12,7,0,0,0,0,0,0,0,0,0,0,\n0,0,10,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,13,4,0,0,10,0,0,0,0,0,0,0,0,0,19,0,0,0,\n0,0,0,0,0,0,0,0,0,0,8,6,22,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,\n5,0,0,0,0,0,5,0,0,0,0,0,5,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n4,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,7,0,0,18,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,14,7,0,0,11,5,0,0,0,5,0,0,0,0,12,5,0,0,0,0,0,0,0,0,0,0,24,6,0,0,\n0,7,0,4,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,7,0,4,0,0,0,0,8,7,0,0,\n9,6,0,0,14,5,0,0,0,6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,12,6,0,0,0,0,0,0,0,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,5,0,0,\n0,0,12,7,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,6,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,6,0,0,13,7,0,0,0,0,0,0,14,0,11,4,0,\n0,0,4,0,0,0,0,14,5,0,0,0,0,0,5,11,5,0,0,0,0,22,5,0,0,0,0,0,7,0,0,0,0,0,4,0,0,0,\n4,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,17,0,10,0,0,0,8,0,0,0,19,\n5,18,7,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,10,6,0,6,0,0,0,0,10,4,0,4,0,\n0,0,0,0,0,14,7,0,5,0,0,0,0,0,6,0,0,0,0,0,0,0,0,8,0,9,6,12,0,0,6,0,0,0,0,0,0,0,0,\n12,0,10,6,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,4,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,5,13,0,9,7,0,0,0,0,0,0,0,0,0,0,0,7,9,7,0,0,8,0,0,0,0,0,\n22,0,0,0,0,0,0,0,23,6,14,0,0,0,0,0,0,7,0,0,0,0,11,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,\n0,0,10,0,0,6,0,0,0,0,0,0,0,0,0,6,0,0,8,5,0,0,0,0,0,0,0,0,0,7,11,6,21,0,0,0,0,0,\n0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,\n0,0,0,0,0,0,0,4,9,7,0,0,0,0,0,0,12,0,0,0,0,7,0,0,0,0,0,0,0,0,10,4,0,0,0,0,0,0,9,\n0,0,0,20,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,11,7,0,0,0,0,0,0,0,6,15,0,0,\n0,0,0,0,0,0,0,0,0,0,0,12,4,0,5,0,0,0,0,0,0,11,7,17,6,0,0,0,0,0,0,15,6,0,7,0,0,0,\n0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,6,0,5,\n0,0,11,0,11,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,\n17,0,0,0,0,6,0,0,0,5,0,0,0,0,0,0,8,7,9,6,0,0,14,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,\n8,7,0,4,0,0,0,0,0,0,0,6,0,5,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,\n0,0,0,5,0,4,0,0,8,7,0,6,12,5,0,7,18,7,0,0,8,5,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,\n10,0,11,0,0,0,0,0,0,0,0,0,0,0,9,0,0,4,0,6,0,7,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,\n7,0,0,0,0,8,0,0,0,15,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,0,0,0,0,0,0,0,\n0,0,6,0,0,0,0,23,0,0,0,10,7,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,5,0,0,0,0,0,0,8,6,0,0,\n0,0,0,0,12,7,9,7,0,0,10,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,9,0,8,7,0,0,0,\n6,0,6,0,4,0,5,0,0,0,0,0,5,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,7,10,5,0,0,11,6,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,4,9,7,0,\n0,0,0,11,7,0,0,0,0,0,5,0,0,0,7,0,0,0,0,23,6,11,4,0,0,0,0,0,0,9,0,0,0,10,6,0,0,0,\n0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,6,0,0,10,6,0,0,0,7,0,0,\n0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,\n6,11,7,0,0,0,0,0,0,0,0,0,0,0,0,10,5,0,0,0,6,0,0,0,5,0,6,0,6,0,0,0,0,0,0,0,0,0,0,\n0,6,0,0,0,0,8,7,0,5,0,0,0,0,0,6,0,0,0,0,0,0,0,4,10,0,8,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,10,6,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,0,\n0,0,0,0,0,0,10,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,11,6,0,4,0,0,14,5,0,7,0,0,0,0,0,6,16,0,0,0,0,0,0,0,10,0,0,7,15,0,0,0,11,7,0,0,\n0,0,0,0,0,0,0,0,8,7,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,5,0,0,0,\n0,8,0,0,6,0,0,0,0,0,0,9,5,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,6,0,\n0,0,0,0,0,0,7,0,0,0,0,15,7,0,0,0,0,8,0,0,0,14,0,0,0,0,0,0,0,16,7,0,0,0,0,0,7,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,12,6,11,7,\n9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,\n7,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,12,0,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,8,0,0,5,8,7,10,6,0,0,0,7,0,0,0,0,12,6,\n0,0,9,0,0,0,12,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,4,10,0,0,0,10,5,0,0,0,0,0,0,9,6,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,6,0,0,9,5,0,4,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,9,0,0,5,0,0,8,7,8,\n6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,10,0,9,4,0,0,0,0,0,0,0,6,\n11,0,0,0,0,0,0,0,0,0,0,0,8,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,8,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,\n0,0,0,10,0,0,0,8,7,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,\n0,0,8,4,0,5,0,0,0,0,0,0,0,7,0,0,0,6,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,8,5,0,0,0,\n0,0,0,0,7,0,0,0,6,0,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,5,0,6,0,7,0,0,0,0,\n20,0,0,0,0,0,0,0,0,0,0,7,9,0,0,0,0,0,0,6,0,6,0,7,0,0,0,7,0,0,0,0,0,0,0,4,0,0,0,\n0,0,0,14,7,0,0,0,5,0,0,22,4,10,0,0,0,0,0,0,4,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,11,5,13,0,0,0,0,0,0,0,0,0,8,0,0,7,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,10,7,0,\n0,0,0,0,0,0,6,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,7,0,7,14,6,0,0,0,0,9,5,\n0,0,0,0,0,6,0,0,0,5,10,0,8,6,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,0,0,6,0,0,8,4,0,6,0,\n0,0,5,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,\n14,0,0,5,0,0,18,0,8,4,0,6,0,0,20,0,13,0,0,0,0,7,0,4,0,0,0,0,0,4,8,4,0,0,0,0,0,6,\n0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,4,0,0,0,0,0,0,0,0,14,0,0,0,0,0,9,7,0,0,9,0,0,0,0,\n0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,20,0,14,0,0,4,0,6,8,5,0,0,0,0,0,7,0,0,0,0,0,0,\n0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,10,4,12,7,0,6,0,0,9,7,10,5,\n0,0,8,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,18,0,0,0,14,7,0,0,0,0,0,4,\n0,0,0,0,0,0,17,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,\n0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,8,5,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,5,0,7,0,0,0,0,0,\n7,0,0,0,0,0,0,0,0,0,7,0,6,0,0,0,0,0,0,0,0,8,5,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,5,0,\n0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,23,0,0,7,0,0,0,0,0,0,\n0,0,0,0,0,0,0,4,0,0,0,0,0,0,12,7,8,4,0,0,0,0,0,0,0,0,0,6,0,0,9,5,0,0,0,7,0,0,0,\n0,0,0,0,0,0,4,10,0,0,7,0,0,0,5,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,5,0,0,18,7,\n0,0,8,0,0,5,0,0,10,0,0,0,0,0,0,6,0,0,0,0,0,5,0,7,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,\n6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,0,10,0,0,5,10,4,0,0,12,0,0,0,0,\n6,22,4,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,5,0,0,0,0,0,7,0,5,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,6,0,7,0,0,0,6,0,6,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,5,0,0,0,7,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,\n0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,16,6,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,12,7,0,0,0,0,9,0,0,0,0,6,0,0,11,0,0,0,0,0,13,0,9,6,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,4,0,0,10,7,0,0,0,7,0,6,0,\n0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,11,0,15,0,22,7,0,4,0,6,0,0,0,0,0,7,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,4,0,7,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,\n18,0,0,0,0,0,0,0,0,0,14,0,0,4,0,0,0,0,8,7,9,0,0,0,0,0,9,0,0,0,14,0,0,0,0,0,0,0,\n0,0,11,7,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,7,0,0,0,6,0,6,0,0,0,0,8,0,0,0,0,\n0,11,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,9,4,0,0,0,0,0,4,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,8,7,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,\n0,0,0,0,0,0,8,6,0,0,9,5,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,5,0,\n0,10,6,9,0,0,0,0,6,0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,\n11,7,12,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,4,0,5,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,\n0,0,0,0,6,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,5,0,0,10,6,\n0,0,0,4,0,7,13,0,0,4,0,0,11,4,0,6,0,0,0,0,0,6,8,7,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,5,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,5,0,0,0,0,12,6,0,0,0,0,\n11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,11,5,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,\n7,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,4,0,0,0,6,17,0,9,0,10,6,0,6,12,0,0,4,0,0,0,\n0,0,0,0,0,0,0,8,5,12,7,0,4,0,0,0,0,0,0,0,0,0,0,11,0,9,0,10,6,11,5,0,7,0,0,8,0,0,\n7,0,4,0,0,0,7,0,0,0,0,0,0,8,6,0,0,0,6,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,6,0,\n0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,11,0,0,0,0,6,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,10,0,0,0,0,0,8,6,0,0,0,0,0,6,12,0,0,0,0,0,\n0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,6,0,0,16,0,11,5,0,0,0,0,0,\n0,0,0,0,0,10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,9,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,0,8,4,0,0,0,0,0,6,10,\n7,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,6,0,0,0,0,0,0,9,5,0,0,0,0,8,0,9,0,0,\n0,0,0,0,0,0,7,10,0,13,0,0,6,0,0,0,0,0,0,0,0,0,6,9,4,0,0,0,0,0,0,10,0,0,0,0,0,10,\n0,0,0,0,0,0,0,10,6,11,0,0,0,0,0,9,0,0,0,0,0,0,4,0,0,0,0,0,0,10,5,0,0,0,0,0,6,0,\n0,0,0,0,0,18,4,0,7,0,0,0,0,0,0,24,0,8,6,0,7,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,\n0,8,5,0,0,0,0,10,7,0,6,0,0,0,0,0,0,0,0,8,5,10,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,\n6,0,0,8,7,0,0,0,0,0,0,0,0,0,0,12,6,0,0,0,0,0,0,0,4,0,5,15,0,0,0,0,7,0,7,0,0,0,0,\n0,0,0,0,0,6,10,5,0,0,0,6,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,7,0,0,12,0,0,0,0,0,0,0,0,\n0,0,5,0,0,0,0,0,0,14,4,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,11,0,10,4,9,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,4,0,0,0,0,0,7,0,0,0,\n0,0,0,0,0,0,0,0,7,13,7,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,\n0,0,0,0,0,0,0,5,0,0,0,0,0,6,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,8,0,10,6,0,4,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,\n0,0,0,0,0,0,0,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,9,7,0,0,0,0,0,6,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,10,6,0,0,0,0,0,0,0,6,0,0,0,\n0,0,0,0,5,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,6,0,0,0,5,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,11,0,0,0,0,6,0,0,0,0,0,0,0,6,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,0,0,\n6,0,0,0,0,0,0,0,6,10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,\n0,0,0,0,0,0,0,6,0,6,0,0,0,5,0,0,0,0,0,0,0,5,0,0,10,0,11,5,0,0,0,0,0,0,14,7,9,7,\n0,6,0,0,0,0,0,4,0,0,0,0,0,0,11,7,0,6,0,0,0,0,0,0,9,7,0,4,0,0,0,7,0,0,0,0,0,5,0,\n0,0,0,0,5,0,0,0,7,0,0,0,0,0,5,0,0,0,0,17,5,0,0,8,0,0,0,0,6,9,4,0,0,0,0,0,0,0,0,\n8,7,11,7,9,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,6,9,5,0,0,8,6,0,0,0,5,0,\n0,0,0,9,0,0,0,9,6,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,\n0,0,0,0,4,0,0,0,0,10,0,0,0,0,0,0,0,0,4,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,4,0,0,0,5,0,0,0,0,0,7,0,0,0,0,0,7,13,5,0,0,0,7,0,0,0,0,0,7,9,6,11,7,0,7,0,0,0,\n0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,8,5,0,0,0,5,9,4,0,0,0,0,0,0,0,0,8,4,0,0,0,0,\n24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,\n0,0,0,0,6,0,0,0,7,0,0,0,6,0,0,0,0,0,0,0,0,0,5,11,6,0,4,0,7,20,0,8,5,9,5,9,0,0,6,\n0,0,0,0,0,0,0,0,0,0,0,7,23,5,0,0,8,4,0,0,10,0,0,6,0,5,0,0,0,0,0,0,0,0,0,0,0,7,0,\n0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,9,0,0,0,\n10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,\n6,0,0,0,0,14,0,18,4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,9,6,0,4,0,0,0,0,0,0,8,4,\n11,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,8,4,0,0,0,0,0,0,0,0,12,0,10,7,0,0,10,0,0,0,0,\n0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,6,0,0,0,0,8,\n6,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,4,0,6,0,4,0,0,0,0,0,5,0,0,\n0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,17,7,11,0,0,0,0,0,0,0,0,0,0,4,12,6,0,0,0,5,0,0,0,6,0,0,0,0,0,0,0,0,0,0,\n0,5,12,7,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n7,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,6,0,6,0,0,20,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,4,\n0,0,0,5,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,6,0,4,13,0,0,7,0,0,0,0,0,0,\n0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,0,12,6,0,7,0,0,0,0,10,0,23,6,0,0,\n0,4,0,0,0,0,0,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n10,0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,11,0,9,7,0,0,\n0,0,0,0,0,0,0,0,9,7,0,4,0,0,0,0,8,7,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,\n0,0,0,0,0,6,0,0,10,7,10,5,0,0,8,0,8,0,0,0,0,0,0,4,0,5,10,0,0,0,0,0,0,0,9,0,0,6,\n0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,11,7,0,0,0,0,0,0,0,0,9,4,0,0,0,0,0,6,0,0,8,\n7,0,0,0,0,0,5,0,0,0,0,0,0,0,0,10,0,0,0,0,5,0,4,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,24,7,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,6,0,0,9,0,0,0,0,0,0,7,0,6,13,0,8,\n0,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,0,0,6,0,0,0,0,8,5,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,\n4,0,0,0,0,0,4,0,0,0,0,0,0,0,6,8,0,0,0,0,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,4,0,4,0,0,0,5,0,7,0,0,10,0,10,7,0,0,12,5,0,0,9,0,0,0,10,0,\n0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,5,0,0,0,0,0,0,\n12,0,0,0,0,0,8,5,13,6,0,0,0,0,0,0,9,4,0,0,0,0,8,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,\n0,0,6,0,0,14,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,17,6,0,0,0,0,12,6,0,0,0,0,8,0,0,7,0,\n7,0,4,9,0,0,6,0,0,0,6,0,0,0,0,0,0,8,7,0,0,0,0,0,0,11,0,0,4,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,18,7,0,4,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,6,0,0,0,0,0,\n0,0,0,12,5,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,8,0,11,7,0,0,0,0,0,0,0,0,0,4,0,0,0,0,\n11,0,0,0,0,0,0,0,21,0,0,6,10,0,0,0,0,0,9,0,10,0,0,0,0,0,11,0,0,0,0,6,0,0,0,0,0,\n5,0,0,0,0,0,0,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,4,0,0,23,7,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,9,7,0,0,0,7,\n0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,6,0,0,\n11,6,0,0,0,0,0,0,0,6,0,0,0,0,10,7,0,0,9,4,0,0,11,0,8,5,0,0,0,7,8,5,22,0,0,0,9,6,\n0,0,0,0,0,0,0,6,10,4,0,0,0,0,0,7,9,4,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,4,0,\n0,0,0,11,6,0,0,0,0,0,0,0,0,0,0,0,7,0,6,0,0,0,0,0,7,0,0,0,0,0,0,0,6,0,6,0,4,0,0,\n0,0,0,0,0,7,0,7,0,4,13,0,0,0,0,0,8,0,0,0,0,7,0,0,0,0,0,0,11,6,0,7,0,0,0,0,9,0,0,\n0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,4,8,0,0,0,0,0,8,0,0,0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0,6,0,0,0,0,13,5,8,0,0,\n0,0,0,0,0,14,0,0,6,0,0,0,0,0,0,0,0,0,7,0,0,17,6,0,0,0,0,13,4,0,0,9,6,0,0,10,5,0,\n0,10,5,0,0,0,0,13,0,0,0,0,6,0,0,0,0,0,0,10,0,12,0,0,0,0,0,0,0,0,0,0,0,8,4,0,4,0,\n0,0,4,0,0,0,0,0,4,0,0,12,0,0,5,9,4,0,0,0,0,0,0,0,0,0,5,8,5,0,0,0,7,0,0,0,0,8,7,\n0,0,0,6,12,5,0,0,0,5,0,0,0,5,0,0,0,0,0,4,12,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,8,7,0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,\n0,9,6,0,0,0,0,0,0,0,0,0,4,0,0,0,6,0,0,0,4,11,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,\n0,0,0,0,12,7,0,0,0,7,10,7,0,0,11,0,0,0,0,0,0,0,0,0,11,7,0,0,0,6,0,0,11,0,0,0,0,\n0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,22,0,10,7,0,0,8,5,0,0,0,0,0,5,0,0,0,0,0,0,\n0,0,0,0,9,6,8,7,0,6,0,0,0,0,0,5,0,0,0,0,0,0,8,7,0,0,0,0,9,7,0,0,0,6,0,0,8,7,0,0,\n0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,4,0,5,0,0,0,4,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,6,0,0,0,0,0,0,0,4,0,0,0,0,0,0,9,\n6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0,0,5,0,0,0,0,14,0,0,0,\n9,0,0,0,0,0,0,0,0,0,9,7,12,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,12,0,0,0,0,0,12,7,0,0,0,5,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,10,7,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,6,0,0,0,0,0,0,9,6,0,0,0,0,0,6,0,0,0,0,0,\n0,0,0,0,0,9,0,0,0,0,7,0,6,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,\n0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,6,0,7,12,6,0,0,0,0,0,5,0,0,0,0,0,0,0,0,\n0,7,0,0,8,6,0,0,0,0,10,7,0,0,0,0,0,0,0,6,0,0,0,0,0,6,12,0,0,0,0,0,0,0,0,6,0,0,0,\n0,0,6,0,0,0,6,0,0,0,0,0,6,16,0,0,0,0,0,0,0,0,0,9,0,17,0,14,7,8,0,0,0,0,0,0,6,0,\n0,0,0,0,0,0,0,0,0,11,0,0,6,8,7,0,6,0,0,0,0,0,0,0,0,0,0,12,6,0,0,0,0,0,0,0,0,0,0,\n9,0,0,0,0,7,0,0,0,0,11,5,0,4,9,6,8,0,0,0,0,0,0,0,0,0,10,0,11,7,0,0,0,0,0,0,0,0,\n9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,\n0,0,0,12,0,0,0,0,0,10,5,0,4,0,0,0,0,0,7,10,6,11,6,0,0,0,0,0,0,0,0,0,0,0,0,17,0,\n0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,8,0,0,4,0,0,0,6,0,0,0,\n0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,4,0,0,0,0,9,6,0,0,0,4,0,0,0,0,0,4,10,7,0,7,0,0,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,\n0,0,0,0,0,0,6,0,0,0,6,0,6,0,0,0,0,10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,18,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,13,0,0,0,0,0,10,0,0,0,0,0,0,0,0,4,\n0,0,0,6,0,0,0,0,0,4,8,0,0,0,11,7,0,0,0,4,0,0,0,0,0,7,0,0,8,5,0,0,16,0,0,0,13,6,\n0,0,0,0,0,0,0,6,0,0,0,0,20,0,11,6,0,0,8,7,0,0,0,0,0,6,17,0,8,0,0,0,0,0,8,7,0,0,\n9,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,\n0,0,4,0,7,0,0,0,0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,8,\n0,8,0,0,0,0,0,0,0,11,0,8,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,6,0,0,9,0,\n0,0,0,0,8,0,0,0,0,0,18,0,0,0,0,0,0,4,9,0,0,0,0,0,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,9,6,0,0,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,8,7,0,0,0,0,0,0,0,0,\n0,4,0,0,0,0,0,0,14,0,0,0,0,7,0,6,0,0,8,0,20,7,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,8,0,0,0,14,0,0,0,0,0,0,0,8,0,0,7,0,6,0,0,0,7,0,0,0,0,0,0,0,0,\n0,0,0,4,12,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,10,6,0,\n5,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,\n0,0,0,5,8,4,0,0,0,0,0,0,0,4,0,0,0,7,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,12,7,0,\n0,0,0,13,6,0,0,0,7,0,0,8,0,0,0,8,0,0,0,0,0,0,0,0,0,0,5,0,0,0,7,0,0,0,0,0,0,11,5,\n0,6,0,0,8,5,0,7,0,0,0,0,0,0,0,7,0,0,0,0,8,6,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,4,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n14,0,10,7,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,19,0,0,4,0,0,0,7,\n0,0,11,5,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,16,0,10,5,18,0,0,7,9,6,0,5,0,0,0,0,0,\n0,0,0,0,5,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,5,0,0,0,7,0,6,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,6,0,0,0,4,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,6,0,0,0,7,23,0,0,0,0,5,0,0,0,0,0,0,8,5,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,14,0,20,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,\n11,0,0,0,0,7,0,0,0,0,15,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,7,0,0,0,0,\n0,4,0,0,0,0,10,0,0,0,0,0,9,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,10,0,11,6,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,5,0,0,11,0,0,0,0,7,0,0,0,0,0,0,8,7,0,\n4,0,0,0,0,11,0,0,0,0,0,11,0,0,5,0,0,8,7,0,4,0,7,0,0,0,0,0,0,0,6,0,0,0,0,0,4,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,10,5,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,6,0,5,0,0,0,0,0,0,0,\n0,0,4,11,5,10,7,0,7,0,0,9,6,9,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,9,4,0,4,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,8,6,0,0,0,0,11,7,0,0,0,0,0,0,0,0,0,0,11,7,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,8,5,0,0,8,0,9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,4,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,\n10,7,0,0,0,6,0,0,0,0,0,0,8,0,0,6,0,0,0,6,10,0,0,0,0,0,0,0,0,0,0,0,8,5,0,0,0,6,0,\n0,0,6,0,0,0,0,9,5,8,5,8,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,\n0,8,7,10,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,0,11,7,0,0,0,0,0,5,0,0,0,6,0,7,0,0,\n10,5,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,6,0,0,0,0,0,0,11,0,0,0,0,0,13,4,\n0,0,0,4,0,0,0,0,0,5,8,0,0,0,12,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,7,14,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,7,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,4,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,5,0,0,15,6,10,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,14,6,10,0,0,0,0,0,0,0,0,6,0,\n0,0,0,0,0,0,0,12,6,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,6,0,5,11,4,0,6,0,0,0,7,0,0,0,0,\n0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,5,0,0,8,5,0,0,0,0,0,0,0,0,0,0,\n0,0,10,0,0,0,0,0,9,6,9,4,0,0,0,4,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,8,5,0,\n0,0,0,0,0,0,0,0,0,0,4,0,0,11,5,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,5,0,0,0,0,0,0,\n0,0,0,7,12,0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,\n4,9,6,0,4,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,6,0,\n7,8,6,0,0,0,0,0,0,0,4,0,0,9,6,0,0,0,0,0,0,0,0,0,6,0,5,0,4,0,0,0,0,0,0,0,5,0,0,0,\n0,0,5,0,0,0,7,12,7,0,0,0,0,0,0,18,4,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,6,0,0,0,\n0,12,0,0,7,0,0,0,0,0,7,0,0,13,0,0,6,0,0,0,0,8,7,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,7,10,5,0,0,8,0,0,0,0,0,0,0,8,6,0,7,0,0,8,4,0,4,0,0,0,0,10,4,0,0,14,0,\n0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,17,0,0,0,0,0,0,6,0,0,0,0,8,6,0,0,10,5,0,0,0,0,8,\n6,0,0,0,6,0,0,0,7,0,0,0,0,0,6,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,12,0,0,0,0,6,\n8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,\n0,0,0,6,0,0,0,0,0,0,0,0,0,0,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,4,24,0,0,\n0,0,0,12,6,0,0,10,6,0,5,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,17,7,0,5,0,0,0,\n0,0,0,0,0,0,0,0,0,0,6,11,5,9,0,8,7,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,10,7,0,0,0,0,0,0,0,7,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,11,5,8,7,0,0,0,\n0,8,5,0,0,0,0,10,7,0,7,0,0,0,0,0,0,0,0,0,0,13,6,0,0,0,0,0,0,0,0,0,6,0,4,0,0,0,0,\n0,6,12,0,8,7,0,0,0,0,0,0,0,0,0,0,16,0,10,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,22,0,0,0,\n0,0,0,0,0,0,0,0,0,0,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,22,0,0,6,0,0,21,0,0,0,22,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n6,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,6,0,0,0,5,0,0,0,0,0,7,8,0,0,0,0,6,14,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,8,6,0,0,0,0,0,0,\n0,0,0,0,0,6,0,0,0,0,8,5,0,0,11,7,0,6,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,\n6,0,0,0,5,0,0,0,0,0,0,0,0,0,4,0,0,8,7,0,0,0,0,8,5,11,7,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,4,0,0,0,0,8,5,0,0,10,0,0,4,13,7,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,5,0,0,13,6,\n0,6,0,7,0,0,8,4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,15,0,0,0,10,7,0,0,0,0,0,\n7,0,0,0,0,0,0,0,4,0,0,0,0,0,6,0,0,0,0,19,0,0,0,0,6,0,0,0,0,0,4,0,0,0,0,0,6,0,5,\n0,7,0,0,0,0,0,0,0,0,0,6,0,0,11,4,0,0,0,6,0,0,13,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,8,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,12,6,0,0,0,0,\n0,7,0,0,0,0,0,0,11,7,0,0,0,0,0,6,0,0,10,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,5,11,6,\n0,0,0,0,0,0,0,0,10,0,0,0,0,6,0,0,0,0,0,0,8,7,0,0,0,5,0,0,0,5,0,0,0,0,0,0,0,0,0,\n0,0,0,8,7,0,0,0,0,9,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,10,7,0,0,0,0,10,0,\n0,6,0,0,13,0,0,0,0,0,0,0,9,6,0,0,8,6,8,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,4,0,\n0,9,7,0,0,0,0,0,0,11,0,0,0,10,7,0,0,0,0,0,0,0,0,9,6,0,0,12,4,0,4,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,6,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,5,0,0,\n9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,4,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,\n16,0,0,4,0,0,0,0,0,7,0,0,0,6,0,6,0,0,11,0,0,0,0,5,0,0,0,0,0,0,0,4,8,5,0,0,0,0,0,\n0,14,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,\n0,0,8,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,\n0,0,0,0,6,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,14,7,0,0,9,7,0,0,11,0,0,0,0,0,10,\n4,11,5,13,6,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,5,0,0,0,0,0,4,0,0,9,0,0,0,0,\n0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,6,12,5,0,0,0,6,14,0,0,0,0,0,0,0,0,0,0,4,9,4,\n0,0,0,0,0,5,0,0,0,0,0,0,0,4,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5,0,0,\n0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,11,6,0,0,13,7,0,0,13,6,0,7,0,0,0,0,0,0,8,6,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,10,6,0,4,0,0,12,6,0,0,0,0,0,0,0,0,10,6,\n0,0,0,6,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,6,0,\n0,0,0,0,7,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,8,6,0,\n0,0,7,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,\n0,0,0,5,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,\n0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,8,7,0,0,8,5,0,0,0,4,9,5,0,0,0,7,10,6,0,0,\n0,0,0,0,9,7,0,0,8,5,8,0,8,4,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,\n0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,4,0,0,0,0,0,0,0,0,0,\n0,11,7,0,0,0,7,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,5,0,0,0,7,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,9,7,0,0,0,0,8,5,0,4,0,0,0,0,0,6,0,6,14,\n6,0,0,0,0,9,6,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,6,0,0,0,0,14,7,9,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,16,\n0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,14,0,\n0,6,0,0,8,6,0,0,0,0,0,6,0,0,12,0,0,0,0,0,8,5,0,7,11,0,0,5,0,4,0,0,0,6,0,0,0,0,0,\n0,0,0,0,0,0,0,9,6,0,4,0,6,0,0,0,0,0,0,0,0,0,0,0,0,11,6,0,0,0,0,0,0,10,5,0,0,0,0,\n0,4,0,0,0,7,11,6,0,4,8,5,9,5,0,0,0,5,0,7,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,8,5,14,7,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,16,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,4,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,9,6,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,9,0,0,0,12,5,0,0,0,0,0,0,0,4,10,5,0,0,0,0,0,0,0,0,0,0,0,6,0,\n0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,4,0,0,0,6,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,0,10,4,0,0,0,0,0,5,0,0,0,4,\n0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,8,0,10,7,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,10,7,0,0,0,0,0,0,0,0,15,0,0,0,\n0,0,0,0,0,0,0,7,0,0,0,0,0,7,10,7,9,7,0,0,0,7,0,0,8,0,0,0,0,0,0,0,9,0,0,0,8,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,8,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,7,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,15,7,12,6,0,0,0,7,0,5,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,5,0,0,0,0,\n0,0,0,6,9,5,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,9,7,0,0,14,0,0,0,11,7,0,0,0,0,0,\n0,0,0,0,0,0,4,0,0,11,7,0,0,0,0,8,0,0,0,0,0,0,6,8,7,0,0,0,7,10,4,0,0,0,0,0,0,0,0,\n0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,10,0,0,0,0,0,0,\n6,0,6,0,0,0,0,0,4,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,11,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,7,0,0,10,7,0,0,0,0,9,7,0,0,0,0,0,0,13,7,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,12,0,\n0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,9,6,0,0,11,0,0,\n0,0,0,14,4,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,7,0,0,\n0,0,0,6,0,7,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,5,0,0,0,0,20,\n7,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,8,0,0,0,0,0,0,0,0,0,11,5,0,0,0,0,0,0,0,0,0,0,10,4,0,0,0,5,8,5,10,4,0,0,0,0,0,\n0,13,6,9,7,0,0,10,7,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,6,0,0,0,7,0,6,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,10,7,0,0,\n0,0,0,0,0,0,0,0,12,4,0,0,0,0,8,7,0,0,0,0,0,7,0,6,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,\n0,0,0,0,6,0,6,9,6,0,0,12,5,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,6,0,0,0,0,\n0,0,0,0,0,0,0,0,0,5,8,7,9,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,11,\n4,0,0,0,0,0,0,8,0,0,0,10,7,0,4,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,0,8,0,\n0,0,0,0,0,5,0,6,0,0,10,0,14,0,0,0,0,0,0,0,23,0,0,0,12,0,10,5,0,0,0,0,0,0,0,0,0,\n5,0,0,0,0,8,0,0,0,0,6,8,0,0,0,0,0,0,0,0,0,22,0,8,0,0,0,0,6,0,0,0,0,0,0,0,5,0,0,\n0,0,0,0,0,6,18,4,0,0,0,7,10,6,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,\n0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,7,10,0,0,0,0,0,0,6,0,0,0,0,11,5,0,0,0,0,0,0,0,0,\n15,0,8,6,0,0,13,7,0,0,0,0,0,7,0,0,0,0,0,7,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,9,5,9,\n0,0,6,8,6,0,0,0,0,10,0,0,0,18,5,0,0,0,5,0,7,0,0,0,0,8,6,0,0,0,0,9,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,14,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,6,0,0,0,5,0,\n0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,8,5,0,0,0,0,0,0,0,0,9,0,0,0,0,4,0,0,0,0,0,0,0,0,\n0,0,0,0,20,5,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,9,5,0,0,0,0,0,0,8,4,24,0,0,0,0,0,0,\n0,0,0,0,0,0,0,9,7,0,0,0,0,10,5,0,0,8,5,0,0,0,0,0,0,0,0,12,7,0,6,0,0,10,6,0,0,0,\n0,14,0,0,4,9,5,0,0,0,0,0,0,9,0,0,0,0,0,0,6,0,0,0,0,0,4,0,0,8,0,0,0,0,0,11,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,8,5,11,7,0,4,0,0,10,0,0,0,0,\n0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,11,6,0,0,0,0,0,5,14,6,0,0,0,0,10,0,0,\n0,13,4,0,0,0,0,0,0,0,0,0,0,0,6,0,0,10,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,7,12,0,10,6,0,0,0,0,0,0,10,0,0,0,0,0,10,0,9,\n7,0,0,0,0,0,0,0,0,0,0,0,0,0,7,8,0,0,0,0,0,0,0,0,0,0,0,0,4,0,7,0,0,0,0,9,7,0,0,0,\n0,0,0,0,0,0,0,0,0,24,0,11,7,0,7,0,0,0,0,0,0,8,6,0,0,0,0,0,0,8,7,0,0,0,0,0,5,0,0,\n0,6,9,0,0,0,23,5,0,0,0,0,0,6,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,7,0,0,0,\n0,0,0,0,0,0,0,0,0,0,6,0,0,18,4,0,0,11,7,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,\n0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,9,0,0,0,11,0,0,0,23,0,0,\n0,10,4,0,0,0,0,0,7,0,0,0,7,0,0,0,0,0,4,0,0,0,0,0,7,0,0,19,0,11,0,0,0,0,0,12,7,0,\n0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,5,0,0,0,0,0,5,0,0,0,0,0,5,0,0,0,0,0,0,0,6,0,0,\n9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,4,0,0,0,0,10,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,4,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,22,0,8,7,10,4,11,0,13,5,8,7,9,0,8,7,0,0,0,7,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,\n0,8,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,4,0,0,0,4,11,0,0,6,0,0,8,5,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,8,5,0,0,\n20,0,0,0,0,0,0,0,0,0,11,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,7,0,0,14,0,0,0,9,0,13,7,0,0,0,0,0,6,0,7,0,0,8,6,10,6,0,0,8,6,0,0,0,6,0,\n0,12,6,9,0,0,0,0,0,0,5,9,0,12,4,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,8,5,0,0,0,0,0,\n0,0,4,8,0,0,6,8,0,0,0,0,0,0,0,0,0,13,6,0,7,0,0,0,0,0,6,8,7,8,6,0,0,0,7,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,18,0,11,4,0,0,0,5,0,0,0,0,0,0,0,0,0,0,\n0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,14,\n6,0,0,0,0,12,7,8,0,0,0,0,0,0,0,8,7,0,0,0,0,10,4,0,0,0,0,0,0,10,0,0,6,0,0,0,0,0,\n0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,15,6,9,7,0,0,0,0,0,0,15,6,11,7,0,0,0,7,0,0,21,0,0,\n0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,17,6,0,0,10,5,0,5,0,0,0,0,0,0,0,0,0,7,\n0,0,10,0,0,0,0,0,0,0,0,4,11,5,0,0,0,0,16,7,0,0,0,0,0,6,0,0,8,7,0,4,0,0,10,0,0,0,\n0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,8,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,\n0,0,0,10,4,0,0,0,0,0,0,0,0,0,6,0,5,0,0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,\n0,7,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,6,10,7,0,0,0,0,0,0,0,0,8,4,0,0,10,0,0,0,0,4,0,6,0,6,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,7,17,0,0,0,0,0,\n0,0,0,0,0,0,10,0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n6,0,0,0,5,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,5,0,4,0,0,0,0,0,6,0,0,0,0,0,0,10,5,0,0,\n0,5,0,0,0,0,9,0,19,7,0,0,0,0,0,7,0,0,0,0,10,6,0,0,0,6,0,5,0,0,0,0,0,0,0,0,0,6,8,\n0,0,0,0,0,11,0,0,0,0,0,0,6,0,0,0,0,0,7,9,0,15,0,0,0,0,0,0,0,0,0,0,4,0,0,0,5,0,0,\n0,0,0,0,0,6,0,0,0,0,0,0,0,4,0,0,0,0,9,0,0,0,0,0,0,0,0,6,0,7,0,0,0,0,0,0,0,6,0,0,\n0,0,0,6,10,0,0,0,0,0,0,0,23,0,14,0,0,0,0,7,0,0,0,0,0,7,0,0,9,0,0,0,0,7,0,0,0,0,\n0,6,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0,0,\n0,0,0,0,0,9,5,0,0,0,0,0,4,0,0,0,0,9,5,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,10,0,0,0,0,0,0,5,0,4,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,6,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,14,7,0,0,12,7,0,0,0,\n0,0,0,0,0,0,4,0,0,0,0,0,6,0,0,0,0,8,6,10,0,0,0,0,0,0,0,0,0,10,7,8,5,0,0,0,0,0,0,\n0,0,8,4,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,5,0,0,9,5,0,0,0,0,0,5,0,0,0,0,0,4,0,0,0,\n0,0,0,0,0,0,0,12,4,11,0,0,0,9,0,11,7,0,0,0,0,0,0,10,6,0,0,0,6,0,0,0,0,15,5,0,0,\n11,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,4,0,4,0,6,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,8,0,0,0,19,7,0,4,0,0,9,0,0,0,0,0,10,0,\n0,6,0,0,13,0,12,6,0,0,0,0,0,0,0,0,10,7,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,13,7,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,4,9,0,0,0,10,0,0,0,0,0,0,0,\n0,5,0,0,0,0,0,0,10,0,23,6,0,0,0,6,8,0,0,0,0,0,0,0,0,0,17,7,0,0,0,0,11,6,22,5,0,\n0,9,6,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,5,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,4,11,0,9,4,0,0,\n0,7,0,7,0,0,0,0,0,0,12,4,0,0,0,0,0,0,0,0,0,0,0,0,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,\n4,0,0,11,5,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,8,6,0,0,0,4,0,0,0,0,\n0,0,0,0,0,7,0,0,0,4,0,0,10,4,0,0,0,0,0,0,0,7,0,7,0,0,0,6,0,0,0,0,8,6,0,6,0,6,0,\n0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,0,0,0,0,9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,6,22,6,12,0,0,6,0,0,0,6,0,0,0,0,0,7,0,0,0,0,11,0,0,0,\n9,7,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,6,0,0,0,6,0,6,0,0,8,7,0,0,0,4,9,7,19,0,0,0,0,0,0,0,0,0,9,6,10,6,0,6,0,0,0,\n4,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,6,16,7,10,6,0,0,23,6,11,7,0,4,0,0,0,0,0,0,0,0,0,\n5,0,0,0,0,10,7,0,0,0,0,0,7,0,0,0,0,0,0,15,0,10,0,0,0,14,6,0,0,0,0,0,0,0,0,0,0,0,\n5,0,0,0,0,0,0,0,5,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,5,0,0,11,5,0,0,0,0,0,0,0,0,0,0,\n0,4,0,0,0,0,0,6,0,0,10,0,0,0,0,7,0,0,0,0,0,0,10,6,0,0,0,0,8,4,0,0,0,7,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,7,12,5,0,0,0,0,\n0,6,0,0,0,0,9,6,0,0,0,0,0,0,0,6,9,0,0,0,0,6,0,0,0,0,8,7,0,0,0,0,0,0,0,6,0,0,0,0,\n0,0,0,0,0,0,10,5,0,0,0,0,0,0,8,6,0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,8,5,0,0,0,0,0,7,0,7,0,4,0,0,10,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,5,0,0,0,0,13,\n7,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,7,0,0,13,0,0,0,0,0,0,0,0,7,10,5,0,0,0,0,0,0,9,7,0,0,8,6,9,\n5,0,0,0,0,0,6,12,0,0,0,0,0,0,0,18,6,0,0,0,0,0,0,0,0,19,7,0,4,0,0,0,0,9,5,0,5,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,7,0,0,0,0,0,0,14,0,0,0,23,7,8,7,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,22,0,0,7,0,0,0,0,0,0,0,0,9,7,8,4,0,\n0,0,0,0,0,0,0,8,5,0,6,0,0,0,0,0,6,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,\n8,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,12,5,0,0,0,0,0,0,0,0,0,0,8,6,0,0,11,7,0,0,0,\n0,12,0,8,6,19,7,0,0,0,0,0,0,0,0,0,0,0,0,0,6,11,0,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,11,7,0,0,0,0,0,4,10,0,0,0,0,0,0,0,8,7,0,0,0,0,14,0,8,0,0,6,10,0,0,\n0,0,0,0,0,12,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,6,0,0,0,0,\n0,0,0,0,13,0,0,0,0,0,0,0,11,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,\n0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,5,0,0,0,6,0,0,0,5,0,7,0,0,0,\n0,0,6,0,0,21,7,0,0,9,6,0,0,0,6,0,0,13,7,0,0,0,5,0,0,0,0,0,4,0,6,0,0,0,0,0,0,0,0,\n0,0,0,4,0,0,0,0,0,0,11,5,0,6,0,0,10,5,0,0,0,0,0,0,0,0,9,6,0,0,8,7,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,9,0,0,0,0,0,0,6,0,0,0,0,15,4,0,0,12,7,0,0,0,6,\n0,7,0,0,8,0,9,5,0,4,0,0,0,6,0,6,0,0,23,4,0,0,0,0,0,0,0,0,0,0,0,0,10,7,0,4,0,0,8,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,6,0,0,0,0,0,0,0,0,0,\n7,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,12,6,0,0,0,0,0,0,10,7,0,7,0,0,0,0,0,0,0,0,0,0,\n9,0,0,0,0,0,8,0,0,0,0,4,0,0,0,0,0,0,0,0,0,4,11,5,0,0,0,6,0,6,0,0,0,0,0,0,0,6,0,\n4,0,0,0,0,0,0,0,0,0,0,0,5,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,8,7,0,0,0,6,0,6,0,\n0,0,0,0,0,0,0,0,5,0,0,0,0,0,5,0,0,0,0,11,0,0,0,0,0,0,0,10,5,9,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,23,7,0,0,0,0,0,7,0,0,10,6,18,0,0,0,\n0,0,0,0,8,7,0,6,0,0,0,0,0,0,8,5,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,\n0,0,0,0,0,6,0,0,0,4,12,7,0,0,0,0,0,0,0,0,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,13,5,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,4,0,0,0,0,0,0,0,0,\n11,7,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,\n0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,10,0,11,0,0,0,0,0,0,0,0,0,\n17,5,0,4,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,4,0,0,0,0,8,7,0,0,0,0,0,0,0,\n0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,\n10,0,0,0,8,6,0,0,0,7,0,0,0,0,0,0,8,0,0,0,14,0,0,0,0,7,0,0,0,4,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,9,4,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,\n10,0,0,0,16,5,0,0,0,0,0,0,8,0,0,4,0,0,0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,10,0,0,0,\n0,0,0,0,0,5,0,0,0,0,12,5,0,7,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,7,0,\n0,0,0,0,0,0,0,12,6,0,0,0,0,0,7,0,6,0,6,12,6,0,0,0,0,0,0,0,4,8,7,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,6,0,6,0,0,0,0,0,0,0,0,10,6,8,0,0,\n6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n16,0,8,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,23,5,0,0,0,7,0,6,0,\n0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,14,0,0,0,0,7,0,0,0,4,17,5,0,0,0,0,11,0,9,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,6,0,0,0,5,0,7,0,0,0,0,0,0,0,0,8,0,0,0,\n12,6,0,0,0,0,0,0,13,0,0,0,0,7,9,0,0,0,0,0,0,0,0,0,0,5,0,0,0,7,10,7,12,0,0,0,9,0,\n0,0,14,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,15,6,0,0,23,0,0,7,0,6,0,0,0,7,0,6,\n0,0,0,0,0,0,0,6,0,6,9,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,8,7,9,4,0,0,10,0,0,0,10,\n6,0,7,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,23,0,0,6,0,0,0,0,0,0,9,4,\n0,0,10,7,0,0,0,0,0,0,0,0,0,0,0,0,9,7,0,0,9,6,0,0,0,0,8,6,0,0,0,0,0,0,0,0,12,0,0,\n0,0,0,8,0,0,6,11,6,0,0,8,7,8,5,0,0,0,0,0,5,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,\n10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,\n7,0,0,0,0,9,6,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,8,0,0,0,0,6,12,5,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,10,0,10,\n7,0,0,8,0,0,0,0,4,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,5,0,\n0,0,4,0,0,0,0,0,4,0,0,0,0,0,0,0,6,0,6,0,5,0,0,0,0,8,0,0,0,10,7,0,0,0,0,10,0,0,0,\n0,0,13,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,19,7,0,4,12,0,8,0,0,0,0,6,0,0,0,0,\n0,0,0,6,0,0,0,0,0,0,0,0,0,4,0,0,0,0,18,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,\n0,14,0,0,4,0,0,0,6,0,0,0,6,0,0,0,7,0,0,0,0,0,0,10,4,0,0,9,7,0,0,11,0,0,0,0,0,0,\n7,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,4,0,0,12,0,0,0,\n0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,22,5,9,7,0,0,0,0,0,0,0,0,0,\n0,0,6,0,0,9,6,0,5,0,0,0,0,0,0,10,5,0,0,8,6,0,6,10,5,0,0,0,6,0,0,0,6,0,0,20,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,6,0,0,0,0,17,4,0,7,0,6,\n0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,\n0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,\n0,0,7,0,0,8,6,12,0,0,7,18,7,0,0,8,4,0,0,0,0,9,6,0,0,0,0,0,0,0,0,13,0,0,6,0,0,0,\n0,0,0,0,0,0,0,10,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,7,0,0,\n0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,8,5,0,0,0,0,0,0,0,0,12,0,0,0,8,0,0,0,0,0,0,\n4,0,0,10,0,16,0,0,0,0,0,0,0,12,7,10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,16,6,10,0,0,5,0,0,0,0,0,6,0,0,0,0,\n0,7,0,0,0,7,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,5,8,7,0,7,0,0,0,0,0,0,0,0,8,0,0,6,0,0,0,6,0,0,0,4,0,0,0,0,\n8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,7,0,0,8,0,0,0,\n9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,7,13,5,0,5,0,0,0,7,8,4,0,0,0,0,0,0,0,\n0,12,0,0,0,0,0,0,0,0,0,0,0,8,6,0,6,0,0,11,0,0,0,0,0,0,0,0,6,0,0,0,0,0,4,0,0,0,0,\n0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,10,7,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,11,6,0,0,10,6,0,0,\n0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,\n0,0,0,6,0,0,0,7,0,0,9,0,8,7,11,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,9,6,10,5,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,10,7,0,0,0,0,0,0,11,0,9,6,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,15,5,12,5,\n0,0,0,0,0,0,12,7,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,12,6,0,\n0,0,0,24,4,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,0,0,0,\n0,0,0,4,10,4,0,0,0,0,10,7,0,0,0,0,0,0,0,0,0,0,0,0,9,0,11,0,0,0,0,0,0,0,0,0,0,6,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,\n0,0,8,0,0,0,0,7,0,0,0,0,0,0,10,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,10,7,0,0,0,0,0,\n0,0,0,0,0,14,7,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,4,0,0,0,6,0,0,0,0,0,6,0,0,0,6,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,11,6,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,7,20,7,11,4,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,7,9,6,0,0,12,7,0,0,0,0,0,0,10,0,12,0,\n0,0,0,0,0,4,9,6,13,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,5,0,0,0,0,0,0,8,0,0,0,0,0,0,\n0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,6,0,0,11,0,9,0,0,0,0,4,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,8,5,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,\n0,4,0,5,0,0,0,0,0,0,0,0,0,4,0,0,0,0,9,7,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,\n0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,6,\n0,0,0,0,8,7,0,0,0,0,0,0,12,0,0,6,0,0,0,0,0,0,0,6,8,4,0,0,10,7,0,0,10,0,0,0,0,0,\n0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,7,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,4,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,0,0,5,\n0,4,0,0,0,0,0,6,0,0,0,0,0,0,8,0,0,6,0,0,0,6,0,0,0,0,0,7,0,5,8,4,0,0,9,0,0,0,0,4,\n0,0,0,0,0,0,0,0,0,5,0,0,15,6,8,6,0,0,0,6,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,9,6,0,0,0,0,0,0,0,7,0,0,0,4,0,\n6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,9,5,0,6,12,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,6,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,8,7,0,6,0,0,0,0,0,0,0,0,0,0,0,0,11,0,12,7,0,0,0,0,\n0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,11,4,0,0,0,0,0,0,0,0,0,0,10,\n7,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,7,8,7,9,6,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,5,12,0,\n10,5,12,6,0,0,0,7,0,0,0,0,0,0,0,5,0,0,0,5,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,\n11,7,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,6,0,7,0,0,0,0,8,0,8,5,0,6,0,0,0,6,0,0,0,\n0,0,0,0,6,0,6,0,6,9,0,0,5,17,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,7,0,0,\n0,0,0,7,0,0,0,0,16,5,0,0,0,0,0,0,0,4,0,0,0,5,11,5,0,7,0,0,0,4,8,7,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,7,0,0,0,0,12,0,0,0,\n0,0,12,0,0,0,0,0,0,0,0,4,10,4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,6,0,0,0,0,0,0,0,4,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,20,5,0,0,\n10,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,12,0,0,0,0,0,0,6,0,0,0,0,0,0,9,4,10,7,0,4,0,0,\n0,0,0,0,10,6,0,0,0,0,8,4,0,7,8,6,0,6,8,0,10,0,0,0,0,0,13,5,0,6,0,0,0,0,0,0,22,4,\n0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,6,10,\n5,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,10,4,0,0,10,7,0,0,0,0,0,5,0,\n5,8,0,0,0,0,6,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,10,7,0,0,0,4,0,0,0,0,0,6,0,0,\n0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,7,0,0,0,6,0,0,0,0,0,0,0,0,0,\n4,0,0,0,4,10,0,0,6,13,7,8,0,0,0,0,0,0,7,0,0,12,7,0,0,0,0,0,0,10,5,0,0,0,0,0,6,0,\n0,0,0,0,0,0,0,0,0,13,7,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,8,6,0,6,\n0,0,0,0,0,0,0,0,12,0,8,4,0,0,0,0,0,4,0,4,0,0,0,0,0,0,0,5,0,0,0,0,12,5,0,0,0,7,0,\n0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,10,0,0,0,20,0,0,5,0,0,10,\n7,11,7,0,0,0,0,0,0,0,0,0,0,17,0,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,10,7,0,4,0,6,0,0,24,0,0,5,0,0,0,0,8,0,0,\n0,0,0,0,0,10,5,0,4,0,6,0,0,8,0,0,0,0,0,0,4,0,6,0,0,0,0,0,0,9,5,0,0,0,0,0,0,0,0,\n0,0,0,6,0,0,0,0,9,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,4,0,7,\n0,0,13,0,0,0,0,0,0,0,11,6,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,\n17,7,0,0,11,6,0,0,0,0,12,6,0,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,0,0,0,0,0,0,0,10,0,0,4,8,6,0,0,0,\n0,0,0,9,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,9,5,0,7,18,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,8,0,0,0,\n0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,\n0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,4,0,6,0,0,9,0,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,0,\n0,0,0,8,7,10,0,8,5,0,0,0,0,0,0,0,0,9,0,0,0,10,0,0,0,0,6,0,7,0,4,0,0,0,0,0,0,0,0,\n8,0,0,0,0,0,8,4,0,0,0,0,0,5,0,0,10,0,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n4,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,6,11,0,0,\n7,0,0,0,0,0,6,10,5,0,0,0,0,0,0,0,0,0,5,0,0,9,5,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,6,0,0,0,0,13,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,\n0,0,0,8,4,0,6,12,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,11,4,0,0,0,6,14,0,11,0,9,6,0,0,0,0,0,0,22,0,12,0,8,6,0,0,0,0,0,0,0,6,0,\n0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,\n10,7,0,0,0,0,0,0,0,0,9,0,0,0,0,4,0,0,0,0,0,0,0,0,0,5,11,0,0,0,0,0,0,0,8,6,0,0,9,\n7,0,0,12,4,0,0,0,0,0,0,12,6,0,6,0,7,0,0,8,5,0,0,0,0};\n"
  },
  {
    "path": "c/enc/encode.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Implementation of Brotli compressor. */\n\n#include <brotli/encode.h>\n\n#include \"../common/constants.h\"\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include <brotli/shared_dictionary.h>\n#include \"../common/version.h\"\n#include \"backward_references_hq.h\"\n#include \"backward_references.h\"\n#include \"bit_cost.h\"\n#include \"brotli_bit_stream.h\"\n#include \"command.h\"\n#include \"compound_dictionary.h\"\n#include \"compress_fragment_two_pass.h\"\n#include \"compress_fragment.h\"\n#include \"dictionary_hash.h\"\n#include \"encoder_dict.h\"\n#include \"fast_log.h\"\n#include \"hash.h\"\n#include \"histogram.h\"\n#include \"memory.h\"\n#include \"metablock.h\"\n#include \"params.h\"\n#include \"quality.h\"\n#include \"ringbuffer.h\"\n#include \"state.h\"\n#include \"static_init.h\"\n#include \"utf8_util.h\"\n#include \"write_bits.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define COPY_ARRAY(dst, src) memcpy(dst, src, sizeof(src));\n\nstatic size_t InputBlockSize(BrotliEncoderState* s) {\n  return (size_t)1 << s->params.lgblock;\n}\n\nstatic uint64_t UnprocessedInputSize(BrotliEncoderState* s) {\n  return s->input_pos_ - s->last_processed_pos_;\n}\n\nstatic size_t RemainingInputBlockSize(BrotliEncoderState* s) {\n  const uint64_t delta = UnprocessedInputSize(s);\n  size_t block_size = InputBlockSize(s);\n  if (delta >= block_size) return 0;\n  return block_size - (size_t)delta;\n}\n\nBROTLI_BOOL BrotliEncoderSetParameter(\n    BrotliEncoderState* state, BrotliEncoderParameter p, uint32_t value) {\n  /* Changing parameters on the fly is not implemented yet. */\n  if (state->is_initialized_) return BROTLI_FALSE;\n  /* TODO(eustas): Validate/clamp parameters here. */\n  switch (p) {\n    case BROTLI_PARAM_MODE:\n      state->params.mode = (BrotliEncoderMode)value;\n      return BROTLI_TRUE;\n\n    case BROTLI_PARAM_QUALITY:\n      state->params.quality = (int)value;\n      return BROTLI_TRUE;\n\n    case BROTLI_PARAM_LGWIN:\n      state->params.lgwin = (int)value;\n      return BROTLI_TRUE;\n\n    case BROTLI_PARAM_LGBLOCK:\n      state->params.lgblock = (int)value;\n      return BROTLI_TRUE;\n\n    case BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:\n      if ((value != 0) && (value != 1)) return BROTLI_FALSE;\n      state->params.disable_literal_context_modeling = TO_BROTLI_BOOL(!!value);\n      return BROTLI_TRUE;\n\n    case BROTLI_PARAM_SIZE_HINT:\n      state->params.size_hint = value;\n      return BROTLI_TRUE;\n\n    case BROTLI_PARAM_LARGE_WINDOW:\n      state->params.large_window = TO_BROTLI_BOOL(!!value);\n      return BROTLI_TRUE;\n\n    case BROTLI_PARAM_NPOSTFIX:\n      state->params.dist.distance_postfix_bits = value;\n      return BROTLI_TRUE;\n\n    case BROTLI_PARAM_NDIRECT:\n      state->params.dist.num_direct_distance_codes = value;\n      return BROTLI_TRUE;\n\n    case BROTLI_PARAM_STREAM_OFFSET:\n      if (value > (1u << 30)) return BROTLI_FALSE;\n      state->params.stream_offset = value;\n      return BROTLI_TRUE;\n\n    default: return BROTLI_FALSE;\n  }\n}\n\n/* Wraps 64-bit input position to 32-bit ring-buffer position preserving\n   \"not-a-first-lap\" feature. */\nstatic uint32_t WrapPosition(uint64_t position) {\n  uint32_t result = (uint32_t)position;\n  uint64_t gb = position >> 30;\n  if (gb > 2) {\n    /* Wrap every 2GiB; The first 3GB are continuous. */\n    result = (result & ((1u << 30) - 1)) | ((uint32_t)((gb - 1) & 1) + 1) << 30;\n  }\n  return result;\n}\n\nstatic uint8_t* GetBrotliStorage(BrotliEncoderState* s, size_t size) {\n  MemoryManager* m = &s->memory_manager_;\n  if (s->storage_size_ < size) {\n    BROTLI_FREE(m, s->storage_);\n    s->storage_ = BROTLI_ALLOC(m, uint8_t, size);\n    if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(s->storage_)) return NULL;\n    s->storage_size_ = size;\n  }\n  return s->storage_;\n}\n\nstatic size_t HashTableSize(size_t max_table_size, size_t input_size) {\n  size_t htsize = 256;\n  while (htsize < max_table_size && htsize < input_size) {\n    htsize <<= 1;\n  }\n  return htsize;\n}\n\nstatic int* GetHashTable(BrotliEncoderState* s, int quality,\n                         size_t input_size, size_t* table_size) {\n  /* Use smaller hash table when input.size() is smaller, since we\n     fill the table, incurring O(hash table size) overhead for\n     compression, and if the input is short, we won't need that\n     many hash table entries anyway. */\n  MemoryManager* m = &s->memory_manager_;\n  const size_t max_table_size = MaxHashTableSize(quality);\n  size_t htsize = HashTableSize(max_table_size, input_size);\n  int* table;\n  BROTLI_DCHECK(max_table_size >= 256);\n  if (quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {\n    /* Only odd shifts are supported by fast-one-pass. */\n    if ((htsize & 0xAAAAA) == 0) {\n      htsize <<= 1;\n    }\n  }\n\n  if (htsize <= sizeof(s->small_table_) / sizeof(s->small_table_[0])) {\n    table = s->small_table_;\n  } else {\n    if (htsize > s->large_table_size_) {\n      s->large_table_size_ = htsize;\n      BROTLI_FREE(m, s->large_table_);\n      s->large_table_ = BROTLI_ALLOC(m, int, htsize);\n      if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(s->large_table_)) return 0;\n    }\n    table = s->large_table_;\n  }\n\n  *table_size = htsize;\n  memset(table, 0, htsize * sizeof(*table));\n  return table;\n}\n\nstatic void EncodeWindowBits(int lgwin, BROTLI_BOOL large_window,\n    uint16_t* last_bytes, uint8_t* last_bytes_bits) {\n  if (large_window) {\n    *last_bytes = (uint16_t)(((lgwin & 0x3F) << 8) | 0x11);\n    *last_bytes_bits = 14;\n  } else {\n    if (lgwin == 16) {\n      *last_bytes = 0;\n      *last_bytes_bits = 1;\n    } else if (lgwin == 17) {\n      *last_bytes = 1;\n      *last_bytes_bits = 7;\n    } else if (lgwin > 17) {\n      *last_bytes = (uint16_t)(((lgwin - 17) << 1) | 0x01);\n      *last_bytes_bits = 4;\n    } else {\n      *last_bytes = (uint16_t)(((lgwin - 8) << 4) | 0x01);\n      *last_bytes_bits = 7;\n    }\n  }\n}\n\n/* TODO(eustas): move to compress_fragment.c? */\n/* Initializes the command and distance prefix codes for the first block. */\nstatic void InitCommandPrefixCodes(BrotliOnePassArena* s) {\n  static const BROTLI_MODEL(\"small\") uint8_t kDefaultCommandDepths[128] = {\n    0, 4, 4, 5, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8,\n    0, 0, 0, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7,\n    7, 7, 10, 10, 10, 10, 10, 10, 0, 4, 4, 5, 5, 5, 6, 6,\n    7, 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,\n    5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4,\n    4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 7, 8, 10,\n    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,\n  };\n  static const BROTLI_MODEL(\"small\") uint16_t kDefaultCommandBits[128] = {\n    0,   0,   8,   9,   3,  35,   7,   71,\n    39, 103,  23,  47, 175, 111, 239,   31,\n    0,   0,   0,   4,  12,   2,  10,    6,\n    13,  29,  11,  43,  27,  59,  87,   55,\n    15,  79, 319, 831, 191, 703, 447,  959,\n    0,  14,   1,  25,   5,  21,  19,   51,\n    119, 159,  95, 223, 479, 991,  63,  575,\n    127, 639, 383, 895, 255, 767, 511, 1023,\n    14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    27, 59, 7, 39, 23, 55, 30, 1, 17, 9, 25, 5, 0, 8, 4, 12,\n    2, 10, 6, 21, 13, 29, 3, 19, 11, 15, 47, 31, 95, 63, 127, 255,\n    767, 2815, 1791, 3839, 511, 2559, 1535, 3583, 1023, 3071, 2047, 4095,\n  };\n  static const BROTLI_MODEL(\"small\") uint8_t kDefaultCommandCode[] = {\n    0xff, 0x77, 0xd5, 0xbf, 0xe7, 0xde, 0xea, 0x9e, 0x51, 0x5d, 0xde, 0xc6,\n    0x70, 0x57, 0xbc, 0x58, 0x58, 0x58, 0xd8, 0xd8, 0x58, 0xd5, 0xcb, 0x8c,\n    0xea, 0xe0, 0xc3, 0x87, 0x1f, 0x83, 0xc1, 0x60, 0x1c, 0x67, 0xb2, 0xaa,\n    0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0xcc, 0xa1, 0xce, 0x88, 0x54, 0x94,\n    0x46, 0xe1, 0xb0, 0xd0, 0x4e, 0xb2, 0xf7, 0x04, 0x00,\n  };\n  static const size_t kDefaultCommandCodeNumBits = 448;\n  COPY_ARRAY(s->cmd_depth, kDefaultCommandDepths);\n  COPY_ARRAY(s->cmd_bits, kDefaultCommandBits);\n\n  /* Initialize the pre-compressed form of the command and distance prefix\n     codes. */\n  COPY_ARRAY(s->cmd_code, kDefaultCommandCode);\n  s->cmd_code_numbits = kDefaultCommandCodeNumBits;\n}\n\n/* TODO(eustas): avoid FP calculations. */\nstatic double EstimateEntropy(const uint32_t* population, size_t size) {\n  size_t total = 0;\n  double result = 0;\n  size_t i;\n  for (i = 0; i < size; ++i) {\n    uint32_t p = population[i];\n    total += p;\n    result += (double)p * FastLog2(p);\n  }\n  result = (double)total * FastLog2(total) - result;\n  return result;\n}\n\n/* Decide about the context map based on the ability of the prediction\n   ability of the previous byte UTF8-prefix on the next byte. The\n   prediction ability is calculated as Shannon entropy. Here we need\n   Shannon entropy instead of 'BrotliBitsEntropy' since the prefix will be\n   encoded with the remaining 6 bits of the following byte, and\n   BrotliBitsEntropy will assume that symbol to be stored alone using Huffman\n   coding. */\nstatic void ChooseContextMap(int quality,\n                             uint32_t* bigram_histo,\n                             size_t* num_literal_contexts,\n                             const uint32_t** literal_context_map) {\n  static const BROTLI_MODEL(\"small\")\n  uint32_t kStaticContextMapContinuation[64] = {\n    1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  };\n  static const BROTLI_MODEL(\"small\")\n  uint32_t kStaticContextMapSimpleUTF8[64] = {\n    0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  };\n\n  uint32_t monogram_histo[3] = { 0 };\n  uint32_t two_prefix_histo[6] = { 0 };\n  size_t total;\n  size_t i;\n  double entropy[4];\n  for (i = 0; i < 9; ++i) {\n    monogram_histo[i % 3] += bigram_histo[i];\n    two_prefix_histo[i % 6] += bigram_histo[i];\n  }\n  entropy[1] = EstimateEntropy(monogram_histo, 3);\n  entropy[2] = (EstimateEntropy(two_prefix_histo, 3) +\n                EstimateEntropy(two_prefix_histo + 3, 3));\n  entropy[3] = 0;\n  for (i = 0; i < 3; ++i) {\n    entropy[3] += EstimateEntropy(bigram_histo + 3 * i, 3);\n  }\n\n  total = monogram_histo[0] + monogram_histo[1] + monogram_histo[2];\n  BROTLI_DCHECK(total != 0);\n  entropy[0] = 1.0 / (double)total;\n  entropy[1] *= entropy[0];\n  entropy[2] *= entropy[0];\n  entropy[3] *= entropy[0];\n\n  if (quality < MIN_QUALITY_FOR_HQ_CONTEXT_MODELING) {\n    /* 3 context models is a bit slower, don't use it at lower qualities. */\n    entropy[3] = entropy[1] * 10;\n  }\n  /* If expected savings by symbol are less than 0.2 bits, skip the\n     context modeling -- in exchange for faster decoding speed. */\n  if (entropy[1] - entropy[2] < 0.2 &&\n      entropy[1] - entropy[3] < 0.2) {\n    *num_literal_contexts = 1;\n  } else if (entropy[2] - entropy[3] < 0.02) {\n    *num_literal_contexts = 2;\n    *literal_context_map = kStaticContextMapSimpleUTF8;\n  } else {\n    *num_literal_contexts = 3;\n    *literal_context_map = kStaticContextMapContinuation;\n  }\n}\n\n/* Decide if we want to use a more complex static context map containing 13\n   context values, based on the entropy reduction of histograms over the\n   first 5 bits of literals. */\nstatic BROTLI_BOOL ShouldUseComplexStaticContextMap(const uint8_t* input,\n    size_t start_pos, size_t length, size_t mask, int quality, size_t size_hint,\n    size_t* num_literal_contexts, const uint32_t** literal_context_map,\n    uint32_t* arena) {\n  static const BROTLI_MODEL(\"small\")\n  uint32_t kStaticContextMapComplexUTF8[64] = {\n    11, 11, 12, 12, /* 0 special */\n    0, 0, 0, 0, /* 4 lf */\n    1, 1, 9, 9, /* 8 space */\n    2, 2, 2, 2, /* !, first after space/lf and after something else. */\n    1, 1, 1, 1, /* \" */\n    8, 3, 3, 3, /* % */\n    1, 1, 1, 1, /* ({[ */\n    2, 2, 2, 2, /* }]) */\n    8, 4, 4, 4, /* :; */\n    8, 7, 4, 4, /* . */\n    8, 0, 0, 0, /* > */\n    3, 3, 3, 3, /* [0..9] */\n    5, 5, 10, 5, /* [A-Z] */\n    5, 5, 10, 5,\n    6, 6, 6, 6, /* [a-z] */\n    6, 6, 6, 6,\n  };\n  BROTLI_UNUSED(quality);\n  /* Try the more complex static context map only for long data. */\n  if (size_hint < (1 << 20)) {\n    return BROTLI_FALSE;\n  } else {\n    const size_t end_pos = start_pos + length;\n    /* To make entropy calculations faster, we collect histograms\n       over the 5 most significant bits of literals. One histogram\n       without context and 13 additional histograms for each context value. */\n    uint32_t* BROTLI_RESTRICT const combined_histo = arena;\n    uint32_t* BROTLI_RESTRICT const context_histo = arena + 32;\n    uint32_t total = 0;\n    double entropy[3];\n    size_t i;\n    ContextLut utf8_lut = BROTLI_CONTEXT_LUT(CONTEXT_UTF8);\n    memset(arena, 0, sizeof(arena[0]) * 32 * (BROTLI_MAX_STATIC_CONTEXTS + 1));\n    for (; start_pos + 64 <= end_pos; start_pos += 4096) {\n      const size_t stride_end_pos = start_pos + 64;\n      uint8_t prev2 = input[start_pos & mask];\n      uint8_t prev1 = input[(start_pos + 1) & mask];\n      size_t pos;\n      /* To make the analysis of the data faster we only examine 64 byte long\n         strides at every 4kB intervals. */\n      for (pos = start_pos + 2; pos < stride_end_pos; ++pos) {\n        const uint8_t literal = input[pos & mask];\n        const uint8_t context = (uint8_t)kStaticContextMapComplexUTF8[\n            BROTLI_CONTEXT(prev1, prev2, utf8_lut)];\n        ++total;\n        ++combined_histo[literal >> 3];\n        ++context_histo[(context << 5) + (literal >> 3)];\n        prev2 = prev1;\n        prev1 = literal;\n      }\n    }\n    entropy[1] = EstimateEntropy(combined_histo, 32);\n    entropy[2] = 0;\n    for (i = 0; i < BROTLI_MAX_STATIC_CONTEXTS; ++i) {\n      entropy[2] += EstimateEntropy(context_histo + (i << 5), 32);\n    }\n    entropy[0] = 1.0 / (double)total;\n    entropy[1] *= entropy[0];\n    entropy[2] *= entropy[0];\n    /* The triggering heuristics below were tuned by compressing the individual\n       files of the silesia corpus. If we skip this kind of context modeling\n       for not very well compressible input (i.e. entropy using context modeling\n       is 60% of maximal entropy) or if expected savings by symbol are less\n       than 0.2 bits, then in every case when it triggers, the final compression\n       ratio is improved. Note however that this heuristics might be too strict\n       for some cases and could be tuned further. */\n    if (entropy[2] > 3.0 || entropy[1] - entropy[2] < 0.2) {\n      return BROTLI_FALSE;\n    } else {\n      *num_literal_contexts = BROTLI_MAX_STATIC_CONTEXTS;\n      *literal_context_map = kStaticContextMapComplexUTF8;\n      return BROTLI_TRUE;\n    }\n  }\n}\n\nstatic void DecideOverLiteralContextModeling(const uint8_t* input,\n    size_t start_pos, size_t length, size_t mask, int quality, size_t size_hint,\n    size_t* num_literal_contexts, const uint32_t** literal_context_map,\n    uint32_t* arena) {\n  if (quality < MIN_QUALITY_FOR_CONTEXT_MODELING || length < 64) {\n    return;\n  } else if (ShouldUseComplexStaticContextMap(\n      input, start_pos, length, mask, quality, size_hint,\n      num_literal_contexts, literal_context_map, arena)) {\n    /* Context map was already set, nothing else to do. */\n  } else {\n    /* Gather bi-gram data of the UTF8 byte prefixes. To make the analysis of\n       UTF8 data faster we only examine 64 byte long strides at every 4kB\n       intervals. */\n    const size_t end_pos = start_pos + length;\n    uint32_t* BROTLI_RESTRICT const bigram_prefix_histo = arena;\n    memset(bigram_prefix_histo, 0, sizeof(arena[0]) * 9);\n    for (; start_pos + 64 <= end_pos; start_pos += 4096) {\n      static const int lut[4] = { 0, 0, 1, 2 };\n      const size_t stride_end_pos = start_pos + 64;\n      int prev = lut[input[start_pos & mask] >> 6] * 3;\n      size_t pos;\n      for (pos = start_pos + 1; pos < stride_end_pos; ++pos) {\n        const uint8_t literal = input[pos & mask];\n        ++bigram_prefix_histo[prev + lut[literal >> 6]];\n        prev = lut[literal >> 6] * 3;\n      }\n    }\n    ChooseContextMap(quality, &bigram_prefix_histo[0], num_literal_contexts,\n                     literal_context_map);\n  }\n}\n\nstatic BROTLI_BOOL ShouldCompress(\n    const uint8_t* data, const size_t mask, const uint64_t last_flush_pos,\n    const size_t bytes, const size_t num_literals, const size_t num_commands) {\n  /* TODO(eustas): find more precise minimal block overhead. */\n  if (bytes <= 2) return BROTLI_FALSE;\n  if (num_commands < (bytes >> 8) + 2) {\n    if ((double)num_literals > 0.99 * (double)bytes) {\n      uint32_t literal_histo[256] = { 0 };\n      static const uint32_t kSampleRate = 13;\n      static const double kInvSampleRate = 1.0 / 13.0;\n      static const double kMinEntropy = 7.92;\n      const double bit_cost_threshold =\n          (double)bytes * kMinEntropy * kInvSampleRate;\n      size_t t = (bytes + kSampleRate - 1) / kSampleRate;\n      uint32_t pos = (uint32_t)last_flush_pos;\n      size_t i;\n      for (i = 0; i < t; i++) {\n        ++literal_histo[data[pos & mask]];\n        pos += kSampleRate;\n      }\n      if (BrotliBitsEntropy(literal_histo, 256) > bit_cost_threshold) {\n        return BROTLI_FALSE;\n      }\n    }\n  }\n  return BROTLI_TRUE;\n}\n\n/* Chooses the literal context mode for a metablock */\nstatic ContextType ChooseContextMode(const BrotliEncoderParams* params,\n    const uint8_t* data, const size_t pos, const size_t mask,\n    const size_t length) {\n  /* We only do the computation for the option of something else than\n     CONTEXT_UTF8 for the highest qualities */\n  if (params->quality >= MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING &&\n      !BrotliIsMostlyUTF8(data, pos, mask, length, kMinUTF8Ratio)) {\n    return CONTEXT_SIGNED;\n  }\n  return CONTEXT_UTF8;\n}\n\nstatic void WriteMetaBlockInternal(MemoryManager* m,\n                                   const uint8_t* data,\n                                   const size_t mask,\n                                   const uint64_t last_flush_pos,\n                                   const size_t bytes,\n                                   const BROTLI_BOOL is_last,\n                                   ContextType literal_context_mode,\n                                   const BrotliEncoderParams* params,\n                                   const uint8_t prev_byte,\n                                   const uint8_t prev_byte2,\n                                   const size_t num_literals,\n                                   const size_t num_commands,\n                                   Command* commands,\n                                   const int* saved_dist_cache,\n                                   int* dist_cache,\n                                   size_t* storage_ix,\n                                   uint8_t* storage) {\n  const uint32_t wrapped_last_flush_pos = WrapPosition(last_flush_pos);\n  uint16_t last_bytes;\n  uint8_t last_bytes_bits;\n  ContextLut literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode);\n  BrotliEncoderParams block_params = *params;\n\n  if (bytes == 0) {\n    /* Write the ISLAST and ISEMPTY bits. */\n    BrotliWriteBits(2, 3, storage_ix, storage);\n    *storage_ix = (*storage_ix + 7u) & ~7u;\n    return;\n  }\n\n  if (!ShouldCompress(data, mask, last_flush_pos, bytes,\n                      num_literals, num_commands)) {\n    /* Restore the distance cache, as its last update by\n       CreateBackwardReferences is now unused. */\n    memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));\n    BrotliStoreUncompressedMetaBlock(is_last, data,\n                                     wrapped_last_flush_pos, mask, bytes,\n                                     storage_ix, storage);\n    return;\n  }\n\n  BROTLI_DCHECK(*storage_ix <= 14);\n  last_bytes = (uint16_t)((storage[1] << 8) | storage[0]);\n  last_bytes_bits = (uint8_t)(*storage_ix);\n  if (params->quality <= MAX_QUALITY_FOR_STATIC_ENTROPY_CODES) {\n    BrotliStoreMetaBlockFast(m, data, wrapped_last_flush_pos,\n                             bytes, mask, is_last, params,\n                             commands, num_commands,\n                             storage_ix, storage);\n    if (BROTLI_IS_OOM(m)) return;\n  } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) {\n    BrotliStoreMetaBlockTrivial(m, data, wrapped_last_flush_pos,\n                                bytes, mask, is_last, params,\n                                commands, num_commands,\n                                storage_ix, storage);\n    if (BROTLI_IS_OOM(m)) return;\n  } else {\n    MetaBlockSplit mb;\n    InitMetaBlockSplit(&mb);\n    if (params->quality < MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING) {\n      size_t num_literal_contexts = 1;\n      const uint32_t* literal_context_map = NULL;\n      if (!params->disable_literal_context_modeling) {\n        /* TODO(eustas): pull to higher level and reuse. */\n        uint32_t* arena =\n            BROTLI_ALLOC(m, uint32_t, 32 * (BROTLI_MAX_STATIC_CONTEXTS + 1));\n        if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(arena)) return;\n        DecideOverLiteralContextModeling(\n            data, wrapped_last_flush_pos, bytes, mask, params->quality,\n            params->size_hint, &num_literal_contexts,\n            &literal_context_map, arena);\n        BROTLI_FREE(m, arena);\n      }\n      BrotliBuildMetaBlockGreedy(m, data, wrapped_last_flush_pos, mask,\n          prev_byte, prev_byte2, literal_context_lut, num_literal_contexts,\n          literal_context_map, commands, num_commands, &mb);\n      if (BROTLI_IS_OOM(m)) return;\n    } else {\n      BrotliBuildMetaBlock(m, data, wrapped_last_flush_pos, mask, &block_params,\n                           prev_byte, prev_byte2,\n                           commands, num_commands,\n                           literal_context_mode,\n                           &mb);\n      if (BROTLI_IS_OOM(m)) return;\n    }\n    if (params->quality >= MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS) {\n      /* The number of distance symbols effectively used for distance\n         histograms. It might be less than distance alphabet size\n         for \"Large Window Brotli\" (32-bit). */\n      BrotliOptimizeHistograms(block_params.dist.alphabet_size_limit, &mb);\n    }\n    BrotliStoreMetaBlock(m, data, wrapped_last_flush_pos, bytes, mask,\n                         prev_byte, prev_byte2,\n                         is_last,\n                         &block_params,\n                         literal_context_mode,\n                         commands, num_commands,\n                         &mb,\n                         storage_ix, storage);\n    if (BROTLI_IS_OOM(m)) return;\n    DestroyMetaBlockSplit(m, &mb);\n  }\n  if (bytes + 4 < (*storage_ix >> 3)) {\n    /* Restore the distance cache and last byte. */\n    memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));\n    storage[0] = (uint8_t)last_bytes;\n    storage[1] = (uint8_t)(last_bytes >> 8);\n    *storage_ix = last_bytes_bits;\n    BrotliStoreUncompressedMetaBlock(is_last, data,\n                                     wrapped_last_flush_pos, mask,\n                                     bytes, storage_ix, storage);\n  }\n}\n\nstatic void ChooseDistanceParams(BrotliEncoderParams* params) {\n  uint32_t distance_postfix_bits = 0;\n  uint32_t num_direct_distance_codes = 0;\n\n  if (params->quality >= MIN_QUALITY_FOR_NONZERO_DISTANCE_PARAMS) {\n    uint32_t ndirect_msb;\n    if (params->mode == BROTLI_MODE_FONT) {\n      distance_postfix_bits = 1;\n      num_direct_distance_codes = 12;\n    } else {\n      distance_postfix_bits = params->dist.distance_postfix_bits;\n      num_direct_distance_codes = params->dist.num_direct_distance_codes;\n    }\n    ndirect_msb = (num_direct_distance_codes >> distance_postfix_bits) & 0x0F;\n    if (distance_postfix_bits > BROTLI_MAX_NPOSTFIX ||\n        num_direct_distance_codes > BROTLI_MAX_NDIRECT ||\n        (ndirect_msb << distance_postfix_bits) != num_direct_distance_codes) {\n      distance_postfix_bits = 0;\n      num_direct_distance_codes = 0;\n    }\n  }\n\n  BrotliInitDistanceParams(&params->dist, distance_postfix_bits,\n                           num_direct_distance_codes, params->large_window);\n}\n\nstatic BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s) {\n  MemoryManager* m = &s->memory_manager_;\n  if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n  if (s->is_initialized_) return BROTLI_TRUE;\n\n  s->last_bytes_bits_ = 0;\n  s->last_bytes_ = 0;\n  s->flint_ = BROTLI_FLINT_DONE;\n  s->remaining_metadata_bytes_ = BROTLI_UINT32_MAX;\n\n  SanitizeParams(&s->params);\n  s->params.lgblock = ComputeLgBlock(&s->params);\n  ChooseDistanceParams(&s->params);\n\n  if (s->params.stream_offset != 0) {\n    s->flint_ = BROTLI_FLINT_NEEDS_2_BYTES;\n    /* Poison the distance cache. -16 +- 3 is still less than zero (invalid). */\n    s->dist_cache_[0] = -16;\n    s->dist_cache_[1] = -16;\n    s->dist_cache_[2] = -16;\n    s->dist_cache_[3] = -16;\n    memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->saved_dist_cache_));\n  }\n\n  RingBufferSetup(&s->params, &s->ringbuffer_);\n\n  /* Initialize last byte with stream header. */\n  {\n    int lgwin = s->params.lgwin;\n    if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||\n        s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {\n      lgwin = BROTLI_MAX(int, lgwin, 18);\n    }\n    if (s->params.stream_offset == 0) {\n      EncodeWindowBits(lgwin, s->params.large_window,\n                       &s->last_bytes_, &s->last_bytes_bits_);\n    } else {\n      /* Bigger values have the same effect, but could cause overflows. */\n      s->params.stream_offset = BROTLI_MIN(size_t,\n          s->params.stream_offset, BROTLI_MAX_BACKWARD_LIMIT(lgwin));\n    }\n  }\n\n  if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {\n    s->one_pass_arena_ = BROTLI_ALLOC(m, BrotliOnePassArena, 1);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    InitCommandPrefixCodes(s->one_pass_arena_);\n  } else if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {\n    s->two_pass_arena_ = BROTLI_ALLOC(m, BrotliTwoPassArena, 1);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n  }\n\n  s->is_initialized_ = BROTLI_TRUE;\n  return BROTLI_TRUE;\n}\n\nstatic void BrotliEncoderInitParams(BrotliEncoderParams* params) {\n  params->mode = BROTLI_DEFAULT_MODE;\n  params->large_window = BROTLI_FALSE;\n  params->quality = BROTLI_DEFAULT_QUALITY;\n  params->lgwin = BROTLI_DEFAULT_WINDOW;\n  params->lgblock = 0;\n  params->stream_offset = 0;\n  params->size_hint = 0;\n  params->disable_literal_context_modeling = BROTLI_FALSE;\n  BrotliInitSharedEncoderDictionary(&params->dictionary);\n  params->dist.distance_postfix_bits = 0;\n  params->dist.num_direct_distance_codes = 0;\n  params->dist.alphabet_size_max =\n      BROTLI_DISTANCE_ALPHABET_SIZE(0, 0, BROTLI_MAX_DISTANCE_BITS);\n  params->dist.alphabet_size_limit = params->dist.alphabet_size_max;\n  params->dist.max_distance = BROTLI_MAX_DISTANCE;\n}\n\nstatic void BrotliEncoderCleanupParams(MemoryManager* m,\n    BrotliEncoderParams* params) {\n  BrotliCleanupSharedEncoderDictionary(m, &params->dictionary);\n}\n\n#ifdef BROTLI_REPORTING\n/* When BROTLI_REPORTING is defined extra reporting module have to be linked. */\nvoid BrotliEncoderOnStart(const BrotliEncoderState* s);\nvoid BrotliEncoderOnFinish(const BrotliEncoderState* s);\n#define BROTLI_ENCODER_ON_START(s) BrotliEncoderOnStart(s);\n#define BROTLI_ENCODER_ON_FINISH(s) BrotliEncoderOnFinish(s);\n#else\n#if !defined(BROTLI_ENCODER_ON_START)\n#define BROTLI_ENCODER_ON_START(s) (void)(s);\n#endif\n#if !defined(BROTLI_ENCODER_ON_FINISH)\n#define BROTLI_ENCODER_ON_FINISH(s) (void)(s);\n#endif\n#endif\n\nstatic void BrotliEncoderInitState(BrotliEncoderState* s) {\n  BROTLI_ENCODER_ON_START(s);\n  BrotliEncoderInitParams(&s->params);\n  s->input_pos_ = 0;\n  s->num_commands_ = 0;\n  s->num_literals_ = 0;\n  s->last_insert_len_ = 0;\n  s->last_flush_pos_ = 0;\n  s->last_processed_pos_ = 0;\n  s->prev_byte_ = 0;\n  s->prev_byte2_ = 0;\n  s->storage_size_ = 0;\n  s->storage_ = 0;\n  HasherInit(&s->hasher_);\n  s->large_table_ = NULL;\n  s->large_table_size_ = 0;\n  s->one_pass_arena_ = NULL;\n  s->two_pass_arena_ = NULL;\n  s->command_buf_ = NULL;\n  s->literal_buf_ = NULL;\n  s->total_in_ = 0;\n  s->next_out_ = NULL;\n  s->available_out_ = 0;\n  s->total_out_ = 0;\n  s->stream_state_ = BROTLI_STREAM_PROCESSING;\n  s->is_last_block_emitted_ = BROTLI_FALSE;\n  s->is_initialized_ = BROTLI_FALSE;\n\n  RingBufferInit(&s->ringbuffer_);\n\n  s->commands_ = 0;\n  s->cmd_alloc_size_ = 0;\n\n  /* Initialize distance cache. */\n  s->dist_cache_[0] = 4;\n  s->dist_cache_[1] = 11;\n  s->dist_cache_[2] = 15;\n  s->dist_cache_[3] = 16;\n  /* Save the state of the distance cache in case we need to restore it for\n     emitting an uncompressed block. */\n  memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->saved_dist_cache_));\n}\n\nBrotliEncoderState* BrotliEncoderCreateInstance(\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {\n  BROTLI_BOOL healthy = BrotliEncoderEnsureStaticInit();\n  if (!healthy) {\n    return 0;\n  }\n  BrotliEncoderState* state = (BrotliEncoderState*)BrotliBootstrapAlloc(\n      sizeof(BrotliEncoderState), alloc_func, free_func, opaque);\n  if (state == NULL) {\n    /* BROTLI_DUMP(); */\n    return 0;\n  }\n  BrotliInitMemoryManager(\n      &state->memory_manager_, alloc_func, free_func, opaque);\n  BrotliEncoderInitState(state);\n  return state;\n}\n\nstatic void BrotliEncoderCleanupState(BrotliEncoderState* s) {\n  MemoryManager* m = &s->memory_manager_;\n\n  BROTLI_ENCODER_ON_FINISH(s);\n\n  if (BROTLI_IS_OOM(m)) {\n    BrotliWipeOutMemoryManager(m);\n    return;\n  }\n\n  BROTLI_FREE(m, s->storage_);\n  BROTLI_FREE(m, s->commands_);\n  RingBufferFree(m, &s->ringbuffer_);\n  DestroyHasher(m, &s->hasher_);\n  BROTLI_FREE(m, s->large_table_);\n  BROTLI_FREE(m, s->one_pass_arena_);\n  BROTLI_FREE(m, s->two_pass_arena_);\n  BROTLI_FREE(m, s->command_buf_);\n  BROTLI_FREE(m, s->literal_buf_);\n  BrotliEncoderCleanupParams(m, &s->params);\n}\n\n/* Deinitializes and frees BrotliEncoderState instance. */\nvoid BrotliEncoderDestroyInstance(BrotliEncoderState* state) {\n  if (!state) {\n    return;\n  } else {\n    BrotliEncoderCleanupState(state);\n    BrotliBootstrapFree(state, &state->memory_manager_);\n  }\n}\n\n/*\n   Copies the given input data to the internal ring buffer of the compressor.\n   No processing of the data occurs at this time and this function can be\n   called multiple times before calling WriteBrotliData() to process the\n   accumulated input. At most input_block_size() bytes of input data can be\n   copied to the ring buffer, otherwise the next WriteBrotliData() will fail.\n */\nstatic void CopyInputToRingBuffer(BrotliEncoderState* s,\n                                  const size_t input_size,\n                                  const uint8_t* input_buffer) {\n  RingBuffer* ringbuffer_ = &s->ringbuffer_;\n  MemoryManager* m = &s->memory_manager_;\n  RingBufferWrite(m, input_buffer, input_size, ringbuffer_);\n  if (BROTLI_IS_OOM(m)) return;\n  s->input_pos_ += input_size;\n\n  /* TL;DR: If needed, initialize 7 more bytes in the ring buffer to make the\n     hashing not depend on uninitialized data. This makes compression\n     deterministic and it prevents uninitialized memory warnings in Valgrind.\n     Even without erasing, the output would be valid (but nondeterministic).\n\n     Background information: The compressor stores short (at most 8 bytes)\n     substrings of the input already read in a hash table, and detects\n     repetitions by looking up such substrings in the hash table. If it\n     can find a substring, it checks whether the substring is really there\n     in the ring buffer (or it's just a hash collision). Should the hash\n     table become corrupt, this check makes sure that the output is\n     still valid, albeit the compression ratio would be bad.\n\n     The compressor populates the hash table from the ring buffer as it's\n     reading new bytes from the input. However, at the last few indexes of\n     the ring buffer, there are not enough bytes to build full-length\n     substrings from. Since the hash table always contains full-length\n     substrings, we overwrite with zeros here to make sure that those\n     substrings will contain zeros at the end instead of uninitialized\n     data.\n\n     Please note that erasing is not necessary (because the\n     memory region is already initialized since he ring buffer\n     has a `tail' that holds a copy of the beginning,) so we\n     skip erasing if we have already gone around at least once in\n     the ring buffer.\n\n     Only clear during the first round of ring-buffer writes. On\n     subsequent rounds data in the ring-buffer would be affected. */\n  if (ringbuffer_->pos_ <= ringbuffer_->mask_) {\n    /* This is the first time when the ring buffer is being written.\n       We clear 7 bytes just after the bytes that have been copied from\n       the input buffer.\n\n       The ring-buffer has a \"tail\" that holds a copy of the beginning,\n       but only once the ring buffer has been fully written once, i.e.,\n       pos <= mask. For the first time, we need to write values\n       in this tail (where index may be larger than mask), so that\n       we have exactly defined behavior and don't read uninitialized\n       memory. Due to performance reasons, hashing reads data using a\n       LOAD64, which can go 7 bytes beyond the bytes written in the\n       ring-buffer. */\n    memset(ringbuffer_->buffer_ + ringbuffer_->pos_, 0, 7);\n  }\n}\n\n/* Marks all input as processed.\n   Returns true if position wrapping occurs. */\nstatic BROTLI_BOOL UpdateLastProcessedPos(BrotliEncoderState* s) {\n  uint32_t wrapped_last_processed_pos = WrapPosition(s->last_processed_pos_);\n  uint32_t wrapped_input_pos = WrapPosition(s->input_pos_);\n  s->last_processed_pos_ = s->input_pos_;\n  return TO_BROTLI_BOOL(wrapped_input_pos < wrapped_last_processed_pos);\n}\n\nstatic void ExtendLastCommand(BrotliEncoderState* s, uint32_t* bytes,\n                              uint32_t* wrapped_last_processed_pos) {\n  Command* last_command = &s->commands_[s->num_commands_ - 1];\n  const uint8_t* data = s->ringbuffer_.buffer_;\n  const uint32_t mask = s->ringbuffer_.mask_;\n  uint64_t max_backward_distance =\n      (((uint64_t)1) << s->params.lgwin) - BROTLI_WINDOW_GAP;\n  uint64_t last_copy_len = last_command->copy_len_ & 0x1FFFFFF;\n  uint64_t last_processed_pos = s->last_processed_pos_ - last_copy_len;\n  uint64_t max_distance = last_processed_pos < max_backward_distance ?\n      last_processed_pos : max_backward_distance;\n  uint64_t cmd_dist = (uint64_t)s->dist_cache_[0];\n  uint32_t distance_code = CommandRestoreDistanceCode(last_command,\n                                                      &s->params.dist);\n  const CompoundDictionary* dict = &s->params.dictionary.compound;\n  size_t compound_dictionary_size = dict->total_size;\n  if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES ||\n      distance_code - (BROTLI_NUM_DISTANCE_SHORT_CODES - 1) == cmd_dist) {\n    if (cmd_dist <= max_distance) {\n      while (*bytes != 0 && data[*wrapped_last_processed_pos & mask] ==\n             data[(*wrapped_last_processed_pos - cmd_dist) & mask]) {\n        last_command->copy_len_++;\n        (*bytes)--;\n        (*wrapped_last_processed_pos)++;\n      }\n    } else {\n      if ((cmd_dist - max_distance - 1) < compound_dictionary_size &&\n          last_copy_len < cmd_dist - max_distance) {\n        size_t address =\n            compound_dictionary_size - (size_t)(cmd_dist - max_distance) +\n            (size_t)last_copy_len;\n        size_t br_index = 0;\n        size_t br_offset;\n        const uint8_t* chunk;\n        size_t chunk_length;\n        while (address >= dict->chunk_offsets[br_index + 1]) br_index++;\n        br_offset = address - dict->chunk_offsets[br_index];\n        chunk = dict->chunk_source[br_index];\n        chunk_length =\n            dict->chunk_offsets[br_index + 1] - dict->chunk_offsets[br_index];\n        while (*bytes != 0 && data[*wrapped_last_processed_pos & mask] ==\n               chunk[br_offset]) {\n          last_command->copy_len_++;\n          (*bytes)--;\n          (*wrapped_last_processed_pos)++;\n          if (++br_offset == chunk_length) {\n            br_index++;\n            br_offset = 0;\n            if (br_index != dict->num_chunks) {\n              chunk = dict->chunk_source[br_index];\n              chunk_length = dict->chunk_offsets[br_index + 1] -\n                  dict->chunk_offsets[br_index];\n            } else {\n              break;\n            }\n          }\n        }\n      }\n    }\n    /* The copy length is at most the metablock size, and thus expressible. */\n    GetLengthCode(last_command->insert_len_,\n                  (size_t)((int)(last_command->copy_len_ & 0x1FFFFFF) +\n                           (int)(last_command->copy_len_ >> 25)),\n                  TO_BROTLI_BOOL((last_command->dist_prefix_ & 0x3FF) == 0),\n                  &last_command->cmd_prefix_);\n  }\n}\n\n/*\n   Processes the accumulated input data and sets |*out_size| to the length of\n   the new output meta-block, or to zero if no new output meta-block has been\n   created (in this case the processed input data is buffered internally).\n   If |*out_size| is positive, |*output| points to the start of the output\n   data. If |is_last| or |force_flush| is BROTLI_TRUE, an output meta-block is\n   always created. However, until |is_last| is BROTLI_TRUE encoder may retain up\n   to 7 bits of the last byte of output. Byte-alignment could be enforced by\n   emitting an empty meta-data block.\n   Returns BROTLI_FALSE if the size of the input data is larger than\n   input_block_size().\n */\nstatic BROTLI_BOOL EncodeData(\n    BrotliEncoderState* s, const BROTLI_BOOL is_last,\n    const BROTLI_BOOL force_flush, size_t* out_size, uint8_t** output) {\n  const uint64_t delta = UnprocessedInputSize(s);\n  uint32_t bytes = (uint32_t)delta;\n  uint32_t wrapped_last_processed_pos = WrapPosition(s->last_processed_pos_);\n  uint8_t* data;\n  uint32_t mask;\n  MemoryManager* m = &s->memory_manager_;\n  ContextType literal_context_mode;\n  ContextLut literal_context_lut;\n  BROTLI_BOOL fast_compress =\n      s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||\n      s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY;\n\n  data = s->ringbuffer_.buffer_;\n  mask = s->ringbuffer_.mask_;\n\n  if (delta == 0) {  /* No new input; still might want to flush or finish. */\n    if (!data) {  /* No input has been processed so far. */\n      if (is_last) {  /* Emit complete finalized stream. */\n        BROTLI_DCHECK(s->last_bytes_bits_ <= 14);\n        s->last_bytes_ |= (uint16_t)(3u << s->last_bytes_bits_);\n        s->last_bytes_bits_ = (uint8_t)(s->last_bytes_bits_ + 2u);\n        s->tiny_buf_.u8[0] = (uint8_t)s->last_bytes_;\n        s->tiny_buf_.u8[1] = (uint8_t)(s->last_bytes_ >> 8);\n        *output = s->tiny_buf_.u8;\n        *out_size = (s->last_bytes_bits_ + 7u) >> 3u;\n        return BROTLI_TRUE;\n      } else {  /* No data, not last -> no-op. */\n        *out_size = 0;\n        return BROTLI_TRUE;\n      }\n    } else {\n      /* Fast compress performs flush every block -> flush is no-op. */\n      if (!is_last && (!force_flush || fast_compress)) {  /* Another no-op. */\n        *out_size = 0;\n        return BROTLI_TRUE;\n      }\n    }\n  }\n  BROTLI_DCHECK(data);\n\n  if (s->params.quality > s->params.dictionary.max_quality) return BROTLI_FALSE;\n  /* Adding more blocks after \"last\" block is forbidden. */\n  if (s->is_last_block_emitted_) return BROTLI_FALSE;\n  if (is_last) s->is_last_block_emitted_ = BROTLI_TRUE;\n\n  if (delta > InputBlockSize(s)) {\n    return BROTLI_FALSE;\n  }\n  if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY &&\n      !s->command_buf_) {\n    s->command_buf_ =\n        BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize);\n    s->literal_buf_ =\n        BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize);\n    if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(s->command_buf_) ||\n        BROTLI_IS_NULL(s->literal_buf_)) {\n      return BROTLI_FALSE;\n    }\n  }\n\n  if (fast_compress) {\n    uint8_t* storage;\n    size_t storage_ix = s->last_bytes_bits_;\n    size_t table_size;\n    int* table;\n\n    storage = GetBrotliStorage(s, 2 * bytes + 503);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    storage[0] = (uint8_t)s->last_bytes_;\n    storage[1] = (uint8_t)(s->last_bytes_ >> 8);\n    table = GetHashTable(s, s->params.quality, bytes, &table_size);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {\n      BrotliCompressFragmentFast(\n          s->one_pass_arena_, &data[wrapped_last_processed_pos & mask],\n          bytes, is_last,\n          table, table_size,\n          &storage_ix, storage);\n      if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    } else {\n      BrotliCompressFragmentTwoPass(\n          s->two_pass_arena_, &data[wrapped_last_processed_pos & mask],\n          bytes, is_last,\n          s->command_buf_, s->literal_buf_,\n          table, table_size,\n          &storage_ix, storage);\n      if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    }\n    s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);\n    s->last_bytes_bits_ = storage_ix & 7u;\n    UpdateLastProcessedPos(s);\n    *output = &storage[0];\n    *out_size = storage_ix >> 3;\n    return BROTLI_TRUE;\n  }\n\n  {\n    /* Theoretical max number of commands is 1 per 2 bytes. */\n    size_t newsize = s->num_commands_ + bytes / 2 + 1;\n    if (newsize > s->cmd_alloc_size_) {\n      Command* new_commands;\n      /* Reserve a bit more memory to allow merging with a next block\n         without reallocation: that would impact speed. */\n      newsize += (bytes / 4) + 16;\n      s->cmd_alloc_size_ = newsize;\n      new_commands = BROTLI_ALLOC(m, Command, newsize);\n      if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(new_commands)) return BROTLI_FALSE;\n      if (s->commands_) {\n        memcpy(new_commands, s->commands_, sizeof(Command) * s->num_commands_);\n        BROTLI_FREE(m, s->commands_);\n      }\n      s->commands_ = new_commands;\n    }\n  }\n\n  InitOrStitchToPreviousBlock(m, &s->hasher_, data, mask, &s->params,\n      wrapped_last_processed_pos, bytes, is_last);\n\n  literal_context_mode = ChooseContextMode(\n      &s->params, data, WrapPosition(s->last_flush_pos_),\n      mask, (size_t)(s->input_pos_ - s->last_flush_pos_));\n  literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode);\n\n  if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n\n  if (s->num_commands_ && s->last_insert_len_ == 0) {\n    ExtendLastCommand(s, &bytes, &wrapped_last_processed_pos);\n  }\n\n  if (s->params.quality == ZOPFLIFICATION_QUALITY) {\n    BROTLI_DCHECK(s->params.hasher.type == 10);\n    BrotliCreateZopfliBackwardReferences(m, bytes, wrapped_last_processed_pos,\n        data, mask, literal_context_lut, &s->params,\n        &s->hasher_, s->dist_cache_,\n        &s->last_insert_len_, &s->commands_[s->num_commands_],\n        &s->num_commands_, &s->num_literals_);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n  } else if (s->params.quality == HQ_ZOPFLIFICATION_QUALITY) {\n    BROTLI_DCHECK(s->params.hasher.type == 10);\n    BrotliCreateHqZopfliBackwardReferences(m, bytes, wrapped_last_processed_pos,\n        data, mask, literal_context_lut, &s->params,\n        &s->hasher_, s->dist_cache_,\n        &s->last_insert_len_, &s->commands_[s->num_commands_],\n        &s->num_commands_, &s->num_literals_);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n  } else {\n    BrotliCreateBackwardReferences(bytes, wrapped_last_processed_pos,\n        data, mask, literal_context_lut, &s->params,\n        &s->hasher_, s->dist_cache_,\n        &s->last_insert_len_, &s->commands_[s->num_commands_],\n        &s->num_commands_, &s->num_literals_);\n  }\n\n  {\n    const size_t max_length = MaxMetablockSize(&s->params);\n    const size_t max_literals = max_length / 8;\n    const size_t max_commands = max_length / 8;\n    const size_t processed_bytes = (size_t)(s->input_pos_ - s->last_flush_pos_);\n    /* If maximal possible additional block doesn't fit metablock, flush now. */\n    /* TODO(eustas): Postpone decision until next block arrives? */\n    const BROTLI_BOOL next_input_fits_metablock = TO_BROTLI_BOOL(\n        processed_bytes + InputBlockSize(s) <= max_length);\n    /* If block splitting is not used, then flush as soon as there is some\n       amount of commands / literals produced. */\n    const BROTLI_BOOL should_flush = TO_BROTLI_BOOL(\n        s->params.quality < MIN_QUALITY_FOR_BLOCK_SPLIT &&\n        s->num_literals_ + s->num_commands_ >= MAX_NUM_DELAYED_SYMBOLS);\n    if (!is_last && !force_flush && !should_flush &&\n        next_input_fits_metablock &&\n        s->num_literals_ < max_literals &&\n        s->num_commands_ < max_commands) {\n      /* Merge with next input block. Everything will happen later. */\n      if (UpdateLastProcessedPos(s)) {\n        HasherReset(&s->hasher_);\n      }\n      *out_size = 0;\n      return BROTLI_TRUE;\n    }\n  }\n\n  /* Create the last insert-only command. */\n  if (s->last_insert_len_ > 0) {\n    InitInsertCommand(&s->commands_[s->num_commands_++], s->last_insert_len_);\n    s->num_literals_ += s->last_insert_len_;\n    s->last_insert_len_ = 0;\n  }\n\n  if (!is_last && s->input_pos_ == s->last_flush_pos_) {\n    /* We have no new input data and we don't have to finish the stream, so\n       nothing to do. */\n    *out_size = 0;\n    return BROTLI_TRUE;\n  }\n  BROTLI_DCHECK(s->input_pos_ >= s->last_flush_pos_);\n  BROTLI_DCHECK(s->input_pos_ > s->last_flush_pos_ || is_last);\n  BROTLI_DCHECK(s->input_pos_ - s->last_flush_pos_ <= 1u << 24);\n  {\n    const uint32_t metablock_size =\n        (uint32_t)(s->input_pos_ - s->last_flush_pos_);\n    uint8_t* storage = GetBrotliStorage(s, 2 * metablock_size + 503);\n    size_t storage_ix = s->last_bytes_bits_;\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    storage[0] = (uint8_t)s->last_bytes_;\n    storage[1] = (uint8_t)(s->last_bytes_ >> 8);\n    WriteMetaBlockInternal(\n        m, data, mask, s->last_flush_pos_, metablock_size, is_last,\n        literal_context_mode, &s->params, s->prev_byte_, s->prev_byte2_,\n        s->num_literals_, s->num_commands_, s->commands_, s->saved_dist_cache_,\n        s->dist_cache_, &storage_ix, storage);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);\n    s->last_bytes_bits_ = storage_ix & 7u;\n    s->last_flush_pos_ = s->input_pos_;\n    if (UpdateLastProcessedPos(s)) {\n      HasherReset(&s->hasher_);\n    }\n    if (s->last_flush_pos_ > 0) {\n      s->prev_byte_ = data[((uint32_t)s->last_flush_pos_ - 1) & mask];\n    }\n    if (s->last_flush_pos_ > 1) {\n      s->prev_byte2_ = data[(uint32_t)(s->last_flush_pos_ - 2) & mask];\n    }\n    s->num_commands_ = 0;\n    s->num_literals_ = 0;\n    /* Save the state of the distance cache in case we need to restore it for\n       emitting an uncompressed block. */\n    memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->saved_dist_cache_));\n    *output = &storage[0];\n    *out_size = storage_ix >> 3;\n    return BROTLI_TRUE;\n  }\n}\n\n/* Dumps remaining output bits and metadata header to |header|.\n   Returns number of produced bytes.\n   REQUIRED: |header| should be 8-byte aligned and at least 16 bytes long.\n   REQUIRED: |block_size| <= (1 << 24). */\nstatic size_t WriteMetadataHeader(\n    BrotliEncoderState* s, const size_t block_size, uint8_t* header) {\n  size_t storage_ix;\n  storage_ix = s->last_bytes_bits_;\n  header[0] = (uint8_t)s->last_bytes_;\n  header[1] = (uint8_t)(s->last_bytes_ >> 8);\n  s->last_bytes_ = 0;\n  s->last_bytes_bits_ = 0;\n\n  BrotliWriteBits(1, 0, &storage_ix, header);\n  BrotliWriteBits(2, 3, &storage_ix, header);\n  BrotliWriteBits(1, 0, &storage_ix, header);\n  if (block_size == 0) {\n    BrotliWriteBits(2, 0, &storage_ix, header);\n  } else {\n    uint32_t nbits = (block_size == 1) ? 1 :\n        (Log2FloorNonZero((uint32_t)block_size - 1) + 1);\n    uint32_t nbytes = (nbits + 7) / 8;\n    BrotliWriteBits(2, nbytes, &storage_ix, header);\n    BrotliWriteBits(8 * nbytes, block_size - 1, &storage_ix, header);\n  }\n  return (storage_ix + 7u) >> 3;\n}\n\nsize_t BrotliEncoderMaxCompressedSize(size_t input_size) {\n  /* [window bits / empty metadata] + N * [uncompressed] + [last empty] */\n  size_t num_large_blocks = input_size >> 14;\n  size_t overhead = 2 + (4 * num_large_blocks) + 3 + 1;\n  size_t result = input_size + overhead;\n  if (input_size == 0) return 2;\n  return (result < input_size) ? 0 : result;\n}\n\n/* Wraps data to uncompressed brotli stream with minimal window size.\n   |output| should point at region with at least BrotliEncoderMaxCompressedSize\n   addressable bytes.\n   Returns the length of stream. */\nstatic size_t MakeUncompressedStream(\n    const uint8_t* input, size_t input_size, uint8_t* output) {\n  size_t size = input_size;\n  size_t result = 0;\n  size_t offset = 0;\n  if (input_size == 0) {\n    output[0] = 6;\n    return 1;\n  }\n  output[result++] = 0x21;  /* window bits = 10, is_last = false */\n  output[result++] = 0x03;  /* empty metadata, padding */\n  while (size > 0) {\n    uint32_t nibbles = 0;\n    uint32_t chunk_size;\n    uint32_t bits;\n    chunk_size = (size > (1u << 24)) ? (1u << 24) : (uint32_t)size;\n    if (chunk_size > (1u << 16)) nibbles = (chunk_size > (1u << 20)) ? 2 : 1;\n    bits =\n        (nibbles << 1) | ((chunk_size - 1) << 3) | (1u << (19 + 4 * nibbles));\n    output[result++] = (uint8_t)bits;\n    output[result++] = (uint8_t)(bits >> 8);\n    output[result++] = (uint8_t)(bits >> 16);\n    if (nibbles == 2) output[result++] = (uint8_t)(bits >> 24);\n    memcpy(&output[result], &input[offset], chunk_size);\n    result += chunk_size;\n    offset += chunk_size;\n    size -= chunk_size;\n  }\n  output[result++] = 3;\n  return result;\n}\n\nBROTLI_BOOL BrotliEncoderCompress(\n    int quality, int lgwin, BrotliEncoderMode mode, size_t input_size,\n    const uint8_t input_buffer[BROTLI_ARRAY_PARAM(input_size)],\n    size_t* encoded_size,\n    uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(*encoded_size)]) {\n  BrotliEncoderState* s;\n  size_t out_size = *encoded_size;\n  const uint8_t* input_start = input_buffer;\n  uint8_t* output_start = encoded_buffer;\n  size_t max_out_size = BrotliEncoderMaxCompressedSize(input_size);\n  if (out_size == 0) {\n    /* Output buffer needs at least one byte. */\n    return BROTLI_FALSE;\n  }\n  if (input_size == 0) {\n    /* Handle the special case of empty input. */\n    *encoded_size = 1;\n    *encoded_buffer = 6;\n    return BROTLI_TRUE;\n  }\n\n  s = BrotliEncoderCreateInstance(0, 0, 0);\n  if (!s) {\n    return BROTLI_FALSE;\n  } else {\n    size_t available_in = input_size;\n    const uint8_t* next_in = input_buffer;\n    size_t available_out = *encoded_size;\n    uint8_t* next_out = encoded_buffer;\n    size_t total_out = 0;\n    BROTLI_BOOL result = BROTLI_FALSE;\n    /* TODO(eustas): check that parameters are sane. */\n    BrotliEncoderSetParameter(s, BROTLI_PARAM_QUALITY, (uint32_t)quality);\n    BrotliEncoderSetParameter(s, BROTLI_PARAM_LGWIN, (uint32_t)lgwin);\n    BrotliEncoderSetParameter(s, BROTLI_PARAM_MODE, (uint32_t)mode);\n    BrotliEncoderSetParameter(s, BROTLI_PARAM_SIZE_HINT, (uint32_t)input_size);\n    if (lgwin > BROTLI_MAX_WINDOW_BITS) {\n      BrotliEncoderSetParameter(s, BROTLI_PARAM_LARGE_WINDOW, BROTLI_TRUE);\n    }\n    result = BrotliEncoderCompressStream(s, BROTLI_OPERATION_FINISH,\n        &available_in, &next_in, &available_out, &next_out, &total_out);\n    if (!BrotliEncoderIsFinished(s)) result = 0;\n    *encoded_size = total_out;\n    BrotliEncoderDestroyInstance(s);\n    if (!result || (max_out_size && *encoded_size > max_out_size)) {\n      goto fallback;\n    }\n    return BROTLI_TRUE;\n  }\nfallback:\n  *encoded_size = 0;\n  if (!max_out_size) return BROTLI_FALSE;\n  if (out_size >= max_out_size) {\n    *encoded_size =\n        MakeUncompressedStream(input_start, input_size, output_start);\n    return BROTLI_TRUE;\n  }\n  return BROTLI_FALSE;\n}\n\nstatic void InjectBytePaddingBlock(BrotliEncoderState* s) {\n  uint32_t seal = s->last_bytes_;\n  size_t seal_bits = s->last_bytes_bits_;\n  uint8_t* destination;\n  s->last_bytes_ = 0;\n  s->last_bytes_bits_ = 0;\n  /* is_last = 0, data_nibbles = 11, reserved = 0, meta_nibbles = 00 */\n  seal |= 0x6u << seal_bits;\n  seal_bits += 6;\n  /* If we have already created storage, then append to it.\n     Storage is valid until next block is being compressed. */\n  if (s->next_out_) {\n    destination = s->next_out_ + s->available_out_;\n  } else {\n    destination = s->tiny_buf_.u8;\n    s->next_out_ = destination;\n  }\n  destination[0] = (uint8_t)seal;\n  if (seal_bits > 8) destination[1] = (uint8_t)(seal >> 8);\n  if (seal_bits > 16) destination[2] = (uint8_t)(seal >> 16);\n  s->available_out_ += (seal_bits + 7) >> 3;\n}\n\n/* Fills the |total_out|, if it is not NULL. */\nstatic void SetTotalOut(BrotliEncoderState* s, size_t* total_out) {\n  if (total_out) {\n    /* Saturating conversion uint64_t -> size_t */\n    size_t result = (size_t)-1;\n    if (s->total_out_ < result) {\n      result = (size_t)s->total_out_;\n    }\n    *total_out = result;\n  }\n}\n\n/* Injects padding bits or pushes compressed data to output.\n   Returns false if nothing is done. */\nstatic BROTLI_BOOL InjectFlushOrPushOutput(BrotliEncoderState* s,\n    size_t* available_out, uint8_t** next_out, size_t* total_out) {\n  if (s->stream_state_ == BROTLI_STREAM_FLUSH_REQUESTED &&\n      s->last_bytes_bits_ != 0) {\n    InjectBytePaddingBlock(s);\n    return BROTLI_TRUE;\n  }\n\n  if (s->available_out_ != 0 && *available_out != 0) {\n    size_t copy_output_size =\n        BROTLI_MIN(size_t, s->available_out_, *available_out);\n    memcpy(*next_out, s->next_out_, copy_output_size);\n    *next_out += copy_output_size;\n    *available_out -= copy_output_size;\n    s->next_out_ += copy_output_size;\n    s->available_out_ -= copy_output_size;\n    s->total_out_ += copy_output_size;\n    SetTotalOut(s, total_out);\n    return BROTLI_TRUE;\n  }\n\n  return BROTLI_FALSE;\n}\n\nstatic void CheckFlushComplete(BrotliEncoderState* s) {\n  if (s->stream_state_ == BROTLI_STREAM_FLUSH_REQUESTED &&\n      s->available_out_ == 0) {\n    s->stream_state_ = BROTLI_STREAM_PROCESSING;\n    s->next_out_ = 0;\n  }\n}\n\nstatic BROTLI_BOOL BrotliEncoderCompressStreamFast(\n    BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_in,\n    const uint8_t** next_in, size_t* available_out, uint8_t** next_out,\n    size_t* total_out) {\n  const size_t block_size_limit = (size_t)1 << s->params.lgwin;\n  const size_t buf_size = BROTLI_MIN(size_t, kCompressFragmentTwoPassBlockSize,\n      BROTLI_MIN(size_t, *available_in, block_size_limit));\n  uint32_t* tmp_command_buf = NULL;\n  uint32_t* command_buf = NULL;\n  uint8_t* tmp_literal_buf = NULL;\n  uint8_t* literal_buf = NULL;\n  MemoryManager* m = &s->memory_manager_;\n  if (s->params.quality != FAST_ONE_PASS_COMPRESSION_QUALITY &&\n      s->params.quality != FAST_TWO_PASS_COMPRESSION_QUALITY) {\n    return BROTLI_FALSE;\n  }\n  if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {\n    if (!s->command_buf_ && buf_size == kCompressFragmentTwoPassBlockSize) {\n      s->command_buf_ =\n          BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize);\n      s->literal_buf_ =\n          BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize);\n      if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(s->command_buf_) ||\n          BROTLI_IS_NULL(s->literal_buf_)) {\n        return BROTLI_FALSE;\n      }\n    }\n    if (s->command_buf_) {\n      command_buf = s->command_buf_;\n      literal_buf = s->literal_buf_;\n    } else {\n      tmp_command_buf = BROTLI_ALLOC(m, uint32_t, buf_size);\n      tmp_literal_buf = BROTLI_ALLOC(m, uint8_t, buf_size);\n      if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(tmp_command_buf) ||\n          BROTLI_IS_NULL(tmp_literal_buf)) {\n        return BROTLI_FALSE;\n      }\n      command_buf = tmp_command_buf;\n      literal_buf = tmp_literal_buf;\n    }\n  }\n\n  while (BROTLI_TRUE) {\n    if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {\n      continue;\n    }\n\n    /* Compress block only when internal output buffer is empty, stream is not\n       finished, there is no pending flush request, and there is either\n       additional input or pending operation. */\n    if (s->available_out_ == 0 &&\n        s->stream_state_ == BROTLI_STREAM_PROCESSING &&\n        (*available_in != 0 || op != BROTLI_OPERATION_PROCESS)) {\n      size_t block_size = BROTLI_MIN(size_t, block_size_limit, *available_in);\n      BROTLI_BOOL is_last =\n          (*available_in == block_size) && (op == BROTLI_OPERATION_FINISH);\n      BROTLI_BOOL force_flush =\n          (*available_in == block_size) && (op == BROTLI_OPERATION_FLUSH);\n      size_t max_out_size = 2 * block_size + 503;\n      BROTLI_BOOL inplace = BROTLI_TRUE;\n      uint8_t* storage = NULL;\n      size_t storage_ix = s->last_bytes_bits_;\n      size_t table_size;\n      int* table;\n\n      if (force_flush && block_size == 0) {\n        s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;\n        continue;\n      }\n      if (max_out_size <= *available_out) {\n        storage = *next_out;\n      } else {\n        inplace = BROTLI_FALSE;\n        storage = GetBrotliStorage(s, max_out_size);\n        if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n      }\n      storage[0] = (uint8_t)s->last_bytes_;\n      storage[1] = (uint8_t)(s->last_bytes_ >> 8);\n      table = GetHashTable(s, s->params.quality, block_size, &table_size);\n      if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n\n      if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {\n        BrotliCompressFragmentFast(s->one_pass_arena_, *next_in, block_size,\n            is_last, table, table_size, &storage_ix, storage);\n        if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n      } else {\n        BrotliCompressFragmentTwoPass(s->two_pass_arena_, *next_in, block_size,\n            is_last, command_buf, literal_buf, table, table_size,\n            &storage_ix, storage);\n        if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n      }\n      if (block_size != 0) {\n        *next_in += block_size;\n        *available_in -= block_size;\n        s->total_in_ += block_size;\n      }\n      if (inplace) {\n        size_t out_bytes = storage_ix >> 3;\n        BROTLI_DCHECK(out_bytes <= *available_out);\n        BROTLI_DCHECK((storage_ix & 7) == 0 || out_bytes < *available_out);\n        *next_out += out_bytes;\n        *available_out -= out_bytes;\n        s->total_out_ += out_bytes;\n        SetTotalOut(s, total_out);\n      } else {\n        size_t out_bytes = storage_ix >> 3;\n        s->next_out_ = storage;\n        s->available_out_ = out_bytes;\n      }\n      s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);\n      s->last_bytes_bits_ = storage_ix & 7u;\n\n      if (force_flush) s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;\n      if (is_last) s->stream_state_ = BROTLI_STREAM_FINISHED;\n      continue;\n    }\n    break;\n  }\n  BROTLI_FREE(m, tmp_command_buf);\n  BROTLI_FREE(m, tmp_literal_buf);\n  CheckFlushComplete(s);\n  return BROTLI_TRUE;\n}\n\nstatic BROTLI_BOOL ProcessMetadata(\n    BrotliEncoderState* s, size_t* available_in, const uint8_t** next_in,\n    size_t* available_out, uint8_t** next_out, size_t* total_out) {\n  if (*available_in > (1u << 24)) return BROTLI_FALSE;\n  /* Switch to metadata block workflow, if required. */\n  if (s->stream_state_ == BROTLI_STREAM_PROCESSING) {\n    s->remaining_metadata_bytes_ = (uint32_t)*available_in;\n    s->stream_state_ = BROTLI_STREAM_METADATA_HEAD;\n  }\n  if (s->stream_state_ != BROTLI_STREAM_METADATA_HEAD &&\n      s->stream_state_ != BROTLI_STREAM_METADATA_BODY) {\n    return BROTLI_FALSE;\n  }\n\n  while (BROTLI_TRUE) {\n    if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {\n      continue;\n    }\n    if (s->available_out_ != 0) break;\n\n    if (s->input_pos_ != s->last_flush_pos_) {\n      BROTLI_BOOL result = EncodeData(s, BROTLI_FALSE, BROTLI_TRUE,\n          &s->available_out_, &s->next_out_);\n      if (!result) return BROTLI_FALSE;\n      continue;\n    }\n\n    if (s->stream_state_ == BROTLI_STREAM_METADATA_HEAD) {\n      s->next_out_ = s->tiny_buf_.u8;\n      s->available_out_ =\n          WriteMetadataHeader(s, s->remaining_metadata_bytes_, s->next_out_);\n      s->stream_state_ = BROTLI_STREAM_METADATA_BODY;\n      continue;\n    } else {\n      /* Exit workflow only when there is no more input and no more output.\n         Otherwise client may continue producing empty metadata blocks. */\n      if (s->remaining_metadata_bytes_ == 0) {\n        s->remaining_metadata_bytes_ = BROTLI_UINT32_MAX;\n        s->stream_state_ = BROTLI_STREAM_PROCESSING;\n        break;\n      }\n      if (*available_out) {\n        /* Directly copy input to output. */\n        uint32_t copy = (uint32_t)BROTLI_MIN(\n            size_t, s->remaining_metadata_bytes_, *available_out);\n        memcpy(*next_out, *next_in, copy);\n        *next_in += copy;\n        *available_in -= copy;\n        s->total_in_ += copy;  /* not actually data input, though */\n        s->remaining_metadata_bytes_ -= copy;\n        *next_out += copy;\n        *available_out -= copy;\n      } else {\n        /* This guarantees progress in \"TakeOutput\" workflow. */\n        uint32_t copy = BROTLI_MIN(uint32_t, s->remaining_metadata_bytes_, 16);\n        s->next_out_ = s->tiny_buf_.u8;\n        memcpy(s->next_out_, *next_in, copy);\n        *next_in += copy;\n        *available_in -= copy;\n        s->total_in_ += copy;  /* not actually data input, though */\n        s->remaining_metadata_bytes_ -= copy;\n        s->available_out_ = copy;\n      }\n      continue;\n    }\n  }\n\n  return BROTLI_TRUE;\n}\n\nstatic void UpdateSizeHint(BrotliEncoderState* s, size_t available_in) {\n  if (s->params.size_hint == 0) {\n    uint64_t delta = UnprocessedInputSize(s);\n    uint64_t tail = available_in;\n    uint32_t limit = 1u << 30;\n    uint32_t total;\n    if ((delta >= limit) || (tail >= limit) || ((delta + tail) >= limit)) {\n      total = limit;\n    } else {\n      total = (uint32_t)(delta + tail);\n    }\n    s->params.size_hint = total;\n  }\n}\n\nBROTLI_BOOL BrotliEncoderCompressStream(\n    BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_in,\n    const uint8_t** next_in, size_t* available_out, uint8_t** next_out,\n    size_t* total_out) {\n  if (!EnsureInitialized(s)) return BROTLI_FALSE;\n\n  /* Unfinished metadata block; check requirements. */\n  if (s->remaining_metadata_bytes_ != BROTLI_UINT32_MAX) {\n    if (*available_in != s->remaining_metadata_bytes_) return BROTLI_FALSE;\n    if (op != BROTLI_OPERATION_EMIT_METADATA) return BROTLI_FALSE;\n  }\n\n  if (op == BROTLI_OPERATION_EMIT_METADATA) {\n    UpdateSizeHint(s, 0);  /* First data metablock might be emitted here. */\n    return ProcessMetadata(\n        s, available_in, next_in, available_out, next_out, total_out);\n  }\n\n  if (s->stream_state_ == BROTLI_STREAM_METADATA_HEAD ||\n      s->stream_state_ == BROTLI_STREAM_METADATA_BODY) {\n    return BROTLI_FALSE;\n  }\n\n  if (s->stream_state_ != BROTLI_STREAM_PROCESSING && *available_in != 0) {\n    return BROTLI_FALSE;\n  }\n  if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||\n      s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {\n    return BrotliEncoderCompressStreamFast(s, op, available_in, next_in,\n        available_out, next_out, total_out);\n  }\n  while (BROTLI_TRUE) {\n    size_t remaining_block_size = RemainingInputBlockSize(s);\n    /* Shorten input to flint size. */\n    if (s->flint_ >= 0 && remaining_block_size > (size_t)s->flint_) {\n      remaining_block_size = (size_t)s->flint_;\n    }\n\n    if (remaining_block_size != 0 && *available_in != 0) {\n      size_t copy_input_size =\n          BROTLI_MIN(size_t, remaining_block_size, *available_in);\n      CopyInputToRingBuffer(s, copy_input_size, *next_in);\n      *next_in += copy_input_size;\n      *available_in -= copy_input_size;\n      s->total_in_ += copy_input_size;\n      if (s->flint_ > 0) s->flint_ = (int8_t)(s->flint_ - (int)copy_input_size);\n      continue;\n    }\n\n    if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {\n      /* Exit the \"emit flint\" workflow. */\n      if (s->flint_ == BROTLI_FLINT_WAITING_FOR_FLUSHING) {\n        CheckFlushComplete(s);\n        if (s->stream_state_ == BROTLI_STREAM_PROCESSING) {\n          s->flint_ = BROTLI_FLINT_DONE;\n        }\n      }\n      continue;\n    }\n\n    /* Compress data only when internal output buffer is empty, stream is not\n       finished and there is no pending flush request. */\n    if (s->available_out_ == 0 &&\n        s->stream_state_ == BROTLI_STREAM_PROCESSING) {\n      if (remaining_block_size == 0 || op != BROTLI_OPERATION_PROCESS) {\n        BROTLI_BOOL is_last = TO_BROTLI_BOOL(\n            (*available_in == 0) && op == BROTLI_OPERATION_FINISH);\n        BROTLI_BOOL force_flush = TO_BROTLI_BOOL(\n            (*available_in == 0) && op == BROTLI_OPERATION_FLUSH);\n        BROTLI_BOOL result;\n        /* Force emitting (uncompressed) piece containing flint. */\n        if (!is_last && s->flint_ == 0) {\n          s->flint_ = BROTLI_FLINT_WAITING_FOR_FLUSHING;\n          force_flush = BROTLI_TRUE;\n        }\n        UpdateSizeHint(s, *available_in);\n        result = EncodeData(s, is_last, force_flush,\n            &s->available_out_, &s->next_out_);\n        if (!result) return BROTLI_FALSE;\n        if (force_flush) s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;\n        if (is_last) s->stream_state_ = BROTLI_STREAM_FINISHED;\n        continue;\n      }\n    }\n    break;\n  }\n  CheckFlushComplete(s);\n  return BROTLI_TRUE;\n}\n\nBROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* s) {\n  return TO_BROTLI_BOOL(s->stream_state_ == BROTLI_STREAM_FINISHED &&\n      !BrotliEncoderHasMoreOutput(s));\n}\n\nBROTLI_BOOL BrotliEncoderHasMoreOutput(BrotliEncoderState* s) {\n  return TO_BROTLI_BOOL(s->available_out_ != 0);\n}\n\nconst uint8_t* BrotliEncoderTakeOutput(BrotliEncoderState* s, size_t* size) {\n  size_t consumed_size = s->available_out_;\n  uint8_t* result = s->next_out_;\n  if (*size) {\n    consumed_size = BROTLI_MIN(size_t, *size, s->available_out_);\n  }\n  if (consumed_size) {\n    s->next_out_ += consumed_size;\n    s->available_out_ -= consumed_size;\n    s->total_out_ += consumed_size;\n    CheckFlushComplete(s);\n    *size = consumed_size;\n  } else {\n    *size = 0;\n    result = 0;\n  }\n  return result;\n}\n\nuint32_t BrotliEncoderVersion(void) {\n  return BROTLI_VERSION;\n}\n\nBrotliEncoderPreparedDictionary* BrotliEncoderPrepareDictionary(\n    BrotliSharedDictionaryType type, size_t size,\n    const uint8_t data[BROTLI_ARRAY_PARAM(size)], int quality,\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {\n  ManagedDictionary* managed_dictionary = NULL;\n  BROTLI_BOOL type_is_known = BROTLI_FALSE;\n  type_is_known |= (type == BROTLI_SHARED_DICTIONARY_RAW);\n#if defined(BROTLI_EXPERIMENTAL)\n  type_is_known |= (type == BROTLI_SHARED_DICTIONARY_SERIALIZED);\n#endif  /* BROTLI_EXPERIMENTAL */\n  if (!type_is_known) {\n    return NULL;\n  }\n  managed_dictionary =\n      BrotliCreateManagedDictionary(alloc_func, free_func, opaque);\n  if (managed_dictionary == NULL) {\n    return NULL;\n  }\n  if (type == BROTLI_SHARED_DICTIONARY_RAW) {\n    managed_dictionary->dictionary = (uint32_t*)CreatePreparedDictionary(\n        &managed_dictionary->memory_manager_, data, size);\n  }\n#if defined(BROTLI_EXPERIMENTAL)\n  if (type == BROTLI_SHARED_DICTIONARY_SERIALIZED) {\n    SharedEncoderDictionary* dict = (SharedEncoderDictionary*)BrotliAllocate(\n        &managed_dictionary->memory_manager_, sizeof(SharedEncoderDictionary));\n    managed_dictionary->dictionary = (uint32_t*)dict;\n    if (dict != NULL) {\n      BROTLI_BOOL ok = BrotliInitCustomSharedEncoderDictionary(\n          &managed_dictionary->memory_manager_, data, size, quality, dict);\n      if (!ok) {\n        BrotliFree(&managed_dictionary->memory_manager_, dict);\n        managed_dictionary->dictionary = NULL;\n      }\n    }\n  }\n#else  /* BROTLI_EXPERIMENTAL */\n  (void)quality;\n#endif  /* BROTLI_EXPERIMENTAL */\n  if (managed_dictionary->dictionary == NULL) {\n    BrotliDestroyManagedDictionary(managed_dictionary);\n    return NULL;\n  }\n  return (BrotliEncoderPreparedDictionary*)managed_dictionary;\n}\n\nvoid BROTLI_COLD BrotliEncoderDestroyPreparedDictionary(\n    BrotliEncoderPreparedDictionary* dictionary) {\n  ManagedDictionary* dict = (ManagedDictionary*)dictionary;\n  if (!dictionary) return;\n  /* First field of dictionary structs. */\n  /* Only managed dictionaries are eligible for destruction by this method. */\n  if (dict->magic != kManagedDictionaryMagic) {\n    return;\n  }\n  if (dict->dictionary == NULL) {\n    /* This should never ever happen. */\n  } else if (*dict->dictionary == kLeanPreparedDictionaryMagic) {\n    DestroyPreparedDictionary(\n        &dict->memory_manager_, (PreparedDictionary*)dict->dictionary);\n  } else if (*dict->dictionary == kSharedDictionaryMagic) {\n    BrotliCleanupSharedEncoderDictionary(&dict->memory_manager_,\n        (SharedEncoderDictionary*)dict->dictionary);\n    BrotliFree(&dict->memory_manager_, dict->dictionary);\n  } else {\n    /* There is also kPreparedDictionaryMagic, but such instances should be\n     * constructed and destroyed by different means. */\n  }\n  dict->dictionary = NULL;\n  BrotliDestroyManagedDictionary(dict);\n}\n\nBROTLI_BOOL BROTLI_COLD BrotliEncoderAttachPreparedDictionary(\n    BrotliEncoderState* state,\n    const BrotliEncoderPreparedDictionary* dictionary) {\n  /* First field of dictionary structs */\n  const BrotliEncoderPreparedDictionary* dict = dictionary;\n  uint32_t magic = *((const uint32_t*)dict);\n  SharedEncoderDictionary* current = NULL;\n  if (magic == kManagedDictionaryMagic) {\n    /* Unwrap managed dictionary. */\n    ManagedDictionary* managed_dictionary = (ManagedDictionary*)dict;\n    magic = *managed_dictionary->dictionary;\n    dict = (BrotliEncoderPreparedDictionary*)managed_dictionary->dictionary;\n  }\n  current = &state->params.dictionary;\n  if (magic == kPreparedDictionaryMagic ||\n      magic == kLeanPreparedDictionaryMagic) {\n    const PreparedDictionary* prepared = (const PreparedDictionary*)dict;\n    if (!AttachPreparedDictionary(&current->compound, prepared)) {\n      return BROTLI_FALSE;\n    }\n  } else if (magic == kSharedDictionaryMagic) {\n    const SharedEncoderDictionary* attached =\n        (const SharedEncoderDictionary*)dict;\n    BROTLI_BOOL was_default = !current->contextual.context_based &&\n        current->contextual.num_dictionaries == 1 &&\n        current->contextual.dict[0]->hash_table_words ==\n        kStaticDictionaryHashWords &&\n        current->contextual.dict[0]->hash_table_lengths ==\n        kStaticDictionaryHashLengths;\n    BROTLI_BOOL new_default = !attached->contextual.context_based &&\n        attached->contextual.num_dictionaries == 1 &&\n        attached->contextual.dict[0]->hash_table_words ==\n        kStaticDictionaryHashWords &&\n        attached->contextual.dict[0]->hash_table_lengths ==\n        kStaticDictionaryHashLengths;\n    size_t i;\n    if (state->is_initialized_) return BROTLI_FALSE;\n    current->max_quality =\n        BROTLI_MIN(int, current->max_quality, attached->max_quality);\n    for (i = 0; i < attached->compound.num_chunks; i++) {\n      if (!AttachPreparedDictionary(&current->compound,\n          attached->compound.chunks[i])) {\n        return BROTLI_FALSE;\n      }\n    }\n    if (!new_default) {\n      if (!was_default) return BROTLI_FALSE;\n      /* Copy by value, but then set num_instances_ to 0 because their memory\n      is managed by attached, not by current */\n      current->contextual = attached->contextual;\n      current->contextual.num_instances_ = 0;\n    }\n  } else {\n    return BROTLI_FALSE;\n  }\n  return BROTLI_TRUE;\n}\n\nsize_t BROTLI_COLD BrotliEncoderEstimatePeakMemoryUsage(int quality, int lgwin,\n                                                        size_t input_size) {\n  BrotliEncoderParams params;\n  size_t memory_manager_slots = BROTLI_ENCODER_MEMORY_MANAGER_SLOTS;\n  size_t memory_manager_size = memory_manager_slots * sizeof(void*);\n  BrotliEncoderInitParams(&params);\n  params.quality = quality;\n  params.lgwin = lgwin;\n  params.size_hint = input_size;\n  params.large_window = lgwin > BROTLI_MAX_WINDOW_BITS;\n  SanitizeParams(&params);\n  params.lgblock = ComputeLgBlock(&params);\n  ChooseHasher(&params, &params.hasher);\n  if (params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||\n      params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {\n    size_t state_size = sizeof(BrotliEncoderState);\n    size_t block_size = BROTLI_MIN(size_t, input_size, ((size_t)1ul << params.lgwin));\n    size_t hash_table_size =\n        HashTableSize(MaxHashTableSize(params.quality), block_size);\n    size_t hash_size =\n        (hash_table_size < (1u << 10)) ? 0 : sizeof(int) * hash_table_size;\n    size_t cmdbuf_size = params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY ?\n        5 * BROTLI_MIN(size_t, block_size, 1ul << 17) : 0;\n    if (params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {\n      state_size += sizeof(BrotliOnePassArena);\n    } else {\n      state_size += sizeof(BrotliTwoPassArena);\n    }\n    return hash_size + cmdbuf_size + state_size;\n  } else {\n    size_t short_ringbuffer_size = (size_t)1 << params.lgblock;\n    int ringbuffer_bits = ComputeRbBits(&params);\n    size_t ringbuffer_size = input_size < short_ringbuffer_size ?\n        input_size : ((size_t)1u << ringbuffer_bits) + short_ringbuffer_size;\n    size_t hash_size[4] = {0};\n    size_t metablock_size =\n        BROTLI_MIN(size_t, input_size, MaxMetablockSize(&params));\n    size_t inputblock_size =\n        BROTLI_MIN(size_t, input_size, (size_t)1 << params.lgblock);\n    size_t cmdbuf_size = metablock_size * 2 + inputblock_size * 6;\n    size_t outbuf_size = metablock_size * 2 + 503;\n    size_t histogram_size = 0;\n    HasherSize(&params, BROTLI_TRUE, input_size, hash_size);\n    if (params.quality < MIN_QUALITY_FOR_BLOCK_SPLIT) {\n      cmdbuf_size = BROTLI_MIN(size_t, cmdbuf_size,\n          MAX_NUM_DELAYED_SYMBOLS * sizeof(Command) + inputblock_size * 12);\n    }\n    if (params.quality >= MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING) {\n      /* Only a very rough estimation, based on enwik8. */\n      histogram_size = 200 << 20;\n    } else if (params.quality >= MIN_QUALITY_FOR_BLOCK_SPLIT) {\n      size_t literal_histograms =\n          BROTLI_MIN(size_t, metablock_size / 6144, 256);\n      size_t command_histograms =\n          BROTLI_MIN(size_t, metablock_size / 6144, 256);\n      size_t distance_histograms =\n          BROTLI_MIN(size_t, metablock_size / 6144, 256);\n      histogram_size = literal_histograms * sizeof(HistogramLiteral) +\n                       command_histograms * sizeof(HistogramCommand) +\n                       distance_histograms * sizeof(HistogramDistance);\n    }\n    return (memory_manager_size + ringbuffer_size +\n            hash_size[0] + hash_size[1] + hash_size[2] + hash_size[3] +\n            cmdbuf_size +\n            outbuf_size +\n            histogram_size);\n  }\n}\nsize_t BROTLI_COLD BrotliEncoderGetPreparedDictionarySize(\n    const BrotliEncoderPreparedDictionary* prepared_dictionary) {\n  /* First field of dictionary structs */\n  const BrotliEncoderPreparedDictionary* prepared = prepared_dictionary;\n  uint32_t magic = *((const uint32_t*)prepared);\n  size_t overhead = 0;\n  if (magic == kManagedDictionaryMagic) {\n    const ManagedDictionary* managed = (const ManagedDictionary*)prepared;\n    overhead = sizeof(ManagedDictionary);\n    magic = *managed->dictionary;\n    prepared = (const BrotliEncoderPreparedDictionary*)managed->dictionary;\n  }\n\n  if (magic == kPreparedDictionaryMagic) {\n    const PreparedDictionary* dictionary =\n        (const PreparedDictionary*)prepared;\n    /* Keep in sync with step 3 of CreatePreparedDictionary */\n    return sizeof(PreparedDictionary) + dictionary->source_size +\n        (sizeof(uint32_t) << dictionary->slot_bits) +\n        (sizeof(uint16_t) << dictionary->bucket_bits) +\n        (sizeof(uint32_t) * dictionary->num_items) + overhead;\n  } else if (magic == kLeanPreparedDictionaryMagic) {\n    const PreparedDictionary* dictionary =\n        (const PreparedDictionary*)prepared;\n    /* Keep in sync with step 3 of CreatePreparedDictionary */\n    return sizeof(PreparedDictionary) + sizeof(uint8_t*) +\n        (sizeof(uint32_t) << dictionary->slot_bits) +\n        (sizeof(uint16_t) << dictionary->bucket_bits) +\n        (sizeof(uint32_t) * dictionary->num_items) + overhead;\n  } else if (magic == kSharedDictionaryMagic) {\n    const SharedEncoderDictionary* dictionary =\n        (const SharedEncoderDictionary*)prepared;\n    const CompoundDictionary* compound = &dictionary->compound;\n    const ContextualEncoderDictionary* contextual = &dictionary->contextual;\n    size_t result = sizeof(*dictionary);\n    size_t i;\n    size_t num_instances;\n    const BrotliEncoderDictionary* instances;\n    for (i = 0; i < compound->num_prepared_instances_; i++) {\n      size_t size = BrotliEncoderGetPreparedDictionarySize(\n          (const BrotliEncoderPreparedDictionary*)\n          compound->prepared_instances_[i]);\n      if (!size) return 0;  /* error */\n      result += size;\n    }\n    if (contextual->context_based) {\n      num_instances = contextual->num_instances_;\n      instances = contextual->instances_;\n      result += sizeof(*instances) * num_instances;\n    } else {\n      num_instances = 1;\n      instances = &contextual->instance_;\n    }\n    for (i = 0; i < num_instances; i++) {\n      const BrotliEncoderDictionary* dict = &instances[i];\n      result += dict->trie.pool_capacity * sizeof(BrotliTrieNode);\n      if (dict->hash_table_data_words_) {\n        result += sizeof(kStaticDictionaryHashWords);\n      }\n      if (dict->hash_table_data_lengths_) {\n        result += sizeof(kStaticDictionaryHashLengths);\n      }\n      if (dict->buckets_data_) {\n        result += sizeof(*dict->buckets_data_) * dict->buckets_alloc_size_;\n      }\n      if (dict->dict_words_data_) {\n        result += sizeof(*dict->dict_words) * dict->dict_words_alloc_size_;\n      }\n      if (dict->words_instance_) {\n        result += sizeof(*dict->words_instance_);\n        /* data_size not added here: it is never allocated by the\n           SharedEncoderDictionary, instead it always points to the file\n           already loaded in memory. So if the caller wants to include\n           this memory as well, add the size of the loaded dictionary\n           file to this. */\n      }\n    }\n    return result + overhead;\n  }\n  return 0;  /* error */\n}\n\n#if defined(BROTLI_TEST)\nsize_t BrotliMakeUncompressedStreamForTest(const uint8_t*, size_t, uint8_t*);\nsize_t BrotliMakeUncompressedStreamForTest(\n    const uint8_t* input, size_t input_size, uint8_t* output) {\n  return MakeUncompressedStream(input, input_size, output);\n}\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/encoder_dict.c",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"encoder_dict.h\"\n\n#include \"../common/dictionary.h\"\n#include \"../common/platform.h\"\n#include <brotli/shared_dictionary.h>\n#include \"../common/shared_dictionary_internal.h\"\n#include \"../common/transform.h\"\n#include <brotli/encode.h>\n#include \"compound_dictionary.h\"\n#include \"dictionary_hash.h\"\n#include \"hash_base.h\"\n#include \"hash.h\"\n#include \"memory.h\"\n#include \"quality.h\"\n#include \"static_dict_lut.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define NUM_HASH_BITS 15u\n#define NUM_HASH_BUCKETS (1u << NUM_HASH_BITS)\n\nstatic void BrotliTrieInit(BrotliTrie* trie) {\n  trie->pool_capacity = 0;\n  trie->pool_size = 0;\n  trie->pool = 0;\n\n  /* Set up the root node */\n  trie->root.single = 0;\n  trie->root.len_ = 0;\n  trie->root.idx_ = 0;\n  trie->root.sub = 0;\n}\n\nstatic void BrotliTrieFree(MemoryManager* m, BrotliTrie* trie) {\n  BrotliFree(m, trie->pool);\n}\n\n/* Initializes to RFC 7932 static dictionary / transforms. */\nstatic void InitEncoderDictionary(BrotliEncoderDictionary* dict) {\n  dict->words = BrotliGetDictionary();\n  dict->num_transforms = (uint32_t)BrotliGetTransforms()->num_transforms;\n\n  dict->hash_table_words = kStaticDictionaryHashWords;\n  dict->hash_table_lengths = kStaticDictionaryHashLengths;\n  dict->buckets = kStaticDictionaryBuckets;\n  dict->dict_words = kStaticDictionaryWords;\n\n  dict->cutoffTransformsCount = kCutoffTransformsCount;\n  dict->cutoffTransforms = kCutoffTransforms;\n\n  dict->parent = 0;\n\n  dict->hash_table_data_words_ = 0;\n  dict->hash_table_data_lengths_ = 0;\n  dict->buckets_alloc_size_ = 0;\n  dict->buckets_data_ = 0;\n  dict->dict_words_alloc_size_ = 0;\n  dict->dict_words_data_ = 0;\n  dict->words_instance_ = 0;\n  dict->has_words_heavy = BROTLI_FALSE;\n  BrotliTrieInit(&dict->trie);\n}\n\nstatic void BrotliDestroyEncoderDictionary(MemoryManager* m,\n    BrotliEncoderDictionary* dict) {\n  BrotliFree(m, dict->hash_table_data_words_);\n  BrotliFree(m, dict->hash_table_data_lengths_);\n  BrotliFree(m, dict->buckets_data_);\n  BrotliFree(m, dict->dict_words_data_);\n  BrotliFree(m, dict->words_instance_);\n  BrotliTrieFree(m, &dict->trie);\n}\n\n#if defined(BROTLI_EXPERIMENTAL)\n/* Word length must be at least 4 bytes */\nstatic uint32_t Hash(const uint8_t* data, int bits) {\n  uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return h >> (32 - bits);\n}\n\n/* Theoretical max possible word size after transform */\n#define kTransformedBufferSize \\\n    (256 + 256 + SHARED_BROTLI_MAX_DICTIONARY_WORD_LENGTH)\n\n/* To be safe buffer must have at least kTransformedBufferSize */\nstatic void TransformedDictionaryWord(uint32_t word_idx, int len, int transform,\n    const BrotliTransforms* transforms,\n    const BrotliEncoderDictionary* dict,\n    uint8_t* buffer, size_t* size) {\n  const uint8_t* dict_word = &dict->words->data[\n      dict->words->offsets_by_length[len] + (uint32_t)len * word_idx];\n  *size = (size_t)BrotliTransformDictionaryWord(buffer, dict_word, len,\n      transforms, transform);\n}\n\nstatic DictWord MakeDictWord(uint8_t len, uint8_t transform, uint16_t idx) {\n  DictWord result;\n  result.len = len;\n  result.transform = transform;\n  result.idx = idx;\n  return result;\n}\n\nstatic uint32_t BrotliTrieAlloc(MemoryManager* m, size_t num, BrotliTrie* trie,\n                                BrotliTrieNode** keep) {\n  uint32_t result;\n  uint32_t keep_index = 0;\n  if (keep && *keep != &trie->root) {\n    /* Optional node to keep, since address may change after re-allocating */\n    keep_index = (uint32_t)(*keep - trie->pool);\n  }\n  if (trie->pool_size == 0) {\n    /* Have a placeholder node in the front. We do not want the result to be 0,\n       it must be at least 1, 0 represents \"null pointer\" */\n    trie->pool_size = 1;\n  }\n  BROTLI_ENSURE_CAPACITY(m, BrotliTrieNode, trie->pool, trie->pool_capacity,\n                         trie->pool_size + num);\n  if (BROTLI_IS_OOM(m)) return 0;\n  /* Init the new nodes to empty */\n  memset(trie->pool + trie->pool_size, 0, sizeof(*trie->pool) * num);\n  result = (uint32_t)trie->pool_size;\n  trie->pool_size += num;\n  if (keep && *keep != &trie->root) {\n    *keep = trie->pool + keep_index;\n  }\n  return result;\n}\n\n/**\n * len and idx: payload for last node\n * word, size: the string\n * index: position in the string\n */\nstatic BROTLI_BOOL BrotliTrieNodeAdd(MemoryManager* m, uint8_t len,\n    uint32_t idx, const uint8_t* word, size_t size, int index,\n    BrotliTrieNode* node, BrotliTrie* trie) {\n  BrotliTrieNode* child = 0;\n  uint8_t c;\n  if ((size_t)index == size) {\n    if (!node->len_ || idx < node->idx_) {\n      node->len_ = len;\n      node->idx_ = idx;\n    }\n    return BROTLI_TRUE;\n  }\n  c = word[index];\n  if (node->single && c != node->c) {\n    BrotliTrieNode old = trie->pool[node->sub];\n    uint32_t new_nodes = BrotliTrieAlloc(m, 32, trie, &node);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    node->single = 0;\n    node->sub = new_nodes;\n    trie->pool[node->sub + (node->c >> 4)].sub = new_nodes + 16;\n    trie->pool[trie->pool[node->sub + (node->c >> 4)].sub + (node->c & 15)] =\n        old;\n  }\n  if (!node->sub) {\n    uint32_t new_node = BrotliTrieAlloc(m, 1, trie, &node);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    node->single = 1;\n    node->c = c;\n    node->sub = new_node;\n  }\n  if (node->single) {\n    child = &trie->pool[node->sub];\n  } else {\n    if (!trie->pool[node->sub + (c >> 4)].sub) {\n      uint32_t new_nodes = BrotliTrieAlloc(m, 16, trie, &node);\n      if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n      trie->pool[node->sub + (c >> 4)].sub = new_nodes;\n    }\n    child = &trie->pool[trie->pool[node->sub + (c >> 4)].sub + (c & 15)];\n  }\n  return BrotliTrieNodeAdd(m, len, idx, word, size, index + 1, child, trie);\n}\n\nstatic BROTLI_BOOL BrotliTrieAdd(MemoryManager* m, uint8_t len, uint32_t idx,\n                          const uint8_t* word, size_t size, BrotliTrie* trie) {\n  return BrotliTrieNodeAdd(m, len, idx, word, size, 0, &trie->root, trie);\n}\n\nconst BrotliTrieNode* BrotliTrieSub(const BrotliTrie* trie,\n                                    const BrotliTrieNode* node, uint8_t c) {\n  BrotliTrieNode* temp_node;\n  if (node->single) {\n    if (node->c == c) return &trie->pool[node->sub];\n    return 0;\n  }\n  if (!node->sub) return 0;\n  temp_node = &trie->pool[node->sub + (c >> 4)];\n  if (!temp_node->sub) return 0;\n  return &trie->pool[temp_node->sub + (c & 15)];\n}\n\nstatic const BrotliTrieNode* BrotliTrieFind(const BrotliTrie* trie,\n                                            const uint8_t* word, size_t size) {\n  const BrotliTrieNode* node = &trie->root;\n  size_t i;\n  for (i = 0; i < size; i++) {\n    node = BrotliTrieSub(trie, node, word[i]);\n    if (!node) return 0;\n  }\n  return node;\n}\n\nstatic BROTLI_BOOL BuildDictionaryLut(MemoryManager* m,\n    const BrotliTransforms* transforms,\n    BrotliEncoderDictionary* dict) {\n  uint32_t i;\n  DictWord* dict_words;\n  uint16_t* buckets;\n  DictWord** words_by_hash;\n  size_t* words_by_hash_size;\n  size_t* words_by_hash_capacity;\n  BrotliTrie dedup;\n  uint8_t word[kTransformedBufferSize];\n  size_t word_size;\n  size_t total = 0;\n  uint8_t l;\n  uint16_t idx;\n\n  BrotliTrieInit(&dedup);\n\n  words_by_hash = (DictWord**)BrotliAllocate(m,\n      sizeof(*words_by_hash) * NUM_HASH_BUCKETS);\n  words_by_hash_size = (size_t*)BrotliAllocate(m,\n      sizeof(*words_by_hash_size) * NUM_HASH_BUCKETS);\n  words_by_hash_capacity = (size_t*)BrotliAllocate(m,\n      sizeof(*words_by_hash_capacity) * NUM_HASH_BUCKETS);\n  if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n  memset(words_by_hash, 0, sizeof(*words_by_hash) * NUM_HASH_BUCKETS);\n  memset(words_by_hash_size, 0, sizeof(*words_by_hash_size) * NUM_HASH_BUCKETS);\n  memset(words_by_hash_capacity, 0,\n         sizeof(*words_by_hash_capacity) * NUM_HASH_BUCKETS);\n\n  if (transforms->num_transforms > 0) {\n    for (l = SHARED_BROTLI_MIN_DICTIONARY_WORD_LENGTH;\n        l <= SHARED_BROTLI_MAX_DICTIONARY_WORD_LENGTH; ++l) {\n      uint16_t n = dict->words->size_bits_by_length[l] ?\n          (uint16_t)(1 << dict->words->size_bits_by_length[l]) : 0u;\n      for (idx = 0; idx < n; ++idx) {\n        uint32_t key;\n        /* First transform (usually identity) */\n        TransformedDictionaryWord(idx, l, 0, transforms, dict, word,\n                                  &word_size);\n        /* Cannot hash words smaller than 4 bytes */\n        if (word_size < 4) {\n          /* Break instead of continue, all next words of this length will have\n             same length after transform */\n          break;\n        }\n        if (!BrotliTrieAdd(m, 0, idx, word, word_size, &dedup)) {\n          return BROTLI_FALSE;\n        }\n        key = Hash(word, NUM_HASH_BITS);\n        BROTLI_ENSURE_CAPACITY_APPEND(m, DictWord, words_by_hash[key],\n            words_by_hash_capacity[key], words_by_hash_size[key],\n            MakeDictWord(l, 0, idx));\n        ++total;\n      }\n    }\n  }\n\n  /* These LUT transforms only supported if no custom transforms. This is\n     ok, we will use the heavy trie instead. */\n  if (transforms == BrotliGetTransforms()) {\n    for (l = SHARED_BROTLI_MIN_DICTIONARY_WORD_LENGTH;\n        l <= SHARED_BROTLI_MAX_DICTIONARY_WORD_LENGTH; ++l) {\n      uint16_t n = dict->words->size_bits_by_length[l] ?\n          (uint16_t)(1 << dict->words->size_bits_by_length[l]) : 0u;\n      for (idx = 0; idx < n; ++idx) {\n        int k;\n        BROTLI_BOOL is_ascii = BROTLI_TRUE;\n        size_t offset = dict->words->offsets_by_length[l] + (size_t)l * idx;\n        const uint8_t* data = &dict->words->data[offset];\n        for (k = 0; k < l; ++k) {\n          if (data[k] >= 128) is_ascii = BROTLI_FALSE;\n        }\n        if (data[0] < 128) {\n          int transform = 9;  /* {empty, uppercase first, empty} */\n          uint32_t ix = idx + (uint32_t)transform * n;\n          const BrotliTrieNode* it;\n          TransformedDictionaryWord(idx, l, transform, transforms,\n                                   dict, word, &word_size);\n          it = BrotliTrieFind(&dedup, word, word_size);\n          if (!it || it->idx_ > ix) {\n            uint32_t key = Hash(word, NUM_HASH_BITS);\n            if (!BrotliTrieAdd(m, 0, ix, word, word_size, &dedup)) {\n              return BROTLI_FALSE;\n            }\n            BROTLI_ENSURE_CAPACITY_APPEND(m, DictWord, words_by_hash[key],\n                words_by_hash_capacity[key], words_by_hash_size[key],\n                MakeDictWord(l, BROTLI_TRANSFORM_UPPERCASE_FIRST, idx));\n            ++total;\n          }\n        }\n        if (is_ascii) {\n          int transform = 44;  /* {empty, uppercase all, empty} */\n          uint32_t ix = idx + (uint32_t)transform * n;\n          const BrotliTrieNode* it;\n          TransformedDictionaryWord(idx, l, transform, transforms,\n                                    dict, word, &word_size);\n          it = BrotliTrieFind(&dedup, word, word_size);\n          if (!it || it->idx_ > ix) {\n            uint32_t key = Hash(word, NUM_HASH_BITS);\n            if (!BrotliTrieAdd(m, 0, ix, word, word_size, &dedup)) {\n              return BROTLI_FALSE;\n            }\n            BROTLI_ENSURE_CAPACITY_APPEND(m, DictWord, words_by_hash[key],\n                words_by_hash_capacity[key], words_by_hash_size[key],\n                MakeDictWord(l, BROTLI_TRANSFORM_UPPERCASE_ALL, idx));\n            ++total;\n          }\n        }\n      }\n    }\n  }\n\n  dict_words = (DictWord*)BrotliAllocate(m,\n      sizeof(*dict->dict_words) * (total + 1));\n  buckets = (uint16_t*)BrotliAllocate(m,\n      sizeof(*dict->buckets) * NUM_HASH_BUCKETS);\n  if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n  dict->dict_words_alloc_size_ = total + 1;\n  dict->dict_words = dict->dict_words_data_ = dict_words;\n  dict->buckets_alloc_size_ = NUM_HASH_BUCKETS;\n  dict->buckets = dict->buckets_data_ = buckets;\n\n  /* Unused; makes offsets start from 1. */\n  dict_words[0] = MakeDictWord(0, 0, 0);\n  total = 1;\n  for (i = 0; i < NUM_HASH_BUCKETS; ++i) {\n    size_t num_words = words_by_hash_size[i];\n    if (num_words > 0) {\n      buckets[i] = (uint16_t)(total);\n      memcpy(&dict_words[total], &words_by_hash[i][0],\n          sizeof(dict_words[0]) * num_words);\n      total += num_words;\n      dict_words[total - 1].len |= 0x80;\n    } else {\n      buckets[i] = 0;\n    }\n  }\n\n  for (i = 0; i < NUM_HASH_BUCKETS; ++i) {\n    BrotliFree(m, words_by_hash[i]);\n  }\n  BrotliFree(m, words_by_hash);\n  BrotliFree(m, words_by_hash_size);\n  BrotliFree(m, words_by_hash_capacity);\n  BrotliTrieFree(m, &dedup);\n\n  return BROTLI_TRUE;\n}\n\nstatic void BuildDictionaryHashTable(uint16_t* hash_table_words,\n    uint8_t* hash_table_lengths, const BrotliDictionary* dict) {\n  int j, len;\n  /* The order of the loops is such that in case of collision, words with\n     shorter length are preferred, and in case of same length, words with\n     smaller index. There is only a single word per bucket. */\n  /* TODO(lode): consider adding optional user-supplied frequency_map to use\n     for preferred words instead, this can make the encoder better for\n     quality 9 and below without affecting the decoder */\n  memset(hash_table_words, 0, sizeof(kStaticDictionaryHashWords));\n  memset(hash_table_lengths, 0, sizeof(kStaticDictionaryHashLengths));\n  for (len = SHARED_BROTLI_MAX_DICTIONARY_WORD_LENGTH;\n      len >= SHARED_BROTLI_MIN_DICTIONARY_WORD_LENGTH; --len) {\n    const size_t num_words = dict->size_bits_by_length[len] ?\n        (1u << dict->size_bits_by_length[len]) : 0;\n    for (j = (int)num_words - 1; j >= 0; --j) {\n      size_t offset = dict->offsets_by_length[len] +\n          (size_t)len * (size_t)j;\n      const uint8_t* word = &dict->data[offset];\n      const uint32_t key = Hash(word, 14);\n      int idx = (int)(key << 1) + (len < 8 ? 1 : 0);\n      BROTLI_DCHECK(idx < (int)NUM_HASH_BUCKETS);\n      hash_table_words[idx] = (uint16_t)j;\n      hash_table_lengths[idx] = (uint8_t)len;\n    }\n  }\n}\n\nstatic BROTLI_BOOL GenerateWordsHeavy(MemoryManager* m,\n    const BrotliTransforms* transforms,\n    BrotliEncoderDictionary* dict) {\n  int i, j, l;\n  for (j = (int)transforms->num_transforms - 1; j >= 0 ; --j) {\n    for (l = 0; l < 32; l++) {\n      int num = (int)((1u << dict->words->size_bits_by_length[l]) & ~1u);\n      for (i = 0; i < num; i++) {\n        uint8_t transformed[kTransformedBufferSize];\n        size_t size;\n        TransformedDictionaryWord(\n            (uint32_t)i, l, j, transforms, dict, transformed, &size);\n        if (size < 4) continue;\n        if (!BrotliTrieAdd(m, (uint8_t)l, (uint32_t)(i + num * j),\n            transformed, size, &dict->trie)) {\n          return BROTLI_FALSE;\n        }\n      }\n    }\n  }\n  return BROTLI_TRUE;\n}\n\n/* Computes cutoffTransformsCount (in count) and cutoffTransforms (in data) for\n   the custom transforms, where possible within the limits of the\n   cutoffTransforms encoding. The fast encoder uses this to do fast lookup for\n   transforms that remove the N last characters (OmitLast). */\nstatic void ComputeCutoffTransforms(\n    const BrotliTransforms* transforms,\n    uint32_t* count, uint64_t* data) {\n  int i;\n  /* The encoding in a 64-bit integer of transform N in the data is: (N << 2) +\n     ((cutoffTransforms >> (N * 6)) & 0x3F), so for example the identity\n     transform code must be 0-63, for N=1 the transform code must be 4-67, ...,\n     for N=9 it must be 36-99.\n     TODO(lode): consider a simple flexible uint8_t[10] instead of the uint64_t\n     for the cutoff transforms, so that shared dictionaries can have the\n     OmitLast transforms anywhere without loss. */\n  *count = 0;\n  *data = 0;\n  for (i = 0; i < BROTLI_TRANSFORMS_MAX_CUT_OFF + 1; i++) {\n    int idx = transforms->cutOffTransforms[i];\n    if (idx == -1) break;  /* Not found */\n    if (idx < (i << 2)) break;  /* Too small for the encoding */\n    if (idx >= (i << 2) + 64) break;  /* Too large for the encoding */\n    (*count)++;\n    *data |= (uint64_t)(((uint64_t)idx -\n        ((uint64_t)i << 2u)) << ((uint64_t)i * 6u));\n  }\n}\n\nstatic BROTLI_BOOL ComputeDictionary(MemoryManager* m, int quality,\n    const BrotliTransforms* transforms,\n    BrotliEncoderDictionary* current) {\n  int default_words = current->words == BrotliGetDictionary();\n  int default_transforms = transforms == BrotliGetTransforms();\n\n  if (default_words && default_transforms) {\n    /* hashes are already set to Brotli defaults */\n    return BROTLI_TRUE;\n  }\n\n  current->hash_table_data_words_ = (uint16_t*)BrotliAllocate(\n      m, sizeof(kStaticDictionaryHashWords));\n  current->hash_table_data_lengths_ = (uint8_t*)BrotliAllocate(\n      m, sizeof(kStaticDictionaryHashLengths));\n  if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n  current->hash_table_words = current->hash_table_data_words_;\n  current->hash_table_lengths = current->hash_table_data_lengths_;\n\n  BuildDictionaryHashTable(current->hash_table_data_words_,\n      current->hash_table_data_lengths_, current->words);\n\n  ComputeCutoffTransforms(transforms,\n      &current->cutoffTransformsCount, &current->cutoffTransforms);\n\n  /* Only compute the data for slow encoder if the requested quality is high\n     enough to need it */\n  if (quality >= ZOPFLIFICATION_QUALITY) {\n    if (!BuildDictionaryLut(m, transforms, current)) return BROTLI_FALSE;\n\n    /* For the built-in Brotli transforms, there is a hard-coded function to\n       handle all transforms, but for custom transforms, we use the following\n       large hammer instead */\n    current->has_words_heavy = !default_transforms;\n    if (current->has_words_heavy) {\n      if (!GenerateWordsHeavy(m, transforms, current)) return BROTLI_FALSE;\n    }\n  }\n\n  return BROTLI_TRUE;\n}\n#endif  /* BROTLI_EXPERIMENTAL */\n\nvoid BrotliInitSharedEncoderDictionary(SharedEncoderDictionary* dict) {\n  dict->magic = kSharedDictionaryMagic;\n\n  dict->compound.num_chunks = 0;\n  dict->compound.total_size = 0;\n  dict->compound.chunk_offsets[0] = 0;\n  dict->compound.num_prepared_instances_ = 0;\n\n  dict->contextual.context_based = 0;\n  dict->contextual.num_dictionaries = 1;\n  dict->contextual.instances_ = 0;\n  dict->contextual.num_instances_ = 1;  /* The instance_ field */\n  dict->contextual.dict[0] = &dict->contextual.instance_;\n  InitEncoderDictionary(&dict->contextual.instance_);\n  dict->contextual.instance_.parent = &dict->contextual;\n\n  dict->max_quality = BROTLI_MAX_QUALITY;\n}\n\n#if defined(BROTLI_EXPERIMENTAL)\n/* TODO(eustas): make sure that tooling will warn user if not all the cutoff\n   transforms are available (for low-quality encoder). */\nstatic BROTLI_BOOL InitCustomSharedEncoderDictionary(\n    MemoryManager* m, const BrotliSharedDictionary* decoded_dict,\n    int quality, SharedEncoderDictionary* dict) {\n  ContextualEncoderDictionary* contextual;\n  CompoundDictionary* compound;\n  BrotliEncoderDictionary* instances;\n  int i;\n  BrotliInitSharedEncoderDictionary(dict);\n\n  contextual = &dict->contextual;\n  compound = &dict->compound;\n\n  for (i = 0; i < (int)decoded_dict->num_prefix; i++) {\n    PreparedDictionary* prepared = CreatePreparedDictionary(m,\n        decoded_dict->prefix[i], decoded_dict->prefix_size[i]);\n    AttachPreparedDictionary(compound, prepared);\n    /* remember for cleanup */\n    compound->prepared_instances_[\n        compound->num_prepared_instances_++] = prepared;\n  }\n\n  dict->max_quality = quality;\n  contextual->context_based = decoded_dict->context_based;\n  if (decoded_dict->context_based) {\n    memcpy(contextual->context_map, decoded_dict->context_map,\n        SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS);\n  }\n\n  contextual->num_dictionaries = decoded_dict->num_dictionaries;\n  contextual->num_instances_ = decoded_dict->num_dictionaries;\n  if (contextual->num_instances_ == 1) {\n    instances = &contextual->instance_;\n  } else {\n    contextual->instances_ = (BrotliEncoderDictionary*)\n        BrotliAllocate(m, sizeof(*contextual->instances_) *\n        contextual->num_instances_);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    instances = contextual->instances_;\n  }\n  for (i = 0; i < (int)contextual->num_instances_; i++) {\n    BrotliEncoderDictionary* current = &instances[i];\n    InitEncoderDictionary(current);\n    current->parent = &dict->contextual;\n    if (decoded_dict->words[i] == BrotliGetDictionary()) {\n      current->words = BrotliGetDictionary();\n    } else {\n      current->words_instance_ = (BrotliDictionary*)BrotliAllocate(\n          m, sizeof(BrotliDictionary));\n      if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n      *current->words_instance_ = *decoded_dict->words[i];\n      current->words = current->words_instance_;\n    }\n    current->num_transforms =\n        (uint32_t)decoded_dict->transforms[i]->num_transforms;\n    if (!ComputeDictionary(\n        m, quality, decoded_dict->transforms[i], current)) {\n      return BROTLI_FALSE;\n    }\n\n    contextual->dict[i] = current;\n  }\n\n  return BROTLI_TRUE;  /* success */\n}\n\nBROTLI_BOOL BrotliInitCustomSharedEncoderDictionary(\n    MemoryManager* m, const uint8_t* encoded_dict, size_t size,\n    int quality, SharedEncoderDictionary* dict) {\n  BROTLI_BOOL success = BROTLI_FALSE;\n  BrotliSharedDictionary* decoded_dict = BrotliSharedDictionaryCreateInstance(\n      m->alloc_func, m->free_func, m->opaque);\n  if (!decoded_dict) {  /* OOM */\n    return BROTLI_FALSE;\n  }\n  success = BrotliSharedDictionaryAttach(\n      decoded_dict, BROTLI_SHARED_DICTIONARY_SERIALIZED, size, encoded_dict);\n  if (success) {\n    success = InitCustomSharedEncoderDictionary(m,\n        decoded_dict, quality, dict);\n  }\n  BrotliSharedDictionaryDestroyInstance(decoded_dict);\n  return success;\n}\n#endif  /* BROTLI_EXPERIMENTAL */\n\nvoid BrotliCleanupSharedEncoderDictionary(MemoryManager* m,\n                                          SharedEncoderDictionary* dict) {\n  size_t i;\n  for (i = 0; i < dict->compound.num_prepared_instances_; i++) {\n    DestroyPreparedDictionary(m,\n        (PreparedDictionary*)dict->compound.prepared_instances_[i]);\n  }\n  if (dict->contextual.num_instances_ == 1) {\n    BrotliDestroyEncoderDictionary(m, &dict->contextual.instance_);\n  } else if (dict->contextual.num_instances_ > 1) {\n    for (i = 0; i < dict->contextual.num_instances_; i++) {\n      BrotliDestroyEncoderDictionary(m, &dict->contextual.instances_[i]);\n    }\n    BrotliFree(m, dict->contextual.instances_);\n  }\n}\n\nManagedDictionary* BrotliCreateManagedDictionary(\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {\n  ManagedDictionary* result = (ManagedDictionary*)BrotliBootstrapAlloc(\n      sizeof(ManagedDictionary), alloc_func, free_func, opaque);\n  if (result == NULL) return NULL;\n\n  result->magic = kManagedDictionaryMagic;\n  BrotliInitMemoryManager(\n      &result->memory_manager_, alloc_func, free_func, opaque);\n  result->dictionary = NULL;\n\n  return result;\n}\n\nvoid BrotliDestroyManagedDictionary(ManagedDictionary* dictionary) {\n  if (!dictionary) return;\n  BrotliBootstrapFree(dictionary, &dictionary->memory_manager_);\n}\n\n/* Escalate internal functions visibility; for testing purposes only. */\n#if defined(BROTLI_TEST)\nvoid BrotliInitEncoderDictionaryForTest(BrotliEncoderDictionary*);\nvoid BrotliInitEncoderDictionaryForTest(BrotliEncoderDictionary* d) {\n  InitEncoderDictionary(d);\n}\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/encoder_dict.h",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#ifndef BROTLI_ENC_ENCODER_DICT_H_\n#define BROTLI_ENC_ENCODER_DICT_H_\n\n#include \"../common/dictionary.h\"\n#include <brotli/shared_dictionary.h>\n#include \"../common/platform.h\"\n#include \"compound_dictionary.h\"\n#include \"memory.h\"\n#include \"static_dict_lut.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/*\nDictionary hierarchy for Encoder:\n-SharedEncoderDictionary\n--CompoundDictionary\n---PreparedDictionary [up to 15x]\n   = prefix dictionary with precomputed hashes\n--ContextualEncoderDictionary\n---BrotliEncoderDictionary [up to 64x]\n   = for each context, precomputed static dictionary with words + transforms\n\nDictionary hierarchy from common: similar, but without precomputed hashes\n-BrotliSharedDictionary\n--BrotliDictionary [up to 64x]\n--BrotliTransforms [up to 64x]\n--const uint8_t* prefix [up to 15x]: compound dictionaries\n*/\n\ntypedef struct BrotliTrieNode {\n  uint8_t single;  /* if 1, sub is a single node for c instead of 256 */\n  uint8_t c;\n  uint8_t len_;  /* untransformed length */\n  uint32_t idx_;  /* word index + num words * transform index */\n  uint32_t sub;  /* index of sub node(s) in the pool */\n} BrotliTrieNode;\n\ntypedef struct BrotliTrie {\n  BrotliTrieNode* pool;\n  size_t pool_capacity;\n  size_t pool_size;\n  BrotliTrieNode root;\n} BrotliTrie;\n\n#if defined(BROTLI_EXPERIMENTAL)\nBROTLI_INTERNAL const BrotliTrieNode* BrotliTrieSub(const BrotliTrie* trie,\n    const BrotliTrieNode* node, uint8_t c);\n#endif  /* BROTLI_EXPERIMENTAL */\n\n/* Dictionary data (words and transforms) for 1 possible context */\ntypedef struct BrotliEncoderDictionary {\n  const BrotliDictionary* words;\n  uint32_t num_transforms;\n\n  /* cut off for fast encoder */\n  uint32_t cutoffTransformsCount;\n  uint64_t cutoffTransforms;\n\n  /* from dictionary_hash.h, for fast encoder */\n  const uint16_t* hash_table_words;\n  const uint8_t* hash_table_lengths;\n\n  /* from static_dict_lut.h, for slow encoder */\n  const uint16_t* buckets;\n  const DictWord* dict_words;\n  /* Heavy version, for use by slow encoder when there are custom transforms.\n     Contains every possible transformed dictionary word in a trie. It encodes\n     about as fast as the non-heavy encoder but consumes a lot of memory and\n     takes time to build. */\n  BrotliTrie trie;\n  BROTLI_BOOL has_words_heavy;\n\n  /* Reference to other dictionaries. */\n  const struct ContextualEncoderDictionary* parent;\n\n  /* Allocated memory, used only when not using the Brotli defaults */\n  uint16_t* hash_table_data_words_;\n  uint8_t* hash_table_data_lengths_;\n  size_t buckets_alloc_size_;\n  uint16_t* buckets_data_;\n  size_t dict_words_alloc_size_;\n  DictWord* dict_words_data_;\n  BrotliDictionary* words_instance_;\n} BrotliEncoderDictionary;\n\n/* Dictionary data for all 64 contexts */\ntypedef struct ContextualEncoderDictionary {\n  BROTLI_BOOL context_based;\n  uint8_t num_dictionaries;\n  uint8_t context_map[SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS];\n  const BrotliEncoderDictionary* dict[SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS];\n\n  /* If num_instances_ is 1, instance_ is used, else dynamic allocation with\n     instances_ is used. */\n  size_t num_instances_;\n  BrotliEncoderDictionary instance_;\n  BrotliEncoderDictionary* instances_;\n} ContextualEncoderDictionary;\n\ntypedef struct SharedEncoderDictionary {\n  /* Magic value to distinguish this struct from PreparedDictionary for\n     certain external usages. */\n  uint32_t magic;\n\n  /* LZ77 prefix, compound dictionary */\n  CompoundDictionary compound;\n\n  /* Custom static dictionary (optionally context-based) */\n  ContextualEncoderDictionary contextual;\n\n  /* The maximum quality the dictionary was computed for */\n  int max_quality;\n} SharedEncoderDictionary;\n\ntypedef struct ManagedDictionary {\n  uint32_t magic;\n  MemoryManager memory_manager_;\n  uint32_t* dictionary;\n} ManagedDictionary;\n\n/* Initializes to the brotli built-in dictionary */\nBROTLI_INTERNAL void BrotliInitSharedEncoderDictionary(\n    SharedEncoderDictionary* dict);\n\n#if defined(BROTLI_EXPERIMENTAL)\n/* Initializes to shared dictionary that will be parsed from\n   encoded_dict. Requires that you keep the encoded_dict buffer\n   around, parts of data will point to it. */\nBROTLI_INTERNAL BROTLI_BOOL BrotliInitCustomSharedEncoderDictionary(\n    MemoryManager* m, const uint8_t* encoded_dict, size_t size,\n    int quality, SharedEncoderDictionary* dict);\n#endif  /* BROTLI_EXPERIMENTAL */\n\nBROTLI_INTERNAL void BrotliCleanupSharedEncoderDictionary(\n    MemoryManager* m, SharedEncoderDictionary* dict);\n\nBROTLI_INTERNAL ManagedDictionary* BrotliCreateManagedDictionary(\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);\n\nBROTLI_INTERNAL void BrotliDestroyManagedDictionary(\n    ManagedDictionary* dictionary);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_ENCODER_DICT_H_ */\n"
  },
  {
    "path": "c/enc/entropy_encode.c",
    "content": "/* Copyright 2010 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Entropy encoding (Huffman) utilities. */\n\n#include \"entropy_encode.h\"\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nconst BROTLI_MODEL(\"small\") size_t kBrotliShellGaps[] = {132, 57, 23, 10, 4, 1};\n\nBROTLI_BOOL BrotliSetDepth(\n    int p0, HuffmanTree* pool, uint8_t* depth, int max_depth) {\n  int stack[16];\n  int level = 0;\n  int p = p0;\n  BROTLI_DCHECK(max_depth <= 15);\n  stack[0] = -1;\n  while (BROTLI_TRUE) {\n    if (pool[p].index_left_ >= 0) {\n      level++;\n      if (level > max_depth) return BROTLI_FALSE;\n      stack[level] = pool[p].index_right_or_value_;\n      p = pool[p].index_left_;\n      continue;\n    } else {\n      depth[pool[p].index_right_or_value_] = (uint8_t)level;\n    }\n    while (level >= 0 && stack[level] == -1) level--;\n    if (level < 0) return BROTLI_TRUE;\n    p = stack[level];\n    stack[level] = -1;\n  }\n}\n\n/* Sort the root nodes, least popular first. */\nstatic BROTLI_INLINE BROTLI_BOOL SortHuffmanTree(\n    const HuffmanTree* v0, const HuffmanTree* v1) {\n  if (v0->total_count_ != v1->total_count_) {\n    return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_);\n  }\n  return TO_BROTLI_BOOL(v0->index_right_or_value_ > v1->index_right_or_value_);\n}\n\n/* This function will create a Huffman tree.\n\n   The catch here is that the tree cannot be arbitrarily deep.\n   Brotli specifies a maximum depth of 15 bits for \"code trees\"\n   and 7 bits for \"code length code trees.\"\n\n   count_limit is the value that is to be faked as the minimum value\n   and this minimum value is raised until the tree matches the\n   maximum length requirement.\n\n   This algorithm is not of excellent performance for very long data blocks,\n   especially when population counts are longer than 2**tree_limit, but\n   we are not planning to use this with extremely long blocks.\n\n   See http://en.wikipedia.org/wiki/Huffman_coding */\nvoid BrotliCreateHuffmanTree(const uint32_t* data,\n                             const size_t length,\n                             const int tree_limit,\n                             HuffmanTree* tree,\n                             uint8_t* depth) {\n  uint32_t count_limit;\n  HuffmanTree sentinel;\n  InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1);\n  /* For block sizes below 64 kB, we never need to do a second iteration\n     of this loop. Probably all of our block sizes will be smaller than\n     that, so this loop is mostly of academic interest. If we actually\n     would need this, we would be better off with the Katajainen algorithm. */\n  for (count_limit = 1; ; count_limit *= 2) {\n    size_t n = 0;\n    size_t i;\n    size_t j;\n    size_t k;\n    for (i = length; i != 0;) {\n      --i;\n      if (data[i]) {\n        const uint32_t count = BROTLI_MAX(uint32_t, data[i], count_limit);\n        InitHuffmanTree(&tree[n++], count, -1, (int16_t)i);\n      }\n    }\n\n    if (n == 1) {\n      depth[tree[0].index_right_or_value_] = 1;  /* Only one element. */\n      break;\n    }\n\n    SortHuffmanTreeItems(tree, n, SortHuffmanTree);\n\n    /* The nodes are:\n       [0, n): the sorted leaf nodes that we start with.\n       [n]: we add a sentinel here.\n       [n + 1, 2n): new parent nodes are added here, starting from\n                    (n+1). These are naturally in ascending order.\n       [2n]: we add a sentinel at the end as well.\n       There will be (2n+1) elements at the end. */\n    tree[n] = sentinel;\n    tree[n + 1] = sentinel;\n\n    i = 0;      /* Points to the next leaf node. */\n    j = n + 1;  /* Points to the next non-leaf node. */\n    for (k = n - 1; k != 0; --k) {\n      size_t left, right;\n      if (tree[i].total_count_ <= tree[j].total_count_) {\n        left = i;\n        ++i;\n      } else {\n        left = j;\n        ++j;\n      }\n      if (tree[i].total_count_ <= tree[j].total_count_) {\n        right = i;\n        ++i;\n      } else {\n        right = j;\n        ++j;\n      }\n\n      {\n        /* The sentinel node becomes the parent node. */\n        size_t j_end = 2 * n - k;\n        tree[j_end].total_count_ =\n            tree[left].total_count_ + tree[right].total_count_;\n        tree[j_end].index_left_ = (int16_t)left;\n        tree[j_end].index_right_or_value_ = (int16_t)right;\n\n        /* Add back the last sentinel node. */\n        tree[j_end + 1] = sentinel;\n      }\n    }\n    if (BrotliSetDepth((int)(2 * n - 1), &tree[0], depth, tree_limit)) {\n      /* We need to pack the Huffman tree in tree_limit bits. If this was not\n         successful, add fake entities to the lowest values and retry. */\n      break;\n    }\n  }\n}\n\nstatic void Reverse(uint8_t* v, size_t start, size_t end) {\n  --end;\n  while (start < end) {\n    uint8_t tmp = v[start];\n    v[start] = v[end];\n    v[end] = tmp;\n    ++start;\n    --end;\n  }\n}\n\nstatic void BrotliWriteHuffmanTreeRepetitions(\n    const uint8_t previous_value,\n    const uint8_t value,\n    size_t repetitions,\n    size_t* tree_size,\n    uint8_t* tree,\n    uint8_t* extra_bits_data) {\n  BROTLI_DCHECK(repetitions > 0);\n  if (previous_value != value) {\n    tree[*tree_size] = value;\n    extra_bits_data[*tree_size] = 0;\n    ++(*tree_size);\n    --repetitions;\n  }\n  if (repetitions == 7) {\n    tree[*tree_size] = value;\n    extra_bits_data[*tree_size] = 0;\n    ++(*tree_size);\n    --repetitions;\n  }\n  if (repetitions < 3) {\n    size_t i;\n    for (i = 0; i < repetitions; ++i) {\n      tree[*tree_size] = value;\n      extra_bits_data[*tree_size] = 0;\n      ++(*tree_size);\n    }\n  } else {\n    size_t start = *tree_size;\n    repetitions -= 3;\n    while (BROTLI_TRUE) {\n      tree[*tree_size] = BROTLI_REPEAT_PREVIOUS_CODE_LENGTH;\n      extra_bits_data[*tree_size] = repetitions & 0x3;\n      ++(*tree_size);\n      repetitions >>= 2;\n      if (repetitions == 0) {\n        break;\n      }\n      --repetitions;\n    }\n    Reverse(tree, start, *tree_size);\n    Reverse(extra_bits_data, start, *tree_size);\n  }\n}\n\nstatic void BrotliWriteHuffmanTreeRepetitionsZeros(\n    size_t repetitions,\n    size_t* tree_size,\n    uint8_t* tree,\n    uint8_t* extra_bits_data) {\n  if (repetitions == 11) {\n    tree[*tree_size] = 0;\n    extra_bits_data[*tree_size] = 0;\n    ++(*tree_size);\n    --repetitions;\n  }\n  if (repetitions < 3) {\n    size_t i;\n    for (i = 0; i < repetitions; ++i) {\n      tree[*tree_size] = 0;\n      extra_bits_data[*tree_size] = 0;\n      ++(*tree_size);\n    }\n  } else {\n    size_t start = *tree_size;\n    repetitions -= 3;\n    while (BROTLI_TRUE) {\n      tree[*tree_size] = BROTLI_REPEAT_ZERO_CODE_LENGTH;\n      extra_bits_data[*tree_size] = repetitions & 0x7;\n      ++(*tree_size);\n      repetitions >>= 3;\n      if (repetitions == 0) {\n        break;\n      }\n      --repetitions;\n    }\n    Reverse(tree, start, *tree_size);\n    Reverse(extra_bits_data, start, *tree_size);\n  }\n}\n\nvoid BrotliOptimizeHuffmanCountsForRle(size_t length, uint32_t* counts,\n                                       uint8_t* good_for_rle) {\n  size_t nonzero_count = 0;\n  size_t stride;\n  size_t limit;\n  size_t sum;\n  const size_t streak_limit = 1240;\n  /* Let's make the Huffman code more compatible with RLE encoding. */\n  size_t i;\n  for (i = 0; i < length; i++) {\n    if (counts[i]) {\n      ++nonzero_count;\n    }\n  }\n  if (nonzero_count < 16) {\n    return;\n  }\n  while (length != 0 && counts[length - 1] == 0) {\n    --length;\n  }\n  if (length == 0) {\n    return;  /* All zeros. */\n  }\n  /* Now counts[0..length - 1] does not have trailing zeros. */\n  {\n    size_t nonzeros = 0;\n    uint32_t smallest_nonzero = 1 << 30;\n    for (i = 0; i < length; ++i) {\n      if (counts[i] != 0) {\n        ++nonzeros;\n        if (smallest_nonzero > counts[i]) {\n          smallest_nonzero = counts[i];\n        }\n      }\n    }\n    if (nonzeros < 5) {\n      /* Small histogram will model it well. */\n      return;\n    }\n    if (smallest_nonzero < 4) {\n      size_t zeros = length - nonzeros;\n      if (zeros < 6) {\n        for (i = 1; i < length - 1; ++i) {\n          if (counts[i - 1] != 0 && counts[i] == 0 && counts[i + 1] != 0) {\n            counts[i] = 1;\n          }\n        }\n      }\n    }\n    if (nonzeros < 28) {\n      return;\n    }\n  }\n  /* 2) Let's mark all population counts that already can be encoded\n     with an RLE code. */\n  memset(good_for_rle, 0, length);\n  {\n    /* Let's not spoil any of the existing good RLE codes.\n       Mark any seq of 0's that is longer as 5 as a good_for_rle.\n       Mark any seq of non-0's that is longer as 7 as a good_for_rle. */\n    uint32_t symbol = counts[0];\n    size_t step = 0;\n    for (i = 0; i <= length; ++i) {\n      if (i == length || counts[i] != symbol) {\n        if ((symbol == 0 && step >= 5) ||\n            (symbol != 0 && step >= 7)) {\n          size_t k;\n          for (k = 0; k < step; ++k) {\n            good_for_rle[i - k - 1] = 1;\n          }\n        }\n        step = 1;\n        if (i != length) {\n          symbol = counts[i];\n        }\n      } else {\n        ++step;\n      }\n    }\n  }\n  /* 3) Let's replace those population counts that lead to more RLE codes.\n     Math here is in 24.8 fixed point representation. */\n  stride = 0;\n  limit = 256 * (counts[0] + counts[1] + counts[2]) / 3 + 420;\n  sum = 0;\n  for (i = 0; i <= length; ++i) {\n    if (i == length || good_for_rle[i] ||\n        (i != 0 && good_for_rle[i - 1]) ||\n        (256 * counts[i] - limit + streak_limit) >= 2 * streak_limit) {\n      if (stride >= 4 || (stride >= 3 && sum == 0)) {\n        size_t k;\n        /* The stride must end, collapse what we have, if we have enough (4). */\n        size_t count = (sum + stride / 2) / stride;\n        if (count == 0) {\n          count = 1;\n        }\n        if (sum == 0) {\n          /* Don't make an all zeros stride to be upgraded to ones. */\n          count = 0;\n        }\n        for (k = 0; k < stride; ++k) {\n          /* We don't want to change value at counts[i],\n             that is already belonging to the next stride. Thus - 1. */\n          counts[i - k - 1] = (uint32_t)count;\n        }\n      }\n      stride = 0;\n      sum = 0;\n      if (i < length - 2) {\n        /* All interesting strides have a count of at least 4, */\n        /* at least when non-zeros. */\n        limit = 256 * (counts[i] + counts[i + 1] + counts[i + 2]) / 3 + 420;\n      } else if (i < length) {\n        limit = 256 * counts[i];\n      } else {\n        limit = 0;\n      }\n    }\n    ++stride;\n    if (i != length) {\n      sum += counts[i];\n      if (stride >= 4) {\n        limit = (256 * sum + stride / 2) / stride;\n      }\n      if (stride == 4) {\n        limit += 120;\n      }\n    }\n  }\n}\n\nstatic void DecideOverRleUse(const uint8_t* depth, const size_t length,\n                             BROTLI_BOOL* use_rle_for_non_zero,\n                             BROTLI_BOOL* use_rle_for_zero) {\n  size_t total_reps_zero = 0;\n  size_t total_reps_non_zero = 0;\n  size_t count_reps_zero = 1;\n  size_t count_reps_non_zero = 1;\n  size_t i;\n  for (i = 0; i < length;) {\n    const uint8_t value = depth[i];\n    size_t reps = 1;\n    size_t k;\n    for (k = i + 1; k < length && depth[k] == value; ++k) {\n      ++reps;\n    }\n    if (reps >= 3 && value == 0) {\n      total_reps_zero += reps;\n      ++count_reps_zero;\n    }\n    if (reps >= 4 && value != 0) {\n      total_reps_non_zero += reps;\n      ++count_reps_non_zero;\n    }\n    i += reps;\n  }\n  *use_rle_for_non_zero =\n      TO_BROTLI_BOOL(total_reps_non_zero > count_reps_non_zero * 2);\n  *use_rle_for_zero = TO_BROTLI_BOOL(total_reps_zero > count_reps_zero * 2);\n}\n\nvoid BrotliWriteHuffmanTree(const uint8_t* depth,\n                            size_t length,\n                            size_t* tree_size,\n                            uint8_t* tree,\n                            uint8_t* extra_bits_data) {\n  uint8_t previous_value = BROTLI_INITIAL_REPEATED_CODE_LENGTH;\n  size_t i;\n  BROTLI_BOOL use_rle_for_non_zero = BROTLI_FALSE;\n  BROTLI_BOOL use_rle_for_zero = BROTLI_FALSE;\n\n  /* Throw away trailing zeros. */\n  size_t new_length = length;\n  for (i = 0; i < length; ++i) {\n    if (depth[length - i - 1] == 0) {\n      --new_length;\n    } else {\n      break;\n    }\n  }\n\n  /* First gather statistics on if it is a good idea to do RLE. */\n  if (length > 50) {\n    /* Find RLE coding for longer codes.\n       Shorter codes seem not to benefit from RLE. */\n    DecideOverRleUse(depth, new_length,\n                     &use_rle_for_non_zero, &use_rle_for_zero);\n  }\n\n  /* Actual RLE coding. */\n  for (i = 0; i < new_length;) {\n    const uint8_t value = depth[i];\n    size_t reps = 1;\n    if ((value != 0 && use_rle_for_non_zero) ||\n        (value == 0 && use_rle_for_zero)) {\n      size_t k;\n      for (k = i + 1; k < new_length && depth[k] == value; ++k) {\n        ++reps;\n      }\n    }\n    if (value == 0) {\n      BrotliWriteHuffmanTreeRepetitionsZeros(\n          reps, tree_size, tree, extra_bits_data);\n    } else {\n      BrotliWriteHuffmanTreeRepetitions(previous_value,\n                                        value, reps, tree_size,\n                                        tree, extra_bits_data);\n      previous_value = value;\n    }\n    i += reps;\n  }\n}\n\nstatic uint16_t BrotliReverseBits(size_t num_bits, uint16_t bits) {\n  static const size_t BROTLI_MODEL(\"small\") kLut[16] =\n  {  /* Pre-reversed 4-bit values. */\n    0x00, 0x08, 0x04, 0x0C, 0x02, 0x0A, 0x06, 0x0E,\n    0x01, 0x09, 0x05, 0x0D, 0x03, 0x0B, 0x07, 0x0F\n  };\n  size_t retval = kLut[bits & 0x0F];\n  size_t i;\n  for (i = 4; i < num_bits; i += 4) {\n    retval <<= 4;\n    bits = (uint16_t)(bits >> 4);\n    retval |= kLut[bits & 0x0F];\n  }\n  retval >>= ((0 - num_bits) & 0x03);\n  return (uint16_t)retval;\n}\n\n/* 0..15 are values for bits */\n#define MAX_HUFFMAN_BITS 16\n\nvoid BrotliConvertBitDepthsToSymbols(const uint8_t* depth,\n                                     size_t len,\n                                     uint16_t* bits) {\n  /* In Brotli, all bit depths are [1..15]\n     0 bit depth means that the symbol does not exist. */\n  uint16_t bl_count[MAX_HUFFMAN_BITS] = { 0 };\n  uint16_t next_code[MAX_HUFFMAN_BITS];\n  size_t i;\n  int code = 0;\n  for (i = 0; i < len; ++i) {\n    ++bl_count[depth[i]];\n  }\n  bl_count[0] = 0;\n  next_code[0] = 0;\n  for (i = 1; i < MAX_HUFFMAN_BITS; ++i) {\n    code = (code + bl_count[i - 1]) << 1;\n    next_code[i] = (uint16_t)code;\n  }\n  for (i = 0; i < len; ++i) {\n    if (depth[i]) {\n      bits[i] = BrotliReverseBits(depth[i], next_code[depth[i]]++);\n    }\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/entropy_encode.h",
    "content": "/* Copyright 2010 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Entropy encoding (Huffman) utilities. */\n\n#ifndef BROTLI_ENC_ENTROPY_ENCODE_H_\n#define BROTLI_ENC_ENTROPY_ENCODE_H_\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* A node of a Huffman tree. */\ntypedef struct HuffmanTree {\n  uint32_t total_count_;\n  int16_t index_left_;\n  int16_t index_right_or_value_;\n} HuffmanTree;\n\nstatic BROTLI_INLINE void InitHuffmanTree(HuffmanTree* self, uint32_t count,\n    int16_t left, int16_t right) {\n  self->total_count_ = count;\n  self->index_left_ = left;\n  self->index_right_or_value_ = right;\n}\n\n/* Returns 1 is assignment of depths succeeded, otherwise 0. */\nBROTLI_INTERNAL BROTLI_BOOL BrotliSetDepth(\n    int p, HuffmanTree* pool, uint8_t* depth, int max_depth);\n\n/* This function will create a Huffman tree.\n\n   The (data,length) contains the population counts.\n   The tree_limit is the maximum bit depth of the Huffman codes.\n\n   The depth contains the tree, i.e., how many bits are used for\n   the symbol.\n\n   The actual Huffman tree is constructed in the tree[] array, which has to\n   be at least 2 * length + 1 long.\n\n   See http://en.wikipedia.org/wiki/Huffman_coding */\nBROTLI_INTERNAL void BrotliCreateHuffmanTree(const uint32_t* data,\n                                             const size_t length,\n                                             const int tree_limit,\n                                             HuffmanTree* tree,\n                                             uint8_t* depth);\n\n/* Change the population counts in a way that the consequent\n   Huffman tree compression, especially its RLE-part will be more\n   likely to compress this data more efficiently.\n\n   length contains the size of the histogram.\n   counts contains the population counts.\n   good_for_rle is a buffer of at least length size */\nBROTLI_INTERNAL void BrotliOptimizeHuffmanCountsForRle(\n    size_t length, uint32_t* counts, uint8_t* good_for_rle);\n\n/* Write a Huffman tree from bit depths into the bit-stream representation\n   of a Huffman tree. The generated Huffman tree is to be compressed once\n   more using a Huffman tree */\nBROTLI_INTERNAL void BrotliWriteHuffmanTree(const uint8_t* depth,\n                                            size_t length,\n                                            size_t* tree_size,\n                                            uint8_t* tree,\n                                            uint8_t* extra_bits_data);\n\n/* Get the actual bit values for a tree of bit depths. */\nBROTLI_INTERNAL void BrotliConvertBitDepthsToSymbols(const uint8_t* depth,\n                                                     size_t len,\n                                                     uint16_t* bits);\n\nBROTLI_INTERNAL extern BROTLI_MODEL(\"small\") const size_t kBrotliShellGaps[6];\n/* Input size optimized Shell sort. */\ntypedef BROTLI_BOOL (*HuffmanTreeComparator)(\n    const HuffmanTree*, const HuffmanTree*);\nstatic BROTLI_INLINE void SortHuffmanTreeItems(HuffmanTree* items,\n    const size_t n, HuffmanTreeComparator comparator) {\n  if (n < 13) {\n    /* Insertion sort. */\n    size_t i;\n    for (i = 1; i < n; ++i) {\n      HuffmanTree tmp = items[i];\n      size_t k = i;\n      size_t j = i - 1;\n      while (comparator(&tmp, &items[j])) {\n        items[k] = items[j];\n        k = j;\n        if (!j--) break;\n      }\n      items[k] = tmp;\n    }\n    return;\n  } else {\n    /* Shell sort. */\n    int g = n < 57 ? 2 : 0;\n    for (; g < 6; ++g) {\n      size_t gap = kBrotliShellGaps[g];\n      size_t i;\n      for (i = gap; i < n; ++i) {\n        size_t j = i;\n        HuffmanTree tmp = items[i];\n        for (; j >= gap && comparator(&tmp, &items[j - gap]); j -= gap) {\n          items[j] = items[j - gap];\n        }\n        items[j] = tmp;\n      }\n    }\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_ENTROPY_ENCODE_H_ */\n"
  },
  {
    "path": "c/enc/entropy_encode_static.h",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Static entropy codes used for faster meta-block encoding. */\n\n#ifndef BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_\n#define BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n#include \"write_bits.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstatic const BROTLI_MODEL(\"small\") uint8_t kCodeLengthDepth[18] = {\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 0, 4, 4,\n};\n\nstatic const BROTLI_MODEL(\"small\")\nuint8_t kStaticCommandCodeDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n};\n\nstatic const BROTLI_MODEL(\"small\")\nuint8_t kStaticDistanceCodeDepth[64] = {\n  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n};\n\n/* GENERATED CODE START */\nstatic const BROTLI_MODEL(\"small\")\nuint32_t kCodeLengthBits[18] = {\n  0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 15, 31, 0, 11, 7,\n};\n\nstatic BROTLI_INLINE void StoreStaticCodeLengthCode(\n    size_t* storage_ix, uint8_t* storage) {\n  BrotliWriteBits(\n      40, BROTLI_MAKE_UINT64_T(0x0000FFu, 0x55555554u), storage_ix, storage);\n}\n\nstatic const BROTLI_MODEL(\"small\")\nuint64_t kZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] = {\n  0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000017, 0x00000027,\n  0x00000037, 0x00000047, 0x00000057, 0x00000067, 0x00000077, 0x00000770,\n  0x00000b87, 0x00001387, 0x00001b87, 0x00002387, 0x00002b87, 0x00003387,\n  0x00003b87, 0x00000397, 0x00000b97, 0x00001397, 0x00001b97, 0x00002397,\n  0x00002b97, 0x00003397, 0x00003b97, 0x000003a7, 0x00000ba7, 0x000013a7,\n  0x00001ba7, 0x000023a7, 0x00002ba7, 0x000033a7, 0x00003ba7, 0x000003b7,\n  0x00000bb7, 0x000013b7, 0x00001bb7, 0x000023b7, 0x00002bb7, 0x000033b7,\n  0x00003bb7, 0x000003c7, 0x00000bc7, 0x000013c7, 0x00001bc7, 0x000023c7,\n  0x00002bc7, 0x000033c7, 0x00003bc7, 0x000003d7, 0x00000bd7, 0x000013d7,\n  0x00001bd7, 0x000023d7, 0x00002bd7, 0x000033d7, 0x00003bd7, 0x000003e7,\n  0x00000be7, 0x000013e7, 0x00001be7, 0x000023e7, 0x00002be7, 0x000033e7,\n  0x00003be7, 0x000003f7, 0x00000bf7, 0x000013f7, 0x00001bf7, 0x000023f7,\n  0x00002bf7, 0x000033f7, 0x00003bf7, 0x0001c387, 0x0005c387, 0x0009c387,\n  0x000dc387, 0x0011c387, 0x0015c387, 0x0019c387, 0x001dc387, 0x0001cb87,\n  0x0005cb87, 0x0009cb87, 0x000dcb87, 0x0011cb87, 0x0015cb87, 0x0019cb87,\n  0x001dcb87, 0x0001d387, 0x0005d387, 0x0009d387, 0x000dd387, 0x0011d387,\n  0x0015d387, 0x0019d387, 0x001dd387, 0x0001db87, 0x0005db87, 0x0009db87,\n  0x000ddb87, 0x0011db87, 0x0015db87, 0x0019db87, 0x001ddb87, 0x0001e387,\n  0x0005e387, 0x0009e387, 0x000de387, 0x0011e387, 0x0015e387, 0x0019e387,\n  0x001de387, 0x0001eb87, 0x0005eb87, 0x0009eb87, 0x000deb87, 0x0011eb87,\n  0x0015eb87, 0x0019eb87, 0x001deb87, 0x0001f387, 0x0005f387, 0x0009f387,\n  0x000df387, 0x0011f387, 0x0015f387, 0x0019f387, 0x001df387, 0x0001fb87,\n  0x0005fb87, 0x0009fb87, 0x000dfb87, 0x0011fb87, 0x0015fb87, 0x0019fb87,\n  0x001dfb87, 0x0001c397, 0x0005c397, 0x0009c397, 0x000dc397, 0x0011c397,\n  0x0015c397, 0x0019c397, 0x001dc397, 0x0001cb97, 0x0005cb97, 0x0009cb97,\n  0x000dcb97, 0x0011cb97, 0x0015cb97, 0x0019cb97, 0x001dcb97, 0x0001d397,\n  0x0005d397, 0x0009d397, 0x000dd397, 0x0011d397, 0x0015d397, 0x0019d397,\n  0x001dd397, 0x0001db97, 0x0005db97, 0x0009db97, 0x000ddb97, 0x0011db97,\n  0x0015db97, 0x0019db97, 0x001ddb97, 0x0001e397, 0x0005e397, 0x0009e397,\n  0x000de397, 0x0011e397, 0x0015e397, 0x0019e397, 0x001de397, 0x0001eb97,\n  0x0005eb97, 0x0009eb97, 0x000deb97, 0x0011eb97, 0x0015eb97, 0x0019eb97,\n  0x001deb97, 0x0001f397, 0x0005f397, 0x0009f397, 0x000df397, 0x0011f397,\n  0x0015f397, 0x0019f397, 0x001df397, 0x0001fb97, 0x0005fb97, 0x0009fb97,\n  0x000dfb97, 0x0011fb97, 0x0015fb97, 0x0019fb97, 0x001dfb97, 0x0001c3a7,\n  0x0005c3a7, 0x0009c3a7, 0x000dc3a7, 0x0011c3a7, 0x0015c3a7, 0x0019c3a7,\n  0x001dc3a7, 0x0001cba7, 0x0005cba7, 0x0009cba7, 0x000dcba7, 0x0011cba7,\n  0x0015cba7, 0x0019cba7, 0x001dcba7, 0x0001d3a7, 0x0005d3a7, 0x0009d3a7,\n  0x000dd3a7, 0x0011d3a7, 0x0015d3a7, 0x0019d3a7, 0x001dd3a7, 0x0001dba7,\n  0x0005dba7, 0x0009dba7, 0x000ddba7, 0x0011dba7, 0x0015dba7, 0x0019dba7,\n  0x001ddba7, 0x0001e3a7, 0x0005e3a7, 0x0009e3a7, 0x000de3a7, 0x0011e3a7,\n  0x0015e3a7, 0x0019e3a7, 0x001de3a7, 0x0001eba7, 0x0005eba7, 0x0009eba7,\n  0x000deba7, 0x0011eba7, 0x0015eba7, 0x0019eba7, 0x001deba7, 0x0001f3a7,\n  0x0005f3a7, 0x0009f3a7, 0x000df3a7, 0x0011f3a7, 0x0015f3a7, 0x0019f3a7,\n  0x001df3a7, 0x0001fba7, 0x0005fba7, 0x0009fba7, 0x000dfba7, 0x0011fba7,\n  0x0015fba7, 0x0019fba7, 0x001dfba7, 0x0001c3b7, 0x0005c3b7, 0x0009c3b7,\n  0x000dc3b7, 0x0011c3b7, 0x0015c3b7, 0x0019c3b7, 0x001dc3b7, 0x0001cbb7,\n  0x0005cbb7, 0x0009cbb7, 0x000dcbb7, 0x0011cbb7, 0x0015cbb7, 0x0019cbb7,\n  0x001dcbb7, 0x0001d3b7, 0x0005d3b7, 0x0009d3b7, 0x000dd3b7, 0x0011d3b7,\n  0x0015d3b7, 0x0019d3b7, 0x001dd3b7, 0x0001dbb7, 0x0005dbb7, 0x0009dbb7,\n  0x000ddbb7, 0x0011dbb7, 0x0015dbb7, 0x0019dbb7, 0x001ddbb7, 0x0001e3b7,\n  0x0005e3b7, 0x0009e3b7, 0x000de3b7, 0x0011e3b7, 0x0015e3b7, 0x0019e3b7,\n  0x001de3b7, 0x0001ebb7, 0x0005ebb7, 0x0009ebb7, 0x000debb7, 0x0011ebb7,\n  0x0015ebb7, 0x0019ebb7, 0x001debb7, 0x0001f3b7, 0x0005f3b7, 0x0009f3b7,\n  0x000df3b7, 0x0011f3b7, 0x0015f3b7, 0x0019f3b7, 0x001df3b7, 0x0001fbb7,\n  0x0005fbb7, 0x0009fbb7, 0x000dfbb7, 0x0011fbb7, 0x0015fbb7, 0x0019fbb7,\n  0x001dfbb7, 0x0001c3c7, 0x0005c3c7, 0x0009c3c7, 0x000dc3c7, 0x0011c3c7,\n  0x0015c3c7, 0x0019c3c7, 0x001dc3c7, 0x0001cbc7, 0x0005cbc7, 0x0009cbc7,\n  0x000dcbc7, 0x0011cbc7, 0x0015cbc7, 0x0019cbc7, 0x001dcbc7, 0x0001d3c7,\n  0x0005d3c7, 0x0009d3c7, 0x000dd3c7, 0x0011d3c7, 0x0015d3c7, 0x0019d3c7,\n  0x001dd3c7, 0x0001dbc7, 0x0005dbc7, 0x0009dbc7, 0x000ddbc7, 0x0011dbc7,\n  0x0015dbc7, 0x0019dbc7, 0x001ddbc7, 0x0001e3c7, 0x0005e3c7, 0x0009e3c7,\n  0x000de3c7, 0x0011e3c7, 0x0015e3c7, 0x0019e3c7, 0x001de3c7, 0x0001ebc7,\n  0x0005ebc7, 0x0009ebc7, 0x000debc7, 0x0011ebc7, 0x0015ebc7, 0x0019ebc7,\n  0x001debc7, 0x0001f3c7, 0x0005f3c7, 0x0009f3c7, 0x000df3c7, 0x0011f3c7,\n  0x0015f3c7, 0x0019f3c7, 0x001df3c7, 0x0001fbc7, 0x0005fbc7, 0x0009fbc7,\n  0x000dfbc7, 0x0011fbc7, 0x0015fbc7, 0x0019fbc7, 0x001dfbc7, 0x0001c3d7,\n  0x0005c3d7, 0x0009c3d7, 0x000dc3d7, 0x0011c3d7, 0x0015c3d7, 0x0019c3d7,\n  0x001dc3d7, 0x0001cbd7, 0x0005cbd7, 0x0009cbd7, 0x000dcbd7, 0x0011cbd7,\n  0x0015cbd7, 0x0019cbd7, 0x001dcbd7, 0x0001d3d7, 0x0005d3d7, 0x0009d3d7,\n  0x000dd3d7, 0x0011d3d7, 0x0015d3d7, 0x0019d3d7, 0x001dd3d7, 0x0001dbd7,\n  0x0005dbd7, 0x0009dbd7, 0x000ddbd7, 0x0011dbd7, 0x0015dbd7, 0x0019dbd7,\n  0x001ddbd7, 0x0001e3d7, 0x0005e3d7, 0x0009e3d7, 0x000de3d7, 0x0011e3d7,\n  0x0015e3d7, 0x0019e3d7, 0x001de3d7, 0x0001ebd7, 0x0005ebd7, 0x0009ebd7,\n  0x000debd7, 0x0011ebd7, 0x0015ebd7, 0x0019ebd7, 0x001debd7, 0x0001f3d7,\n  0x0005f3d7, 0x0009f3d7, 0x000df3d7, 0x0011f3d7, 0x0015f3d7, 0x0019f3d7,\n  0x001df3d7, 0x0001fbd7, 0x0005fbd7, 0x0009fbd7, 0x000dfbd7, 0x0011fbd7,\n  0x0015fbd7, 0x0019fbd7, 0x001dfbd7, 0x0001c3e7, 0x0005c3e7, 0x0009c3e7,\n  0x000dc3e7, 0x0011c3e7, 0x0015c3e7, 0x0019c3e7, 0x001dc3e7, 0x0001cbe7,\n  0x0005cbe7, 0x0009cbe7, 0x000dcbe7, 0x0011cbe7, 0x0015cbe7, 0x0019cbe7,\n  0x001dcbe7, 0x0001d3e7, 0x0005d3e7, 0x0009d3e7, 0x000dd3e7, 0x0011d3e7,\n  0x0015d3e7, 0x0019d3e7, 0x001dd3e7, 0x0001dbe7, 0x0005dbe7, 0x0009dbe7,\n  0x000ddbe7, 0x0011dbe7, 0x0015dbe7, 0x0019dbe7, 0x001ddbe7, 0x0001e3e7,\n  0x0005e3e7, 0x0009e3e7, 0x000de3e7, 0x0011e3e7, 0x0015e3e7, 0x0019e3e7,\n  0x001de3e7, 0x0001ebe7, 0x0005ebe7, 0x0009ebe7, 0x000debe7, 0x0011ebe7,\n  0x0015ebe7, 0x0019ebe7, 0x001debe7, 0x0001f3e7, 0x0005f3e7, 0x0009f3e7,\n  0x000df3e7, 0x0011f3e7, 0x0015f3e7, 0x0019f3e7, 0x001df3e7, 0x0001fbe7,\n  0x0005fbe7, 0x0009fbe7, 0x000dfbe7, 0x0011fbe7, 0x0015fbe7, 0x0019fbe7,\n  0x001dfbe7, 0x0001c3f7, 0x0005c3f7, 0x0009c3f7, 0x000dc3f7, 0x0011c3f7,\n  0x0015c3f7, 0x0019c3f7, 0x001dc3f7, 0x0001cbf7, 0x0005cbf7, 0x0009cbf7,\n  0x000dcbf7, 0x0011cbf7, 0x0015cbf7, 0x0019cbf7, 0x001dcbf7, 0x0001d3f7,\n  0x0005d3f7, 0x0009d3f7, 0x000dd3f7, 0x0011d3f7, 0x0015d3f7, 0x0019d3f7,\n  0x001dd3f7, 0x0001dbf7, 0x0005dbf7, 0x0009dbf7, 0x000ddbf7, 0x0011dbf7,\n  0x0015dbf7, 0x0019dbf7, 0x001ddbf7, 0x0001e3f7, 0x0005e3f7, 0x0009e3f7,\n  0x000de3f7, 0x0011e3f7, 0x0015e3f7, 0x0019e3f7, 0x001de3f7, 0x0001ebf7,\n  0x0005ebf7, 0x0009ebf7, 0x000debf7, 0x0011ebf7, 0x0015ebf7, 0x0019ebf7,\n  0x001debf7, 0x0001f3f7, 0x0005f3f7, 0x0009f3f7, 0x000df3f7, 0x0011f3f7,\n  0x0015f3f7, 0x0019f3f7, 0x001df3f7, 0x0001fbf7, 0x0005fbf7, 0x0009fbf7,\n  0x000dfbf7, 0x0011fbf7, 0x0015fbf7, 0x0019fbf7, 0x001dfbf7, 0x00e1c387,\n  0x02e1c387, 0x04e1c387, 0x06e1c387, 0x08e1c387, 0x0ae1c387, 0x0ce1c387,\n  0x0ee1c387, 0x00e5c387, 0x02e5c387, 0x04e5c387, 0x06e5c387, 0x08e5c387,\n  0x0ae5c387, 0x0ce5c387, 0x0ee5c387, 0x00e9c387, 0x02e9c387, 0x04e9c387,\n  0x06e9c387, 0x08e9c387, 0x0ae9c387, 0x0ce9c387, 0x0ee9c387, 0x00edc387,\n  0x02edc387, 0x04edc387, 0x06edc387, 0x08edc387, 0x0aedc387, 0x0cedc387,\n  0x0eedc387, 0x00f1c387, 0x02f1c387, 0x04f1c387, 0x06f1c387, 0x08f1c387,\n  0x0af1c387, 0x0cf1c387, 0x0ef1c387, 0x00f5c387, 0x02f5c387, 0x04f5c387,\n  0x06f5c387, 0x08f5c387, 0x0af5c387, 0x0cf5c387, 0x0ef5c387, 0x00f9c387,\n  0x02f9c387, 0x04f9c387, 0x06f9c387, 0x08f9c387, 0x0af9c387, 0x0cf9c387,\n  0x0ef9c387, 0x00fdc387, 0x02fdc387, 0x04fdc387, 0x06fdc387, 0x08fdc387,\n  0x0afdc387, 0x0cfdc387, 0x0efdc387, 0x00e1cb87, 0x02e1cb87, 0x04e1cb87,\n  0x06e1cb87, 0x08e1cb87, 0x0ae1cb87, 0x0ce1cb87, 0x0ee1cb87, 0x00e5cb87,\n  0x02e5cb87, 0x04e5cb87, 0x06e5cb87, 0x08e5cb87, 0x0ae5cb87, 0x0ce5cb87,\n  0x0ee5cb87, 0x00e9cb87, 0x02e9cb87, 0x04e9cb87, 0x06e9cb87, 0x08e9cb87,\n  0x0ae9cb87, 0x0ce9cb87, 0x0ee9cb87, 0x00edcb87, 0x02edcb87, 0x04edcb87,\n  0x06edcb87, 0x08edcb87, 0x0aedcb87, 0x0cedcb87, 0x0eedcb87, 0x00f1cb87,\n  0x02f1cb87, 0x04f1cb87, 0x06f1cb87, 0x08f1cb87, 0x0af1cb87, 0x0cf1cb87,\n  0x0ef1cb87, 0x00f5cb87, 0x02f5cb87, 0x04f5cb87, 0x06f5cb87, 0x08f5cb87,\n  0x0af5cb87, 0x0cf5cb87, 0x0ef5cb87, 0x00f9cb87, 0x02f9cb87, 0x04f9cb87,\n  0x06f9cb87, 0x08f9cb87,\n};\n\nstatic const BROTLI_MODEL(\"small\")\nuint32_t kZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {\n   0,  4,  8,  7,  7,  7,  7,  7,  7,  7,  7, 11, 14, 14, 14, 14,\n  14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\n  14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\n  14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\n  14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 28, 28, 28, 28, 28,\n  28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n  28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n  28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n  28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n  28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n  28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n  28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n};\n\nstatic const BROTLI_MODEL(\"small\")\nuint64_t kNonZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] = {\n  0x0000000b, 0x0000001b, 0x0000002b, 0x0000003b, 0x000002cb, 0x000006cb,\n  0x00000acb, 0x00000ecb, 0x000002db, 0x000006db, 0x00000adb, 0x00000edb,\n  0x000002eb, 0x000006eb, 0x00000aeb, 0x00000eeb, 0x000002fb, 0x000006fb,\n  0x00000afb, 0x00000efb, 0x0000b2cb, 0x0001b2cb, 0x0002b2cb, 0x0003b2cb,\n  0x0000b6cb, 0x0001b6cb, 0x0002b6cb, 0x0003b6cb, 0x0000bacb, 0x0001bacb,\n  0x0002bacb, 0x0003bacb, 0x0000becb, 0x0001becb, 0x0002becb, 0x0003becb,\n  0x0000b2db, 0x0001b2db, 0x0002b2db, 0x0003b2db, 0x0000b6db, 0x0001b6db,\n  0x0002b6db, 0x0003b6db, 0x0000badb, 0x0001badb, 0x0002badb, 0x0003badb,\n  0x0000bedb, 0x0001bedb, 0x0002bedb, 0x0003bedb, 0x0000b2eb, 0x0001b2eb,\n  0x0002b2eb, 0x0003b2eb, 0x0000b6eb, 0x0001b6eb, 0x0002b6eb, 0x0003b6eb,\n  0x0000baeb, 0x0001baeb, 0x0002baeb, 0x0003baeb, 0x0000beeb, 0x0001beeb,\n  0x0002beeb, 0x0003beeb, 0x0000b2fb, 0x0001b2fb, 0x0002b2fb, 0x0003b2fb,\n  0x0000b6fb, 0x0001b6fb, 0x0002b6fb, 0x0003b6fb, 0x0000bafb, 0x0001bafb,\n  0x0002bafb, 0x0003bafb, 0x0000befb, 0x0001befb, 0x0002befb, 0x0003befb,\n  0x002cb2cb, 0x006cb2cb, 0x00acb2cb, 0x00ecb2cb, 0x002db2cb, 0x006db2cb,\n  0x00adb2cb, 0x00edb2cb, 0x002eb2cb, 0x006eb2cb, 0x00aeb2cb, 0x00eeb2cb,\n  0x002fb2cb, 0x006fb2cb, 0x00afb2cb, 0x00efb2cb, 0x002cb6cb, 0x006cb6cb,\n  0x00acb6cb, 0x00ecb6cb, 0x002db6cb, 0x006db6cb, 0x00adb6cb, 0x00edb6cb,\n  0x002eb6cb, 0x006eb6cb, 0x00aeb6cb, 0x00eeb6cb, 0x002fb6cb, 0x006fb6cb,\n  0x00afb6cb, 0x00efb6cb, 0x002cbacb, 0x006cbacb, 0x00acbacb, 0x00ecbacb,\n  0x002dbacb, 0x006dbacb, 0x00adbacb, 0x00edbacb, 0x002ebacb, 0x006ebacb,\n  0x00aebacb, 0x00eebacb, 0x002fbacb, 0x006fbacb, 0x00afbacb, 0x00efbacb,\n  0x002cbecb, 0x006cbecb, 0x00acbecb, 0x00ecbecb, 0x002dbecb, 0x006dbecb,\n  0x00adbecb, 0x00edbecb, 0x002ebecb, 0x006ebecb, 0x00aebecb, 0x00eebecb,\n  0x002fbecb, 0x006fbecb, 0x00afbecb, 0x00efbecb, 0x002cb2db, 0x006cb2db,\n  0x00acb2db, 0x00ecb2db, 0x002db2db, 0x006db2db, 0x00adb2db, 0x00edb2db,\n  0x002eb2db, 0x006eb2db, 0x00aeb2db, 0x00eeb2db, 0x002fb2db, 0x006fb2db,\n  0x00afb2db, 0x00efb2db, 0x002cb6db, 0x006cb6db, 0x00acb6db, 0x00ecb6db,\n  0x002db6db, 0x006db6db, 0x00adb6db, 0x00edb6db, 0x002eb6db, 0x006eb6db,\n  0x00aeb6db, 0x00eeb6db, 0x002fb6db, 0x006fb6db, 0x00afb6db, 0x00efb6db,\n  0x002cbadb, 0x006cbadb, 0x00acbadb, 0x00ecbadb, 0x002dbadb, 0x006dbadb,\n  0x00adbadb, 0x00edbadb, 0x002ebadb, 0x006ebadb, 0x00aebadb, 0x00eebadb,\n  0x002fbadb, 0x006fbadb, 0x00afbadb, 0x00efbadb, 0x002cbedb, 0x006cbedb,\n  0x00acbedb, 0x00ecbedb, 0x002dbedb, 0x006dbedb, 0x00adbedb, 0x00edbedb,\n  0x002ebedb, 0x006ebedb, 0x00aebedb, 0x00eebedb, 0x002fbedb, 0x006fbedb,\n  0x00afbedb, 0x00efbedb, 0x002cb2eb, 0x006cb2eb, 0x00acb2eb, 0x00ecb2eb,\n  0x002db2eb, 0x006db2eb, 0x00adb2eb, 0x00edb2eb, 0x002eb2eb, 0x006eb2eb,\n  0x00aeb2eb, 0x00eeb2eb, 0x002fb2eb, 0x006fb2eb, 0x00afb2eb, 0x00efb2eb,\n  0x002cb6eb, 0x006cb6eb, 0x00acb6eb, 0x00ecb6eb, 0x002db6eb, 0x006db6eb,\n  0x00adb6eb, 0x00edb6eb, 0x002eb6eb, 0x006eb6eb, 0x00aeb6eb, 0x00eeb6eb,\n  0x002fb6eb, 0x006fb6eb, 0x00afb6eb, 0x00efb6eb, 0x002cbaeb, 0x006cbaeb,\n  0x00acbaeb, 0x00ecbaeb, 0x002dbaeb, 0x006dbaeb, 0x00adbaeb, 0x00edbaeb,\n  0x002ebaeb, 0x006ebaeb, 0x00aebaeb, 0x00eebaeb, 0x002fbaeb, 0x006fbaeb,\n  0x00afbaeb, 0x00efbaeb, 0x002cbeeb, 0x006cbeeb, 0x00acbeeb, 0x00ecbeeb,\n  0x002dbeeb, 0x006dbeeb, 0x00adbeeb, 0x00edbeeb, 0x002ebeeb, 0x006ebeeb,\n  0x00aebeeb, 0x00eebeeb, 0x002fbeeb, 0x006fbeeb, 0x00afbeeb, 0x00efbeeb,\n  0x002cb2fb, 0x006cb2fb, 0x00acb2fb, 0x00ecb2fb, 0x002db2fb, 0x006db2fb,\n  0x00adb2fb, 0x00edb2fb, 0x002eb2fb, 0x006eb2fb, 0x00aeb2fb, 0x00eeb2fb,\n  0x002fb2fb, 0x006fb2fb, 0x00afb2fb, 0x00efb2fb, 0x002cb6fb, 0x006cb6fb,\n  0x00acb6fb, 0x00ecb6fb, 0x002db6fb, 0x006db6fb, 0x00adb6fb, 0x00edb6fb,\n  0x002eb6fb, 0x006eb6fb, 0x00aeb6fb, 0x00eeb6fb, 0x002fb6fb, 0x006fb6fb,\n  0x00afb6fb, 0x00efb6fb, 0x002cbafb, 0x006cbafb, 0x00acbafb, 0x00ecbafb,\n  0x002dbafb, 0x006dbafb, 0x00adbafb, 0x00edbafb, 0x002ebafb, 0x006ebafb,\n  0x00aebafb, 0x00eebafb, 0x002fbafb, 0x006fbafb, 0x00afbafb, 0x00efbafb,\n  0x002cbefb, 0x006cbefb, 0x00acbefb, 0x00ecbefb, 0x002dbefb, 0x006dbefb,\n  0x00adbefb, 0x00edbefb, 0x002ebefb, 0x006ebefb, 0x00aebefb, 0x00eebefb,\n  0x002fbefb, 0x006fbefb, 0x00afbefb, 0x00efbefb, 0x0b2cb2cb, 0x1b2cb2cb,\n  0x2b2cb2cb, 0x3b2cb2cb, 0x0b6cb2cb, 0x1b6cb2cb, 0x2b6cb2cb, 0x3b6cb2cb,\n  0x0bacb2cb, 0x1bacb2cb, 0x2bacb2cb, 0x3bacb2cb, 0x0becb2cb, 0x1becb2cb,\n  0x2becb2cb, 0x3becb2cb, 0x0b2db2cb, 0x1b2db2cb, 0x2b2db2cb, 0x3b2db2cb,\n  0x0b6db2cb, 0x1b6db2cb, 0x2b6db2cb, 0x3b6db2cb, 0x0badb2cb, 0x1badb2cb,\n  0x2badb2cb, 0x3badb2cb, 0x0bedb2cb, 0x1bedb2cb, 0x2bedb2cb, 0x3bedb2cb,\n  0x0b2eb2cb, 0x1b2eb2cb, 0x2b2eb2cb, 0x3b2eb2cb, 0x0b6eb2cb, 0x1b6eb2cb,\n  0x2b6eb2cb, 0x3b6eb2cb, 0x0baeb2cb, 0x1baeb2cb, 0x2baeb2cb, 0x3baeb2cb,\n  0x0beeb2cb, 0x1beeb2cb, 0x2beeb2cb, 0x3beeb2cb, 0x0b2fb2cb, 0x1b2fb2cb,\n  0x2b2fb2cb, 0x3b2fb2cb, 0x0b6fb2cb, 0x1b6fb2cb, 0x2b6fb2cb, 0x3b6fb2cb,\n  0x0bafb2cb, 0x1bafb2cb, 0x2bafb2cb, 0x3bafb2cb, 0x0befb2cb, 0x1befb2cb,\n  0x2befb2cb, 0x3befb2cb, 0x0b2cb6cb, 0x1b2cb6cb, 0x2b2cb6cb, 0x3b2cb6cb,\n  0x0b6cb6cb, 0x1b6cb6cb, 0x2b6cb6cb, 0x3b6cb6cb, 0x0bacb6cb, 0x1bacb6cb,\n  0x2bacb6cb, 0x3bacb6cb, 0x0becb6cb, 0x1becb6cb, 0x2becb6cb, 0x3becb6cb,\n  0x0b2db6cb, 0x1b2db6cb, 0x2b2db6cb, 0x3b2db6cb, 0x0b6db6cb, 0x1b6db6cb,\n  0x2b6db6cb, 0x3b6db6cb, 0x0badb6cb, 0x1badb6cb, 0x2badb6cb, 0x3badb6cb,\n  0x0bedb6cb, 0x1bedb6cb, 0x2bedb6cb, 0x3bedb6cb, 0x0b2eb6cb, 0x1b2eb6cb,\n  0x2b2eb6cb, 0x3b2eb6cb, 0x0b6eb6cb, 0x1b6eb6cb, 0x2b6eb6cb, 0x3b6eb6cb,\n  0x0baeb6cb, 0x1baeb6cb, 0x2baeb6cb, 0x3baeb6cb, 0x0beeb6cb, 0x1beeb6cb,\n  0x2beeb6cb, 0x3beeb6cb, 0x0b2fb6cb, 0x1b2fb6cb, 0x2b2fb6cb, 0x3b2fb6cb,\n  0x0b6fb6cb, 0x1b6fb6cb, 0x2b6fb6cb, 0x3b6fb6cb, 0x0bafb6cb, 0x1bafb6cb,\n  0x2bafb6cb, 0x3bafb6cb, 0x0befb6cb, 0x1befb6cb, 0x2befb6cb, 0x3befb6cb,\n  0x0b2cbacb, 0x1b2cbacb, 0x2b2cbacb, 0x3b2cbacb, 0x0b6cbacb, 0x1b6cbacb,\n  0x2b6cbacb, 0x3b6cbacb, 0x0bacbacb, 0x1bacbacb, 0x2bacbacb, 0x3bacbacb,\n  0x0becbacb, 0x1becbacb, 0x2becbacb, 0x3becbacb, 0x0b2dbacb, 0x1b2dbacb,\n  0x2b2dbacb, 0x3b2dbacb, 0x0b6dbacb, 0x1b6dbacb, 0x2b6dbacb, 0x3b6dbacb,\n  0x0badbacb, 0x1badbacb, 0x2badbacb, 0x3badbacb, 0x0bedbacb, 0x1bedbacb,\n  0x2bedbacb, 0x3bedbacb, 0x0b2ebacb, 0x1b2ebacb, 0x2b2ebacb, 0x3b2ebacb,\n  0x0b6ebacb, 0x1b6ebacb, 0x2b6ebacb, 0x3b6ebacb, 0x0baebacb, 0x1baebacb,\n  0x2baebacb, 0x3baebacb, 0x0beebacb, 0x1beebacb, 0x2beebacb, 0x3beebacb,\n  0x0b2fbacb, 0x1b2fbacb, 0x2b2fbacb, 0x3b2fbacb, 0x0b6fbacb, 0x1b6fbacb,\n  0x2b6fbacb, 0x3b6fbacb, 0x0bafbacb, 0x1bafbacb, 0x2bafbacb, 0x3bafbacb,\n  0x0befbacb, 0x1befbacb, 0x2befbacb, 0x3befbacb, 0x0b2cbecb, 0x1b2cbecb,\n  0x2b2cbecb, 0x3b2cbecb, 0x0b6cbecb, 0x1b6cbecb, 0x2b6cbecb, 0x3b6cbecb,\n  0x0bacbecb, 0x1bacbecb, 0x2bacbecb, 0x3bacbecb, 0x0becbecb, 0x1becbecb,\n  0x2becbecb, 0x3becbecb, 0x0b2dbecb, 0x1b2dbecb, 0x2b2dbecb, 0x3b2dbecb,\n  0x0b6dbecb, 0x1b6dbecb, 0x2b6dbecb, 0x3b6dbecb, 0x0badbecb, 0x1badbecb,\n  0x2badbecb, 0x3badbecb, 0x0bedbecb, 0x1bedbecb, 0x2bedbecb, 0x3bedbecb,\n  0x0b2ebecb, 0x1b2ebecb, 0x2b2ebecb, 0x3b2ebecb, 0x0b6ebecb, 0x1b6ebecb,\n  0x2b6ebecb, 0x3b6ebecb, 0x0baebecb, 0x1baebecb, 0x2baebecb, 0x3baebecb,\n  0x0beebecb, 0x1beebecb, 0x2beebecb, 0x3beebecb, 0x0b2fbecb, 0x1b2fbecb,\n  0x2b2fbecb, 0x3b2fbecb, 0x0b6fbecb, 0x1b6fbecb, 0x2b6fbecb, 0x3b6fbecb,\n  0x0bafbecb, 0x1bafbecb, 0x2bafbecb, 0x3bafbecb, 0x0befbecb, 0x1befbecb,\n  0x2befbecb, 0x3befbecb, 0x0b2cb2db, 0x1b2cb2db, 0x2b2cb2db, 0x3b2cb2db,\n  0x0b6cb2db, 0x1b6cb2db, 0x2b6cb2db, 0x3b6cb2db, 0x0bacb2db, 0x1bacb2db,\n  0x2bacb2db, 0x3bacb2db, 0x0becb2db, 0x1becb2db, 0x2becb2db, 0x3becb2db,\n  0x0b2db2db, 0x1b2db2db, 0x2b2db2db, 0x3b2db2db, 0x0b6db2db, 0x1b6db2db,\n  0x2b6db2db, 0x3b6db2db, 0x0badb2db, 0x1badb2db, 0x2badb2db, 0x3badb2db,\n  0x0bedb2db, 0x1bedb2db, 0x2bedb2db, 0x3bedb2db, 0x0b2eb2db, 0x1b2eb2db,\n  0x2b2eb2db, 0x3b2eb2db, 0x0b6eb2db, 0x1b6eb2db, 0x2b6eb2db, 0x3b6eb2db,\n  0x0baeb2db, 0x1baeb2db, 0x2baeb2db, 0x3baeb2db, 0x0beeb2db, 0x1beeb2db,\n  0x2beeb2db, 0x3beeb2db, 0x0b2fb2db, 0x1b2fb2db, 0x2b2fb2db, 0x3b2fb2db,\n  0x0b6fb2db, 0x1b6fb2db, 0x2b6fb2db, 0x3b6fb2db, 0x0bafb2db, 0x1bafb2db,\n  0x2bafb2db, 0x3bafb2db, 0x0befb2db, 0x1befb2db, 0x2befb2db, 0x3befb2db,\n  0x0b2cb6db, 0x1b2cb6db, 0x2b2cb6db, 0x3b2cb6db, 0x0b6cb6db, 0x1b6cb6db,\n  0x2b6cb6db, 0x3b6cb6db, 0x0bacb6db, 0x1bacb6db, 0x2bacb6db, 0x3bacb6db,\n  0x0becb6db, 0x1becb6db, 0x2becb6db, 0x3becb6db, 0x0b2db6db, 0x1b2db6db,\n  0x2b2db6db, 0x3b2db6db, 0x0b6db6db, 0x1b6db6db, 0x2b6db6db, 0x3b6db6db,\n  0x0badb6db, 0x1badb6db, 0x2badb6db, 0x3badb6db, 0x0bedb6db, 0x1bedb6db,\n  0x2bedb6db, 0x3bedb6db, 0x0b2eb6db, 0x1b2eb6db, 0x2b2eb6db, 0x3b2eb6db,\n  0x0b6eb6db, 0x1b6eb6db, 0x2b6eb6db, 0x3b6eb6db, 0x0baeb6db, 0x1baeb6db,\n  0x2baeb6db, 0x3baeb6db,\n};\n\nstatic const BROTLI_MODEL(\"small\")\nuint32_t kNonZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {\n   6,  6,  6,  6, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,\n  12, 12, 12, 12, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,\n  18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,\n  18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,\n  18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,\n  18, 18, 18, 18, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n};\n\nstatic const BROTLI_MODEL(\"small\")\nuint16_t kStaticCommandCodeBits[BROTLI_NUM_COMMAND_SYMBOLS] = {\n    0,  256,  128,  384,   64,  320,  192,  448,\n   32,  288,  160,  416,   96,  352,  224,  480,\n   16,  272,  144,  400,   80,  336,  208,  464,\n   48,  304,  176,  432,  112,  368,  240,  496,\n    8,  264,  136,  392,   72,  328,  200,  456,\n   40,  296,  168,  424,  104,  360,  232,  488,\n   24,  280,  152,  408,   88,  344,  216,  472,\n   56,  312,  184,  440,  120,  376,  248,  504,\n    4,  260,  132,  388,   68,  324,  196,  452,\n   36,  292,  164,  420,  100,  356,  228,  484,\n   20,  276,  148,  404,   84,  340,  212,  468,\n   52,  308,  180,  436,  116,  372,  244,  500,\n   12,  268,  140,  396,   76,  332,  204,  460,\n   44,  300,  172,  428,  108,  364,  236,  492,\n   28,  284,  156,  412,   92,  348,  220,  476,\n   60,  316,  188,  444,  124,  380,  252,  508,\n    2,  258,  130,  386,   66,  322,  194,  450,\n   34,  290,  162,  418,   98,  354,  226,  482,\n   18,  274,  146,  402,   82,  338,  210,  466,\n   50,  306,  178,  434,  114,  370,  242,  498,\n   10,  266,  138,  394,   74,  330,  202,  458,\n   42,  298,  170,  426,  106,  362,  234,  490,\n   26,  282,  154,  410,   90,  346,  218,  474,\n   58,  314,  186,  442,  122,  378,  250,  506,\n    6,  262,  134,  390,   70,  326,  198,  454,\n   38,  294,  166,  422,  102,  358,  230,  486,\n   22,  278,  150,  406,   86,  342,  214,  470,\n   54,  310,  182,  438,  118,  374,  246,  502,\n   14,  270,  142,  398,   78,  334,  206,  462,\n   46,  302,  174,  430,  110,  366,  238,  494,\n   30,  286,  158,  414,   94,  350,  222,  478,\n   62,  318,  190,  446,  126,  382,  254,  510,\n    1,  257,  129,  385,   65,  321,  193,  449,\n   33,  289,  161,  417,   97,  353,  225,  481,\n   17,  273,  145,  401,   81,  337,  209,  465,\n   49,  305,  177,  433,  113,  369,  241,  497,\n    9,  265,  137,  393,   73,  329,  201,  457,\n   41,  297,  169,  425,  105,  361,  233,  489,\n   25,  281,  153,  409,   89,  345,  217,  473,\n   57,  313,  185,  441,  121,  377,  249,  505,\n    5,  261,  133,  389,   69,  325,  197,  453,\n   37,  293,  165,  421,  101,  357,  229,  485,\n   21,  277,  149,  405,   85,  341,  213,  469,\n   53,  309,  181,  437,  117,  373,  245,  501,\n   13,  269,  141,  397,   77,  333,  205,  461,\n   45,  301,  173,  429,  109,  365,  237,  493,\n   29,  285,  157,  413,   93,  349,  221,  477,\n   61,  317,  189,  445,  125,  381,  253,  509,\n    3,  259,  131,  387,   67,  323,  195,  451,\n   35,  291,  163,  419,   99,  355,  227,  483,\n   19,  275,  147,  403,   83,  339,  211,  467,\n   51,  307,  179,  435,  115,  371,  243,  499,\n   11,  267,  139,  395,   75,  331,  203,  459,\n   43,  299,  171,  427,  107,  363,  235,  491,\n   27,  283,  155,  411,   91,  347,  219,  475,\n   59,  315,  187,  443,  123,  379,  251,  507,\n    7, 1031,  519, 1543,  263, 1287,  775, 1799,\n  135, 1159,  647, 1671,  391, 1415,  903, 1927,\n   71, 1095,  583, 1607,  327, 1351,  839, 1863,\n  199, 1223,  711, 1735,  455, 1479,  967, 1991,\n   39, 1063,  551, 1575,  295, 1319,  807, 1831,\n  167, 1191,  679, 1703,  423, 1447,  935, 1959,\n  103, 1127,  615, 1639,  359, 1383,  871, 1895,\n  231, 1255,  743, 1767,  487, 1511,  999, 2023,\n   23, 1047,  535, 1559,  279, 1303,  791, 1815,\n  151, 1175,  663, 1687,  407, 1431,  919, 1943,\n   87, 1111,  599, 1623,  343, 1367,  855, 1879,\n  215, 1239,  727, 1751,  471, 1495,  983, 2007,\n   55, 1079,  567, 1591,  311, 1335,  823, 1847,\n  183, 1207,  695, 1719,  439, 1463,  951, 1975,\n  119, 1143,  631, 1655,  375, 1399,  887, 1911,\n  247, 1271,  759, 1783,  503, 1527, 1015, 2039,\n   15, 1039,  527, 1551,  271, 1295,  783, 1807,\n  143, 1167,  655, 1679,  399, 1423,  911, 1935,\n   79, 1103,  591, 1615,  335, 1359,  847, 1871,\n  207, 1231,  719, 1743,  463, 1487,  975, 1999,\n   47, 1071,  559, 1583,  303, 1327,  815, 1839,\n  175, 1199,  687, 1711,  431, 1455,  943, 1967,\n  111, 1135,  623, 1647,  367, 1391,  879, 1903,\n  239, 1263,  751, 1775,  495, 1519, 1007, 2031,\n   31, 1055,  543, 1567,  287, 1311,  799, 1823,\n  159, 1183,  671, 1695,  415, 1439,  927, 1951,\n   95, 1119,  607, 1631,  351, 1375,  863, 1887,\n  223, 1247,  735, 1759,  479, 1503,  991, 2015,\n   63, 1087,  575, 1599,  319, 1343,  831, 1855,\n  191, 1215,  703, 1727,  447, 1471,  959, 1983,\n  127, 1151,  639, 1663,  383, 1407,  895, 1919,\n  255, 1279,  767, 1791,  511, 1535, 1023, 2047,\n};\n\nstatic BROTLI_INLINE void StoreStaticCommandHuffmanTree(\n    size_t* storage_ix, uint8_t* storage) {\n  BrotliWriteBits(\n      56, BROTLI_MAKE_UINT64_T(0x926244U, 0x16307003U), storage_ix, storage);\n  BrotliWriteBits(3, 0x00000000U, storage_ix, storage);\n}\n\nstatic const BROTLI_MODEL(\"small\") uint16_t kStaticDistanceCodeBits[64] = {\n   0, 32, 16, 48,  8, 40, 24, 56,  4, 36, 20, 52, 12, 44, 28, 60,\n   2, 34, 18, 50, 10, 42, 26, 58,  6, 38, 22, 54, 14, 46, 30, 62,\n   1, 33, 17, 49,  9, 41, 25, 57,  5, 37, 21, 53, 13, 45, 29, 61,\n   3, 35, 19, 51, 11, 43, 27, 59,  7, 39, 23, 55, 15, 47, 31, 63,\n};\n\nstatic BROTLI_INLINE void StoreStaticDistanceHuffmanTree(\n    size_t* storage_ix, uint8_t* storage) {\n  BrotliWriteBits(28, 0x0369DC03u, storage_ix, storage);\n}\n/* GENERATED CODE END */\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_ */\n"
  },
  {
    "path": "c/enc/fast_log.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"fast_log.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* \", \".join([\"%.16ff\" % x for x in [0.0]+[log2(x) for x in range(1, 256)]]) */\nconst BROTLI_MODEL(\"small\") double kBrotliLog2Table[BROTLI_LOG2_TABLE_SIZE] = {\n  0.0000000000000000f, 0.0000000000000000f, 1.0000000000000000f,\n  1.5849625007211563f, 2.0000000000000000f, 2.3219280948873622f,\n  2.5849625007211561f, 2.8073549220576042f, 3.0000000000000000f,\n  3.1699250014423126f, 3.3219280948873626f, 3.4594316186372978f,\n  3.5849625007211565f, 3.7004397181410922f, 3.8073549220576037f,\n  3.9068905956085187f, 4.0000000000000000f, 4.0874628412503400f,\n  4.1699250014423122f, 4.2479275134435852f, 4.3219280948873626f,\n  4.3923174227787607f, 4.4594316186372973f, 4.5235619560570131f,\n  4.5849625007211570f, 4.6438561897747244f, 4.7004397181410926f,\n  4.7548875021634691f, 4.8073549220576037f, 4.8579809951275728f,\n  4.9068905956085187f, 4.9541963103868758f, 5.0000000000000000f,\n  5.0443941193584534f, 5.0874628412503400f, 5.1292830169449664f,\n  5.1699250014423122f, 5.2094533656289501f, 5.2479275134435852f,\n  5.2854022188622487f, 5.3219280948873626f, 5.3575520046180838f,\n  5.3923174227787607f, 5.4262647547020979f, 5.4594316186372973f,\n  5.4918530963296748f, 5.5235619560570131f, 5.5545888516776376f,\n  5.5849625007211570f, 5.6147098441152083f, 5.6438561897747244f,\n  5.6724253419714961f, 5.7004397181410926f, 5.7279204545631996f,\n  5.7548875021634691f, 5.7813597135246599f, 5.8073549220576046f,\n  5.8328900141647422f, 5.8579809951275719f, 5.8826430493618416f,\n  5.9068905956085187f, 5.9307373375628867f, 5.9541963103868758f,\n  5.9772799234999168f, 6.0000000000000000f, 6.0223678130284544f,\n  6.0443941193584534f, 6.0660891904577721f, 6.0874628412503400f,\n  6.1085244567781700f, 6.1292830169449672f, 6.1497471195046822f,\n  6.1699250014423122f, 6.1898245588800176f, 6.2094533656289510f,\n  6.2288186904958804f, 6.2479275134435861f, 6.2667865406949019f,\n  6.2854022188622487f, 6.3037807481771031f, 6.3219280948873617f,\n  6.3398500028846252f, 6.3575520046180847f, 6.3750394313469254f,\n  6.3923174227787598f, 6.4093909361377026f, 6.4262647547020979f,\n  6.4429434958487288f, 6.4594316186372982f, 6.4757334309663976f,\n  6.4918530963296748f, 6.5077946401986964f, 6.5235619560570131f,\n  6.5391588111080319f, 6.5545888516776376f, 6.5698556083309478f,\n  6.5849625007211561f, 6.5999128421871278f, 6.6147098441152092f,\n  6.6293566200796095f, 6.6438561897747253f, 6.6582114827517955f,\n  6.6724253419714952f, 6.6865005271832185f, 6.7004397181410917f,\n  6.7142455176661224f, 6.7279204545631988f, 6.7414669864011465f,\n  6.7548875021634691f, 6.7681843247769260f, 6.7813597135246599f,\n  6.7944158663501062f, 6.8073549220576037f, 6.8201789624151887f,\n  6.8328900141647422f, 6.8454900509443757f, 6.8579809951275719f,\n  6.8703647195834048f, 6.8826430493618416f, 6.8948177633079437f,\n  6.9068905956085187f, 6.9188632372745955f, 6.9307373375628867f,\n  6.9425145053392399f, 6.9541963103868758f, 6.9657842846620879f,\n  6.9772799234999168f, 6.9886846867721664f, 7.0000000000000000f,\n  7.0112272554232540f, 7.0223678130284544f, 7.0334230015374501f,\n  7.0443941193584534f, 7.0552824355011898f, 7.0660891904577721f,\n  7.0768155970508317f, 7.0874628412503400f, 7.0980320829605272f,\n  7.1085244567781700f, 7.1189410727235076f, 7.1292830169449664f,\n  7.1395513523987937f, 7.1497471195046822f, 7.1598713367783891f,\n  7.1699250014423130f, 7.1799090900149345f, 7.1898245588800176f,\n  7.1996723448363644f, 7.2094533656289492f, 7.2191685204621621f,\n  7.2288186904958804f, 7.2384047393250794f, 7.2479275134435861f,\n  7.2573878426926521f, 7.2667865406949019f, 7.2761244052742384f,\n  7.2854022188622487f, 7.2946207488916270f, 7.3037807481771031f,\n  7.3128829552843557f, 7.3219280948873617f, 7.3309168781146177f,\n  7.3398500028846243f, 7.3487281542310781f, 7.3575520046180847f,\n  7.3663222142458151f, 7.3750394313469254f, 7.3837042924740528f,\n  7.3923174227787607f, 7.4008794362821844f, 7.4093909361377026f,\n  7.4178525148858991f, 7.4262647547020979f, 7.4346282276367255f,\n  7.4429434958487288f, 7.4512111118323299f, 7.4594316186372973f,\n  7.4676055500829976f, 7.4757334309663976f, 7.4838157772642564f,\n  7.4918530963296748f, 7.4998458870832057f, 7.5077946401986964f,\n  7.5156998382840436f, 7.5235619560570131f, 7.5313814605163119f,\n  7.5391588111080319f, 7.5468944598876373f, 7.5545888516776376f,\n  7.5622424242210728f, 7.5698556083309478f, 7.5774288280357487f,\n  7.5849625007211561f, 7.5924570372680806f, 7.5999128421871278f,\n  7.6073303137496113f, 7.6147098441152075f, 7.6220518194563764f,\n  7.6293566200796095f, 7.6366246205436488f, 7.6438561897747244f,\n  7.6510516911789290f, 7.6582114827517955f, 7.6653359171851765f,\n  7.6724253419714952f, 7.6794800995054464f, 7.6865005271832185f,\n  7.6934869574993252f, 7.7004397181410926f, 7.7073591320808825f,\n  7.7142455176661224f, 7.7210991887071856f, 7.7279204545631996f,\n  7.7347096202258392f, 7.7414669864011465f, 7.7481928495894596f,\n  7.7548875021634691f, 7.7615512324444795f, 7.7681843247769260f,\n  7.7747870596011737f, 7.7813597135246608f, 7.7879025593914317f,\n  7.7944158663501062f, 7.8008998999203047f, 7.8073549220576037f,\n  7.8137811912170374f, 7.8201789624151887f, 7.8265484872909159f,\n  7.8328900141647422f, 7.8392037880969445f, 7.8454900509443757f,\n  7.8517490414160571f, 7.8579809951275719f, 7.8641861446542798f,\n  7.8703647195834048f, 7.8765169465650002f, 7.8826430493618425f,\n  7.8887432488982601f, 7.8948177633079446f, 7.9008668079807496f,\n  7.9068905956085187f, 7.9128893362299619f, 7.9188632372745955f,\n  7.9248125036057813f, 7.9307373375628867f, 7.9366379390025719f,\n  7.9425145053392399f, 7.9483672315846778f, 7.9541963103868758f,\n  7.9600019320680806f, 7.9657842846620870f, 7.9715435539507720f,\n  7.9772799234999168f, 7.9829935746943104f, 7.9886846867721664f,\n  7.9943534368588578f\n};\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/fast_log.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Utilities for fast computation of logarithms. */\n\n#ifndef BROTLI_ENC_FAST_LOG_H_\n#define BROTLI_ENC_FAST_LOG_H_\n\n#include <math.h>\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstatic BROTLI_INLINE uint32_t Log2FloorNonZero(size_t n) {\n#if defined(BROTLI_BSR32)\n  return BROTLI_BSR32((uint32_t)n);\n#else\n  uint32_t result = 0;\n  while (n >>= 1) result++;\n  return result;\n#endif\n}\n\n#define BROTLI_LOG2_TABLE_SIZE 256\n\n/* A lookup table for small values of log2(int) to be used in entropy\n   computation. */\nBROTLI_INTERNAL extern const BROTLI_MODEL(\"small\")\ndouble kBrotliLog2Table[BROTLI_LOG2_TABLE_SIZE];\n\n/* Visual Studio 2012 and Android API levels < 18 do not have the log2()\n * function defined, so we use log() and a multiplication instead. */\n#if !defined(BROTLI_HAVE_LOG2)\n#if ((defined(_MSC_VER) && _MSC_VER <= 1700) || \\\n     (defined(__ANDROID_API__) && __ANDROID_API__ < 18))\n#define BROTLI_HAVE_LOG2 0\n#else\n#define BROTLI_HAVE_LOG2 1\n#endif\n#endif\n\n#define LOG_2_INV 1.4426950408889634\n\n/* Faster logarithm for small integers, with the property of log2(0) == 0. */\nstatic BROTLI_INLINE double FastLog2(size_t v) {\n  if (v < BROTLI_LOG2_TABLE_SIZE) {\n    return kBrotliLog2Table[v];\n  }\n#if !(BROTLI_HAVE_LOG2)\n  return log((double)v) * LOG_2_INV;\n#else\n  return log2((double)v);\n#endif\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_FAST_LOG_H_ */\n"
  },
  {
    "path": "c/enc/find_match_length.h",
    "content": "/* Copyright 2010 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Function to find maximal matching prefixes of strings. */\n\n#ifndef BROTLI_ENC_FIND_MATCH_LENGTH_H_\n#define BROTLI_ENC_FIND_MATCH_LENGTH_H_\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* Separate implementation for little-endian 64-bit targets, for speed. */\n#if defined(BROTLI_TZCNT64) && BROTLI_64_BITS && BROTLI_LITTLE_ENDIAN\nstatic BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1,\n                                                     const uint8_t* s2,\n                                                     size_t limit) {\n  const uint8_t *s1_orig = s1;\n  for (; limit >= 8; limit -= 8) {\n    uint64_t x = BROTLI_UNALIGNED_LOAD64LE(s2) ^\n                 BROTLI_UNALIGNED_LOAD64LE(s1);\n    s2 += 8;\n    if (x != 0) {\n      size_t matching_bits = (size_t)BROTLI_TZCNT64(x);\n      return (size_t)(s1 - s1_orig) + (matching_bits >> 3);\n    }\n    s1 += 8;\n  }\n  while (limit && *s1 == *s2) {\n    limit--;\n    ++s2;\n    ++s1;\n  }\n  return (size_t)(s1 - s1_orig);\n}\n#else\nstatic BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1,\n                                                     const uint8_t* s2,\n                                                     size_t limit) {\n  size_t matched = 0;\n  const uint8_t* s2_limit = s2 + limit;\n  const uint8_t* s2_ptr = s2;\n  /* Find out how long the match is. We loop over the data 32 bits at a\n     time until we find a 32-bit block that doesn't match; then we find\n     the first non-matching bit and use that to calculate the total\n     length of the match. */\n  while (s2_ptr <= s2_limit - 4 &&\n         BrotliUnalignedRead32(s2_ptr) ==\n         BrotliUnalignedRead32(s1 + matched)) {\n    s2_ptr += 4;\n    matched += 4;\n  }\n  while ((s2_ptr < s2_limit) && (s1[matched] == *s2_ptr)) {\n    ++s2_ptr;\n    ++matched;\n  }\n  return matched;\n}\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_FIND_MATCH_LENGTH_H_ */\n"
  },
  {
    "path": "c/enc/hash.h",
    "content": "/* Copyright 2010 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* A (forgetful) hash table to the data seen by the compressor, to\n   help create backward references to previous data. */\n\n#ifndef BROTLI_ENC_HASH_H_\n#define BROTLI_ENC_HASH_H_\n\n#include \"../common/constants.h\"\n#include \"../common/dictionary.h\"\n#include \"../common/platform.h\"\n#include \"compound_dictionary.h\"\n#include \"encoder_dict.h\"\n#include \"fast_log.h\"\n#include \"find_match_length.h\"\n#include \"hash_base.h\"\n#include \"matching_tag_mask.h\"\n#include \"memory.h\"\n#include \"params.h\"\n#include \"quality.h\"\n#include \"static_dict.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\ntypedef struct {\n  /**\n   * Dynamically allocated areas; regular hasher uses one or two allocations;\n   * \"composite\" hasher uses up to 4 allocations.\n   */\n  void* extra[4];\n\n  /**\n   * False before the first invocation of HasherSetup (where \"extra\" memory)\n   * is allocated.\n   */\n  BROTLI_BOOL is_setup_;\n\n  size_t dict_num_lookups;\n  size_t dict_num_matches;\n\n  BrotliHasherParams params;\n\n  /**\n   * False if hasher needs to be \"prepared\" before use (before the first\n   * invocation of HasherSetup or after HasherReset). \"preparation\" is hasher\n   * data initialization (using input ringbuffer).\n   */\n  BROTLI_BOOL is_prepared_;\n} HasherCommon;\n\n#define score_t size_t\n\nstatic const uint32_t kCutoffTransformsCount = 10;\n/*   0,  12,   27,    23,    42,    63,    56,    48,    59,    64 */\n/* 0+0, 4+8, 8+19, 12+11, 16+26, 20+43, 24+32, 28+20, 32+27, 36+28 */\nstatic const uint64_t kCutoffTransforms =\n    BROTLI_MAKE_UINT64_T(0x071B520A, 0xDA2D3200);\n\ntypedef struct HasherSearchResult {\n  size_t len;\n  size_t distance;\n  score_t score;\n  int len_code_delta; /* == len_code - len */\n} HasherSearchResult;\n\nstatic BROTLI_INLINE void PrepareDistanceCache(\n    int* BROTLI_RESTRICT distance_cache, const int num_distances) {\n  if (num_distances > 4) {\n    int last_distance = distance_cache[0];\n    distance_cache[4] = last_distance - 1;\n    distance_cache[5] = last_distance + 1;\n    distance_cache[6] = last_distance - 2;\n    distance_cache[7] = last_distance + 2;\n    distance_cache[8] = last_distance - 3;\n    distance_cache[9] = last_distance + 3;\n    if (num_distances > 10) {\n      int next_last_distance = distance_cache[1];\n      distance_cache[10] = next_last_distance - 1;\n      distance_cache[11] = next_last_distance + 1;\n      distance_cache[12] = next_last_distance - 2;\n      distance_cache[13] = next_last_distance + 2;\n      distance_cache[14] = next_last_distance - 3;\n      distance_cache[15] = next_last_distance + 3;\n    }\n  }\n}\n\n#define BROTLI_LITERAL_BYTE_SCORE 135\n#define BROTLI_DISTANCE_BIT_PENALTY 30\n/* Score must be positive after applying maximal penalty. */\n#define BROTLI_SCORE_BASE (BROTLI_DISTANCE_BIT_PENALTY * 8 * sizeof(size_t))\n\n/* Usually, we always choose the longest backward reference. This function\n   allows for the exception of that rule.\n\n   If we choose a backward reference that is further away, it will\n   usually be coded with more bits. We approximate this by assuming\n   log2(distance). If the distance can be expressed in terms of the\n   last four distances, we use some heuristic constants to estimate\n   the bits cost. For the first up to four literals we use the bit\n   cost of the literals from the literal cost model, after that we\n   use the average bit cost of the cost model.\n\n   This function is used to sometimes discard a longer backward reference\n   when it is not much longer and the bit cost for encoding it is more\n   than the saved literals.\n\n   backward_reference_offset MUST be positive. */\nstatic BROTLI_INLINE score_t BackwardReferenceScore(\n    size_t copy_length, size_t backward_reference_offset) {\n  return BROTLI_SCORE_BASE + BROTLI_LITERAL_BYTE_SCORE * (score_t)copy_length -\n      BROTLI_DISTANCE_BIT_PENALTY * Log2FloorNonZero(backward_reference_offset);\n}\n\nstatic BROTLI_INLINE score_t BackwardReferenceScoreUsingLastDistance(\n    size_t copy_length) {\n  return BROTLI_LITERAL_BYTE_SCORE * (score_t)copy_length +\n      BROTLI_SCORE_BASE + 15;\n}\n\nstatic BROTLI_INLINE score_t BackwardReferencePenaltyUsingLastDistance(\n    size_t distance_short_code) {\n  return (score_t)39 + ((0x1CA10 >> (distance_short_code & 0xE)) & 0xE);\n}\n\nstatic BROTLI_INLINE BROTLI_BOOL TestStaticDictionaryItem(\n    const BrotliEncoderDictionary* dictionary, size_t len, size_t word_idx,\n    const uint8_t* data, size_t max_length, size_t max_backward,\n    size_t max_distance, HasherSearchResult* out) {\n  size_t offset;\n  size_t matchlen;\n  size_t backward;\n  score_t score;\n  offset = dictionary->words->offsets_by_length[len] + len * word_idx;\n  if (len > max_length) {\n    return BROTLI_FALSE;\n  }\n\n  matchlen =\n      FindMatchLengthWithLimit(data, &dictionary->words->data[offset], len);\n  if (matchlen + dictionary->cutoffTransformsCount <= len || matchlen == 0) {\n    return BROTLI_FALSE;\n  }\n  {\n    size_t cut = len - matchlen;\n    size_t transform_id = (cut << 2) +\n        (size_t)((dictionary->cutoffTransforms >> (cut * 6)) & 0x3F);\n    backward = max_backward + 1 + word_idx +\n        (transform_id << dictionary->words->size_bits_by_length[len]);\n  }\n  if (backward > max_distance) {\n    return BROTLI_FALSE;\n  }\n  score = BackwardReferenceScore(matchlen, backward);\n  if (score < out->score) {\n    return BROTLI_FALSE;\n  }\n  out->len = matchlen;\n  out->len_code_delta = (int)len - (int)matchlen;\n  out->distance = backward;\n  out->score = score;\n  return BROTLI_TRUE;\n}\n\nstatic BROTLI_INLINE void SearchInStaticDictionary(\n    const BrotliEncoderDictionary* dictionary,\n    HasherCommon* common, const uint8_t* data, size_t max_length,\n    size_t max_backward, size_t max_distance,\n    HasherSearchResult* out, BROTLI_BOOL shallow) {\n  size_t key;\n  size_t i;\n  if (common->dict_num_matches < (common->dict_num_lookups >> 7)) {\n    return;\n  }\n  key = Hash14(data) << 1;\n  for (i = 0; i < (shallow ? 1u : 2u); ++i, ++key) {\n    common->dict_num_lookups++;\n    if (dictionary->hash_table_lengths[key] != 0) {\n      BROTLI_BOOL item_matches = TestStaticDictionaryItem(\n          dictionary, dictionary->hash_table_lengths[key],\n          dictionary->hash_table_words[key], data,\n          max_length, max_backward, max_distance, out);\n      if (item_matches) {\n        common->dict_num_matches++;\n      }\n    }\n  }\n}\n\ntypedef struct BackwardMatch {\n  uint32_t distance;\n  uint32_t length_and_code;\n} BackwardMatch;\n\nstatic BROTLI_INLINE void InitBackwardMatch(BackwardMatch* self,\n    size_t dist, size_t len) {\n  self->distance = (uint32_t)dist;\n  self->length_and_code = (uint32_t)(len << 5);\n}\n\nstatic BROTLI_INLINE void InitDictionaryBackwardMatch(BackwardMatch* self,\n    size_t dist, size_t len, size_t len_code) {\n  self->distance = (uint32_t)dist;\n  self->length_and_code =\n      (uint32_t)((len << 5) | (len == len_code ? 0 : len_code));\n}\n\nstatic BROTLI_INLINE size_t BackwardMatchLength(const BackwardMatch* self) {\n  return self->length_and_code >> 5;\n}\n\nstatic BROTLI_INLINE size_t BackwardMatchLengthCode(const BackwardMatch* self) {\n  size_t code = self->length_and_code & 31;\n  return code ? code : BackwardMatchLength(self);\n}\n\n#define EXPAND_CAT(a, b) CAT(a, b)\n#define CAT(a, b) a ## b\n#define FN(X) EXPAND_CAT(X, HASHER())\n\n#define HASHER() H10\n#define BUCKET_BITS 17\n#define MAX_TREE_SEARCH_DEPTH 64\n#define MAX_TREE_COMP_LENGTH 128\n#include \"hash_to_binary_tree_inc.h\"  /* NOLINT(build/include) */\n#undef MAX_TREE_SEARCH_DEPTH\n#undef MAX_TREE_COMP_LENGTH\n#undef BUCKET_BITS\n#undef HASHER\n/* MAX_NUM_MATCHES == 64 + MAX_TREE_SEARCH_DEPTH */\n#define MAX_NUM_MATCHES_H10 128\n\n/* For BUCKET_SWEEP_BITS == 0, enabling the dictionary lookup makes compression\n   a little faster (0.5% - 1%) and it compresses 0.15% better on small text\n   and HTML inputs. */\n\n#define HASHER() H2\n#define BUCKET_BITS 16\n#define BUCKET_SWEEP_BITS 0\n#define HASH_LEN 5\n#define USE_DICTIONARY 1\n#include \"hash_longest_match_quickly_inc.h\"  /* NOLINT(build/include) */\n#undef BUCKET_SWEEP_BITS\n#undef USE_DICTIONARY\n#undef HASHER\n\n#define HASHER() H3\n#define BUCKET_SWEEP_BITS 1\n#define USE_DICTIONARY 0\n#include \"hash_longest_match_quickly_inc.h\"  /* NOLINT(build/include) */\n#undef USE_DICTIONARY\n#undef BUCKET_SWEEP_BITS\n#undef BUCKET_BITS\n#undef HASHER\n\n#define HASHER() H4\n#define BUCKET_BITS 17\n#define BUCKET_SWEEP_BITS 2\n#define USE_DICTIONARY 1\n#include \"hash_longest_match_quickly_inc.h\"  /* NOLINT(build/include) */\n#undef USE_DICTIONARY\n#undef HASH_LEN\n#undef BUCKET_SWEEP_BITS\n#undef BUCKET_BITS\n#undef HASHER\n\n#define HASHER() H5\n#include \"hash_longest_match_inc.h\"  /* NOLINT(build/include) */\n#undef HASHER\n\n#define HASHER() H6\n#include \"hash_longest_match64_inc.h\"  /* NOLINT(build/include) */\n#undef HASHER\n\n#if defined(BROTLI_MAX_SIMD_QUALITY)\n#define HASHER() H58\n#include \"hash_longest_match_simd_inc.h\" /* NOLINT(build/include) */\n#undef HASHER\n\n#define HASHER() H68\n#include \"hash_longest_match64_simd_inc.h\" /* NOLINT(build/include) */\n#undef HASHER\n#endif\n\n#define BUCKET_BITS 15\n\n#define NUM_LAST_DISTANCES_TO_CHECK 4\n#define NUM_BANKS 1\n#define BANK_BITS 16\n#define HASHER() H40\n#include \"hash_forgetful_chain_inc.h\"  /* NOLINT(build/include) */\n#undef HASHER\n#undef NUM_LAST_DISTANCES_TO_CHECK\n\n#define NUM_LAST_DISTANCES_TO_CHECK 10\n#define HASHER() H41\n#include \"hash_forgetful_chain_inc.h\"  /* NOLINT(build/include) */\n#undef HASHER\n#undef NUM_LAST_DISTANCES_TO_CHECK\n#undef NUM_BANKS\n#undef BANK_BITS\n\n#define NUM_LAST_DISTANCES_TO_CHECK 16\n#define NUM_BANKS 512\n#define BANK_BITS 9\n#define HASHER() H42\n#include \"hash_forgetful_chain_inc.h\"  /* NOLINT(build/include) */\n#undef HASHER\n#undef NUM_LAST_DISTANCES_TO_CHECK\n#undef NUM_BANKS\n#undef BANK_BITS\n\n#undef BUCKET_BITS\n\n#define HASHER() H54\n#define BUCKET_BITS 20\n#define BUCKET_SWEEP_BITS 2\n#define HASH_LEN 7\n#define USE_DICTIONARY 0\n#include \"hash_longest_match_quickly_inc.h\"  /* NOLINT(build/include) */\n#undef USE_DICTIONARY\n#undef HASH_LEN\n#undef BUCKET_SWEEP_BITS\n#undef BUCKET_BITS\n#undef HASHER\n\n/* fast large window hashers */\n\n#define HASHER() HROLLING_FAST\n#define CHUNKLEN 32\n#define JUMP 4\n#define NUMBUCKETS 16777216\n#define MASK ((NUMBUCKETS * 64) - 1)\n#include \"hash_rolling_inc.h\"  /* NOLINT(build/include) */\n#undef JUMP\n#undef HASHER\n\n\n#define HASHER() HROLLING\n#define JUMP 1\n#include \"hash_rolling_inc.h\"  /* NOLINT(build/include) */\n#undef MASK\n#undef NUMBUCKETS\n#undef JUMP\n#undef CHUNKLEN\n#undef HASHER\n\n#define HASHER() H35\n#define HASHER_A H3\n#define HASHER_B HROLLING_FAST\n#include \"hash_composite_inc.h\"  /* NOLINT(build/include) */\n#undef HASHER_A\n#undef HASHER_B\n#undef HASHER\n\n#define HASHER() H55\n#define HASHER_A H54\n#define HASHER_B HROLLING_FAST\n#include \"hash_composite_inc.h\"  /* NOLINT(build/include) */\n#undef HASHER_A\n#undef HASHER_B\n#undef HASHER\n\n#define HASHER() H65\n#define HASHER_A H6\n#define HASHER_B HROLLING\n#include \"hash_composite_inc.h\"  /* NOLINT(build/include) */\n#undef HASHER_A\n#undef HASHER_B\n#undef HASHER\n\n#undef FN\n#undef CAT\n#undef EXPAND_CAT\n\n#if defined(BROTLI_MAX_SIMD_QUALITY)\n#define FOR_SIMPLE_HASHERS(H) \\\n  H(2) H(3) H(4) H(5) H(6) H(40) H(41) H(42) H(54) H(58) H(68)\n#else\n#define FOR_SIMPLE_HASHERS(H) \\\n  H(2) H(3) H(4) H(5) H(6) H(40) H(41) H(42) H(54)\n#endif\n#define FOR_COMPOSITE_HASHERS(H) H(35) H(55) H(65)\n#define FOR_GENERIC_HASHERS(H) FOR_SIMPLE_HASHERS(H) FOR_COMPOSITE_HASHERS(H)\n#define FOR_ALL_HASHERS(H) FOR_GENERIC_HASHERS(H) H(10)\n\ntypedef struct {\n  HasherCommon common;\n\n  union {\n#define MEMBER_(N) \\\n    H ## N _H ## N;\n    FOR_ALL_HASHERS(MEMBER_)\n#undef MEMBER_\n  } privat;\n} Hasher;\n\n/* MUST be invoked before any other method. */\nstatic BROTLI_INLINE void HasherInit(Hasher* hasher) {\n  hasher->common.is_setup_ = BROTLI_FALSE;\n  hasher->common.extra[0] = NULL;\n  hasher->common.extra[1] = NULL;\n  hasher->common.extra[2] = NULL;\n  hasher->common.extra[3] = NULL;\n}\n\nstatic BROTLI_INLINE void DestroyHasher(MemoryManager* m, Hasher* hasher) {\n  if (hasher->common.extra[0] != NULL) BROTLI_FREE(m, hasher->common.extra[0]);\n  if (hasher->common.extra[1] != NULL) BROTLI_FREE(m, hasher->common.extra[1]);\n  if (hasher->common.extra[2] != NULL) BROTLI_FREE(m, hasher->common.extra[2]);\n  if (hasher->common.extra[3] != NULL) BROTLI_FREE(m, hasher->common.extra[3]);\n}\n\nstatic BROTLI_INLINE void HasherReset(Hasher* hasher) {\n  hasher->common.is_prepared_ = BROTLI_FALSE;\n}\n\nstatic BROTLI_INLINE void HasherSize(const BrotliEncoderParams* params,\n    BROTLI_BOOL one_shot, const size_t input_size, size_t* alloc_size) {\n  switch (params->hasher.type) {\n#define SIZE_(N)                                                           \\\n    case N:                                                                \\\n      HashMemAllocInBytesH ## N(params, one_shot, input_size, alloc_size); \\\n      break;\n    FOR_ALL_HASHERS(SIZE_)\n#undef SIZE_\n    default:\n      break;\n  }\n}\n\nstatic BROTLI_INLINE void HasherSetup(MemoryManager* m, Hasher* hasher,\n    BrotliEncoderParams* params, const uint8_t* data, size_t position,\n    size_t input_size, BROTLI_BOOL is_last) {\n  BROTLI_BOOL one_shot = (position == 0 && is_last);\n  if (!hasher->common.is_setup_) {\n    size_t alloc_size[4] = {0};\n    size_t i;\n    ChooseHasher(params, &params->hasher);\n    hasher->common.params = params->hasher;\n    hasher->common.dict_num_lookups = 0;\n    hasher->common.dict_num_matches = 0;\n    HasherSize(params, one_shot, input_size, alloc_size);\n    for (i = 0; i < 4; ++i) {\n      if (alloc_size[i] == 0) continue;\n      hasher->common.extra[i] = BROTLI_ALLOC(m, uint8_t, alloc_size[i]);\n      if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(hasher->common.extra[i])) return;\n    }\n    switch (hasher->common.params.type) {\n#define INITIALIZE_(N)                        \\\n      case N:                                 \\\n        InitializeH ## N(&hasher->common,     \\\n            &hasher->privat._H ## N, params); \\\n        break;\n      FOR_ALL_HASHERS(INITIALIZE_);\n#undef INITIALIZE_\n      default:\n        break;\n    }\n    HasherReset(hasher);\n    hasher->common.is_setup_ = BROTLI_TRUE;\n  }\n\n  if (!hasher->common.is_prepared_) {\n    switch (hasher->common.params.type) {\n#define PREPARE_(N)                      \\\n      case N:                            \\\n        PrepareH ## N(                   \\\n            &hasher->privat._H ## N,     \\\n            one_shot, input_size, data); \\\n        break;\n      FOR_ALL_HASHERS(PREPARE_)\n#undef PREPARE_\n      default: break;\n    }\n    hasher->common.is_prepared_ = BROTLI_TRUE;\n  }\n}\n\nstatic BROTLI_INLINE void InitOrStitchToPreviousBlock(\n    MemoryManager* m, Hasher* hasher, const uint8_t* data, size_t mask,\n    BrotliEncoderParams* params, size_t position, size_t input_size,\n    BROTLI_BOOL is_last) {\n  HasherSetup(m, hasher, params, data, position, input_size, is_last);\n  if (BROTLI_IS_OOM(m)) return;\n  switch (hasher->common.params.type) {\n#define INIT_(N)                             \\\n    case N:                                  \\\n      StitchToPreviousBlockH ## N(           \\\n          &hasher->privat._H ## N,           \\\n          input_size, position, data, mask); \\\n    break;\n    FOR_ALL_HASHERS(INIT_)\n#undef INIT_\n    default: break;\n  }\n}\n\n/* NB: when seamless dictionary-ring-buffer copies are implemented, don't forget\n       to add proper guards for non-zero-BROTLI_PARAM_STREAM_OFFSET. */\nstatic BROTLI_INLINE void FindCompoundDictionaryMatch(\n    const PreparedDictionary* self, const uint8_t* BROTLI_RESTRICT data,\n    const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_cache,\n    const size_t cur_ix, const size_t max_length, const size_t distance_offset,\n    const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) {\n  const uint32_t source_size = self->source_size;\n  const size_t boundary = distance_offset - source_size;\n  const uint32_t hash_bits = self->hash_bits;\n  const uint32_t bucket_bits = self->bucket_bits;\n  const uint32_t slot_bits = self->slot_bits;\n\n  const uint32_t hash_shift = 64u - bucket_bits;\n  const uint32_t slot_mask = (~((uint32_t)0U)) >> (32 - slot_bits);\n  const uint64_t hash_mask = (~((uint64_t)0U)) >> (64 - hash_bits);\n\n  const uint32_t* slot_offsets = (uint32_t*)(&self[1]);\n  const uint16_t* heads = (uint16_t*)(&slot_offsets[(size_t)1u << slot_bits]);\n  const uint32_t* items = (uint32_t*)(&heads[(size_t)1u << bucket_bits]);\n  const uint8_t* source = NULL;\n\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  score_t best_score = out->score;\n  size_t best_len = out->len;\n  size_t i;\n  const uint64_t h =\n      (BROTLI_UNALIGNED_LOAD64LE(&data[cur_ix_masked]) & hash_mask) *\n      kPreparedDictionaryHashMul64Long;\n  const uint32_t key = (uint32_t)(h >> hash_shift);\n  const uint32_t slot = key & slot_mask;\n  const uint32_t head = heads[key];\n  const uint32_t* BROTLI_RESTRICT chain = &items[slot_offsets[slot] + head];\n  uint32_t item = (head == 0xFFFF) ? 1 : 0;\n\n  const void* tail = (void*)&items[self->num_items];\n  if (self->magic == kPreparedDictionaryMagic) {\n    source = (const uint8_t*)tail;\n  } else {\n    /* kLeanPreparedDictionaryMagic */\n    source = (const uint8_t*)BROTLI_UNALIGNED_LOAD_PTR((const uint8_t**)tail);\n  }\n\n  BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask + 1);\n\n  for (i = 0; i < 4; ++i) {\n    const size_t distance = (size_t)distance_cache[i];\n    size_t offset;\n    size_t limit;\n    size_t len;\n    if (distance <= boundary || distance > distance_offset) continue;\n    offset = distance_offset - distance;\n    limit = source_size - offset;\n    limit = limit > max_length ? max_length : limit;\n    len = FindMatchLengthWithLimit(&source[offset], &data[cur_ix_masked],\n                                   limit);\n    if (len >= 2) {\n      score_t score = BackwardReferenceScoreUsingLastDistance(len);\n      if (best_score < score) {\n        if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);\n        if (best_score < score) {\n          best_score = score;\n          if (len > best_len) best_len = len;\n          out->len = len;\n          out->len_code_delta = 0;\n          out->distance = distance;\n          out->score = best_score;\n        }\n      }\n    }\n  }\n  /* we require matches of len >4, so increase best_len to 3, so we can compare\n   * 4 bytes all the time. */\n  if (best_len < 3) {\n    best_len = 3;\n  }\n  while (item == 0) {\n    size_t offset;\n    size_t distance;\n    size_t limit;\n    item = *chain;\n    chain++;\n    offset = item & 0x7FFFFFFF;\n    item &= 0x80000000;\n    distance = distance_offset - offset;\n    limit = source_size - offset;\n    limit = (limit > max_length) ? max_length : limit;\n    if (distance > max_distance) continue;\n    if (cur_ix_masked + best_len > ring_buffer_mask || best_len >= limit ||\n        /* compare 4 bytes ending at best_len + 1 */\n        BrotliUnalignedRead32(&data[cur_ix_masked + best_len - 3]) !=\n            BrotliUnalignedRead32(&source[offset + best_len - 3])) {\n      continue;\n    }\n    {\n      const size_t len = FindMatchLengthWithLimit(&source[offset],\n                                                  &data[cur_ix_masked],\n                                                  limit);\n      if (len >= 4) {\n        score_t score = BackwardReferenceScore(len, distance);\n        if (best_score < score) {\n          best_score = score;\n          best_len = len;\n          out->len = best_len;\n          out->len_code_delta = 0;\n          out->distance = distance;\n          out->score = best_score;\n        }\n      }\n    }\n  }\n}\n\n/* NB: when seamless dictionary-ring-buffer copies are implemented, don't forget\n       to add proper guards for non-zero-BROTLI_PARAM_STREAM_OFFSET. */\nstatic BROTLI_INLINE size_t FindAllCompoundDictionaryMatches(\n    const PreparedDictionary* self, const uint8_t* BROTLI_RESTRICT data,\n    const size_t ring_buffer_mask, const size_t cur_ix, const size_t min_length,\n    const size_t max_length, const size_t distance_offset,\n    const size_t max_distance, BackwardMatch* matches, size_t match_limit) {\n  const uint32_t source_size = self->source_size;\n  const uint32_t hash_bits = self->hash_bits;\n  const uint32_t bucket_bits = self->bucket_bits;\n  const uint32_t slot_bits = self->slot_bits;\n\n  const uint32_t hash_shift = 64u - bucket_bits;\n  const uint32_t slot_mask = (~((uint32_t)0U)) >> (32 - slot_bits);\n  const uint64_t hash_mask = (~((uint64_t)0U)) >> (64 - hash_bits);\n\n  const uint32_t* slot_offsets = (uint32_t*)(&self[1]);\n  const uint16_t* heads = (uint16_t*)(&slot_offsets[(size_t)1u << slot_bits]);\n  const uint32_t* items = (uint32_t*)(&heads[(size_t)1u << bucket_bits]);\n  const uint8_t* source = NULL;\n\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  size_t best_len = min_length;\n  const uint64_t h =\n      (BROTLI_UNALIGNED_LOAD64LE(&data[cur_ix_masked]) & hash_mask) *\n      kPreparedDictionaryHashMul64Long;\n  const uint32_t key = (uint32_t)(h >> hash_shift);\n  const uint32_t slot = key & slot_mask;\n  const uint32_t head = heads[key];\n  const uint32_t* BROTLI_RESTRICT chain = &items[slot_offsets[slot] + head];\n  uint32_t item = (head == 0xFFFF) ? 1 : 0;\n  size_t found = 0;\n\n  const void* tail = (void*)&items[self->num_items];\n  if (self->magic == kPreparedDictionaryMagic) {\n    source = (const uint8_t*)tail;\n  } else {\n    /* kLeanPreparedDictionaryMagic */\n    source = (const uint8_t*)BROTLI_UNALIGNED_LOAD_PTR((const uint8_t**)tail);\n  }\n\n  BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask + 1);\n\n  while (item == 0) {\n    size_t offset;\n    size_t distance;\n    size_t limit;\n    size_t len;\n    item = *chain;\n    chain++;\n    offset = item & 0x7FFFFFFF;\n    item &= 0x80000000;\n    distance = distance_offset - offset;\n    limit = source_size - offset;\n    limit = (limit > max_length) ? max_length : limit;\n    if (distance > max_distance) continue;\n    if (cur_ix_masked + best_len > ring_buffer_mask ||\n        best_len >= limit ||\n        data[cur_ix_masked + best_len] != source[offset + best_len]) {\n      continue;\n    }\n    len = FindMatchLengthWithLimit(\n        &source[offset], &data[cur_ix_masked], limit);\n    if (len > best_len) {\n      best_len = len;\n      InitBackwardMatch(matches++, distance, len);\n      found++;\n      if (found == match_limit) break;\n    }\n  }\n  return found;\n}\n\nstatic BROTLI_INLINE void LookupCompoundDictionaryMatch(\n    const CompoundDictionary* addon, const uint8_t* BROTLI_RESTRICT data,\n    const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_cache,\n    const size_t cur_ix, const size_t max_length,\n    const size_t max_ring_buffer_distance, const size_t max_distance,\n    HasherSearchResult* sr) {\n  size_t base_offset = max_ring_buffer_distance + 1 + addon->total_size - 1;\n  size_t d;\n  for (d = 0; d < addon->num_chunks; ++d) {\n    /* Only one prepared dictionary type is currently supported. */\n    FindCompoundDictionaryMatch(\n        (const PreparedDictionary*)addon->chunks[d], data, ring_buffer_mask,\n        distance_cache, cur_ix, max_length,\n        base_offset - addon->chunk_offsets[d], max_distance, sr);\n  }\n}\n\nstatic BROTLI_INLINE size_t LookupAllCompoundDictionaryMatches(\n    const CompoundDictionary* addon, const uint8_t* BROTLI_RESTRICT data,\n    const size_t ring_buffer_mask, const size_t cur_ix, size_t min_length,\n    const size_t max_length, const size_t max_ring_buffer_distance,\n    const size_t max_distance, BackwardMatch* matches,\n    size_t match_limit) {\n  size_t base_offset = max_ring_buffer_distance + 1 + addon->total_size - 1;\n  size_t d;\n  size_t total_found = 0;\n  for (d = 0; d < addon->num_chunks; ++d) {\n    /* Only one prepared dictionary type is currently supported. */\n    total_found += FindAllCompoundDictionaryMatches(\n        (const PreparedDictionary*)addon->chunks[d], data, ring_buffer_mask,\n        cur_ix, min_length, max_length, base_offset - addon->chunk_offsets[d],\n        max_distance, matches + total_found, match_limit - total_found);\n    if (total_found == match_limit) break;\n    if (total_found > 0) {\n      min_length = BackwardMatchLength(&matches[total_found - 1]);\n    }\n  }\n  return total_found;\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_HASH_H_ */\n"
  },
  {
    "path": "c/enc/hash_base.h",
    "content": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Basic common hash functions / constants. */\n\n#ifndef THIRD_PARTY_BROTLI_ENC_HASH_BASE_H_\n#define THIRD_PARTY_BROTLI_ENC_HASH_BASE_H_\n\n#include \"../common/platform.h\"\n\n/* kHashMul32 multiplier has these properties:\n   * The multiplier must be odd. Otherwise we may lose the highest bit.\n   * No long streaks of ones or zeros.\n   * There is no effort to ensure that it is a prime, the oddity is enough\n     for this use.\n   * The number has been tuned heuristically against compression benchmarks. */\nstatic const uint32_t kHashMul32 = 0x1E35A7BD;\nstatic const uint64_t kHashMul64 =\n    BROTLI_MAKE_UINT64_T(0x1FE35A7Bu, 0xD3579BD3u);\n\nstatic BROTLI_INLINE uint32_t Hash14(const uint8_t* data) {\n  uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return h >> (32 - 14);\n}\n\nstatic BROTLI_INLINE uint32_t Hash15(const uint8_t* data) {\n  uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return h >> (32 - 15);\n}\n\n#endif  // THIRD_PARTY_BROTLI_ENC_HASH_BASE_H_\n"
  },
  {
    "path": "c/enc/hash_composite_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2018 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN, HASHER_A, HASHER_B */\n\n/* Composite hasher: This hasher allows to combine two other hashers, HASHER_A\n   and HASHER_B. */\n\n#define HashComposite HASHER()\n\n#define FN_A(X) EXPAND_CAT(X, HASHER_A)\n#define FN_B(X) EXPAND_CAT(X, HASHER_B)\n\nstatic BROTLI_INLINE size_t FN(HashTypeLength)(void) {\n  size_t a =  FN_A(HashTypeLength)();\n  size_t b =  FN_B(HashTypeLength)();\n  return a > b ? a : b;\n}\n\nstatic BROTLI_INLINE size_t FN(StoreLookahead)(void) {\n  size_t a =  FN_A(StoreLookahead)();\n  size_t b =  FN_B(StoreLookahead)();\n  return a > b ? a : b;\n}\n\ntypedef struct HashComposite {\n  HASHER_A ha;\n  HASHER_B hb;\n  HasherCommon ha_common;\n  HasherCommon hb_common;\n\n  /* Shortcuts. */\n  HasherCommon* common;\n\n  BROTLI_BOOL fresh;\n  const BrotliEncoderParams* params;\n} HashComposite;\n\nstatic void FN(Initialize)(HasherCommon* common,\n    HashComposite* BROTLI_RESTRICT self, const BrotliEncoderParams* params) {\n  self->common = common;\n\n  self->ha_common = *self->common;\n  self->hb_common = *self->common;\n  self->fresh = BROTLI_TRUE;\n  self->params = params;\n  /* TODO(lode): Initialize of the hashers is deferred to Prepare (and params\n     remembered here) because we don't get the one_shot and input_size params\n     here that are needed to know the memory size of them. Instead provide\n     those params to all hashers FN(Initialize) */\n}\n\nstatic void FN(Prepare)(\n    HashComposite* BROTLI_RESTRICT self, BROTLI_BOOL one_shot,\n    size_t input_size, const uint8_t* BROTLI_RESTRICT data) {\n  if (self->fresh) {\n    self->fresh = BROTLI_FALSE;\n    self->ha_common.extra[0] = self->common->extra[0];\n    self->ha_common.extra[1] = self->common->extra[1];\n    self->ha_common.extra[2] = NULL;\n    self->ha_common.extra[3] = NULL;\n    self->hb_common.extra[0] = self->common->extra[2];\n    self->hb_common.extra[1] = self->common->extra[3];\n    self->hb_common.extra[2] = NULL;\n    self->hb_common.extra[3] = NULL;\n\n    FN_A(Initialize)(&self->ha_common, &self->ha, self->params);\n    FN_B(Initialize)(&self->hb_common, &self->hb, self->params);\n  }\n  FN_A(Prepare)(&self->ha, one_shot, input_size, data);\n  FN_B(Prepare)(&self->hb, one_shot, input_size, data);\n}\n\nstatic BROTLI_INLINE void FN(HashMemAllocInBytes)(\n    const BrotliEncoderParams* params, BROTLI_BOOL one_shot,\n    size_t input_size, size_t* alloc_size) {\n  size_t alloc_size_a[4] = {0};\n  size_t alloc_size_b[4] = {0};\n  FN_A(HashMemAllocInBytes)(params, one_shot, input_size, alloc_size_a);\n  FN_B(HashMemAllocInBytes)(params, one_shot, input_size, alloc_size_b);\n  /* Should never happen. */\n  if (alloc_size_a[2] != 0 || alloc_size_a[3] != 0) exit(EXIT_FAILURE);\n  if (alloc_size_b[2] != 0 || alloc_size_b[3] != 0) exit(EXIT_FAILURE);\n  alloc_size[0] = alloc_size_a[0];\n  alloc_size[1] = alloc_size_a[1];\n  alloc_size[2] = alloc_size_b[0];\n  alloc_size[3] = alloc_size_b[1];\n}\n\nstatic BROTLI_INLINE void FN(Store)(HashComposite* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {\n  FN_A(Store)(&self->ha, data, mask, ix);\n  FN_B(Store)(&self->hb, data, mask, ix);\n}\n\nstatic BROTLI_INLINE void FN(StoreRange)(\n    HashComposite* BROTLI_RESTRICT self, const uint8_t* BROTLI_RESTRICT data,\n    const size_t mask, const size_t ix_start,\n    const size_t ix_end) {\n  FN_A(StoreRange)(&self->ha, data, mask, ix_start, ix_end);\n  FN_B(StoreRange)(&self->hb, data, mask, ix_start, ix_end);\n}\n\nstatic BROTLI_INLINE void FN(StitchToPreviousBlock)(\n    HashComposite* BROTLI_RESTRICT self,\n    size_t num_bytes, size_t position, const uint8_t* ringbuffer,\n    size_t ring_buffer_mask) {\n  FN_A(StitchToPreviousBlock)(&self->ha, num_bytes, position,\n      ringbuffer, ring_buffer_mask);\n  FN_B(StitchToPreviousBlock)(&self->hb, num_bytes, position,\n      ringbuffer, ring_buffer_mask);\n}\n\nstatic BROTLI_INLINE void FN(PrepareDistanceCache)(\n    HashComposite* BROTLI_RESTRICT self, int* BROTLI_RESTRICT distance_cache) {\n  FN_A(PrepareDistanceCache)(&self->ha, distance_cache);\n  FN_B(PrepareDistanceCache)(&self->hb, distance_cache);\n}\n\nstatic BROTLI_INLINE void FN(FindLongestMatch)(\n    HashComposite* BROTLI_RESTRICT self,\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,\n    const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,\n    const size_t max_length, const size_t max_backward,\n    const size_t dictionary_distance, const size_t max_distance,\n    HasherSearchResult* BROTLI_RESTRICT out) {\n  FN_A(FindLongestMatch)(&self->ha, dictionary, data, ring_buffer_mask,\n      distance_cache, cur_ix, max_length, max_backward, dictionary_distance,\n      max_distance, out);\n  FN_B(FindLongestMatch)(&self->hb, dictionary, data, ring_buffer_mask,\n      distance_cache, cur_ix, max_length, max_backward, dictionary_distance,\n      max_distance, out);\n}\n\n#undef HashComposite\n"
  },
  {
    "path": "c/enc/hash_forgetful_chain_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN, BUCKET_BITS, NUM_BANKS, BANK_BITS,\n                        NUM_LAST_DISTANCES_TO_CHECK */\n\n/* A (forgetful) hash table to the data seen by the compressor, to\n   help create backward references to previous data.\n\n   Hashes are stored in chains which are bucketed to groups. Group of chains\n   share a storage \"bank\". When more than \"bank size\" chain nodes are added,\n   oldest nodes are replaced; this way several chains may share a tail. */\n\n#define HashForgetfulChain HASHER()\n\n#define BANK_SIZE (1 << BANK_BITS)\n\n/* Number of hash buckets. */\n#define BUCKET_SIZE (1 << BUCKET_BITS)\n\n#define CAPPED_CHAINS 0\n\nstatic BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }\nstatic BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }\n\n/* HashBytes is the function that chooses the bucket to place the address in.*/\nstatic BROTLI_INLINE size_t FN(HashBytes)(const uint8_t* BROTLI_RESTRICT data) {\n  const uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return h >> (32 - BUCKET_BITS);\n}\n\ntypedef struct FN(Slot) {\n  uint16_t delta;\n  uint16_t next;\n} FN(Slot);\n\ntypedef struct FN(Bank) {\n  FN(Slot) slots[BANK_SIZE];\n} FN(Bank);\n\ntypedef struct HashForgetfulChain {\n  uint16_t free_slot_idx[NUM_BANKS];  /* Up to 1KiB. Move to dynamic? */\n  size_t max_hops;\n\n  /* Shortcuts. */\n  void* extra[2];\n  HasherCommon* common;\n\n  /* --- Dynamic size members --- */\n\n  /* uint32_t addr[BUCKET_SIZE]; */\n\n  /* uint16_t head[BUCKET_SIZE]; */\n\n  /* Truncated hash used for quick rejection of \"distance cache\" candidates. */\n  /* uint8_t tiny_hash[65536];*/\n\n  /* FN(Bank) banks[NUM_BANKS]; */\n} HashForgetfulChain;\n\nstatic uint32_t* FN(Addr)(void* extra) {\n  return (uint32_t*)extra;\n}\n\nstatic uint16_t* FN(Head)(void* extra) {\n  return (uint16_t*)(&FN(Addr)(extra)[BUCKET_SIZE]);\n}\n\nstatic uint8_t* FN(TinyHash)(void* extra) {\n  return (uint8_t*)(&FN(Head)(extra)[BUCKET_SIZE]);\n}\n\nstatic FN(Bank)* FN(Banks)(void* extra) {\n  return (FN(Bank)*)(extra);\n}\n\nstatic void FN(Initialize)(\n    HasherCommon* common, HashForgetfulChain* BROTLI_RESTRICT self,\n    const BrotliEncoderParams* params) {\n  self->common = common;\n  self->extra[0] = common->extra[0];\n  self->extra[1] = common->extra[1];\n\n  self->max_hops = (params->quality > 6 ? 7u : 8u) << (params->quality - 4);\n}\n\nstatic void FN(Prepare)(\n    HashForgetfulChain* BROTLI_RESTRICT self, BROTLI_BOOL one_shot,\n    size_t input_size, const uint8_t* BROTLI_RESTRICT data) {\n  uint32_t* BROTLI_RESTRICT addr = FN(Addr)(self->extra[0]);\n  uint16_t* BROTLI_RESTRICT head = FN(Head)(self->extra[0]);\n  uint8_t* BROTLI_RESTRICT tiny_hash = FN(TinyHash)(self->extra[0]);\n  /* Partial preparation is 100 times slower (per socket). */\n  size_t partial_prepare_threshold = BUCKET_SIZE >> 6;\n  if (one_shot && input_size <= partial_prepare_threshold) {\n    size_t i;\n    for (i = 0; i < input_size; ++i) {\n      size_t bucket = FN(HashBytes)(&data[i]);\n      /* See InitEmpty comment. */\n      addr[bucket] = 0xCCCCCCCC;\n      head[bucket] = 0xCCCC;\n    }\n  } else {\n    /* Fill |addr| array with 0xCCCCCCCC value. Because of wrapping, position\n       processed by hasher never reaches 3GB + 64M; this makes all new chains\n       to be terminated after the first node. */\n    memset(addr, 0xCC, sizeof(uint32_t) * BUCKET_SIZE);\n    memset(head, 0, sizeof(uint16_t) * BUCKET_SIZE);\n  }\n  memset(tiny_hash, 0, sizeof(uint8_t) * 65536);\n  memset(self->free_slot_idx, 0, sizeof(self->free_slot_idx));\n}\n\nstatic BROTLI_INLINE void FN(HashMemAllocInBytes)(\n    const BrotliEncoderParams* params, BROTLI_BOOL one_shot,\n    size_t input_size, size_t* alloc_size) {\n  BROTLI_UNUSED(params);\n  BROTLI_UNUSED(one_shot);\n  BROTLI_UNUSED(input_size);\n  alloc_size[0] = sizeof(uint32_t) * BUCKET_SIZE +\n                  sizeof(uint16_t) * BUCKET_SIZE + sizeof(uint8_t) * 65536;\n  alloc_size[1] = sizeof(FN(Bank)) * NUM_BANKS;\n}\n\n/* Look at 4 bytes at &data[ix & mask]. Compute a hash from these, and prepend\n   node to corresponding chain; also update tiny_hash for current position. */\nstatic BROTLI_INLINE void FN(Store)(HashForgetfulChain* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {\n  uint32_t* BROTLI_RESTRICT addr = FN(Addr)(self->extra[0]);\n  uint16_t* BROTLI_RESTRICT head = FN(Head)(self->extra[0]);\n  uint8_t* BROTLI_RESTRICT tiny_hash = FN(TinyHash)(self->extra[0]);\n  FN(Bank)* BROTLI_RESTRICT banks = FN(Banks)(self->extra[1]);\n  const size_t key = FN(HashBytes)(&data[ix & mask]);\n  const size_t bank = key & (NUM_BANKS - 1);\n  const size_t idx = self->free_slot_idx[bank]++ & (BANK_SIZE - 1);\n  size_t delta = ix - addr[key];\n  tiny_hash[(uint16_t)ix] = (uint8_t)key;\n  if (delta > 0xFFFF) delta = CAPPED_CHAINS ? 0 : 0xFFFF;\n  banks[bank].slots[idx].delta = (uint16_t)delta;\n  banks[bank].slots[idx].next = head[key];\n  addr[key] = (uint32_t)ix;\n  head[key] = (uint16_t)idx;\n}\n\nstatic BROTLI_INLINE void FN(StoreRange)(\n    HashForgetfulChain* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask,\n    const size_t ix_start, const size_t ix_end) {\n  size_t i;\n  for (i = ix_start; i < ix_end; ++i) {\n    FN(Store)(self, data, mask, i);\n  }\n}\n\nstatic BROTLI_INLINE void FN(StitchToPreviousBlock)(\n    HashForgetfulChain* BROTLI_RESTRICT self,\n    size_t num_bytes, size_t position, const uint8_t* ringbuffer,\n    size_t ring_buffer_mask) {\n  if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {\n    /* Prepare the hashes for three last bytes of the last write.\n       These could not be calculated before, since they require knowledge\n       of both the previous and the current block. */\n    FN(Store)(self, ringbuffer, ring_buffer_mask, position - 3);\n    FN(Store)(self, ringbuffer, ring_buffer_mask, position - 2);\n    FN(Store)(self, ringbuffer, ring_buffer_mask, position - 1);\n  }\n}\n\nstatic BROTLI_INLINE void FN(PrepareDistanceCache)(\n    HashForgetfulChain* BROTLI_RESTRICT self,\n    int* BROTLI_RESTRICT distance_cache) {\n  BROTLI_UNUSED(self);\n  PrepareDistanceCache(distance_cache, NUM_LAST_DISTANCES_TO_CHECK);\n}\n\n/* Find a longest backward match of &data[cur_ix] up to the length of\n   max_length and stores the position cur_ix in the hash table.\n\n   REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache\n             values; if this method is invoked repeatedly with the same distance\n             cache values, it is enough to invoke FN(PrepareDistanceCache) once.\n\n   Does not look for matches longer than max_length.\n   Does not look for matches further away than max_backward.\n   Writes the best match into |out|.\n   |out|->score is updated only if a better match is found. */\nstatic BROTLI_INLINE void FN(FindLongestMatch)(\n    HashForgetfulChain* BROTLI_RESTRICT self,\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,\n    const int* BROTLI_RESTRICT distance_cache,\n    const size_t cur_ix, const size_t max_length, const size_t max_backward,\n    const size_t dictionary_distance, const size_t max_distance,\n    HasherSearchResult* BROTLI_RESTRICT out) {\n  uint32_t* BROTLI_RESTRICT addr = FN(Addr)(self->extra[0]);\n  uint16_t* BROTLI_RESTRICT head = FN(Head)(self->extra[0]);\n  uint8_t* BROTLI_RESTRICT tiny_hashes = FN(TinyHash)(self->extra[0]);\n  FN(Bank)* BROTLI_RESTRICT banks = FN(Banks)(self->extra[1]);\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  /* Don't accept a short copy from far away. */\n  score_t min_score = out->score;\n  score_t best_score = out->score;\n  size_t best_len = out->len;\n  size_t i;\n  const size_t key = FN(HashBytes)(&data[cur_ix_masked]);\n  const uint8_t tiny_hash = (uint8_t)(key);\n  out->len = 0;\n  out->len_code_delta = 0;\n\n  BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask + 1);\n\n  /* Try last distance first. */\n  for (i = 0; i < NUM_LAST_DISTANCES_TO_CHECK; ++i) {\n    const size_t backward = (size_t)distance_cache[i];\n    size_t prev_ix = (cur_ix - backward);\n    /* For distance code 0 we want to consider 2-byte matches. */\n    if (i > 0 && tiny_hashes[(uint16_t)prev_ix] != tiny_hash) continue;\n    if (prev_ix >= cur_ix || backward > max_backward) {\n      continue;\n    }\n    prev_ix &= ring_buffer_mask;\n    {\n      const size_t len = FindMatchLengthWithLimit(&data[prev_ix],\n                                                  &data[cur_ix_masked],\n                                                  max_length);\n      if (len >= 2) {\n        score_t score = BackwardReferenceScoreUsingLastDistance(len);\n        if (best_score < score) {\n          if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);\n          if (best_score < score) {\n            best_score = score;\n            best_len = len;\n            out->len = best_len;\n            out->distance = backward;\n            out->score = best_score;\n          }\n        }\n      }\n    }\n  }\n  /* we require matches of len >4, so increase best_len to 3, so we can compare\n   * 4 bytes all the time. */\n  if (best_len < 3) {\n    best_len = 3;\n  }\n  {\n    const size_t bank = key & (NUM_BANKS - 1);\n    size_t backward = 0;\n    size_t hops = self->max_hops;\n    size_t delta = cur_ix - addr[key];\n    size_t slot = head[key];\n    while (hops--) {\n      size_t prev_ix;\n      size_t last = slot;\n      backward += delta;\n      if (backward > max_backward || (CAPPED_CHAINS && !delta)) break;\n      prev_ix = (cur_ix - backward) & ring_buffer_mask;\n      slot = banks[bank].slots[last].next;\n      delta = banks[bank].slots[last].delta;\n      if (cur_ix_masked + best_len > ring_buffer_mask ||\n          prev_ix + best_len > ring_buffer_mask ||\n          /* compare 4 bytes ending at best_len + 1 */\n          BrotliUnalignedRead32(&data[cur_ix_masked + best_len - 3]) !=\n              BrotliUnalignedRead32(&data[prev_ix + best_len - 3])) {\n        continue;\n      }\n      {\n        const size_t len = FindMatchLengthWithLimit(&data[prev_ix],\n                                                    &data[cur_ix_masked],\n                                                    max_length);\n        if (len >= 4) {\n          /* Comparing for >= 3 does not change the semantics, but just saves\n             for a few unnecessary binary logarithms in backward reference\n             score, since we are not interested in such short matches. */\n          score_t score = BackwardReferenceScore(len, backward);\n          if (best_score < score) {\n            best_score = score;\n            best_len = len;\n            out->len = best_len;\n            out->distance = backward;\n            out->score = best_score;\n          }\n        }\n      }\n    }\n    FN(Store)(self, data, ring_buffer_mask, cur_ix);\n  }\n  if (out->score == min_score) {\n    SearchInStaticDictionary(dictionary,\n        self->common, &data[cur_ix_masked], max_length, dictionary_distance,\n        max_distance, out, BROTLI_FALSE);\n  }\n}\n\n#undef BANK_SIZE\n#undef BUCKET_SIZE\n#undef CAPPED_CHAINS\n\n#undef HashForgetfulChain\n"
  },
  {
    "path": "c/enc/hash_longest_match64_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2010 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN */\n\n/* A (forgetful) hash table to the data seen by the compressor, to\n   help create backward references to previous data.\n\n   This is a hash map of fixed size (bucket_size_) to a ring buffer of\n   fixed size (block_size_). The ring buffer contains the last block_size_\n   index positions of the given hash key in the compressed data. */\n\n#define HashLongestMatch HASHER()\n\nstatic BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; }\nstatic BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; }\n\n/* HashBytes is the function that chooses the bucket to place the address in. */\nstatic BROTLI_INLINE size_t FN(HashBytes)(const uint8_t* BROTLI_RESTRICT data,\n                                          uint64_t hash_mul) {\n  const uint64_t h = BROTLI_UNALIGNED_LOAD64LE(data) * hash_mul;\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return (size_t)(h >> (64 - 15));\n}\n\ntypedef struct HashLongestMatch {\n  /* Number of hash buckets. */\n  size_t bucket_size_;\n  /* Only block_size_ newest backward references are kept,\n     and the older are forgotten. */\n  size_t block_size_;\n  /* Hash multiplier tuned to match length. */\n  uint64_t hash_mul_;\n  /* Mask for accessing entries in a block (in a ring-buffer manner). */\n  uint32_t block_mask_;\n\n  int block_bits_;\n  int num_last_distances_to_check_;\n\n  /* Shortcuts. */\n  HasherCommon* common_;\n\n  /* --- Dynamic size members --- */\n\n  /* Number of entries in a particular bucket. */\n  uint16_t* num_;  /* uint16_t[bucket_size]; */\n\n  /* Buckets containing block_size_ of backward references. */\n  uint32_t* buckets_;  /* uint32_t[bucket_size * block_size]; */\n} HashLongestMatch;\n\nstatic void FN(Initialize)(\n    HasherCommon* common, HashLongestMatch* BROTLI_RESTRICT self,\n    const BrotliEncoderParams* params) {\n  self->common_ = common;\n\n  BROTLI_UNUSED(params);\n  self->hash_mul_ = kHashMul64 << (64 - 5 * 8);\n  BROTLI_DCHECK(common->params.bucket_bits == 15);\n  self->bucket_size_ = (size_t)1 << common->params.bucket_bits;\n  self->block_bits_ = common->params.block_bits;\n  self->block_size_ = (size_t)1 << common->params.block_bits;\n  self->block_mask_ = (uint32_t)(self->block_size_ - 1);\n  self->num_last_distances_to_check_ =\n      common->params.num_last_distances_to_check;\n  self->num_ = (uint16_t*)common->extra[0];\n  self->buckets_ = (uint32_t*)common->extra[1];\n}\n\nstatic void FN(Prepare)(\n    HashLongestMatch* BROTLI_RESTRICT self, BROTLI_BOOL one_shot,\n    size_t input_size, const uint8_t* BROTLI_RESTRICT data) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  /* Partial preparation is 100 times slower (per socket). */\n  size_t partial_prepare_threshold = self->bucket_size_ >> 6;\n  if (one_shot && input_size <= partial_prepare_threshold) {\n    size_t i;\n    for (i = 0; i < input_size; ++i) {\n      const size_t key = FN(HashBytes)(&data[i], self->hash_mul_);\n      num[key] = 0;\n    }\n  } else {\n    memset(num, 0, self->bucket_size_ * sizeof(num[0]));\n  }\n}\n\nstatic BROTLI_INLINE void FN(HashMemAllocInBytes)(\n    const BrotliEncoderParams* params, BROTLI_BOOL one_shot,\n    size_t input_size, size_t* alloc_size) {\n  size_t bucket_size = (size_t)1 << params->hasher.bucket_bits;\n  size_t block_size = (size_t)1 << params->hasher.block_bits;\n  BROTLI_UNUSED(one_shot);\n  BROTLI_UNUSED(input_size);\n  alloc_size[0] = sizeof(uint16_t) * bucket_size;\n  alloc_size[1] = sizeof(uint32_t) * bucket_size * block_size;\n}\n\n/* Look at 4 bytes at &data[ix & mask].\n   Compute a hash from these, and store the value of ix at that position. */\nstatic BROTLI_INLINE void FN(Store)(\n    HashLongestMatch* BROTLI_RESTRICT self, const uint8_t* BROTLI_RESTRICT data,\n    const size_t mask, const size_t ix) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  const size_t key = FN(HashBytes)(&data[ix & mask], self->hash_mul_);\n  const size_t minor_ix = num[key] & self->block_mask_;\n  const size_t offset = minor_ix + (key << self->block_bits_);\n  ++num[key];\n  buckets[offset] = (uint32_t)ix;\n}\n\nstatic BROTLI_INLINE void FN(StoreRange)(HashLongestMatch* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask,\n    const size_t ix_start, const size_t ix_end) {\n  size_t i;\n  for (i = ix_start; i < ix_end; ++i) {\n    FN(Store)(self, data, mask, i);\n  }\n}\n\nstatic BROTLI_INLINE void FN(StitchToPreviousBlock)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    size_t num_bytes, size_t position, const uint8_t* ringbuffer,\n    size_t ringbuffer_mask) {\n  if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {\n    /* Prepare the hashes for three last bytes of the last write.\n       These could not be calculated before, since they require knowledge\n       of both the previous and the current block. */\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 3);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 2);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 1);\n  }\n}\n\nstatic BROTLI_INLINE void FN(PrepareDistanceCache)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    int* BROTLI_RESTRICT distance_cache) {\n  PrepareDistanceCache(distance_cache, self->num_last_distances_to_check_);\n}\n\n/* Find a longest backward match of &data[cur_ix] up to the length of\n   max_length and stores the position cur_ix in the hash table.\n\n   REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache\n             values; if this method is invoked repeatedly with the same distance\n             cache values, it is enough to invoke FN(PrepareDistanceCache) once.\n\n   Does not look for matches longer than max_length.\n   Does not look for matches further away than max_backward.\n   Writes the best match into |out|.\n   |out|->score is updated only if a better match is found. */\nstatic BROTLI_INLINE void FN(FindLongestMatch)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,\n    const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,\n    const size_t max_length, const size_t max_backward,\n    const size_t dictionary_distance, const size_t max_distance,\n    HasherSearchResult* BROTLI_RESTRICT out) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  /* Don't accept a short copy from far away. */\n  score_t min_score = out->score;\n  score_t best_score = out->score;\n  size_t best_len = out->len;\n  size_t i;\n  /* Precalculate the hash key and prefetch the bucket. */\n  const size_t key = FN(HashBytes)(&data[cur_ix_masked], self->hash_mul_);\n  uint32_t* BROTLI_RESTRICT bucket = &buckets[key << self->block_bits_];\n  PREFETCH_L1(bucket);\n  if (self->block_bits_ > 4) PREFETCH_L1(bucket + 16);\n  out->len = 0;\n  out->len_code_delta = 0;\n\n  BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask + 1);\n\n  /* Try last distance first. */\n  for (i = 0; i < (size_t)self->num_last_distances_to_check_; ++i) {\n    const size_t backward = (size_t)distance_cache[i];\n    size_t prev_ix = (size_t)(cur_ix - backward);\n    if (prev_ix >= cur_ix) {\n      continue;\n    }\n    if (BROTLI_PREDICT_FALSE(backward > max_backward)) {\n      continue;\n    }\n    prev_ix &= ring_buffer_mask;\n\n    if (cur_ix_masked + best_len > ring_buffer_mask) {\n      break;\n    }\n    if (prev_ix + best_len > ring_buffer_mask ||\n        data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {\n      continue;\n    }\n    {\n      const size_t len = FindMatchLengthWithLimit(&data[prev_ix],\n                                                  &data[cur_ix_masked],\n                                                  max_length);\n      if (len >= 3 || (len == 2 && i < 2)) {\n        /* Comparing for >= 2 does not change the semantics, but just saves for\n           a few unnecessary binary logarithms in backward reference score,\n           since we are not interested in such short matches. */\n        score_t score = BackwardReferenceScoreUsingLastDistance(len);\n        if (best_score < score) {\n          if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);\n          if (best_score < score) {\n            best_score = score;\n            best_len = len;\n            out->len = best_len;\n            out->distance = backward;\n            out->score = best_score;\n          }\n        }\n      }\n    }\n  }\n  /* we require matches of len >4, so increase best_len to 3, so we can compare\n   * 4 bytes all the time. */\n  if (best_len < 3) {\n    best_len = 3;\n  }\n  {\n    const size_t down =\n        (num[key] > self->block_size_) ?\n        (num[key] - self->block_size_) : 0u;\n    const uint32_t first4 = BrotliUnalignedRead32(data + cur_ix_masked);\n    const size_t max_length_m4 = max_length - 4;\n    i = num[key];\n    for (; i > down;) {\n      size_t prev_ix = bucket[--i & self->block_mask_];\n      uint32_t current4;\n      const size_t backward = cur_ix - prev_ix;\n      if (BROTLI_PREDICT_FALSE(backward > max_backward)) {\n        break;\n      }\n      prev_ix &= ring_buffer_mask;\n      if (cur_ix_masked + best_len > ring_buffer_mask) {\n        break;\n      }\n      if (prev_ix + best_len > ring_buffer_mask ||\n          /* compare 4 bytes ending at best_len + 1 */\n          BrotliUnalignedRead32(&data[cur_ix_masked + best_len - 3]) !=\n              BrotliUnalignedRead32(&data[prev_ix + best_len - 3])) {\n        continue;\n      }\n      current4 = BrotliUnalignedRead32(data + prev_ix);\n      if (first4 != current4) continue;\n      {\n        const size_t len = FindMatchLengthWithLimit(&data[prev_ix + 4],\n                                                    &data[cur_ix_masked + 4],\n                                                    max_length_m4) + 4;\n        const score_t score = BackwardReferenceScore(len, backward);\n        if (best_score < score) {\n          best_score = score;\n          best_len = len;\n          out->len = best_len;\n          out->distance = backward;\n          out->score = best_score;\n        }\n      }\n    }\n    bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix;\n    ++num[key];\n  }\n  if (min_score == out->score) {\n    SearchInStaticDictionary(dictionary,\n        self->common_, &data[cur_ix_masked], max_length, dictionary_distance,\n        max_distance, out, BROTLI_FALSE);\n  }\n}\n\n#undef HashLongestMatch\n"
  },
  {
    "path": "c/enc/hash_longest_match64_simd_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2010 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN */\n\n/* A (forgetful) hash table to the data seen by the compressor, to\n   help create backward references to previous data.\n\n   This is a hash map of fixed size (bucket_size_) to a ring buffer of\n   fixed size (block_size_). The ring buffer contains the last block_size_\n   index positions of the given hash key in the compressed data. */\n\n#define HashLongestMatch HASHER()\n\n#define TAG_HASH_BITS 8\n#define TAG_HASH_MASK ((1 << TAG_HASH_BITS) - 1)\n\nstatic BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; }\nstatic BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; }\n\n/* HashBytes is the function that chooses the bucket to place the address in. */\nstatic BROTLI_INLINE size_t FN(HashBytes)(const uint8_t* BROTLI_RESTRICT data,\n                                          uint64_t hash_mul) {\n  const uint64_t h = BROTLI_UNALIGNED_LOAD64LE(data) * hash_mul;\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return (size_t)(h >> (64 - 15 - TAG_HASH_BITS));\n}\n\ntypedef struct HashLongestMatch {\n  /* Number of hash buckets. */\n  size_t bucket_size_;\n  /* Only block_size_ newest backward references are kept,\n     and the older are forgotten. */\n  size_t block_size_;\n  /* Hash multiplier tuned to match length. */\n  uint64_t hash_mul_;\n  /* Mask for accessing entries in a block (in a ring-buffer manner). */\n  uint32_t block_mask_;\n\n  int block_bits_;\n  int num_last_distances_to_check_;\n\n  /* Shortcuts. */\n  HasherCommon* common_;\n\n  /* --- Dynamic size members --- */\n\n  /* Number of entries in a particular bucket. */\n  uint16_t* num_;  /* uint16_t[bucket_size]; */\n\n  uint8_t* tags_;\n\n  /* Buckets containing block_size_ of backward references. */\n  uint32_t* buckets_;  /* uint32_t[bucket_size * block_size]; */\n} HashLongestMatch;\n\nstatic void FN(Initialize)(\n    HasherCommon* common, HashLongestMatch* BROTLI_RESTRICT self,\n    const BrotliEncoderParams* params) {\n  self->common_ = common;\n\n  BROTLI_UNUSED(params);\n  self->hash_mul_ = kHashMul64 << (64 - 5 * 8);\n  BROTLI_DCHECK(common->params.bucket_bits == 15);\n  self->bucket_size_ = (size_t)1 << common->params.bucket_bits;\n  self->block_bits_ = common->params.block_bits;\n  self->block_size_ = (size_t)1 << common->params.block_bits;\n  self->block_mask_ = (uint32_t)(self->block_size_ - 1);\n  self->num_last_distances_to_check_ =\n      common->params.num_last_distances_to_check;\n  self->num_ = (uint16_t*)common->extra[0];\n  self->tags_ = (uint8_t*)common->extra[1];\n  self->buckets_ = (uint32_t*)common->extra[2];\n}\n\nstatic void FN(Prepare)(\n    HashLongestMatch* BROTLI_RESTRICT self, BROTLI_BOOL one_shot,\n    size_t input_size, const uint8_t* BROTLI_RESTRICT data) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  /* Partial preparation is 100 times slower (per socket). */\n  size_t partial_prepare_threshold = self->bucket_size_ >> 6;\n  if (one_shot && input_size <= partial_prepare_threshold) {\n    size_t i;\n    for (i = 0; i < input_size; ++i) {\n      const size_t hash = FN(HashBytes)(&data[i], self->hash_mul_);\n      const size_t key = hash >> TAG_HASH_BITS;\n      num[key] = 65535;\n    }\n  } else {\n    /* Set all the bytes of num to 255, which makes each uint16_t 65535. */\n    memset(num, 255, self->bucket_size_ * sizeof(num[0]));\n  }\n}\n\nstatic BROTLI_INLINE void FN(HashMemAllocInBytes)(\n    const BrotliEncoderParams* params, BROTLI_BOOL one_shot,\n    size_t input_size, size_t* alloc_size) {\n  size_t bucket_size = (size_t)1 << params->hasher.bucket_bits;\n  size_t block_size = (size_t)1 << params->hasher.block_bits;\n  BROTLI_UNUSED(one_shot);\n  BROTLI_UNUSED(input_size);\n  alloc_size[0] = sizeof(uint16_t) * bucket_size;\n  alloc_size[1] = sizeof(uint8_t) * bucket_size * block_size;\n  alloc_size[2] = sizeof(uint32_t) * bucket_size * block_size;\n}\n\n/* Look at 4 bytes at &data[ix & mask].\n   Compute a hash from these, and store the value of ix at that position. */\nstatic BROTLI_INLINE void FN(Store)(\n    HashLongestMatch* BROTLI_RESTRICT self, const uint8_t* BROTLI_RESTRICT data,\n    const size_t mask, const size_t ix) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  uint8_t* BROTLI_RESTRICT tags = self->tags_;\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  const size_t hash = FN(HashBytes)(&data[ix & mask], self->hash_mul_);\n  const size_t key = hash >> TAG_HASH_BITS;\n  const uint8_t tag = hash & TAG_HASH_MASK;\n  const size_t minor_ix = num[key] & self->block_mask_;\n  const size_t offset = minor_ix + (key << self->block_bits_);\n  --num[key];\n  buckets[offset] = (uint32_t)ix;\n  tags[offset] = tag;\n}\n\nstatic BROTLI_INLINE void FN(StoreRange)(HashLongestMatch* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask,\n    const size_t ix_start, const size_t ix_end) {\n  size_t i;\n  for (i = ix_start; i < ix_end; ++i) {\n    FN(Store)(self, data, mask, i);\n  }\n}\n\nstatic BROTLI_INLINE void FN(StitchToPreviousBlock)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    size_t num_bytes, size_t position, const uint8_t* ringbuffer,\n    size_t ringbuffer_mask) {\n  if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {\n    /* Prepare the hashes for three last bytes of the last write.\n       These could not be calculated before, since they require knowledge\n       of both the previous and the current block. */\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 3);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 2);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 1);\n  }\n}\n\nstatic BROTLI_INLINE void FN(PrepareDistanceCache)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    int* BROTLI_RESTRICT distance_cache) {\n  PrepareDistanceCache(distance_cache, self->num_last_distances_to_check_);\n}\n\n/* Find a longest backward match of &data[cur_ix] up to the length of\n   max_length and stores the position cur_ix in the hash table.\n\n   REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache\n             values; if this method is invoked repeatedly with the same distance\n             cache values, it is enough to invoke FN(PrepareDistanceCache) once.\n\n   Does not look for matches longer than max_length.\n   Does not look for matches further away than max_backward.\n   Writes the best match into |out|.\n   |out|->score is updated only if a better match is found. */\nstatic BROTLI_INLINE void FN(FindLongestMatch)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,\n    const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,\n    const size_t max_length, const size_t max_backward,\n    const size_t dictionary_distance, const size_t max_distance,\n    HasherSearchResult* BROTLI_RESTRICT out) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  uint8_t* BROTLI_RESTRICT tags = self->tags_;\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  /* Don't accept a short copy from far away. */\n  score_t min_score = out->score;\n  score_t best_score = out->score;\n  size_t best_len = out->len;\n  size_t i;\n  /* Precalculate the hash key and prefetch the bucket. */\n  const size_t hash = FN(HashBytes)(&data[cur_ix_masked], self->hash_mul_);\n  const size_t key = hash >> TAG_HASH_BITS;\n  uint32_t* BROTLI_RESTRICT bucket = &buckets[key << self->block_bits_];\n  uint8_t* BROTLI_RESTRICT tag_bucket = &tags[key << self->block_bits_];\n  PREFETCH_L1(bucket);\n  PREFETCH_L1(tag_bucket);\n  if (self->block_bits_ > 4) PREFETCH_L1(bucket + 16);\n  out->len = 0;\n  out->len_code_delta = 0;\n\n  BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask + 1);\n\n  /* Try last distance first. */\n  for (i = 0; i < (size_t)self->num_last_distances_to_check_; ++i) {\n    const size_t backward = (size_t)distance_cache[i];\n    size_t prev_ix = (size_t)(cur_ix - backward);\n    if (prev_ix >= cur_ix) {\n      continue;\n    }\n    if (BROTLI_PREDICT_FALSE(backward > max_backward)) {\n      continue;\n    }\n    prev_ix &= ring_buffer_mask;\n\n    if (cur_ix_masked + best_len > ring_buffer_mask) {\n      break;\n    }\n    if (prev_ix + best_len > ring_buffer_mask ||\n        data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {\n      continue;\n    }\n    {\n      const size_t len = FindMatchLengthWithLimit(&data[prev_ix],\n                                                  &data[cur_ix_masked],\n                                                  max_length);\n      if (len >= 3 || (len == 2 && i < 2)) {\n        /* Comparing for >= 2 does not change the semantics, but just saves for\n           a few unnecessary binary logarithms in backward reference score,\n           since we are not interested in such short matches. */\n        score_t score = BackwardReferenceScoreUsingLastDistance(len);\n        if (best_score < score) {\n          if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);\n          if (best_score < score) {\n            best_score = score;\n            best_len = len;\n            out->len = best_len;\n            out->distance = backward;\n            out->score = best_score;\n          }\n        }\n      }\n    }\n  }\n  /* we require matches of len >4, so increase best_len to 3, so we can compare\n   * 4 bytes all the time. */\n  if (best_len < 3) {\n    best_len = 3;\n  }\n  {\n    const uint8_t tag = hash & TAG_HASH_MASK;\n    const uint32_t first4 = BrotliUnalignedRead32(data + cur_ix_masked);\n    const size_t max_length_m4 = max_length - 4;\n    const size_t head = (num[key] + 1) & self->block_mask_;\n    uint64_t matches =\n        GetMatchingTagMask(self->block_size_ / 16, tag, tag_bucket, head);\n    /* Mask off any matches from uninitialized tags. */\n    uint16_t n = 65535 - num[key];\n    uint64_t block_has_unused_slots = self->block_size_ > n;\n    uint64_t mask = (block_has_unused_slots << (n & (64 - 1))) - 1;\n    matches &= mask;\n    for (; matches > 0; matches &= (matches - 1)) {\n      const size_t rb_index =\n          (head + (size_t)BROTLI_TZCNT64(matches)) & self->block_mask_;\n      size_t prev_ix = bucket[rb_index];\n      uint32_t current4;\n      const size_t backward = cur_ix - prev_ix;\n      if (BROTLI_PREDICT_FALSE(backward > max_backward)) {\n        break;\n      }\n      prev_ix &= ring_buffer_mask;\n      if (cur_ix_masked + best_len > ring_buffer_mask) {\n        break;\n      }\n      if (prev_ix + best_len > ring_buffer_mask ||\n          /* compare 4 bytes ending at best_len + 1 */\n          BrotliUnalignedRead32(&data[cur_ix_masked + best_len - 3]) !=\n              BrotliUnalignedRead32(&data[prev_ix + best_len - 3])) {\n        continue;\n      }\n      current4 = BrotliUnalignedRead32(data + prev_ix);\n      if (first4 != current4) continue;\n      {\n        const size_t len = FindMatchLengthWithLimit(&data[prev_ix + 4],\n                                                    &data[cur_ix_masked + 4],\n                                                    max_length_m4) + 4;\n        const score_t score = BackwardReferenceScore(len, backward);\n        if (best_score < score) {\n          best_score = score;\n          best_len = len;\n          out->len = best_len;\n          out->distance = backward;\n          out->score = best_score;\n        }\n      }\n    }\n    bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix;\n    tag_bucket[num[key] & self->block_mask_] = tag;\n    --num[key];\n  }\n  if (min_score == out->score) {\n    SearchInStaticDictionary(dictionary,\n        self->common_, &data[cur_ix_masked], max_length, dictionary_distance,\n        max_distance, out, BROTLI_FALSE);\n  }\n}\n\n#undef HashLongestMatch\n"
  },
  {
    "path": "c/enc/hash_longest_match_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2010 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN */\n\n/* A (forgetful) hash table to the data seen by the compressor, to\n   help create backward references to previous data.\n\n   This is a hash map of fixed size (bucket_size_) to a ring buffer of\n   fixed size (block_size_). The ring buffer contains the last block_size_\n   index positions of the given hash key in the compressed data. */\n\n#define HashLongestMatch HASHER()\n\nstatic BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }\nstatic BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }\n\n/* HashBytes is the function that chooses the bucket to place the address in. */\nstatic uint32_t FN(HashBytes)(\n    const uint8_t* BROTLI_RESTRICT data, const int shift) {\n  uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return (uint32_t)(h >> shift);\n}\n\ntypedef struct HashLongestMatch {\n  /* Number of hash buckets. */\n  size_t bucket_size_;\n  /* Only block_size_ newest backward references are kept,\n     and the older are forgotten. */\n  size_t block_size_;\n  /* Left-shift for computing hash bucket index from hash value. */\n  int hash_shift_;\n  /* Mask for accessing entries in a block (in a ring-buffer manner). */\n  uint32_t block_mask_;\n\n  int block_bits_;\n  int num_last_distances_to_check_;\n\n  /* Shortcuts. */\n  HasherCommon* common_;\n\n  /* --- Dynamic size members --- */\n\n  /* Number of entries in a particular bucket. */\n  uint16_t* num_;  /* uint16_t[bucket_size]; */\n\n  /* Buckets containing block_size_ of backward references. */\n  uint32_t* buckets_;  /* uint32_t[bucket_size * block_size]; */\n} HashLongestMatch;\n\nstatic void FN(Initialize)(\n    HasherCommon* common, HashLongestMatch* BROTLI_RESTRICT self,\n    const BrotliEncoderParams* params) {\n  self->common_ = common;\n\n  BROTLI_UNUSED(params);\n  self->hash_shift_ = 32 - common->params.bucket_bits;\n  self->bucket_size_ = (size_t)1 << common->params.bucket_bits;\n  self->block_size_ = (size_t)1 << common->params.block_bits;\n  self->block_mask_ = (uint32_t)(self->block_size_ - 1);\n  self->num_ = (uint16_t*)common->extra[0];\n  self->buckets_ = (uint32_t*)common->extra[1];\n  self->block_bits_ = common->params.block_bits;\n  self->num_last_distances_to_check_ =\n      common->params.num_last_distances_to_check;\n}\n\nstatic void FN(Prepare)(\n    HashLongestMatch* BROTLI_RESTRICT self, BROTLI_BOOL one_shot,\n    size_t input_size, const uint8_t* BROTLI_RESTRICT data) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  /* Partial preparation is 100 times slower (per socket). */\n  size_t partial_prepare_threshold = self->bucket_size_ >> 6;\n  if (one_shot && input_size <= partial_prepare_threshold) {\n    size_t i;\n    for (i = 0; i < input_size; ++i) {\n      const uint32_t key = FN(HashBytes)(&data[i], self->hash_shift_);\n      num[key] = 0;\n    }\n  } else {\n    memset(num, 0, self->bucket_size_ * sizeof(num[0]));\n  }\n}\n\nstatic BROTLI_INLINE void FN(HashMemAllocInBytes)(\n    const BrotliEncoderParams* params, BROTLI_BOOL one_shot,\n    size_t input_size, size_t* alloc_size) {\n  size_t bucket_size = (size_t)1 << params->hasher.bucket_bits;\n  size_t block_size = (size_t)1 << params->hasher.block_bits;\n  BROTLI_UNUSED(one_shot);\n  BROTLI_UNUSED(input_size);\n  alloc_size[0] = sizeof(uint16_t) * bucket_size;\n  alloc_size[1] = sizeof(uint32_t) * bucket_size * block_size;\n}\n\n/* Look at 4 bytes at &data[ix & mask].\n   Compute a hash from these, and store the value of ix at that position. */\nstatic BROTLI_INLINE void FN(Store)(\n    HashLongestMatch* BROTLI_RESTRICT self, const uint8_t* BROTLI_RESTRICT data,\n    const size_t mask, const size_t ix) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  const uint32_t key = FN(HashBytes)(&data[ix & mask], self->hash_shift_);\n  const size_t minor_ix = num[key] & self->block_mask_;\n  const size_t offset = minor_ix + (key << self->block_bits_);\n  ++num[key];\n  buckets[offset] = (uint32_t)ix;\n}\n\nstatic BROTLI_INLINE void FN(StoreRange)(HashLongestMatch* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask,\n    const size_t ix_start, const size_t ix_end) {\n  size_t i;\n  for (i = ix_start; i < ix_end; ++i) {\n    FN(Store)(self, data, mask, i);\n  }\n}\n\nstatic BROTLI_INLINE void FN(StitchToPreviousBlock)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    size_t num_bytes, size_t position, const uint8_t* ringbuffer,\n    size_t ringbuffer_mask) {\n  if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {\n    /* Prepare the hashes for three last bytes of the last write.\n       These could not be calculated before, since they require knowledge\n       of both the previous and the current block. */\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 3);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 2);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 1);\n  }\n}\n\nstatic BROTLI_INLINE void FN(PrepareDistanceCache)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    int* BROTLI_RESTRICT distance_cache) {\n  PrepareDistanceCache(distance_cache, self->num_last_distances_to_check_);\n}\n\n/* Find a longest backward match of &data[cur_ix] up to the length of\n   max_length and stores the position cur_ix in the hash table.\n\n   REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache\n             values; if this method is invoked repeatedly with the same distance\n             cache values, it is enough to invoke FN(PrepareDistanceCache) once.\n\n   Does not look for matches longer than max_length.\n   Does not look for matches further away than max_backward.\n   Writes the best match into |out|.\n   |out|->score is updated only if a better match is found. */\nstatic BROTLI_INLINE void FN(FindLongestMatch)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,\n    const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,\n    const size_t max_length, const size_t max_backward,\n    const size_t dictionary_distance, const size_t max_distance,\n    HasherSearchResult* BROTLI_RESTRICT out) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  /* Don't accept a short copy from far away. */\n  score_t min_score = out->score;\n  score_t best_score = out->score;\n  size_t best_len = out->len;\n  size_t i;\n  /* Precalculate the hash key and prefetch the bucket. */\n  const uint32_t key =\n      FN(HashBytes)(&data[cur_ix_masked], self->hash_shift_);\n  uint32_t* BROTLI_RESTRICT bucket = &buckets[key << self->block_bits_];\n  PREFETCH_L1(bucket);\n  if (self->block_bits_ > 4) PREFETCH_L1(bucket + 16);\n  out->len = 0;\n  out->len_code_delta = 0;\n\n  BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask + 1);\n\n  /* Try last distance first. */\n  for (i = 0; i < (size_t)self->num_last_distances_to_check_; ++i) {\n    const size_t backward = (size_t)distance_cache[i];\n    size_t prev_ix = (size_t)(cur_ix - backward);\n    if (prev_ix >= cur_ix) {\n      continue;\n    }\n    if (BROTLI_PREDICT_FALSE(backward > max_backward)) {\n      continue;\n    }\n    prev_ix &= ring_buffer_mask;\n\n    if (cur_ix_masked + best_len > ring_buffer_mask) {\n      break;\n    }\n    if (prev_ix + best_len > ring_buffer_mask ||\n        data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {\n      continue;\n    }\n    {\n      const size_t len = FindMatchLengthWithLimit(&data[prev_ix],\n                                                  &data[cur_ix_masked],\n                                                  max_length);\n      if (len >= 3 || (len == 2 && i < 2)) {\n        /* Comparing for >= 2 does not change the semantics, but just saves for\n           a few unnecessary binary logarithms in backward reference score,\n           since we are not interested in such short matches. */\n        score_t score = BackwardReferenceScoreUsingLastDistance(len);\n        if (best_score < score) {\n          if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);\n          if (best_score < score) {\n            best_score = score;\n            best_len = len;\n            out->len = best_len;\n            out->distance = backward;\n            out->score = best_score;\n          }\n        }\n      }\n    }\n  }\n  /* we require matches of len >4, so increase best_len to 3, so we can compare\n   * 4 bytes all the time. */\n  if (best_len < 3) {\n    best_len = 3;\n  }\n  {\n    const size_t down =\n        (num[key] > self->block_size_) ? (num[key] - self->block_size_) : 0u;\n    for (i = num[key]; i > down;) {\n      size_t prev_ix = bucket[--i & self->block_mask_];\n      const size_t backward = cur_ix - prev_ix;\n      if (BROTLI_PREDICT_FALSE(backward > max_backward)) {\n        break;\n      }\n      prev_ix &= ring_buffer_mask;\n      if (cur_ix_masked + best_len > ring_buffer_mask) {\n        break;\n      }\n      if (prev_ix + best_len > ring_buffer_mask ||\n          /* compare 4 bytes ending at best_len + 1 */\n          BrotliUnalignedRead32(&data[cur_ix_masked + best_len - 3]) !=\n              BrotliUnalignedRead32(&data[prev_ix + best_len - 3])) {\n        continue;\n      }\n      {\n        const size_t len = FindMatchLengthWithLimit(&data[prev_ix],\n                                                    &data[cur_ix_masked],\n                                                    max_length);\n        if (len >= 4) {\n          /* Comparing for >= 3 does not change the semantics, but just saves\n             for a few unnecessary binary logarithms in backward reference\n             score, since we are not interested in such short matches. */\n          score_t score = BackwardReferenceScore(len, backward);\n          if (best_score < score) {\n            best_score = score;\n            best_len = len;\n            out->len = best_len;\n            out->distance = backward;\n            out->score = best_score;\n          }\n        }\n      }\n    }\n    bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix;\n    ++num[key];\n  }\n  if (min_score == out->score) {\n    SearchInStaticDictionary(dictionary,\n        self->common_, &data[cur_ix_masked], max_length, dictionary_distance,\n        max_distance, out, BROTLI_FALSE);\n  }\n}\n\n#undef HashLongestMatch\n"
  },
  {
    "path": "c/enc/hash_longest_match_quickly_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2010 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN, BUCKET_BITS, BUCKET_SWEEP_BITS, HASH_LEN,\n                        USE_DICTIONARY\n */\n\n#define HashLongestMatchQuickly HASHER()\n\n#define BUCKET_SIZE (1 << BUCKET_BITS)\n#define BUCKET_MASK (BUCKET_SIZE - 1)\n#define BUCKET_SWEEP (1 << BUCKET_SWEEP_BITS)\n#define BUCKET_SWEEP_MASK ((BUCKET_SWEEP - 1) << 3)\n\nstatic BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; }\nstatic BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; }\n\n/* HashBytes is the function that chooses the bucket to place\n   the address in. The HashLongestMatch and HashLongestMatchQuickly\n   classes have separate, different implementations of hashing. */\nstatic uint32_t FN(HashBytes)(const uint8_t* data) {\n  const uint64_t h = ((BROTLI_UNALIGNED_LOAD64LE(data) << (64 - 8 * HASH_LEN)) *\n                      kHashMul64);\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return (uint32_t)(h >> (64 - BUCKET_BITS));\n}\n\n/* A (forgetful) hash table to the data seen by the compressor, to\n   help create backward references to previous data.\n\n   This is a hash map of fixed size (BUCKET_SIZE). */\ntypedef struct HashLongestMatchQuickly {\n  /* Shortcuts. */\n  HasherCommon* common;\n\n  /* --- Dynamic size members --- */\n\n  uint32_t* buckets_;  /* uint32_t[BUCKET_SIZE]; */\n} HashLongestMatchQuickly;\n\nstatic void FN(Initialize)(\n    HasherCommon* common, HashLongestMatchQuickly* BROTLI_RESTRICT self,\n    const BrotliEncoderParams* params) {\n  self->common = common;\n\n  BROTLI_UNUSED(params);\n  self->buckets_ = (uint32_t*)common->extra[0];\n}\n\nstatic void FN(Prepare)(\n    HashLongestMatchQuickly* BROTLI_RESTRICT self, BROTLI_BOOL one_shot,\n    size_t input_size, const uint8_t* BROTLI_RESTRICT data) {\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  /* Partial preparation is 100 times slower (per socket). */\n  size_t partial_prepare_threshold = BUCKET_SIZE >> 5;\n  if (one_shot && input_size <= partial_prepare_threshold) {\n    size_t i;\n    for (i = 0; i < input_size; ++i) {\n      const uint32_t key = FN(HashBytes)(&data[i]);\n      if (BUCKET_SWEEP == 1) {\n        buckets[key] = 0;\n      } else {\n        uint32_t j;\n        for (j = 0; j < BUCKET_SWEEP; ++j) {\n          buckets[(key + (j << 3)) & BUCKET_MASK] = 0;\n        }\n      }\n    }\n  } else {\n    /* It is not strictly necessary to fill this buffer here, but\n       not filling will make the results of the compression stochastic\n       (but correct). This is because random data would cause the\n       system to find accidentally good backward references here and there. */\n    memset(buckets, 0, sizeof(uint32_t) * BUCKET_SIZE);\n  }\n}\n\nstatic BROTLI_INLINE void FN(HashMemAllocInBytes)(\n    const BrotliEncoderParams* params, BROTLI_BOOL one_shot,\n    size_t input_size, size_t* alloc_size) {\n  BROTLI_UNUSED(params);\n  BROTLI_UNUSED(one_shot);\n  BROTLI_UNUSED(input_size);\n  alloc_size[0] = sizeof(uint32_t) * BUCKET_SIZE;\n}\n\n/* Look at 5 bytes at &data[ix & mask].\n   Compute a hash from these, and store the value somewhere within\n   [ix .. ix+3]. */\nstatic BROTLI_INLINE void FN(Store)(\n    HashLongestMatchQuickly* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {\n  const uint32_t key = FN(HashBytes)(&data[ix & mask]);\n  if (BUCKET_SWEEP == 1) {\n    self->buckets_[key] = (uint32_t)ix;\n  } else {\n    /* Wiggle the value with the bucket sweep range. */\n    const uint32_t off = ix & BUCKET_SWEEP_MASK;\n    self->buckets_[(key + off) & BUCKET_MASK] = (uint32_t)ix;\n  }\n}\n\nstatic BROTLI_INLINE void FN(StoreRange)(\n    HashLongestMatchQuickly* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask,\n    const size_t ix_start, const size_t ix_end) {\n  size_t i;\n  for (i = ix_start; i < ix_end; ++i) {\n    FN(Store)(self, data, mask, i);\n  }\n}\n\nstatic BROTLI_INLINE void FN(StitchToPreviousBlock)(\n    HashLongestMatchQuickly* BROTLI_RESTRICT self,\n    size_t num_bytes, size_t position,\n    const uint8_t* ringbuffer, size_t ringbuffer_mask) {\n  if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {\n    /* Prepare the hashes for three last bytes of the last write.\n       These could not be calculated before, since they require knowledge\n       of both the previous and the current block. */\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 3);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 2);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 1);\n  }\n}\n\nstatic BROTLI_INLINE void FN(PrepareDistanceCache)(\n    HashLongestMatchQuickly* BROTLI_RESTRICT self,\n    int* BROTLI_RESTRICT distance_cache) {\n  BROTLI_UNUSED(self);\n  BROTLI_UNUSED(distance_cache);\n}\n\n/* Find a longest backward match of &data[cur_ix & ring_buffer_mask]\n   up to the length of max_length and stores the position cur_ix in the\n   hash table.\n\n   Does not look for matches longer than max_length.\n   Does not look for matches further away than max_backward.\n   Writes the best match into |out|.\n   |out|->score is updated only if a better match is found. */\nstatic BROTLI_INLINE void FN(FindLongestMatch)(\n    HashLongestMatchQuickly* BROTLI_RESTRICT self,\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* BROTLI_RESTRICT data,\n    const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_cache,\n    const size_t cur_ix, const size_t max_length, const size_t max_backward,\n    const size_t dictionary_distance, const size_t max_distance,\n    HasherSearchResult* BROTLI_RESTRICT out) {\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  const size_t best_len_in = out->len;\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  /* TODO: compare 4 bytes at once (and set the minimum best len to 4) */\n  int compare_char = data[cur_ix_masked + best_len_in];\n  size_t key = FN(HashBytes)(&data[cur_ix_masked]);\n  size_t key_out;\n  score_t min_score = out->score;\n  score_t best_score = out->score;\n  size_t best_len = best_len_in;\n  size_t cached_backward = (size_t)distance_cache[0];\n  size_t prev_ix = cur_ix - cached_backward;\n\n  BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask + 1);\n\n  out->len_code_delta = 0;\n  if (prev_ix < cur_ix && cached_backward <= max_backward) {\n    prev_ix &= (uint32_t)ring_buffer_mask;\n    if (compare_char == data[prev_ix + best_len]) {\n      const size_t len = FindMatchLengthWithLimit(\n          &data[prev_ix], &data[cur_ix_masked], max_length);\n      if (len >= 4) {\n        const score_t score = BackwardReferenceScoreUsingLastDistance(len);\n        if (best_score < score) {\n          out->len = len;\n          out->distance = cached_backward;\n          out->score = score;\n          if (BUCKET_SWEEP == 1) {\n            buckets[key] = (uint32_t)cur_ix;\n            return;\n          } else {\n            best_len = len;\n            best_score = score;\n            compare_char = data[cur_ix_masked + len];\n          }\n        }\n      }\n    }\n  }\n  if (BUCKET_SWEEP == 1) {\n    size_t backward;\n    size_t len;\n    /* Only one to look for, don't bother to prepare for a loop. */\n    prev_ix = buckets[key];\n    buckets[key] = (uint32_t)cur_ix;\n    backward = cur_ix - prev_ix;\n    prev_ix &= (uint32_t)ring_buffer_mask;\n    if (compare_char != data[prev_ix + best_len_in]) {\n      return;\n    }\n    if (BROTLI_PREDICT_FALSE(backward == 0 || backward > max_backward)) {\n      return;\n    }\n    len = FindMatchLengthWithLimit(&data[prev_ix],\n                                   &data[cur_ix_masked],\n                                   max_length);\n    if (len >= 4) {\n      const score_t score = BackwardReferenceScore(len, backward);\n      if (best_score < score) {\n        out->len = len;\n        out->distance = backward;\n        out->score = score;\n        return;\n      }\n    }\n  } else {\n    size_t keys[BUCKET_SWEEP];\n    size_t i;\n    for (i = 0; i < BUCKET_SWEEP; ++i) {\n      keys[i] = (key + (i << 3)) & BUCKET_MASK;\n    }\n    key_out = keys[(cur_ix & BUCKET_SWEEP_MASK) >> 3];\n    for (i = 0; i < BUCKET_SWEEP; ++i) {\n      size_t len;\n      size_t backward;\n      prev_ix = buckets[keys[i]];\n      backward = cur_ix - prev_ix;\n      prev_ix &= (uint32_t)ring_buffer_mask;\n      if (compare_char != data[prev_ix + best_len]) {\n        continue;\n      }\n      if (BROTLI_PREDICT_FALSE(backward == 0 || backward > max_backward)) {\n        continue;\n      }\n      len = FindMatchLengthWithLimit(&data[prev_ix],\n                                     &data[cur_ix_masked],\n                                     max_length);\n      if (len >= 4) {\n        const score_t score = BackwardReferenceScore(len, backward);\n        if (best_score < score) {\n          best_len = len;\n          out->len = len;\n          compare_char = data[cur_ix_masked + len];\n          best_score = score;\n          out->score = score;\n          out->distance = backward;\n        }\n      }\n    }\n  }\n  if (USE_DICTIONARY && min_score == out->score) {\n    SearchInStaticDictionary(dictionary,\n        self->common, &data[cur_ix_masked], max_length, dictionary_distance,\n        max_distance, out, BROTLI_TRUE);\n  }\n  if (BUCKET_SWEEP != 1) {\n    buckets[key_out] = (uint32_t)cur_ix;\n  }\n}\n\n#undef BUCKET_SWEEP_MASK\n#undef BUCKET_SWEEP\n#undef BUCKET_MASK\n#undef BUCKET_SIZE\n\n#undef HashLongestMatchQuickly\n"
  },
  {
    "path": "c/enc/hash_longest_match_simd_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2010 Google Inc. All Rights Reserved.\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n/* template parameters: FN */\n/* A (forgetful) hash table to the data seen by the compressor, to\n   help create backward references to previous data.\n   This is a hash map of fixed size (bucket_size_) to a ring buffer of\n   fixed size (block_size_). The ring buffer contains the last block_size_\n   index positions of the given hash key in the compressed data. */\n#define HashLongestMatch HASHER()\n#define TAG_HASH_BITS 8\n#define TAG_HASH_MASK ((1 << TAG_HASH_BITS) - 1)\nstatic BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }\nstatic BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }\n/* HashBytes is the function that chooses the bucket to place the address in. */\nstatic uint32_t FN(HashBytes)(\n    const uint8_t* BROTLI_RESTRICT data, const int shift) {\n  uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return (uint32_t)(h >> shift);\n}\ntypedef struct HashLongestMatch {\n  /* Number of hash buckets. */\n  size_t bucket_size_;\n  /* Only block_size_ newest backward references are kept,\n     and the older are forgotten. */\n  size_t block_size_;\n  /* Left-shift for computing hash bucket index from hash value. */\n  int hash_shift_;\n  /* Mask for accessing entries in a block (in a ring-buffer manner). */\n  uint32_t block_mask_;\n  int block_bits_;\n  int num_last_distances_to_check_;\n  /* Shortcuts. */\n  HasherCommon* common_;\n  /* --- Dynamic size members --- */\n  /* Number of entries in a particular bucket. */\n  uint16_t* num_;  /* uint16_t[bucket_size]; */\n  uint8_t* tags_;\n  /* Buckets containing block_size_ of backward references. */\n  uint32_t* buckets_;  /* uint32_t[bucket_size * block_size]; */\n} HashLongestMatch;\nstatic void FN(Initialize)(\n    HasherCommon* common, HashLongestMatch* BROTLI_RESTRICT self,\n    const BrotliEncoderParams* params) {\n  self->common_ = common;\n  BROTLI_UNUSED(params);\n  self->hash_shift_ = 32 - common->params.bucket_bits - TAG_HASH_BITS;\n  self->bucket_size_ = (size_t)1 << common->params.bucket_bits;\n  self->block_size_ = (size_t)1 << common->params.block_bits;\n  self->block_mask_ = (uint32_t)(self->block_size_ - 1);\n  self->num_ = (uint16_t*)common->extra[0];\n  self->tags_ = (uint8_t*)common->extra[1];\n  self->buckets_ = (uint32_t*)common->extra[2];\n  self->block_bits_ = common->params.block_bits;\n  self->num_last_distances_to_check_ =\n      common->params.num_last_distances_to_check;\n}\nstatic void FN(Prepare)(\n    HashLongestMatch* BROTLI_RESTRICT self, BROTLI_BOOL one_shot,\n    size_t input_size, const uint8_t* BROTLI_RESTRICT data) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  /* Partial preparation is 100 times slower (per socket). */\n  size_t partial_prepare_threshold = self->bucket_size_ >> 6;\n  if (one_shot && input_size <= partial_prepare_threshold) {\n    size_t i;\n    for (i = 0; i < input_size; ++i) {\n      const uint32_t hash = FN(HashBytes)(&data[i], self->hash_shift_);\n      const uint32_t key = hash >> TAG_HASH_BITS;\n      num[key] = 65535;\n    }\n  } else {\n    /* Set all the bytes of num to 255, which makes each uint16_t 65535. */\n    memset(num, 255, self->bucket_size_ * sizeof(num[0]));\n  }\n}\nstatic BROTLI_INLINE void FN(HashMemAllocInBytes)(\n    const BrotliEncoderParams* params, BROTLI_BOOL one_shot,\n    size_t input_size, size_t* alloc_size) {\n  size_t bucket_size = (size_t)1 << params->hasher.bucket_bits;\n  size_t block_size = (size_t)1 << params->hasher.block_bits;\n  BROTLI_UNUSED(one_shot);\n  BROTLI_UNUSED(input_size);\n  alloc_size[0] = sizeof(uint16_t) * bucket_size;\n  alloc_size[1] = sizeof(uint8_t) * bucket_size * block_size;\n  alloc_size[2] = sizeof(uint32_t) * bucket_size * block_size;\n}\n/* Look at 4 bytes at &data[ix & mask].\n   Compute a hash from these, and store the value of ix at that position. */\nstatic BROTLI_INLINE void FN(Store)(\n    HashLongestMatch* BROTLI_RESTRICT self, const uint8_t* BROTLI_RESTRICT data,\n    const size_t mask, const size_t ix) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  uint8_t* BROTLI_RESTRICT tags = self->tags_;\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  const size_t hash = FN(HashBytes)(&data[ix & mask], self->hash_shift_);\n  const size_t key = hash >> TAG_HASH_BITS;\n  const uint8_t tag = hash & TAG_HASH_MASK;\n  const size_t minor_ix = num[key] & self->block_mask_;\n  const size_t offset = minor_ix + (key << self->block_bits_);\n  --num[key];\n  buckets[offset] = (uint32_t)ix;\n  tags[offset] = tag;\n}\nstatic BROTLI_INLINE void FN(StoreRange)(HashLongestMatch* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask,\n    const size_t ix_start, const size_t ix_end) {\n  size_t i;\n  for (i = ix_start; i < ix_end; ++i) {\n    FN(Store)(self, data, mask, i);\n  }\n}\nstatic BROTLI_INLINE void FN(StitchToPreviousBlock)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    size_t num_bytes, size_t position, const uint8_t* ringbuffer,\n    size_t ringbuffer_mask) {\n  if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {\n    /* Prepare the hashes for three last bytes of the last write.\n       These could not be calculated before, since they require knowledge\n       of both the previous and the current block. */\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 3);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 2);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 1);\n  }\n}\nstatic BROTLI_INLINE void FN(PrepareDistanceCache)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    int* BROTLI_RESTRICT distance_cache) {\n  PrepareDistanceCache(distance_cache, self->num_last_distances_to_check_);\n}\n\n/* Find a longest backward match of &data[cur_ix] up to the length of\n   max_length and stores the position cur_ix in the hash table.\n   REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache\n             values; if this method is invoked repeatedly with the same distance\n             cache values, it is enough to invoke FN(PrepareDistanceCache) once.\n   Does not look for matches longer than max_length.\n   Does not look for matches further away than max_backward.\n   Writes the best match into |out|.\n   |out|->score is updated only if a better match is found. */\nstatic BROTLI_INLINE void FN(FindLongestMatch)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,\n    const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,\n    const size_t max_length, const size_t max_backward,\n    const size_t dictionary_distance, const size_t max_distance,\n    HasherSearchResult* BROTLI_RESTRICT out) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  uint8_t* BROTLI_RESTRICT tags = self->tags_;\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  /* Don't accept a short copy from far away. */\n  score_t min_score = out->score;\n  score_t best_score = out->score;\n  size_t best_len = out->len;\n  size_t i;\n  /* Precalculate the hash key and prefetch the bucket. */\n  const uint32_t hash =\n      FN(HashBytes)(&data[cur_ix_masked], self->hash_shift_);\n  const uint32_t key = hash >> TAG_HASH_BITS;\n  uint32_t* BROTLI_RESTRICT bucket = &buckets[key << self->block_bits_];\n  uint8_t* BROTLI_RESTRICT tag_bucket = &tags[key << self->block_bits_];\n  PREFETCH_L1(bucket);\n  PREFETCH_L1(tag_bucket);\n  if (self->block_bits_ > 4) PREFETCH_L1(bucket + 16);\n  out->len = 0;\n  out->len_code_delta = 0;\n\n  BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask + 1);\n\n  /* Try last distance first. */\n  for (i = 0; i < (size_t)self->num_last_distances_to_check_; ++i) {\n    const size_t backward = (size_t)distance_cache[i];\n    size_t prev_ix = (size_t)(cur_ix - backward);\n    if (prev_ix >= cur_ix) {\n      continue;\n    }\n    if (BROTLI_PREDICT_FALSE(backward > max_backward)) {\n      continue;\n    }\n    prev_ix &= ring_buffer_mask;\n\n    if (cur_ix_masked + best_len > ring_buffer_mask) {\n      break;\n    }\n    if (prev_ix + best_len > ring_buffer_mask ||\n        data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {\n      continue;\n    }\n    {\n      const size_t len = FindMatchLengthWithLimit(&data[prev_ix],\n                                                  &data[cur_ix_masked],\n                                                  max_length);\n      if (len >= 3 || (len == 2 && i < 2)) {\n        /* Comparing for >= 2 does not change the semantics, but just saves for\n           a few unnecessary binary logarithms in backward reference score,\n           since we are not interested in such short matches. */\n        score_t score = BackwardReferenceScoreUsingLastDistance(len);\n        if (best_score < score) {\n          if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);\n          if (best_score < score) {\n            best_score = score;\n            best_len = len;\n            out->len = best_len;\n            out->distance = backward;\n            out->score = best_score;\n          }\n        }\n      }\n    }\n  }\n  /* we require matches of len >4, so increase best_len to 3, so we can compare\n   * 4 bytes all the time. */\n  if (best_len < 3) {\n    best_len = 3;\n  }\n  {\n    const uint8_t tag = hash & TAG_HASH_MASK;\n    const size_t head = (num[key] + 1) & self->block_mask_;\n    uint64_t matches =\n        GetMatchingTagMask(self->block_size_ / 16, tag, tag_bucket, head);\n    /* Mask off any matches from uninitialized tags. */\n    uint16_t n = 65535 - num[key];\n    uint64_t block_has_unused_slots = self->block_size_ > n;\n    uint64_t mask = (block_has_unused_slots << (n & (64 - 1))) - 1;\n    matches &= mask;\n    for (; matches > 0; matches &= (matches - 1)) {\n      const size_t rb_index =\n          (head + (size_t)BROTLI_TZCNT64(matches)) & self->block_mask_;\n      size_t prev_ix = bucket[rb_index];\n      const size_t backward = cur_ix - prev_ix;\n      if (BROTLI_PREDICT_FALSE(backward > max_backward)) {\n        break;\n      }\n      prev_ix &= ring_buffer_mask;\n      if (cur_ix_masked + best_len > ring_buffer_mask) {\n        break;\n      }\n      if (prev_ix + best_len > ring_buffer_mask ||\n          /* compare 4 bytes ending at best_len + 1 */\n          BrotliUnalignedRead32(&data[cur_ix_masked + best_len - 3]) !=\n              BrotliUnalignedRead32(&data[prev_ix + best_len - 3])) {\n        continue;\n      }\n      {\n        const size_t len = FindMatchLengthWithLimit(&data[prev_ix],\n                                                    &data[cur_ix_masked],\n                                                    max_length);\n        if (len >= 4) {\n          /* Comparing for >= 3 does not change the semantics, but just saves\n             for a few unnecessary binary logarithms in backward reference\n             score, since we are not interested in such short matches. */\n          score_t score = BackwardReferenceScore(len, backward);\n          if (best_score < score) {\n            best_score = score;\n            best_len = len;\n            out->len = best_len;\n            out->distance = backward;\n            out->score = best_score;\n          }\n        }\n      }\n    }\n    bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix;\n    tag_bucket[num[key] & self->block_mask_] = tag;\n    --num[key];\n  }\n  if (min_score == out->score) {\n    SearchInStaticDictionary(dictionary,\n        self->common_, &data[cur_ix_masked], max_length, dictionary_distance,\n        max_distance, out, BROTLI_FALSE);\n  }\n}\n#undef HashLongestMatch\n"
  },
  {
    "path": "c/enc/hash_rolling_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2018 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN, JUMP, NUMBUCKETS, MASK, CHUNKLEN */\n/* NUMBUCKETS / (MASK + 1) = probability of storing and using hash code. */\n/* JUMP = skip bytes for speedup */\n\n/* Rolling hash for long distance long string matches. Stores one position\n   per bucket, bucket key is computed over a long region. */\n\n#define HashRolling HASHER()\n\nstatic const uint32_t FN(kRollingHashMul32) = 69069;\nstatic const uint32_t FN(kInvalidPos) = 0xffffffff;\n\n/* This hasher uses a longer forward length, but returning a higher value here\n   will hurt compression by the main hasher when combined with a composite\n   hasher. The hasher tests for forward itself instead. */\nstatic BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }\nstatic BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }\n\n/* Computes a code from a single byte. A lookup table of 256 values could be\n   used, but simply adding 1 works about as good. */\nstatic uint32_t FN(HashByte)(uint8_t byte) {\n  return (uint32_t)byte + 1u;\n}\n\nstatic uint32_t FN(HashRollingFunctionInitial)(uint32_t state, uint8_t add,\n                                               uint32_t factor) {\n  return (uint32_t)(factor * state + FN(HashByte)(add));\n}\n\nstatic uint32_t FN(HashRollingFunction)(uint32_t state, uint8_t add,\n                                        uint8_t rem, uint32_t factor,\n                                        uint32_t factor_remove) {\n  return (uint32_t)(factor * state +\n      FN(HashByte)(add) - factor_remove * FN(HashByte)(rem));\n}\n\ntypedef struct HashRolling {\n  uint32_t state;\n  uint32_t* table;\n  size_t next_ix;\n\n  uint32_t chunk_len;\n  uint32_t factor;\n  uint32_t factor_remove;\n} HashRolling;\n\nstatic void FN(Initialize)(\n    HasherCommon* common, HashRolling* BROTLI_RESTRICT self,\n    const BrotliEncoderParams* params) {\n  size_t i;\n  self->state = 0;\n  self->next_ix = 0;\n\n  self->factor = FN(kRollingHashMul32);\n\n  /* Compute the factor of the oldest byte to remove: factor**steps modulo\n     0xffffffff (the multiplications rely on 32-bit overflow) */\n  self->factor_remove = 1;\n  for (i = 0; i < CHUNKLEN; i += JUMP) {\n    self->factor_remove *= self->factor;\n  }\n\n  self->table = (uint32_t*)common->extra[0];\n  for (i = 0; i < NUMBUCKETS; i++) {\n    self->table[i] = FN(kInvalidPos);\n  }\n\n  BROTLI_UNUSED(params);\n}\n\nstatic void FN(Prepare)(HashRolling* BROTLI_RESTRICT self, BROTLI_BOOL one_shot,\n    size_t input_size, const uint8_t* BROTLI_RESTRICT data) {\n  size_t i;\n  /* Too small size, cannot use this hasher. */\n  if (input_size < CHUNKLEN) return;\n  self->state = 0;\n  for (i = 0; i < CHUNKLEN; i += JUMP) {\n    self->state = FN(HashRollingFunctionInitial)(\n        self->state, data[i], self->factor);\n  }\n  BROTLI_UNUSED(one_shot);\n}\n\nstatic BROTLI_INLINE void FN(HashMemAllocInBytes)(\n    const BrotliEncoderParams* params, BROTLI_BOOL one_shot,\n    size_t input_size, size_t* alloc_size) {\n  BROTLI_UNUSED(params);\n  BROTLI_UNUSED(one_shot);\n  BROTLI_UNUSED(input_size);\n  alloc_size[0] = NUMBUCKETS * sizeof(uint32_t);\n}\n\nstatic BROTLI_INLINE void FN(Store)(HashRolling* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {\n  BROTLI_UNUSED(self);\n  BROTLI_UNUSED(data);\n  BROTLI_UNUSED(mask);\n  BROTLI_UNUSED(ix);\n}\n\nstatic BROTLI_INLINE void FN(StoreRange)(HashRolling* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask,\n    const size_t ix_start, const size_t ix_end) {\n  BROTLI_UNUSED(self);\n  BROTLI_UNUSED(data);\n  BROTLI_UNUSED(mask);\n  BROTLI_UNUSED(ix_start);\n  BROTLI_UNUSED(ix_end);\n}\n\nstatic BROTLI_INLINE void FN(StitchToPreviousBlock)(\n    HashRolling* BROTLI_RESTRICT self,\n    size_t num_bytes, size_t position, const uint8_t* ringbuffer,\n    size_t ring_buffer_mask) {\n  /* In this case we must re-initialize the hasher from scratch from the\n     current position. */\n  size_t position_masked;\n  size_t available = num_bytes;\n  if ((position & (JUMP - 1)) != 0) {\n    size_t diff = JUMP - (position & (JUMP - 1));\n    available = (diff > available) ? 0 : (available - diff);\n    position += diff;\n  }\n  position_masked = position & ring_buffer_mask;\n  /* wrapping around ringbuffer not handled. */\n  if (available > ring_buffer_mask - position_masked) {\n    available = ring_buffer_mask - position_masked;\n  }\n\n  FN(Prepare)(self, BROTLI_FALSE, available,\n      ringbuffer + (position & ring_buffer_mask));\n  self->next_ix = position;\n  BROTLI_UNUSED(num_bytes);\n}\n\nstatic BROTLI_INLINE void FN(PrepareDistanceCache)(\n    HashRolling* BROTLI_RESTRICT self,\n    int* BROTLI_RESTRICT distance_cache) {\n  BROTLI_UNUSED(self);\n  BROTLI_UNUSED(distance_cache);\n}\n\nstatic BROTLI_INLINE void FN(FindLongestMatch)(\n    HashRolling* BROTLI_RESTRICT self,\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,\n    const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,\n    const size_t max_length, const size_t max_backward,\n    const size_t dictionary_distance, const size_t max_distance,\n    HasherSearchResult* BROTLI_RESTRICT out) {\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  size_t pos;\n\n  if ((cur_ix & (JUMP - 1)) != 0) return;\n\n  /* Not enough lookahead */\n  if (max_length < CHUNKLEN) return;\n\n  for (pos = self->next_ix; pos <= cur_ix; pos += JUMP) {\n    uint32_t code = self->state & MASK;\n\n    uint8_t rem = data[pos & ring_buffer_mask];\n    uint8_t add = data[(pos + CHUNKLEN) & ring_buffer_mask];\n    size_t found_ix = FN(kInvalidPos);\n\n    self->state = FN(HashRollingFunction)(\n        self->state, add, rem, self->factor, self->factor_remove);\n\n    if (code < NUMBUCKETS) {\n      found_ix = self->table[code];\n      self->table[code] = (uint32_t)pos;\n      if (pos == cur_ix && found_ix != FN(kInvalidPos)) {\n        /* The cast to 32-bit makes backward distances up to 4GB work even\n           if cur_ix is above 4GB, despite using 32-bit values in the table. */\n        size_t backward = (uint32_t)(cur_ix - found_ix);\n        if (backward <= max_backward) {\n          const size_t found_ix_masked = found_ix & ring_buffer_mask;\n          const size_t len = FindMatchLengthWithLimit(&data[found_ix_masked],\n                                                      &data[cur_ix_masked],\n                                                      max_length);\n          if (len >= 4 && len > out->len) {\n            score_t score = BackwardReferenceScore(len, backward);\n            if (score > out->score) {\n              out->len = len;\n              out->distance = backward;\n              out->score = score;\n              out->len_code_delta = 0;\n            }\n          }\n        }\n      }\n    }\n  }\n\n  self->next_ix = cur_ix + JUMP;\n\n  /* NOTE: this hasher does not search in the dictionary. It is used as\n     backup-hasher, the main hasher already searches in it. */\n  BROTLI_UNUSED(dictionary);\n  BROTLI_UNUSED(distance_cache);\n  BROTLI_UNUSED(dictionary_distance);\n  BROTLI_UNUSED(max_distance);\n}\n\n#undef HashRolling\n"
  },
  {
    "path": "c/enc/hash_to_binary_tree_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN, BUCKET_BITS, MAX_TREE_COMP_LENGTH,\n                        MAX_TREE_SEARCH_DEPTH */\n\n/* A (forgetful) hash table where each hash bucket contains a binary tree of\n   sequences whose first 4 bytes share the same hash code.\n   Each sequence is MAX_TREE_COMP_LENGTH long and is identified by its starting\n   position in the input data. The binary tree is sorted by the lexicographic\n   order of the sequences, and it is also a max-heap with respect to the\n   starting positions. */\n\n#define HashToBinaryTree HASHER()\n\n#define BUCKET_SIZE (1 << BUCKET_BITS)\n\nstatic BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }\nstatic BROTLI_INLINE size_t FN(StoreLookahead)(void) {\n  return MAX_TREE_COMP_LENGTH;\n}\n\nstatic uint32_t FN(HashBytes)(const uint8_t* BROTLI_RESTRICT data) {\n  uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return h >> (32 - BUCKET_BITS);\n}\n\ntypedef struct HashToBinaryTree {\n  /* The window size minus 1 */\n  size_t window_mask_;\n\n  /* Hash table that maps the 4-byte hashes of the sequence to the last\n     position where this hash was found, which is the root of the binary\n     tree of sequences that share this hash bucket. */\n  uint32_t* buckets_;  /* uint32_t[BUCKET_SIZE]; */\n\n  /* A position used to mark a non-existent sequence, i.e. a tree is empty if\n     its root is at invalid_pos_ and a node is a leaf if both its children\n     are at invalid_pos_. */\n  uint32_t invalid_pos_;\n\n  /* --- Dynamic size members --- */\n\n  /* The union of the binary trees of each hash bucket. The root of the tree\n     corresponding to a hash is a sequence starting at buckets_[hash] and\n     the left and right children of a sequence starting at pos are\n     forest_[2 * pos] and forest_[2 * pos + 1]. */\n  uint32_t* forest_;  /* uint32_t[2 * num_nodes] */\n} HashToBinaryTree;\n\nstatic void FN(Initialize)(\n    HasherCommon* common, HashToBinaryTree* BROTLI_RESTRICT self,\n    const BrotliEncoderParams* params) {\n  self->buckets_ = (uint32_t*)common->extra[0];\n  self->forest_ = (uint32_t*)common->extra[1];\n\n  self->window_mask_ = (1u << params->lgwin) - 1u;\n  self->invalid_pos_ = (uint32_t)(0 - self->window_mask_);\n}\n\nstatic void FN(Prepare)\n    (HashToBinaryTree* BROTLI_RESTRICT self, BROTLI_BOOL one_shot,\n    size_t input_size, const uint8_t* BROTLI_RESTRICT data) {\n  uint32_t invalid_pos = self->invalid_pos_;\n  uint32_t i;\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  BROTLI_UNUSED(data);\n  BROTLI_UNUSED(one_shot);\n  BROTLI_UNUSED(input_size);\n  for (i = 0; i < BUCKET_SIZE; i++) {\n    buckets[i] = invalid_pos;\n  }\n}\n\nstatic BROTLI_INLINE void FN(HashMemAllocInBytes)(\n    const BrotliEncoderParams* params, BROTLI_BOOL one_shot,\n    size_t input_size, size_t* alloc_size) {\n  size_t num_nodes = (size_t)1 << params->lgwin;\n  if (one_shot && input_size < num_nodes) {\n    num_nodes = input_size;\n  }\n  alloc_size[0] = sizeof(uint32_t) * BUCKET_SIZE;\n  alloc_size[1] = 2 * sizeof(uint32_t) * num_nodes;\n}\n\nstatic BROTLI_INLINE size_t FN(LeftChildIndex)(\n    HashToBinaryTree* BROTLI_RESTRICT self,\n    const size_t pos) {\n  return 2 * (pos & self->window_mask_);\n}\n\nstatic BROTLI_INLINE size_t FN(RightChildIndex)(\n    HashToBinaryTree* BROTLI_RESTRICT self,\n    const size_t pos) {\n  return 2 * (pos & self->window_mask_) + 1;\n}\n\n/* Stores the hash of the next 4 bytes and in a single tree-traversal, the\n   hash bucket's binary tree is searched for matches and is re-rooted at the\n   current position.\n\n   If less than MAX_TREE_COMP_LENGTH data is available, the hash bucket of the\n   current position is searched for matches, but the state of the hash table\n   is not changed, since we can not know the final sorting order of the\n   current (incomplete) sequence.\n\n   This function must be called with increasing cur_ix positions. */\nstatic BROTLI_INLINE BackwardMatch* FN(StoreAndFindMatches)(\n    HashToBinaryTree* BROTLI_RESTRICT self, const uint8_t* BROTLI_RESTRICT data,\n    const size_t cur_ix, const size_t ring_buffer_mask, const size_t max_length,\n    const size_t max_backward, size_t* const BROTLI_RESTRICT best_len,\n    BackwardMatch* BROTLI_RESTRICT matches) {\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  const size_t max_comp_len =\n      BROTLI_MIN(size_t, max_length, MAX_TREE_COMP_LENGTH);\n  const BROTLI_BOOL should_reroot_tree =\n      TO_BROTLI_BOOL(max_length >= MAX_TREE_COMP_LENGTH);\n  const uint32_t key = FN(HashBytes)(&data[cur_ix_masked]);\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  uint32_t* BROTLI_RESTRICT forest = self->forest_;\n  size_t prev_ix = buckets[key];\n  /* The forest index of the rightmost node of the left subtree of the new\n     root, updated as we traverse and re-root the tree of the hash bucket. */\n  size_t node_left = FN(LeftChildIndex)(self, cur_ix);\n  /* The forest index of the leftmost node of the right subtree of the new\n     root, updated as we traverse and re-root the tree of the hash bucket. */\n  size_t node_right = FN(RightChildIndex)(self, cur_ix);\n  /* The match length of the rightmost node of the left subtree of the new\n     root, updated as we traverse and re-root the tree of the hash bucket. */\n  size_t best_len_left = 0;\n  /* The match length of the leftmost node of the right subtree of the new\n     root, updated as we traverse and re-root the tree of the hash bucket. */\n  size_t best_len_right = 0;\n  size_t depth_remaining;\n  if (should_reroot_tree) {\n    buckets[key] = (uint32_t)cur_ix;\n  }\n  for (depth_remaining = MAX_TREE_SEARCH_DEPTH; ; --depth_remaining) {\n    const size_t backward = cur_ix - prev_ix;\n    const size_t prev_ix_masked = prev_ix & ring_buffer_mask;\n    if (backward == 0 || backward > max_backward || depth_remaining == 0) {\n      if (should_reroot_tree) {\n        forest[node_left] = self->invalid_pos_;\n        forest[node_right] = self->invalid_pos_;\n      }\n      break;\n    }\n    {\n      const size_t cur_len = BROTLI_MIN(size_t, best_len_left, best_len_right);\n      size_t len;\n      BROTLI_DCHECK(cur_len <= MAX_TREE_COMP_LENGTH);\n      len = cur_len +\n          FindMatchLengthWithLimit(&data[cur_ix_masked + cur_len],\n                                   &data[prev_ix_masked + cur_len],\n                                   max_length - cur_len);\n      BROTLI_DCHECK(\n          0 == memcmp(&data[cur_ix_masked], &data[prev_ix_masked], len));\n      if (matches && len > *best_len) {\n        *best_len = len;\n        InitBackwardMatch(matches++, backward, len);\n      }\n      if (len >= max_comp_len) {\n        if (should_reroot_tree) {\n          forest[node_left] = forest[FN(LeftChildIndex)(self, prev_ix)];\n          forest[node_right] = forest[FN(RightChildIndex)(self, prev_ix)];\n        }\n        break;\n      }\n      if (data[cur_ix_masked + len] > data[prev_ix_masked + len]) {\n        best_len_left = len;\n        if (should_reroot_tree) {\n          forest[node_left] = (uint32_t)prev_ix;\n        }\n        node_left = FN(RightChildIndex)(self, prev_ix);\n        prev_ix = forest[node_left];\n      } else {\n        best_len_right = len;\n        if (should_reroot_tree) {\n          forest[node_right] = (uint32_t)prev_ix;\n        }\n        node_right = FN(LeftChildIndex)(self, prev_ix);\n        prev_ix = forest[node_right];\n      }\n    }\n  }\n  return matches;\n}\n\n/* Finds all backward matches of &data[cur_ix & ring_buffer_mask] up to the\n   length of max_length and stores the position cur_ix in the hash table.\n\n   Sets *num_matches to the number of matches found, and stores the found\n   matches in matches[0] to matches[*num_matches - 1]. The matches will be\n   sorted by strictly increasing length and (non-strictly) increasing\n   distance. */\nstatic BROTLI_INLINE size_t FN(FindAllMatches)(\n    HashToBinaryTree* BROTLI_RESTRICT self,\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* BROTLI_RESTRICT data,\n    const size_t ring_buffer_mask, const size_t cur_ix,\n    const size_t max_length, const size_t max_backward,\n    const size_t dictionary_distance, const BrotliEncoderParams* params,\n    BackwardMatch* matches) {\n  BackwardMatch* const orig_matches = matches;\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  size_t best_len = 1;\n  const size_t short_match_max_backward =\n      params->quality != HQ_ZOPFLIFICATION_QUALITY ? 16 : 64;\n  size_t stop = cur_ix - short_match_max_backward;\n  uint32_t dict_matches[BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1];\n  size_t i;\n  if (cur_ix < short_match_max_backward) { stop = 0; }\n  for (i = cur_ix - 1; i > stop && best_len <= 2; --i) {\n    size_t prev_ix = i;\n    const size_t backward = cur_ix - prev_ix;\n    if (BROTLI_PREDICT_FALSE(backward > max_backward)) {\n      break;\n    }\n    prev_ix &= ring_buffer_mask;\n    if (data[cur_ix_masked] != data[prev_ix] ||\n        data[cur_ix_masked + 1] != data[prev_ix + 1]) {\n      continue;\n    }\n    {\n      const size_t len =\n          FindMatchLengthWithLimit(&data[prev_ix], &data[cur_ix_masked],\n                                   max_length);\n      if (len > best_len) {\n        best_len = len;\n        InitBackwardMatch(matches++, backward, len);\n      }\n    }\n  }\n  if (best_len < max_length) {\n    matches = FN(StoreAndFindMatches)(self, data, cur_ix,\n        ring_buffer_mask, max_length, max_backward, &best_len, matches);\n  }\n  for (i = 0; i <= BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN; ++i) {\n    dict_matches[i] = kInvalidMatch;\n  }\n  {\n    size_t minlen = BROTLI_MAX(size_t, 4, best_len + 1);\n    if (BrotliFindAllStaticDictionaryMatches(dictionary,\n        &data[cur_ix_masked], minlen, max_length, &dict_matches[0])) {\n      size_t maxlen = BROTLI_MIN(\n          size_t, BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN, max_length);\n      size_t l;\n      for (l = minlen; l <= maxlen; ++l) {\n        uint32_t dict_id = dict_matches[l];\n        if (dict_id < kInvalidMatch) {\n          size_t distance = dictionary_distance + (dict_id >> 5) + 1;\n          if (distance <= params->dist.max_distance) {\n            InitDictionaryBackwardMatch(matches++, distance, l, dict_id & 31);\n          }\n        }\n      }\n    }\n  }\n  return (size_t)(matches - orig_matches);\n}\n\n/* Stores the hash of the next 4 bytes and re-roots the binary tree at the\n   current sequence, without returning any matches.\n   REQUIRES: ix + MAX_TREE_COMP_LENGTH <= end-of-current-block */\nstatic BROTLI_INLINE void FN(Store)(HashToBinaryTree* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data,\n    const size_t mask, const size_t ix) {\n  /* Maximum distance is window size - 16, see section 9.1. of the spec. */\n  const size_t max_backward = self->window_mask_ - BROTLI_WINDOW_GAP + 1;\n  FN(StoreAndFindMatches)(self, data, ix, mask, MAX_TREE_COMP_LENGTH,\n      max_backward, NULL, NULL);\n}\n\nstatic BROTLI_INLINE void FN(StoreRange)(HashToBinaryTree* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask,\n    const size_t ix_start, const size_t ix_end) {\n  size_t i = ix_start;\n  size_t j = ix_start;\n  if (ix_start + 63 <= ix_end) {\n    i = ix_end - 63;\n  }\n  if (ix_start + 512 <= i) {\n    for (; j < i; j += 8) {\n      FN(Store)(self, data, mask, j);\n    }\n  }\n  for (; i < ix_end; ++i) {\n    FN(Store)(self, data, mask, i);\n  }\n}\n\nstatic BROTLI_INLINE void FN(StitchToPreviousBlock)(\n    HashToBinaryTree* BROTLI_RESTRICT self,\n    size_t num_bytes, size_t position, const uint8_t* ringbuffer,\n    size_t ringbuffer_mask) {\n  if (num_bytes >= FN(HashTypeLength)() - 1 &&\n      position >= MAX_TREE_COMP_LENGTH) {\n    /* Store the last `MAX_TREE_COMP_LENGTH - 1` positions in the hasher.\n       These could not be calculated before, since they require knowledge\n       of both the previous and the current block. */\n    const size_t i_start = position - MAX_TREE_COMP_LENGTH + 1;\n    const size_t i_end = BROTLI_MIN(size_t, position, i_start + num_bytes);\n    size_t i;\n    for (i = i_start; i < i_end; ++i) {\n      /* Maximum distance is window size - 16, see section 9.1. of the spec.\n         Furthermore, we have to make sure that we don't look further back\n         from the start of the next block than the window size, otherwise we\n         could access already overwritten areas of the ring-buffer. */\n      const size_t max_backward =\n          self->window_mask_ - BROTLI_MAX(size_t,\n                                          BROTLI_WINDOW_GAP - 1,\n                                          position - i);\n      /* We know that i + MAX_TREE_COMP_LENGTH <= position + num_bytes, i.e. the\n         end of the current block and that we have at least\n         MAX_TREE_COMP_LENGTH tail in the ring-buffer. */\n      FN(StoreAndFindMatches)(self, ringbuffer, i, ringbuffer_mask,\n          MAX_TREE_COMP_LENGTH, max_backward, NULL, NULL);\n    }\n  }\n}\n\n#undef BUCKET_SIZE\n\n#undef HashToBinaryTree\n"
  },
  {
    "path": "c/enc/histogram.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Build per-context histograms of literals, commands and distance codes. */\n\n#include \"histogram.h\"\n\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"block_splitter.h\"\n#include \"command.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\ntypedef struct BlockSplitIterator {\n  const BlockSplit* split_;  /* Not owned. */\n  size_t idx_;\n  size_t type_;\n  size_t length_;\n} BlockSplitIterator;\n\nstatic void InitBlockSplitIterator(BlockSplitIterator* self,\n    const BlockSplit* split) {\n  self->split_ = split;\n  self->idx_ = 0;\n  self->type_ = 0;\n  self->length_ = split->lengths ? split->lengths[0] : 0;\n}\n\nstatic void BlockSplitIteratorNext(BlockSplitIterator* self) {\n  if (self->length_ == 0) {\n    ++self->idx_;\n    self->type_ = self->split_->types[self->idx_];\n    self->length_ = self->split_->lengths[self->idx_];\n  }\n  --self->length_;\n}\n\nvoid BrotliBuildHistogramsWithContext(\n    const Command* cmds, const size_t num_commands,\n    const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split,\n    const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t start_pos,\n    size_t mask, uint8_t prev_byte, uint8_t prev_byte2,\n    const ContextType* context_modes, HistogramLiteral* literal_histograms,\n    HistogramCommand* insert_and_copy_histograms,\n    HistogramDistance* copy_dist_histograms) {\n  size_t pos = start_pos;\n  BlockSplitIterator literal_it;\n  BlockSplitIterator insert_and_copy_it;\n  BlockSplitIterator dist_it;\n  size_t i;\n\n  InitBlockSplitIterator(&literal_it, literal_split);\n  InitBlockSplitIterator(&insert_and_copy_it, insert_and_copy_split);\n  InitBlockSplitIterator(&dist_it, dist_split);\n  for (i = 0; i < num_commands; ++i) {\n    const Command* cmd = &cmds[i];\n    size_t j;\n    BlockSplitIteratorNext(&insert_and_copy_it);\n    HistogramAddCommand(&insert_and_copy_histograms[insert_and_copy_it.type_],\n        cmd->cmd_prefix_);\n    /* TODO(eustas): unwrap iterator blocks. */\n    for (j = cmd->insert_len_; j != 0; --j) {\n      size_t context;\n      BlockSplitIteratorNext(&literal_it);\n      context = literal_it.type_;\n      if (context_modes) {\n        ContextLut lut = BROTLI_CONTEXT_LUT(context_modes[context]);\n        context = (context << BROTLI_LITERAL_CONTEXT_BITS) +\n            BROTLI_CONTEXT(prev_byte, prev_byte2, lut);\n      }\n      HistogramAddLiteral(&literal_histograms[context],\n          ringbuffer[pos & mask]);\n      prev_byte2 = prev_byte;\n      prev_byte = ringbuffer[pos & mask];\n      ++pos;\n    }\n    pos += CommandCopyLen(cmd);\n    if (CommandCopyLen(cmd)) {\n      prev_byte2 = ringbuffer[(pos - 2) & mask];\n      prev_byte = ringbuffer[(pos - 1) & mask];\n      if (cmd->cmd_prefix_ >= 128) {\n        size_t context;\n        BlockSplitIteratorNext(&dist_it);\n        context = (dist_it.type_ << BROTLI_DISTANCE_CONTEXT_BITS) +\n            CommandDistanceContext(cmd);\n        HistogramAddDistance(&copy_dist_histograms[context],\n            cmd->dist_prefix_ & 0x3FF);\n      }\n    }\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/histogram.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Models the histograms of literals, commands and distance codes. */\n\n#ifndef BROTLI_ENC_HISTOGRAM_H_\n#define BROTLI_ENC_HISTOGRAM_H_\n\n#include \"../common/constants.h\"\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"block_splitter.h\"\n#include \"command.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* The distance symbols effectively used by \"Large Window Brotli\" (32-bit). */\n#define BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS 544\n\n#define FN(X) X ## Literal\n#define DATA_SIZE BROTLI_NUM_LITERAL_SYMBOLS\n#define DataType uint8_t\n#include \"histogram_inc.h\"  /* NOLINT(build/include) */\n#undef DataType\n#undef DATA_SIZE\n#undef FN\n\n#define FN(X) X ## Command\n#define DataType uint16_t\n#define DATA_SIZE BROTLI_NUM_COMMAND_SYMBOLS\n#include \"histogram_inc.h\"  /* NOLINT(build/include) */\n#undef DATA_SIZE\n#undef FN\n\n#define FN(X) X ## Distance\n#define DATA_SIZE BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS\n#include \"histogram_inc.h\"  /* NOLINT(build/include) */\n#undef DataType\n#undef DATA_SIZE\n#undef FN\n\nBROTLI_INTERNAL void BrotliBuildHistogramsWithContext(\n    const Command* cmds, const size_t num_commands,\n    const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split,\n    const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t pos,\n    size_t mask, uint8_t prev_byte, uint8_t prev_byte2,\n    const ContextType* context_modes, HistogramLiteral* literal_histograms,\n    HistogramCommand* insert_and_copy_histograms,\n    HistogramDistance* copy_dist_histograms);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_HISTOGRAM_H_ */\n"
  },
  {
    "path": "c/enc/histogram_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: Histogram, DATA_SIZE, DataType */\n\n/* A simple container for histograms of data in blocks. */\n\ntypedef struct FN(Histogram) {\n  uint32_t data_[DATA_SIZE];\n  size_t total_count_;\n  double bit_cost_;\n} FN(Histogram);\n\nstatic BROTLI_INLINE void FN(HistogramClear)(FN(Histogram)* self) {\n  memset(self->data_, 0, sizeof(self->data_));\n  self->total_count_ = 0;\n  self->bit_cost_ = HUGE_VAL;\n}\n\nstatic BROTLI_INLINE void FN(ClearHistograms)(\n    FN(Histogram)* array, size_t length) {\n  size_t i;\n  for (i = 0; i < length; ++i) FN(HistogramClear)(array + i);\n}\n\nstatic BROTLI_INLINE void FN(HistogramAdd)(FN(Histogram)* self, size_t val) {\n  ++self->data_[val];\n  ++self->total_count_;\n}\n\nstatic BROTLI_INLINE void FN(HistogramAddVector)(FN(Histogram)* self,\n    const DataType* p, size_t n) {\n  self->total_count_ += n;\n  n += 1;\n  while (--n) ++self->data_[*p++];\n}\n\nstatic BROTLI_INLINE void FN(HistogramAddHistogram)(FN(Histogram)* self,\n    const FN(Histogram)* v) {\n  size_t i;\n  self->total_count_ += v->total_count_;\n  for (i = 0; i < DATA_SIZE; ++i) {\n    self->data_[i] += v->data_[i];\n  }\n}\n\nstatic BROTLI_INLINE size_t FN(HistogramDataSize)(void) { return DATA_SIZE; }\n"
  },
  {
    "path": "c/enc/literal_cost.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Literal cost model to allow backward reference replacement to be efficient.\n*/\n\n#include \"literal_cost.h\"\n\n#include \"../common/platform.h\"\n#include \"fast_log.h\"\n#include \"utf8_util.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstatic size_t UTF8Position(size_t last, size_t c, size_t clamp) {\n  if (c < 128) {\n    return 0;  /* Next one is the 'Byte 1' again. */\n  } else if (c >= 192) {  /* Next one is the 'Byte 2' of utf-8 encoding. */\n    return BROTLI_MIN(size_t, 1, clamp);\n  } else {\n    /* Let's decide over the last byte if this ends the sequence. */\n    if (last < 0xE0) {\n      return 0;  /* Completed two or three byte coding. */\n    } else {  /* Next one is the 'Byte 3' of utf-8 encoding. */\n      return BROTLI_MIN(size_t, 2, clamp);\n    }\n  }\n}\n\nstatic size_t DecideMultiByteStatsLevel(size_t pos, size_t len, size_t mask,\n                                        const uint8_t* data) {\n  size_t counts[3] = { 0 };\n  size_t max_utf8 = 1;  /* should be 2, but 1 compresses better. */\n  size_t last_c = 0;\n  size_t i;\n  for (i = 0; i < len; ++i) {\n    size_t c = data[(pos + i) & mask];\n    ++counts[UTF8Position(last_c, c, 2)];\n    last_c = c;\n  }\n  if (counts[2] < 500) {\n    max_utf8 = 1;\n  }\n  if (counts[1] + counts[2] < 25) {\n    max_utf8 = 0;\n  }\n  return max_utf8;\n}\n\nstatic void EstimateBitCostsForLiteralsUTF8(size_t pos, size_t len, size_t mask,\n                                            const uint8_t* data,\n                                            size_t* histogram, float* cost) {\n  /* max_utf8 is 0 (normal ASCII single byte modeling),\n     1 (for 2-byte UTF-8 modeling), or 2 (for 3-byte UTF-8 modeling). */\n  const size_t max_utf8 = DecideMultiByteStatsLevel(pos, len, mask, data);\n  size_t window_half = 495;\n  size_t in_window = BROTLI_MIN(size_t, window_half, len);\n  size_t in_window_utf8[3] = { 0 };\n  size_t i;\n  memset(histogram, 0, 3 * 256 * sizeof(histogram[0]));\n\n  {  /* Bootstrap histograms. */\n    size_t last_c = 0;\n    size_t utf8_pos = 0;\n    for (i = 0; i < in_window; ++i) {\n      size_t c = data[(pos + i) & mask];\n      ++histogram[256 * utf8_pos + c];\n      ++in_window_utf8[utf8_pos];\n      utf8_pos = UTF8Position(last_c, c, max_utf8);\n      last_c = c;\n    }\n  }\n\n  /* Compute bit costs with sliding window. */\n  for (i = 0; i < len; ++i) {\n    if (i >= window_half) {\n      /* Remove a byte in the past. */\n      size_t c =\n          i < window_half + 1 ? 0 : data[(pos + i - window_half - 1) & mask];\n      size_t last_c =\n          i < window_half + 2 ? 0 : data[(pos + i - window_half - 2) & mask];\n      size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8);\n      --histogram[256 * utf8_pos2 + data[(pos + i - window_half) & mask]];\n      --in_window_utf8[utf8_pos2];\n    }\n    if (i + window_half < len) {\n      /* Add a byte in the future. */\n      size_t c = data[(pos + i + window_half - 1) & mask];\n      size_t last_c = data[(pos + i + window_half - 2) & mask];\n      size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8);\n      ++histogram[256 * utf8_pos2 + data[(pos + i + window_half) & mask]];\n      ++in_window_utf8[utf8_pos2];\n    }\n    {\n      size_t c = i < 1 ? 0 : data[(pos + i - 1) & mask];\n      size_t last_c = i < 2 ? 0 : data[(pos + i - 2) & mask];\n      size_t utf8_pos = UTF8Position(last_c, c, max_utf8);\n      size_t masked_pos = (pos + i) & mask;\n      size_t histo = histogram[256 * utf8_pos + data[masked_pos]];\n      static const size_t prologue_length = 2000;\n      static const double multiplier = 0.35 / 2000;\n      double lit_cost;\n      if (histo == 0) {\n        histo = 1;\n      }\n      lit_cost = FastLog2(in_window_utf8[utf8_pos]) - FastLog2(histo);\n      lit_cost += 0.02905;\n      if (lit_cost < 1.0) {\n        lit_cost *= 0.5;\n        lit_cost += 0.5;\n      }\n      /* Make the first bytes more expensive -- seems to help, not sure why.\n         Perhaps because the entropy source is changing its properties\n         rapidly in the beginning of the file, perhaps because the beginning\n         of the data is a statistical \"anomaly\". */\n      if (i < prologue_length) {\n        lit_cost += 0.35 + multiplier * (double)i;\n      }\n      cost[i] = (float)lit_cost;\n    }\n  }\n}\n\nvoid BrotliEstimateBitCostsForLiterals(size_t pos, size_t len, size_t mask,\n                                       const uint8_t* data,\n                                       size_t* histogram, float* cost) {\n  if (BrotliIsMostlyUTF8(data, pos, mask, len, kMinUTF8Ratio)) {\n    EstimateBitCostsForLiteralsUTF8(pos, len, mask, data, histogram, cost);\n    return;\n  } else {\n    size_t window_half = 2000;\n    size_t in_window = BROTLI_MIN(size_t, window_half, len);\n    size_t i;\n    memset(histogram, 0, 256 * sizeof(histogram[0]));\n\n    /* Bootstrap histogram. */\n    for (i = 0; i < in_window; ++i) {\n      ++histogram[data[(pos + i) & mask]];\n    }\n\n    /* Compute bit costs with sliding window. */\n    for (i = 0; i < len; ++i) {\n      size_t histo;\n      if (i >= window_half) {\n        /* Remove a byte in the past. */\n        --histogram[data[(pos + i - window_half) & mask]];\n        --in_window;\n      }\n      if (i + window_half < len) {\n        /* Add a byte in the future. */\n        ++histogram[data[(pos + i + window_half) & mask]];\n        ++in_window;\n      }\n      histo = histogram[data[(pos + i) & mask]];\n      if (histo == 0) {\n        histo = 1;\n      }\n      {\n        double lit_cost = FastLog2(in_window) - FastLog2(histo);\n        lit_cost += 0.029;\n        if (lit_cost < 1.0) {\n          lit_cost *= 0.5;\n          lit_cost += 0.5;\n        }\n        cost[i] = (float)lit_cost;\n      }\n    }\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/literal_cost.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Literal cost model to allow backward reference replacement to be efficient.\n*/\n\n#ifndef BROTLI_ENC_LITERAL_COST_H_\n#define BROTLI_ENC_LITERAL_COST_H_\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* Estimates how many bits the literals in the interval [pos, pos + len) in the\n   ring-buffer (data, mask) will take entropy coded and writes these estimates\n   to the cost[0..len) array. */\nBROTLI_INTERNAL void BrotliEstimateBitCostsForLiterals(\n    size_t pos, size_t len, size_t mask, const uint8_t* data, size_t* histogram,\n    float* cost);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_LITERAL_COST_H_ */\n"
  },
  {
    "path": "c/enc/matching_tag_mask.h",
    "content": "#ifndef THIRD_PARTY_BROTLI_ENC_MATCHING_TAG_MASK_H_\n#define THIRD_PARTY_BROTLI_ENC_MATCHING_TAG_MASK_H_\n\n#include \"../common/platform.h\"\n\n#if defined(__SSE2__) || defined(_M_AMD64) || \\\n    (defined(_M_IX86) && defined(_M_IX86_FP) && (_M_IX86_FP >= 2))\n#define SUPPORTS_SSE_2\n#endif\n\n#if defined(SUPPORTS_SSE_2)\n#include <immintrin.h>\n#endif\n\n\nstatic BROTLI_INLINE uint64_t GetMatchingTagMask(\n    size_t chunk_count, const uint8_t tag,\n    const uint8_t* BROTLI_RESTRICT tag_bucket, const size_t head) {\n  uint64_t matches = 0;\n#if defined(SUPPORTS_SSE_2)\n  const __m128i comparison_mask = _mm_set1_epi8((char)tag);\n  size_t i;\n  for (i = 0; i < chunk_count && i < 4; i++) {\n    const __m128i chunk =\n        _mm_loadu_si128((const __m128i*)(const void*)(tag_bucket + 16 * i));\n    const __m128i equal_mask = _mm_cmpeq_epi8(chunk, comparison_mask);\n    matches |= (uint64_t)_mm_movemask_epi8(equal_mask) << 16 * i;\n  }\n#else\n  const int chunk_size = sizeof(size_t);\n  const size_t shift_amount = ((chunk_size * 8) - chunk_size);\n  const size_t xFF = ~((size_t)0);\n  const size_t x01 = xFF / 0xFF;\n  const size_t x80 = x01 << 7;\n  const size_t splat_char = tag * x01;\n  int i = ((int)chunk_count * 16) - chunk_size;\n  BROTLI_DCHECK((sizeof(size_t) == 4) || (sizeof(size_t) == 8));\n#if BROTLI_LITTLE_ENDIAN\n  const size_t extractMagic = (xFF / 0x7F) >> chunk_size;\n  do {\n      size_t chunk = BrotliUnalignedReadSizeT(&tag_bucket[i]);\n      chunk ^= splat_char;\n      chunk = (((chunk | x80) - x01) | chunk) & x80;\n      matches <<= chunk_size;\n      matches |= (chunk * extractMagic) >> shift_amount;\n      i -= chunk_size;\n  } while (i >= 0);\n#else\n  const size_t msb = xFF ^ (xFF >> 1);\n  const size_t extractMagic = (msb / 0x1FF) | msb;\n  do {\n      size_t chunk = BrotliUnalignedReadSizeT(&tag_bucket[i]);\n      chunk ^= splat_char;\n      chunk = (((chunk | x80) - x01) | chunk) & x80;\n      matches <<= chunk_size;\n      matches |= ((chunk >> 7) * extractMagic) >> shift_amount;\n      i -= chunk_size;\n  } while (i >= 0);\n#endif\n  matches = ~matches;\n#endif\n  if (chunk_count == 1) return BrotliRotateRight16((uint16_t)matches, head);\n  if (chunk_count == 2) return BrotliRotateRight32((uint32_t)matches, head);\n  return BrotliRotateRight64(matches, head);\n}\n\n#undef SUPPORTS_SSE_2\n\n#endif  // THIRD_PARTY_BROTLI_ENC_MATCHING_TAG_MASK_H_\n"
  },
  {
    "path": "c/enc/memory.c",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Algorithms for distributing the literals and commands of a metablock between\n   block types and contexts. */\n\n#include \"memory.h\"\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define MAX_NEW_ALLOCATED (BROTLI_ENCODER_MEMORY_MANAGER_SLOTS >> 2)\n#define MAX_NEW_FREED (BROTLI_ENCODER_MEMORY_MANAGER_SLOTS >> 2)\n#define MAX_PERM_ALLOCATED (BROTLI_ENCODER_MEMORY_MANAGER_SLOTS >> 1)\n\n#define PERM_ALLOCATED_OFFSET 0\n#define NEW_ALLOCATED_OFFSET MAX_PERM_ALLOCATED\n#define NEW_FREED_OFFSET (MAX_PERM_ALLOCATED + MAX_NEW_ALLOCATED)\n\nvoid BrotliInitMemoryManager(\n    MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func free_func,\n    void* opaque) {\n  if (!alloc_func) {\n    m->alloc_func = BrotliDefaultAllocFunc;\n    m->free_func = BrotliDefaultFreeFunc;\n    m->opaque = 0;\n  } else {\n    m->alloc_func = alloc_func;\n    m->free_func = free_func;\n    m->opaque = opaque;\n  }\n#if !defined(BROTLI_ENCODER_EXIT_ON_OOM)\n  m->is_oom = BROTLI_FALSE;\n  m->perm_allocated = 0;\n  m->new_allocated = 0;\n  m->new_freed = 0;\n#endif  /* BROTLI_ENCODER_EXIT_ON_OOM */\n}\n\n#if defined(BROTLI_ENCODER_EXIT_ON_OOM)\n\nvoid* BrotliAllocate(MemoryManager* m, size_t n) {\n  void* result = m->alloc_func(m->opaque, n);\n  if (!result) exit(EXIT_FAILURE);\n  return result;\n}\n\nvoid BrotliFree(MemoryManager* m, void* p) {\n  m->free_func(m->opaque, p);\n}\n\nvoid BrotliWipeOutMemoryManager(MemoryManager* m) {\n  BROTLI_UNUSED(m);\n}\n\n#else  /* BROTLI_ENCODER_EXIT_ON_OOM */\n\nstatic void SortPointers(void** items, const size_t n) {\n  /* Shell sort. */\n  /* TODO(eustas): fine-tune for \"many slots\" case */\n  static const size_t gaps[] = {23, 10, 4, 1};\n  int g = 0;\n  for (; g < 4; ++g) {\n    size_t gap = gaps[g];\n    size_t i;\n    for (i = gap; i < n; ++i) {\n      size_t j = i;\n      void* tmp = items[i];\n      for (; j >= gap && tmp < items[j - gap]; j -= gap) {\n        items[j] = items[j - gap];\n      }\n      items[j] = tmp;\n    }\n  }\n}\n\nstatic size_t Annihilate(void** a, size_t a_len, void** b, size_t b_len) {\n  size_t a_read_index = 0;\n  size_t b_read_index = 0;\n  size_t a_write_index = 0;\n  size_t b_write_index = 0;\n  size_t annihilated = 0;\n  while (a_read_index < a_len && b_read_index < b_len) {\n    if (a[a_read_index] == b[b_read_index]) {\n      a_read_index++;\n      b_read_index++;\n      annihilated++;\n    } else if (a[a_read_index] < b[b_read_index]) {\n      a[a_write_index++] = a[a_read_index++];\n    } else {\n      b[b_write_index++] = b[b_read_index++];\n    }\n  }\n  while (a_read_index < a_len) a[a_write_index++] = a[a_read_index++];\n  while (b_read_index < b_len) b[b_write_index++] = b[b_read_index++];\n  return annihilated;\n}\n\nstatic void CollectGarbagePointers(MemoryManager* m) {\n  size_t annihilated;\n  SortPointers(m->pointers + NEW_ALLOCATED_OFFSET, m->new_allocated);\n  SortPointers(m->pointers + NEW_FREED_OFFSET, m->new_freed);\n  annihilated = Annihilate(\n      m->pointers + NEW_ALLOCATED_OFFSET, m->new_allocated,\n      m->pointers + NEW_FREED_OFFSET, m->new_freed);\n  m->new_allocated -= annihilated;\n  m->new_freed -= annihilated;\n\n  if (m->new_freed != 0) {\n    annihilated = Annihilate(\n        m->pointers + PERM_ALLOCATED_OFFSET, m->perm_allocated,\n        m->pointers + NEW_FREED_OFFSET, m->new_freed);\n    m->perm_allocated -= annihilated;\n    m->new_freed -= annihilated;\n    BROTLI_DCHECK(m->new_freed == 0);\n  }\n\n  if (m->new_allocated != 0) {\n    BROTLI_DCHECK(m->perm_allocated + m->new_allocated <= MAX_PERM_ALLOCATED);\n    memcpy(m->pointers + PERM_ALLOCATED_OFFSET + m->perm_allocated,\n           m->pointers + NEW_ALLOCATED_OFFSET,\n           sizeof(void*) * m->new_allocated);\n    m->perm_allocated += m->new_allocated;\n    m->new_allocated = 0;\n    SortPointers(m->pointers + PERM_ALLOCATED_OFFSET, m->perm_allocated);\n  }\n}\n\nvoid* BrotliAllocate(MemoryManager* m, size_t n) {\n  void* result = m->alloc_func(m->opaque, n);\n  if (!result) {\n    m->is_oom = BROTLI_TRUE;\n    return NULL;\n  }\n  if (m->new_allocated == MAX_NEW_ALLOCATED) CollectGarbagePointers(m);\n  m->pointers[NEW_ALLOCATED_OFFSET + (m->new_allocated++)] = result;\n  return result;\n}\n\nvoid BrotliFree(MemoryManager* m, void* p) {\n  if (!p) return;\n  m->free_func(m->opaque, p);\n  if (m->new_freed == MAX_NEW_FREED) CollectGarbagePointers(m);\n  m->pointers[NEW_FREED_OFFSET + (m->new_freed++)] = p;\n}\n\nvoid BrotliWipeOutMemoryManager(MemoryManager* m) {\n  size_t i;\n  CollectGarbagePointers(m);\n  /* Now all unfreed pointers are in perm-allocated list. */\n  for (i = 0; i < m->perm_allocated; ++i) {\n    m->free_func(m->opaque, m->pointers[PERM_ALLOCATED_OFFSET + i]);\n  }\n  m->perm_allocated = 0;\n}\n\n#endif  /* BROTLI_ENCODER_EXIT_ON_OOM */\n\nvoid* BrotliBootstrapAlloc(size_t size,\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {\n  if (!alloc_func && !free_func) {\n    return malloc(size);\n  } else if (alloc_func && free_func) {\n    return alloc_func(opaque, size);\n  }\n  return NULL;\n}\n\nvoid BrotliBootstrapFree(void* address, MemoryManager* m) {\n  if (!address) {\n    /* Should not happen! */\n    return;\n  } else {\n    /* Copy values, as those would be freed. */\n    brotli_free_func free_func = m->free_func;\n    void* opaque = m->opaque;\n    free_func(opaque, address);\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/memory.h",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Macros for memory management. */\n\n#ifndef BROTLI_ENC_MEMORY_H_\n#define BROTLI_ENC_MEMORY_H_\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#if !defined(BROTLI_ENCODER_CLEANUP_ON_OOM) && \\\n    !defined(BROTLI_ENCODER_EXIT_ON_OOM)\n#define BROTLI_ENCODER_EXIT_ON_OOM\n#endif\n\n#if !defined(BROTLI_ENCODER_EXIT_ON_OOM)\n#if defined(BROTLI_EXPERIMENTAL)\n#define BROTLI_ENCODER_MEMORY_MANAGER_SLOTS (48*1024)\n#else  /* BROTLI_EXPERIMENTAL */\n#define BROTLI_ENCODER_MEMORY_MANAGER_SLOTS 256\n#endif  /* BROTLI_EXPERIMENTAL */\n#else /* BROTLI_ENCODER_EXIT_ON_OOM */\n#define BROTLI_ENCODER_MEMORY_MANAGER_SLOTS 0\n#endif  /* BROTLI_ENCODER_EXIT_ON_OOM */\n\ntypedef struct MemoryManager {\n  brotli_alloc_func alloc_func;\n  brotli_free_func free_func;\n  void* opaque;\n#if !defined(BROTLI_ENCODER_EXIT_ON_OOM)\n  BROTLI_BOOL is_oom;\n  size_t perm_allocated;\n  size_t new_allocated;\n  size_t new_freed;\n  void* pointers[BROTLI_ENCODER_MEMORY_MANAGER_SLOTS];\n#endif  /* BROTLI_ENCODER_EXIT_ON_OOM */\n} MemoryManager;\n\nBROTLI_INTERNAL void BrotliInitMemoryManager(\n    MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func free_func,\n    void* opaque);\n\nBROTLI_INTERNAL void* BrotliAllocate(MemoryManager* m, size_t n);\n#define BROTLI_ALLOC(M, T, N)                               \\\n  ((N) > 0 ? ((T*)BrotliAllocate((M), (N) * sizeof(T))) : NULL)\n\nBROTLI_INTERNAL void BrotliFree(MemoryManager* m, void* p);\n#define BROTLI_FREE(M, P) { \\\n  BrotliFree((M), (P));     \\\n  P = NULL;                 \\\n}\n\n#if defined(BROTLI_ENCODER_EXIT_ON_OOM)\n#define BROTLI_IS_OOM(M) (!!0)\n#else  /* BROTLI_ENCODER_EXIT_ON_OOM */\n#define BROTLI_IS_OOM(M) (!!(M)->is_oom)\n#endif  /* BROTLI_ENCODER_EXIT_ON_OOM */\n\n/*\nBROTLI_IS_NULL is a fake check, BROTLI_IS_OOM does the heavy lifting.\nThe only purpose of it is to explain static analyzers the state of things.\nNB: use ONLY together with BROTLI_IS_OOM\n    AND ONLY for allocations in the current scope.\n */\n#if defined(__clang_analyzer__) && !defined(BROTLI_ENCODER_EXIT_ON_OOM)\n#define BROTLI_IS_NULL(A) ((A) == nullptr)\n#else  /* defined(__clang_analyzer__) */\n#define BROTLI_IS_NULL(A) (!!0)\n#endif  /* defined(__clang_analyzer__) */\n\nBROTLI_INTERNAL void BrotliWipeOutMemoryManager(MemoryManager* m);\n\n/*\nDynamically grows array capacity to at least the requested size\nM: MemoryManager\nT: data type\nA: array\nC: capacity\nR: requested size\n*/\n#define BROTLI_ENSURE_CAPACITY(M, T, A, C, R) {                    \\\n  if (C < (R)) {                                                   \\\n    size_t _new_size = (C == 0) ? (R) : C;                         \\\n    T* new_array;                                                  \\\n    while (_new_size < (R)) _new_size *= 2;                        \\\n    new_array = BROTLI_ALLOC((M), T, _new_size);                   \\\n    if (!BROTLI_IS_OOM(M) && !BROTLI_IS_NULL(new_array) && C != 0) \\\n      memcpy(new_array, A, C * sizeof(T));                         \\\n    BROTLI_FREE((M), A);                                           \\\n    A = new_array;                                                 \\\n    C = _new_size;                                                 \\\n  }                                                                \\\n}\n\n/*\nAppends value and dynamically grows array capacity when needed\nM: MemoryManager\nT: data type\nA: array\nC: array capacity\nS: array size\nV: value to append\n*/\n#define BROTLI_ENSURE_CAPACITY_APPEND(M, T, A, C, S, V) { \\\n  (S)++;                                                  \\\n  BROTLI_ENSURE_CAPACITY(M, T, A, C, S);                  \\\n  A[(S) - 1] = (V);                                       \\\n}\n\n/* \"Bootstrap\" allocations are not tracked by memory manager; should be used\n   only to allocate MemoryManager itself (or structure containing it). */\nBROTLI_INTERNAL void* BrotliBootstrapAlloc(size_t size,\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);\nBROTLI_INTERNAL void BrotliBootstrapFree(void* address, MemoryManager* m);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_MEMORY_H_ */\n"
  },
  {
    "path": "c/enc/metablock.c",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Algorithms for distributing the literals and commands of a metablock between\n   block types and contexts. */\n\n#include \"metablock.h\"\n\n#include \"../common/constants.h\"\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"bit_cost.h\"\n#include \"block_splitter.h\"\n#include \"cluster.h\"\n#include \"command.h\"\n#include \"entropy_encode.h\"\n#include \"histogram.h\"\n#include \"memory.h\"\n#include \"params.h\"\n#include \"prefix.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nvoid BrotliInitDistanceParams(BrotliDistanceParams* dist_params,\n    uint32_t npostfix, uint32_t ndirect, BROTLI_BOOL large_window) {\n  uint32_t alphabet_size_max;\n  uint32_t alphabet_size_limit;\n  uint32_t max_distance;\n\n  dist_params->distance_postfix_bits = npostfix;\n  dist_params->num_direct_distance_codes = ndirect;\n\n  alphabet_size_max = BROTLI_DISTANCE_ALPHABET_SIZE(\n      npostfix, ndirect, BROTLI_MAX_DISTANCE_BITS);\n  alphabet_size_limit = alphabet_size_max;\n  max_distance = ndirect + (1U << (BROTLI_MAX_DISTANCE_BITS + npostfix + 2)) -\n      (1U << (npostfix + 2));\n\n  if (large_window) {\n    BrotliDistanceCodeLimit limit = BrotliCalculateDistanceCodeLimit(\n        BROTLI_MAX_ALLOWED_DISTANCE, npostfix, ndirect);\n    alphabet_size_max = BROTLI_DISTANCE_ALPHABET_SIZE(\n        npostfix, ndirect, BROTLI_LARGE_MAX_DISTANCE_BITS);\n    alphabet_size_limit = limit.max_alphabet_size;\n    max_distance = limit.max_distance;\n  }\n\n  dist_params->alphabet_size_max = alphabet_size_max;\n  dist_params->alphabet_size_limit = alphabet_size_limit;\n  dist_params->max_distance = max_distance;\n}\n\nstatic void RecomputeDistancePrefixes(Command* cmds,\n                                      size_t num_commands,\n                                      const BrotliDistanceParams* orig_params,\n                                      const BrotliDistanceParams* new_params) {\n  size_t i;\n\n  if (orig_params->distance_postfix_bits == new_params->distance_postfix_bits &&\n      orig_params->num_direct_distance_codes ==\n      new_params->num_direct_distance_codes) {\n    return;\n  }\n\n  for (i = 0; i < num_commands; ++i) {\n    Command* cmd = &cmds[i];\n    if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {\n      PrefixEncodeCopyDistance(CommandRestoreDistanceCode(cmd, orig_params),\n                               new_params->num_direct_distance_codes,\n                               new_params->distance_postfix_bits,\n                               &cmd->dist_prefix_,\n                               &cmd->dist_extra_);\n    }\n  }\n}\n\nstatic BROTLI_BOOL ComputeDistanceCost(const Command* cmds,\n                                       size_t num_commands,\n                                       const BrotliDistanceParams* orig_params,\n                                       const BrotliDistanceParams* new_params,\n                                       double* cost,\n                                       HistogramDistance* tmp) {\n  size_t i;\n  BROTLI_BOOL equal_params = BROTLI_FALSE;\n  uint16_t dist_prefix;\n  uint32_t dist_extra;\n  double extra_bits = 0.0;\n  HistogramClearDistance(tmp);\n\n  if (orig_params->distance_postfix_bits == new_params->distance_postfix_bits &&\n      orig_params->num_direct_distance_codes ==\n      new_params->num_direct_distance_codes) {\n    equal_params = BROTLI_TRUE;\n  }\n\n  for (i = 0; i < num_commands; i++) {\n    const Command* cmd = &cmds[i];\n    if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {\n      if (equal_params) {\n        dist_prefix = cmd->dist_prefix_;\n      } else {\n        uint32_t distance = CommandRestoreDistanceCode(cmd, orig_params);\n        if (distance > new_params->max_distance) {\n          return BROTLI_FALSE;\n        }\n        PrefixEncodeCopyDistance(distance,\n                                 new_params->num_direct_distance_codes,\n                                 new_params->distance_postfix_bits,\n                                 &dist_prefix,\n                                 &dist_extra);\n      }\n      HistogramAddDistance(tmp, dist_prefix & 0x3FF);\n      extra_bits += dist_prefix >> 10;\n    }\n  }\n\n  *cost = BrotliPopulationCostDistance(tmp) + extra_bits;\n  return BROTLI_TRUE;\n}\n\nvoid BrotliBuildMetaBlock(MemoryManager* m,\n                          const uint8_t* ringbuffer,\n                          const size_t pos,\n                          const size_t mask,\n                          BrotliEncoderParams* params,\n                          uint8_t prev_byte,\n                          uint8_t prev_byte2,\n                          Command* cmds,\n                          size_t num_commands,\n                          ContextType literal_context_mode,\n                          MetaBlockSplit* mb) {\n  /* Histogram ids need to fit in one byte. */\n  static const size_t kMaxNumberOfHistograms = 256;\n  HistogramDistance* distance_histograms;\n  HistogramLiteral* literal_histograms;\n  ContextType* literal_context_modes = NULL;\n  size_t literal_histograms_size;\n  size_t distance_histograms_size;\n  size_t i;\n  size_t literal_context_multiplier = 1;\n  uint32_t npostfix;\n  uint32_t ndirect_msb = 0;\n  BROTLI_BOOL check_orig = BROTLI_TRUE;\n  double best_dist_cost = 1e99;\n  BrotliDistanceParams orig_params = params->dist;\n  BrotliDistanceParams new_params = params->dist;\n  HistogramDistance* tmp = BROTLI_ALLOC(m, HistogramDistance, 1);\n\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(tmp)) return;\n\n  for (npostfix = 0; npostfix <= BROTLI_MAX_NPOSTFIX; npostfix++) {\n    for (; ndirect_msb < 16; ndirect_msb++) {\n      uint32_t ndirect = ndirect_msb << npostfix;\n      BROTLI_BOOL skip;\n      double dist_cost;\n      BrotliInitDistanceParams(&new_params, npostfix, ndirect,\n                               params->large_window);\n      if (npostfix == orig_params.distance_postfix_bits &&\n          ndirect == orig_params.num_direct_distance_codes) {\n        check_orig = BROTLI_FALSE;\n      }\n      skip = !ComputeDistanceCost(\n          cmds, num_commands, &orig_params, &new_params, &dist_cost, tmp);\n      if (skip || (dist_cost > best_dist_cost)) {\n        break;\n      }\n      best_dist_cost = dist_cost;\n      params->dist = new_params;\n    }\n    if (ndirect_msb > 0) ndirect_msb--;\n    ndirect_msb /= 2;\n  }\n  if (check_orig) {\n    double dist_cost;\n    ComputeDistanceCost(cmds, num_commands, &orig_params, &orig_params,\n                        &dist_cost, tmp);\n    if (dist_cost < best_dist_cost) {\n      /* NB: currently unused; uncomment when more param tuning is added. */\n      /* best_dist_cost = dist_cost; */\n      params->dist = orig_params;\n    }\n  }\n  BROTLI_FREE(m, tmp);\n  RecomputeDistancePrefixes(cmds, num_commands, &orig_params, &params->dist);\n\n  BrotliSplitBlock(m, cmds, num_commands,\n                   ringbuffer, pos, mask, params,\n                   &mb->literal_split,\n                   &mb->command_split,\n                   &mb->distance_split);\n  if (BROTLI_IS_OOM(m)) return;\n\n  if (!params->disable_literal_context_modeling) {\n    literal_context_multiplier = 1 << BROTLI_LITERAL_CONTEXT_BITS;\n    literal_context_modes =\n        BROTLI_ALLOC(m, ContextType, mb->literal_split.num_types);\n    if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(literal_context_modes)) return;\n    for (i = 0; i < mb->literal_split.num_types; ++i) {\n      literal_context_modes[i] = literal_context_mode;\n    }\n  }\n\n  literal_histograms_size =\n      mb->literal_split.num_types * literal_context_multiplier;\n  literal_histograms =\n      BROTLI_ALLOC(m, HistogramLiteral, literal_histograms_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(literal_histograms)) return;\n  ClearHistogramsLiteral(literal_histograms, literal_histograms_size);\n\n  distance_histograms_size =\n      mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS;\n  distance_histograms =\n      BROTLI_ALLOC(m, HistogramDistance, distance_histograms_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(distance_histograms)) return;\n  ClearHistogramsDistance(distance_histograms, distance_histograms_size);\n\n  BROTLI_DCHECK(mb->command_histograms == 0);\n  mb->command_histograms_size = mb->command_split.num_types;\n  mb->command_histograms =\n      BROTLI_ALLOC(m, HistogramCommand, mb->command_histograms_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(mb->command_histograms)) return;\n  ClearHistogramsCommand(mb->command_histograms, mb->command_histograms_size);\n\n  BrotliBuildHistogramsWithContext(cmds, num_commands,\n      &mb->literal_split, &mb->command_split, &mb->distance_split,\n      ringbuffer, pos, mask, prev_byte, prev_byte2, literal_context_modes,\n      literal_histograms, mb->command_histograms, distance_histograms);\n  BROTLI_FREE(m, literal_context_modes);\n\n  BROTLI_DCHECK(mb->literal_context_map == 0);\n  mb->literal_context_map_size =\n      mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS;\n  mb->literal_context_map =\n      BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(mb->literal_context_map)) return;\n\n  BROTLI_DCHECK(mb->literal_histograms == 0);\n  mb->literal_histograms_size = mb->literal_context_map_size;\n  mb->literal_histograms =\n      BROTLI_ALLOC(m, HistogramLiteral, mb->literal_histograms_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(mb->literal_histograms)) return;\n\n  BrotliClusterHistogramsLiteral(m, literal_histograms, literal_histograms_size,\n      kMaxNumberOfHistograms, mb->literal_histograms,\n      &mb->literal_histograms_size, mb->literal_context_map);\n  if (BROTLI_IS_OOM(m)) return;\n  BROTLI_FREE(m, literal_histograms);\n\n  if (params->disable_literal_context_modeling) {\n    /* Distribute assignment to all contexts. */\n    for (i = mb->literal_split.num_types; i != 0;) {\n      size_t j = 0;\n      i--;\n      for (; j < (1 << BROTLI_LITERAL_CONTEXT_BITS); j++) {\n        mb->literal_context_map[(i << BROTLI_LITERAL_CONTEXT_BITS) + j] =\n            mb->literal_context_map[i];\n      }\n    }\n  }\n\n  BROTLI_DCHECK(mb->distance_context_map == 0);\n  mb->distance_context_map_size =\n      mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS;\n  mb->distance_context_map =\n      BROTLI_ALLOC(m, uint32_t, mb->distance_context_map_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(mb->distance_context_map)) return;\n\n  BROTLI_DCHECK(mb->distance_histograms == 0);\n  mb->distance_histograms_size = mb->distance_context_map_size;\n  mb->distance_histograms =\n      BROTLI_ALLOC(m, HistogramDistance, mb->distance_histograms_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(mb->distance_histograms)) return;\n\n  BrotliClusterHistogramsDistance(m, distance_histograms,\n                                  mb->distance_context_map_size,\n                                  kMaxNumberOfHistograms,\n                                  mb->distance_histograms,\n                                  &mb->distance_histograms_size,\n                                  mb->distance_context_map);\n  if (BROTLI_IS_OOM(m)) return;\n  BROTLI_FREE(m, distance_histograms);\n}\n\n#define FN(X) X ## Literal\n#include \"metablock_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#define FN(X) X ## Command\n#include \"metablock_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#define FN(X) X ## Distance\n#include \"metablock_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n/* Greedy block splitter for one block category (literal, command or distance).\n   Gathers histograms for all context buckets. */\ntypedef struct ContextBlockSplitter {\n  /* Alphabet size of particular block category. */\n  size_t alphabet_size_;\n  size_t num_contexts_;\n  size_t max_block_types_;\n  /* We collect at least this many symbols for each block. */\n  size_t min_block_size_;\n  /* We merge histograms A and B if\n       entropy(A+B) < entropy(A) + entropy(B) + split_threshold_,\n     where A is the current histogram and B is the histogram of the last or the\n     second last block type. */\n  double split_threshold_;\n\n  size_t num_blocks_;\n  BlockSplit* split_;  /* not owned */\n  HistogramLiteral* histograms_;  /* not owned */\n  size_t* histograms_size_;  /* not owned */\n\n  /* The number of symbols that we want to collect before deciding on whether\n     or not to merge the block with a previous one or emit a new block. */\n  size_t target_block_size_;\n  /* The number of symbols in the current histogram. */\n  size_t block_size_;\n  /* Offset of the current histogram. */\n  size_t curr_histogram_ix_;\n  /* Offset of the histograms of the previous two block types. */\n  size_t last_histogram_ix_[2];\n  /* Entropy of the previous two block types. */\n  double last_entropy_[2 * BROTLI_MAX_STATIC_CONTEXTS];\n  /* The number of times we merged the current block with the last one. */\n  size_t merge_last_count_;\n} ContextBlockSplitter;\n\nstatic void InitContextBlockSplitter(\n    MemoryManager* m, ContextBlockSplitter* self, size_t alphabet_size,\n    size_t num_contexts, size_t min_block_size, double split_threshold,\n    size_t num_symbols, BlockSplit* split, HistogramLiteral** histograms,\n    size_t* histograms_size) {\n  size_t max_num_blocks = num_symbols / min_block_size + 1;\n  size_t max_num_types;\n  BROTLI_DCHECK(num_contexts <= BROTLI_MAX_STATIC_CONTEXTS);\n\n  self->alphabet_size_ = alphabet_size;\n  self->num_contexts_ = num_contexts;\n  self->max_block_types_ = BROTLI_MAX_NUMBER_OF_BLOCK_TYPES / num_contexts;\n  self->min_block_size_ = min_block_size;\n  self->split_threshold_ = split_threshold;\n  self->num_blocks_ = 0;\n  self->split_ = split;\n  self->histograms_size_ = histograms_size;\n  self->target_block_size_ = min_block_size;\n  self->block_size_ = 0;\n  self->curr_histogram_ix_ = 0;\n  self->merge_last_count_ = 0;\n\n  /* We have to allocate one more histogram than the maximum number of block\n     types for the current histogram when the meta-block is too big. */\n  max_num_types =\n      BROTLI_MIN(size_t, max_num_blocks, self->max_block_types_ + 1);\n  BROTLI_ENSURE_CAPACITY(m, uint8_t,\n      split->types, split->types_alloc_size, max_num_blocks);\n  BROTLI_ENSURE_CAPACITY(m, uint32_t,\n      split->lengths, split->lengths_alloc_size, max_num_blocks);\n  if (BROTLI_IS_OOM(m)) return;\n  split->num_blocks = max_num_blocks;\n  if (BROTLI_IS_OOM(m)) return;\n  BROTLI_DCHECK(*histograms == 0);\n  *histograms_size = max_num_types * num_contexts;\n  *histograms = BROTLI_ALLOC(m, HistogramLiteral, *histograms_size);\n  self->histograms_ = *histograms;\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(*histograms)) return;\n  /* Clear only current histogram. */\n  ClearHistogramsLiteral(&self->histograms_[0], num_contexts);\n  self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0;\n}\n\n/* Does either of three things:\n     (1) emits the current block with a new block type;\n     (2) emits the current block with the type of the second last block;\n     (3) merges the current block with the last block. */\nstatic void ContextBlockSplitterFinishBlock(\n    ContextBlockSplitter* self, MemoryManager* m, BROTLI_BOOL is_final) {\n  BlockSplit* split = self->split_;\n  const size_t num_contexts = self->num_contexts_;\n  double* last_entropy = self->last_entropy_;\n  HistogramLiteral* histograms = self->histograms_;\n\n  if (self->block_size_ < self->min_block_size_) {\n    self->block_size_ = self->min_block_size_;\n  }\n  if (self->num_blocks_ == 0) {\n    size_t i;\n    /* Create first block. */\n    split->lengths[0] = (uint32_t)self->block_size_;\n    split->types[0] = 0;\n\n    for (i = 0; i < num_contexts; ++i) {\n      last_entropy[i] =\n          BrotliBitsEntropy(histograms[i].data_, self->alphabet_size_);\n      last_entropy[num_contexts + i] = last_entropy[i];\n    }\n    ++self->num_blocks_;\n    ++split->num_types;\n    self->curr_histogram_ix_ += num_contexts;\n    if (self->curr_histogram_ix_ < *self->histograms_size_) {\n      ClearHistogramsLiteral(\n          &self->histograms_[self->curr_histogram_ix_], self->num_contexts_);\n    }\n    self->block_size_ = 0;\n  } else if (self->block_size_ > 0) {\n    /* Try merging the set of histograms for the current block type with the\n       respective set of histograms for the last and second last block types.\n       Decide over the split based on the total reduction of entropy across\n       all contexts. */\n    double entropy[BROTLI_MAX_STATIC_CONTEXTS];\n    HistogramLiteral* combined_histo =\n        BROTLI_ALLOC(m, HistogramLiteral, 2 * num_contexts);\n    double combined_entropy[2 * BROTLI_MAX_STATIC_CONTEXTS];\n    double diff[2] = { 0.0 };\n    size_t i;\n    if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(combined_histo)) return;\n    for (i = 0; i < num_contexts; ++i) {\n      size_t curr_histo_ix = self->curr_histogram_ix_ + i;\n      size_t j;\n      entropy[i] = BrotliBitsEntropy(histograms[curr_histo_ix].data_,\n                                     self->alphabet_size_);\n      for (j = 0; j < 2; ++j) {\n        size_t jx = j * num_contexts + i;\n        size_t last_histogram_ix = self->last_histogram_ix_[j] + i;\n        combined_histo[jx] = histograms[curr_histo_ix];\n        HistogramAddHistogramLiteral(&combined_histo[jx],\n            &histograms[last_histogram_ix]);\n        combined_entropy[jx] = BrotliBitsEntropy(\n            &combined_histo[jx].data_[0], self->alphabet_size_);\n        diff[j] += combined_entropy[jx] - entropy[i] - last_entropy[jx];\n      }\n    }\n\n    if (split->num_types < self->max_block_types_ &&\n        diff[0] > self->split_threshold_ &&\n        diff[1] > self->split_threshold_) {\n      /* Create new block. */\n      split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;\n      split->types[self->num_blocks_] = (uint8_t)split->num_types;\n      self->last_histogram_ix_[1] = self->last_histogram_ix_[0];\n      self->last_histogram_ix_[0] = split->num_types * num_contexts;\n      for (i = 0; i < num_contexts; ++i) {\n        last_entropy[num_contexts + i] = last_entropy[i];\n        last_entropy[i] = entropy[i];\n      }\n      ++self->num_blocks_;\n      ++split->num_types;\n      self->curr_histogram_ix_ += num_contexts;\n      if (self->curr_histogram_ix_ < *self->histograms_size_) {\n        ClearHistogramsLiteral(\n            &self->histograms_[self->curr_histogram_ix_], self->num_contexts_);\n      }\n      self->block_size_ = 0;\n      self->merge_last_count_ = 0;\n      self->target_block_size_ = self->min_block_size_;\n    } else if (diff[1] < diff[0] - 20.0) {\n      /* Combine this block with second last block. */\n      split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;\n      split->types[self->num_blocks_] = split->types[self->num_blocks_ - 2];\n      BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1);\n      for (i = 0; i < num_contexts; ++i) {\n        histograms[self->last_histogram_ix_[0] + i] =\n            combined_histo[num_contexts + i];\n        last_entropy[num_contexts + i] = last_entropy[i];\n        last_entropy[i] = combined_entropy[num_contexts + i];\n        HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]);\n      }\n      ++self->num_blocks_;\n      self->block_size_ = 0;\n      self->merge_last_count_ = 0;\n      self->target_block_size_ = self->min_block_size_;\n    } else {\n      /* Combine this block with last block. */\n      split->lengths[self->num_blocks_ - 1] += (uint32_t)self->block_size_;\n      for (i = 0; i < num_contexts; ++i) {\n        histograms[self->last_histogram_ix_[0] + i] = combined_histo[i];\n        last_entropy[i] = combined_entropy[i];\n        if (split->num_types == 1) {\n          last_entropy[num_contexts + i] = last_entropy[i];\n        }\n        HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]);\n      }\n      self->block_size_ = 0;\n      if (++self->merge_last_count_ > 1) {\n        self->target_block_size_ += self->min_block_size_;\n      }\n    }\n    BROTLI_FREE(m, combined_histo);\n  }\n  if (is_final) {\n    *self->histograms_size_ = split->num_types * num_contexts;\n    split->num_blocks = self->num_blocks_;\n  }\n}\n\n/* Adds the next symbol to the current block type and context. When the\n   current block reaches the target size, decides on merging the block. */\nstatic void ContextBlockSplitterAddSymbol(\n    ContextBlockSplitter* self, MemoryManager* m,\n    size_t symbol, size_t context) {\n  HistogramAddLiteral(&self->histograms_[self->curr_histogram_ix_ + context],\n      symbol);\n  ++self->block_size_;\n  if (self->block_size_ == self->target_block_size_) {\n    ContextBlockSplitterFinishBlock(self, m, /* is_final = */ BROTLI_FALSE);\n    if (BROTLI_IS_OOM(m)) return;\n  }\n}\n\nstatic void MapStaticContexts(MemoryManager* m,\n                              size_t num_contexts,\n                              const uint32_t* static_context_map,\n                              MetaBlockSplit* mb) {\n  size_t i;\n  BROTLI_DCHECK(mb->literal_context_map == 0);\n  mb->literal_context_map_size =\n      mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS;\n  mb->literal_context_map =\n      BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(mb->literal_context_map)) return;\n\n  for (i = 0; i < mb->literal_split.num_types; ++i) {\n    uint32_t offset = (uint32_t)(i * num_contexts);\n    size_t j;\n    for (j = 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS); ++j) {\n      mb->literal_context_map[(i << BROTLI_LITERAL_CONTEXT_BITS) + j] =\n          offset + static_context_map[j];\n    }\n  }\n}\n\ntypedef struct GreedyMetablockArena {\n  union {\n    BlockSplitterLiteral plain;\n    ContextBlockSplitter ctx;\n  } lit_blocks;\n  BlockSplitterCommand cmd_blocks;\n  BlockSplitterDistance dist_blocks;\n} GreedyMetablockArena;\n\nstatic BROTLI_INLINE void BrotliBuildMetaBlockGreedyInternal(\n    MemoryManager* m, GreedyMetablockArena* arena, const uint8_t* ringbuffer,\n    size_t pos, size_t mask, uint8_t prev_byte, uint8_t prev_byte2,\n    ContextLut literal_context_lut, const size_t num_contexts,\n    const uint32_t* static_context_map, const Command* commands,\n    size_t n_commands, MetaBlockSplit* mb) {\n  size_t num_literals = 0;\n  size_t i;\n  for (i = 0; i < n_commands; ++i) {\n    num_literals += commands[i].insert_len_;\n  }\n\n  if (num_contexts == 1) {\n    InitBlockSplitterLiteral(m, &arena->lit_blocks.plain, 256, 512, 400.0,\n        num_literals, &mb->literal_split, &mb->literal_histograms,\n        &mb->literal_histograms_size);\n  } else {\n    InitContextBlockSplitter(m, &arena->lit_blocks.ctx, 256, num_contexts, 512,\n        400.0, num_literals, &mb->literal_split, &mb->literal_histograms,\n        &mb->literal_histograms_size);\n  }\n  if (BROTLI_IS_OOM(m)) return;\n  InitBlockSplitterCommand(m, &arena->cmd_blocks, BROTLI_NUM_COMMAND_SYMBOLS,\n      1024, 500.0, n_commands, &mb->command_split, &mb->command_histograms,\n      &mb->command_histograms_size);\n  if (BROTLI_IS_OOM(m)) return;\n  InitBlockSplitterDistance(m, &arena->dist_blocks, 64, 512, 100.0, n_commands,\n      &mb->distance_split, &mb->distance_histograms,\n      &mb->distance_histograms_size);\n  if (BROTLI_IS_OOM(m)) return;\n\n  for (i = 0; i < n_commands; ++i) {\n    const Command cmd = commands[i];\n    size_t j;\n    BlockSplitterAddSymbolCommand(&arena->cmd_blocks, cmd.cmd_prefix_);\n    for (j = cmd.insert_len_; j != 0; --j) {\n      uint8_t literal = ringbuffer[pos & mask];\n      if (num_contexts == 1) {\n        BlockSplitterAddSymbolLiteral(&arena->lit_blocks.plain, literal);\n      } else {\n        size_t context =\n            BROTLI_CONTEXT(prev_byte, prev_byte2, literal_context_lut);\n        ContextBlockSplitterAddSymbol(&arena->lit_blocks.ctx, m, literal,\n                                      static_context_map[context]);\n        if (BROTLI_IS_OOM(m)) return;\n      }\n      prev_byte2 = prev_byte;\n      prev_byte = literal;\n      ++pos;\n    }\n    pos += CommandCopyLen(&cmd);\n    if (CommandCopyLen(&cmd)) {\n      prev_byte2 = ringbuffer[(pos - 2) & mask];\n      prev_byte = ringbuffer[(pos - 1) & mask];\n      if (cmd.cmd_prefix_ >= 128) {\n        BlockSplitterAddSymbolDistance(\n            &arena->dist_blocks, cmd.dist_prefix_ & 0x3FF);\n      }\n    }\n  }\n\n  if (num_contexts == 1) {\n    BlockSplitterFinishBlockLiteral(\n        &arena->lit_blocks.plain, /* is_final = */ BROTLI_TRUE);\n  } else {\n    ContextBlockSplitterFinishBlock(\n        &arena->lit_blocks.ctx, m, /* is_final = */ BROTLI_TRUE);\n    if (BROTLI_IS_OOM(m)) return;\n  }\n  BlockSplitterFinishBlockCommand(\n      &arena->cmd_blocks, /* is_final = */ BROTLI_TRUE);\n  BlockSplitterFinishBlockDistance(\n      &arena->dist_blocks, /* is_final = */ BROTLI_TRUE);\n\n  if (num_contexts > 1) {\n    MapStaticContexts(m, num_contexts, static_context_map, mb);\n  }\n}\n\nvoid BrotliBuildMetaBlockGreedy(MemoryManager* m,\n                                const uint8_t* ringbuffer,\n                                size_t pos,\n                                size_t mask,\n                                uint8_t prev_byte,\n                                uint8_t prev_byte2,\n                                ContextLut literal_context_lut,\n                                size_t num_contexts,\n                                const uint32_t* static_context_map,\n                                const Command* commands,\n                                size_t n_commands,\n                                MetaBlockSplit* mb) {\n  GreedyMetablockArena* arena = BROTLI_ALLOC(m, GreedyMetablockArena, 1);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(arena)) return;\n  if (num_contexts == 1) {\n    BrotliBuildMetaBlockGreedyInternal(m, arena, ringbuffer, pos, mask,\n        prev_byte, prev_byte2, literal_context_lut, 1, NULL, commands,\n        n_commands, mb);\n  } else {\n    BrotliBuildMetaBlockGreedyInternal(m, arena, ringbuffer, pos, mask,\n        prev_byte, prev_byte2, literal_context_lut, num_contexts,\n        static_context_map, commands, n_commands, mb);\n  }\n  BROTLI_FREE(m, arena);\n}\n\nvoid BrotliOptimizeHistograms(uint32_t num_distance_codes,\n                              MetaBlockSplit* mb) {\n  uint8_t good_for_rle[BROTLI_NUM_COMMAND_SYMBOLS];\n  size_t i;\n  for (i = 0; i < mb->literal_histograms_size; ++i) {\n    BrotliOptimizeHuffmanCountsForRle(256, mb->literal_histograms[i].data_,\n                                      good_for_rle);\n  }\n  for (i = 0; i < mb->command_histograms_size; ++i) {\n    BrotliOptimizeHuffmanCountsForRle(BROTLI_NUM_COMMAND_SYMBOLS,\n                                      mb->command_histograms[i].data_,\n                                      good_for_rle);\n  }\n  for (i = 0; i < mb->distance_histograms_size; ++i) {\n    BrotliOptimizeHuffmanCountsForRle(num_distance_codes,\n                                      mb->distance_histograms[i].data_,\n                                      good_for_rle);\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/metablock.h",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Algorithms for distributing the literals and commands of a metablock between\n   block types and contexts. */\n\n#ifndef BROTLI_ENC_METABLOCK_H_\n#define BROTLI_ENC_METABLOCK_H_\n\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"block_splitter.h\"\n#include \"command.h\"\n#include \"histogram.h\"\n#include \"memory.h\"\n#include \"params.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define BROTLI_MAX_STATIC_CONTEXTS 13\n\ntypedef struct MetaBlockSplit {\n  BlockSplit literal_split;\n  BlockSplit command_split;\n  BlockSplit distance_split;\n  uint32_t* literal_context_map;\n  size_t literal_context_map_size;\n  uint32_t* distance_context_map;\n  size_t distance_context_map_size;\n  HistogramLiteral* literal_histograms;\n  size_t literal_histograms_size;\n  HistogramCommand* command_histograms;\n  size_t command_histograms_size;\n  HistogramDistance* distance_histograms;\n  size_t distance_histograms_size;\n} MetaBlockSplit;\n\nstatic BROTLI_INLINE void InitMetaBlockSplit(MetaBlockSplit* mb) {\n  BrotliInitBlockSplit(&mb->literal_split);\n  BrotliInitBlockSplit(&mb->command_split);\n  BrotliInitBlockSplit(&mb->distance_split);\n  mb->literal_context_map = 0;\n  mb->literal_context_map_size = 0;\n  mb->distance_context_map = 0;\n  mb->distance_context_map_size = 0;\n  mb->literal_histograms = 0;\n  mb->literal_histograms_size = 0;\n  mb->command_histograms = 0;\n  mb->command_histograms_size = 0;\n  mb->distance_histograms = 0;\n  mb->distance_histograms_size = 0;\n}\n\nstatic BROTLI_INLINE void DestroyMetaBlockSplit(\n    MemoryManager* m, MetaBlockSplit* mb) {\n  BrotliDestroyBlockSplit(m, &mb->literal_split);\n  BrotliDestroyBlockSplit(m, &mb->command_split);\n  BrotliDestroyBlockSplit(m, &mb->distance_split);\n  BROTLI_FREE(m, mb->literal_context_map);\n  BROTLI_FREE(m, mb->distance_context_map);\n  BROTLI_FREE(m, mb->literal_histograms);\n  BROTLI_FREE(m, mb->command_histograms);\n  BROTLI_FREE(m, mb->distance_histograms);\n}\n\n/* Uses the slow shortest-path block splitter and does context clustering.\n   The distance parameters are dynamically selected based on the commands\n   which get recomputed under the new distance parameters. The new distance\n   parameters are stored into *params. */\nBROTLI_INTERNAL void BrotliBuildMetaBlock(MemoryManager* m,\n                                          const uint8_t* ringbuffer,\n                                          const size_t pos,\n                                          const size_t mask,\n                                          BrotliEncoderParams* params,\n                                          uint8_t prev_byte,\n                                          uint8_t prev_byte2,\n                                          Command* cmds,\n                                          size_t num_commands,\n                                          ContextType literal_context_mode,\n                                          MetaBlockSplit* mb);\n\n/* Uses a fast greedy block splitter that tries to merge current block with the\n   last or the second last block and uses a static context clustering which\n   is the same for all block types. */\nBROTLI_INTERNAL void BrotliBuildMetaBlockGreedy(\n    MemoryManager* m, const uint8_t* ringbuffer, size_t pos, size_t mask,\n    uint8_t prev_byte, uint8_t prev_byte2, ContextLut literal_context_lut,\n    size_t num_contexts, const uint32_t* static_context_map,\n    const Command* commands, size_t n_commands, MetaBlockSplit* mb);\n\nBROTLI_INTERNAL void BrotliOptimizeHistograms(uint32_t num_distance_codes,\n                                              MetaBlockSplit* mb);\n\nBROTLI_INTERNAL void BrotliInitDistanceParams(BrotliDistanceParams* params,\n    uint32_t npostfix, uint32_t ndirect, BROTLI_BOOL large_window);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_METABLOCK_H_ */\n"
  },
  {
    "path": "c/enc/metablock_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN */\n\n#define HistogramType FN(Histogram)\n\n/* Greedy block splitter for one block category (literal, command or distance).\n*/\ntypedef struct FN(BlockSplitter) {\n  /* Alphabet size of particular block category. */\n  size_t alphabet_size_;\n  /* We collect at least this many symbols for each block. */\n  size_t min_block_size_;\n  /* We merge histograms A and B if\n       entropy(A+B) < entropy(A) + entropy(B) + split_threshold_,\n     where A is the current histogram and B is the histogram of the last or the\n     second last block type. */\n  double split_threshold_;\n\n  size_t num_blocks_;\n  BlockSplit* split_;  /* not owned */\n  HistogramType* histograms_;  /* not owned */\n  size_t* histograms_size_;  /* not owned */\n\n  /* Temporary storage for BlockSplitterFinishBlock. */\n  HistogramType combined_histo[2];\n\n  /* The number of symbols that we want to collect before deciding on whether\n     or not to merge the block with a previous one or emit a new block. */\n  size_t target_block_size_;\n  /* The number of symbols in the current histogram. */\n  size_t block_size_;\n  /* Offset of the current histogram. */\n  size_t curr_histogram_ix_;\n  /* Offset of the histograms of the previous two block types. */\n  size_t last_histogram_ix_[2];\n  /* Entropy of the previous two block types. */\n  double last_entropy_[2];\n  /* The number of times we merged the current block with the last one. */\n  size_t merge_last_count_;\n} FN(BlockSplitter);\n\nstatic void FN(InitBlockSplitter)(\n    MemoryManager* m, FN(BlockSplitter)* self, size_t alphabet_size,\n    size_t min_block_size, double split_threshold, size_t num_symbols,\n    BlockSplit* split, HistogramType** histograms, size_t* histograms_size) {\n  size_t max_num_blocks = num_symbols / min_block_size + 1;\n  /* We have to allocate one more histogram than the maximum number of block\n     types for the current histogram when the meta-block is too big. */\n  size_t max_num_types =\n      BROTLI_MIN(size_t, max_num_blocks, BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 1);\n  self->alphabet_size_ = alphabet_size;\n  self->min_block_size_ = min_block_size;\n  self->split_threshold_ = split_threshold;\n  self->num_blocks_ = 0;\n  self->split_ = split;\n  self->histograms_size_ = histograms_size;\n  self->target_block_size_ = min_block_size;\n  self->block_size_ = 0;\n  self->curr_histogram_ix_ = 0;\n  self->merge_last_count_ = 0;\n  BROTLI_ENSURE_CAPACITY(m, uint8_t,\n      split->types, split->types_alloc_size, max_num_blocks);\n  BROTLI_ENSURE_CAPACITY(m, uint32_t,\n      split->lengths, split->lengths_alloc_size, max_num_blocks);\n  if (BROTLI_IS_OOM(m)) return;\n  self->split_->num_blocks = max_num_blocks;\n  BROTLI_DCHECK(*histograms == 0);\n  *histograms_size = max_num_types;\n  *histograms = BROTLI_ALLOC(m, HistogramType, *histograms_size);\n  self->histograms_ = *histograms;\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(*histograms)) return;\n  /* Clear only current histogram. */\n  FN(HistogramClear)(&self->histograms_[0]);\n  self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0;\n}\n\n/* Does either of three things:\n     (1) emits the current block with a new block type;\n     (2) emits the current block with the type of the second last block;\n     (3) merges the current block with the last block. */\nstatic void FN(BlockSplitterFinishBlock)(\n    FN(BlockSplitter)* self, BROTLI_BOOL is_final) {\n  BlockSplit* split = self->split_;\n  double* last_entropy = self->last_entropy_;\n  HistogramType* histograms = self->histograms_;\n  self->block_size_ =\n      BROTLI_MAX(size_t, self->block_size_, self->min_block_size_);\n  if (self->num_blocks_ == 0) {\n    /* Create first block. */\n    split->lengths[0] = (uint32_t)self->block_size_;\n    split->types[0] = 0;\n    last_entropy[0] =\n        BrotliBitsEntropy(histograms[0].data_, self->alphabet_size_);\n    last_entropy[1] = last_entropy[0];\n    ++self->num_blocks_;\n    ++split->num_types;\n    ++self->curr_histogram_ix_;\n    if (self->curr_histogram_ix_ < *self->histograms_size_)\n      FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);\n    self->block_size_ = 0;\n  } else if (self->block_size_ > 0) {\n    double entropy = BrotliBitsEntropy(\n        histograms[self->curr_histogram_ix_].data_, self->alphabet_size_);\n    double combined_entropy[2];\n    double diff[2];\n    size_t j;\n    for (j = 0; j < 2; ++j) {\n      size_t last_histogram_ix = self->last_histogram_ix_[j];\n      self->combined_histo[j] = histograms[self->curr_histogram_ix_];\n      FN(HistogramAddHistogram)(&self->combined_histo[j],\n          &histograms[last_histogram_ix]);\n      combined_entropy[j] = BrotliBitsEntropy(\n          &self->combined_histo[j].data_[0], self->alphabet_size_);\n      diff[j] = combined_entropy[j] - entropy - last_entropy[j];\n    }\n\n    if (split->num_types < BROTLI_MAX_NUMBER_OF_BLOCK_TYPES &&\n        diff[0] > self->split_threshold_ &&\n        diff[1] > self->split_threshold_) {\n      /* Create new block. */\n      split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;\n      split->types[self->num_blocks_] = (uint8_t)split->num_types;\n      self->last_histogram_ix_[1] = self->last_histogram_ix_[0];\n      self->last_histogram_ix_[0] = (uint8_t)split->num_types;\n      last_entropy[1] = last_entropy[0];\n      last_entropy[0] = entropy;\n      ++self->num_blocks_;\n      ++split->num_types;\n      ++self->curr_histogram_ix_;\n      if (self->curr_histogram_ix_ < *self->histograms_size_)\n        FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);\n      self->block_size_ = 0;\n      self->merge_last_count_ = 0;\n      self->target_block_size_ = self->min_block_size_;\n    } else if (diff[1] < diff[0] - 20.0) {\n      /* Combine this block with second last block. */\n      split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;\n      split->types[self->num_blocks_] = split->types[self->num_blocks_ - 2];\n      BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1);\n      histograms[self->last_histogram_ix_[0]] = self->combined_histo[1];\n      last_entropy[1] = last_entropy[0];\n      last_entropy[0] = combined_entropy[1];\n      ++self->num_blocks_;\n      self->block_size_ = 0;\n      FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);\n      self->merge_last_count_ = 0;\n      self->target_block_size_ = self->min_block_size_;\n    } else {\n      /* Combine this block with last block. */\n      split->lengths[self->num_blocks_ - 1] += (uint32_t)self->block_size_;\n      histograms[self->last_histogram_ix_[0]] = self->combined_histo[0];\n      last_entropy[0] = combined_entropy[0];\n      if (split->num_types == 1) {\n        last_entropy[1] = last_entropy[0];\n      }\n      self->block_size_ = 0;\n      FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);\n      if (++self->merge_last_count_ > 1) {\n        self->target_block_size_ += self->min_block_size_;\n      }\n    }\n  }\n  if (is_final) {\n    *self->histograms_size_ = split->num_types;\n    split->num_blocks = self->num_blocks_;\n  }\n}\n\n/* Adds the next symbol to the current histogram. When the current histogram\n   reaches the target size, decides on merging the block. */\nstatic void FN(BlockSplitterAddSymbol)(FN(BlockSplitter)* self, size_t symbol) {\n  FN(HistogramAdd)(&self->histograms_[self->curr_histogram_ix_], symbol);\n  ++self->block_size_;\n  if (self->block_size_ == self->target_block_size_) {\n    FN(BlockSplitterFinishBlock)(self, /* is_final = */ BROTLI_FALSE);\n  }\n}\n\n#undef HistogramType\n"
  },
  {
    "path": "c/enc/params.h",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Parameters for the Brotli encoder with chosen quality levels. */\n\n#ifndef BROTLI_ENC_PARAMS_H_\n#define BROTLI_ENC_PARAMS_H_\n\n#include <brotli/encode.h>\n#include \"encoder_dict.h\"\n\ntypedef struct BrotliHasherParams {\n  int type;\n  int bucket_bits;\n  int block_bits;\n  int num_last_distances_to_check;\n} BrotliHasherParams;\n\ntypedef struct BrotliDistanceParams {\n  uint32_t distance_postfix_bits;\n  uint32_t num_direct_distance_codes;\n  uint32_t alphabet_size_max;\n  uint32_t alphabet_size_limit;\n  size_t max_distance;\n} BrotliDistanceParams;\n\n/* Encoding parameters */\ntypedef struct BrotliEncoderParams {\n  BrotliEncoderMode mode;\n  int quality;\n  int lgwin;\n  int lgblock;\n  size_t stream_offset;\n  size_t size_hint;\n  BROTLI_BOOL disable_literal_context_modeling;\n  BROTLI_BOOL large_window;\n  BrotliHasherParams hasher;\n  BrotliDistanceParams dist;\n  /* TODO(eustas): rename to BrotliShared... */\n  SharedEncoderDictionary dictionary;\n} BrotliEncoderParams;\n\n#endif  /* BROTLI_ENC_PARAMS_H_ */\n"
  },
  {
    "path": "c/enc/prefix.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Functions for encoding of integers into prefix codes the amount of extra\n   bits, and the actual values of the extra bits. */\n\n#ifndef BROTLI_ENC_PREFIX_H_\n#define BROTLI_ENC_PREFIX_H_\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n#include \"fast_log.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* Here distance_code is an intermediate code, i.e. one of the special codes or\n   the actual distance increased by BROTLI_NUM_DISTANCE_SHORT_CODES - 1. */\nstatic BROTLI_INLINE void PrefixEncodeCopyDistance(size_t distance_code,\n                                                   size_t num_direct_codes,\n                                                   size_t postfix_bits,\n                                                   uint16_t* code,\n                                                   uint32_t* extra_bits) {\n  if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_codes) {\n    *code = (uint16_t)distance_code;\n    *extra_bits = 0;\n    return;\n  } else {\n    size_t dist = ((size_t)1 << (postfix_bits + 2u)) +\n        (distance_code - BROTLI_NUM_DISTANCE_SHORT_CODES - num_direct_codes);\n    size_t bucket = Log2FloorNonZero(dist) - 1;\n    size_t postfix_mask = (1u << postfix_bits) - 1;\n    size_t postfix = dist & postfix_mask;\n    size_t prefix = (dist >> bucket) & 1;\n    size_t offset = (2 + prefix) << bucket;\n    size_t nbits = bucket - postfix_bits;\n    *code = (uint16_t)((nbits << 10) |\n        (BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_codes +\n         ((2 * (nbits - 1) + prefix) << postfix_bits) + postfix));\n    *extra_bits = (uint32_t)((dist - offset) >> postfix_bits);\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_PREFIX_H_ */\n"
  },
  {
    "path": "c/enc/quality.h",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Constants and formulas that affect speed-ratio trade-offs and thus define\n   quality levels. */\n\n#ifndef BROTLI_ENC_QUALITY_H_\n#define BROTLI_ENC_QUALITY_H_\n\n#include \"../common/platform.h\"\n#include <brotli/encode.h>\n#include \"params.h\"\n\n#define FAST_ONE_PASS_COMPRESSION_QUALITY 0\n#define FAST_TWO_PASS_COMPRESSION_QUALITY 1\n#define ZOPFLIFICATION_QUALITY 10\n#define HQ_ZOPFLIFICATION_QUALITY 11\n\n#define MAX_QUALITY_FOR_STATIC_ENTROPY_CODES 2\n#define MIN_QUALITY_FOR_BLOCK_SPLIT 4\n#define MIN_QUALITY_FOR_NONZERO_DISTANCE_PARAMS 4\n#define MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS 4\n#define MIN_QUALITY_FOR_EXTENSIVE_REFERENCE_SEARCH 5\n#define MIN_QUALITY_FOR_CONTEXT_MODELING 5\n#define MIN_QUALITY_FOR_HQ_CONTEXT_MODELING 7\n#define MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING 10\n\n/* For quality below MIN_QUALITY_FOR_BLOCK_SPLIT there is no block splitting,\n   so we buffer at most this much literals and commands. */\n#define MAX_NUM_DELAYED_SYMBOLS 0x2FFF\n\n/* Returns hash-table size for quality levels 0 and 1. */\nstatic BROTLI_INLINE size_t MaxHashTableSize(int quality) {\n  return quality == FAST_ONE_PASS_COMPRESSION_QUALITY ? 1 << 15 : 1 << 17;\n}\n\n/* The maximum length for which the zopflification uses distinct distances. */\n#define MAX_ZOPFLI_LEN_QUALITY_10 150\n#define MAX_ZOPFLI_LEN_QUALITY_11 325\n\n/* Do not thoroughly search when a long copy is found. */\n#define BROTLI_LONG_COPY_QUICK_STEP 16384\n\nstatic BROTLI_INLINE size_t MaxZopfliLen(const BrotliEncoderParams* params) {\n  return params->quality <= 10 ?\n      MAX_ZOPFLI_LEN_QUALITY_10 :\n      MAX_ZOPFLI_LEN_QUALITY_11;\n}\n\n/* Number of best candidates to evaluate to expand Zopfli chain. */\nstatic BROTLI_INLINE size_t MaxZopfliCandidates(\n  const BrotliEncoderParams* params) {\n  return params->quality <= 10 ? 1 : 5;\n}\n\nstatic BROTLI_INLINE void SanitizeParams(BrotliEncoderParams* params) {\n  params->quality = BROTLI_MIN(int, BROTLI_MAX_QUALITY,\n      BROTLI_MAX(int, BROTLI_MIN_QUALITY, params->quality));\n  if (params->quality <= MAX_QUALITY_FOR_STATIC_ENTROPY_CODES) {\n    params->large_window = BROTLI_FALSE;\n  }\n  if (params->lgwin < BROTLI_MIN_WINDOW_BITS) {\n    params->lgwin = BROTLI_MIN_WINDOW_BITS;\n  } else {\n    int max_lgwin = params->large_window ? BROTLI_LARGE_MAX_WINDOW_BITS :\n                                           BROTLI_MAX_WINDOW_BITS;\n    if (params->lgwin > max_lgwin) params->lgwin = max_lgwin;\n  }\n}\n\n/* Returns optimized lg_block value. */\nstatic BROTLI_INLINE int ComputeLgBlock(const BrotliEncoderParams* params) {\n  int lgblock = params->lgblock;\n  if (params->quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||\n      params->quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {\n    lgblock = params->lgwin;\n  } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) {\n    lgblock = 14;\n  } else if (lgblock == 0) {\n    lgblock = 16;\n    if (params->quality >= 9 && params->lgwin > lgblock) {\n      lgblock = BROTLI_MIN(int, 18, params->lgwin);\n    }\n  } else {\n    lgblock = BROTLI_MIN(int, BROTLI_MAX_INPUT_BLOCK_BITS,\n        BROTLI_MAX(int, BROTLI_MIN_INPUT_BLOCK_BITS, lgblock));\n  }\n  return lgblock;\n}\n\n/* Returns log2 of the size of main ring buffer area.\n   Allocate at least lgwin + 1 bits for the ring buffer so that the newly\n   added block fits there completely and we still get lgwin bits and at least\n   read_block_size_bits + 1 bits because the copy tail length needs to be\n   smaller than ring-buffer size. */\nstatic BROTLI_INLINE int ComputeRbBits(const BrotliEncoderParams* params) {\n  return 1 + BROTLI_MAX(int, params->lgwin, params->lgblock);\n}\n\nstatic BROTLI_INLINE size_t MaxMetablockSize(\n    const BrotliEncoderParams* params) {\n  int bits =\n      BROTLI_MIN(int, ComputeRbBits(params), BROTLI_MAX_INPUT_BLOCK_BITS);\n  return (size_t)1 << bits;\n}\n\n/* When searching for backward references and have not seen matches for a long\n   time, we can skip some match lookups. Unsuccessful match lookups are very\n   expensive and this kind of a heuristic speeds up compression quite a lot.\n   At first 8 byte strides are taken and every second byte is put to hasher.\n   After 4x more literals stride by 16 bytes, every put 4-th byte to hasher.\n   Applied only to qualities 2 to 9. */\nstatic BROTLI_INLINE size_t LiteralSpreeLengthForSparseSearch(\n    const BrotliEncoderParams* params) {\n  return params->quality < 9 ? 64 : 512;\n}\n\n/* Quality to hasher mapping:\n\n   - q02: h02 (longest_match_quickly), b16, l5\n\n   - q03: h03 (longest_match_quickly), b17, l5\n\n   - q04: h04 (longest_match_quickly), b17, l5\n   - q04: h54 (longest_match_quickly), b20, l7 | for large files\n\n   - q05: h58 (longest_match_simd   ), b14, l4\n   - q05: h68 (longest_match64_simd ), b15, l5 | for large files\n   - q05: h40 (forgetful_chain      ), b15, l4 | for small window\n\n   - q06: h58 (longest_match_simd   ), b14, l4\n   - q06: h68 (longest_match64_simd ), b15, l5 | for large files\n   - q06: h40 (forgetful_chain      ), b15, l4 | for small window\n\n   - q07: h58 (longest_match_simd   ), b15, l4\n   - q07: h68 (longest_match64_simd ), b15, l5 | for large files\n   - q07: h41 (forgetful_chain      ), b15, l4 | for small window\n\n   - q08: h05 (longest_match        ), b15, l4\n   - q08: h06 (longest_match64      ), b15, l5 | for large files\n   - q08: h41 (forgetful_chain      ), b15, l4 | for small window\n\n   - q09: h05 (longest_match        ), b15, l4\n   - q09: h06 (longest_match64      ), b15, l5 | for large files\n   - q09: h42 (forgetful_chain      ), b15, l4 | for small window\n\n   - q10: t10 (to_binary_tree       ), b17, l128\n\n   - q11: t10 (to_binary_tree       ), b17, l128\n\n  Where \"q\" is quality, \"h\" is hasher type, \"b\" is bucket bits,\n  \"l\" is source len. */\nstatic BROTLI_INLINE void ChooseHasher(const BrotliEncoderParams* params,\n                                       BrotliHasherParams* hparams) {\n  if (params->quality > 9) {\n    hparams->type = 10;\n  } else if (params->quality == 4 && params->size_hint >= (1 << 20)) {\n    hparams->type = 54;\n  } else if (params->quality < 5) {\n    hparams->type = params->quality;\n  } else if (params->lgwin <= 16) {\n    hparams->type = params->quality < 7 ? 40 : params->quality < 9 ? 41 : 42;\n  } else if (params->size_hint >= (1 << 20) && params->lgwin >= 19) {\n#if defined(BROTLI_MAX_SIMD_QUALITY)\n    hparams->type = params->quality <= BROTLI_MAX_SIMD_QUALITY ? 68 : 6;\n#else\n    hparams->type = 6;\n#endif\n    hparams->block_bits = params->quality - 1;\n    hparams->bucket_bits = 15;\n    hparams->num_last_distances_to_check =\n        params->quality < 7 ? 4 : params->quality < 9 ? 10 : 16;\n  } else {\n    /* TODO(eustas): often previous setting (H6) is faster and denser; consider\n                     adding an option to use it. */\n#if defined(BROTLI_MAX_SIMD_QUALITY)\n    hparams->type = params->quality <= BROTLI_MAX_SIMD_QUALITY ? 58 : 5;\n#else\n    hparams->type = 5;\n#endif\n    hparams->block_bits = params->quality - 1;\n    hparams->bucket_bits = params->quality < 7 ? 14 : 15;\n    hparams->num_last_distances_to_check =\n        params->quality < 7 ? 4 : params->quality < 9 ? 10 : 16;\n  }\n\n  if (params->lgwin > 24) {\n    /* Different hashers for large window brotli: not for qualities <= 2,\n       these are too fast for large window. Not for qualities >= 10: their\n       hasher already works well with large window. So the changes are:\n       H3 --> H35: for quality 3.\n       H54 --> H55: for quality 4 with size hint > 1MB\n       H6/H68 --> H65: for qualities 5, 6, 7, 8, 9. */\n    if (hparams->type == 3) {\n      hparams->type = 35;\n    }\n    if (hparams->type == 54) {\n      hparams->type = 55;\n    }\n    if (hparams->type == 6 || hparams->type == 68) {\n      hparams->type = 65;\n    }\n  }\n}\n\n#endif  /* BROTLI_ENC_QUALITY_H_ */\n"
  },
  {
    "path": "c/enc/ringbuffer.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Sliding window over the input data. */\n\n#ifndef BROTLI_ENC_RINGBUFFER_H_\n#define BROTLI_ENC_RINGBUFFER_H_\n\n#include \"../common/platform.h\"\n#include \"memory.h\"\n#include \"params.h\"\n#include \"quality.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* A RingBuffer(window_bits, tail_bits) contains `1 << window_bits' bytes of\n   data in a circular manner: writing a byte writes it to:\n     `position() % (1 << window_bits)'.\n   For convenience, the RingBuffer array contains another copy of the\n   first `1 << tail_bits' bytes:\n     buffer_[i] == buffer_[i + (1 << window_bits)], if i < (1 << tail_bits),\n   and another copy of the last two bytes:\n     buffer_[-1] == buffer_[(1 << window_bits) - 1] and\n     buffer_[-2] == buffer_[(1 << window_bits) - 2]. */\ntypedef struct RingBuffer {\n  /* Size of the ring-buffer is (1 << window_bits) + tail_size_. */\n  const uint32_t size_;\n  const uint32_t mask_;\n  const uint32_t tail_size_;\n  const uint32_t total_size_;\n\n  uint32_t cur_size_;\n  /* Position to write in the ring buffer. */\n  uint32_t pos_;\n  /* The actual ring buffer containing the copy of the last two bytes, the data,\n     and the copy of the beginning as a tail. */\n  uint8_t* data_;\n  /* The start of the ring-buffer. */\n  uint8_t* buffer_;\n} RingBuffer;\n\nstatic BROTLI_INLINE void RingBufferInit(RingBuffer* rb) {\n  rb->cur_size_ = 0;\n  rb->pos_ = 0;\n  rb->data_ = 0;\n  rb->buffer_ = 0;\n}\n\nstatic BROTLI_INLINE void RingBufferSetup(\n    const BrotliEncoderParams* params, RingBuffer* rb) {\n  int window_bits = ComputeRbBits(params);\n  int tail_bits = params->lgblock;\n  *(uint32_t*)&rb->size_ = 1u << window_bits;\n  *(uint32_t*)&rb->mask_ = (1u << window_bits) - 1;\n  *(uint32_t*)&rb->tail_size_ = 1u << tail_bits;\n  *(uint32_t*)&rb->total_size_ = rb->size_ + rb->tail_size_;\n}\n\nstatic BROTLI_INLINE void RingBufferFree(MemoryManager* m, RingBuffer* rb) {\n  BROTLI_FREE(m, rb->data_);\n}\n\n/* Allocates or re-allocates data_ to the given length + plus some slack\n   region before and after. Fills the slack regions with zeros. */\nstatic BROTLI_INLINE void RingBufferInitBuffer(\n    MemoryManager* m, const uint32_t buflen, RingBuffer* rb) {\n  static const size_t kSlackForEightByteHashingEverywhere = 7;\n  uint8_t* new_data = BROTLI_ALLOC(\n      m, uint8_t, 2 + buflen + kSlackForEightByteHashingEverywhere);\n  size_t i;\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(new_data)) return;\n  if (rb->data_) {\n    memcpy(new_data, rb->data_,\n        2 + rb->cur_size_ + kSlackForEightByteHashingEverywhere);\n    BROTLI_FREE(m, rb->data_);\n  }\n  rb->data_ = new_data;\n  rb->cur_size_ = buflen;\n  rb->buffer_ = rb->data_ + 2;\n  rb->buffer_[-2] = rb->buffer_[-1] = 0;\n  for (i = 0; i < kSlackForEightByteHashingEverywhere; ++i) {\n    rb->buffer_[rb->cur_size_ + i] = 0;\n  }\n}\n\nstatic BROTLI_INLINE void RingBufferWriteTail(\n    const uint8_t* bytes, size_t n, RingBuffer* rb) {\n  const size_t masked_pos = rb->pos_ & rb->mask_;\n  if (BROTLI_PREDICT_FALSE(masked_pos < rb->tail_size_)) {\n    /* Just fill the tail buffer with the beginning data. */\n    const size_t p = rb->size_ + masked_pos;\n    memcpy(&rb->buffer_[p], bytes,\n        BROTLI_MIN(size_t, n, rb->tail_size_ - masked_pos));\n  }\n}\n\n/* Push bytes into the ring buffer. */\nstatic BROTLI_INLINE void RingBufferWrite(\n    MemoryManager* m, const uint8_t* bytes, size_t n, RingBuffer* rb) {\n  if (rb->pos_ == 0 && n < rb->tail_size_) {\n    /* Special case for the first write: to process the first block, we don't\n       need to allocate the whole ring-buffer and we don't need the tail\n       either. However, we do this memory usage optimization only if the\n       first write is less than the tail size, which is also the input block\n       size, otherwise it is likely that other blocks will follow and we\n       will need to reallocate to the full size anyway. */\n    rb->pos_ = (uint32_t)n;\n    RingBufferInitBuffer(m, rb->pos_, rb);\n    if (BROTLI_IS_OOM(m)) return;\n    memcpy(rb->buffer_, bytes, n);\n    return;\n  }\n  if (rb->cur_size_ < rb->total_size_) {\n    /* Lazily allocate the full buffer. */\n    RingBufferInitBuffer(m, rb->total_size_, rb);\n    if (BROTLI_IS_OOM(m)) return;\n    /* Initialize the last two bytes to zero, so that we don't have to worry\n       later when we copy the last two bytes to the first two positions. */\n    rb->buffer_[rb->size_ - 2] = 0;\n    rb->buffer_[rb->size_ - 1] = 0;\n    /* Initialize tail; might be touched by \"best_len++\" optimization when\n       ring buffer is \"full\". */\n    rb->buffer_[rb->size_] = 241;\n  }\n  {\n    const size_t masked_pos = rb->pos_ & rb->mask_;\n    /* The length of the writes is limited so that we do not need to worry\n       about a write */\n    RingBufferWriteTail(bytes, n, rb);\n    if (BROTLI_PREDICT_TRUE(masked_pos + n <= rb->size_)) {\n      /* A single write fits. */\n      memcpy(&rb->buffer_[masked_pos], bytes, n);\n    } else {\n      /* Split into two writes.\n         Copy into the end of the buffer, including the tail buffer. */\n      memcpy(&rb->buffer_[masked_pos], bytes,\n             BROTLI_MIN(size_t, n, rb->total_size_ - masked_pos));\n      /* Copy into the beginning of the buffer */\n      memcpy(&rb->buffer_[0], bytes + (rb->size_ - masked_pos),\n             n - (rb->size_ - masked_pos));\n    }\n  }\n  {\n    BROTLI_BOOL not_first_lap = (rb->pos_ & (1u << 31)) != 0;\n    uint32_t rb_pos_mask = (1u << 31) - 1;\n    rb->buffer_[-2] = rb->buffer_[rb->size_ - 2];\n    rb->buffer_[-1] = rb->buffer_[rb->size_ - 1];\n    rb->pos_ = (rb->pos_ & rb_pos_mask) + (uint32_t)(n & rb_pos_mask);\n    if (not_first_lap) {\n      /* Wrap, but preserve not-a-first-lap feature. */\n      rb->pos_ |= 1u << 31;\n    }\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_RINGBUFFER_H_ */\n"
  },
  {
    "path": "c/enc/state.h",
    "content": "/* Copyright 2022 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Encoder state. */\n\n#ifndef BROTLI_ENC_STATE_H_\n#define BROTLI_ENC_STATE_H_\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n#include \"command.h\"\n#include \"compress_fragment.h\"\n#include \"compress_fragment_two_pass.h\"\n#include \"hash.h\"\n#include \"memory.h\"\n#include \"params.h\"\n#include \"ringbuffer.h\"\n\ntypedef enum BrotliEncoderStreamState {\n  /* Default state. */\n  BROTLI_STREAM_PROCESSING = 0,\n  /* Intermediate state; after next block is emitted, byte-padding should be\n     performed before getting back to default state. */\n  BROTLI_STREAM_FLUSH_REQUESTED = 1,\n  /* Last metablock was produced; no more input is acceptable. */\n  BROTLI_STREAM_FINISHED = 2,\n  /* Flushing compressed block and writing meta-data block header. */\n  BROTLI_STREAM_METADATA_HEAD = 3,\n  /* Writing metadata block body. */\n  BROTLI_STREAM_METADATA_BODY = 4\n} BrotliEncoderStreamState;\n\ntypedef enum BrotliEncoderFlintState {\n  BROTLI_FLINT_NEEDS_2_BYTES = 2,\n  BROTLI_FLINT_NEEDS_1_BYTE = 1,\n  BROTLI_FLINT_WAITING_FOR_PROCESSING = 0,\n  BROTLI_FLINT_WAITING_FOR_FLUSHING = -1,\n  BROTLI_FLINT_DONE = -2\n} BrotliEncoderFlintState;\n\ntypedef struct BrotliEncoderStateStruct {\n  BrotliEncoderParams params;\n\n  MemoryManager memory_manager_;\n\n  uint64_t input_pos_;\n  RingBuffer ringbuffer_;\n  size_t cmd_alloc_size_;\n  Command* commands_;\n  size_t num_commands_;\n  size_t num_literals_;\n  size_t last_insert_len_;\n  uint64_t last_flush_pos_;\n  uint64_t last_processed_pos_;\n  int dist_cache_[BROTLI_NUM_DISTANCE_SHORT_CODES];\n  int saved_dist_cache_[4];\n  uint16_t last_bytes_;\n  uint8_t last_bytes_bits_;\n  /* \"Flint\" is a tiny uncompressed block emitted before the continuation\n     block to unwire literal context from previous data. Despite being int8_t,\n     field is actually BrotliEncoderFlintState enum. */\n  int8_t flint_;\n  uint8_t prev_byte_;\n  uint8_t prev_byte2_;\n  size_t storage_size_;\n  uint8_t* storage_;\n\n  Hasher hasher_;\n\n  /* Hash table for FAST_ONE_PASS_COMPRESSION_QUALITY mode. */\n  int small_table_[1 << 10];  /* 4KiB */\n  int* large_table_;          /* Allocated only when needed */\n  size_t large_table_size_;\n\n  BrotliOnePassArena* one_pass_arena_;\n  BrotliTwoPassArena* two_pass_arena_;\n\n  /* Command and literal buffers for FAST_TWO_PASS_COMPRESSION_QUALITY. */\n  uint32_t* command_buf_;\n  uint8_t* literal_buf_;\n\n  uint64_t total_in_;\n  uint8_t* next_out_;\n  size_t available_out_;\n  uint64_t total_out_;\n  /* Temporary buffer for padding flush bits or metadata block header / body. */\n  union {\n    uint64_t u64[2];\n    uint8_t u8[16];\n  } tiny_buf_;\n  uint32_t remaining_metadata_bytes_;\n  BrotliEncoderStreamState stream_state_;\n\n  BROTLI_BOOL is_last_block_emitted_;\n  BROTLI_BOOL is_initialized_;\n} BrotliEncoderStateStruct;\n\ntypedef struct BrotliEncoderStateStruct BrotliEncoderStateInternal;\n#define BrotliEncoderState BrotliEncoderStateInternal\n\n#endif  // BROTLI_ENC_STATE_H_\n"
  },
  {
    "path": "c/enc/static_dict.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"static_dict.h\"\n\n#include \"../common/dictionary.h\"\n#include \"../common/platform.h\"\n#include \"../common/transform.h\"\n#include \"encoder_dict.h\"\n#include \"find_match_length.h\"\n#include \"hash_base.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstatic BROTLI_INLINE void AddMatch(size_t distance, size_t len, size_t len_code,\n                                   uint32_t* matches) {\n  uint32_t match = (uint32_t)((distance << 5) + len_code);\n  matches[len] = BROTLI_MIN(uint32_t, matches[len], match);\n}\n\nstatic BROTLI_INLINE size_t DictMatchLength(const BrotliDictionary* dictionary,\n                                            const uint8_t* data,\n                                            size_t id,\n                                            size_t len,\n                                            size_t maxlen) {\n  const size_t offset = dictionary->offsets_by_length[len] + len * id;\n  return FindMatchLengthWithLimit(&dictionary->data[offset], data,\n                                  BROTLI_MIN(size_t, len, maxlen));\n}\n\nstatic BROTLI_INLINE BROTLI_BOOL IsMatch(const BrotliDictionary* dictionary,\n    DictWord w, const uint8_t* data, size_t max_length) {\n  if (w.len > max_length) {\n    return BROTLI_FALSE;\n  } else {\n    const size_t offset = dictionary->offsets_by_length[w.len] +\n        (size_t)w.len * (size_t)w.idx;\n    const uint8_t* dict = &dictionary->data[offset];\n    if (w.transform == 0) {\n      /* Match against base dictionary word. */\n      return\n          TO_BROTLI_BOOL(FindMatchLengthWithLimit(dict, data, w.len) == w.len);\n    } else if (w.transform == 10) {\n      /* Match against uppercase first transform.\n         Note that there are only ASCII uppercase words in the lookup table. */\n      return TO_BROTLI_BOOL(dict[0] >= 'a' && dict[0] <= 'z' &&\n              (dict[0] ^ 32) == data[0] &&\n              FindMatchLengthWithLimit(&dict[1], &data[1], w.len - 1u) ==\n              w.len - 1u);\n    } else {\n      /* Match against uppercase all transform.\n         Note that there are only ASCII uppercase words in the lookup table. */\n      size_t i;\n      for (i = 0; i < w.len; ++i) {\n        if (dict[i] >= 'a' && dict[i] <= 'z') {\n          if ((dict[i] ^ 32) != data[i]) return BROTLI_FALSE;\n        } else {\n          if (dict[i] != data[i]) return BROTLI_FALSE;\n        }\n      }\n      return BROTLI_TRUE;\n    }\n  }\n}\n\n/* Finds matches for a single static dictionary */\nstatic BROTLI_BOOL BrotliFindAllStaticDictionaryMatchesFor(\n    const BrotliEncoderDictionary* dictionary, const uint8_t* data,\n    size_t min_length, size_t max_length, uint32_t* matches) {\n  BROTLI_BOOL has_found_match = BROTLI_FALSE;\n#if defined(BROTLI_EXPERIMENTAL)\n  if (dictionary->has_words_heavy) {\n    const BrotliTrieNode* node = &dictionary->trie.root;\n    size_t l = 0;\n    while (node && l < max_length) {\n      uint8_t c;\n      if (l >= min_length && node->len_) {\n        AddMatch(node->idx_, l, node->len_, matches);\n        has_found_match = BROTLI_TRUE;\n      }\n      c = data[l++];\n      node = BrotliTrieSub(&dictionary->trie, node, c);\n    }\n    return has_found_match;\n  }\n#endif  /* BROTLI_EXPERIMENTAL */\n  {\n    size_t offset = dictionary->buckets[Hash15(data)];\n    BROTLI_BOOL end = !offset;\n    while (!end) {\n      DictWord w = dictionary->dict_words[offset++];\n      const size_t l = w.len & 0x1F;\n      const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];\n      const size_t id = w.idx;\n      end = !!(w.len & 0x80);\n      w.len = (uint8_t)l;\n      if (w.transform == 0) {\n        const size_t matchlen =\n            DictMatchLength(dictionary->words, data, id, l, max_length);\n        const uint8_t* s;\n        size_t minlen;\n        size_t maxlen;\n        size_t len;\n        /* Transform \"\" + BROTLI_TRANSFORM_IDENTITY + \"\" */\n        if (matchlen == l) {\n          AddMatch(id, l, l, matches);\n          has_found_match = BROTLI_TRUE;\n        }\n        /* Transforms \"\" + BROTLI_TRANSFORM_OMIT_LAST_1 + \"\" and\n                      \"\" + BROTLI_TRANSFORM_OMIT_LAST_1 + \"ing \" */\n        if (matchlen >= l - 1) {\n          AddMatch(id + 12 * n, l - 1, l, matches);\n          if (l + 2 < max_length &&\n              data[l - 1] == 'i' && data[l] == 'n' && data[l + 1] == 'g' &&\n              data[l + 2] == ' ') {\n            AddMatch(id + 49 * n, l + 3, l, matches);\n          }\n          has_found_match = BROTLI_TRUE;\n        }\n        /* Transform \"\" + BROTLI_TRANSFORM_OMIT_LAST_# + \"\" (# = 2 .. 9) */\n        minlen = min_length;\n        if (l > 9) minlen = BROTLI_MAX(size_t, minlen, l - 9);\n        maxlen = BROTLI_MIN(size_t, matchlen, l - 2);\n        for (len = minlen; len <= maxlen; ++len) {\n          size_t cut = l - len;\n          size_t transform_id = (cut << 2) +\n              (size_t)((dictionary->cutoffTransforms >> (cut * 6)) & 0x3F);\n          AddMatch(id + transform_id * n, len, l, matches);\n          has_found_match = BROTLI_TRUE;\n        }\n        if (matchlen < l || l + 6 >= max_length) {\n          continue;\n        }\n        s = &data[l];\n        /* Transforms \"\" + BROTLI_TRANSFORM_IDENTITY + <suffix> */\n        if (s[0] == ' ') {\n          AddMatch(id + n, l + 1, l, matches);\n          if (s[1] == 'a') {\n            if (s[2] == ' ') {\n              AddMatch(id + 28 * n, l + 3, l, matches);\n            } else if (s[2] == 's') {\n              if (s[3] == ' ') AddMatch(id + 46 * n, l + 4, l, matches);\n            } else if (s[2] == 't') {\n              if (s[3] == ' ') AddMatch(id + 60 * n, l + 4, l, matches);\n            } else if (s[2] == 'n') {\n              if (s[3] == 'd' && s[4] == ' ') {\n                AddMatch(id + 10 * n, l + 5, l, matches);\n              }\n            }\n          } else if (s[1] == 'b') {\n            if (s[2] == 'y' && s[3] == ' ') {\n              AddMatch(id + 38 * n, l + 4, l, matches);\n            }\n          } else if (s[1] == 'i') {\n            if (s[2] == 'n') {\n              if (s[3] == ' ') AddMatch(id + 16 * n, l + 4, l, matches);\n            } else if (s[2] == 's') {\n              if (s[3] == ' ') AddMatch(id + 47 * n, l + 4, l, matches);\n            }\n          } else if (s[1] == 'f') {\n            if (s[2] == 'o') {\n              if (s[3] == 'r' && s[4] == ' ') {\n                AddMatch(id + 25 * n, l + 5, l, matches);\n              }\n            } else if (s[2] == 'r') {\n              if (s[3] == 'o' && s[4] == 'm' && s[5] == ' ') {\n                AddMatch(id + 37 * n, l + 6, l, matches);\n              }\n            }\n          } else if (s[1] == 'o') {\n            if (s[2] == 'f') {\n              if (s[3] == ' ') AddMatch(id + 8 * n, l + 4, l, matches);\n            } else if (s[2] == 'n') {\n              if (s[3] == ' ') AddMatch(id + 45 * n, l + 4, l, matches);\n            }\n          } else if (s[1] == 'n') {\n            if (s[2] == 'o' && s[3] == 't' && s[4] == ' ') {\n              AddMatch(id + 80 * n, l + 5, l, matches);\n            }\n          } else if (s[1] == 't') {\n            if (s[2] == 'h') {\n              if (s[3] == 'e') {\n                if (s[4] == ' ') AddMatch(id + 5 * n, l + 5, l, matches);\n              } else if (s[3] == 'a') {\n                if (s[4] == 't' && s[5] == ' ') {\n                  AddMatch(id + 29 * n, l + 6, l, matches);\n                }\n              }\n            } else if (s[2] == 'o') {\n              if (s[3] == ' ') AddMatch(id + 17 * n, l + 4, l, matches);\n            }\n          } else if (s[1] == 'w') {\n            if (s[2] == 'i' && s[3] == 't' && s[4] == 'h' && s[5] == ' ') {\n              AddMatch(id + 35 * n, l + 6, l, matches);\n            }\n          }\n        } else if (s[0] == '\"') {\n          AddMatch(id + 19 * n, l + 1, l, matches);\n          if (s[1] == '>') {\n            AddMatch(id + 21 * n, l + 2, l, matches);\n          }\n        } else if (s[0] == '.') {\n          AddMatch(id + 20 * n, l + 1, l, matches);\n          if (s[1] == ' ') {\n            AddMatch(id + 31 * n, l + 2, l, matches);\n            if (s[2] == 'T' && s[3] == 'h') {\n              if (s[4] == 'e') {\n                if (s[5] == ' ') AddMatch(id + 43 * n, l + 6, l, matches);\n              } else if (s[4] == 'i') {\n                if (s[5] == 's' && s[6] == ' ') {\n                  AddMatch(id + 75 * n, l + 7, l, matches);\n                }\n              }\n            }\n          }\n        } else if (s[0] == ',') {\n          AddMatch(id + 76 * n, l + 1, l, matches);\n          if (s[1] == ' ') {\n            AddMatch(id + 14 * n, l + 2, l, matches);\n          }\n        } else if (s[0] == '\\n') {\n          AddMatch(id + 22 * n, l + 1, l, matches);\n          if (s[1] == '\\t') {\n            AddMatch(id + 50 * n, l + 2, l, matches);\n          }\n        } else if (s[0] == ']') {\n          AddMatch(id + 24 * n, l + 1, l, matches);\n        } else if (s[0] == '\\'') {\n          AddMatch(id + 36 * n, l + 1, l, matches);\n        } else if (s[0] == ':') {\n          AddMatch(id + 51 * n, l + 1, l, matches);\n        } else if (s[0] == '(') {\n          AddMatch(id + 57 * n, l + 1, l, matches);\n        } else if (s[0] == '=') {\n          if (s[1] == '\"') {\n            AddMatch(id + 70 * n, l + 2, l, matches);\n          } else if (s[1] == '\\'') {\n            AddMatch(id + 86 * n, l + 2, l, matches);\n          }\n        } else if (s[0] == 'a') {\n          if (s[1] == 'l' && s[2] == ' ') {\n            AddMatch(id + 84 * n, l + 3, l, matches);\n          }\n        } else if (s[0] == 'e') {\n          if (s[1] == 'd') {\n            if (s[2] == ' ') AddMatch(id + 53 * n, l + 3, l, matches);\n          } else if (s[1] == 'r') {\n            if (s[2] == ' ') AddMatch(id + 82 * n, l + 3, l, matches);\n          } else if (s[1] == 's') {\n            if (s[2] == 't' && s[3] == ' ') {\n              AddMatch(id + 95 * n, l + 4, l, matches);\n            }\n          }\n        } else if (s[0] == 'f') {\n          if (s[1] == 'u' && s[2] == 'l' && s[3] == ' ') {\n            AddMatch(id + 90 * n, l + 4, l, matches);\n          }\n        } else if (s[0] == 'i') {\n          if (s[1] == 'v') {\n            if (s[2] == 'e' && s[3] == ' ') {\n              AddMatch(id + 92 * n, l + 4, l, matches);\n            }\n          } else if (s[1] == 'z') {\n            if (s[2] == 'e' && s[3] == ' ') {\n              AddMatch(id + 100 * n, l + 4, l, matches);\n            }\n          }\n        } else if (s[0] == 'l') {\n          if (s[1] == 'e') {\n            if (s[2] == 's' && s[3] == 's' && s[4] == ' ') {\n              AddMatch(id + 93 * n, l + 5, l, matches);\n            }\n          } else if (s[1] == 'y') {\n            if (s[2] == ' ') AddMatch(id + 61 * n, l + 3, l, matches);\n          }\n        } else if (s[0] == 'o') {\n          if (s[1] == 'u' && s[2] == 's' && s[3] == ' ') {\n            AddMatch(id + 106 * n, l + 4, l, matches);\n          }\n        }\n      } else {\n        /* Set is_all_caps=0 for BROTLI_TRANSFORM_UPPERCASE_FIRST and\n               is_all_caps=1 otherwise (BROTLI_TRANSFORM_UPPERCASE_ALL)\n           transform. */\n        const BROTLI_BOOL is_all_caps =\n            TO_BROTLI_BOOL(w.transform != BROTLI_TRANSFORM_UPPERCASE_FIRST);\n        const uint8_t* s;\n        if (!IsMatch(dictionary->words, w, data, max_length)) {\n          continue;\n        }\n        /* Transform \"\" + kUppercase{First,All} + \"\" */\n        AddMatch(id + (is_all_caps ? 44 : 9) * n, l, l, matches);\n        has_found_match = BROTLI_TRUE;\n        if (l + 1 >= max_length) {\n          continue;\n        }\n        /* Transforms \"\" + kUppercase{First,All} + <suffix> */\n        s = &data[l];\n        if (s[0] == ' ') {\n          AddMatch(id + (is_all_caps ? 68 : 4) * n, l + 1, l, matches);\n        } else if (s[0] == '\"') {\n          AddMatch(id + (is_all_caps ? 87 : 66) * n, l + 1, l, matches);\n          if (s[1] == '>') {\n            AddMatch(id + (is_all_caps ? 97 : 69) * n, l + 2, l, matches);\n          }\n        } else if (s[0] == '.') {\n          AddMatch(id + (is_all_caps ? 101 : 79) * n, l + 1, l, matches);\n          if (s[1] == ' ') {\n            AddMatch(id + (is_all_caps ? 114 : 88) * n, l + 2, l, matches);\n          }\n        } else if (s[0] == ',') {\n          AddMatch(id + (is_all_caps ? 112 : 99) * n, l + 1, l, matches);\n          if (s[1] == ' ') {\n            AddMatch(id + (is_all_caps ? 107 : 58) * n, l + 2, l, matches);\n          }\n        } else if (s[0] == '\\'') {\n          AddMatch(id + (is_all_caps ? 94 : 74) * n, l + 1, l, matches);\n        } else if (s[0] == '(') {\n          AddMatch(id + (is_all_caps ? 113 : 78) * n, l + 1, l, matches);\n        } else if (s[0] == '=') {\n          if (s[1] == '\"') {\n            AddMatch(id + (is_all_caps ? 105 : 104) * n, l + 2, l, matches);\n          } else if (s[1] == '\\'') {\n            AddMatch(id + (is_all_caps ? 116 : 108) * n, l + 2, l, matches);\n          }\n        }\n      }\n    }\n  }\n  /* Transforms with prefixes \" \" and \".\" */\n  if (max_length >= 5 && (data[0] == ' ' || data[0] == '.')) {\n    BROTLI_BOOL is_space = TO_BROTLI_BOOL(data[0] == ' ');\n    size_t offset = dictionary->buckets[Hash15(&data[1])];\n    BROTLI_BOOL end = !offset;\n    while (!end) {\n      DictWord w = dictionary->dict_words[offset++];\n      const size_t l = w.len & 0x1F;\n      const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];\n      const size_t id = w.idx;\n      end = !!(w.len & 0x80);\n      w.len = (uint8_t)l;\n      if (w.transform == 0) {\n        const uint8_t* s;\n        if (!IsMatch(dictionary->words, w, &data[1], max_length - 1)) {\n          continue;\n        }\n        /* Transforms \" \" + BROTLI_TRANSFORM_IDENTITY + \"\" and\n                      \".\" + BROTLI_TRANSFORM_IDENTITY + \"\" */\n        AddMatch(id + (is_space ? 6 : 32) * n, l + 1, l, matches);\n        has_found_match = BROTLI_TRUE;\n        if (l + 2 >= max_length) {\n          continue;\n        }\n        /* Transforms \" \" + BROTLI_TRANSFORM_IDENTITY + <suffix> and\n                      \".\" + BROTLI_TRANSFORM_IDENTITY + <suffix>\n        */\n        s = &data[l + 1];\n        if (s[0] == ' ') {\n          AddMatch(id + (is_space ? 2 : 77) * n, l + 2, l, matches);\n        } else if (s[0] == '(') {\n          AddMatch(id + (is_space ? 89 : 67) * n, l + 2, l, matches);\n        } else if (is_space) {\n          if (s[0] == ',') {\n            AddMatch(id + 103 * n, l + 2, l, matches);\n            if (s[1] == ' ') {\n              AddMatch(id + 33 * n, l + 3, l, matches);\n            }\n          } else if (s[0] == '.') {\n            AddMatch(id + 71 * n, l + 2, l, matches);\n            if (s[1] == ' ') {\n              AddMatch(id + 52 * n, l + 3, l, matches);\n            }\n          } else if (s[0] == '=') {\n            if (s[1] == '\"') {\n              AddMatch(id + 81 * n, l + 3, l, matches);\n            } else if (s[1] == '\\'') {\n              AddMatch(id + 98 * n, l + 3, l, matches);\n            }\n          }\n        }\n      } else if (is_space) {\n        /* Set is_all_caps=0 for BROTLI_TRANSFORM_UPPERCASE_FIRST and\n               is_all_caps=1 otherwise (BROTLI_TRANSFORM_UPPERCASE_ALL)\n           transform. */\n        const BROTLI_BOOL is_all_caps =\n            TO_BROTLI_BOOL(w.transform != BROTLI_TRANSFORM_UPPERCASE_FIRST);\n        const uint8_t* s;\n        if (!IsMatch(dictionary->words, w, &data[1], max_length - 1)) {\n          continue;\n        }\n        /* Transforms \" \" + kUppercase{First,All} + \"\" */\n        AddMatch(id + (is_all_caps ? 85 : 30) * n, l + 1, l, matches);\n        has_found_match = BROTLI_TRUE;\n        if (l + 2 >= max_length) {\n          continue;\n        }\n        /* Transforms \" \" + kUppercase{First,All} + <suffix> */\n        s = &data[l + 1];\n        if (s[0] == ' ') {\n          AddMatch(id + (is_all_caps ? 83 : 15) * n, l + 2, l, matches);\n        } else if (s[0] == ',') {\n          if (!is_all_caps) {\n            AddMatch(id + 109 * n, l + 2, l, matches);\n          }\n          if (s[1] == ' ') {\n            AddMatch(id + (is_all_caps ? 111 : 65) * n, l + 3, l, matches);\n          }\n        } else if (s[0] == '.') {\n          AddMatch(id + (is_all_caps ? 115 : 96) * n, l + 2, l, matches);\n          if (s[1] == ' ') {\n            AddMatch(id + (is_all_caps ? 117 : 91) * n, l + 3, l, matches);\n          }\n        } else if (s[0] == '=') {\n          if (s[1] == '\"') {\n            AddMatch(id + (is_all_caps ? 110 : 118) * n, l + 3, l, matches);\n          } else if (s[1] == '\\'') {\n            AddMatch(id + (is_all_caps ? 119 : 120) * n, l + 3, l, matches);\n          }\n        }\n      }\n    }\n  }\n  if (max_length >= 6) {\n    /* Transforms with prefixes \"e \", \"s \", \", \" and \"\\xC2\\xA0\" */\n    if ((data[1] == ' ' &&\n         (data[0] == 'e' || data[0] == 's' || data[0] == ',')) ||\n        (data[0] == 0xC2 && data[1] == 0xA0)) {\n      size_t offset = dictionary->buckets[Hash15(&data[2])];\n      BROTLI_BOOL end = !offset;\n      while (!end) {\n        DictWord w = dictionary->dict_words[offset++];\n        const size_t l = w.len & 0x1F;\n        const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];\n        const size_t id = w.idx;\n        end = !!(w.len & 0x80);\n        w.len = (uint8_t)l;\n        if (w.transform == 0 &&\n            IsMatch(dictionary->words, w, &data[2], max_length - 2)) {\n          if (data[0] == 0xC2) {\n            AddMatch(id + 102 * n, l + 2, l, matches);\n            has_found_match = BROTLI_TRUE;\n          } else if (l + 2 < max_length && data[l + 2] == ' ') {\n            size_t t = data[0] == 'e' ? 18 : (data[0] == 's' ? 7 : 13);\n            AddMatch(id + t * n, l + 3, l, matches);\n            has_found_match = BROTLI_TRUE;\n          }\n        }\n      }\n    }\n  }\n  if (max_length >= 9) {\n    /* Transforms with prefixes \" the \" and \".com/\" */\n    if ((data[0] == ' ' && data[1] == 't' && data[2] == 'h' &&\n         data[3] == 'e' && data[4] == ' ') ||\n        (data[0] == '.' && data[1] == 'c' && data[2] == 'o' &&\n         data[3] == 'm' && data[4] == '/')) {\n      size_t offset = dictionary->buckets[Hash15(&data[5])];\n      BROTLI_BOOL end = !offset;\n      while (!end) {\n        DictWord w = dictionary->dict_words[offset++];\n        const size_t l = w.len & 0x1F;\n        const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];\n        const size_t id = w.idx;\n        end = !!(w.len & 0x80);\n        w.len = (uint8_t)l;\n        if (w.transform == 0 &&\n            IsMatch(dictionary->words, w, &data[5], max_length - 5)) {\n          AddMatch(id + (data[0] == ' ' ? 41 : 72) * n, l + 5, l, matches);\n          has_found_match = BROTLI_TRUE;\n          if (l + 5 < max_length) {\n            const uint8_t* s = &data[l + 5];\n            if (data[0] == ' ') {\n              if (l + 8 < max_length &&\n                  s[0] == ' ' && s[1] == 'o' && s[2] == 'f' && s[3] == ' ') {\n                AddMatch(id + 62 * n, l + 9, l, matches);\n                if (l + 12 < max_length &&\n                    s[4] == 't' && s[5] == 'h' && s[6] == 'e' && s[7] == ' ') {\n                  AddMatch(id + 73 * n, l + 13, l, matches);\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n  return has_found_match;\n}\n\n/* Finds matches for one or more dictionaries, if multiple are present\n   in the contextual dictionary */\nBROTLI_BOOL BrotliFindAllStaticDictionaryMatches(\n    const BrotliEncoderDictionary* dictionary, const uint8_t* data,\n    size_t min_length, size_t max_length, uint32_t* matches) {\n  BROTLI_BOOL has_found_match =\n      BrotliFindAllStaticDictionaryMatchesFor(\n          dictionary, data, min_length, max_length, matches);\n\n  if (!!dictionary->parent && dictionary->parent->num_dictionaries > 1) {\n    uint32_t matches2[BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1];\n    int l;\n    const BrotliEncoderDictionary* dictionary2 = dictionary->parent->dict[0];\n    if (dictionary2 == dictionary) {\n      dictionary2 = dictionary->parent->dict[1];\n    }\n\n    for (l = 0; l < BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1; l++) {\n      matches2[l] = kInvalidMatch;\n    }\n\n    has_found_match |= BrotliFindAllStaticDictionaryMatchesFor(\n        dictionary2, data, min_length, max_length, matches2);\n\n    for (l = 0; l < BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1; l++) {\n      if (matches2[l] != kInvalidMatch) {\n        uint32_t dist = (uint32_t)(matches2[l] >> 5);\n        uint32_t len_code = matches2[l] & 31;\n        uint32_t skipdist = (uint32_t)((uint32_t)(1 << dictionary->words->\n            size_bits_by_length[len_code]) & ~1u) *\n            (uint32_t)dictionary->num_transforms;\n        /* TODO(lode): check for dist overflow */\n        dist += skipdist;\n        AddMatch(dist, (size_t)l, len_code, matches);\n      }\n    }\n  }\n  return has_found_match;\n}\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/static_dict.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Class to model the static dictionary. */\n\n#ifndef BROTLI_ENC_STATIC_DICT_H_\n#define BROTLI_ENC_STATIC_DICT_H_\n\n#include \"../common/platform.h\"\n\n#include \"encoder_dict.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN 37\nstatic const uint32_t kInvalidMatch = 0xFFFFFFF;\n\n/* Matches data against static dictionary words, and for each length l,\n   for which a match is found, updates matches[l] to be the minimum possible\n     (distance << 5) + len_code.\n   Returns 1 if matches have been found, otherwise 0.\n   Prerequisites:\n     matches array is at least BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1 long\n     all elements are initialized to kInvalidMatch */\nBROTLI_INTERNAL BROTLI_BOOL BrotliFindAllStaticDictionaryMatches(\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* data, size_t min_length, size_t max_length,\n    uint32_t* matches);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_STATIC_DICT_H_ */\n"
  },
  {
    "path": "c/enc/static_dict_lut.c",
    "content": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Lookup table for static dictionary and transforms. */\n\n#include \"static_dict_lut.h\"\n\n#include \"../common/platform.h\"  /* IWYU pragma: keep */\n#include \"../common/static_init.h\"\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\n#include \"../common/dictionary.h\"\n#include \"../common/transform.h\"\n#include \"hash_base.h\"\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\n\n/* TODO(eustas): deal with largest bucket(s). Not it contains 163 items. */\nstatic BROTLI_BOOL BROTLI_COLD DoBrotliEncoderInitStaticDictionaryLut(\n    const BrotliDictionary* dict, uint16_t* buckets, DictWord* words,\n    void* arena) {\n  DictWord* slots = (DictWord*)arena;\n  uint16_t* heads = (uint16_t*)(slots + BROTLI_ENC_STATIC_DICT_LUT_NUM_ITEMS);\n  uint16_t* counts = heads + BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS;\n  uint16_t* prev = counts + BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS;\n  size_t next_slot = 0;\n  uint8_t transformed_word[24];\n  uint8_t transformed_other_word[24];\n  size_t l;\n  size_t pos;\n  size_t i;\n\n  memset(counts, 0, BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS * sizeof(uint16_t));\n  memset(heads, 0, BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS * sizeof(uint16_t));\n  memset(prev, 0, BROTLI_ENC_STATIC_DICT_LUT_NUM_ITEMS * sizeof(uint16_t));\n\n  for (l = 4; l <= 24; ++l) {\n    size_t n = 1u << dict->size_bits_by_length[l];\n    const uint8_t* dict_words = dict->data + dict->offsets_by_length[l];\n    for (i = 0; i < n; ++i) {\n      const uint8_t* dict_word = dict_words + l * i;\n      uint32_t key = Hash15(dict_word);\n      slots[next_slot].len = (uint8_t)l;\n      slots[next_slot].transform = BROTLI_TRANSFORM_IDENTITY;\n      slots[next_slot].idx = (uint16_t)i;\n      prev[next_slot] = heads[key];\n      heads[key] = (uint16_t)next_slot;\n      counts[key]++;\n      ++next_slot;\n    }\n    for (i = 0; i < n; ++i) {\n      uint32_t key;\n      uint32_t prefix;\n      BROTLI_BOOL found;\n      size_t curr;\n      const uint8_t* dict_word = dict_words + l * i;\n      if (dict_word[0] < 'a' || dict_word[0] > 'z') continue;\n      memcpy(transformed_word, dict_word, l);\n      transformed_word[0] = transformed_word[0] - 32;\n      key = Hash15(transformed_word);\n      prefix = BROTLI_UNALIGNED_LOAD32LE(transformed_word) & ~0x20202020u;\n      found = BROTLI_FALSE;\n      curr = heads[key];\n      while (curr != 0) {\n        const uint8_t* other_word;\n        uint32_t other_prefix;\n        if (slots[curr].len != l) break;\n        other_word = dict_words + l * slots[curr].idx;\n        other_prefix = BROTLI_UNALIGNED_LOAD32LE(other_word) & ~0x20202020u;\n        if (prefix == other_prefix) {\n          if (memcmp(transformed_word, other_word, l) == 0) {\n            found = BROTLI_TRUE;\n            break;\n          }\n        }\n        curr = prev[curr];\n      }\n      if (found) continue;\n      slots[next_slot].len = (uint8_t)l;\n      slots[next_slot].transform = BROTLI_TRANSFORM_UPPERCASE_FIRST;\n      slots[next_slot].idx = (uint16_t)i;\n      prev[next_slot] = heads[key];\n      heads[key] = (uint16_t)next_slot;\n      counts[key]++;\n      ++next_slot;\n    }\n    for (i = 0; i < n; ++i) {\n      const uint8_t* dict_word = dict_words + l * i;\n      BROTLI_BOOL is_ascii = BROTLI_TRUE;\n      BROTLI_BOOL has_lower = BROTLI_FALSE;\n      size_t k;\n      uint32_t prefix;\n      uint32_t key;\n      size_t curr;\n      BROTLI_BOOL found;\n      for (k = 0; k < l; ++k) {\n        if (dict_word[k] >= 128) is_ascii = BROTLI_FALSE;\n        if (k > 0 && dict_word[k] >= 'a' && dict_word[k] <= 'z')\n          has_lower = BROTLI_TRUE;\n      }\n      if (!is_ascii || !has_lower) continue;\n      memcpy(transformed_word, dict_word, l);\n      prefix = BROTLI_UNALIGNED_LOAD32LE(transformed_word) & ~0x20202020u;\n      for (k = 0; k < l; ++k) {\n        if (transformed_word[k] >= 'a' && transformed_word[k] <= 'z') {\n          transformed_word[k] = transformed_word[k] - 32;\n        }\n      }\n      key = Hash15(transformed_word);\n      found = BROTLI_FALSE;\n      curr = heads[key];\n      while (curr != 0) {\n        const uint8_t* other_word;\n        uint32_t other_prefix;\n        if (slots[curr].len != l) break;\n        other_word = dict_words + l * slots[curr].idx;\n        other_prefix = BROTLI_UNALIGNED_LOAD32LE(other_word) & ~0x20202020u;\n        if (prefix == other_prefix) {\n          if (slots[curr].transform == BROTLI_TRANSFORM_IDENTITY) {\n            if (memcmp(transformed_word, other_word, l) == 0) {\n              found = BROTLI_TRUE;\n              break;\n            }\n          } else if (slots[curr].transform ==\n                     BROTLI_TRANSFORM_UPPERCASE_FIRST) {\n            if ((transformed_word[0] == (other_word[0] - 32)) &&\n                memcmp(transformed_word + 1, other_word + 1, l - 1) == 0) {\n              found = BROTLI_TRUE;\n              break;\n            }\n          } else {\n            for (k = 0; k < l; ++k) {\n              if (other_word[k] >= 'a' && other_word[k] <= 'z') {\n                transformed_other_word[k] = other_word[k] - 32;\n              } else {\n                transformed_other_word[k] = other_word[k];\n              }\n            }\n            if (memcmp(transformed_word, transformed_other_word, l) == 0) {\n              found = BROTLI_TRUE;\n              break;\n            }\n          }\n        }\n        curr = prev[curr];\n      }\n      if (found) {\n        continue;\n      }\n      slots[next_slot].len = (uint8_t)l;\n      slots[next_slot].transform = BROTLI_TRANSFORM_UPPERCASE_ALL;\n      slots[next_slot].idx = (uint16_t)i;\n      prev[next_slot] = heads[key];\n      heads[key] = (uint16_t)next_slot;\n      counts[key]++;\n      ++next_slot;\n    }\n  }\n\n  if (next_slot != 31704) return BROTLI_FALSE;\n  pos = 0;\n  /* Unused; makes offsets start from 1. */\n  words[pos].len = 0;\n  words[pos].transform = 0;\n  words[pos].idx = 0;\n  pos++;\n  for (i = 0; i < BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS; ++i) {\n    size_t num_words = counts[i];\n    size_t curr;\n    if (num_words == 0) {\n      buckets[i] = 0;\n      continue;\n    }\n    buckets[i] = (uint16_t)pos;\n    curr = heads[i];\n    pos += num_words;\n    for (size_t k = 0; k < num_words; ++k) {\n      words[pos - 1 - k] = slots[curr];\n      curr = prev[curr];\n    }\n    words[pos - 1].len |= 0x80;\n  }\n  return BROTLI_TRUE;\n}\n\nBROTLI_BOOL BrotliEncoderInitStaticDictionaryLut(\n    const BrotliDictionary* dict, uint16_t* buckets, DictWord* words) {\n  size_t arena_size =\n      BROTLI_ENC_STATIC_DICT_LUT_NUM_ITEMS *\n          (sizeof(uint16_t) + sizeof(DictWord)) +\n      BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS * 2 * sizeof(uint16_t);\n  void* arena = malloc(arena_size);\n  BROTLI_BOOL ok;\n  if (arena == NULL) {\n    return BROTLI_FALSE;\n  }\n  ok = DoBrotliEncoderInitStaticDictionaryLut(dict, buckets, words, arena);\n  free(arena);\n  return ok;\n}\n\nBROTLI_MODEL(\"small\")\nuint16_t kStaticDictionaryBuckets[BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS];\nBROTLI_MODEL(\"small\")\nDictWord kStaticDictionaryWords[BROTLI_ENC_STATIC_DICT_LUT_NUM_ITEMS];\n\n#else  /* BROTLI_STATIC_INIT */\n\n/* Embed kStaticDictionaryBuckets and kStaticDictionaryWords. */\n#include \"static_dict_lut_inc.h\"\n\n#endif  /* BROTLI_STATIC_INIT */\n\n#if defined(__cplusplus) || defined(c_plusplus)\n} /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/static_dict_lut.h",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Lookup table for static dictionary and transforms. */\n\n#ifndef BROTLI_ENC_STATIC_DICT_LUT_H_\n#define BROTLI_ENC_STATIC_DICT_LUT_H_\n\n#include \"../common/dictionary.h\"\n#include \"../common/platform.h\"\n#include \"../common/static_init.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\ntypedef struct DictWord {\n  /* Highest bit is used to indicate end of bucket. */\n  uint8_t len;\n  uint8_t transform;\n  uint16_t idx;\n} DictWord;\n\n/* Buckets are Hash15 results. */\n#define BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS 32768\n#define BROTLI_ENC_STATIC_DICT_LUT_NUM_ITEMS 31705\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\nBROTLI_INTERNAL BROTLI_BOOL BrotliEncoderInitStaticDictionaryLut(\n    const BrotliDictionary* dictionary, uint16_t* buckets, DictWord* words);\nBROTLI_INTERNAL extern BROTLI_MODEL(\"small\") uint16_t\n    kStaticDictionaryBuckets[BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS];\nBROTLI_INTERNAL extern BROTLI_MODEL(\"small\") DictWord\n    kStaticDictionaryWords[BROTLI_ENC_STATIC_DICT_LUT_NUM_ITEMS];\n#else\nBROTLI_INTERNAL extern const BROTLI_MODEL(\"small\") uint16_t\n    kStaticDictionaryBuckets[BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS];\nBROTLI_INTERNAL extern const BROTLI_MODEL(\"small\") DictWord\n    kStaticDictionaryWords[BROTLI_ENC_STATIC_DICT_LUT_NUM_ITEMS];\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_STATIC_DICT_LUT_H_ */\n"
  },
  {
    "path": "c/enc/static_dict_lut_inc.h",
    "content": "const BROTLI_MODEL(\"small\")\nuint16_t kStaticDictionaryBuckets[BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS] = {\n1,0,0,0,0,0,0,0,0,3,6,0,0,0,0,0,20,0,0,0,21,0,22,0,0,0,0,0,0,0,0,23,0,0,25,0,29,\n0,53,0,0,0,0,0,0,55,0,0,0,0,0,0,61,76,0,0,0,94,0,0,0,0,0,0,96,0,97,0,98,0,0,0,0,\n0,0,0,99,101,106,108,0,0,0,0,0,110,0,111,112,0,113,118,124,0,0,0,0,0,125,128,0,0\n,0,0,129,0,0,131,0,0,0,0,0,0,132,0,0,135,0,0,0,137,0,0,0,0,0,138,139,0,0,0,0,0,0\n,0,142,143,144,0,0,0,0,0,145,0,0,0,146,149,151,152,0,0,153,0,0,0,0,0,0,0,0,0,0,0\n,0,0,0,0,154,0,0,0,0,0,0,155,0,0,0,0,160,182,0,0,0,0,0,0,183,0,0,0,188,189,0,0,\n192,0,0,0,0,0,0,194,0,0,0,0,0,0,0,0,197,202,209,0,0,210,0,224,0,0,0,225,0,0,0,0,\n0,0,0,0,0,0,231,0,0,0,232,0,240,0,0,242,0,0,0,0,0,0,0,0,0,0,0,244,0,0,0,246,0,0,\n249,251,253,0,0,0,0,0,258,0,0,261,263,0,0,0,267,0,0,268,0,269,0,0,0,0,0,0,0,0,0,\n271,0,0,0,0,0,0,272,0,273,0,277,0,278,286,0,0,0,0,287,0,289,290,291,0,0,0,295,0,\n0,296,297,0,0,0,0,0,0,0,0,0,0,298,0,0,0,299,0,0,305,0,324,0,0,0,0,0,327,0,328,\n329,0,0,0,0,336,0,0,340,0,341,342,343,0,0,346,0,348,0,0,0,0,0,0,349,351,0,0,355,\n0,363,0,364,0,368,369,0,370,0,0,0,0,0,0,0,372,0,0,0,0,0,0,0,0,0,0,0,373,0,375,0,\n0,0,0,376,377,0,0,394,395,396,0,0,398,0,0,0,0,400,0,0,408,0,0,0,0,420,0,0,0,0,0,\n0,421,0,0,422,423,0,0,429,435,436,442,0,0,443,0,444,445,453,456,0,457,0,0,0,0,0,\n458,0,0,0,459,0,0,0,460,0,462,463,465,0,0,0,0,0,0,466,469,0,0,0,0,0,0,470,0,0,0,\n474,0,476,0,0,0,0,483,0,485,0,0,0,486,0,0,488,491,492,0,0,497,499,500,0,501,0,0,\n0,505,0,0,506,0,0,0,507,0,0,0,509,0,0,0,0,511,512,519,0,0,0,0,0,0,529,530,0,0,0,\n534,0,0,0,0,543,0,0,0,0,0,0,0,0,0,553,0,0,0,0,557,560,0,0,0,0,0,0,561,0,564,0,0,\n0,0,0,0,565,566,0,575,0,619,0,620,0,0,623,624,0,0,0,625,0,0,626,627,0,0,628,0,0,\n0,0,630,0,631,0,0,0,0,0,0,0,0,0,641,0,0,0,0,643,656,668,0,0,0,673,0,0,0,674,0,0,\n0,0,0,0,0,0,682,0,687,0,690,0,693,699,700,0,0,0,0,0,0,704,705,0,0,0,0,707,710,0,\n711,0,0,0,0,726,0,0,729,0,0,0,730,731,0,0,0,0,0,752,0,0,0,762,0,763,0,0,767,0,0,\n0,770,774,0,0,775,0,0,0,0,0,0,0,0,0,0,776,0,0,0,777,783,0,0,0,785,788,0,0,0,0,\n790,0,0,0,793,0,0,0,0,794,0,0,804,819,821,0,827,0,0,0,834,0,0,835,0,0,0,841,0,\n844,0,850,851,859,0,860,0,0,0,0,0,0,0,874,0,876,0,877,890,0,0,0,0,0,0,0,0,893,\n894,898,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,899,0,0,0,900,904,906,0,0,0,907,0,908,909,\n0,910,0,0,0,0,911,0,0,0,0,0,916,0,0,0,922,925,0,930,0,934,0,0,0,0,0,943,0,0,944,\n0,953,954,0,0,0,0,0,0,955,0,962,963,0,0,976,0,0,977,978,979,980,0,981,0,0,0,0,\n984,0,0,985,0,0,987,989,991,0,0,0,0,0,0,0,0,0,992,0,0,0,993,0,0,0,0,0,0,996,0,0,\n0,1000,0,0,0,0,0,1002,0,0,0,0,1005,1007,0,0,0,1009,0,0,0,1010,0,0,0,0,0,0,1011,0\n,1012,0,0,0,0,1014,1016,0,0,0,1020,0,1021,0,0,0,0,1022,0,0,0,1024,0,0,0,0,0,0,\n1025,0,0,1026,1027,0,0,0,0,0,1031,0,1033,0,0,0,0,1034,0,0,0,1037,1040,0,0,0,1042\n,1043,0,0,1053,0,1054,0,0,1057,0,0,0,1058,0,0,1060,0,0,0,0,0,0,0,1061,0,0,1062,0\n,0,0,0,1063,0,0,0,0,1064,0,0,0,0,0,1065,0,0,0,0,1066,1067,0,0,0,1069,1070,1072,0\n,0,0,0,0,0,1073,0,1075,0,0,0,0,0,0,1080,1084,0,0,0,0,1088,0,0,0,0,0,0,1094,0,\n1095,0,1107,0,0,0,1112,1114,0,1119,0,1122,0,0,1126,0,1129,0,1130,0,0,0,0,0,1132,\n0,0,0,0,0,0,1144,0,0,1145,1146,0,1148,1149,0,0,1150,1151,0,0,0,0,1152,0,1153,0,0\n,0,0,0,1154,0,1163,0,0,0,1164,0,0,0,0,0,1165,0,1167,0,1170,0,0,0,0,0,1171,1172,0\n,0,0,0,0,0,0,0,1173,1175,1177,0,1186,0,0,0,0,0,0,0,0,0,0,1195,0,0,1221,0,0,1224,\n0,0,1227,0,0,0,0,0,1228,1229,0,0,1230,0,0,0,0,0,0,0,0,0,1231,0,0,0,1233,0,0,1243\n,1244,1246,1248,0,0,0,0,1254,1255,1258,1259,0,0,0,1260,0,0,1261,0,0,0,1262,1264,\n0,0,1265,0,0,0,0,0,0,0,0,0,0,0,0,1266,0,1267,0,0,0,0,1273,1274,1276,1289,0,0,\n1291,1292,1293,0,0,1294,1295,1296,0,0,0,0,1302,0,1304,0,0,0,0,0,0,0,0,0,1311,\n1312,0,1314,0,1316,1320,1321,0,0,0,0,0,0,0,1322,1323,1324,0,1335,0,1336,0,0,0,0,\n1341,1342,0,1346,0,1357,0,0,0,1358,1360,0,0,0,0,0,0,1361,0,0,0,1362,1365,0,1366,\n0,0,0,0,0,0,0,1379,0,0,0,0,0,0,0,0,0,0,0,0,1386,0,1388,0,0,0,0,0,0,0,0,0,0,0,0,0\n,0,1395,0,0,0,0,1403,0,1405,0,0,1407,0,0,0,0,0,1408,1409,0,1410,0,0,0,1412,1413,\n1416,0,0,1429,1451,0,0,1454,0,0,0,0,0,0,0,1455,0,0,0,0,0,0,0,1456,0,0,0,0,1459,\n1460,1461,1475,0,0,0,0,0,0,1477,0,1480,0,1481,0,0,1486,0,0,1495,0,0,0,1496,0,0,\n1498,1499,1501,1520,1521,0,0,0,1526,0,0,0,0,1528,1529,0,1533,1536,0,0,0,1537,\n1538,1549,0,1550,1558,1559,1572,0,1573,0,0,0,0,0,0,0,0,0,1575,0,0,0,0,0,1579,0,\n1599,0,1603,0,1604,0,1605,0,0,0,0,0,1608,1610,0,0,0,0,1611,0,1615,0,1616,1618,0,\n1619,0,0,1622,0,0,0,0,1634,0,0,0,1635,0,0,0,1641,0,0,0,0,0,0,0,0,0,1643,0,0,0,\n1650,0,0,1652,0,0,0,0,0,1653,0,0,0,1654,0,0,0,0,1655,0,1662,0,0,1663,1664,0,0,\n1668,0,0,1669,1670,0,1672,1673,0,0,0,0,0,1674,0,0,0,1675,1676,1680,0,1682,0,0,\n1687,0,0,0,0,0,1704,0,0,1705,0,0,1721,0,0,0,0,1734,1735,0,0,0,0,1737,0,0,0,0,\n1739,0,0,1740,0,0,0,0,0,0,0,0,0,0,1741,1743,0,0,0,0,1745,0,0,0,1749,0,0,0,1751,0\n,0,0,0,0,0,1760,0,0,0,0,1765,0,0,0,0,0,1784,0,1785,1787,0,0,0,0,1788,1789,0,0,0,\n0,1790,1791,1793,0,1798,1799,0,0,0,0,1801,0,1803,1805,0,0,0,1806,1811,0,1812,\n1814,0,1821,0,0,0,0,0,1822,1833,0,0,0,0,0,0,1848,0,0,0,0,0,0,1857,0,0,0,1859,0,0\n,0,0,1861,0,0,0,0,0,0,0,1866,0,1921,1925,0,0,0,1929,1930,0,0,0,0,0,0,0,0,0,1931,\n0,0,0,0,1932,0,0,0,1934,0,0,0,0,0,0,0,0,1946,0,0,1948,0,0,0,0,1950,0,1957,0,1958\n,0,0,0,0,0,1965,1967,0,0,0,0,1968,0,1969,0,1971,1972,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n,0,1973,0,0,0,0,1975,0,0,0,0,1976,1979,0,1982,0,0,0,0,1984,1988,0,0,0,0,1990,\n2004,2008,0,0,0,2012,2013,0,0,0,0,0,0,0,0,0,0,2015,0,2016,2017,0,0,0,0,2021,0,0,\n2025,0,0,0,0,0,2029,2036,2040,0,2042,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2043,0,0,0,0,0,\n2045,0,0,0,0,0,0,0,2046,2047,0,2048,2049,0,2059,0,0,2063,0,2064,2065,0,0,2066,0,\n0,0,0,0,0,2069,0,0,0,0,2070,0,2071,0,2072,0,0,0,0,2080,2082,2083,0,0,0,0,0,2085,\n0,2086,2088,2089,2105,0,0,0,0,2107,0,0,2116,2117,0,2120,0,0,2122,0,0,0,0,0,2123,\n0,0,2125,2127,2128,0,0,0,2130,0,0,0,2137,2139,2140,2141,0,0,0,0,0,0,0,0,0,2144,\n2145,0,0,2146,2149,0,0,0,0,2150,0,0,2151,2158,0,2159,0,2160,0,0,0,0,0,0,2161,\n2162,0,0,2194,2202,0,0,0,0,0,0,2205,2217,0,2220,0,2221,0,2222,2224,0,0,0,0,2237,\n0,0,0,0,0,2238,0,2239,2241,0,0,2242,0,0,0,0,0,2243,0,0,0,0,0,0,2252,0,0,2253,0,0\n,0,2257,2258,0,0,0,2260,0,0,0,0,0,0,0,2262,0,2264,0,0,0,0,0,2269,2270,0,0,0,0,0,\n0,0,0,0,2271,0,2273,0,0,0,0,2277,0,0,0,0,2278,0,0,0,0,2279,0,2280,0,2283,0,0,0,0\n,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2287,0,0,0,0,0,0,0,2289,2290,0,0,0,0,2291,0,2292,0,\n0,0,2293,2295,2296,0,0,0,0,0,0,0,2298,0,0,0,0,0,2303,0,2305,0,0,2306,0,2307,0,0,\n0,0,0,0,0,0,0,0,0,0,2313,2314,2315,2316,0,0,2318,0,2319,0,2322,0,0,2323,0,2324,0\n,2326,0,0,0,0,0,0,0,2335,0,2336,2338,2339,0,2340,0,0,0,2355,0,2375,0,2382,2386,0\n,2387,0,0,2394,0,0,0,0,2395,0,2397,0,0,0,0,0,2398,0,0,0,0,0,0,0,2399,2402,2404,\n2408,2411,0,0,0,2413,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2415,0,0,2416,2417,2419,0,2420,\n0,0,0,0,0,2425,0,0,0,2426,0,0,0,0,0,0,0,0,0,0,0,0,2427,2428,0,2429,0,0,2430,2434\n,0,2436,0,0,0,0,0,0,2441,2442,0,2445,0,0,2446,2457,0,2459,0,0,2462,0,2464,0,2477\n,0,2478,2486,0,0,0,2491,0,0,2493,0,0,2494,0,2495,0,2513,2523,0,0,0,0,2524,0,0,0,\n0,0,0,2528,2529,2530,0,0,2531,0,2533,0,0,2534,2535,0,2536,2537,0,2538,0,2539,\n2540,0,0,0,2545,2546,0,0,0,0,0,0,0,2548,0,0,2549,0,2550,2555,0,0,0,0,0,2557,0,\n2560,0,0,0,0,0,0,0,0,0,0,0,2561,0,2576,0,0,0,0,0,0,0,0,0,2577,2578,0,0,0,2579,0,\n0,0,0,0,0,0,2580,0,0,0,0,2581,0,0,0,0,2583,0,2584,0,2588,2590,0,0,0,2591,0,0,0,0\n,2593,2594,0,2595,0,2601,2602,0,0,2603,0,2605,0,0,0,2606,2607,2611,0,2615,0,0,0,\n2617,0,0,0,0,0,0,0,0,0,0,0,0,0,2619,0,0,2620,0,0,0,2621,0,2623,0,2625,0,0,2628,\n2629,0,0,2635,2636,2637,0,0,2639,0,0,0,2642,0,0,0,0,2643,0,2644,0,2649,0,0,0,0,0\n,0,2655,2656,0,0,2657,0,0,0,0,0,2658,0,0,0,0,0,2659,0,0,0,0,2664,2685,0,2687,0,\n2688,0,0,2689,0,0,2694,0,2695,0,0,2698,0,2701,2706,0,0,0,2707,0,2709,2710,2711,0\n,0,0,2720,2730,2735,0,0,0,0,2738,2740,0,0,0,0,2747,0,0,0,0,0,0,2748,0,0,2749,0,0\n,0,0,0,2750,0,0,2752,2754,0,0,0,0,0,2758,0,0,0,0,2762,0,0,0,0,2763,0,0,0,0,0,0,0\n,2764,2767,0,0,0,0,2768,0,0,2770,0,0,0,0,0,0,0,2771,0,0,0,0,0,0,0,0,0,2772,0,0,0\n,0,0,2773,2776,0,0,2783,0,0,2784,0,2789,0,2790,0,0,0,2792,0,0,0,0,0,0,0,0,0,0,\n2793,2795,0,0,0,0,0,0,2796,0,0,0,0,0,0,2797,2799,0,0,0,0,2803,0,0,0,0,2806,0,\n2807,2808,2817,2819,0,0,0,0,0,2821,0,0,0,0,2822,2823,0,0,0,0,0,0,0,2824,0,0,2828\n,0,2834,0,0,0,0,0,0,2836,0,2838,0,0,2839,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2841,\n0,0,0,2842,0,0,0,0,0,2843,2844,0,0,0,0,2846,0,0,2847,0,2849,0,2853,0,0,0,0,0,\n2857,0,0,0,0,2858,0,2859,0,0,2860,0,2862,2868,0,0,0,0,2875,0,2876,0,0,2877,2878,\n2884,2889,2890,0,0,2891,0,0,2892,0,0,0,2906,2912,0,2913,0,0,0,0,0,0,0,0,2916,0,\n2934,0,0,0,0,0,2935,0,0,0,0,2939,0,2940,0,0,0,0,0,0,0,2941,0,0,0,2946,0,2949,0,0\n,2950,2954,2955,0,0,0,2959,2961,0,0,2962,0,2963,0,0,0,0,0,0,2964,2965,2966,2967,\n0,0,0,0,0,0,0,2969,0,0,0,0,0,2970,2975,0,2982,2983,2984,0,0,0,0,0,2989,0,0,2990,\n0,0,0,0,0,0,0,2991,0,0,0,0,0,0,0,0,2998,0,3000,3001,0,0,3002,0,0,0,3003,0,0,3012\n,0,0,3022,0,0,3024,0,0,3025,3027,0,0,0,3030,0,0,0,0,3034,3035,0,0,3036,0,3039,0,\n3049,0,0,3050,0,0,0,0,0,0,3051,0,3053,0,0,0,0,3057,0,3058,0,0,0,0,0,0,0,0,3063,0\n,0,3073,3074,3078,3079,0,3080,3086,0,0,0,0,0,0,0,0,3087,0,3092,0,3095,0,3099,0,0\n,0,3100,0,3101,3102,0,3122,0,0,0,3124,0,3125,0,0,0,0,0,0,3132,3134,0,0,3136,0,0,\n0,0,0,0,0,3147,0,0,3149,0,0,0,0,0,3150,3151,3152,0,0,0,0,3158,0,0,3160,0,0,3161,\n0,0,3162,0,3163,3166,3168,0,0,3169,3170,0,0,3171,0,0,0,0,0,0,0,3182,0,3184,0,0,\n3188,0,0,3194,0,0,0,0,0,0,3204,0,0,0,0,3209,0,0,0,0,0,0,0,0,0,0,0,3216,3217,0,0,\n0,0,0,0,0,3219,0,0,3220,3222,0,3223,0,0,0,0,3224,0,3225,3226,0,3228,3233,0,3239,\n3241,3242,0,0,3251,3252,3253,3255,0,0,0,0,0,0,0,0,3260,0,0,3261,0,0,0,3267,0,0,0\n,0,0,0,0,0,3271,0,0,0,3278,0,3282,0,0,0,3284,0,0,0,3285,3286,0,0,0,0,0,0,0,3287,\n3292,0,0,0,0,3294,3296,0,0,3299,3300,3301,0,3302,0,0,0,0,0,3304,3306,0,0,0,0,0,0\n,3308,0,0,0,0,0,0,0,0,0,3311,0,0,0,0,0,0,0,0,3312,3314,3315,0,3318,0,0,0,0,0,0,0\n,0,3319,0,0,0,0,0,3321,0,0,0,0,0,0,0,0,0,3322,0,0,3324,3325,0,0,3326,0,0,3328,\n3329,3331,0,0,3335,0,0,3337,0,3338,0,0,0,0,3343,3347,0,0,0,3348,0,0,3351,0,0,0,0\n,0,0,3354,0,0,0,0,0,0,0,0,0,0,3355,0,0,3365,3366,3367,0,0,0,0,0,0,3368,3369,0,\n3370,0,0,3373,0,0,3376,0,0,3377,0,3379,3387,0,0,0,0,0,3390,0,0,0,0,0,0,0,3402,0,\n3403,3436,3437,3439,0,0,3441,0,0,0,3442,0,0,3449,0,0,0,3450,0,0,0,0,0,0,0,3451,0\n,0,3452,0,3453,3456,0,3457,0,0,3458,0,3459,0,0,0,0,0,0,0,0,0,3460,0,0,3469,3470,\n0,0,3475,0,0,0,3480,3487,3489,0,3490,0,0,3491,3499,0,3500,0,0,3501,0,0,0,3502,0,\n3514,0,0,0,3516,3517,0,0,0,3518,0,0,0,0,3520,3521,3522,0,0,3526,3530,0,0,0,0,\n3531,0,0,0,0,3536,0,0,0,0,0,0,0,3539,3541,0,0,3542,3544,0,3547,3548,0,0,3550,0,\n3553,0,0,0,0,0,0,0,3554,0,3555,0,3558,0,3559,0,0,0,0,0,0,0,0,3563,0,3581,0,0,0,\n3599,0,0,0,3600,0,3601,0,3602,3603,0,0,3606,3608,0,3610,3611,0,0,0,0,0,0,0,0,0,\n3612,3616,3619,0,0,0,0,0,0,0,0,0,0,0,0,0,3624,3628,0,3629,3634,3635,0,0,0,0,0,0,\n3636,0,3637,0,0,3638,3651,0,0,0,0,0,0,3652,3653,0,0,0,0,3656,3657,0,0,0,0,0,3658\n,0,0,0,0,3659,0,3661,3663,3664,0,3665,0,3692,0,0,0,3694,3696,0,0,0,0,0,0,0,0,0,0\n,0,0,3698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3700,0,0,3701,0,0,0,3708,3709,0,0,0,3711\n,3712,0,0,0,0,0,3723,0,3724,3725,0,0,3726,0,0,0,0,0,0,3728,3729,0,3734,3735,3737\n,0,0,0,3743,0,3745,0,0,3746,0,0,3747,3748,0,3757,0,3759,3766,3767,0,3768,0,0,0,0\n,3769,0,0,3771,0,3774,0,0,0,0,0,0,3775,0,0,0,0,0,0,3776,0,3777,3786,0,3788,3789,\n0,0,0,0,0,0,0,0,0,3791,0,3811,0,0,0,0,0,3814,3815,3816,3820,0,0,0,0,0,0,0,3821,0\n,0,3825,0,0,0,0,3835,0,0,3848,3849,0,0,0,0,3850,3851,3853,0,0,0,0,3859,0,3860,\n3862,0,0,0,0,0,3863,0,0,0,0,0,0,0,0,3873,0,3874,0,3875,3886,0,3887,0,0,0,0,3892,\n3913,0,3914,0,0,0,3925,3931,0,0,0,0,3934,3941,3942,0,0,0,0,3943,0,0,0,3944,0,0,0\n,0,0,3945,0,3947,0,0,0,3956,3957,0,0,0,0,0,0,0,0,0,3958,0,3959,3965,0,0,0,0,3966\n,0,0,0,3967,0,0,0,3968,3974,0,0,0,0,0,3975,3977,3978,0,0,0,0,3980,0,3985,0,0,0,0\n,0,0,0,0,3986,4011,0,0,4017,0,0,0,0,0,0,0,0,0,0,0,4018,0,0,0,0,4019,0,4023,0,0,0\n,4027,4028,0,0,0,0,0,0,0,0,4031,4034,0,0,4035,4037,4039,4040,0,0,0,0,0,4059,0,\n4060,4061,0,4062,4063,4066,0,0,4072,0,0,0,0,0,0,0,0,0,0,0,0,0,4088,0,0,0,0,0,\n4091,0,0,0,0,4094,4095,0,0,4096,0,0,0,0,0,4098,4099,0,0,0,4101,0,4104,0,0,0,4105\n,4108,0,4113,0,0,4115,4116,0,4126,0,0,4127,0,0,0,0,0,0,0,4128,4132,4133,0,4134,0\n,0,0,4137,0,0,4141,0,0,0,0,4144,4146,4147,0,0,0,0,4148,0,0,4311,0,0,0,4314,4329,\n0,4331,4332,0,4333,0,4334,0,0,0,4335,0,4336,0,0,0,4337,0,0,0,4342,4345,4346,4350\n,0,4351,4352,0,4354,4355,0,0,4364,0,0,0,0,4369,0,0,0,4373,0,4374,0,0,0,0,4377,0,\n0,0,0,4378,0,0,0,4380,0,0,0,4381,4382,0,0,0,0,0,0,0,4384,0,0,0,0,4385,0,0,0,4386\n,0,0,0,4391,4398,0,0,0,0,4407,4409,0,0,0,0,4410,0,0,4411,0,4414,4415,4418,0,4427\n,4428,4430,0,4431,0,4448,0,0,0,0,0,4449,0,0,0,4451,4452,0,4453,4454,0,4456,0,0,0\n,0,0,0,0,4459,0,4463,0,0,0,0,0,4466,0,4467,0,4469,0,0,0,0,0,0,0,0,0,0,0,0,0,4470\n,4471,0,4473,0,0,4475,0,0,0,0,4477,4478,0,0,0,4479,4481,0,4482,0,4484,0,0,0,0,0,\n0,0,4486,0,0,4488,0,0,4497,0,4508,0,0,4510,4511,0,4520,4523,0,4524,0,4525,0,4527\n,0,0,4528,0,0,0,0,4530,0,4531,0,0,4532,0,0,0,4533,0,0,0,0,0,4535,0,0,0,4536,0,0,\n0,0,0,4541,4543,4544,4545,4547,0,4548,0,0,0,0,4550,4551,0,4553,0,0,0,0,4562,0,0,\n4571,0,0,0,4574,0,0,0,4575,0,4576,0,4577,0,0,0,4581,0,0,0,0,0,4582,0,0,4586,0,0,\n0,4588,0,0,4597,0,4598,0,0,0,0,4616,4617,0,4618,0,0,0,0,4619,0,4620,0,0,4621,0,\n4624,0,0,0,0,0,4625,0,0,0,0,4657,0,4659,0,4667,0,0,0,4668,4670,0,4672,0,0,0,0,0,\n4673,4676,0,0,0,0,4687,0,0,0,0,4697,0,0,0,0,4699,0,4701,0,0,0,0,4702,0,0,4706,0,\n0,4713,0,0,0,4714,4715,4716,0,0,0,0,0,0,0,0,0,0,0,0,4717,0,0,4720,0,4721,4729,\n4735,0,0,0,4737,0,0,0,4739,0,0,0,4740,0,0,0,4741,0,0,0,0,0,4742,0,4745,4746,4747\n,0,0,0,0,0,0,0,0,4748,0,0,0,4749,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4751,\n4786,0,4787,0,4788,4796,0,0,4797,4798,0,4799,4806,4807,0,0,0,0,4809,4810,0,0,0,0\n,0,0,4811,0,0,0,0,0,4812,0,4813,0,0,4815,0,4821,4822,0,0,0,0,4823,0,0,0,0,0,0,0,\n0,0,0,4824,0,0,0,0,4826,0,0,0,4828,0,4829,0,0,0,4843,0,0,4847,0,4853,4855,4858,0\n,0,0,0,0,4859,0,4864,0,0,4879,0,0,0,0,4880,0,0,0,0,4881,0,4882,0,0,0,0,0,0,0,0,0\n,4883,0,0,0,0,4884,0,0,0,0,0,4886,4887,4888,4894,4896,0,4902,0,0,4905,0,0,4915,0\n,0,0,0,0,0,0,4916,4917,4919,4921,0,0,0,0,0,4926,0,0,0,0,4927,0,0,0,0,0,0,0,0,\n4929,0,4930,4931,0,4938,0,4952,0,4953,4957,4960,4964,0,0,0,0,0,0,0,5019,5020,\n5022,0,0,0,0,0,5023,0,0,0,5024,0,0,0,5025,0,0,0,0,5028,0,0,0,0,5029,5030,5031,0,\n5033,0,0,0,0,0,0,0,0,0,5034,5035,0,5036,0,0,5037,0,0,0,0,5038,0,0,5039,0,0,0,\n5041,5042,0,0,0,0,5044,5049,5054,0,5055,0,5057,0,0,0,5060,0,0,0,0,0,5063,0,5064,\n5065,0,5067,0,0,0,5068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5076,0,0,0,0,0,0,\n0,5077,0,0,5078,5080,0,0,5083,0,0,0,0,0,0,0,0,5085,0,0,0,0,0,0,5098,5099,5101,\n5105,5107,0,5108,0,5109,0,0,0,0,0,0,0,5110,0,0,0,0,0,5117,5118,0,5121,0,5122,0,0\n,5130,0,0,0,5137,0,0,0,5148,0,0,0,0,0,0,0,5151,5154,0,0,0,5155,0,0,5156,5159,\n5161,0,0,0,0,5162,0,0,0,0,5163,5164,0,5166,0,0,0,0,0,0,0,0,0,0,5167,0,0,0,5172,0\n,0,0,0,0,0,5178,5179,0,0,5190,0,0,5191,5192,5194,0,0,5198,5201,0,0,0,0,0,5203,0,\n5206,5209,0,0,0,0,0,0,5213,0,5214,5216,0,0,0,0,0,5217,0,0,0,0,0,0,0,0,5218,5219,\n0,5231,0,0,5244,5249,0,5254,0,5255,0,0,5257,0,0,0,0,0,5258,0,5260,5270,0,5277,0,\n0,0,0,0,0,5280,5281,5282,5283,0,0,0,0,0,5284,0,5285,0,0,0,0,0,5287,5288,0,0,0,0,\n0,0,0,0,0,0,5289,5291,0,0,5294,0,0,5295,0,0,0,0,0,0,0,5304,0,0,5306,5307,5308,0,\n5309,0,0,5310,0,0,0,0,5311,5312,0,5313,0,0,0,0,0,5316,0,0,0,5317,0,0,0,0,0,0,0,0\n,0,5325,0,0,0,0,0,0,5326,0,5327,5329,0,5332,0,0,0,0,5338,0,0,0,0,0,0,0,0,5340,0,\n0,5341,0,0,0,5342,0,5343,5344,0,0,5345,0,0,0,0,0,0,5347,5348,0,0,0,0,0,0,0,0,0,\n5349,0,5350,0,5354,0,0,0,0,5358,0,0,5359,0,0,5361,0,0,5365,0,5367,0,5373,0,0,0,\n5379,0,0,0,5380,0,0,0,5382,0,5384,0,0,0,0,0,0,5385,0,0,0,0,5387,0,0,0,0,0,0,5388\n,5390,5393,0,0,0,0,0,0,0,0,0,0,0,5396,0,0,0,0,5397,5402,0,0,0,0,0,5403,0,0,0,\n5404,5405,0,0,0,0,0,0,0,0,0,0,0,0,5406,0,0,0,0,5410,0,0,5411,0,5415,0,0,0,0,5416\n,5434,0,0,0,0,0,0,0,0,0,0,0,5438,0,5440,0,0,0,0,0,0,5441,5442,0,0,0,5443,5444,\n5447,0,0,5448,5449,5451,0,0,0,5456,5457,0,0,0,5459,0,0,0,5461,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,5464,0,5466,0,0,5467,0,5470,0,0,5473,0,0,5474,0,0,5476,0,0,0,0,0,0,0,0\n,0,0,0,5477,0,0,0,0,0,0,0,5484,0,0,5485,5486,0,0,0,0,0,5488,0,0,0,0,0,0,0,5489,0\n,0,0,0,0,5507,0,0,0,5510,0,5511,0,0,5512,0,0,0,5513,0,5515,0,0,5516,5517,0,5518,\n0,0,5522,0,0,0,0,0,5534,5535,0,0,5536,0,5538,0,0,5543,0,5544,0,0,5545,0,5547,0,\n5557,0,0,5558,0,5560,5567,0,0,0,0,5568,0,0,0,5571,5573,0,5574,0,5575,0,0,0,0,\n5577,0,0,5598,0,0,0,0,0,0,0,0,0,5600,5609,0,0,0,0,5610,0,0,5612,0,5624,0,5625,0,\n0,0,5629,0,5641,0,5642,5643,0,0,0,0,0,0,5651,0,0,0,5652,5653,0,5661,5662,5678,0,\n5679,0,0,0,0,5685,5686,0,0,0,0,0,5690,5692,0,5703,0,0,0,0,0,5706,0,0,0,0,5707,0,\n0,0,0,0,0,5708,0,0,5709,0,5710,0,0,0,5712,0,5733,0,5734,5735,0,0,5744,5751,0,0,0\n,0,0,0,0,0,0,0,0,0,5752,0,5754,0,0,0,0,0,0,5757,5758,0,5760,5761,0,0,0,0,5763,\n5764,5765,0,5766,0,5767,5768,0,5770,0,0,0,0,5776,5780,0,0,0,0,5782,0,0,0,0,5784,\n0,0,5788,0,0,0,0,0,0,0,0,0,0,0,5797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5799,0,0,5801,\n0,0,0,5811,0,0,0,0,0,0,5816,0,0,5827,0,0,0,0,0,0,0,0,5830,5831,0,0,5832,0,0,5833\n,0,5835,5844,5845,0,5846,0,0,0,0,0,5850,0,0,0,0,0,5852,0,5855,5857,0,0,5859,0,\n5861,0,0,5863,0,5865,0,0,0,5873,5875,0,0,0,5877,0,5879,0,0,0,5888,0,0,5889,5891,\n0,5894,0,0,0,0,0,0,5895,0,5897,0,0,0,0,0,0,5907,0,5911,0,0,5912,0,5913,5922,5924\n,0,5927,5928,0,0,0,0,5929,5930,0,5933,0,0,0,0,5949,0,0,5951,0,0,0,0,0,0,0,0,5953\n,0,0,5954,0,5959,5960,5961,0,5964,0,0,0,5976,5978,5987,5990,0,0,0,0,0,5991,0,\n5992,0,0,0,5994,5995,0,0,5996,0,0,6001,6003,0,0,0,0,6007,0,0,0,0,0,6008,0,0,6009\n,0,6010,0,0,0,6011,6015,0,6017,0,6019,0,6023,0,0,0,0,0,0,0,6025,0,0,0,0,0,0,0,0,\n0,0,6026,0,6030,0,0,6032,0,0,0,6033,6038,6040,0,0,0,6041,6045,0,0,6046,0,0,6053,\n0,0,6054,0,6055,0,0,0,0,0,0,6057,0,6063,0,0,0,6064,0,6066,6071,6072,0,0,0,0,0,0,\n6075,6076,0,0,6077,0,0,0,0,0,0,0,0,0,6078,6079,0,0,0,0,0,0,0,0,6080,0,6083,0,0,0\n,0,0,6084,0,0,6088,0,6089,0,0,6093,6105,0,0,6107,0,6110,0,0,0,6111,6125,6126,0,0\n,0,6129,0,0,0,0,6130,0,0,0,6131,6134,0,0,0,0,0,0,6142,0,0,0,0,0,6144,0,0,6146,\n6151,6153,0,6156,0,6163,0,6180,6181,0,0,0,0,0,6182,0,0,0,0,6184,6195,0,0,6206,0,\n6208,0,0,6212,6213,6214,0,6215,0,0,0,6228,0,0,0,6234,0,0,0,0,0,0,6235,6240,0,\n6242,6243,6244,0,6250,6255,0,0,0,0,0,6257,0,0,0,6258,6278,0,6284,0,0,0,6285,0,0,\n0,0,0,0,0,0,6286,0,0,0,6320,0,0,6322,6332,0,0,0,0,0,0,0,0,6334,0,0,0,0,0,0,0,\n6335,0,0,6337,0,6338,0,6339,6340,0,0,6356,6357,6369,0,0,0,6370,6371,6372,0,6373,\n0,0,0,0,0,6376,0,0,0,0,0,6382,6383,6384,0,0,0,0,6386,0,6389,6397,6400,6411,0,\n6414,0,0,0,0,0,0,0,6415,6416,0,0,0,0,0,0,6417,0,0,0,0,6418,0,0,0,0,0,0,0,6420,0,\n6421,6423,6425,0,6429,6430,0,6433,6438,0,0,0,0,0,0,0,0,0,0,6439,6440,0,0,6441,0,\n0,6444,0,0,0,0,6446,0,0,0,0,6447,6448,0,0,6450,0,0,0,6454,0,0,6455,0,6461,0,0,0,\n0,0,0,6462,0,0,6463,0,6464,0,6465,6467,0,0,0,6468,0,6479,6480,0,0,0,0,0,0,0,6481\n,0,0,6485,6487,0,0,0,0,0,0,6493,0,0,0,0,0,0,0,0,6494,6495,6496,0,0,0,0,0,6498,0,\n0,0,6507,6508,0,0,0,0,0,0,0,0,0,0,6511,6512,0,0,0,0,6513,0,0,0,6514,0,0,0,0,0,\n6516,0,0,6517,6518,0,0,0,6519,6520,6521,0,6523,0,0,0,0,6524,6528,0,6530,0,0,6532\n,0,6578,0,0,0,6583,0,6584,0,0,0,6587,0,0,0,6590,0,6591,0,0,0,0,0,6592,0,0,0,0,\n6593,6594,0,0,0,0,0,6599,6600,0,0,6601,6602,6604,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n6608,0,0,0,0,0,0,0,0,6610,6611,0,6615,0,6616,6618,6620,0,6637,0,0,0,0,6639,0,0,0\n,0,6641,0,6642,0,0,0,6647,0,6660,6663,0,6664,0,6666,6669,0,6675,6676,6677,0,0,0,\n0,0,0,0,0,0,6678,0,0,0,6679,0,6680,0,0,0,0,0,0,0,6693,0,0,0,0,0,0,0,0,0,6704,\n6705,6706,0,0,6711,6713,0,0,0,0,0,6716,0,0,0,6717,0,6719,6724,0,0,0,0,0,0,0,0,\n6725,6726,0,0,0,0,0,6728,6729,6735,0,6737,6742,0,0,6743,6750,0,6751,0,0,6752,\n6753,0,0,0,0,0,0,6754,0,0,0,0,0,6756,0,0,0,0,0,0,6763,0,0,6764,6765,0,0,0,6770,0\n,0,0,6776,6780,0,6781,0,0,0,6783,0,6784,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n6785,0,0,0,6792,0,0,0,6793,0,0,6802,0,0,0,0,0,6803,0,0,0,6804,0,0,0,6812,0,0,\n6823,0,6824,6839,0,0,0,0,6852,0,0,6854,0,6856,6857,0,0,0,0,0,0,0,0,0,6867,0,6868\n,6870,6872,0,0,0,6873,6874,0,0,0,0,0,6875,0,0,6877,0,0,0,0,0,0,0,6878,0,0,0,6879\n,0,6880,0,0,0,0,0,0,0,0,0,0,6887,0,6888,6891,6893,0,6895,0,0,0,0,0,0,0,0,6899,0,\n0,0,0,6901,0,0,0,0,6910,0,6911,0,0,6912,0,0,6913,6914,0,0,0,6915,0,0,0,6916,6919\n,0,0,0,0,0,0,6924,0,6925,0,0,0,6926,6927,6928,0,6929,0,6930,0,0,6931,6935,0,6936\n,0,0,0,0,6939,6940,6941,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6942,6948,6949,0,0,0,0,0,0\n,0,6952,6954,6963,6965,6966,0,0,6967,6968,0,0,0,0,0,0,0,0,0,6969,0,0,6970,6979,0\n,0,6980,0,0,6983,0,0,0,0,0,6984,0,0,0,0,0,0,0,6988,6990,6992,0,0,0,0,0,0,0,6995,\n0,0,0,7012,0,0,0,0,0,0,0,0,0,7019,0,0,0,0,0,0,0,0,7021,0,0,7022,7023,7028,0,7030\n,7033,0,0,0,0,0,0,7038,0,0,0,0,0,0,0,0,0,0,7039,0,0,0,0,0,7046,0,7047,0,0,0,0,0,\n0,0,0,0,0,0,7048,7052,0,0,0,0,0,7054,0,7060,0,0,0,0,7061,0,7065,0,0,0,0,7067,\n7069,0,7070,7071,7072,0,0,7078,0,7080,7081,0,7083,0,0,0,7084,7087,7088,0,0,7090,\n0,7093,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7107,0,0,7108,0,0,0,0,0,0,0,0,7110,0,7114,0\n,0,0,0,0,0,0,7115,0,7116,0,0,0,0,0,7117,0,0,7118,0,0,7124,0,7125,0,0,7126,0,0,0,\n0,7128,0,0,0,0,0,7129,0,7130,0,7132,7133,0,0,7134,0,0,7139,0,7148,7150,0,0,0,0,\n7152,0,0,0,7153,7156,7157,0,0,0,0,0,7158,0,0,0,0,0,0,0,0,0,0,7163,7165,7169,0,\n7171,0,0,0,0,0,0,0,0,0,7172,0,7173,7181,0,0,0,0,0,7182,7185,0,0,0,0,7187,0,7201,\n7204,0,0,0,0,0,7206,7207,0,0,0,0,7211,7216,0,7218,0,0,0,0,7226,7228,7230,7232,\n7233,7235,7237,0,0,0,0,7238,7241,0,7242,0,0,7247,0,0,0,7266,0,0,0,0,0,0,0,7289,0\n,0,7290,7291,0,0,7292,0,7297,0,0,0,0,0,0,0,0,0,0,7300,0,7301,0,0,0,0,0,0,0,0,0,0\n,0,0,7302,0,0,0,0,7305,0,0,0,0,7307,0,7308,0,7310,0,7335,0,0,0,0,0,0,0,7337,0,\n7343,7347,0,0,0,0,0,7348,0,7349,7350,7352,7354,0,0,0,0,7357,0,7358,7366,0,7367,\n7368,0,0,7373,0,0,0,7374,0,0,0,0,0,0,0,7376,0,0,0,7377,0,0,0,0,0,7378,0,7379,\n7380,0,0,0,0,0,7383,0,0,7386,0,0,0,0,7398,0,0,0,7399,7400,0,7401,0,0,0,0,0,0,0,\n7402,0,0,0,0,0,7405,0,0,0,0,0,7406,0,0,0,0,0,0,0,0,7421,7427,7429,0,0,0,7435,0,0\n,7436,0,0,0,7437,0,0,0,0,0,0,7438,7443,0,7446,0,7448,0,0,0,0,0,0,0,0,0,0,7456,0,\n0,0,0,0,7457,0,0,7461,0,0,0,0,0,7462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7463,7466,7472,\n0,7476,0,0,7490,0,7491,0,0,7493,0,0,0,7498,7499,0,0,7508,0,0,0,0,0,7512,0,0,0,\n7513,7514,7516,0,0,0,0,7518,0,0,7519,7521,7522,0,0,0,7526,0,0,7529,0,0,7531,0,\n7536,0,7538,0,7539,0,0,7541,7542,7546,0,0,0,0,0,7547,0,7548,0,0,0,0,0,7550,0,0,\n7552,7553,0,0,0,0,0,0,0,0,0,0,7554,7563,0,7573,0,0,0,0,0,0,7574,7576,0,7578,7581\n,7583,0,0,0,7584,0,7587,0,0,0,0,0,7589,0,0,0,7594,0,0,7595,0,0,7600,7602,7610,0,\n0,0,0,0,7612,0,7613,7614,0,0,7615,0,0,7616,0,7620,0,7621,7622,0,7623,0,0,0,0,\n7626,0,0,0,0,7627,7629,7631,0,0,7633,0,0,0,0,0,7639,0,7640,7642,0,0,7643,0,0,0,0\n,7644,0,0,0,0,0,0,0,7645,0,0,0,0,0,7661,7662,7663,7665,0,7666,0,7667,0,7684,7688\n,7690,0,7691,0,0,0,0,0,0,7692,0,0,7700,0,7707,0,7708,0,7709,0,7721,0,0,0,7722,0,\n7724,0,0,0,0,0,0,7729,7731,0,7732,0,7733,7735,0,0,0,0,0,0,0,7739,0,0,7741,7745,0\n,7748,0,0,0,7751,0,0,0,7752,0,0,0,0,0,0,0,7753,0,0,7756,0,7757,0,7759,0,7760,0,0\n,0,0,7761,7768,0,0,7769,0,0,7770,0,0,7771,0,0,7772,0,0,7773,0,0,0,0,0,7778,7783,\n0,0,0,0,0,7784,7785,0,7790,0,0,0,0,7792,0,7798,0,0,0,0,0,7799,0,7810,0,0,7813,0,\n7814,0,7816,0,7818,7824,7825,7826,0,7828,7830,0,0,0,7840,0,7842,0,7843,0,0,0,0,\n7844,0,0,0,0,0,0,0,7846,0,0,0,0,0,7856,7857,7858,7862,0,7865,0,0,7866,0,0,7913,0\n,0,0,0,7914,0,0,7915,7917,7918,7919,0,7920,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7921,\n7922,0,7924,0,0,7925,0,0,7927,0,7930,7935,0,0,7937,0,0,0,0,0,0,7939,0,7940,0,0,0\n,0,0,7941,0,0,0,0,7945,0,0,0,0,7949,0,0,0,0,0,0,0,0,7950,0,7953,0,0,0,0,0,0,0,\n7968,0,0,0,0,7969,7972,7992,0,7993,0,0,0,0,0,0,0,0,0,0,0,7994,0,0,0,0,8007,8008,\n0,0,0,0,0,0,0,0,0,0,0,0,8010,0,0,0,8012,0,0,0,0,0,0,0,0,8018,0,8028,8029,0,0,\n8030,0,0,8032,8033,0,0,8034,8036,0,0,0,0,0,0,0,0,0,0,8037,0,0,0,8043,8052,8059,\n8060,0,0,8061,0,0,0,8062,0,8063,0,8064,0,8066,8068,0,0,0,8080,8081,0,8089,0,0,0,\n0,0,8092,0,0,0,0,0,0,8093,8110,0,0,0,0,0,0,0,8111,0,0,0,0,0,8112,8115,0,8117,0,0\n,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8120,8121,8122,8128,8129,8130,8131,0,0,8139,0,0,\n8144,0,0,0,0,8145,8146,8153,0,0,0,0,0,0,0,0,8154,0,8157,8160,8162,0,8164,8165,0,\n0,0,0,8166,8167,0,0,8179,0,0,0,8185,0,0,0,8186,0,0,8187,0,0,0,8188,0,0,0,0,0,\n8204,0,0,0,0,8210,0,0,0,0,0,8213,0,8214,0,0,8215,0,0,0,0,0,0,8218,0,0,0,0,0,0,0,\n0,0,8219,0,8221,0,0,8222,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8225,0,0,0,8233,0,0,\n8242,0,0,0,0,0,0,0,0,0,0,0,8247,0,8248,8252,0,8256,8257,0,0,8261,0,8264,8265,0,0\n,0,0,8267,0,0,0,8269,0,0,0,0,0,0,0,0,0,8270,0,0,0,8278,0,8279,8283,0,0,8285,8286\n,8289,8292,0,0,0,0,8293,8295,8299,8300,8301,0,0,0,0,0,0,8304,8307,0,0,0,0,0,0,0,\n8321,0,0,0,8322,8323,8325,8326,8327,0,0,8332,8338,0,0,8340,0,0,0,0,0,8350,0,0,\n8351,0,8354,8355,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8360,8372,0,0,0,0,0,0,0,0,8377,0,0,\n0,0,8380,0,0,0,8383,0,8384,0,0,0,0,8386,8392,0,0,8394,0,0,0,0,0,0,0,8396,8397,0,\n8398,0,8399,0,0,0,0,0,8400,0,8401,8410,8411,0,8412,8413,8422,0,0,0,0,8423,0,0,0,\n0,8424,0,0,8425,0,0,0,0,0,0,0,8441,8442,0,0,0,0,0,0,8443,0,0,8444,0,8447,0,0,0,0\n,8451,0,8458,0,8462,0,0,8468,0,8469,0,0,0,8470,0,8473,8479,8480,0,0,0,0,8481,\n8483,0,0,0,0,0,0,0,0,0,8484,0,0,8490,0,0,0,0,0,0,8491,8493,8494,0,8528,0,0,0,0,0\n,0,0,8530,0,0,0,0,0,0,0,0,8534,8538,8540,0,0,8541,0,0,8545,0,8557,0,0,8569,8570,\n0,0,8571,8574,8575,8579,0,8583,0,0,0,0,8591,0,0,0,0,0,0,0,0,8606,0,8607,0,0,0,0,\n0,0,0,0,0,8608,0,0,8609,0,0,0,8610,0,0,0,8611,0,0,8613,8617,8621,0,0,8622,0,8623\n,0,8624,8625,0,0,0,0,0,0,0,0,0,8637,8638,8639,8650,0,0,0,0,8652,8654,8655,0,0,0,\n0,0,0,0,0,0,0,8656,0,0,0,0,0,8657,0,0,0,0,0,0,0,0,0,8658,0,0,8659,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,8660,0,0,0,0,0,0,8661,8663,8664,0,0,0,0,8665,0,8669,0,\n0,0,0,0,0,0,8671,8674,0,8684,0,8686,0,0,0,8689,0,0,0,8690,0,8706,0,0,0,0,0,0,0,0\n,0,0,0,8710,0,8711,8713,8714,8724,8727,8728,8733,8736,0,8737,8739,0,0,0,0,8742,\n8743,8745,8754,0,0,0,0,8756,0,0,0,0,0,0,8757,8760,0,0,0,0,0,8762,8763,8764,0,\n8766,8769,8770,8773,0,8774,0,8779,0,0,0,0,8780,0,0,8781,0,0,8783,0,0,0,0,0,0,0,0\n,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8784,0,0,0,0,0,0,0,0,8785,0,0,0,0,8786,0,0,0,0,8788\n,8790,0,0,0,8803,0,8813,8814,0,0,0,0,0,8815,8816,0,0,0,0,8818,0,0,0,0,8822,8828,\n8829,0,8831,0,0,0,0,8833,0,0,0,8834,0,0,0,8835,0,8836,0,0,0,8837,0,0,0,0,0,0,\n8838,8839,0,0,0,0,0,0,0,0,0,0,0,8840,0,0,0,8841,0,8842,0,0,0,8846,0,0,0,0,0,0,0,\n8847,0,8848,0,0,8864,0,0,8866,0,0,8870,8872,0,0,8873,8874,0,0,0,0,0,0,8875,0,\n8876,0,0,0,0,8896,8900,0,0,0,0,8901,0,0,0,0,0,8904,0,8907,0,0,0,0,8911,8912,8913\n,0,0,0,8914,0,8915,0,0,0,0,0,0,0,0,0,0,0,0,8916,0,0,0,8929,0,0,0,0,0,0,0,0,0,0,\n8930,0,8932,0,8943,0,0,0,8945,8947,0,0,0,0,8949,0,8950,0,8954,8957,0,0,8970,0,0,\n0,0,8971,0,8996,0,0,0,0,8997,9000,0,0,0,0,9001,9002,0,9004,9009,9024,0,0,0,0,0,0\n,0,0,0,0,0,0,9027,9082,0,0,9083,9089,0,0,0,0,0,0,9090,0,0,0,9092,0,0,9093,0,9095\n,0,0,9096,9097,9101,9102,0,0,0,0,0,0,0,0,9112,0,0,0,0,0,0,9114,0,0,9120,0,9121,\n9122,0,0,0,9123,9124,0,0,9125,0,0,9126,0,9127,0,0,9129,9131,0,0,0,9132,0,0,9136,\n0,9144,0,0,9148,0,0,0,0,0,0,9149,0,9152,9163,0,0,9165,0,0,0,0,0,0,0,0,0,0,0,0,0,\n9166,0,9169,0,0,0,0,0,0,0,9170,0,0,0,0,9172,0,9174,9175,9176,0,9177,0,0,0,0,0,0,\n0,0,9186,0,9187,0,0,0,9188,9189,0,0,9190,0,0,0,0,9191,0,0,0,9193,0,0,0,0,9197,\n9198,0,0,0,9208,9211,0,0,0,0,9216,9217,0,9220,0,0,0,0,9221,9222,9223,0,9224,9225\n,0,0,9227,0,9228,9229,0,0,9230,0,9232,0,9233,0,0,0,0,0,9234,9235,0,0,9237,0,0,0,\n0,0,0,0,0,9238,9240,0,0,9241,0,0,0,0,9244,0,0,0,0,9247,0,0,0,0,0,0,0,0,0,0,9248,\n0,0,0,9249,0,0,0,0,0,9250,0,0,0,0,9251,0,0,9252,9255,0,0,0,9256,0,0,0,0,0,0,0,\n9257,0,0,9258,0,0,0,0,0,0,9259,0,0,0,0,0,9262,9263,0,0,9265,9266,0,0,0,0,0,0,0,0\n,9268,9271,0,0,0,0,0,0,0,0,0,9273,0,0,0,9276,9277,9279,0,0,0,0,0,0,0,9280,0,0,\n9293,0,0,0,0,0,9297,9301,0,0,0,0,0,0,0,0,0,0,0,9308,9309,9313,9321,9322,0,9326,\n9327,0,0,9477,0,9479,0,0,0,0,9482,0,0,0,9483,0,9484,0,0,0,0,0,0,0,0,0,9485,0,0,\n9486,0,0,0,9489,0,0,0,0,9490,9491,0,0,0,0,9493,0,9495,9496,0,0,0,0,0,0,0,0,9500,\n0,9502,0,0,0,0,0,9504,9507,0,9509,0,9511,0,0,9513,0,0,0,0,0,0,0,0,9515,0,0,0,0,0\n,0,9516,9517,0,0,0,0,9532,0,0,9533,0,0,9538,0,9539,9540,0,0,0,0,9541,0,0,0,9542,\n0,0,0,0,0,0,0,0,9544,9545,0,9546,0,0,0,0,0,0,9547,9548,0,0,0,9550,0,9557,0,9558,\n0,9561,0,9563,9570,0,9572,9574,9575,0,0,0,9577,9592,0,0,9596,0,0,0,9598,0,9600,0\n,9601,0,0,0,0,0,0,9608,0,9638,9639,0,0,0,0,0,0,0,9641,0,0,9643,9644,9645,9646,0,\n0,0,9648,0,0,0,0,0,0,0,9650,9654,0,0,0,0,0,0,0,0,9655,0,0,0,0,0,9656,0,9657,0,0,\n0,0,9658,0,0,9659,0,0,9664,0,0,9665,0,9667,9669,0,0,0,0,0,0,0,0,0,0,0,0,9671,0,\n9673,9681,0,0,0,0,9682,9683,9684,0,0,0,0,9686,9698,0,0,9700,9701,9702,0,9703,\n9717,0,0,0,0,9718,0,9726,0,0,0,0,9727,0,0,0,9728,0,9742,0,9744,0,0,0,9750,0,9754\n,9755,0,0,0,0,0,9756,0,9757,9768,0,9769,0,0,0,9770,9771,0,9773,0,9774,0,9775,0,0\n,0,9776,9777,9784,0,0,0,9786,0,9789,0,0,0,0,9793,9794,0,0,0,9808,0,0,0,0,0,9811,\n0,0,0,0,0,0,0,0,0,0,0,0,9812,0,9820,0,9823,0,9828,0,0,0,0,9830,0,0,9833,9836,0,0\n,0,9840,0,0,0,9841,0,0,9842,0,9845,0,0,0,9847,9848,0,0,9855,0,0,0,0,0,0,9856,\n9863,9865,0,0,0,0,0,0,0,0,9866,9867,9868,9873,9875,0,0,0,0,0,0,9880,0,9886,0,0,0\n,9887,0,0,9891,0,0,0,0,0,0,0,9906,9907,9908,0,0,0,9909,0,0,0,0,0,0,9910,0,0,0,0,\n9913,0,0,0,0,9914,0,0,0,0,0,9922,0,0,0,0,9923,9925,0,0,0,0,0,0,9930,0,0,0,9931,0\n,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9932,0,9939,0,0,9940,9962,9966,0,9969,9970,0,0,9974\n,0,9979,9981,9982,0,0,0,9985,0,0,0,0,0,0,9987,0,0,0,0,0,0,0,9988,9993,0,0,9994,0\n,0,0,9997,0,10004,0,0,0,0,0,10007,10019,10020,10022,0,0,0,10031,0,0,0,0,0,10032,\n0,0,10034,0,10036,0,0,0,0,10038,0,10039,10040,10041,10042,0,0,0,0,0,10043,0,0,0,\n0,0,10045,10054,0,0,0,0,10055,0,0,10057,10058,0,0,0,0,0,0,10059,0,0,0,0,0,0,0,\n10060,0,0,0,0,0,0,0,10063,0,10066,0,0,0,10070,0,10072,0,0,10076,10077,0,0,10084,\n0,10087,10090,10091,0,0,0,10094,10097,0,0,0,0,0,0,10098,0,0,0,0,0,0,10103,0,\n10104,0,10108,0,0,0,0,0,0,0,0,10120,0,0,0,10122,0,0,10125,0,0,0,0,10127,10128,0,\n0,10134,0,10135,10136,0,10137,0,0,10147,0,10149,10150,0,0,10156,0,10158,10159,\n10160,10168,0,0,10171,0,10173,0,0,0,10176,0,0,0,0,10177,0,0,0,0,10178,0,0,0,0,\n10194,0,10202,0,0,10203,10204,0,10205,10206,0,10207,0,0,0,0,10209,0,0,0,0,0,0,0,\n10213,0,0,0,0,0,0,10217,0,10229,0,10230,10231,0,0,10232,0,0,10237,10238,10244,0,\n0,0,0,0,10250,0,10252,0,0,0,0,0,0,10255,0,0,10257,0,0,0,0,0,0,10258,0,10259,0,0,\n0,0,0,0,0,0,10260,0,0,0,0,0,0,0,10284,10288,10289,0,0,0,10290,0,10296,0,0,0,0,0,\n10297,0,0,0,0,0,0,10298,0,0,0,0,10299,10303,0,0,0,0,0,10306,0,0,0,10307,0,10308,\n0,0,0,0,10311,0,0,0,0,0,0,0,10315,10317,0,0,0,10318,10319,0,10321,0,10326,0,\n10328,0,0,0,0,10329,0,0,10331,0,10332,0,0,0,0,0,0,10334,0,0,10335,10338,0,0,0,0,\n0,10339,10349,0,0,0,0,0,0,10351,0,10353,0,0,0,0,0,0,10362,0,10368,0,10369,0,0,0,\n10372,10373,0,0,0,0,0,10374,0,0,0,10375,0,10376,0,0,10386,10388,10390,0,0,0,0,0,\n0,0,10391,0,0,10392,10394,0,0,10396,0,10397,0,10403,0,0,0,0,0,0,0,0,10404,0,\n10405,10410,0,0,10411,0,10412,0,0,0,0,0,0,0,10421,10422,10423,0,0,0,0,0,0,0,0,0,\n10425,0,0,10427,0,0,10430,0,0,0,0,0,10432,0,10433,10434,0,0,0,0,10436,10437,0,\n10438,0,10439,0,10444,10446,0,0,0,0,0,10448,0,0,0,0,0,10449,0,0,0,0,0,0,0,10451,\n0,10453,0,0,0,10454,10457,0,0,10459,0,10469,0,0,0,0,0,10472,10481,0,0,0,0,0,\n10482,10483,0,10492,0,0,0,0,0,0,0,0,0,0,10499,0,0,0,10502,0,0,10510,0,10521,\n10524,0,0,10525,10526,10528,0,0,0,0,0,0,0,0,10530,0,0,0,0,10533,0,10534,0,0,0,0,\n0,0,0,0,0,0,10535,10536,0,0,10544,0,10553,10556,0,10557,10559,0,0,0,0,0,10562,\n10563,10564,0,10565,0,0,0,10566,0,10567,0,0,0,0,10575,0,0,10576,0,10578,0,0,0,0,\n0,0,0,0,0,0,10585,10586,10587,10589,0,10590,0,0,10594,0,0,0,0,0,10598,0,0,10601,\n0,0,0,10602,0,10603,0,10604,0,10605,0,0,10607,0,10626,0,10627,0,0,0,0,0,10629,\n10630,10631,0,0,0,10646,0,0,0,10647,0,10650,0,10651,0,0,0,10652,10653,10655,0,\n10658,0,0,10659,0,10667,0,0,0,0,10669,0,0,0,0,0,0,0,0,0,10670,0,0,0,10671,0,0,0,\n0,10672,10673,0,10674,0,0,0,10676,0,0,0,0,0,0,10678,0,10682,0,0,10692,0,10697,0,\n0,0,0,10698,0,0,0,10700,0,0,0,0,0,10703,0,10704,0,0,0,0,0,0,0,10705,0,10715,\n10718,10720,0,0,10722,0,0,0,0,0,0,0,0,10723,0,0,0,0,10726,0,0,0,0,0,10727,10730,\n10743,0,0,0,0,0,0,10744,0,0,10745,0,0,0,0,0,0,10748,0,0,0,0,10750,0,0,10752,\n10753,0,0,0,10756,0,0,0,0,0,0,10758,0,0,0,10759,0,10769,0,0,10772,0,0,0,0,0,0,\n10773,0,0,0,10777,0,0,10779,0,0,0,0,0,0,0,0,10780,10784,0,0,0,10789,0,0,0,10791,\n0,0,0,0,0,0,0,0,0,10795,0,0,10796,0,10808,0,10809,0,0,0,10810,0,0,0,10812,0,0,\n10814,0,0,0,0,0,0,0,0,0,10815,0,0,0,0,10816,10817,0,0,0,0,10819,0,10820,0,0,0,0,\n10821,10822,10823,0,10826,10849,0,0,0,0,10850,0,0,10852,0,10853,0,0,10856,0,0,\n10857,10858,10859,10860,0,0,0,0,0,0,10863,0,10866,10867,10872,10890,0,0,10891,\n10892,0,0,0,0,0,10893,0,0,0,10896,10899,0,0,10900,10902,0,0,0,0,0,10903,0,0,0,0,\n0,0,0,0,0,0,0,0,10905,0,10906,0,0,0,0,10908,10911,0,10912,0,0,10916,0,0,0,0,0,\n10917,0,10918,0,0,0,10923,0,0,0,0,0,10924,0,0,10928,10929,0,0,10930,0,0,0,10932,\n0,0,0,0,10939,0,0,10945,0,0,0,10947,0,0,10948,0,0,0,0,0,0,0,0,0,0,0,0,10958,0,\n10960,10962,0,0,10964,0,0,0,10966,0,0,0,0,0,0,0,0,0,0,10967,0,0,0,10968,0,0,0,\n10973,0,0,0,0,0,10975,0,0,0,10976,10978,0,0,10982,10984,10987,0,0,10988,0,10989,\n0,0,10991,0,0,0,0,10992,0,0,0,10993,0,10995,0,0,0,10996,10997,0,0,0,10998,0,\n10999,0,11001,0,0,0,0,0,0,11010,11012,0,11013,11016,11017,0,0,11019,11020,11021,\n0,0,0,0,0,0,0,0,0,0,0,0,11022,0,0,11023,11029,0,0,0,0,11031,0,0,0,11034,0,0,0,0,\n11055,0,0,0,0,0,11056,11060,0,0,0,0,0,0,11061,0,0,11064,11065,0,11066,0,11069,0,\n11085,0,0,0,0,0,11086,0,0,0,11088,0,0,0,11094,0,0,0,11095,11096,0,0,0,0,0,0,\n11097,11098,0,0,0,0,0,0,11099,0,0,11102,11108,0,0,0,11109,0,11114,11119,0,11131,\n0,0,0,11142,0,0,11143,0,11146,0,11147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11148,0,\n11149,11152,11153,11154,0,11156,0,11157,0,0,0,11158,0,0,11159,11160,0,0,0,0,0,0,\n0,0,0,0,0,0,11163,0,0,11164,11166,0,0,0,11172,11174,0,0,0,11176,0,0,0,0,0,11182,\n11183,0,0,0,11184,11187,0,0,11188,11189,0,0,0,0,0,0,11194,0,0,0,0,0,0,0,11200,\n11202,0,0,0,0,0,0,11203,0,11204,0,0,0,0,0,11205,0,0,0,11206,0,11207,0,0,11209,0,\n11211,0,11214,0,0,11231,0,0,0,11293,11295,0,0,11296,11297,11302,0,0,0,11307,0,0,\n0,0,11309,11310,0,11311,0,0,0,11313,0,11314,0,0,0,0,11334,0,11338,0,0,0,11339,0,\n0,0,0,0,11340,0,11341,11342,0,11344,0,11345,0,0,0,11348,11349,0,0,11350,0,0,0,\n11355,0,0,0,0,0,0,11356,0,11357,11370,0,0,11371,0,11374,11376,0,0,0,11377,0,0,\n11378,11383,0,11386,11399,0,11400,11406,0,0,0,11408,0,0,11409,11412,0,0,0,0,\n11417,0,0,0,11418,0,11421,0,11426,11429,0,0,0,0,0,11430,0,11437,0,11438,0,0,0,0,\n0,11440,11453,0,0,0,0,0,0,11454,0,0,0,0,11455,0,0,11456,11460,11461,11463,0,\n11469,0,11473,0,0,0,0,11474,0,0,0,11475,0,11476,11477,11480,0,0,0,0,11481,0,0,\n11484,0,0,11487,0,0,0,0,0,0,0,0,0,0,11497,0,0,11502,0,11509,0,0,11510,11511,\n11513,0,0,0,0,0,0,0,0,0,0,11515,0,0,0,0,11516,0,11520,11521,0,0,0,0,0,0,0,0,0,0,\n0,11529,11530,11531,11534,0,0,11543,0,0,0,0,0,11547,0,11548,0,0,0,0,0,11552,\n11556,0,11557,0,0,11559,0,11560,0,0,0,0,0,0,11561,0,0,11563,11564,0,11565,0,0,0,\n0,11567,0,0,0,11569,0,11574,0,11575,0,0,0,11577,0,11578,0,0,0,11580,11581,0,0,0,\n11582,11584,0,0,0,0,0,0,0,11587,0,11588,11591,0,11595,0,0,0,0,0,0,0,0,11596,0,\n11597,0,0,0,0,11598,11601,0,0,0,11602,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11603,\n11604,0,11606,0,0,11608,0,0,0,0,11610,0,0,11611,0,0,0,0,11613,0,11622,0,0,0,\n11623,0,0,0,0,11625,0,0,11626,11627,11628,11630,0,0,0,0,0,0,11639,0,0,11646,0,\n11648,11649,0,11650,0,0,0,0,0,0,0,0,0,11651,0,0,11652,11653,11656,0,0,11677,\n11679,0,0,0,0,11680,0,0,11681,0,11685,0,0,0,0,0,0,0,0,11688,0,0,0,11716,0,11719,\n0,0,0,0,0,11721,0,0,11724,11743,0,0,0,0,0,0,0,0,11745,11748,11750,0,0,0,0,0,\n11751,0,0,0,11752,11754,0,11755,0,0,0,0,0,0,0,11759,0,0,0,0,0,0,11760,0,0,0,\n11761,0,0,0,0,0,0,11766,11767,0,11772,11773,0,11774,0,0,11775,0,11777,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,11778,11780,0,0,0,0,0,0,0,11783,0,11784,0,0,0,11785,\n0,0,0,11786,0,0,0,0,11788,0,0,11789,11791,11792,0,0,0,0,11795,11834,11835,11836,\n0,0,11837,0,0,0,11838,0,0,11846,11851,0,11852,0,11869,0,0,0,11871,0,0,0,11872,\n11874,0,0,0,0,0,0,11875,0,11876,11877,0,0,0,0,0,0,0,0,0,0,11883,0,0,0,0,0,0,0,\n11884,0,11885,0,11886,0,0,11887,0,11894,11895,11897,11909,11910,0,11912,11918,0,\n0,11920,0,11922,11924,11927,11928,0,0,0,0,11929,0,11934,0,0,0,0,0,11941,11943,\n11944,0,11945,0,0,0,0,11948,11949,0,0,0,0,11953,0,11954,0,11955,0,11956,0,0,0,0,\n0,11957,0,0,11959,0,0,0,0,0,0,0,0,11961,0,0,0,0,0,11978,0,0,0,11979,11980,11986,\n11987,0,11992,0,0,0,0,0,11993,0,0,0,11994,0,11999,12004,12005,12006,0,0,0,0,0,\n12011,0,0,12012,12014,0,0,12015,0,0,12019,12028,0,0,12029,0,0,12032,12033,0,0,0,\n0,12034,0,12041,12043,0,0,12044,0,0,0,0,0,0,0,12046,0,0,0,0,0,0,0,12054,12055,0,\n12056,0,0,0,12060,12064,0,0,0,0,0,12065,12067,12068,0,0,0,0,0,0,0,0,12074,0,0,0,\n12075,12076,0,0,0,12079,0,12081,12086,12087,0,0,12088,0,0,0,0,12089,0,12092,0,0,\n0,0,12097,0,0,0,0,0,0,0,0,12098,0,0,0,0,0,0,0,0,0,0,0,0,0,12102,12103,12104,\n12111,0,0,12114,12116,0,0,0,12118,0,0,0,12119,12120,12128,0,0,0,0,12130,0,0,0,0,\n0,0,12131,0,0,0,12132,12134,0,0,0,0,12137,0,12139,0,12141,0,0,12142,0,0,0,12144,\n0,0,0,0,0,12145,0,12148,0,12153,0,0,0,0,12154,12171,12173,0,0,0,12175,0,0,0,0,\n12178,0,0,0,0,0,0,0,12183,0,0,0,0,0,0,0,0,12184,0,0,0,12186,0,0,0,0,0,12187,\n12188,0,0,12189,0,12196,0,12197,0,0,12198,0,12201,0,0,0,0,12203,0,12209,0,0,0,0,\n12210,12211,12212,12213,0,12217,12218,0,0,0,0,0,0,0,0,0,12222,0,0,0,0,0,0,0,\n12223,0,0,12229,0,0,0,0,12233,0,0,0,0,12234,0,0,12236,12242,0,0,0,12243,0,0,0,\n12244,12253,0,12254,12256,0,12257,0,0,12275,0,0,0,0,0,12277,0,0,0,0,0,12278,0,\n12289,0,0,12290,0,12292,12293,0,0,12294,0,12295,0,0,12296,0,12297,0,12298,0,0,0,\n0,12301,0,0,0,0,0,0,0,0,0,0,0,0,0,12309,0,12338,12340,0,0,0,0,12341,0,0,0,0,0,0,\n0,0,12342,12343,0,12344,0,0,0,0,0,0,0,0,0,12345,0,0,0,0,0,0,0,0,12346,0,0,0,0,\n12348,0,0,0,0,0,0,0,0,0,0,0,0,12350,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12351,0,12355,\n12356,12357,0,0,12367,12370,12371,0,0,0,0,0,12372,12376,0,0,0,0,0,0,0,0,12379,0,\n12382,0,12383,0,0,12384,0,0,0,0,12393,0,0,12394,0,0,0,0,12398,12403,0,0,12404,0,\n0,0,0,0,0,0,0,0,0,0,0,0,12410,0,0,0,12411,0,0,0,12412,0,0,0,0,12420,0,12421,0,0,\n0,0,0,12423,0,12425,12429,0,0,0,12431,12432,0,0,0,0,0,0,0,0,0,0,0,0,12434,0,0,0,\n0,0,12435,12436,0,0,0,0,0,0,0,0,12437,0,0,0,0,0,12438,0,0,0,0,0,0,0,0,12445,0,0,\n0,12450,12451,0,0,0,0,0,0,0,0,12452,12475,0,0,12493,12494,0,0,0,12495,0,0,0,0,\n12496,12502,12509,0,0,0,0,12510,0,12512,12513,0,0,0,0,12514,0,0,0,12515,0,12520,\n0,0,0,12524,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12527,0,0,0,12528,0,0,0,12529,0,0,0,\n0,0,12530,0,12535,0,0,12536,0,12538,0,0,0,0,0,0,0,0,0,0,0,0,12540,0,12548,0,0,0,\n0,0,12550,0,0,0,12551,12552,0,0,0,12554,0,0,0,0,0,0,0,0,12555,0,0,12562,0,12565,\n0,12566,0,0,0,0,0,0,0,0,0,0,0,0,12569,0,0,0,12571,12574,0,0,0,0,0,0,0,12577,0,0,\n0,0,0,0,0,12578,12579,12603,0,12608,0,0,12611,0,12612,0,12615,0,12625,0,0,0,0,\n12627,12646,0,12648,0,0,12657,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12670,0,0,12671,0,\n12673,12677,0,0,0,0,0,0,0,0,0,0,0,12679,0,12681,0,12682,12693,0,12694,0,12697,0,\n12701,0,0,0,12703,12704,0,0,0,0,12707,12737,0,0,12739,0,0,12740,0,0,12742,12743,\n0,0,0,0,0,0,0,0,0,12745,0,12746,12747,0,12748,0,0,12759,12767,0,0,0,0,12773,0,\n12774,12778,0,0,0,0,0,0,0,12779,0,0,0,0,0,12780,12793,0,12824,0,12825,0,12836,0,\n0,0,0,12839,0,12842,0,0,0,0,0,0,0,0,0,0,0,0,12843,12845,0,12846,0,0,0,0,12847,0,\n0,12850,12852,12853,0,0,0,12854,0,0,0,12855,0,12856,0,12858,0,0,12859,0,12862,0,\n12863,0,0,12866,0,12869,12872,12873,0,0,0,0,0,0,0,0,0,12875,0,12877,0,0,12878,0,\n0,0,0,0,0,0,0,0,12884,12885,12888,0,12889,0,0,0,0,12893,0,0,0,12895,12896,12898,\n0,0,0,0,0,0,0,12902,0,12909,12910,0,12926,0,12928,0,0,0,12929,0,12930,0,0,0,0,\n12931,0,12932,12933,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12934,0,12942,0,0,0,0,12944,\n0,0,0,0,0,0,0,0,12946,0,0,12948,0,0,12949,0,0,0,0,12950,0,0,0,0,12951,0,12952,0,\n12953,0,0,0,12954,12958,12959,0,0,0,0,0,12960,12964,0,0,0,0,0,12966,0,0,0,0,0,0,\n0,0,12970,0,12971,0,0,0,0,0,0,12972,0,0,12982,0,0,0,12984,12985,0,12986,12996,\n12997,13001,13002,0,0,0,0,13004,0,0,13005,0,0,13007,13009,0,13017,0,0,0,13020,0,\n13021,0,0,0,0,0,0,0,0,0,0,13022,0,0,0,0,0,0,0,0,13024,13027,0,0,0,0,0,13028,0,0,\n13029,0,0,0,0,0,0,0,13032,0,13037,0,0,0,0,0,0,13040,0,0,13041,0,0,0,13043,13044,\n13046,0,0,0,0,13047,0,0,0,0,0,0,0,13049,13054,0,13056,0,0,13060,13061,0,0,0,0,0,\n13067,0,0,13068,0,13071,0,0,0,0,0,13077,13078,0,0,0,0,0,13079,13080,13081,0,\n13082,0,0,0,13085,0,0,0,0,0,0,0,13086,0,13087,13088,0,0,0,0,0,13094,0,13099,0,\n13100,0,0,0,13101,0,13125,13126,13128,13129,0,0,13130,0,13131,0,0,0,0,0,0,13134,\n0,0,0,0,0,0,0,0,0,0,0,13150,0,13168,0,0,0,0,0,0,0,0,0,13169,0,0,13170,0,0,0,0,\n13174,0,0,0,13176,0,0,0,0,0,13177,0,13178,13183,13187,0,0,0,13189,0,0,13190,0,0,\n13191,0,0,13206,0,0,0,13207,0,0,0,0,0,0,0,0,0,0,13212,0,0,13219,13232,0,0,0,\n13241,0,13249,13253,0,0,0,0,0,13255,13259,0,13260,13261,0,13262,0,13272,0,0,0,0,\n13276,0,0,0,0,13277,13299,0,0,13301,13302,0,0,13303,0,0,13305,0,13310,0,0,0,\n13311,0,0,0,0,13325,0,13328,0,0,0,13329,0,0,0,0,0,0,13330,0,0,13331,0,13335,0,0,\n13342,0,0,0,0,0,13343,0,13354,0,13362,0,13366,13367,13369,0,0,13371,13372,0,\n13373,13374,0,13376,0,13380,13381,13386,0,13387,13388,0,13389,13391,13395,0,0,0,\n0,0,13401,13409,0,13410,0,0,0,0,13420,0,0,0,0,0,13422,0,0,0,0,13423,0,0,0,0,\n13425,0,0,0,0,0,13427,0,0,0,13428,0,0,13430,13438,0,13439,0,13445,0,13448,13449,\n0,0,0,0,0,0,13451,0,13457,0,0,0,0,13458,13459,0,13460,0,0,0,0,13464,13465,13466,\n13470,0,13471,13472,13474,13475,0,13476,0,0,13478,13479,0,13481,0,0,0,0,13487,0,\n13490,0,13493,0,0,13494,0,0,13495,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13496,13497,0,\n13500,0,0,13516,13522,0,0,13525,13528,0,0,0,13530,13535,0,13537,13539,0,13540,0,\n13543,0,13544,0,0,0,0,0,0,13545,0,0,0,0,0,0,13547,0,0,0,13549,13555,0,0,0,13556,\n13557,0,0,0,0,0,0,0,13558,0,13563,0,0,0,0,13564,0,0,0,0,0,0,0,0,13566,0,0,0,0,0,\n0,13569,0,0,13571,0,0,0,0,13573,0,0,0,0,0,0,13578,0,0,0,0,0,0,0,0,0,0,13581,0,\n13586,0,13595,0,13600,0,0,0,0,0,0,0,0,13601,13603,0,13604,13605,13606,13607,0,0,\n13617,13618,0,0,0,0,0,0,0,13623,0,13625,13627,0,0,0,0,0,0,0,0,13629,0,0,0,13634,\n0,0,0,13638,0,0,0,0,0,0,0,0,13654,0,0,0,0,0,0,0,0,0,0,13656,0,13659,0,0,13660,0,\n0,13662,0,0,0,13663,0,13664,0,0,0,0,0,13668,0,13669,13671,0,0,13672,0,0,0,0,0,0,\n13675,13685,0,13686,0,0,0,13687,0,0,0,13692,13694,13697,0,0,0,13702,0,0,0,0,0,\n13705,0,0,0,0,13707,0,0,0,13714,0,0,0,0,0,0,0,0,0,13715,0,13716,13717,0,0,13719,\n13724,13730,13731,0,0,0,0,0,0,0,0,13732,0,0,0,0,0,0,0,13734,0,13736,0,0,13737,\n13738,13747,0,13751,0,0,13752,0,0,0,13753,0,13757,0,0,13762,13763,0,13764,13765,\n0,13766,0,0,13767,0,0,0,13768,0,0,0,0,0,0,0,13769,0,0,13772,0,13775,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,13776,13778,13787,0,0,0,13797,0,13798,0,13801,0,13804,\n13806,0,0,0,0,13816,13817,0,0,0,0,0,0,0,0,0,0,0,0,0,13834,0,13836,0,0,13838,0,0,\n13839,0,13840,0,0,0,0,13842,0,0,0,0,0,0,13843,0,0,0,0,0,0,0,0,0,13845,0,0,0,0,0,\n13858,0,0,13860,0,0,13861,0,0,13862,13863,0,13868,0,13869,13870,0,0,0,0,0,0,0,0,\n0,0,13872,0,0,0,0,13873,13878,0,0,0,0,0,0,0,0,0,0,13886,0,13888,13889,13890,0,0,\n13891,13894,0,13897,13899,13900,13904,0,0,13906,0,0,0,13909,0,0,0,13910,0,0,0,\n13911,0,0,0,0,0,13912,13917,0,0,0,0,13918,0,13919,0,0,13920,0,0,0,13921,0,0,\n13922,0,0,0,0,0,0,0,13924,0,13927,0,0,0,0,0,13932,0,13933,0,13934,0,0,13935,0,\n13944,0,0,0,13954,0,0,13955,0,0,0,0,13956,0,13957,0,13967,13969,0,0,0,0,0,0,0,0,\n0,0,0,0,13970,13990,0,13991,13994,0,13995,0,0,0,0,13996,0,0,13999,0,0,0,14018,0,\n14019,0,14021,0,0,0,0,0,0,14041,0,0,0,0,0,0,0,0,14043,0,0,0,0,14046,0,0,0,14048,\n14049,0,0,0,0,0,0,0,0,0,0,14051,0,0,14052,14056,0,14063,0,14064,14066,0,0,14067,\n0,0,0,0,0,0,0,0,0,14068,0,0,0,14072,0,14074,14075,0,14076,14079,14085,14086,\n14087,14093,0,0,0,0,14095,0,0,0,0,0,0,14096,14097,0,0,0,0,0,0,0,14098,0,14102,0,\n0,0,0,0,14103,0,0,0,14104,0,0,14105,0,0,0,14107,14108,0,0,14109,0,0,0,0,0,0,0,0,\n14117,0,0,0,0,14118,0,0,0,0,14119,0,0,14120,0,0,14121,0,14122,14127,0,14128,\n14136,0,0,14138,0,14140,0,0,0,14141,14142,0,0,0,0,14146,0,0,14149,0,14151,0,0,0,\n14152,0,0,14153,0,0,0,0,0,0,0,0,0,14154,0,14156,14157,0,0,14159,0,14161,0,0,0,0,\n14162,0,0,0,0,0,0,14163,0,0,14173,0,0,0,0,0,0,14174,0,0,14176,0,0,14178,0,0,\n14179,14181,0,0,14182,14185,14187,0,14190,0,0,14197,0,0,0,0,0,0,0,0,0,0,0,0,\n14198,0,0,0,0,0,0,14199,14200,0,0,0,14204,0,0,14208,0,0,0,0,0,0,0,0,0,0,0,14231,\n0,0,0,0,0,0,0,0,0,14234,0,0,14235,0,0,0,14240,14241,0,0,0,14246,0,0,0,14247,0,\n14250,0,0,14251,0,0,14254,0,0,14256,0,0,0,14260,0,14261,0,0,0,0,14262,14267,\n14269,0,0,14277,0,0,14278,0,14279,14282,0,0,0,14283,0,0,0,14284,14285,0,0,0,0,\n14286,0,0,0,14288,0,0,0,14289,0,14290,0,14293,14301,14302,14304,14305,0,14307,0,\n14308,14309,0,0,0,0,0,0,0,0,0,0,0,14311,14312,0,0,14317,0,0,0,0,0,0,0,14318,0,0,\n0,0,14320,0,0,0,0,14321,14322,0,0,0,0,0,14326,14329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n14330,14331,0,0,0,0,14332,0,0,0,14333,0,0,14337,14340,0,14341,0,0,14342,0,14345,\n14346,0,0,14347,0,14362,0,0,0,0,0,14364,14365,14371,0,14373,0,0,14374,0,14379,0,\n14400,0,0,0,0,0,14401,0,0,14405,0,14406,0,14408,14409,0,0,0,14417,0,0,14424,0,0,\n0,0,0,0,0,0,0,14430,0,0,0,14431,0,0,14435,0,14440,0,0,0,0,0,0,14442,0,0,14443,0,\n0,0,0,0,14446,0,0,0,0,0,0,0,14454,0,14457,0,14460,0,0,14466,0,0,0,0,0,14467,0,0,\n0,0,0,0,14469,0,14477,0,0,0,0,0,0,14478,14482,0,0,0,14483,0,0,0,14485,14486,0,0,\n0,14487,14488,14489,14492,14493,14494,14495,14496,14497,0,14499,0,14501,0,0,0,0,\n0,0,0,0,0,0,14502,0,14507,14512,14513,14514,0,0,0,0,0,0,0,0,0,0,0,14515,14526,\n14530,0,14537,0,14544,0,14547,0,0,14548,14550,14551,0,0,14552,0,0,0,14553,0,\n14554,0,0,0,0,14556,14564,0,0,14565,14566,0,0,0,0,0,0,14568,0,0,14569,0,0,0,\n14571,14576,0,0,14577,14578,14579,0,0,14580,0,0,0,0,14582,0,0,0,0,0,0,0,0,0,0,0,\n0,14583,0,0,0,0,0,14587,0,14588,0,0,14600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,14601,0,0,14604,14605,14611,0,14613,0,0,0,0,14615,0,0,0,0,0,0,14627,0,14628,0,\n0,0,0,14631,0,14633,14634,0,0,0,0,14635,0,0,0,0,0,0,0,0,14636,0,0,14639,14642,0,\n0,0,0,14644,0,0,0,0,14645,14646,0,14653,0,0,14654,0,14658,0,14661,0,0,0,14665,0,\n0,0,14668,0,0,0,0,0,0,0,0,0,14669,0,0,14670,0,0,0,14680,0,0,14681,0,0,0,0,0,\n14682,14683,0,0,0,0,14686,0,0,0,0,14687,14697,0,0,0,0,14699,14705,14711,0,0,0,0,\n0,0,0,0,0,0,14712,0,0,0,14713,0,0,0,0,14719,0,14720,14721,14726,0,0,0,14728,\n14729,0,0,0,0,14731,0,0,0,0,0,0,0,14733,14736,14737,0,0,14740,14742,0,0,0,14744,\n14753,0,0,0,0,14755,14758,14760,0,0,0,0,0,14761,14762,14765,14771,0,14772,0,\n14773,14774,0,0,14775,0,0,14776,0,0,0,0,14777,0,14779,0,0,14782,0,0,14785,14786,\n14788,0,0,0,0,0,14795,0,0,0,0,0,0,14798,0,14803,14804,14806,0,0,0,14809,0,0,0,0,\n0,0,14810,0,0,0,0,14811,0,14812,0,0,0,0,0,14815,0,0,0,0,0,0,0,0,14816,0,14818,0,\n0,0,0,0,0,14819,0,14820,0,14823,0,0,0,14824,0,0,14826,14827,0,0,0,0,0,0,0,0,0,0,\n0,0,14830,0,0,0,0,0,14833,0,14845,0,0,0,0,0,14846,0,0,14847,14871,0,14873,0,\n14876,0,14877,14878,14880,0,0,0,0,0,14881,0,14882,14894,0,0,0,0,14895,0,14907,0,\n14908,0,0,0,0,0,0,0,14911,0,0,0,0,14920,0,0,14931,0,14932,14934,14935,0,0,14936,\n0,14945,0,0,0,0,0,0,0,14947,0,0,14948,14949,14951,0,0,14952,0,0,0,14964,14973,0,\n0,14990,0,0,0,0,14995,0,0,14998,15001,0,0,15002,15020,0,0,0,0,0,0,15021,0,15022,\n0,0,0,0,15023,0,0,15025,15029,15033,0,0,0,15034,0,0,0,15035,0,0,0,0,0,15043,\n15044,0,0,0,15045,15046,15048,15050,0,15065,0,0,0,0,15066,0,0,15075,15082,15084,\n0,0,15085,15086,0,0,0,0,0,0,0,0,15088,0,0,0,15089,0,0,0,0,15094,0,15096,0,15097,\n0,15100,0,0,15102,0,0,0,0,0,0,0,0,15105,0,0,15106,0,15109,15113,0,0,0,15115,0,\n15118,0,0,0,0,0,0,15119,0,0,15120,0,0,0,0,0,15123,15129,0,0,0,15130,0,15131,0,0,\n15134,0,15135,0,0,0,15137,15138,0,0,0,0,0,0,15139,0,0,0,0,0,15140,0,0,15154,\n15162,0,15169,15170,0,15175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15177,0,15178,15179,0,\n0,0,0,0,15183,0,0,0,0,0,0,0,0,0,0,0,0,15185,15187,0,15194,15195,15196,0,0,0,0,0,\n0,0,15204,0,0,0,0,15206,0,0,0,0,0,15207,0,0,0,0,0,0,0,0,0,15213,0,15214,0,0,0,0,\n0,0,0,15232,0,0,0,0,15234,0,15238,15240,0,15248,0,0,0,0,15250,15251,0,0,0,0,0,0,\n0,15252,0,0,0,15255,15262,15266,0,0,0,15267,0,0,0,15277,15279,0,0,0,15280,15281,\n15282,0,0,0,0,0,15285,0,0,0,0,15289,0,0,15291,0,0,0,0,0,0,0,15296,15297,0,0,\n15304,0,0,0,0,15306,0,0,0,0,0,0,15307,15308,0,15309,0,0,15311,0,0,15312,15313,0,\n0,0,0,0,0,0,0,0,0,0,0,15314,15317,0,0,0,15318,15319,0,0,0,0,15320,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,15321,0,0,0,0,0,15324,0,15325,15326,0,15330,0,0,0,0,15334,0,\n15335,0,15341,0,0,15342,0,0,15343,15344,0,0,0,0,15345,0,0,0,0,15347,0,0,15348,\n15349,15350,0,15356,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15357,0,15358,0,0,0,0,0,0,0,\n15359,15360,15364,0,15380,0,0,0,0,0,15392,0,0,15393,0,15395,0,0,0,0,0,0,0,0,\n15396,0,0,15397,15398,0,0,0,0,0,0,0,0,0,15399,0,15400,0,0,0,15402,0,15405,15410,\n0,0,0,0,15411,0,0,0,15412,0,15416,0,0,0,0,0,0,0,15428,0,15435,0,0,15438,0,0,0,0,\n15439,0,0,0,15440,0,0,0,15441,15449,15451,0,0,0,0,0,0,0,15452,0,0,15455,0,0,0,\n15456,0,0,15458,0,15460,15461,0,0,0,0,0,15462,15464,0,15465,0,0,15466,0,0,15467,\n0,0,0,0,0,15468,0,0,0,0,15481,0,0,15484,0,15485,15486,0,0,0,15487,0,0,0,0,0,\n15488,0,15492,15498,0,0,0,15499,0,0,0,15500,0,15501,0,0,15512,0,15522,0,0,0,\n15524,0,15525,15526,0,0,15527,0,0,15545,15546,0,15548,15552,0,15553,0,0,0,15554,\n0,15555,0,15557,15565,15573,15577,15578,0,15582,0,15583,0,0,0,0,0,0,0,0,0,0,0,0,\n0,15586,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15588,0,0,0,0,0,15589,0,0,0,0,0,0,0,15593,\n15594,0,0,0,0,15595,0,0,0,0,0,0,15596,0,0,0,15597,0,0,0,0,15600,0,0,15601,0,0,0,\n0,15602,15603,0,0,0,0,0,0,15604,0,15609,0,0,15612,0,0,15613,0,0,15615,15617,\n15618,0,0,15620,0,15636,15637,0,0,15649,0,0,0,0,0,0,0,15650,0,0,15651,0,0,0,\n15656,0,15658,0,0,0,15664,0,0,15665,0,0,15668,0,0,0,0,0,15669,0,0,15674,0,0,\n15675,0,0,0,0,15676,0,0,0,0,0,0,0,0,0,0,0,15677,0,0,0,0,15678,0,0,0,0,0,15679,0,\n0,15681,0,15686,0,0,0,0,15687,0,15688,0,0,15690,0,0,0,15697,0,15699,15700,0,0,0,\n0,0,0,0,0,0,15701,0,15702,15703,0,15704,0,15705,0,15707,0,15709,0,15712,15716,0,\n15717,0,15718,15720,0,0,0,0,0,15724,0,0,0,15725,0,15726,0,0,0,15740,0,15745,\n15746,0,0,15747,0,15748,0,0,0,0,0,15749,0,0,0,15752,0,15753,0,0,0,0,0,0,15759,0,\n0,0,15765,0,0,0,0,0,0,0,0,0,15767,0,0,0,15771,0,0,15784,0,0,0,0,15785,15790,\n15791,0,0,15792,0,0,0,15807,0,15811,0,0,0,0,0,0,0,0,0,0,0,0,15818,0,0,0,15819,0,\n0,0,0,15821,0,0,0,0,0,15822,15824,0,0,15827,0,0,15829,15831,0,15832,0,0,15833,0,\n15835,15838,15839,15843,0,0,0,0,0,0,0,0,0,0,0,15844,0,0,0,0,15845,15851,15856,0,\n0,0,0,0,0,0,15858,15860,0,15861,0,0,0,15864,0,0,0,0,15865,0,0,0,0,0,0,15866,0,\n15872,0,0,15876,0,0,0,0,15877,15878,15883,15885,0,0,15888,0,0,0,0,0,15889,15890,\n0,0,0,0,0,0,0,0,15892,0,0,0,0,0,0,0,15893,0,0,15894,0,0,0,15895,0,15896,15897,0,\n15898,15901,15902,0,15911,15915,0,15916,0,15924,15935,0,15937,0,0,0,0,0,15950,0,\n0,0,0,0,0,0,15958,0,0,0,15961,0,0,15966,0,15967,0,0,15977,0,0,15978,0,0,15981,\n15982,15983,0,0,0,0,0,0,0,15986,0,0,0,15990,0,15991,15995,15998,0,15999,0,16000,\n0,0,0,0,16008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16009,16011,0,16013,0,0,0,0,\n0,0,0,0,16014,0,0,16015,16023,16024,16025,0,0,16026,0,16030,0,16032,0,16033,0,0,\n0,0,0,0,16035,16036,16037,0,0,0,0,0,16039,0,0,0,0,16041,0,0,0,0,0,16043,16044,0,\n0,16047,0,0,0,16048,0,0,16049,16050,16052,0,0,0,0,0,16055,0,0,0,0,0,0,0,0,16056,\n0,0,0,0,0,0,0,16058,16060,16061,0,0,16063,0,0,16064,0,0,0,16067,16068,0,0,16069,\n16078,0,0,0,16079,0,0,0,16080,0,16081,0,0,0,16088,0,0,0,0,0,0,0,0,0,0,0,16089,\n16093,0,16097,0,16103,0,16104,16105,0,0,16256,0,0,16259,0,0,0,0,0,0,0,16260,\n16261,0,0,16262,0,0,16263,0,16268,0,0,0,0,0,0,0,16269,0,0,16270,16273,0,16274,0,\n0,0,0,16275,16276,16277,16280,0,0,0,16281,16284,0,0,0,16286,0,16289,0,0,0,0,0,0,\n0,0,0,16290,0,0,0,0,16291,0,0,0,0,0,0,0,16292,0,0,0,0,0,0,0,0,16293,16295,16297,\n0,16302,0,16304,0,16305,0,16306,0,0,0,0,0,0,0,0,0,0,0,0,16307,16308,16312,0,0,0,\n0,0,0,16313,16315,0,16318,0,0,0,16321,0,0,0,0,0,0,0,16326,16333,16336,0,0,0,0,\n16337,16340,0,0,0,0,0,16345,0,0,16346,0,0,0,0,0,0,0,0,0,16347,0,0,16348,0,0,0,0,\n16349,0,0,0,16350,0,16357,0,0,0,0,16359,16360,0,0,0,0,16362,16363,16364,16365,0,\n0,16366,0,0,0,0,16367,16368,0,16369,16374,0,0,0,0,0,0,0,16376,0,0,0,0,16378,\n16379,0,16380,0,0,0,16381,16383,0,0,0,0,0,16390,0,0,0,16399,0,16402,16404,16406,\n16407,0,0,0,16409,16411,0,0,0,0,16412,0,16413,16415,16423,0,0,0,0,0,16424,0,0,0,\n16428,16434,16435,16449,0,16450,16451,0,0,0,16453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n16454,0,0,16456,16458,0,0,16459,0,0,16460,0,0,0,0,16462,0,16463,0,0,16466,0,0,0,\n0,0,16479,0,0,16480,0,16481,16484,0,0,0,0,0,0,0,0,0,0,16485,0,0,0,0,0,0,16489,0,\n0,0,0,0,16491,0,0,16498,0,0,16503,0,16505,0,0,0,0,0,0,0,0,16506,0,0,0,16508,\n16509,0,0,0,0,0,0,0,0,16511,16513,0,0,0,16516,0,16517,0,16519,0,16529,0,0,16531,\n0,0,0,0,0,0,16534,0,0,16541,16542,0,0,0,0,0,0,0,0,0,16543,16547,16548,0,0,0,\n16551,0,16552,0,0,0,16553,0,0,16558,0,0,16562,16565,0,0,0,16570,0,0,0,16573,\n16585,0,0,0,16586,16587,16595,0,16596,0,16598,0,0,0,16600,0,0,0,0,0,0,0,0,0,0,0,\n0,0,16601,0,0,0,0,16603,0,0,0,0,0,0,0,16604,16612,0,0,0,0,16613,0,16618,0,0,0,\n16640,0,0,16641,0,0,0,0,0,0,16645,0,0,0,0,16646,0,0,0,0,0,0,16651,0,0,0,0,16653,\n16654,0,0,0,16655,0,0,16656,16667,0,0,0,0,16671,0,16672,0,0,0,16673,0,0,0,0,0,\n16676,0,16686,0,0,0,0,16689,0,16690,0,16692,0,16693,0,16694,0,16696,0,0,0,16705,\n0,0,0,0,0,0,16707,0,0,0,16709,0,0,0,0,16711,0,16712,16713,0,0,0,16715,0,0,0,0,\n16716,0,0,0,0,0,0,0,0,0,16718,16724,0,0,16726,16727,0,0,0,0,0,0,0,16728,0,16729,\n0,0,16730,0,0,0,0,0,16731,0,0,0,16732,0,0,0,0,16734,16738,0,0,0,0,0,0,0,0,16743,\n0,0,16745,0,0,0,0,0,16749,0,16752,0,0,0,0,16756,0,0,16758,0,16759,0,0,0,0,0,\n16760,0,0,0,0,0,0,0,16762,0,16769,0,16770,0,16772,0,0,0,16777,16780,0,0,0,0,0,0,\n16781,0,0,16782,0,16784,0,0,16785,16787,16792,0,0,16794,0,0,0,16798,0,0,16809,0,\n0,16814,16816,16817,0,16819,0,0,0,0,0,0,0,0,0,0,16820,0,0,16836,16839,0,0,16841,\n16851,16857,0,0,16858,16859,0,0,16860,0,0,0,0,0,0,0,0,16862,0,16863,0,0,0,0,0,0,\n0,16864,0,0,0,0,0,0,0,16876,0,16881,16882,0,16885,16886,0,16887,0,0,0,16889,\n16891,0,0,0,0,0,16894,16895,0,0,0,0,0,0,0,0,0,0,0,16897,0,16898,0,0,0,0,0,16913,\n0,0,16924,16925,16926,0,0,16927,0,0,0,16937,16938,0,0,0,16940,16941,0,0,0,16942,\n16945,0,16946,16949,16950,0,0,0,16952,16955,0,0,0,16965,0,16969,0,0,16975,0,0,\n16976,0,0,0,0,16978,0,0,16981,0,16983,16989,0,0,0,0,16990,0,0,16991,0,0,0,16993,\n0,16994,16996,17000,0,0,0,0,0,17002,17004,0,17006,0,0,17007,0,0,0,0,17008,17013,\n17014,0,0,0,0,0,0,0,0,0,17021,0,17031,0,0,0,0,0,17033,17036,0,17038,0,0,17039,0,\n17045,0,0,17046,17047,0,0,0,0,17048,0,17049,17050,0,17051,17053,0,17054,0,17055,\n0,0,0,0,0,17063,0,0,17064,0,0,0,0,0,0,0,17065,0,0,17068,0,0,0,0,0,17072,0,0,0,0,\n0,0,17073,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17074,0,17080,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,17081,17083,17084,0,0,0,17085,0,0,0,0,17092,0,0,0,0,0,0,0,\n0,0,17093,0,17095,17102,0,0,0,0,0,0,17103,0,0,17105,0,17107,0,0,0,0,17114,0,0,0,\n0,0,17115,17125,17127,0,0,17128,0,0,0,17129,17130,0,17131,0,0,0,0,0,17132,17135,\n17145,0,0,0,0,0,0,0,0,17146,0,17147,0,17148,0,0,0,0,0,0,17149,17150,0,17151,\n17153,0,17155,0,0,0,0,17163,17171,0,17174,0,0,0,0,17179,0,0,17182,17185,0,0,0,0,\n0,17186,0,0,17188,0,0,0,0,0,0,0,17189,17191,0,17194,0,0,0,0,0,0,0,0,0,17195,\n17196,17203,17204,0,0,17205,17217,0,0,0,0,0,17218,0,0,0,0,17219,0,17220,0,17221,\n0,0,17230,0,0,0,0,0,17236,0,17238,17239,0,0,0,17241,17244,0,0,17245,0,17248,0,0,\n17251,0,17252,0,0,17264,0,17266,0,0,0,17268,0,0,0,0,17271,17272,0,17273,0,17295,\n0,17302,0,17305,0,0,0,17306,0,0,0,0,0,0,0,17308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n17309,0,17310,17313,0,0,0,0,17314,17315,0,17317,0,0,0,0,17318,0,0,0,0,0,0,0,\n17320,0,0,0,0,0,0,17334,0,17344,17348,0,0,0,17350,17351,0,0,17353,0,0,17354,0,0,\n0,0,0,0,0,0,0,17355,0,0,0,0,0,0,17356,17357,0,0,17359,0,0,0,17371,0,17372,0,0,0,\n17393,0,0,0,0,17394,0,0,0,0,0,17395,0,0,17399,0,0,0,17401,17417,0,17418,0,17419,\n0,0,0,0,0,17422,17423,0,0,0,0,0,17424,0,0,0,0,0,17428,17429,17433,0,0,0,17437,0,\n0,17441,0,0,17442,0,0,17453,0,0,0,0,0,0,0,0,17454,17456,17462,0,0,17466,0,0,\n17468,0,0,17469,0,0,0,0,17470,0,17475,0,0,0,0,0,17479,0,0,0,17483,17484,0,17485,\n0,17486,0,17491,17492,0,0,17493,0,17494,17495,0,0,0,17496,0,0,0,17497,0,0,0,\n17502,0,0,0,0,0,17503,0,17505,0,17507,0,0,0,17512,17513,17514,0,0,17515,0,0,0,\n17519,0,0,0,17522,0,0,17523,0,0,0,0,0,0,0,0,0,17527,0,0,0,17528,0,0,0,17534,0,0,\n0,0,17536,0,0,0,17539,0,17540,17543,17549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17556,\n0,0,17558,0,17559,0,0,17560,0,0,0,17563,0,0,0,0,0,0,17564,0,0,17565,17566,0,\n17567,0,0,0,0,0,0,17569,17570,0,17575,0,0,0,0,0,0,0,0,0,0,0,17581,0,0,0,17582,\n17583,0,17586,0,0,17587,0,0,0,0,0,0,0,17588,0,0,0,0,17596,17597,0,0,17598,17600,\n0,0,0,0,0,0,17601,0,0,0,17604,0,0,17605,0,0,17607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,17612,0,0,17618,0,17621,17622,0,0,0,0,17623,0,0,17624,0,0,17630,0,0,\n17631,17633,17634,0,0,0,0,0,0,0,17635,0,0,17636,0,0,17637,0,17638,0,17640,0,0,0,\n0,0,0,0,0,0,0,17641,0,0,0,0,0,0,0,0,0,0,17643,0,0,0,0,17645,0,0,0,0,0,0,0,0,\n17646,17662,0,0,0,0,0,0,0,0,0,17663,17664,0,17665,17666,0,0,0,17669,17671,17673,\n0,17679,0,0,0,0,0,0,0,17684,0,0,0,17686,0,17714,0,0,17720,17722,17726,0,0,17728,\n0,0,17729,0,0,0,17732,0,17733,0,17734,0,0,0,17735,0,0,0,0,17737,0,0,0,0,17739,0,\n0,0,17741,17742,0,0,0,0,17743,17744,17745,0,0,0,17749,0,17750,17751,17752,17754,\n17761,17762,0,17763,0,17766,0,17772,0,0,0,0,0,17775,0,0,0,0,0,0,0,17776,0,0,\n17777,0,0,17778,17779,0,17782,17783,0,0,0,0,0,0,0,0,0,0,17784,0,0,0,0,0,0,0,\n17821,0,0,0,17822,0,0,0,17823,17825,0,0,0,0,0,17826,17831,17832,17833,0,0,17845,\n0,0,0,17846,0,0,0,17848,17850,17854,0,17855,0,0,17859,0,0,0,0,0,0,17860,17861,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17870,17871,0,0,0,0,0,0,17872,0,0,0,17879,0,\n0,0,17881,17883,0,17884,0,17885,0,0,17886,0,0,17887,17891,17953,0,0,0,0,17954,0,\n0,17955,0,17968,0,0,17972,0,0,0,0,0,17974,0,0,0,0,17976,17978,0,0,17983,0,0,0,0,\n18003,0,0,0,0,0,18007,0,0,0,0,0,18009,0,0,0,0,0,0,0,18010,0,0,0,0,0,0,18012,0,0,\n18014,0,0,0,18015,0,0,0,18016,0,18017,0,0,0,18030,0,0,0,0,0,0,0,18031,0,0,18036,\n18037,18038,0,0,18049,18056,0,18057,18058,0,18059,0,0,0,0,0,0,0,0,18062,0,0,0,0,\n18064,0,0,0,0,0,0,0,0,18067,0,0,0,18068,0,0,18075,0,0,18078,18093,18094,0,0,0,0,\n0,0,0,0,18097,0,0,0,0,0,18098,18100,0,0,0,18108,0,18111,0,0,18112,0,18113,0,0,\n18115,18116,0,18118,0,0,0,0,18121,0,0,0,0,18123,0,0,0,0,0,0,0,0,0,18124,0,0,0,0,\n18125,18126,0,18127,0,0,18128,18135,0,0,0,0,0,0,0,0,0,18150,0,0,0,0,0,18151,\n18152,0,0,18156,18164,0,18166,18171,0,0,0,0,0,0,0,0,0,18172,18183,0,18184,0,0,0,\n0,18185,0,18187,0,0,0,0,0,18188,0,0,0,0,0,0,0,0,18189,0,0,18190,0,0,18191,18192,\n0,0,18194,18195,18196,0,0,0,18197,0,18203,0,18204,0,0,0,0,18205,0,0,0,18207,\n18208,0,0,18214,0,0,0,18215,18216,0,0,0,18220,0,0,18222,0,0,0,0,0,18223,0,18225,\n18231,0,18234,0,18235,0,0,0,0,18240,0,0,18241,18242,0,0,0,0,0,18243,18251,0,\n18253,0,18254,0,0,0,18266,0,0,0,0,0,0,18269,18270,18271,18273,18281,0,0,0,0,0,0,\n0,0,0,0,0,0,18282,0,18283,0,18284,0,0,0,0,0,0,18285,0,18287,18289,0,0,18290,0,0,\n0,0,18308,0,0,0,18310,0,0,0,0,0,0,0,0,0,0,0,0,18311,0,18312,18313,0,18315,0,0,\n18316,18320,0,18331,0,18332,0,18336,0,0,0,0,18337,0,18340,0,0,0,0,0,0,0,0,0,\n18341,0,18344,18345,0,18346,0,0,0,0,0,18348,0,18351,0,0,18356,0,0,0,0,0,0,18357,\n0,0,0,0,0,18367,0,0,0,18368,0,18369,0,18370,18371,0,0,0,18437,18444,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,18445,18450,0,0,0,0,18451,0,18452,0,0,0,18453,0,0,0,0,0,18455,0,\n0,0,18456,0,18457,0,18460,0,0,18461,0,0,0,0,0,0,0,0,18466,0,0,18467,0,0,0,0,\n18473,0,0,0,18476,0,18477,0,0,0,18478,18479,18480,0,0,0,18485,0,0,0,18486,0,0,0,\n0,0,0,18488,18490,0,0,0,0,0,0,18491,0,0,0,0,0,18495,0,0,18496,0,0,0,0,0,0,18505,\n0,18521,0,18522,18523,0,0,0,18525,18526,0,0,0,0,0,18527,0,0,0,0,18532,18533,0,\n18534,0,0,0,0,0,0,18535,18537,0,18538,0,0,0,0,0,0,18540,18541,18542,18543,0,\n18546,0,0,0,0,18553,18556,0,0,18558,0,0,18569,18571,0,0,0,18572,0,18574,0,0,0,0,\n18586,0,0,0,0,0,18588,0,0,18589,0,0,0,0,0,0,18590,0,18592,0,0,0,0,18594,0,0,0,\n18596,0,0,18597,18598,0,0,18601,0,0,0,0,18602,0,0,0,18603,18604,0,18605,0,0,0,0,\n18608,0,0,18611,0,0,0,0,0,0,0,0,0,18612,0,18616,0,0,18617,18619,0,0,0,18628,0,0,\n0,18629,0,0,18630,0,0,0,0,0,0,0,18631,0,18632,0,0,18635,18637,0,0,0,0,0,0,18641,\n18643,18648,0,18652,0,0,18653,0,18655,18656,0,0,0,18657,0,0,18666,18674,0,0,0,0,\n18677,18684,18685,0,0,18686,0,0,18690,0,0,0,0,0,0,0,18695,18696,0,0,0,0,0,0,0,0,\n0,0,18697,0,0,18700,0,0,0,0,0,0,18702,0,18708,0,0,18709,0,18710,0,0,18711,0,\n18714,0,0,18718,0,0,0,0,0,0,18719,0,0,18722,0,18726,0,0,0,0,0,0,0,0,0,0,0,0,0,\n18731,0,0,0,0,0,18739,18741,0,0,18742,0,18743,18744,18746,18748,0,18752,18753,0,\n0,18754,18763,0,18765,0,0,0,18766,0,0,0,18769,0,0,0,0,0,18773,18778,18779,18781,\n0,0,18784,18787,0,18788,0,18793,0,0,0,0,0,0,18795,0,0,18800,0,0,0,0,0,18801,\n18804,0,0,0,0,0,0,0,18806,0,0,0,18811,18815,18816,0,0,0,0,18825,0,0,18827,18829,\n0,0,18830,0,0,0,0,18831,0,0,18832,0,0,0,0,18833,0,18840,0,18841,0,18842,0,0,0,0,\n18843,0,18844,0,0,0,0,0,0,18845,18846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n18848,0,0,0,18853,18860,0,0,18862,18866,0,0,18867,18869,0,0,18874,18881,18891,0,\n0,0,0,0,0,0,0,0,0,18892,0,0,0,0,0,0,0,0,18895,0,18896,0,0,0,18900,0,0,0,18901,0,\n18902,18915,18916,0,0,0,0,0,0,0,0,18919,0,0,0,0,0,18920,0,0,0,18921,18929,0,0,0,\n0,18930,0,0,0,0,0,0,18932,0,0,0,0,18934,18942,0,0,0,18951,18957,0,0,0,0,18958,0,\n0,0,0,18959,18960,0,0,18961,0,0,18962,0,0,0,0,18963,18964,0,0,0,18965,0,18967,0,\n0,0,0,0,0,0,0,0,18968,0,18969,0,18970,18973,18976,0,0,0,0,0,0,18977,0,0,0,18981,\n0,0,0,18990,0,18998,0,0,0,0,0,18999,19003,0,0,19005,0,0,0,19006,0,0,0,0,0,0,\n19008,19011,0,0,19018,0,0,19019,0,19024,0,19031,19032,0,19039,0,19041,19050,0,0,\n0,19051,19055,19056,0,19059,19063,19064,0,0,19088,0,0,0,19093,19094,0,0,0,0,\n19095,0,19096,0,0,0,19097,0,0,19098,0,19099,19100,0,0,19103,0,0,0,0,0,0,0,19111,\n0,0,0,0,0,0,19112,0,0,0,19116,19117,0,19121,19122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,19123,19124,0,0,0,0,0,0,0,19125,19126,0,19128,0,0,0,0,0,0,0,0,0,0,\n19129,19130,19131,19132,0,0,19146,0,0,19147,19156,19158,0,0,0,0,0,0,0,0,19182,\n19185,0,0,19187,0,0,0,19193,0,0,0,0,0,19194,0,19197,0,0,0,0,19198,0,0,0,0,0,0,0,\n0,0,0,19202,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19203,0,19205,19210,\n0,0,0,19213,0,19218,0,0,0,19223,19229,0,0,19230,0,0,19231,19232,19233,19239,0,0,\n0,0,0,19240,0,19248,19249,0,0,0,0,19254,0,19256,19258,19259,0,0,19261,0,19266,0,\n0,0,19272,0,19278,19281,19282,0,0,0,0,0,0,0,0,0,0,0,0,19283,0,0,19284,0,0,19285,\n19287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19288,19291,0,19292,0,0,0,0,19297,0,19298,0,0,\n0,0,19302,19303,0,0,0,0,19304,19305,0,0,0,0,19314,0,0,19315,0,0,19321,0,0,0,0,0,\n0,0,19322,0,19333,0,19334,19335,0,19336,19337,0,0,0,0,0,0,0,0,0,0,0,19346,0,0,\n19353,0,19354,19362,0,19366,19367,0,0,19369,0,19375,0,19377,19380,19388,0,0,0,0,\n0,19389,19390,0,0,0,0,19392,0,0,0,0,0,19402,0,0,0,0,0,0,0,0,19412,0,0,19413,\n19422,0,19424,0,0,0,19425,0,0,0,19428,0,0,0,0,19431,0,0,0,0,0,19432,0,0,0,0,0,\n19448,19459,0,0,19461,0,19462,19463,0,19467,19474,19482,0,0,0,0,19494,0,0,0,0,\n19501,0,0,0,0,0,0,0,0,0,0,19502,19504,0,0,0,0,0,0,0,19505,0,0,0,0,19506,19507,0,\n0,0,19508,0,0,19511,0,0,19514,0,19515,0,19516,0,19518,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,19530,0,19537,19538,0,19543,19546,0,19547,19551,0,0,0,0,0,0,19552,\n19553,0,0,0,0,0,0,0,0,0,0,0,0,19555,0,0,19556,0,0,0,0,0,0,0,0,0,0,0,0,19560,\n19561,0,0,19562,0,0,0,0,0,0,19565,19567,0,19568,0,0,0,19569,19570,0,19578,0,0,0,\n0,19580,0,0,0,0,19581,19584,0,0,0,0,0,0,0,19585,19586,0,0,0,19587,19588,0,19589,\n0,0,0,0,0,0,19592,19593,19599,0,19600,0,0,19604,0,0,19605,0,19606,19608,19610,0,\n19613,19614,0,0,0,0,0,0,19616,19617,0,0,19618,0,0,19619,0,0,0,19620,19621,19631,\n0,0,19632,19634,19636,0,19643,0,0,19644,19658,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,19659,0,0,0,0,0,0,0,0,0,0,0,19675,19677,0,0,0,0,19679,0,19683,0,19684,0,0,\n0,0,0,0,19687,0,0,0,0,0,0,0,0,19688,19689,19692,0,0,0,0,0,0,0,19695,19697,0,0,0,\n0,0,19698,19699,0,0,19700,0,19702,0,0,19703,0,0,0,0,0,0,19704,19708,0,19710,0,\n19713,0,0,0,19715,0,0,0,0,19718,0,0,0,0,0,0,0,19720,0,19722,0,0,19725,0,0,0,0,0,\n0,0,0,0,0,0,0,0,19730,0,0,0,0,0,19731,0,19734,19735,19739,0,0,19740,0,19741,0,0,\n0,19746,0,0,19747,0,19771,0,0,0,0,0,0,0,0,19772,19775,0,0,0,0,0,0,19778,0,0,0,0,\n0,19779,0,0,19780,19790,0,19791,0,0,19792,0,0,0,19793,0,0,19796,19797,0,0,0,\n19799,0,0,0,19801,0,0,0,0,19803,0,19804,0,19805,0,0,19807,0,0,0,19808,0,0,0,0,0,\n0,19809,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19816,0,19821,0,19822,19830,19831,0,0,\n0,19833,0,0,0,0,0,0,0,0,0,0,19838,0,0,0,0,19839,0,0,19843,0,0,0,0,19845,0,0,0,0,\n19847,0,0,19848,0,19849,0,0,0,0,0,0,0,19851,0,0,0,19854,0,0,0,0,0,0,0,0,0,19864,\n0,19865,0,19866,0,0,0,0,0,0,0,19868,0,0,19870,0,0,19871,0,0,19872,19873,19875,0,\n19880,19882,19884,0,0,19885,19886,19888,0,0,0,0,0,0,0,0,0,0,0,0,19890,19892,\n19893,0,0,19894,0,0,0,19895,0,19896,19902,0,0,19903,0,0,19905,0,0,0,19906,0,\n19908,0,19909,19911,0,0,0,19913,19920,0,19938,19939,19940,0,0,0,0,0,0,0,19942,0,\n19943,0,19945,0,0,0,19951,19952,19954,19960,0,19965,0,19971,0,0,0,0,0,19975,0,\n19976,0,19990,0,0,19991,0,19993,0,19995,0,0,0,19998,19999,20001,0,20003,20005,0,\n20011,20012,0,0,0,0,0,0,20014,0,20020,0,0,0,0,20021,0,0,0,0,0,20023,20024,0,0,0,\n0,0,20025,0,0,20027,0,0,20029,0,0,20032,0,0,0,0,20044,20045,0,20048,20049,0,0,\n20050,0,20052,0,0,20054,20057,0,0,0,0,0,0,0,0,0,20059,0,0,20061,0,20062,0,20064,\n0,0,20066,0,0,20067,0,0,0,0,20069,0,0,0,0,0,0,20070,20071,0,0,0,0,0,0,0,0,0,0,0,\n20072,0,0,20073,20074,0,0,0,0,0,20075,0,20078,0,0,0,0,20080,0,20081,0,0,0,0,0,0,\n20095,0,20098,0,0,0,0,0,0,0,20107,0,0,0,0,0,0,0,0,20112,0,0,0,20113,20114,0,0,0,\n20115,20123,20124,0,0,0,20131,20133,20134,0,0,0,0,20136,0,0,20137,20138,20150,0,\n20152,0,0,0,20153,0,0,20154,0,0,0,20158,0,20163,0,0,20164,0,0,0,0,0,0,0,20166,0,\n20168,0,20170,0,20175,0,0,20178,0,0,0,0,20223,0,0,0,0,20224,0,20226,0,0,20230,0,\n20231,0,0,0,0,20232,0,0,20233,20234,0,20244,0,20247,0,0,0,0,0,0,20249,0,0,0,\n20250,0,0,0,0,20251,0,20253,0,20254,0,0,0,0,20256,0,0,20264,0,0,0,0,20266,0,0,0,\n20278,0,0,20279,20282,0,0,0,0,0,20283,0,20284,0,20285,0,20287,20290,0,0,0,0,\n20292,0,0,0,0,20293,20297,0,0,0,0,0,0,20299,0,20300,20303,0,0,0,0,0,0,20307,0,0,\n20308,0,20309,0,20310,0,0,0,0,0,0,20312,0,0,0,20314,0,0,0,0,20315,20316,0,20322,\n0,0,0,0,0,0,20339,0,0,0,20342,0,0,0,0,20352,0,0,0,0,0,0,0,0,0,0,20362,0,0,20365,\n0,20375,20377,0,0,0,0,0,0,0,0,0,0,0,20378,20379,0,20380,0,0,20381,0,20382,0,\n20383,0,20388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20390,20392,20393,0,0,20395,0,0,0,0,0,\n20396,0,0,0,0,0,0,0,0,20398,20415,0,0,0,20417,0,0,20420,0,0,20426,20428,0,20431,\n0,0,20432,0,20433,20434,20435,0,0,0,0,20440,0,0,0,0,0,20442,0,20443,0,20446,0,0,\n0,0,20448,0,20451,0,0,0,0,0,0,0,0,0,20452,20453,0,0,20454,0,0,0,0,0,0,20457,0,\n20458,0,0,0,20465,0,0,0,0,0,20469,0,0,0,20473,0,20476,0,0,0,0,0,0,0,0,20477,0,0,\n20485,0,0,20486,0,0,20487,0,20496,0,20497,0,0,20498,0,0,0,0,0,0,0,0,0,0,20499,\n20500,0,20501,0,0,0,0,0,20520,20527,0,20529,0,0,0,0,20539,0,0,20540,0,0,0,20543,\n0,0,0,20546,0,0,0,0,0,20548,0,0,20563,0,0,20564,0,20566,0,0,0,0,0,20589,0,0,0,0,\n20590,0,0,20593,20594,0,0,0,0,20595,0,20597,20598,0,0,0,20618,20620,0,0,0,0,\n20621,0,0,0,0,20627,0,0,0,0,0,20628,0,0,0,20629,0,20630,0,0,20639,0,0,0,0,0,\n20707,0,0,20709,0,0,0,20713,20714,0,0,0,0,0,20724,20725,0,0,0,0,20726,20728,\n20729,0,20733,0,20734,0,20735,20736,0,20737,0,0,20744,0,20745,0,20748,0,0,20749,\n0,0,0,0,0,0,0,0,20750,0,0,0,0,20754,0,0,0,20761,0,0,20763,0,0,0,0,0,0,0,20766,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,20767,0,0,0,0,20768,0,20769,20777,0,0,0,0,0,0,20785,0,\n0,0,20786,20795,20801,0,20802,0,20807,0,0,20808,0,0,20810,0,0,20811,0,20812,0,0,\n0,0,0,20813,0,0,20818,20820,20821,0,0,0,20822,0,20823,0,0,0,20826,0,0,0,0,0,0,0,\n20829,20830,20831,0,20832,20836,0,0,20839,0,0,20840,20842,0,20843,0,20844,0,\n20854,0,0,0,20855,0,0,0,0,20856,0,0,0,20869,0,0,20871,0,0,0,0,0,0,0,20873,0,0,0,\n0,0,20876,0,0,0,0,0,20880,0,0,20882,0,0,0,0,20883,20884,0,0,20890,0,0,0,0,0,0,0,\n0,0,20891,0,0,0,0,0,20905,0,20906,20910,0,0,20912,20915,0,0,0,0,0,20916,0,20917,\n0,20919,20920,20922,0,20927,0,20928,20929,20930,0,0,20935,0,0,20939,0,0,20941,0,\n0,0,20943,0,0,0,20946,20947,0,0,0,0,0,20950,0,20954,0,0,20955,20964,0,0,20967,0,\n0,0,0,0,20973,20975,0,0,0,20984,0,20987,20988,0,0,0,0,0,20989,0,0,0,20995,0,\n20998,0,20999,0,0,0,0,21000,21001,0,0,0,0,21008,0,21010,0,21016,0,0,0,21017,\n21018,0,0,0,0,0,21021,21026,21027,21028,0,0,21029,0,0,0,0,0,21030,0,0,0,0,0,0,0,\n0,0,0,0,0,0,21031,21032,0,0,0,0,0,21037,0,0,21038,0,0,0,0,0,0,0,0,0,21039,0,\n21041,0,21046,21047,0,0,0,21049,21053,0,0,21057,21064,21065,0,0,21066,21067,0,0,\n0,21069,0,0,0,21071,21072,0,0,21073,0,21074,0,0,21078,0,0,0,0,21079,0,0,21080,\n21081,0,0,21086,21087,0,21089,0,0,0,0,0,0,0,21091,0,21093,0,21094,0,0,0,0,0,0,0,\n0,21095,0,0,0,0,0,21096,0,21098,0,0,0,0,0,0,0,21099,0,0,21100,21101,21102,0,0,0,\n0,0,21103,0,21104,0,0,0,0,0,21105,21108,21109,0,0,21112,21113,0,0,0,0,0,0,21115,\n21122,21123,0,0,0,0,0,21125,0,0,0,0,0,0,0,0,21129,21131,0,0,21134,0,0,0,21137,\n21142,0,21143,0,0,21144,0,21145,21146,0,21152,21154,21155,21156,0,0,0,21160,0,0,\n0,0,0,0,21161,0,21164,0,21166,0,0,0,0,21170,0,0,0,0,21171,0,0,21172,0,21174,0,\n21175,0,0,0,0,0,21176,21179,21188,0,0,0,21189,0,0,21190,0,0,0,21192,0,0,21193,0,\n0,0,21198,0,21212,0,0,21213,0,0,0,0,0,0,21215,21216,0,0,21223,21225,0,21226,0,0,\n0,0,21227,21228,0,0,21229,0,0,0,0,21230,21236,0,0,0,0,0,0,0,0,0,0,0,0,0,21237,0,\n0,21238,21239,0,0,0,0,21256,0,0,0,0,0,21257,0,0,0,0,0,0,0,21259,0,0,0,21263,0,\n21272,0,21274,0,21282,0,0,0,0,0,0,0,0,21283,0,0,0,0,0,0,0,0,21294,0,0,21297,0,0,\n0,0,21298,0,0,0,21299,0,21300,21302,0,21316,0,21318,21322,21323,0,21324,0,21326,\n0,0,0,21327,21328,0,0,0,21352,0,0,21354,21361,0,0,0,0,0,0,0,0,0,0,0,0,0,21362,0,\n0,0,21363,0,0,0,0,0,0,0,0,0,21366,0,0,21367,21372,21374,0,0,0,21375,21377,0,\n21378,0,0,0,21380,0,0,0,0,0,0,0,0,0,0,21381,0,0,0,0,0,0,21382,0,21383,0,0,21384,\n0,0,21385,0,0,0,0,21389,21390,0,0,0,0,0,0,0,0,0,0,0,0,0,21397,21398,0,0,0,0,0,0,\n0,0,0,0,21399,0,21400,0,0,0,0,21402,0,0,0,21403,21404,0,21405,21406,0,0,0,21407,\n0,0,0,0,0,0,0,0,0,0,0,0,21408,0,0,0,0,21409,0,21421,0,21422,0,0,0,21425,21428,0,\n0,0,0,21429,0,0,0,0,0,21433,0,0,0,0,0,0,0,0,0,0,21434,0,21443,0,21444,21449,0,\n21452,0,21453,21454,0,0,0,21457,0,0,21458,0,0,0,21460,21461,0,0,21464,0,0,0,\n21473,21478,0,0,21479,0,0,21481,21483,0,0,0,0,0,0,0,0,21484,0,0,21485,21486,0,0,\n21488,0,0,0,0,0,0,21523,0,0,21525,0,0,0,0,0,0,0,21526,0,0,0,0,0,0,21529,21530,0,\n0,21531,0,0,21533,0,0,21539,21564,0,21567,0,0,0,0,0,0,0,0,21575,0,0,0,0,21577,0,\n0,0,0,0,21591,0,0,21604,0,0,0,0,0,0,0,0,0,21605,0,21606,0,0,21617,21618,21619,\n21620,0,0,0,0,0,0,0,0,0,0,0,0,0,21623,0,0,0,0,21631,0,21635,0,0,0,0,21639,21646,\n21653,21662,0,0,21663,21664,0,21666,0,0,21667,0,21670,21672,21673,0,21674,21683,\n0,0,0,0,0,21684,0,21694,0,0,0,0,21695,21700,0,21703,0,21704,0,0,21709,0,0,0,\n21710,0,0,0,0,0,0,0,0,21711,0,0,0,21712,0,21717,0,21730,0,0,0,21731,21733,0,0,0,\n0,21737,21741,21742,0,21747,0,0,0,21749,0,0,0,0,0,0,0,0,0,0,0,0,0,21750,0,0,0,0,\n0,21752,0,0,0,0,21753,0,0,0,0,0,0,21755,21756,0,21757,0,0,0,0,0,0,21760,0,0,\n21763,0,0,0,0,0,0,0,0,0,21764,0,0,21766,0,0,21767,0,0,0,0,0,0,0,0,0,21773,0,\n21774,0,0,21775,0,0,0,0,21776,0,0,21777,0,0,0,0,0,0,0,0,0,21780,21787,21788,\n21791,0,0,0,21797,0,0,0,0,0,21805,0,0,0,0,21806,0,21807,21809,0,21810,21811,0,\n21817,21819,21820,0,21823,0,21824,0,0,21825,0,0,21826,21832,0,0,0,0,0,21833,\n21848,21849,0,0,21867,21870,21871,21873,0,0,0,21874,0,0,0,0,0,0,0,0,0,21875,0,\n21878,0,0,0,21879,0,21881,21886,0,0,0,0,21887,0,0,21888,21894,21895,21897,0,\n21901,0,21904,0,0,21906,0,0,0,21909,21910,21911,0,0,21912,0,0,21913,21914,21915,\n0,21919,0,0,0,0,0,0,0,21921,0,0,21922,21933,21939,0,0,0,0,0,0,0,0,0,0,0,21944,0,\n0,0,0,0,21945,0,21947,0,0,0,0,0,0,0,0,0,0,21949,0,0,0,21950,0,0,0,0,0,0,0,0,0,0,\n0,0,0,21951,0,21952,0,0,0,0,0,0,0,0,0,21954,21957,0,0,0,0,21958,0,21959,0,0,0,0,\n0,0,21962,21963,0,0,0,0,0,0,0,0,21964,21965,0,0,21969,21970,0,0,0,21974,0,0,\n21980,21981,0,21982,0,0,0,0,0,21985,0,21988,0,21992,0,21999,0,0,0,0,0,0,22001,0,\n22002,0,0,0,0,0,0,22003,0,0,0,0,0,22004,0,0,0,22008,0,22009,22015,0,0,22016,0,0,\n0,22017,22019,0,0,0,0,0,0,0,0,0,22020,0,0,0,0,0,0,0,0,0,0,22021,22037,0,22039,0,\n0,0,22040,0,0,0,22048,22049,0,0,22053,22055,22056,22059,0,0,22060,22061,0,0,\n22064,0,0,0,0,22066,0,0,0,0,0,0,0,22073,0,0,0,22074,22075,0,0,0,0,0,0,0,22076,0,\n0,0,0,22077,22084,22099,0,0,0,0,0,0,0,22104,0,0,22107,0,22108,0,22109,0,22110,0,\n0,0,0,0,0,0,22111,22119,0,22120,22122,0,0,0,0,22125,0,0,0,22128,22129,0,0,0,0,0,\n0,22141,0,0,0,22142,0,0,22144,22146,0,22148,22149,22151,22154,0,0,0,22162,0,0,0,\n0,22164,22177,0,0,0,0,22179,0,22182,22183,0,0,22184,22188,0,0,0,0,0,0,0,0,22190,\n0,22194,22201,0,0,22208,0,22209,0,22212,0,0,22215,0,22223,22231,0,0,22232,0,\n22234,0,0,22235,22236,0,22237,0,22240,0,0,0,0,0,22241,0,0,0,22242,22246,22247,0,\n0,0,22259,22268,0,22269,0,0,0,0,0,0,0,22270,0,0,0,0,22271,0,22272,0,22277,0,0,0,\n0,0,22278,22280,22283,22286,0,0,22287,22289,0,0,22290,0,22293,0,0,0,0,0,0,0,0,0,\n0,22295,0,22301,22302,0,0,0,22305,0,22308,0,0,0,0,0,0,0,0,0,0,22315,0,0,0,22317,\n0,22334,0,0,0,22335,0,0,0,0,0,22336,0,22338,22344,0,22347,22349,0,22350,0,0,0,0,\n0,0,0,22357,0,0,0,0,0,22358,0,0,0,0,0,0,0,0,0,0,22359,22360,0,0,0,0,0,0,0,0,\n22361,22366,0,0,22369,0,22370,22373,0,0,0,0,0,22375,0,22377,0,0,0,0,0,22378,0,0,\n0,0,22381,0,0,0,0,22382,0,22383,0,0,0,0,0,0,0,0,0,22391,0,0,22392,22395,22396,\n22402,0,0,0,0,0,0,0,0,0,0,0,0,0,22405,0,0,22406,0,0,22408,0,0,22409,22410,0,0,0,\n0,0,0,22424,0,0,0,0,22426,0,0,0,22427,0,22428,0,22432,0,22435,22442,22443,0,0,0,\n0,22444,0,0,0,0,0,22446,0,22454,0,22455,0,0,0,22465,0,22470,0,22471,0,0,0,0,\n22472,22473,0,22487,0,0,0,22488,0,0,0,0,22489,0,0,22499,0,0,0,0,0,0,22514,0,0,\n22515,0,0,0,0,0,0,0,22516,0,0,0,22517,22520,0,0,0,22534,0,0,22535,0,0,22536,0,\n22540,22553,0,22555,0,0,0,0,22561,0,0,22562,0,0,0,0,0,0,0,0,0,0,0,22566,0,0,0,0,\n22567,22568,0,0,22575,0,22579,0,22582,22583,22585,0,0,0,0,0,22586,0,0,22587,0,0,\n22590,0,0,0,0,0,22591,0,22592,0,0,0,0,0,22593,0,22602,0,0,22604,0,0,22609,0,0,\n22618,0,0,0,0,0,0,22619,0,22624,22625,0,0,22638,0,0,0,0,0,22639,0,0,22640,0,0,0,\n0,0,0,0,22644,0,22645,22647,0,0,0,0,22652,22653,0,0,0,22654,0,22655,0,0,0,22656,\n0,0,0,0,0,0,0,0,0,0,22673,22675,22676,0,0,22678,22679,0,22691,0,0,0,0,0,0,0,\n22693,0,0,22696,0,22699,22707,22708,0,0,0,0,0,0,0,0,22718,0,22719,0,0,0,0,22723,\n0,0,0,22724,22725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22726,22728,0,0,0,0,0,0,0,0,22729,\n0,0,22731,0,0,0,0,22732,22735,22736,0,0,0,0,22739,0,22749,0,0,22751,0,0,0,0,0,0,\n0,0,0,0,0,22758,0,0,0,0,0,22760,0,0,0,0,0,22764,22765,22766,0,22768,0,0,0,0,0,\n22769,22770,0,0,0,0,0,0,22771,0,0,22772,22775,0,22776,22777,22780,0,0,22782,\n22784,0,22787,0,22789,22796,0,0,0,0,0,22798,0,0,0,0,0,0,22802,0,22803,22804,0,0,\n0,0,0,0,0,0,0,0,22805,0,0,22810,22811,22814,22816,0,22825,22826,0,22831,22833,0,\n0,0,0,0,0,0,0,0,22834,0,22836,22838,0,22839,0,0,0,0,0,22840,0,22847,0,0,0,0,0,\n22856,22857,0,22858,22859,0,0,22862,0,0,22864,0,0,0,0,22865,0,0,0,0,0,0,0,0,0,0,\n0,22866,0,22867,22868,0,0,0,0,22869,0,22871,0,22872,0,22873,22881,22882,22884,\n22885,0,0,0,0,0,0,0,22886,22887,0,22894,0,22895,0,0,0,22900,0,22901,0,0,0,0,\n22904,0,0,0,0,22905,22907,0,0,0,22915,22917,0,0,22918,0,0,0,22920,0,0,0,22929,\n22930,0,0,0,22941,22942,0,0,0,22943,0,0,0,22944,0,0,0,0,0,0,0,22946,0,22947,0,0,\n22954,0,22956,0,0,22962,0,0,0,0,0,0,0,22963,0,0,22964,0,0,0,0,0,0,0,22965,0,\n22968,0,0,0,22969,0,0,0,0,0,22970,0,22971,0,0,0,0,0,22978,0,0,22979,0,22987,0,0,\n22989,0,0,0,0,0,0,22990,0,23005,0,0,0,0,0,0,0,23006,23007,23008,0,0,23023,23024,\n23029,0,0,0,0,23030,0,0,0,0,0,23032,0,0,0,0,0,23035,0,0,0,0,23038,0,0,0,23048,0,\n23049,23052,23053,23060,23061,0,23063,0,0,0,0,23067,23068,0,0,0,23069,23073,0,0,\n0,23127,0,23128,0,0,0,0,0,23129,0,23138,23141,0,23149,0,0,23150,0,0,0,23152,0,0,\n0,0,0,0,0,0,23154,0,0,0,0,23157,23159,23160,0,0,0,0,0,0,0,0,0,0,0,0,23180,0,0,0,\n0,23181,0,0,23188,0,23189,0,0,0,0,0,0,0,0,0,0,0,0,23195,0,0,23196,23199,0,0,0,0,\n0,0,0,0,0,23202,0,23204,0,23207,0,23209,23210,0,0,0,0,0,0,23227,23229,0,0,23230,\n23234,23238,0,0,0,23245,23246,23248,0,0,0,0,23249,23254,0,0,0,23265,0,0,0,0,0,0,\n0,23268,0,23276,0,0,0,0,23277,0,23297,0,23298,0,0,0,0,23299,0,23302,0,0,23303,\n23312,0,0,23314,0,23320,0,0,0,0,23324,0,23325,0,23328,0,23334,0,0,0,23337,0,0,0,\n0,23343,23344,23346,0,23348,0,0,0,0,0,0,0,0,23353,0,0,0,0,23355,0,23356,23358,0,\n0,0,23359,23360,0,23361,0,23367,0,23369,0,0,23373,0,23378,23379,0,23382,23383,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,23387,0,0,0,0,0,0,23388,23390,0,0,23393,23398,0,0,0,\n23399,0,0,0,23400,0,0,0,0,23401,0,0,0,23415,0,0,0,0,0,0,0,0,23416,0,23422,0,\n23443,23444,0,0,0,0,23448,0,23454,0,0,0,0,0,0,23456,0,0,23458,23464,0,0,0,0,0,0,\n23465,0,0,0,23470,23471,0,0,23472,0,0,0,23473,23496,0,0,0,0,0,0,0,0,23497,0,\n23499,0,0,23502,0,0,23503,0,0,23513,0,0,23515,0,0,0,23517,0,0,0,0,23518,23519,\n23521,23524,0,23525,23528,23539,0,0,0,0,0,23541,0,0,23544,0,0,23556,0,0,23557,0,\n0,0,0,0,0,0,0,0,0,0,0,0,23559,0,23560,0,0,23561,0,0,23566,0,0,0,0,0,23568,23569,\n23570,0,0,0,0,23571,0,23574,0,0,0,0,0,0,0,0,0,0,0,23575,0,23579,0,0,23581,0,0,0,\n0,0,0,23587,0,0,0,0,0,0,0,23596,23598,0,0,0,0,23602,23606,0,0,23607,0,23608,0,0,\n0,23614,23616,0,0,0,0,0,23618,0,0,23619,0,0,0,0,23621,23626,0,23627,0,0,0,0,0,0,\n0,23629,0,23630,0,0,0,0,23634,0,23636,0,0,0,0,0,0,23638,0,0,0,0,23640,23667,0,\n23669,0,0,0,23681,0,0,0,0,0,0,0,23682,0,23683,0,0,0,0,0,23684,0,0,0,23685,23689,\n0,23693,23694,23700,0,23702,0,23709,0,0,0,0,0,0,0,23712,0,0,0,0,0,23714,0,0,\n23715,0,0,0,0,23718,0,0,23720,0,0,0,0,23722,0,0,0,23726,23729,0,23741,23746,0,\n23748,0,0,0,0,23749,0,0,0,0,0,23750,0,0,0,0,23751,0,23753,0,0,0,0,23757,23765,0,\n0,0,23770,0,0,0,0,0,0,0,23771,0,23772,23781,0,0,23796,0,0,0,0,23798,0,23799,0,0,\n0,23802,0,0,23806,0,23807,0,0,23808,0,23809,0,23819,0,0,0,23821,0,23827,0,0,0,\n23829,0,0,0,0,0,0,0,23830,0,0,0,0,0,0,23832,23833,23834,23835,0,0,0,0,23837,\n23838,0,0,0,0,0,23846,0,0,0,0,0,0,23847,0,0,0,0,0,23879,23881,0,0,23882,23883,\n23895,0,23899,0,0,0,0,23901,0,0,0,0,0,0,23902,0,0,0,0,0,23903,23905,0,23906,0,\n23907,23918,23919,23920,0,23922,0,23924,0,23927,0,23934,0,23937,23941,0,23942,\n23946,0,0,0,0,0,23955,23956,23958,0,0,0,0,0,0,23959,0,23962,23965,0,23966,0,0,0,\n0,23967,23968,0,0,23973,0,0,23974,0,0,0,0,23975,0,23976,0,0,0,0,0,0,0,0,0,0,0,0,\n0,23977,0,0,0,0,0,0,0,0,23980,0,0,23984,0,23985,0,0,23987,0,0,23988,23990,23991,\n0,0,0,0,0,0,23992,0,0,0,0,0,0,0,0,23994,0,0,0,23998,0,0,0,0,0,0,0,0,0,23999,0,0,\n24003,0,24004,0,24006,0,0,0,24007,0,0,24008,0,0,0,0,0,0,0,24009,0,0,24010,0,0,\n24011,0,0,24013,24014,0,0,24015,24016,24027,0,24028,24029,0,24030,0,0,0,0,0,\n24033,24034,0,24035,0,0,24036,0,0,24044,0,24048,24049,24063,24067,0,24068,24070,\n0,0,24071,24078,24087,0,24090,0,0,0,24095,0,24098,24101,24104,24106,0,24107,0,0,\n0,24108,0,0,0,0,24110,24111,0,24113,0,0,24115,24120,0,0,0,0,0,0,24124,0,24125,0,\n24126,0,24127,0,0,0,0,0,24135,0,0,24136,0,24137,24142,0,0,0,24146,0,0,24147,\n24149,24154,0,24163,0,0,0,24165,24166,24167,0,0,0,0,0,0,0,0,0,0,24169,24170,\n24175,0,0,0,24178,0,0,24179,0,0,24181,0,24184,24197,0,24201,24204,0,0,0,0,0,0,\n24206,24212,24220,0,0,0,24224,0,0,0,0,0,0,0,0,24226,0,24234,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,24235,0,24236,0,0,0,0,0,24239,24240,24241,0,0,24248,0,0,24249,0,\n24251,0,0,0,0,0,0,24253,0,24268,0,0,0,24269,0,24271,24272,0,0,0,0,24273,0,0,\n24274,0,0,24279,0,0,0,0,0,0,0,24280,0,24293,24294,0,0,0,0,0,0,24296,0,0,24323,0,\n0,0,24329,24330,24331,24339,0,24351,0,0,24369,24370,0,0,0,24371,0,0,0,0,24372,\n24373,24374,0,0,0,0,0,24378,0,0,0,0,24379,0,24381,0,24383,24389,0,24390,0,0,\n24394,24395,24400,0,0,0,24401,24402,0,24406,0,0,0,24411,0,0,0,24415,0,24416,0,0,\n0,0,0,24417,0,24419,0,24422,0,24423,24428,0,24435,0,0,0,24439,0,0,0,24440,24442,\n24446,0,0,0,24447,24448,24449,24452,0,0,0,0,24453,24457,0,0,24458,24459,24460,0,\n24465,0,0,0,0,0,0,0,24470,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24471,0,24473,\n24474,24475,24476,0,24478,0,0,0,0,24480,0,0,0,0,0,0,0,0,0,0,24481,0,0,0,0,0,0,0,\n0,0,0,24482,24485,0,0,0,0,24486,0,0,0,24488,0,0,0,24494,0,0,0,0,24497,0,0,24498,\n0,0,0,24499,24506,0,0,0,24507,0,0,24511,0,0,24513,24514,0,0,0,0,0,24517,0,24518,\n0,24520,0,24521,24524,24525,0,0,0,0,0,24527,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24528,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24537,24539,0,24540,0,0,0,24548,0,0,0,0,0,24549,\n24550,0,0,0,24553,24554,0,24555,0,24556,0,24558,0,0,0,0,0,24560,0,0,0,24561,0,0,\n0,0,0,24562,0,0,0,0,0,0,0,0,0,0,0,0,0,24567,0,0,0,0,0,24569,0,0,0,24574,0,24575,\n0,0,0,0,0,0,0,0,0,0,0,24577,24581,0,24584,0,0,0,0,0,24585,0,0,0,0,0,24586,0,0,\n24587,0,24588,0,0,0,0,0,0,0,0,0,0,24590,24591,0,0,0,0,24592,0,0,0,0,0,0,0,24594,\n0,0,0,0,0,0,0,24596,24597,0,0,0,0,24602,24603,0,0,0,0,24604,0,0,24605,0,24610,0,\n0,24611,0,0,0,0,24612,24615,24616,24624,0,0,0,24627,0,24638,24639,0,0,0,0,24640,\n0,0,0,24655,24656,24657,0,0,0,0,0,0,0,0,24662,0,24663,24664,0,0,0,0,0,24665,0,0,\n0,0,24667,0,0,0,0,0,0,24668,24669,0,24670,24674,0,0,0,24675,0,24678,0,0,24679,0,\n0,0,24681,0,24683,0,0,0,0,24684,0,24685,0,0,24686,0,0,24688,24689,0,0,0,0,24690,\n24691,0,0,0,0,0,0,0,24697,0,24698,0,0,0,0,0,0,0,0,24709,0,0,0,0,0,24710,0,24712,\n0,0,0,0,0,0,24713,24714,0,24715,0,24716,24718,0,24719,0,0,0,0,24720,0,0,24725,0,\n0,24738,0,24749,24750,0,0,0,24752,0,0,0,24753,0,0,0,24758,0,0,0,0,0,24762,0,\n24763,0,0,0,0,0,0,0,24764,0,0,0,0,0,24765,24767,24768,0,24772,0,0,0,0,24773,0,0,\n0,0,24777,0,0,0,0,0,24785,0,24786,24788,0,0,0,24789,0,0,0,0,24794,24798,0,24799,\n24800,0,0,0,24803,0,24804,24806,0,24807,0,0,0,24810,0,0,0,0,0,0,24827,24828,0,\n24835,0,0,0,0,0,0,24836,0,0,0,0,0,24839,0,24843,24844,0,0,0,0,0,0,0,0,0,0,24847,\n0,0,24848,0,0,0,0,0,0,24849,0,24850,24851,0,0,0,24852,0,24853,0,0,0,0,0,0,0,0,0,\n24854,0,24855,0,0,24868,0,0,0,24883,0,0,0,24884,0,24895,24897,0,0,0,0,0,24899,0,\n0,0,0,0,24900,0,24913,0,0,0,0,0,0,24914,0,0,24917,24930,24931,0,0,0,24932,0,0,\n24939,0,0,24942,0,0,0,0,0,0,0,0,0,24945,24950,0,24951,0,0,24953,0,0,0,24954,0,\n24959,0,0,0,24961,0,0,24962,0,24964,24968,24970,24972,0,0,0,0,0,24976,0,0,0,\n24977,0,24982,0,0,24983,0,0,24984,0,0,0,24993,0,0,0,24994,0,0,25001,0,0,0,25003,\n0,0,25018,0,0,25023,0,0,0,25034,0,0,25035,25036,0,25037,0,0,0,0,0,0,0,25039,0,0,\n0,0,0,25040,0,0,0,0,0,0,0,25042,0,0,25043,25045,0,0,0,0,0,0,25049,0,0,25051,0,\n25052,25053,0,0,25054,0,0,0,25055,0,0,0,0,25057,25059,0,0,25060,25064,0,25065,\n25069,25070,0,0,0,0,25072,0,25073,0,25090,0,0,25092,25093,25101,0,0,0,0,0,0,\n25105,25108,0,0,25113,0,0,25115,25116,0,0,0,0,0,0,25117,0,0,0,25120,25121,0,0,0,\n0,0,0,0,25125,0,0,0,25126,0,25130,25134,0,25139,0,25143,0,0,0,25151,0,25161,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25163,0,0,0,0,0,0,0,25174,0,25175,0,25207,0,0,\n0,25209,0,0,0,0,25213,0,25219,0,25223,0,25225,0,0,0,25227,0,0,0,25228,0,0,0,\n25229,0,0,0,0,0,0,0,25231,25233,0,0,0,0,25237,25239,0,0,0,25243,0,0,0,25252,0,\n25257,25258,0,0,0,0,25260,25265,0,25268,0,0,25273,25324,0,25325,0,25326,0,0,0,0,\n0,0,0,0,25327,0,0,0,0,0,25328,0,0,0,0,0,0,25332,0,0,0,25333,0,0,0,25336,25337,\n25338,0,0,25343,0,25350,0,0,0,0,0,0,0,25352,0,25354,0,25375,0,25379,0,0,0,0,\n25384,0,0,0,0,0,0,0,0,0,25386,0,25388,0,25390,0,0,25399,0,0,25401,0,0,0,25402,0,\n0,0,25407,0,0,0,0,0,0,0,0,0,0,0,25413,25415,0,0,25417,0,0,0,0,0,0,0,25419,0,0,0,\n25421,0,0,0,25424,0,0,0,0,25433,0,0,0,0,0,0,0,0,0,25435,0,0,0,0,0,0,25436,0,0,0,\n25437,0,0,25440,0,0,0,0,0,0,25442,0,0,25443,0,25446,0,0,25449,0,0,0,25450,0,0,0,\n0,25452,0,25453,25454,25455,0,0,0,25456,0,25457,0,0,0,25459,0,25461,0,25468,0,0,\n0,0,0,0,0,0,25469,0,0,0,0,0,25471,0,0,0,0,0,25474,0,0,0,0,0,0,0,0,25475,0,0,0,0,\n25477,0,0,0,0,25483,0,0,0,0,0,25484,0,0,0,0,0,0,0,0,0,0,0,0,25485,0,25497,0,0,\n25498,0,25504,0,25510,0,25512,0,0,25513,25514,0,0,0,0,0,0,25517,25518,25519,0,\n25520,0,0,0,0,0,0,0,25521,0,25522,25527,25534,0,25536,0,25537,0,0,25548,25550,0,\n0,25551,0,25552,0,0,0,0,0,25554,0,25555,0,25556,25557,25568,0,0,0,25570,25571,0,\n0,0,0,0,0,25574,0,0,0,0,25579,0,0,0,25581,0,0,0,25582,0,0,0,0,0,0,0,0,0,25588,0,\n0,0,0,25589,0,0,0,0,25590,0,25591,25592,25593,0,25594,0,0,0,25596,0,25597,25615,\n0,0,0,0,0,25618,0,0,0,0,25619,25623,0,0,25629,0,0,25631,0,0,0,25635,25636,0,0,\n25649,0,0,0,0,25654,0,0,0,25661,25663,0,0,25671,0,0,25678,25698,0,25699,25702,\n25703,0,0,0,0,0,0,0,0,25704,0,0,0,0,0,25706,0,0,25710,0,25711,0,25712,0,25715,\n25716,25717,0,0,25718,25728,25732,0,0,0,25734,0,0,0,0,0,0,0,0,0,25737,0,0,25739,\n0,0,0,25740,0,25741,25745,0,25746,0,25748,25772,25778,0,0,0,0,0,25780,0,0,0,0,\n25781,0,25782,25784,25785,0,0,0,25789,0,0,0,0,0,0,25797,25801,0,0,0,25808,25809,\n0,0,25811,25814,25815,0,0,25817,0,0,0,0,0,0,0,0,25820,0,0,0,0,25832,25833,0,0,0,\n25846,0,0,0,25847,25848,0,0,0,0,0,0,0,0,0,25849,25850,0,0,25851,0,0,25852,0,\n25862,0,0,0,25863,25865,0,0,0,0,0,0,0,25867,25868,0,25869,25874,0,25875,0,25876,\n25877,0,0,0,0,25878,25902,0,0,0,0,0,0,0,25903,25904,25905,0,0,0,25908,25909,0,0,\n0,0,25910,0,0,0,0,0,0,0,25912,0,25913,0,0,0,0,0,0,0,0,25914,0,0,25916,0,0,0,0,0,\n25917,25927,0,0,0,0,25928,0,0,25930,0,0,0,25933,0,0,25938,25942,0,0,0,0,0,0,0,\n25945,0,25950,0,25956,0,0,25961,25962,0,0,25963,0,25964,25965,25966,0,0,0,0,0,\n25967,0,0,0,0,25968,0,0,0,25969,25971,0,0,0,0,0,25973,25975,0,0,0,0,0,0,0,25978,\n0,25981,0,0,0,25982,0,0,0,25984,0,0,0,0,0,0,0,25993,0,0,0,0,0,0,0,0,0,0,0,0,0,\n26002,0,0,0,26005,0,0,0,26006,26007,0,0,26014,26015,26016,0,0,0,0,0,0,26017,\n26018,26020,0,26022,26023,0,0,0,26024,26028,0,26029,26033,26034,26044,0,0,0,0,0,\n26046,0,0,26047,0,0,26049,0,26050,0,26051,0,0,0,0,0,26053,0,0,0,0,26054,26059,0,\n0,0,0,0,0,26060,0,26066,0,0,0,0,0,0,0,0,0,0,0,0,26067,0,26069,0,0,26071,0,0,0,\n26073,0,26074,26077,0,0,0,0,26078,0,0,0,26079,0,26090,0,0,26094,0,0,0,0,0,0,0,0,\n26095,0,0,0,0,0,0,0,0,0,0,0,26096,26101,0,26107,26122,0,26124,0,0,26125,0,0,0,0,\n0,0,26136,26141,26155,0,0,0,0,0,0,0,0,0,26164,26166,0,0,0,26167,0,26170,26171,0,\n0,26172,0,0,26174,0,0,0,0,0,0,0,0,0,0,0,0,0,26175,0,0,0,26176,26177,0,26321,\n26322,0,26323,0,0,26324,0,0,0,0,0,0,0,26325,0,26331,0,0,0,0,0,0,26335,0,0,0,\n26350,0,0,0,26379,0,0,26382,26383,26385,0,0,26392,26406,0,0,0,0,26411,0,0,0,0,0,\n26412,0,0,26420,0,0,26423,0,26424,26426,26432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n26435,0,26436,0,0,0,0,0,26441,0,26444,0,0,0,26446,0,0,0,0,26447,0,0,0,0,26449,0,\n26450,26452,0,26453,26454,0,0,0,26455,0,0,0,26456,0,0,26458,0,0,26460,0,26463,0,\n0,0,0,0,0,0,0,26464,26470,0,0,0,0,0,0,0,0,0,26473,0,0,26474,0,0,0,0,0,0,0,26475,\n0,0,0,0,0,0,0,26477,0,26485,0,0,26486,0,26487,0,0,26488,26493,26494,0,0,26495,0,\n26497,26504,26506,0,0,0,0,0,26507,0,0,0,0,0,26509,0,0,26510,0,0,0,0,0,0,0,0,0,0,\n0,0,0,26512,0,26513,26515,0,0,0,26518,0,0,0,26519,0,26524,26526,0,0,0,26527,0,\n26532,0,26533,26537,26558,0,0,0,26559,0,0,0,26571,0,0,26573,0,26588,0,26593,0,0,\n0,0,0,0,26603,0,26604,0,0,0,0,0,0,0,0,0,0,26606,0,0,0,0,0,0,0,26607,26609,26611,\n26614,0,0,0,26616,26620,0,26621,0,0,0,0,0,26627,0,26629,0,0,26630,0,0,26632,\n26643,0,0,0,26644,0,0,0,0,0,0,0,0,0,26646,26647,0,0,0,26650,0,0,26656,0,0,0,0,\n26663,26670,26671,0,0,0,26685,26686,26687,0,26689,0,0,0,0,26744,0,26745,0,26747,\n26748,0,26749,26750,26751,0,0,0,0,26752,26755,0,0,0,26756,26769,0,0,0,26774,0,0,\n0,0,0,26775,0,26777,26778,0,26786,0,0,0,26787,0,0,0,0,0,0,0,0,0,0,0,0,0,26788,0,\n0,26789,0,0,0,0,0,26791,0,26792,26793,0,0,0,26794,0,26797,26798,0,0,0,26800,0,0,\n26803,0,26804,0,0,0,0,0,0,0,0,0,26805,0,0,26808,0,0,26809,0,0,0,0,0,0,0,26812,0,\n26825,0,0,0,0,0,0,0,26826,0,0,26827,26829,26834,0,0,0,0,26835,0,0,26849,0,26851,\n0,0,0,0,0,0,0,0,0,26852,0,26853,26857,0,26858,0,26859,0,0,0,0,0,0,0,26876,0,\n26878,26882,26883,0,0,0,0,26890,26894,0,0,0,0,26895,26896,0,0,0,0,0,26900,0,0,0,\n0,0,0,0,26911,26913,26914,26915,26916,26919,0,0,0,26921,26922,0,0,26925,0,0,0,\n26928,0,0,26929,26930,0,0,0,26931,0,26932,0,0,0,0,0,26933,0,0,0,0,0,0,26937,0,0,\n26943,0,0,26944,0,0,0,26946,0,0,0,0,0,0,0,26956,0,26958,0,0,26963,0,0,0,0,0,0,0,\n26965,0,26969,26970,26972,0,0,0,0,0,26973,0,26974,0,26978,0,26980,0,0,0,0,0,0,\n26982,0,26986,26987,0,26990,0,0,0,0,27003,27006,0,0,27007,27010,27012,27013,0,0,\n0,0,0,0,0,0,27014,27015,27018,0,27019,0,0,0,0,0,27025,0,0,0,27026,0,0,0,0,27029,\n27030,27031,27034,0,0,27036,27037,0,0,0,27038,27042,0,0,0,27044,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,27045,0,0,0,0,0,0,0,27046,0,0,0,0,0,0,0,27047,27049,0,27050,0,0,0,\n27051,27052,0,27055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27056,27058,27059,0,\n27061,0,27064,0,0,0,0,0,27069,0,0,27070,0,0,0,0,0,0,0,27072,0,0,0,0,0,0,0,0,\n27076,0,0,0,0,0,27078,0,27079,0,0,0,27081,0,0,0,0,0,0,27082,0,27083,27086,0,0,0,\n0,27087,0,0,0,0,0,27088,27090,0,27094,0,0,27095,0,27099,27102,0,0,0,27103,0,0,0,\n0,27105,0,0,0,27106,0,0,0,0,0,0,27107,0,0,0,0,27108,27117,0,0,0,0,27118,0,0,\n27124,0,27126,0,0,27130,27131,0,0,0,0,0,0,27147,0,0,0,0,27148,27149,0,0,0,0,\n27150,27151,0,27152,0,27159,0,0,0,27164,0,0,0,0,0,0,0,27175,0,27189,0,0,27191,0,\n27193,0,27195,0,27198,0,0,0,0,0,27200,0,0,0,0,27202,0,0,0,0,27203,0,0,27204,0,0,\n27206,0,27207,0,0,0,0,27209,0,0,0,27213,0,0,27216,27219,27220,27222,27223,0,\n27224,0,27225,27226,0,0,27233,0,0,0,0,27235,0,27237,0,27238,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,27239,0,27242,27243,0,27250,0,0,0,27251,0,27253,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,27254,27255,27258,0,0,0,27259,0,0,0,0,0,0,27267,0,27276,27278,\n0,0,0,0,0,0,0,0,0,27296,27297,27301,0,0,0,0,0,0,27302,0,0,0,0,0,0,27312,27313,0,\n0,0,0,0,27318,0,27320,0,27329,0,27330,27331,0,27332,0,0,0,0,27340,0,0,0,27348,0,\n0,0,0,0,0,27350,0,27351,0,0,0,0,27355,0,0,27358,27359,27361,0,0,0,27365,0,27367,\n0,27376,27378,0,0,27379,0,0,0,0,0,0,27396,0,27397,27404,0,0,0,0,0,27408,0,0,0,0,\n27453,0,0,0,27456,0,0,0,27458,0,0,0,0,0,0,0,27459,0,0,0,27460,0,0,27461,0,27465,\n27467,0,0,27469,0,27470,0,27471,0,27477,27482,0,0,0,0,0,0,27484,0,0,0,0,0,0,\n27485,0,0,0,0,0,27493,0,27494,27502,0,0,0,0,0,0,0,0,0,0,0,0,27511,27532,0,0,0,\n27533,27545,0,0,0,27546,0,0,0,0,0,0,0,0,0,0,27547,0,0,27549,27550,0,27551,0,0,0,\n0,0,0,0,27555,0,0,27571,0,27573,27574,27575,27577,0,27578,0,0,27579,27585,0,0,0,\n0,0,27586,0,0,27588,27589,0,0,0,0,27596,0,0,27600,0,0,0,0,0,0,0,0,0,0,0,27608,0,\n0,0,0,0,0,0,0,0,0,0,27610,0,0,0,27618,0,0,27620,0,0,0,27631,0,0,27632,27634,0,\n27636,27638,0,0,0,27643,0,27644,27649,0,0,0,0,0,0,0,0,0,0,0,0,0,27651,27660,0,\n27661,0,0,0,0,0,0,0,27662,0,0,27664,0,27665,0,0,0,27669,0,27671,0,0,0,27673,\n27674,0,0,0,27682,0,0,0,27711,0,27712,27713,27719,27720,0,0,27728,0,27729,0,0,0,\n0,0,0,0,0,0,27731,0,0,27732,0,27733,0,27738,0,0,0,27742,0,0,0,27743,27744,0,0,0,\n0,0,0,27745,27746,0,0,0,27747,27748,27751,27752,0,0,0,27768,27770,0,0,0,27774,\n27775,0,27776,27777,0,0,27781,0,27784,0,27786,0,0,27791,0,27792,27793,27804,0,\n27812,27813,0,0,0,0,0,0,0,0,27814,0,27825,0,27827,0,0,0,0,27828,27861,27862,0,0,\n0,27864,0,0,0,27865,27884,0,27889,0,0,0,0,0,27890,0,27891,0,0,0,27892,0,0,0,0,0,\n27897,27898,0,0,27899,0,0,0,27901,27905,0,0,27920,0,0,27921,0,27922,0,0,0,27931,\n27934,0,0,0,0,0,0,0,0,0,0,27941,0,27942,0,27945,0,27947,27954,0,0,0,0,27960,\n27963,0,0,0,0,0,0,0,0,27964,27965,0,0,0,27967,0,27969,27975,0,27976,27977,0,\n27981,0,27983,28051,28052,0,0,0,0,0,28056,0,0,0,0,0,0,28058,28059,0,0,28061,0,0,\n0,0,0,0,0,28063,0,0,0,0,0,0,28066,0,0,0,0,0,0,28069,28070,28072,0,28073,0,0,\n28074,0,0,0,0,28075,0,0,0,0,0,0,0,28078,0,0,0,0,28085,0,0,0,0,28086,0,0,0,0,0,0,\n28088,0,0,0,0,0,0,0,0,28090,0,28097,28114,28115,0,0,0,0,0,0,0,28116,0,0,0,0,0,\n28118,0,28129,0,28131,0,0,28135,0,0,0,28140,28141,0,0,0,28146,0,0,0,0,28152,0,0,\n0,0,28155,28157,28161,0,0,0,0,28166,0,28167,0,0,0,0,0,0,0,0,0,0,0,28172,0,0,0,0,\n0,0,28173,0,0,28175,0,0,0,0,0,0,0,0,0,28178,28188,0,28190,0,0,0,0,0,28191,0,\n28193,28206,0,0,28207,28209,0,28211,0,28213,0,0,0,28215,28216,28217,0,28222,0,\n28223,28225,0,0,0,28226,0,28227,28229,28232,0,0,0,0,0,0,0,0,0,28235,0,28241,0,0,\n28242,0,0,0,0,28243,0,0,0,28245,0,0,0,28248,28250,0,28251,28252,0,0,0,0,0,0,\n28253,0,0,28254,28255,0,0,28256,0,0,28258,0,0,0,0,0,28259,0,0,28260,0,0,28261,0,\n0,0,0,28262,28263,0,0,28264,0,0,0,28266,0,28268,28269,0,28270,28272,28274,0,\n28277,28278,0,0,0,28279,0,28280,28281,28283,0,28292,0,28294,0,28297,0,0,0,0,\n28299,0,0,0,0,0,28300,0,0,0,0,0,0,0,28301,0,0,0,0,0,0,0,0,0,0,0,0,0,28302,28303,\n0,0,0,0,28304,0,0,28305,0,28312,0,28313,28314,0,0,0,0,0,0,28315,0,0,0,28320,\n28321,0,0,28328,0,0,0,28329,28338,0,28339,0,0,28344,0,0,0,0,0,0,0,0,28347,0,0,0,\n0,0,0,0,0,28348,0,0,0,0,0,28411,0,28412,28413,0,28416,0,0,0,28420,0,0,0,0,0,\n28421,0,0,0,0,28423,0,0,0,28424,0,0,28428,0,0,0,0,0,28429,0,0,0,28431,28434,0,\n28458,0,0,0,0,0,0,0,0,0,0,0,28464,0,0,0,0,28465,0,28467,0,0,0,0,0,0,28471,0,0,0,\n0,28474,0,28480,0,28481,0,0,28485,0,0,0,0,28486,28488,0,0,28489,0,0,0,0,28492,0,\n0,0,28495,0,28497,0,28499,0,0,0,0,28500,0,0,28502,28503,0,0,0,28508,0,0,0,28510,\n0,0,28512,28513,28514,28521,0,28526,0,28527,28528,0,0,0,0,28529,0,0,28532,0,0,\n28537,28538,0,0,0,28539,0,28548,0,28553,28554,0,0,0,0,0,0,0,0,0,0,0,0,28560,\n28563,0,0,28564,0,0,0,0,28565,0,0,0,0,0,0,0,28566,28568,0,0,0,0,0,0,28569,0,0,0,\n28570,0,28572,28573,0,0,0,0,28575,0,0,0,0,28576,28581,28588,0,0,28589,0,0,0,\n28590,28595,0,28598,0,0,28601,0,0,28605,0,0,0,0,28614,28615,28619,0,0,0,0,0,0,\n28620,0,28626,0,0,28628,0,28631,0,28632,0,0,0,0,0,0,28635,0,0,0,28637,28638,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28639,0,28643,0,0,28652,0,0,0,28662,0,\n28670,28671,0,0,0,0,0,0,0,0,0,28672,28673,28675,28676,0,0,0,0,0,0,0,28691,0,0,0,\n28695,0,0,0,28696,0,28697,28698,0,28705,0,28707,28708,28710,0,0,0,0,0,0,0,28711,\n28728,0,0,0,28736,0,0,0,28737,0,0,0,0,0,0,0,0,0,28738,0,28739,0,28741,0,0,28742,\n0,0,0,0,0,0,0,0,0,0,0,28745,0,0,0,0,0,0,28749,28750,28752,28754,28756,0,28757,0,\n0,0,0,28759,28760,0,0,0,0,0,0,28762,0,0,0,28764,0,0,0,0,0,0,28766,0,28767,28768,\n0,0,0,0,28769,28770,0,0,0,0,0,0,0,0,0,0,0,0,0,28771,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,28772,0,28773,0,28782,0,0,0,0,0,0,28784,0,28785,0,28786,0,0,0,28787,0,0,0,\n28797,0,0,0,0,0,0,28799,0,0,28801,0,0,0,0,28802,0,28805,0,0,28806,0,0,28807,0,0,\n0,0,0,0,0,28808,0,0,0,0,0,28810,28812,0,0,28816,28819,0,0,28821,0,28826,0,0,0,\n28842,28852,0,0,28853,0,28854,28855,0,0,0,28857,0,0,0,28858,0,28867,28868,28869,\n0,0,0,28874,28880,28882,28890,28892,0,0,0,0,0,0,0,28895,0,0,0,28898,28899,0,0,0,\n28900,0,0,28904,0,28906,0,0,0,0,28907,0,0,0,0,0,0,28908,0,0,0,28910,0,28914,0,0,\n0,0,0,0,0,28915,28916,28919,0,0,28920,0,28921,0,0,0,0,0,0,0,0,28924,0,0,0,0,\n28926,28929,0,0,0,28930,0,28936,0,28939,0,0,0,0,28942,0,0,0,0,0,0,28956,0,0,0,\n28966,0,0,0,0,28967,0,0,0,0,0,0,0,0,0,28968,0,28971,0,28975,28976,0,28982,28983,\n0,0,28984,28989,28996,28997,28998,0,0,0,0,0,0,28999,0,0,0,0,0,29000,0,29001,0,0,\n0,29009,0,0,29011,0,0,29021,0,0,0,0,29024,0,29025,0,0,0,0,0,29026,0,0,0,29036,0,\n0,0,29037,0,0,0,0,29038,0,29045,0,29047,0,0,0,0,0,0,0,0,0,29051,0,0,0,29054,\n29056,29062,0,29070,29082,0,0,0,29083,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29084,0,0,\n0,0,29085,29088,0,0,0,0,0,0,0,29090,29097,0,0,0,29103,0,0,0,0,0,0,0,0,29105,0,0,\n0,0,0,29107,0,29109,0,0,0,29115,0,0,29120,0,0,29138,29140,0,0,0,0,0,0,0,0,0,\n29152,0,29160,29174,0,29176,0,0,29180,0,29181,0,0,0,0,0,0,0,0,29228,0,0,29229,0,\n0,29230,0,0,0,0,0,0,0,0,0,0,29234,0,0,0,29241,0,29245,0,29248,0,29250,29256,\n29280,0,29282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29285,0,0,29286,29291,29292,0,0,0,0,\n29294,0,29295,0,0,0,0,0,29296,29297,29298,29300,0,29302,0,0,29304,29307,0,29312,\n0,0,0,29322,0,0,29323,0,0,29324,29326,29328,0,29335,0,0,0,0,0,0,0,29338,29339,0,\n0,0,0,0,29341,29343,0,0,0,0,29344,0,0,0,0,0,29345,0,0,0,0,29346,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,29347,29348,29349,0,0,29354,0,0,29355,0,0,0,0,0,0,0,0,29357,0,0,\n0,0,29364,0,29365,0,0,0,0,0,0,0,29366,0,0,29368,0,0,0,0,0,0,0,0,29378,0,29381,0,\n0,0,0,0,0,0,0,29386,0,0,0,0,0,0,29389,0,0,0,29390,0,0,29391,29397,0,29398,29412,\n29414,29418,29419,0,0,0,0,0,0,0,29420,0,0,0,0,0,0,0,29423,0,0,0,29435,0,0,0,\n29437,0,0,29439,0,29441,0,0,0,0,29443,0,29446,29450,29452,0,0,0,0,0,29456,0,0,0,\n0,0,29461,0,0,0,29464,0,0,0,0,0,0,0,0,29468,0,29473,0,0,0,29486,0,0,0,29490,0,0,\n0,29491,29492,0,0,29497,0,0,0,29498,0,29499,0,29502,29505,0,29509,0,0,0,29510,0,\n0,0,29512,0,0,0,29516,0,0,0,0,0,0,0,0,29518,0,29519,0,0,0,0,0,29520,29521,29529,\n0,0,0,0,0,0,0,0,29530,0,0,29531,29538,0,29540,0,0,0,29542,0,29543,29544,29547,0,\n0,29548,0,0,0,29549,0,0,0,29550,0,0,29552,0,0,0,0,29558,29561,0,29562,29564,0,0,\n29565,0,0,29566,0,0,0,0,0,0,0,0,0,0,29578,29584,29586,29591,0,0,0,0,29593,29594,\n0,0,29597,0,0,29613,0,29614,0,29615,0,0,0,0,29616,29617,0,0,29625,0,0,0,29632,0,\n0,0,0,0,0,0,29633,0,0,0,0,0,29634,29635,29637,0,29638,0,29641,29643,0,0,0,0,0,0,\n29644,0,29645,0,29649,0,0,0,29650,0,29653,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29656,\n29659,0,0,29660,0,0,0,29661,0,0,0,0,0,29664,0,0,0,29671,29673,0,0,0,0,0,0,0,\n29675,0,29677,29679,0,0,29684,0,0,0,0,0,29685,0,0,0,29687,0,0,0,29688,0,29689,\n29690,29700,0,29701,0,0,0,29702,0,29706,0,0,0,0,0,0,0,29720,0,29721,0,29727,0,\n29733,29734,0,29750,29761,0,29763,0,0,0,0,0,29764,0,0,29765,0,0,0,29771,0,0,0,0,\n0,0,0,0,0,0,0,0,29772,0,0,0,29773,29774,29775,0,0,0,0,0,0,0,0,0,0,0,29822,0,0,0,\n29824,0,29825,0,0,0,0,0,29827,0,0,0,0,0,0,0,0,29829,0,29832,29834,0,0,29835,0,0,\n29837,29838,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29843,0,0,0,0,29844,29845,0,0,0,\n0,0,0,0,0,0,29849,0,0,29869,29872,29890,29905,0,0,0,0,0,29907,29921,0,29922,0,0,\n29923,29926,29944,29946,0,0,0,0,0,0,0,29947,29948,0,0,0,29951,0,0,0,0,0,29953,0,\n0,29956,0,29957,0,0,29962,0,0,0,0,29971,0,0,0,29972,0,0,0,0,0,29978,0,29979,\n29992,30007,30008,30010,0,0,0,30013,0,0,0,0,30014,30016,0,0,0,0,0,0,0,0,0,0,0,\n30017,0,0,0,0,0,30023,30031,0,0,30033,0,0,0,0,0,0,0,0,0,0,30034,0,30038,0,30039,\n0,30040,0,0,0,0,0,0,30067,30068,0,0,0,30069,0,30072,0,0,0,30073,0,0,0,0,30075,0,\n0,0,0,0,0,30079,0,0,30080,0,0,0,0,0,30082,0,0,0,0,0,0,0,0,0,0,0,30084,30090,0,0,\n30091,0,0,0,0,30098,30118,0,30119,0,30121,30130,0,0,0,0,0,0,0,0,0,0,0,0,0,30131,\n30132,30133,0,0,0,0,0,0,30135,0,0,0,0,0,0,0,0,0,0,0,30136,0,0,30137,30138,0,0,0,\n30139,30146,0,0,0,0,0,30147,0,0,30148,30151,0,0,0,30168,0,30172,30173,0,0,0,0,0,\n0,0,0,30180,30181,0,30192,0,0,0,0,0,0,0,30194,30196,0,0,30199,0,0,30202,0,0,0,0,\n30203,0,0,0,0,0,0,0,0,0,0,30213,0,0,0,30216,0,0,30217,0,0,0,30218,0,0,0,0,30219,\n0,30220,0,30222,30227,0,0,0,0,0,30231,0,0,30233,30235,0,0,0,0,30238,0,30240,\n30243,30245,0,30250,30252,0,0,0,30269,0,0,30271,30272,0,0,0,30278,30280,0,0,\n30282,0,30284,0,30294,0,0,0,0,30295,30296,0,0,0,0,0,30298,30299,30302,30304,\n30306,0,0,0,0,0,0,30316,30317,0,0,0,30318,0,0,0,30319,0,30320,30322,30326,0,0,0,\n0,0,30327,0,30332,30348,30349,0,0,30356,0,0,0,0,0,0,0,0,30357,0,30358,0,30359,\n30360,0,0,30365,30366,30378,0,0,0,0,30379,0,0,30381,0,30385,0,30388,30397,0,0,0,\n30401,0,0,0,0,30403,0,0,0,0,0,30404,0,0,30405,0,30406,30408,0,30409,0,30410,0,0,\n0,30417,0,0,30418,30419,0,30420,0,30424,0,0,0,30427,30430,30432,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,30433,0,0,0,0,0,0,0,30436,0,30437,30438,0,30441,30442,0,0,\n0,30445,0,0,0,0,30452,30456,30457,0,0,0,30458,0,30464,0,0,0,0,0,0,30467,0,30469,\n0,0,0,0,0,30477,0,0,30484,0,0,0,0,0,30485,0,0,0,0,0,30486,30487,30497,30498,0,0,\n0,0,0,0,0,0,0,0,30505,0,30508,0,0,0,30509,30510,0,30514,30516,0,0,0,0,0,0,0,0,0,\n0,0,30523,0,30524,0,30525,0,0,0,0,30537,0,0,30538,0,0,0,0,0,30553,0,0,30555,\n30556,30558,30559,30560,0,0,30561,0,30562,0,0,0,0,0,0,0,0,30563,30570,30571,0,\n30586,30587,0,0,30590,0,0,30594,0,0,0,0,30611,30612,30623,30634,0,0,30636,30640,\n30655,30656,0,30657,0,0,30658,30669,0,30670,0,30676,30678,0,0,0,0,0,0,0,30679,0,\n0,0,0,0,0,0,0,0,0,0,30695,0,0,30698,0,0,0,0,30700,0,0,0,0,30701,0,30702,30703,0,\n0,0,0,30707,0,0,0,30709,0,0,30710,30719,30729,0,0,0,0,0,0,0,0,0,30731,0,0,30733,\n0,0,0,30734,0,0,0,0,0,30736,30737,0,0,0,30740,0,0,0,30743,0,30746,0,30747,30748,\n0,0,30751,30752,30753,0,0,0,30754,0,0,30760,0,0,0,0,0,0,0,30763,0,30764,0,0,\n30766,0,30769,30770,30771,30774,30777,0,0,30779,30780,30781,0,0,0,0,30790,0,0,0,\n30792,0,0,0,0,30810,0,0,0,0,0,0,0,30812,30819,0,0,30823,30824,0,30825,0,30827,0,\n0,0,0,0,0,30828,0,0,30830,0,0,0,30834,0,30835,0,30837,30838,0,30845,0,0,0,0,0,\n30846,30847,0,0,30849,0,30851,0,0,0,0,0,30852,30858,0,0,30859,0,30865,0,0,30866,\n0,0,30868,0,0,30869,0,0,0,30881,30883,0,0,0,0,0,30889,0,30891,0,0,0,0,30894,0,\n30895,0,30897,0,30898,0,0,0,30904,30906,0,30909,0,0,0,0,0,0,30910,0,0,0,30915,\n30933,30942,0,0,0,0,30943,0,0,30945,0,0,0,0,0,0,30946,0,0,30947,0,0,30955,30956,\n0,0,30960,0,0,30961,30962,30966,0,0,30969,30974,0,0,0,30976,0,0,30977,0,30978,\n30982,0,0,0,0,0,0,0,30994,30995,30998,0,31000,0,0,31001,0,0,31003,31005,0,0,\n31006,31011,0,0,31014,0,31016,0,0,0,0,31018,0,0,31020,31023,31024,31025,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,31027,31028,31029,0,0,0,0,0,0,31032,0,0,0,0,0,0,0,0,0,0,0,\n31036,31037,31038,0,0,0,31041,31043,31045,0,31047,0,0,0,31048,0,31049,0,0,0,\n31053,31054,31055,0,0,31063,0,0,0,0,0,31066,0,31068,31071,0,0,0,31072,31073,0,0,\n0,0,31075,0,0,31076,0,0,0,31077,31079,0,31080,0,0,0,0,0,0,0,0,0,0,31087,0,31142,\n0,31144,0,0,31145,31146,31147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31149,0,31151,31152,0,\n0,0,0,0,0,0,31162,31171,31174,31175,0,0,0,31176,0,0,0,0,0,0,0,31179,0,0,0,31186,\n0,0,0,31192,31195,0,0,31196,0,0,0,0,0,0,0,0,31198,0,0,0,0,0,31199,0,0,0,31205,0,\n0,0,0,31211,31215,0,0,0,0,31231,0,31232,0,0,0,0,0,0,0,0,0,0,31233,31236,31253,0,\n31254,0,0,0,0,0,0,31255,0,0,31257,0,0,0,0,0,0,0,0,0,31258,31259,0,0,31260,0,\n31261,0,0,0,0,0,31262,31263,0,0,31264,0,31266,0,31267,0,0,0,0,0,31281,0,31282,0,\n31284,0,0,31285,31287,31288,0,0,31290,0,0,0,31292,31295,0,31299,0,31300,0,0,0,0,\n0,31302,0,0,0,0,31303,0,0,0,0,0,0,31304,0,0,0,0,0,31305,31308,31309,31315,0,\n31317,0,0,0,0,0,31323,0,31324,0,0,0,0,0,31325,31327,0,0,31331,0,0,0,0,0,31333,0,\n0,0,0,0,31336,0,0,31337,0,0,0,0,0,0,31338,0,0,0,0,0,0,0,0,0,0,0,0,31339,0,0,0,0,\n0,0,0,31342,0,0,0,0,31345,0,0,0,0,0,0,0,0,31347,0,0,0,0,0,0,31348,0,0,31350,\n31351,0,31352,0,0,31354,0,0,0,0,31355,0,0,31356,0,0,0,0,0,0,0,0,0,0,31363,0,\n31372,0,0,31373,0,0,0,0,0,0,0,0,0,31376,0,31388,0,31389,0,31392,0,31401,0,31405,\n31407,31408,0,31409,0,0,0,0,0,0,31413,31415,0,0,0,31416,31418,0,0,0,0,0,0,31422,\n31423,0,0,31424,0,31425,31432,0,0,0,0,0,0,0,0,0,31433,0,0,0,0,0,0,0,0,31434,0,0,\n0,0,0,0,31435,0,0,0,0,31438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31442,0,31444,0,\n31448,0,0,31451,0,0,0,0,31452,0,31461,31465,0,0,31466,0,0,31467,0,0,31468,0,0,0,\n31469,31473,0,31476,0,0,0,0,31489,31490,0,0,0,0,0,0,0,31492,31493,31494,0,0,0,0,\n31501,31504,31505,0,0,0,0,0,0,0,0,0,31509,0,0,0,0,31510,0,0,31511,0,0,31513,0,0,\n0,0,0,0,0,0,0,31514,0,31522,31536,31539,31540,0,31541,0,0,0,0,0,0,31546,31553,\n31559,0,0,0,31560,31561,31562,0,0,31564,31567,0,31569,0,0,0,31570,0,0,0,0,31571,\n0,0,0,0,0,0,31572,31574,31580,31581,0,0,31582,31584,31585,31586,31595,0,31596,0,\n0,0,0,31597,0,31599,0,31600,31601,0,0,31603,31604,0,0,31608,31610,0,0,0,31611,0,\n31615,0,0,0,0,31616,0,0,0,0,0,0,31617,0,0,0,0,0,31618,0,0,0,0,0,0,31621,0,0,0,0,\n0,0,0,0,0,31622,31625,0,0,0,0,31627,0,31641,0,0,31642,0,0,31643,0,0,0,0,0,0,0,0,\n0,31644,0,31646,0,0,0,0,31648,0,0,0,31652,0,0,0,31657,0,0,31676,0,0,0,0,0,0,0,\n31689,31691,31692,0,31694,0,0,0,31696,0,31702,0,31703,0};\n\nconst BROTLI_MODEL(\"small\")\nDictWord kStaticDictionaryWords[BROTLI_ENC_STATIC_DICT_LUT_NUM_ITEMS] = {\n{0,0,0},{8,0,1002},{136,0,1015},{4,0,683},{4,10,325},{138,10,125},{7,11,572},{9,\n11,592},{11,11,680},{11,11,842},{11,11,924},{12,11,356},{12,11,550},{13,11,317},\n{13,11,370},{13,11,469},{13,11,471},{14,11,397},{18,11,69},{146,11,145},{134,0,\n1265},{136,11,534},{134,0,1431},{11,0,138},{140,0,40},{4,0,155},{4,10,718},{7,0,\n1689},{135,10,1216},{4,0,245},{5,0,151},{5,0,741},{6,0,1147},{7,0,498},{7,0,870}\n,{7,0,1542},{12,0,213},{14,0,36},{14,0,391},{17,0,111},{18,0,6},{18,0,46},{18,0,\n151},{19,0,36},{20,0,32},{20,0,56},{20,0,69},{20,0,102},{21,0,4},{22,0,8},{22,0,\n10},{22,0,14},{150,0,31},{4,0,624},{135,0,1752},{5,10,124},{5,10,144},{6,10,548}\n,{7,10,15},{7,10,153},{137,10,629},{6,0,503},{7,10,1531},{8,10,416},{9,0,586},{9\n,10,275},{10,10,100},{11,10,658},{11,10,979},{12,10,86},{13,0,468},{14,0,66},{14\n,10,207},{15,10,20},{15,10,25},{144,0,58},{5,0,603},{5,10,915},{6,10,1783},{7,0,\n1212},{7,10,211},{7,10,1353},{9,0,565},{9,10,83},{10,10,376},{10,10,431},{11,10,\n543},{12,10,664},{13,10,280},{13,10,428},{14,0,301},{14,10,128},{17,10,52},{145,\n10,81},{4,0,492},{133,0,451},{135,0,835},{141,0,70},{132,0,539},{7,11,748},{139,\n11,700},{7,11,1517},{11,11,597},{14,11,76},{14,11,335},{148,11,33},{6,0,113},{\n135,0,436},{4,10,338},{133,10,400},{136,0,718},{133,11,127},{133,11,418},{6,0,\n1505},{6,11,198},{7,0,520},{11,10,892},{140,11,83},{4,10,221},{5,10,659},{5,10,\n989},{7,10,697},{7,10,1211},{138,10,284},{135,0,1070},{5,11,276},{6,11,55},{135,\n11,1369},{134,0,1515},{6,11,1752},{136,11,726},{138,10,507},{4,10,188},{7,10,805\n},{143,0,78},{5,10,884},{139,10,991},{133,11,764},{134,10,1653},{6,11,309},{7,11\n,331},{138,11,550},{135,11,1861},{132,11,348},{135,11,986},{135,11,1573},{12,0,\n610},{13,0,431},{144,0,59},{9,11,799},{140,10,166},{134,0,1530},{132,0,750},{132\n,0,307},{133,0,964},{6,11,194},{7,11,133},{10,11,493},{10,11,570},{139,11,664},{\n5,11,24},{5,11,569},{6,11,3},{6,11,119},{6,11,143},{6,11,440},{7,11,295},{7,11,\n599},{7,11,1686},{7,11,1854},{8,11,424},{9,11,43},{9,11,584},{9,11,760},{10,11,\n148},{10,11,328},{11,11,159},{11,11,253},{11,11,506},{12,11,487},{12,11,531},{\n144,11,33},{136,10,760},{5,11,14},{5,11,892},{6,11,283},{7,11,234},{136,11,537},\n{135,11,1251},{4,11,126},{8,11,635},{147,11,34},{4,11,316},{135,11,1561},{6,0,\n999},{6,0,1310},{137,11,861},{4,11,64},{5,11,352},{5,11,720},{6,11,368},{139,11,\n359},{4,0,75},{5,0,180},{6,0,500},{7,0,58},{7,0,710},{8,10,770},{138,0,645},{133\n,0,649},{6,0,276},{7,0,282},{7,0,879},{7,0,924},{8,0,459},{9,0,599},{9,0,754},{\n11,0,574},{12,0,128},{12,0,494},{13,0,52},{13,0,301},{15,0,30},{143,0,132},{132,\n0,200},{4,10,89},{5,10,489},{6,10,315},{7,10,553},{7,10,1745},{138,10,243},{135,\n11,1050},{6,10,1658},{7,0,1621},{9,10,3},{10,10,154},{11,10,641},{13,10,85},{13,\n10,201},{141,10,346},{6,11,175},{137,11,289},{5,11,432},{133,11,913},{6,0,225},{\n137,0,211},{7,0,718},{8,0,687},{139,0,374},{4,10,166},{133,10,505},{6,10,1670},{\n137,0,110},{8,0,58},{9,0,724},{11,0,809},{13,0,113},{145,0,72},{6,0,345},{7,0,\n1247},{144,11,82},{5,11,931},{134,11,1698},{8,0,767},{8,0,803},{9,0,301},{137,0,\n903},{139,0,203},{134,0,1154},{7,0,1949},{136,0,674},{134,0,259},{135,0,1275},{5\n,11,774},{6,11,1637},{6,11,1686},{134,11,1751},{134,0,1231},{7,10,445},{8,10,307\n},{8,10,704},{10,10,41},{10,10,439},{11,10,237},{11,10,622},{140,10,201},{136,0,\n254},{6,11,260},{135,11,1484},{139,0,277},{135,10,1977},{4,10,189},{5,10,713},{6\n,11,573},{136,10,57},{138,10,371},{132,10,552},{134,11,344},{133,0,248},{6,11,\n240},{9,0,800},{10,0,693},{11,0,482},{11,0,734},{139,0,789},{4,0,116},{4,11,292}\n,{4,11,736},{5,0,95},{5,0,445},{5,11,871},{6,11,171},{6,11,1689},{7,0,1688},{7,\n11,1324},{7,11,1944},{8,0,29},{9,0,272},{9,11,415},{9,11,580},{11,0,509},{11,0,\n915},{14,11,230},{146,11,68},{7,0,490},{13,0,100},{143,0,75},{135,0,1641},{133,0\n,543},{7,11,209},{8,11,661},{10,11,42},{11,11,58},{12,11,58},{12,11,118},{141,11\n,32},{5,0,181},{6,11,63},{7,11,920},{136,0,41},{133,0,657},{133,11,793},{138,0,\n709},{7,0,25},{8,0,202},{138,0,536},{5,11,665},{135,10,1788},{145,10,49},{9,0,\n423},{140,0,89},{5,11,67},{6,11,62},{6,11,374},{135,11,1391},{8,0,113},{9,0,877}\n,{9,11,790},{10,0,554},{11,0,83},{12,0,136},{12,11,47},{147,0,109},{138,10,661},\n{4,0,963},{7,10,1945},{10,0,927},{142,0,442},{133,0,976},{132,0,206},{4,11,391},\n{135,11,1169},{134,0,2002},{6,0,696},{134,0,1008},{134,0,1170},{132,11,271},{7,0\n,13},{8,0,226},{10,0,537},{11,0,570},{11,0,605},{11,0,799},{11,0,804},{12,0,85},\n{12,0,516},{12,0,623},{12,11,314},{13,0,112},{13,0,361},{14,0,77},{14,0,78},{17,\n0,28},{147,0,110},{132,0,769},{134,0,1544},{4,0,551},{137,0,678},{5,10,84},{134,\n10,163},{9,0,57},{9,0,459},{10,0,425},{11,0,119},{12,0,184},{12,0,371},{13,0,358\n},{145,0,51},{4,11,253},{5,0,188},{5,0,814},{5,10,410},{5,11,544},{7,11,300},{8,\n0,10},{9,0,421},{9,0,729},{9,11,340},{10,0,609},{139,0,689},{134,0,624},{138,11,\n321},{135,0,1941},{5,10,322},{8,10,186},{9,10,262},{10,10,187},{14,10,208},{146,\n0,130},{5,11,53},{5,11,541},{6,11,94},{6,11,499},{7,11,230},{139,11,321},{133,10\n,227},{4,0,378},{4,11,920},{5,11,25},{5,11,790},{6,11,457},{135,11,853},{137,0,\n269},{132,0,528},{134,0,1146},{7,10,1395},{8,10,486},{9,10,236},{9,10,878},{10,\n10,218},{11,10,95},{19,10,17},{147,10,31},{7,10,2043},{8,10,672},{141,10,448},{\n134,0,1105},{134,0,1616},{134,11,1765},{140,11,163},{5,10,412},{133,11,822},{132\n,11,634},{6,0,656},{134,11,1730},{134,0,1940},{5,0,104},{6,0,173},{135,0,1631},{\n136,10,562},{6,11,36},{7,11,658},{8,11,454},{147,11,86},{5,0,457},{134,10,1771},\n{7,0,810},{8,0,138},{8,0,342},{9,0,84},{10,0,193},{11,0,883},{140,0,359},{7,10,\n1190},{137,0,620},{137,10,132},{7,11,975},{137,11,789},{6,0,95},{6,0,1934},{136,\n0,967},{141,11,335},{6,0,406},{10,0,409},{10,0,447},{11,0,44},{140,0,100},{4,10,\n317},{135,10,1279},{132,0,477},{134,0,1268},{5,10,63},{5,10,509},{6,0,1941},{136\n,0,944},{132,0,629},{132,11,104},{4,0,246},{133,0,375},{4,10,288},{134,0,1636},{\n135,11,1614},{8,10,89},{8,10,620},{9,0,49},{10,0,774},{11,10,628},{12,10,322},{\n143,10,124},{4,0,282},{7,0,1034},{11,0,398},{11,0,634},{12,0,1},{12,0,79},{12,0,\n544},{14,0,237},{17,0,10},{146,0,20},{132,0,824},{7,11,45},{9,11,542},{9,11,566}\n,{138,11,728},{5,0,118},{5,0,499},{6,0,476},{6,0,665},{6,0,1176},{6,0,1196},{7,0\n,600},{7,0,888},{135,0,1096},{7,0,296},{7,0,596},{8,0,560},{8,0,586},{9,0,612},{\n11,0,304},{12,0,46},{13,0,89},{14,0,112},{145,0,122},{5,0,894},{6,0,1772},{9,0,\n1009},{138,10,120},{5,11,533},{7,11,755},{138,11,780},{151,10,1},{6,0,1474},{7,\n11,87},{142,11,288},{139,0,366},{137,10,461},{7,11,988},{7,11,1939},{9,11,64},{9\n,11,502},{12,11,7},{12,11,34},{13,11,12},{13,11,234},{147,11,77},{7,0,1599},{7,0\n,1723},{8,0,79},{8,0,106},{8,0,190},{8,0,302},{8,0,383},{8,0,713},{9,0,119},{9,0\n,233},{9,0,419},{9,0,471},{10,0,181},{10,0,406},{11,0,57},{11,0,85},{11,0,120},{\n11,0,177},{11,0,296},{11,0,382},{11,0,454},{11,0,758},{11,0,999},{12,0,27},{12,0\n,98},{12,0,131},{12,0,245},{12,0,312},{12,0,446},{12,0,454},{13,0,25},{13,0,98},\n{13,0,426},{13,0,508},{14,0,70},{14,0,163},{14,0,272},{14,0,277},{14,0,370},{15,\n0,95},{15,0,138},{15,0,167},{17,0,38},{148,0,96},{135,10,1346},{10,0,200},{19,0,\n2},{151,0,22},{135,11,141},{134,10,85},{134,0,1759},{138,0,372},{145,0,16},{4,11\n,619},{136,0,943},{139,11,88},{5,11,246},{8,11,189},{9,11,355},{9,11,512},{10,11\n,124},{10,11,453},{11,11,143},{11,11,416},{11,11,859},{141,11,341},{5,0,258},{\n134,0,719},{6,0,1798},{6,0,1839},{8,0,900},{10,0,874},{10,0,886},{12,0,698},{12,\n0,732},{12,0,770},{16,0,106},{18,0,163},{18,0,170},{18,0,171},{152,0,20},{9,0,\n707},{9,11,707},{11,0,326},{11,0,339},{11,11,326},{11,11,339},{12,0,423},{12,0,\n502},{12,11,423},{12,11,502},{20,0,62},{148,11,62},{5,0,30},{7,0,495},{8,0,134},\n{9,0,788},{140,0,438},{133,11,678},{5,10,279},{6,10,235},{7,10,468},{8,10,446},{\n9,10,637},{10,10,717},{11,10,738},{140,10,514},{5,11,35},{6,11,287},{7,11,862},{\n7,11,1886},{138,11,179},{4,11,517},{7,0,1948},{135,0,2004},{5,10,17},{6,10,371},\n{137,10,528},{4,0,115},{5,0,669},{6,0,407},{8,0,311},{11,0,10},{141,0,5},{137,0,\n381},{5,0,50},{6,0,439},{7,0,780},{135,0,1040},{136,11,667},{11,11,403},{146,11,\n83},{5,0,1},{6,0,81},{138,0,520},{134,0,738},{5,0,482},{8,0,98},{9,0,172},{10,0,\n360},{10,0,700},{10,0,822},{11,0,302},{11,0,778},{12,0,50},{12,0,127},{12,0,396}\n,{13,0,62},{13,0,328},{14,0,122},{147,0,72},{9,11,157},{10,11,131},{140,11,72},{\n135,11,714},{135,11,539},{5,0,2},{6,0,512},{7,0,797},{7,0,1494},{8,0,253},{8,0,\n589},{9,0,77},{10,0,1},{10,0,129},{10,0,225},{11,0,118},{11,0,226},{11,0,251},{\n11,0,430},{11,0,701},{11,0,974},{11,0,982},{12,0,64},{12,0,260},{12,0,488},{140,\n0,690},{5,11,394},{7,11,367},{7,11,487},{7,11,857},{7,11,1713},{8,11,246},{9,11,\n537},{10,11,165},{12,11,219},{140,11,561},{136,0,557},{5,10,779},{5,10,807},{6,\n10,1655},{134,10,1676},{4,10,196},{5,10,558},{133,10,949},{11,11,827},{12,11,56}\n,{14,11,34},{143,11,148},{137,0,347},{133,0,572},{134,0,832},{4,0,12},{7,0,504},\n{7,0,522},{7,0,809},{8,0,797},{141,0,88},{4,10,752},{133,11,449},{7,11,86},{8,11\n,103},{145,11,69},{7,11,2028},{138,11,641},{5,0,528},{6,11,1},{142,11,2},{134,0,\n861},{4,10,227},{5,10,159},{5,10,409},{7,10,80},{10,0,294},{10,10,479},{12,10,\n418},{14,10,50},{14,10,249},{142,10,295},{7,10,1470},{8,10,66},{8,10,137},{8,10,\n761},{9,10,638},{11,10,80},{11,10,212},{11,10,368},{11,10,418},{12,10,8},{13,10,\n15},{16,10,61},{17,10,59},{19,10,28},{148,10,84},{7,11,1148},{148,0,109},{6,11,\n277},{7,11,1274},{7,11,1386},{7,11,1392},{12,11,129},{146,11,87},{6,11,187},{7,\n11,39},{7,11,1203},{8,11,380},{8,11,542},{14,11,117},{149,11,28},{134,0,1187},{5\n,0,266},{9,0,290},{9,0,364},{10,0,293},{11,0,606},{142,0,45},{6,11,297},{7,11,\n793},{139,11,938},{4,0,50},{6,0,594},{9,0,121},{10,0,49},{10,0,412},{139,0,834},\n{136,0,748},{7,11,464},{8,11,438},{11,11,105},{11,11,363},{12,11,231},{14,11,386\n},{15,11,102},{148,11,75},{132,0,466},{6,10,38},{7,10,1220},{8,10,185},{8,10,256\n},{9,10,22},{9,10,331},{10,10,738},{11,10,205},{11,10,540},{11,10,746},{13,0,399\n},{13,10,465},{14,0,337},{142,10,194},{9,0,378},{141,0,162},{137,0,519},{4,10,\n159},{6,10,115},{7,10,252},{7,10,257},{7,10,1928},{8,10,69},{9,10,384},{10,10,91\n},{10,10,615},{12,10,375},{14,10,235},{18,10,117},{147,10,123},{5,10,911},{5,11,\n604},{136,10,278},{132,0,667},{4,10,151},{7,10,1567},{8,0,351},{137,0,322},{134,\n0,902},{133,10,990},{5,10,194},{7,10,1662},{9,10,90},{140,0,180},{4,0,869},{134,\n0,1996},{134,0,813},{133,10,425},{137,11,761},{132,0,260},{133,10,971},{5,11,20}\n,{6,11,298},{7,11,659},{7,11,1366},{137,11,219},{4,0,39},{5,0,36},{7,0,1843},{8,\n0,407},{11,0,144},{140,0,523},{4,0,510},{10,0,587},{139,10,752},{7,0,29},{7,0,66\n},{7,0,1980},{10,0,487},{138,0,809},{9,10,662},{13,0,260},{14,0,82},{146,0,63},{\n5,10,72},{6,10,264},{7,10,21},{7,10,46},{7,10,2013},{8,10,215},{8,10,513},{10,10\n,266},{139,10,22},{134,0,570},{4,11,439},{6,0,565},{7,0,1667},{10,10,95},{11,10,\n603},{12,11,242},{13,10,443},{14,10,160},{143,10,4},{134,0,1464},{134,10,431},{5\n,10,874},{6,10,1677},{9,0,372},{15,0,2},{15,10,0},{19,0,10},{147,0,18},{132,0,\n787},{6,0,380},{7,10,939},{7,10,1172},{7,10,1671},{9,10,540},{10,10,696},{11,10,\n265},{11,10,732},{11,10,928},{11,10,937},{12,0,399},{13,10,438},{149,0,19},{137,\n0,200},{132,11,233},{132,0,516},{134,11,577},{132,0,844},{11,0,887},{14,0,365},{\n142,0,375},{132,11,482},{8,0,821},{140,0,44},{7,0,1655},{136,0,305},{5,10,682},{\n135,10,1887},{135,11,346},{132,10,696},{4,0,10},{7,0,917},{139,0,786},{5,11,795}\n,{6,11,1741},{8,11,417},{137,11,782},{4,0,1016},{134,0,2031},{4,10,726},{5,0,684\n},{133,10,630},{6,0,1021},{134,0,1480},{8,10,802},{136,10,838},{134,0,27},{134,0\n,395},{135,11,622},{7,11,625},{135,11,1750},{4,11,203},{135,11,1936},{6,10,118},\n{7,10,215},{7,10,1521},{140,10,11},{132,0,813},{136,0,511},{7,10,615},{138,10,\n251},{135,10,1044},{145,0,56},{133,10,225},{6,0,342},{6,0,496},{8,0,275},{137,0,\n206},{4,0,909},{133,0,940},{132,0,891},{7,11,311},{9,11,308},{140,11,255},{4,10,\n370},{5,10,756},{135,10,1326},{4,0,687},{134,0,1596},{134,0,1342},{6,10,1662},{7\n,10,48},{8,10,771},{10,10,116},{13,10,104},{14,10,105},{14,10,184},{15,10,168},{\n19,10,92},{148,10,68},{138,10,209},{4,11,400},{5,11,267},{135,11,232},{151,11,12\n},{6,0,41},{141,0,160},{141,11,314},{134,0,1718},{136,0,778},{142,11,261},{134,0\n,1610},{133,0,115},{132,0,294},{4,10,120},{142,0,314},{132,0,983},{5,0,193},{140\n,0,178},{138,10,429},{5,10,820},{135,10,931},{5,11,732},{6,0,994},{6,0,1051},{6,\n0,1439},{135,0,174},{4,11,100},{7,11,679},{8,11,313},{138,10,199},{6,10,151},{6,\n10,1675},{7,10,383},{151,10,10},{6,0,1796},{8,0,848},{8,0,867},{8,0,907},{10,0,\n855},{140,0,703},{140,0,221},{4,0,122},{5,0,796},{5,0,952},{6,0,1660},{6,0,1671}\n,{8,0,567},{9,0,687},{9,0,742},{10,0,686},{11,0,682},{11,0,909},{140,0,281},{5,\n11,362},{5,11,443},{6,11,318},{7,11,1019},{139,11,623},{5,11,463},{136,11,296},{\n6,10,1624},{11,0,583},{12,10,422},{13,0,262},{142,10,360},{5,0,179},{7,0,1095},{\n135,0,1213},{4,10,43},{4,11,454},{5,10,344},{133,10,357},{4,0,66},{7,0,722},{135\n,0,904},{134,0,773},{5,10,888},{135,0,352},{5,11,48},{5,11,404},{6,11,557},{7,11\n,458},{8,11,597},{10,11,455},{10,11,606},{11,11,49},{11,11,548},{12,11,476},{13,\n11,18},{141,11,450},{134,11,418},{132,10,711},{5,11,442},{135,11,1984},{141,0,35\n},{137,0,152},{134,0,1197},{135,11,1093},{137,11,203},{137,10,440},{10,0,592},{\n10,0,753},{12,0,317},{12,0,355},{12,0,465},{12,0,469},{12,0,560},{12,0,578},{141\n,0,243},{133,0,564},{134,0,797},{5,10,958},{133,10,987},{5,11,55},{7,11,376},{\n140,11,161},{133,11,450},{134,0,556},{134,0,819},{11,10,276},{142,10,293},{7,0,\n544},{138,0,61},{4,10,65},{5,10,479},{5,10,1004},{7,10,1913},{8,0,719},{8,10,317\n},{9,10,302},{10,10,612},{141,10,22},{4,0,5},{4,10,261},{4,11,213},{5,0,498},{7,\n10,510},{7,11,223},{8,0,637},{8,11,80},{137,0,521},{4,10,291},{5,0,927},{7,0,101\n},{7,11,381},{7,11,806},{7,11,820},{8,11,354},{8,11,437},{8,11,787},{9,10,515},{\n9,11,657},{10,11,58},{10,11,339},{10,11,749},{11,11,914},{12,10,152},{12,10,443}\n,{12,11,162},{13,10,392},{13,11,75},{14,10,357},{14,11,106},{14,11,198},{14,11,\n320},{14,11,413},{146,11,43},{6,0,1153},{7,0,1441},{136,11,747},{4,0,893},{5,0,\n780},{133,0,893},{138,11,654},{133,11,692},{133,0,238},{134,11,191},{4,10,130},{\n135,10,843},{5,10,42},{5,10,879},{6,0,1296},{7,10,245},{7,10,324},{7,10,1532},{\n11,10,463},{11,10,472},{13,10,363},{144,10,52},{134,0,1729},{6,0,1999},{136,0,\n969},{4,10,134},{133,10,372},{4,0,60},{7,0,941},{7,0,1800},{8,0,314},{9,0,700},{\n139,0,487},{134,0,1144},{6,11,162},{7,11,1960},{136,11,831},{132,11,706},{135,0,\n1147},{138,11,426},{138,11,89},{7,0,1853},{138,0,437},{136,0,419},{135,10,1634},\n{133,0,828},{4,10,644},{5,0,806},{7,0,176},{7,0,178},{7,0,1240},{135,0,1976},{\n135,11,1877},{5,11,420},{135,11,1449},{4,0,51},{5,0,39},{6,0,4},{7,0,591},{7,0,\n849},{7,0,951},{7,0,1613},{7,0,1760},{7,0,1988},{9,0,434},{10,0,754},{11,0,25},{\n139,0,37},{10,11,57},{138,11,277},{135,10,540},{132,11,204},{135,0,159},{139,11,\n231},{133,0,902},{7,0,928},{7,11,366},{9,11,287},{12,11,199},{12,11,556},{140,11\n,577},{6,10,623},{136,10,789},{4,10,908},{5,10,359},{5,10,508},{6,10,1723},{7,10\n,343},{7,10,1996},{135,10,2026},{134,0,270},{4,10,341},{135,10,480},{5,11,356},{\n135,11,224},{11,11,588},{11,11,864},{11,11,968},{143,11,160},{132,0,556},{137,0,\n801},{132,0,416},{142,0,372},{5,0,152},{5,0,197},{7,0,340},{7,0,867},{10,0,548},\n{10,0,581},{11,0,6},{12,0,3},{12,0,19},{14,0,110},{142,0,289},{139,0,369},{7,11,\n630},{9,11,567},{11,11,150},{11,11,444},{141,11,119},{134,11,539},{7,10,1995},{8\n,10,299},{11,10,890},{140,10,674},{7,0,34},{7,0,190},{8,0,28},{8,0,141},{8,0,444\n},{8,0,811},{9,0,468},{11,0,334},{12,0,24},{12,0,386},{140,0,576},{133,0,757},{7\n,0,1553},{136,0,898},{133,0,721},{136,0,1012},{4,0,789},{5,0,647},{135,0,1102},{\n132,0,898},{4,10,238},{5,10,503},{6,10,179},{7,10,2003},{8,10,381},{8,10,473},{9\n,10,149},{10,0,183},{10,10,788},{15,10,45},{15,10,86},{20,10,110},{150,10,57},{4\n,10,121},{5,10,156},{5,10,349},{9,0,136},{10,10,605},{14,10,342},{147,0,107},{4,\n11,235},{135,11,255},{4,11,194},{5,11,584},{6,11,384},{7,11,583},{10,11,761},{11\n,11,760},{139,11,851},{6,10,80},{6,10,1694},{7,10,173},{7,10,1974},{9,10,547},{\n10,10,730},{14,10,18},{150,10,39},{4,10,923},{134,10,1711},{5,0,277},{141,0,247}\n,{132,0,435},{133,11,562},{134,0,1311},{5,11,191},{137,11,271},{132,10,595},{7,\n11,1537},{14,11,96},{143,11,73},{5,0,437},{6,10,459},{7,0,502},{7,0,519},{7,0,\n1122},{7,0,1751},{7,10,1753},{7,10,1805},{8,10,658},{9,10,1},{11,10,959},{13,10,\n446},{142,0,211},{4,11,470},{5,11,473},{6,0,814},{6,11,153},{7,11,1503},{7,11,\n1923},{10,11,701},{11,11,132},{11,11,168},{11,11,227},{11,11,320},{11,11,436},{\n11,11,525},{11,11,855},{12,11,41},{12,11,286},{13,11,103},{13,11,284},{14,11,255\n},{14,11,262},{15,11,117},{143,11,127},{5,0,265},{6,0,212},{135,0,28},{138,0,750\n},{133,11,327},{6,11,552},{7,11,1754},{137,11,604},{134,0,2012},{132,0,702},{5,\n11,80},{6,11,405},{7,11,403},{7,11,1502},{7,11,1626},{8,11,456},{9,11,487},{9,11\n,853},{9,11,889},{10,11,309},{11,11,721},{11,11,994},{12,11,430},{141,11,165},{5\n,0,808},{135,0,2045},{5,0,166},{8,0,739},{140,0,511},{134,10,490},{4,11,453},{5,\n11,887},{6,11,535},{8,11,6},{136,11,543},{4,0,119},{5,0,170},{5,0,447},{7,0,1708\n},{7,0,1889},{9,0,357},{9,0,719},{12,0,486},{140,0,596},{137,0,500},{7,10,250},{\n136,10,507},{132,10,158},{6,0,809},{134,0,1500},{4,10,140},{7,10,362},{8,10,209}\n,{9,0,327},{9,10,10},{9,10,503},{9,10,614},{10,10,689},{11,0,350},{11,0,831},{11\n,10,327},{11,10,725},{12,10,252},{12,10,583},{13,0,352},{13,10,192},{14,10,269},\n{14,10,356},{148,10,50},{135,11,741},{4,0,450},{7,0,1158},{19,10,1},{19,10,26},{\n150,10,9},{6,0,597},{135,0,1318},{134,0,1602},{6,10,228},{7,10,1341},{9,10,408},\n{138,10,343},{7,0,1375},{7,0,1466},{138,0,331},{132,0,754},{132,10,557},{5,11,\n101},{6,11,88},{6,11,543},{7,11,1677},{9,11,100},{10,11,677},{14,11,169},{14,11,\n302},{14,11,313},{15,11,48},{143,11,84},{134,0,1368},{4,11,310},{9,11,795},{10,\n11,733},{11,11,451},{12,11,249},{14,11,115},{14,11,286},{143,11,100},{132,10,548\n},{7,10,197},{8,10,142},{8,10,325},{9,10,150},{9,10,596},{10,0,557},{10,10,353},\n{11,10,74},{11,10,315},{12,10,662},{12,10,681},{14,10,423},{143,10,141},{133,11,\n587},{5,0,850},{136,0,799},{10,0,908},{12,0,701},{12,0,757},{142,0,466},{4,0,62}\n,{5,0,275},{6,10,399},{6,10,579},{7,10,692},{7,10,846},{7,10,1015},{7,10,1799},{\n8,10,403},{9,10,394},{10,10,133},{12,10,4},{12,10,297},{12,10,452},{16,10,81},{\n18,0,19},{18,10,25},{21,10,14},{22,10,12},{151,10,18},{7,10,1546},{11,10,299},{\n12,0,459},{142,10,407},{132,10,177},{132,11,498},{7,11,217},{8,11,140},{138,11,\n610},{5,10,411},{135,10,653},{134,0,1802},{7,10,439},{10,10,727},{11,10,260},{\n139,10,684},{133,11,905},{11,11,580},{142,11,201},{134,0,1397},{5,10,208},{7,10,\n753},{135,10,1528},{7,0,238},{7,0,2033},{8,0,120},{8,0,188},{8,0,659},{9,0,598},\n{10,0,466},{12,0,342},{12,0,588},{13,0,503},{14,0,246},{143,0,92},{135,11,1041},\n{4,11,456},{7,11,105},{7,11,358},{7,11,1637},{8,11,643},{139,11,483},{6,0,1318},\n{134,0,1324},{4,0,201},{5,10,242},{7,0,1744},{8,0,602},{11,0,247},{11,0,826},{\n145,0,65},{8,0,164},{146,0,62},{133,10,953},{139,10,802},{133,0,615},{7,11,1566}\n,{8,11,269},{9,11,212},{9,11,718},{14,11,15},{14,11,132},{142,11,227},{133,10,\n290},{132,10,380},{5,10,52},{7,10,277},{9,10,368},{139,10,791},{135,0,1243},{133\n,11,539},{11,11,919},{141,11,409},{136,0,968},{133,11,470},{134,0,882},{132,0,\n907},{5,0,100},{10,0,329},{12,0,416},{149,0,29},{10,10,138},{139,10,476},{5,10,\n725},{5,10,727},{6,11,91},{7,10,1811},{135,11,435},{4,11,16},{5,11,316},{5,11,\n842},{6,11,370},{6,11,1778},{8,11,166},{11,11,812},{12,11,206},{12,11,351},{14,\n11,418},{16,11,15},{16,11,34},{18,11,3},{19,11,3},{19,11,7},{20,11,4},{149,11,21\n},{132,0,176},{5,0,636},{5,0,998},{7,0,9},{7,0,1508},{8,0,26},{9,0,317},{9,0,358\n},{10,0,210},{10,0,292},{10,0,533},{11,0,555},{12,0,526},{12,0,607},{13,0,263},{\n13,0,459},{142,0,271},{4,10,38},{6,0,256},{7,10,307},{7,10,999},{7,10,1481},{7,\n10,1732},{7,10,1738},{8,0,265},{9,10,414},{11,10,316},{12,10,52},{13,10,420},{\n147,10,100},{135,10,1296},{4,11,611},{133,11,606},{4,0,643},{142,11,21},{133,11,\n715},{133,10,723},{6,0,610},{135,11,597},{10,0,127},{141,0,27},{6,0,1995},{6,0,\n2001},{8,0,119},{136,0,973},{4,11,149},{138,11,368},{4,11,154},{5,10,109},{6,10,\n1784},{7,10,1895},{7,11,1134},{8,11,105},{12,0,522},{12,10,296},{140,10,302},{4,\n11,31},{6,11,429},{7,11,962},{9,11,458},{139,11,691},{4,11,312},{5,10,216},{7,10\n,1879},{9,10,141},{9,10,270},{9,10,679},{10,0,553},{10,10,159},{11,0,876},{11,10\n,197},{12,10,538},{12,10,559},{13,0,193},{13,0,423},{14,0,166},{14,10,144},{14,\n10,167},{15,10,67},{147,0,84},{134,0,1582},{7,0,1578},{135,11,1578},{137,10,81},\n{132,11,236},{134,10,391},{134,0,795},{7,10,322},{136,10,249},{5,11,836},{5,11,\n857},{6,11,1680},{7,11,59},{147,11,53},{135,0,432},{10,11,68},{139,11,494},{4,11\n,81},{139,11,867},{7,0,126},{136,0,84},{142,11,280},{5,11,282},{8,11,650},{9,11,\n295},{9,11,907},{138,11,443},{136,0,790},{5,10,632},{138,10,526},{6,0,64},{12,0,\n377},{13,0,309},{14,0,141},{14,0,429},{14,11,141},{142,11,429},{134,0,1529},{6,0\n,321},{7,0,1857},{7,10,948},{7,10,1042},{8,10,235},{8,10,461},{9,0,530},{9,10,\n453},{10,10,354},{17,10,77},{147,0,99},{7,0,1104},{11,0,269},{11,0,539},{11,0,\n627},{11,0,706},{11,0,975},{12,0,248},{12,0,434},{12,0,600},{12,0,622},{13,0,297\n},{13,0,485},{14,0,69},{14,0,409},{143,0,108},{4,10,362},{7,10,52},{7,10,303},{\n10,11,70},{12,11,26},{14,11,17},{14,11,178},{15,11,34},{149,11,12},{11,0,977},{\n141,0,507},{9,0,34},{139,0,484},{5,10,196},{6,10,486},{7,10,212},{8,10,309},{136\n,10,346},{6,0,1700},{7,0,26},{7,0,293},{7,0,382},{7,0,1026},{7,0,1087},{7,0,2027\n},{7,10,1912},{8,0,24},{8,0,114},{8,0,252},{8,0,727},{8,0,729},{9,0,30},{9,0,199\n},{9,0,231},{9,0,251},{9,0,334},{9,0,361},{9,0,712},{10,0,55},{10,0,60},{10,0,\n232},{10,0,332},{10,0,384},{10,0,396},{10,0,504},{10,0,542},{10,0,652},{11,0,20}\n,{11,0,48},{11,0,207},{11,0,291},{11,0,298},{11,0,342},{11,0,365},{11,0,394},{11\n,0,620},{11,0,705},{11,0,1017},{12,0,123},{12,0,340},{12,0,406},{12,0,643},{13,0\n,61},{13,0,269},{13,0,311},{13,0,319},{13,0,486},{14,0,234},{15,0,62},{15,0,85},\n{16,0,71},{18,0,119},{148,0,105},{4,11,71},{5,11,376},{7,11,119},{138,11,665},{4\n,10,686},{8,11,55},{10,0,918},{138,0,926},{138,10,625},{136,10,706},{132,11,479}\n,{4,10,30},{133,10,43},{6,0,379},{7,0,270},{7,11,607},{8,0,176},{8,0,183},{8,11,\n99},{9,0,432},{9,0,661},{12,0,247},{12,0,617},{18,0,125},{152,11,4},{5,0,792},{\n133,0,900},{4,11,612},{133,11,561},{4,10,220},{4,11,41},{5,11,74},{7,10,1535},{7\n,11,1627},{11,11,871},{140,11,619},{135,0,1920},{7,11,94},{11,11,329},{11,11,965\n},{12,11,241},{14,11,354},{15,11,22},{148,11,63},{9,11,209},{137,11,300},{134,0,\n771},{135,0,1979},{4,0,901},{133,0,776},{142,0,254},{133,11,98},{9,11,16},{141,\n11,386},{133,11,984},{4,11,182},{6,11,205},{135,11,220},{7,10,1725},{7,10,1774},\n{138,10,393},{5,10,263},{134,10,414},{4,11,42},{9,11,205},{9,11,786},{138,11,659\n},{14,0,140},{148,0,41},{6,10,178},{6,10,1750},{6,11,289},{7,11,1670},{8,0,440},\n{9,10,690},{10,0,359},{10,10,155},{10,10,373},{11,10,698},{12,11,57},{13,10,155}\n,{20,10,93},{151,11,4},{4,0,37},{5,0,334},{7,0,1253},{151,11,25},{4,0,508},{4,11\n,635},{5,10,97},{137,10,393},{139,11,533},{4,0,640},{133,0,513},{134,10,1639},{\n132,11,371},{4,11,272},{7,11,836},{7,11,1651},{145,11,89},{5,11,825},{6,11,444},\n{6,11,1640},{136,11,308},{4,10,191},{7,10,934},{8,10,647},{145,10,97},{12,0,246}\n,{15,0,162},{19,0,64},{20,0,8},{20,0,95},{22,0,24},{152,0,17},{4,0,533},{5,10,\n165},{9,10,346},{138,10,655},{5,11,737},{139,10,885},{133,10,877},{8,10,128},{\n139,10,179},{137,11,307},{140,0,752},{133,0,920},{135,0,1048},{5,0,153},{6,0,580\n},{6,10,1663},{7,10,132},{7,10,1154},{7,10,1415},{7,10,1507},{12,10,493},{15,10,\n105},{151,10,15},{5,10,459},{7,10,1073},{8,10,241},{136,10,334},{138,0,391},{135\n,0,1952},{133,11,525},{8,11,641},{11,11,388},{140,11,580},{142,0,126},{134,0,640\n},{132,0,483},{6,10,324},{6,10,520},{7,0,1616},{7,10,338},{7,10,1729},{8,10,228}\n,{9,0,69},{139,10,750},{5,11,493},{134,11,528},{135,0,734},{4,11,174},{135,11,\n911},{138,0,480},{9,0,495},{146,0,104},{135,10,705},{4,10,73},{6,10,612},{7,10,\n927},{7,10,1330},{7,10,1822},{8,10,217},{9,0,472},{9,10,765},{9,10,766},{10,10,\n408},{11,10,51},{11,10,793},{12,10,266},{15,10,158},{20,10,89},{150,10,32},{7,11\n,548},{137,11,58},{4,11,32},{5,11,215},{6,11,269},{7,11,1782},{7,11,1892},{10,11\n,16},{11,11,822},{11,11,954},{141,11,481},{132,0,874},{5,10,389},{8,10,636},{137\n,0,229},{7,11,1749},{136,11,477},{134,0,948},{5,11,308},{135,11,1088},{4,0,748},\n{139,0,1009},{136,10,21},{6,0,555},{135,0,485},{5,11,126},{8,11,297},{9,11,366},\n{9,11,445},{12,11,53},{12,11,374},{141,11,492},{7,11,1551},{139,11,361},{136,0,\n193},{136,0,472},{8,0,653},{13,0,93},{147,0,14},{132,0,984},{132,11,175},{4,11,\n685},{5,0,172},{134,0,1971},{149,11,8},{133,11,797},{5,10,189},{7,10,442},{7,10,\n443},{8,10,281},{12,10,174},{13,0,83},{141,10,261},{134,0,1568},{133,11,565},{\n139,0,384},{133,0,260},{6,10,2},{7,0,758},{7,0,880},{7,0,1359},{7,10,1262},{7,10\n,1737},{8,10,22},{8,10,270},{8,10,612},{9,0,164},{9,0,167},{9,10,312},{9,10,436}\n,{10,0,156},{10,0,588},{10,10,311},{10,10,623},{11,10,72},{11,10,330},{11,10,455\n},{12,0,101},{12,10,321},{12,10,504},{12,10,530},{12,10,543},{13,10,17},{13,10,\n156},{13,10,334},{14,0,48},{15,0,70},{17,10,60},{148,10,64},{4,11,252},{7,11,\n1068},{10,11,434},{11,11,228},{11,11,426},{13,11,231},{18,11,106},{148,11,87},{7\n,10,354},{10,10,410},{139,10,815},{6,0,367},{7,10,670},{7,10,1327},{8,10,411},{8\n,10,435},{9,10,653},{9,10,740},{10,10,385},{11,10,222},{11,10,324},{11,10,829},{\n140,10,611},{6,10,166},{7,0,1174},{135,10,374},{146,0,121},{132,0,828},{5,11,231\n},{138,11,509},{7,11,601},{9,11,277},{9,11,674},{10,11,178},{10,11,257},{10,11,\n418},{11,11,531},{11,11,544},{11,11,585},{12,11,113},{12,11,475},{13,11,99},{142\n,11,428},{134,0,1541},{135,11,1779},{5,0,343},{134,10,398},{135,10,50},{135,11,\n1683},{4,0,440},{7,0,57},{8,0,167},{8,0,375},{9,0,82},{9,0,561},{9,0,744},{9,11,\n744},{138,0,620},{134,0,926},{6,10,517},{7,10,1159},{10,10,621},{139,10,192},{\n137,0,827},{8,0,194},{136,0,756},{10,10,223},{139,10,645},{7,10,64},{136,10,245}\n,{4,11,399},{5,11,119},{5,11,494},{7,11,751},{137,11,556},{132,0,808},{135,0,22}\n,{7,10,1763},{140,10,310},{5,0,639},{6,11,584},{7,0,1249},{139,0,896},{134,0,\n1614},{135,0,860},{135,11,1121},{5,10,129},{6,10,61},{135,10,947},{4,0,102},{7,0\n,815},{7,0,1699},{139,0,964},{13,10,505},{141,10,506},{139,10,1000},{132,11,679}\n,{132,0,899},{132,0,569},{5,11,694},{137,11,714},{136,0,795},{6,0,2045},{139,11,\n7},{6,0,52},{9,0,104},{9,0,559},{12,0,308},{147,0,87},{4,0,301},{132,0,604},{133\n,10,637},{136,0,779},{5,11,143},{5,11,769},{6,11,1760},{7,11,682},{7,11,1992},{\n136,11,736},{137,10,590},{147,0,32},{137,11,527},{5,10,280},{135,10,1226},{134,0\n,494},{6,0,677},{6,0,682},{134,0,1044},{133,10,281},{135,10,1064},{5,11,860},{\n135,0,508},{6,11,422},{7,11,0},{7,11,1544},{9,11,577},{11,11,990},{12,11,141},{\n12,11,453},{13,11,47},{141,11,266},{134,0,1014},{5,11,515},{137,11,131},{134,0,\n957},{132,11,646},{6,0,310},{7,0,1849},{8,0,72},{8,0,272},{8,0,431},{9,0,12},{9,\n0,376},{10,0,563},{10,0,630},{10,0,796},{10,0,810},{11,0,367},{11,0,599},{11,0,\n686},{140,0,672},{4,11,396},{7,0,570},{7,10,120},{7,11,728},{8,10,489},{9,10,319\n},{9,11,117},{10,10,820},{11,10,1004},{12,10,379},{12,10,679},{13,10,117},{13,10\n,412},{13,11,202},{14,10,25},{15,10,52},{15,10,161},{16,10,47},{20,11,51},{149,\n10,2},{6,11,121},{6,11,124},{6,11,357},{7,11,1138},{7,11,1295},{8,11,162},{139,\n11,655},{4,10,937},{5,10,801},{8,0,449},{136,11,449},{139,11,958},{6,0,181},{7,0\n,537},{8,0,64},{9,0,127},{10,0,496},{12,0,510},{141,0,384},{138,11,253},{4,0,244\n},{135,0,233},{133,11,237},{132,10,365},{6,0,1650},{10,0,702},{139,0,245},{5,10,\n7},{139,10,774},{13,0,463},{13,11,463},{20,0,49},{148,11,49},{4,10,734},{5,10,\n662},{134,10,430},{4,10,746},{135,10,1090},{5,10,360},{136,10,237},{137,0,338},{\n143,11,10},{7,11,571},{138,11,366},{134,0,1279},{9,11,513},{10,11,22},{10,11,39}\n,{12,11,122},{140,11,187},{133,0,896},{146,0,178},{134,0,695},{137,0,808},{134,\n11,587},{7,11,107},{7,11,838},{8,11,550},{138,11,401},{7,0,1117},{136,0,539},{4,\n10,277},{5,10,608},{6,10,493},{7,10,457},{140,10,384},{133,11,768},{7,10,27},{7,\n10,316},{140,0,257},{140,0,1003},{4,0,207},{5,0,586},{5,0,676},{5,10,552},{6,0,\n448},{8,0,244},{11,0,1},{13,0,3},{16,0,54},{17,0,4},{146,0,13},{4,10,401},{137,\n10,264},{5,0,516},{7,0,1883},{135,11,1883},{4,11,894},{140,0,960},{5,0,4},{5,0,\n810},{6,0,13},{6,0,538},{6,0,1690},{6,0,1726},{7,0,499},{7,0,1819},{8,0,148},{8,\n0,696},{8,0,791},{12,0,125},{143,0,9},{135,0,1268},{9,10,543},{10,10,524},{11,0,\n30},{12,10,524},{14,0,315},{16,10,18},{20,10,26},{148,10,65},{4,10,205},{5,10,\n623},{6,0,748},{7,10,104},{136,10,519},{11,0,542},{139,0,852},{140,0,6},{132,0,\n848},{7,0,1385},{7,10,579},{9,10,41},{9,10,244},{9,10,669},{10,10,5},{11,0,582},\n{11,0,650},{11,0,901},{11,0,949},{11,10,861},{11,10,951},{11,10,980},{12,0,232},\n{12,0,236},{13,0,413},{13,0,501},{146,0,116},{4,0,945},{6,0,1811},{6,0,1845},{6,\n0,1853},{6,0,1858},{8,0,862},{12,0,782},{12,0,788},{18,0,160},{148,0,117},{132,\n10,717},{4,0,925},{5,0,803},{8,0,698},{138,0,828},{134,0,1416},{132,0,610},{139,\n0,992},{6,0,878},{134,0,1477},{135,0,1847},{138,11,531},{137,11,539},{134,11,272\n},{133,0,383},{134,0,1404},{132,10,489},{4,11,9},{5,11,128},{7,11,368},{11,11,\n480},{148,11,3},{136,0,986},{9,0,660},{138,0,347},{135,10,892},{136,11,682},{7,0\n,572},{9,0,592},{11,0,680},{12,0,356},{140,0,550},{7,0,1411},{138,11,527},{4,11,\n2},{7,11,545},{135,11,894},{137,10,473},{7,10,819},{7,11,481},{9,10,26},{9,10,\n392},{9,11,792},{10,10,152},{10,10,226},{11,0,64},{12,10,276},{12,10,426},{12,10\n,589},{13,10,460},{15,10,97},{19,10,48},{148,10,104},{135,10,51},{136,11,445},{\n136,11,646},{135,0,606},{132,10,674},{6,0,1829},{134,0,1830},{132,10,770},{5,10,\n79},{7,10,1027},{7,10,1477},{139,10,52},{5,11,530},{142,11,113},{134,10,1666},{7\n,0,748},{139,0,700},{134,10,195},{133,10,789},{4,10,251},{4,10,688},{7,10,513},{\n7,10,1284},{9,0,87},{138,0,365},{136,11,111},{133,0,127},{6,0,198},{140,0,83},{\n133,11,556},{133,10,889},{4,10,160},{5,10,330},{7,10,1434},{136,10,174},{5,0,276\n},{6,0,55},{7,0,1369},{138,0,864},{8,11,16},{140,11,568},{6,0,1752},{136,0,726},\n{135,0,1066},{133,0,764},{6,11,186},{137,11,426},{11,0,683},{139,11,683},{6,0,\n309},{7,0,331},{138,0,550},{133,10,374},{6,0,1212},{6,0,1852},{7,0,1062},{8,0,\n874},{8,0,882},{138,0,936},{132,11,585},{134,0,1364},{5,10,731},{135,0,986},{6,0\n,723},{6,0,1408},{138,0,381},{135,0,1573},{134,0,1025},{4,10,626},{5,10,642},{6,\n10,425},{10,10,202},{139,10,141},{4,11,93},{5,11,252},{6,11,229},{7,11,291},{9,\n11,550},{139,11,644},{137,11,749},{137,11,162},{132,11,381},{135,0,1559},{6,0,\n194},{7,0,133},{10,0,493},{10,0,570},{139,0,664},{5,0,24},{5,0,569},{6,0,3},{6,0\n,119},{6,0,143},{6,0,440},{7,0,295},{7,0,599},{7,0,1686},{7,0,1854},{8,0,424},{9\n,0,43},{9,0,584},{9,0,760},{10,0,148},{10,0,328},{11,0,159},{11,0,253},{11,0,506\n},{12,0,487},{140,0,531},{6,0,661},{134,0,1517},{136,10,835},{151,10,17},{5,0,14\n},{5,0,892},{6,0,283},{7,0,234},{136,0,537},{139,0,541},{4,0,126},{8,0,635},{147\n,0,34},{4,0,316},{4,0,495},{135,0,1561},{4,11,187},{5,11,184},{5,11,690},{7,11,\n1869},{138,11,756},{139,11,783},{4,0,998},{137,0,861},{136,0,1009},{139,11,292},\n{5,11,21},{6,11,77},{6,11,157},{7,11,974},{7,11,1301},{7,11,1339},{7,11,1490},{7\n,11,1873},{137,11,628},{7,11,1283},{9,11,227},{9,11,499},{10,11,341},{11,11,325}\n,{11,11,408},{14,11,180},{15,11,144},{18,11,47},{147,11,49},{4,0,64},{5,0,352},{\n5,0,720},{6,0,368},{139,0,359},{5,10,384},{8,10,455},{140,10,48},{5,10,264},{134\n,10,184},{7,0,1577},{10,0,304},{10,0,549},{12,0,365},{13,0,220},{13,0,240},{142,\n0,33},{134,0,1107},{134,0,929},{135,0,1142},{6,0,175},{137,0,289},{5,0,432},{133\n,0,913},{5,10,633},{6,0,279},{7,0,219},{135,10,1323},{7,0,785},{7,10,359},{8,10,\n243},{140,10,175},{139,0,595},{132,10,105},{8,11,398},{9,11,681},{139,11,632},{\n140,0,80},{5,0,931},{134,0,1698},{142,11,241},{134,11,20},{134,0,1323},{11,0,526\n},{11,0,939},{141,0,290},{5,0,774},{6,0,780},{6,0,1637},{6,0,1686},{6,0,1751},{8\n,0,559},{141,0,109},{141,0,127},{7,0,1167},{7,11,709},{11,0,934},{13,0,391},{145\n,0,76},{135,0,963},{6,0,260},{135,0,1484},{134,0,573},{4,10,758},{139,11,941},{\n135,10,1649},{145,11,36},{4,0,292},{137,0,580},{4,0,736},{5,0,871},{6,0,1689},{\n135,0,1944},{7,11,945},{11,11,713},{139,11,744},{134,0,1164},{135,11,937},{6,0,\n1922},{7,11,1652},{9,0,982},{15,0,173},{15,0,178},{15,0,200},{18,0,189},{18,0,\n207},{149,0,47},{7,0,1695},{139,10,128},{6,0,63},{135,0,920},{133,0,793},{143,11\n,134},{133,10,918},{5,0,67},{6,0,62},{6,0,374},{135,0,1391},{4,11,579},{5,11,226\n},{5,11,323},{7,11,960},{9,0,790},{140,0,47},{10,11,784},{141,11,191},{4,0,391},\n{135,0,1169},{137,0,443},{13,11,232},{146,11,35},{132,10,340},{132,0,271},{137,\n11,313},{5,11,973},{137,11,659},{134,0,1140},{6,11,135},{135,11,1176},{4,0,253},\n{5,0,544},{7,0,300},{137,0,340},{5,10,985},{7,0,897},{7,10,509},{145,10,96},{138\n,11,735},{135,10,1919},{138,0,890},{5,0,818},{134,0,1122},{5,0,53},{5,0,541},{6,\n0,94},{6,0,499},{7,0,230},{139,0,321},{4,0,920},{5,0,25},{5,0,790},{6,0,457},{7,\n0,853},{8,0,788},{142,11,31},{132,10,247},{135,11,314},{132,0,468},{6,10,337},{7\n,0,243},{7,10,494},{8,10,27},{8,10,599},{138,10,153},{4,10,184},{5,10,390},{7,10\n,618},{7,10,1456},{139,10,710},{134,0,870},{134,0,1238},{134,0,1765},{10,0,853},\n{10,0,943},{14,0,437},{14,0,439},{14,0,443},{14,0,446},{14,0,452},{14,0,469},{14\n,0,471},{14,0,473},{16,0,93},{16,0,102},{16,0,110},{148,0,121},{4,0,605},{7,0,\n518},{7,0,1282},{7,0,1918},{10,0,180},{139,0,218},{133,0,822},{4,0,634},{11,0,\n916},{142,0,419},{6,11,281},{7,11,6},{8,11,282},{8,11,480},{8,11,499},{9,11,198}\n,{10,11,143},{10,11,169},{10,11,211},{10,11,417},{10,11,574},{11,11,147},{11,11,\n395},{12,11,75},{12,11,407},{12,11,608},{13,11,500},{142,11,251},{134,0,898},{6,\n0,36},{7,0,658},{8,0,454},{150,11,48},{133,11,674},{135,11,1776},{4,11,419},{10,\n10,227},{11,10,497},{11,10,709},{140,10,415},{6,10,360},{7,10,1664},{136,10,478}\n,{137,0,806},{12,11,508},{14,11,102},{14,11,226},{144,11,57},{135,11,1123},{4,11\n,138},{7,11,1012},{7,11,1280},{137,11,76},{5,11,29},{140,11,638},{136,10,699},{\n134,0,1326},{132,0,104},{135,11,735},{132,10,739},{134,0,1331},{7,0,260},{135,11\n,260},{135,11,1063},{7,0,45},{9,0,542},{9,0,566},{9,10,869},{138,0,728},{4,10,67\n},{5,10,422},{7,10,1037},{7,10,1289},{7,10,1555},{9,10,741},{145,10,108},{139,0,\n263},{134,0,1516},{14,0,146},{15,0,42},{16,0,23},{17,0,86},{146,0,17},{138,0,468\n},{136,0,1005},{4,11,17},{5,11,23},{7,11,995},{11,11,383},{11,11,437},{12,11,460\n},{140,11,532},{7,0,87},{142,0,288},{138,10,96},{135,11,626},{144,10,26},{7,0,\n988},{7,0,1939},{9,0,64},{9,0,502},{12,0,22},{12,0,34},{13,0,12},{13,0,234},{147\n,0,77},{8,10,203},{11,10,823},{11,10,846},{12,10,482},{13,0,133},{13,10,277},{13\n,10,302},{13,10,464},{14,10,205},{142,10,221},{4,10,449},{133,10,718},{135,0,141\n},{6,0,1842},{136,0,872},{8,11,70},{12,11,171},{141,11,272},{4,10,355},{6,10,311\n},{9,10,256},{138,10,404},{132,0,619},{137,0,261},{10,10,758},{10,11,233},{139,\n11,76},{5,0,246},{8,0,189},{9,0,355},{9,0,512},{10,0,124},{10,0,453},{11,0,143},\n{11,0,416},{11,0,859},{141,0,341},{134,11,442},{133,10,827},{5,10,64},{140,10,\n581},{4,10,442},{7,10,1047},{7,10,1352},{135,10,1643},{134,11,1709},{5,0,678},{5\n,10,977},{6,0,305},{7,0,775},{135,0,1065},{11,11,69},{12,11,105},{12,11,117},{13\n,11,213},{14,11,13},{14,11,62},{14,11,177},{14,11,421},{15,11,19},{146,11,141},{\n137,11,309},{5,0,35},{7,0,862},{7,0,1886},{138,0,179},{136,0,285},{132,0,517},{7\n,11,976},{9,11,146},{10,11,206},{10,11,596},{13,11,218},{142,11,153},{132,10,254\n},{4,10,275},{6,0,214},{7,10,1219},{12,0,540},{140,10,376},{8,0,667},{11,0,403},\n{146,0,83},{10,11,648},{11,11,671},{12,0,74},{143,11,46},{135,0,125},{134,10,\n1753},{133,0,761},{4,11,518},{6,0,912},{6,10,369},{6,10,502},{7,10,1036},{7,11,\n1136},{8,10,348},{9,10,452},{10,10,26},{11,10,224},{11,10,387},{11,10,772},{12,\n10,95},{12,10,629},{13,10,195},{13,10,207},{13,10,241},{14,10,260},{14,10,270},{\n143,10,140},{10,0,131},{140,0,72},{132,10,269},{5,10,480},{7,10,532},{7,10,1197}\n,{7,10,1358},{8,10,291},{11,10,349},{142,10,396},{8,11,689},{137,11,863},{8,0,\n333},{138,0,182},{4,11,18},{7,11,145},{7,11,444},{7,11,1278},{8,11,49},{8,11,400\n},{9,11,71},{9,11,250},{10,11,459},{12,11,160},{144,11,24},{14,11,35},{142,11,\n191},{135,11,1864},{135,0,1338},{148,10,15},{14,0,94},{15,0,65},{16,0,4},{16,0,\n77},{16,0,80},{145,0,5},{12,11,82},{143,11,36},{133,11,1010},{133,0,449},{133,0,\n646},{7,0,86},{7,10,657},{136,0,103},{7,0,2028},{138,0,641},{136,10,533},{134,0,\n1},{139,11,970},{5,11,87},{7,11,313},{7,11,1103},{10,11,112},{10,11,582},{11,11,\n389},{11,11,813},{12,11,385},{13,11,286},{14,11,124},{146,11,108},{4,11,267},{\n134,0,869},{6,0,277},{7,0,1274},{7,0,1386},{146,0,87},{6,0,187},{7,0,39},{7,0,\n1203},{8,0,380},{14,0,117},{149,0,28},{4,10,211},{4,10,332},{5,10,335},{6,10,238\n},{7,10,269},{7,10,811},{7,10,1797},{8,10,836},{9,10,507},{141,10,242},{4,0,785}\n,{5,0,368},{6,0,297},{7,0,793},{139,0,938},{7,0,464},{8,0,558},{11,0,105},{12,0,\n231},{14,0,386},{15,0,102},{148,0,75},{133,10,1009},{8,0,877},{140,0,731},{139,\n11,289},{10,11,249},{139,11,209},{132,11,561},{134,0,1608},{132,11,760},{134,0,\n1429},{9,11,154},{140,11,485},{5,10,228},{6,10,203},{7,10,156},{8,10,347},{137,\n10,265},{7,0,1010},{11,0,733},{11,0,759},{13,0,34},{14,0,427},{146,0,45},{7,10,\n1131},{135,10,1468},{136,11,255},{7,0,1656},{9,0,369},{10,0,338},{10,0,490},{11,\n0,154},{11,0,545},{11,0,775},{13,0,77},{141,0,274},{133,11,621},{134,0,1038},{4,\n11,368},{135,11,641},{6,0,2010},{8,0,979},{8,0,985},{10,0,951},{138,0,1011},{134\n,0,1005},{5,10,291},{5,10,318},{7,10,765},{9,10,389},{12,10,548},{147,0,121},{5,\n0,20},{6,0,298},{7,0,659},{137,0,219},{7,0,1440},{11,0,854},{11,0,872},{11,0,921\n},{12,0,551},{13,0,472},{142,0,367},{5,0,490},{6,0,615},{6,0,620},{135,0,683},{6\n,0,1070},{134,0,1597},{139,0,522},{132,0,439},{136,0,669},{6,0,766},{6,0,1143},{\n6,0,1245},{10,10,525},{139,10,82},{9,11,92},{147,11,91},{6,0,668},{134,0,1218},{\n6,11,525},{9,11,876},{140,11,284},{132,0,233},{136,0,547},{132,10,422},{5,10,355\n},{145,10,0},{6,11,300},{135,11,1515},{4,0,482},{137,10,905},{4,0,886},{5,11,594\n},{135,0,346},{133,10,865},{5,10,914},{134,10,1625},{135,0,334},{5,0,795},{5,10,\n234},{134,0,1741},{135,10,1383},{6,11,1641},{136,11,820},{135,0,371},{7,11,1313}\n,{138,11,660},{135,10,1312},{135,0,622},{7,0,625},{135,0,1750},{135,0,339},{4,0,\n203},{135,0,1936},{15,0,29},{15,11,29},{16,0,38},{144,11,38},{5,0,338},{135,0,\n1256},{135,10,1493},{6,10,421},{7,10,61},{7,10,1540},{10,0,130},{138,10,501},{6,\n11,389},{7,11,149},{9,11,142},{138,11,94},{137,10,341},{11,0,678},{12,0,307},{\n142,10,98},{6,11,8},{7,11,1881},{136,11,91},{135,0,2044},{6,0,770},{6,0,802},{6,\n0,812},{6,10,102},{7,0,311},{7,10,72},{9,0,308},{12,0,255},{15,10,142},{147,10,\n67},{151,10,30},{135,10,823},{135,0,1266},{135,11,1746},{135,10,1870},{4,0,400},\n{5,0,267},{135,0,232},{7,11,24},{11,11,542},{139,11,852},{135,11,1739},{4,11,503\n},{135,11,1661},{5,11,130},{7,11,1314},{9,11,610},{10,11,718},{11,11,601},{11,11\n,819},{11,11,946},{140,11,536},{10,11,149},{11,11,280},{142,11,336},{7,0,739},{7\n,11,1946},{8,10,48},{8,10,88},{8,10,582},{8,10,681},{9,10,373},{9,10,864},{11,0,\n690},{11,10,157},{11,10,843},{148,10,27},{134,0,990},{4,10,88},{5,10,137},{5,10,\n174},{5,10,777},{6,10,1664},{6,10,1725},{7,10,77},{7,10,426},{7,10,1317},{7,10,\n1355},{8,10,126},{8,10,563},{9,10,523},{9,10,750},{10,10,310},{10,10,836},{11,10\n,42},{11,10,318},{11,10,731},{12,10,68},{12,10,92},{12,10,507},{12,10,692},{13,\n10,81},{13,10,238},{13,10,374},{14,10,436},{18,10,138},{19,10,78},{19,10,111},{\n20,10,55},{20,10,77},{148,10,92},{141,10,418},{4,10,938},{135,0,1831},{6,0,776},\n{134,0,915},{138,10,351},{5,11,348},{6,10,1668},{6,11,522},{7,10,1499},{8,10,117\n},{9,10,314},{138,10,174},{135,10,707},{132,0,613},{133,10,403},{132,11,392},{5,\n11,433},{9,11,633},{139,11,629},{133,0,763},{132,0,878},{132,0,977},{132,0,100},\n{4,10,44},{5,10,311},{6,0,463},{7,10,639},{7,10,762},{7,10,1827},{9,10,8},{9,10,\n462},{148,10,83},{134,11,234},{4,10,346},{7,10,115},{9,10,180},{9,10,456},{138,\n10,363},{5,0,362},{5,0,443},{6,0,318},{7,0,1019},{139,0,623},{5,0,463},{7,11,140\n},{7,11,1950},{8,0,296},{8,11,680},{11,11,817},{147,11,88},{7,11,1222},{138,11,\n386},{142,0,137},{132,0,454},{6,11,5},{7,0,1914},{7,10,1051},{9,10,545},{11,11,\n249},{12,11,313},{16,11,66},{145,11,26},{135,0,1527},{145,0,58},{148,11,59},{5,0\n,48},{5,0,404},{6,0,557},{7,0,458},{8,0,597},{10,0,455},{10,0,606},{11,0,49},{11\n,0,548},{12,0,476},{13,0,18},{141,0,450},{5,11,963},{134,11,1773},{133,0,729},{\n138,11,586},{5,0,442},{135,0,1984},{134,0,449},{144,0,40},{4,0,853},{7,11,180},{\n8,11,509},{136,11,792},{6,10,185},{7,10,1899},{9,10,875},{139,10,673},{134,11,\n524},{4,10,327},{5,10,478},{7,10,1332},{8,10,753},{140,0,227},{5,10,1020},{5,10,\n1022},{134,0,1491},{4,10,103},{133,10,401},{132,11,931},{4,10,499},{135,10,1421}\n,{5,0,55},{7,0,376},{140,0,161},{133,0,450},{6,0,1174},{134,0,1562},{7,11,1837},\n{10,0,62},{141,0,400},{140,0,207},{135,0,869},{4,11,773},{5,11,618},{137,11,756}\n,{132,10,96},{4,0,213},{7,0,223},{7,10,968},{136,0,80},{4,11,90},{5,11,337},{5,\n11,545},{7,11,754},{9,11,186},{10,11,72},{10,11,782},{11,11,513},{11,11,577},{11\n,11,610},{11,11,889},{11,11,961},{12,11,354},{12,11,362},{12,11,461},{12,11,595}\n,{13,11,79},{143,11,121},{7,0,381},{7,0,806},{7,0,820},{8,0,354},{8,0,437},{8,0,\n787},{9,0,657},{10,0,58},{10,0,339},{10,0,749},{11,0,914},{12,0,162},{13,0,75},{\n14,0,106},{14,0,198},{14,0,320},{14,0,413},{146,0,43},{136,0,747},{136,0,954},{\n134,0,1073},{135,0,556},{7,11,151},{9,11,329},{139,11,254},{5,0,692},{134,0,1395\n},{6,10,563},{137,10,224},{134,0,191},{132,0,804},{9,11,187},{10,11,36},{17,11,\n44},{146,11,64},{7,11,165},{7,11,919},{136,11,517},{4,11,506},{5,11,295},{7,11,\n1680},{15,11,14},{144,11,5},{4,0,706},{6,0,162},{7,0,1960},{136,0,831},{135,11,\n1376},{7,11,987},{9,11,688},{10,11,522},{11,11,788},{140,11,566},{150,0,35},{138\n,0,426},{135,0,1235},{135,11,1741},{7,11,389},{7,11,700},{7,11,940},{8,11,514},{\n9,11,116},{9,11,535},{10,11,118},{11,11,107},{11,11,148},{11,11,922},{12,11,254}\n,{12,11,421},{142,11,238},{134,0,1234},{132,11,743},{4,10,910},{5,10,832},{135,\n11,1335},{141,0,96},{135,11,185},{146,0,149},{4,0,204},{137,0,902},{4,11,784},{\n133,11,745},{136,0,833},{136,0,949},{5,11,81},{7,0,366},{7,11,146},{7,11,1342},{\n7,11,1446},{8,11,53},{8,11,561},{8,11,694},{8,11,754},{9,0,287},{9,11,97},{9,11,\n115},{9,11,894},{10,11,462},{10,11,813},{11,11,230},{11,11,657},{11,11,699},{11,\n11,748},{12,0,199},{12,0,556},{12,0,577},{12,11,119},{12,11,200},{12,11,283},{14\n,11,273},{145,11,15},{5,11,408},{137,11,747},{9,11,498},{140,11,181},{6,0,2020},\n{136,0,992},{5,0,356},{135,0,224},{134,0,784},{7,0,630},{8,10,528},{9,0,567},{9,\n10,348},{11,0,150},{11,0,444},{141,0,119},{134,0,539},{4,10,20},{133,10,616},{\n142,0,27},{7,11,30},{8,11,86},{8,11,315},{8,11,700},{9,11,576},{9,11,858},{11,11\n,310},{11,11,888},{11,11,904},{12,11,361},{141,11,248},{138,11,839},{134,0,755},\n{134,0,1063},{7,10,1091},{135,10,1765},{134,11,428},{7,11,524},{8,11,169},{8,11,\n234},{9,11,480},{138,11,646},{139,0,814},{7,11,1462},{139,11,659},{4,10,26},{5,\n10,429},{6,10,245},{7,10,704},{7,10,1379},{135,10,1474},{7,11,1205},{138,11,637}\n,{139,11,803},{132,10,621},{136,0,987},{4,11,266},{8,11,4},{9,11,39},{10,11,166}\n,{11,11,918},{12,11,635},{20,11,10},{22,11,27},{150,11,43},{4,0,235},{135,0,255}\n,{4,0,194},{5,0,584},{6,0,384},{7,0,583},{10,0,761},{11,0,760},{139,0,851},{133,\n10,542},{134,0,1086},{133,10,868},{8,0,1016},{136,0,1018},{7,0,1396},{7,11,1396}\n,{136,10,433},{135,10,1495},{138,10,215},{141,10,124},{7,11,157},{8,11,279},{9,\n11,759},{16,11,31},{16,11,39},{16,11,75},{18,11,24},{20,11,42},{152,11,1},{5,0,\n562},{134,11,604},{134,0,913},{5,0,191},{137,0,271},{4,0,470},{6,0,153},{7,0,\n1503},{7,0,1923},{10,0,701},{11,0,132},{11,0,227},{11,0,320},{11,0,436},{11,0,\n525},{11,0,855},{11,0,873},{12,0,41},{12,0,286},{13,0,103},{13,0,284},{14,0,255}\n,{14,0,262},{15,0,117},{143,0,127},{7,0,475},{12,0,45},{147,10,112},{132,11,567}\n,{137,11,859},{6,0,713},{6,0,969},{6,0,1290},{134,0,1551},{133,0,327},{6,0,552},\n{6,0,1292},{7,0,1754},{137,0,604},{4,0,223},{5,11,762},{6,0,359},{7,11,1880},{9,\n11,680},{11,0,3},{11,11,798},{13,0,108},{14,0,89},{144,0,22},{5,0,80},{6,0,405},\n{7,0,403},{7,0,1502},{8,0,456},{9,0,487},{9,0,853},{9,0,889},{10,0,309},{11,0,\n721},{11,0,994},{12,0,430},{141,0,165},{133,11,298},{132,10,647},{134,0,2016},{\n18,10,10},{146,11,10},{4,0,453},{5,0,887},{6,0,535},{8,0,6},{8,0,543},{136,0,826\n},{136,0,975},{10,0,961},{138,0,962},{138,10,220},{6,0,1891},{6,0,1893},{9,0,916\n},{9,0,965},{9,0,972},{12,0,801},{12,0,859},{12,0,883},{15,0,226},{149,0,51},{\n132,10,109},{135,11,267},{7,11,92},{7,11,182},{8,11,453},{9,11,204},{11,11,950},\n{12,11,94},{12,11,644},{16,11,20},{16,11,70},{16,11,90},{147,11,55},{134,10,1746\n},{6,11,71},{7,11,845},{7,11,1308},{8,11,160},{137,11,318},{5,0,101},{6,0,88},{7\n,0,263},{7,0,628},{7,0,1677},{7,11,237},{8,0,349},{8,11,664},{9,0,100},{9,11,42}\n,{9,11,266},{9,11,380},{9,11,645},{10,0,677},{10,11,177},{10,11,276},{14,0,169},\n{14,0,302},{14,0,313},{15,0,48},{143,0,84},{138,11,69},{4,0,310},{7,0,708},{7,0,\n996},{9,0,795},{10,0,390},{10,0,733},{11,0,451},{12,0,249},{14,0,115},{14,0,286}\n,{143,0,100},{4,10,40},{5,0,587},{10,10,67},{11,10,117},{11,10,768},{139,10,935}\n,{6,0,1942},{7,0,512},{136,0,983},{7,10,992},{8,10,301},{9,10,722},{12,10,63},{\n13,10,29},{14,10,161},{143,10,18},{136,11,76},{139,10,923},{134,0,645},{134,0,\n851},{4,0,498},{132,11,293},{7,0,217},{8,0,140},{10,0,610},{14,11,352},{17,11,53\n},{18,11,146},{18,11,152},{19,11,11},{150,11,54},{134,0,1448},{138,11,841},{133,\n0,905},{4,11,605},{7,11,518},{7,11,1282},{7,11,1918},{10,11,180},{139,11,218},{\n139,11,917},{135,10,825},{140,10,328},{4,0,456},{7,0,105},{7,0,358},{7,0,1637},{\n8,0,643},{139,0,483},{134,0,792},{6,11,96},{135,11,1426},{137,11,691},{4,11,651}\n,{133,11,289},{7,11,688},{8,11,35},{9,11,511},{10,11,767},{147,11,118},{150,0,56\n},{5,0,243},{5,0,535},{6,10,204},{10,10,320},{10,10,583},{13,10,502},{14,10,72},\n{14,10,274},{14,10,312},{14,10,344},{15,10,159},{16,10,62},{16,10,69},{17,10,30}\n,{18,10,42},{18,10,53},{18,10,84},{18,10,140},{19,10,68},{19,10,85},{20,10,5},{\n20,10,45},{20,10,101},{22,10,7},{150,10,20},{4,10,558},{6,10,390},{7,10,162},{7,\n10,689},{9,10,360},{138,10,653},{146,11,23},{135,0,1748},{5,10,856},{6,10,1672},\n{6,10,1757},{134,10,1781},{4,11,704},{5,0,539},{5,0,754},{134,0,876},{135,11,\n1078},{5,10,92},{10,10,736},{140,10,102},{5,10,590},{9,10,213},{145,0,91},{134,0\n,1565},{6,0,91},{135,0,435},{4,0,939},{140,0,792},{134,0,1399},{4,0,16},{4,11,\n720},{5,0,316},{5,0,842},{5,11,306},{6,0,370},{6,0,1778},{8,0,166},{11,0,812},{\n12,0,206},{12,0,351},{14,0,418},{16,0,15},{16,0,34},{18,0,3},{19,0,3},{19,0,7},{\n20,0,4},{149,0,21},{144,0,95},{133,11,431},{132,11,234},{135,0,551},{4,0,999},{6\n,0,1966},{134,0,2042},{7,0,619},{10,0,547},{11,0,122},{12,0,601},{15,0,7},{148,0\n,20},{5,11,464},{6,11,236},{7,11,276},{7,11,696},{7,11,914},{7,11,1108},{7,11,\n1448},{9,11,15},{9,11,564},{10,11,14},{12,11,565},{13,11,449},{14,11,53},{15,11,\n13},{16,11,64},{145,11,41},{6,0,884},{6,0,1019},{134,0,1150},{6,11,1767},{12,11,\n194},{145,11,107},{136,10,503},{133,11,840},{6,10,466},{135,0,671},{132,0,888},{\n4,0,149},{138,0,368},{4,0,154},{7,0,1134},{136,0,105},{135,0,983},{9,11,642},{11\n,11,236},{142,11,193},{4,0,31},{6,0,429},{7,0,962},{9,0,458},{139,0,691},{6,0,\n643},{134,0,1102},{132,0,312},{4,11,68},{5,11,634},{6,11,386},{7,11,794},{8,11,\n273},{9,11,563},{10,11,105},{10,11,171},{11,11,94},{139,11,354},{133,0,740},{135\n,0,1642},{4,11,95},{7,11,416},{8,11,211},{139,11,830},{132,0,236},{138,10,241},{\n7,11,731},{13,11,20},{143,11,11},{5,0,836},{5,0,857},{6,0,1680},{135,0,59},{10,0\n,68},{11,0,494},{152,11,6},{4,0,81},{139,0,867},{135,0,795},{133,11,689},{4,0,\n1001},{5,0,282},{6,0,1932},{6,0,1977},{6,0,1987},{6,0,1992},{8,0,650},{8,0,919},\n{8,0,920},{8,0,923},{8,0,926},{8,0,927},{8,0,931},{8,0,939},{8,0,947},{8,0,956},\n{8,0,997},{9,0,907},{10,0,950},{10,0,953},{10,0,954},{10,0,956},{10,0,958},{10,0\n,959},{10,0,964},{10,0,970},{10,0,972},{10,0,973},{10,0,975},{10,0,976},{10,0,\n980},{10,0,981},{10,0,984},{10,0,988},{10,0,990},{10,0,995},{10,0,999},{10,0,\n1002},{10,0,1003},{10,0,1005},{10,0,1006},{10,0,1008},{10,0,1009},{10,0,1012},{\n10,0,1014},{10,0,1015},{10,0,1019},{10,0,1020},{10,0,1022},{12,0,959},{12,0,961}\n,{12,0,962},{12,0,963},{12,0,964},{12,0,965},{12,0,967},{12,0,968},{12,0,969},{\n12,0,970},{12,0,971},{12,0,972},{12,0,973},{12,0,974},{12,0,975},{12,0,976},{12,\n0,977},{12,0,979},{12,0,981},{12,0,982},{12,0,983},{12,0,984},{12,0,985},{12,0,\n986},{12,0,987},{12,0,989},{12,0,990},{12,0,992},{12,0,993},{12,0,995},{12,0,998\n},{12,0,999},{12,0,1000},{12,0,1001},{12,0,1002},{12,0,1004},{12,0,1005},{12,0,\n1006},{12,0,1007},{12,0,1008},{12,0,1009},{12,0,1010},{12,0,1011},{12,0,1012},{\n12,0,1014},{12,0,1015},{12,0,1016},{12,0,1017},{12,0,1018},{12,0,1019},{12,0,\n1022},{12,0,1023},{14,0,475},{14,0,477},{14,0,478},{14,0,479},{14,0,480},{14,0,\n482},{14,0,483},{14,0,484},{14,0,485},{14,0,486},{14,0,487},{14,0,488},{14,0,489\n},{14,0,490},{14,0,491},{14,0,492},{14,0,493},{14,0,494},{14,0,495},{14,0,496},{\n14,0,497},{14,0,498},{14,0,499},{14,0,500},{14,0,501},{14,0,502},{14,0,503},{14,\n0,504},{14,0,506},{14,0,507},{14,0,508},{14,0,509},{14,0,510},{14,0,511},{16,0,\n113},{16,0,114},{16,0,115},{16,0,117},{16,0,118},{16,0,119},{16,0,121},{16,0,122\n},{16,0,123},{16,0,124},{16,0,125},{16,0,126},{16,0,127},{18,0,242},{18,0,243},{\n18,0,244},{18,0,245},{18,0,248},{18,0,249},{18,0,250},{18,0,251},{18,0,252},{18,\n0,253},{18,0,254},{18,0,255},{20,0,125},{20,0,126},{148,0,127},{7,11,1717},{7,11\n,1769},{138,11,546},{7,11,1127},{7,11,1572},{10,11,297},{10,11,422},{11,11,764},\n{11,11,810},{12,11,264},{13,11,102},{13,11,300},{13,11,484},{14,11,147},{14,11,\n229},{17,11,71},{18,11,118},{147,11,120},{6,0,1148},{134,0,1586},{132,0,775},{\n135,10,954},{133,11,864},{133,11,928},{138,11,189},{135,10,1958},{6,10,549},{8,\n10,34},{8,10,283},{9,10,165},{138,10,475},{5,10,652},{5,10,701},{135,10,449},{\n135,11,695},{4,10,655},{7,10,850},{17,10,75},{146,10,137},{140,11,682},{133,11,\n523},{8,0,970},{136,10,670},{136,11,555},{7,11,76},{8,11,44},{9,11,884},{10,11,\n580},{11,11,399},{11,11,894},{15,11,122},{18,11,144},{147,11,61},{6,10,159},{6,\n10,364},{7,10,516},{7,10,1439},{137,10,518},{4,0,71},{5,0,376},{7,0,119},{138,0,\n665},{141,10,151},{11,0,827},{14,0,34},{143,0,148},{133,11,518},{4,0,479},{135,\n11,1787},{135,11,1852},{135,10,993},{7,0,607},{136,0,99},{134,0,1960},{132,0,793\n},{4,0,41},{5,0,74},{7,0,1627},{11,0,871},{140,0,619},{7,0,94},{11,0,329},{11,0,\n965},{12,0,241},{14,0,354},{15,0,22},{148,0,63},{7,10,501},{9,10,111},{10,10,141\n},{11,10,332},{13,10,43},{13,10,429},{14,10,130},{14,10,415},{145,10,102},{9,0,\n209},{137,0,300},{134,0,1497},{138,11,255},{4,11,934},{5,11,138},{136,11,610},{\n133,0,98},{6,0,1316},{10,11,804},{138,11,832},{8,11,96},{9,11,36},{10,11,607},{\n11,11,423},{11,11,442},{12,11,309},{14,11,199},{15,11,90},{145,11,110},{132,0,\n463},{5,10,149},{136,10,233},{133,10,935},{4,11,652},{8,11,320},{9,11,13},{9,11,\n398},{9,11,727},{10,11,75},{10,11,184},{10,11,230},{10,11,564},{10,11,569},{11,\n11,973},{12,11,70},{12,11,189},{13,11,57},{13,11,257},{22,11,6},{150,11,16},{142\n,0,291},{12,10,582},{146,10,131},{136,10,801},{133,0,984},{145,11,116},{4,11,692\n},{133,11,321},{4,0,182},{6,0,205},{135,0,220},{4,0,42},{9,0,205},{9,0,786},{138\n,0,659},{6,0,801},{11,11,130},{140,11,609},{132,0,635},{5,11,345},{135,11,1016},\n{139,0,533},{132,0,371},{4,0,272},{135,0,836},{6,0,1282},{135,11,1100},{5,0,825}\n,{134,0,1640},{135,11,1325},{133,11,673},{4,11,287},{133,11,1018},{135,0,357},{6\n,0,467},{137,0,879},{7,0,317},{135,0,569},{6,0,924},{134,0,1588},{5,10,406},{5,\n11,34},{10,11,724},{12,11,444},{13,11,354},{18,11,32},{23,11,24},{23,11,31},{152\n,11,5},{6,0,1795},{6,0,1835},{6,0,1836},{6,0,1856},{8,0,844},{8,0,849},{8,0,854}\n,{8,0,870},{8,0,887},{10,0,852},{138,0,942},{6,10,69},{135,10,117},{137,0,307},{\n4,0,944},{6,0,1799},{6,0,1825},{10,0,848},{10,0,875},{10,0,895},{10,0,899},{10,0\n,902},{140,0,773},{11,0,43},{13,0,72},{141,0,142},{135,10,1830},{134,11,382},{4,\n10,432},{135,10,824},{132,11,329},{7,0,1820},{139,11,124},{133,10,826},{133,0,\n525},{132,11,906},{7,11,1940},{136,11,366},{138,11,10},{4,11,123},{4,11,649},{5,\n11,605},{7,11,1509},{136,11,36},{6,0,110},{135,0,1681},{133,0,493},{133,11,767},\n{4,0,174},{135,0,911},{138,11,786},{8,0,417},{137,0,782},{133,10,1000},{7,0,733}\n,{137,0,583},{4,10,297},{6,10,529},{7,10,152},{7,10,713},{7,10,1845},{8,10,710},\n{8,10,717},{12,10,639},{140,10,685},{4,0,32},{5,0,215},{6,0,269},{7,0,1782},{7,0\n,1892},{10,0,16},{11,0,822},{11,0,954},{141,0,481},{4,11,273},{5,11,658},{133,11\n,995},{136,0,477},{134,11,72},{135,11,1345},{4,10,520},{5,0,308},{7,0,1088},{135\n,10,575},{133,11,589},{5,0,126},{8,0,297},{9,0,366},{140,0,374},{7,0,1551},{139,\n0,361},{5,11,117},{6,11,514},{6,11,541},{7,11,1164},{7,11,1436},{8,11,220},{8,11\n,648},{10,11,688},{139,11,560},{133,11,686},{4,0,946},{6,0,1807},{8,0,871},{10,0\n,854},{10,0,870},{10,0,888},{10,0,897},{10,0,920},{12,0,722},{12,0,761},{12,0,\n763},{12,0,764},{14,0,454},{14,0,465},{16,0,107},{18,0,167},{18,0,168},{146,0,\n172},{132,0,175},{135,0,1307},{132,0,685},{135,11,1834},{133,0,797},{6,0,745},{6\n,0,858},{134,0,963},{133,0,565},{5,10,397},{6,10,154},{7,10,676},{7,11,196},{8,\n10,443},{8,10,609},{9,10,24},{9,10,325},{10,10,35},{10,11,765},{11,10,535},{11,\n10,672},{11,10,1018},{11,11,347},{11,11,552},{11,11,576},{11,11,790},{12,10,637}\n,{12,11,263},{13,11,246},{13,11,270},{13,11,395},{14,11,74},{14,11,176},{14,11,\n190},{14,11,398},{14,11,412},{15,11,32},{15,11,63},{16,10,30},{16,11,88},{147,11\n,105},{13,11,84},{141,11,122},{4,0,252},{7,0,1068},{10,0,434},{11,0,228},{11,0,\n426},{13,0,231},{18,0,106},{148,0,87},{137,0,826},{4,11,589},{139,11,282},{5,11,\n381},{135,11,1792},{132,0,791},{5,0,231},{5,10,981},{138,0,509},{7,0,601},{9,0,\n277},{9,0,674},{10,0,178},{10,0,418},{10,0,571},{11,0,531},{12,0,113},{12,0,475}\n,{13,0,99},{142,0,428},{4,10,56},{7,10,1791},{7,11,616},{8,10,607},{8,10,651},{\n10,11,413},{11,10,465},{11,10,835},{12,10,337},{141,10,480},{7,0,1591},{144,0,43\n},{9,10,158},{138,10,411},{135,0,1683},{8,0,289},{11,0,45},{12,0,278},{140,0,537\n},{6,11,120},{7,11,1188},{7,11,1710},{8,11,286},{9,11,667},{11,11,592},{139,11,\n730},{136,10,617},{135,0,1120},{135,11,1146},{139,10,563},{4,10,369},{4,11,352},\n{135,11,687},{143,11,38},{4,0,399},{5,0,119},{5,0,494},{7,0,751},{9,0,556},{14,\n11,179},{15,11,151},{150,11,11},{4,11,192},{5,11,49},{6,11,200},{6,11,293},{6,11\n,1696},{135,11,488},{4,0,398},{133,0,660},{6,10,622},{135,0,1030},{135,11,595},{\n141,0,168},{132,11,147},{7,0,973},{10,10,624},{142,10,279},{132,10,363},{132,0,\n642},{133,11,934},{134,0,1615},{7,11,505},{135,11,523},{7,0,594},{7,0,851},{7,0,\n1858},{9,0,411},{9,0,574},{9,0,666},{9,0,737},{10,0,346},{10,0,712},{11,0,246},{\n11,0,432},{11,0,517},{11,0,647},{11,0,679},{11,0,727},{12,0,304},{12,0,305},{12,\n0,323},{12,0,483},{12,0,572},{12,0,593},{12,0,602},{13,0,95},{13,0,101},{13,0,\n171},{13,0,315},{13,0,378},{13,0,425},{13,0,475},{14,0,63},{14,0,380},{14,0,384}\n,{15,0,133},{18,0,112},{148,0,72},{135,0,1093},{132,0,679},{8,0,913},{10,0,903},\n{10,0,915},{10,11,438},{12,0,648},{12,0,649},{14,0,455},{144,0,112},{137,0,203},\n{134,10,292},{134,0,1492},{5,10,177},{6,10,616},{7,0,1374},{7,10,827},{8,0,540},\n{9,10,525},{138,10,656},{135,0,1486},{9,0,714},{138,10,31},{136,0,825},{134,0,\n1511},{132,11,637},{134,0,952},{4,10,161},{133,10,631},{5,0,143},{5,0,769},{6,0,\n1760},{7,0,682},{7,0,1992},{136,0,736},{132,0,700},{134,0,1540},{132,11,777},{9,\n11,867},{138,11,837},{7,0,1557},{135,10,1684},{133,0,860},{6,0,422},{7,0,0},{7,0\n,1544},{9,0,605},{9,10,469},{9,10,709},{11,0,990},{12,0,235},{12,0,453},{12,10,\n512},{13,0,47},{13,0,266},{14,10,65},{145,10,12},{10,10,229},{11,0,807},{11,10,\n73},{139,10,376},{6,11,170},{7,11,1080},{8,11,395},{8,11,487},{11,11,125},{141,\n11,147},{5,0,515},{137,0,131},{7,0,1605},{11,0,962},{146,0,139},{132,0,646},{4,0\n,396},{7,0,728},{9,0,117},{13,0,202},{148,0,51},{4,11,535},{6,0,121},{6,0,124},{\n6,0,357},{6,10,558},{7,0,1138},{7,0,1295},{7,10,651},{8,0,162},{8,0,508},{8,11,\n618},{9,10,0},{10,10,34},{11,0,655},{139,10,1008},{135,11,1245},{138,0,357},{150\n,11,23},{133,0,237},{135,0,1784},{7,10,1832},{138,10,374},{132,0,713},{132,11,46\n},{5,11,811},{6,0,1536},{6,11,1679},{6,11,1714},{7,11,2032},{138,0,348},{11,11,\n182},{142,11,195},{6,0,523},{7,0,738},{7,10,771},{7,10,1731},{9,10,405},{138,10,\n421},{7,11,1458},{9,11,407},{139,11,15},{6,11,34},{7,11,69},{7,11,640},{7,11,\n1089},{8,11,708},{8,11,721},{9,11,363},{9,11,643},{10,11,628},{148,11,98},{133,0\n,434},{135,0,1877},{7,0,571},{138,0,366},{5,10,881},{133,10,885},{9,0,513},{10,0\n,25},{10,0,39},{12,0,122},{140,0,187},{132,0,580},{5,10,142},{134,10,546},{132,\n11,462},{137,0,873},{5,10,466},{11,10,571},{12,10,198},{13,10,283},{14,10,186},{\n15,10,21},{143,10,103},{4,10,185},{5,10,257},{5,10,839},{5,10,936},{7,0,171},{9,\n10,399},{10,10,258},{10,10,395},{10,10,734},{11,10,1014},{12,10,23},{13,10,350},\n{14,10,150},{147,10,6},{134,0,625},{7,0,107},{7,0,838},{8,0,550},{138,0,401},{5,\n11,73},{6,11,23},{134,11,338},{4,0,943},{6,0,1850},{12,0,713},{142,0,434},{7,10,\n404},{7,10,1377},{7,10,1430},{7,10,2017},{8,10,149},{8,10,239},{8,10,512},{8,10,\n793},{8,10,818},{9,10,474},{9,10,595},{10,10,122},{10,10,565},{10,10,649},{10,10\n,783},{11,0,588},{11,0,864},{11,0,936},{11,0,968},{11,10,239},{11,10,295},{11,10\n,447},{11,10,528},{11,10,639},{11,10,800},{12,0,73},{12,0,343},{12,0,394},{12,10\n,25},{12,10,157},{12,10,316},{12,10,390},{12,10,391},{12,10,395},{12,10,478},{12\n,10,503},{12,10,592},{12,10,680},{13,0,275},{13,10,50},{13,10,53},{13,10,132},{\n13,10,198},{13,10,322},{13,10,415},{13,10,511},{14,0,257},{14,10,71},{14,10,395}\n,{15,0,160},{15,10,71},{15,10,136},{17,10,123},{18,10,93},{147,10,58},{133,0,768\n},{11,0,103},{142,0,0},{136,10,712},{132,0,799},{132,0,894},{7,11,725},{8,11,498\n},{139,11,268},{135,11,1798},{135,11,773},{141,11,360},{4,10,377},{152,10,13},{\n135,0,1673},{132,11,583},{134,0,1052},{133,11,220},{140,11,69},{132,11,544},{4,\n10,180},{135,10,1906},{134,0,272},{4,0,441},{134,0,1421},{4,0,9},{5,0,128},{7,0,\n368},{11,0,480},{148,0,3},{5,11,176},{6,11,437},{6,11,564},{11,11,181},{141,11,\n183},{132,10,491},{7,0,1182},{141,11,67},{4,10,171},{6,0,1346},{138,10,234},{4,\n10,586},{7,10,1186},{138,10,631},{136,0,682},{134,0,1004},{15,0,24},{143,11,24},\n{134,0,968},{4,0,2},{6,0,742},{6,0,793},{7,0,545},{7,0,894},{9,10,931},{10,10,\n334},{148,10,71},{136,11,600},{133,10,765},{9,0,769},{140,0,185},{4,11,790},{5,\n11,273},{134,11,394},{7,0,474},{137,0,578},{4,11,135},{6,11,127},{7,11,1185},{7,\n11,1511},{8,11,613},{11,11,5},{12,11,133},{12,11,495},{12,11,586},{14,11,385},{\n15,11,118},{17,11,20},{146,11,98},{133,10,424},{5,0,530},{142,0,113},{6,11,230},\n{7,11,961},{7,11,1085},{136,11,462},{7,11,1954},{137,11,636},{136,10,714},{149,\n11,6},{135,10,685},{9,10,420},{10,10,269},{10,10,285},{10,10,576},{11,10,397},{\n13,10,175},{145,10,90},{132,10,429},{5,0,556},{5,11,162},{136,11,68},{132,11,654\n},{4,11,156},{7,11,998},{7,11,1045},{7,11,1860},{9,11,48},{9,11,692},{11,11,419}\n,{139,11,602},{6,0,1317},{7,11,1276},{8,0,16},{8,11,474},{9,0,825},{9,11,652},{\n140,0,568},{7,10,18},{7,10,699},{7,10,1966},{8,10,752},{9,10,273},{9,10,412},{9,\n10,703},{10,10,71},{10,10,427},{10,10,508},{146,0,97},{7,11,1454},{10,0,703},{\n138,11,703},{4,10,53},{5,10,186},{135,10,752},{134,0,892},{134,0,1571},{8,10,575\n},{10,10,289},{139,10,319},{6,0,186},{137,0,426},{134,0,1101},{132,10,675},{132,\n0,585},{6,0,1870},{137,0,937},{152,11,10},{9,11,197},{10,11,300},{12,11,473},{13\n,11,90},{141,11,405},{4,0,93},{5,0,252},{6,0,229},{7,0,291},{9,0,550},{139,0,644\n},{137,0,749},{6,10,209},{8,10,468},{9,0,162},{9,10,210},{11,10,36},{12,10,28},{\n12,10,630},{13,10,21},{13,10,349},{14,10,7},{145,10,13},{132,0,381},{132,11,606}\n,{4,10,342},{135,10,1179},{7,11,1587},{7,11,1707},{10,11,528},{139,11,504},{12,\n11,39},{13,11,265},{141,11,439},{4,10,928},{133,10,910},{7,10,1838},{7,11,1978},\n{136,11,676},{6,0,762},{6,0,796},{134,0,956},{4,10,318},{4,10,496},{7,10,856},{\n139,10,654},{137,11,242},{4,11,361},{133,11,315},{132,11,461},{132,11,472},{132,\n0,857},{5,0,21},{6,0,77},{6,0,157},{7,0,974},{7,0,1301},{7,0,1339},{7,0,1490},{7\n,0,1873},{7,10,915},{8,10,247},{9,0,628},{147,10,0},{4,10,202},{5,10,382},{6,10,\n454},{7,10,936},{7,10,1803},{8,10,758},{9,10,375},{9,10,895},{10,10,743},{10,10,\n792},{11,10,978},{11,10,1012},{142,10,109},{7,11,617},{10,11,498},{11,11,501},{\n12,11,16},{140,11,150},{7,10,1150},{7,10,1425},{7,10,1453},{10,11,747},{140,10,\n513},{133,11,155},{11,0,919},{141,0,409},{138,10,791},{10,0,633},{139,11,729},{7\n,11,163},{8,11,319},{9,11,402},{10,11,24},{10,11,681},{11,11,200},{11,11,567},{\n12,11,253},{12,11,410},{142,11,219},{5,11,475},{7,11,1780},{9,11,230},{11,11,297\n},{11,11,558},{14,11,322},{147,11,76},{6,10,445},{7,0,332},{137,10,909},{135,11,\n1956},{136,11,274},{134,10,578},{135,0,1489},{135,11,1848},{5,11,944},{134,11,\n1769},{132,11,144},{136,10,766},{4,0,832},{135,10,541},{8,0,398},{9,0,681},{139,\n0,632},{136,0,645},{9,0,791},{10,0,93},{16,0,13},{17,0,23},{18,0,135},{19,0,12},\n{20,0,1},{20,0,12},{148,0,14},{6,11,247},{137,11,555},{134,0,20},{132,0,800},{\n135,0,1841},{139,10,983},{137,10,768},{132,10,584},{141,11,51},{4,11,620},{6,0,\n1993},{138,11,280},{136,0,769},{7,11,1810},{11,0,290},{11,0,665},{11,11,866},{12\n,11,103},{13,11,495},{17,11,67},{147,11,74},{134,0,1426},{139,0,60},{4,10,326},{\n135,10,1770},{4,10,226},{7,0,1874},{137,0,641},{5,10,426},{6,0,644},{8,10,30},{9\n,10,2},{11,10,549},{147,10,122},{5,11,428},{138,11,442},{135,11,1871},{135,0,\n1757},{147,10,117},{135,0,937},{135,0,1652},{6,0,654},{134,0,1476},{133,11,99},{\n135,0,527},{132,10,345},{4,10,385},{4,11,397},{7,10,265},{135,10,587},{4,0,579},\n{5,0,226},{5,0,323},{135,0,960},{134,0,1486},{8,11,502},{144,11,9},{4,10,347},{5\n,10,423},{5,10,996},{135,10,1329},{7,11,727},{146,11,73},{4,11,485},{7,10,1259},\n{7,11,353},{7,11,1523},{9,10,125},{139,10,65},{5,10,136},{6,0,325},{6,11,366},{7\n,11,1384},{7,11,1601},{136,10,644},{138,11,160},{6,0,1345},{137,11,282},{18,0,91\n},{147,0,70},{136,0,404},{4,11,157},{133,11,471},{133,0,973},{6,0,135},{135,0,\n1176},{8,11,116},{11,11,551},{142,11,159},{4,0,549},{4,10,433},{133,10,719},{136\n,0,976},{5,11,160},{7,11,363},{7,11,589},{10,11,170},{141,11,55},{144,0,21},{144\n,0,51},{135,0,314},{135,10,1363},{4,11,108},{7,11,405},{10,11,491},{139,11,498},\n{146,0,4},{4,10,555},{8,10,536},{10,10,288},{139,10,1005},{135,11,1005},{6,0,281\n},{7,0,6},{8,0,282},{8,0,480},{8,0,499},{9,0,198},{10,0,143},{10,0,169},{10,0,\n211},{10,0,417},{10,0,574},{11,0,147},{11,0,395},{12,0,75},{12,0,407},{12,0,608}\n,{13,0,500},{142,0,251},{6,0,1093},{6,0,1405},{9,10,370},{138,10,90},{4,11,926},\n{133,11,983},{135,0,1776},{134,0,1528},{132,0,419},{132,11,538},{6,11,294},{7,11\n,1267},{136,11,624},{135,11,1772},{138,11,301},{4,10,257},{135,10,2031},{4,0,138\n},{7,0,1012},{7,0,1280},{7,10,1768},{137,0,76},{132,11,757},{5,0,29},{140,0,638}\n,{7,11,655},{135,11,1844},{6,11,257},{7,0,1418},{135,11,1522},{8,11,469},{138,11\n,47},{142,11,278},{6,10,83},{6,10,1733},{135,10,1389},{11,11,204},{11,11,243},{\n140,11,293},{135,11,1875},{6,0,1710},{135,0,2038},{137,11,299},{4,0,17},{5,0,23}\n,{7,0,995},{11,0,383},{11,0,437},{12,0,460},{140,0,532},{133,0,862},{137,10,696}\n,{6,0,592},{138,0,946},{138,11,599},{7,10,1718},{9,10,95},{9,10,274},{10,10,279}\n,{10,10,317},{10,10,420},{11,10,303},{11,10,808},{12,10,134},{12,10,367},{13,10,\n149},{13,10,347},{14,10,349},{14,10,406},{18,10,22},{18,10,89},{18,10,122},{147,\n10,47},{8,0,70},{12,0,171},{141,0,272},{133,10,26},{132,10,550},{137,0,812},{10,\n0,233},{139,0,76},{134,0,988},{134,0,442},{136,10,822},{4,10,902},{5,10,809},{6,\n10,122},{135,0,896},{5,11,150},{7,11,106},{8,11,603},{9,11,593},{9,11,634},{10,\n11,44},{10,11,173},{11,11,462},{11,11,515},{13,11,216},{13,11,288},{142,11,400},\n{136,0,483},{135,10,262},{5,10,620},{134,0,1709},{4,10,34},{5,10,574},{7,10,279}\n,{7,10,1624},{136,10,601},{137,10,170},{147,0,119},{12,11,108},{141,11,291},{11,\n0,69},{12,0,105},{12,0,117},{13,0,213},{14,0,13},{14,0,62},{14,0,177},{14,0,421}\n,{15,0,19},{146,0,141},{137,0,309},{11,11,278},{142,11,73},{7,0,608},{7,0,976},{\n9,0,146},{10,0,206},{10,0,596},{13,0,218},{142,0,153},{133,10,332},{6,10,261},{8\n,10,182},{139,10,943},{4,11,493},{144,11,55},{134,10,1721},{132,0,768},{4,10,933\n},{133,10,880},{7,11,555},{7,11,1316},{7,11,1412},{7,11,1839},{9,11,192},{9,11,\n589},{11,11,241},{11,11,676},{11,11,811},{11,11,891},{12,11,140},{12,11,346},{12\n,11,479},{13,11,30},{13,11,49},{13,11,381},{14,11,188},{15,11,150},{16,11,76},{\n18,11,30},{148,11,52},{4,0,518},{135,0,1136},{6,11,568},{7,11,112},{7,11,1804},{\n8,11,362},{8,11,410},{8,11,830},{9,11,514},{11,11,649},{142,11,157},{135,11,673}\n,{8,0,689},{137,0,863},{4,0,18},{4,11,625},{7,0,145},{7,0,444},{7,0,1278},{8,0,\n49},{8,0,400},{9,0,71},{9,0,250},{10,0,459},{12,0,160},{144,0,24},{140,0,1020},{\n4,0,997},{6,0,1946},{6,0,1984},{134,0,1998},{6,11,16},{6,11,158},{7,11,43},{7,11\n,129},{7,11,181},{8,11,276},{8,11,377},{10,11,523},{11,11,816},{12,11,455},{13,\n11,303},{142,11,135},{133,10,812},{134,0,658},{4,11,1},{7,11,1143},{7,11,1463},{\n8,11,61},{9,11,207},{9,11,390},{9,11,467},{139,11,836},{150,11,26},{140,0,106},{\n4,10,137},{6,0,1827},{7,10,1178},{7,10,1520},{7,11,1319},{10,0,931},{18,0,166},{\n148,0,114},{133,0,1010},{4,11,723},{5,11,895},{7,11,1031},{8,11,199},{8,11,340},\n{9,11,153},{9,11,215},{10,11,21},{10,11,59},{10,11,80},{10,11,224},{11,11,229},{\n11,11,652},{12,11,192},{13,11,146},{142,11,91},{132,11,295},{6,11,619},{7,11,898\n},{7,11,1092},{8,11,485},{18,11,28},{147,11,116},{137,11,51},{6,10,1661},{7,10,\n1975},{7,10,2009},{135,10,2011},{5,11,309},{140,11,211},{5,0,87},{7,0,313},{7,0,\n1103},{10,0,208},{10,0,582},{11,0,389},{11,0,813},{12,0,385},{13,0,286},{14,0,\n124},{146,0,108},{5,11,125},{8,11,77},{138,11,15},{132,0,267},{133,0,703},{137,\n11,155},{133,11,439},{11,11,164},{140,11,76},{5,10,89},{7,10,1915},{9,0,496},{9,\n10,185},{9,10,235},{10,10,64},{10,10,270},{10,10,403},{10,10,469},{10,10,529},{\n10,10,590},{11,10,140},{11,10,860},{13,10,1},{13,10,422},{14,10,341},{14,10,364}\n,{17,10,93},{18,10,113},{19,10,97},{147,10,113},{133,10,695},{135,0,1121},{5,10,\n6},{6,10,183},{7,10,680},{7,10,978},{7,10,1013},{7,10,1055},{12,10,230},{13,10,\n172},{146,10,29},{4,11,8},{7,11,1152},{7,11,1153},{7,11,1715},{9,11,374},{10,11,\n478},{139,11,648},{135,11,1099},{6,10,29},{139,10,63},{4,0,561},{10,0,249},{139,\n0,209},{132,0,760},{7,11,799},{138,11,511},{136,11,87},{9,0,154},{140,0,485},{\n136,0,255},{132,0,323},{140,0,419},{132,10,311},{134,10,1740},{4,0,368},{135,0,\n641},{7,10,170},{8,10,90},{8,10,177},{8,10,415},{11,10,714},{142,10,281},{4,11,\n69},{5,11,122},{9,11,656},{138,11,464},{5,11,849},{134,11,1633},{8,0,522},{142,0\n,328},{11,10,91},{13,10,129},{15,10,101},{145,10,125},{4,10,494},{6,10,74},{7,0,\n562},{7,10,44},{8,0,551},{11,11,499},{12,10,17},{15,10,5},{148,10,11},{4,10,276}\n,{133,10,296},{9,0,92},{147,0,91},{4,10,7},{5,10,90},{5,10,158},{6,10,542},{7,10\n,221},{7,10,1574},{9,10,490},{10,10,540},{11,10,443},{139,10,757},{6,0,525},{6,0\n,1976},{8,0,806},{9,0,876},{140,0,284},{5,11,859},{7,10,588},{7,11,1160},{8,11,\n107},{9,10,175},{9,11,291},{9,11,439},{10,10,530},{10,11,663},{11,11,609},{140,\n11,197},{7,11,168},{13,11,196},{141,11,237},{139,0,958},{133,0,594},{135,10,580}\n,{7,10,88},{136,10,627},{5,10,872},{6,0,479},{6,0,562},{6,10,57},{7,0,1060},{7,\n10,471},{9,10,447},{9,10,454},{141,0,6},{136,11,413},{145,11,19},{4,11,117},{6,\n11,372},{7,11,1905},{142,11,323},{4,11,722},{139,11,471},{5,10,31},{6,10,614},{\n145,0,61},{8,10,330},{140,10,477},{7,10,1200},{138,10,460},{6,10,424},{135,10,\n1866},{6,0,1641},{136,0,820},{6,0,1556},{134,0,1618},{9,11,5},{12,11,216},{12,11\n,294},{12,11,298},{12,11,400},{12,11,518},{13,11,229},{143,11,139},{15,11,155},{\n144,11,79},{4,0,302},{135,0,1766},{5,10,13},{134,10,142},{6,0,148},{7,0,1313},{7\n,10,116},{8,10,322},{8,10,755},{9,10,548},{10,10,714},{11,10,884},{141,10,324},{\n137,0,676},{9,11,88},{139,11,270},{5,11,12},{7,11,375},{137,11,438},{134,0,1674}\n,{7,10,1472},{135,10,1554},{7,10,1071},{7,10,1541},{7,10,1767},{7,10,1806},{11,0\n,178},{11,10,162},{11,10,242},{12,10,605},{15,10,26},{144,10,44},{6,0,389},{7,0,\n149},{9,0,142},{138,0,94},{140,11,71},{145,10,115},{6,0,8},{7,0,1881},{8,0,91},{\n11,11,966},{12,11,287},{13,11,342},{13,11,402},{15,11,110},{143,11,163},{4,11,\n258},{136,11,639},{6,11,22},{7,11,903},{138,11,577},{133,11,681},{135,10,1111},{\n135,11,1286},{8,10,1},{9,0,112},{138,10,326},{5,10,488},{6,10,527},{7,10,489},{7\n,10,1636},{8,10,121},{8,10,144},{8,10,359},{9,10,193},{9,10,241},{9,10,336},{9,\n10,882},{11,10,266},{11,10,372},{11,10,944},{12,10,401},{140,10,641},{4,11,664},\n{133,11,804},{6,0,747},{134,0,1015},{135,0,1746},{9,10,31},{10,10,244},{10,10,\n699},{12,10,149},{141,10,497},{133,10,377},{135,0,24},{5,11,32},{6,0,1352},{145,\n10,101},{7,0,1530},{10,0,158},{13,0,13},{13,0,137},{13,0,258},{14,0,111},{14,0,\n225},{14,0,253},{14,0,304},{14,0,339},{14,0,417},{146,0,33},{4,0,503},{135,0,\n1661},{5,0,130},{6,0,845},{7,0,1314},{9,0,610},{10,0,718},{11,0,601},{11,0,819},\n{11,0,946},{140,0,536},{10,0,149},{11,0,280},{142,0,336},{134,0,1401},{135,0,\n1946},{8,0,663},{144,0,8},{134,0,1607},{135,10,2023},{4,11,289},{7,11,629},{7,11\n,1698},{7,11,1711},{140,11,215},{6,11,450},{136,11,109},{10,0,882},{10,0,883},{\n10,0,914},{138,0,928},{133,10,843},{136,11,705},{132,10,554},{133,10,536},{5,0,\n417},{9,10,79},{11,10,625},{145,10,7},{7,11,1238},{142,11,37},{4,0,392},{135,0,\n1597},{4,10,424},{5,0,433},{9,0,633},{139,0,629},{7,10,336},{136,10,785},{134,11\n,355},{6,0,234},{7,0,769},{9,0,18},{138,0,358},{4,10,896},{134,10,1777},{138,11,\n323},{7,0,140},{7,0,1950},{8,0,680},{11,0,817},{147,0,88},{7,0,1222},{138,0,386}\n,{139,11,908},{11,0,249},{12,0,313},{16,0,66},{145,0,26},{134,0,5},{7,10,750},{9\n,10,223},{11,10,27},{11,10,466},{12,10,624},{14,10,265},{146,10,61},{134,11,26},\n{134,0,1216},{5,0,963},{134,0,1773},{4,11,414},{5,11,467},{9,11,654},{10,11,451}\n,{12,11,59},{141,11,375},{135,11,17},{4,10,603},{133,10,661},{4,10,11},{6,10,128\n},{7,10,231},{7,10,1533},{138,10,725},{135,11,955},{7,0,180},{8,0,509},{136,0,\n792},{132,10,476},{132,0,1002},{133,11,538},{135,10,1807},{132,0,931},{7,0,943},\n{11,0,614},{140,0,747},{135,0,1837},{9,10,20},{10,10,324},{10,10,807},{139,10,\n488},{134,0,641},{6,11,280},{10,11,502},{11,11,344},{140,11,38},{5,11,45},{7,11,\n1161},{11,11,448},{11,11,880},{13,11,139},{13,11,407},{15,11,16},{17,11,95},{18,\n11,66},{18,11,88},{18,11,123},{149,11,7},{9,0,280},{138,0,134},{22,0,22},{23,0,5\n},{151,0,29},{136,11,777},{4,0,90},{4,11,410},{5,0,545},{7,0,754},{7,11,521},{9,\n0,186},{10,0,72},{10,0,782},{11,0,577},{11,0,610},{11,0,960},{12,0,354},{12,0,\n362},{140,0,595},{135,11,1778},{5,10,112},{6,10,103},{134,10,150},{138,10,356},{\n132,0,742},{7,0,151},{9,0,329},{139,0,254},{8,0,853},{8,0,881},{8,0,911},{8,0,\n912},{10,0,872},{12,0,741},{12,0,742},{152,0,18},{4,11,573},{136,11,655},{6,0,\n921},{134,0,934},{9,0,187},{10,0,36},{11,0,1016},{17,0,44},{146,0,64},{7,0,833},\n{136,0,517},{4,0,506},{5,0,295},{135,0,1680},{4,10,708},{8,10,15},{9,10,50},{9,\n10,386},{11,10,18},{11,10,529},{140,10,228},{4,10,563},{7,0,251},{7,0,1701},{7,\n10,592},{7,10,637},{7,10,770},{8,0,436},{8,10,463},{9,10,60},{9,10,335},{9,10,\n904},{10,10,73},{11,10,434},{12,10,585},{13,10,331},{18,10,110},{148,10,60},{132\n,10,502},{136,0,584},{6,10,347},{138,10,161},{7,0,987},{7,11,899},{9,0,688},{10,\n0,522},{11,0,788},{12,0,137},{12,0,566},{14,0,9},{14,0,24},{14,0,64},{142,11,325\n},{4,0,214},{5,0,500},{5,10,102},{6,10,284},{7,10,1079},{7,10,1423},{7,10,1702},\n{8,10,470},{9,10,554},{9,10,723},{139,10,333},{7,10,246},{135,10,840},{6,10,10},\n{8,10,571},{9,10,739},{143,10,91},{133,10,626},{146,0,195},{134,0,1775},{7,0,389\n},{7,0,700},{7,0,940},{8,0,514},{9,0,116},{9,0,535},{10,0,118},{11,0,107},{11,0,\n148},{11,0,922},{12,0,254},{12,0,421},{142,0,238},{5,10,18},{6,10,526},{13,10,24\n},{13,10,110},{19,10,5},{147,10,44},{132,0,743},{4,10,309},{5,10,462},{7,10,970}\n,{7,10,1097},{139,0,292},{22,10,30},{150,10,33},{139,11,338},{135,11,1598},{7,0,\n1283},{9,0,227},{11,0,325},{11,0,408},{14,0,180},{146,0,47},{4,0,953},{6,0,1805}\n,{6,0,1814},{6,0,1862},{140,0,774},{6,11,611},{135,11,1733},{135,11,1464},{5,0,\n81},{7,0,146},{7,0,1342},{8,0,53},{8,0,561},{8,0,694},{8,0,754},{9,0,115},{9,0,\n179},{9,0,894},{10,0,462},{10,0,813},{11,0,230},{11,0,657},{11,0,699},{11,0,748}\n,{12,0,119},{12,0,200},{12,0,283},{142,0,273},{5,0,408},{6,0,789},{6,0,877},{6,0\n,1253},{6,0,1413},{137,0,747},{134,10,1704},{135,11,663},{6,0,1910},{6,0,1915},{\n6,0,1923},{9,0,913},{9,0,928},{9,0,950},{9,0,954},{9,0,978},{9,0,993},{12,0,812}\n,{12,0,819},{12,0,831},{12,0,833},{12,0,838},{12,0,909},{12,0,928},{12,0,931},{\n12,0,950},{15,0,186},{15,0,187},{15,0,195},{15,0,196},{15,0,209},{15,0,215},{15,\n0,236},{15,0,241},{15,0,249},{15,0,253},{18,0,180},{18,0,221},{18,0,224},{18,0,\n227},{18,0,229},{149,0,60},{7,0,1826},{135,0,1938},{5,10,86},{7,10,743},{9,10,85\n},{10,10,281},{10,10,432},{11,0,490},{12,10,251},{13,10,118},{14,10,378},{146,0,\n143},{5,10,524},{133,10,744},{141,11,442},{10,10,107},{140,10,436},{135,11,503},\n{134,0,1162},{132,10,927},{7,0,30},{8,0,86},{8,0,315},{8,0,700},{9,0,576},{9,0,\n858},{10,0,414},{11,0,310},{11,0,888},{11,0,904},{12,0,361},{12,10,670},{13,0,\n248},{13,0,371},{14,0,142},{146,10,94},{134,0,721},{4,11,113},{5,11,163},{5,11,\n735},{7,10,1149},{7,11,1009},{9,10,156},{9,11,9},{9,11,771},{12,11,90},{13,11,\n138},{13,11,410},{143,11,128},{138,0,839},{133,10,778},{137,0,617},{133,10,502},\n{8,10,196},{10,10,283},{139,10,406},{6,0,428},{7,0,524},{8,0,169},{8,0,234},{9,0\n,480},{138,0,646},{133,10,855},{134,0,1648},{7,0,1205},{138,0,637},{4,11,935},{5\n,11,823},{135,0,1596},{5,11,269},{7,11,434},{7,11,891},{8,11,339},{9,11,702},{11\n,11,594},{11,11,718},{145,11,100},{7,11,878},{9,11,485},{141,11,264},{4,0,266},{\n6,11,1713},{8,0,4},{9,0,39},{10,0,166},{11,0,918},{12,0,635},{20,0,10},{22,0,27}\n,{22,0,43},{150,0,52},{7,10,1400},{9,10,446},{138,10,45},{135,11,900},{132,0,862\n},{134,0,1554},{135,11,1033},{19,0,16},{147,11,16},{135,11,1208},{7,0,157},{136,\n0,279},{6,0,604},{136,0,391},{13,10,455},{15,10,99},{15,10,129},{144,10,68},{135\n,10,172},{7,0,945},{11,0,713},{139,0,744},{4,0,973},{10,0,877},{10,0,937},{10,0,\n938},{140,0,711},{139,0,1022},{132,10,568},{142,11,143},{4,0,567},{4,10,732},{\n137,0,859},{7,0,1846},{136,0,628},{136,10,733},{133,0,762},{4,10,428},{135,10,\n1789},{7,10,2015},{10,0,784},{12,10,665},{141,0,191},{133,0,298},{7,0,633},{7,0,\n905},{7,0,909},{7,0,1538},{9,0,767},{140,0,636},{138,10,806},{132,0,795},{139,0,\n301},{135,0,1970},{5,11,625},{135,11,1617},{135,11,275},{7,11,37},{8,11,425},{8,\n11,693},{9,11,720},{10,11,380},{10,11,638},{11,11,273},{11,11,307},{11,11,473},{\n12,11,61},{143,11,43},{135,11,198},{134,0,1236},{7,0,369},{12,0,644},{12,0,645},\n{144,0,90},{19,0,15},{149,0,27},{6,0,71},{6,10,1623},{6,10,1681},{7,0,845},{8,0,\n160},{137,0,318},{134,0,1447},{134,0,1255},{138,0,735},{4,11,168},{136,0,76},{6,\n10,1748},{8,10,715},{9,10,802},{10,10,46},{10,10,819},{13,10,308},{14,10,351},{\n14,10,363},{146,10,67},{135,11,91},{4,10,63},{5,10,347},{134,0,474},{133,10,749}\n,{138,0,841},{133,10,366},{4,11,225},{134,0,836},{135,0,1622},{135,10,89},{140,0\n,735},{134,0,1601},{138,11,145},{6,0,1390},{137,0,804},{142,0,394},{6,11,15},{7,\n11,70},{10,11,240},{147,11,93},{6,0,96},{135,0,1426},{4,0,651},{133,0,289},{7,10\n,977},{7,11,956},{7,11,1157},{7,11,1506},{7,11,1606},{7,11,1615},{7,11,1619},{7,\n11,1736},{7,11,1775},{8,11,590},{9,11,324},{9,11,736},{9,11,774},{9,11,776},{9,\n11,784},{10,11,567},{10,11,708},{11,11,518},{11,11,613},{11,11,695},{11,11,716},\n{11,11,739},{11,11,770},{11,11,771},{11,11,848},{11,11,857},{11,11,931},{11,11,\n947},{12,11,326},{12,11,387},{12,11,484},{12,11,528},{12,11,552},{12,11,613},{13\n,11,189},{13,11,256},{13,11,340},{13,11,432},{13,11,436},{13,11,440},{13,11,454}\n,{14,11,174},{14,11,220},{14,11,284},{14,11,390},{145,11,121},{7,0,688},{8,0,35}\n,{9,0,511},{10,0,767},{147,0,118},{134,0,667},{4,0,513},{5,10,824},{133,10,941},\n{7,10,440},{8,10,230},{139,10,106},{134,0,2034},{135,11,1399},{143,11,66},{135,\n11,1529},{4,11,145},{6,11,176},{7,11,395},{9,11,562},{144,11,28},{132,11,501},{\n132,0,704},{134,0,1524},{6,11,464},{135,0,1078},{6,11,509},{10,11,82},{20,11,91}\n,{151,11,13},{4,0,720},{133,0,306},{133,0,431},{4,10,914},{5,10,800},{5,10,852},\n{135,0,1196},{135,11,1189},{10,0,54},{141,10,115},{7,10,564},{142,10,168},{4,10,\n918},{5,0,464},{5,10,876},{6,0,236},{7,0,696},{7,0,914},{7,0,1108},{7,0,1448},{9\n,0,15},{9,0,564},{10,0,14},{12,0,565},{13,0,449},{14,0,53},{15,0,13},{16,0,64},{\n145,0,41},{6,0,1418},{134,10,1764},{4,10,92},{133,10,274},{134,0,907},{4,11,114}\n,{8,10,501},{9,11,492},{13,11,462},{142,11,215},{4,11,77},{5,11,361},{6,11,139},\n{6,11,401},{6,11,404},{7,11,413},{7,11,715},{7,11,1716},{11,11,279},{12,11,179},\n{12,11,258},{13,11,244},{142,11,358},{6,0,1767},{12,0,194},{145,0,107},{134,11,\n1717},{5,10,743},{142,11,329},{4,10,49},{7,10,280},{135,10,1633},{5,0,840},{7,11\n,1061},{8,11,82},{11,11,250},{12,11,420},{141,11,184},{135,11,724},{134,0,900},{\n136,10,47},{134,0,1436},{144,11,0},{5,10,272},{5,10,908},{5,10,942},{6,0,675},{7\n,0,1008},{7,0,1560},{8,10,197},{9,0,642},{9,10,47},{11,0,236},{11,10,538},{11,10\n,742},{142,0,193},{4,0,68},{5,0,628},{5,0,634},{6,0,386},{7,0,794},{8,0,273},{9,\n0,563},{10,0,105},{10,0,171},{11,0,94},{139,0,354},{135,10,1911},{137,10,891},{4\n,0,95},{6,0,1297},{6,0,1604},{7,0,416},{139,0,830},{6,11,513},{135,11,1052},{7,0\n,731},{13,0,20},{143,0,11},{137,11,899},{10,0,850},{140,0,697},{4,0,662},{7,11,\n1417},{12,11,382},{17,11,48},{152,11,12},{133,0,736},{132,0,861},{4,10,407},{132\n,10,560},{141,10,490},{6,11,545},{7,11,565},{7,11,1669},{10,11,114},{11,11,642},\n{140,11,618},{6,0,871},{134,0,1000},{5,0,864},{5,11,5},{10,0,648},{11,0,671},{\n143,0,46},{133,0,928},{4,10,475},{11,0,90},{11,10,35},{13,0,7},{13,10,71},{13,10\n,177},{142,10,422},{136,0,332},{135,11,192},{134,0,1055},{136,11,763},{11,0,986}\n,{140,0,682},{7,0,76},{8,0,44},{9,0,884},{10,0,580},{11,0,399},{11,0,894},{143,0\n,122},{135,11,1237},{135,10,636},{6,10,222},{7,10,1620},{8,10,409},{9,10,693},{\n139,0,300},{4,11,87},{5,11,250},{10,11,601},{13,11,298},{13,11,353},{141,11,376}\n,{5,0,518},{10,0,340},{11,0,175},{149,0,16},{140,0,771},{6,0,1108},{137,0,831},{\n132,0,836},{135,0,1852},{4,0,957},{6,0,1804},{8,0,842},{8,0,843},{8,0,851},{8,0,\n855},{140,0,767},{135,11,814},{4,11,57},{7,11,1195},{7,11,1438},{7,11,1548},{7,\n11,1835},{7,11,1904},{9,11,757},{10,11,604},{139,11,519},{133,10,882},{138,0,246\n},{4,0,934},{5,0,202},{7,11,1897},{8,0,610},{12,11,290},{13,11,80},{13,11,437},{\n145,11,74},{8,0,96},{9,0,36},{10,0,607},{10,0,804},{10,0,832},{11,0,423},{11,0,\n442},{12,0,309},{14,0,199},{15,0,90},{145,0,110},{132,10,426},{6,10,58},{7,0,654\n},{7,10,745},{7,10,1969},{8,0,240},{8,10,675},{9,10,479},{9,10,731},{10,10,330},\n{10,10,593},{10,10,817},{11,10,32},{11,10,133},{11,10,221},{145,10,68},{9,0,13},\n{9,0,398},{9,0,727},{10,0,75},{10,0,184},{10,0,230},{10,0,564},{10,0,569},{11,0,\n973},{12,0,70},{12,0,189},{13,0,57},{141,0,257},{4,11,209},{135,11,902},{7,0,391\n},{137,10,538},{134,0,403},{6,11,303},{7,11,335},{7,11,1437},{7,11,1668},{8,11,\n553},{8,11,652},{8,11,656},{9,11,558},{11,11,743},{149,11,18},{132,11,559},{11,0\n,75},{142,0,267},{6,0,815},{141,11,2},{141,0,366},{137,0,631},{133,11,1017},{5,0\n,345},{135,0,1016},{133,11,709},{134,11,1745},{133,10,566},{6,10,48},{7,0,952},{\n9,10,139},{10,10,399},{11,10,469},{12,10,634},{141,10,223},{133,0,673},{7,11,8},\n{8,11,206},{137,0,850},{6,0,662},{149,0,35},{4,0,287},{133,0,1018},{6,10,114},{7\n,10,1224},{7,10,1556},{136,10,3},{8,10,576},{137,10,267},{4,0,884},{5,0,34},{10,\n0,724},{12,0,444},{13,0,354},{18,0,32},{23,0,24},{23,0,31},{152,0,5},{133,10,933\n},{132,11,776},{138,0,151},{136,0,427},{134,0,382},{132,0,329},{9,0,846},{10,0,\n827},{138,11,33},{7,11,1297},{9,0,279},{10,0,407},{14,0,84},{150,0,18},{136,11,\n406},{132,0,906},{136,0,366},{134,0,843},{134,0,1443},{135,0,1372},{138,0,992},{\n4,0,123},{5,0,605},{7,0,1509},{136,0,36},{132,0,649},{8,11,175},{10,11,168},{138\n,11,573},{133,0,767},{134,0,1018},{135,11,1305},{12,10,30},{13,10,148},{14,10,87\n},{14,10,182},{16,10,42},{148,10,70},{134,11,607},{4,0,273},{5,0,658},{133,0,995\n},{6,0,72},{139,11,174},{7,10,56},{7,10,1989},{8,10,337},{8,10,738},{9,10,600},{\n10,0,483},{12,0,368},{13,10,447},{142,10,92},{5,11,784},{138,10,666},{135,0,1345\n},{139,11,882},{134,0,1293},{133,0,589},{134,0,1988},{5,0,117},{6,0,514},{6,0,\n541},{7,0,1164},{7,0,1436},{8,0,220},{8,0,648},{10,0,688},{139,0,560},{136,0,379\n},{5,0,686},{7,10,866},{135,10,1163},{132,10,328},{9,11,14},{9,11,441},{10,11,\n306},{139,11,9},{4,10,101},{135,10,1171},{5,10,833},{136,10,744},{5,11,161},{7,\n11,839},{135,11,887},{7,0,196},{10,0,765},{11,0,347},{11,0,552},{11,0,790},{12,0\n,263},{13,0,246},{13,0,270},{13,0,395},{14,0,176},{14,0,190},{14,0,398},{14,0,\n412},{15,0,32},{15,0,63},{16,0,88},{147,0,105},{6,10,9},{6,10,397},{7,10,53},{7,\n10,1742},{10,10,632},{11,10,828},{140,10,146},{5,0,381},{135,0,1792},{134,0,1452\n},{135,11,429},{8,0,367},{10,0,760},{14,0,79},{20,0,17},{152,0,0},{7,0,616},{138\n,0,413},{11,10,417},{12,10,223},{140,10,265},{7,11,1611},{13,11,14},{15,11,44},{\n19,11,13},{148,11,76},{135,0,1229},{6,0,120},{7,0,1188},{7,0,1710},{8,0,286},{9,\n0,667},{11,0,592},{139,0,730},{135,11,1814},{135,0,1146},{4,10,186},{5,10,157},{\n8,10,168},{138,10,6},{4,0,352},{135,0,687},{4,0,192},{5,0,49},{6,0,200},{6,0,293\n},{6,0,1696},{135,0,1151},{133,10,875},{5,10,773},{5,10,991},{6,10,1635},{134,10\n,1788},{7,10,111},{136,10,581},{6,0,935},{134,0,1151},{134,0,1050},{132,0,650},{\n132,0,147},{11,0,194},{11,11,194},{12,0,62},{12,0,88},{12,11,62},{140,11,88},{6,\n0,339},{135,0,923},{134,10,1747},{7,11,643},{136,11,236},{133,0,934},{7,10,1364}\n,{7,10,1907},{141,10,158},{132,10,659},{4,10,404},{135,10,675},{7,11,581},{9,11,\n644},{137,11,699},{13,0,211},{14,0,133},{14,0,204},{15,0,64},{15,0,69},{15,0,114\n},{16,0,10},{19,0,23},{19,0,35},{19,0,39},{19,0,51},{19,0,71},{19,0,75},{152,0,\n15},{133,10,391},{5,11,54},{135,11,1513},{5,10,540},{6,10,1697},{7,0,222},{136,0\n,341},{134,10,78},{132,11,744},{136,0,293},{137,11,701},{7,11,930},{10,11,402},{\n10,11,476},{13,11,452},{18,11,55},{147,11,104},{132,0,637},{133,10,460},{8,11,50\n},{137,11,624},{132,11,572},{134,0,1159},{4,10,199},{139,10,34},{134,0,847},{134\n,10,388},{6,11,43},{7,11,38},{8,11,248},{9,11,504},{138,11,513},{4,10,511},{6,10\n,608},{9,0,683},{9,10,333},{10,10,602},{11,10,441},{11,10,723},{11,10,976},{140,\n10,357},{9,0,867},{138,0,837},{6,0,944},{135,11,326},{135,0,1809},{5,10,938},{7,\n11,783},{136,10,707},{133,11,766},{133,11,363},{6,0,170},{7,0,1080},{8,0,395},{8\n,0,487},{141,0,147},{6,11,258},{140,11,409},{4,0,535},{5,11,249},{8,0,618},{148,\n11,82},{6,0,1379},{149,11,15},{135,0,1625},{150,0,23},{5,11,393},{6,11,378},{7,\n11,1981},{9,11,32},{9,11,591},{10,11,685},{10,11,741},{142,11,382},{133,11,788},\n{7,11,1968},{10,11,19},{139,11,911},{7,11,1401},{135,11,1476},{4,11,61},{5,11,58\n},{5,11,171},{5,11,635},{5,11,683},{5,11,700},{6,11,291},{6,11,566},{7,11,1650},\n{11,11,523},{12,11,273},{12,11,303},{15,11,39},{143,11,111},{6,10,469},{7,10,\n1709},{138,10,515},{4,0,778},{134,11,589},{132,0,46},{5,0,811},{6,0,1679},{6,0,\n1714},{135,0,2032},{7,0,1458},{9,0,407},{11,0,15},{12,0,651},{149,0,37},{4,10,\n500},{135,0,938},{6,0,34},{7,0,69},{7,0,1089},{7,0,1281},{8,0,708},{8,0,721},{9,\n0,363},{148,0,98},{10,11,231},{147,11,124},{7,11,726},{152,11,9},{5,10,68},{134,\n10,383},{136,11,583},{4,11,917},{133,11,1005},{11,10,216},{139,10,340},{135,11,\n1675},{8,0,441},{10,0,314},{143,0,3},{132,11,919},{4,10,337},{6,10,353},{7,10,\n1934},{8,10,488},{137,10,429},{7,0,889},{7,10,1795},{8,10,259},{9,10,135},{9,10,\n177},{9,10,860},{10,10,825},{11,10,115},{11,10,370},{11,10,405},{11,10,604},{12,\n10,10},{12,10,667},{12,10,669},{13,10,76},{14,10,310},{15,10,76},{15,10,147},{\n148,10,23},{4,10,15},{4,11,255},{5,10,22},{5,11,302},{6,10,244},{6,11,132},{7,10\n,40},{7,10,200},{7,10,906},{7,10,1199},{7,11,128},{7,11,283},{7,11,1299},{9,10,\n616},{10,10,716},{10,11,52},{10,11,514},{11,10,635},{11,10,801},{11,11,925},{12,\n10,458},{13,11,92},{142,11,309},{132,0,462},{137,11,173},{135,10,1735},{5,10,598\n},{7,10,791},{8,0,525},{8,10,108},{137,10,123},{5,0,73},{6,0,23},{134,0,338},{\n132,0,676},{132,10,683},{7,0,725},{8,0,498},{139,0,268},{12,0,21},{151,0,7},{135\n,0,773},{4,10,155},{135,10,1689},{4,0,164},{5,0,730},{5,10,151},{5,10,741},{6,11\n,210},{7,10,498},{7,10,870},{7,10,1542},{12,10,213},{14,10,36},{14,10,391},{17,\n10,111},{18,10,6},{18,10,46},{18,10,151},{19,10,36},{20,10,32},{20,10,56},{20,10\n,69},{20,10,102},{21,10,4},{22,10,8},{22,10,10},{22,10,14},{150,10,31},{4,10,624\n},{135,10,1752},{4,0,583},{6,11,588},{9,0,936},{15,0,214},{18,0,199},{152,0,26},\n{4,11,284},{6,11,223},{7,0,1462},{139,0,659},{133,0,220},{139,0,803},{132,0,544}\n,{4,10,492},{133,10,451},{16,0,98},{148,0,119},{4,11,218},{7,11,526},{143,11,137\n},{135,10,835},{4,11,270},{5,11,192},{6,11,332},{7,11,1322},{13,10,70},{13,11,9}\n,{14,11,104},{142,11,311},{132,10,539},{140,11,661},{5,0,176},{6,0,437},{6,0,564\n},{11,0,181},{141,0,183},{135,0,1192},{6,10,113},{135,10,436},{136,10,718},{135,\n10,520},{135,0,1878},{140,11,196},{7,11,379},{8,11,481},{137,11,377},{5,11,1003}\n,{6,11,149},{137,11,746},{8,11,262},{9,11,627},{10,11,18},{11,11,214},{11,11,404\n},{11,11,457},{11,11,780},{11,11,849},{11,11,913},{13,11,330},{13,11,401},{142,\n11,200},{149,0,26},{136,11,304},{132,11,142},{135,0,944},{4,0,790},{5,0,273},{\n134,0,394},{134,0,855},{4,0,135},{6,0,127},{7,0,1185},{7,0,1511},{8,0,613},{11,0\n,5},{12,0,336},{12,0,495},{12,0,586},{12,0,660},{12,0,668},{14,0,385},{15,0,118}\n,{17,0,20},{146,0,98},{6,0,230},{9,0,752},{12,10,610},{13,10,431},{16,10,59},{\n146,0,109},{7,0,1954},{135,11,925},{4,11,471},{5,11,51},{6,11,602},{8,11,484},{\n10,11,195},{140,11,159},{132,10,307},{136,11,688},{132,11,697},{7,11,812},{7,11,\n1261},{7,11,1360},{9,11,632},{140,11,352},{5,0,162},{5,10,964},{136,0,68},{4,0,\n654},{136,11,212},{4,0,156},{7,0,998},{7,0,1045},{7,0,1860},{9,0,48},{9,0,692},{\n11,0,419},{139,0,602},{133,11,221},{4,11,373},{5,11,283},{6,11,480},{135,11,609}\n,{142,11,216},{132,0,240},{6,11,192},{9,11,793},{145,11,55},{4,10,75},{5,10,180}\n,{6,10,500},{7,10,58},{7,10,710},{138,10,645},{4,11,132},{5,10,649},{5,11,69},{\n135,11,1242},{6,10,276},{7,10,282},{7,10,879},{7,10,924},{8,10,459},{9,10,599},{\n9,10,754},{11,10,574},{12,10,128},{12,10,494},{13,10,52},{13,10,301},{15,10,30},\n{143,10,132},{132,10,200},{4,11,111},{135,11,302},{9,0,197},{10,0,300},{12,0,473\n},{13,0,90},{141,0,405},{132,11,767},{6,11,42},{7,11,1416},{7,11,1590},{7,11,\n2005},{8,11,131},{8,11,466},{9,11,672},{13,11,252},{148,11,103},{8,0,958},{8,0,\n999},{10,0,963},{138,0,1001},{135,10,1621},{135,0,858},{4,0,606},{137,11,444},{6\n,11,44},{136,11,368},{139,11,172},{4,11,570},{133,11,120},{139,11,624},{6,10,225\n},{7,0,1978},{8,0,676},{137,10,211},{7,0,972},{8,10,687},{139,0,102},{6,11,227},\n{135,11,1589},{8,10,58},{9,10,724},{11,10,809},{13,10,113},{145,10,72},{4,0,361}\n,{133,0,315},{132,0,461},{6,10,345},{135,10,1247},{132,0,472},{8,10,767},{8,10,\n803},{9,10,301},{137,10,903},{135,11,1333},{135,11,477},{7,10,1949},{136,10,674}\n,{6,0,905},{138,0,747},{133,0,155},{134,10,259},{7,0,163},{8,0,319},{9,0,402},{\n10,0,24},{10,0,681},{11,0,200},{12,0,253},{12,0,410},{142,0,219},{5,0,475},{6,11\n,1667},{7,0,1780},{7,11,2036},{9,0,230},{10,11,600},{11,0,297},{11,0,558},{14,0,\n322},{147,0,76},{136,10,254},{6,0,848},{135,0,1956},{6,11,511},{140,11,132},{5,\n11,568},{6,11,138},{135,11,1293},{6,0,631},{137,0,838},{149,0,36},{4,11,565},{8,\n11,23},{136,11,827},{5,0,944},{134,0,1769},{4,0,144},{4,11,922},{5,11,1023},{6,0\n,842},{134,0,1400},{133,10,248},{9,10,800},{10,10,693},{11,10,482},{11,10,734},{\n139,10,789},{7,11,1002},{139,11,145},{4,10,116},{5,10,95},{5,10,445},{7,10,1688}\n,{8,10,29},{9,10,272},{11,10,509},{139,10,915},{14,0,369},{146,0,72},{135,10,\n1641},{132,11,740},{133,10,543},{140,11,116},{5,10,181},{6,0,247},{8,10,41},{137\n,0,555},{133,10,657},{136,0,996},{138,10,709},{7,0,189},{8,10,202},{138,10,536},\n{136,11,402},{4,11,716},{141,11,31},{10,0,280},{138,0,797},{9,10,423},{140,10,89\n},{8,10,113},{9,10,877},{10,10,554},{11,10,83},{12,10,136},{147,10,109},{133,10,\n976},{4,10,206},{135,0,746},{136,0,526},{139,0,345},{136,0,1017},{8,11,152},{9,\n11,53},{9,11,268},{9,11,901},{10,11,518},{10,11,829},{11,11,188},{13,11,74},{14,\n11,46},{15,11,17},{15,11,33},{17,11,40},{18,11,36},{19,11,20},{22,11,1},{152,11,\n2},{133,11,736},{136,11,532},{5,0,428},{138,0,651},{135,11,681},{135,0,1162},{7,\n0,327},{8,10,226},{10,10,537},{11,10,570},{11,10,605},{11,10,799},{11,10,804},{\n12,10,85},{12,10,516},{12,10,623},{12,11,677},{13,0,230},{13,10,361},{14,10,77},\n{14,10,78},{17,0,113},{147,10,110},{4,0,792},{4,10,769},{7,0,1717},{138,0,546},{\n4,11,684},{136,11,384},{132,10,551},{134,0,1203},{9,10,57},{9,10,459},{10,10,425\n},{11,10,119},{12,10,184},{12,10,371},{13,10,358},{145,10,51},{5,0,672},{5,10,\n814},{8,10,10},{9,10,421},{9,10,729},{10,10,609},{139,10,689},{138,0,189},{134,\n10,624},{7,11,110},{7,11,188},{8,11,290},{8,11,591},{9,11,382},{9,11,649},{11,11\n,71},{11,11,155},{11,11,313},{12,11,5},{13,11,325},{142,11,287},{133,0,99},{6,0,\n1053},{135,0,298},{7,11,360},{7,11,425},{9,11,66},{9,11,278},{138,11,644},{4,0,\n397},{136,0,555},{137,10,269},{132,10,528},{4,11,900},{133,11,861},{5,11,254},{6\n,0,1157},{7,11,985},{136,11,73},{7,11,1959},{136,11,683},{12,0,398},{20,0,39},{\n21,0,11},{150,0,41},{4,0,485},{7,0,353},{135,0,1523},{6,0,366},{7,0,1384},{135,0\n,1601},{138,0,787},{137,0,282},{5,10,104},{6,10,173},{135,10,1631},{139,11,146},\n{4,0,157},{133,0,471},{134,0,941},{132,11,725},{7,0,1336},{8,10,138},{8,10,342},\n{9,10,84},{10,10,193},{11,10,883},{140,10,359},{134,11,196},{136,0,116},{133,11,\n831},{134,0,787},{134,10,95},{6,10,406},{10,10,409},{10,10,447},{11,10,44},{140,\n10,100},{5,0,160},{7,0,363},{7,0,589},{10,0,170},{141,0,55},{134,0,1815},{132,0,\n866},{4,11,321},{6,0,889},{6,0,1067},{6,0,1183},{134,11,569},{5,11,848},{134,11,\n66},{4,11,36},{6,10,1636},{7,11,1387},{10,11,205},{11,11,755},{141,11,271},{132,\n0,689},{4,10,282},{7,10,1034},{9,0,820},{11,10,398},{11,10,634},{12,10,1},{12,10\n,79},{12,10,544},{14,10,237},{17,10,10},{146,10,20},{4,0,108},{7,0,804},{139,0,\n498},{132,11,887},{6,0,1119},{135,11,620},{6,11,165},{138,11,388},{5,0,244},{5,\n10,499},{6,10,476},{7,10,600},{7,10,888},{135,10,1096},{140,0,609},{135,0,1005},\n{4,0,412},{133,0,581},{4,11,719},{135,11,155},{7,10,296},{7,10,596},{8,10,560},{\n8,10,586},{9,10,612},{11,10,304},{12,10,46},{13,10,89},{14,10,112},{145,10,122},\n{4,0,895},{133,0,772},{142,11,307},{135,0,1898},{4,0,926},{133,0,983},{4,11,353}\n,{6,11,146},{6,11,1789},{7,11,288},{7,11,990},{7,11,1348},{9,11,665},{9,11,898},\n{11,11,893},{142,11,212},{132,0,538},{133,11,532},{6,0,294},{7,0,1267},{8,0,624}\n,{141,0,496},{4,11,45},{7,0,1325},{135,11,1257},{138,0,301},{7,10,1599},{7,10,\n1723},{8,10,79},{8,10,106},{8,10,190},{8,10,302},{8,10,383},{8,10,713},{9,0,298}\n,{9,10,119},{9,10,233},{9,10,419},{9,10,471},{10,10,181},{10,10,406},{11,10,57},\n{11,10,85},{11,10,120},{11,10,177},{11,10,296},{11,10,382},{11,10,454},{11,10,\n758},{11,10,999},{12,0,291},{12,10,27},{12,10,131},{12,10,245},{12,10,312},{12,\n10,446},{12,10,454},{13,0,276},{13,10,98},{13,10,426},{13,10,508},{14,0,6},{14,\n10,163},{14,10,272},{14,10,277},{14,10,370},{15,10,95},{15,10,138},{15,10,167},{\n17,0,18},{17,10,38},{20,10,96},{149,0,32},{132,0,757},{134,0,1263},{4,0,820},{\n134,10,1759},{133,0,722},{136,11,816},{138,10,372},{145,10,16},{134,0,1039},{4,0\n,991},{134,0,2028},{133,10,258},{7,0,1875},{139,0,124},{6,11,559},{6,11,1691},{\n135,11,586},{5,0,324},{7,0,881},{8,10,134},{9,10,788},{140,10,438},{7,11,1823},{\n139,11,693},{6,0,1348},{134,0,1545},{134,0,911},{132,0,954},{7,10,1948},{7,10,\n2004},{8,0,329},{136,0,414},{5,0,517},{6,10,439},{7,10,780},{135,10,1040},{132,0\n,816},{5,10,1},{6,10,81},{138,10,520},{5,10,482},{8,10,98},{9,0,713},{10,0,222},\n{10,10,700},{10,10,822},{11,10,302},{11,10,778},{12,10,50},{12,10,127},{12,10,\n396},{13,10,62},{13,10,328},{14,10,122},{147,10,72},{137,0,33},{5,10,2},{7,10,\n1494},{136,10,589},{6,10,512},{7,10,797},{8,10,253},{9,10,77},{10,10,1},{10,10,\n129},{10,10,225},{10,11,108},{11,10,118},{11,10,226},{11,10,251},{11,10,430},{11\n,10,701},{11,10,974},{11,10,982},{11,11,116},{12,10,64},{12,10,260},{12,10,488},\n{140,10,690},{134,11,456},{133,11,925},{5,0,150},{7,0,106},{7,0,774},{8,0,603},{\n9,0,593},{9,0,634},{10,0,44},{10,0,173},{11,0,462},{11,0,515},{13,0,216},{13,0,\n288},{142,0,400},{137,10,347},{5,0,748},{134,0,553},{12,0,108},{141,0,291},{4,10\n,12},{7,0,420},{7,10,522},{7,10,809},{8,10,797},{141,10,88},{6,11,193},{7,11,240\n},{7,11,1682},{10,11,51},{10,11,640},{11,11,410},{13,11,82},{14,11,247},{14,11,\n331},{142,11,377},{133,10,528},{135,0,1777},{4,0,493},{144,0,55},{136,11,633},{\n139,0,81},{6,0,980},{136,0,321},{148,10,109},{5,10,266},{9,10,290},{9,10,364},{\n10,10,293},{11,10,606},{142,10,45},{6,0,568},{7,0,112},{7,0,1804},{8,0,362},{8,0\n,410},{8,0,830},{9,0,514},{11,0,649},{142,0,157},{4,0,74},{6,0,510},{6,10,594},{\n9,10,121},{10,10,49},{10,10,412},{139,10,834},{134,0,838},{136,10,748},{132,10,\n466},{132,0,625},{135,11,1443},{4,11,237},{135,11,514},{9,10,378},{141,10,162},{\n6,0,16},{6,0,158},{7,0,43},{7,0,129},{7,0,181},{8,0,276},{8,0,377},{10,0,523},{\n11,0,816},{12,0,455},{13,0,303},{142,0,135},{135,0,281},{4,0,1},{7,0,1143},{7,0,\n1463},{8,0,61},{9,0,207},{9,0,390},{9,0,467},{139,0,836},{6,11,392},{7,11,65},{\n135,11,2019},{132,10,667},{4,0,723},{5,0,895},{7,0,1031},{8,0,199},{8,0,340},{9,\n0,153},{9,0,215},{10,0,21},{10,0,59},{10,0,80},{10,0,224},{10,0,838},{11,0,229},\n{11,0,652},{12,0,192},{13,0,146},{142,0,91},{132,0,295},{137,0,51},{9,11,222},{\n10,11,43},{139,11,900},{5,0,309},{140,0,211},{5,0,125},{8,0,77},{138,0,15},{136,\n11,604},{138,0,789},{4,10,39},{5,0,173},{7,10,1843},{8,10,407},{11,10,144},{140,\n10,523},{138,11,265},{133,0,439},{132,10,510},{7,0,648},{7,0,874},{7,10,1980},{\n10,10,487},{10,10,809},{11,0,164},{12,0,76},{146,0,9},{12,0,111},{13,10,260},{14\n,0,294},{18,10,63},{147,0,45},{133,11,549},{134,10,570},{4,0,8},{7,0,1152},{7,0,\n1153},{7,0,1715},{9,0,374},{10,0,478},{139,0,648},{135,0,1099},{5,0,575},{6,0,\n354},{135,0,701},{7,11,36},{8,11,201},{136,11,605},{4,10,787},{136,11,156},{6,0,\n518},{149,11,13},{140,11,224},{134,0,702},{132,10,516},{5,11,724},{10,11,305},{\n11,11,151},{12,11,33},{12,11,121},{12,11,381},{17,11,3},{17,11,27},{17,11,78},{\n18,11,18},{19,11,54},{149,11,5},{4,11,523},{5,11,638},{8,0,87},{11,10,887},{14,\n10,365},{142,10,375},{138,0,438},{136,10,821},{135,11,1908},{6,11,242},{7,11,227\n},{7,11,1581},{8,11,104},{9,11,113},{9,11,220},{9,11,427},{10,11,74},{10,11,239}\n,{11,11,579},{11,11,1023},{13,11,4},{13,11,204},{13,11,316},{18,11,95},{148,11,\n86},{4,0,69},{5,0,122},{5,0,849},{6,0,1633},{9,0,656},{138,0,464},{4,10,10},{7,0\n,1802},{139,10,786},{135,11,861},{139,0,499},{7,0,476},{7,0,1592},{138,0,87},{\n133,10,684},{4,0,840},{134,10,27},{142,0,283},{6,0,1620},{7,11,1328},{136,11,494\n},{5,0,859},{7,0,1160},{8,0,107},{9,0,291},{9,0,439},{10,0,663},{11,0,609},{140,\n0,197},{7,11,1306},{8,11,505},{9,11,482},{10,11,126},{11,11,225},{12,11,347},{12\n,11,449},{13,11,19},{142,11,218},{5,11,268},{10,11,764},{12,11,120},{13,11,39},{\n145,11,127},{145,10,56},{7,11,1672},{10,11,472},{11,11,189},{143,11,51},{6,10,\n342},{6,10,496},{8,10,275},{137,10,206},{133,0,600},{4,0,117},{6,0,372},{7,0,\n1905},{142,0,323},{4,10,909},{5,10,940},{135,11,1471},{132,10,891},{4,0,722},{\n139,0,471},{4,11,384},{135,11,1022},{132,10,687},{9,0,5},{12,0,216},{12,0,294},{\n12,0,298},{12,0,400},{12,0,518},{13,0,229},{143,0,139},{135,11,1703},{7,11,1602}\n,{10,11,698},{12,11,212},{141,11,307},{6,10,41},{141,10,160},{135,11,1077},{9,11\n,159},{11,11,28},{140,11,603},{4,0,514},{7,0,1304},{138,0,477},{134,0,1774},{9,0\n,88},{139,0,270},{5,0,12},{6,10,1718},{7,0,375},{137,0,438},{132,11,515},{136,10\n,778},{8,11,632},{8,11,697},{137,11,854},{6,0,362},{6,0,997},{146,0,51},{7,0,816\n},{7,0,1241},{9,0,283},{9,0,520},{10,0,213},{10,0,307},{10,0,463},{10,0,671},{10\n,0,746},{11,0,401},{11,0,794},{12,0,517},{18,0,107},{147,0,115},{133,10,115},{\n150,11,28},{4,11,136},{133,11,551},{142,10,314},{132,0,258},{6,0,22},{7,0,903},{\n7,0,1963},{8,0,639},{138,0,577},{5,0,681},{5,10,193},{8,0,782},{12,10,178},{13,0\n,130},{145,0,84},{9,11,17},{138,11,291},{7,11,1287},{9,11,44},{10,11,552},{10,11\n,642},{11,11,839},{12,11,274},{12,11,275},{12,11,372},{13,11,91},{142,11,125},{\n135,10,174},{4,0,664},{5,0,804},{139,0,1013},{134,0,942},{6,0,1349},{6,0,1353},{\n6,0,1450},{7,11,1518},{139,11,694},{4,10,122},{5,10,796},{5,10,952},{6,10,1660},\n{6,10,1671},{8,10,567},{9,10,687},{9,10,742},{10,10,686},{11,0,356},{11,10,682},\n{140,10,281},{5,0,32},{6,11,147},{7,11,886},{9,11,753},{138,11,268},{5,10,179},{\n7,10,1095},{135,10,1213},{4,10,66},{7,10,722},{135,10,904},{135,10,352},{9,11,\n245},{138,11,137},{4,0,289},{5,11,414},{7,0,629},{7,0,1698},{7,0,1711},{140,0,\n215},{6,0,1975},{135,11,1762},{6,0,450},{136,0,109},{141,10,35},{134,11,599},{\n136,0,705},{133,0,664},{134,11,1749},{11,11,402},{12,11,109},{12,11,431},{13,11,\n179},{13,11,206},{14,11,175},{14,11,217},{16,11,3},{148,11,53},{135,0,1238},{134\n,11,1627},{132,11,488},{10,10,592},{10,10,753},{12,10,317},{12,10,355},{12,10,\n465},{12,10,469},{12,10,560},{12,10,578},{141,0,318},{133,10,564},{132,11,83},{\n140,11,676},{6,0,1872},{6,0,1906},{6,0,1907},{9,0,934},{9,0,956},{9,0,960},{9,0,\n996},{12,0,794},{12,0,876},{12,0,880},{12,0,918},{15,0,230},{18,0,234},{18,0,238\n},{21,0,38},{149,0,62},{134,10,556},{134,11,278},{137,0,103},{7,10,544},{8,10,\n719},{138,10,61},{4,10,5},{5,10,498},{8,10,637},{137,10,521},{7,0,777},{12,0,229\n},{12,0,239},{12,11,229},{12,11,239},{15,0,12},{143,11,12},{6,0,26},{7,11,388},{\n7,11,644},{139,11,781},{7,11,229},{8,11,59},{9,11,190},{9,11,257},{10,11,378},{\n140,11,191},{133,10,927},{135,10,1441},{4,10,893},{5,10,780},{133,10,893},{4,0,\n414},{5,0,467},{9,0,654},{10,0,451},{12,0,59},{141,0,375},{142,0,173},{135,0,17}\n,{5,10,238},{135,0,1350},{135,0,955},{4,0,960},{10,0,887},{12,0,753},{18,0,161},\n{18,0,162},{152,0,19},{136,11,344},{6,10,1729},{137,11,288},{132,11,660},{4,0,\n217},{4,10,60},{5,0,710},{7,0,760},{7,0,1926},{7,10,1800},{8,10,314},{9,0,428},{\n9,0,708},{9,10,700},{10,0,254},{10,0,296},{10,0,720},{11,0,109},{11,0,255},{11,\n10,487},{12,0,165},{12,0,315},{13,0,107},{13,0,203},{14,0,54},{14,0,99},{14,0,\n114},{14,0,388},{16,0,85},{17,0,9},{17,0,33},{20,0,25},{20,0,28},{20,0,29},{21,0\n,9},{21,0,10},{21,0,34},{150,0,17},{7,11,1035},{138,11,737},{7,11,690},{9,11,217\n},{9,11,587},{140,11,521},{6,0,919},{7,11,706},{7,11,1058},{138,11,538},{7,10,\n1853},{138,10,437},{136,10,419},{6,0,280},{10,0,502},{11,0,344},{140,0,38},{5,0,\n45},{7,0,1161},{11,0,448},{11,0,880},{13,0,139},{13,0,407},{15,0,16},{17,0,95},{\n18,0,66},{18,0,88},{18,0,123},{149,0,7},{11,11,92},{11,11,196},{11,11,409},{11,\n11,450},{11,11,666},{11,11,777},{12,11,262},{13,11,385},{13,11,393},{15,11,115},\n{16,11,45},{145,11,82},{136,0,777},{134,11,1744},{4,0,410},{5,10,828},{135,0,521\n},{134,0,673},{7,0,1110},{7,0,1778},{7,10,176},{135,10,178},{5,10,806},{7,10,\n1976},{7,11,268},{136,11,569},{4,11,733},{9,11,194},{10,11,92},{11,11,198},{12,\n11,84},{12,11,87},{13,11,128},{144,11,74},{4,10,51},{5,0,341},{6,10,4},{7,0,1129\n},{7,10,591},{7,10,849},{7,10,951},{7,10,1613},{7,10,1760},{7,10,1988},{9,10,434\n},{10,10,754},{11,0,414},{11,10,25},{139,10,37},{133,10,902},{135,10,928},{135,0\n,787},{132,0,436},{134,10,270},{7,0,1587},{135,0,1707},{6,0,377},{7,0,1025},{9,0\n,613},{145,0,104},{7,11,982},{7,11,1361},{10,11,32},{143,11,56},{139,0,96},{132,\n0,451},{132,10,416},{142,10,372},{5,10,152},{5,10,197},{7,10,340},{7,10,867},{7,\n11,306},{10,10,548},{10,10,581},{11,10,6},{12,10,3},{12,10,19},{14,10,110},{142,\n10,289},{134,0,680},{134,11,609},{7,0,483},{7,10,190},{8,10,28},{8,10,141},{8,10\n,444},{8,10,811},{9,10,468},{11,10,334},{12,10,24},{12,10,386},{140,10,576},{5,\n10,757},{138,0,916},{5,10,721},{135,10,1553},{133,11,178},{134,0,937},{132,10,\n898},{133,0,739},{147,0,82},{135,0,663},{146,0,128},{5,10,277},{141,10,247},{134\n,0,1087},{132,10,435},{6,11,381},{7,11,645},{7,11,694},{136,11,546},{7,0,503},{\n135,0,1885},{6,0,1965},{8,0,925},{138,0,955},{4,0,113},{5,0,163},{5,0,735},{7,0,\n1009},{9,0,9},{9,0,771},{12,0,90},{13,0,138},{13,0,410},{143,0,128},{4,0,324},{\n138,0,104},{5,10,265},{6,10,212},{135,0,460},{133,11,105},{7,11,261},{7,11,1107}\n,{7,11,1115},{7,11,1354},{7,11,1588},{7,11,1705},{7,11,1902},{9,11,465},{10,11,\n248},{10,11,349},{10,11,647},{11,11,527},{11,11,660},{11,11,669},{12,11,529},{\n141,11,305},{5,11,438},{9,11,694},{12,11,627},{141,11,210},{152,11,11},{4,0,935}\n,{133,0,823},{132,10,702},{5,0,269},{5,10,808},{7,0,434},{7,0,891},{7,10,2045},{\n8,0,339},{9,0,702},{11,0,594},{11,0,718},{145,0,100},{7,0,1014},{9,0,485},{141,0\n,264},{134,0,1713},{7,0,1810},{11,0,866},{12,0,103},{12,11,233},{141,0,495},{4,0\n,423},{10,0,949},{138,0,1013},{135,0,900},{8,11,25},{138,11,826},{5,10,166},{8,\n10,739},{140,10,511},{134,0,2018},{7,11,1270},{139,11,612},{4,10,119},{5,10,170}\n,{5,10,447},{7,10,1708},{7,10,1889},{9,10,357},{9,10,719},{12,10,486},{140,10,\n596},{12,0,574},{140,11,574},{132,11,308},{6,0,964},{6,0,1206},{134,0,1302},{4,\n10,450},{135,10,1158},{135,11,150},{136,11,649},{14,0,213},{148,0,38},{9,11,45},\n{9,11,311},{141,11,42},{134,11,521},{7,10,1375},{7,10,1466},{138,10,331},{132,10\n,754},{5,11,339},{7,11,1442},{14,11,3},{15,11,41},{147,11,66},{136,11,378},{134,\n0,1022},{5,10,850},{136,10,799},{142,0,143},{135,0,2029},{134,11,1628},{8,0,523}\n,{150,0,34},{5,0,625},{135,0,1617},{7,0,275},{7,10,238},{7,10,2033},{8,10,120},{\n8,10,188},{8,10,659},{9,10,598},{10,10,466},{12,10,342},{12,10,588},{13,10,503},\n{14,10,246},{143,10,92},{7,0,37},{8,0,425},{8,0,693},{9,0,720},{10,0,380},{10,0,\n638},{11,0,273},{11,0,473},{12,0,61},{143,0,43},{135,11,829},{135,0,1943},{132,0\n,765},{5,11,486},{135,11,1349},{7,11,1635},{8,11,17},{10,11,217},{138,11,295},{4\n,10,201},{7,10,1744},{8,10,602},{11,10,247},{11,10,826},{145,10,65},{138,11,558}\n,{11,0,551},{142,0,159},{8,10,164},{146,10,62},{139,11,176},{132,0,168},{136,0,\n1010},{134,0,1994},{135,0,91},{138,0,532},{135,10,1243},{135,0,1884},{132,10,907\n},{5,10,100},{10,10,329},{12,10,416},{149,10,29},{134,11,447},{132,10,176},{5,10\n,636},{5,10,998},{7,10,9},{7,10,1508},{8,10,26},{9,10,317},{9,10,358},{10,10,210\n},{10,10,292},{10,10,533},{11,10,555},{12,10,526},{12,10,607},{13,10,263},{13,10\n,459},{142,10,271},{4,11,609},{135,11,756},{6,0,15},{7,0,70},{10,0,240},{147,0,\n93},{4,11,930},{133,11,947},{134,0,1227},{134,0,1534},{133,11,939},{133,11,962},\n{5,11,651},{8,11,170},{9,11,61},{9,11,63},{10,11,23},{10,11,37},{10,11,834},{11,\n11,4},{11,11,187},{11,11,281},{11,11,503},{11,11,677},{12,11,96},{12,11,130},{12\n,11,244},{14,11,5},{14,11,40},{14,11,162},{14,11,202},{146,11,133},{4,11,406},{5\n,11,579},{12,11,492},{150,11,15},{139,0,392},{6,10,610},{10,10,127},{141,10,27},\n{7,0,655},{7,0,1844},{136,10,119},{4,0,145},{6,0,176},{7,0,395},{137,0,562},{132\n,0,501},{140,11,145},{136,0,1019},{134,0,509},{139,0,267},{6,11,17},{7,11,16},{7\n,11,1001},{7,11,1982},{9,11,886},{10,11,489},{10,11,800},{11,11,782},{12,11,320}\n,{13,11,467},{14,11,145},{14,11,387},{143,11,119},{145,11,17},{5,11,458},{134,0,\n1099},{7,11,1983},{8,11,0},{8,11,171},{9,11,120},{9,11,732},{10,11,473},{11,11,\n656},{11,11,998},{18,11,0},{18,11,2},{147,11,21},{12,11,427},{146,11,38},{10,0,\n948},{138,0,968},{7,10,126},{136,10,84},{136,10,790},{4,0,114},{9,0,492},{13,0,\n462},{142,0,215},{6,10,64},{12,10,377},{141,10,309},{4,0,77},{5,0,361},{6,0,139}\n,{6,0,401},{6,0,404},{7,0,413},{7,0,715},{7,0,1716},{11,0,279},{12,0,179},{12,0,\n258},{13,0,244},{142,0,358},{134,0,1717},{7,0,772},{7,0,1061},{7,0,1647},{7,10,\n1104},{8,0,82},{11,0,250},{11,0,607},{11,10,269},{11,10,539},{11,10,627},{11,10,\n706},{11,10,975},{12,0,311},{12,0,420},{12,10,248},{12,10,434},{12,10,600},{12,\n10,622},{13,0,184},{13,0,367},{13,10,297},{13,10,485},{14,10,69},{14,10,409},{\n143,10,108},{135,0,724},{4,11,512},{4,11,519},{133,11,342},{134,0,1133},{145,11,\n29},{11,10,977},{141,10,507},{6,0,841},{6,0,1042},{6,0,1194},{10,0,993},{140,0,\n1021},{6,11,31},{7,11,491},{7,11,530},{8,11,592},{9,10,34},{11,10,484},{11,11,53\n},{11,11,779},{12,11,167},{12,11,411},{14,11,14},{14,11,136},{15,11,72},{16,11,\n17},{144,11,72},{4,0,1021},{5,11,907},{134,0,2037},{6,10,1700},{7,0,373},{7,10,\n293},{7,10,382},{7,10,1026},{7,10,1087},{7,10,2027},{8,0,335},{8,0,596},{8,10,\n252},{8,10,727},{8,10,729},{9,0,488},{9,10,30},{9,10,199},{9,10,231},{9,10,251},\n{9,10,334},{9,10,361},{9,10,712},{10,10,55},{10,10,60},{10,10,232},{10,10,332},{\n10,10,384},{10,10,396},{10,10,504},{10,10,542},{10,10,652},{11,10,20},{11,10,48}\n,{11,10,207},{11,10,291},{11,10,298},{11,10,342},{11,10,365},{11,10,394},{11,10,\n620},{11,10,705},{11,10,1017},{12,10,123},{12,10,340},{12,10,406},{12,10,643},{\n13,10,61},{13,10,269},{13,10,311},{13,10,319},{13,10,486},{14,10,234},{15,10,62}\n,{15,10,85},{16,10,71},{18,10,119},{148,10,105},{150,0,37},{4,11,208},{5,11,106}\n,{6,11,531},{8,11,408},{9,11,188},{138,11,572},{132,0,564},{6,0,513},{135,0,1052\n},{132,0,825},{9,0,899},{140,11,441},{134,0,778},{133,11,379},{7,0,1417},{12,0,\n382},{17,0,48},{152,0,12},{132,11,241},{6,10,379},{7,0,1116},{7,10,270},{8,10,\n176},{8,10,183},{9,10,432},{9,10,661},{12,10,247},{12,10,617},{146,10,125},{5,10\n,792},{133,10,900},{6,0,545},{7,0,565},{7,0,1669},{10,0,114},{11,0,642},{140,0,\n618},{133,0,5},{138,11,7},{132,11,259},{135,0,192},{134,0,701},{136,0,763},{135,\n10,1979},{4,10,901},{133,10,776},{10,0,755},{147,0,29},{133,0,759},{4,11,173},{5\n,11,312},{5,11,512},{135,11,1285},{7,11,1603},{7,11,1691},{9,11,464},{11,11,195}\n,{12,11,279},{12,11,448},{14,11,11},{147,11,102},{7,0,370},{7,0,1007},{7,0,1177}\n,{135,0,1565},{135,0,1237},{4,0,87},{5,0,250},{141,0,298},{4,11,452},{5,11,583},\n{5,11,817},{6,11,433},{7,11,593},{7,11,720},{7,11,1378},{8,11,161},{9,11,284},{\n10,11,313},{139,11,886},{4,11,547},{135,11,1409},{136,11,722},{4,10,37},{5,10,\n334},{135,10,1253},{132,10,508},{12,0,107},{146,0,31},{8,11,420},{139,11,193},{\n135,0,814},{135,11,409},{140,0,991},{4,0,57},{7,0,1195},{7,0,1438},{7,0,1548},{7\n,0,1835},{7,0,1904},{9,0,757},{10,0,604},{139,0,519},{132,0,540},{138,11,308},{\n132,10,533},{136,0,608},{144,11,65},{4,0,1014},{134,0,2029},{4,0,209},{5,11,1002\n},{7,0,902},{136,11,745},{134,0,2030},{6,0,303},{7,0,335},{7,0,1437},{7,0,1668},\n{8,0,553},{8,0,652},{8,0,656},{9,0,558},{11,0,743},{149,0,18},{5,11,575},{6,11,\n354},{135,11,701},{4,11,239},{6,11,477},{7,11,1607},{11,11,68},{139,11,617},{132\n,0,559},{8,0,527},{18,0,60},{147,0,24},{133,10,920},{138,0,511},{133,0,1017},{\n133,0,675},{138,10,391},{7,10,1952},{139,0,156},{138,11,369},{132,11,367},{133,0\n,709},{6,0,698},{134,0,887},{142,10,126},{134,0,1745},{132,10,483},{13,11,299},{\n142,11,75},{133,0,714},{7,0,8},{136,0,206},{138,10,480},{4,11,694},{9,10,495},{\n146,10,104},{7,11,1248},{11,11,621},{139,11,702},{140,11,687},{132,0,776},{139,\n10,1009},{135,0,1272},{134,0,1059},{8,10,653},{13,10,93},{147,10,14},{135,11,213\n},{136,0,406},{133,10,172},{132,0,947},{8,0,175},{10,0,168},{138,0,573},{132,0,\n870},{6,0,1567},{151,11,28},{134,11,472},{5,10,260},{136,11,132},{4,11,751},{11,\n11,390},{140,11,32},{4,11,409},{133,11,78},{6,11,473},{12,0,554},{145,11,105},{\n133,0,784},{8,0,908},{136,11,306},{139,0,882},{6,0,358},{7,0,1393},{7,11,1759},{\n8,0,396},{8,11,396},{10,0,263},{10,11,263},{14,0,154},{14,11,154},{16,0,48},{16,\n11,48},{17,0,8},{145,11,8},{13,11,163},{13,11,180},{18,11,78},{148,11,35},{14,0,\n32},{18,0,85},{20,0,2},{152,0,16},{7,0,228},{8,10,167},{8,10,375},{9,10,82},{9,\n10,561},{10,0,770},{138,10,620},{132,0,845},{9,0,14},{9,0,441},{10,0,306},{139,0\n,9},{8,10,194},{8,10,756},{11,0,966},{12,0,287},{13,0,342},{13,0,402},{15,0,110}\n,{143,0,163},{134,0,1578},{4,0,967},{6,0,1820},{6,0,1847},{140,0,716},{136,0,594\n},{7,0,1428},{7,0,1640},{7,0,1867},{7,11,883},{9,0,169},{9,0,182},{9,0,367},{9,0\n,478},{9,0,506},{9,0,551},{9,0,557},{9,0,648},{9,0,697},{9,0,705},{9,0,725},{9,0\n,787},{9,0,794},{10,0,198},{10,0,214},{10,0,267},{10,0,275},{10,0,456},{10,0,551\n},{10,0,561},{10,0,613},{10,0,627},{10,0,668},{10,0,675},{10,0,691},{10,0,695},{\n10,0,707},{10,0,715},{11,0,183},{11,0,201},{11,0,244},{11,0,262},{11,0,352},{11,\n0,439},{11,0,493},{11,0,572},{11,0,591},{11,0,608},{11,0,611},{11,0,646},{11,0,\n674},{11,0,711},{11,0,751},{11,0,761},{11,0,776},{11,0,785},{11,0,850},{11,0,853\n},{11,0,862},{11,0,865},{11,0,868},{11,0,875},{11,0,898},{11,0,902},{11,0,903},{\n11,0,910},{11,0,932},{11,0,942},{11,0,957},{11,0,967},{11,0,972},{12,0,148},{12,\n0,195},{12,0,220},{12,0,237},{12,0,318},{12,0,339},{12,0,393},{12,0,445},{12,0,\n450},{12,0,474},{12,0,505},{12,0,509},{12,0,533},{12,0,591},{12,0,594},{12,0,597\n},{12,0,621},{12,0,633},{12,0,642},{13,0,59},{13,0,60},{13,0,145},{13,0,239},{13\n,0,250},{13,0,329},{13,0,344},{13,0,365},{13,0,372},{13,0,387},{13,0,403},{13,0,\n414},{13,0,456},{13,0,470},{13,0,478},{13,0,483},{13,0,489},{14,0,55},{14,0,57},\n{14,0,81},{14,0,90},{14,0,148},{14,0,239},{14,0,266},{14,0,321},{14,0,326},{14,0\n,327},{14,0,330},{14,0,347},{14,0,355},{14,0,401},{14,0,404},{14,0,411},{14,0,\n414},{14,0,416},{14,0,420},{15,0,61},{15,0,74},{15,0,87},{15,0,88},{15,0,94},{15\n,0,96},{15,0,116},{15,0,149},{15,0,154},{16,0,50},{16,0,63},{16,0,73},{17,0,2},{\n17,0,66},{17,0,92},{17,0,103},{17,0,112},{17,0,120},{18,0,50},{18,0,54},{18,0,82\n},{18,0,86},{18,0,90},{18,0,111},{18,0,115},{18,0,156},{19,0,40},{19,0,79},{20,0\n,78},{149,0,22},{5,0,161},{135,0,839},{4,0,782},{13,11,293},{142,11,56},{133,11,\n617},{139,11,50},{135,10,22},{145,0,64},{5,10,639},{7,10,1249},{139,10,896},{138\n,0,998},{135,11,2042},{4,11,546},{142,11,233},{6,0,1043},{134,0,1574},{134,0,\n1496},{4,10,102},{7,10,815},{7,10,1699},{139,10,964},{12,0,781},{142,0,461},{4,\n11,313},{133,11,577},{6,0,639},{6,0,1114},{137,0,817},{8,11,184},{141,11,433},{7\n,0,1814},{135,11,935},{10,0,997},{140,0,958},{4,0,812},{137,11,625},{132,10,899}\n,{136,10,795},{5,11,886},{6,11,46},{6,11,1790},{7,11,14},{7,11,732},{7,11,1654},\n{8,11,95},{8,11,327},{8,11,616},{10,11,598},{10,11,769},{11,11,134},{11,11,747},\n{12,11,378},{142,11,97},{136,0,139},{6,10,52},{9,10,104},{9,10,559},{12,10,308},\n{147,10,87},{133,11,1021},{132,10,604},{132,10,301},{136,10,779},{7,0,643},{136,\n0,236},{132,11,153},{134,0,1172},{147,10,32},{133,11,798},{4,11,587},{134,0,1338\n},{6,11,598},{7,11,42},{8,11,695},{10,11,212},{11,11,158},{14,11,196},{145,11,85\n},{135,10,508},{5,11,957},{5,11,1008},{135,11,249},{4,11,129},{135,11,465},{5,0,\n54},{7,11,470},{7,11,1057},{7,11,1201},{9,11,755},{11,11,906},{140,11,527},{7,11\n,908},{146,11,7},{5,11,148},{136,11,450},{144,11,1},{4,0,256},{135,0,1488},{6,10\n,310},{7,10,1849},{8,10,72},{8,10,272},{8,10,431},{9,0,351},{9,10,12},{10,10,563\n},{10,10,630},{10,10,796},{10,10,810},{11,10,367},{11,10,599},{11,10,686},{140,\n10,672},{6,0,1885},{6,0,1898},{6,0,1899},{140,0,955},{4,0,714},{133,0,469},{6,0,\n1270},{134,0,1456},{132,0,744},{6,0,313},{7,10,537},{8,10,64},{9,10,127},{10,10,\n496},{12,10,510},{141,10,384},{4,10,244},{4,11,217},{5,11,710},{7,10,233},{7,11,\n1926},{9,11,428},{9,11,708},{10,11,254},{10,11,296},{10,11,720},{11,11,109},{11,\n11,255},{12,11,165},{12,11,315},{13,11,107},{13,11,203},{14,11,54},{14,11,99},{\n14,11,114},{14,11,388},{16,11,85},{17,11,9},{17,11,33},{20,11,25},{20,11,28},{20\n,11,29},{21,11,9},{21,11,10},{21,11,34},{150,11,17},{138,0,402},{7,0,969},{146,0\n,55},{8,0,50},{137,0,624},{134,0,1355},{132,0,572},{134,10,1650},{10,10,702},{\n139,10,245},{10,0,847},{142,0,445},{6,0,43},{7,0,38},{8,0,248},{138,0,513},{133,\n0,369},{137,10,338},{133,0,766},{133,0,363},{133,10,896},{8,11,392},{11,11,54},{\n13,11,173},{13,11,294},{148,11,7},{134,0,678},{7,11,1230},{136,11,531},{6,0,258}\n,{140,0,409},{5,0,249},{148,0,82},{7,10,1117},{136,10,539},{5,0,393},{6,0,378},{\n7,0,1981},{9,0,32},{9,0,591},{10,0,685},{10,0,741},{142,0,382},{133,0,788},{134,\n0,1281},{134,0,1295},{7,0,1968},{141,0,509},{4,0,61},{5,0,58},{5,0,171},{5,0,683\n},{6,0,291},{6,0,566},{7,0,1650},{11,0,523},{12,0,273},{12,0,303},{15,0,39},{143\n,0,111},{6,0,706},{134,0,1283},{134,0,589},{135,11,1433},{133,11,435},{5,10,4},{\n5,10,810},{6,10,13},{6,10,538},{6,10,1690},{6,10,1726},{7,0,1059},{7,10,1819},{8\n,10,148},{8,10,696},{8,10,791},{12,10,125},{13,0,54},{143,10,9},{135,10,1268},{5\n,11,85},{6,11,419},{7,11,134},{7,11,305},{7,11,361},{7,11,1337},{8,11,71},{140,\n11,519},{137,0,824},{140,11,688},{5,11,691},{7,10,1385},{7,11,345},{9,11,94},{11\n,10,582},{11,10,650},{11,10,901},{11,10,949},{12,10,232},{12,10,236},{12,11,169}\n,{13,10,413},{13,10,501},{146,10,116},{4,0,917},{133,0,1005},{5,11,183},{6,11,\n582},{7,0,1598},{9,11,344},{10,11,679},{140,11,435},{4,10,925},{5,10,803},{8,10,\n698},{138,10,828},{132,0,919},{135,11,511},{139,10,992},{4,0,255},{5,0,302},{6,0\n,132},{7,0,128},{7,0,283},{7,0,1299},{10,0,52},{10,0,514},{11,0,925},{13,0,92},{\n142,0,309},{134,0,1369},{135,10,1847},{134,0,328},{7,11,1993},{136,11,684},{133,\n10,383},{137,0,173},{134,11,583},{134,0,1411},{5,11,704},{8,11,357},{10,11,745},\n{14,11,426},{17,11,94},{19,0,65},{147,11,57},{9,10,660},{138,10,347},{4,11,179},\n{5,11,198},{133,11,697},{7,11,347},{7,11,971},{8,11,181},{138,11,711},{141,0,442\n},{7,10,572},{9,10,592},{11,0,842},{11,0,924},{11,10,680},{12,10,356},{12,10,550\n},{13,0,317},{13,0,370},{13,0,469},{13,0,471},{14,0,397},{18,0,69},{146,0,145},{\n14,11,19},{14,11,28},{144,11,29},{136,0,534},{4,11,243},{5,11,203},{7,11,19},{7,\n11,71},{7,11,113},{10,11,405},{11,11,357},{142,11,240},{6,0,210},{10,0,845},{138\n,0,862},{7,11,1351},{9,11,581},{10,11,639},{11,11,453},{140,11,584},{7,11,1450},\n{139,11,99},{10,0,892},{12,0,719},{144,0,105},{4,0,284},{6,0,223},{134,11,492},{\n5,11,134},{6,11,408},{6,11,495},{135,11,1593},{136,0,529},{137,0,807},{4,0,218},\n{7,0,526},{143,0,137},{6,0,1444},{142,11,4},{132,11,665},{4,0,270},{4,11,248},{5\n,0,192},{6,0,332},{7,0,1322},{7,11,137},{137,11,349},{140,0,661},{7,0,1517},{7,\n10,748},{11,0,597},{11,10,700},{14,0,76},{14,0,335},{148,0,33},{5,11,371},{135,\n11,563},{146,11,57},{133,10,127},{133,0,418},{4,11,374},{7,11,547},{7,11,1700},{\n7,11,1833},{139,11,858},{6,10,198},{140,10,83},{7,11,1812},{13,11,259},{13,11,\n356},{14,11,242},{147,11,114},{5,10,276},{6,10,55},{7,0,379},{7,10,1369},{8,0,\n481},{137,0,377},{138,11,286},{5,0,1003},{6,0,149},{6,10,1752},{136,10,726},{6,\n11,1647},{7,11,1552},{7,11,2010},{8,0,262},{9,0,627},{9,11,494},{9,11,509},{10,0\n,18},{11,0,214},{11,0,404},{11,0,457},{11,0,780},{11,0,913},{13,0,401},{142,0,\n200},{135,0,742},{136,0,304},{132,0,142},{133,10,764},{6,10,309},{7,10,331},{138\n,10,550},{135,10,1062},{6,11,123},{7,10,986},{7,11,214},{9,11,728},{10,11,157},{\n11,11,346},{11,11,662},{143,11,106},{135,10,1573},{7,0,925},{137,0,799},{4,0,471\n},{5,0,51},{6,0,602},{8,0,484},{138,0,195},{136,0,688},{132,0,697},{6,0,1169},{6\n,0,1241},{6,10,194},{7,10,133},{10,10,493},{10,10,570},{139,10,664},{140,0,751},\n{5,10,24},{5,10,569},{6,10,3},{6,10,119},{6,10,143},{6,10,440},{7,0,929},{7,10,\n599},{7,10,1686},{7,10,1854},{8,10,424},{9,10,43},{9,10,584},{9,10,760},{10,0,\n452},{10,10,328},{11,0,878},{11,10,159},{11,10,253},{12,10,487},{12,10,531},{144\n,0,33},{4,11,707},{13,11,106},{18,11,49},{147,11,41},{5,0,221},{5,11,588},{134,\n11,393},{134,0,1437},{6,11,211},{7,11,1690},{11,11,486},{140,11,369},{5,10,14},{\n5,10,892},{6,10,283},{7,10,234},{136,10,537},{4,0,988},{136,0,955},{135,0,1251},\n{4,10,126},{8,10,635},{147,10,34},{4,10,316},{135,10,1561},{137,10,861},{4,10,64\n},{5,10,352},{5,10,720},{6,10,368},{139,10,359},{134,0,192},{4,0,132},{5,0,69},{\n135,0,1242},{7,10,1577},{10,10,304},{10,10,549},{12,10,365},{13,10,220},{13,10,\n240},{142,10,33},{4,0,111},{6,11,219},{135,0,865},{5,11,582},{6,11,1646},{7,11,\n99},{7,11,1962},{7,11,1986},{8,11,515},{8,11,773},{9,11,23},{9,11,491},{12,11,\n620},{14,11,52},{145,11,50},{132,0,767},{7,11,568},{148,11,21},{5,11,851},{6,0,\n42},{7,0,1416},{7,0,2005},{8,0,131},{8,0,466},{9,0,672},{13,0,252},{148,0,103},{\n135,0,1050},{6,10,175},{137,10,289},{5,10,432},{133,10,913},{6,0,44},{136,0,368}\n,{135,11,784},{132,0,570},{133,0,120},{139,10,595},{140,0,29},{6,0,227},{135,0,\n1589},{4,11,98},{7,11,1365},{9,11,422},{9,11,670},{10,11,775},{11,11,210},{13,11\n,26},{13,11,457},{141,11,476},{140,10,80},{5,10,931},{134,10,1698},{133,0,522},{\n134,0,1120},{135,0,1529},{12,0,739},{14,0,448},{142,0,467},{11,10,526},{11,10,\n939},{141,10,290},{5,10,774},{6,10,1637},{6,10,1686},{134,10,1751},{6,0,1667},{\n135,0,2036},{7,10,1167},{11,10,934},{13,10,391},{145,10,76},{137,11,147},{6,10,\n260},{7,10,1484},{11,11,821},{12,11,110},{12,11,153},{18,11,41},{150,11,19},{6,0\n,511},{6,10,573},{140,0,132},{5,0,568},{6,0,138},{135,0,1293},{132,0,1020},{8,0,\n258},{9,0,208},{137,0,359},{4,0,565},{8,0,23},{136,0,827},{134,0,344},{4,0,922},\n{5,0,1023},{13,11,477},{14,11,120},{148,11,61},{134,0,240},{5,11,209},{6,11,30},\n{11,11,56},{139,11,305},{4,10,292},{4,10,736},{5,10,871},{6,0,171},{6,10,1689},{\n7,0,1002},{7,0,1324},{7,10,1944},{9,0,415},{9,10,580},{14,0,230},{146,0,68},{9,\n11,635},{139,11,559},{4,11,150},{5,11,303},{134,11,327},{6,10,63},{135,10,920},{\n133,10,793},{8,11,192},{10,11,78},{10,11,555},{11,11,308},{13,11,359},{147,11,95\n},{135,11,786},{135,11,1712},{136,0,402},{6,0,754},{6,11,1638},{7,11,79},{7,11,\n496},{9,11,138},{10,11,336},{11,11,12},{12,11,412},{12,11,440},{142,11,305},{4,0\n,716},{141,0,31},{133,0,982},{5,10,67},{6,10,62},{6,10,374},{7,10,1391},{8,0,691\n},{136,0,731},{9,10,790},{140,10,47},{139,11,556},{151,11,1},{7,11,204},{7,11,\n415},{8,11,42},{10,11,85},{11,11,33},{11,11,564},{12,11,571},{149,11,1},{7,11,\n610},{7,11,1501},{136,0,888},{4,10,391},{135,10,1169},{5,0,847},{9,0,840},{138,0\n,803},{137,0,823},{134,0,785},{8,0,152},{9,0,53},{9,0,268},{9,0,901},{10,0,518},\n{10,0,829},{11,0,188},{13,0,74},{14,0,46},{15,0,17},{15,0,33},{17,0,40},{18,0,36\n},{19,0,20},{22,0,1},{152,0,2},{4,11,3},{5,11,247},{5,11,644},{7,11,744},{7,11,\n1207},{7,11,1225},{7,11,1909},{146,11,147},{136,0,532},{135,0,681},{132,10,271},\n{140,0,314},{140,0,677},{4,0,684},{136,0,384},{5,11,285},{9,11,67},{13,11,473},{\n143,11,82},{4,10,253},{5,10,544},{7,10,300},{137,10,340},{7,0,110},{7,0,447},{8,\n0,290},{8,0,591},{9,0,382},{9,0,649},{11,0,71},{11,0,155},{11,0,313},{12,0,5},{\n13,0,325},{142,0,287},{134,0,1818},{136,0,1007},{138,0,321},{7,0,360},{7,0,425},\n{9,0,66},{9,0,278},{138,0,644},{133,10,818},{5,0,385},{5,10,541},{6,10,94},{6,10\n,499},{7,10,230},{139,10,321},{4,10,920},{5,10,25},{5,10,790},{6,10,457},{7,10,\n853},{136,10,788},{4,0,900},{133,0,861},{5,0,254},{7,0,985},{136,0,73},{7,0,1959\n},{136,0,683},{134,10,1765},{133,10,822},{132,10,634},{4,11,29},{6,11,532},{7,11\n,1628},{7,11,1648},{9,11,303},{9,11,350},{10,11,433},{11,11,97},{11,11,557},{11,\n11,745},{12,11,289},{12,11,335},{12,11,348},{12,11,606},{13,11,116},{13,11,233},\n{13,11,466},{14,11,181},{14,11,209},{14,11,232},{14,11,236},{14,11,300},{16,11,\n41},{148,11,97},{6,10,36},{7,10,658},{8,10,454},{147,0,86},{135,11,1692},{132,0,\n725},{5,11,501},{7,11,1704},{9,11,553},{11,11,520},{12,11,557},{141,11,249},{134\n,0,196},{133,0,831},{136,0,723},{7,0,1897},{13,0,80},{13,0,437},{145,0,74},{4,0,\n992},{6,0,627},{136,0,994},{135,11,1294},{132,10,104},{5,0,848},{6,0,66},{136,0,\n764},{4,0,36},{7,0,1387},{10,0,205},{139,0,755},{6,0,1046},{134,0,1485},{134,0,\n950},{132,0,887},{14,0,450},{148,0,111},{7,0,620},{7,0,831},{9,10,542},{9,10,566\n},{138,10,728},{6,0,165},{138,0,388},{139,10,263},{4,0,719},{135,0,155},{138,10,\n468},{6,11,453},{144,11,36},{134,11,129},{5,0,533},{7,0,755},{138,0,780},{134,0,\n1465},{4,0,353},{6,0,146},{6,0,1789},{7,0,427},{7,0,990},{7,0,1348},{9,0,665},{9\n,0,898},{11,0,893},{142,0,212},{7,10,87},{142,10,288},{4,0,45},{135,0,1257},{7,\n10,988},{7,10,1939},{9,10,64},{9,10,502},{12,0,7},{12,10,34},{13,10,12},{13,10,\n234},{147,10,77},{4,0,607},{5,11,60},{6,11,504},{7,11,614},{7,11,1155},{140,11,0\n},{135,10,141},{8,11,198},{11,11,29},{140,11,534},{140,0,65},{136,0,816},{132,10\n,619},{139,0,88},{5,10,246},{8,10,189},{9,10,355},{9,10,512},{10,10,124},{10,10,\n453},{11,10,143},{11,10,416},{11,10,859},{141,10,341},{4,11,379},{135,11,1397},{\n4,0,600},{137,0,621},{133,0,367},{134,0,561},{6,0,559},{134,0,1691},{6,0,585},{\n134,11,585},{135,11,1228},{4,11,118},{5,10,678},{6,11,274},{6,11,361},{7,11,75},\n{141,11,441},{135,11,1818},{137,11,841},{5,0,573},{6,0,287},{7,10,862},{7,10,\n1886},{138,10,179},{132,10,517},{140,11,693},{5,11,314},{6,11,221},{7,11,419},{\n10,11,650},{11,11,396},{12,11,156},{13,11,369},{14,11,333},{145,11,47},{140,10,\n540},{136,10,667},{11,10,403},{146,10,83},{5,10,761},{134,0,672},{9,0,157},{10,\n10,131},{140,10,72},{6,11,460},{135,0,714},{134,0,456},{133,0,925},{5,11,682},{\n135,11,1887},{136,11,510},{136,11,475},{133,11,1016},{7,11,602},{8,11,179},{9,0,\n19},{10,11,781},{140,11,126},{6,11,329},{138,11,111},{6,0,822},{134,0,1473},{144\n,11,86},{11,0,113},{139,11,113},{5,11,821},{134,11,1687},{133,10,449},{7,0,463},\n{8,10,103},{145,0,69},{7,10,2028},{138,10,641},{6,0,193},{7,0,240},{7,0,1682},{\n10,0,51},{10,0,640},{11,0,410},{13,0,82},{14,0,247},{14,0,331},{142,0,377},{6,0,\n471},{11,0,411},{142,0,2},{5,11,71},{7,11,1407},{9,11,388},{9,11,704},{10,11,261\n},{10,11,619},{11,11,547},{11,11,619},{143,11,157},{136,0,633},{135,0,1148},{6,0\n,554},{7,0,1392},{7,10,1274},{7,10,1386},{7,11,2008},{9,11,337},{10,11,517},{12,\n0,129},{146,10,87},{6,10,187},{7,0,803},{7,10,1203},{8,0,542},{8,10,380},{14,10,\n117},{149,10,28},{6,10,297},{7,10,793},{139,10,938},{7,10,464},{8,0,438},{11,0,\n363},{11,10,105},{12,10,231},{14,10,386},{15,10,102},{148,10,75},{5,11,16},{6,11\n,86},{6,11,603},{7,11,292},{7,11,561},{8,11,257},{8,11,382},{9,11,721},{9,11,778\n},{11,11,581},{140,11,466},{4,11,486},{5,11,491},{134,0,717},{132,0,875},{132,11\n,72},{6,11,265},{135,11,847},{4,0,237},{135,0,514},{6,0,392},{7,0,65},{135,0,\n2019},{140,11,261},{135,11,922},{137,11,404},{7,10,1010},{11,10,733},{11,10,759}\n,{12,0,563},{13,10,34},{14,0,101},{18,0,129},{146,10,45},{7,10,1656},{9,10,369},\n{10,10,338},{10,10,490},{11,10,154},{11,10,545},{11,10,775},{13,10,77},{141,10,\n274},{4,0,444},{10,0,146},{140,0,9},{139,11,163},{7,0,1260},{135,0,1790},{9,0,\n222},{10,0,43},{139,0,900},{137,11,234},{138,0,971},{137,0,761},{134,0,699},{136\n,11,434},{5,10,20},{6,0,1116},{6,10,298},{6,11,197},{7,0,1366},{7,10,659},{8,11,\n205},{137,10,219},{132,11,490},{11,11,820},{150,11,51},{7,10,1440},{11,10,854},{\n11,10,872},{11,10,921},{12,10,551},{13,10,472},{142,10,367},{140,11,13},{132,0,\n829},{4,10,439},{140,0,242},{136,10,669},{6,0,593},{6,11,452},{7,11,312},{138,11\n,219},{4,11,333},{9,11,176},{12,11,353},{141,11,187},{7,0,36},{8,0,201},{136,0,\n605},{140,0,224},{132,10,233},{134,0,1430},{134,0,1806},{4,0,523},{133,0,638},{6\n,0,1889},{9,0,958},{9,0,971},{9,0,976},{12,0,796},{12,0,799},{12,0,808},{12,0,\n835},{12,0,836},{12,0,914},{12,0,946},{15,0,216},{15,0,232},{18,0,183},{18,0,187\n},{18,0,194},{18,0,212},{18,0,232},{149,0,49},{132,10,482},{6,0,827},{134,0,1434\n},{135,10,346},{134,0,2043},{6,0,242},{7,0,227},{7,0,1581},{8,0,104},{9,0,113},{\n9,0,220},{9,0,427},{10,0,136},{10,0,239},{11,0,579},{11,0,1023},{13,0,4},{13,0,\n204},{13,0,316},{148,0,86},{134,11,1685},{7,0,148},{8,0,284},{141,0,63},{142,0,\n10},{135,11,584},{134,0,1249},{7,0,861},{135,10,334},{5,10,795},{6,10,1741},{137\n,11,70},{132,0,807},{7,11,135},{8,11,7},{8,11,62},{9,11,243},{10,11,658},{10,11,\n697},{11,11,456},{139,11,756},{9,11,395},{138,11,79},{137,11,108},{147,0,94},{\n136,0,494},{135,11,631},{135,10,622},{7,0,1510},{135,10,1750},{4,10,203},{135,10\n,1936},{7,11,406},{7,11,459},{8,11,606},{139,11,726},{7,0,1306},{8,0,505},{9,0,\n482},{10,0,126},{11,0,225},{12,0,347},{12,0,449},{13,0,19},{14,0,218},{142,0,435\n},{5,0,268},{10,0,764},{12,0,120},{13,0,39},{145,0,127},{142,11,68},{11,10,678},\n{140,10,307},{12,11,268},{12,11,640},{142,11,119},{135,10,2044},{133,11,612},{4,\n11,372},{7,11,482},{8,11,158},{9,11,602},{9,11,615},{10,11,245},{10,11,678},{10,\n11,744},{11,11,248},{139,11,806},{7,10,311},{9,10,308},{140,10,255},{4,0,384},{\n135,0,1022},{5,11,854},{135,11,1991},{135,10,1266},{4,10,400},{5,10,267},{135,10\n,232},{135,0,1703},{9,0,159},{11,0,661},{140,0,603},{4,0,964},{9,11,106},{9,11,\n163},{9,11,296},{10,11,167},{10,11,172},{10,11,777},{11,11,16},{14,0,438},{14,0,\n444},{14,0,456},{22,0,60},{150,0,63},{136,0,583},{132,0,515},{8,0,632},{8,0,697}\n,{137,0,854},{5,11,195},{135,11,1685},{6,0,1123},{134,0,1365},{134,11,328},{7,11\n,1997},{8,11,730},{139,11,1006},{4,0,136},{133,0,551},{134,0,1782},{7,0,1287},{9\n,0,44},{10,0,552},{10,0,642},{11,0,839},{12,0,274},{12,0,275},{12,0,372},{13,0,\n91},{142,0,125},{5,11,751},{11,11,797},{140,11,203},{133,0,732},{4,10,100},{7,0,\n679},{7,11,821},{136,0,313},{10,0,361},{142,0,316},{134,0,595},{6,0,147},{7,0,\n886},{9,0,753},{138,0,268},{5,10,362},{5,10,443},{6,10,318},{7,10,1019},{139,10,\n623},{5,10,463},{136,10,296},{4,10,454},{5,11,950},{5,11,994},{134,11,351},{138,\n0,137},{5,10,48},{5,10,404},{6,10,557},{7,10,458},{8,10,597},{10,10,455},{10,10,\n606},{11,10,49},{11,10,548},{12,10,476},{13,10,18},{141,10,450},{133,0,414},{135\n,0,1762},{5,11,421},{135,11,47},{5,10,442},{135,10,1984},{134,0,599},{134,0,1749\n},{134,0,1627},{4,0,488},{132,11,350},{137,11,751},{132,0,83},{140,0,676},{133,\n11,967},{5,10,55},{7,0,1639},{140,10,161},{4,11,473},{7,11,623},{8,11,808},{9,11\n,871},{9,11,893},{11,11,38},{11,11,431},{12,11,112},{12,11,217},{12,11,243},{12,\n11,562},{12,11,683},{13,11,141},{13,11,197},{13,11,227},{13,11,406},{13,11,487},\n{14,11,156},{14,11,203},{14,11,224},{14,11,256},{18,11,58},{150,11,0},{133,10,\n450},{7,11,736},{139,11,264},{134,0,278},{4,11,222},{7,11,286},{136,11,629},{135\n,10,869},{140,0,97},{144,0,14},{134,0,1085},{4,10,213},{7,10,223},{136,10,80},{7\n,0,388},{7,0,644},{139,0,781},{132,0,849},{7,0,229},{8,0,59},{9,0,190},{10,0,378\n},{140,0,191},{7,10,381},{7,10,806},{7,10,820},{8,10,354},{8,10,437},{8,10,787},\n{9,10,657},{10,10,58},{10,10,339},{10,10,749},{11,10,914},{12,10,162},{13,10,75}\n,{14,10,106},{14,10,198},{14,10,320},{14,10,413},{146,10,43},{141,11,306},{136,\n10,747},{134,0,1115},{8,11,146},{16,0,94},{144,0,108},{6,0,700},{6,0,817},{134,0\n,1002},{133,10,692},{4,11,465},{135,11,1663},{134,10,191},{6,0,1414},{135,11,913\n},{132,0,660},{7,0,1035},{138,0,737},{6,10,162},{7,10,1960},{136,10,831},{132,10\n,706},{7,0,690},{9,0,217},{9,0,587},{140,0,521},{138,10,426},{135,10,1235},{6,11\n,82},{7,11,138},{7,11,517},{9,11,673},{139,11,238},{138,0,272},{5,11,495},{7,11,\n834},{9,11,733},{139,11,378},{134,0,1744},{132,0,1011},{7,11,828},{142,11,116},{\n4,0,733},{5,11,559},{9,0,194},{10,0,92},{11,0,198},{12,0,84},{141,0,128},{6,11,\n21},{6,11,1737},{7,11,1444},{8,11,224},{10,0,57},{138,0,277},{4,10,204},{137,10,\n902},{136,10,833},{7,10,366},{9,10,287},{11,0,348},{12,0,99},{12,10,199},{12,10,\n556},{12,10,577},{18,0,1},{18,0,11},{147,0,4},{6,0,1981},{136,0,936},{21,0,33},{\n150,0,40},{5,11,519},{138,11,204},{5,10,356},{135,10,224},{134,0,775},{135,0,306\n},{7,10,630},{9,10,567},{11,10,150},{11,10,444},{141,10,119},{5,0,979},{134,10,\n539},{133,0,611},{4,11,402},{135,11,1679},{5,0,178},{7,11,2},{8,11,323},{136,11,\n479},{5,11,59},{135,11,672},{4,0,1010},{6,0,1969},{138,11,237},{133,11,412},{146\n,11,34},{7,11,1740},{146,11,48},{134,0,664},{139,10,814},{4,11,85},{135,11,549},\n{133,11,94},{133,11,457},{132,0,390},{134,0,1510},{4,10,235},{135,10,255},{4,10,\n194},{5,10,584},{6,10,384},{6,11,11},{7,10,583},{7,11,187},{10,10,761},{11,10,\n760},{139,10,851},{4,11,522},{139,11,802},{135,0,493},{10,11,776},{13,11,345},{\n142,11,425},{146,0,37},{4,11,52},{135,11,661},{134,0,724},{134,0,829},{133,11,\n520},{133,10,562},{4,11,281},{5,11,38},{7,11,194},{7,11,668},{7,11,1893},{137,11\n,397},{5,10,191},{137,10,271},{7,0,1537},{14,0,96},{143,0,73},{4,10,470},{5,0,\n473},{6,10,153},{7,10,1503},{7,10,1923},{10,10,701},{11,0,168},{11,10,132},{11,\n10,227},{11,10,320},{11,10,436},{11,10,525},{11,10,855},{12,10,41},{12,10,286},{\n13,10,103},{13,10,284},{14,10,255},{14,10,262},{15,10,117},{143,10,127},{133,0,\n105},{5,0,438},{9,0,694},{12,0,627},{141,0,210},{133,10,327},{6,10,552},{7,10,\n1754},{137,10,604},{134,0,1256},{152,0,11},{5,11,448},{11,11,98},{139,11,524},{5\n,10,80},{6,10,405},{7,0,1626},{7,10,403},{7,10,1502},{8,10,456},{9,10,487},{9,10\n,853},{9,10,889},{10,10,309},{11,10,721},{11,10,994},{12,10,430},{13,10,165},{14\n,11,16},{146,11,44},{132,0,779},{8,0,25},{138,0,826},{4,10,453},{5,10,887},{6,10\n,535},{8,10,6},{8,10,543},{136,10,826},{137,11,461},{140,11,632},{132,0,308},{\n135,0,741},{132,0,671},{7,0,150},{8,0,649},{136,0,1020},{6,11,336},{8,11,552},{9\n,0,99},{9,11,285},{10,11,99},{139,11,568},{134,0,521},{5,0,339},{14,0,3},{15,0,\n41},{15,0,166},{147,0,66},{6,11,423},{7,11,665},{7,11,1210},{9,11,218},{141,11,\n222},{5,10,101},{5,11,256},{6,0,543},{6,10,88},{7,10,1677},{9,10,100},{10,10,677\n},{14,10,169},{14,10,302},{14,10,313},{15,10,48},{143,10,84},{4,10,310},{7,10,\n708},{7,10,996},{9,10,795},{10,10,390},{10,10,733},{11,10,451},{12,10,249},{14,\n10,115},{14,10,286},{143,10,100},{133,10,587},{13,11,417},{14,11,129},{143,11,15\n},{134,0,1358},{136,11,554},{132,10,498},{7,10,217},{8,10,140},{138,10,610},{135\n,11,989},{135,11,634},{6,0,155},{140,0,234},{135,11,462},{132,11,618},{134,0,\n1628},{132,0,766},{4,11,339},{5,10,905},{135,11,259},{135,0,829},{4,11,759},{141\n,11,169},{4,10,456},{7,0,1445},{7,10,358},{7,10,1637},{8,10,643},{139,10,483},{5\n,0,486},{135,0,1349},{5,11,688},{135,11,712},{7,0,1635},{8,0,17},{10,0,217},{10,\n0,295},{12,0,2},{140,11,2},{138,0,558},{150,10,56},{4,11,278},{5,11,465},{135,11\n,1367},{136,11,482},{133,10,535},{6,0,1362},{6,0,1461},{10,11,274},{10,11,625},{\n139,11,530},{5,0,599},{5,11,336},{6,11,341},{6,11,478},{6,11,1763},{136,11,386},\n{7,10,1748},{137,11,151},{134,0,1376},{133,10,539},{135,11,73},{135,11,1971},{\n139,11,283},{9,0,93},{139,0,474},{6,10,91},{135,10,435},{5,11,396},{6,0,447},{\n134,11,501},{4,10,16},{5,10,316},{5,10,842},{6,10,370},{6,10,1778},{8,10,166},{\n11,10,812},{12,10,206},{12,10,351},{14,10,418},{16,10,15},{16,10,34},{18,10,3},{\n19,10,3},{19,10,7},{20,10,4},{149,10,21},{7,0,577},{7,0,1432},{9,0,475},{9,0,505\n},{9,0,526},{9,0,609},{9,0,689},{9,0,726},{9,0,735},{9,0,738},{10,0,556},{10,0,\n674},{10,0,684},{11,0,89},{11,0,202},{11,0,272},{11,0,380},{11,0,415},{11,0,505}\n,{11,0,537},{11,0,550},{11,0,562},{11,0,640},{11,0,667},{11,0,688},{11,0,847},{\n11,0,927},{11,0,930},{11,0,940},{12,0,144},{12,0,325},{12,0,329},{12,0,389},{12,\n0,403},{12,0,451},{12,0,515},{12,0,604},{12,0,616},{12,0,626},{13,0,66},{13,0,\n131},{13,0,167},{13,0,236},{13,0,368},{13,0,411},{13,0,434},{13,0,453},{13,0,461\n},{13,0,474},{14,0,59},{14,0,60},{14,0,139},{14,0,152},{14,0,276},{14,0,353},{14\n,0,402},{15,0,28},{15,0,81},{15,0,123},{15,0,152},{18,0,136},{148,0,88},{4,11,\n929},{133,11,799},{136,11,46},{142,0,307},{4,0,609},{7,0,756},{9,0,544},{11,0,\n413},{144,0,25},{7,10,619},{10,0,687},{10,10,547},{11,10,122},{140,10,601},{4,0,\n930},{133,0,947},{133,0,939},{142,0,21},{4,11,892},{133,11,770},{133,0,962},{5,0\n,651},{8,0,170},{9,0,61},{9,0,63},{10,0,23},{10,0,37},{10,0,834},{11,0,4},{11,0,\n187},{11,0,281},{11,0,503},{11,0,677},{12,0,96},{12,0,130},{12,0,244},{14,0,5},{\n14,0,40},{14,0,162},{14,0,202},{146,0,133},{4,0,406},{5,0,579},{12,0,492},{150,0\n,15},{135,11,158},{135,0,597},{132,0,981},{132,10,888},{4,10,149},{138,10,368},{\n132,0,545},{4,10,154},{7,10,1134},{136,10,105},{135,11,2001},{134,0,1558},{4,10,\n31},{6,10,429},{7,10,962},{9,10,458},{139,10,691},{132,10,312},{135,10,1642},{6,\n0,17},{6,0,1304},{7,0,16},{7,0,1001},{9,0,886},{10,0,489},{10,0,800},{11,0,782},\n{12,0,320},{13,0,467},{14,0,145},{14,0,387},{143,0,119},{135,0,1982},{7,11,1461}\n,{12,11,91},{145,0,17},{4,10,236},{132,11,602},{138,0,907},{136,0,110},{5,10,836\n},{5,10,857},{6,10,1680},{7,0,272},{147,0,53},{5,0,458},{7,11,1218},{136,11,303}\n,{7,0,1983},{8,0,0},{8,0,171},{9,0,120},{9,0,732},{10,0,473},{10,10,68},{11,0,\n656},{11,0,998},{11,10,494},{18,0,0},{18,0,2},{147,0,21},{137,11,662},{4,11,13},\n{5,11,567},{7,11,1498},{9,11,124},{11,11,521},{140,11,405},{4,10,81},{139,10,867\n},{135,11,1006},{7,11,800},{7,11,1783},{138,11,12},{5,10,282},{8,10,650},{9,0,\n295},{9,10,907},{138,0,443},{132,11,735},{4,10,775},{4,11,170},{135,11,323},{6,0\n,1844},{10,0,924},{11,11,844},{12,11,104},{140,11,625},{5,11,304},{7,11,1403},{\n140,11,498},{134,0,1232},{4,0,519},{10,0,70},{12,0,26},{14,0,17},{14,0,178},{15,\n0,34},{149,0,12},{132,0,993},{4,11,148},{133,11,742},{6,0,31},{7,0,491},{7,0,530\n},{8,0,592},{11,0,53},{11,0,779},{12,0,167},{12,0,411},{14,0,14},{14,0,136},{15,\n0,72},{16,0,17},{144,0,72},{133,0,907},{134,0,733},{133,11,111},{4,10,71},{5,10,\n376},{7,10,119},{138,10,665},{136,0,55},{8,0,430},{136,11,430},{4,0,208},{5,0,\n106},{6,0,531},{8,0,408},{9,0,188},{138,0,572},{11,10,827},{12,0,56},{14,10,34},\n{143,10,148},{134,0,1693},{133,11,444},{132,10,479},{140,0,441},{9,0,449},{10,0,\n192},{138,0,740},{134,0,928},{4,0,241},{7,10,607},{136,10,99},{8,11,123},{15,11,\n6},{144,11,7},{6,11,285},{8,11,654},{11,11,749},{12,11,190},{12,11,327},{13,11,\n120},{13,11,121},{13,11,327},{15,11,47},{146,11,40},{4,10,41},{5,10,74},{7,10,\n1627},{11,10,871},{140,10,619},{7,0,1525},{11,10,329},{11,10,965},{12,10,241},{\n14,10,354},{15,10,22},{148,10,63},{132,0,259},{135,11,183},{9,10,209},{137,10,\n300},{5,11,937},{135,11,100},{133,10,98},{4,0,173},{5,0,312},{5,0,512},{135,0,\n1285},{141,0,185},{7,0,1603},{7,0,1691},{9,0,464},{11,0,195},{12,0,279},{12,0,\n448},{14,0,11},{147,0,102},{135,0,1113},{133,10,984},{4,0,452},{5,0,583},{135,0,\n720},{4,0,547},{5,0,817},{6,0,433},{7,0,593},{7,0,1378},{8,0,161},{9,0,284},{10,\n0,313},{139,0,886},{4,10,182},{6,10,205},{7,10,220},{136,0,722},{150,0,13},{4,10\n,42},{9,10,205},{9,10,786},{138,10,659},{6,0,289},{7,0,1670},{12,0,57},{151,0,4}\n,{132,10,635},{14,0,43},{146,0,21},{139,10,533},{135,0,1694},{8,0,420},{139,0,\n193},{135,0,409},{132,10,371},{4,10,272},{135,10,836},{5,10,825},{134,10,1640},{\n5,11,251},{5,11,956},{8,11,268},{9,11,214},{146,11,142},{138,0,308},{6,0,1863},{\n141,11,37},{137,10,879},{7,10,317},{135,10,569},{132,11,294},{134,0,790},{5,0,\n1002},{136,0,745},{5,11,346},{5,11,711},{136,11,390},{135,0,289},{5,0,504},{9,10\n,307},{139,0,68},{4,0,239},{6,0,477},{7,0,1607},{139,0,617},{149,0,13},{133,0,\n609},{133,11,624},{5,11,783},{7,11,1998},{135,11,2047},{133,10,525},{132,0,367},\n{132,11,594},{5,10,493},{134,0,528},{4,10,174},{135,10,911},{8,10,417},{137,10,\n782},{132,0,694},{7,0,548},{137,0,58},{4,10,32},{5,10,215},{6,10,269},{7,10,1782\n},{7,10,1892},{10,10,16},{11,10,822},{11,10,954},{141,10,481},{140,0,687},{7,0,\n1749},{136,10,477},{132,11,569},{133,10,308},{135,10,1088},{4,0,661},{138,0,1004\n},{5,11,37},{6,11,39},{6,11,451},{7,11,218},{7,11,667},{7,11,1166},{7,11,1687},{\n8,11,662},{144,11,2},{5,10,126},{8,10,297},{9,0,445},{9,10,366},{12,0,53},{12,10\n,374},{141,0,492},{7,10,1551},{139,10,361},{148,0,74},{134,11,508},{135,0,213},{\n132,10,175},{132,10,685},{6,0,760},{6,0,834},{134,0,1248},{7,11,453},{7,11,635},\n{7,11,796},{8,11,331},{9,11,328},{9,11,330},{9,11,865},{10,11,119},{10,11,235},{\n11,11,111},{11,11,129},{11,11,240},{12,11,31},{12,11,66},{12,11,222},{12,11,269}\n,{12,11,599},{12,11,689},{13,11,186},{13,11,364},{142,11,345},{7,0,1672},{139,0,\n189},{133,10,797},{133,10,565},{6,0,1548},{6,11,98},{7,11,585},{135,11,702},{9,0\n,968},{15,0,192},{149,0,56},{4,10,252},{6,11,37},{7,10,1068},{7,11,299},{7,11,\n1666},{8,11,195},{8,11,316},{9,11,178},{9,11,276},{9,11,339},{9,11,536},{10,10,\n434},{10,11,102},{10,11,362},{10,11,785},{11,10,228},{11,10,426},{11,11,55},{11,\n11,149},{11,11,773},{13,10,231},{13,11,416},{13,11,419},{14,11,38},{14,11,41},{\n14,11,210},{18,10,106},{148,10,87},{4,0,751},{11,0,390},{140,0,32},{4,0,409},{\n133,0,78},{11,11,458},{12,11,15},{140,11,432},{5,10,231},{7,0,1602},{7,10,601},{\n9,10,277},{9,10,674},{10,0,257},{10,0,698},{10,10,178},{10,10,418},{10,10,509},{\n11,0,544},{11,0,585},{11,10,531},{12,0,212},{12,10,113},{12,10,475},{13,0,307},{\n13,10,99},{142,10,428},{6,0,473},{145,0,105},{5,11,645},{6,0,1949},{143,0,156},{\n7,10,1591},{144,10,43},{135,0,1779},{135,10,1683},{4,11,290},{135,11,1356},{134,\n0,763},{6,11,70},{7,11,1292},{10,11,762},{139,11,288},{142,0,29},{140,11,428},{7\n,0,883},{7,11,131},{7,11,422},{8,11,210},{140,11,573},{134,0,488},{4,10,399},{5,\n10,119},{5,10,494},{7,10,751},{137,10,556},{133,0,617},{132,11,936},{139,0,50},{\n7,0,1518},{139,0,694},{137,0,785},{4,0,546},{135,0,2042},{7,11,716},{13,11,97},{\n141,11,251},{132,11,653},{145,0,22},{134,0,1016},{4,0,313},{133,0,577},{136,11,\n657},{8,0,184},{141,0,433},{135,0,935},{6,0,720},{9,0,114},{146,11,80},{7,10,594\n},{7,10,851},{7,10,1858},{9,10,411},{9,10,574},{9,10,666},{9,10,737},{10,10,346}\n,{10,10,712},{11,10,246},{11,10,432},{11,10,517},{11,10,647},{11,10,679},{11,10,\n727},{12,0,186},{12,0,292},{12,10,304},{12,10,305},{12,10,323},{12,10,483},{12,\n10,572},{12,10,593},{12,10,602},{13,10,95},{13,10,101},{13,10,171},{13,10,315},{\n13,10,378},{13,10,425},{13,10,475},{14,0,100},{14,10,63},{14,10,380},{14,10,384}\n,{15,10,133},{18,0,70},{18,10,112},{148,10,72},{135,10,1093},{135,11,1836},{132,\n10,679},{137,10,203},{11,0,402},{12,0,109},{12,0,431},{13,0,179},{13,0,206},{14,\n0,217},{16,0,3},{148,0,53},{7,11,1368},{8,11,232},{8,11,361},{10,11,682},{138,11\n,742},{137,10,714},{5,0,886},{6,0,46},{6,0,1790},{7,0,14},{7,0,732},{7,0,1654},{\n8,0,95},{8,0,327},{8,0,616},{9,0,892},{9,11,534},{10,0,598},{10,0,769},{11,0,134\n},{11,0,747},{12,0,378},{142,0,97},{4,0,969},{136,10,825},{137,11,27},{6,0,727},\n{142,11,12},{133,0,1021},{134,0,1190},{134,11,1657},{5,10,143},{5,10,769},{6,10,\n1760},{7,10,682},{7,10,1992},{136,10,736},{132,0,153},{135,11,127},{133,0,798},{\n132,0,587},{6,0,598},{7,0,42},{8,0,695},{10,0,212},{11,0,158},{14,0,196},{145,0,\n85},{133,10,860},{6,0,1929},{134,0,1933},{5,0,957},{5,0,1008},{6,10,422},{7,10,0\n},{7,10,1544},{8,11,364},{9,0,577},{11,10,990},{12,0,141},{12,10,453},{13,10,47}\n,{141,10,266},{134,0,1319},{4,0,129},{135,0,465},{7,0,470},{7,0,1057},{7,0,1201}\n,{9,0,755},{11,0,906},{140,0,527},{7,0,908},{146,0,7},{5,0,148},{136,0,450},{5,\n10,515},{137,10,131},{7,10,1605},{11,10,962},{146,10,139},{132,10,646},{134,0,\n1166},{4,10,396},{7,10,728},{9,10,117},{13,10,202},{148,10,51},{6,10,121},{6,10,\n124},{6,10,357},{7,10,1138},{7,10,1295},{8,10,162},{139,10,655},{14,0,374},{142,\n11,374},{138,0,253},{139,0,1003},{5,11,909},{9,11,849},{138,11,805},{133,10,237}\n,{7,11,525},{7,11,1579},{8,11,497},{136,11,573},{137,0,46},{132,0,879},{134,0,\n806},{135,0,1868},{6,0,1837},{134,0,1846},{6,0,730},{134,0,881},{7,0,965},{7,0,\n1460},{7,0,1604},{7,11,193},{7,11,397},{7,11,1105},{8,11,124},{8,11,619},{9,11,\n305},{10,11,264},{11,11,40},{12,11,349},{13,11,134},{13,11,295},{14,11,155},{15,\n11,120},{146,11,105},{136,0,506},{143,0,10},{4,11,262},{7,10,571},{7,10,1877},{7\n,11,342},{10,10,366},{141,11,23},{133,11,641},{9,10,513},{10,0,22},{10,10,39},{\n12,10,122},{140,10,187},{135,11,1431},{150,11,49},{4,11,99},{6,11,250},{6,11,346\n},{8,11,127},{138,11,81},{6,0,2014},{8,0,928},{10,0,960},{10,0,979},{140,0,996},\n{134,0,296},{132,11,915},{5,11,75},{9,11,517},{10,11,470},{12,11,155},{141,11,\n224},{137,10,873},{4,0,854},{140,11,18},{134,0,587},{7,10,107},{7,10,838},{8,10,\n550},{138,10,401},{11,0,636},{11,10,588},{11,10,864},{11,10,968},{15,0,145},{15,\n10,160},{17,0,34},{19,0,50},{151,0,20},{135,11,216},{7,0,982},{10,0,32},{143,0,\n56},{133,10,768},{133,11,954},{6,11,304},{7,11,1114},{8,11,418},{10,11,345},{11,\n11,341},{11,11,675},{141,11,40},{9,11,410},{139,11,425},{136,0,941},{4,10,894},{\n133,0,435},{5,0,85},{6,0,419},{7,0,134},{7,0,305},{7,0,361},{7,0,1337},{8,0,71},\n{140,0,519},{140,0,688},{135,0,740},{5,0,691},{7,0,345},{9,0,94},{140,0,169},{5,\n0,183},{6,0,582},{10,0,679},{140,0,435},{134,11,14},{6,0,945},{135,0,511},{134,\n11,1708},{5,11,113},{6,11,243},{7,11,1865},{11,11,161},{16,11,37},{145,11,99},{\n132,11,274},{137,0,539},{6,10,272},{7,0,1993},{136,0,684},{6,0,659},{134,0,982},\n{4,10,9},{5,10,128},{7,10,368},{11,10,480},{148,10,3},{134,0,583},{132,0,803},{\n133,0,704},{4,0,179},{5,0,198},{133,0,697},{7,0,347},{7,0,971},{7,11,166},{8,0,\n181},{138,0,711},{136,10,682},{4,10,2},{7,10,545},{7,10,894},{136,11,521},{135,0\n,481},{132,0,243},{5,0,203},{7,0,19},{7,0,71},{7,0,113},{10,0,405},{11,0,357},{\n142,0,240},{5,11,725},{5,11,727},{135,11,1811},{6,0,826},{137,11,304},{7,0,1450}\n,{139,0,99},{133,11,654},{134,0,492},{5,0,134},{6,0,408},{6,0,495},{6,11,273},{7\n,0,1593},{10,11,188},{13,11,377},{146,11,77},{9,10,769},{140,10,185},{135,11,410\n},{142,0,4},{4,0,665},{134,11,1785},{4,0,248},{7,0,137},{137,0,349},{5,10,530},{\n142,10,113},{7,0,1270},{139,0,612},{132,11,780},{5,0,371},{135,0,563},{135,0,826\n},{6,0,1535},{23,0,21},{151,0,23},{4,0,374},{7,0,547},{7,0,1700},{7,0,1833},{139\n,0,858},{133,10,556},{7,11,612},{8,11,545},{8,11,568},{8,11,642},{9,11,717},{10,\n11,541},{10,11,763},{11,11,449},{12,11,489},{13,11,153},{13,11,296},{14,11,138},\n{14,11,392},{15,11,50},{16,11,6},{16,11,12},{148,11,9},{9,0,311},{141,0,42},{8,\n10,16},{140,10,568},{6,0,1968},{6,0,2027},{138,0,991},{6,0,1647},{7,0,1552},{7,0\n,2010},{9,0,494},{137,0,509},{133,11,948},{6,10,186},{137,10,426},{134,0,769},{\n134,0,642},{132,10,585},{6,0,123},{7,0,214},{9,0,728},{10,0,157},{11,0,346},{11,\n0,662},{143,0,106},{142,11,381},{135,0,1435},{4,11,532},{5,11,706},{135,11,662},\n{5,11,837},{134,11,1651},{4,10,93},{5,10,252},{6,10,229},{7,10,291},{9,10,550},{\n139,10,644},{148,0,79},{137,10,749},{134,0,1425},{137,10,162},{4,11,362},{7,11,\n52},{7,11,303},{140,11,166},{132,10,381},{4,11,330},{7,11,933},{7,11,2012},{136,\n11,292},{135,11,767},{4,0,707},{5,0,588},{6,0,393},{13,0,106},{18,0,49},{147,0,\n41},{6,0,211},{7,0,1690},{11,0,486},{140,0,369},{137,11,883},{4,11,703},{135,11,\n207},{4,0,187},{5,0,184},{5,0,690},{7,0,1869},{10,0,756},{139,0,783},{132,11,571\n},{134,0,1382},{5,0,175},{6,10,77},{6,10,157},{7,10,974},{7,10,1301},{7,10,1339}\n,{7,10,1490},{7,10,1873},{137,10,628},{134,0,1493},{5,11,873},{133,11,960},{134,\n0,1007},{12,11,93},{12,11,501},{13,11,362},{14,11,151},{15,11,40},{15,11,59},{16\n,11,46},{17,11,25},{18,11,14},{18,11,134},{19,11,25},{19,11,69},{20,11,16},{20,\n11,19},{20,11,66},{21,11,23},{21,11,25},{150,11,42},{11,10,919},{141,10,409},{\n134,0,219},{5,0,582},{6,0,1646},{7,0,99},{7,0,1962},{7,0,1986},{8,0,515},{8,0,\n773},{9,0,23},{9,0,491},{12,0,620},{142,0,93},{133,0,851},{5,11,33},{134,11,470}\n,{135,11,1291},{134,0,1278},{135,11,1882},{135,10,1489},{132,0,1000},{138,0,982}\n,{8,0,762},{8,0,812},{137,0,910},{6,11,47},{7,11,90},{7,11,664},{7,11,830},{7,11\n,1380},{7,11,2025},{8,11,448},{136,11,828},{4,0,98},{4,0,940},{6,0,1819},{6,0,\n1834},{6,0,1841},{7,0,1365},{8,0,859},{8,0,897},{8,0,918},{8,10,398},{9,0,422},{\n9,0,670},{9,10,681},{10,0,775},{10,0,894},{10,0,909},{10,0,910},{10,0,935},{11,0\n,210},{11,10,632},{12,0,750},{12,0,755},{13,0,26},{13,0,457},{13,0,476},{16,0,\n100},{16,0,109},{18,0,173},{146,0,175},{9,11,417},{137,11,493},{136,10,645},{138\n,0,906},{134,0,1730},{134,10,20},{133,11,1019},{134,0,1185},{8,10,769},{138,0,40\n},{6,11,208},{137,0,147},{140,0,650},{5,0,209},{6,0,30},{11,0,56},{139,0,305},{\n132,0,553},{138,11,344},{6,11,68},{7,11,398},{7,11,448},{7,11,1629},{7,11,1813},\n{8,11,387},{8,11,442},{9,11,710},{10,11,282},{138,11,722},{5,0,597},{14,0,20},{\n142,11,20},{135,0,1614},{135,10,1757},{4,0,150},{5,0,303},{6,0,327},{135,10,937}\n,{7,10,1652},{16,0,49},{144,11,49},{8,0,192},{10,0,78},{141,0,359},{135,0,786},{\n143,0,134},{6,0,1638},{7,0,79},{7,0,496},{9,0,138},{10,0,336},{11,0,12},{12,0,\n412},{12,0,440},{142,0,305},{136,11,491},{4,10,579},{5,10,226},{5,10,323},{135,\n10,960},{7,0,204},{7,0,415},{8,0,42},{10,0,85},{139,0,564},{132,0,614},{4,11,403\n},{5,11,441},{7,11,450},{11,11,101},{12,11,193},{141,11,430},{135,11,1927},{135,\n11,1330},{4,0,3},{5,0,247},{5,0,644},{7,0,744},{7,0,1207},{7,0,1225},{7,0,1909},\n{146,0,147},{136,0,942},{4,0,1019},{134,0,2023},{5,10,973},{133,11,679},{5,0,285\n},{9,0,67},{13,0,473},{143,0,82},{7,11,328},{137,11,326},{151,0,8},{6,10,135},{\n135,10,1176},{135,11,1128},{134,0,1309},{135,11,1796},{135,10,314},{4,11,574},{7\n,11,350},{7,11,1024},{8,11,338},{9,11,677},{10,11,808},{139,11,508},{7,11,818},{\n17,11,14},{17,11,45},{18,11,75},{148,11,18},{146,10,4},{135,11,1081},{4,0,29},{6\n,0,532},{7,0,1628},{7,0,1648},{9,0,350},{10,0,433},{11,0,97},{11,0,557},{11,0,\n745},{12,0,289},{12,0,335},{12,0,348},{12,0,606},{13,0,116},{13,0,233},{13,0,466\n},{14,0,181},{14,0,209},{14,0,232},{14,0,236},{14,0,300},{16,0,41},{148,0,97},{6\n,10,281},{7,0,318},{8,10,282},{8,10,480},{8,10,499},{9,10,198},{10,10,143},{10,\n10,169},{10,10,211},{10,10,417},{10,10,574},{11,10,147},{11,10,395},{12,10,75},{\n12,10,407},{12,10,608},{13,10,500},{142,10,251},{135,11,1676},{135,11,2037},{135\n,0,1692},{5,0,501},{7,0,1704},{9,0,553},{11,0,520},{12,0,557},{141,0,249},{6,0,\n1527},{14,0,324},{14,11,324},{15,0,55},{15,0,80},{15,11,55},{143,11,80},{135,10,\n1776},{8,0,988},{137,11,297},{132,10,419},{142,0,223},{139,11,234},{7,0,1123},{\n12,0,508},{14,0,102},{14,0,226},{144,0,57},{4,10,138},{7,10,1012},{7,10,1280},{\n137,10,76},{5,10,29},{7,0,1764},{140,10,638},{134,0,2015},{134,0,1599},{138,11,\n56},{6,11,306},{7,11,1140},{7,11,1340},{8,11,133},{138,11,449},{139,11,1011},{6,\n10,1710},{135,10,2038},{7,11,1763},{140,11,310},{4,10,17},{5,10,23},{6,0,129},{7\n,10,995},{11,10,383},{11,10,437},{12,10,460},{140,10,532},{5,11,329},{136,11,260\n},{133,10,862},{132,0,534},{6,0,811},{135,0,626},{132,11,657},{4,0,25},{5,0,60},\n{6,0,504},{7,0,614},{7,0,1155},{12,0,0},{152,11,7},{7,0,1248},{11,0,621},{139,0,\n702},{137,0,321},{8,10,70},{12,10,171},{141,10,272},{10,10,233},{139,10,76},{4,0\n,379},{6,10,442},{135,0,1397},{5,11,66},{7,11,1896},{136,11,288},{134,11,1643},{\n134,10,1709},{4,11,21},{5,11,91},{5,11,570},{5,11,648},{5,11,750},{5,11,781},{6,\n11,54},{6,11,112},{6,11,402},{6,11,1732},{7,11,315},{7,11,749},{7,11,1347},{7,11\n,1900},{9,11,78},{9,11,508},{10,11,611},{11,11,510},{11,11,728},{13,11,36},{14,\n11,39},{16,11,83},{17,11,124},{148,11,30},{4,0,118},{6,0,274},{6,0,361},{7,0,75}\n,{141,0,441},{10,11,322},{10,11,719},{139,11,407},{147,10,119},{12,11,549},{14,\n11,67},{147,11,60},{11,10,69},{12,10,105},{12,10,117},{13,10,213},{14,10,13},{14\n,10,62},{14,10,177},{14,10,421},{15,10,19},{146,10,141},{9,0,841},{137,10,309},{\n7,10,608},{7,10,976},{8,11,125},{8,11,369},{8,11,524},{9,10,146},{10,10,206},{10\n,10,596},{10,11,486},{11,11,13},{11,11,381},{11,11,736},{11,11,766},{11,11,845},\n{13,10,218},{13,11,114},{13,11,292},{14,10,153},{142,11,47},{7,11,759},{140,0,\n693},{5,0,314},{6,0,221},{7,0,419},{10,0,650},{11,0,396},{12,0,156},{13,0,369},{\n14,0,333},{145,0,47},{6,11,1684},{6,11,1731},{7,11,356},{7,11,1932},{8,11,54},{8\n,11,221},{9,11,225},{9,11,356},{10,11,77},{10,11,446},{10,11,731},{12,11,404},{\n141,11,491},{132,11,375},{4,10,518},{135,10,1136},{4,0,913},{4,11,411},{11,11,\n643},{140,11,115},{4,11,80},{133,11,44},{8,10,689},{137,10,863},{138,0,880},{4,\n10,18},{7,10,145},{7,10,444},{7,10,1278},{8,10,49},{8,10,400},{9,10,71},{9,10,\n250},{10,10,459},{12,10,160},{144,10,24},{136,0,475},{5,0,1016},{5,11,299},{135,\n11,1083},{7,0,602},{8,0,179},{10,0,781},{140,0,126},{6,0,329},{138,0,111},{135,0\n,1864},{4,11,219},{7,11,1761},{137,11,86},{6,0,1888},{6,0,1892},{6,0,1901},{6,0,\n1904},{9,0,953},{9,0,985},{9,0,991},{9,0,1001},{12,0,818},{12,0,846},{12,0,847},\n{12,0,861},{12,0,862},{12,0,873},{12,0,875},{12,0,877},{12,0,879},{12,0,881},{12\n,0,884},{12,0,903},{12,0,915},{12,0,926},{12,0,939},{15,0,182},{15,0,219},{15,0,\n255},{18,0,191},{18,0,209},{18,0,211},{149,0,41},{5,11,328},{135,11,918},{137,0,\n780},{12,0,82},{143,0,36},{133,10,1010},{5,0,821},{134,0,1687},{133,11,514},{132\n,0,956},{134,0,1180},{5,10,87},{7,10,313},{7,10,1103},{10,0,112},{10,10,582},{11\n,10,389},{11,10,813},{12,10,385},{13,10,286},{14,10,124},{146,10,108},{5,0,71},{\n7,0,1407},{9,0,704},{10,0,261},{10,0,619},{11,0,547},{11,0,619},{143,0,157},{4,0\n,531},{5,0,455},{5,11,301},{6,11,571},{14,11,49},{146,11,102},{132,10,267},{6,0,\n385},{7,0,2008},{9,0,337},{138,0,517},{133,11,726},{133,11,364},{4,11,76},{7,11,\n1550},{9,11,306},{9,11,430},{9,11,663},{10,11,683},{11,11,427},{11,11,753},{12,\n11,334},{12,11,442},{14,11,258},{14,11,366},{143,11,131},{6,0,1865},{6,0,1879},{\n6,0,1881},{6,0,1894},{6,0,1908},{9,0,915},{9,0,926},{9,0,940},{9,0,943},{9,0,966\n},{9,0,980},{9,0,989},{9,0,1005},{9,0,1010},{12,0,813},{12,0,817},{12,0,840},{12\n,0,843},{12,0,855},{12,0,864},{12,0,871},{12,0,872},{12,0,899},{12,0,905},{12,0,\n924},{15,0,171},{15,0,181},{15,0,224},{15,0,235},{15,0,251},{146,0,184},{137,11,\n52},{5,0,16},{6,0,86},{6,0,603},{7,0,292},{7,0,561},{8,0,257},{8,0,382},{9,0,721\n},{9,0,778},{11,0,581},{140,0,466},{4,0,486},{5,0,491},{135,10,1121},{4,0,72},{6\n,0,265},{135,0,1300},{135,11,1183},{10,10,249},{139,10,209},{132,10,561},{137,11\n,519},{4,10,760},{4,11,656},{135,11,779},{9,10,154},{140,10,485},{135,11,1793},{\n135,11,144},{136,10,255},{133,0,621},{4,10,368},{135,10,641},{135,11,1373},{7,11\n,554},{7,11,605},{141,11,10},{137,0,234},{5,0,815},{6,0,1688},{134,0,1755},{5,11\n,838},{5,11,841},{134,11,1649},{7,0,1987},{7,0,2040},{136,0,743},{133,11,1012},{\n6,0,197},{136,0,205},{6,0,314},{134,11,314},{144,11,53},{6,11,251},{7,11,365},{7\n,11,1357},{7,11,1497},{8,11,154},{141,11,281},{133,11,340},{6,0,452},{7,0,312},{\n138,0,219},{138,0,589},{4,0,333},{9,0,176},{12,0,353},{141,0,187},{9,10,92},{147\n,10,91},{134,0,1110},{11,0,47},{139,11,495},{6,10,525},{8,10,806},{9,10,876},{\n140,10,284},{8,11,261},{9,11,144},{9,11,466},{10,11,370},{12,11,470},{13,11,144}\n,{142,11,348},{137,11,897},{6,11,248},{8,0,863},{8,0,864},{8,0,868},{8,0,884},{9\n,11,546},{10,0,866},{10,0,868},{10,0,873},{10,0,911},{10,0,912},{10,0,944},{10,\n11,535},{11,11,681},{12,0,727},{141,11,135},{6,0,300},{135,0,1515},{134,0,1237},\n{139,10,958},{133,10,594},{140,11,250},{134,0,1685},{134,11,567},{7,0,135},{8,0,\n7},{8,0,62},{9,0,243},{10,0,658},{10,0,697},{11,0,456},{139,0,756},{9,0,395},{\n138,0,79},{6,10,1641},{136,10,820},{4,10,302},{135,10,1766},{134,11,174},{135,10\n,1313},{135,0,631},{134,10,1674},{134,11,395},{138,0,835},{7,0,406},{7,0,459},{8\n,0,606},{139,0,726},{134,11,617},{134,0,979},{6,10,389},{7,10,149},{9,10,142},{\n138,10,94},{5,11,878},{133,11,972},{6,10,8},{7,10,1881},{8,10,91},{136,11,511},{\n133,0,612},{132,11,351},{4,0,372},{7,0,482},{8,0,158},{9,0,602},{9,0,615},{10,0,\n245},{10,0,678},{10,0,744},{11,0,248},{139,0,806},{5,0,854},{135,0,1991},{132,11\n,286},{135,11,344},{7,11,438},{7,11,627},{7,11,1516},{8,11,40},{9,11,56},{9,11,\n294},{10,11,30},{10,11,259},{11,11,969},{146,11,148},{135,0,1492},{5,11,259},{7,\n11,414},{7,11,854},{142,11,107},{135,10,1746},{6,0,833},{134,0,998},{135,10,24},\n{6,0,750},{135,0,1739},{4,10,503},{135,10,1661},{5,10,130},{7,10,1314},{9,10,610\n},{10,10,718},{11,10,601},{11,10,819},{11,10,946},{140,10,536},{10,10,149},{11,\n10,280},{142,10,336},{132,11,738},{135,10,1946},{5,0,195},{135,0,1685},{7,0,1997\n},{8,0,730},{139,0,1006},{151,11,17},{133,11,866},{14,0,463},{14,0,470},{150,0,\n61},{4,10,392},{5,0,751},{7,10,1597},{8,0,266},{139,0,578},{5,10,433},{9,10,633}\n,{139,10,629},{135,0,821},{6,0,715},{134,0,1325},{133,11,116},{4,11,457},{134,0,\n868},{134,0,959},{6,10,234},{138,11,199},{7,0,1053},{7,10,1950},{8,10,680},{11,\n10,817},{147,10,88},{7,10,1222},{138,10,386},{5,0,950},{5,0,994},{6,0,351},{134,\n0,1124},{134,0,1081},{6,10,5},{7,0,1595},{11,10,249},{12,10,313},{16,10,66},{145\n,10,26},{148,0,59},{5,11,527},{6,11,189},{135,11,859},{5,10,963},{6,10,1773},{11\n,11,104},{11,11,554},{15,11,60},{143,11,125},{135,0,47},{137,0,684},{134,11,116}\n,{134,0,1606},{134,0,777},{7,0,1020},{8,10,509},{136,10,792},{135,0,1094},{132,0\n,350},{133,11,487},{4,11,86},{5,11,667},{5,11,753},{6,11,316},{6,11,455},{135,11\n,946},{7,0,1812},{13,0,259},{13,0,356},{14,0,242},{147,0,114},{132,10,931},{133,\n0,967},{4,0,473},{7,0,623},{8,0,808},{9,0,871},{9,0,893},{11,0,38},{11,0,431},{\n12,0,112},{12,0,217},{12,0,243},{12,0,562},{12,0,663},{12,0,683},{13,0,141},{13,\n0,197},{13,0,227},{13,0,406},{13,0,487},{14,0,156},{14,0,203},{14,0,224},{14,0,\n256},{18,0,58},{150,0,0},{138,0,286},{7,10,943},{139,10,614},{135,10,1837},{150,\n11,45},{132,0,798},{4,0,222},{7,0,286},{136,0,629},{4,11,79},{7,11,1773},{10,11,\n450},{11,11,589},{13,11,332},{13,11,493},{14,11,183},{14,11,334},{14,11,362},{14\n,11,368},{14,11,376},{14,11,379},{19,11,90},{19,11,103},{19,11,127},{148,11,90},\n{4,10,90},{5,0,337},{5,10,545},{7,10,754},{9,10,186},{10,10,72},{10,10,782},{11,\n0,513},{11,0,889},{11,0,961},{11,10,577},{11,10,610},{12,0,461},{12,10,354},{12,\n10,362},{12,10,595},{13,0,79},{143,0,121},{141,0,306},{136,0,146},{7,0,1646},{9,\n10,329},{11,10,254},{141,11,124},{4,0,465},{135,0,1663},{132,0,525},{133,11,663}\n,{9,10,187},{10,0,299},{11,10,1016},{17,10,44},{146,0,74},{4,10,506},{7,0,165},{\n7,0,919},{136,10,517},{5,10,295},{135,10,1680},{133,11,846},{134,0,1064},{5,11,\n378},{7,11,1402},{7,11,1414},{8,11,465},{9,11,286},{10,11,185},{10,11,562},{10,\n11,635},{11,11,31},{11,11,393},{12,11,456},{13,11,312},{18,11,65},{18,11,96},{\n147,11,89},{132,0,596},{7,10,987},{9,10,688},{10,10,522},{11,10,788},{140,10,566\n},{4,11,648},{6,0,82},{6,10,1775},{7,0,138},{7,0,517},{7,0,1741},{139,0,238},{7,\n0,1233},{7,10,700},{7,10,940},{8,10,514},{9,10,116},{9,10,535},{10,10,118},{11,\n10,107},{11,10,148},{11,10,922},{12,10,254},{12,10,421},{142,10,238},{4,0,962},{\n6,0,1824},{8,0,894},{12,0,708},{12,0,725},{14,0,451},{20,0,94},{22,0,59},{150,0,\n62},{5,11,945},{6,11,1656},{6,11,1787},{7,11,167},{8,11,824},{9,11,391},{10,11,\n375},{139,11,185},{5,0,495},{7,0,834},{9,0,733},{139,0,378},{4,10,743},{135,11,\n1273},{6,0,1204},{7,11,1645},{8,11,352},{137,11,249},{139,10,292},{133,0,559},{\n132,11,152},{7,10,1283},{9,0,499},{9,10,227},{10,0,341},{11,10,325},{11,10,408},\n{14,10,180},{15,0,144},{18,10,47},{147,0,49},{6,0,21},{6,0,1737},{7,0,1444},{136\n,0,224},{133,11,1006},{5,10,81},{7,0,1446},{7,10,146},{7,10,1342},{8,10,53},{8,\n10,561},{8,10,694},{8,10,754},{9,0,97},{9,10,115},{9,10,894},{10,10,462},{10,10,\n813},{11,10,230},{11,10,657},{11,10,699},{11,10,748},{12,10,119},{12,10,200},{12\n,10,283},{14,10,273},{145,0,15},{5,10,408},{137,10,747},{135,11,431},{135,11,832\n},{6,0,729},{134,0,953},{4,0,727},{5,11,351},{7,11,264},{8,0,565},{136,11,565},{\n134,0,1948},{5,0,519},{5,11,40},{7,11,598},{7,11,1638},{8,11,78},{9,11,166},{9,\n11,640},{9,11,685},{9,11,773},{11,11,215},{13,11,65},{14,11,172},{14,11,317},{\n145,11,6},{8,11,60},{9,11,343},{139,11,769},{137,11,455},{134,0,1193},{140,0,790\n},{7,11,1951},{8,11,765},{8,11,772},{140,11,671},{7,11,108},{8,11,219},{8,11,388\n},{9,11,639},{9,11,775},{11,11,275},{140,11,464},{132,11,468},{7,10,30},{8,10,86\n},{8,10,315},{8,10,700},{9,10,576},{9,10,858},{11,10,310},{11,10,888},{11,10,904\n},{12,10,361},{141,10,248},{5,11,15},{6,11,56},{7,11,1758},{8,11,500},{9,11,730}\n,{11,11,331},{13,11,150},{142,11,282},{4,0,402},{7,0,2},{8,0,323},{136,0,479},{\n138,10,839},{11,0,580},{142,0,201},{5,0,59},{135,0,672},{137,10,617},{146,0,34},\n{134,11,1886},{4,0,961},{136,0,896},{5,11,205},{6,0,1285},{6,11,438},{137,11,711\n},{134,10,428},{7,10,524},{8,10,169},{8,10,234},{9,10,480},{138,10,646},{148,0,\n46},{141,0,479},{133,11,534},{6,0,2019},{134,10,1648},{4,0,85},{7,0,549},{7,10,\n1205},{138,10,637},{4,0,663},{5,0,94},{7,11,235},{7,11,1475},{15,11,68},{146,11,\n120},{6,11,443},{9,11,237},{9,11,571},{9,11,695},{10,11,139},{11,11,715},{12,11,\n417},{141,11,421},{132,0,783},{4,0,682},{8,0,65},{9,10,39},{10,10,166},{11,10,\n918},{12,10,635},{20,10,10},{22,10,27},{22,10,43},{150,10,52},{6,0,11},{135,0,\n187},{132,0,522},{4,0,52},{135,0,661},{4,0,383},{133,0,520},{135,11,546},{11,0,\n343},{142,0,127},{4,11,578},{7,10,157},{7,11,624},{7,11,916},{8,10,279},{10,11,\n256},{11,11,87},{139,11,703},{134,10,604},{4,0,281},{5,0,38},{7,0,194},{7,0,668}\n,{7,0,1893},{137,0,397},{7,10,945},{11,10,713},{139,10,744},{139,10,1022},{9,0,\n635},{139,0,559},{5,11,923},{7,11,490},{12,11,553},{13,11,100},{14,11,118},{143,\n11,75},{132,0,975},{132,10,567},{137,10,859},{7,10,1846},{7,11,1846},{8,10,628},\n{136,11,628},{148,0,116},{138,11,750},{14,0,51},{14,11,51},{15,11,7},{148,11,20}\n,{132,0,858},{134,0,1075},{4,11,924},{133,10,762},{136,0,535},{133,0,448},{10,10\n,784},{141,10,191},{133,10,298},{7,0,610},{135,0,1501},{7,10,633},{7,10,905},{7,\n10,909},{7,10,1538},{9,10,767},{140,10,636},{4,11,265},{7,11,807},{135,11,950},{\n5,11,93},{12,11,267},{144,11,26},{136,0,191},{139,10,301},{135,10,1970},{135,0,\n267},{4,0,319},{5,0,699},{138,0,673},{6,0,336},{7,0,92},{7,0,182},{8,0,453},{8,0\n,552},{9,0,204},{9,0,285},{10,0,99},{11,0,568},{11,0,950},{12,0,94},{12,10,644},\n{16,0,20},{16,0,70},{16,10,90},{147,0,55},{6,0,551},{7,0,1308},{7,10,845},{7,11,\n994},{8,10,160},{137,10,318},{19,11,1},{19,11,26},{150,11,9},{7,0,1406},{9,0,218\n},{141,0,222},{5,0,256},{138,0,69},{5,11,233},{5,11,320},{6,11,140},{7,11,330},{\n136,11,295},{6,0,1980},{136,0,952},{4,0,833},{137,11,678},{133,11,978},{4,11,905\n},{6,11,1701},{137,11,843},{138,10,735},{136,10,76},{17,0,39},{148,0,36},{18,0,\n81},{146,11,81},{14,0,352},{17,0,53},{18,0,146},{18,0,152},{19,0,11},{150,0,54},\n{135,0,634},{138,10,841},{132,0,618},{4,0,339},{4,11,275},{7,0,259},{12,11,376},\n{145,0,73},{132,11,509},{7,11,273},{139,11,377},{4,0,759},{9,10,804},{141,0,169}\n,{6,10,96},{135,10,1426},{4,10,651},{133,10,289},{7,0,1075},{8,10,35},{9,10,511}\n,{10,10,767},{147,10,118},{6,0,649},{6,0,670},{136,0,482},{5,0,336},{6,0,341},{6\n,0,478},{6,0,1763},{136,0,386},{5,11,802},{7,11,2021},{8,11,805},{14,11,94},{15,\n11,65},{16,11,4},{16,11,77},{16,11,80},{145,11,5},{5,11,167},{5,11,899},{6,0,\n1035},{6,11,410},{137,11,777},{134,11,1705},{5,0,924},{133,0,969},{132,10,704},{\n135,0,73},{135,11,10},{135,10,1078},{5,11,11},{6,11,117},{6,11,485},{7,11,1133},\n{9,11,582},{9,11,594},{11,11,21},{11,11,818},{12,11,535},{141,11,86},{135,0,1971\n},{4,11,264},{7,11,1067},{8,11,204},{8,11,385},{139,11,953},{6,0,1458},{135,0,\n1344},{5,0,396},{134,0,501},{4,10,720},{133,10,306},{4,0,929},{5,0,799},{5,10,\n431},{8,0,46},{136,0,740},{7,11,646},{7,11,1730},{11,11,446},{141,11,178},{5,10,\n464},{6,10,236},{7,0,276},{7,10,696},{7,10,914},{7,10,1108},{7,10,1448},{9,10,15\n},{9,10,564},{10,10,14},{12,10,565},{13,10,449},{14,10,53},{15,10,13},{16,10,64}\n,{145,10,41},{4,0,892},{133,0,770},{6,10,1767},{12,10,194},{145,10,107},{135,0,\n158},{5,10,840},{138,11,608},{134,0,1432},{138,11,250},{8,11,794},{9,11,400},{10\n,11,298},{142,11,228},{151,0,25},{7,11,1131},{135,11,1468},{135,0,2001},{9,10,\n642},{11,10,236},{142,10,193},{4,10,68},{5,10,634},{6,10,386},{7,10,794},{8,10,\n273},{9,10,563},{10,10,105},{10,10,171},{11,10,94},{139,10,354},{136,11,724},{\n132,0,478},{11,11,512},{13,11,205},{19,11,30},{22,11,36},{151,11,19},{7,0,1461},\n{140,0,91},{6,11,190},{7,11,768},{135,11,1170},{4,0,602},{4,10,95},{7,10,416},{8\n,0,211},{139,10,830},{7,10,731},{13,10,20},{143,10,11},{6,0,1068},{135,0,1872},{\n4,0,13},{5,0,567},{7,0,1498},{7,11,1023},{9,0,124},{11,0,521},{140,0,405},{135,0\n,1006},{132,0,735},{138,0,812},{4,0,170},{135,0,323},{6,11,137},{9,11,75},{9,11,\n253},{10,11,194},{138,11,444},{5,0,304},{5,10,864},{7,0,1403},{10,10,648},{11,10\n,671},{143,10,46},{135,11,1180},{133,10,928},{4,0,148},{133,0,742},{11,10,986},{\n140,10,682},{133,0,523},{135,11,1743},{7,0,730},{8,10,44},{9,10,884},{10,10,580}\n,{11,10,399},{11,10,894},{15,10,122},{18,0,144},{147,0,61},{5,11,760},{7,11,542}\n,{8,11,135},{136,11,496},{136,0,981},{133,0,111},{10,0,132},{11,0,191},{11,0,358\n},{139,0,460},{7,11,319},{7,11,355},{7,11,763},{10,11,389},{145,11,43},{134,0,\n890},{134,0,1420},{136,11,557},{133,10,518},{133,0,444},{135,0,1787},{135,10,\n1852},{8,0,123},{15,0,6},{144,0,7},{6,0,2041},{10,11,38},{139,11,784},{136,0,932\n},{5,0,937},{135,0,100},{4,11,58},{5,11,286},{6,0,995},{6,11,319},{7,11,402},{7,\n11,1254},{7,11,1903},{8,11,356},{140,11,408},{4,11,389},{9,11,181},{9,11,255},{\n10,11,8},{10,11,29},{10,11,816},{11,11,311},{11,11,561},{12,11,67},{141,11,181},\n{138,0,255},{4,10,934},{5,0,138},{136,10,610},{4,0,965},{10,0,863},{138,0,898},{\n10,10,804},{138,10,832},{8,10,96},{9,10,36},{10,10,607},{11,10,423},{11,10,442},\n{12,0,631},{12,10,309},{14,10,199},{15,10,90},{145,10,110},{134,0,1394},{4,0,652\n},{8,0,320},{9,10,13},{9,10,398},{9,10,727},{10,10,75},{10,10,184},{10,10,230},{\n10,10,564},{10,10,569},{11,10,973},{12,10,70},{12,10,189},{13,10,57},{13,10,257}\n,{22,0,6},{150,0,16},{6,0,897},{134,0,1333},{4,0,692},{133,0,321},{133,11,373},{\n135,0,922},{5,0,619},{133,0,698},{137,10,631},{5,10,345},{135,10,1016},{9,0,957}\n,{9,0,1018},{12,0,828},{12,0,844},{12,0,897},{12,0,901},{12,0,943},{15,0,180},{\n18,0,197},{18,0,200},{18,0,213},{18,0,214},{146,0,226},{5,0,917},{134,0,1659},{\n135,0,1100},{134,0,1173},{134,0,1930},{5,0,251},{5,0,956},{8,0,268},{9,0,214},{\n146,0,142},{133,10,673},{137,10,850},{4,10,287},{133,10,1018},{132,11,672},{5,0,\n346},{5,0,711},{8,0,390},{11,11,752},{139,11,885},{5,10,34},{10,10,724},{12,10,\n444},{13,10,354},{18,10,32},{23,10,24},{23,10,31},{152,10,5},{4,11,710},{134,11,\n606},{134,0,744},{134,10,382},{133,11,145},{4,10,329},{7,11,884},{140,11,124},{4\n,11,467},{5,11,405},{134,11,544},{9,10,846},{138,10,827},{133,0,624},{9,11,372},\n{15,11,2},{19,11,10},{147,11,18},{4,11,387},{135,11,1288},{5,0,783},{7,0,1998},{\n135,0,2047},{132,10,906},{136,10,366},{135,11,550},{4,10,123},{4,10,649},{5,10,\n605},{7,10,1509},{136,10,36},{134,0,1125},{132,0,594},{133,10,767},{135,11,1227}\n,{136,11,467},{4,11,576},{135,11,1263},{4,0,268},{7,0,1534},{135,11,1534},{4,10,\n273},{5,10,658},{5,10,995},{5,11,919},{134,11,1673},{133,0,563},{134,10,72},{135\n,10,1345},{4,11,82},{5,11,333},{5,11,904},{6,11,207},{7,11,325},{7,11,1726},{8,\n11,101},{10,11,778},{139,11,220},{5,0,37},{5,10,589},{6,0,39},{6,0,451},{7,0,218\n},{7,0,667},{7,0,1166},{7,0,1687},{8,0,662},{144,0,2},{134,0,1332},{133,11,903},\n{134,0,508},{5,10,117},{6,10,514},{6,10,541},{7,10,1164},{7,10,1436},{8,10,220},\n{8,10,648},{10,10,688},{11,10,560},{140,11,147},{6,11,555},{135,11,485},{133,10,\n686},{7,0,453},{7,0,635},{7,0,796},{8,0,331},{9,0,330},{9,0,865},{10,0,119},{10,\n0,235},{11,0,111},{11,0,129},{11,0,240},{12,0,31},{12,0,66},{12,0,222},{12,0,269\n},{12,0,599},{12,0,684},{12,0,689},{12,0,691},{142,0,345},{135,0,1834},{4,11,705\n},{7,11,615},{138,11,251},{136,11,345},{137,0,527},{6,0,98},{7,0,702},{135,0,991\n},{7,10,196},{10,10,765},{11,0,576},{11,10,347},{11,10,552},{11,10,790},{12,10,\n263},{13,10,246},{13,10,270},{13,10,395},{14,0,74},{14,10,176},{14,10,190},{14,\n10,398},{14,10,412},{15,10,32},{15,10,63},{16,10,88},{147,10,105},{134,11,90},{\n13,0,84},{141,0,122},{6,0,37},{7,0,299},{7,0,1666},{8,0,195},{8,0,316},{9,0,178}\n,{9,0,276},{9,0,339},{9,0,536},{10,0,102},{10,0,362},{10,0,785},{11,0,55},{11,0,\n149},{11,0,773},{13,0,416},{13,0,419},{14,0,38},{14,0,41},{142,0,210},{5,10,381}\n,{135,10,1792},{7,11,813},{12,11,497},{141,11,56},{7,10,616},{138,10,413},{133,0\n,645},{6,11,125},{135,11,1277},{132,0,290},{6,0,70},{7,0,1292},{10,0,762},{139,0\n,288},{6,10,120},{7,10,1188},{7,10,1710},{8,10,286},{9,10,667},{11,10,592},{139,\n10,730},{135,11,1784},{7,0,1315},{135,11,1315},{134,0,1955},{135,10,1146},{7,0,\n131},{7,0,422},{8,0,210},{140,0,573},{4,10,352},{135,10,687},{139,0,797},{143,0,\n38},{14,0,179},{15,0,151},{150,0,11},{4,10,192},{5,10,49},{6,10,200},{6,10,293},\n{6,10,1696},{135,0,488},{132,0,936},{135,11,703},{6,11,160},{7,11,1106},{9,11,\n770},{10,11,618},{11,11,112},{140,11,413},{5,0,453},{134,0,441},{135,0,595},{132\n,10,650},{132,10,147},{6,0,991},{6,0,1182},{12,11,271},{145,11,109},{133,10,934}\n,{140,11,221},{132,0,653},{7,0,505},{135,0,523},{134,0,903},{135,11,479},{7,11,\n304},{9,11,646},{9,11,862},{10,11,262},{11,11,696},{12,11,208},{15,11,79},{147,\n11,108},{146,0,80},{135,11,981},{142,0,432},{132,0,314},{137,11,152},{7,0,1368},\n{8,0,232},{8,0,361},{10,0,682},{138,0,742},{135,11,1586},{4,11,434},{9,0,534},{\n11,11,663},{12,11,210},{13,11,166},{13,11,310},{14,11,373},{147,11,43},{7,11,\n1091},{135,11,1765},{6,11,550},{135,11,652},{137,0,27},{142,0,12},{4,10,637},{5,\n11,553},{7,11,766},{138,11,824},{7,11,737},{8,11,298},{136,11,452},{7,0,736},{\n139,0,264},{134,0,1657},{133,11,292},{138,11,135},{6,0,844},{134,0,1117},{135,0,\n127},{9,10,867},{138,10,837},{6,0,1184},{134,0,1208},{134,0,1294},{136,0,364},{6\n,0,1415},{6,10,170},{7,0,1334},{7,11,393},{8,10,395},{8,10,487},{10,11,603},{11,\n0,125},{11,11,206},{141,10,147},{137,11,748},{4,11,912},{137,11,232},{4,10,535},\n{136,10,618},{137,0,792},{7,11,1973},{136,11,716},{135,11,98},{5,0,909},{9,0,849\n},{138,0,805},{4,0,630},{132,0,699},{5,11,733},{14,11,103},{150,10,23},{12,11,\n158},{18,11,8},{19,11,62},{20,11,6},{22,11,4},{23,11,2},{151,11,9},{132,0,968},{\n132,10,778},{132,10,46},{5,10,811},{6,10,1679},{6,10,1714},{135,10,2032},{6,0,\n1446},{7,10,1458},{9,10,407},{139,10,15},{6,10,34},{7,0,206},{7,0,397},{7,0,621}\n,{7,0,640},{7,10,1089},{8,0,124},{8,0,619},{8,10,708},{8,10,721},{9,0,305},{9,0,\n643},{9,10,363},{10,0,264},{10,0,628},{11,0,40},{12,0,349},{13,0,134},{13,0,295}\n,{14,0,155},{15,0,120},{18,0,105},{148,10,98},{4,0,262},{5,0,641},{135,0,342},{\n137,11,72},{4,0,99},{6,0,250},{6,0,346},{8,0,127},{138,0,81},{132,0,915},{5,0,75\n},{9,0,517},{10,0,470},{12,0,155},{141,0,224},{132,10,462},{11,11,600},{11,11,\n670},{141,11,245},{142,0,83},{5,10,73},{6,10,23},{134,10,338},{6,0,1031},{139,11\n,923},{7,11,164},{7,11,1571},{9,11,107},{140,11,225},{134,0,1470},{133,0,954},{6\n,0,304},{8,0,418},{10,0,345},{11,0,341},{139,0,675},{9,0,410},{139,0,425},{4,11,\n27},{5,11,484},{5,11,510},{6,11,434},{7,11,1000},{7,11,1098},{8,11,2},{136,11,\n200},{134,0,734},{140,11,257},{7,10,725},{8,10,498},{139,10,268},{134,0,1822},{\n135,0,1798},{135,10,773},{132,11,460},{4,11,932},{133,11,891},{134,0,14},{132,10\n,583},{7,10,1462},{8,11,625},{139,10,659},{5,0,113},{5,10,220},{6,0,243},{6,0,\n1708},{7,0,1865},{11,0,161},{16,0,37},{145,0,99},{134,11,76},{5,11,461},{135,11,\n1925},{140,0,69},{8,11,92},{137,11,221},{139,10,803},{132,10,544},{4,0,274},{134\n,0,922},{132,0,541},{5,0,627},{6,10,437},{6,10,564},{11,10,181},{141,10,183},{\n135,10,1192},{4,11,763},{135,0,166},{133,11,253},{134,0,849},{9,11,73},{10,11,\n110},{14,11,185},{145,11,119},{5,11,212},{12,11,35},{141,11,382},{133,0,717},{\n137,0,304},{136,0,600},{133,0,654},{6,0,273},{10,0,188},{13,0,377},{146,0,77},{4\n,10,790},{5,10,273},{134,10,394},{132,0,543},{135,0,410},{11,0,98},{11,0,524},{\n141,0,87},{132,0,941},{135,11,1175},{4,0,250},{6,10,127},{7,0,1612},{7,10,1511},\n{8,10,613},{11,0,186},{12,0,133},{12,10,495},{12,10,586},{12,10,660},{12,10,668}\n,{14,10,385},{15,10,118},{17,10,20},{146,10,98},{5,11,816},{134,0,1785},{134,0,\n1339},{6,10,230},{7,0,961},{7,0,1085},{7,0,1727},{7,11,1727},{136,0,462},{7,10,\n1954},{137,0,636},{132,0,780},{5,11,869},{5,11,968},{6,11,1626},{8,11,734},{136,\n11,784},{4,11,542},{6,11,1716},{6,11,1727},{7,11,1082},{7,11,1545},{8,11,56},{8,\n11,118},{8,11,412},{8,11,564},{9,11,888},{9,11,908},{10,11,50},{10,11,423},{11,\n11,685},{11,11,697},{11,11,933},{12,11,299},{13,11,126},{13,11,136},{13,11,170},\n{141,11,190},{134,11,226},{4,11,232},{9,11,202},{10,11,474},{140,11,433},{137,11\n,500},{5,0,529},{136,10,68},{132,10,654},{4,10,156},{7,10,998},{7,10,1045},{7,10\n,1860},{9,10,48},{9,10,692},{11,10,419},{139,10,602},{6,11,108},{7,0,1276},{7,11\n,1003},{7,11,1181},{8,0,474},{8,11,343},{137,0,652},{7,11,1264},{7,11,1678},{11,\n11,945},{12,11,341},{12,11,471},{140,11,569},{134,11,1712},{5,0,948},{12,0,468},\n{19,0,96},{148,0,24},{4,11,133},{7,11,711},{7,11,1298},{7,11,1585},{135,11,1929}\n,{6,0,753},{140,0,657},{139,0,941},{6,11,99},{7,11,1808},{145,11,57},{6,11,574},\n{7,11,428},{7,11,1250},{10,11,669},{11,11,485},{11,11,840},{12,11,300},{142,11,\n250},{4,0,532},{5,0,706},{135,0,662},{5,0,837},{6,0,1651},{139,0,985},{7,0,1861}\n,{9,10,197},{10,10,300},{12,10,473},{13,10,90},{141,10,405},{137,11,252},{6,11,\n323},{135,11,1564},{4,0,330},{4,0,863},{7,0,933},{7,0,2012},{7,11,461},{8,0,292}\n,{8,11,775},{138,11,435},{132,10,606},{4,11,655},{7,11,850},{17,11,75},{146,11,\n137},{135,0,767},{7,10,1978},{136,10,676},{132,0,641},{135,11,1559},{134,0,1233}\n,{137,0,242},{4,10,361},{5,10,315},{145,0,114},{137,0,883},{132,10,461},{138,0,\n274},{134,0,2008},{134,0,1794},{4,0,703},{135,0,207},{4,10,472},{140,0,285},{132\n,0,571},{5,0,873},{5,0,960},{8,0,823},{8,11,577},{137,0,881},{7,0,617},{10,0,498\n},{11,0,501},{12,0,16},{140,0,150},{138,10,747},{132,0,431},{133,10,155},{7,10,\n163},{8,10,319},{9,10,402},{10,10,24},{10,10,681},{11,0,283},{11,0,567},{11,10,\n200},{12,10,253},{12,10,410},{142,10,219},{4,11,413},{5,11,677},{8,11,432},{140,\n11,280},{5,10,475},{7,10,1780},{9,0,401},{11,10,297},{11,10,558},{14,10,322},{\n147,10,76},{6,0,781},{9,0,134},{10,0,2},{10,0,27},{10,0,333},{11,0,722},{143,0,1\n},{5,0,33},{6,0,470},{139,0,424},{135,0,2006},{7,10,1956},{140,0,783},{136,0,274\n},{135,0,1882},{132,0,794},{135,0,1848},{5,10,944},{134,10,1769},{6,0,47},{7,0,\n90},{7,0,664},{7,0,830},{7,0,1380},{7,0,2025},{8,0,448},{136,0,828},{132,10,144}\n,{134,0,1199},{4,11,395},{139,11,762},{135,11,1504},{9,0,417},{137,0,493},{9,11,\n174},{10,11,164},{11,11,440},{11,11,841},{143,11,98},{134,11,426},{139,11,1002},\n{134,0,295},{134,0,816},{6,10,247},{137,10,555},{133,0,1019},{4,0,620},{5,11,476\n},{10,10,280},{138,10,797},{139,0,464},{5,11,76},{6,11,458},{6,11,497},{7,11,764\n},{7,11,868},{9,11,658},{10,11,594},{11,11,173},{11,11,566},{12,11,20},{12,11,\n338},{141,11,200},{134,0,208},{4,11,526},{7,11,1029},{135,11,1054},{132,11,636},\n{6,11,233},{7,11,660},{7,11,1124},{17,11,31},{19,11,22},{151,11,14},{5,10,428},{\n138,0,442},{10,0,930},{140,0,778},{6,0,68},{7,0,448},{7,0,1629},{7,0,1769},{7,0,\n1813},{7,10,1717},{8,0,442},{8,0,516},{9,0,710},{10,0,282},{10,0,722},{138,10,\n546},{134,0,1128},{11,0,844},{12,0,104},{140,0,625},{4,11,432},{135,11,824},{138\n,10,189},{133,0,787},{133,10,99},{4,11,279},{7,11,301},{137,11,362},{4,10,397},{\n8,0,491},{136,10,555},{4,11,178},{133,11,399},{134,0,711},{144,0,9},{4,0,403},{5\n,0,441},{7,0,450},{10,0,840},{11,0,101},{12,0,193},{141,0,430},{135,11,1246},{12\n,10,398},{20,10,39},{21,10,11},{150,10,41},{4,10,485},{7,10,353},{135,10,1523},{\n6,10,366},{7,10,1384},{7,10,1601},{135,11,1912},{7,0,396},{7,11,396},{138,0,160}\n,{137,10,282},{134,11,1692},{4,10,157},{5,10,471},{6,11,202},{10,11,448},{11,11,\n208},{12,11,360},{17,11,117},{17,11,118},{18,11,27},{148,11,67},{133,0,679},{137\n,0,326},{136,10,116},{7,11,872},{10,11,516},{139,11,167},{132,11,224},{5,11,546}\n,{7,11,35},{8,11,11},{8,11,12},{9,11,315},{9,11,533},{10,11,802},{11,11,166},{12\n,11,525},{142,11,243},{7,0,1128},{135,11,1920},{5,11,241},{8,11,242},{9,11,451},\n{10,11,667},{11,11,598},{140,11,429},{5,10,160},{6,0,737},{7,10,363},{7,10,589},\n{10,10,170},{141,10,55},{135,0,1796},{142,11,254},{4,0,574},{7,0,350},{7,0,1024}\n,{8,0,338},{9,0,677},{138,0,808},{134,0,1096},{137,11,516},{4,10,108},{4,11,366}\n,{7,0,405},{10,0,491},{139,10,498},{11,11,337},{142,11,303},{134,11,1736},{7,0,\n1081},{140,11,364},{7,10,1005},{140,10,609},{4,10,895},{5,10,772},{135,0,1676},{\n135,0,2037},{6,0,1207},{11,11,916},{142,11,419},{14,11,140},{148,11,41},{6,11,\n331},{136,11,623},{4,10,926},{5,10,983},{9,0,944},{9,0,969},{9,0,1022},{12,0,913\n},{12,0,936},{15,0,177},{143,0,193},{5,0,354},{135,11,506},{8,0,598},{9,0,664},{\n138,0,441},{4,11,640},{133,11,513},{137,0,297},{132,10,538},{6,10,294},{7,10,\n1267},{136,10,624},{7,0,1772},{7,11,1888},{8,11,289},{11,11,45},{12,11,278},{140\n,11,537},{135,10,1325},{138,0,751},{141,0,37},{134,0,1828},{132,10,757},{132,11,\n394},{6,0,257},{135,0,1522},{4,0,582},{7,11,1931},{137,0,191},{7,11,574},{7,11,\n1719},{137,11,145},{132,11,658},{4,11,369},{138,0,790},{9,11,781},{10,11,144},{\n11,11,385},{13,11,161},{13,11,228},{13,11,268},{148,11,107},{8,0,469},{8,11,374}\n,{138,0,47},{6,0,306},{7,0,1140},{7,0,1340},{8,0,133},{138,0,449},{139,0,1011},{\n7,10,1875},{139,10,124},{4,11,344},{6,11,498},{139,11,323},{137,0,299},{132,0,\n837},{133,11,906},{5,0,329},{8,0,260},{138,0,10},{134,0,1320},{4,0,657},{146,0,\n158},{135,0,1191},{152,0,7},{6,0,1939},{8,0,974},{138,0,996},{135,0,1665},{11,11\n,126},{139,11,287},{143,0,8},{14,11,149},{14,11,399},{143,11,57},{5,0,66},{7,0,\n1896},{136,0,288},{5,10,150},{7,0,175},{8,10,603},{9,10,593},{9,10,634},{10,0,\n494},{10,10,173},{11,10,462},{11,10,515},{13,10,216},{13,10,288},{142,10,400},{\n134,0,1643},{136,11,21},{4,0,21},{5,0,91},{5,0,648},{5,0,750},{5,0,781},{6,0,54}\n,{6,0,112},{6,0,402},{6,0,1732},{7,0,315},{7,0,749},{7,0,1427},{7,0,1900},{9,0,\n78},{9,0,508},{10,0,611},{10,0,811},{11,0,510},{11,0,728},{13,0,36},{14,0,39},{\n16,0,83},{17,0,124},{148,0,30},{4,0,668},{136,0,570},{10,0,322},{10,0,719},{139,\n0,407},{135,11,1381},{136,11,193},{12,10,108},{141,10,291},{132,11,616},{136,11,\n692},{8,0,125},{8,0,369},{8,0,524},{10,0,486},{11,0,13},{11,0,381},{11,0,736},{\n11,0,766},{11,0,845},{13,0,114},{13,0,292},{142,0,47},{134,0,1247},{6,0,1684},{6\n,0,1731},{7,0,356},{8,0,54},{8,0,221},{9,0,225},{9,0,356},{10,0,77},{10,0,446},{\n10,0,731},{12,0,404},{141,0,491},{135,10,1777},{4,10,493},{4,11,305},{144,10,55}\n,{4,0,951},{6,0,1809},{6,0,1849},{8,0,846},{8,0,866},{8,0,899},{10,0,896},{12,0,\n694},{142,0,468},{5,11,214},{7,11,603},{8,11,611},{9,11,686},{10,11,88},{11,11,\n459},{11,11,496},{12,11,463},{12,11,590},{13,11,0},{142,11,214},{132,0,411},{4,0\n,80},{133,0,44},{140,11,74},{143,0,31},{6,10,568},{7,0,669},{7,10,1804},{8,10,\n362},{8,10,410},{8,10,830},{9,10,514},{11,10,649},{142,10,157},{6,11,1703},{135,\n0,673},{132,10,625},{134,0,1303},{5,0,299},{135,0,1083},{138,0,704},{6,0,275},{6\n,10,158},{7,0,408},{7,10,129},{7,10,181},{8,10,276},{8,10,377},{10,10,523},{11,\n10,816},{12,10,455},{13,10,303},{142,10,135},{4,0,219},{7,0,367},{7,0,1713},{7,0\n,1761},{9,0,86},{9,0,537},{10,0,165},{12,0,219},{140,0,561},{4,10,1},{4,11,737},\n{6,11,317},{7,10,1143},{7,10,1463},{8,0,216},{9,10,207},{9,10,390},{9,10,467},{\n10,11,98},{11,10,836},{11,11,294},{12,11,60},{12,11,437},{13,11,64},{13,11,380},\n{142,11,430},{6,11,1758},{8,11,520},{9,11,345},{9,11,403},{142,11,350},{5,11,47}\n,{10,11,242},{138,11,579},{5,11,139},{7,11,1168},{138,11,539},{135,0,1319},{4,10\n,295},{4,10,723},{5,10,895},{7,10,1031},{8,10,199},{8,10,340},{9,10,153},{9,10,\n215},{10,10,21},{10,10,59},{10,10,80},{10,10,224},{10,10,838},{11,10,229},{11,10\n,652},{12,10,192},{13,10,146},{142,10,91},{140,0,428},{137,10,51},{133,0,514},{5\n,10,309},{140,10,211},{5,10,125},{6,0,1010},{8,10,77},{138,10,15},{4,0,55},{5,0,\n301},{6,0,571},{142,0,49},{146,0,102},{136,11,370},{4,11,107},{7,11,613},{8,11,\n358},{8,11,439},{8,11,504},{9,11,501},{10,11,383},{139,11,477},{132,11,229},{133\n,0,364},{133,10,439},{4,11,903},{135,11,1816},{11,0,379},{140,10,76},{4,0,76},{4\n,0,971},{7,0,1550},{9,0,306},{9,0,430},{9,0,663},{10,0,683},{10,0,921},{11,0,427\n},{11,0,753},{12,0,334},{12,0,442},{14,0,258},{14,0,366},{143,0,131},{137,0,52},\n{4,11,47},{6,11,373},{7,11,452},{7,11,543},{7,11,1714},{7,11,1856},{9,11,6},{11,\n11,257},{139,11,391},{4,10,8},{7,10,1152},{7,10,1153},{7,10,1715},{9,10,374},{10\n,10,478},{139,10,648},{4,11,785},{133,11,368},{135,10,1099},{135,11,860},{5,11,\n980},{134,11,1754},{134,0,1258},{6,0,1058},{6,0,1359},{7,11,536},{7,11,1331},{\n136,11,143},{4,0,656},{135,0,779},{136,10,87},{5,11,19},{6,11,533},{146,11,126},\n{7,0,144},{138,10,438},{5,11,395},{5,11,951},{134,11,1776},{135,0,1373},{7,0,554\n},{7,0,605},{141,0,10},{4,10,69},{5,10,122},{9,10,656},{138,10,464},{5,10,849},{\n134,10,1633},{5,0,838},{5,0,841},{134,0,1649},{133,0,1012},{139,10,499},{7,10,\n476},{7,10,1592},{138,10,87},{6,0,251},{7,0,365},{7,0,1357},{7,0,1497},{8,0,154}\n,{141,0,281},{132,11,441},{132,11,695},{7,11,497},{9,11,387},{147,11,81},{133,0,\n340},{14,10,283},{142,11,283},{134,0,810},{135,11,1894},{139,0,495},{5,11,284},{\n6,11,49},{6,11,350},{7,11,1},{7,11,377},{7,11,1693},{8,11,18},{8,11,678},{9,11,\n161},{9,11,585},{9,11,671},{9,11,839},{11,11,912},{141,11,427},{5,10,859},{7,10,\n1160},{8,10,107},{9,10,291},{9,10,439},{10,10,663},{11,10,609},{140,10,197},{8,0\n,261},{9,0,144},{9,0,466},{10,0,370},{12,0,470},{13,0,144},{142,0,348},{137,0,\n897},{6,0,248},{9,0,546},{10,0,535},{11,0,681},{141,0,135},{4,0,358},{135,0,1496\n},{134,0,567},{136,0,445},{4,10,117},{6,10,372},{7,10,1905},{142,10,323},{4,10,\n722},{139,10,471},{6,0,697},{134,0,996},{7,11,2007},{9,11,101},{9,11,450},{10,11\n,66},{10,11,842},{11,11,536},{140,11,587},{132,0,577},{134,0,1336},{9,10,5},{12,\n10,216},{12,10,294},{12,10,298},{12,10,400},{12,10,518},{13,10,229},{143,10,139}\n,{6,0,174},{138,0,917},{134,10,1774},{5,10,12},{7,10,375},{9,10,88},{9,10,438},{\n11,10,270},{139,11,62},{134,11,1766},{6,11,0},{7,10,816},{7,10,1241},{7,11,84},{\n9,10,283},{9,10,520},{10,10,213},{10,10,307},{10,10,463},{10,10,671},{10,10,746}\n,{11,10,401},{11,10,794},{11,11,895},{12,10,517},{17,11,11},{18,10,107},{147,10,\n115},{5,0,878},{133,0,972},{6,11,1665},{7,11,256},{7,11,1388},{138,11,499},{4,10\n,258},{136,10,639},{4,11,22},{5,11,10},{6,10,22},{7,10,903},{7,10,1963},{7,11,\n848},{8,11,97},{138,10,577},{5,10,681},{136,10,782},{133,11,481},{132,0,351},{4,\n10,664},{5,10,804},{139,10,1013},{6,11,134},{7,11,437},{7,11,959},{9,11,37},{14,\n11,285},{14,11,371},{144,11,60},{7,11,486},{8,11,155},{11,11,93},{140,11,164},{\n132,0,286},{7,0,438},{7,0,627},{7,0,1516},{8,0,40},{9,0,56},{9,0,294},{10,0,30},\n{11,0,969},{11,0,995},{146,0,148},{5,11,591},{135,11,337},{134,0,1950},{133,10,\n32},{138,11,500},{5,11,380},{5,11,650},{136,11,310},{4,11,364},{7,11,1156},{7,11\n,1187},{137,11,409},{4,0,738},{134,11,482},{4,11,781},{6,11,487},{7,11,926},{8,\n11,263},{139,11,500},{135,11,418},{4,10,289},{6,0,2047},{7,10,629},{7,10,1698},{\n7,10,1711},{10,0,969},{140,10,215},{6,10,450},{136,10,109},{134,0,818},{136,10,\n705},{133,0,866},{4,11,94},{135,11,1265},{132,11,417},{134,0,1467},{135,10,1238}\n,{4,0,972},{6,0,1851},{134,0,1857},{134,0,355},{133,0,116},{132,0,457},{135,11,\n1411},{4,11,408},{4,11,741},{135,11,500},{134,10,26},{142,11,137},{5,0,527},{6,0\n,189},{7,0,859},{136,0,267},{11,0,104},{11,0,554},{15,0,60},{143,0,125},{134,0,\n1613},{4,10,414},{5,10,467},{9,10,654},{10,10,451},{12,10,59},{141,10,375},{135,\n10,17},{134,0,116},{135,11,541},{135,10,955},{6,11,73},{135,11,177},{133,11,576}\n,{134,0,886},{133,0,487},{4,0,86},{5,0,667},{5,0,753},{6,0,316},{6,0,455},{135,0\n,946},{142,11,231},{150,0,45},{134,0,863},{134,0,1953},{6,10,280},{10,10,502},{\n11,10,344},{140,10,38},{4,0,79},{7,0,1773},{10,0,450},{11,0,589},{13,0,332},{13,\n0,493},{14,0,183},{14,0,334},{14,0,362},{14,0,368},{14,0,376},{14,0,379},{19,0,\n90},{19,0,103},{19,0,127},{148,0,90},{5,10,45},{7,10,1161},{11,10,448},{11,10,\n880},{13,10,139},{13,10,407},{15,10,16},{17,10,95},{18,10,66},{18,10,88},{18,10,\n123},{149,10,7},{136,10,777},{4,10,410},{135,10,521},{135,10,1778},{135,11,538},\n{142,0,381},{133,11,413},{134,0,1142},{6,0,1189},{136,11,495},{5,0,663},{6,0,\n1962},{134,0,2003},{7,11,54},{8,11,312},{10,11,191},{10,11,614},{140,11,567},{\n132,10,436},{133,0,846},{7,10,1587},{7,10,1707},{10,0,528},{139,0,504},{5,0,378}\n,{8,0,465},{9,0,286},{10,0,185},{10,0,562},{10,0,635},{11,0,31},{11,0,393},{13,0\n,312},{18,0,65},{18,0,96},{147,0,89},{6,11,468},{7,0,899},{7,11,567},{7,11,1478}\n,{8,11,530},{14,0,325},{142,11,290},{7,0,1880},{9,0,680},{139,0,798},{134,0,1770\n},{132,0,648},{150,11,35},{5,0,945},{6,0,1656},{6,0,1787},{7,0,167},{8,0,824},{9\n,0,391},{10,0,375},{139,0,185},{6,11,484},{135,11,822},{134,0,2046},{7,0,1645},{\n8,0,352},{137,0,249},{132,0,152},{6,0,611},{135,0,1733},{6,11,1724},{135,11,2022\n},{133,0,1006},{141,11,96},{5,0,420},{135,0,1449},{146,11,149},{135,0,832},{135,\n10,663},{133,0,351},{5,0,40},{7,0,598},{7,0,1638},{8,0,78},{9,0,166},{9,0,640},{\n9,0,685},{9,0,773},{11,0,215},{13,0,65},{14,0,172},{14,0,317},{145,0,6},{8,0,60}\n,{9,0,343},{139,0,769},{134,0,1354},{132,0,724},{137,0,745},{132,11,474},{7,0,\n1951},{8,0,765},{8,0,772},{140,0,671},{7,0,108},{8,0,219},{8,0,388},{9,0,775},{\n11,0,275},{140,0,464},{137,0,639},{135,10,503},{133,11,366},{5,0,15},{5,11,305},\n{6,0,56},{7,0,1758},{8,0,500},{9,0,730},{9,11,560},{11,0,331},{13,0,150},{13,11,\n208},{142,0,282},{4,10,113},{5,10,163},{5,10,735},{7,10,1009},{9,10,9},{9,10,771\n},{12,10,90},{13,10,138},{13,10,410},{143,10,128},{4,10,324},{138,10,104},{135,\n11,466},{142,11,27},{134,0,1886},{4,11,480},{5,0,205},{6,0,438},{6,11,167},{6,11\n,302},{6,11,1642},{7,11,130},{7,11,656},{7,11,837},{7,11,1547},{7,11,1657},{8,11\n,429},{9,0,711},{9,11,228},{10,11,643},{13,11,289},{13,11,343},{147,11,101},{134\n,0,865},{6,0,2025},{136,0,965},{7,11,278},{10,11,739},{11,11,708},{141,11,348},{\n133,0,534},{135,11,1922},{137,0,691},{4,10,935},{133,10,823},{6,0,443},{9,0,237}\n,{9,0,571},{9,0,695},{10,0,139},{11,0,715},{12,0,417},{141,0,421},{5,10,269},{7,\n10,434},{7,10,891},{8,10,339},{9,10,702},{11,10,594},{11,10,718},{145,10,100},{6\n,0,1555},{7,0,878},{9,10,485},{141,10,264},{134,10,1713},{7,10,1810},{11,10,866}\n,{12,10,103},{141,10,495},{135,10,900},{6,0,1410},{9,11,316},{139,11,256},{4,0,\n995},{135,0,1033},{132,0,578},{10,0,881},{12,0,740},{12,0,743},{140,0,759},{132,\n0,822},{133,0,923},{142,10,143},{135,11,1696},{6,11,363},{7,11,1955},{136,11,725\n},{132,0,924},{133,0,665},{135,10,2029},{135,0,1901},{4,0,265},{6,0,1092},{6,0,\n1417},{7,0,807},{135,0,950},{5,0,93},{12,0,267},{141,0,498},{135,0,1451},{5,11,\n813},{135,11,2046},{5,10,625},{135,10,1617},{135,0,747},{6,0,788},{137,0,828},{5\n,11,712},{7,0,184},{7,11,1855},{8,10,425},{8,10,693},{9,10,720},{10,10,380},{10,\n10,638},{11,0,307},{11,0,400},{11,10,473},{11,11,17},{12,10,61},{13,11,321},{15,\n0,130},{144,11,67},{135,0,198},{6,11,320},{7,11,781},{7,11,1921},{9,11,55},{10,\n11,186},{10,11,273},{10,11,664},{10,11,801},{11,11,996},{11,11,997},{13,11,157},\n{142,11,170},{136,11,271},{135,0,994},{7,11,103},{7,11,863},{11,11,184},{14,11,\n299},{145,11,62},{11,10,551},{142,10,159},{5,0,233},{5,0,320},{6,0,140},{8,0,295\n},{8,0,615},{136,11,615},{133,0,978},{4,0,905},{6,0,1701},{137,0,843},{132,10,\n168},{4,0,974},{8,0,850},{12,0,709},{12,0,768},{140,0,786},{135,10,91},{152,0,6}\n,{138,10,532},{135,10,1884},{132,0,509},{6,0,1307},{135,0,273},{5,11,77},{7,11,\n1455},{10,11,843},{19,11,73},{150,11,5},{132,11,458},{135,11,1420},{6,11,109},{\n138,11,382},{6,0,201},{6,11,330},{7,10,70},{7,11,1084},{10,10,240},{11,11,142},{\n147,10,93},{7,0,1041},{140,11,328},{133,11,354},{134,0,1040},{133,0,693},{134,0,\n774},{139,0,234},{132,0,336},{7,0,1399},{139,10,392},{20,0,22},{148,11,22},{5,0,\n802},{7,0,2021},{136,0,805},{5,0,167},{5,0,899},{6,0,410},{137,0,777},{137,0,789\n},{134,0,1705},{7,10,655},{135,10,1844},{4,10,145},{6,10,176},{7,10,395},{137,10\n,562},{132,10,501},{135,0,10},{5,0,11},{6,0,117},{6,0,485},{6,10,509},{7,0,1133}\n,{9,0,582},{9,0,594},{10,0,82},{11,0,21},{11,0,818},{12,0,535},{13,0,86},{20,0,\n91},{151,0,13},{4,0,264},{7,0,1067},{8,0,204},{8,0,385},{139,0,953},{139,11,737}\n,{138,0,56},{134,0,1917},{133,0,470},{10,11,657},{14,11,297},{142,11,361},{135,\n11,412},{7,0,1198},{7,11,1198},{8,11,556},{14,11,123},{14,11,192},{143,11,27},{7\n,11,1985},{14,11,146},{15,11,42},{16,11,23},{17,11,86},{146,11,17},{8,11,122},{\n139,0,1015},{4,10,114},{9,10,492},{13,10,462},{142,10,215},{4,10,77},{5,10,361},\n{6,10,139},{6,10,401},{6,10,404},{7,10,413},{7,10,715},{7,10,1716},{11,10,279},{\n12,10,179},{12,10,258},{13,10,244},{142,10,358},{134,10,1717},{7,10,1061},{8,10,\n82},{11,10,250},{12,10,420},{141,10,184},{133,0,715},{135,10,724},{9,0,919},{9,0\n,922},{9,0,927},{9,0,933},{9,0,962},{9,0,1000},{9,0,1002},{9,0,1021},{12,0,890},\n{12,0,907},{12,0,930},{15,0,207},{15,0,228},{15,0,238},{149,0,61},{8,0,794},{9,0\n,400},{10,0,298},{142,0,228},{5,11,430},{5,11,932},{6,11,131},{7,11,417},{9,11,\n522},{11,11,314},{141,11,390},{132,0,867},{4,11,507},{136,0,724},{137,11,261},{4\n,11,343},{133,11,511},{6,0,190},{7,0,768},{135,0,1170},{6,10,513},{135,10,1052},\n{7,11,455},{138,11,591},{134,0,1066},{137,10,899},{14,0,67},{147,0,60},{4,0,948}\n,{18,0,174},{146,0,176},{135,0,1023},{7,10,1417},{12,10,382},{17,10,48},{152,10,\n12},{134,11,575},{132,0,764},{6,10,545},{7,10,565},{7,10,1669},{10,10,114},{11,\n10,642},{140,10,618},{6,0,137},{9,0,75},{9,0,253},{10,0,194},{138,0,444},{4,0,\n756},{133,10,5},{7,10,192},{136,0,1008},{132,0,842},{8,10,763},{11,0,643},{140,0\n,115},{139,0,67},{133,10,759},{4,0,821},{5,0,760},{7,0,542},{7,11,580},{8,0,135}\n,{136,0,496},{7,10,370},{7,10,1007},{7,10,1177},{135,10,1565},{135,10,1237},{140\n,0,736},{7,0,319},{7,0,355},{7,0,763},{10,0,389},{145,0,43},{8,11,333},{138,11,\n182},{4,10,87},{5,10,250},{141,10,298},{138,0,786},{134,0,2044},{8,11,330},{140,\n11,477},{135,11,1338},{132,11,125},{134,0,1030},{134,0,1083},{132,11,721},{135,\n10,814},{7,11,776},{8,11,145},{147,11,56},{134,0,1226},{4,10,57},{7,10,1195},{7,\n10,1438},{7,10,1548},{7,10,1835},{7,10,1904},{9,10,757},{10,10,604},{139,10,519}\n,{7,11,792},{8,11,147},{10,11,821},{139,11,1021},{137,11,797},{4,0,58},{5,0,286}\n,{6,0,319},{7,0,402},{7,0,1254},{7,0,1903},{8,0,356},{140,0,408},{4,0,389},{4,0,\n815},{9,0,181},{9,0,255},{10,0,8},{10,0,29},{10,0,816},{11,0,311},{11,0,561},{12\n,0,67},{141,0,181},{7,11,1472},{135,11,1554},{7,11,1071},{7,11,1541},{7,11,1767}\n,{7,11,1806},{7,11,1999},{9,11,248},{10,11,400},{11,11,162},{11,11,178},{11,11,\n242},{12,11,605},{15,11,26},{144,11,44},{5,11,168},{5,11,930},{8,11,74},{9,11,\n623},{12,11,500},{12,11,579},{13,11,41},{143,11,93},{6,11,220},{7,11,1101},{141,\n11,105},{4,10,209},{5,0,474},{7,0,507},{7,10,902},{135,11,507},{132,0,427},{6,0,\n413},{7,10,335},{7,10,1437},{7,10,1668},{8,10,553},{8,10,652},{8,10,656},{9,10,\n558},{11,10,743},{149,10,18},{132,0,730},{6,11,19},{7,11,1413},{139,11,428},{133\n,0,373},{132,10,559},{7,11,96},{8,11,401},{137,11,896},{5,10,1017},{7,0,799},{7,\n0,1972},{138,10,511},{135,0,1793},{7,11,1961},{7,11,1965},{8,11,702},{136,11,750\n},{8,11,150},{8,11,737},{140,11,366},{132,0,322},{133,10,709},{8,11,800},{9,11,\n148},{9,11,872},{9,11,890},{11,11,309},{11,11,1001},{13,11,267},{141,11,323},{\n134,10,1745},{7,0,290},{136,10,206},{7,0,1651},{145,0,89},{139,0,2},{132,0,672},\n{6,0,1860},{8,0,905},{10,0,844},{10,0,846},{10,0,858},{12,0,699},{12,0,746},{140\n,0,772},{135,11,424},{133,11,547},{133,0,737},{5,11,490},{6,11,615},{6,11,620},{\n135,11,683},{6,0,746},{134,0,1612},{132,10,776},{9,11,385},{149,11,17},{133,0,\n145},{135,10,1272},{7,0,884},{140,0,124},{4,0,387},{135,0,1288},{5,11,133},{136,\n10,406},{136,11,187},{6,0,679},{8,11,8},{138,11,0},{135,0,550},{135,11,798},{136\n,11,685},{7,11,1086},{145,11,46},{8,10,175},{10,10,168},{138,10,573},{135,0,1305\n},{4,0,576},{135,0,1263},{6,0,686},{134,0,1563},{134,0,607},{5,0,919},{134,0,\n1673},{148,0,37},{8,11,774},{10,11,670},{140,11,51},{133,10,784},{139,10,882},{4\n,0,82},{5,0,333},{5,0,904},{6,0,207},{7,0,325},{7,0,1726},{8,0,101},{10,0,778},{\n139,0,220},{135,11,371},{132,0,958},{133,0,903},{4,11,127},{5,11,350},{6,11,356}\n,{8,11,426},{9,11,572},{10,11,247},{139,11,312},{140,0,147},{6,11,59},{7,11,885}\n,{9,11,603},{141,11,397},{9,10,14},{9,10,441},{10,0,367},{139,10,9},{11,10,966},\n{12,10,287},{13,10,342},{13,10,402},{15,10,110},{143,10,163},{134,0,690},{132,0,\n705},{7,10,1428},{7,10,1640},{7,10,1867},{9,0,651},{9,10,169},{9,10,182},{9,10,\n367},{9,10,478},{9,10,506},{9,10,551},{9,10,557},{9,10,648},{9,10,697},{9,10,705\n},{9,10,725},{9,10,787},{9,10,794},{10,10,198},{10,10,214},{10,10,267},{10,10,\n275},{10,10,456},{10,10,551},{10,10,561},{10,10,613},{10,10,627},{10,10,668},{10\n,10,675},{10,10,691},{10,10,695},{10,10,707},{10,10,715},{11,0,971},{11,10,183},\n{11,10,201},{11,10,262},{11,10,352},{11,10,439},{11,10,493},{11,10,572},{11,10,\n591},{11,10,608},{11,10,611},{11,10,646},{11,10,674},{11,10,711},{11,10,751},{11\n,10,761},{11,10,776},{11,10,785},{11,10,850},{11,10,853},{11,10,862},{11,10,865}\n,{11,10,868},{11,10,875},{11,10,898},{11,10,902},{11,10,903},{11,10,910},{11,10,\n932},{11,10,942},{11,10,957},{11,10,967},{11,10,972},{12,10,148},{12,10,195},{12\n,10,220},{12,10,237},{12,10,318},{12,10,339},{12,10,393},{12,10,445},{12,10,450}\n,{12,10,474},{12,10,505},{12,10,509},{12,10,533},{12,10,591},{12,10,594},{12,10,\n597},{12,10,621},{12,10,633},{12,10,642},{13,0,273},{13,10,59},{13,10,60},{13,10\n,145},{13,10,239},{13,10,250},{13,10,329},{13,10,344},{13,10,365},{13,10,372},{\n13,10,387},{13,10,403},{13,10,414},{13,10,456},{13,10,470},{13,10,478},{13,10,\n483},{13,10,489},{14,10,55},{14,10,57},{14,10,81},{14,10,90},{14,10,148},{14,10,\n239},{14,10,266},{14,10,321},{14,10,326},{14,10,327},{14,10,330},{14,10,347},{14\n,10,355},{14,10,401},{14,10,404},{14,10,411},{14,10,414},{14,10,416},{14,10,420}\n,{15,10,61},{15,10,74},{15,10,87},{15,10,88},{15,10,94},{15,10,96},{15,10,116},{\n15,10,149},{15,10,154},{16,10,50},{16,10,63},{16,10,73},{17,10,2},{17,10,66},{17\n,10,92},{17,10,103},{17,10,112},{17,10,120},{18,10,50},{18,10,54},{18,10,82},{18\n,10,86},{18,10,90},{18,10,111},{18,10,115},{18,10,156},{19,10,40},{19,10,79},{20\n,10,78},{149,10,22},{5,10,161},{7,0,887},{135,10,839},{142,11,98},{134,0,90},{\n138,11,356},{135,11,441},{6,11,111},{7,11,4},{8,11,163},{8,11,776},{138,11,566},\n{134,0,908},{134,0,1261},{7,0,813},{12,0,497},{141,0,56},{134,0,1235},{135,0,429\n},{135,11,1994},{138,0,904},{6,0,125},{7,0,1277},{137,0,772},{151,0,12},{4,0,841\n},{5,0,386},{133,11,386},{5,11,297},{135,11,1038},{6,0,860},{6,0,1069},{135,11,\n309},{136,0,946},{135,10,1814},{141,11,418},{136,11,363},{10,0,768},{139,0,787},\n{22,11,30},{150,11,33},{6,0,160},{7,0,1106},{9,0,770},{11,0,112},{140,0,413},{11\n,11,216},{139,11,340},{136,10,139},{135,11,1390},{135,11,808},{132,11,280},{7,10\n,643},{8,10,236},{12,0,271},{145,0,109},{140,11,54},{4,11,421},{133,11,548},{11,\n0,719},{12,0,36},{141,0,337},{7,0,581},{9,0,644},{137,0,699},{11,11,511},{13,11,\n394},{14,11,298},{14,11,318},{146,11,103},{7,0,304},{9,0,646},{9,0,862},{11,0,\n696},{12,0,208},{15,0,79},{147,0,108},{4,0,631},{7,0,1126},{135,0,1536},{135,11,\n1527},{8,0,880},{10,0,869},{138,0,913},{5,10,54},{6,11,254},{7,0,1513},{9,11,109\n},{138,11,103},{135,0,981},{133,11,729},{132,10,744},{132,0,434},{134,0,550},{6,\n11,1630},{7,0,930},{10,0,476},{10,10,402},{13,0,452},{18,10,55},{147,0,104},{5,0\n,553},{138,0,824},{136,0,452},{8,0,151},{137,10,624},{132,10,572},{132,0,772},{\n133,11,671},{133,0,292},{138,0,135},{132,11,889},{140,11,207},{6,10,43},{7,10,38\n},{8,10,248},{9,0,504},{138,10,513},{6,0,1089},{135,11,1910},{4,11,627},{133,11,\n775},{135,0,783},{133,10,766},{133,10,363},{7,0,387},{135,11,387},{7,0,393},{7,\n11,202},{10,0,603},{11,0,206},{11,11,362},{11,11,948},{140,11,388},{6,11,507},{7\n,11,451},{8,11,389},{12,11,490},{13,11,16},{13,11,215},{13,11,351},{18,11,132},{\n147,11,125},{4,0,912},{7,11,841},{137,0,232},{6,10,258},{140,10,409},{5,10,249},\n{148,10,82},{136,11,566},{6,0,977},{135,11,1214},{7,0,1973},{136,0,716},{135,0,\n98},{133,0,733},{5,11,912},{134,11,1695},{5,10,393},{6,10,378},{7,10,1981},{9,10\n,32},{9,10,591},{10,10,685},{10,10,741},{142,10,382},{133,10,788},{7,10,1968},{\n10,0,19},{11,0,911},{141,10,509},{5,0,668},{5,11,236},{6,11,572},{8,11,492},{11,\n11,618},{144,11,56},{135,11,1789},{4,0,360},{5,0,635},{5,0,700},{5,10,58},{5,10,\n171},{5,10,683},{6,10,291},{6,10,566},{7,10,1650},{11,10,523},{12,10,273},{12,10\n,303},{15,10,39},{143,10,111},{133,0,901},{134,10,589},{5,11,190},{136,11,318},{\n140,0,656},{7,0,726},{152,0,9},{4,10,917},{133,10,1005},{135,10,1598},{134,11,\n491},{4,10,919},{133,11,434},{137,0,72},{6,0,1269},{6,0,1566},{134,0,1621},{4,10\n,255},{5,10,302},{6,10,132},{7,10,128},{7,10,283},{7,10,1299},{9,0,463},{10,0,\n595},{10,10,52},{10,10,514},{11,10,925},{13,10,92},{142,10,309},{135,0,1454},{\n134,0,1287},{9,10,173},{11,0,600},{141,0,245},{136,0,989},{7,0,164},{7,0,1571},{\n9,0,107},{140,0,225},{6,0,1061},{141,10,442},{4,0,27},{5,0,484},{5,0,510},{6,0,\n434},{7,0,1000},{7,0,1098},{136,0,2},{7,11,85},{7,11,247},{8,11,585},{10,11,163}\n,{138,11,316},{11,11,103},{142,11,0},{134,0,1127},{4,0,460},{134,0,852},{134,10,\n210},{4,0,932},{133,0,891},{6,0,588},{147,11,83},{4,10,284},{6,10,223},{136,0,\n625},{134,0,76},{8,0,92},{137,0,221},{4,11,124},{10,11,457},{11,11,121},{11,11,\n169},{11,11,422},{11,11,870},{12,11,214},{13,11,389},{14,11,187},{143,11,77},{9,\n11,618},{138,11,482},{4,10,218},{7,10,526},{143,10,137},{4,10,270},{5,10,192},{6\n,10,332},{7,10,1322},{13,0,9},{14,0,104},{142,0,311},{140,10,661},{135,11,1193},\n{6,11,107},{7,11,638},{7,11,1632},{137,11,396},{132,0,763},{4,0,622},{5,11,370},\n{134,11,1756},{133,0,253},{135,0,546},{5,11,204},{9,0,73},{10,0,110},{14,0,185},\n{145,0,119},{7,0,624},{7,0,916},{10,0,256},{139,0,87},{7,10,379},{8,10,481},{137\n,10,377},{5,0,212},{5,11,970},{6,11,1706},{12,0,35},{141,0,382},{5,10,1003},{6,\n10,149},{137,0,746},{8,10,262},{9,10,627},{10,0,150},{11,0,849},{11,10,214},{11,\n10,404},{11,10,457},{11,10,780},{11,10,913},{13,0,330},{13,10,401},{142,10,200},\n{134,0,1466},{135,11,3},{4,11,35},{5,11,121},{5,11,483},{5,11,685},{6,0,1299},{6\n,11,489},{7,11,1204},{136,11,394},{135,10,742},{4,10,142},{136,10,304},{4,11,921\n},{133,11,1007},{134,0,1518},{6,0,1229},{135,0,1175},{133,0,816},{4,10,471},{4,\n11,712},{5,10,51},{6,10,602},{7,10,925},{8,10,484},{10,10,195},{140,0,159},{134,\n11,1629},{5,0,869},{5,0,968},{6,0,1626},{8,0,734},{136,0,784},{4,0,542},{6,0,\n1716},{6,0,1727},{7,0,1082},{7,0,1545},{8,0,56},{8,0,118},{8,0,412},{8,0,564},{8\n,10,688},{9,0,888},{9,0,908},{10,0,50},{10,0,423},{11,0,685},{11,0,697},{11,0,\n933},{12,0,299},{13,0,126},{13,0,136},{13,0,170},{141,0,190},{132,10,697},{4,0,\n232},{9,0,202},{10,0,474},{140,0,433},{136,0,212},{6,0,108},{7,0,1003},{7,0,1181\n},{8,0,111},{136,0,343},{5,10,221},{135,11,1255},{133,11,485},{134,0,1712},{142,\n0,216},{4,11,285},{5,0,643},{5,11,317},{6,0,516},{6,11,301},{7,11,7},{8,11,153},\n{10,11,766},{11,11,468},{12,11,467},{141,11,143},{4,0,133},{7,0,711},{7,0,1298},\n{135,0,1585},{134,0,650},{135,11,512},{6,0,99},{7,0,1808},{145,0,57},{6,0,246},{\n6,0,574},{7,0,428},{9,0,793},{10,0,669},{11,0,485},{11,0,840},{12,0,300},{14,0,\n250},{145,0,55},{4,10,132},{5,10,69},{135,10,1242},{136,0,1023},{4,10,111},{135,\n0,302},{135,0,1871},{132,0,728},{4,10,767},{137,0,252},{6,0,461},{7,0,1590},{7,\n10,1416},{7,10,2005},{8,10,131},{8,10,466},{9,10,672},{13,10,252},{148,10,103},{\n6,0,323},{135,0,1564},{7,0,461},{136,0,775},{6,10,44},{136,10,368},{139,0,172},{\n132,0,464},{4,10,570},{133,10,120},{137,11,269},{6,10,227},{135,10,1589},{6,11,\n1719},{6,11,1735},{7,11,2016},{7,11,2020},{8,11,837},{137,11,852},{7,0,727},{146\n,0,73},{132,0,1023},{135,11,852},{135,10,1529},{136,0,577},{138,11,568},{134,0,\n1037},{8,11,67},{138,11,419},{4,0,413},{5,0,677},{8,0,432},{140,0,280},{6,10,\n1667},{7,10,2036},{7,11,967},{10,0,600},{141,11,11},{6,10,511},{140,10,132},{5,\n10,568},{6,0,799},{6,10,138},{135,10,1293},{4,10,565},{8,0,159},{136,10,827},{7,\n0,646},{7,0,1730},{11,0,446},{141,0,178},{4,10,922},{133,10,1023},{135,11,11},{\n132,0,395},{7,10,1002},{139,0,145},{9,0,174},{10,0,164},{11,0,440},{11,0,514},{\n11,0,841},{15,0,98},{149,0,20},{134,0,426},{10,0,608},{139,0,1002},{7,11,320},{8\n,11,51},{12,11,481},{12,11,570},{148,11,106},{4,11,445},{9,0,977},{137,0,983},{\n138,0,250},{139,0,100},{6,0,1982},{136,10,402},{133,11,239},{4,10,716},{141,10,\n31},{5,0,476},{7,11,83},{7,11,1990},{8,11,130},{139,11,720},{8,10,691},{136,10,\n731},{5,11,123},{6,11,530},{7,11,348},{135,11,1419},{5,0,76},{6,0,458},{6,0,497}\n,{7,0,868},{9,0,658},{10,0,594},{11,0,173},{11,0,566},{12,0,20},{12,0,338},{141,\n0,200},{9,11,139},{10,11,399},{11,11,469},{12,11,634},{141,11,223},{9,10,840},{\n138,10,803},{133,10,847},{11,11,223},{140,11,168},{132,11,210},{8,0,447},{9,10,\n53},{9,10,268},{9,10,901},{10,10,518},{10,10,829},{11,10,188},{13,10,74},{14,10,\n46},{15,10,17},{15,10,33},{17,10,40},{18,10,36},{19,10,20},{22,10,1},{152,10,2},\n{4,0,526},{7,0,1029},{135,0,1054},{19,11,59},{150,11,2},{4,0,636},{6,0,1875},{6,\n0,1920},{8,10,532},{9,0,999},{12,0,807},{12,0,825},{15,0,179},{15,0,190},{146,0,\n182},{6,0,1699},{7,0,660},{7,0,1124},{17,0,31},{19,0,22},{151,0,14},{135,10,681}\n,{132,11,430},{140,10,677},{4,10,684},{136,10,384},{132,11,756},{133,11,213},{7,\n0,188},{7,10,110},{8,10,290},{8,10,591},{9,10,382},{9,10,649},{11,10,71},{11,10,\n155},{11,10,313},{12,10,5},{13,10,325},{142,10,287},{7,10,360},{7,10,425},{9,10,\n66},{9,10,278},{138,10,644},{142,11,164},{4,0,279},{7,0,301},{137,0,362},{134,11\n,586},{135,0,1743},{4,0,178},{133,0,399},{4,10,900},{133,10,861},{5,10,254},{7,\n10,985},{136,10,73},{133,11,108},{7,10,1959},{136,10,683},{133,11,219},{4,11,193\n},{5,11,916},{7,11,364},{10,11,398},{10,11,726},{11,11,317},{11,11,626},{12,11,\n142},{12,11,288},{12,11,678},{13,11,313},{15,11,113},{18,11,114},{21,11,30},{150\n,11,53},{6,11,241},{7,11,907},{8,11,832},{9,11,342},{10,11,729},{11,11,284},{11,\n11,445},{11,11,651},{11,11,863},{13,11,398},{146,11,99},{132,0,872},{134,0,831},\n{134,0,1692},{6,0,202},{6,0,1006},{9,0,832},{9,11,734},{10,0,636},{11,0,208},{12\n,0,360},{17,0,118},{18,0,27},{148,0,67},{132,10,725},{7,11,993},{138,11,666},{\n134,0,1954},{134,10,196},{7,0,872},{10,0,516},{139,0,167},{133,10,831},{4,11,562\n},{9,11,254},{139,11,879},{137,0,313},{4,0,224},{132,11,786},{8,10,723},{11,0,24\n},{140,0,170},{5,0,546},{7,0,35},{8,0,11},{8,0,12},{9,0,315},{9,0,533},{10,0,802\n},{11,0,166},{12,0,525},{142,0,243},{7,0,1937},{13,10,80},{13,10,437},{145,10,74\n},{5,0,241},{8,0,242},{9,0,451},{10,0,667},{11,0,598},{140,0,429},{150,0,46},{6,\n0,1273},{137,0,830},{5,10,848},{6,10,66},{136,10,764},{6,0,825},{134,0,993},{4,0\n,1006},{4,10,36},{7,10,1387},{10,0,327},{11,10,755},{141,0,271},{134,0,1023},{\n135,0,1580},{4,0,366},{137,0,516},{132,10,887},{6,0,1736},{135,0,1891},{6,11,216\n},{7,11,901},{7,11,1343},{136,11,493},{6,10,165},{138,10,388},{7,11,341},{139,11\n,219},{4,10,719},{135,10,155},{134,0,1935},{132,0,826},{6,0,331},{6,0,1605},{8,0\n,623},{11,0,139},{139,0,171},{135,11,1734},{10,11,115},{11,11,420},{12,11,154},{\n13,11,404},{14,11,346},{15,11,54},{143,11,112},{4,10,353},{6,10,146},{6,10,1789}\n,{7,0,288},{7,10,990},{7,10,1348},{9,10,665},{9,10,898},{11,10,893},{142,10,212}\n,{6,0,916},{134,0,1592},{4,10,45},{7,0,1888},{135,10,1257},{5,11,1011},{136,11,\n701},{139,11,596},{4,11,54},{5,11,666},{7,11,1039},{7,11,1130},{9,11,195},{138,\n11,302},{134,0,1471},{134,0,1570},{132,0,394},{140,10,65},{136,10,816},{135,0,\n1931},{7,0,574},{135,0,1719},{134,11,467},{132,0,658},{6,11,1669},{9,0,781},{10,\n0,144},{11,0,385},{13,0,161},{13,0,228},{13,0,268},{148,0,107},{136,0,374},{135,\n0,735},{4,0,344},{6,0,498},{139,0,323},{6,10,559},{6,10,1691},{7,0,586},{135,0,\n1063},{137,0,155},{133,0,906},{7,11,122},{9,11,259},{10,11,84},{11,11,470},{12,\n11,541},{141,11,379},{134,0,1139},{10,0,108},{139,0,116},{134,10,456},{133,10,\n925},{5,11,82},{5,11,131},{7,11,1755},{8,11,31},{9,11,168},{9,11,764},{139,11,\n869},{134,11,605},{5,11,278},{137,11,68},{4,11,163},{5,11,201},{5,11,307},{5,11,\n310},{6,11,335},{7,11,284},{136,11,165},{135,11,1660},{6,11,33},{135,11,1244},{4\n,0,616},{136,11,483},{4,11,199},{8,0,857},{8,0,902},{8,0,910},{10,0,879},{11,11,\n34},{140,0,726},{136,0,692},{6,10,193},{7,10,240},{7,10,1682},{10,10,51},{10,10,\n640},{11,10,410},{13,10,82},{14,10,247},{14,10,331},{142,10,377},{6,0,823},{134,\n0,983},{139,10,411},{132,0,305},{136,10,633},{138,11,203},{134,0,681},{6,11,326}\n,{7,11,677},{137,11,425},{5,0,214},{7,0,603},{8,0,611},{9,0,686},{10,0,88},{11,0\n,459},{11,0,496},{12,0,463},{12,0,590},{141,0,0},{136,0,1004},{142,0,23},{134,0,\n1703},{147,11,8},{145,11,56},{135,0,1443},{4,10,237},{135,10,514},{6,0,714},{145\n,0,19},{5,11,358},{7,11,473},{7,11,1184},{10,11,662},{13,11,212},{13,11,304},{13\n,11,333},{145,11,98},{4,0,737},{10,0,98},{11,0,294},{12,0,60},{12,0,437},{13,0,\n64},{13,0,380},{142,0,430},{6,10,392},{7,10,65},{135,10,2019},{6,0,1758},{8,0,\n520},{9,0,345},{9,0,403},{142,0,350},{5,0,47},{10,0,242},{138,0,579},{5,0,139},{\n7,0,1168},{138,0,539},{134,0,1459},{13,0,388},{141,11,388},{134,0,253},{7,10,\n1260},{135,10,1790},{9,10,222},{10,0,252},{139,10,900},{140,0,745},{133,11,946},\n{4,0,107},{7,0,613},{8,0,439},{8,0,504},{9,0,501},{10,0,383},{139,0,477},{135,11\n,1485},{132,0,871},{7,11,411},{7,11,590},{8,11,631},{9,11,323},{10,11,355},{11,\n11,491},{12,11,143},{12,11,402},{13,11,73},{14,11,408},{15,11,107},{146,11,71},{\n132,0,229},{132,0,903},{140,0,71},{133,0,549},{4,0,47},{6,0,373},{7,0,452},{7,0,\n543},{7,0,1828},{7,0,1856},{9,0,6},{11,0,257},{139,0,391},{7,11,1467},{8,11,328}\n,{10,11,544},{11,11,955},{13,11,320},{145,11,83},{5,0,980},{134,0,1754},{136,0,\n865},{5,0,705},{137,0,606},{7,0,161},{8,10,201},{136,10,605},{143,11,35},{5,11,\n835},{6,11,483},{140,10,224},{7,0,536},{7,0,1331},{136,0,143},{134,0,1388},{5,0,\n724},{10,0,305},{11,0,151},{12,0,33},{12,0,121},{12,0,381},{17,0,3},{17,0,27},{\n17,0,78},{18,0,18},{19,0,54},{149,0,5},{4,10,523},{133,10,638},{5,0,19},{134,0,\n533},{5,0,395},{5,0,951},{134,0,1776},{135,0,1908},{132,0,846},{6,10,242},{7,10,\n227},{7,10,1581},{8,10,104},{9,10,113},{9,10,220},{9,10,427},{10,0,74},{10,10,\n239},{11,0,663},{11,10,579},{11,10,1023},{12,0,210},{13,0,166},{13,0,310},{13,10\n,4},{13,10,204},{13,10,316},{14,0,373},{18,0,95},{19,0,43},{148,10,86},{9,11,716\n},{11,11,108},{13,11,123},{14,11,252},{19,11,38},{21,11,3},{151,11,11},{8,0,372}\n,{9,0,122},{138,0,175},{132,11,677},{7,11,1374},{136,11,540},{135,10,861},{132,0\n,695},{7,0,497},{9,0,387},{147,0,81},{136,0,937},{134,0,718},{7,0,1328},{136,10,\n494},{132,11,331},{5,11,747},{134,0,1581},{5,0,284},{6,0,49},{6,0,350},{7,0,1},{\n7,0,377},{7,0,1693},{8,0,18},{8,0,678},{9,0,161},{9,0,585},{9,0,671},{9,0,839},{\n11,0,912},{141,0,427},{7,10,1306},{8,10,505},{9,10,482},{10,10,126},{11,10,225},\n{12,10,347},{12,10,449},{13,10,19},{14,10,218},{142,10,435},{10,10,764},{12,10,\n120},{13,10,39},{145,10,127},{4,0,597},{133,10,268},{134,0,1094},{4,0,1008},{134\n,0,1973},{132,0,811},{139,0,908},{135,0,1471},{133,11,326},{4,10,384},{135,10,\n1022},{4,11,691},{7,0,1935},{7,11,1935},{8,0,324},{8,11,324},{9,11,35},{10,11,\n680},{11,11,364},{12,0,42},{12,11,42},{13,11,357},{146,11,16},{135,0,2014},{6,11\n,32},{7,0,2007},{7,11,385},{7,11,757},{7,11,1916},{8,11,37},{8,11,94},{8,11,711}\n,{9,0,101},{9,0,450},{9,11,541},{10,0,66},{10,0,842},{10,11,162},{10,11,795},{11\n,0,536},{11,11,989},{11,11,1010},{12,0,587},{12,11,14},{142,11,308},{139,0,586},\n{135,10,1703},{7,0,1077},{9,10,159},{11,0,28},{140,10,603},{6,0,1221},{136,10,\n583},{6,11,152},{6,11,349},{6,11,1682},{7,11,1252},{8,11,112},{9,11,435},{9,11,\n668},{10,11,290},{10,11,319},{10,11,815},{11,11,180},{11,11,837},{12,11,240},{13\n,11,152},{13,11,219},{142,11,158},{139,0,62},{132,10,515},{8,10,632},{8,10,697},\n{137,10,854},{134,0,1766},{132,11,581},{6,11,126},{7,11,573},{8,11,397},{142,11,\n44},{150,0,28},{4,10,136},{5,10,551},{11,0,670},{150,0,25},{6,0,1665},{7,0,256},\n{7,0,1388},{138,0,499},{4,0,22},{5,0,10},{7,0,1576},{136,0,97},{134,10,1782},{5,\n0,481},{7,10,1287},{9,10,44},{10,10,552},{10,10,642},{11,10,839},{12,10,274},{12\n,10,275},{12,10,372},{13,10,91},{142,10,125},{133,11,926},{7,11,1232},{137,11,\n531},{6,0,134},{7,0,437},{7,0,1824},{9,0,37},{14,0,285},{142,0,371},{7,0,486},{8\n,0,155},{11,0,93},{140,0,164},{6,0,1391},{134,0,1442},{133,11,670},{133,0,591},{\n6,10,147},{7,10,886},{7,11,1957},{9,10,753},{138,10,268},{5,0,380},{5,0,650},{7,\n0,1173},{136,0,310},{4,0,364},{7,0,1156},{7,0,1187},{137,0,409},{135,11,1621},{\n134,0,482},{133,11,506},{4,0,781},{6,0,487},{7,0,926},{8,0,263},{139,0,500},{138\n,10,137},{135,11,242},{139,11,96},{133,10,414},{135,10,1762},{134,0,804},{5,11,\n834},{7,11,1202},{8,11,14},{9,11,481},{137,11,880},{134,10,599},{4,0,94},{135,0,\n1265},{4,0,415},{132,0,417},{5,0,348},{6,0,522},{6,10,1749},{7,11,1526},{138,11,\n465},{134,10,1627},{132,0,1012},{132,10,488},{4,11,357},{6,11,172},{7,11,143},{\n137,11,413},{4,10,83},{4,11,590},{146,11,76},{140,10,676},{7,11,287},{8,11,355},\n{9,11,293},{137,11,743},{134,10,278},{5,11,169},{6,0,1803},{7,11,333},{8,11,45},\n{18,0,165},{152,0,21},{12,10,97},{140,11,97},{4,0,408},{4,0,741},{135,0,500},{\n132,11,198},{7,10,388},{7,10,644},{139,10,781},{4,11,24},{5,11,140},{5,11,185},{\n7,11,1500},{11,11,565},{139,11,838},{6,0,1321},{7,10,229},{8,10,59},{9,0,257},{9\n,10,190},{10,10,378},{140,10,191},{4,11,334},{133,11,593},{135,11,1885},{134,0,\n1138},{4,0,249},{6,0,73},{135,0,177},{133,0,576},{142,0,231},{137,0,288},{132,10\n,660},{7,10,1035},{138,10,737},{135,0,1487},{6,0,989},{7,10,690},{9,0,433},{9,10\n,587},{140,10,521},{7,0,1264},{7,0,1678},{11,0,945},{12,0,341},{12,0,471},{140,0\n,569},{132,11,709},{133,11,897},{5,11,224},{13,11,174},{146,11,52},{135,11,1840}\n,{134,10,1744},{4,10,733},{9,10,194},{10,10,92},{11,10,198},{12,0,87},{12,10,84}\n,{13,10,128},{144,0,74},{140,0,779},{135,0,538},{4,11,608},{133,11,497},{133,0,\n413},{7,11,1375},{7,11,1466},{138,11,331},{136,0,495},{6,11,540},{136,11,136},{7\n,0,54},{8,0,312},{10,0,191},{10,0,614},{140,0,567},{5,11,999},{6,0,468},{7,0,567\n},{7,0,1478},{8,0,530},{142,0,290},{4,11,299},{7,10,306},{135,11,1004},{142,11,\n296},{134,0,1484},{133,10,979},{6,0,609},{9,0,815},{12,11,137},{14,11,9},{14,11,\n24},{142,11,64},{133,11,456},{6,0,484},{135,0,822},{133,10,178},{136,11,180},{\n132,11,755},{137,0,900},{135,0,1335},{6,0,1724},{135,0,2022},{135,11,1139},{4,10\n,390},{133,0,640},{6,0,1831},{138,11,633},{135,11,566},{4,11,890},{5,11,805},{5,\n11,819},{5,11,961},{6,11,396},{6,11,1631},{6,11,1678},{7,11,1967},{7,11,2041},{9\n,11,630},{11,11,8},{11,11,1019},{12,11,176},{13,11,225},{14,11,292},{149,11,24},\n{132,0,474},{134,0,1103},{135,0,1504},{134,0,1576},{6,0,961},{6,0,1034},{140,0,\n655},{11,11,514},{149,11,20},{5,0,305},{135,11,1815},{7,11,1505},{10,11,190},{10\n,11,634},{11,11,792},{12,11,358},{140,11,447},{5,11,0},{6,11,536},{7,11,604},{13\n,11,445},{145,11,126},{5,10,105},{135,0,1236},{4,0,480},{6,0,217},{6,0,302},{6,0\n,1642},{6,11,232},{6,11,412},{7,0,130},{7,0,837},{7,0,1321},{7,0,1547},{7,0,1657\n},{7,11,1074},{8,0,429},{8,11,9},{8,11,157},{8,11,786},{9,0,228},{9,11,196},{9,\n11,352},{9,11,457},{10,11,337},{11,11,232},{11,11,877},{12,11,480},{12,11,546},{\n13,0,289},{13,0,343},{147,0,101},{5,10,438},{7,11,958},{9,10,694},{12,10,627},{\n13,10,210},{141,11,38},{4,11,382},{136,11,579},{7,0,278},{10,0,739},{11,0,708},{\n141,0,348},{4,11,212},{135,11,1206},{135,11,1898},{6,0,708},{6,0,1344},{152,10,\n11},{137,11,768},{134,0,1840},{140,0,233},{8,10,25},{138,10,826},{5,11,655},{134\n,0,2017},{6,0,1488},{139,11,290},{132,10,308},{134,0,1590},{134,0,1800},{134,0,\n1259},{6,11,231},{7,11,95},{8,11,423},{144,0,28},{133,11,300},{135,10,150},{136,\n10,649},{7,11,1874},{137,11,641},{6,11,237},{7,11,611},{8,11,100},{9,11,416},{11\n,11,335},{12,11,173},{146,11,101},{137,0,45},{134,10,521},{14,11,26},{17,0,36},{\n146,11,150},{5,10,339},{7,0,1442},{14,0,22},{15,10,41},{15,10,166},{147,10,66},{\n6,11,581},{7,11,1119},{136,0,378},{134,0,1507},{147,11,117},{139,0,39},{134,0,\n1054},{6,0,363},{7,0,1955},{136,0,725},{134,0,2036},{133,11,199},{6,0,1871},{9,0\n,935},{9,0,961},{9,0,1004},{9,0,1016},{12,0,805},{12,0,852},{12,0,853},{12,0,869\n},{12,0,882},{12,0,896},{12,0,906},{12,0,917},{12,0,940},{15,0,170},{15,0,176},{\n15,0,188},{15,0,201},{15,0,205},{15,0,212},{15,0,234},{15,0,244},{18,0,181},{18,\n0,193},{18,0,196},{18,0,201},{18,0,202},{18,0,210},{18,0,217},{18,0,235},{18,0,\n236},{18,0,237},{21,0,54},{21,0,55},{21,0,58},{21,0,59},{152,0,22},{134,10,1628}\n,{137,0,805},{5,0,813},{135,0,2046},{142,11,42},{5,0,712},{6,0,1240},{11,0,17},{\n13,0,321},{144,0,67},{132,0,617},{135,10,829},{6,0,320},{7,0,781},{7,0,1921},{9,\n0,55},{10,0,186},{10,0,273},{10,0,664},{10,0,801},{11,0,996},{11,0,997},{13,0,\n157},{142,0,170},{136,0,271},{5,10,486},{135,10,1349},{18,11,91},{147,11,70},{7,\n10,1635},{8,10,17},{10,0,445},{138,10,295},{136,11,404},{7,0,103},{7,0,863},{11,\n0,184},{145,0,62},{138,10,558},{137,0,659},{6,11,312},{6,11,1715},{10,11,584},{\n11,11,546},{11,11,692},{12,11,259},{12,11,295},{13,11,46},{141,11,154},{134,0,\n676},{132,11,588},{4,11,231},{5,11,61},{6,11,104},{7,11,729},{7,11,964},{7,11,\n1658},{140,11,414},{6,11,263},{138,11,757},{11,0,337},{142,0,303},{135,11,1363},\n{132,11,320},{140,0,506},{134,10,447},{5,0,77},{7,0,1455},{10,0,843},{147,0,73},\n{7,10,577},{7,10,1432},{9,10,475},{9,10,505},{9,10,526},{9,10,609},{9,10,689},{9\n,10,726},{9,10,735},{9,10,738},{10,10,556},{10,10,674},{10,10,684},{11,10,89},{\n11,10,202},{11,10,272},{11,10,380},{11,10,415},{11,10,505},{11,10,537},{11,10,\n550},{11,10,562},{11,10,640},{11,10,667},{11,10,688},{11,10,847},{11,10,927},{11\n,10,930},{11,10,940},{12,10,144},{12,10,325},{12,10,329},{12,10,389},{12,10,403}\n,{12,10,451},{12,10,515},{12,10,604},{12,10,616},{12,10,626},{13,10,66},{13,10,\n131},{13,10,167},{13,10,236},{13,10,368},{13,10,411},{13,10,434},{13,10,453},{13\n,10,461},{13,10,474},{14,10,59},{14,10,60},{14,10,139},{14,10,152},{14,10,276},{\n14,10,353},{14,10,402},{15,10,28},{15,10,81},{15,10,123},{15,10,152},{18,10,136}\n,{148,10,88},{132,0,458},{135,0,1420},{4,10,609},{4,11,405},{6,0,109},{7,10,756}\n,{7,11,817},{9,10,544},{10,0,382},{11,10,413},{14,10,307},{14,11,58},{16,10,25},\n{17,11,37},{146,11,124},{5,11,974},{6,0,330},{7,0,1084},{139,0,142},{4,10,930},{\n133,10,947},{5,10,939},{142,11,394},{16,0,91},{145,0,87},{5,10,962},{5,11,235},{\n7,11,1239},{11,11,131},{140,11,370},{5,10,651},{8,10,170},{9,10,61},{9,10,63},{\n10,10,23},{10,10,37},{10,10,834},{11,0,492},{11,10,4},{11,10,281},{11,10,503},{\n11,10,677},{12,10,96},{12,10,130},{12,10,244},{14,10,5},{14,10,40},{14,10,162},{\n14,10,202},{146,10,133},{4,10,406},{5,10,579},{12,10,492},{150,10,15},{9,11,137}\n,{138,11,221},{134,0,1239},{11,0,211},{140,0,145},{7,11,390},{138,11,140},{135,\n11,1418},{135,11,1144},{134,0,1049},{6,10,17},{7,0,321},{7,10,1001},{7,10,1982},\n{9,10,886},{10,10,489},{10,10,800},{11,10,782},{12,10,320},{13,10,467},{14,10,\n145},{14,10,387},{143,10,119},{145,10,17},{5,11,407},{11,11,489},{19,11,37},{20,\n11,73},{150,11,38},{133,10,458},{135,0,1985},{7,10,1983},{8,10,0},{8,10,171},{9,\n10,120},{9,10,732},{10,10,473},{11,10,656},{11,10,998},{18,10,0},{18,10,2},{147,\n10,21},{5,11,325},{7,11,1483},{8,11,5},{8,11,227},{9,11,105},{10,11,585},{140,11\n,614},{136,0,122},{132,0,234},{135,11,1196},{6,0,976},{6,0,1098},{134,0,1441},{7\n,0,253},{136,0,549},{6,11,621},{13,11,504},{144,11,19},{132,10,519},{5,0,430},{5\n,0,932},{6,0,131},{7,0,417},{9,0,522},{11,0,314},{141,0,390},{14,0,149},{14,0,\n399},{143,0,57},{5,10,907},{6,10,31},{6,11,218},{7,10,491},{7,10,530},{8,10,592}\n,{11,10,53},{11,10,779},{12,10,167},{12,10,411},{14,10,14},{14,10,136},{15,10,72\n},{16,10,17},{144,10,72},{140,11,330},{7,11,454},{7,11,782},{136,11,768},{132,0,\n507},{10,11,676},{140,11,462},{4,10,208},{5,10,106},{6,0,630},{6,10,531},{8,10,\n408},{9,0,811},{9,10,188},{138,10,572},{4,0,343},{5,0,511},{134,10,1693},{134,11\n,164},{132,0,448},{7,0,455},{138,0,591},{135,0,1381},{12,10,441},{150,11,50},{9,\n10,449},{10,10,192},{138,10,740},{4,10,241},{134,0,575},{134,0,1175},{134,0,653}\n,{134,0,1761},{134,0,1198},{132,10,259},{6,11,343},{7,11,195},{9,11,226},{10,11,\n197},{10,11,575},{11,11,502},{139,11,899},{7,0,1127},{7,0,1572},{10,0,297},{10,0\n,422},{11,0,764},{11,0,810},{12,0,264},{13,0,102},{13,0,300},{13,0,484},{14,0,\n147},{14,0,229},{17,0,71},{18,0,118},{147,0,120},{135,11,666},{132,0,678},{4,10,\n173},{5,10,312},{5,10,512},{135,10,1285},{7,10,1603},{7,10,1691},{9,10,464},{11,\n10,195},{12,10,279},{12,10,448},{14,10,11},{147,10,102},{16,0,99},{146,0,164},{7\n,11,1125},{9,11,143},{11,11,61},{14,11,405},{150,11,21},{137,11,260},{4,10,452},\n{5,10,583},{5,10,817},{6,10,433},{7,10,593},{7,10,720},{7,10,1378},{8,10,161},{9\n,10,284},{10,10,313},{139,10,886},{132,10,547},{136,10,722},{14,0,35},{142,0,191\n},{141,0,45},{138,0,121},{132,0,125},{134,0,1622},{133,11,959},{8,10,420},{139,\n10,193},{132,0,721},{135,10,409},{136,0,145},{7,0,792},{8,0,147},{8,11,173},{10,\n0,821},{11,0,970},{139,0,1021},{134,11,266},{132,0,715},{7,0,1999},{138,10,308},\n{133,0,531},{5,0,168},{5,0,930},{8,0,74},{9,0,623},{12,0,500},{140,0,579},{144,0\n,65},{138,11,246},{6,0,220},{7,0,1101},{13,0,105},{142,11,314},{5,10,1002},{136,\n10,745},{134,0,960},{20,0,0},{148,11,0},{4,0,1005},{4,10,239},{6,10,477},{7,10,\n1607},{11,10,68},{139,10,617},{6,0,19},{7,0,1413},{139,0,428},{149,10,13},{7,0,\n96},{8,0,401},{8,0,703},{8,11,300},{137,0,896},{134,0,1595},{145,0,116},{136,0,\n1021},{7,0,1961},{7,0,1965},{7,0,2030},{8,0,150},{8,0,702},{8,0,737},{8,0,750},{\n140,0,366},{11,11,75},{142,11,267},{132,10,367},{5,11,427},{5,11,734},{7,11,478}\n,{8,0,800},{8,11,52},{9,0,148},{9,0,872},{9,0,890},{11,0,309},{11,0,1001},{13,0,\n267},{141,0,323},{7,11,239},{11,11,217},{142,11,165},{132,11,323},{140,11,419},{\n13,0,299},{142,0,75},{6,11,87},{6,11,1734},{7,11,20},{7,11,1056},{8,11,732},{9,\n11,406},{9,11,911},{138,11,694},{134,0,1383},{132,10,694},{133,11,613},{137,0,\n779},{4,0,598},{140,10,687},{6,0,970},{135,0,424},{133,0,547},{7,11,32},{7,11,\n984},{8,11,85},{8,11,709},{9,11,579},{9,11,847},{9,11,856},{10,11,799},{11,11,\n258},{11,11,1007},{12,11,331},{12,11,615},{13,11,188},{13,11,435},{14,11,8},{15,\n11,165},{16,11,27},{148,11,40},{6,0,1222},{134,0,1385},{132,0,876},{138,11,151},\n{135,10,213},{4,11,167},{135,11,82},{133,0,133},{6,11,24},{7,11,74},{7,11,678},{\n137,11,258},{5,11,62},{6,11,534},{7,11,684},{7,11,1043},{7,11,1072},{8,11,280},{\n8,11,541},{8,11,686},{10,11,519},{11,11,252},{140,11,282},{136,0,187},{8,0,8},{\n10,0,0},{10,0,818},{139,0,988},{132,11,359},{7,10,1672},{11,0,429},{143,0,51},{\n136,0,685},{5,11,211},{7,11,88},{136,11,627},{134,0,472},{136,0,132},{6,11,145},\n{141,11,336},{4,10,751},{11,10,390},{140,10,32},{4,10,409},{4,11,263},{5,10,78},\n{6,0,938},{134,0,1060},{137,0,874},{4,11,916},{6,10,473},{7,10,1602},{8,0,774},{\n10,0,670},{10,10,698},{12,0,51},{12,10,212},{13,10,307},{145,10,105},{146,0,92},\n{143,10,156},{132,0,830},{137,0,701},{4,11,599},{6,11,1634},{7,11,5},{7,11,55},{\n7,11,67},{7,11,97},{7,11,691},{7,11,979},{7,11,1697},{8,11,207},{8,11,214},{8,11\n,231},{8,11,294},{8,11,336},{8,11,428},{8,11,451},{8,11,460},{8,11,471},{8,11,\n622},{8,11,626},{8,11,679},{8,11,759},{8,11,829},{9,11,11},{9,11,246},{9,11,484}\n,{9,11,573},{9,11,706},{9,11,762},{9,11,798},{9,11,855},{9,11,870},{9,11,912},{\n10,11,303},{10,11,335},{10,11,424},{10,11,461},{10,11,543},{10,11,759},{10,11,\n814},{11,11,59},{11,11,199},{11,11,235},{11,11,475},{11,11,590},{11,11,929},{11,\n11,963},{12,11,114},{12,11,182},{12,11,226},{12,11,332},{12,11,439},{12,11,575},\n{12,11,598},{13,11,8},{13,11,125},{13,11,194},{13,11,287},{14,11,197},{14,11,383\n},{15,11,53},{17,11,63},{19,11,46},{19,11,98},{19,11,106},{148,11,85},{4,0,127},\n{5,0,350},{6,0,356},{8,0,426},{9,0,572},{10,0,247},{139,0,312},{134,0,1215},{6,0\n,59},{7,11,1853},{9,0,603},{10,11,437},{141,0,397},{134,0,1762},{147,11,126},{\n135,10,883},{13,0,293},{142,0,56},{133,10,617},{139,10,50},{5,11,187},{7,10,1518\n},{139,10,694},{135,0,441},{6,0,111},{7,0,4},{8,0,163},{8,0,776},{138,0,566},{\n132,0,806},{4,11,215},{9,11,38},{10,11,3},{11,11,23},{11,11,127},{139,11,796},{4\n,10,546},{7,10,2042},{142,0,233},{135,0,1994},{134,0,1739},{135,11,1530},{136,0,\n393},{5,0,297},{7,0,1038},{14,0,359},{19,0,52},{148,0,47},{135,0,309},{4,10,313}\n,{133,10,577},{8,10,184},{141,10,433},{135,10,935},{12,10,186},{12,10,292},{14,\n10,100},{146,10,70},{136,0,363},{11,10,402},{12,10,109},{12,10,431},{13,10,179},\n{13,10,206},{14,0,175},{14,10,217},{16,10,3},{148,10,53},{5,10,886},{6,10,46},{6\n,10,1790},{7,10,14},{7,10,732},{7,10,1654},{8,10,95},{8,10,327},{8,10,616},{9,10\n,892},{10,10,598},{10,10,769},{11,10,134},{11,10,747},{12,10,378},{142,10,97},{\n136,0,666},{135,0,1675},{6,0,655},{134,0,1600},{135,0,808},{133,10,1021},{4,11,\n28},{5,11,440},{7,11,248},{11,11,833},{140,11,344},{134,11,1654},{132,0,280},{\n140,0,54},{4,0,421},{133,0,548},{132,10,153},{6,11,339},{135,11,923},{133,11,853\n},{133,10,798},{132,10,587},{6,11,249},{7,11,1234},{139,11,573},{6,10,598},{7,10\n,42},{8,10,695},{10,10,212},{11,10,158},{14,10,196},{145,10,85},{5,10,957},{5,10\n,1008},{135,0,249},{4,10,129},{135,10,465},{6,0,254},{7,0,842},{7,0,1659},{7,10,\n908},{7,10,1201},{9,0,109},{9,10,755},{10,0,103},{11,10,906},{12,10,527},{146,10\n,7},{5,0,262},{136,10,450},{144,0,1},{10,11,201},{142,11,319},{7,11,49},{7,11,\n392},{8,11,20},{8,11,172},{8,11,690},{9,11,383},{9,11,845},{10,11,48},{11,11,293\n},{11,11,832},{11,11,920},{141,11,221},{5,11,858},{133,11,992},{134,0,805},{139,\n10,1003},{6,0,1630},{134,11,307},{7,11,1512},{135,11,1794},{6,11,268},{137,11,62\n},{135,10,1868},{133,0,671},{4,0,989},{8,0,972},{136,0,998},{132,11,423},{132,0,\n889},{135,0,1382},{135,0,1910},{7,10,965},{7,10,1460},{135,10,1604},{4,0,627},{5\n,0,775},{138,11,106},{134,11,348},{7,0,202},{11,0,362},{11,0,948},{140,0,388},{\n138,11,771},{6,11,613},{136,11,223},{6,0,560},{7,0,451},{8,0,389},{12,0,490},{13\n,0,16},{13,0,215},{13,0,351},{18,0,132},{147,0,125},{135,0,841},{136,0,566},{136\n,0,938},{132,11,670},{5,0,912},{6,0,1695},{140,11,55},{9,11,40},{139,11,136},{7,\n0,1361},{7,10,982},{10,10,32},{143,10,56},{11,11,259},{140,11,270},{5,0,236},{6,\n0,572},{8,0,492},{11,0,618},{144,0,56},{8,11,572},{9,11,310},{9,11,682},{137,11,\n698},{134,0,1854},{5,0,190},{136,0,318},{133,10,435},{135,0,1376},{4,11,296},{6,\n11,352},{7,11,401},{7,11,1410},{7,11,1594},{7,11,1674},{8,11,63},{8,11,660},{137\n,11,74},{5,10,85},{6,10,419},{7,0,349},{7,10,305},{7,10,361},{7,10,1337},{8,10,\n71},{140,10,519},{4,11,139},{4,11,388},{140,11,188},{6,0,1972},{6,0,2013},{8,0,\n951},{10,0,947},{10,0,974},{10,0,1018},{142,0,476},{140,10,688},{135,10,740},{5,\n10,691},{7,10,345},{9,10,94},{140,10,169},{5,10,183},{6,10,582},{9,0,344},{10,10\n,679},{140,10,435},{135,10,511},{132,0,850},{8,11,441},{10,11,314},{143,11,3},{7\n,10,1993},{136,10,684},{4,11,747},{6,10,583},{6,11,290},{7,11,649},{7,11,1479},{\n135,11,1583},{133,11,232},{133,10,704},{134,0,910},{4,10,179},{5,10,198},{133,10\n,697},{7,10,347},{7,10,971},{8,10,181},{138,10,711},{136,11,525},{14,0,19},{14,0\n,28},{144,0,29},{7,0,85},{7,0,247},{8,0,585},{138,0,163},{4,0,487},{7,11,472},{7\n,11,1801},{10,11,748},{141,11,458},{4,10,243},{5,10,203},{7,10,19},{7,10,71},{7,\n10,113},{10,10,405},{11,10,357},{142,10,240},{7,10,1450},{139,10,99},{132,11,425\n},{138,0,145},{147,0,83},{6,10,492},{137,11,247},{4,0,1013},{134,0,2033},{5,10,\n134},{6,10,408},{6,10,495},{135,10,1593},{135,0,1922},{134,11,1768},{4,0,124},{\n10,0,457},{11,0,121},{11,0,169},{11,0,870},{11,0,874},{12,0,214},{14,0,187},{143\n,0,77},{5,0,557},{135,0,1457},{139,0,66},{5,11,943},{6,11,1779},{142,10,4},{4,10\n,248},{4,10,665},{7,10,137},{137,10,349},{5,11,245},{6,11,576},{7,0,1193},{7,11,\n582},{136,11,225},{144,0,82},{7,10,1270},{139,10,612},{5,0,454},{10,0,352},{138,\n11,352},{5,10,371},{7,10,563},{146,0,57},{135,0,1333},{6,0,107},{6,11,610},{7,0,\n638},{7,0,1632},{137,0,396},{5,0,370},{134,0,1756},{4,10,374},{7,10,547},{7,10,\n1700},{7,10,1833},{139,10,858},{133,0,204},{6,0,1305},{9,10,311},{141,10,42},{5,\n0,970},{134,0,1706},{6,10,1647},{7,10,1552},{7,10,2010},{9,10,494},{137,10,509},\n{13,11,455},{15,11,99},{15,11,129},{144,11,68},{135,0,3},{4,0,35},{5,0,121},{5,0\n,483},{5,0,685},{6,0,489},{6,0,782},{6,0,1032},{7,0,1204},{136,0,394},{4,0,921},\n{133,0,1007},{8,11,360},{138,11,63},{135,0,1696},{134,0,1519},{132,11,443},{135,\n11,944},{6,10,123},{7,10,214},{9,10,728},{10,10,157},{11,10,346},{11,10,662},{\n143,10,106},{137,0,981},{135,10,1435},{134,0,1072},{132,0,712},{134,0,1629},{134\n,0,728},{4,11,298},{137,11,483},{5,11,164},{6,0,1177},{6,0,1271},{7,11,121},{142\n,11,189},{4,10,707},{5,10,588},{6,10,393},{7,0,1608},{13,10,106},{18,10,49},{147\n,10,41},{23,0,16},{151,11,16},{6,10,211},{7,10,1690},{11,10,486},{140,10,369},{\n133,0,485},{19,11,15},{149,11,27},{4,11,172},{9,11,611},{10,11,436},{12,11,673},\n{141,11,255},{5,11,844},{10,11,484},{11,11,754},{12,11,457},{14,11,171},{14,11,\n389},{146,11,153},{4,0,285},{5,0,27},{5,0,317},{6,0,301},{7,0,7},{8,0,153},{10,0\n,766},{11,0,468},{12,0,467},{141,0,143},{134,0,1462},{9,11,263},{10,11,147},{138\n,11,492},{133,11,537},{6,0,1945},{6,0,1986},{6,0,1991},{134,0,2038},{134,10,219}\n,{137,11,842},{5,10,582},{6,10,1646},{7,10,99},{7,10,1962},{7,10,1986},{8,10,515\n},{8,10,773},{9,10,23},{9,10,491},{12,10,620},{14,0,52},{14,10,93},{145,0,50},{\n138,11,97},{5,10,851},{20,0,21},{148,0,44},{136,0,819},{139,0,917},{5,11,230},{5\n,11,392},{6,11,420},{8,10,762},{8,10,812},{9,10,910},{9,11,568},{140,11,612},{\n135,0,784},{15,0,135},{143,11,135},{10,0,454},{140,0,324},{4,11,0},{5,11,41},{7,\n11,1459},{7,11,1469},{7,11,1618},{7,11,1859},{9,11,549},{139,11,905},{4,10,98},{\n7,10,1365},{9,10,422},{9,10,670},{10,10,775},{11,10,210},{13,10,26},{13,10,457},\n{141,10,476},{6,0,1719},{6,0,1735},{7,0,2016},{7,0,2020},{8,0,837},{137,0,852},{\n133,11,696},{135,0,852},{132,0,952},{134,10,1730},{132,11,771},{138,0,568},{137,\n0,448},{139,0,146},{8,0,67},{138,0,419},{133,11,921},{137,10,147},{134,0,1826},{\n10,0,657},{14,0,297},{142,0,361},{6,0,666},{6,0,767},{134,0,1542},{139,0,729},{6\n,11,180},{7,11,1137},{8,11,751},{139,11,805},{4,11,183},{7,11,271},{11,11,824},{\n11,11,952},{13,11,278},{13,11,339},{13,11,482},{14,11,424},{148,11,99},{4,0,669}\n,{5,11,477},{5,11,596},{6,11,505},{7,11,1221},{11,11,907},{12,11,209},{141,11,\n214},{135,11,1215},{5,0,402},{6,10,30},{11,10,56},{139,10,305},{7,11,564},{142,\n11,168},{139,0,152},{7,0,912},{135,10,1614},{4,10,150},{5,10,303},{134,10,327},{\n7,0,320},{8,0,51},{9,0,868},{10,0,833},{12,0,481},{12,0,570},{148,0,106},{132,0,\n445},{7,11,274},{11,11,263},{11,11,479},{11,11,507},{140,11,277},{6,11,1645},{8,\n10,192},{10,0,555},{10,10,78},{11,0,308},{13,10,359},{147,0,95},{135,10,786},{6,\n11,92},{6,11,188},{7,11,1269},{7,11,1524},{7,11,1876},{10,11,228},{139,11,1020},\n{4,11,459},{133,11,966},{6,10,1638},{7,10,79},{7,10,496},{9,10,138},{10,10,336},\n{11,0,386},{12,10,412},{12,10,440},{142,10,305},{133,0,239},{7,0,83},{7,0,1990},\n{8,0,130},{139,0,720},{138,11,709},{4,0,143},{5,0,550},{133,0,752},{5,0,123},{6,\n0,530},{7,0,348},{135,0,1419},{135,0,2024},{6,11,18},{7,11,179},{7,11,721},{7,11\n,932},{8,11,548},{8,11,757},{9,11,54},{9,11,65},{9,11,532},{9,11,844},{10,11,113\n},{10,11,117},{10,11,236},{10,11,315},{10,11,430},{10,11,798},{11,11,153},{11,11\n,351},{11,11,375},{12,11,78},{12,11,151},{12,11,392},{14,11,248},{143,11,23},{7,\n10,204},{7,10,415},{8,10,42},{10,10,85},{139,10,564},{134,0,958},{133,11,965},{\n132,0,210},{135,11,1429},{138,11,480},{134,11,182},{139,11,345},{10,11,65},{10,\n11,488},{138,11,497},{4,10,3},{5,10,247},{5,10,644},{7,10,744},{7,10,1207},{7,10\n,1225},{7,10,1909},{146,10,147},{132,0,430},{5,10,285},{9,10,67},{13,10,473},{\n143,10,82},{144,11,16},{7,11,1162},{9,11,588},{10,11,260},{151,10,8},{133,0,213}\n,{138,0,7},{135,0,801},{134,11,1786},{135,11,308},{6,0,936},{134,0,1289},{133,0,\n108},{132,0,885},{133,0,219},{139,0,587},{4,0,193},{5,0,916},{6,0,1041},{7,0,364\n},{10,0,398},{10,0,726},{11,0,317},{11,0,626},{12,0,142},{12,0,288},{12,0,678},{\n13,0,313},{15,0,113},{146,0,114},{135,0,1165},{6,0,241},{9,0,342},{10,0,729},{11\n,0,284},{11,0,445},{11,0,651},{11,0,863},{13,0,398},{146,0,99},{7,0,907},{136,0,\n832},{4,10,29},{6,10,532},{7,10,1628},{7,10,1648},{9,0,303},{9,10,350},{10,10,\n433},{11,10,97},{11,10,557},{11,10,745},{12,10,289},{12,10,335},{12,10,348},{12,\n10,606},{13,10,116},{13,10,233},{13,10,466},{14,10,181},{14,10,209},{14,10,232},\n{14,10,236},{14,10,300},{16,10,41},{148,10,97},{7,10,1692},{7,11,423},{136,11,\n588},{6,0,931},{134,0,1454},{5,10,501},{7,10,1704},{9,10,553},{11,10,520},{12,10\n,557},{141,10,249},{136,11,287},{4,0,562},{9,0,254},{139,0,879},{132,0,786},{14,\n11,32},{18,11,85},{20,11,2},{152,11,16},{135,0,1294},{7,11,723},{135,11,1135},{6\n,0,216},{6,11,403},{7,0,901},{7,0,1343},{136,0,493},{7,11,719},{8,11,809},{136,\n11,834},{5,11,210},{6,11,213},{7,11,60},{10,11,364},{139,11,135},{5,11,607},{7,0\n,341},{8,11,326},{8,11,490},{139,0,219},{4,11,701},{5,11,472},{5,11,639},{7,11,\n1249},{9,11,758},{139,11,896},{135,11,380},{135,11,1947},{139,0,130},{135,0,1734\n},{10,0,115},{11,0,420},{12,0,154},{13,0,404},{14,0,346},{143,0,54},{134,10,129}\n,{4,11,386},{7,11,41},{8,11,405},{9,11,497},{11,11,110},{11,11,360},{15,11,37},{\n144,11,84},{141,11,282},{5,11,46},{7,11,1452},{7,11,1480},{8,11,634},{140,11,472\n},{4,11,524},{136,11,810},{10,11,238},{141,11,33},{133,0,604},{5,0,1011},{136,0,\n701},{8,0,856},{8,0,858},{8,0,879},{12,0,702},{142,0,447},{4,0,54},{5,0,666},{7,\n0,1039},{7,0,1130},{9,0,195},{138,0,302},{4,10,25},{5,10,60},{6,10,504},{7,10,\n614},{7,10,1155},{140,10,0},{7,10,1248},{11,10,621},{139,10,702},{133,11,997},{\n137,10,321},{134,0,1669},{134,0,1791},{4,10,379},{135,10,1397},{138,11,372},{5,\n11,782},{5,11,829},{134,11,1738},{135,0,1228},{4,10,118},{6,10,274},{6,10,361},{\n7,10,75},{141,10,441},{132,0,623},{9,11,279},{10,11,407},{14,11,84},{150,11,18},\n{137,10,841},{135,0,798},{140,10,693},{5,10,314},{6,10,221},{7,10,419},{10,10,\n650},{11,10,396},{12,10,156},{13,10,369},{14,10,333},{145,10,47},{135,11,1372},{\n7,0,122},{9,0,259},{10,0,84},{11,0,470},{12,0,541},{141,0,379},{134,0,837},{4,11\n,78},{5,11,96},{5,11,182},{7,11,1724},{7,11,1825},{8,0,1013},{10,11,394},{10,11,\n471},{11,11,532},{14,11,340},{145,11,88},{134,0,577},{135,11,1964},{132,10,913},\n{134,0,460},{8,0,891},{10,0,901},{10,0,919},{10,0,932},{12,0,715},{12,0,728},{12\n,0,777},{14,0,457},{144,0,103},{5,0,82},{5,0,131},{7,0,1755},{8,0,31},{9,0,168},\n{9,0,764},{139,0,869},{136,10,475},{5,10,1016},{6,0,605},{9,11,601},{9,11,619},{\n10,11,505},{10,11,732},{11,11,355},{140,11,139},{7,10,602},{8,10,179},{10,10,781\n},{140,10,126},{134,0,1246},{6,10,329},{138,10,111},{6,11,215},{7,11,1028},{7,11\n,1473},{7,11,1721},{9,11,424},{138,11,779},{5,0,278},{137,0,68},{6,0,932},{6,0,\n1084},{144,0,86},{4,0,163},{5,0,201},{5,0,307},{5,0,310},{6,0,335},{7,0,284},{7,\n0,1660},{136,0,165},{136,0,781},{134,0,707},{6,0,33},{135,0,1244},{5,10,821},{6,\n10,1687},{6,11,67},{7,11,258},{7,11,1630},{9,11,354},{9,11,675},{10,11,830},{14,\n11,80},{145,11,80},{6,11,141},{7,11,225},{9,11,59},{9,11,607},{10,11,312},{11,11\n,687},{12,11,555},{13,11,373},{13,11,494},{148,11,58},{134,0,1113},{5,10,71},{7,\n10,1407},{9,0,388},{9,10,704},{10,10,261},{10,10,619},{11,10,547},{11,10,619},{\n143,10,157},{7,0,1953},{136,0,720},{138,0,203},{7,10,2008},{9,10,337},{138,10,\n517},{6,0,326},{7,0,677},{137,0,425},{139,11,81},{7,0,1316},{7,0,1412},{7,0,1839\n},{9,0,589},{11,0,241},{11,0,676},{11,0,811},{11,0,891},{12,0,140},{12,0,346},{\n12,0,479},{13,0,140},{13,0,381},{14,0,188},{18,0,30},{148,0,108},{5,0,416},{6,10\n,86},{6,10,603},{7,10,292},{7,10,561},{8,10,257},{8,10,382},{9,10,721},{9,10,778\n},{11,10,581},{140,10,466},{4,10,486},{133,10,491},{134,0,1300},{132,10,72},{6,\n10,265},{7,0,847},{7,11,430},{139,11,46},{5,11,602},{6,11,106},{7,11,1786},{7,11\n,1821},{7,11,2018},{9,11,418},{137,11,763},{5,0,358},{7,0,535},{7,0,1184},{10,0,\n662},{13,0,212},{13,0,304},{13,0,333},{145,0,98},{5,11,65},{6,11,416},{7,11,1720\n},{7,11,1924},{8,11,677},{10,11,109},{11,11,14},{11,11,70},{11,11,569},{11,11,\n735},{15,11,153},{148,11,80},{6,0,1823},{8,0,839},{8,0,852},{8,0,903},{10,0,940}\n,{12,0,707},{140,0,775},{135,11,1229},{6,0,1522},{140,0,654},{136,11,595},{139,0\n,163},{141,0,314},{132,0,978},{4,0,601},{6,0,2035},{137,10,234},{5,10,815},{6,10\n,1688},{134,10,1755},{133,0,946},{136,0,434},{6,10,197},{136,10,205},{7,0,411},{\n7,0,590},{8,0,631},{9,0,323},{10,0,355},{11,0,491},{12,0,143},{12,0,402},{13,0,\n73},{14,0,408},{15,0,107},{146,0,71},{7,0,1467},{8,0,328},{10,0,544},{11,0,955},\n{12,0,13},{13,0,320},{145,0,83},{142,0,410},{11,0,511},{13,0,394},{14,0,298},{14\n,0,318},{146,0,103},{6,10,452},{7,10,312},{138,10,219},{138,10,589},{4,10,333},{\n9,10,176},{12,10,353},{141,10,187},{135,11,329},{132,11,469},{5,0,835},{134,0,\n483},{134,11,1743},{5,11,929},{6,11,340},{8,11,376},{136,11,807},{134,10,1685},{\n132,0,677},{5,11,218},{7,11,1610},{138,11,83},{5,11,571},{135,11,1842},{132,11,\n455},{137,0,70},{135,0,1405},{7,10,135},{8,10,7},{8,10,62},{9,10,243},{10,10,658\n},{10,10,697},{11,10,456},{139,10,756},{9,10,395},{138,10,79},{137,0,108},{6,11,\n161},{7,11,372},{137,11,597},{132,11,349},{132,0,777},{132,0,331},{135,10,631},{\n133,0,747},{6,11,432},{6,11,608},{139,11,322},{138,10,835},{5,11,468},{7,11,1809\n},{10,11,325},{11,11,856},{12,11,345},{143,11,104},{133,11,223},{7,10,406},{7,10\n,459},{8,10,606},{139,10,726},{132,11,566},{142,0,68},{4,11,59},{135,11,1394},{6\n,11,436},{139,11,481},{4,11,48},{5,11,271},{135,11,953},{139,11,170},{5,11,610},\n{136,11,457},{133,11,755},{135,11,1217},{133,10,612},{132,11,197},{132,0,505},{4\n,10,372},{7,10,482},{8,10,158},{9,10,602},{9,10,615},{10,10,245},{10,10,678},{10\n,10,744},{11,10,248},{139,10,806},{133,0,326},{5,10,854},{135,10,1991},{4,0,691}\n,{146,0,16},{6,0,628},{9,0,35},{10,0,680},{10,0,793},{11,0,364},{13,0,357},{143,\n0,164},{138,0,654},{6,0,32},{7,0,385},{7,0,757},{7,0,1916},{8,0,37},{8,0,94},{8,\n0,711},{9,0,541},{10,0,162},{10,0,795},{11,0,989},{11,0,1010},{12,0,14},{142,0,\n308},{133,11,217},{6,0,152},{6,0,349},{6,0,1682},{7,0,1252},{8,0,112},{9,0,435},\n{9,0,668},{10,0,290},{10,0,319},{10,0,815},{11,0,180},{11,0,837},{12,0,240},{13,\n0,152},{13,0,219},{142,0,158},{4,0,581},{134,0,726},{5,10,195},{135,10,1685},{6,\n0,126},{7,0,573},{8,0,397},{142,0,44},{138,0,89},{7,10,1997},{8,10,730},{139,10,\n1006},{134,0,1531},{134,0,1167},{5,0,926},{5,10,751},{140,0,203},{4,11,165},{7,\n11,1398},{135,11,1829},{7,0,1232},{137,0,531},{135,10,821},{134,0,943},{133,0,\n670},{4,0,880},{139,0,231},{134,0,1617},{135,0,1957},{5,11,9},{7,11,297},{7,11,\n966},{140,11,306},{6,0,975},{134,0,985},{5,10,950},{5,10,994},{134,10,351},{12,\n11,21},{151,11,7},{5,11,146},{6,11,411},{138,11,721},{7,0,242},{135,0,1942},{6,\n11,177},{135,11,467},{5,0,421},{7,10,47},{137,10,684},{5,0,834},{7,0,1202},{8,0,\n14},{9,0,481},{137,0,880},{138,0,465},{4,10,350},{6,0,688},{137,0,834},{132,0,\n855},{4,0,357},{6,0,172},{7,0,143},{137,0,413},{133,11,200},{132,0,590},{7,10,\n1812},{13,10,259},{13,10,356},{14,10,242},{147,10,114},{133,10,967},{4,10,473},{\n7,10,623},{8,10,808},{9,10,871},{9,10,893},{11,0,114},{11,10,431},{12,10,112},{\n12,10,217},{12,10,243},{12,10,562},{12,10,663},{12,10,683},{13,10,141},{13,10,\n197},{13,10,227},{13,10,406},{13,10,487},{14,10,156},{14,10,203},{14,10,224},{14\n,10,256},{18,10,58},{150,10,0},{138,10,286},{4,10,222},{7,10,286},{136,10,629},{\n5,0,169},{7,0,333},{136,0,45},{134,11,481},{132,0,198},{4,0,24},{4,11,84},{5,0,\n140},{5,0,185},{7,0,1500},{7,11,1482},{10,11,76},{10,11,142},{11,0,565},{139,0,\n838},{133,0,585},{141,10,306},{133,11,1015},{4,11,315},{5,11,507},{135,11,1370},\n{136,10,146},{6,0,691},{134,0,1503},{4,0,334},{133,0,593},{4,10,465},{135,10,\n1663},{142,11,173},{135,0,913},{6,11,1722},{140,0,116},{134,0,1360},{132,0,802},\n{8,11,222},{8,11,476},{9,11,238},{11,11,516},{11,11,575},{15,11,109},{146,11,100\n},{6,0,308},{7,10,138},{7,10,517},{9,0,673},{139,10,238},{132,0,709},{6,0,1876},\n{6,0,1895},{9,0,994},{9,0,1006},{12,0,829},{12,0,888},{12,0,891},{146,0,185},{\n148,10,94},{4,0,228},{133,0,897},{5,10,495},{7,0,1840},{7,10,834},{9,10,733},{\n139,10,378},{133,10,559},{6,10,21},{6,10,1737},{7,10,1444},{136,10,224},{4,0,608\n},{133,0,497},{6,11,40},{135,11,1781},{134,0,1573},{135,0,2039},{6,0,540},{136,0\n,136},{4,0,897},{5,0,786},{133,10,519},{6,0,1878},{6,0,1884},{9,0,938},{9,0,948}\n,{9,0,955},{9,0,973},{9,0,1012},{12,0,895},{12,0,927},{143,0,254},{134,0,1469},{\n133,0,999},{4,0,299},{135,0,1004},{4,0,745},{133,0,578},{136,11,574},{133,0,456}\n,{134,0,1457},{4,10,402},{135,0,1679},{7,0,693},{8,0,180},{8,10,323},{8,10,479},\n{140,0,163},{11,10,580},{142,10,201},{5,10,59},{135,10,672},{132,11,354},{146,10\n,34},{4,0,755},{135,11,1558},{7,0,1740},{146,0,48},{4,10,85},{135,10,549},{139,0\n,338},{133,10,94},{134,0,1091},{135,11,469},{5,11,830},{12,0,695},{12,0,704},{14\n,11,338},{20,0,113},{148,11,81},{135,0,1464},{6,10,11},{135,10,187},{135,0,975},\n{4,10,522},{141,0,335},{134,0,1979},{5,11,496},{135,11,203},{4,10,52},{135,10,\n661},{7,0,1566},{8,0,269},{9,0,212},{9,0,718},{14,0,15},{14,0,132},{142,0,227},{\n4,0,890},{4,10,383},{5,0,805},{5,0,819},{5,0,961},{5,10,520},{6,0,396},{6,0,1631\n},{6,0,1678},{7,0,1967},{7,0,2041},{9,0,630},{11,0,8},{11,0,1019},{12,0,176},{13\n,0,225},{14,0,292},{149,0,24},{134,11,547},{135,11,1748},{5,11,88},{137,11,239},\n{146,11,128},{7,11,650},{135,11,1310},{4,10,281},{5,10,38},{7,10,194},{7,10,668}\n,{7,10,1893},{137,10,397},{135,0,1815},{9,10,635},{139,10,559},{7,0,1505},{10,0,\n190},{10,0,634},{11,0,792},{12,0,358},{140,0,447},{5,0,0},{6,0,536},{7,0,604},{\n13,0,445},{145,0,126},{7,11,1076},{9,11,80},{11,11,78},{11,11,421},{11,11,534},{\n140,11,545},{8,0,966},{10,0,1023},{14,11,369},{146,11,72},{135,11,1641},{6,0,232\n},{6,0,412},{7,0,1074},{8,0,9},{8,0,157},{8,0,786},{9,0,196},{9,0,352},{9,0,457}\n,{10,0,337},{11,0,232},{11,0,877},{12,0,480},{140,0,546},{135,0,958},{4,0,382},{\n136,0,579},{4,0,212},{135,0,1206},{4,11,497},{5,11,657},{135,11,1584},{132,0,681\n},{8,0,971},{138,0,965},{5,10,448},{136,10,535},{14,0,16},{146,0,44},{11,0,584},\n{11,0,616},{11,11,584},{11,11,616},{14,0,275},{142,11,275},{136,11,13},{7,10,610\n},{135,10,1501},{7,11,642},{8,11,250},{11,11,123},{11,11,137},{13,11,48},{142,11\n,95},{133,0,655},{17,0,67},{147,0,74},{134,0,751},{134,0,1967},{6,0,231},{136,0,\n423},{5,0,300},{138,0,1016},{4,10,319},{5,10,699},{138,10,673},{6,0,237},{6,10,\n336},{7,0,611},{8,0,100},{8,10,552},{9,0,416},{9,10,285},{10,10,99},{11,0,335},{\n11,10,568},{12,0,173},{146,0,101},{134,0,1370},{7,10,1406},{9,10,218},{141,10,\n222},{133,10,256},{135,0,1208},{14,11,213},{148,11,38},{6,0,1219},{135,11,1642},\n{13,0,417},{14,0,129},{143,0,15},{10,11,545},{140,11,301},{17,10,39},{148,10,36}\n,{133,0,199},{4,11,904},{133,11,794},{12,0,427},{146,0,38},{134,0,949},{7,10,634\n},{136,0,665},{132,10,618},{135,10,259},{132,10,339},{133,11,761},{141,10,169},{\n132,10,759},{5,0,688},{7,0,539},{135,0,712},{7,11,386},{138,11,713},{134,0,1186}\n,{6,11,7},{6,11,35},{7,11,147},{7,11,1069},{7,11,1568},{7,11,1575},{7,11,1917},{\n8,11,43},{8,11,208},{9,11,128},{9,11,866},{10,11,20},{11,11,981},{147,11,33},{7,\n11,893},{8,10,482},{141,11,424},{6,0,312},{6,0,1715},{10,0,584},{11,0,546},{11,0\n,692},{12,0,259},{12,0,295},{13,0,46},{141,0,154},{5,10,336},{6,10,341},{6,10,\n478},{6,10,1763},{136,10,386},{137,0,151},{132,0,588},{152,0,4},{6,11,322},{9,11\n,552},{11,11,274},{13,11,209},{13,11,499},{14,11,85},{15,11,126},{145,11,70},{\n135,10,73},{4,0,231},{5,0,61},{6,0,104},{7,0,729},{7,0,964},{7,0,1658},{140,0,\n414},{6,0,263},{138,0,757},{135,10,1971},{4,0,612},{133,0,561},{132,0,320},{135,\n10,1344},{8,11,83},{8,11,817},{9,11,28},{9,11,29},{9,11,885},{10,11,387},{11,11,\n633},{11,11,740},{13,11,235},{13,11,254},{15,11,143},{143,11,146},{5,10,396},{\n134,10,501},{140,11,49},{132,0,225},{4,10,929},{5,10,799},{8,10,46},{136,10,740}\n,{4,0,405},{7,0,817},{14,0,58},{17,0,37},{146,0,124},{133,0,974},{4,11,412},{133\n,11,581},{4,10,892},{133,10,770},{4,0,996},{134,0,2026},{4,0,527},{5,0,235},{7,0\n,1239},{11,0,131},{140,0,370},{7,11,421},{9,0,16},{141,0,386},{7,0,956},{7,0,\n1157},{7,0,1506},{7,0,1606},{7,0,1615},{7,0,1619},{7,0,1736},{7,0,1775},{8,0,590\n},{9,0,324},{9,0,736},{9,0,774},{9,0,776},{9,0,784},{10,0,567},{10,0,708},{11,0,\n518},{11,0,613},{11,0,695},{11,0,716},{11,0,739},{11,0,770},{11,0,771},{11,0,848\n},{11,0,857},{11,0,931},{11,0,947},{12,0,326},{12,0,387},{12,0,484},{12,0,528},{\n12,0,552},{12,0,613},{13,0,189},{13,0,256},{13,0,340},{13,0,432},{13,0,436},{13,\n0,440},{13,0,454},{14,0,174},{14,0,220},{14,0,284},{14,0,390},{145,0,121},{135,\n10,158},{9,0,137},{138,0,221},{4,11,110},{10,11,415},{10,11,597},{142,11,206},{\n141,11,496},{135,11,205},{151,10,25},{135,11,778},{7,10,2001},{7,11,1656},{9,11,\n369},{10,11,338},{10,11,490},{11,11,154},{11,11,545},{11,11,775},{13,11,77},{141\n,11,274},{4,11,444},{10,11,146},{140,11,9},{7,0,390},{138,0,140},{135,0,1144},{\n134,0,464},{7,10,1461},{140,10,91},{132,10,602},{4,11,283},{135,11,1194},{5,0,\n407},{11,0,204},{11,0,243},{11,0,489},{12,0,293},{19,0,37},{20,0,73},{150,0,38},\n{7,0,1218},{136,0,303},{4,10,13},{5,0,325},{5,10,567},{7,10,1498},{8,0,5},{8,0,\n227},{9,0,105},{9,10,124},{10,0,585},{11,10,521},{12,0,614},{140,10,405},{135,10\n,1006},{6,11,1720},{7,0,800},{138,0,12},{135,0,1783},{132,10,735},{138,10,812},{\n4,10,170},{135,10,323},{6,0,621},{13,0,504},{144,0,89},{5,10,304},{135,10,1403},\n{137,11,216},{6,0,920},{6,0,1104},{9,11,183},{139,11,286},{4,0,376},{133,10,742}\n,{134,0,218},{8,0,641},{11,0,388},{140,0,580},{7,0,454},{7,0,782},{8,0,768},{140\n,0,686},{137,11,33},{133,10,111},{144,0,0},{10,0,676},{140,0,462},{6,0,164},{136\n,11,735},{133,10,444},{150,0,50},{7,11,1862},{12,11,491},{12,11,520},{13,11,383}\n,{14,11,244},{146,11,12},{5,11,132},{9,11,486},{9,11,715},{10,11,458},{11,11,373\n},{11,11,668},{11,11,795},{11,11,897},{12,11,272},{12,11,424},{12,11,539},{12,11\n,558},{14,11,245},{14,11,263},{14,11,264},{14,11,393},{142,11,403},{8,10,123},{\n15,10,6},{144,10,7},{6,0,285},{8,0,654},{11,0,749},{12,0,190},{12,0,327},{13,0,\n120},{13,0,121},{13,0,327},{15,0,47},{146,0,40},{5,11,8},{6,11,89},{6,11,400},{7\n,11,1569},{7,11,1623},{7,11,1850},{8,11,218},{8,11,422},{9,11,570},{138,11,626},\n{6,11,387},{7,11,882},{141,11,111},{6,0,343},{6,11,224},{7,0,195},{7,11,877},{9,\n0,226},{9,11,647},{10,0,197},{10,0,575},{11,0,502},{139,0,899},{5,10,937},{135,\n10,100},{135,11,790},{150,0,29},{147,0,8},{134,0,1812},{149,0,8},{135,11,394},{7\n,0,1125},{9,0,143},{11,0,61},{14,0,405},{150,0,21},{10,11,755},{147,11,29},{9,11\n,378},{141,11,162},{135,10,922},{5,10,619},{133,10,698},{134,0,1327},{6,0,1598},\n{137,0,575},{9,11,569},{12,11,12},{12,11,81},{12,11,319},{13,11,69},{14,11,259},\n{16,11,87},{17,11,1},{17,11,21},{17,11,24},{18,11,15},{18,11,56},{18,11,59},{18,\n11,127},{18,11,154},{19,11,19},{148,11,31},{6,0,895},{135,11,1231},{5,0,959},{7,\n11,124},{136,11,38},{5,11,261},{7,11,78},{7,11,199},{8,11,815},{9,11,126},{138,\n11,342},{5,10,917},{134,10,1659},{5,11,595},{7,0,1759},{135,11,1863},{136,0,173}\n,{134,0,266},{142,0,261},{132,11,628},{5,10,251},{5,10,956},{8,10,268},{9,10,214\n},{146,10,142},{7,11,266},{136,11,804},{135,11,208},{6,11,79},{7,11,1021},{135,\n11,1519},{11,11,704},{141,11,396},{5,10,346},{5,10,711},{136,10,390},{136,11,741\n},{134,11,376},{134,0,1427},{6,0,1033},{6,0,1217},{136,0,300},{133,10,624},{6,11\n,100},{7,11,244},{7,11,632},{7,11,1609},{8,11,178},{8,11,638},{141,11,58},{5,10,\n783},{6,0,584},{7,10,1998},{135,10,2047},{5,0,427},{5,0,734},{7,0,478},{136,0,52\n},{7,0,239},{11,0,217},{142,0,165},{134,0,1129},{6,0,168},{6,0,1734},{7,0,20},{7\n,0,1056},{8,0,732},{9,0,406},{9,0,911},{138,0,694},{132,10,594},{133,11,791},{7,\n11,686},{8,11,33},{8,11,238},{10,11,616},{11,11,467},{11,11,881},{13,11,217},{13\n,11,253},{142,11,268},{137,11,476},{134,0,418},{133,0,613},{132,0,632},{132,11,\n447},{7,0,32},{7,0,984},{8,0,85},{8,0,709},{9,0,579},{9,0,847},{9,0,856},{10,0,\n799},{11,0,258},{11,0,1007},{12,0,331},{12,0,615},{13,0,188},{13,0,435},{14,0,8}\n,{15,0,165},{16,0,27},{16,11,35},{148,0,40},{4,11,128},{5,11,415},{6,11,462},{7,\n11,294},{7,11,578},{10,11,710},{139,11,86},{5,0,694},{136,0,909},{5,10,37},{6,10\n,39},{6,10,451},{7,0,1109},{7,10,218},{7,10,1166},{7,10,1687},{8,10,662},{11,0,7\n},{144,10,2},{136,11,587},{6,11,427},{7,11,1018},{138,11,692},{4,11,195},{6,10,\n508},{135,11,802},{4,0,167},{135,0,82},{5,0,62},{6,0,24},{6,0,534},{7,0,74},{7,0\n,678},{7,0,684},{7,0,1043},{7,0,1072},{8,0,280},{8,0,541},{8,0,686},{9,0,258},{\n10,0,519},{11,0,252},{140,0,282},{138,0,33},{4,0,359},{133,11,738},{7,0,980},{7,\n10,635},{7,10,796},{8,10,331},{9,0,328},{9,10,330},{9,10,865},{10,10,119},{10,10\n,235},{11,10,111},{11,10,129},{11,10,240},{12,10,31},{12,10,66},{12,10,222},{12,\n10,269},{12,10,599},{12,10,684},{12,10,689},{12,10,691},{13,0,186},{13,0,364},{\n142,10,345},{137,10,527},{6,0,596},{7,0,585},{135,10,702},{134,11,1683},{133,0,\n211},{6,0,145},{141,0,336},{134,0,1130},{6,10,37},{7,0,873},{7,10,1666},{8,10,\n195},{8,10,316},{9,10,178},{9,10,276},{9,10,339},{9,10,536},{10,10,102},{10,10,\n362},{10,10,785},{11,10,55},{11,10,149},{11,10,773},{13,10,416},{13,10,419},{14,\n10,38},{14,10,41},{142,10,210},{8,0,840},{136,0,841},{132,0,263},{5,11,3},{8,11,\n578},{9,11,118},{10,11,705},{12,11,383},{141,11,279},{132,0,916},{133,11,229},{\n133,10,645},{8,11,102},{10,11,578},{10,11,672},{12,11,496},{13,11,408},{14,11,\n121},{15,0,155},{16,0,79},{145,11,106},{4,0,599},{5,0,592},{6,0,1634},{7,0,5},{7\n,0,55},{7,0,67},{7,0,97},{7,0,691},{7,0,979},{7,0,1600},{7,0,1697},{8,0,207},{8,\n0,214},{8,0,231},{8,0,294},{8,0,336},{8,0,428},{8,0,471},{8,0,622},{8,0,626},{8,\n0,679},{8,0,759},{8,0,829},{9,0,11},{9,0,246},{9,0,484},{9,0,573},{9,0,706},{9,0\n,762},{9,0,798},{9,0,855},{9,0,870},{9,0,912},{10,0,303},{10,0,335},{10,0,424},{\n10,0,461},{10,0,543},{10,0,759},{10,0,814},{11,0,59},{11,0,199},{11,0,235},{11,0\n,590},{11,0,631},{11,0,929},{11,0,963},{11,0,987},{12,0,114},{12,0,182},{12,0,\n226},{12,0,332},{12,0,439},{12,0,575},{12,0,598},{12,0,675},{13,0,8},{13,0,125},\n{13,0,194},{13,0,287},{14,0,197},{14,0,383},{15,0,53},{17,0,63},{19,0,46},{19,0,\n98},{19,0,106},{148,0,85},{4,10,290},{135,0,1356},{6,10,70},{7,10,1292},{10,10,\n762},{139,10,288},{150,11,55},{4,0,593},{8,11,115},{8,11,350},{9,11,489},{10,11,\n128},{11,11,306},{12,11,373},{14,11,30},{17,11,79},{147,11,80},{135,11,1235},{\n134,0,1392},{4,11,230},{133,11,702},{147,0,126},{7,10,131},{7,10,422},{8,10,210}\n,{140,10,573},{134,0,1179},{139,11,435},{139,10,797},{134,11,1728},{4,0,162},{18\n,11,26},{19,11,42},{20,11,43},{21,11,0},{23,11,27},{152,11,14},{132,10,936},{5,\n10,453},{6,0,765},{134,10,441},{133,0,187},{135,0,1286},{6,0,635},{6,0,904},{6,0\n,1210},{134,0,1489},{4,0,215},{8,0,890},{9,0,38},{10,0,923},{11,0,23},{11,0,127}\n,{139,0,796},{6,0,1165},{134,0,1306},{7,0,716},{13,0,97},{141,0,251},{132,10,653\n},{136,0,657},{146,10,80},{5,11,622},{7,11,1032},{11,11,26},{11,11,213},{11,11,\n707},{12,11,380},{13,11,226},{141,11,355},{5,11,70},{6,0,299},{6,11,334},{9,11,\n171},{11,11,637},{12,11,202},{14,11,222},{145,11,42},{142,0,134},{4,11,23},{5,11\n,313},{5,11,1014},{6,11,50},{6,11,51},{7,11,142},{7,11,384},{9,11,783},{139,11,\n741},{4,11,141},{7,11,559},{8,11,640},{9,11,460},{12,11,183},{141,11,488},{136,\n11,614},{7,10,1368},{8,10,232},{8,10,361},{10,10,682},{138,10,742},{137,10,534},\n{6,0,1082},{140,0,658},{137,10,27},{135,0,2002},{142,10,12},{4,0,28},{5,0,440},{\n7,0,248},{11,0,833},{140,0,344},{7,10,736},{139,10,264},{134,10,1657},{134,0,\n1654},{138,0,531},{5,11,222},{9,11,140},{138,11,534},{6,0,634},{6,0,798},{134,0,\n840},{138,11,503},{135,10,127},{133,0,853},{5,11,154},{7,11,1491},{10,11,379},{\n138,11,485},{6,0,249},{7,0,1234},{139,0,573},{133,11,716},{7,11,1570},{140,11,\n542},{136,10,364},{138,0,527},{4,11,91},{5,11,388},{5,11,845},{6,11,206},{6,11,\n252},{6,11,365},{7,11,136},{7,11,531},{8,11,264},{136,11,621},{134,0,1419},{135,\n11,1441},{7,0,49},{7,0,392},{8,0,20},{8,0,172},{8,0,690},{9,0,383},{9,0,845},{10\n,0,48},{11,0,293},{11,0,832},{11,0,920},{11,0,984},{141,0,221},{5,0,858},{133,0,\n992},{5,0,728},{137,10,792},{5,10,909},{9,10,849},{138,10,805},{7,0,525},{7,0,\n1579},{8,0,497},{136,0,573},{6,0,268},{137,0,62},{135,11,576},{134,0,1201},{5,11\n,771},{5,11,863},{5,11,898},{6,11,1632},{6,11,1644},{134,11,1780},{133,11,331},{\n7,0,193},{7,0,1105},{7,10,397},{8,10,124},{8,10,619},{9,10,305},{10,0,495},{11,\n10,40},{12,10,349},{13,10,134},{13,10,295},{14,10,155},{15,10,120},{146,10,105},\n{138,0,106},{5,11,107},{6,0,859},{7,11,201},{136,11,518},{6,11,446},{135,11,1817\n},{4,10,262},{7,10,342},{141,0,23},{133,10,641},{137,11,851},{6,0,925},{137,0,\n813},{132,11,504},{6,0,613},{136,0,223},{4,10,99},{6,10,250},{6,10,346},{8,10,\n127},{138,10,81},{136,0,953},{132,10,915},{139,11,892},{5,10,75},{9,10,517},{10,\n10,470},{12,10,155},{141,10,224},{4,0,666},{7,0,1017},{7,11,996},{138,11,390},{5\n,11,883},{133,11,975},{14,10,83},{142,11,83},{4,0,670},{5,11,922},{134,11,1707},\n{135,0,216},{7,11,787},{9,0,40},{139,0,136},{5,10,954},{5,11,993},{7,11,515},{\n137,11,91},{139,0,259},{6,10,304},{7,0,1114},{8,10,418},{9,0,310},{9,0,682},{10,\n0,440},{11,10,341},{11,10,675},{141,0,40},{9,10,410},{11,10,425},{142,0,296},{10\n,11,377},{12,11,363},{13,11,68},{13,11,94},{14,11,108},{142,11,306},{7,0,1401},{\n135,0,1476},{4,0,296},{6,0,475},{7,0,401},{7,0,1410},{7,0,1594},{7,0,1674},{8,0,\n63},{8,0,660},{137,0,74},{4,0,139},{4,0,388},{140,0,188},{132,0,797},{132,11,766\n},{5,11,103},{7,11,921},{8,11,580},{8,11,593},{8,11,630},{138,11,28},{4,11,911},\n{5,11,867},{133,11,1013},{134,10,14},{134,0,1572},{134,10,1708},{5,10,113},{6,10\n,243},{7,10,1865},{11,10,161},{16,10,37},{17,10,99},{149,0,39},{7,11,1563},{141,\n11,182},{5,11,135},{6,11,519},{7,11,1722},{10,11,271},{11,11,261},{145,11,54},{\n132,10,274},{134,0,1594},{4,11,300},{5,11,436},{135,11,484},{4,0,747},{6,0,290},\n{7,0,649},{7,0,1479},{135,0,1583},{133,11,535},{147,11,82},{133,0,232},{137,0,\n887},{135,10,166},{136,0,521},{4,0,14},{7,0,472},{7,0,1801},{10,0,748},{141,0,\n458},{134,0,741},{134,0,992},{9,10,304},{144,0,111},{4,0,425},{5,11,387},{7,11,\n557},{12,11,547},{142,11,86},{135,11,1747},{5,10,654},{135,11,1489},{4,11,6},{5,\n11,708},{7,0,789},{136,11,75},{6,10,273},{10,10,188},{13,10,377},{146,10,77},{4,\n11,303},{6,0,1593},{7,11,619},{10,11,547},{10,11,687},{11,11,122},{140,11,601},{\n134,0,1768},{135,10,410},{138,11,772},{11,0,233},{139,10,524},{5,0,943},{134,0,\n1779},{134,10,1785},{136,11,529},{132,0,955},{5,0,245},{6,0,576},{7,0,582},{136,\n0,225},{132,10,780},{142,0,241},{134,0,1943},{4,11,106},{7,11,310},{7,11,1785},{\n10,11,690},{139,11,717},{134,0,1284},{5,11,890},{133,11,988},{6,11,626},{142,11,\n431},{10,11,706},{145,11,32},{137,11,332},{132,11,698},{135,0,709},{5,10,948},{\n138,11,17},{136,0,554},{134,0,1564},{139,10,941},{132,0,443},{134,0,909},{134,11\n,84},{142,0,280},{4,10,532},{5,10,706},{135,10,662},{132,0,729},{5,10,837},{6,10\n,1651},{139,10,985},{135,10,1861},{4,0,348},{152,11,3},{5,11,986},{6,11,130},{7,\n11,1582},{8,11,458},{10,11,101},{10,11,318},{138,11,823},{134,0,758},{4,0,298},{\n137,0,848},{4,10,330},{7,10,933},{7,10,2012},{136,10,292},{7,11,1644},{137,11,\n129},{6,0,1422},{7,10,767},{137,0,829},{5,0,164},{7,0,121},{142,0,189},{7,0,812}\n,{7,0,1261},{7,0,1360},{9,0,632},{140,0,352},{135,11,1788},{139,0,556},{135,11,\n997},{145,10,114},{4,0,172},{9,0,611},{9,10,883},{10,0,436},{12,0,673},{141,0,\n255},{10,10,274},{139,0,530},{133,0,844},{134,0,984},{4,10,703},{7,10,207},{13,0\n,232},{146,0,35},{132,10,571},{9,0,263},{10,0,147},{138,0,492},{7,11,1756},{137,\n11,98},{5,10,873},{5,10,960},{8,10,823},{137,10,881},{133,0,537},{132,0,859},{7,\n11,1046},{139,11,160},{137,0,842},{139,10,283},{5,10,33},{6,10,470},{139,10,424}\n,{6,11,45},{7,11,433},{8,11,129},{9,11,21},{10,11,392},{11,11,79},{12,11,499},{\n13,11,199},{141,11,451},{135,0,1291},{135,10,1882},{7,11,558},{136,11,353},{134,\n0,1482},{5,0,230},{5,0,392},{6,0,420},{9,0,568},{140,0,612},{6,0,262},{7,10,90},\n{7,10,664},{7,10,830},{7,10,1380},{7,10,2025},{8,10,448},{8,10,828},{8,11,81},{9\n,11,189},{9,11,201},{11,11,478},{11,11,712},{141,11,338},{142,0,31},{5,11,353},{\n151,11,26},{132,0,753},{4,0,0},{5,0,41},{7,0,1459},{7,0,1469},{7,0,1859},{9,0,\n549},{139,0,905},{9,10,417},{137,10,493},{135,11,1113},{133,0,696},{141,11,448},\n{134,10,295},{132,0,834},{4,0,771},{5,10,1019},{6,11,25},{7,11,855},{7,11,1258},\n{144,11,32},{134,0,1076},{133,0,921},{133,0,674},{4,11,4},{7,11,1118},{7,11,1320\n},{7,11,1706},{8,11,277},{9,11,622},{10,11,9},{11,11,724},{12,11,350},{12,11,397\n},{13,11,28},{13,11,159},{15,11,89},{18,11,5},{19,11,9},{20,11,34},{150,11,47},{\n134,10,208},{6,0,444},{136,0,308},{6,0,180},{7,0,1137},{8,0,751},{139,0,805},{4,\n0,183},{7,0,271},{11,0,824},{11,0,952},{13,0,278},{13,0,339},{13,0,482},{14,0,\n424},{148,0,99},{7,11,317},{135,11,569},{4,0,19},{5,0,477},{5,0,596},{6,0,505},{\n7,0,1221},{11,0,907},{12,0,209},{141,0,214},{135,0,1215},{6,0,271},{7,0,398},{7,\n10,448},{7,10,1629},{7,10,1813},{8,0,387},{8,10,442},{9,10,710},{10,0,344},{10,\n10,282},{138,10,722},{11,10,844},{12,10,104},{140,10,625},{134,11,255},{133,10,\n787},{134,0,1645},{11,11,956},{151,11,3},{6,0,92},{6,0,188},{7,0,209},{7,0,1269}\n,{7,0,1524},{7,0,1876},{8,0,661},{10,0,42},{10,0,228},{11,0,58},{11,0,1020},{12,\n0,58},{12,0,118},{141,0,32},{4,0,459},{133,0,966},{4,11,536},{7,11,1141},{10,11,\n723},{139,11,371},{140,0,330},{134,0,1557},{7,11,285},{135,11,876},{136,10,491},\n{135,11,560},{6,0,18},{7,0,179},{7,0,932},{8,0,548},{8,0,757},{9,0,54},{9,0,65},\n{9,0,532},{9,0,844},{10,0,113},{10,0,117},{10,0,315},{10,0,560},{10,0,622},{10,0\n,798},{11,0,153},{11,0,351},{11,0,375},{12,0,78},{12,0,151},{12,0,392},{12,0,666\n},{14,0,248},{143,0,23},{4,11,690},{134,0,1742},{4,10,403},{5,10,441},{7,10,450}\n,{10,10,840},{11,10,101},{12,10,193},{141,10,430},{133,0,965},{134,0,182},{10,0,\n65},{10,0,488},{138,0,497},{135,11,1346},{6,0,973},{6,0,1158},{10,11,200},{19,11\n,2},{151,11,22},{4,11,190},{133,11,554},{133,10,679},{7,0,328},{137,10,326},{133\n,11,1001},{9,0,588},{138,0,260},{133,11,446},{135,10,1128},{135,10,1796},{147,11\n,119},{134,0,1786},{6,0,1328},{6,0,1985},{8,0,962},{138,0,1017},{135,0,308},{4,\n10,574},{7,10,350},{7,10,1024},{8,10,338},{9,10,677},{10,10,808},{139,0,508},{\n138,11,752},{135,10,1081},{137,11,96},{7,10,1676},{135,10,2037},{136,0,588},{132\n,11,304},{133,0,614},{140,0,793},{136,0,287},{137,10,297},{141,10,37},{6,11,53},\n{6,11,199},{7,11,1408},{8,11,32},{8,11,93},{9,11,437},{10,11,397},{10,11,629},{\n11,11,593},{11,11,763},{13,11,326},{145,11,35},{134,11,105},{9,11,320},{10,11,\n506},{138,11,794},{5,11,114},{5,11,255},{141,11,285},{140,0,290},{7,11,2035},{8,\n11,19},{9,11,89},{138,11,831},{134,0,1136},{6,10,306},{7,0,719},{7,10,1140},{7,\n10,1340},{8,0,796},{8,0,809},{8,0,834},{8,10,133},{138,10,449},{139,10,1011},{5,\n0,210},{6,0,213},{7,0,60},{10,0,364},{139,0,135},{5,0,607},{8,0,326},{136,0,490}\n,{138,11,176},{132,0,701},{5,0,472},{7,0,380},{137,0,758},{135,0,1947},{6,0,1079\n},{138,0,278},{138,11,391},{5,10,329},{8,10,260},{139,11,156},{4,0,386},{7,0,41}\n,{8,0,405},{8,0,728},{9,0,497},{11,0,110},{11,0,360},{15,0,37},{144,0,84},{5,0,\n46},{7,0,1452},{7,0,1480},{8,0,634},{140,0,472},{136,0,961},{4,0,524},{136,0,810\n},{10,0,238},{141,0,33},{132,10,657},{152,10,7},{133,0,532},{5,0,997},{135,10,\n1665},{7,11,594},{7,11,851},{7,11,1858},{9,11,411},{9,11,574},{9,11,666},{9,11,\n737},{10,11,346},{10,11,712},{11,11,246},{11,11,432},{11,11,517},{11,11,647},{11\n,11,679},{11,11,727},{12,11,304},{12,11,305},{12,11,323},{12,11,483},{12,11,572}\n,{12,11,593},{12,11,602},{13,11,95},{13,11,101},{13,11,171},{13,11,315},{13,11,\n378},{13,11,425},{13,11,475},{14,11,63},{14,11,380},{14,11,384},{15,11,133},{18,\n11,112},{148,11,72},{5,11,955},{136,11,814},{134,0,1301},{5,10,66},{7,10,1896},{\n136,10,288},{133,11,56},{134,10,1643},{6,0,1298},{148,11,100},{5,0,782},{5,0,829\n},{6,0,671},{6,0,1156},{6,0,1738},{137,11,621},{4,0,306},{5,0,570},{5,10,91},{5,\n10,648},{5,10,750},{5,10,781},{6,10,54},{6,10,112},{6,10,402},{6,10,1732},{7,0,\n1347},{7,10,315},{7,10,749},{7,10,1900},{9,10,78},{9,10,508},{10,10,611},{10,10,\n811},{11,10,510},{11,10,728},{13,10,36},{14,10,39},{16,10,83},{17,10,124},{148,\n10,30},{8,10,570},{9,11,477},{141,11,78},{4,11,639},{10,10,322},{10,10,719},{10,\n11,4},{11,10,407},{11,11,638},{12,11,177},{148,11,57},{7,0,1823},{139,0,693},{5,\n11,758},{7,0,759},{8,10,125},{8,10,369},{8,10,524},{10,10,486},{11,10,13},{11,10\n,381},{11,10,736},{11,10,766},{11,10,845},{13,10,114},{13,10,292},{142,10,47},{6\n,10,1684},{6,10,1731},{7,0,1932},{7,10,356},{8,10,54},{8,10,221},{9,10,225},{9,\n10,356},{10,10,77},{10,10,446},{10,10,731},{12,10,404},{141,10,491},{135,11,552}\n,{135,11,1112},{4,0,78},{5,0,96},{5,0,182},{6,0,1257},{7,0,1724},{7,0,1825},{10,\n0,394},{10,0,471},{11,0,532},{14,0,340},{145,0,88},{139,11,328},{135,0,1964},{\n132,10,411},{4,10,80},{5,10,44},{137,11,133},{5,11,110},{6,11,169},{6,11,1702},{\n7,11,400},{8,11,538},{9,11,184},{9,11,524},{140,11,218},{4,0,521},{5,10,299},{7,\n10,1083},{140,11,554},{6,11,133},{9,11,353},{12,11,628},{146,11,79},{6,0,215},{7\n,0,584},{7,0,1028},{7,0,1473},{7,0,1721},{9,0,424},{138,0,779},{7,0,857},{7,0,\n1209},{7,10,1713},{9,10,537},{10,10,165},{12,10,219},{140,10,561},{4,10,219},{6,\n11,93},{7,10,1761},{7,11,1422},{7,11,1851},{8,11,673},{9,10,86},{9,11,529},{140,\n11,43},{137,11,371},{136,0,671},{5,0,328},{135,0,918},{132,0,529},{9,11,25},{10,\n11,467},{138,11,559},{4,11,335},{135,11,942},{134,0,716},{134,0,1509},{6,0,67},{\n7,0,258},{7,0,1630},{9,0,354},{9,0,675},{10,0,830},{12,10,428},{14,0,80},{145,0,\n80},{134,0,1112},{6,0,141},{7,0,225},{9,0,59},{9,0,607},{10,0,312},{11,0,687},{\n12,0,555},{13,0,373},{13,0,494},{148,0,58},{133,10,514},{8,11,39},{10,11,773},{\n11,11,84},{12,11,205},{142,11,1},{5,11,601},{5,11,870},{136,0,783},{136,11,594},\n{4,10,55},{5,10,301},{6,10,571},{14,10,49},{146,10,102},{132,11,181},{134,11,\n1652},{133,10,364},{4,11,97},{5,11,147},{6,11,286},{7,11,1362},{141,11,176},{4,\n10,76},{7,10,1550},{9,10,306},{9,10,430},{9,10,663},{10,10,683},{11,10,427},{11,\n10,753},{12,10,334},{12,10,442},{14,10,258},{14,10,366},{143,10,131},{137,10,52}\n,{6,0,955},{134,0,1498},{6,11,375},{7,11,169},{7,11,254},{136,11,780},{7,0,430},\n{11,0,46},{14,0,343},{142,11,343},{135,0,1183},{5,0,602},{7,0,2018},{7,11,1447},\n{9,0,418},{137,0,803},{7,11,1044},{136,0,677},{139,11,285},{4,10,656},{135,10,\n779},{135,10,144},{5,11,629},{135,11,1549},{135,10,1373},{138,11,209},{7,10,554}\n,{7,10,605},{141,10,10},{5,10,838},{5,10,841},{134,10,1649},{133,10,1012},{6,0,\n1357},{134,0,1380},{144,0,53},{6,0,590},{7,10,365},{7,10,1357},{7,10,1497},{8,10\n,154},{141,10,281},{133,10,340},{132,11,420},{135,0,329},{147,11,32},{4,0,469},{\n10,11,429},{139,10,495},{8,10,261},{9,10,144},{9,10,466},{10,10,370},{12,10,470}\n,{13,10,144},{142,10,348},{142,0,460},{4,11,325},{9,10,897},{138,11,125},{6,0,\n1743},{6,10,248},{9,10,546},{10,10,535},{11,10,681},{141,10,135},{4,0,990},{5,0,\n929},{6,0,340},{8,0,376},{8,0,807},{8,0,963},{8,0,980},{138,0,1007},{134,0,1603}\n,{140,0,250},{4,11,714},{133,11,469},{134,10,567},{136,10,445},{5,0,218},{7,0,\n1610},{8,0,646},{10,0,83},{11,11,138},{140,11,40},{7,0,1512},{135,0,1794},{135,\n11,1216},{4,11,718},{11,0,0},{144,0,78},{133,0,571},{132,0,455},{134,0,1012},{5,\n11,124},{5,11,144},{6,11,548},{7,11,15},{7,11,153},{137,11,629},{142,11,10},{6,\n11,75},{7,11,1531},{8,11,416},{9,11,240},{9,11,275},{10,11,100},{11,11,658},{11,\n11,979},{12,11,86},{13,11,468},{14,11,66},{14,11,207},{15,11,20},{15,11,25},{144\n,11,58},{132,10,577},{5,11,141},{5,11,915},{6,11,1783},{7,11,211},{7,11,698},{7,\n11,1353},{9,11,83},{9,11,281},{10,11,376},{10,11,431},{11,11,543},{12,11,664},{\n13,11,280},{13,11,428},{14,11,61},{14,11,128},{17,11,52},{145,11,81},{6,0,161},{\n7,0,372},{137,0,597},{132,0,349},{10,11,702},{139,11,245},{134,0,524},{134,10,\n174},{6,0,432},{9,0,751},{139,0,322},{147,11,94},{4,11,338},{133,11,400},{5,0,\n468},{10,0,325},{11,0,856},{12,0,345},{143,0,104},{133,0,223},{132,0,566},{4,11,\n221},{5,11,659},{5,11,989},{7,11,697},{7,11,1211},{138,11,284},{135,11,1070},{4,\n0,59},{135,0,1394},{5,10,878},{5,10,972},{6,0,436},{139,0,481},{4,0,48},{5,0,271\n},{135,0,953},{5,0,610},{136,0,457},{4,0,773},{5,0,618},{137,0,756},{133,0,755},\n{135,0,1217},{138,11,507},{132,10,351},{132,0,197},{143,11,78},{4,11,188},{7,11,\n805},{11,11,276},{142,11,293},{5,11,884},{139,11,991},{132,10,286},{7,10,438},{7\n,10,627},{7,10,1516},{8,10,40},{9,10,56},{9,10,294},{10,0,259},{10,0,428},{11,10\n,969},{11,10,995},{146,10,148},{4,0,356},{5,0,217},{5,0,492},{5,0,656},{8,0,544}\n,{136,11,544},{5,0,259},{6,0,1230},{7,0,414},{7,0,854},{142,0,107},{132,0,1007},\n{15,0,14},{144,0,5},{4,10,738},{134,0,1580},{132,11,596},{132,0,673},{133,10,866\n},{6,0,1843},{135,11,1847},{4,0,165},{7,0,1398},{135,0,1829},{135,11,1634},{147,\n11,65},{6,0,885},{6,0,1009},{137,0,809},{133,10,116},{132,10,457},{136,11,770},{\n9,0,498},{10,11,361},{12,0,181},{142,11,316},{134,11,595},{5,0,9},{7,0,297},{7,0\n,966},{140,0,306},{4,11,89},{5,11,489},{6,11,315},{7,11,553},{7,11,1745},{138,11\n,243},{134,0,1487},{132,0,437},{5,0,146},{6,0,411},{138,0,721},{5,10,527},{6,10,\n189},{135,10,859},{11,10,104},{11,10,554},{15,10,60},{143,10,125},{6,11,1658},{9\n,11,3},{10,11,154},{11,11,641},{13,11,85},{13,11,201},{141,11,346},{6,0,177},{\n135,0,467},{134,0,1377},{134,10,116},{136,11,645},{4,11,166},{5,11,505},{6,11,\n1670},{137,11,110},{133,10,487},{4,10,86},{5,10,667},{5,10,753},{6,10,316},{6,10\n,455},{135,10,946},{133,0,200},{132,0,959},{6,0,1928},{134,0,1957},{139,11,203},\n{150,10,45},{4,10,79},{7,10,1773},{10,10,450},{11,10,589},{13,10,332},{13,10,493\n},{14,10,183},{14,10,334},{14,10,362},{14,10,368},{14,10,376},{14,10,379},{19,10\n,90},{19,10,103},{19,10,127},{148,10,90},{6,0,1435},{135,11,1275},{134,0,481},{7\n,11,445},{8,11,307},{8,11,704},{10,11,41},{10,11,439},{11,11,237},{11,11,622},{\n140,11,201},{135,11,869},{4,0,84},{7,0,1482},{10,0,76},{138,0,142},{11,11,277},{\n144,11,14},{135,11,1977},{4,11,189},{5,11,713},{136,11,57},{133,0,1015},{138,11,\n371},{4,0,315},{5,0,507},{135,0,1370},{4,11,552},{142,10,381},{9,0,759},{16,0,31\n},{16,0,39},{16,0,75},{18,0,24},{20,0,42},{152,0,1},{134,0,712},{134,0,1722},{\n133,10,663},{133,10,846},{8,0,222},{8,0,476},{9,0,238},{11,0,516},{11,0,575},{15\n,0,109},{146,0,100},{5,10,378},{7,0,1402},{7,0,1414},{8,10,465},{9,10,286},{10,\n10,185},{10,10,562},{10,10,635},{11,10,31},{11,10,393},{12,0,456},{13,10,312},{\n18,10,65},{18,10,96},{147,10,89},{4,0,986},{6,0,1958},{6,0,2032},{8,0,934},{138,\n0,985},{7,10,1880},{9,10,680},{139,10,798},{134,10,1770},{145,11,49},{132,11,614\n},{132,10,648},{5,10,945},{6,10,1656},{6,10,1787},{7,10,167},{8,10,824},{9,10,\n391},{10,10,375},{139,10,185},{138,11,661},{7,0,1273},{135,11,1945},{7,0,706},{7\n,0,1058},{138,0,538},{7,10,1645},{8,10,352},{137,10,249},{132,10,152},{11,0,92},\n{11,0,196},{11,0,409},{11,0,450},{11,0,666},{11,0,777},{12,0,262},{13,0,385},{13\n,0,393},{15,0,115},{16,0,45},{145,0,82},{133,10,1006},{6,0,40},{135,0,1781},{9,\n11,614},{139,11,327},{5,10,420},{135,10,1449},{135,0,431},{7,10,832},{138,0,97},\n{6,0,423},{7,0,665},{135,0,1210},{7,0,237},{8,0,664},{9,0,42},{9,0,266},{9,0,380\n},{9,0,645},{10,0,177},{138,0,276},{5,10,351},{135,0,264},{5,10,40},{7,10,598},{\n7,10,1638},{8,0,213},{9,10,166},{9,10,640},{9,10,685},{9,10,773},{11,10,215},{13\n,10,65},{14,10,172},{14,10,317},{145,10,6},{5,11,84},{134,11,163},{8,10,60},{9,\n10,343},{139,10,769},{137,0,455},{133,11,410},{8,0,906},{12,0,700},{12,0,706},{\n140,0,729},{21,11,33},{150,11,40},{7,10,1951},{8,10,765},{8,10,772},{140,10,671}\n,{7,10,108},{8,10,219},{8,10,388},{9,10,639},{9,10,775},{11,10,275},{140,10,464}\n,{5,11,322},{7,11,1941},{8,11,186},{9,11,262},{10,11,187},{14,11,208},{146,11,\n130},{139,0,624},{5,11,227},{8,0,574},{140,11,29},{7,11,1546},{11,11,299},{142,\n11,407},{5,10,15},{6,10,56},{7,10,1758},{8,10,500},{9,10,730},{11,10,331},{13,10\n,150},{142,10,282},{7,11,1395},{8,11,486},{9,11,236},{9,11,878},{10,11,218},{11,\n11,95},{19,11,17},{147,11,31},{135,11,2043},{4,0,354},{146,11,4},{140,11,80},{\n135,0,1558},{134,10,1886},{5,10,205},{6,10,438},{137,10,711},{133,11,522},{133,\n10,534},{7,0,235},{7,0,1475},{15,0,68},{146,0,120},{137,10,691},{4,0,942},{6,0,\n1813},{8,0,917},{10,0,884},{12,0,696},{12,0,717},{12,0,723},{12,0,738},{12,0,749\n},{12,0,780},{16,0,97},{146,0,169},{6,10,443},{8,11,562},{9,10,237},{9,10,571},{\n9,10,695},{10,10,139},{11,10,715},{12,10,417},{141,10,421},{135,0,957},{133,0,\n830},{134,11,1771},{146,0,23},{5,0,496},{6,0,694},{7,0,203},{7,11,1190},{137,11,\n620},{137,11,132},{6,0,547},{134,0,1549},{8,11,258},{9,11,208},{137,11,359},{4,0\n,864},{5,0,88},{137,0,239},{135,11,493},{4,11,317},{135,11,1279},{132,11,477},{4\n,10,578},{5,11,63},{133,11,509},{7,0,650},{135,0,1310},{7,0,1076},{9,0,80},{11,0\n,78},{11,0,421},{11,0,534},{140,0,545},{132,11,288},{5,10,923},{12,0,553},{142,0\n,118},{7,0,274},{11,0,479},{139,0,507},{8,11,89},{8,11,620},{9,11,49},{10,11,774\n},{11,11,628},{12,11,322},{143,11,124},{4,0,497},{135,0,1584},{4,10,924},{7,0,\n261},{7,0,1115},{7,0,1354},{7,0,1404},{7,0,1588},{7,0,1705},{7,0,1902},{9,0,465}\n,{10,0,248},{10,0,349},{10,0,647},{11,0,527},{11,0,660},{11,0,669},{12,0,529},{\n141,0,305},{133,10,665},{136,0,13},{6,0,791},{138,11,120},{7,0,642},{8,0,250},{\n11,0,123},{11,0,137},{13,0,48},{142,0,95},{4,10,265},{7,10,807},{135,10,950},{5,\n10,93},{140,10,267},{135,0,1429},{4,0,949},{10,0,885},{10,0,891},{10,0,900},{10,\n0,939},{12,0,760},{142,0,449},{139,11,366},{132,0,818},{134,11,85},{135,10,994},\n{5,10,233},{5,10,320},{6,10,140},{7,0,330},{136,10,295},{4,0,1004},{8,0,982},{\n136,0,993},{133,10,978},{4,10,905},{6,10,1701},{137,10,843},{10,0,545},{140,0,\n301},{6,0,947},{134,0,1062},{134,0,1188},{4,0,904},{5,0,794},{152,10,6},{134,0,\n1372},{135,11,608},{5,11,279},{6,11,235},{7,11,468},{8,11,446},{9,11,637},{10,11\n,717},{11,11,738},{140,11,514},{132,10,509},{5,11,17},{6,11,371},{137,11,528},{\n132,0,693},{4,11,115},{5,11,669},{6,11,407},{8,11,311},{11,11,10},{141,11,5},{7,\n10,273},{9,11,381},{139,0,377},{135,0,695},{7,0,386},{138,0,713},{135,10,1041},{\n134,0,1291},{6,0,7},{6,0,35},{7,0,147},{7,0,1069},{7,0,1568},{7,0,1575},{7,0,\n1917},{8,0,43},{8,0,208},{9,0,128},{9,0,866},{10,0,20},{11,0,981},{147,0,33},{7,\n0,893},{141,0,424},{139,10,234},{150,11,56},{5,11,779},{5,11,807},{6,11,1655},{\n134,11,1676},{5,10,802},{7,10,2021},{136,10,805},{4,11,196},{5,10,167},{5,10,899\n},{5,11,558},{5,11,949},{6,10,410},{137,10,777},{137,10,789},{134,10,1705},{8,0,\n904},{140,0,787},{6,0,322},{9,0,552},{11,0,274},{13,0,209},{13,0,499},{14,0,85},\n{15,0,126},{145,0,70},{135,10,10},{5,10,11},{6,10,117},{6,10,485},{7,10,1133},{9\n,10,582},{9,10,594},{11,10,21},{11,10,818},{12,10,535},{141,10,86},{4,10,264},{7\n,10,1067},{8,10,204},{8,10,385},{139,10,953},{132,11,752},{138,10,56},{133,10,\n470},{6,0,1808},{8,0,83},{8,0,742},{8,0,817},{9,0,28},{9,0,29},{9,0,885},{10,0,\n387},{11,0,633},{11,0,740},{13,0,235},{13,0,254},{15,0,143},{143,0,146},{140,0,\n49},{134,0,1832},{4,11,227},{5,11,159},{5,11,409},{7,11,80},{10,11,294},{10,11,\n479},{12,11,418},{14,11,50},{14,11,249},{142,11,295},{7,11,1470},{8,11,66},{8,11\n,137},{8,11,761},{9,11,638},{11,11,80},{11,11,212},{11,11,368},{11,11,418},{12,\n11,8},{13,11,15},{16,11,61},{17,11,59},{19,11,28},{148,11,84},{139,10,1015},{138\n,11,468},{135,0,421},{6,0,415},{7,0,1049},{137,0,442},{6,11,38},{7,11,1220},{8,\n11,185},{8,11,256},{9,11,22},{9,11,331},{10,11,738},{11,11,205},{11,11,540},{11,\n11,746},{13,11,399},{13,11,465},{14,11,88},{142,11,194},{139,0,289},{133,10,715}\n,{4,0,110},{10,0,415},{10,0,597},{142,0,206},{4,11,159},{6,11,115},{7,11,252},{7\n,11,257},{7,11,1928},{8,11,69},{9,11,384},{10,11,91},{10,11,615},{12,11,375},{14\n,11,235},{18,11,117},{147,11,123},{5,11,911},{136,11,278},{7,0,205},{7,0,2000},{\n8,10,794},{9,10,400},{10,10,298},{142,10,228},{135,11,1774},{4,11,151},{7,11,\n1567},{8,11,351},{137,11,322},{136,10,724},{133,11,990},{7,0,1539},{7,11,1539},{\n11,0,512},{13,0,205},{19,0,30},{22,0,36},{151,0,19},{5,11,194},{7,11,1662},{9,11\n,90},{140,11,180},{6,10,190},{7,10,768},{135,10,1170},{134,0,1340},{4,0,283},{\n135,0,1194},{133,11,425},{133,11,971},{12,0,549},{14,10,67},{147,10,60},{135,10,\n1023},{134,0,1720},{138,11,587},{5,11,72},{6,11,264},{7,11,21},{7,11,46},{7,11,\n2013},{8,11,215},{8,11,513},{10,11,266},{139,11,22},{5,0,319},{135,0,534},{6,10,\n137},{9,10,75},{9,10,253},{10,10,194},{138,10,444},{6,11,239},{7,0,1180},{7,11,\n118},{10,11,95},{11,11,603},{13,11,443},{14,11,160},{15,11,4},{148,0,112},{134,\n11,431},{5,11,874},{6,11,1677},{11,10,643},{12,10,115},{143,11,0},{134,0,967},{6\n,11,65},{7,11,939},{7,11,1172},{7,11,1671},{9,11,540},{10,11,696},{11,11,265},{\n11,11,732},{11,11,928},{11,11,937},{12,11,399},{13,11,438},{149,11,19},{137,11,\n200},{135,0,1940},{5,10,760},{7,10,542},{8,10,135},{136,10,496},{140,11,44},{7,\n11,1655},{136,11,305},{7,10,319},{7,10,355},{7,10,763},{10,10,389},{145,10,43},{\n136,0,735},{138,10,786},{137,11,19},{132,11,696},{5,0,132},{9,0,486},{9,0,715},{\n10,0,458},{11,0,373},{11,0,668},{11,0,795},{11,0,897},{12,0,272},{12,0,424},{12,\n0,539},{12,0,558},{14,0,245},{14,0,263},{14,0,264},{14,0,393},{142,0,403},{10,0,\n38},{139,0,784},{132,0,838},{4,11,302},{135,11,1766},{133,0,379},{4,11,726},{5,0\n,8},{5,11,630},{6,0,89},{6,0,400},{7,0,1569},{7,0,1623},{7,0,1850},{8,0,218},{8,\n0,422},{9,0,570},{138,0,626},{4,0,1017},{138,0,660},{6,0,387},{7,0,882},{141,0,\n111},{6,0,224},{7,0,877},{137,0,647},{4,10,58},{5,10,286},{6,10,319},{7,10,402},\n{7,10,1254},{7,10,1903},{8,10,356},{140,10,408},{135,0,790},{4,10,389},{9,0,510}\n,{9,10,181},{10,0,53},{10,10,29},{10,10,816},{11,10,311},{11,10,561},{12,10,67},\n{141,10,181},{142,0,458},{6,11,118},{7,11,215},{7,11,1521},{140,11,11},{134,0,\n954},{135,0,394},{134,0,1367},{5,10,373},{133,11,225},{132,0,882},{7,0,1409},{\n135,10,1972},{135,10,1793},{4,11,370},{5,11,756},{135,11,1326},{150,11,13},{7,11\n,354},{10,11,410},{139,11,815},{6,11,1662},{7,11,48},{8,11,771},{10,11,116},{13,\n11,104},{14,11,105},{14,11,184},{15,11,168},{19,11,92},{148,11,68},{7,0,124},{\n136,0,38},{5,0,261},{7,0,78},{7,0,199},{8,0,815},{9,0,126},{10,0,342},{140,0,647\n},{4,0,628},{140,0,724},{7,0,266},{7,10,1651},{8,0,804},{145,10,89},{135,0,208},\n{134,0,1178},{6,0,79},{135,0,1519},{132,10,672},{133,10,737},{136,0,741},{132,11\n,120},{4,0,710},{6,0,376},{134,0,606},{134,0,1347},{134,0,1494},{6,0,850},{6,0,\n1553},{137,0,821},{5,10,145},{134,11,593},{7,0,1311},{140,0,135},{4,0,467},{5,0,\n405},{134,0,544},{5,11,820},{135,11,931},{6,0,100},{7,0,244},{7,0,632},{7,0,1609\n},{8,0,178},{8,0,638},{141,0,58},{4,10,387},{135,10,1288},{6,11,151},{6,11,1675}\n,{7,11,383},{151,11,10},{132,0,481},{135,10,550},{134,0,1378},{6,11,1624},{11,11\n,11},{12,11,422},{13,11,262},{142,11,360},{133,0,791},{4,11,43},{5,11,344},{133,\n11,357},{7,0,1227},{140,0,978},{7,0,686},{8,0,33},{8,0,238},{10,0,616},{11,0,467\n},{11,0,881},{13,0,217},{13,0,253},{142,0,268},{137,0,857},{7,11,148},{8,0,467},\n{8,0,1006},{8,11,284},{141,11,63},{4,10,576},{135,10,1263},{133,11,888},{5,10,\n919},{134,10,1673},{20,10,37},{148,11,37},{132,0,447},{132,11,711},{4,0,128},{5,\n0,415},{6,0,462},{7,0,294},{7,0,578},{10,0,710},{139,0,86},{4,10,82},{5,10,333},\n{5,10,904},{6,10,207},{7,10,325},{7,10,1726},{8,10,101},{10,10,778},{139,10,220}\n,{136,0,587},{137,11,440},{133,10,903},{6,0,427},{7,0,1018},{138,0,692},{4,0,195\n},{135,0,802},{140,10,147},{134,0,1546},{134,0,684},{132,10,705},{136,0,345},{11\n,11,678},{140,11,307},{133,0,365},{134,0,1683},{4,11,65},{5,11,479},{5,11,1004},\n{7,11,1913},{8,11,317},{9,11,302},{10,11,612},{141,11,22},{138,0,472},{4,11,261}\n,{135,11,510},{134,10,90},{142,0,433},{151,0,28},{4,11,291},{7,11,101},{9,11,515\n},{12,11,152},{12,11,443},{13,11,392},{142,11,357},{140,0,997},{5,0,3},{8,0,578}\n,{9,0,118},{10,0,705},{141,0,279},{135,11,1266},{7,10,813},{12,10,497},{141,10,\n56},{133,0,229},{6,10,125},{135,10,1277},{8,0,102},{10,0,578},{10,0,672},{12,0,\n496},{13,0,408},{14,0,121},{17,0,106},{151,10,12},{6,0,866},{134,0,1080},{136,0,\n1022},{4,11,130},{135,11,843},{5,11,42},{5,11,879},{7,11,245},{7,11,324},{7,11,\n1532},{11,11,463},{11,11,472},{13,11,363},{144,11,52},{150,0,55},{4,11,134},{5,\n11,372},{8,0,115},{8,0,350},{9,0,489},{10,0,128},{11,0,306},{12,0,373},{14,0,30}\n,{17,0,79},{147,0,80},{134,0,657},{134,0,933},{135,11,1147},{4,0,230},{133,0,702\n},{134,0,1728},{4,0,484},{18,0,26},{19,0,42},{20,0,43},{21,0,0},{23,0,27},{152,0\n,14},{7,0,185},{135,0,703},{6,0,417},{7,10,1106},{9,10,770},{10,0,618},{11,10,\n112},{140,10,413},{134,0,803},{132,11,644},{134,0,1262},{7,11,540},{12,10,271},{\n145,10,109},{135,11,123},{132,0,633},{134,11,623},{4,11,908},{5,11,359},{5,11,\n508},{6,11,1723},{7,11,343},{7,11,1996},{135,11,2026},{135,0,479},{7,10,304},{9,\n10,646},{9,10,862},{10,0,262},{11,10,696},{12,10,208},{15,10,79},{147,10,108},{4\n,11,341},{135,11,480},{134,0,830},{5,0,70},{5,0,622},{6,0,334},{7,0,1032},{9,0,\n171},{11,0,26},{11,0,213},{11,0,637},{11,0,707},{12,0,202},{12,0,380},{13,0,226}\n,{13,0,355},{14,0,222},{145,0,42},{135,10,981},{143,0,217},{137,11,114},{4,0,23}\n,{4,0,141},{5,0,313},{5,0,1014},{6,0,50},{6,0,51},{7,0,142},{7,0,384},{7,0,559},\n{8,0,640},{9,0,460},{9,0,783},{11,0,741},{12,0,183},{141,0,488},{141,0,360},{7,0\n,1586},{7,11,1995},{8,11,299},{11,11,890},{140,11,674},{132,10,434},{6,10,550},{\n135,0,652},{5,10,553},{7,0,766},{138,10,824},{7,0,737},{8,0,298},{136,10,452},{4\n,11,238},{5,11,503},{6,11,179},{7,11,2003},{8,11,381},{8,11,473},{9,11,149},{10,\n11,183},{15,11,45},{143,11,86},{133,10,292},{5,0,222},{9,0,655},{138,0,534},{138\n,10,135},{4,11,121},{5,11,156},{5,11,349},{9,11,136},{10,11,605},{14,11,342},{\n147,11,107},{137,0,906},{6,0,1013},{134,0,1250},{6,0,1956},{6,0,2009},{8,0,991},\n{144,0,120},{135,11,1192},{138,0,503},{5,0,154},{7,0,1491},{10,0,379},{138,0,485\n},{6,0,1867},{6,0,1914},{6,0,1925},{9,0,917},{9,0,925},{9,0,932},{9,0,951},{9,0,\n1007},{9,0,1013},{12,0,806},{12,0,810},{12,0,814},{12,0,816},{12,0,824},{12,0,\n832},{12,0,837},{12,0,863},{12,0,868},{12,0,870},{12,0,889},{12,0,892},{12,0,900\n},{12,0,902},{12,0,908},{12,0,933},{12,0,942},{12,0,949},{12,0,954},{15,0,175},{\n15,0,203},{15,0,213},{15,0,218},{15,0,225},{15,0,231},{15,0,239},{15,0,248},{15,\n0,252},{18,0,190},{18,0,204},{18,0,215},{18,0,216},{18,0,222},{18,0,225},{18,0,\n230},{18,0,239},{18,0,241},{21,0,42},{21,0,43},{21,0,44},{21,0,45},{21,0,46},{21\n,0,53},{24,0,27},{152,0,31},{133,0,716},{135,0,844},{4,0,91},{5,0,388},{5,0,845}\n,{6,0,206},{6,0,252},{6,0,365},{7,0,136},{7,0,531},{136,0,621},{7,10,393},{10,10\n,603},{139,10,206},{6,11,80},{6,11,1694},{7,11,173},{7,11,1974},{9,11,547},{10,\n11,730},{14,11,18},{150,11,39},{137,0,748},{4,11,923},{134,11,1711},{4,10,912},{\n137,10,232},{7,10,98},{7,10,1973},{136,10,716},{5,10,733},{142,0,103},{132,11,\n595},{5,11,240},{6,11,459},{7,11,12},{7,11,114},{7,11,502},{7,11,1751},{7,11,\n1753},{7,11,1805},{8,11,658},{9,11,1},{11,11,959},{12,0,158},{13,11,446},{14,11,\n211},{18,0,8},{19,0,62},{20,0,6},{22,0,4},{23,0,2},{151,0,9},{135,0,576},{5,0,\n771},{5,0,863},{5,0,898},{6,0,648},{6,0,1632},{6,0,1644},{134,0,1780},{133,0,331\n},{7,11,633},{7,11,905},{7,11,909},{7,11,1538},{9,11,767},{140,11,636},{140,0,\n632},{5,0,107},{7,0,201},{136,0,518},{6,0,446},{6,11,490},{135,0,1817},{9,0,851}\n,{141,0,510},{7,11,250},{8,11,506},{136,11,507},{4,0,504},{137,10,72},{132,11,\n158},{4,11,140},{7,11,362},{8,11,209},{9,11,10},{9,11,160},{9,11,503},{10,11,689\n},{11,11,350},{11,11,553},{11,11,725},{12,11,252},{12,11,583},{13,11,192},{13,11\n,352},{14,11,269},{14,11,356},{148,11,50},{6,11,597},{135,11,1318},{135,10,1454}\n,{5,0,883},{5,0,975},{8,0,392},{148,0,7},{6,11,228},{7,11,1341},{9,11,408},{138,\n11,343},{11,10,600},{11,11,348},{12,11,99},{13,10,245},{18,11,1},{18,11,11},{147\n,11,4},{134,11,296},{5,0,922},{134,0,1707},{132,11,557},{4,11,548},{7,10,164},{7\n,10,1571},{9,10,107},{140,10,225},{7,11,197},{8,11,142},{8,11,325},{9,11,150},{9\n,11,596},{10,11,350},{10,11,353},{11,11,74},{11,11,315},{14,11,423},{143,11,141}\n,{5,0,993},{7,0,515},{137,0,91},{4,0,131},{5,10,484},{5,10,510},{6,10,434},{7,10\n,1000},{7,10,1098},{8,0,200},{136,10,2},{152,0,10},{4,11,62},{5,11,83},{6,11,399\n},{6,11,579},{7,11,692},{7,11,846},{7,11,1015},{7,11,1799},{8,11,403},{9,11,394}\n,{10,11,133},{12,11,4},{12,11,297},{12,11,452},{16,11,81},{18,11,19},{18,11,25},\n{21,11,14},{22,11,12},{151,11,18},{140,11,459},{132,11,177},{7,0,1433},{9,0,365}\n,{137,11,365},{132,10,460},{5,0,103},{5,11,411},{6,0,2004},{7,0,921},{7,11,653},\n{8,0,580},{8,0,593},{8,0,630},{138,0,28},{4,10,932},{133,10,891},{4,0,911},{5,0,\n867},{5,0,1013},{7,0,2034},{8,0,798},{136,0,813},{7,11,439},{10,11,727},{11,11,\n260},{139,11,684},{136,10,625},{5,11,208},{7,11,753},{135,11,1528},{5,0,461},{6,\n10,76},{7,0,1925},{12,0,39},{13,0,265},{141,0,439},{6,0,853},{8,10,92},{137,10,\n221},{5,0,135},{6,0,519},{7,0,1722},{10,0,271},{11,0,261},{145,0,54},{139,11,814\n},{14,0,338},{148,0,81},{4,0,300},{133,0,436},{5,0,419},{5,0,687},{7,0,864},{7,\n11,864},{137,0,470},{5,11,242},{137,0,836},{134,0,1937},{4,10,763},{133,11,953},\n{132,10,622},{132,0,393},{133,10,253},{7,10,546},{8,0,357},{10,0,745},{14,0,426}\n,{17,0,94},{147,0,57},{5,11,615},{146,11,37},{9,10,73},{10,10,110},{14,10,185},{\n145,10,119},{7,10,624},{7,10,916},{10,10,256},{11,0,703},{139,10,87},{133,11,290\n},{5,10,212},{12,10,35},{141,10,382},{132,11,380},{5,11,52},{7,11,277},{9,11,368\n},{139,11,791},{133,0,387},{10,11,138},{139,11,476},{4,0,6},{5,0,708},{136,0,75}\n,{7,0,1351},{9,0,581},{10,0,639},{11,0,453},{140,0,584},{132,0,303},{138,0,772},\n{135,10,1175},{4,0,749},{5,10,816},{6,11,256},{7,11,307},{7,11,999},{7,11,1481},\n{7,11,1732},{7,11,1738},{8,11,265},{9,11,414},{11,11,316},{12,11,52},{13,11,420}\n,{147,11,100},{135,11,1296},{5,10,869},{5,10,968},{6,0,1065},{6,10,1626},{8,10,\n734},{136,10,784},{4,10,542},{6,10,1716},{6,10,1727},{7,10,1082},{7,10,1545},{8,\n10,56},{8,10,118},{8,10,412},{8,10,564},{9,10,888},{9,10,908},{10,10,50},{10,10,\n423},{11,10,685},{11,10,697},{11,10,933},{12,10,299},{13,10,126},{13,10,136},{13\n,10,170},{141,10,190},{134,0,226},{4,0,106},{5,11,723},{7,0,310},{139,0,717},{4,\n10,232},{5,0,890},{5,0,988},{9,10,202},{10,10,474},{140,10,433},{6,0,626},{142,0\n,431},{10,0,706},{150,0,44},{6,10,108},{7,10,1003},{7,10,1181},{8,10,111},{8,10,\n343},{141,0,51},{132,0,698},{5,11,109},{6,11,1784},{7,11,1895},{12,11,296},{140,\n11,302},{134,0,828},{134,10,1712},{138,0,17},{4,10,133},{5,11,216},{7,0,1929},{7\n,10,711},{7,10,1298},{7,10,1585},{7,11,1879},{9,11,141},{9,11,270},{9,11,679},{\n10,11,159},{10,11,553},{11,11,197},{11,11,438},{12,11,538},{12,11,559},{13,11,\n193},{13,11,423},{14,11,144},{14,11,166},{14,11,167},{15,11,67},{147,11,84},{141\n,11,127},{7,11,1872},{137,11,81},{6,10,99},{7,10,1808},{145,10,57},{134,11,391},\n{5,0,689},{6,0,84},{6,10,574},{7,0,1250},{7,10,428},{10,10,669},{11,10,485},{11,\n10,840},{12,10,300},{142,10,250},{7,11,322},{136,11,249},{7,11,432},{135,11,1649\n},{135,10,1871},{137,10,252},{6,11,155},{140,11,234},{7,0,871},{19,0,27},{147,11\n,27},{140,0,498},{5,0,986},{6,0,130},{138,0,823},{6,0,1793},{6,10,323},{7,0,1582\n},{7,10,1564},{8,0,458},{10,0,101},{10,0,318},{10,0,945},{12,0,734},{16,0,104},{\n146,0,177},{5,11,632},{138,11,526},{7,10,461},{8,10,775},{138,0,435},{6,11,144},\n{7,11,948},{7,11,1042},{7,11,1857},{8,11,235},{8,11,461},{9,11,453},{9,11,530},{\n10,11,354},{17,11,77},{19,11,99},{148,11,79},{138,0,966},{7,0,1644},{137,0,129},\n{135,0,997},{136,0,502},{5,11,196},{6,11,486},{7,11,212},{8,11,309},{136,11,346}\n,{7,10,727},{146,10,73},{132,0,823},{132,11,686},{135,0,1927},{4,0,762},{7,0,\n1756},{137,0,98},{136,10,577},{4,11,30},{5,11,43},{24,0,8},{152,11,8},{7,0,1046}\n,{139,0,160},{4,10,413},{5,10,677},{7,0,492},{7,11,492},{8,10,432},{140,10,280},\n{6,0,45},{7,0,433},{8,0,129},{9,0,21},{10,0,392},{11,0,79},{12,0,499},{13,0,199}\n,{141,0,451},{7,0,558},{136,0,353},{4,11,220},{7,11,1535},{9,11,93},{139,11,474}\n,{7,10,646},{7,10,1730},{11,10,446},{141,10,178},{133,0,785},{134,0,1145},{8,0,\n81},{9,0,189},{9,0,201},{11,0,478},{11,0,712},{141,0,338},{5,0,353},{151,0,26},{\n4,10,395},{139,0,762},{134,0,2024},{4,0,611},{133,0,606},{9,10,174},{10,10,164},\n{11,10,440},{11,10,841},{143,10,98},{134,10,426},{10,10,608},{139,10,1002},{138,\n10,250},{6,0,25},{7,0,855},{7,0,1258},{144,0,32},{7,11,1725},{138,11,393},{5,11,\n263},{134,11,414},{5,10,476},{134,0,2011},{4,0,4},{6,11,178},{6,11,1750},{7,0,\n1118},{7,0,1320},{7,0,1706},{8,0,277},{8,11,251},{9,0,622},{9,11,690},{10,0,9},{\n10,11,155},{10,11,196},{10,11,373},{11,0,724},{11,11,698},{12,0,350},{12,0,397},\n{13,0,28},{13,0,159},{13,11,155},{15,0,89},{18,0,5},{19,0,9},{20,0,34},{20,11,93\n},{150,0,47},{5,11,97},{137,11,393},{5,10,76},{6,10,458},{6,10,497},{7,0,764},{7\n,10,868},{9,10,658},{10,10,594},{11,0,461},{11,10,566},{12,0,172},{12,10,338},{\n141,10,200},{134,0,1449},{138,11,40},{134,11,1639},{134,0,1445},{4,10,526},{6,0,\n1168},{7,10,1029},{135,10,1054},{4,11,191},{7,11,934},{8,11,647},{145,11,97},{\n132,10,636},{6,0,233},{7,10,660},{7,10,1124},{17,10,31},{19,10,22},{151,10,14},{\n6,10,1699},{136,11,110},{12,11,246},{15,11,162},{19,11,64},{20,11,8},{20,11,95},\n{22,11,24},{152,11,17},{5,11,165},{9,11,346},{138,11,655},{5,11,319},{135,11,534\n},{134,0,255},{8,11,128},{9,0,216},{139,11,179},{9,0,183},{139,0,286},{11,0,956}\n,{151,0,3},{4,0,536},{7,0,1141},{10,0,723},{139,0,371},{4,10,279},{7,10,301},{\n137,10,362},{5,11,57},{6,11,101},{6,11,1663},{7,0,285},{7,11,132},{7,11,1048},{7\n,11,1154},{7,11,1415},{7,11,1507},{12,11,493},{15,11,105},{151,11,15},{5,11,459}\n,{7,10,1743},{7,11,1073},{8,11,241},{136,11,334},{4,10,178},{133,10,399},{135,0,\n560},{132,0,690},{135,0,1246},{18,0,157},{147,0,63},{10,0,599},{11,0,33},{12,0,\n571},{149,0,1},{6,11,324},{6,11,520},{7,11,338},{7,11,1616},{7,11,1729},{8,11,\n228},{9,11,69},{139,11,750},{7,0,1862},{12,0,491},{12,0,520},{13,0,383},{142,0,\n244},{135,11,734},{134,10,1692},{6,10,202},{7,11,705},{10,0,448},{11,0,630},{12,\n10,360},{17,0,117},{17,10,118},{18,10,27},{148,10,67},{4,11,73},{6,11,612},{7,11\n,927},{7,11,1822},{8,11,217},{9,11,472},{9,11,765},{9,11,766},{10,11,408},{11,11\n,51},{11,11,793},{12,11,266},{15,11,158},{20,11,89},{150,11,32},{4,0,190},{133,0\n,554},{133,0,1001},{5,11,389},{8,11,636},{137,11,229},{5,0,446},{7,10,872},{10,\n10,516},{139,10,167},{137,10,313},{132,10,224},{134,0,1313},{5,10,546},{7,10,35}\n,{8,10,11},{8,10,12},{9,10,315},{9,10,533},{10,10,802},{11,10,166},{12,10,525},{\n142,10,243},{6,0,636},{137,0,837},{5,10,241},{8,10,242},{9,10,451},{10,10,667},{\n11,10,598},{140,10,429},{22,10,46},{150,11,46},{136,11,472},{11,0,278},{142,0,73\n},{141,11,185},{132,0,868},{134,0,972},{4,10,366},{137,10,516},{138,0,1010},{5,\n11,189},{6,10,1736},{7,11,442},{7,11,443},{8,11,281},{12,11,174},{13,11,83},{141\n,11,261},{139,11,384},{6,11,2},{7,11,191},{7,11,446},{7,11,758},{7,11,1262},{7,\n11,1737},{8,11,22},{8,11,270},{8,11,612},{9,11,4},{9,11,167},{9,11,312},{9,11,\n436},{10,11,156},{10,11,216},{10,11,311},{10,11,623},{11,11,72},{11,11,330},{11,\n11,455},{12,11,101},{12,11,321},{12,11,504},{12,11,530},{12,11,543},{13,11,17},{\n13,11,156},{13,11,334},{14,11,48},{15,11,70},{17,11,60},{148,11,64},{6,10,331},{\n136,10,623},{135,0,1231},{132,0,304},{6,11,60},{7,11,670},{7,11,1327},{8,11,411}\n,{8,11,435},{9,11,653},{9,11,740},{10,11,385},{11,11,222},{11,11,324},{11,11,829\n},{140,11,611},{6,11,166},{7,0,506},{7,11,374},{135,11,1174},{14,11,43},{146,11,\n21},{135,11,1694},{135,10,1888},{5,11,206},{134,11,398},{135,11,50},{150,0,26},{\n6,0,53},{6,0,199},{7,0,1408},{8,0,32},{8,0,93},{10,0,397},{10,0,629},{11,0,593},\n{11,0,763},{13,0,326},{145,0,35},{134,0,105},{132,10,394},{4,0,843},{138,0,794},\n{11,0,704},{141,0,396},{5,0,114},{5,0,255},{141,0,285},{6,0,619},{7,0,898},{7,0,\n1092},{7,10,1931},{8,0,485},{18,0,28},{147,0,116},{7,10,574},{7,10,1719},{137,0,\n145},{7,0,2035},{8,0,19},{9,0,89},{138,0,831},{132,10,658},{6,11,517},{7,11,1159\n},{10,11,621},{139,11,192},{7,0,1933},{7,11,1933},{9,10,781},{10,10,144},{11,10,\n385},{13,10,161},{13,10,228},{13,10,268},{148,10,107},{136,10,374},{10,11,223},{\n139,11,645},{135,0,1728},{7,11,64},{7,11,289},{136,11,245},{4,10,344},{6,10,498}\n,{139,10,323},{136,0,746},{135,10,1063},{137,10,155},{4,0,987},{6,0,1964},{6,0,\n1974},{6,0,1990},{136,0,995},{133,11,609},{133,10,906},{134,0,1550},{134,0,874},\n{5,11,129},{6,11,61},{135,11,947},{4,0,1018},{6,0,1938},{6,0,2021},{134,0,2039},\n{132,0,814},{11,0,126},{139,0,287},{134,0,1264},{5,0,955},{136,0,814},{141,11,\n506},{132,11,314},{6,0,981},{139,11,1000},{5,0,56},{8,0,892},{8,0,915},{140,0,\n776},{148,0,100},{10,0,4},{10,0,13},{11,0,638},{148,0,57},{148,11,74},{4,10,616}\n,{133,0,738},{133,11,637},{136,10,692},{133,0,758},{132,10,305},{137,11,590},{5,\n11,280},{135,11,1226},{134,11,494},{135,0,1112},{133,11,281},{5,10,214},{7,10,\n603},{8,10,611},{9,10,686},{10,10,88},{11,10,459},{11,10,496},{12,10,463},{12,10\n,590},{13,0,44},{142,0,214},{139,0,328},{135,11,1064},{137,0,133},{7,0,168},{13,\n0,196},{141,0,237},{134,10,1703},{134,0,1152},{135,0,1245},{5,0,110},{6,0,169},{\n6,0,1702},{7,0,400},{8,0,538},{9,0,184},{9,0,524},{140,0,218},{6,0,1816},{10,0,\n871},{12,0,769},{140,0,785},{132,11,630},{7,11,33},{7,11,120},{8,11,489},{9,11,\n319},{10,11,820},{11,11,1004},{12,11,379},{13,11,117},{13,11,412},{14,11,25},{15\n,11,52},{15,11,161},{16,11,47},{149,11,2},{6,0,133},{8,0,413},{9,0,353},{139,0,\n993},{145,10,19},{4,11,937},{133,11,801},{134,0,978},{6,0,93},{6,0,1508},{7,0,\n1422},{7,0,1851},{8,0,673},{9,0,529},{140,0,43},{4,10,737},{6,0,317},{10,0,512},\n{11,10,294},{12,10,60},{12,10,437},{13,10,64},{13,10,380},{142,10,430},{7,11,\n1591},{9,0,371},{144,11,43},{6,10,1758},{8,10,520},{9,10,345},{9,10,403},{142,10\n,350},{5,0,526},{10,10,242},{138,10,579},{9,0,25},{10,0,467},{138,0,559},{5,10,\n139},{7,10,1168},{138,10,539},{4,0,335},{135,0,942},{140,0,754},{132,11,365},{11\n,0,182},{142,0,195},{142,11,29},{5,11,7},{139,11,774},{4,11,746},{135,11,1090},{\n8,0,39},{10,0,773},{11,0,84},{12,0,205},{142,0,1},{5,0,601},{5,0,870},{5,11,360}\n,{136,11,237},{132,0,181},{136,0,370},{134,0,1652},{4,10,107},{7,10,613},{8,0,\n358},{8,10,439},{8,10,504},{9,10,501},{10,10,383},{139,10,477},{132,10,229},{137\n,11,785},{4,0,97},{5,0,147},{6,0,286},{7,0,1362},{141,0,176},{4,10,903},{6,0,537\n},{7,0,788},{135,0,1816},{140,10,71},{6,0,743},{134,0,1223},{6,0,375},{7,0,169},\n{7,0,254},{7,11,1493},{136,0,780},{4,10,47},{6,10,373},{7,0,1714},{7,10,452},{7,\n10,543},{7,10,1856},{9,10,6},{11,10,257},{139,10,391},{6,0,896},{136,0,1003},{\n135,0,1447},{137,11,341},{5,10,980},{134,10,1754},{145,11,22},{4,11,277},{5,11,\n608},{6,11,493},{7,11,457},{140,11,384},{7,10,536},{7,10,1331},{136,10,143},{140\n,0,744},{7,11,27},{135,11,316},{5,10,19},{6,10,533},{146,0,126},{4,0,788},{5,11,\n552},{5,11,586},{5,11,676},{6,11,448},{8,11,244},{11,0,41},{11,11,1},{11,11,41},\n{13,11,3},{16,11,54},{17,11,4},{146,11,13},{4,0,985},{4,11,401},{6,0,1801},{137,\n11,264},{5,10,395},{5,10,951},{134,10,1776},{5,0,629},{135,0,1549},{11,10,663},{\n12,10,210},{13,10,166},{13,10,310},{14,10,373},{147,10,43},{9,11,543},{10,11,524\n},{11,11,30},{12,11,524},{14,11,315},{16,11,18},{20,11,26},{148,11,65},{4,11,205\n},{5,11,623},{7,11,104},{136,11,519},{5,0,293},{134,0,601},{7,11,579},{9,11,41},\n{9,11,244},{9,11,669},{10,11,5},{11,11,861},{11,11,951},{139,11,980},{132,11,717\n},{132,10,695},{7,10,497},{9,10,387},{147,10,81},{132,0,420},{142,0,37},{6,0,\n1134},{6,0,1900},{12,0,830},{12,0,878},{12,0,894},{15,0,221},{143,0,245},{132,11\n,489},{7,0,1570},{140,0,542},{8,0,933},{136,0,957},{5,10,284},{6,0,1371},{6,10,\n49},{6,10,350},{7,0,31},{7,10,377},{7,10,1693},{8,0,373},{8,10,678},{9,10,161},{\n9,10,585},{9,10,671},{9,10,839},{11,10,912},{141,10,427},{135,11,892},{4,0,325},\n{138,0,125},{139,11,47},{132,10,597},{138,0,323},{6,0,1547},{7,11,1605},{9,11,\n473},{11,11,962},{146,11,139},{139,10,908},{7,11,819},{9,11,26},{9,11,392},{10,\n11,152},{10,11,226},{11,11,19},{12,11,276},{12,11,426},{12,11,589},{13,11,460},{\n15,11,97},{19,11,48},{148,11,104},{135,11,51},{4,0,718},{135,0,1216},{6,0,1896},\n{6,0,1905},{6,0,1912},{7,11,761},{7,11,1051},{9,0,947},{9,0,974},{9,11,545},{12,\n0,809},{12,0,850},{12,0,858},{12,0,874},{12,0,887},{12,0,904},{12,0,929},{12,0,\n948},{12,0,952},{15,0,198},{15,0,206},{15,0,220},{15,0,227},{15,0,247},{18,0,188\n},{21,0,48},{21,0,50},{24,0,25},{152,0,29},{5,0,124},{5,0,144},{6,0,548},{7,0,15\n},{7,0,153},{137,0,629},{135,11,606},{135,10,2014},{7,10,2007},{9,10,101},{9,10,\n450},{9,11,46},{10,10,66},{10,10,842},{11,10,536},{140,10,587},{6,0,75},{7,0,\n1531},{8,0,416},{9,0,240},{9,0,275},{10,0,100},{11,0,658},{11,0,979},{12,0,86},{\n14,0,207},{15,0,20},{143,0,25},{5,0,141},{5,0,915},{6,0,1783},{7,0,211},{7,0,698\n},{7,0,1353},{9,0,83},{9,0,281},{10,0,376},{10,0,431},{11,0,543},{12,0,664},{13,\n0,280},{13,0,428},{14,0,61},{14,0,128},{17,0,52},{145,0,81},{132,11,674},{135,0,\n533},{149,0,6},{132,11,770},{133,0,538},{5,11,79},{7,11,1027},{7,11,1477},{139,\n11,52},{139,10,62},{4,0,338},{133,0,400},{5,11,789},{134,11,195},{4,11,251},{4,\n11,688},{7,11,513},{7,11,1284},{9,11,87},{138,11,365},{134,10,1766},{6,0,0},{7,0\n,84},{11,0,895},{145,0,11},{139,0,892},{4,0,221},{5,0,659},{7,0,697},{7,0,1211},\n{138,0,284},{133,0,989},{133,11,889},{4,11,160},{5,11,330},{7,11,1434},{136,11,\n174},{6,10,1665},{7,10,256},{7,10,1388},{10,10,499},{139,10,670},{4,10,22},{5,10\n,10},{7,0,848},{136,10,97},{138,0,507},{133,10,481},{4,0,188},{135,0,805},{5,0,\n884},{6,0,732},{139,0,991},{135,11,968},{11,11,636},{15,11,145},{17,11,34},{19,\n11,50},{151,11,20},{6,10,134},{7,0,959},{7,10,437},{9,10,37},{14,10,285},{14,10,\n371},{144,0,60},{7,10,486},{8,10,155},{11,10,93},{140,10,164},{134,0,1653},{5,10\n,591},{135,0,337},{5,11,374},{6,0,1989},{8,0,922},{136,0,978},{132,0,638},{138,0\n,500},{133,11,731},{5,10,380},{5,10,650},{136,10,310},{138,11,381},{4,10,364},{7\n,10,1156},{7,10,1187},{137,10,409},{137,11,224},{140,0,166},{134,10,482},{4,11,\n626},{5,11,642},{6,11,425},{10,11,202},{139,11,141},{4,10,781},{6,10,487},{7,10,\n926},{8,10,263},{139,10,500},{135,0,418},{4,10,94},{135,10,1265},{136,0,760},{\n132,10,417},{136,11,835},{5,10,348},{134,10,522},{6,0,1277},{134,0,1538},{139,11\n,541},{135,11,1597},{5,11,384},{8,11,455},{140,11,48},{136,0,770},{5,11,264},{\n134,11,184},{4,0,89},{5,0,489},{6,0,315},{7,0,553},{7,0,1745},{138,0,243},{4,10,\n408},{4,10,741},{135,10,500},{134,0,1396},{133,0,560},{6,0,1658},{9,0,3},{10,0,\n154},{11,0,641},{13,0,85},{13,0,201},{141,0,346},{135,11,1595},{5,11,633},{6,11,\n28},{7,11,219},{135,11,1323},{9,11,769},{140,11,185},{135,11,785},{7,11,359},{8,\n11,243},{140,11,175},{138,0,586},{6,10,73},{135,0,1271},{132,11,105},{4,0,166},{\n5,0,505},{134,0,1670},{133,10,576},{4,11,324},{138,11,104},{142,10,231},{6,0,637\n},{7,10,1264},{7,10,1678},{11,10,945},{12,10,341},{12,10,471},{12,10,569},{23,11\n,21},{151,11,23},{8,11,559},{141,11,109},{134,0,1947},{7,0,445},{8,0,307},{8,0,\n704},{10,0,41},{10,0,439},{11,0,237},{11,0,622},{140,0,201},{135,11,963},{135,0,\n1977},{4,0,189},{5,0,713},{136,0,57},{138,0,371},{135,10,538},{132,0,552},{5,10,\n413},{134,0,883},{4,11,758},{134,0,923},{138,11,215},{136,10,495},{7,10,54},{8,\n10,312},{10,10,191},{10,10,614},{140,10,567},{7,11,351},{139,11,128},{6,10,468},\n{7,0,875},{7,10,1478},{8,10,530},{142,10,290},{135,0,1788},{5,11,918},{145,0,49}\n,{12,11,398},{20,11,39},{21,11,11},{150,11,41},{6,10,484},{7,10,822},{138,0,661}\n,{135,0,1945},{134,0,794},{137,10,900},{135,10,1335},{6,10,1724},{135,10,2022},{\n132,11,340},{134,0,1135},{4,0,784},{133,0,745},{5,0,84},{134,0,163},{133,0,410},\n{4,0,976},{5,11,985},{7,11,509},{7,11,529},{145,11,96},{132,10,474},{134,0,703},\n{135,11,1919},{5,0,322},{8,0,186},{9,0,262},{10,0,187},{142,0,208},{135,10,1504}\n,{133,0,227},{5,10,305},{9,0,560},{141,0,208},{132,11,247},{7,0,1395},{8,0,486},\n{9,0,236},{9,0,878},{10,0,218},{11,0,95},{19,0,17},{147,0,31},{7,0,2043},{8,0,\n672},{141,0,448},{4,11,184},{5,11,390},{6,11,337},{7,11,23},{7,11,494},{7,11,618\n},{7,11,1456},{8,11,27},{8,11,599},{10,11,153},{139,11,710},{135,0,466},{135,10,\n1236},{4,10,480},{6,0,167},{6,10,302},{6,10,1642},{7,0,186},{7,0,656},{7,10,837}\n,{7,10,1547},{7,10,1657},{8,10,429},{9,10,228},{10,0,643},{13,10,289},{13,10,343\n},{147,10,101},{134,0,1428},{134,0,1440},{5,0,412},{7,10,278},{10,10,739},{11,10\n,708},{141,10,348},{134,0,1118},{136,0,562},{148,11,46},{9,0,316},{139,0,256},{\n134,0,1771},{135,0,1190},{137,0,132},{10,11,227},{11,11,497},{11,11,709},{140,11\n,415},{143,0,66},{6,11,360},{7,11,1664},{136,11,478},{144,10,28},{4,0,317},{135,\n0,1279},{5,0,63},{133,0,509},{136,11,699},{145,10,36},{134,0,1475},{11,11,343},{\n142,11,127},{132,11,739},{132,0,288},{135,11,1757},{8,0,89},{8,0,620},{9,0,608},\n{11,0,628},{12,0,322},{143,0,124},{134,0,1225},{4,11,67},{5,11,422},{6,10,363},{\n7,0,1189},{7,10,1955},{7,11,1037},{7,11,1289},{7,11,1555},{8,10,725},{9,11,741},\n{145,11,108},{134,0,1468},{6,0,689},{134,0,1451},{138,0,120},{151,0,1},{137,10,\n805},{142,0,329},{5,10,813},{135,10,2046},{135,0,226},{138,11,96},{5,10,712},{7,\n0,1855},{11,10,17},{13,10,321},{144,10,67},{6,10,320},{7,10,781},{7,10,1921},{9,\n0,461},{9,10,55},{10,10,186},{10,10,273},{10,10,664},{10,10,801},{11,10,996},{11\n,10,997},{13,10,157},{142,10,170},{8,10,271},{8,11,203},{11,11,823},{11,11,846},\n{12,11,482},{13,11,133},{13,11,277},{13,11,302},{13,11,464},{14,11,205},{142,11,\n221},{135,0,1346},{4,11,449},{133,11,718},{134,0,85},{7,10,103},{7,10,863},{11,\n10,184},{14,0,299},{145,10,62},{4,11,355},{6,11,311},{9,11,256},{138,11,404},{\n137,10,659},{138,11,758},{133,11,827},{5,11,64},{140,11,581},{134,0,1171},{4,11,\n442},{7,11,1047},{7,11,1352},{135,11,1643},{132,0,980},{5,11,977},{6,11,288},{7,\n11,528},{135,11,1065},{5,0,279},{6,0,235},{7,0,468},{8,0,446},{9,0,637},{10,0,\n717},{11,0,738},{140,0,514},{132,0,293},{11,10,337},{142,10,303},{136,11,285},{4\n,11,254},{5,0,17},{6,0,371},{9,0,528},{140,0,364},{5,10,77},{7,10,1455},{10,10,\n843},{147,10,73},{150,0,5},{132,10,458},{6,11,12},{7,11,1219},{145,11,73},{135,\n10,1420},{6,10,109},{138,10,382},{135,11,125},{6,10,330},{7,10,1084},{139,10,142\n},{6,11,369},{6,11,502},{7,11,1036},{8,11,348},{9,11,452},{10,11,26},{11,11,224}\n,{11,11,387},{11,11,772},{12,11,95},{12,11,629},{13,11,195},{13,11,207},{13,11,\n241},{14,11,260},{14,11,270},{143,11,140},{132,11,269},{5,11,480},{7,11,532},{7,\n11,1197},{7,11,1358},{8,11,291},{11,11,349},{142,11,396},{150,0,48},{10,0,601},{\n13,0,353},{141,0,376},{5,0,779},{5,0,807},{6,0,1655},{134,0,1676},{142,11,223},{\n4,0,196},{5,0,558},{133,0,949},{148,11,15},{135,11,1764},{134,0,1322},{132,0,752\n},{139,0,737},{135,11,657},{136,11,533},{135,0,412},{4,0,227},{5,0,159},{5,0,409\n},{7,0,80},{8,0,556},{10,0,479},{12,0,418},{14,0,50},{14,0,123},{14,0,192},{14,0\n,249},{14,0,295},{143,0,27},{7,0,1470},{8,0,66},{8,0,137},{8,0,761},{9,0,638},{\n11,0,80},{11,0,212},{11,0,368},{11,0,418},{12,0,8},{13,0,15},{16,0,61},{17,0,59}\n,{19,0,28},{148,0,84},{135,10,1985},{4,11,211},{4,11,332},{5,11,335},{6,11,238},\n{7,11,269},{7,11,811},{7,11,1797},{8,10,122},{8,11,836},{9,11,507},{141,11,242},\n{6,0,683},{134,0,1252},{4,0,873},{132,10,234},{134,0,835},{6,0,38},{7,0,1220},{8\n,0,185},{8,0,256},{9,0,22},{9,0,331},{10,0,738},{11,0,205},{11,0,540},{11,0,746}\n,{13,0,465},{14,0,88},{142,0,194},{138,0,986},{5,11,1009},{12,11,582},{146,11,\n131},{4,0,159},{6,0,115},{7,0,252},{7,0,257},{7,0,1928},{8,0,69},{9,0,384},{10,0\n,91},{10,0,615},{12,0,375},{14,0,235},{18,0,117},{147,0,123},{133,0,911},{136,0,\n278},{5,10,430},{5,10,932},{6,10,131},{7,10,417},{9,10,522},{11,10,314},{141,10,\n390},{14,10,149},{14,10,399},{143,10,57},{4,0,151},{7,0,1567},{136,0,749},{5,11,\n228},{6,11,203},{7,11,156},{8,11,347},{137,11,265},{132,10,507},{10,0,989},{140,\n0,956},{133,0,990},{5,0,194},{6,0,927},{7,0,1662},{9,0,90},{140,0,564},{4,10,343\n},{133,10,511},{133,0,425},{7,10,455},{138,10,591},{4,0,774},{7,11,476},{7,11,\n1592},{138,11,87},{5,0,971},{135,10,1381},{5,11,318},{147,11,121},{5,11,291},{7,\n11,765},{9,11,389},{140,11,548},{134,10,575},{4,0,827},{12,0,646},{12,0,705},{12\n,0,712},{140,0,714},{139,0,752},{137,0,662},{5,0,72},{6,0,264},{7,0,21},{7,0,46}\n,{7,0,2013},{8,0,215},{8,0,513},{10,0,266},{139,0,22},{139,11,522},{6,0,239},{7,\n0,118},{10,0,95},{11,0,603},{13,0,443},{14,0,160},{143,0,4},{6,0,431},{134,0,669\n},{7,10,1127},{7,10,1572},{10,10,297},{10,10,422},{11,10,764},{11,10,810},{12,10\n,264},{13,10,102},{13,10,300},{13,10,484},{14,10,147},{14,10,229},{17,10,71},{18\n,10,118},{147,10,120},{5,0,874},{6,0,1677},{10,11,525},{11,11,82},{143,0,0},{6,0\n,65},{7,0,939},{7,0,1172},{7,0,1671},{9,0,540},{10,0,696},{11,0,265},{11,0,732},\n{11,0,928},{11,0,937},{141,0,438},{134,0,1350},{136,11,547},{132,11,422},{5,11,\n355},{145,11,0},{137,11,905},{5,0,682},{135,0,1887},{132,0,809},{4,0,696},{133,\n11,865},{6,0,1074},{6,0,1472},{14,10,35},{142,10,191},{5,11,914},{134,11,1625},{\n133,11,234},{135,11,1383},{137,11,780},{132,10,125},{4,0,726},{133,0,630},{8,0,\n802},{136,0,838},{132,10,721},{6,0,1337},{7,0,776},{8,10,145},{147,0,56},{132,0,\n970},{7,10,792},{8,10,147},{10,10,821},{139,10,1021},{139,10,970},{8,0,940},{137\n,0,797},{135,11,1312},{7,10,1999},{7,11,816},{7,11,1241},{9,0,248},{9,11,283},{9\n,11,520},{10,0,400},{10,11,213},{10,11,307},{10,11,463},{10,11,671},{10,11,746},\n{11,11,401},{11,11,794},{12,11,517},{18,11,107},{147,11,115},{6,0,1951},{134,0,\n2040},{135,11,339},{5,10,168},{5,10,930},{8,10,74},{9,10,623},{12,10,500},{12,10\n,579},{13,0,41},{143,0,93},{6,0,118},{7,0,215},{7,0,1521},{140,0,11},{6,10,220},\n{7,10,1101},{141,10,105},{6,11,421},{7,11,61},{7,11,1540},{10,11,11},{138,11,501\n},{7,0,615},{138,0,251},{140,11,631},{135,0,1044},{6,10,19},{7,10,1413},{139,10,\n428},{133,0,225},{7,10,96},{8,10,401},{8,10,703},{137,10,896},{145,10,116},{6,11\n,102},{7,11,72},{15,11,142},{147,11,67},{7,10,1961},{7,10,1965},{8,10,702},{136,\n10,750},{7,10,2030},{8,10,150},{8,10,737},{12,10,366},{151,11,30},{4,0,370},{5,0\n,756},{7,0,1326},{135,11,823},{8,10,800},{9,10,148},{9,10,872},{9,10,890},{11,10\n,309},{11,10,1001},{13,10,267},{141,10,323},{6,0,1662},{7,0,48},{8,0,771},{10,0,\n116},{13,0,104},{14,0,105},{14,0,184},{15,0,168},{19,0,92},{148,0,68},{7,11,1870\n},{138,0,209},{7,11,68},{8,11,48},{8,11,88},{8,11,582},{8,11,681},{9,11,373},{9,\n11,864},{11,11,157},{11,11,336},{11,11,843},{148,11,27},{134,0,930},{4,11,88},{5\n,11,137},{5,11,174},{5,11,777},{6,11,1664},{6,11,1725},{7,11,77},{7,11,426},{7,\n11,1317},{7,11,1355},{8,11,126},{8,11,563},{9,11,523},{9,11,750},{10,11,310},{10\n,11,836},{11,11,42},{11,11,318},{11,11,731},{12,11,68},{12,11,92},{12,11,507},{\n12,11,692},{13,11,81},{13,11,238},{13,11,374},{18,11,138},{19,11,78},{19,11,111}\n,{20,11,55},{20,11,77},{148,11,92},{4,11,938},{135,11,1831},{5,10,547},{7,10,424\n},{8,11,617},{138,11,351},{6,0,1286},{6,11,1668},{7,11,1499},{8,11,117},{9,11,\n314},{138,11,174},{6,0,759},{6,0,894},{7,11,707},{139,11,563},{4,0,120},{135,0,\n1894},{9,0,385},{149,0,17},{138,0,429},{133,11,403},{5,0,820},{135,0,931},{5,10,\n133},{138,0,199},{6,0,151},{6,0,1675},{7,0,383},{151,0,10},{6,0,761},{136,10,187\n},{8,0,365},{10,10,0},{10,10,818},{139,10,988},{4,11,44},{5,11,311},{6,11,156},{\n7,11,639},{7,11,762},{7,11,1827},{9,11,8},{9,11,462},{148,11,83},{4,11,346},{7,\n11,115},{9,11,180},{9,11,456},{138,11,363},{136,10,685},{7,0,1086},{145,0,46},{6\n,0,1624},{11,0,11},{12,0,422},{13,0,444},{142,0,360},{6,0,1020},{6,0,1260},{134,\n0,1589},{4,0,43},{5,0,344},{5,0,357},{14,0,472},{150,0,58},{6,0,1864},{6,0,1866}\n,{6,0,1868},{6,0,1869},{6,0,1874},{6,0,1877},{6,0,1903},{6,0,1911},{9,0,920},{9,\n0,921},{9,0,924},{9,0,946},{9,0,959},{9,0,963},{9,0,970},{9,0,997},{9,0,1008},{9\n,0,1017},{12,0,795},{12,0,797},{12,0,798},{12,0,800},{12,0,803},{12,0,811},{12,0\n,820},{12,0,821},{12,0,839},{12,0,841},{12,0,848},{12,0,911},{12,0,921},{12,0,\n922},{12,0,925},{12,0,937},{12,0,944},{12,0,945},{12,0,953},{15,0,184},{15,0,191\n},{15,0,199},{15,0,237},{15,0,240},{15,0,243},{15,0,246},{18,0,203},{21,0,40},{\n21,0,52},{21,0,57},{24,0,23},{24,0,28},{152,0,30},{134,0,725},{145,11,58},{133,0\n,888},{137,10,874},{4,0,711},{8,10,774},{10,10,670},{140,10,51},{144,11,40},{6,\n11,185},{7,11,1899},{139,11,673},{137,10,701},{137,0,440},{4,11,327},{5,11,478},\n{7,11,1332},{8,11,753},{140,11,227},{4,10,127},{5,10,350},{6,10,356},{8,10,426},\n{9,10,572},{10,10,247},{139,10,312},{5,11,1020},{133,11,1022},{4,11,103},{133,11\n,401},{6,0,1913},{6,0,1926},{6,0,1959},{9,0,914},{9,0,939},{9,0,952},{9,0,979},{\n9,0,990},{9,0,998},{9,0,1003},{9,0,1023},{12,0,827},{12,0,834},{12,0,845},{12,0,\n912},{12,0,935},{12,0,951},{15,0,172},{15,0,174},{18,0,198},{149,0,63},{4,11,499\n},{5,0,958},{5,0,987},{135,11,1421},{6,10,59},{6,10,1762},{7,0,885},{9,10,603},{\n141,10,397},{10,11,62},{141,11,164},{4,0,847},{135,0,326},{11,0,276},{142,0,293}\n,{4,0,65},{4,11,96},{5,0,479},{5,0,1004},{7,0,1913},{8,0,317},{9,0,302},{10,0,\n612},{141,0,22},{4,0,261},{135,0,510},{135,0,1514},{6,10,111},{7,10,4},{8,10,163\n},{8,10,776},{138,10,566},{4,0,291},{9,0,515},{12,0,152},{12,0,443},{13,0,392},{\n142,0,357},{7,11,399},{135,11,1492},{4,0,589},{139,0,282},{6,11,563},{135,10,\n1994},{5,10,297},{135,10,1038},{4,0,130},{7,0,843},{135,0,1562},{5,0,42},{5,0,\n879},{7,0,245},{7,0,324},{7,0,1532},{11,0,463},{11,0,472},{13,0,363},{144,0,52},\n{4,0,134},{133,0,372},{133,0,680},{136,10,363},{6,0,1997},{8,0,935},{136,0,977},\n{4,0,810},{135,0,1634},{135,10,1675},{4,11,910},{5,11,832},{135,0,1390},{7,10,\n808},{8,11,266},{139,11,578},{132,0,644},{4,0,982},{138,0,867},{132,10,280},{135\n,0,540},{140,10,54},{135,0,123},{134,0,1978},{4,10,421},{133,10,548},{6,0,623},{\n136,0,789},{4,0,908},{5,0,359},{5,0,508},{6,0,1723},{7,0,343},{7,0,1996},{135,0,\n2026},{134,0,1220},{4,0,341},{135,0,480},{6,10,254},{9,10,109},{138,10,103},{134\n,0,888},{8,11,528},{137,11,348},{4,11,20},{5,11,616},{7,0,1995},{8,0,299},{11,0,\n890},{140,0,674},{135,11,1094},{134,10,1630},{4,0,238},{5,0,503},{6,0,179},{7,0,\n2003},{8,0,381},{8,0,473},{9,0,149},{10,0,788},{15,0,45},{15,0,86},{20,0,110},{\n150,0,57},{133,10,671},{4,11,26},{5,11,429},{6,11,245},{7,11,704},{7,11,1379},{\n135,11,1474},{4,0,121},{5,0,156},{5,0,349},{9,0,431},{10,0,605},{142,0,342},{7,\n11,943},{139,11,614},{132,10,889},{132,11,621},{7,10,1382},{7,10,1910},{135,11,\n1382},{132,10,627},{133,10,775},{133,11,542},{133,11,868},{136,11,433},{6,0,1373\n},{7,0,1011},{11,10,362},{11,10,948},{140,10,388},{6,0,80},{7,0,173},{7,11,1495}\n,{9,0,547},{10,0,730},{14,0,18},{150,0,39},{6,0,1694},{135,0,1974},{140,0,196},{\n4,0,923},{6,0,507},{6,0,1711},{7,10,451},{8,10,389},{12,10,490},{13,10,16},{13,\n10,215},{13,10,351},{18,10,132},{147,10,125},{6,0,646},{134,0,1047},{135,10,841}\n,{136,10,566},{6,0,1611},{135,0,1214},{139,0,926},{132,11,525},{132,0,595},{5,0,\n240},{6,0,459},{7,0,12},{7,0,114},{7,0,949},{7,0,1753},{7,0,1805},{8,0,658},{9,0\n,1},{11,0,959},{141,0,446},{5,10,912},{134,10,1695},{132,0,446},{7,11,62},{12,11\n,45},{147,11,112},{5,10,236},{6,10,572},{8,10,492},{11,10,618},{144,10,56},{5,10\n,190},{136,10,318},{135,10,1376},{4,11,223},{6,11,359},{11,11,3},{13,11,108},{14\n,11,89},{144,11,22},{132,11,647},{134,0,490},{134,0,491},{134,0,1584},{135,11,\n685},{138,11,220},{7,0,250},{136,0,507},{132,0,158},{4,0,140},{7,0,362},{8,0,209\n},{9,0,10},{9,0,160},{9,0,503},{9,0,614},{10,0,689},{11,0,327},{11,0,553},{11,0,\n725},{11,0,767},{12,0,252},{12,0,583},{13,0,192},{14,0,269},{14,0,356},{148,0,50\n},{19,0,1},{19,0,26},{150,0,9},{132,11,109},{6,0,228},{7,0,1341},{9,0,408},{138,\n0,343},{4,0,373},{5,0,283},{6,0,480},{7,0,609},{10,0,860},{138,0,878},{6,0,779},\n{134,0,1209},{4,0,557},{7,11,263},{7,11,628},{136,11,349},{132,0,548},{7,0,197},\n{8,0,142},{8,0,325},{9,0,150},{9,0,596},{10,0,350},{10,0,353},{11,0,74},{11,0,\n315},{12,0,662},{12,0,681},{14,0,423},{143,0,141},{4,11,40},{10,11,67},{11,11,\n117},{11,11,768},{139,11,935},{7,11,992},{8,11,301},{9,11,722},{12,11,63},{13,11\n,29},{14,11,161},{143,11,18},{6,0,1490},{138,11,532},{5,0,580},{7,0,378},{7,0,\n674},{7,0,1424},{15,0,83},{15,11,83},{16,0,11},{144,11,11},{6,0,1057},{6,0,1335}\n,{7,10,85},{7,10,247},{8,10,585},{10,0,316},{138,10,163},{4,0,169},{5,0,83},{6,0\n,399},{6,0,579},{6,0,1513},{7,0,692},{7,0,846},{7,0,1015},{7,0,1799},{8,0,403},{\n9,0,394},{10,0,133},{12,0,4},{12,0,297},{12,0,452},{16,0,81},{18,0,25},{21,0,14}\n,{22,0,12},{151,0,18},{134,0,1106},{7,0,1546},{11,0,299},{142,0,407},{134,0,1192\n},{132,0,177},{5,0,411},{135,0,653},{7,0,439},{10,0,727},{11,0,260},{139,0,684},\n{138,10,145},{147,10,83},{5,0,208},{7,0,753},{135,0,1528},{137,11,617},{135,10,\n1922},{135,11,825},{4,10,124},{10,10,457},{11,0,422},{11,10,121},{11,10,169},{11\n,10,870},{12,10,214},{13,0,389},{14,10,187},{143,10,77},{11,0,615},{11,11,615},{\n15,0,58},{143,11,58},{9,0,618},{138,0,482},{6,0,1952},{6,0,1970},{142,0,505},{7,\n10,1193},{135,11,1838},{133,0,242},{135,10,1333},{6,10,107},{7,10,638},{7,10,\n1632},{137,10,396},{133,0,953},{5,10,370},{134,10,1756},{5,11,28},{6,11,204},{10\n,11,320},{10,11,583},{13,11,502},{14,11,72},{14,11,274},{14,11,312},{14,11,344},\n{15,11,159},{16,11,62},{16,11,69},{17,11,30},{18,11,42},{18,11,53},{18,11,84},{\n18,11,140},{19,11,68},{19,11,85},{20,11,5},{20,11,45},{20,11,101},{22,11,7},{150\n,11,20},{4,11,558},{6,11,390},{7,11,162},{7,11,689},{9,11,360},{138,11,653},{11,\n0,802},{141,0,67},{133,10,204},{133,0,290},{5,10,970},{134,10,1706},{132,0,380},\n{5,0,52},{7,0,277},{9,0,368},{139,0,791},{5,11,856},{6,11,1672},{6,11,1757},{6,\n11,1781},{7,11,1150},{7,11,1425},{7,11,1453},{140,11,513},{5,11,92},{7,10,3},{10\n,11,736},{140,11,102},{4,0,112},{5,0,653},{5,10,483},{5,10,685},{6,10,489},{7,10\n,1204},{136,10,394},{132,10,921},{5,10,1007},{134,0,1028},{5,11,590},{9,11,213},\n{145,11,91},{135,10,1696},{10,0,138},{139,0,476},{5,0,725},{5,0,727},{135,0,1811\n},{4,0,979},{6,0,1821},{6,0,1838},{8,0,876},{8,0,883},{8,0,889},{8,0,893},{8,0,\n895},{10,0,934},{12,0,720},{14,0,459},{148,0,123},{135,11,551},{4,0,38},{6,0,435\n},{7,0,307},{7,0,999},{7,0,1481},{7,0,1732},{7,0,1738},{8,0,371},{9,0,414},{11,0\n,316},{12,0,52},{13,0,420},{147,0,100},{135,0,1296},{132,10,712},{134,10,1629},{\n133,0,723},{134,0,651},{136,11,191},{9,11,791},{10,11,93},{11,11,301},{16,11,13}\n,{17,11,23},{18,11,135},{19,11,12},{20,11,1},{20,11,12},{148,11,14},{136,11,503}\n,{6,11,466},{135,11,671},{6,0,1200},{134,0,1330},{135,0,1255},{134,0,986},{5,0,\n109},{6,0,1784},{7,0,1895},{12,0,296},{140,0,302},{135,11,983},{133,10,485},{134\n,0,660},{134,0,800},{4,10,285},{5,0,216},{5,0,294},{5,10,317},{6,0,591},{6,10,\n301},{7,0,1879},{7,10,7},{8,10,153},{9,0,141},{9,0,270},{9,0,679},{10,0,159},{10\n,10,766},{11,0,197},{11,0,438},{11,10,468},{12,0,538},{12,0,559},{12,10,467},{13\n,10,143},{14,0,144},{14,0,167},{143,0,67},{136,0,945},{134,0,1090},{137,0,81},{\n12,11,468},{19,11,96},{148,11,24},{134,0,391},{138,11,241},{7,0,322},{136,0,249}\n,{134,0,1412},{135,11,795},{5,0,632},{138,0,526},{136,10,819},{6,0,144},{7,0,948\n},{7,0,1042},{7,11,954},{8,0,235},{8,0,461},{9,0,453},{9,0,796},{10,0,354},{145,\n0,77},{139,10,917},{6,0,940},{134,0,1228},{4,0,362},{7,0,52},{135,0,303},{6,11,\n549},{8,11,34},{8,11,283},{9,11,165},{138,11,475},{7,11,370},{7,11,1007},{7,11,\n1177},{135,11,1565},{5,11,652},{5,11,701},{135,11,449},{5,0,196},{6,0,486},{7,0,\n212},{8,0,309},{136,0,346},{6,10,1719},{6,10,1735},{7,10,2016},{7,10,2020},{8,10\n,837},{137,10,852},{6,11,159},{6,11,364},{7,11,516},{7,11,1439},{137,11,518},{\n135,0,1912},{135,0,1290},{132,0,686},{141,11,151},{138,0,625},{136,0,706},{138,\n10,568},{139,0,412},{4,0,30},{133,0,43},{8,10,67},{138,10,419},{7,0,967},{141,0,\n11},{12,0,758},{14,0,441},{142,0,462},{10,10,657},{14,10,297},{142,10,361},{139,\n10,729},{4,0,220},{135,0,1535},{7,11,501},{9,11,111},{10,11,141},{11,11,332},{13\n,11,43},{13,11,429},{14,11,130},{14,11,415},{145,11,102},{4,0,950},{6,0,1859},{7\n,0,11},{8,0,873},{12,0,710},{12,0,718},{12,0,748},{12,0,765},{148,0,124},{5,11,\n149},{5,11,935},{136,11,233},{142,11,291},{134,0,1579},{7,0,890},{8,10,51},{9,10\n,868},{10,10,833},{12,10,481},{12,10,570},{148,10,106},{141,0,2},{132,10,445},{\n136,11,801},{135,0,1774},{7,0,1725},{138,0,393},{5,0,263},{134,0,414},{132,11,\n322},{133,10,239},{7,0,456},{7,10,1990},{8,10,130},{139,10,720},{137,0,818},{5,\n10,123},{6,10,530},{7,10,348},{135,10,1419},{135,10,2024},{6,0,178},{6,0,1750},{\n8,0,251},{9,0,690},{10,0,155},{10,0,196},{10,0,373},{11,0,698},{13,0,155},{148,0\n,93},{5,0,97},{137,0,393},{134,0,674},{11,0,223},{140,0,168},{132,10,210},{139,\n11,464},{6,0,1639},{146,0,159},{139,11,2},{7,0,934},{8,0,647},{17,0,97},{19,0,59\n},{150,0,2},{132,0,191},{4,10,430},{5,0,165},{7,11,357},{9,0,346},{10,0,655},{\n139,0,885},{133,0,877},{5,10,213},{133,11,406},{8,0,128},{139,0,179},{6,11,69},{\n135,11,117},{135,0,1297},{11,11,43},{13,11,72},{141,11,142},{135,11,1830},{142,0\n,164},{5,0,57},{6,0,101},{6,0,586},{6,0,1663},{7,0,132},{7,0,1154},{7,0,1415},{7\n,0,1507},{12,0,493},{15,0,105},{151,0,15},{5,0,459},{7,0,1073},{8,0,241},{136,0,\n334},{133,11,826},{133,10,108},{5,10,219},{10,11,132},{11,11,191},{11,11,358},{\n139,11,460},{6,0,324},{6,0,520},{7,0,338},{7,0,1729},{8,0,228},{139,0,750},{4,10\n,193},{5,10,916},{7,10,364},{10,10,398},{10,10,726},{11,10,317},{11,10,626},{12,\n10,142},{12,10,288},{12,10,678},{13,10,313},{15,10,113},{18,10,114},{21,0,30},{\n150,0,53},{6,11,110},{135,11,1681},{135,0,910},{6,10,241},{7,10,907},{8,10,832},\n{9,10,342},{10,10,729},{11,10,284},{11,10,445},{11,10,651},{11,10,863},{13,10,\n398},{146,10,99},{5,11,1000},{7,0,705},{7,11,733},{9,0,734},{137,11,583},{4,0,73\n},{6,0,612},{7,0,927},{7,0,1822},{8,0,217},{9,0,765},{9,0,766},{10,0,408},{11,0,\n51},{11,0,793},{12,0,266},{15,0,158},{20,0,89},{150,0,32},{4,11,297},{6,11,529},\n{7,0,1330},{7,11,152},{7,11,713},{7,11,1845},{8,11,710},{8,11,717},{140,11,639},\n{5,0,389},{136,0,636},{134,0,1409},{4,10,562},{9,10,254},{139,10,879},{134,0,893\n},{132,10,786},{4,11,520},{135,11,575},{136,0,21},{140,0,721},{136,0,959},{7,11,\n1428},{7,11,1640},{9,11,169},{9,11,182},{9,11,367},{9,11,478},{9,11,506},{9,11,\n551},{9,11,648},{9,11,651},{9,11,697},{9,11,705},{9,11,725},{9,11,787},{9,11,794\n},{10,11,198},{10,11,214},{10,11,267},{10,11,275},{10,11,456},{10,11,551},{10,11\n,561},{10,11,613},{10,11,627},{10,11,668},{10,11,675},{10,11,691},{10,11,695},{\n10,11,707},{10,11,715},{11,11,183},{11,11,201},{11,11,244},{11,11,262},{11,11,\n352},{11,11,439},{11,11,493},{11,11,572},{11,11,591},{11,11,608},{11,11,611},{11\n,11,646},{11,11,674},{11,11,711},{11,11,751},{11,11,761},{11,11,776},{11,11,785}\n,{11,11,850},{11,11,853},{11,11,862},{11,11,865},{11,11,868},{11,11,898},{11,11,\n902},{11,11,903},{11,11,910},{11,11,932},{11,11,942},{11,11,957},{11,11,967},{11\n,11,972},{12,11,148},{12,11,195},{12,11,220},{12,11,237},{12,11,318},{12,11,339}\n,{12,11,393},{12,11,445},{12,11,450},{12,11,474},{12,11,509},{12,11,533},{12,11,\n591},{12,11,594},{12,11,597},{12,11,621},{12,11,633},{12,11,642},{13,11,59},{13,\n11,60},{13,11,145},{13,11,239},{13,11,250},{13,11,273},{13,11,329},{13,11,344},{\n13,11,365},{13,11,372},{13,11,387},{13,11,403},{13,11,414},{13,11,456},{13,11,\n478},{13,11,483},{13,11,489},{14,11,55},{14,11,57},{14,11,81},{14,11,90},{14,11,\n148},{14,11,239},{14,11,266},{14,11,321},{14,11,326},{14,11,327},{14,11,330},{14\n,11,347},{14,11,355},{14,11,401},{14,11,411},{14,11,414},{14,11,416},{14,11,420}\n,{15,11,61},{15,11,74},{15,11,87},{15,11,88},{15,11,94},{15,11,96},{15,11,116},{\n15,11,149},{15,11,154},{16,11,50},{16,11,63},{16,11,73},{17,11,2},{17,11,66},{17\n,11,92},{17,11,103},{17,11,112},{18,11,50},{18,11,54},{18,11,82},{18,11,86},{18,\n11,90},{18,11,111},{18,11,115},{18,11,156},{19,11,40},{19,11,79},{20,11,78},{149\n,11,22},{137,11,170},{134,0,1433},{135,11,1307},{139,11,411},{5,0,189},{7,0,442}\n,{7,0,443},{8,0,281},{12,0,174},{141,0,261},{6,10,216},{7,10,901},{7,10,1343},{\n136,10,493},{5,11,397},{6,11,154},{7,10,341},{7,11,676},{8,11,443},{8,11,609},{9\n,11,24},{9,11,325},{10,11,35},{11,10,219},{11,11,535},{11,11,672},{11,11,1018},{\n12,11,637},{144,11,30},{6,0,2},{7,0,191},{7,0,446},{7,0,1262},{7,0,1737},{8,0,22\n},{8,0,270},{8,0,612},{9,0,4},{9,0,312},{9,0,436},{9,0,626},{10,0,216},{10,0,311\n},{10,0,521},{10,0,623},{11,0,72},{11,0,330},{11,0,455},{12,0,321},{12,0,504},{\n12,0,530},{12,0,543},{13,0,17},{13,0,156},{13,0,334},{14,0,131},{17,0,60},{148,0\n,64},{7,0,354},{10,0,410},{139,0,815},{139,10,130},{7,10,1734},{137,11,631},{10,\n10,115},{11,10,420},{12,0,425},{13,10,404},{14,10,346},{15,0,112},{143,10,54},{6\n,0,60},{6,0,166},{7,0,374},{7,0,670},{7,0,1327},{8,0,411},{8,0,435},{9,0,653},{9\n,0,740},{10,0,385},{11,0,222},{11,0,324},{11,0,829},{140,0,611},{7,0,1611},{13,0\n,14},{15,0,44},{19,0,13},{148,0,76},{133,11,981},{4,11,56},{7,11,1791},{8,11,607\n},{8,11,651},{11,11,465},{11,11,835},{12,11,337},{141,11,480},{5,10,1011},{6,0,\n1478},{136,10,701},{139,0,596},{5,0,206},{134,0,398},{4,10,54},{5,10,666},{7,10,\n1039},{7,10,1130},{9,10,195},{138,10,302},{7,0,50},{9,11,158},{138,11,411},{135,\n11,1120},{6,0,517},{6,10,1669},{7,0,1159},{10,0,621},{139,0,192},{4,0,592},{6,0,\n600},{135,0,1653},{10,0,223},{139,0,645},{136,11,139},{7,0,64},{136,0,245},{142,\n0,278},{6,11,622},{135,11,1030},{136,0,604},{134,0,1502},{138,0,265},{141,11,168\n},{7,0,1763},{140,0,310},{7,10,798},{139,11,719},{7,11,160},{10,11,624},{142,11,\n279},{132,11,363},{7,10,122},{9,10,259},{10,10,84},{11,10,470},{12,10,541},{141,\n10,379},{5,0,129},{6,0,61},{135,0,947},{134,0,1356},{135,11,1191},{13,0,505},{\n141,0,506},{5,10,82},{5,10,131},{7,10,1755},{8,10,31},{9,10,168},{9,10,764},{11,\n0,1000},{139,10,869},{134,0,966},{134,10,605},{134,11,292},{5,11,177},{6,11,616}\n,{7,11,827},{9,11,525},{138,11,656},{135,11,1486},{138,11,31},{5,10,278},{137,10\n,68},{4,10,163},{5,10,201},{5,10,307},{5,10,310},{6,10,335},{7,10,284},{136,10,\n165},{6,0,839},{135,10,1660},{136,10,781},{6,10,33},{135,10,1244},{133,0,637},{4\n,11,161},{133,11,631},{137,0,590},{7,10,1953},{136,10,720},{5,0,280},{7,0,1226},\n{138,10,203},{134,0,1386},{5,0,281},{6,0,1026},{6,10,326},{7,10,677},{137,10,425\n},{7,11,1557},{135,11,1684},{135,0,1064},{9,11,469},{9,11,709},{12,11,512},{14,\n11,65},{145,11,12},{134,0,917},{10,11,229},{11,11,73},{11,11,376},{139,11,433},{\n7,0,555},{7,10,1316},{7,10,1412},{7,10,1839},{9,0,192},{9,10,589},{11,10,241},{\n11,10,676},{11,10,811},{11,10,891},{12,10,140},{12,10,346},{12,10,479},{13,0,30}\n,{13,0,49},{13,10,381},{14,10,188},{15,0,150},{16,0,76},{18,10,30},{148,0,52},{\n149,0,15},{6,0,1882},{6,0,1883},{6,0,1897},{9,0,945},{9,0,1014},{9,0,1020},{12,0\n,823},{12,0,842},{12,0,866},{12,0,934},{15,0,242},{146,0,208},{6,0,965},{134,0,\n1499},{7,0,33},{7,0,120},{8,0,489},{9,0,319},{10,0,820},{11,0,1004},{12,0,379},{\n12,0,679},{13,0,117},{13,0,412},{14,0,25},{15,0,52},{15,0,161},{16,0,47},{149,0,\n2},{6,11,558},{7,11,651},{8,11,421},{9,11,0},{138,11,34},{4,0,937},{5,0,801},{5,\n10,358},{7,0,473},{7,10,1184},{10,10,662},{13,10,212},{13,10,304},{13,10,333},{\n145,10,98},{132,0,877},{6,0,693},{134,0,824},{132,0,365},{7,11,1832},{138,11,374\n},{5,0,7},{139,0,774},{4,0,734},{5,0,662},{134,0,430},{4,0,746},{135,0,1090},{5,\n0,360},{8,0,237},{10,0,231},{147,0,124},{138,11,348},{6,11,6},{7,11,81},{7,11,\n771},{7,11,1731},{9,11,405},{138,11,421},{6,0,740},{137,0,822},{133,10,946},{7,0\n,1485},{136,0,929},{7,10,411},{8,10,631},{9,10,323},{10,10,355},{11,10,491},{12,\n10,143},{12,10,402},{13,10,73},{14,10,408},{15,10,107},{146,10,71},{135,10,590},\n{5,11,881},{133,11,885},{150,11,25},{4,0,852},{5,11,142},{134,11,546},{7,10,1467\n},{8,10,328},{10,10,544},{11,10,955},{13,10,320},{145,10,83},{9,0,17},{10,0,291}\n,{11,10,511},{13,10,394},{14,10,298},{14,10,318},{146,10,103},{5,11,466},{11,11,\n571},{12,11,198},{13,11,283},{14,11,186},{15,11,21},{143,11,103},{134,0,1001},{4\n,11,185},{5,11,257},{5,11,839},{5,11,936},{7,11,171},{9,11,399},{10,11,258},{10,\n11,395},{10,11,734},{11,11,1014},{12,11,23},{13,11,350},{14,11,150},{147,11,6},{\n143,0,35},{132,0,831},{5,10,835},{134,10,483},{4,0,277},{5,0,608},{6,0,493},{7,0\n,457},{7,11,404},{7,11,1377},{7,11,1430},{7,11,2017},{8,11,149},{8,11,239},{8,11\n,512},{8,11,793},{8,11,818},{9,11,474},{9,11,595},{10,11,122},{10,11,565},{10,11\n,649},{10,11,783},{11,11,239},{11,11,295},{11,11,447},{11,11,528},{11,11,639},{\n11,11,800},{11,11,936},{12,0,384},{12,11,25},{12,11,73},{12,11,77},{12,11,157},{\n12,11,316},{12,11,390},{12,11,391},{12,11,394},{12,11,395},{12,11,478},{12,11,\n503},{12,11,592},{12,11,680},{13,11,50},{13,11,53},{13,11,132},{13,11,198},{13,\n11,275},{13,11,322},{13,11,415},{14,11,71},{14,11,257},{14,11,395},{15,11,71},{\n15,11,136},{17,11,123},{18,11,93},{147,11,58},{134,0,1351},{7,0,27},{135,0,316},\n{136,11,712},{136,0,984},{133,0,552},{137,0,264},{132,0,401},{6,0,710},{6,0,1111\n},{134,0,1343},{134,0,1211},{9,0,543},{10,0,524},{11,0,108},{11,0,653},{12,0,524\n},{13,0,123},{14,0,252},{16,0,18},{19,0,38},{20,0,26},{20,0,65},{21,0,3},{151,0,\n11},{4,0,205},{5,0,623},{7,0,104},{8,0,519},{137,0,716},{132,10,677},{4,11,377},\n{152,11,13},{135,11,1673},{7,0,579},{9,0,41},{9,0,244},{9,0,669},{10,0,5},{11,0,\n861},{11,0,951},{139,0,980},{132,0,717},{136,0,1011},{132,0,805},{4,11,180},{135\n,11,1906},{132,10,777},{132,10,331},{132,0,489},{4,11,491},{5,10,747},{134,0,\n1024},{135,11,1182},{4,11,171},{138,11,234},{4,11,586},{7,11,1186},{138,11,631},\n{135,0,892},{135,11,336},{9,11,931},{10,11,334},{148,11,71},{137,0,473},{6,0,864\n},{11,11,926},{140,0,659},{7,0,819},{9,0,26},{9,0,392},{10,0,152},{10,0,226},{11\n,0,19},{12,0,276},{12,0,426},{12,0,589},{13,0,460},{15,0,97},{19,0,48},{148,0,\n104},{135,0,51},{133,10,326},{4,10,691},{146,10,16},{9,0,130},{10,10,680},{10,10\n,793},{11,0,765},{141,10,357},{133,11,765},{6,10,32},{7,10,385},{7,10,757},{7,10\n,1916},{8,0,229},{8,10,94},{8,10,711},{9,10,541},{10,10,162},{10,10,795},{11,10,\n989},{11,10,1010},{12,10,14},{142,10,308},{7,11,474},{137,11,578},{132,0,674},{\n132,0,770},{5,0,79},{7,0,1027},{7,0,1477},{139,0,52},{133,11,424},{134,0,1666},{\n6,0,409},{6,10,349},{6,10,1682},{7,10,1252},{8,10,112},{8,11,714},{9,10,435},{9,\n10,668},{10,10,290},{10,10,319},{10,10,815},{11,10,180},{11,10,837},{12,10,240},\n{13,10,152},{13,10,219},{142,10,158},{5,0,789},{134,0,195},{4,0,251},{4,0,688},{\n7,0,513},{135,0,1284},{132,10,581},{9,11,420},{10,11,269},{10,11,285},{10,11,576\n},{11,11,397},{13,11,175},{145,11,90},{6,10,126},{7,10,573},{8,10,397},{142,10,\n44},{132,11,429},{133,0,889},{4,0,160},{5,0,330},{7,0,1434},{136,0,174},{7,11,18\n},{7,11,699},{7,11,1966},{8,11,752},{9,11,273},{9,11,412},{9,11,703},{10,11,71},\n{10,11,427},{10,11,508},{146,11,97},{6,0,872},{134,0,899},{133,10,926},{134,0,\n1126},{134,0,918},{4,11,53},{5,11,186},{135,11,752},{7,0,268},{136,0,569},{134,0\n,1224},{6,0,1361},{7,10,1232},{137,10,531},{8,11,575},{10,11,289},{139,11,319},{\n133,10,670},{132,11,675},{133,0,374},{135,10,1957},{133,0,731},{11,0,190},{11,11\n,190},{15,0,49},{143,11,49},{4,0,626},{5,0,506},{5,0,642},{6,0,425},{10,0,202},{\n139,0,141},{137,0,444},{7,10,242},{135,10,1942},{6,11,209},{8,11,468},{9,11,210}\n,{11,11,36},{12,11,28},{12,11,630},{13,11,21},{13,11,349},{14,11,7},{145,11,13},\n{4,11,342},{135,11,1179},{5,10,834},{7,10,1202},{8,10,14},{9,10,481},{137,10,880\n},{4,11,928},{133,11,910},{4,11,318},{4,11,496},{7,11,856},{139,11,654},{136,0,\n835},{7,0,1526},{138,10,465},{151,0,17},{135,0,477},{4,10,357},{6,10,172},{7,10,\n143},{137,10,413},{6,0,1374},{138,0,994},{4,10,590},{146,0,76},{7,0,287},{8,0,\n355},{9,0,293},{137,0,743},{134,0,1389},{7,11,915},{8,11,247},{147,11,0},{4,11,\n202},{5,11,382},{6,11,454},{7,11,936},{7,11,1803},{8,11,758},{9,11,375},{9,11,\n895},{10,11,743},{10,11,792},{11,11,978},{11,11,1012},{142,11,109},{5,0,384},{8,\n0,455},{140,0,48},{132,11,390},{5,10,169},{7,10,333},{136,10,45},{5,0,264},{134,\n0,184},{138,11,791},{133,11,717},{132,10,198},{6,11,445},{7,11,332},{137,11,909}\n,{136,0,1001},{4,10,24},{5,10,140},{5,10,185},{7,10,1500},{11,10,565},{139,10,\n838},{134,11,578},{5,0,633},{6,0,28},{135,0,1323},{132,0,851},{136,11,267},{7,0,\n359},{8,0,243},{140,0,175},{4,10,334},{133,10,593},{141,11,87},{136,11,766},{10,\n0,287},{10,11,287},{12,0,138},{140,11,138},{4,0,105},{132,0,740},{140,10,116},{\n134,0,857},{135,11,1841},{6,0,1402},{137,0,819},{132,11,584},{132,10,709},{133,\n10,897},{5,0,224},{13,0,174},{146,0,52},{135,10,1840},{4,10,608},{133,10,497},{\n139,11,60},{4,0,758},{135,0,1649},{4,11,226},{4,11,326},{135,11,1770},{5,11,426}\n,{8,11,30},{9,11,2},{11,11,549},{147,11,122},{135,10,2039},{6,10,540},{136,10,\n136},{4,0,573},{4,10,897},{5,10,786},{136,0,655},{7,0,351},{139,0,128},{133,10,\n999},{4,10,299},{135,10,1004},{133,0,918},{132,11,345},{4,11,385},{7,11,265},{\n135,11,587},{133,10,456},{136,10,180},{6,0,687},{134,0,1537},{4,11,347},{5,11,\n423},{5,11,996},{135,11,1329},{132,10,755},{7,11,1259},{9,11,125},{11,11,65},{\n140,11,285},{5,11,136},{6,11,136},{136,11,644},{134,0,1525},{4,0,1009},{135,0,\n1139},{139,10,338},{132,0,340},{135,10,1464},{8,0,847},{10,0,861},{10,0,876},{10\n,0,889},{10,0,922},{10,0,929},{10,0,933},{12,0,784},{140,0,791},{139,0,176},{9,\n11,134},{10,11,2},{10,11,27},{10,11,333},{11,11,722},{143,11,1},{4,11,433},{133,\n11,719},{5,0,985},{7,0,509},{7,0,529},{145,0,96},{132,0,615},{4,10,890},{5,10,\n805},{5,10,819},{5,10,961},{6,10,396},{6,10,1631},{6,10,1678},{7,10,1967},{7,10,\n2041},{9,10,630},{11,10,8},{11,10,1019},{12,10,176},{13,10,225},{14,10,292},{149\n,10,24},{135,0,1919},{134,0,1131},{144,11,21},{144,11,51},{135,10,1815},{4,0,247\n},{7,10,1505},{10,10,190},{10,10,634},{11,10,792},{12,10,358},{140,10,447},{5,10\n,0},{6,10,536},{7,10,604},{13,10,445},{145,10,126},{4,0,184},{5,0,390},{6,0,337}\n,{7,0,23},{7,0,494},{7,0,618},{7,0,1456},{8,0,27},{8,0,599},{10,0,153},{139,0,\n710},{6,10,232},{6,10,412},{7,10,1074},{8,10,9},{8,10,157},{8,10,786},{9,10,196}\n,{9,10,352},{9,10,457},{10,10,337},{11,10,232},{11,10,877},{12,10,480},{140,10,\n546},{7,10,958},{141,0,38},{4,10,382},{136,10,579},{4,10,212},{135,10,1206},{4,\n11,555},{8,11,536},{138,11,288},{11,11,139},{139,11,171},{9,11,370},{138,11,90},\n{132,0,1015},{134,0,1088},{5,10,655},{135,11,977},{134,0,1585},{17,10,67},{147,\n10,74},{10,0,227},{11,0,497},{11,0,709},{140,0,415},{6,0,360},{7,0,1664},{136,0,\n478},{6,10,231},{7,0,95},{136,10,423},{140,11,65},{4,11,257},{135,11,2031},{135,\n11,1768},{133,10,300},{139,11,211},{136,0,699},{6,10,237},{7,10,611},{8,10,100},\n{9,10,416},{11,10,335},{12,10,173},{146,10,101},{14,0,26},{146,0,150},{6,0,581},\n{135,0,1119},{135,10,1208},{132,0,739},{6,11,83},{6,11,1733},{135,11,1389},{137,\n0,869},{4,0,67},{5,0,422},{7,0,1037},{7,0,1289},{7,0,1555},{9,0,741},{145,0,108}\n,{133,10,199},{12,10,427},{146,10,38},{136,0,464},{142,0,42},{8,11,501},{9,11,\n696},{138,0,96},{134,11,592},{4,0,512},{4,0,966},{5,0,342},{6,0,1855},{8,0,869},\n{8,0,875},{8,0,901},{144,0,26},{8,0,203},{11,0,823},{11,0,846},{12,0,482},{13,0,\n277},{13,0,302},{13,0,464},{14,0,205},{142,0,221},{4,0,449},{133,0,718},{7,11,\n1718},{9,11,95},{9,11,274},{10,11,279},{10,11,317},{10,11,420},{11,11,303},{11,\n11,808},{12,11,134},{12,11,367},{13,11,149},{13,11,347},{14,11,349},{14,11,406},\n{18,11,22},{18,11,89},{18,11,122},{147,11,47},{133,11,26},{4,0,355},{6,0,311},{9\n,0,256},{138,0,404},{132,11,550},{6,10,312},{6,10,1715},{10,0,758},{10,10,584},{\n11,10,546},{11,10,692},{12,10,259},{12,10,295},{13,10,46},{141,10,154},{136,11,\n822},{4,11,902},{5,0,827},{5,11,809},{6,11,122},{135,11,896},{5,0,64},{140,0,581\n},{4,0,442},{6,0,739},{7,0,1047},{7,0,1352},{7,0,1643},{7,11,1911},{9,11,449},{\n10,11,192},{138,11,740},{135,11,262},{132,10,588},{133,11,620},{4,11,34},{5,0,\n977},{5,11,574},{6,0,288},{7,0,528},{7,11,279},{7,11,1624},{136,11,601},{4,10,\n231},{5,10,61},{6,0,1375},{6,10,104},{7,10,729},{7,10,964},{7,10,1658},{140,10,\n414},{6,10,263},{138,10,757},{132,10,320},{4,0,254},{5,11,332},{7,0,1309},{135,\n11,1309},{6,11,261},{8,11,182},{139,11,943},{132,10,225},{6,0,12},{135,0,1219},{\n4,0,275},{6,11,1721},{12,0,376},{141,11,490},{4,11,933},{133,11,880},{4,10,405},\n{6,0,951},{6,0,1109},{6,0,1181},{7,0,154},{7,10,817},{14,10,58},{17,10,37},{146,\n10,124},{5,10,974},{134,0,1520},{134,0,1753},{6,0,369},{6,0,502},{7,0,1036},{8,0\n,348},{9,0,452},{10,0,26},{11,0,224},{11,0,387},{11,0,772},{12,0,95},{12,0,629},\n{13,0,195},{13,0,207},{13,0,241},{14,0,260},{14,0,270},{143,0,140},{132,0,269},{\n5,0,480},{7,0,532},{7,0,1197},{7,0,1358},{8,0,291},{11,0,349},{142,0,396},{5,10,\n235},{7,10,1239},{11,10,131},{140,10,370},{7,10,956},{7,10,1157},{7,10,1506},{7,\n10,1606},{7,10,1615},{7,10,1619},{7,10,1736},{7,10,1775},{8,10,590},{9,10,324},{\n9,10,736},{9,10,774},{9,10,776},{9,10,784},{10,10,567},{10,10,708},{11,10,518},{\n11,10,613},{11,10,695},{11,10,716},{11,10,739},{11,10,770},{11,10,771},{11,10,\n848},{11,10,857},{11,10,931},{11,10,947},{12,10,326},{12,10,387},{12,10,484},{12\n,10,528},{12,10,552},{12,10,613},{13,10,189},{13,10,256},{13,10,340},{13,10,432}\n,{13,10,436},{13,10,440},{13,10,454},{14,10,174},{14,10,220},{14,10,284},{14,10,\n390},{145,10,121},{8,11,598},{9,11,664},{138,11,441},{9,10,137},{138,10,221},{\n133,11,812},{148,0,15},{134,0,1341},{4,11,137},{6,0,1017},{7,11,1178},{135,11,\n1520},{7,10,390},{138,10,140},{7,11,1260},{135,11,1790},{137,11,191},{135,10,\n1144},{6,0,1810},{7,0,657},{8,0,886},{10,0,857},{14,0,440},{144,0,96},{6,11,1661\n},{7,11,1975},{7,11,2009},{7,11,2011},{136,0,533},{6,0,1453},{134,10,464},{132,\n11,715},{5,10,407},{11,10,204},{11,10,243},{11,10,489},{12,10,293},{19,10,37},{\n20,10,73},{150,10,38},{133,11,703},{4,0,211},{5,10,325},{7,0,1483},{8,10,5},{8,\n10,227},{9,10,105},{10,10,585},{140,10,614},{4,0,332},{5,0,335},{6,0,238},{7,0,\n269},{7,0,811},{7,0,1797},{8,0,836},{9,0,507},{141,0,242},{5,11,89},{7,11,1915},\n{9,11,185},{9,11,235},{9,11,496},{10,11,64},{10,11,270},{10,11,403},{10,11,469},\n{10,11,529},{10,11,590},{11,11,140},{11,11,860},{13,11,1},{13,11,422},{14,11,341\n},{14,11,364},{17,11,93},{18,11,113},{19,11,97},{147,11,113},{133,11,695},{5,11,\n6},{6,10,621},{6,11,183},{7,11,680},{7,11,978},{7,11,1013},{7,11,1055},{12,11,\n230},{13,10,504},{13,11,172},{16,0,19},{146,11,29},{136,0,156},{133,0,1009},{6,\n11,29},{139,11,63},{134,0,820},{134,10,218},{7,10,454},{7,10,782},{8,10,768},{\n140,10,686},{5,0,228},{6,0,203},{7,0,156},{8,0,347},{9,0,265},{15,11,8},{18,0,39\n},{18,11,39},{20,0,54},{20,11,54},{21,0,31},{21,11,31},{22,0,3},{22,11,3},{23,0,\n0},{151,11,0},{7,0,1131},{135,0,1468},{144,10,0},{134,0,1276},{10,10,676},{140,\n10,462},{132,11,311},{134,11,1740},{7,11,170},{8,11,90},{8,11,177},{8,11,415},{\n11,11,714},{142,11,281},{134,10,164},{6,0,1792},{138,0,849},{150,10,50},{5,0,291\n},{5,0,318},{7,0,765},{8,11,522},{9,0,389},{12,0,548},{142,11,328},{11,11,91},{\n13,11,129},{15,11,101},{145,11,125},{4,11,494},{6,11,74},{7,11,44},{7,11,407},{8\n,11,551},{12,11,17},{15,11,5},{148,11,11},{4,11,276},{133,11,296},{6,10,343},{7,\n10,195},{7,11,1777},{9,10,226},{10,10,197},{10,10,575},{11,10,502},{139,10,899},\n{10,0,525},{139,0,82},{4,11,7},{5,11,90},{5,11,158},{6,11,542},{7,11,221},{7,11,\n1574},{9,11,490},{10,11,540},{11,11,443},{11,11,757},{142,0,453},{135,0,666},{22\n,10,29},{150,11,29},{4,0,422},{147,10,8},{5,0,355},{145,0,0},{6,0,1873},{7,11,\n588},{9,0,918},{9,11,175},{138,11,530},{143,11,31},{7,10,1125},{9,10,143},{11,0,\n165},{14,10,405},{150,10,21},{9,0,260},{137,0,905},{5,11,872},{6,11,57},{6,11,\n479},{6,11,562},{7,11,471},{7,11,1060},{9,11,447},{9,11,454},{141,11,6},{138,11,\n704},{133,0,865},{5,0,914},{134,0,1625},{133,0,234},{5,11,31},{6,11,614},{7,0,\n1383},{145,11,61},{7,11,1200},{138,11,460},{6,11,424},{135,11,1866},{136,0,306},\n{5,10,959},{12,11,30},{13,11,148},{14,11,87},{14,11,182},{16,11,42},{18,11,92},{\n148,11,70},{6,0,1919},{6,0,1921},{9,0,923},{9,0,930},{9,0,941},{9,0,949},{9,0,\n987},{9,0,988},{9,0,992},{12,0,802},{12,0,815},{12,0,856},{12,0,885},{12,0,893},\n{12,0,898},{12,0,919},{12,0,920},{12,0,941},{12,0,947},{15,0,183},{15,0,185},{15\n,0,189},{15,0,197},{15,0,202},{15,0,233},{15,11,156},{18,0,218},{18,0,219},{146,\n0,233},{135,10,1759},{136,10,173},{5,11,13},{6,11,142},{13,0,163},{13,0,180},{18\n,0,78},{148,0,35},{134,10,266},{6,11,97},{7,11,116},{8,11,322},{8,11,755},{9,11,\n548},{10,11,714},{11,11,884},{141,11,324},{135,0,1312},{9,0,814},{137,11,676},{\n133,0,707},{135,0,1493},{6,0,421},{7,0,61},{7,0,1540},{10,0,11},{138,0,501},{7,\n11,866},{7,11,1163},{12,0,733},{140,0,766},{137,0,341},{142,0,98},{145,11,115},{\n135,11,1111},{136,10,300},{136,0,1014},{8,11,1},{9,11,112},{138,11,326},{132,11,\n730},{5,11,488},{6,11,527},{7,11,489},{7,11,1636},{8,11,121},{8,11,144},{8,11,\n359},{9,11,193},{9,11,241},{9,11,336},{9,11,882},{11,11,266},{11,11,372},{11,11,\n944},{12,11,401},{140,11,641},{6,0,971},{134,0,1121},{6,0,102},{7,0,72},{15,0,\n142},{147,0,67},{151,0,30},{135,0,823},{134,0,1045},{5,10,427},{5,10,734},{7,10,\n478},{136,10,52},{7,0,1930},{11,10,217},{142,10,165},{6,0,1512},{135,0,1870},{9,\n11,31},{10,11,244},{10,11,699},{12,11,149},{141,11,497},{133,11,377},{145,11,101\n},{10,11,158},{13,11,13},{13,11,137},{13,11,258},{14,11,111},{14,11,225},{14,11,\n253},{14,11,304},{14,11,339},{14,11,417},{146,11,33},{6,0,87},{6,10,1734},{7,10,\n20},{7,10,1056},{8,10,732},{9,10,406},{9,10,911},{138,10,694},{134,0,1243},{137,\n0,245},{7,0,68},{8,0,48},{8,0,88},{8,0,582},{8,0,681},{9,0,373},{9,0,864},{11,0,\n157},{11,0,336},{11,0,843},{148,0,27},{8,11,663},{144,11,8},{133,10,613},{4,0,88\n},{5,0,137},{5,0,174},{5,0,777},{6,0,1664},{6,0,1725},{7,0,77},{7,0,426},{7,0,\n1317},{7,0,1355},{8,0,126},{8,0,563},{9,0,523},{9,0,750},{10,0,310},{10,0,836},{\n11,0,42},{11,0,318},{11,0,731},{12,0,68},{12,0,92},{12,0,507},{12,0,692},{13,0,\n81},{13,0,238},{13,0,374},{14,0,436},{18,0,138},{19,0,78},{19,0,111},{20,0,55},{\n20,0,77},{148,0,92},{141,0,418},{4,0,938},{137,0,625},{138,0,351},{5,11,843},{7,\n10,32},{7,10,984},{8,10,85},{8,10,709},{9,10,579},{9,10,847},{9,10,856},{10,10,\n799},{11,10,258},{11,10,1007},{12,10,331},{12,10,615},{13,10,188},{13,10,435},{\n14,10,8},{15,10,165},{16,10,27},{148,10,40},{6,0,1668},{7,0,1499},{8,0,117},{9,0\n,314},{138,0,174},{135,0,707},{132,11,554},{133,11,536},{5,0,403},{5,11,207},{9,\n11,79},{11,11,625},{145,11,7},{132,11,424},{136,11,785},{4,10,167},{135,10,82},{\n9,0,7},{9,11,7},{23,0,6},{151,11,6},{5,10,62},{6,0,282},{6,10,534},{7,10,74},{7,\n10,678},{7,10,684},{7,10,1043},{7,10,1072},{8,10,280},{8,10,541},{8,10,686},{9,\n10,258},{10,10,519},{11,10,252},{140,10,282},{138,10,33},{132,10,359},{4,0,44},{\n5,0,311},{6,0,156},{7,0,639},{7,0,762},{7,0,1827},{9,0,8},{9,0,462},{148,0,83},{\n7,11,769},{9,11,18},{138,11,358},{4,0,346},{4,11,896},{6,11,1777},{7,0,115},{9,0\n,180},{9,0,456},{138,0,363},{133,10,211},{7,0,761},{7,0,1051},{137,0,545},{6,10,\n145},{141,10,336},{7,11,750},{9,11,223},{11,11,27},{11,11,466},{12,11,624},{14,\n11,265},{146,11,61},{6,0,752},{6,0,768},{6,0,1195},{6,0,1254},{6,0,1619},{137,0,\n835},{6,0,1936},{8,0,930},{136,0,960},{132,10,263},{132,11,249},{4,10,916},{140,\n0,653},{4,11,603},{133,11,661},{4,11,11},{6,11,128},{7,11,231},{7,11,1533},{8,0,\n344},{138,11,725},{134,0,1483},{134,0,875},{6,0,185},{7,0,1899},{9,0,875},{139,0\n,673},{15,10,155},{144,10,79},{4,10,599},{6,10,1634},{7,0,93},{7,0,210},{7,0,\n1223},{7,10,67},{7,10,691},{7,10,979},{7,10,1697},{8,0,451},{8,0,460},{8,10,207}\n,{8,10,214},{8,10,231},{8,10,294},{8,10,336},{8,10,428},{8,10,471},{8,10,622},{8\n,10,626},{8,10,679},{8,10,759},{8,10,829},{9,10,11},{9,10,246},{9,10,484},{9,10,\n573},{9,10,706},{9,10,762},{9,10,798},{9,10,855},{9,10,870},{9,10,912},{10,10,\n303},{10,10,335},{10,10,424},{10,10,461},{10,10,543},{10,10,759},{10,10,814},{11\n,0,353},{11,0,475},{11,10,59},{11,10,235},{11,10,590},{11,10,929},{11,10,963},{\n11,10,987},{12,10,114},{12,10,182},{12,10,226},{12,10,332},{12,10,439},{12,10,\n575},{12,10,598},{12,10,675},{13,10,8},{13,10,125},{13,10,194},{13,10,287},{14,\n10,197},{14,10,383},{15,10,53},{17,10,63},{19,10,46},{19,10,98},{19,10,106},{148\n,10,85},{132,11,476},{4,0,327},{5,0,478},{7,0,1332},{136,0,753},{5,0,1020},{133,\n0,1022},{135,11,1807},{4,0,103},{133,0,401},{4,0,499},{135,0,1421},{10,0,207},{\n13,0,164},{147,10,126},{9,11,20},{10,11,324},{139,11,488},{132,0,96},{9,11,280},\n{138,11,134},{135,0,968},{133,10,187},{135,10,1286},{5,11,112},{6,11,103},{134,\n11,150},{4,10,215},{8,0,914},{9,10,38},{10,0,3},{11,10,23},{11,10,127},{139,10,\n796},{135,0,399},{6,0,563},{137,0,224},{6,0,704},{134,0,1214},{4,11,708},{8,11,\n15},{9,11,50},{9,11,386},{11,11,18},{11,11,529},{140,11,228},{4,11,563},{7,11,\n109},{7,11,592},{7,11,637},{7,11,770},{7,11,1701},{8,11,436},{8,11,463},{9,11,60\n},{9,11,335},{9,11,904},{10,11,73},{11,11,434},{12,11,585},{13,11,331},{18,11,\n110},{148,11,60},{134,0,1559},{132,11,502},{6,11,347},{138,11,161},{4,11,33},{5,\n11,102},{5,11,500},{6,11,284},{7,11,1079},{7,11,1423},{7,11,1702},{8,11,470},{9,\n11,554},{9,11,723},{139,11,333},{7,11,246},{135,11,840},{6,11,10},{8,11,571},{9,\n11,739},{143,11,91},{5,11,626},{8,0,861},{10,0,905},{12,0,730},{140,0,789},{134,\n0,946},{5,0,746},{12,0,333},{12,11,333},{14,0,332},{142,11,332},{5,11,18},{6,11,\n526},{13,11,24},{13,11,110},{19,11,5},{147,11,44},{4,0,910},{5,0,832},{135,10,\n2002},{10,11,768},{139,11,787},{4,11,309},{5,11,462},{7,11,970},{135,11,1097},{4\n,10,28},{5,10,440},{7,10,248},{11,10,833},{140,10,344},{134,10,1654},{6,0,632},{\n6,0,652},{6,0,1272},{6,0,1384},{134,0,1560},{134,11,1704},{5,10,853},{134,0,1393\n},{6,10,249},{7,10,1234},{139,10,573},{5,11,86},{7,11,743},{9,11,85},{10,11,281}\n,{10,11,432},{11,11,490},{12,11,251},{13,11,118},{14,11,378},{146,11,143},{5,11,\n524},{133,11,744},{134,0,1514},{10,0,201},{142,0,319},{7,0,717},{7,10,392},{8,10\n,20},{8,10,172},{8,10,690},{9,10,383},{9,10,845},{10,0,510},{11,10,293},{11,10,\n832},{11,10,920},{11,10,984},{141,10,221},{134,0,1381},{5,10,858},{133,10,992},{\n8,0,528},{137,0,348},{10,11,107},{140,11,436},{4,0,20},{133,0,616},{134,0,1251},\n{132,11,927},{10,11,123},{12,11,670},{13,11,371},{14,11,142},{146,11,94},{134,0,\n1163},{7,11,1149},{137,11,156},{134,0,307},{133,11,778},{7,0,1091},{135,0,1765},\n{5,11,502},{6,10,268},{137,10,62},{8,11,196},{10,11,283},{139,11,406},{4,0,26},{\n5,0,429},{6,0,245},{7,0,704},{7,0,1379},{135,0,1474},{133,11,855},{132,0,881},{4\n,0,621},{135,11,1596},{7,11,1400},{9,11,446},{138,11,45},{6,0,736},{138,10,106},\n{133,0,542},{134,0,348},{133,0,868},{136,0,433},{135,0,1495},{138,0,771},{6,10,\n613},{136,10,223},{138,0,215},{141,0,124},{136,11,391},{135,11,172},{132,10,670}\n,{140,0,55},{9,10,40},{139,10,136},{7,0,62},{147,0,112},{132,0,856},{132,11,568}\n,{11,10,259},{140,0,270},{8,0,572},{137,0,698},{4,11,732},{9,10,310},{137,10,682\n},{142,10,296},{134,0,939},{136,11,733},{135,11,1435},{7,10,1401},{135,10,1476},\n{4,10,296},{6,0,352},{7,10,401},{7,10,1410},{7,10,1594},{7,10,1674},{8,10,63},{8\n,10,660},{137,10,74},{4,11,428},{133,11,668},{4,10,139},{4,10,388},{140,10,188},\n{7,11,2015},{140,11,665},{132,0,647},{146,0,10},{138,0,220},{142,0,464},{132,0,\n109},{134,0,1746},{4,10,747},{6,0,515},{6,11,1623},{6,11,1681},{7,10,649},{7,10,\n1479},{135,10,1583},{133,10,232},{135,0,566},{137,10,887},{4,0,40},{10,0,67},{11\n,0,117},{11,0,768},{139,0,935},{132,0,801},{7,0,992},{8,0,301},{9,0,722},{12,0,\n63},{13,0,29},{14,0,161},{143,0,18},{139,0,923},{6,11,1748},{8,11,715},{9,11,802\n},{10,11,46},{10,11,819},{13,11,308},{14,11,351},{14,11,363},{146,11,67},{137,11\n,745},{4,10,14},{7,0,1145},{7,10,1801},{10,10,748},{141,10,458},{4,11,63},{5,11,\n347},{134,11,474},{135,0,568},{4,10,425},{7,11,577},{7,11,1432},{9,11,475},{9,11\n,505},{9,11,526},{9,11,609},{9,11,689},{9,11,726},{9,11,735},{9,11,738},{10,11,\n556},{10,11,674},{10,11,684},{11,11,89},{11,11,202},{11,11,272},{11,11,380},{11,\n11,415},{11,11,505},{11,11,537},{11,11,550},{11,11,562},{11,11,640},{11,11,667},\n{11,11,688},{11,11,847},{11,11,927},{11,11,930},{11,11,940},{12,11,144},{12,11,\n325},{12,11,329},{12,11,389},{12,11,403},{12,11,451},{12,11,515},{12,11,604},{12\n,11,616},{12,11,626},{13,11,66},{13,11,131},{13,11,167},{13,11,236},{13,11,368},\n{13,11,411},{13,11,434},{13,11,453},{13,11,461},{13,11,474},{14,11,59},{14,11,60\n},{14,11,139},{14,11,152},{14,11,276},{14,11,353},{14,11,402},{15,11,28},{15,11,\n81},{15,11,123},{15,11,152},{18,11,136},{148,11,88},{137,0,247},{135,11,1622},{9\n,11,544},{11,11,413},{144,11,25},{4,0,645},{6,10,1768},{7,0,825},{135,11,89},{\n140,0,328},{5,10,943},{134,10,1779},{134,0,1363},{5,10,245},{6,10,576},{7,10,582\n},{136,10,225},{134,0,1280},{5,11,824},{133,11,941},{7,11,440},{8,11,230},{139,\n11,106},{5,0,28},{6,0,204},{10,0,320},{10,0,583},{13,0,502},{14,0,72},{14,0,274}\n,{14,0,312},{14,0,344},{15,0,159},{16,0,62},{16,0,69},{17,0,30},{18,0,42},{18,0,\n53},{18,0,84},{18,0,140},{19,0,68},{19,0,85},{20,0,5},{20,0,45},{20,0,101},{22,0\n,7},{150,0,20},{4,0,558},{6,0,390},{7,0,162},{7,0,689},{9,0,360},{138,0,653},{\n134,0,764},{6,0,862},{137,0,833},{5,0,856},{6,0,1672},{6,0,1757},{134,0,1781},{5\n,0,92},{10,0,736},{140,0,102},{6,0,1927},{6,0,1944},{8,0,924},{8,0,948},{10,0,\n967},{138,0,978},{134,0,1479},{5,0,590},{8,0,360},{9,0,213},{138,0,63},{134,0,\n1521},{6,0,709},{134,0,891},{132,10,443},{13,0,477},{14,0,120},{148,0,61},{4,11,\n914},{5,11,800},{133,11,852},{10,11,54},{141,11,115},{4,11,918},{133,11,876},{\n139,11,152},{4,11,92},{133,11,274},{135,11,1901},{9,11,800},{10,11,693},{11,11,\n482},{11,11,734},{139,11,789},{4,10,298},{137,0,483},{6,0,1213},{141,11,498},{\n135,11,1451},{133,11,743},{4,0,1022},{10,0,1000},{12,0,957},{12,0,980},{12,0,\n1013},{14,0,481},{144,0,116},{4,11,49},{7,11,280},{7,11,1633},{8,0,503},{145,0,\n29},{135,0,1712},{134,0,466},{136,11,47},{5,10,164},{7,10,121},{142,10,189},{7,\n10,812},{7,10,1261},{7,10,1360},{9,10,632},{140,10,352},{139,10,556},{132,0,731}\n,{5,11,272},{5,11,908},{5,11,942},{7,11,1008},{7,11,1560},{8,11,197},{9,11,47},{\n11,11,538},{139,11,742},{4,10,172},{9,10,611},{10,10,436},{12,10,673},{141,10,\n255},{133,10,844},{10,0,484},{11,0,754},{12,0,457},{14,0,171},{14,0,389},{146,0,\n153},{9,10,263},{10,10,147},{138,10,492},{137,11,891},{138,0,241},{133,10,537},{\n6,0,2005},{136,0,964},{137,10,842},{151,11,8},{4,11,407},{132,11,560},{135,11,\n1884},{6,0,1100},{134,0,1242},{135,0,954},{5,10,230},{5,10,392},{6,10,420},{9,10\n,568},{140,10,612},{4,11,475},{11,11,35},{11,11,90},{13,11,7},{13,11,71},{13,11,\n177},{142,11,422},{136,11,332},{135,0,1958},{6,0,549},{8,0,34},{8,0,283},{9,0,\n165},{138,0,475},{10,0,952},{12,0,966},{140,0,994},{5,0,652},{5,0,701},{135,0,\n449},{4,0,655},{7,0,850},{17,0,75},{146,0,137},{4,0,146},{5,10,41},{7,0,1618},{7\n,10,1459},{7,10,1469},{7,10,1859},{8,0,670},{9,10,549},{139,10,905},{133,10,696}\n,{6,0,159},{6,0,364},{7,0,516},{137,0,518},{135,0,1439},{6,11,222},{7,11,636},{7\n,11,1620},{8,11,409},{9,11,693},{139,11,77},{13,0,151},{141,11,45},{4,10,771},{4\n,11,336},{134,0,1027},{139,11,392},{10,11,121},{11,11,175},{149,11,16},{8,0,950}\n,{138,0,983},{133,10,921},{135,0,993},{6,10,180},{7,10,1137},{8,10,751},{139,10,\n805},{7,0,501},{9,0,111},{10,0,141},{11,0,332},{13,0,43},{13,0,429},{14,0,130},{\n14,0,415},{145,0,102},{4,10,183},{5,11,882},{7,10,271},{11,10,824},{11,10,952},{\n13,10,278},{13,10,339},{13,10,482},{14,10,424},{148,10,99},{4,10,19},{5,10,477},\n{5,10,596},{6,10,505},{7,10,1221},{11,10,907},{12,10,209},{141,10,214},{135,10,\n1215},{133,0,452},{132,11,426},{5,0,149},{136,0,233},{133,0,935},{6,11,58},{7,11\n,654},{7,11,745},{7,11,1969},{8,11,240},{8,11,675},{9,11,479},{9,11,731},{10,11,\n330},{10,11,593},{10,11,817},{11,11,32},{11,11,133},{11,11,221},{145,11,68},{7,\n11,102},{9,11,538},{12,0,582},{146,0,131},{136,0,801},{134,10,1645},{132,0,70},{\n6,10,92},{6,10,188},{7,10,1269},{7,10,1524},{7,10,1876},{10,10,228},{139,10,1020\n},{4,10,459},{133,10,966},{138,0,369},{12,10,330},{144,0,36},{141,11,366},{6,10,\n18},{7,0,721},{7,10,932},{8,10,757},{9,10,54},{9,10,65},{9,10,844},{10,0,236},{\n10,10,113},{10,10,315},{10,10,798},{11,10,153},{12,0,204},{12,10,151},{12,10,392\n},{12,10,666},{142,10,248},{7,0,241},{8,10,548},{9,10,532},{10,0,430},{10,10,117\n},{11,10,351},{11,10,375},{143,10,23},{134,10,1742},{133,10,965},{133,11,566},{6\n,11,48},{135,11,63},{134,10,182},{10,10,65},{10,10,488},{138,10,497},{6,11,114},\n{7,11,1224},{7,11,1556},{136,11,3},{134,0,1817},{8,11,576},{137,11,267},{6,0,\n1078},{144,0,16},{9,10,588},{138,10,260},{138,0,1021},{5,0,406},{134,0,2022},{\n133,11,933},{6,0,69},{135,0,117},{7,0,1830},{136,11,427},{4,0,432},{135,0,824},{\n134,10,1786},{133,0,826},{139,11,67},{133,11,759},{135,10,308},{137,0,816},{133,\n0,1000},{4,0,297},{6,0,529},{7,0,152},{7,0,713},{7,0,1845},{8,0,710},{8,0,717},{\n12,0,639},{140,0,685},{7,0,423},{136,10,588},{136,10,287},{136,0,510},{134,0,\n1048},{6,0,618},{7,11,56},{7,11,1989},{8,11,337},{8,11,738},{9,11,600},{10,11,\n483},{12,11,37},{13,11,447},{142,11,92},{4,0,520},{135,0,575},{8,0,990},{138,0,\n977},{135,11,774},{9,11,347},{11,11,24},{140,11,170},{136,11,379},{140,10,290},{\n132,11,328},{4,0,321},{134,0,569},{4,11,101},{135,11,1171},{5,11,833},{7,0,723},\n{7,0,1135},{136,11,744},{7,10,719},{8,10,809},{136,10,834},{8,0,921},{136,10,796\n},{5,10,210},{6,10,213},{7,10,60},{10,10,364},{139,10,135},{5,0,397},{5,10,607},\n{6,0,154},{7,0,676},{8,0,443},{8,0,609},{8,10,326},{8,10,490},{9,0,24},{9,0,325}\n,{10,0,35},{11,0,535},{11,0,672},{11,0,1018},{12,0,637},{144,0,30},{4,10,701},{5\n,10,472},{6,11,9},{6,11,397},{7,11,53},{7,11,1742},{9,10,758},{10,11,632},{11,11\n,828},{140,11,146},{135,10,380},{135,10,1947},{148,11,109},{10,10,278},{138,11,\n278},{134,0,856},{4,10,386},{7,0,139},{8,10,405},{8,10,728},{9,10,497},{11,10,\n110},{11,10,360},{15,10,37},{144,10,84},{141,0,282},{133,0,981},{5,0,288},{7,10,\n1452},{7,10,1480},{8,10,634},{140,10,472},{7,0,1890},{8,11,367},{10,11,760},{14,\n11,79},{20,11,17},{152,11,0},{4,10,524},{136,10,810},{4,0,56},{7,0,1791},{8,0,\n607},{8,0,651},{11,0,465},{11,0,835},{12,0,337},{141,0,480},{10,10,238},{141,10,\n33},{11,11,417},{12,11,223},{140,11,265},{9,0,158},{10,0,411},{140,0,261},{133,\n10,532},{133,10,997},{12,11,186},{12,11,292},{14,11,100},{146,11,70},{6,0,1403},\n{136,0,617},{134,0,1205},{139,0,563},{4,0,242},{134,0,333},{4,11,186},{5,11,157}\n,{8,11,168},{138,11,6},{132,0,369},{133,11,875},{5,10,782},{5,10,829},{134,10,\n1738},{134,0,622},{135,11,1272},{6,0,1407},{7,11,111},{136,11,581},{7,10,1823},{\n139,10,693},{7,0,160},{10,0,624},{142,0,279},{132,0,363},{10,11,589},{12,11,111}\n,{13,11,260},{14,11,82},{18,11,63},{147,11,45},{7,11,1364},{7,11,1907},{141,11,\n158},{4,11,404},{4,11,659},{135,11,675},{13,11,211},{14,11,133},{14,11,204},{15,\n11,64},{15,11,69},{15,11,114},{16,11,10},{19,11,23},{19,11,35},{19,11,39},{19,11\n,51},{19,11,71},{19,11,75},{152,11,15},{4,10,78},{5,10,96},{5,10,182},{7,10,1724\n},{7,10,1825},{10,10,394},{10,10,471},{11,10,532},{14,10,340},{145,10,88},{135,\n10,1964},{133,11,391},{11,11,887},{14,11,365},{142,11,375},{5,11,540},{6,11,1697\n},{7,11,222},{136,11,341},{134,11,78},{9,0,601},{9,0,619},{10,0,505},{10,0,732},\n{11,0,355},{140,0,139},{134,0,292},{139,0,174},{5,0,177},{6,0,616},{7,0,827},{9,\n0,525},{138,0,656},{6,10,215},{7,10,1028},{7,10,1473},{7,10,1721},{9,10,424},{10\n,0,31},{138,10,779},{135,10,584},{136,11,293},{134,0,685},{135,11,1868},{133,11,\n460},{6,10,67},{7,0,647},{7,10,1630},{9,10,354},{9,10,675},{10,10,830},{14,10,80\n},{145,10,80},{4,0,161},{133,0,631},{6,10,141},{7,10,225},{9,10,59},{9,10,607},{\n10,10,312},{11,10,687},{12,10,555},{13,10,373},{13,10,494},{148,10,58},{7,11,965\n},{7,11,1460},{135,11,1604},{136,10,783},{134,11,388},{4,11,511},{6,0,722},{6,0,\n1267},{9,11,333},{9,11,379},{10,11,602},{11,11,441},{11,11,723},{11,11,976},{140\n,11,357},{134,0,1797},{135,0,1684},{5,11,938},{8,11,707},{9,0,469},{9,0,709},{12\n,0,512},{14,0,65},{145,0,12},{7,0,1230},{136,0,531},{10,0,229},{11,0,73},{11,0,\n376},{139,0,433},{12,0,268},{12,0,640},{142,0,119},{7,10,430},{139,10,46},{6,0,\n558},{7,0,651},{8,0,421},{9,0,0},{10,0,34},{139,0,1008},{5,10,602},{6,0,106},{7,\n0,1786},{7,0,1821},{7,10,2018},{9,0,102},{9,0,763},{137,10,418},{5,0,65},{6,0,\n416},{7,0,1720},{7,0,1924},{8,10,677},{10,0,109},{11,0,14},{11,0,70},{11,0,569},\n{11,0,735},{15,0,153},{148,0,80},{135,11,1625},{137,11,772},{136,0,595},{6,11,\n469},{7,11,1709},{138,11,515},{7,0,1832},{138,0,374},{9,0,106},{9,0,163},{9,0,\n296},{10,0,167},{10,0,172},{10,0,777},{139,0,16},{6,0,6},{7,0,81},{7,0,771},{7,0\n,1731},{9,0,405},{138,0,421},{4,11,500},{135,11,938},{5,11,68},{134,11,383},{5,0\n,881},{133,0,885},{6,0,854},{6,0,1132},{6,0,1495},{6,0,1526},{6,0,1533},{134,0,\n1577},{4,11,337},{6,11,353},{7,11,1934},{8,11,488},{137,11,429},{7,11,236},{7,11\n,1795},{8,11,259},{9,11,135},{9,11,177},{10,11,825},{11,11,115},{11,11,370},{11,\n11,405},{11,11,604},{12,11,10},{12,11,667},{12,11,669},{13,11,76},{14,11,310},{\n15,11,76},{15,11,147},{148,11,23},{5,0,142},{134,0,546},{4,11,15},{5,11,22},{6,\n11,244},{7,11,40},{7,11,200},{7,11,906},{7,11,1199},{9,11,616},{10,11,716},{11,\n11,635},{11,11,801},{140,11,458},{5,0,466},{7,10,329},{11,0,571},{12,0,198},{13,\n0,283},{14,0,186},{15,0,21},{143,0,103},{4,0,185},{5,0,257},{5,0,839},{5,0,936},\n{7,11,1735},{9,0,399},{10,0,258},{10,0,395},{10,0,734},{11,0,1014},{12,0,23},{13\n,0,350},{14,0,150},{147,0,6},{12,11,36},{141,11,337},{5,11,598},{7,11,791},{8,11\n,108},{137,11,123},{132,10,469},{7,0,404},{7,0,1377},{7,0,1430},{7,0,2017},{8,0,\n149},{8,0,239},{8,0,512},{8,0,793},{8,0,818},{9,0,474},{9,0,595},{10,0,122},{10,\n0,565},{10,0,649},{10,0,783},{11,0,239},{11,0,295},{11,0,447},{11,0,528},{11,0,\n639},{11,0,800},{12,0,25},{12,0,77},{12,0,157},{12,0,256},{12,0,316},{12,0,390},\n{12,0,391},{12,0,395},{12,0,478},{12,0,503},{12,0,592},{12,0,680},{13,0,50},{13,\n0,53},{13,0,132},{13,0,198},{13,0,322},{13,0,415},{13,0,511},{14,0,71},{14,0,395\n},{15,0,71},{15,0,136},{17,0,123},{18,0,93},{147,0,58},{136,0,712},{134,10,1743}\n,{5,10,929},{6,10,340},{8,10,376},{136,10,807},{6,0,1848},{8,0,860},{10,0,856},{\n10,0,859},{10,0,925},{10,0,941},{140,0,762},{6,0,629},{6,0,906},{9,0,810},{140,0\n,652},{5,10,218},{7,10,1610},{138,10,83},{7,10,1512},{135,10,1794},{4,0,377},{4,\n11,155},{7,11,1689},{11,10,0},{16,10,78},{152,0,13},{4,11,164},{5,11,151},{5,11,\n730},{5,11,741},{7,11,498},{7,11,870},{7,11,1542},{12,11,213},{14,11,36},{14,11,\n391},{17,11,111},{18,11,6},{18,11,46},{18,11,151},{19,11,36},{20,11,32},{20,11,\n56},{20,11,69},{20,11,102},{21,11,4},{22,11,8},{22,11,10},{22,11,14},{150,11,31}\n,{5,10,571},{135,0,1842},{4,10,455},{4,11,624},{135,11,1752},{134,0,1501},{4,11,\n492},{5,11,451},{6,10,161},{7,10,372},{137,10,597},{132,10,349},{4,0,180},{135,0\n,1906},{135,11,835},{141,11,70},{132,0,491},{137,10,751},{6,10,432},{139,10,322}\n,{4,0,171},{138,0,234},{6,11,113},{135,11,436},{4,0,586},{7,0,1186},{138,0,631},\n{5,10,468},{10,10,325},{11,10,856},{12,10,345},{143,10,104},{5,10,223},{10,11,\n592},{10,11,753},{12,11,317},{12,11,355},{12,11,465},{12,11,469},{12,11,560},{12\n,11,578},{141,11,243},{132,10,566},{135,11,520},{4,10,59},{135,10,1394},{6,10,\n436},{139,10,481},{4,10,48},{5,10,271},{7,10,953},{7,11,1878},{9,0,931},{10,0,\n334},{148,0,71},{5,10,610},{8,10,457},{139,0,170},{133,10,755},{6,0,1587},{135,\n10,1217},{4,10,197},{149,11,26},{133,11,585},{137,11,521},{133,0,765},{133,10,\n217},{139,11,586},{133,0,424},{9,11,752},{12,11,610},{13,11,431},{16,11,59},{146\n,11,109},{136,0,714},{4,11,307},{135,0,685},{9,0,420},{10,0,269},{10,0,285},{10,\n0,576},{11,0,397},{13,0,175},{145,0,90},{132,0,429},{133,11,964},{9,11,463},{138\n,11,595},{7,0,18},{7,0,699},{7,0,1966},{8,0,752},{9,0,273},{9,0,412},{9,0,703},{\n10,0,71},{10,0,427},{138,0,508},{4,10,165},{7,10,1398},{135,10,1829},{4,0,53},{5\n,0,186},{7,0,752},{7,0,828},{142,0,116},{8,0,575},{10,0,289},{139,0,319},{132,0,\n675},{134,0,1424},{4,11,75},{5,11,180},{6,11,500},{7,11,58},{7,11,710},{138,11,\n645},{133,11,649},{6,11,276},{7,11,282},{7,11,879},{7,11,924},{8,11,459},{9,11,\n599},{9,11,754},{11,11,574},{12,11,128},{12,11,494},{13,11,52},{13,11,301},{15,\n11,30},{143,11,132},{6,0,647},{134,0,1095},{5,10,9},{7,10,297},{7,10,966},{140,\n10,306},{132,11,200},{134,0,1334},{5,10,146},{6,10,411},{138,10,721},{6,0,209},{\n6,0,1141},{6,0,1288},{8,0,468},{9,0,210},{11,0,36},{12,0,28},{12,0,630},{13,0,21\n},{13,0,349},{14,0,7},{145,0,13},{6,10,177},{135,10,467},{4,0,342},{135,0,1179},\n{10,11,454},{140,11,324},{4,0,928},{133,0,910},{6,11,225},{7,0,1838},{137,11,211\n},{16,0,101},{20,0,115},{20,0,118},{148,0,122},{4,0,496},{135,0,856},{4,0,318},{\n7,11,718},{11,0,654},{139,11,102},{8,11,58},{9,11,724},{11,11,809},{13,11,113},{\n145,11,72},{5,10,200},{6,11,345},{135,11,1247},{8,11,767},{8,11,803},{9,11,301},\n{137,11,903},{7,0,915},{7,11,1949},{8,0,247},{8,11,674},{147,0,0},{4,0,202},{5,0\n,382},{6,0,454},{7,0,936},{7,0,1803},{8,0,758},{9,0,375},{9,0,895},{10,0,743},{\n10,0,792},{11,0,978},{11,0,1012},{142,0,109},{7,0,1150},{7,0,1425},{7,0,1453},{\n140,0,513},{134,11,259},{138,0,791},{11,0,821},{12,0,110},{12,0,153},{18,0,41},{\n150,0,19},{134,10,481},{132,0,796},{6,0,445},{8,11,254},{137,0,909},{10,0,776},{\n13,0,345},{142,0,425},{4,10,84},{7,10,1482},{10,10,76},{138,10,142},{135,11,742}\n,{5,10,1015},{134,0,578},{4,10,315},{5,10,507},{6,0,1387},{135,10,1370},{4,0,438\n},{133,0,555},{136,0,766},{133,11,248},{134,10,1722},{4,11,116},{5,11,95},{5,11,\n445},{7,11,1688},{8,11,29},{9,11,272},{11,11,509},{139,11,915},{135,0,541},{133,\n11,543},{8,10,222},{8,10,476},{9,10,238},{11,10,516},{11,10,575},{15,10,109},{\n146,10,100},{6,0,880},{134,0,1191},{5,11,181},{136,11,41},{134,0,1506},{132,11,\n681},{7,11,25},{8,11,202},{138,11,536},{139,0,983},{137,0,768},{132,0,584},{9,11\n,423},{140,11,89},{8,11,113},{9,11,877},{10,11,554},{11,11,83},{12,11,136},{147,\n11,109},{7,10,706},{7,10,1058},{138,10,538},{133,11,976},{4,11,206},{135,11,746}\n,{136,11,526},{140,0,737},{11,10,92},{11,10,196},{11,10,409},{11,10,450},{11,10,\n666},{11,10,777},{12,10,262},{13,10,385},{13,10,393},{15,10,115},{16,10,45},{145\n,10,82},{4,0,226},{4,0,326},{4,11,319},{5,11,699},{7,0,1770},{138,11,673},{6,10,\n40},{135,10,1781},{5,0,426},{8,0,30},{9,0,2},{11,0,549},{147,0,122},{6,0,1161},{\n134,0,1329},{138,10,97},{6,10,423},{7,10,665},{135,10,1210},{7,11,13},{8,11,226}\n,{10,11,537},{11,11,570},{11,11,605},{11,11,799},{11,11,804},{12,11,85},{12,11,\n516},{12,11,623},{13,11,112},{13,11,361},{14,11,77},{14,11,78},{17,11,28},{147,\n11,110},{132,11,769},{132,11,551},{132,11,728},{147,0,117},{9,11,57},{9,11,459},\n{10,11,425},{11,11,119},{12,11,184},{12,11,371},{13,11,358},{145,11,51},{5,11,\n188},{5,11,814},{8,11,10},{9,11,421},{9,11,729},{10,11,609},{139,11,689},{134,11\n,624},{135,11,298},{135,0,462},{4,0,345},{139,10,624},{136,10,574},{4,0,385},{7,\n0,265},{135,0,587},{4,11,528},{134,0,808},{133,0,398},{132,10,354},{4,0,347},{5,\n0,423},{5,0,996},{135,0,1329},{135,10,1558},{7,0,1259},{9,0,125},{139,0,65},{5,0\n,136},{6,0,136},{136,0,644},{5,11,104},{6,11,173},{135,11,1631},{135,0,469},{133\n,10,830},{4,0,278},{5,0,465},{135,0,1367},{7,11,810},{8,11,138},{8,11,342},{9,11\n,84},{10,11,193},{11,11,883},{140,11,359},{5,10,496},{135,10,203},{4,0,433},{133\n,0,719},{6,10,547},{134,11,95},{5,10,88},{137,10,239},{6,11,406},{10,11,409},{10\n,11,447},{11,11,44},{140,11,100},{134,0,1423},{7,10,650},{135,10,1310},{134,0,\n749},{135,11,1243},{135,0,1363},{6,0,381},{7,0,645},{7,0,694},{7,10,1076},{8,0,\n546},{9,10,80},{11,10,78},{11,10,421},{11,10,534},{140,10,545},{134,11,1636},{\n135,11,1344},{7,10,274},{11,10,479},{11,10,507},{140,0,277},{4,11,282},{6,0,705}\n,{6,0,783},{6,0,1275},{6,0,1481},{7,11,1034},{11,11,398},{11,11,634},{12,11,1},{\n12,11,79},{12,11,544},{14,11,237},{17,11,10},{146,11,20},{134,0,453},{4,0,555},{\n4,10,497},{7,10,1584},{8,0,536},{10,0,288},{139,0,1005},{5,11,118},{5,11,499},{6\n,11,476},{7,11,600},{7,11,888},{135,11,1096},{138,0,987},{7,0,1107},{7,10,261},{\n7,10,1115},{7,10,1354},{7,10,1588},{7,10,1705},{7,10,1902},{9,10,465},{10,10,248\n},{10,10,349},{10,10,647},{11,10,527},{11,10,660},{11,10,669},{12,10,529},{141,\n10,305},{7,11,296},{7,11,596},{8,11,560},{8,11,586},{9,11,612},{11,11,100},{11,\n11,304},{12,11,46},{13,11,89},{14,11,112},{145,11,122},{9,0,370},{138,0,90},{136\n,10,13},{132,0,860},{7,10,642},{8,10,250},{11,10,123},{11,10,137},{13,10,48},{\n142,10,95},{135,10,1429},{137,11,321},{132,0,257},{135,0,2031},{7,0,1768},{7,11,\n1599},{7,11,1723},{8,11,79},{8,11,106},{8,11,190},{8,11,302},{8,11,383},{9,11,\n119},{9,11,233},{9,11,298},{9,11,419},{9,11,471},{10,11,181},{10,11,406},{11,11,\n57},{11,11,85},{11,11,120},{11,11,177},{11,11,296},{11,11,382},{11,11,454},{11,\n11,758},{11,11,999},{12,11,27},{12,11,98},{12,11,131},{12,11,245},{12,11,312},{\n12,11,446},{12,11,454},{13,11,25},{13,11,98},{13,11,426},{13,11,508},{14,11,6},{\n14,11,163},{14,11,272},{14,11,277},{14,11,370},{15,11,95},{15,11,138},{15,11,167\n},{17,11,18},{17,11,38},{20,11,96},{149,11,32},{5,11,722},{134,11,1759},{145,11,\n16},{6,0,1071},{134,0,1561},{10,10,545},{140,10,301},{6,0,83},{6,0,1733},{135,0,\n1389},{4,0,835},{135,0,1818},{133,11,258},{4,10,904},{133,10,794},{134,0,2006},{\n5,11,30},{7,11,495},{8,11,134},{9,11,788},{140,11,438},{135,11,2004},{137,0,696}\n,{5,11,50},{6,11,439},{7,11,780},{135,11,1040},{7,11,772},{7,11,1104},{7,11,1647\n},{11,11,269},{11,11,539},{11,11,607},{11,11,627},{11,11,706},{11,11,975},{12,11\n,248},{12,11,311},{12,11,434},{12,11,600},{12,11,622},{13,11,297},{13,11,367},{\n13,11,485},{14,11,69},{14,11,409},{143,11,108},{5,11,1},{6,11,81},{138,11,520},{\n7,0,1718},{9,0,95},{9,0,274},{10,0,279},{10,0,317},{10,0,420},{11,0,303},{11,0,\n808},{12,0,134},{12,0,367},{13,0,149},{13,0,347},{14,0,349},{14,0,406},{18,0,22}\n,{18,0,89},{18,0,122},{147,0,47},{5,11,482},{8,11,98},{9,11,172},{10,11,222},{10\n,11,700},{10,11,822},{11,11,302},{11,11,778},{12,11,50},{12,11,127},{12,11,396},\n{13,11,62},{13,11,328},{14,11,122},{147,11,72},{7,10,386},{138,10,713},{6,10,7},\n{6,10,35},{7,10,147},{7,10,1069},{7,10,1568},{7,10,1575},{7,10,1917},{8,10,43},{\n8,10,208},{9,10,128},{9,10,866},{10,10,20},{11,10,981},{147,10,33},{133,0,26},{\n132,0,550},{5,11,2},{7,11,1494},{136,11,589},{6,11,512},{7,11,797},{8,11,253},{9\n,11,77},{10,11,1},{10,11,129},{10,11,225},{11,11,118},{11,11,226},{11,11,251},{\n11,11,430},{11,11,701},{11,11,974},{11,11,982},{12,11,64},{12,11,260},{12,11,488\n},{140,11,690},{7,10,893},{141,10,424},{134,0,901},{136,0,822},{4,0,902},{5,0,\n809},{134,0,122},{6,0,807},{134,0,1366},{5,11,748},{6,11,553},{135,0,262},{133,0\n,620},{4,0,34},{5,0,574},{7,0,279},{7,0,1624},{136,0,601},{6,10,322},{9,0,170},{\n9,10,552},{11,10,274},{13,10,209},{13,10,499},{14,10,85},{15,10,126},{145,10,70}\n,{132,0,537},{4,11,12},{7,11,420},{7,11,522},{7,11,809},{8,11,797},{141,11,88},{\n133,0,332},{8,10,83},{8,10,742},{8,10,817},{9,10,28},{9,10,29},{9,10,885},{10,10\n,387},{11,10,633},{11,10,740},{13,10,235},{13,10,254},{15,10,143},{143,10,146},{\n6,0,1909},{9,0,964},{12,0,822},{12,0,854},{12,0,865},{12,0,910},{12,0,938},{15,0\n,169},{15,0,208},{15,0,211},{18,0,205},{18,0,206},{18,0,220},{18,0,223},{152,0,\n24},{140,10,49},{5,11,528},{135,11,1580},{6,0,261},{8,0,182},{139,0,943},{134,0,\n1721},{4,0,933},{133,0,880},{136,11,321},{5,11,266},{9,11,290},{9,11,364},{10,11\n,293},{11,11,606},{142,11,45},{4,11,50},{6,0,1609},{6,11,510},{6,11,594},{9,11,\n121},{10,11,49},{10,11,412},{139,11,834},{7,0,895},{136,11,748},{132,11,466},{4,\n10,110},{10,10,415},{10,10,597},{142,10,206},{133,0,812},{135,11,281},{6,0,1890}\n,{6,0,1902},{6,0,1916},{7,10,205},{7,10,2000},{9,0,929},{9,0,942},{9,0,975},{9,0\n,984},{9,0,986},{9,0,1011},{9,0,1019},{12,0,804},{12,0,851},{12,0,867},{12,0,916\n},{12,0,923},{15,0,194},{15,0,204},{15,0,210},{15,0,222},{15,0,223},{15,0,229},{\n15,0,250},{18,0,179},{18,0,186},{146,0,192},{132,11,667},{135,0,778},{4,0,137},{\n7,0,1178},{135,0,1520},{134,0,1314},{4,11,242},{134,11,333},{6,0,1661},{7,0,1975\n},{7,0,2009},{135,0,2011},{134,0,1591},{4,10,283},{135,10,1194},{11,0,820},{150,\n0,51},{4,11,39},{5,11,36},{7,11,1843},{8,11,407},{11,11,144},{140,11,523},{134,\n10,1720},{4,11,510},{7,11,29},{7,11,66},{7,11,1980},{10,11,487},{10,11,809},{146\n,11,9},{5,0,89},{7,0,1915},{9,0,185},{9,0,235},{10,0,64},{10,0,270},{10,0,403},{\n10,0,469},{10,0,529},{10,0,590},{11,0,140},{11,0,860},{13,0,1},{13,0,422},{14,0,\n341},{14,0,364},{17,0,93},{18,0,113},{19,0,97},{147,0,113},{133,0,695},{6,0,987}\n,{134,0,1160},{5,0,6},{6,0,183},{7,0,680},{7,0,978},{7,0,1013},{7,0,1055},{12,0,\n230},{13,0,172},{146,0,29},{134,11,570},{132,11,787},{134,11,518},{6,0,29},{139,\n0,63},{132,11,516},{136,11,821},{132,0,311},{134,0,1740},{7,0,170},{8,0,90},{8,0\n,177},{8,0,415},{8,10,735},{11,0,714},{142,0,281},{134,0,1961},{135,11,1405},{4,\n11,10},{7,11,917},{139,11,786},{5,10,132},{9,10,486},{9,10,715},{10,10,458},{11,\n10,373},{11,10,668},{11,10,795},{11,10,897},{12,10,272},{12,10,424},{12,10,539},\n{12,10,558},{14,10,245},{14,10,263},{14,10,264},{14,10,393},{142,10,403},{11,0,\n91},{13,0,129},{15,0,101},{145,0,125},{135,0,1132},{4,0,494},{6,0,74},{7,0,44},{\n7,0,407},{12,0,17},{15,0,5},{148,0,11},{133,10,379},{5,0,270},{5,11,684},{6,10,\n89},{6,10,400},{7,10,1569},{7,10,1623},{7,10,1850},{8,10,218},{8,10,422},{9,10,\n570},{138,10,626},{4,0,276},{133,0,296},{6,0,1523},{134,11,27},{6,10,387},{7,10,\n882},{141,10,111},{6,10,224},{7,10,877},{137,10,647},{135,10,790},{4,0,7},{5,0,\n90},{5,0,158},{6,0,542},{7,0,221},{7,0,1574},{9,0,490},{10,0,540},{11,0,443},{\n139,0,757},{7,0,588},{9,0,175},{138,0,530},{135,10,394},{142,11,23},{134,0,786},\n{135,0,580},{7,0,88},{136,0,627},{5,0,872},{6,0,57},{7,0,471},{9,0,447},{137,0,\n454},{6,11,342},{6,11,496},{8,11,275},{137,11,206},{4,11,909},{133,11,940},{4,11\n,891},{134,0,735},{7,10,1409},{8,0,845},{136,0,916},{5,0,31},{134,0,614},{11,0,\n458},{12,0,15},{140,0,432},{8,0,330},{140,0,477},{4,0,530},{4,11,687},{5,0,521},\n{7,0,1200},{138,0,460},{6,0,424},{135,0,1866},{9,0,569},{12,0,12},{12,0,81},{12,\n0,319},{13,0,69},{14,0,259},{16,0,87},{17,0,1},{17,0,21},{17,0,24},{18,0,15},{18\n,0,56},{18,0,59},{18,0,127},{18,0,154},{19,0,19},{148,0,31},{7,0,1302},{136,10,\n38},{134,11,253},{5,10,261},{7,10,78},{7,10,199},{8,10,815},{9,10,126},{138,10,\n342},{5,0,595},{135,0,1863},{6,11,41},{141,11,160},{5,0,13},{134,0,142},{6,0,97}\n,{7,0,116},{7,11,1304},{8,0,322},{8,0,755},{9,0,548},{10,0,714},{10,11,477},{11,\n0,884},{141,0,324},{132,10,628},{134,11,1718},{7,10,266},{136,10,804},{135,10,\n208},{6,10,79},{7,0,1021},{135,10,1519},{7,0,1472},{135,0,1554},{6,11,362},{146,\n11,51},{7,0,1071},{7,0,1541},{7,0,1767},{7,0,1806},{11,0,162},{11,0,242},{11,0,\n452},{12,0,605},{15,0,26},{144,0,44},{136,10,741},{133,11,115},{145,0,115},{134,\n10,376},{6,0,1406},{134,0,1543},{5,11,193},{12,11,178},{13,11,130},{145,11,84},{\n135,0,1111},{5,11,705},{8,0,1},{9,0,650},{9,11,606},{138,0,326},{5,0,488},{6,0,\n527},{7,0,489},{7,0,1636},{8,0,121},{8,0,144},{8,0,359},{9,0,193},{9,0,241},{9,0\n,336},{9,0,882},{11,0,266},{11,0,372},{11,0,944},{12,0,401},{140,0,641},{135,11,\n174},{6,0,267},{7,10,244},{7,10,632},{7,10,1609},{8,10,178},{8,10,638},{141,10,\n58},{134,0,1983},{134,0,1155},{134,0,1575},{134,0,1438},{9,0,31},{10,0,244},{10,\n0,699},{12,0,149},{141,0,497},{133,0,377},{4,11,122},{5,11,796},{5,11,952},{6,11\n,1660},{6,11,1671},{8,11,567},{9,11,687},{9,11,742},{10,11,686},{11,11,356},{11,\n11,682},{140,11,281},{145,0,101},{11,11,0},{144,11,78},{5,10,791},{5,11,179},{7,\n11,1095},{135,11,1213},{8,11,372},{9,11,122},{138,11,175},{7,10,686},{8,10,33},{\n8,10,238},{10,10,616},{11,10,467},{11,10,881},{13,10,217},{13,10,253},{142,10,\n268},{4,11,66},{7,11,722},{7,11,904},{137,0,476},{7,11,352},{137,11,684},{135,0,\n2023},{135,0,1836},{132,10,447},{5,0,843},{144,0,35},{137,11,779},{141,11,35},{4\n,10,128},{5,10,415},{6,10,462},{7,10,294},{7,10,578},{10,10,710},{139,10,86},{\n132,0,554},{133,0,536},{136,10,587},{5,0,207},{9,0,79},{11,0,625},{145,0,7},{6,\n10,427},{7,0,1371},{138,10,692},{4,0,424},{4,10,195},{135,10,802},{5,11,564},{\n136,0,785},{135,0,336},{4,0,896},{6,0,1777},{134,11,556},{137,11,103},{134,10,\n1683},{7,11,544},{8,11,719},{138,11,61},{138,10,472},{4,11,5},{5,11,498},{136,11\n,637},{7,0,750},{9,0,223},{11,0,27},{11,0,466},{12,0,624},{14,0,265},{146,0,61},\n{12,0,238},{12,11,238},{18,0,155},{146,11,155},{151,10,28},{133,11,927},{5,10,3}\n,{8,10,578},{9,10,118},{10,10,705},{12,0,383},{141,10,279},{4,11,893},{5,11,780}\n,{133,11,893},{4,0,603},{133,0,661},{4,0,11},{5,10,229},{5,11,238},{6,0,128},{7,\n0,231},{7,0,1533},{7,11,1350},{138,0,725},{8,10,102},{10,10,578},{10,10,672},{12\n,10,496},{13,10,408},{14,10,121},{145,10,106},{132,0,476},{134,0,1552},{134,11,\n1729},{8,10,115},{8,10,350},{9,10,489},{10,10,128},{11,10,306},{12,10,373},{14,\n10,30},{17,10,79},{19,10,80},{150,10,55},{135,0,1807},{4,0,680},{4,11,60},{7,11,\n760},{7,11,1800},{8,11,314},{9,11,700},{139,11,487},{4,10,230},{5,10,702},{148,\n11,94},{132,11,228},{139,0,435},{9,0,20},{10,0,324},{10,0,807},{139,0,488},{6,10\n,1728},{136,11,419},{4,10,484},{18,10,26},{19,10,42},{20,10,43},{21,10,0},{23,10\n,27},{152,10,14},{135,0,1431},{133,11,828},{5,0,112},{6,0,103},{6,0,150},{7,0,\n1303},{7,11,176},{7,11,178},{7,11,1110},{9,0,292},{10,0,481},{10,11,481},{20,0,\n13},{148,11,13},{138,0,356},{4,11,51},{5,11,39},{6,11,4},{7,11,591},{7,11,849},{\n7,11,951},{7,11,1129},{7,11,1613},{7,11,1760},{7,11,1988},{9,11,434},{10,11,754}\n,{11,11,25},{11,11,37},{139,11,414},{6,0,1963},{134,0,2000},{132,10,633},{5,11,\n902},{134,0,1244},{135,11,928},{140,0,18},{138,0,204},{135,11,1173},{134,0,867},\n{4,0,708},{8,0,15},{9,0,50},{9,0,386},{11,0,18},{11,0,529},{140,0,228},{134,11,\n270},{4,0,563},{7,0,109},{7,0,592},{7,0,637},{7,0,770},{8,0,463},{9,0,60},{9,0,\n335},{9,0,904},{10,0,73},{11,0,434},{12,0,585},{13,0,331},{18,0,110},{148,0,60},\n{132,0,502},{14,11,359},{19,11,52},{148,11,47},{6,11,377},{7,11,1025},{9,11,613}\n,{145,11,104},{5,10,70},{5,10,622},{6,0,347},{6,10,334},{7,10,1032},{9,10,171},{\n10,0,161},{11,10,26},{11,10,213},{11,10,637},{11,10,707},{12,10,202},{12,10,380}\n,{13,10,226},{13,10,355},{14,10,222},{145,10,42},{132,11,416},{4,0,33},{5,0,102}\n,{6,0,284},{7,0,1079},{7,0,1423},{7,0,1702},{8,0,470},{9,0,554},{9,0,723},{11,0,\n333},{142,11,372},{5,11,152},{5,11,197},{7,11,340},{7,11,867},{10,11,548},{10,11\n,581},{11,11,6},{12,11,3},{12,11,19},{14,11,110},{142,11,289},{7,0,246},{135,0,\n840},{6,0,10},{8,0,571},{9,0,739},{143,0,91},{4,10,23},{4,10,141},{5,10,313},{5,\n10,1014},{6,0,465},{6,10,50},{7,0,1465},{7,10,142},{7,10,559},{8,10,640},{9,10,\n460},{9,10,783},{11,10,741},{12,10,183},{141,10,488},{133,0,626},{136,0,614},{\n138,0,237},{7,11,34},{7,11,190},{8,11,28},{8,11,141},{8,11,444},{8,11,811},{9,11\n,468},{11,11,334},{12,11,24},{12,11,386},{140,11,576},{133,11,757},{5,0,18},{6,0\n,526},{13,0,24},{13,0,110},{19,0,5},{147,0,44},{6,0,506},{134,11,506},{135,11,\n1553},{4,0,309},{5,0,462},{7,0,970},{7,0,1097},{7,11,1385},{11,11,582},{11,11,\n650},{11,11,901},{11,11,949},{12,11,232},{12,11,236},{13,11,413},{13,11,501},{18\n,11,116},{22,0,30},{150,0,33},{5,10,222},{9,0,140},{138,10,534},{6,0,1056},{137,\n10,906},{134,0,1704},{138,10,503},{134,0,1036},{5,10,154},{7,10,1491},{10,10,379\n},{138,10,485},{4,11,383},{133,10,716},{134,0,1315},{5,0,86},{7,0,743},{9,0,85},\n{10,0,281},{10,0,432},{11,0,825},{12,0,251},{13,0,118},{142,0,378},{4,10,91},{5,\n10,388},{5,10,845},{6,10,206},{6,10,252},{6,10,365},{7,10,136},{7,10,531},{8,0,\n264},{136,10,621},{5,0,524},{133,0,744},{5,11,277},{141,11,247},{132,11,435},{10\n,0,107},{140,0,436},{132,0,927},{10,0,123},{12,0,670},{146,0,94},{7,0,1149},{9,0\n,156},{138,0,957},{5,11,265},{6,11,212},{135,11,28},{133,0,778},{133,0,502},{8,0\n,196},{10,0,283},{139,0,406},{135,10,576},{136,11,535},{134,0,1312},{5,10,771},{\n5,10,863},{5,10,898},{6,10,1632},{6,10,1644},{134,10,1780},{5,0,855},{5,10,331},\n{135,11,1487},{132,11,702},{5,11,808},{135,11,2045},{7,0,1400},{9,0,446},{138,0,\n45},{140,10,632},{132,0,1003},{5,11,166},{8,11,739},{140,11,511},{5,10,107},{7,\n10,201},{136,10,518},{6,10,446},{135,10,1817},{134,0,1532},{134,0,1097},{4,11,\n119},{5,11,170},{5,11,447},{7,11,1708},{7,11,1889},{9,11,357},{9,11,719},{12,11,\n486},{140,11,596},{9,10,851},{141,10,510},{4,10,504},{7,0,612},{8,0,545},{8,0,\n568},{8,0,642},{9,0,717},{10,0,541},{10,0,763},{11,0,449},{12,0,489},{13,0,153},\n{13,0,296},{14,0,138},{14,0,392},{15,0,50},{16,0,6},{16,0,12},{148,0,9},{4,11,\n450},{135,11,1158},{5,10,883},{5,10,975},{8,10,392},{11,0,54},{13,0,173},{13,0,\n294},{148,10,7},{13,0,455},{15,0,99},{15,0,129},{144,0,68},{135,0,172},{132,11,\n754},{5,10,922},{134,10,1707},{134,0,1029},{17,11,39},{148,11,36},{4,0,568},{5,\n10,993},{7,10,515},{137,10,91},{132,0,732},{10,0,617},{138,11,617},{134,0,974},{\n7,0,989},{10,0,377},{12,0,363},{13,0,68},{13,0,94},{14,0,108},{142,0,306},{136,0\n,733},{132,0,428},{7,0,1789},{135,11,1062},{7,0,2015},{140,0,665},{135,10,1433},\n{5,0,287},{7,10,921},{8,10,580},{8,10,593},{8,10,630},{138,10,28},{138,0,806},{4\n,10,911},{5,10,867},{5,10,1013},{7,10,2034},{8,10,798},{136,10,813},{134,0,1539}\n,{8,11,523},{150,11,34},{135,11,740},{7,11,238},{7,11,2033},{8,11,120},{8,11,188\n},{8,11,659},{9,11,598},{10,11,466},{12,11,342},{12,11,588},{13,11,503},{14,11,\n246},{143,11,92},{7,0,1563},{141,0,182},{5,10,135},{6,10,519},{7,10,1722},{10,10\n,271},{11,10,261},{145,10,54},{14,10,338},{148,10,81},{4,10,300},{5,10,436},{135\n,0,484},{145,11,114},{6,0,1623},{134,0,1681},{133,11,640},{4,11,201},{7,11,1744}\n,{8,11,602},{11,11,247},{11,11,826},{145,11,65},{8,11,164},{146,11,62},{6,0,1833\n},{6,0,1861},{136,0,878},{134,0,1569},{8,10,357},{10,10,745},{14,10,426},{17,10,\n94},{147,10,57},{12,0,93},{12,0,501},{13,0,362},{14,0,151},{15,0,40},{15,0,59},{\n16,0,46},{17,0,25},{18,0,14},{18,0,134},{19,0,25},{19,0,69},{20,0,16},{20,0,19},\n{20,0,66},{21,0,23},{21,0,25},{150,0,42},{6,0,1748},{8,0,715},{9,0,802},{10,0,46\n},{10,0,819},{13,0,308},{14,0,351},{14,0,363},{146,0,67},{132,0,994},{4,0,63},{\n133,0,347},{132,0,591},{133,0,749},{7,11,1577},{10,11,304},{10,11,549},{11,11,\n424},{12,11,365},{13,11,220},{13,11,240},{142,11,33},{133,0,366},{5,10,387},{7,0\n,557},{12,0,547},{142,0,86},{135,0,1747},{132,11,907},{5,11,100},{10,11,329},{12\n,11,416},{149,11,29},{4,10,6},{5,10,708},{136,10,75},{7,10,1351},{9,10,581},{10,\n10,639},{11,10,453},{140,10,584},{4,10,303},{135,0,89},{138,10,772},{132,11,176}\n,{5,11,636},{5,11,998},{8,11,26},{137,11,358},{7,11,9},{7,11,1508},{9,11,317},{\n10,11,210},{10,11,292},{10,11,533},{11,11,555},{12,11,526},{12,11,607},{13,11,\n263},{13,11,459},{142,11,271},{134,0,1463},{6,0,772},{6,0,1137},{139,11,595},{7,\n0,977},{139,11,66},{138,0,893},{20,0,48},{148,11,48},{5,0,824},{133,0,941},{134,\n11,295},{4,10,106},{7,0,1543},{7,0,1785},{10,0,690},{139,10,717},{7,0,440},{8,0,\n230},{139,0,106},{5,10,890},{133,10,988},{6,10,626},{142,10,431},{10,11,127},{\n141,11,27},{10,10,706},{17,0,32},{150,10,44},{132,0,216},{137,0,332},{4,10,698},\n{136,11,119},{139,11,267},{138,10,17},{11,11,526},{11,11,939},{141,11,290},{7,11\n,1167},{11,11,934},{13,11,391},{145,11,76},{139,11,39},{134,10,84},{4,0,914},{5,\n0,800},{133,0,852},{10,0,416},{141,0,115},{7,0,564},{142,0,168},{4,0,918},{133,0\n,876},{134,0,1764},{152,0,3},{4,0,92},{5,0,274},{7,11,126},{136,11,84},{140,10,\n498},{136,11,790},{5,10,986},{6,10,130},{7,10,1582},{8,0,501},{8,10,458},{10,10,\n101},{10,10,318},{138,10,823},{6,11,64},{12,11,377},{141,11,309},{5,0,743},{138,\n0,851},{4,0,49},{7,0,280},{135,0,1633},{134,0,879},{136,0,47},{7,10,1644},{137,\n10,129},{132,0,865},{134,0,1202},{9,11,34},{139,11,484},{135,10,997},{5,0,272},{\n5,0,908},{5,0,942},{8,0,197},{9,0,47},{11,0,538},{139,0,742},{6,11,1700},{7,11,\n26},{7,11,293},{7,11,382},{7,11,1026},{7,11,1087},{7,11,2027},{8,11,24},{8,11,\n114},{8,11,252},{8,11,727},{8,11,729},{9,11,30},{9,11,199},{9,11,231},{9,11,251}\n,{9,11,334},{9,11,361},{9,11,488},{9,11,712},{10,11,55},{10,11,60},{10,11,232},{\n10,11,332},{10,11,384},{10,11,396},{10,11,504},{10,11,542},{10,11,652},{11,11,20\n},{11,11,48},{11,11,207},{11,11,291},{11,11,298},{11,11,342},{11,11,365},{11,11,\n394},{11,11,620},{11,11,705},{11,11,1017},{12,11,123},{12,11,340},{12,11,406},{\n12,11,643},{13,11,61},{13,11,269},{13,11,311},{13,11,319},{13,11,486},{14,11,234\n},{15,11,62},{15,11,85},{16,11,71},{18,11,119},{148,11,105},{6,0,1455},{150,11,\n37},{135,10,1927},{135,0,1911},{137,0,891},{7,10,1756},{137,10,98},{7,10,1046},{\n139,10,160},{132,0,761},{6,11,379},{7,11,270},{7,11,1116},{8,11,176},{8,11,183},\n{9,11,432},{9,11,661},{12,11,247},{12,11,617},{146,11,125},{6,10,45},{7,10,433},\n{8,10,129},{9,10,21},{10,10,392},{11,10,79},{12,10,499},{13,10,199},{141,10,451}\n,{4,0,407},{5,11,792},{133,11,900},{132,0,560},{135,0,183},{7,10,558},{8,10,353}\n,{141,0,490},{4,0,475},{5,10,785},{6,0,731},{11,0,35},{13,0,71},{13,0,177},{142,\n0,422},{8,10,81},{9,10,189},{9,10,201},{11,10,478},{11,10,712},{141,10,338},{4,0\n,418},{4,0,819},{133,10,353},{151,10,26},{4,11,901},{133,11,776},{132,0,575},{7,\n0,818},{16,0,92},{17,0,14},{17,0,45},{18,0,75},{148,0,18},{6,0,222},{7,0,636},{7\n,0,1620},{8,0,409},{9,0,693},{139,0,77},{6,10,25},{7,10,855},{7,10,1258},{144,10\n,32},{6,0,1880},{6,0,1887},{6,0,1918},{6,0,1924},{9,0,967},{9,0,995},{9,0,1015},\n{12,0,826},{12,0,849},{12,0,857},{12,0,860},{12,0,886},{12,0,932},{18,0,228},{18\n,0,231},{146,0,240},{134,0,633},{134,0,1308},{4,11,37},{5,11,334},{135,11,1253},\n{4,10,4},{7,10,1118},{7,10,1320},{7,10,1706},{8,10,277},{9,10,622},{10,0,86},{11\n,10,724},{12,10,350},{12,10,397},{13,10,28},{13,10,159},{15,10,89},{18,10,5},{19\n,10,9},{20,10,34},{150,10,47},{132,11,508},{137,11,448},{12,11,107},{146,11,31},\n{132,0,817},{134,0,663},{133,0,882},{134,0,914},{132,11,540},{132,11,533},{136,\n11,608},{8,0,885},{138,0,865},{132,0,426},{6,0,58},{7,0,745},{7,0,1969},{8,0,399\n},{8,0,675},{9,0,479},{9,0,731},{10,0,330},{10,0,593},{10,0,817},{11,0,32},{11,0\n,133},{11,0,221},{145,0,68},{134,10,255},{7,0,102},{137,0,538},{137,10,216},{7,\n11,253},{136,11,549},{135,11,912},{9,10,183},{139,10,286},{11,10,956},{151,10,3}\n,{8,11,527},{18,11,60},{147,11,24},{4,10,536},{7,10,1141},{10,10,723},{139,10,\n371},{133,11,920},{7,0,876},{135,10,285},{135,10,560},{132,10,690},{142,11,126},\n{11,10,33},{12,10,571},{149,10,1},{133,0,566},{4,11,483},{9,0,139},{10,0,399},{\n11,0,469},{12,0,634},{141,0,223},{6,0,48},{135,0,63},{7,10,1862},{12,10,491},{12\n,10,520},{13,10,383},{14,10,244},{146,0,12},{135,11,1665},{132,11,448},{9,11,495\n},{146,11,104},{6,0,114},{7,0,1224},{7,0,1556},{136,0,3},{4,10,190},{133,10,554}\n,{5,10,1001},{8,0,576},{137,0,267},{133,10,446},{133,0,933},{139,11,1009},{8,11,\n653},{13,11,93},{147,11,14},{6,0,692},{6,0,821},{134,0,1077},{5,11,172},{135,11,\n801},{138,0,752},{4,0,375},{134,0,638},{134,0,1011},{140,11,540},{5,11,260},{137\n,0,96},{139,11,587},{135,10,1231},{4,10,304},{12,0,30},{13,0,148},{14,0,87},{14,\n0,182},{16,0,42},{148,0,70},{6,0,1398},{7,0,56},{7,0,1989},{8,0,337},{8,0,738},{\n9,0,600},{12,0,37},{13,0,447},{142,0,92},{138,0,666},{5,0,394},{7,0,487},{136,0,\n246},{6,10,53},{6,10,199},{7,10,1408},{8,10,32},{8,10,93},{9,0,437},{10,10,397},\n{10,10,629},{11,10,593},{11,10,763},{13,10,326},{145,10,35},{134,10,105},{9,0,\n320},{10,0,506},{138,10,794},{7,11,57},{8,11,167},{8,11,375},{9,11,82},{9,11,561\n},{10,11,620},{10,11,770},{11,10,704},{141,10,396},{5,10,114},{5,10,255},{6,0,\n1003},{141,10,285},{7,0,866},{135,0,1163},{133,11,531},{132,0,328},{7,10,2035},{\n8,10,19},{9,10,89},{138,10,831},{8,11,194},{136,11,756},{136,0,1000},{5,11,453},\n{134,11,441},{4,0,101},{5,0,833},{7,0,1171},{136,0,744},{133,0,726},{136,10,746}\n,{138,0,176},{6,0,9},{6,0,397},{7,0,53},{7,0,1742},{10,0,632},{11,0,828},{140,0,\n146},{135,11,22},{145,11,64},{132,0,839},{11,0,417},{12,0,223},{140,0,265},{4,11\n,102},{7,11,815},{7,11,1699},{139,11,964},{5,10,955},{136,10,814},{6,0,1931},{6,\n0,2007},{18,0,246},{146,0,247},{8,0,198},{11,0,29},{140,0,534},{135,0,1771},{6,0\n,846},{7,11,1010},{11,11,733},{11,11,759},{12,11,563},{13,11,34},{14,11,101},{18\n,11,45},{146,11,129},{4,0,186},{5,0,157},{8,0,168},{138,0,6},{132,11,899},{133,\n10,56},{148,10,100},{133,0,875},{5,0,773},{5,0,991},{6,0,1635},{134,0,1788},{6,0\n,1274},{9,0,477},{141,0,78},{4,0,639},{6,11,52},{7,0,111},{8,0,581},{9,11,104},{\n9,11,559},{10,10,4},{10,10,13},{11,10,638},{12,0,177},{12,11,308},{19,11,87},{\n148,10,57},{132,11,604},{4,11,301},{133,10,738},{133,10,758},{134,0,1747},{7,11,\n1440},{11,11,854},{11,11,872},{11,11,921},{12,11,551},{13,11,472},{142,11,367},{\n7,0,1364},{7,0,1907},{141,0,158},{134,0,873},{4,0,404},{4,0,659},{7,0,552},{135,\n0,675},{135,10,1112},{139,10,328},{7,11,508},{137,10,133},{133,0,391},{5,10,110}\n,{6,10,169},{6,10,1702},{7,10,400},{8,10,538},{9,10,184},{9,10,524},{140,10,218}\n,{6,11,310},{7,11,1849},{8,11,72},{8,11,272},{8,11,431},{9,11,12},{9,11,351},{10\n,11,563},{10,11,630},{10,11,810},{11,11,367},{11,11,599},{11,11,686},{140,11,672\n},{5,0,540},{6,0,1697},{136,0,668},{132,0,883},{134,0,78},{6,10,133},{9,10,353},\n{11,10,993},{12,0,628},{146,0,79},{6,11,181},{7,11,537},{8,11,64},{9,11,127},{10\n,11,496},{12,11,510},{141,11,384},{6,10,93},{7,10,1422},{7,10,1851},{8,10,673},{\n9,10,529},{140,10,43},{137,10,371},{134,0,1460},{134,0,962},{4,11,244},{135,11,\n233},{9,10,25},{10,10,467},{138,10,559},{4,10,335},{135,10,942},{133,0,460},{135\n,11,334},{134,11,1650},{4,0,199},{139,0,34},{5,10,601},{8,10,39},{10,10,773},{11\n,10,84},{12,10,205},{142,10,1},{133,10,870},{134,0,388},{14,0,474},{148,0,120},{\n133,11,369},{139,0,271},{4,0,511},{4,10,181},{9,0,333},{9,0,379},{10,0,602},{11,\n0,441},{11,0,723},{11,0,976},{140,0,357},{134,0,608},{134,10,1652},{9,11,338},{\n150,0,49},{140,0,988},{134,0,617},{5,0,938},{136,0,707},{132,10,97},{5,10,147},{\n6,10,286},{7,10,1362},{141,10,176},{6,0,756},{134,0,1149},{133,11,896},{6,10,375\n},{7,10,169},{7,10,254},{136,10,780},{134,0,1583},{135,10,1447},{139,0,285},{7,\n11,1117},{8,11,393},{136,11,539},{135,0,344},{6,0,469},{7,0,1709},{138,0,515},{5\n,10,629},{135,10,1549},{5,11,4},{5,11,810},{6,11,13},{6,11,538},{6,11,1690},{6,\n11,1726},{7,11,499},{7,11,1819},{8,11,148},{8,11,696},{8,11,791},{12,11,125},{13\n,11,54},{143,11,9},{135,11,1268},{137,0,404},{132,0,500},{5,0,68},{134,0,383},{\n11,0,216},{139,0,340},{4,11,925},{5,11,803},{8,11,698},{138,11,828},{4,0,337},{6\n,0,353},{7,0,1934},{8,0,488},{137,0,429},{7,0,236},{7,0,1795},{8,0,259},{9,0,135\n},{9,0,177},{9,0,860},{10,0,825},{11,0,115},{11,0,370},{11,0,405},{11,0,604},{12\n,0,10},{12,0,667},{12,0,669},{13,0,76},{14,0,310},{15,0,76},{15,0,147},{148,0,23\n},{4,0,15},{4,0,490},{5,0,22},{6,0,244},{7,0,40},{7,0,200},{7,0,906},{7,0,1199},\n{9,0,616},{10,0,716},{11,0,635},{11,0,801},{140,0,458},{4,10,420},{140,0,756},{\n134,0,1504},{5,11,383},{134,0,757},{6,0,1266},{135,0,1735},{5,0,598},{7,0,791},{\n7,10,1570},{8,0,108},{9,0,123},{140,10,542},{142,11,410},{9,11,660},{138,11,347}\n};\n"
  },
  {
    "path": "c/enc/static_init.c",
    "content": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"static_init.h\"\n\n#include \"../common/platform.h\"\n#include \"../common/static_init.h\"\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\n#include \"../common/dictionary.h\"\n#include \"dictionary_hash.h\"\n#include \"static_dict_lut.h\"\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\nstatic BROTLI_BOOL DoBrotliEncoderStaticInit(void) {\n  const BrotliDictionary* dict = BrotliGetDictionary();\n  BROTLI_BOOL ok = BrotliEncoderInitStaticDictionaryLut(\n      dict, kStaticDictionaryBuckets, kStaticDictionaryWords);\n  if (!ok) return BROTLI_FALSE;\n  ok = BrotliEncoderInitDictionaryHash(dict, kStaticDictionaryHashWords,\n                                       kStaticDictionaryHashLengths);\n  if (!ok) return BROTLI_FALSE;\n  return BROTLI_TRUE;\n}\n#endif  /* BROTLI_STATIC_INIT_NONE */\n\n#if (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_EARLY)\nstatic BROTLI_BOOL kEarlyInitOk;\nstatic __attribute__((constructor)) void BrotliEncoderStaticInitEarly(void) {\n  kEarlyInitOk = DoBrotliEncoderStaticInit();\n}\n#elif (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_LAZY)\nstatic BROTLI_BOOL kLazyInitOk;\nvoid BrotliEncoderLazyStaticInitInner(void) {\n  kLazyInitOk = DoBrotliEncoderStaticInit();\n}\n#endif  /* BROTLI_STATIC_INIT_EARLY */\n\nBROTLI_BOOL BrotliEncoderEnsureStaticInit(void) {\n#if (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_NONE)\n  return BROTLI_TRUE;\n#elif (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_EARLY)\n  return kEarlyInitOk;\n#else\n  return kLazyInitOk;\n#endif\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/static_init.h",
    "content": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Central point for static initialization. */\n\n#ifndef THIRD_PARTY_BROTLI_ENC_STATIC_INIT_H_\n#define THIRD_PARTY_BROTLI_ENC_STATIC_INIT_H_\n\n#include \"../common/platform.h\"\n#include \"../common/static_init.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#if (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_LAZY)\nBROTLI_INTERNAL void BrotliEncoderLazyStaticInitInner(void);\nBROTLI_INTERNAL void BrotliEncoderLazyStaticInit(void);\n#endif  /* BROTLI_STATIC_INIT */\n\nBROTLI_INTERNAL BROTLI_BOOL BrotliEncoderEnsureStaticInit(void);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  // THIRD_PARTY_BROTLI_ENC_STATIC_INIT_H_\n"
  },
  {
    "path": "c/enc/static_init_lazy.cc",
    "content": "#include \"../common/platform.h\"\n#include \"../common/static_init.h\"\n#include \"static_init.h\"\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_LAZY)\n#error \"BROTLI_STATIC_INIT should be BROTLI_STATIC_INIT_LAZY\"\n#else\nvoid BrotliEncoderLazyStaticInit(void) {\n  /* From https://en.cppreference.com/w/cpp/language/storage_duration.html:\n     ### Static block variables ###\n     Block variables with static or thread (since C++11) storage duration are\n     initialized the first time control passes through their declaration...\n     On all further calls, the declaration is skipped...\n     If multiple threads attempt to initialize the same static local variable\n     concurrently, the initialization occurs exactly once...\n     Usual implementations of this feature use variants of the double-checked\n     locking pattern, which reduces runtime overhead for already-initialized\n     local statics to a single non-atomic boolean comparison.\n   */\n  static bool ok = [](){\n    BrotliEncoderLazyStaticInitInner();\n    return true;\n  }();\n  if (!ok) BROTLI_CRASH();\n}\n#endif  /* BROTLI_STATIC_INIT_LAZY */\n"
  },
  {
    "path": "c/enc/utf8_util.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Heuristics for deciding about the UTF8-ness of strings. */\n\n#include \"utf8_util.h\"\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstatic size_t BrotliParseAsUTF8(\n    int* symbol, const uint8_t* input, size_t size) {\n  /* ASCII */\n  if ((input[0] & 0x80) == 0) {\n    *symbol = input[0];\n    if (*symbol > 0) {\n      return 1;\n    }\n  }\n  /* 2-byte UTF8 */\n  if (size > 1u &&\n      (input[0] & 0xE0) == 0xC0 &&\n      (input[1] & 0xC0) == 0x80) {\n    *symbol = (((input[0] & 0x1F) << 6) |\n               (input[1] & 0x3F));\n    if (*symbol > 0x7F) {\n      return 2;\n    }\n  }\n  /* 3-byte UFT8 */\n  if (size > 2u &&\n      (input[0] & 0xF0) == 0xE0 &&\n      (input[1] & 0xC0) == 0x80 &&\n      (input[2] & 0xC0) == 0x80) {\n    *symbol = (((input[0] & 0x0F) << 12) |\n               ((input[1] & 0x3F) << 6) |\n               (input[2] & 0x3F));\n    if (*symbol > 0x7FF) {\n      return 3;\n    }\n  }\n  /* 4-byte UFT8 */\n  if (size > 3u &&\n      (input[0] & 0xF8) == 0xF0 &&\n      (input[1] & 0xC0) == 0x80 &&\n      (input[2] & 0xC0) == 0x80 &&\n      (input[3] & 0xC0) == 0x80) {\n    *symbol = (((input[0] & 0x07) << 18) |\n               ((input[1] & 0x3F) << 12) |\n               ((input[2] & 0x3F) << 6) |\n               (input[3] & 0x3F));\n    if (*symbol > 0xFFFF && *symbol <= 0x10FFFF) {\n      return 4;\n    }\n  }\n  /* Not UTF8, emit a special symbol above the UTF8-code space */\n  *symbol = 0x110000 | input[0];\n  return 1;\n}\n\n/* Returns 1 if at least min_fraction of the data is UTF8-encoded.*/\nBROTLI_BOOL BrotliIsMostlyUTF8(\n    const uint8_t* data, const size_t pos, const size_t mask,\n    const size_t length, const double min_fraction) {\n  size_t size_utf8 = 0;\n  size_t i = 0;\n  while (i < length) {\n    int symbol;\n    size_t bytes_read =\n        BrotliParseAsUTF8(&symbol, &data[(pos + i) & mask], length - i);\n    i += bytes_read;\n    if (symbol < 0x110000) size_utf8 += bytes_read;\n  }\n  return TO_BROTLI_BOOL((double)size_utf8 > min_fraction * (double)length);\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "c/enc/utf8_util.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Heuristics for deciding about the UTF8-ness of strings. */\n\n#ifndef BROTLI_ENC_UTF8_UTIL_H_\n#define BROTLI_ENC_UTF8_UTIL_H_\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstatic const double kMinUTF8Ratio = 0.75;\n\n/* Returns 1 if at least min_fraction of the bytes between pos and\n   pos + length in the (data, mask) ring-buffer is UTF8-encoded, otherwise\n   returns 0. */\nBROTLI_INTERNAL BROTLI_BOOL BrotliIsMostlyUTF8(\n    const uint8_t* data, const size_t pos, const size_t mask,\n    const size_t length, const double min_fraction);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_UTF8_UTIL_H_ */\n"
  },
  {
    "path": "c/enc/write_bits.h",
    "content": "/* Copyright 2010 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Write bits into a byte array. */\n\n#ifndef BROTLI_ENC_WRITE_BITS_H_\n#define BROTLI_ENC_WRITE_BITS_H_\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* This function writes bits into bytes in increasing addresses, and within\n   a byte least-significant-bit first.\n\n   The function can write up to 56 bits in one go with WriteBits\n   Example: let's assume that 3 bits (Rs below) have been written already:\n\n   BYTE-0     BYTE+1       BYTE+2\n\n   0000 0RRR    0000 0000    0000 0000\n\n   Now, we could write 5 or less bits in MSB by just shifting by 3\n   and OR'ing to BYTE-0.\n\n   For n bits, we take the last 5 bits, OR that with high bits in BYTE-0,\n   and locate the rest in BYTE+1, BYTE+2, etc. */\nstatic BROTLI_INLINE void BrotliWriteBits(size_t n_bits,\n                                          uint64_t bits,\n                                          size_t* BROTLI_RESTRICT pos,\n                                          uint8_t* BROTLI_RESTRICT array) {\n  BROTLI_LOG((\"WriteBits  %2d  0x%08x%08x  %10d\\n\", (int)n_bits,\n      (uint32_t)(bits >> 32), (uint32_t)(bits & 0xFFFFFFFF),\n      (int)*pos));\n  BROTLI_DCHECK((bits >> n_bits) == 0);\n  BROTLI_DCHECK(n_bits <= 56);\n#if defined(BROTLI_LITTLE_ENDIAN)\n  /* This branch of the code can write up to 56 bits at a time,\n     7 bits are lost by being perhaps already in *p and at least\n     1 bit is needed to initialize the bit-stream ahead (i.e. if 7\n     bits are in *p and we write 57 bits, then the next write will\n     access a byte that was never initialized). */\n  {\n    uint8_t* p = &array[*pos >> 3];\n    uint64_t v = (uint64_t)(*p);  /* Zero-extend 8 to 64 bits. */\n    v |= bits << (*pos & 7);\n    BROTLI_UNALIGNED_STORE64LE(p, v);  /* Set some bits. */\n    *pos += n_bits;\n  }\n#else\n  /* implicit & 0xFF is assumed for uint8_t arithmetics */\n  {\n    uint8_t* array_pos = &array[*pos >> 3];\n    const size_t bits_reserved_in_first_byte = (*pos & 7);\n    size_t bits_left_to_write;\n    bits <<= bits_reserved_in_first_byte;\n    *array_pos++ |= (uint8_t)bits;\n    for (bits_left_to_write = n_bits + bits_reserved_in_first_byte;\n         bits_left_to_write >= 9;\n         bits_left_to_write -= 8) {\n      bits >>= 8;\n      *array_pos++ = (uint8_t)bits;\n    }\n    *array_pos = 0;\n    *pos += n_bits;\n  }\n#endif\n}\n\nstatic BROTLI_INLINE void BrotliWriteBitsPrepareStorage(\n    size_t pos, uint8_t* array) {\n  BROTLI_LOG((\"WriteBitsPrepareStorage            %10d\\n\", (int)pos));\n  BROTLI_DCHECK((pos & 7) == 0);\n  array[pos >> 3] = 0;\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_WRITE_BITS_H_ */\n"
  },
  {
    "path": "c/fuzz/.bazelrc",
    "content": "# Force the use of Clang for C++ builds.\nbuild --action_env=CC=clang\nbuild --action_env=CXX=clang++\n\n# Define the --config=asan-libfuzzer configuration.\nbuild:asan-libfuzzer --@rules_fuzzing//fuzzing:cc_engine=@rules_fuzzing//fuzzing/engines:libfuzzer\nbuild:asan-libfuzzer --@rules_fuzzing//fuzzing:cc_engine_instrumentation=libfuzzer\nbuild:asan-libfuzzer --@rules_fuzzing//fuzzing:cc_engine_sanitizer=asan\n\n# Define the --config=msan-libfuzzer configuration.\nbuild:msan-libfuzzer --@rules_fuzzing//fuzzing:cc_engine=@rules_fuzzing//fuzzing/engines:libfuzzer\nbuild:msan-libfuzzer --@rules_fuzzing//fuzzing:cc_engine_instrumentation=libfuzzer\nbuild:msan-libfuzzer --@rules_fuzzing//fuzzing:cc_engine_sanitizer=msan\n\n# Define the --config=ubsan-libfuzzer configuration.\nbuild:ubsan-libfuzzer --@rules_fuzzing//fuzzing:cc_engine=@rules_fuzzing//fuzzing/engines:libfuzzer\nbuild:ubsan-libfuzzer --@rules_fuzzing//fuzzing:cc_engine_instrumentation=libfuzzer\nbuild:ubsan-libfuzzer --@rules_fuzzing//fuzzing:cc_engine_sanitizer=ubsan\n"
  },
  {
    "path": "c/fuzz/BUILD.bazel",
    "content": "load(\"@rules_fuzzing//fuzzing:cc_defs.bzl\", \"cc_fuzz_test\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nlicenses([\"notice\"])  # MIT\n\n# To start fuzzing run: bazel run --config=asan-libfuzzer //:fuzz_config_run\ncc_fuzz_test(\n    name = \"decode_fuzzer\",\n    srcs = [\"decode_fuzzer.c\"],\n    deps = [\"@org_brotli//:brotlidec\"],\n)\n"
  },
  {
    "path": "c/fuzz/MODULE.bazel",
    "content": "# Copyright 2025 The Brotli Authors. All rights reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\n\"\"\"Brotli reference implementation\"\"\"\n\nmodule(\n    name = \"brotli_fuzz\",\n    version = \"1.2.0\",\n    repo_name = \"org_brotli_fuzz\",\n)\n\nbazel_dep(name = \"rules_fuzzing\", version = \"0.6.0\")\n\nbazel_dep(name = \"brotli\", version = \"1.2.0\", repo_name = \"org_brotli\")\nlocal_path_override(\n    module_name = \"brotli\",\n    path = \"../..\",\n)\n"
  },
  {
    "path": "c/fuzz/decode_fuzzer.c",
    "content": "// Copyright 2015 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\n#include <stddef.h>\n#include <stdint.h>\n#include <stdlib.h>\n\n#include <brotli/decode.h>\n\n// Entry point for LibFuzzer.\nint LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {\n  size_t addend = 0;\n  if (size > 0)\n    addend = data[size - 1] & 7;\n  const uint8_t* next_in = data;\n\n  const int kBufferSize = 1024;\n  uint8_t* buffer = (uint8_t*) malloc(kBufferSize);\n  if (!buffer) {\n    // OOM is out-of-scope here.\n    return 0;\n  }\n  /* The biggest \"magic number\" in brotli is 16MiB - 16, so no need to check\n     the cases with much longer output. */\n  const size_t total_out_limit = (addend == 0) ? (1 << 26) : (1 << 24);\n  size_t total_out = 0;\n\n  BrotliDecoderState* state = BrotliDecoderCreateInstance(0, 0, 0);\n  if (!state) {\n    // OOM is out-of-scope here.\n    free(buffer);\n    return 0;\n  }\n\n  if (addend == 0)\n    addend = size;\n  /* Test both fast (addend == size) and slow (addend <= 7) decoding paths. */\n  for (size_t i = 0; i < size;) {\n    size_t next_i = i + addend;\n    if (next_i > size)\n      next_i = size;\n    size_t avail_in = next_i - i;\n    i = next_i;\n    BrotliDecoderResult result = BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT;\n    while (result == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) {\n      size_t avail_out = kBufferSize;\n      uint8_t* next_out = buffer;\n      result = BrotliDecoderDecompressStream(\n          state, &avail_in, &next_in, &avail_out, &next_out, &total_out);\n      if (total_out > total_out_limit)\n        break;\n    }\n    if (total_out > total_out_limit)\n      break;\n    if (result != BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT)\n      break;\n  }\n\n  BrotliDecoderDestroyInstance(state);\n  free(buffer);\n  return 0;\n}\n"
  },
  {
    "path": "c/fuzz/run_decode_fuzzer.c",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Simple runner for decode_fuzzer.cc */\n\n#include <stdio.h>\n#include <string.h>\n#include <stdlib.h>\n#include <stdint.h>\n\nvoid LLVMFuzzerTestOneInput(const uint8_t* data, size_t size);\n\nint main(int argc, char* *argv) {\n  if (argc != 2) {\n    fprintf(stderr, \"Exactly one argument is expected.\\n\");\n    exit(EXIT_FAILURE);\n  }\n\n  FILE* f = fopen(argv[1], \"r\");\n  if (!f) {\n    fprintf(stderr, \"Failed to open input file.\");\n    exit(EXIT_FAILURE);\n  }\n\n  size_t max_len = 1 << 20;\n  unsigned char* tmp = (unsigned char*)malloc(max_len);\n  size_t len = fread(tmp, 1, max_len, f);\n  if (ferror(f)) {\n    fclose(f);\n    fprintf(stderr, \"Failed read input file.\");\n    exit(EXIT_FAILURE);\n  }\n  /* Make data after the end \"inaccessible\". */\n  unsigned char* data = (unsigned char*)malloc(len);\n  memcpy(data, tmp, len);\n  free(tmp);\n\n  LLVMFuzzerTestOneInput(data, len);\n  free(data);\n  exit(EXIT_SUCCESS);\n}\n"
  },
  {
    "path": "c/fuzz/test_fuzzer.sh",
    "content": "#!/usr/bin/env bash\nset -e\n\nexport CC=${CC:-cc}\n\nBROTLI=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )/../..\" && pwd )\"\nSRC=$BROTLI/c\n\ncd $BROTLI\n\nrm -rf bin\nmkdir bin\ncd bin\n\ncmake $BROTLI -DCMAKE_C_COMPILER=\"$CC\" \\\n    -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=OFF -DENABLE_SANITIZER=address\nmake -j$(nproc) brotlidec\n\n${CC} -o run_decode_fuzzer -std=c99 -fsanitize=address -I$SRC/include \\\n    $SRC/fuzz/decode_fuzzer.c $SRC/fuzz/run_decode_fuzzer.c \\\n    ./libbrotlidec.a ./libbrotlicommon.a\n\nmkdir decode_corpora\nunzip $BROTLI/java/org/brotli/integration/fuzz_data.zip -d decode_corpora\n\nfor f in `ls decode_corpora`\ndo\n echo \"Testing $f\"\n ./run_decode_fuzzer decode_corpora/$f\ndone\n\ncd $BROTLI\nrm -rf bin\n"
  },
  {
    "path": "c/include/brotli/decode.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/**\n * @file\n * API for Brotli decompression.\n */\n\n#ifndef BROTLI_DEC_DECODE_H_\n#define BROTLI_DEC_DECODE_H_\n\n#include <brotli/port.h>\n#include <brotli/shared_dictionary.h>\n#include <brotli/types.h>  /* IWYU pragma: export */\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/**\n * Opaque structure that holds decoder state.\n *\n * Allocated and initialized with ::BrotliDecoderCreateInstance.\n * Cleaned up and deallocated with ::BrotliDecoderDestroyInstance.\n */\ntypedef struct BrotliDecoderStateStruct BrotliDecoderState;\n\n/**\n * Result type for ::BrotliDecoderDecompress and\n * ::BrotliDecoderDecompressStream functions.\n */\ntypedef enum {\n  /** Decoding error, e.g. corrupted input or memory allocation problem. */\n  BROTLI_DECODER_RESULT_ERROR = 0,\n  /** Decoding successfully completed. */\n  BROTLI_DECODER_RESULT_SUCCESS = 1,\n  /** Partially done; should be called again with more input. */\n  BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT = 2,\n  /** Partially done; should be called again with more output. */\n  BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT = 3\n} BrotliDecoderResult;\n\n/**\n * Template that evaluates items of ::BrotliDecoderErrorCode.\n *\n * Example: @code {.cpp}\n * // Log Brotli error code.\n * switch (brotliDecoderErrorCode) {\n * #define CASE_(PREFIX, NAME, CODE) \\\n *   case BROTLI_DECODER ## PREFIX ## NAME: \\\n *     LOG(INFO) << \"error code:\" << #NAME; \\\n *     break;\n * #define NEWLINE_\n * BROTLI_DECODER_ERROR_CODES_LIST(CASE_, NEWLINE_)\n * #undef CASE_\n * #undef NEWLINE_\n *   default: LOG(FATAL) << \"unknown brotli error code\";\n * }\n * @endcode\n */\n#define BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE, SEPARATOR)      \\\n  BROTLI_ERROR_CODE(_, NO_ERROR, 0) SEPARATOR                              \\\n  /* Same as BrotliDecoderResult values */                                 \\\n  BROTLI_ERROR_CODE(_, SUCCESS, 1) SEPARATOR                               \\\n  BROTLI_ERROR_CODE(_, NEEDS_MORE_INPUT, 2) SEPARATOR                      \\\n  BROTLI_ERROR_CODE(_, NEEDS_MORE_OUTPUT, 3) SEPARATOR                     \\\n                                                                           \\\n  /* Errors caused by invalid input */                                     \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_NIBBLE, -1) SEPARATOR        \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, RESERVED, -2) SEPARATOR                \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_META_NIBBLE, -3) SEPARATOR   \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_ALPHABET, -4) SEPARATOR \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_SAME, -5) SEPARATOR     \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, CL_SPACE, -6) SEPARATOR                \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, HUFFMAN_SPACE, -7) SEPARATOR           \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, CONTEXT_MAP_REPEAT, -8) SEPARATOR      \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_1, -9) SEPARATOR          \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_2, -10) SEPARATOR         \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, TRANSFORM, -11) SEPARATOR              \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, DICTIONARY, -12) SEPARATOR             \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, WINDOW_BITS, -13) SEPARATOR            \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_1, -14) SEPARATOR              \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_2, -15) SEPARATOR              \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, DISTANCE, -16) SEPARATOR               \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_SWITCH, -17) SEPARATOR           \\\n  BROTLI_ERROR_CODE(_ERROR_, COMPOUND_DICTIONARY, -18) SEPARATOR           \\\n  BROTLI_ERROR_CODE(_ERROR_, DICTIONARY_NOT_SET, -19) SEPARATOR            \\\n  BROTLI_ERROR_CODE(_ERROR_, INVALID_ARGUMENTS, -20) SEPARATOR             \\\n                                                                           \\\n  /* Memory allocation problems */                                         \\\n  BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MODES, -21) SEPARATOR           \\\n  /* Literal, insert and distance trees together */                        \\\n  BROTLI_ERROR_CODE(_ERROR_ALLOC_, TREE_GROUPS, -22) SEPARATOR             \\\n  /* -23..-24 codes are reserved for distinct tree groups */               \\\n  BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MAP, -25) SEPARATOR             \\\n  BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_1, -26) SEPARATOR           \\\n  BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_2, -27) SEPARATOR           \\\n  /* -28..-29 codes are reserved for dynamic ring-buffer allocation */     \\\n  BROTLI_ERROR_CODE(_ERROR_ALLOC_, BLOCK_TYPE_TREES, -30) SEPARATOR        \\\n                                                                           \\\n  /* \"Impossible\" states */                                                \\\n  BROTLI_ERROR_CODE(_ERROR_, UNREACHABLE, -31)\n\n/**\n * Error code for detailed logging / production debugging.\n *\n * See ::BrotliDecoderGetErrorCode and ::BROTLI_LAST_ERROR_CODE.\n */\ntypedef enum {\n#define BROTLI_COMMA_ ,\n#define BROTLI_ERROR_CODE_ENUM_ITEM_(PREFIX, NAME, CODE) \\\n    BROTLI_DECODER ## PREFIX ## NAME = CODE\n  BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_ENUM_ITEM_, BROTLI_COMMA_)\n} BrotliDecoderErrorCode;\n#undef BROTLI_ERROR_CODE_ENUM_ITEM_\n#undef BROTLI_COMMA_\n\n/**\n * The value of the last error code, negative integer.\n *\n * All other error code values are in the range from ::BROTLI_LAST_ERROR_CODE\n * to @c -1. There are also 4 other possible non-error codes @c 0 .. @c 3 in\n * ::BrotliDecoderErrorCode enumeration.\n */\n#define BROTLI_LAST_ERROR_CODE BROTLI_DECODER_ERROR_UNREACHABLE\n\n/** Options to be used with ::BrotliDecoderSetParameter. */\ntypedef enum BrotliDecoderParameter {\n  /**\n   * Disable \"canny\" ring buffer allocation strategy.\n   *\n   * Ring buffer is allocated according to window size, despite the real size of\n   * the content.\n   */\n  BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION = 0,\n  /**\n   * Flag that determines if \"Large Window Brotli\" is used.\n   */\n  BROTLI_DECODER_PARAM_LARGE_WINDOW = 1\n} BrotliDecoderParameter;\n\n/**\n * Sets the specified parameter to the given decoder instance.\n *\n * @param state decoder instance\n * @param param parameter to set\n * @param value new parameter value\n * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is invalid\n * @returns ::BROTLI_TRUE if value is accepted\n */\nBROTLI_DEC_API BROTLI_BOOL BrotliDecoderSetParameter(\n    BrotliDecoderState* state, BrotliDecoderParameter param, uint32_t value);\n\n/**\n * Adds LZ77 prefix dictionary, adds or replaces built-in static dictionary and\n * transforms.\n *\n * Attached dictionary ownership is not transferred.\n * Data provided to this method should be kept accessible until\n * decoding is finished and decoder instance is destroyed.\n *\n * @note Dictionaries can NOT be attached after actual decoding is started.\n *\n * @param state decoder instance\n * @param type dictionary data format\n * @param data_size length of memory region pointed by @p data\n * @param data dictionary data in format corresponding to @p type\n * @returns ::BROTLI_FALSE if dictionary is corrupted,\n *          or dictionary count limit is reached\n * @returns ::BROTLI_TRUE if dictionary is accepted / attached\n */\nBROTLI_DEC_API BROTLI_BOOL BrotliDecoderAttachDictionary(\n    BrotliDecoderState* state, BrotliSharedDictionaryType type,\n    size_t data_size, const uint8_t data[BROTLI_ARRAY_PARAM(data_size)]);\n\n/**\n * Creates an instance of ::BrotliDecoderState and initializes it.\n *\n * The instance can be used once for decoding and should then be destroyed with\n * ::BrotliDecoderDestroyInstance, it cannot be reused for a new decoding\n * session.\n *\n * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the\n * case they are both zero, default memory allocators are used. @p opaque is\n * passed to @p alloc_func and @p free_func when they are called. @p free_func\n * has to return without doing anything when asked to free a NULL pointer.\n *\n * @param alloc_func custom memory allocation function\n * @param free_func custom memory free function\n * @param opaque custom memory manager handle\n * @returns @c 0 if instance can not be allocated or initialized\n * @returns pointer to initialized ::BrotliDecoderState otherwise\n */\nBROTLI_DEC_API BrotliDecoderState* BrotliDecoderCreateInstance(\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);\n\n/**\n * Deinitializes and frees ::BrotliDecoderState instance.\n *\n * @param state decoder instance to be cleaned up and deallocated\n */\nBROTLI_DEC_API void BrotliDecoderDestroyInstance(BrotliDecoderState* state);\n\n/**\n * Performs one-shot memory-to-memory decompression.\n *\n * Decompresses the data in @p encoded_buffer into @p decoded_buffer, and sets\n * @p *decoded_size to the decompressed length.\n *\n * @param encoded_size size of @p encoded_buffer\n * @param encoded_buffer compressed data buffer with at least @p encoded_size\n *        addressable bytes\n * @param[in, out] decoded_size @b in: size of @p decoded_buffer; \\n\n *                 @b out: length of decompressed data written to\n *                 @p decoded_buffer\n * @param decoded_buffer decompressed data destination buffer\n * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory\n *          allocation failed, or @p decoded_buffer is not large enough;\n * @returns ::BROTLI_DECODER_RESULT_SUCCESS otherwise\n */\nBROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompress(\n    size_t encoded_size,\n    const uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(encoded_size)],\n    size_t* decoded_size,\n    uint8_t decoded_buffer[BROTLI_ARRAY_PARAM(*decoded_size)]);\n\n/**\n * Decompresses the input stream to the output stream.\n *\n * The values @p *available_in and @p *available_out must specify the number of\n * bytes addressable at @p *next_in and @p *next_out respectively.\n * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL.\n *\n * After each call, @p *available_in will be decremented by the amount of input\n * bytes consumed, and the @p *next_in pointer will be incremented by that\n * amount. Similarly, @p *available_out will be decremented by the amount of\n * output bytes written, and the @p *next_out pointer will be incremented by\n * that amount.\n *\n * @p total_out, if it is not a null-pointer, will be set to the number\n * of bytes decompressed since the last @p state initialization.\n *\n * @note Input is never overconsumed, so @p next_in and @p available_in could be\n * passed to the next consumer after decoding is complete.\n *\n * @param state decoder instance\n * @param[in, out] available_in @b in: amount of available input; \\n\n *                 @b out: amount of unused input\n * @param[in, out] next_in pointer to the next compressed byte\n * @param[in, out] available_out @b in: length of output buffer; \\n\n *                 @b out: remaining size of output buffer\n * @param[in, out] next_out output buffer cursor;\n *                 can be @c NULL if @p available_out is @c 0\n * @param[out] total_out number of bytes decompressed so far; can be @c NULL\n * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory\n *          allocation failed, arguments were invalid, etc.;\n *          use ::BrotliDecoderGetErrorCode to get detailed error code\n * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT decoding is blocked until\n *          more input data is provided\n * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT decoding is blocked until\n *          more output space is provided\n * @returns ::BROTLI_DECODER_RESULT_SUCCESS decoding is finished, no more\n *          input might be consumed and no more output will be produced\n */\nBROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompressStream(\n  BrotliDecoderState* state, size_t* available_in, const uint8_t** next_in,\n  size_t* available_out, uint8_t** next_out, size_t* total_out);\n\n/**\n * Checks if decoder has more output.\n *\n * @param state decoder instance\n * @returns ::BROTLI_TRUE, if decoder has some unconsumed output\n * @returns ::BROTLI_FALSE otherwise\n */\nBROTLI_DEC_API BROTLI_BOOL BrotliDecoderHasMoreOutput(\n    const BrotliDecoderState* state);\n\n/**\n * Acquires pointer to internal output buffer.\n *\n * This method is used to make language bindings easier and more efficient:\n *  -# push data to ::BrotliDecoderDecompressStream,\n *     until ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT is reported\n *  -# use ::BrotliDecoderTakeOutput to peek bytes and copy to language-specific\n *     entity\n *\n * Also this could be useful if there is an output stream that is able to\n * consume all the provided data (e.g. when data is saved to file system).\n *\n * @attention After every call to ::BrotliDecoderTakeOutput @p *size bytes of\n *            output are considered consumed for all consecutive calls to the\n *            instance methods; returned pointer becomes invalidated as well.\n *\n * @note Decoder output is not guaranteed to be contiguous. This means that\n *       after the size-unrestricted call to ::BrotliDecoderTakeOutput,\n *       immediate next call to ::BrotliDecoderTakeOutput may return more data.\n *\n * @param state decoder instance\n * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0 if\n *                 any amount could be handled; \\n\n *                 @b out: amount of data pointed by returned pointer and\n *                 considered consumed; \\n\n *                 out value is never greater than in value, unless it is @c 0\n * @returns pointer to output data\n */\nBROTLI_DEC_API const uint8_t* BrotliDecoderTakeOutput(\n    BrotliDecoderState* state, size_t* size);\n\n/**\n * Checks if instance has already consumed input.\n *\n * Instance that returns ::BROTLI_FALSE is considered \"fresh\" and could be\n * reused.\n *\n * @param state decoder instance\n * @returns ::BROTLI_TRUE if decoder has already used some input bytes\n * @returns ::BROTLI_FALSE otherwise\n */\nBROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* state);\n\n/**\n * Checks if decoder instance reached the final state.\n *\n * @param state decoder instance\n * @returns ::BROTLI_TRUE if decoder is in a state where it reached the end of\n *          the input and produced all of the output\n * @returns ::BROTLI_FALSE otherwise\n */\nBROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsFinished(\n    const BrotliDecoderState* state);\n\n/**\n * Acquires a detailed error code.\n *\n * Should be used only after ::BrotliDecoderDecompressStream returns\n * ::BROTLI_DECODER_RESULT_ERROR.\n *\n * See also ::BrotliDecoderErrorString\n *\n * @param state decoder instance\n * @returns last saved error code\n */\nBROTLI_DEC_API BrotliDecoderErrorCode BrotliDecoderGetErrorCode(\n    const BrotliDecoderState* state);\n\n/**\n * Converts error code to a c-string.\n */\nBROTLI_DEC_API const char* BrotliDecoderErrorString(BrotliDecoderErrorCode c);\n\n/**\n * Gets a decoder library version.\n *\n * Look at BROTLI_MAKE_HEX_VERSION for more information.\n */\nBROTLI_DEC_API uint32_t BrotliDecoderVersion(void);\n\n/**\n * Callback to fire on metadata block start.\n *\n * After this callback is fired, if @p size is not @c 0, it is followed by\n * ::brotli_decoder_metadata_chunk_func as more metadata block contents become\n * accessible.\n *\n * @param opaque callback handle\n * @param size size of metadata block\n */\ntypedef void (*brotli_decoder_metadata_start_func)(void* opaque, size_t size);\n\n/**\n * Callback to fire on metadata block chunk becomes available.\n *\n * This function can be invoked multiple times per metadata block; block should\n * be considered finished when sum of @p size matches the announced metadata\n * block size. Chunks contents pointed by @p data are transient and shouln not\n * be accessed after leaving the callback.\n *\n * @param opaque callback handle\n * @param data pointer to metadata contents\n * @param size size of metadata block chunk, at least @c 1\n */\ntypedef void (*brotli_decoder_metadata_chunk_func)(void* opaque,\n                                                   const uint8_t* data,\n                                                   size_t size);\n\n/**\n * Sets callback for receiving metadata blocks.\n *\n * @param state decoder instance\n * @param start_func callback on metadata block start\n * @param chunk_func callback on metadata block chunk\n * @param opaque callback handle\n */\nBROTLI_DEC_API void BrotliDecoderSetMetadataCallbacks(\n    BrotliDecoderState* state,\n    brotli_decoder_metadata_start_func start_func,\n    brotli_decoder_metadata_chunk_func chunk_func, void* opaque);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n} /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_DEC_DECODE_H_ */\n"
  },
  {
    "path": "c/include/brotli/encode.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/**\n * @file\n * API for Brotli compression.\n */\n\n#ifndef BROTLI_ENC_ENCODE_H_\n#define BROTLI_ENC_ENCODE_H_\n\n#include <brotli/port.h>\n#include <brotli/shared_dictionary.h>\n#include <brotli/types.h>  /* IWYU pragma: export */\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/** Minimal value for ::BROTLI_PARAM_LGWIN parameter. */\n#define BROTLI_MIN_WINDOW_BITS 10\n/**\n * Maximal value for ::BROTLI_PARAM_LGWIN parameter.\n *\n * @note equal to @c BROTLI_MAX_DISTANCE_BITS constant.\n */\n#define BROTLI_MAX_WINDOW_BITS 24\n/**\n * Maximal value for ::BROTLI_PARAM_LGWIN parameter\n * in \"Large Window Brotli\" (32-bit).\n */\n#define BROTLI_LARGE_MAX_WINDOW_BITS 30\n/** Minimal value for ::BROTLI_PARAM_LGBLOCK parameter. */\n#define BROTLI_MIN_INPUT_BLOCK_BITS 16\n/** Maximal value for ::BROTLI_PARAM_LGBLOCK parameter. */\n#define BROTLI_MAX_INPUT_BLOCK_BITS 24\n/** Minimal value for ::BROTLI_PARAM_QUALITY parameter. */\n#define BROTLI_MIN_QUALITY 0\n/** Maximal value for ::BROTLI_PARAM_QUALITY parameter. */\n#define BROTLI_MAX_QUALITY 11\n\n/** Options for ::BROTLI_PARAM_MODE parameter. */\ntypedef enum BrotliEncoderMode {\n  /**\n   * Default compression mode.\n   *\n   * In this mode compressor does not know anything in advance about the\n   * properties of the input.\n   */\n  BROTLI_MODE_GENERIC = 0,\n  /** Compression mode for UTF-8 formatted text input. */\n  BROTLI_MODE_TEXT = 1,\n  /** Compression mode used in WOFF 2.0. */\n  BROTLI_MODE_FONT = 2\n} BrotliEncoderMode;\n\n/** Default value for ::BROTLI_PARAM_QUALITY parameter. */\n#define BROTLI_DEFAULT_QUALITY 11\n/** Default value for ::BROTLI_PARAM_LGWIN parameter. */\n#define BROTLI_DEFAULT_WINDOW 22\n/** Default value for ::BROTLI_PARAM_MODE parameter. */\n#define BROTLI_DEFAULT_MODE BROTLI_MODE_GENERIC\n\n/** Operations that can be performed by streaming encoder. */\ntypedef enum BrotliEncoderOperation {\n  /**\n   * Process input.\n   *\n   * Encoder may postpone producing output, until it has processed enough input.\n   */\n  BROTLI_OPERATION_PROCESS = 0,\n  /**\n   * Produce output for all processed input.\n   *\n   * Actual flush is performed when input stream is depleted and there is enough\n   * space in output stream. This means that client should repeat\n   * ::BROTLI_OPERATION_FLUSH operation until @p available_in becomes @c 0, and\n   * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is acquired\n   * via ::BrotliEncoderTakeOutput, then operation should be repeated after\n   * output buffer is drained.\n   *\n   * @warning Until flush is complete, client @b SHOULD @b NOT swap,\n   *          reduce or extend input stream.\n   *\n   * When flush is complete, output data will be sufficient for decoder to\n   * reproduce all the given input.\n   */\n  BROTLI_OPERATION_FLUSH = 1,\n  /**\n   * Finalize the stream.\n   *\n   * Actual finalization is performed when input stream is depleted and there is\n   * enough space in output stream. This means that client should repeat\n   * ::BROTLI_OPERATION_FINISH operation until @p available_in becomes @c 0, and\n   * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is acquired\n   * via ::BrotliEncoderTakeOutput, then operation should be repeated after\n   * output buffer is drained.\n   *\n   * @warning Until finalization is complete, client @b SHOULD @b NOT swap,\n   *          reduce or extend input stream.\n   *\n   * Helper function ::BrotliEncoderIsFinished checks if stream is finalized and\n   * output fully dumped.\n   *\n   * Adding more input data to finalized stream is impossible.\n   */\n  BROTLI_OPERATION_FINISH = 2,\n  /**\n   * Emit metadata block to stream.\n   *\n   * Metadata is opaque to Brotli: neither encoder, nor decoder processes this\n   * data or relies on it. It may be used to pass some extra information from\n   * encoder client to decoder client without interfering with main data stream.\n   *\n   * @note Encoder may emit empty metadata blocks internally, to pad encoded\n   *       stream to byte boundary.\n   *\n   * @warning Until emitting metadata is complete client @b SHOULD @b NOT swap,\n   *          reduce or extend input stream.\n   *\n   * @warning The whole content of input buffer is considered to be the content\n   *          of metadata block. Do @b NOT @e append metadata to input stream,\n   *          before it is depleted with other operations.\n   *\n   * Stream is soft-flushed before metadata block is emitted. Metadata block\n   * @b MUST be no longer than than 16MiB.\n   */\n  BROTLI_OPERATION_EMIT_METADATA = 3\n} BrotliEncoderOperation;\n\n/** Options to be used with ::BrotliEncoderSetParameter. */\ntypedef enum BrotliEncoderParameter {\n  /**\n   * Tune encoder for specific input.\n   *\n   * ::BrotliEncoderMode enumerates all available values.\n   */\n  BROTLI_PARAM_MODE = 0,\n  /**\n   * The main compression speed-density lever.\n   *\n   * The higher the quality, the slower the compression. Range is\n   * from ::BROTLI_MIN_QUALITY to ::BROTLI_MAX_QUALITY.\n   */\n  BROTLI_PARAM_QUALITY = 1,\n  /**\n   * Recommended sliding LZ77 window size.\n   *\n   * Encoder may reduce this value, e.g. if input is much smaller than\n   * window size.\n   *\n   * Window size is `(1 << value) - 16`.\n   *\n   * Range is from ::BROTLI_MIN_WINDOW_BITS to ::BROTLI_MAX_WINDOW_BITS.\n   */\n  BROTLI_PARAM_LGWIN = 2,\n  /**\n   * Recommended input block size.\n   *\n   * Encoder may reduce this value, e.g. if input is much smaller than input\n   * block size.\n   *\n   * Range is from ::BROTLI_MIN_INPUT_BLOCK_BITS to\n   * ::BROTLI_MAX_INPUT_BLOCK_BITS.\n   *\n   * @note Bigger input block size allows better compression, but consumes more\n   *       memory. \\n The rough formula of memory used for temporary input\n   *       storage is `3 << lgBlock`.\n   */\n  BROTLI_PARAM_LGBLOCK = 3,\n  /**\n   * Flag that affects usage of \"literal context modeling\" format feature.\n   *\n   * This flag is a \"decoding-speed vs compression ratio\" trade-off.\n   */\n  BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING = 4,\n  /**\n   * Estimated total input size for all ::BrotliEncoderCompressStream calls.\n   *\n   * The default value is 0, which means that the total input size is unknown.\n   */\n  BROTLI_PARAM_SIZE_HINT = 5,\n  /**\n   * Flag that determines if \"Large Window Brotli\" is used.\n   */\n  BROTLI_PARAM_LARGE_WINDOW = 6,\n  /**\n   * Recommended number of postfix bits (NPOSTFIX).\n   *\n   * Encoder may change this value.\n   *\n   * Range is from 0 to ::BROTLI_MAX_NPOSTFIX.\n   */\n  BROTLI_PARAM_NPOSTFIX = 7,\n  /**\n   * Recommended number of direct distance codes (NDIRECT).\n   *\n   * Encoder may change this value.\n   *\n   * Range is from 0 to (15 << NPOSTFIX) in steps of (1 << NPOSTFIX).\n   */\n  BROTLI_PARAM_NDIRECT = 8,\n  /**\n   * Number of bytes of input stream already processed by a different instance.\n   *\n   * @note It is important to configure all the encoder instances with same\n   *       parameters (except this one) in order to allow all the encoded parts\n   *       obey the same restrictions implied by header.\n   *\n   * If offset is not 0, then stream header is omitted.\n   * In any case output start is byte aligned, so for proper streams stitching\n   * \"predecessor\" stream must be flushed.\n   *\n   * Range is not artificially limited, but all the values greater or equal to\n   * maximal window size have the same effect. Values greater than 2**30 are not\n   * allowed.\n   */\n  BROTLI_PARAM_STREAM_OFFSET = 9\n} BrotliEncoderParameter;\n\n/**\n * Opaque structure that holds encoder state.\n *\n * Allocated and initialized with ::BrotliEncoderCreateInstance.\n * Cleaned up and deallocated with ::BrotliEncoderDestroyInstance.\n */\ntypedef struct BrotliEncoderStateStruct BrotliEncoderState;\n\n/**\n * Sets the specified parameter to the given encoder instance.\n *\n * @param state encoder instance\n * @param param parameter to set\n * @param value new parameter value\n * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is invalid\n * @returns ::BROTLI_FALSE if value of parameter can not be changed at current\n *          encoder state (e.g. when encoding is started, window size might be\n *          already encoded and therefore it is impossible to change it)\n * @returns ::BROTLI_TRUE if value is accepted\n * @warning invalid values might be accepted in case they would not break\n *          encoding process.\n */\nBROTLI_ENC_API BROTLI_BOOL BrotliEncoderSetParameter(\n    BrotliEncoderState* state, BrotliEncoderParameter param, uint32_t value);\n\n/**\n * Creates an instance of ::BrotliEncoderState and initializes it.\n *\n * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the\n * case they are both zero, default memory allocators are used. @p opaque is\n * passed to @p alloc_func and @p free_func when they are called. @p free_func\n * has to return without doing anything when asked to free a NULL pointer.\n *\n * @param alloc_func custom memory allocation function\n * @param free_func custom memory free function\n * @param opaque custom memory manager handle\n * @returns @c 0 if instance can not be allocated or initialized\n * @returns pointer to initialized ::BrotliEncoderState otherwise\n */\nBROTLI_ENC_API BrotliEncoderState* BrotliEncoderCreateInstance(\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);\n\n/**\n * Deinitializes and frees ::BrotliEncoderState instance.\n *\n * @param state decoder instance to be cleaned up and deallocated\n */\nBROTLI_ENC_API void BrotliEncoderDestroyInstance(BrotliEncoderState* state);\n\n/* Opaque type for pointer to different possible internal structures containing\n   dictionary prepared for the encoder */\ntypedef struct BrotliEncoderPreparedDictionaryStruct\n    BrotliEncoderPreparedDictionary;\n\n/**\n * Prepares a shared dictionary from the given file format for the encoder.\n *\n * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the\n * case they are both zero, default memory allocators are used. @p opaque is\n * passed to @p alloc_func and @p free_func when they are called. @p free_func\n * has to return without doing anything when asked to free a NULL pointer.\n *\n * @warning Created instance is \"lean\"; it does not contain copy of @p data,\n *          rather it contains only pointer to it; therefore,\n *          @p data @b MUST outlive the created instance.\n *\n * @param type type of dictionary stored in data\n * @param data_size size of @p data buffer\n * @param data pointer to the dictionary data\n * @param quality the maximum Brotli quality to prepare the dictionary for,\n *        use BROTLI_MAX_QUALITY by default\n * @param alloc_func custom memory allocation function\n * @param free_func custom memory free function\n * @param opaque custom memory manager handle\n */\nBROTLI_ENC_API BrotliEncoderPreparedDictionary*\nBrotliEncoderPrepareDictionary(BrotliSharedDictionaryType type,\n    size_t data_size, const uint8_t data[BROTLI_ARRAY_PARAM(data_size)],\n    int quality,\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);\n\nBROTLI_ENC_API void BrotliEncoderDestroyPreparedDictionary(\n    BrotliEncoderPreparedDictionary* dictionary);\n\n/**\n * Attaches a prepared dictionary of any type to the encoder. Can be used\n * multiple times to attach multiple dictionaries. The dictionary type was\n * determined by BrotliEncoderPrepareDictionary. Multiple raw prefix\n * dictionaries and/or max 1 serialized dictionary with custom words can be\n * attached.\n *\n * @returns ::BROTLI_FALSE in case of error\n * @returns ::BROTLI_TRUE otherwise\n */\nBROTLI_ENC_API BROTLI_BOOL BrotliEncoderAttachPreparedDictionary(\n    BrotliEncoderState* state,\n    const BrotliEncoderPreparedDictionary* dictionary);\n\n/**\n * Calculates the output size bound for the given @p input_size.\n *\n * @warning Result is only valid if quality is at least @c 2 and, in\n *          case ::BrotliEncoderCompressStream was used, no flushes\n *          (::BROTLI_OPERATION_FLUSH) were performed.\n *\n * @param input_size size of projected input\n * @returns @c 0 if result does not fit @c size_t\n */\nBROTLI_ENC_API size_t BrotliEncoderMaxCompressedSize(size_t input_size);\n\n/**\n * Performs one-shot memory-to-memory compression.\n *\n * Compresses the data in @p input_buffer into @p encoded_buffer, and sets\n * @p *encoded_size to the compressed length.\n *\n * @note If ::BrotliEncoderMaxCompressedSize(@p input_size) returns non-zero\n *       value, then output is guaranteed to be no longer than that.\n *\n * @note If @p lgwin is greater than ::BROTLI_MAX_WINDOW_BITS then resulting\n *       stream might be incompatible with RFC 7932; to decode such streams,\n *       decoder should be configured with\n *       ::BROTLI_DECODER_PARAM_LARGE_WINDOW = @c 1\n *\n * @param quality quality parameter value, e.g. ::BROTLI_DEFAULT_QUALITY\n * @param lgwin lgwin parameter value, e.g. ::BROTLI_DEFAULT_WINDOW\n * @param mode mode parameter value, e.g. ::BROTLI_DEFAULT_MODE\n * @param input_size size of @p input_buffer\n * @param input_buffer input data buffer with at least @p input_size\n *        addressable bytes\n * @param[in, out] encoded_size @b in: size of @p encoded_buffer; \\n\n *                 @b out: length of compressed data written to\n *                 @p encoded_buffer, or @c 0 if compression fails\n * @param encoded_buffer compressed data destination buffer\n * @returns ::BROTLI_FALSE in case of compression error\n * @returns ::BROTLI_FALSE if output buffer is too small\n * @returns ::BROTLI_TRUE otherwise\n */\nBROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompress(\n    int quality, int lgwin, BrotliEncoderMode mode, size_t input_size,\n    const uint8_t input_buffer[BROTLI_ARRAY_PARAM(input_size)],\n    size_t* encoded_size,\n    uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(*encoded_size)]);\n\n/**\n * Compresses input stream to output stream.\n *\n * The values @p *available_in and @p *available_out must specify the number of\n * bytes addressable at @p *next_in and @p *next_out respectively.\n * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL.\n *\n * After each call, @p *available_in will be decremented by the amount of input\n * bytes consumed, and the @p *next_in pointer will be incremented by that\n * amount. Similarly, @p *available_out will be decremented by the amount of\n * output bytes written, and the @p *next_out pointer will be incremented by\n * that amount.\n *\n * @p total_out, if it is not a null-pointer, will be set to the number\n * of bytes compressed since the last @p state initialization.\n *\n *\n *\n * Internally workflow consists of 3 tasks:\n *  -# (optionally) copy input data to internal buffer\n *  -# actually compress data and (optionally) store it to internal buffer\n *  -# (optionally) copy compressed bytes from internal buffer to output stream\n *\n * Whenever all 3 tasks can't move forward anymore, or error occurs, this\n * method returns the control flow to caller.\n *\n * @p op is used to perform flush, finish the stream, or inject metadata block.\n * See ::BrotliEncoderOperation for more information.\n *\n * Flushing the stream means forcing encoding of all input passed to encoder and\n * completing the current output block, so it could be fully decoded by stream\n * decoder. To perform flush set @p op to ::BROTLI_OPERATION_FLUSH.\n * Under some circumstances (e.g. lack of output stream capacity) this operation\n * would require several calls to ::BrotliEncoderCompressStream. The method must\n * be called again until both input stream is depleted and encoder has no more\n * output (see ::BrotliEncoderHasMoreOutput) after the method is called.\n *\n * Finishing the stream means encoding of all input passed to encoder and\n * adding specific \"final\" marks, so stream decoder could determine that stream\n * is complete. To perform finish set @p op to ::BROTLI_OPERATION_FINISH.\n * Under some circumstances (e.g. lack of output stream capacity) this operation\n * would require several calls to ::BrotliEncoderCompressStream. The method must\n * be called again until both input stream is depleted and encoder has no more\n * output (see ::BrotliEncoderHasMoreOutput) after the method is called.\n *\n * @warning When flushing and finishing, @p op should not change until operation\n *          is complete; input stream should not be swapped, reduced or\n *          extended as well.\n *\n * @param state encoder instance\n * @param op requested operation\n * @param[in, out] available_in @b in: amount of available input; \\n\n *                 @b out: amount of unused input\n * @param[in, out] next_in pointer to the next input byte\n * @param[in, out] available_out @b in: length of output buffer; \\n\n *                 @b out: remaining size of output buffer\n * @param[in, out] next_out compressed output buffer cursor;\n *                 can be @c NULL if @p available_out is @c 0\n * @param[out] total_out number of bytes produced so far; can be @c NULL\n * @returns ::BROTLI_FALSE if there was an error\n * @returns ::BROTLI_TRUE otherwise\n */\nBROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompressStream(\n    BrotliEncoderState* state, BrotliEncoderOperation op, size_t* available_in,\n    const uint8_t** next_in, size_t* available_out, uint8_t** next_out,\n    size_t* total_out);\n\n/**\n * Checks if encoder instance reached the final state.\n *\n * @param state encoder instance\n * @returns ::BROTLI_TRUE if encoder is in a state where it reached the end of\n *          the input and produced all of the output\n * @returns ::BROTLI_FALSE otherwise\n */\nBROTLI_ENC_API BROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* state);\n\n/**\n * Checks if encoder has more output.\n *\n * @param state encoder instance\n * @returns ::BROTLI_TRUE, if encoder has some unconsumed output\n * @returns ::BROTLI_FALSE otherwise\n */\nBROTLI_ENC_API BROTLI_BOOL BrotliEncoderHasMoreOutput(\n    BrotliEncoderState* state);\n\n/**\n * Acquires pointer to internal output buffer.\n *\n * This method is used to make language bindings easier and more efficient:\n *  -# push data to ::BrotliEncoderCompressStream,\n *     until ::BrotliEncoderHasMoreOutput returns BROTLI_TRUE\n *  -# use ::BrotliEncoderTakeOutput to peek bytes and copy to language-specific\n *     entity\n *\n * Also this could be useful if there is an output stream that is able to\n * consume all the provided data (e.g. when data is saved to file system).\n *\n * @attention After every call to ::BrotliEncoderTakeOutput @p *size bytes of\n *            output are considered consumed for all consecutive calls to the\n *            instance methods; returned pointer becomes invalidated as well.\n *\n * @note Encoder output is not guaranteed to be contiguous. This means that\n *       after the size-unrestricted call to ::BrotliEncoderTakeOutput,\n *       immediate next call to ::BrotliEncoderTakeOutput may return more data.\n *\n * @param state encoder instance\n * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0 if\n *                 any amount could be handled; \\n\n *                 @b out: amount of data pointed by returned pointer and\n *                 considered consumed; \\n\n *                 out value is never greater than in value, unless it is @c 0\n * @returns pointer to output data\n */\nBROTLI_ENC_API const uint8_t* BrotliEncoderTakeOutput(\n    BrotliEncoderState* state, size_t* size);\n\n/* Returns the estimated peak memory usage (in bytes) of the BrotliCompress()\n   function, not counting the memory needed for the input and output. */\nBROTLI_ENC_EXTRA_API size_t BrotliEncoderEstimatePeakMemoryUsage(\n    int quality, int lgwin, size_t input_size);\n/* Returns 0 if dictionary is not valid; otherwise returns allocation size. */\nBROTLI_ENC_EXTRA_API size_t BrotliEncoderGetPreparedDictionarySize(\n    const BrotliEncoderPreparedDictionary* dictionary);\n\n/**\n * Gets an encoder library version.\n *\n * Look at BROTLI_MAKE_HEX_VERSION for more information.\n */\nBROTLI_ENC_API uint32_t BrotliEncoderVersion(void);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_ENCODE_H_ */\n"
  },
  {
    "path": "c/include/brotli/port.h",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Macros for compiler / platform specific API declarations. */\n\n#ifndef BROTLI_COMMON_PORT_H_\n#define BROTLI_COMMON_PORT_H_\n\n/* The following macros were borrowed from https://github.com/nemequ/hedley\n * with permission of original author - Evan Nemerson <evan@nemerson.com> */\n\n/* >>> >>> >>> hedley macros */\n\n#define BROTLI_MAKE_VERSION(major, minor, revision) \\\n  (((major) * 1000000) + ((minor) * 1000) + (revision))\n\n#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__)\n#define BROTLI_GNUC_VERSION \\\n  BROTLI_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)\n#elif defined(__GNUC__)\n#define BROTLI_GNUC_VERSION BROTLI_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, 0)\n#endif\n\n#if defined(BROTLI_GNUC_VERSION)\n#define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) \\\n  (BROTLI_GNUC_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))\n#else\n#define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) (0)\n#endif\n\n#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000)\n#define BROTLI_MSVC_VERSION                                \\\n  BROTLI_MAKE_VERSION((_MSC_FULL_VER / 10000000),          \\\n                      (_MSC_FULL_VER % 10000000) / 100000, \\\n                      (_MSC_FULL_VER % 100000) / 100)\n#elif defined(_MSC_FULL_VER)\n#define BROTLI_MSVC_VERSION                              \\\n  BROTLI_MAKE_VERSION((_MSC_FULL_VER / 1000000),         \\\n                      (_MSC_FULL_VER % 1000000) / 10000, \\\n                      (_MSC_FULL_VER % 10000) / 10)\n#elif defined(_MSC_VER)\n#define BROTLI_MSVC_VERSION \\\n  BROTLI_MAKE_VERSION(_MSC_VER / 100, _MSC_VER % 100, 0)\n#endif\n\n#if !defined(_MSC_VER)\n#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) (0)\n#elif defined(_MSC_VER) && (_MSC_VER >= 1400)\n#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \\\n  (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch)))\n#elif defined(_MSC_VER) && (_MSC_VER >= 1200)\n#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \\\n  (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch)))\n#else\n#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \\\n  (_MSC_VER >= ((major * 100) + (minor)))\n#endif\n\n#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE)\n#define BROTLI_INTEL_VERSION                   \\\n  BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100,  \\\n                      __INTEL_COMPILER % 100,  \\\n                      __INTEL_COMPILER_UPDATE)\n#elif defined(__INTEL_COMPILER)\n#define BROTLI_INTEL_VERSION \\\n  BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0)\n#endif\n\n#if defined(BROTLI_INTEL_VERSION)\n#define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) \\\n  (BROTLI_INTEL_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))\n#else\n#define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) (0)\n#endif\n\n#if defined(__PGI) && \\\n    defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__)\n#define BROTLI_PGI_VERSION \\\n  BROTLI_MAKE_VERSION(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__)\n#endif\n\n#if defined(BROTLI_PGI_VERSION)\n#define BROTLI_PGI_VERSION_CHECK(major, minor, patch) \\\n  (BROTLI_PGI_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))\n#else\n#define BROTLI_PGI_VERSION_CHECK(major, minor, patch) (0)\n#endif\n\n#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000)\n#define BROTLI_SUNPRO_VERSION                                       \\\n  BROTLI_MAKE_VERSION(                                              \\\n    (((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), \\\n    (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf),   \\\n    (__SUNPRO_C & 0xf) * 10)\n#elif defined(__SUNPRO_C)\n#define BROTLI_SUNPRO_VERSION                  \\\n  BROTLI_MAKE_VERSION((__SUNPRO_C >> 8) & 0xf, \\\n                      (__SUNPRO_C >> 4) & 0xf, \\\n                      (__SUNPRO_C) & 0xf)\n#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000)\n#define BROTLI_SUNPRO_VERSION                                         \\\n  BROTLI_MAKE_VERSION(                                                \\\n    (((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), \\\n    (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf),   \\\n    (__SUNPRO_CC & 0xf) * 10)\n#elif defined(__SUNPRO_CC)\n#define BROTLI_SUNPRO_VERSION                   \\\n  BROTLI_MAKE_VERSION((__SUNPRO_CC >> 8) & 0xf, \\\n                      (__SUNPRO_CC >> 4) & 0xf, \\\n                      (__SUNPRO_CC) & 0xf)\n#endif\n\n#if defined(BROTLI_SUNPRO_VERSION)\n#define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) \\\n  (BROTLI_SUNPRO_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))\n#else\n#define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) (0)\n#endif\n\n#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION)\n#define BROTLI_ARM_VERSION                                       \\\n  BROTLI_MAKE_VERSION((__ARMCOMPILER_VERSION / 1000000),         \\\n                      (__ARMCOMPILER_VERSION % 1000000) / 10000, \\\n                      (__ARMCOMPILER_VERSION % 10000) / 100)\n#elif defined(__CC_ARM) && defined(__ARMCC_VERSION)\n#define BROTLI_ARM_VERSION                                 \\\n  BROTLI_MAKE_VERSION((__ARMCC_VERSION / 1000000),         \\\n                      (__ARMCC_VERSION % 1000000) / 10000, \\\n                      (__ARMCC_VERSION % 10000) / 100)\n#endif\n\n#if defined(BROTLI_ARM_VERSION)\n#define BROTLI_ARM_VERSION_CHECK(major, minor, patch) \\\n  (BROTLI_ARM_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))\n#else\n#define BROTLI_ARM_VERSION_CHECK(major, minor, patch) (0)\n#endif\n\n#if defined(__ibmxl__)\n#define BROTLI_IBM_VERSION                    \\\n  BROTLI_MAKE_VERSION(__ibmxl_version__,      \\\n                      __ibmxl_release__,      \\\n                      __ibmxl_modification__)\n#elif defined(__xlC__) && defined(__xlC_ver__)\n#define BROTLI_IBM_VERSION \\\n  BROTLI_MAKE_VERSION(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff)\n#elif defined(__xlC__)\n#define BROTLI_IBM_VERSION BROTLI_MAKE_VERSION(__xlC__ >> 8, __xlC__ & 0xff, 0)\n#endif\n\n#if defined(BROTLI_IBM_VERSION)\n#define BROTLI_IBM_VERSION_CHECK(major, minor, patch) \\\n  (BROTLI_IBM_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))\n#else\n#define BROTLI_IBM_VERSION_CHECK(major, minor, patch) (0)\n#endif\n\n#if defined(__TI_COMPILER_VERSION__)\n#define BROTLI_TI_VERSION                                         \\\n  BROTLI_MAKE_VERSION((__TI_COMPILER_VERSION__ / 1000000),        \\\n                      (__TI_COMPILER_VERSION__ % 1000000) / 1000, \\\n                      (__TI_COMPILER_VERSION__ % 1000))\n#endif\n\n#if defined(BROTLI_TI_VERSION)\n#define BROTLI_TI_VERSION_CHECK(major, minor, patch) \\\n  (BROTLI_TI_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))\n#else\n#define BROTLI_TI_VERSION_CHECK(major, minor, patch) (0)\n#endif\n\n#if defined(__IAR_SYSTEMS_ICC__)\n#if __VER__ > 1000\n#define BROTLI_IAR_VERSION                     \\\n  BROTLI_MAKE_VERSION((__VER__ / 1000000),     \\\n                      (__VER__ / 1000) % 1000, \\\n                      (__VER__ % 1000))\n#else\n#define BROTLI_IAR_VERSION BROTLI_MAKE_VERSION(VER / 100, __VER__ % 100, 0)\n#endif\n#endif\n\n#if defined(BROTLI_IAR_VERSION)\n#define BROTLI_IAR_VERSION_CHECK(major, minor, patch) \\\n  (BROTLI_IAR_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))\n#else\n#define BROTLI_IAR_VERSION_CHECK(major, minor, patch) (0)\n#endif\n\n#if defined(__TINYC__)\n#define BROTLI_TINYC_VERSION \\\n  BROTLI_MAKE_VERSION(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100)\n#endif\n\n#if defined(BROTLI_TINYC_VERSION)\n#define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) \\\n  (BROTLI_TINYC_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))\n#else\n#define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) (0)\n#endif\n\n#if defined(__has_attribute)\n#define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \\\n  __has_attribute(attribute)\n#else\n#define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \\\n  BROTLI_GNUC_VERSION_CHECK(major, minor, patch)\n#endif\n\n#if defined(__has_builtin)\n#define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \\\n  __has_builtin(builtin)\n#else\n#define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \\\n  BROTLI_GNUC_VERSION_CHECK(major, minor, patch)\n#endif\n\n#if defined(__has_feature)\n#define BROTLI_HAS_FEATURE(feature) __has_feature(feature)\n#else\n#define BROTLI_HAS_FEATURE(feature) (0)\n#endif\n\n#if defined(_WIN32) || defined(__CYGWIN__)\n#define BROTLI_PUBLIC\n#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) ||                         \\\n    BROTLI_TI_VERSION_CHECK(8, 0, 0) ||                             \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0) ||                         \\\n    BROTLI_ARM_VERSION_CHECK(4, 1, 0) ||                            \\\n    BROTLI_IBM_VERSION_CHECK(13, 1, 0) ||                           \\\n    BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) ||                        \\\n    (BROTLI_TI_VERSION_CHECK(7, 3, 0) &&                            \\\n     defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__))\n#define BROTLI_PUBLIC __attribute__ ((visibility (\"default\")))\n#else\n#define BROTLI_PUBLIC\n#endif\n\n#if defined(_WIN32) || defined(__CYGWIN__)\n#define BROTLI_INTERNAL\n#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) ||                         \\\n    BROTLI_TI_VERSION_CHECK(8, 0, 0) ||                             \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0) ||                         \\\n    BROTLI_ARM_VERSION_CHECK(4, 1, 0) ||                            \\\n    BROTLI_IBM_VERSION_CHECK(13, 1, 0) ||                           \\\n    BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) ||                        \\\n    (BROTLI_TI_VERSION_CHECK(7, 3, 0) &&                            \\\n     defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__))\n#define BROTLI_INTERNAL __attribute__ ((visibility (\"hidden\")))\n#else\n#define BROTLI_INTERNAL\n#endif\n\n#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) &&   \\\n    !defined(__STDC_NO_VLA__) && !defined(__cplusplus) &&           \\\n    !defined(__PGI) && !defined(__PGIC__) && !defined(__TINYC__) && \\\n    !defined(__clang__)\n#define BROTLI_ARRAY_PARAM(name) (name)\n#else\n#define BROTLI_ARRAY_PARAM(name)\n#endif\n\n/* <<< <<< <<< end of hedley macros. */\n\n#if defined(BROTLI_SHARED_COMPILATION)\n#if defined(_WIN32)\n#if defined(BROTLICOMMON_SHARED_COMPILATION)\n#define BROTLI_COMMON_API __declspec(dllexport)\n#else  /* !BROTLICOMMON_SHARED_COMPILATION */\n#define BROTLI_COMMON_API __declspec(dllimport)\n#endif  /* BROTLICOMMON_SHARED_COMPILATION */\n#if defined(BROTLIDEC_SHARED_COMPILATION)\n#define BROTLI_DEC_API __declspec(dllexport)\n#else   /* !BROTLIDEC_SHARED_COMPILATION */\n#define BROTLI_DEC_API __declspec(dllimport)\n#endif  /* BROTLIDEC_SHARED_COMPILATION */\n#if defined(BROTLIENC_SHARED_COMPILATION)\n#define BROTLI_ENC_API __declspec(dllexport)\n#else  /* !BROTLIENC_SHARED_COMPILATION */\n#define BROTLI_ENC_API __declspec(dllimport)\n#endif  /* BROTLIENC_SHARED_COMPILATION */\n#else  /* !_WIN32 */\n#define BROTLI_COMMON_API BROTLI_PUBLIC\n#define BROTLI_DEC_API BROTLI_PUBLIC\n#define BROTLI_ENC_API BROTLI_PUBLIC\n#endif  /* _WIN32 */\n#else  /* BROTLI_SHARED_COMPILATION */\n#define BROTLI_COMMON_API\n#define BROTLI_DEC_API\n#define BROTLI_ENC_API\n#endif\n\n#if defined(BROTLI_BUILD_ENC_EXTRA_API)\n#define BROTLI_ENC_EXTRA_API BROTLI_ENC_API\n#else\n#define BROTLI_ENC_EXTRA_API BROTLI_INTERNAL\n#endif\n\n#endif  /* BROTLI_COMMON_PORT_H_ */\n"
  },
  {
    "path": "c/include/brotli/shared_dictionary.h",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* (Opaque) Shared Dictionary definition and utilities. */\n\n#ifndef BROTLI_COMMON_SHARED_DICTIONARY_H_\n#define BROTLI_COMMON_SHARED_DICTIONARY_H_\n\n#include <brotli/port.h>\n#include <brotli/types.h>\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define SHARED_BROTLI_MIN_DICTIONARY_WORD_LENGTH 4\n#define SHARED_BROTLI_MAX_DICTIONARY_WORD_LENGTH 31\n#define SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS 64\n#define SHARED_BROTLI_MAX_COMPOUND_DICTS 15\n\n/**\n * Opaque structure that holds shared dictionary data.\n *\n * Allocated and initialized with ::BrotliSharedDictionaryCreateInstance.\n * Cleaned up and deallocated with ::BrotliSharedDictionaryDestroyInstance.\n */\ntypedef struct BrotliSharedDictionaryStruct BrotliSharedDictionary;\n\n/**\n * Input data type for ::BrotliSharedDictionaryAttach.\n */\ntypedef enum BrotliSharedDictionaryType {\n  /** Raw LZ77 prefix dictionary. */\n  BROTLI_SHARED_DICTIONARY_RAW = 0,\n  /** Serialized shared dictionary.\n   *\n   * DO NOT USE: methods accepting this value will fail.\n   */\n  BROTLI_SHARED_DICTIONARY_SERIALIZED = 1\n} BrotliSharedDictionaryType;\n\n/**\n * Creates an instance of ::BrotliSharedDictionary.\n *\n * Fresh instance has default word dictionary and transforms\n * and no LZ77 prefix dictionary.\n *\n * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the\n * case they are both zero, default memory allocators are used. @p opaque is\n * passed to @p alloc_func and @p free_func when they are called. @p free_func\n * has to return without doing anything when asked to free a NULL pointer.\n *\n * @param alloc_func custom memory allocation function\n * @param free_func custom memory free function\n * @param opaque custom memory manager handle\n * @returns @c 0 if instance can not be allocated or initialized\n * @returns pointer to initialized ::BrotliSharedDictionary otherwise\n */\nBROTLI_COMMON_API BrotliSharedDictionary* BrotliSharedDictionaryCreateInstance(\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);\n\n/**\n * Deinitializes and frees ::BrotliSharedDictionary instance.\n *\n * @param dict shared dictionary instance to be cleaned up and deallocated\n */\nBROTLI_COMMON_API void BrotliSharedDictionaryDestroyInstance(\n    BrotliSharedDictionary* dict);\n\n/**\n * Attaches dictionary to a given instance of ::BrotliSharedDictionary.\n *\n * Dictionary to be attached is represented in a serialized format as a region\n * of memory.\n *\n * Provided data it partially referenced by a resulting (compound) dictionary,\n * and should be kept untouched, while at least one compound dictionary uses it.\n * This way memory overhead is kept minimal by the cost of additional resource\n * management.\n *\n * @param dict dictionary to extend\n * @param type type of dictionary to attach\n * @param data_size size of @p data\n * @param data serialized dictionary of type @p type, with at least @p data_size\n *        addressable bytes\n * @returns ::BROTLI_TRUE if provided dictionary is successfully attached\n * @returns ::BROTLI_FALSE otherwise\n */\nBROTLI_COMMON_API BROTLI_BOOL BrotliSharedDictionaryAttach(\n    BrotliSharedDictionary* dict, BrotliSharedDictionaryType type,\n    size_t data_size, const uint8_t data[BROTLI_ARRAY_PARAM(data_size)]);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_COMMON_SHARED_DICTIONARY_H_ */\n"
  },
  {
    "path": "c/include/brotli/types.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/**\n * @file\n * Common types used in decoder and encoder API.\n */\n\n#ifndef BROTLI_COMMON_TYPES_H_\n#define BROTLI_COMMON_TYPES_H_\n\n#include <stddef.h>  /* IWYU pragma: export */\n\n#if defined(_MSC_VER) && (_MSC_VER < 1600)\ntypedef __int8 int8_t;\ntypedef unsigned __int8 uint8_t;\ntypedef __int16 int16_t;\ntypedef unsigned __int16 uint16_t;\ntypedef __int32 int32_t;\ntypedef unsigned __int32 uint32_t;\ntypedef unsigned __int64 uint64_t;\ntypedef __int64 int64_t;\n#else\n#include <stdint.h>  /* IWYU pragma: export */\n#endif  /* defined(_MSC_VER) && (_MSC_VER < 1600) */\n\n/**\n * A portable @c bool replacement.\n *\n * ::BROTLI_BOOL is a \"documentation\" type: actually it is @c int, but in API it\n * denotes a type, whose only values are ::BROTLI_TRUE and ::BROTLI_FALSE.\n *\n * ::BROTLI_BOOL values passed to Brotli should either be ::BROTLI_TRUE or\n * ::BROTLI_FALSE, or be a result of ::TO_BROTLI_BOOL macros.\n *\n * ::BROTLI_BOOL values returned by Brotli should not be tested for equality\n * with @c true, @c false, ::BROTLI_TRUE, ::BROTLI_FALSE, but rather should be\n * evaluated, for example: @code{.cpp}\n * if (SomeBrotliFunction(encoder, BROTLI_TRUE) &&\n *     !OtherBrotliFunction(decoder, BROTLI_FALSE)) {\n *   bool x = !!YetAnotherBrotliFunction(encoder, TO_BROLTI_BOOL(2 * 2 == 4));\n *   DoSomething(x);\n * }\n * @endcode\n */\n#define BROTLI_BOOL int\n/** Portable @c true replacement. */\n#define BROTLI_TRUE 1\n/** Portable @c false replacement. */\n#define BROTLI_FALSE 0\n/** @c bool to ::BROTLI_BOOL conversion macros. */\n#define TO_BROTLI_BOOL(X) (!!(X) ? BROTLI_TRUE : BROTLI_FALSE)\n\n#define BROTLI_MAKE_UINT64_T(high, low) ((((uint64_t)(high)) << 32) | low)\n\n#define BROTLI_UINT32_MAX (~((uint32_t)0))\n#define BROTLI_SIZE_MAX (~((size_t)0))\n\n/**\n * Allocating function pointer type.\n *\n * @param opaque custom memory manager handle provided by client\n * @param size requested memory region size; can not be @c 0\n * @returns @c 0 in the case of failure\n * @returns a valid pointer to a memory region of at least @p size bytes\n *          long otherwise\n */\ntypedef void* (*brotli_alloc_func)(void* opaque, size_t size);\n\n/**\n * Deallocating function pointer type.\n *\n * This function @b SHOULD do nothing if @p address is @c 0.\n *\n * @param opaque custom memory manager handle provided by client\n * @param address memory region pointer returned by ::brotli_alloc_func, or @c 0\n */\ntypedef void (*brotli_free_func)(void* opaque, void* address);\n\n#endif  /* BROTLI_COMMON_TYPES_H_ */\n"
  },
  {
    "path": "c/tools/brotli.c",
    "content": "/* Copyright 2014 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Command line interface for Brotli library. */\n\n/* Mute strerror/strcpy warnings. */\n#include <brotli/shared_dictionary.h>\n#if !defined(_CRT_SECURE_NO_WARNINGS)\n#define _CRT_SECURE_NO_WARNINGS\n#endif\n\n#include <errno.h>\n#include <fcntl.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <sys/stat.h>\n#include <sys/types.h>\n#include <time.h>\n\n#include <brotli/types.h>\n#include \"../common/constants.h\"\n#include \"../common/version.h\"\n#include <brotli/decode.h>\n#include <brotli/encode.h>\n\n#if defined(_WIN32)\n#include <io.h>\n#include <share.h>\n#include <sys/utime.h>\n\n#define MAKE_BINARY(FILENO) (_setmode((FILENO), _O_BINARY), (FILENO))\n\n#if !defined(__MINGW32__)\n#define STDIN_FILENO _fileno(stdin)\n#define STDOUT_FILENO _fileno(stdout)\n#define S_IRUSR S_IREAD\n#define S_IWUSR S_IWRITE\n#endif\n\n#define fdopen _fdopen\n#define isatty _isatty\n#define unlink _unlink\n#define utimbuf _utimbuf\n#define utime _utime\n\n#define fopen ms_fopen\n#define open ms_open\n\n#define chmod(F, P) (0)\n#define chown(F, O, G) (0)\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1400)\n#define fseek _fseeki64\n#define ftell _ftelli64\n#endif\n\nstatic FILE* ms_fopen(const char* filename, const char* mode) {\n  FILE* result = 0;\n  fopen_s(&result, filename, mode);\n  return result;\n}\n\nstatic int ms_open(const char* filename, int oflag, int pmode) {\n  int result = -1;\n  _sopen_s(&result, filename, oflag | O_BINARY, _SH_DENYNO, pmode);\n  return result;\n}\n#else  /* !defined(_WIN32) */\n#include <unistd.h>\n#include <utime.h>\n#define MAKE_BINARY(FILENO) (FILENO)\n#endif  /* defined(_WIN32) */\n\n#if defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200809L)\n#define HAVE_UTIMENSAT 1\n#elif defined(_ATFILE_SOURCE)\n#define HAVE_UTIMENSAT 1\n#else\n#define HAVE_UTIMENSAT 0\n#endif\n\n#if HAVE_UTIMENSAT\n#if defined(__APPLE__)\n#define ATIME_NSEC(S) ((S)->st_atimespec.tv_nsec)\n#define MTIME_NSEC(S) ((S)->st_mtimespec.tv_nsec)\n#else  /* defined(__APPLE__) */\n#define ATIME_NSEC(S) ((S)->st_atim.tv_nsec)\n#define MTIME_NSEC(S) ((S)->st_mtim.tv_nsec)\n#endif\n#endif  /* HAVE_UTIMENSAT */\n\ntypedef enum {\n  COMMAND_COMPRESS,\n  COMMAND_DECOMPRESS,\n  COMMAND_HELP,\n  COMMAND_INVALID,\n  COMMAND_TEST_INTEGRITY,\n  COMMAND_NOOP,\n  COMMAND_VERSION\n} Command;\n\ntypedef enum {\n  COMMENT_INIT,\n  COMMENT_READ,\n  COMMENT_OK,\n  COMMENT_BAD,\n} CommentState;\n\n#define DEFAULT_LGWIN 24\n#define DEFAULT_SUFFIX \".br\"\n#define MAX_OPTIONS 24\n#define MAX_COMMENT_LEN 80\n\ntypedef struct {\n  /* Parameters */\n  int quality;\n  int lgwin;\n  int verbosity;\n  BROTLI_BOOL force_overwrite;\n  BROTLI_BOOL junk_source;\n  BROTLI_BOOL reject_uncompressible;\n  BROTLI_BOOL copy_stat;\n  BROTLI_BOOL write_to_stdout;\n  BROTLI_BOOL test_integrity;\n  BROTLI_BOOL decompress;\n  BROTLI_BOOL large_window;\n  BROTLI_BOOL allow_concatenated;\n  const char* output_path;\n  const char* dictionary_path;\n  const char* suffix;\n  uint8_t comment[MAX_COMMENT_LEN];\n  size_t comment_len;\n  size_t comment_pos;\n  CommentState comment_state;\n  int not_input_indices[MAX_OPTIONS];\n  size_t longest_path_len;\n  size_t input_count;\n\n  /* Inner state */\n  int argc;\n  char** argv;\n  uint8_t* dictionary;\n  size_t dictionary_size;\n  BrotliEncoderPreparedDictionary* prepared_dictionary;\n  BrotliDecoderState* decoder;\n  char* modified_path;  /* Storage for path with appended / cut suffix */\n  int iterator;\n  int ignore;\n  BROTLI_BOOL iterator_error;\n  uint8_t* buffer;\n  uint8_t* input;\n  uint8_t* output;\n  const char* current_input_path;\n  const char* current_output_path;\n  int64_t input_file_length;  /* -1, if impossible to calculate */\n  FILE* fin;\n  FILE* fout;\n\n  /* I/O buffers */\n  size_t available_in;\n  const uint8_t* next_in;\n  size_t available_out;\n  uint8_t* next_out;\n\n  /* Reporting */\n  /* size_t would be large enough,\n     until 4GiB+ files are compressed / decompressed on 32-bit CPUs. */\n  size_t total_in;\n  size_t total_out;\n  clock_t start_time;\n  clock_t end_time;\n} Context;\n\n/* Parse base 64 encoded string to buffer. Not performance-centric.\n   |out_len| as input is buffer size; |out_len| as output is decoded length.\n   Returns BROTLI_FALSE if either input is not (relaxed) base 64 conformant,\n   or output does not fit buffer. */\nstatic BROTLI_BOOL ParseBase64(const char* str, uint8_t* out, size_t* out_len) {\n  size_t in_len = strlen(str);\n  size_t max_out_len = *out_len;\n  size_t i;\n  size_t bit_count = 0;\n  uint32_t bits = 0;\n  size_t padding_count = 0;\n  size_t octet_count = 0;\n  for (i = 0; i < in_len; ++i) {\n    char c = str[i];\n    int sextet = 0;\n    if (c == 9 || c == 10 || c == 13 || c == ' ') {\n      continue;\n    }\n    if (c == '=') {\n      padding_count++;\n      continue;\n    }\n    if (padding_count) return BROTLI_FALSE;\n    if (c == '+' || c == '-') {\n      sextet = 62;\n    } else if (c == '/' || c == '_') {\n      sextet = 63;\n    } else if (c >= 'A' && c <= 'Z') {\n      sextet = c - 'A';\n    } else if (c >= 'a' && c <= 'z') {\n      sextet = c - 'a' + 26;\n    } else if (c >= '0' && c <= '9') {\n      sextet = c - '0' + 52;\n    } else {\n      return BROTLI_FALSE;\n    }\n    bits = (bits << 6) | (uint32_t)sextet;\n    bit_count += 6;\n    if (bit_count >= 8) {\n      if (octet_count == max_out_len) return BROTLI_FALSE;\n      bit_count -= 8;\n      out[octet_count++] = (bits >> bit_count) & 0xFF;\n    }\n  }\n  if (padding_count > 2) return BROTLI_FALSE;\n  *out_len = octet_count;\n  return BROTLI_TRUE;\n}\n\n/* Parse up to 5 decimal digits. */\nstatic BROTLI_BOOL ParseInt(const char* s, int low, int high, int* result) {\n  int value = 0;\n  int i;\n  for (i = 0; i < 5; ++i) {\n    char c = s[i];\n    if (c == 0) break;\n    if (s[i] < '0' || s[i] > '9') return BROTLI_FALSE;\n    value = (10 * value) + (c - '0');\n  }\n  if (i == 0) return BROTLI_FALSE;\n  if (i > 1 && s[0] == '0') return BROTLI_FALSE;\n  if (s[i] != 0) return BROTLI_FALSE;\n  if (value < low || value > high) return BROTLI_FALSE;\n  *result = value;\n  return BROTLI_TRUE;\n}\n\n/* Returns \"base file name\" or its tail, if it contains '/' or '\\'. */\nstatic const char* FileName(const char* path) {\n  const char* separator_position = strrchr(path, '/');\n  if (separator_position) path = separator_position + 1;\n  separator_position = strrchr(path, '\\\\');\n  if (separator_position) path = separator_position + 1;\n  return path;\n}\n\n/* Detect if the program name is a special alias that infers a command type. */\nstatic BROTLI_BOOL CheckAlias(const char* name, const char* alias) {\n  /* TODO: cast name to lower case? */\n  size_t alias_len = strlen(alias);\n  name = FileName(name);\n  /* Partial comparison. On Windows there could be \".exe\" suffix. */\n  if (strncmp(name, alias, alias_len) == 0) {\n    char terminator = name[alias_len];\n    if (terminator == 0 || terminator == '.') return BROTLI_TRUE;\n  }\n  return BROTLI_FALSE;\n}\n\nstatic Command ParseParams(Context* params) {\n  int argc = params->argc;\n  char** argv = params->argv;\n  int i;\n  int next_option_index = 0;\n  size_t input_count = 0;\n  size_t longest_path_len = 1;\n  BROTLI_BOOL command_set = BROTLI_FALSE;\n  BROTLI_BOOL quality_set = BROTLI_FALSE;\n  BROTLI_BOOL output_set = BROTLI_FALSE;\n  BROTLI_BOOL keep_set = BROTLI_FALSE;\n  BROTLI_BOOL squash_set = BROTLI_FALSE;\n  BROTLI_BOOL lgwin_set = BROTLI_FALSE;\n  BROTLI_BOOL suffix_set = BROTLI_FALSE;\n  BROTLI_BOOL after_dash_dash = BROTLI_FALSE;\n  BROTLI_BOOL comment_set = BROTLI_FALSE;\n  BROTLI_BOOL concatenated_set = BROTLI_FALSE;\n  Command command = COMMAND_COMPRESS;\n\n  if (CheckAlias(argv[0], \"brcat\")) {\n    command_set = BROTLI_TRUE;\n    command = COMMAND_DECOMPRESS;\n    concatenated_set = BROTLI_TRUE;\n    params->allow_concatenated = BROTLI_TRUE;\n    output_set = BROTLI_TRUE;\n    params->write_to_stdout = BROTLI_TRUE;\n  } else if (CheckAlias(argv[0], \"unbrotli\")) {\n    command_set = BROTLI_TRUE;\n    command = COMMAND_DECOMPRESS;\n  }\n\n  for (i = 1; i < argc; ++i) {\n    const char* arg = argv[i];\n    /* C99 5.1.2.2.1: \"members argv[0] through argv[argc-1] inclusive shall\n       contain pointers to strings\"; NULL and 0-length are not forbidden. */\n    size_t arg_len = arg ? strlen(arg) : 0;\n\n    if (arg_len == 0) {\n      params->not_input_indices[next_option_index++] = i;\n      continue;\n    }\n\n    /* Too many options. The expected longest option list is:\n       \"-q 0 -w 10 -o f -D d -S b -d -f -k -n -v -K --\", i.e. 17 items in total.\n       This check is an additional guard that is never triggered, but provides\n       a guard for future changes. */\n    if (next_option_index > (MAX_OPTIONS - 2)) {\n      fprintf(stderr, \"too many options passed\\n\");\n      return COMMAND_INVALID;\n    }\n\n    /* Input file entry. */\n    if (after_dash_dash || arg[0] != '-' || arg_len == 1) {\n      input_count++;\n      if (longest_path_len < arg_len) longest_path_len = arg_len;\n      continue;\n    }\n\n    /* Not a file entry. */\n    params->not_input_indices[next_option_index++] = i;\n\n    /* '--' entry stop parsing arguments. */\n    if (arg_len == 2 && arg[1] == '-') {\n      after_dash_dash = BROTLI_TRUE;\n      continue;\n    }\n\n    /* Simple / coalesced options. */\n    if (arg[1] != '-') {\n      size_t j;\n      for (j = 1; j < arg_len; ++j) {\n        char c = arg[j];\n        if (c >= '0' && c <= '9') {\n          if (quality_set) {\n            fprintf(stderr, \"quality already set\\n\");\n            return COMMAND_INVALID;\n          }\n          quality_set = BROTLI_TRUE;\n          params->quality = c - '0';\n          continue;\n        } else if (c == 'c') {\n          if (output_set) {\n            fprintf(stderr, \"write to standard output already set\\n\");\n            return COMMAND_INVALID;\n          }\n          output_set = BROTLI_TRUE;\n          params->write_to_stdout = BROTLI_TRUE;\n          continue;\n        } else if (c == 'd') {\n          if (command_set) {\n            fprintf(stderr, \"command already set when parsing -d\\n\");\n            return COMMAND_INVALID;\n          }\n          command_set = BROTLI_TRUE;\n          command = COMMAND_DECOMPRESS;\n          continue;\n        } else if (c == 'f') {\n          if (params->force_overwrite) {\n            fprintf(stderr, \"force output overwrite already set\\n\");\n            return COMMAND_INVALID;\n          }\n          params->force_overwrite = BROTLI_TRUE;\n          continue;\n        } else if (c == 'h') {\n          /* Don't parse further. */\n          return COMMAND_HELP;\n        } else if (c == 'j' || c == 'k') {\n          if (keep_set) {\n            fprintf(stderr, \"argument --rm / -j or --keep / -k already set\\n\");\n            return COMMAND_INVALID;\n          }\n          keep_set = BROTLI_TRUE;\n          params->junk_source = TO_BROTLI_BOOL(c == 'j');\n          continue;\n        } else if (c == 'n') {\n          if (!params->copy_stat) {\n            fprintf(stderr, \"argument --no-copy-stat / -n already set\\n\");\n            return COMMAND_INVALID;\n          }\n          params->copy_stat = BROTLI_FALSE;\n          continue;\n        } else if (c == 's') {\n          if (squash_set) {\n            fprintf(stderr, \"argument --squash / -s already set\\n\");\n            return COMMAND_INVALID;\n          }\n          squash_set = BROTLI_TRUE;\n          params->reject_uncompressible = BROTLI_TRUE;\n          continue;\n        } else if (c == 't') {\n          if (command_set) {\n            fprintf(stderr, \"command already set when parsing -t\\n\");\n            return COMMAND_INVALID;\n          }\n          command_set = BROTLI_TRUE;\n          command = COMMAND_TEST_INTEGRITY;\n          continue;\n        } else if (c == 'v') {\n          if (params->verbosity > 0) {\n            fprintf(stderr, \"argument --verbose / -v already set\\n\");\n            return COMMAND_INVALID;\n          }\n          params->verbosity = 1;\n          continue;\n        } else if (c == 'K') {\n          if (concatenated_set) {\n            fprintf(stderr, \"argument -K / --concatenated already set\\n\");\n            return COMMAND_INVALID;\n          }\n          concatenated_set = BROTLI_TRUE;\n          params->allow_concatenated = BROTLI_TRUE;\n          continue;\n        } else if (c == 'V') {\n          /* Don't parse further. */\n          return COMMAND_VERSION;\n        } else if (c == 'Z') {\n          if (quality_set) {\n            fprintf(stderr, \"quality already set\\n\");\n            return COMMAND_INVALID;\n          }\n          quality_set = BROTLI_TRUE;\n          params->quality = 11;\n          continue;\n        }\n        /* o/q/w/C/D/S with parameter is expected */\n        if (c != 'o' && c != 'q' && c != 'w' && c != 'C' && c != 'D' &&\n            c != 'S') {\n          fprintf(stderr, \"invalid argument -%c\\n\", c);\n          return COMMAND_INVALID;\n        }\n        if (j + 1 != arg_len) {\n          fprintf(stderr, \"expected parameter for argument -%c\\n\", c);\n          return COMMAND_INVALID;\n        }\n        i++;\n        if (i == argc || !argv[i] || argv[i][0] == 0) {\n          fprintf(stderr, \"expected parameter for argument -%c\\n\", c);\n          return COMMAND_INVALID;\n        }\n        params->not_input_indices[next_option_index++] = i;\n        if (c == 'o') {\n          if (output_set) {\n            fprintf(stderr, \"write to standard output already set (-o)\\n\");\n            return COMMAND_INVALID;\n          }\n          params->output_path = argv[i];\n        } else if (c == 'q') {\n          if (quality_set) {\n            fprintf(stderr, \"quality already set\\n\");\n            return COMMAND_INVALID;\n          }\n          quality_set = ParseInt(argv[i], BROTLI_MIN_QUALITY,\n                                 BROTLI_MAX_QUALITY, &params->quality);\n          if (!quality_set) {\n            fprintf(stderr, \"error parsing quality value [%s]\\n\", argv[i]);\n            return COMMAND_INVALID;\n          }\n        } else if (c == 'w') {\n          if (lgwin_set) {\n            fprintf(stderr, \"lgwin parameter already set\\n\");\n            return COMMAND_INVALID;\n          }\n          lgwin_set = ParseInt(argv[i], 0,\n                               BROTLI_MAX_WINDOW_BITS, &params->lgwin);\n          if (!lgwin_set) {\n            fprintf(stderr, \"error parsing lgwin value [%s]\\n\", argv[i]);\n            return COMMAND_INVALID;\n          }\n          if (params->lgwin != 0 && params->lgwin < BROTLI_MIN_WINDOW_BITS) {\n            fprintf(stderr,\n                    \"lgwin parameter (%d) smaller than the minimum (%d)\\n\",\n                    params->lgwin, BROTLI_MIN_WINDOW_BITS);\n            return COMMAND_INVALID;\n          }\n        } else if (c == 'C') {\n          if (comment_set) {\n            fprintf(stderr, \"comment already set\\n\");\n            return COMMAND_INVALID;\n          }\n          params->comment_len = MAX_COMMENT_LEN;\n          if (!ParseBase64(argv[i], params->comment, &params->comment_len)) {\n            fprintf(stderr, \"invalid base64-encoded comment\\n\");\n            return COMMAND_INVALID;\n          }\n          comment_set = BROTLI_TRUE;\n        } else if (c == 'D') {\n          if (params->dictionary_path) {\n            fprintf(stderr, \"dictionary path already set\\n\");\n            return COMMAND_INVALID;\n          }\n          params->dictionary_path = argv[i];\n        } else if (c == 'S') {\n          if (suffix_set) {\n            fprintf(stderr, \"suffix already set\\n\");\n            return COMMAND_INVALID;\n          }\n          suffix_set = BROTLI_TRUE;\n          params->suffix = argv[i];\n        }\n      }\n    } else {  /* Double-dash. */\n      arg = &arg[2];\n      if (strcmp(\"best\", arg) == 0) {\n        if (quality_set) {\n          fprintf(stderr, \"quality already set\\n\");\n          return COMMAND_INVALID;\n        }\n        quality_set = BROTLI_TRUE;\n        params->quality = 11;\n      } else if (strcmp(\"concatenated\", arg) == 0) {\n        if (concatenated_set) {\n          fprintf(stderr, \"argument -K / --concatenated already set\\n\");\n          return COMMAND_INVALID;\n        }\n        concatenated_set = BROTLI_TRUE;\n        params->allow_concatenated = BROTLI_TRUE;\n        continue;\n      } else if (strcmp(\"decompress\", arg) == 0) {\n        if (command_set) {\n          fprintf(stderr, \"command already set when parsing --decompress\\n\");\n          return COMMAND_INVALID;\n        }\n        command_set = BROTLI_TRUE;\n        command = COMMAND_DECOMPRESS;\n      } else if (strcmp(\"force\", arg) == 0) {\n        if (params->force_overwrite) {\n          fprintf(stderr, \"force output overwrite already set\\n\");\n          return COMMAND_INVALID;\n        }\n        params->force_overwrite = BROTLI_TRUE;\n      } else if (strcmp(\"help\", arg) == 0) {\n        /* Don't parse further. */\n        return COMMAND_HELP;\n      } else if (strcmp(\"keep\", arg) == 0) {\n        if (keep_set) {\n          fprintf(stderr, \"argument --rm / -j or --keep / -k already set\\n\");\n          return COMMAND_INVALID;\n        }\n        keep_set = BROTLI_TRUE;\n        params->junk_source = BROTLI_FALSE;\n      } else if (strcmp(\"no-copy-stat\", arg) == 0) {\n        if (!params->copy_stat) {\n          fprintf(stderr, \"argument --no-copy-stat / -n already set\\n\");\n          return COMMAND_INVALID;\n        }\n        params->copy_stat = BROTLI_FALSE;\n      } else if (strcmp(\"rm\", arg) == 0) {\n        if (keep_set) {\n          fprintf(stderr, \"argument --rm / -j or --keep / -k already set\\n\");\n          return COMMAND_INVALID;\n        }\n        keep_set = BROTLI_TRUE;\n        params->junk_source = BROTLI_TRUE;\n      } else if (strcmp(\"squash\", arg) == 0) {\n        if (squash_set) {\n          fprintf(stderr, \"argument --squash / -s already set\\n\");\n          return COMMAND_INVALID;\n        }\n        squash_set = BROTLI_TRUE;\n        params->reject_uncompressible = BROTLI_TRUE;\n        continue;\n      } else if (strcmp(\"stdout\", arg) == 0) {\n        if (output_set) {\n          fprintf(stderr, \"write to standard output already set\\n\");\n          return COMMAND_INVALID;\n        }\n        output_set = BROTLI_TRUE;\n        params->write_to_stdout = BROTLI_TRUE;\n      } else if (strcmp(\"test\", arg) == 0) {\n        if (command_set) {\n          fprintf(stderr, \"command already set when parsing --test\\n\");\n          return COMMAND_INVALID;\n        }\n        command_set = BROTLI_TRUE;\n        command = COMMAND_TEST_INTEGRITY;\n      } else if (strcmp(\"verbose\", arg) == 0) {\n        if (params->verbosity > 0) {\n          fprintf(stderr, \"argument --verbose / -v already set\\n\");\n          return COMMAND_INVALID;\n        }\n        params->verbosity = 1;\n      } else if (strcmp(\"version\", arg) == 0) {\n        /* Don't parse further. */\n        return COMMAND_VERSION;\n      } else {\n        /* key=value */\n        const char* value = strchr(arg, '=');\n        size_t key_len;\n        if (!value || value[1] == 0) {\n          fprintf(stderr, \"must pass the parameter as --%s=value\\n\", arg);\n          return COMMAND_INVALID;\n        }\n        key_len = (size_t)(value - arg);\n        value++;\n        if (strncmp(\"comment\", arg, key_len) == 0) {\n          if (comment_set) {\n            fprintf(stderr, \"comment already set\\n\");\n            return COMMAND_INVALID;\n          }\n          params->comment_len = MAX_COMMENT_LEN;\n          if (!ParseBase64(value, params->comment, &params->comment_len)) {\n            fprintf(stderr, \"invalid base64-encoded comment\\n\");\n            return COMMAND_INVALID;\n          }\n          comment_set = BROTLI_TRUE;\n        } else if (strncmp(\"dictionary\", arg, key_len) == 0) {\n          if (params->dictionary_path) {\n            fprintf(stderr, \"dictionary path already set\\n\");\n            return COMMAND_INVALID;\n          }\n          params->dictionary_path = value;\n        } else if (strncmp(\"lgwin\", arg, key_len) == 0) {\n          if (lgwin_set) {\n            fprintf(stderr, \"lgwin parameter already set\\n\");\n            return COMMAND_INVALID;\n          }\n          lgwin_set = ParseInt(value, 0,\n                               BROTLI_MAX_WINDOW_BITS, &params->lgwin);\n          if (!lgwin_set) {\n            fprintf(stderr, \"error parsing lgwin value [%s]\\n\", value);\n            return COMMAND_INVALID;\n          }\n          if (params->lgwin != 0 && params->lgwin < BROTLI_MIN_WINDOW_BITS) {\n            fprintf(stderr,\n                    \"lgwin parameter (%d) smaller than the minimum (%d)\\n\",\n                    params->lgwin, BROTLI_MIN_WINDOW_BITS);\n            return COMMAND_INVALID;\n          }\n        } else if (strncmp(\"large_window\", arg, key_len) == 0) {\n          /* This option is intentionally not mentioned in help. */\n          if (lgwin_set) {\n            fprintf(stderr, \"lgwin parameter already set\\n\");\n            return COMMAND_INVALID;\n          }\n          lgwin_set = ParseInt(value, 0,\n                               BROTLI_LARGE_MAX_WINDOW_BITS, &params->lgwin);\n          if (!lgwin_set) {\n            fprintf(stderr, \"error parsing lgwin value [%s]\\n\", value);\n            return COMMAND_INVALID;\n          }\n          if (params->lgwin != 0 && params->lgwin < BROTLI_MIN_WINDOW_BITS) {\n            fprintf(stderr,\n                    \"lgwin parameter (%d) smaller than the minimum (%d)\\n\",\n                    params->lgwin, BROTLI_MIN_WINDOW_BITS);\n            return COMMAND_INVALID;\n          }\n        } else if (strncmp(\"output\", arg, key_len) == 0) {\n          if (output_set) {\n            fprintf(stderr,\n                    \"write to standard output already set (--output)\\n\");\n            return COMMAND_INVALID;\n          }\n          params->output_path = value;\n        } else if (strncmp(\"quality\", arg, key_len) == 0) {\n          if (quality_set) {\n            fprintf(stderr, \"quality already set\\n\");\n            return COMMAND_INVALID;\n          }\n          quality_set = ParseInt(value, BROTLI_MIN_QUALITY,\n                                 BROTLI_MAX_QUALITY, &params->quality);\n          if (!quality_set) {\n            fprintf(stderr, \"error parsing quality value [%s]\\n\", value);\n            return COMMAND_INVALID;\n          }\n        } else if (strncmp(\"suffix\", arg, key_len) == 0) {\n          if (suffix_set) {\n            fprintf(stderr, \"suffix already set\\n\");\n            return COMMAND_INVALID;\n          }\n          suffix_set = BROTLI_TRUE;\n          params->suffix = value;\n        } else {\n          fprintf(stderr, \"invalid parameter: [%s]\\n\", arg);\n          return COMMAND_INVALID;\n        }\n      }\n    }\n  }\n\n  params->input_count = input_count;\n  params->longest_path_len = longest_path_len;\n  params->decompress = (command == COMMAND_DECOMPRESS);\n  params->test_integrity = (command == COMMAND_TEST_INTEGRITY);\n\n  if (input_count > 1 && output_set) return COMMAND_INVALID;\n  if (params->test_integrity) {\n    if (params->output_path) return COMMAND_INVALID;\n    if (params->write_to_stdout) return COMMAND_INVALID;\n  }\n  if (params->reject_uncompressible && params->write_to_stdout) {\n    return COMMAND_INVALID;\n  }\n  if (strchr(params->suffix, '/') || strchr(params->suffix, '\\\\')) {\n    return COMMAND_INVALID;\n  }\n  if (!params->decompress && params->allow_concatenated) {\n    return COMMAND_INVALID;\n  }\n  if (params->allow_concatenated && params->comment_len) {\n    return COMMAND_INVALID;\n  }\n\n  return command;\n}\n\nstatic void PrintVersion(void) {\n  int major = BROTLI_VERSION_MAJOR;\n  int minor = BROTLI_VERSION_MINOR;\n  int patch = BROTLI_VERSION_PATCH;\n  fprintf(stdout, \"brotli %d.%d.%d\\n\", major, minor, patch);\n}\n\nstatic void PrintHelp(const char* name, BROTLI_BOOL error) {\n  FILE* media = error ? stderr : stdout;\n  /* String is cut to pieces with length less than 509, to conform C90 spec. */\n  fprintf(media,\n\"Usage: %s [OPTION]... [FILE]...\\n\",\n          name);\n  fprintf(media,\n\"Options:\\n\"\n\"  -#                          compression level (0-9)\\n\"\n\"  -c, --stdout                write on standard output\\n\"\n\"  -d, --decompress            decompress\\n\"\n\"  -f, --force                 force output file overwrite\\n\"\n\"  -h, --help                  display this help and exit\\n\");\n  fprintf(media,\n\"  -j, --rm                    remove source file(s)\\n\"\n\"  -s, --squash                remove destination file if larger than source\\n\"\n\"  -k, --keep                  keep source file(s) (default)\\n\"\n\"  -n, --no-copy-stat          do not copy source file(s) attributes\\n\"\n\"  -o FILE, --output=FILE      output file (only if 1 input file)\\n\");\n  fprintf(media,\n\"  -q NUM, --quality=NUM       compression level (%d-%d)\\n\",\n          BROTLI_MIN_QUALITY, BROTLI_MAX_QUALITY);\n  fprintf(media,\n\"  -t, --test                  test compressed file integrity\\n\"\n\"  -v, --verbose               verbose mode\\n\");\n  fprintf(media,\n\"  -w NUM, --lgwin=NUM         set LZ77 window size (0, %d-%d)\\n\"\n\"                              window size = 2**NUM - 16\\n\"\n\"                              0 lets compressor choose the optimal value\\n\",\n          BROTLI_MIN_WINDOW_BITS, BROTLI_MAX_WINDOW_BITS);\n  fprintf(media,\n\"  --large_window=NUM          use incompatible large-window brotli\\n\"\n\"                              bitstream with window size (0, %d-%d)\\n\"\n\"                              WARNING: this format is not compatible\\n\"\n\"                              with brotli RFC 7932 and may not be\\n\"\n\"                              decodable with regular brotli decoders\\n\",\n          BROTLI_MIN_WINDOW_BITS, BROTLI_LARGE_MAX_WINDOW_BITS);\n  fprintf(media,\n\"  -C B64, --comment=B64       set comment; argument is base64-decoded first;\\n\"\n\"                              (maximal decoded length: %d)\\n\"\n\"                              when decoding: check stream comment;\\n\"\n\"                              when encoding: embed comment (fingerprint)\\n\",\n          MAX_COMMENT_LEN);\n  fprintf(media,\n\"  -D FILE, --dictionary=FILE  use FILE as raw (LZ77) dictionary\\n\"\n\"  -K, --concatenated          allows concatenated brotli streams as input\\n\");\n  fprintf(media,\n\"  -S SUF, --suffix=SUF        output file suffix (default:'%s')\\n\",\n          DEFAULT_SUFFIX);\n  fprintf(media,\n\"  -V, --version               display version and exit\\n\"\n\"  -Z, --best                  use best compression level (11) (default)\\n\"\n\"Simple options could be coalesced, i.e. '-9kf' is equivalent to '-9 -k -f'.\\n\"\n\"With no FILE, or when FILE is -, read standard input.\\n\"\n\"All arguments after '--' are treated as files.\\n\");\n}\n\nstatic const char* PrintablePath(const char* path) {\n  return path ? path : \"con\";\n}\n\nstatic BROTLI_BOOL OpenInputFile(const char* input_path, FILE** f) {\n  *f = NULL;\n  if (!input_path) {\n    *f = fdopen(MAKE_BINARY(STDIN_FILENO), \"rb\");\n    return BROTLI_TRUE;\n  }\n  *f = fopen(input_path, \"rb\");\n  if (!*f) {\n    fprintf(stderr, \"failed to open input file [%s]: %s\\n\",\n            PrintablePath(input_path), strerror(errno));\n    return BROTLI_FALSE;\n  }\n  return BROTLI_TRUE;\n}\n\nstatic BROTLI_BOOL OpenOutputFile(const char* output_path, FILE** f,\n                                  BROTLI_BOOL force) {\n  int fd;\n  *f = NULL;\n  if (!output_path) {\n    *f = fdopen(MAKE_BINARY(STDOUT_FILENO), \"wb\");\n    return BROTLI_TRUE;\n  }\n  fd = open(output_path, O_CREAT | (force ? 0 : O_EXCL) | O_WRONLY | O_TRUNC,\n            S_IRUSR | S_IWUSR);\n  if (fd < 0) {\n    fprintf(stderr, \"failed to open output file [%s]: %s\\n\",\n            PrintablePath(output_path), strerror(errno));\n    return BROTLI_FALSE;\n  }\n  *f = fdopen(fd, \"wb\");\n  if (!*f) {\n    fprintf(stderr, \"failed to open output file [%s]: %s\\n\",\n            PrintablePath(output_path), strerror(errno));\n    return BROTLI_FALSE;\n  }\n  return BROTLI_TRUE;\n}\n\nstatic int64_t FileSize(const char* path) {\n  FILE* f = fopen(path, \"rb\");\n  int64_t retval;\n  if (f == NULL) {\n    return -1;\n  }\n  if (fseek(f, 0L, SEEK_END) != 0) {\n    fclose(f);\n    return -1;\n  }\n  retval = ftell(f);\n  if (fclose(f) != 0) {\n    return -1;\n  }\n  return retval;\n}\n\nstatic int CopyTimeStat(const struct stat* statbuf, const char* output_path) {\n#if HAVE_UTIMENSAT\n  struct timespec times[2];\n  times[0].tv_sec = statbuf->st_atime;\n  times[0].tv_nsec = ATIME_NSEC(statbuf);\n  times[1].tv_sec = statbuf->st_mtime;\n  times[1].tv_nsec = MTIME_NSEC(statbuf);\n  return utimensat(AT_FDCWD, output_path, times, AT_SYMLINK_NOFOLLOW);\n#else\n  struct utimbuf times;\n  times.actime = statbuf->st_atime;\n  times.modtime = statbuf->st_mtime;\n  return utime(output_path, &times);\n#endif\n}\n\n/* Copy file times and permissions.\n   TODO(eustas): this is a \"best effort\" implementation; honest cross-platform\n   fully featured implementation is way too hacky; add more hacks by request. */\nstatic void CopyStat(const char* input_path, const char* output_path) {\n  struct stat statbuf;\n  int res;\n  if (input_path == 0 || output_path == 0) {\n    return;\n  }\n  if (stat(input_path, &statbuf) != 0) {\n    return;\n  }\n  res = CopyTimeStat(&statbuf, output_path);\n  res = chmod(output_path, statbuf.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO));\n  if (res != 0) {\n    fprintf(stderr, \"setting access bits failed for [%s]: %s\\n\",\n            PrintablePath(output_path), strerror(errno));\n  }\n  res = chown(output_path, (uid_t)-1, statbuf.st_gid);\n  if (res != 0) {\n    fprintf(stderr, \"setting group failed for [%s]: %s\\n\",\n            PrintablePath(output_path), strerror(errno));\n  }\n  res = chown(output_path, statbuf.st_uid, (gid_t)-1);\n  if (res != 0) {\n    fprintf(stderr, \"setting user failed for [%s]: %s\\n\",\n            PrintablePath(output_path), strerror(errno));\n  }\n}\n\n/* Result ownership is passed to caller.\n   |*dictionary_size| is set to resulting buffer size. */\nstatic BROTLI_BOOL ReadDictionary(Context* context, Command command) {\n  static const int kMaxDictionarySize =\n      BROTLI_MAX_DISTANCE - BROTLI_MAX_BACKWARD_LIMIT(24);\n  FILE* f;\n  int64_t file_size_64;\n  uint8_t* buffer;\n  size_t bytes_read;\n\n  if (context->dictionary_path == NULL) return BROTLI_TRUE;\n  f = fopen(context->dictionary_path, \"rb\");\n  if (f == NULL) {\n    fprintf(stderr, \"failed to open dictionary file [%s]: %s\\n\",\n            PrintablePath(context->dictionary_path), strerror(errno));\n    return BROTLI_FALSE;\n  }\n\n  file_size_64 = FileSize(context->dictionary_path);\n  if (file_size_64 == -1) {\n    fprintf(stderr, \"could not get size of dictionary file [%s]\",\n            PrintablePath(context->dictionary_path));\n    fclose(f);\n    return BROTLI_FALSE;\n  }\n\n  if (file_size_64 > kMaxDictionarySize) {\n    fprintf(stderr, \"dictionary [%s] is larger than maximum allowed: %d\\n\",\n            PrintablePath(context->dictionary_path), kMaxDictionarySize);\n    fclose(f);\n    return BROTLI_FALSE;\n  }\n  context->dictionary_size = (size_t)file_size_64;\n\n  buffer = (uint8_t*)malloc(context->dictionary_size);\n  if (!buffer) {\n    fprintf(stderr, \"could not read dictionary: out of memory\\n\");\n    fclose(f);\n    return BROTLI_FALSE;\n  }\n  bytes_read = fread(buffer, sizeof(uint8_t), context->dictionary_size, f);\n  if (bytes_read != context->dictionary_size) {\n    free(buffer);\n    fprintf(stderr, \"failed to read dictionary [%s]: %s\\n\",\n            PrintablePath(context->dictionary_path), strerror(errno));\n    fclose(f);\n    return BROTLI_FALSE;\n  }\n  fclose(f);\n  context->dictionary = buffer;\n  if (command == COMMAND_COMPRESS) {\n    context->prepared_dictionary = BrotliEncoderPrepareDictionary(\n        BROTLI_SHARED_DICTIONARY_RAW, context->dictionary_size,\n        context->dictionary, BROTLI_MAX_QUALITY, NULL, NULL, NULL);\n    if (context->prepared_dictionary == NULL) {\n      fprintf(stderr, \"failed to prepare dictionary [%s]\\n\",\n              PrintablePath(context->dictionary_path));\n      return BROTLI_FALSE;\n    }\n  }\n  return BROTLI_TRUE;\n}\n\nstatic BROTLI_BOOL NextFile(Context* context) {\n  const char* arg;\n  size_t arg_len;\n\n  /* Iterator points to last used arg; increment to search for the next one. */\n  context->iterator++;\n\n  context->input_file_length = -1;\n\n  /* No input path; read from console. */\n  if (context->input_count == 0) {\n    if (context->iterator > 1) return BROTLI_FALSE;\n    context->current_input_path = NULL;\n    /* Either write to the specified path, or to console. */\n    context->current_output_path = context->output_path;\n    return BROTLI_TRUE;\n  }\n\n  /* Skip option arguments. */\n  while (context->iterator == context->not_input_indices[context->ignore]) {\n    context->iterator++;\n    context->ignore++;\n  }\n\n  /* All args are scanned already. */\n  if (context->iterator >= context->argc) return BROTLI_FALSE;\n\n  /* Iterator now points to the input file name. */\n  arg = context->argv[context->iterator];\n  arg_len = strlen(arg);\n  /* Read from console. */\n  if (arg_len == 1 && arg[0] == '-') {\n    context->current_input_path = NULL;\n    context->current_output_path = context->output_path;\n    return BROTLI_TRUE;\n  }\n\n  context->current_input_path = arg;\n  context->input_file_length = FileSize(arg);\n  context->current_output_path = context->output_path;\n\n  if (context->output_path) return BROTLI_TRUE;\n  if (context->write_to_stdout) return BROTLI_TRUE;\n\n  strcpy(context->modified_path, arg);\n  context->current_output_path = context->modified_path;\n  /* If output is not specified, input path suffix should match. */\n  if (context->decompress) {\n    size_t suffix_len = strlen(context->suffix);\n    char* name = (char*)FileName(context->modified_path);\n    char* name_suffix;\n    size_t name_len = strlen(name);\n    if (name_len < suffix_len + 1) {\n      fprintf(stderr, \"empty output file name for [%s] input file\\n\",\n              PrintablePath(arg));\n      context->iterator_error = BROTLI_TRUE;\n      return BROTLI_FALSE;\n    }\n    name_suffix = name + name_len - suffix_len;\n    if (strcmp(context->suffix, name_suffix) != 0) {\n      fprintf(stderr, \"input file [%s] suffix mismatch\\n\",\n              PrintablePath(arg));\n      context->iterator_error = BROTLI_TRUE;\n      return BROTLI_FALSE;\n    }\n    name_suffix[0] = 0;\n    return BROTLI_TRUE;\n  } else {\n    strcpy(context->modified_path + arg_len, context->suffix);\n    return BROTLI_TRUE;\n  }\n}\n\nstatic BROTLI_BOOL OpenFiles(Context* context) {\n  BROTLI_BOOL is_ok = OpenInputFile(context->current_input_path, &context->fin);\n  if (!context->test_integrity && is_ok) {\n    is_ok = OpenOutputFile(\n        context->current_output_path, &context->fout, context->force_overwrite);\n  }\n  return is_ok;\n}\n\nstatic BROTLI_BOOL CloseFiles(Context* context, BROTLI_BOOL rm_input,\n                              BROTLI_BOOL rm_output) {\n  BROTLI_BOOL is_ok = BROTLI_TRUE;\n  if (!context->test_integrity && context->fout) {\n    if (fclose(context->fout) != 0) {\n      if (is_ok) {\n        fprintf(stderr, \"fclose failed [%s]: %s\\n\",\n                PrintablePath(context->current_output_path), strerror(errno));\n      }\n      is_ok = BROTLI_FALSE;\n    }\n    if (rm_output && context->current_output_path) {\n      unlink(context->current_output_path);\n    }\n\n    /* TOCTOU violation, but otherwise it is impossible to set file times. */\n    if (!rm_output && is_ok && context->copy_stat) {\n      CopyStat(context->current_input_path, context->current_output_path);\n    }\n  }\n\n  if (context->fin) {\n    if (fclose(context->fin) != 0) {\n      if (is_ok) {\n        fprintf(stderr, \"fclose failed [%s]: %s\\n\",\n                PrintablePath(context->current_input_path), strerror(errno));\n      }\n      is_ok = BROTLI_FALSE;\n    }\n  }\n  if (rm_input && context->current_input_path) {\n    unlink(context->current_input_path);\n  }\n\n  context->fin = NULL;\n  context->fout = NULL;\n\n  return is_ok;\n}\n\nstatic const size_t kFileBufferSize = 1 << 19;\n\nstatic void InitializeBuffers(Context* context) {\n  context->available_in = 0;\n  context->next_in = NULL;\n  context->available_out = kFileBufferSize;\n  context->next_out = context->output;\n  context->total_in = 0;\n  context->total_out = 0;\n  if (context->verbosity > 0) {\n    context->start_time = clock();\n  }\n}\n\n/* This method might give the false-negative result.\n   However, after an empty / incomplete read it should tell the truth. */\nstatic BROTLI_BOOL HasMoreInput(Context* context) {\n  return feof(context->fin) ? BROTLI_FALSE : BROTLI_TRUE;\n}\n\nstatic BROTLI_BOOL ProvideInput(Context* context) {\n  context->available_in =\n      fread(context->input, 1, kFileBufferSize, context->fin);\n  context->total_in += context->available_in;\n  context->next_in = context->input;\n  if (ferror(context->fin)) {\n    fprintf(stderr, \"failed to read input [%s]: %s\\n\",\n            PrintablePath(context->current_input_path), strerror(errno));\n    return BROTLI_FALSE;\n  }\n  return BROTLI_TRUE;\n}\n\n/* Internal: should be used only in Provide-/Flush-Output. */\nstatic BROTLI_BOOL WriteOutput(Context* context) {\n  size_t out_size = (size_t)(context->next_out - context->output);\n  context->total_out += out_size;\n  if (out_size == 0) return BROTLI_TRUE;\n  if (context->test_integrity) return BROTLI_TRUE;\n\n  fwrite(context->output, 1, out_size, context->fout);\n  if (ferror(context->fout)) {\n    fprintf(stderr, \"failed to write output [%s]: %s\\n\",\n            PrintablePath(context->current_output_path), strerror(errno));\n    return BROTLI_FALSE;\n  }\n  return BROTLI_TRUE;\n}\n\nstatic BROTLI_BOOL ProvideOutput(Context* context) {\n  if (!WriteOutput(context)) return BROTLI_FALSE;\n  context->available_out = kFileBufferSize;\n  context->next_out = context->output;\n  return BROTLI_TRUE;\n}\n\nstatic BROTLI_BOOL FlushOutput(Context* context) {\n  if (!WriteOutput(context)) return BROTLI_FALSE;\n  context->available_out = 0;\n  context->next_out = context->output;\n  return BROTLI_TRUE;\n}\n\nstatic void PrintBytes(size_t value) {\n  if (value < 1024) {\n    fprintf(stderr, \"%d B\", (int)value);\n  } else if (value < 1048576) {\n    fprintf(stderr, \"%0.3f KiB\", (double)value / 1024.0);\n  } else if (value < 1073741824) {\n    fprintf(stderr, \"%0.3f MiB\", (double)value / 1048576.0);\n  } else {\n    fprintf(stderr, \"%0.3f GiB\", (double)value / 1073741824.0);\n  }\n}\n\nstatic void PrintFileProcessingProgress(Context* context) {\n  fprintf(stderr, \"[%s]: \", PrintablePath(context->current_input_path));\n  PrintBytes(context->total_in);\n  fprintf(stderr, \" -> \");\n  PrintBytes(context->total_out);\n  fprintf(stderr, \" in %1.2f sec\", (double)(context->end_time - context->start_time) / CLOCKS_PER_SEC);\n}\n\nstatic const char* PrettyDecoderErrorString(BrotliDecoderErrorCode code) {\n  /* \"_ERROR_domain_\" is in only added in newer versions. If CLI is linked\n     against older shared library, return error string as is; result might be\n     a bit confusing, e.g. \"RESERVED\" instead of \"FORMAT_RESERVED\" */\n  const char* prefix = \"_ERROR_\";\n  size_t prefix_len = strlen(prefix);\n  const char* error_str = BrotliDecoderErrorString(code);\n  size_t error_len = strlen(error_str);\n  if (error_len > prefix_len) {\n    if (strncmp(error_str, prefix, prefix_len) == 0) {\n      error_str += prefix_len;\n    }\n  }\n  return error_str;\n}\n\nstatic void OnMetadataStart(void* opaque, size_t size) {\n  Context* context = (Context*) opaque;\n  if (context->comment_state == COMMENT_INIT) {\n    if (context->comment_len != size) {\n      context->comment_state = COMMENT_BAD;\n      return;\n    }\n    context->comment_pos = 0;\n    context->comment_state = COMMENT_READ;\n  }\n}\n\nstatic void OnMetadataChunk(void* opaque, const uint8_t* data, size_t size) {\n  Context* context = (Context*) opaque;\n  if (context->comment_state == COMMENT_READ) {\n    size_t i;\n    for (i = 0; i < size; ++i) {\n      if (context->comment_pos >= context->comment_len) {\n        context->comment_state = COMMENT_BAD;\n        return;\n      }\n      if (context->comment[context->comment_pos++] != data[i]) {\n        context->comment_state = COMMENT_BAD;\n        return;\n      }\n    }\n    if (context->comment_pos == context->comment_len) {\n      context->comment_state = COMMENT_OK;\n    }\n  }\n}\n\nstatic BROTLI_BOOL InitDecoder(Context* context) {\n  context->decoder = BrotliDecoderCreateInstance(NULL, NULL, NULL);\n  if (!context->decoder) {\n    fprintf(stderr, \"out of memory\\n\");\n    return BROTLI_FALSE;\n  }\n  /* This allows decoding \"large-window\" streams. Though it creates\n      fragmentation (new builds decode streams that old builds don't),\n      it is better from used experience perspective. */\n  BrotliDecoderSetParameter(\n      context->decoder, BROTLI_DECODER_PARAM_LARGE_WINDOW, 1u);\n  if (context->dictionary) {\n    BrotliDecoderAttachDictionary(context->decoder,\n        BROTLI_SHARED_DICTIONARY_RAW, context->dictionary_size,\n        context->dictionary);\n  }\n  return BROTLI_TRUE;\n}\n\nstatic BROTLI_BOOL DecompressFile(Context* context) {\n  BrotliDecoderState* s = context->decoder;\n  BrotliDecoderResult result = BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT;\n  if (context->comment_len) {\n    context->comment_state = COMMENT_INIT;\n    BrotliDecoderSetMetadataCallbacks(s, &OnMetadataStart, &OnMetadataChunk,\n        (void*)context);\n  } else {\n    context->comment_state = COMMENT_OK;\n  }\n\n  InitializeBuffers(context);\n  for (;;) {\n    /* Early check */\n    if (context->comment_state == COMMENT_BAD) {\n      fprintf(stderr, \"corrupt input [%s]\\n\",\n              PrintablePath(context->current_input_path));\n      if (context->verbosity > 0) {\n        fprintf(stderr, \"reason: comment mismatch\\n\");\n      }\n      return BROTLI_FALSE;\n    }\n    if (result == BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT) {\n      if (!HasMoreInput(context)) {\n        fprintf(stderr, \"corrupt input [%s]\\n\",\n                PrintablePath(context->current_input_path));\n        if (context->verbosity > 0) {\n          fprintf(stderr, \"reason: truncated input\\n\");\n        }\n        return BROTLI_FALSE;\n      }\n      if (!ProvideInput(context)) return BROTLI_FALSE;\n    } else if (result == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) {\n      if (!ProvideOutput(context)) return BROTLI_FALSE;\n    } else if (result == BROTLI_DECODER_RESULT_SUCCESS) {\n      if (!FlushOutput(context)) return BROTLI_FALSE;\n      BROTLI_BOOL has_more_input = (context->available_in != 0);\n      int extra_char = EOF;\n      if (!has_more_input) {\n        extra_char = fgetc(context->fin);\n        if (extra_char != EOF) {\n          has_more_input = BROTLI_TRUE;\n          context->input[0] = (uint8_t)extra_char;\n          context->next_in = context->input;\n          context->available_in = 1;\n        }\n      }\n      if (has_more_input) {\n        if (context->allow_concatenated) {\n          if (context->verbosity > 0) {\n            fprintf(stderr, \"extra input\\n\");\n          }\n          if (!ProvideOutput(context)) return BROTLI_FALSE;\n          BrotliDecoderDestroyInstance(context->decoder);\n          context->decoder = NULL;\n          if (!InitDecoder(context)) return BROTLI_FALSE;\n          s = context->decoder;\n        } else {\n          fprintf(stderr, \"corrupt input [%s]\\n\",\n                  PrintablePath(context->current_input_path));\n          if (context->verbosity > 0) {\n            fprintf(stderr, \"reason: extra input\\n\");\n          }\n          return BROTLI_FALSE;\n        }\n      } else {\n        if (context->verbosity > 0) {\n          context->end_time = clock();\n          fprintf(stderr, \"Decompressed \");\n          PrintFileProcessingProgress(context);\n          fprintf(stderr, \"\\n\");\n        }\n        /* Final check */\n        if (context->comment_state != COMMENT_OK) {\n          fprintf(stderr, \"corrupt input [%s]\\n\",\n                  PrintablePath(context->current_input_path));\n          if (context->verbosity > 0) {\n            fprintf(stderr, \"reason: comment mismatch\\n\");\n          }\n        }\n        return BROTLI_TRUE;\n      }\n    } else {  /* result == BROTLI_DECODER_RESULT_ERROR */\n      fprintf(stderr, \"corrupt input [%s]\\n\",\n              PrintablePath(context->current_input_path));\n      if (context->verbosity > 0) {\n        BrotliDecoderErrorCode error = BrotliDecoderGetErrorCode(s);\n        const char* error_str = PrettyDecoderErrorString(error);\n        fprintf(stderr, \"reason: %s (%d)\\n\", error_str, error);\n      }\n      return BROTLI_FALSE;\n    }\n\n    result = BrotliDecoderDecompressStream(s, &context->available_in,\n        &context->next_in, &context->available_out, &context->next_out, 0);\n  }\n}\n\nstatic BROTLI_BOOL DecompressFiles(Context* context) {\n  while (NextFile(context)) {\n    BROTLI_BOOL is_ok = BROTLI_TRUE;\n    BROTLI_BOOL rm_input = BROTLI_FALSE;\n    BROTLI_BOOL rm_output = BROTLI_TRUE;\n    if (!InitDecoder(context)) return BROTLI_FALSE;\n    is_ok = OpenFiles(context);\n    if (is_ok && !context->current_input_path &&\n        !context->force_overwrite && isatty(STDIN_FILENO)) {\n      fprintf(stderr, \"Use -h help. Use -f to force input from a terminal.\\n\");\n      is_ok = BROTLI_FALSE;\n    }\n    if (is_ok) is_ok = DecompressFile(context);\n    if (context->decoder) BrotliDecoderDestroyInstance(context->decoder);\n    context->decoder = NULL;\n    rm_output = !is_ok;\n    rm_input = !rm_output && context->junk_source;\n    if (!CloseFiles(context, rm_input, rm_output)) is_ok = BROTLI_FALSE;\n    if (!is_ok) return BROTLI_FALSE;\n  }\n  return BROTLI_TRUE;\n}\n\nstatic BROTLI_BOOL CompressFile(Context* context, BrotliEncoderState* s) {\n  BROTLI_BOOL is_eof = BROTLI_FALSE;\n  BROTLI_BOOL prologue = !!context->comment_len;\n  InitializeBuffers(context);\n  for (;;) {\n    if (context->available_in == 0 && !is_eof) {\n      if (!ProvideInput(context)) return BROTLI_FALSE;\n      is_eof = !HasMoreInput(context);\n    }\n\n    if (prologue) {\n      prologue = BROTLI_FALSE;\n      const uint8_t* next_meta = context->comment;\n      size_t available_meta = context->comment_len;\n      if (!BrotliEncoderCompressStream(s,\n          BROTLI_OPERATION_EMIT_METADATA,\n          &available_meta, &next_meta,\n          &context->available_out, &context->next_out, NULL)) {\n        /* Should detect OOM? */\n        fprintf(stderr, \"failed to emit metadata [%s]\\n\",\n                PrintablePath(context->current_input_path));\n        return BROTLI_FALSE;\n      }\n      if (available_meta != 0) {\n        fprintf(stderr, \"failed to emit metadata [%s]\\n\",\n                PrintablePath(context->current_input_path));\n        return BROTLI_FALSE;\n      }\n    } else {\n      if (!BrotliEncoderCompressStream(s,\n          is_eof ? BROTLI_OPERATION_FINISH : BROTLI_OPERATION_PROCESS,\n          &context->available_in, &context->next_in,\n          &context->available_out, &context->next_out, NULL)) {\n        /* Should detect OOM? */\n        fprintf(stderr, \"failed to compress data [%s]\\n\",\n                PrintablePath(context->current_input_path));\n        return BROTLI_FALSE;\n      }\n    }\n\n    if (context->available_out == 0) {\n      if (!ProvideOutput(context)) return BROTLI_FALSE;\n    }\n\n    if (BrotliEncoderIsFinished(s)) {\n      if (!FlushOutput(context)) return BROTLI_FALSE;\n      if (context->verbosity > 0) {\n        context->end_time = clock();\n        fprintf(stderr, \"Compressed \");\n        PrintFileProcessingProgress(context);\n        fprintf(stderr, \"\\n\");\n      }\n      return BROTLI_TRUE;\n    }\n  }\n}\n\nstatic BROTLI_BOOL CompressFiles(Context* context) {\n  while (NextFile(context)) {\n    BROTLI_BOOL is_ok = BROTLI_TRUE;\n    BROTLI_BOOL rm_input = BROTLI_FALSE;\n    BROTLI_BOOL rm_output = BROTLI_TRUE;\n    BrotliEncoderState* s = BrotliEncoderCreateInstance(NULL, NULL, NULL);\n    if (!s) {\n      fprintf(stderr, \"out of memory\\n\");\n      return BROTLI_FALSE;\n    }\n    BrotliEncoderSetParameter(s,\n        BROTLI_PARAM_QUALITY, (uint32_t)context->quality);\n    if (context->lgwin > 0) {\n      /* Specified by user. */\n      /* Do not enable \"large-window\" extension, if not required. */\n      if (context->lgwin > BROTLI_MAX_WINDOW_BITS) {\n        BrotliEncoderSetParameter(s, BROTLI_PARAM_LARGE_WINDOW, 1u);\n      }\n      BrotliEncoderSetParameter(s,\n          BROTLI_PARAM_LGWIN, (uint32_t)context->lgwin);\n    } else {\n      /* 0, or not specified by user; could be chosen by compressor. */\n      uint32_t lgwin = DEFAULT_LGWIN;\n      /* Use file size to limit lgwin. */\n      if (context->input_file_length >= 0) {\n        lgwin = BROTLI_MIN_WINDOW_BITS;\n        while (BROTLI_MAX_BACKWARD_LIMIT(lgwin) <\n               (uint64_t)context->input_file_length) {\n          lgwin++;\n          if (lgwin == BROTLI_MAX_WINDOW_BITS) break;\n        }\n      }\n      BrotliEncoderSetParameter(s, BROTLI_PARAM_LGWIN, lgwin);\n    }\n    if (context->input_file_length > 0) {\n      uint32_t size_hint = context->input_file_length < (1 << 30) ?\n          (uint32_t)context->input_file_length : (1u << 30);\n      BrotliEncoderSetParameter(s, BROTLI_PARAM_SIZE_HINT, size_hint);\n    }\n    if (context->dictionary) {\n      BrotliEncoderAttachPreparedDictionary(s, context->prepared_dictionary);\n    }\n    is_ok = OpenFiles(context);\n    if (is_ok && !context->current_output_path &&\n        !context->force_overwrite && isatty(STDOUT_FILENO)) {\n      fprintf(stderr, \"Use -h help. Use -f to force output to a terminal.\\n\");\n      is_ok = BROTLI_FALSE;\n    }\n    if (is_ok) is_ok = CompressFile(context, s);\n    BrotliEncoderDestroyInstance(s);\n    rm_output = !is_ok;\n    if (is_ok && context->reject_uncompressible) {\n      if (context->total_out >= context->total_in) {\n        rm_output = BROTLI_TRUE;\n        if (context->verbosity > 0) {\n          fprintf(stderr, \"Output is larger than input\\n\");\n        }\n      }\n    }\n    rm_input = !rm_output && context->junk_source;\n    if (!CloseFiles(context, rm_input, rm_output)) is_ok = BROTLI_FALSE;\n    if (!is_ok) return BROTLI_FALSE;\n  }\n  return BROTLI_TRUE;\n}\n\nint main(int argc, char** argv) {\n  Command command;\n  Context context;\n  BROTLI_BOOL is_ok = BROTLI_TRUE;\n  int i;\n\n  context.quality = 11;\n  context.lgwin = -1;\n  context.verbosity = 0;\n  context.comment_len = 0;\n  context.force_overwrite = BROTLI_FALSE;\n  context.junk_source = BROTLI_FALSE;\n  context.reject_uncompressible = BROTLI_FALSE;\n  context.copy_stat = BROTLI_TRUE;\n  context.test_integrity = BROTLI_FALSE;\n  context.write_to_stdout = BROTLI_FALSE;\n  context.decompress = BROTLI_FALSE;\n  context.large_window = BROTLI_FALSE;\n  context.allow_concatenated = BROTLI_FALSE;\n  context.output_path = NULL;\n  context.dictionary_path = NULL;\n  context.suffix = DEFAULT_SUFFIX;\n  for (i = 0; i < MAX_OPTIONS; ++i) context.not_input_indices[i] = 0;\n  context.longest_path_len = 1;\n  context.input_count = 0;\n\n  context.argc = argc;\n  context.argv = argv;\n  context.dictionary = NULL;\n  context.dictionary_size = 0;\n  context.decoder = NULL;\n  context.prepared_dictionary = NULL;\n  context.modified_path = NULL;\n  context.iterator = 0;\n  context.ignore = 0;\n  context.iterator_error = BROTLI_FALSE;\n  context.buffer = NULL;\n  context.current_input_path = NULL;\n  context.current_output_path = NULL;\n  context.fin = NULL;\n  context.fout = NULL;\n\n  command = ParseParams(&context);\n\n  if (command == COMMAND_COMPRESS || command == COMMAND_DECOMPRESS ||\n      command == COMMAND_TEST_INTEGRITY) {\n    if (!ReadDictionary(&context, command)) is_ok = BROTLI_FALSE;\n    if (is_ok) {\n      size_t modified_path_len =\n          context.longest_path_len + strlen(context.suffix) + 1;\n      context.modified_path = (char*)malloc(modified_path_len);\n      context.buffer = (uint8_t*)malloc(kFileBufferSize * 2);\n      if (!context.modified_path || !context.buffer) {\n        fprintf(stderr, \"out of memory\\n\");\n        is_ok = BROTLI_FALSE;\n      } else {\n        context.input = context.buffer;\n        context.output = context.buffer + kFileBufferSize;\n      }\n    }\n  }\n\n  if (!is_ok) command = COMMAND_NOOP;\n\n  switch (command) {\n    case COMMAND_NOOP:\n      break;\n\n    case COMMAND_VERSION:\n      PrintVersion();\n      break;\n\n    case COMMAND_COMPRESS:\n      is_ok = CompressFiles(&context);\n      break;\n\n    case COMMAND_DECOMPRESS:\n    case COMMAND_TEST_INTEGRITY:\n      is_ok = DecompressFiles(&context);\n      break;\n\n    case COMMAND_HELP:\n    case COMMAND_INVALID:\n    default:\n      is_ok = (command == COMMAND_HELP);\n      PrintHelp(FileName(argv[0]), is_ok);\n      break;\n  }\n\n  if (context.iterator_error) is_ok = BROTLI_FALSE;\n\n  BrotliEncoderDestroyPreparedDictionary(context.prepared_dictionary);\n  free(context.dictionary);\n  free(context.modified_path);\n  free(context.buffer);\n\n  if (!is_ok) exit(1);\n  return 0;\n}\n"
  },
  {
    "path": "c/tools/brotli.md",
    "content": "# NAME\n\nbrotli(1) -- brotli, brcat, unbrotli - compress or decompress files\n\n# SYNOPSIS\n\n`brotli` [*OPTION|FILE*]...\n\n`brcat` is equivalent to `brotli --decompress --concatenated --stdout`\n\n`unbrotli` is equivalent to `brotli --decompress`\n\n# DESCRIPTION\n\n`brotli` is a generic-purpose lossless compression algorithm that compresses\ndata using a combination of a modern variant of the **LZ77** algorithm, Huffman\ncoding and 2-nd order context modeling, with a compression ratio comparable to\nthe best currently available general-purpose compression methods. It is similar\nin speed with deflate but offers more dense compression.\n\n`brotli` command line syntax similar to `gzip (1)` and `zstd (1)`.\nUnlike `gzip (1)`, source files are preserved by default. It is possible to\nremove them after processing by using the `--rm` _option_.\n\nArguments that look like \"`--name`\" or \"`--name=value`\" are _options_. Every\n_option_ has a short form \"`-x`\" or \"`-x value`\". Multiple short form _options_\ncould be coalesced:\n\n* \"`--decompress --stdout --suffix=.b`\" works the same as\n* \"`-d -s -S .b`\" and\n* \"`-dsS .b`\"\n\n`brotli` has 3 operation modes:\n\n* default mode is compression;\n* `--decompress` option activates decompression mode;\n* `--test` option switches to integrity test mode; this option is equivalent to\n  \"`--decompress --stdout`\" except that the decompressed data is discarded\n  instead of being written to standard output.\n\nEvery non-option argument is a _file_ entry. If no _files_ are given or _file_\nis \"`-`\", `brotli` reads from standard input. All arguments after \"`--`\" are\n_file_ entries.\n\nUnless `--stdout` or `--output` is specified, _files_ are written to a new file\nwhose name is derived from the source _file_ name:\n\n* when compressing, a suffix is appended to the source filename to\n  get the target filename\n* when decompressing, a suffix is removed from the source filename to\n  get the target filename\n\nDefault suffix is `.br`, but it could be specified with `--suffix` option.\n\nConflicting or duplicate _options_ are not allowed.\n\n# OPTIONS\n\n* `-#`:\n    compression level (0-9); bigger values cause denser, but slower compression\n* `-c`, `--stdout`:\n    write on standard output\n* `-d`, `--decompress`:\n    decompress mode\n* `-f`, `--force`:\n    force output file overwrite\n* `-h`, `--help`:\n    display this help and exit\n* `-j`, `--rm`:\n    remove source file(s); `gzip (1)`-like behaviour\n* `-k`, `--keep`:\n    keep source file(s); `zstd (1)`-like behaviour\n* `-n`, `--no-copy-stat`:\n    do not copy source file(s) attributes\n* `-o FILE`, `--output=FILE`\n    output file; valid only if there is a single input entry\n* `-q NUM`, `--quality=NUM`:\n    compression level (0-11); bigger values cause denser, but slower compression\n* `-t`, `--test`:\n    test file integrity mode\n* `-v`, `--verbose`:\n    increase output verbosity\n* `-w NUM`, `--lgwin=NUM`:\n    set LZ77 window size (0, 10-24) (default: 24); window size is\n    `(pow(2, NUM) - 16)`; 0 lets compressor decide over the optimal value;\n    bigger windows size improve density; decoder might require up to window size\n    memory to operate\n* `-C B64`, `--comment=B64`:\n    set comment; argument is base64-decoded first;\n    when decoding: check stream comment;\n    when encoding: embed comment (fingerprint)\n* `-D FILE`, `--dictionary=FILE`:\n    use FILE as raw (LZ77) dictionary; same dictionary MUST be used both for\n    compression and decompression\n* `-K`, `--concatenated`:\n    when decoding, allow concatenated brotli streams as input\n* `-S SUF`, `--suffix=SUF`:\n    output file suffix (default: `.br`)\n* `-V`, `--version`:\n    display version and exit\n* `-Z`, `--best`:\n    use best compression level (default); same as \"`-q 11`\"\n\n# SEE ALSO\n\n`brotli` file format is defined in\n[RFC 7932](https://www.ietf.org/rfc/rfc7932.txt).\n\n`brotli` is open-sourced under the\n[MIT License](https://opensource.org/licenses/MIT).\n\nMailing list: https://groups.google.com/forum/#!forum/brotli\n\n# BUGS\n\nReport bugs at: https://github.com/google/brotli/issues\n"
  },
  {
    "path": "csharp/brotlidec.Tests.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0</TargetFramework>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <!-- Both regular sources and test sources -->\n    <Compile Include=\"org\\brotli\\dec\\*.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" Version=\"18.0.0\" />\n    <!-- Stick to NUnit3 until tests are regenerated -->\n    <PackageReference Include=\"NUnit\" Version=\"3.14.0\" />\n    <PackageReference Include=\"NUnit3TestAdapter\" Version=\"5.2.0\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "csharp/brotlidec.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0</TargetFramework>\n    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Include=\"org\\brotli\\dec\\*.cs\" />\n    <Compile Remove=\"**\\*Test.cs\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "csharp/injected_code.txt",
    "content": "// <{[INJECTED CODE]}>\n\t\tpublic override bool CanRead {\n\t\t\tget {return true;}\n\t\t}\n\n\t\tpublic override bool CanSeek {\n\t\t\tget {return false;}\n\t\t}\n\t\tpublic override long Length {\n\t\t\tget {throw new System.NotSupportedException();}\n\t\t}\n\t\tpublic override long Position {\n\t\t\tget {throw new System.NotSupportedException();}\n\t\t\tset {throw new System.NotSupportedException();}\n\t\t}\n\t\tpublic override long Seek(long offset, System.IO.SeekOrigin origin) {\n\t\t\tthrow new System.NotSupportedException();\n\t\t}\n\t\tpublic override void SetLength(long value){\n\t\t\tthrow new System.NotSupportedException();\n\t\t}\n\n\t\tpublic override bool CanWrite{get{return false;}}\n\t\tpublic override System.IAsyncResult BeginWrite(byte[] buffer, int offset,\n\t\t\t\tint count, System.AsyncCallback callback, object state) {\n\t\t\tthrow new System.NotSupportedException();\n\t\t}\n\t\tpublic override void Write(byte[] buffer, int offset, int count) {\n\t\t\tthrow new System.NotSupportedException();\n\t\t}\n\n\t\tpublic override void Flush() {}\n"
  },
  {
    "path": "csharp/org/brotli/dec/BitReader.cs",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\t/// <summary>Bit reading helpers.</summary>\r\n\tinternal sealed class BitReader\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Input byte buffer, consist of a ring-buffer and a \"slack\" region where bytes from the start of\r\n\t\t/// the ring-buffer are copied.\r\n\t\t/// </summary>\r\n\t\tprivate const int Capacity = 1024;\r\n\r\n\t\tprivate const int Slack = 16;\r\n\r\n\t\tprivate const int IntBufferSize = Capacity + Slack;\r\n\r\n\t\tprivate const int ByteReadSize = Capacity << 2;\r\n\r\n\t\tprivate const int ByteBufferSize = IntBufferSize << 2;\r\n\r\n\t\tprivate readonly byte[] byteBuffer = new byte[ByteBufferSize];\r\n\r\n\t\tprivate readonly int[] intBuffer = new int[IntBufferSize];\r\n\r\n\t\tprivate readonly Org.Brotli.Dec.IntReader intReader = new Org.Brotli.Dec.IntReader();\r\n\r\n\t\tprivate System.IO.Stream input;\r\n\r\n\t\t/// <summary>Input stream is finished.</summary>\r\n\t\tprivate bool endOfStreamReached;\r\n\r\n\t\t/// <summary>Pre-fetched bits.</summary>\r\n\t\tinternal long accumulator;\r\n\r\n\t\t/// <summary>Current bit-reading position in accumulator.</summary>\r\n\t\tinternal int bitOffset;\r\n\r\n\t\t/// <summary>Offset of next item in intBuffer.</summary>\r\n\t\tprivate int intOffset;\r\n\r\n\t\tprivate int tailBytes = 0;\r\n\r\n\t\t/* Number of bytes in unfinished \"int\" item. */\r\n\t\t/// <summary>Fills up the input buffer.</summary>\r\n\t\t/// <remarks>\r\n\t\t/// Fills up the input buffer.\r\n\t\t/// <p> No-op if there are at least 36 bytes present after current position.\r\n\t\t/// <p> After encountering the end of the input stream, 64 additional zero bytes are copied to the\r\n\t\t/// buffer.\r\n\t\t/// </remarks>\r\n\t\tinternal static void ReadMoreInput(Org.Brotli.Dec.BitReader br)\r\n\t\t{\r\n\t\t\t// TODO: Split to check and read; move read outside of decoding loop.\r\n\t\t\tif (br.intOffset <= Capacity - 9)\r\n\t\t\t{\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (br.endOfStreamReached)\r\n\t\t\t{\r\n\t\t\t\tif (IntAvailable(br) >= -2)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"No more input\");\r\n\t\t\t}\r\n\t\t\tint readOffset = br.intOffset << 2;\r\n\t\t\tint bytesRead = ByteReadSize - readOffset;\r\n\t\t\tSystem.Array.Copy(br.byteBuffer, readOffset, br.byteBuffer, 0, bytesRead);\r\n\t\t\tbr.intOffset = 0;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\twhile (bytesRead < ByteReadSize)\r\n\t\t\t\t{\r\n\t\t\t\t\tint len = br.input.Read(br.byteBuffer, bytesRead, ByteReadSize - bytesRead);\r\n\t\t\t\t\t// EOF is -1 in Java, but 0 in C#.\r\n\t\t\t\t\tif (len <= 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbr.endOfStreamReached = true;\r\n\t\t\t\t\t\tbr.tailBytes = bytesRead;\r\n\t\t\t\t\t\tbytesRead += 3;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbytesRead += len;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tcatch (System.IO.IOException e)\r\n\t\t\t{\r\n\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Failed to read input\", e);\r\n\t\t\t}\r\n\t\t\tOrg.Brotli.Dec.IntReader.Convert(br.intReader, bytesRead >> 2);\r\n\t\t}\r\n\r\n\t\tinternal static void CheckHealth(Org.Brotli.Dec.BitReader br, bool endOfStream)\r\n\t\t{\r\n\t\t\tif (!br.endOfStreamReached)\r\n\t\t\t{\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tint byteOffset = (br.intOffset << 2) + ((br.bitOffset + 7) >> 3) - 8;\r\n\t\t\tif (byteOffset > br.tailBytes)\r\n\t\t\t{\r\n\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Read after end\");\r\n\t\t\t}\r\n\t\t\tif (endOfStream && (byteOffset != br.tailBytes))\r\n\t\t\t{\r\n\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Unused bytes after end\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>Advances the Read buffer by 5 bytes to make room for reading next 24 bits.</summary>\r\n\t\tinternal static void FillBitWindow(Org.Brotli.Dec.BitReader br)\r\n\t\t{\r\n\t\t\tif (br.bitOffset >= 32)\r\n\t\t\t{\r\n\t\t\t\tbr.accumulator = ((long)br.intBuffer[br.intOffset++] << 32) | ((long)(((ulong)br.accumulator) >> 32));\r\n\t\t\t\tbr.bitOffset -= 32;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>Reads the specified number of bits from Read Buffer.</summary>\r\n\t\tinternal static int ReadBits(Org.Brotli.Dec.BitReader br, int n)\r\n\t\t{\r\n\t\t\tFillBitWindow(br);\r\n\t\t\tint val = (int)((long)(((ulong)br.accumulator) >> br.bitOffset)) & ((1 << n) - 1);\r\n\t\t\tbr.bitOffset += n;\r\n\t\t\treturn val;\r\n\t\t}\r\n\r\n\t\t/// <summary>Initialize bit reader.</summary>\r\n\t\t/// <remarks>\r\n\t\t/// Initialize bit reader.\r\n\t\t/// <p> Initialisation turns bit reader to a ready state. Also a number of bytes is prefetched to\r\n\t\t/// accumulator. Because of that this method may block until enough data could be read from input.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"br\">BitReader POJO</param>\r\n\t\t/// <param name=\"input\">data source</param>\r\n\t\tinternal static void Init(Org.Brotli.Dec.BitReader br, System.IO.Stream input)\r\n\t\t{\r\n\t\t\tif (br.input != null)\r\n\t\t\t{\r\n\t\t\t\tthrow new System.InvalidOperationException(\"Bit reader already has associated input stream\");\r\n\t\t\t}\r\n\t\t\tOrg.Brotli.Dec.IntReader.Init(br.intReader, br.byteBuffer, br.intBuffer);\r\n\t\t\tbr.input = input;\r\n\t\t\tbr.accumulator = 0;\r\n\t\t\tbr.bitOffset = 64;\r\n\t\t\tbr.intOffset = Capacity;\r\n\t\t\tbr.endOfStreamReached = false;\r\n\t\t\tPrepare(br);\r\n\t\t}\r\n\r\n\t\tprivate static void Prepare(Org.Brotli.Dec.BitReader br)\r\n\t\t{\r\n\t\t\tReadMoreInput(br);\r\n\t\t\tCheckHealth(br, false);\r\n\t\t\tFillBitWindow(br);\r\n\t\t\tFillBitWindow(br);\r\n\t\t}\r\n\r\n\t\tinternal static void Reload(Org.Brotli.Dec.BitReader br)\r\n\t\t{\r\n\t\t\tif (br.bitOffset == 64)\r\n\t\t\t{\r\n\t\t\t\tPrepare(br);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <exception cref=\"System.IO.IOException\"/>\r\n\t\tinternal static void Close(Org.Brotli.Dec.BitReader br)\r\n\t\t{\r\n\t\t\tSystem.IO.Stream @is = br.input;\r\n\t\t\tbr.input = null;\r\n\t\t\tif (@is != null)\r\n\t\t\t{\r\n\t\t\t\t@is.Close();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal static void JumpToByteBoundary(Org.Brotli.Dec.BitReader br)\r\n\t\t{\r\n\t\t\tint padding = (64 - br.bitOffset) & 7;\r\n\t\t\tif (padding != 0)\r\n\t\t\t{\r\n\t\t\t\tint paddingBits = Org.Brotli.Dec.BitReader.ReadBits(br, padding);\r\n\t\t\t\tif (paddingBits != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Corrupted padding bits\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal static int IntAvailable(Org.Brotli.Dec.BitReader br)\r\n\t\t{\r\n\t\t\tint limit = Capacity;\r\n\t\t\tif (br.endOfStreamReached)\r\n\t\t\t{\r\n\t\t\t\tlimit = (br.tailBytes + 3) >> 2;\r\n\t\t\t}\r\n\t\t\treturn limit - br.intOffset;\r\n\t\t}\r\n\r\n\t\tinternal static void CopyBytes(Org.Brotli.Dec.BitReader br, byte[] data, int offset, int length)\r\n\t\t{\r\n\t\t\tif ((br.bitOffset & 7) != 0)\r\n\t\t\t{\r\n\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Unaligned copyBytes\");\r\n\t\t\t}\r\n\t\t\t// Drain accumulator.\r\n\t\t\twhile ((br.bitOffset != 64) && (length != 0))\r\n\t\t\t{\r\n\t\t\t\tdata[offset++] = unchecked((byte)((long)(((ulong)br.accumulator) >> br.bitOffset)));\r\n\t\t\t\tbr.bitOffset += 8;\r\n\t\t\t\tlength--;\r\n\t\t\t}\r\n\t\t\tif (length == 0)\r\n\t\t\t{\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t// Get data from shadow buffer with \"sizeof(int)\" granularity.\r\n\t\t\tint copyInts = System.Math.Min(IntAvailable(br), length >> 2);\r\n\t\t\tif (copyInts > 0)\r\n\t\t\t{\r\n\t\t\t\tint readOffset = br.intOffset << 2;\r\n\t\t\t\tSystem.Array.Copy(br.byteBuffer, readOffset, data, offset, copyInts << 2);\r\n\t\t\t\toffset += copyInts << 2;\r\n\t\t\t\tlength -= copyInts << 2;\r\n\t\t\t\tbr.intOffset += copyInts;\r\n\t\t\t}\r\n\t\t\tif (length == 0)\r\n\t\t\t{\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t// Read tail bytes.\r\n\t\t\tif (IntAvailable(br) > 0)\r\n\t\t\t{\r\n\t\t\t\t// length = 1..3\r\n\t\t\t\tFillBitWindow(br);\r\n\t\t\t\twhile (length != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tdata[offset++] = unchecked((byte)((long)(((ulong)br.accumulator) >> br.bitOffset)));\r\n\t\t\t\t\tbr.bitOffset += 8;\r\n\t\t\t\t\tlength--;\r\n\t\t\t\t}\r\n\t\t\t\tCheckHealth(br, false);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t// Now it is possible to copy bytes directly.\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\twhile (length > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tint len = br.input.Read(data, offset, length);\r\n\t\t\t\t\tif (len == -1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Unexpected end of input\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\toffset += len;\r\n\t\t\t\t\tlength -= len;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tcatch (System.IO.IOException e)\r\n\t\t\t{\r\n\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Failed to read input\", e);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/org/brotli/dec/BitReaderTest.cs",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\t/// <summary>\r\n\t/// Tests for\r\n\t/// <see cref=\"BitReader\"/>\r\n\t/// .\r\n\t/// </summary>\r\n\tpublic class BitReaderTest\r\n\t{\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestReadAfterEos()\r\n\t\t{\r\n\t\t\tOrg.Brotli.Dec.BitReader reader = new Org.Brotli.Dec.BitReader();\r\n\t\t\tOrg.Brotli.Dec.BitReader.Init(reader, new System.IO.MemoryStream(new byte[1]));\r\n\t\t\tOrg.Brotli.Dec.BitReader.ReadBits(reader, 9);\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tOrg.Brotli.Dec.BitReader.CheckHealth(reader, false);\r\n\t\t\t}\r\n\t\t\tcatch (Org.Brotli.Dec.BrotliRuntimeException)\r\n\t\t\t{\r\n\t\t\t\t// This exception is expected.\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tNUnit.Framework.Assert.Fail(\"BrotliRuntimeException should have been thrown by BitReader.checkHealth\");\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/org/brotli/dec/BrotliInputStream.cs",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\t/// <summary>\r\n\t/// <see cref=\"System.IO.Stream\"/>\r\n\t/// decorator that decompresses brotli data.\r\n\t/// <p> Not thread-safe.\r\n\t/// </summary>\r\n\tpublic class BrotliInputStream : System.IO.Stream\r\n\t{\r\n\t\tpublic const int DefaultInternalBufferSize = 16384;\r\n\r\n\t\t/// <summary>Internal buffer used for efficient byte-by-byte reading.</summary>\r\n\t\tprivate byte[] buffer;\r\n\r\n\t\t/// <summary>Number of decoded but still unused bytes in internal buffer.</summary>\r\n\t\tprivate int remainingBufferBytes;\r\n\r\n\t\t/// <summary>Next unused byte offset.</summary>\r\n\t\tprivate int bufferOffset;\r\n\r\n\t\t/// <summary>Decoder state.</summary>\r\n\t\tprivate readonly Org.Brotli.Dec.State state = new Org.Brotli.Dec.State();\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a\r\n\t\t/// <see cref=\"System.IO.Stream\"/>\r\n\t\t/// wrapper that decompresses brotli data.\r\n\t\t/// <p> For byte-by-byte reading (\r\n\t\t/// <see cref=\"ReadByte()\"/>\r\n\t\t/// ) internal buffer with\r\n\t\t/// <see cref=\"DefaultInternalBufferSize\"/>\r\n\t\t/// size is allocated and used.\r\n\t\t/// <p> Will block the thread until first kilobyte of data of source is available.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"source\">underlying data source</param>\r\n\t\t/// <exception cref=\"System.IO.IOException\">in case of corrupted data or source stream problems</exception>\r\n\t\tpublic BrotliInputStream(System.IO.Stream source)\r\n\t\t\t: this(source, DefaultInternalBufferSize, null)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a\r\n\t\t/// <see cref=\"System.IO.Stream\"/>\r\n\t\t/// wrapper that decompresses brotli data.\r\n\t\t/// <p> For byte-by-byte reading (\r\n\t\t/// <see cref=\"ReadByte()\"/>\r\n\t\t/// ) internal buffer of specified size is\r\n\t\t/// allocated and used.\r\n\t\t/// <p> Will block the thread until first kilobyte of data of source is available.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"source\">compressed data source</param>\r\n\t\t/// <param name=\"byteReadBufferSize\">\r\n\t\t/// size of internal buffer used in case of\r\n\t\t/// byte-by-byte reading\r\n\t\t/// </param>\r\n\t\t/// <exception cref=\"System.IO.IOException\">in case of corrupted data or source stream problems</exception>\r\n\t\tpublic BrotliInputStream(System.IO.Stream source, int byteReadBufferSize)\r\n\t\t\t: this(source, byteReadBufferSize, null)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Creates a\r\n\t\t/// <see cref=\"System.IO.Stream\"/>\r\n\t\t/// wrapper that decompresses brotli data.\r\n\t\t/// <p> For byte-by-byte reading (\r\n\t\t/// <see cref=\"ReadByte()\"/>\r\n\t\t/// ) internal buffer of specified size is\r\n\t\t/// allocated and used.\r\n\t\t/// <p> Will block the thread until first kilobyte of data of source is available.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"source\">compressed data source</param>\r\n\t\t/// <param name=\"byteReadBufferSize\">\r\n\t\t/// size of internal buffer used in case of\r\n\t\t/// byte-by-byte reading\r\n\t\t/// </param>\r\n\t\t/// <param name=\"customDictionary\">\r\n\t\t/// custom dictionary data;\r\n\t\t/// <see langword=\"null\"/>\r\n\t\t/// if not used\r\n\t\t/// </param>\r\n\t\t/// <exception cref=\"System.IO.IOException\">in case of corrupted data or source stream problems</exception>\r\n\t\tpublic BrotliInputStream(System.IO.Stream source, int byteReadBufferSize, byte[] customDictionary)\r\n\t\t{\r\n\t\t\tif (byteReadBufferSize <= 0)\r\n\t\t\t{\r\n\t\t\t\tthrow new System.ArgumentException(\"Bad buffer size:\" + byteReadBufferSize);\r\n\t\t\t}\r\n\t\t\telse if (source == null)\r\n\t\t\t{\r\n\t\t\t\tthrow new System.ArgumentException(\"source is null\");\r\n\t\t\t}\r\n\t\t\tthis.buffer = new byte[byteReadBufferSize];\r\n\t\t\tthis.remainingBufferBytes = 0;\r\n\t\t\tthis.bufferOffset = 0;\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tOrg.Brotli.Dec.State.SetInput(state, source);\r\n\t\t\t}\r\n\t\t\tcatch (Org.Brotli.Dec.BrotliRuntimeException ex)\r\n\t\t\t{\r\n\t\t\t\tthrow new System.IO.IOException(\"Brotli decoder initialization failed\", ex);\r\n\t\t\t}\r\n\t\t\tif (customDictionary != null)\r\n\t\t\t{\r\n\t\t\t\tOrg.Brotli.Dec.Decode.SetCustomDictionary(state, customDictionary);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary><inheritDoc/></summary>\r\n\t\t/// <exception cref=\"System.IO.IOException\"/>\r\n\t\tpublic override void Close()\r\n\t\t{\r\n\t\t\tOrg.Brotli.Dec.State.Close(state);\r\n\t\t}\r\n\r\n\t\t/// <summary><inheritDoc/></summary>\r\n\t\t/// <exception cref=\"System.IO.IOException\"/>\r\n\t\tpublic override int ReadByte()\r\n\t\t{\r\n\t\t\tif (bufferOffset >= remainingBufferBytes)\r\n\t\t\t{\r\n\t\t\t\tremainingBufferBytes = Read(buffer, 0, buffer.Length);\r\n\t\t\t\tbufferOffset = 0;\r\n\t\t\t\tif (remainingBufferBytes == -1)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn buffer[bufferOffset++] & unchecked((int)(0xFF));\r\n\t\t}\r\n\r\n\t\t/// <summary><inheritDoc/></summary>\r\n\t\t/// <exception cref=\"System.IO.IOException\"/>\r\n\t\tpublic override int Read(byte[] destBuffer, int destOffset, int destLen)\r\n\t\t{\r\n\t\t\tif (destOffset < 0)\r\n\t\t\t{\r\n\t\t\t\tthrow new System.ArgumentException(\"Bad offset: \" + destOffset);\r\n\t\t\t}\r\n\t\t\telse if (destLen < 0)\r\n\t\t\t{\r\n\t\t\t\tthrow new System.ArgumentException(\"Bad length: \" + destLen);\r\n\t\t\t}\r\n\t\t\telse if (destOffset + destLen > destBuffer.Length)\r\n\t\t\t{\r\n\t\t\t\tthrow new System.ArgumentException(\"Buffer overflow: \" + (destOffset + destLen) + \" > \" + destBuffer.Length);\r\n\t\t\t}\r\n\t\t\telse if (destLen == 0)\r\n\t\t\t{\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t\tint copyLen = System.Math.Max(remainingBufferBytes - bufferOffset, 0);\r\n\t\t\tif (copyLen != 0)\r\n\t\t\t{\r\n\t\t\t\tcopyLen = System.Math.Min(copyLen, destLen);\r\n\t\t\t\tSystem.Array.Copy(buffer, bufferOffset, destBuffer, destOffset, copyLen);\r\n\t\t\t\tbufferOffset += copyLen;\r\n\t\t\t\tdestOffset += copyLen;\r\n\t\t\t\tdestLen -= copyLen;\r\n\t\t\t\tif (destLen == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn copyLen;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tstate.output = destBuffer;\r\n\t\t\t\tstate.outputOffset = destOffset;\r\n\t\t\t\tstate.outputLength = destLen;\r\n\t\t\t\tstate.outputUsed = 0;\r\n\t\t\t\tOrg.Brotli.Dec.Decode.Decompress(state);\r\n\t\t\t\tif (state.outputUsed == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t}\r\n\t\t\t\treturn state.outputUsed + copyLen;\r\n\t\t\t}\r\n\t\t\tcatch (Org.Brotli.Dec.BrotliRuntimeException ex)\r\n\t\t\t{\r\n\t\t\t\tthrow new System.IO.IOException(\"Brotli stream decoding failed\", ex);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// <{[INJECTED CODE]}>\n\t\tpublic override bool CanRead {\n\t\t\tget {return true;}\n\t\t}\n\n\t\tpublic override bool CanSeek {\n\t\t\tget {return false;}\n\t\t}\n\t\tpublic override long Length {\n\t\t\tget {throw new System.NotSupportedException();}\n\t\t}\n\t\tpublic override long Position {\n\t\t\tget {throw new System.NotSupportedException();}\n\t\t\tset {throw new System.NotSupportedException();}\n\t\t}\n\t\tpublic override long Seek(long offset, System.IO.SeekOrigin origin) {\n\t\t\tthrow new System.NotSupportedException();\n\t\t}\n\t\tpublic override void SetLength(long value){\n\t\t\tthrow new System.NotSupportedException();\n\t\t}\n\n\t\tpublic override bool CanWrite{get{return false;}}\n\t\tpublic override System.IAsyncResult BeginWrite(byte[] buffer, int offset,\n\t\t\t\tint count, System.AsyncCallback callback, object state) {\n\t\t\tthrow new System.NotSupportedException();\n\t\t}\n\t\tpublic override void Write(byte[] buffer, int offset, int count) {\n\t\t\tthrow new System.NotSupportedException();\n\t\t}\n\n\t\tpublic override void Flush() {}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/org/brotli/dec/BrotliRuntimeException.cs",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\t/// <summary>Unchecked exception used internally.</summary>\r\n\t[System.Serializable]\r\n\tinternal class BrotliRuntimeException : System.Exception\r\n\t{\r\n\t\tinternal BrotliRuntimeException(string message)\r\n\t\t\t: base(message)\r\n\t\t{\r\n\t\t}\r\n\r\n\t\tinternal BrotliRuntimeException(string message, System.Exception cause)\r\n\t\t\t: base(message, cause)\r\n\t\t{\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/org/brotli/dec/Context.cs",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\t/// <summary>Common context lookup table for all context modes.</summary>\r\n\tinternal sealed class Context\r\n\t{\r\n\t\tinternal static readonly int[] Lookup = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12, 44, 44, 44, 44, 44, 44, 44, 44\r\n\t\t\t, 44, 44, 32, 32, 24, 40, 28, 12, 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12, 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56, 60, 60, 60, 60\r\n\t\t\t, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, \r\n\t\t\t2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \r\n\t\t\t0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, \r\n\t\t\t1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \r\n\t\t\t0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \r\n\t\t\t0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, \r\n\t\t\t3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, \r\n\t\t\t4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, \r\n\t\t\t6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, \r\n\t\t\t16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, \r\n\t\t\t24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, \r\n\t\t\t32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, \r\n\t\t\t40, 40, 40, 40, 40, 40, 40, 40, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38\r\n\t\t\t, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, \r\n\t\t\t37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35\r\n\t\t\t, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, \r\n\t\t\t34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, \r\n\t\t\t10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, \r\n\t\t\t25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35, 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39, \r\n\t\t\t40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43, 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47, 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51, 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, \r\n\t\t\t55, 55, 55, 55, 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \r\n\t\t\t0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \r\n\t\t\t0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \r\n\t\t\t0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };\r\n\r\n\t\tinternal static readonly int[] LookupOffsets = new int[] { 1024, 1536, 1280, 1536, 0, 256, 768, 512 };\r\n\t\t// CONTEXT_UTF8, last byte.\r\n\t\t// ASCII range.\r\n\t\t// UTF8 continuation byte range.\r\n\t\t// UTF8 lead byte range.\r\n\t\t// CONTEXT_UTF8 second last byte.\r\n\t\t// ASCII range.\r\n\t\t// UTF8 continuation byte range.\r\n\t\t// UTF8 lead byte range.\r\n\t\t// CONTEXT_SIGNED, second last byte.\r\n\t\t// CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits.\r\n\t\t// CONTEXT_LSB6, last byte.\r\n\t\t// CONTEXT_MSB6, last byte.\r\n\t\t// CONTEXT_{M,L}SB6, second last byte,\r\n\t\t// CONTEXT_LSB6\r\n\t\t// CONTEXT_MSB6\r\n\t\t// CONTEXT_UTF8\r\n\t\t// CONTEXT_SIGNED\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/org/brotli/dec/Decode.cs",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\t/// <summary>API for Brotli decompression.</summary>\r\n\tinternal sealed class Decode\r\n\t{\r\n\t\tprivate const int DefaultCodeLength = 8;\r\n\r\n\t\tprivate const int CodeLengthRepeatCode = 16;\r\n\r\n\t\tprivate const int NumLiteralCodes = 256;\r\n\r\n\t\tprivate const int NumInsertAndCopyCodes = 704;\r\n\r\n\t\tprivate const int NumBlockLengthCodes = 26;\r\n\r\n\t\tprivate const int LiteralContextBits = 6;\r\n\r\n\t\tprivate const int DistanceContextBits = 2;\r\n\r\n\t\tprivate const int HuffmanTableBits = 8;\r\n\r\n\t\tprivate const int HuffmanTableMask = unchecked((int)(0xFF));\r\n\r\n\t\tprivate const int CodeLengthCodes = 18;\r\n\r\n\t\tprivate static readonly int[] CodeLengthCodeOrder = new int[] { 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15 };\r\n\r\n\t\tprivate const int NumDistanceShortCodes = 16;\r\n\r\n\t\tprivate static readonly int[] DistanceShortCodeIndexOffset = new int[] { 3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2 };\r\n\r\n\t\tprivate static readonly int[] DistanceShortCodeValueOffset = new int[] { 0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3 };\r\n\r\n\t\t/// <summary>Static Huffman code for the code length code lengths.</summary>\r\n\t\tprivate static readonly int[] FixedTable = new int[] { unchecked((int)(0x020000)), unchecked((int)(0x020004)), unchecked((int)(0x020003)), unchecked((int)(0x030002)), unchecked((int)(0x020000)), unchecked((int)(0x020004)), unchecked((int)(0x020003\r\n\t\t\t)), unchecked((int)(0x040001)), unchecked((int)(0x020000)), unchecked((int)(0x020004)), unchecked((int)(0x020003)), unchecked((int)(0x030002)), unchecked((int)(0x020000)), unchecked((int)(0x020004)), unchecked((int)(0x020003)), unchecked((int\r\n\t\t\t)(0x040005)) };\r\n\r\n\t\t/// <summary>Decodes a number in the range [0..255], by reading 1 - 11 bits.</summary>\r\n\t\tprivate static int DecodeVarLenUnsignedByte(Org.Brotli.Dec.BitReader br)\r\n\t\t{\r\n\t\t\tif (Org.Brotli.Dec.BitReader.ReadBits(br, 1) != 0)\r\n\t\t\t{\r\n\t\t\t\tint n = Org.Brotli.Dec.BitReader.ReadBits(br, 3);\r\n\t\t\t\tif (n == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\treturn Org.Brotli.Dec.BitReader.ReadBits(br, n) + (1 << n);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tprivate static void DecodeMetaBlockLength(Org.Brotli.Dec.BitReader br, Org.Brotli.Dec.State state)\r\n\t\t{\r\n\t\t\tstate.inputEnd = Org.Brotli.Dec.BitReader.ReadBits(br, 1) == 1;\r\n\t\t\tstate.metaBlockLength = 0;\r\n\t\t\tstate.isUncompressed = false;\r\n\t\t\tstate.isMetadata = false;\r\n\t\t\tif (state.inputEnd && Org.Brotli.Dec.BitReader.ReadBits(br, 1) != 0)\r\n\t\t\t{\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tint sizeNibbles = Org.Brotli.Dec.BitReader.ReadBits(br, 2) + 4;\r\n\t\t\tif (sizeNibbles == 7)\r\n\t\t\t{\r\n\t\t\t\tstate.isMetadata = true;\r\n\t\t\t\tif (Org.Brotli.Dec.BitReader.ReadBits(br, 1) != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Corrupted reserved bit\");\r\n\t\t\t\t}\r\n\t\t\t\tint sizeBytes = Org.Brotli.Dec.BitReader.ReadBits(br, 2);\r\n\t\t\t\tif (sizeBytes == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tfor (int i = 0; i < sizeBytes; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tint bits = Org.Brotli.Dec.BitReader.ReadBits(br, 8);\r\n\t\t\t\t\tif (bits == 0 && i + 1 == sizeBytes && sizeBytes > 1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Exuberant nibble\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstate.metaBlockLength |= bits << (i * 8);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tfor (int i = 0; i < sizeNibbles; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tint bits = Org.Brotli.Dec.BitReader.ReadBits(br, 4);\r\n\t\t\t\t\tif (bits == 0 && i + 1 == sizeNibbles && sizeNibbles > 4)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Exuberant nibble\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstate.metaBlockLength |= bits << (i * 4);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tstate.metaBlockLength++;\r\n\t\t\tif (!state.inputEnd)\r\n\t\t\t{\r\n\t\t\t\tstate.isUncompressed = Org.Brotli.Dec.BitReader.ReadBits(br, 1) == 1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>Decodes the next Huffman code from bit-stream.</summary>\r\n\t\tprivate static int ReadSymbol(int[] table, int offset, Org.Brotli.Dec.BitReader br)\r\n\t\t{\r\n\t\t\tint val = (int)((long)(((ulong)br.accumulator) >> br.bitOffset));\r\n\t\t\toffset += val & HuffmanTableMask;\r\n\t\t\tint bits = table[offset] >> 16;\r\n\t\t\tint sym = table[offset] & unchecked((int)(0xFFFF));\r\n\t\t\tif (bits <= HuffmanTableBits)\r\n\t\t\t{\r\n\t\t\t\tbr.bitOffset += bits;\r\n\t\t\t\treturn sym;\r\n\t\t\t}\r\n\t\t\toffset += sym;\r\n\t\t\tint mask = (1 << bits) - 1;\r\n\t\t\toffset += (int)(((uint)(val & mask)) >> HuffmanTableBits);\r\n\t\t\tbr.bitOffset += ((table[offset] >> 16) + HuffmanTableBits);\r\n\t\t\treturn table[offset] & unchecked((int)(0xFFFF));\r\n\t\t}\r\n\r\n\t\tprivate static int ReadBlockLength(int[] table, int offset, Org.Brotli.Dec.BitReader br)\r\n\t\t{\r\n\t\t\tOrg.Brotli.Dec.BitReader.FillBitWindow(br);\r\n\t\t\tint code = ReadSymbol(table, offset, br);\r\n\t\t\tint n = Org.Brotli.Dec.Prefix.BlockLengthNBits[code];\r\n\t\t\treturn Org.Brotli.Dec.Prefix.BlockLengthOffset[code] + Org.Brotli.Dec.BitReader.ReadBits(br, n);\r\n\t\t}\r\n\r\n\t\tprivate static int TranslateShortCodes(int code, int[] ringBuffer, int index)\r\n\t\t{\r\n\t\t\tif (code < NumDistanceShortCodes)\r\n\t\t\t{\r\n\t\t\t\tindex += DistanceShortCodeIndexOffset[code];\r\n\t\t\t\tindex &= 3;\r\n\t\t\t\treturn ringBuffer[index] + DistanceShortCodeValueOffset[code];\r\n\t\t\t}\r\n\t\t\treturn code - NumDistanceShortCodes + 1;\r\n\t\t}\r\n\r\n\t\tprivate static void MoveToFront(int[] v, int index)\r\n\t\t{\r\n\t\t\tint value = v[index];\r\n\t\t\tfor (; index > 0; index--)\r\n\t\t\t{\r\n\t\t\t\tv[index] = v[index - 1];\r\n\t\t\t}\r\n\t\t\tv[0] = value;\r\n\t\t}\r\n\r\n\t\tprivate static void InverseMoveToFrontTransform(byte[] v, int vLen)\r\n\t\t{\r\n\t\t\tint[] mtf = new int[256];\r\n\t\t\tfor (int i = 0; i < 256; i++)\r\n\t\t\t{\r\n\t\t\t\tmtf[i] = i;\r\n\t\t\t}\r\n\t\t\tfor (int i = 0; i < vLen; i++)\r\n\t\t\t{\r\n\t\t\t\tint index = v[i] & unchecked((int)(0xFF));\r\n\t\t\t\tv[i] = unchecked((byte)mtf[index]);\r\n\t\t\t\tif (index != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tMoveToFront(mtf, index);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate static void ReadHuffmanCodeLengths(int[] codeLengthCodeLengths, int numSymbols, int[] codeLengths, Org.Brotli.Dec.BitReader br)\r\n\t\t{\r\n\t\t\tint symbol = 0;\r\n\t\t\tint prevCodeLen = DefaultCodeLength;\r\n\t\t\tint repeat = 0;\r\n\t\t\tint repeatCodeLen = 0;\r\n\t\t\tint space = 32768;\r\n\t\t\tint[] table = new int[32];\r\n\t\t\tOrg.Brotli.Dec.Huffman.BuildHuffmanTable(table, 0, 5, codeLengthCodeLengths, CodeLengthCodes);\r\n\t\t\twhile (symbol < numSymbols && space > 0)\r\n\t\t\t{\r\n\t\t\t\tOrg.Brotli.Dec.BitReader.ReadMoreInput(br);\r\n\t\t\t\tOrg.Brotli.Dec.BitReader.FillBitWindow(br);\r\n\t\t\t\tint p = (int)(((long)(((ulong)br.accumulator) >> br.bitOffset))) & 31;\r\n\t\t\t\tbr.bitOffset += table[p] >> 16;\r\n\t\t\t\tint codeLen = table[p] & unchecked((int)(0xFFFF));\r\n\t\t\t\tif (codeLen < CodeLengthRepeatCode)\r\n\t\t\t\t{\r\n\t\t\t\t\trepeat = 0;\r\n\t\t\t\t\tcodeLengths[symbol++] = codeLen;\r\n\t\t\t\t\tif (codeLen != 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tprevCodeLen = codeLen;\r\n\t\t\t\t\t\tspace -= 32768 >> codeLen;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tint extraBits = codeLen - 14;\r\n\t\t\t\t\tint newLen = 0;\r\n\t\t\t\t\tif (codeLen == CodeLengthRepeatCode)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tnewLen = prevCodeLen;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (repeatCodeLen != newLen)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\trepeat = 0;\r\n\t\t\t\t\t\trepeatCodeLen = newLen;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tint oldRepeat = repeat;\r\n\t\t\t\t\tif (repeat > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\trepeat -= 2;\r\n\t\t\t\t\t\trepeat <<= extraBits;\r\n\t\t\t\t\t}\r\n\t\t\t\t\trepeat += Org.Brotli.Dec.BitReader.ReadBits(br, extraBits) + 3;\r\n\t\t\t\t\tint repeatDelta = repeat - oldRepeat;\r\n\t\t\t\t\tif (symbol + repeatDelta > numSymbols)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"symbol + repeatDelta > numSymbols\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// COV_NF_LINE\r\n\t\t\t\t\tfor (int i = 0; i < repeatDelta; i++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcodeLengths[symbol++] = repeatCodeLen;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (repeatCodeLen != 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tspace -= repeatDelta << (15 - repeatCodeLen);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (space != 0)\r\n\t\t\t{\r\n\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Unused space\");\r\n\t\t\t}\r\n\t\t\t// COV_NF_LINE\r\n\t\t\t// TODO: Pass max_symbol to Huffman table builder instead?\r\n\t\t\tOrg.Brotli.Dec.Utils.FillWithZeroes(codeLengths, symbol, numSymbols - symbol);\r\n\t\t}\r\n\r\n\t\t// TODO: Use specialized versions for smaller tables.\r\n\t\tinternal static void ReadHuffmanCode(int alphabetSize, int[] table, int offset, Org.Brotli.Dec.BitReader br)\r\n\t\t{\r\n\t\t\tbool ok = true;\r\n\t\t\tint simpleCodeOrSkip;\r\n\t\t\tOrg.Brotli.Dec.BitReader.ReadMoreInput(br);\r\n\t\t\t// TODO: Avoid allocation.\r\n\t\t\tint[] codeLengths = new int[alphabetSize];\r\n\t\t\tsimpleCodeOrSkip = Org.Brotli.Dec.BitReader.ReadBits(br, 2);\r\n\t\t\tif (simpleCodeOrSkip == 1)\r\n\t\t\t{\r\n\t\t\t\t// Read symbols, codes & code lengths directly.\r\n\t\t\t\tint maxBitsCounter = alphabetSize - 1;\r\n\t\t\t\tint maxBits = 0;\r\n\t\t\t\tint[] symbols = new int[4];\r\n\t\t\t\tint numSymbols = Org.Brotli.Dec.BitReader.ReadBits(br, 2) + 1;\r\n\t\t\t\twhile (maxBitsCounter != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tmaxBitsCounter >>= 1;\r\n\t\t\t\t\tmaxBits++;\r\n\t\t\t\t}\r\n\t\t\t\t// TODO: uncomment when codeLengths is reused.\r\n\t\t\t\t// Utils.fillWithZeroes(codeLengths, 0, alphabetSize);\r\n\t\t\t\tfor (int i = 0; i < numSymbols; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tsymbols[i] = Org.Brotli.Dec.BitReader.ReadBits(br, maxBits) % alphabetSize;\r\n\t\t\t\t\tcodeLengths[symbols[i]] = 2;\r\n\t\t\t\t}\r\n\t\t\t\tcodeLengths[symbols[0]] = 1;\r\n\t\t\t\tswitch (numSymbols)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase 1:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase 2:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tok = symbols[0] != symbols[1];\r\n\t\t\t\t\t\tcodeLengths[symbols[1]] = 1;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase 3:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tok = symbols[0] != symbols[1] && symbols[0] != symbols[2] && symbols[1] != symbols[2];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase 4:\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tok = symbols[0] != symbols[1] && symbols[0] != symbols[2] && symbols[0] != symbols[3] && symbols[1] != symbols[2] && symbols[1] != symbols[3] && symbols[2] != symbols[3];\r\n\t\t\t\t\t\tif (Org.Brotli.Dec.BitReader.ReadBits(br, 1) == 1)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcodeLengths[symbols[2]] = 3;\r\n\t\t\t\t\t\t\tcodeLengths[symbols[3]] = 3;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcodeLengths[symbols[0]] = 2;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t// Decode Huffman-coded code lengths.\r\n\t\t\t\tint[] codeLengthCodeLengths = new int[CodeLengthCodes];\r\n\t\t\t\tint space = 32;\r\n\t\t\t\tint numCodes = 0;\r\n\t\t\t\tfor (int i = simpleCodeOrSkip; i < CodeLengthCodes && space > 0; i++)\r\n\t\t\t\t{\r\n\t\t\t\t\tint codeLenIdx = CodeLengthCodeOrder[i];\r\n\t\t\t\t\tOrg.Brotli.Dec.BitReader.FillBitWindow(br);\r\n\t\t\t\t\tint p = (int)((long)(((ulong)br.accumulator) >> br.bitOffset)) & 15;\r\n\t\t\t\t\t// TODO: Demultiplex FIXED_TABLE.\r\n\t\t\t\t\tbr.bitOffset += FixedTable[p] >> 16;\r\n\t\t\t\t\tint v = FixedTable[p] & unchecked((int)(0xFFFF));\r\n\t\t\t\t\tcodeLengthCodeLengths[codeLenIdx] = v;\r\n\t\t\t\t\tif (v != 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tspace -= (32 >> v);\r\n\t\t\t\t\t\tnumCodes++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tok = (numCodes == 1 || space == 0);\r\n\t\t\t\tReadHuffmanCodeLengths(codeLengthCodeLengths, alphabetSize, codeLengths, br);\r\n\t\t\t}\r\n\t\t\tif (!ok)\r\n\t\t\t{\r\n\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Can't readHuffmanCode\");\r\n\t\t\t}\r\n\t\t\t// COV_NF_LINE\r\n\t\t\tOrg.Brotli.Dec.Huffman.BuildHuffmanTable(table, offset, HuffmanTableBits, codeLengths, alphabetSize);\r\n\t\t}\r\n\r\n\t\tprivate static int DecodeContextMap(int contextMapSize, byte[] contextMap, Org.Brotli.Dec.BitReader br)\r\n\t\t{\r\n\t\t\tOrg.Brotli.Dec.BitReader.ReadMoreInput(br);\r\n\t\t\tint numTrees = DecodeVarLenUnsignedByte(br) + 1;\r\n\t\t\tif (numTrees == 1)\r\n\t\t\t{\r\n\t\t\t\tOrg.Brotli.Dec.Utils.FillWithZeroes(contextMap, 0, contextMapSize);\r\n\t\t\t\treturn numTrees;\r\n\t\t\t}\r\n\t\t\tbool useRleForZeros = Org.Brotli.Dec.BitReader.ReadBits(br, 1) == 1;\r\n\t\t\tint maxRunLengthPrefix = 0;\r\n\t\t\tif (useRleForZeros)\r\n\t\t\t{\r\n\t\t\t\tmaxRunLengthPrefix = Org.Brotli.Dec.BitReader.ReadBits(br, 4) + 1;\r\n\t\t\t}\r\n\t\t\tint[] table = new int[Org.Brotli.Dec.Huffman.HuffmanMaxTableSize];\r\n\t\t\tReadHuffmanCode(numTrees + maxRunLengthPrefix, table, 0, br);\r\n\t\t\tfor (int i = 0; i < contextMapSize; )\r\n\t\t\t{\r\n\t\t\t\tOrg.Brotli.Dec.BitReader.ReadMoreInput(br);\r\n\t\t\t\tOrg.Brotli.Dec.BitReader.FillBitWindow(br);\r\n\t\t\t\tint code = ReadSymbol(table, 0, br);\r\n\t\t\t\tif (code == 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tcontextMap[i] = 0;\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}\r\n\t\t\t\telse if (code <= maxRunLengthPrefix)\r\n\t\t\t\t{\r\n\t\t\t\t\tint reps = (1 << code) + Org.Brotli.Dec.BitReader.ReadBits(br, code);\r\n\t\t\t\t\twhile (reps != 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (i >= contextMapSize)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Corrupted context map\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// COV_NF_LINE\r\n\t\t\t\t\t\tcontextMap[i] = 0;\r\n\t\t\t\t\t\ti++;\r\n\t\t\t\t\t\treps--;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tcontextMap[i] = unchecked((byte)(code - maxRunLengthPrefix));\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (Org.Brotli.Dec.BitReader.ReadBits(br, 1) == 1)\r\n\t\t\t{\r\n\t\t\t\tInverseMoveToFrontTransform(contextMap, contextMapSize);\r\n\t\t\t}\r\n\t\t\treturn numTrees;\r\n\t\t}\r\n\r\n\t\tprivate static void DecodeBlockTypeAndLength(Org.Brotli.Dec.State state, int treeType)\r\n\t\t{\r\n\t\t\tOrg.Brotli.Dec.BitReader br = state.br;\r\n\t\t\tint[] ringBuffers = state.blockTypeRb;\r\n\t\t\tint offset = treeType * 2;\r\n\t\t\tOrg.Brotli.Dec.BitReader.FillBitWindow(br);\r\n\t\t\tint blockType = ReadSymbol(state.blockTypeTrees, treeType * Org.Brotli.Dec.Huffman.HuffmanMaxTableSize, br);\r\n\t\t\tstate.blockLength[treeType] = ReadBlockLength(state.blockLenTrees, treeType * Org.Brotli.Dec.Huffman.HuffmanMaxTableSize, br);\r\n\t\t\tif (blockType == 1)\r\n\t\t\t{\r\n\t\t\t\tblockType = ringBuffers[offset + 1] + 1;\r\n\t\t\t}\r\n\t\t\telse if (blockType == 0)\r\n\t\t\t{\r\n\t\t\t\tblockType = ringBuffers[offset];\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tblockType -= 2;\r\n\t\t\t}\r\n\t\t\tif (blockType >= state.numBlockTypes[treeType])\r\n\t\t\t{\r\n\t\t\t\tblockType -= state.numBlockTypes[treeType];\r\n\t\t\t}\r\n\t\t\tringBuffers[offset] = ringBuffers[offset + 1];\r\n\t\t\tringBuffers[offset + 1] = blockType;\r\n\t\t}\r\n\r\n\t\tprivate static void DecodeLiteralBlockSwitch(Org.Brotli.Dec.State state)\r\n\t\t{\r\n\t\t\tDecodeBlockTypeAndLength(state, 0);\r\n\t\t\tint literalBlockType = state.blockTypeRb[1];\r\n\t\t\tstate.contextMapSlice = literalBlockType << LiteralContextBits;\r\n\t\t\tstate.literalTreeIndex = state.contextMap[state.contextMapSlice] & unchecked((int)(0xFF));\r\n\t\t\tstate.literalTree = state.hGroup0.trees[state.literalTreeIndex];\r\n\t\t\tint contextMode = state.contextModes[literalBlockType];\r\n\t\t\tstate.contextLookupOffset1 = Org.Brotli.Dec.Context.LookupOffsets[contextMode];\r\n\t\t\tstate.contextLookupOffset2 = Org.Brotli.Dec.Context.LookupOffsets[contextMode + 1];\r\n\t\t}\r\n\r\n\t\tprivate static void DecodeCommandBlockSwitch(Org.Brotli.Dec.State state)\r\n\t\t{\r\n\t\t\tDecodeBlockTypeAndLength(state, 1);\r\n\t\t\tstate.treeCommandOffset = state.hGroup1.trees[state.blockTypeRb[3]];\r\n\t\t}\r\n\r\n\t\tprivate static void DecodeDistanceBlockSwitch(Org.Brotli.Dec.State state)\r\n\t\t{\r\n\t\t\tDecodeBlockTypeAndLength(state, 2);\r\n\t\t\tstate.distContextMapSlice = state.blockTypeRb[5] << DistanceContextBits;\r\n\t\t}\r\n\r\n\t\tprivate static void MaybeReallocateRingBuffer(Org.Brotli.Dec.State state)\r\n\t\t{\r\n\t\t\tint newSize = state.maxRingBufferSize;\r\n\t\t\tif ((long)newSize > state.expectedTotalSize)\r\n\t\t\t{\r\n\t\t\t\t/* TODO: Handle 2GB+ cases more gracefully. */\r\n\t\t\t\tint minimalNewSize = (int)state.expectedTotalSize + state.customDictionary.Length;\r\n\t\t\t\twhile ((newSize >> 1) > minimalNewSize)\r\n\t\t\t\t{\r\n\t\t\t\t\tnewSize >>= 1;\r\n\t\t\t\t}\r\n\t\t\t\tif (!state.inputEnd && newSize < 16384 && state.maxRingBufferSize >= 16384)\r\n\t\t\t\t{\r\n\t\t\t\t\tnewSize = 16384;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (newSize <= state.ringBufferSize)\r\n\t\t\t{\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tint ringBufferSizeWithSlack = newSize + Org.Brotli.Dec.Dictionary.MaxTransformedWordLength;\r\n\t\t\tbyte[] newBuffer = new byte[ringBufferSizeWithSlack];\r\n\t\t\tif (state.ringBuffer != null)\r\n\t\t\t{\r\n\t\t\t\tSystem.Array.Copy(state.ringBuffer, 0, newBuffer, 0, state.ringBufferSize);\r\n\t\t\t}\r\n\t\t\telse if (state.customDictionary.Length != 0)\r\n\t\t\t{\r\n\t\t\t\t/* Prepend custom dictionary, if any. */\r\n\t\t\t\tint length = state.customDictionary.Length;\r\n\t\t\t\tint offset = 0;\r\n\t\t\t\tif (length > state.maxBackwardDistance)\r\n\t\t\t\t{\r\n\t\t\t\t\toffset = length - state.maxBackwardDistance;\r\n\t\t\t\t\tlength = state.maxBackwardDistance;\r\n\t\t\t\t}\r\n\t\t\t\tSystem.Array.Copy(state.customDictionary, offset, newBuffer, 0, length);\r\n\t\t\t\tstate.pos = length;\r\n\t\t\t\tstate.bytesToIgnore = length;\r\n\t\t\t}\r\n\t\t\tstate.ringBuffer = newBuffer;\r\n\t\t\tstate.ringBufferSize = newSize;\r\n\t\t}\r\n\r\n\t\t/// <summary>Reads next metablock header.</summary>\r\n\t\t/// <param name=\"state\">decoding state</param>\r\n\t\tprivate static void ReadMetablockInfo(Org.Brotli.Dec.State state)\r\n\t\t{\r\n\t\t\tOrg.Brotli.Dec.BitReader br = state.br;\r\n\t\t\tif (state.inputEnd)\r\n\t\t\t{\r\n\t\t\t\tstate.nextRunningState = Org.Brotli.Dec.RunningState.Finished;\r\n\t\t\t\tstate.bytesToWrite = state.pos;\r\n\t\t\t\tstate.bytesWritten = 0;\r\n\t\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.Write;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t// TODO: Reset? Do we need this?\r\n\t\t\tstate.hGroup0.codes = null;\r\n\t\t\tstate.hGroup0.trees = null;\r\n\t\t\tstate.hGroup1.codes = null;\r\n\t\t\tstate.hGroup1.trees = null;\r\n\t\t\tstate.hGroup2.codes = null;\r\n\t\t\tstate.hGroup2.trees = null;\r\n\t\t\tOrg.Brotli.Dec.BitReader.ReadMoreInput(br);\r\n\t\t\tDecodeMetaBlockLength(br, state);\r\n\t\t\tif (state.metaBlockLength == 0 && !state.isMetadata)\r\n\t\t\t{\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (state.isUncompressed || state.isMetadata)\r\n\t\t\t{\r\n\t\t\t\tOrg.Brotli.Dec.BitReader.JumpToByteBoundary(br);\r\n\t\t\t\tstate.runningState = state.isMetadata ? Org.Brotli.Dec.RunningState.ReadMetadata : Org.Brotli.Dec.RunningState.CopyUncompressed;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.CompressedBlockStart;\r\n\t\t\t}\r\n\t\t\tif (state.isMetadata)\r\n\t\t\t{\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tstate.expectedTotalSize += state.metaBlockLength;\r\n\t\t\tif (state.ringBufferSize < state.maxRingBufferSize)\r\n\t\t\t{\r\n\t\t\t\tMaybeReallocateRingBuffer(state);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate static void ReadMetablockHuffmanCodesAndContextMaps(Org.Brotli.Dec.State state)\r\n\t\t{\r\n\t\t\tOrg.Brotli.Dec.BitReader br = state.br;\r\n\t\t\tfor (int i = 0; i < 3; i++)\r\n\t\t\t{\r\n\t\t\t\tstate.numBlockTypes[i] = DecodeVarLenUnsignedByte(br) + 1;\r\n\t\t\t\tstate.blockLength[i] = 1 << 28;\r\n\t\t\t\tif (state.numBlockTypes[i] > 1)\r\n\t\t\t\t{\r\n\t\t\t\t\tReadHuffmanCode(state.numBlockTypes[i] + 2, state.blockTypeTrees, i * Org.Brotli.Dec.Huffman.HuffmanMaxTableSize, br);\r\n\t\t\t\t\tReadHuffmanCode(NumBlockLengthCodes, state.blockLenTrees, i * Org.Brotli.Dec.Huffman.HuffmanMaxTableSize, br);\r\n\t\t\t\t\tstate.blockLength[i] = ReadBlockLength(state.blockLenTrees, i * Org.Brotli.Dec.Huffman.HuffmanMaxTableSize, br);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tOrg.Brotli.Dec.BitReader.ReadMoreInput(br);\r\n\t\t\tstate.distancePostfixBits = Org.Brotli.Dec.BitReader.ReadBits(br, 2);\r\n\t\t\tstate.numDirectDistanceCodes = NumDistanceShortCodes + (Org.Brotli.Dec.BitReader.ReadBits(br, 4) << state.distancePostfixBits);\r\n\t\t\tstate.distancePostfixMask = (1 << state.distancePostfixBits) - 1;\r\n\t\t\tint numDistanceCodes = state.numDirectDistanceCodes + (48 << state.distancePostfixBits);\r\n\t\t\t// TODO: Reuse?\r\n\t\t\tstate.contextModes = new byte[state.numBlockTypes[0]];\r\n\t\t\tfor (int i = 0; i < state.numBlockTypes[0]; )\r\n\t\t\t{\r\n\t\t\t\t/* Ensure that less than 256 bits read between readMoreInput. */\r\n\t\t\t\tint limit = System.Math.Min(i + 96, state.numBlockTypes[0]);\r\n\t\t\t\tfor (; i < limit; ++i)\r\n\t\t\t\t{\r\n\t\t\t\t\tstate.contextModes[i] = unchecked((byte)(Org.Brotli.Dec.BitReader.ReadBits(br, 2) << 1));\r\n\t\t\t\t}\r\n\t\t\t\tOrg.Brotli.Dec.BitReader.ReadMoreInput(br);\r\n\t\t\t}\r\n\t\t\t// TODO: Reuse?\r\n\t\t\tstate.contextMap = new byte[state.numBlockTypes[0] << LiteralContextBits];\r\n\t\t\tint numLiteralTrees = DecodeContextMap(state.numBlockTypes[0] << LiteralContextBits, state.contextMap, br);\r\n\t\t\tstate.trivialLiteralContext = true;\r\n\t\t\tfor (int j = 0; j < state.numBlockTypes[0] << LiteralContextBits; j++)\r\n\t\t\t{\r\n\t\t\t\tif (state.contextMap[j] != j >> LiteralContextBits)\r\n\t\t\t\t{\r\n\t\t\t\t\tstate.trivialLiteralContext = false;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// TODO: Reuse?\r\n\t\t\tstate.distContextMap = new byte[state.numBlockTypes[2] << DistanceContextBits];\r\n\t\t\tint numDistTrees = DecodeContextMap(state.numBlockTypes[2] << DistanceContextBits, state.distContextMap, br);\r\n\t\t\tOrg.Brotli.Dec.HuffmanTreeGroup.Init(state.hGroup0, NumLiteralCodes, numLiteralTrees);\r\n\t\t\tOrg.Brotli.Dec.HuffmanTreeGroup.Init(state.hGroup1, NumInsertAndCopyCodes, state.numBlockTypes[1]);\r\n\t\t\tOrg.Brotli.Dec.HuffmanTreeGroup.Init(state.hGroup2, numDistanceCodes, numDistTrees);\r\n\t\t\tOrg.Brotli.Dec.HuffmanTreeGroup.Decode(state.hGroup0, br);\r\n\t\t\tOrg.Brotli.Dec.HuffmanTreeGroup.Decode(state.hGroup1, br);\r\n\t\t\tOrg.Brotli.Dec.HuffmanTreeGroup.Decode(state.hGroup2, br);\r\n\t\t\tstate.contextMapSlice = 0;\r\n\t\t\tstate.distContextMapSlice = 0;\r\n\t\t\tstate.contextLookupOffset1 = Org.Brotli.Dec.Context.LookupOffsets[state.contextModes[0]];\r\n\t\t\tstate.contextLookupOffset2 = Org.Brotli.Dec.Context.LookupOffsets[state.contextModes[0] + 1];\r\n\t\t\tstate.literalTreeIndex = 0;\r\n\t\t\tstate.literalTree = state.hGroup0.trees[0];\r\n\t\t\tstate.treeCommandOffset = state.hGroup1.trees[0];\r\n\t\t\t// TODO: == 0?\r\n\t\t\tstate.blockTypeRb[0] = state.blockTypeRb[2] = state.blockTypeRb[4] = 1;\r\n\t\t\tstate.blockTypeRb[1] = state.blockTypeRb[3] = state.blockTypeRb[5] = 0;\r\n\t\t}\r\n\r\n\t\tprivate static void CopyUncompressedData(Org.Brotli.Dec.State state)\r\n\t\t{\r\n\t\t\tOrg.Brotli.Dec.BitReader br = state.br;\r\n\t\t\tbyte[] ringBuffer = state.ringBuffer;\r\n\t\t\t// Could happen if block ends at ring buffer end.\r\n\t\t\tif (state.metaBlockLength <= 0)\r\n\t\t\t{\r\n\t\t\t\tOrg.Brotli.Dec.BitReader.Reload(br);\r\n\t\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.BlockStart;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tint chunkLength = System.Math.Min(state.ringBufferSize - state.pos, state.metaBlockLength);\r\n\t\t\tOrg.Brotli.Dec.BitReader.CopyBytes(br, ringBuffer, state.pos, chunkLength);\r\n\t\t\tstate.metaBlockLength -= chunkLength;\r\n\t\t\tstate.pos += chunkLength;\r\n\t\t\tif (state.pos == state.ringBufferSize)\r\n\t\t\t{\r\n\t\t\t\tstate.nextRunningState = Org.Brotli.Dec.RunningState.CopyUncompressed;\r\n\t\t\t\tstate.bytesToWrite = state.ringBufferSize;\r\n\t\t\t\tstate.bytesWritten = 0;\r\n\t\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.Write;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tOrg.Brotli.Dec.BitReader.Reload(br);\r\n\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.BlockStart;\r\n\t\t}\r\n\r\n\t\tprivate static bool WriteRingBuffer(Org.Brotli.Dec.State state)\r\n\t\t{\r\n\t\t\t/* Ignore custom dictionary bytes. */\r\n\t\t\tif (state.bytesToIgnore != 0)\r\n\t\t\t{\r\n\t\t\t\tstate.bytesWritten += state.bytesToIgnore;\r\n\t\t\t\tstate.bytesToIgnore = 0;\r\n\t\t\t}\r\n\t\t\tint toWrite = System.Math.Min(state.outputLength - state.outputUsed, state.bytesToWrite - state.bytesWritten);\r\n\t\t\tif (toWrite != 0)\r\n\t\t\t{\r\n\t\t\t\tSystem.Array.Copy(state.ringBuffer, state.bytesWritten, state.output, state.outputOffset + state.outputUsed, toWrite);\r\n\t\t\t\tstate.outputUsed += toWrite;\r\n\t\t\t\tstate.bytesWritten += toWrite;\r\n\t\t\t}\r\n\t\t\treturn state.outputUsed < state.outputLength;\r\n\t\t}\r\n\r\n\t\tinternal static void SetCustomDictionary(Org.Brotli.Dec.State state, byte[] data)\r\n\t\t{\r\n\t\t\tstate.customDictionary = (data == null) ? new byte[0] : data;\r\n\t\t}\r\n\r\n\t\t/// <summary>Actual decompress implementation.</summary>\r\n\t\tinternal static void Decompress(Org.Brotli.Dec.State state)\r\n\t\t{\r\n\t\t\tif (state.runningState == Org.Brotli.Dec.RunningState.Uninitialized)\r\n\t\t\t{\r\n\t\t\t\tthrow new System.InvalidOperationException(\"Can't decompress until initialized\");\r\n\t\t\t}\r\n\t\t\tif (state.runningState == Org.Brotli.Dec.RunningState.Closed)\r\n\t\t\t{\r\n\t\t\t\tthrow new System.InvalidOperationException(\"Can't decompress after close\");\r\n\t\t\t}\r\n\t\t\tOrg.Brotli.Dec.BitReader br = state.br;\r\n\t\t\tint ringBufferMask = state.ringBufferSize - 1;\r\n\t\t\tbyte[] ringBuffer = state.ringBuffer;\r\n\t\t\twhile (state.runningState != Org.Brotli.Dec.RunningState.Finished)\r\n\t\t\t{\r\n\t\t\t\tswitch (state.runningState)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase Org.Brotli.Dec.RunningState.BlockStart:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// TODO: extract cases to methods for the better readability.\r\n\t\t\t\t\t\tif (state.metaBlockLength < 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Invalid metablock length\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tReadMetablockInfo(state);\r\n\t\t\t\t\t\t/* Ring-buffer would be reallocated here. */\r\n\t\t\t\t\t\tringBufferMask = state.ringBufferSize - 1;\r\n\t\t\t\t\t\tringBuffer = state.ringBuffer;\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase Org.Brotli.Dec.RunningState.CompressedBlockStart:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tReadMetablockHuffmanCodesAndContextMaps(state);\r\n\t\t\t\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.MainLoop;\r\n\t\t\t\t\t\tgoto case Org.Brotli.Dec.RunningState.MainLoop;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase Org.Brotli.Dec.RunningState.MainLoop:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// Fall through\r\n\t\t\t\t\t\tif (state.metaBlockLength <= 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.BlockStart;\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tOrg.Brotli.Dec.BitReader.ReadMoreInput(br);\r\n\t\t\t\t\t\tif (state.blockLength[1] == 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tDecodeCommandBlockSwitch(state);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tstate.blockLength[1]--;\r\n\t\t\t\t\t\tOrg.Brotli.Dec.BitReader.FillBitWindow(br);\r\n\t\t\t\t\t\tint cmdCode = ReadSymbol(state.hGroup1.codes, state.treeCommandOffset, br);\r\n\t\t\t\t\t\tint rangeIdx = (int)(((uint)cmdCode) >> 6);\r\n\t\t\t\t\t\tstate.distanceCode = 0;\r\n\t\t\t\t\t\tif (rangeIdx >= 2)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\trangeIdx -= 2;\r\n\t\t\t\t\t\t\tstate.distanceCode = -1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tint insertCode = Org.Brotli.Dec.Prefix.InsertRangeLut[rangeIdx] + (((int)(((uint)cmdCode) >> 3)) & 7);\r\n\t\t\t\t\t\tint copyCode = Org.Brotli.Dec.Prefix.CopyRangeLut[rangeIdx] + (cmdCode & 7);\r\n\t\t\t\t\t\tstate.insertLength = Org.Brotli.Dec.Prefix.InsertLengthOffset[insertCode] + Org.Brotli.Dec.BitReader.ReadBits(br, Org.Brotli.Dec.Prefix.InsertLengthNBits[insertCode]);\r\n\t\t\t\t\t\tstate.copyLength = Org.Brotli.Dec.Prefix.CopyLengthOffset[copyCode] + Org.Brotli.Dec.BitReader.ReadBits(br, Org.Brotli.Dec.Prefix.CopyLengthNBits[copyCode]);\r\n\t\t\t\t\t\tstate.j = 0;\r\n\t\t\t\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.InsertLoop;\r\n\t\t\t\t\t\tgoto case Org.Brotli.Dec.RunningState.InsertLoop;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase Org.Brotli.Dec.RunningState.InsertLoop:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// Fall through\r\n\t\t\t\t\t\tif (state.trivialLiteralContext)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\twhile (state.j < state.insertLength)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tOrg.Brotli.Dec.BitReader.ReadMoreInput(br);\r\n\t\t\t\t\t\t\t\tif (state.blockLength[0] == 0)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tDecodeLiteralBlockSwitch(state);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tstate.blockLength[0]--;\r\n\t\t\t\t\t\t\t\tOrg.Brotli.Dec.BitReader.FillBitWindow(br);\r\n\t\t\t\t\t\t\t\tringBuffer[state.pos] = unchecked((byte)ReadSymbol(state.hGroup0.codes, state.literalTree, br));\r\n\t\t\t\t\t\t\t\tstate.j++;\r\n\t\t\t\t\t\t\t\tif (state.pos++ == ringBufferMask)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tstate.nextRunningState = Org.Brotli.Dec.RunningState.InsertLoop;\r\n\t\t\t\t\t\t\t\t\tstate.bytesToWrite = state.ringBufferSize;\r\n\t\t\t\t\t\t\t\t\tstate.bytesWritten = 0;\r\n\t\t\t\t\t\t\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.Write;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tint prevByte1 = ringBuffer[(state.pos - 1) & ringBufferMask] & unchecked((int)(0xFF));\r\n\t\t\t\t\t\t\tint prevByte2 = ringBuffer[(state.pos - 2) & ringBufferMask] & unchecked((int)(0xFF));\r\n\t\t\t\t\t\t\twhile (state.j < state.insertLength)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tOrg.Brotli.Dec.BitReader.ReadMoreInput(br);\r\n\t\t\t\t\t\t\t\tif (state.blockLength[0] == 0)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tDecodeLiteralBlockSwitch(state);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tint literalTreeIndex = state.contextMap[state.contextMapSlice + (Org.Brotli.Dec.Context.Lookup[state.contextLookupOffset1 + prevByte1] | Org.Brotli.Dec.Context.Lookup[state.contextLookupOffset2 + prevByte2])] & unchecked((int)(0xFF));\r\n\t\t\t\t\t\t\t\tstate.blockLength[0]--;\r\n\t\t\t\t\t\t\t\tprevByte2 = prevByte1;\r\n\t\t\t\t\t\t\t\tOrg.Brotli.Dec.BitReader.FillBitWindow(br);\r\n\t\t\t\t\t\t\t\tprevByte1 = ReadSymbol(state.hGroup0.codes, state.hGroup0.trees[literalTreeIndex], br);\r\n\t\t\t\t\t\t\t\tringBuffer[state.pos] = unchecked((byte)prevByte1);\r\n\t\t\t\t\t\t\t\tstate.j++;\r\n\t\t\t\t\t\t\t\tif (state.pos++ == ringBufferMask)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tstate.nextRunningState = Org.Brotli.Dec.RunningState.InsertLoop;\r\n\t\t\t\t\t\t\t\t\tstate.bytesToWrite = state.ringBufferSize;\r\n\t\t\t\t\t\t\t\t\tstate.bytesWritten = 0;\r\n\t\t\t\t\t\t\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.Write;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (state.runningState != Org.Brotli.Dec.RunningState.InsertLoop)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tstate.metaBlockLength -= state.insertLength;\r\n\t\t\t\t\t\tif (state.metaBlockLength <= 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.MainLoop;\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (state.distanceCode < 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tOrg.Brotli.Dec.BitReader.ReadMoreInput(br);\r\n\t\t\t\t\t\t\tif (state.blockLength[2] == 0)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tDecodeDistanceBlockSwitch(state);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tstate.blockLength[2]--;\r\n\t\t\t\t\t\t\tOrg.Brotli.Dec.BitReader.FillBitWindow(br);\r\n\t\t\t\t\t\t\tstate.distanceCode = ReadSymbol(state.hGroup2.codes, state.hGroup2.trees[state.distContextMap[state.distContextMapSlice + (state.copyLength > 4 ? 3 : state.copyLength - 2)] & unchecked((int)(0xFF))], br);\r\n\t\t\t\t\t\t\tif (state.distanceCode >= state.numDirectDistanceCodes)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tstate.distanceCode -= state.numDirectDistanceCodes;\r\n\t\t\t\t\t\t\t\tint postfix = state.distanceCode & state.distancePostfixMask;\r\n\t\t\t\t\t\t\t\tstate.distanceCode = (int)(((uint)state.distanceCode) >> state.distancePostfixBits);\r\n\t\t\t\t\t\t\t\tint n = ((int)(((uint)state.distanceCode) >> 1)) + 1;\r\n\t\t\t\t\t\t\t\tint offset = ((2 + (state.distanceCode & 1)) << n) - 4;\r\n\t\t\t\t\t\t\t\tstate.distanceCode = state.numDirectDistanceCodes + postfix + ((offset + Org.Brotli.Dec.BitReader.ReadBits(br, n)) << state.distancePostfixBits);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Convert the distance code to the actual distance by possibly looking up past distances\r\n\t\t\t\t\t\t// from the ringBuffer.\r\n\t\t\t\t\t\tstate.distance = TranslateShortCodes(state.distanceCode, state.distRb, state.distRbIdx);\r\n\t\t\t\t\t\tif (state.distance < 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Negative distance\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// COV_NF_LINE\r\n\t\t\t\t\t\tif (state.maxDistance != state.maxBackwardDistance && state.pos < state.maxBackwardDistance)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tstate.maxDistance = state.pos;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tstate.maxDistance = state.maxBackwardDistance;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tstate.copyDst = state.pos;\r\n\t\t\t\t\t\tif (state.distance > state.maxDistance)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.Transform;\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (state.distanceCode > 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tstate.distRb[state.distRbIdx & 3] = state.distance;\r\n\t\t\t\t\t\t\tstate.distRbIdx++;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (state.copyLength > state.metaBlockLength)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Invalid backward reference\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// COV_NF_LINE\r\n\t\t\t\t\t\tstate.j = 0;\r\n\t\t\t\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.CopyLoop;\r\n\t\t\t\t\t\tgoto case Org.Brotli.Dec.RunningState.CopyLoop;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase Org.Brotli.Dec.RunningState.CopyLoop:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// fall through\r\n\t\t\t\t\t\tint src = (state.pos - state.distance) & ringBufferMask;\r\n\t\t\t\t\t\tint dst = state.pos;\r\n\t\t\t\t\t\tint copyLength = state.copyLength - state.j;\r\n\t\t\t\t\t\tif ((src + copyLength < ringBufferMask) && (dst + copyLength < ringBufferMask))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tfor (int k = 0; k < copyLength; ++k)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tringBuffer[dst++] = ringBuffer[src++];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tstate.j += copyLength;\r\n\t\t\t\t\t\t\tstate.metaBlockLength -= copyLength;\r\n\t\t\t\t\t\t\tstate.pos += copyLength;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tfor (; state.j < state.copyLength; )\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tringBuffer[state.pos] = ringBuffer[(state.pos - state.distance) & ringBufferMask];\r\n\t\t\t\t\t\t\t\tstate.metaBlockLength--;\r\n\t\t\t\t\t\t\t\tstate.j++;\r\n\t\t\t\t\t\t\t\tif (state.pos++ == ringBufferMask)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tstate.nextRunningState = Org.Brotli.Dec.RunningState.CopyLoop;\r\n\t\t\t\t\t\t\t\t\tstate.bytesToWrite = state.ringBufferSize;\r\n\t\t\t\t\t\t\t\t\tstate.bytesWritten = 0;\r\n\t\t\t\t\t\t\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.Write;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (state.runningState == Org.Brotli.Dec.RunningState.CopyLoop)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.MainLoop;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase Org.Brotli.Dec.RunningState.Transform:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (state.copyLength >= Org.Brotli.Dec.Dictionary.MinWordLength && state.copyLength <= Org.Brotli.Dec.Dictionary.MaxWordLength)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tint offset = Org.Brotli.Dec.Dictionary.OffsetsByLength[state.copyLength];\r\n\t\t\t\t\t\t\tint wordId = state.distance - state.maxDistance - 1;\r\n\t\t\t\t\t\t\tint shift = Org.Brotli.Dec.Dictionary.SizeBitsByLength[state.copyLength];\r\n\t\t\t\t\t\t\tint mask = (1 << shift) - 1;\r\n\t\t\t\t\t\t\tint wordIdx = wordId & mask;\r\n\t\t\t\t\t\t\tint transformIdx = (int)(((uint)wordId) >> shift);\r\n\t\t\t\t\t\t\toffset += wordIdx * state.copyLength;\r\n\t\t\t\t\t\t\tif (transformIdx < Org.Brotli.Dec.Transform.Transforms.Length)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tint len = Org.Brotli.Dec.Transform.TransformDictionaryWord(ringBuffer, state.copyDst, Org.Brotli.Dec.Dictionary.GetData(), offset, state.copyLength, Org.Brotli.Dec.Transform.Transforms[transformIdx]);\r\n\t\t\t\t\t\t\t\tstate.copyDst += len;\r\n\t\t\t\t\t\t\t\tstate.pos += len;\r\n\t\t\t\t\t\t\t\tstate.metaBlockLength -= len;\r\n\t\t\t\t\t\t\t\tif (state.copyDst >= state.ringBufferSize)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tstate.nextRunningState = Org.Brotli.Dec.RunningState.CopyWrapBuffer;\r\n\t\t\t\t\t\t\t\t\tstate.bytesToWrite = state.ringBufferSize;\r\n\t\t\t\t\t\t\t\t\tstate.bytesWritten = 0;\r\n\t\t\t\t\t\t\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.Write;\r\n\t\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Invalid backward reference\");\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// COV_NF_LINE\r\n\t\t\t\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Invalid backward reference\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// COV_NF_LINE\r\n\t\t\t\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.MainLoop;\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase Org.Brotli.Dec.RunningState.CopyWrapBuffer:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tSystem.Array.Copy(ringBuffer, state.ringBufferSize, ringBuffer, 0, state.copyDst - state.ringBufferSize);\r\n\t\t\t\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.MainLoop;\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase Org.Brotli.Dec.RunningState.ReadMetadata:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twhile (state.metaBlockLength > 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tOrg.Brotli.Dec.BitReader.ReadMoreInput(br);\r\n\t\t\t\t\t\t\t// Optimize\r\n\t\t\t\t\t\t\tOrg.Brotli.Dec.BitReader.ReadBits(br, 8);\r\n\t\t\t\t\t\t\tstate.metaBlockLength--;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.BlockStart;\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase Org.Brotli.Dec.RunningState.CopyUncompressed:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tCopyUncompressedData(state);\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcase Org.Brotli.Dec.RunningState.Write:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (!WriteRingBuffer(state))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t// Output buffer is full.\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (state.pos >= state.maxBackwardDistance)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tstate.maxDistance = state.maxBackwardDistance;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tstate.pos &= ringBufferMask;\r\n\t\t\t\t\t\tstate.runningState = state.nextRunningState;\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Unexpected state \" + state.runningState);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (state.runningState == Org.Brotli.Dec.RunningState.Finished)\r\n\t\t\t{\r\n\t\t\t\tif (state.metaBlockLength < 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Invalid metablock length\");\r\n\t\t\t\t}\r\n\t\t\t\tOrg.Brotli.Dec.BitReader.JumpToByteBoundary(br);\r\n\t\t\t\tOrg.Brotli.Dec.BitReader.CheckHealth(state.br, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/org/brotli/dec/DecodeTest.cs",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\t/// <summary>\r\n\t/// Tests for\r\n\t/// <see cref=\"Decode\"/>\r\n\t/// .\r\n\t/// </summary>\r\n\tpublic class DecodeTest\r\n\t{\r\n\t\t/// <exception cref=\"System.IO.IOException\"/>\r\n\t\tprivate byte[] Decompress(byte[] data, bool byByte)\r\n\t\t{\r\n\t\t\tbyte[] buffer = new byte[65536];\r\n\t\t\tSystem.IO.MemoryStream input = new System.IO.MemoryStream(data);\r\n\t\t\tSystem.IO.MemoryStream output = new System.IO.MemoryStream();\r\n\t\t\tOrg.Brotli.Dec.BrotliInputStream brotliInput = new Org.Brotli.Dec.BrotliInputStream(input);\r\n\t\t\tif (byByte)\r\n\t\t\t{\r\n\t\t\t\tbyte[] oneByte = new byte[1];\r\n\t\t\t\twhile (true)\r\n\t\t\t\t{\r\n\t\t\t\t\tint next = brotliInput.ReadByte();\r\n\t\t\t\t\tif (next == -1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\toneByte[0] = unchecked((byte)next);\r\n\t\t\t\t\toutput.Write(oneByte, 0, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\twhile (true)\r\n\t\t\t\t{\r\n\t\t\t\t\tint len = brotliInput.Read(buffer, 0, buffer.Length);\r\n\t\t\t\t\tif (len <= 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\toutput.Write(buffer, 0, len);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbrotliInput.Close();\r\n\t\t\treturn output.ToArray();\r\n\t\t}\r\n\r\n\t\t/// <exception cref=\"System.IO.IOException\"/>\r\n\t\tprivate byte[] DecompressWithDictionary(byte[] data, byte[] dictionary)\r\n\t\t{\r\n\t\t\tbyte[] buffer = new byte[65536];\r\n\t\t\tSystem.IO.MemoryStream input = new System.IO.MemoryStream(data);\r\n\t\t\tSystem.IO.MemoryStream output = new System.IO.MemoryStream();\r\n\t\t\tOrg.Brotli.Dec.BrotliInputStream brotliInput = new Org.Brotli.Dec.BrotliInputStream(input, Org.Brotli.Dec.BrotliInputStream.DefaultInternalBufferSize, dictionary);\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tint len = brotliInput.Read(buffer, 0, buffer.Length);\r\n\t\t\t\tif (len <= 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\toutput.Write(buffer, 0, len);\r\n\t\t\t}\r\n\t\t\tbrotliInput.Close();\r\n\t\t\treturn output.ToArray();\r\n\t\t}\r\n\r\n\t\t/// <exception cref=\"System.IO.IOException\"/>\r\n\t\tprivate void CheckDecodeResourceWithDictionary(string expected, string compressed, string dictionary)\r\n\t\t{\r\n\t\t\tbyte[] expectedBytes = Org.Brotli.Dec.Transform.ReadUniBytes(expected);\r\n\t\t\tbyte[] compressedBytes = Org.Brotli.Dec.Transform.ReadUniBytes(compressed);\r\n\t\t\tbyte[] dictionaryBytes = Org.Brotli.Dec.Transform.ReadUniBytes(dictionary);\r\n\t\t\tbyte[] actual = DecompressWithDictionary(compressedBytes, dictionaryBytes);\r\n\t\t\tNUnit.Framework.Assert.AreEqual(expectedBytes, actual);\r\n\t\t}\r\n\r\n\t\t/// <exception cref=\"System.IO.IOException\"/>\r\n\t\tprivate void CheckDecodeResource(string expected, string compressed)\r\n\t\t{\r\n\t\t\tbyte[] expectedBytes = Org.Brotli.Dec.Transform.ReadUniBytes(expected);\r\n\t\t\tbyte[] compressedBytes = Org.Brotli.Dec.Transform.ReadUniBytes(compressed);\r\n\t\t\tbyte[] actual = Decompress(compressedBytes, false);\r\n\t\t\tNUnit.Framework.Assert.AreEqual(expectedBytes, actual);\r\n\t\t\tbyte[] actualByByte = Decompress(compressedBytes, true);\r\n\t\t\tNUnit.Framework.Assert.AreEqual(expectedBytes, actualByByte);\r\n\t\t}\r\n\r\n\t\t/// <exception cref=\"System.IO.IOException\"/>\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestEmpty()\r\n\t\t{\r\n\t\t\tCheckDecodeResource(string.Empty, \"\\u0006\");\r\n\t\t}\r\n\r\n\t\t/// <exception cref=\"System.IO.IOException\"/>\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestX()\r\n\t\t{\r\n\t\t\tCheckDecodeResource(\"X\", \"\\u000B\\u0000\\u0080X\\u0003\");\r\n\t\t}\r\n\r\n\t\t/// <exception cref=\"System.IO.IOException\"/>\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestX10Y10()\r\n\t\t{\r\n\t\t\tCheckDecodeResource(\"XXXXXXXXXXYYYYYYYYYY\", \"\\u001B\\u0013\\u0000\\u0000\\u00A4\\u00B0\\u00B2\\u00EA\\u0081G\\u0002\\u008A\");\r\n\t\t}\r\n\r\n\t\t/// <exception cref=\"System.IO.IOException\"/>\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestX64()\r\n\t\t{\r\n\t\t\tCheckDecodeResource(\"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\", \"\\u001B\\u003F\\u0000\\u0000$\\u00B0\\u00E2\\u0099\\u0080\\u0012\");\r\n\t\t}\r\n\r\n\t\t/// <exception cref=\"System.IO.IOException\"/>\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestUkkonooa()\r\n\t\t{\r\n\t\t\tCheckDecodeResource(\"ukko nooa, ukko nooa oli kunnon mies, kun han meni saunaan, \" + \"pisti laukun naulaan, ukko nooa, ukko nooa oli kunnon mies.\", \"\\u001Bv\\u0000\\u0000\\u0014J\\u00AC\\u009Bz\\u00BD\\u00E1\\u0097\\u009D\\u007F\\u008E\\u00C2\\u0082\" + \"6\\u000E\\u009C\\u00E0\\u0090\\u0003\\u00F7\\u008B\\u009E8\\u00E6\\u00B6\\u0000\\u00AB\\u00C3\\u00CA\"\r\n\t\t\t\t + \"\\u00A0\\u00C2\\u00DAf6\\u00DC\\u00CD\\u0080\\u008D.!\\u00D7n\\u00E3\\u00EAL\\u00B8\\u00F0\\u00D2\" + \"\\u00B8\\u00C7\\u00C2pM:\\u00F0i~\\u00A1\\u00B8Es\\u00AB\\u00C4W\\u001E\");\r\n\t\t}\r\n\r\n\t\t/// <exception cref=\"System.IO.IOException\"/>\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestMonkey()\r\n\t\t{\r\n\t\t\tCheckDecodeResource(\"znxcvnmz,xvnm.,zxcnv.,xcn.z,vn.zvn.zxcvn.,zxcn.vn.v,znm.,vnzx.,vnzxc.vn.z,vnz.,nv.z,nvmz\" + \"xc,nvzxcvcnm.,vczxvnzxcnvmxc.zmcnvzm.,nvmc,nzxmc,vn.mnnmzxc,vnxcnmv,znvzxcnmv,.xcnvm,zxc\" + \"nzxv.zx,qweryweurqioweupropqwutioweupqrioweutiopweuriopweuriopqwurioputiopqwuriowuqeriou\"\r\n\t\t\t\t + \"pqweropuweropqwurweuqriopuropqwuriopuqwriopuqweopruioqweurqweuriouqweopruioupqiytioqtyio\" + \"wtyqptypryoqweutioioqtweqruowqeytiowquiourowetyoqwupiotweuqiorweuqroipituqwiorqwtioweuri\" + \"ouytuioerytuioweryuitoweytuiweyuityeruirtyuqriqweuropqweiruioqweurioqwuerioqwyuituierwot\"\r\n\t\t\t\t + \"ueryuiotweyrtuiwertyioweryrueioqptyioruyiopqwtjkasdfhlafhlasdhfjklashjkfhasjklfhklasjdfh\" + \"klasdhfjkalsdhfklasdhjkflahsjdkfhklasfhjkasdfhasfjkasdhfklsdhalghhaf;hdklasfhjklashjklfa\" + \"sdhfasdjklfhsdjklafsd;hkldadfjjklasdhfjasddfjklfhakjklasdjfkl;asdjfasfljasdfhjklasdfhjka\"\r\n\t\t\t\t + \"ghjkashf;djfklasdjfkljasdklfjklasdjfkljasdfkljaklfj\", \"\\u001BJ\\u0003\\u0000\\u008C\\u0094n\\u00DE\\u00B4\\u00D7\\u0096\\u00B1x\\u0086\\u00F2-\\u00E1\\u001A\" + \"\\u00BC\\u000B\\u001C\\u00BA\\u00A9\\u00C7\\u00F7\\u00CCn\\u00B2B4QD\\u008BN\\u0013\\b\\u00A0\\u00CDn\"\r\n\t\t\t\t + \"\\u00E8,\\u00A5S\\u00A1\\u009C],\\u001D#\\u001A\\u00D2V\\u00BE\\u00DB\\u00EB&\\u00BA\\u0003e|\\u0096j\" + \"\\u00A2v\\u00EC\\u00EF\\u0087G3\\u00D6\\'\\u000Ec\\u0095\\u00E2\\u001D\\u008D,\\u00C5\\u00D1(\\u009F`\" + \"\\u0094o\\u0002\\u008B\\u00DD\\u00AAd\\u0094,\\u001E;e|\\u0007EZ\\u00B2\\u00E2\\u00FCI\\u0081,\\u009F\"\r\n\t\t\t\t + \"@\\u00AE\\u00EFh\\u0081\\u00AC\\u0016z\\u000F\\u00F5;m\\u001C\\u00B9\\u001E-_\\u00D5\\u00C8\\u00AF^\" + \"\\u0085\\u00AA\\u0005\\u00BESu\\u00C2\\u00B0\\\"\\u008A\\u0015\\u00C6\\u00A3\\u00B1\\u00E6B\\u0014\" + \"\\u00F4\\u0084TS\\u0019_\\u00BE\\u00C3\\u00F2\\u001D\\u00D1\\u00B7\\u00E5\\u00DD\\u00B6\\u00D9#\\u00C6\"\r\n\t\t\t\t + \"\\u00F6\\u009F\\u009E\\u00F6Me0\\u00FB\\u00C0qE\\u0004\\u00AD\\u0003\\u00B5\\u00BE\\u00C9\\u00CB\" + \"\\u00FD\\u00E2PZFt\\u0004\\r\\u00FF \\u0004w\\u00B2m\\'\\u00BFG\\u00A9\\u009D\\u001B\\u0096,b\\u0090#\" + \"\\u008B\\u00E0\\u00F8\\u001D\\u00CF\\u00AF\\u001D=\\u00EE\\u008A\\u00C8u#f\\u00DD\\u00DE\\u00D6m\"\r\n\t\t\t\t + \"\\u00E3*\\u0082\\u008Ax\\u008A\\u00DB\\u00E6 L\\u00B7\\\\c\\u00BA0\\u00E3?\\u00B6\\u00EE\\u008C\\\"\" + \"\\u00A2*\\u00B0\\\"\\n\\u0099\\u00FF=bQ\\u00EE\\b\\u00F6=J\\u00E4\\u00CC\\u00EF\\\"\\u0087\\u0011\\u00E2\" + \"\\u0083(\\u00E4\\u00F5\\u008F5\\u0019c[\\u00E1Z\\u0092s\\u00DD\\u00A1P\\u009D8\\\\\\u00EB\\u00B5\\u0003\"\r\n\t\t\t\t + \"jd\\u0090\\u0094\\u00C8\\u008D\\u00FB/\\u008A\\u0086\\\"\\u00CC\\u001D\\u0087\\u00E0H\\n\\u0096w\\u00909\" + \"\\u00C6##H\\u00FB\\u0011GV\\u00CA \\u00E3B\\u0081\\u00F7w2\\u00C1\\u00A5\\\\@!e\\u0017@)\\u0017\\u0017\" + \"lV2\\u00988\\u0006\\u00DC\\u0099M3)\\u00BB\\u0002\\u00DFL&\\u0093l\\u0017\\u0082\\u0086 \\u00D7\"\r\n\t\t\t\t + \"\\u0003y}\\u009A\\u0000\\u00D7\\u0087\\u0000\\u00E7\\u000Bf\\u00E3Lfqg\\b2\\u00F9\\b>\\u00813\\u00CD\" + \"\\u0017r1\\u00F0\\u00B8\\u0094RK\\u00901\\u008Eh\\u00C1\\u00EF\\u0090\\u00C9\\u00E5\\u00F2a\\tr%\" + \"\\u00AD\\u00EC\\u00C5b\\u00C0\\u000B\\u0012\\u0005\\u00F7\\u0091u\\r\\u00EEa..\\u0019\\t\\u00C2\\u0003\"\r\n\t\t\t\t);\r\n\t\t}\r\n\r\n\t\t/// <exception cref=\"System.IO.IOException\"/>\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestFox()\r\n\t\t{\r\n\t\t\tCheckDecodeResource(\"The quick brown fox jumps over the lazy dog\", \"\\u001B*\\u0000\\u0000\\u0004\\u0004\\u00BAF:\\u0085\\u0003\\u00E9\\u00FA\\f\\u0091\\u0002H\\u0011,\" + \"\\u00F3\\u008A:\\u00A3V\\u007F\\u001A\\u00AE\\u00BF\\u00A4\\u00AB\\u008EM\\u00BF\\u00ED\\u00E2\\u0004K\"\r\n\t\t\t\t + \"\\u0091\\u00FF\\u0087\\u00E9\\u001E\");\r\n\t\t}\r\n\r\n\t\t/// <exception cref=\"System.IO.IOException\"/>\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestFoxFox()\r\n\t\t{\r\n\t\t\tCheckDecodeResourceWithDictionary(\"The quick brown fox jumps over the lazy dog\", \"\\u001B*\\u0000\\u0000 \\u0000\\u00C2\\u0098\\u00B0\\u00CA\\u0001\", \"The quick brown fox jumps over the lazy dog\");\r\n\t\t}\r\n\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestUtils()\r\n\t\t{\r\n\t\t\tnew Org.Brotli.Dec.Context();\r\n\t\t\tnew Org.Brotli.Dec.Decode();\r\n\t\t\tnew Org.Brotli.Dec.Dictionary();\r\n\t\t\tnew Org.Brotli.Dec.Huffman();\r\n\t\t\tnew Org.Brotli.Dec.Prefix();\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/org/brotli/dec/Dictionary.cs",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\t/// <summary>Collection of static dictionary words.</summary>\r\n\t/// <remarks>\r\n\t/// Collection of static dictionary words.\r\n\t/// <p>Dictionary content is loaded from binary resource when\r\n\t/// <see cref=\"GetData()\"/>\r\n\t/// is executed for the\r\n\t/// first time. Consequently, it saves memory and CPU in case dictionary is not required.\r\n\t/// <p>One possible drawback is that multiple threads that need dictionary data may be blocked (only\r\n\t/// once in each classworld). To avoid this, it is enough to call\r\n\t/// <see cref=\"GetData()\"/>\r\n\t/// proactively.\r\n\t/// </remarks>\r\n\tinternal sealed class Dictionary\r\n\t{\r\n\t\t/// <summary>\"Initialization-on-demand holder idiom\" implementation.</summary>\r\n\t\t/// <remarks>\r\n\t\t/// \"Initialization-on-demand holder idiom\" implementation.\r\n\t\t/// <p>This static class definition is not initialized until the JVM determines that it must be\r\n\t\t/// executed (when the static method\r\n\t\t/// <see cref=\"GetData()\"/>\r\n\t\t/// is invoked).\r\n\t\t/// </remarks>\r\n\t\tprivate class DataHolder0\r\n\t\t{\r\n\t\t\tinternal static string GetData()\r\n\t\t\t{\r\n\t\t\t\treturn \"timedownlifeleftbackcodedatashowonlysitecityopenjustlikefreeworktextyearoverbodyloveformbookplaylivelinehelphomesidemorewordlongthemviewfindpagedaysfullheadtermeachareafromtruemarkableuponhighdatelandnewsevennextcasebothpostusedmadehandherewhatnameLinkblogsizebaseheldmakemainuser') +holdendswithNewsreadweresigntakehavegameseencallpathwellplusmenufilmpartjointhislistgoodneedwayswestjobsmindalsologorichuseslastteamarmyfoodkingwilleastwardbestfirePageknowaway.pngmovethanloadgiveselfnotemuchfeedmanyrockicononcelookhidediedHomerulehostajaxinfoclublawslesshalfsomesuchzone100%onescareTimeracebluefourweekfacehopegavehardlostwhenparkkeptpassshiproomHTMLplanTypedonesavekeepflaglinksoldfivetookratetownjumpthusdarkcardfilefearstaykillthatfallautoever.comtalkshopvotedeepmoderestturnbornbandfellroseurl(skinrolecomeactsagesmeetgold.jpgitemvaryfeltthensenddropViewcopy1.0\\\"</a>stopelseliestourpack.gifpastcss?graymean&gt;rideshotlatesaidroadvar feeljohnrickportfast'UA-dead</b>poorbilltypeU.S.woodmust2px;Inforankwidewantwalllead[0];paulwavesure$('#waitmassarmsgoesgainlangpaid!-- lockunitrootwalkfirmwifexml\\\"songtest20pxkindrowstoolfontmailsafestarmapscorerainflowbabyspansays4px;6px;artsfootrealwikiheatsteptriporg/lakeweaktoldFormcastfansbankveryrunsjulytask1px;goalgrewslowedgeid=\\\"sets5px;.js?40pxif (soonseatnonetubezerosentreedfactintogiftharm18pxcamehillboldzoomvoideasyringfillpeakinitcost3px;jacktagsbitsrolleditknewnear<!--growJSONdutyNamesaleyou lotspainjazzcoldeyesfishwww.risktabsprev10pxrise25pxBlueding300,ballfordearnwildbox.fairlackverspairjunetechif(!pickevil$(\\\"#warmlorddoespull,000ideadrawhugespotfundburnhrefcellkeystickhourlossfuel12pxsuitdealRSS\\\"agedgreyGET\\\"easeaimsgirlaids8px;navygridtips#999warsladycars); }php?helltallwhomzh:\\u00E5*/\\r\\n 100hall.\\n\\nA7px;pushchat0px;crew*/</hash75pxflatrare && tellcampontolaidmissskiptentfinemalegetsplot400,\\r\\n\\r\\ncoolfeet.php<br>ericmostguidbelldeschairmathatom/img&#82luckcent000;tinygonehtmlselldrugFREEnodenick?id=losenullvastwindRSS wearrelybeensamedukenasacapewishgulfT23:hitsslotgatekickblurthey15px''););\\\">msiewinsbirdsortbetaseekT18:ordstreemall60pxfarm\\u00E2\\u0080\\u0099sboys[0].');\\\"POSTbearkids);}}marytend(UK)quadzh:\\u00E6-siz----prop');\\rliftT19:viceandydebt>RSSpoolneckblowT16:doorevalT17:letsfailoralpollnovacolsgene \\u00E2\\u0080\\u0094softrometillross<h3>pourfadepink<tr>mini)|!(minezh:\\u00E8barshear00);milk -->ironfreddiskwentsoilputs/js/holyT22:ISBNT20:adamsees<h2>json', 'contT21: RSSloopasiamoon</p>soulLINEfortcartT14:<h1>80px!--<9px;T04:mike:46ZniceinchYorkricezh:\\u00E4'));puremageparatonebond:37Z_of_']);000,zh:\\u00E7tankyardbowlbush:56ZJava30px\\n|}\\n%C3%:34ZjeffEXPIcashvisagolfsnowzh:\\u00E9quer.csssickmeatmin.binddellhirepicsrent:36ZHTTP-201fotowolfEND xbox:54ZBODYdick;\\n}\\nexit:35Zvarsbeat'});diet999;anne}}</[i].Langkm\\u00C2\\u00B2wiretoysaddssealalex;\\n\\t}echonine.org005)tonyjewssandlegsroof000) 200winegeardogsbootgarycutstyletemption.xmlcockgang$('.50pxPh.Dmiscalanloandeskmileryanunixdisc);}\\ndustclip).\\n\\n70px-200DVDs7]><tapedemoi++)wageeurophiloptsholeFAQsasin-26TlabspetsURL bulkcook;}\\r\\nHEAD[0])abbrjuan(198leshtwin</i>sonyguysfuckpipe|-\\n!002)ndow[1];[];\\nLog salt\\r\\n\\t\\tbangtrimbath){\\r\\n00px\\n});ko:\\u00ECfeesad>\\rs:// [];tollplug(){\\n{\\r\\n .js'200pdualboat.JPG);\\n}quot);\\n\\n');\\n\\r\\n}\\r201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037201320122011201020092008200720062005200420032002200120001999199819971996199519941993199219911990198919881987198619851984198319821981198019791978197719761975197419731972197119701969196819671966196519641963196219611960195919581957195619551954195319521951195010001024139400009999comom\\u00C3\\u00A1sesteestaperotodohacecadaa\\u00C3\\u00B1obiend\\u00C3\\u00ADaas\\u00C3\\u00ADvidacasootroforosolootracualdijosidograntipotemadebealgoqu\\u00C3\\u00A9estonadatrespococasabajotodasinoaguapuesunosantediceluisellamayozonaamorpisoobraclicellodioshoracasi\\u00D0\\u00B7\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00B0\\u00D0\\u00BE\\u00D0\\u00BC\\u00D1\\u0080\\u00D0\\u00B0\\u00D1\\u0080\\u00D1\\u0083\\u00D1\\u0082\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00B5\\u00D0\\u00BF\\u00D0\\u00BE\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00B8\\u00D0\\u00B7\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00B4\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00B6\\u00D0\\u00B5\\u00D0\\u00BE\\u00D0\\u00BD\\u00D0\\u00B8\\u00D1\\u0085\\u00D0\\u009D\\u00D0\\u00B0\\u00D0\\u00B5\\u00D0\\u00B5\\u00D0\\u00B1\\u00D1\\u008B\\u00D0\\u00BC\\u00D1\\u008B\\u00D0\\u0092\\u00D1\\u008B\\u00D1\\u0081\\u00D0\\u00BE\\u00D0\\u00B2\\u00D1\\u008B\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u009D\\u00D0\\u00BE\\u00D0\\u00BE\\u00D0\\u00B1\\u00D0\\u009F\\u00D0\\u00BE\\u00D0\\u00BB\\u00D0\\u00B8\\u00D0\\u00BD\\u00D0\\u00B8\\u00D0\\u00A0\\u00D0\\u00A4\\u00D0\\u009D\\u00D0\\u00B5\\u00D0\\u009C\\u00D1\\u008B\\u00D1\\u0082\\u00D1\\u008B\\u00D0\\u009E\\u00D0\\u00BD\\u00D0\\u00B8\\u00D0\\u00BC\\u00D0\\u00B4\\u00D0\\u00B0\\u00D0\\u0097\\u00D0\\u00B0\\u00D0\\u0094\\u00D0\\u00B0\\u00D0\\u009D\\u00D1\\u0083\\u00D0\\u009E\\u00D0\\u00B1\\u00D1\\u0082\\u00D0\\u00B5\\u00D0\\u0098\\u00D0\\u00B7\\u00D0\\u00B5\\u00D0\\u00B9\\u00D0\\u00BD\\u00D1\\u0083\\u00D0\\u00BC\\u00D0\\u00BC\\u00D0\\u00A2\\u00D1\\u008B\\u00D1\\u0083\\u00D0\\u00B6\\u00D9\\u0081\\u00D9\\u008A\\u00D8\\u00A3\\u00D9\\u0086\\u00D9\\u0085\\u00D8\\u00A7\\u00D9\\u0085\\u00D8\\u00B9\\u00D9\\u0083\\u00D9\\u0084\\u00D8\\u00A3\\u00D9\\u0088\\u00D8\\u00B1\\u00D8\\u00AF\\u00D9\\u008A\\u00D8\\u00A7\\u00D9\\u0081\\u00D9\\u0089\\u00D9\\u0087\\u00D9\\u0088\\u00D9\\u0084\\u00D9\\u0085\\u00D9\\u0084\\u00D9\\u0083\\u00D8\\u00A7\\u00D9\\u0088\\u00D9\\u0084\\u00D9\\u0087\\u00D8\\u00A8\\u00D8\\u00B3\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A5\\u00D9\\u0086\\u00D9\\u0087\\u00D9\\u008A\\u00D8\\u00A3\\u00D9\\u008A\\u00D9\\u0082\\u00D8\\u00AF\\u00D9\\u0087\\u00D9\\u0084\\u00D8\\u00AB\\u00D9\\u0085\\u00D8\\u00A8\\u00D9\\u0087\\u00D9\\u0084\\u00D9\\u0088\\u00D9\\u0084\\u00D9\\u008A\\u00D8\\u00A8\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u008A\\u00D8\\u00A8\\u00D9\\u0083\\u00D8\\u00B4\\u00D9\\u008A\\u00D8\\u00A7\\u00D9\\u0085\\u00D8\\u00A3\\u00D9\\u0085\\u00D9\\u0086\\u00D8\\u00AA\\u00D8\\u00A8\\u00D9\\u008A\\u00D9\\u0084\\u00D9\\u0086\\u00D8\\u00AD\\u00D8\\u00A8\\u00D9\\u0087\\u00D9\\u0085\\u00D9\\u0085\\u00D8\\u00B4\\u00D9\\u0088\\u00D8\\u00B4firstvideolightworldmediawhitecloseblackrightsmallbooksplacemusicfieldorderpointvalueleveltableboardhousegroupworksyearsstatetodaywaterstartstyledeathpowerphonenighterrorinputabouttermstitletoolseventlocaltimeslargewordsgamesshortspacefocusclearmodelblockguideradiosharewomenagainmoneyimagenamesyounglineslatercolorgreenfront&amp;watchforcepricerulesbeginaftervisitissueareasbelowindextotalhourslabelprintpressbuiltlinksspeedstudytradefoundsenseundershownformsrangeaddedstillmovedtakenaboveflashfixedoftenotherviewschecklegalriveritemsquickshapehumanexistgoingmoviethirdbasicpeacestagewidthloginideaswrotepagesusersdrivestorebreaksouthvoicesitesmonthwherebuildwhichearthforumthreesportpartyClicklowerlivesclasslayerentrystoryusagesoundcourtyour birthpopuptypesapplyImagebeinguppernoteseveryshowsmeansextramatchtrackknownearlybegansuperpapernorthlearngivennamedendedTermspartsGroupbrandusingwomanfalsereadyaudiotakeswhile.com/livedcasesdailychildgreatjudgethoseunitsneverbroadcoastcoverapplefilescyclesceneplansclickwritequeenpieceemailframeolderphotolimitcachecivilscaleenterthemetheretouchboundroyalaskedwholesincestock namefaithheartemptyofferscopeownedmightalbumthinkbloodarraymajortrustcanonunioncountvalidstoneStyleLoginhappyoccurleft:freshquitefilmsgradeneedsurbanfightbasishoverauto;route.htmlmixedfinalYour slidetopicbrownalonedrawnsplitreachRightdatesmarchquotegoodsLinksdoubtasyncthumballowchiefyouthnovel10px;serveuntilhandsCheckSpacequeryjamesequaltwice0,000Startpanelsongsroundeightshiftworthpostsleadsweeksavoidthesemilesplanesmartalphaplantmarksratesplaysclaimsalestextsstarswrong</h3>thing.org/multiheardPowerstandtokensolid(thisbringshipsstafftriedcallsfullyfactsagentThis //-->adminegyptEvent15px;Emailtrue\\\"crossspentblogsbox\\\">notedleavechinasizesguest</h4>robotheavytrue,sevengrandcrimesignsawaredancephase><!--en_US&#39;200px_namelatinenjoyajax.ationsmithU.S. holdspeterindianav\\\">chainscorecomesdoingpriorShare1990sromanlistsjapanfallstrialowneragree</h2>abusealertopera\\\"-//WcardshillsteamsPhototruthclean.php?saintmetallouismeantproofbriefrow\\\">genretrucklooksValueFrame.net/-->\\n<try {\\nvar makescostsplainadultquesttrainlaborhelpscausemagicmotortheir250pxleaststepsCountcouldglasssidesfundshotelawardmouthmovesparisgivesdutchtexasfruitnull,||[];top\\\">\\n<!--POST\\\"ocean<br/>floorspeakdepth sizebankscatchchart20px;aligndealswould50px;url=\\\"parksmouseMost ...</amongbrainbody none;basedcarrydraftreferpage_home.meterdelaydreamprovejoint</tr>drugs<!-- aprilidealallenexactforthcodeslogicView seemsblankports (200saved_linkgoalsgrantgreekhomesringsrated30px;whoseparse();\\\" Blocklinuxjonespixel');\\\">);if(-leftdavidhorseFocusraiseboxesTrackement</em>bar\\\">.src=toweralt=\\\"cablehenry24px;setupitalysharpminortastewantsthis.resetwheelgirls/css/100%;clubsstuffbiblevotes 1000korea});\\r\\nbandsqueue= {};80px;cking{\\r\\n\\t\\taheadclockirishlike ratiostatsForm\\\"yahoo)[0];Aboutfinds</h1>debugtasksURL =cells})();12px;primetellsturns0x600.jpg\\\"spainbeachtaxesmicroangel--></giftssteve-linkbody.});\\n\\tmount (199FAQ</rogerfrankClass28px;feeds<h1><scotttests22px;drink) || lewisshall#039; for lovedwaste00px;ja:\\u00E3\\u0082simon<fontreplymeetsuntercheaptightBrand) != dressclipsroomsonkeymobilmain.Name platefunnytreescom/\\\"1.jpgwmodeparamSTARTleft idden, 201);\\n}\\nform.viruschairtransworstPagesitionpatch<!--\\no-cacfirmstours,000 asiani++){adobe')[0]id=10both;menu .2.mi.png\\\"kevincoachChildbruce2.jpgURL)+.jpg|suitesliceharry120\\\" sweettr>\\r\\nname=diegopage swiss-->\\n\\n#fff;\\\">Log.com\\\"treatsheet) && 14px;sleepntentfiledja:\\u00E3\\u0083id=\\\"cName\\\"worseshots-box-delta\\n&lt;bears:48Z<data-rural</a> spendbakershops= \\\"\\\";php\\\">ction13px;brianhellosize=o=%2F joinmaybe<img img\\\">, fjsimg\\\" \\\")[0]MTopBType\\\"newlyDanskczechtrailknows</h5>faq\\\">zh-cn10);\\n-1\\\");type=bluestrulydavis.js';>\\r\\n<!steel you h2>\\r\\nform jesus100% menu.\\r\\n\\t\\r\\nwalesrisksumentddingb-likteachgif\\\" vegasdanskeestishqipsuomisobredesdeentretodospuedea\\u00C3\\u00B1osest\\u00C3\\u00A1tienehastaotrospartedondenuevohacerformamismomejormundoaqu\\u00C3\\u00ADd\\u00C3\\u00ADass\\u00C3\\u00B3loayudafechatodastantomenosdatosotrassitiomuchoahoralugarmayorestoshorastenerantesfotosestaspa\\u00C3\\u00ADsnuevasaludforosmedioquienmesespoderchileser\\u00C3\\u00A1vecesdecirjos\\u00C3\\u00A9estarventagrupohechoellostengoamigocosasnivelgentemismaairesjuliotemashaciafavorjuniolibrepuntobuenoautorabrilbuenatextomarzosaberlistaluegoc\\u00C3\\u00B3moenerojuegoper\\u00C3\\u00BAhaberestoynuncamujervalorfueralibrogustaigualvotoscasosgu\\u00C3\\u00ADapuedosomosavisousteddebennochebuscafaltaeurosseriedichocursoclavecasasle\\u00C3\\u00B3nplazolargoobrasvistaapoyojuntotratavistocrearcampohemoscincocargopisosordenhacen\\u00C3\\u00A1readiscopedrocercapuedapapelmenor\\u00C3\\u00BAtilclarojorgecalleponertardenadiemarcasigueellassiglocochemotosmadreclaserestoni\\u00C3\\u00B1oquedapasarbancohijosviajepablo\\u00C3\\u00A9stevienereinodejarfondocanalnorteletracausatomarmanoslunesautosvillavendopesartipostengamarcollevapadreunidovamoszonasambosbandamariaabusomuchasubirriojavivirgradochicaall\\u00C3\\u00ADjovendichaestantalessalirsuelopesosfinesllamabusco\\u00C3\\u00A9stalleganegroplazahumorpagarjuntadobleislasbolsaba\\u00C3\\u00B1ohablalucha\\u00C3\\u0081readicenjugarnotasvalleall\\u00C3\\u00A1cargadolorabajoest\\u00C3\\u00A9gustomentemariofirmacostofichaplatahogarartesleyesaquelmuseobasespocosmitadcielochicomiedoganarsantoetapadebesplayaredessietecortecoreadudasdeseoviejodeseaaguas&quot;domaincommonstatuseventsmastersystemactionbannerremovescrollupdateglobalmediumfilternumberchangeresultpublicscreenchoosenormaltravelissuessourcetargetspringmodulemobileswitchphotosborderregionitselfsocialactivecolumnrecordfollowtitle>eitherlengthfamilyfriendlayoutauthorcreatereviewsummerserverplayedplayerexpandpolicyformatdoublepointsseriespersonlivingdesignmonthsforcesuniqueweightpeopleenergynaturesearchfigurehavingcustomoffsetletterwindowsubmitrendergroupsuploadhealthmethodvideosschoolfutureshadowdebatevaluesObjectothersrightsleaguechromesimplenoticesharedendingseasonreportonlinesquarebuttonimagesenablemovinglatestwinterFranceperiodstrongrepeatLondondetailformeddemandsecurepassedtoggleplacesdevicestaticcitiesstreamyellowattackstreetflighthiddeninfo\\\">openedusefulvalleycausesleadersecretseconddamagesportsexceptratingsignedthingseffectfieldsstatesofficevisualeditorvolumeReportmuseummoviesparentaccessmostlymother\\\" id=\\\"marketgroundchancesurveybeforesymbolmomentspeechmotioninsidematterCenterobjectexistsmiddleEuropegrowthlegacymannerenoughcareeransweroriginportalclientselectrandomclosedtopicscomingfatheroptionsimplyraisedescapechosenchurchdefinereasoncorneroutputmemoryiframepolicemodelsNumberduringoffersstyleskilledlistedcalledsilvermargindeletebetterbrowselimitsGlobalsinglewidgetcenterbudgetnowrapcreditclaimsenginesafetychoicespirit-stylespreadmakingneededrussiapleaseextentScriptbrokenallowschargedividefactormember-basedtheoryconfigaroundworkedhelpedChurchimpactshouldalwayslogo\\\" bottomlist\\\">){var prefixorangeHeader.push(couplegardenbridgelaunchReviewtakingvisionlittledatingButtonbeautythemesforgotSearchanchoralmostloadedChangereturnstringreloadMobileincomesupplySourceordersviewed&nbsp;courseAbout island<html cookiename=\\\"amazonmodernadvicein</a>: The dialoghousesBEGIN MexicostartscentreheightaddingIslandassetsEmpireSchooleffortdirectnearlymanualSelect.\\n\\nOnejoinedmenu\\\">PhilipawardshandleimportOfficeregardskillsnationSportsdegreeweekly (e.g.behinddoctorloggedunited</b></beginsplantsassistartistissued300px|canadaagencyschemeremainBrazilsamplelogo\\\">beyond-scaleacceptservedmarineFootercamera</h1>\\n_form\\\"leavesstress\\\" />\\r\\n.gif\\\" onloadloaderOxfordsistersurvivlistenfemaleDesignsize=\\\"appealtext\\\">levelsthankshigherforcedanimalanyoneAfricaagreedrecentPeople<br />wonderpricesturned|| {};main\\\">inlinesundaywrap\\\">failedcensusminutebeaconquotes150px|estateremoteemail\\\"linkedright;signalformal1.htmlsignupprincefloat:.png\\\" forum.AccesspaperssoundsextendHeightsliderUTF-8\\\"&amp; Before. WithstudioownersmanageprofitjQueryannualparamsboughtfamousgooglelongeri++) {israelsayingdecidehome\\\">headerensurebranchpiecesblock;statedtop\\\"><racingresize--&gt;pacitysexualbureau.jpg\\\" 10,000obtaintitlesamount, Inc.comedymenu\\\" lyricstoday.indeedcounty_logo.FamilylookedMarketlse ifPlayerturkey);var forestgivingerrorsDomain}else{insertBlog</footerlogin.fasteragents<body 10px 0pragmafridayjuniordollarplacedcoversplugin5,000 page\\\">boston.test(avatartested_countforumsschemaindex,filledsharesreaderalert(appearSubmitline\\\">body\\\">\\n* TheThoughseeingjerseyNews</verifyexpertinjurywidth=CookieSTART across_imagethreadnativepocketbox\\\">\\nSystem DavidcancertablesprovedApril reallydriveritem\\\">more\\\">boardscolorscampusfirst || [];media.guitarfinishwidth:showedOther .php\\\" assumelayerswilsonstoresreliefswedenCustomeasily your String\\n\\nWhiltaylorclear:resortfrenchthough\\\") + \\\"<body>buyingbrandsMembername\\\">oppingsector5px;\\\">vspacepostermajor coffeemartinmaturehappen</nav>kansaslink\\\">Images=falsewhile hspace0&amp; \\n\\nIn  powerPolski-colorjordanBottomStart -count2.htmlnews\\\">01.jpgOnline-rightmillerseniorISBN 00,000 guidesvalue)ectionrepair.xml\\\"  rights.html-blockregExp:hoverwithinvirginphones</tr>\\rusing \\n\\tvar >');\\n\\t</td>\\n</tr>\\nbahasabrasilgalegomagyarpolskisrpski\\u00D8\\u00B1\\u00D8\\u00AF\\u00D9\\u0088\\u00E4\\u00B8\\u00AD\\u00E6\\u0096\\u0087\\u00E7\\u00AE\\u0080\\u00E4\\u00BD\\u0093\\u00E7\\u00B9\\u0081\\u00E9\\u00AB\\u0094\\u00E4\\u00BF\\u00A1\\u00E6\\u0081\\u00AF\\u00E4\\u00B8\\u00AD\\u00E5\\u009B\\u00BD\\u00E6\\u0088\\u0091\\u00E4\\u00BB\\u00AC\\u00E4\\u00B8\\u0080\\u00E4\\u00B8\\u00AA\\u00E5\\u0085\\u00AC\\u00E5\\u008F\\u00B8\\u00E7\\u00AE\\u00A1\\u00E7\\u0090\\u0086\\u00E8\\u00AE\\u00BA\\u00E5\\u009D\\u009B\\u00E5\\u008F\\u00AF\\u00E4\\u00BB\\u00A5\\u00E6\\u009C\\u008D\\u00E5\\u008A\\u00A1\\u00E6\\u0097\\u00B6\\u00E9\\u0097\\u00B4\\u00E4\\u00B8\\u00AA\\u00E4\\u00BA\\u00BA\\u00E4\\u00BA\\u00A7\\u00E5\\u0093\\u0081\\u00E8\\u0087\\u00AA\\u00E5\\u00B7\\u00B1\\u00E4\\u00BC\\u0081\\u00E4\\u00B8\\u009A\\u00E6\\u009F\\u00A5\\u00E7\\u009C\\u008B\\u00E5\\u00B7\\u00A5\\u00E4\\u00BD\\u009C\\u00E8\\u0081\\u0094\\u00E7\\u00B3\\u00BB\\u00E6\\u00B2\\u00A1\\u00E6\\u009C\\u0089\\u00E7\\u00BD\\u0091\\u00E7\\u00AB\\u0099\\u00E6\\u0089\\u0080\\u00E6\\u009C\\u0089\\u00E8\\u00AF\\u0084\\u00E8\\u00AE\\u00BA\\u00E4\\u00B8\\u00AD\\u00E5\\u00BF\\u0083\\u00E6\\u0096\\u0087\\u00E7\\u00AB\\u00A0\\u00E7\\u0094\\u00A8\\u00E6\\u0088\\u00B7\\u00E9\\u00A6\\u0096\\u00E9\\u00A1\\u00B5\\u00E4\\u00BD\\u009C\\u00E8\\u0080\\u0085\\u00E6\\u008A\\u0080\\u00E6\\u009C\\u00AF\\u00E9\\u0097\\u00AE\\u00E9\\u00A2\\u0098\\u00E7\\u009B\\u00B8\\u00E5\\u0085\\u00B3\\u00E4\\u00B8\\u008B\\u00E8\\u00BD\\u00BD\\u00E6\\u0090\\u009C\\u00E7\\u00B4\\u00A2\\u00E4\\u00BD\\u00BF\\u00E7\\u0094\\u00A8\\u00E8\\u00BD\\u00AF\\u00E4\\u00BB\\u00B6\\u00E5\\u009C\\u00A8\\u00E7\\u00BA\\u00BF\\u00E4\\u00B8\\u00BB\\u00E9\\u00A2\\u0098\\u00E8\\u00B5\\u0084\\u00E6\\u0096\\u0099\\u00E8\\u00A7\\u0086\\u00E9\\u00A2\\u0091\\u00E5\\u009B\\u009E\\u00E5\\u00A4\\u008D\\u00E6\\u00B3\\u00A8\\u00E5\\u0086\\u008C\\u00E7\\u00BD\\u0091\\u00E7\\u00BB\\u009C\\u00E6\\u0094\\u00B6\\u00E8\\u0097\\u008F\\u00E5\\u0086\\u0085\\u00E5\\u00AE\\u00B9\\u00E6\\u008E\\u00A8\\u00E8\\u008D\\u0090\\u00E5\\u00B8\\u0082\\u00E5\\u009C\\u00BA\\u00E6\\u00B6\\u0088\\u00E6\\u0081\\u00AF\\u00E7\\u00A9\\u00BA\\u00E9\\u0097\\u00B4\\u00E5\\u008F\\u0091\\u00E5\\u00B8\\u0083\\u00E4\\u00BB\\u0080\\u00E4\\u00B9\\u0088\\u00E5\\u00A5\\u00BD\\u00E5\\u008F\\u008B\\u00E7\\u0094\\u009F\\u00E6\\u00B4\\u00BB\\u00E5\\u009B\\u00BE\\u00E7\\u0089\\u0087\\u00E5\\u008F\\u0091\\u00E5\\u00B1\\u0095\\u00E5\\u00A6\\u0082\\u00E6\\u009E\\u009C\\u00E6\\u0089\\u008B\\u00E6\\u009C\\u00BA\\u00E6\\u0096\\u00B0\\u00E9\\u0097\\u00BB\\u00E6\\u009C\\u0080\\u00E6\\u0096\\u00B0\\u00E6\\u0096\\u00B9\\u00E5\\u00BC\\u008F\\u00E5\\u008C\\u0097\\u00E4\\u00BA\\u00AC\\u00E6\\u008F\\u0090\\u00E4\\u00BE\\u009B\\u00E5\\u0085\\u00B3\\u00E4\\u00BA\\u008E\\u00E6\\u009B\\u00B4\\u00E5\\u00A4\\u009A\\u00E8\\u00BF\\u0099\\u00E4\\u00B8\\u00AA\\u00E7\\u00B3\\u00BB\\u00E7\\u00BB\\u009F\\u00E7\\u009F\\u00A5\\u00E9\\u0081\\u0093\\u00E6\\u00B8\\u00B8\\u00E6\\u0088\\u008F\\u00E5\\u00B9\\u00BF\\u00E5\\u0091\\u008A\\u00E5\\u0085\\u00B6\\u00E4\\u00BB\\u0096\\u00E5\\u008F\\u0091\\u00E8\\u00A1\\u00A8\\u00E5\\u00AE\\u0089\\u00E5\\u0085\\u00A8\\u00E7\\u00AC\\u00AC\\u00E4\\u00B8\\u0080\\u00E4\\u00BC\\u009A\\u00E5\\u0091\\u0098\\u00E8\\u00BF\\u009B\\u00E8\\u00A1\\u008C\\u00E7\\u0082\\u00B9\\u00E5\\u0087\\u00BB\\u00E7\\u0089\\u0088\\u00E6\\u009D\\u0083\\u00E7\\u0094\\u00B5\\u00E5\\u00AD\\u0090\\u00E4\\u00B8\\u0096\\u00E7\\u0095\\u008C\\u00E8\\u00AE\\u00BE\\u00E8\\u00AE\\u00A1\\u00E5\\u0085\\u008D\\u00E8\\u00B4\\u00B9\\u00E6\\u0095\\u0099\\u00E8\\u0082\\u00B2\\u00E5\\u008A\\u00A0\\u00E5\\u0085\\u00A5\\u00E6\\u00B4\\u00BB\\u00E5\\u008A\\u00A8\\u00E4\\u00BB\\u0096\\u00E4\\u00BB\\u00AC\\u00E5\\u0095\\u0086\\u00E5\\u0093\\u0081\\u00E5\\u008D\\u009A\\u00E5\\u00AE\\u00A2\\u00E7\\u008E\\u00B0\\u00E5\\u009C\\u00A8\\u00E4\\u00B8\\u008A\\u00E6\\u00B5\\u00B7\\u00E5\\u00A6\\u0082\\u00E4\\u00BD\\u0095\\u00E5\\u00B7\\u00B2\\u00E7\\u00BB\\u008F\\u00E7\\u0095\\u0099\\u00E8\\u00A8\\u0080\\u00E8\\u00AF\\u00A6\\u00E7\\u00BB\\u0086\\u00E7\\u00A4\\u00BE\\u00E5\\u008C\\u00BA\\u00E7\\u0099\\u00BB\\u00E5\\u00BD\\u0095\\u00E6\\u009C\\u00AC\\u00E7\\u00AB\\u0099\\u00E9\\u009C\\u0080\\u00E8\\u00A6\\u0081\\u00E4\\u00BB\\u00B7\\u00E6\\u00A0\\u00BC\\u00E6\\u0094\\u00AF\\u00E6\\u008C\\u0081\\u00E5\\u009B\\u00BD\\u00E9\\u0099\\u0085\\u00E9\\u0093\\u00BE\\u00E6\\u008E\\u00A5\\u00E5\\u009B\\u00BD\\u00E5\\u00AE\\u00B6\\u00E5\\u00BB\\u00BA\\u00E8\\u00AE\\u00BE\\u00E6\\u009C\\u008B\\u00E5\\u008F\\u008B\\u00E9\\u0098\\u0085\\u00E8\\u00AF\\u00BB\\u00E6\\u00B3\\u0095\\u00E5\\u00BE\\u008B\\u00E4\\u00BD\\u008D\\u00E7\\u00BD\\u00AE\\u00E7\\u00BB\\u008F\\u00E6\\u00B5\\u008E\\u00E9\\u0080\\u0089\\u00E6\\u008B\\u00A9\\u00E8\\u00BF\\u0099\\u00E6\\u00A0\\u00B7\\u00E5\\u00BD\\u0093\\u00E5\\u0089\\u008D\\u00E5\\u0088\\u0086\\u00E7\\u00B1\\u00BB\\u00E6\\u008E\\u0092\\u00E8\\u00A1\\u008C\\u00E5\\u009B\\u00A0\\u00E4\\u00B8\\u00BA\\u00E4\\u00BA\\u00A4\\u00E6\\u0098\\u0093\\u00E6\\u009C\\u0080\\u00E5\\u0090\\u008E\\u00E9\\u009F\\u00B3\\u00E4\\u00B9\\u0090\\u00E4\\u00B8\\u008D\\u00E8\\u0083\\u00BD\\u00E9\\u0080\\u009A\\u00E8\\u00BF\\u0087\\u00E8\\u00A1\\u008C\\u00E4\\u00B8\\u009A\\u00E7\\u00A7\\u0091\\u00E6\\u008A\\u0080\\u00E5\\u008F\\u00AF\\u00E8\\u0083\\u00BD\\u00E8\\u00AE\\u00BE\\u00E5\\u00A4\\u0087\\u00E5\\u0090\\u0088\\u00E4\\u00BD\\u009C\\u00E5\\u00A4\\u00A7\\u00E5\\u00AE\\u00B6\\u00E7\\u00A4\\u00BE\\u00E4\\u00BC\\u009A\\u00E7\\u00A0\\u0094\\u00E7\\u00A9\\u00B6\\u00E4\\u00B8\\u0093\\u00E4\\u00B8\\u009A\\u00E5\\u0085\\u00A8\\u00E9\\u0083\\u00A8\\u00E9\\u00A1\\u00B9\\u00E7\\u009B\\u00AE\\u00E8\\u00BF\\u0099\\u00E9\\u0087\\u008C\\u00E8\\u00BF\\u0098\\u00E6\\u0098\\u00AF\\u00E5\\u00BC\\u0080\\u00E5\\u00A7\\u008B\\u00E6\\u0083\\u0085\\u00E5\\u0086\\u00B5\\u00E7\\u0094\\u00B5\\u00E8\\u0084\\u0091\\u00E6\\u0096\\u0087\\u00E4\\u00BB\\u00B6\\u00E5\\u0093\\u0081\\u00E7\\u0089\\u008C\\u00E5\\u00B8\\u00AE\\u00E5\\u008A\\u00A9\\u00E6\\u0096\\u0087\\u00E5\\u008C\\u0096\\u00E8\\u00B5\\u0084\\u00E6\\u00BA\\u0090\\u00E5\\u00A4\\u00A7\\u00E5\\u00AD\\u00A6\\u00E5\\u00AD\\u00A6\\u00E4\\u00B9\\u00A0\\u00E5\\u009C\\u00B0\\u00E5\\u009D\\u0080\\u00E6\\u00B5\\u008F\\u00E8\\u00A7\\u0088\\u00E6\\u008A\\u0095\\u00E8\\u00B5\\u0084\\u00E5\\u00B7\\u00A5\\u00E7\\u00A8\\u008B\\u00E8\\u00A6\\u0081\\u00E6\\u00B1\\u0082\\u00E6\\u0080\\u008E\\u00E4\\u00B9\\u0088\\u00E6\\u0097\\u00B6\\u00E5\\u0080\\u0099\\u00E5\\u008A\\u009F\\u00E8\\u0083\\u00BD\\u00E4\\u00B8\\u00BB\\u00E8\\u00A6\\u0081\\u00E7\\u009B\\u00AE\\u00E5\\u0089\\u008D\\u00E8\\u00B5\\u0084\\u00E8\\u00AE\\u00AF\\u00E5\\u009F\\u008E\\u00E5\\u00B8\\u0082\\u00E6\\u0096\\u00B9\\u00E6\\u00B3\\u0095\\u00E7\\u0094\\u00B5\\u00E5\\u00BD\\u00B1\\u00E6\\u008B\\u009B\\u00E8\\u0081\\u0098\\u00E5\\u00A3\\u00B0\\u00E6\\u0098\\u008E\\u00E4\\u00BB\\u00BB\\u00E4\\u00BD\\u0095\\u00E5\\u0081\\u00A5\\u00E5\\u00BA\\u00B7\\u00E6\\u0095\\u00B0\\u00E6\\u008D\\u00AE\\u00E7\\u00BE\\u008E\\u00E5\\u009B\\u00BD\\u00E6\\u00B1\\u00BD\\u00E8\\u00BD\\u00A6\\u00E4\\u00BB\\u008B\\u00E7\\u00BB\\u008D\\u00E4\\u00BD\\u0086\\u00E6\\u0098\\u00AF\\u00E4\\u00BA\\u00A4\\u00E6\\u00B5\\u0081\\u00E7\\u0094\\u009F\\u00E4\\u00BA\\u00A7\\u00E6\\u0089\\u0080\\u00E4\\u00BB\\u00A5\\u00E7\\u0094\\u00B5\\u00E8\\u00AF\\u009D\\u00E6\\u0098\\u00BE\\u00E7\\u00A4\\u00BA\\u00E4\\u00B8\\u0080\\u00E4\\u00BA\\u009B\\u00E5\\u008D\\u0095\\u00E4\\u00BD\\u008D\\u00E4\\u00BA\\u00BA\\u00E5\\u0091\\u0098\\u00E5\\u0088\\u0086\\u00E6\\u009E\\u0090\\u00E5\\u009C\\u00B0\\u00E5\\u009B\\u00BE\\u00E6\\u0097\\u0085\\u00E6\\u00B8\\u00B8\\u00E5\\u00B7\\u00A5\\u00E5\\u0085\\u00B7\\u00E5\\u00AD\\u00A6\\u00E7\\u0094\\u009F\\u00E7\\u00B3\\u00BB\\u00E5\\u0088\\u0097\\u00E7\\u00BD\\u0091\\u00E5\\u008F\\u008B\\u00E5\\u00B8\\u0096\\u00E5\\u00AD\\u0090\\u00E5\\u00AF\\u0086\\u00E7\\u00A0\\u0081\\u00E9\\u00A2\\u0091\\u00E9\\u0081\\u0093\\u00E6\\u008E\\u00A7\\u00E5\\u0088\\u00B6\\u00E5\\u009C\\u00B0\\u00E5\\u008C\\u00BA\\u00E5\\u009F\\u00BA\\u00E6\\u009C\\u00AC\\u00E5\\u0085\\u00A8\\u00E5\\u009B\\u00BD\\u00E7\\u00BD\\u0091\\u00E4\\u00B8\\u008A\\u00E9\\u0087\\u008D\\u00E8\\u00A6\\u0081\\u00E7\\u00AC\\u00AC\\u00E4\\u00BA\\u008C\\u00E5\\u0096\\u009C\\u00E6\\u00AC\\u00A2\\u00E8\\u00BF\\u009B\\u00E5\\u0085\\u00A5\\u00E5\\u008F\\u008B\\u00E6\\u0083\\u0085\\u00E8\\u00BF\\u0099\\u00E4\\u00BA\\u009B\\u00E8\\u0080\\u0083\\u00E8\\u00AF\\u0095\\u00E5\\u008F\\u0091\\u00E7\\u008E\\u00B0\\u00E5\\u009F\\u00B9\\u00E8\\u00AE\\u00AD\\u00E4\\u00BB\\u00A5\\u00E4\\u00B8\\u008A\\u00E6\\u0094\\u00BF\\u00E5\\u00BA\\u009C\\u00E6\\u0088\\u0090\\u00E4\\u00B8\\u00BA\\u00E7\\u008E\\u00AF\\u00E5\\u00A2\\u0083\\u00E9\\u00A6\\u0099\\u00E6\\u00B8\\u00AF\\u00E5\\u0090\\u008C\\u00E6\\u0097\\u00B6\\u00E5\\u00A8\\u00B1\\u00E4\\u00B9\\u0090\\u00E5\\u008F\\u0091\\u00E9\\u0080\\u0081\\u00E4\\u00B8\\u0080\\u00E5\\u00AE\\u009A\\u00E5\\u00BC\\u0080\\u00E5\\u008F\\u0091\\u00E4\\u00BD\\u009C\\u00E5\\u0093\\u0081\\u00E6\\u00A0\\u0087\\u00E5\\u0087\\u0086\\u00E6\\u00AC\\u00A2\\u00E8\\u00BF\\u008E\\u00E8\\u00A7\\u00A3\\u00E5\\u0086\\u00B3\\u00E5\\u009C\\u00B0\\u00E6\\u0096\\u00B9\\u00E4\\u00B8\\u0080\\u00E4\\u00B8\\u008B\\u00E4\\u00BB\\u00A5\\u00E5\\u008F\\u008A\\u00E8\\u00B4\\u00A3\\u00E4\\u00BB\\u00BB\\u00E6\\u0088\\u0096\\u00E8\\u0080\\u0085\\u00E5\\u00AE\\u00A2\\u00E6\\u0088\\u00B7\\u00E4\\u00BB\\u00A3\\u00E8\\u00A1\\u00A8\\u00E7\\u00A7\\u00AF\\u00E5\\u0088\\u0086\\u00E5\\u00A5\\u00B3\\u00E4\\u00BA\\u00BA\\u00E6\\u0095\\u00B0\\u00E7\\u00A0\\u0081\\u00E9\\u0094\\u0080\\u00E5\\u0094\\u00AE\\u00E5\\u0087\\u00BA\\u00E7\\u008E\\u00B0\\u00E7\\u00A6\\u00BB\\u00E7\\u00BA\\u00BF\\u00E5\\u00BA\\u0094\\u00E7\\u0094\\u00A8\\u00E5\\u0088\\u0097\\u00E8\\u00A1\\u00A8\\u00E4\\u00B8\\u008D\\u00E5\\u0090\\u008C\\u00E7\\u00BC\\u0096\\u00E8\\u00BE\\u0091\\u00E7\\u00BB\\u009F\\u00E8\\u00AE\\u00A1\\u00E6\\u009F\\u00A5\\u00E8\\u00AF\\u00A2\\u00E4\\u00B8\\u008D\\u00E8\\u00A6\\u0081\\u00E6\\u009C\\u0089\\u00E5\\u0085\\u00B3\\u00E6\\u009C\\u00BA\\u00E6\\u009E\\u0084\\u00E5\\u00BE\\u0088\\u00E5\\u00A4\\u009A\\u00E6\\u0092\\u00AD\\u00E6\\u0094\\u00BE\\u00E7\\u00BB\\u0084\\u00E7\\u00BB\\u0087\\u00E6\\u0094\\u00BF\\u00E7\\u00AD\\u0096\\u00E7\\u009B\\u00B4\\u00E6\\u008E\\u00A5\\u00E8\\u0083\\u00BD\\u00E5\\u008A\\u009B\\u00E6\\u009D\\u00A5\\u00E6\\u00BA\\u0090\\u00E6\\u0099\\u0082\\u00E9\\u0096\\u0093\\u00E7\\u009C\\u008B\\u00E5\\u0088\\u00B0\\u00E7\\u0083\\u00AD\\u00E9\\u0097\\u00A8\\u00E5\\u0085\\u00B3\\u00E9\\u0094\\u00AE\\u00E4\\u00B8\\u0093\\u00E5\\u008C\\u00BA\\u00E9\\u009D\\u009E\\u00E5\\u00B8\\u00B8\\u00E8\\u008B\\u00B1\\u00E8\\u00AF\\u00AD\\u00E7\\u0099\\u00BE\\u00E5\\u00BA\\u00A6\\u00E5\\u00B8\\u008C\\u00E6\\u009C\\u009B\\u00E7\\u00BE\\u008E\\u00E5\\u00A5\\u00B3\\u00E6\\u00AF\\u0094\\u00E8\\u00BE\\u0083\\u00E7\\u009F\\u00A5\\u00E8\\u00AF\\u0086\\u00E8\\u00A7\\u0084\\u00E5\\u00AE\\u009A\\u00E5\\u00BB\\u00BA\\u00E8\\u00AE\\u00AE\\u00E9\\u0083\\u00A8\\u00E9\\u0097\\u00A8\\u00E6\\u0084\\u008F\\u00E8\\u00A7\\u0081\\u00E7\\u00B2\\u00BE\\u00E5\\u00BD\\u00A9\\u00E6\\u0097\\u00A5\\u00E6\\u009C\\u00AC\\u00E6\\u008F\\u0090\\u00E9\\u00AB\\u0098\\u00E5\\u008F\\u0091\\u00E8\\u00A8\\u0080\\u00E6\\u0096\\u00B9\\u00E9\\u009D\\u00A2\\u00E5\\u009F\\u00BA\\u00E9\\u0087\\u0091\\u00E5\\u00A4\\u0084\\u00E7\\u0090\\u0086\\u00E6\\u009D\\u0083\\u00E9\\u0099\\u0090\\u00E5\\u00BD\\u00B1\\u00E7\\u0089\\u0087\\u00E9\\u0093\\u00B6\\u00E8\\u00A1\\u008C\\u00E8\\u00BF\\u0098\\u00E6\\u009C\\u0089\\u00E5\\u0088\\u0086\\u00E4\\u00BA\\u00AB\\u00E7\\u0089\\u00A9\\u00E5\\u0093\\u0081\\u00E7\\u00BB\\u008F\\u00E8\\u0090\\u00A5\\u00E6\\u00B7\\u00BB\\u00E5\\u008A\\u00A0\\u00E4\\u00B8\\u0093\\u00E5\\u00AE\\u00B6\\u00E8\\u00BF\\u0099\\u00E7\\u00A7\\u008D\\u00E8\\u00AF\\u009D\\u00E9\\u00A2\\u0098\\u00E8\\u00B5\\u00B7\\u00E6\\u009D\\u00A5\\u00E4\\u00B8\\u009A\\u00E5\\u008A\\u00A1\\u00E5\\u0085\\u00AC\\u00E5\\u0091\\u008A\\u00E8\\u00AE\\u00B0\\u00E5\\u00BD\\u0095\\u00E7\\u00AE\\u0080\\u00E4\\u00BB\\u008B\\u00E8\\u00B4\\u00A8\\u00E9\\u0087\\u008F\\u00E7\\u0094\\u00B7\\u00E4\\u00BA\\u00BA\\u00E5\\u00BD\\u00B1\\u00E5\\u0093\\u008D\\u00E5\\u00BC\\u0095\\u00E7\\u0094\\u00A8\\u00E6\\u008A\\u00A5\\u00E5\\u0091\\u008A\\u00E9\\u0083\\u00A8\\u00E5\\u0088\\u0086\\u00E5\\u00BF\\u00AB\\u00E9\\u0080\\u009F\\u00E5\\u0092\\u00A8\\u00E8\\u00AF\\u00A2\\u00E6\\u0097\\u00B6\\u00E5\\u00B0\\u009A\\u00E6\\u00B3\\u00A8\\u00E6\\u0084\\u008F\\u00E7\\u0094\\u00B3\\u00E8\\u00AF\\u00B7\\u00E5\\u00AD\\u00A6\\u00E6\\u00A0\\u00A1\\u00E5\\u00BA\\u0094\\u00E8\\u00AF\\u00A5\\u00E5\\u008E\\u0086\\u00E5\\u008F\\u00B2\\u00E5\\u008F\\u00AA\\u00E6\\u0098\\u00AF\\u00E8\\u00BF\\u0094\\u00E5\\u009B\\u009E\\u00E8\\u00B4\\u00AD\\u00E4\\u00B9\\u00B0\\u00E5\\u0090\\u008D\\u00E7\\u00A7\\u00B0\\u00E4\\u00B8\\u00BA\\u00E4\\u00BA\\u0086\\u00E6\\u0088\\u0090\\u00E5\\u008A\\u009F\\u00E8\\u00AF\\u00B4\\u00E6\\u0098\\u008E\\u00E4\\u00BE\\u009B\\u00E5\\u00BA\\u0094\\u00E5\\u00AD\\u00A9\\u00E5\\u00AD\\u0090\\u00E4\\u00B8\\u0093\\u00E9\\u00A2\\u0098\\u00E7\\u00A8\\u008B\\u00E5\\u00BA\\u008F\\u00E4\\u00B8\\u0080\\u00E8\\u0088\\u00AC\\u00E6\\u009C\\u0083\\u00E5\\u0093\\u00A1\\u00E5\\u008F\\u00AA\\u00E6\\u009C\\u0089\\u00E5\\u0085\\u00B6\\u00E5\\u00AE\\u0083\\u00E4\\u00BF\\u009D\\u00E6\\u008A\\u00A4\\u00E8\\u0080\\u008C\\u00E4\\u00B8\\u0094\\u00E4\\u00BB\\u008A\\u00E5\\u00A4\\u00A9\\u00E7\\u00AA\\u0097\\u00E5\\u008F\\u00A3\\u00E5\\u008A\\u00A8\\u00E6\\u0080\\u0081\\u00E7\\u008A\\u00B6\\u00E6\\u0080\\u0081\\u00E7\\u0089\\u00B9\\u00E5\\u0088\\u00AB\\u00E8\\u00AE\\u00A4\\u00E4\\u00B8\\u00BA\\u00E5\\u00BF\\u0085\\u00E9\\u00A1\\u00BB\\u00E6\\u009B\\u00B4\\u00E6\\u0096\\u00B0\\u00E5\\u00B0\\u008F\\u00E8\\u00AF\\u00B4\\u00E6\\u0088\\u0091\\u00E5\\u0080\\u0091\\u00E4\\u00BD\\u009C\\u00E4\\u00B8\\u00BA\\u00E5\\u00AA\\u0092\\u00E4\\u00BD\\u0093\\u00E5\\u008C\\u0085\\u00E6\\u008B\\u00AC\\u00E9\\u0082\\u00A3\\u00E4\\u00B9\\u0088\\u00E4\\u00B8\\u0080\\u00E6\\u00A0\\u00B7\\u00E5\\u009B\\u00BD\\u00E5\\u0086\\u0085\\u00E6\\u0098\\u00AF\\u00E5\\u0090\\u00A6\\u00E6\\u00A0\\u00B9\\u00E6\\u008D\\u00AE\\u00E7\\u0094\\u00B5\\u00E8\\u00A7\\u0086\\u00E5\\u00AD\\u00A6\\u00E9\\u0099\\u00A2\\u00E5\\u0085\\u00B7\\u00E6\\u009C\\u0089\\u00E8\\u00BF\\u0087\\u00E7\\u00A8\\u008B\\u00E7\\u0094\\u00B1\\u00E4\\u00BA\\u008E\\u00E4\\u00BA\\u00BA\\u00E6\\u0089\\u008D\\u00E5\\u0087\\u00BA\\u00E6\\u009D\\u00A5\\u00E4\\u00B8\\u008D\\u00E8\\u00BF\\u0087\\u00E6\\u00AD\\u00A3\\u00E5\\u009C\\u00A8\\u00E6\\u0098\\u008E\\u00E6\\u0098\\u009F\\u00E6\\u0095\\u0085\\u00E4\\u00BA\\u008B\\u00E5\\u0085\\u00B3\\u00E7\\u00B3\\u00BB\\u00E6\\u00A0\\u0087\\u00E9\\u00A2\\u0098\\u00E5\\u0095\\u0086\\u00E5\\u008A\\u00A1\\u00E8\\u00BE\\u0093\\u00E5\\u0085\\u00A5\\u00E4\\u00B8\\u0080\\u00E7\\u009B\\u00B4\\u00E5\\u009F\\u00BA\\u00E7\\u00A1\\u0080\\u00E6\\u0095\\u0099\\u00E5\\u00AD\\u00A6\\u00E4\\u00BA\\u0086\\u00E8\\u00A7\\u00A3\\u00E5\\u00BB\\u00BA\\u00E7\\u00AD\\u0091\\u00E7\\u00BB\\u0093\\u00E6\\u009E\\u009C\\u00E5\\u0085\\u00A8\\u00E7\\u0090\\u0083\\u00E9\\u0080\\u009A\\u00E7\\u009F\\u00A5\\u00E8\\u00AE\\u00A1\\u00E5\\u0088\\u0092\\u00E5\\u00AF\\u00B9\\u00E4\\u00BA\\u008E\\u00E8\\u0089\\u00BA\\u00E6\\u009C\\u00AF\\u00E7\\u009B\\u00B8\\u00E5\\u0086\\u008C\\u00E5\\u008F\\u0091\\u00E7\\u0094\\u009F\\u00E7\\u009C\\u009F\\u00E7\\u009A\\u0084\\u00E5\\u00BB\\u00BA\\u00E7\\u00AB\\u008B\\u00E7\\u00AD\\u0089\\u00E7\\u00BA\\u00A7\\u00E7\\u00B1\\u00BB\\u00E5\\u009E\\u008B\\u00E7\\u00BB\\u008F\\u00E9\\u00AA\\u008C\\u00E5\\u00AE\\u009E\\u00E7\\u008E\\u00B0\\u00E5\\u0088\\u00B6\\u00E4\\u00BD\\u009C\\u00E6\\u009D\\u00A5\\u00E8\\u0087\\u00AA\\u00E6\\u00A0\\u0087\\u00E7\\u00AD\\u00BE\\u00E4\\u00BB\\u00A5\\u00E4\\u00B8\\u008B\\u00E5\\u008E\\u009F\\u00E5\\u0088\\u009B\\u00E6\\u0097\\u00A0\\u00E6\\u00B3\\u0095\\u00E5\\u0085\\u00B6\\u00E4\\u00B8\\u00AD\\u00E5\\u0080\\u008B\\u00E4\\u00BA\\u00BA\\u00E4\\u00B8\\u0080\\u00E5\\u0088\\u0087\\u00E6\\u008C\\u0087\\u00E5\\u008D\\u0097\\u00E5\\u0085\\u00B3\\u00E9\\u0097\\u00AD\\u00E9\\u009B\\u0086\\u00E5\\u009B\\u00A2\\u00E7\\u00AC\\u00AC\\u00E4\\u00B8\\u0089\\u00E5\\u0085\\u00B3\\u00E6\\u00B3\\u00A8\\u00E5\\u009B\\u00A0\\u00E6\\u00AD\\u00A4\\u00E7\\u0085\\u00A7\\u00E7\\u0089\\u0087\\u00E6\\u00B7\\u00B1\\u00E5\\u009C\\u00B3\\u00E5\\u0095\\u0086\\u00E4\\u00B8\\u009A\\u00E5\\u00B9\\u00BF\\u00E5\\u00B7\\u009E\\u00E6\\u0097\\u00A5\\u00E6\\u009C\\u009F\\u00E9\\u00AB\\u0098\\u00E7\\u00BA\\u00A7\\u00E6\\u009C\\u0080\\u00E8\\u00BF\\u0091\\u00E7\\u00BB\\u00BC\\u00E5\\u0090\\u0088\\u00E8\\u00A1\\u00A8\\u00E7\\u00A4\\u00BA\\u00E4\\u00B8\\u0093\\u00E8\\u00BE\\u0091\\u00E8\\u00A1\\u008C\\u00E4\\u00B8\\u00BA\\u00E4\\u00BA\\u00A4\\u00E9\\u0080\\u009A\\u00E8\\u00AF\\u0084\\u00E4\\u00BB\\u00B7\\u00E8\\u00A7\\u0089\\u00E5\\u00BE\\u0097\\u00E7\\u00B2\\u00BE\\u00E5\\u008D\\u008E\\u00E5\\u00AE\\u00B6\\u00E5\\u00BA\\u00AD\\u00E5\\u00AE\\u008C\\u00E6\\u0088\\u0090\\u00E6\\u0084\\u009F\\u00E8\\u00A7\\u0089\\u00E5\\u00AE\\u0089\\u00E8\\u00A3\\u0085\\u00E5\\u00BE\\u0097\\u00E5\\u0088\\u00B0\\u00E9\\u0082\\u00AE\\u00E4\\u00BB\\u00B6\\u00E5\\u0088\\u00B6\\u00E5\\u00BA\\u00A6\\u00E9\\u00A3\\u009F\\u00E5\\u0093\\u0081\\u00E8\\u0099\\u00BD\\u00E7\\u0084\\u00B6\\u00E8\\u00BD\\u00AC\\u00E8\\u00BD\\u00BD\\u00E6\\u008A\\u00A5\\u00E4\\u00BB\\u00B7\\u00E8\\u00AE\\u00B0\\u00E8\\u0080\\u0085\\u00E6\\u0096\\u00B9\\u00E6\\u00A1\\u0088\\u00E8\\u00A1\\u008C\\u00E6\\u0094\\u00BF\\u00E4\\u00BA\\u00BA\\u00E6\\u00B0\\u0091\\u00E7\\u0094\\u00A8\\u00E5\\u0093\\u0081\\u00E4\\u00B8\\u009C\\u00E8\\u00A5\\u00BF\\u00E6\\u008F\\u0090\\u00E5\\u0087\\u00BA\\u00E9\\u0085\\u0092\\u00E5\\u00BA\\u0097\\u00E7\\u0084\\u00B6\\u00E5\\u0090\\u008E\\u00E4\\u00BB\\u0098\\u00E6\\u00AC\\u00BE\\u00E7\\u0083\\u00AD\\u00E7\\u0082\\u00B9\\u00E4\\u00BB\\u00A5\\u00E5\\u0089\\u008D\\u00E5\\u00AE\\u008C\\u00E5\\u0085\\u00A8\\u00E5\\u008F\\u0091\\u00E5\\u00B8\\u0096\\u00E8\\u00AE\\u00BE\\u00E7\\u00BD\\u00AE\\u00E9\\u00A2\\u0086\\u00E5\\u00AF\\u00BC\\u00E5\\u00B7\\u00A5\\u00E4\\u00B8\\u009A\\u00E5\\u008C\\u00BB\\u00E9\\u0099\\u00A2\\u00E7\\u009C\\u008B\\u00E7\\u009C\\u008B\\u00E7\\u00BB\\u008F\\u00E5\\u0085\\u00B8\\u00E5\\u008E\\u009F\\u00E5\\u009B\\u00A0\\u00E5\\u00B9\\u00B3\\u00E5\\u008F\\u00B0\\u00E5\\u0090\\u0084\\u00E7\\u00A7\\u008D\\u00E5\\u00A2\\u009E\\u00E5\\u008A\\u00A0\\u00E6\\u009D\\u0090\\u00E6\\u0096\\u0099\\u00E6\\u0096\\u00B0\\u00E5\\u00A2\\u009E\\u00E4\\u00B9\\u008B\\u00E5\\u0090\\u008E\\u00E8\\u0081\\u008C\\u00E4\\u00B8\\u009A\\u00E6\\u0095\\u0088\\u00E6\\u009E\\u009C\\u00E4\\u00BB\\u008A\\u00E5\\u00B9\\u00B4\\u00E8\\u00AE\\u00BA\\u00E6\\u0096\\u0087\\u00E6\\u0088\\u0091\\u00E5\\u009B\\u00BD\\u00E5\\u0091\\u008A\\u00E8\\u00AF\\u0089\\u00E7\\u0089\\u0088\\u00E4\\u00B8\\u00BB\\u00E4\\u00BF\\u00AE\\u00E6\\u0094\\u00B9\\u00E5\\u008F\\u0082\\u00E4\\u00B8\\u008E\\u00E6\\u0089\\u0093\\u00E5\\u008D\\u00B0\\u00E5\\u00BF\\u00AB\\u00E4\\u00B9\\u0090\\u00E6\\u009C\\u00BA\\u00E6\\u00A2\\u00B0\\u00E8\\u00A7\\u0082\\u00E7\\u0082\\u00B9\\u00E5\\u00AD\\u0098\\u00E5\\u009C\\u00A8\\u00E7\\u00B2\\u00BE\\u00E7\\u00A5\\u009E\\u00E8\\u008E\\u00B7\\u00E5\\u00BE\\u0097\\u00E5\\u0088\\u00A9\\u00E7\\u0094\\u00A8\\u00E7\\u00BB\\u00A7\\u00E7\\u00BB\\u00AD\\u00E4\\u00BD\\u00A0\\u00E4\\u00BB\\u00AC\\u00E8\\u00BF\\u0099\\u00E4\\u00B9\\u0088\\u00E6\\u00A8\\u00A1\\u00E5\\u00BC\\u008F\\u00E8\\u00AF\\u00AD\\u00E8\\u00A8\\u0080\\u00E8\\u0083\\u00BD\\u00E5\\u00A4\\u009F\\u00E9\\u009B\\u0085\\u00E8\\u0099\\u008E\\u00E6\\u0093\\u008D\\u00E4\\u00BD\\u009C\\u00E9\\u00A3\\u008E\\u00E6\\u00A0\\u00BC\\u00E4\\u00B8\\u0080\\u00E8\\u00B5\\u00B7\\u00E7\\u00A7\\u0091\\u00E5\\u00AD\\u00A6\\u00E4\\u00BD\\u0093\\u00E8\\u0082\\u00B2\\u00E7\\u009F\\u00AD\\u00E4\\u00BF\\u00A1\\u00E6\\u009D\\u00A1\\u00E4\\u00BB\\u00B6\\u00E6\\u00B2\\u00BB\\u00E7\\u0096\\u0097\\u00E8\\u00BF\\u0090\\u00E5\\u008A\\u00A8\\u00E4\\u00BA\\u00A7\\u00E4\\u00B8\\u009A\\u00E4\\u00BC\\u009A\\u00E8\\u00AE\\u00AE\\u00E5\\u00AF\\u00BC\\u00E8\\u0088\\u00AA\\u00E5\\u0085\\u0088\\u00E7\\u0094\\u009F\\u00E8\\u0081\\u0094\\u00E7\\u009B\\u009F\\u00E5\\u008F\\u00AF\\u00E6\\u0098\\u00AF\\u00E5\\u0095\\u008F\\u00E9\\u00A1\\u008C\\u00E7\\u00BB\\u0093\\u00E6\\u009E\\u0084\\u00E4\\u00BD\\u009C\\u00E7\\u0094\\u00A8\\u00E8\\u00B0\\u0083\\u00E6\\u009F\\u00A5\\u00E8\\u00B3\\u0087\\u00E6\\u0096\\u0099\\u00E8\\u0087\\u00AA\\u00E5\\u008A\\u00A8\\u00E8\\u00B4\\u009F\\u00E8\\u00B4\\u00A3\\u00E5\\u0086\\u009C\\u00E4\\u00B8\\u009A\\u00E8\\u00AE\\u00BF\\u00E9\\u0097\\u00AE\\u00E5\\u00AE\\u009E\\u00E6\\u0096\\u00BD\\u00E6\\u008E\\u00A5\\u00E5\\u008F\\u0097\\u00E8\\u00AE\\u00A8\\u00E8\\u00AE\\u00BA\\u00E9\\u0082\\u00A3\\u00E4\\u00B8\\u00AA\\u00E5\\u008F\\u008D\\u00E9\\u00A6\\u0088\\u00E5\\u008A\\u00A0\\u00E5\\u00BC\\u00BA\\u00E5\\u00A5\\u00B3\\u00E6\\u0080\\u00A7\\u00E8\\u008C\\u0083\\u00E5\\u009B\\u00B4\\u00E6\\u009C\\u008D\\u00E5\\u008B\\u0099\\u00E4\\u00BC\\u0091\\u00E9\\u0097\\u00B2\\u00E4\\u00BB\\u008A\\u00E6\\u0097\\u00A5\\u00E5\\u00AE\\u00A2\\u00E6\\u009C\\u008D\\u00E8\\u00A7\\u0080\\u00E7\\u009C\\u008B\\u00E5\\u008F\\u0082\\u00E5\\u008A\\u00A0\\u00E7\\u009A\\u0084\\u00E8\\u00AF\\u009D\\u00E4\\u00B8\\u0080\\u00E7\\u0082\\u00B9\\u00E4\\u00BF\\u009D\\u00E8\\u00AF\\u0081\\u00E5\\u009B\\u00BE\\u00E4\\u00B9\\u00A6\\u00E6\\u009C\\u0089\\u00E6\\u0095\\u0088\\u00E6\\u00B5\\u008B\\u00E8\\u00AF\\u0095\\u00E7\\u00A7\\u00BB\\u00E5\\u008A\\u00A8\\u00E6\\u0089\\u008D\\u00E8\\u0083\\u00BD\\u00E5\\u0086\\u00B3\\u00E5\\u00AE\\u009A\\u00E8\\u0082\\u00A1\\u00E7\\u00A5\\u00A8\\u00E4\\u00B8\\u008D\\u00E6\\u0096\\u00AD\\u00E9\\u009C\\u0080\\u00E6\\u00B1\\u0082\\u00E4\\u00B8\\u008D\\u00E5\\u00BE\\u0097\\u00E5\\u008A\\u009E\\u00E6\\u00B3\\u0095\\u00E4\\u00B9\\u008B\\u00E9\\u0097\\u00B4\\u00E9\\u0087\\u0087\\u00E7\\u0094\\u00A8\\u00E8\\u0090\\u00A5\\u00E9\\u0094\\u0080\\u00E6\\u008A\\u0095\\u00E8\\u00AF\\u0089\\u00E7\\u009B\\u00AE\\u00E6\\u00A0\\u0087\\u00E7\\u0088\\u00B1\\u00E6\\u0083\\u0085\\u00E6\\u0091\\u0084\\u00E5\\u00BD\\u00B1\\u00E6\\u009C\\u0089\\u00E4\\u00BA\\u009B\\u00E8\\u00A4\\u0087\\u00E8\\u00A3\\u00BD\\u00E6\\u0096\\u0087\\u00E5\\u00AD\\u00A6\\u00E6\\u009C\\u00BA\\u00E4\\u00BC\\u009A\\u00E6\\u0095\\u00B0\\u00E5\\u00AD\\u0097\\u00E8\\u00A3\\u0085\\u00E4\\u00BF\\u00AE\\u00E8\\u00B4\\u00AD\\u00E7\\u0089\\u00A9\\u00E5\\u0086\\u009C\\u00E6\\u009D\\u0091\\u00E5\\u0085\\u00A8\\u00E9\\u009D\\u00A2\\u00E7\\u00B2\\u00BE\\u00E5\\u0093\\u0081\\u00E5\\u0085\\u00B6\\u00E5\\u00AE\\u009E\\u00E4\\u00BA\\u008B\\u00E6\\u0083\\u0085\\u00E6\\u00B0\\u00B4\\u00E5\\u00B9\\u00B3\\u00E6\\u008F\\u0090\\u00E7\\u00A4\\u00BA\\u00E4\\u00B8\\u008A\\u00E5\\u00B8\\u0082\\u00E8\\u00B0\\u00A2\\u00E8\\u00B0\\u00A2\\u00E6\\u0099\\u00AE\\u00E9\\u0080\\u009A\\u00E6\\u0095\\u0099\\u00E5\\u00B8\\u0088\\u00E4\\u00B8\\u008A\\u00E4\\u00BC\\u00A0\\u00E7\\u00B1\\u00BB\\u00E5\\u0088\\u00AB\\u00E6\\u00AD\\u008C\\u00E6\\u009B\\u00B2\\u00E6\\u008B\\u00A5\\u00E6\\u009C\\u0089\\u00E5\\u0088\\u009B\\u00E6\\u0096\\u00B0\\u00E9\\u0085\\u008D\\u00E4\\u00BB\\u00B6\\u00E5\\u008F\\u00AA\\u00E8\\u00A6\\u0081\\u00E6\\u0097\\u00B6\\u00E4\\u00BB\\u00A3\\u00E8\\u00B3\\u0087\\u00E8\\u00A8\\u008A\\u00E8\\u00BE\\u00BE\\u00E5\\u0088\\u00B0\\u00E4\\u00BA\\u00BA\\u00E7\\u0094\\u009F\\u00E8\\u00AE\\u00A2\\u00E9\\u0098\\u0085\\u00E8\\u0080\\u0081\\u00E5\\u00B8\\u0088\\u00E5\\u00B1\\u0095\\u00E7\\u00A4\\u00BA\\u00E5\\u00BF\\u0083\\u00E7\\u0090\\u0086\\u00E8\\u00B4\\u00B4\\u00E5\\u00AD\\u0090\\u00E7\\u00B6\\u00B2\\u00E7\\u00AB\\u0099\\u00E4\\u00B8\\u00BB\\u00E9\\u00A1\\u008C\\u00E8\\u0087\\u00AA\\u00E7\\u0084\\u00B6\\u00E7\\u00BA\\u00A7\\u00E5\\u0088\\u00AB\\u00E7\\u00AE\\u0080\\u00E5\\u008D\\u0095\\u00E6\\u0094\\u00B9\\u00E9\\u009D\\u00A9\\u00E9\\u0082\\u00A3\\u00E4\\u00BA\\u009B\\u00E6\\u009D\\u00A5\\u00E8\\u00AF\\u00B4\\u00E6\\u0089\\u0093\\u00E5\\u00BC\\u0080\\u00E4\\u00BB\\u00A3\\u00E7\\u00A0\\u0081\\u00E5\\u0088\\u00A0\\u00E9\\u0099\\u00A4\\u00E8\\u00AF\\u0081\\u00E5\\u0088\\u00B8\\u00E8\\u008A\\u0082\\u00E7\\u009B\\u00AE\\u00E9\\u0087\\u008D\\u00E7\\u0082\\u00B9\\u00E6\\u00AC\\u00A1\\u00E6\\u0095\\u00B8\\u00E5\\u00A4\\u009A\\u00E5\\u00B0\\u0091\\u00E8\\u00A7\\u0084\\u00E5\\u0088\\u0092\\u00E8\\u00B5\\u0084\\u00E9\\u0087\\u0091\\u00E6\\u0089\\u00BE\\u00E5\\u0088\\u00B0\\u00E4\\u00BB\\u00A5\\u00E5\\u0090\\u008E\\u00E5\\u00A4\\u00A7\\u00E5\\u0085\\u00A8\\u00E4\\u00B8\\u00BB\\u00E9\\u00A1\\u00B5\\u00E6\\u009C\\u0080\\u00E4\\u00BD\\u00B3\\u00E5\\u009B\\u009E\\u00E7\\u00AD\\u0094\\u00E5\\u00A4\\u00A9\\u00E4\\u00B8\\u008B\\u00E4\\u00BF\\u009D\\u00E9\\u009A\\u009C\\u00E7\\u008E\\u00B0\\u00E4\\u00BB\\u00A3\\u00E6\\u00A3\\u0080\\u00E6\\u009F\\u00A5\\u00E6\\u008A\\u0095\\u00E7\\u00A5\\u00A8\\u00E5\\u00B0\\u008F\\u00E6\\u0097\\u00B6\\u00E6\\u00B2\\u0092\\u00E6\\u009C\\u0089\\u00E6\\u00AD\\u00A3\\u00E5\\u00B8\\u00B8\\u00E7\\u0094\\u009A\\u00E8\\u0087\\u00B3\\u00E4\\u00BB\\u00A3\\u00E7\\u0090\\u0086\\u00E7\\u009B\\u00AE\\u00E5\\u00BD\\u0095\\u00E5\\u0085\\u00AC\\u00E5\\u00BC\\u0080\\u00E5\\u00A4\\u008D\\u00E5\\u0088\\u00B6\\u00E9\\u0087\\u0091\\u00E8\\u009E\\u008D\\u00E5\\u00B9\\u00B8\\u00E7\\u00A6\\u008F\\u00E7\\u0089\\u0088\\u00E6\\u009C\\u00AC\\u00E5\\u00BD\\u00A2\\u00E6\\u0088\\u0090\\u00E5\\u0087\\u0086\\u00E5\\u00A4\\u0087\\u00E8\\u00A1\\u008C\\u00E6\\u0083\\u0085\\u00E5\\u009B\\u009E\\u00E5\\u0088\\u00B0\\u00E6\\u0080\\u009D\\u00E6\\u0083\\u00B3\\u00E6\\u0080\\u008E\\u00E6\\u00A0\\u00B7\\u00E5\\u008D\\u008F\\u00E8\\u00AE\\u00AE\\u00E8\\u00AE\\u00A4\\u00E8\\u00AF\\u0081\\u00E6\\u009C\\u0080\\u00E5\\u00A5\\u00BD\\u00E4\\u00BA\\u00A7\\u00E7\\u0094\\u009F\\u00E6\\u008C\\u0089\\u00E7\\u0085\\u00A7\\u00E6\\u009C\\u008D\\u00E8\\u00A3\\u0085\\u00E5\\u00B9\\u00BF\\u00E4\\u00B8\\u009C\\u00E5\\u008A\\u00A8\\u00E6\\u00BC\\u00AB\\u00E9\\u0087\\u0087\\u00E8\\u00B4\\u00AD\\u00E6\\u0096\\u00B0\\u00E6\\u0089\\u008B\\u00E7\\u00BB\\u0084\\u00E5\\u009B\\u00BE\\u00E9\\u009D\\u00A2\\u00E6\\u009D\\u00BF\\u00E5\\u008F\\u0082\\u00E8\\u0080\\u0083\\u00E6\\u0094\\u00BF\\u00E6\\u00B2\\u00BB\\u00E5\\u00AE\\u00B9\\u00E6\\u0098\\u0093\\u00E5\\u00A4\\u00A9\\u00E5\\u009C\\u00B0\\u00E5\\u008A\\u00AA\\u00E5\\u008A\\u009B\\u00E4\\u00BA\\u00BA\\u00E4\\u00BB\\u00AC\\u00E5\\u008D\\u0087\\u00E7\\u00BA\\u00A7\\u00E9\\u0080\\u009F\\u00E5\\u00BA\\u00A6\\u00E4\\u00BA\\u00BA\\u00E7\\u0089\\u00A9\\u00E8\\u00B0\\u0083\\u00E6\\u0095\\u00B4\\u00E6\\u00B5\\u0081\\u00E8\\u00A1\\u008C\\u00E9\\u0080\\u00A0\\u00E6\\u0088\\u0090\\u00E6\\u0096\\u0087\\u00E5\\u00AD\\u0097\\u00E9\\u009F\\u00A9\\u00E5\\u009B\\u00BD\\u00E8\\u00B4\\u00B8\\u00E6\\u0098\\u0093\\u00E5\\u00BC\\u0080\\u00E5\\u00B1\\u0095\\u00E7\\u009B\\u00B8\\u00E9\\u0097\\u009C\\u00E8\\u00A1\\u00A8\\u00E7\\u008E\\u00B0\\u00E5\\u00BD\\u00B1\\u00E8\\u00A7\\u0086\\u00E5\\u00A6\\u0082\\u00E6\\u00AD\\u00A4\\u00E7\\u00BE\\u008E\\u00E5\\u00AE\\u00B9\\u00E5\\u00A4\\u00A7\\u00E5\\u00B0\\u008F\\u00E6\\u008A\\u00A5\\u00E9\\u0081\\u0093\\u00E6\\u009D\\u00A1\\u00E6\\u00AC\\u00BE\\u00E5\\u00BF\\u0083\\u00E6\\u0083\\u0085\\u00E8\\u00AE\\u00B8\\u00E5\\u00A4\\u009A\\u00E6\\u00B3\\u0095\\u00E8\\u00A7\\u0084\\u00E5\\u00AE\\u00B6\\u00E5\\u00B1\\u0085\\u00E4\\u00B9\\u00A6\\u00E5\\u00BA\\u0097\\u00E8\\u00BF\\u009E\\u00E6\\u008E\\u00A5\\u00E7\\u00AB\\u008B\\u00E5\\u008D\\u00B3\\u00E4\\u00B8\\u00BE\\u00E6\\u008A\\u00A5\\u00E6\\u008A\\u0080\\u00E5\\u00B7\\u00A7\\u00E5\\u00A5\\u00A5\\u00E8\\u00BF\\u0090\\u00E7\\u0099\\u00BB\\u00E5\\u0085\\u00A5\\u00E4\\u00BB\\u00A5\\u00E6\\u009D\\u00A5\\u00E7\\u0090\\u0086\\u00E8\\u00AE\\u00BA\\u00E4\\u00BA\\u008B\\u00E4\\u00BB\\u00B6\\u00E8\\u0087\\u00AA\\u00E7\\u0094\\u00B1\\u00E4\\u00B8\\u00AD\\u00E5\\u008D\\u008E\\u00E5\\u008A\\u009E\\u00E5\\u0085\\u00AC\\u00E5\\u00A6\\u0088\\u00E5\\u00A6\\u0088\\u00E7\\u009C\\u009F\\u00E6\\u00AD\\u00A3\\u00E4\\u00B8\\u008D\\u00E9\\u0094\\u0099\\u00E5\\u0085\\u00A8\\u00E6\\u0096\\u0087\\u00E5\\u0090\\u0088\\u00E5\\u0090\\u008C\\u00E4\\u00BB\\u00B7\\u00E5\\u0080\\u00BC\\u00E5\\u0088\\u00AB\\u00E4\\u00BA\\u00BA\\u00E7\\u009B\\u0091\\u00E7\\u009D\\u00A3\\u00E5\\u0085\\u00B7\\u00E4\\u00BD\\u0093\\u00E4\\u00B8\\u0096\\u00E7\\u00BA\\u00AA\\u00E5\\u009B\\u00A2\\u00E9\\u0098\\u009F\\u00E5\\u0088\\u009B\\u00E4\\u00B8\\u009A\\u00E6\\u0089\\u00BF\\u00E6\\u008B\\u0085\\u00E5\\u00A2\\u009E\\u00E9\\u0095\\u00BF\\u00E6\\u009C\\u0089\\u00E4\\u00BA\\u00BA\\u00E4\\u00BF\\u009D\\u00E6\\u008C\\u0081\\u00E5\\u0095\\u0086\\u00E5\\u00AE\\u00B6\\u00E7\\u00BB\\u00B4\\u00E4\\u00BF\\u00AE\\u00E5\\u008F\\u00B0\\u00E6\\u00B9\\u00BE\\u00E5\\u00B7\\u00A6\\u00E5\\u008F\\u00B3\\u00E8\\u0082\\u00A1\\u00E4\\u00BB\\u00BD\\u00E7\\u00AD\\u0094\\u00E6\\u00A1\\u0088\\u00E5\\u00AE\\u009E\\u00E9\\u0099\\u0085\\u00E7\\u0094\\u00B5\\u00E4\\u00BF\\u00A1\\u00E7\\u00BB\\u008F\\u00E7\\u0090\\u0086\\u00E7\\u0094\\u009F\\u00E5\\u0091\\u00BD\\u00E5\\u00AE\\u00A3\\u00E4\\u00BC\\u00A0\\u00E4\\u00BB\\u00BB\\u00E5\\u008A\\u00A1\\u00E6\\u00AD\\u00A3\\u00E5\\u00BC\\u008F\\u00E7\\u0089\\u00B9\\u00E8\\u0089\\u00B2\\u00E4\\u00B8\\u008B\\u00E6\\u009D\\u00A5\\u00E5\\u008D\\u008F\\u00E4\\u00BC\\u009A\\u00E5\\u008F\\u00AA\\u00E8\\u0083\\u00BD\\u00E5\\u00BD\\u0093\\u00E7\\u0084\\u00B6\\u00E9\\u0087\\u008D\\u00E6\\u0096\\u00B0\\u00E5\\u0085\\u00A7\\u00E5\\u00AE\\u00B9\\u00E6\\u008C\\u0087\\u00E5\\u00AF\\u00BC\\u00E8\\u00BF\\u0090\\u00E8\\u00A1\\u008C\\u00E6\\u0097\\u00A5\\u00E5\\u00BF\\u0097\\u00E8\\u00B3\\u00A3\\u00E5\\u00AE\\u00B6\\u00E8\\u00B6\\u0085\\u00E8\\u00BF\\u0087\\u00E5\\u009C\\u009F\\u00E5\\u009C\\u00B0\\u00E6\\u00B5\\u0099\\u00E6\\u00B1\\u009F\\u00E6\\u0094\\u00AF\\u00E4\\u00BB\\u0098\\u00E6\\u008E\\u00A8\\u00E5\\u0087\\u00BA\\u00E7\\u00AB\\u0099\\u00E9\\u0095\\u00BF\\u00E6\\u009D\\u00AD\\u00E5\\u00B7\\u009E\\u00E6\\u0089\\u00A7\\u00E8\\u00A1\\u008C\\u00E5\\u0088\\u00B6\\u00E9\\u0080\\u00A0\\u00E4\\u00B9\\u008B\\u00E4\\u00B8\\u0080\\u00E6\\u008E\\u00A8\\u00E5\\u00B9\\u00BF\\u00E7\\u008E\\u00B0\\u00E5\\u009C\\u00BA\\u00E6\\u008F\\u008F\\u00E8\\u00BF\\u00B0\\u00E5\\u008F\\u0098\\u00E5\\u008C\\u0096\\u00E4\\u00BC\\u00A0\\u00E7\\u00BB\\u009F\\u00E6\\u00AD\\u008C\\u00E6\\u0089\\u008B\\u00E4\\u00BF\\u009D\\u00E9\\u0099\\u00A9\\u00E8\\u00AF\\u00BE\\u00E7\\u00A8\\u008B\\u00E5\\u008C\\u00BB\\u00E7\\u0096\\u0097\\u00E7\\u00BB\\u008F\\u00E8\\u00BF\\u0087\\u00E8\\u00BF\\u0087\\u00E5\\u008E\\u00BB\\u00E4\\u00B9\\u008B\\u00E5\\u0089\\u008D\\u00E6\\u0094\\u00B6\\u00E5\\u0085\\u00A5\\u00E5\\u00B9\\u00B4\\u00E5\\u00BA\\u00A6\\u00E6\\u009D\\u0082\\u00E5\\u00BF\\u0097\\u00E7\\u00BE\\u008E\\u00E4\\u00B8\\u00BD\\u00E6\\u009C\\u0080\\u00E9\\u00AB\\u0098\\u00E7\\u0099\\u00BB\\u00E9\\u0099\\u0086\\u00E6\\u009C\\u00AA\\u00E6\\u009D\\u00A5\\u00E5\\u008A\\u00A0\\u00E5\\u00B7\\u00A5\\u00E5\\u0085\\u008D\\u00E8\\u00B4\\u00A3\\u00E6\\u0095\\u0099\\u00E7\\u00A8\\u008B\\u00E7\\u0089\\u0088\\u00E5\\u009D\\u0097\\u00E8\\u00BA\\u00AB\\u00E4\\u00BD\\u0093\\u00E9\\u0087\\u008D\\u00E5\\u00BA\\u0086\\u00E5\\u0087\\u00BA\\u00E5\\u0094\\u00AE\\u00E6\\u0088\\u0090\\u00E6\\u009C\\u00AC\\u00E5\\u00BD\\u00A2\\u00E5\\u00BC\\u008F\\u00E5\\u009C\\u009F\\u00E8\\u00B1\\u0086\\u00E5\\u0087\\u00BA\\u00E5\\u0083\\u00B9\\u00E4\\u00B8\\u009C\\u00E6\\u0096\\u00B9\\u00E9\\u0082\\u00AE\\u00E7\\u00AE\\u00B1\\u00E5\\u008D\\u0097\\u00E4\\u00BA\\u00AC\\u00E6\\u00B1\\u0082\\u00E8\\u0081\\u008C\\u00E5\\u008F\\u0096\\u00E5\\u00BE\\u0097\\u00E8\\u0081\\u008C\\u00E4\\u00BD\\u008D\\u00E7\\u009B\\u00B8\\u00E4\\u00BF\\u00A1\\u00E9\\u00A1\\u00B5\\u00E9\\u009D\\u00A2\\u00E5\\u0088\\u0086\\u00E9\\u0092\\u009F\\u00E7\\u00BD\\u0091\\u00E9\\u00A1\\u00B5\\u00E7\\u00A1\\u00AE\\u00E5\\u00AE\\u009A\\u00E5\\u009B\\u00BE\\u00E4\\u00BE\\u008B\\u00E7\\u00BD\\u0091\\u00E5\\u009D\\u0080\\u00E7\\u00A7\\u00AF\\u00E6\\u009E\\u0081\\u00E9\\u0094\\u0099\\u00E8\\u00AF\\u00AF\\u00E7\\u009B\\u00AE\\u00E7\\u009A\\u0084\\u00E5\\u00AE\\u009D\\u00E8\\u00B4\\u009D\\u00E6\\u009C\\u00BA\\u00E5\\u0085\\u00B3\\u00E9\\u00A3\\u008E\\u00E9\\u0099\\u00A9\\u00E6\\u008E\\u0088\\u00E6\\u009D\\u0083\\u00E7\\u0097\\u0085\\u00E6\\u00AF\\u0092\\u00E5\\u00AE\\u00A0\\u00E7\\u0089\\u00A9\\u00E9\\u0099\\u00A4\\u00E4\\u00BA\\u0086\\u00E8\\u00A9\\u0095\\u00E8\\u00AB\\u0096\\u00E7\\u0096\\u00BE\\u00E7\\u0097\\u0085\\u00E5\\u008F\\u008A\\u00E6\\u0097\\u00B6\\u00E6\\u00B1\\u0082\\u00E8\\u00B4\\u00AD\\u00E7\\u00AB\\u0099\\u00E7\\u0082\\u00B9\\u00E5\\u0084\\u00BF\\u00E7\\u00AB\\u00A5\\u00E6\\u00AF\\u008F\\u00E5\\u00A4\\u00A9\\u00E4\\u00B8\\u00AD\\u00E5\\u00A4\\u00AE\\u00E8\\u00AE\\u00A4\\u00E8\\u00AF\\u0086\\u00E6\\u00AF\\u008F\\u00E4\\u00B8\\u00AA\\u00E5\\u00A4\\u00A9\\u00E6\\u00B4\\u00A5\\u00E5\\u00AD\\u0097\\u00E4\\u00BD\\u0093\\u00E5\\u008F\\u00B0\\u00E7\\u0081\\u00A3\\u00E7\\u00BB\\u00B4\\u00E6\\u008A\\u00A4\\u00E6\\u009C\\u00AC\\u00E9\\u00A1\\u00B5\\u00E4\\u00B8\\u00AA\\u00E6\\u0080\\u00A7\\u00E5\\u00AE\\u0098\\u00E6\\u0096\\u00B9\\u00E5\\u00B8\\u00B8\\u00E8\\u00A7\\u0081\\u00E7\\u009B\\u00B8\\u00E6\\u009C\\u00BA\\u00E6\\u0088\\u0098\\u00E7\\u0095\\u00A5\\u00E5\\u00BA\\u0094\\u00E5\\u00BD\\u0093\\u00E5\\u00BE\\u008B\\u00E5\\u00B8\\u0088\\u00E6\\u0096\\u00B9\\u00E4\\u00BE\\u00BF\\u00E6\\u00A0\\u00A1\\u00E5\\u009B\\u00AD\\u00E8\\u0082\\u00A1\\u00E5\\u00B8\\u0082\\u00E6\\u0088\\u00BF\\u00E5\\u00B1\\u008B\\u00E6\\u00A0\\u008F\\u00E7\\u009B\\u00AE\\u00E5\\u0091\\u0098\\u00E5\\u00B7\\u00A5\\u00E5\\u00AF\\u00BC\\u00E8\\u0087\\u00B4\\u00E7\\u00AA\\u0081\\u00E7\\u0084\\u00B6\\u00E9\\u0081\\u0093\\u00E5\\u0085\\u00B7\\u00E6\\u009C\\u00AC\\u00E7\\u00BD\\u0091\\u00E7\\u00BB\\u0093\\u00E5\\u0090\\u0088\\u00E6\\u00A1\\u00A3\\u00E6\\u00A1\\u0088\\u00E5\\u008A\\u00B3\\u00E5\\u008A\\u00A8\\u00E5\\u008F\\u00A6\\u00E5\\u00A4\\u0096\\u00E7\\u00BE\\u008E\\u00E5\\u0085\\u0083\\u00E5\\u00BC\\u0095\\u00E8\\u00B5\\u00B7\\u00E6\\u0094\\u00B9\\u00E5\\u008F\\u0098\\u00E7\\u00AC\\u00AC\\u00E5\\u009B\\u009B\\u00E4\\u00BC\\u009A\\u00E8\\u00AE\\u00A1\\u00E8\\u00AA\\u00AA\\u00E6\\u0098\\u008E\\u00E9\\u009A\\u0090\\u00E7\\u00A7\\u0081\\u00E5\\u00AE\\u009D\\u00E5\\u00AE\\u009D\\u00E8\\u00A7\\u0084\\u00E8\\u008C\\u0083\\u00E6\\u00B6\\u0088\\u00E8\\u00B4\\u00B9\\u00E5\\u0085\\u00B1\\u00E5\\u0090\\u008C\\u00E5\\u00BF\\u0098\\u00E8\\u00AE\\u00B0\\u00E4\\u00BD\\u0093\\u00E7\\u00B3\\u00BB\\u00E5\\u00B8\\u00A6\\u00E6\\u009D\\u00A5\\u00E5\\u0090\\u008D\\u00E5\\u00AD\\u0097\\u00E7\\u0099\\u00BC\\u00E8\\u00A1\\u00A8\\u00E5\\u00BC\\u0080\\u00E6\\u0094\\u00BE\\u00E5\\u008A\\u00A0\\u00E7\\u009B\\u009F\\u00E5\\u008F\\u0097\\u00E5\\u0088\\u00B0\\u00E4\\u00BA\\u008C\\u00E6\\u0089\\u008B\\u00E5\\u00A4\\u00A7\\u00E9\\u0087\\u008F\\u00E6\\u0088\\u0090\\u00E4\\u00BA\\u00BA\\u00E6\\u0095\\u00B0\\u00E9\\u0087\\u008F\\u00E5\\u0085\\u00B1\\u00E4\\u00BA\\u00AB\\u00E5\\u008C\\u00BA\\u00E5\\u009F\\u009F\\u00E5\\u00A5\\u00B3\\u00E5\\u00AD\\u00A9\\u00E5\\u008E\\u009F\\u00E5\\u0088\\u0099\\u00E6\\u0089\\u0080\\u00E5\\u009C\\u00A8\\u00E7\\u00BB\\u0093\\u00E6\\u009D\\u009F\\u00E9\\u0080\\u009A\\u00E4\\u00BF\\u00A1\\u00E8\\u00B6\\u0085\\u00E7\\u00BA\\u00A7\\u00E9\\u0085\\u008D\\u00E7\\u00BD\\u00AE\\u00E5\\u00BD\\u0093\\u00E6\\u0097\\u00B6\\u00E4\\u00BC\\u0098\\u00E7\\u00A7\\u0080\\u00E6\\u0080\\u00A7\\u00E6\\u0084\\u009F\\u00E6\\u0088\\u00BF\\u00E4\\u00BA\\u00A7\\u00E9\\u0081\\u008A\\u00E6\\u0088\\u00B2\\u00E5\\u0087\\u00BA\\u00E5\\u008F\\u00A3\\u00E6\\u008F\\u0090\\u00E4\\u00BA\\u00A4\\u00E5\\u00B0\\u00B1\\u00E4\\u00B8\\u009A\\u00E4\\u00BF\\u009D\\u00E5\\u0081\\u00A5\\u00E7\\u00A8\\u008B\\u00E5\\u00BA\\u00A6\\u00E5\\u008F\\u0082\\u00E6\\u0095\\u00B0\\u00E4\\u00BA\\u008B\\u00E4\\u00B8\\u009A\\u00E6\\u0095\\u00B4\\u00E4\\u00B8\\u00AA\\u00E5\\u00B1\\u00B1\\u00E4\\u00B8\\u009C\\u00E6\\u0083\\u0085\\u00E6\\u0084\\u009F\\u00E7\\u0089\\u00B9\\u00E6\\u00AE\\u008A\\u00E5\\u0088\\u0086\\u00E9\\u00A1\\u009E\\u00E6\\u0090\\u009C\\u00E5\\u00B0\\u008B\\u00E5\\u00B1\\u009E\\u00E4\\u00BA\\u008E\\u00E9\\u0097\\u00A8\\u00E6\\u0088\\u00B7\\u00E8\\u00B4\\u00A2\\u00E5\\u008A\\u00A1\\u00E5\\u00A3\\u00B0\\u00E9\\u009F\\u00B3\\u00E5\\u008F\\u008A\\u00E5\\u0085\\u00B6\\u00E8\\u00B4\\u00A2\\u00E7\\u00BB\\u008F\\u00E5\\u009D\\u009A\\u00E6\\u008C\\u0081\\u00E5\\u00B9\\u00B2\\u00E9\\u0083\\u00A8\\u00E6\\u0088\\u0090\\u00E7\\u00AB\\u008B\\u00E5\\u0088\\u00A9\\u00E7\\u009B\\u008A\\u00E8\\u0080\\u0083\\u00E8\\u0099\\u0091\\u00E6\\u0088\\u0090\\u00E9\\u0083\\u00BD\\u00E5\\u008C\\u0085\\u00E8\\u00A3\\u0085\\u00E7\\u0094\\u00A8\\u00E6\\u0088\\u00B6\\u00E6\\u00AF\\u0094\\u00E8\\u00B5\\u009B\\u00E6\\u0096\\u0087\\u00E6\\u0098\\u008E\\u00E6\\u008B\\u009B\\u00E5\\u0095\\u0086\\u00E5\\u00AE\\u008C\\u00E6\\u0095\\u00B4\\u00E7\\u009C\\u009F\\u00E6\\u0098\\u00AF\\u00E7\\u009C\\u00BC\\u00E7\\u009D\\u009B\\u00E4\\u00BC\\u0099\\u00E4\\u00BC\\u00B4\\u00E5\\u00A8\\u0081\\u00E6\\u009C\\u009B\\u00E9\\u00A2\\u0086\\u00E5\\u009F\\u009F\\u00E5\\u008D\\u00AB\\u00E7\\u0094\\u009F\\u00E4\\u00BC\\u0098\\u00E6\\u0083\\u00A0\\u00E8\\u00AB\\u0096\\u00E5\\u00A3\\u0087\\u00E5\\u0085\\u00AC\\u00E5\\u0085\\u00B1\\u00E8\\u0089\\u00AF\\u00E5\\u00A5\\u00BD\\u00E5\\u0085\\u0085\\u00E5\\u0088\\u0086\\u00E7\\u00AC\\u00A6\\u00E5\\u0090\\u0088\\u00E9\\u0099\\u0084\\u00E4\\u00BB\\u00B6\\u00E7\\u0089\\u00B9\\u00E7\\u0082\\u00B9\\u00E4\\u00B8\\u008D\\u00E5\\u008F\\u00AF\\u00E8\\u008B\\u00B1\\u00E6\\u0096\\u0087\\u00E8\\u00B5\\u0084\\u00E4\\u00BA\\u00A7\\u00E6\\u00A0\\u00B9\\u00E6\\u009C\\u00AC\\u00E6\\u0098\\u008E\\u00E6\\u0098\\u00BE\\u00E5\\u00AF\\u0086\\u00E7\\u00A2\\u00BC\\u00E5\\u0085\\u00AC\\u00E4\\u00BC\\u0097\\u00E6\\u00B0\\u0091\\u00E6\\u0097\\u008F\\u00E6\\u009B\\u00B4\\u00E5\\u008A\\u00A0\\u00E4\\u00BA\\u00AB\\u00E5\\u008F\\u0097\\u00E5\\u0090\\u008C\\u00E5\\u00AD\\u00A6\\u00E5\\u0090\\u00AF\\u00E5\\u008A\\u00A8\\u00E9\\u0080\\u0082\\u00E5\\u0090\\u0088\\u00E5\\u008E\\u009F\\u00E6\\u009D\\u00A5\\u00E9\\u0097\\u00AE\\u00E7\\u00AD\\u0094\\u00E6\\u009C\\u00AC\\u00E6\\u0096\\u0087\\u00E7\\u00BE\\u008E\\u00E9\\u00A3\\u009F\\u00E7\\u00BB\\u00BF\\u00E8\\u0089\\u00B2\\u00E7\\u00A8\\u00B3\\u00E5\\u00AE\\u009A\\u00E7\\u00BB\\u0088\\u00E4\\u00BA\\u008E\\u00E7\\u0094\\u009F\\u00E7\\u0089\\u00A9\\u00E4\\u00BE\\u009B\\u00E6\\u00B1\\u0082\\u00E6\\u0090\\u009C\\u00E7\\u008B\\u0090\\u00E5\\u008A\\u009B\\u00E9\\u0087\\u008F\\u00E4\\u00B8\\u00A5\\u00E9\\u0087\\u008D\\u00E6\\u00B0\\u00B8\\u00E8\\u00BF\\u009C\\u00E5\\u0086\\u0099\\u00E7\\u009C\\u009F\\u00E6\\u009C\\u0089\\u00E9\\u0099\\u0090\\u00E7\\u00AB\\u009E\\u00E4\\u00BA\\u0089\\u00E5\\u00AF\\u00B9\\u00E8\\u00B1\\u00A1\\u00E8\\u00B4\\u00B9\\u00E7\\u0094\\u00A8\\u00E4\\u00B8\\u008D\\u00E5\\u00A5\\u00BD\\u00E7\\u00BB\\u009D\\u00E5\\u00AF\\u00B9\\u00E5\\u008D\\u0081\\u00E5\\u0088\\u0086\\u00E4\\u00BF\\u0083\\u00E8\\u00BF\\u009B\\u00E7\\u0082\\u00B9\\u00E8\\u00AF\\u0084\\u00E5\\u00BD\\u00B1\\u00E9\\u009F\\u00B3\\u00E4\\u00BC\\u0098\\u00E5\\u008A\\u00BF\\u00E4\\u00B8\\u008D\\u00E5\\u00B0\\u0091\\u00E6\\u00AC\\u00A3\\u00E8\\u00B5\\u008F\\u00E5\\u00B9\\u00B6\\u00E4\\u00B8\\u0094\\u00E6\\u009C\\u0089\\u00E7\\u0082\\u00B9\\u00E6\\u0096\\u00B9\\u00E5\\u0090\\u0091\\u00E5\\u0085\\u00A8\\u00E6\\u0096\\u00B0\\u00E4\\u00BF\\u00A1\\u00E7\\u0094\\u00A8\\u00E8\\u00AE\\u00BE\\u00E6\\u0096\\u00BD\\u00E5\\u00BD\\u00A2\\u00E8\\u00B1\\u00A1\\u00E8\\u00B5\\u0084\\u00E6\\u00A0\\u00BC\\u00E7\\u00AA\\u0081\\u00E7\\u00A0\\u00B4\\u00E9\\u009A\\u008F\\u00E7\\u009D\\u0080\\u00E9\\u0087\\u008D\\u00E5\\u00A4\\u00A7\\u00E4\\u00BA\\u008E\\u00E6\\u0098\\u00AF\\u00E6\\u00AF\\u0095\\u00E4\\u00B8\\u009A\\u00E6\\u0099\\u00BA\\u00E8\\u0083\\u00BD\\u00E5\\u008C\\u0096\\u00E5\\u00B7\\u00A5\\u00E5\\u00AE\\u008C\\u00E7\\u00BE\\u008E\\u00E5\\u0095\\u0086\\u00E5\\u009F\\u008E\\u00E7\\u00BB\\u009F\\u00E4\\u00B8\\u0080\\u00E5\\u0087\\u00BA\\u00E7\\u0089\\u0088\\u00E6\\u0089\\u0093\\u00E9\\u0080\\u00A0\\u00E7\\u0094\\u00A2\\u00E5\\u0093\\u0081\\u00E6\\u00A6\\u0082\\u00E5\\u0086\\u00B5\\u00E7\\u0094\\u00A8\\u00E4\\u00BA\\u008E\\u00E4\\u00BF\\u009D\\u00E7\\u0095\\u0099\\u00E5\\u009B\\u00A0\\u00E7\\u00B4\\u00A0\\u00E4\\u00B8\\u00AD\\u00E5\\u009C\\u008B\\u00E5\\u00AD\\u0098\\u00E5\\u0082\\u00A8\\u00E8\\u00B4\\u00B4\\u00E5\\u009B\\u00BE\\u00E6\\u009C\\u0080\\u00E6\\u0084\\u009B\\u00E9\\u0095\\u00BF\\u00E6\\u009C\\u009F\\u00E5\\u008F\\u00A3\\u00E4\\u00BB\\u00B7\\u00E7\\u0090\\u0086\\u00E8\\u00B4\\u00A2\\u00E5\\u009F\\u00BA\\u00E5\\u009C\\u00B0\\u00E5\\u00AE\\u0089\\u00E6\\u008E\\u0092\\u00E6\\u00AD\\u00A6\\u00E6\\u00B1\\u0089\\u00E9\\u0087\\u008C\\u00E9\\u009D\\u00A2\\u00E5\\u0088\\u009B\\u00E5\\u00BB\\u00BA\\u00E5\\u00A4\\u00A9\\u00E7\\u00A9\\u00BA\\u00E9\\u00A6\\u0096\\u00E5\\u0085\\u0088\\u00E5\\u00AE\\u008C\\u00E5\\u0096\\u0084\\u00E9\\u00A9\\u00B1\\u00E5\\u008A\\u00A8\\u00E4\\u00B8\\u008B\\u00E9\\u009D\\u00A2\\u00E4\\u00B8\\u008D\\u00E5\\u0086\\u008D\\u00E8\\u00AF\\u009A\\u00E4\\u00BF\\u00A1\\u00E6\\u0084\\u008F\\u00E4\\u00B9\\u0089\\u00E9\\u0098\\u00B3\\u00E5\\u0085\\u0089\\u00E8\\u008B\\u00B1\\u00E5\\u009B\\u00BD\\u00E6\\u00BC\\u0082\\u00E4\\u00BA\\u00AE\\u00E5\\u0086\\u009B\\u00E4\\u00BA\\u008B\\u00E7\\u008E\\u00A9\\u00E5\\u00AE\\u00B6\\u00E7\\u00BE\\u00A4\\u00E4\\u00BC\\u0097\\u00E5\\u0086\\u009C\\u00E6\\u00B0\\u0091\\u00E5\\u008D\\u00B3\\u00E5\\u008F\\u00AF\\u00E5\\u0090\\u008D\\u00E7\\u00A8\\u00B1\\u00E5\\u00AE\\u00B6\\u00E5\\u0085\\u00B7\\u00E5\\u008A\\u00A8\\u00E7\\u0094\\u00BB\\u00E6\\u0083\\u00B3\\u00E5\\u0088\\u00B0\\u00E6\\u00B3\\u00A8\\u00E6\\u0098\\u008E\\u00E5\\u00B0\\u008F\\u00E5\\u00AD\\u00A6\\u00E6\\u0080\\u00A7\\u00E8\\u0083\\u00BD\\u00E8\\u0080\\u0083\\u00E7\\u00A0\\u0094\\u00E7\\u00A1\\u00AC\\u00E4\\u00BB\\u00B6\\u00E8\\u00A7\\u0082\\u00E7\\u009C\\u008B\\u00E6\\u00B8\\u0085\\u00E6\\u00A5\\u009A\\u00E6\\u0090\\u009E\\u00E7\\u00AC\\u0091\\u00E9\\u00A6\\u0096\\u00E9\\u00A0\\u0081\\u00E9\\u00BB\\u0084\\u00E9\\u0087\\u0091\\u00E9\\u0080\\u0082\\u00E7\\u0094\\u00A8\\u00E6\\u00B1\\u009F\\u00E8\\u008B\\u008F\\u00E7\\u009C\\u009F\\u00E5\\u00AE\\u009E\\u00E4\\u00B8\\u00BB\\u00E7\\u00AE\\u00A1\\u00E9\\u0098\\u00B6\\u00E6\\u00AE\\u00B5\\u00E8\\u00A8\\u00BB\\u00E5\\u0086\\u008A\\u00E7\\u00BF\\u00BB\\u00E8\\u00AF\\u0091\\u00E6\\u009D\\u0083\\u00E5\\u0088\\u00A9\\u00E5\\u0081\\u009A\\u00E5\\u00A5\\u00BD\\u00E4\\u00BC\\u00BC\\u00E4\\u00B9\\u008E\\u00E9\\u0080\\u009A\\u00E8\\u00AE\\u00AF\\u00E6\\u0096\\u00BD\\u00E5\\u00B7\\u00A5\\u00E7\\u008B\\u0080\\u00E6\\u0085\\u008B\\u00E4\\u00B9\\u009F\\u00E8\\u00AE\\u00B8\\u00E7\\u008E\\u00AF\\u00E4\\u00BF\\u009D\\u00E5\\u009F\\u00B9\\u00E5\\u0085\\u00BB\\u00E6\\u00A6\\u0082\\u00E5\\u00BF\\u00B5\\u00E5\\u00A4\\u00A7\\u00E5\\u009E\\u008B\\u00E6\\u009C\\u00BA\\u00E7\\u00A5\\u00A8\\u00E7\\u0090\\u0086\\u00E8\\u00A7\\u00A3\\u00E5\\u008C\\u00BF\\u00E5\\u0090\\u008Dcuandoenviarmadridbuscariniciotiempoporquecuentaestadopuedenjuegoscontraest\\u00C3\\u00A1nnombretienenperfilmaneraamigosciudadcentroaunquepuedesdentroprimerprecioseg\\u00C3\\u00BAnbuenosvolverpuntossemanahab\\u00C3\\u00ADaagostonuevosunidoscarlosequiponi\\u00C3\\u00B1osmuchosalgunacorreoimagenpartirarribamar\\u00C3\\u00ADahombreempleoverdadcambiomuchasfueronpasadol\\u00C3\\u00ADneaparecenuevascursosestabaquierolibroscuantoaccesomiguelvarioscuatrotienesgruposser\\u00C3\\u00A1neuropamediosfrenteacercadem\\u00C3\\u00A1sofertacochesmodeloitalialetrasalg\\u00C3\\u00BAncompracualesexistecuerposiendoprensallegarviajesdineromurciapodr\\u00C3\\u00A1puestodiariopuebloquieremanuelpropiocrisisciertoseguromuertefuentecerrargrandeefectopartesmedidapropiaofrecetierrae-mailvariasformasfuturoobjetoseguirriesgonormasmismos\\u00C3\\u00BAnicocaminositiosraz\\u00C3\\u00B3ndebidopruebatoledoten\\u00C3\\u00ADajes\\u00C3\\u00BAsesperococinaorigentiendacientoc\\u00C3\\u00A1dizhablarser\\u00C3\\u00ADalatinafuerzaestiloguerraentrar\\u00C3\\u00A9xitol\\u00C3\\u00B3pezagendav\\u00C3\\u00ADdeoevitarpaginametrosjavierpadresf\\u00C3\\u00A1cilcabeza\\u00C3\\u00A1reassalidaenv\\u00C3\\u00ADojap\\u00C3\\u00B3nabusosbienestextosllevarpuedanfuertecom\\u00C3\\u00BAnclaseshumanotenidobilbaounidadest\\u00C3\\u00A1seditarcreado\\u00D0\\u00B4\\u00D0\\u00BB\\u00D1\\u008F\\u00D1\\u0087\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00BA\\u00D0\\u00B0\\u00D0\\u00BA\\u00D0\\u00B8\\u00D0\\u00BB\\u00D0\\u00B8\\u00D1\\u008D\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00B2\\u00D1\\u0081\\u00D0\\u00B5\\u00D0\\u00B5\\u00D0\\u00B3\\u00D0\\u00BE\\u00D0\\u00BF\\u00D1\\u0080\\u00D0\\u00B8\\u00D1\\u0082\\u00D0\\u00B0\\u00D0\\u00BA\\u00D0\\u00B5\\u00D1\\u0089\\u00D0\\u00B5\\u00D1\\u0083\\u00D0\\u00B6\\u00D0\\u00B5\\u00D0\\u009A\\u00D0\\u00B0\\u00D0\\u00BA\\u00D0\\u00B1\\u00D0\\u00B5\\u00D0\\u00B7\\u00D0\\u00B1\\u00D1\\u008B\\u00D0\\u00BB\\u00D0\\u00BE\\u00D0\\u00BD\\u00D0\\u00B8\\u00D0\\u0092\\u00D1\\u0081\\u00D0\\u00B5\\u00D0\\u00BF\\u00D0\\u00BE\\u00D0\\u00B4\\u00D0\\u00AD\\u00D1\\u0082\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00BC\\u00D1\\u0087\\u00D0\\u00B5\\u00D0\\u00BC\\u00D0\\u00BD\\u00D0\\u00B5\\u00D1\\u0082\\u00D0\\u00BB\\u00D0\\u00B5\\u00D1\\u0082\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00B7\\u00D0\\u00BE\\u00D0\\u00BD\\u00D0\\u00B0\\u00D0\\u00B3\\u00D0\\u00B4\\u00D0\\u00B5\\u00D0\\u00BC\\u00D0\\u00BD\\u00D0\\u00B5\\u00D0\\u0094\\u00D0\\u00BB\\u00D1\\u008F\\u00D0\\u009F\\u00D1\\u0080\\u00D0\\u00B8\\u00D0\\u00BD\\u00D0\\u00B0\\u00D1\\u0081\\u00D0\\u00BD\\u00D0\\u00B8\\u00D1\\u0085\\u00D1\\u0082\\u00D0\\u00B5\\u00D0\\u00BC\\u00D0\\u00BA\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00B3\\u00D0\\u00BE\\u00D0\\u00B4\\u00D0\\u00B2\\u00D0\\u00BE\\u00D1\\u0082\\u00D1\\u0082\\u00D0\\u00B0\\u00D0\\u00BC\\u00D0\\u00A1\\u00D0\\u00A8\\u00D0\\u0090\\u00D0\\u00BC\\u00D0\\u00B0\\u00D1\\u008F\\u00D0\\u00A7\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00B2\\u00D0\\u00B0\\u00D1\\u0081\\u00D0\\u00B2\\u00D0\\u00B0\\u00D0\\u00BC\\u00D0\\u00B5\\u00D0\\u00BC\\u00D1\\u0083\\u00D0\\u00A2\\u00D0\\u00B0\\u00D0\\u00BA\\u00D0\\u00B4\\u00D0\\u00B2\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00B0\\u00D0\\u00BC\\u00D1\\u008D\\u00D1\\u0082\\u00D0\\u00B8\\u00D1\\u008D\\u00D1\\u0082\\u00D1\\u0083\\u00D0\\u0092\\u00D0\\u00B0\\u00D0\\u00BC\\u00D1\\u0082\\u00D0\\u00B5\\u00D1\\u0085\\u00D0\\u00BF\\u00D1\\u0080\\u00D0\\u00BE\\u00D1\\u0082\\u00D1\\u0083\\u00D1\\u0082\\u00D0\\u00BD\\u00D0\\u00B0\\u00D0\\u00B4\\u00D0\\u00B4\\u00D0\\u00BD\\u00D1\\u008F\\u00D0\\u0092\\u00D0\\u00BE\\u00D1\\u0082\\u00D1\\u0082\\u00D1\\u0080\\u00D0\\u00B8\\u00D0\\u00BD\\u00D0\\u00B5\\u00D0\\u00B9\\u00D0\\u0092\\u00D0\\u00B0\\u00D1\\u0081\\u00D0\\u00BD\\u00D0\\u00B8\\u00D0\\u00BC\\u00D1\\u0081\\u00D0\\u00B0\\u00D0\\u00BC\\u00D1\\u0082\\u00D0\\u00BE\\u00D1\\u0082\\u00D1\\u0080\\u00D1\\u0083\\u00D0\\u00B1\\u00D0\\u009E\\u00D0\\u00BD\\u00D0\\u00B8\\u00D0\\u00BC\\u00D0\\u00B8\\u00D1\\u0080\\u00D0\\u00BD\\u00D0\\u00B5\\u00D0\\u00B5\\u00D0\\u009E\\u00D0\\u009E\\u00D0\\u009E\\u00D0\\u00BB\\u00D0\\u00B8\\u00D1\\u0086\\u00D1\\u008D\\u00D1\\u0082\\u00D0\\u00B0\\u00D0\\u009E\\u00D0\\u00BD\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00B5\\u00D0\\u00BC\\u00D0\\u00B4\\u00D0\\u00BE\\u00D0\\u00BC\\u00D0\\u00BC\\u00D0\\u00BE\\u00D0\\u00B9\\u00D0\\u00B4\\u00D0\\u00B2\\u00D0\\u00B5\\u00D0\\u00BE\\u00D0\\u00BD\\u00D0\\u00BE\\u00D1\\u0081\\u00D1\\u0083\\u00D0\\u00B4\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0088\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0094\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u008F\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00AD\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u0087\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0086\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00A5\\u00E0\\u00A4\\u00BEjagran\\u00E0\\u00A4\\u0086\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u009C\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u0088\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u008F\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u0087\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00AF\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00A5\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00A5\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u0098\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u0088\\u00E0\\u00A4\\u009C\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B5\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u0088\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u008F\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0089\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00B5\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u0088\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0093\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0086\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00AD\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u009A\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u0086\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0080\\u00D8\\u00B9\\u00D9\\u0084\\u00D9\\u0089\\u00D8\\u00A5\\u00D9\\u0084\\u00D9\\u0089\\u00D9\\u0087\\u00D8\\u00B0\\u00D8\\u00A7\\u00D8\\u00A2\\u00D8\\u00AE\\u00D8\\u00B1\\u00D8\\u00B9\\u00D8\\u00AF\\u00D8\\u00AF\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0089\\u00D9\\u0087\\u00D8\\u00B0\\u00D9\\u0087\\u00D8\\u00B5\\u00D9\\u0088\\u00D8\\u00B1\\u00D8\\u00BA\\u00D9\\u008A\\u00D8\\u00B1\\u00D9\\u0083\\u00D8\\u00A7\\u00D9\\u0086\\u00D9\\u0088\\u00D9\\u0084\\u00D8\\u00A7\\u00D8\\u00A8\\u00D9\\u008A\\u00D9\\u0086\\u00D8\\u00B9\\u00D8\\u00B1\\u00D8\\u00B6\\u00D8\\u00B0\\u00D9\\u0084\\u00D9\\u0083\\u00D9\\u0087\\u00D9\\u0086\\u00D8\\u00A7\\u00D9\\u008A\\u00D9\\u0088\\u00D9\\u0085\\u00D9\\u0082\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B9\\u00D9\\u0084\\u00D9\\u008A\\u00D8\\u00A7\\u00D9\\u0086\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0083\\u00D9\\u0086\\u00D8\\u00AD\\u00D8\\u00AA\\u00D9\\u0089\\u00D9\\u0082\\u00D8\\u00A8\\u00D9\\u0084\\u00D9\\u0088\\u00D8\\u00AD\\u00D8\\u00A9\\u00D8\\u00A7\\u00D8\\u00AE\\u00D8\\u00B1\\u00D9\\u0081\\u00D9\\u0082\\u00D8\\u00B7\\u00D8\\u00B9\\u00D8\\u00A8\\u00D8\\u00AF\\u00D8\\u00B1\\u00D9\\u0083\\u00D9\\u0086\\u00D8\\u00A5\\u00D8\\u00B0\\u00D8\\u00A7\\u00D9\\u0083\\u00D9\\u0085\\u00D8\\u00A7\\u00D8\\u00A7\\u00D8\\u00AD\\u00D8\\u00AF\\u00D8\\u00A5\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0081\\u00D9\\u008A\\u00D9\\u0087\\u00D8\\u00A8\\u00D8\\u00B9\\u00D8\\u00B6\\u00D9\\u0083\\u00D9\\u008A\\u00D9\\u0081\\u00D8\\u00A8\\u00D8\\u00AD\\u00D8\\u00AB\\u00D9\\u0088\\u00D9\\u0085\\u00D9\\u0086\\u00D9\\u0088\\u00D9\\u0087\\u00D9\\u0088\\u00D8\\u00A3\\u00D9\\u0086\\u00D8\\u00A7\\u00D8\\u00AC\\u00D8\\u00AF\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0087\\u00D8\\u00A7\\u00D8\\u00B3\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00B9\\u00D9\\u0086\\u00D8\\u00AF\\u00D9\\u0084\\u00D9\\u008A\\u00D8\\u00B3\\u00D8\\u00B9\\u00D8\\u00A8\\u00D8\\u00B1\\u00D8\\u00B5\\u00D9\\u0084\\u00D9\\u0089\\u00D9\\u0085\\u00D9\\u0086\\u00D8\\u00B0\\u00D8\\u00A8\\u00D9\\u0087\\u00D8\\u00A7\\u00D8\\u00A3\\u00D9\\u0086\\u00D9\\u0087\\u00D9\\u0085\\u00D8\\u00AB\\u00D9\\u0084\\u00D9\\u0083\\u00D9\\u0086\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A7\\u00D8\\u00AD\\u00D9\\u008A\\u00D8\\u00AB\\u00D9\\u0085\\u00D8\\u00B5\\u00D8\\u00B1\\u00D8\\u00B4\\u00D8\\u00B1\\u00D8\\u00AD\\u00D8\\u00AD\\u00D9\\u0088\\u00D9\\u0084\\u00D9\\u0088\\u00D9\\u0081\\u00D9\\u008A\\u00D8\\u00A7\\u00D8\\u00B0\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0083\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00B1\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0086\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0081\\u00D8\\u00A3\\u00D8\\u00A8\\u00D9\\u0088\\u00D8\\u00AE\\u00D8\\u00A7\\u00D8\\u00B5\\u00D8\\u00A3\\u00D9\\u0086\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0086\\u00D9\\u0087\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u008A\\u00D8\\u00B9\\u00D8\\u00B6\\u00D9\\u0088\\u00D9\\u0088\\u00D9\\u0082\\u00D8\\u00AF\\u00D8\\u00A7\\u00D8\\u00A8\\u00D9\\u0086\\u00D8\\u00AE\\u00D9\\u008A\\u00D8\\u00B1\\u00D8\\u00A8\\u00D9\\u0086\\u00D8\\u00AA\\u00D9\\u0084\\u00D9\\u0083\\u00D9\\u0085\\u00D8\\u00B4\\u00D8\\u00A7\\u00D8\\u00A1\\u00D9\\u0088\\u00D9\\u0087\\u00D9\\u008A\\u00D8\\u00A7\\u00D8\\u00A8\\u00D9\\u0088\\u00D9\\u0082\\u00D8\\u00B5\\u00D8\\u00B5\\u00D9\\u0088\\u00D9\\u0085\\u00D8\\u00A7\\u00D8\\u00B1\\u00D9\\u0082\\u00D9\\u0085\\u00D8\\u00A3\\u00D8\\u00AD\\u00D8\\u00AF\\u00D9\\u0086\\u00D8\\u00AD\\u00D9\\u0086\\u00D8\\u00B9\\u00D8\\u00AF\\u00D9\\u0085\\u00D8\\u00B1\\u00D8\\u00A3\\u00D9\\u008A\\u00D8\\u00A7\\u00D8\\u00AD\\u00D8\\u00A9\\u00D9\\u0083\\u00D8\\u00AA\\u00D8\\u00A8\\u00D8\\u00AF\\u00D9\\u0088\\u00D9\\u0086\\u00D9\\u008A\\u00D8\\u00AC\\u00D8\\u00A8\\u00D9\\u0085\\u00D9\\u0086\\u00D9\\u0087\\u00D8\\u00AA\\u00D8\\u00AD\\u00D8\\u00AA\\u00D8\\u00AC\\u00D9\\u0087\\u00D8\\u00A9\\u00D8\\u00B3\\u00D9\\u0086\\u00D8\\u00A9\\u00D9\\u008A\\u00D8\\u00AA\\u00D9\\u0085\\u00D9\\u0083\\u00D8\\u00B1\\u00D8\\u00A9\\u00D8\\u00BA\\u00D8\\u00B2\\u00D8\\u00A9\\u00D9\\u0086\\u00D9\\u0081\\u00D8\\u00B3\\u00D8\\u00A8\\u00D9\\u008A\\u00D8\\u00AA\\u00D9\\u0084\\u00D9\\u0084\\u00D9\\u0087\\u00D9\\u0084\\u00D9\\u0086\\u00D8\\u00A7\\u00D8\\u00AA\\u00D9\\u0084\\u00D9\\u0083\\u00D9\\u0082\\u00D9\\u0084\\u00D8\\u00A8\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00A7\\u00D8\\u00B9\\u00D9\\u0086\\u00D9\\u0087\\u00D8\\u00A3\\u00D9\\u0088\\u00D9\\u0084\\u00D8\\u00B4\\u00D9\\u008A\\u00D8\\u00A1\\u00D9\\u0086\\u00D9\\u0088\\u00D8\\u00B1\\u00D8\\u00A3\\u00D9\\u0085\\u00D8\\u00A7\\u00D9\\u0081\\u00D9\\u008A\\u00D9\\u0083\\u00D8\\u00A8\\u00D9\\u0083\\u00D9\\u0084\\u00D8\\u00B0\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00B1\\u00D8\\u00AA\\u00D8\\u00A8\\u00D8\\u00A8\\u00D8\\u00A3\\u00D9\\u0086\\u00D9\\u0087\\u00D9\\u0085\\u00D8\\u00B3\\u00D8\\u00A7\\u00D9\\u0086\\u00D9\\u0083\\u00D8\\u00A8\\u00D9\\u008A\\u00D8\\u00B9\\u00D9\\u0081\\u00D9\\u0082\\u00D8\\u00AF\\u00D8\\u00AD\\u00D8\\u00B3\\u00D9\\u0086\\u00D9\\u0084\\u00D9\\u0087\\u00D9\\u0085\\u00D8\\u00B4\\u00D8\\u00B9\\u00D8\\u00B1\\u00D8\\u00A3\\u00D9\\u0087\\u00D9\\u0084\\u00D8\\u00B4\\u00D9\\u0087\\u00D8\\u00B1\\u00D9\\u0082\\u00D8\\u00B7\\u00D8\\u00B1\\u00D8\\u00B7\\u00D9\\u0084\\u00D8\\u00A8profileservicedefaulthimselfdetailscontentsupportstartedmessagesuccessfashion<title>countryaccountcreatedstoriesresultsrunningprocesswritingobjectsvisiblewelcomearticleunknownnetworkcompanydynamicbrowserprivacyproblemServicerespectdisplayrequestreservewebsitehistoryfriendsoptionsworkingversionmillionchannelwindow.addressvisitedweathercorrectproductedirectforwardyou canremovedsubjectcontrolarchivecurrentreadinglibrarylimitedmanagerfurthersummarymachineminutesprivatecontextprogramsocietynumberswrittenenabledtriggersourcesloadingelementpartnerfinallyperfectmeaningsystemskeepingculture&quot;,journalprojectsurfaces&quot;expiresreviewsbalanceEnglishContentthroughPlease opinioncontactaverageprimaryvillageSpanishgallerydeclinemeetingmissionpopularqualitymeasuregeneralspeciessessionsectionwriterscounterinitialreportsfiguresmembersholdingdisputeearlierexpressdigitalpictureAnothermarriedtrafficleadingchangedcentralvictoryimages/reasonsstudiesfeaturelistingmust beschoolsVersionusuallyepisodeplayinggrowingobviousoverlaypresentactions</ul>\\r\\nwrapperalreadycertainrealitystorageanotherdesktopofferedpatternunusualDigitalcapitalWebsitefailureconnectreducedAndroiddecadesregular &amp; animalsreleaseAutomatgettingmethodsnothingPopularcaptionletterscapturesciencelicensechangesEngland=1&amp;History = new CentralupdatedSpecialNetworkrequirecommentwarningCollegetoolbarremainsbecauseelectedDeutschfinanceworkersquicklybetweenexactlysettingdiseaseSocietyweaponsexhibit&lt;!--Controlclassescoveredoutlineattacksdevices(windowpurposetitle=\\\"Mobile killingshowingItaliandroppedheavilyeffects-1']);\\nconfirmCurrentadvancesharingopeningdrawingbillionorderedGermanyrelated</form>includewhetherdefinedSciencecatalogArticlebuttonslargestuniformjourneysidebarChicagoholidayGeneralpassage,&quot;animatefeelingarrivedpassingnaturalroughly.\\n\\nThe but notdensityBritainChineselack oftributeIreland\\\" data-factorsreceivethat isLibraryhusbandin factaffairsCharlesradicalbroughtfindinglanding:lang=\\\"return leadersplannedpremiumpackageAmericaEdition]&quot;Messageneed tovalue=\\\"complexlookingstationbelievesmaller-mobilerecordswant tokind ofFirefoxyou aresimilarstudiedmaximumheadingrapidlyclimatekingdomemergedamountsfoundedpioneerformuladynastyhow to SupportrevenueeconomyResultsbrothersoldierlargelycalling.&quot;AccountEdward segmentRobert effortsPacificlearnedup withheight:we haveAngelesnations_searchappliedacquiremassivegranted: falsetreatedbiggestbenefitdrivingStudiesminimumperhapsmorningsellingis usedreversevariant role=\\\"missingachievepromotestudentsomeoneextremerestorebottom:evolvedall thesitemapenglishway to  AugustsymbolsCompanymattersmusicalagainstserving})();\\r\\npaymenttroubleconceptcompareparentsplayersregionsmonitor ''The winningexploreadaptedGalleryproduceabilityenhancecareers). The collectSearch ancientexistedfooter handlerprintedconsoleEasternexportswindowsChannelillegalneutralsuggest_headersigning.html\\\">settledwesterncausing-webkitclaimedJusticechaptervictimsThomas mozillapromisepartieseditionoutside:false,hundredOlympic_buttonauthorsreachedchronicdemandssecondsprotectadoptedprepareneithergreatlygreateroverallimprovecommandspecialsearch.worshipfundingthoughthighestinsteadutilityquarterCulturetestingclearlyexposedBrowserliberal} catchProjectexamplehide();FloridaanswersallowedEmperordefenseseriousfreedomSeveral-buttonFurtherout of != nulltrainedDenmarkvoid(0)/all.jspreventRequestStephen\\n\\nWhen observe</h2>\\r\\nModern provide\\\" alt=\\\"borders.\\n\\nFor \\n\\nMany artistspoweredperformfictiontype ofmedicalticketsopposedCouncilwitnessjusticeGeorge Belgium...</a>twitternotablywaitingwarfare Other rankingphrasesmentionsurvivescholar</p>\\r\\n Countryignoredloss ofjust asGeorgiastrange<head><stopped1']);\\r\\nislandsnotableborder:list ofcarried100,000</h3>\\n severalbecomesselect wedding00.htmlmonarchoff theteacherhighly biologylife ofor evenrise of&raquo;plusonehunting(thoughDouglasjoiningcirclesFor theAncientVietnamvehiclesuch ascrystalvalue =Windowsenjoyeda smallassumed<a id=\\\"foreign All rihow theDisplayretiredhoweverhidden;battlesseekingcabinetwas notlook atconductget theJanuaryhappensturninga:hoverOnline French lackingtypicalextractenemieseven ifgeneratdecidedare not/searchbeliefs-image:locatedstatic.login\\\">convertviolententeredfirst\\\">circuitFinlandchemistshe was10px;\\\">as suchdivided</span>will beline ofa greatmystery/index.fallingdue to railwaycollegemonsterdescentit withnuclearJewish protestBritishflowerspredictreformsbutton who waslectureinstantsuicidegenericperiodsmarketsSocial fishingcombinegraphicwinners<br /><by the NaturalPrivacycookiesoutcomeresolveSwedishbrieflyPersianso muchCenturydepictscolumnshousingscriptsnext tobearingmappingrevisedjQuery(-width:title\\\">tooltipSectiondesignsTurkishyounger.match(})();\\n\\nburningoperatedegreessource=Richardcloselyplasticentries</tr>\\r\\ncolor:#ul id=\\\"possessrollingphysicsfailingexecutecontestlink toDefault<br />\\n: true,chartertourismclassicproceedexplain</h1>\\r\\nonline.?xml vehelpingdiamonduse theairlineend -->).attr(readershosting#ffffffrealizeVincentsignals src=\\\"/ProductdespitediversetellingPublic held inJoseph theatreaffects<style>a largedoesn'tlater, ElementfaviconcreatorHungaryAirportsee theso thatMichaelSystemsPrograms, and  width=e&quot;tradingleft\\\">\\npersonsGolden Affairsgrammarformingdestroyidea ofcase ofoldest this is.src = cartoonregistrCommonsMuslimsWhat isin manymarkingrevealsIndeed,equally/show_aoutdoorescape(Austriageneticsystem,In the sittingHe alsoIslandsAcademy\\n\\t\\t<!--Daniel bindingblock\\\">imposedutilizeAbraham(except{width:putting).html(|| [];\\nDATA[ *kitchenmountedactual dialectmainly _blank'installexpertsif(typeIt also&copy; \\\">Termsborn inOptionseasterntalkingconcerngained ongoingjustifycriticsfactoryits ownassaultinvitedlastinghis ownhref=\\\"/\\\" rel=\\\"developconcertdiagramdollarsclusterphp?id=alcohol);})();using a><span>vesselsrevivalAddressamateurandroidallegedillnesswalkingcentersqualifymatchesunifiedextinctDefensedied in\\n\\t<!-- customslinkingLittle Book ofeveningmin.js?are thekontakttoday's.html\\\" target=wearingAll Rig;\\n})();raising Also, crucialabout\\\">declare-->\\n<scfirefoxas muchappliesindex, s, but type = \\n\\r\\n<!--towardsRecordsPrivateForeignPremierchoicesVirtualreturnsCommentPoweredinline;povertychamberLiving volumesAnthonylogin\\\" RelatedEconomyreachescuttinggravitylife inChapter-shadowNotable</td>\\r\\n returnstadiumwidgetsvaryingtravelsheld bywho arework infacultyangularwho hadairporttown of\\n\\nSome 'click'chargeskeywordit willcity of(this);Andrew unique checkedor more300px; return;rsion=\\\"pluginswithin herselfStationFederalventurepublishsent totensionactresscome tofingersDuke ofpeople,exploitwhat isharmonya major\\\":\\\"httpin his menu\\\">\\nmonthlyofficercouncilgainingeven inSummarydate ofloyaltyfitnessand wasemperorsupremeSecond hearingRussianlongestAlbertalateralset of small\\\">.appenddo withfederalbank ofbeneathDespiteCapitalgrounds), and percentit fromclosingcontainInsteadfifteenas well.yahoo.respondfighterobscurereflectorganic= Math.editingonline paddinga wholeonerroryear ofend of barrierwhen itheader home ofresumedrenamedstrong>heatingretainscloudfrway of March 1knowingin partBetweenlessonsclosestvirtuallinks\\\">crossedEND -->famous awardedLicenseHealth fairly wealthyminimalAfricancompetelabel\\\">singingfarmersBrasil)discussreplaceGregoryfont copursuedappearsmake uproundedboth ofblockedsaw theofficescoloursif(docuwhen heenforcepush(fuAugust UTF-8\\\">Fantasyin mostinjuredUsuallyfarmingclosureobject defenceuse of Medical<body>\\nevidentbe usedkeyCodesixteenIslamic#000000entire widely active (typeofone cancolor =speakerextendsPhysicsterrain<tbody>funeralviewingmiddle cricketprophetshifteddoctorsRussell targetcompactalgebrasocial-bulk ofman and</td>\\n he left).val()false);logicalbankinghome tonaming Arizonacredits);\\n});\\nfounderin turnCollinsbefore But thechargedTitle\\\">CaptainspelledgoddessTag -->Adding:but wasRecent patientback in=false&Lincolnwe knowCounterJudaismscript altered']);\\n  has theunclearEvent',both innot all\\n\\n<!-- placinghard to centersort ofclientsstreetsBernardassertstend tofantasydown inharbourFreedomjewelry/about..searchlegendsis mademodern only ononly toimage\\\" linear painterand notrarely acronymdelivershorter00&amp;as manywidth=\\\"/* <![Ctitle =of the lowest picked escapeduses ofpeoples PublicMatthewtacticsdamagedway forlaws ofeasy to windowstrong  simple}catch(seventhinfoboxwent topaintedcitizenI don'tretreat. Some ww.\\\");\\nbombingmailto:made in. Many carries||{};wiwork ofsynonymdefeatsfavoredopticalpageTraunless sendingleft\\\"><comScorAll thejQuery.touristClassicfalse\\\" Wilhelmsuburbsgenuinebishops.split(global followsbody ofnominalContactsecularleft tochiefly-hidden-banner</li>\\n\\n. When in bothdismissExplorealways via thespa\\u00C3\\u00B1olwelfareruling arrangecaptainhis sonrule ofhe tookitself,=0&amp;(calledsamplesto makecom/pagMartin Kennedyacceptsfull ofhandledBesides//--></able totargetsessencehim to its by common.mineralto takeways tos.org/ladvisedpenaltysimple:if theyLettersa shortHerbertstrikes groups.lengthflightsoverlapslowly lesser social </p>\\n\\t\\tit intoranked rate oful>\\r\\n  attemptpair ofmake itKontaktAntoniohaving ratings activestreamstrapped\\\").css(hostilelead tolittle groups,Picture-->\\r\\n\\r\\n rows=\\\" objectinverse<footerCustomV><\\\\/scrsolvingChamberslaverywoundedwhereas!= 'undfor allpartly -right:Arabianbacked centuryunit ofmobile-Europe,is homerisk ofdesiredClintoncost ofage of become none ofp&quot;Middle ead')[0Criticsstudios>&copy;group\\\">assemblmaking pressedwidget.ps:\\\" ? rebuiltby someFormer editorsdelayedCanonichad thepushingclass=\\\"but arepartialBabylonbottom carrierCommandits useAs withcoursesa thirddenotesalso inHouston20px;\\\">accuseddouble goal ofFamous ).bind(priests Onlinein Julyst + \\\"gconsultdecimalhelpfulrevivedis veryr'+'iptlosing femalesis alsostringsdays ofarrivalfuture <objectforcingString(\\\" />\\n\\t\\there isencoded.  The balloondone by/commonbgcolorlaw of Indianaavoidedbut the2px 3pxjquery.after apolicy.men andfooter-= true;for usescreen.Indian image =family,http:// &nbsp;driverseternalsame asnoticedviewers})();\\n is moreseasonsformer the newis justconsent Searchwas thewhy theshippedbr><br>width: height=made ofcuisineis thata very Admiral fixed;normal MissionPress, ontariocharsettry to invaded=\\\"true\\\"spacingis mosta more totallyfall of});\\r\\n  immensetime inset outsatisfyto finddown tolot of Playersin Junequantumnot thetime todistantFinnishsrc = (single help ofGerman law andlabeledforestscookingspace\\\">header-well asStanleybridges/globalCroatia About [0];\\n  it, andgroupedbeing a){throwhe madelighterethicalFFFFFF\\\"bottom\\\"like a employslive inas seenprintermost ofub-linkrejectsand useimage\\\">succeedfeedingNuclearinformato helpWomen'sNeitherMexicanprotein<table by manyhealthylawsuitdevised.push({sellerssimply Through.cookie Image(older\\\">us.js\\\"> Since universlarger open to!-- endlies in']);\\r\\n  marketwho is (\\\"DOMComanagedone fortypeof Kingdomprofitsproposeto showcenter;made itdressedwere inmixtureprecisearisingsrc = 'make a securedBaptistvoting \\n\\t\\tvar March 2grew upClimate.removeskilledway the</head>face ofacting right\\\">to workreduceshas haderectedshow();action=book ofan area== \\\"htt<header\\n<html>conformfacing cookie.rely onhosted .customhe wentbut forspread Family a meansout theforums.footage\\\">MobilClements\\\" id=\\\"as highintense--><!--female is seenimpliedset thea stateand hisfastestbesidesbutton_bounded\\\"><img Infoboxevents,a youngand areNative cheaperTimeoutand hasengineswon the(mostlyright: find a -bottomPrince area ofmore ofsearch_nature,legallyperiod,land ofor withinducedprovingmissilelocallyAgainstthe wayk&quot;px;\\\">\\r\\npushed abandonnumeralCertainIn thismore inor somename isand, incrownedISBN 0-createsOctobermay notcenter late inDefenceenactedwish tobroadlycoolingonload=it. TherecoverMembersheight assumes<html>\\npeople.in one =windowfooter_a good reklamaothers,to this_cookiepanel\\\">London,definescrushedbaptismcoastalstatus title\\\" move tolost inbetter impliesrivalryservers SystemPerhapses and contendflowinglasted rise inGenesisview ofrising seem tobut in backinghe willgiven agiving cities.flow of Later all butHighwayonly bysign ofhe doesdiffersbattery&amp;lasinglesthreatsintegertake onrefusedcalled =US&ampSee thenativesby thissystem.head of:hover,lesbiansurnameand allcommon/header__paramsHarvard/pixel.removalso longrole ofjointlyskyscraUnicodebr />\\r\\nAtlantanucleusCounty,purely count\\\">easily build aonclicka givenpointerh&quot;events else {\\nditionsnow the, with man whoorg/Webone andcavalryHe diedseattle00,000 {windowhave toif(windand itssolely m&quot;renewedDetroitamongsteither them inSenatorUs</a><King ofFrancis-produche usedart andhim andused byscoringat hometo haverelatesibilityfactionBuffalolink\\\"><what hefree toCity ofcome insectorscountedone daynervoussquare };if(goin whatimg\\\" alis onlysearch/tuesdaylooselySolomonsexual - <a hrmedium\\\"DO NOT France,with a war andsecond take a >\\r\\n\\r\\n\\r\\nmarket.highwaydone inctivity\\\"last\\\">obligedrise to\\\"undefimade to Early praisedin its for hisathleteJupiterYahoo! termed so manyreally s. The a woman?value=direct right\\\" bicycleacing=\\\"day andstatingRather,higher Office are nowtimes, when a pay foron this-link\\\">;borderaround annual the Newput the.com\\\" takin toa brief(in thegroups.; widthenzymessimple in late{returntherapya pointbanninginks\\\">\\n();\\\" rea place\\\\u003Caabout atr>\\r\\n\\t\\tccount gives a<SCRIPTRailwaythemes/toolboxById(\\\"xhumans,watchesin some if (wicoming formats Under but hashanded made bythan infear ofdenoted/iframeleft involtagein eacha&quot;base ofIn manyundergoregimesaction </p>\\r\\n<ustomVa;&gt;</importsor thatmostly &amp;re size=\\\"</a></ha classpassiveHost = WhetherfertileVarious=[];(fucameras/></td>acts asIn some>\\r\\n\\r\\n<!organis <br />Beijingcatal\\u00C3\\u00A0deutscheuropeueuskaragaeilgesvenskaespa\\u00C3\\u00B1amensajeusuariotrabajom\\u00C3\\u00A9xicop\\u00C3\\u00A1ginasiempresistemaoctubredurantea\\u00C3\\u00B1adirempresamomentonuestroprimeratrav\\u00C3\\u00A9sgraciasnuestraprocesoestadoscalidadpersonan\\u00C3\\u00BAmeroacuerdom\\u00C3\\u00BAsicamiembroofertasalgunospa\\u00C3\\u00ADsesejemploderechoadem\\u00C3\\u00A1sprivadoagregarenlacesposiblehotelessevillaprimero\\u00C3\\u00BAltimoeventosarchivoculturamujeresentradaanuncioembargomercadograndesestudiomejoresfebrerodise\\u00C3\\u00B1oturismoc\\u00C3\\u00B3digoportadaespaciofamiliaantoniopermiteguardaralgunaspreciosalguiensentidovisitast\\u00C3\\u00ADtuloconocersegundoconsejofranciaminutossegundatenemosefectosm\\u00C3\\u00A1lagasesi\\u00C3\\u00B3nrevistagranadacompraringresogarc\\u00C3\\u00ADaacci\\u00C3\\u00B3necuadorquienesinclusodeber\\u00C3\\u00A1materiahombresmuestrapodr\\u00C3\\u00ADama\\u00C3\\u00B1ana\\u00C3\\u00BAltimaestamosoficialtambienning\\u00C3\\u00BAnsaludospodemosmejorarpositionbusinesshomepagesecuritylanguagestandardcampaignfeaturescategoryexternalchildrenreservedresearchexchangefavoritetemplatemilitaryindustryservicesmaterialproductsz-index:commentssoftwarecompletecalendarplatformarticlesrequiredmovementquestionbuildingpoliticspossiblereligionphysicalfeedbackregisterpicturesdisabledprotocolaudiencesettingsactivityelementslearninganythingabstractprogressoverviewmagazineeconomictrainingpressurevarious <strong>propertyshoppingtogetheradvancedbehaviordownloadfeaturedfootballselectedLanguagedistanceremembertrackingpasswordmodifiedstudentsdirectlyfightingnortherndatabasefestivalbreakinglocationinternetdropdownpracticeevidencefunctionmarriageresponseproblemsnegativeprogramsanalysisreleasedbanner\\\">purchasepoliciesregionalcreativeargumentbookmarkreferrerchemicaldivisioncallbackseparateprojectsconflicthardwareinterestdeliverymountainobtained= false;for(var acceptedcapacitycomputeridentityaircraftemployedproposeddomesticincludesprovidedhospitalverticalcollapseapproachpartnerslogo\\\"><adaughterauthor\\\" culturalfamilies/images/assemblypowerfulteachingfinisheddistrictcriticalcgi-bin/purposesrequireselectionbecomingprovidesacademicexerciseactuallymedicineconstantaccidentMagazinedocumentstartingbottom\\\">observed: &quot;extendedpreviousSoftwarecustomerdecisionstrengthdetailedslightlyplanningtextareacurrencyeveryonestraighttransferpositiveproducedheritageshippingabsolutereceivedrelevantbutton\\\" violenceanywherebenefitslaunchedrecentlyalliancefollowedmultiplebulletinincludedoccurredinternal$(this).republic><tr><tdcongressrecordedultimatesolution<ul id=\\\"discoverHome</a>websitesnetworksalthoughentirelymemorialmessagescontinueactive\\\">somewhatvictoriaWestern  title=\\\"LocationcontractvisitorsDownloadwithout right\\\">\\nmeasureswidth = variableinvolvedvirginianormallyhappenedaccountsstandingnationalRegisterpreparedcontrolsaccuratebirthdaystrategyofficialgraphicscriminalpossiblyconsumerPersonalspeakingvalidateachieved.jpg\\\" />machines</h2>\\n  keywordsfriendlybrotherscombinedoriginalcomposedexpectedadequatepakistanfollow\\\" valuable</label>relativebringingincreasegovernorplugins/List of Header\\\">\\\" name=\\\" (&quot;graduate</head>\\ncommercemalaysiadirectormaintain;height:schedulechangingback to catholicpatternscolor: #greatestsuppliesreliable</ul>\\n\\t\\t<select citizensclothingwatching<li id=\\\"specificcarryingsentence<center>contrastthinkingcatch(e)southernMichael merchantcarouselpadding:interior.split(\\\"lizationOctober ){returnimproved--&gt;\\n\\ncoveragechairman.png\\\" />subjectsRichard whateverprobablyrecoverybaseballjudgmentconnect..css\\\" /> websitereporteddefault\\\"/></a>\\r\\nelectricscotlandcreationquantity. ISBN 0did not instance-search-\\\" lang=\\\"speakersComputercontainsarchivesministerreactiondiscountItalianocriteriastrongly: 'http:'script'coveringofferingappearedBritish identifyFacebooknumerousvehiclesconcernsAmericanhandlingdiv id=\\\"William provider_contentaccuracysection andersonflexibleCategorylawrence<script>layout=\\\"approved maximumheader\\\"></table>Serviceshamiltoncurrent canadianchannels/themes//articleoptionalportugalvalue=\\\"\\\"intervalwirelessentitledagenciesSearch\\\" measuredthousandspending&hellip;new Date\\\" size=\\\"pageNamemiddle\\\" \\\" /></a>hidden\\\">sequencepersonaloverflowopinionsillinoislinks\\\">\\n\\t<title>versionssaturdayterminalitempropengineersectionsdesignerproposal=\\\"false\\\"Espa\\u00C3\\u00B1olreleasessubmit\\\" er&quot;additionsymptomsorientedresourceright\\\"><pleasurestationshistory.leaving  border=contentscenter\\\">.\\n\\nSome directedsuitablebulgaria.show();designedGeneral conceptsExampleswilliamsOriginal\\\"><span>search\\\">operatorrequestsa &quot;allowingDocumentrevision. \\n\\nThe yourselfContact michiganEnglish columbiapriorityprintingdrinkingfacilityreturnedContent officersRussian generate-8859-1\\\"indicatefamiliar qualitymargin:0 contentviewportcontacts-title\\\">portable.length eligibleinvolvesatlanticonload=\\\"default.suppliedpaymentsglossary\\n\\nAfter guidance</td><tdencodingmiddle\\\">came to displaysscottishjonathanmajoritywidgets.clinicalthailandteachers<head>\\n\\taffectedsupportspointer;toString</small>oklahomawill be investor0\\\" alt=\\\"holidaysResourcelicensed (which . After considervisitingexplorerprimary search\\\" android\\\"quickly meetingsestimate;return ;color:# height=approval, &quot; checked.min.js\\\"magnetic></a></hforecast. While thursdaydvertise&eacute;hasClassevaluateorderingexistingpatients Online coloradoOptions\\\"campbell<!-- end</span><<br />\\r\\n_popups|sciences,&quot; quality Windows assignedheight: <b classle&quot; value=\\\" Companyexamples<iframe believespresentsmarshallpart of properly).\\n\\nThe taxonomymuch of </span>\\n\\\" data-srtugu\\u00C3\\u00AAsscrollTo project<head>\\r\\nattorneyemphasissponsorsfancyboxworld's wildlifechecked=sessionsprogrammpx;font- Projectjournalsbelievedvacationthompsonlightingand the special border=0checking</tbody><button Completeclearfix\\n<head>\\narticle <sectionfindingsrole in popular  Octoberwebsite exposureused to  changesoperatedclickingenteringcommandsinformed numbers  </div>creatingonSubmitmarylandcollegesanalyticlistingscontact.loggedInadvisorysiblingscontent\\\"s&quot;)s. This packagescheckboxsuggestspregnanttomorrowspacing=icon.png\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate class DataHolder1\r\n\t\t{\r\n\t\t\tinternal static string GetData()\r\n\t\t\t{\r\n\t\t\t\treturn \"japanesecodebasebutton\\\">gamblingsuch as , while </span> missourisportingtop:1px .</span>tensionswidth=\\\"2lazyloadnovemberused in height=\\\"cript\\\">\\n&nbsp;</<tr><td height:2/productcountry include footer\\\" &lt;!-- title\\\"></jquery.</form>\\n(\\u00E7\\u00AE\\u0080\\u00E4\\u00BD\\u0093)(\\u00E7\\u00B9\\u0081\\u00E9\\u00AB\\u0094)hrvatskiitalianorom\\u00C3\\u00A2n\\u00C4\\u0083t\\u00C3\\u00BCrk\\u00C3\\u00A7e\\u00D8\\u00A7\\u00D8\\u00B1\\u00D8\\u00AF\\u00D9\\u0088tambi\\u00C3\\u00A9nnoticiasmensajespersonasderechosnacionalserviciocontactousuariosprogramagobiernoempresasanunciosvalenciacolombiadespu\\u00C3\\u00A9sdeportesproyectoproductop\\u00C3\\u00BAbliconosotroshistoriapresentemillonesmediantepreguntaanteriorrecursosproblemasantiagonuestrosopini\\u00C3\\u00B3nimprimirmientrasam\\u00C3\\u00A9ricavendedorsociedadrespectorealizarregistropalabrasinter\\u00C3\\u00A9sentoncesespecialmiembrosrealidadc\\u00C3\\u00B3rdobazaragozap\\u00C3\\u00A1ginassocialesbloqueargesti\\u00C3\\u00B3nalquilersistemascienciascompletoversi\\u00C3\\u00B3ncompletaestudiosp\\u00C3\\u00BAblicaobjetivoalicantebuscadorcantidadentradasaccionesarchivossuperiormayor\\u00C3\\u00ADaalemaniafunci\\u00C3\\u00B3n\\u00C3\\u00BAltimoshaciendoaquellosedici\\u00C3\\u00B3nfernandoambientefacebooknuestrasclientesprocesosbastantepresentareportarcongresopublicarcomerciocontratoj\\u00C3\\u00B3venesdistritot\\u00C3\\u00A9cnicaconjuntoenerg\\u00C3\\u00ADatrabajarasturiasrecienteutilizarbolet\\u00C3\\u00ADnsalvadorcorrectatrabajosprimerosnegocioslibertaddetallespantallapr\\u00C3\\u00B3ximoalmer\\u00C3\\u00ADaanimalesqui\\u00C3\\u00A9nescoraz\\u00C3\\u00B3nsecci\\u00C3\\u00B3nbuscandoopcionesexteriorconceptotodav\\u00C3\\u00ADagaler\\u00C3\\u00ADaescribirmedicinalicenciaconsultaaspectoscr\\u00C3\\u00ADticad\\u00C3\\u00B3laresjusticiadeber\\u00C3\\u00A1nper\\u00C3\\u00ADodonecesitamantenerpeque\\u00C3\\u00B1orecibidatribunaltenerifecanci\\u00C3\\u00B3ncanariasdescargadiversosmallorcarequieret\\u00C3\\u00A9cnicodeber\\u00C3\\u00ADaviviendafinanzasadelantefuncionaconsejosdif\\u00C3\\u00ADcilciudadesantiguasavanzadat\\u00C3\\u00A9rminounidadess\\u00C3\\u00A1nchezcampa\\u00C3\\u00B1asoftonicrevistascontienesectoresmomentosfacultadcr\\u00C3\\u00A9ditodiversassupuestofactoressegundospeque\\u00C3\\u00B1a\\u00D0\\u00B3\\u00D0\\u00BE\\u00D0\\u00B4\\u00D0\\u00B0\\u00D0\\u00B5\\u00D1\\u0081\\u00D0\\u00BB\\u00D0\\u00B8\\u00D0\\u00B5\\u00D1\\u0081\\u00D1\\u0082\\u00D1\\u008C\\u00D0\\u00B1\\u00D1\\u008B\\u00D0\\u00BB\\u00D0\\u00BE\\u00D0\\u00B1\\u00D1\\u008B\\u00D1\\u0082\\u00D1\\u008C\\u00D1\\u008D\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00BC\\u00D0\\u0095\\u00D1\\u0081\\u00D0\\u00BB\\u00D0\\u00B8\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00B3\\u00D0\\u00BE\\u00D0\\u00BC\\u00D0\\u00B5\\u00D0\\u00BD\\u00D1\\u008F\\u00D0\\u00B2\\u00D1\\u0081\\u00D0\\u00B5\\u00D1\\u0085\\u00D1\\u008D\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00B9\\u00D0\\u00B4\\u00D0\\u00B0\\u00D0\\u00B6\\u00D0\\u00B5\\u00D0\\u00B1\\u00D1\\u008B\\u00D0\\u00BB\\u00D0\\u00B8\\u00D0\\u00B3\\u00D0\\u00BE\\u00D0\\u00B4\\u00D1\\u0083\\u00D0\\u00B4\\u00D0\\u00B5\\u00D0\\u00BD\\u00D1\\u008C\\u00D1\\u008D\\u00D1\\u0082\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00B1\\u00D1\\u008B\\u00D0\\u00BB\\u00D0\\u00B0\\u00D1\\u0081\\u00D0\\u00B5\\u00D0\\u00B1\\u00D1\\u008F\\u00D0\\u00BE\\u00D0\\u00B4\\u00D0\\u00B8\\u00D0\\u00BD\\u00D1\\u0081\\u00D0\\u00B5\\u00D0\\u00B1\\u00D0\\u00B5\\u00D0\\u00BD\\u00D0\\u00B0\\u00D0\\u00B4\\u00D0\\u00BE\\u00D1\\u0081\\u00D0\\u00B0\\u00D0\\u00B9\\u00D1\\u0082\\u00D1\\u0084\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00BD\\u00D0\\u00B5\\u00D0\\u00B3\\u00D0\\u00BE\\u00D1\\u0081\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u00B8\\u00D1\\u0081\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u00B9\\u00D0\\u00B8\\u00D0\\u00B3\\u00D1\\u0080\\u00D1\\u008B\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00B6\\u00D0\\u00B5\\u00D0\\u00B2\\u00D1\\u0081\\u00D0\\u00B5\\u00D0\\u00BC\\u00D1\\u0081\\u00D0\\u00B2\\u00D0\\u00BE\\u00D1\\u008E\\u00D0\\u00BB\\u00D0\\u00B8\\u00D1\\u0088\\u00D1\\u008C\\u00D1\\u008D\\u00D1\\u0082\\u00D0\\u00B8\\u00D1\\u0085\\u00D0\\u00BF\\u00D0\\u00BE\\u00D0\\u00BA\\u00D0\\u00B0\\u00D0\\u00B4\\u00D0\\u00BD\\u00D0\\u00B5\\u00D0\\u00B9\\u00D0\\u00B4\\u00D0\\u00BE\\u00D0\\u00BC\\u00D0\\u00B0\\u00D0\\u00BC\\u00D0\\u00B8\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00BB\\u00D0\\u00B8\\u00D0\\u00B1\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00B5\\u00D0\\u00BC\\u00D1\\u0083\\u00D1\\u0085\\u00D0\\u00BE\\u00D1\\u0082\\u00D1\\u008F\\u00D0\\u00B4\\u00D0\\u00B2\\u00D1\\u0083\\u00D1\\u0085\\u00D1\\u0081\\u00D0\\u00B5\\u00D1\\u0082\\u00D0\\u00B8\\u00D0\\u00BB\\u00D1\\u008E\\u00D0\\u00B4\\u00D0\\u00B8\\u00D0\\u00B4\\u00D0\\u00B5\\u00D0\\u00BB\\u00D0\\u00BE\\u00D0\\u00BC\\u00D0\\u00B8\\u00D1\\u0080\\u00D0\\u00B5\\u00D1\\u0082\\u00D0\\u00B5\\u00D0\\u00B1\\u00D1\\u008F\\u00D1\\u0081\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u00B5\\u00D0\\u00B2\\u00D0\\u00B8\\u00D0\\u00B4\\u00D0\\u00B5\\u00D1\\u0087\\u00D0\\u00B5\\u00D0\\u00B3\\u00D0\\u00BE\\u00D1\\u008D\\u00D1\\u0082\\u00D0\\u00B8\\u00D0\\u00BC\\u00D1\\u0081\\u00D1\\u0087\\u00D0\\u00B5\\u00D1\\u0082\\u00D1\\u0082\\u00D0\\u00B5\\u00D0\\u00BC\\u00D1\\u008B\\u00D1\\u0086\\u00D0\\u00B5\\u00D0\\u00BD\\u00D1\\u008B\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B0\\u00D0\\u00BB\\u00D0\\u00B2\\u00D0\\u00B5\\u00D0\\u00B4\\u00D1\\u008C\\u00D1\\u0082\\u00D0\\u00B5\\u00D0\\u00BC\\u00D0\\u00B5\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u00B4\\u00D1\\u008B\\u00D1\\u0082\\u00D0\\u00B5\\u00D0\\u00B1\\u00D0\\u00B5\\u00D0\\u00B2\\u00D1\\u008B\\u00D1\\u0088\\u00D0\\u00B5\\u00D0\\u00BD\\u00D0\\u00B0\\u00D0\\u00BC\\u00D0\\u00B8\\u00D1\\u0082\\u00D0\\u00B8\\u00D0\\u00BF\\u00D0\\u00B0\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00BC\\u00D1\\u0083\\u00D0\\u00BF\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00B2\\u00D0\\u00BB\\u00D0\\u00B8\\u00D1\\u0086\\u00D0\\u00B0\\u00D0\\u00BE\\u00D0\\u00B4\\u00D0\\u00BD\\u00D0\\u00B0\\u00D0\\u00B3\\u00D0\\u00BE\\u00D0\\u00B4\\u00D1\\u008B\\u00D0\\u00B7\\u00D0\\u00BD\\u00D0\\u00B0\\u00D1\\u008E\\u00D0\\u00BC\\u00D0\\u00BE\\u00D0\\u00B3\\u00D1\\u0083\\u00D0\\u00B4\\u00D1\\u0080\\u00D1\\u0083\\u00D0\\u00B3\\u00D0\\u00B2\\u00D1\\u0081\\u00D0\\u00B5\\u00D0\\u00B9\\u00D0\\u00B8\\u00D0\\u00B4\\u00D0\\u00B5\\u00D1\\u0082\\u00D0\\u00BA\\u00D0\\u00B8\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00BE\\u00D0\\u00B4\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00B4\\u00D0\\u00B5\\u00D0\\u00BB\\u00D0\\u00B0\\u00D0\\u00B4\\u00D0\\u00B5\\u00D0\\u00BB\\u00D0\\u00B5\\u00D1\\u0081\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00BA\\u00D0\\u00B8\\u00D1\\u008E\\u00D0\\u00BD\\u00D1\\u008F\\u00D0\\u00B2\\u00D0\\u00B5\\u00D1\\u0081\\u00D1\\u008C\\u00D0\\u0095\\u00D1\\u0081\\u00D1\\u0082\\u00D1\\u008C\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00B7\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00B0\\u00D1\\u0088\\u00D0\\u00B8\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0084\\u00D9\\u0087\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AA\\u00D9\\u008A\\u00D8\\u00AC\\u00D9\\u0085\\u00D9\\u008A\\u00D8\\u00B9\\u00D8\\u00AE\\u00D8\\u00A7\\u00D8\\u00B5\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B0\\u00D9\\u008A\\u00D8\\u00B9\\u00D9\\u0084\\u00D9\\u008A\\u00D9\\u0087\\u00D8\\u00AC\\u00D8\\u00AF\\u00D9\\u008A\\u00D8\\u00AF\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A2\\u00D9\\u0086\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B1\\u00D8\\u00AF\\u00D8\\u00AA\\u00D8\\u00AD\\u00D9\\u0083\\u00D9\\u0085\\u00D8\\u00B5\\u00D9\\u0081\\u00D8\\u00AD\\u00D8\\u00A9\\u00D9\\u0083\\u00D8\\u00A7\\u00D9\\u0086\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0084\\u00D9\\u008A\\u00D9\\u008A\\u00D9\\u0083\\u00D9\\u0088\\u00D9\\u0086\\u00D8\\u00B4\\u00D8\\u00A8\\u00D9\\u0083\\u00D8\\u00A9\\u00D9\\u0081\\u00D9\\u008A\\u00D9\\u0087\\u00D8\\u00A7\\u00D8\\u00A8\\u00D9\\u0086\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00AD\\u00D9\\u0088\\u00D8\\u00A7\\u00D8\\u00A1\\u00D8\\u00A3\\u00D9\\u0083\\u00D8\\u00AB\\u00D8\\u00B1\\u00D8\\u00AE\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AD\\u00D8\\u00A8\\u00D8\\u00AF\\u00D9\\u0084\\u00D9\\u008A\\u00D9\\u0084\\u00D8\\u00AF\\u00D8\\u00B1\\u00D9\\u0088\\u00D8\\u00B3\\u00D8\\u00A7\\u00D8\\u00B6\\u00D8\\u00BA\\u00D8\\u00B7\\u00D8\\u00AA\\u00D9\\u0083\\u00D9\\u0088\\u00D9\\u0086\\u00D9\\u0087\\u00D9\\u0086\\u00D8\\u00A7\\u00D9\\u0083\\u00D8\\u00B3\\u00D8\\u00A7\\u00D8\\u00AD\\u00D8\\u00A9\\u00D9\\u0086\\u00D8\\u00A7\\u00D8\\u00AF\\u00D9\\u008A\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B7\\u00D8\\u00A8\\u00D8\\u00B9\\u00D9\\u0084\\u00D9\\u008A\\u00D9\\u0083\\u00D8\\u00B4\\u00D9\\u0083\\u00D8\\u00B1\\u00D8\\u00A7\\u00D9\\u008A\\u00D9\\u0085\\u00D9\\u0083\\u00D9\\u0086\\u00D9\\u0085\\u00D9\\u0086\\u00D9\\u0087\\u00D8\\u00A7\\u00D8\\u00B4\\u00D8\\u00B1\\u00D9\\u0083\\u00D8\\u00A9\\u00D8\\u00B1\\u00D8\\u00A6\\u00D9\\u008A\\u00D8\\u00B3\\u00D9\\u0086\\u00D8\\u00B4\\u00D9\\u008A\\u00D8\\u00B7\\u00D9\\u0085\\u00D8\\u00A7\\u00D8\\u00B0\\u00D8\\u00A7\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0081\\u00D9\\u0086\\u00D8\\u00B4\\u00D8\\u00A8\\u00D8\\u00A7\\u00D8\\u00A8\\u00D8\\u00AA\\u00D8\\u00B9\\u00D8\\u00A8\\u00D8\\u00B1\\u00D8\\u00B1\\u00D8\\u00AD\\u00D9\\u0085\\u00D8\\u00A9\\u00D9\\u0083\\u00D8\\u00A7\\u00D9\\u0081\\u00D8\\u00A9\\u00D9\\u008A\\u00D9\\u0082\\u00D9\\u0088\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00B1\\u00D9\\u0083\\u00D8\\u00B2\\u00D9\\u0083\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00A9\\u00D8\\u00A3\\u00D8\\u00AD\\u00D9\\u0085\\u00D8\\u00AF\\u00D9\\u0082\\u00D9\\u0084\\u00D8\\u00A8\\u00D9\\u008A\\u00D9\\u008A\\u00D8\\u00B9\\u00D9\\u0086\\u00D9\\u008A\\u00D8\\u00B5\\u00D9\\u0088\\u00D8\\u00B1\\u00D8\\u00A9\\u00D8\\u00B7\\u00D8\\u00B1\\u00D9\\u008A\\u00D9\\u0082\\u00D8\\u00B4\\u00D8\\u00A7\\u00D8\\u00B1\\u00D9\\u0083\\u00D8\\u00AC\\u00D9\\u0088\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A3\\u00D8\\u00AE\\u00D8\\u00B1\\u00D9\\u0089\\u00D9\\u0085\\u00D8\\u00B9\\u00D9\\u0086\\u00D8\\u00A7\\u00D8\\u00A7\\u00D8\\u00A8\\u00D8\\u00AD\\u00D8\\u00AB\\u00D8\\u00B9\\u00D8\\u00B1\\u00D9\\u0088\\u00D8\\u00B6\\u00D8\\u00A8\\u00D8\\u00B4\\u00D9\\u0083\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00B3\\u00D8\\u00AC\\u00D9\\u0084\\u00D8\\u00A8\\u00D9\\u0086\\u00D8\\u00A7\\u00D9\\u0086\\u00D8\\u00AE\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AF\\u00D9\\u0083\\u00D8\\u00AA\\u00D8\\u00A7\\u00D8\\u00A8\\u00D9\\u0083\\u00D9\\u0084\\u00D9\\u008A\\u00D8\\u00A9\\u00D8\\u00A8\\u00D8\\u00AF\\u00D9\\u0088\\u00D9\\u0086\\u00D8\\u00A3\\u00D9\\u008A\\u00D8\\u00B6\\u00D8\\u00A7\\u00D9\\u008A\\u00D9\\u0088\\u00D8\\u00AC\\u00D8\\u00AF\\u00D9\\u0081\\u00D8\\u00B1\\u00D9\\u008A\\u00D9\\u0082\\u00D9\\u0083\\u00D8\\u00AA\\u00D8\\u00A8\\u00D8\\u00AA\\u00D8\\u00A3\\u00D9\\u0081\\u00D8\\u00B6\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00B7\\u00D8\\u00A8\\u00D8\\u00AE\\u00D8\\u00A7\\u00D9\\u0083\\u00D8\\u00AB\\u00D8\\u00B1\\u00D8\\u00A8\\u00D8\\u00A7\\u00D8\\u00B1\\u00D9\\u0083\\u00D8\\u00A7\\u00D9\\u0081\\u00D8\\u00B6\\u00D9\\u0084\\u00D8\\u00A7\\u00D8\\u00AD\\u00D9\\u0084\\u00D9\\u0089\\u00D9\\u0086\\u00D9\\u0081\\u00D8\\u00B3\\u00D9\\u0087\\u00D8\\u00A3\\u00D9\\u008A\\u00D8\\u00A7\\u00D9\\u0085\\u00D8\\u00B1\\u00D8\\u00AF\\u00D9\\u0088\\u00D8\\u00AF\\u00D8\\u00A3\\u00D9\\u0086\\u00D9\\u0087\\u00D8\\u00A7\\u00D8\\u00AF\\u00D9\\u008A\\u00D9\\u0086\\u00D8\\u00A7\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0086\\u00D9\\u0085\\u00D8\\u00B9\\u00D8\\u00B1\\u00D8\\u00B6\\u00D8\\u00AA\\u00D8\\u00B9\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00AF\\u00D8\\u00A7\\u00D8\\u00AE\\u00D9\\u0084\\u00D9\\u0085\\u00D9\\u0085\\u00D9\\u0083\\u00D9\\u0086\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0001\\u0000\\u0001\\u0000\\u0001\\u0000\\u0001\\u0000\\u0002\\u0000\\u0002\\u0000\\u0002\\u0000\\u0002\\u0000\\u0004\\u0000\\u0004\\u0000\\u0004\\u0000\\u0004\\u0000\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\u0007\\u0006\\u0005\\u0004\\u0003\\u0002\\u0001\\u0000\\u0008\\t\\n\\u000B\\u000C\\r\\u000E\\u000F\\u000F\\u000E\\r\\u000C\\u000B\\n\\t\\u0008\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0017\\u0016\\u0015\\u0014\\u0013\\u0012\\u0011\\u0010\\u0018\\u0019\\u001A\\u001B\\u001C\\u001D\\u001E\\u001F\\u001F\\u001E\\u001D\\u001C\\u001B\\u001A\\u0019\\u0018\\u00FF\\u00FF\\u00FF\\u00FF\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u00FF\\u00FF\\u00FF\\u00FF\\u0001\\u0000\\u0000\\u0000\\u0002\\u0000\\u0000\\u0000\\u0002\\u0000\\u0000\\u0000\\u0001\\u0000\\u0000\\u0000\\u0001\\u0000\\u0000\\u0000\\u0003\\u0000\\u0000\\u0000\\u00FF\\u00FF\\u0000\\u0001\\u0000\\u0000\\u0000\\u0001\\u0000\\u0000\\u00FF\\u00FF\\u0000\\u0001\\u0000\\u0000\\u0000\\u0008\\u0000\\u0008\\u0000\\u0008\\u0000\\u0008\\u0000\\u0000\\u0000\\u0001\\u0000\\u0002\\u0000\\u0003\\u0000\\u0004\\u0000\\u0005\\u0000\\u0006\\u0000\\u0007resourcescountriesquestionsequipmentcommunityavailablehighlightDTD/xhtmlmarketingknowledgesomethingcontainerdirectionsubscribeadvertisecharacter\\\" value=\\\"</select>Australia\\\" class=\\\"situationauthorityfollowingprimarilyoperationchallengedevelopedanonymousfunction functionscompaniesstructureagreement\\\" title=\\\"potentialeducationargumentssecondarycopyrightlanguagesexclusivecondition</form>\\r\\nstatementattentionBiography} else {\\nsolutionswhen the Analyticstemplatesdangeroussatellitedocumentspublisherimportantprototypeinfluence&raquo;</effectivegenerallytransformbeautifultransportorganizedpublishedprominentuntil thethumbnailNational .focus();over the migrationannouncedfooter\\\">\\nexceptionless thanexpensiveformationframeworkterritoryndicationcurrentlyclassNamecriticismtraditionelsewhereAlexanderappointedmaterialsbroadcastmentionedaffiliate</option>treatmentdifferent/default.Presidentonclick=\\\"biographyotherwisepermanentFran\\u00C3\\u00A7aisHollywoodexpansionstandards</style>\\nreductionDecember preferredCambridgeopponentsBusiness confusion>\\n<title>presentedexplaineddoes not worldwideinterfacepositionsnewspaper</table>\\nmountainslike the essentialfinancialselectionaction=\\\"/abandonedEducationparseInt(stabilityunable to</title>\\nrelationsNote thatefficientperformedtwo yearsSince thethereforewrapper\\\">alternateincreasedBattle ofperceivedtrying tonecessaryportrayedelectionsElizabeth</iframe>discoveryinsurances.length;legendaryGeographycandidatecorporatesometimesservices.inherited</strong>CommunityreligiouslocationsCommitteebuildingsthe worldno longerbeginningreferencecannot befrequencytypicallyinto the relative;recordingpresidentinitiallytechniquethe otherit can beexistenceunderlinethis timetelephoneitemscopepracticesadvantage);return For otherprovidingdemocracyboth the extensivesufferingsupportedcomputers functionpracticalsaid thatit may beEnglish</from the scheduleddownloads</label>\\nsuspectedmargin: 0spiritual</head>\\n\\nmicrosoftgraduallydiscussedhe becameexecutivejquery.jshouseholdconfirmedpurchasedliterallydestroyedup to thevariationremainingit is notcenturiesJapanese among thecompletedalgorithminterestsrebellionundefinedencourageresizableinvolvingsensitiveuniversalprovision(althoughfeaturingconducted), which continued-header\\\">February numerous overflow:componentfragmentsexcellentcolspan=\\\"technicalnear the Advanced source ofexpressedHong Kong Facebookmultiple mechanismelevationoffensive</form>\\n\\tsponsoreddocument.or &quot;there arethose whomovementsprocessesdifficultsubmittedrecommendconvincedpromoting\\\" width=\\\".replace(classicalcoalitionhis firstdecisionsassistantindicatedevolution-wrapper\\\"enough toalong thedelivered-->\\r\\n<!--American protectedNovember </style><furnitureInternet  onblur=\\\"suspendedrecipientbased on Moreover,abolishedcollectedwere madeemotionalemergencynarrativeadvocatespx;bordercommitteddir=\\\"ltr\\\"employeesresearch. selectedsuccessorcustomersdisplayedSeptemberaddClass(Facebook suggestedand lateroperatingelaborateSometimesInstitutecertainlyinstalledfollowersJerusalemthey havecomputinggeneratedprovincesguaranteearbitraryrecognizewanted topx;width:theory ofbehaviourWhile theestimatedbegan to it becamemagnitudemust havemore thanDirectoryextensionsecretarynaturallyoccurringvariablesgiven theplatform.</label><failed tocompoundskinds of societiesalongside --&gt;\\n\\nsouthwestthe rightradiationmay have unescape(spoken in\\\" href=\\\"/programmeonly the come fromdirectoryburied ina similarthey were</font></Norwegianspecifiedproducingpassenger(new DatetemporaryfictionalAfter theequationsdownload.regularlydeveloperabove thelinked tophenomenaperiod oftooltip\\\">substanceautomaticaspect ofAmong theconnectedestimatesAir Forcesystem ofobjectiveimmediatemaking itpaintingsconqueredare stillproceduregrowth ofheaded byEuropean divisionsmoleculesfranchiseintentionattractedchildhoodalso useddedicatedsingaporedegree offather ofconflicts</a></p>\\ncame fromwere usednote thatreceivingExecutiveeven moreaccess tocommanderPoliticalmusiciansdeliciousprisonersadvent ofUTF-8\\\" /><![CDATA[\\\">ContactSouthern bgcolor=\\\"series of. It was in Europepermittedvalidate.appearingofficialsseriously-languageinitiatedextendinglong-terminflationsuch thatgetCookiemarked by</button>implementbut it isincreasesdown the requiringdependent-->\\n<!-- interviewWith the copies ofconsensuswas builtVenezuela(formerlythe statepersonnelstrategicfavour ofinventionWikipediacontinentvirtuallywhich wasprincipleComplete identicalshow thatprimitiveaway frommolecularpreciselydissolvedUnder theversion=\\\">&nbsp;</It is the This is will haveorganismssome timeFriedrichwas firstthe only fact thatform id=\\\"precedingTechnicalphysicistoccurs innavigatorsection\\\">span id=\\\"sought tobelow thesurviving}</style>his deathas in thecaused bypartiallyexisting using thewas givena list oflevels ofnotion ofOfficial dismissedscientistresemblesduplicateexplosiverecoveredall othergalleries{padding:people ofregion ofaddressesassociateimg alt=\\\"in modernshould bemethod ofreportingtimestampneeded tothe Greatregardingseemed toviewed asimpact onidea thatthe Worldheight ofexpandingThese arecurrent\\\">carefullymaintainscharge ofClassicaladdressedpredictedownership<div id=\\\"right\\\">\\r\\nresidenceleave thecontent\\\">are often  })();\\r\\nprobably Professor-button\\\" respondedsays thathad to beplaced inHungarianstatus ofserves asUniversalexecutionaggregatefor whichinfectionagreed tohowever, popular\\\">placed onconstructelectoralsymbol ofincludingreturn toarchitectChristianprevious living ineasier toprofessor\\n&lt;!-- effect ofanalyticswas takenwhere thetook overbelief inAfrikaansas far aspreventedwork witha special<fieldsetChristmasRetrieved\\n\\nIn the back intonortheastmagazines><strong>committeegoverninggroups ofstored inestablisha generalits firsttheir ownpopulatedan objectCaribbeanallow thedistrictswisconsinlocation.; width: inhabitedSocialistJanuary 1</footer>similarlychoice ofthe same specific business The first.length; desire todeal withsince theuserAgentconceivedindex.phpas &quot;engage inrecently,few yearswere also\\n<head>\\n<edited byare knowncities inaccesskeycondemnedalso haveservices,family ofSchool ofconvertednature of languageministers</object>there is a popularsequencesadvocatedThey wereany otherlocation=enter themuch morereflectedwas namedoriginal a typicalwhen theyengineerscould notresidentswednesdaythe third productsJanuary 2what theya certainreactionsprocessorafter histhe last contained\\\"></div>\\n</a></td>depend onsearch\\\">\\npieces ofcompetingReferencetennesseewhich has version=</span> <</header>gives thehistorianvalue=\\\"\\\">padding:0view thattogether,the most was foundsubset ofattack onchildren,points ofpersonal position:allegedlyClevelandwas laterand afterare givenwas stillscrollingdesign ofmakes themuch lessAmericans.\\n\\nAfter , but theMuseum oflouisiana(from theminnesotaparticlesa processDominicanvolume ofreturningdefensive00px|righmade frommouseover\\\" style=\\\"states of(which iscontinuesFranciscobuilding without awith somewho woulda form ofa part ofbefore itknown as  Serviceslocation and oftenmeasuringand it ispaperbackvalues of\\r\\n<title>= window.determineer&quot; played byand early</center>from thisthe threepower andof &quot;innerHTML<a href=\\\"y:inline;Church ofthe eventvery highofficial -height: content=\\\"/cgi-bin/to createafrikaansesperantofran\\u00C3\\u00A7aislatvie\\u00C5\\u00A1ulietuvi\\u00C5\\u00B3\\u00C4\\u008Ce\\u00C5\\u00A1tina\\u00C4\\u008De\\u00C5\\u00A1tina\\u00E0\\u00B9\\u0084\\u00E0\\u00B8\\u0097\\u00E0\\u00B8\\u00A2\\u00E6\\u0097\\u00A5\\u00E6\\u009C\\u00AC\\u00E8\\u00AA\\u009E\\u00E7\\u00AE\\u0080\\u00E4\\u00BD\\u0093\\u00E5\\u00AD\\u0097\\u00E7\\u00B9\\u0081\\u00E9\\u00AB\\u0094\\u00E5\\u00AD\\u0097\\u00ED\\u0095\\u009C\\u00EA\\u00B5\\u00AD\\u00EC\\u0096\\u00B4\\u00E4\\u00B8\\u00BA\\u00E4\\u00BB\\u0080\\u00E4\\u00B9\\u0088\\u00E8\\u00AE\\u00A1\\u00E7\\u00AE\\u0097\\u00E6\\u009C\\u00BA\\u00E7\\u00AC\\u0094\\u00E8\\u00AE\\u00B0\\u00E6\\u009C\\u00AC\\u00E8\\u00A8\\u008E\\u00E8\\u00AB\\u0096\\u00E5\\u008D\\u0080\\u00E6\\u009C\\u008D\\u00E5\\u008A\\u00A1\\u00E5\\u0099\\u00A8\\u00E4\\u00BA\\u0092\\u00E8\\u0081\\u0094\\u00E7\\u00BD\\u0091\\u00E6\\u0088\\u00BF\\u00E5\\u009C\\u00B0\\u00E4\\u00BA\\u00A7\\u00E4\\u00BF\\u00B1\\u00E4\\u00B9\\u0090\\u00E9\\u0083\\u00A8\\u00E5\\u0087\\u00BA\\u00E7\\u0089\\u0088\\u00E7\\u00A4\\u00BE\\u00E6\\u008E\\u0092\\u00E8\\u00A1\\u008C\\u00E6\\u00A6\\u009C\\u00E9\\u0083\\u00A8\\u00E8\\u0090\\u00BD\\u00E6\\u00A0\\u00BC\\u00E8\\u00BF\\u009B\\u00E4\\u00B8\\u0080\\u00E6\\u00AD\\u00A5\\u00E6\\u0094\\u00AF\\u00E4\\u00BB\\u0098\\u00E5\\u00AE\\u009D\\u00E9\\u00AA\\u008C\\u00E8\\u00AF\\u0081\\u00E7\\u00A0\\u0081\\u00E5\\u00A7\\u0094\\u00E5\\u0091\\u0098\\u00E4\\u00BC\\u009A\\u00E6\\u0095\\u00B0\\u00E6\\u008D\\u00AE\\u00E5\\u00BA\\u0093\\u00E6\\u00B6\\u0088\\u00E8\\u00B4\\u00B9\\u00E8\\u0080\\u0085\\u00E5\\u008A\\u009E\\u00E5\\u0085\\u00AC\\u00E5\\u00AE\\u00A4\\u00E8\\u00AE\\u00A8\\u00E8\\u00AE\\u00BA\\u00E5\\u008C\\u00BA\\u00E6\\u00B7\\u00B1\\u00E5\\u009C\\u00B3\\u00E5\\u00B8\\u0082\\u00E6\\u0092\\u00AD\\u00E6\\u0094\\u00BE\\u00E5\\u0099\\u00A8\\u00E5\\u008C\\u0097\\u00E4\\u00BA\\u00AC\\u00E5\\u00B8\\u0082\\u00E5\\u00A4\\u00A7\\u00E5\\u00AD\\u00A6\\u00E7\\u0094\\u009F\\u00E8\\u00B6\\u008A\\u00E6\\u009D\\u00A5\\u00E8\\u00B6\\u008A\\u00E7\\u00AE\\u00A1\\u00E7\\u0090\\u0086\\u00E5\\u0091\\u0098\\u00E4\\u00BF\\u00A1\\u00E6\\u0081\\u00AF\\u00E7\\u00BD\\u0091serviciosart\\u00C3\\u00ADculoargentinabarcelonacualquierpublicadoproductospol\\u00C3\\u00ADticarespuestawikipediasiguienteb\\u00C3\\u00BAsquedacomunidadseguridadprincipalpreguntascontenidorespondervenezuelaproblemasdiciembrerelaci\\u00C3\\u00B3nnoviembresimilaresproyectosprogramasinstitutoactividadencuentraeconom\\u00C3\\u00ADaim\\u00C3\\u00A1genescontactardescargarnecesarioatenci\\u00C3\\u00B3ntel\\u00C3\\u00A9fonocomisi\\u00C3\\u00B3ncancionescapacidadencontraran\\u00C3\\u00A1lisisfavoritost\\u00C3\\u00A9rminosprovinciaetiquetaselementosfuncionesresultadocar\\u00C3\\u00A1cterpropiedadprincipionecesidadmunicipalcreaci\\u00C3\\u00B3ndescargaspresenciacomercialopinionesejercicioeditorialsalamancagonz\\u00C3\\u00A1lezdocumentopel\\u00C3\\u00ADcularecientesgeneralestarragonapr\\u00C3\\u00A1cticanovedadespropuestapacientest\\u00C3\\u00A9cnicasobjetivoscontactos\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u008F\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0088\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A5\\u00E0\\u00A4\\u008F\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0088\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u009B\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00AD\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u008F\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0088\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A4diplodocs\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0082\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AB\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0094\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u0086\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B6\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u0088\\u00E0\\u00A4\\u0096\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00B5\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00AC\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u009A\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u008C\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0096\\u00E0\\u00A4\\u009C\\u00E0\\u00A5\\u0089\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00A5\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B6\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00AD\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u008F\\u00E0\\u00A4\\u0089\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00AF\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0082\\u00E0\\u00A4\\u0081\\u00E0\\u00A4\\u0086\\u00E0\\u00A4\\u0097\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u009F\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u0096\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u00AD\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00AF\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00B5\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u009F\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0090\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u008A\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u009A\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0090\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0082\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0096\\u00E0\\u00A4\\u009C\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u009F\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u0087\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0086\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0089\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00AD\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u0097\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A5\\u00E0\\u00A4\\u0087\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A0\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0081\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0082\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u0086\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008C\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00B6\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0096\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u0096\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u0097\\u00E0\\u00A5\\u0080categoriesexperience</title>\\r\\nCopyright javascriptconditionseverything<p class=\\\"technologybackground<a class=\\\"management&copy; 201javaScriptcharactersbreadcrumbthemselveshorizontalgovernmentCaliforniaactivitiesdiscoveredNavigationtransitionconnectionnavigationappearance</title><mcheckbox\\\" techniquesprotectionapparentlyas well asunt', 'UA-resolutionoperationstelevisiontranslatedWashingtonnavigator. = window.impression&lt;br&gt;literaturepopulationbgcolor=\\\"#especially content=\\\"productionnewsletterpropertiesdefinitionleadershipTechnologyParliamentcomparisonul class=\\\".indexOf(\\\"conclusiondiscussioncomponentsbiologicalRevolution_containerunderstoodnoscript><permissioneach otheratmosphere onfocus=\\\"<form id=\\\"processingthis.valuegenerationConferencesubsequentwell-knownvariationsreputationphenomenondisciplinelogo.png\\\" (document,boundariesexpressionsettlementBackgroundout of theenterprise(\\\"https:\\\" unescape(\\\"password\\\" democratic<a href=\\\"/wrapper\\\">\\nmembershiplinguisticpx;paddingphilosophyassistanceuniversityfacilitiesrecognizedpreferenceif (typeofmaintainedvocabularyhypothesis.submit();&amp;nbsp;annotationbehind theFoundationpublisher\\\"assumptionintroducedcorruptionscientistsexplicitlyinstead ofdimensions onClick=\\\"considereddepartmentoccupationsoon afterinvestmentpronouncedidentifiedexperimentManagementgeographic\\\" height=\\\"link rel=\\\".replace(/depressionconferencepunishmenteliminatedresistanceadaptationoppositionwell knownsupplementdeterminedh1 class=\\\"0px;marginmechanicalstatisticscelebratedGovernment\\n\\nDuring tdevelopersartificialequivalentoriginatedCommissionattachment<span id=\\\"there wereNederlandsbeyond theregisteredjournalistfrequentlyall of thelang=\\\"en\\\" </style>\\r\\nabsolute; supportingextremely mainstream</strong> popularityemployment</table>\\r\\n colspan=\\\"</form>\\n  conversionabout the </p></div>integrated\\\" lang=\\\"enPortuguesesubstituteindividualimpossiblemultimediaalmost allpx solid #apart fromsubject toin Englishcriticizedexcept forguidelinesoriginallyremarkablethe secondh2 class=\\\"<a title=\\\"(includingparametersprohibited= \\\"http://dictionaryperceptionrevolutionfoundationpx;height:successfulsupportersmillenniumhis fatherthe &quot;no-repeat;commercialindustrialencouragedamount of unofficialefficiencyReferencescoordinatedisclaimerexpeditiondevelopingcalculatedsimplifiedlegitimatesubstring(0\\\" class=\\\"completelyillustratefive yearsinstrumentPublishing1\\\" class=\\\"psychologyconfidencenumber of absence offocused onjoined thestructurespreviously></iframe>once againbut ratherimmigrantsof course,a group ofLiteratureUnlike the</a>&nbsp;\\nfunction it was theConventionautomobileProtestantaggressiveafter the Similarly,\\\" /></div>collection\\r\\nfunctionvisibilitythe use ofvolunteersattractionunder the threatened*<![CDATA[importancein generalthe latter</form>\\n</.indexOf('i = 0; i <differencedevoted totraditionssearch forultimatelytournamentattributesso-called }\\n</style>evaluationemphasizedaccessible</section>successionalong withMeanwhile,industries</a><br />has becomeaspects ofTelevisionsufficientbasketballboth sidescontinuingan article<img alt=\\\"adventureshis mothermanchesterprinciplesparticularcommentaryeffects ofdecided to\\\"><strong>publishersJournal ofdifficultyfacilitateacceptablestyle.css\\\"\\tfunction innovation>Copyrightsituationswould havebusinessesDictionarystatementsoften usedpersistentin Januarycomprising</title>\\n\\tdiplomaticcontainingperformingextensionsmay not beconcept of onclick=\\\"It is alsofinancial making theLuxembourgadditionalare calledengaged in\\\"script\\\");but it waselectroniconsubmit=\\\"\\n<!-- End electricalofficiallysuggestiontop of theunlike theAustralianOriginallyreferences\\n</head>\\r\\nrecognisedinitializelimited toAlexandriaretirementAdventuresfour years\\n\\n&lt;!-- increasingdecorationh3 class=\\\"origins ofobligationregulationclassified(function(advantagesbeing the historians<base hrefrepeatedlywilling tocomparabledesignatednominationfunctionalinside therevelationend of thes for the authorizedrefused totake placeautonomouscompromisepolitical restauranttwo of theFebruary 2quality ofswfobject.understandnearly allwritten byinterviews\\\" width=\\\"1withdrawalfloat:leftis usuallycandidatesnewspapersmysteriousDepartmentbest knownparliamentsuppressedconvenientremembereddifferent systematichas led topropagandacontrolledinfluencesceremonialproclaimedProtectionli class=\\\"Scientificclass=\\\"no-trademarksmore than widespreadLiberationtook placeday of theas long asimprisonedAdditional\\n<head>\\n<mLaboratoryNovember 2exceptionsIndustrialvariety offloat: lefDuring theassessmenthave been deals withStatisticsoccurrence/ul></div>clearfix\\\">the publicmany yearswhich wereover time,synonymouscontent\\\">\\npresumablyhis familyuserAgent.unexpectedincluding challengeda minorityundefined\\\"belongs totaken fromin Octoberposition: said to bereligious Federation rowspan=\\\"only a fewmeant thatled to the-->\\r\\n<div <fieldset>Archbishop class=\\\"nobeing usedapproachesprivilegesnoscript>\\nresults inmay be theEaster eggmechanismsreasonablePopulationCollectionselected\\\">noscript>\\r/index.phparrival of-jssdk'));managed toincompletecasualtiescompletionChristiansSeptember arithmeticproceduresmight haveProductionit appearsPhilosophyfriendshipleading togiving thetoward theguaranteeddocumentedcolor:#000video gamecommissionreflectingchange theassociatedsans-serifonkeypress; padding:He was theunderlyingtypically , and the srcElementsuccessivesince the should be networkingaccountinguse of thelower thanshows that</span>\\n\\t\\tcomplaintscontinuousquantitiesastronomerhe did notdue to itsapplied toan averageefforts tothe futureattempt toTherefore,capabilityRepublicanwas formedElectronickilometerschallengespublishingthe formerindigenousdirectionssubsidiaryconspiracydetails ofand in theaffordablesubstancesreason forconventionitemtype=\\\"absolutelysupposedlyremained aattractivetravellingseparatelyfocuses onelementaryapplicablefound thatstylesheetmanuscriptstands for no-repeat(sometimesCommercialin Americaundertakenquarter ofan examplepersonallyindex.php?</button>\\npercentagebest-knowncreating a\\\" dir=\\\"ltrLieutenant\\n<div id=\\\"they wouldability ofmade up ofnoted thatclear thatargue thatto anotherchildren'spurpose offormulatedbased uponthe regionsubject ofpassengerspossession.\\n\\nIn the Before theafterwardscurrently across thescientificcommunity.capitalismin Germanyright-wingthe systemSociety ofpoliticiandirection:went on toremoval of New York apartmentsindicationduring theunless thehistoricalhad been adefinitiveingredientattendanceCenter forprominencereadyStatestrategiesbut in theas part ofconstituteclaim thatlaboratorycompatiblefailure of, such as began withusing the to providefeature offrom which/\\\" class=\\\"geologicalseveral ofdeliberateimportant holds thating&quot; valign=topthe Germanoutside ofnegotiatedhis careerseparationid=\\\"searchwas calledthe fourthrecreationother thanpreventionwhile the education,connectingaccuratelywere builtwas killedagreementsmuch more Due to thewidth: 100some otherKingdom ofthe entirefamous forto connectobjectivesthe Frenchpeople andfeatured\\\">is said tostructuralreferendummost oftena separate->\\n<div id Official worldwide.aria-labelthe planetand it wasd\\\" value=\\\"looking atbeneficialare in themonitoringreportedlythe modernworking onallowed towhere the innovative</a></div>soundtracksearchFormtend to beinput id=\\\"opening ofrestrictedadopted byaddressingtheologianmethods ofvariant ofChristian very largeautomotiveby far therange frompursuit offollow thebrought toin Englandagree thataccused ofcomes frompreventingdiv style=his or hertremendousfreedom ofconcerning0 1em 1em;Basketball/style.cssan earliereven after/\\\" title=\\\".com/indextaking thepittsburghcontent\\\">\\r<script>(fturned outhaving the</span>\\r\\n occasionalbecause itstarted tophysically></div>\\n  created byCurrently, bgcolor=\\\"tabindex=\\\"disastrousAnalytics also has a><div id=\\\"</style>\\n<called forsinger and.src = \\\"//violationsthis pointconstantlyis locatedrecordingsd from thenederlandsportugu\\u00C3\\u00AAs\\u00D7\\u00A2\\u00D7\\u0091\\u00D7\\u00A8\\u00D7\\u0099\\u00D7\\u00AA\\u00D9\\u0081\\u00D8\\u00A7\\u00D8\\u00B1\\u00D8\\u00B3\\u00DB\\u008Cdesarrollocomentarioeducaci\\u00C3\\u00B3nseptiembreregistradodirecci\\u00C3\\u00B3nubicaci\\u00C3\\u00B3npublicidadrespuestasresultadosimportantereservadosart\\u00C3\\u00ADculosdiferentessiguientesrep\\u00C3\\u00BAblicasituaci\\u00C3\\u00B3nministerioprivacidaddirectorioformaci\\u00C3\\u00B3npoblaci\\u00C3\\u00B3npresidentecontenidosaccesoriostechnoratipersonalescategor\\u00C3\\u00ADaespecialesdisponibleactualidadreferenciavalladolidbibliotecarelacionescalendariopol\\u00C3\\u00ADticasanterioresdocumentosnaturalezamaterialesdiferenciaecon\\u00C3\\u00B3micatransporterodr\\u00C3\\u00ADguezparticiparencuentrandiscusi\\u00C3\\u00B3nestructurafundaci\\u00C3\\u00B3nfrecuentespermanentetotalmente\\u00D0\\u00BC\\u00D0\\u00BE\\u00D0\\u00B6\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00B1\\u00D1\\u0083\\u00D0\\u00B4\\u00D0\\u00B5\\u00D1\\u0082\\u00D0\\u00BC\\u00D0\\u00BE\\u00D0\\u00B6\\u00D0\\u00B5\\u00D1\\u0082\\u00D0\\u00B2\\u00D1\\u0080\\u00D0\\u00B5\\u00D0\\u00BC\\u00D1\\u008F\\u00D1\\u0082\\u00D0\\u00B0\\u00D0\\u00BA\\u00D0\\u00B6\\u00D0\\u00B5\\u00D1\\u0087\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00B1\\u00D1\\u008B\\u00D0\\u00B1\\u00D0\\u00BE\\u00D0\\u00BB\\u00D0\\u00B5\\u00D0\\u00B5\\u00D0\\u00BE\\u00D1\\u0087\\u00D0\\u00B5\\u00D0\\u00BD\\u00D1\\u008C\\u00D1\\u008D\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00B3\\u00D0\\u00BE\\u00D0\\u00BA\\u00D0\\u00BE\\u00D0\\u00B3\\u00D0\\u00B4\\u00D0\\u00B0\\u00D0\\u00BF\\u00D0\\u00BE\\u00D1\\u0081\\u00D0\\u00BB\\u00D0\\u00B5\\u00D0\\u00B2\\u00D1\\u0081\\u00D0\\u00B5\\u00D0\\u00B3\\u00D0\\u00BE\\u00D1\\u0081\\u00D0\\u00B0\\u00D0\\u00B9\\u00D1\\u0082\\u00D0\\u00B5\\u00D1\\u0087\\u00D0\\u00B5\\u00D1\\u0080\\u00D0\\u00B5\\u00D0\\u00B7\\u00D0\\u00BC\\u00D0\\u00BE\\u00D0\\u00B3\\u00D1\\u0083\\u00D1\\u0082\\u00D1\\u0081\\u00D0\\u00B0\\u00D0\\u00B9\\u00D1\\u0082\\u00D0\\u00B0\\u00D0\\u00B6\\u00D0\\u00B8\\u00D0\\u00B7\\u00D0\\u00BD\\u00D0\\u00B8\\u00D0\\u00BC\\u00D0\\u00B5\\u00D0\\u00B6\\u00D0\\u00B4\\u00D1\\u0083\\u00D0\\u00B1\\u00D1\\u0083\\u00D0\\u00B4\\u00D1\\u0083\\u00D1\\u0082\\u00D0\\u009F\\u00D0\\u00BE\\u00D0\\u00B8\\u00D1\\u0081\\u00D0\\u00BA\\u00D0\\u00B7\\u00D0\\u00B4\\u00D0\\u00B5\\u00D1\\u0081\\u00D1\\u008C\\u00D0\\u00B2\\u00D0\\u00B8\\u00D0\\u00B4\\u00D0\\u00B5\\u00D0\\u00BE\\u00D1\\u0081\\u00D0\\u00B2\\u00D1\\u008F\\u00D0\\u00B7\\u00D0\\u00B8\\u00D0\\u00BD\\u00D1\\u0083\\u00D0\\u00B6\\u00D0\\u00BD\\u00D0\\u00BE\\u00D1\\u0081\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u00B5\\u00D0\\u00B9\\u00D0\\u00BB\\u00D1\\u008E\\u00D0\\u00B4\\u00D0\\u00B5\\u00D0\\u00B9\\u00D0\\u00BF\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00BC\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00B3\\u00D0\\u00BE\\u00D0\\u00B4\\u00D0\\u00B5\\u00D1\\u0082\\u00D0\\u00B5\\u00D0\\u00B9\\u00D1\\u0081\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u00B8\\u00D1\\u0085\\u00D0\\u00BF\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00B2\\u00D0\\u00B0\\u00D1\\u0082\\u00D0\\u00B0\\u00D0\\u00BA\\u00D0\\u00BE\\u00D0\\u00B9\\u00D0\\u00BC\\u00D0\\u00B5\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00B8\\u00D0\\u00BC\\u00D0\\u00B5\\u00D0\\u00B5\\u00D1\\u0082\\u00D0\\u00B6\\u00D0\\u00B8\\u00D0\\u00B7\\u00D0\\u00BD\\u00D1\\u008C\\u00D0\\u00BE\\u00D0\\u00B4\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00B9\\u00D0\\u00BB\\u00D1\\u0083\\u00D1\\u0087\\u00D1\\u0088\\u00D0\\u00B5\\u00D0\\u00BF\\u00D0\\u00B5\\u00D1\\u0080\\u00D0\\u00B5\\u00D0\\u00B4\\u00D1\\u0087\\u00D0\\u00B0\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B8\\u00D1\\u0087\\u00D0\\u00B0\\u00D1\\u0081\\u00D1\\u0082\\u00D1\\u008C\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00B1\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00B2\\u00D1\\u008B\\u00D1\\u0085\\u00D0\\u00BF\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00B2\\u00D0\\u00BE\\u00D1\\u0081\\u00D0\\u00BE\\u00D0\\u00B1\\u00D0\\u00BE\\u00D0\\u00B9\\u00D0\\u00BF\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00BC\\u00D0\\u00BC\\u00D0\\u00B5\\u00D0\\u00BD\\u00D0\\u00B5\\u00D0\\u00B5\\u00D1\\u0087\\u00D0\\u00B8\\u00D1\\u0081\\u00D0\\u00BB\\u00D0\\u00B5\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00B2\\u00D1\\u008B\\u00D0\\u00B5\\u00D1\\u0083\\u00D1\\u0081\\u00D0\\u00BB\\u00D1\\u0083\\u00D0\\u00B3\\u00D0\\u00BE\\u00D0\\u00BA\\u00D0\\u00BE\\u00D0\\u00BB\\u00D0\\u00BE\\u00D0\\u00BD\\u00D0\\u00B0\\u00D0\\u00B7\\u00D0\\u00B0\\u00D0\\u00B4\\u00D1\\u0082\\u00D0\\u00B0\\u00D0\\u00BA\\u00D0\\u00BE\\u00D0\\u00B5\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00B3\\u00D0\\u00B4\\u00D0\\u00B0\\u00D0\\u00BF\\u00D0\\u00BE\\u00D1\\u0087\\u00D1\\u0082\\u00D0\\u00B8\\u00D0\\u009F\\u00D0\\u00BE\\u00D1\\u0081\\u00D0\\u00BB\\u00D0\\u00B5\\u00D1\\u0082\\u00D0\\u00B0\\u00D0\\u00BA\\u00D0\\u00B8\\u00D0\\u00B5\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00B2\\u00D1\\u008B\\u00D0\\u00B9\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00B8\\u00D1\\u0082\\u00D1\\u0082\\u00D0\\u00B0\\u00D0\\u00BA\\u00D0\\u00B8\\u00D1\\u0085\\u00D1\\u0081\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00B7\\u00D1\\u0083\\u00D0\\u00A1\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00BA\\u00D1\\u0082\\u00D1\\u0084\\u00D0\\u00BE\\u00D1\\u0080\\u00D1\\u0083\\u00D0\\u00BC\\u00D0\\u009A\\u00D0\\u00BE\\u00D0\\u00B3\\u00D0\\u00B4\\u00D0\\u00B0\\u00D0\\u00BA\\u00D0\\u00BD\\u00D0\\u00B8\\u00D0\\u00B3\\u00D0\\u00B8\\u00D1\\u0081\\u00D0\\u00BB\\u00D0\\u00BE\\u00D0\\u00B2\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00B0\\u00D1\\u0088\\u00D0\\u00B5\\u00D0\\u00B9\\u00D0\\u00BD\\u00D0\\u00B0\\u00D0\\u00B9\\u00D1\\u0082\\u00D0\\u00B8\\u00D1\\u0081\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u00B8\\u00D0\\u00BC\\u00D1\\u0081\\u00D0\\u00B2\\u00D1\\u008F\\u00D0\\u00B7\\u00D1\\u008C\\u00D0\\u00BB\\u00D1\\u008E\\u00D0\\u00B1\\u00D0\\u00BE\\u00D0\\u00B9\\u00D1\\u0087\\u00D0\\u00B0\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00BE\\u00D1\\u0081\\u00D1\\u0080\\u00D0\\u00B5\\u00D0\\u00B4\\u00D0\\u00B8\\u00D0\\u009A\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00BC\\u00D0\\u00B5\\u00D0\\u00A4\\u00D0\\u00BE\\u00D1\\u0080\\u00D1\\u0083\\u00D0\\u00BC\\u00D1\\u0080\\u00D1\\u008B\\u00D0\\u00BD\\u00D0\\u00BA\\u00D0\\u00B5\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B0\\u00D0\\u00BB\\u00D0\\u00B8\\u00D0\\u00BF\\u00D0\\u00BE\\u00D0\\u00B8\\u00D1\\u0081\\u00D0\\u00BA\\u00D1\\u0082\\u00D1\\u008B\\u00D1\\u0081\\u00D1\\u008F\\u00D1\\u0087\\u00D0\\u00BC\\u00D0\\u00B5\\u00D1\\u0081\\u00D1\\u008F\\u00D1\\u0086\\u00D1\\u0086\\u00D0\\u00B5\\u00D0\\u00BD\\u00D1\\u0082\\u00D1\\u0080\\u00D1\\u0082\\u00D1\\u0080\\u00D1\\u0083\\u00D0\\u00B4\\u00D0\\u00B0\\u00D1\\u0081\\u00D0\\u00B0\\u00D0\\u00BC\\u00D1\\u008B\\u00D1\\u0085\\u00D1\\u0080\\u00D1\\u008B\\u00D0\\u00BD\\u00D0\\u00BA\\u00D0\\u00B0\\u00D0\\u009D\\u00D0\\u00BE\\u00D0\\u00B2\\u00D1\\u008B\\u00D0\\u00B9\\u00D1\\u0087\\u00D0\\u00B0\\u00D1\\u0081\\u00D0\\u00BE\\u00D0\\u00B2\\u00D0\\u00BC\\u00D0\\u00B5\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B0\\u00D1\\u0084\\u00D0\\u00B8\\u00D0\\u00BB\\u00D1\\u008C\\u00D0\\u00BC\\u00D0\\u00BC\\u00D0\\u00B0\\u00D1\\u0080\\u00D1\\u0082\\u00D0\\u00B0\\u00D1\\u0081\\u00D1\\u0082\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00BC\\u00D0\\u00B5\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B5\\u00D1\\u0082\\u00D0\\u00B5\\u00D0\\u00BA\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00BD\\u00D0\\u00B0\\u00D1\\u0088\\u00D0\\u00B8\\u00D1\\u0085\\u00D0\\u00BC\\u00D0\\u00B8\\u00D0\\u00BD\\u00D1\\u0083\\u00D1\\u0082\\u00D0\\u00B8\\u00D0\\u00BC\\u00D0\\u00B5\\u00D0\\u00BD\\u00D0\\u00B8\\u00D0\\u00B8\\u00D0\\u00BC\\u00D0\\u00B5\\u00D1\\u008E\\u00D1\\u0082\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00BC\\u00D0\\u00B5\\u00D1\\u0080\\u00D0\\u00B3\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00B4\\u00D1\\u0081\\u00D0\\u00B0\\u00D0\\u00BC\\u00D0\\u00BE\\u00D0\\u00BC\\u00D1\\u008D\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00BC\\u00D1\\u0083\\u00D0\\u00BA\\u00D0\\u00BE\\u00D0\\u00BD\\u00D1\\u0086\\u00D0\\u00B5\\u00D1\\u0081\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u00B5\\u00D0\\u00BC\\u00D0\\u00BA\\u00D0\\u00B0\\u00D0\\u00BA\\u00D0\\u00BE\\u00D0\\u00B9\\u00D0\\u0090\\u00D1\\u0080\\u00D1\\u0085\\u00D0\\u00B8\\u00D0\\u00B2\\u00D9\\u0085\\u00D9\\u0086\\u00D8\\u00AA\\u00D8\\u00AF\\u00D9\\u0089\\u00D8\\u00A5\\u00D8\\u00B1\\u00D8\\u00B3\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B1\\u00D8\\u00B3\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B9\\u00D8\\u00A7\\u00D9\\u0085\\u00D9\\u0083\\u00D8\\u00AA\\u00D8\\u00A8\\u00D9\\u0087\\u00D8\\u00A7\\u00D8\\u00A8\\u00D8\\u00B1\\u00D8\\u00A7\\u00D9\\u0085\\u00D8\\u00AC\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u008A\\u00D9\\u0088\\u00D9\\u0085\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B5\\u00D9\\u0088\\u00D8\\u00B1\\u00D8\\u00AC\\u00D8\\u00AF\\u00D9\\u008A\\u00D8\\u00AF\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B9\\u00D8\\u00B6\\u00D9\\u0088\\u00D8\\u00A5\\u00D8\\u00B6\\u00D8\\u00A7\\u00D9\\u0081\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0082\\u00D8\\u00B3\\u00D9\\u0085\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B9\\u00D8\\u00A7\\u00D8\\u00A8\\u00D8\\u00AA\\u00D8\\u00AD\\u00D9\\u0085\\u00D9\\u008A\\u00D9\\u0084\\u00D9\\u0085\\u00D9\\u0084\\u00D9\\u0081\\u00D8\\u00A7\\u00D8\\u00AA\\u00D9\\u0085\\u00D9\\u0084\\u00D8\\u00AA\\u00D9\\u0082\\u00D9\\u0089\\u00D8\\u00AA\\u00D8\\u00B9\\u00D8\\u00AF\\u00D9\\u008A\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B4\\u00D8\\u00B9\\u00D8\\u00B1\\u00D8\\u00A3\\u00D8\\u00AE\\u00D8\\u00A8\\u00D8\\u00A7\\u00D8\\u00B1\\u00D8\\u00AA\\u00D8\\u00B7\\u00D9\\u0088\\u00D9\\u008A\\u00D8\\u00B1\\u00D8\\u00B9\\u00D9\\u0084\\u00D9\\u008A\\u00D9\\u0083\\u00D9\\u0085\\u00D8\\u00A5\\u00D8\\u00B1\\u00D9\\u0081\\u00D8\\u00A7\\u00D9\\u0082\\u00D8\\u00B7\\u00D9\\u0084\\u00D8\\u00A8\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0084\\u00D8\\u00BA\\u00D8\\u00A9\\u00D8\\u00AA\\u00D8\\u00B1\\u00D8\\u00AA\\u00D9\\u008A\\u00D8\\u00A8\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0086\\u00D8\\u00A7\\u00D8\\u00B3\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B4\\u00D9\\u008A\\u00D8\\u00AE\\u00D9\\u0085\\u00D9\\u0086\\u00D8\\u00AA\\u00D8\\u00AF\\u00D9\\u008A\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B9\\u00D8\\u00B1\\u00D8\\u00A8\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0082\\u00D8\\u00B5\\u00D8\\u00B5\\u00D8\\u00A7\\u00D9\\u0081\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0085\\u00D8\\u00B9\\u00D9\\u0084\\u00D9\\u008A\\u00D9\\u0087\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00AD\\u00D8\\u00AF\\u00D9\\u008A\\u00D8\\u00AB\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0084\\u00D9\\u0087\\u00D9\\u0085\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B9\\u00D9\\u0085\\u00D9\\u0084\\u00D9\\u0085\\u00D9\\u0083\\u00D8\\u00AA\\u00D8\\u00A8\\u00D8\\u00A9\\u00D9\\u008A\\u00D9\\u0085\\u00D9\\u0083\\u00D9\\u0086\\u00D9\\u0083\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B7\\u00D9\\u0081\\u00D9\\u0084\\u00D9\\u0081\\u00D9\\u008A\\u00D8\\u00AF\\u00D9\\u008A\\u00D9\\u0088\\u00D8\\u00A5\\u00D8\\u00AF\\u00D8\\u00A7\\u00D8\\u00B1\\u00D8\\u00A9\\u00D8\\u00AA\\u00D8\\u00A7\\u00D8\\u00B1\\u00D9\\u008A\\u00D8\\u00AE\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B5\\u00D8\\u00AD\\u00D8\\u00A9\\u00D8\\u00AA\\u00D8\\u00B3\\u00D8\\u00AC\\u00D9\\u008A\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0088\\u00D9\\u0082\\u00D8\\u00AA\\u00D8\\u00B9\\u00D9\\u0086\\u00D8\\u00AF\\u00D9\\u0085\\u00D8\\u00A7\\u00D9\\u0085\\u00D8\\u00AF\\u00D9\\u008A\\u00D9\\u0086\\u00D8\\u00A9\\u00D8\\u00AA\\u00D8\\u00B5\\u00D9\\u0085\\u00D9\\u008A\\u00D9\\u0085\\u00D8\\u00A3\\u00D8\\u00B1\\u00D8\\u00B4\\u00D9\\u008A\\u00D9\\u0081\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B0\\u00D9\\u008A\\u00D9\\u0086\\u00D8\\u00B9\\u00D8\\u00B1\\u00D8\\u00A8\\u00D9\\u008A\\u00D8\\u00A9\\u00D8\\u00A8\\u00D9\\u0088\\u00D8\\u00A7\\u00D8\\u00A8\\u00D8\\u00A9\\u00D8\\u00A3\\u00D9\\u0084\\u00D8\\u00B9\\u00D8\\u00A7\\u00D8\\u00A8\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B3\\u00D9\\u0081\\u00D8\\u00B1\\u00D9\\u0085\\u00D8\\u00B4\\u00D8\\u00A7\\u00D9\\u0083\\u00D9\\u0084\\u00D8\\u00AA\\u00D8\\u00B9\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0089\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A3\\u00D9\\u0088\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B3\\u00D9\\u0086\\u00D8\\u00A9\\u00D8\\u00AC\\u00D8\\u00A7\\u00D9\\u0085\\u00D8\\u00B9\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B5\\u00D8\\u00AD\\u00D9\\u0081\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AF\\u00D9\\u008A\\u00D9\\u0086\\u00D9\\u0083\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AE\\u00D8\\u00A7\\u00D8\\u00B5\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D9\\u0084\\u00D9\\u0081\\u00D8\\u00A3\\u00D8\\u00B9\\u00D8\\u00B6\\u00D8\\u00A7\\u00D8\\u00A1\\u00D9\\u0083\\u00D8\\u00AA\\u00D8\\u00A7\\u00D8\\u00A8\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AE\\u00D9\\u008A\\u00D8\\u00B1\\u00D8\\u00B1\\u00D8\\u00B3\\u00D8\\u00A7\\u00D8\\u00A6\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0082\\u00D9\\u0084\\u00D8\\u00A8\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A3\\u00D8\\u00AF\\u00D8\\u00A8\\u00D9\\u0085\\u00D9\\u0082\\u00D8\\u00A7\\u00D8\\u00B7\\u00D8\\u00B9\\u00D9\\u0085\\u00D8\\u00B1\\u00D8\\u00A7\\u00D8\\u00B3\\u00D9\\u0084\\u00D9\\u0085\\u00D9\\u0086\\u00D8\\u00B7\\u00D9\\u0082\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0083\\u00D8\\u00AA\\u00D8\\u00A8\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B1\\u00D8\\u00AC\\u00D9\\u0084\\u00D8\\u00A7\\u00D8\\u00B4\\u00D8\\u00AA\\u00D8\\u00B1\\u00D9\\u0083\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0082\\u00D8\\u00AF\\u00D9\\u0085\\u00D9\\u008A\\u00D8\\u00B9\\u00D8\\u00B7\\u00D9\\u008A\\u00D9\\u0083sByTagName(.jpg\\\" alt=\\\"1px solid #.gif\\\" alt=\\\"transparentinformationapplication\\\" onclick=\\\"establishedadvertising.png\\\" alt=\\\"environmentperformanceappropriate&amp;mdash;immediately</strong></rather thantemperaturedevelopmentcompetitionplaceholdervisibility:copyright\\\">0\\\" height=\\\"even thoughreplacementdestinationCorporation<ul class=\\\"AssociationindividualsperspectivesetTimeout(url(http://mathematicsmargin-top:eventually description) no-repeatcollections.JPG|thumb|participate/head><bodyfloat:left;<li class=\\\"hundreds of\\n\\nHowever, compositionclear:both;cooperationwithin the label for=\\\"border-top:New Zealandrecommendedphotographyinteresting&lt;sup&gt;controversyNetherlandsalternativemaxlength=\\\"switzerlandDevelopmentessentially\\n\\nAlthough </textarea>thunderbirdrepresented&amp;ndash;speculationcommunitieslegislationelectronics\\n\\t<div id=\\\"illustratedengineeringterritoriesauthoritiesdistributed6\\\" height=\\\"sans-serif;capable of disappearedinteractivelooking forit would beAfghanistanwas createdMath.floor(surroundingcan also beobservationmaintenanceencountered<h2 class=\\\"more recentit has beeninvasion of).getTime()fundamentalDespite the\\\"><div id=\\\"inspirationexaminationpreparationexplanation<input id=\\\"</a></span>versions ofinstrumentsbefore the  = 'http://Descriptionrelatively .substring(each of theexperimentsinfluentialintegrationmany peopledue to the combinationdo not haveMiddle East<noscript><copyright\\\" perhaps theinstitutionin Decemberarrangementmost famouspersonalitycreation oflimitationsexclusivelysovereignty-content\\\">\\n<td class=\\\"undergroundparallel todoctrine ofoccupied byterminologyRenaissancea number ofsupport forexplorationrecognitionpredecessor<img src=\\\"/<h1 class=\\\"publicationmay also bespecialized</fieldset>progressivemillions ofstates thatenforcementaround the one another.parentNodeagricultureAlternativeresearcherstowards theMost of themany other (especially<td width=\\\";width:100%independent<h3 class=\\\" onchange=\\\").addClass(interactionOne of the daughter ofaccessoriesbranches of\\r\\n<div id=\\\"the largestdeclarationregulationsInformationtranslationdocumentaryin order to\\\">\\n<head>\\n<\\\" height=\\\"1across the orientation);</script>implementedcan be seenthere was ademonstratecontainer\\\">connectionsthe Britishwas written!important;px; margin-followed byability to complicatedduring the immigrationalso called<h4 class=\\\"distinctionreplaced bygovernmentslocation ofin Novemberwhether the</p>\\n</div>acquisitioncalled the persecutiondesignation{font-size:appeared ininvestigateexperiencedmost likelywidely useddiscussionspresence of (document.extensivelyIt has beenit does notcontrary toinhabitantsimprovementscholarshipconsumptioninstructionfor exampleone or morepx; paddingthe currenta series ofare usuallyrole in thepreviously derivativesevidence ofexperiencescolorschemestated thatcertificate</a></div>\\n selected=\\\"high schoolresponse tocomfortableadoption ofthree yearsthe countryin Februaryso that thepeople who provided by<param nameaffected byin terms ofappointmentISO-8859-1\\\"was born inhistorical regarded asmeasurementis based on and other : function(significantcelebrationtransmitted/js/jquery.is known astheoretical tabindex=\\\"it could be<noscript>\\nhaving been\\r\\n<head>\\r\\n< &quot;The compilationhe had beenproduced byphilosopherconstructedintended toamong othercompared toto say thatEngineeringa differentreferred todifferencesbelief thatphotographsidentifyingHistory of Republic ofnecessarilyprobabilitytechnicallyleaving thespectacularfraction ofelectricityhead of therestaurantspartnershipemphasis onmost recentshare with saying thatfilled withdesigned toit is often\\\"></iframe>as follows:merged withthrough thecommercial pointed outopportunityview of therequirementdivision ofprogramminghe receivedsetInterval\\\"></span></in New Yorkadditional compression\\n\\n<div id=\\\"incorporate;</script><attachEventbecame the \\\" target=\\\"_carried outSome of thescience andthe time ofContainer\\\">maintainingChristopherMuch of thewritings of\\\" height=\\\"2size of theversion of mixture of between theExamples ofeducationalcompetitive onsubmit=\\\"director ofdistinctive/DTD XHTML relating totendency toprovince ofwhich woulddespite thescientific legislature.innerHTML allegationsAgriculturewas used inapproach tointelligentyears later,sans-serifdeterminingPerformanceappearances, which is foundationsabbreviatedhigher thans from the individual composed ofsupposed toclaims thatattributionfont-size:1elements ofHistorical his brotherat the timeanniversarygoverned byrelated to ultimately innovationsit is stillcan only bedefinitionstoGMTStringA number ofimg class=\\\"Eventually,was changedoccurred inneighboringdistinguishwhen he wasintroducingterrestrialMany of theargues thatan Americanconquest ofwidespread were killedscreen and In order toexpected todescendantsare locatedlegislativegenerations backgroundmost peopleyears afterthere is nothe highestfrequently they do notargued thatshowed thatpredominanttheologicalby the timeconsideringshort-lived</span></a>can be usedvery littleone of the had alreadyinterpretedcommunicatefeatures ofgovernment,</noscript>entered the\\\" height=\\\"3Independentpopulationslarge-scale. Although used in thedestructionpossibilitystarting intwo or moreexpressionssubordinatelarger thanhistory and</option>\\r\\nContinentaleliminatingwill not bepractice ofin front ofsite of theensure thatto create amississippipotentiallyoutstandingbetter thanwhat is nowsituated inmeta name=\\\"TraditionalsuggestionsTranslationthe form ofatmosphericideologicalenterprisescalculatingeast of theremnants ofpluginspage/index.php?remained intransformedHe was alsowas alreadystatisticalin favor ofMinistry ofmovement offormulationis required<link rel=\\\"This is the <a href=\\\"/popularizedinvolved inare used toand severalmade by theseems to belikely thatPalestiniannamed afterit had beenmost commonto refer tobut this isconsecutivetemporarilyIn general,conventionstakes placesubdivisionterritorialoperationalpermanentlywas largelyoutbreak ofin the pastfollowing a xmlns:og=\\\"><a class=\\\"class=\\\"textConversion may be usedmanufactureafter beingclearfix\\\">\\nquestion ofwas electedto become abecause of some peopleinspired bysuccessful a time whenmore commonamongst thean officialwidth:100%;technology,was adoptedto keep thesettlementslive birthsindex.html\\\"Connecticutassigned to&amp;times;account foralign=rightthe companyalways beenreturned toinvolvementBecause thethis period\\\" name=\\\"q\\\" confined toa result ofvalue=\\\"\\\" />is actuallyEnvironment\\r\\n</head>\\r\\nConversely,>\\n<div id=\\\"0\\\" width=\\\"1is probablyhave becomecontrollingthe problemcitizens ofpoliticiansreached theas early as:none; over<table cellvalidity ofdirectly toonmousedownwhere it iswhen it wasmembers of relation toaccommodatealong with In the latethe Englishdelicious\\\">this is notthe presentif they areand finallya matter of\\r\\n\\t</div>\\r\\n\\r\\n</script>faster thanmajority ofafter whichcomparativeto maintainimprove theawarded theer\\\" class=\\\"frameborderrestorationin the sameanalysis oftheir firstDuring the continentalsequence offunction(){font-size: work on the</script>\\n<begins withjavascript:constituentwas foundedequilibriumassume thatis given byneeds to becoordinatesthe variousare part ofonly in thesections ofis a commontheories ofdiscoveriesassociationedge of thestrength ofposition inpresent-dayuniversallyto form thebut insteadcorporationattached tois commonlyreasons for &quot;the can be madewas able towhich meansbut did notonMouseOveras possibleoperated bycoming fromthe primaryaddition offor severaltransferreda period ofare able tohowever, itshould havemuch larger\\n\\t</script>adopted theproperty ofdirected byeffectivelywas broughtchildren ofProgramminglonger thanmanuscriptswar againstby means ofand most ofsimilar to proprietaryoriginatingprestigiousgrammaticalexperience.to make theIt was alsois found incompetitorsin the U.S.replace thebrought thecalculationfall of thethe generalpracticallyin honor ofreleased inresidentialand some ofking of thereaction to1st Earl ofculture andprincipally</title>\\n  they can beback to thesome of hisexposure toare similarform of theaddFavoritecitizenshippart in thepeople within practiceto continue&amp;minus;approved by the first allowed theand for thefunctioningplaying thesolution toheight=\\\"0\\\" in his bookmore than afollows thecreated thepresence in&nbsp;</td>nationalistthe idea ofa characterwere forced class=\\\"btndays of thefeatured inshowing theinterest inin place ofturn of thethe head ofLord of thepoliticallyhas its ownEducationalapproval ofsome of theeach other,behavior ofand becauseand anotherappeared onrecorded inblack&quot;may includethe world'scan lead torefers to aborder=\\\"0\\\" government winning theresulted in while the Washington,the subjectcity in the></div>\\r\\n\\t\\treflect theto completebecame moreradioactiverejected bywithout anyhis father,which couldcopy of theto indicatea politicalaccounts ofconstitutesworked wither</a></li>of his lifeaccompaniedclientWidthprevent theLegislativedifferentlytogether inhas severalfor anothertext of thefounded thee with the is used forchanged theusually theplace wherewhereas the> <a href=\\\"\\\"><a href=\\\"themselves,although hethat can betraditionalrole of theas a resultremoveChilddesigned bywest of theSome peopleproduction,side of thenewslettersused by thedown to theaccepted bylive in theattempts tooutside thefrequenciesHowever, inprogrammersat least inapproximatealthough itwas part ofand variousGovernor ofthe articleturned into><a href=\\\"/the economyis the mostmost widelywould laterand perhapsrise to theoccurs whenunder whichconditions.the westerntheory thatis producedthe city ofin which heseen in thethe centralbuilding ofmany of hisarea of theis the onlymost of themany of thethe WesternThere is noextended toStatisticalcolspan=2 |short storypossible totopologicalcritical ofreported toa Christiandecision tois equal toproblems ofThis can bemerchandisefor most ofno evidenceeditions ofelements in&quot;. Thecom/images/which makesthe processremains theliterature,is a memberthe popularthe ancientproblems intime of thedefeated bybody of thea few yearsmuch of thethe work ofCalifornia,served as agovernment.concepts ofmovement in\\t\\t<div id=\\\"it\\\" value=\\\"language ofas they areproduced inis that theexplain thediv></div>\\nHowever thelead to the\\t<a href=\\\"/was grantedpeople havecontinuallywas seen asand relatedthe role ofproposed byof the besteach other.Constantinepeople fromdialects ofto revisionwas renameda source ofthe initiallaunched inprovide theto the westwhere thereand similarbetween twois also theEnglish andconditions,that it wasentitled tothemselves.quantity ofransparencythe same asto join thecountry andthis is theThis led toa statementcontrast tolastIndexOfthrough hisis designedthe term isis providedprotect theng</a></li>The currentthe site ofsubstantialexperience,in the Westthey shouldsloven\\u00C4\\u008Dinacomentariosuniversidadcondicionesactividadesexperienciatecnolog\\u00C3\\u00ADaproducci\\u00C3\\u00B3npuntuaci\\u00C3\\u00B3naplicaci\\u00C3\\u00B3ncontrase\\u00C3\\u00B1acategor\\u00C3\\u00ADasregistrarseprofesionaltratamientoreg\\u00C3\\u00ADstratesecretar\\u00C3\\u00ADaprincipalesprotecci\\u00C3\\u00B3nimportantesimportanciaposibilidadinteresantecrecimientonecesidadessuscribirseasociaci\\u00C3\\u00B3ndisponiblesevaluaci\\u00C3\\u00B3nestudiantesresponsableresoluci\\u00C3\\u00B3nguadalajararegistradosoportunidadcomercialesfotograf\\u00C3\\u00ADaautoridadesingenier\\u00C3\\u00ADatelevisi\\u00C3\\u00B3ncompetenciaoperacionesestablecidosimplementeactualmentenavegaci\\u00C3\\u00B3nconformidadline-height:font-family:\\\" : \\\"http://applicationslink\\\" href=\\\"specifically//<![CDATA[\\nOrganizationdistribution0px; height:relationshipdevice-width<div class=\\\"<label for=\\\"registration</noscript>\\n/index.html\\\"window.open( !important;application/independence//www.googleorganizationautocompleterequirementsconservative<form name=\\\"intellectualmargin-left:18th centuryan importantinstitutionsabbreviation<img class=\\\"organisationcivilization19th centuryarchitectureincorporated20th century-container\\\">most notably/></a></div>notification'undefined')Furthermore,believe thatinnerHTML = prior to thedramaticallyreferring tonegotiationsheadquartersSouth AfricaunsuccessfulPennsylvaniaAs a result,<html lang=\\\"&lt;/sup&gt;dealing withphiladelphiahistorically);</script>\\npadding-top:experimentalgetAttributeinstructionstechnologiespart of the =function(){subscriptionl.dtd\\\">\\r\\n<htgeographicalConstitution', function(supported byagriculturalconstructionpublicationsfont-size: 1a variety of<div style=\\\"Encyclopediaiframe src=\\\"demonstratedaccomplisheduniversitiesDemographics);</script><dedicated toknowledge ofsatisfactionparticularly</div></div>English (US)appendChild(transmissions. However, intelligence\\\" tabindex=\\\"float:right;Commonwealthranging fromin which theat least onereproductionencyclopedia;font-size:1jurisdictionat that time\\\"><a class=\\\"In addition,description+conversationcontact withis generallyr\\\" content=\\\"representing&lt;math&gt;presentationoccasionally<img width=\\\"navigation\\\">compensationchampionshipmedia=\\\"all\\\" violation ofreference toreturn true;Strict//EN\\\" transactionsinterventionverificationInformation difficultiesChampionshipcapabilities<![endif]-->}\\n</script>\\nChristianityfor example,Professionalrestrictionssuggest thatwas released(such as theremoveClass(unemploymentthe Americanstructure of/index.html published inspan class=\\\"\\\"><a href=\\\"/introductionbelonging toclaimed thatconsequences<meta name=\\\"Guide to theoverwhelmingagainst the concentrated,\\n.nontouch observations</a>\\n</div>\\nf (document.border: 1px {font-size:1treatment of0\\\" height=\\\"1modificationIndependencedivided intogreater thanachievementsestablishingJavaScript\\\" neverthelesssignificanceBroadcasting>&nbsp;</td>container\\\">\\nsuch as the influence ofa particularsrc='http://navigation\\\" half of the substantial &nbsp;</div>advantage ofdiscovery offundamental metropolitanthe opposite\\\" xml:lang=\\\"deliberatelyalign=centerevolution ofpreservationimprovementsbeginning inJesus ChristPublicationsdisagreementtext-align:r, function()similaritiesbody></html>is currentlyalphabeticalis sometimestype=\\\"image/many of the flow:hidden;available indescribe theexistence ofall over thethe Internet\\t<ul class=\\\"installationneighborhoodarmed forcesreducing thecontinues toNonetheless,temperatures\\n\\t\\t<a href=\\\"close to theexamples of is about the(see below).\\\" id=\\\"searchprofessionalis availablethe official\\t\\t</script>\\n\\n\\t\\t<div id=\\\"accelerationthrough the Hall of Famedescriptionstranslationsinterference type='text/recent yearsin the worldvery popular{background:traditional some of the connected toexploitationemergence ofconstitutionA History ofsignificant manufacturedexpectations><noscript><can be foundbecause the has not beenneighbouringwithout the added to the\\t<li class=\\\"instrumentalSoviet Unionacknowledgedwhich can bename for theattention toattempts to developmentsIn fact, the<li class=\\\"aimplicationssuitable formuch of the colonizationpresidentialcancelBubble Informationmost of the is describedrest of the more or lessin SeptemberIntelligencesrc=\\\"http://px; height: available tomanufacturerhuman rightslink href=\\\"/availabilityproportionaloutside the astronomicalhuman beingsname of the are found inare based onsmaller thana person whoexpansion ofarguing thatnow known asIn the earlyintermediatederived fromScandinavian</a></div>\\r\\nconsider thean estimatedthe National<div id=\\\"pagresulting incommissionedanalogous toare required/ul>\\n</div>\\nwas based onand became a&nbsp;&nbsp;t\\\" value=\\\"\\\" was capturedno more thanrespectivelycontinue to >\\r\\n<head>\\r\\n<were createdmore generalinformation used for theindependent the Imperialcomponent ofto the northinclude the Constructionside of the would not befor instanceinvention ofmore complexcollectivelybackground: text-align: its originalinto accountthis processan extensivehowever, thethey are notrejected thecriticism ofduring whichprobably thethis article(function(){It should bean agreementaccidentallydiffers fromArchitecturebetter knownarrangementsinfluence onattended theidentical tosouth of thepass throughxml\\\" title=\\\"weight:bold;creating thedisplay:nonereplaced the<img src=\\\"/ihttps://www.World War IItestimonialsfound in therequired to and that thebetween the was designedconsists of considerablypublished bythe languageConservationconsisted ofrefer to theback to the css\\\" media=\\\"People from available onproved to besuggestions\\\"was known asvarieties oflikely to becomprised ofsupport the hands of thecoupled withconnect and border:none;performancesbefore beinglater becamecalculationsoften calledresidents ofmeaning that><li class=\\\"evidence forexplanationsenvironments\\\"></a></div>which allowsIntroductiondeveloped bya wide rangeon behalf ofvalign=\\\"top\\\"principle ofat the time,</noscript>\\rsaid to havein the firstwhile othershypotheticalphilosopherspower of thecontained inperformed byinability towere writtenspan style=\\\"input name=\\\"the questionintended forrejection ofimplies thatinvented thethe standardwas probablylink betweenprofessor ofinteractionschanging theIndian Ocean class=\\\"lastworking with'http://www.years beforeThis was therecreationalentering themeasurementsan extremelyvalue of thestart of the\\n</script>\\n\\nan effort toincrease theto the southspacing=\\\"0\\\">sufficientlythe Europeanconverted toclearTimeoutdid not haveconsequentlyfor the nextextension ofeconomic andalthough theare producedand with theinsufficientgiven by thestating thatexpenditures</span></a>\\nthought thaton the basiscellpadding=image of thereturning toinformation,separated byassassinateds\\\" content=\\\"authority ofnorthwestern</div>\\n<div \\\"></div>\\r\\n  consultationcommunity ofthe nationalit should beparticipants align=\\\"leftthe greatestselection ofsupernaturaldependent onis mentionedallowing thewas inventedaccompanyinghis personalavailable atstudy of theon the otherexecution ofHuman Rightsterms of theassociationsresearch andsucceeded bydefeated theand from thebut they arecommander ofstate of theyears of agethe study of<ul class=\\\"splace in thewhere he was<li class=\\\"fthere are nowhich becamehe publishedexpressed into which thecommissionerfont-weight:territory ofextensions\\\">Roman Empireequal to theIn contrast,however, andis typicallyand his wife(also called><ul class=\\\"effectively evolved intoseem to havewhich is thethere was noan excellentall of thesedescribed byIn practice,broadcastingcharged withreflected insubjected tomilitary andto the pointeconomicallysetTargetingare actuallyvictory over();</script>continuouslyrequired forevolutionaryan effectivenorth of the, which was front of theor otherwisesome form ofhad not beengenerated byinformation.permitted toincludes thedevelopment,entered intothe previous\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate class DataHolder2\r\n\t\t{\r\n\t\t\tinternal static string GetData()\r\n\t\t\t{\r\n\t\t\t\treturn \"consistentlyare known asthe field ofthis type ofgiven to thethe title ofcontains theinstances ofin the northdue to theirare designedcorporationswas that theone of thesemore popularsucceeded insupport fromin differentdominated bydesigned forownership ofand possiblystandardizedresponseTextwas intendedreceived theassumed thatareas of theprimarily inthe basis ofin the senseaccounts fordestroyed byat least twowas declaredcould not beSecretary ofappear to bemargin-top:1/^\\\\s+|\\\\s+$/ge){throw e};the start oftwo separatelanguage andwho had beenoperation ofdeath of thereal numbers\\t<link rel=\\\"provided thethe story ofcompetitionsenglish (UK)english (US)\\u00D0\\u009C\\u00D0\\u00BE\\u00D0\\u00BD\\u00D0\\u00B3\\u00D0\\u00BE\\u00D0\\u00BB\\u00D0\\u00A1\\u00D1\\u0080\\u00D0\\u00BF\\u00D1\\u0081\\u00D0\\u00BA\\u00D0\\u00B8\\u00D1\\u0081\\u00D1\\u0080\\u00D0\\u00BF\\u00D1\\u0081\\u00D0\\u00BA\\u00D0\\u00B8\\u00D1\\u0081\\u00D1\\u0080\\u00D0\\u00BF\\u00D1\\u0081\\u00D0\\u00BA\\u00D0\\u00BE\\u00D9\\u0084\\u00D8\\u00B9\\u00D8\\u00B1\\u00D8\\u00A8\\u00D9\\u008A\\u00D8\\u00A9\\u00E6\\u00AD\\u00A3\\u00E9\\u00AB\\u0094\\u00E4\\u00B8\\u00AD\\u00E6\\u0096\\u0087\\u00E7\\u00AE\\u0080\\u00E4\\u00BD\\u0093\\u00E4\\u00B8\\u00AD\\u00E6\\u0096\\u0087\\u00E7\\u00B9\\u0081\\u00E4\\u00BD\\u0093\\u00E4\\u00B8\\u00AD\\u00E6\\u0096\\u0087\\u00E6\\u009C\\u0089\\u00E9\\u0099\\u0090\\u00E5\\u0085\\u00AC\\u00E5\\u008F\\u00B8\\u00E4\\u00BA\\u00BA\\u00E6\\u00B0\\u0091\\u00E6\\u0094\\u00BF\\u00E5\\u00BA\\u009C\\u00E9\\u0098\\u00BF\\u00E9\\u0087\\u008C\\u00E5\\u00B7\\u00B4\\u00E5\\u00B7\\u00B4\\u00E7\\u00A4\\u00BE\\u00E4\\u00BC\\u009A\\u00E4\\u00B8\\u00BB\\u00E4\\u00B9\\u0089\\u00E6\\u0093\\u008D\\u00E4\\u00BD\\u009C\\u00E7\\u00B3\\u00BB\\u00E7\\u00BB\\u009F\\u00E6\\u0094\\u00BF\\u00E7\\u00AD\\u0096\\u00E6\\u00B3\\u0095\\u00E8\\u00A7\\u0084informaci\\u00C3\\u00B3nherramientaselectr\\u00C3\\u00B3nicodescripci\\u00C3\\u00B3nclasificadosconocimientopublicaci\\u00C3\\u00B3nrelacionadasinform\\u00C3\\u00A1ticarelacionadosdepartamentotrabajadoresdirectamenteayuntamientomercadoLibrecont\\u00C3\\u00A1ctenoshabitacionescumplimientorestaurantesdisposici\\u00C3\\u00B3nconsecuenciaelectr\\u00C3\\u00B3nicaaplicacionesdesconectadoinstalaci\\u00C3\\u00B3nrealizaci\\u00C3\\u00B3nutilizaci\\u00C3\\u00B3nenciclopediaenfermedadesinstrumentosexperienciasinstituci\\u00C3\\u00B3nparticularessubcategoria\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00BB\\u00D1\\u008C\\u00D0\\u00BA\\u00D0\\u00BE\\u00D0\\u00A0\\u00D0\\u00BE\\u00D1\\u0081\\u00D1\\u0081\\u00D0\\u00B8\\u00D0\\u00B8\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00B1\\u00D0\\u00BE\\u00D1\\u0082\\u00D1\\u008B\\u00D0\\u00B1\\u00D0\\u00BE\\u00D0\\u00BB\\u00D1\\u008C\\u00D1\\u0088\\u00D0\\u00B5\\u00D0\\u00BF\\u00D1\\u0080\\u00D0\\u00BE\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00BC\\u00D0\\u00BE\\u00D0\\u00B6\\u00D0\\u00B5\\u00D1\\u0082\\u00D0\\u00B5\\u00D0\\u00B4\\u00D1\\u0080\\u00D1\\u0083\\u00D0\\u00B3\\u00D0\\u00B8\\u00D1\\u0085\\u00D1\\u0081\\u00D0\\u00BB\\u00D1\\u0083\\u00D1\\u0087\\u00D0\\u00B0\\u00D0\\u00B5\\u00D1\\u0081\\u00D0\\u00B5\\u00D0\\u00B9\\u00D1\\u0087\\u00D0\\u00B0\\u00D1\\u0081\\u00D0\\u00B2\\u00D1\\u0081\\u00D0\\u00B5\\u00D0\\u00B3\\u00D0\\u00B4\\u00D0\\u00B0\\u00D0\\u00A0\\u00D0\\u00BE\\u00D1\\u0081\\u00D1\\u0081\\u00D0\\u00B8\\u00D1\\u008F\\u00D0\\u009C\\u00D0\\u00BE\\u00D1\\u0081\\u00D0\\u00BA\\u00D0\\u00B2\\u00D0\\u00B5\\u00D0\\u00B4\\u00D1\\u0080\\u00D1\\u0083\\u00D0\\u00B3\\u00D0\\u00B8\\u00D0\\u00B5\\u00D0\\u00B3\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00B4\\u00D0\\u00B0\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u00BF\\u00D1\\u0080\\u00D0\\u00BE\\u00D1\\u0081\\u00D0\\u00B4\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00BD\\u00D1\\u008B\\u00D1\\u0085\\u00D0\\u00B4\\u00D0\\u00BE\\u00D0\\u00BB\\u00D0\\u00B6\\u00D0\\u00BD\\u00D1\\u008B\\u00D0\\u00B8\\u00D0\\u00BC\\u00D0\\u00B5\\u00D0\\u00BD\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u009C\\u00D0\\u00BE\\u00D1\\u0081\\u00D0\\u00BA\\u00D0\\u00B2\\u00D1\\u008B\\u00D1\\u0080\\u00D1\\u0083\\u00D0\\u00B1\\u00D0\\u00BB\\u00D0\\u00B5\\u00D0\\u00B9\\u00D0\\u009C\\u00D0\\u00BE\\u00D1\\u0081\\u00D0\\u00BA\\u00D0\\u00B2\\u00D0\\u00B0\\u00D1\\u0081\\u00D1\\u0082\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00BD\\u00D1\\u008B\\u00D0\\u00BD\\u00D0\\u00B8\\u00D1\\u0087\\u00D0\\u00B5\\u00D0\\u00B3\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00B1\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00B5\\u00D0\\u00B4\\u00D0\\u00BE\\u00D0\\u00BB\\u00D0\\u00B6\\u00D0\\u00B5\\u00D0\\u00BD\\u00D1\\u0083\\u00D1\\u0081\\u00D0\\u00BB\\u00D1\\u0083\\u00D0\\u00B3\\u00D0\\u00B8\\u00D1\\u0082\\u00D0\\u00B5\\u00D0\\u00BF\\u00D0\\u00B5\\u00D1\\u0080\\u00D1\\u008C\\u00D0\\u009E\\u00D0\\u00B4\\u00D0\\u00BD\\u00D0\\u00B0\\u00D0\\u00BA\\u00D0\\u00BE\\u00D0\\u00BF\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00BC\\u00D1\\u0083\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00B1\\u00D0\\u00BE\\u00D1\\u0082\\u00D1\\u0083\\u00D0\\u00B0\\u00D0\\u00BF\\u00D1\\u0080\\u00D0\\u00B5\\u00D0\\u00BB\\u00D1\\u008F\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u00BE\\u00D0\\u00B1\\u00D1\\u0089\\u00D0\\u00B5\\u00D0\\u00BE\\u00D0\\u00B4\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00B3\\u00D0\\u00BE\\u00D1\\u0081\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u00B5\\u00D0\\u00B3\\u00D0\\u00BE\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B0\\u00D1\\u0082\\u00D1\\u008C\\u00D0\\u00B8\\u00D0\\u00B4\\u00D1\\u0080\\u00D1\\u0083\\u00D0\\u00B3\\u00D0\\u00BE\\u00D0\\u00B9\\u00D1\\u0084\\u00D0\\u00BE\\u00D1\\u0080\\u00D1\\u0083\\u00D0\\u00BC\\u00D0\\u00B5\\u00D1\\u0085\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00BE\\u00D1\\u0088\\u00D0\\u00BE\\u00D0\\u00BF\\u00D1\\u0080\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00B8\\u00D0\\u00B2\\u00D1\\u0081\\u00D1\\u0081\\u00D1\\u008B\\u00D0\\u00BB\\u00D0\\u00BA\\u00D0\\u00B0\\u00D0\\u00BA\\u00D0\\u00B0\\u00D0\\u00B6\\u00D0\\u00B4\\u00D1\\u008B\\u00D0\\u00B9\\u00D0\\u00B2\\u00D0\\u00BB\\u00D0\\u00B0\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B8\\u00D0\\u00B3\\u00D1\\u0080\\u00D1\\u0083\\u00D0\\u00BF\\u00D0\\u00BF\\u00D1\\u008B\\u00D0\\u00B2\\u00D0\\u00BC\\u00D0\\u00B5\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B5\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00B1\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00B0\\u00D1\\u0081\\u00D0\\u00BA\\u00D0\\u00B0\\u00D0\\u00B7\\u00D0\\u00B0\\u00D0\\u00BB\\u00D0\\u00BF\\u00D0\\u00B5\\u00D1\\u0080\\u00D0\\u00B2\\u00D1\\u008B\\u00D0\\u00B9\\u00D0\\u00B4\\u00D0\\u00B5\\u00D0\\u00BB\\u00D0\\u00B0\\u00D1\\u0082\\u00D1\\u008C\\u00D0\\u00B4\\u00D0\\u00B5\\u00D0\\u00BD\\u00D1\\u008C\\u00D0\\u00B3\\u00D0\\u00B8\\u00D0\\u00BF\\u00D0\\u00B5\\u00D1\\u0080\\u00D0\\u00B8\\u00D0\\u00BE\\u00D0\\u00B4\\u00D0\\u00B1\\u00D0\\u00B8\\u00D0\\u00B7\\u00D0\\u00BD\\u00D0\\u00B5\\u00D1\\u0081\\u00D0\\u00BE\\u00D1\\u0081\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00B2\\u00D0\\u00B5\\u00D0\\u00BC\\u00D0\\u00BE\\u00D0\\u00BC\\u00D0\\u00B5\\u00D0\\u00BD\\u00D1\\u0082\\u00D0\\u00BA\\u00D1\\u0083\\u00D0\\u00BF\\u00D0\\u00B8\\u00D1\\u0082\\u00D1\\u008C\\u00D0\\u00B4\\u00D0\\u00BE\\u00D0\\u00BB\\u00D0\\u00B6\\u00D0\\u00BD\\u00D0\\u00B0\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00BC\\u00D0\\u00BA\\u00D0\\u00B0\\u00D1\\u0085\\u00D0\\u00BD\\u00D0\\u00B0\\u00D1\\u0087\\u00D0\\u00B0\\u00D0\\u00BB\\u00D0\\u00BE\\u00D0\\u00A0\\u00D0\\u00B0\\u00D0\\u00B1\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00B0\\u00D0\\u00A2\\u00D0\\u00BE\\u00D0\\u00BB\\u00D1\\u008C\\u00D0\\u00BA\\u00D0\\u00BE\\u00D1\\u0081\\u00D0\\u00BE\\u00D0\\u00B2\\u00D1\\u0081\\u00D0\\u00B5\\u00D0\\u00BC\\u00D0\\u00B2\\u00D1\\u0082\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00B9\\u00D0\\u00BD\\u00D0\\u00B0\\u00D1\\u0087\\u00D0\\u00B0\\u00D0\\u00BB\\u00D0\\u00B0\\u00D1\\u0081\\u00D0\\u00BF\\u00D0\\u00B8\\u00D1\\u0081\\u00D0\\u00BE\\u00D0\\u00BA\\u00D1\\u0081\\u00D0\\u00BB\\u00D1\\u0083\\u00D0\\u00B6\\u00D0\\u00B1\\u00D1\\u008B\\u00D1\\u0081\\u00D0\\u00B8\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B5\\u00D0\\u00BC\\u00D0\\u00BF\\u00D0\\u00B5\\u00D1\\u0087\\u00D0\\u00B0\\u00D1\\u0082\\u00D0\\u00B8\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u00B3\\u00D0\\u00BE\\u00D0\\u00BF\\u00D0\\u00BE\\u00D0\\u00BC\\u00D0\\u00BE\\u00D1\\u0089\\u00D0\\u00B8\\u00D1\\u0081\\u00D0\\u00B0\\u00D0\\u00B9\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00B2\\u00D0\\u00BF\\u00D0\\u00BE\\u00D1\\u0087\\u00D0\\u00B5\\u00D0\\u00BC\\u00D1\\u0083\\u00D0\\u00BF\\u00D0\\u00BE\\u00D0\\u00BC\\u00D0\\u00BE\\u00D1\\u0089\\u00D1\\u008C\\u00D0\\u00B4\\u00D0\\u00BE\\u00D0\\u00BB\\u00D0\\u00B6\\u00D0\\u00BD\\u00D0\\u00BE\\u00D1\\u0081\\u00D1\\u0081\\u00D1\\u008B\\u00D0\\u00BB\\u00D0\\u00BA\\u00D0\\u00B8\\u00D0\\u00B1\\u00D1\\u008B\\u00D1\\u0081\\u00D1\\u0082\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00B4\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00BD\\u00D1\\u008B\\u00D0\\u00B5\\u00D0\\u00BC\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00B3\\u00D0\\u00B8\\u00D0\\u00B5\\u00D0\\u00BF\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00B5\\u00D0\\u00BA\\u00D1\\u0082\\u00D0\\u00A1\\u00D0\\u00B5\\u00D0\\u00B9\\u00D1\\u0087\\u00D0\\u00B0\\u00D1\\u0081\\u00D0\\u00BC\\u00D0\\u00BE\\u00D0\\u00B4\\u00D0\\u00B5\\u00D0\\u00BB\\u00D0\\u00B8\\u00D1\\u0082\\u00D0\\u00B0\\u00D0\\u00BA\\u00D0\\u00BE\\u00D0\\u00B3\\u00D0\\u00BE\\u00D0\\u00BE\\u00D0\\u00BD\\u00D0\\u00BB\\u00D0\\u00B0\\u00D0\\u00B9\\u00D0\\u00BD\\u00D0\\u00B3\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00B4\\u00D0\\u00B5\\u00D0\\u00B2\\u00D0\\u00B5\\u00D1\\u0080\\u00D1\\u0081\\u00D0\\u00B8\\u00D1\\u008F\\u00D1\\u0081\\u00D1\\u0082\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00B5\\u00D1\\u0084\\u00D0\\u00B8\\u00D0\\u00BB\\u00D1\\u008C\\u00D0\\u00BC\\u00D1\\u008B\\u00D1\\u0083\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00B2\\u00D0\\u00BD\\u00D1\\u008F\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00B7\\u00D0\\u00BD\\u00D1\\u008B\\u00D1\\u0085\\u00D0\\u00B8\\u00D1\\u0081\\u00D0\\u00BA\\u00D0\\u00B0\\u00D1\\u0082\\u00D1\\u008C\\u00D0\\u00BD\\u00D0\\u00B5\\u00D0\\u00B4\\u00D0\\u00B5\\u00D0\\u00BB\\u00D1\\u008E\\u00D1\\u008F\\u00D0\\u00BD\\u00D0\\u00B2\\u00D0\\u00B0\\u00D1\\u0080\\u00D1\\u008F\\u00D0\\u00BC\\u00D0\\u00B5\\u00D0\\u00BD\\u00D1\\u008C\\u00D1\\u0088\\u00D0\\u00B5\\u00D0\\u00BC\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00B3\\u00D0\\u00B8\\u00D1\\u0085\\u00D0\\u00B4\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00B9\\u00D0\\u00B7\\u00D0\\u00BD\\u00D0\\u00B0\\u00D1\\u0087\\u00D0\\u00B8\\u00D1\\u0082\\u00D0\\u00BD\\u00D0\\u00B5\\u00D0\\u00BB\\u00D1\\u008C\\u00D0\\u00B7\\u00D1\\u008F\\u00D1\\u0084\\u00D0\\u00BE\\u00D1\\u0080\\u00D1\\u0083\\u00D0\\u00BC\\u00D0\\u00B0\\u00D0\\u00A2\\u00D0\\u00B5\\u00D0\\u00BF\\u00D0\\u00B5\\u00D1\\u0080\\u00D1\\u008C\\u00D0\\u00BC\\u00D0\\u00B5\\u00D1\\u0081\\u00D1\\u008F\\u00D1\\u0086\\u00D0\\u00B0\\u00D0\\u00B7\\u00D0\\u00B0\\u00D1\\u0089\\u00D0\\u00B8\\u00D1\\u0082\\u00D1\\u008B\\u00D0\\u009B\\u00D1\\u0083\\u00D1\\u0087\\u00D1\\u0088\\u00D0\\u00B8\\u00D0\\u00B5\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0087\\u00E0\\u00A4\\u00A1\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00AD\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0087\\u00E0\\u00A4\\u009F\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u009F\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0089\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0081\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00AD\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B7\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0086\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00AF\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B6\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0082\\u00E0\\u00A4\\u0087\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0098\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u009F\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u00A7\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u009D\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A3\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00A1\\u00E0\\u00A4\\u00BC\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u009F\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00B6\\u00E0\\u00A4\\u00AC\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u009C\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0088\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0086\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u0082\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u0089\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0097\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00AC\\u00E0\\u00A5\\u0088\\u00E0\\u00A4\\u00A0\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u0086\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B7\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u0086\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u0089\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0082\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u0082\\u00E0\\u00A4\\u009A\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u009C\\u00E0\\u00A5\\u0088\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u0098\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u009A\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u009A\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0097\\u00E0\\u00A5\\u0082\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0086\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u0087\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0087\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00A1\\u00E0\\u00A4\\u00BC\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0098\\u00E0\\u00A4\\u009F\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B6\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u009A\\u00E0\\u00A4\\u00B6\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00A1\\u00E0\\u00A4\\u00BC\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0088\\u00E0\\u00A4\\u009F\\u00E0\\u00A4\\u00B6\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u009F\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0096\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00A1\\u00E0\\u00A4\\u00BC\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0089\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0096\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A5\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0096\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AC\\u00E0\\u00A5\\u0088\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AB\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BC\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u0086\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0096\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u0089\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u0082\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00A1\\u00E0\\u00A4\\u00BC\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u008C\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B6\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00AF\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u008F\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A5\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0096\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B7\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0082\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00A5\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BE\\u00D8\\u00AA\\u00D8\\u00B3\\u00D8\\u00AA\\u00D8\\u00B7\\u00D9\\u008A\\u00D8\\u00B9\\u00D9\\u0085\\u00D8\\u00B4\\u00D8\\u00A7\\u00D8\\u00B1\\u00D9\\u0083\\u00D8\\u00A9\\u00D8\\u00A8\\u00D9\\u0088\\u00D8\\u00A7\\u00D8\\u00B3\\u00D8\\u00B7\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B5\\u00D9\\u0081\\u00D8\\u00AD\\u00D8\\u00A9\\u00D9\\u0085\\u00D9\\u0088\\u00D8\\u00A7\\u00D8\\u00B6\\u00D9\\u008A\\u00D8\\u00B9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AE\\u00D8\\u00A7\\u00D8\\u00B5\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00B2\\u00D9\\u008A\\u00D8\\u00AF\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B9\\u00D8\\u00A7\\u00D9\\u0085\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0083\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00A8\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B1\\u00D8\\u00AF\\u00D9\\u0088\\u00D8\\u00AF\\u00D8\\u00A8\\u00D8\\u00B1\\u00D9\\u0086\\u00D8\\u00A7\\u00D9\\u0085\\u00D8\\u00AC\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AF\\u00D9\\u0088\\u00D9\\u0084\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B9\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D9\\u0088\\u00D9\\u0082\\u00D8\\u00B9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B9\\u00D8\\u00B1\\u00D8\\u00A8\\u00D9\\u008A\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B3\\u00D8\\u00B1\\u00D9\\u008A\\u00D8\\u00B9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AC\\u00D9\\u0088\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B0\\u00D9\\u0087\\u00D8\\u00A7\\u00D8\\u00A8\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AD\\u00D9\\u008A\\u00D8\\u00A7\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AD\\u00D9\\u0082\\u00D9\\u0088\\u00D9\\u0082\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0083\\u00D8\\u00B1\\u00D9\\u008A\\u00D9\\u0085\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B9\\u00D8\\u00B1\\u00D8\\u00A7\\u00D9\\u0082\\u00D9\\u0085\\u00D8\\u00AD\\u00D9\\u0081\\u00D9\\u0088\\u00D8\\u00B8\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AB\\u00D8\\u00A7\\u00D9\\u0086\\u00D9\\u008A\\u00D9\\u0085\\u00D8\\u00B4\\u00D8\\u00A7\\u00D9\\u0087\\u00D8\\u00AF\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00B1\\u00D8\\u00A3\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0082\\u00D8\\u00B1\\u00D8\\u00A2\\u00D9\\u0086\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B4\\u00D8\\u00A8\\u00D8\\u00A7\\u00D8\\u00A8\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AD\\u00D9\\u0088\\u00D8\\u00A7\\u00D8\\u00B1\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AC\\u00D8\\u00AF\\u00D9\\u008A\\u00D8\\u00AF\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A3\\u00D8\\u00B3\\u00D8\\u00B1\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B9\\u00D9\\u0084\\u00D9\\u0088\\u00D9\\u0085\\u00D9\\u0085\\u00D8\\u00AC\\u00D9\\u0085\\u00D9\\u0088\\u00D8\\u00B9\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B1\\u00D8\\u00AD\\u00D9\\u0085\\u00D9\\u0086\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0086\\u00D9\\u0082\\u00D8\\u00A7\\u00D8\\u00B7\\u00D9\\u0081\\u00D9\\u0084\\u00D8\\u00B3\\u00D8\\u00B7\\u00D9\\u008A\\u00D9\\u0086\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0083\\u00D9\\u0088\\u00D9\\u008A\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AF\\u00D9\\u0086\\u00D9\\u008A\\u00D8\\u00A7\\u00D8\\u00A8\\u00D8\\u00B1\\u00D9\\u0083\\u00D8\\u00A7\\u00D8\\u00AA\\u00D9\\u0087\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B1\\u00D9\\u008A\\u00D8\\u00A7\\u00D8\\u00B6\\u00D8\\u00AA\\u00D8\\u00AD\\u00D9\\u008A\\u00D8\\u00A7\\u00D8\\u00AA\\u00D9\\u008A\\u00D8\\u00A8\\u00D8\\u00AA\\u00D9\\u0088\\u00D9\\u0082\\u00D9\\u008A\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A3\\u00D9\\u0088\\u00D9\\u0084\\u00D9\\u0089\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A8\\u00D8\\u00B1\\u00D9\\u008A\\u00D8\\u00AF\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0083\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0085\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B1\\u00D8\\u00A7\\u00D8\\u00A8\\u00D8\\u00B7\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B4\\u00D8\\u00AE\\u00D8\\u00B5\\u00D9\\u008A\\u00D8\\u00B3\\u00D9\\u008A\\u00D8\\u00A7\\u00D8\\u00B1\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AB\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AB\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B5\\u00D9\\u0084\\u00D8\\u00A7\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AD\\u00D8\\u00AF\\u00D9\\u008A\\u00D8\\u00AB\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B2\\u00D9\\u0088\\u00D8\\u00A7\\u00D8\\u00B1\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AE\\u00D9\\u0084\\u00D9\\u008A\\u00D8\\u00AC\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AC\\u00D9\\u0085\\u00D9\\u008A\\u00D8\\u00B9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B9\\u00D8\\u00A7\\u00D9\\u0085\\u00D9\\u0087\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AC\\u00D9\\u0085\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B3\\u00D8\\u00A7\\u00D8\\u00B9\\u00D8\\u00A9\\u00D9\\u0085\\u00D8\\u00B4\\u00D8\\u00A7\\u00D9\\u0087\\u00D8\\u00AF\\u00D9\\u0087\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B1\\u00D8\\u00A6\\u00D9\\u008A\\u00D8\\u00B3\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AF\\u00D8\\u00AE\\u00D9\\u0088\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0081\\u00D9\\u0086\\u00D9\\u008A\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0083\\u00D8\\u00AA\\u00D8\\u00A7\\u00D8\\u00A8\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AF\\u00D9\\u0088\\u00D8\\u00B1\\u00D9\\u008A\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AF\\u00D8\\u00B1\\u00D9\\u0088\\u00D8\\u00B3\\u00D8\\u00A7\\u00D8\\u00B3\\u00D8\\u00AA\\u00D8\\u00BA\\u00D8\\u00B1\\u00D9\\u0082\\u00D8\\u00AA\\u00D8\\u00B5\\u00D8\\u00A7\\u00D9\\u0085\\u00D9\\u008A\\u00D9\\u0085\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A8\\u00D9\\u0086\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B9\\u00D8\\u00B8\\u00D9\\u008A\\u00D9\\u0085entertainmentunderstanding = function().jpg\\\" width=\\\"configuration.png\\\" width=\\\"<body class=\\\"Math.random()contemporary United Statescircumstances.appendChild(organizations<span class=\\\"\\\"><img src=\\\"/distinguishedthousands of communicationclear\\\"></div>investigationfavicon.ico\\\" margin-right:based on the Massachusettstable border=internationalalso known aspronunciationbackground:#fpadding-left:For example, miscellaneous&lt;/math&gt;psychologicalin particularearch\\\" type=\\\"form method=\\\"as opposed toSupreme Courtoccasionally Additionally,North Americapx;backgroundopportunitiesEntertainment.toLowerCase(manufacturingprofessional combined withFor instance,consisting of\\\" maxlength=\\\"return false;consciousnessMediterraneanextraordinaryassassinationsubsequently button type=\\\"the number ofthe original comprehensiverefers to the</ul>\\n</div>\\nphilosophicallocation.hrefwas publishedSan Francisco(function(){\\n<div id=\\\"mainsophisticatedmathematical /head>\\r\\n<bodysuggests thatdocumentationconcentrationrelationshipsmay have been(for example,This article in some casesparts of the definition ofGreat Britain cellpadding=equivalent toplaceholder=\\\"; font-size: justificationbelieved thatsuffered fromattempted to leader of thecript\\\" src=\\\"/(function() {are available\\n\\t<link rel=\\\" src='http://interested inconventional \\\" alt=\\\"\\\" /></are generallyhas also beenmost popular correspondingcredited withtyle=\\\"border:</a></span></.gif\\\" width=\\\"<iframe src=\\\"table class=\\\"inline-block;according to together withapproximatelyparliamentarymore and moredisplay:none;traditionallypredominantly&nbsp;|&nbsp;&nbsp;</span> cellspacing=<input name=\\\"or\\\" content=\\\"controversialproperty=\\\"og:/x-shockwave-demonstrationsurrounded byNevertheless,was the firstconsiderable Although the collaborationshould not beproportion of<span style=\\\"known as the shortly afterfor instance,described as /head>\\n<body starting withincreasingly the fact thatdiscussion ofmiddle of thean individualdifficult to point of viewhomosexualityacceptance of</span></div>manufacturersorigin of thecommonly usedimportance ofdenominationsbackground: #length of thedeterminationa significant\\\" border=\\\"0\\\">revolutionaryprinciples ofis consideredwas developedIndo-Europeanvulnerable toproponents ofare sometimescloser to theNew York City name=\\\"searchattributed tocourse of themathematicianby the end ofat the end of\\\" border=\\\"0\\\" technological.removeClass(branch of theevidence that![endif]-->\\r\\nInstitute of into a singlerespectively.and thereforeproperties ofis located insome of whichThere is alsocontinued to appearance of &amp;ndash; describes theconsiderationauthor of theindependentlyequipped withdoes not have</a><a href=\\\"confused with<link href=\\\"/at the age ofappear in theThese includeregardless ofcould be used style=&quot;several timesrepresent thebody>\\n</html>thought to bepopulation ofpossibilitiespercentage ofaccess to thean attempt toproduction ofjquery/jquerytwo differentbelong to theestablishmentreplacing thedescription\\\" determine theavailable forAccording to wide range of\\t<div class=\\\"more commonlyorganisationsfunctionalitywas completed &amp;mdash; participationthe characteran additionalappears to befact that thean example ofsignificantlyonmouseover=\\\"because they async = true;problems withseems to havethe result of src=\\\"http://familiar withpossession offunction () {took place inand sometimessubstantially<span></span>is often usedin an attemptgreat deal ofEnvironmentalsuccessfully virtually all20th century,professionalsnecessary to determined bycompatibilitybecause it isDictionary ofmodificationsThe followingmay refer to:Consequently,Internationalalthough somethat would beworld's firstclassified asbottom of the(particularlyalign=\\\"left\\\" most commonlybasis for thefoundation ofcontributionspopularity ofcenter of theto reduce thejurisdictionsapproximation onmouseout=\\\"New Testamentcollection of</span></a></in the Unitedfilm director-strict.dtd\\\">has been usedreturn to thealthough thischange in theseveral otherbut there areunprecedentedis similar toespecially inweight: bold;is called thecomputationalindicate thatrestricted to\\t<meta name=\\\"are typicallyconflict withHowever, the An example ofcompared withquantities ofrather than aconstellationnecessary forreported thatspecificationpolitical and&nbsp;&nbsp;<references tothe same yearGovernment ofgeneration ofhave not beenseveral yearscommitment to\\t\\t<ul class=\\\"visualization19th century,practitionersthat he wouldand continuedoccupation ofis defined ascentre of thethe amount of><div style=\\\"equivalent ofdifferentiatebrought aboutmargin-left: automaticallythought of asSome of these\\n<div class=\\\"input class=\\\"replaced withis one of theeducation andinfluenced byreputation as\\n<meta name=\\\"accommodation</div>\\n</div>large part ofInstitute forthe so-called against the In this case,was appointedclaimed to beHowever, thisDepartment ofthe remainingeffect on theparticularly deal with the\\n<div style=\\\"almost alwaysare currentlyexpression ofphilosophy offor more thancivilizationson the islandselectedIndexcan result in\\\" value=\\\"\\\" />the structure /></a></div>Many of thesecaused by theof the Unitedspan class=\\\"mcan be tracedis related tobecame one ofis frequentlyliving in thetheoreticallyFollowing theRevolutionarygovernment inis determinedthe politicalintroduced insufficient todescription\\\">short storiesseparation ofas to whetherknown for itswas initiallydisplay:blockis an examplethe principalconsists of arecognized as/body></html>a substantialreconstructedhead of stateresistance toundergraduateThere are twogravitationalare describedintentionallyserved as theclass=\\\"headeropposition tofundamentallydominated theand the otheralliance withwas forced torespectively,and politicalin support ofpeople in the20th century.and publishedloadChartbeatto understandmember statesenvironmentalfirst half ofcountries andarchitecturalbe consideredcharacterizedclearIntervalauthoritativeFederation ofwas succeededand there area consequencethe Presidentalso includedfree softwaresuccession ofdeveloped thewas destroyedaway from the;\\n</script>\\n<although theyfollowed by amore powerfulresulted in aUniversity ofHowever, manythe presidentHowever, someis thought tountil the endwas announcedare importantalso includes><input type=the center of DO NOT ALTERused to referthemes/?sort=that had beenthe basis forhas developedin the summercomparativelydescribed thesuch as thosethe resultingis impossiblevarious otherSouth Africanhave the sameeffectivenessin which case; text-align:structure and; background:regarding thesupported theis also knownstyle=\\\"marginincluding thebahasa Melayunorsk bokm\\u00C3\\u00A5lnorsk nynorsksloven\\u00C5\\u00A1\\u00C4\\u008Dinainternacionalcalificaci\\u00C3\\u00B3ncomunicaci\\u00C3\\u00B3nconstrucci\\u00C3\\u00B3n\\\"><div class=\\\"disambiguationDomainName', 'administrationsimultaneouslytransportationInternational margin-bottom:responsibility<![endif]-->\\n</><meta name=\\\"implementationinfrastructurerepresentationborder-bottom:</head>\\n<body>=http%3A%2F%2F<form method=\\\"method=\\\"post\\\" /favicon.ico\\\" });\\n</script>\\n.setAttribute(Administration= new Array();<![endif]-->\\r\\ndisplay:block;Unfortunately,\\\">&nbsp;</div>/favicon.ico\\\">='stylesheet' identification, for example,<li><a href=\\\"/an alternativeas a result ofpt\\\"></script>\\ntype=\\\"submit\\\" \\n(function() {recommendationform action=\\\"/transformationreconstruction.style.display According to hidden\\\" name=\\\"along with thedocument.body.approximately Communicationspost\\\" action=\\\"meaning &quot;--<![endif]-->Prime Ministercharacteristic</a> <a class=the history of onmouseover=\\\"the governmenthref=\\\"https://was originallywas introducedclassificationrepresentativeare considered<![endif]-->\\n\\ndepends on theUniversity of in contrast to placeholder=\\\"in the case ofinternational constitutionalstyle=\\\"border-: function() {Because of the-strict.dtd\\\">\\n<table class=\\\"accompanied byaccount of the<script src=\\\"/nature of the the people in in addition tos); js.id = id\\\" width=\\\"100%\\\"regarding the Roman Catholican independentfollowing the .gif\\\" width=\\\"1the following discriminationarchaeologicalprime minister.js\\\"></script>combination of marginwidth=\\\"createElement(w.attachEvent(</a></td></tr>src=\\\"https://aIn particular, align=\\\"left\\\" Czech RepublicUnited Kingdomcorrespondenceconcluded that.html\\\" title=\\\"(function () {comes from theapplication of<span class=\\\"sbelieved to beement('script'</a>\\n</li>\\n<livery different><span class=\\\"option value=\\\"(also known as\\t<li><a href=\\\"><input name=\\\"separated fromreferred to as valign=\\\"top\\\">founder of theattempting to carbon dioxide\\n\\n<div class=\\\"class=\\\"search-/body>\\n</html>opportunity tocommunications</head>\\r\\n<body style=\\\"width:Ti\\u00E1\\u00BA\\u00BFng Vi\\u00E1\\u00BB\\u0087tchanges in theborder-color:#0\\\" border=\\\"0\\\" </span></div><was discovered\\\" type=\\\"text\\\" );\\n</script>\\n\\nDepartment of ecclesiasticalthere has beenresulting from</body></html>has never beenthe first timein response toautomatically </div>\\n\\n<div iwas consideredpercent of the\\\" /></a></div>collection of descended fromsection of theaccept-charsetto be confusedmember of the padding-right:translation ofinterpretation href='http://whether or notThere are alsothere are manya small numberother parts ofimpossible to  class=\\\"buttonlocated in the. However, theand eventuallyAt the end of because of itsrepresents the<form action=\\\" method=\\\"post\\\"it is possiblemore likely toan increase inhave also beencorresponds toannounced thatalign=\\\"right\\\">many countriesfor many yearsearliest knownbecause it waspt\\\"></script>\\r valign=\\\"top\\\" inhabitants offollowing year\\r\\n<div class=\\\"million peoplecontroversial concerning theargue that thegovernment anda reference totransferred todescribing the style=\\\"color:although therebest known forsubmit\\\" name=\\\"multiplicationmore than one recognition ofCouncil of theedition of the  <meta name=\\\"Entertainment away from the ;margin-right:at the time ofinvestigationsconnected withand many otheralthough it isbeginning with <span class=\\\"descendants of<span class=\\\"i align=\\\"right\\\"</head>\\n<body aspects of thehas since beenEuropean Unionreminiscent ofmore difficultVice Presidentcomposition ofpassed throughmore importantfont-size:11pxexplanation ofthe concept ofwritten in the\\t<span class=\\\"is one of the resemblance toon the groundswhich containsincluding the defined by thepublication ofmeans that theoutside of thesupport of the<input class=\\\"<span class=\\\"t(Math.random()most prominentdescription ofConstantinoplewere published<div class=\\\"seappears in the1\\\" height=\\\"1\\\" most importantwhich includeswhich had beendestruction ofthe population\\n\\t<div class=\\\"possibility ofsometimes usedappear to havesuccess of theintended to bepresent in thestyle=\\\"clear:b\\r\\n</script>\\r\\n<was founded ininterview with_id\\\" content=\\\"capital of the\\r\\n<link rel=\\\"srelease of thepoint out thatxMLHttpRequestand subsequentsecond largestvery importantspecificationssurface of theapplied to theforeign policy_setDomainNameestablished inis believed toIn addition tomeaning of theis named afterto protect theis representedDeclaration ofmore efficientClassificationother forms ofhe returned to<span class=\\\"cperformance of(function() {\\rif and only ifregions of theleading to therelations withUnited Nationsstyle=\\\"height:other than theype\\\" content=\\\"Association of\\n</head>\\n<bodylocated on theis referred to(including theconcentrationsthe individualamong the mostthan any other/>\\n<link rel=\\\" return false;the purpose ofthe ability to;color:#fff}\\n.\\n<span class=\\\"the subject ofdefinitions of>\\r\\n<link rel=\\\"claim that thehave developed<table width=\\\"celebration ofFollowing the to distinguish<span class=\\\"btakes place inunder the namenoted that the><![endif]-->\\nstyle=\\\"margin-instead of theintroduced thethe process ofincreasing thedifferences inestimated thatespecially the/div><div id=\\\"was eventuallythroughout histhe differencesomething thatspan></span></significantly ></script>\\r\\n\\r\\nenvironmental to prevent thehave been usedespecially forunderstand theis essentiallywere the firstis the largesthave been made\\\" src=\\\"http://interpreted assecond half ofcrolling=\\\"no\\\" is composed ofII, Holy Romanis expected tohave their owndefined as thetraditionally have differentare often usedto ensure thatagreement withcontaining theare frequentlyinformation onexample is theresulting in a</a></li></ul> class=\\\"footerand especiallytype=\\\"button\\\" </span></span>which included>\\n<meta name=\\\"considered thecarried out byHowever, it isbecame part ofin relation topopular in thethe capital ofwas officiallywhich has beenthe History ofalternative todifferent fromto support thesuggested thatin the process  <div class=\\\"the foundationbecause of hisconcerned withthe universityopposed to thethe context of<span class=\\\"ptext\\\" name=\\\"q\\\"\\t\\t<div class=\\\"the scientificrepresented bymathematicianselected by thethat have been><div class=\\\"cdiv id=\\\"headerin particular,converted into);\\n</script>\\n<philosophical srpskohrvatskiti\\u00E1\\u00BA\\u00BFng Vi\\u00E1\\u00BB\\u0087t\\u00D0\\u00A0\\u00D1\\u0083\\u00D1\\u0081\\u00D1\\u0081\\u00D0\\u00BA\\u00D0\\u00B8\\u00D0\\u00B9\\u00D1\\u0080\\u00D1\\u0083\\u00D1\\u0081\\u00D1\\u0081\\u00D0\\u00BA\\u00D0\\u00B8\\u00D0\\u00B9investigaci\\u00C3\\u00B3nparticipaci\\u00C3\\u00B3n\\u00D0\\u00BA\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00BE\\u00D1\\u0080\\u00D1\\u008B\\u00D0\\u00B5\\u00D0\\u00BE\\u00D0\\u00B1\\u00D0\\u00BB\\u00D0\\u00B0\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B8\\u00D0\\u00BA\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00BE\\u00D1\\u0080\\u00D1\\u008B\\u00D0\\u00B9\\u00D1\\u0087\\u00D0\\u00B5\\u00D0\\u00BB\\u00D0\\u00BE\\u00D0\\u00B2\\u00D0\\u00B5\\u00D0\\u00BA\\u00D1\\u0081\\u00D0\\u00B8\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B5\\u00D0\\u00BC\\u00D1\\u008B\\u00D0\\u009D\\u00D0\\u00BE\\u00D0\\u00B2\\u00D0\\u00BE\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B8\\u00D0\\u00BA\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00BE\\u00D1\\u0080\\u00D1\\u008B\\u00D1\\u0085\\u00D0\\u00BE\\u00D0\\u00B1\\u00D0\\u00BB\\u00D0\\u00B0\\u00D1\\u0081\\u00D1\\u0082\\u00D1\\u008C\\u00D0\\u00B2\\u00D1\\u0080\\u00D0\\u00B5\\u00D0\\u00BC\\u00D0\\u00B5\\u00D0\\u00BD\\u00D0\\u00B8\\u00D0\\u00BA\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00B0\\u00D1\\u008F\\u00D1\\u0081\\u00D0\\u00B5\\u00D0\\u00B3\\u00D0\\u00BE\\u00D0\\u00B4\\u00D0\\u00BD\\u00D1\\u008F\\u00D1\\u0081\\u00D0\\u00BA\\u00D0\\u00B0\\u00D1\\u0087\\u00D0\\u00B0\\u00D1\\u0082\\u00D1\\u008C\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00B2\\u00D0\\u00BE\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B8\\u00D0\\u00A3\\u00D0\\u00BA\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00B8\\u00D0\\u00BD\\u00D1\\u008B\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u00BF\\u00D1\\u0080\\u00D0\\u00BE\\u00D1\\u0081\\u00D1\\u008B\\u00D0\\u00BA\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00B9\\u00D1\\u0081\\u00D0\\u00B4\\u00D0\\u00B5\\u00D0\\u00BB\\u00D0\\u00B0\\u00D1\\u0082\\u00D1\\u008C\\u00D0\\u00BF\\u00D0\\u00BE\\u00D0\\u00BC\\u00D0\\u00BE\\u00D1\\u0089\\u00D1\\u008C\\u00D1\\u008E\\u00D1\\u0081\\u00D1\\u0080\\u00D0\\u00B5\\u00D0\\u00B4\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u00B1\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00B7\\u00D0\\u00BE\\u00D0\\u00BC\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00BD\\u00D1\\u008B\\u00D1\\u0083\\u00D1\\u0087\\u00D0\\u00B0\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B8\\u00D0\\u00B5\\u00D1\\u0082\\u00D0\\u00B5\\u00D1\\u0087\\u00D0\\u00B5\\u00D0\\u00BD\\u00D0\\u00B8\\u00D0\\u00B5\\u00D0\\u0093\\u00D0\\u00BB\\u00D0\\u00B0\\u00D0\\u00B2\\u00D0\\u00BD\\u00D0\\u00B0\\u00D1\\u008F\\u00D0\\u00B8\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00B8\\u00D0\\u00B8\\u00D1\\u0081\\u00D0\\u00B8\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B5\\u00D0\\u00BC\\u00D0\\u00B0\\u00D1\\u0080\\u00D0\\u00B5\\u00D1\\u0088\\u00D0\\u00B5\\u00D0\\u00BD\\u00D0\\u00B8\\u00D1\\u008F\\u00D0\\u00A1\\u00D0\\u00BA\\u00D0\\u00B0\\u00D1\\u0087\\u00D0\\u00B0\\u00D1\\u0082\\u00D1\\u008C\\u00D0\\u00BF\\u00D0\\u00BE\\u00D1\\u008D\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00BC\\u00D1\\u0083\\u00D1\\u0081\\u00D0\\u00BB\\u00D0\\u00B5\\u00D0\\u00B4\\u00D1\\u0083\\u00D0\\u00B5\\u00D1\\u0082\\u00D1\\u0081\\u00D0\\u00BA\\u00D0\\u00B0\\u00D0\\u00B7\\u00D0\\u00B0\\u00D1\\u0082\\u00D1\\u008C\\u00D1\\u0082\\u00D0\\u00BE\\u00D0\\u00B2\\u00D0\\u00B0\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00B2\\u00D0\\u00BA\\u00D0\\u00BE\\u00D0\\u00BD\\u00D0\\u00B5\\u00D1\\u0087\\u00D0\\u00BD\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00B5\\u00D1\\u0088\\u00D0\\u00B5\\u00D0\\u00BD\\u00D0\\u00B8\\u00D0\\u00B5\\u00D0\\u00BA\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00B5\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00B3\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00B2\\u00D0\\u00BA\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00BC\\u00D0\\u00A0\\u00D0\\u00B5\\u00D0\\u00BA\\u00D0\\u00BB\\u00D0\\u00B0\\u00D0\\u00BC\\u00D0\\u00B0\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D9\\u0086\\u00D8\\u00AA\\u00D8\\u00AF\\u00D9\\u0089\\u00D9\\u0085\\u00D9\\u0086\\u00D8\\u00AA\\u00D8\\u00AF\\u00D9\\u008A\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D9\\u0088\\u00D8\\u00B6\\u00D9\\u0088\\u00D8\\u00B9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A8\\u00D8\\u00B1\\u00D8\\u00A7\\u00D9\\u0085\\u00D8\\u00AC\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D9\\u0088\\u00D8\\u00A7\\u00D9\\u0082\\u00D8\\u00B9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B1\\u00D8\\u00B3\\u00D8\\u00A7\\u00D8\\u00A6\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00B4\\u00D8\\u00A7\\u00D8\\u00B1\\u00D9\\u0083\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A3\\u00D8\\u00B9\\u00D8\\u00B6\\u00D8\\u00A7\\u00D8\\u00A1\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B1\\u00D9\\u008A\\u00D8\\u00A7\\u00D8\\u00B6\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AA\\u00D8\\u00B5\\u00D9\\u0085\\u00D9\\u008A\\u00D9\\u0085\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A7\\u00D8\\u00B9\\u00D8\\u00B6\\u00D8\\u00A7\\u00D8\\u00A1\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0086\\u00D8\\u00AA\\u00D8\\u00A7\\u00D8\\u00A6\\u00D8\\u00AC\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A3\\u00D9\\u0084\\u00D8\\u00B9\\u00D8\\u00A7\\u00D8\\u00A8\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AA\\u00D8\\u00B3\\u00D8\\u00AC\\u00D9\\u008A\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A3\\u00D9\\u0082\\u00D8\\u00B3\\u00D8\\u00A7\\u00D9\\u0085\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B6\\u00D8\\u00BA\\u00D8\\u00B7\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0081\\u00D9\\u008A\\u00D8\\u00AF\\u00D9\\u008A\\u00D9\\u0088\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AA\\u00D8\\u00B1\\u00D8\\u00AD\\u00D9\\u008A\\u00D8\\u00A8\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AC\\u00D8\\u00AF\\u00D9\\u008A\\u00D8\\u00AF\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AA\\u00D8\\u00B9\\u00D9\\u0084\\u00D9\\u008A\\u00D9\\u0085\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A3\\u00D8\\u00AE\\u00D8\\u00A8\\u00D8\\u00A7\\u00D8\\u00B1\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0081\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0085\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A3\\u00D9\\u0081\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0085\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AA\\u00D8\\u00A7\\u00D8\\u00B1\\u00D9\\u008A\\u00D8\\u00AE\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AA\\u00D9\\u0082\\u00D9\\u0086\\u00D9\\u008A\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B9\\u00D8\\u00A7\\u00D8\\u00A8\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AE\\u00D9\\u0088\\u00D8\\u00A7\\u00D8\\u00B7\\u00D8\\u00B1\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00AC\\u00D8\\u00AA\\u00D9\\u0085\\u00D8\\u00B9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AF\\u00D9\\u008A\\u00D9\\u0083\\u00D9\\u0088\\u00D8\\u00B1\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B3\\u00D9\\u008A\\u00D8\\u00A7\\u00D8\\u00AD\\u00D8\\u00A9\\u00D8\\u00B9\\u00D8\\u00A8\\u00D8\\u00AF\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0084\\u00D9\\u0087\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AA\\u00D8\\u00B1\\u00D8\\u00A8\\u00D9\\u008A\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B1\\u00D9\\u0088\\u00D8\\u00A7\\u00D8\\u00A8\\u00D8\\u00B7\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A3\\u00D8\\u00AF\\u00D8\\u00A8\\u00D9\\u008A\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A7\\u00D8\\u00AE\\u00D8\\u00A8\\u00D8\\u00A7\\u00D8\\u00B1\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00AA\\u00D8\\u00AD\\u00D8\\u00AF\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A7\\u00D8\\u00BA\\u00D8\\u00A7\\u00D9\\u0086\\u00D9\\u008Acursor:pointer;</title>\\n<meta \\\" href=\\\"http://\\\"><span class=\\\"members of the window.locationvertical-align:/a> | <a href=\\\"<!doctype html>media=\\\"screen\\\" <option value=\\\"favicon.ico\\\" />\\n\\t\\t<div class=\\\"characteristics\\\" method=\\\"get\\\" /body>\\n</html>\\nshortcut icon\\\" document.write(padding-bottom:representativessubmit\\\" value=\\\"align=\\\"center\\\" throughout the science fiction\\n  <div class=\\\"submit\\\" class=\\\"one of the most valign=\\\"top\\\"><was established);\\r\\n</script>\\r\\nreturn false;\\\">).style.displaybecause of the document.cookie<form action=\\\"/}body{margin:0;Encyclopedia ofversion of the .createElement(name\\\" content=\\\"</div>\\n</div>\\n\\nadministrative </body>\\n</html>history of the \\\"><input type=\\\"portion of the as part of the &nbsp;<a href=\\\"other countries\\\">\\n<div class=\\\"</span></span><In other words,display: block;control of the introduction of/>\\n<meta name=\\\"as well as the in recent years\\r\\n\\t<div class=\\\"</div>\\n\\t</div>\\ninspired by thethe end of the compatible withbecame known as style=\\\"margin:.js\\\"></script>< International there have beenGerman language style=\\\"color:#Communist Partyconsistent withborder=\\\"0\\\" cell marginheight=\\\"the majority of\\\" align=\\\"centerrelated to the many different Orthodox Churchsimilar to the />\\n<link rel=\\\"swas one of the until his death})();\\n</script>other languagescompared to theportions of thethe Netherlandsthe most commonbackground:url(argued that thescrolling=\\\"no\\\" included in theNorth American the name of theinterpretationsthe traditionaldevelopment of frequently useda collection ofvery similar tosurrounding theexample of thisalign=\\\"center\\\">would have beenimage_caption =attached to thesuggesting thatin the form of involved in theis derived fromnamed after theIntroduction torestrictions on style=\\\"width: can be used to the creation ofmost important information andresulted in thecollapse of theThis means thatelements of thewas replaced byanalysis of theinspiration forregarded as themost successfulknown as &quot;a comprehensiveHistory of the were consideredreturned to theare referred toUnsourced image>\\n\\t<div class=\\\"consists of thestopPropagationinterest in theavailability ofappears to haveelectromagneticenableServices(function of theIt is important</script></div>function(){var relative to theas a result of the position ofFor example, in method=\\\"post\\\" was followed by&amp;mdash; thethe applicationjs\\\"></script>\\r\\nul></div></div>after the deathwith respect tostyle=\\\"padding:is particularlydisplay:inline; type=\\\"submit\\\" is divided into\\u00E4\\u00B8\\u00AD\\u00E6\\u0096\\u0087 (\\u00E7\\u00AE\\u0080\\u00E4\\u00BD\\u0093)responsabilidadadministraci\\u00C3\\u00B3ninternacionalescorrespondiente\\u00E0\\u00A4\\u0089\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00AF\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u0082\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0097\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u009A\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0096\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u009C\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u009A\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u008F\\u00E0\\u00A4\\u00AD\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u009C\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00B6\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A3\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00AC\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0089\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u0083\\u00E0\\u00A4\\u00B7\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A0\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00A2\\u00E0\\u00A4\\u00BC\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00AD\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u009F\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u0096\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AB\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u008C\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00AF\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u009A\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u0081\\u00E0\\u00A4\\u009A\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0096\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u009B\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B6\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B7\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u009C\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u0089\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u0088\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u0089\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A3\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00A2\\u00E0\\u00A4\\u00BC\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A5\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00AB\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u0096\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u009A\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u009B\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u009B\\u00E0\\u00A5\\u0082\\u00E0\\u00A4\\u009F\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u0097\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u008F\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00AD\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u0098\\u00E0\\u00A4\\u00A3\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u009F\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0082\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00A7\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B6\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0088\\u00E0\\u00A4\\u009F\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B6\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0082\\u00E0\\u00A4\\u00B7\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00AF\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A5\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u00A1\\u00E0\\u00A4\\u00BC\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00AF\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0083\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u009F\\u00E0\\u00A4\\u0098\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0082\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u009A\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u0082\\u00E0\\u00A4\\u009A\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0082\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0096\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B6\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0082\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0088\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u0088\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0087rss+xml\\\" title=\\\"-type\\\" content=\\\"title\\\" content=\\\"at the same time.js\\\"></script>\\n<\\\" method=\\\"post\\\" </span></a></li>vertical-align:t/jquery.min.js\\\">.click(function( style=\\\"padding-})();\\n</script>\\n</span><a href=\\\"<a href=\\\"http://); return false;text-decoration: scrolling=\\\"no\\\" border-collapse:associated with Bahasa IndonesiaEnglish language<text xml:space=.gif\\\" border=\\\"0\\\"</body>\\n</html>\\noverflow:hidden;img src=\\\"http://addEventListenerresponsible for s.js\\\"></script>\\n/favicon.ico\\\" />operating system\\\" style=\\\"width:1target=\\\"_blank\\\">State Universitytext-align:left;\\ndocument.write(, including the around the world);\\r\\n</script>\\r\\n<\\\" style=\\\"height:;overflow:hiddenmore informationan internationala member of the one of the firstcan be found in </div>\\n\\t\\t</div>\\ndisplay: none;\\\">\\\" />\\n<link rel=\\\"\\n  (function() {the 15th century.preventDefault(large number of Byzantine Empire.jpg|thumb|left|vast majority ofmajority of the  align=\\\"center\\\">University Pressdominated by theSecond World Wardistribution of style=\\\"position:the rest of the characterized by rel=\\\"nofollow\\\">derives from therather than the a combination ofstyle=\\\"width:100English-speakingcomputer scienceborder=\\\"0\\\" alt=\\\"the existence ofDemocratic Party\\\" style=\\\"margin-For this reason,.js\\\"></script>\\n\\tsByTagName(s)[0]js\\\"></script>\\r\\n<.js\\\"></script>\\r\\nlink rel=\\\"icon\\\" ' alt='' class='formation of theversions of the </a></div></div>/page>\\n  <page>\\n<div class=\\\"contbecame the firstbahasa Indonesiaenglish (simple)\\u00CE\\u0095\\u00CE\\u00BB\\u00CE\\u00BB\\u00CE\\u00B7\\u00CE\\u00BD\\u00CE\\u00B9\\u00CE\\u00BA\\u00CE\\u00AC\\u00D1\\u0085\\u00D1\\u0080\\u00D0\\u00B2\\u00D0\\u00B0\\u00D1\\u0082\\u00D1\\u0081\\u00D0\\u00BA\\u00D0\\u00B8\\u00D0\\u00BA\\u00D0\\u00BE\\u00D0\\u00BC\\u00D0\\u00BF\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00B8\\u00D0\\u00B8\\u00D1\\u008F\\u00D0\\u00B2\\u00D0\\u00BB\\u00D1\\u008F\\u00D0\\u00B5\\u00D1\\u0082\\u00D1\\u0081\\u00D1\\u008F\\u00D0\\u0094\\u00D0\\u00BE\\u00D0\\u00B1\\u00D0\\u00B0\\u00D0\\u00B2\\u00D0\\u00B8\\u00D1\\u0082\\u00D1\\u008C\\u00D1\\u0087\\u00D0\\u00B5\\u00D0\\u00BB\\u00D0\\u00BE\\u00D0\\u00B2\\u00D0\\u00B5\\u00D0\\u00BA\\u00D0\\u00B0\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00B7\\u00D0\\u00B2\\u00D0\\u00B8\\u00D1\\u0082\\u00D0\\u00B8\\u00D1\\u008F\\u00D0\\u0098\\u00D0\\u00BD\\u00D1\\u0082\\u00D0\\u00B5\\u00D1\\u0080\\u00D0\\u00BD\\u00D0\\u00B5\\u00D1\\u0082\\u00D0\\u009E\\u00D1\\u0082\\u00D0\\u00B2\\u00D0\\u00B5\\u00D1\\u0082\\u00D0\\u00B8\\u00D1\\u0082\\u00D1\\u008C\\u00D0\\u00BD\\u00D0\\u00B0\\u00D0\\u00BF\\u00D1\\u0080\\u00D0\\u00B8\\u00D0\\u00BC\\u00D0\\u00B5\\u00D1\\u0080\\u00D0\\u00B8\\u00D0\\u00BD\\u00D1\\u0082\\u00D0\\u00B5\\u00D1\\u0080\\u00D0\\u00BD\\u00D0\\u00B5\\u00D1\\u0082\\u00D0\\u00BA\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00B3\\u00D0\\u00BE\\u00D1\\u0081\\u00D1\\u0082\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00B8\\u00D1\\u0086\\u00D1\\u008B\\u00D0\\u00BA\\u00D0\\u00B0\\u00D1\\u0087\\u00D0\\u00B5\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B2\\u00D0\\u00B5\\u00D1\\u0083\\u00D1\\u0081\\u00D0\\u00BB\\u00D0\\u00BE\\u00D0\\u00B2\\u00D0\\u00B8\\u00D1\\u008F\\u00D1\\u0085\\u00D0\\u00BF\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00B1\\u00D0\\u00BB\\u00D0\\u00B5\\u00D0\\u00BC\\u00D1\\u008B\\u00D0\\u00BF\\u00D0\\u00BE\\u00D0\\u00BB\\u00D1\\u0083\\u00D1\\u0087\\u00D0\\u00B8\\u00D1\\u0082\\u00D1\\u008C\\u00D1\\u008F\\u00D0\\u00B2\\u00D0\\u00BB\\u00D1\\u008F\\u00D1\\u008E\\u00D1\\u0082\\u00D1\\u0081\\u00D1\\u008F\\u00D0\\u00BD\\u00D0\\u00B0\\u00D0\\u00B8\\u00D0\\u00B1\\u00D0\\u00BE\\u00D0\\u00BB\\u00D0\\u00B5\\u00D0\\u00B5\\u00D0\\u00BA\\u00D0\\u00BE\\u00D0\\u00BC\\u00D0\\u00BF\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00B8\\u00D1\\u008F\\u00D0\\u00B2\\u00D0\\u00BD\\u00D0\\u00B8\\u00D0\\u00BC\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00B8\\u00D0\\u00B5\\u00D1\\u0081\\u00D1\\u0080\\u00D0\\u00B5\\u00D0\\u00B4\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B2\\u00D0\\u00B0\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D9\\u0088\\u00D8\\u00A7\\u00D8\\u00B6\\u00D9\\u008A\\u00D8\\u00B9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B1\\u00D8\\u00A6\\u00D9\\u008A\\u00D8\\u00B3\\u00D9\\u008A\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0086\\u00D8\\u00AA\\u00D9\\u0082\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00B4\\u00D8\\u00A7\\u00D8\\u00B1\\u00D9\\u0083\\u00D8\\u00A7\\u00D8\\u00AA\\u00D9\\u0083\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B3\\u00D9\\u008A\\u00D8\\u00A7\\u00D8\\u00B1\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D9\\u0083\\u00D8\\u00AA\\u00D9\\u0088\\u00D8\\u00A8\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B3\\u00D8\\u00B9\\u00D9\\u0088\\u00D8\\u00AF\\u00D9\\u008A\\u00D8\\u00A9\\u00D8\\u00A7\\u00D8\\u00AD\\u00D8\\u00B5\\u00D8\\u00A7\\u00D8\\u00A6\\u00D9\\u008A\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B9\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D9\\u008A\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B5\\u00D9\\u0088\\u00D8\\u00AA\\u00D9\\u008A\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0086\\u00D8\\u00AA\\u00D8\\u00B1\\u00D9\\u0086\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AA\\u00D8\\u00B5\\u00D8\\u00A7\\u00D9\\u0085\\u00D9\\u008A\\u00D9\\u0085\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A5\\u00D8\\u00B3\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0085\\u00D9\\u008A\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00B4\\u00D8\\u00A7\\u00D8\\u00B1\\u00D9\\u0083\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00B1\\u00D8\\u00A6\\u00D9\\u008A\\u00D8\\u00A7\\u00D8\\u00AArobots\\\" content=\\\"<div id=\\\"footer\\\">the United States<img src=\\\"http://.jpg|right|thumb|.js\\\"></script>\\r\\n<location.protocolframeborder=\\\"0\\\" s\\\" />\\n<meta name=\\\"</a></div></div><font-weight:bold;&quot; and &quot;depending on the margin:0;padding:\\\" rel=\\\"nofollow\\\" President of the twentieth centuryevision>\\n  </pageInternet Explorera.async = true;\\r\\ninformation about<div id=\\\"header\\\">\\\" action=\\\"http://<a href=\\\"https://<div id=\\\"content\\\"</div>\\r\\n</div>\\r\\n<derived from the <img src='http://according to the \\n</body>\\n</html>\\nstyle=\\\"font-size:script language=\\\"Arial, Helvetica,</a><span class=\\\"</script><script political partiestd></tr></table><href=\\\"http://www.interpretation ofrel=\\\"stylesheet\\\" document.write('<charset=\\\"utf-8\\\">\\nbeginning of the revealed that thetelevision series\\\" rel=\\\"nofollow\\\"> target=\\\"_blank\\\">claiming that thehttp%3A%2F%2Fwww.manifestations ofPrime Minister ofinfluenced by theclass=\\\"clearfix\\\">/div>\\r\\n</div>\\r\\n\\r\\nthree-dimensionalChurch of Englandof North Carolinasquare kilometres.addEventListenerdistinct from thecommonly known asPhonetic Alphabetdeclared that thecontrolled by theBenjamin Franklinrole-playing gamethe University ofin Western Europepersonal computerProject Gutenbergregardless of thehas been proposedtogether with the></li><li class=\\\"in some countriesmin.js\\\"></script>of the populationofficial language<img src=\\\"images/identified by thenatural resourcesclassification ofcan be consideredquantum mechanicsNevertheless, themillion years ago</body>\\r\\n</html>\\r\\u00CE\\u0095\\u00CE\\u00BB\\u00CE\\u00BB\\u00CE\\u00B7\\u00CE\\u00BD\\u00CE\\u00B9\\u00CE\\u00BA\\u00CE\\u00AC\\ntake advantage ofand, according toattributed to theMicrosoft Windowsthe first centuryunder the controldiv class=\\\"headershortly after thenotable exceptiontens of thousandsseveral differentaround the world.reaching militaryisolated from theopposition to thethe Old TestamentAfrican Americansinserted into theseparate from themetropolitan areamakes it possibleacknowledged thatarguably the mosttype=\\\"text/css\\\">\\nthe InternationalAccording to the pe=\\\"text/css\\\" />\\ncoincide with thetwo-thirds of theDuring this time,during the periodannounced that hethe internationaland more recentlybelieved that theconsciousness andformerly known assurrounded by thefirst appeared inoccasionally usedposition:absolute;\\\" target=\\\"_blank\\\" position:relative;text-align:center;jax/libs/jquery/1.background-color:#type=\\\"application/anguage\\\" content=\\\"<meta http-equiv=\\\"Privacy Policy</a>e(\\\"%3Cscript src='\\\" target=\\\"_blank\\\">On the other hand,.jpg|thumb|right|2</div><div class=\\\"<div style=\\\"float:nineteenth century</body>\\r\\n</html>\\r\\n<img src=\\\"http://s;text-align:centerfont-weight: bold; According to the difference between\\\" frameborder=\\\"0\\\" \\\" style=\\\"position:link href=\\\"http://html4/loose.dtd\\\">\\nduring this period</td></tr></table>closely related tofor the first time;font-weight:bold;input type=\\\"text\\\" <span style=\\\"font-onreadystatechange\\t<div class=\\\"cleardocument.location. For example, the a wide variety of <!DOCTYPE html>\\r\\n<&nbsp;&nbsp;&nbsp;\\\"><a href=\\\"http://style=\\\"float:left;concerned with the=http%3A%2F%2Fwww.in popular culturetype=\\\"text/css\\\" />it is possible to Harvard Universitytylesheet\\\" href=\\\"/the main characterOxford University  name=\\\"keywords\\\" cstyle=\\\"text-align:the United Kingdomfederal government<div style=\\\"margin depending on the description of the<div class=\\\"header.min.js\\\"></script>destruction of theslightly differentin accordance withtelecommunicationsindicates that theshortly thereafterespecially in the European countriesHowever, there aresrc=\\\"http://staticsuggested that the\\\" src=\\\"http://www.a large number of Telecommunications\\\" rel=\\\"nofollow\\\" tHoly Roman Emperoralmost exclusively\\\" border=\\\"0\\\" alt=\\\"Secretary of Stateculminating in theCIA World Factbookthe most importantanniversary of thestyle=\\\"background-<li><em><a href=\\\"/the Atlantic Oceanstrictly speaking,shortly before thedifferent types ofthe Ottoman Empire><img src=\\\"http://An Introduction toconsequence of thedeparture from theConfederate Statesindigenous peoplesProceedings of theinformation on thetheories have beeninvolvement in thedivided into threeadjacent countriesis responsible fordissolution of thecollaboration withwidely regarded ashis contemporariesfounding member ofDominican Republicgenerally acceptedthe possibility ofare also availableunder constructionrestoration of thethe general publicis almost entirelypasses through thehas been suggestedcomputer and videoGermanic languages according to the different from theshortly afterwardshref=\\\"https://www.recent developmentBoard of Directors<div class=\\\"search| <a href=\\\"http://In particular, theMultiple footnotesor other substancethousands of yearstranslation of the</div>\\r\\n</div>\\r\\n\\r\\n<a href=\\\"index.phpwas established inmin.js\\\"></script>\\nparticipate in thea strong influencestyle=\\\"margin-top:represented by thegraduated from theTraditionally, theElement(\\\"script\\\");However, since the/div>\\n</div>\\n<div left; margin-left:protection against0; vertical-align:Unfortunately, thetype=\\\"image/x-icon/div>\\n<div class=\\\" class=\\\"clearfix\\\"><div class=\\\"footer\\t\\t</div>\\n\\t\\t</div>\\nthe motion picture\\u00D0\\u0091\\u00D1\\u008A\\u00D0\\u00BB\\u00D0\\u00B3\\u00D0\\u00B0\\u00D1\\u0080\\u00D1\\u0081\\u00D0\\u00BA\\u00D0\\u00B8\\u00D0\\u00B1\\u00D1\\u008A\\u00D0\\u00BB\\u00D0\\u00B3\\u00D0\\u00B0\\u00D1\\u0080\\u00D1\\u0081\\u00D0\\u00BA\\u00D0\\u00B8\\u00D0\\u00A4\\u00D0\\u00B5\\u00D0\\u00B4\\u00D0\\u00B5\\u00D1\\u0080\\u00D0\\u00B0\\u00D1\\u0086\\u00D0\\u00B8\\u00D0\\u00B8\\u00D0\\u00BD\\u00D0\\u00B5\\u00D1\\u0081\\u00D0\\u00BA\\u00D0\\u00BE\\u00D0\\u00BB\\u00D1\\u008C\\u00D0\\u00BA\\u00D0\\u00BE\\u00D1\\u0081\\u00D0\\u00BE\\u00D0\\u00BE\\u00D0\\u00B1\\u00D1\\u0089\\u00D0\\u00B5\\u00D0\\u00BD\\u00D0\\u00B8\\u00D0\\u00B5\\u00D1\\u0081\\u00D0\\u00BE\\u00D0\\u00BE\\u00D0\\u00B1\\u00D1\\u0089\\u00D0\\u00B5\\u00D0\\u00BD\\u00D0\\u00B8\\u00D1\\u008F\\u00D0\\u00BF\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00B3\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00BC\\u00D0\\u00BC\\u00D1\\u008B\\u00D0\\u009E\\u00D1\\u0082\\u00D0\\u00BF\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00B2\\u00D0\\u00B8\\u00D1\\u0082\\u00D1\\u008C\\u00D0\\u00B1\\u00D0\\u00B5\\u00D1\\u0081\\u00D0\\u00BF\\u00D0\\u00BB\\u00D0\\u00B0\\u00D1\\u0082\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00BC\\u00D0\\u00B0\\u00D1\\u0082\\u00D0\\u00B5\\u00D1\\u0080\\u00D0\\u00B8\\u00D0\\u00B0\\u00D0\\u00BB\\u00D1\\u008B\\u00D0\\u00BF\\u00D0\\u00BE\\u00D0\\u00B7\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u00BB\\u00D1\\u008F\\u00D0\\u00B5\\u00D1\\u0082\\u00D0\\u00BF\\u00D0\\u00BE\\u00D1\\u0081\\u00D0\\u00BB\\u00D0\\u00B5\\u00D0\\u00B4\\u00D0\\u00BD\\u00D0\\u00B8\\u00D0\\u00B5\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00B7\\u00D0\\u00BB\\u00D0\\u00B8\\u00D1\\u0087\\u00D0\\u00BD\\u00D1\\u008B\\u00D1\\u0085\\u00D0\\u00BF\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00B4\\u00D1\\u0083\\u00D0\\u00BA\\u00D1\\u0086\\u00D0\\u00B8\\u00D0\\u00B8\\u00D0\\u00BF\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00B3\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00BC\\u00D0\\u00BC\\u00D0\\u00B0\\u00D0\\u00BF\\u00D0\\u00BE\\u00D0\\u00BB\\u00D0\\u00BD\\u00D0\\u00BE\\u00D1\\u0081\\u00D1\\u0082\\u00D1\\u008C\\u00D1\\u008E\\u00D0\\u00BD\\u00D0\\u00B0\\u00D1\\u0085\\u00D0\\u00BE\\u00D0\\u00B4\\u00D0\\u00B8\\u00D1\\u0082\\u00D1\\u0081\\u00D1\\u008F\\u00D0\\u00B8\\u00D0\\u00B7\\u00D0\\u00B1\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00BD\\u00D0\\u00BE\\u00D0\\u00B5\\u00D0\\u00BD\\u00D0\\u00B0\\u00D1\\u0081\\u00D0\\u00B5\\u00D0\\u00BB\\u00D0\\u00B5\\u00D0\\u00BD\\u00D0\\u00B8\\u00D1\\u008F\\u00D0\\u00B8\\u00D0\\u00B7\\u00D0\\u00BC\\u00D0\\u00B5\\u00D0\\u00BD\\u00D0\\u00B5\\u00D0\\u00BD\\u00D0\\u00B8\\u00D1\\u008F\\u00D0\\u00BA\\u00D0\\u00B0\\u00D1\\u0082\\u00D0\\u00B5\\u00D0\\u00B3\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00B8\\u00D0\\u00B8\\u00D0\\u0090\\u00D0\\u00BB\\u00D0\\u00B5\\u00D0\\u00BA\\u00D1\\u0081\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00B4\\u00D1\\u0080\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0088\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00AD\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B6\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u0087\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00A1\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u00A7\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00B5\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00A1\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00AF\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u009A\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u009F\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A0\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u009A\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B6\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00AF\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0091\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0087\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u009F\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B6\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00AD\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AB\\u00E0\\u00A4\\u00BC\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0088\\u00E0\\u00A4\\u00B6\\u00E0\\u00A4\\u00B6\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B6\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A5\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u0089\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u0089\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u009A\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u009F\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A0\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u009C\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u009C\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u00A1\\u00E0\\u00A4\\u00BC\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00B6\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00A3\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B6\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B7\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u0097\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00A3\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00AC\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00A1\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u009A\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u009A\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u0089\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00AC\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A7\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u0089\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00A6\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A7\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00B9\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B6\\u00E0\\u00A4\\u00AC\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00A1\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0086\\u00E0\\u00A4\\u0088\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u008F\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0087\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u0096\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0086\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B6\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00A7\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BC\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00B5\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u0096\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00B6\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A5\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u0086\\u00E0\\u00A4\\u00AF\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00B4\\u00D8\\u00A7\\u00D8\\u00B1\\u00D9\\u0083\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D9\\u0086\\u00D8\\u00AA\\u00D8\\u00AF\\u00D9\\u008A\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0083\\u00D9\\u0085\\u00D8\\u00A8\\u00D9\\u008A\\u00D9\\u0088\\u00D8\\u00AA\\u00D8\\u00B1\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00B4\\u00D8\\u00A7\\u00D9\\u0087\\u00D8\\u00AF\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00B9\\u00D8\\u00AF\\u00D8\\u00AF\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B2\\u00D9\\u0088\\u00D8\\u00A7\\u00D8\\u00B1\\u00D8\\u00B9\\u00D8\\u00AF\\u00D8\\u00AF\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00B1\\u00D8\\u00AF\\u00D9\\u0088\\u00D8\\u00AF\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A5\\u00D8\\u00B3\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0085\\u00D9\\u008A\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0081\\u00D9\\u0088\\u00D8\\u00AA\\u00D9\\u0088\\u00D8\\u00B4\\u00D9\\u0088\\u00D8\\u00A8\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00B3\\u00D8\\u00A7\\u00D8\\u00A8\\u00D9\\u0082\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00B9\\u00D9\\u0084\\u00D9\\u0088\\u00D9\\u0085\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00B3\\u00D9\\u0084\\u00D8\\u00B3\\u00D9\\u0084\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00AC\\u00D8\\u00B1\\u00D8\\u00A7\\u00D9\\u0081\\u00D9\\u008A\\u00D9\\u0083\\u00D8\\u00B3\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A7\\u00D8\\u00B3\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0085\\u00D9\\u008A\\u00D8\\u00A9\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00B5\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A7\\u00D8\\u00AAkeywords\\\" content=\\\"w3.org/1999/xhtml\\\"><a target=\\\"_blank\\\" text/html; charset=\\\" target=\\\"_blank\\\"><table cellpadding=\\\"autocomplete=\\\"off\\\" text-align: center;to last version by background-color: #\\\" href=\\\"http://www./div></div><div id=<a href=\\\"#\\\" class=\\\"\\\"><img src=\\\"http://cript\\\" src=\\\"http://\\n<script language=\\\"//EN\\\" \\\"http://www.wencodeURIComponent(\\\" href=\\\"javascript:<div class=\\\"contentdocument.write('<scposition: absolute;script src=\\\"http:// style=\\\"margin-top:.min.js\\\"></script>\\n</div>\\n<div class=\\\"w3.org/1999/xhtml\\\" \\n\\r\\n</body>\\r\\n</html>distinction between/\\\" target=\\\"_blank\\\"><link href=\\\"http://encoding=\\\"utf-8\\\"?>\\nw.addEventListener?action=\\\"http://www.icon\\\" href=\\\"http:// style=\\\"background:type=\\\"text/css\\\" />\\nmeta property=\\\"og:t<input type=\\\"text\\\"  style=\\\"text-align:the development of tylesheet\\\" type=\\\"tehtml; charset=utf-8is considered to betable width=\\\"100%\\\" In addition to the contributed to the differences betweendevelopment of the It is important to </script>\\n\\n<script  style=\\\"font-size:1></span><span id=gbLibrary of Congress<img src=\\\"http://imEnglish translationAcademy of Sciencesdiv style=\\\"display:construction of the.getElementById(id)in conjunction withElement('script'); <meta property=\\\"og:\\u00D0\\u0091\\u00D1\\u008A\\u00D0\\u00BB\\u00D0\\u00B3\\u00D0\\u00B0\\u00D1\\u0080\\u00D1\\u0081\\u00D0\\u00BA\\u00D0\\u00B8\\n type=\\\"text\\\" name=\\\">Privacy Policy</a>administered by theenableSingleRequeststyle=&quot;margin:</div></div></div><><img src=\\\"http://i style=&quot;float:referred to as the total population ofin Washington, D.C. style=\\\"background-among other things,organization of theparticipated in thethe introduction ofidentified with thefictional character Oxford University misunderstanding ofThere are, however,stylesheet\\\" href=\\\"/Columbia Universityexpanded to includeusually referred toindicating that thehave suggested thataffiliated with thecorrelation betweennumber of different></td></tr></table>Republic of Ireland\\n</script>\\n<script under the influencecontribution to theOfficial website ofheadquarters of thecentered around theimplications of thehave been developedFederal Republic ofbecame increasinglycontinuation of theNote, however, thatsimilar to that of capabilities of theaccordance with theparticipants in thefurther developmentunder the directionis often consideredhis younger brother</td></tr></table><a http-equiv=\\\"X-UA-physical propertiesof British Columbiahas been criticized(with the exceptionquestions about thepassing through the0\\\" cellpadding=\\\"0\\\" thousands of peopleredirects here. Forhave children under%3E%3C/script%3E\\\"));<a href=\\\"http://www.<li><a href=\\\"http://site_name\\\" content=\\\"text-decoration:nonestyle=\\\"display: none<meta http-equiv=\\\"X-new Date().getTime() type=\\\"image/x-icon\\\"</span><span class=\\\"language=\\\"javascriptwindow.location.href<a href=\\\"javascript:-->\\r\\n<script type=\\\"t<a href='http://www.hortcut icon\\\" href=\\\"</div>\\r\\n<div class=\\\"<script src=\\\"http://\\\" rel=\\\"stylesheet\\\" t</div>\\n<script type=/a> <a href=\\\"http:// allowTransparency=\\\"X-UA-Compatible\\\" conrelationship between\\n</script>\\r\\n<script </a></li></ul></div>associated with the programming language</a><a href=\\\"http://</a></li><li class=\\\"form action=\\\"http://<div style=\\\"display:type=\\\"text\\\" name=\\\"q\\\"<table width=\\\"100%\\\" background-position:\\\" border=\\\"0\\\" width=\\\"rel=\\\"shortcut icon\\\" h6><ul><li><a href=\\\"  <meta http-equiv=\\\"css\\\" media=\\\"screen\\\" responsible for the \\\" type=\\\"application/\\\" style=\\\"background-html; charset=utf-8\\\" allowtransparency=\\\"stylesheet\\\" type=\\\"te\\r\\n<meta http-equiv=\\\"></span><span class=\\\"0\\\" cellspacing=\\\"0\\\">;\\n</script>\\n<script sometimes called thedoes not necessarilyFor more informationat the beginning of <!DOCTYPE html><htmlparticularly in the type=\\\"hidden\\\" name=\\\"javascript:void(0);\\\"effectiveness of the autocomplete=\\\"off\\\" generally considered><input type=\\\"text\\\" \\\"></script>\\r\\n<scriptthroughout the worldcommon misconceptionassociation with the</div>\\n</div>\\n<div cduring his lifetime,corresponding to thetype=\\\"image/x-icon\\\" an increasing numberdiplomatic relationsare often consideredmeta charset=\\\"utf-8\\\" <input type=\\\"text\\\" examples include the\\\"><img src=\\\"http://iparticipation in thethe establishment of\\n</div>\\n<div class=\\\"&amp;nbsp;&amp;nbsp;to determine whetherquite different frommarked the beginningdistance between thecontributions to theconflict between thewidely considered towas one of the firstwith varying degreeshave speculated that(document.getElementparticipating in theoriginally developedeta charset=\\\"utf-8\\\"> type=\\\"text/css\\\" />\\ninterchangeably withmore closely relatedsocial and politicalthat would otherwiseperpendicular to thestyle type=\\\"text/csstype=\\\"submit\\\" name=\\\"families residing indeveloping countriescomputer programmingeconomic developmentdetermination of thefor more informationon several occasionsportugu\\u00C3\\u00AAs (Europeu)\\u00D0\\u00A3\\u00D0\\u00BA\\u00D1\\u0080\\u00D0\\u00B0\\u00D1\\u0097\\u00D0\\u00BD\\u00D1\\u0081\\u00D1\\u008C\\u00D0\\u00BA\\u00D0\\u00B0\\u00D1\\u0083\\u00D0\\u00BA\\u00D1\\u0080\\u00D0\\u00B0\\u00D1\\u0097\\u00D0\\u00BD\\u00D1\\u0081\\u00D1\\u008C\\u00D0\\u00BA\\u00D0\\u00B0\\u00D0\\u00A0\\u00D0\\u00BE\\u00D1\\u0081\\u00D1\\u0081\\u00D0\\u00B8\\u00D0\\u00B9\\u00D1\\u0081\\u00D0\\u00BA\\u00D0\\u00BE\\u00D0\\u00B9\\u00D0\\u00BC\\u00D0\\u00B0\\u00D1\\u0082\\u00D0\\u00B5\\u00D1\\u0080\\u00D0\\u00B8\\u00D0\\u00B0\\u00D0\\u00BB\\u00D0\\u00BE\\u00D0\\u00B2\\u00D0\\u00B8\\u00D0\\u00BD\\u00D1\\u0084\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00BC\\u00D0\\u00B0\\u00D1\\u0086\\u00D0\\u00B8\\u00D0\\u00B8\\u00D1\\u0083\\u00D0\\u00BF\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00B2\\u00D0\\u00BB\\u00D0\\u00B5\\u00D0\\u00BD\\u00D0\\u00B8\\u00D1\\u008F\\u00D0\\u00BD\\u00D0\\u00B5\\u00D0\\u00BE\\u00D0\\u00B1\\u00D1\\u0085\\u00D0\\u00BE\\u00D0\\u00B4\\u00D0\\u00B8\\u00D0\\u00BC\\u00D0\\u00BE\\u00D0\\u00B8\\u00D0\\u00BD\\u00D1\\u0084\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00BC\\u00D0\\u00B0\\u00D1\\u0086\\u00D0\\u00B8\\u00D1\\u008F\\u00D0\\u0098\\u00D0\\u00BD\\u00D1\\u0084\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00BC\\u00D0\\u00B0\\u00D1\\u0086\\u00D0\\u00B8\\u00D1\\u008F\\u00D0\\u00A0\\u00D0\\u00B5\\u00D1\\u0081\\u00D0\\u00BF\\u00D1\\u0083\\u00D0\\u00B1\\u00D0\\u00BB\\u00D0\\u00B8\\u00D0\\u00BA\\u00D0\\u00B8\\u00D0\\u00BA\\u00D0\\u00BE\\u00D0\\u00BB\\u00D0\\u00B8\\u00D1\\u0087\\u00D0\\u00B5\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u00B8\\u00D0\\u00BD\\u00D1\\u0084\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00BC\\u00D0\\u00B0\\u00D1\\u0086\\u00D0\\u00B8\\u00D1\\u008E\\u00D1\\u0082\\u00D0\\u00B5\\u00D1\\u0080\\u00D1\\u0080\\u00D0\\u00B8\\u00D1\\u0082\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00B8\\u00D0\\u00B8\\u00D0\\u00B4\\u00D0\\u00BE\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B0\\u00D1\\u0082\\u00D0\\u00BE\\u00D1\\u0087\\u00D0\\u00BD\\u00D0\\u00BE\\u00D8\\u00A7\\u00D9\\u0084\\u00D9\\u0085\\u00D8\\u00AA\\u00D9\\u0088\\u00D8\\u00A7\\u00D8\\u00AC\\u00D8\\u00AF\\u00D9\\u0088\\u00D9\\u0086\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A7\\u00D8\\u00B4\\u00D8\\u00AA\\u00D8\\u00B1\\u00D8\\u00A7\\u00D9\\u0083\\u00D8\\u00A7\\u00D8\\u00AA\\u00D8\\u00A7\\u00D9\\u0084\\u00D8\\u00A7\\u00D9\\u0082\\u00D8\\u00AA\\u00D8\\u00B1\\u00D8\\u00A7\\u00D8\\u00AD\\u00D8\\u00A7\\u00D8\\u00AAhtml; charset=UTF-8\\\" setTimeout(function()display:inline-block;<input type=\\\"submit\\\" type = 'text/javascri<img src=\\\"http://www.\\\" \\\"http://www.w3.org/shortcut icon\\\" href=\\\"\\\" autocomplete=\\\"off\\\" </a></div><div class=</a></li>\\n<li class=\\\"css\\\" type=\\\"text/css\\\" <form action=\\\"http://xt/css\\\" href=\\\"http://link rel=\\\"alternate\\\" \\r\\n<script type=\\\"text/ onclick=\\\"javascript:(new Date).getTime()}height=\\\"1\\\" width=\\\"1\\\" People's Republic of  <a href=\\\"http://www.text-decoration:underthe beginning of the </div>\\n</div>\\n</div>\\nestablishment of the </div></div></div></d#viewport{min-height:\\n<script src=\\\"http://option><option value=often referred to as /option>\\n<option valu<!DOCTYPE html>\\n<!--[International Airport>\\n<a href=\\\"http://www</a><a href=\\\"http://w\\u00E0\\u00B8\\u00A0\\u00E0\\u00B8\\u00B2\\u00E0\\u00B8\\u00A9\\u00E0\\u00B8\\u00B2\\u00E0\\u00B9\\u0084\\u00E0\\u00B8\\u0097\\u00E0\\u00B8\\u00A2\\u00E1\\u0083\\u00A5\\u00E1\\u0083\\u0090\\u00E1\\u0083\\u00A0\\u00E1\\u0083\\u0097\\u00E1\\u0083\\u00A3\\u00E1\\u0083\\u009A\\u00E1\\u0083\\u0098\\u00E6\\u00AD\\u00A3\\u00E9\\u00AB\\u0094\\u00E4\\u00B8\\u00AD\\u00E6\\u0096\\u0087 (\\u00E7\\u00B9\\u0081\\u00E9\\u00AB\\u0094)\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A6\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B6\\u00E0\\u00A4\\u00A1\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0089\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00B2\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u00A1\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B7\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u009C\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00A7\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A5\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B5\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A3\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u0097\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u009A\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u009F\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A0\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u009C\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u009E\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u0085\\u00E0\\u00A4\\u00AE\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00AD\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A1\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0081\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00AF\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B7\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u0081\\u00E0\\u00A4\\u009A\\u00E0\\u00A4\\u00A4\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00AC\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00A7\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u009F\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00A3\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u009F\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00AD\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00AB\\u00E0\\u00A4\\u00BC\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A3\\u00E0\\u00A4\\u00B2\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00AE\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u009F\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00A1description\\\" content=\\\"document.location.prot.getElementsByTagName(<!DOCTYPE html>\\n<html <meta charset=\\\"utf-8\\\">:url\\\" content=\\\"http://.css\\\" rel=\\\"stylesheet\\\"style type=\\\"text/css\\\">type=\\\"text/css\\\" href=\\\"w3.org/1999/xhtml\\\" xmltype=\\\"text/javascript\\\" method=\\\"get\\\" action=\\\"link rel=\\\"stylesheet\\\"  = document.getElementtype=\\\"image/x-icon\\\" />cellpadding=\\\"0\\\" cellsp.css\\\" type=\\\"text/css\\\" </a></li><li><a href=\\\"\\\" width=\\\"1\\\" height=\\\"1\\\"\\\"><a href=\\\"http://www.style=\\\"display:none;\\\">alternate\\\" type=\\\"appli-//W3C//DTD XHTML 1.0 ellspacing=\\\"0\\\" cellpad type=\\\"hidden\\\" value=\\\"/a>&nbsp;<span role=\\\"s\\n<input type=\\\"hidden\\\" language=\\\"JavaScript\\\"  document.getElementsBg=\\\"0\\\" cellspacing=\\\"0\\\" ype=\\\"text/css\\\" media=\\\"type='text/javascript'with the exception of ype=\\\"text/css\\\" rel=\\\"st height=\\\"1\\\" width=\\\"1\\\" ='+encodeURIComponent(<link rel=\\\"alternate\\\" \\nbody, tr, input, textmeta name=\\\"robots\\\" conmethod=\\\"post\\\" action=\\\">\\n<a href=\\\"http://www.css\\\" rel=\\\"stylesheet\\\" </div></div><div classlanguage=\\\"javascript\\\">aria-hidden=\\\"true\\\">\\u00C2\\u00B7<ript\\\" type=\\\"text/javasl=0;})();\\n(function(){background-image: url(/a></li><li><a href=\\\"h\\t\\t<li><a href=\\\"http://ator\\\" aria-hidden=\\\"tru> <a href=\\\"http://www.language=\\\"javascript\\\" /option>\\n<option value/div></div><div class=rator\\\" aria-hidden=\\\"tre=(new Date).getTime()portugu\\u00C3\\u00AAs (do Brasil)\\u00D0\\u00BE\\u00D1\\u0080\\u00D0\\u00B3\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00B8\\u00D0\\u00B7\\u00D0\\u00B0\\u00D1\\u0086\\u00D0\\u00B8\\u00D0\\u00B8\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u00B7\\u00D0\\u00BC\\u00D0\\u00BE\\u00D0\\u00B6\\u00D0\\u00BD\\u00D0\\u00BE\\u00D1\\u0081\\u00D1\\u0082\\u00D1\\u008C\\u00D0\\u00BE\\u00D0\\u00B1\\u00D1\\u0080\\u00D0\\u00B0\\u00D0\\u00B7\\u00D0\\u00BE\\u00D0\\u00B2\\u00D0\\u00B0\\u00D0\\u00BD\\u00D0\\u00B8\\u00D1\\u008F\\u00D1\\u0080\\u00D0\\u00B5\\u00D0\\u00B3\\u00D0\\u00B8\\u00D1\\u0081\\u00D1\\u0082\\u00D1\\u0080\\u00D0\\u00B0\\u00D1\\u0086\\u00D0\\u00B8\\u00D0\\u00B8\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u00B7\\u00D0\\u00BC\\u00D0\\u00BE\\u00D0\\u00B6\\u00D0\\u00BD\\u00D0\\u00BE\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B8\\u00D0\\u00BE\\u00D0\\u00B1\\u00D1\\u008F\\u00D0\\u00B7\\u00D0\\u00B0\\u00D1\\u0082\\u00D0\\u00B5\\u00D0\\u00BB\\u00D1\\u008C\\u00D0\\u00BD\\u00D0\\u00B0<!DOCTYPE html PUBLIC \\\"nt-Type\\\" content=\\\"text/<meta http-equiv=\\\"Conteransitional//EN\\\" \\\"http:<html xmlns=\\\"http://www-//W3C//DTD XHTML 1.0 TDTD/xhtml1-transitional//www.w3.org/TR/xhtml1/pe = 'text/javascript';<meta name=\\\"descriptionparentNode.insertBefore<input type=\\\"hidden\\\" najs\\\" type=\\\"text/javascri(document).ready(functiscript type=\\\"text/javasimage\\\" content=\\\"http://UA-Compatible\\\" content=tml; charset=utf-8\\\" />\\nlink rel=\\\"shortcut icon<link rel=\\\"stylesheet\\\" </script>\\n<script type== document.createElemen<a target=\\\"_blank\\\" href= document.getElementsBinput type=\\\"text\\\" name=a.type = 'text/javascrinput type=\\\"hidden\\\" namehtml; charset=utf-8\\\" />dtd\\\">\\n<html xmlns=\\\"http-//W3C//DTD HTML 4.01 TentsByTagName('script')input type=\\\"hidden\\\" nam<script type=\\\"text/javas\\\" style=\\\"display:none;\\\">document.getElementById(=document.createElement(' type='text/javascript'input type=\\\"text\\\" name=\\\"d.getElementsByTagName(snical\\\" href=\\\"http://www.C//DTD HTML 4.01 Transit<style type=\\\"text/css\\\">\\n\\n<style type=\\\"text/css\\\">ional.dtd\\\">\\n<html xmlns=http-equiv=\\\"Content-Typeding=\\\"0\\\" cellspacing=\\\"0\\\"html; charset=utf-8\\\" />\\n style=\\\"display:none;\\\"><<li><a href=\\\"http://www. type='text/javascript'>\\u00D0\\u00B4\\u00D0\\u00B5\\u00D1\\u008F\\u00D1\\u0082\\u00D0\\u00B5\\u00D0\\u00BB\\u00D1\\u008C\\u00D0\\u00BD\\u00D0\\u00BE\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B8\\u00D1\\u0081\\u00D0\\u00BE\\u00D0\\u00BE\\u00D1\\u0082\\u00D0\\u00B2\\u00D0\\u00B5\\u00D1\\u0082\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B2\\u00D0\\u00B8\\u00D0\\u00B8\\u00D0\\u00BF\\u00D1\\u0080\\u00D0\\u00BE\\u00D0\\u00B8\\u00D0\\u00B7\\u00D0\\u00B2\\u00D0\\u00BE\\u00D0\\u00B4\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B2\\u00D0\\u00B0\\u00D0\\u00B1\\u00D0\\u00B5\\u00D0\\u00B7\\u00D0\\u00BE\\u00D0\\u00BF\\u00D0\\u00B0\\u00D1\\u0081\\u00D0\\u00BD\\u00D0\\u00BE\\u00D1\\u0081\\u00D1\\u0082\\u00D0\\u00B8\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u0097\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0089\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B9\\u00E0\\u00A5\\u008B\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u00A8\\u00E0\\u00A5\\u0087\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00A7\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00AD\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AB\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u0082\\u00E0\\u00A4\\u0097\\u00E0\\u00A4\\u00B8\\u00E0\\u00A5\\u0081\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B7\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u0089\\u00E0\\u00A4\\u00AA\\u00E0\\u00A5\\u0080\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0087\\u00E0\\u00A4\\u009F\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u009C\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u009E\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00AA\\u00E0\\u00A4\\u00A8\\u00E0\\u00A4\\u0095\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u00B0\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00B5\\u00E0\\u00A4\\u00BE\\u00E0\\u00A4\\u0088\\u00E0\\u00A4\\u00B8\\u00E0\\u00A4\\u0095\\u00E0\\u00A5\\u008D\\u00E0\\u00A4\\u00B0\\u00E0\\u00A4\\u00BF\\u00E0\\u00A4\\u00AF\\u00E0\\u00A4\\u00A4\\u00E0\\u00A4\\u00BE\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate class DataHolder\r\n\t\t{\r\n\t\t\tinternal static readonly byte[] Data;\r\n\r\n\t\t\tstatic DataHolder()\r\n\t\t\t{\r\n\t\t\t\tData = new byte[122784];\r\n\t\t\t\tstring[] chunks = new string[] { Org.Brotli.Dec.Dictionary.DataHolder0.GetData(), Org.Brotli.Dec.Dictionary.DataHolder1.GetData(), Org.Brotli.Dec.Dictionary.DataHolder2.GetData() };\r\n\t\t\t\tint sum = 0;\r\n\t\t\t\tforeach (string chunk in chunks)\r\n\t\t\t\t{\r\n\t\t\t\t\tsum += chunk.Length;\r\n\t\t\t\t}\r\n\t\t\t\tif (sum != Data.Length)\r\n\t\t\t\t{\r\n\t\t\t\t\tthrow new System.Exception(\"Corrupted brotli dictionary\");\r\n\t\t\t\t}\r\n\t\t\t\tsum = 0;\r\n\t\t\t\tforeach (string chunk in chunks)\r\n\t\t\t\t{\r\n\t\t\t\t\tfor (int j = 0; j < chunk.Length; ++j)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tData[sum++] = unchecked((byte)chunk[j]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tinternal static byte[] GetData()\r\n\t\t{\r\n\t\t\treturn Org.Brotli.Dec.Dictionary.DataHolder.Data;\r\n\t\t}\r\n\r\n\t\tinternal static readonly int[] OffsetsByLength = new int[] { 0, 0, 0, 0, 0, 4096, 9216, 21504, 35840, 44032, 53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536, 115968, 118528, 119872, 121280, 122016 };\r\n\r\n\t\tinternal static readonly int[] SizeBitsByLength = new int[] { 0, 0, 0, 0, 10, 10, 11, 11, 10, 10, 10, 10, 10, 9, 9, 8, 7, 7, 8, 7, 7, 6, 6, 5, 5 };\r\n\r\n\t\tinternal const int MinWordLength = 4;\r\n\r\n\t\tinternal const int MaxWordLength = 24;\r\n\r\n\t\tinternal const int MaxTransformedWordLength = 5 + MaxWordLength + 8;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/org/brotli/dec/DictionaryTest.cs",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\t/// <summary>\r\n\t/// Tests for\r\n\t/// <see cref=\"Dictionary\"/>\r\n\t/// .\r\n\t/// </summary>\r\n\tpublic class DictionaryTest\r\n\t{\r\n\t\tprivate static long Crc64(byte[] data)\r\n\t\t{\r\n\t\t\tlong crc = -1;\r\n\t\t\tfor (int i = 0; i < data.Length; ++i)\r\n\t\t\t{\r\n\t\t\t\tlong c = (crc ^ (long)(data[i] & unchecked((int)(0xFF)))) & unchecked((int)(0xFF));\r\n\t\t\t\tfor (int k = 0; k < 8; k++)\r\n\t\t\t\t{\r\n\t\t\t\t\tc = ((long)(((ulong)c) >> 1)) ^ (-(c & 1L) & -3932672073523589310L);\r\n\t\t\t\t}\r\n\t\t\t\tcrc = c ^ ((long)(((ulong)crc) >> 8));\r\n\t\t\t}\r\n\t\t\treturn ~crc;\r\n\t\t}\r\n\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestGetData()\r\n\t\t{\r\n\t\t\tNUnit.Framework.Assert.AreEqual(37084801881332636L, Crc64(Org.Brotli.Dec.Dictionary.GetData()));\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/org/brotli/dec/Huffman.cs",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\t/// <summary>Utilities for building Huffman decoding tables.</summary>\r\n\tinternal sealed class Huffman\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Maximum possible Huffman table size for an alphabet size of 704, max code length 15 and root\r\n\t\t/// table bits 8.\r\n\t\t/// </summary>\r\n\t\tinternal const int HuffmanMaxTableSize = 1080;\r\n\r\n\t\tprivate const int MaxLength = 15;\r\n\r\n\t\t/// <summary>Returns reverse(reverse(key, len) + 1, len).</summary>\r\n\t\t/// <remarks>\r\n\t\t/// Returns reverse(reverse(key, len) + 1, len).\r\n\t\t/// <p> reverse(key, len) is the bit-wise reversal of the len least significant bits of key.\r\n\t\t/// </remarks>\r\n\t\tprivate static int GetNextKey(int key, int len)\r\n\t\t{\r\n\t\t\tint step = 1 << (len - 1);\r\n\t\t\twhile ((key & step) != 0)\r\n\t\t\t{\r\n\t\t\t\tstep >>= 1;\r\n\t\t\t}\r\n\t\t\treturn (key & (step - 1)) + step;\r\n\t\t}\r\n\r\n\t\t/// <summary>\r\n\t\t/// Stores\r\n\t\t/// <paramref name=\"item\"/>\r\n\t\t/// in\r\n\t\t/// <c>table[0], table[step], table[2 * step] .., table[end]</c>\r\n\t\t/// .\r\n\t\t/// <p> Assumes that end is an integer multiple of step.\r\n\t\t/// </summary>\r\n\t\tprivate static void ReplicateValue(int[] table, int offset, int step, int end, int item)\r\n\t\t{\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\tend -= step;\r\n\t\t\t\ttable[offset + end] = item;\r\n\t\t\t}\r\n\t\t\twhile (end > 0);\r\n\t\t}\r\n\r\n\t\t/// <param name=\"count\">histogram of bit lengths for the remaining symbols,</param>\r\n\t\t/// <param name=\"len\">code length of the next processed symbol.</param>\r\n\t\t/// <returns>table width of the next 2nd level table.</returns>\r\n\t\tprivate static int NextTableBitSize(int[] count, int len, int rootBits)\r\n\t\t{\r\n\t\t\tint left = 1 << (len - rootBits);\r\n\t\t\twhile (len < MaxLength)\r\n\t\t\t{\r\n\t\t\t\tleft -= count[len];\r\n\t\t\t\tif (left <= 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tlen++;\r\n\t\t\t\tleft <<= 1;\r\n\t\t\t}\r\n\t\t\treturn len - rootBits;\r\n\t\t}\r\n\r\n\t\t/// <summary>Builds Huffman lookup table assuming code lengths are in symbol order.</summary>\r\n\t\tinternal static void BuildHuffmanTable(int[] rootTable, int tableOffset, int rootBits, int[] codeLengths, int codeLengthsSize)\r\n\t\t{\r\n\t\t\tint key;\r\n\t\t\t// Reversed prefix code.\r\n\t\t\tint[] sorted = new int[codeLengthsSize];\r\n\t\t\t// Symbols sorted by code length.\r\n\t\t\t// TODO: fill with zeroes?\r\n\t\t\tint[] count = new int[MaxLength + 1];\r\n\t\t\t// Number of codes of each length.\r\n\t\t\tint[] offset = new int[MaxLength + 1];\r\n\t\t\t// Offsets in sorted table for each length.\r\n\t\t\tint symbol;\r\n\t\t\t// Build histogram of code lengths.\r\n\t\t\tfor (symbol = 0; symbol < codeLengthsSize; symbol++)\r\n\t\t\t{\r\n\t\t\t\tcount[codeLengths[symbol]]++;\r\n\t\t\t}\r\n\t\t\t// Generate offsets into sorted symbol table by code length.\r\n\t\t\toffset[1] = 0;\r\n\t\t\tfor (int len = 1; len < MaxLength; len++)\r\n\t\t\t{\r\n\t\t\t\toffset[len + 1] = offset[len] + count[len];\r\n\t\t\t}\r\n\t\t\t// Sort symbols by length, by symbol order within each length.\r\n\t\t\tfor (symbol = 0; symbol < codeLengthsSize; symbol++)\r\n\t\t\t{\r\n\t\t\t\tif (codeLengths[symbol] != 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tsorted[offset[codeLengths[symbol]]++] = symbol;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tint tableBits = rootBits;\r\n\t\t\tint tableSize = 1 << tableBits;\r\n\t\t\tint totalSize = tableSize;\r\n\t\t\t// Special case code with only one value.\r\n\t\t\tif (offset[MaxLength] == 1)\r\n\t\t\t{\r\n\t\t\t\tfor (key = 0; key < totalSize; key++)\r\n\t\t\t\t{\r\n\t\t\t\t\trootTable[tableOffset + key] = sorted[0];\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t// Fill in root table.\r\n\t\t\tkey = 0;\r\n\t\t\tsymbol = 0;\r\n\t\t\tfor (int len = 1, step = 2; len <= rootBits; len++, step <<= 1)\r\n\t\t\t{\r\n\t\t\t\tfor (; count[len] > 0; count[len]--)\r\n\t\t\t\t{\r\n\t\t\t\t\tReplicateValue(rootTable, tableOffset + key, step, tableSize, len << 16 | sorted[symbol++]);\r\n\t\t\t\t\tkey = GetNextKey(key, len);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// Fill in 2nd level tables and add pointers to root table.\r\n\t\t\tint mask = totalSize - 1;\r\n\t\t\tint low = -1;\r\n\t\t\tint currentOffset = tableOffset;\r\n\t\t\tfor (int len = rootBits + 1, step = 2; len <= MaxLength; len++, step <<= 1)\r\n\t\t\t{\r\n\t\t\t\tfor (; count[len] > 0; count[len]--)\r\n\t\t\t\t{\r\n\t\t\t\t\tif ((key & mask) != low)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcurrentOffset += tableSize;\r\n\t\t\t\t\t\ttableBits = NextTableBitSize(count, len, rootBits);\r\n\t\t\t\t\t\ttableSize = 1 << tableBits;\r\n\t\t\t\t\t\ttotalSize += tableSize;\r\n\t\t\t\t\t\tlow = key & mask;\r\n\t\t\t\t\t\trootTable[tableOffset + low] = (tableBits + rootBits) << 16 | (currentOffset - tableOffset - low);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tReplicateValue(rootTable, currentOffset + (key >> rootBits), step, tableSize, (len - rootBits) << 16 | sorted[symbol++]);\r\n\t\t\t\t\tkey = GetNextKey(key, len);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/org/brotli/dec/HuffmanTreeGroup.cs",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\t/// <summary>Contains a collection of huffman trees with the same alphabet size.</summary>\r\n\tinternal sealed class HuffmanTreeGroup\r\n\t{\r\n\t\t/// <summary>The maximal alphabet size in this group.</summary>\r\n\t\tprivate int alphabetSize;\r\n\r\n\t\t/// <summary>Storage for Huffman lookup tables.</summary>\r\n\t\tinternal int[] codes;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Offsets of distinct lookup tables in\r\n\t\t/// <see cref=\"codes\"/>\r\n\t\t/// storage.\r\n\t\t/// </summary>\r\n\t\tinternal int[] trees;\r\n\r\n\t\t/// <summary>Initializes the Huffman tree group.</summary>\r\n\t\t/// <param name=\"group\">POJO to be initialised</param>\r\n\t\t/// <param name=\"alphabetSize\">the maximal alphabet size in this group</param>\r\n\t\t/// <param name=\"n\">number of Huffman codes</param>\r\n\t\tinternal static void Init(Org.Brotli.Dec.HuffmanTreeGroup group, int alphabetSize, int n)\r\n\t\t{\r\n\t\t\tgroup.alphabetSize = alphabetSize;\r\n\t\t\tgroup.codes = new int[n * Org.Brotli.Dec.Huffman.HuffmanMaxTableSize];\r\n\t\t\tgroup.trees = new int[n];\r\n\t\t}\r\n\r\n\t\t/// <summary>Decodes Huffman trees from input stream and constructs lookup tables.</summary>\r\n\t\t/// <param name=\"group\">target POJO</param>\r\n\t\t/// <param name=\"br\">data source</param>\r\n\t\tinternal static void Decode(Org.Brotli.Dec.HuffmanTreeGroup group, Org.Brotli.Dec.BitReader br)\r\n\t\t{\r\n\t\t\tint next = 0;\r\n\t\t\tint n = group.trees.Length;\r\n\t\t\tfor (int i = 0; i < n; i++)\r\n\t\t\t{\r\n\t\t\t\tgroup.trees[i] = next;\r\n\t\t\t\tOrg.Brotli.Dec.Decode.ReadHuffmanCode(group.alphabetSize, group.codes, next, br);\r\n\t\t\t\tnext += Org.Brotli.Dec.Huffman.HuffmanMaxTableSize;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/org/brotli/dec/IntReader.cs",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\t/// <summary>Byte-to-int conversion magic.</summary>\r\n\tinternal sealed class IntReader\r\n\t{\r\n\t\tprivate byte[] byteBuffer;\r\n\r\n\t\tprivate int[] intBuffer;\r\n\r\n\t\tinternal static void Init(Org.Brotli.Dec.IntReader ir, byte[] byteBuffer, int[] intBuffer)\r\n\t\t{\r\n\t\t\tir.byteBuffer = byteBuffer;\r\n\t\t\tir.intBuffer = intBuffer;\r\n\t\t}\r\n\r\n\t\t/// <summary>Translates bytes to ints.</summary>\r\n\t\t/// <remarks>\r\n\t\t/// Translates bytes to ints.\r\n\t\t/// NB: intLen == 4 * byteSize!\r\n\t\t/// NB: intLen should be less or equal to intBuffer length.\r\n\t\t/// </remarks>\r\n\t\tinternal static void Convert(Org.Brotli.Dec.IntReader ir, int intLen)\r\n\t\t{\r\n\t\t\tfor (int i = 0; i < intLen; ++i)\r\n\t\t\t{\r\n\t\t\t\tir.intBuffer[i] = ((ir.byteBuffer[i * 4] & unchecked((int)(0xFF)))) | ((ir.byteBuffer[(i * 4) + 1] & unchecked((int)(0xFF))) << 8) | ((ir.byteBuffer[(i * 4) + 2] & unchecked((int)(0xFF))) << 16) | ((ir.byteBuffer[(i * 4) + 3] & unchecked((int\r\n\t\t\t\t\t)(0xFF))) << 24);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/org/brotli/dec/Prefix.cs",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\t/// <summary>Lookup tables to map prefix codes to value ranges.</summary>\r\n\t/// <remarks>\r\n\t/// Lookup tables to map prefix codes to value ranges.\r\n\t/// <p> This is used during decoding of the block lengths, literal insertion lengths and copy\r\n\t/// lengths.\r\n\t/// <p> Range represents values: [offset, offset + 2 ^ n_bits)\r\n\t/// </remarks>\r\n\tinternal sealed class Prefix\r\n\t{\r\n\t\tinternal static readonly int[] BlockLengthOffset = new int[] { 1, 5, 9, 13, 17, 25, 33, 41, 49, 65, 81, 97, 113, 145, 177, 209, 241, 305, 369, 497, 753, 1265, 2289, 4337, 8433, 16625 };\r\n\r\n\t\tinternal static readonly int[] BlockLengthNBits = new int[] { 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 24 };\r\n\r\n\t\tinternal static readonly int[] InsertLengthOffset = new int[] { 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50, 66, 98, 130, 194, 322, 578, 1090, 2114, 6210, 22594 };\r\n\r\n\t\tinternal static readonly int[] InsertLengthNBits = new int[] { 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 12, 14, 24 };\r\n\r\n\t\tinternal static readonly int[] CopyLengthOffset = new int[] { 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 18, 22, 30, 38, 54, 70, 102, 134, 198, 326, 582, 1094, 2118 };\r\n\r\n\t\tinternal static readonly int[] CopyLengthNBits = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 24 };\r\n\r\n\t\tinternal static readonly int[] InsertRangeLut = new int[] { 0, 0, 8, 8, 0, 16, 8, 16, 16 };\r\n\r\n\t\tinternal static readonly int[] CopyRangeLut = new int[] { 0, 8, 0, 8, 16, 0, 16, 8, 16 };\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/org/brotli/dec/RunningState.cs",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\t/// <summary>Enumeration of decoding state-machine.</summary>\r\n\tinternal sealed class RunningState\r\n\t{\r\n\t\tinternal const int Uninitialized = 0;\r\n\r\n\t\tinternal const int BlockStart = 1;\r\n\r\n\t\tinternal const int CompressedBlockStart = 2;\r\n\r\n\t\tinternal const int MainLoop = 3;\r\n\r\n\t\tinternal const int ReadMetadata = 4;\r\n\r\n\t\tinternal const int CopyUncompressed = 5;\r\n\r\n\t\tinternal const int InsertLoop = 6;\r\n\r\n\t\tinternal const int CopyLoop = 7;\r\n\r\n\t\tinternal const int CopyWrapBuffer = 8;\r\n\r\n\t\tinternal const int Transform = 9;\r\n\r\n\t\tinternal const int Finished = 10;\r\n\r\n\t\tinternal const int Closed = 11;\r\n\r\n\t\tinternal const int Write = 12;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/org/brotli/dec/State.cs",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\tinternal sealed class State\r\n\t{\r\n\t\tinternal int runningState = Org.Brotli.Dec.RunningState.Uninitialized;\r\n\r\n\t\tinternal int nextRunningState;\r\n\r\n\t\tinternal readonly Org.Brotli.Dec.BitReader br = new Org.Brotli.Dec.BitReader();\r\n\r\n\t\tinternal byte[] ringBuffer;\r\n\r\n\t\tinternal readonly int[] blockTypeTrees = new int[3 * Org.Brotli.Dec.Huffman.HuffmanMaxTableSize];\r\n\r\n\t\tinternal readonly int[] blockLenTrees = new int[3 * Org.Brotli.Dec.Huffman.HuffmanMaxTableSize];\r\n\r\n\t\tinternal int metaBlockLength;\r\n\r\n\t\tinternal bool inputEnd;\r\n\r\n\t\tinternal bool isUncompressed;\r\n\r\n\t\tinternal bool isMetadata;\r\n\r\n\t\tinternal readonly Org.Brotli.Dec.HuffmanTreeGroup hGroup0 = new Org.Brotli.Dec.HuffmanTreeGroup();\r\n\r\n\t\tinternal readonly Org.Brotli.Dec.HuffmanTreeGroup hGroup1 = new Org.Brotli.Dec.HuffmanTreeGroup();\r\n\r\n\t\tinternal readonly Org.Brotli.Dec.HuffmanTreeGroup hGroup2 = new Org.Brotli.Dec.HuffmanTreeGroup();\r\n\r\n\t\tinternal readonly int[] blockLength = new int[3];\r\n\r\n\t\tinternal readonly int[] numBlockTypes = new int[3];\r\n\r\n\t\tinternal readonly int[] blockTypeRb = new int[6];\r\n\r\n\t\tinternal readonly int[] distRb = new int[] { 16, 15, 11, 4 };\r\n\r\n\t\tinternal int pos = 0;\r\n\r\n\t\tinternal int maxDistance = 0;\r\n\r\n\t\tinternal int distRbIdx = 0;\r\n\r\n\t\tinternal bool trivialLiteralContext = false;\r\n\r\n\t\tinternal int literalTreeIndex = 0;\r\n\r\n\t\tinternal int literalTree;\r\n\r\n\t\tinternal int j;\r\n\r\n\t\tinternal int insertLength;\r\n\r\n\t\tinternal byte[] contextModes;\r\n\r\n\t\tinternal byte[] contextMap;\r\n\r\n\t\tinternal int contextMapSlice;\r\n\r\n\t\tinternal int distContextMapSlice;\r\n\r\n\t\tinternal int contextLookupOffset1;\r\n\r\n\t\tinternal int contextLookupOffset2;\r\n\r\n\t\tinternal int treeCommandOffset;\r\n\r\n\t\tinternal int distanceCode;\r\n\r\n\t\tinternal byte[] distContextMap;\r\n\r\n\t\tinternal int numDirectDistanceCodes;\r\n\r\n\t\tinternal int distancePostfixMask;\r\n\r\n\t\tinternal int distancePostfixBits;\r\n\r\n\t\tinternal int distance;\r\n\r\n\t\tinternal int copyLength;\r\n\r\n\t\tinternal int copyDst;\r\n\r\n\t\tinternal int maxBackwardDistance;\r\n\r\n\t\tinternal int maxRingBufferSize;\r\n\r\n\t\tinternal int ringBufferSize = 0;\r\n\r\n\t\tinternal long expectedTotalSize = 0;\r\n\r\n\t\tinternal byte[] customDictionary = new byte[0];\r\n\r\n\t\tinternal int bytesToIgnore = 0;\r\n\r\n\t\tinternal int outputOffset;\r\n\r\n\t\tinternal int outputLength;\r\n\r\n\t\tinternal int outputUsed;\r\n\r\n\t\tinternal int bytesWritten;\r\n\r\n\t\tinternal int bytesToWrite;\r\n\r\n\t\tinternal byte[] output;\r\n\r\n\t\t// Current meta-block header information.\r\n\t\t// TODO: Update to current spec.\r\n\t\tprivate static int DecodeWindowBits(Org.Brotli.Dec.BitReader br)\r\n\t\t{\r\n\t\t\tif (Org.Brotli.Dec.BitReader.ReadBits(br, 1) == 0)\r\n\t\t\t{\r\n\t\t\t\treturn 16;\r\n\t\t\t}\r\n\t\t\tint n = Org.Brotli.Dec.BitReader.ReadBits(br, 3);\r\n\t\t\tif (n != 0)\r\n\t\t\t{\r\n\t\t\t\treturn 17 + n;\r\n\t\t\t}\r\n\t\t\tn = Org.Brotli.Dec.BitReader.ReadBits(br, 3);\r\n\t\t\tif (n != 0)\r\n\t\t\t{\r\n\t\t\t\treturn 8 + n;\r\n\t\t\t}\r\n\t\t\treturn 17;\r\n\t\t}\r\n\r\n\t\t/// <summary>Associate input with decoder state.</summary>\r\n\t\t/// <param name=\"state\">uninitialized state without associated input</param>\r\n\t\t/// <param name=\"input\">compressed data source</param>\r\n\t\tinternal static void SetInput(Org.Brotli.Dec.State state, System.IO.Stream input)\r\n\t\t{\r\n\t\t\tif (state.runningState != Org.Brotli.Dec.RunningState.Uninitialized)\r\n\t\t\t{\r\n\t\t\t\tthrow new System.InvalidOperationException(\"State MUST be uninitialized\");\r\n\t\t\t}\r\n\t\t\tOrg.Brotli.Dec.BitReader.Init(state.br, input);\r\n\t\t\tint windowBits = DecodeWindowBits(state.br);\r\n\t\t\tif (windowBits == 9)\r\n\t\t\t{\r\n\t\t\t\t/* Reserved case for future expansion. */\r\n\t\t\t\tthrow new Org.Brotli.Dec.BrotliRuntimeException(\"Invalid 'windowBits' code\");\r\n\t\t\t}\r\n\t\t\tstate.maxRingBufferSize = 1 << windowBits;\r\n\t\t\tstate.maxBackwardDistance = state.maxRingBufferSize - 16;\r\n\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.BlockStart;\r\n\t\t}\r\n\r\n\t\t/// <exception cref=\"System.IO.IOException\"/>\r\n\t\tinternal static void Close(Org.Brotli.Dec.State state)\r\n\t\t{\r\n\t\t\tif (state.runningState == Org.Brotli.Dec.RunningState.Uninitialized)\r\n\t\t\t{\r\n\t\t\t\tthrow new System.InvalidOperationException(\"State MUST be initialized\");\r\n\t\t\t}\r\n\t\t\tif (state.runningState == Org.Brotli.Dec.RunningState.Closed)\r\n\t\t\t{\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tstate.runningState = Org.Brotli.Dec.RunningState.Closed;\r\n\t\t\tOrg.Brotli.Dec.BitReader.Close(state.br);\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/org/brotli/dec/SynthTest.cs",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\t/// <summary>\r\n\t/// Tests for\r\n\t/// <see cref=\"Decode\"/>\r\n\t/// .\r\n\t/// </summary>\r\n\tpublic class SynthTest\r\n\t{\r\n\t\t/// <exception cref=\"System.IO.IOException\"/>\r\n\t\tprivate byte[] Decompress(byte[] data)\r\n\t\t{\r\n\t\t\tbyte[] buffer = new byte[65536];\r\n\t\t\tSystem.IO.MemoryStream input = new System.IO.MemoryStream(data);\r\n\t\t\tSystem.IO.MemoryStream output = new System.IO.MemoryStream();\r\n\t\t\tOrg.Brotli.Dec.BrotliInputStream brotliInput = new Org.Brotli.Dec.BrotliInputStream(input);\r\n\t\t\twhile (true)\r\n\t\t\t{\r\n\t\t\t\tint len = brotliInput.Read(buffer, 0, buffer.Length);\r\n\t\t\t\tif (len <= 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\toutput.Write(buffer, 0, len);\r\n\t\t\t}\r\n\t\t\tbrotliInput.Close();\r\n\t\t\treturn output.ToArray();\r\n\t\t}\r\n\r\n\t\tprivate void CheckSynth(byte[] compressed, bool expectSuccess, string expectedOutput)\r\n\t\t{\r\n\t\t\tbyte[] expected = Org.Brotli.Dec.Transform.ReadUniBytes(expectedOutput);\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tbyte[] actual = Decompress(compressed);\r\n\t\t\t\tif (!expectSuccess)\r\n\t\t\t\t{\r\n\t\t\t\t\tNUnit.Framework.Assert.Fail(\"expected to fail decoding, but succeeded\");\r\n\t\t\t\t}\r\n\t\t\t\tNUnit.Framework.Assert.AreEqual(expected, actual);\r\n\t\t\t}\r\n\t\t\tcatch (System.IO.IOException)\r\n\t\t\t{\r\n\t\t\t\tif (expectSuccess)\r\n\t\t\t\t{\r\n\t\t\t\t\tNUnit.Framework.Assert.Fail(\"expected to succeed decoding, but failed\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/* GENERATED CODE START */\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestBaseDictWord()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0xe3))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x0d))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x07))), unchecked((byte)unchecked((int)(0x5b))), unchecked((byte)unchecked((int)(0x26))), unchecked((byte)unchecked((int)(0x31))), unchecked((byte)unchecked((int)(0x40))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x41))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x02))) };\r\n\t\t\tCheckSynth(compressed, true, string.Empty + \"time\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t// The stream consists of a base dictionary word.\r\n\t\tmain_header\r\n\t\tmetablock_header_easy: 4, 1\r\n\t\tcommand_inscopy_easy: 0, 4\r\n\t\tcommand_dist_easy: 1\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestBaseDictWordFinishBlockOnRingbufferWrap()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x1f))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0xe3))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x0d))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x07))), unchecked((byte)unchecked((int)(0x5b))), unchecked((byte)unchecked((int)(0x26))), unchecked((byte)unchecked((int)(0x31))), unchecked((byte)unchecked((int)(0x40))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0x9b))), unchecked((byte)unchecked((int)(0x58))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x32))), unchecked((byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0x34))), unchecked((byte)unchecked((int)(0xd4))), unchecked((byte)unchecked((int)(0x00))) };\r\n\t\t\tCheckSynth(compressed, true, string.Empty + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaatime\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\tmain_header\r\n\t\tmetablock_header_easy: 32, 1 // 32 = minimal ringbuffer size\r\n\t\tcommand_easy: 4, \"aaaaaaaaaaaaaaaaaaaaaaaaaaaa\", 29\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestBaseDictWordTooLong()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0xe3))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x0d))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x07))), unchecked((byte)unchecked((int)(0x5b))), unchecked((byte)unchecked((int)(0x26))), unchecked((byte)unchecked((int)(0x31))), unchecked((byte)unchecked((int)(0x40))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x41))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x02))) };\r\n\t\t\tCheckSynth(compressed, false, string.Empty);\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t// Has an unmodified dictionary word that goes over the end of the\r\n\t\t// meta-block. Same as BaseDictWord, but with a shorter meta-block length.\r\n\t\tmain_header\r\n\t\tmetablock_header_easy: 1, 1\r\n\t\tcommand_inscopy_easy: 0, 4\r\n\t\tcommand_dist_easy: 1\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestBlockCountMessage()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x0b))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x01))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x8c))), unchecked((byte)unchecked((int)(0xc1))), unchecked((byte)unchecked((int)(0xc5))), unchecked((byte)unchecked((int)(0x0d))), unchecked((byte)unchecked((int)(0x08))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x22))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0xe1))), unchecked((byte)unchecked((int)(0xfc))), unchecked((byte)unchecked((int)(0xfd))), unchecked((byte)unchecked((int)(0x22))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x2c))), unchecked((byte)unchecked((int)(0xc4))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0xd8))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x32))), unchecked((byte)unchecked((int)(0x89))), unchecked((byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x77))), unchecked((byte)unchecked((int)(0xda))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x10))), unchecked((byte)unchecked((int)(0x42))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))) };\r\n\t\t\tCheckSynth(compressed, true, string.Empty + \"aabbaaaaabab\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t// Same as BlockSwitchMessage but also uses 0-bit block-type commands.\r\n\t\tmain_header\r\n\t\tmetablock_header_begin: 1, 0, 12, 0\r\n\t\t// two literal block types\r\n\t\tvlq_blocktypes: 2\r\n\t\thuffman_simple: 1,1,4, 1  // literal blocktype prefix code\r\n\t\thuffman_fixed: 26  // literal blockcount prefix code\r\n\t\tblockcount_easy: 2  // 2 a's\r\n\t\t// one ins/copy and dist block type\r\n\t\tvlq_blocktypes: 1\r\n\t\tvlq_blocktypes: 1\r\n\t\tndirect: 0 0\r\n\t\t// two MSB6 literal context modes\r\n\t\tbits: \"00\", \"00\"\r\n\t\t// two literal prefix codes\r\n\t\tvlq_blocktypes: 2\r\n\t\t// literal context map\r\n\t\tvlq_rlemax: 5\r\n\t\thuffman_simple: 0,3,7, 5,0,6  // context map rle huffman code\r\n\t\t// context map rle: repeat 0 64 times, 1+5 64 times\r\n\t\tbits: \"01\", \"0\", \"11111\", \"11\", \"0\", \"11111\"\r\n\t\tbit: 1  // MTF enabled\r\n\t\t// one distance prefix code\r\n\t\tvlq_blocktypes: 1\r\n\t\thuffman_simple: 0,1,256, 97  // only a's\r\n\t\thuffman_simple: 0,1,256, 98  // only b's\r\n\t\thuffman_fixed: 704\r\n\t\thuffman_fixed: 64\r\n\t\t// now comes the data\r\n\t\tcommand_inscopy_easy: 12, 0\r\n\t\tblockcount_easy: 2  // switch to other block type; 2 b's\r\n\t\tblockcount_easy: 5  // switch to other block type; 5 a's\r\n\t\tblockcount_easy: 1  // switch to other block type; 1 b\r\n\t\tblockcount_easy: 1  // switch to other block type; 1 a\r\n\t\tblockcount_easy: 1  // switch to other block type; 1 b\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestBlockSwitchMessage()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x0b))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xd1))), unchecked((byte)unchecked((int)(0xe1))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0xc6))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0xe2))), unchecked((byte)unchecked((int)(0x06))), unchecked((byte)unchecked((int)(0x04))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x91))), unchecked((byte)unchecked((int)(0xb2))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xfe))), unchecked((byte)unchecked((int)(0x7e))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x16))), unchecked((byte)unchecked((int)(0x62))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x1c))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x6c))), unchecked((byte)unchecked((int)(0x99))), unchecked((byte)unchecked((int)(0xc4))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x09))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x3b))), unchecked((byte)unchecked((int)(0x6d))), unchecked((byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x08))), unchecked((byte)unchecked((int)(0x82))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))) };\r\n\t\t\tCheckSynth(compressed, true, string.Empty + \"aabbaaaaabab\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t// Uses blocks with 1-symbol huffman codes that take 0 bits, so that it\r\n\t\t// is the blockswitch commands that encode the message rather than actual\r\n\t\t// literals.\r\n\t\tmain_header\r\n\t\tmetablock_header_begin: 1, 0, 12, 0\r\n\t\t// two literal block types\r\n\t\tvlq_blocktypes: 2\r\n\t\thuffman_simple: 1,4,4, 1,0,2,3  // literal blocktype prefix code\r\n\t\thuffman_fixed: 26  // literal blockcount prefix code\r\n\t\tblockcount_easy: 2  // 2 a's\r\n\t\t// one ins/copy and dist block type\r\n\t\tvlq_blocktypes: 1\r\n\t\tvlq_blocktypes: 1\r\n\t\tndirect: 0 0\r\n\t\t// two MSB6 literal context modes\r\n\t\tbits: \"00\", \"00\"\r\n\t\t// two literal prefix codes\r\n\t\tvlq_blocktypes: 2\r\n\t\t// literal context map\r\n\t\tvlq_rlemax: 5\r\n\t\thuffman_simple: 0,3,7, 5,0,6  // context map rle huffman code\r\n\t\t// context map rle: repeat 0 64 times, 1+5 64 times\r\n\t\tbits: \"01\", \"0\", \"11111\", \"11\", \"0\", \"11111\"\r\n\t\tbit: 1  // MTF enabled\r\n\t\t// one distance prefix code\r\n\t\tvlq_blocktypes: 1\r\n\t\thuffman_simple: 0,1,256, 97  // only a's\r\n\t\thuffman_simple: 0,1,256, 98  // only b's\r\n\t\thuffman_fixed: 704\r\n\t\thuffman_fixed: 64\r\n\t\t// now comes the data\r\n\t\tcommand_inscopy_easy: 12, 0\r\n\t\tbits: \"0\"; blockcount_easy: 2  // switch to other block type; 2 b's\r\n\t\tbits: \"0\"; blockcount_easy: 5  // switch to other block type; 5 a's\r\n\t\tbits: \"0\"; blockcount_easy: 1  // switch to other block type; 1 b\r\n\t\tbits: \"0\"; blockcount_easy: 1  // switch to other block type; 1 a\r\n\t\tbits: \"0\"; blockcount_easy: 1  // switch to other block type; 1 b\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestClClTreeDeficiency()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x43))), unchecked((byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0x05))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x88))), unchecked((byte)unchecked((int)(0x55))), unchecked((byte)unchecked((int)(0x90))), unchecked((byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xd8))), unchecked((byte)unchecked((int)(0x32))), unchecked((byte)unchecked((int)(0x89))), unchecked((byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x77))), unchecked((byte)unchecked((int)(0xda))), unchecked((byte)unchecked((int)(0x28))), unchecked((byte)unchecked((int)(0x40))), unchecked((byte)unchecked((int)(0x23))) };\r\n\t\t\tCheckSynth(compressed, false, string.Empty + \"aaab\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t// This test is a copy of TooManySymbolsRepeated, with changed clcl table.\r\n\t\tmain_header\r\n\t\tmetablock_header_begin: 1, 0, 4, 0\r\n\t\tmetablock_header_trivial_context\r\n\t\thskip: 0\r\n\t\tclcl_ordered: 0,3,0,0,0,0,0,0,3,3,0,0,0,0,0,0,1,0\r\n\t\tset_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"101\",\\\r\n\t\t\"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\r\n\t\tcl_rle: 8\r\n\t\tcl_rle_rep: 9, 96\r\n\t\tcl_rle: 1\r\n\t\tcl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size\r\n\t\thuffman_fixed: 704\r\n\t\thuffman_fixed: 64\r\n\t\tcommand_inscopy_easy: 4, 0\r\n\t\tcommand_literal_bits: 0, 0, 0, 101100010\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestClClTreeExcess()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0xc3))), unchecked((byte)unchecked((int)(0x7b))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x58))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x41))), unchecked((byte)unchecked((int)(0x06))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0x60))), unchecked((byte)unchecked((int)(0xcb))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x06))), unchecked((byte)unchecked((int)(0x48))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xdc))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x69))), unchecked((byte)unchecked((int)(0xa3))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x8d))), unchecked((byte)unchecked((int)(0x00))) };\r\n\t\t\tCheckSynth(compressed, false, string.Empty + \"aaab\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t// This test is a copy of ClClTreeDeficiency, with changed clcl table.\r\n\t\tmain_header\r\n\t\tmetablock_header_begin: 1, 0, 4, 0\r\n\t\tmetablock_header_trivial_context\r\n\t\thskip: 0\r\n\t\tclcl_ordered: 0,3,0,0,0,0,0,0,3,1,0,0,0,0,0,0,1,0\r\n\t\tset_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"1\",\\\r\n\t\t\"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\r\n\t\tcl_rle: 8\r\n\t\tcl_rle_rep: 9, 96\r\n\t\tcl_rle: 1\r\n\t\tcl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size\r\n\t\thuffman_fixed: 704\r\n\t\thuffman_fixed: 64\r\n\t\tcommand_inscopy_easy: 4, 0\r\n\t\tcommand_literal_bits: 0, 0, 0, 101100010\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestComplexHuffmanCodeTwoSymbols()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0xa2))), unchecked((byte)unchecked((int)(0x1a))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x0e))), unchecked((byte)unchecked((int)(0xb6))), unchecked((byte)unchecked((int)(0x4c))), unchecked((byte)unchecked((int)(0x62))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x04))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xc0))), unchecked((byte)unchecked((int)(0x9d))), unchecked((byte)unchecked((int)(0x36))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x04))) };\r\n\t\t\tCheckSynth(compressed, true, string.Empty + \"ab\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t// This tests a complex huffman code with only two symbols followed by a\r\n\t\t// tiny amount of content.\r\n\t\tmain_header\r\n\t\tmetablock_header_begin: 1, 0, 2, 0\r\n\t\tmetablock_header_trivial_context\r\n\t\t// begin of literal huffman tree. The tree has symbol length 1 for \"a\",\r\n\t\t// symbol length 1 for \"b\" and symbol length 0 for all others.\r\n\t\thskip: 0\r\n\t\tclcl_ordered: 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\r\n\t\tset_prefix_cl_rle: \"\", \"0\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\\\r\n\t\t\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"1\"\r\n\t\tcl_rle_rep_0: 97\r\n\t\tcl_rle: 1  // literal number 97, that is, the letter 'a'\r\n\t\tcl_rle: 1  // literal number 98, that is, the letter 'b'\r\n\t\t// end of literal huffman tree\r\n\t\thuffman_fixed: 704\r\n\t\thuffman_fixed: 64\r\n\t\tcommand_inscopy_easy: 2, 0\r\n\t\tcommand_literal_bits: 0, 1  // a followed by b\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestCompressedUncompressedShortCompressed()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x8b))), unchecked((byte)unchecked((int)(0xfe))), unchecked((byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0xe3))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x0d))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x07))), unchecked((byte)unchecked((int)(0x5b))), unchecked((byte)unchecked((int)(0x26))), unchecked((byte)unchecked((int)(0x31))), unchecked((byte)unchecked((int)(0x40))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0x9b))), unchecked((byte)unchecked((int)(0x66))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x6f))), unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x0a))), unchecked((byte)unchecked((int)(0x50))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x10))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x62))), unchecked((byte)unchecked((int)(0x62))), unchecked((byte)unchecked((int)(0x62))), unchecked((byte)unchecked((int)(0x62))), unchecked((byte)unchecked((int)(0x62))), unchecked((byte)unchecked((int)(0x62))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x31))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))) };\r\n\t\t\tCheckSynth(compressed, true, string.Empty + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\r\n\t\t\t\t + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\r\n\t\t\t\t + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\r\n\t\t\t\t + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaabbbbbbbbbb\"\r\n\t\t\t\t);\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\tmain_header: 22\r\n\t\tmetablock_header_easy: 1022, 0\r\n\t\tcommand_easy: 1021, \"a\", 1 // 1022 x \"a\"\r\n\t\tmetablock_uncompressed: \"bbbbbb\"\r\n\t\tmetablock_header_easy: 4, 1\r\n\t\tcommand_easy: 4, \"\", 1 // 6 + 4 = 10 x \"b\"\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestCompressedUncompressedShortCompressedSmallWindow()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x21))), unchecked((byte)unchecked((int)(0xf4))), unchecked((byte)unchecked((int)(0x0f))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x1c))), unchecked((byte)unchecked((int)(0xa7))), unchecked((byte)unchecked((int)(0x6d))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0xd8))), unchecked((byte)unchecked((int)(0x32))), unchecked((byte)unchecked((int)(0x89))), unchecked((byte)unchecked((int)(0x01))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x77))), unchecked((byte)unchecked((int)(0xda))), unchecked((byte)unchecked((int)(0x34))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x7b))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x50))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x80))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x62))), unchecked((byte)unchecked((int)(0x62))), unchecked((byte)unchecked((int)(0x62))), unchecked((byte)unchecked((int)(0x62))), unchecked((byte)unchecked((int)(0x62))), unchecked((byte)unchecked((int)(0x62))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x31))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))) };\r\n\t\t\tCheckSynth(compressed, true, string.Empty + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\r\n\t\t\t\t + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\r\n\t\t\t\t + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\r\n\t\t\t\t + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" + \"aaaaaaaaaaaaaabbbbbbbbbb\"\r\n\t\t\t\t);\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\tmain_header: 10\r\n\t\tmetablock_header_easy: 1022, 0\r\n\t\tcommand_easy: 1021, \"a\", 1 // 1022 x \"a\"\r\n\t\tmetablock_uncompressed: \"bbbbbb\"\r\n\t\tmetablock_header_easy: 4, 1\r\n\t\tcommand_easy: 4, \"\", 1 // 6 + 4 = 10 x \"b\"\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestCopyLengthTooLong()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0xe3))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x0d))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x07))), unchecked((byte)unchecked((int)(0x5b))), unchecked((byte)unchecked((int)(0x26))), unchecked((byte)unchecked((int)(0x31))), unchecked((byte)unchecked((int)(0x40))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x86))), unchecked((byte)unchecked((int)(0x02))) };\r\n\t\t\tCheckSynth(compressed, false, string.Empty);\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t// Has a copy length that goes over the end of the meta-block.\r\n\t\t// Same as OneCommand, but with a shorter meta-block length.\r\n\t\tmain_header\r\n\t\tmetablock_header_easy: 2, 1\r\n\t\tcommand_easy: 2, \"a\", 1\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestCustomHuffmanCode()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0xc3))), unchecked((byte)unchecked((int)(0x3d))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x58))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x82))), unchecked((byte)unchecked((int)(0x08))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xc0))), unchecked((byte)unchecked((int)(0xc1))), unchecked((byte)unchecked((int)(0x96))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x49))), unchecked((byte)unchecked((int)(0x0c))), unchecked((byte)unchecked((int)(0x90))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xb8))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xd3))), unchecked((byte)unchecked((int)(0x46))), unchecked((byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x1a))), unchecked((byte)unchecked((int)(0x01))) };\r\n\t\t\tCheckSynth(compressed, true, string.Empty + \"aaab\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t// This tests a small hand crafted huffman code followed by a tiny amount\r\n\t\t// of content. This tests if the bit reader detects the end correctly even\r\n\t\t// with tiny content after a larger huffman tree encoding.\r\n\t\tmain_header\r\n\t\tmetablock_header_begin: 1, 0, 4, 0\r\n\t\tmetablock_header_trivial_context\r\n\t\t// begin of literal huffman tree. The tree has symbol length 1 for \"a\",\r\n\t\t// symbol length 8 for null, symbol length 9 for all others. The length 1\r\n\t\t// for a is chosen on purpose here, the others must be like that to\r\n\t\t// fulfill the requirement that sum of 32>>length is 32768.\r\n\t\thskip: 0\r\n\t\tclcl_ordered: 0,3,0,0,0,0,0,0,3,2,0,0,0,0,0,0,1,0\r\n\t\tset_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"10\",\\\r\n\t\t\"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\r\n\t\tcl_rle: 8\r\n\t\tcl_rle_rep: 9, 96\r\n\t\tcl_rle: 1  // literal number 97, that is, the letter 'a'\r\n\t\tcl_rle_rep: 9, 158\r\n\t\t// end of literal huffman tree\r\n\t\thuffman_fixed: 704\r\n\t\thuffman_fixed: 64\r\n\t\tcommand_inscopy_easy: 4, 0\r\n\t\t// Here is how the code \"101100010\" for b is derived: remember that a has\r\n\t\t// symbol length 1, null has symbol length 8, the rest 9. So in the\r\n\t\t// canonical huffman code, the code for \"a\" is \"0\", for null is\r\n\t\t// \"10000000\". The next value has \"100000010\" (cfr. the rules of canonical\r\n\t\t// prefix code). Counting upwards +95 from there, the value \"@\" (ascii 96,\r\n\t\t// before \"a\") has \"101100001\", and so b, the next 9-bit symbol, has the\r\n\t\t// next binary value \"101100010\".\r\n\t\tcommand_literal_bits: 0, 0, 0, 101100010  // 3 a's followed by a b\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestEmpty()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x3b))) };\r\n\t\t\tCheckSynth(compressed, true, string.Empty);\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\tmain_header\r\n\t\tmetablock_lastempty\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestHelloWorld()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x0a))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0xe3))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x0d))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x07))), unchecked((byte)unchecked((int)(0x5b))), unchecked((byte)unchecked((int)(0x26))), unchecked((byte)unchecked((int)(0x31))), unchecked((byte)unchecked((int)(0x40))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0x9b))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x59))), unchecked((byte)unchecked((int)(0x98))), unchecked((byte)unchecked((int)(0xda))), unchecked((byte)unchecked((int)(0xd8))), unchecked((byte)unchecked((int)(0xd8))), unchecked((byte)unchecked((int)(0x13))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xb8))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x3b))), unchecked((byte)unchecked((int)(0xd9))), unchecked((byte)unchecked((int)(0x98))), unchecked((byte)unchecked((int)(0x00))) };\r\n\t\t\tCheckSynth(compressed, true, string.Empty + \"hello world\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\tmain_header\r\n\t\tmetablock_fixed: \"hello world\", 1\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestInsertTooLong()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0xe3))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x0d))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x07))), unchecked((byte)unchecked((int)(0x5b))), unchecked((byte)unchecked((int)(0x26))), unchecked((byte)unchecked((int)(0x31))), unchecked((byte)unchecked((int)(0x40))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x09))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x86))), unchecked((byte)unchecked((int)(0x46))) };\r\n\t\t\tCheckSynth(compressed, false, string.Empty);\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t// Has an insert length that goes over the end of the meta-block.\r\n\t\t// Same as OneInsert, but with a shorter meta-block length.\r\n\t\tmain_header\r\n\t\tmetablock_header_easy: 1, 1\r\n\t\tcommand_easy: 0, \"ab\"\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestInvalidNoLastMetablock()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x0b))), unchecked((byte)unchecked((int)(0x06))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0xe3))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x0d))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x07))), unchecked((byte)unchecked((int)(0x5b))), unchecked((byte)unchecked((int)(0x26))), unchecked((byte)unchecked((int)(0x31))), unchecked((byte)unchecked((int)(0x40))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0x9b))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x13))), unchecked((byte)unchecked((int)(0x59))), unchecked((byte)unchecked((int)(0x98))), unchecked((byte)unchecked((int)(0xda))), unchecked((byte)unchecked((int)(0xd8))), unchecked((byte)unchecked((int)(0xd8))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x13))), unchecked((byte)unchecked((int)(0xb8))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x3b))), unchecked((byte)unchecked((int)(0xd9))), unchecked((byte)unchecked((int)(0x98))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xe8))), unchecked((byte)unchecked((int)(0x00))) };\r\n\t\t\tCheckSynth(compressed, false, string.Empty + \"hello world\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\tmain_header\r\n\t\tmetablock_fixed: \\\"hello world\\\", 0\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestInvalidNoMetaBlocks()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x0b))) };\r\n\t\t\tCheckSynth(compressed, false, string.Empty);\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\tmain_header\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestInvalidTooFarDist()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0xa1))), unchecked((byte)unchecked((int)(0x48))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x1c))), unchecked((byte)unchecked((int)(0xa7))), unchecked((byte)unchecked((int)(0x6d))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0xd8))), unchecked((byte)unchecked((int)(0x32))), unchecked((byte)unchecked((int)(0x89))), unchecked((byte)unchecked((int)(0x01))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x77))), unchecked((byte)unchecked((int)(0xda))), unchecked((byte)unchecked((int)(0xe8))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0x62))), unchecked((byte)unchecked((int)(0x6f))), unchecked((byte)unchecked((int)(0x4f))), unchecked((byte)unchecked((int)(0x60))), unchecked((byte)unchecked((int)(0x66))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xe8))), unchecked((byte)unchecked((int)(0x44))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x0f))), unchecked((byte)unchecked((int)(0x09))), unchecked((byte)unchecked((int)(0x0d))) };\r\n\t\t\tCheckSynth(compressed, false, string.Empty);\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\tmain_header: 10\r\n\t\tmetablock_header_begin: 1, 0, 10, 0\r\n\t\tmetablock_header_trivial_context\r\n\t\thuffman_fixed: 256\r\n\t\thuffman_fixed: 704\r\n\t\thuffman_fixed: 64\r\n\t\tcommand_easy: 2, \"too far!\", 1000000  // distance too far for 10 wbits\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestInvalidTooLargeContextMap()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xd1))), unchecked((byte)unchecked((int)(0xe1))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0xc6))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0xe2))), unchecked((byte)unchecked((int)(0x06))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x91))), unchecked((byte)unchecked((int)(0xb2))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xfe))), unchecked((byte)unchecked((int)(0xfb))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x45))), unchecked((byte)unchecked((int)(0x58))), unchecked((byte)unchecked((int)(0x88))), unchecked((byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x01))) };\r\n\t\t\tCheckSynth(compressed, false, string.Empty + \"a\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t// Has a repeat code a context map that makes the size too big -> invalid.\r\n\t\tmain_header\r\n\t\tmetablock_header_begin: 1, 0, 1, 0\r\n\t\t// two literal block types\r\n\t\tvlq_blocktypes: 2\r\n\t\thuffman_simple: 1,4,4, 1,0,2,3  // literal blocktype prefix code\r\n\t\thuffman_fixed: 26  // literal blockcount prefix code\r\n\t\tblockcount_easy: 1\r\n\t\t// one ins/copy and dist block type\r\n\t\tvlq_blocktypes: 1\r\n\t\tvlq_blocktypes: 1\r\n\t\tndirect: 0 0\r\n\t\t// two MSB6 literal context modes\r\n\t\tbits: \"00\", \"00\"\r\n\t\t// two literal prefix codes\r\n\t\tvlq_blocktypes: 2\r\n\t\t// literal context map\r\n\t\tvlq_rlemax: 5\r\n\t\thuffman_simple: 0,3,7, 5,0,6  // context map rle huffman code\r\n\t\t// Too long context map rle: repeat 0 64 times, 1+5 65 times, that is 129\r\n\t\t// values which is 1 too much.\r\n\t\tbits: \"01\", \"0\", \"11111\", \"11\", \"11\", \"0\", \"11111\"\r\n\t\tbit: 1  // MTF enabled\r\n\t\t// one distance prefix code\r\n\t\tvlq_blocktypes: 1\r\n\t\thuffman_simple: 0,1,256, 97  // only a's\r\n\t\thuffman_simple: 0,1,256, 98  // only b's\r\n\t\thuffman_fixed: 704\r\n\t\thuffman_fixed: 64\r\n\t\t// now comes the data\r\n\t\tcommand_inscopy_easy: 1, 0\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestInvalidTransformType()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0xe3))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x0d))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x07))), unchecked((byte)unchecked((int)(0x5b))), unchecked((byte)unchecked((int)(0x26))), unchecked((byte)unchecked((int)(0x31))), unchecked((byte)unchecked((int)(0x40))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x41))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x2d))), unchecked((byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x19))) };\r\n\t\t\tCheckSynth(compressed, false, string.Empty);\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\tmain_header\r\n\t\tmetablock_header_easy: 4, 1\r\n\t\tcommand_inscopy_easy: 0, 4\r\n\t\tcommand_dist_easy: 123905 // = 121 << 10 + 1\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestInvalidWindowBits9()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x91))), unchecked((byte)unchecked((int)(0x10))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x1c))), unchecked((byte)unchecked((int)(0xa7))), unchecked((byte)unchecked((int)(0x6d))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0xd8))), unchecked((byte)unchecked((int)(0x32))), unchecked((byte)unchecked((int)(0x89))), unchecked((byte)unchecked((int)(0x01))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x77))), unchecked((byte)unchecked((int)(0xda))), unchecked((byte)unchecked((int)(0xc8))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x20))), unchecked((byte)unchecked((int)(0x32))), unchecked((byte)unchecked((int)(0xd4))), unchecked((byte)unchecked((int)(0x01))) };\r\n\t\t\tCheckSynth(compressed, false, string.Empty + \"a\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\tmain_header: 9\r\n\t\tmetablock_fixed: \\\"a\\\", 1\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestManyTinyMetablocks()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x0b))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x04))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x61))), unchecked((byte)unchecked((int)(0x34))) };\r\n\t\t\tCheckSynth(compressed, true, string.Empty + \"abababababababababababababababababababababababababababababababababababab\" + \"abababababababababababababababababababababababababababababababababababab\" + \"abababababababababababababababababababababababababababababababababababab\"\r\n\t\t\t\t + \"abababababababababababababababababababababababababababababababababababab\" + \"abababababababababababababababababababababababababababababababababababab\" + \"abababababababababababababababababababababababababababababababababababab\" + \"abababababababababababababababababababababababababababababababababababab\"\r\n\t\t\t\t + \"abababababababababababababababababababababababababababababababababababab\" + \"abababababababababababab\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\tmain_header\r\n\t\trepeat: 300\r\n\t\tmetablock_uncompressed: \"a\"\r\n\t\tmetablock_fixed: \"b\"\r\n\t\tend_repeat\r\n\t\tmetablock_lastempty\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestNegativeDistance()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x0f))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0xe3))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x0d))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x07))), unchecked((byte)unchecked((int)(0x5b))), unchecked((byte)unchecked((int)(0x26))), unchecked((byte)unchecked((int)(0x31))), unchecked((byte)unchecked((int)(0x40))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x41))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x42))), unchecked((byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x42))), unchecked((byte)unchecked((int)(0x01))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x42))), unchecked((byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x42))), unchecked((byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x42))), unchecked((byte)unchecked((int)(0x01))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x1c))) };\r\n\t\t\tCheckSynth(compressed, false, string.Empty + \"timemememememeXX\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\tmain_header\r\n\t\tmetablock_header_easy: 16, 1\r\n\t\tcommand_inscopy_easy: 0, 4 // time\r\n\t\tcommand_dist_easy: 1\r\n\t\tcommand_inscopy_easy: 0, 2 // me\r\n\t\tcommand_dist_easy: 2\r\n\t\tcommand_inscopy_easy: 0, 2 // me\r\n\t\tcommand_dist_easy: 2\r\n\t\tcommand_inscopy_easy: 0, 2 // me\r\n\t\tcommand_dist_easy: 2\r\n\t\tcommand_inscopy_easy: 0, 2 // me\r\n\t\tcommand_dist_easy: 2\r\n\t\tcommand_inscopy_easy: 0, 2 // me\r\n\t\tcommand_dist_easy: 2 // All rb items are 2 now\r\n\t\tcommand_inscopy_easy: 0, 2\r\n\t\tbits: \"011100\" // 15 -> distance = rb[idx + 2] - 3\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestNegativeRemainingLenBetweenMetablocks()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x0b))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0xe3))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x0d))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x07))), unchecked((byte)unchecked((int)(0x5b))), unchecked((byte)unchecked((int)(0x26))), unchecked((byte)unchecked((int)(0x31))), unchecked((byte)unchecked((int)(0x40))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x09))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x86))), unchecked((byte)unchecked((int)(0x46))), unchecked((byte)unchecked((int)(0x11))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x38))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0xdb))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x24))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x91))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x60))), unchecked((byte)unchecked((int)(0x68))), unchecked((byte)unchecked((int)(0x04))) };\r\n\t\t\tCheckSynth(compressed, false, string.Empty + \"abab\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\tmain_header\r\n\t\tmetablock_header_easy: 1, 0\r\n\t\tcommand_easy: 0, \"ab\"  // remaining length == -1 -> invalid stream\r\n\t\tmetablock_header_easy: 2, 1\r\n\t\tcommand_easy: 0, \"ab\"\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestOneCommand()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0xe3))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x0d))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x07))), unchecked((byte)unchecked((int)(0x5b))), unchecked((byte)unchecked((int)(0x26))), unchecked((byte)unchecked((int)(0x31))), unchecked((byte)unchecked((int)(0x40))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x11))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x86))), unchecked((byte)unchecked((int)(0x02))) };\r\n\t\t\tCheckSynth(compressed, true, string.Empty + \"aaa\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t// The stream consists of one command with insert and copy.\r\n\t\tmain_header\r\n\t\tmetablock_header_easy: 3, 1\r\n\t\tcommand_easy: 2, \"a\", 1\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestOneInsert()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0xe3))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x0d))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x07))), unchecked((byte)unchecked((int)(0x5b))), unchecked((byte)unchecked((int)(0x26))), unchecked((byte)unchecked((int)(0x31))), unchecked((byte)unchecked((int)(0x40))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x09))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x86))), unchecked((byte)unchecked((int)(0x46))) };\r\n\t\t\tCheckSynth(compressed, true, string.Empty + \"ab\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t// The stream consists of one half command with insert only.\r\n\t\tmain_header\r\n\t\tmetablock_header_easy: 2, 1\r\n\t\tcommand_easy: 0, \"ab\"\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestSimplePrefix()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xa0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xc3))), unchecked((byte)unchecked((int)(0xc4))), unchecked((byte)unchecked((int)(0xc6))), unchecked((byte)unchecked((int)(0xc8))), unchecked((byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x51))), unchecked((byte)unchecked((int)(0xa0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x1d))) };\r\n\t\t\tCheckSynth(compressed, true, string.Empty + \"abcd\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\tmain_header\r\n\t\tmetablock_header_begin: 1, 0, 4, 0\r\n\t\tmetablock_header_trivial_context\r\n\t\thuffman_simple: 1,4,256, 97,98,99,100  // ascii codes for a, b, c, d\r\n\t\thuffman_fixed: 704\r\n\t\thuffman_fixed: 64\r\n\t\tcommand_inscopy_easy: 4, 0\r\n\t\tcommand_literal_bits: 0, 10, 110, 111  // a, b, c, d\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestSimplePrefixDuplicateSymbols()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xa0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xc3))), unchecked((byte)unchecked((int)(0xc4))), unchecked((byte)unchecked((int)(0xc2))), unchecked((byte)unchecked((int)(0xc4))), unchecked((byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x70))), unchecked((byte)unchecked((int)(0xb0))), unchecked((byte)unchecked((int)(0x65))), unchecked((byte)unchecked((int)(0x12))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x24))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xee))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x51))), unchecked((byte)unchecked((int)(0xa0))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x1d))) };\r\n\t\t\tCheckSynth(compressed, false, string.Empty + \"abab\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\tmain_header\r\n\t\tmetablock_header_begin: 1, 0, 4, 0\r\n\t\tmetablock_header_trivial_context\r\n\t\thuffman_simple: 1,4,256, 97,98,97,98  // ascii codes for a, b, a, b\r\n\t\thuffman_fixed: 704\r\n\t\thuffman_fixed: 64\r\n\t\tcommand_inscopy_easy: 4, 0\r\n\t\tcommand_literal_bits: 0, 10, 110, 111  // a, b, a, b\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestSimplePrefixOutOfRangeSymbols()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0xe3))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x4d))), unchecked((byte)unchecked((int)(0xff))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xef))), unchecked((byte)unchecked((int)(0x7f))), unchecked((byte)unchecked((int)(0xff))), unchecked((byte)unchecked((int)(0xfc))), unchecked((byte)unchecked((int)(0x07))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xb8))), unchecked((byte)unchecked((int)(0xd3))), unchecked((byte)unchecked((int)(0x06))) };\r\n\t\t\tCheckSynth(compressed, false, string.Empty);\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\tmain_header\r\n\t\tmetablock_header_begin: 1, 0, 4, 0\r\n\t\tmetablock_header_trivial_context\r\n\t\thuffman_fixed: 256\r\n\t\thuffman_simple: 1,4,704, 1023,1022,1021,1020\r\n\t\thuffman_fixed: 64\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestTooManySymbolsRepeated()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0xc3))), unchecked((byte)unchecked((int)(0x3d))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0x58))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x82))), unchecked((byte)unchecked((int)(0x0c))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xc0))), unchecked((byte)unchecked((int)(0xc1))), unchecked((byte)unchecked((int)(0x96))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x49))), unchecked((byte)unchecked((int)(0x0c))), unchecked((byte)unchecked((int)(0x90))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xb8))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0xd3))), unchecked((byte)unchecked((int)(0x46))), unchecked((byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x1a))), unchecked((byte)unchecked((int)(0x01))) };\r\n\t\t\tCheckSynth(compressed, false, string.Empty + \"aaab\");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t// This test is a copy of CustomHuffmanCode, with changed repeat count.\r\n\t\tmain_header\r\n\t\tmetablock_header_begin: 1, 0, 4, 0\r\n\t\tmetablock_header_trivial_context\r\n\t\thskip: 0\r\n\t\tclcl_ordered: 0,3,0,0,0,0,0,0,3,2,0,0,0,0,0,0,1,0\r\n\t\tset_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"10\",\\\r\n\t\t\"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\r\n\t\tcl_rle: 8\r\n\t\tcl_rle_rep: 9, 96\r\n\t\tcl_rle: 1\r\n\t\tcl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size\r\n\t\thuffman_fixed: 704\r\n\t\thuffman_fixed: 64\r\n\t\tcommand_inscopy_easy: 4, 0\r\n\t\tcommand_literal_bits: 0, 0, 0, 101100010\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestTransformedDictWord()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x08))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0xe3))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x0d))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x07))), unchecked((byte)unchecked((int)(0x5b))), unchecked((byte)unchecked((int)(0x26))), unchecked((byte)unchecked((int)(0x31))), unchecked((byte)unchecked((int)(0x40))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x41))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x09))), unchecked((byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x01))) };\r\n\t\t\tCheckSynth(compressed, true, string.Empty + \"time the \");\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\t// The stream consists of a transformed dictionary word.\r\n\t\tmain_header\r\n\t\tmetablock_header_easy: 9, 1\r\n\t\tcommand_inscopy_easy: 0, 4\r\n\t\tcommand_dist_easy: 5121\r\n\t\t*/\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestTransformedDictWordTooLong()\r\n\t\t{\r\n\t\t\tbyte[] compressed = new byte[] { unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x03))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x80))), unchecked((byte)unchecked((int)(0xe3))), unchecked((byte)unchecked((int)(0xb4))), unchecked((byte)unchecked((int)(0x0d))), unchecked((byte)unchecked((int)(0x00))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0x07))), unchecked((byte)unchecked((int)(0x5b))), unchecked((byte)unchecked((int)(0x26))), unchecked((byte)unchecked((int)(0x31))), unchecked((byte)unchecked((int)(0x40))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x02))), unchecked((byte)unchecked((int)(0x00))), unchecked((byte)unchecked((int)(0xe0))), unchecked((byte)unchecked((int)(0x4e))), unchecked((byte)unchecked((int)(0x1b))), unchecked((byte)unchecked((int)(0x41))), unchecked(\r\n\t\t\t\t(byte)unchecked((int)(0x09))), unchecked((byte)unchecked((int)(0x01))), unchecked((byte)unchecked((int)(0x01))) };\r\n\t\t\tCheckSynth(compressed, false, string.Empty);\r\n\t\t}\r\n\t\t/*\r\n\t\t// Has a transformed dictionary word that goes over the end of the\r\n\t\t// meta-block, but the base dictionary word fits in the meta-block.\r\n\t\t// Same as TransformedDictWord, but with a shorter meta-block length.\r\n\t\tmain_header\r\n\t\tmetablock_header_easy: 4, 1\r\n\t\tcommand_inscopy_easy: 0, 4\r\n\t\tcommand_dist_easy: 5121\r\n\t\t*/\r\n\t\t/* GENERATED CODE END */\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/org/brotli/dec/Transform.cs",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\t/// <summary>Transformations on dictionary words.</summary>\r\n\tinternal sealed class Transform\r\n\t{\r\n\t\tprivate readonly byte[] prefix;\r\n\r\n\t\tprivate readonly int type;\r\n\r\n\t\tprivate readonly byte[] suffix;\r\n\r\n\t\tinternal Transform(string prefix, int type, string suffix)\r\n\t\t{\r\n\t\t\tthis.prefix = ReadUniBytes(prefix);\r\n\t\t\tthis.type = type;\r\n\t\t\tthis.suffix = ReadUniBytes(suffix);\r\n\t\t}\r\n\r\n\t\tinternal static byte[] ReadUniBytes(string uniBytes)\r\n\t\t{\r\n\t\t\tbyte[] result = new byte[uniBytes.Length];\r\n\t\t\tfor (int i = 0; i < result.Length; ++i)\r\n\t\t\t{\r\n\t\t\t\tresult[i] = unchecked((byte)uniBytes[i]);\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tinternal static readonly Org.Brotli.Dec.Transform[] Transforms = new Org.Brotli.Dec.Transform[] { new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, string.Empty), new Org.Brotli.Dec.Transform(string.Empty, \r\n\t\t\tOrg.Brotli.Dec.WordTransformType.Identity, \" \"), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType.Identity, \" \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.OmitFirst1, string.Empty), new Org.Brotli.Dec.Transform\r\n\t\t\t(string.Empty, Org.Brotli.Dec.WordTransformType.UppercaseFirst, \" \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \" the \"), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType.Identity\r\n\t\t\t, string.Empty), new Org.Brotli.Dec.Transform(\"s \", Org.Brotli.Dec.WordTransformType.Identity, \" \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \" of \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType\r\n\t\t\t.UppercaseFirst, string.Empty), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \" and \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.OmitFirst2, string.Empty), new Org.Brotli.Dec.Transform\r\n\t\t\t(string.Empty, Org.Brotli.Dec.WordTransformType.OmitLast1, string.Empty), new Org.Brotli.Dec.Transform(\", \", Org.Brotli.Dec.WordTransformType.Identity, \" \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity\r\n\t\t\t, \", \"), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType.UppercaseFirst, \" \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \" in \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType\r\n\t\t\t.Identity, \" to \"), new Org.Brotli.Dec.Transform(\"e \", Org.Brotli.Dec.WordTransformType.Identity, \" \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \"\\\"\"), new Org.Brotli.Dec.Transform(string.Empty, \r\n\t\t\tOrg.Brotli.Dec.WordTransformType.Identity, \".\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \"\\\">\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \"\\n\"), new \r\n\t\t\tOrg.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.OmitLast3, string.Empty), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \"]\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType\r\n\t\t\t.Identity, \" for \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.OmitFirst3, string.Empty), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.OmitLast2, string.Empty), new Org.Brotli.Dec.Transform\r\n\t\t\t(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \" a \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \" that \"), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType.UppercaseFirst\r\n\t\t\t, string.Empty), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \". \"), new Org.Brotli.Dec.Transform(\".\", Org.Brotli.Dec.WordTransformType.Identity, string.Empty), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType\r\n\t\t\t.Identity, \", \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.OmitFirst4, string.Empty), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \" with \"), new Org.Brotli.Dec.Transform\r\n\t\t\t(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \"'\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \" from \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity\r\n\t\t\t, \" by \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.OmitFirst5, string.Empty), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.OmitFirst6, string.Empty), new Org.Brotli.Dec.Transform\r\n\t\t\t(\" the \", Org.Brotli.Dec.WordTransformType.Identity, string.Empty), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.OmitLast4, string.Empty), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType\r\n\t\t\t.Identity, \". The \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.UppercaseAll, string.Empty), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \" on \"), new Org.Brotli.Dec.Transform\r\n\t\t\t(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \" as \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \" is \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.OmitLast7\r\n\t\t\t, string.Empty), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.OmitLast1, \"ing \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \"\\n\\t\"), new Org.Brotli.Dec.Transform(string.Empty\r\n\t\t\t, Org.Brotli.Dec.WordTransformType.Identity, \":\"), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType.Identity, \". \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \"ed \"), new Org.Brotli.Dec.Transform\r\n\t\t\t(string.Empty, Org.Brotli.Dec.WordTransformType.OmitFirst9, string.Empty), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.OmitFirst7, string.Empty), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType\r\n\t\t\t.OmitLast6, string.Empty), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \"(\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.UppercaseFirst, \", \"), new Org.Brotli.Dec.Transform\r\n\t\t\t(string.Empty, Org.Brotli.Dec.WordTransformType.OmitLast8, string.Empty), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \" at \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType\r\n\t\t\t.Identity, \"ly \"), new Org.Brotli.Dec.Transform(\" the \", Org.Brotli.Dec.WordTransformType.Identity, \" of \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.OmitLast5, string.Empty), new Org.Brotli.Dec.Transform(\r\n\t\t\tstring.Empty, Org.Brotli.Dec.WordTransformType.OmitLast9, string.Empty), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType.UppercaseFirst, \", \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.UppercaseFirst\r\n\t\t\t, \"\\\"\"), new Org.Brotli.Dec.Transform(\".\", Org.Brotli.Dec.WordTransformType.Identity, \"(\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.UppercaseAll, \" \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType\r\n\t\t\t.UppercaseFirst, \"\\\">\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \"=\\\"\"), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType.Identity, \".\"), new Org.Brotli.Dec.Transform(\".com/\", \r\n\t\t\tOrg.Brotli.Dec.WordTransformType.Identity, string.Empty), new Org.Brotli.Dec.Transform(\" the \", Org.Brotli.Dec.WordTransformType.Identity, \" of the \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.UppercaseFirst\r\n\t\t\t, \"'\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \". This \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \",\"), new Org.Brotli.Dec.Transform(\".\", Org.Brotli.Dec.WordTransformType\r\n\t\t\t.Identity, \" \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.UppercaseFirst, \"(\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.UppercaseFirst, \".\"), new Org.Brotli.Dec.Transform\r\n\t\t\t(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \" not \"), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType.Identity, \"=\\\"\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \"er \"\r\n\t\t\t), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType.UppercaseAll, \" \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \"al \"), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType\r\n\t\t\t.UppercaseAll, string.Empty), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \"='\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.UppercaseAll, \"\\\"\"), new Org.Brotli.Dec.Transform\r\n\t\t\t(string.Empty, Org.Brotli.Dec.WordTransformType.UppercaseFirst, \". \"), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType.Identity, \"(\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \r\n\t\t\t\"ful \"), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType.UppercaseFirst, \". \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \"ive \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType\r\n\t\t\t.Identity, \"less \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.UppercaseAll, \"'\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \"est \"), new Org.Brotli.Dec.Transform\r\n\t\t\t(\" \", Org.Brotli.Dec.WordTransformType.UppercaseFirst, \".\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.UppercaseAll, \"\\\">\"), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType.Identity, \"='\"\r\n\t\t\t), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.UppercaseFirst, \",\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity, \"ize \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType\r\n\t\t\t.UppercaseAll, \".\"), new Org.Brotli.Dec.Transform(\"\\u00c2\\u00a0\", Org.Brotli.Dec.WordTransformType.Identity, string.Empty), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType.Identity, \",\"), new Org.Brotli.Dec.Transform(string.Empty\r\n\t\t\t, Org.Brotli.Dec.WordTransformType.UppercaseFirst, \"=\\\"\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.UppercaseAll, \"=\\\"\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.Identity\r\n\t\t\t, \"ous \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.UppercaseAll, \", \"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.UppercaseFirst, \"='\"), new Org.Brotli.Dec.Transform(\" \", \r\n\t\t\tOrg.Brotli.Dec.WordTransformType.UppercaseFirst, \",\"), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType.UppercaseAll, \"=\\\"\"), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType.UppercaseAll, \", \"), new Org.Brotli.Dec.Transform\r\n\t\t\t(string.Empty, Org.Brotli.Dec.WordTransformType.UppercaseAll, \",\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.UppercaseAll, \"(\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.\r\n\t\t\tUppercaseAll, \". \"), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType.UppercaseAll, \".\"), new Org.Brotli.Dec.Transform(string.Empty, Org.Brotli.Dec.WordTransformType.UppercaseAll, \"='\"), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType\r\n\t\t\t.UppercaseAll, \". \"), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType.UppercaseFirst, \"=\\\"\"), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType.UppercaseAll, \"='\"), new Org.Brotli.Dec.Transform(\" \", Org.Brotli.Dec.WordTransformType\r\n\t\t\t.UppercaseFirst, \"='\") };\r\n\r\n\t\tinternal static int TransformDictionaryWord(byte[] dst, int dstOffset, byte[] word, int wordOffset, int len, Org.Brotli.Dec.Transform transform)\r\n\t\t{\r\n\t\t\tint offset = dstOffset;\r\n\t\t\t// Copy prefix.\r\n\t\t\tbyte[] @string = transform.prefix;\r\n\t\t\tint tmp = @string.Length;\r\n\t\t\tint i = 0;\r\n\t\t\t// In most cases tmp < 10 -> no benefits from System.arrayCopy\r\n\t\t\twhile (i < tmp)\r\n\t\t\t{\r\n\t\t\t\tdst[offset++] = @string[i++];\r\n\t\t\t}\r\n\t\t\t// Copy trimmed word.\r\n\t\t\tint op = transform.type;\r\n\t\t\ttmp = Org.Brotli.Dec.WordTransformType.GetOmitFirst(op);\r\n\t\t\tif (tmp > len)\r\n\t\t\t{\r\n\t\t\t\ttmp = len;\r\n\t\t\t}\r\n\t\t\twordOffset += tmp;\r\n\t\t\tlen -= tmp;\r\n\t\t\tlen -= Org.Brotli.Dec.WordTransformType.GetOmitLast(op);\r\n\t\t\ti = len;\r\n\t\t\twhile (i > 0)\r\n\t\t\t{\r\n\t\t\t\tdst[offset++] = word[wordOffset++];\r\n\t\t\t\ti--;\r\n\t\t\t}\r\n\t\t\tif (op == Org.Brotli.Dec.WordTransformType.UppercaseAll || op == Org.Brotli.Dec.WordTransformType.UppercaseFirst)\r\n\t\t\t{\r\n\t\t\t\tint uppercaseOffset = offset - len;\r\n\t\t\t\tif (op == Org.Brotli.Dec.WordTransformType.UppercaseFirst)\r\n\t\t\t\t{\r\n\t\t\t\t\tlen = 1;\r\n\t\t\t\t}\r\n\t\t\t\twhile (len > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\ttmp = dst[uppercaseOffset] & unchecked((int)(0xFF));\r\n\t\t\t\t\tif (tmp < unchecked((int)(0xc0)))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (tmp >= 'a' && tmp <= 'z')\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tdst[uppercaseOffset] ^= unchecked((byte)32);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tuppercaseOffset += 1;\r\n\t\t\t\t\t\tlen -= 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (tmp < unchecked((int)(0xe0)))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdst[uppercaseOffset + 1] ^= unchecked((byte)32);\r\n\t\t\t\t\t\tuppercaseOffset += 2;\r\n\t\t\t\t\t\tlen -= 2;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdst[uppercaseOffset + 2] ^= unchecked((byte)5);\r\n\t\t\t\t\t\tuppercaseOffset += 3;\r\n\t\t\t\t\t\tlen -= 3;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// Copy suffix.\r\n\t\t\t@string = transform.suffix;\r\n\t\t\ttmp = @string.Length;\r\n\t\t\ti = 0;\r\n\t\t\twhile (i < tmp)\r\n\t\t\t{\r\n\t\t\t\tdst[offset++] = @string[i++];\r\n\t\t\t}\r\n\t\t\treturn offset - dstOffset;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/org/brotli/dec/TransformTest.cs",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\t/// <summary>\r\n\t/// Tests for\r\n\t/// <see cref=\"Transform\"/>\r\n\t/// .\r\n\t/// </summary>\r\n\tpublic class TransformTest\r\n\t{\r\n\t\tprivate static long Crc64(byte[] data)\r\n\t\t{\r\n\t\t\tlong crc = -1;\r\n\t\t\tfor (int i = 0; i < data.Length; ++i)\r\n\t\t\t{\r\n\t\t\t\tlong c = (crc ^ (long)(data[i] & unchecked((int)(0xFF)))) & unchecked((int)(0xFF));\r\n\t\t\t\tfor (int k = 0; k < 8; k++)\r\n\t\t\t\t{\r\n\t\t\t\t\tc = ((long)(((ulong)c) >> 1)) ^ (-(c & 1L) & -3932672073523589310L);\r\n\t\t\t\t}\r\n\t\t\t\tcrc = c ^ ((long)(((ulong)crc) >> 8));\r\n\t\t\t}\r\n\t\t\treturn ~crc;\r\n\t\t}\r\n\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestTrimAll()\r\n\t\t{\r\n\t\t\tbyte[] output = new byte[2];\r\n\t\t\tbyte[] input = new byte[] { 119, 111, 114, 100 };\r\n\t\t\t// \"word\"\r\n\t\t\tOrg.Brotli.Dec.Transform transform = new Org.Brotli.Dec.Transform(\"[\", Org.Brotli.Dec.WordTransformType.OmitFirst5, \"]\");\r\n\t\t\tOrg.Brotli.Dec.Transform.TransformDictionaryWord(output, 0, input, 0, input.Length, transform);\r\n\t\t\tbyte[] expectedOutput = new byte[] { 91, 93 };\r\n\t\t\t// \"[]\"\r\n\t\t\tNUnit.Framework.Assert.AreEqual(expectedOutput, output);\r\n\t\t}\r\n\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestCapitalize()\r\n\t\t{\r\n\t\t\tbyte[] output = new byte[8];\r\n\t\t\tbyte[] input = new byte[] { 113, unchecked((byte)(-61)), unchecked((byte)(-90)), unchecked((byte)(-32)), unchecked((byte)(-92)), unchecked((byte)(-86)) };\r\n\t\t\t// \"qæप\"\r\n\t\t\tOrg.Brotli.Dec.Transform transform = new Org.Brotli.Dec.Transform(\"[\", Org.Brotli.Dec.WordTransformType.UppercaseAll, \"]\");\r\n\t\t\tOrg.Brotli.Dec.Transform.TransformDictionaryWord(output, 0, input, 0, input.Length, transform);\r\n\t\t\tbyte[] expectedOutput = new byte[] { 91, 81, unchecked((byte)(-61)), unchecked((byte)(-122)), unchecked((byte)(-32)), unchecked((byte)(-92)), unchecked((byte)(-81)), 93 };\r\n\t\t\t// \"[QÆय]\"\r\n\t\t\tNUnit.Framework.Assert.AreEqual(expectedOutput, output);\r\n\t\t}\r\n\r\n\t\t[NUnit.Framework.Test]\r\n\t\tpublic virtual void TestAllTransforms()\r\n\t\t{\r\n\t\t\t/* This string allows to apply all transforms: head and tail cutting, capitalization and\r\n\t\t\tturning to upper case; all results will be mutually different. */\r\n\t\t\t// \"o123456789abcdef\"\r\n\t\t\tbyte[] testWord = new byte[] { 111, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102 };\r\n\t\t\tbyte[] output = new byte[2259];\r\n\t\t\tint offset = 0;\r\n\t\t\tfor (int i = 0; i < Org.Brotli.Dec.Transform.Transforms.Length; ++i)\r\n\t\t\t{\r\n\t\t\t\toffset += Org.Brotli.Dec.Transform.TransformDictionaryWord(output, offset, testWord, 0, testWord.Length, Org.Brotli.Dec.Transform.Transforms[i]);\r\n\t\t\t\toutput[offset++] = unchecked((byte)(-1));\r\n\t\t\t}\r\n\t\t\tNUnit.Framework.Assert.AreEqual(output.Length, offset);\r\n\t\t\tNUnit.Framework.Assert.AreEqual(8929191060211225186L, Crc64(output));\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/org/brotli/dec/Utils.cs",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\t/// <summary>A set of utility methods.</summary>\r\n\tinternal sealed class Utils\r\n\t{\r\n\t\tprivate static readonly byte[] ByteZeroes = new byte[1024];\r\n\r\n\t\tprivate static readonly int[] IntZeroes = new int[1024];\r\n\r\n\t\t/// <summary>Fills byte array with zeroes.</summary>\r\n\t\t/// <remarks>\r\n\t\t/// Fills byte array with zeroes.\r\n\t\t/// <p> Current implementation uses\r\n\t\t/// <see cref=\"System.Array.Copy(object, int, object, int, int)\"/>\r\n\t\t/// , so it should be used for length not\r\n\t\t/// less than 16.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"dest\">array to fill with zeroes</param>\r\n\t\t/// <param name=\"offset\">the first byte to fill</param>\r\n\t\t/// <param name=\"length\">number of bytes to change</param>\r\n\t\tinternal static void FillWithZeroes(byte[] dest, int offset, int length)\r\n\t\t{\r\n\t\t\tint cursor = 0;\r\n\t\t\twhile (cursor < length)\r\n\t\t\t{\r\n\t\t\t\tint step = System.Math.Min(cursor + 1024, length) - cursor;\r\n\t\t\t\tSystem.Array.Copy(ByteZeroes, 0, dest, offset + cursor, step);\r\n\t\t\t\tcursor += step;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// <summary>Fills int array with zeroes.</summary>\r\n\t\t/// <remarks>\r\n\t\t/// Fills int array with zeroes.\r\n\t\t/// <p> Current implementation uses\r\n\t\t/// <see cref=\"System.Array.Copy(object, int, object, int, int)\"/>\r\n\t\t/// , so it should be used for length not\r\n\t\t/// less than 16.\r\n\t\t/// </remarks>\r\n\t\t/// <param name=\"dest\">array to fill with zeroes</param>\r\n\t\t/// <param name=\"offset\">the first item to fill</param>\r\n\t\t/// <param name=\"length\">number of item to change</param>\r\n\t\tinternal static void FillWithZeroes(int[] dest, int offset, int length)\r\n\t\t{\r\n\t\t\tint cursor = 0;\r\n\t\t\twhile (cursor < length)\r\n\t\t\t{\r\n\t\t\t\tint step = System.Math.Min(cursor + 1024, length) - cursor;\r\n\t\t\t\tSystem.Array.Copy(IntZeroes, 0, dest, offset + cursor, step);\r\n\t\t\t\tcursor += step;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/org/brotli/dec/WordTransformType.cs",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\r\n\r\nDistributed under MIT license.\r\nSee file LICENSE for detail or copy at https://opensource.org/licenses/MIT\r\n*/\r\nnamespace Org.Brotli.Dec\r\n{\r\n\t/// <summary>Enumeration of all possible word transformations.</summary>\r\n\t/// <remarks>\r\n\t/// Enumeration of all possible word transformations.\r\n\t/// <p>There are two simple types of transforms: omit X first/last symbols, two character-case\r\n\t/// transforms and the identity transform.\r\n\t/// </remarks>\r\n\tinternal sealed class WordTransformType\r\n\t{\r\n\t\tinternal const int Identity = 0;\r\n\r\n\t\tinternal const int OmitLast1 = 1;\r\n\r\n\t\tinternal const int OmitLast2 = 2;\r\n\r\n\t\tinternal const int OmitLast3 = 3;\r\n\r\n\t\tinternal const int OmitLast4 = 4;\r\n\r\n\t\tinternal const int OmitLast5 = 5;\r\n\r\n\t\tinternal const int OmitLast6 = 6;\r\n\r\n\t\tinternal const int OmitLast7 = 7;\r\n\r\n\t\tinternal const int OmitLast8 = 8;\r\n\r\n\t\tinternal const int OmitLast9 = 9;\r\n\r\n\t\tinternal const int UppercaseFirst = 10;\r\n\r\n\t\tinternal const int UppercaseAll = 11;\r\n\r\n\t\tinternal const int OmitFirst1 = 12;\r\n\r\n\t\tinternal const int OmitFirst2 = 13;\r\n\r\n\t\tinternal const int OmitFirst3 = 14;\r\n\r\n\t\tinternal const int OmitFirst4 = 15;\r\n\r\n\t\tinternal const int OmitFirst5 = 16;\r\n\r\n\t\tinternal const int OmitFirst6 = 17;\r\n\r\n\t\tinternal const int OmitFirst7 = 18;\r\n\r\n\t\tinternal const int OmitFirst8 = 19;\r\n\r\n\t\tinternal const int OmitFirst9 = 20;\r\n\r\n\t\tinternal static int GetOmitFirst(int type)\r\n\t\t{\r\n\t\t\treturn type >= OmitFirst1 ? (type - OmitFirst1 + 1) : 0;\r\n\t\t}\r\n\r\n\t\tinternal static int GetOmitLast(int type)\r\n\t\t{\r\n\t\t\treturn type <= OmitLast9 ? (type - OmitLast1 + 1) : 0;\r\n\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "csharp/sharpen.cfg",
    "content": "-pascalCase+\n-nativeTypeSystem\n-separateInterfaceConstants\n-maxColumns 240\n-copySharpenCs false\n-sharpenNamespace nonamespace\n-outputFolder build/generated\n\n-namespaceMapping java.io System.IO\n\n-typeMapping java.io.ByteArrayInputStream System.IO.MemoryStream\n-typeMapping java.io.ByteArrayOutputStream System.IO.MemoryStream\n-typeMapping java.io.InputStream System.IO.Stream\n\n-methodMapping java.io.ByteArrayOutputStream.toByteArray() ToArray\n-methodMapping java.io.InputStream.read() ReadByte\n-methodMapping org.brotli.dec.BrotliInputStream.read() ReadByte\n-methodMapping org.junit.Assert.assertArrayEquals NUnit.Framework.Assert.AreEqual\n"
  },
  {
    "path": "csharp/transpile.sh",
    "content": "if ! which mvn >/dev/null; then\n  echo -e '\\033[01;31mMaven is not installed / configured.\\033[00m'\n  exit 1\nfi\n\nif ! which mono >/dev/null; then\n  echo -e '\\033[01;31mMono platform is not installed / configured.\\033[00m'\n  exit 1\nfi\n\nif ! which nuget >/dev/null; then\n  echo -e '\\033[01;31mNuGet compiler is not installed / configured.\\033[00m'\n  exit 1\nfi\n\nif ! which mcs >/dev/null; then\n  echo -e '\\033[01;31mC# compiler is not installed / configured.\\033[00m'\n  exit 1\nfi\n\nrm -rf build\nmkdir build\ncd build\n\n#-------------------------------------------------------------------------------\n\necho -e '\\033[01;33mFetching Sharpen sources.\\033[00m'\n\ngit clone https://github.com/stanislaw89/sharpen.git\ncd sharpen\ngit checkout 4f609ed42862a1f9aab1be00374ff86534a5e6d6 || exit 1\n\n#-------------------------------------------------------------------------------\n\necho -e '\\n\\033[01;33mCompiling Sharpen.\\033[00m'\n\nmvn clean package -DskipTests\nmvn dependency:copy -Dartifact=junit:junit:4.12 -DoutputDirectory=..\ncd ..\ncp sharpen/target/sharpencore-0.0.1-SNAPSHOT-jar-with-dependencies.jar ./sharpen.jar\n\n#-------------------------------------------------------------------------------\n\necho -e '\\n\\033[01;33mTranspiling.\\033[00m'\n\ncd ..\njava -jar build/sharpen.jar ../java/org/brotli/dec/ -cp build/junit-4.12.jar @sharpen.cfg\n\n#-------------------------------------------------------------------------------\n\necho -e '\\n\\033[01;33mPatching.\\033[00m'\n\n# TODO: detect \"dead\" files, that are not generated by sharpen anymore.\ncp -r build/generated/* ./\n\n# Reflection does not work without Sharpen.cs\nrm org/brotli/dec/EnumTest.cs\n\nPATTERN='\\/\\/ \\<\\{\\[INJECTED CODE\\]\\}\\>'\nCODE=$(<org/brotli/dec/BrotliInputStream.cs)\nREPLACEMENT=$(<injected_code.txt)\necho \"${CODE//$PATTERN/$REPLACEMENT}\" > org/brotli/dec/BrotliInputStream.cs\n\n#-------------------------------------------------------------------------------\n\necho -e '\\n\\033[01;33mDownloading dependencies.\\033[00m'\n\ncd build\nnuget install NUnit -Version 3.6.1\nnuget install NUnit.ConsoleRunner -Version 3.6.1\ncd ..\n\n#-------------------------------------------------------------------------------\n\necho -e '\\n\\033[01;33mCompiling generated code.\\033[00m'\n\nSOURCES=`find org/brotli -type file ! -path \"*Test.cs\"`\nTESTS_SOURCES=`find org/brotli -type file -path \"*Test.cs\"`\n\nmcs $SOURCES -target:library -out:build/brotlidec.dll\nmcs $SOURCES $TESTS_SOURCES -target:library -out:build/brotlidec_test.dll -r:build/NUnit.3.6.1/lib/net45/nunit.framework.dll\n\n#-------------------------------------------------------------------------------\n\necho -e '\\n\\033[01;33mRunning tests.\\033[00m'\n\nexport MONO_PATH=$MONO_PATH:`pwd`/build/NUnit.3.6.1/lib/net45\nmono --debug build/NUnit.ConsoleRunner.3.6.1/tools/nunit3-console.exe build/brotlidec_test.dll\n\n#-------------------------------------------------------------------------------\n\necho -e '\\n\\033[01;33mCleanup.\\033[00m'\nrm TestResult.xml\nrm -rf build\n"
  },
  {
    "path": "docs/brotli.1",
    "content": ".\\\" Automatically generated by Pandoc 2.7.3\n.\\\"\n.TH \"brotli\" \"1\" \"August 14 2021\" \"brotli 1.0.9\" \"User Manual\"\n.hy\n.SH NAME\n.PP\nbrotli(1) -- brotli, brcat, unbrotli - compress or decompress files\n.SH SYNOPSIS\n.PP\n\\f[B]brotli\\f[R] [\\f[I]OPTION|FILE\\f[R]]\\&...\n.PP\n\\f[B]brcat\\f[R] is equivalent to \\f[B]brotli --decompress --concatenated\n--stdout\\f[R]\n.PP\n\\f[B]unbrotli\\f[R] is equivalent to \\f[B]brotli --decompress\\f[R]\n.SH DESCRIPTION\n.PP\n\\f[B]brotli\\f[R] is a generic-purpose lossless compression algorithm\nthat compresses data using a combination of a modern variant of the\n\\f[B]LZ77\\f[R] algorithm, Huffman coding and 2-nd order context\nmodeling, with a compression ratio comparable to the best currently\navailable general-purpose compression methods.\nIt is similar in speed with deflate but offers more dense compression.\n.PP\n\\f[B]brotli\\f[R] command line syntax similar to \\f[B]gzip (1)\\f[R] and\n\\f[B]zstd (1)\\f[R].\nUnlike \\f[B]gzip (1)\\f[R], source files are preserved by default.\nIt is possible to remove them after processing by using the\n\\f[B]--rm\\f[R] \\f[I]option\\f[R].\n.PP\nArguments that look like \\[lq]\\f[B]--name\\f[R]\\[rq] or\n\\[lq]\\f[B]--name=value\\f[R]\\[rq] are \\f[I]options\\f[R].\nEvery \\f[I]option\\f[R] has a short form \\[lq]\\f[B]-x\\f[R]\\[rq] or\n\\[lq]\\f[B]-x value\\f[R]\\[rq].\nMultiple short form \\f[I]options\\f[R] could be coalesced:\n.IP \\[bu] 2\n\\[lq]\\f[B]--decompress --stdout --suffix=.b\\f[R]\\[rq] works the same as\n.IP \\[bu] 2\n\\[lq]\\f[B]-d -s -S .b\\f[R]\\[rq] and\n.IP \\[bu] 2\n\\[lq]\\f[B]-dsS .b\\f[R]\\[rq]\n.PP\n\\f[B]brotli\\f[R] has 3 operation modes:\n.IP \\[bu] 2\ndefault mode is compression;\n.IP \\[bu] 2\n\\f[B]--decompress\\f[R] option activates decompression mode;\n.IP \\[bu] 2\n\\f[B]--test\\f[R] option switches to integrity test mode; this option is\nequivalent to \\[lq]\\f[B]--decompress --stdout\\f[R]\\[rq] except that the\ndecompressed data is discarded instead of being written to standard\noutput.\n.PP\nEvery non-option argument is a \\f[I]file\\f[R] entry.\nIf no \\f[I]files\\f[R] are given or \\f[I]file\\f[R] is\n\\[lq]\\f[B]-\\f[R]\\[rq], \\f[B]brotli\\f[R] reads from standard input.\nAll arguments after \\[lq]\\f[B]--\\f[R]\\[rq] are \\f[I]file\\f[R] entries.\n.PP\nUnless \\f[B]--stdout\\f[R] or \\f[B]--output\\f[R] is specified,\n\\f[I]files\\f[R] are written to a new file whose name is derived from the\nsource \\f[I]file\\f[R] name:\n.IP \\[bu] 2\nwhen compressing, a suffix is appended to the source filename to get the\ntarget filename\n.IP \\[bu] 2\nwhen decompressing, a suffix is removed from the source filename to get\nthe target filename\n.PP\nDefault suffix is \\f[B].br\\f[R], but it could be specified with\n\\f[B]--suffix\\f[R] option.\n.PP\nConflicting or duplicate \\f[I]options\\f[R] are not allowed.\n.SH OPTIONS\n.IP \\[bu] 2\n\\f[B]-#\\f[R]: compression level (0-9); bigger values cause denser, but\nslower compression\n.IP \\[bu] 2\n\\f[B]-c\\f[R], \\f[B]--stdout\\f[R]: write on standard output\n.IP \\[bu] 2\n\\f[B]-d\\f[R], \\f[B]--decompress\\f[R]: decompress mode\n.IP \\[bu] 2\n\\f[B]-f\\f[R], \\f[B]--force\\f[R]: force output file overwrite\n.IP \\[bu] 2\n\\f[B]-h\\f[R], \\f[B]--help\\f[R]: display this help and exit\n.IP \\[bu] 2\n\\f[B]-j\\f[R], \\f[B]--rm\\f[R]: remove source file(s); \\f[B]gzip\n(1)\\f[R]-like behaviour\n.IP \\[bu] 2\n\\f[B]-k\\f[R], \\f[B]--keep\\f[R]: keep source file(s); \\f[B]zstd\n(1)\\f[R]-like behaviour\n.IP \\[bu] 2\n\\f[B]-n\\f[R], \\f[B]--no-copy-stat\\f[R]: do not copy source file(s)\nattributes\n.IP \\[bu] 2\n\\f[B]-o FILE\\f[R], \\f[B]--output=FILE\\f[R] output file; valid only if\nthere is a single input entry\n.IP \\[bu] 2\n\\f[B]-q NUM\\f[R], \\f[B]--quality=NUM\\f[R]: compression level (0-11);\nbigger values cause denser, but slower compression\n.IP \\[bu] 2\n\\f[B]-t\\f[R], \\f[B]--test\\f[R]: test file integrity mode\n.IP \\[bu] 2\n\\f[B]-v\\f[R], \\f[B]--verbose\\f[R]: increase output verbosity\n.IP \\[bu] 2\n\\f[B]-w NUM\\f[R], \\f[B]--lgwin=NUM\\f[R]: set LZ77 window size (0, 10-24)\n(default: 24); window size is \\f[B](pow(2, NUM) - 16)\\f[R]; 0 lets\ncompressor decide over the optimal value; bigger windows size improve\ndensity; decoder might require up to window size memory to operate\n.IP \\[bu] 2\n\\f[B]-C B64\\f[R], \\f[B]--comment=B64\\f[R]: set comment; argument is\nbase64-decoded first; when decoding: check stream comment; when\nencoding: embed comment (fingerprint)\n.IP \\[bu] 2\n\\f[B]-D FILE\\f[R], \\f[B]--dictionary=FILE\\f[R]: use FILE as raw (LZ77)\ndictionary; same dictionary MUST be used both for compression and\ndecompression\n.IP \\[bu] 2\n\\f[B]-K\\f[R], \\f[B]--concatenated\\f[R]: when decoding, allow\nconcatenated brotli streams as input\n.IP \\[bu] 2\n\\f[B]-S SUF\\f[R], \\f[B]--suffix=SUF\\f[R]: output file suffix (default:\n\\f[B].br\\f[R])\n.IP \\[bu] 2\n\\f[B]-V\\f[R], \\f[B]--version\\f[R]: display version and exit\n.IP \\[bu] 2\n\\f[B]-Z\\f[R], \\f[B]--best\\f[R]: use best compression level (default);\nsame as \\[lq]\\f[B]-q 11\\f[R]\\[rq]\n.SH SEE ALSO\n.PP\n\\f[B]brotli\\f[R] file format is defined in RFC\n7932 (https://www.ietf.org/rfc/rfc7932.txt).\n.PP\n\\f[B]brotli\\f[R] is open-sourced under the MIT\nLicense (https://opensource.org/licenses/MIT).\n.PP\nMailing list: https://groups.google.com/forum/#!forum/brotli\n.SH BUGS\n.PP\nReport bugs at: https://github.com/google/brotli/issues\n"
  },
  {
    "path": "docs/constants.h.3",
    "content": ".TH \"constants.h\" 3 \"August 2021\" \"Brotli\" \\\" -*- nroff -*-\n.ad l\n.nh\n.SH NAME\nconstants.h \\- Common constants used in decoder and encoder API\\&.  \n\n.SH SYNOPSIS\n.br\n.PP\n.SS \"Macros\"\n\n.in +1c\n.ti -1c\n.RI \"#define \\fBBROTLI_LARGE_MAX_DISTANCE_BITS\\fP   62U\"\n.br\n.RI \"\\fIThe theoretical maximum number of distance bits specified for large window brotli, for 64-bit encoders and decoders\\&. \\fP\"\n.ti -1c\n.RI \"#define \\fBBROTLI_LARGE_MAX_WBITS\\fP   30\"\n.br\n.RI \"\\fIThe maximum supported large brotli window bits by the encoder and decoder\\&. \\fP\"\n.ti -1c\n.RI \"#define \\fBBROTLI_MAX_NPOSTFIX\\fP   3\"\n.br\n.RI \"\\fIMaximal number of 'postfix' bits\\&. \\fP\"\n.in -1c\n.SH \"Detailed Description\"\n.PP \nCommon constants used in decoder and encoder API\\&. \n\n\n.SH \"Macro Definition Documentation\"\n.PP \n.SS \"#define BROTLI_LARGE_MAX_DISTANCE_BITS   62U\"\n\n.PP\nThe theoretical maximum number of distance bits specified for large window brotli, for 64-bit encoders and decoders\\&. Even when in practice 32-bit encoders and decoders only support up to 30 max distance bits, the value is set to 62 because it affects the large window brotli file format\\&. Specifically, it affects the encoding of simple huffman tree for distances, see Specification RFC 7932 chapter 3\\&.4\\&. \n.SS \"#define BROTLI_LARGE_MAX_WBITS   30\"\n\n.PP\nThe maximum supported large brotli window bits by the encoder and decoder\\&. Large window brotli allows up to 62 bits, however the current encoder and decoder, designed for 32-bit integers, only support up to 30 bits maximum\\&. \n.SS \"#define BROTLI_MAX_NPOSTFIX   3\"\n\n.PP\nMaximal number of 'postfix' bits\\&. Number of 'postfix' bits is stored as 2 bits in meta-block header\\&. \n.SH \"Author\"\n.PP \nGenerated automatically by Doxygen for Brotli from the source code\\&.\n"
  },
  {
    "path": "docs/decode.h.3",
    "content": ".TH \"decode.h\" 3 \"August 2021\" \"Brotli\" \\\" -*- nroff -*-\n.ad l\n.nh\n.SH NAME\ndecode.h \\- API for Brotli decompression\\&.  \n\n.SH SYNOPSIS\n.br\n.PP\n.SS \"Macros\"\n\n.in +1c\n.ti -1c\n.RI \"#define \\fBBROTLI_DECODER_ERROR_CODES_LIST\\fP(BROTLI_ERROR_CODE,  SEPARATOR)        \"\n.br\n.RI \"\\fITemplate that evaluates items of \\fBBrotliDecoderErrorCode\\fP\\&. \\fP\"\n.ti -1c\n.RI \"#define \\fBBROTLI_LAST_ERROR_CODE\\fP   BROTLI_DECODER_ERROR_UNREACHABLE\"\n.br\n.RI \"\\fIThe value of the last error code, negative integer\\&. \\fP\"\n.in -1c\n.SS \"Typedefs\"\n\n.in +1c\n.ti -1c\n.RI \"typedef void(* \\fBbrotli_decoder_metadata_chunk_func\\fP) (void *opaque, const uint8_t *data, size_t size)\"\n.br\n.RI \"\\fICallback to fire on metadata block chunk becomes available\\&. \\fP\"\n.ti -1c\n.RI \"typedef void(* \\fBbrotli_decoder_metadata_start_func\\fP) (void *opaque, size_t size)\"\n.br\n.RI \"\\fICallback to fire on metadata block start\\&. \\fP\"\n.ti -1c\n.RI \"typedef enum \\fBBrotliDecoderParameter\\fP \\fBBrotliDecoderParameter\\fP\"\n.br\n.RI \"\\fIOptions to be used with \\fBBrotliDecoderSetParameter\\fP\\&. \\fP\"\n.ti -1c\n.RI \"typedef struct BrotliDecoderStateStruct \\fBBrotliDecoderState\\fP\"\n.br\n.RI \"\\fIOpaque structure that holds decoder state\\&. \\fP\"\n.in -1c\n.SS \"Enumerations\"\n.SS \"Functions\"\n\n.in +1c\n.ti -1c\n.RI \"\\fBBROTLI_BOOL\\fP \\fBBrotliDecoderAttachDictionary\\fP (\\fBBrotliDecoderState\\fP *state, BrotliSharedDictionaryType type, size_t data_size, const uint8_t data[data_size])\"\n.br\n.RI \"\\fIAdds LZ77 prefix dictionary, adds or replaces built-in static dictionary and transforms\\&. \\fP\"\n.ti -1c\n.RI \"\\fBBrotliDecoderState\\fP * \\fBBrotliDecoderCreateInstance\\fP (\\fBbrotli_alloc_func\\fP alloc_func, \\fBbrotli_free_func\\fP free_func, void *opaque)\"\n.br\n.RI \"\\fICreates an instance of \\fBBrotliDecoderState\\fP and initializes it\\&. \\fP\"\n.ti -1c\n.RI \"\\fBBrotliDecoderResult\\fP \\fBBrotliDecoderDecompress\\fP (size_t encoded_size, const uint8_t encoded_buffer[encoded_size], size_t *decoded_size, uint8_t decoded_buffer[*decoded_size])\"\n.br\n.RI \"\\fIPerforms one-shot memory-to-memory decompression\\&. \\fP\"\n.ti -1c\n.RI \"\\fBBrotliDecoderResult\\fP \\fBBrotliDecoderDecompressStream\\fP (\\fBBrotliDecoderState\\fP *state, size_t *available_in, const uint8_t **next_in, size_t *available_out, uint8_t **next_out, size_t *total_out)\"\n.br\n.RI \"\\fIDecompresses the input stream to the output stream\\&. \\fP\"\n.ti -1c\n.RI \"void \\fBBrotliDecoderDestroyInstance\\fP (\\fBBrotliDecoderState\\fP *state)\"\n.br\n.RI \"\\fIDeinitializes and frees \\fBBrotliDecoderState\\fP instance\\&. \\fP\"\n.ti -1c\n.RI \"const char * \\fBBrotliDecoderErrorString\\fP (\\fBBrotliDecoderErrorCode\\fP c)\"\n.br\n.RI \"\\fIConverts error code to a c-string\\&. \\fP\"\n.ti -1c\n.RI \"\\fBBrotliDecoderErrorCode\\fP \\fBBrotliDecoderGetErrorCode\\fP (const \\fBBrotliDecoderState\\fP *state)\"\n.br\n.RI \"\\fIAcquires a detailed error code\\&. \\fP\"\n.ti -1c\n.RI \"\\fBBROTLI_BOOL\\fP \\fBBrotliDecoderHasMoreOutput\\fP (const \\fBBrotliDecoderState\\fP *state)\"\n.br\n.RI \"\\fIChecks if decoder has more output\\&. \\fP\"\n.ti -1c\n.RI \"\\fBBROTLI_BOOL\\fP \\fBBrotliDecoderIsFinished\\fP (const \\fBBrotliDecoderState\\fP *state)\"\n.br\n.RI \"\\fIChecks if decoder instance reached the final state\\&. \\fP\"\n.ti -1c\n.RI \"\\fBBROTLI_BOOL\\fP \\fBBrotliDecoderIsUsed\\fP (const \\fBBrotliDecoderState\\fP *state)\"\n.br\n.RI \"\\fIChecks if instance has already consumed input\\&. \\fP\"\n.ti -1c\n.RI \"void \\fBBrotliDecoderSetMetadataCallbacks\\fP (\\fBBrotliDecoderState\\fP *state, \\fBbrotli_decoder_metadata_start_func\\fP start_func, \\fBbrotli_decoder_metadata_chunk_func\\fP chunk_func, void *opaque)\"\n.br\n.RI \"\\fISets callback for receiving metadata blocks\\&. \\fP\"\n.ti -1c\n.RI \"\\fBBROTLI_BOOL\\fP \\fBBrotliDecoderSetParameter\\fP (\\fBBrotliDecoderState\\fP *state, \\fBBrotliDecoderParameter\\fP param, uint32_t value)\"\n.br\n.RI \"\\fISets the specified parameter to the given decoder instance\\&. \\fP\"\n.ti -1c\n.RI \"const uint8_t * \\fBBrotliDecoderTakeOutput\\fP (\\fBBrotliDecoderState\\fP *state, size_t *size)\"\n.br\n.RI \"\\fIAcquires pointer to internal output buffer\\&. \\fP\"\n.ti -1c\n.RI \"uint32_t \\fBBrotliDecoderVersion\\fP (void)\"\n.br\n.RI \"\\fIGets a decoder library version\\&. \\fP\"\n.in -1c\n.SH \"Detailed Description\"\n.PP \nAPI for Brotli decompression\\&. \n\n\n.SH \"Macro Definition Documentation\"\n.PP \n.SS \"#define BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE, SEPARATOR)\"\n\n.PP\nTemplate that evaluates items of \\fBBrotliDecoderErrorCode\\fP\\&. Example:\n.PP\n.nf\n// Log Brotli error code\\&.\nswitch (brotliDecoderErrorCode) {\n#define CASE_(PREFIX, NAME, CODE) \\\n  case BROTLI_DECODER ## PREFIX ## NAME: \\\n    LOG(INFO) << \"error code:\" << #NAME; \\\n    break;\n#define NEWLINE_\nBROTLI_DECODER_ERROR_CODES_LIST(CASE_, NEWLINE_)\n#undef CASE_\n#undef NEWLINE_\n  default: LOG(FATAL) << \"unknown brotli error code\";\n}\n\n.fi\n.PP\n \n.SS \"#define BROTLI_LAST_ERROR_CODE   BROTLI_DECODER_ERROR_UNREACHABLE\"\n\n.PP\nThe value of the last error code, negative integer\\&. All other error code values are in the range from \\fBBROTLI_LAST_ERROR_CODE\\fP to \\fC-1\\fP\\&. There are also 4 other possible non-error codes \\fC0\\fP \\&.\\&. \\fC3\\fP in \\fBBrotliDecoderErrorCode\\fP enumeration\\&. \n.SH \"Typedef Documentation\"\n.PP \n.SS \"typedef void(* brotli_decoder_metadata_chunk_func) (void *opaque, const uint8_t *data, size_t size)\"\n\n.PP\nCallback to fire on metadata block chunk becomes available\\&. This function can be invoked multiple times per metadata block; block should be considered finished when sum of \\fCsize\\fP matches the announced metadata block size\\&. Chunks contents pointed by \\fCdata\\fP are transient and shouln not be accessed after leaving the callback\\&.\n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIopaque\\fP callback handle \n.br\n\\fIdata\\fP pointer to metadata contents \n.br\n\\fIsize\\fP size of metadata block chunk, at least \\fC1\\fP \n.RE\n.PP\n\n.SS \"typedef void(* brotli_decoder_metadata_start_func) (void *opaque, size_t size)\"\n\n.PP\nCallback to fire on metadata block start\\&. After this callback is fired, if \\fCsize\\fP is not \\fC0\\fP, it is followed by \\fBbrotli_decoder_metadata_chunk_func\\fP as more metadata block contents become accessible\\&.\n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIopaque\\fP callback handle \n.br\n\\fIsize\\fP size of metadata block \n.RE\n.PP\n\n.SS \"typedef enum \\fBBrotliDecoderParameter\\fP  \\fBBrotliDecoderParameter\\fP\"\n\n.PP\nOptions to be used with \\fBBrotliDecoderSetParameter\\fP\\&. \n.SS \"typedef struct BrotliDecoderStateStruct \\fBBrotliDecoderState\\fP\"\n\n.PP\nOpaque structure that holds decoder state\\&. Allocated and initialized with \\fBBrotliDecoderCreateInstance\\fP\\&. Cleaned up and deallocated with \\fBBrotliDecoderDestroyInstance\\fP\\&. \n.SH \"Enumeration Type Documentation\"\n.PP \n.SS \"enum \\fBBrotliDecoderErrorCode\\fP\"\n\n.PP\nError code for detailed logging / production debugging\\&. See \\fBBrotliDecoderGetErrorCode\\fP and \\fBBROTLI_LAST_ERROR_CODE\\fP\\&. \n.SS \"enum \\fBBrotliDecoderParameter\\fP\"\n\n.PP\nOptions to be used with \\fBBrotliDecoderSetParameter\\fP\\&. \n.PP\n\\fBEnumerator\\fP\n.in +1c\n.TP\n\\fB\\fIBROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION \\fP\\fP\nDisable 'canny' ring buffer allocation strategy\\&. Ring buffer is allocated according to window size, despite the real size of the content\\&. \n.TP\n\\fB\\fIBROTLI_DECODER_PARAM_LARGE_WINDOW \\fP\\fP\nFlag that determines if 'Large Window Brotli' is used\\&. \n.SS \"enum \\fBBrotliDecoderResult\\fP\"\n\n.PP\nResult type for \\fBBrotliDecoderDecompress\\fP and \\fBBrotliDecoderDecompressStream\\fP functions\\&. \n.PP\n\\fBEnumerator\\fP\n.in +1c\n.TP\n\\fB\\fIBROTLI_DECODER_RESULT_ERROR \\fP\\fP\nDecoding error, e\\&.g\\&. corrupted input or memory allocation problem\\&. \n.TP\n\\fB\\fIBROTLI_DECODER_RESULT_SUCCESS \\fP\\fP\nDecoding successfully completed\\&. \n.TP\n\\fB\\fIBROTLI_DECODER_RESULT_NEEDS_MORE_INPUT \\fP\\fP\nPartially done; should be called again with more input\\&. \n.TP\n\\fB\\fIBROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT \\fP\\fP\nPartially done; should be called again with more output\\&. \n.SH \"Function Documentation\"\n.PP \n.SS \"\\fBBROTLI_BOOL\\fP BrotliDecoderAttachDictionary (\\fBBrotliDecoderState\\fP * state, BrotliSharedDictionaryType type, size_t data_size, const uint8_t data[data_size])\"\n\n.PP\nAdds LZ77 prefix dictionary, adds or replaces built-in static dictionary and transforms\\&. Attached dictionary ownership is not transferred\\&. Data provided to this method should be kept accessible until decoding is finished and decoder instance is destroyed\\&.\n.PP\n\\fBNote:\\fP\n.RS 4\nDictionaries can NOT be attached after actual decoding is started\\&.\n.RE\n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIstate\\fP decoder instance \n.br\n\\fItype\\fP dictionary data format \n.br\n\\fIdata_size\\fP length of memory region pointed by \\fCdata\\fP \n.br\n\\fIdata\\fP dictionary data in format corresponding to \\fCtype\\fP \n.RE\n.PP\n\\fBReturns:\\fP\n.RS 4\n\\fBBROTLI_FALSE\\fP if dictionary is corrupted, or dictionary count limit is reached \n.PP\n\\fBBROTLI_TRUE\\fP if dictionary is accepted / attached \n.RE\n.PP\n\n.SS \"\\fBBrotliDecoderState\\fP* BrotliDecoderCreateInstance (\\fBbrotli_alloc_func\\fP alloc_func, \\fBbrotli_free_func\\fP free_func, void * opaque)\"\n\n.PP\nCreates an instance of \\fBBrotliDecoderState\\fP and initializes it\\&. The instance can be used once for decoding and should then be destroyed with \\fBBrotliDecoderDestroyInstance\\fP, it cannot be reused for a new decoding session\\&.\n.PP\n\\fCalloc_func\\fP and \\fCfree_func\\fP \\fBMUST\\fP be both zero or both non-zero\\&. In the case they are both zero, default memory allocators are used\\&. \\fCopaque\\fP is passed to \\fCalloc_func\\fP and \\fCfree_func\\fP when they are called\\&. \\fCfree_func\\fP has to return without doing anything when asked to free a NULL pointer\\&.\n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIalloc_func\\fP custom memory allocation function \n.br\n\\fIfree_func\\fP custom memory free function \n.br\n\\fIopaque\\fP custom memory manager handle \n.RE\n.PP\n\\fBReturns:\\fP\n.RS 4\n\\fC0\\fP if instance can not be allocated or initialized \n.PP\npointer to initialized \\fBBrotliDecoderState\\fP otherwise \n.RE\n.PP\n\n.SS \"\\fBBrotliDecoderResult\\fP BrotliDecoderDecompress (size_t encoded_size, const uint8_t encoded_buffer[encoded_size], size_t * decoded_size, uint8_t decoded_buffer[*decoded_size])\"\n\n.PP\nPerforms one-shot memory-to-memory decompression\\&. Decompresses the data in \\fCencoded_buffer\\fP into \\fCdecoded_buffer\\fP, and sets \\fC*decoded_size\\fP to the decompressed length\\&.\n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIencoded_size\\fP size of \\fCencoded_buffer\\fP \n.br\n\\fIencoded_buffer\\fP compressed data buffer with at least \\fCencoded_size\\fP addressable bytes \n.br\n\\fIdecoded_size\\fP \\fBin:\\fP size of \\fCdecoded_buffer\\fP; \n.br\n \\fBout:\\fP length of decompressed data written to \\fCdecoded_buffer\\fP \n.br\n\\fIdecoded_buffer\\fP decompressed data destination buffer \n.RE\n.PP\n\\fBReturns:\\fP\n.RS 4\n\\fBBROTLI_DECODER_RESULT_ERROR\\fP if input is corrupted, memory allocation failed, or \\fCdecoded_buffer\\fP is not large enough; \n.PP\n\\fBBROTLI_DECODER_RESULT_SUCCESS\\fP otherwise \n.RE\n.PP\n\n.SS \"\\fBBrotliDecoderResult\\fP BrotliDecoderDecompressStream (\\fBBrotliDecoderState\\fP * state, size_t * available_in, const uint8_t ** next_in, size_t * available_out, uint8_t ** next_out, size_t * total_out)\"\n\n.PP\nDecompresses the input stream to the output stream\\&. The values \\fC*available_in\\fP and \\fC*available_out\\fP must specify the number of bytes addressable at \\fC*next_in\\fP and \\fC*next_out\\fP respectively\\&. When \\fC*available_out\\fP is \\fC0\\fP, \\fCnext_out\\fP is allowed to be \\fCNULL\\fP\\&.\n.PP\nAfter each call, \\fC*available_in\\fP will be decremented by the amount of input bytes consumed, and the \\fC*next_in\\fP pointer will be incremented by that amount\\&. Similarly, \\fC*available_out\\fP will be decremented by the amount of output bytes written, and the \\fC*next_out\\fP pointer will be incremented by that amount\\&.\n.PP\n\\fCtotal_out\\fP, if it is not a null-pointer, will be set to the number of bytes decompressed since the last \\fCstate\\fP initialization\\&.\n.PP\n\\fBNote:\\fP\n.RS 4\nInput is never overconsumed, so \\fCnext_in\\fP and \\fCavailable_in\\fP could be passed to the next consumer after decoding is complete\\&.\n.RE\n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIstate\\fP decoder instance \n.br\n\\fIavailable_in\\fP \\fBin:\\fP amount of available input; \n.br\n \\fBout:\\fP amount of unused input \n.br\n\\fInext_in\\fP pointer to the next compressed byte \n.br\n\\fIavailable_out\\fP \\fBin:\\fP length of output buffer; \n.br\n \\fBout:\\fP remaining size of output buffer \n.br\n\\fInext_out\\fP output buffer cursor; can be \\fCNULL\\fP if \\fCavailable_out\\fP is \\fC0\\fP \n.br\n\\fItotal_out\\fP number of bytes decompressed so far; can be \\fCNULL\\fP \n.RE\n.PP\n\\fBReturns:\\fP\n.RS 4\n\\fBBROTLI_DECODER_RESULT_ERROR\\fP if input is corrupted, memory allocation failed, arguments were invalid, etc\\&.; use \\fBBrotliDecoderGetErrorCode\\fP to get detailed error code \n.PP\n\\fBBROTLI_DECODER_RESULT_NEEDS_MORE_INPUT\\fP decoding is blocked until more input data is provided \n.PP\n\\fBBROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT\\fP decoding is blocked until more output space is provided \n.PP\n\\fBBROTLI_DECODER_RESULT_SUCCESS\\fP decoding is finished, no more input might be consumed and no more output will be produced \n.RE\n.PP\n\n.SS \"void BrotliDecoderDestroyInstance (\\fBBrotliDecoderState\\fP * state)\"\n\n.PP\nDeinitializes and frees \\fBBrotliDecoderState\\fP instance\\&. \n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIstate\\fP decoder instance to be cleaned up and deallocated \n.RE\n.PP\n\n.SS \"\\fBBrotliDecoderErrorCode\\fP BrotliDecoderGetErrorCode (const \\fBBrotliDecoderState\\fP * state)\"\n\n.PP\nAcquires a detailed error code\\&. Should be used only after \\fBBrotliDecoderDecompressStream\\fP returns \\fBBROTLI_DECODER_RESULT_ERROR\\fP\\&.\n.PP\nSee also \\fBBrotliDecoderErrorString\\fP\n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIstate\\fP decoder instance \n.RE\n.PP\n\\fBReturns:\\fP\n.RS 4\nlast saved error code \n.RE\n.PP\n\n.SS \"\\fBBROTLI_BOOL\\fP BrotliDecoderHasMoreOutput (const \\fBBrotliDecoderState\\fP * state)\"\n\n.PP\nChecks if decoder has more output\\&. \n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIstate\\fP decoder instance \n.RE\n.PP\n\\fBReturns:\\fP\n.RS 4\n\\fBBROTLI_TRUE\\fP, if decoder has some unconsumed output \n.PP\n\\fBBROTLI_FALSE\\fP otherwise \n.RE\n.PP\n\n.SS \"\\fBBROTLI_BOOL\\fP BrotliDecoderIsFinished (const \\fBBrotliDecoderState\\fP * state)\"\n\n.PP\nChecks if decoder instance reached the final state\\&. \n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIstate\\fP decoder instance \n.RE\n.PP\n\\fBReturns:\\fP\n.RS 4\n\\fBBROTLI_TRUE\\fP if decoder is in a state where it reached the end of the input and produced all of the output \n.PP\n\\fBBROTLI_FALSE\\fP otherwise \n.RE\n.PP\n\n.SS \"\\fBBROTLI_BOOL\\fP BrotliDecoderIsUsed (const \\fBBrotliDecoderState\\fP * state)\"\n\n.PP\nChecks if instance has already consumed input\\&. Instance that returns \\fBBROTLI_FALSE\\fP is considered 'fresh' and could be reused\\&.\n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIstate\\fP decoder instance \n.RE\n.PP\n\\fBReturns:\\fP\n.RS 4\n\\fBBROTLI_TRUE\\fP if decoder has already used some input bytes \n.PP\n\\fBBROTLI_FALSE\\fP otherwise \n.RE\n.PP\n\n.SS \"void BrotliDecoderSetMetadataCallbacks (\\fBBrotliDecoderState\\fP * state, \\fBbrotli_decoder_metadata_start_func\\fP start_func, \\fBbrotli_decoder_metadata_chunk_func\\fP chunk_func, void * opaque)\"\n\n.PP\nSets callback for receiving metadata blocks\\&. \n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIstate\\fP decoder instance \n.br\n\\fIstart_func\\fP callback on metadata block start \n.br\n\\fIchunk_func\\fP callback on metadata block chunk \n.br\n\\fIopaque\\fP callback handle \n.RE\n.PP\n\n.SS \"\\fBBROTLI_BOOL\\fP BrotliDecoderSetParameter (\\fBBrotliDecoderState\\fP * state, \\fBBrotliDecoderParameter\\fP param, uint32_t value)\"\n\n.PP\nSets the specified parameter to the given decoder instance\\&. \n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIstate\\fP decoder instance \n.br\n\\fIparam\\fP parameter to set \n.br\n\\fIvalue\\fP new parameter value \n.RE\n.PP\n\\fBReturns:\\fP\n.RS 4\n\\fBBROTLI_FALSE\\fP if parameter is unrecognized, or value is invalid \n.PP\n\\fBBROTLI_TRUE\\fP if value is accepted \n.RE\n.PP\n\n.SS \"const uint8_t* BrotliDecoderTakeOutput (\\fBBrotliDecoderState\\fP * state, size_t * size)\"\n\n.PP\nAcquires pointer to internal output buffer\\&. This method is used to make language bindings easier and more efficient:\n.IP \"1.\" 4\npush data to \\fBBrotliDecoderDecompressStream\\fP, until \\fBBROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT\\fP is reported\n.IP \"2.\" 4\nuse \\fBBrotliDecoderTakeOutput\\fP to peek bytes and copy to language-specific entity\n.PP\n.PP\nAlso this could be useful if there is an output stream that is able to consume all the provided data (e\\&.g\\&. when data is saved to file system)\\&.\n.PP\n\\fBAttention:\\fP\n.RS 4\nAfter every call to \\fBBrotliDecoderTakeOutput\\fP \\fC*size\\fP bytes of output are considered consumed for all consecutive calls to the instance methods; returned pointer becomes invalidated as well\\&.\n.RE\n.PP\n\\fBNote:\\fP\n.RS 4\nDecoder output is not guaranteed to be contiguous\\&. This means that after the size-unrestricted call to \\fBBrotliDecoderTakeOutput\\fP, immediate next call to \\fBBrotliDecoderTakeOutput\\fP may return more data\\&.\n.RE\n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIstate\\fP decoder instance \n.br\n\\fIsize\\fP \\fBin:\\fP number of bytes caller is ready to take, \\fC0\\fP if any amount could be handled; \n.br\n \\fBout:\\fP amount of data pointed by returned pointer and considered consumed; \n.br\n out value is never greater than in value, unless it is \\fC0\\fP \n.RE\n.PP\n\\fBReturns:\\fP\n.RS 4\npointer to output data \n.RE\n.PP\n\n.SS \"uint32_t BrotliDecoderVersion (void)\"\n\n.PP\nGets a decoder library version\\&. Look at BROTLI_MAKE_HEX_VERSION for more information\\&. \n.SH \"Author\"\n.PP \nGenerated automatically by Doxygen for Brotli from the source code\\&.\n"
  },
  {
    "path": "docs/encode.h.3",
    "content": ".TH \"encode.h\" 3 \"August 2021\" \"Brotli\" \\\" -*- nroff -*-\n.ad l\n.nh\n.SH NAME\nencode.h \\- API for Brotli compression\\&.  \n\n.SH SYNOPSIS\n.br\n.PP\n.SS \"Macros\"\n\n.in +1c\n.ti -1c\n.RI \"#define \\fBBROTLI_DEFAULT_MODE\\fP   \\fBBROTLI_MODE_GENERIC\\fP\"\n.br\n.RI \"\\fIDefault value for \\fBBROTLI_PARAM_MODE\\fP parameter\\&. \\fP\"\n.ti -1c\n.RI \"#define \\fBBROTLI_DEFAULT_QUALITY\\fP   11\"\n.br\n.RI \"\\fIDefault value for \\fBBROTLI_PARAM_QUALITY\\fP parameter\\&. \\fP\"\n.ti -1c\n.RI \"#define \\fBBROTLI_DEFAULT_WINDOW\\fP   22\"\n.br\n.RI \"\\fIDefault value for \\fBBROTLI_PARAM_LGWIN\\fP parameter\\&. \\fP\"\n.ti -1c\n.RI \"#define \\fBBROTLI_LARGE_MAX_WINDOW_BITS\\fP   30\"\n.br\n.RI \"\\fIMaximal value for \\fBBROTLI_PARAM_LGWIN\\fP parameter in 'Large Window Brotli' (32-bit)\\&. \\fP\"\n.ti -1c\n.RI \"#define \\fBBROTLI_MAX_INPUT_BLOCK_BITS\\fP   24\"\n.br\n.RI \"\\fIMaximal value for \\fBBROTLI_PARAM_LGBLOCK\\fP parameter\\&. \\fP\"\n.ti -1c\n.RI \"#define \\fBBROTLI_MAX_QUALITY\\fP   11\"\n.br\n.RI \"\\fIMaximal value for \\fBBROTLI_PARAM_QUALITY\\fP parameter\\&. \\fP\"\n.ti -1c\n.RI \"#define \\fBBROTLI_MAX_WINDOW_BITS\\fP   24\"\n.br\n.RI \"\\fIMaximal value for \\fBBROTLI_PARAM_LGWIN\\fP parameter\\&. \\fP\"\n.ti -1c\n.RI \"#define \\fBBROTLI_MIN_INPUT_BLOCK_BITS\\fP   16\"\n.br\n.RI \"\\fIMinimal value for \\fBBROTLI_PARAM_LGBLOCK\\fP parameter\\&. \\fP\"\n.ti -1c\n.RI \"#define \\fBBROTLI_MIN_QUALITY\\fP   0\"\n.br\n.RI \"\\fIMinimal value for \\fBBROTLI_PARAM_QUALITY\\fP parameter\\&. \\fP\"\n.ti -1c\n.RI \"#define \\fBBROTLI_MIN_WINDOW_BITS\\fP   10\"\n.br\n.RI \"\\fIMinimal value for \\fBBROTLI_PARAM_LGWIN\\fP parameter\\&. \\fP\"\n.in -1c\n.SS \"Typedefs\"\n\n.in +1c\n.ti -1c\n.RI \"typedef enum \\fBBrotliEncoderMode\\fP \\fBBrotliEncoderMode\\fP\"\n.br\n.RI \"\\fIOptions for \\fBBROTLI_PARAM_MODE\\fP parameter\\&. \\fP\"\n.ti -1c\n.RI \"typedef enum \\fBBrotliEncoderOperation\\fP \\fBBrotliEncoderOperation\\fP\"\n.br\n.RI \"\\fIOperations that can be performed by streaming encoder\\&. \\fP\"\n.ti -1c\n.RI \"typedef enum \\fBBrotliEncoderParameter\\fP \\fBBrotliEncoderParameter\\fP\"\n.br\n.RI \"\\fIOptions to be used with \\fBBrotliEncoderSetParameter\\fP\\&. \\fP\"\n.ti -1c\n.RI \"typedef struct BrotliEncoderStateStruct \\fBBrotliEncoderState\\fP\"\n.br\n.RI \"\\fIOpaque structure that holds encoder state\\&. \\fP\"\n.in -1c\n.SS \"Enumerations\"\n.SS \"Functions\"\n\n.in +1c\n.ti -1c\n.RI \"\\fBBROTLI_BOOL\\fP \\fBBrotliEncoderAttachPreparedDictionary\\fP (\\fBBrotliEncoderState\\fP *state, const BrotliEncoderPreparedDictionary *dictionary)\"\n.br\n.RI \"\\fIAttaches a prepared dictionary of any type to the encoder\\&. \\fP\"\n.ti -1c\n.RI \"\\fBBROTLI_BOOL\\fP \\fBBrotliEncoderCompress\\fP (int quality, int lgwin, \\fBBrotliEncoderMode\\fP mode, size_t input_size, const uint8_t input_buffer[input_size], size_t *encoded_size, uint8_t encoded_buffer[*encoded_size])\"\n.br\n.RI \"\\fIPerforms one-shot memory-to-memory compression\\&. \\fP\"\n.ti -1c\n.RI \"\\fBBROTLI_BOOL\\fP \\fBBrotliEncoderCompressStream\\fP (\\fBBrotliEncoderState\\fP *state, \\fBBrotliEncoderOperation\\fP op, size_t *available_in, const uint8_t **next_in, size_t *available_out, uint8_t **next_out, size_t *total_out)\"\n.br\n.RI \"\\fICompresses input stream to output stream\\&. \\fP\"\n.ti -1c\n.RI \"\\fBBrotliEncoderState\\fP * \\fBBrotliEncoderCreateInstance\\fP (\\fBbrotli_alloc_func\\fP alloc_func, \\fBbrotli_free_func\\fP free_func, void *opaque)\"\n.br\n.RI \"\\fICreates an instance of \\fBBrotliEncoderState\\fP and initializes it\\&. \\fP\"\n.ti -1c\n.RI \"void \\fBBrotliEncoderDestroyInstance\\fP (\\fBBrotliEncoderState\\fP *state)\"\n.br\n.RI \"\\fIDeinitializes and frees \\fBBrotliEncoderState\\fP instance\\&. \\fP\"\n.ti -1c\n.RI \"\\fBBROTLI_BOOL\\fP \\fBBrotliEncoderHasMoreOutput\\fP (\\fBBrotliEncoderState\\fP *state)\"\n.br\n.RI \"\\fIChecks if encoder has more output\\&. \\fP\"\n.ti -1c\n.RI \"\\fBBROTLI_BOOL\\fP \\fBBrotliEncoderIsFinished\\fP (\\fBBrotliEncoderState\\fP *state)\"\n.br\n.RI \"\\fIChecks if encoder instance reached the final state\\&. \\fP\"\n.ti -1c\n.RI \"size_t \\fBBrotliEncoderMaxCompressedSize\\fP (size_t input_size)\"\n.br\n.RI \"\\fICalculates the output size bound for the given \\fCinput_size\\fP\\&. \\fP\"\n.ti -1c\n.RI \"BrotliEncoderPreparedDictionary * \\fBBrotliEncoderPrepareDictionary\\fP (BrotliSharedDictionaryType type, size_t data_size, const uint8_t data[data_size], int quality, \\fBbrotli_alloc_func\\fP alloc_func, \\fBbrotli_free_func\\fP free_func, void *opaque)\"\n.br\n.RI \"\\fIPrepares a shared dictionary from the given file format for the encoder\\&. \\fP\"\n.ti -1c\n.RI \"\\fBBROTLI_BOOL\\fP \\fBBrotliEncoderSetParameter\\fP (\\fBBrotliEncoderState\\fP *state, \\fBBrotliEncoderParameter\\fP param, uint32_t value)\"\n.br\n.RI \"\\fISets the specified parameter to the given encoder instance\\&. \\fP\"\n.ti -1c\n.RI \"const uint8_t * \\fBBrotliEncoderTakeOutput\\fP (\\fBBrotliEncoderState\\fP *state, size_t *size)\"\n.br\n.RI \"\\fIAcquires pointer to internal output buffer\\&. \\fP\"\n.ti -1c\n.RI \"uint32_t \\fBBrotliEncoderVersion\\fP (void)\"\n.br\n.RI \"\\fIGets an encoder library version\\&. \\fP\"\n.in -1c\n.SH \"Detailed Description\"\n.PP \nAPI for Brotli compression\\&. \n\n\n.SH \"Macro Definition Documentation\"\n.PP \n.SS \"#define BROTLI_DEFAULT_MODE   \\fBBROTLI_MODE_GENERIC\\fP\"\n\n.PP\nDefault value for \\fBBROTLI_PARAM_MODE\\fP parameter\\&. \n.SS \"#define BROTLI_DEFAULT_QUALITY   11\"\n\n.PP\nDefault value for \\fBBROTLI_PARAM_QUALITY\\fP parameter\\&. \n.SS \"#define BROTLI_DEFAULT_WINDOW   22\"\n\n.PP\nDefault value for \\fBBROTLI_PARAM_LGWIN\\fP parameter\\&. \n.SS \"#define BROTLI_MAX_INPUT_BLOCK_BITS   24\"\n\n.PP\nMaximal value for \\fBBROTLI_PARAM_LGBLOCK\\fP parameter\\&. \n.SS \"#define BROTLI_MAX_QUALITY   11\"\n\n.PP\nMaximal value for \\fBBROTLI_PARAM_QUALITY\\fP parameter\\&. \n.SS \"#define BROTLI_MAX_WINDOW_BITS   24\"\n\n.PP\nMaximal value for \\fBBROTLI_PARAM_LGWIN\\fP parameter\\&. \n.PP\n\\fBNote:\\fP\n.RS 4\nequal to \\fCBROTLI_MAX_DISTANCE_BITS\\fP constant\\&. \n.RE\n.PP\n\n.SS \"#define BROTLI_MIN_INPUT_BLOCK_BITS   16\"\n\n.PP\nMinimal value for \\fBBROTLI_PARAM_LGBLOCK\\fP parameter\\&. \n.SS \"#define BROTLI_MIN_QUALITY   0\"\n\n.PP\nMinimal value for \\fBBROTLI_PARAM_QUALITY\\fP parameter\\&. \n.SS \"#define BROTLI_MIN_WINDOW_BITS   10\"\n\n.PP\nMinimal value for \\fBBROTLI_PARAM_LGWIN\\fP parameter\\&. \n.SH \"Typedef Documentation\"\n.PP \n.SS \"typedef enum \\fBBrotliEncoderMode\\fP  \\fBBrotliEncoderMode\\fP\"\n\n.PP\nOptions for \\fBBROTLI_PARAM_MODE\\fP parameter\\&. \n.SS \"typedef enum \\fBBrotliEncoderOperation\\fP  \\fBBrotliEncoderOperation\\fP\"\n\n.PP\nOperations that can be performed by streaming encoder\\&. \n.SS \"typedef enum \\fBBrotliEncoderParameter\\fP  \\fBBrotliEncoderParameter\\fP\"\n\n.PP\nOptions to be used with \\fBBrotliEncoderSetParameter\\fP\\&. \n.SS \"typedef struct BrotliEncoderStateStruct \\fBBrotliEncoderState\\fP\"\n\n.PP\nOpaque structure that holds encoder state\\&. Allocated and initialized with \\fBBrotliEncoderCreateInstance\\fP\\&. Cleaned up and deallocated with \\fBBrotliEncoderDestroyInstance\\fP\\&. \n.SH \"Enumeration Type Documentation\"\n.PP \n.SS \"enum \\fBBrotliEncoderMode\\fP\"\n\n.PP\nOptions for \\fBBROTLI_PARAM_MODE\\fP parameter\\&. \n.PP\n\\fBEnumerator\\fP\n.in +1c\n.TP\n\\fB\\fIBROTLI_MODE_GENERIC \\fP\\fP\nDefault compression mode\\&. In this mode compressor does not know anything in advance about the properties of the input\\&. \n.TP\n\\fB\\fIBROTLI_MODE_TEXT \\fP\\fP\nCompression mode for UTF-8 formatted text input\\&. \n.TP\n\\fB\\fIBROTLI_MODE_FONT \\fP\\fP\nCompression mode used in WOFF 2\\&.0\\&. \n.SS \"enum \\fBBrotliEncoderOperation\\fP\"\n\n.PP\nOperations that can be performed by streaming encoder\\&. \n.PP\n\\fBEnumerator\\fP\n.in +1c\n.TP\n\\fB\\fIBROTLI_OPERATION_PROCESS \\fP\\fP\nProcess input\\&. Encoder may postpone producing output, until it has processed enough input\\&. \n.TP\n\\fB\\fIBROTLI_OPERATION_FLUSH \\fP\\fP\nProduce output for all processed input\\&. Actual flush is performed when input stream is depleted and there is enough space in output stream\\&. This means that client should repeat \\fBBROTLI_OPERATION_FLUSH\\fP operation until \\fCavailable_in\\fP becomes \\fC0\\fP, and \\fBBrotliEncoderHasMoreOutput\\fP returns \\fBBROTLI_FALSE\\fP\\&. If output is acquired via \\fBBrotliEncoderTakeOutput\\fP, then operation should be repeated after output buffer is drained\\&.\n.PP\n\\fBWarning:\\fP\n.RS 4\nUntil flush is complete, client \\fBSHOULD\\fP \\fBNOT\\fP swap, reduce or extend input stream\\&.\n.RE\n.PP\nWhen flush is complete, output data will be sufficient for decoder to reproduce all the given input\\&. \n.TP\n\\fB\\fIBROTLI_OPERATION_FINISH \\fP\\fP\nFinalize the stream\\&. Actual finalization is performed when input stream is depleted and there is enough space in output stream\\&. This means that client should repeat \\fBBROTLI_OPERATION_FINISH\\fP operation until \\fCavailable_in\\fP becomes \\fC0\\fP, and \\fBBrotliEncoderHasMoreOutput\\fP returns \\fBBROTLI_FALSE\\fP\\&. If output is acquired via \\fBBrotliEncoderTakeOutput\\fP, then operation should be repeated after output buffer is drained\\&.\n.PP\n\\fBWarning:\\fP\n.RS 4\nUntil finalization is complete, client \\fBSHOULD\\fP \\fBNOT\\fP swap, reduce or extend input stream\\&.\n.RE\n.PP\nHelper function \\fBBrotliEncoderIsFinished\\fP checks if stream is finalized and output fully dumped\\&.\n.PP\nAdding more input data to finalized stream is impossible\\&. \n.TP\n\\fB\\fIBROTLI_OPERATION_EMIT_METADATA \\fP\\fP\nEmit metadata block to stream\\&. Metadata is opaque to Brotli: neither encoder, nor decoder processes this data or relies on it\\&. It may be used to pass some extra information from encoder client to decoder client without interfering with main data stream\\&.\n.PP\n\\fBNote:\\fP\n.RS 4\nEncoder may emit empty metadata blocks internally, to pad encoded stream to byte boundary\\&.\n.RE\n.PP\n\\fBWarning:\\fP\n.RS 4\nUntil emitting metadata is complete client \\fBSHOULD\\fP \\fBNOT\\fP swap, reduce or extend input stream\\&.\n.PP\nThe whole content of input buffer is considered to be the content of metadata block\\&. Do \\fBNOT\\fP \\fIappend\\fP metadata to input stream, before it is depleted with other operations\\&.\n.RE\n.PP\nStream is soft-flushed before metadata block is emitted\\&. Metadata block \\fBMUST\\fP be no longer than than 16MiB\\&. \n.SS \"enum \\fBBrotliEncoderParameter\\fP\"\n\n.PP\nOptions to be used with \\fBBrotliEncoderSetParameter\\fP\\&. \n.PP\n\\fBEnumerator\\fP\n.in +1c\n.TP\n\\fB\\fIBROTLI_PARAM_MODE \\fP\\fP\nTune encoder for specific input\\&. \\fBBrotliEncoderMode\\fP enumerates all available values\\&. \n.TP\n\\fB\\fIBROTLI_PARAM_QUALITY \\fP\\fP\nThe main compression speed-density lever\\&. The higher the quality, the slower the compression\\&. Range is from \\fBBROTLI_MIN_QUALITY\\fP to \\fBBROTLI_MAX_QUALITY\\fP\\&. \n.TP\n\\fB\\fIBROTLI_PARAM_LGWIN \\fP\\fP\nRecommended sliding LZ77 window size\\&. Encoder may reduce this value, e\\&.g\\&. if input is much smaller than window size\\&.\n.PP\nWindow size is \\fC(1 << value) - 16\\fP\\&.\n.PP\nRange is from \\fBBROTLI_MIN_WINDOW_BITS\\fP to \\fBBROTLI_MAX_WINDOW_BITS\\fP\\&. \n.TP\n\\fB\\fIBROTLI_PARAM_LGBLOCK \\fP\\fP\nRecommended input block size\\&. Encoder may reduce this value, e\\&.g\\&. if input is much smaller than input block size\\&.\n.PP\nRange is from \\fBBROTLI_MIN_INPUT_BLOCK_BITS\\fP to \\fBBROTLI_MAX_INPUT_BLOCK_BITS\\fP\\&.\n.PP\n\\fBNote:\\fP\n.RS 4\nBigger input block size allows better compression, but consumes more memory\\&. \n.br\n The rough formula of memory used for temporary input storage is \\fC3 << lgBlock\\fP\\&. \n.RE\n.PP\n\n.TP\n\\fB\\fIBROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING \\fP\\fP\nFlag that affects usage of 'literal context modeling' format feature\\&. This flag is a 'decoding-speed vs compression ratio' trade-off\\&. \n.TP\n\\fB\\fIBROTLI_PARAM_SIZE_HINT \\fP\\fP\nEstimated total input size for all \\fBBrotliEncoderCompressStream\\fP calls\\&. The default value is 0, which means that the total input size is unknown\\&. \n.TP\n\\fB\\fIBROTLI_PARAM_LARGE_WINDOW \\fP\\fP\nFlag that determines if 'Large Window Brotli' is used\\&. \n.TP\n\\fB\\fIBROTLI_PARAM_NPOSTFIX \\fP\\fP\nRecommended number of postfix bits (NPOSTFIX)\\&. Encoder may change this value\\&.\n.PP\nRange is from 0 to \\fBBROTLI_MAX_NPOSTFIX\\fP\\&. \n.TP\n\\fB\\fIBROTLI_PARAM_NDIRECT \\fP\\fP\nRecommended number of direct distance codes (NDIRECT)\\&. Encoder may change this value\\&.\n.PP\nRange is from 0 to (15 << NPOSTFIX) in steps of (1 << NPOSTFIX)\\&. \n.TP\n\\fB\\fIBROTLI_PARAM_STREAM_OFFSET \\fP\\fP\nNumber of bytes of input stream already processed by a different instance\\&. \n.PP\n\\fBNote:\\fP\n.RS 4\nIt is important to configure all the encoder instances with same parameters (except this one) in order to allow all the encoded parts obey the same restrictions implied by header\\&.\n.RE\n.PP\nIf offset is not 0, then stream header is omitted\\&. In any case output start is byte aligned, so for proper streams stitching 'predecessor' stream must be flushed\\&.\n.PP\nRange is not artificially limited, but all the values greater or equal to maximal window size have the same effect\\&. Values greater than 2**30 are not allowed\\&. \n.SH \"Function Documentation\"\n.PP \n.SS \"\\fBBROTLI_BOOL\\fP BrotliEncoderAttachPreparedDictionary (\\fBBrotliEncoderState\\fP * state, const BrotliEncoderPreparedDictionary * dictionary)\"\n\n.PP\nAttaches a prepared dictionary of any type to the encoder\\&. Can be used multiple times to attach multiple dictionaries\\&. The dictionary type was determined by BrotliEncoderPrepareDictionary\\&. Multiple raw prefix dictionaries and/or max 1 serialized dictionary with custom words can be attached\\&.\n.PP\n\\fBReturns:\\fP\n.RS 4\n\\fBBROTLI_FALSE\\fP in case of error \n.PP\n\\fBBROTLI_TRUE\\fP otherwise \n.RE\n.PP\n\n.SS \"\\fBBROTLI_BOOL\\fP BrotliEncoderCompress (int quality, int lgwin, \\fBBrotliEncoderMode\\fP mode, size_t input_size, const uint8_t input_buffer[input_size], size_t * encoded_size, uint8_t encoded_buffer[*encoded_size])\"\n\n.PP\nPerforms one-shot memory-to-memory compression\\&. Compresses the data in \\fCinput_buffer\\fP into \\fCencoded_buffer\\fP, and sets \\fC*encoded_size\\fP to the compressed length\\&.\n.PP\n\\fBNote:\\fP\n.RS 4\nIf \\fBBrotliEncoderMaxCompressedSize\\fP(\\fCinput_size\\fP) returns non-zero value, then output is guaranteed to be no longer than that\\&.\n.PP\nIf \\fClgwin\\fP is greater than \\fBBROTLI_MAX_WINDOW_BITS\\fP then resulting stream might be incompatible with RFC 7932; to decode such streams, decoder should be configured with \\fBBROTLI_DECODER_PARAM_LARGE_WINDOW\\fP = \\fC1\\fP \n.RE\n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIquality\\fP quality parameter value, e\\&.g\\&. \\fBBROTLI_DEFAULT_QUALITY\\fP \n.br\n\\fIlgwin\\fP lgwin parameter value, e\\&.g\\&. \\fBBROTLI_DEFAULT_WINDOW\\fP \n.br\n\\fImode\\fP mode parameter value, e\\&.g\\&. \\fBBROTLI_DEFAULT_MODE\\fP \n.br\n\\fIinput_size\\fP size of \\fCinput_buffer\\fP \n.br\n\\fIinput_buffer\\fP input data buffer with at least \\fCinput_size\\fP addressable bytes \n.br\n\\fIencoded_size\\fP \\fBin:\\fP size of \\fCencoded_buffer\\fP; \n.br\n \\fBout:\\fP length of compressed data written to \\fCencoded_buffer\\fP, or \\fC0\\fP if compression fails \n.br\n\\fIencoded_buffer\\fP compressed data destination buffer \n.RE\n.PP\n\\fBReturns:\\fP\n.RS 4\n\\fBBROTLI_FALSE\\fP in case of compression error \n.PP\n\\fBBROTLI_FALSE\\fP if output buffer is too small \n.PP\n\\fBBROTLI_TRUE\\fP otherwise \n.RE\n.PP\n\n.SS \"\\fBBROTLI_BOOL\\fP BrotliEncoderCompressStream (\\fBBrotliEncoderState\\fP * state, \\fBBrotliEncoderOperation\\fP op, size_t * available_in, const uint8_t ** next_in, size_t * available_out, uint8_t ** next_out, size_t * total_out)\"\n\n.PP\nCompresses input stream to output stream\\&. The values \\fC*available_in\\fP and \\fC*available_out\\fP must specify the number of bytes addressable at \\fC*next_in\\fP and \\fC*next_out\\fP respectively\\&. When \\fC*available_out\\fP is \\fC0\\fP, \\fCnext_out\\fP is allowed to be \\fCNULL\\fP\\&.\n.PP\nAfter each call, \\fC*available_in\\fP will be decremented by the amount of input bytes consumed, and the \\fC*next_in\\fP pointer will be incremented by that amount\\&. Similarly, \\fC*available_out\\fP will be decremented by the amount of output bytes written, and the \\fC*next_out\\fP pointer will be incremented by that amount\\&.\n.PP\n\\fCtotal_out\\fP, if it is not a null-pointer, will be set to the number of bytes compressed since the last \\fCstate\\fP initialization\\&.\n.PP\nInternally workflow consists of 3 tasks:\n.IP \"1.\" 4\n(optionally) copy input data to internal buffer\n.IP \"2.\" 4\nactually compress data and (optionally) store it to internal buffer\n.IP \"3.\" 4\n(optionally) copy compressed bytes from internal buffer to output stream\n.PP\n.PP\nWhenever all 3 tasks can't move forward anymore, or error occurs, this method returns the control flow to caller\\&.\n.PP\n\\fCop\\fP is used to perform flush, finish the stream, or inject metadata block\\&. See \\fBBrotliEncoderOperation\\fP for more information\\&.\n.PP\nFlushing the stream means forcing encoding of all input passed to encoder and completing the current output block, so it could be fully decoded by stream decoder\\&. To perform flush set \\fCop\\fP to \\fBBROTLI_OPERATION_FLUSH\\fP\\&. Under some circumstances (e\\&.g\\&. lack of output stream capacity) this operation would require several calls to \\fBBrotliEncoderCompressStream\\fP\\&. The method must be called again until both input stream is depleted and encoder has no more output (see \\fBBrotliEncoderHasMoreOutput\\fP) after the method is called\\&.\n.PP\nFinishing the stream means encoding of all input passed to encoder and adding specific 'final' marks, so stream decoder could determine that stream is complete\\&. To perform finish set \\fCop\\fP to \\fBBROTLI_OPERATION_FINISH\\fP\\&. Under some circumstances (e\\&.g\\&. lack of output stream capacity) this operation would require several calls to \\fBBrotliEncoderCompressStream\\fP\\&. The method must be called again until both input stream is depleted and encoder has no more output (see \\fBBrotliEncoderHasMoreOutput\\fP) after the method is called\\&.\n.PP\n\\fBWarning:\\fP\n.RS 4\nWhen flushing and finishing, \\fCop\\fP should not change until operation is complete; input stream should not be swapped, reduced or extended as well\\&.\n.RE\n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIstate\\fP encoder instance \n.br\n\\fIop\\fP requested operation \n.br\n\\fIavailable_in\\fP \\fBin:\\fP amount of available input; \n.br\n \\fBout:\\fP amount of unused input \n.br\n\\fInext_in\\fP pointer to the next input byte \n.br\n\\fIavailable_out\\fP \\fBin:\\fP length of output buffer; \n.br\n \\fBout:\\fP remaining size of output buffer \n.br\n\\fInext_out\\fP compressed output buffer cursor; can be \\fCNULL\\fP if \\fCavailable_out\\fP is \\fC0\\fP \n.br\n\\fItotal_out\\fP number of bytes produced so far; can be \\fCNULL\\fP \n.RE\n.PP\n\\fBReturns:\\fP\n.RS 4\n\\fBBROTLI_FALSE\\fP if there was an error \n.PP\n\\fBBROTLI_TRUE\\fP otherwise \n.RE\n.PP\n\n.SS \"\\fBBrotliEncoderState\\fP* BrotliEncoderCreateInstance (\\fBbrotli_alloc_func\\fP alloc_func, \\fBbrotli_free_func\\fP free_func, void * opaque)\"\n\n.PP\nCreates an instance of \\fBBrotliEncoderState\\fP and initializes it\\&. \\fCalloc_func\\fP and \\fCfree_func\\fP \\fBMUST\\fP be both zero or both non-zero\\&. In the case they are both zero, default memory allocators are used\\&. \\fCopaque\\fP is passed to \\fCalloc_func\\fP and \\fCfree_func\\fP when they are called\\&. \\fCfree_func\\fP has to return without doing anything when asked to free a NULL pointer\\&.\n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIalloc_func\\fP custom memory allocation function \n.br\n\\fIfree_func\\fP custom memory free function \n.br\n\\fIopaque\\fP custom memory manager handle \n.RE\n.PP\n\\fBReturns:\\fP\n.RS 4\n\\fC0\\fP if instance can not be allocated or initialized \n.PP\npointer to initialized \\fBBrotliEncoderState\\fP otherwise \n.RE\n.PP\n\n.SS \"void BrotliEncoderDestroyInstance (\\fBBrotliEncoderState\\fP * state)\"\n\n.PP\nDeinitializes and frees \\fBBrotliEncoderState\\fP instance\\&. \n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIstate\\fP decoder instance to be cleaned up and deallocated \n.RE\n.PP\n\n.SS \"\\fBBROTLI_BOOL\\fP BrotliEncoderHasMoreOutput (\\fBBrotliEncoderState\\fP * state)\"\n\n.PP\nChecks if encoder has more output\\&. \n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIstate\\fP encoder instance \n.RE\n.PP\n\\fBReturns:\\fP\n.RS 4\n\\fBBROTLI_TRUE\\fP, if encoder has some unconsumed output \n.PP\n\\fBBROTLI_FALSE\\fP otherwise \n.RE\n.PP\n\n.SS \"\\fBBROTLI_BOOL\\fP BrotliEncoderIsFinished (\\fBBrotliEncoderState\\fP * state)\"\n\n.PP\nChecks if encoder instance reached the final state\\&. \n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIstate\\fP encoder instance \n.RE\n.PP\n\\fBReturns:\\fP\n.RS 4\n\\fBBROTLI_TRUE\\fP if encoder is in a state where it reached the end of the input and produced all of the output \n.PP\n\\fBBROTLI_FALSE\\fP otherwise \n.RE\n.PP\n\n.SS \"size_t BrotliEncoderMaxCompressedSize (size_t input_size)\"\n\n.PP\nCalculates the output size bound for the given \\fCinput_size\\fP\\&. \n.PP\n\\fBWarning:\\fP\n.RS 4\nResult is only valid if quality is at least \\fC2\\fP and, in case \\fBBrotliEncoderCompressStream\\fP was used, no flushes (\\fBBROTLI_OPERATION_FLUSH\\fP) were performed\\&.\n.RE\n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIinput_size\\fP size of projected input \n.RE\n.PP\n\\fBReturns:\\fP\n.RS 4\n\\fC0\\fP if result does not fit \\fCsize_t\\fP \n.RE\n.PP\n\n.SS \"BrotliEncoderPreparedDictionary* BrotliEncoderPrepareDictionary (BrotliSharedDictionaryType type, size_t data_size, const uint8_t data[data_size], int quality, \\fBbrotli_alloc_func\\fP alloc_func, \\fBbrotli_free_func\\fP free_func, void * opaque)\"\n\n.PP\nPrepares a shared dictionary from the given file format for the encoder\\&. \\fCalloc_func\\fP and \\fCfree_func\\fP \\fBMUST\\fP be both zero or both non-zero\\&. In the case they are both zero, default memory allocators are used\\&. \\fCopaque\\fP is passed to \\fCalloc_func\\fP and \\fCfree_func\\fP when they are called\\&. \\fCfree_func\\fP has to return without doing anything when asked to free a NULL pointer\\&.\n.PP\n\\fBWarning:\\fP\n.RS 4\nCreated instance is 'lean'; it does not contain copy of \\fCdata\\fP, rather it contains only pointer to it; therefore, \\fCdata\\fP \\fBMUST\\fP outlive the created instance\\&.\n.RE\n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fItype\\fP type of dictionary stored in data \n.br\n\\fIdata_size\\fP size of \\fCdata\\fP buffer \n.br\n\\fIdata\\fP pointer to the dictionary data \n.br\n\\fIquality\\fP the maximum Brotli quality to prepare the dictionary for, use BROTLI_MAX_QUALITY by default \n.br\n\\fIalloc_func\\fP custom memory allocation function \n.br\n\\fIfree_func\\fP custom memory free function \n.br\n\\fIopaque\\fP custom memory manager handle \n.RE\n.PP\n\n.SS \"\\fBBROTLI_BOOL\\fP BrotliEncoderSetParameter (\\fBBrotliEncoderState\\fP * state, \\fBBrotliEncoderParameter\\fP param, uint32_t value)\"\n\n.PP\nSets the specified parameter to the given encoder instance\\&. \n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIstate\\fP encoder instance \n.br\n\\fIparam\\fP parameter to set \n.br\n\\fIvalue\\fP new parameter value \n.RE\n.PP\n\\fBReturns:\\fP\n.RS 4\n\\fBBROTLI_FALSE\\fP if parameter is unrecognized, or value is invalid \n.PP\n\\fBBROTLI_FALSE\\fP if value of parameter can not be changed at current encoder state (e\\&.g\\&. when encoding is started, window size might be already encoded and therefore it is impossible to change it) \n.PP\n\\fBBROTLI_TRUE\\fP if value is accepted \n.RE\n.PP\n\\fBWarning:\\fP\n.RS 4\ninvalid values might be accepted in case they would not break encoding process\\&. \n.RE\n.PP\n\n.SS \"const uint8_t* BrotliEncoderTakeOutput (\\fBBrotliEncoderState\\fP * state, size_t * size)\"\n\n.PP\nAcquires pointer to internal output buffer\\&. This method is used to make language bindings easier and more efficient:\n.IP \"1.\" 4\npush data to \\fBBrotliEncoderCompressStream\\fP, until \\fBBrotliEncoderHasMoreOutput\\fP returns BROTLI_TRUE\n.IP \"2.\" 4\nuse \\fBBrotliEncoderTakeOutput\\fP to peek bytes and copy to language-specific entity\n.PP\n.PP\nAlso this could be useful if there is an output stream that is able to consume all the provided data (e\\&.g\\&. when data is saved to file system)\\&.\n.PP\n\\fBAttention:\\fP\n.RS 4\nAfter every call to \\fBBrotliEncoderTakeOutput\\fP \\fC*size\\fP bytes of output are considered consumed for all consecutive calls to the instance methods; returned pointer becomes invalidated as well\\&.\n.RE\n.PP\n\\fBNote:\\fP\n.RS 4\nEncoder output is not guaranteed to be contiguous\\&. This means that after the size-unrestricted call to \\fBBrotliEncoderTakeOutput\\fP, immediate next call to \\fBBrotliEncoderTakeOutput\\fP may return more data\\&.\n.RE\n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIstate\\fP encoder instance \n.br\n\\fIsize\\fP \\fBin:\\fP number of bytes caller is ready to take, \\fC0\\fP if any amount could be handled; \n.br\n \\fBout:\\fP amount of data pointed by returned pointer and considered consumed; \n.br\n out value is never greater than in value, unless it is \\fC0\\fP \n.RE\n.PP\n\\fBReturns:\\fP\n.RS 4\npointer to output data \n.RE\n.PP\n\n.SS \"uint32_t BrotliEncoderVersion (void)\"\n\n.PP\nGets an encoder library version\\&. Look at BROTLI_MAKE_HEX_VERSION for more information\\&. \n.SH \"Author\"\n.PP \nGenerated automatically by Doxygen for Brotli from the source code\\&.\n"
  },
  {
    "path": "docs/types.h.3",
    "content": ".TH \"types.h\" 3 \"August 2021\" \"Brotli\" \\\" -*- nroff -*-\n.ad l\n.nh\n.SH NAME\ntypes.h \\- Common types used in decoder and encoder API\\&.  \n\n.SH SYNOPSIS\n.br\n.PP\n.SS \"Macros\"\n\n.in +1c\n.ti -1c\n.RI \"#define \\fBBROTLI_BOOL\\fP   int\"\n.br\n.RI \"\\fIA portable \\fCbool\\fP replacement\\&. \\fP\"\n.ti -1c\n.RI \"#define \\fBBROTLI_FALSE\\fP   0\"\n.br\n.RI \"\\fIPortable \\fCfalse\\fP replacement\\&. \\fP\"\n.ti -1c\n.RI \"#define \\fBBROTLI_TRUE\\fP   1\"\n.br\n.RI \"\\fIPortable \\fCtrue\\fP replacement\\&. \\fP\"\n.ti -1c\n.RI \"#define \\fBTO_BROTLI_BOOL\\fP(X)   (!!(X) ? \\fBBROTLI_TRUE\\fP : \\fBBROTLI_FALSE\\fP)\"\n.br\n.RI \"\\fI\\fCbool\\fP to \\fBBROTLI_BOOL\\fP conversion macros\\&. \\fP\"\n.in -1c\n.SS \"Typedefs\"\n\n.in +1c\n.ti -1c\n.RI \"typedef void *(* \\fBbrotli_alloc_func\\fP) (void *opaque, size_t size)\"\n.br\n.RI \"\\fIAllocating function pointer type\\&. \\fP\"\n.ti -1c\n.RI \"typedef void(* \\fBbrotli_free_func\\fP) (void *opaque, void *address)\"\n.br\n.RI \"\\fIDeallocating function pointer type\\&. \\fP\"\n.in -1c\n.SH \"Detailed Description\"\n.PP \nCommon types used in decoder and encoder API\\&. \n\n\n.SH \"Macro Definition Documentation\"\n.PP \n.SS \"#define BROTLI_BOOL   int\"\n\n.PP\nA portable \\fCbool\\fP replacement\\&. \\fBBROTLI_BOOL\\fP is a 'documentation' type: actually it is \\fCint\\fP, but in API it denotes a type, whose only values are \\fBBROTLI_TRUE\\fP and \\fBBROTLI_FALSE\\fP\\&.\n.PP\n\\fBBROTLI_BOOL\\fP values passed to Brotli should either be \\fBBROTLI_TRUE\\fP or \\fBBROTLI_FALSE\\fP, or be a result of \\fBTO_BROTLI_BOOL\\fP macros\\&.\n.PP\n\\fBBROTLI_BOOL\\fP values returned by Brotli should not be tested for equality with \\fCtrue\\fP, \\fCfalse\\fP, \\fBBROTLI_TRUE\\fP, \\fBBROTLI_FALSE\\fP, but rather should be evaluated, for example:\n.PP\n.nf\nif (SomeBrotliFunction(encoder, BROTLI_TRUE) &&\n    !OtherBrotliFunction(decoder, BROTLI_FALSE)) {\n  bool x = !!YetAnotherBrotliFunction(encoder, TO_BROLTI_BOOL(2 * 2 == 4));\n  DoSomething(x);\n}\n\n.fi\n.PP\n \n.SS \"#define BROTLI_FALSE   0\"\n\n.PP\nPortable \\fCfalse\\fP replacement\\&. \n.SS \"#define BROTLI_TRUE   1\"\n\n.PP\nPortable \\fCtrue\\fP replacement\\&. \n.SS \"#define TO_BROTLI_BOOL(X)   (!!(X) ? \\fBBROTLI_TRUE\\fP : \\fBBROTLI_FALSE\\fP)\"\n\n.PP\n\\fCbool\\fP to \\fBBROTLI_BOOL\\fP conversion macros\\&. \n.SH \"Typedef Documentation\"\n.PP \n.SS \"typedef void*(* brotli_alloc_func) (void *opaque, size_t size)\"\n\n.PP\nAllocating function pointer type\\&. \n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIopaque\\fP custom memory manager handle provided by client \n.br\n\\fIsize\\fP requested memory region size; can not be \\fC0\\fP \n.RE\n.PP\n\\fBReturns:\\fP\n.RS 4\n\\fC0\\fP in the case of failure \n.PP\na valid pointer to a memory region of at least \\fCsize\\fP bytes long otherwise \n.RE\n.PP\n\n.SS \"typedef void(* brotli_free_func) (void *opaque, void *address)\"\n\n.PP\nDeallocating function pointer type\\&. This function \\fBSHOULD\\fP do nothing if \\fCaddress\\fP is \\fC0\\fP\\&.\n.PP\n\\fBParameters:\\fP\n.RS 4\n\\fIopaque\\fP custom memory manager handle provided by client \n.br\n\\fIaddress\\fP memory region pointer returned by \\fBbrotli_alloc_func\\fP, or \\fC0\\fP \n.RE\n.PP\n\n.SH \"Author\"\n.PP \nGenerated automatically by Doxygen for Brotli from the source code\\&.\n"
  },
  {
    "path": "fetch-spec/shared-brotli-fetch-spec.txt",
    "content": "[DRAFT]\n\nIntroduction:\n\nThis document is a draft proposal for Shard Brotli dictionaries in the fetch spec\n(https://fetch.spec.whatwg.org/).\n\nThe goal is to add support for custom dictionaries for Brotli. A dictionary is used\nto improve compression. A client can download a dictionary from a server and then\nuse it to decompress resources compressed with this dictionary.\n\nThis document specifies how the client and server negotiate the dictionary over HTTP.\nA high level overview is as follows: The server adds an HTTP header to the response\nwith a URL of the dictionary. The browser downloads the dictionary from the URL and\nthen caches it so it can be reused. The server also adds a checksum to an HTTP header\nwhich the client uses to verify the dictionary. Caching, CORS, and other existing\nmechanisms are used. A dictionary can be a pre-made static dictionary, but does not\nhave to be, for example a previous page loaded from this server, or an old version\nof a page, can be used as well.\n\nBelow are changes and additions to add Shared Brotli dictionaries to the fetch spec\nat https://fetch.spec.whatwg.org/:\n\nAdditions to `4.5. HTTP-network-or-cache fetch`\n\nAdd to point `15. Modify httpRequest’s header list per HTTP.`:\n\n  If the recursive-sbr flag is enabled, `Accept-Encoding` may not contain `sbr`\n  [NOTE-BOX] When sbr can be used, it is possible to add a header Available-Dict\n  with the URL and hash code of a cached resource. The server may then use it as\n  shared dictionary.\n\nAdditions to `4.6. HTTP-network fetch`\n\nAdd after point `10. Run these steps, but abort if the ongoing fetch is terminated`:\n\n  11. Let codings be the result of extracting header list values given\n      `Content-Encoding` and response’s header list.\n  12. If codings contains `sbr`\n    1. If the header list does not contain `Sbr-Dict`, return a network error\n    2. Let dictionaryId be the result of extracting header list values given\n       `Sbr-Dict` and response’s header list.\n\nTo point `12. Run these substeps in parallel:`, add new first sub-point:\n\n  1. If codings contains `sbr`, run these subsubsteps:\n      1. Let dictionaryResponse be the result of performing a\n         Shared-Brotli-dictionary fetch given dictionaryId and request.\n      2. If dictionaryResponse is a network error, return a network error.\n\nChange point `12.4. Set bytes to the result of handling content codings given codings and bytes.` to:\n\n  4. Set bytes to the result of handling content codings given codings, bytes\n     and, if codings contains `sbr`, also dictionaryResponse's body.\n     [NOTE-BOX] If the dictionary is still being fetched, which happens in\n     parallel, enqueue bytes in a compressed buffer and handle content coding\n     once the dictionary is fetched\n\nAdditions to `2.2.4. Bodies`\n\n\nChange last section `To handle content codings ...` to:\n\n  To handle content codings given codings, bytes and optionally a dictionary, run these substeps:\n    1. If codings are not supported, return bytes.\n    2. If the codings has `sbr`, run these subsubsteps:\n       a. Return the result of decoding bytes and dictionary with the Shared\n          Brotli decoder.\n          [Shared Brotli Spec] [IANA Brotli](https://www.iana.org/assignments/http-parameters/http-parameters.xhtml)\n    3. Else:\n       a. Return the result of decoding bytes with the given codings, as\n          explained in HTTP. [HTTP] [HTTP-SEMANTICS] [HTTP-COND] [HTTP-CACHING]\n          [HTTP-AUTH]\n\nNew section `4.10. Shared-Brotli-dictionary fetch`\n\n  To perform a Shared-Brotli-dictionary fetch using dictionaryId, and parentRequest, perform these steps:\n\n  1. Let dictionaryURL be the URL extracted from dictionaryId\n  2. Let dictionaryHash be the hash id extracted from dictionaryId\n  3. Let dictionaryRequest be a new request whose method is `GET`, url is\n     dictionaryURL, mode is \"cors\", and client is parentRequest's client.\n  4. Let dictionaryResponse be the result of performing an\n     [HTTP-network-or-cache](https://fetch.spec.whatwg.org/#concept-http-network-or-cache-fetch)\n     fetch using dictionaryRequest with the recursive-sbr flag set to true.\n     [NOTE-BOX] For compression benefits, the dictionary should be reused to\n     decode multiple different responses. We rely on caching to achieve this.\n     It is suggested for servers to not add any \"no-cache\" or short \"max-age\"\n     Cache-Control directives, and it is suggested for the client to effectively\n     support caching it.\n     [NOTE-BOX] Since the same dictionary can be identified by a hash code, a\n     browser can avoid fetching a dictionary if it already has one with the same\n     hashed cached from a different source URL.\n     [NOTE-BOX] It is suggested that a server does not reuse the same URL\n     to host an updated or different dictionary. Instead the same dictionary URL\n     should contain a dictionary with the same content and same hash.\n  5. If dictionaryResponse is a network error, return a network error.\n  6. If dictionaryResponse's status is not an ok status, return a network error.\n  7. Let tokens be the result of\n     [parsing metadata](https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata)\n     given dictionaryHash.\n     [Subresource Integrity](https://w3c.github.io/webappsec-subresource-integrity/)\n  8. If tokens is no metadata or the length of tokens is not 1, return a network\n     error\n  9. Let algorithm be the alg component of tokens[0]. If alg is 'hw3', set\n     algorithm to 256-bit HighwayHash\n  10. Let digest be the val component of tokens[1].\n  11. Let hashValue be the result of base64 decoding digest\n      [base64](https://tools.ietf.org/html/rfc4648)\n  12. If hashValue is not a valid base64 encoding, return a network error\n      [NOTE-BOX] All of the supported hashing algorithms are cryptographically\n      secure.\n  13. Compute the hash code of dictionaryResponse's body using algorithm and\n      compare this checksum for equality with hashValue. If the computed\n      checksum does not match hashValue, return a network error.\n  14. Return dictionaryResponse.\n"
  },
  {
    "path": "go/BUILD.bazel",
    "content": "# Description:\n#   brotli is a pure Go implementation of Brotli decoder.\n#   cbrotli is a CGo wrapper for Brotli, a generic-purpose lossless compression algorithm.\n"
  },
  {
    "path": "go/MODULE.bazel",
    "content": "# Copyright 2025 The Brotli Authors. All rights reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\n\"\"\"Brotli reference implementation\"\"\"\n\nmodule(\n    name = \"brotli_go\",\n    version = \"1.1.0\",\n    repo_name = \"org_brotli_go\",\n)\n\nbazel_dep(name = \"rules_go\", version = \"0.60.0\", repo_name = \"io_bazel_rules_go\")\nbazel_dep(name = \"gazelle\", version = \"0.47.0\")\n\nbazel_dep(name = \"brotli\", version = \"1.1.0\", repo_name = \"org_brotli\")\nlocal_path_override(\n    module_name = \"brotli\",\n    path = \"..\",\n)\n"
  },
  {
    "path": "go/brotli/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\", \"go_test\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nlicenses([\"notice\"])  # MIT\n\ngo_library(\n    name = \"brotli\",\n    srcs = [\n        \"decode.go\",\n        \"reader.go\",\n    ],\n    importpath = \"github.com/google/brotli/go/brotli\",\n)\n\ngo_test(\n    name = \"brotli_test\",\n    size = \"small\",\n    srcs = [\"brotli_test.go\"],\n    deps = [\n        \":brotli\",\n        \"//cbrotli\",\n    ],\n)\n\ngo_test(\n    name = \"synth_test\",\n    size = \"small\",\n    srcs = [\"synth_test.go\"],\n    deps = [\":brotli\"],\n)\n"
  },
  {
    "path": "go/brotli/brotli_test.go",
    "content": "// Copyright 2025 Google Inc. All Rights Reserved.\n//\n// Distributed under MIT license.\n// See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\npackage brotli_test\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"math/rand\"\n\t\"testing\"\n\n\t\"github.com/google/brotli/go/brotli\"\n\t\"github.com/google/brotli/go/cbrotli\"\n)\n\nfunc TestReader(t *testing.T) {\n\tcontent := bytes.Repeat([]byte(\"hello world!\"), 10000)\n\tencoded, _ := cbrotli.Encode(content, cbrotli.WriterOptions{Quality: 5})\n\tr := brotli.NewReader(bytes.NewReader(encoded))\n\tvar decodedOutput bytes.Buffer\n\tn, err := io.Copy(&decodedOutput, r)\n\tif err != nil {\n\t\tt.Fatalf(\"Copy(): n=%v, err=%v\", n, err)\n\t}\n\tif err := r.Close(); err != nil {\n\t\tt.Errorf(\"Close(): %v\", err)\n\t}\n\tif got := decodedOutput.Bytes(); !bytes.Equal(got, content) {\n\t\tt.Errorf(\"\"+\n\t\t\t\"Reader output:\\n\"+\n\t\t\t\"%q\\n\"+\n\t\t\t\"want:\\n\"+\n\t\t\t\"<%d bytes>\",\n\t\t\tgot, len(content))\n\t}\n\tbuf := make([]byte, 4)\n\tif _, err := r.Read(buf); err == nil {\n\t\tt.Errorf(\"Read-after-Close expected to return error\")\n\t}\n}\n\nfunc TestDecode(t *testing.T) {\n\tcontent := bytes.Repeat([]byte(\"hello world!\"), 10000)\n\tencoded, _ := cbrotli.Encode(content, cbrotli.WriterOptions{Quality: 5})\n\tdecoded, err := brotli.Decode(encoded)\n\tif err != nil {\n\t\tt.Errorf(\"Decode: %v\", err)\n\t}\n\tif !bytes.Equal(decoded, content) {\n\t\tt.Errorf(\"\"+\n\t\t\t\"Decode content:\\n\"+\n\t\t\t\"%q\\n\"+\n\t\t\t\"want:\\n\"+\n\t\t\t\"<%d bytes>\",\n\t\t\tdecoded, len(content))\n\t}\n}\n\nfunc TestDecodeFuzz(t *testing.T) {\n\t// Test that the decoder terminates with corrupted input.\n\tcontent := bytes.Repeat([]byte(\"hello world!\"), 100)\n\tsrc := rand.NewSource(0)\n\tencoded, err := cbrotli.Encode(content, cbrotli.WriterOptions{Quality: 5})\n\tif err != nil {\n\t\tt.Fatalf(\"Encode(<%d bytes>, _) = _, %s\", len(content), err)\n\t}\n\tif len(encoded) == 0 {\n\t\tt.Fatalf(\"Encode(<%d bytes>, _) produced empty output\", len(content))\n\t}\n\tfor i := 0; i < 100; i++ {\n\t\tenc := append([]byte{}, encoded...)\n\t\tfor j := 0; j < 5; j++ {\n\t\t\tenc[int(src.Int63())%len(enc)] = byte(src.Int63() % 256)\n\t\t}\n\t\tbrotli.Decode(enc)\n\t}\n}\n\nfunc TestDecodeTrailingData(t *testing.T) {\n\tcontent := bytes.Repeat([]byte(\"hello world!\"), 100)\n\tencoded, _ := cbrotli.Encode(content, cbrotli.WriterOptions{Quality: 5})\n\t_, err := brotli.Decode(append(encoded, 0))\n\tif err == nil {\n\t\tt.Errorf(\"Expected 'excessive input' error\")\n\t}\n}\n\nfunc TestEncodeDecode(t *testing.T) {\n\tfor _, test := range []struct {\n\t\tdata    []byte\n\t\trepeats int\n\t}{\n\t\t{nil, 0},\n\t\t{[]byte(\"A\"), 1},\n\t\t{[]byte(\"<html><body><H1>Hello world</H1></body></html>\"), 10},\n\t\t{[]byte(\"<html><body><H1>Hello world</H1></body></html>\"), 1000},\n\t} {\n\t\tt.Logf(\"case %q x %d\", test.data, test.repeats)\n\t\tinput := bytes.Repeat(test.data, test.repeats)\n\t\tencoded, err := cbrotli.Encode(input, cbrotli.WriterOptions{Quality: 5})\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Encode: %v\", err)\n\t\t}\n\t\t// Inputs are compressible, but may be too small to compress.\n\t\tif maxSize := len(input)/2 + 20; len(encoded) >= maxSize {\n\t\t\tt.Errorf(\"\"+\n\t\t\t\t\"Encode returned %d bytes, want <%d\\n\"+\n\t\t\t\t\"Encoded=%q\",\n\t\t\t\tlen(encoded), maxSize, encoded)\n\t\t}\n\t\tdecoded, err := brotli.Decode(encoded)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Decode: %v\", err)\n\t\t}\n\t\tif !bytes.Equal(decoded, input) {\n\t\t\tvar want string\n\t\t\tif len(input) > 320 {\n\t\t\t\twant = fmt.Sprintf(\"<%d bytes>\", len(input))\n\t\t\t} else {\n\t\t\t\twant = fmt.Sprintf(\"%q\", input)\n\t\t\t}\n\t\t\tt.Errorf(\"\"+\n\t\t\t\t\"Decode content:\\n\"+\n\t\t\t\t\"%q\\n\"+\n\t\t\t\t\"want:\\n\"+\n\t\t\t\t\"%s\",\n\t\t\t\tdecoded, want)\n\t\t}\n\t}\n}\n\nfunc TestEncodeDecodeWithDictionary(t *testing.T) {\n\tq := 5\n\tl := 4096\n\n\tinput := make([]byte, l)\n\tfor i := 0; i < l; i++ {\n\t\tinput[i] = byte(i*7 + i*i*5)\n\t}\n\t// use dictionary same as input\n\tpd := cbrotli.NewPreparedDictionary(input, cbrotli.DtRaw, q)\n\tdefer pd.Close()\n\n\tencoded, err := cbrotli.Encode(input, cbrotli.WriterOptions{Quality: q, Dictionary: pd})\n\tif err != nil {\n\t\tt.Errorf(\"Encode: %v\", err)\n\t}\n\tlimit := 20\n\tif len(encoded) > limit {\n\t\tt.Errorf(\"Output length exceeds expectations: %d > %d\", len(encoded), limit)\n\t}\n\n\tdecoded, err := brotli.DecodeWithRawDictionary(encoded, input)\n\tif err != nil {\n\t\tt.Errorf(\"Decode: %v\", err)\n\t}\n\tif !bytes.Equal(decoded, input) {\n\t\tvar want string\n\t\tif len(input) > 320 {\n\t\t\twant = fmt.Sprintf(\"<%d bytes>\", len(input))\n\t\t} else {\n\t\t\twant = fmt.Sprintf(\"%q\", input)\n\t\t}\n\t\tt.Errorf(\"\"+\n\t\t\t\"Decode content:\\n\"+\n\t\t\t\"%q\\n\"+\n\t\t\t\"want:\\n\"+\n\t\t\t\"%s\",\n\t\t\tdecoded, want)\n\t}\n}\n"
  },
  {
    "path": "go/brotli/decode.go",
    "content": "// Copyright 2025 Google Inc. All Rights Reserved.\n//\n// Distributed under MIT license.\n// See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\n// Package brotli implements the Brotli decompression algorithm.\npackage brotli\n\nimport (\n\t\"io\"\n\t\"strconv\"\n\t\"unicode/utf8\"\n\t\"unsafe\"\n)\n\nfunc shr32(a int32, b int32) int32 {\n\treturn int32(uint32(a) >> uint(b))\n}\n\nfunc shr64(a int64, b int32) int64 {\n\treturn int64(uint64(a) >> uint(b))\n}\n\nfunc copyBytes(dst []int8, target int32, src []int8, start int32, end int32) {\n\tcopy(dst[target:], src[start:end])\n}\n\nfunc copyBytesWithin(bytes []int8, target int32, start int32, end int32) {\n\tcopy(bytes[target:], bytes[start:end])\n}\n\nfunc toUtf8Runes(src string) []int32 {\n\tn := utf8.RuneCountInString(src)\n\tresult := make([]int32, n)\n\ti := 0\n\tfor _, rune := range src {\n\t\tresult[i] = int32(rune)\n\t\ti++\n\t}\n\treturn result\n}\n\ntype _InputStream = io.Reader\n\nfunc readInput(s *_State, dst []int8, offset int32, length int32) int32 {\n\tif s.input == nil {\n\t\treturn -1\n\t}\n\t// []int8 and []byte are actually the same\n\tbuf := unsafe.Slice((*byte)(unsafe.Pointer(&dst[offset])), length)\n\tread, err := (*s.input).Read(buf)\n\tif err != nil && err != io.EOF {\n\t\treturn -14 // BROTLI_ERROR_READ_FAILED\n\t}\n\treturn int32(read)\n}\n\n// GENERATED CODE BEGIN\n\nvar maxHuffmanTableSize = [...]int32{256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, 854, 886, 920, 952, 984, 1016, 1048, 1080}\nvar codeLengthCodeOrder = [...]int32{1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15}\nvar distanceShortCodeIndexOffset = [...]int32{0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3}\nvar distanceShortCodeValueOffset = [...]int32{0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3}\nvar fixedTable = [...]int32{0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001, 0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005}\nvar blockLengthOffset = [...]int32{1, 5, 9, 13, 17, 25, 33, 41, 49, 65, 81, 97, 113, 145, 177, 209, 241, 305, 369, 497, 753, 1265, 2289, 4337, 8433, 16625}\nvar blockLengthNBits = [...]int32{2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 24}\nvar insertLengthNBits = [...]int16{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0E, 0x18}\nvar copyLengthNBits = [...]int16{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x18}\nvar cmdLookup = make([]int16, 2816)\n\nfunc log2floor(i int32) int32 {\n\tvar result int32 = -1\n\tvar step int32 = 16\n\tvar v int32 = i\n\tfor step > 0 {\n\t\tvar next int32 = v >> uint(step)\n\t\tif next != 0 {\n\t\t\tresult += step\n\t\t\tv = next\n\t\t}\n\t\tstep = step >> 1\n\t}\n\treturn result + v\n}\n\nfunc calculateDistanceAlphabetSize(npostfix int32, ndirect int32, maxndistbits int32) int32 {\n\treturn 16 + ndirect + 2*(maxndistbits<<uint(npostfix))\n}\n\nfunc calculateDistanceAlphabetLimit(s *_State, maxDistance int32, npostfix int32, ndirect int32) int32 {\n\tif maxDistance < ndirect+(2<<uint(npostfix)) {\n\t\treturn makeError(s, -23)\n\t}\n\tvar offset int32 = ((maxDistance - ndirect) >> uint(npostfix)) + 4\n\tvar ndistbits int32 = log2floor(offset) - 1\n\tvar group int32 = ((ndistbits - 1) << 1) | ((offset >> uint(ndistbits)) & 1)\n\treturn ((group - 1) << uint(npostfix)) + (1 << uint(npostfix)) + ndirect + 16\n}\n\nfunc unpackCommandLookupTable(cmdLookup []int16) {\n\tvar i int32\n\tvar cmdCode int32\n\tvar insertLengthOffsets []int32 = make([]int32, 24)\n\tvar copyLengthOffsets []int32 = make([]int32, 24)\n\tcopyLengthOffsets[0] = 2\n\tfor i = 0; i < 23; i++ {\n\t\tinsertLengthOffsets[i+1] = insertLengthOffsets[i] + (1 << uint(int32(insertLengthNBits[i])))\n\t\tcopyLengthOffsets[i+1] = copyLengthOffsets[i] + (1 << uint(int32(copyLengthNBits[i])))\n\t}\n\tfor cmdCode = 0; cmdCode < 704; cmdCode++ {\n\t\tvar rangeIdx int32 = cmdCode >> 6\n\t\tvar distanceContextOffset int32 = -4\n\t\tif rangeIdx >= 2 {\n\t\t\trangeIdx -= 2\n\t\t\tdistanceContextOffset = 0\n\t\t}\n\t\tvar insertCode int32 = (((0x29850 >> uint((rangeIdx * 2))) & 0x3) << 3) | ((cmdCode >> 3) & 7)\n\t\tvar copyCode int32 = (((0x26244 >> uint((rangeIdx * 2))) & 0x3) << 3) | (cmdCode & 7)\n\t\tvar copyLengthOffset int32 = copyLengthOffsets[copyCode]\n\t\tvar distanceContext int32 = distanceContextOffset + min(copyLengthOffset, 5) - 2\n\t\tvar index int32 = cmdCode * 4\n\t\tcmdLookup[index] = int16(int32(insertLengthNBits[insertCode]) | (int32(copyLengthNBits[copyCode]) << 8))\n\t\tcmdLookup[index+1] = int16(insertLengthOffsets[insertCode])\n\t\tcmdLookup[index+2] = int16(copyLengthOffsets[copyCode])\n\t\tcmdLookup[index+3] = int16(distanceContext)\n\t}\n}\n\nfunc decodeWindowBits(s *_State) int32 {\n\tvar largeWindowEnabled int32 = s.isLargeWindow\n\ts.isLargeWindow = 0\n\tif s.bitOffset >= 32 {\n\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\ts.halfOffset++\n\t\ts.bitOffset -= 32\n\t}\n\tif readFewBits(s, 1) == 0 {\n\t\treturn 16\n\t}\n\tvar n int32 = readFewBits(s, 3)\n\tif n != 0 {\n\t\treturn 17 + n\n\t}\n\tn = readFewBits(s, 3)\n\tif n != 0 {\n\t\tif n == 1 {\n\t\t\tif largeWindowEnabled == 0 {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\ts.isLargeWindow = 1\n\t\t\tif readFewBits(s, 1) == 1 {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\tn = readFewBits(s, 6)\n\t\t\tif n < 10 || n > 30 {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\treturn n\n\t\t}\n\t\treturn 8 + n\n\t}\n\treturn 17\n}\n\nfunc enableEagerOutput(s *_State) int32 {\n\tif s.runningState != 1 {\n\t\treturn makeError(s, -24)\n\t}\n\ts.isEager = 1\n\treturn 0\n}\n\nfunc enableLargeWindow(s *_State) int32 {\n\tif s.runningState != 1 {\n\t\treturn makeError(s, -24)\n\t}\n\ts.isLargeWindow = 1\n\treturn 0\n}\n\nfunc attachDictionaryChunk(s *_State, data []int8) int32 {\n\tif s.runningState != 1 {\n\t\treturn makeError(s, -24)\n\t}\n\tif s.cdNumChunks == 0 {\n\t\ts.cdChunks = make([][]int8, 16)\n\t\ts.cdChunkOffsets = make([]int32, 16)\n\t\ts.cdBlockBits = -1\n\t}\n\tif s.cdNumChunks == 15 {\n\t\treturn makeError(s, -27)\n\t}\n\ts.cdChunks[s.cdNumChunks] = data\n\ts.cdNumChunks++\n\ts.cdTotalSize += int32(len(data))\n\ts.cdChunkOffsets[s.cdNumChunks] = s.cdTotalSize\n\treturn 0\n}\n\nfunc initState(s *_State) int32 {\n\tif s.runningState != 0 {\n\t\treturn makeError(s, -26)\n\t}\n\ts.blockTrees = make([]int32, 3091)\n\ts.blockTrees[0] = 7\n\ts.distRbIdx = 3\n\tvar result int32 = calculateDistanceAlphabetLimit(s, 0x7FFFFFFC, 3, 120)\n\tif result < 0 {\n\t\treturn result\n\t}\n\tvar maxDistanceAlphabetLimit int32 = result\n\ts.distExtraBits = make([]int8, maxDistanceAlphabetLimit)\n\ts.distOffset = make([]int32, maxDistanceAlphabetLimit)\n\tresult = initBitReader(s)\n\tif result < 0 {\n\t\treturn result\n\t}\n\ts.runningState = 1\n\treturn 0\n}\n\nfunc close(s *_State) int32 {\n\tif s.runningState == 0 {\n\t\treturn makeError(s, -25)\n\t}\n\tif s.runningState > 0 {\n\t\ts.runningState = 11\n\t}\n\treturn 0\n}\n\nfunc decodeVarLenUnsignedByte(s *_State) int32 {\n\tif s.bitOffset >= 32 {\n\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\ts.halfOffset++\n\t\ts.bitOffset -= 32\n\t}\n\tif readFewBits(s, 1) != 0 {\n\t\tvar n int32 = readFewBits(s, 3)\n\t\tif n == 0 {\n\t\t\treturn 1\n\t\t}\n\t\treturn readFewBits(s, n) + (1 << uint(n))\n\t}\n\treturn 0\n}\n\nfunc decodeMetaBlockLength(s *_State) int32 {\n\tvar i int32\n\tif s.bitOffset >= 32 {\n\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\ts.halfOffset++\n\t\ts.bitOffset -= 32\n\t}\n\ts.inputEnd = readFewBits(s, 1)\n\ts.metaBlockLength = 0\n\ts.isUncompressed = 0\n\ts.isMetadata = 0\n\tif (s.inputEnd != 0) && readFewBits(s, 1) != 0 {\n\t\treturn 0\n\t}\n\tvar sizeNibbles int32 = readFewBits(s, 2) + 4\n\tif sizeNibbles == 7 {\n\t\ts.isMetadata = 1\n\t\tif readFewBits(s, 1) != 0 {\n\t\t\treturn makeError(s, -6)\n\t\t}\n\t\tvar sizeBytes int32 = readFewBits(s, 2)\n\t\tif sizeBytes == 0 {\n\t\t\treturn 0\n\t\t}\n\t\tfor i = 0; i < sizeBytes; i++ {\n\t\t\tif s.bitOffset >= 32 {\n\t\t\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\t\t\ts.halfOffset++\n\t\t\t\ts.bitOffset -= 32\n\t\t\t}\n\t\t\tvar bits int32 = readFewBits(s, 8)\n\t\t\tif bits == 0 && i+1 == sizeBytes && sizeBytes > 1 {\n\t\t\t\treturn makeError(s, -8)\n\t\t\t}\n\t\t\ts.metaBlockLength += bits << uint((i * 8))\n\t\t}\n\t} else {\n\t\tfor i = 0; i < sizeNibbles; i++ {\n\t\t\tif s.bitOffset >= 32 {\n\t\t\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\t\t\ts.halfOffset++\n\t\t\t\ts.bitOffset -= 32\n\t\t\t}\n\t\t\tvar bits int32 = readFewBits(s, 4)\n\t\t\tif bits == 0 && i+1 == sizeNibbles && sizeNibbles > 4 {\n\t\t\t\treturn makeError(s, -8)\n\t\t\t}\n\t\t\ts.metaBlockLength += bits << uint((i * 4))\n\t\t}\n\t}\n\ts.metaBlockLength++\n\tif s.inputEnd == 0 {\n\t\ts.isUncompressed = readFewBits(s, 1)\n\t}\n\treturn 0\n}\n\nfunc readSymbol(tableGroup []int32, tableIdx int32, s *_State) int32 {\n\tvar offset int32 = tableGroup[tableIdx]\n\tvar v int32 = int32(shr64(s.accumulator64, s.bitOffset))\n\toffset += v & 0xFF\n\tvar bits int32 = tableGroup[offset] >> 16\n\tvar sym int32 = tableGroup[offset] & 0xFFFF\n\tif bits <= 8 {\n\t\ts.bitOffset += bits\n\t\treturn sym\n\t}\n\toffset += sym\n\tvar mask int32 = (1 << uint(bits)) - 1\n\toffset += shr32(v&mask, 8)\n\ts.bitOffset += (tableGroup[offset] >> 16) + 8\n\treturn tableGroup[offset] & 0xFFFF\n}\n\nfunc readBlockLength(tableGroup []int32, tableIdx int32, s *_State) int32 {\n\tif s.bitOffset >= 32 {\n\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\ts.halfOffset++\n\t\ts.bitOffset -= 32\n\t}\n\tvar code int32 = readSymbol(tableGroup, tableIdx, s)\n\tvar n int32 = blockLengthNBits[code]\n\tif s.bitOffset >= 32 {\n\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\ts.halfOffset++\n\t\ts.bitOffset -= 32\n\t}\n\treturn blockLengthOffset[code] + readFewBits(s, n)\n}\n\nfunc moveToFront(v []int32, index int32) {\n\tvar i int32 = index\n\tvar value int32 = v[i]\n\tfor i > 0 {\n\t\tv[i] = v[i-1]\n\t\ti--\n\t}\n\tv[0] = value\n}\n\nfunc inverseMoveToFrontTransform(v []int8, vLen int32) {\n\tvar i int32\n\tvar mtf []int32 = make([]int32, 256)\n\tfor i = 0; i < 256; i++ {\n\t\tmtf[i] = i\n\t}\n\tfor i = 0; i < vLen; i++ {\n\t\tvar index int32 = int32(v[i]) & 0xFF\n\t\tv[i] = int8(mtf[index])\n\t\tif index != 0 {\n\t\t\tmoveToFront(mtf, index)\n\t\t}\n\t}\n}\n\nfunc readHuffmanCodeLengths(codeLengthCodeLengths []int32, numSymbols int32, codeLengths []int32, s *_State) int32 {\n\tvar i int32\n\tvar fiwz int32\n\tvar symbol int32 = 0\n\tvar prevCodeLen int32 = 8\n\tvar repeat int32 = 0\n\tvar repeatCodeLen int32 = 0\n\tvar space int32 = 32768\n\tvar table []int32 = make([]int32, 33)\n\tvar tableIdx int32 = int32(len(table)) - 1\n\tbuildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18)\n\tfor symbol < numSymbols && space > 0 {\n\t\tif s.halfOffset > 1015 {\n\t\t\tvar result int32 = readMoreInput(s)\n\t\t\tif result < 0 {\n\t\t\t\treturn result\n\t\t\t}\n\t\t}\n\t\tif s.bitOffset >= 32 {\n\t\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\t\ts.halfOffset++\n\t\t\ts.bitOffset -= 32\n\t\t}\n\t\tvar p int32 = (int32(shr64(s.accumulator64, s.bitOffset))) & 31\n\t\ts.bitOffset += table[p] >> 16\n\t\tvar codeLen int32 = table[p] & 0xFFFF\n\t\tif codeLen < 16 {\n\t\t\trepeat = 0\n\t\t\tcodeLengths[symbol] = codeLen\n\t\t\tsymbol++\n\t\t\tif codeLen != 0 {\n\t\t\t\tprevCodeLen = codeLen\n\t\t\t\tspace -= 32768 >> uint(codeLen)\n\t\t\t}\n\t\t} else {\n\t\t\tvar extraBits int32 = codeLen - 14\n\t\t\tvar newLen int32 = 0\n\t\t\tif codeLen == 16 {\n\t\t\t\tnewLen = prevCodeLen\n\t\t\t}\n\t\t\tif repeatCodeLen != newLen {\n\t\t\t\trepeat = 0\n\t\t\t\trepeatCodeLen = newLen\n\t\t\t}\n\t\t\tvar oldRepeat int32 = repeat\n\t\t\tif repeat > 0 {\n\t\t\t\trepeat -= 2\n\t\t\t\trepeat = repeat << uint(extraBits)\n\t\t\t}\n\t\t\tif s.bitOffset >= 32 {\n\t\t\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\t\t\ts.halfOffset++\n\t\t\t\ts.bitOffset -= 32\n\t\t\t}\n\t\t\trepeat += readFewBits(s, extraBits) + 3\n\t\t\tvar repeatDelta int32 = repeat - oldRepeat\n\t\t\tif symbol+repeatDelta > numSymbols {\n\t\t\t\treturn makeError(s, -2)\n\t\t\t}\n\t\t\tfor i = 0; i < repeatDelta; i++ {\n\t\t\t\tcodeLengths[symbol] = repeatCodeLen\n\t\t\t\tsymbol++\n\t\t\t}\n\t\t\tif repeatCodeLen != 0 {\n\t\t\t\tspace -= repeatDelta << uint((15 - repeatCodeLen))\n\t\t\t}\n\t\t}\n\t}\n\tif space != 0 {\n\t\treturn makeError(s, -18)\n\t}\n\tfor fiwz = symbol; fiwz < numSymbols; fiwz++ {\n\t\tcodeLengths[fiwz] = 0\n\t}\n\treturn 0\n}\n\nfunc checkDupes(s *_State, symbols []int32, length int32) int32 {\n\tvar i int32\n\tvar j int32\n\tfor i = 0; i < length-1; i++ {\n\t\tfor j = i + 1; j < length; j++ {\n\t\t\tif symbols[i] == symbols[j] {\n\t\t\t\treturn makeError(s, -7)\n\t\t\t}\n\t\t}\n\t}\n\treturn 0\n}\n\nfunc readSimpleHuffmanCode(alphabetSizeMax int32, alphabetSizeLimit int32, tableGroup []int32, tableIdx int32, s *_State) int32 {\n\tvar i int32\n\tvar codeLengths []int32 = make([]int32, alphabetSizeLimit)\n\tvar symbols []int32 = make([]int32, 4)\n\tvar maxBits int32 = 1 + log2floor(alphabetSizeMax-1)\n\tvar numSymbols int32 = readFewBits(s, 2) + 1\n\tfor i = 0; i < numSymbols; i++ {\n\t\tif s.bitOffset >= 32 {\n\t\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\t\ts.halfOffset++\n\t\t\ts.bitOffset -= 32\n\t\t}\n\t\tvar symbol int32 = readFewBits(s, maxBits)\n\t\tif symbol >= alphabetSizeLimit {\n\t\t\treturn makeError(s, -15)\n\t\t}\n\t\tsymbols[i] = symbol\n\t}\n\tvar result int32 = checkDupes(s, symbols, numSymbols)\n\tif result < 0 {\n\t\treturn result\n\t}\n\tvar histogramID int32 = numSymbols\n\tif numSymbols == 4 {\n\t\thistogramID += readFewBits(s, 1)\n\t}\n\tswitch histogramID {\n\tcase 1:\n\t\tcodeLengths[symbols[0]] = 1\n\t\tbreak\n\tcase 2:\n\t\tcodeLengths[symbols[0]] = 1\n\t\tcodeLengths[symbols[1]] = 1\n\t\tbreak\n\tcase 3:\n\t\tcodeLengths[symbols[0]] = 1\n\t\tcodeLengths[symbols[1]] = 2\n\t\tcodeLengths[symbols[2]] = 2\n\t\tbreak\n\tcase 4:\n\t\tcodeLengths[symbols[0]] = 2\n\t\tcodeLengths[symbols[1]] = 2\n\t\tcodeLengths[symbols[2]] = 2\n\t\tcodeLengths[symbols[3]] = 2\n\t\tbreak\n\tcase 5:\n\t\tcodeLengths[symbols[0]] = 1\n\t\tcodeLengths[symbols[1]] = 2\n\t\tcodeLengths[symbols[2]] = 3\n\t\tcodeLengths[symbols[3]] = 3\n\t\tbreak\n\tdefault:\n\t\tbreak\n\t}\n\treturn buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit)\n}\n\nfunc readComplexHuffmanCode(alphabetSizeLimit int32, skip int32, tableGroup []int32, tableIdx int32, s *_State) int32 {\n\tvar i int32\n\tvar codeLengths []int32 = make([]int32, alphabetSizeLimit)\n\tvar codeLengthCodeLengths []int32 = make([]int32, 18)\n\tvar space int32 = 32\n\tvar numCodes int32 = 0\n\tfor i = skip; i < 18; i++ {\n\t\tvar codeLenIdx int32 = codeLengthCodeOrder[i]\n\t\tif s.bitOffset >= 32 {\n\t\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\t\ts.halfOffset++\n\t\t\ts.bitOffset -= 32\n\t\t}\n\t\tvar p int32 = (int32(shr64(s.accumulator64, s.bitOffset))) & 15\n\t\ts.bitOffset += fixedTable[p] >> 16\n\t\tvar v int32 = fixedTable[p] & 0xFFFF\n\t\tcodeLengthCodeLengths[codeLenIdx] = v\n\t\tif v != 0 {\n\t\t\tspace -= 32 >> uint(v)\n\t\t\tnumCodes++\n\t\t\tif space <= 0 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tif space != 0 && numCodes != 1 {\n\t\treturn makeError(s, -4)\n\t}\n\tvar result int32 = readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s)\n\tif result < 0 {\n\t\treturn result\n\t}\n\treturn buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit)\n}\n\nfunc readHuffmanCode(alphabetSizeMax int32, alphabetSizeLimit int32, tableGroup []int32, tableIdx int32, s *_State) int32 {\n\tif s.halfOffset > 1015 {\n\t\tvar result int32 = readMoreInput(s)\n\t\tif result < 0 {\n\t\t\treturn result\n\t\t}\n\t}\n\tif s.bitOffset >= 32 {\n\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\ts.halfOffset++\n\t\ts.bitOffset -= 32\n\t}\n\tvar simpleCodeOrSkip int32 = readFewBits(s, 2)\n\tif simpleCodeOrSkip == 1 {\n\t\treturn readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s)\n\t}\n\treturn readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s)\n}\n\nfunc decodeContextMap(contextMapSize int32, contextMap []int8, s *_State) int32 {\n\tvar fbwz int32\n\tvar result int32\n\tif s.halfOffset > 1015 {\n\t\tresult = readMoreInput(s)\n\t\tif result < 0 {\n\t\t\treturn result\n\t\t}\n\t}\n\tvar numTrees int32 = decodeVarLenUnsignedByte(s) + 1\n\tif numTrees == 1 {\n\t\tfor fbwz = 0; fbwz < contextMapSize; fbwz++ {\n\t\t\tcontextMap[fbwz] = 0\n\t\t}\n\t\treturn numTrees\n\t}\n\tif s.bitOffset >= 32 {\n\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\ts.halfOffset++\n\t\ts.bitOffset -= 32\n\t}\n\tvar useRleForZeros int32 = readFewBits(s, 1)\n\tvar maxRunLengthPrefix int32 = 0\n\tif useRleForZeros != 0 {\n\t\tmaxRunLengthPrefix = readFewBits(s, 4) + 1\n\t}\n\tvar alphabetSize int32 = numTrees + maxRunLengthPrefix\n\tvar tableSize int32 = maxHuffmanTableSize[(alphabetSize+31)>>5]\n\tvar table []int32 = make([]int32, tableSize+1)\n\tvar tableIdx int32 = int32(len(table)) - 1\n\tresult = readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s)\n\tif result < 0 {\n\t\treturn result\n\t}\n\tvar i int32 = 0\n\tfor i < contextMapSize {\n\t\tif s.halfOffset > 1015 {\n\t\t\tresult = readMoreInput(s)\n\t\t\tif result < 0 {\n\t\t\t\treturn result\n\t\t\t}\n\t\t}\n\t\tif s.bitOffset >= 32 {\n\t\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\t\ts.halfOffset++\n\t\t\ts.bitOffset -= 32\n\t\t}\n\t\tvar code int32 = readSymbol(table, tableIdx, s)\n\t\tif code == 0 {\n\t\t\tcontextMap[i] = 0\n\t\t\ti++\n\t\t} else if code <= maxRunLengthPrefix {\n\t\t\tif s.bitOffset >= 32 {\n\t\t\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\t\t\ts.halfOffset++\n\t\t\t\ts.bitOffset -= 32\n\t\t\t}\n\t\t\tvar reps int32 = (1 << uint(code)) + readFewBits(s, code)\n\t\t\tfor reps != 0 {\n\t\t\t\tif i >= contextMapSize {\n\t\t\t\t\treturn makeError(s, -3)\n\t\t\t\t}\n\t\t\t\tcontextMap[i] = 0\n\t\t\t\ti++\n\t\t\t\treps--\n\t\t\t}\n\t\t} else {\n\t\t\tcontextMap[i] = int8(code - maxRunLengthPrefix)\n\t\t\ti++\n\t\t}\n\t}\n\tif s.bitOffset >= 32 {\n\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\ts.halfOffset++\n\t\ts.bitOffset -= 32\n\t}\n\tif readFewBits(s, 1) == 1 {\n\t\tinverseMoveToFrontTransform(contextMap, contextMapSize)\n\t}\n\treturn numTrees\n}\n\nfunc decodeBlockTypeAndLength(s *_State, treeType int32, numBlockTypes int32) int32 {\n\tvar ringBuffers []int32 = s.rings\n\tvar offset int32 = 4 + treeType*2\n\tif s.bitOffset >= 32 {\n\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\ts.halfOffset++\n\t\ts.bitOffset -= 32\n\t}\n\tvar blockType int32 = readSymbol(s.blockTrees, 2*treeType, s)\n\tvar result int32 = readBlockLength(s.blockTrees, 2*treeType+1, s)\n\tif blockType == 1 {\n\t\tblockType = ringBuffers[offset+1] + 1\n\t} else if blockType == 0 {\n\t\tblockType = ringBuffers[offset]\n\t} else {\n\t\tblockType -= 2\n\t}\n\tif blockType >= numBlockTypes {\n\t\tblockType -= numBlockTypes\n\t}\n\tringBuffers[offset] = ringBuffers[offset+1]\n\tringBuffers[offset+1] = blockType\n\treturn result\n}\n\nfunc decodeLiteralBlockSwitch(s *_State) {\n\ts.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes)\n\tvar literalBlockType int32 = s.rings[5]\n\ts.contextMapSlice = literalBlockType << 6\n\ts.literalTreeIdx = int32(s.contextMap[s.contextMapSlice]) & 0xFF\n\tvar contextMode int32 = int32(s.contextModes[literalBlockType])\n\ts.contextLookupOffset1 = contextMode << 9\n\ts.contextLookupOffset2 = s.contextLookupOffset1 + 256\n}\n\nfunc decodeCommandBlockSwitch(s *_State) {\n\ts.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes)\n\ts.commandTreeIdx = s.rings[7]\n}\n\nfunc decodeDistanceBlockSwitch(s *_State) {\n\ts.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes)\n\ts.distContextMapSlice = s.rings[9] << 2\n}\n\nfunc maybeReallocateRingBuffer(s *_State) {\n\tvar newSize int32 = s.maxRingBufferSize\n\tif newSize > s.expectedTotalSize {\n\t\tvar minimalNewSize int32 = s.expectedTotalSize\n\t\tfor (newSize >> 1) > minimalNewSize {\n\t\t\tnewSize = newSize >> 1\n\t\t}\n\t\tif (s.inputEnd == 0) && newSize < 16384 && s.maxRingBufferSize >= 16384 {\n\t\t\tnewSize = 16384\n\t\t}\n\t}\n\tif newSize <= s.ringBufferSize {\n\t\treturn\n\t}\n\tvar ringBufferSizeWithSlack int32 = newSize + 37\n\tvar newBuffer []int8 = make([]int8, ringBufferSizeWithSlack)\n\tvar oldBuffer []int8 = s.ringBuffer\n\tif int32(len(oldBuffer)) != 0 {\n\t\tcopyBytes(newBuffer, 0, oldBuffer, 0, s.ringBufferSize)\n\t}\n\ts.ringBuffer = newBuffer\n\ts.ringBufferSize = newSize\n}\n\nfunc readNextMetablockHeader(s *_State) int32 {\n\tif s.inputEnd != 0 {\n\t\ts.nextRunningState = 10\n\t\ts.runningState = 12\n\t\treturn 0\n\t}\n\ts.literalTreeGroup = make([]int32, 0)\n\ts.commandTreeGroup = make([]int32, 0)\n\ts.distanceTreeGroup = make([]int32, 0)\n\tvar result int32\n\tif s.halfOffset > 1015 {\n\t\tresult = readMoreInput(s)\n\t\tif result < 0 {\n\t\t\treturn result\n\t\t}\n\t}\n\tresult = decodeMetaBlockLength(s)\n\tif result < 0 {\n\t\treturn result\n\t}\n\tif (s.metaBlockLength == 0) && (s.isMetadata == 0) {\n\t\treturn 0\n\t}\n\tif (s.isUncompressed != 0) || (s.isMetadata != 0) {\n\t\tresult = jumpToByteBoundary(s)\n\t\tif result < 0 {\n\t\t\treturn result\n\t\t}\n\t\tif s.isMetadata == 0 {\n\t\t\ts.runningState = 6\n\t\t} else {\n\t\t\ts.runningState = 5\n\t\t}\n\t} else {\n\t\ts.runningState = 3\n\t}\n\tif s.isMetadata != 0 {\n\t\treturn 0\n\t}\n\ts.expectedTotalSize += s.metaBlockLength\n\tif s.expectedTotalSize > 1<<30 {\n\t\ts.expectedTotalSize = 1 << 30\n\t}\n\tif s.ringBufferSize < s.maxRingBufferSize {\n\t\tmaybeReallocateRingBuffer(s)\n\t}\n\treturn 0\n}\n\nfunc readMetablockPartition(s *_State, treeType int32, numBlockTypes int32) int32 {\n\tvar offset int32 = s.blockTrees[2*treeType]\n\tif numBlockTypes <= 1 {\n\t\ts.blockTrees[2*treeType+1] = offset\n\t\ts.blockTrees[2*treeType+2] = offset\n\t\treturn 1 << 28\n\t}\n\tvar blockTypeAlphabetSize int32 = numBlockTypes + 2\n\tvar result int32 = readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2*treeType, s)\n\tif result < 0 {\n\t\treturn result\n\t}\n\toffset += result\n\ts.blockTrees[2*treeType+1] = offset\n\tvar blockLengthAlphabetSize int32 = 26\n\tresult = readHuffmanCode(blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2*treeType+1, s)\n\tif result < 0 {\n\t\treturn result\n\t}\n\toffset += result\n\ts.blockTrees[2*treeType+2] = offset\n\treturn readBlockLength(s.blockTrees, 2*treeType+1, s)\n}\n\nfunc calculateDistanceLut(s *_State, alphabetSizeLimit int32) {\n\tvar j int32\n\tvar distExtraBits []int8 = s.distExtraBits\n\tvar distOffset []int32 = s.distOffset\n\tvar npostfix int32 = s.distancePostfixBits\n\tvar ndirect int32 = s.numDirectDistanceCodes\n\tvar postfix int32 = 1 << uint(npostfix)\n\tvar bits int32 = 1\n\tvar half int32 = 0\n\tvar i int32 = 16\n\tfor j = 0; j < ndirect; j++ {\n\t\tdistExtraBits[i] = 0\n\t\tdistOffset[i] = j + 1\n\t\ti++\n\t}\n\tfor i < alphabetSizeLimit {\n\t\tvar base int32 = ndirect + ((((2 + half) << uint(bits)) - 4) << uint(npostfix)) + 1\n\t\tfor j = 0; j < postfix; j++ {\n\t\t\tdistExtraBits[i] = int8(bits)\n\t\t\tdistOffset[i] = base + j\n\t\t\ti++\n\t\t}\n\t\tbits = bits + half\n\t\thalf = half ^ 1\n\t}\n}\n\nfunc readMetablockHuffmanCodesAndContextMaps(s *_State) int32 {\n\tvar j int32\n\ts.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1\n\tvar result int32 = readMetablockPartition(s, 0, s.numLiteralBlockTypes)\n\tif result < 0 {\n\t\treturn result\n\t}\n\ts.literalBlockLength = result\n\ts.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1\n\tresult = readMetablockPartition(s, 1, s.numCommandBlockTypes)\n\tif result < 0 {\n\t\treturn result\n\t}\n\ts.commandBlockLength = result\n\ts.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1\n\tresult = readMetablockPartition(s, 2, s.numDistanceBlockTypes)\n\tif result < 0 {\n\t\treturn result\n\t}\n\ts.distanceBlockLength = result\n\tif s.halfOffset > 1015 {\n\t\tresult = readMoreInput(s)\n\t\tif result < 0 {\n\t\t\treturn result\n\t\t}\n\t}\n\tif s.bitOffset >= 32 {\n\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\ts.halfOffset++\n\t\ts.bitOffset -= 32\n\t}\n\ts.distancePostfixBits = readFewBits(s, 2)\n\ts.numDirectDistanceCodes = readFewBits(s, 4) << uint(s.distancePostfixBits)\n\ts.contextModes = make([]int8, s.numLiteralBlockTypes)\n\tvar i int32 = 0\n\tfor i < s.numLiteralBlockTypes {\n\t\tvar limit int32 = min(i+96, s.numLiteralBlockTypes)\n\t\tfor i < limit {\n\t\t\tif s.bitOffset >= 32 {\n\t\t\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\t\t\ts.halfOffset++\n\t\t\t\ts.bitOffset -= 32\n\t\t\t}\n\t\t\ts.contextModes[i] = int8(readFewBits(s, 2))\n\t\t\ti++\n\t\t}\n\t\tif s.halfOffset > 1015 {\n\t\t\tresult = readMoreInput(s)\n\t\t\tif result < 0 {\n\t\t\t\treturn result\n\t\t\t}\n\t\t}\n\t}\n\tvar contextMapLength int32 = s.numLiteralBlockTypes << 6\n\ts.contextMap = make([]int8, contextMapLength)\n\tresult = decodeContextMap(contextMapLength, s.contextMap, s)\n\tif result < 0 {\n\t\treturn result\n\t}\n\tvar numLiteralTrees int32 = result\n\ts.trivialLiteralContext = 1\n\tfor j = 0; j < contextMapLength; j++ {\n\t\tif int32(s.contextMap[j]) != j>>6 {\n\t\t\ts.trivialLiteralContext = 0\n\t\t\tbreak\n\t\t}\n\t}\n\ts.distContextMap = make([]int8, s.numDistanceBlockTypes<<2)\n\tresult = decodeContextMap(s.numDistanceBlockTypes<<2, s.distContextMap, s)\n\tif result < 0 {\n\t\treturn result\n\t}\n\tvar numDistTrees int32 = result\n\ts.literalTreeGroup = make([]int32, huffmanTreeGroupAllocSize(256, numLiteralTrees))\n\tresult = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s, s.literalTreeGroup)\n\tif result < 0 {\n\t\treturn result\n\t}\n\ts.commandTreeGroup = make([]int32, huffmanTreeGroupAllocSize(704, s.numCommandBlockTypes))\n\tresult = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s, s.commandTreeGroup)\n\tif result < 0 {\n\t\treturn result\n\t}\n\tvar distanceAlphabetSizeMax int32 = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24)\n\tvar distanceAlphabetSizeLimit int32 = distanceAlphabetSizeMax\n\tif s.isLargeWindow == 1 {\n\t\tdistanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62)\n\t\tresult = calculateDistanceAlphabetLimit(s, 0x7FFFFFFC, s.distancePostfixBits, s.numDirectDistanceCodes)\n\t\tif result < 0 {\n\t\t\treturn result\n\t\t}\n\t\tdistanceAlphabetSizeLimit = result\n\t}\n\ts.distanceTreeGroup = make([]int32, huffmanTreeGroupAllocSize(distanceAlphabetSizeLimit, numDistTrees))\n\tresult = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s, s.distanceTreeGroup)\n\tif result < 0 {\n\t\treturn result\n\t}\n\tcalculateDistanceLut(s, distanceAlphabetSizeLimit)\n\ts.contextMapSlice = 0\n\ts.distContextMapSlice = 0\n\ts.contextLookupOffset1 = int32(s.contextModes[0]) * 512\n\ts.contextLookupOffset2 = s.contextLookupOffset1 + 256\n\ts.literalTreeIdx = 0\n\ts.commandTreeIdx = 0\n\ts.rings[4] = 1\n\ts.rings[5] = 0\n\ts.rings[6] = 1\n\ts.rings[7] = 0\n\ts.rings[8] = 1\n\ts.rings[9] = 0\n\treturn 0\n}\n\nfunc copyUncompressedData(s *_State) int32 {\n\tvar ringBuffer []int8 = s.ringBuffer\n\tvar result int32\n\tif s.metaBlockLength <= 0 {\n\t\tresult = reload(s)\n\t\tif result < 0 {\n\t\t\treturn result\n\t\t}\n\t\ts.runningState = 2\n\t\treturn 0\n\t}\n\tvar chunkLength int32 = min(s.ringBufferSize-s.pos, s.metaBlockLength)\n\tresult = copyRawBytes(s, ringBuffer, s.pos, chunkLength)\n\tif result < 0 {\n\t\treturn result\n\t}\n\ts.metaBlockLength -= chunkLength\n\ts.pos += chunkLength\n\tif s.pos == s.ringBufferSize {\n\t\ts.nextRunningState = 6\n\t\ts.runningState = 12\n\t\treturn 0\n\t}\n\tresult = reload(s)\n\tif result < 0 {\n\t\treturn result\n\t}\n\ts.runningState = 2\n\treturn 0\n}\n\nfunc writeRingBuffer(s *_State) int32 {\n\tvar toWrite int32 = min(s.outputLength-s.outputUsed, s.ringBufferBytesReady-s.ringBufferBytesWritten)\n\tif toWrite != 0 {\n\t\tcopyBytes(s.output, s.outputOffset+s.outputUsed, s.ringBuffer, s.ringBufferBytesWritten, s.ringBufferBytesWritten+toWrite)\n\t\ts.outputUsed += toWrite\n\t\ts.ringBufferBytesWritten += toWrite\n\t}\n\tif s.outputUsed < s.outputLength {\n\t\treturn 0\n\t}\n\treturn 2\n}\n\nfunc huffmanTreeGroupAllocSize(alphabetSizeLimit int32, n int32) int32 {\n\tvar maxTableSize int32 = maxHuffmanTableSize[(alphabetSizeLimit+31)>>5]\n\treturn n + n*maxTableSize\n}\n\nfunc decodeHuffmanTreeGroup(alphabetSizeMax int32, alphabetSizeLimit int32, n int32, s *_State, group []int32) int32 {\n\tvar i int32\n\tvar next int32 = n\n\tfor i = 0; i < n; i++ {\n\t\tgroup[i] = next\n\t\tvar result int32 = readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s)\n\t\tif result < 0 {\n\t\t\treturn result\n\t\t}\n\t\tnext += result\n\t}\n\treturn 0\n}\n\nfunc calculateFence(s *_State) int32 {\n\tvar result int32 = s.ringBufferSize\n\tif s.isEager != 0 {\n\t\tresult = min(result, s.ringBufferBytesWritten+s.outputLength-s.outputUsed)\n\t}\n\treturn result\n}\n\nfunc doUseDictionary(s *_State, fence int32) int32 {\n\tif s.distance > 0x7FFFFFFC {\n\t\treturn makeError(s, -9)\n\t}\n\tvar address int32 = s.distance - s.maxDistance - 1 - s.cdTotalSize\n\tif address < 0 {\n\t\tvar result int32 = initializeCompoundDictionaryCopy(s, -address-1, s.copyLength)\n\t\tif result < 0 {\n\t\t\treturn result\n\t\t}\n\t\ts.runningState = 14\n\t} else {\n\t\tvar dictionaryData []int8 = data\n\t\tvar wordLength int32 = s.copyLength\n\t\tif wordLength > 31 {\n\t\t\treturn makeError(s, -9)\n\t\t}\n\t\tvar shift int32 = sizeBits[wordLength]\n\t\tif shift == 0 {\n\t\t\treturn makeError(s, -9)\n\t\t}\n\t\tvar offset int32 = offsets[wordLength]\n\t\tvar mask int32 = (1 << uint(shift)) - 1\n\t\tvar wordIdx int32 = address & mask\n\t\tvar transformIdx int32 = address >> uint(shift)\n\t\toffset += wordIdx * wordLength\n\t\tvar transforms *_Transforms = rfcTransforms\n\t\tif transformIdx >= transforms.numTransforms {\n\t\t\treturn makeError(s, -9)\n\t\t}\n\t\tvar len int32 = transformDictionaryWord(s.ringBuffer, s.pos, dictionaryData, offset, wordLength, transforms, transformIdx)\n\t\ts.pos += len\n\t\ts.metaBlockLength -= len\n\t\tif s.pos >= fence {\n\t\t\ts.nextRunningState = 4\n\t\t\ts.runningState = 12\n\t\t\treturn 0\n\t\t}\n\t\ts.runningState = 4\n\t}\n\treturn 0\n}\n\nfunc initializeCompoundDictionary(s *_State) {\n\ts.cdBlockMap = make([]int8, 256)\n\tvar blockBits int32 = 8\n\tfor ((s.cdTotalSize - 1) >> uint(blockBits)) != 0 {\n\t\tblockBits++\n\t}\n\tblockBits -= 8\n\ts.cdBlockBits = blockBits\n\tvar cursor int32 = 0\n\tvar index int32 = 0\n\tfor cursor < s.cdTotalSize {\n\t\tfor s.cdChunkOffsets[index+1] < cursor {\n\t\t\tindex++\n\t\t}\n\t\ts.cdBlockMap[cursor>>uint(blockBits)] = int8(index)\n\t\tcursor += 1 << uint(blockBits)\n\t}\n}\n\nfunc initializeCompoundDictionaryCopy(s *_State, address int32, length int32) int32 {\n\tif s.cdBlockBits == -1 {\n\t\tinitializeCompoundDictionary(s)\n\t}\n\tvar index int32 = int32(s.cdBlockMap[address>>uint(s.cdBlockBits)])\n\tfor address >= s.cdChunkOffsets[index+1] {\n\t\tindex++\n\t}\n\tif s.cdTotalSize > address+length {\n\t\treturn makeError(s, -9)\n\t}\n\ts.distRbIdx = (s.distRbIdx + 1) & 0x3\n\ts.rings[s.distRbIdx] = s.distance\n\ts.metaBlockLength -= length\n\ts.cdBrIndex = index\n\ts.cdBrOffset = address - s.cdChunkOffsets[index]\n\ts.cdBrLength = length\n\ts.cdBrCopied = 0\n\treturn 0\n}\n\nfunc copyFromCompoundDictionary(s *_State, fence int32) int32 {\n\tvar pos int32 = s.pos\n\tvar origPos int32 = pos\n\tfor s.cdBrLength != s.cdBrCopied {\n\t\tvar space int32 = fence - pos\n\t\tvar chunkLength int32 = s.cdChunkOffsets[s.cdBrIndex+1] - s.cdChunkOffsets[s.cdBrIndex]\n\t\tvar remChunkLength int32 = chunkLength - s.cdBrOffset\n\t\tvar length int32 = s.cdBrLength - s.cdBrCopied\n\t\tif length > remChunkLength {\n\t\t\tlength = remChunkLength\n\t\t}\n\t\tif length > space {\n\t\t\tlength = space\n\t\t}\n\t\tcopyBytes(s.ringBuffer, pos, s.cdChunks[s.cdBrIndex], s.cdBrOffset, s.cdBrOffset+length)\n\t\tpos += length\n\t\ts.cdBrOffset += length\n\t\ts.cdBrCopied += length\n\t\tif length == remChunkLength {\n\t\t\ts.cdBrIndex++\n\t\t\ts.cdBrOffset = 0\n\t\t}\n\t\tif pos >= fence {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn pos - origPos\n}\n\nfunc decompress(s *_State) int32 {\n\tvar k int32\n\tvar result int32\n\tif s.runningState == 0 {\n\t\treturn makeError(s, -25)\n\t}\n\tif s.runningState < 0 {\n\t\treturn makeError(s, -28)\n\t}\n\tif s.runningState == 11 {\n\t\treturn makeError(s, -22)\n\t}\n\tif s.runningState == 1 {\n\t\tvar windowBits int32 = decodeWindowBits(s)\n\t\tif windowBits == -1 {\n\t\t\treturn makeError(s, -11)\n\t\t}\n\t\ts.maxRingBufferSize = 1 << uint(windowBits)\n\t\ts.maxBackwardDistance = s.maxRingBufferSize - 16\n\t\ts.runningState = 2\n\t}\n\tvar fence int32 = calculateFence(s)\n\tvar ringBufferMask int32 = s.ringBufferSize - 1\n\tvar ringBuffer []int8 = s.ringBuffer\n\tfor s.runningState != 10 {\n\t\tswitch s.runningState {\n\t\tcase 2:\n\t\t\tif s.metaBlockLength < 0 {\n\t\t\t\treturn makeError(s, -10)\n\t\t\t}\n\t\t\tresult = readNextMetablockHeader(s)\n\t\t\tif result < 0 {\n\t\t\t\treturn result\n\t\t\t}\n\t\t\tfence = calculateFence(s)\n\t\t\tringBufferMask = s.ringBufferSize - 1\n\t\t\tringBuffer = s.ringBuffer\n\t\t\tcontinue\n\t\tcase 3:\n\t\t\tresult = readMetablockHuffmanCodesAndContextMaps(s)\n\t\t\tif result < 0 {\n\t\t\t\treturn result\n\t\t\t}\n\t\t\ts.runningState = 4\n\t\t\tcontinue\n\t\tcase 4:\n\t\t\tif s.metaBlockLength <= 0 {\n\t\t\t\ts.runningState = 2\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif s.halfOffset > 1015 {\n\t\t\t\tresult = readMoreInput(s)\n\t\t\t\tif result < 0 {\n\t\t\t\t\treturn result\n\t\t\t\t}\n\t\t\t}\n\t\t\tif s.commandBlockLength == 0 {\n\t\t\t\tdecodeCommandBlockSwitch(s)\n\t\t\t}\n\t\t\ts.commandBlockLength--\n\t\t\tif s.bitOffset >= 32 {\n\t\t\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\t\t\ts.halfOffset++\n\t\t\t\ts.bitOffset -= 32\n\t\t\t}\n\t\t\tvar cmdCode int32 = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2\n\t\t\tvar insertAndCopyExtraBits int32 = int32(cmdLookup[cmdCode])\n\t\t\tvar insertLengthOffset int32 = int32(cmdLookup[cmdCode+1])\n\t\t\tvar copyLengthOffset int32 = int32(cmdLookup[cmdCode+2])\n\t\t\ts.distanceCode = int32(cmdLookup[cmdCode+3])\n\t\t\tif s.bitOffset >= 32 {\n\t\t\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\t\t\ts.halfOffset++\n\t\t\t\ts.bitOffset -= 32\n\t\t\t}\n\t\t\tvar insertLengthExtraBits int32 = insertAndCopyExtraBits & 0xFF\n\t\t\ts.insertLength = insertLengthOffset + readFewBits(s, insertLengthExtraBits)\n\t\t\tif s.bitOffset >= 32 {\n\t\t\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\t\t\ts.halfOffset++\n\t\t\t\ts.bitOffset -= 32\n\t\t\t}\n\t\t\tvar copyLengthExtraBits int32 = insertAndCopyExtraBits >> 8\n\t\t\ts.copyLength = copyLengthOffset + readFewBits(s, copyLengthExtraBits)\n\t\t\ts.j = 0\n\t\t\ts.runningState = 7\n\t\t\tcontinue\n\t\tcase 7:\n\t\t\tif s.trivialLiteralContext != 0 {\n\t\t\t\tfor s.j < s.insertLength {\n\t\t\t\t\tif s.halfOffset > 1015 {\n\t\t\t\t\t\tresult = readMoreInput(s)\n\t\t\t\t\t\tif result < 0 {\n\t\t\t\t\t\t\treturn result\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif s.literalBlockLength == 0 {\n\t\t\t\t\t\tdecodeLiteralBlockSwitch(s)\n\t\t\t\t\t}\n\t\t\t\t\ts.literalBlockLength--\n\t\t\t\t\tif s.bitOffset >= 32 {\n\t\t\t\t\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\t\t\t\t\ts.halfOffset++\n\t\t\t\t\t\ts.bitOffset -= 32\n\t\t\t\t\t}\n\t\t\t\t\tringBuffer[s.pos] = int8(readSymbol(s.literalTreeGroup, s.literalTreeIdx, s))\n\t\t\t\t\ts.pos++\n\t\t\t\t\ts.j++\n\t\t\t\t\tif s.pos >= fence {\n\t\t\t\t\t\ts.nextRunningState = 7\n\t\t\t\t\t\ts.runningState = 12\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar prevByte1 int32 = int32(ringBuffer[(s.pos-1)&ringBufferMask]) & 0xFF\n\t\t\t\tvar prevByte2 int32 = int32(ringBuffer[(s.pos-2)&ringBufferMask]) & 0xFF\n\t\t\t\tfor s.j < s.insertLength {\n\t\t\t\t\tif s.halfOffset > 1015 {\n\t\t\t\t\t\tresult = readMoreInput(s)\n\t\t\t\t\t\tif result < 0 {\n\t\t\t\t\t\t\treturn result\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif s.literalBlockLength == 0 {\n\t\t\t\t\t\tdecodeLiteralBlockSwitch(s)\n\t\t\t\t\t}\n\t\t\t\t\tvar literalContext int32 = lookup[s.contextLookupOffset1+prevByte1] | lookup[s.contextLookupOffset2+prevByte2]\n\t\t\t\t\tvar literalTreeIdx int32 = int32(s.contextMap[s.contextMapSlice+literalContext]) & 0xFF\n\t\t\t\t\ts.literalBlockLength--\n\t\t\t\t\tprevByte2 = prevByte1\n\t\t\t\t\tif s.bitOffset >= 32 {\n\t\t\t\t\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\t\t\t\t\ts.halfOffset++\n\t\t\t\t\t\ts.bitOffset -= 32\n\t\t\t\t\t}\n\t\t\t\t\tprevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s)\n\t\t\t\t\tringBuffer[s.pos] = int8(prevByte1)\n\t\t\t\t\ts.pos++\n\t\t\t\t\ts.j++\n\t\t\t\t\tif s.pos >= fence {\n\t\t\t\t\t\ts.nextRunningState = 7\n\t\t\t\t\t\ts.runningState = 12\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif s.runningState != 7 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\ts.metaBlockLength -= s.insertLength\n\t\t\tif s.metaBlockLength <= 0 {\n\t\t\t\ts.runningState = 4\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tvar distanceCode int32 = s.distanceCode\n\t\t\tif distanceCode < 0 {\n\t\t\t\ts.distance = s.rings[s.distRbIdx]\n\t\t\t} else {\n\t\t\t\tif s.halfOffset > 1015 {\n\t\t\t\t\tresult = readMoreInput(s)\n\t\t\t\t\tif result < 0 {\n\t\t\t\t\t\treturn result\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif s.distanceBlockLength == 0 {\n\t\t\t\t\tdecodeDistanceBlockSwitch(s)\n\t\t\t\t}\n\t\t\t\ts.distanceBlockLength--\n\t\t\t\tif s.bitOffset >= 32 {\n\t\t\t\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\t\t\t\ts.halfOffset++\n\t\t\t\t\ts.bitOffset -= 32\n\t\t\t\t}\n\t\t\t\tvar distTreeIdx int32 = int32(s.distContextMap[s.distContextMapSlice+distanceCode]) & 0xFF\n\t\t\t\tdistanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s)\n\t\t\t\tif distanceCode < 16 {\n\t\t\t\t\tvar index int32 = (s.distRbIdx + distanceShortCodeIndexOffset[distanceCode]) & 0x3\n\t\t\t\t\ts.distance = s.rings[index] + distanceShortCodeValueOffset[distanceCode]\n\t\t\t\t\tif s.distance < 0 {\n\t\t\t\t\t\treturn makeError(s, -12)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar extraBits int32 = int32(s.distExtraBits[distanceCode])\n\t\t\t\t\tvar bits int32\n\t\t\t\t\tif s.bitOffset+extraBits <= 64 {\n\t\t\t\t\t\tbits = readFewBits(s, extraBits)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif s.bitOffset >= 32 {\n\t\t\t\t\t\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\t\t\t\t\t\ts.halfOffset++\n\t\t\t\t\t\t\ts.bitOffset -= 32\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbits = readFewBits(s, extraBits)\n\t\t\t\t\t}\n\t\t\t\t\ts.distance = s.distOffset[distanceCode] + (bits << uint(s.distancePostfixBits))\n\t\t\t\t}\n\t\t\t}\n\t\t\tif s.maxDistance != s.maxBackwardDistance && s.pos < s.maxBackwardDistance {\n\t\t\t\ts.maxDistance = s.pos\n\t\t\t} else {\n\t\t\t\ts.maxDistance = s.maxBackwardDistance\n\t\t\t}\n\t\t\tif s.distance > s.maxDistance {\n\t\t\t\ts.runningState = 9\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif distanceCode > 0 {\n\t\t\t\ts.distRbIdx = (s.distRbIdx + 1) & 0x3\n\t\t\t\ts.rings[s.distRbIdx] = s.distance\n\t\t\t}\n\t\t\tif s.copyLength > s.metaBlockLength {\n\t\t\t\treturn makeError(s, -9)\n\t\t\t}\n\t\t\ts.j = 0\n\t\t\ts.runningState = 8\n\t\t\tcontinue\n\t\tcase 8:\n\t\t\tvar src int32 = (s.pos - s.distance) & ringBufferMask\n\t\t\tvar dst int32 = s.pos\n\t\t\tvar copyLength int32 = s.copyLength - s.j\n\t\t\tvar srcEnd int32 = src + copyLength\n\t\t\tvar dstEnd int32 = dst + copyLength\n\t\t\tif (srcEnd < ringBufferMask) && (dstEnd < ringBufferMask) {\n\t\t\t\tif copyLength < 12 || (srcEnd > dst && dstEnd > src) {\n\t\t\t\t\tvar numQuads int32 = (copyLength + 3) >> 2\n\t\t\t\t\tfor k = 0; k < numQuads; k++ {\n\t\t\t\t\t\tringBuffer[dst] = ringBuffer[src]\n\t\t\t\t\t\tsrc++\n\t\t\t\t\t\tdst++\n\t\t\t\t\t\tringBuffer[dst] = ringBuffer[src]\n\t\t\t\t\t\tsrc++\n\t\t\t\t\t\tdst++\n\t\t\t\t\t\tringBuffer[dst] = ringBuffer[src]\n\t\t\t\t\t\tsrc++\n\t\t\t\t\t\tdst++\n\t\t\t\t\t\tringBuffer[dst] = ringBuffer[src]\n\t\t\t\t\t\tsrc++\n\t\t\t\t\t\tdst++\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcopyBytesWithin(ringBuffer, dst, src, srcEnd)\n\t\t\t\t}\n\t\t\t\ts.j += copyLength\n\t\t\t\ts.metaBlockLength -= copyLength\n\t\t\t\ts.pos += copyLength\n\t\t\t} else {\n\t\t\t\tfor s.j < s.copyLength {\n\t\t\t\t\tringBuffer[s.pos] = ringBuffer[(s.pos-s.distance)&ringBufferMask]\n\t\t\t\t\ts.metaBlockLength--\n\t\t\t\t\ts.pos++\n\t\t\t\t\ts.j++\n\t\t\t\t\tif s.pos >= fence {\n\t\t\t\t\t\ts.nextRunningState = 8\n\t\t\t\t\t\ts.runningState = 12\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif s.runningState == 8 {\n\t\t\t\ts.runningState = 4\n\t\t\t}\n\t\t\tcontinue\n\t\tcase 9:\n\t\t\tresult = doUseDictionary(s, fence)\n\t\t\tif result < 0 {\n\t\t\t\treturn result\n\t\t\t}\n\t\t\tcontinue\n\t\tcase 14:\n\t\t\ts.pos += copyFromCompoundDictionary(s, fence)\n\t\t\tif s.pos >= fence {\n\t\t\t\ts.nextRunningState = 14\n\t\t\t\ts.runningState = 12\n\t\t\t\treturn 2\n\t\t\t}\n\t\t\ts.runningState = 4\n\t\t\tcontinue\n\t\tcase 5:\n\t\t\tfor s.metaBlockLength > 0 {\n\t\t\t\tif s.halfOffset > 1015 {\n\t\t\t\t\tresult = readMoreInput(s)\n\t\t\t\t\tif result < 0 {\n\t\t\t\t\t\treturn result\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif s.bitOffset >= 32 {\n\t\t\t\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\t\t\t\ts.halfOffset++\n\t\t\t\t\ts.bitOffset -= 32\n\t\t\t\t}\n\t\t\t\treadFewBits(s, 8)\n\t\t\t\ts.metaBlockLength--\n\t\t\t}\n\t\t\ts.runningState = 2\n\t\t\tcontinue\n\t\tcase 6:\n\t\t\tresult = copyUncompressedData(s)\n\t\t\tif result < 0 {\n\t\t\t\treturn result\n\t\t\t}\n\t\t\tcontinue\n\t\tcase 12:\n\t\t\ts.ringBufferBytesReady = min(s.pos, s.ringBufferSize)\n\t\t\ts.runningState = 13\n\t\t\tcontinue\n\t\tcase 13:\n\t\t\tresult = writeRingBuffer(s)\n\t\t\tif result != 0 {\n\t\t\t\treturn result\n\t\t\t}\n\t\t\tif s.pos >= s.maxBackwardDistance {\n\t\t\t\ts.maxDistance = s.maxBackwardDistance\n\t\t\t}\n\t\t\tif s.pos >= s.ringBufferSize {\n\t\t\t\tif s.pos > s.ringBufferSize {\n\t\t\t\t\tcopyBytesWithin(ringBuffer, 0, s.ringBufferSize, s.pos)\n\t\t\t\t}\n\t\t\t\ts.pos = s.pos & ringBufferMask\n\t\t\t\ts.ringBufferBytesWritten = 0\n\t\t\t}\n\t\t\ts.runningState = s.nextRunningState\n\t\t\tcontinue\n\t\tdefault:\n\t\t\treturn makeError(s, -28)\n\t\t}\n\t}\n\tif s.runningState != 10 {\n\t\treturn makeError(s, -29)\n\t}\n\tif s.metaBlockLength < 0 {\n\t\treturn makeError(s, -10)\n\t}\n\tresult = jumpToByteBoundary(s)\n\tif result != 0 {\n\t\treturn result\n\t}\n\tresult = checkHealth(s, 1)\n\tif result != 0 {\n\t\treturn result\n\t}\n\treturn 1\n}\n\nfunc init() {\n\tunpackCommandLookupTable(cmdLookup)\n}\n\ntype _Transforms struct {\n\tnumTransforms       int32\n\ttriplets            []int32\n\tprefixSuffixStorage []int8\n\tprefixSuffixHeads   []int32\n\tparams              []int16\n}\n\nfunc makeTransforms(numTransforms int32, prefixSuffixLen int32, prefixSuffixCount int32) *_Transforms {\n\tthis := &_Transforms{}\n\tthis.numTransforms = numTransforms\n\tthis.triplets = make([]int32, numTransforms*3)\n\tthis.params = make([]int16, numTransforms)\n\tthis.prefixSuffixStorage = make([]int8, prefixSuffixLen)\n\tthis.prefixSuffixHeads = make([]int32, prefixSuffixCount+1)\n\treturn this\n}\n\nvar rfcTransforms = makeTransforms(121, 167, 50)\n\nfunc unpackTransforms(prefixSuffix []int8, prefixSuffixHeads []int32, transforms []int32, prefixSuffixSrc string, transformsSrc string) {\n\tvar i int32\n\tvar prefixSuffixBytes []int32 = toUtf8Runes(prefixSuffixSrc)\n\tvar n int32 = int32(len(prefixSuffixBytes))\n\tvar index int32 = 1\n\tvar j int32 = 0\n\tfor i = 0; i < n; i++ {\n\t\tvar c int32 = prefixSuffixBytes[i]\n\t\tif c == 35 {\n\t\t\tprefixSuffixHeads[index] = j\n\t\t\tindex++\n\t\t} else {\n\t\t\tprefixSuffix[j] = int8(c)\n\t\t\tj++\n\t\t}\n\t}\n\tfor i = 0; i < 363; i++ {\n\t\ttransforms[i] = int32(transformsSrc[i]) - 32\n\t}\n}\n\nfunc transformDictionaryWord(dst []int8, dstOffset int32, src []int8, srcOffset int32, wordLen int32, transforms *_Transforms, transformIndex int32) int32 {\n\tvar offset int32 = dstOffset\n\tvar triplets []int32 = transforms.triplets\n\tvar prefixSuffixStorage []int8 = transforms.prefixSuffixStorage\n\tvar prefixSuffixHeads []int32 = transforms.prefixSuffixHeads\n\tvar transformOffset int32 = 3 * transformIndex\n\tvar prefixIdx int32 = triplets[transformOffset]\n\tvar transformType int32 = triplets[transformOffset+1]\n\tvar suffixIdx int32 = triplets[transformOffset+2]\n\tvar prefix int32 = prefixSuffixHeads[prefixIdx]\n\tvar prefixEnd int32 = prefixSuffixHeads[prefixIdx+1]\n\tvar suffix int32 = prefixSuffixHeads[suffixIdx]\n\tvar suffixEnd int32 = prefixSuffixHeads[suffixIdx+1]\n\tvar omitFirst int32 = transformType - 11\n\tvar omitLast int32 = transformType\n\tif omitFirst < 1 || omitFirst > 9 {\n\t\tomitFirst = 0\n\t}\n\tif omitLast < 1 || omitLast > 9 {\n\t\tomitLast = 0\n\t}\n\tfor prefix != prefixEnd {\n\t\tdst[offset] = prefixSuffixStorage[prefix]\n\t\tprefix++\n\t\toffset++\n\t}\n\tvar len int32 = wordLen\n\tif omitFirst > len {\n\t\tomitFirst = len\n\t}\n\tvar dictOffset int32 = srcOffset + omitFirst\n\tlen -= omitFirst\n\tlen -= omitLast\n\tvar i int32 = len\n\tfor i > 0 {\n\t\tdst[offset] = src[dictOffset]\n\t\tdictOffset++\n\t\toffset++\n\t\ti--\n\t}\n\tif transformType == 10 || transformType == 11 {\n\t\tvar uppercaseOffset int32 = offset - len\n\t\tif transformType == 10 {\n\t\t\tlen = 1\n\t\t}\n\t\tfor len > 0 {\n\t\t\tvar c0 int32 = int32(dst[uppercaseOffset]) & 0xFF\n\t\t\tif c0 < 0xC0 {\n\t\t\t\tif c0 >= 97 && c0 <= 122 {\n\t\t\t\t\tdst[uppercaseOffset] = int8(int32(dst[uppercaseOffset]) ^ 32)\n\t\t\t\t}\n\t\t\t\tuppercaseOffset += 1\n\t\t\t\tlen -= 1\n\t\t\t} else if c0 < 0xE0 {\n\t\t\t\tdst[uppercaseOffset+1] = int8(int32(dst[uppercaseOffset+1]) ^ 32)\n\t\t\t\tuppercaseOffset += 2\n\t\t\t\tlen -= 2\n\t\t\t} else {\n\t\t\t\tdst[uppercaseOffset+2] = int8(int32(dst[uppercaseOffset+2]) ^ 5)\n\t\t\t\tuppercaseOffset += 3\n\t\t\t\tlen -= 3\n\t\t\t}\n\t\t}\n\t} else if transformType == 21 || transformType == 22 {\n\t\tvar shiftOffset int32 = offset - len\n\t\tvar param int32 = int32(transforms.params[transformIndex])\n\t\tvar scalar int32 = (param & 0x7FFF) + (0x1000000 - (param & 0x8000))\n\t\tfor len > 0 {\n\t\t\tvar step int32 = 1\n\t\t\tvar c0 int32 = int32(dst[shiftOffset]) & 0xFF\n\t\t\tif c0 < 0x80 {\n\t\t\t\tscalar += c0\n\t\t\t\tdst[shiftOffset] = int8(scalar & 0x7F)\n\t\t\t} else if c0 < 0xC0 {\n\t\t\t} else if c0 < 0xE0 {\n\t\t\t\tif len >= 2 {\n\t\t\t\t\tvar c1 int32 = int32(dst[shiftOffset+1])\n\t\t\t\t\tscalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6)\n\t\t\t\t\tdst[shiftOffset] = int8(0xC0 | ((scalar >> 6) & 0x1F))\n\t\t\t\t\tdst[shiftOffset+1] = int8((c1 & 0xC0) | (scalar & 0x3F))\n\t\t\t\t\tstep = 2\n\t\t\t\t} else {\n\t\t\t\t\tstep = len\n\t\t\t\t}\n\t\t\t} else if c0 < 0xF0 {\n\t\t\t\tif len >= 3 {\n\t\t\t\t\tvar c1 int32 = int32(dst[shiftOffset+1])\n\t\t\t\t\tvar c2 int32 = int32(dst[shiftOffset+2])\n\t\t\t\t\tscalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12)\n\t\t\t\t\tdst[shiftOffset] = int8(0xE0 | ((scalar >> 12) & 0x0F))\n\t\t\t\t\tdst[shiftOffset+1] = int8((c1 & 0xC0) | ((scalar >> 6) & 0x3F))\n\t\t\t\t\tdst[shiftOffset+2] = int8((c2 & 0xC0) | (scalar & 0x3F))\n\t\t\t\t\tstep = 3\n\t\t\t\t} else {\n\t\t\t\t\tstep = len\n\t\t\t\t}\n\t\t\t} else if c0 < 0xF8 {\n\t\t\t\tif len >= 4 {\n\t\t\t\t\tvar c1 int32 = int32(dst[shiftOffset+1])\n\t\t\t\t\tvar c2 int32 = int32(dst[shiftOffset+2])\n\t\t\t\t\tvar c3 int32 = int32(dst[shiftOffset+3])\n\t\t\t\t\tscalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18)\n\t\t\t\t\tdst[shiftOffset] = int8(0xF0 | ((scalar >> 18) & 0x07))\n\t\t\t\t\tdst[shiftOffset+1] = int8((c1 & 0xC0) | ((scalar >> 12) & 0x3F))\n\t\t\t\t\tdst[shiftOffset+2] = int8((c2 & 0xC0) | ((scalar >> 6) & 0x3F))\n\t\t\t\t\tdst[shiftOffset+3] = int8((c3 & 0xC0) | (scalar & 0x3F))\n\t\t\t\t\tstep = 4\n\t\t\t\t} else {\n\t\t\t\t\tstep = len\n\t\t\t\t}\n\t\t\t}\n\t\t\tshiftOffset += step\n\t\t\tlen -= step\n\t\t\tif transformType == 21 {\n\t\t\t\tlen = 0\n\t\t\t}\n\t\t}\n\t}\n\tfor suffix != suffixEnd {\n\t\tdst[offset] = prefixSuffixStorage[suffix]\n\t\tsuffix++\n\t\toffset++\n\t}\n\treturn offset - dstOffset\n}\n\nfunc init() {\n\tunpackTransforms(rfcTransforms.prefixSuffixStorage, rfcTransforms.prefixSuffixHeads, rfcTransforms.triplets, \"# #s #, #e #.# the #.com/#\\u00C2\\u00A0# of # and # in # to #\\\"#\\\">#\\n#]# for # a # that #. # with #'# from # by #. The # on # as # is #ing #\\n\\t#:#ed #(# at #ly #=\\\"# of the #. This #,# not #er #al #='#ful #ive #less #est #ize #ous #\", \"     !! ! ,  *!  &!  \\\" !  ) *   * -  ! # !  #!*!  +  ,$ !  -  %  .  / #   0  1 .  \\\"   2  3!*   4%  ! # /   5  6  7  8 0  1 &   $   9 +   :  ;  < '  !=  >  ?! 4  @ 4  2  &   A *# (   B  C& ) %  ) !*# *-% A +! *.  D! %'  & E *6  F  G% ! *A *%  H! D  I!+!  J!+   K +- *4! A  L!*4  M  N +6  O!*% +.! K *G  P +%(  ! G *D +D  Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K\")\n}\nfunc getNextKey(key int32, len int32) int32 {\n\tvar step int32 = 1 << uint((len - 1))\n\tfor (key & step) != 0 {\n\t\tstep = step >> 1\n\t}\n\treturn (key & (step - 1)) + step\n}\n\nfunc replicateValue(table []int32, offset int32, step int32, end int32, item int32) {\n\tvar pos int32 = end\n\tfor pos > 0 {\n\t\tpos -= step\n\t\ttable[offset+pos] = item\n\t}\n}\n\nfunc nextTableBitSize(count []int32, len int32, rootBits int32) int32 {\n\tvar bits int32 = len\n\tvar left int32 = 1 << uint((bits - rootBits))\n\tfor bits < 15 {\n\t\tleft -= count[bits]\n\t\tif left <= 0 {\n\t\t\tbreak\n\t\t}\n\t\tbits++\n\t\tleft = left << 1\n\t}\n\treturn bits - rootBits\n}\n\nfunc buildHuffmanTable(tableGroup []int32, tableIdx int32, rootBits int32, codeLengths []int32, codeLengthsSize int32) int32 {\n\tvar sym int32\n\tvar len int32\n\tvar k int32\n\tvar tableOffset int32 = tableGroup[tableIdx]\n\tvar sorted []int32 = make([]int32, codeLengthsSize)\n\tvar count []int32 = make([]int32, 16)\n\tvar offset []int32 = make([]int32, 16)\n\tfor sym = 0; sym < codeLengthsSize; sym++ {\n\t\tcount[codeLengths[sym]]++\n\t}\n\toffset[1] = 0\n\tfor len = 1; len < 15; len++ {\n\t\toffset[len+1] = offset[len] + count[len]\n\t}\n\tfor sym = 0; sym < codeLengthsSize; sym++ {\n\t\tif codeLengths[sym] != 0 {\n\t\t\tsorted[offset[codeLengths[sym]]] = sym\n\t\t\toffset[codeLengths[sym]]++\n\t\t}\n\t}\n\tvar tableBits int32 = rootBits\n\tvar tableSize int32 = 1 << uint(tableBits)\n\tvar totalSize int32 = tableSize\n\tif offset[15] == 1 {\n\t\tfor k = 0; k < totalSize; k++ {\n\t\t\ttableGroup[tableOffset+k] = sorted[0]\n\t\t}\n\t\treturn totalSize\n\t}\n\tvar key int32 = 0\n\tvar symbol int32 = 0\n\tvar step int32 = 1\n\tfor len = 1; len <= rootBits; len++ {\n\t\tstep = step << 1\n\t\tfor count[len] > 0 {\n\t\t\treplicateValue(tableGroup, tableOffset+key, step, tableSize, len<<16|sorted[symbol])\n\t\t\tsymbol++\n\t\t\tkey = getNextKey(key, len)\n\t\t\tcount[len]--\n\t\t}\n\t}\n\tvar mask int32 = totalSize - 1\n\tvar low int32 = -1\n\tvar currentOffset int32 = tableOffset\n\tstep = 1\n\tfor len = rootBits + 1; len <= 15; len++ {\n\t\tstep = step << 1\n\t\tfor count[len] > 0 {\n\t\t\tif (key & mask) != low {\n\t\t\t\tcurrentOffset += tableSize\n\t\t\t\ttableBits = nextTableBitSize(count, len, rootBits)\n\t\t\t\ttableSize = 1 << uint(tableBits)\n\t\t\t\ttotalSize += tableSize\n\t\t\t\tlow = key & mask\n\t\t\t\ttableGroup[tableOffset+low] = (tableBits+rootBits)<<16 | (currentOffset - tableOffset - low)\n\t\t\t}\n\t\t\treplicateValue(tableGroup, currentOffset+(key>>uint(rootBits)), step, tableSize, (len-rootBits)<<16|sorted[symbol])\n\t\t\tsymbol++\n\t\t\tkey = getNextKey(key, len)\n\t\t\tcount[len]--\n\t\t}\n\t}\n\treturn totalSize\n}\n\nfunc readMoreInput(s *_State) int32 {\n\tif s.endOfStreamReached != 0 {\n\t\tif halfAvailable(s) >= -2 {\n\t\t\treturn 0\n\t\t}\n\t\treturn makeError(s, -16)\n\t}\n\tvar readOffset int32 = s.halfOffset << 2\n\tvar bytesInBuffer int32 = 4096 - readOffset\n\tcopyBytesWithin(s.byteBuffer, 0, readOffset, 4096)\n\ts.halfOffset = 0\n\tfor bytesInBuffer < 4096 {\n\t\tvar spaceLeft int32 = 4096 - bytesInBuffer\n\t\tvar len int32 = readInput(s, s.byteBuffer, bytesInBuffer, spaceLeft)\n\t\tif len < -1 {\n\t\t\treturn len\n\t\t}\n\t\tif len <= 0 {\n\t\t\ts.endOfStreamReached = 1\n\t\t\ts.tailBytes = bytesInBuffer\n\t\t\tbytesInBuffer += 3\n\t\t\tbreak\n\t\t}\n\t\tbytesInBuffer += len\n\t}\n\tbytesToNibbles(s, bytesInBuffer)\n\treturn 0\n}\n\nfunc checkHealth(s *_State, endOfStream int32) int32 {\n\tif s.endOfStreamReached == 0 {\n\t\treturn 0\n\t}\n\tvar byteOffset int32 = (s.halfOffset << 2) + ((s.bitOffset + 7) >> 3) - 8\n\tif byteOffset > s.tailBytes {\n\t\treturn makeError(s, -13)\n\t}\n\tif (endOfStream != 0) && (byteOffset != s.tailBytes) {\n\t\treturn makeError(s, -17)\n\t}\n\treturn 0\n}\n\nfunc readFewBits(s *_State, n int32) int32 {\n\tvar v int32 = (int32(shr64(s.accumulator64, s.bitOffset))) & ((1 << uint(n)) - 1)\n\ts.bitOffset += n\n\treturn v\n}\n\nfunc readManyBits(s *_State, n int32) int32 {\n\tvar low int32 = readFewBits(s, 16)\n\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\ts.halfOffset++\n\ts.bitOffset -= 32\n\treturn low | (readFewBits(s, n-16) << 16)\n}\n\nfunc initBitReader(s *_State) int32 {\n\ts.byteBuffer = make([]int8, 4160)\n\ts.accumulator64 = 0\n\ts.intBuffer = make([]int32, 1040)\n\ts.bitOffset = 64\n\ts.halfOffset = 1024\n\ts.endOfStreamReached = 0\n\treturn prepare(s)\n}\n\nfunc prepare(s *_State) int32 {\n\tif s.halfOffset > 1015 {\n\t\tvar result int32 = readMoreInput(s)\n\t\tif result != 0 {\n\t\t\treturn result\n\t\t}\n\t}\n\tvar health int32 = checkHealth(s, 0)\n\tif health != 0 {\n\t\treturn health\n\t}\n\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\ts.halfOffset++\n\ts.bitOffset -= 32\n\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\ts.halfOffset++\n\ts.bitOffset -= 32\n\treturn 0\n}\n\nfunc reload(s *_State) int32 {\n\tif s.bitOffset == 64 {\n\t\treturn prepare(s)\n\t}\n\treturn 0\n}\n\nfunc jumpToByteBoundary(s *_State) int32 {\n\tvar padding int32 = (64 - s.bitOffset) & 7\n\tif padding != 0 {\n\t\tvar paddingBits int32 = readFewBits(s, padding)\n\t\tif paddingBits != 0 {\n\t\t\treturn makeError(s, -5)\n\t\t}\n\t}\n\treturn 0\n}\n\nfunc halfAvailable(s *_State) int32 {\n\tvar limit int32 = 1024\n\tif s.endOfStreamReached != 0 {\n\t\tlimit = (s.tailBytes + 3) >> 2\n\t}\n\treturn limit - s.halfOffset\n}\n\nfunc copyRawBytes(s *_State, data []int8, offset int32, length int32) int32 {\n\tvar pos int32 = offset\n\tvar len int32 = length\n\tif (s.bitOffset & 7) != 0 {\n\t\treturn makeError(s, -30)\n\t}\n\tfor (s.bitOffset != 64) && (len != 0) {\n\t\tdata[pos] = int8(int32(shr64(s.accumulator64, s.bitOffset)))\n\t\tpos++\n\t\ts.bitOffset += 8\n\t\tlen--\n\t}\n\tif len == 0 {\n\t\treturn 0\n\t}\n\tvar copyNibbles int32 = min(halfAvailable(s), len>>2)\n\tif copyNibbles > 0 {\n\t\tvar readOffset int32 = s.halfOffset << 2\n\t\tvar delta int32 = copyNibbles << 2\n\t\tcopyBytes(data, pos, s.byteBuffer, readOffset, readOffset+delta)\n\t\tpos += delta\n\t\tlen -= delta\n\t\ts.halfOffset += copyNibbles\n\t}\n\tif len == 0 {\n\t\treturn 0\n\t}\n\tif halfAvailable(s) > 0 {\n\t\tif s.bitOffset >= 32 {\n\t\t\ts.accumulator64 = (int64(s.intBuffer[s.halfOffset]) << 32) | shr64(s.accumulator64, 32)\n\t\t\ts.halfOffset++\n\t\t\ts.bitOffset -= 32\n\t\t}\n\t\tfor len != 0 {\n\t\t\tdata[pos] = int8(int32(shr64(s.accumulator64, s.bitOffset)))\n\t\t\tpos++\n\t\t\ts.bitOffset += 8\n\t\t\tlen--\n\t\t}\n\t\treturn checkHealth(s, 0)\n\t}\n\tfor len > 0 {\n\t\tvar chunkLen int32 = readInput(s, data, pos, len)\n\t\tif chunkLen < -1 {\n\t\t\treturn chunkLen\n\t\t}\n\t\tif chunkLen <= 0 {\n\t\t\treturn makeError(s, -16)\n\t\t}\n\t\tpos += chunkLen\n\t\tlen -= chunkLen\n\t}\n\treturn 0\n}\n\nfunc bytesToNibbles(s *_State, byteLen int32) {\n\tvar i int32\n\tvar byteBuffer []int8 = s.byteBuffer\n\tvar halfLen int32 = byteLen >> 2\n\tvar intBuffer []int32 = s.intBuffer\n\tfor i = 0; i < halfLen; i++ {\n\t\tintBuffer[i] = (int32(byteBuffer[i*4]) & 0xFF) | ((int32(byteBuffer[(i*4)+1]) & 0xFF) << 8) | ((int32(byteBuffer[(i*4)+2]) & 0xFF) << 16) | ((int32(byteBuffer[(i*4)+3]) & 0xFF) << 24)\n\t}\n}\n\nvar lookup = make([]int32, 2048)\n\nfunc unpackLookupTable(lookup []int32, utfMap string, utfRle string) {\n\tvar i int32\n\tvar k int32\n\tfor i = 0; i < 256; i++ {\n\t\tlookup[i] = i & 0x3F\n\t\tlookup[512+i] = i >> 2\n\t\tlookup[1792+i] = 2 + (i >> 6)\n\t}\n\tfor i = 0; i < 128; i++ {\n\t\tlookup[1024+i] = 4 * (int32(utfMap[i]) - 32)\n\t}\n\tfor i = 0; i < 64; i++ {\n\t\tlookup[1152+i] = i & 1\n\t\tlookup[1216+i] = 2 + (i & 1)\n\t}\n\tvar offset int32 = 1280\n\tfor k = 0; k < 19; k++ {\n\t\tvar value int32 = k & 3\n\t\tvar rep int32 = int32(utfRle[k]) - 32\n\t\tfor i = 0; i < rep; i++ {\n\t\t\tlookup[offset] = value\n\t\t\toffset++\n\t\t}\n\t}\n\tfor i = 0; i < 16; i++ {\n\t\tlookup[1792+i] = 1\n\t\tlookup[2032+i] = 6\n\t}\n\tlookup[1792] = 0\n\tlookup[2047] = 7\n\tfor i = 0; i < 256; i++ {\n\t\tlookup[1536+i] = lookup[1792+i] << 3\n\t}\n}\n\nfunc init() {\n\tunpackLookupTable(lookup, \"         !!  !                  \\\"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# \", \"A/*  ':  & : $  \\u0081 @\")\n}\n\ntype _State struct {\n\tringBuffer             []int8\n\tcontextModes           []int8\n\tcontextMap             []int8\n\tdistContextMap         []int8\n\tdistExtraBits          []int8\n\toutput                 []int8\n\tbyteBuffer             []int8\n\tshortBuffer            []int16\n\tintBuffer              []int32\n\trings                  []int32\n\tblockTrees             []int32\n\tliteralTreeGroup       []int32\n\tcommandTreeGroup       []int32\n\tdistanceTreeGroup      []int32\n\tdistOffset             []int32\n\taccumulator64          int64\n\trunningState           int32\n\tnextRunningState       int32\n\taccumulator32          int32\n\tbitOffset              int32\n\thalfOffset             int32\n\ttailBytes              int32\n\tendOfStreamReached     int32\n\tmetaBlockLength        int32\n\tinputEnd               int32\n\tisUncompressed         int32\n\tisMetadata             int32\n\tliteralBlockLength     int32\n\tnumLiteralBlockTypes   int32\n\tcommandBlockLength     int32\n\tnumCommandBlockTypes   int32\n\tdistanceBlockLength    int32\n\tnumDistanceBlockTypes  int32\n\tpos                    int32\n\tmaxDistance            int32\n\tdistRbIdx              int32\n\ttrivialLiteralContext  int32\n\tliteralTreeIdx         int32\n\tcommandTreeIdx         int32\n\tj                      int32\n\tinsertLength           int32\n\tcontextMapSlice        int32\n\tdistContextMapSlice    int32\n\tcontextLookupOffset1   int32\n\tcontextLookupOffset2   int32\n\tdistanceCode           int32\n\tnumDirectDistanceCodes int32\n\tdistancePostfixBits    int32\n\tdistance               int32\n\tcopyLength             int32\n\tmaxBackwardDistance    int32\n\tmaxRingBufferSize      int32\n\tringBufferSize         int32\n\texpectedTotalSize      int32\n\toutputOffset           int32\n\toutputLength           int32\n\toutputUsed             int32\n\tringBufferBytesWritten int32\n\tringBufferBytesReady   int32\n\tisEager                int32\n\tisLargeWindow          int32\n\tcdNumChunks            int32\n\tcdTotalSize            int32\n\tcdBrIndex              int32\n\tcdBrOffset             int32\n\tcdBrLength             int32\n\tcdBrCopied             int32\n\tcdChunks               [][]int8\n\tcdChunkOffsets         []int32\n\tcdBlockBits            int32\n\tcdBlockMap             []int8\n\tinput                  *_InputStream\n}\n\nfunc makeState() *_State {\n\tthis := &_State{}\n\tthis.input = nil\n\tthis.ringBuffer = make([]int8, 0)\n\tthis.rings = make([]int32, 10)\n\tthis.rings[0] = 16\n\tthis.rings[1] = 15\n\tthis.rings[2] = 11\n\tthis.rings[3] = 4\n\treturn this\n}\n\nvar data = make([]int8, 0)\nvar offsets = make([]int32, 32)\nvar sizeBits = make([]int32, 32)\n\nfunc setData(newData []int8, newSizeBits []int32) {\n\tvar i int32\n\tvar dictionaryOffsets []int32 = offsets\n\tvar dictionarySizeBits []int32 = sizeBits\n\tfor i = 0; i < int32(len(newSizeBits)); i++ {\n\t\tdictionarySizeBits[i] = newSizeBits[i]\n\t}\n\tvar pos int32 = 0\n\tfor i = 0; i < int32(len(newSizeBits)); i++ {\n\t\tdictionaryOffsets[i] = pos\n\t\tvar bits int32 = dictionarySizeBits[i]\n\t\tif bits != 0 {\n\t\t\tpos += i << uint((bits & 31))\n\t\t}\n\t}\n\tfor i = int32(len(newSizeBits)); i < 32; i++ {\n\t\tdictionaryOffsets[i] = pos\n\t}\n\tdata = newData\n}\n\nfunc unpackDictionaryData(dictionary []int8, data0 string, data1 string, skipFlip string, sizeBits []int32, sizeBitsData string) {\n\tvar i int32\n\tvar j int32\n\tvar dict []int8 = toUsASCIIBytes(data0 + data1)\n\tvar skipFlipRunes []int32 = toUtf8Runes(skipFlip)\n\tvar offset int32 = 0\n\tvar n int32 = int32(len(skipFlipRunes)) >> 1\n\tfor i = 0; i < n; i++ {\n\t\tvar skip int32 = skipFlipRunes[2*i] - 36\n\t\tvar flip int32 = skipFlipRunes[2*i+1] - 36\n\t\tfor j = 0; j < skip; j++ {\n\t\t\tdict[offset] = int8(int32(dict[offset]) ^ 3)\n\t\t\toffset++\n\t\t}\n\t\tfor j = 0; j < flip; j++ {\n\t\t\tdict[offset] = int8(int32(dict[offset]) ^ 236)\n\t\t\toffset++\n\t\t}\n\t}\n\tfor i = 0; i < (int32(len(sizeBitsData))); i++ {\n\t\tsizeBits[i] = int32(sizeBitsData[i]) - 65\n\t}\n\tcopyBytes(dictionary, 0, dict, 0, int32(len(dict)))\n}\n\nfunc init() {\n\tvar dictionaryData []int8 = make([]int8, 122784)\n\tvar dictionarySizeBits []int32 = make([]int32, 25)\n\tunpackDictionaryData(dictionaryData, \"wjnfgltmojefofewab`h`lgfgbwbpkltlmozpjwf`jwzlsfmivpwojhfeqfftlqhwf{wzfbqlufqalgzolufelqnallhsobzojufojmfkfosklnfpjgfnlqftlqgolmdwkfnujftejmgsbdfgbzpevookfbgwfqnfb`kbqfbeqlnwqvfnbqhbaofvslmkjdkgbwfobmgmftpfufmmf{w`bpfalwkslpwvpfgnbgfkbmgkfqftkbwmbnfOjmhaoldpjyfabpfkfognbhfnbjmvpfq$*#(klogfmgptjwkMftpqfbgtfqfpjdmwbhfkbufdbnfpffm`boosbwktfoosovpnfmvejonsbqwiljmwkjpojpwdllgmffgtbzptfpwilapnjmgboploldlqj`kvpfpobpwwfbnbqnzellghjmdtjoofbpwtbqgafpwejqfSbdfhmltbtbz-smdnlufwkbmolbgdjufpfoemlwfnv`keffgnbmzql`hj`lmlm`follhkjgfgjfgKlnfqvofklpwbib{jmel`ovaobtpofppkboeplnfpv`kylmf233&lmfp`bqfWjnfqb`faovfelvqtffheb`fklsfdbufkbqgolpwtkfmsbqhhfswsbpppkjsqllnKWNOsobmWzsfglmfpbufhffseobdojmhplogejufwllhqbwfwltmivnswkvpgbqh`bqgejofefbqpwbzhjoowkbweboobvwlfufq-`lnwbohpklsulwfgffsnlgfqfpwwvqmalqmabmgefooqlpfvqo+phjmqlof`lnfb`wpbdfpnffwdlog-isdjwfnubqzefowwkfmpfmggqlsUjft`lsz2-3!?,b=pwlsfopfojfpwlvqsb`h-djesbpw`pp<dqbznfbm%dw8qjgfpklwobwfpbjgqlbgubq#effoilkmqj`hslqwebpw$VB.gfbg?,a=sllqajoowzsfV-P-tllgnvpw1s{8JmelqbmhtjgftbmwtbooofbgX3^8sbvotbufpvqf'+$ tbjwnbppbqnpdlfpdbjmobmdsbjg\\\"..#ol`hvmjwqllwtbohejqntjef{no!plmdwfpw13s{hjmgqltpwlloelmwnbjopbefpwbqnbsp`lqfqbjmeoltabazpsbmpbzp7s{85s{8bqwpellwqfbotjhjkfbwpwfswqjslqd,obhftfbhwlogElqn`bpwebmpabmhufqzqvmpivozwbph2s{8dlbodqftpoltfgdfjg>!pfwp6s{8-ip<73s{je#+pllmpfbwmlmfwvafyfqlpfmwqffgeb`wjmwldjewkbqn2;s{`bnfkjooalogyllnuljgfbpzqjmdejoosfbhjmjw`lpw0s{8ib`hwbdpajwpqloofgjwhmftmfbq?\\\"..dqltIPLMgvwzMbnfpbofzlv#olwpsbjmibyy`logfzfpejpkttt-qjphwbapsqfu23s{qjpf16s{Aovfgjmd033/abooelqgfbqmtjogal{-ebjqob`hufqpsbjqivmfwf`kje+\\\"sj`hfujo'+! tbqnolqgglfpsvoo/333jgfbgqbtkvdfpslwevmgavqmkqfe`foohfzpwj`hklvqolppevfo21s{pvjwgfboQPP!bdfgdqfzDFW!fbpfbjnpdjqobjgp;s{8mbuzdqjgwjsp :::tbqpobgz`bqp*8#~sks<kfoowbootklnyk9\\t),\\x0E\\t#233kboo-\\t\\tB4s{8svpk`kbw3s{8`qft),?,kbpk46s{eobwqbqf#%%#wfoo`bnslmwlobjgnjppphjswfmwejmfnbofdfwpsolw733/\\x0E\\t\\x0E\\t`lloeffw-sks?aq=fqj`nlpwdvjgafoogfp`kbjqnbwkbwln,jnd% ;1ov`h`fmw3338wjmzdlmfkwnopfoogqvdEQFFmlgfmj`h<jg>olpfmvooubpwtjmgQPP#tfbqqfozaffmpbnfgvhfmbpb`bsftjpkdvoeW109kjwppolwdbwfhj`haovqwkfz26s{$$*8*8!=npjftjmpajqgplqwafwbpffhW2;9lqgpwqffnboo53s{ebqn\\x0ElupalzpX3^-$*8!SLPWafbqhjgp*8~~nbqzwfmg+VH*rvbgyk9\\n.pjy....sqls$*8\\x0EojewW2:9uj`fbmgzgfaw=QPPsllomf`haoltW259gllqfuboW249ofwpebjolqbosloomlub`lopdfmf#\\x0Elxplewqlnfwjooqlpp?k0=slvqebgfsjmh?wq=njmj*\\u007F\\\"+njmfyk9\\x04abqpkfbq33*8njoh#..=jqlmeqfggjphtfmwpljosvwp,ip,klozW119JPAMW139bgbnpffp?k1=iplm$/#$`lmwW129#QPPollsbpjbnllm?,s=plvoOJMFelqw`bqwW279?k2=;3s{\\\"..?:s{8W379njhf975Ymj`fjm`kZlqhqj`fyk9\\b$**8svqfnbdfsbqbwlmfalmg904Y\\\\le\\\\$^*8333/yk9\\x0Bwbmhzbqgaltoavpk965YIbub03s{\\t\\u007F~\\t&@0&907YifeeF[SJ`bpkujpbdloepmltyk9\\x05rvfq-`pppj`hnfbwnjm-ajmggfookjqfsj`pqfmw905YKWWS.132elwltloeFMG#{al{967YALGZgj`h8\\t~\\tf{jw906Yubqpafbw$~*8gjfw:::8bmmf~~?,Xj^-Obmdhn.^tjqfwlzpbggppfbobof{8\\t\\n~f`klmjmf-lqd336*wlmziftppbmgofdpqlle333*#133tjmfdfbqgldpallwdbqz`vwpwzofwfnswjlm-{no`l`hdbmd'+$-63s{Sk-Gnjp`bobmolbmgfphnjofqzbmvmj{gjp`*8~\\tgvpw`ojs*-\\t\\t43s{.133GUGp4^=?wbsfgfnlj((*tbdffvqlskjolswpklofEBRpbpjm.15WobapsfwpVQO#avoh`llh8~\\x0E\\tKFBGX3^*baaqivbm+2:;ofpkwtjm?,j=plmzdvzpev`hsjsf\\u007F.\\t\\\"331*mgltX2^8X^8\\tOld#pbow\\x0E\\t\\n\\nabmdwqjnabwk*x\\x0E\\t33s{\\t~*8hl9\\x00effpbg=\\x0Ep9,,#X^8wloosovd+*x\\tx\\x0E\\t#-ip$133sgvboalbw-ISD*8\\t~rvlw*8\\t\\t$*8\\t\\x0E\\t~\\x0E1327132613251324132;132:13131312131113101317131613151314131;131:130313021301130013071306130513041320132113221323133:133;133413351336133713301331133213332:::2::;2::42::52::62::72::02::12::22::32:;:2:;;2:;42:;52:;62:;72:;02:;12:;22:;32:4:2:4;2:442:452:462:472:402:412:422:432:5:2:5;2:542:552:562:572:502:512:522:532:6:2:6;2:642:652:662:672:602:612:622:632333231720:73333::::`lnln/Mpfpwffpwbsfqlwlglkb`f`bgbb/]lajfmg/Abbp/Aujgb`bpllwqlelqlplollwqb`vbogjilpjgldqbmwjslwfnbgfafbodlrv/Efpwlmbgbwqfpsl`l`bpbabilwlgbpjmlbdvbsvfpvmlpbmwfgj`fovjpfoobnbzlylmbbnlqsjpllaqb`oj`foolgjlpklqb`bpj<[<\\\\<Q<\\\\<R<P=l<\\\\=l=o=n<\\\\<Q<Y<S<R<R=n<T<[<Q<R<X<R=n<R<Z<Y<R<Q<T=i<q<\\\\<Y<Y<]=g<P=g<~=g=m<R<^=g<^<R<q<R<R<]<s<R<W<T<Q<T<L<H<q<Y<p=g=n=g<r<Q<T<P<X<\\\\<{<\\\\<x<\\\\<q=o<r<]=n<Y<t<[<Y<U<Q=o<P<P<N=g=o<Z5m5f4O5j5i4K5i4U5o5h4O5d4]4C5f4K5m5e5k5d5h5i5h5o4K5d5h5k4D4_4K5h4I5j5k5f4O5f5n4C5k5h4G5i4D5k5h5d5h5f4D5h4K5f4D5o4X5f4K5i4O5i5j4F4D5f5h5j4A4D5k5i5i4X5d4Xejqpwujgflojdkwtlqognfgjbtkjwf`olpfaob`hqjdkwpnbooallhpsob`fnvpj`ejfoglqgfqsljmwubovfofufowbaofalbqgklvpfdqlvstlqhpzfbqppwbwfwlgbztbwfqpwbqwpwzofgfbwksltfqsklmfmjdkwfqqlqjmsvwbalvwwfqnpwjwofwllopfufmwol`bowjnfpobqdftlqgpdbnfppklqwpsb`fel`vp`ofbqnlgfoaol`hdvjgfqbgjlpkbqftlnfmbdbjmnlmfzjnbdfmbnfpzlvmdojmfpobwfq`lolqdqffmeqlmw%bns8tbw`kelq`fsqj`fqvofpafdjmbewfqujpjwjppvfbqfbpafoltjmgf{wlwboklvqpobafosqjmwsqfppavjowojmhppsffgpwvgzwqbgfelvmgpfmpfvmgfqpkltmelqnpqbmdfbggfgpwjoonlufgwbhfmbalufeobpkej{fglewfmlwkfqujftp`kf`hofdboqjufqjwfnprvj`hpkbsfkvnbmf{jpwdljmdnlujfwkjqgabpj`sfb`fpwbdftjgwkoldjmjgfbptqlwfsbdfpvpfqpgqjufpwlqfaqfbhplvwkulj`fpjwfpnlmwktkfqfavjogtkj`kfbqwkelqvnwkqffpslqwsbqwz@oj`holtfqojufp`obppobzfqfmwqzpwlqzvpbdfplvmg`lvqwzlvq#ajqwkslsvswzsfpbssozJnbdfafjmdvssfqmlwfpfufqzpkltpnfbmpf{wqbnbw`kwqb`hhmltmfbqozafdbmpvsfqsbsfqmlqwkofbqmdjufmmbnfgfmgfgWfqnpsbqwpDqlvsaqbmgvpjmdtlnbmebopfqfbgzbvgjlwbhfptkjof-`ln,ojufg`bpfpgbjoz`kjogdqfbwivgdfwklpfvmjwpmfufqaqlbg`lbpw`lufqbssofejofp`z`ofp`fmfsobmp`oj`htqjwfrvffmsjf`ffnbjoeqbnflogfqsklwlojnjw`b`kf`jujop`boffmwfqwkfnfwkfqfwlv`kalvmgqlzbobphfgtklofpjm`fpwl`h#mbnfebjwkkfbqwfnswzleefqp`lsfltmfgnjdkwboavnwkjmhaollgbqqbznbilqwqvpw`bmlmvmjlm`lvmwubojgpwlmfPwzofOldjmkbsszl``vqofew9eqfpkrvjwfejonpdqbgfmffgpvqabmejdkwabpjpklufqbvwl8qlvwf-kwnonj{fgejmboZlvq#pojgfwlsj`aqltmbolmfgqbtmpsojwqfb`kQjdkwgbwfpnbq`krvlwfdllgpOjmhpglvawbpzm`wkvnaboolt`kjfezlvwkmlufo23s{8pfqufvmwjokbmgp@kf`hPsb`frvfqzibnfpfrvbowtj`f3/333Pwbqwsbmfoplmdpqlvmgfjdkwpkjewtlqwkslpwpofbgptffhpbuljgwkfpfnjofpsobmfpnbqwboskbsobmwnbqhpqbwfpsobzp`objnpbofpwf{wppwbqptqlmd?,k0=wkjmd-lqd,nvowjkfbqgSltfqpwbmgwlhfmplojg+wkjpaqjmdpkjsppwbeewqjfg`boopevoozeb`wpbdfmwWkjp#,,..=bgnjmfdzswFufmw26s{8Fnbjowqvf!`qlpppsfmwaoldpal{!=mlwfgofbuf`kjmbpjyfpdvfpw?,k7=qlalwkfbuzwqvf/pfufmdqbmg`qjnfpjdmpbtbqfgbm`fskbpf=?\\\"..fm\\\\VP% 0:8133s{\\\\mbnfobwjmfmilzbib{-bwjlmpnjwkV-P-#klogpsfwfqjmgjbmbu!=`kbjmp`lqf`lnfpgljmdsqjlqPkbqf2::3pqlnbmojpwpibsbmeboopwqjboltmfqbdqff?,k1=bavpfbofqwlsfqb!.,,T`bqgpkjoopwfbnpSklwlwqvwk`ofbm-sks<pbjmwnfwboolvjpnfbmwsqlleaqjfeqlt!=dfmqfwqv`hollhpUbovfEqbnf-mfw,..=\\t?wqz#x\\tubq#nbhfp`lpwpsobjmbgvowrvfpwwqbjmobalqkfosp`bvpfnbdj`nlwlqwkfjq163s{ofbpwpwfsp@lvmw`lvogdobpppjgfpevmgpklwfobtbqgnlvwknlufpsbqjpdjufpgvw`kwf{bpeqvjwmvoo/\\u007F\\u007FX^8wls!=\\t?\\\"..SLPW!l`fbm?aq,=eollqpsfbhgfswk#pjyfabmhp`bw`k`kbqw13s{8bojdmgfboptlvog63s{8vqo>!sbqhpnlvpfNlpw#---?,bnlmdaqbjmalgz#mlmf8abpfg`bqqzgqbewqfefqsbdf\\\\klnf-nfwfqgfobzgqfbnsqlufiljmw?,wq=gqvdp?\\\"..#bsqjojgfboboofmf{b`welqwk`lgfpoldj`Ujft#pffnpaobmhslqwp#+133pbufg\\\\ojmhdlbopdqbmwdqffhklnfpqjmdpqbwfg03s{8tklpfsbqpf+*8!#Aol`hojmv{ilmfpsj{fo$*8!=*8je+.ofewgbujgklqpfEl`vpqbjpfal{fpWqb`hfnfmw?,fn=abq!=-pq`>wltfqbow>!`baofkfmqz17s{8pfwvsjwbozpkbqsnjmlqwbpwftbmwpwkjp-qfpfwtkffodjqop,`pp,233&8`ovappwveeajaofulwfp#2333hlqfb~*8\\x0E\\tabmgprvfvf>#x~8;3s{8`hjmdx\\x0E\\t\\n\\nbkfbg`ol`hjqjpkojhf#qbwjlpwbwpElqn!zbkll*X3^8Balvwejmgp?,k2=gfavdwbphpVQO#>`foop~*+*821s{8sqjnfwfoopwvqmp3{533-isd!psbjmafb`kwb{fpnj`qlbmdfo..=?,djewppwfuf.ojmhalgz-~*8\\t\\nnlvmw#+2::EBR?,qldfqeqbmh@obpp1;s{8effgp?k2=?p`lwwwfpwp11s{8gqjmh*#\\u007F\\u007F#oftjppkboo 30:8#elq#olufgtbpwf33s{8ib9\\x0Fnpjnlm?elmwqfsoznffwpvmwfq`kfbswjdkwAqbmg*#\\\">#gqfpp`ojspqllnplmhfznlajonbjm-Mbnf#sobwfevmmzwqffp`ln,!2-isdtnlgfsbqbnPWBQWofew#jggfm/#132*8\\t~\\telqn-ujqvp`kbjqwqbmptlqpwSbdfpjwjlmsbw`k?\\\"..\\tl.`b`ejqnpwlvqp/333#bpjbmj((*xbglaf$*X3^jg>23alwk8nfmv#-1-nj-smd!hfujm`lb`k@kjogaqv`f1-isdVQO*(-isd\\u007Fpvjwfpoj`fkbqqz213!#ptffwwq=\\x0E\\tmbnf>gjfdlsbdf#ptjpp..=\\t\\t eee8!=Old-`ln!wqfbwpkffw*#%%#27s{8poffsmwfmwejofgib9\\x0Fojg>!`Mbnf!tlqpfpklwp.al{.gfowb\\t%ow8afbqp97;Y?gbwb.qvqbo?,b=#psfmgabhfqpklsp>#!!8sks!=`wjlm20s{8aqjbmkfoolpjyf>l>&1E#iljmnbzaf?jnd#jnd!=/#eipjnd!#!*X3^NWlsAWzsf!mftozGbmph`yf`kwqbjohmltp?,k6=ebr!=yk.`m23*8\\t.2!*8wzsf>aovfpwqvozgbujp-ip$8=\\x0E\\t?\\\"pwffo#zlv#k1=\\x0E\\telqn#ifpvp233&#nfmv-\\x0E\\t\\n\\x0E\\ttbofpqjphpvnfmwggjmda.ojhwfb`kdje!#ufdbpgbmphffpwjpkrjspvlnjplaqfgfpgffmwqfwlglpsvfgfb/]lpfpw/Mwjfmfkbpwblwqlpsbqwfglmgfmvfulkb`fqelqnbnjpnlnfilqnvmglbrv/Ag/Abpp/_olbzvgbef`kbwlgbpwbmwlnfmlpgbwlplwqbppjwjlnv`klbklqbovdbqnbzlqfpwlpklqbpwfmfqbmwfpelwlpfpwbpsb/Apmvfubpbovgelqlpnfgjlrvjfmnfpfpslgfq`kjofpfq/Muf`fpgf`jqilp/Efpwbqufmwbdqvslkf`klfoolpwfmdlbnjdl`lpbpmjufodfmwfnjpnbbjqfpivojlwfnbpkb`jbebulqivmjlojaqfsvmwlavfmlbvwlqbaqjoavfmbwf{wlnbqylpbafqojpwbovfdl`/_nlfmfqlivfdlsfq/Vkbafqfpwlzmvm`bnvifqubolqevfqbojaqldvpwbjdvboulwlp`bplpdv/Absvfglplnlpbujplvpwfggfafmml`kfavp`bebowbfvqlppfqjfgj`kl`vqpl`obuf`bpbpof/_msobylobqdllaqbpujpwbbslzlivmwlwqbwbujpwl`qfbq`bnslkfnlp`jm`l`bqdlsjplplqgfmkb`fm/Mqfbgjp`lsfgql`fq`bsvfgbsbsfonfmlq/Vwjo`obqlilqdf`boofslmfqwbqgfmbgjfnbq`bpjdvffoobppjdol`l`kfnlwlpnbgqf`obpfqfpwlmj/]lrvfgbsbpbqabm`lkjilpujbifsbaol/Epwfujfmfqfjmlgfibqelmgl`bmbomlqwfofwqb`bvpbwlnbqnbmlpovmfpbvwlpujoobufmglsfpbqwjslpwfmdbnbq`loofubsbgqfvmjglubnlpylmbpbnalpabmgbnbqjbbavplnv`kbpvajqqjlibujujqdqbgl`kj`bboo/Ailufmgj`kbfpwbmwbofppbojqpvfolsfplpejmfpoobnbavp`l/Epwboofdbmfdqlsobybkvnlqsbdbqivmwbglaofjpobpalopbab/]lkbaobov`kb/mqfbgj`fmivdbqmlwbpuboofboo/M`bqdbglolqbabilfpw/Edvpwlnfmwfnbqjlejqnb`lpwlej`kbsobwbkldbqbqwfpofzfpbrvfonvpflabpfpsl`lpnjwbg`jfol`kj`lnjfgldbmbqpbmwlfwbsbgfafpsobzbqfgfppjfwf`lqwf`lqfbgvgbpgfpflujfilgfpfbbdvbp%rvlw8glnbjm`lnnlmpwbwvpfufmwpnbpwfqpzpwfnb`wjlmabmmfqqfnlufp`qloovsgbwfdolabonfgjvnejowfqmvnafq`kbmdfqfpvowsvaoj`p`qffm`kllpfmlqnbowqbufojppvfpplvq`fwbqdfwpsqjmdnlgvofnlajofptjw`ksklwlpalqgfqqfdjlmjwpfoepl`jbob`wjuf`lovnmqf`lqgelooltwjwof=fjwkfqofmdwkebnjozeqjfmgobzlvwbvwklq`qfbwfqfujftpvnnfqpfqufqsobzfgsobzfqf{sbmgsloj`zelqnbwglvaofsljmwppfqjfpsfqplmojujmdgfpjdmnlmwkpelq`fpvmjrvftfjdkwsflsoffmfqdzmbwvqfpfbq`kejdvqfkbujmd`vpwlnleepfwofwwfqtjmgltpvanjwqfmgfqdqlvspvsolbgkfbowknfwklgujgflpp`klloevwvqfpkbgltgfabwfubovfpLaif`wlwkfqpqjdkwpofbdvf`kqlnfpjnsofmlwj`fpkbqfgfmgjmdpfbplmqfslqwlmojmfprvbqfavwwlmjnbdfpfmbaofnlujmdobwfpwtjmwfqEqbm`fsfqjlgpwqlmdqfsfbwOlmglmgfwbjoelqnfggfnbmgpf`vqfsbppfgwlddofsob`fpgfuj`fpwbwj``jwjfppwqfbnzfooltbwwb`hpwqffweojdkwkjggfmjmel!=lsfmfgvpfevouboofz`bvpfpofbgfqpf`qfwpf`lmggbnbdfpslqwpf{`fswqbwjmdpjdmfgwkjmdpfeef`wejfogppwbwfpleej`fujpvbofgjwlqulovnfQfslqwnvpfvnnlujfpsbqfmwb``fppnlpwoznlwkfq!#jg>!nbqhfwdqlvmg`kbm`fpvqufzafelqfpznalonlnfmwpsff`knlwjlmjmpjgfnbwwfq@fmwfqlaif`wf{jpwpnjggofFvqlsfdqltwkofdb`znbmmfqfmlvdk`bqffqbmptfqlqjdjmslqwbo`ojfmwpfof`wqbmgln`olpfgwlsj`p`lnjmdebwkfqlswjlmpjnsozqbjpfgfp`bsf`klpfm`kvq`kgfejmfqfbplm`lqmfqlvwsvwnfnlqzjeqbnfsloj`fnlgfopMvnafqgvqjmdleefqppwzofphjoofgojpwfg`boofgpjoufqnbqdjmgfofwfafwwfqaqltpfojnjwpDolabopjmdoftjgdfw`fmwfqavgdfwmltqbs`qfgjw`objnpfmdjmfpbefwz`klj`fpsjqjw.pwzofpsqfbgnbhjmdmffgfgqvppjbsofbpff{wfmwP`qjswaqlhfmbooltp`kbqdfgjujgfeb`wlqnfnafq.abpfgwkflqz`lmejdbqlvmgtlqhfgkfosfg@kvq`kjnsb`wpklvogbotbzpoldl!#alwwlnojpw!=*xubq#sqfej{lqbmdfKfbgfq-svpk+`lvsofdbqgfmaqjgdfobvm`kQfujftwbhjmdujpjlmojwwofgbwjmdAvwwlmafbvwzwkfnfpelqdlwPfbq`kbm`klqbonlpwolbgfg@kbmdfqfwvqmpwqjmdqfolbgNlajofjm`lnfpvssozPlvq`flqgfqpujftfg%maps8`lvqpfBalvw#jpobmg?kwno#`llhjfmbnf>!bnbylmnlgfqmbguj`fjm?,b=9#Wkf#gjboldklvpfpAFDJM#Nf{j`lpwbqwp`fmwqfkfjdkwbggjmdJpobmgbppfwpFnsjqfP`kllofeelqwgjqf`wmfbqoznbmvboPfof`w-\\t\\tLmfiljmfgnfmv!=SkjojsbtbqgpkbmgofjnslqwLeej`fqfdbqgphjoopmbwjlmPslqwpgfdqfftffhoz#+f-d-afkjmggl`wlqolddfgvmjwfg?,a=?,afdjmpsobmwpbppjpwbqwjpwjppvfg033s{\\u007F`bmbgbbdfm`zp`kfnfqfnbjmAqbyjopbnsofoldl!=afzlmg.p`bofb``fswpfqufgnbqjmfEllwfq`bnfqb?,k2=\\t\\\\elqn!ofbufppwqfpp!#,=\\x0E\\t-dje!#lmolbgolbgfqL{elqgpjpwfqpvqujuojpwfmefnbofGfpjdmpjyf>!bssfbowf{w!=ofufopwkbmhpkjdkfqelq`fgbmjnbobmzlmfBeqj`bbdqffgqf`fmwSflsof?aq#,=tlmgfqsqj`fpwvqmfg\\u007F\\u007F#x~8nbjm!=jmojmfpvmgbztqbs!=ebjofg`fmpvpnjmvwfafb`lmrvlwfp263s{\\u007Ffpwbwfqfnlwffnbjo!ojmhfgqjdkw8pjdmboelqnbo2-kwnopjdmvssqjm`feolbw9-smd!#elqvn-B``fppsbsfqpplvmgpf{wfmgKfjdkwpojgfqVWE.;!%bns8#Afelqf-#TjwkpwvgjlltmfqpnbmbdfsqlejwiRvfqzbmmvbosbqbnpalvdkwebnlvpdlldofolmdfqj((*#xjpqbfopbzjmdgf`jgfklnf!=kfbgfqfmpvqfaqbm`ksjf`fpaol`h8pwbwfgwls!=?qb`jmdqfpjyf..%dw8sb`jwzpf{vboavqfbv-isd!#23/333lawbjmwjwofpbnlvmw/#Jm`-`lnfgznfmv!#ozqj`pwlgbz-jmgffg`lvmwz\\\\oldl-EbnjozollhfgNbqhfwopf#jeSobzfqwvqhfz*8ubq#elqfpwdjujmdfqqlqpGlnbjm~fopfxjmpfqwAold?,ellwfqoldjm-ebpwfqbdfmwp?algz#23s{#3sqbdnbeqjgbzivmjlqgloobqsob`fg`lufqpsovdjm6/333#sbdf!=alpwlm-wfpw+bubwbqwfpwfg\\\\`lvmwelqvnpp`kfnbjmgf{/ejoofgpkbqfpqfbgfqbofqw+bssfbqPvanjwojmf!=algz!=\\t)#WkfWklvdkpffjmdifqpfzMftp?,ufqjezf{sfqwjmivqztjgwk>@llhjfPWBQW#b`qlpp\\\\jnbdfwkqfbgmbwjufsl`hfwal{!=\\tPzpwfn#Gbujg`bm`fqwbaofpsqlufgBsqjo#qfboozgqjufqjwfn!=nlqf!=albqgp`lolqp`bnsvpejqpw#\\u007F\\u007F#X^8nfgjb-dvjwbqejmjpktjgwk9pkltfgLwkfq#-sks!#bppvnfobzfqptjoplmpwlqfpqfojfeptfgfm@vpwlnfbpjoz#zlvq#Pwqjmd\\t\\tTkjowbzolq`ofbq9qfplqweqfm`kwklvdk!*#(#!?algz=avzjmdaqbmgpNfnafqmbnf!=lssjmdpf`wlq6s{8!=upsb`fslpwfqnbilq#`leeffnbqwjmnbwvqfkbssfm?,mbu=hbmpbpojmh!=Jnbdfp>ebopftkjof#kpsb`f3%bns8#\\t\\tJm##sltfqSlophj.`lolqilqgbmAlwwlnPwbqw#.`lvmw1-kwnomftp!=32-isdLmojmf.qjdkwnjoofqpfmjlqJPAM#33/333#dvjgfpubovf*f`wjlmqfsbjq-{no!##qjdkwp-kwno.aol`hqfdF{s9klufqtjwkjmujqdjmsklmfp?,wq=\\x0Evpjmd#\\t\\nubq#=$*8\\t\\n?,wg=\\t?,wq=\\tabkbpbaqbpjodbofdlnbdzbqslophjpqsphj4]4C5d\\bTA\\nzk\\x0BBl\\bQ\\u007F\\x0BUm\\x05Gx\\bSM\\nmC\\bTA\\twQ\\nd}\\bW@\\bTl\\bTF\\ti@\\tcT\\x0BBM\\x0B|j\\x04BV\\tqw\\tcC\\bWI\\npa\\tfM\\n{Z\\x05{X\\bTF\\bVV\\bVK\\t\\u007Fm\\x04kF\\t[]\\bPm\\bTv\\nsI\\x0Bpg\\t[I\\bQp\\x04mx\\x0B_W\\n^M\\npe\\x0BQ}\\x0BGu\\nel\\npe\\x04Ch\\x04BV\\bTA\\tSo\\nzk\\x0BGL\\x0BxD\\nd[\\x05Jz\\x05MY\\bQp\\x04li\\nfl\\npC\\x05{B\\x05Nt\\x0BwT\\ti_\\bTg\\x04QQ\\n|p\\x0BXN\\bQS\\x0BxD\\x04QC\\bWZ\\tpD\\x0BVS\\bTW\\x05Nt\\x04Yh\\nzu\\x04Kj\\x05N}\\twr\\tHa\\n_D\\tj`\\x0BQ}\\x0BWp\\nxZ\\x04{c\\tji\\tBU\\nbD\\x04a|\\tTn\\tpV\\nZd\\nmC\\x0BEV\\x05{X\\tc}\\tTo\\bWl\\bUd\\tIQ\\tcg\\x0Bxs\\nXW\\twR\\x0Bek\\tc}\\t]y\\tJn\\nrp\\neg\\npV\\nz\\\\\\x05{W\\npl\\nz\\\\\\nzU\\tPc\\t`{\\bV@\\nc|\\bRw\\ti_\\bVb\\nwX\\tHv\\x04Su\\bTF\\x0B_W\\x0BWs\\x0BsI\\x05m\\u007F\\nTT\\ndc\\tUS\\t}f\\tiZ\\bWz\\tc}\\x04MD\\tBe\\tiD\\x0B@@\\bTl\\bPv\\t}t\\x04Sw\\x04M`\\x0BnU\\tkW\\x0Bed\\nqo\\x0BxY\\tA|\\bTz\\x0By`\\x04BR\\x04BM\\tia\\x04XU\\nyu\\x04n^\\tfL\\tiI\\nXW\\tfD\\bWz\\bW@\\tyj\\t\\u007Fm\\tav\\tBN\\x0Bb\\\\\\tpD\\bTf\\nY[\\tJn\\bQy\\t[^\\x0BWc\\x0Byu\\x04Dl\\x04CJ\\x0BWj\\x0BHR\\t`V\\x0BuW\\tQy\\np@\\x0BGu\\x05pl\\x04Jm\\bW[\\nLP\\nxC\\n`m\\twQ\\x05ui\\x05\\u007FR\\nbI\\twQ\\tBZ\\tWV\\x04BR\\npg\\tcg\\x05ti\\x04CW\\n_y\\tRg\\bQa\\x0BQB\\x0BWc\\nYb\\x05le\\ngE\\x04Su\\nL[\\tQ\\u007F\\tea\\tdj\\x0B]W\\nb~\\x04M`\\twL\\bTV\\bVH\\nt\\u007F\\npl\\t|b\\x05s_\\bU|\\bTa\\x04oQ\\x05lv\\x04Sk\\x04M`\\bTv\\x0BK}\\nfl\\tcC\\x04oQ\\x04BR\\tHk\\t|d\\bQp\\tHK\\tBZ\\x0BHR\\bPv\\x0BLx\\x0BEZ\\bT\\u007F\\bTv\\tiD\\x05oD\\x05MU\\x0BwB\\x04Su\\x05k`\\x04St\\ntC\\tPl\\tKg\\noi\\tjY\\x0BxY\\x04h}\\nzk\\bWZ\\t\\u007Fm\\x0Be`\\tTB\\tfE\\nzk\\t`z\\x04Yh\\nV|\\tHK\\tAJ\\tAJ\\bUL\\tp\\\\\\tql\\nYc\\x04Kd\\nfy\\x04Yh\\t[I\\x0BDg\\x04Jm\\n]n\\nlb\\bUd\\n{Z\\tlu\\tfs\\x04oQ\\bTW\\x04Jm\\x0BwB\\tea\\x04Yh\\x04BC\\tsb\\tTn\\nzU\\n_y\\x0BxY\\tQ]\\ngw\\x04mt\\tO\\\\\\ntb\\bWW\\bQy\\tmI\\tV[\\ny\\\\\\naB\\x0BRb\\twQ\\n]Q\\x04QJ\\bWg\\x0BWa\\bQj\\ntC\\bVH\\nYm\\x0Bxs\\bVK\\nel\\bWI\\x0BxY\\x04Cq\\ntR\\x0BHV\\bTl\\bVw\\tay\\bQa\\bVV\\t}t\\tdj\\nr|\\tp\\\\\\twR\\n{i\\nTT\\t[I\\ti[\\tAJ\\x0Bxs\\x0B_W\\td{\\x0BQ}\\tcg\\tTz\\tA|\\tCj\\x0BLm\\x05N}\\x05m\\u007F\\nbK\\tdZ\\tp\\\\\\t`V\\tsV\\np@\\tiD\\twQ\\x0BQ}\\bTf\\x05ka\\x04Jm\\x0B@@\\bV`\\tzp\\n@N\\x04Sw\\tiI\\tcg\\noi\\x04Su\\bVw\\x04lo\\x04Cy\\tc}\\x0Bb\\\\\\tsU\\x04BA\\bWI\\bTf\\nxS\\tVp\\nd|\\bTV\\x0BbC\\tNo\\x05Ju\\nTC\\t|`\\n{Z\\tD]\\bU|\\tc}\\x05lm\\bTl\\tBv\\tPl\\tc}\\bQp\\t\\u007Fm\\nLk\\tkj\\n@N\\x04Sb\\x04KO\\tj_\\tp\\\\\\nzU\\bTl\\bTg\\bWI\\tcf\\x04XO\\bWW\\ndz\\x04li\\tBN\\nd[\\bWO\\x04MD\\x0BKC\\tdj\\tI_\\bVV\\ny\\\\\\x0BLm\\x05xl\\txB\\tkV\\x0Bb\\\\\\x0BJW\\x0BVS\\tVx\\x0BxD\\td{\\x04MD\\bTa\\t|`\\x0BPz\\x04R}\\x0BWs\\x04BM\\nsI\\x04CN\\bTa\\x04Jm\\npe\\ti_\\npV\\nrh\\tRd\\tHv\\n~A\\nxR\\x0BWh\\x0BWk\\nxS\\x0BAz\\x0BwX\\nbI\\x04oQ\\tfw\\nqI\\nV|\\nun\\x05z\\u007F\\x0Bpg\\td\\\\\\x0BoA\\x05{D\\ti_\\x05xB\\bT\\u007F\\t`V\\x05qr\\tTT\\x04g]\\x04CA\\x0BuR\\tVJ\\tT`\\npw\\x0BRb\\tI_\\nCx\\x04Ro\\x0BsI\\x04Cj\\x04Kh\\tBv\\tWV\\x04BB\\x05oD\\x05{D\\nhc\\x04Km\\x0B^R\\tQE\\n{I\\np@\\nc|\\x05Gt\\tc}\\x04Dl\\nzU\\x05qN\\tsV\\x05k}\\tHh\\x0B|j\\nqo\\x05u|\\tQ]\\x0Bek\\x05\\u007FZ\\x04M`\\x04St\\npe\\tdj\\bVG\\x0BeE\\t\\u007Fm\\x0BWc\\x04|I\\n[W\\tfL\\bT\\u007F\\tBZ\\x04Su\\x0BKa\\x04Cq\\x05Nt\\x04Y[\\nqI\\bTv\\tfM\\ti@\\t}f\\x04B\\\\\\tQy\\x0BBl\\bWg\\x04XD\\x05kc\\x0Bx[\\bVV\\tQ]\\t\\u007Fa\\tPy\\x0BxD\\nfI\\t}f\\x05oD\\tdj\\tSG\\x05ls\\t~D\\x04CN\\n{Z\\t\\\\v\\n_D\\nhc\\x0Bx_\\x04C[\\tAJ\\nLM\\tVx\\x04CI\\tbj\\tc^\\tcF\\ntC\\x04Sx\\twr\\x04XA\\bU\\\\\\t|a\\x0BK\\\\\\bTV\\bVj\\nd|\\tfs\\x04CX\\ntb\\bRw\\tVx\\tAE\\tA|\\bT\\u007F\\x05Nt\\x0BDg\\tVc\\bTl\\x04d@\\npo\\t\\u007FM\\tcF\\npe\\tiZ\\tBo\\bSq\\nfH\\x04l`\\bTx\\bWf\\tHE\\x0BF{\\tcO\\tfD\\nlm\\x0BfZ\\nlm\\x0BeU\\tdG\\x04BH\\bTV\\tSi\\x05MW\\nwX\\nz\\\\\\t\\\\c\\x04CX\\nd}\\tl}\\bQp\\bTV\\tF~\\bQ\\u007F\\t`i\\ng@\\x05nO\\bUd\\bTl\\nL[\\twQ\\tji\\ntC\\t|J\\nLU\\naB\\x0BxY\\x04Kj\\tAJ\\x05uN\\ti[\\npe\\x04Sk\\x0BDg\\x0Bx]\\bVb\\bVV\\nea\\tkV\\nqI\\bTa\\x04Sk\\nAO\\tpD\\ntb\\nts\\nyi\\bVg\\ti_\\x0B_W\\nLk\\x05Nt\\tyj\\tfM\\x04R\\u007F\\tiI\\bTl\\x0BwX\\tsV\\x0BMl\\nyu\\tAJ\\bVj\\x04KO\\tWV\\x0BA}\\x0BW\\u007F\\nrp\\tiD\\x0B|o\\x05lv\\x0BsI\\x04BM\\td~\\tCU\\bVb\\x04eV\\npC\\x0BwT\\tj`\\tc}\\x0Bxs\\x0Bps\\x0Bvh\\tWV\\x0BGg\\x0BAe\\x0BVK\\x0B]W\\trg\\x0BWc\\x05F`\\tBr\\x0Bb\\\\\\tdZ\\bQp\\nqI\\x04kF\\nLk\\x0BAR\\bWI\\bTg\\tbs\\tdw\\n{L\\n_y\\tiZ\\bTA\\tlg\\bVV\\bTl\\tdk\\n`k\\ta{\\ti_\\x05{A\\x05wj\\twN\\x0B@@\\bTe\\ti_\\n_D\\twL\\nAH\\x0BiK\\x0Bek\\n[]\\tp_\\tyj\\bTv\\tUS\\t[r\\n{I\\nps\\x05Gt\\x0BVK\\npl\\x04S}\\x0BWP\\t|d\\x04MD\\x0BHV\\bT\\u007F\\x04R}\\x04M`\\bTV\\bVH\\x05lv\\x04Ch\\bW[\\x04Ke\\tR{\\x0B^R\\tab\\tBZ\\tVA\\tB`\\nd|\\nhs\\x04Ke\\tBe\\x04Oi\\tR{\\td\\\\\\x05nB\\bWZ\\tdZ\\tVJ\\x05Os\\t\\u007Fm\\x04uQ\\x0BhZ\\x04Q@\\x04QQ\\nfI\\bW[\\x04B\\\\\\x04li\\nzU\\nMd\\x04M`\\nxS\\bVV\\n\\\\}\\x0BxD\\t\\u007Fm\\bTp\\x04IS\\nc|\\tkV\\x05i~\\tV{\\x0BhZ\\t|b\\bWt\\n@R\\x0BoA\\x0BnU\\bWI\\tea\\tB`\\tiD\\tc}\\tTz\\x04BR\\x0BQB\\x05Nj\\tCP\\t[I\\bTv\\t`W\\x05uN\\x0Bpg\\x0Bpg\\x0BWc\\tiT\\tbs\\twL\\tU_\\tc\\\\\\t|h\\x0BKa\\tNr\\tfL\\nq|\\nzu\\nz\\\\\\tNr\\bUg\\t|b\\x04m`\\bTv\\nyd\\nrp\\bWf\\tUX\\x04BV\\nzk\\nd}\\twQ\\t}f\\x04Ce\\x0Bed\\bTW\\bSB\\nxU\\tcn\\bTb\\ne\\u007F\\ta\\\\\\tSG\\bU|\\npV\\nN\\\\\\x04Kn\\x0BnU\\tAt\\tpD\\x0B^R\\x0BIr\\x04b[\\tR{\\tdE\\x0BxD\\x0BWK\\x0BWA\\bQL\\bW@\\x04Su\\bUd\\nDM\\tPc\\x04CA\\x04Dl\\x04oQ\\tHs\\x05wi\\x04ub\\n\\u007Fa\\bQp\\x05Ob\\nLP\\bTl\\x04Y[\\x0BK}\\tAJ\\bQ\\u007F\\x04n^\\x0BsA\\bSM\\nqM\\bWZ\\n^W\\x0Bz{\\x04S|\\tfD\\bVK\\bTv\\bPv\\x04BB\\tCP\\x04dF\\tid\\x0Bxs\\x04mx\\x0Bws\\tcC\\ntC\\tyc\\x05M`\\x0BW\\u007F\\nrh\\bQp\\x0BxD\\x04\\\\o\\nsI\\x04_k\\nzu\\x04kF\\tfD\\x04Xs\\x04XO\\tjp\\bTv\\x04BS\\x05{B\\tBr\\nzQ\\nbI\\tc{\\x04BD\\x04BV\\x05nO\\bTF\\tca\\x05Jd\\tfL\\tPV\\tI_\\nlK\\x04`o\\twX\\npa\\tgu\\bP}\\x05{^\\bWf\\n{I\\tBN\\npa\\x04Kl\\x0Bpg\\tcn\\tfL\\x0Bvh\\x04Cq\\bTl\\x0BnU\\bSq\\x04Cm\\twR\\bUJ\\npe\\nyd\\nYg\\x04Cy\\x0BKW\\tfD\\nea\\x04oQ\\tj_\\tBv\\x04nM\\x0BID\\bTa\\nzA\\x05pl\\n]n\\bTa\\tR{\\tfr\\n_y\\bUg\\x05{X\\x05kk\\x0BxD\\x04|I\\x05xl\\nfy\\x04Ce\\x0BwB\\nLk\\x0Bd]\\noi\\n}h\\tQ]\\npe\\bVw\\x04Hk\\x04OQ\\nzk\\tAJ\\npV\\bPv\\ny\\\\\\tA{\\x04Oi\\bSB\\x04XA\\x0BeE\\tjp\\nq}\\tiD\\x05qN\\x0B^R\\t\\u007Fm\\tiZ\\tBr\\bVg\\noi\\n\\\\X\\tU_\\nc|\\x0BHV\\bTf\\tTn\\x04\\\\N\\x04\\\\N\\nuB\\x05lv\\nyu\\tTd\\bTf\\bPL\\x0B]W\\tdG\\nA`\\nw^\\ngI\\npe\\tdw\\nz\\\\\\x05ia\\bWZ\\tcF\\x04Jm\\n{Z\\bWO\\x04_k\\x04Df\\x04RR\\td\\\\\\bVV\\x0Bxs\\x04BN\\x05ti\\x04lm\\tTd\\t]y\\x0BHV\\tSo\\x0B|j\\x04XX\\tA|\\x0BZ^\\x0BGu\\bTW\\x05M`\\x04kF\\x0BhZ\\x0BVK\\tdG\\x0BBl\\tay\\nxU\\x05qE\\x05nO\\bVw\\nqI\\x04CX\\ne\\u007F\\tPl\\bWO\\x0BLm\\tdL\\x05uH\\x04Cm\\tdT\\x04fn\\x0BwB\\x05ka\\x0BnU\\n@M\\nyT\\tHv\\t\\\\}\\x04Kh\\td~\\x04Yh\\x05k}\\neR\\td\\\\\\bWI\\t|b\\tHK\\tiD\\bTW\\x05MY\\npl\\bQ_\\twr\\x0BAx\\tHE\\bTg\\bSq\\x05vp\\x0Bb\\\\\\bWO\\nOl\\nsI\\nfy\\x0BID\\t\\\\c\\n{Z\\n^~\\npe\\nAO\\tTT\\x0Bxv\\x04k_\\bWO\\x0B|j\\x0BwB\\tQy\\ti@\\tPl\\tHa\\tdZ\\x05k}\\x04ra\\tUT\\x0BJc\\x0Bed\\np@\\tQN\\nd|\\tkj\\tHk\\x04M`\\noi\\twr\\td\\\\\\nlq\\no_\\nlb\\nL[\\tac\\x04BB\\x04BH\\x04Cm\\npl\\tIQ\\bVK\\x0Bxs\\n`e\\x0BiK\\npa\\x04Oi\\tUS\\bTp\\tfD\\nPG\\x05kk\\x04XA\\nz\\\\\\neg\\x0BWh\\twR\\x05qN\\nqS\\tcn\\x04lo\\nxS\\n^W\\tBU\\nt\\u007F\\tHE\\tp\\\\\\tfF\\tfw\\bVV\\bW@\\tak\\x0BVK\\x05ls\\tVJ\\bVV\\x0BeE\\x04\\\\o\\nyX\\nYm\\x04M`\\x05lL\\nd|\\nzk\\tA{\\x05sE\\twQ\\x04XT\\nt\\u007F\\tPl\\t]y\\x0BwT\\x05{p\\x04MD\\x0Bb\\\\\\tQ]\\x04Kj\\tJn\\nAH\\x0BRb\\tBU\\tHK\\t\\\\c\\nfI\\x05m\\u007F\\nqM\\n@R\\tSo\\noi\\x04BT\\tHv\\n_y\\x04Kh\\tBZ\\t]i\\bUJ\\tV{\\x04Sr\\nbI\\x0BGg\\ta_\\bTR\\nfI\\nfl\\t[K\\tII\\x04S|\\x0BuW\\tiI\\bWI\\nqI\\x0B|j\\x04BV\\bVg\\bWZ\\x04kF\\x0Bx]\\bTA\\tab\\tfr\\ti@\\tJd\\tJd\\x0Bps\\nAO\\bTa\\x05xu\\tiD\\nzk\\t|d\\t|`\\bW[\\tlP\\tdG\\bVV\\x0Bw}\\x0BqO\\ti[\\bQ\\u007F\\bTz\\x0BVF\\twN\\x05ts\\tdw\\bTv\\neS\\ngi\\tNr\\x05yS\\npe\\bVV\\bSq\\n`m\\tyj\\tBZ\\x0BWX\\bSB\\tc\\\\\\nUR\\t[J\\tc_\\x04nM\\bWQ\\x0BAx\\nMd\\tBr\\x05ui\\x0BxY\\bSM\\x0BWc\\x0B|j\\x0Bxs\\t}Q\\tBO\\bPL\\bWW\\tfM\\nAO\\tPc\\x0BeU\\x04e^\\bTg\\nqI\\tac\\bPv\\tcF\\x04oQ\\tQ\\u007F\\x0BhZ\\x05ka\\nz\\\\\\tiK\\tBU\\n`k\\tCP\\x04S|\\x04M`\\n{I\\tS{\\x04_O\\tBZ\\x04Zi\\x04Sk\\tps\\tp\\\\\\nYu\\n]s\\nxC\\bWt\\nbD\\tkV\\x0BGu\\x05yS\\nqA\\t[r\\neK\\x04M`\\tdZ\\x05lL\\bUg\\bTl\\nbD\\tUS\\x0Bb\\\\\\tpV\\ncc\\x04S\\\\\\tct\\t`z\\bPL\\x0BWs\\nA`\\neg\\bSq\\x05uE\\x04CR\\x0BDg\\t`W\\x0Bz{\\x0BWc\\x04Sk\\x04Sk\\tbW\\bUg\\tea\\nxZ\\tiI\\tUX\\tVJ\\nqn\\tS{\\x0BRb\\bTQ\\npl\\x05Gt\\x0BuW\\x05uj\\npF\\nqI\\tfL\\t[I\\tia\\x04XO\\nyu\\x0BDg\\x0Bed\\tq{\\x04VG\\bQ\\u007F\\x05ka\\tVj\\tkV\\txB\\nd|\\np@\\tQN\\tPc\\tps\\x04]j\\tkV\\toU\\bTp\\nzU\\x05nB\\x0BB]\\ta{\\bV@\\n]n\\x04m`\\tcz\\tR{\\x04m`\\bQa\\x0BwT\\bSM\\x05MY\\x05qN\\tdj\\x05~s\\x0BQ}\\x05MY\\x0BMB\\tBv\\twR\\bRg\\x0BQ}\\tql\\x0BKC\\nrm\\x05xu\\x04CC\\x0BwB\\x0Bvh\\tBq\\x04Xq\\npV\\ti_\\x05Ob\\x05uE\\nbd\\nqo\\x0B{i\\nC~\\tBL\\x0BeE\\x05uH\\bVj\\x04Ey\\x04Gz\\x0BzR\\x0B{i\\tcf\\n{Z\\n]n\\x04XA\\x0BGu\\x0BnU\\thS\\x0BGI\\nCc\\tHE\\bTA\\tHB\\x04BH\\x04Cj\\nCc\\bTF\\tHE\\nXI\\tA{\\bQ\\u007F\\tc\\\\\\x0BmO\\x0BWX\\nfH\\np@\\x05MY\\bTF\\nlK\\tBt\\nzU\\tTT\\x04Km\\x0BwT\\npV\\ndt\\x0ByI\\tVx\\tQ\\u007F\\tRg\\tTd\\nzU\\bRS\\nLM\\twA\\x04nM\\tTn\\ndS\\t]g\\nLc\\x0BwB\\t}t\\t[I\\tCP\\x04kX\\x0BFm\\x0BhZ\\x05m\\u007F\\ti[\\np@\\x0BQ}\\x0BW\\u007F\\t|d\\nMO\\nMd\\tf_\\tfD\\tcJ\\tHz\\x0BRb\\tio\\tPy\\x04Y[\\nxU\\tct\\x0B@@\\tww\\bPv\\x04BM\\x04FF\\ntb\\x05v|\\x0BKm\\tBq\\tBq\\x04Kh\\x04`o\\nZd\\x04XU\\ti]\\t|`\\tSt\\x04B\\\\\\bQ\\u007F\\x0B_W\\tTJ\\nqI\\t|a\\tA{\\x0BuP\\x04MD\\tPl\\nxR\\tfL\\x0Bws\\tc{\\td\\\\\\bV`\\neg\\tHK\\x05kc\\nd|\\bVV\\ny\\\\\\x05kc\\ti]\\bVG\\t`V\\tss\\tI_\\tAE\\tbs\\tdu\\nel\\tpD\\x0BW\\u007F\\nqs\\x05lv\\bSM\\x04Zi\\x0BVK\\x05ia\\x0BQB\\tQ\\u007F\\n{Z\\bPt\\x0BKl\\nlK\\nhs\\ndS\\bVK\\x05mf\\nd^\\tkV\\tcO\\nc|\\bVH\\t\\\\]\\bTv\\bSq\\tmI\\x0BDg\\tVJ\\tcn\\ny\\\\\\bVg\\bTv\\nyX\\bTF\\t]]\\bTp\\noi\\nhs\\x0BeU\\nBf\\tdj\\x05Mr\\n|p\\t\\\\g\\t]r\\bVb\\x05{D\\nd[\\x04XN\\tfM\\tO\\\\\\x05s_\\tcf\\tiZ\\x04XN\\x0BWc\\tqv\\n`m\\tU^\\x05oD\\nd|\\x0BGg\\tdE\\x0Bwf\\x04lo\\x04u}\\nd|\\x05oQ\\t`i\\x04Oi\\x0BxD\\ndZ\\nCx\\x04Yw\\nzk\\ntb\\ngw\\tyj\\tB`\\nyX\\x0Bps\\ntC\\x0BpP\\x0Bqw\\bPu\\bPX\\tDm\\npw\\x05Nj\\tss\\taG\\x0Bxs\\bPt\\noL\\x04Gz\\tOk\\ti@\\ti]\\x04eC\\tIQ\\tii\\tdj\\x0B@J\\t|d\\x05uh\\bWZ\\x0BeU\\x0BnU\\bTa\\tcC\\x04g]\\nzk\\x04Yh\\bVK\\nLU\\np@\\ntb\\ntR\\tCj\\x0BNP\\ti@\\bP{\\n\\\\}\\n{c\\nwX\\tfL\\bVG\\tc{\\t|`\\tAJ\\t|C\\tfD\\x05ln\\t|d\\tbs\\nqI\\x05{B\\x0BAx\\np@\\nzk\\x0BRb\\x05Os\\x0BWS\\x04e^\\x0BD_\\tBv\\x0BWd\\bVb\\x0Bxs\\x0BeE\\bRw\\n]n\\n|p\\x0Bg|\\tfw\\x05kc\\bTI\\x05ka\\n\\\\T\\x04Sp\\tju\\x0Bps\\npe\\x05u|\\x0BGr\\bVe\\tCU\\x04]M\\x04XU\\x0BxD\\bTa\\tIQ\\x0BWq\\tCU\\tam\\tdj\\bSo\\x04Sw\\x0BnU\\x04Ch\\tQ]\\x05s_\\bPt\\tfS\\bTa\\t\\\\}\\n@O\\x04Yc\\tUZ\\bTx\\npe\\x0BnU\\nzU\\t|}\\tiD\\nz\\\\\\bSM\\x0BxD\\x04BR\\nzQ\\tQN\\x04]M\\x04Yh\\nLP\\x0BFm\\x0BLX\\x05vc\\x0Bql\\x05ka\\tHK\\bVb\\ntC\\nCy\\bTv\\nuV\\x04oQ\\t`z\\t[I\\tB`\\x0BRb\\tyj\\tsb\\x0BWs\\bTl\\tkV\\x0Bed\\ne\\u007F\\x05lL\\x0BxN\\t\\u007Fm\\nJn\\tjY\\x0BxD\\bVb\\bSq\\x0Byu\\twL\\x0BXL\\bTA\\tpg\\tAt\\tnD\\x04XX\\twR\\npl\\nhw\\x05yS\\nps\\tcO\\bW[\\x0B|j\\x04XN\\tsV\\tp\\\\\\tBe\\nb~\\nAJ\\n]e\\x05k`\\x05qN\\tdw\\tWV\\tHE\\x0BEV\\x05Jz\\tid\\tB`\\tzh\\x05E]\\tfD\\bTg\\x05qN\\bTa\\tja\\x04Cv\\bSM\\nhc\\bUe\\x05t_\\tie\\x04g]\\twQ\\nPn\\bVB\\tjw\\bVg\\x0BbE\\tBZ\\x0BRH\\bP{\\tjp\\n\\\\}\\ta_\\tcC\\t|a\\x0BD]\\tBZ\\ti[\\tfD\\x0BxW\\no_\\td\\\\\\n_D\\ntb\\t\\\\c\\tAJ\\nlK\\x04oQ\\x04lo\\x0BLx\\x0BM@\\bWZ\\x04Kn\\x0Bpg\\nTi\\nIv\\n|r\\x0B@}\\x05Jz\\x05Lm\\x05Wh\\x05k}\\x05ln\\x0BxD\\n]s\\x04gc\\x0Bps\\tBr\\bTW\\x0BBM\\x05tZ\\nBY\\x04DW\\tjf\\x0BSW\\x04C}\\nqo\\tdE\\tmv\\tIQ\\bPP\\bUb\\x05lv\\x04BC\\nzQ\\t[I\\x0Bgl\\nig\\bUs\\x04BT\\x0BbC\\bSq\\tsU\\tiW\\nJn\\tSY\\tHK\\trg\\npV\\x0BID\\x0B|j\\x04KO\\t`S\\t|a`vbmglfmujbqnbgqjgavp`bqjmj`jlwjfnslslqrvf`vfmwbfpwbglsvfgfmivfdlp`lmwqbfpw/Mmmlnaqfwjfmfmsfqejonbmfqbbnjdlp`jvgbg`fmwqlbvmrvfsvfgfpgfmwqlsqjnfqsqf`jlpfd/Vmavfmlpuloufqsvmwlppfnbmbkba/Abbdlpwlmvfulpvmjglp`bqolpfrvjslmj/]lpnv`klpbodvmb`lqqfljnbdfmsbqwjqbqqjabnbq/Abklnaqffnsoflufqgbg`bnajlnv`kbpevfqlmsbpbglo/Amfbsbqf`fmvfubp`vqplpfpwbabrvjfqlojaqlp`vbmwlb``fplnjdvfoubqjlp`vbwqlwjfmfpdqvslppfq/Mmfvqlsbnfgjlpeqfmwfb`fq`bgfn/Mplefqwb`l`kfpnlgfoljwbojbofwqbpbod/Vm`lnsqb`vbofpf{jpwf`vfqslpjfmglsqfmpboofdbqujbifpgjmfqlnvq`jbslgq/Msvfpwlgjbqjlsvfaolrvjfqfnbmvfosqlsjl`qjpjp`jfqwlpfdvqlnvfqwfevfmwf`fqqbqdqbmgffef`wlsbqwfpnfgjgbsqlsjbleqf`fwjfqqbf.nbjoubqjbpelqnbpevwvqllaifwlpfdvjqqjfpdlmlqnbpnjpnlp/Vmj`l`bnjmlpjwjlpqby/_mgfajglsqvfabwlofglwfm/Abifp/Vpfpsfql`l`jmblqjdfmwjfmgb`jfmwl`/Mgjykbaobqpfq/Abobwjmbevfqybfpwjoldvfqqbfmwqbq/E{jwlo/_sfybdfmgbu/Agflfujwbqsbdjmbnfwqlpibujfqsbgqfpe/M`jo`bafyb/Mqfbppbojgbfmu/Alibs/_mbavplpajfmfpwf{wlpoofubqsvfgbmevfqwf`ln/Vm`obpfpkvnbmlwfmjglajoablvmjgbgfpw/Mpfgjwbq`qfbgl<X<W=c=k=n<R<V<\\\\<V<T<W<T=a=n<R<^=m<Y<Y<_<R<S=l<T=n<\\\\<V<Y=e<Y=o<Z<Y<v<\\\\<V<]<Y<[<]=g<W<R<Q<T<~=m<Y<S<R<X<A=n<R=n<R<P=k<Y<P<Q<Y=n<W<Y=n=l<\\\\<[<R<Q<\\\\<_<X<Y<P<Q<Y<x<W=c<s=l<T<Q<\\\\=m<Q<T=i=n<Y<P<V=n<R<_<R<X<^<R=n=n<\\\\<P<M<D<|<P<\\\\=c<K=n<R<^<\\\\=m<^<\\\\<P<Y<P=o<N<\\\\<V<X<^<\\\\<Q<\\\\<P=a=n<T=a=n=o<~<\\\\<P=n<Y=i<S=l<R=n=o=n<Q<\\\\<X<X<Q=c<~<R=n=n=l<T<Q<Y<U<~<\\\\=m<Q<T<P=m<\\\\<P=n<R=n=l=o<]<r<Q<T<P<T=l<Q<Y<Y<r<r<r<W<T=j=a=n<\\\\<r<Q<\\\\<Q<Y<P<X<R<P<P<R<U<X<^<Y<R<Q<R=m=o<X\\x0CHy\\x0CIk\\x0CHU\\x0CId\\x0CHy\\x0CIl\\x0CHT\\x0CIk\\x0CHy\\x0CHR\\x0CHy\\x0CIg\\x0CHx\\x0CH\\\\\\x0CHF\\x0CH\\\\\\x0CHD\\x0CIk\\x0CHc\\x0CHy\\x0CHy\\x0CHS\\x0CHA\\x0CIl\\x0CHk\\x0CHT\\x0CHy\\x0CH\\\\\\x0CHH\\x0CIg\\x0CHU\\x0CIg\\x0CHj\\x0CHF\\x0CHU\\x0CIl\\x0CHC\\x0CHU\\x0CHC\\x0CHR\\x0CHH\\x0CHy\\x0CHI\\x0CHRibdqbm\\x0CHj\\x0CHp\\x0CHp\\x0CIg\\x0CHi\\x0CH@\\x0CHJ\\x0CIg\\x0CH{\\x0CHd\\x0CHp\\x0CHR\\x0CH{\\x0CHc\\x0CHU\\x0CHB\\x0CHk\\x0CHD\\x0CHY\\x0CHU\\x0CHC\\x0CIk\\x0CHI\\x0CIk\\x0CHI\\x0CIl\\x0CHt\\x0CH\\\\\\x0CHp\\x0CH@\\x0CHJ\\x0CIl\\x0CHy\\x0CHd\\x0CHp\\x0CIl\\x0CHY\\x0CIk\\x0CHD\\x0CHd\\x0CHD\\x0CHc\\x0CHU\\x0CH\\\\\\x0CHe\\x0CHT\\x0CHB\\x0CIk\\x0CHy\\x0CHB\\x0CHY\\x0CIg\\x0CH^\\x0CIk\\x0CHT\\x0CH@\\x0CHB\\x0CHd\\x0CHJ\\x0CIk\\x0CH\\u007F\\x0CH\\\\\\x0CHj\\x0CHB\\x0CH@\\x0CHT\\x0CHA\\x0CH\\\\\\x0CH@\\x0CHD\\x0CHv\\x0CH^\\x0CHB\\x0CHD\\x0CHj\\x0CH{\\x0CHT\\x0CIl\\x0CH^\\x0CIl4U5h5e4I5h5e5k4\\\\4K4N4B4]4U4C4C4K5h5e5k4\\\\5k4Y5d4]4V5f4]5o4K5j5d5h4K4D5f5j4U4]4Z4\\\\5h5o5k5j4K5f5d5i5n4K5h4U5h5f4K5j4K5h5o5j4A4F5e5n4D5h5d4A4E4K4B4]5m5n4[4U4D4C4]5o5j4I4\\\\4K5o5i4K4K4A4C4I5h4K5m5f5k4D4U4Z5o5f5m4D4A4G5d5i5j5d5k5d4O5j4K4@4C4K5h5k4K4_5h5i4U5j4C5h5f4_4U4D4]4Y5h5e5i5j4\\\\4D5k4K4O5j5k5i4G5h5o5j4F4K5h4K4A5f4G5i4Y4]4X4]4A4A5d5h5d5m5f4K4\\\\4K5h5o5h5i4]4E4K5j4F4K5h5m4O4D5d4B4K4Y4O5j4F4K5j5k4K5h5f4U4Z5d5d5n4C4K4D5j4B5f4]4D5j4F5h5o5i4X4K4M5d5k5f4K4D5d5n4Y4Y5d5i4K4]5n5i4O4A4C5j4A5j4U4C5i4]4O5f4K4A4E5o4F4D4C5d5j5f4@4D5i5j5k4F4A4F4@5k4E4_5j4E5f4F5i5o4]4E4V4^4E5j5m4_4D5f4F5h5h5k5h5j4K4F5h5o5n5h4D5h5i4K4U5j5k4O5d5h4X5f4M5j5d4]4O5i4K5m5f5o4D5o5h4\\\\4K4F4]4F4D4D4O5j5k5i4_4K5j5o4D5f4U5m5n4C4A4_5j5h5k5i4X4U4]4O5k5h4X5k4]5n4[4]4[5h4Dsqlejofpfquj`fgfebvowkjnpfoegfwbjop`lmwfmwpvsslqwpwbqwfgnfppbdfpv``fppebpkjlm?wjwof=`lvmwqzb``lvmw`qfbwfgpwlqjfpqfpvowpqvmmjmdsql`fpptqjwjmdlaif`wpujpjaoftfo`lnfbqwj`ofvmhmltmmfwtlqh`lnsbmzgzmbnj`aqltpfqsqjub`zsqlaofnPfquj`fqfpsf`wgjpsobzqfrvfpwqfpfquftfapjwfkjpwlqzeqjfmgplswjlmptlqhjmdufqpjlmnjoojlm`kbmmfotjmglt-bggqfppujpjwfgtfbwkfq`lqqf`wsqlgv`wfgjqf`welqtbqgzlv#`bmqfnlufgpvaif`w`lmwqlobq`kjuf`vqqfmwqfbgjmdojaqbqzojnjwfgnbmbdfqevqwkfqpvnnbqznb`kjmfnjmvwfpsqjubwf`lmwf{wsqldqbnpl`jfwzmvnafqptqjwwfmfmbaofgwqjddfqplvq`fpolbgjmdfofnfmwsbqwmfqejmboozsfqef`wnfbmjmdpzpwfnphffsjmd`vowvqf%rvlw8/ilvqmbosqlif`wpvqeb`fp%rvlw8f{sjqfpqfujftpabobm`fFmdojpk@lmwfmwwkqlvdkSofbpf#lsjmjlm`lmwb`wbufqbdfsqjnbqzujoobdfPsbmjpkdboofqzgf`ojmfnffwjmdnjppjlmslsvobqrvbojwznfbpvqfdfmfqbopsf`jfppfppjlmpf`wjlmtqjwfqp`lvmwfqjmjwjboqfslqwpejdvqfpnfnafqpklogjmdgjpsvwffbqojfqf{sqfppgjdjwbosj`wvqfBmlwkfqnbqqjfgwqbeej`ofbgjmd`kbmdfg`fmwqbouj`wlqzjnbdfp,qfbplmppwvgjfpefbwvqfojpwjmdnvpw#afp`kllopUfqpjlmvpvboozfsjplgfsobzjmddqltjmdlaujlvplufqobzsqfpfmwb`wjlmp?,vo=\\x0E\\ttqbssfqboqfbgz`fqwbjmqfbojwzpwlqbdfbmlwkfqgfphwlsleefqfgsbwwfqmvmvpvboGjdjwbo`bsjwboTfapjwfebjovqf`lmmf`wqfgv`fgBmgqljggf`bgfpqfdvobq#%bns8#bmjnbopqfofbpfBvwlnbwdfwwjmdnfwklgpmlwkjmdSlsvobq`bswjlmofwwfqp`bswvqfp`jfm`foj`fmpf`kbmdfpFmdobmg>2%bns8Kjpwlqz#>#mft#@fmwqbovsgbwfgPsf`jboMfwtlqhqfrvjqf`lnnfmwtbqmjmd@loofdfwlloabqqfnbjmpaf`bvpffof`wfgGfvwp`kejmbm`ftlqhfqprvj`hozafwtffmf{b`wozpfwwjmdgjpfbpfPl`jfwztfbslmpf{kjajw%ow8\\\"..@lmwqlo`obppfp`lufqfglvwojmfbwwb`hpgfuj`fp+tjmgltsvqslpfwjwof>!Nlajof#hjoojmdpkltjmdJwbojbmgqlssfgkfbujozfeef`wp.2$^*8\\t`lmejqn@vqqfmwbgubm`fpkbqjmdlsfmjmdgqbtjmdajoojlmlqgfqfgDfqnbmzqfobwfg?,elqn=jm`ovgftkfwkfqgfejmfgP`jfm`f`bwboldBqwj`ofavwwlmpobqdfpwvmjelqnilvqmfzpjgfabq@kj`bdlklojgbzDfmfqbosbppbdf/%rvlw8bmjnbwfeffojmdbqqjufgsbppjmdmbwvqboqlvdkoz-\\t\\tWkf#avw#mlwgfmpjwzAqjwbjm@kjmfpfob`h#lewqjavwfJqfobmg!#gbwb.eb`wlqpqf`fjufwkbw#jpOjaqbqzkvpabmgjm#eb`wbeebjqp@kbqofpqbgj`boaqlvdkwejmgjmdobmgjmd9obmd>!qfwvqm#ofbgfqpsobmmfgsqfnjvnsb`hbdfBnfqj`bFgjwjlm^%rvlw8Nfppbdfmffg#wlubovf>!`lnsof{ollhjmdpwbwjlmafojfufpnboofq.nlajofqf`lqgptbmw#wlhjmg#leEjqfel{zlv#bqfpjnjobqpwvgjfgnb{jnvnkfbgjmdqbsjgoz`ojnbwfhjmdglnfnfqdfgbnlvmwpelvmgfgsjlmffqelqnvobgzmbpwzklt#wl#Pvsslqwqfufmvff`lmlnzQfpvowpaqlwkfqplogjfqobqdfoz`boojmd-%rvlw8B``lvmwFgtbqg#pfdnfmwQlafqw#feelqwpSb`jej`ofbqmfgvs#tjwkkfjdkw9tf#kbufBmdfofpmbwjlmp\\\\pfbq`kbssojfgb`rvjqfnbppjufdqbmwfg9#ebopfwqfbwfgajddfpwafmfejwgqjujmdPwvgjfpnjmjnvnsfqkbspnlqmjmdpfoojmdjp#vpfgqfufqpfubqjbmw#qlof>!njppjmdb`kjfufsqlnlwfpwvgfmwplnflmff{wqfnfqfpwlqfalwwln9fuloufgboo#wkfpjwfnbsfmdojpktbz#wl##Bvdvpwpznalop@lnsbmznbwwfqpnvpj`bobdbjmpwpfqujmd~*+*8\\x0E\\tsbznfmwwqlvaof`lm`fsw`lnsbqfsbqfmwpsobzfqpqfdjlmpnlmjwlq#$$Wkf#tjmmjmdf{solqfbgbswfgDboofqzsqlgv`fbajojwzfmkbm`f`bqffqp*-#Wkf#`loof`wPfbq`k#bm`jfmwf{jpwfgellwfq#kbmgofqsqjmwfg`lmplofFbpwfqmf{slqwptjmgltp@kbmmfojoofdbomfvwqbopvddfpw\\\\kfbgfqpjdmjmd-kwno!=pfwwofgtfpwfqm`bvpjmd.tfahjw`objnfgIvpwj`f`kbswfquj`wjnpWklnbp#nlyjoobsqlnjpfsbqwjfpfgjwjlmlvwpjgf9ebopf/kvmgqfgLoznsj`\\\\avwwlmbvwklqpqfb`kfg`kqlmj`gfnbmgppf`lmgpsqlwf`wbglswfgsqfsbqfmfjwkfqdqfbwozdqfbwfqlufqboojnsqluf`lnnbmgpsf`jbopfbq`k-tlqpkjsevmgjmdwklvdkwkjdkfpwjmpwfbgvwjojwzrvbqwfq@vowvqfwfpwjmd`ofbqozf{slpfgAqltpfqojafqbo~#`bw`kSqlif`wf{bnsofkjgf+*8EolqjgbbmptfqpbooltfgFnsfqlqgfefmpfpfqjlvpeqffglnPfufqbo.avwwlmEvqwkfqlvw#le#\\\">#mvoowqbjmfgGfmnbqhuljg+3*,boo-ipsqfufmwQfrvfpwPwfskfm\\t\\tTkfm#lapfquf?,k1=\\x0E\\tNlgfqm#sqlujgf!#bow>!alqgfqp-\\t\\tElq#\\t\\tNbmz#bqwjpwpsltfqfgsfqelqnej`wjlmwzsf#lenfgj`bowj`hfwplsslpfg@lvm`jotjwmfppivpwj`fDflqdf#Afodjvn---?,b=wtjwwfqmlwbaoztbjwjmdtbqebqf#Lwkfq#qbmhjmdskqbpfpnfmwjlmpvqujufp`klobq?,s=\\x0E\\t#@lvmwqzjdmlqfgolpp#leivpw#bpDflqdjbpwqbmdf?kfbg=?pwlssfg2$^*8\\x0E\\tjpobmgpmlwbaofalqgfq9ojpw#le`bqqjfg233/333?,k0=\\t#pfufqboaf`lnfppfof`w#tfggjmd33-kwnonlmbq`klee#wkfwfb`kfqkjdkoz#ajloldzojef#lelq#fufmqjpf#le%qbrvl8sovplmfkvmwjmd+wklvdkGlvdobpiljmjmd`jq`ofpElq#wkfBm`jfmwUjfwmbnufkj`ofpv`k#bp`qzpwboubovf#>Tjmgltpfmilzfgb#pnboobppvnfg?b#jg>!elqfjdm#Boo#qjklt#wkfGjpsobzqfwjqfgkltfufqkjggfm8abwwofppffhjmd`bajmfwtbp#mlwollh#bw`lmgv`wdfw#wkfIbmvbqzkbssfmpwvqmjmdb9klufqLmojmf#Eqfm`k#ob`hjmdwzsj`bof{wqb`wfmfnjfpfufm#jedfmfqbwgf`jgfgbqf#mlw,pfbq`kafojfep.jnbdf9ol`bwfgpwbwj`-oldjm!=`lmufqwujlofmwfmwfqfgejqpw!=`jq`vjwEjmobmg`kfnjpwpkf#tbp23s{8!=bp#pv`kgjujgfg?,psbm=tjoo#afojmf#leb#dqfbwnzpwfqz,jmgf{-eboojmdgvf#wl#qbjotbz`loofdfnlmpwfqgfp`fmwjw#tjwkmv`ofbqIftjpk#sqlwfpwAqjwjpkeoltfqpsqfgj`wqfelqnpavwwlm#tkl#tbpof`wvqfjmpwbmwpvj`jgfdfmfqj`sfqjlgpnbqhfwpPl`jbo#ejpkjmd`lnajmfdqbskj`tjmmfqp?aq#,=?az#wkf#MbwvqboSqjub`z`llhjfplvw`lnfqfploufPtfgjpkaqjfeozSfqpjbmpl#nv`k@fmwvqzgfsj`wp`lovnmpklvpjmdp`qjswpmf{w#wlafbqjmdnbssjmdqfujpfgiRvfqz+.tjgwk9wjwof!=wllowjsPf`wjlmgfpjdmpWvqhjpkzlvmdfq-nbw`k+~*+*8\\t\\tavqmjmdlsfqbwfgfdqffpplvq`f>Qj`kbqg`olpfozsobpwj`fmwqjfp?,wq=\\x0E\\t`lolq9 vo#jg>!slppfppqloojmdskzpj`pebjojmdf{f`vwf`lmwfpwojmh#wlGfebvow?aq#,=\\t9#wqvf/`kbqwfqwlvqjpn`obppj`sql`ffgf{sobjm?,k2=\\x0E\\tlmojmf-<{no#ufkfosjmdgjbnlmgvpf#wkfbjqojmffmg#..=*-bwwq+qfbgfqpklpwjmd eeeeeeqfbojyfUjm`fmwpjdmbop#pq`>!,Sqlgv`wgfpsjwfgjufqpfwfoojmdSvaoj`#kfog#jmIlpfsk#wkfbwqfbeef`wp?pwzof=b#obqdfglfpm$wobwfq/#Fofnfmwebuj`lm`qfbwlqKvmdbqzBjqslqwpff#wkfpl#wkbwNj`kbfoPzpwfnpSqldqbnp/#bmg##tjgwk>f%rvlw8wqbgjmdofew!=\\tsfqplmpDlogfm#Beebjqpdqbnnbqelqnjmdgfpwqlzjgfb#le`bpf#lelogfpw#wkjp#jp-pq`#>#`bqwllmqfdjpwq@lnnlmpNvpojnpTkbw#jpjm#nbmznbqhjmdqfufbopJmgffg/frvbooz,pklt\\\\blvwgllqfp`bsf+Bvpwqjbdfmfwj`pzpwfn/Jm#wkf#pjwwjmdKf#boplJpobmgpB`bgfnz\\t\\n\\n?\\\"..Gbmjfo#ajmgjmdaol`h!=jnslpfgvwjojyfBaqbkbn+f{`fswxtjgwk9svwwjmd*-kwno+\\u007F\\u007F#X^8\\tGBWBX#)hjw`kfmnlvmwfgb`wvbo#gjbof`wnbjmoz#\\\\aobmh$jmpwboof{sfqwpje+wzsfJw#bopl%`lsz8#!=Wfqnpalqm#jmLswjlmpfbpwfqmwbohjmd`lm`fqmdbjmfg#lmdljmdivpwjez`qjwj`peb`wlqzjwp#ltmbppbvowjmujwfgobpwjmdkjp#ltmkqfe>!,!#qfo>!gfufols`lm`fqwgjbdqbngloobqp`ovpwfqsks<jg>bo`lklo*8~*+*8vpjmd#b=?psbm=ufppfopqfujuboBggqfppbnbwfvqbmgqljgboofdfgjoomfpptbohjmd`fmwfqprvbojeznbw`kfpvmjejfgf{wjm`wGfefmpfgjfg#jm\\t\\n?\\\"..#`vpwlnpojmhjmdOjwwof#Allh#lefufmjmdnjm-ip<bqf#wkfhlmwbhwwlgbz$p-kwno!#wbqdfw>tfbqjmdBoo#Qjd8\\t~*+*8qbjpjmd#Bopl/#`qv`jbobalvw!=gf`obqf..=\\t?p`ejqfel{bp#nv`kbssojfpjmgf{/#p/#avw#wzsf#>#\\t\\x0E\\t?\\\"..wltbqgpQf`lqgpSqjubwfElqfjdmSqfnjfq`klj`fpUjqwvboqfwvqmp@lnnfmwSltfqfgjmojmf8slufqwz`kbnafqOjujmd#ulovnfpBmwklmzoldjm!#QfobwfgF`lmlnzqfb`kfp`vwwjmddqbujwzojef#jm@kbswfq.pkbgltMlwbaof?,wg=\\x0E\\t#qfwvqmpwbgjvntjgdfwpubqzjmdwqbufopkfog#aztkl#bqftlqh#jmeb`vowzbmdvobqtkl#kbgbjqslqwwltm#le\\t\\tPlnf#$`oj`h$`kbqdfphfztlqgjw#tjoo`jwz#le+wkjp*8Bmgqft#vmjrvf#`kf`hfglq#nlqf033s{8#qfwvqm8qpjlm>!sovdjmptjwkjm#kfqpfoePwbwjlmEfgfqboufmwvqfsvaojpkpfmw#wlwfmpjlmb`wqfpp`lnf#wlejmdfqpGvhf#lesflsof/f{soljwtkbw#jpkbqnlmzb#nbilq!9!kwwsjm#kjp#nfmv!=\\tnlmwkozleej`fq`lvm`jodbjmjmdfufm#jmPvnnbqzgbwf#leolzbowzejwmfppbmg#tbpfnsfqlqpvsqfnfPf`lmg#kfbqjmdQvppjbmolmdfpwBoafqwbobwfqbopfw#le#pnboo!=-bssfmggl#tjwkefgfqboabmh#leafmfbwkGfpsjwf@bsjwbodqlvmgp*/#bmg#sfq`fmwjw#eqln`olpjmd`lmwbjmJmpwfbgejewffmbp#tfoo-zbkll-qfpslmgejdkwfqlap`vqfqfeof`wlqdbmj`>#Nbwk-fgjwjmdlmojmf#sbggjmdb#tkloflmfqqlqzfbq#lefmg#le#abqqjfqtkfm#jwkfbgfq#klnf#leqfpvnfgqfmbnfgpwqlmd=kfbwjmdqfwbjmp`olvgeqtbz#le#Nbq`k#2hmltjmdjm#sbqwAfwtffmofpplmp`olpfpwujqwvboojmhp!=`qlppfgFMG#..=ebnlvp#btbqgfgOj`fmpfKfbowk#ebjqoz#tfbowkznjmjnboBeqj`bm`lnsfwfobafo!=pjmdjmdebqnfqpAqbpjo*gjp`vppqfsob`fDqfdlqzelmw#`lsvqpvfgbssfbqpnbhf#vsqlvmgfgalwk#leaol`hfgpbt#wkfleej`fp`lolvqpje+gl`vtkfm#kffmelq`fsvpk+evBvdvpw#VWE.;!=Ebmwbpzjm#nlpwjmivqfgVpvboozebqnjmd`olpvqflaif`w#gfefm`fvpf#le#Nfgj`bo?algz=\\tfujgfmwaf#vpfghfz@lgfpj{wffmJpobnj` 333333fmwjqf#tjgfoz#b`wjuf#+wzsflelmf#`bm`lolq#>psfbhfqf{wfmgpSkzpj`pwfqqbjm?walgz=evmfqboujftjmdnjggof#`qj`hfwsqlskfwpkjewfggl`wlqpQvppfoo#wbqdfw`lnsb`wbodfaqbpl`jbo.avoh#lenbm#bmg?,wg=\\t#kf#ofew*-ubo+*ebopf*8oldj`boabmhjmdklnf#wlmbnjmd#Bqjylmb`qfgjwp*8\\t~*8\\telvmgfqjm#wvqm@loojmpafelqf#Avw#wkf`kbqdfgWjwof!=@bswbjmpsfoofgdlggfppWbd#..=Bggjmd9avw#tbpQf`fmw#sbwjfmwab`h#jm>ebopf%Ojm`lomtf#hmlt@lvmwfqIvgbjpnp`qjsw#bowfqfg$^*8\\t##kbp#wkfvm`ofbqFufmw$/alwk#jmmlw#boo\\t\\t?\\\"..#sob`jmdkbqg#wl#`fmwfqplqw#le`ojfmwppwqffwpAfqmbqgbppfqwpwfmg#wlebmwbpzgltm#jmkbqalvqEqffglniftfoqz,balvw--pfbq`kofdfmgpjp#nbgfnlgfqm#lmoz#lmlmoz#wljnbdf!#ojmfbq#sbjmwfqbmg#mlwqbqfoz#b`qlmzngfojufqpklqwfq33%bns8bp#nbmztjgwk>!,)#?\\\"X@wjwof#>le#wkf#oltfpw#sj`hfg#fp`bsfgvpfp#lesflsofp#Svaoj`Nbwwkftwb`wj`pgbnbdfgtbz#elqobtp#lefbpz#wl#tjmgltpwqlmd##pjnsof~`bw`k+pfufmwkjmelal{tfmw#wlsbjmwfg`jwjyfmJ#glm$wqfwqfbw-#Plnf#tt-!*8\\talnajmdnbjowl9nbgf#jm-#Nbmz#`bqqjfp\\u007F\\u007Fx~8tjtlqh#lepzmlmzngfefbwpebulqfglswj`bosbdfWqbvmofpp#pfmgjmdofew!=?`lnP`lqBoo#wkfiRvfqz-wlvqjpw@obppj`ebopf!#Tjokfonpvavqapdfmvjmfajpklsp-psojw+dolabo#elooltpalgz#lemlnjmbo@lmwb`wpf`vobqofew#wl`kjfeoz.kjggfm.abmmfq?,oj=\\t\\t-#Tkfm#jm#alwkgjpnjppF{solqfbotbzp#ujb#wkfpsb/]lotfoebqfqvojmd#bqqbmdf`bswbjmkjp#plmqvof#lekf#wllhjwpfoe/>3%bns8+`boofgpbnsofpwl#nbhf`ln,sbdNbqwjm#Hfmmfgzb``fswpevoo#lekbmgofgAfpjgfp,,..=?,baof#wlwbqdfwpfppfm`fkjn#wl#jwp#az#`lnnlm-njmfqbowl#wbhftbzp#wlp-lqd,obgujpfgsfmbowzpjnsof9je#wkfzOfwwfqpb#pklqwKfqafqwpwqjhfp#dqlvsp-ofmdwkeojdkwplufqobspoltoz#ofppfq#pl`jbo#?,s=\\t\\n\\njw#jmwlqbmhfg#qbwf#levo=\\x0E\\t##bwwfnswsbjq#lenbhf#jwHlmwbhwBmwlmjlkbujmd#qbwjmdp#b`wjufpwqfbnpwqbssfg!*-`pp+klpwjofofbg#wlojwwof#dqlvsp/Sj`wvqf..=\\x0E\\t\\x0E\\t#qltp>!#laif`wjmufqpf?ellwfq@vpwlnU=?_,p`qploujmd@kbnafqpobufqztlvmgfgtkfqfbp\\\">#$vmgelq#boosbqwoz#.qjdkw9Bqbajbmab`hfg#`fmwvqzvmjw#lenlajof.Fvqlsf/jp#klnfqjph#legfpjqfg@ojmwlm`lpw#lebdf#le#af`lnf#mlmf#les%rvlw8Njggof#fbg$*X3@qjwj`ppwvgjlp=%`lsz8dqlvs!=bppfnaonbhjmd#sqfppfgtjgdfw-sp9!#<#qfavjowaz#plnfElqnfq#fgjwlqpgfobzfg@bmlmj`kbg#wkfsvpkjmd`obpp>!avw#bqfsbqwjboAbazolmalwwln#`bqqjfq@lnnbmgjwp#vpfBp#tjwk`lvqpfpb#wkjqggfmlwfpbopl#jmKlvpwlm13s{8!=b``vpfgglvaof#dlbo#leEbnlvp#*-ajmg+sqjfpwp#Lmojmfjm#Ivozpw#(#!d`lmpvowgf`jnbokfosevoqfujufgjp#ufqzq$($jswolpjmd#efnbofpjp#boplpwqjmdpgbzp#lebqqjuboevwvqf#?laif`welq`jmdPwqjmd+!#,=\\t\\n\\nkfqf#jpfm`lgfg-##Wkf#aboollmglmf#az,`lnnlmad`lolqobt#le#Jmgjbmbbuljgfgavw#wkf1s{#0s{irvfqz-bewfq#bsloj`z-nfm#bmgellwfq.>#wqvf8elq#vpfp`qffm-Jmgjbm#jnbdf#>ebnjoz/kwws9,,#%maps8gqjufqpfwfqmbopbnf#bpmlwj`fgujftfqp~*+*8\\t#jp#nlqfpfbplmpelqnfq#wkf#mftjp#ivpw`lmpfmw#Pfbq`ktbp#wkftkz#wkfpkjssfgaq=?aq=tjgwk9#kfjdkw>nbgf#le`vjpjmfjp#wkbwb#ufqz#Bgnjqbo#ej{fg8mlqnbo#NjppjlmSqfpp/#lmwbqjl`kbqpfwwqz#wl#jmubgfg>!wqvf!psb`jmdjp#nlpwb#nlqf#wlwboozeboo#le~*8\\x0E\\t##jnnfmpfwjnf#jmpfw#lvwpbwjpezwl#ejmggltm#wlolw#le#Sobzfqpjm#Ivmfrvbmwvnmlw#wkfwjnf#wlgjpwbmwEjmmjpkpq`#>#+pjmdof#kfos#leDfqnbm#obt#bmgobafofgelqfpwp`llhjmdpsb`f!=kfbgfq.tfoo#bpPwbmofzaqjgdfp,dolabo@qlbwjb#Balvw#X3^8\\t##jw/#bmgdqlvsfgafjmd#b*xwkqltkf#nbgfojdkwfqfwkj`boEEEEEE!alwwln!ojhf#b#fnsolzpojuf#jmbp#pffmsqjmwfqnlpw#leva.ojmhqfif`wpbmg#vpfjnbdf!=pv``ffgeffgjmdMv`ofbqjmelqnbwl#kfosTlnfm$pMfjwkfqNf{j`bmsqlwfjm?wbaof#az#nbmzkfbowkzobtpvjwgfujpfg-svpk+xpfoofqppjnsoz#Wkqlvdk-`llhjf#Jnbdf+logfq!=vp-ip!=#Pjm`f#vmjufqpobqdfq#lsfm#wl\\\"..#fmgojfp#jm$^*8\\x0E\\t##nbqhfwtkl#jp#+!GLN@lnbmbdfglmf#elqwzsfle#Hjmdglnsqlejwpsqlslpfwl#pklt`fmwfq8nbgf#jwgqfppfgtfqf#jmnj{wvqfsqf`jpfbqjpjmdpq`#>#$nbhf#b#pf`vqfgAbswjpwulwjmd#\\t\\n\\nubq#Nbq`k#1dqft#vs@ojnbwf-qfnlufphjoofgtbz#wkf?,kfbg=eb`f#leb`wjmd#qjdkw!=wl#tlqhqfgv`fpkbp#kbgfqf`wfgpklt+*8b`wjlm>allh#lebm#bqfb>>#!kww?kfbgfq\\t?kwno=`lmelqneb`jmd#`llhjf-qfoz#lmklpwfg#-`vpwlnkf#tfmwavw#elqpsqfbg#Ebnjoz#b#nfbmplvw#wkfelqvnp-ellwbdf!=Nlajo@ofnfmwp!#jg>!bp#kjdkjmwfmpf..=?\\\"..efnbof#jp#pffmjnsojfgpfw#wkfb#pwbwfbmg#kjpebpwfpwafpjgfpavwwlm\\\\alvmgfg!=?jnd#Jmelal{fufmwp/b#zlvmdbmg#bqfMbwjuf#`kfbsfqWjnflvwbmg#kbpfmdjmfptlm#wkf+nlpwozqjdkw9#ejmg#b#.alwwlnSqjm`f#bqfb#lenlqf#lepfbq`k\\\\mbwvqf/ofdboozsfqjlg/obmg#lelq#tjwkjmgv`fgsqlujmdnjppjofol`boozBdbjmpwwkf#tbzh%rvlw8s{8!=\\x0E\\tsvpkfg#babmglmmvnfqbo@fqwbjmJm#wkjpnlqf#jmlq#plnfmbnf#jpbmg/#jm`qltmfgJPAM#3.`qfbwfpL`wlafqnbz#mlw`fmwfq#obwf#jmGfefm`ffmb`wfgtjpk#wlaqlbgoz`llojmdlmolbg>jw-#Wkfqf`lufqNfnafqpkfjdkw#bppvnfp?kwno=\\tsflsof-jm#lmf#>tjmgltellwfq\\\\b#dllg#qfhobnblwkfqp/wl#wkjp\\\\`llhjfsbmfo!=Olmglm/gfejmfp`qvpkfgabswjpn`lbpwbopwbwvp#wjwof!#nluf#wlolpw#jmafwwfq#jnsojfpqjuboqzpfqufqp#PzpwfnSfqkbspfp#bmg#`lmwfmgeoltjmdobpwfg#qjpf#jmDfmfpjpujft#leqjpjmd#pffn#wlavw#jm#ab`hjmdkf#tjoodjufm#bdjujmd#`jwjfp-eolt#le#Obwfq#boo#avwKjdktbzlmoz#azpjdm#lekf#glfpgjeefqpabwwfqz%bns8obpjmdofpwkqfbwpjmwfdfqwbhf#lmqfevpfg`boofg#>VP%bnsPff#wkfmbwjufpaz#wkjppzpwfn-kfbg#le9klufq/ofpajbmpvqmbnfbmg#boo`lnnlm,kfbgfq\\\\\\\\sbqbnpKbqubqg,sj{fo-qfnlubopl#olmdqlof#leiljmwozphzp`qbVmj`lgfaq#,=\\x0E\\tBwobmwbmv`ofvp@lvmwz/svqfoz#`lvmw!=fbpjoz#avjog#blm`oj`hb#djufmsljmwfqk%rvlw8fufmwp#fopf#x\\tgjwjlmpmlt#wkf/#tjwk#nbm#tkllqd,Tfalmf#bmg`buboqzKf#gjfgpfbwwof33/333#xtjmgltkbuf#wlje+tjmgbmg#jwpplofoz#n%rvlw8qfmftfgGfwqljwbnlmdpwfjwkfq#wkfn#jmPfmbwlqVp?,b=?Hjmd#leEqbm`jp.sqlgv`kf#vpfgbqw#bmgkjn#bmgvpfg#azp`lqjmdbw#klnfwl#kbufqfobwfpjajojwzeb`wjlmAveebolojmh!=?tkbw#kfeqff#wl@jwz#le`lnf#jmpf`wlqp`lvmwfglmf#gbzmfqulvpprvbqf#~8je+dljm#tkbwjnd!#bojp#lmozpfbq`k,wvfpgbzollpfozPlolnlmpf{vbo#.#?b#kqnfgjvn!GL#MLW#Eqbm`f/tjwk#b#tbq#bmgpf`lmg#wbhf#b#=\\x0E\\t\\x0E\\t\\x0E\\tnbqhfw-kjdktbzglmf#jm`wjujwz!obpw!=laojdfgqjpf#wl!vmgfejnbgf#wl#Fbqoz#sqbjpfgjm#jwp#elq#kjpbwkofwfIvsjwfqZbkll\\\"#wfqnfg#pl#nbmzqfbooz#p-#Wkf#b#tlnbm<ubovf>gjqf`w#qjdkw!#aj`z`ofb`jmd>!gbz#bmgpwbwjmdQbwkfq/kjdkfq#Leej`f#bqf#mltwjnfp/#tkfm#b#sbz#elqlm#wkjp.ojmh!=8alqgfqbqlvmg#bmmvbo#wkf#Mftsvw#wkf-`ln!#wbhjm#wlb#aqjfe+jm#wkfdqlvsp-8#tjgwkfmyznfppjnsof#jm#obwfxqfwvqmwkfqbszb#sljmwabmmjmdjmhp!=\\t+*8!#qfb#sob`f_v330@bbalvw#bwq=\\x0E\\t\\n\\n``lvmw#djufp#b?P@QJSWQbjotbzwkfnfp,wlloal{AzJg+!{kvnbmp/tbw`kfpjm#plnf#je#+tj`lnjmd#elqnbwp#Vmgfq#avw#kbpkbmgfg#nbgf#azwkbm#jmefbq#legfmlwfg,jeqbnfofew#jmulowbdfjm#fb`kb%rvlw8abpf#leJm#nbmzvmgfqdlqfdjnfpb`wjlm#?,s=\\x0E\\t?vpwlnUb8%dw8?,jnslqwplq#wkbwnlpwoz#%bns8qf#pjyf>!?,b=?,kb#`obppsbppjufKlpw#>#TkfwkfqefqwjofUbqjlvp>X^8+ev`bnfqbp,=?,wg=b`wp#bpJm#plnf=\\x0E\\t\\x0E\\t?\\\"lqdbmjp#?aq#,=Afjijmd`bwbo/Lgfvwp`kfvqlsfvfvphbqbdbfjodfpufmphbfpsb/]bnfmpbifvpvbqjlwqbabiln/E{j`ls/Mdjmbpjfnsqfpjpwfnbl`wvaqfgvqbmwfb/]bgjqfnsqfpbnlnfmwlmvfpwqlsqjnfqbwqbu/Epdqb`jbpmvfpwqbsql`fplfpwbglp`bojgbgsfqplmbm/Vnfqlb`vfqgln/Vpj`bnjfnaqllefqwbpbodvmlpsb/Apfpfifnsolgfqf`klbgfn/Mpsqjubglbdqfdbqfmob`fpslpjaofklwfofppfujoobsqjnfql/Vowjnlfufmwlpbq`kjul`vowvqbnvifqfpfmwqbgbbmvm`jlfnabqdlnfq`bgldqbmgfpfpwvgjlnfilqfpefaqfqlgjpf/]lwvqjpnl`/_gjdlslqwbgbfpsb`jlebnjojbbmwlmjlsfqnjwfdvbqgbqbodvmbpsqf`jlpbodvjfmpfmwjglujpjwbpw/Awvol`lml`fqpfdvmgl`lmpfileqbm`jbnjmvwlppfdvmgbwfmfnlpfef`wlpn/Mobdbpfpj/_mqfujpwbdqbmbgb`lnsqbqjmdqfpldbq`/Abb``j/_mf`vbglqrvjfmfpjm`ovplgfafq/Mnbwfqjbklnaqfpnvfpwqbslgq/Abnb/]bmb/Vowjnbfpwbnlplej`jbowbnajfmmjmd/Vmpbovglpslgfnlpnfilqbqslpjwjlmavpjmfppklnfsbdfpf`vqjwzobmdvbdfpwbmgbqg`bnsbjdmefbwvqfp`bwfdlqzf{wfqmbo`kjogqfmqfpfqufgqfpfbq`kf{`kbmdfebulqjwfwfnsobwfnjojwbqzjmgvpwqzpfquj`fpnbwfqjbosqlgv`wpy.jmgf{9`lnnfmwpplewtbqf`lnsofwf`bofmgbqsobwelqnbqwj`ofpqfrvjqfgnlufnfmwrvfpwjlmavjogjmdslojwj`pslppjaofqfojdjlmskzpj`boeffgab`hqfdjpwfqsj`wvqfpgjpbaofgsqlwl`lobvgjfm`fpfwwjmdpb`wjujwzfofnfmwpofbqmjmdbmzwkjmdbapwqb`wsqldqfpplufqujftnbdbyjmff`lmlnj`wqbjmjmdsqfppvqfubqjlvp#?pwqlmd=sqlsfqwzpklssjmdwldfwkfqbgubm`fgafkbujlqgltmolbgefbwvqfgellwaboopfof`wfgObmdvbdfgjpwbm`fqfnfnafqwqb`hjmdsbpptlqgnlgjejfgpwvgfmwpgjqf`wozejdkwjmdmlqwkfqmgbwbabpfefpwjuboaqfbhjmdol`bwjlmjmwfqmfwgqlsgltmsqb`wj`ffujgfm`fevm`wjlmnbqqjbdfqfpslmpfsqlaofnpmfdbwjufsqldqbnpbmbozpjpqfofbpfgabmmfq!=svq`kbpfsloj`jfpqfdjlmbo`qfbwjufbqdvnfmwallhnbqhqfefqqfq`kfnj`bogjujpjlm`booab`hpfsbqbwfsqlif`wp`lmeoj`wkbqgtbqfjmwfqfpwgfojufqznlvmwbjmlawbjmfg>#ebopf8elq+ubq#b``fswfg`bsb`jwz`lnsvwfqjgfmwjwzbjq`qbewfnsolzfgsqlslpfgglnfpwj`jm`ovgfpsqlujgfgklpsjwboufqwj`bo`loobspfbssqlb`ksbqwmfqpoldl!=?bgbvdkwfqbvwklq!#`vowvqboebnjojfp,jnbdfp,bppfnaozsltfqevowfb`kjmdejmjpkfggjpwqj`w`qjwj`bo`dj.ajm,svqslpfpqfrvjqfpfof`wjlmaf`lnjmdsqlujgfpb`bgfnj`f{fq`jpfb`wvbooznfgj`jmf`lmpwbmwb``jgfmwNbdbyjmfgl`vnfmwpwbqwjmdalwwln!=lapfqufg9#%rvlw8f{wfmgfgsqfujlvpPlewtbqf`vpwlnfqgf`jpjlmpwqfmdwkgfwbjofgpojdkwozsobmmjmdwf{wbqfb`vqqfm`zfufqzlmfpwqbjdkwwqbmpefqslpjwjufsqlgv`fgkfqjwbdfpkjssjmdbaplovwfqf`fjufgqfofubmwavwwlm!#ujlofm`fbmztkfqfafmfejwpobvm`kfgqf`fmwozboojbm`felooltfgnvowjsofavoofwjmjm`ovgfgl``vqqfgjmwfqmbo'+wkjp*-qfsvaoj`=?wq=?wg`lmdqfppqf`lqgfgvowjnbwfplovwjlm?vo#jg>!gjp`lufqKlnf?,b=tfapjwfpmfwtlqhpbowklvdkfmwjqfoznfnlqjbonfppbdfp`lmwjmvfb`wjuf!=plnftkbwuj`wlqjbTfpwfqm##wjwof>!Ol`bwjlm`lmwqb`wujpjwlqpGltmolbgtjwklvw#qjdkw!=\\tnfbpvqfptjgwk#>#ubqjbaofjmuloufgujqdjmjbmlqnboozkbssfmfgb``lvmwppwbmgjmdmbwjlmboQfdjpwfqsqfsbqfg`lmwqlopb``vqbwfajqwkgbzpwqbwfdzleej`jbodqbskj`p`qjnjmboslppjaoz`lmpvnfqSfqplmbopsfbhjmdubojgbwfb`kjfufg-isd!#,=nb`kjmfp?,k1=\\t##hfztlqgpeqjfmgozaqlwkfqp`lnajmfglqjdjmbo`lnslpfgf{sf`wfgbgfrvbwfsbhjpwbmeloolt!#ubovbaof?,obafo=qfobwjufaqjmdjmdjm`qfbpfdlufqmlqsovdjmp,Ojpw#le#Kfbgfq!=!#mbnf>!#+%rvlw8dqbgvbwf?,kfbg=\\t`lnnfq`fnbobzpjbgjqf`wlqnbjmwbjm8kfjdkw9p`kfgvof`kbmdjmdab`h#wl#`bwkloj`sbwwfqmp`lolq9# dqfbwfpwpvssojfpqfojbaof?,vo=\\t\\n\\n?pfof`w#`jwjyfmp`olwkjmdtbw`kjmd?oj#jg>!psf`jej``bqqzjmdpfmwfm`f?`fmwfq=`lmwqbpwwkjmhjmd`bw`k+f*plvwkfqmNj`kbfo#nfq`kbmw`bqlvpfosbggjmd9jmwfqjlq-psojw+!ojybwjlmL`wlafq#*xqfwvqmjnsqlufg..%dw8\\t\\t`lufqbdf`kbjqnbm-smd!#,=pvaif`wpQj`kbqg#tkbwfufqsqlabaozqf`lufqzabpfabooivgdnfmw`lmmf`w--`pp!#,=#tfapjwfqfslqwfggfebvow!,=?,b=\\x0E\\tfof`wqj`p`lwobmg`qfbwjlmrvbmwjwz-#JPAM#3gjg#mlw#jmpwbm`f.pfbq`k.!#obmd>!psfbhfqp@lnsvwfq`lmwbjmpbq`kjufpnjmjpwfqqfb`wjlmgjp`lvmwJwbojbml`qjwfqjbpwqlmdoz9#$kwws9$p`qjsw$`lufqjmdleefqjmdbssfbqfgAqjwjpk#jgfmwjezEb`fallhmvnfqlvpufkj`ofp`lm`fqmpBnfqj`bmkbmgojmdgju#jg>!Tjoojbn#sqlujgfq\\\\`lmwfmwb``vqb`zpf`wjlm#bmgfqplmeof{jaof@bwfdlqzobtqfm`f?p`qjsw=obzlvw>!bssqlufg#nb{jnvnkfbgfq!=?,wbaof=Pfquj`fpkbnjowlm`vqqfmw#`bmbgjbm`kbmmfop,wkfnfp,,bqwj`oflswjlmboslqwvdboubovf>!!jmwfqubotjqfofppfmwjwofgbdfm`jfpPfbq`k!#nfbpvqfgwklvpbmgpsfmgjmd%kfoojs8mft#Gbwf!#pjyf>!sbdfMbnfnjggof!#!#,=?,b=kjggfm!=pfrvfm`fsfqplmbolufqeoltlsjmjlmpjoojmljpojmhp!=\\t\\n?wjwof=ufqpjlmppbwvqgbzwfqnjmbojwfnsqlsfmdjmffqpf`wjlmpgfpjdmfqsqlslpbo>!ebopf!Fpsb/]loqfofbpfppvanjw!#fq%rvlw8bggjwjlmpznswlnplqjfmwfgqfplvq`fqjdkw!=?sofbpvqfpwbwjlmpkjpwlqz-ofbujmd##alqgfq>`lmwfmwp`fmwfq!=-\\t\\tPlnf#gjqf`wfgpvjwbaofavodbqjb-pklt+*8gfpjdmfgDfmfqbo#`lm`fswpF{bnsofptjoojbnpLqjdjmbo!=?psbm=pfbq`k!=lsfqbwlqqfrvfpwpb#%rvlw8booltjmdGl`vnfmwqfujpjlm-#\\t\\tWkf#zlvqpfoe@lmwb`w#nj`kjdbmFmdojpk#`lovnajbsqjlqjwzsqjmwjmdgqjmhjmdeb`jojwzqfwvqmfg@lmwfmw#leej`fqpQvppjbm#dfmfqbwf.;;6:.2!jmgj`bwfebnjojbq#rvbojwznbqdjm93#`lmwfmwujftslqw`lmwb`wp.wjwof!=slqwbaof-ofmdwk#fojdjaofjmuloufpbwobmwj`lmolbg>!gfebvow-pvssojfgsbznfmwpdolppbqz\\t\\tBewfq#dvjgbm`f?,wg=?wgfm`lgjmdnjggof!=`bnf#wl#gjpsobzpp`lwwjpkilmbwkbmnbilqjwztjgdfwp-`ojmj`bowkbjobmgwfb`kfqp?kfbg=\\t\\nbeef`wfgpvsslqwpsljmwfq8wlPwqjmd?,pnboo=lhobklnbtjoo#af#jmufpwlq3!#bow>!klojgbzpQfplvq`foj`fmpfg#+tkj`k#-#Bewfq#`lmpjgfqujpjwjmdf{solqfqsqjnbqz#pfbq`k!#bmgqljg!rvj`hoz#nffwjmdpfpwjnbwf8qfwvqm#8`lolq9 #kfjdkw>bssqlubo/#%rvlw8#`kf`hfg-njm-ip!nbdmfwj`=?,b=?,kelqf`bpw-#Tkjof#wkvqpgbzgufqwjpf%fb`vwf8kbp@obppfubovbwflqgfqjmdf{jpwjmdsbwjfmwp#Lmojmf#`lolqbglLswjlmp!`bnsafoo?\\\"..#fmg?,psbm=??aq#,=\\x0E\\t\\\\slsvsp\\u007Fp`jfm`fp/%rvlw8#rvbojwz#Tjmgltp#bppjdmfgkfjdkw9#?a#`obppof%rvlw8#ubovf>!#@lnsbmzf{bnsofp?jeqbnf#afojfufpsqfpfmwpnbqpkboosbqw#le#sqlsfqoz*-\\t\\tWkf#wb{lmlnznv`k#le#?,psbm=\\t!#gbwb.pqwvdv/Fpp`qlooWl#sqlif`w?kfbg=\\x0E\\tbwwlqmfzfnskbpjppslmplqpebm`zal{tlqog$p#tjogojef`kf`hfg>pfppjlmpsqldqbnns{8elmw.#Sqlif`wilvqmbopafojfufgub`bwjlmwklnsplmojdkwjmdbmg#wkf#psf`jbo#alqgfq>3`kf`hjmd?,walgz=?avwwlm#@lnsofwf`ofbqej{\\t?kfbg=\\tbqwj`of#?pf`wjlmejmgjmdpqlof#jm#slsvobq##L`wlafqtfapjwf#f{slpvqfvpfg#wl##`kbmdfplsfqbwfg`oj`hjmdfmwfqjmd`lnnbmgpjmelqnfg#mvnafqp##?,gju=`qfbwjmdlmPvanjwnbqzobmg`loofdfpbmbozwj`ojpwjmdp`lmwb`w-olddfgJmbgujplqzpjaojmdp`lmwfmw!p%rvlw8*p-#Wkjp#sb`hbdfp`kf`hal{pvddfpwpsqfdmbmwwlnlqqltpsb`jmd>j`lm-smdibsbmfpf`lgfabpfavwwlm!=dbnaojmdpv`k#bp#/#tkjof#?,psbm=#njpplvqjpslqwjmdwls92s{#-?,psbm=wfmpjlmptjgwk>!1obyzolbgmlufnafqvpfg#jm#kfjdkw>!`qjsw!=\\t%maps8?,?wq=?wg#kfjdkw91,sqlgv`w`lvmwqz#jm`ovgf#ellwfq!#%ow8\\\"..#wjwof!=?,irvfqz-?,elqn=\\t+\\x0BBl\\bQ\\u007F*+\\x0BUm\\x05Gx*kqubwphjjwbojbmlqln/Nm(ow/Pqh/Kf4K4]4C5dwbnaj/Emmlwj`jbpnfmpbifpsfqplmbpgfqf`klpmb`jlmbopfquj`jl`lmwb`wlvpvbqjlpsqldqbnbdlajfqmlfnsqfpbpbmvm`jlpubofm`jb`lolnajbgfpsv/Epgfslqwfpsqlzf`wlsqlgv`wls/Vaoj`lmlplwqlpkjpwlqjbsqfpfmwfnjoolmfpnfgjbmwfsqfdvmwbbmwfqjlqqf`vqplpsqlaofnbpbmwjbdlmvfpwqlplsjmj/_mjnsqjnjqnjfmwqbpbn/Eqj`bufmgfglqpl`jfgbgqfpsf`wlqfbojybqqfdjpwqlsbobaqbpjmwfq/Epfmwlm`fpfpsf`jbonjfnaqlpqfbojgbg`/_qglabybqbdlybs/Mdjmbppl`jbofpaolrvfbqdfpwj/_mborvjofqpjpwfnbp`jfm`jbp`lnsofwlufqpj/_m`lnsofwbfpwvgjlps/Vaoj`blaifwjulboj`bmwfavp`bglq`bmwjgbgfmwqbgbpb``jlmfpbq`kjulppvsfqjlqnbzlq/Abbofnbmjbevm`j/_m/Vowjnlpkb`jfmglbrvfoolpfgj`j/_mefqmbmglbnajfmwfeb`fallhmvfpwqbp`ojfmwfpsql`fplpabpwbmwfsqfpfmwbqfslqwbq`lmdqfplsvaoj`bq`lnfq`jl`lmwqbwli/_ufmfpgjpwqjwlw/E`mj`b`lmivmwlfmfqd/Abwqbabibqbpwvqjbpqf`jfmwfvwjojybqalofw/Ampboubglq`lqqf`wbwqbabilpsqjnfqlpmfdl`jlpojafqwbggfwboofpsbmwboobsq/_{jnlbonfq/Abbmjnbofprvj/Emfp`lqby/_mpf``j/_mavp`bmglls`jlmfpf{wfqjlq`lm`fswlwlgbu/Abdbofq/Abfp`qjajqnfgj`jmboj`fm`jb`lmpvowbbpsf`wlp`q/Awj`bg/_obqfpivpwj`jbgfafq/Mmsfq/Alglmf`fpjwbnbmwfmfqsfrvf/]lqf`jajgbwqjavmbowfmfqjef`bm`j/_m`bmbqjbpgfp`bqdbgjufqplpnboolq`bqfrvjfqfw/E`mj`lgfafq/Abujujfmgbejmbmybpbgfobmwfevm`jlmb`lmpfilpgje/A`jo`jvgbgfpbmwjdvbpbubmybgbw/Eqnjmlvmjgbgfpp/Mm`kfy`bnsb/]bplewlmj`qfujpwbp`lmwjfmfpf`wlqfpnlnfmwlpeb`vowbg`q/Egjwlgjufqpbppvsvfpwleb`wlqfppfdvmglpsfrvf/]b<_<R<X<\\\\<Y=m<W<T<Y=m=n=`<]=g<W<R<]=g=n=`=a=n<R<P<y=m<W<T=n<R<_<R<P<Y<Q=c<^=m<Y=i=a=n<R<U<X<\\\\<Z<Y<]=g<W<T<_<R<X=o<X<Y<Q=`=a=n<R=n<]=g<W<\\\\=m<Y<]=c<R<X<T<Q=m<Y<]<Y<Q<\\\\<X<R=m<\\\\<U=n=h<R=n<R<Q<Y<_<R=m<^<R<T=m<^<R<U<T<_=l=g=n<R<Z<Y<^=m<Y<P=m<^<R=b<W<T=d=`=a=n<T=i<S<R<V<\\\\<X<Q<Y<U<X<R<P<\\\\<P<T=l<\\\\<W<T<]<R=n<Y<P=o=i<R=n=c<X<^=o=i=m<Y=n<T<W=b<X<T<X<Y<W<R<P<T=l<Y=n<Y<]=c=m<^<R<Y<^<T<X<Y=k<Y<_<R=a=n<T<P=m=k<Y=n=n<Y<P=g=j<Y<Q=g=m=n<\\\\<W<^<Y<X=`=n<Y<P<Y<^<R<X=g=n<Y<]<Y<^=g=d<Y<Q<\\\\<P<T=n<T<S<\\\\=n<R<P=o<S=l<\\\\<^<W<T=j<\\\\<R<X<Q<\\\\<_<R<X=g<[<Q<\\\\=b<P<R<_=o<X=l=o<_<^=m<Y<U<T<X<Y=n<V<T<Q<R<R<X<Q<R<X<Y<W<\\\\<X<Y<W<Y=m=l<R<V<T=b<Q=c<^<Y=m=`<y=m=n=`=l<\\\\<[<\\\\<Q<\\\\=d<T4K5h5h5k4K5h4F5f4@5i5f4U4B4K4Y4E4K5h4\\\\5f4U5h5f5k4@4C5f4C4K5h4N5j4K5h4]4C4F4A5o5i4Y5m4A4E5o4K5j4F4K5h5h5f5f5o5d5j4X4D5o4E5m5f5k4K4D5j4K4F4A5d4K4M4O5o4G4]4B5h4K5h4K5h4A4D4C5h5f5h4C4]5d4_4K4Z4V4[4F5o5d5j5k5j4K5o4_4K4A4E5j4K4C5f4K5h4[4D4U5h5f5o4X5o4]4K5f5i5o5j5i5j5k4K4X4]5o4E4]4J5f4_5j4X5f4[5i4K4\\\\4K4K5h5m5j4X4D4K4D4F4U4D4]4]4A5i4E5o4K5m4E5f5n5d5h5i4]5o4^5o5h5i4E4O4A5i4C5n5h4D5f5f4U5j5f4Y5d4]4E4[4]5f5n4X4K4]5o4@5d4K5h4O4B4]5e5i4U5j4K4K4D4A4G4U4]5d4Z4D4X5o5h5i4_4@5h4D5j4K5j4B4K5h4C5o4F4K4D5o5h5f4E4D4C5d5j4O5f4Z4K5f5d4@4C5m4]5f5n5o4F4D4F4O5m4Z5h5i4[4D4B4K5o4G4]4D4K4]5o4K5m4Z5h4K4A5h5e5j5m4_5k4O5f4K5i4]4C5d4C4O5j5k4K4C5f5j4K4K5h4K5j5i4U4]4Z4F4U5h5i4C4K4B5h5i5i5o5j\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x03\\x02\\x03\\x02\\x03\\x02\\x03\\x01\\x03\\x01\\x03\\x01\\x03\\x01\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x02\\x01\\x00\\x07\\x06\\x05\\x04\\x04\\x05\\x06\\x07\\x00\\x01\\x02\\x03\\x0B\\n\\t\\b\\x0F\\x0E\\r\\x0C\\x0C\\r\\x0E\\x0F\\b\\t\\n\\x0B\\x13\\x12\\x11\\x10\\x17\\x16\\x15\\x14\\x14\\x15\\x16\\x17\\x10\\x11\\x12\\x13\\x1B\\x1A\\x19\\x18\\x1F\\x1E\\x1D\\x1C\\x1C\\x1D\\x1E\\x1F\\x18\\x19\\x1A\\x1B\\x13\\x13\\x13\\x13\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x13\\x13\\x13\\x13\\x02\\x03\\x03\\x03\\x01\\x03\\x03\\x03\\x01\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\x00\\x03\\x03\\x03\\x13\\x13\\x03\\x02\\x03\\x03\\x03\\x02\\x03\\x03\\x13\\x13\\x03\\x02\\x03\\x03\\x03\\x0B\\x03\\x0B\\x03\\x0B\\x03\\x0B\\x03\\x03\\x03\\x02\\x03\\x01\\x03\\x00\\x03\\x07\\x03\\x06\\x03\\x05\\x03\\x04qfplvq`fp`lvmwqjfprvfpwjlmpfrvjsnfmw`lnnvmjwzbubjobaofkjdkojdkwGWG,{kwnonbqhfwjmdhmltofgdfplnfwkjmd`lmwbjmfqgjqf`wjlmpvap`qjafbgufqwjpf`kbqb`wfq!#ubovf>!?,pfof`w=Bvpwqbojb!#`obpp>!pjwvbwjlmbvwklqjwzelooltjmdsqjnbqjozlsfqbwjlm`kboofmdfgfufolsfgbmlmznlvpevm`wjlm#evm`wjlmp`lnsbmjfppwqv`wvqfbdqffnfmw!#wjwof>!slwfmwjbofgv`bwjlmbqdvnfmwppf`lmgbqz`lszqjdkwobmdvbdfpf{`ovpjuf`lmgjwjlm?,elqn=\\x0E\\tpwbwfnfmwbwwfmwjlmAjldqbskz~#fopf#x\\tplovwjlmptkfm#wkf#Bmbozwj`pwfnsobwfpgbmdfqlvppbwfoojwfgl`vnfmwpsvaojpkfqjnslqwbmwsqlwlwzsfjmeovfm`f%qbrvl8?,feef`wjufdfmfqboozwqbmpelqnafbvwjevowqbmpslqwlqdbmjyfgsvaojpkfgsqlnjmfmwvmwjo#wkfwkvnambjoMbwjlmbo#-el`vp+*8lufq#wkf#njdqbwjlmbmmlvm`fgellwfq!=\\tf{`fswjlmofpp#wkbmf{sfmpjufelqnbwjlmeqbnftlqhwfqqjwlqzmgj`bwjlm`vqqfmwoz`obppMbnf`qjwj`jpnwqbgjwjlmfopftkfqfBof{bmgfqbssljmwfgnbwfqjbopaqlbg`bpwnfmwjlmfgbeejojbwf?,lswjlm=wqfbwnfmwgjeefqfmw,gfebvow-Sqfpjgfmwlm`oj`h>!ajldqbskzlwkfqtjpfsfqnbmfmwEqbm/KbjpKlooztllgf{sbmpjlmpwbmgbqgp?,pwzof=\\tqfgv`wjlmGf`fnafq#sqfefqqfg@bnaqjgdflsslmfmwpAvpjmfpp#`lmevpjlm=\\t?wjwof=sqfpfmwfgf{sobjmfgglfp#mlw#tlqogtjgfjmwfqeb`fslpjwjlmpmftpsbsfq?,wbaof=\\tnlvmwbjmpojhf#wkf#fppfmwjboejmbm`jbopfof`wjlmb`wjlm>!,babmglmfgFgv`bwjlmsbqpfJmw+pwbajojwzvmbaof#wl?,wjwof=\\tqfobwjlmpMlwf#wkbwfeej`jfmwsfqelqnfgwtl#zfbqpPjm`f#wkfwkfqfelqftqbssfq!=bowfqmbwfjm`qfbpfgAbwwof#lesfq`fjufgwqzjmd#wlmf`fppbqzslqwqbzfgfof`wjlmpFojybafwk?,jeqbnf=gjp`lufqzjmpvqbm`fp-ofmdwk8ofdfmgbqzDfldqbskz`bmgjgbwf`lqslqbwfplnfwjnfppfquj`fp-jmkfqjwfg?,pwqlmd=@lnnvmjwzqfojdjlvpol`bwjlmp@lnnjwwffavjogjmdpwkf#tlqogml#olmdfqafdjmmjmdqfefqfm`f`bmmlw#afeqfrvfm`zwzsj`boozjmwl#wkf#qfobwjuf8qf`lqgjmdsqfpjgfmwjmjwjboozwf`kmjrvfwkf#lwkfqjw#`bm#aff{jpwfm`fvmgfqojmfwkjp#wjnfwfofsklmfjwfnp`lsfsqb`wj`fpbgubmwbdf*8qfwvqm#Elq#lwkfqsqlujgjmdgfnl`qb`zalwk#wkf#f{wfmpjufpveefqjmdpvsslqwfg`lnsvwfqp#evm`wjlmsqb`wj`bopbjg#wkbwjw#nbz#afFmdojpk?,eqln#wkf#p`kfgvofggltmolbgp?,obafo=\\tpvpsf`wfgnbqdjm9#3psjqjwvbo?,kfbg=\\t\\tnj`qlplewdqbgvboozgjp`vppfgkf#af`bnff{f`vwjufirvfqz-ipklvpfklog`lmejqnfgsvq`kbpfgojwfqboozgfpwqlzfgvs#wl#wkfubqjbwjlmqfnbjmjmdjw#jp#mlw`fmwvqjfpIbsbmfpf#bnlmd#wkf`lnsofwfgbodlqjwknjmwfqfpwpqfafoojlmvmgfejmfgfm`lvqbdfqfpjybaofjmuloujmdpfmpjwjufvmjufqpbosqlujpjlm+bowklvdkefbwvqjmd`lmgv`wfg*/#tkj`k#`lmwjmvfg.kfbgfq!=Efaqvbqz#mvnfqlvp#lufqeolt9`lnslmfmweqbdnfmwpf{`foofmw`lopsbm>!wf`kmj`bomfbq#wkf#Bgubm`fg#plvq`f#lef{sqfppfgKlmd#Hlmd#Eb`fallhnvowjsof#nf`kbmjpnfofubwjlmleefmpjuf?,elqn=\\t\\npslmplqfggl`vnfmw-lq#%rvlw8wkfqf#bqfwklpf#tklnlufnfmwpsql`fppfpgjeej`vowpvanjwwfgqf`lnnfmg`lmujm`fgsqlnlwjmd!#tjgwk>!-qfsob`f+`obppj`bo`lbojwjlmkjp#ejqpwgf`jpjlmpbppjpwbmwjmgj`bwfgfulovwjlm.tqbssfq!fmlvdk#wlbolmd#wkfgfojufqfg..=\\x0E\\t?\\\"..Bnfqj`bm#sqlwf`wfgMlufnafq#?,pwzof=?evqmjwvqfJmwfqmfw##lmaovq>!pvpsfmgfgqf`jsjfmwabpfg#lm#Nlqflufq/balojpkfg`loof`wfgtfqf#nbgffnlwjlmbofnfqdfm`zmbqqbwjufbgul`bwfps{8alqgfq`lnnjwwfggjq>!owq!fnsolzffpqfpfbq`k-#pfof`wfgpv``fpplq`vpwlnfqpgjpsobzfgPfswfnafqbgg@obpp+Eb`fallh#pvddfpwfgbmg#obwfqlsfqbwjmdfobalqbwfPlnfwjnfpJmpwjwvwf`fqwbjmozjmpwboofgelooltfqpIfqvpbofnwkfz#kbuf`lnsvwjmddfmfqbwfgsqlujm`fpdvbqbmwffbqajwqbqzqf`ldmjyftbmwfg#wls{8tjgwk9wkflqz#leafkbujlvqTkjof#wkffpwjnbwfgafdbm#wl#jw#af`bnfnbdmjwvgfnvpw#kbufnlqf#wkbmGjqf`wlqzf{wfmpjlmpf`qfwbqzmbwvqboozl``vqqjmdubqjbaofpdjufm#wkfsobwelqn-?,obafo=?ebjofg#wl`lnslvmgphjmgp#le#pl`jfwjfpbolmdpjgf#..%dw8\\t\\tplvwktfpwwkf#qjdkwqbgjbwjlmnbz#kbuf#vmfp`bsf+pslhfm#jm!#kqfe>!,sqldqbnnflmoz#wkf#`lnf#eqlngjqf`wlqzavqjfg#jmb#pjnjobqwkfz#tfqf?,elmw=?,Mlqtfdjbmpsf`jejfgsqlgv`jmdsbppfmdfq+mft#Gbwfwfnslqbqzej`wjlmboBewfq#wkffrvbwjlmpgltmolbg-qfdvobqozgfufolsfqbaluf#wkfojmhfg#wlskfmlnfmbsfqjlg#lewllowjs!=pvapwbm`fbvwlnbwj`bpsf`w#leBnlmd#wkf`lmmf`wfgfpwjnbwfpBjq#Elq`fpzpwfn#lelaif`wjufjnnfgjbwfnbhjmd#jwsbjmwjmdp`lmrvfqfgbqf#pwjoosql`fgvqfdqltwk#lekfbgfg#azFvqlsfbm#gjujpjlmpnlof`vofpeqbm`kjpfjmwfmwjlmbwwqb`wfg`kjogkllgbopl#vpfggfgj`bwfgpjmdbslqfgfdqff#leebwkfq#le`lmeoj`wp?,b=?,s=\\t`bnf#eqlntfqf#vpfgmlwf#wkbwqf`fjujmdF{f`vwjuffufm#nlqfb``fpp#wl`lnnbmgfqSlojwj`bonvpj`jbmpgfoj`jlvpsqjplmfqpbgufmw#leVWE.;!#,=?\\\"X@GBWBX!=@lmwb`wPlvwkfqm#ad`lolq>!pfqjfp#le-#Jw#tbp#jm#Fvqlsfsfqnjwwfgubojgbwf-bssfbqjmdleej`jboppfqjlvpoz.obmdvbdfjmjwjbwfgf{wfmgjmdolmd.wfqnjmeobwjlmpv`k#wkbwdfw@llhjfnbqhfg#az?,avwwlm=jnsofnfmwavw#jw#jpjm`qfbpfpgltm#wkf#qfrvjqjmdgfsfmgfmw..=\\t?\\\"..#jmwfqujftTjwk#wkf#`lsjfp#le`lmpfmpvptbp#avjowUfmfyvfob+elqnfqozwkf#pwbwfsfqplmmfopwqbwfdj`ebulvq#lejmufmwjlmTjhjsfgjb`lmwjmfmwujqwvbooztkj`k#tbpsqjm`jsof@lnsofwf#jgfmwj`bopklt#wkbwsqjnjwjufbtbz#eqlnnlof`vobqsqf`jpfozgjpploufgVmgfq#wkfufqpjlm>!=%maps8?,Jw#jp#wkf#Wkjp#jp#tjoo#kbuflqdbmjpnpplnf#wjnfEqjfgqj`ktbp#ejqpwwkf#lmoz#eb`w#wkbwelqn#jg>!sqf`fgjmdWf`kmj`boskzpj`jpwl``vqp#jmmbujdbwlqpf`wjlm!=psbm#jg>!plvdkw#wlafolt#wkfpvqujujmd~?,pwzof=kjp#gfbwkbp#jm#wkf`bvpfg#azsbqwjboozf{jpwjmd#vpjmd#wkftbp#djufmb#ojpw#leofufop#lemlwjlm#leLeej`jbo#gjpnjppfgp`jfmwjpwqfpfnaofpgvsoj`bwff{solpjufqf`lufqfgboo#lwkfqdboofqjfpxsbggjmd9sflsof#leqfdjlm#lebggqfppfpbppl`jbwfjnd#bow>!jm#nlgfqmpklvog#afnfwklg#leqfslqwjmdwjnfpwbnsmffgfg#wlwkf#Dqfbwqfdbqgjmdpffnfg#wlujftfg#bpjnsb`w#lmjgfb#wkbwwkf#Tlqogkfjdkw#lef{sbmgjmdWkfpf#bqf`vqqfmw!=`bqfevooznbjmwbjmp`kbqdf#le@obppj`bobggqfppfgsqfgj`wfgltmfqpkjs?gju#jg>!qjdkw!=\\x0E\\tqfpjgfm`fofbuf#wkf`lmwfmw!=bqf#lewfm##~*+*8\\x0E\\tsqlabaoz#Sqlefpplq.avwwlm!#qfpslmgfgpbzp#wkbwkbg#wl#afsob`fg#jmKvmdbqjbmpwbwvp#lepfqufp#bpVmjufqpbof{f`vwjlmbddqfdbwfelq#tkj`kjmef`wjlmbdqffg#wlkltfufq/#slsvobq!=sob`fg#lm`lmpwqv`wfof`wlqbopznalo#lejm`ovgjmdqfwvqm#wlbq`kjwf`w@kqjpwjbmsqfujlvp#ojujmd#jmfbpjfq#wlsqlefpplq\\t%ow8\\\"..#feef`w#lebmbozwj`ptbp#wbhfmtkfqf#wkfwllh#lufqafojfe#jmBeqjhbbmpbp#ebq#bpsqfufmwfgtlqh#tjwkb#psf`jbo?ejfogpfw@kqjpwnbpQfwqjfufg\\t\\tJm#wkf#ab`h#jmwlmlqwkfbpwnbdbyjmfp=?pwqlmd=`lnnjwwffdlufqmjmddqlvsp#lepwlqfg#jmfpwbaojpkb#dfmfqbojwp#ejqpwwkfjq#ltmslsvobwfgbm#laif`w@bqjaafbmboolt#wkfgjpwqj`wptjp`lmpjmol`bwjlm-8#tjgwk9#jmkbajwfgPl`jbojpwIbmvbqz#2?,ellwfq=pjnjobqoz`klj`f#lewkf#pbnf#psf`jej`#avpjmfpp#Wkf#ejqpw-ofmdwk8#gfpjqf#wlgfbo#tjwkpjm`f#wkfvpfqBdfmw`lm`fjufgjmgf{-sksbp#%rvlw8fmdbdf#jmqf`fmwoz/eft#zfbqptfqf#bopl\\t?kfbg=\\t?fgjwfg#azbqf#hmltm`jwjfp#jmb``fpphfz`lmgfnmfgbopl#kbufpfquj`fp/ebnjoz#leP`kllo#le`lmufqwfgmbwvqf#le#obmdvbdfnjmjpwfqp?,laif`w=wkfqf#jp#b#slsvobqpfrvfm`fpbgul`bwfgWkfz#tfqfbmz#lwkfqol`bwjlm>fmwfq#wkfnv`k#nlqfqfeof`wfgtbp#mbnfglqjdjmbo#b#wzsj`botkfm#wkfzfmdjmffqp`lvog#mlwqfpjgfmwptfgmfpgbzwkf#wkjqg#sqlgv`wpIbmvbqz#1tkbw#wkfzb#`fqwbjmqfb`wjlmpsql`fpplqbewfq#kjpwkf#obpw#`lmwbjmfg!=?,gju=\\t?,b=?,wg=gfsfmg#lmpfbq`k!=\\tsjf`fp#le`lnsfwjmdQfefqfm`fwfmmfppfftkj`k#kbp#ufqpjlm>?,psbm=#??,kfbgfq=djufp#wkfkjpwlqjbmubovf>!!=sbggjmd93ujft#wkbwwldfwkfq/wkf#nlpw#tbp#elvmgpvapfw#lebwwb`h#lm`kjogqfm/sljmwp#lesfqplmbo#slpjwjlm9boofdfgoz@ofufobmgtbp#obwfqbmg#bewfqbqf#djufmtbp#pwjoop`qloojmdgfpjdm#lenbhfp#wkfnv`k#ofppBnfqj`bmp-\\t\\tBewfq#/#avw#wkfNvpfvn#leolvjpjbmb+eqln#wkfnjmmfplwbsbqwj`ofpb#sql`fppGlnjmj`bmulovnf#leqfwvqmjmdgfefmpjuf33s{\\u007Fqjdknbgf#eqlnnlvpflufq!#pwzof>!pwbwfp#le+tkj`k#jp`lmwjmvfpEqbm`jp`lavjogjmd#tjwklvw#btjwk#plnftkl#tlvogb#elqn#leb#sbqw#leafelqf#jwhmltm#bp##Pfquj`fpol`bwjlm#bmg#lewfmnfbpvqjmdbmg#jw#jpsbsfqab`hubovfp#le\\x0E\\t?wjwof=>#tjmglt-gfwfqnjmffq%rvlw8#sobzfg#azbmg#fbqoz?,`fmwfq=eqln#wkjpwkf#wkqffsltfq#bmgle#%rvlw8jmmfqKWNO?b#kqfe>!z9jmojmf8@kvq`k#lewkf#fufmwufqz#kjdkleej`jbo#.kfjdkw9#`lmwfmw>!,`dj.ajm,wl#`qfbwfbeqjhbbmpfpsfqbmwleqbm/Kbjpobwujf)Mvojfwvuj)_(`f)Mwjmb(af)Mwjmb\\x0CUh\\x0CT{\\x0CTN\\n{I\\np@\\x04Fr\\x0BBl\\bQ\\u007F\\tA{\\x0BUm\\x05Gx\\tA{\\x01yp\\x06YA\\x00zX\\bTV\\bWl\\bUd\\x04BM\\x0BB{\\npV\\x0B@x\\x04B\\\\\\np@\\x04Db\\x04Gz\\tal\\npa\\tfM\\tuD\\bV~\\x04mx\\x0BQ}\\ndS\\tp\\\\\\bVK\\bS]\\bU|\\x05oD\\tkV\\x0Bed\\x0BHR\\nb~\\x04M`\\nJp\\x05oD\\x04|Q\\nLP\\x04Sw\\bTl\\nAI\\nxC\\bWt\\tBq\\x05F`\\x04Cm\\x0BLm\\tKx\\t}t\\bPv\\ny\\\\\\naB\\tV\\u007F\\nZd\\x04XU\\x04li\\tfr\\ti@\\tBH\\x04BD\\x04BV\\t`V\\n[]\\tp_\\tTn\\n~A\\nxR\\tuD\\t`{\\bV@\\tTn\\tHK\\tAJ\\x0Bxs\\x04Zf\\nqI\\x04Zf\\x0BBM\\x0B|j\\t}t\\bSM\\nmC\\x0BQ}pfquj`jlpbqw/A`volbqdfmwjmbabq`folmb`vborvjfqsvaoj`bglsqlgv`wlpslo/Awj`bqfpsvfpwbtjhjsfgjbpjdvjfmwfa/Vprvfgb`lnvmjgbgpfdvqjgbgsqjm`jsbosqfdvmwbp`lmwfmjglqfpslmgfqufmfyvfobsqlaofnbpgj`jfnaqfqfob`j/_mmlujfnaqfpjnjobqfpsqlzf`wlpsqldqbnbpjmpwjwvwlb`wjujgbgfm`vfmwqbf`lmln/Abjn/Mdfmfp`lmwb`wbqgfp`bqdbqmf`fpbqjlbwfm`j/_mwfo/Eelml`lnjpj/_m`bm`jlmfp`bsb`jgbgfm`lmwqbqbm/Mojpjpebulqjwlpw/Eqnjmlpsqlujm`jbfwjrvfwbpfofnfmwlpevm`jlmfpqfpvowbgl`bq/M`wfqsqlsjfgbgsqjm`jsjlmf`fpjgbgnvmj`jsbo`qfb`j/_mgfp`bqdbpsqfpfm`jb`lnfq`jbolsjmjlmfpfifq`j`jlfgjwlqjbopbobnbm`bdlmy/Mofygl`vnfmwlsfo/A`vobqf`jfmwfpdfmfqbofpwbqqbdlmbsq/M`wj`bmlufgbgfpsqlsvfpwbsb`jfmwfpw/E`mj`bplaifwjulp`lmwb`wlp\\x0CHB\\x0CIk\\x0CHn\\x0CH^\\x0CHS\\x0CHc\\x0CHU\\x0CId\\x0CHn\\x0CH{\\x0CHC\\x0CHR\\x0CHT\\x0CHR\\x0CHI\\x0CHc\\x0CHY\\x0CHn\\x0CH\\\\\\x0CHU\\x0CIk\\x0CHy\\x0CIg\\x0CHd\\x0CHy\\x0CIm\\x0CHw\\x0CH\\\\\\x0CHU\\x0CHR\\x0CH@\\x0CHR\\x0CHJ\\x0CHy\\x0CHU\\x0CHR\\x0CHT\\x0CHA\\x0CIl\\x0CHU\\x0CIm\\x0CHc\\x0CH\\\\\\x0CHU\\x0CIl\\x0CHB\\x0CId\\x0CHn\\x0CHJ\\x0CHS\\x0CHD\\x0CH@\\x0CHR\\x0CHHgjsolgl`p\\x0CHT\\x0CHB\\x0CHC\\x0CH\\\\\\x0CIn\\x0CHF\\x0CHD\\x0CHR\\x0CHB\\x0CHF\\x0CHH\\x0CHR\\x0CHG\\x0CHS\\x0CH\\\\\\x0CHx\\x0CHT\\x0CHH\\x0CHH\\x0CH\\\\\\x0CHU\\x0CH^\\x0CIg\\x0CH{\\x0CHU\\x0CIm\\x0CHj\\x0CH@\\x0CHR\\x0CH\\\\\\x0CHJ\\x0CIk\\x0CHZ\\x0CHU\\x0CIm\\x0CHd\\x0CHz\\x0CIk\\x0CH^\\x0CHC\\x0CHJ\\x0CHS\\x0CHy\\x0CHR\\x0CHB\\x0CHY\\x0CIk\\x0CH@\\x0CHH\\x0CIl\\x0CHD\\x0CH@\\x0CIl\\x0CHv\\x0CHB\\x0CI`\\x0CHH\\x0CHT\\x0CHR\\x0CH^\\x0CH^\\x0CIk\\x0CHz\\x0CHp\\x0CIe\\x0CH@\\x0CHB\\x0CHJ\\x0CHJ\\x0CHH\\x0CHI\\x0CHR\\x0CHD\\x0CHU\\x0CIl\\x0CHZ\\x0CHU\\x0CH\\\\\\x0CHi\\x0CH^\\x0CH{\\x0CHy\\x0CHA\\x0CIl\\x0CHD\\x0CH{\\x0CH\\\\\\x0CHF\\x0CHR\\x0CHT\\x0CH\\\\\\x0CHR\\x0CHH\\x0CHy\\x0CHS\\x0CHc\\x0CHe\\x0CHT\\x0CIk\\x0CH{\\x0CHC\\x0CIl\\x0CHU\\x0CIn\\x0CHm\\x0CHj\\x0CH{\\x0CIk\\x0CHs\\x0CIl\\x0CHB\\x0CHz\\x0CIg\\x0CHp\\x0CHy\\x0CHR\\x0CH\\\\\\x0CHi\\x0CHA\\x0CIl\\x0CH{\\x0CHC\\x0CIk\\x0CHH\\x0CIm\\x0CHB\\x0CHY\\x0CIg\\x0CHs\\x0CHJ\\x0CIk\\x0CHn\\x0CHi\\x0CH{\\x0CH\\\\\\x0CH|\\x0CHT\\x0CIk\\x0CHB\\x0CIk\\x0CH^\\x0CH^\\x0CH{\\x0CHR\\x0CHU\\x0CHR\\x0CH^\\x0CHf\\x0CHF\\x0CH\\\\\\x0CHv\\x0CHR\\x0CH\\\\\\x0CH|\\x0CHT\\x0CHR\\x0CHJ\\x0CIk\\x0CH\\\\\\x0CHp\\x0CHS\\x0CHT\\x0CHJ\\x0CHS\\x0CH^\\x0CH@\\x0CHn\\x0CHJ\\x0CH@\\x0CHD\\x0CHR\\x0CHU\\x0CIn\\x0CHn\\x0CH^\\x0CHR\\x0CHz\\x0CHp\\x0CIl\\x0CHH\\x0CH@\\x0CHs\\x0CHD\\x0CHB\\x0CHS\\x0CH^\\x0CHk\\x0CHT\\x0CIk\\x0CHj\\x0CHD\\x0CIk\\x0CHD\\x0CHC\\x0CHR\\x0CHy\\x0CIm\\x0CH^\\x0CH^\\x0CIe\\x0CH{\\x0CHA\\x0CHR\\x0CH{\\x0CH\\\\\\x0CIk\\x0CH^\\x0CHp\\x0CH{\\x0CHU\\x0CH\\\\\\x0CHR\\x0CHB\\x0CH^\\x0CH{\\x0CIk\\x0CHF\\x0CIk\\x0CHp\\x0CHU\\x0CHR\\x0CHI\\x0CHk\\x0CHT\\x0CIl\\x0CHT\\x0CHU\\x0CIl\\x0CHy\\x0CH^\\x0CHR\\x0CHL\\x0CIl\\x0CHy\\x0CHU\\x0CHR\\x0CHm\\x0CHJ\\x0CIn\\x0CH\\\\\\x0CHH\\x0CHU\\x0CHH\\x0CHT\\x0CHR\\x0CHH\\x0CHC\\x0CHR\\x0CHJ\\x0CHj\\x0CHC\\x0CHR\\x0CHF\\x0CHR\\x0CHy\\x0CHy\\x0CI`\\x0CHD\\x0CHZ\\x0CHR\\x0CHB\\x0CHJ\\x0CIk\\x0CHz\\x0CHC\\x0CHU\\x0CIl\\x0CH\\\\\\x0CHR\\x0CHC\\x0CHz\\x0CIm\\x0CHJ\\x0CH^\\x0CH{\\x0CIl`bwfdlqjfpf{sfqjfm`f?,wjwof=\\x0E\\t@lszqjdkw#ibubp`qjsw`lmgjwjlmpfufqzwkjmd?s#`obpp>!wf`kmloldzab`hdqlvmg?b#`obpp>!nbmbdfnfmw%`lsz8#132ibubP`qjsw`kbqb`wfqpaqfbg`qvnawkfnpfoufpklqjylmwbodlufqmnfmw@bojelqmjbb`wjujwjfpgjp`lufqfgMbujdbwjlmwqbmpjwjlm`lmmf`wjlmmbujdbwjlmbssfbqbm`f?,wjwof=?n`kf`hal{!#wf`kmjrvfpsqlwf`wjlmbssbqfmwozbp#tfoo#bpvmw$/#$VB.qfplovwjlmlsfqbwjlmpwfofujpjlmwqbmpobwfgTbpkjmdwlmmbujdbwlq-#>#tjmglt-jnsqfppjlm%ow8aq%dw8ojwfqbwvqfslsvobwjlmad`lolq>! fpsf`jbooz#`lmwfmw>!sqlgv`wjlmmftpofwwfqsqlsfqwjfpgfejmjwjlmofbgfqpkjsWf`kmloldzSbqojbnfmw`lnsbqjplmvo#`obpp>!-jmgf{Le+!`lm`ovpjlmgjp`vppjlm`lnslmfmwpajloldj`boQfulovwjlm\\\\`lmwbjmfqvmgfqpwllgmlp`qjsw=?sfqnjppjlmfb`k#lwkfqbwnlpskfqf#lmel`vp>!?elqn#jg>!sql`fppjmdwkjp-ubovfdfmfqbwjlm@lmefqfm`fpvapfrvfmwtfoo.hmltmubqjbwjlmpqfsvwbwjlmskfmlnfmlmgjp`jsojmfoldl-smd!#+gl`vnfmw/alvmgbqjfpf{sqfppjlmpfwwofnfmwAb`hdqlvmglvw#le#wkffmwfqsqjpf+!kwwsp9!#vmfp`bsf+!sbpptlqg!#gfnl`qbwj`?b#kqfe>!,tqbssfq!=\\tnfnafqpkjsojmdvjpwj`s{8sbggjmdskjolplskzbppjpwbm`fvmjufqpjwzeb`jojwjfpqf`ldmjyfgsqfefqfm`fje#+wzsflenbjmwbjmfgul`bavobqzkzslwkfpjp-pvanjw+*8%bns8maps8bmmlwbwjlmafkjmg#wkfElvmgbwjlmsvaojpkfq!bppvnswjlmjmwqlgv`fg`lqqvswjlmp`jfmwjpwpf{soj`jwozjmpwfbg#legjnfmpjlmp#lm@oj`h>!`lmpjgfqfggfsbqwnfmwl``vsbwjlmpllm#bewfqjmufpwnfmwsqlmlvm`fgjgfmwjejfgf{sfqjnfmwNbmbdfnfmwdfldqbskj`!#kfjdkw>!ojmh#qfo>!-qfsob`f+,gfsqfppjlm`lmefqfm`fsvmjpknfmwfojnjmbwfgqfpjpwbm`fbgbswbwjlmlsslpjwjlmtfoo#hmltmpvssofnfmwgfwfqnjmfgk2#`obpp>!3s{8nbqdjmnf`kbmj`bopwbwjpwj`p`fofaqbwfgDlufqmnfmw\\t\\tGvqjmd#wgfufolsfqpbqwjej`jbofrvjubofmwlqjdjmbwfg@lnnjppjlmbwwb`knfmw?psbm#jg>!wkfqf#tfqfMfgfqobmgpafzlmg#wkfqfdjpwfqfgilvqmbojpweqfrvfmwozboo#le#wkfobmd>!fm!#?,pwzof=\\x0E\\tbaplovwf8#pvsslqwjmdf{wqfnfoz#nbjmpwqfbn?,pwqlmd=#slsvobqjwzfnsolznfmw?,wbaof=\\x0E\\t#`lopsbm>!?,elqn=\\t##`lmufqpjlmbalvw#wkf#?,s=?,gju=jmwfdqbwfg!#obmd>!fmSlqwvdvfpfpvapwjwvwfjmgjujgvbojnslppjaofnvowjnfgjbbonlpw#boos{#plojg# bsbqw#eqlnpvaif`w#wljm#Fmdojpk`qjwj`jyfgf{`fsw#elqdvjgfojmfplqjdjmboozqfnbqhbaofwkf#pf`lmgk1#`obpp>!?b#wjwof>!+jm`ovgjmdsbqbnfwfqpsqlkjajwfg>#!kwws9,,gj`wjlmbqzsfq`fswjlmqfulovwjlmelvmgbwjlms{8kfjdkw9pv``fppevopvsslqwfqpnjoofmmjvnkjp#ebwkfqwkf#%rvlw8ml.qfsfbw8`lnnfq`jbojmgvpwqjbofm`lvqbdfgbnlvmw#le#vmleej`jbofeej`jfm`zQfefqfm`fp`llqgjmbwfgjp`objnfqf{sfgjwjlmgfufolsjmd`bo`vobwfgpjnsojejfgofdjwjnbwfpvapwqjmd+3!#`obpp>!`lnsofwfozjoovpwqbwfejuf#zfbqpjmpwqvnfmwSvaojpkjmd2!#`obpp>!spz`kloldz`lmejgfm`fmvnafq#le#bapfm`f#leel`vpfg#lmiljmfg#wkfpwqv`wvqfpsqfujlvpoz=?,jeqbnf=lm`f#bdbjmavw#qbwkfqjnnjdqbmwple#`lvqpf/b#dqlvs#leOjwfqbwvqfVmojhf#wkf?,b=%maps8\\tevm`wjlm#jw#tbp#wkf@lmufmwjlmbvwlnlajofSqlwfpwbmwbddqfppjufbewfq#wkf#Pjnjobqoz/!#,=?,gju=`loof`wjlm\\x0E\\tevm`wjlmujpjajojwzwkf#vpf#leulovmwffqpbwwqb`wjlmvmgfq#wkf#wkqfbwfmfg)?\\\"X@GBWBXjnslqwbm`fjm#dfmfqbowkf#obwwfq?,elqn=\\t?,-jmgf{Le+$j#>#38#j#?gjeefqfm`fgfulwfg#wlwqbgjwjlmppfbq`k#elqvowjnbwfozwlvqmbnfmwbwwqjavwfppl.`boofg#~\\t?,pwzof=fubovbwjlmfnskbpjyfgb``fppjaof?,pf`wjlm=pv``fppjlmbolmd#tjwkNfbmtkjof/jmgvpwqjfp?,b=?aq#,=kbp#af`lnfbpsf`wp#leWfofujpjlmpveej`jfmwabphfwabooalwk#pjgfp`lmwjmvjmdbm#bqwj`of?jnd#bow>!bgufmwvqfpkjp#nlwkfqnbm`kfpwfqsqjm`jsofpsbqwj`vobq`lnnfmwbqzfeef`wp#legf`jgfg#wl!=?pwqlmd=svaojpkfqpIlvqmbo#legjeej`vowzeb`jojwbwfb``fswbaofpwzof-`pp!\\nevm`wjlm#jmmlubwjlm=@lszqjdkwpjwvbwjlmptlvog#kbufavpjmfppfpGj`wjlmbqzpwbwfnfmwplewfm#vpfgsfqpjpwfmwjm#Ibmvbqz`lnsqjpjmd?,wjwof=\\t\\ngjsolnbwj``lmwbjmjmdsfqelqnjmdf{wfmpjlmpnbz#mlw#af`lm`fsw#le#lm`oj`h>!Jw#jp#boplejmbm`jbo#nbhjmd#wkfOv{fnalvqdbggjwjlmbobqf#`boofgfmdbdfg#jm!p`qjsw!*8avw#jw#tbpfof`wqlmj`lmpvanjw>!\\t?\\\"..#Fmg#fof`wqj`boleej`jboozpvddfpwjlmwls#le#wkfvmojhf#wkfBvpwqbojbmLqjdjmboozqfefqfm`fp\\t?,kfbg=\\x0E\\tqf`ldmjpfgjmjwjbojyfojnjwfg#wlBof{bmgqjbqfwjqfnfmwBgufmwvqfpelvq#zfbqp\\t\\t%ow8\\\"..#jm`qfbpjmdgf`lqbwjlmk0#`obpp>!lqjdjmp#lelaojdbwjlmqfdvobwjlm`obppjejfg+evm`wjlm+bgubmwbdfpafjmd#wkf#kjpwlqjbmp?abpf#kqfeqfsfbwfgoztjoojmd#wl`lnsbqbaofgfpjdmbwfgmlnjmbwjlmevm`wjlmbojmpjgf#wkfqfufobwjlmfmg#le#wkfp#elq#wkf#bvwklqjyfgqfevpfg#wlwbhf#sob`fbvwlmlnlvp`lnsqlnjpfslojwj`bo#qfpwbvqbmwwtl#le#wkfEfaqvbqz#1rvbojwz#leptelaif`w-vmgfqpwbmgmfbqoz#bootqjwwfm#azjmwfqujftp!#tjgwk>!2tjwkgqbtboeolbw9ofewjp#vpvbooz`bmgjgbwfpmftpsbsfqpnzpwfqjlvpGfsbqwnfmwafpw#hmltmsbqojbnfmwpvssqfppfg`lmufmjfmwqfnfnafqfggjeefqfmw#pzpwfnbwj`kbp#ofg#wlsqlsbdbmgb`lmwqloofgjmeovfm`fp`fqfnlmjbosql`objnfgSqlwf`wjlmoj#`obpp>!P`jfmwjej``obpp>!ml.wqbgfnbqhpnlqf#wkbm#tjgfpsqfbgOjafqbwjlmwllh#sob`fgbz#le#wkfbp#olmd#bpjnsqjplmfgBggjwjlmbo\\t?kfbg=\\t?nObalqbwlqzMlufnafq#1f{`fswjlmpJmgvpwqjboubqjfwz#leeolbw9#ofeGvqjmd#wkfbppfppnfmwkbuf#affm#gfbop#tjwkPwbwjpwj`pl``vqqfm`f,vo=?,gju=`ofbqej{!=wkf#svaoj`nbmz#zfbqptkj`k#tfqflufq#wjnf/pzmlmznlvp`lmwfmw!=\\tsqfpvnbaozkjp#ebnjozvpfqBdfmw-vmf{sf`wfgjm`ovgjmd#`kboofmdfgb#njmlqjwzvmgfejmfg!afolmdp#wlwbhfm#eqlnjm#L`wlafqslpjwjlm9#pbjg#wl#afqfojdjlvp#Efgfqbwjlm#qltpsbm>!lmoz#b#eftnfbmw#wkbwofg#wl#wkf..=\\x0E\\t?gju#?ejfogpfw=Bq`kajpkls#`obpp>!mlafjmd#vpfgbssqlb`kfpsqjujofdfpmlp`qjsw=\\tqfpvowp#jmnbz#af#wkfFbpwfq#fddnf`kbmjpnpqfbplmbaofSlsvobwjlm@loof`wjlmpfof`wfg!=mlp`qjsw=\\x0E,jmgf{-sksbqqjubo#le.ippgh$**8nbmbdfg#wljm`lnsofwf`bpvbowjfp`lnsofwjlm@kqjpwjbmpPfswfnafq#bqjwknfwj`sql`fgvqfpnjdkw#kbufSqlgv`wjlmjw#bssfbqpSkjolplskzeqjfmgpkjsofbgjmd#wldjujmd#wkfwltbqg#wkfdvbqbmwffggl`vnfmwfg`lolq9 333ujgfl#dbnf`lnnjppjlmqfeof`wjmd`kbmdf#wkfbppl`jbwfgpbmp.pfqjelmhfzsqfpp8#sbggjmd9Kf#tbp#wkfvmgfqozjmdwzsj`booz#/#bmg#wkf#pq`Fofnfmwpv``fppjufpjm`f#wkf#pklvog#af#mfwtlqhjmdb``lvmwjmdvpf#le#wkfoltfq#wkbmpkltp#wkbw?,psbm=\\t\\n\\n`lnsobjmwp`lmwjmvlvprvbmwjwjfpbpwqlmlnfqkf#gjg#mlwgvf#wl#jwpbssojfg#wlbm#bufqbdffeelqwp#wlwkf#evwvqfbwwfnsw#wlWkfqfelqf/`bsbajojwzQfsvaoj`bmtbp#elqnfgFof`wqlmj`hjolnfwfqp`kboofmdfpsvaojpkjmdwkf#elqnfqjmgjdfmlvpgjqf`wjlmppvapjgjbqz`lmpsjqb`zgfwbjop#lebmg#jm#wkfbeelqgbaofpvapwbm`fpqfbplm#elq`lmufmwjlmjwfnwzsf>!baplovwfozpvsslpfgozqfnbjmfg#bbwwqb`wjufwqbufoojmdpfsbqbwfozel`vpfp#lmfofnfmwbqzbssoj`baofelvmg#wkbwpwzofpkffwnbmvp`qjswpwbmgp#elq#ml.qfsfbw+plnfwjnfp@lnnfq`jbojm#Bnfqj`bvmgfqwbhfmrvbqwfq#lebm#f{bnsofsfqplmboozjmgf{-sks<?,avwwlm=\\tsfq`fmwbdfafpw.hmltm`qfbwjmd#b!#gjq>!owqOjfvwfmbmw\\t?gju#jg>!wkfz#tlvogbajojwz#lenbgf#vs#lemlwfg#wkbw`ofbq#wkbwbqdvf#wkbwwl#bmlwkfq`kjogqfm$psvqslpf#leelqnvobwfgabpfg#vslmwkf#qfdjlmpvaif`w#lesbppfmdfqpslppfppjlm-\\t\\tJm#wkf#Afelqf#wkfbewfqtbqgp`vqqfmwoz#b`qlpp#wkfp`jfmwjej``lnnvmjwz-`bsjwbojpnjm#Dfqnbmzqjdkw.tjmdwkf#pzpwfnPl`jfwz#leslojwj`jbmgjqf`wjlm9tfmw#lm#wlqfnlubo#le#Mft#Zlqh#bsbqwnfmwpjmgj`bwjlmgvqjmd#wkfvmofpp#wkfkjpwlqj`bokbg#affm#bgfejmjwjufjmdqfgjfmwbwwfmgbm`f@fmwfq#elqsqlnjmfm`fqfbgzPwbwfpwqbwfdjfpavw#jm#wkfbp#sbqw#le`lmpwjwvwf`objn#wkbwobalqbwlqz`lnsbwjaofebjovqf#le/#pv`k#bp#afdbm#tjwkvpjmd#wkf#wl#sqlujgfefbwvqf#leeqln#tkj`k,!#`obpp>!dfloldj`bopfufqbo#legfojafqbwfjnslqwbmw#klogp#wkbwjmd%rvlw8#ubojdm>wlswkf#Dfqnbmlvwpjgf#lemfdlwjbwfgkjp#`bqffqpfsbqbwjlmjg>!pfbq`ktbp#`boofgwkf#elvqwkqf`qfbwjlmlwkfq#wkbmsqfufmwjlmtkjof#wkf#fgv`bwjlm/`lmmf`wjmdb``vqbwfoztfqf#avjowtbp#hjoofgbdqffnfmwpnv`k#nlqf#Gvf#wl#wkftjgwk9#233plnf#lwkfqHjmdgln#lewkf#fmwjqfebnlvp#elqwl#`lmmf`wlaif`wjufpwkf#Eqfm`ksflsof#bmgefbwvqfg!=jp#pbjg#wlpwqv`wvqboqfefqfmgvnnlpw#lewfmb#pfsbqbwf.=\\t?gju#jg#Leej`jbo#tlqogtjgf-bqjb.obafowkf#sobmfwbmg#jw#tbpg!#ubovf>!ollhjmd#bwafmfej`jbobqf#jm#wkfnlmjwlqjmdqfslqwfgozwkf#nlgfqmtlqhjmd#lmbooltfg#wltkfqf#wkf#jmmlubwjuf?,b=?,gju=plvmgwqb`hpfbq`kElqnwfmg#wl#afjmsvw#jg>!lsfmjmd#leqfpwqj`wfgbglswfg#azbggqfppjmdwkfloldjbmnfwklgp#leubqjbmw#le@kqjpwjbm#ufqz#obqdfbvwlnlwjufaz#ebq#wkfqbmdf#eqlnsvqpvjw#leeloolt#wkfaqlvdkw#wljm#Fmdobmgbdqff#wkbwb``vpfg#le`lnfp#eqlnsqfufmwjmdgju#pwzof>kjp#lq#kfqwqfnfmglvpeqffgln#le`lm`fqmjmd3#2fn#2fn8Abphfwaboo,pwzof-`ppbm#fbqojfqfufm#bewfq,!#wjwof>!-`ln,jmgf{wbhjmd#wkfsjwwpavqdk`lmwfmw!=\\x0E?p`qjsw=+ewvqmfg#lvwkbujmd#wkf?,psbm=\\x0E\\t#l``bpjlmboaf`bvpf#jwpwbqwfg#wlskzpj`booz=?,gju=\\t##`qfbwfg#az@vqqfmwoz/#ad`lolq>!wbajmgf{>!gjpbpwqlvpBmbozwj`p#bopl#kbp#b=?gju#jg>!?,pwzof=\\t?`boofg#elqpjmdfq#bmg-pq`#>#!,,ujlobwjlmpwkjp#sljmw`lmpwbmwozjp#ol`bwfgqf`lqgjmdpg#eqln#wkfmfgfqobmgpslqwvdv/Fp;N;};D;u;F5m4K4]4_7`gfpbqqlool`lnfmwbqjlfgv`b`j/_mpfswjfnaqfqfdjpwqbglgjqf``j/_mvaj`b`j/_msvaoj`jgbgqfpsvfpwbpqfpvowbglpjnslqwbmwfqfpfqubglpbqw/A`volpgjefqfmwfppjdvjfmwfpqfs/Vaoj`bpjwvb`j/_mnjmjpwfqjlsqjub`jgbggjqf`wlqjlelqnb`j/_mslaob`j/_msqfpjgfmwf`lmw\", \"fmjglpb``fplqjlpwf`kmlqbwjsfqplmbofp`bwfdlq/Abfpsf`jbofpgjpslmjaofb`wvbojgbgqfefqfm`jbuboobglojgajaojlwf`bqfob`jlmfp`bofmgbqjlslo/Awj`bpbmwfqjlqfpgl`vnfmwlpmbwvqbofybnbwfqjbofpgjefqfm`jbf`lm/_nj`bwqbmpslqwfqlgq/Advfysbqwj`jsbqfm`vfmwqbmgjp`vpj/_mfpwqv`wvqbevmgb`j/_meqf`vfmwfpsfqnbmfmwfwlwbonfmwf<P<R<Z<Q<R<]=o<X<Y=n<P<R<Z<Y=n<^=l<Y<P=c=n<\\\\<V<Z<Y=k=n<R<]=g<]<R<W<Y<Y<R=k<Y<Q=`=a=n<R<_<R<V<R<_<X<\\\\<S<R=m<W<Y<^=m<Y<_<R=m<\\\\<U=n<Y=k<Y=l<Y<[<P<R<_=o=n=m<\\\\<U=n<\\\\<Z<T<[<Q<T<P<Y<Z<X=o<]=o<X=o=n<s<R<T=m<V<[<X<Y=m=`<^<T<X<Y<R=m<^=c<[<T<Q=o<Z<Q<R=m<^<R<Y<U<W=b<X<Y<U<S<R=l<Q<R<P<Q<R<_<R<X<Y=n<Y<U=m<^<R<T=i<S=l<\\\\<^<\\\\=n<\\\\<V<R<U<P<Y=m=n<R<T<P<Y<Y=n<Z<T<[<Q=`<R<X<Q<R<U<W=o=k=d<Y<S<Y=l<Y<X=k<\\\\=m=n<T=k<\\\\=m=n=`=l<\\\\<]<R=n<Q<R<^=g=i<S=l<\\\\<^<R=m<R<]<R<U<S<R=n<R<P<P<Y<Q<Y<Y=k<T=m<W<Y<Q<R<^=g<Y=o=m<W=o<_<R<V<R<W<R<Q<\\\\<[<\\\\<X=n<\\\\<V<R<Y=n<R<_<X<\\\\<S<R=k=n<T<s<R=m<W<Y=n<\\\\<V<T<Y<Q<R<^=g<U=m=n<R<T=n=n<\\\\<V<T=i=m=l<\\\\<[=o<M<\\\\<Q<V=n=h<R=l=o<P<v<R<_<X<\\\\<V<Q<T<_<T=m<W<R<^<\\\\<Q<\\\\=d<Y<U<Q<\\\\<U=n<T=m<^<R<T<P=m<^=c<[=`<W=b<]<R<U=k<\\\\=m=n<R=m=l<Y<X<T<v=l<R<P<Y<H<R=l=o<P=l=g<Q<V<Y=m=n<\\\\<W<T<S<R<T=m<V=n=g=m=c=k<P<Y=m=c=j=j<Y<Q=n=l=n=l=o<X<\\\\=m<\\\\<P=g=i=l=g<Q<V<\\\\<q<R<^=g<U=k<\\\\=m<R<^<P<Y=m=n<\\\\=h<T<W=`<P<P<\\\\=l=n<\\\\=m=n=l<\\\\<Q<P<Y=m=n<Y=n<Y<V=m=n<Q<\\\\=d<T=i<P<T<Q=o=n<T<P<Y<Q<T<T<P<Y=b=n<Q<R<P<Y=l<_<R=l<R<X=m<\\\\<P<R<P=a=n<R<P=o<V<R<Q=j<Y=m<^<R<Y<P<V<\\\\<V<R<U<|=l=i<T<^5i5j4F4C5e4I4]4_4K5h4]4_4K5h4E4K5h4U4K5i5o4F4D5k4K4D4]4K5i4@4K5h5f5d5i4K5h4Y5d4]4@4C5f4C4E4K5h4U4Z5d4I4Z4K5m4E4K5h5n4_5i4K5h4U4K4D4F4A5i5f5h5i5h5m4K4F5i5h4F5n5e4F4U4C5f5h4K5h4X4U4]4O4B4D4K4]4F4[5d5f4]4U5h5f5o5i4I4]5m4K5n4[5h4D4K4F4K5h5h4V4E4F4]4F5f4D4K5h5j4K4_4K5h4X5f4B5i5j4F4C5f4K5h4U4]4D4K5h5n4Y4Y4K5m5h4K5i4U5h5f5k4K4F4A4C5f4G4K5h5h5k5i4K5h4U5i5h5i5o4F4D4E5f5i5o5j5o4K5h4[5m5h5m5f4C5f5d4I4C4K4]4E4F4K4]5f4B4K5h4Y4A4E4F4_4@5f5h4K5h5d5n4F4U5j4C5i4K5i4C5f5j4E4F4Y5i5f5i4O4]4X5f5m4K5h4\\\\5f5j4U4]4D5f4E4D5d4K4D4E4O5h4U4K4D4K5h4_5m4]5i4X4K5o5h4F4U4K5h5e4K5h4O5d5h4K5h4_5j4E4@4K5i4U4E4K5h4Y4A5m4K5h4C5f5j5o5h5i4K4F4K5h4B4K4Y4K5h5i5h5m4O4U4Z4K4M5o4F4K4D4E4K5h4B5f4]4]4_4K4J5h4K5h5n5h4D4K5h4O4C4D5i5n4K4[4U5i4]4K4_5h5i5j4[5n4E4K5h5o4F4D4K5h4]4@5h4K4X4F4]5o4K5h5n4C5i5f4U4[5f5opAzWbdMbnf+-isd!#bow>!2s{#plojg# -dje!#bow>!wqbmpsbqfmwjmelqnbwjlmbssoj`bwjlm!#lm`oj`h>!fpwbaojpkfgbgufqwjpjmd-smd!#bow>!fmujqlmnfmwsfqelqnbm`fbssqlsqjbwf%bns8ngbpk8jnnfgjbwfoz?,pwqlmd=?,qbwkfq#wkbmwfnsfqbwvqfgfufolsnfmw`lnsfwjwjlmsob`fklogfqujpjajojwz9`lszqjdkw!=3!#kfjdkw>!fufm#wklvdkqfsob`fnfmwgfpwjmbwjlm@lqslqbwjlm?vo#`obpp>!Bppl`jbwjlmjmgjujgvbopsfqpsf`wjufpfwWjnflvw+vqo+kwws9,,nbwkfnbwj`pnbqdjm.wls9fufmwvbooz#gfp`qjswjlm*#ml.qfsfbw`loof`wjlmp-ISD\\u007Fwkvna\\u007Fsbqwj`jsbwf,kfbg=?algzeolbw9ofew8?oj#`obpp>!kvmgqfgp#le\\t\\tKltfufq/#`lnslpjwjlm`ofbq9alwk8`llsfqbwjlmtjwkjm#wkf#obafo#elq>!alqgfq.wls9Mft#Yfbobmgqf`lnnfmgfgsklwldqbskzjmwfqfpwjmd%ow8pvs%dw8`lmwqlufqpzMfwkfqobmgpbowfqmbwjufnb{ofmdwk>!ptjwyfqobmgGfufolsnfmwfppfmwjbooz\\t\\tBowklvdk#?,wf{wbqfb=wkvmgfqajqgqfsqfpfmwfg%bns8mgbpk8psf`vobwjlm`lnnvmjwjfpofdjpobwjlmfof`wqlmj`p\\t\\n?gju#jg>!joovpwqbwfgfmdjmffqjmdwfqqjwlqjfpbvwklqjwjfpgjpwqjavwfg5!#kfjdkw>!pbmp.pfqje8`bsbaof#le#gjpbssfbqfgjmwfqb`wjufollhjmd#elqjw#tlvog#afBedkbmjpwbmtbp#`qfbwfgNbwk-eollq+pvqqlvmgjmd`bm#bopl#aflapfqubwjlmnbjmwfmbm`ffm`lvmwfqfg?k1#`obpp>!nlqf#qf`fmwjw#kbp#affmjmubpjlm#le*-dfwWjnf+*evmgbnfmwboGfpsjwf#wkf!=?gju#jg>!jmpsjqbwjlmf{bnjmbwjlmsqfsbqbwjlmf{sobmbwjlm?jmsvw#jg>!?,b=?,psbm=ufqpjlmp#lejmpwqvnfmwpafelqf#wkf##>#$kwws9,,Gfp`qjswjlmqfobwjufoz#-pvapwqjmd+fb`k#le#wkff{sfqjnfmwpjmeovfmwjbojmwfdqbwjlmnbmz#sflsofgvf#wl#wkf#`lnajmbwjlmgl#mlw#kbufNjggof#Fbpw?mlp`qjsw=?`lszqjdkw!#sfqkbsp#wkfjmpwjwvwjlmjm#Gf`fnafqbqqbmdfnfmwnlpw#ebnlvpsfqplmbojwz`qfbwjlm#leojnjwbwjlmpf{`ovpjufozplufqfjdmwz.`lmwfmw!=\\t?wg#`obpp>!vmgfqdqlvmgsbqboofo#wlgl`wqjmf#lel``vsjfg#azwfqnjmloldzQfmbjppbm`fb#mvnafq#lepvsslqw#elqf{solqbwjlmqf`ldmjwjlmsqfgf`fpplq?jnd#pq`>!,?k2#`obpp>!svaoj`bwjlmnbz#bopl#afpsf`jbojyfg?,ejfogpfw=sqldqfppjufnjoojlmp#lepwbwfp#wkbwfmelq`fnfmwbqlvmg#wkf#lmf#bmlwkfq-sbqfmwMlgfbdqj`vowvqfBowfqmbwjufqfpfbq`kfqpwltbqgp#wkfNlpw#le#wkfnbmz#lwkfq#+fpsf`jbooz?wg#tjgwk>!8tjgwk9233&jmgfsfmgfmw?k0#`obpp>!#lm`kbmdf>!*-bgg@obpp+jmwfqb`wjlmLmf#le#wkf#gbvdkwfq#leb``fpplqjfpaqbm`kfp#le\\x0E\\t?gju#jg>!wkf#obqdfpwgf`obqbwjlmqfdvobwjlmpJmelqnbwjlmwqbmpobwjlmgl`vnfmwbqzjm#lqgfq#wl!=\\t?kfbg=\\t?!#kfjdkw>!2b`qlpp#wkf#lqjfmwbwjlm*8?,p`qjsw=jnsofnfmwfg`bm#af#pffmwkfqf#tbp#bgfnlmpwqbwf`lmwbjmfq!=`lmmf`wjlmpwkf#Aqjwjpktbp#tqjwwfm\\\"jnslqwbmw8s{8#nbqdjm.elooltfg#azbajojwz#wl#`lnsoj`bwfggvqjmd#wkf#jnnjdqbwjlmbopl#`boofg?k7#`obpp>!gjpwjm`wjlmqfsob`fg#azdlufqmnfmwpol`bwjlm#lejm#Mlufnafqtkfwkfq#wkf?,s=\\t?,gju=b`rvjpjwjlm`boofg#wkf#sfqpf`vwjlmgfpjdmbwjlmxelmw.pjyf9bssfbqfg#jmjmufpwjdbwff{sfqjfm`fgnlpw#ojhfoztjgfoz#vpfggjp`vppjlmpsqfpfm`f#le#+gl`vnfmw-f{wfmpjufozJw#kbp#affmjw#glfp#mlw`lmwqbqz#wljmkbajwbmwpjnsqlufnfmwp`klobqpkjs`lmpvnswjlmjmpwqv`wjlmelq#f{bnsoflmf#lq#nlqfs{8#sbggjmdwkf#`vqqfmwb#pfqjfp#lebqf#vpvboozqlof#jm#wkfsqfujlvpoz#gfqjubwjufpfujgfm`f#lef{sfqjfm`fp`lolqp`kfnfpwbwfg#wkbw`fqwjej`bwf?,b=?,gju=\\t#pfof`wfg>!kjdk#p`klloqfpslmpf#wl`lnelqwbaofbglswjlm#lewkqff#zfbqpwkf#`lvmwqzjm#Efaqvbqzpl#wkbw#wkfsflsof#tkl#sqlujgfg#az?sbqbn#mbnfbeef`wfg#azjm#wfqnp#lebssljmwnfmwJPL.;;6:.2!tbp#alqm#jmkjpwlqj`bo#qfdbqgfg#bpnfbpvqfnfmwjp#abpfg#lm#bmg#lwkfq#9#evm`wjlm+pjdmjej`bmw`fofaqbwjlmwqbmpnjwwfg,ip,irvfqz-jp#hmltm#bpwkflqfwj`bo#wbajmgf{>!jw#`lvog#af?mlp`qjsw=\\tkbujmd#affm\\x0E\\t?kfbg=\\x0E\\t?#%rvlw8Wkf#`lnsjobwjlmkf#kbg#affmsqlgv`fg#azskjolplskfq`lmpwqv`wfgjmwfmgfg#wlbnlmd#lwkfq`lnsbqfg#wlwl#pbz#wkbwFmdjmffqjmdb#gjeefqfmwqfefqqfg#wlgjeefqfm`fpafojfe#wkbwsklwldqbskpjgfmwjezjmdKjpwlqz#le#Qfsvaoj`#lemf`fppbqjozsqlabajojwzwf`kmj`boozofbujmd#wkfpsf`wb`vobqeqb`wjlm#lefof`wqj`jwzkfbg#le#wkfqfpwbvqbmwpsbqwmfqpkjsfnskbpjp#lmnlpw#qf`fmwpkbqf#tjwk#pbzjmd#wkbwejoofg#tjwkgfpjdmfg#wljw#jp#lewfm!=?,jeqbnf=bp#elooltp9nfqdfg#tjwkwkqlvdk#wkf`lnnfq`jbo#sljmwfg#lvwlsslqwvmjwzujft#le#wkfqfrvjqfnfmwgjujpjlm#lesqldqbnnjmdkf#qf`fjufgpfwJmwfqubo!=?,psbm=?,jm#Mft#Zlqhbggjwjlmbo#`lnsqfppjlm\\t\\t?gju#jg>!jm`lqslqbwf8?,p`qjsw=?bwwb`kFufmwaf`bnf#wkf#!#wbqdfw>!\\\\`bqqjfg#lvwPlnf#le#wkfp`jfm`f#bmgwkf#wjnf#le@lmwbjmfq!=nbjmwbjmjmd@kqjpwlskfqNv`k#le#wkftqjwjmdp#le!#kfjdkw>!1pjyf#le#wkfufqpjlm#le#nj{wvqf#le#afwtffm#wkfF{bnsofp#lefgv`bwjlmbo`lnsfwjwjuf#lmpvanjw>!gjqf`wlq#legjpwjm`wjuf,GWG#[KWNO#qfobwjmd#wlwfmgfm`z#wlsqlujm`f#letkj`k#tlvoggfpsjwf#wkfp`jfmwjej`#ofdjpobwvqf-jmmfqKWNO#boofdbwjlmpBdqj`vowvqftbp#vpfg#jmbssqlb`k#wljmwfoojdfmwzfbqp#obwfq/pbmp.pfqjegfwfqnjmjmdSfqelqnbm`fbssfbqbm`fp/#tkj`k#jp#elvmgbwjlmpbaaqfujbwfgkjdkfq#wkbmp#eqln#wkf#jmgjujgvbo#`lnslpfg#lepvsslpfg#wl`objnp#wkbwbwwqjavwjlmelmw.pjyf92fofnfmwp#leKjpwlqj`bo#kjp#aqlwkfqbw#wkf#wjnfbmmjufqpbqzdlufqmfg#azqfobwfg#wl#vowjnbwfoz#jmmlubwjlmpjw#jp#pwjoo`bm#lmoz#afgfejmjwjlmpwlDNWPwqjmdB#mvnafq#lejnd#`obpp>!Fufmwvbooz/tbp#`kbmdfgl``vqqfg#jmmfjdkalqjmdgjpwjmdvjpktkfm#kf#tbpjmwqlgv`jmdwfqqfpwqjboNbmz#le#wkfbqdvfp#wkbwbm#Bnfqj`bm`lmrvfpw#letjgfpsqfbg#tfqf#hjoofgp`qffm#bmg#Jm#lqgfq#wlf{sf`wfg#wlgfp`fmgbmwpbqf#ol`bwfgofdjpobwjufdfmfqbwjlmp#ab`hdqlvmgnlpw#sflsofzfbqp#bewfqwkfqf#jp#mlwkf#kjdkfpweqfrvfmwoz#wkfz#gl#mlwbqdvfg#wkbwpkltfg#wkbwsqfglnjmbmwwkfloldj`boaz#wkf#wjnf`lmpjgfqjmdpklqw.ojufg?,psbm=?,b=`bm#af#vpfgufqz#ojwwoflmf#le#wkf#kbg#boqfbgzjmwfqsqfwfg`lnnvmj`bwfefbwvqfp#ledlufqmnfmw/?,mlp`qjsw=fmwfqfg#wkf!#kfjdkw>!0Jmgfsfmgfmwslsvobwjlmpobqdf.p`bof-#Bowklvdk#vpfg#jm#wkfgfpwqv`wjlmslppjajojwzpwbqwjmd#jmwtl#lq#nlqff{sqfppjlmppvalqgjmbwfobqdfq#wkbmkjpwlqz#bmg?,lswjlm=\\x0E\\t@lmwjmfmwbofojnjmbwjmdtjoo#mlw#afsqb`wj`f#lejm#eqlmw#lepjwf#le#wkffmpvqf#wkbwwl#`qfbwf#bnjppjppjssjslwfmwjboozlvwpwbmgjmdafwwfq#wkbmtkbw#jp#mltpjwvbwfg#jmnfwb#mbnf>!WqbgjwjlmbopvddfpwjlmpWqbmpobwjlmwkf#elqn#lebwnlpskfqj`jgfloldj`bofmwfqsqjpfp`bo`vobwjmdfbpw#le#wkfqfnmbmwp#lesovdjmpsbdf,jmgf{-sks<qfnbjmfg#jmwqbmpelqnfgKf#tbp#bopltbp#boqfbgzpwbwjpwj`bojm#ebulq#leNjmjpwqz#lenlufnfmw#leelqnvobwjlmjp#qfrvjqfg?ojmh#qfo>!Wkjp#jp#wkf#?b#kqfe>!,slsvobqjyfgjmuloufg#jmbqf#vpfg#wlbmg#pfufqbonbgf#az#wkfpffnp#wl#afojhfoz#wkbwSbofpwjmjbmmbnfg#bewfqjw#kbg#affmnlpw#`lnnlmwl#qfefq#wlavw#wkjp#jp`lmpf`vwjufwfnslqbqjozJm#dfmfqbo/`lmufmwjlmpwbhfp#sob`fpvagjujpjlmwfqqjwlqjbolsfqbwjlmbosfqnbmfmwoztbp#obqdfozlvwaqfbh#lejm#wkf#sbpwelooltjmd#b#{nomp9ld>!=?b#`obpp>!`obpp>!wf{w@lmufqpjlm#nbz#af#vpfgnbmveb`wvqfbewfq#afjmd`ofbqej{!=\\trvfpwjlm#letbp#fof`wfgwl#af`lnf#baf`bvpf#le#plnf#sflsofjmpsjqfg#azpv``fppevo#b#wjnf#tkfmnlqf#`lnnlmbnlmdpw#wkfbm#leej`jbotjgwk9233&8wf`kmloldz/tbp#bglswfgwl#hffs#wkfpfwwofnfmwpojuf#ajqwkpjmgf{-kwno!@lmmf`wj`vwbppjdmfg#wl%bns8wjnfp8b``lvmw#elqbojdm>qjdkwwkf#`lnsbmzbotbzp#affmqfwvqmfg#wljmuloufnfmwAf`bvpf#wkfwkjp#sfqjlg!#mbnf>!r!#`lmejmfg#wlb#qfpvow#leubovf>!!#,=jp#b`wvboozFmujqlmnfmw\\x0E\\t?,kfbg=\\x0E\\t@lmufqpfoz/=\\t?gju#jg>!3!#tjgwk>!2jp#sqlabaozkbuf#af`lnf`lmwqloojmdwkf#sqlaofn`jwjyfmp#leslojwj`jbmpqfb`kfg#wkfbp#fbqoz#bp9mlmf8#lufq?wbaof#`fooubojgjwz#legjqf`woz#wllmnlvpfgltmtkfqf#jw#jptkfm#jw#tbpnfnafqp#le#qfobwjlm#wlb``lnnlgbwfbolmd#tjwk#Jm#wkf#obwfwkf#Fmdojpkgfoj`jlvp!=wkjp#jp#mlwwkf#sqfpfmwje#wkfz#bqfbmg#ejmboozb#nbwwfq#le\\x0E\\t\\n?,gju=\\x0E\\t\\x0E\\t?,p`qjsw=ebpwfq#wkbmnbilqjwz#lebewfq#tkj`k`lnsbqbwjufwl#nbjmwbjmjnsqluf#wkfbtbqgfg#wkffq!#`obpp>!eqbnfalqgfqqfpwlqbwjlmjm#wkf#pbnfbmbozpjp#lewkfjq#ejqpwGvqjmd#wkf#`lmwjmfmwbopfrvfm`f#leevm`wjlm+*xelmw.pjyf9#tlqh#lm#wkf?,p`qjsw=\\t?afdjmp#tjwkibubp`qjsw9`lmpwjwvfmwtbp#elvmgfgfrvjojaqjvnbppvnf#wkbwjp#djufm#azmffgp#wl#af`llqgjmbwfpwkf#ubqjlvpbqf#sbqw#lelmoz#jm#wkfpf`wjlmp#lejp#b#`lnnlmwkflqjfp#legjp`lufqjfpbppl`jbwjlmfgdf#le#wkfpwqfmdwk#leslpjwjlm#jmsqfpfmw.gbzvmjufqpboozwl#elqn#wkfavw#jmpwfbg`lqslqbwjlmbwwb`kfg#wljp#`lnnlmozqfbplmp#elq#%rvlw8wkf#`bm#af#nbgftbp#baof#wltkj`k#nfbmpavw#gjg#mlwlmNlvpfLufqbp#slppjaoflsfqbwfg#az`lnjmd#eqlnwkf#sqjnbqzbggjwjlm#leelq#pfufqbowqbmpefqqfgb#sfqjlg#lebqf#baof#wlkltfufq/#jwpklvog#kbufnv`k#obqdfq\\t\\n?,p`qjsw=bglswfg#wkfsqlsfqwz#legjqf`wfg#azfeef`wjufoztbp#aqlvdkw`kjogqfm#leSqldqbnnjmdolmdfq#wkbmnbmvp`qjswptbq#bdbjmpwaz#nfbmp#lebmg#nlpw#lepjnjobq#wl#sqlsqjfwbqzlqjdjmbwjmdsqfpwjdjlvpdqbnnbwj`bof{sfqjfm`f-wl#nbhf#wkfJw#tbp#bopljp#elvmg#jm`lnsfwjwlqpjm#wkf#V-P-qfsob`f#wkfaqlvdkw#wkf`bo`vobwjlmeboo#le#wkfwkf#dfmfqbosqb`wj`boozjm#klmlq#leqfofbpfg#jmqfpjgfmwjbobmg#plnf#lehjmd#le#wkfqfb`wjlm#wl2pw#Fbqo#le`vowvqf#bmgsqjm`jsbooz?,wjwof=\\t##wkfz#`bm#afab`h#wl#wkfplnf#le#kjpf{slpvqf#wlbqf#pjnjobqelqn#le#wkfbggEbulqjwf`jwjyfmpkjssbqw#jm#wkfsflsof#tjwkjm#sqb`wj`fwl#`lmwjmvf%bns8njmvp8bssqlufg#az#wkf#ejqpw#booltfg#wkfbmg#elq#wkfevm`wjlmjmdsobzjmd#wkfplovwjlm#wlkfjdkw>!3!#jm#kjp#allhnlqf#wkbm#belooltp#wkf`qfbwfg#wkfsqfpfm`f#jm%maps8?,wg=mbwjlmbojpwwkf#jgfb#leb#`kbqb`wfqtfqf#elq`fg#`obpp>!awmgbzp#le#wkfefbwvqfg#jmpkltjmd#wkfjmwfqfpw#jmjm#sob`f#lewvqm#le#wkfwkf#kfbg#leOlqg#le#wkfslojwj`boozkbp#jwp#ltmFgv`bwjlmbobssqlubo#leplnf#le#wkffb`k#lwkfq/afkbujlq#lebmg#af`bvpfbmg#bmlwkfqbssfbqfg#lmqf`lqgfg#jmaob`h%rvlw8nbz#jm`ovgfwkf#tlqog$p`bm#ofbg#wlqfefqp#wl#balqgfq>!3!#dlufqmnfmw#tjmmjmd#wkfqfpvowfg#jm#tkjof#wkf#Tbpkjmdwlm/wkf#pvaif`w`jwz#jm#wkf=?,gju=\\x0E\\t\\n\\nqfeof`w#wkfwl#`lnsofwfaf`bnf#nlqfqbgjlb`wjufqfif`wfg#aztjwklvw#bmzkjp#ebwkfq/tkj`k#`lvog`lsz#le#wkfwl#jmgj`bwfb#slojwj`bob``lvmwp#le`lmpwjwvwfptlqhfg#tjwkfq?,b=?,oj=le#kjp#ojefb``lnsbmjfg`ojfmwTjgwksqfufmw#wkfOfdjpobwjufgjeefqfmwozwldfwkfq#jmkbp#pfufqboelq#bmlwkfqwf{w#le#wkfelvmgfg#wkff#tjwk#wkf#jp#vpfg#elq`kbmdfg#wkfvpvbooz#wkfsob`f#tkfqftkfqfbp#wkf=#?b#kqfe>!!=?b#kqfe>!wkfnpfoufp/bowklvdk#kfwkbw#`bm#afwqbgjwjlmboqlof#le#wkfbp#b#qfpvowqfnluf@kjoggfpjdmfg#aztfpw#le#wkfPlnf#sflsofsqlgv`wjlm/pjgf#le#wkfmftpofwwfqpvpfg#az#wkfgltm#wl#wkfb``fswfg#azojuf#jm#wkfbwwfnswp#wllvwpjgf#wkfeqfrvfm`jfpKltfufq/#jmsqldqbnnfqpbw#ofbpw#jmbssql{jnbwfbowklvdk#jwtbp#sbqw#lebmg#ubqjlvpDlufqmlq#lewkf#bqwj`ofwvqmfg#jmwl=?b#kqfe>!,wkf#f`lmlnzjp#wkf#nlpwnlpw#tjgfoztlvog#obwfqbmg#sfqkbspqjpf#wl#wkfl``vqp#tkfmvmgfq#tkj`k`lmgjwjlmp-wkf#tfpwfqmwkflqz#wkbwjp#sqlgv`fgwkf#`jwz#lejm#tkj`k#kfpffm#jm#wkfwkf#`fmwqboavjogjmd#lenbmz#le#kjpbqfb#le#wkfjp#wkf#lmoznlpw#le#wkfnbmz#le#wkfwkf#TfpwfqmWkfqf#jp#mlf{wfmgfg#wlPwbwjpwj`bo`lopsbm>1#\\u007Fpklqw#pwlqzslppjaof#wlwlsloldj`bo`qjwj`bo#leqfslqwfg#wlb#@kqjpwjbmgf`jpjlm#wljp#frvbo#wlsqlaofnp#leWkjp#`bm#afnfq`kbmgjpfelq#nlpw#leml#fujgfm`ffgjwjlmp#lefofnfmwp#jm%rvlw8-#Wkf`ln,jnbdfp,tkj`k#nbhfpwkf#sql`fppqfnbjmp#wkfojwfqbwvqf/jp#b#nfnafqwkf#slsvobqwkf#bm`jfmwsqlaofnp#jmwjnf#le#wkfgfefbwfg#azalgz#le#wkfb#eft#zfbqpnv`k#le#wkfwkf#tlqh#le@bojelqmjb/pfqufg#bp#bdlufqmnfmw-`lm`fswp#lenlufnfmw#jm\\n\\n?gju#jg>!jw!#ubovf>!obmdvbdf#lebp#wkfz#bqfsqlgv`fg#jmjp#wkbw#wkff{sobjm#wkfgju=?,gju=\\tKltfufq#wkfofbg#wl#wkf\\n?b#kqfe>!,tbp#dqbmwfgsflsof#kbuf`lmwjmvbooztbp#pffm#bpbmg#qfobwfgwkf#qlof#lesqlslpfg#azle#wkf#afpwfb`k#lwkfq-@lmpwbmwjmfsflsof#eqlngjbof`wp#lewl#qfujpjlmtbp#qfmbnfgb#plvq`f#lewkf#jmjwjboobvm`kfg#jmsqlujgf#wkfwl#wkf#tfpwtkfqf#wkfqfbmg#pjnjobqafwtffm#wtljp#bopl#wkfFmdojpk#bmg`lmgjwjlmp/wkbw#jw#tbpfmwjwofg#wlwkfnpfoufp-rvbmwjwz#leqbmpsbqfm`zwkf#pbnf#bpwl#iljm#wkf`lvmwqz#bmgwkjp#jp#wkfWkjp#ofg#wlb#pwbwfnfmw`lmwqbpw#wlobpwJmgf{Lewkqlvdk#kjpjp#gfpjdmfgwkf#wfqn#jpjp#sqlujgfgsqlwf`w#wkfmd?,b=?,oj=Wkf#`vqqfmwwkf#pjwf#lepvapwbmwjbof{sfqjfm`f/jm#wkf#Tfpwwkfz#pklvogpolufm(ajmb`lnfmwbqjlpvmjufqpjgbg`lmgj`jlmfpb`wjujgbgfpf{sfqjfm`jbwf`mlold/Absqlgv``j/_msvmwvb`j/_mbsoj`b`j/_m`lmwqbpf/]b`bwfdlq/Abpqfdjpwqbqpfsqlefpjlmbowqbwbnjfmwlqfd/Apwqbwfpf`qfwbq/Absqjm`jsbofpsqlwf``j/_mjnslqwbmwfpjnslqwbm`jbslpjajojgbgjmwfqfpbmwf`qf`jnjfmwlmf`fpjgbgfppvp`qjajqpfbpl`jb`j/_mgjpslmjaofpfubovb`j/_mfpwvgjbmwfpqfpslmpbaofqfplov`j/_mdvbgbobibqbqfdjpwqbglplslqwvmjgbg`lnfq`jbofpelwldqbe/Abbvwlqjgbgfpjmdfmjfq/Abwfofujpj/_m`lnsfwfm`jblsfqb`jlmfpfpwbaof`jglpjnsofnfmwfb`wvbonfmwfmbufdb`j/_m`lmelqnjgbgojmf.kfjdkw9elmw.ebnjoz9!#9#!kwws9,,bssoj`bwjlmpojmh!#kqfe>!psf`jej`booz,,?\\\"X@GBWBX\\tLqdbmjybwjlmgjpwqjavwjlm3s{8#kfjdkw9qfobwjlmpkjsgfuj`f.tjgwk?gju#`obpp>!?obafo#elq>!qfdjpwqbwjlm?,mlp`qjsw=\\t,jmgf{-kwno!tjmglt-lsfm+#\\\"jnslqwbmw8bssoj`bwjlm,jmgfsfmgfm`f,,ttt-dlldoflqdbmjybwjlmbvwl`lnsofwfqfrvjqfnfmwp`lmpfqubwjuf?elqn#mbnf>!jmwfoof`wvbonbqdjm.ofew92;wk#`fmwvqzbm#jnslqwbmwjmpwjwvwjlmpbaaqfujbwjlm?jnd#`obpp>!lqdbmjpbwjlm`jujojybwjlm2:wk#`fmwvqzbq`kjwf`wvqfjm`lqslqbwfg13wk#`fmwvqz.`lmwbjmfq!=nlpw#mlwbaoz,=?,b=?,gju=mlwjej`bwjlm$vmgfejmfg$*Evqwkfqnlqf/afojfuf#wkbwjmmfqKWNO#>#sqjlq#wl#wkfgqbnbwj`boozqfefqqjmd#wlmfdlwjbwjlmpkfbgrvbqwfqpPlvwk#Beqj`bvmpv``fppevoSfmmpzoubmjbBp#b#qfpvow/?kwno#obmd>!%ow8,pvs%dw8gfbojmd#tjwkskjobgfoskjbkjpwlqj`booz*8?,p`qjsw=\\tsbggjmd.wls9f{sfqjnfmwbodfwBwwqjavwfjmpwqv`wjlmpwf`kmloldjfpsbqw#le#wkf#>evm`wjlm+*xpvap`qjswjlmo-gwg!=\\x0E\\t?kwdfldqbskj`bo@lmpwjwvwjlm$/#evm`wjlm+pvsslqwfg#azbdqj`vowvqbo`lmpwqv`wjlmsvaoj`bwjlmpelmw.pjyf9#2b#ubqjfwz#le?gju#pwzof>!Fm`z`olsfgjbjeqbnf#pq`>!gfnlmpwqbwfgb``lnsojpkfgvmjufqpjwjfpGfnldqbskj`p*8?,p`qjsw=?gfgj`bwfg#wlhmltofgdf#lepbwjpeb`wjlmsbqwj`vobqoz?,gju=?,gju=Fmdojpk#+VP*bssfmg@kjog+wqbmpnjppjlmp-#Kltfufq/#jmwfoojdfm`f!#wbajmgf{>!eolbw9qjdkw8@lnnlmtfbowkqbmdjmd#eqlnjm#tkj`k#wkfbw#ofbpw#lmfqfsqlgv`wjlmfm`z`olsfgjb8elmw.pjyf92ivqjpgj`wjlmbw#wkbw#wjnf!=?b#`obpp>!Jm#bggjwjlm/gfp`qjswjlm(`lmufqpbwjlm`lmwb`w#tjwkjp#dfmfqboozq!#`lmwfmw>!qfsqfpfmwjmd%ow8nbwk%dw8sqfpfmwbwjlml``bpjlmbooz?jnd#tjgwk>!mbujdbwjlm!=`lnsfmpbwjlm`kbnsjlmpkjsnfgjb>!boo!#ujlobwjlm#leqfefqfm`f#wlqfwvqm#wqvf8Pwqj`w,,FM!#wqbmpb`wjlmpjmwfqufmwjlmufqjej`bwjlmJmelqnbwjlm#gjeej`vowjfp@kbnsjlmpkjs`bsbajojwjfp?\\\"Xfmgje^..=~\\t?,p`qjsw=\\t@kqjpwjbmjwzelq#f{bnsof/Sqlefppjlmboqfpwqj`wjlmppvddfpw#wkbwtbp#qfofbpfg+pv`k#bp#wkfqfnluf@obpp+vmfnsolznfmwwkf#Bnfqj`bmpwqv`wvqf#le,jmgf{-kwno#svaojpkfg#jmpsbm#`obpp>!!=?b#kqfe>!,jmwqlgv`wjlmafolmdjmd#wl`objnfg#wkbw`lmpfrvfm`fp?nfwb#mbnf>!Dvjgf#wl#wkflufqtkfonjmdbdbjmpw#wkf#`lm`fmwqbwfg/\\t-mlmwlv`k#lapfqubwjlmp?,b=\\t?,gju=\\te#+gl`vnfmw-alqgfq9#2s{#xelmw.pjyf92wqfbwnfmw#le3!#kfjdkw>!2nlgjej`bwjlmJmgfsfmgfm`fgjujgfg#jmwldqfbwfq#wkbmb`kjfufnfmwpfpwbaojpkjmdIbubP`qjsw!#mfufqwkfofpppjdmjej`bm`fAqlbg`bpwjmd=%maps8?,wg=`lmwbjmfq!=\\tpv`k#bp#wkf#jmeovfm`f#leb#sbqwj`vobqpq`>$kwws9,,mbujdbwjlm!#kboe#le#wkf#pvapwbmwjbo#%maps8?,gju=bgubmwbdf#legjp`lufqz#leevmgbnfmwbo#nfwqlslojwbmwkf#lsslpjwf!#{no9obmd>!gfojafqbwfozbojdm>`fmwfqfulovwjlm#lesqfpfqubwjlmjnsqlufnfmwpafdjmmjmd#jmIfpvp#@kqjpwSvaoj`bwjlmpgjpbdqffnfmwwf{w.bojdm9q/#evm`wjlm+*pjnjobqjwjfpalgz=?,kwno=jp#`vqqfmwozboskbafwj`bojp#plnfwjnfpwzsf>!jnbdf,nbmz#le#wkf#eolt9kjggfm8bubjobaof#jmgfp`qjaf#wkff{jpwfm`f#leboo#lufq#wkfwkf#Jmwfqmfw\\n?vo#`obpp>!jmpwboobwjlmmfjdkalqkllgbqnfg#elq`fpqfgv`jmd#wkf`lmwjmvfp#wlMlmfwkfofpp/wfnsfqbwvqfp\\t\\n\\n?b#kqfe>!`olpf#wl#wkff{bnsofp#le#jp#balvw#wkf+pff#afolt*-!#jg>!pfbq`ksqlefppjlmbojp#bubjobaofwkf#leej`jbo\\n\\n?,p`qjsw=\\t\\t\\n\\n?gju#jg>!b``fofqbwjlmwkqlvdk#wkf#Kboo#le#Ebnfgfp`qjswjlmpwqbmpobwjlmpjmwfqefqfm`f#wzsf>$wf{w,qf`fmw#zfbqpjm#wkf#tlqogufqz#slsvobqxab`hdqlvmg9wqbgjwjlmbo#plnf#le#wkf#`lmmf`wfg#wlf{soljwbwjlmfnfqdfm`f#le`lmpwjwvwjlmB#Kjpwlqz#lepjdmjej`bmw#nbmveb`wvqfgf{sf`wbwjlmp=?mlp`qjsw=?`bm#af#elvmgaf`bvpf#wkf#kbp#mlw#affmmfjdkalvqjmdtjwklvw#wkf#bggfg#wl#wkf\\n?oj#`obpp>!jmpwqvnfmwboPlujfw#Vmjlmb`hmltofgdfgtkj`k#`bm#afmbnf#elq#wkfbwwfmwjlm#wlbwwfnswp#wl#gfufolsnfmwpJm#eb`w/#wkf?oj#`obpp>!bjnsoj`bwjlmppvjwbaof#elqnv`k#le#wkf#`lolmjybwjlmsqfpjgfmwjbo`bm`foAvaaof#Jmelqnbwjlmnlpw#le#wkf#jp#gfp`qjafgqfpw#le#wkf#nlqf#lq#ofppjm#PfswfnafqJmwfoojdfm`fpq`>!kwws9,,s{8#kfjdkw9#bubjobaof#wlnbmveb`wvqfqkvnbm#qjdkwpojmh#kqfe>!,bubjobajojwzsqlslqwjlmbolvwpjgf#wkf#bpwqlmlnj`bokvnbm#afjmdpmbnf#le#wkf#bqf#elvmg#jmbqf#abpfg#lmpnboofq#wkbmb#sfqplm#tklf{sbmpjlm#lebqdvjmd#wkbwmlt#hmltm#bpJm#wkf#fbqozjmwfqnfgjbwfgfqjufg#eqlnP`bmgjmbujbm?,b=?,gju=\\x0E\\t`lmpjgfq#wkfbm#fpwjnbwfgwkf#Mbwjlmbo?gju#jg>!sbdqfpvowjmd#jm`lnnjppjlmfgbmboldlvp#wlbqf#qfrvjqfg,vo=\\t?,gju=\\ttbp#abpfg#lmbmg#af`bnf#b%maps8%maps8w!#ubovf>!!#tbp#`bswvqfgml#nlqf#wkbmqfpsf`wjufoz`lmwjmvf#wl#=\\x0E\\t?kfbg=\\x0E\\t?tfqf#`qfbwfgnlqf#dfmfqbojmelqnbwjlm#vpfg#elq#wkfjmgfsfmgfmw#wkf#Jnsfqjbo`lnslmfmw#lewl#wkf#mlqwkjm`ovgf#wkf#@lmpwqv`wjlmpjgf#le#wkf#tlvog#mlw#afelq#jmpwbm`fjmufmwjlm#lenlqf#`lnsof{`loof`wjufozab`hdqlvmg9#wf{w.bojdm9#jwp#lqjdjmbojmwl#b``lvmwwkjp#sql`fppbm#f{wfmpjufkltfufq/#wkfwkfz#bqf#mlwqfif`wfg#wkf`qjwj`jpn#legvqjmd#tkj`ksqlabaoz#wkfwkjp#bqwj`of+evm`wjlm+*xJw#pklvog#afbm#bdqffnfmwb``jgfmwboozgjeefqp#eqlnBq`kjwf`wvqfafwwfq#hmltmbqqbmdfnfmwpjmeovfm`f#lmbwwfmgfg#wkfjgfmwj`bo#wlplvwk#le#wkfsbpp#wkqlvdk{no!#wjwof>!tfjdkw9alog8`qfbwjmd#wkfgjpsobz9mlmfqfsob`fg#wkf?jnd#pq`>!,jkwwsp9,,ttt-Tlqog#Tbq#JJwfpwjnlmjbopelvmg#jm#wkfqfrvjqfg#wl#bmg#wkbw#wkfafwtffm#wkf#tbp#gfpjdmfg`lmpjpwp#le#`lmpjgfqbaozsvaojpkfg#azwkf#obmdvbdf@lmpfqubwjlm`lmpjpwfg#leqfefq#wl#wkfab`h#wl#wkf#`pp!#nfgjb>!Sflsof#eqln#bubjobaof#lmsqlufg#wl#afpvddfpwjlmp!tbp#hmltm#bpubqjfwjfp#leojhfoz#wl#af`lnsqjpfg#lepvsslqw#wkf#kbmgp#le#wkf`lvsofg#tjwk`lmmf`w#bmg#alqgfq9mlmf8sfqelqnbm`fpafelqf#afjmdobwfq#af`bnf`bo`vobwjlmplewfm#`boofgqfpjgfmwp#lenfbmjmd#wkbw=?oj#`obpp>!fujgfm`f#elqf{sobmbwjlmpfmujqlmnfmwp!=?,b=?,gju=tkj`k#booltpJmwqlgv`wjlmgfufolsfg#azb#tjgf#qbmdflm#afkboe#leubojdm>!wls!sqjm`jsof#lebw#wkf#wjnf/?,mlp`qjsw=\\x0Epbjg#wl#kbufjm#wkf#ejqpwtkjof#lwkfqpkzslwkfwj`boskjolplskfqpsltfq#le#wkf`lmwbjmfg#jmsfqelqnfg#azjmbajojwz#wltfqf#tqjwwfmpsbm#pwzof>!jmsvw#mbnf>!wkf#rvfpwjlmjmwfmgfg#elqqfif`wjlm#lejnsojfp#wkbwjmufmwfg#wkfwkf#pwbmgbqgtbp#sqlabaozojmh#afwtffmsqlefpplq#lejmwfqb`wjlmp`kbmdjmd#wkfJmgjbm#L`fbm#`obpp>!obpwtlqhjmd#tjwk$kwws9,,ttt-zfbqp#afelqfWkjp#tbp#wkfqf`qfbwjlmbofmwfqjmd#wkfnfbpvqfnfmwpbm#f{wqfnfozubovf#le#wkfpwbqw#le#wkf\\t?,p`qjsw=\\t\\tbm#feelqw#wljm`qfbpf#wkfwl#wkf#plvwkpsb`jmd>!3!=pveej`jfmwozwkf#Fvqlsfbm`lmufqwfg#wl`ofbqWjnflvwgjg#mlw#kbuf`lmpfrvfmwozelq#wkf#mf{wf{wfmpjlm#lef`lmlnj`#bmgbowklvdk#wkfbqf#sqlgv`fgbmg#tjwk#wkfjmpveej`jfmwdjufm#az#wkfpwbwjmd#wkbwf{sfmgjwvqfp?,psbm=?,b=\\twklvdkw#wkbwlm#wkf#abpjp`foosbggjmd>jnbdf#le#wkfqfwvqmjmd#wljmelqnbwjlm/pfsbqbwfg#azbppbppjmbwfgp!#`lmwfmw>!bvwklqjwz#lemlqwktfpwfqm?,gju=\\t?gju#!=?,gju=\\x0E\\t##`lmpvowbwjlm`lnnvmjwz#lewkf#mbwjlmbojw#pklvog#afsbqwj`jsbmwp#bojdm>!ofewwkf#dqfbwfpwpfof`wjlm#lepvsfqmbwvqbogfsfmgfmw#lmjp#nfmwjlmfgbooltjmd#wkftbp#jmufmwfgb``lnsbmzjmdkjp#sfqplmbobubjobaof#bwpwvgz#le#wkflm#wkf#lwkfqf{f`vwjlm#leKvnbm#Qjdkwpwfqnp#le#wkfbppl`jbwjlmpqfpfbq`k#bmgpv``ffgfg#azgfefbwfg#wkfbmg#eqln#wkfavw#wkfz#bqf`lnnbmgfq#lepwbwf#le#wkfzfbqp#le#bdfwkf#pwvgz#le?vo#`obpp>!psob`f#jm#wkftkfqf#kf#tbp?oj#`obpp>!ewkfqf#bqf#mltkj`k#af`bnfkf#svaojpkfgf{sqfppfg#jmwl#tkj`k#wkf`lnnjppjlmfqelmw.tfjdkw9wfqqjwlqz#lef{wfmpjlmp!=Qlnbm#Fnsjqffrvbo#wl#wkfJm#`lmwqbpw/kltfufq/#bmgjp#wzsj`boozbmg#kjp#tjef+bopl#`boofg=?vo#`obpp>!feef`wjufoz#fuloufg#jmwlpffn#wl#kbuftkj`k#jp#wkfwkfqf#tbp#mlbm#f{`foofmwboo#le#wkfpfgfp`qjafg#azJm#sqb`wj`f/aqlbg`bpwjmd`kbqdfg#tjwkqfeof`wfg#jmpvaif`wfg#wlnjojwbqz#bmgwl#wkf#sljmwf`lmlnj`boozpfwWbqdfwjmdbqf#b`wvboozuj`wlqz#lufq+*8?,p`qjsw=`lmwjmvlvpozqfrvjqfg#elqfulovwjlmbqzbm#feef`wjufmlqwk#le#wkf/#tkj`k#tbp#eqlmw#le#wkflq#lwkfqtjpfplnf#elqn#lekbg#mlw#affmdfmfqbwfg#azjmelqnbwjlm-sfqnjwwfg#wljm`ovgfp#wkfgfufolsnfmw/fmwfqfg#jmwlwkf#sqfujlvp`lmpjpwfmwozbqf#hmltm#bpwkf#ejfog#lewkjp#wzsf#ledjufm#wl#wkfwkf#wjwof#le`lmwbjmp#wkfjmpwbm`fp#lejm#wkf#mlqwkgvf#wl#wkfjqbqf#gfpjdmfg`lqslqbwjlmptbp#wkbw#wkflmf#le#wkfpfnlqf#slsvobqpv``ffgfg#jmpvsslqw#eqlnjm#gjeefqfmwglnjmbwfg#azgfpjdmfg#elqltmfqpkjs#lebmg#slppjaozpwbmgbqgjyfgqfpslmpfWf{wtbp#jmwfmgfgqf`fjufg#wkfbppvnfg#wkbwbqfbp#le#wkfsqjnbqjoz#jmwkf#abpjp#lejm#wkf#pfmpfb``lvmwp#elqgfpwqlzfg#azbw#ofbpw#wtltbp#gf`obqfg`lvog#mlw#afPf`qfwbqz#lebssfbq#wl#afnbqdjm.wls92,]_p(\\u007F_p(',df*xwkqlt#f~8wkf#pwbqw#lewtl#pfsbqbwfobmdvbdf#bmgtkl#kbg#affmlsfqbwjlm#legfbwk#le#wkfqfbo#mvnafqp\\n?ojmh#qfo>!sqlujgfg#wkfwkf#pwlqz#le`lnsfwjwjlmpfmdojpk#+VH*fmdojpk#+VP*<p<R<Q<_<R<W<M=l<S=m<V<T=m=l<S=m<V<T=m=l<S=m<V<R5h4U4]4D5f4E\\nAO\\x05Gx\\bTA\\nzk\\x0BBl\\bQ\\u007F\\bTA\\nzk\\x0BUm\\bQ\\u007F\\bTA\\nzk\\npe\\x05u|\\ti@\\tcT\\bVV\\n\\\\}\\nxS\\tVp\\x05tS\\x05k`\\t[X\\t[X\\x0BHR\\bPv\\bTW\\bUe\\n\\u007Fa\\bQp\\x0B_W\\x0BWs\\nxS\\x0BAz\\n_y\\x04Khjmelqnb`j/_mkfqqbnjfmwbpfof`wq/_mj`lgfp`qjs`j/_m`obpjej`bglp`lml`jnjfmwlsvaoj`b`j/_mqfob`jlmbgbpjmelqn/Mwj`bqfob`jlmbglpgfsbqwbnfmwlwqbabibglqfpgjqf`wbnfmwfbzvmwbnjfmwlnfq`bglOjaqf`lmw/M`wfmlpkbajwb`jlmfp`vnsojnjfmwlqfpwbvqbmwfpgjpslpj`j/_m`lmpf`vfm`jbfof`wq/_mj`bbsoj`b`jlmfpgfp`lmf`wbgljmpwbob`j/_mqfbojyb`j/_mvwjojyb`j/_mfm`j`olsfgjbfmefqnfgbgfpjmpwqvnfmwlpf{sfqjfm`jbpjmpwjwv`j/_msbqwj`vobqfppva`bwfdlqjb=n<R<W=`<V<R<L<R=m=m<T<T=l<\\\\<]<R=n=g<]<R<W=`=d<Y<S=l<R=m=n<R<P<R<Z<Y=n<Y<X=l=o<_<T=i=m<W=o=k<\\\\<Y=m<Y<U=k<\\\\=m<^=m<Y<_<X<\\\\<L<R=m=m<T=c<p<R=m<V<^<Y<X=l=o<_<T<Y<_<R=l<R<X<\\\\<^<R<S=l<R=m<X<\\\\<Q<Q=g=i<X<R<W<Z<Q=g<T<P<Y<Q<Q<R<p<R=m<V<^=g=l=o<]<W<Y<U<p<R=m<V<^<\\\\=m=n=l<\\\\<Q=g<Q<T=k<Y<_<R=l<\\\\<]<R=n<Y<X<R<W<Z<Y<Q=o=m<W=o<_<T=n<Y<S<Y=l=`<r<X<Q<\\\\<V<R<S<R=n<R<P=o=l<\\\\<]<R=n=o<\\\\<S=l<Y<W=c<^<R<R<]=e<Y<R<X<Q<R<_<R=m<^<R<Y<_<R=m=n<\\\\=n=`<T<X=l=o<_<R<U=h<R=l=o<P<Y=i<R=l<R=d<R<S=l<R=n<T<^=m=m=g<W<V<\\\\<V<\\\\<Z<X=g<U<^<W<\\\\=m=n<T<_=l=o<S<S=g<^<P<Y=m=n<Y=l<\\\\<]<R=n<\\\\=m<V<\\\\<[<\\\\<W<S<Y=l<^=g<U<X<Y<W<\\\\=n=`<X<Y<Q=`<_<T<S<Y=l<T<R<X<]<T<[<Q<Y=m<R=m<Q<R<^<Y<P<R<P<Y<Q=n<V=o<S<T=n=`<X<R<W<Z<Q<\\\\=l<\\\\<P<V<\\\\=i<Q<\\\\=k<\\\\<W<R<L<\\\\<]<R=n<\\\\<N<R<W=`<V<R=m<R<^=m<Y<P<^=n<R=l<R<U<Q<\\\\=k<\\\\<W<\\\\=m<S<T=m<R<V=m<W=o<Z<]=g=m<T=m=n<Y<P<S<Y=k<\\\\=n<T<Q<R<^<R<_<R<S<R<P<R=e<T=m<\\\\<U=n<R<^<S<R=k<Y<P=o<S<R<P<R=e=`<X<R<W<Z<Q<R=m=m=g<W<V<T<]=g=m=n=l<R<X<\\\\<Q<Q=g<Y<P<Q<R<_<T<Y<S=l<R<Y<V=n<M<Y<U=k<\\\\=m<P<R<X<Y<W<T=n<\\\\<V<R<_<R<R<Q<W<\\\\<U<Q<_<R=l<R<X<Y<^<Y=l=m<T=c=m=n=l<\\\\<Q<Y=h<T<W=`<P=g=o=l<R<^<Q=c=l<\\\\<[<Q=g=i<T=m<V<\\\\=n=`<Q<Y<X<Y<W=b=c<Q<^<\\\\=l=c<P<Y<Q=`=d<Y<P<Q<R<_<T=i<X<\\\\<Q<Q<R<U<[<Q<\\\\=k<T=n<Q<Y<W=`<[=c=h<R=l=o<P<\\\\<N<Y<S<Y=l=`<P<Y=m=c=j<\\\\<[<\\\\=e<T=n=g<w=o=k=d<T<Y\\x0CHD\\x0CHU\\x0CIl\\x0CHn\\x0CHy\\x0CH\\\\\\x0CHD\\x0CIk\\x0CHi\\x0CHF\\x0CHD\\x0CIk\\x0CHy\\x0CHS\\x0CHC\\x0CHR\\x0CHy\\x0CH\\\\\\x0CIk\\x0CHn\\x0CHi\\x0CHD\\x0CIa\\x0CHC\\x0CHy\\x0CIa\\x0CHC\\x0CHR\\x0CH{\\x0CHR\\x0CHk\\x0CHM\\x0CH@\\x0CHR\\x0CH\\\\\\x0CIk\\x0CHy\\x0CHS\\x0CHT\\x0CIl\\x0CHJ\\x0CHS\\x0CHC\\x0CHR\\x0CHF\\x0CHU\\x0CH^\\x0CIk\\x0CHT\\x0CHS\\x0CHn\\x0CHU\\x0CHA\\x0CHR\\x0CH\\\\\\x0CHH\\x0CHi\\x0CHF\\x0CHD\\x0CIl\\x0CHY\\x0CHR\\x0CH^\\x0CIk\\x0CHT\\x0CIk\\x0CHY\\x0CHR\\x0CHy\\x0CH\\\\\\x0CHH\\x0CIk\\x0CHB\\x0CIk\\x0CH\\\\\\x0CIk\\x0CHU\\x0CIg\\x0CHD\\x0CIk\\x0CHT\\x0CHy\\x0CHH\\x0CIk\\x0CH@\\x0CHU\\x0CIm\\x0CHH\\x0CHT\\x0CHR\\x0CHk\\x0CHs\\x0CHU\\x0CIg\\x0CH{\\x0CHR\\x0CHp\\x0CHR\\x0CHD\\x0CIk\\x0CHB\\x0CHS\\x0CHD\\x0CHs\\x0CHy\\x0CH\\\\\\x0CHH\\x0CHR\\x0CHy\\x0CH\\\\\\x0CHD\\x0CHR\\x0CHe\\x0CHD\\x0CHy\\x0CIk\\x0CHC\\x0CHU\\x0CHR\\x0CHm\\x0CHT\\x0CH@\\x0CHT\\x0CIk\\x0CHA\\x0CHR\\x0CH[\\x0CHR\\x0CHj\\x0CHF\\x0CHy\\x0CIk\\x0CH^\\x0CHS\\x0CHC\\x0CIk\\x0CHZ\\x0CIm\\x0CH\\\\\\x0CIn\\x0CHk\\x0CHT\\x0CHy\\x0CIk\\x0CHt\\x0CHn\\x0CHs\\x0CIk\\x0CHB\\x0CIk\\x0CH\\\\\\x0CIl\\x0CHT\\x0CHy\\x0CHH\\x0CHR\\x0CHB\\x0CIk\\x0CH\\\\\\x0CHR\\x0CH^\\x0CIk\\x0CHy\\x0CH\\\\\\x0CHi\\x0CHK\\x0CHS\\x0CHy\\x0CHi\\x0CHF\\x0CHD\\x0CHR\\x0CHT\\x0CHB\\x0CHR\\x0CHp\\x0CHB\\x0CIm\\x0CHq\\x0CIk\\x0CHy\\x0CHR\\x0CH\\\\\\x0CHO\\x0CHU\\x0CIg\\x0CHH\\x0CHR\\x0CHy\\x0CHM\\x0CHP\\x0CIl\\x0CHC\\x0CHU\\x0CHR\\x0CHn\\x0CHU\\x0CIg\\x0CHs\\x0CH^\\x0CHZ\\x0CH@\\x0CIa\\x0CHJ\\x0CH^\\x0CHS\\x0CHC\\x0CHR\\x0CHp\\x0CIl\\x0CHY\\x0CHD\\x0CHp\\x0CHR\\x0CHH\\x0CHR\\x0CHy\\x0CId\\x0CHT\\x0CIk\\x0CHj\\x0CHF\\x0CHy\\x0CHR\\x0CHY\\x0CHR\\x0CH^\\x0CIl\\x0CHJ\\x0CIk\\x0CHD\\x0CIk\\x0CHF\\x0CIn\\x0CH\\\\\\x0CIl\\x0CHF\\x0CHR\\x0CHD\\x0CIl\\x0CHe\\x0CHT\\x0CHy\\x0CIk\\x0CHU\\x0CIg\\x0CH{\\x0CIl\\x0CH@\\x0CId\\x0CHL\\x0CHy\\x0CHj\\x0CHF\\x0CHy\\x0CIl\\x0CHY\\x0CH\\\\\\x0CIa\\x0CH[\\x0CH{\\x0CHR\\x0CHn\\x0CHY\\x0CHj\\x0CHF\\x0CHy\\x0CIg\\x0CHp\\x0CHS\\x0CH^\\x0CHR\\x0CHp\\x0CHR\\x0CHD\\x0CHR\\x0CHT\\x0CHU\\x0CHB\\x0CHH\\x0CHU\\x0CHB\\x0CIk\\x0CHn\\x0CHe\\x0CHD\\x0CHy\\x0CIl\\x0CHC\\x0CHR\\x0CHU\\x0CIn\\x0CHJ\\x0CH\\\\\\x0CIa\\x0CHp\\x0CHT\\x0CIn\\x0CHv\\x0CIl\\x0CHF\\x0CHT\\x0CHn\\x0CHJ\\x0CHT\\x0CHY\\x0CHR\\x0CH^\\x0CHU\\x0CIg\\x0CHD\\x0CHR\\x0CHU\\x0CIg\\x0CHH\\x0CIl\\x0CHp\\x0CId\\x0CHT\\x0CIk\\x0CHY\\x0CHR\\x0CHF\\x0CHT\\x0CHp\\x0CHD\\x0CHH\\x0CHR\\x0CHD\\x0CIk\\x0CHH\\x0CHR\\x0CHp\\x0CHR\\x0CH\\\\\\x0CIl\\x0CHt\\x0CHR\\x0CHC\\x0CH^\\x0CHp\\x0CHS\\x0CH^\\x0CIk\\x0CHD\\x0CIl\\x0CHv\\x0CIk\\x0CHp\\x0CHR\\x0CHn\\x0CHv\\x0CHF\\x0CHH\\x0CIa\\x0CH\\\\\\x0CH{\\x0CIn\\x0CH{\\x0CH^\\x0CHp\\x0CHR\\x0CHH\\x0CIk\\x0CH@\\x0CHR\\x0CHU\\x0CH\\\\\\x0CHj\\x0CHF\\x0CHD\\x0CIk\\x0CHY\\x0CHR\\x0CHU\\x0CHD\\x0CHk\\x0CHT\\x0CHy\\x0CHR\\x0CHT\\x0CIm\\x0CH@\\x0CHU\\x0CH\\\\\\x0CHU\\x0CHD\\x0CIk\\x0CHk\\x0CHT\\x0CHT\\x0CIk\\x0CHT\\x0CHU\\x0CHS\\x0CHH\\x0CH@\\x0CHM\\x0CHP\\x0CIk\\x0CHt\\x0CHs\\x0CHD\\x0CHR\\x0CHH\\x0CH^\\x0CHR\\x0CHZ\\x0CHF\\x0CHR\\x0CHn\\x0CHv\\x0CHZ\\x0CIa\\x0CH\\\\\\x0CIl\\x0CH@\\x0CHM\\x0CHP\\x0CIl\\x0CHU\\x0CIg\\x0CHH\\x0CIk\\x0CHT\\x0CHR\\x0CHd\\x0CHs\\x0CHZ\\x0CHR\\x0CHC\\x0CHJ\\x0CHT\\x0CHy\\x0CHH\\x0CIl\\x0CHp\\x0CHR\\x0CHH\\x0CIl\\x0CHY\\x0CHR\\x0CH^\\x0CHR\\x0CHU\\x0CHp\\x0CHR\\x0CH\\\\\\x0CHF\\x0CHs\\x0CHD\\x0CHR\\x0CH\\\\\\x0CHz\\x0CHD\\x0CIk\\x0CHT\\x0CHM\\x0CHP\\x0CHy\\x0CHB\\x0CHS\\x0CH^\\x0CHR\\x0CHe\\x0CHT\\x0CHy\\x0CIl\\x0CHy\\x0CIk\\x0CHY\\x0CH^\\x0CH^\\x0CH{\\x0CHH\\x0CHR\\x0CHz\\x0CHR\\x0CHD\\x0CHR\\x0CHi\\x0CH\\\\\\x0CIa\\x0CHI\\x0CHp\\x0CHU\\x0CHR\\x0CHn\\x0CHJ\\x0CIk\\x0CHz\\x0CHR\\x0CHF\\x0CHU\\x0CH^\\x0CIl\\x0CHD\\x0CHS\\x0CHC\\x0CHB\\x0CH@\\x0CHS\\x0CHD\\x0CHR\\x0CH@\\x0CId\\x0CHn\\x0CHy\\x0CHy\\x0CHU\\x0CIl\\x0CHn\\x0CHy\\x0CHU\\x0CHD\\x0CHR\\x0CHJ\\x0CIk\\x0CHH\\x0CHR\\x0CHU\\x0CHB\\x0CH^\\x0CIk\\x0CHy\\x0CHR\\x0CHG\\x0CIl\\x0CHp\\x0CH@\\x0CHy\\x0CHS\\x0CHH\\x0CIm\\x0CH\\\\\\x0CHH\\x0CHB\\x0CHR\\x0CHn\\x0CH{\\x0CHY\\x0CHU\\x0CIl\\x0CHn\\x0CH\\\\\\x0CIg\\x0CHp\\x0CHP\\x0CHB\\x0CHS\\x0CH^\\x0CIl\\x0CHj\\x0CH\\\\\\x0CIg\\x0CHF\\x0CHT\\x0CIk\\x0CHD\\x0CHR\\x0CHC\\x0CHR\\x0CHJ\\x0CHY\\x0CH^\\x0CIk\\x0CHD\\x0CIk\\x0CHz\\x0CHR\\x0CHH\\x0CHR\\x0CHy\\x0CH\\\\\\x0CIl\\x0CH@\\x0CHe\\x0CHD\\x0CHy\\x0CHR\\x0CHp\\x0CHY\\x0CHR\\x0CH@\\x0CHF\\x0CIn\\x0CH\\\\\\x0CHR\\x0CH@\\x0CHM\\x0CHP\\x0CHR\\x0CHT\\x0CI`\\x0CHJ\\x0CHR\\x0CHZ\\x0CIk\\x0CHC\\x0CH\\\\\\x0CHy\\x0CHS\\x0CHC\\x0CIk\\x0CHy\\x0CHU\\x0CHR\\x0CHn\\x0CHi\\x0CHy\\x0CHT\\x0CH\\\\\\x0CH@\\x0CHD\\x0CHR\\x0CHc\\x0CHY\\x0CHU\\x0CHR\\x0CHn\\x0CHT\\x0CIa\\x0CHI\\x0CH^\\x0CHB\\x0CHS\\x0CH^\\x0CIk\\x0CH^\\x0CIk\\x0CHz\\x0CHy\\x0CHY\\x0CHS\\x0CH[\\x0CHC\\x0CHy\\x0CIa\\x0CH\\\\\\x0CHn\\x0CHT\\x0CHB\\x0CIn\\x0CHU\\x0CHI\\x0CHR\\x0CHD\\x0CHR4F4_4F4[5f4U5i4X4K4]5o4E4D5d4K4_4[4E4K5h4Y5m4A4E5i5d4K4Z5f4U4K5h4B4K4Y4E4K5h5i4^5f4C4K5h4U4K5i4E4K5h5o4K4F4D4K5h4]4C5d4C4D4]5j4K5i4@4K5h4C5d5h4E4K5h4U4K5h5i4K5h5i5d5n4U4K5h4U4]4D5f4K5h4_4]5f4U4K5h4@5d4K5h4K5h4\\\\5k4K4D4K5h4A5f4K4E4K5h4A5n5d5n4K5h5o4]5f5i4K5h4U4]4K5n5i4A5m5d4T4E4K5h4G4K5j5f5i4X4K5k4C4E4K5h5i4]4O4E4K5h5n4]4N5j4K5h4X4D4K4D4K5h4A5d4K4]4K5h4@4C5f4C4K5h4O4_4]4E4K5h4U5h5d5i5i4@5i5d4U4E4K5h4]4A5i5j4K5h5j5n4K4[5m5h4_4[5f5j4K5h5o5d5f4F4K5h4C5j5f4K4D4]5o4K4F5k4K5h4]5f4K4Z4F4A5f4K4F5f4D4F5d5n5f4F4K5h4O5d5h5e4K5h4D4]5f4C4K5h5o5h4K5i4K5h4]4K4D4[4K5h4X4B4Y5f4_5f4K4]4K4F4K5h4G4K5h4G4K5h4Y5h4K4E4K5h4A4C5f4G4K5h4^5d4K4]4K5h4B5h5f4@4K5h4@5i5f4U4K5h4U4K5i5k4K5h4@5i4K5h4K5h4_4K4U4E5i4X4K5k4C5k4K5h4]4J5f4_4K5h4C4B5d5h4K5h5m5j5f4E4K5h5o4F4K4D4K5h4C5d4]5f4K5h4C4]5d4_4K4_4F4V4]5n4F4Y4K5i5f5i4K5h4D5j4K4F4K5h4U4T5f5ifmwfqwbjmnfmwvmgfqpwbmgjmd#>#evm`wjlm+*-isd!#tjgwk>!`lmejdvqbwjlm-smd!#tjgwk>!?algz#`obpp>!Nbwk-qbmgln+*`lmwfnslqbqz#Vmjwfg#Pwbwfp`jq`vnpwbm`fp-bssfmg@kjog+lqdbmjybwjlmp?psbm#`obpp>!!=?jnd#pq`>!,gjpwjmdvjpkfgwklvpbmgp#le#`lnnvmj`bwjlm`ofbq!=?,gju=jmufpwjdbwjlmebuj`lm-j`l!#nbqdjm.qjdkw9abpfg#lm#wkf#Nbppb`kvpfwwpwbaof#alqgfq>jmwfqmbwjlmbobopl#hmltm#bpsqlmvm`jbwjlmab`hdqlvmg9 esbggjmd.ofew9Elq#f{bnsof/#njp`foobmflvp%ow8,nbwk%dw8spz`kloldj`bojm#sbqwj`vobqfbq`k!#wzsf>!elqn#nfwklg>!bp#lsslpfg#wlPvsqfnf#@lvqwl``bpjlmbooz#Bggjwjlmbooz/Mlqwk#Bnfqj`bs{8ab`hdqlvmglsslqwvmjwjfpFmwfqwbjmnfmw-wlOltfq@bpf+nbmveb`wvqjmdsqlefppjlmbo#`lnajmfg#tjwkElq#jmpwbm`f/`lmpjpwjmd#le!#nb{ofmdwk>!qfwvqm#ebopf8`lmp`jlvpmfppNfgjwfqqbmfbmf{wqblqgjmbqzbppbppjmbwjlmpvapfrvfmwoz#avwwlm#wzsf>!wkf#mvnafq#lewkf#lqjdjmbo#`lnsqfkfmpjufqfefqp#wl#wkf?,vo=\\t?,gju=\\tskjolplskj`bool`bwjlm-kqfetbp#svaojpkfgPbm#Eqbm`jp`l+evm`wjlm+*x\\t?gju#jg>!nbjmplskjpwj`bwfgnbwkfnbwj`bo#,kfbg=\\x0E\\t?algzpvddfpwp#wkbwgl`vnfmwbwjlm`lm`fmwqbwjlmqfobwjlmpkjspnbz#kbuf#affm+elq#f{bnsof/Wkjp#bqwj`of#jm#plnf#`bpfpsbqwp#le#wkf#gfejmjwjlm#leDqfbw#Aqjwbjm#`foosbggjmd>frvjubofmw#wlsob`fklogfq>!8#elmw.pjyf9#ivpwjej`bwjlmafojfufg#wkbwpveefqfg#eqlnbwwfnswfg#wl#ofbgfq#le#wkf`qjsw!#pq`>!,+evm`wjlm+*#xbqf#bubjobaof\\t\\n?ojmh#qfo>!#pq`>$kwws9,,jmwfqfpwfg#jm`lmufmwjlmbo#!#bow>!!#,=?,bqf#dfmfqboozkbp#bopl#affmnlpw#slsvobq#`lqqfpslmgjmd`qfgjwfg#tjwkwzof>!alqgfq9?,b=?,psbm=?,-dje!#tjgwk>!?jeqbnf#pq`>!wbaof#`obpp>!jmojmf.aol`h8b``lqgjmd#wl#wldfwkfq#tjwkbssql{jnbwfozsbqojbnfmwbqznlqf#bmg#nlqfgjpsobz9mlmf8wqbgjwjlmboozsqfglnjmbmwoz%maps8\\u007F%maps8%maps8?,psbm=#`foopsb`jmd>?jmsvw#mbnf>!lq!#`lmwfmw>!`lmwqlufqpjbosqlsfqwz>!ld9,{.pkl`htbuf.gfnlmpwqbwjlmpvqqlvmgfg#azMfufqwkfofpp/tbp#wkf#ejqpw`lmpjgfqbaof#Bowklvdk#wkf#`loobalqbwjlmpklvog#mlw#afsqlslqwjlm#le?psbm#pwzof>!hmltm#bp#wkf#pklqwoz#bewfqelq#jmpwbm`f/gfp`qjafg#bp#,kfbg=\\t?algz#pwbqwjmd#tjwkjm`qfbpjmdoz#wkf#eb`w#wkbwgjp`vppjlm#lenjggof#le#wkfbm#jmgjujgvbogjeej`vow#wl#sljmw#le#ujftklnlpf{vbojwzb``fswbm`f#le?,psbm=?,gju=nbmveb`wvqfqplqjdjm#le#wkf`lnnlmoz#vpfgjnslqwbm`f#legfmlnjmbwjlmpab`hdqlvmg9# ofmdwk#le#wkfgfwfqnjmbwjlmb#pjdmjej`bmw!#alqgfq>!3!=qfulovwjlmbqzsqjm`jsofp#lejp#`lmpjgfqfgtbp#gfufolsfgJmgl.Fvqlsfbmuvomfqbaof#wlsqlslmfmwp#lebqf#plnfwjnfp`olpfq#wl#wkfMft#Zlqh#@jwz#mbnf>!pfbq`kbwwqjavwfg#wl`lvqpf#le#wkfnbwkfnbwj`jbmaz#wkf#fmg#lebw#wkf#fmg#le!#alqgfq>!3!#wf`kmloldj`bo-qfnluf@obpp+aqbm`k#le#wkffujgfm`f#wkbw\\\"Xfmgje^..=\\x0E\\tJmpwjwvwf#le#jmwl#b#pjmdofqfpsf`wjufoz-bmg#wkfqfelqfsqlsfqwjfp#lejp#ol`bwfg#jmplnf#le#tkj`kWkfqf#jp#bopl`lmwjmvfg#wl#bssfbqbm`f#le#%bns8mgbpk8#gfp`qjafp#wkf`lmpjgfqbwjlmbvwklq#le#wkfjmgfsfmgfmwozfrvjssfg#tjwkglfp#mlw#kbuf?,b=?b#kqfe>!`lmevpfg#tjwk?ojmh#kqfe>!,bw#wkf#bdf#lebssfbq#jm#wkfWkfpf#jm`ovgfqfdbqgofpp#le`lvog#af#vpfg#pwzof>%rvlw8pfufqbo#wjnfpqfsqfpfmw#wkfalgz=\\t?,kwno=wklvdkw#wl#afslsvobwjlm#leslppjajojwjfpsfq`fmwbdf#leb``fpp#wl#wkfbm#bwwfnsw#wlsqlgv`wjlm#leirvfqz,irvfqzwtl#gjeefqfmwafolmd#wl#wkffpwbaojpknfmwqfsob`jmd#wkfgfp`qjswjlm!#gfwfqnjmf#wkfbubjobaof#elqB``lqgjmd#wl#tjgf#qbmdf#le\\n?gju#`obpp>!nlqf#`lnnlmozlqdbmjpbwjlmpevm`wjlmbojwztbp#`lnsofwfg#%bns8ngbpk8#sbqwj`jsbwjlmwkf#`kbqb`wfqbm#bggjwjlmbobssfbqp#wl#afeb`w#wkbw#wkfbm#f{bnsof#lepjdmjej`bmwozlmnlvpflufq>!af`bvpf#wkfz#bpzm`#>#wqvf8sqlaofnp#tjwkpffnp#wl#kbufwkf#qfpvow#le#pq`>!kwws9,,ebnjojbq#tjwkslppfppjlm#leevm`wjlm#+*#xwllh#sob`f#jmbmg#plnfwjnfppvapwbmwjbooz?psbm=?,psbm=jp#lewfm#vpfgjm#bm#bwwfnswdqfbw#gfbo#leFmujqlmnfmwbopv``fppevooz#ujqwvbooz#boo13wk#`fmwvqz/sqlefppjlmbopmf`fppbqz#wl#gfwfqnjmfg#az`lnsbwjajojwzaf`bvpf#jw#jpGj`wjlmbqz#lenlgjej`bwjlmpWkf#elooltjmdnbz#qfefq#wl9@lmpfrvfmwoz/Jmwfqmbwjlmbobowklvdk#plnfwkbw#tlvog#aftlqog$p#ejqpw`obppjejfg#bpalwwln#le#wkf+sbqwj`vobqozbojdm>!ofew!#nlpw#`lnnlmozabpjp#elq#wkfelvmgbwjlm#le`lmwqjavwjlmpslsvobqjwz#le`fmwfq#le#wkfwl#qfgv`f#wkfivqjpgj`wjlmpbssql{jnbwjlm#lmnlvpflvw>!Mft#Wfpwbnfmw`loof`wjlm#le?,psbm=?,b=?,jm#wkf#Vmjwfgejon#gjqf`wlq.pwqj`w-gwg!=kbp#affm#vpfgqfwvqm#wl#wkfbowklvdk#wkjp`kbmdf#jm#wkfpfufqbo#lwkfqavw#wkfqf#bqfvmsqf`fgfmwfgjp#pjnjobq#wlfpsf`jbooz#jmtfjdkw9#alog8jp#`boofg#wkf`lnsvwbwjlmbojmgj`bwf#wkbwqfpwqj`wfg#wl\\n?nfwb#mbnf>!bqf#wzsj`booz`lmeoj`w#tjwkKltfufq/#wkf#Bm#f{bnsof#le`lnsbqfg#tjwkrvbmwjwjfp#leqbwkfq#wkbm#b`lmpwfoobwjlmmf`fppbqz#elqqfslqwfg#wkbwpsf`jej`bwjlmslojwj`bo#bmg%maps8%maps8?qfefqfm`fp#wlwkf#pbnf#zfbqDlufqmnfmw#ledfmfqbwjlm#lekbuf#mlw#affmpfufqbo#zfbqp`lnnjwnfmw#wl\\n\\n?vo#`obpp>!ujpvbojybwjlm2:wk#`fmwvqz/sqb`wjwjlmfqpwkbw#kf#tlvogbmg#`lmwjmvfgl``vsbwjlm#lejp#gfejmfg#bp`fmwqf#le#wkfwkf#bnlvmw#le=?gju#pwzof>!frvjubofmw#legjeefqfmwjbwfaqlvdkw#balvwnbqdjm.ofew9#bvwlnbwj`boozwklvdkw#le#bpPlnf#le#wkfpf\\t?gju#`obpp>!jmsvw#`obpp>!qfsob`fg#tjwkjp#lmf#le#wkffgv`bwjlm#bmgjmeovfm`fg#azqfsvwbwjlm#bp\\t?nfwb#mbnf>!b``lnnlgbwjlm?,gju=\\t?,gju=obqdf#sbqw#leJmpwjwvwf#elqwkf#pl.`boofg#bdbjmpw#wkf#Jm#wkjp#`bpf/tbp#bssljmwfg`objnfg#wl#afKltfufq/#wkjpGfsbqwnfmw#lewkf#qfnbjmjmdfeef`w#lm#wkfsbqwj`vobqoz#gfbo#tjwk#wkf\\t?gju#pwzof>!bonlpw#botbzpbqf#`vqqfmwozf{sqfppjlm#leskjolplskz#leelq#nlqf#wkbm`jujojybwjlmplm#wkf#jpobmgpfof`wfgJmgf{`bm#qfpvow#jm!#ubovf>!!#,=wkf#pwqv`wvqf#,=?,b=?,gju=Nbmz#le#wkfpf`bvpfg#az#wkfle#wkf#Vmjwfgpsbm#`obpp>!n`bm#af#wqb`fgjp#qfobwfg#wlaf`bnf#lmf#lejp#eqfrvfmwozojujmd#jm#wkfwkflqfwj`boozElooltjmd#wkfQfulovwjlmbqzdlufqmnfmw#jmjp#gfwfqnjmfgwkf#slojwj`bojmwqlgv`fg#jmpveej`jfmw#wlgfp`qjswjlm!=pklqw#pwlqjfppfsbqbwjlm#lebp#wl#tkfwkfqhmltm#elq#jwptbp#jmjwjboozgjpsobz9aol`hjp#bm#f{bnsofwkf#sqjm`jsbo`lmpjpwp#le#bqf`ldmjyfg#bp,algz=?,kwno=b#pvapwbmwjboqf`lmpwqv`wfgkfbg#le#pwbwfqfpjpwbm`f#wlvmgfqdqbgvbwfWkfqf#bqf#wtldqbujwbwjlmbobqf#gfp`qjafgjmwfmwjlmboozpfqufg#bp#wkf`obpp>!kfbgfqlsslpjwjlm#wlevmgbnfmwboozglnjmbwfg#wkfbmg#wkf#lwkfqboojbm`f#tjwktbp#elq`fg#wlqfpsf`wjufoz/bmg#slojwj`bojm#pvsslqw#lesflsof#jm#wkf13wk#`fmwvqz-bmg#svaojpkfgolbg@kbqwafbwwl#vmgfqpwbmgnfnafq#pwbwfpfmujqlmnfmwboejqpw#kboe#le`lvmwqjfp#bmgbq`kjwf`wvqboaf#`lmpjgfqfg`kbqb`wfqjyfg`ofbqJmwfqubobvwklqjwbwjufEfgfqbwjlm#letbp#pv``ffgfgbmg#wkfqf#bqfb#`lmpfrvfm`fwkf#Sqfpjgfmwbopl#jm`ovgfgeqff#plewtbqfpv``fppjlm#legfufolsfg#wkftbp#gfpwqlzfgbtbz#eqln#wkf8\\t?,p`qjsw=\\t?bowklvdk#wkfzelooltfg#az#bnlqf#sltfqevoqfpvowfg#jm#bVmjufqpjwz#leKltfufq/#nbmzwkf#sqfpjgfmwKltfufq/#plnfjp#wklvdkw#wlvmwjo#wkf#fmgtbp#bmmlvm`fgbqf#jnslqwbmwbopl#jm`ovgfp=?jmsvw#wzsf>wkf#`fmwfq#le#GL#MLW#BOWFQvpfg#wl#qfefqwkfnfp,<plqw>wkbw#kbg#affmwkf#abpjp#elqkbp#gfufolsfgjm#wkf#pvnnfq`lnsbqbwjufozgfp`qjafg#wkfpv`k#bp#wklpfwkf#qfpvowjmdjp#jnslppjaofubqjlvp#lwkfqPlvwk#Beqj`bmkbuf#wkf#pbnffeef`wjufmfppjm#tkj`k#`bpf8#wf{w.bojdm9pwqv`wvqf#bmg8#ab`hdqlvmg9qfdbqgjmd#wkfpvsslqwfg#wkfjp#bopl#hmltmpwzof>!nbqdjmjm`ovgjmd#wkfabkbpb#Nfobzvmlqph#alhn/Iomlqph#mzmlqphpolufm)M(ajmbjmwfqmb`jlmbo`bojej`b`j/_m`lnvmj`b`j/_m`lmpwqv``j/_m!=?gju#`obpp>!gjpbnajdvbwjlmGlnbjmMbnf$/#$bgnjmjpwqbwjlmpjnvowbmflvpozwqbmpslqwbwjlmJmwfqmbwjlmbo#nbqdjm.alwwln9qfpslmpjajojwz?\\\"Xfmgje^..=\\t?,=?nfwb#mbnf>!jnsofnfmwbwjlmjmeqbpwqv`wvqfqfsqfpfmwbwjlmalqgfq.alwwln9?,kfbg=\\t?algz=>kwws&0B&1E&1E?elqn#nfwklg>!nfwklg>!slpw!#,ebuj`lm-j`l!#~*8\\t?,p`qjsw=\\t-pfwBwwqjavwf+Bgnjmjpwqbwjlm>#mft#Bqqbz+*8?\\\"Xfmgje^..=\\x0E\\tgjpsobz9aol`h8Vmelqwvmbwfoz/!=%maps8?,gju=,ebuj`lm-j`l!=>$pwzofpkffw$#jgfmwjej`bwjlm/#elq#f{bnsof/?oj=?b#kqfe>!,bm#bowfqmbwjufbp#b#qfpvow#lesw!=?,p`qjsw=\\twzsf>!pvanjw!#\\t+evm`wjlm+*#xqf`lnnfmgbwjlmelqn#b`wjlm>!,wqbmpelqnbwjlmqf`lmpwqv`wjlm-pwzof-gjpsobz#B``lqgjmd#wl#kjggfm!#mbnf>!bolmd#tjwk#wkfgl`vnfmw-algz-bssql{jnbwfoz#@lnnvmj`bwjlmpslpw!#b`wjlm>!nfbmjmd#%rvlw8..?\\\"Xfmgje^..=Sqjnf#Njmjpwfq`kbqb`wfqjpwj`?,b=#?b#`obpp>wkf#kjpwlqz#le#lmnlvpflufq>!wkf#dlufqmnfmwkqfe>!kwwsp9,,tbp#lqjdjmbooztbp#jmwqlgv`fg`obppjej`bwjlmqfsqfpfmwbwjufbqf#`lmpjgfqfg?\\\"Xfmgje^..=\\t\\tgfsfmgp#lm#wkfVmjufqpjwz#le#jm#`lmwqbpw#wl#sob`fklogfq>!jm#wkf#`bpf#lejmwfqmbwjlmbo#`lmpwjwvwjlmbopwzof>!alqgfq.9#evm`wjlm+*#xAf`bvpf#le#wkf.pwqj`w-gwg!=\\t?wbaof#`obpp>!b``lnsbmjfg#azb``lvmw#le#wkf?p`qjsw#pq`>!,mbwvqf#le#wkf#wkf#sflsof#jm#jm#bggjwjlm#wlp*8#ip-jg#>#jg!#tjgwk>!233&!qfdbqgjmd#wkf#Qlnbm#@bwkloj`bm#jmgfsfmgfmwelooltjmd#wkf#-dje!#tjgwk>!2wkf#elooltjmd#gjp`qjnjmbwjlmbq`kbfloldj`bosqjnf#njmjpwfq-ip!=?,p`qjsw=`lnajmbwjlm#le#nbqdjmtjgwk>!`qfbwfFofnfmw+t-bwwb`kFufmw+?,b=?,wg=?,wq=pq`>!kwwsp9,,bJm#sbqwj`vobq/#bojdm>!ofew!#@yf`k#Qfsvaoj`Vmjwfg#Hjmdgln`lqqfpslmgfm`f`lm`ovgfg#wkbw-kwno!#wjwof>!+evm`wjlm#+*#x`lnfp#eqln#wkfbssoj`bwjlm#le?psbm#`obpp>!pafojfufg#wl#affnfmw+$p`qjsw$?,b=\\t?,oj=\\t?ojufqz#gjeefqfmw=?psbm#`obpp>!lswjlm#ubovf>!+bopl#hmltm#bp\\n?oj=?b#kqfe>!=?jmsvw#mbnf>!pfsbqbwfg#eqlnqfefqqfg#wl#bp#ubojdm>!wls!=elvmgfq#le#wkfbwwfnswjmd#wl#`bqalm#gjl{jgf\\t\\t?gju#`obpp>!`obpp>!pfbq`k.,algz=\\t?,kwno=lsslqwvmjwz#wl`lnnvmj`bwjlmp?,kfbg=\\x0E\\t?algz#pwzof>!tjgwk9Wj\\rVSmd#Uj\\rWkw`kbmdfp#jm#wkfalqgfq.`lolq9 3!#alqgfq>!3!#?,psbm=?,gju=?tbp#gjp`lufqfg!#wzsf>!wf{w!#*8\\t?,p`qjsw=\\t\\tGfsbqwnfmw#le#f``ofpjbpwj`bowkfqf#kbp#affmqfpvowjmd#eqln?,algz=?,kwno=kbp#mfufq#affmwkf#ejqpw#wjnfjm#qfpslmpf#wlbvwlnbwj`booz#?,gju=\\t\\t?gju#jtbp#`lmpjgfqfgsfq`fmw#le#wkf!#,=?,b=?,gju=`loof`wjlm#le#gfp`fmgfg#eqlnpf`wjlm#le#wkfb``fsw.`kbqpfwwl#af#`lmevpfgnfnafq#le#wkf#sbggjmd.qjdkw9wqbmpobwjlm#lejmwfqsqfwbwjlm#kqfe>$kwws9,,tkfwkfq#lq#mlwWkfqf#bqf#boplwkfqf#bqf#nbmzb#pnboo#mvnafqlwkfq#sbqwp#lejnslppjaof#wl##`obpp>!avwwlmol`bwfg#jm#wkf-#Kltfufq/#wkfbmg#fufmwvboozBw#wkf#fmg#le#af`bvpf#le#jwpqfsqfpfmwp#wkf?elqn#b`wjlm>!#nfwklg>!slpw!jw#jp#slppjaofnlqf#ojhfoz#wlbm#jm`qfbpf#jmkbuf#bopl#affm`lqqfpslmgp#wlbmmlvm`fg#wkbwbojdm>!qjdkw!=nbmz#`lvmwqjfpelq#nbmz#zfbqpfbqojfpw#hmltmaf`bvpf#jw#tbpsw!=?,p`qjsw=\\x0E#ubojdm>!wls!#jmkbajwbmwp#leelooltjmd#zfbq\\x0E\\t?gju#`obpp>!njoojlm#sflsof`lmwqlufqpjbo#`lm`fqmjmd#wkfbqdvf#wkbw#wkfdlufqmnfmw#bmgb#qfefqfm`f#wlwqbmpefqqfg#wlgfp`qjajmd#wkf#pwzof>!`lolq9bowklvdk#wkfqfafpw#hmltm#elqpvanjw!#mbnf>!nvowjsoj`bwjlmnlqf#wkbm#lmf#qf`ldmjwjlm#le@lvm`jo#le#wkffgjwjlm#le#wkf##?nfwb#mbnf>!Fmwfqwbjmnfmw#btbz#eqln#wkf#8nbqdjm.qjdkw9bw#wkf#wjnf#lejmufpwjdbwjlmp`lmmf`wfg#tjwkbmg#nbmz#lwkfqbowklvdk#jw#jpafdjmmjmd#tjwk#?psbm#`obpp>!gfp`fmgbmwp#le?psbm#`obpp>!j#bojdm>!qjdkw!?,kfbg=\\t?algz#bpsf`wp#le#wkfkbp#pjm`f#affmFvqlsfbm#Vmjlmqfnjmjp`fmw#lenlqf#gjeej`vowUj`f#Sqfpjgfmw`lnslpjwjlm#lesbppfg#wkqlvdknlqf#jnslqwbmwelmw.pjyf922s{f{sobmbwjlm#lewkf#`lm`fsw#letqjwwfm#jm#wkf\\n?psbm#`obpp>!jp#lmf#le#wkf#qfpfnaobm`f#wllm#wkf#dqlvmgptkj`k#`lmwbjmpjm`ovgjmd#wkf#gfejmfg#az#wkfsvaoj`bwjlm#lenfbmp#wkbw#wkflvwpjgf#le#wkfpvsslqw#le#wkf?jmsvw#`obpp>!?psbm#`obpp>!w+Nbwk-qbmgln+*nlpw#sqlnjmfmwgfp`qjswjlm#le@lmpwbmwjmlsoftfqf#svaojpkfg?gju#`obpp>!pfbssfbqp#jm#wkf2!#kfjdkw>!2!#nlpw#jnslqwbmwtkj`k#jm`ovgfptkj`k#kbg#affmgfpwqv`wjlm#lewkf#slsvobwjlm\\t\\n?gju#`obpp>!slppjajojwz#leplnfwjnfp#vpfgbssfbq#wl#kbufpv``fpp#le#wkfjmwfmgfg#wl#afsqfpfmw#jm#wkfpwzof>!`ofbq9a\\x0E\\t?,p`qjsw=\\x0E\\t?tbp#elvmgfg#jmjmwfqujft#tjwk\\\\jg!#`lmwfmw>!`bsjwbo#le#wkf\\x0E\\t?ojmh#qfo>!pqfofbpf#le#wkfsljmw#lvw#wkbw{NOKwwsQfrvfpwbmg#pvapfrvfmwpf`lmg#obqdfpwufqz#jnslqwbmwpsf`jej`bwjlmppvqeb`f#le#wkfbssojfg#wl#wkfelqfjdm#sloj`z\\\\pfwGlnbjmMbnffpwbaojpkfg#jmjp#afojfufg#wlJm#bggjwjlm#wlnfbmjmd#le#wkfjp#mbnfg#bewfqwl#sqlwf`w#wkfjp#qfsqfpfmwfgGf`obqbwjlm#lenlqf#feej`jfmw@obppjej`bwjlmlwkfq#elqnp#lekf#qfwvqmfg#wl?psbm#`obpp>!`sfqelqnbm`f#le+evm`wjlm+*#x\\x0Eje#bmg#lmoz#jeqfdjlmp#le#wkfofbgjmd#wl#wkfqfobwjlmp#tjwkVmjwfg#Mbwjlmppwzof>!kfjdkw9lwkfq#wkbm#wkfzsf!#`lmwfmw>!Bppl`jbwjlm#le\\t?,kfbg=\\t?algzol`bwfg#lm#wkfjp#qfefqqfg#wl+jm`ovgjmd#wkf`lm`fmwqbwjlmpwkf#jmgjujgvbobnlmd#wkf#nlpwwkbm#bmz#lwkfq,=\\t?ojmh#qfo>!#qfwvqm#ebopf8wkf#svqslpf#lewkf#bajojwz#wl8`lolq9 eee~\\t-\\t?psbm#`obpp>!wkf#pvaif`w#legfejmjwjlmp#le=\\x0E\\t?ojmh#qfo>!`objn#wkbw#wkfkbuf#gfufolsfg?wbaof#tjgwk>!`fofaqbwjlm#leElooltjmd#wkf#wl#gjpwjmdvjpk?psbm#`obpp>!awbhfp#sob`f#jmvmgfq#wkf#mbnfmlwfg#wkbw#wkf=?\\\"Xfmgje^..=\\tpwzof>!nbqdjm.jmpwfbg#le#wkfjmwqlgv`fg#wkfwkf#sql`fpp#lejm`qfbpjmd#wkfgjeefqfm`fp#jmfpwjnbwfg#wkbwfpsf`jbooz#wkf,gju=?gju#jg>!tbp#fufmwvboozwkqlvdklvw#kjpwkf#gjeefqfm`fplnfwkjmd#wkbwpsbm=?,psbm=?,pjdmjej`bmwoz#=?,p`qjsw=\\x0E\\t\\x0E\\tfmujqlmnfmwbo#wl#sqfufmw#wkfkbuf#affm#vpfgfpsf`jbooz#elqvmgfqpwbmg#wkfjp#fppfmwjbooztfqf#wkf#ejqpwjp#wkf#obqdfpwkbuf#affm#nbgf!#pq`>!kwws9,,jmwfqsqfwfg#bppf`lmg#kboe#le`qloojmd>!ml!#jp#`lnslpfg#leJJ/#Kloz#Qlnbmjp#f{sf`wfg#wlkbuf#wkfjq#ltmgfejmfg#bp#wkfwqbgjwjlmbooz#kbuf#gjeefqfmwbqf#lewfm#vpfgwl#fmpvqf#wkbwbdqffnfmw#tjwk`lmwbjmjmd#wkfbqf#eqfrvfmwozjmelqnbwjlm#lmf{bnsof#jp#wkfqfpvowjmd#jm#b?,b=?,oj=?,vo=#`obpp>!ellwfqbmg#fpsf`jboozwzsf>!avwwlm!#?,psbm=?,psbm=tkj`k#jm`ovgfg=\\t?nfwb#mbnf>!`lmpjgfqfg#wkf`bqqjfg#lvw#azKltfufq/#jw#jpaf`bnf#sbqw#lejm#qfobwjlm#wlslsvobq#jm#wkfwkf#`bsjwbo#letbp#leej`jbooztkj`k#kbp#affmwkf#Kjpwlqz#lebowfqmbwjuf#wlgjeefqfmw#eqlnwl#pvsslqw#wkfpvddfpwfg#wkbwjm#wkf#sql`fpp##?gju#`obpp>!wkf#elvmgbwjlmaf`bvpf#le#kjp`lm`fqmfg#tjwkwkf#vmjufqpjwzlsslpfg#wl#wkfwkf#`lmwf{w#le?psbm#`obpp>!swf{w!#mbnf>!r!\\n\\n?gju#`obpp>!wkf#p`jfmwjej`qfsqfpfmwfg#aznbwkfnbwj`jbmpfof`wfg#az#wkfwkbw#kbuf#affm=?gju#`obpp>!`gju#jg>!kfbgfqjm#sbqwj`vobq/`lmufqwfg#jmwl*8\\t?,p`qjsw=\\t?skjolplskj`bo#pqsphlkqubwphjwj\\rVSmd#Uj\\rWkw<L=o=m=m<V<T<U=l=o=m=m<V<T<Ujmufpwjdb`j/_msbqwj`jsb`j/_m<V<R=n<R=l=g<Y<R<]<W<\\\\=m=n<T<V<R=n<R=l=g<U=k<Y<W<R<^<Y<V=m<T=m=n<Y<P=g<q<R<^<R=m=n<T<V<R=n<R=l=g=i<R<]<W<\\\\=m=n=`<^=l<Y<P<Y<Q<T<V<R=n<R=l<\\\\=c=m<Y<_<R<X<Q=c=m<V<\\\\=k<\\\\=n=`<Q<R<^<R=m=n<T<O<V=l<\\\\<T<Q=g<^<R<S=l<R=m=g<V<R=n<R=l<R<U=m<X<Y<W<\\\\=n=`<S<R<P<R=e=`=b=m=l<Y<X=m=n<^<R<]=l<\\\\<[<R<P=m=n<R=l<R<Q=g=o=k<\\\\=m=n<T<Y=n<Y=k<Y<Q<T<Y<\\u007F<W<\\\\<^<Q<\\\\=c<T=m=n<R=l<T<T=m<T=m=n<Y<P<\\\\=l<Y=d<Y<Q<T=c<M<V<\\\\=k<\\\\=n=`<S<R=a=n<R<P=o=m<W<Y<X=o<Y=n=m<V<\\\\<[<\\\\=n=`=n<R<^<\\\\=l<R<^<V<R<Q<Y=k<Q<R=l<Y=d<Y<Q<T<Y<V<R=n<R=l<R<Y<R=l<_<\\\\<Q<R<^<V<R=n<R=l<R<P<L<Y<V<W<\\\\<P<\\\\4K5h5i5j4F4C5e5i5j4F4C5f4K4F4K5h5i5d4Z5d4U4K5h4D4]4K5i4@4K5h5i5d4K5n4U4K5h4]4_4K4J5h5i4X4K4]5o4K4F4K5h4O4U4Z4K4M4K5h4]5f4K4Z4E4K5h4F4Y5i5f5i4K5h4K4U4Z4K4M4K5h5j4F4K4J4@4K5h4O5h4U4K4D4K5h4F4_4@5f5h4K5h4O5n4_4K5i4K5h4Z4V4[4K4F4K5h5m5f4C5f5d4K5h4F4]4A5f4D4K5h4@4C5f4C4E4K5h4F4U5h5f5i4K5h4O4B4D4K4]4K5h4K5m5h4K5i4K5h4O5m5h4K5i4K5h4F4K4]5f4B4K5h4F5n5j5f4E4K5h4K5h4U4K4D4K5h4B5d4K4[4]4K5h5i4@4F5i4U4K5h4C5f5o5d4]4K5h4_5f4K4A4E4U4D4C4K5h5h5k4K5h4F4]4D5f4E4K5h4]5d4K4D4[4K5h4O4C4D5f4E4K5h4K4B4D4K4]4K5h5i4F4A4C4E4K5h4K4V4K5j5f`vqplq9sljmwfq8?,wjwof=\\t?nfwb#!#kqfe>!kwws9,,!=?psbm#`obpp>!nfnafqp#le#wkf#tjmglt-ol`bwjlmufqwj`bo.bojdm9,b=#\\u007F#?b#kqfe>!?\\\"gl`wzsf#kwno=nfgjb>!p`qffm!#?lswjlm#ubovf>!ebuj`lm-j`l!#,=\\t\\n\\n?gju#`obpp>!`kbqb`wfqjpwj`p!#nfwklg>!dfw!#,algz=\\t?,kwno=\\tpklqw`vw#j`lm!#gl`vnfmw-tqjwf+sbggjmd.alwwln9qfsqfpfmwbwjufppvanjw!#ubovf>!bojdm>!`fmwfq!#wkqlvdklvw#wkf#p`jfm`f#ej`wjlm\\t##?gju#`obpp>!pvanjw!#`obpp>!lmf#le#wkf#nlpw#ubojdm>!wls!=?tbp#fpwbaojpkfg*8\\x0E\\t?,p`qjsw=\\x0E\\tqfwvqm#ebopf8!=*-pwzof-gjpsobzaf`bvpf#le#wkf#gl`vnfmw-`llhjf?elqn#b`wjlm>!,~algzxnbqdjm938Fm`z`olsfgjb#leufqpjlm#le#wkf#-`qfbwfFofnfmw+mbnf!#`lmwfmw>!?,gju=\\t?,gju=\\t\\tbgnjmjpwqbwjuf#?,algz=\\t?,kwno=kjpwlqz#le#wkf#!=?jmsvw#wzsf>!slqwjlm#le#wkf#bp#sbqw#le#wkf#%maps8?b#kqfe>!lwkfq#`lvmwqjfp!=\\t?gju#`obpp>!?,psbm=?,psbm=?Jm#lwkfq#tlqgp/gjpsobz9#aol`h8`lmwqlo#le#wkf#jmwqlgv`wjlm#le,=\\t?nfwb#mbnf>!bp#tfoo#bp#wkf#jm#qf`fmw#zfbqp\\x0E\\t\\n?gju#`obpp>!?,gju=\\t\\n?,gju=\\tjmpsjqfg#az#wkfwkf#fmg#le#wkf#`lnsbwjaof#tjwkaf`bnf#hmltm#bp#pwzof>!nbqdjm9-ip!=?,p`qjsw=?#Jmwfqmbwjlmbo#wkfqf#kbuf#affmDfqnbm#obmdvbdf#pwzof>!`lolq9 @lnnvmjpw#Sbqwz`lmpjpwfmw#tjwkalqgfq>!3!#`foo#nbqdjmkfjdkw>!wkf#nbilqjwz#le!#bojdm>!`fmwfqqfobwfg#wl#wkf#nbmz#gjeefqfmw#Lqwklgl{#@kvq`kpjnjobq#wl#wkf#,=\\t?ojmh#qfo>!ptbp#lmf#le#wkf#vmwjo#kjp#gfbwk~*+*8\\t?,p`qjsw=lwkfq#obmdvbdfp`lnsbqfg#wl#wkfslqwjlmp#le#wkfwkf#Mfwkfqobmgpwkf#nlpw#`lnnlmab`hdqlvmg9vqo+bqdvfg#wkbw#wkfp`qloojmd>!ml!#jm`ovgfg#jm#wkfMlqwk#Bnfqj`bm#wkf#mbnf#le#wkfjmwfqsqfwbwjlmpwkf#wqbgjwjlmbogfufolsnfmw#le#eqfrvfmwoz#vpfgb#`loof`wjlm#leufqz#pjnjobq#wlpvqqlvmgjmd#wkff{bnsof#le#wkjpbojdm>!`fmwfq!=tlvog#kbuf#affmjnbdf\\\\`bswjlm#>bwwb`kfg#wl#wkfpvddfpwjmd#wkbwjm#wkf#elqn#le#jmuloufg#jm#wkfjp#gfqjufg#eqlnmbnfg#bewfq#wkfJmwqlgv`wjlm#wlqfpwqj`wjlmp#lm#pwzof>!tjgwk9#`bm#af#vpfg#wl#wkf#`qfbwjlm#lenlpw#jnslqwbmw#jmelqnbwjlm#bmgqfpvowfg#jm#wkf`loobspf#le#wkfWkjp#nfbmp#wkbwfofnfmwp#le#wkftbp#qfsob`fg#azbmbozpjp#le#wkfjmpsjqbwjlm#elqqfdbqgfg#bp#wkfnlpw#pv``fppevohmltm#bp#%rvlw8b#`lnsqfkfmpjufKjpwlqz#le#wkf#tfqf#`lmpjgfqfgqfwvqmfg#wl#wkfbqf#qfefqqfg#wlVmplvq`fg#jnbdf=\\t\\n?gju#`obpp>!`lmpjpwp#le#wkfpwlsSqlsbdbwjlmjmwfqfpw#jm#wkfbubjobajojwz#lebssfbqp#wl#kbuffof`wqlnbdmfwj`fmbaofPfquj`fp+evm`wjlm#le#wkfJw#jp#jnslqwbmw?,p`qjsw=?,gju=evm`wjlm+*xubq#qfobwjuf#wl#wkfbp#b#qfpvow#le#wkf#slpjwjlm#leElq#f{bnsof/#jm#nfwklg>!slpw!#tbp#elooltfg#az%bns8ngbpk8#wkfwkf#bssoj`bwjlmip!=?,p`qjsw=\\x0E\\tvo=?,gju=?,gju=bewfq#wkf#gfbwktjwk#qfpsf`w#wlpwzof>!sbggjmd9jp#sbqwj`vobqozgjpsobz9jmojmf8#wzsf>!pvanjw!#jp#gjujgfg#jmwl\\bTA\\nzk#+\\x0BBl\\bQ\\u007F*qfpslmpbajojgbgbgnjmjpwqb`j/_mjmwfqmb`jlmbofp`lqqfpslmgjfmwf\\x0CHe\\x0CHF\\x0CHC\\x0CIg\\x0CH{\\x0CHF\\x0CIn\\x0CH\\\\\\x0CIa\\x0CHY\\x0CHU\\x0CHB\\x0CHR\\x0CH\\\\\\x0CIk\\x0CH^\\x0CIg\\x0CH{\\x0CIg\\x0CHn\\x0CHv\\x0CIm\\x0CHD\\x0CHR\\x0CHY\\x0CH^\\x0CIk\\x0CHy\\x0CHS\\x0CHD\\x0CHT\\x0CH\\\\\\x0CHy\\x0CHR\\x0CH\\\\\\x0CHF\\x0CIm\\x0CH^\\x0CHS\\x0CHT\\x0CHz\\x0CIg\\x0CHp\\x0CIk\\x0CHn\\x0CHv\\x0CHR\\x0CHU\\x0CHS\\x0CHc\\x0CHA\\x0CIk\\x0CHp\\x0CIk\\x0CHn\\x0CHZ\\x0CHR\\x0CHB\\x0CHS\\x0CH^\\x0CHU\\x0CHB\\x0CHR\\x0CH\\\\\\x0CIl\\x0CHp\\x0CHR\\x0CH{\\x0CH\\\\\\x0CHO\\x0CH@\\x0CHD\\x0CHR\\x0CHD\\x0CIk\\x0CHy\\x0CIm\\x0CHB\\x0CHR\\x0CH\\\\\\x0CH@\\x0CIa\\x0CH^\\x0CIe\\x0CH{\\x0CHB\\x0CHR\\x0CH^\\x0CHS\\x0CHy\\x0CHB\\x0CHU\\x0CHS\\x0CH^\\x0CHR\\x0CHF\\x0CIo\\x0CH[\\x0CIa\\x0CHL\\x0CH@\\x0CHN\\x0CHP\\x0CHH\\x0CIk\\x0CHA\\x0CHR\\x0CHp\\x0CHF\\x0CHR\\x0CHy\\x0CIa\\x0CH^\\x0CHS\\x0CHy\\x0CHs\\x0CIa\\x0CH\\\\\\x0CIk\\x0CHD\\x0CHz\\x0CHS\\x0CH^\\x0CHR\\x0CHG\\x0CHJ\\x0CI`\\x0CH\\\\\\x0CHR\\x0CHD\\x0CHB\\x0CHR\\x0CHB\\x0CH^\\x0CIk\\x0CHB\\x0CHH\\x0CHJ\\x0CHR\\x0CHD\\x0CH@\\x0CHR\\x0CHp\\x0CHR\\x0CH\\\\\\x0CHY\\x0CHS\\x0CHy\\x0CHR\\x0CHT\\x0CHy\\x0CIa\\x0CHC\\x0CIg\\x0CHn\\x0CHv\\x0CHR\\x0CHU\\x0CHH\\x0CIk\\x0CHF\\x0CHU\\x0CIm\\x0CHm\\x0CHv\\x0CH@\\x0CHH\\x0CHR\\x0CHC\\x0CHR\\x0CHT\\x0CHn\\x0CHY\\x0CHR\\x0CHJ\\x0CHJ\\x0CIk\\x0CHz\\x0CHD\\x0CIk\\x0CHF\\x0CHS\\x0CHw\\x0CH^\\x0CIk\\x0CHY\\x0CHS\\x0CHZ\\x0CIk\\x0CH[\\x0CH\\\\\\x0CHR\\x0CHp\\x0CIa\\x0CHC\\x0CHe\\x0CHH\\x0CIa\\x0CHH\\x0CH\\\\\\x0CHB\\x0CIm\\x0CHn\\x0CH@\\x0CHd\\x0CHJ\\x0CIg\\x0CHD\\x0CIg\\x0CHn\\x0CHe\\x0CHF\\x0CHy\\x0CH\\\\\\x0CHO\\x0CHF\\x0CHN\\x0CHP\\x0CIk\\x0CHn\\x0CHT\\x0CIa\\x0CHI\\x0CHS\\x0CHH\\x0CHG\\x0CHS\\x0CH^\\x0CIa\\x0CHB\\x0CHB\\x0CIm\\x0CHz\\x0CIa\\x0CHC\\x0CHi\\x0CHv\\x0CIa\\x0CHw\\x0CHR\\x0CHw\\x0CIn\\x0CHs\\x0CHH\\x0CIl\\x0CHT\\x0CHn\\x0CH{\\x0CIl\\x0CHH\\x0CHp\\x0CHR\\x0CHc\\x0CH{\\x0CHR\\x0CHY\\x0CHS\\x0CHA\\x0CHR\\x0CH{\\x0CHt\\x0CHO\\x0CIa\\x0CHs\\x0CIk\\x0CHJ\\x0CIn\\x0CHT\\x0CH\\\\\\x0CIk\\x0CHJ\\x0CHS\\x0CHD\\x0CIg\\x0CHn\\x0CHU\\x0CHH\\x0CIa\\x0CHC\\x0CHR\\x0CHT\\x0CIk\\x0CHy\\x0CIa\\x0CHT\\x0CH{\\x0CHR\\x0CHn\\x0CHK\\x0CIl\\x0CHY\\x0CHS\\x0CHZ\\x0CIa\\x0CHY\\x0CH\\\\\\x0CHR\\x0CHH\\x0CIk\\x0CHn\\x0CHJ\\x0CId\\x0CHs\\x0CIa\\x0CHT\\x0CHD\\x0CHy\\x0CIa\\x0CHZ\\x0CHR\\x0CHT\\x0CHR\\x0CHB\\x0CHD\\x0CIk\\x0CHi\\x0CHJ\\x0CHR\\x0CH^\\x0CHH\\x0CH@\\x0CHS\\x0CHp\\x0CH^\\x0CIl\\x0CHF\\x0CIm\\x0CH\\\\\\x0CIn\\x0CH[\\x0CHU\\x0CHS\\x0CHn\\x0CHJ\\x0CIl\\x0CHB\\x0CHS\\x0CHH\\x0CIa\\x0CH\\\\\\x0CHy\\x0CHY\\x0CHS\\x0CHH\\x0CHR\\x0CH\\\\\\x0CIm\\x0CHF\\x0CHC\\x0CIk\\x0CHT\\x0CIa\\x0CHI\\x0CHR\\x0CHD\\x0CHy\\x0CH\\\\\\x0CIg\\x0CHM\\x0CHP\\x0CHB\\x0CIm\\x0CHy\\x0CIa\\x0CHH\\x0CHC\\x0CIg\\x0CHp\\x0CHD\\x0CHR\\x0CHy\\x0CIo\\x0CHF\\x0CHC\\x0CHR\\x0CHF\\x0CIg\\x0CHT\\x0CIa\\x0CHs\\x0CHt\\x0CH\\\\\\x0CIk\\x0CH^\\x0CIn\\x0CHy\\x0CHR\\x0CH\\\\\\x0CIa\\x0CHC\\x0CHY\\x0CHS\\x0CHv\\x0CHR\\x0CH\\\\\\x0CHT\\x0CIn\\x0CHv\\x0CHD\\x0CHR\\x0CHB\\x0CIn\\x0CH^\\x0CIa\\x0CHC\\x0CHJ\\x0CIk\\x0CHz\\x0CIk\\x0CHn\\x0CHU\\x0CHB\\x0CIk\\x0CHZ\\x0CHR\\x0CHT\\x0CIa\\x0CHy\\x0CIn\\x0CH^\\x0CHB\\x0CId\\x0CHn\\x0CHD\\x0CIk\\x0CHH\\x0CId\\x0CHC\\x0CHR\\x0CH\\\\\\x0CHp\\x0CHS\\x0CHT\\x0CHy\\x0CIkqpp({no!#wjwof>!.wzsf!#`lmwfmw>!wjwof!#`lmwfmw>!bw#wkf#pbnf#wjnf-ip!=?,p`qjsw=\\t?!#nfwklg>!slpw!#?,psbm=?,b=?,oj=ufqwj`bo.bojdm9w,irvfqz-njm-ip!=-`oj`h+evm`wjlm+#pwzof>!sbggjmd.~*+*8\\t?,p`qjsw=\\t?,psbm=?b#kqfe>!?b#kqfe>!kwws9,,*8#qfwvqm#ebopf8wf{w.gf`lqbwjlm9#p`qloojmd>!ml!#alqgfq.`loobspf9bppl`jbwfg#tjwk#Abkbpb#JmglmfpjbFmdojpk#obmdvbdf?wf{w#{no9psb`f>-dje!#alqgfq>!3!?,algz=\\t?,kwno=\\tlufqeolt9kjggfm8jnd#pq`>!kwws9,,bggFufmwOjpwfmfqqfpslmpjaof#elq#p-ip!=?,p`qjsw=\\t,ebuj`lm-j`l!#,=lsfqbwjmd#pzpwfn!#pwzof>!tjgwk92wbqdfw>!\\\\aobmh!=Pwbwf#Vmjufqpjwzwf{w.bojdm9ofew8\\tgl`vnfmw-tqjwf+/#jm`ovgjmd#wkf#bqlvmg#wkf#tlqog*8\\x0E\\t?,p`qjsw=\\x0E\\t?!#pwzof>!kfjdkw98lufqeolt9kjggfmnlqf#jmelqnbwjlmbm#jmwfqmbwjlmbob#nfnafq#le#wkf#lmf#le#wkf#ejqpw`bm#af#elvmg#jm#?,gju=\\t\\n\\n?,gju=\\tgjpsobz9#mlmf8!=!#,=\\t?ojmh#qfo>!\\t##+evm`wjlm+*#xwkf#26wk#`fmwvqz-sqfufmwGfebvow+obqdf#mvnafq#le#Azybmwjmf#Fnsjqf-isd\\u007Fwkvna\\u007Fofew\\u007Fubpw#nbilqjwz#lenbilqjwz#le#wkf##bojdm>!`fmwfq!=Vmjufqpjwz#Sqfppglnjmbwfg#az#wkfPf`lmg#Tlqog#Tbqgjpwqjavwjlm#le#pwzof>!slpjwjlm9wkf#qfpw#le#wkf#`kbqb`wfqjyfg#az#qfo>!mleloolt!=gfqjufp#eqln#wkfqbwkfq#wkbm#wkf#b#`lnajmbwjlm#lepwzof>!tjgwk9233Fmdojpk.psfbhjmd`lnsvwfq#p`jfm`falqgfq>!3!#bow>!wkf#f{jpwfm`f#leGfnl`qbwj`#Sbqwz!#pwzof>!nbqdjm.Elq#wkjp#qfbplm/-ip!=?,p`qjsw=\\t\\npAzWbdMbnf+p*X3^ip!=?,p`qjsw=\\x0E\\t?-ip!=?,p`qjsw=\\x0E\\tojmh#qfo>!j`lm!#$#bow>$$#`obpp>$elqnbwjlm#le#wkfufqpjlmp#le#wkf#?,b=?,gju=?,gju=,sbdf=\\t##?sbdf=\\t?gju#`obpp>!`lmwaf`bnf#wkf#ejqpwabkbpb#Jmglmfpjbfmdojpk#+pjnsof*\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@=i=l<^<\\\\=n=m<V<T<V<R<P<S<\\\\<Q<T<T=c<^<W=c<Y=n=m=c<x<R<]<\\\\<^<T=n=`=k<Y<W<R<^<Y<V<\\\\=l<\\\\<[<^<T=n<T=c<t<Q=n<Y=l<Q<Y=n<r=n<^<Y=n<T=n=`<Q<\\\\<S=l<T<P<Y=l<T<Q=n<Y=l<Q<Y=n<V<R=n<R=l<R<_<R=m=n=l<\\\\<Q<T=j=g<V<\\\\=k<Y=m=n<^<Y=o=m<W<R<^<T=c=i<S=l<R<]<W<Y<P=g<S<R<W=o=k<T=n=`=c<^<W=c=b=n=m=c<Q<\\\\<T<]<R<W<Y<Y<V<R<P<S<\\\\<Q<T=c<^<Q<T<P<\\\\<Q<T<Y=m=l<Y<X=m=n<^<\\\\4K5h5i5d4K4Z5f4U4K5h4]4J5f4_5f4E4K5h4K5j4F5n4K5h5i4X4K4]5o4K4F5o4K5h4_5f4K4]4K4F4K5h5i5o4F5d4D4E4K5h4_4U5d4C5f4E4K4A4Y4K4J5f4K4F4K5h4U4K5h5i5f4E4K5h4Y5d4F5f4K4F4K5h4K5j4F4]5j4F4K5h4F4Y4K5i5f5i4K5h4I4_5h4K5i5f4K5h5i4X4K4]5o4E4K5h5i4]4J5f4K4Fqlalwp!#`lmwfmw>!?gju#jg>!ellwfq!=wkf#Vmjwfg#Pwbwfp?jnd#pq`>!kwws9,,-isd\\u007Fqjdkw\\u007Fwkvna\\u007F-ip!=?,p`qjsw=\\x0E\\t?ol`bwjlm-sqlwl`loeqbnfalqgfq>!3!#p!#,=\\t?nfwb#mbnf>!?,b=?,gju=?,gju=?elmw.tfjdkw9alog8%rvlw8#bmg#%rvlw8gfsfmgjmd#lm#wkf#nbqdjm938sbggjmd9!#qfo>!mleloolt!#Sqfpjgfmw#le#wkf#wtfmwjfwk#`fmwvqzfujpjlm=\\t##?,sbdfJmwfqmfw#F{solqfqb-bpzm`#>#wqvf8\\x0E\\tjmelqnbwjlm#balvw?gju#jg>!kfbgfq!=!#b`wjlm>!kwws9,,?b#kqfe>!kwwsp9,,?gju#jg>!`lmwfmw!?,gju=\\x0E\\t?,gju=\\x0E\\t?gfqjufg#eqln#wkf#?jnd#pq`>$kwws9,,b``lqgjmd#wl#wkf#\\t?,algz=\\t?,kwno=\\tpwzof>!elmw.pjyf9p`qjsw#obmdvbdf>!Bqjbo/#Kfoufwj`b/?,b=?psbm#`obpp>!?,p`qjsw=?p`qjsw#slojwj`bo#sbqwjfpwg=?,wq=?,wbaof=?kqfe>!kwws9,,ttt-jmwfqsqfwbwjlm#leqfo>!pwzofpkffw!#gl`vnfmw-tqjwf+$?`kbqpfw>!vwe.;!=\\tafdjmmjmd#le#wkf#qfufbofg#wkbw#wkfwfofujpjlm#pfqjfp!#qfo>!mleloolt!=#wbqdfw>!\\\\aobmh!=`objnjmd#wkbw#wkfkwws&0B&1E&1Ettt-nbmjefpwbwjlmp#leSqjnf#Njmjpwfq#lejmeovfm`fg#az#wkf`obpp>!`ofbqej{!=,gju=\\x0E\\t?,gju=\\x0E\\t\\x0E\\twkqff.gjnfmpjlmbo@kvq`k#le#Fmdobmgle#Mlqwk#@bqlojmbprvbqf#hjolnfwqfp-bggFufmwOjpwfmfqgjpwjm`w#eqln#wkf`lnnlmoz#hmltm#bpSklmfwj`#Boskbafwgf`obqfg#wkbw#wkf`lmwqloofg#az#wkfAfmibnjm#Eqbmhojmqlof.sobzjmd#dbnfwkf#Vmjufqpjwz#lejm#Tfpwfqm#Fvqlsfsfqplmbo#`lnsvwfqSqlif`w#Dvwfmafqdqfdbqgofpp#le#wkfkbp#affm#sqlslpfgwldfwkfq#tjwk#wkf=?,oj=?oj#`obpp>!jm#plnf#`lvmwqjfpnjm-ip!=?,p`qjsw=le#wkf#slsvobwjlmleej`jbo#obmdvbdf?jnd#pq`>!jnbdfp,jgfmwjejfg#az#wkfmbwvqbo#qfplvq`fp`obppjej`bwjlm#le`bm#af#`lmpjgfqfgrvbmwvn#nf`kbmj`pMfufqwkfofpp/#wkfnjoojlm#zfbqp#bdl?,algz=\\x0E\\t?,kwno=\\x0E\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@\\twbhf#bgubmwbdf#lebmg/#b``lqgjmd#wlbwwqjavwfg#wl#wkfNj`qlplew#Tjmgltpwkf#ejqpw#`fmwvqzvmgfq#wkf#`lmwqlogju#`obpp>!kfbgfqpklqwoz#bewfq#wkfmlwbaof#f{`fswjlmwfmp#le#wklvpbmgppfufqbo#gjeefqfmwbqlvmg#wkf#tlqog-qfb`kjmd#njojwbqzjplobwfg#eqln#wkflsslpjwjlm#wl#wkfwkf#Log#WfpwbnfmwBeqj`bm#Bnfqj`bmpjmpfqwfg#jmwl#wkfpfsbqbwf#eqln#wkfnfwqlslojwbm#bqfbnbhfp#jw#slppjaofb`hmltofgdfg#wkbwbqdvbaoz#wkf#nlpwwzsf>!wf{w,`pp!=\\twkf#JmwfqmbwjlmboB``lqgjmd#wl#wkf#sf>!wf{w,`pp!#,=\\t`ljm`jgf#tjwk#wkfwtl.wkjqgp#le#wkfGvqjmd#wkjp#wjnf/gvqjmd#wkf#sfqjlgbmmlvm`fg#wkbw#kfwkf#jmwfqmbwjlmbobmg#nlqf#qf`fmwozafojfufg#wkbw#wkf`lmp`jlvpmfpp#bmgelqnfqoz#hmltm#bppvqqlvmgfg#az#wkfejqpw#bssfbqfg#jml``bpjlmbooz#vpfgslpjwjlm9baplovwf8!#wbqdfw>!\\\\aobmh!#slpjwjlm9qfobwjuf8wf{w.bojdm9`fmwfq8ib{,ojap,irvfqz,2-ab`hdqlvmg.`lolq9 wzsf>!bssoj`bwjlm,bmdvbdf!#`lmwfmw>!?nfwb#kwws.frvju>!Sqjub`z#Sloj`z?,b=f+!&0@p`qjsw#pq`>$!#wbqdfw>!\\\\aobmh!=Lm#wkf#lwkfq#kbmg/-isd\\u007Fwkvna\\u007Fqjdkw\\u007F1?,gju=?gju#`obpp>!?gju#pwzof>!eolbw9mjmfwffmwk#`fmwvqz?,algz=\\x0E\\t?,kwno=\\x0E\\t?jnd#pq`>!kwws9,,p8wf{w.bojdm9`fmwfqelmw.tfjdkw9#alog8#B``lqgjmd#wl#wkf#gjeefqfm`f#afwtffm!#eqbnfalqgfq>!3!#!#pwzof>!slpjwjlm9ojmh#kqfe>!kwws9,,kwno7,ollpf-gwg!=\\tgvqjmd#wkjp#sfqjlg?,wg=?,wq=?,wbaof=`olpfoz#qfobwfg#wlelq#wkf#ejqpw#wjnf8elmw.tfjdkw9alog8jmsvw#wzsf>!wf{w!#?psbm#pwzof>!elmw.lmqfbgzpwbwf`kbmdf\\n?gju#`obpp>!`ofbqgl`vnfmw-ol`bwjlm-#Elq#f{bnsof/#wkf#b#tjgf#ubqjfwz#le#?\\\"GL@WZSF#kwno=\\x0E\\t?%maps8%maps8%maps8!=?b#kqfe>!kwws9,,pwzof>!eolbw9ofew8`lm`fqmfg#tjwk#wkf>kwws&0B&1E&1Ettt-jm#slsvobq#`vowvqfwzsf>!wf{w,`pp!#,=jw#jp#slppjaof#wl#Kbqubqg#Vmjufqpjwzwzofpkffw!#kqfe>!,wkf#nbjm#`kbqb`wfqL{elqg#Vmjufqpjwz##mbnf>!hfztlqgp!#`pwzof>!wf{w.bojdm9wkf#Vmjwfg#Hjmdglnefgfqbo#dlufqmnfmw?gju#pwzof>!nbqdjm#gfsfmgjmd#lm#wkf#gfp`qjswjlm#le#wkf?gju#`obpp>!kfbgfq-njm-ip!=?,p`qjsw=gfpwqv`wjlm#le#wkfpojdkwoz#gjeefqfmwjm#b``lqgbm`f#tjwkwfof`lnnvmj`bwjlmpjmgj`bwfp#wkbw#wkfpklqwoz#wkfqfbewfqfpsf`jbooz#jm#wkf#Fvqlsfbm#`lvmwqjfpKltfufq/#wkfqf#bqfpq`>!kwws9,,pwbwj`pvddfpwfg#wkbw#wkf!#pq`>!kwws9,,ttt-b#obqdf#mvnafq#le#Wfof`lnnvmj`bwjlmp!#qfo>!mleloolt!#wKloz#Qlnbm#Fnsfqlqbonlpw#f{`ovpjufoz!#alqgfq>!3!#bow>!Pf`qfwbqz#le#Pwbwf`vonjmbwjmd#jm#wkf@JB#Tlqog#Eb`wallhwkf#nlpw#jnslqwbmwbmmjufqpbqz#le#wkfpwzof>!ab`hdqlvmg.?oj=?fn=?b#kqfe>!,wkf#Bwobmwj`#L`fbmpwqj`woz#psfbhjmd/pklqwoz#afelqf#wkfgjeefqfmw#wzsfp#lewkf#Lwwlnbm#Fnsjqf=?jnd#pq`>!kwws9,,Bm#Jmwqlgv`wjlm#wl`lmpfrvfm`f#le#wkfgfsbqwvqf#eqln#wkf@lmefgfqbwf#Pwbwfpjmgjdfmlvp#sflsofpSql`ffgjmdp#le#wkfjmelqnbwjlm#lm#wkfwkflqjfp#kbuf#affmjmuloufnfmw#jm#wkfgjujgfg#jmwl#wkqffbgib`fmw#`lvmwqjfpjp#qfpslmpjaof#elqgjpplovwjlm#le#wkf`loobalqbwjlm#tjwktjgfoz#qfdbqgfg#bpkjp#`lmwfnslqbqjfpelvmgjmd#nfnafq#leGlnjmj`bm#Qfsvaoj`dfmfqbooz#b``fswfgwkf#slppjajojwz#lebqf#bopl#bubjobaofvmgfq#`lmpwqv`wjlmqfpwlqbwjlm#le#wkfwkf#dfmfqbo#svaoj`jp#bonlpw#fmwjqfozsbppfp#wkqlvdk#wkfkbp#affm#pvddfpwfg`lnsvwfq#bmg#ujgflDfqnbmj`#obmdvbdfp#b``lqgjmd#wl#wkf#gjeefqfmw#eqln#wkfpklqwoz#bewfqtbqgpkqfe>!kwwsp9,,ttt-qf`fmw#gfufolsnfmwAlbqg#le#Gjqf`wlqp?gju#`obpp>!pfbq`k\\u007F#?b#kqfe>!kwws9,,Jm#sbqwj`vobq/#wkfNvowjsof#ellwmlwfplq#lwkfq#pvapwbm`fwklvpbmgp#le#zfbqpwqbmpobwjlm#le#wkf?,gju=\\x0E\\t?,gju=\\x0E\\t\\x0E\\t?b#kqfe>!jmgf{-skstbp#fpwbaojpkfg#jmnjm-ip!=?,p`qjsw=\\tsbqwj`jsbwf#jm#wkfb#pwqlmd#jmeovfm`fpwzof>!nbqdjm.wls9qfsqfpfmwfg#az#wkfdqbgvbwfg#eqln#wkfWqbgjwjlmbooz/#wkfFofnfmw+!p`qjsw!*8Kltfufq/#pjm`f#wkf,gju=\\t?,gju=\\t?gju#ofew8#nbqdjm.ofew9sqlwf`wjlm#bdbjmpw38#ufqwj`bo.bojdm9Vmelqwvmbwfoz/#wkfwzsf>!jnbdf,{.j`lm,gju=\\t?gju#`obpp>!#`obpp>!`ofbqej{!=?gju#`obpp>!ellwfq\\n\\n?,gju=\\t\\n\\n?,gju=\\twkf#nlwjlm#sj`wvqf<}=f<W<_<\\\\=l=m<V<T<]=f<W<_<\\\\=l=m<V<T<H<Y<X<Y=l<\\\\=j<T<T<Q<Y=m<V<R<W=`<V<R=m<R<R<]=e<Y<Q<T<Y=m<R<R<]=e<Y<Q<T=c<S=l<R<_=l<\\\\<P<P=g<r=n<S=l<\\\\<^<T=n=`<]<Y=m<S<W<\\\\=n<Q<R<P<\\\\=n<Y=l<T<\\\\<W=g<S<R<[<^<R<W=c<Y=n<S<R=m<W<Y<X<Q<T<Y=l<\\\\<[<W<T=k<Q=g=i<S=l<R<X=o<V=j<T<T<S=l<R<_=l<\\\\<P<P<\\\\<S<R<W<Q<R=m=n=`=b<Q<\\\\=i<R<X<T=n=m=c<T<[<]=l<\\\\<Q<Q<R<Y<Q<\\\\=m<Y<W<Y<Q<T=c<T<[<P<Y<Q<Y<Q<T=c<V<\\\\=n<Y<_<R=l<T<T<|<W<Y<V=m<\\\\<Q<X=l\\x0CHJ\\x0CIa\\x0CHY\\x0CHR\\x0CH\\\\\\x0CHR\\x0CHB\\x0CId\\x0CHD\\x0CIm\\x0CHi\\x0CH^\\x0CHF\\x0CIa\\x0CH\\\\\\x0CHJ\\x0CHR\\x0CHD\\x0CHA\\x0CHR\\x0CH\\\\\\x0CHH\\x0CIl\\x0CHC\\x0CHi\\x0CHD\\x0CIm\\x0CHJ\\x0CIk\\x0CHZ\\x0CHU\\x0CHS\\x0CHD\\x0CIa\\x0CHJ\\x0CIl\\x0CHk\\x0CHn\\x0CHM\\x0CHS\\x0CHC\\x0CHR\\x0CHJ\\x0CHS\\x0CH^\\x0CIa\\x0CH^\\x0CIl\\x0CHi\\x0CHK\\x0CHS\\x0CHy\\x0CHR\\x0CH\\\\\\x0CHY\\x0CIl\\x0CHM\\x0CHS\\x0CHC\\x0CIg\\x0CHv\\x0CHS\\x0CHs\\x0CIa\\x0CHL\\x0CIk\\x0CHT\\x0CHB\\x0CHR\\x0CHv\\x0CHR\\x0CH\\\\\\x0CHp\\x0CHn\\x0CHy\\x0CIa\\x0CHZ\\x0CHD\\x0CHJ\\x0CIm\\x0CHD\\x0CHS\\x0CHC\\x0CHR\\x0CHF\\x0CIa\\x0CH\\\\\\x0CHC\\x0CIg\\x0CH{\\x0CHi\\x0CHD\\x0CIm\\x0CHT\\x0CHR\\x0CH\\\\\\x0CH}\\x0CHD\\x0CH^\\x0CHR\\x0CHk\\x0CHD\\x0CHF\\x0CHR\\x0CH\\\\\\x0CIa\\x0CHs\\x0CIl\\x0CHZ\\x0CH\\\\\\x0CIa\\x0CHH\\x0CIg\\x0CHn\\x0CH^\\x0CIg\\x0CHy\\x0CHT\\x0CHA\\x0CHR\\x0CHG\\x0CHP\\x0CIa\\x0CH^\\x0CId\\x0CHZ\\x0CHZ\\x0CH\\\\\\x0CIa\\x0CHH\\x0CIk\\x0CHn\\x0CHF\\x0CIa\\x0CH\\\\\\x0CHJ\\x0CIk\\x0CHZ\\x0CHF\\x0CIa\\x0CH^\\x0CIk\\x0CHC\\x0CH\\\\\\x0CHy\\x0CIk\\x0CHn\\x0CHJ\\x0CIa\\x0CH\\\\\\x0CHT\\x0CIa\\x0CHI\\x0CHS\\x0CHH\\x0CHS\\x0CHe\\x0CHH\\x0CIa\\x0CHF\\x0CHR\\x0CHJ\\x0CHe\\x0CHD\\x0CIa\\x0CHU\\x0CIk\\x0CHn\\x0CHv\\x0CHS\\x0CHs\\x0CIa\\x0CHL\\x0CHR\\x0CHC\\x0CHR\\x0CHH\\x0CIa\\x0CH\\\\\\x0CHR\\x0CHp\\x0CIa\\x0CHC\\x0CHR\\x0CHJ\\x0CHR\\x0CHF\\x0CIm\\x0CH\\\\\\x0CHR\\x0CHD\\x0CIk\\x0CHp\\x0CIg\\x0CHM\\x0CHP\\x0CIk\\x0CHn\\x0CHi\\x0CHD\\x0CIm\\x0CHY\\x0CHR\\x0CHJ\\x0CHZ\\x0CIa\\x0CH\\\\\\x0CIk\\x0CHO\\x0CIl\\x0CHZ\\x0CHS\\x0CHy\\x0CIa\\x0CH[\\x0CHR\\x0CHT\\x0CH\\\\\\x0CHy\\x0CHR\\x0CH\\\\\\x0CIl\\x0CHT\\x0CHn\\x0CH{\\x0CIa\\x0CH\\\\\\x0CHU\\x0CHF\\x0CH\\\\\\x0CHS\\x0CHO\\x0CHR\\x0CHB\\x0CH@\\x0CIa\\x0CH\\\\\\x0CHR\\x0CHn\\x0CHM\\x0CH@\\x0CHv\\x0CIa\\x0CHv\\x0CIg\\x0CHn\\x0CHe\\x0CHF\\x0CH^\\x0CH@\\x0CIa\\x0CHK\\x0CHB\\x0CHn\\x0CHH\\x0CIa\\x0CH\\\\\\x0CIl\\x0CHT\\x0CHn\\x0CHF\\x0CH\\\\\\x0CIa\\x0CHy\\x0CHe\\x0CHB\\x0CIa\\x0CHB\\x0CIl\\x0CHJ\\x0CHB\\x0CHR\\x0CHK\\x0CIa\\x0CHC\\x0CHB\\x0CHT\\x0CHU\\x0CHR\\x0CHC\\x0CHH\\x0CHR\\x0CHZ\\x0CH@\\x0CIa\\x0CHJ\\x0CIg\\x0CHn\\x0CHB\\x0CIl\\x0CHM\\x0CHS\\x0CHC\\x0CHR\\x0CHj\\x0CHd\\x0CHF\\x0CIl\\x0CHc\\x0CH^\\x0CHB\\x0CIg\\x0CH@\\x0CHR\\x0CHk\\x0CH^\\x0CHT\\x0CHn\\x0CHz\\x0CIa\\x0CHC\\x0CHR\\x0CHj\\x0CHF\\x0CH\\\\\\x0CIk\\x0CHZ\\x0CHD\\x0CHi\\x0CHD\\x0CIm\\x0CH@\\x0CHn\\x0CHK\\x0CH@\\x0CHR\\x0CHp\\x0CHP\\x0CHR\\x0CH\\\\\\x0CHD\\x0CHY\\x0CIl\\x0CHD\\x0CHH\\x0CHB\\x0CHF\\x0CIa\\x0CH\\\\\\x0CHB\\x0CIm\\x0CHz\\x0CHF\\x0CIa\\x0CH\\\\\\x0CHZ\\x0CIa\\x0CHD\\x0CHF\\x0CH\\\\\\x0CHS\\x0CHY\\x0CHR\\x0CH\\\\\\x0CHD\\x0CIm\\x0CHy\\x0CHT\\x0CHR\\x0CHD\\x0CHT\\x0CHB\\x0CH\\\\\\x0CIa\\x0CHI\\x0CHD\\x0CHj\\x0CHC\\x0CIg\\x0CHp\\x0CHS\\x0CHH\\x0CHT\\x0CIg\\x0CHB\\x0CHY\\x0CHR\\x0CH\\\\4K5h5i4X4K4]5o4K4F4K5h5i5j4F4C5f4K4F4K5h5o5i4D5f5d4F4]4K5h5i4X4K5k4C4K4F4U4C4C4K5h4^5d4K4]4U4C4C4K5h4]4C5d4C4K5h4I4_5h4K5i5f4E4K5h5m5d4F5d4X5d4D4K5h5i4_4K4D5n4K4F4K5h5i4U5h5d5i4K4F4K5h5i4_5h4_5h4K4F4K5h4@4]4K5m5f5o4_4K5h4K4_5h4K5i5f4E4K5h4K4F4Y4K5h4K4Fhfztlqgp!#`lmwfmw>!t0-lqd,2:::,{kwno!=?b#wbqdfw>!\\\\aobmh!#wf{w,kwno8#`kbqpfw>!#wbqdfw>!\\\\aobmh!=?wbaof#`foosbggjmd>!bvwl`lnsofwf>!lee!#wf{w.bojdm9#`fmwfq8wl#obpw#ufqpjlm#az#ab`hdqlvmg.`lolq9# !#kqfe>!kwws9,,ttt-,gju=?,gju=?gju#jg>?b#kqfe>! !#`obpp>!!=?jnd#pq`>!kwws9,,`qjsw!#pq`>!kwws9,,\\t?p`qjsw#obmdvbdf>!,,FM!#!kwws9,,ttt-tfm`lgfVQJ@lnslmfmw+!#kqfe>!ibubp`qjsw9?gju#`obpp>!`lmwfmwgl`vnfmw-tqjwf+$?p`slpjwjlm9#baplovwf8p`qjsw#pq`>!kwws9,,#pwzof>!nbqdjm.wls9-njm-ip!=?,p`qjsw=\\t?,gju=\\t?gju#`obpp>!t0-lqd,2:::,{kwno!#\\t\\x0E\\t?,algz=\\x0E\\t?,kwno=gjpwjm`wjlm#afwtffm,!#wbqdfw>!\\\\aobmh!=?ojmh#kqfe>!kwws9,,fm`lgjmd>!vwe.;!<=\\tt-bggFufmwOjpwfmfq<b`wjlm>!kwws9,,ttt-j`lm!#kqfe>!kwws9,,#pwzof>!ab`hdqlvmg9wzsf>!wf{w,`pp!#,=\\tnfwb#sqlsfqwz>!ld9w?jmsvw#wzsf>!wf{w!##pwzof>!wf{w.bojdm9wkf#gfufolsnfmw#le#wzofpkffw!#wzsf>!wfkwno8#`kbqpfw>vwe.;jp#`lmpjgfqfg#wl#afwbaof#tjgwk>!233&!#Jm#bggjwjlm#wl#wkf#`lmwqjavwfg#wl#wkf#gjeefqfm`fp#afwtffmgfufolsnfmw#le#wkf#Jw#jp#jnslqwbmw#wl#?,p`qjsw=\\t\\t?p`qjsw##pwzof>!elmw.pjyf92=?,psbm=?psbm#jg>daOjaqbqz#le#@lmdqfpp?jnd#pq`>!kwws9,,jnFmdojpk#wqbmpobwjlmB`bgfnz#le#P`jfm`fpgju#pwzof>!gjpsobz9`lmpwqv`wjlm#le#wkf-dfwFofnfmwAzJg+jg*jm#`lmivm`wjlm#tjwkFofnfmw+$p`qjsw$*8#?nfwb#sqlsfqwz>!ld9<}=f<W<_<\\\\=l=m<V<T\\t#wzsf>!wf{w!#mbnf>!=Sqjub`z#Sloj`z?,b=bgnjmjpwfqfg#az#wkffmbaofPjmdofQfrvfpwpwzof>%rvlw8nbqdjm9?,gju=?,gju=?,gju=?=?jnd#pq`>!kwws9,,j#pwzof>%rvlw8eolbw9qfefqqfg#wl#bp#wkf#wlwbo#slsvobwjlm#lejm#Tbpkjmdwlm/#G-@-#pwzof>!ab`hdqlvmg.bnlmd#lwkfq#wkjmdp/lqdbmjybwjlm#le#wkfsbqwj`jsbwfg#jm#wkfwkf#jmwqlgv`wjlm#lejgfmwjejfg#tjwk#wkfej`wjlmbo#`kbqb`wfq#L{elqg#Vmjufqpjwz#njpvmgfqpwbmgjmd#leWkfqf#bqf/#kltfufq/pwzofpkffw!#kqfe>!,@lovnajb#Vmjufqpjwzf{sbmgfg#wl#jm`ovgfvpvbooz#qfefqqfg#wljmgj`bwjmd#wkbw#wkfkbuf#pvddfpwfg#wkbwbeejojbwfg#tjwk#wkf`lqqfobwjlm#afwtffmmvnafq#le#gjeefqfmw=?,wg=?,wq=?,wbaof=Qfsvaoj`#le#Jqfobmg\\t?,p`qjsw=\\t?p`qjsw#vmgfq#wkf#jmeovfm`f`lmwqjavwjlm#wl#wkfLeej`jbo#tfapjwf#lekfbgrvbqwfqp#le#wkf`fmwfqfg#bqlvmg#wkfjnsoj`bwjlmp#le#wkfkbuf#affm#gfufolsfgEfgfqbo#Qfsvaoj`#leaf`bnf#jm`qfbpjmdoz`lmwjmvbwjlm#le#wkfMlwf/#kltfufq/#wkbwpjnjobq#wl#wkbw#le#`bsbajojwjfp#le#wkfb``lqgbm`f#tjwk#wkfsbqwj`jsbmwp#jm#wkfevqwkfq#gfufolsnfmwvmgfq#wkf#gjqf`wjlmjp#lewfm#`lmpjgfqfgkjp#zlvmdfq#aqlwkfq?,wg=?,wq=?,wbaof=?b#kwws.frvju>![.VB.skzpj`bo#sqlsfqwjfple#Aqjwjpk#@lovnajbkbp#affm#`qjwj`jyfg+tjwk#wkf#f{`fswjlmrvfpwjlmp#balvw#wkfsbppjmd#wkqlvdk#wkf3!#`foosbggjmd>!3!#wklvpbmgp#le#sflsofqfgjqf`wp#kfqf-#Elqkbuf#`kjogqfm#vmgfq&0F&0@,p`qjsw&0F!**8?b#kqfe>!kwws9,,ttt-?oj=?b#kqfe>!kwws9,,pjwf\\\\mbnf!#`lmwfmw>!wf{w.gf`lqbwjlm9mlmfpwzof>!gjpsobz9#mlmf?nfwb#kwws.frvju>![.mft#Gbwf+*-dfwWjnf+*#wzsf>!jnbdf,{.j`lm!?,psbm=?psbm#`obpp>!obmdvbdf>!ibubp`qjswtjmglt-ol`bwjlm-kqfe?b#kqfe>!ibubp`qjsw9..=\\x0E\\t?p`qjsw#wzsf>!w?b#kqfe>$kwws9,,ttt-klqw`vw#j`lm!#kqfe>!?,gju=\\x0E\\t?gju#`obpp>!?p`qjsw#pq`>!kwws9,,!#qfo>!pwzofpkffw!#w?,gju=\\t?p`qjsw#wzsf>,b=#?b#kqfe>!kwws9,,#booltWqbmpsbqfm`z>![.VB.@lnsbwjaof!#`lmqfobwjlmpkjs#afwtffm\\t?,p`qjsw=\\x0E\\t?p`qjsw#?,b=?,oj=?,vo=?,gju=bppl`jbwfg#tjwk#wkf#sqldqbnnjmd#obmdvbdf?,b=?b#kqfe>!kwws9,,?,b=?,oj=?oj#`obpp>!elqn#b`wjlm>!kwws9,,?gju#pwzof>!gjpsobz9wzsf>!wf{w!#mbnf>!r!?wbaof#tjgwk>!233&!#ab`hdqlvmg.slpjwjlm9!#alqgfq>!3!#tjgwk>!qfo>!pklqw`vw#j`lm!#k5=?vo=?oj=?b#kqfe>!##?nfwb#kwws.frvju>!`pp!#nfgjb>!p`qffm!#qfpslmpjaof#elq#wkf#!#wzsf>!bssoj`bwjlm,!#pwzof>!ab`hdqlvmg.kwno8#`kbqpfw>vwe.;!#booltwqbmpsbqfm`z>!pwzofpkffw!#wzsf>!wf\\x0E\\t?nfwb#kwws.frvju>!=?,psbm=?psbm#`obpp>!3!#`foopsb`jmd>!3!=8\\t?,p`qjsw=\\t?p`qjsw#plnfwjnfp#`boofg#wkfglfp#mlw#mf`fppbqjozElq#nlqf#jmelqnbwjlmbw#wkf#afdjmmjmd#le#?\\\"GL@WZSF#kwno=?kwnosbqwj`vobqoz#jm#wkf#wzsf>!kjggfm!#mbnf>!ibubp`qjsw9uljg+3*8!feef`wjufmfpp#le#wkf#bvwl`lnsofwf>!lee!#dfmfqbooz#`lmpjgfqfg=?jmsvw#wzsf>!wf{w!#!=?,p`qjsw=\\x0E\\t?p`qjswwkqlvdklvw#wkf#tlqog`lnnlm#njp`lm`fswjlmbppl`jbwjlm#tjwk#wkf?,gju=\\t?,gju=\\t?gju#`gvqjmd#kjp#ojefwjnf/`lqqfpslmgjmd#wl#wkfwzsf>!jnbdf,{.j`lm!#bm#jm`qfbpjmd#mvnafqgjsolnbwj`#qfobwjlmpbqf#lewfm#`lmpjgfqfgnfwb#`kbqpfw>!vwe.;!#?jmsvw#wzsf>!wf{w!#f{bnsofp#jm`ovgf#wkf!=?jnd#pq`>!kwws9,,jsbqwj`jsbwjlm#jm#wkfwkf#fpwbaojpknfmw#le\\t?,gju=\\t?gju#`obpp>!%bns8maps8%bns8maps8wl#gfwfqnjmf#tkfwkfqrvjwf#gjeefqfmw#eqlnnbqhfg#wkf#afdjmmjmdgjpwbm`f#afwtffm#wkf`lmwqjavwjlmp#wl#wkf`lmeoj`w#afwtffm#wkftjgfoz#`lmpjgfqfg#wltbp#lmf#le#wkf#ejqpwtjwk#ubqzjmd#gfdqffpkbuf#psf`vobwfg#wkbw+gl`vnfmw-dfwFofnfmwsbqwj`jsbwjmd#jm#wkflqjdjmbooz#gfufolsfgfwb#`kbqpfw>!vwe.;!=#wzsf>!wf{w,`pp!#,=\\tjmwfq`kbmdfbaoz#tjwknlqf#`olpfoz#qfobwfgpl`jbo#bmg#slojwj`bowkbw#tlvog#lwkfqtjpfsfqsfmgj`vobq#wl#wkfpwzof#wzsf>!wf{w,`ppwzsf>!pvanjw!#mbnf>!ebnjojfp#qfpjgjmd#jmgfufolsjmd#`lvmwqjfp`lnsvwfq#sqldqbnnjmdf`lmlnj`#gfufolsnfmwgfwfqnjmbwjlm#le#wkfelq#nlqf#jmelqnbwjlmlm#pfufqbo#l``bpjlmpslqwvdv/Fp#+Fvqlsfv*<O<V=l<\\\\={<Q=m=`<V<\\\\=o<V=l<\\\\={<Q=m=`<V<\\\\<L<R=m=m<T<U=m<V<R<U<P<\\\\=n<Y=l<T<\\\\<W<R<^<T<Q=h<R=l<P<\\\\=j<T<T=o<S=l<\\\\<^<W<Y<Q<T=c<Q<Y<R<]=i<R<X<T<P<R<T<Q=h<R=l<P<\\\\=j<T=c<t<Q=h<R=l<P<\\\\=j<T=c<L<Y=m<S=o<]<W<T<V<T<V<R<W<T=k<Y=m=n<^<R<T<Q=h<R=l<P<\\\\=j<T=b=n<Y=l=l<T=n<R=l<T<T<X<R=m=n<\\\\=n<R=k<Q<R4K5h5i4F5d4K4@4C5d5j4K5h4K4X4F4]4K5o4K4F4K5h4K5n4F4]4K4A4K4Fkwno8#`kbqpfw>VWE.;!#pfwWjnflvw+evm`wjlm+*gjpsobz9jmojmf.aol`h8?jmsvw#wzsf>!pvanjw!#wzsf#>#$wf{w,ibubp`qj?jnd#pq`>!kwws9,,ttt-!#!kwws9,,ttt-t0-lqd,pklqw`vw#j`lm!#kqfe>!!#bvwl`lnsofwf>!lee!#?,b=?,gju=?gju#`obpp>?,b=?,oj=\\t?oj#`obpp>!`pp!#wzsf>!wf{w,`pp!#?elqn#b`wjlm>!kwws9,,{w,`pp!#kqfe>!kwws9,,ojmh#qfo>!bowfqmbwf!#\\x0E\\t?p`qjsw#wzsf>!wf{w,#lm`oj`h>!ibubp`qjsw9+mft#Gbwf*-dfwWjnf+*~kfjdkw>!2!#tjgwk>!2!#Sflsof$p#Qfsvaoj`#le##?b#kqfe>!kwws9,,ttt-wf{w.gf`lqbwjlm9vmgfqwkf#afdjmmjmd#le#wkf#?,gju=\\t?,gju=\\t?,gju=\\tfpwbaojpknfmw#le#wkf#?,gju=?,gju=?,gju=?,g ujftslqwxnjm.kfjdkw9\\t?p`qjsw#pq`>!kwws9,,lswjlm=?lswjlm#ubovf>lewfm#qfefqqfg#wl#bp#,lswjlm=\\t?lswjlm#ubov?\\\"GL@WZSF#kwno=\\t?\\\"..XJmwfqmbwjlmbo#Bjqslqw=\\t?b#kqfe>!kwws9,,ttt?,b=?b#kqfe>!kwws9,,t\\x0CTL\\x0CT^\\x0CTE\\x0CT^\\x0CUh\\x0CT{\\x0CTN\\roI\\ro|\\roL\\ro{\\roO\\rov\\rot\\nAO\\x05Gx\\bTA\\nzk#+\\x0BUm\\x05Gx*\\x0CHD\\x0CHS\\x0CH\\\\\\x0CIa\\x0CHJ\\x0CIk\\x0CHZ\\x0CHM\\x0CHR\\x0CHe\\x0CHD\\x0CH^\\x0CIg\\x0CHM\\x0CHy\\x0CIa\\x0CH[\\x0CIk\\x0CHH\\x0CIa\\x0CH\\\\\\x0CHp\\x0CHR\\x0CHD\\x0CHy\\x0CHR\\x0CH\\\\\\x0CIl\\x0CHT\\x0CHn\\x0CH@\\x0CHn\\x0CHK\\x0CHS\\x0CHH\\x0CHT\\x0CIa\\x0CHI\\x0CHR\\x0CHF\\x0CHD\\x0CHR\\x0CHT\\x0CIa\\x0CHY\\x0CIl\\x0CHy\\x0CHR\\x0CH\\\\\\x0CHT\\x0CHn\\x0CHT\\x0CIa\\x0CHy\\x0CH\\\\\\x0CHO\\x0CHT\\x0CHR\\x0CHB\\x0CH{\\x0CIa\\x0CH\\\\\\x0CIl\\x0CHv\\x0CHS\\x0CHs\\x0CIa\\x0CHL\\x0CIg\\x0CHn\\x0CHY\\x0CHS\\x0CHp\\x0CIa\\x0CHr\\x0CHR\\x0CHD\\x0CHi\\x0CHB\\x0CIk\\x0CH\\\\\\x0CHS\\x0CHy\\x0CHR\\x0CHY\\x0CHS\\x0CHA\\x0CHS\\x0CHD\\x0CIa\\x0CHD\\x0CH{\\x0CHR\\x0CHM\\x0CHS\\x0CHC\\x0CHR\\x0CHm\\x0CHy\\x0CIa\\x0CHC\\x0CIg\\x0CHn\\x0CHy\\x0CHS\\x0CHT\\x0CIm\\x0CH\\\\\\x0CHy\\x0CIa\\x0CH[\\x0CHR\\x0CHF\\x0CHU\\x0CIm\\x0CHm\\x0CHv\\x0CHH\\x0CIl\\x0CHF\\x0CIa\\x0CH\\\\\\x0CH@\\x0CHn\\x0CHK\\x0CHD\\x0CHs\\x0CHS\\x0CHF\\x0CIa\\x0CHF\\x0CHO\\x0CIl\\x0CHy\\x0CIa\\x0CH\\\\\\x0CHS\\x0CHy\\x0CIk\\x0CHs\\x0CHF\\x0CIa\\x0CH\\\\\\x0CHR\\x0CH\\\\\\x0CHn\\x0CHA\\x0CHF\\x0CIa\\x0CH\\\\\\x0CHR\\x0CHF\\x0CIa\\x0CHH\\x0CHB\\x0CHR\\x0CH^\\x0CHS\\x0CHy\\x0CIg\\x0CHn\\x0CH\\\\\\x0CHG\\x0CHP\\x0CIa\\x0CHH\\x0CHR\\x0CH\\\\\\x0CHD\\x0CHS\\x0CH\\\\\\x0CIa\\x0CHB\\x0CHR\\x0CHO\\x0CH^\\x0CHS\\x0CHB\\x0CHS\\x0CHs\\x0CIk\\x0CHMgfp`qjswjlm!#`lmwfmw>!gl`vnfmw-ol`bwjlm-sqlw-dfwFofnfmwpAzWbdMbnf+?\\\"GL@WZSF#kwno=\\t?kwno#?nfwb#`kbqpfw>!vwe.;!=9vqo!#`lmwfmw>!kwws9,,-`pp!#qfo>!pwzofpkffw!pwzof#wzsf>!wf{w,`pp!=wzsf>!wf{w,`pp!#kqfe>!t0-lqd,2:::,{kwno!#{nowzsf>!wf{w,ibubp`qjsw!#nfwklg>!dfw!#b`wjlm>!ojmh#qfo>!pwzofpkffw!##>#gl`vnfmw-dfwFofnfmwwzsf>!jnbdf,{.j`lm!#,=`foosbggjmd>!3!#`foops-`pp!#wzsf>!wf{w,`pp!#?,b=?,oj=?oj=?b#kqfe>!!#tjgwk>!2!#kfjdkw>!2!!=?b#kqfe>!kwws9,,ttt-pwzof>!gjpsobz9mlmf8!=bowfqmbwf!#wzsf>!bssoj.,,T0@,,GWG#[KWNO#2-3#foopsb`jmd>!3!#`foosbg#wzsf>!kjggfm!#ubovf>!,b=%maps8?psbm#qlof>!p\\t?jmsvw#wzsf>!kjggfm!#obmdvbdf>!IbubP`qjsw!##gl`vnfmw-dfwFofnfmwpAd>!3!#`foopsb`jmd>!3!#zsf>!wf{w,`pp!#nfgjb>!wzsf>$wf{w,ibubp`qjsw$tjwk#wkf#f{`fswjlm#le#zsf>!wf{w,`pp!#qfo>!pw#kfjdkw>!2!#tjgwk>!2!#>$(fm`lgfVQJ@lnslmfmw+?ojmh#qfo>!bowfqmbwf!#\\talgz/#wq/#jmsvw/#wf{wnfwb#mbnf>!qlalwp!#`lmnfwklg>!slpw!#b`wjlm>!=\\t?b#kqfe>!kwws9,,ttt-`pp!#qfo>!pwzofpkffw!#?,gju=?,gju=?gju#`obppobmdvbdf>!ibubp`qjsw!=bqjb.kjggfm>!wqvf!=.[?qjsw!#wzsf>!wf{w,ibubpo>38~*+*8\\t+evm`wjlm+*xab`hdqlvmg.jnbdf9#vqo+,b=?,oj=?oj=?b#kqfe>!k\\n\\n?oj=?b#kqfe>!kwws9,,bwlq!#bqjb.kjggfm>!wqv=#?b#kqfe>!kwws9,,ttt-obmdvbdf>!ibubp`qjsw!#,lswjlm=\\t?lswjlm#ubovf,gju=?,gju=?gju#`obpp>qbwlq!#bqjb.kjggfm>!wqf>+mft#Gbwf*-dfwWjnf+*slqwvdv/Fp#+gl#Aqbpjo*<R=l<_<\\\\<Q<T<[<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n=`<R<]=l<\\\\<[<R<^<\\\\<Q<T=c=l<Y<_<T=m=n=l<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n<T<R<]=c<[<\\\\=n<Y<W=`<Q<\\\\?\\\"GL@WZSF#kwno#SVAOJ@#!mw.Wzsf!#`lmwfmw>!wf{w,?nfwb#kwws.frvju>!@lmwfqbmpjwjlmbo,,FM!#!kwws9?kwno#{nomp>!kwws9,,ttt.,,T0@,,GWG#[KWNO#2-3#WGWG,{kwno2.wqbmpjwjlmbo,,ttt-t0-lqd,WQ,{kwno2,sf#>#$wf{w,ibubp`qjsw$8?nfwb#mbnf>!gfp`qjswjlmsbqfmwMlgf-jmpfqwAfelqf?jmsvw#wzsf>!kjggfm!#mbip!#wzsf>!wf{w,ibubp`qj+gl`vnfmw*-qfbgz+evm`wjp`qjsw#wzsf>!wf{w,ibubpjnbdf!#`lmwfmw>!kwws9,,VB.@lnsbwjaof!#`lmwfmw>wno8#`kbqpfw>vwe.;!#,=\\tojmh#qfo>!pklqw`vw#j`lm?ojmh#qfo>!pwzofpkffw!#?,p`qjsw=\\t?p`qjsw#wzsf>>#gl`vnfmw-`qfbwfFofnfm?b#wbqdfw>!\\\\aobmh!#kqfe>#gl`vnfmw-dfwFofnfmwpAjmsvw#wzsf>!wf{w!#mbnf>b-wzsf#>#$wf{w,ibubp`qjmsvw#wzsf>!kjggfm!#mbnfkwno8#`kbqpfw>vwe.;!#,=gwg!=\\t?kwno#{nomp>!kwws.,,T0@,,GWG#KWNO#7-32#WfmwpAzWbdMbnf+$p`qjsw$*jmsvw#wzsf>!kjggfm!#mbn?p`qjsw#wzsf>!wf{w,ibubp!#pwzof>!gjpsobz9mlmf8!=gl`vnfmw-dfwFofnfmwAzJg+>gl`vnfmw-`qfbwfFofnfmw+$#wzsf>$wf{w,ibubp`qjsw$jmsvw#wzsf>!wf{w!#mbnf>!g-dfwFofnfmwpAzWbdMbnf+pmj`bo!#kqfe>!kwws9,,ttt-@,,GWG#KWNO#7-32#Wqbmpjw?pwzof#wzsf>!wf{w,`pp!=\\t\\t?pwzof#wzsf>!wf{w,`pp!=jlmbo-gwg!=\\t?kwno#{nomp>kwws.frvju>!@lmwfmw.Wzsfgjmd>!3!#`foopsb`jmd>!3!kwno8#`kbqpfw>vwe.;!#,=\\t#pwzof>!gjpsobz9mlmf8!=??oj=?b#kqfe>!kwws9,,ttt-#wzsf>$wf{w,ibubp`qjsw$=<X<Y=c=n<Y<W=`<Q<R=m=n<T=m<R<R=n<^<Y=n=m=n<^<T<T<S=l<R<T<[<^<R<X=m=n<^<\\\\<]<Y<[<R<S<\\\\=m<Q<R=m=n<T\\x0CHF\\x0CIm\\x0CHT\\x0CIa\\x0CHH\\x0CHS\\x0CHy\\x0CHR\\x0CHy\\x0CHR\\x0CHn\\x0CH{\\x0CIa\\x0CH\\\\\\x0CIk\\x0CHT\\x0CHe\\x0CHD\\x0CIa\\x0CHU\\x0CIg\\x0CHn\\x0CHD\\x0CIk\\x0CHY\\x0CHS\\x0CHK\\x0CHR\\x0CHD\\x0CHT\\x0CHA\\x0CHR\\x0CHG\\x0CHS\\x0CHy\\x0CIa\\x0CHT\\x0CHS\\x0CHn\\x0CH{\\x0CHT\\x0CIm\\x0CH\\\\\\x0CHy\\x0CIa\\x0CH[\\x0CHS\\x0CHH\\x0CHy\\x0CIe\\x0CHF\\x0CIl\\x0CH\\\\\\x0CHR\\x0CHk\\x0CHs\\x0CHY\\x0CHS\\x0CHp\\x0CIa\\x0CHr\\x0CHR\\x0CHF\\x0CHD\\x0CHy\\x0CHR\\x0CH\\\\\\x0CIa\\x0CH\\\\\\x0CHY\\x0CHR\\x0CHd\\x0CHT\\x0CHy\\x0CIa\\x0CH\\\\\\x0CHS\\x0CHC\\x0CHH\\x0CHR\", \"\\u06F7%\\u018C'T%\\u0085'W%\\u00D7%O%g%\\u00A6&\\u0193%\\u01E5&>&*&'&^&\\u0088\\u0178\\u0C3E&\\u01AD&\\u0192&)&^&%&'&\\u0082&P&1&\\u00B1&3&]&m&u&E&t&C&\\u00CF&V&V&/&>&6&\\u0F76\\u177Co&p&@&E&M&P&x&@&F&e&\\u00CC&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1\\u025E*\\u03EA\\u21F3&\\u1372&K&;&)&E&H&P&0&?&9&V&\\u0081&-&v&a&,&E&)&?&=&'&'&B&\\u0D2E&\\u0503&\\u0316*&*8&%&%&&&%,)&\\u009A&>&\\u0086&7&]&F&2&>&J&6&n&2&%&?&\\u008E&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%\\u053C\\u0084(,(<&,&\\u03DA&\\u18C7&-&,(%&(&%&(\\u013B0&X&D&\\u0081&j&'&J&(&.&B&3&Z&R&h&3&E&E&<\\u00C6-\\u0360\\u1EF3&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&C\\u072C\\u2A25&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&\\u1E78\\u00CC-&7&1&F&7&t&W&7&I&.&.&^&=\\u0F9C\\u19D3&8(>&/&/&\\u077B')'\\u1065')'%@/&0&%\\u043E\\u09C0*&*@&C\\u053D\\u05D4\\u0274\\u05EB4\\u0DD7\\u071A\\u04D16\\u0D84&/\\u0178\\u0303Z&*%\\u0246\\u03FF&\\u0134&1\\u00A8\\u04B4\\u0174\", dictionarySizeBits, \"AAAAKKLLKKKKKJJIHHIHHGGFF\")\n\tsetData(dictionaryData, dictionarySizeBits)\n}\n\nfunc valueOf(x int32) string {\n\treturn strconv.FormatInt(int64(x), 10)\n}\n\nfunc closeInput(s *_State) {\n\ts.input = nil\n}\n\nfunc toUsASCIIBytes(src string) []int8 {\n\tvar i int32\n\tvar n int32 = int32(len(src))\n\tvar result []int8 = make([]int8, n)\n\tfor i = 0; i < n; i++ {\n\t\tresult[i] = int8(src[i])\n\t}\n\treturn result\n}\n\nfunc makeError(s *_State, code int32) int32 {\n\tif code >= 0 {\n\t\treturn code\n\t}\n\tif s.runningState >= 0 {\n\t\ts.runningState = code\n\t}\n\treturn code\n}\n\n// GENERATED CODE END\n"
  },
  {
    "path": "go/brotli/go.mod",
    "content": "module github.com/google/brotli/go/brotli\n\ngo 1.21\n"
  },
  {
    "path": "go/brotli/reader.go",
    "content": "// Copyright 2025 Google Inc. All Rights Reserved.\n//\n// Distributed under MIT license.\n// See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\npackage brotli\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"io\"\n\t\"strconv\"\n\t\"unsafe\"\n)\n\n// ReaderOptions optional parameters for constructing a Reader.\ntype ReaderOptions struct {\n\tRawDictionary []byte\n\tEagerOutput   bool\n\tLargeWindow   bool\n}\n\n// Reader implements io.Reader by decoding Brotli stream from an underlying Reader.\ntype Reader struct {\n\tinitialized bool\n\tclosed      bool\n\toptions     ReaderOptions\n\tstate       *_State\n}\n\nvar errDecodeError = errors.New(\"brotli: decode error\")\nvar errReaderClosed = errors.New(\"brotli: Reader is closed\")\n\nfunc toErr(errorCode int32) error {\n\tif errorCode >= 0 {\n\t\tpanic(\"brotli: non-negative error code\")\n\t}\n\tif errorCode <= -21 {\n\t\tpanic(\"brotli: panic error code: \" + strconv.Itoa(int(errorCode)))\n\t}\n\treturn errDecodeError\n}\n\n// NewReader initializes new Reader instance.\nfunc NewReader(src io.Reader) io.ReadCloser {\n\treturn NewReaderWithOptions(src, ReaderOptions{})\n}\n\n// NewReaderWithOptions initializes new Reader instance with given options.\nfunc NewReaderWithOptions(src io.Reader, options ReaderOptions) io.ReadCloser {\n\tthis := &Reader{\n\t\toptions:     options,\n\t\tstate:       makeState(),\n\t\tinitialized: false,\n\t\tclosed:      false,\n\t}\n\tthis.state.input = &src\n\treturn this\n}\n\n// Read implements io.Reader.\nfunc (r *Reader) Read(p []byte) (n int, err error) {\n\tif r.closed {\n\t\treturn 0, errReaderClosed\n\t}\n\tif !r.initialized {\n\t\tif errorCode := initState(r.state); errorCode < 0 {\n\t\t\treturn 0, toErr(errorCode)\n\t\t}\n\t\tif r.options.EagerOutput {\n\t\t\tif errorCode := enableEagerOutput(r.state); errorCode < 0 {\n\t\t\t\treturn 0, toErr(errorCode)\n\t\t\t}\n\t\t}\n\t\tif r.options.LargeWindow {\n\t\t\tif errorCode := enableLargeWindow(r.state); errorCode < 0 {\n\t\t\t\treturn 0, toErr(errorCode)\n\t\t\t}\n\t\t}\n\t\tdictionaryLen := len(r.options.RawDictionary)\n\t\tif dictionaryLen > 0 {\n\t\t\tdictionatyInt8 := unsafe.Slice((*int8)(unsafe.Pointer(&r.options.RawDictionary[0])), dictionaryLen)\n\t\t\tif errorCode := attachDictionaryChunk(r.state, dictionatyInt8); errorCode < 0 {\n\t\t\t\treturn 0, toErr(errorCode)\n\t\t\t}\n\t\t}\n\t\tr.initialized = true\n\t}\n\n\tlength := len(p)\n\tbuf := unsafe.Slice((*int8)(unsafe.Pointer(&p[0])), length)\n\tr.state.output = buf\n\tr.state.outputOffset = 0\n\tr.state.outputLength = int32(length)\n\tr.state.outputUsed = 0\n\tif errorCode := decompress(r.state); errorCode < 0 {\n\t\treturn 0, toErr(errorCode)\n\t}\n\tlength = int(r.state.outputUsed)\n\tif length == 0 {\n\t\treturn 0, io.EOF\n\t}\n\treturn length, nil\n}\n\n// Close implements io.Closer.\nfunc (r *Reader) Close() error {\n\tr.closed = true\n\t// If close is asynchronous, then initialized could be still false,\n\t// even if decoder is (paritally) initialized.\n\tif r.initialized {\n\t\tif errorCode := close(r.state); errorCode < 0 {\n\t\t\treturn toErr(errorCode)\n\t\t}\n\t}\n\tcloseInput(r.state)\n\treturn nil\n}\n\n// Decode decodes Brotli encoded data.\nfunc Decode(encodedData []byte) ([]byte, error) {\n\treturn DecodeWithRawDictionary(encodedData, nil)\n}\n\n// DecodeWithRawDictionary decodes Brotli encoded data with shared dictionary.\nfunc DecodeWithRawDictionary(encodedData []byte, dictionary []byte) ([]byte, error) {\n\tr := NewReaderWithOptions(bytes.NewReader(encodedData), ReaderOptions{RawDictionary: dictionary})\n\tdefer r.Close()\n\treturn io.ReadAll(r)\n}\n"
  },
  {
    "path": "go/brotli/synth_test.go",
    "content": "// Copyright 2025 Google Inc. All Rights Reserved.\n//\n// Distributed under MIT license.\n// See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\npackage brotli_test\n\nimport (\n\t\"testing\"\n\n\t\"github.com/google/brotli/go/brotli\"\n)\n\nfunc verify(t *testing.T, compressed []uint8, expectSuccess bool, expectedOutput string) {\n\tactual, err := brotli.Decode(compressed)\n\tsuccess := true\n\tif err != nil {\n\t\tsuccess = false\n\t}\n\tif success != expectSuccess {\n\t\tt.Fatalf(\"success = %v, expectSuccess = %v\", success, expectSuccess)\n\t}\n\tif !expectSuccess {\n\t\treturn\n\t}\n\tsame := true\n\tif len(actual) == len(expectedOutput) {\n\t\tfor i := 0; i < len(expectedOutput); i++ {\n\t\t\tif actual[i] != expectedOutput[i] {\n\t\t\t\tsame = false\n\t\t\t}\n\t\t}\n\t} else {\n\t\tsame = false\n\t}\n\tif !same {\n\t\tt.Fatalf(\"Expected: %v\\nActual: %v\", expectedOutput, actual)\n\t}\n}\n\nfunc times(n int, pattern string) string {\n\tk := len(pattern)\n\tresult := make([]uint8, n*k)\n\tfor i := 0; i < n; i++ {\n\t\toffset := i * k\n\t\tfor j := 0; j < k; j++ {\n\t\t\tresult[offset+j] = pattern[j]\n\t\t}\n\t}\n\treturn string(result)\n}\n\n/* GENERATED CODE START */\n\nfunc TestAllTransforms10(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0xfc, 0x05, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x13, 0x7c,\n    0x84, 0x26, 0xf8, 0x04, 0x10, 0x4c, 0xf0, 0x89, 0x38, 0x30, 0xc1, 0x27,\n    0x4e, 0xc1, 0x04, 0x9f, 0x64, 0x06, 0x26, 0xf8, 0x24, 0x3f, 0x34, 0xc1,\n    0x27, 0x7d, 0x82, 0x09, 0x3e, 0xe9, 0x16, 0x4d, 0xf0, 0xc9, 0xd2, 0xc0,\n    0x04, 0x9f, 0x0c, 0x8f, 0x4c, 0xf0, 0xc9, 0x06, 0xd1, 0x04, 0x9f, 0x6c,\n    0x92, 0x4d, 0xf0, 0xc9, 0x39, 0xc1, 0x04, 0x9f, 0xdc, 0x94, 0x4c, 0xf0,\n    0xc9, 0x69, 0xd1, 0x04, 0x9f, 0x3c, 0x98, 0x4d, 0xf0, 0x29, 0x9c, 0x81,\n    0x09, 0x3e, 0x45, 0x37, 0x31, 0xc1, 0xa7, 0x60, 0x47, 0x26, 0xf8, 0x14,\n    0xfa, 0xcc, 0x04, 0x9f, 0xc2, 0x20, 0x9a, 0xe0, 0x53, 0x48, 0x54, 0x13,\n    0x7c, 0x8a, 0x8f, 0x6c, 0x82, 0x4f, 0xb1, 0xd2, 0x4d, 0xf0, 0x29, 0x67,\n    0x82, 0x09, 0x3e, 0xe5, 0x4f, 0x31, 0xc1, 0xa7, 0x7c, 0x4a, 0x26, 0xf8,\n    0x94, 0x57, 0xcd, 0x04, 0x9f, 0x12, 0x2c, 0x9a, 0xe0, 0x53, 0xba, 0x55,\n    0x13, 0x7c, 0xca, 0xbf, 0x6c, 0x82, 0x4f, 0xb9, 0xd8, 0x4d, 0xf0, 0xa9,\n    0x30, 0x03, 0x13, 0x7c, 0x2a, 0xd2, 0xc2, 0x04, 0x9f, 0x4a, 0x36, 0x31,\n    0xc1, 0xa7, 0xca, 0x6d, 0x4c, 0xf0, 0xa9, 0x94, 0x23, 0x13, 0x7c, 0x2a,\n    0xeb, 0xca, 0x04, 0x9f, 0xea, 0x3c, 0x33, 0xc1, 0xa7, 0xb2, 0xef, 0x4c,\n    0xf0, 0xa9, 0xf8, 0x43, 0x13, 0x7c, 0xaa, 0x00, 0xd3, 0x04, 0x9f, 0x2a,\n    0x42, 0x35, 0xc1, 0xa7, 0xc2, 0x70, 0x4d, 0xf0, 0xa9, 0x52, 0x64, 0x13,\n    0x7c, 0x2a, 0x1a, 0xdb, 0x04, 0x9f, 0x6a, 0x48, 0x37, 0xc1, 0xa7, 0x92,\n    0xf2, 0x4d, 0xf0, 0xa9, 0xc3, 0x04, 0x13, 0x7c, 0xea, 0x32, 0xc3, 0x04,\n    0x9f, 0x7a, 0x4e, 0x31, 0xc1, 0xa7, 0x06, 0x74, 0x4c, 0xf0, 0xa9, 0x19,\n    0x25, 0x13, 0x7c, 0x6a, 0x4d, 0xcb, 0x04, 0x9f, 0x1a, 0x55, 0x33, 0xc1,\n    0xa7, 0x56, 0xf5, 0x4c, 0xf0, 0xa9, 0x5d, 0x45, 0x13, 0x7c, 0xea, 0x59,\n    0xd3, 0x04, 0x9f, 0xfa, 0x57, 0x35, 0xc1, 0xa7, 0x66, 0x76, 0x4d, 0xf0,\n    0xa9, 0x9f, 0x65, 0x13, 0x7c, 0x6a, 0x6f, 0xdb, 0x04, 0x9f, 0x9a, 0x5d,\n    0x37, 0xc1, 0xa7, 0x06, 0xf8, 0x4d, 0xf0, 0x69, 0x0c, 0x06, 0x26, 0xf8,\n    0x34, 0x08, 0x07, 0x13, 0x7c, 0x1a, 0x8b, 0x85, 0x09, 0x3e, 0x8d, 0xc8,\n    0xc3, 0x04, 0x9f, 0xe6, 0x65, 0x62, 0x82, 0x4f, 0xb3, 0x73, 0x31, 0xc1,\n    0xa7, 0x41, 0xda, 0x98, 0xe0, 0xd3, 0x54, 0x7d, 0x4c, 0xf0, 0x69, 0xc4,\n    0x46, 0x26, 0xf8, 0x34, 0x72, 0x27, 0x13, 0x7c, 0x1a, 0xc5, 0x95, 0x09,\n    0x3e, 0x8d, 0xe5, 0xcb, 0x04, 0x9f, 0x06, 0x75, 0x66, 0x82, 0x4f, 0x43,\n    0x7b, 0x33, 0xc1, 0xa7, 0x09, 0xde, 0x99, 0xe0, 0xd3, 0x34, 0xff, 0x4c,\n    0xf0, 0x69, 0xb2, 0x87, 0x26, 0xf8, 0x34, 0xe9, 0x47, 0x13, 0x7c, 0x9a,\n    0xfb, 0xa5, 0x09, 0x3e, 0x4d, 0x01, 0xd4, 0x04, 0x9f, 0x46, 0x82, 0x6a,\n    0x82, 0x4f, 0x03, 0x82, 0x35, 0xc1, 0xa7, 0x61, 0xe1, 0x9a, 0xe0, 0xd3,\n    0xe4, 0x80, 0x4d, 0xf0, 0x69, 0x8a, 0xc8, 0x26, 0xf8, 0x34, 0x52, 0x68,\n    0x13, 0x7c, 0x9a, 0x2f, 0xb6, 0x09, 0x3e, 0x8d, 0x1b, 0xdc, 0x04, 0x9f,\n    0x86, 0x8f, 0x6e, 0x82, 0x4f, 0xb3, 0x88, 0x37, 0xc1, 0xa7, 0xd9, 0xe4,\n    0x9b, 0xe0, 0xd3, 0x9e, 0x02, 0x4c, 0xf0, 0x69, 0x6d, 0x09, 0x26, 0xf8,\n    0xb4, 0xc3, 0x08, 0x13, 0x7c, 0x5a, 0x68, 0x86, 0x09, 0x3e, 0xad, 0x37,\n    0xc4, 0x04, 0x9f, 0x56, 0x9d, 0x62, 0x82, 0x4f, 0x9b, 0x8f, 0x31, 0xc1,\n    0xa7, 0x2d, 0xe8, 0x98, 0xe0, 0xd3, 0x4a, 0x84, 0x4c, 0xf0, 0x69, 0x3f,\n    0x4a, 0x26, 0xf8, 0xb4, 0x2c, 0x29, 0x13, 0x7c, 0xda, 0x9c, 0x96, 0x09,\n    0x3e, 0x2d, 0x52, 0xcc, 0x04, 0x9f, 0xb6, 0xaa, 0x66, 0x82, 0x4f, 0x2b,\n    0x96, 0x33, 0xc1, 0xa7, 0x7d, 0xeb, 0x99, 0xe0, 0xd3, 0xf6, 0x05, 0x4d,\n    0xf0, 0x69, 0x17, 0x8b, 0x26, 0xf8, 0xb4, 0x97, 0x49, 0x13, 0x7c, 0xda,\n    0xd1, 0xa6, 0x09, 0x3e, 0x2d, 0x6c, 0xd4, 0x04, 0x9f, 0xb6, 0xb7, 0x6a,\n    0x82, 0x4f, 0xab, 0x9c, 0x35, 0xc1, 0xa7, 0xc5, 0xee, 0x9a, 0xe0, 0xd3,\n    0x9a, 0x87, 0x4d, 0xf0, 0x69, 0xe9, 0xcb,\n  };\n  verify(t,\n    /*\n     * // The stream consists of word \"time\" with all possible transforms.\n     * main_header\n     * metablock_header_easy: 1533, 1\n     * command_easy: 10, \"|\", 2 // = 0 << 10 + 1 + 1\n     * command_easy: 10, \"|\", 1037 // = 1 << 10 + 1 + 12\n     * command_easy: 10, \"|\", 2073 // = 2 << 10 + 1 + 24\n     * command_easy: 10, \"|\", 3110 // = 3 << 10 + 1 + 37\n     * command_easy: 10, \"|\", 4144 // = 4 << 10 + 1 + 47\n     * command_easy: 10, \"|\", 5180 // = 5 << 10 + 1 + 59\n     * command_easy: 10, \"|\", 6220 // = 6 << 10 + 1 + 75\n     * command_easy: 10, \"|\", 7256 // = 7 << 10 + 1 + 87\n     * command_easy: 10, \"|\", 8294 // = 8 << 10 + 1 + 101\n     * command_easy: 10, \"|\", 9333 // = 9 << 10 + 1 + 116\n     * command_easy: 10, \"|\", 10368 // = 10 << 10 + 1 + 127\n     * command_easy: 10, \"|\", 11408 // = 11 << 10 + 1 + 143\n     * command_easy: 10, \"|\", 12441 // = 12 << 10 + 1 + 152\n     * command_easy: 10, \"|\", 13475 // = 13 << 10 + 1 + 162\n     * command_easy: 10, \"|\", 14513 // = 14 << 10 + 1 + 176\n     * command_easy: 10, \"|\", 15550 // = 15 << 10 + 1 + 189\n     * command_easy: 10, \"|\", 16587 // = 16 << 10 + 1 + 202\n     * command_easy: 10, \"|\", 17626 // = 17 << 10 + 1 + 217\n     * command_easy: 10, \"|\", 18665 // = 18 << 10 + 1 + 232\n     * command_easy: 10, \"|\", 19703 // = 19 << 10 + 1 + 246\n     * command_easy: 10, \"|\", 20739 // = 20 << 10 + 1 + 258\n     * command_easy: 10, \"|\", 21775 // = 21 << 10 + 1 + 270\n     * command_easy: 10, \"|\", 22812 // = 22 << 10 + 1 + 283\n     * command_easy: 10, \"|\", 23848 // = 23 << 10 + 1 + 295\n     * command_easy: 10, \"|\", 24880 // = 24 << 10 + 1 + 303\n     * command_easy: 10, \"|\", 25916 // = 25 << 10 + 1 + 315\n     * command_easy: 10, \"|\", 26956 // = 26 << 10 + 1 + 331\n     * command_easy: 10, \"|\", 27988 // = 27 << 10 + 1 + 339\n     * command_easy: 10, \"|\", 29021 // = 28 << 10 + 1 + 348\n     * command_easy: 10, \"|\", 30059 // = 29 << 10 + 1 + 362\n     * command_easy: 10, \"|\", 31100 // = 30 << 10 + 1 + 379\n     * command_easy: 10, \"|\", 32136 // = 31 << 10 + 1 + 391\n     * command_easy: 10, \"|\", 33173 // = 32 << 10 + 1 + 404\n     * command_easy: 10, \"|\", 34209 // = 33 << 10 + 1 + 416\n     * command_easy: 10, \"|\", 35247 // = 34 << 10 + 1 + 430\n     * command_easy: 10, \"|\", 36278 // = 35 << 10 + 1 + 437\n     * command_easy: 10, \"|\", 37319 // = 36 << 10 + 1 + 454\n     * command_easy: 10, \"|\", 38355 // = 37 << 10 + 1 + 466\n     * command_easy: 10, \"|\", 39396 // = 38 << 10 + 1 + 483\n     * command_easy: 10, \"|\", 40435 // = 39 << 10 + 1 + 498\n     * command_easy: 10, \"|\", 41465 // = 40 << 10 + 1 + 504\n     * command_easy: 10, \"|\", 42494 // = 41 << 10 + 1 + 509\n     * command_easy: 10, \"|\", 43534 // = 42 << 10 + 1 + 525\n     * command_easy: 10, \"|\", 44565 // = 43 << 10 + 1 + 532\n     * command_easy: 10, \"|\", 45606 // = 44 << 10 + 1 + 549\n     * command_easy: 10, \"|\", 46641 // = 45 << 10 + 1 + 560\n     * command_easy: 10, \"|\", 47680 // = 46 << 10 + 1 + 575\n     * command_easy: 10, \"|\", 48719 // = 47 << 10 + 1 + 590\n     * command_easy: 10, \"|\", 49758 // = 48 << 10 + 1 + 605\n     * command_easy: 10, \"|\", 50786 // = 49 << 10 + 1 + 609\n     * command_easy: 10, \"|\", 51824 // = 50 << 10 + 1 + 623\n     * command_easy: 10, \"|\", 52861 // = 51 << 10 + 1 + 636\n     * command_easy: 10, \"|\", 53897 // = 52 << 10 + 1 + 648\n     * command_easy: 10, \"|\", 54935 // = 53 << 10 + 1 + 662\n     * command_easy: 10, \"|\", 55973 // = 54 << 10 + 1 + 676\n     * command_easy: 10, \"|\", 56999 // = 55 << 10 + 1 + 678\n     * command_easy: 10, \"|\", 58027 // = 56 << 10 + 1 + 682\n     * command_easy: 10, \"|\", 59056 // = 57 << 10 + 1 + 687\n     * command_easy: 10, \"|\", 60092 // = 58 << 10 + 1 + 699\n     * command_easy: 10, \"|\", 61129 // = 59 << 10 + 1 + 712\n     * command_easy: 10, \"|\", 62156 // = 60 << 10 + 1 + 715\n     * command_easy: 10, \"|\", 63195 // = 61 << 10 + 1 + 730\n     * command_easy: 10, \"|\", 64233 // = 62 << 10 + 1 + 744\n     * command_easy: 10, \"|\", 65277 // = 63 << 10 + 1 + 764\n     * command_easy: 10, \"|\", 66307 // = 64 << 10 + 1 + 770\n     * command_easy: 10, \"|\", 67333 // = 65 << 10 + 1 + 772\n     * command_easy: 10, \"|\", 68371 // = 66 << 10 + 1 + 786\n     * command_easy: 10, \"|\", 69407 // = 67 << 10 + 1 + 798\n     * command_easy: 10, \"|\", 70444 // = 68 << 10 + 1 + 811\n     * command_easy: 10, \"|\", 71480 // = 69 << 10 + 1 + 823\n     * command_easy: 10, \"|\", 72517 // = 70 << 10 + 1 + 836\n     * command_easy: 10, \"|\", 73554 // = 71 << 10 + 1 + 849\n     * command_easy: 10, \"|\", 74591 // = 72 << 10 + 1 + 862\n     * command_easy: 10, \"|\", 75631 // = 73 << 10 + 1 + 878\n     * command_easy: 10, \"|\", 76679 // = 74 << 10 + 1 + 902\n     * command_easy: 10, \"|\", 77715 // = 75 << 10 + 1 + 914\n     * command_easy: 10, \"|\", 78757 // = 76 << 10 + 1 + 932\n     * command_easy: 10, \"|\", 79793 // = 77 << 10 + 1 + 944\n     * command_easy: 10, \"|\", 80830 // = 78 << 10 + 1 + 957\n     * command_easy: 10, \"|\", 81866 // = 79 << 10 + 1 + 969\n     * command_easy: 10, \"|\", 82902 // = 80 << 10 + 1 + 981\n     * command_easy: 10, \"|\", 83942 // = 81 << 10 + 1 + 997\n     * command_easy: 10, \"|\", 84980 // = 82 << 10 + 1 + 1011\n     * command_easy: 10, \"|\", 86018 // = 83 << 10 + 1 + 1025\n     * command_easy: 10, \"|\", 87055 // = 84 << 10 + 1 + 1038\n     * command_easy: 10, \"|\", 88093 // = 85 << 10 + 1 + 1052\n     * command_easy: 10, \"|\", 89129 // = 86 << 10 + 1 + 1064\n     * command_easy: 10, \"|\", 90166 // = 87 << 10 + 1 + 1077\n     * command_easy: 10, \"|\", 91202 // = 88 << 10 + 1 + 1089\n     * command_easy: 10, \"|\", 92239 // = 89 << 10 + 1 + 1102\n     * command_easy: 10, \"|\", 93276 // = 90 << 10 + 1 + 1115\n     * command_easy: 10, \"|\", 94315 // = 91 << 10 + 1 + 1130\n     * command_easy: 10, \"|\", 95353 // = 92 << 10 + 1 + 1144\n     * command_easy: 10, \"|\", 96392 // = 93 << 10 + 1 + 1159\n     * command_easy: 10, \"|\", 97432 // = 94 << 10 + 1 + 1175\n     * command_easy: 10, \"|\", 98468 // = 95 << 10 + 1 + 1187\n     * command_easy: 10, \"|\", 99507 // = 96 << 10 + 1 + 1202\n     * command_easy: 10, \"|\", 100544 // = 97 << 10 + 1 + 1215\n     * command_easy: 10, \"|\", 101581 // = 98 << 10 + 1 + 1228\n     * command_easy: 10, \"|\", 102619 // = 99 << 10 + 1 + 1242\n     * command_easy: 10, \"|\", 103655 // = 100 << 10 + 1 + 1254\n     * command_easy: 10, \"|\", 104694 // = 101 << 10 + 1 + 1269\n     * command_easy: 10, \"|\", 105730 // = 102 << 10 + 1 + 1281\n     * command_easy: 10, \"|\", 106767 // = 103 << 10 + 1 + 1294\n     * command_easy: 10, \"|\", 107804 // = 104 << 10 + 1 + 1307\n     * command_easy: 10, \"|\", 108841 // = 105 << 10 + 1 + 1320\n     * command_easy: 10, \"|\", 109878 // = 106 << 10 + 1 + 1333\n     * command_easy: 10, \"|\", 110917 // = 107 << 10 + 1 + 1348\n     * command_easy: 10, \"|\", 111954 // = 108 << 10 + 1 + 1361\n     * command_easy: 10, \"|\", 112991 // = 109 << 10 + 1 + 1374\n     * command_easy: 10, \"|\", 114028 // = 110 << 10 + 1 + 1387\n     * command_easy: 10, \"|\", 115066 // = 111 << 10 + 1 + 1401\n     * command_easy: 10, \"|\", 116104 // = 112 << 10 + 1 + 1415\n     * command_easy: 10, \"|\", 117140 // = 113 << 10 + 1 + 1427\n     * command_easy: 10, \"|\", 118176 // = 114 << 10 + 1 + 1439\n     * command_easy: 10, \"|\", 119213 // = 115 << 10 + 1 + 1452\n     * command_easy: 10, \"|\", 120250 // = 116 << 10 + 1 + 1465\n     * command_easy: 10, \"|\", 121287 // = 117 << 10 + 1 + 1478\n     * command_easy: 10, \"|\", 122325 // = 118 << 10 + 1 + 1492\n     * command_easy: 10, \"|\", 123363 // = 119 << 10 + 1 + 1506\n     * command_easy: 10, \"|\", 124401 // = 120 << 10 + 1 + 1520\n     */\n    compressed,\n    true,\n    \"|categories|categories | categories |ategories|Categories |categories th\" +\n    \"e | categories|s categories |categories of |Categories|categories and |t\" +\n    \"egories|categorie|, categories |categories, | Categories |categories in \" +\n    \"|categories to |e categories |categories\\\"|categories.|categories\\\">|cat\" +\n    \"egories\\n|categor|categories]|categories for |egories|categori|categorie\" +\n    \"s a |categories that | Categories|categories. |.categories| categories, \" +\n    \"|gories|categories with |categories'|categories from |categories by |ori\" +\n    \"es|ries| the categories|catego|categories. The |CATEGORIES|categories on\" +\n    \" |categories as |categories is |cat|categorieing |categories\\n\\t|categor\" +\n    \"ies:| categories. |categoriesed |s|ies|cate|categories(|Categories, |ca|\" +\n    \"categories at |categoriesly | the categories of |categ|c| Categories, |C\" +\n    \"ategories\\\"|.categories(|CATEGORIES |Categories\\\">|categories=\\\"| catego\" +\n    \"ries.|.com/categories| the categories of the |Categories'|categories. Th\" +\n    \"is |categories,|.categories |Categories(|Categories.|categories not | ca\" +\n    \"tegories=\\\"|categorieser | CATEGORIES |categoriesal | CATEGORIES|categor\" +\n    \"ies='|CATEGORIES\\\"|Categories. | categories(|categoriesful | Categories.\" +\n    \" |categoriesive |categoriesless |CATEGORIES'|categoriesest | Categories.\" +\n    \"|CATEGORIES\\\">| categories='|Categories,|categoriesize |CATEGORIES.|\" +\n    \"\\302\\240categories| categories,|Categories=\\\"|CATEGORIES=\\\"|categoriesou\" +\n    \"s |CATEGORIES, |Categories='| Categories,| CATEGORIES=\\\"| CATEGORIES, |C\" +\n    \"ATEGORIES,|CATEGORIES(|CATEGORIES. | CATEGORIES.|CATEGORIES='| CATEGORIE\" +\n    \"S. | Categories=\\\"| CATEGORIES='| Categories='\",\n  );\n}\n\nfunc TestAllTransforms4(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x40, 0x03, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x51, 0x3e,\n    0x42, 0x51, 0x3e, 0x81, 0x02, 0x51, 0x3e, 0x11, 0x04, 0xa2, 0x7c, 0xe2,\n    0x0b, 0x44, 0xf9, 0x24, 0x1b, 0x10, 0xe5, 0x93, 0x84, 0x50, 0x94, 0x4f,\n    0xba, 0x02, 0x51, 0x3e, 0x69, 0x0c, 0x45, 0xf9, 0x64, 0x39, 0x20, 0xca,\n    0x27, 0x13, 0x22, 0x51, 0x3e, 0xd9, 0x11, 0x8a, 0xf2, 0xc9, 0xa2, 0x58,\n    0x94, 0x4f, 0x4e, 0x05, 0xa2, 0x7c, 0x72, 0x2c, 0x12, 0xe5, 0x93, 0x83,\n    0xa1, 0x28, 0x9f, 0xfc, 0x8c, 0x45, 0xf9, 0x14, 0x6e, 0x40, 0x94, 0x4f,\n    0x71, 0x47, 0x44, 0xf9, 0x14, 0x80, 0x48, 0x94, 0x4f, 0x81, 0xc8, 0x44,\n    0xf9, 0x14, 0x8e, 0x50, 0x94, 0x4f, 0x41, 0x49, 0x45, 0xf9, 0x14, 0x9b,\n    0x58, 0x94, 0x4f, 0x11, 0xca, 0x45, 0xf9, 0x94, 0xa3, 0x40, 0x94, 0x4f,\n    0x99, 0x4a, 0x44, 0xf9, 0x94, 0xb3, 0x48, 0x94, 0x4f, 0x59, 0xcb, 0x44,\n    0xf9, 0x94, 0xb8, 0x50, 0x94, 0x4f, 0x09, 0x4c, 0x45, 0xf9, 0x94, 0xcb,\n    0x58, 0x94, 0x4f, 0x19, 0xcd, 0x45, 0xf9, 0x54, 0xd8, 0x80, 0x28, 0x9f,\n    0xca, 0x9b, 0x10, 0xe5, 0x53, 0x99, 0x23, 0xa2, 0x7c, 0xaa, 0x73, 0x46,\n    0x94, 0x4f, 0x25, 0x0f, 0x89, 0xf2, 0xa9, 0xf0, 0x29, 0x51, 0x3e, 0xd5,\n    0x40, 0x26, 0xca, 0xa7, 0x62, 0xe8, 0x44, 0xf9, 0x54, 0x0d, 0xa1, 0x28,\n    0x9f, 0xca, 0xa1, 0x14, 0xe5, 0x53, 0x61, 0xa4, 0xa2, 0x7c, 0xaa, 0x8c,\n    0x56, 0x94, 0x4f, 0x45, 0x12, 0x8b, 0xf2, 0xa9, 0x52, 0x6a, 0x51, 0x3e,\n    0x95, 0x4c, 0x2e, 0xca, 0xa7, 0xda, 0xe9, 0x45, 0xf9, 0xd4, 0x44, 0x81,\n    0x28, 0x9f, 0xba, 0xa8, 0x10, 0xe5, 0x53, 0x37, 0x25, 0xa2, 0x7c, 0x6a,\n    0xaa, 0x46, 0x94, 0x4f, 0xad, 0x15, 0x89, 0xf2, 0xa9, 0xc5, 0x2a, 0x51,\n    0x3e, 0xb5, 0x5a, 0x26, 0xca, 0xa7, 0x5e, 0xeb, 0x44, 0xf9, 0xd4, 0x6c,\n    0xa1, 0x28, 0x9f, 0xba, 0xad, 0x14, 0xe5, 0x53, 0xcf, 0xa5, 0xa2, 0x7c,\n    0x6a, 0xbd, 0x56, 0x94, 0x4f, 0xbd, 0x17, 0x8b, 0xf2, 0xa9, 0x09, 0x6b,\n    0x51, 0x3e, 0x35, 0x63, 0x2e, 0xca, 0xa7, 0xd6, 0xec, 0x45, 0xf9, 0x34,\n    0x9b, 0x01, 0x51, 0x3e, 0x0d, 0x67, 0x41, 0x94, 0x4f, 0x43, 0x9a, 0x10,\n    0xe5, 0xd3, 0xa8, 0x36, 0x44, 0xf9, 0x34, 0xb1, 0x11, 0x51, 0x3e, 0xcd,\n    0x6d, 0x45, 0x94, 0x4f, 0xe3, 0x9b, 0x11, 0xe5, 0xd3, 0x14, 0x77, 0x44,\n    0xf9, 0x34, 0xcc, 0x21, 0x51, 0x3e, 0x8d, 0x75, 0x49, 0x94, 0x4f, 0x83,\n    0x9e, 0x12, 0xe5, 0xd3, 0xb8, 0xb7, 0x44, 0xf9, 0x34, 0xfa, 0x31, 0x51,\n    0x3e, 0x0d, 0x80, 0x4d, 0x94, 0x4f, 0x73, 0xa0, 0x13, 0xe5, 0xd3, 0x34,\n    0xf8, 0x44, 0xf9, 0x34, 0x13, 0x42, 0x51, 0x3e, 0x4d, 0x87, 0x51, 0x94,\n    0x4f, 0x53, 0xa2, 0x14, 0xe5, 0xd3, 0xb4, 0x38, 0x45, 0xf9, 0x34, 0x34,\n    0x52, 0x51, 0x3e, 0x0d, 0x8f, 0x55, 0x94, 0x4f, 0x23, 0xa4, 0x15, 0xe5,\n    0xd3, 0x24, 0x79, 0x45, 0xf9, 0x34, 0x4f, 0x62, 0x51, 0x3e, 0x8d, 0x95,\n    0x59, 0x94, 0x4f, 0xd3, 0xa5, 0x16, 0xe5, 0xd3, 0x98, 0xb9, 0x45, 0xf9,\n    0x34, 0x6e, 0x72, 0x51, 0x3e, 0xcd, 0x9d, 0x5d, 0x94, 0x4f, 0x13, 0xa8,\n    0x17, 0xe5, 0xd3, 0x1c, 0xfa, 0x45, 0xf9, 0xb4, 0x90, 0x02, 0x51, 0x3e,\n    0xed, 0xa5, 0x41, 0x94, 0x4f, 0xeb, 0xa9, 0x10, 0xe5, 0xd3, 0x9a, 0x3a,\n    0x44, 0xf9, 0xb4, 0xac, 0x12, 0x51, 0x3e, 0x6d, 0xad, 0x45, 0x94, 0x4f,\n    0xbb, 0xab, 0x11, 0xe5, 0xd3, 0x0a, 0x7b, 0x44, 0xf9, 0xb4, 0xc9, 0x22,\n    0x51, 0x3e, 0x2d, 0xb4, 0x49, 0x94, 0x4f, 0x7b, 0xad, 0x12, 0xe5, 0xd3,\n    0x82, 0xbb, 0x44, 0xf9, 0xb4, 0xe7, 0x32, 0x51, 0x3e, 0xad, 0xbb, 0x4d,\n    0x94, 0x4f, 0x5b, 0xaf, 0x13, 0xe5, 0xd3, 0xf6, 0xfb, 0x44, 0xf9, 0xb4,\n    0x05, 0x43, 0x51, 0x3e, 0xed, 0xc2, 0x51, 0x94, 0x4f, 0x1b, 0xb1, 0x14,\n    0xe5, 0xd3, 0x62, 0x3c, 0x45, 0xf9, 0xb4, 0x1f, 0x53, 0x51, 0x3e, 0xad,\n    0xc9, 0x55, 0x94, 0x4f, 0xeb, 0xb2, 0x15, 0xe5, 0xd3, 0xda, 0x7c, 0x45,\n    0xf9, 0xb4, 0x3e, 0x63,\n  };\n  verify(t,\n    /*\n     * // The stream consists of word \"time\" with all possible transforms.\n     * main_header\n     * metablock_header_easy: 833, 1\n     * command_easy: 4, \"|\", 2 // = 0 << 10 + 1 + 1\n     * command_easy: 4, \"|\", 1031 // = 1 << 10 + 1 + 6\n     * command_easy: 4, \"|\", 2061 // = 2 << 10 + 1 + 12\n     * command_easy: 4, \"|\", 3092 // = 3 << 10 + 1 + 19\n     * command_easy: 4, \"|\", 4120 // = 4 << 10 + 1 + 23\n     * command_easy: 4, \"|\", 5150 // = 5 << 10 + 1 + 29\n     * command_easy: 4, \"|\", 6184 // = 6 << 10 + 1 + 39\n     * command_easy: 4, \"|\", 7214 // = 7 << 10 + 1 + 45\n     * command_easy: 4, \"|\", 8246 // = 8 << 10 + 1 + 53\n     * command_easy: 4, \"|\", 9279 // = 9 << 10 + 1 + 62\n     * command_easy: 4, \"|\", 10308 // = 10 << 10 + 1 + 67\n     * command_easy: 4, \"|\", 11342 // = 11 << 10 + 1 + 77\n     * command_easy: 4, \"|\", 12369 // = 12 << 10 + 1 + 80\n     * command_easy: 4, \"|\", 13397 // = 13 << 10 + 1 + 84\n     * command_easy: 4, \"|\", 14429 // = 14 << 10 + 1 + 92\n     * command_easy: 4, \"|\", 15460 // = 15 << 10 + 1 + 99\n     * command_easy: 4, \"|\", 16491 // = 16 << 10 + 1 + 106\n     * command_easy: 4, \"|\", 17524 // = 17 << 10 + 1 + 115\n     * command_easy: 4, \"|\", 18557 // = 18 << 10 + 1 + 124\n     * command_easy: 4, \"|\", 19589 // = 19 << 10 + 1 + 132\n     * command_easy: 4, \"|\", 20619 // = 20 << 10 + 1 + 138\n     * command_easy: 4, \"|\", 21649 // = 21 << 10 + 1 + 144\n     * command_easy: 4, \"|\", 22680 // = 22 << 10 + 1 + 151\n     * command_easy: 4, \"|\", 23710 // = 23 << 10 + 1 + 157\n     * command_easy: 4, \"|\", 24736 // = 24 << 10 + 1 + 159\n     * command_easy: 4, \"|\", 25766 // = 25 << 10 + 1 + 165\n     * command_easy: 4, \"|\", 26800 // = 26 << 10 + 1 + 175\n     * command_easy: 4, \"|\", 27826 // = 27 << 10 + 1 + 177\n     * command_easy: 4, \"|\", 28853 // = 28 << 10 + 1 + 180\n     * command_easy: 4, \"|\", 29885 // = 29 << 10 + 1 + 188\n     * command_easy: 4, \"|\", 30920 // = 30 << 10 + 1 + 199\n     * command_easy: 4, \"|\", 31950 // = 31 << 10 + 1 + 205\n     * command_easy: 4, \"|\", 32981 // = 32 << 10 + 1 + 212\n     * command_easy: 4, \"|\", 34011 // = 33 << 10 + 1 + 218\n     * command_easy: 4, \"|\", 35043 // = 34 << 10 + 1 + 226\n     * command_easy: 4, \"|\", 36068 // = 35 << 10 + 1 + 227\n     * command_easy: 4, \"|\", 37103 // = 36 << 10 + 1 + 238\n     * command_easy: 4, \"|\", 38133 // = 37 << 10 + 1 + 244\n     * command_easy: 4, \"|\", 39168 // = 38 << 10 + 1 + 255\n     * command_easy: 4, \"|\", 40201 // = 39 << 10 + 1 + 264\n     * command_easy: 4, \"|\", 41226 // = 40 << 10 + 1 + 265\n     * command_easy: 4, \"|\", 42251 // = 41 << 10 + 1 + 266\n     * command_easy: 4, \"|\", 43285 // = 42 << 10 + 1 + 276\n     * command_easy: 4, \"|\", 44310 // = 43 << 10 + 1 + 277\n     * command_easy: 4, \"|\", 45345 // = 44 << 10 + 1 + 288\n     * command_easy: 4, \"|\", 46374 // = 45 << 10 + 1 + 293\n     * command_easy: 4, \"|\", 47407 // = 46 << 10 + 1 + 302\n     * command_easy: 4, \"|\", 48440 // = 47 << 10 + 1 + 311\n     * command_easy: 4, \"|\", 49473 // = 48 << 10 + 1 + 320\n     * command_easy: 4, \"|\", 50498 // = 49 << 10 + 1 + 321\n     * command_easy: 4, \"|\", 51530 // = 50 << 10 + 1 + 329\n     * command_easy: 4, \"|\", 52561 // = 51 << 10 + 1 + 336\n     * command_easy: 4, \"|\", 53591 // = 52 << 10 + 1 + 342\n     * command_easy: 4, \"|\", 54623 // = 53 << 10 + 1 + 350\n     * command_easy: 4, \"|\", 55655 // = 54 << 10 + 1 + 358\n     * command_easy: 4, \"|\", 56680 // = 55 << 10 + 1 + 359\n     * command_easy: 4, \"|\", 57705 // = 56 << 10 + 1 + 360\n     * command_easy: 4, \"|\", 58730 // = 57 << 10 + 1 + 361\n     * command_easy: 4, \"|\", 59760 // = 58 << 10 + 1 + 367\n     * command_easy: 4, \"|\", 60791 // = 59 << 10 + 1 + 374\n     * command_easy: 4, \"|\", 61816 // = 60 << 10 + 1 + 375\n     * command_easy: 4, \"|\", 62849 // = 61 << 10 + 1 + 384\n     * command_easy: 4, \"|\", 63881 // = 62 << 10 + 1 + 392\n     * command_easy: 4, \"|\", 64919 // = 63 << 10 + 1 + 406\n     * command_easy: 4, \"|\", 65944 // = 64 << 10 + 1 + 407\n     * command_easy: 4, \"|\", 66969 // = 65 << 10 + 1 + 408\n     * command_easy: 4, \"|\", 68001 // = 66 << 10 + 1 + 416\n     * command_easy: 4, \"|\", 69031 // = 67 << 10 + 1 + 422\n     * command_easy: 4, \"|\", 70062 // = 68 << 10 + 1 + 429\n     * command_easy: 4, \"|\", 71092 // = 69 << 10 + 1 + 435\n     * command_easy: 4, \"|\", 72123 // = 70 << 10 + 1 + 442\n     * command_easy: 4, \"|\", 73154 // = 71 << 10 + 1 + 449\n     * command_easy: 4, \"|\", 74185 // = 72 << 10 + 1 + 456\n     * command_easy: 4, \"|\", 75219 // = 73 << 10 + 1 + 466\n     * command_easy: 4, \"|\", 76261 // = 74 << 10 + 1 + 484\n     * command_easy: 4, \"|\", 77291 // = 75 << 10 + 1 + 490\n     * command_easy: 4, \"|\", 78327 // = 76 << 10 + 1 + 502\n     * command_easy: 4, \"|\", 79357 // = 77 << 10 + 1 + 508\n     * command_easy: 4, \"|\", 80388 // = 78 << 10 + 1 + 515\n     * command_easy: 4, \"|\", 81418 // = 79 << 10 + 1 + 521\n     * command_easy: 4, \"|\", 82448 // = 80 << 10 + 1 + 527\n     * command_easy: 4, \"|\", 83482 // = 81 << 10 + 1 + 537\n     * command_easy: 4, \"|\", 84514 // = 82 << 10 + 1 + 545\n     * command_easy: 4, \"|\", 85546 // = 83 << 10 + 1 + 553\n     * command_easy: 4, \"|\", 86577 // = 84 << 10 + 1 + 560\n     * command_easy: 4, \"|\", 87609 // = 85 << 10 + 1 + 568\n     * command_easy: 4, \"|\", 88639 // = 86 << 10 + 1 + 574\n     * command_easy: 4, \"|\", 89670 // = 87 << 10 + 1 + 581\n     * command_easy: 4, \"|\", 90700 // = 88 << 10 + 1 + 587\n     * command_easy: 4, \"|\", 91731 // = 89 << 10 + 1 + 594\n     * command_easy: 4, \"|\", 92762 // = 90 << 10 + 1 + 601\n     * command_easy: 4, \"|\", 93795 // = 91 << 10 + 1 + 610\n     * command_easy: 4, \"|\", 94827 // = 92 << 10 + 1 + 618\n     * command_easy: 4, \"|\", 95860 // = 93 << 10 + 1 + 627\n     * command_easy: 4, \"|\", 96894 // = 94 << 10 + 1 + 637\n     * command_easy: 4, \"|\", 97924 // = 95 << 10 + 1 + 643\n     * command_easy: 4, \"|\", 98957 // = 96 << 10 + 1 + 652\n     * command_easy: 4, \"|\", 99988 // = 97 << 10 + 1 + 659\n     * command_easy: 4, \"|\", 101019 // = 98 << 10 + 1 + 666\n     * command_easy: 4, \"|\", 102051 // = 99 << 10 + 1 + 674\n     * command_easy: 4, \"|\", 103081 // = 100 << 10 + 1 + 680\n     * command_easy: 4, \"|\", 104114 // = 101 << 10 + 1 + 689\n     * command_easy: 4, \"|\", 105144 // = 102 << 10 + 1 + 695\n     * command_easy: 4, \"|\", 106175 // = 103 << 10 + 1 + 702\n     * command_easy: 4, \"|\", 107206 // = 104 << 10 + 1 + 709\n     * command_easy: 4, \"|\", 108237 // = 105 << 10 + 1 + 716\n     * command_easy: 4, \"|\", 109268 // = 106 << 10 + 1 + 723\n     * command_easy: 4, \"|\", 110301 // = 107 << 10 + 1 + 732\n     * command_easy: 4, \"|\", 111332 // = 108 << 10 + 1 + 739\n     * command_easy: 4, \"|\", 112363 // = 109 << 10 + 1 + 746\n     * command_easy: 4, \"|\", 113394 // = 110 << 10 + 1 + 753\n     * command_easy: 4, \"|\", 114426 // = 111 << 10 + 1 + 761\n     * command_easy: 4, \"|\", 115458 // = 112 << 10 + 1 + 769\n     * command_easy: 4, \"|\", 116488 // = 113 << 10 + 1 + 775\n     * command_easy: 4, \"|\", 117518 // = 114 << 10 + 1 + 781\n     * command_easy: 4, \"|\", 118549 // = 115 << 10 + 1 + 788\n     * command_easy: 4, \"|\", 119580 // = 116 << 10 + 1 + 795\n     * command_easy: 4, \"|\", 120611 // = 117 << 10 + 1 + 802\n     * command_easy: 4, \"|\", 121643 // = 118 << 10 + 1 + 810\n     * command_easy: 4, \"|\", 122675 // = 119 << 10 + 1 + 818\n     * command_easy: 4, \"|\", 123707 // = 120 << 10 + 1 + 826\n     */\n    compressed,\n    true,\n    \"|time|time | time |ime|Time |time the | time|s time |time of |Time|time \" +\n    \"and |me|tim|, time |time, | Time |time in |time to |e time |time\\\"|time.\" +\n    \"|time\\\">|time\\n|t|time]|time for |e|ti|time a |time that | Time|time. |.\" +\n    \"time| time, ||time with |time'|time from |time by ||| the time||time. Th\" +\n    \"e |TIME|time on |time as |time is ||timing |time\\n\\t|time:| time. |timee\" +\n    \"d ||||time(|Time, ||time at |timely | the time of ||| Time, |Time\\\"|.tim\" +\n    \"e(|TIME |Time\\\">|time=\\\"| time.|.com/time| the time of the |Time'|time. \" +\n    \"This |time,|.time |Time(|Time.|time not | time=\\\"|timeer | TIME |timeal \" +\n    \"| TIME|time='|TIME\\\"|Time. | time(|timeful | Time. |timeive |timeless |T\" +\n    \"IME'|timeest | Time.|TIME\\\">| time='|Time,|timeize |TIME.|\\302\\240time| \" +\n    \"time,|Time=\\\"|TIME=\\\"|timeous |TIME, |Time='| Time,| TIME=\\\"| TIME, |TIM\" +\n    \"E,|TIME(|TIME. | TIME.|TIME='| TIME. | Time=\\\"| TIME='| Time='\",\n  );\n}\n\nfunc TestBaseDictWord(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02,\n  };\n  verify(t,\n    /*\n     * // The stream consists of a base dictionary word.\n     * main_header\n     * metablock_header_easy: 4, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 1\n     */\n    compressed,\n    true,\n    \"time\",\n  );\n}\n\nfunc TestBaseDictWordFinishBlockOnRingbufferWrap(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x58, 0x32,\n    0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,\n    0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,\n    0x34, 0x34, 0x34, 0xd4, 0x00,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 32, 1 // 32 = minimal ringbuffer size\n     * command_easy: 4, \"aaaaaaaaaaaaaaaaaaaaaaaaaaaa\", 29\n     */\n    compressed,\n    true,\n    times(28, \"a\") +\n    \"time\",\n  );\n}\n\nfunc TestBaseDictWordTooLong(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02,\n  };\n  verify(t,\n    /*\n     * // Has an unmodified dictionary word that goes over the end of the\n     * // meta-block. Same as BaseDictWord, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 1, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 1\n     */\n    compressed,\n    false,\n    \"\",\n  );\n}\n\nfunc TestBlockCountMessage(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x0b, 0x00, 0x11, 0x01, 0x8c, 0xc1, 0xc5, 0x0d, 0x08, 0x00, 0x22,\n    0x65, 0xe1, 0xfc, 0xfd, 0x22, 0x2c, 0xc4, 0x00, 0x00, 0x38, 0xd8, 0x32,\n    0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x04, 0x10, 0x42, 0x00, 0x00,\n    0x00,\n  };\n  verify(t,\n    /*\n     * // Same as BlockSwitchMessage but also uses 0-bit block-type commands.\n     * main_header\n     * metablock_header_begin: 1, 0, 12, 0\n     * // two literal block types\n     * vlq_blocktypes: 2\n     * huffman_simple: 1,1,4, 1  // literal blocktype prefix code\n     * huffman_fixed: 26  // literal blockcount prefix code\n     * blockcount_easy: 2  // 2 a's\n     * // one ins/copy and dist block type\n     * vlq_blocktypes: 1\n     * vlq_blocktypes: 1\n     * ndirect: 0, 0\n     * // two MSB6 literal context modes\n     * bits: \"00\", \"00\"\n     * // two literal prefix codes\n     * vlq_blocktypes: 2\n     * // literal context map\n     * vlq_rlemax: 5\n     * huffman_simple: 0,3,7, 5,0,6  // context map RLE Huffman code\n     * // context map RLE: repeat 0 64 times, 1+5 64 times\n     * bits: \"01\", \"0\", \"11111\", \"11\", \"0\", \"11111\"\n     * bit: 1  // MTF enabled\n     * // one distance prefix code\n     * vlq_blocktypes: 1\n     * huffman_simple: 0,1,256, 97  // only a's\n     * huffman_simple: 0,1,256, 98  // only b's\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * // now comes the data\n     * command_inscopy_easy: 12, 0\n     * blockcount_easy: 2  // switch to other block type; 2 b's\n     * blockcount_easy: 5  // switch to other block type; 5 a's\n     * blockcount_easy: 1  // switch to other block type; 1 b\n     * blockcount_easy: 1  // switch to other block type; 1 a\n     * blockcount_easy: 1  // switch to other block type; 1 b\n     */\n    compressed,\n    true,\n    \"aabbaaaaabab\",\n  );\n}\n\nfunc TestBlockSwitchMessage(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x0b, 0x00, 0xd1, 0xe1, 0x01, 0xc6, 0xe0, 0xe2, 0x06, 0x04, 0x00,\n    0x91, 0xb2, 0x70, 0xfe, 0x7e, 0x11, 0x16, 0x62, 0x00, 0x00, 0x1c, 0x6c,\n    0x99, 0xc4, 0x00, 0x09, 0x00, 0x80, 0x3b, 0x6d, 0x02, 0x08, 0x82, 0x00,\n    0x00, 0x00,\n  };\n  verify(t,\n    /*\n     * // Uses blocks with 1-symbol Huffman codes that take 0 bits, so that it\n     * // is the block-switch commands that encode the message rather than actual\n     * // literals.\n     * main_header\n     * metablock_header_begin: 1, 0, 12, 0\n     * // two literal block types\n     * vlq_blocktypes: 2\n     * huffman_simple: 1,4,4, 1,0,2,3  // literal blocktype prefix code\n     * huffman_fixed: 26  // literal blockcount prefix code\n     * blockcount_easy: 2  // 2 a's\n     * // one ins/copy and dist block type\n     * vlq_blocktypes: 1\n     * vlq_blocktypes: 1\n     * ndirect: 0, 0\n     * // two MSB6 literal context modes\n     * bits: \"00\", \"00\"\n     * // two literal prefix codes\n     * vlq_blocktypes: 2\n     * // literal context map\n     * vlq_rlemax: 5\n     * huffman_simple: 0,3,7, 5,0,6  // context map RLE Huffman code\n     * // context map RLE: repeat 0 64 times, 1+5 64 times\n     * bits: \"01\", \"0\", \"11111\", \"11\", \"0\", \"11111\"\n     * bit: 1  // MTF enabled\n     * // one distance prefix code\n     * vlq_blocktypes: 1\n     * huffman_simple: 0,1,256, 97  // only a's\n     * huffman_simple: 0,1,256, 98  // only b's\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * // now comes the data\n     * command_inscopy_easy: 12, 0\n     * bits: \"0\"; blockcount_easy: 2  // switch to other block type; 2 b's\n     * bits: \"0\"; blockcount_easy: 5  // switch to other block type; 5 a's\n     * bits: \"0\"; blockcount_easy: 1  // switch to other block type; 1 b\n     * bits: \"0\"; blockcount_easy: 1  // switch to other block type; 1 a\n     * bits: \"0\"; blockcount_easy: 1  // switch to other block type; 1 b\n     */\n    compressed,\n    true,\n    \"aabbaaaaabab\",\n  );\n}\n\nfunc TestClClTreeDeficiency(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0x43, 0x01, 0xe0, 0x05, 0x88,\n    0x55, 0x90, 0x01, 0x00, 0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00,\n    0x77, 0xda, 0x28, 0x40, 0x23,\n  };\n  verify(t,\n    /*\n     * // This test is a copy of TooManySymbolsRepeated, with changed clcl table.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,3,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"101\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1\n     * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 0, 0, 101100010\n     */\n    compressed,\n    false,\n    \"aaab\",\n  );\n}\n\nfunc TestClClTreeExcess(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc3, 0x7b, 0x80, 0x58, 0x41,\n    0x06, 0x00, 0xe0, 0x60, 0xcb, 0x24, 0x06, 0x48, 0x00, 0x00, 0xdc, 0x69,\n    0xa3, 0x00, 0x8d, 0x00,\n  };\n  verify(t,\n    /*\n     * // This test is a copy of ClClTreeDeficiency, with changed clcl table.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,1,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"1\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1\n     * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 0, 0, 101100010\n     */\n    compressed,\n    false,\n    \"aaab\",\n  );\n}\n\nfunc TestComplexHuffmanCodeTwoSymbols(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x01, 0x00, 0x00, 0x80, 0x03, 0xe0, 0xa2, 0x1a, 0x00, 0x00, 0x0e,\n    0xb6, 0x4c, 0x62, 0x80, 0x04, 0x00, 0xc0, 0x9d, 0x36, 0x12, 0x04,\n  };\n  verify(t,\n    /*\n     * // This tests a complex Huffman code with only two symbols followed by a\n     * // tiny amount of content.\n     * main_header\n     * metablock_header_begin: 1, 0, 2, 0\n     * metablock_header_trivial_context\n     * // begin of literal Huffman tree. The tree has symbol length 1 for \"a\",\n     * // symbol length 1 for \"b\" and symbol length 0 for all others.\n     * hskip: 0\n     * clcl_ordered: 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n     * set_prefix_cl_rle: \"\", \"0\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"1\"\n     * cl_rle_rep_0: 97\n     * cl_rle: 1  // literal number 97, that is, the letter 'a'\n     * cl_rle: 1  // literal number 98, that is, the letter 'b'\n     * // end of literal Huffman tree\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 2, 0\n     * command_literal_bits: 0, 1  // a followed by b\n     */\n    compressed,\n    true,\n    \"ab\",\n  );\n}\n\nfunc TestCompressedUncompressedShortCompressed(t *testing.T) {\n  compressed := []uint8{\n    0x8b, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x66, 0x6f,\n    0x1b, 0x0a, 0x50, 0x00, 0x10, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x31,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0,\n    0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x24, 0x00,\n  };\n  verify(t,\n    /*\n     * main_header: 22\n     * metablock_header_easy: 1022, 0\n     * command_easy: 1021, \"a\", 1 // 1022 x \"a\"\n     * metablock_uncompressed: \"bbbbbb\"\n     * metablock_header_easy: 4, 1\n     * command_easy: 4, \"\", 1 // 6 + 4 = 10 x \"b\"\n     */\n    compressed,\n    true,\n    times(1022, \"a\") +\n    times(10, \"b\"),\n  );\n}\n\nfunc TestCompressedUncompressedShortCompressedSmallWindow(t *testing.T) {\n  compressed := []uint8{\n    0x21, 0xf4, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00,\n    0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x34, 0x7b,\n    0xdb, 0x50, 0x80, 0x02, 0x80, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x31,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0,\n    0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x24, 0x00,\n  };\n  verify(t,\n    /*\n     * main_header: 10\n     * metablock_header_easy: 1022, 0\n     * command_easy: 1021, \"a\", 1 // 1022 x \"a\"\n     * metablock_uncompressed: \"bbbbbb\"\n     * metablock_header_easy: 4, 1\n     * command_easy: 4, \"\", 1 // 6 + 4 = 10 x \"b\"\n     */\n    compressed,\n    true,\n    times(1022, \"a\") +\n    times(10, \"b\"),\n  );\n}\n\nfunc TestCopyLengthTooLong(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x11, 0x86,\n    0x02,\n  };\n  verify(t,\n    /*\n     * // Has a copy length that goes over the end of the meta-block.\n     * // Same as OneCommand, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 2, 1\n     * command_easy: 2, \"a\", 1\n     */\n    compressed,\n    false,\n    \"\",\n  );\n}\n\nfunc TestCopyTooLong(t *testing.T) {\n  compressed := []uint8{\n    0xa1, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00,\n    0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x34, 0xab,\n    0xdb, 0x50, 0x00,\n  };\n  verify(t,\n    /*\n     * // Has a copy length that goes over the end of the meta-block,\n     * // with a ringbuffer wrap.\n     * main_header: 10\n     * metablock_header_easy: 2, 1\n     * command_easy: 1024, \"a\", 1\n     */\n    compressed,\n    false,\n    \"\",\n  );\n}\n\nfunc TestCustomHuffmanCode(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc3, 0x3d, 0x80, 0x58, 0x82,\n    0x08, 0x00, 0xc0, 0xc1, 0x96, 0x49, 0x0c, 0x90, 0x00, 0x00, 0xb8, 0xd3,\n    0x46, 0x01, 0x1a, 0x01,\n  };\n  verify(t,\n    /*\n     * // This tests a small hand crafted Huffman code followed by a tiny amount\n     * // of content. This tests if the bit reader detects the end correctly even\n     * // with tiny content after a larger Huffman tree encoding.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * // begin of literal Huffman tree. The tree has symbol length 1 for \"a\",\n     * // symbol length 8 for null, symbol length 9 for all others. The length 1\n     * // for a is chosen on purpose here, the others must be like that to\n     * // fulfill the requirement that sum of 32>>length is 32768.\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,2,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"10\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1  // literal number 97, that is, the letter 'a'\n     * cl_rle_rep: 9, 158\n     * // end of literal Huffman tree\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * // Here is how the code \"101100010\" for b is derived: remember that a has\n     * // symbol length 1, null has symbol length 8, the rest 9. So in the\n     * // canonical Huffman code, the code for \"a\" is \"0\", for null is\n     * // \"10000000\". The next value has \"100000010\" (cfr. the rules of canonical\n     * // prefix code). Counting upwards +95 from there, the value \"@\" (ASCII 96,\n     * // before \"a\") has \"101100001\", and so b, the next 9-bit symbol, has the\n     * // next binary value \"101100010\".\n     * command_literal_bits: 0, 0, 0, 101100010  // 3 a's followed by a b\n     */\n    compressed,\n    true,\n    \"aaab\",\n  );\n}\n\nfunc TestDistanceLut(t *testing.T) {\n  compressed := []uint8{\n    0x8b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x99, 0x86,\n    0x46, 0xc6, 0x22, 0x14, 0x00, 0x00, 0x03, 0x00, 0x00, 0x1c, 0xa7, 0x6d,\n    0x00, 0x00, 0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x21, 0x91, 0x69, 0x62,\n    0x6a, 0x36,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 6, 0  // implicit ndirect: 0, 0\n     * command_easy: 3, \"abc\", 3  // Insert \"abc\", copy \"abc\"\n     * metablock_header_begin: 0, 0, 6, 0\n     * vlq_blocktypes: 1  // num litetal block types\n     * vlq_blocktypes: 1  // num command block types\n     * vlq_blocktypes: 1  // num distance block types\n     * ndirect: 3, 0\n     * bits: \"00\"  // literal context modes\n     * vlq_blocktypes: 1  // num literal Huffman trees\n     * // command has no context -> num trees == num block types\n     * vlq_blocktypes: 1  // num distance Huffman trees\n     * huffman_fixed: 256\n     * huffman_fixed: 704\n     * huffman_simple: 0,1,67, 18\n     * command_inscopy_easy: 3, 3  // Insert 3, copy 3\n     * command_literals_easy: \"def\"\n     * // 0-bit Huffman code : dcode = 18 -> third direct distance\n     * metablock_lastempty  // make sure that no extra distance bits are read\n     */\n    compressed,\n    true,\n    \"abcabcdefdef\",\n  );\n}\n\nfunc TestEmpty(t *testing.T) {\n  compressed := []uint8{\n    0x3b,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_lastempty\n     */\n    compressed,\n    true,\n    \"\",\n  );\n}\n\nfunc TestHelloWorld(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x00, 0x59,\n    0x98, 0xda, 0xd8, 0xd8, 0x13, 0xb8, 0xdb, 0x3b, 0xd9, 0x98, 0x00,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_fixed: \"hello world\", 1\n     */\n    compressed,\n    true,\n    \"hello world\",\n  );\n}\n\nfunc TestInsertTooLong(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x09, 0x86,\n    0x46,\n  };\n  verify(t,\n    /*\n     * // Has an insert length that goes over the end of the meta-block.\n     * // Same as OneInsert, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 1, 1\n     * command_easy: 0, \"ab\"\n     */\n    compressed,\n    false,\n    \"\",\n  );\n}\n\nfunc TestIntactDistanceRingBuffer0(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0xa1, 0x80,\n    0x20, 0x00,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 11, 1\n     * command_inscopy_easy: 0, 7 // \"himself\" from dictionary\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // copy \"self\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    \"himselfself\",\n  );\n}\n\nfunc TestIntactDistanceRingBuffer1(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x09, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x21, 0xa0,\n    0x20, 0x00,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 10, 1\n     * command_inscopy_easy: 0, 6 // \"scroll\" from dictionary\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // copy \"roll\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    \"scrollroll\",\n  );\n}\n\nfunc TestIntactDistanceRingBuffer2(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x80,\n    0x20, 0x50, 0x10, 0x24, 0x08, 0x06,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 16, 1\n     * command_inscopy_easy: 0, 4 // \"left\" from dictionary (index = 3 = 4 - 1)\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 11 - 5)\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 15 - 9)\n     * bits: \"010000\" // distance = 15 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"left\" from dictionary (index = 3 = 16 - 13)\n     * bits: \"110000\" // distance = 16 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    \"leftdatadataleft\",\n  );\n}\n\nfunc TestIntactDistanceRingBufferNoDistanceValue0(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x17, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x40, 0x82,\n    0x40, 0x41, 0x90, 0x20, 0x58, 0x18, 0x00,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 24, 1\n     * // cmd is {ins_extra, copy_extra, distance_code, ctx, ins_off, copy_off}\n     * // cmd.2 = {0x00, 0x00, 0, 0x02, 0x0000, 0x0004}\n     * // cmd.2 = no insert, copy length = 4, distance_code = 0 (last distance)\n     * command_short: 2 // \"left\" from dictionary (index = 3 = 4 - 1)\n     * // Check that RB is untouched after the first command...\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 11 - 5)\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 15 - 9)\n     * bits: \"010000\" // distance = 15 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"left\" from dictionary (index = 3 = 16 - 13)\n     * bits: \"110000\" // distance = 16 from RB; RB remains intact\n     * command_inscopy_easy: 0, 8 // copy \"leftleft\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    \"leftdatadataleftleftleft\",\n  );\n}\n\nfunc TestIntactDistanceRingBufferNoDistanceValue1(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x19, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0xc0, 0x82,\n    0x41, 0x41, 0x90, 0x20, 0x58, 0x18, 0x00,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 26, 1\n     * // cmd is {ins_extra, copy_extra, distance_code, ctx, ins_off, copy_off}\n     * // cmd.3 = {0x00, 0x00, 0, 0x03, 0x0000, 0x0005}\n     * // cmd.3 = no insert, copy length = 5, distance_code = 0 (last distance)\n     * command_short: 3 // \"world\" from dictionary (index = 3 = 4 - 1)\n     * // Check that RB is untouched after the first command...\n     * command_inscopy_easy: 0, 5 // \"white\" from dictionary (index = 5 = 11 - 6)\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"back\" from dictionary (index = 4 = 15 - 11)\n     * bits: \"010000\" // distance = 15 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"down\" from dictionary (index = 1 = 16 - 15)\n     * bits: \"110000\" // distance = 16 from RB; RB remains intact\n     * command_inscopy_easy: 0, 8 // copy \"downdown\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    \"worldwhitebackdowndowndown\",\n  );\n}\n\nfunc TestInvalidNoLastMetablock(t *testing.T) {\n  compressed := []uint8{\n    0x0b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x00, 0x13,\n    0x59, 0x98, 0xda, 0xd8, 0xd8, 0x13, 0xb8, 0xdb, 0x3b, 0xd9, 0x98, 0xe8,\n    0x00,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_fixed: \\\"hello world\\\", 0\n     */\n    compressed,\n    false,\n    \"hello world\",\n  );\n}\n\nfunc TestInvalidNoMetaBlocks(t *testing.T) {\n  compressed := []uint8{\n    0x0b,\n  };\n  verify(t,\n    /*\n     * main_header\n     */\n    compressed,\n    false,\n    \"\",\n  );\n}\n\nfunc TestInvalidTooFarDist(t *testing.T) {\n  compressed := []uint8{\n    0xa1, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00,\n    0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0xe8, 0xe0,\n    0x62, 0x6f, 0x4f, 0x60, 0x66, 0xe8, 0x44, 0x38, 0x0f, 0x09, 0x0d,\n  };\n  verify(t,\n    /*\n     * main_header: 10\n     * metablock_header_begin: 1, 0, 10, 0\n     * metablock_header_trivial_context\n     * huffman_fixed: 256\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_easy: 2, \"too far!\", 1000000  // distance too far for 10 wbits\n     */\n    compressed,\n    false,\n    \"\",\n  );\n}\n\nfunc TestInvalidTooLargeContextMap(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x00, 0x00, 0xd1, 0xe1, 0x01, 0xc6, 0xe0, 0xe2, 0x06, 0x00, 0x00,\n    0x91, 0xb2, 0x70, 0xfe, 0xfb, 0x45, 0x58, 0x88, 0x01, 0x00, 0x70, 0xb0,\n    0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x01,\n  };\n  verify(t,\n    /*\n     * // Has a repeat code a context map that makes the size too big -> invalid.\n     * main_header\n     * metablock_header_begin: 1, 0, 1, 0\n     * // two literal block types\n     * vlq_blocktypes: 2\n     * huffman_simple: 1,4,4, 1,0,2,3  // literal blocktype prefix code\n     * huffman_fixed: 26  // literal blockcount prefix code\n     * blockcount_easy: 1\n     * // one ins/copy and dist block type\n     * vlq_blocktypes: 1\n     * vlq_blocktypes: 1\n     * ndirect: 0, 0\n     * // two MSB6 literal context modes\n     * bits: \"00\", \"00\"\n     * // two literal prefix codes\n     * vlq_blocktypes: 2\n     * // literal context map\n     * vlq_rlemax: 5\n     * huffman_simple: 0,3,7, 5,0,6  // context map RLE Huffman code\n     * // Too long context map RLE: repeat 0 64 times, 1+5 65 times, that is 129\n     * // values which is 1 too much.\n     * bits: \"01\", \"0\", \"11111\", \"11\", \"11\", \"0\", \"11111\"\n     * bit: 1  // MTF enabled\n     * // one distance prefix code\n     * vlq_blocktypes: 1\n     * huffman_simple: 0,1,256, 97  // only a's\n     * huffman_simple: 0,1,256, 98  // only b's\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * // now comes the data\n     * command_inscopy_easy: 1, 0\n     */\n    compressed,\n    false,\n    \"a\",\n  );\n}\n\nfunc TestInvalidTransformType(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x2d,\n    0x01, 0x19,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 4, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 123905 // = 121 << 10 + 1\n     */\n    compressed,\n    false,\n    \"\",\n  );\n}\n\nfunc TestInvalidWindowBits9(t *testing.T) {\n  compressed := []uint8{\n    0x91, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00,\n    0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0xc8, 0x20,\n    0x32, 0xd4, 0x01,\n  };\n  verify(t,\n    /*\n     * main_header: 9\n     * metablock_fixed: \\\"a\\\", 1\n     */\n    compressed,\n    false,\n    \"a\",\n  );\n}\n\nfunc TestManyTinyMetablocks(t *testing.T) {\n  compressed := []uint8{\n    0x0b, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x34,\n  };\n  verify(t,\n    /*\n     * main_header\n     * repeat: 300\n     *   metablock_uncompressed: \"a\"\n     *   metablock_fixed: \"b\"\n     * end_repeat\n     * metablock_lastempty\n     */\n    compressed,\n    true,\n    times(300, \"ab\"),\n  );\n}\n\nfunc TestNegativeDistance(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02,\n    0x01, 0x42, 0x01, 0x42, 0x01, 0x42, 0x01, 0x42, 0x01, 0x42, 0x01, 0x1c,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 16, 1\n     * command_inscopy_easy: 0, 4 // time\n     * command_dist_easy: 1\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2 // All rb items are 2 now\n     * command_inscopy_easy: 0, 2\n     * bits: \"011100\" // 15 -> distance = rb[idx + 2] - 3\n     */\n    compressed,\n    false,\n    \"timemememememeXX\",\n  );\n}\n\nfunc TestNegativeRemainingLenBetweenMetablocks(t *testing.T) {\n  compressed := []uint8{\n    0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x09, 0x86,\n    0x46, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x91, 0x60,\n    0x68, 0x04,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 1, 0\n     * command_easy: 0, \"ab\"  // remaining length == -1 -> invalid stream\n     * metablock_header_easy: 2, 1\n     * command_easy: 0, \"ab\"\n     */\n    compressed,\n    false,\n    \"abab\",\n  );\n}\n\nfunc TestOneCommand(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x11, 0x86,\n    0x02,\n  };\n  verify(t,\n    /*\n     * // The stream consists of one command with insert and copy.\n     * main_header\n     * metablock_header_easy: 3, 1\n     * command_easy: 2, \"a\", 1\n     */\n    compressed,\n    true,\n    \"aaa\",\n  );\n}\n\nfunc TestOneInsert(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x09, 0x86,\n    0x46,\n  };\n  verify(t,\n    /*\n     * // The stream consists of one half command with insert only.\n     * main_header\n     * metablock_header_easy: 2, 1\n     * command_easy: 0, \"ab\"\n     */\n    compressed,\n    true,\n    \"ab\",\n  );\n}\n\nfunc TestPeculiarWrap(t *testing.T) {\n  compressed := []uint8{\n    0x21, 0xfc, 0x1f, 0x00, 0x00, 0xa1, 0x12, 0x82, 0x04, 0x60, 0x1d, 0x00,\n    0xca, 0xfe, 0xba, 0xbe, 0xde, 0xad, 0xbe, 0xef, 0x21, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03,\n    0x24, 0x00, 0x00, 0xee, 0xb4, 0x91, 0x61, 0x68, 0x64, 0x0c,\n  };\n  verify(t,\n    /*\n     * main_header: 10\n     * // See ZeroCostCommand\n     * metablock_header_begin: 0, 0, 2048, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 0,1,256, 42\n     * huffman_simple: 0,1,704, 130\n     * huffman_simple: 0,1,64, 0\n     * // Metadata block; at least 8 bytes long\n     * bits: \"0\", \"11\", \"0\", \"01\", \"00000111\"\n     * byte_boundary\n     * bits: \"11001010\", \"11111110\", \"10111010\", \"10111110\"\n     * bits: \"11011110\", \"10101101\", \"10111110\", \"11101111\"\n     * metablock_header_easy: 3, 1\n     * command_easy: 0, \"abc\", 0\n     */\n    compressed,\n    true,\n    times(512, \"left\") +\n    \"abc\",\n  );\n}\n\nfunc TestSimplePrefix(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,\n    0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 1,4,256, 97,98,99,100  // ASCII codes for a, b, c, d\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 10, 110, 111  // a, b, c, d\n     */\n    compressed,\n    true,\n    \"abcd\",\n  );\n}\n\nfunc TestSimplePrefixDuplicateSymbols(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc2, 0xc4, 0x02, 0x00, 0x70,\n    0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 1,4,256, 97,98,97,98  // ASCII codes for a, b, a, b\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 10, 110, 111  // a, b, a, b\n     */\n    compressed,\n    false,\n    \"abab\",\n  );\n}\n\nfunc TestSimplePrefixOutOfRangeSymbols(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x4d, 0xff, 0xef,\n    0x7f, 0xff, 0xfc, 0x07, 0x00, 0xb8, 0xd3, 0x06,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_fixed: 256\n     * huffman_simple: 1,4,704, 1023,1022,1021,1020\n     * huffman_fixed: 64\n     */\n    compressed,\n    false,\n    \"\",\n  );\n}\n\nfunc TestSimplePrefixPlusExtraData(t *testing.T) {\n  t.Skip(\"nevermind\")\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,\n    0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d,\n    0x55, 0xaa,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 1,4,256, 97,98,99,100  // ASCII codes for a, b, c, d\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 10, 110, 111  // a, b, c, d\n     * byte_boundary\n     * bits: \"01010101\", \"10101010\"\n     */\n    compressed,\n    true,\n    \"abcd\",\n  );\n}\n\nfunc TestStressReadDistanceExtraBits(t *testing.T) {\n  compressed := []uint8{\n    0x4f, 0xfe, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00,\n    0x00, 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0xf6,\n    0x69, 0xef, 0xff, 0x0c, 0x8d, 0x8c, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0xa8, 0xaa, 0xef, 0xab, 0xaa, 0x7f, 0x24, 0x16, 0x35, 0x8f, 0xac, 0x9e,\n    0x3d, 0xf7, 0xf3, 0xe3, 0x0a, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x78, 0x01,\n    0x08, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41,\n    0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,\n    0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32,\n    0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45,\n    0x46, 0x03,\n  };\n  verify(t,\n    /*\n     * main_header: 24\n     * metablock_header_easy: 8388605, 0  // 2^23 - 3 = shortest 22-bit distance\n     * command_easy: 8388602, \"abc\", 1\n     * metablock_header_begin: 0, 0, 3, 0\n     * vlq_blocktypes: 1  // num litetal block types\n     * vlq_blocktypes: 1  // num command block types\n     * vlq_blocktypes: 1  // num distance block types\n     * ndirect: 0, 0\n     * bits: \"00\"  // literal context modes\n     * vlq_blocktypes: 1  // num literal Huffman trees\n     * // command has no context -> num trees == num block types\n     * vlq_blocktypes: 1  // num distance Huffman trees\n     * huffman_fixed: 256\n     * huffman_fixed: 704\n     * // Begin of distance Huffman tree. First 15 codes have lengths 1 to 15.\n     * // Symbol that corresponds to first half of 22-bit distance range is also\n     * // 15. All other symbols are 0.\n     * hskip: 0\n     * clcl_ordered: 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4, 5,5,5,5\n     * set_prefix_cl_rle: \"0000\", \"0001\", \"0010\", \"0011\", \\\n     *                    \"0100\", \"0101\", \"0110\", \"0111\", \\\n     *                    \"1000\", \"1001\", \"1010\", \"1011\", \\\n     *                    \"1100\", \"1101\", \\\n     *                    \"11100\", \"11101\", \"11110\", \"11111\"\n     * cl_rle: 1\n     * cl_rle: 2\n     * cl_rle: 3\n     * cl_rle: 4\n     * cl_rle: 5\n     * cl_rle: 6\n     * cl_rle: 7\n     * cl_rle: 8\n     * cl_rle: 9\n     * cl_rle: 10\n     * cl_rle: 11\n     * cl_rle: 12\n     * cl_rle: 13\n     * cl_rle: 14\n     * cl_rle: 15\n     * cl_rle_rep_0: 43\n     * cl_rle: 15  // literal number 97, that is, the letter 'a'\n     * // end of literal Huffman tree\n     * command_inscopy_easy: 0, 3  // Insert 0, copy 3\n     * // 15 bits of distance code plus 22 extra bits\n     * command_dist_bits: \"111111111111111\", \"0000000000000000000000\"\n     * metablock_uncompressed: \"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\"\n     * metablock_lastempty\n     */\n    compressed,\n    true,\n    \"abc\" +\n    times(8388602, \"c\") +\n    \"abc\" +\n    times(3, \"0123456789ABCDEF\"),\n  );\n}\n\nfunc TestTooManySymbolsRepeated(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc3, 0x3d, 0x80, 0x58, 0x82,\n    0x0c, 0x00, 0xc0, 0xc1, 0x96, 0x49, 0x0c, 0x90, 0x00, 0x00, 0xb8, 0xd3,\n    0x46, 0x01, 0x1a, 0x01,\n  };\n  verify(t,\n    /*\n     * // This test is a copy of CustomHuffmanCode, with changed repeat count.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,2,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"10\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1\n     * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 0, 0, 101100010\n     */\n    compressed,\n    false,\n    \"aaab\",\n  );\n}\n\nfunc TestTransformedDictWord(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x09,\n    0x01, 0x01,\n  };\n  verify(t,\n    /*\n     * // The stream consists of a transformed dictionary word.\n     * main_header\n     * metablock_header_easy: 9, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 5121  // 5 << 10 + 1\n     */\n    compressed,\n    true,\n    \"time the \",\n  );\n}\n\nfunc TestTransformedDictWordTooLong(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x09,\n    0x01, 0x01,\n  };\n  verify(t,\n    /*\n     * // Has a transformed dictionary word that goes over the end of the\n     * // meta-block, but the base dictionary word fits in the meta-block.\n     * // Same as TransformedDictWord, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 4, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 5121  // 5 << 10 + 1\n     */\n    compressed,\n    false,\n    \"\",\n  );\n}\n\nfunc TestZeroCostCommand(t *testing.T) {\n  compressed := []uint8{\n    0xa1, 0xf8, 0x1f, 0x00, 0x00, 0xa1, 0x12, 0x82, 0x04, 0x00,\n  };\n  verify(t,\n    /*\n     * main_header: 10\n     * metablock_header_begin: 1, 0, 1024, 0  // last, not empty, length, compressed\n     * metablock_header_trivial_context\n     * huffman_simple: 0,1,256, 42  // literal: any\n     * huffman_simple: 0,1,704, 130  // command: insert = 0, copy = 4, distance_code = -1\n     * huffman_simple: 0,1,64, 0 // distance: last\n     * // 256 0-bit commands with direct distances\n     */\n    compressed,\n    true,\n    times(256, \"left\"),\n  );\n}\n\nfunc TestZeroCostLiterals(t *testing.T) {\n  compressed := []uint8{\n    0x9b, 0xff, 0xff, 0xff, 0x00, 0x20, 0x54, 0x00, 0x00, 0x38, 0xd8, 0x32,\n    0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0xcc, 0xe1, 0x7b, 0xfa, 0x0f,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 16777216, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 0,1,256, 42  // Single symbol alphabet\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 16777216, 0\n     * // 16777216 times 0 bits\n     */\n    compressed,\n    true,\n    times(16777216, \"*\"),\n  );\n}\n\n/* GENERATED CODE END */\n"
  },
  {
    "path": "go/cbrotli/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\", \"go_test\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nlicenses([\"notice\"])  # MIT\n\ngo_library(\n    name = \"cbrotli\",\n    srcs = [\n        \"reader.go\",\n        \"writer.go\",\n    ],\n    cdeps = [\n        \"@org_brotli//:brotlidec\",\n        \"@org_brotli//:brotlienc\",\n    ],\n    cgo = True,\n    importpath = \"github.com/google/brotli/go/cbrotli\",\n)\n\ngo_test(\n    name = \"cbrotli_test\",\n    size = \"small\",\n    srcs = [\"cbrotli_test.go\"],\n    deps = [\":cbrotli\"],\n)\n\ngo_test(\n    name = \"synth_test\",\n    size = \"small\",\n    srcs = [\"synth_test.go\"],\n    deps = [\":cbrotli\"],\n)\n"
  },
  {
    "path": "go/cbrotli/cbrotli_test.go",
    "content": "// Copyright 2016 Google Inc. All Rights Reserved.\n//\n// Distributed under MIT license.\n// See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\npackage cbrotli_test\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"math\"\n\t\"math/rand\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/google/brotli/go/cbrotli\"\n)\n\nfunc checkCompressedData(compressedData, wantOriginalData []byte) error {\n\tuncompressed, err := cbrotli.Decode(compressedData)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"brotli decompress failed: %v\", err)\n\t}\n\tif !bytes.Equal(uncompressed, wantOriginalData) {\n\t\tif len(wantOriginalData) != len(uncompressed) {\n\t\t\treturn fmt.Errorf(\"\"+\n\t\t\t\t\"Data doesn't uncompress to the original value.\\n\"+\n\t\t\t\t\"Length of original: %v\\n\"+\n\t\t\t\t\"Length of uncompressed: %v\",\n\t\t\t\tlen(wantOriginalData), len(uncompressed))\n\t\t}\n\t\tfor i := range wantOriginalData {\n\t\t\tif wantOriginalData[i] != uncompressed[i] {\n\t\t\t\treturn fmt.Errorf(\"\"+\n\t\t\t\t\t\"Data doesn't uncompress to the original value.\\n\"+\n\t\t\t\t\t\"Original at %v is %v\\n\"+\n\t\t\t\t\t\"Uncompressed at %v is %v\",\n\t\t\t\t\ti, wantOriginalData[i], i, uncompressed[i])\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc TestEncoderNoWrite(t *testing.T) {\n\tout := bytes.Buffer{}\n\te := cbrotli.NewWriter(&out, cbrotli.WriterOptions{Quality: 5})\n\tif err := e.Close(); err != nil {\n\t\tt.Errorf(\"Close()=%v, want nil\", err)\n\t}\n\t// Check Write after close.\n\tif _, err := e.Write([]byte(\"hi\")); err == nil {\n\t\tt.Errorf(\"No error after Close() + Write()\")\n\t}\n}\n\nfunc TestEncoderEmptyWrite(t *testing.T) {\n\tout := bytes.Buffer{}\n\te := cbrotli.NewWriter(&out, cbrotli.WriterOptions{Quality: 5})\n\tn, err := e.Write([]byte(\"\"))\n\tif n != 0 || err != nil {\n\t\tt.Errorf(\"Write()=%v,%v, want 0, nil\", n, err)\n\t}\n\tif err := e.Close(); err != nil {\n\t\tt.Errorf(\"Close()=%v, want nil\", err)\n\t}\n}\n\nfunc TestWriter(t *testing.T) {\n\t// Test basic encoder usage.\n\tinput := []byte(\"<html><body><H1>Hello world</H1></body></html>\")\n\tout := bytes.Buffer{}\n\te := cbrotli.NewWriter(&out, cbrotli.WriterOptions{Quality: 1})\n\tin := bytes.NewReader([]byte(input))\n\tn, err := io.Copy(e, in)\n\tif err != nil {\n\t\tt.Errorf(\"Copy Error: %v\", err)\n\t}\n\tif int(n) != len(input) {\n\t\tt.Errorf(\"Copy() n=%v, want %v\", n, len(input))\n\t}\n\tif err := e.Close(); err != nil {\n\t\tt.Errorf(\"Close Error after copied %d bytes: %v\", n, err)\n\t}\n\tif err := checkCompressedData(out.Bytes(), input); err != nil {\n\t\tt.Error(err)\n\t}\n}\n\nfunc TestEncoderStreams(t *testing.T) {\n\t// Test that output is streamed.\n\t// Adjust window size to ensure the encoder outputs at least enough bytes\n\t// to fill the window.\n\tconst lgWin = 16\n\twindowSize := int(math.Pow(2, lgWin))\n\tinput := make([]byte, 8*windowSize)\n\trand.Read(input)\n\tout := bytes.Buffer{}\n\te := cbrotli.NewWriter(&out, cbrotli.WriterOptions{Quality: 11, LGWin: lgWin})\n\thalfInput := input[:len(input)/2]\n\tin := bytes.NewReader(halfInput)\n\n\tn, err := io.Copy(e, in)\n\tif err != nil {\n\t\tt.Errorf(\"Copy Error: %v\", err)\n\t}\n\n\t// We've fed more data than the sliding window size. Check that some\n\t// compressed data has been output.\n\tif out.Len() == 0 {\n\t\tt.Errorf(\"Output length is 0 after %d bytes written\", n)\n\t}\n\tif err := e.Close(); err != nil {\n\t\tt.Errorf(\"Close Error after copied %d bytes: %v\", n, err)\n\t}\n\tif err := checkCompressedData(out.Bytes(), halfInput); err != nil {\n\t\tt.Error(err)\n\t}\n}\n\nfunc TestEncoderLargeInput(t *testing.T) {\n\tinput := make([]byte, 1000000)\n\trand.Read(input)\n\tout := bytes.Buffer{}\n\te := cbrotli.NewWriter(&out, cbrotli.WriterOptions{Quality: 5})\n\tin := bytes.NewReader(input)\n\n\tn, err := io.Copy(e, in)\n\tif err != nil {\n\t\tt.Errorf(\"Copy Error: %v\", err)\n\t}\n\tif int(n) != len(input) {\n\t\tt.Errorf(\"Copy() n=%v, want %v\", n, len(input))\n\t}\n\tif err := e.Close(); err != nil {\n\t\tt.Errorf(\"Close Error after copied %d bytes: %v\", n, err)\n\t}\n\tif err := checkCompressedData(out.Bytes(), input); err != nil {\n\t\tt.Error(err)\n\t}\n}\n\nfunc TestEncoderFlush(t *testing.T) {\n\tconst payload = 32766 // Enough to force encoder emit 2 chunks\n\tinput := make([]byte, payload)\n\trand.Read(input)\n\tout := bytes.Buffer{}\n\te := cbrotli.NewWriter(&out, cbrotli.WriterOptions{Quality: 5})\n\tin := bytes.NewReader(input)\n\t_, err := io.Copy(e, in)\n\tif err != nil {\n\t\tt.Fatalf(\"Copy Error: %v\", err)\n\t}\n\tif err := e.Flush(); err != nil {\n\t\tt.Fatalf(\"Flush(): %v\", err)\n\t}\n\tif out.Len() == 0 {\n\t\tt.Fatalf(\"0 bytes written after Flush()\")\n\t}\n\tdecompressed := make([]byte, payload)\n\treader := cbrotli.NewReader(bytes.NewReader(out.Bytes()))\n\tn, err := reader.Read(decompressed)\n\tif n >= len(decompressed) || err != nil {\n\t\tt.Errorf(\"Expected {<%v, nil}, but got {%v, %v}\", len(decompressed), n, err)\n\t}\n\tm, err := reader.Read(decompressed[n:])\n\tn += m\n\tif n != len(decompressed) || err != nil {\n\t\tt.Errorf(\"Expected {%v, nil}, but got {%v, %v}\", len(decompressed), n, err)\n\t}\n\treader.Close()\n\tif !bytes.Equal(decompressed, input) {\n\t\tt.Errorf(\"\"+\n\t\t\t\"Decompress after flush: %v\\n\"+\n\t\t\t\"%q\\n\"+\n\t\t\t\"want:\\n%q\",\n\t\t\terr, decompressed, input)\n\t}\n\tif err := e.Close(); err != nil {\n\t\tt.Errorf(\"Close(): %v\", err)\n\t}\n}\n\ntype readerWithTimeout struct {\n\tio.ReadCloser\n}\n\nfunc (r readerWithTimeout) Read(p []byte) (int, error) {\n\ttype result struct {\n\t\tn   int\n\t\terr error\n\t}\n\tch := make(chan result)\n\tgo func() {\n\t\tn, err := r.ReadCloser.Read(p)\n\t\tch <- result{n, err}\n\t}()\n\tselect {\n\tcase result := <-ch:\n\t\treturn result.n, result.err\n\tcase <-time.After(5 * time.Second):\n\t\treturn 0, fmt.Errorf(\"read timed out\")\n\t}\n}\n\nfunc TestDecoderStreaming(t *testing.T) {\n\tpr, pw := io.Pipe()\n\twriter := cbrotli.NewWriter(pw, cbrotli.WriterOptions{Quality: 5, LGWin: 20})\n\treader := readerWithTimeout{cbrotli.NewReader(pr)}\n\tdefer func() {\n\t\tif err := reader.Close(); err != nil {\n\t\t\tt.Errorf(\"reader.Close: %v\", err)\n\t\t}\n\t\tgo ioutil.ReadAll(pr) // swallow the \"EOF\" token from writer.Close\n\t\tif err := writer.Close(); err != nil {\n\t\t\tt.Errorf(\"writer.Close: %v\", err)\n\t\t}\n\t}()\n\n\tch := make(chan []byte)\n\terrch := make(chan error)\n\tgo func() {\n\t\tfor {\n\t\t\tsegment, ok := <-ch\n\t\t\tif !ok {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif n, err := writer.Write(segment); err != nil || n != len(segment) {\n\t\t\t\terrch <- fmt.Errorf(\"write=%v,%v, want %v,%v\", n, err, len(segment), nil)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif err := writer.Flush(); err != nil {\n\t\t\t\terrch <- fmt.Errorf(\"flush: %v\", err)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}()\n\tdefer close(ch)\n\n\tsegments := [...][]byte{\n\t\t[]byte(\"first\"),\n\t\t[]byte(\"second\"),\n\t\t[]byte(\"third\"),\n\t}\n\tfor k, segment := range segments {\n\t\tt.Run(fmt.Sprintf(\"Segment%d\", k), func(t *testing.T) {\n\t\t\tselect {\n\t\t\tcase ch <- segment:\n\t\t\tcase err := <-errch:\n\t\t\t\tt.Fatalf(\"write: %v\", err)\n\t\t\tcase <-time.After(5 * time.Second):\n\t\t\t\tt.Fatalf(\"timed out\")\n\t\t\t}\n\t\t\twantLen := len(segment)\n\t\t\tgot := make([]byte, wantLen)\n\t\t\tif n, err := reader.Read(got); err != nil || n != wantLen || !bytes.Equal(got, segment) {\n\t\t\t\tt.Fatalf(\"read[%d]=%q,%v,%v, want %q,%v,%v\", k, got, n, err, segment, wantLen, nil)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestReader(t *testing.T) {\n\tcontent := bytes.Repeat([]byte(\"hello world!\"), 10000)\n\tencoded, _ := cbrotli.Encode(content, cbrotli.WriterOptions{Quality: 5})\n\tr := cbrotli.NewReader(bytes.NewReader(encoded))\n\tvar decodedOutput bytes.Buffer\n\tn, err := io.Copy(&decodedOutput, r)\n\tif err != nil {\n\t\tt.Fatalf(\"Copy(): n=%v, err=%v\", n, err)\n\t}\n\tif err := r.Close(); err != nil {\n\t\tt.Errorf(\"Close(): %v\", err)\n\t}\n\tif got := decodedOutput.Bytes(); !bytes.Equal(got, content) {\n\t\tt.Errorf(\"\"+\n\t\t\t\"Reader output:\\n\"+\n\t\t\t\"%q\\n\"+\n\t\t\t\"want:\\n\"+\n\t\t\t\"<%d bytes>\",\n\t\t\tgot, len(content))\n\t}\n\tbuf := make([]byte, 4)\n\tif _, err := r.Read(buf); err == nil {\n\t\tt.Errorf(\"Read-after-Close shoule have returned error\")\n\t}\n}\n\nfunc TestDecode(t *testing.T) {\n\tcontent := bytes.Repeat([]byte(\"hello world!\"), 10000)\n\tencoded, _ := cbrotli.Encode(content, cbrotli.WriterOptions{Quality: 5})\n\tdecoded, err := cbrotli.Decode(encoded)\n\tif err != nil {\n\t\tt.Errorf(\"Decode: %v\", err)\n\t}\n\tif !bytes.Equal(decoded, content) {\n\t\tt.Errorf(\"\"+\n\t\t\t\"Decode content:\\n\"+\n\t\t\t\"%q\\n\"+\n\t\t\t\"want:\\n\"+\n\t\t\t\"<%d bytes>\",\n\t\t\tdecoded, len(content))\n\t}\n}\n\nfunc TestDecodeFuzz(t *testing.T) {\n\t// Test that the decoder terminates with corrupted input.\n\tcontent := bytes.Repeat([]byte(\"hello world!\"), 100)\n\tsrc := rand.NewSource(0)\n\tencoded, err := cbrotli.Encode(content, cbrotli.WriterOptions{Quality: 5})\n\tif err != nil {\n\t\tt.Fatalf(\"Encode(<%d bytes>, _) = _, %s\", len(content), err)\n\t}\n\tif len(encoded) == 0 {\n\t\tt.Fatalf(\"Encode(<%d bytes>, _) produced empty output\", len(content))\n\t}\n\tfor i := 0; i < 100; i++ {\n\t\tenc := append([]byte{}, encoded...)\n\t\tfor j := 0; j < 5; j++ {\n\t\t\tenc[int(src.Int63())%len(enc)] = byte(src.Int63() % 256)\n\t\t}\n\t\tcbrotli.Decode(enc)\n\t}\n}\n\nfunc TestDecodeTrailingData(t *testing.T) {\n\tcontent := bytes.Repeat([]byte(\"hello world!\"), 100)\n\tencoded, _ := cbrotli.Encode(content, cbrotli.WriterOptions{Quality: 5})\n\t_, err := cbrotli.Decode(append(encoded, 0))\n\tif err == nil {\n\t\tt.Errorf(\"Expected 'excessive input' error\")\n\t}\n}\n\nfunc TestEncodeDecode(t *testing.T) {\n\tfor _, test := range []struct {\n\t\tdata    []byte\n\t\trepeats int\n\t}{\n\t\t{nil, 0},\n\t\t{[]byte(\"A\"), 1},\n\t\t{[]byte(\"<html><body><H1>Hello world</H1></body></html>\"), 10},\n\t\t{[]byte(\"<html><body><H1>Hello world</H1></body></html>\"), 1000},\n\t} {\n\t\tt.Logf(\"case %q x %d\", test.data, test.repeats)\n\t\tinput := bytes.Repeat(test.data, test.repeats)\n\t\tencoded, err := cbrotli.Encode(input, cbrotli.WriterOptions{Quality: 5})\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Encode: %v\", err)\n\t\t}\n\t\t// Inputs are compressible, but may be too small to compress.\n\t\tif maxSize := len(input)/2 + 20; len(encoded) >= maxSize {\n\t\t\tt.Errorf(\"\"+\n\t\t\t\t\"Encode returned %d bytes, want <%d\\n\"+\n\t\t\t\t\"Encoded=%q\",\n\t\t\t\tlen(encoded), maxSize, encoded)\n\t\t}\n\t\tdecoded, err := cbrotli.Decode(encoded)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Decode: %v\", err)\n\t\t}\n\t\tif !bytes.Equal(decoded, input) {\n\t\t\tvar want string\n\t\t\tif len(input) > 320 {\n\t\t\t\twant = fmt.Sprintf(\"<%d bytes>\", len(input))\n\t\t\t} else {\n\t\t\t\twant = fmt.Sprintf(\"%q\", input)\n\t\t\t}\n\t\t\tt.Errorf(\"\"+\n\t\t\t\t\"Decode content:\\n\"+\n\t\t\t\t\"%q\\n\"+\n\t\t\t\t\"want:\\n\"+\n\t\t\t\t\"%s\",\n\t\t\t\tdecoded, want)\n\t\t}\n\t}\n}\n\nfunc TestEncodeDecodeWithDictionary(t *testing.T) {\n\tq := 5\n\tl := 4096\n\n\tinput := make([]byte, l)\n\tfor i := 0; i < l; i++ {\n\t\tinput[i] = byte(i*7 + i*i*5)\n\t}\n\t// use dictionary same as input\n\tpd := cbrotli.NewPreparedDictionary(input, cbrotli.DtRaw, q)\n\tdefer pd.Close()\n\n\tencoded, err := cbrotli.Encode(input, cbrotli.WriterOptions{Quality: q, Dictionary: pd})\n\tif err != nil {\n\t\tt.Errorf(\"Encode: %v\", err)\n\t}\n\tlimit := 20\n\tif len(encoded) > limit {\n\t\tt.Errorf(\"Output length exceeds expectations: %d > %d\", len(encoded), limit)\n\t}\n\n\tdecoded, err := cbrotli.DecodeWithRawDictionary(encoded, input)\n\tif err != nil {\n\t\tt.Errorf(\"Decode: %v\", err)\n\t}\n\tif !bytes.Equal(decoded, input) {\n\t\tvar want string\n\t\tif len(input) > 320 {\n\t\t\twant = fmt.Sprintf(\"<%d bytes>\", len(input))\n\t\t} else {\n\t\t\twant = fmt.Sprintf(\"%q\", input)\n\t\t}\n\t\tt.Errorf(\"\"+\n\t\t\t\"Decode content:\\n\"+\n\t\t\t\"%q\\n\"+\n\t\t\t\"want:\\n\"+\n\t\t\t\"%s\",\n\t\t\tdecoded, want)\n\t}\n}\n"
  },
  {
    "path": "go/cbrotli/cgo.go",
    "content": "// Copyright 2017 Google Inc. All Rights Reserved.\n//\n// Distributed under MIT license.\n// See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\npackage cbrotli\n\n// Inform golang build system that it should link brotli libraries.\n\n// #cgo pkg-config: libbrotlicommon libbrotlidec libbrotlienc\nimport \"C\"\n"
  },
  {
    "path": "go/cbrotli/go.mod",
    "content": "module github.com/google/brotli/go/cbrotli\n\ngo 1.21\n"
  },
  {
    "path": "go/cbrotli/reader.go",
    "content": "// Copyright 2016 Google Inc. All Rights Reserved.\n//\n// Distributed under MIT license.\n// See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\n// Package cbrotli compresses and decompresses data with C-Brotli library.\npackage cbrotli\n\n/*\n#include <stddef.h>\n#include <stdint.h>\n\n#include <brotli/decode.h>\n\nstatic BrotliDecoderResult DecompressStream(BrotliDecoderState* s,\n                                            uint8_t* out, size_t out_len,\n                                            const uint8_t* in, size_t in_len,\n                                            size_t* bytes_written,\n                                            size_t* bytes_consumed) {\n  size_t in_remaining = in_len;\n  size_t out_remaining = out_len;\n  BrotliDecoderResult result = BrotliDecoderDecompressStream(\n      s, &in_remaining, &in, &out_remaining, &out, NULL);\n  *bytes_written = out_len - out_remaining;\n  *bytes_consumed = in_len - in_remaining;\n  return result;\n}\n*/\nimport \"C\"\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"runtime\"\n)\n\ntype decodeError C.BrotliDecoderErrorCode\n\nfunc (err decodeError) Error() string {\n\treturn \"cbrotli: \" +\n\t\tC.GoString(C.BrotliDecoderErrorString(C.BrotliDecoderErrorCode(err)))\n}\n\nvar errExcessiveInput = errors.New(\"cbrotli: excessive input\")\nvar errInvalidState = errors.New(\"cbrotli: invalid state\")\nvar errReaderClosed = errors.New(\"cbrotli: Reader is closed\")\n\n// Reader implements io.ReadCloser by reading Brotli-encoded data from an\n// underlying Reader.\ntype Reader struct {\n\tsrc    io.Reader\n\tstate  *C.BrotliDecoderState\n\tbuf    []byte          // scratch space for reading from src\n\tin     []byte          // current chunk to decode; usually aliases buf\n\tpinner *runtime.Pinner // raw dictionary pinner\n}\n\n// readBufSize is a \"good\" buffer size that avoids excessive round-trips\n// between C and Go but doesn't waste too much memory on buffering.\n// It is arbitrarily chosen to be equal to the constant used in io.Copy.\nconst readBufSize = 32 * 1024\n\n// NewReader initializes new Reader instance.\n// Close MUST be called to free resources.\nfunc NewReader(src io.Reader) *Reader {\n\treturn NewReaderWithRawDictionary(src, nil)\n}\n\n// NewReaderWithRawDictionary initializes new Reader instance with shared dictionary.\n// Close MUST be called to free resources.\nfunc NewReaderWithRawDictionary(src io.Reader, dictionary []byte) *Reader {\n\ts := C.BrotliDecoderCreateInstance(nil, nil, nil)\n\tvar p *runtime.Pinner\n\tif dictionary != nil {\n\t\tp = new(runtime.Pinner)\n\t\tp.Pin(&dictionary[0])\n\t\t// TODO(eustas): use return value\n\t\tC.BrotliDecoderAttachDictionary(s, C.BrotliSharedDictionaryType( /* RAW */ 0),\n\t\t\tC.size_t(len(dictionary)), (*C.uint8_t)(&dictionary[0]))\n\t}\n\treturn &Reader{\n\t\tsrc:    src,\n\t\tstate:  s,\n\t\tbuf:    make([]byte, readBufSize),\n\t\tpinner: p,\n\t}\n}\n\n// Close implements io.Closer. Close MUST be invoked to free native resources.\nfunc (r *Reader) Close() error {\n\tif r.state == nil {\n\t\treturn errReaderClosed\n\t}\n\t// Close despite the state; i.e. there might be some unread decoded data.\n\tC.BrotliDecoderDestroyInstance(r.state)\n\tr.state = nil\n\tif r.pinner != nil {\n\t\tr.pinner.Unpin()\n\t\tr.pinner = nil\n\t}\n\treturn nil\n}\n\nfunc (r *Reader) Read(p []byte) (n int, err error) {\n\tif r.state == nil {\n\t\treturn 0, errReaderClosed\n\t}\n\tif int(C.BrotliDecoderHasMoreOutput(r.state)) == 0 && len(r.in) == 0 {\n\t\tm, readErr := r.src.Read(r.buf)\n\t\tif m == 0 {\n\t\t\tif readErr != io.EOF {\n\t\t\t\treturn 0, readErr\n\t\t\t}\n\t\t\tif int(C.BrotliDecoderIsFinished(r.state)) == 0 {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\treturn 0, io.EOF\n\t\t}\n\t\tr.in = r.buf[:m]\n\t}\n\n\tif len(p) == 0 {\n\t\treturn 0, nil\n\t}\n\n\tfor {\n\t\tvar written, consumed C.size_t\n\t\tvar data *C.uint8_t\n\t\tif len(r.in) != 0 {\n\t\t\tdata = (*C.uint8_t)(&r.in[0])\n\t\t}\n\t\tresult := C.DecompressStream(r.state,\n\t\t\t(*C.uint8_t)(&p[0]), C.size_t(len(p)),\n\t\t\tdata, C.size_t(len(r.in)),\n\t\t\t&written, &consumed)\n\t\tr.in = r.in[int(consumed):]\n\t\tn = int(written)\n\n\t\tswitch result {\n\t\tcase C.BROTLI_DECODER_RESULT_SUCCESS:\n\t\t\tif len(r.in) > 0 {\n\t\t\t\treturn n, errExcessiveInput\n\t\t\t}\n\t\t\treturn n, nil\n\t\tcase C.BROTLI_DECODER_RESULT_ERROR:\n\t\t\treturn n, decodeError(C.BrotliDecoderGetErrorCode(r.state))\n\t\tcase C.BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:\n\t\t\tif n == 0 {\n\t\t\t\treturn 0, io.ErrShortBuffer\n\t\t\t}\n\t\t\treturn n, nil\n\t\tcase C.BROTLI_DECODER_NEEDS_MORE_INPUT:\n\t\t}\n\n\t\tif len(r.in) != 0 {\n\t\t\treturn 0, errInvalidState\n\t\t}\n\n\t\t// Calling r.src.Read may block. Don't block if we have data to return.\n\t\tif n > 0 {\n\t\t\treturn n, nil\n\t\t}\n\n\t\t// Top off the buffer.\n\t\tencN, err := r.src.Read(r.buf)\n\t\tif encN == 0 {\n\t\t\t// Not enough data to complete decoding.\n\t\t\tif err == io.EOF {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\treturn 0, err\n\t\t}\n\t\tr.in = r.buf[:encN]\n\t}\n\n\treturn n, nil\n}\n\n// Decode decodes Brotli encoded data.\nfunc Decode(encodedData []byte) ([]byte, error) {\n\treturn DecodeWithRawDictionary(encodedData, nil)\n}\n\n// DecodeWithRawDictionary decodes Brotli encoded data with shared dictionary.\nfunc DecodeWithRawDictionary(encodedData []byte, dictionary []byte) ([]byte, error) {\n\ts := C.BrotliDecoderCreateInstance(nil, nil, nil)\n\tvar p *runtime.Pinner\n\tif dictionary != nil {\n\t\tp = new(runtime.Pinner)\n\t\tp.Pin(&dictionary[0])\n\t\t// TODO(eustas): use return value\n\t\tC.BrotliDecoderAttachDictionary(s, C.BrotliSharedDictionaryType( /* RAW */ 0),\n\t\t\tC.size_t(len(dictionary)), (*C.uint8_t)(&dictionary[0]))\n\t}\n\tr := &Reader{\n\t\tsrc:    bytes.NewReader(nil),\n\t\tstate:  s,\n\t\tbuf:    make([]byte, 4), // arbitrarily small but nonzero so that r.src.Read returns io.EOF\n\t\tin:     encodedData,\n\t\tpinner: p,\n\t}\n\tdefer r.Close()\n\tout, err := ioutil.ReadAll(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n"
  },
  {
    "path": "go/cbrotli/synth_test.go",
    "content": "// Copyright 2025 Google Inc. All Rights Reserved.\n//\n// Distributed under MIT license.\n// See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\npackage cbrotli_test\n\nimport (\n\t\"testing\"\n\n\t\"github.com/google/brotli/go/cbrotli\"\n)\n\nfunc verify(t *testing.T, compressed []uint8, expectSuccess bool, expectedOutput string) {\n\tactual, err := cbrotli.Decode(compressed)\n\tsuccess := true\n\tif err != nil {\n\t\tsuccess = false\n\t}\n\tif success != expectSuccess {\n\t\tt.Fatalf(\"success = %v, expectSuccess = %v\", success, expectSuccess)\n\t}\n\tif !expectSuccess {\n\t\treturn\n\t}\n\tsame := true\n\tif len(actual) == len(expectedOutput) {\n\t\tfor i := 0; i < len(expectedOutput); i++ {\n\t\t\tif actual[i] != expectedOutput[i] {\n\t\t\t\tsame = false\n\t\t\t}\n\t\t}\n\t} else {\n\t\tsame = false\n\t}\n\tif !same {\n\t\tt.Fatalf(\"Expected: %v\\nActual: %v\", expectedOutput, actual)\n\t}\n}\n\nfunc times(n int, pattern string) string {\n\tk := len(pattern)\n\tresult := make([]uint8, n*k)\n\tfor i := 0; i < n; i++ {\n\t\toffset := i * k\n\t\tfor j := 0; j < k; j++ {\n\t\t\tresult[offset+j] = pattern[j]\n\t\t}\n\t}\n\treturn string(result)\n}\n\n/* GENERATED CODE START */\n\nfunc TestAllTransforms10(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0xfc, 0x05, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x13, 0x7c,\n    0x84, 0x26, 0xf8, 0x04, 0x10, 0x4c, 0xf0, 0x89, 0x38, 0x30, 0xc1, 0x27,\n    0x4e, 0xc1, 0x04, 0x9f, 0x64, 0x06, 0x26, 0xf8, 0x24, 0x3f, 0x34, 0xc1,\n    0x27, 0x7d, 0x82, 0x09, 0x3e, 0xe9, 0x16, 0x4d, 0xf0, 0xc9, 0xd2, 0xc0,\n    0x04, 0x9f, 0x0c, 0x8f, 0x4c, 0xf0, 0xc9, 0x06, 0xd1, 0x04, 0x9f, 0x6c,\n    0x92, 0x4d, 0xf0, 0xc9, 0x39, 0xc1, 0x04, 0x9f, 0xdc, 0x94, 0x4c, 0xf0,\n    0xc9, 0x69, 0xd1, 0x04, 0x9f, 0x3c, 0x98, 0x4d, 0xf0, 0x29, 0x9c, 0x81,\n    0x09, 0x3e, 0x45, 0x37, 0x31, 0xc1, 0xa7, 0x60, 0x47, 0x26, 0xf8, 0x14,\n    0xfa, 0xcc, 0x04, 0x9f, 0xc2, 0x20, 0x9a, 0xe0, 0x53, 0x48, 0x54, 0x13,\n    0x7c, 0x8a, 0x8f, 0x6c, 0x82, 0x4f, 0xb1, 0xd2, 0x4d, 0xf0, 0x29, 0x67,\n    0x82, 0x09, 0x3e, 0xe5, 0x4f, 0x31, 0xc1, 0xa7, 0x7c, 0x4a, 0x26, 0xf8,\n    0x94, 0x57, 0xcd, 0x04, 0x9f, 0x12, 0x2c, 0x9a, 0xe0, 0x53, 0xba, 0x55,\n    0x13, 0x7c, 0xca, 0xbf, 0x6c, 0x82, 0x4f, 0xb9, 0xd8, 0x4d, 0xf0, 0xa9,\n    0x30, 0x03, 0x13, 0x7c, 0x2a, 0xd2, 0xc2, 0x04, 0x9f, 0x4a, 0x36, 0x31,\n    0xc1, 0xa7, 0xca, 0x6d, 0x4c, 0xf0, 0xa9, 0x94, 0x23, 0x13, 0x7c, 0x2a,\n    0xeb, 0xca, 0x04, 0x9f, 0xea, 0x3c, 0x33, 0xc1, 0xa7, 0xb2, 0xef, 0x4c,\n    0xf0, 0xa9, 0xf8, 0x43, 0x13, 0x7c, 0xaa, 0x00, 0xd3, 0x04, 0x9f, 0x2a,\n    0x42, 0x35, 0xc1, 0xa7, 0xc2, 0x70, 0x4d, 0xf0, 0xa9, 0x52, 0x64, 0x13,\n    0x7c, 0x2a, 0x1a, 0xdb, 0x04, 0x9f, 0x6a, 0x48, 0x37, 0xc1, 0xa7, 0x92,\n    0xf2, 0x4d, 0xf0, 0xa9, 0xc3, 0x04, 0x13, 0x7c, 0xea, 0x32, 0xc3, 0x04,\n    0x9f, 0x7a, 0x4e, 0x31, 0xc1, 0xa7, 0x06, 0x74, 0x4c, 0xf0, 0xa9, 0x19,\n    0x25, 0x13, 0x7c, 0x6a, 0x4d, 0xcb, 0x04, 0x9f, 0x1a, 0x55, 0x33, 0xc1,\n    0xa7, 0x56, 0xf5, 0x4c, 0xf0, 0xa9, 0x5d, 0x45, 0x13, 0x7c, 0xea, 0x59,\n    0xd3, 0x04, 0x9f, 0xfa, 0x57, 0x35, 0xc1, 0xa7, 0x66, 0x76, 0x4d, 0xf0,\n    0xa9, 0x9f, 0x65, 0x13, 0x7c, 0x6a, 0x6f, 0xdb, 0x04, 0x9f, 0x9a, 0x5d,\n    0x37, 0xc1, 0xa7, 0x06, 0xf8, 0x4d, 0xf0, 0x69, 0x0c, 0x06, 0x26, 0xf8,\n    0x34, 0x08, 0x07, 0x13, 0x7c, 0x1a, 0x8b, 0x85, 0x09, 0x3e, 0x8d, 0xc8,\n    0xc3, 0x04, 0x9f, 0xe6, 0x65, 0x62, 0x82, 0x4f, 0xb3, 0x73, 0x31, 0xc1,\n    0xa7, 0x41, 0xda, 0x98, 0xe0, 0xd3, 0x54, 0x7d, 0x4c, 0xf0, 0x69, 0xc4,\n    0x46, 0x26, 0xf8, 0x34, 0x72, 0x27, 0x13, 0x7c, 0x1a, 0xc5, 0x95, 0x09,\n    0x3e, 0x8d, 0xe5, 0xcb, 0x04, 0x9f, 0x06, 0x75, 0x66, 0x82, 0x4f, 0x43,\n    0x7b, 0x33, 0xc1, 0xa7, 0x09, 0xde, 0x99, 0xe0, 0xd3, 0x34, 0xff, 0x4c,\n    0xf0, 0x69, 0xb2, 0x87, 0x26, 0xf8, 0x34, 0xe9, 0x47, 0x13, 0x7c, 0x9a,\n    0xfb, 0xa5, 0x09, 0x3e, 0x4d, 0x01, 0xd4, 0x04, 0x9f, 0x46, 0x82, 0x6a,\n    0x82, 0x4f, 0x03, 0x82, 0x35, 0xc1, 0xa7, 0x61, 0xe1, 0x9a, 0xe0, 0xd3,\n    0xe4, 0x80, 0x4d, 0xf0, 0x69, 0x8a, 0xc8, 0x26, 0xf8, 0x34, 0x52, 0x68,\n    0x13, 0x7c, 0x9a, 0x2f, 0xb6, 0x09, 0x3e, 0x8d, 0x1b, 0xdc, 0x04, 0x9f,\n    0x86, 0x8f, 0x6e, 0x82, 0x4f, 0xb3, 0x88, 0x37, 0xc1, 0xa7, 0xd9, 0xe4,\n    0x9b, 0xe0, 0xd3, 0x9e, 0x02, 0x4c, 0xf0, 0x69, 0x6d, 0x09, 0x26, 0xf8,\n    0xb4, 0xc3, 0x08, 0x13, 0x7c, 0x5a, 0x68, 0x86, 0x09, 0x3e, 0xad, 0x37,\n    0xc4, 0x04, 0x9f, 0x56, 0x9d, 0x62, 0x82, 0x4f, 0x9b, 0x8f, 0x31, 0xc1,\n    0xa7, 0x2d, 0xe8, 0x98, 0xe0, 0xd3, 0x4a, 0x84, 0x4c, 0xf0, 0x69, 0x3f,\n    0x4a, 0x26, 0xf8, 0xb4, 0x2c, 0x29, 0x13, 0x7c, 0xda, 0x9c, 0x96, 0x09,\n    0x3e, 0x2d, 0x52, 0xcc, 0x04, 0x9f, 0xb6, 0xaa, 0x66, 0x82, 0x4f, 0x2b,\n    0x96, 0x33, 0xc1, 0xa7, 0x7d, 0xeb, 0x99, 0xe0, 0xd3, 0xf6, 0x05, 0x4d,\n    0xf0, 0x69, 0x17, 0x8b, 0x26, 0xf8, 0xb4, 0x97, 0x49, 0x13, 0x7c, 0xda,\n    0xd1, 0xa6, 0x09, 0x3e, 0x2d, 0x6c, 0xd4, 0x04, 0x9f, 0xb6, 0xb7, 0x6a,\n    0x82, 0x4f, 0xab, 0x9c, 0x35, 0xc1, 0xa7, 0xc5, 0xee, 0x9a, 0xe0, 0xd3,\n    0x9a, 0x87, 0x4d, 0xf0, 0x69, 0xe9, 0xcb,\n  };\n  verify(t,\n    /*\n     * // The stream consists of word \"time\" with all possible transforms.\n     * main_header\n     * metablock_header_easy: 1533, 1\n     * command_easy: 10, \"|\", 2 // = 0 << 10 + 1 + 1\n     * command_easy: 10, \"|\", 1037 // = 1 << 10 + 1 + 12\n     * command_easy: 10, \"|\", 2073 // = 2 << 10 + 1 + 24\n     * command_easy: 10, \"|\", 3110 // = 3 << 10 + 1 + 37\n     * command_easy: 10, \"|\", 4144 // = 4 << 10 + 1 + 47\n     * command_easy: 10, \"|\", 5180 // = 5 << 10 + 1 + 59\n     * command_easy: 10, \"|\", 6220 // = 6 << 10 + 1 + 75\n     * command_easy: 10, \"|\", 7256 // = 7 << 10 + 1 + 87\n     * command_easy: 10, \"|\", 8294 // = 8 << 10 + 1 + 101\n     * command_easy: 10, \"|\", 9333 // = 9 << 10 + 1 + 116\n     * command_easy: 10, \"|\", 10368 // = 10 << 10 + 1 + 127\n     * command_easy: 10, \"|\", 11408 // = 11 << 10 + 1 + 143\n     * command_easy: 10, \"|\", 12441 // = 12 << 10 + 1 + 152\n     * command_easy: 10, \"|\", 13475 // = 13 << 10 + 1 + 162\n     * command_easy: 10, \"|\", 14513 // = 14 << 10 + 1 + 176\n     * command_easy: 10, \"|\", 15550 // = 15 << 10 + 1 + 189\n     * command_easy: 10, \"|\", 16587 // = 16 << 10 + 1 + 202\n     * command_easy: 10, \"|\", 17626 // = 17 << 10 + 1 + 217\n     * command_easy: 10, \"|\", 18665 // = 18 << 10 + 1 + 232\n     * command_easy: 10, \"|\", 19703 // = 19 << 10 + 1 + 246\n     * command_easy: 10, \"|\", 20739 // = 20 << 10 + 1 + 258\n     * command_easy: 10, \"|\", 21775 // = 21 << 10 + 1 + 270\n     * command_easy: 10, \"|\", 22812 // = 22 << 10 + 1 + 283\n     * command_easy: 10, \"|\", 23848 // = 23 << 10 + 1 + 295\n     * command_easy: 10, \"|\", 24880 // = 24 << 10 + 1 + 303\n     * command_easy: 10, \"|\", 25916 // = 25 << 10 + 1 + 315\n     * command_easy: 10, \"|\", 26956 // = 26 << 10 + 1 + 331\n     * command_easy: 10, \"|\", 27988 // = 27 << 10 + 1 + 339\n     * command_easy: 10, \"|\", 29021 // = 28 << 10 + 1 + 348\n     * command_easy: 10, \"|\", 30059 // = 29 << 10 + 1 + 362\n     * command_easy: 10, \"|\", 31100 // = 30 << 10 + 1 + 379\n     * command_easy: 10, \"|\", 32136 // = 31 << 10 + 1 + 391\n     * command_easy: 10, \"|\", 33173 // = 32 << 10 + 1 + 404\n     * command_easy: 10, \"|\", 34209 // = 33 << 10 + 1 + 416\n     * command_easy: 10, \"|\", 35247 // = 34 << 10 + 1 + 430\n     * command_easy: 10, \"|\", 36278 // = 35 << 10 + 1 + 437\n     * command_easy: 10, \"|\", 37319 // = 36 << 10 + 1 + 454\n     * command_easy: 10, \"|\", 38355 // = 37 << 10 + 1 + 466\n     * command_easy: 10, \"|\", 39396 // = 38 << 10 + 1 + 483\n     * command_easy: 10, \"|\", 40435 // = 39 << 10 + 1 + 498\n     * command_easy: 10, \"|\", 41465 // = 40 << 10 + 1 + 504\n     * command_easy: 10, \"|\", 42494 // = 41 << 10 + 1 + 509\n     * command_easy: 10, \"|\", 43534 // = 42 << 10 + 1 + 525\n     * command_easy: 10, \"|\", 44565 // = 43 << 10 + 1 + 532\n     * command_easy: 10, \"|\", 45606 // = 44 << 10 + 1 + 549\n     * command_easy: 10, \"|\", 46641 // = 45 << 10 + 1 + 560\n     * command_easy: 10, \"|\", 47680 // = 46 << 10 + 1 + 575\n     * command_easy: 10, \"|\", 48719 // = 47 << 10 + 1 + 590\n     * command_easy: 10, \"|\", 49758 // = 48 << 10 + 1 + 605\n     * command_easy: 10, \"|\", 50786 // = 49 << 10 + 1 + 609\n     * command_easy: 10, \"|\", 51824 // = 50 << 10 + 1 + 623\n     * command_easy: 10, \"|\", 52861 // = 51 << 10 + 1 + 636\n     * command_easy: 10, \"|\", 53897 // = 52 << 10 + 1 + 648\n     * command_easy: 10, \"|\", 54935 // = 53 << 10 + 1 + 662\n     * command_easy: 10, \"|\", 55973 // = 54 << 10 + 1 + 676\n     * command_easy: 10, \"|\", 56999 // = 55 << 10 + 1 + 678\n     * command_easy: 10, \"|\", 58027 // = 56 << 10 + 1 + 682\n     * command_easy: 10, \"|\", 59056 // = 57 << 10 + 1 + 687\n     * command_easy: 10, \"|\", 60092 // = 58 << 10 + 1 + 699\n     * command_easy: 10, \"|\", 61129 // = 59 << 10 + 1 + 712\n     * command_easy: 10, \"|\", 62156 // = 60 << 10 + 1 + 715\n     * command_easy: 10, \"|\", 63195 // = 61 << 10 + 1 + 730\n     * command_easy: 10, \"|\", 64233 // = 62 << 10 + 1 + 744\n     * command_easy: 10, \"|\", 65277 // = 63 << 10 + 1 + 764\n     * command_easy: 10, \"|\", 66307 // = 64 << 10 + 1 + 770\n     * command_easy: 10, \"|\", 67333 // = 65 << 10 + 1 + 772\n     * command_easy: 10, \"|\", 68371 // = 66 << 10 + 1 + 786\n     * command_easy: 10, \"|\", 69407 // = 67 << 10 + 1 + 798\n     * command_easy: 10, \"|\", 70444 // = 68 << 10 + 1 + 811\n     * command_easy: 10, \"|\", 71480 // = 69 << 10 + 1 + 823\n     * command_easy: 10, \"|\", 72517 // = 70 << 10 + 1 + 836\n     * command_easy: 10, \"|\", 73554 // = 71 << 10 + 1 + 849\n     * command_easy: 10, \"|\", 74591 // = 72 << 10 + 1 + 862\n     * command_easy: 10, \"|\", 75631 // = 73 << 10 + 1 + 878\n     * command_easy: 10, \"|\", 76679 // = 74 << 10 + 1 + 902\n     * command_easy: 10, \"|\", 77715 // = 75 << 10 + 1 + 914\n     * command_easy: 10, \"|\", 78757 // = 76 << 10 + 1 + 932\n     * command_easy: 10, \"|\", 79793 // = 77 << 10 + 1 + 944\n     * command_easy: 10, \"|\", 80830 // = 78 << 10 + 1 + 957\n     * command_easy: 10, \"|\", 81866 // = 79 << 10 + 1 + 969\n     * command_easy: 10, \"|\", 82902 // = 80 << 10 + 1 + 981\n     * command_easy: 10, \"|\", 83942 // = 81 << 10 + 1 + 997\n     * command_easy: 10, \"|\", 84980 // = 82 << 10 + 1 + 1011\n     * command_easy: 10, \"|\", 86018 // = 83 << 10 + 1 + 1025\n     * command_easy: 10, \"|\", 87055 // = 84 << 10 + 1 + 1038\n     * command_easy: 10, \"|\", 88093 // = 85 << 10 + 1 + 1052\n     * command_easy: 10, \"|\", 89129 // = 86 << 10 + 1 + 1064\n     * command_easy: 10, \"|\", 90166 // = 87 << 10 + 1 + 1077\n     * command_easy: 10, \"|\", 91202 // = 88 << 10 + 1 + 1089\n     * command_easy: 10, \"|\", 92239 // = 89 << 10 + 1 + 1102\n     * command_easy: 10, \"|\", 93276 // = 90 << 10 + 1 + 1115\n     * command_easy: 10, \"|\", 94315 // = 91 << 10 + 1 + 1130\n     * command_easy: 10, \"|\", 95353 // = 92 << 10 + 1 + 1144\n     * command_easy: 10, \"|\", 96392 // = 93 << 10 + 1 + 1159\n     * command_easy: 10, \"|\", 97432 // = 94 << 10 + 1 + 1175\n     * command_easy: 10, \"|\", 98468 // = 95 << 10 + 1 + 1187\n     * command_easy: 10, \"|\", 99507 // = 96 << 10 + 1 + 1202\n     * command_easy: 10, \"|\", 100544 // = 97 << 10 + 1 + 1215\n     * command_easy: 10, \"|\", 101581 // = 98 << 10 + 1 + 1228\n     * command_easy: 10, \"|\", 102619 // = 99 << 10 + 1 + 1242\n     * command_easy: 10, \"|\", 103655 // = 100 << 10 + 1 + 1254\n     * command_easy: 10, \"|\", 104694 // = 101 << 10 + 1 + 1269\n     * command_easy: 10, \"|\", 105730 // = 102 << 10 + 1 + 1281\n     * command_easy: 10, \"|\", 106767 // = 103 << 10 + 1 + 1294\n     * command_easy: 10, \"|\", 107804 // = 104 << 10 + 1 + 1307\n     * command_easy: 10, \"|\", 108841 // = 105 << 10 + 1 + 1320\n     * command_easy: 10, \"|\", 109878 // = 106 << 10 + 1 + 1333\n     * command_easy: 10, \"|\", 110917 // = 107 << 10 + 1 + 1348\n     * command_easy: 10, \"|\", 111954 // = 108 << 10 + 1 + 1361\n     * command_easy: 10, \"|\", 112991 // = 109 << 10 + 1 + 1374\n     * command_easy: 10, \"|\", 114028 // = 110 << 10 + 1 + 1387\n     * command_easy: 10, \"|\", 115066 // = 111 << 10 + 1 + 1401\n     * command_easy: 10, \"|\", 116104 // = 112 << 10 + 1 + 1415\n     * command_easy: 10, \"|\", 117140 // = 113 << 10 + 1 + 1427\n     * command_easy: 10, \"|\", 118176 // = 114 << 10 + 1 + 1439\n     * command_easy: 10, \"|\", 119213 // = 115 << 10 + 1 + 1452\n     * command_easy: 10, \"|\", 120250 // = 116 << 10 + 1 + 1465\n     * command_easy: 10, \"|\", 121287 // = 117 << 10 + 1 + 1478\n     * command_easy: 10, \"|\", 122325 // = 118 << 10 + 1 + 1492\n     * command_easy: 10, \"|\", 123363 // = 119 << 10 + 1 + 1506\n     * command_easy: 10, \"|\", 124401 // = 120 << 10 + 1 + 1520\n     */\n    compressed,\n    true,\n    \"|categories|categories | categories |ategories|Categories |categories th\" +\n    \"e | categories|s categories |categories of |Categories|categories and |t\" +\n    \"egories|categorie|, categories |categories, | Categories |categories in \" +\n    \"|categories to |e categories |categories\\\"|categories.|categories\\\">|cat\" +\n    \"egories\\n|categor|categories]|categories for |egories|categori|categorie\" +\n    \"s a |categories that | Categories|categories. |.categories| categories, \" +\n    \"|gories|categories with |categories'|categories from |categories by |ori\" +\n    \"es|ries| the categories|catego|categories. The |CATEGORIES|categories on\" +\n    \" |categories as |categories is |cat|categorieing |categories\\n\\t|categor\" +\n    \"ies:| categories. |categoriesed |s|ies|cate|categories(|Categories, |ca|\" +\n    \"categories at |categoriesly | the categories of |categ|c| Categories, |C\" +\n    \"ategories\\\"|.categories(|CATEGORIES |Categories\\\">|categories=\\\"| catego\" +\n    \"ries.|.com/categories| the categories of the |Categories'|categories. Th\" +\n    \"is |categories,|.categories |Categories(|Categories.|categories not | ca\" +\n    \"tegories=\\\"|categorieser | CATEGORIES |categoriesal | CATEGORIES|categor\" +\n    \"ies='|CATEGORIES\\\"|Categories. | categories(|categoriesful | Categories.\" +\n    \" |categoriesive |categoriesless |CATEGORIES'|categoriesest | Categories.\" +\n    \"|CATEGORIES\\\">| categories='|Categories,|categoriesize |CATEGORIES.|\" +\n    \"\\302\\240categories| categories,|Categories=\\\"|CATEGORIES=\\\"|categoriesou\" +\n    \"s |CATEGORIES, |Categories='| Categories,| CATEGORIES=\\\"| CATEGORIES, |C\" +\n    \"ATEGORIES,|CATEGORIES(|CATEGORIES. | CATEGORIES.|CATEGORIES='| CATEGORIE\" +\n    \"S. | Categories=\\\"| CATEGORIES='| Categories='\",\n  );\n}\n\nfunc TestAllTransforms4(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x40, 0x03, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x51, 0x3e,\n    0x42, 0x51, 0x3e, 0x81, 0x02, 0x51, 0x3e, 0x11, 0x04, 0xa2, 0x7c, 0xe2,\n    0x0b, 0x44, 0xf9, 0x24, 0x1b, 0x10, 0xe5, 0x93, 0x84, 0x50, 0x94, 0x4f,\n    0xba, 0x02, 0x51, 0x3e, 0x69, 0x0c, 0x45, 0xf9, 0x64, 0x39, 0x20, 0xca,\n    0x27, 0x13, 0x22, 0x51, 0x3e, 0xd9, 0x11, 0x8a, 0xf2, 0xc9, 0xa2, 0x58,\n    0x94, 0x4f, 0x4e, 0x05, 0xa2, 0x7c, 0x72, 0x2c, 0x12, 0xe5, 0x93, 0x83,\n    0xa1, 0x28, 0x9f, 0xfc, 0x8c, 0x45, 0xf9, 0x14, 0x6e, 0x40, 0x94, 0x4f,\n    0x71, 0x47, 0x44, 0xf9, 0x14, 0x80, 0x48, 0x94, 0x4f, 0x81, 0xc8, 0x44,\n    0xf9, 0x14, 0x8e, 0x50, 0x94, 0x4f, 0x41, 0x49, 0x45, 0xf9, 0x14, 0x9b,\n    0x58, 0x94, 0x4f, 0x11, 0xca, 0x45, 0xf9, 0x94, 0xa3, 0x40, 0x94, 0x4f,\n    0x99, 0x4a, 0x44, 0xf9, 0x94, 0xb3, 0x48, 0x94, 0x4f, 0x59, 0xcb, 0x44,\n    0xf9, 0x94, 0xb8, 0x50, 0x94, 0x4f, 0x09, 0x4c, 0x45, 0xf9, 0x94, 0xcb,\n    0x58, 0x94, 0x4f, 0x19, 0xcd, 0x45, 0xf9, 0x54, 0xd8, 0x80, 0x28, 0x9f,\n    0xca, 0x9b, 0x10, 0xe5, 0x53, 0x99, 0x23, 0xa2, 0x7c, 0xaa, 0x73, 0x46,\n    0x94, 0x4f, 0x25, 0x0f, 0x89, 0xf2, 0xa9, 0xf0, 0x29, 0x51, 0x3e, 0xd5,\n    0x40, 0x26, 0xca, 0xa7, 0x62, 0xe8, 0x44, 0xf9, 0x54, 0x0d, 0xa1, 0x28,\n    0x9f, 0xca, 0xa1, 0x14, 0xe5, 0x53, 0x61, 0xa4, 0xa2, 0x7c, 0xaa, 0x8c,\n    0x56, 0x94, 0x4f, 0x45, 0x12, 0x8b, 0xf2, 0xa9, 0x52, 0x6a, 0x51, 0x3e,\n    0x95, 0x4c, 0x2e, 0xca, 0xa7, 0xda, 0xe9, 0x45, 0xf9, 0xd4, 0x44, 0x81,\n    0x28, 0x9f, 0xba, 0xa8, 0x10, 0xe5, 0x53, 0x37, 0x25, 0xa2, 0x7c, 0x6a,\n    0xaa, 0x46, 0x94, 0x4f, 0xad, 0x15, 0x89, 0xf2, 0xa9, 0xc5, 0x2a, 0x51,\n    0x3e, 0xb5, 0x5a, 0x26, 0xca, 0xa7, 0x5e, 0xeb, 0x44, 0xf9, 0xd4, 0x6c,\n    0xa1, 0x28, 0x9f, 0xba, 0xad, 0x14, 0xe5, 0x53, 0xcf, 0xa5, 0xa2, 0x7c,\n    0x6a, 0xbd, 0x56, 0x94, 0x4f, 0xbd, 0x17, 0x8b, 0xf2, 0xa9, 0x09, 0x6b,\n    0x51, 0x3e, 0x35, 0x63, 0x2e, 0xca, 0xa7, 0xd6, 0xec, 0x45, 0xf9, 0x34,\n    0x9b, 0x01, 0x51, 0x3e, 0x0d, 0x67, 0x41, 0x94, 0x4f, 0x43, 0x9a, 0x10,\n    0xe5, 0xd3, 0xa8, 0x36, 0x44, 0xf9, 0x34, 0xb1, 0x11, 0x51, 0x3e, 0xcd,\n    0x6d, 0x45, 0x94, 0x4f, 0xe3, 0x9b, 0x11, 0xe5, 0xd3, 0x14, 0x77, 0x44,\n    0xf9, 0x34, 0xcc, 0x21, 0x51, 0x3e, 0x8d, 0x75, 0x49, 0x94, 0x4f, 0x83,\n    0x9e, 0x12, 0xe5, 0xd3, 0xb8, 0xb7, 0x44, 0xf9, 0x34, 0xfa, 0x31, 0x51,\n    0x3e, 0x0d, 0x80, 0x4d, 0x94, 0x4f, 0x73, 0xa0, 0x13, 0xe5, 0xd3, 0x34,\n    0xf8, 0x44, 0xf9, 0x34, 0x13, 0x42, 0x51, 0x3e, 0x4d, 0x87, 0x51, 0x94,\n    0x4f, 0x53, 0xa2, 0x14, 0xe5, 0xd3, 0xb4, 0x38, 0x45, 0xf9, 0x34, 0x34,\n    0x52, 0x51, 0x3e, 0x0d, 0x8f, 0x55, 0x94, 0x4f, 0x23, 0xa4, 0x15, 0xe5,\n    0xd3, 0x24, 0x79, 0x45, 0xf9, 0x34, 0x4f, 0x62, 0x51, 0x3e, 0x8d, 0x95,\n    0x59, 0x94, 0x4f, 0xd3, 0xa5, 0x16, 0xe5, 0xd3, 0x98, 0xb9, 0x45, 0xf9,\n    0x34, 0x6e, 0x72, 0x51, 0x3e, 0xcd, 0x9d, 0x5d, 0x94, 0x4f, 0x13, 0xa8,\n    0x17, 0xe5, 0xd3, 0x1c, 0xfa, 0x45, 0xf9, 0xb4, 0x90, 0x02, 0x51, 0x3e,\n    0xed, 0xa5, 0x41, 0x94, 0x4f, 0xeb, 0xa9, 0x10, 0xe5, 0xd3, 0x9a, 0x3a,\n    0x44, 0xf9, 0xb4, 0xac, 0x12, 0x51, 0x3e, 0x6d, 0xad, 0x45, 0x94, 0x4f,\n    0xbb, 0xab, 0x11, 0xe5, 0xd3, 0x0a, 0x7b, 0x44, 0xf9, 0xb4, 0xc9, 0x22,\n    0x51, 0x3e, 0x2d, 0xb4, 0x49, 0x94, 0x4f, 0x7b, 0xad, 0x12, 0xe5, 0xd3,\n    0x82, 0xbb, 0x44, 0xf9, 0xb4, 0xe7, 0x32, 0x51, 0x3e, 0xad, 0xbb, 0x4d,\n    0x94, 0x4f, 0x5b, 0xaf, 0x13, 0xe5, 0xd3, 0xf6, 0xfb, 0x44, 0xf9, 0xb4,\n    0x05, 0x43, 0x51, 0x3e, 0xed, 0xc2, 0x51, 0x94, 0x4f, 0x1b, 0xb1, 0x14,\n    0xe5, 0xd3, 0x62, 0x3c, 0x45, 0xf9, 0xb4, 0x1f, 0x53, 0x51, 0x3e, 0xad,\n    0xc9, 0x55, 0x94, 0x4f, 0xeb, 0xb2, 0x15, 0xe5, 0xd3, 0xda, 0x7c, 0x45,\n    0xf9, 0xb4, 0x3e, 0x63,\n  };\n  verify(t,\n    /*\n     * // The stream consists of word \"time\" with all possible transforms.\n     * main_header\n     * metablock_header_easy: 833, 1\n     * command_easy: 4, \"|\", 2 // = 0 << 10 + 1 + 1\n     * command_easy: 4, \"|\", 1031 // = 1 << 10 + 1 + 6\n     * command_easy: 4, \"|\", 2061 // = 2 << 10 + 1 + 12\n     * command_easy: 4, \"|\", 3092 // = 3 << 10 + 1 + 19\n     * command_easy: 4, \"|\", 4120 // = 4 << 10 + 1 + 23\n     * command_easy: 4, \"|\", 5150 // = 5 << 10 + 1 + 29\n     * command_easy: 4, \"|\", 6184 // = 6 << 10 + 1 + 39\n     * command_easy: 4, \"|\", 7214 // = 7 << 10 + 1 + 45\n     * command_easy: 4, \"|\", 8246 // = 8 << 10 + 1 + 53\n     * command_easy: 4, \"|\", 9279 // = 9 << 10 + 1 + 62\n     * command_easy: 4, \"|\", 10308 // = 10 << 10 + 1 + 67\n     * command_easy: 4, \"|\", 11342 // = 11 << 10 + 1 + 77\n     * command_easy: 4, \"|\", 12369 // = 12 << 10 + 1 + 80\n     * command_easy: 4, \"|\", 13397 // = 13 << 10 + 1 + 84\n     * command_easy: 4, \"|\", 14429 // = 14 << 10 + 1 + 92\n     * command_easy: 4, \"|\", 15460 // = 15 << 10 + 1 + 99\n     * command_easy: 4, \"|\", 16491 // = 16 << 10 + 1 + 106\n     * command_easy: 4, \"|\", 17524 // = 17 << 10 + 1 + 115\n     * command_easy: 4, \"|\", 18557 // = 18 << 10 + 1 + 124\n     * command_easy: 4, \"|\", 19589 // = 19 << 10 + 1 + 132\n     * command_easy: 4, \"|\", 20619 // = 20 << 10 + 1 + 138\n     * command_easy: 4, \"|\", 21649 // = 21 << 10 + 1 + 144\n     * command_easy: 4, \"|\", 22680 // = 22 << 10 + 1 + 151\n     * command_easy: 4, \"|\", 23710 // = 23 << 10 + 1 + 157\n     * command_easy: 4, \"|\", 24736 // = 24 << 10 + 1 + 159\n     * command_easy: 4, \"|\", 25766 // = 25 << 10 + 1 + 165\n     * command_easy: 4, \"|\", 26800 // = 26 << 10 + 1 + 175\n     * command_easy: 4, \"|\", 27826 // = 27 << 10 + 1 + 177\n     * command_easy: 4, \"|\", 28853 // = 28 << 10 + 1 + 180\n     * command_easy: 4, \"|\", 29885 // = 29 << 10 + 1 + 188\n     * command_easy: 4, \"|\", 30920 // = 30 << 10 + 1 + 199\n     * command_easy: 4, \"|\", 31950 // = 31 << 10 + 1 + 205\n     * command_easy: 4, \"|\", 32981 // = 32 << 10 + 1 + 212\n     * command_easy: 4, \"|\", 34011 // = 33 << 10 + 1 + 218\n     * command_easy: 4, \"|\", 35043 // = 34 << 10 + 1 + 226\n     * command_easy: 4, \"|\", 36068 // = 35 << 10 + 1 + 227\n     * command_easy: 4, \"|\", 37103 // = 36 << 10 + 1 + 238\n     * command_easy: 4, \"|\", 38133 // = 37 << 10 + 1 + 244\n     * command_easy: 4, \"|\", 39168 // = 38 << 10 + 1 + 255\n     * command_easy: 4, \"|\", 40201 // = 39 << 10 + 1 + 264\n     * command_easy: 4, \"|\", 41226 // = 40 << 10 + 1 + 265\n     * command_easy: 4, \"|\", 42251 // = 41 << 10 + 1 + 266\n     * command_easy: 4, \"|\", 43285 // = 42 << 10 + 1 + 276\n     * command_easy: 4, \"|\", 44310 // = 43 << 10 + 1 + 277\n     * command_easy: 4, \"|\", 45345 // = 44 << 10 + 1 + 288\n     * command_easy: 4, \"|\", 46374 // = 45 << 10 + 1 + 293\n     * command_easy: 4, \"|\", 47407 // = 46 << 10 + 1 + 302\n     * command_easy: 4, \"|\", 48440 // = 47 << 10 + 1 + 311\n     * command_easy: 4, \"|\", 49473 // = 48 << 10 + 1 + 320\n     * command_easy: 4, \"|\", 50498 // = 49 << 10 + 1 + 321\n     * command_easy: 4, \"|\", 51530 // = 50 << 10 + 1 + 329\n     * command_easy: 4, \"|\", 52561 // = 51 << 10 + 1 + 336\n     * command_easy: 4, \"|\", 53591 // = 52 << 10 + 1 + 342\n     * command_easy: 4, \"|\", 54623 // = 53 << 10 + 1 + 350\n     * command_easy: 4, \"|\", 55655 // = 54 << 10 + 1 + 358\n     * command_easy: 4, \"|\", 56680 // = 55 << 10 + 1 + 359\n     * command_easy: 4, \"|\", 57705 // = 56 << 10 + 1 + 360\n     * command_easy: 4, \"|\", 58730 // = 57 << 10 + 1 + 361\n     * command_easy: 4, \"|\", 59760 // = 58 << 10 + 1 + 367\n     * command_easy: 4, \"|\", 60791 // = 59 << 10 + 1 + 374\n     * command_easy: 4, \"|\", 61816 // = 60 << 10 + 1 + 375\n     * command_easy: 4, \"|\", 62849 // = 61 << 10 + 1 + 384\n     * command_easy: 4, \"|\", 63881 // = 62 << 10 + 1 + 392\n     * command_easy: 4, \"|\", 64919 // = 63 << 10 + 1 + 406\n     * command_easy: 4, \"|\", 65944 // = 64 << 10 + 1 + 407\n     * command_easy: 4, \"|\", 66969 // = 65 << 10 + 1 + 408\n     * command_easy: 4, \"|\", 68001 // = 66 << 10 + 1 + 416\n     * command_easy: 4, \"|\", 69031 // = 67 << 10 + 1 + 422\n     * command_easy: 4, \"|\", 70062 // = 68 << 10 + 1 + 429\n     * command_easy: 4, \"|\", 71092 // = 69 << 10 + 1 + 435\n     * command_easy: 4, \"|\", 72123 // = 70 << 10 + 1 + 442\n     * command_easy: 4, \"|\", 73154 // = 71 << 10 + 1 + 449\n     * command_easy: 4, \"|\", 74185 // = 72 << 10 + 1 + 456\n     * command_easy: 4, \"|\", 75219 // = 73 << 10 + 1 + 466\n     * command_easy: 4, \"|\", 76261 // = 74 << 10 + 1 + 484\n     * command_easy: 4, \"|\", 77291 // = 75 << 10 + 1 + 490\n     * command_easy: 4, \"|\", 78327 // = 76 << 10 + 1 + 502\n     * command_easy: 4, \"|\", 79357 // = 77 << 10 + 1 + 508\n     * command_easy: 4, \"|\", 80388 // = 78 << 10 + 1 + 515\n     * command_easy: 4, \"|\", 81418 // = 79 << 10 + 1 + 521\n     * command_easy: 4, \"|\", 82448 // = 80 << 10 + 1 + 527\n     * command_easy: 4, \"|\", 83482 // = 81 << 10 + 1 + 537\n     * command_easy: 4, \"|\", 84514 // = 82 << 10 + 1 + 545\n     * command_easy: 4, \"|\", 85546 // = 83 << 10 + 1 + 553\n     * command_easy: 4, \"|\", 86577 // = 84 << 10 + 1 + 560\n     * command_easy: 4, \"|\", 87609 // = 85 << 10 + 1 + 568\n     * command_easy: 4, \"|\", 88639 // = 86 << 10 + 1 + 574\n     * command_easy: 4, \"|\", 89670 // = 87 << 10 + 1 + 581\n     * command_easy: 4, \"|\", 90700 // = 88 << 10 + 1 + 587\n     * command_easy: 4, \"|\", 91731 // = 89 << 10 + 1 + 594\n     * command_easy: 4, \"|\", 92762 // = 90 << 10 + 1 + 601\n     * command_easy: 4, \"|\", 93795 // = 91 << 10 + 1 + 610\n     * command_easy: 4, \"|\", 94827 // = 92 << 10 + 1 + 618\n     * command_easy: 4, \"|\", 95860 // = 93 << 10 + 1 + 627\n     * command_easy: 4, \"|\", 96894 // = 94 << 10 + 1 + 637\n     * command_easy: 4, \"|\", 97924 // = 95 << 10 + 1 + 643\n     * command_easy: 4, \"|\", 98957 // = 96 << 10 + 1 + 652\n     * command_easy: 4, \"|\", 99988 // = 97 << 10 + 1 + 659\n     * command_easy: 4, \"|\", 101019 // = 98 << 10 + 1 + 666\n     * command_easy: 4, \"|\", 102051 // = 99 << 10 + 1 + 674\n     * command_easy: 4, \"|\", 103081 // = 100 << 10 + 1 + 680\n     * command_easy: 4, \"|\", 104114 // = 101 << 10 + 1 + 689\n     * command_easy: 4, \"|\", 105144 // = 102 << 10 + 1 + 695\n     * command_easy: 4, \"|\", 106175 // = 103 << 10 + 1 + 702\n     * command_easy: 4, \"|\", 107206 // = 104 << 10 + 1 + 709\n     * command_easy: 4, \"|\", 108237 // = 105 << 10 + 1 + 716\n     * command_easy: 4, \"|\", 109268 // = 106 << 10 + 1 + 723\n     * command_easy: 4, \"|\", 110301 // = 107 << 10 + 1 + 732\n     * command_easy: 4, \"|\", 111332 // = 108 << 10 + 1 + 739\n     * command_easy: 4, \"|\", 112363 // = 109 << 10 + 1 + 746\n     * command_easy: 4, \"|\", 113394 // = 110 << 10 + 1 + 753\n     * command_easy: 4, \"|\", 114426 // = 111 << 10 + 1 + 761\n     * command_easy: 4, \"|\", 115458 // = 112 << 10 + 1 + 769\n     * command_easy: 4, \"|\", 116488 // = 113 << 10 + 1 + 775\n     * command_easy: 4, \"|\", 117518 // = 114 << 10 + 1 + 781\n     * command_easy: 4, \"|\", 118549 // = 115 << 10 + 1 + 788\n     * command_easy: 4, \"|\", 119580 // = 116 << 10 + 1 + 795\n     * command_easy: 4, \"|\", 120611 // = 117 << 10 + 1 + 802\n     * command_easy: 4, \"|\", 121643 // = 118 << 10 + 1 + 810\n     * command_easy: 4, \"|\", 122675 // = 119 << 10 + 1 + 818\n     * command_easy: 4, \"|\", 123707 // = 120 << 10 + 1 + 826\n     */\n    compressed,\n    true,\n    \"|time|time | time |ime|Time |time the | time|s time |time of |Time|time \" +\n    \"and |me|tim|, time |time, | Time |time in |time to |e time |time\\\"|time.\" +\n    \"|time\\\">|time\\n|t|time]|time for |e|ti|time a |time that | Time|time. |.\" +\n    \"time| time, ||time with |time'|time from |time by ||| the time||time. Th\" +\n    \"e |TIME|time on |time as |time is ||timing |time\\n\\t|time:| time. |timee\" +\n    \"d ||||time(|Time, ||time at |timely | the time of ||| Time, |Time\\\"|.tim\" +\n    \"e(|TIME |Time\\\">|time=\\\"| time.|.com/time| the time of the |Time'|time. \" +\n    \"This |time,|.time |Time(|Time.|time not | time=\\\"|timeer | TIME |timeal \" +\n    \"| TIME|time='|TIME\\\"|Time. | time(|timeful | Time. |timeive |timeless |T\" +\n    \"IME'|timeest | Time.|TIME\\\">| time='|Time,|timeize |TIME.|\\302\\240time| \" +\n    \"time,|Time=\\\"|TIME=\\\"|timeous |TIME, |Time='| Time,| TIME=\\\"| TIME, |TIM\" +\n    \"E,|TIME(|TIME. | TIME.|TIME='| TIME. | Time=\\\"| TIME='| Time='\",\n  );\n}\n\nfunc TestBaseDictWord(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02,\n  };\n  verify(t,\n    /*\n     * // The stream consists of a base dictionary word.\n     * main_header\n     * metablock_header_easy: 4, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 1\n     */\n    compressed,\n    true,\n    \"time\",\n  );\n}\n\nfunc TestBaseDictWordFinishBlockOnRingbufferWrap(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x58, 0x32,\n    0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,\n    0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,\n    0x34, 0x34, 0x34, 0xd4, 0x00,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 32, 1 // 32 = minimal ringbuffer size\n     * command_easy: 4, \"aaaaaaaaaaaaaaaaaaaaaaaaaaaa\", 29\n     */\n    compressed,\n    true,\n    times(28, \"a\") +\n    \"time\",\n  );\n}\n\nfunc TestBaseDictWordTooLong(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02,\n  };\n  verify(t,\n    /*\n     * // Has an unmodified dictionary word that goes over the end of the\n     * // meta-block. Same as BaseDictWord, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 1, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 1\n     */\n    compressed,\n    false,\n    \"\",\n  );\n}\n\nfunc TestBlockCountMessage(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x0b, 0x00, 0x11, 0x01, 0x8c, 0xc1, 0xc5, 0x0d, 0x08, 0x00, 0x22,\n    0x65, 0xe1, 0xfc, 0xfd, 0x22, 0x2c, 0xc4, 0x00, 0x00, 0x38, 0xd8, 0x32,\n    0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x04, 0x10, 0x42, 0x00, 0x00,\n    0x00,\n  };\n  verify(t,\n    /*\n     * // Same as BlockSwitchMessage but also uses 0-bit block-type commands.\n     * main_header\n     * metablock_header_begin: 1, 0, 12, 0\n     * // two literal block types\n     * vlq_blocktypes: 2\n     * huffman_simple: 1,1,4, 1  // literal blocktype prefix code\n     * huffman_fixed: 26  // literal blockcount prefix code\n     * blockcount_easy: 2  // 2 a's\n     * // one ins/copy and dist block type\n     * vlq_blocktypes: 1\n     * vlq_blocktypes: 1\n     * ndirect: 0, 0\n     * // two MSB6 literal context modes\n     * bits: \"00\", \"00\"\n     * // two literal prefix codes\n     * vlq_blocktypes: 2\n     * // literal context map\n     * vlq_rlemax: 5\n     * huffman_simple: 0,3,7, 5,0,6  // context map RLE Huffman code\n     * // context map RLE: repeat 0 64 times, 1+5 64 times\n     * bits: \"01\", \"0\", \"11111\", \"11\", \"0\", \"11111\"\n     * bit: 1  // MTF enabled\n     * // one distance prefix code\n     * vlq_blocktypes: 1\n     * huffman_simple: 0,1,256, 97  // only a's\n     * huffman_simple: 0,1,256, 98  // only b's\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * // now comes the data\n     * command_inscopy_easy: 12, 0\n     * blockcount_easy: 2  // switch to other block type; 2 b's\n     * blockcount_easy: 5  // switch to other block type; 5 a's\n     * blockcount_easy: 1  // switch to other block type; 1 b\n     * blockcount_easy: 1  // switch to other block type; 1 a\n     * blockcount_easy: 1  // switch to other block type; 1 b\n     */\n    compressed,\n    true,\n    \"aabbaaaaabab\",\n  );\n}\n\nfunc TestBlockSwitchMessage(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x0b, 0x00, 0xd1, 0xe1, 0x01, 0xc6, 0xe0, 0xe2, 0x06, 0x04, 0x00,\n    0x91, 0xb2, 0x70, 0xfe, 0x7e, 0x11, 0x16, 0x62, 0x00, 0x00, 0x1c, 0x6c,\n    0x99, 0xc4, 0x00, 0x09, 0x00, 0x80, 0x3b, 0x6d, 0x02, 0x08, 0x82, 0x00,\n    0x00, 0x00,\n  };\n  verify(t,\n    /*\n     * // Uses blocks with 1-symbol Huffman codes that take 0 bits, so that it\n     * // is the block-switch commands that encode the message rather than actual\n     * // literals.\n     * main_header\n     * metablock_header_begin: 1, 0, 12, 0\n     * // two literal block types\n     * vlq_blocktypes: 2\n     * huffman_simple: 1,4,4, 1,0,2,3  // literal blocktype prefix code\n     * huffman_fixed: 26  // literal blockcount prefix code\n     * blockcount_easy: 2  // 2 a's\n     * // one ins/copy and dist block type\n     * vlq_blocktypes: 1\n     * vlq_blocktypes: 1\n     * ndirect: 0, 0\n     * // two MSB6 literal context modes\n     * bits: \"00\", \"00\"\n     * // two literal prefix codes\n     * vlq_blocktypes: 2\n     * // literal context map\n     * vlq_rlemax: 5\n     * huffman_simple: 0,3,7, 5,0,6  // context map RLE Huffman code\n     * // context map RLE: repeat 0 64 times, 1+5 64 times\n     * bits: \"01\", \"0\", \"11111\", \"11\", \"0\", \"11111\"\n     * bit: 1  // MTF enabled\n     * // one distance prefix code\n     * vlq_blocktypes: 1\n     * huffman_simple: 0,1,256, 97  // only a's\n     * huffman_simple: 0,1,256, 98  // only b's\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * // now comes the data\n     * command_inscopy_easy: 12, 0\n     * bits: \"0\"; blockcount_easy: 2  // switch to other block type; 2 b's\n     * bits: \"0\"; blockcount_easy: 5  // switch to other block type; 5 a's\n     * bits: \"0\"; blockcount_easy: 1  // switch to other block type; 1 b\n     * bits: \"0\"; blockcount_easy: 1  // switch to other block type; 1 a\n     * bits: \"0\"; blockcount_easy: 1  // switch to other block type; 1 b\n     */\n    compressed,\n    true,\n    \"aabbaaaaabab\",\n  );\n}\n\nfunc TestClClTreeDeficiency(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0x43, 0x01, 0xe0, 0x05, 0x88,\n    0x55, 0x90, 0x01, 0x00, 0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00,\n    0x77, 0xda, 0x28, 0x40, 0x23,\n  };\n  verify(t,\n    /*\n     * // This test is a copy of TooManySymbolsRepeated, with changed clcl table.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,3,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"101\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1\n     * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 0, 0, 101100010\n     */\n    compressed,\n    false,\n    \"aaab\",\n  );\n}\n\nfunc TestClClTreeExcess(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc3, 0x7b, 0x80, 0x58, 0x41,\n    0x06, 0x00, 0xe0, 0x60, 0xcb, 0x24, 0x06, 0x48, 0x00, 0x00, 0xdc, 0x69,\n    0xa3, 0x00, 0x8d, 0x00,\n  };\n  verify(t,\n    /*\n     * // This test is a copy of ClClTreeDeficiency, with changed clcl table.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,1,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"1\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1\n     * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 0, 0, 101100010\n     */\n    compressed,\n    false,\n    \"aaab\",\n  );\n}\n\nfunc TestComplexHuffmanCodeTwoSymbols(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x01, 0x00, 0x00, 0x80, 0x03, 0xe0, 0xa2, 0x1a, 0x00, 0x00, 0x0e,\n    0xb6, 0x4c, 0x62, 0x80, 0x04, 0x00, 0xc0, 0x9d, 0x36, 0x12, 0x04,\n  };\n  verify(t,\n    /*\n     * // This tests a complex Huffman code with only two symbols followed by a\n     * // tiny amount of content.\n     * main_header\n     * metablock_header_begin: 1, 0, 2, 0\n     * metablock_header_trivial_context\n     * // begin of literal Huffman tree. The tree has symbol length 1 for \"a\",\n     * // symbol length 1 for \"b\" and symbol length 0 for all others.\n     * hskip: 0\n     * clcl_ordered: 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n     * set_prefix_cl_rle: \"\", \"0\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"1\"\n     * cl_rle_rep_0: 97\n     * cl_rle: 1  // literal number 97, that is, the letter 'a'\n     * cl_rle: 1  // literal number 98, that is, the letter 'b'\n     * // end of literal Huffman tree\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 2, 0\n     * command_literal_bits: 0, 1  // a followed by b\n     */\n    compressed,\n    true,\n    \"ab\",\n  );\n}\n\nfunc TestCompressedUncompressedShortCompressed(t *testing.T) {\n  compressed := []uint8{\n    0x8b, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x66, 0x6f,\n    0x1b, 0x0a, 0x50, 0x00, 0x10, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x31,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0,\n    0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x24, 0x00,\n  };\n  verify(t,\n    /*\n     * main_header: 22\n     * metablock_header_easy: 1022, 0\n     * command_easy: 1021, \"a\", 1 // 1022 x \"a\"\n     * metablock_uncompressed: \"bbbbbb\"\n     * metablock_header_easy: 4, 1\n     * command_easy: 4, \"\", 1 // 6 + 4 = 10 x \"b\"\n     */\n    compressed,\n    true,\n    times(1022, \"a\") +\n    times(10, \"b\"),\n  );\n}\n\nfunc TestCompressedUncompressedShortCompressedSmallWindow(t *testing.T) {\n  compressed := []uint8{\n    0x21, 0xf4, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00,\n    0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x34, 0x7b,\n    0xdb, 0x50, 0x80, 0x02, 0x80, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x31,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0,\n    0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x24, 0x00,\n  };\n  verify(t,\n    /*\n     * main_header: 10\n     * metablock_header_easy: 1022, 0\n     * command_easy: 1021, \"a\", 1 // 1022 x \"a\"\n     * metablock_uncompressed: \"bbbbbb\"\n     * metablock_header_easy: 4, 1\n     * command_easy: 4, \"\", 1 // 6 + 4 = 10 x \"b\"\n     */\n    compressed,\n    true,\n    times(1022, \"a\") +\n    times(10, \"b\"),\n  );\n}\n\nfunc TestCopyLengthTooLong(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x11, 0x86,\n    0x02,\n  };\n  verify(t,\n    /*\n     * // Has a copy length that goes over the end of the meta-block.\n     * // Same as OneCommand, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 2, 1\n     * command_easy: 2, \"a\", 1\n     */\n    compressed,\n    false,\n    \"\",\n  );\n}\n\nfunc TestCopyTooLong(t *testing.T) {\n  compressed := []uint8{\n    0xa1, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00,\n    0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x34, 0xab,\n    0xdb, 0x50, 0x00,\n  };\n  verify(t,\n    /*\n     * // Has a copy length that goes over the end of the meta-block,\n     * // with a ringbuffer wrap.\n     * main_header: 10\n     * metablock_header_easy: 2, 1\n     * command_easy: 1024, \"a\", 1\n     */\n    compressed,\n    false,\n    \"\",\n  );\n}\n\nfunc TestCustomHuffmanCode(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc3, 0x3d, 0x80, 0x58, 0x82,\n    0x08, 0x00, 0xc0, 0xc1, 0x96, 0x49, 0x0c, 0x90, 0x00, 0x00, 0xb8, 0xd3,\n    0x46, 0x01, 0x1a, 0x01,\n  };\n  verify(t,\n    /*\n     * // This tests a small hand crafted Huffman code followed by a tiny amount\n     * // of content. This tests if the bit reader detects the end correctly even\n     * // with tiny content after a larger Huffman tree encoding.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * // begin of literal Huffman tree. The tree has symbol length 1 for \"a\",\n     * // symbol length 8 for null, symbol length 9 for all others. The length 1\n     * // for a is chosen on purpose here, the others must be like that to\n     * // fulfill the requirement that sum of 32>>length is 32768.\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,2,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"10\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1  // literal number 97, that is, the letter 'a'\n     * cl_rle_rep: 9, 158\n     * // end of literal Huffman tree\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * // Here is how the code \"101100010\" for b is derived: remember that a has\n     * // symbol length 1, null has symbol length 8, the rest 9. So in the\n     * // canonical Huffman code, the code for \"a\" is \"0\", for null is\n     * // \"10000000\". The next value has \"100000010\" (cfr. the rules of canonical\n     * // prefix code). Counting upwards +95 from there, the value \"@\" (ASCII 96,\n     * // before \"a\") has \"101100001\", and so b, the next 9-bit symbol, has the\n     * // next binary value \"101100010\".\n     * command_literal_bits: 0, 0, 0, 101100010  // 3 a's followed by a b\n     */\n    compressed,\n    true,\n    \"aaab\",\n  );\n}\n\nfunc TestDistanceLut(t *testing.T) {\n  compressed := []uint8{\n    0x8b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x99, 0x86,\n    0x46, 0xc6, 0x22, 0x14, 0x00, 0x00, 0x03, 0x00, 0x00, 0x1c, 0xa7, 0x6d,\n    0x00, 0x00, 0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x21, 0x91, 0x69, 0x62,\n    0x6a, 0x36,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 6, 0  // implicit ndirect: 0, 0\n     * command_easy: 3, \"abc\", 3  // Insert \"abc\", copy \"abc\"\n     * metablock_header_begin: 0, 0, 6, 0\n     * vlq_blocktypes: 1  // num litetal block types\n     * vlq_blocktypes: 1  // num command block types\n     * vlq_blocktypes: 1  // num distance block types\n     * ndirect: 3, 0\n     * bits: \"00\"  // literal context modes\n     * vlq_blocktypes: 1  // num literal Huffman trees\n     * // command has no context -> num trees == num block types\n     * vlq_blocktypes: 1  // num distance Huffman trees\n     * huffman_fixed: 256\n     * huffman_fixed: 704\n     * huffman_simple: 0,1,67, 18\n     * command_inscopy_easy: 3, 3  // Insert 3, copy 3\n     * command_literals_easy: \"def\"\n     * // 0-bit Huffman code : dcode = 18 -> third direct distance\n     * metablock_lastempty  // make sure that no extra distance bits are read\n     */\n    compressed,\n    true,\n    \"abcabcdefdef\",\n  );\n}\n\nfunc TestEmpty(t *testing.T) {\n  compressed := []uint8{\n    0x3b,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_lastempty\n     */\n    compressed,\n    true,\n    \"\",\n  );\n}\n\nfunc TestHelloWorld(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x00, 0x59,\n    0x98, 0xda, 0xd8, 0xd8, 0x13, 0xb8, 0xdb, 0x3b, 0xd9, 0x98, 0x00,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_fixed: \"hello world\", 1\n     */\n    compressed,\n    true,\n    \"hello world\",\n  );\n}\n\nfunc TestInsertTooLong(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x09, 0x86,\n    0x46,\n  };\n  verify(t,\n    /*\n     * // Has an insert length that goes over the end of the meta-block.\n     * // Same as OneInsert, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 1, 1\n     * command_easy: 0, \"ab\"\n     */\n    compressed,\n    false,\n    \"\",\n  );\n}\n\nfunc TestIntactDistanceRingBuffer0(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0xa1, 0x80,\n    0x20, 0x00,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 11, 1\n     * command_inscopy_easy: 0, 7 // \"himself\" from dictionary\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // copy \"self\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    \"himselfself\",\n  );\n}\n\nfunc TestIntactDistanceRingBuffer1(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x09, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x21, 0xa0,\n    0x20, 0x00,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 10, 1\n     * command_inscopy_easy: 0, 6 // \"scroll\" from dictionary\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // copy \"roll\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    \"scrollroll\",\n  );\n}\n\nfunc TestIntactDistanceRingBuffer2(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x80,\n    0x20, 0x50, 0x10, 0x24, 0x08, 0x06,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 16, 1\n     * command_inscopy_easy: 0, 4 // \"left\" from dictionary (index = 3 = 4 - 1)\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 11 - 5)\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 15 - 9)\n     * bits: \"010000\" // distance = 15 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"left\" from dictionary (index = 3 = 16 - 13)\n     * bits: \"110000\" // distance = 16 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    \"leftdatadataleft\",\n  );\n}\n\nfunc TestIntactDistanceRingBufferNoDistanceValue0(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x17, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x40, 0x82,\n    0x40, 0x41, 0x90, 0x20, 0x58, 0x18, 0x00,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 24, 1\n     * // cmd is {ins_extra, copy_extra, distance_code, ctx, ins_off, copy_off}\n     * // cmd.2 = {0x00, 0x00, 0, 0x02, 0x0000, 0x0004}\n     * // cmd.2 = no insert, copy length = 4, distance_code = 0 (last distance)\n     * command_short: 2 // \"left\" from dictionary (index = 3 = 4 - 1)\n     * // Check that RB is untouched after the first command...\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 11 - 5)\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 15 - 9)\n     * bits: \"010000\" // distance = 15 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"left\" from dictionary (index = 3 = 16 - 13)\n     * bits: \"110000\" // distance = 16 from RB; RB remains intact\n     * command_inscopy_easy: 0, 8 // copy \"leftleft\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    \"leftdatadataleftleftleft\",\n  );\n}\n\nfunc TestIntactDistanceRingBufferNoDistanceValue1(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x19, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0xc0, 0x82,\n    0x41, 0x41, 0x90, 0x20, 0x58, 0x18, 0x00,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 26, 1\n     * // cmd is {ins_extra, copy_extra, distance_code, ctx, ins_off, copy_off}\n     * // cmd.3 = {0x00, 0x00, 0, 0x03, 0x0000, 0x0005}\n     * // cmd.3 = no insert, copy length = 5, distance_code = 0 (last distance)\n     * command_short: 3 // \"world\" from dictionary (index = 3 = 4 - 1)\n     * // Check that RB is untouched after the first command...\n     * command_inscopy_easy: 0, 5 // \"white\" from dictionary (index = 5 = 11 - 6)\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"back\" from dictionary (index = 4 = 15 - 11)\n     * bits: \"010000\" // distance = 15 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"down\" from dictionary (index = 1 = 16 - 15)\n     * bits: \"110000\" // distance = 16 from RB; RB remains intact\n     * command_inscopy_easy: 0, 8 // copy \"downdown\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    \"worldwhitebackdowndowndown\",\n  );\n}\n\nfunc TestInvalidNoLastMetablock(t *testing.T) {\n  compressed := []uint8{\n    0x0b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x00, 0x13,\n    0x59, 0x98, 0xda, 0xd8, 0xd8, 0x13, 0xb8, 0xdb, 0x3b, 0xd9, 0x98, 0xe8,\n    0x00,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_fixed: \\\"hello world\\\", 0\n     */\n    compressed,\n    false,\n    \"hello world\",\n  );\n}\n\nfunc TestInvalidNoMetaBlocks(t *testing.T) {\n  compressed := []uint8{\n    0x0b,\n  };\n  verify(t,\n    /*\n     * main_header\n     */\n    compressed,\n    false,\n    \"\",\n  );\n}\n\nfunc TestInvalidTooFarDist(t *testing.T) {\n  compressed := []uint8{\n    0xa1, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00,\n    0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0xe8, 0xe0,\n    0x62, 0x6f, 0x4f, 0x60, 0x66, 0xe8, 0x44, 0x38, 0x0f, 0x09, 0x0d,\n  };\n  verify(t,\n    /*\n     * main_header: 10\n     * metablock_header_begin: 1, 0, 10, 0\n     * metablock_header_trivial_context\n     * huffman_fixed: 256\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_easy: 2, \"too far!\", 1000000  // distance too far for 10 wbits\n     */\n    compressed,\n    false,\n    \"\",\n  );\n}\n\nfunc TestInvalidTooLargeContextMap(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x00, 0x00, 0xd1, 0xe1, 0x01, 0xc6, 0xe0, 0xe2, 0x06, 0x00, 0x00,\n    0x91, 0xb2, 0x70, 0xfe, 0xfb, 0x45, 0x58, 0x88, 0x01, 0x00, 0x70, 0xb0,\n    0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x01,\n  };\n  verify(t,\n    /*\n     * // Has a repeat code a context map that makes the size too big -> invalid.\n     * main_header\n     * metablock_header_begin: 1, 0, 1, 0\n     * // two literal block types\n     * vlq_blocktypes: 2\n     * huffman_simple: 1,4,4, 1,0,2,3  // literal blocktype prefix code\n     * huffman_fixed: 26  // literal blockcount prefix code\n     * blockcount_easy: 1\n     * // one ins/copy and dist block type\n     * vlq_blocktypes: 1\n     * vlq_blocktypes: 1\n     * ndirect: 0, 0\n     * // two MSB6 literal context modes\n     * bits: \"00\", \"00\"\n     * // two literal prefix codes\n     * vlq_blocktypes: 2\n     * // literal context map\n     * vlq_rlemax: 5\n     * huffman_simple: 0,3,7, 5,0,6  // context map RLE Huffman code\n     * // Too long context map RLE: repeat 0 64 times, 1+5 65 times, that is 129\n     * // values which is 1 too much.\n     * bits: \"01\", \"0\", \"11111\", \"11\", \"11\", \"0\", \"11111\"\n     * bit: 1  // MTF enabled\n     * // one distance prefix code\n     * vlq_blocktypes: 1\n     * huffman_simple: 0,1,256, 97  // only a's\n     * huffman_simple: 0,1,256, 98  // only b's\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * // now comes the data\n     * command_inscopy_easy: 1, 0\n     */\n    compressed,\n    false,\n    \"a\",\n  );\n}\n\nfunc TestInvalidTransformType(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x2d,\n    0x01, 0x19,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 4, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 123905 // = 121 << 10 + 1\n     */\n    compressed,\n    false,\n    \"\",\n  );\n}\n\nfunc TestInvalidWindowBits9(t *testing.T) {\n  compressed := []uint8{\n    0x91, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00,\n    0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0xc8, 0x20,\n    0x32, 0xd4, 0x01,\n  };\n  verify(t,\n    /*\n     * main_header: 9\n     * metablock_fixed: \\\"a\\\", 1\n     */\n    compressed,\n    false,\n    \"a\",\n  );\n}\n\nfunc TestManyTinyMetablocks(t *testing.T) {\n  compressed := []uint8{\n    0x0b, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x34,\n  };\n  verify(t,\n    /*\n     * main_header\n     * repeat: 300\n     *   metablock_uncompressed: \"a\"\n     *   metablock_fixed: \"b\"\n     * end_repeat\n     * metablock_lastempty\n     */\n    compressed,\n    true,\n    times(300, \"ab\"),\n  );\n}\n\nfunc TestNegativeDistance(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02,\n    0x01, 0x42, 0x01, 0x42, 0x01, 0x42, 0x01, 0x42, 0x01, 0x42, 0x01, 0x1c,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 16, 1\n     * command_inscopy_easy: 0, 4 // time\n     * command_dist_easy: 1\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2 // All rb items are 2 now\n     * command_inscopy_easy: 0, 2\n     * bits: \"011100\" // 15 -> distance = rb[idx + 2] - 3\n     */\n    compressed,\n    false,\n    \"timemememememeXX\",\n  );\n}\n\nfunc TestNegativeRemainingLenBetweenMetablocks(t *testing.T) {\n  compressed := []uint8{\n    0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x09, 0x86,\n    0x46, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x91, 0x60,\n    0x68, 0x04,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_easy: 1, 0\n     * command_easy: 0, \"ab\"  // remaining length == -1 -> invalid stream\n     * metablock_header_easy: 2, 1\n     * command_easy: 0, \"ab\"\n     */\n    compressed,\n    false,\n    \"abab\",\n  );\n}\n\nfunc TestOneCommand(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x11, 0x86,\n    0x02,\n  };\n  verify(t,\n    /*\n     * // The stream consists of one command with insert and copy.\n     * main_header\n     * metablock_header_easy: 3, 1\n     * command_easy: 2, \"a\", 1\n     */\n    compressed,\n    true,\n    \"aaa\",\n  );\n}\n\nfunc TestOneInsert(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x09, 0x86,\n    0x46,\n  };\n  verify(t,\n    /*\n     * // The stream consists of one half command with insert only.\n     * main_header\n     * metablock_header_easy: 2, 1\n     * command_easy: 0, \"ab\"\n     */\n    compressed,\n    true,\n    \"ab\",\n  );\n}\n\nfunc TestPeculiarWrap(t *testing.T) {\n  compressed := []uint8{\n    0x21, 0xfc, 0x1f, 0x00, 0x00, 0xa1, 0x12, 0x82, 0x04, 0x60, 0x1d, 0x00,\n    0xca, 0xfe, 0xba, 0xbe, 0xde, 0xad, 0xbe, 0xef, 0x21, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03,\n    0x24, 0x00, 0x00, 0xee, 0xb4, 0x91, 0x61, 0x68, 0x64, 0x0c,\n  };\n  verify(t,\n    /*\n     * main_header: 10\n     * // See ZeroCostCommand\n     * metablock_header_begin: 0, 0, 2048, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 0,1,256, 42\n     * huffman_simple: 0,1,704, 130\n     * huffman_simple: 0,1,64, 0\n     * // Metadata block; at least 8 bytes long\n     * bits: \"0\", \"11\", \"0\", \"01\", \"00000111\"\n     * byte_boundary\n     * bits: \"11001010\", \"11111110\", \"10111010\", \"10111110\"\n     * bits: \"11011110\", \"10101101\", \"10111110\", \"11101111\"\n     * metablock_header_easy: 3, 1\n     * command_easy: 0, \"abc\", 0\n     */\n    compressed,\n    true,\n    times(512, \"left\") +\n    \"abc\",\n  );\n}\n\nfunc TestSimplePrefix(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,\n    0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 1,4,256, 97,98,99,100  // ASCII codes for a, b, c, d\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 10, 110, 111  // a, b, c, d\n     */\n    compressed,\n    true,\n    \"abcd\",\n  );\n}\n\nfunc TestSimplePrefixDuplicateSymbols(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc2, 0xc4, 0x02, 0x00, 0x70,\n    0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 1,4,256, 97,98,97,98  // ASCII codes for a, b, a, b\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 10, 110, 111  // a, b, a, b\n     */\n    compressed,\n    false,\n    \"abab\",\n  );\n}\n\nfunc TestSimplePrefixOutOfRangeSymbols(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x4d, 0xff, 0xef,\n    0x7f, 0xff, 0xfc, 0x07, 0x00, 0xb8, 0xd3, 0x06,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_fixed: 256\n     * huffman_simple: 1,4,704, 1023,1022,1021,1020\n     * huffman_fixed: 64\n     */\n    compressed,\n    false,\n    \"\",\n  );\n}\n\nfunc TestSimplePrefixPlusExtraData(t *testing.T) {\n  t.Skip(\"nevermind\")\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,\n    0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d,\n    0x55, 0xaa,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 1,4,256, 97,98,99,100  // ASCII codes for a, b, c, d\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 10, 110, 111  // a, b, c, d\n     * byte_boundary\n     * bits: \"01010101\", \"10101010\"\n     */\n    compressed,\n    true,\n    \"abcd\",\n  );\n}\n\nfunc TestStressReadDistanceExtraBits(t *testing.T) {\n  compressed := []uint8{\n    0x4f, 0xfe, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00,\n    0x00, 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0xf6,\n    0x69, 0xef, 0xff, 0x0c, 0x8d, 0x8c, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0xa8, 0xaa, 0xef, 0xab, 0xaa, 0x7f, 0x24, 0x16, 0x35, 0x8f, 0xac, 0x9e,\n    0x3d, 0xf7, 0xf3, 0xe3, 0x0a, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x78, 0x01,\n    0x08, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41,\n    0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,\n    0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32,\n    0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45,\n    0x46, 0x03,\n  };\n  verify(t,\n    /*\n     * main_header: 24\n     * metablock_header_easy: 8388605, 0  // 2^23 - 3 = shortest 22-bit distance\n     * command_easy: 8388602, \"abc\", 1\n     * metablock_header_begin: 0, 0, 3, 0\n     * vlq_blocktypes: 1  // num litetal block types\n     * vlq_blocktypes: 1  // num command block types\n     * vlq_blocktypes: 1  // num distance block types\n     * ndirect: 0, 0\n     * bits: \"00\"  // literal context modes\n     * vlq_blocktypes: 1  // num literal Huffman trees\n     * // command has no context -> num trees == num block types\n     * vlq_blocktypes: 1  // num distance Huffman trees\n     * huffman_fixed: 256\n     * huffman_fixed: 704\n     * // Begin of distance Huffman tree. First 15 codes have lengths 1 to 15.\n     * // Symbol that corresponds to first half of 22-bit distance range is also\n     * // 15. All other symbols are 0.\n     * hskip: 0\n     * clcl_ordered: 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4, 5,5,5,5\n     * set_prefix_cl_rle: \"0000\", \"0001\", \"0010\", \"0011\", \\\n     *                    \"0100\", \"0101\", \"0110\", \"0111\", \\\n     *                    \"1000\", \"1001\", \"1010\", \"1011\", \\\n     *                    \"1100\", \"1101\", \\\n     *                    \"11100\", \"11101\", \"11110\", \"11111\"\n     * cl_rle: 1\n     * cl_rle: 2\n     * cl_rle: 3\n     * cl_rle: 4\n     * cl_rle: 5\n     * cl_rle: 6\n     * cl_rle: 7\n     * cl_rle: 8\n     * cl_rle: 9\n     * cl_rle: 10\n     * cl_rle: 11\n     * cl_rle: 12\n     * cl_rle: 13\n     * cl_rle: 14\n     * cl_rle: 15\n     * cl_rle_rep_0: 43\n     * cl_rle: 15  // literal number 97, that is, the letter 'a'\n     * // end of literal Huffman tree\n     * command_inscopy_easy: 0, 3  // Insert 0, copy 3\n     * // 15 bits of distance code plus 22 extra bits\n     * command_dist_bits: \"111111111111111\", \"0000000000000000000000\"\n     * metablock_uncompressed: \"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\"\n     * metablock_lastempty\n     */\n    compressed,\n    true,\n    \"abc\" +\n    times(8388602, \"c\") +\n    \"abc\" +\n    times(3, \"0123456789ABCDEF\"),\n  );\n}\n\nfunc TestTooManySymbolsRepeated(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc3, 0x3d, 0x80, 0x58, 0x82,\n    0x0c, 0x00, 0xc0, 0xc1, 0x96, 0x49, 0x0c, 0x90, 0x00, 0x00, 0xb8, 0xd3,\n    0x46, 0x01, 0x1a, 0x01,\n  };\n  verify(t,\n    /*\n     * // This test is a copy of CustomHuffmanCode, with changed repeat count.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,2,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"10\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1\n     * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 0, 0, 101100010\n     */\n    compressed,\n    false,\n    \"aaab\",\n  );\n}\n\nfunc TestTransformedDictWord(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x09,\n    0x01, 0x01,\n  };\n  verify(t,\n    /*\n     * // The stream consists of a transformed dictionary word.\n     * main_header\n     * metablock_header_easy: 9, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 5121  // 5 << 10 + 1\n     */\n    compressed,\n    true,\n    \"time the \",\n  );\n}\n\nfunc TestTransformedDictWordTooLong(t *testing.T) {\n  compressed := []uint8{\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x09,\n    0x01, 0x01,\n  };\n  verify(t,\n    /*\n     * // Has a transformed dictionary word that goes over the end of the\n     * // meta-block, but the base dictionary word fits in the meta-block.\n     * // Same as TransformedDictWord, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 4, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 5121  // 5 << 10 + 1\n     */\n    compressed,\n    false,\n    \"\",\n  );\n}\n\nfunc TestZeroCostCommand(t *testing.T) {\n  compressed := []uint8{\n    0xa1, 0xf8, 0x1f, 0x00, 0x00, 0xa1, 0x12, 0x82, 0x04, 0x00,\n  };\n  verify(t,\n    /*\n     * main_header: 10\n     * metablock_header_begin: 1, 0, 1024, 0  // last, not empty, length, compressed\n     * metablock_header_trivial_context\n     * huffman_simple: 0,1,256, 42  // literal: any\n     * huffman_simple: 0,1,704, 130  // command: insert = 0, copy = 4, distance_code = -1\n     * huffman_simple: 0,1,64, 0 // distance: last\n     * // 256 0-bit commands with direct distances\n     */\n    compressed,\n    true,\n    times(256, \"left\"),\n  );\n}\n\nfunc TestZeroCostLiterals(t *testing.T) {\n  compressed := []uint8{\n    0x9b, 0xff, 0xff, 0xff, 0x00, 0x20, 0x54, 0x00, 0x00, 0x38, 0xd8, 0x32,\n    0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0xcc, 0xe1, 0x7b, 0xfa, 0x0f,\n  };\n  verify(t,\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 16777216, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 0,1,256, 42  // Single symbol alphabet\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 16777216, 0\n     * // 16777216 times 0 bits\n     */\n    compressed,\n    true,\n    times(16777216, \"*\"),\n  );\n}\n\n/* GENERATED CODE END */\n"
  },
  {
    "path": "go/cbrotli/writer.go",
    "content": "// Copyright 2016 Google Inc. All Rights Reserved.\n//\n// Distributed under MIT license.\n// See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\npackage cbrotli\n\n/*\n#include <stdbool.h>\n#include <stddef.h>\n#include <stdint.h>\n\n#include <brotli/encode.h>\n\nstruct CompressStreamResult {\n  size_t bytes_consumed;\n  const uint8_t* output_data;\n  size_t output_data_size;\n  int success;\n  int has_more;\n};\n\nstatic struct CompressStreamResult CompressStream(\n    BrotliEncoderState* s, BrotliEncoderOperation op,\n    const uint8_t* data, size_t data_size) {\n  struct CompressStreamResult result;\n  size_t available_in = data_size;\n  const uint8_t* next_in = data;\n  size_t available_out = 0;\n  result.success = BrotliEncoderCompressStream(s, op,\n      &available_in, &next_in, &available_out, 0, 0) ? 1 : 0;\n  result.bytes_consumed = data_size - available_in;\n  result.output_data = 0;\n  result.output_data_size = 0;\n  if (result.success) {\n    result.output_data = BrotliEncoderTakeOutput(s, &result.output_data_size);\n  }\n  result.has_more = BrotliEncoderHasMoreOutput(s) ? 1 : 0;\n  return result;\n}\n*/\nimport \"C\"\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"io\"\n\t\"runtime\"\n\t\"unsafe\"\n)\n\n// PreparedDictionary is a handle to native object.\ntype PreparedDictionary struct {\n\topaque *C.BrotliEncoderPreparedDictionary\n\tpinner *runtime.Pinner\n}\n\n// DictionaryType is type for shared dictionary\ntype DictionaryType int\n\nconst (\n\t// DtRaw denotes LZ77 prefix dictionary\n\tDtRaw DictionaryType = 0\n\t// DtSerialized denotes serialized format\n\tDtSerialized DictionaryType = 1\n)\n\n// NewPreparedDictionary prepares dictionary data for encoder.\n// Same instance can be used for multiple encoding sessions.\n// Close MUST be called to free resources.\nfunc NewPreparedDictionary(data []byte, dictionaryType DictionaryType, quality int) *PreparedDictionary {\n\tvar ptr *C.uint8_t\n\tif len(data) != 0 {\n\t\tptr = (*C.uint8_t)(&data[0])\n\t}\n\tp := new(runtime.Pinner)\n\tp.Pin(&data[0])\n\td := C.BrotliEncoderPrepareDictionary(C.BrotliSharedDictionaryType(dictionaryType), C.size_t(len(data)), ptr, C.int(quality), nil, nil, nil)\n\treturn &PreparedDictionary{\n\t\topaque: d,\n\t\tpinner: p,\n\t}\n}\n\n// Close frees C resources.\n// IMPORTANT: calling Close until all encoders that use that dictionary are closed as well will\n// cause crash.\nfunc (p *PreparedDictionary) Close() error {\n\t// C-Brotli tolerates `nil` pointer here.\n\tC.BrotliEncoderDestroyPreparedDictionary(p.opaque)\n\tp.opaque = nil\n\tp.pinner.Unpin()\n\treturn nil\n}\n\n// WriterOptions configures Writer.\ntype WriterOptions struct {\n\t// Quality controls the compression-speed vs compression-density trade-offs.\n\t// The higher the quality, the slower the compression. Range is 0 to 11.\n\tQuality int\n\t// LGWin is the base 2 logarithm of the sliding window size.\n\t// Range is 10 to 24. 0 indicates automatic configuration based on Quality.\n\tLGWin int\n\t// Prepared shared dictionary\n\tDictionary *PreparedDictionary\n}\n\n// Writer implements io.WriteCloser by writing Brotli-encoded data to an\n// underlying Writer.\ntype Writer struct {\n\thealthy      bool\n\tdst          io.Writer\n\tstate        *C.BrotliEncoderState\n\tbuf, encoded []byte\n}\n\nvar (\n\terrEncode          = errors.New(\"cbrotli: encode error\")\n\terrWriterClosed    = errors.New(\"cbrotli: Writer is closed\")\n\terrWriterUnhealthy = errors.New(\"cbrotli: Writer is unhealthy\")\n)\n\n// NewWriter initializes new Writer instance.\n// Close MUST be called to free resources.\nfunc NewWriter(dst io.Writer, options WriterOptions) *Writer {\n\tstate := C.BrotliEncoderCreateInstance(nil, nil, nil)\n\thealthy := state != nil\n\tif C.BrotliEncoderSetParameter(\n\t\tstate, C.BROTLI_PARAM_QUALITY, (C.uint32_t)(options.Quality)) == 0 {\n\t\thealthy = false\n\t}\n\tif options.LGWin > 0 {\n\t\tif C.BrotliEncoderSetParameter(\n\t\t\tstate, C.BROTLI_PARAM_LGWIN, (C.uint32_t)(options.LGWin)) == 0 {\n\t\t\thealthy = false\n\t\t}\n\t}\n\tif options.Dictionary != nil {\n\t\tif C.BrotliEncoderAttachPreparedDictionary(state, options.Dictionary.opaque) == 0 {\n\t\t\thealthy = false\n\t\t}\n\t}\n\treturn &Writer{\n\t\thealthy: healthy,\n\t\tdst:     dst,\n\t\tstate:   state,\n\t}\n}\n\nfunc (w *Writer) writeChunk(p []byte, op C.BrotliEncoderOperation) (n int, err error) {\n\tif !w.healthy {\n\t\treturn 0, errWriterUnhealthy\n\t}\n\tif w.state == nil {\n\t\treturn 0, errWriterClosed\n\t}\n\n\tfor {\n\t\tvar data *C.uint8_t\n\t\tif len(p) != 0 {\n\t\t\tdata = (*C.uint8_t)(&p[0])\n\t\t}\n\t\tresult := C.CompressStream(w.state, op, data, C.size_t(len(p)))\n\t\tif result.success == 0 {\n\t\t\treturn n, errEncode\n\t\t}\n\t\tp = p[int(result.bytes_consumed):]\n\t\tn += int(result.bytes_consumed)\n\n\t\tlength := int(result.output_data_size)\n\t\tif length != 0 {\n\t\t\t// It is a workaround for non-copying-wrapping of native memory.\n\t\t\t// C-encoder never pushes output block longer than ((2 << 25) + 502).\n\t\t\t// TODO(eustas): use natural wrapper, when it becomes available, see\n\t\t\t//               https://golang.org/issue/13656.\n\t\t\toutput := (*[1 << 30]byte)(unsafe.Pointer(result.output_data))[:length:length]\n\t\t\t_, err = w.dst.Write(output)\n\t\t\tif err != nil {\n\t\t\t\treturn n, err\n\t\t\t}\n\t\t}\n\t\tif len(p) == 0 && result.has_more == 0 {\n\t\t\treturn n, nil\n\t\t}\n\t}\n}\n\n// Flush outputs encoded data for all input provided to Write. The resulting\n// output can be decoded to match all input before Flush, but the stream is\n// not yet complete until after Close.\n// Flush has a negative impact on compression.\nfunc (w *Writer) Flush() error {\n\t_, err := w.writeChunk(nil, C.BROTLI_OPERATION_FLUSH)\n\treturn err\n}\n\n// Close flushes remaining data to the decorated writer and frees C resources.\nfunc (w *Writer) Close() error {\n\t// If stream is already closed, it is reported by `writeChunk`.\n\t_, err := w.writeChunk(nil, C.BROTLI_OPERATION_FINISH)\n\t// C-Brotli tolerates `nil` pointer here.\n\tC.BrotliEncoderDestroyInstance(w.state)\n\tw.state = nil\n\treturn err\n}\n\n// Write implements io.Writer. Flush or Close must be called to ensure that the\n// encoded bytes are actually flushed to the underlying Writer.\nfunc (w *Writer) Write(p []byte) (n int, err error) {\n\treturn w.writeChunk(p, C.BROTLI_OPERATION_PROCESS)\n}\n\n// Encode returns content encoded with Brotli.\nfunc Encode(content []byte, options WriterOptions) ([]byte, error) {\n\tvar buf bytes.Buffer\n\twriter := NewWriter(&buf, options)\n\t_, err := writer.Write(content)\n\tif closeErr := writer.Close(); err == nil {\n\t\terr = closeErr\n\t}\n\treturn buf.Bytes(), err\n}\n"
  },
  {
    "path": "java/BUILD.bazel",
    "content": "load(\"@rules_cc//cc:cc_binary.bzl\", \"cc_binary\")\n\npackage(\n    default_visibility = [\"//visibility:public\"],\n)\n\ngenrule(\n    name = \"license\",\n    srcs = [\"@org_brotli//:LICENSE\"],\n    outs = [\"META-INF/LICENSE\"],\n    cmd = \"cp -f $< $@\",\n)\n\n########################################################\n# WARNING: do not (transitively) depend on this target!\n########################################################\ncc_binary(\n    name = \"brotli_jni.dll\",\n    srcs = [\n        \"//org/brotli/wrapper/common:jni_src\",\n        \"//org/brotli/wrapper/dec:jni_src\",\n        \"//org/brotli/wrapper/enc:jni_src\",\n        \"@org_brotli//:common_headers\",\n        \"@org_brotli//:common_sources\",\n        \"@org_brotli//:dec_headers\",\n        \"@org_brotli//:dec_sources\",\n        \"@org_brotli//:enc_headers\",\n        \"@org_brotli//:enc_sources\",\n    ],\n    linkshared = True,\n    deps = [\n        \"@bazel_tools//tools/jdk:jni\",\n        \"@org_brotli//:brotli_inc\",\n    ],\n)\n\n########################################################\n# WARNING: do not (transitively) depend on this target!\n########################################################\ncc_binary(\n    name = \"brotli_jni_no_dictionary_data.dll\",\n    srcs = [\n        \"//org/brotli/wrapper/common:jni_src\",\n        \"//org/brotli/wrapper/dec:jni_src\",\n        \"//org/brotli/wrapper/enc:jni_src\",\n        \"@org_brotli//:common_headers\",\n        \"@org_brotli//:common_sources\",\n        \"@org_brotli//:dec_headers\",\n        \"@org_brotli//:dec_sources\",\n        \"@org_brotli//:enc_headers\",\n        \"@org_brotli//:enc_sources\",\n    ],\n    defines = [\n        \"BROTLI_EXTERNAL_DICTIONARY_DATA=\",\n    ],\n    linkshared = True,\n    deps = [\n        \"@bazel_tools//tools/jdk:jni\",\n        \"@org_brotli//:brotli_inc\",\n    ],\n)\n"
  },
  {
    "path": "java/MODULE.bazel",
    "content": "# Copyright 2025 The Brotli Authors. All rights reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\n\"\"\"Brotli reference implementation\"\"\"\n\nmodule(\n    name = \"brotli_java\",\n    version = \"1.2.0\",\n    repo_name = \"org_brotli_java\",\n)\n\nbazel_dep(name = \"platforms\", version = \"1.0.0\")\nbazel_dep(name = \"rules_cc\", version = \"0.2.17\")\nbazel_dep(name = \"rules_java\", version = \"9.6.1\")\nbazel_dep(name = \"rules_jvm_external\", version = \"6.10\")\nbazel_dep(name = \"rules_kotlin\", version = \"2.3.10\")\n\nbazel_dep(name = \"brotli\", version = \"1.2.0\", repo_name = \"org_brotli\")\nlocal_path_override(\n    module_name = \"brotli\",\n    path = \"..\",\n)\n"
  },
  {
    "path": "java/org/brotli/common/BUILD.bazel",
    "content": "# Description:\n#   Java port of Brotli.\n\nload(\"@rules_java//java:java_library.bzl\", \"java_library\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nlicenses([\"notice\"])  # MIT\n\njava_library(\n    name = \"shared_dictionary\",\n    srcs = [\"SharedDictionaryType.java\"],\n)\n"
  },
  {
    "path": "java/org/brotli/common/SharedDictionaryType.java",
    "content": "/* Copyright 2018 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\npackage org.brotli.common;\n\n/** POJO enum that mirrors C BrotliSharedDictionaryType. */\npublic class SharedDictionaryType {\n  // Disallow instantiation.\n  private SharedDictionaryType() {}\n\n  public static final int RAW = 0;\n  public static final int SERIALIZED = 1;\n}\n"
  },
  {
    "path": "java/org/brotli/dec/BUILD.bazel",
    "content": "# Description:\n#   Java port of Brotli decoder.\n\nload(\"@rules_java//java:java_library.bzl\", \"java_library\")\nload(\":build_defs.bzl\", \"brotli_java_test\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nlicenses([\"notice\"])  # MIT\n\nTEST_DEPS = [\n    \":dec\",\n    \":test_utils\",\n]\n\njava_library(\n    name = \"dec\",\n    srcs = glob(\n        [\"*.java\"],\n        exclude = [\n            \"Decoder.java\",\n            \"*Test*.java\",\n        ],\n    ),\n    proguard_specs = [\"proguard.pgcfg\"],\n    resources = [\"//:license\"],\n)\n\njava_library(\n    name = \"test_utils\",\n    srcs = [\"TestUtils.java\"],\n    deps = [\":dec\"],\n)\n\nbrotli_java_test(\n    name = \"BitReaderTest\",\n    srcs = [\"BitReaderTest.java\"],\n    deps = TEST_DEPS,\n)\n\nbrotli_java_test(\n    name = \"DecodeTest\",\n    srcs = [\"DecodeTest.java\"],\n    test_kotlin = True,\n    deps = TEST_DEPS,\n)\n\nbrotli_java_test(\n    name = \"DictionaryTest\",\n    srcs = [\"DictionaryTest.java\"],\n    deps = TEST_DEPS,\n)\n\nbrotli_java_test(\n    name = \"EagerStreamTest\",\n    srcs = [\"EagerStreamTest.java\"],\n    deps = TEST_DEPS,\n)\n\nbrotli_java_test(\n    name = \"SynthTest\",\n    srcs = [\"SynthTest.java\"],\n    test_kotlin = True,\n    deps = TEST_DEPS,\n)\n\nbrotli_java_test(\n    name = \"TransformTest\",\n    srcs = [\"TransformTest.java\"],\n    deps = TEST_DEPS,\n)\n"
  },
  {
    "path": "java/org/brotli/dec/BitReader.java",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\nimport static org.brotli.dec.BrotliError.BROTLI_ERROR;\nimport static org.brotli.dec.BrotliError.BROTLI_ERROR_CORRUPTED_PADDING_BITS;\nimport static org.brotli.dec.BrotliError.BROTLI_ERROR_READ_AFTER_END;\nimport static org.brotli.dec.BrotliError.BROTLI_ERROR_TRUNCATED_INPUT;\nimport static org.brotli.dec.BrotliError.BROTLI_ERROR_UNUSED_BYTES_AFTER_END;\nimport static org.brotli.dec.BrotliError.BROTLI_OK;\nimport static org.brotli.dec.BrotliError.BROTLI_PANIC_UNALIGNED_COPY_BYTES;\n\n/**\n * Bit reading helpers.\n */\nfinal class BitReader {\n\n  // Possible values: {5, 6}.  5 corresponds to 32-bit build, 6 to 64-bit. This value is used for\n  // JIT conditional compilation.\n  private static final int LOG_BITNESS = Utils.getLogBintness();\n\n  // Not only Java compiler prunes \"if (const false)\" code, but JVM as well.\n  // Code under \"if (BIT_READER_DEBUG != 0)\" have zero performance impact (outside unit tests).\n  private static final int BIT_READER_DEBUG = Utils.isDebugMode();\n\n  static final int BITNESS = 1 << LOG_BITNESS;\n\n  private static final int BYTENESS = BITNESS / 8;\n  private static final int CAPACITY = 4096;\n  // After encountering the end of the input stream, this amount of zero bytes will be appended.\n  private static final int SLACK = 64;\n  private static final int BUFFER_SIZE = CAPACITY + SLACK;\n  // Don't bother to replenish the buffer while this number of bytes is available.\n  private static final int SAFEGUARD = 36;\n  private static final int WATERLINE = CAPACITY - SAFEGUARD;\n\n  // \"Half\" refers to \"half of native integer type\", i.e. on 64-bit machines it is 32-bit type,\n  // on 32-bit machines it is 16-bit.\n  private static final int HALF_BITNESS = BITNESS / 2;\n  private static final int HALF_SIZE = BYTENESS / 2;\n  private static final int HALVES_CAPACITY = CAPACITY / HALF_SIZE;\n  private static final int HALF_BUFFER_SIZE = BUFFER_SIZE / HALF_SIZE;\n\n  private static final int LOG_HALF_SIZE = LOG_BITNESS - 4;\n\n  static final int HALF_WATERLINE = WATERLINE / HALF_SIZE;\n\n  /**\n   * Fills up the input buffer.\n   *\n   * <p> Should not be called if there are at least 36 bytes present after current position.\n   *\n   * <p> After encountering the end of the input stream, 64 additional zero bytes are copied to the\n   * buffer.\n   */\n  static int readMoreInput(State s) {\n    if (s.endOfStreamReached != 0) {\n      if (halfAvailable(s) >= -2) {\n        return BROTLI_OK;\n      }\n      return Utils.makeError(s, BROTLI_ERROR_TRUNCATED_INPUT);\n    }\n    final int readOffset = s.halfOffset << LOG_HALF_SIZE;\n    int bytesInBuffer = CAPACITY - readOffset;\n    // Move unused bytes to the head of the buffer.\n    Utils.copyBytesWithin(s.byteBuffer, 0, readOffset, CAPACITY);\n    s.halfOffset = 0;\n    while (bytesInBuffer < CAPACITY) {\n      final int spaceLeft = CAPACITY - bytesInBuffer;\n      final int len = Utils.readInput(s, s.byteBuffer, bytesInBuffer, spaceLeft);\n      if (len < BROTLI_ERROR) {\n        return len;\n      }\n      // EOF is -1 in Java, but 0 in C#.\n      if (len <= 0) {\n        s.endOfStreamReached = 1;\n        s.tailBytes = bytesInBuffer;\n        bytesInBuffer += HALF_SIZE - 1;\n        break;\n      }\n      bytesInBuffer += len;\n    }\n    bytesToNibbles(s, bytesInBuffer);\n    return BROTLI_OK;\n  }\n\n  static int checkHealth(State s, int endOfStream) {\n    if (s.endOfStreamReached == 0) {\n      return BROTLI_OK;\n    }\n    final int byteOffset = (s.halfOffset << LOG_HALF_SIZE) + ((s.bitOffset + 7) >> 3) - BYTENESS;\n    if (byteOffset > s.tailBytes) {\n      return Utils.makeError(s, BROTLI_ERROR_READ_AFTER_END);\n    }\n    if ((endOfStream != 0) && (byteOffset != s.tailBytes)) {\n      return Utils.makeError(s, BROTLI_ERROR_UNUSED_BYTES_AFTER_END);\n    }\n    return BROTLI_OK;\n  }\n\n  static void assertAccumulatorHealthy(State s) {\n    if (s.bitOffset > BITNESS) {\n      throw new IllegalStateException(\"Accumulator underloaded: \" + s.bitOffset);\n    }\n  }\n\n  static void fillBitWindow(State s) {\n    if (BIT_READER_DEBUG != 0) {\n      assertAccumulatorHealthy(s);\n    }\n    if (s.bitOffset >= HALF_BITNESS) {\n      // Same as doFillBitWindow. JVM fails to inline it.\n      if (BITNESS == 64) {\n        s.accumulator64 = ((long) s.intBuffer[s.halfOffset++] << HALF_BITNESS)\n            | Utils.shr64(s.accumulator64, HALF_BITNESS);\n      } else {\n        s.accumulator32 = ((int) s.shortBuffer[s.halfOffset++] << HALF_BITNESS)\n            | Utils.shr32(s.accumulator32, HALF_BITNESS);\n      }\n      s.bitOffset -= HALF_BITNESS;\n    }\n  }\n\n  static void doFillBitWindow(State s) {\n    if (BIT_READER_DEBUG != 0) {\n      assertAccumulatorHealthy(s);\n    }\n    if (BITNESS == 64) {\n      s.accumulator64 = ((long) s.intBuffer[s.halfOffset++] << HALF_BITNESS)\n          | Utils.shr64(s.accumulator64, HALF_BITNESS);\n    } else {\n      s.accumulator32 = ((int) s.shortBuffer[s.halfOffset++] << HALF_BITNESS)\n          | Utils.shr32(s.accumulator32, HALF_BITNESS);\n    }\n    s.bitOffset -= HALF_BITNESS;\n  }\n\n  static int peekBits(State s) {\n    if (BITNESS == 64) {\n      return (int) Utils.shr64(s.accumulator64, s.bitOffset);\n    } else {\n      return Utils.shr32(s.accumulator32, s.bitOffset);\n    }\n  }\n\n  /**\n   * Fetches bits from accumulator.\n   *\n   * WARNING: accumulator MUST contain at least the specified amount of bits,\n   * otherwise BitReader will become broken.\n   */\n  static int readFewBits(State s, int n) {\n    final int v = peekBits(s) & ((1 << n) - 1);\n    s.bitOffset += n;\n    return v;\n  }\n\n  static int readBits(State s, int n) {\n    if (HALF_BITNESS >= 24) {\n      return readFewBits(s, n);\n    } else {\n      return (n <= 16) ? readFewBits(s, n) : readManyBits(s, n);\n    }\n  }\n\n  private static int readManyBits(State s, int n) {\n    final int low = readFewBits(s, 16);\n    doFillBitWindow(s);\n    return low | (readFewBits(s, n - 16) << 16);\n  }\n\n  static int initBitReader(State s) {\n    s.byteBuffer = new byte[BUFFER_SIZE];\n    if (BITNESS == 64) {\n      s.accumulator64 = 0;\n      s.intBuffer = new int[HALF_BUFFER_SIZE];\n    } else {\n      s.accumulator32 = 0;\n      s.shortBuffer = new short[HALF_BUFFER_SIZE];\n    }\n    s.bitOffset = BITNESS;\n    s.halfOffset = HALVES_CAPACITY;\n    s.endOfStreamReached = 0;\n    return prepare(s);\n  }\n\n  private static int prepare(State s) {\n    if (s.halfOffset > BitReader.HALF_WATERLINE) {\n      final int result = readMoreInput(s);\n      if (result != BROTLI_OK) {\n        return result;\n      }\n    }\n    int health = checkHealth(s, 0);\n    if (health != BROTLI_OK) {\n      return health;\n    }\n    doFillBitWindow(s);\n    doFillBitWindow(s);\n    return BROTLI_OK;\n  }\n\n  static int reload(State s) {\n    if (s.bitOffset == BITNESS) {\n      return prepare(s);\n    }\n    return BROTLI_OK;\n  }\n\n  static int jumpToByteBoundary(State s) {\n    final int padding = (BITNESS - s.bitOffset) & 7;\n    if (padding != 0) {\n      final int paddingBits = readFewBits(s, padding);\n      if (paddingBits != 0) {\n        return Utils.makeError(s, BROTLI_ERROR_CORRUPTED_PADDING_BITS);\n      }\n    }\n    return BROTLI_OK;\n  }\n\n  static int halfAvailable(State s) {\n    int limit = HALVES_CAPACITY;\n    if (s.endOfStreamReached != 0) {\n      limit = (s.tailBytes + (HALF_SIZE - 1)) >> LOG_HALF_SIZE;\n    }\n    return limit - s.halfOffset;\n  }\n\n  static int copyRawBytes(State s, byte[] data, int offset, int length) {\n    int pos = offset;\n    int len = length;\n    if ((s.bitOffset & 7) != 0) {\n      return Utils.makeError(s, BROTLI_PANIC_UNALIGNED_COPY_BYTES);\n    }\n\n    // Drain accumulator.\n    while ((s.bitOffset != BITNESS) && (len != 0)) {\n      data[pos++] = (byte) peekBits(s);\n      s.bitOffset += 8;\n      len--;\n    }\n    if (len == 0) {\n      return BROTLI_OK;\n    }\n\n    // Get data from shadow buffer with \"sizeof(int)\" granularity.\n    final int copyNibbles = Utils.min(halfAvailable(s), len >> LOG_HALF_SIZE);\n    if (copyNibbles > 0) {\n      final int readOffset = s.halfOffset << LOG_HALF_SIZE;\n      final int delta = copyNibbles << LOG_HALF_SIZE;\n      Utils.copyBytes(data, pos, s.byteBuffer, readOffset, readOffset + delta);\n      pos += delta;\n      len -= delta;\n      s.halfOffset += copyNibbles;\n    }\n    if (len == 0) {\n      return BROTLI_OK;\n    }\n\n    // Read tail bytes.\n    if (halfAvailable(s) > 0) {\n      // length = 1..3\n      fillBitWindow(s);\n      while (len != 0) {\n        data[pos++] = (byte) peekBits(s);\n        s.bitOffset += 8;\n        len--;\n      }\n      return checkHealth(s, 0);\n    }\n\n    // Now it is possible to copy bytes directly.\n    while (len > 0) {\n      final int chunkLen = Utils.readInput(s, data, pos, len);\n      if (chunkLen < BROTLI_ERROR) {\n        return chunkLen;\n      }\n      // EOF is -1 in Java, but 0 in C#.\n      if (chunkLen <= 0) {\n        return Utils.makeError(s, BROTLI_ERROR_TRUNCATED_INPUT);\n      }\n      pos += chunkLen;\n      len -= chunkLen;\n    }\n    return BROTLI_OK;\n  }\n\n  /**\n   * Translates bytes to halves (int/short).\n   */\n  static void bytesToNibbles(State s, int byteLen) {\n    final byte[] byteBuffer = s.byteBuffer;\n    final int halfLen = byteLen >> LOG_HALF_SIZE;\n    if (BITNESS == 64) {\n      final int[] intBuffer = s.intBuffer;\n      for (int i = 0; i < halfLen; ++i) {\n        intBuffer[i] = ((int) byteBuffer[i * 4] & 0xFF)\n            | (((int) byteBuffer[(i * 4) + 1] & 0xFF) << 8)\n            | (((int) byteBuffer[(i * 4) + 2] & 0xFF) << 16)\n            | (((int) byteBuffer[(i * 4) + 3] & 0xFF) << 24);\n      }\n    } else {\n      final short[] shortBuffer = s.shortBuffer;\n      for (int i = 0; i < halfLen; ++i) {\n        shortBuffer[i] = (short) (((int) byteBuffer[i * 2] & 0xFF)\n            | (((int) byteBuffer[(i * 2) + 1] & 0xFF) << 8));\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/dec/BitReaderTest.java",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\nimport static org.junit.Assert.fail;\n\nimport java.io.ByteArrayInputStream;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.JUnit4;\n\n/**\n * Tests for {@link BitReader}.\n */\n@RunWith(JUnit4.class)\npublic class BitReaderTest {\n\n  @Test\n  public void testReadAfterEos() {\n    State reader = new State();\n    reader.input = new ByteArrayInputStream(new byte[1]);\n    Decode.initState(reader);\n    BitReader.readBits(reader, 9);\n    try {\n      BitReader.checkHealth(reader, 0);\n    } catch (BrotliRuntimeException ex) {\n      // This exception is expected.\n      return;\n    }\n    fail(\"BrotliRuntimeException should have been thrown by BitReader.checkHealth\");\n  }\n\n  @Test\n  public void testAccumulatorUnderflowDetected() {\n    State reader = new State();\n    reader.input = new ByteArrayInputStream(new byte[8]);\n    Decode.initState(reader);\n    // 65 bits is enough for both 32 and 64 bit systems.\n    BitReader.readBits(reader, 13);\n    BitReader.readBits(reader, 13);\n    BitReader.readBits(reader, 13);\n    BitReader.readBits(reader, 13);\n    BitReader.readBits(reader, 13);\n    try {\n      BitReader.fillBitWindow(reader);\n    } catch (IllegalStateException ex) {\n      // This exception is expected.\n      return;\n    }\n    fail(\"IllegalStateException should have been thrown by 'broken' BitReader\");\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/dec/BrotliError.java",
    "content": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\n/** Possible errors from decoder. */\npublic final class BrotliError {\n  /** Success; anything greater is also success. */\n  public static final int BROTLI_OK = 0;\n  /** Success; decoder has finished decompressing the input. */\n  public static final int BROTLI_OK_DONE = BROTLI_OK + 1;\n  /** Success; decoder has more output to produce. */\n  public static final int BROTLI_OK_NEED_MORE_OUTPUT = BROTLI_OK + 2;\n\n  /** Error code threshold; actual error codes are LESS than -1! */\n  public static final int BROTLI_ERROR = -1;\n  /** Stream error: corrupted code length table. */\n  public static final int BROTLI_ERROR_CORRUPTED_CODE_LENGTH_TABLE = BROTLI_ERROR - 1;\n  /** Stream error: corrupted context map. */\n  public static final int BROTLI_ERROR_CORRUPTED_CONTEXT_MAP = BROTLI_ERROR - 2;\n  /** Stream error: corrupted Huffman code histogram. */\n  public static final int BROTLI_ERROR_CORRUPTED_HUFFMAN_CODE_HISTOGRAM = BROTLI_ERROR - 3;\n  /** Stream error: corrupted padding bits. */\n  public static final int BROTLI_ERROR_CORRUPTED_PADDING_BITS = BROTLI_ERROR - 4;\n  /** Stream error: corrupted reserved bit. */\n  public static final int BROTLI_ERROR_CORRUPTED_RESERVED_BIT = BROTLI_ERROR - 5;\n  /** Stream error: duplicate simple Huffman symbol. */\n  public static final int BROTLI_ERROR_DUPLICATE_SIMPLE_HUFFMAN_SYMBOL = BROTLI_ERROR - 6;\n  /** Stream error: exuberant nibble. */\n  public static final int BROTLI_ERROR_EXUBERANT_NIBBLE = BROTLI_ERROR - 7;\n  /** Stream error: invalid backward reference. */\n  public static final int BROTLI_ERROR_INVALID_BACKWARD_REFERENCE = BROTLI_ERROR - 8;\n  /** Stream error: invalid metablock length. */\n  public static final int BROTLI_ERROR_INVALID_METABLOCK_LENGTH = BROTLI_ERROR - 9;\n  /** Stream error: invalid window bits. */\n  public static final int BROTLI_ERROR_INVALID_WINDOW_BITS = BROTLI_ERROR - 10;\n  /** Stream error: negative distance. */\n  public static final int BROTLI_ERROR_NEGATIVE_DISTANCE = BROTLI_ERROR - 11;\n  /** Stream error: read after end of input buffer. */\n  public static final int BROTLI_ERROR_READ_AFTER_END = BROTLI_ERROR - 12;\n  /** IO error: read failed. */\n  public static final int BROTLI_ERROR_READ_FAILED = BROTLI_ERROR - 13;\n  /** IO error: symbol out of range. */\n  public static final int BROTLI_ERROR_SYMBOL_OUT_OF_RANGE = BROTLI_ERROR - 14;\n  /** Stream error: truncated input. */\n  public static final int BROTLI_ERROR_TRUNCATED_INPUT = BROTLI_ERROR - 15;\n  /** Stream error: unused bytes after end of stream. */\n  public static final int BROTLI_ERROR_UNUSED_BYTES_AFTER_END = BROTLI_ERROR - 16;\n  /** Stream error: unused Huffman space. */\n  public static final int BROTLI_ERROR_UNUSED_HUFFMAN_SPACE = BROTLI_ERROR - 17;\n\n  /** Exception code threshold. */\n  public static final int BROTLI_PANIC = -21;\n  /** Exception: stream is already closed. */\n  public static final int BROTLI_PANIC_ALREADY_CLOSED = BROTLI_PANIC - 1;\n  /** Exception: max distance is too small. */\n  public static final int BROTLI_PANIC_MAX_DISTANCE_TOO_SMALL = BROTLI_PANIC - 2;\n  /** Exception: state is not fresh. */\n  public static final int BROTLI_PANIC_STATE_NOT_FRESH = BROTLI_PANIC - 3;\n  /** Exception: state is not initialized. */\n  public static final int BROTLI_PANIC_STATE_NOT_INITIALIZED = BROTLI_PANIC - 4;\n  /** Exception: state is not uninitialized. */\n  public static final int BROTLI_PANIC_STATE_NOT_UNINITIALIZED = BROTLI_PANIC - 5;\n  /** Exception: too many dictionary chunks. */\n  public static final int BROTLI_PANIC_TOO_MANY_DICTIONARY_CHUNKS = BROTLI_PANIC - 6;\n  /** Exception: unexpected state. */\n  public static final int BROTLI_PANIC_UNEXPECTED_STATE = BROTLI_PANIC - 7;\n  /** Exception: unreachable code. */\n  public static final int BROTLI_PANIC_UNREACHABLE = BROTLI_PANIC - 8;\n  /** Exception: unaligned copy bytes. */\n  public static final int BROTLI_PANIC_UNALIGNED_COPY_BYTES = BROTLI_PANIC - 9;\n\n  /** Non-instantiable. */\n  private BrotliError() {}\n}\n"
  },
  {
    "path": "java/org/brotli/dec/BrotliInputStream.java",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\nimport java.io.IOException;\nimport java.io.InputStream;\n\n/**\n * {@link InputStream} decorator that decompresses brotli data.\n *\n * <p> Not thread-safe.\n */\npublic class BrotliInputStream extends InputStream {\n\n  /** Default size of internal buffer (used for faster byte-by-byte reading). */\n  public static final int DEFAULT_INTERNAL_BUFFER_SIZE = 256;\n\n  /**\n   * Value expected by InputStream contract when stream is over.\n   *\n   * In Java it is -1.\n   * In C# it is 0 (should be patched during transpilation).\n   */\n  private static final int END_OF_STREAM_MARKER = -1;\n\n  /**\n   * Internal buffer used for efficient byte-by-byte reading.\n   */\n  private byte[] buffer;\n\n  /**\n   * Number of decoded but still unused bytes in internal buffer.\n   */\n  private int remainingBufferBytes;\n\n  /**\n   * Next unused byte offset.\n   */\n  private int bufferOffset;\n\n  /**\n   * Decoder state.\n   */\n  private final State state = new State();\n\n  /**\n   * Creates a {@link InputStream} wrapper that decompresses brotli data.\n   *\n   * <p> For byte-by-byte reading ({@link #read()}) internal buffer with\n   * {@link #DEFAULT_INTERNAL_BUFFER_SIZE} size is allocated and used.\n   *\n   * <p> Will block the thread until first {@link BitReader#CAPACITY} bytes of data of source\n   * are available.\n   *\n   * @param source underlying data source\n   * @throws IOException in case of corrupted data or source stream problems\n   */\n  public BrotliInputStream(InputStream source) throws IOException {\n    this(source, DEFAULT_INTERNAL_BUFFER_SIZE);\n  }\n\n  /**\n   * Creates a {@link InputStream} wrapper that decompresses brotli data.\n   *\n   * <p> For byte-by-byte reading ({@link #read()}) internal buffer of specified size is\n   * allocated and used.\n   *\n   * <p> Will block the thread until first {@link BitReader#CAPACITY} bytes of data of source\n   * are available.\n   *\n   * @param source compressed data source\n   * @param byteReadBufferSize size of internal buffer used in case of\n   *        byte-by-byte reading\n   * @throws IOException in case of corrupted data or source stream problems\n   */\n  public BrotliInputStream(InputStream source, int byteReadBufferSize) throws IOException {\n    if (byteReadBufferSize <= 0) {\n      throw new IllegalArgumentException(\"Bad buffer size:\" + byteReadBufferSize);\n    } else if (source == null) {\n      throw new IllegalArgumentException(\"source is null\");\n    }\n    this.buffer = new byte[byteReadBufferSize];\n    this.remainingBufferBytes = 0;\n    this.bufferOffset = 0;\n    try {\n      state.input = source;\n      Decode.initState(state);\n    } catch (BrotliRuntimeException ex) {\n      throw new IOException(\"Brotli decoder initialization failed\", ex);\n    }\n  }\n\n  /** Attach \"RAW\" dictionary (chunk) to decoder. */\n  public void attachDictionaryChunk(byte[] data) {\n    Decode.attachDictionaryChunk(state, data);\n  }\n\n  /** Request decoder to produce output as soon as it is available. */\n  public void enableEagerOutput() {\n    Decode.enableEagerOutput(state);\n  }\n\n  /** Enable \"large window\" stream feature. */\n  public void enableLargeWindow() {\n    Decode.enableLargeWindow(state);\n  }\n\n  /**\n   * {@inheritDoc}\n   */\n  @Override\n  public void close() throws IOException {\n    Decode.close(state);\n    Utils.closeInput(state);\n  }\n\n  /**\n   * {@inheritDoc}\n   */\n  @Override\n  public int read() throws IOException {\n    if (bufferOffset >= remainingBufferBytes) {\n      remainingBufferBytes = read(buffer, 0, buffer.length);\n      bufferOffset = 0;\n      if (remainingBufferBytes == END_OF_STREAM_MARKER) {\n        // Both Java and C# return the same value for EOF on single-byte read.\n        return -1;\n      }\n    }\n    return buffer[bufferOffset++] & 0xFF;\n  }\n\n  /**\n   * {@inheritDoc}\n   */\n  @Override\n  public int read(byte[] destBuffer, int destOffset, int destLen) throws IOException {\n    if (destOffset < 0) {\n      throw new IllegalArgumentException(\"Bad offset: \" + destOffset);\n    } else if (destLen < 0) {\n      throw new IllegalArgumentException(\"Bad length: \" + destLen);\n    } else if (destOffset + destLen > destBuffer.length) {\n      throw new IllegalArgumentException(\n          \"Buffer overflow: \" + (destOffset + destLen) + \" > \" + destBuffer.length);\n    } else if (destLen == 0) {\n      return 0;\n    }\n    int copyLen = Math.max(remainingBufferBytes - bufferOffset, 0);\n    if (copyLen != 0) {\n      copyLen = Math.min(copyLen, destLen);\n      System.arraycopy(buffer, bufferOffset, destBuffer, destOffset, copyLen);\n      bufferOffset += copyLen;\n      destOffset += copyLen;\n      destLen -= copyLen;\n      if (destLen == 0) {\n        return copyLen;\n      }\n    }\n    try {\n      state.output = destBuffer;\n      state.outputOffset = destOffset;\n      state.outputLength = destLen;\n      state.outputUsed = 0;\n      Decode.decompress(state);\n      copyLen += state.outputUsed;\n      copyLen = (copyLen > 0) ? copyLen : END_OF_STREAM_MARKER;\n      return copyLen;\n    } catch (BrotliRuntimeException ex) {\n      throw new IOException(\"Brotli stream decoding failed\", ex);\n    }\n\n    // <{[INJECTED CODE]}>\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/dec/BrotliRuntimeException.java",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\n/**\n * Unchecked exception used internally.\n */\nclass BrotliRuntimeException extends RuntimeException {\n\n  BrotliRuntimeException(String message) {\n    super(message);\n  }\n\n  BrotliRuntimeException(String message, Throwable cause) {\n    super(message, cause);\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/dec/CompoundDictionaryTest.java",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\nimport static org.junit.Assert.assertEquals;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.IOException;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.JUnit4;\n\n/**\n * Tests for {@link Dictionary}.\n */\n@RunWith(JUnit4.class)\npublic class CompoundDictionaryTest {\n\n  /** See {@link SynthTest} */\n  private static final byte[] ONE_COPY = {\n      (byte) 0xa1, (byte) 0xa8, (byte) 0x00, (byte) 0xc0, (byte) 0x2f, (byte) 0x01, (byte) 0x10,\n      (byte) 0xc4, (byte) 0x44, (byte) 0x09, (byte) 0x00\n    };\n\n  private static final String TEXT = \"Kot lomom kolol slona!\";\n\n  @Test\n  public void testNoDictionary() throws IOException {\n    BrotliInputStream decoder = new BrotliInputStream(new ByteArrayInputStream(ONE_COPY));\n    byte[] buffer = new byte[32];\n    int length = decoder.read(buffer, 0, buffer.length);\n    assertEquals(TEXT.length(), length);\n    assertEquals(\"alternate\\\" type=\\\"appli\", new String(buffer, 0, length, \"US-ASCII\"));\n    decoder.close();\n  }\n\n  @Test\n  public void testOnePieceDictionary() throws IOException {\n    BrotliInputStream decoder = new BrotliInputStream(new ByteArrayInputStream(ONE_COPY));\n    decoder.attachDictionaryChunk(TEXT.getBytes(\"US-ASCII\"));\n    byte[] buffer = new byte[32];\n    int length = decoder.read(buffer, 0, buffer.length);\n    assertEquals(TEXT.length(), length);\n    assertEquals(TEXT, new String(buffer, 0, length, \"US-ASCII\"));\n    decoder.close();\n  }\n\n  @Test\n  public void testTwoPieceDictionary() throws IOException {\n    BrotliInputStream decoder = new BrotliInputStream(new ByteArrayInputStream(ONE_COPY));\n    decoder.attachDictionaryChunk(TEXT.substring(0, 13).getBytes(\"US-ASCII\"));\n    decoder.attachDictionaryChunk(TEXT.substring(13).getBytes(\"US-ASCII\"));\n    byte[] buffer = new byte[32];\n    int length = decoder.read(buffer, 0, buffer.length);\n    assertEquals(TEXT.length(), length);\n    assertEquals(TEXT, new String(buffer, 0, length, \"US-ASCII\"));\n    decoder.close();\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/dec/Context.java",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\n/**\n * Common context lookup table for all context modes.\n */\nfinal class Context {\n\n  static final int[] LOOKUP = new int[2048];\n\n  private static final String UTF_MAP = \"         !!  !                  \\\"#$##%#$&'##(#)#+++++++++\"\n      + \"+((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# \";\n  private static final String UTF_RLE = \"A/*  ':  & : $  \\u0081 @\";\n\n  private static void unpackLookupTable(int[] lookup, String utfMap, String utfRle) {\n    // LSB6, MSB6, SIGNED\n    for (int i = 0; i < 256; ++i) {\n      lookup[i] = i & 0x3F;\n      lookup[512 + i] = i >> 2;\n      lookup[1792 + i] = 2 + (i >> 6);\n    }\n    // UTF8\n    for (int i = 0; i < 128; ++i) {\n      lookup[1024 + i] = 4 * ((int) utfMap.charAt(i) - 32);\n    }\n    for (int i = 0; i < 64; ++i) {\n      lookup[1152 + i] = i & 1;\n      lookup[1216 + i] = 2 + (i & 1);\n    }\n    int offset = 1280;\n    for (int k = 0; k < 19; ++k) {\n      final int value = k & 3;\n      final int rep = (int) utfRle.charAt(k) - 32;\n      for (int i = 0; i < rep; ++i) {\n        lookup[offset++] = value;\n      }\n    }\n    // SIGNED\n    for (int i = 0; i < 16; ++i) {\n      lookup[1792 + i] = 1;\n      lookup[2032 + i] = 6;\n    }\n    lookup[1792] = 0;\n    lookup[2047] = 7;\n    for (int i = 0; i < 256; ++i) {\n      lookup[1536 + i] = lookup[1792 + i] << 3;\n    }\n  }\n\n  static {\n    unpackLookupTable(LOOKUP, UTF_MAP, UTF_RLE);\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/dec/Decode.java",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\nimport static org.brotli.dec.BrotliError.BROTLI_ERROR_CORRUPTED_CODE_LENGTH_TABLE;\nimport static org.brotli.dec.BrotliError.BROTLI_ERROR_CORRUPTED_CONTEXT_MAP;\nimport static org.brotli.dec.BrotliError.BROTLI_ERROR_CORRUPTED_HUFFMAN_CODE_HISTOGRAM;\nimport static org.brotli.dec.BrotliError.BROTLI_ERROR_CORRUPTED_RESERVED_BIT;\nimport static org.brotli.dec.BrotliError.BROTLI_ERROR_DUPLICATE_SIMPLE_HUFFMAN_SYMBOL;\nimport static org.brotli.dec.BrotliError.BROTLI_ERROR_EXUBERANT_NIBBLE;\nimport static org.brotli.dec.BrotliError.BROTLI_ERROR_INVALID_BACKWARD_REFERENCE;\nimport static org.brotli.dec.BrotliError.BROTLI_ERROR_INVALID_METABLOCK_LENGTH;\nimport static org.brotli.dec.BrotliError.BROTLI_ERROR_INVALID_WINDOW_BITS;\nimport static org.brotli.dec.BrotliError.BROTLI_ERROR_NEGATIVE_DISTANCE;\nimport static org.brotli.dec.BrotliError.BROTLI_ERROR_SYMBOL_OUT_OF_RANGE;\nimport static org.brotli.dec.BrotliError.BROTLI_ERROR_UNUSED_HUFFMAN_SPACE;\nimport static org.brotli.dec.BrotliError.BROTLI_OK;\nimport static org.brotli.dec.BrotliError.BROTLI_OK_DONE;\nimport static org.brotli.dec.BrotliError.BROTLI_OK_NEED_MORE_OUTPUT;\nimport static org.brotli.dec.BrotliError.BROTLI_PANIC_ALREADY_CLOSED;\nimport static org.brotli.dec.BrotliError.BROTLI_PANIC_MAX_DISTANCE_TOO_SMALL;\nimport static org.brotli.dec.BrotliError.BROTLI_PANIC_STATE_NOT_FRESH;\nimport static org.brotli.dec.BrotliError.BROTLI_PANIC_STATE_NOT_INITIALIZED;\nimport static org.brotli.dec.BrotliError.BROTLI_PANIC_STATE_NOT_UNINITIALIZED;\nimport static org.brotli.dec.BrotliError.BROTLI_PANIC_TOO_MANY_DICTIONARY_CHUNKS;\nimport static org.brotli.dec.BrotliError.BROTLI_PANIC_UNEXPECTED_STATE;\nimport static org.brotli.dec.BrotliError.BROTLI_PANIC_UNREACHABLE;\n\nimport java.nio.ByteBuffer;\n\n/**\n * API for Brotli decompression.\n */\nfinal class Decode {\n\n  static final int MIN_LARGE_WINDOW_BITS = 10;\n  /* Maximum was chosen to be 30 to allow efficient decoder implementation.\n   * Format allows bigger window, but Java does not support 2G+ arrays. */\n  static final int MAX_LARGE_WINDOW_BITS = 30;\n\n  //----------------------------------------------------------------------------\n  // RunningState\n  //----------------------------------------------------------------------------\n  // NB: negative values are used for errors.\n  private static final int UNINITIALIZED = 0;\n  private static final int INITIALIZED = 1;\n  private static final int BLOCK_START = 2;\n  private static final int COMPRESSED_BLOCK_START = 3;\n  private static final int MAIN_LOOP = 4;\n  private static final int READ_METADATA = 5;\n  private static final int COPY_UNCOMPRESSED = 6;\n  private static final int INSERT_LOOP = 7;\n  private static final int COPY_LOOP = 8;\n  private static final int USE_DICTIONARY = 9;\n  private static final int FINISHED = 10;\n  private static final int CLOSED = 11;\n  private static final int INIT_WRITE = 12;\n  private static final int WRITE = 13;\n  private static final int COPY_FROM_COMPOUND_DICTIONARY = 14;\n\n  private static final int DEFAULT_CODE_LENGTH = 8;\n  private static final int CODE_LENGTH_REPEAT_CODE = 16;\n  private static final int NUM_LITERAL_CODES = 256;\n  private static final int NUM_COMMAND_CODES = 704;\n  private static final int NUM_BLOCK_LENGTH_CODES = 26;\n  private static final int LITERAL_CONTEXT_BITS = 6;\n  private static final int DISTANCE_CONTEXT_BITS = 2;\n\n  private static final int CD_BLOCK_MAP_BITS = 8;\n  private static final int HUFFMAN_TABLE_BITS = 8;\n  private static final int HUFFMAN_TABLE_MASK = 0xFF;\n\n  /**\n   * Maximum possible Huffman table size for an alphabet size of (index * 32),\n   * max code length 15 and root table bits 8.\n   * The biggest alphabet is \"command\" - 704 symbols. Though \"distance\" alphabet could theoretically\n   * outreach that limit (for 62 extra bit distances), practically it is limited by\n   * MAX_ALLOWED_DISTANCE and never gets bigger than 544 symbols.\n   */\n  static final int[] MAX_HUFFMAN_TABLE_SIZE = {\n      256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822,\n      854, 886, 920, 952, 984, 1016, 1048, 1080\n  };\n\n  private static final int HUFFMAN_TABLE_SIZE_26 = 396;\n  private static final int HUFFMAN_TABLE_SIZE_258 = 632;\n\n  private static final int CODE_LENGTH_CODES = 18;\n  private static final int[] CODE_LENGTH_CODE_ORDER = {\n      1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  };\n\n  private static final int NUM_DISTANCE_SHORT_CODES = 16;\n  private static final int[] DISTANCE_SHORT_CODE_INDEX_OFFSET = {\n    0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3\n  };\n\n  private static final int[] DISTANCE_SHORT_CODE_VALUE_OFFSET = {\n      0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3\n  };\n\n  /**\n   * Static Huffman code for the code length code lengths.\n   */\n  private static final int[] FIXED_TABLE = {\n      0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001,\n      0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005\n  };\n\n  // TODO(eustas): generalize.\n  static final int MAX_TRANSFORMED_WORD_LENGTH = 5 + 24 + 8;\n\n  private static final int MAX_DISTANCE_BITS = 24;\n  private static final int MAX_LARGE_WINDOW_DISTANCE_BITS = 62;\n\n  /**\n   * Safe distance limit.\n   *\n   * Limit ((1 << 31) - 4) allows safe distance calculation without overflows,\n   * given the distance alphabet size is limited to corresponding size.\n   */\n  private static final int MAX_ALLOWED_DISTANCE = 0x7FFFFFFC;\n\n  //----------------------------------------------------------------------------\n  // Prefix code LUT.\n  //----------------------------------------------------------------------------\n  static final int[] BLOCK_LENGTH_OFFSET = {\n      1, 5, 9, 13, 17, 25, 33, 41, 49, 65, 81, 97, 113, 145, 177, 209, 241, 305, 369, 497,\n      753, 1265, 2289, 4337, 8433, 16625\n  };\n\n  static final int[] BLOCK_LENGTH_N_BITS = {\n      2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 24\n  };\n\n  static final short[] INSERT_LENGTH_N_BITS = {\n      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03,\n      0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0E, 0x18\n  };\n\n  static final short[] COPY_LENGTH_N_BITS = {\n      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02,\n      0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x18\n  };\n\n  // Each command is represented with 4x16-bit values:\n  //  * [insertLenExtraBits, copyLenExtraBits]\n  //  * insertLenOffset\n  //  * copyLenOffset\n  //  * distanceContext\n  static final short[] CMD_LOOKUP = new short[NUM_COMMAND_CODES * 4];\n\n  static {\n    unpackCommandLookupTable(CMD_LOOKUP);\n  }\n\n  private static int log2floor(int i) {\n    // REQUIRED: i > 0\n    int result = -1;\n    int step = 16;\n    int v = i;\n    while (step > 0) {\n      int next = v >> step;\n      if (next != 0) {\n        result += step;\n        v = next;\n      }\n      step = step >> 1;\n    }\n    return result + v;\n  }\n\n  private static int calculateDistanceAlphabetSize(int npostfix, int ndirect, int maxndistbits) {\n    return NUM_DISTANCE_SHORT_CODES + ndirect + 2 * (maxndistbits << npostfix);\n  }\n\n  // TODO(eustas): add a correctness test for this function when\n  //               large-window and dictionary are implemented.\n  private static int calculateDistanceAlphabetLimit(State s, int maxDistance, int npostfix, int ndirect) {\n    if (maxDistance < ndirect + (2 << npostfix)) {\n      return Utils.makeError(s, BROTLI_PANIC_MAX_DISTANCE_TOO_SMALL);\n    }\n    final int offset = ((maxDistance - ndirect) >> npostfix) + 4;\n    final int ndistbits = log2floor(offset) - 1;\n    final int group = ((ndistbits - 1) << 1) | ((offset >> ndistbits) & 1);\n    return ((group - 1) << npostfix) + (1 << npostfix) + ndirect + NUM_DISTANCE_SHORT_CODES;\n  }\n\n  private static void unpackCommandLookupTable(short[] cmdLookup) {\n    final int[] insertLengthOffsets = new int[24];\n    final int[] copyLengthOffsets = new int[24];\n    copyLengthOffsets[0] = 2;\n    for (int i = 0; i < 23; ++i) {\n      insertLengthOffsets[i + 1] = insertLengthOffsets[i] + (1 << (int) INSERT_LENGTH_N_BITS[i]);\n      copyLengthOffsets[i + 1] = copyLengthOffsets[i] + (1 << (int) COPY_LENGTH_N_BITS[i]);\n    }\n\n    for (int cmdCode = 0; cmdCode < NUM_COMMAND_CODES; ++cmdCode) {\n      int rangeIdx = cmdCode >> 6;\n      /* -4 turns any regular distance code to negative. */\n      int distanceContextOffset = -4;\n      if (rangeIdx >= 2) {\n        rangeIdx -= 2;\n        distanceContextOffset = 0;\n      }\n      final int insertCode = (((0x29850 >> (rangeIdx * 2)) & 0x3) << 3) | ((cmdCode >> 3) & 7);\n      final int copyCode = (((0x26244 >> (rangeIdx * 2)) & 0x3) << 3) | (cmdCode & 7);\n      final int copyLengthOffset = copyLengthOffsets[copyCode];\n      final int distanceContext = distanceContextOffset + Utils.min(copyLengthOffset, 5) - 2;\n      final int index = cmdCode * 4;\n      cmdLookup[index + 0] =\n          (short)\n              ((int) INSERT_LENGTH_N_BITS[insertCode] | ((int) COPY_LENGTH_N_BITS[copyCode] << 8));\n      cmdLookup[index + 1] = (short) insertLengthOffsets[insertCode];\n      cmdLookup[index + 2] = (short) copyLengthOffsets[copyCode];\n      cmdLookup[index + 3] = (short) distanceContext;\n    }\n  }\n\n  /**\n   * Reads brotli stream header and parses \"window bits\".\n   *\n   * @param s initialized state, before any read is performed.\n   * @return -1 if header is invalid\n   */\n  private static int decodeWindowBits(State s) {\n    /* Change the meaning of flag. Before that step it means \"decoder must be capable of reading\n     * \"large-window\" brotli stream. After this step it means that \"large-window\" feature\n     * is actually detected. Despite the window size could be same as before (lgwin = 10..24),\n     * encoded distances are allowed to be much greater, thus bigger dictionary could be used. */\n    final int largeWindowEnabled = s.isLargeWindow;\n    s.isLargeWindow = 0;\n\n    BitReader.fillBitWindow(s);\n    if (BitReader.readFewBits(s, 1) == 0) {\n      return 16;\n    }\n    int n = BitReader.readFewBits(s, 3);\n    if (n != 0) {\n      return 17 + n;\n    }\n    n = BitReader.readFewBits(s, 3);\n    if (n != 0) {\n      if (n == 1) {\n        if (largeWindowEnabled == 0) {\n          /* Reserved value in regular brotli stream. */\n          return -1;\n        }\n        s.isLargeWindow = 1;\n        /* Check \"reserved\" bit for future (post-large-window) extensions. */\n        if (BitReader.readFewBits(s, 1) == 1) {\n          return -1;\n        }\n        n = BitReader.readFewBits(s, 6);\n        if (n < MIN_LARGE_WINDOW_BITS || n > MAX_LARGE_WINDOW_BITS) {\n          /* Encoded window bits value is too small or too big. */\n          return -1;\n        }\n        return n;\n      }\n      return 8 + n;\n    }\n    return 17;\n  }\n\n  /**\n   * Switch decoder to \"eager\" mode.\n   *\n   * In \"eager\" mode decoder returns as soon as there is enough data to fill output buffer.\n   *\n   * @param s initialized state, before any read is performed.\n   */\n  static int enableEagerOutput(State s) {\n    if (s.runningState != INITIALIZED) {\n      return Utils.makeError(s, BROTLI_PANIC_STATE_NOT_FRESH);\n    }\n    s.isEager = 1;\n    return BROTLI_OK;\n  }\n\n  static int enableLargeWindow(State s) {\n    if (s.runningState != INITIALIZED) {\n      return Utils.makeError(s, BROTLI_PANIC_STATE_NOT_FRESH);\n    }\n    s.isLargeWindow = 1;\n    return BROTLI_OK;\n  }\n\n  // TODO(eustas): do we need byte views?\n  static int attachDictionaryChunk(State s, byte[] data) {\n    if (s.runningState != INITIALIZED) {\n      return Utils.makeError(s, BROTLI_PANIC_STATE_NOT_FRESH);\n    }\n    if (s.cdNumChunks == 0) {\n      s.cdChunks = new byte[16][];\n      s.cdChunkOffsets = new int[16];\n      s.cdBlockBits = -1;\n    }\n    if (s.cdNumChunks == 15) {\n      return Utils.makeError(s, BROTLI_PANIC_TOO_MANY_DICTIONARY_CHUNKS);\n    }\n    s.cdChunks[s.cdNumChunks] = data;\n    s.cdNumChunks++;\n    s.cdTotalSize += data.length;\n    s.cdChunkOffsets[s.cdNumChunks] = s.cdTotalSize;\n    return BROTLI_OK;\n  }\n\n  /**\n   * Associate input with decoder state.\n   *\n   * @param s uninitialized state without associated input\n   */\n  static int initState(State s) {\n    if (s.runningState != UNINITIALIZED) {\n      return Utils.makeError(s, BROTLI_PANIC_STATE_NOT_UNINITIALIZED);\n    }\n    /* 6 trees + 1 extra \"offset\" slot to simplify table decoding logic. */\n    s.blockTrees = new int[7 + 3 * (HUFFMAN_TABLE_SIZE_258 + HUFFMAN_TABLE_SIZE_26)];\n    s.blockTrees[0] = 7;\n    s.distRbIdx = 3;\n    int result = calculateDistanceAlphabetLimit(s, MAX_ALLOWED_DISTANCE, 3, 15 << 3);\n    if (result < BROTLI_OK) {\n      return result;\n    }\n    final int maxDistanceAlphabetLimit = result;\n    s.distExtraBits = new byte[maxDistanceAlphabetLimit];\n    s.distOffset = new int[maxDistanceAlphabetLimit];\n    result = BitReader.initBitReader(s);\n    if (result < BROTLI_OK) {\n      return result;\n    }\n    s.runningState = INITIALIZED;\n    return BROTLI_OK;\n  }\n\n  static int close(State s) {\n    if (s.runningState == UNINITIALIZED) {\n      return Utils.makeError(s, BROTLI_PANIC_STATE_NOT_INITIALIZED);\n    }\n    if (s.runningState > 0) {\n      s.runningState = CLOSED;\n    }\n    return BROTLI_OK;\n  }\n\n  /**\n   * Decodes a number in the range [0..255], by reading 1 - 11 bits.\n   */\n  private static int decodeVarLenUnsignedByte(State s) {\n    BitReader.fillBitWindow(s);\n    if (BitReader.readFewBits(s, 1) != 0) {\n      final int n = BitReader.readFewBits(s, 3);\n      if (n == 0) {\n        return 1;\n      }\n      return BitReader.readFewBits(s, n) + (1 << n);\n    }\n    return 0;\n  }\n\n  private static int decodeMetaBlockLength(State s) {\n    BitReader.fillBitWindow(s);\n    s.inputEnd = BitReader.readFewBits(s, 1);\n    s.metaBlockLength = 0;\n    s.isUncompressed = 0;\n    s.isMetadata = 0;\n    if ((s.inputEnd != 0) && BitReader.readFewBits(s, 1) != 0) {\n      return BROTLI_OK;\n    }\n    final int sizeNibbles = BitReader.readFewBits(s, 2) + 4;\n    if (sizeNibbles == 7) {\n      s.isMetadata = 1;\n      if (BitReader.readFewBits(s, 1) != 0) {\n        return Utils.makeError(s, BROTLI_ERROR_CORRUPTED_RESERVED_BIT);\n      }\n      final int sizeBytes = BitReader.readFewBits(s, 2);\n      if (sizeBytes == 0) {\n        return BROTLI_OK;\n      }\n      for (int i = 0; i < sizeBytes; ++i) {\n        BitReader.fillBitWindow(s);\n        final int bits = BitReader.readFewBits(s, 8);\n        if (bits == 0 && i + 1 == sizeBytes && sizeBytes > 1) {\n          return Utils.makeError(s, BROTLI_ERROR_EXUBERANT_NIBBLE);\n        }\n        s.metaBlockLength += bits << (i * 8);\n      }\n    } else {\n      for (int i = 0; i < sizeNibbles; ++i) {\n        BitReader.fillBitWindow(s);\n        final int bits = BitReader.readFewBits(s, 4);\n        if (bits == 0 && i + 1 == sizeNibbles && sizeNibbles > 4) {\n          return Utils.makeError(s, BROTLI_ERROR_EXUBERANT_NIBBLE);\n        }\n        s.metaBlockLength += bits << (i * 4);\n      }\n    }\n    s.metaBlockLength++;\n    if (s.inputEnd == 0) {\n      s.isUncompressed = BitReader.readFewBits(s, 1);\n    }\n    return BROTLI_OK;\n  }\n\n  /**\n   * Decodes the next Huffman code from bit-stream.\n   */\n  private static int readSymbol(int[] tableGroup, int tableIdx, State s) {\n    int offset = tableGroup[tableIdx];\n    final int v = BitReader.peekBits(s);\n    offset += v & HUFFMAN_TABLE_MASK;\n    final int bits = tableGroup[offset] >> 16;\n    final int sym = tableGroup[offset] & 0xFFFF;\n    if (bits <= HUFFMAN_TABLE_BITS) {\n      s.bitOffset += bits;\n      return sym;\n    }\n    offset += sym;\n    final int mask = (1 << bits) - 1;\n    offset += Utils.shr32(v & mask, HUFFMAN_TABLE_BITS);\n    s.bitOffset += ((tableGroup[offset] >> 16) + HUFFMAN_TABLE_BITS);\n    return tableGroup[offset] & 0xFFFF;\n  }\n\n  private static int readBlockLength(int[] tableGroup, int tableIdx, State s) {\n    BitReader.fillBitWindow(s);\n    final int code = readSymbol(tableGroup, tableIdx, s);\n    final int n = BLOCK_LENGTH_N_BITS[code];\n    BitReader.fillBitWindow(s);\n    return BLOCK_LENGTH_OFFSET[code] + BitReader.readBits(s, n);\n  }\n\n  private static void moveToFront(int[] v, int index) {\n    int i = index;\n    final int value = v[i];\n    while (i > 0) {\n      v[i] = v[i - 1];\n      i--;\n    }\n    v[0] = value;\n  }\n\n  private static void inverseMoveToFrontTransform(byte[] v, int vLen) {\n    final int[] mtf = new int[256];\n    for (int i = 0; i < 256; ++i) {\n      mtf[i] = i;\n    }\n    for (int i = 0; i < vLen; ++i) {\n      final int index = (int) v[i] & 0xFF;\n      v[i] = (byte) mtf[index];\n      if (index != 0) {\n        moveToFront(mtf, index);\n      }\n    }\n  }\n\n  private static int readHuffmanCodeLengths(\n      int[] codeLengthCodeLengths, int numSymbols, int[] codeLengths, State s) {\n    int symbol = 0;\n    int prevCodeLen = DEFAULT_CODE_LENGTH;\n    int repeat = 0;\n    int repeatCodeLen = 0;\n    int space = 32768;\n    final int[] table = new int[32 + 1];  /* Speculative single entry table group. */\n    final int tableIdx = table.length - 1;\n    Huffman.buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, CODE_LENGTH_CODES);\n\n    while (symbol < numSymbols && space > 0) {\n      if (s.halfOffset > BitReader.HALF_WATERLINE) {\n        final int result = BitReader.readMoreInput(s);\n        if (result < BROTLI_OK) {\n          return result;\n        }\n      }\n      BitReader.fillBitWindow(s);\n      final int p = BitReader.peekBits(s) & 31;\n      s.bitOffset += table[p] >> 16;\n      final int codeLen = table[p] & 0xFFFF;\n      if (codeLen < CODE_LENGTH_REPEAT_CODE) {\n        repeat = 0;\n        codeLengths[symbol++] = codeLen;\n        if (codeLen != 0) {\n          prevCodeLen = codeLen;\n          space -= 32768 >> codeLen;\n        }\n      } else {\n        final int extraBits = codeLen - 14;\n        int newLen = 0;\n        if (codeLen == CODE_LENGTH_REPEAT_CODE) {\n          newLen = prevCodeLen;\n        }\n        if (repeatCodeLen != newLen) {\n          repeat = 0;\n          repeatCodeLen = newLen;\n        }\n        final int oldRepeat = repeat;\n        if (repeat > 0) {\n          repeat -= 2;\n          repeat = repeat << extraBits;\n        }\n        BitReader.fillBitWindow(s);\n        repeat += BitReader.readFewBits(s, extraBits) + 3;\n        final int repeatDelta = repeat - oldRepeat;\n        if (symbol + repeatDelta > numSymbols) {\n          return Utils.makeError(s, BROTLI_ERROR_CORRUPTED_CODE_LENGTH_TABLE);\n        }\n        for (int i = 0; i < repeatDelta; ++i) {\n          codeLengths[symbol++] = repeatCodeLen;\n        }\n        if (repeatCodeLen != 0) {\n          space -= repeatDelta << (15 - repeatCodeLen);\n        }\n      }\n    }\n    if (space != 0) {\n      return Utils.makeError(s, BROTLI_ERROR_UNUSED_HUFFMAN_SPACE);\n    }\n    // TODO(eustas): Pass max_symbol to Huffman table builder instead?\n    Utils.fillIntsWithZeroes(codeLengths, symbol, numSymbols);\n    return BROTLI_OK;\n  }\n\n  private static int checkDupes(State s, int[] symbols, int length) {\n    for (int i = 0; i < length - 1; ++i) {\n      for (int j = i + 1; j < length; ++j) {\n        if (symbols[i] == symbols[j]) {\n          return Utils.makeError(s, BROTLI_ERROR_DUPLICATE_SIMPLE_HUFFMAN_SYMBOL);\n        }\n      }\n    }\n    return BROTLI_OK;\n  }\n\n  /**\n   * Reads up to 4 symbols directly and applies predefined histograms.\n   */\n  private static int readSimpleHuffmanCode(int alphabetSizeMax, int alphabetSizeLimit,\n      int[] tableGroup, int tableIdx, State s) {\n    // TODO(eustas): Avoid allocation?\n    final int[] codeLengths = new int[alphabetSizeLimit];\n    final int[] symbols = new int[4];\n\n    final int maxBits = 1 + log2floor(alphabetSizeMax - 1);\n\n    final int numSymbols = BitReader.readFewBits(s, 2) + 1;\n    for (int i = 0; i < numSymbols; ++i) {\n      BitReader.fillBitWindow(s);\n      final int symbol = BitReader.readFewBits(s, maxBits);\n      if (symbol >= alphabetSizeLimit) {\n        return Utils.makeError(s, BROTLI_ERROR_SYMBOL_OUT_OF_RANGE);\n      }\n      symbols[i] = symbol;\n    }\n    final int result = checkDupes(s, symbols, numSymbols);\n    if (result < BROTLI_OK) {\n      return result;\n    }\n\n    int histogramId = numSymbols;\n    if (numSymbols == 4) {\n      histogramId += BitReader.readFewBits(s, 1);\n    }\n\n    switch (histogramId) {\n      case 1:\n        codeLengths[symbols[0]] = 1;\n        break;\n\n      case 2:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 1;\n        break;\n\n      case 3:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 2;\n        break;\n\n      case 4:  // uniform 4-symbol histogram\n        codeLengths[symbols[0]] = 2;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 2;\n        codeLengths[symbols[3]] = 2;\n        break;\n\n      case 5:  // prioritized 4-symbol histogram\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 3;\n        codeLengths[symbols[3]] = 3;\n        break;\n\n      default:\n        break;\n    }\n\n    // TODO(eustas): Use specialized version?\n    return Huffman.buildHuffmanTable(\n        tableGroup, tableIdx, HUFFMAN_TABLE_BITS, codeLengths, alphabetSizeLimit);\n  }\n\n  // Decode Huffman-coded code lengths.\n  private static int readComplexHuffmanCode(int alphabetSizeLimit, int skip,\n      int[] tableGroup, int tableIdx, State s) {\n    // TODO(eustas): Avoid allocation?\n    final int[] codeLengths = new int[alphabetSizeLimit];\n    final int[] codeLengthCodeLengths = new int[CODE_LENGTH_CODES];\n    int space = 32;\n    int numCodes = 0;\n    for (int i = skip; i < CODE_LENGTH_CODES; ++i) {\n      final int codeLenIdx = CODE_LENGTH_CODE_ORDER[i];\n      BitReader.fillBitWindow(s);\n      final int p = BitReader.peekBits(s) & 15;\n      // TODO(eustas): Demultiplex FIXED_TABLE.\n      s.bitOffset += FIXED_TABLE[p] >> 16;\n      final int v = FIXED_TABLE[p] & 0xFFFF;\n      codeLengthCodeLengths[codeLenIdx] = v;\n      if (v != 0) {\n        space -= (32 >> v);\n        numCodes++;\n        if (space <= 0) {\n          break;\n        }\n      }\n    }\n    if (space != 0 && numCodes != 1) {\n      return Utils.makeError(s, BROTLI_ERROR_CORRUPTED_HUFFMAN_CODE_HISTOGRAM);\n    }\n\n    final int result = readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s);\n    if (result < BROTLI_OK) {\n      return result;\n    }\n\n    return Huffman.buildHuffmanTable(\n        tableGroup, tableIdx, HUFFMAN_TABLE_BITS, codeLengths, alphabetSizeLimit);\n  }\n\n  /**\n   * Decodes Huffman table from bit-stream.\n   *\n   * @return number of slots used by resulting Huffman table\n   */\n  private static int readHuffmanCode(int alphabetSizeMax, int alphabetSizeLimit,\n      int[] tableGroup, int tableIdx, State s) {\n    if (s.halfOffset > BitReader.HALF_WATERLINE) {\n      final int result = BitReader.readMoreInput(s);\n      if (result < BROTLI_OK) {\n        return result;\n      }\n    }\n    BitReader.fillBitWindow(s);\n    final int simpleCodeOrSkip = BitReader.readFewBits(s, 2);\n    if (simpleCodeOrSkip == 1) {\n      return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s);\n    }\n    return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s);\n  }\n\n  private static int decodeContextMap(int contextMapSize, byte[] contextMap, State s) {\n    int result;\n    if (s.halfOffset > BitReader.HALF_WATERLINE) {\n      result = BitReader.readMoreInput(s);\n      if (result < BROTLI_OK) {\n        return result;\n      }\n    }\n    final int numTrees = decodeVarLenUnsignedByte(s) + 1;\n\n    if (numTrees == 1) {\n      Utils.fillBytesWithZeroes(contextMap, 0, contextMapSize);\n      return numTrees;\n    }\n\n    BitReader.fillBitWindow(s);\n    final int useRleForZeros = BitReader.readFewBits(s, 1);\n    int maxRunLengthPrefix = 0;\n    if (useRleForZeros != 0) {\n      maxRunLengthPrefix = BitReader.readFewBits(s, 4) + 1;\n    }\n    final int alphabetSize = numTrees + maxRunLengthPrefix;\n    final int tableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSize + 31) >> 5];\n    /* Speculative single entry table group. */\n    final int[] table = new int[tableSize + 1];\n    final int tableIdx = table.length - 1;\n    result = readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s);\n    if (result < BROTLI_OK) {\n      return result;\n    }\n    int i = 0;\n    while (i < contextMapSize) {\n      if (s.halfOffset > BitReader.HALF_WATERLINE) {\n        result = BitReader.readMoreInput(s);\n        if (result < BROTLI_OK) {\n          return result;\n        }\n      }\n      BitReader.fillBitWindow(s);\n      final int code = readSymbol(table, tableIdx, s);\n      if (code == 0) {\n        contextMap[i] = 0;\n        i++;\n      } else if (code <= maxRunLengthPrefix) {\n        BitReader.fillBitWindow(s);\n        int reps = (1 << code) + BitReader.readFewBits(s, code);\n        while (reps != 0) {\n          if (i >= contextMapSize) {\n            return Utils.makeError(s, BROTLI_ERROR_CORRUPTED_CONTEXT_MAP);\n          }\n          contextMap[i] = 0;\n          i++;\n          reps--;\n        }\n      } else {\n        contextMap[i] = (byte) (code - maxRunLengthPrefix);\n        i++;\n      }\n    }\n    BitReader.fillBitWindow(s);\n    if (BitReader.readFewBits(s, 1) == 1) {\n      inverseMoveToFrontTransform(contextMap, contextMapSize);\n    }\n    return numTrees;\n  }\n\n  private static int decodeBlockTypeAndLength(State s, int treeType, int numBlockTypes) {\n    final int[] ringBuffers = s.rings;\n    final int offset = 4 + treeType * 2;\n    BitReader.fillBitWindow(s);\n    int blockType = readSymbol(s.blockTrees, 2 * treeType, s);\n    final int result = readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n\n    if (blockType == 1) {\n      blockType = ringBuffers[offset + 1] + 1;\n    } else if (blockType == 0) {\n      blockType = ringBuffers[offset];\n    } else {\n      blockType -= 2;\n    }\n    if (blockType >= numBlockTypes) {\n      blockType -= numBlockTypes;\n    }\n    ringBuffers[offset] = ringBuffers[offset + 1];\n    ringBuffers[offset + 1] = blockType;\n    return result;\n  }\n\n  private static void decodeLiteralBlockSwitch(State s) {\n    s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes);\n    final int literalBlockType = s.rings[5];\n    s.contextMapSlice = literalBlockType << LITERAL_CONTEXT_BITS;\n    s.literalTreeIdx = (int) s.contextMap[s.contextMapSlice] & 0xFF;\n    final int contextMode = (int) s.contextModes[literalBlockType];\n    s.contextLookupOffset1 = contextMode << 9;\n    s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n  }\n\n  private static void decodeCommandBlockSwitch(State s) {\n    s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes);\n    s.commandTreeIdx = s.rings[7];\n  }\n\n  private static void decodeDistanceBlockSwitch(State s) {\n    s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes);\n    s.distContextMapSlice = s.rings[9] << DISTANCE_CONTEXT_BITS;\n  }\n\n  private static void maybeReallocateRingBuffer(State s) {\n    int newSize = s.maxRingBufferSize;\n    if (newSize > s.expectedTotalSize) {\n      /* TODO(eustas): Handle 2GB+ cases more gracefully. */\n      final int minimalNewSize = s.expectedTotalSize;\n      while ((newSize >> 1) > minimalNewSize) {\n        newSize = newSize >> 1;\n      }\n      if ((s.inputEnd == 0) && newSize < 16384 && s.maxRingBufferSize >= 16384) {\n        newSize = 16384;\n      }\n    }\n    if (newSize <= s.ringBufferSize) {\n      return;\n    }\n    final int ringBufferSizeWithSlack = newSize + MAX_TRANSFORMED_WORD_LENGTH;\n    final byte[] newBuffer = new byte[ringBufferSizeWithSlack];\n    final byte[] oldBuffer = s.ringBuffer;\n    if (oldBuffer.length != 0) {\n      Utils.copyBytes(newBuffer, 0, oldBuffer, 0, s.ringBufferSize);\n    }\n    s.ringBuffer = newBuffer;\n    s.ringBufferSize = newSize;\n  }\n\n  private static int readNextMetablockHeader(State s) {\n    if (s.inputEnd != 0) {\n      s.nextRunningState = FINISHED;\n      s.runningState = INIT_WRITE;\n      return BROTLI_OK;\n    }\n    // TODO(eustas): Reset? Do we need this?\n    s.literalTreeGroup = new int[0];\n    s.commandTreeGroup = new int[0];\n    s.distanceTreeGroup = new int[0];\n\n    int result;\n    if (s.halfOffset > BitReader.HALF_WATERLINE) {\n      result = BitReader.readMoreInput(s);\n      if (result < BROTLI_OK) {\n        return result;\n      }\n    }\n    result = decodeMetaBlockLength(s);\n    if (result < BROTLI_OK) {\n      return result;\n    }\n    if ((s.metaBlockLength == 0) && (s.isMetadata == 0)) {\n      return BROTLI_OK;\n    }\n    if ((s.isUncompressed != 0) || (s.isMetadata != 0)) {\n      result = BitReader.jumpToByteBoundary(s);\n      if (result < BROTLI_OK) {\n        return result;\n      }\n      if (s.isMetadata == 0) {\n        s.runningState = COPY_UNCOMPRESSED;\n      } else {\n        s.runningState = READ_METADATA;\n      }\n    } else {\n      s.runningState = COMPRESSED_BLOCK_START;\n    }\n\n    if (s.isMetadata != 0) {\n      return BROTLI_OK;\n    }\n    s.expectedTotalSize += s.metaBlockLength;\n    if (s.expectedTotalSize > 1 << 30) {\n      s.expectedTotalSize = 1 << 30;\n    }\n    if (s.ringBufferSize < s.maxRingBufferSize) {\n      maybeReallocateRingBuffer(s);\n    }\n    return BROTLI_OK;\n  }\n\n  private static int readMetablockPartition(State s, int treeType, int numBlockTypes) {\n    int offset = s.blockTrees[2 * treeType];\n    if (numBlockTypes <= 1) {\n      s.blockTrees[2 * treeType + 1] = offset;\n      s.blockTrees[2 * treeType + 2] = offset;\n      return 1 << 28;\n    }\n\n    final int blockTypeAlphabetSize = numBlockTypes + 2;\n    int result = readHuffmanCode(\n        blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s);\n    if (result < BROTLI_OK) {\n      return result;\n    }\n    offset += result;\n    s.blockTrees[2 * treeType + 1] = offset;\n\n    final int blockLengthAlphabetSize = NUM_BLOCK_LENGTH_CODES;\n    result = readHuffmanCode(\n        blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2 * treeType + 1, s);\n    if (result < BROTLI_OK) {\n      return result;\n    }\n    offset += result;\n    s.blockTrees[2 * treeType + 2] = offset;\n\n    return readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n  }\n\n  private static void calculateDistanceLut(State s, int alphabetSizeLimit) {\n    final byte[] distExtraBits = s.distExtraBits;\n    final int[] distOffset = s.distOffset;\n    final int npostfix = s.distancePostfixBits;\n    final int ndirect = s.numDirectDistanceCodes;\n    final int postfix = 1 << npostfix;\n    int bits = 1;\n    int half = 0;\n\n    /* Skip short codes. */\n    int i = NUM_DISTANCE_SHORT_CODES;\n\n    /* Fill direct codes. */\n    for (int j = 0; j < ndirect; ++j) {\n      distExtraBits[i] = 0;\n      distOffset[i] = j + 1;\n      ++i;\n    }\n\n    /* Fill regular distance codes. */\n    while (i < alphabetSizeLimit) {\n      final int base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1;\n      /* Always fill the complete group. */\n      for (int j = 0; j < postfix; ++j) {\n        distExtraBits[i] = (byte) bits;\n        distOffset[i] = base + j;\n        ++i;\n      }\n      bits = bits + half;\n      half = half ^ 1;\n    }\n  }\n\n  private static int readMetablockHuffmanCodesAndContextMaps(State s) {\n    s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    int result = readMetablockPartition(s, 0, s.numLiteralBlockTypes);\n    if (result < BROTLI_OK) {\n      return result;\n    }\n    s.literalBlockLength = result;\n    s.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    result = readMetablockPartition(s, 1, s.numCommandBlockTypes);\n    if (result < BROTLI_OK) {\n      return result;\n    }\n    s.commandBlockLength = result;\n    s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    result = readMetablockPartition(s, 2, s.numDistanceBlockTypes);\n    if (result < BROTLI_OK) {\n      return result;\n    }\n    s.distanceBlockLength = result;\n\n    if (s.halfOffset > BitReader.HALF_WATERLINE) {\n      result = BitReader.readMoreInput(s);\n      if (result < BROTLI_OK) {\n        return result;\n      }\n    }\n    BitReader.fillBitWindow(s);\n    s.distancePostfixBits = BitReader.readFewBits(s, 2);\n    s.numDirectDistanceCodes = BitReader.readFewBits(s, 4) << s.distancePostfixBits;\n    // TODO(eustas): Reuse?\n    s.contextModes = new byte[s.numLiteralBlockTypes];\n    int i = 0;\n    while (i < s.numLiteralBlockTypes) {\n      /* Ensure that less than 256 bits read between readMoreInput. */\n      final int limit = Utils.min(i + 96, s.numLiteralBlockTypes);\n      while (i < limit) {\n        BitReader.fillBitWindow(s);\n        s.contextModes[i] = (byte) BitReader.readFewBits(s, 2);\n        i++;\n      }\n      if (s.halfOffset > BitReader.HALF_WATERLINE) {\n        result = BitReader.readMoreInput(s);\n        if (result < BROTLI_OK) {\n          return result;\n        }\n      }\n    }\n\n    // TODO(eustas): Reuse?\n    final int contextMapLength = s.numLiteralBlockTypes << LITERAL_CONTEXT_BITS;\n    s.contextMap = new byte[contextMapLength];\n    result = decodeContextMap(contextMapLength, s.contextMap, s);\n    if (result < BROTLI_OK) {\n      return result;\n    }\n    final int numLiteralTrees = result;\n    s.trivialLiteralContext = 1;\n    for (int j = 0; j < contextMapLength; ++j) {\n      if ((int) s.contextMap[j] != j >> LITERAL_CONTEXT_BITS) {\n        s.trivialLiteralContext = 0;\n        break;\n      }\n    }\n\n    // TODO(eustas): Reuse?\n    s.distContextMap = new byte[s.numDistanceBlockTypes << DISTANCE_CONTEXT_BITS];\n    result = decodeContextMap(s.numDistanceBlockTypes << DISTANCE_CONTEXT_BITS,\n        s.distContextMap, s);\n    if (result < BROTLI_OK) {\n      return result;\n    }\n    final int numDistTrees = result;\n\n    s.literalTreeGroup = new int[huffmanTreeGroupAllocSize(NUM_LITERAL_CODES, numLiteralTrees)];\n    result = decodeHuffmanTreeGroup(\n        NUM_LITERAL_CODES, NUM_LITERAL_CODES, numLiteralTrees, s, s.literalTreeGroup);\n    if (result < BROTLI_OK) {\n      return result;\n    }\n    s.commandTreeGroup =\n        new int[huffmanTreeGroupAllocSize(NUM_COMMAND_CODES, s.numCommandBlockTypes)];\n    result = decodeHuffmanTreeGroup(\n        NUM_COMMAND_CODES, NUM_COMMAND_CODES, s.numCommandBlockTypes, s, s.commandTreeGroup);\n    if (result < BROTLI_OK) {\n      return result;\n    }\n    int distanceAlphabetSizeMax = calculateDistanceAlphabetSize(\n        s.distancePostfixBits, s.numDirectDistanceCodes, MAX_DISTANCE_BITS);\n    int distanceAlphabetSizeLimit = distanceAlphabetSizeMax;\n    if (s.isLargeWindow == 1) {\n      distanceAlphabetSizeMax = calculateDistanceAlphabetSize(\n          s.distancePostfixBits, s.numDirectDistanceCodes, MAX_LARGE_WINDOW_DISTANCE_BITS);\n      result = calculateDistanceAlphabetLimit(\n          s, MAX_ALLOWED_DISTANCE, s.distancePostfixBits, s.numDirectDistanceCodes);\n      if (result < BROTLI_OK) {\n        return result;\n      }\n      distanceAlphabetSizeLimit = result;\n    }\n    s.distanceTreeGroup =\n        new int[huffmanTreeGroupAllocSize(distanceAlphabetSizeLimit, numDistTrees)];\n    result = decodeHuffmanTreeGroup(\n        distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s, s.distanceTreeGroup);\n    if (result < BROTLI_OK) {\n      return result;\n    }\n    calculateDistanceLut(s, distanceAlphabetSizeLimit);\n\n    s.contextMapSlice = 0;\n    s.distContextMapSlice = 0;\n    s.contextLookupOffset1 = (int) s.contextModes[0] * 512;\n    s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n    s.literalTreeIdx = 0;\n    s.commandTreeIdx = 0;\n\n    s.rings[4] = 1;\n    s.rings[5] = 0;\n    s.rings[6] = 1;\n    s.rings[7] = 0;\n    s.rings[8] = 1;\n    s.rings[9] = 0;\n    return BROTLI_OK;\n  }\n\n  private static int copyUncompressedData(State s) {\n    final byte[] ringBuffer = s.ringBuffer;\n    int result;\n\n    // Could happen if block ends at ring buffer end.\n    if (s.metaBlockLength <= 0) {\n      result = BitReader.reload(s);\n      if (result < BROTLI_OK) {\n        return result;\n      }\n      s.runningState = BLOCK_START;\n      return BROTLI_OK;\n    }\n\n    final int chunkLength = Utils.min(s.ringBufferSize - s.pos, s.metaBlockLength);\n    result = BitReader.copyRawBytes(s, ringBuffer, s.pos, chunkLength);\n    if (result < BROTLI_OK) {\n      return result;\n    }\n    s.metaBlockLength -= chunkLength;\n    s.pos += chunkLength;\n    if (s.pos == s.ringBufferSize) {\n        s.nextRunningState = COPY_UNCOMPRESSED;\n        s.runningState = INIT_WRITE;\n        return BROTLI_OK;\n      }\n\n    result = BitReader.reload(s);\n    if (result < BROTLI_OK) {\n      return result;\n    }\n    s.runningState = BLOCK_START;\n    return BROTLI_OK;\n  }\n\n  private static int writeRingBuffer(State s) {\n    final int toWrite = Utils.min(s.outputLength - s.outputUsed,\n        s.ringBufferBytesReady - s.ringBufferBytesWritten);\n    // TODO(eustas): DCHECK(toWrite >= 0)\n    if (toWrite != 0) {\n      Utils.copyBytes(s.output, s.outputOffset + s.outputUsed, s.ringBuffer,\n          s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite);\n      s.outputUsed += toWrite;\n      s.ringBufferBytesWritten += toWrite;\n    }\n\n    if (s.outputUsed < s.outputLength) {\n      return BROTLI_OK;\n    }\n    return BROTLI_OK_NEED_MORE_OUTPUT;\n  }\n\n  private static int huffmanTreeGroupAllocSize(int alphabetSizeLimit, int n) {\n    final int maxTableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSizeLimit + 31) >> 5];\n    return n + n * maxTableSize;\n  }\n\n  private static int decodeHuffmanTreeGroup(int alphabetSizeMax, int alphabetSizeLimit,\n      int n, State s, int[] group) {\n    int next = n;\n    for (int i = 0; i < n; ++i) {\n      group[i] = next;\n      final int result = readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s);\n      if (result < BROTLI_OK) {\n        return result;\n      }\n      next += result;\n    }\n    return BROTLI_OK;\n  }\n\n  // Returns offset in ringBuffer that should trigger WRITE when filled.\n  private static int calculateFence(State s) {\n    int result = s.ringBufferSize;\n    if (s.isEager != 0) {\n      result = Utils.min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed);\n    }\n    return result;\n  }\n\n  private static int doUseDictionary(State s, int fence) {\n    if (s.distance > MAX_ALLOWED_DISTANCE) {\n      return Utils.makeError(s, BROTLI_ERROR_INVALID_BACKWARD_REFERENCE);\n    }\n    final int address = s.distance - s.maxDistance - 1 - s.cdTotalSize;\n    if (address < 0) {\n      final int result = initializeCompoundDictionaryCopy(s, -address - 1, s.copyLength);\n      if (result < BROTLI_OK) {\n        return result;\n      }\n      s.runningState = COPY_FROM_COMPOUND_DICTIONARY;\n    } else {\n      // Force lazy dictionary initialization.\n      final ByteBuffer dictionaryData = Dictionary.getData();\n      final int wordLength = s.copyLength;\n      if (wordLength > Dictionary.MAX_DICTIONARY_WORD_LENGTH) {\n        return Utils.makeError(s, BROTLI_ERROR_INVALID_BACKWARD_REFERENCE);\n      }\n      final int shift = Dictionary.sizeBits[wordLength];\n      if (shift == 0) {\n        return Utils.makeError(s, BROTLI_ERROR_INVALID_BACKWARD_REFERENCE);\n      }\n      int offset = Dictionary.offsets[wordLength];\n      final int mask = (1 << shift) - 1;\n      final int wordIdx = address & mask;\n      final int transformIdx = address >> shift;\n      offset += wordIdx * wordLength;\n      final Transform.Transforms transforms = Transform.RFC_TRANSFORMS;\n      if (transformIdx >= transforms.numTransforms) {\n        return Utils.makeError(s, BROTLI_ERROR_INVALID_BACKWARD_REFERENCE);\n      }\n      final int len = Transform.transformDictionaryWord(s.ringBuffer, s.pos, dictionaryData,\n          offset, wordLength, transforms, transformIdx);\n      s.pos += len;\n      s.metaBlockLength -= len;\n      if (s.pos >= fence) {\n        s.nextRunningState = MAIN_LOOP;\n        s.runningState = INIT_WRITE;\n        return BROTLI_OK;\n      }\n      s.runningState = MAIN_LOOP;\n    }\n    return BROTLI_OK;\n  }\n\n  private static void initializeCompoundDictionary(State s) {\n    s.cdBlockMap = new byte[1 << CD_BLOCK_MAP_BITS];\n    int blockBits = CD_BLOCK_MAP_BITS;\n    // If this function is executed, then s.cdTotalSize > 0.\n    while (((s.cdTotalSize - 1) >> blockBits) != 0) {\n      blockBits++;\n    }\n    blockBits -= CD_BLOCK_MAP_BITS;\n    s.cdBlockBits = blockBits;\n    int cursor = 0;\n    int index = 0;\n    while (cursor < s.cdTotalSize) {\n      while (s.cdChunkOffsets[index + 1] < cursor) {\n        index++;\n      }\n      s.cdBlockMap[cursor >> blockBits] = (byte) index;\n      cursor += 1 << blockBits;\n    }\n  }\n\n  private static int initializeCompoundDictionaryCopy(State s, int address, int length) {\n    if (s.cdBlockBits == -1) {\n      initializeCompoundDictionary(s);\n    }\n    int index = (int) s.cdBlockMap[address >> s.cdBlockBits];\n    while (address >= s.cdChunkOffsets[index + 1]) {\n      index++;\n    }\n    if (s.cdTotalSize > address + length) {\n      return Utils.makeError(s, BROTLI_ERROR_INVALID_BACKWARD_REFERENCE);\n    }\n    /* Update the recent distances cache */\n    s.distRbIdx = (s.distRbIdx + 1) & 0x3;\n    s.rings[s.distRbIdx] = s.distance;\n    s.metaBlockLength -= length;\n    s.cdBrIndex = index;\n    s.cdBrOffset = address - s.cdChunkOffsets[index];\n    s.cdBrLength = length;\n    s.cdBrCopied = 0;\n    return BROTLI_OK;\n  }\n\n  private static int copyFromCompoundDictionary(State s, int fence) {\n    int pos = s.pos;\n    final int origPos = pos;\n    while (s.cdBrLength != s.cdBrCopied) {\n      final int space = fence - pos;\n      final int chunkLength = s.cdChunkOffsets[s.cdBrIndex + 1] - s.cdChunkOffsets[s.cdBrIndex];\n      final int remChunkLength = chunkLength - s.cdBrOffset;\n      int length = s.cdBrLength - s.cdBrCopied;\n      if (length > remChunkLength) {\n        length = remChunkLength;\n      }\n      if (length > space) {\n        length = space;\n      }\n      Utils.copyBytes(\n          s.ringBuffer, pos, s.cdChunks[s.cdBrIndex], s.cdBrOffset, s.cdBrOffset + length);\n      pos += length;\n      s.cdBrOffset += length;\n      s.cdBrCopied += length;\n      if (length == remChunkLength) {\n        s.cdBrIndex++;\n        s.cdBrOffset = 0;\n      }\n      if (pos >= fence) {\n        break;\n      }\n    }\n    return pos - origPos;\n  }\n\n  /**\n   * Actual decompress implementation.\n   */\n  static int decompress(State s) {\n    int result;\n    if (s.runningState == UNINITIALIZED) {\n      return Utils.makeError(s, BROTLI_PANIC_STATE_NOT_INITIALIZED);\n    }\n    if (s.runningState < 0) {\n      return Utils.makeError(s, BROTLI_PANIC_UNEXPECTED_STATE);\n    }\n    if (s.runningState == CLOSED) {\n      return Utils.makeError(s, BROTLI_PANIC_ALREADY_CLOSED);\n    }\n    if (s.runningState == INITIALIZED) {\n      final int windowBits = decodeWindowBits(s);\n      if (windowBits == -1) {  /* Reserved case for future expansion. */\n        return Utils.makeError(s, BROTLI_ERROR_INVALID_WINDOW_BITS);\n      }\n      s.maxRingBufferSize = 1 << windowBits;\n      s.maxBackwardDistance = s.maxRingBufferSize - 16;\n      s.runningState = BLOCK_START;\n    }\n\n    int fence = calculateFence(s);\n    int ringBufferMask = s.ringBufferSize - 1;\n    byte[] ringBuffer = s.ringBuffer;\n\n    while (s.runningState != FINISHED) {\n      // TODO(eustas): extract cases to methods for the better readability.\n      switch (s.runningState) {\n        case BLOCK_START:\n          if (s.metaBlockLength < 0) {\n            return Utils.makeError(s, BROTLI_ERROR_INVALID_METABLOCK_LENGTH);\n          }\n          result = readNextMetablockHeader(s);\n          if (result < BROTLI_OK) {\n            return result;\n          }\n          /* Ring-buffer would be reallocated here. */\n          fence = calculateFence(s);\n          ringBufferMask = s.ringBufferSize - 1;\n          ringBuffer = s.ringBuffer;\n          continue;\n\n        case COMPRESSED_BLOCK_START: {\n          result = readMetablockHuffmanCodesAndContextMaps(s);\n          if (result < BROTLI_OK) {\n            return result;\n          }\n          s.runningState = MAIN_LOOP;\n          continue;\n        }\n\n        case MAIN_LOOP:\n          if (s.metaBlockLength <= 0) {\n            s.runningState = BLOCK_START;\n            continue;\n          }\n          if (s.halfOffset > BitReader.HALF_WATERLINE) {\n            result = BitReader.readMoreInput(s);\n            if (result < BROTLI_OK) {\n              return result;\n            }\n          }\n          if (s.commandBlockLength == 0) {\n            decodeCommandBlockSwitch(s);\n          }\n          s.commandBlockLength--;\n          BitReader.fillBitWindow(s);\n          final int cmdCode = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2;\n          final int insertAndCopyExtraBits = (int) CMD_LOOKUP[cmdCode];\n          final int insertLengthOffset = (int) CMD_LOOKUP[cmdCode + 1];\n          final int copyLengthOffset = (int) CMD_LOOKUP[cmdCode + 2];\n          s.distanceCode = (int) CMD_LOOKUP[cmdCode + 3];\n          BitReader.fillBitWindow(s);\n          {\n            final int insertLengthExtraBits = insertAndCopyExtraBits & 0xFF;\n            s.insertLength = insertLengthOffset + BitReader.readBits(s, insertLengthExtraBits);\n          }\n          BitReader.fillBitWindow(s);\n          {\n            final int copyLengthExtraBits = insertAndCopyExtraBits >> 8;\n            s.copyLength = copyLengthOffset + BitReader.readBits(s, copyLengthExtraBits);\n          }\n\n          s.j = 0;\n          s.runningState = INSERT_LOOP;\n          continue;\n\n        case INSERT_LOOP:\n          if (s.trivialLiteralContext != 0) {\n            while (s.j < s.insertLength) {\n              if (s.halfOffset > BitReader.HALF_WATERLINE) {\n                result = BitReader.readMoreInput(s);\n                if (result < BROTLI_OK) {\n                  return result;\n                }\n              }\n              if (s.literalBlockLength == 0) {\n                decodeLiteralBlockSwitch(s);\n              }\n              s.literalBlockLength--;\n              BitReader.fillBitWindow(s);\n              ringBuffer[s.pos] = (byte) readSymbol(s.literalTreeGroup, s.literalTreeIdx, s);\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = INSERT_LOOP;\n                s.runningState = INIT_WRITE;\n                break;\n              }\n            }\n          } else {\n            int prevByte1 = (int) ringBuffer[(s.pos - 1) & ringBufferMask] & 0xFF;\n            int prevByte2 = (int) ringBuffer[(s.pos - 2) & ringBufferMask] & 0xFF;\n            while (s.j < s.insertLength) {\n              if (s.halfOffset > BitReader.HALF_WATERLINE) {\n                result = BitReader.readMoreInput(s);\n                if (result < BROTLI_OK) {\n                  return result;\n                }\n              }\n              if (s.literalBlockLength == 0) {\n                decodeLiteralBlockSwitch(s);\n              }\n              final int literalContext = Context.LOOKUP[s.contextLookupOffset1 + prevByte1]\n                  | Context.LOOKUP[s.contextLookupOffset2 + prevByte2];\n              final int literalTreeIdx =\n                  (int) s.contextMap[s.contextMapSlice + literalContext] & 0xFF;\n              s.literalBlockLength--;\n              prevByte2 = prevByte1;\n              BitReader.fillBitWindow(s);\n              prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s);\n              ringBuffer[s.pos] = (byte) prevByte1;\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = INSERT_LOOP;\n                s.runningState = INIT_WRITE;\n                break;\n              }\n            }\n          }\n          if (s.runningState != INSERT_LOOP) {\n            continue;\n          }\n          s.metaBlockLength -= s.insertLength;\n          if (s.metaBlockLength <= 0) {\n            s.runningState = MAIN_LOOP;\n            continue;\n          }\n          int distanceCode = s.distanceCode;\n          if (distanceCode < 0) {\n            // distanceCode in untouched; assigning it 0 won't affect distance ring buffer rolling.\n            s.distance = s.rings[s.distRbIdx];\n          } else {\n            if (s.halfOffset > BitReader.HALF_WATERLINE) {\n              result = BitReader.readMoreInput(s);\n              if (result < BROTLI_OK) {\n                return result;\n              }\n            }\n            if (s.distanceBlockLength == 0) {\n              decodeDistanceBlockSwitch(s);\n            }\n            s.distanceBlockLength--;\n            BitReader.fillBitWindow(s);\n            final int distTreeIdx =\n                (int) s.distContextMap[s.distContextMapSlice + distanceCode] & 0xFF;\n            distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s);\n            if (distanceCode < NUM_DISTANCE_SHORT_CODES) {\n              final int index =\n                  (s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]) & 0x3;\n              s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode];\n              if (s.distance < 0) {\n                return Utils.makeError(s, BROTLI_ERROR_NEGATIVE_DISTANCE);\n              }\n            } else {\n              final int extraBits = (int) s.distExtraBits[distanceCode];\n              int bits;\n              if (s.bitOffset + extraBits <= BitReader.BITNESS) {\n                bits = BitReader.readFewBits(s, extraBits);\n              } else {\n                BitReader.fillBitWindow(s);\n                bits = BitReader.readBits(s, extraBits);\n              }\n              s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits);\n            }\n          }\n\n          if (s.maxDistance != s.maxBackwardDistance\n              && s.pos < s.maxBackwardDistance) {\n            s.maxDistance = s.pos;\n          } else {\n            s.maxDistance = s.maxBackwardDistance;\n          }\n\n          if (s.distance > s.maxDistance) {\n            s.runningState = USE_DICTIONARY;\n            continue;\n          }\n\n          if (distanceCode > 0) {\n            s.distRbIdx = (s.distRbIdx + 1) & 0x3;\n            s.rings[s.distRbIdx] = s.distance;\n          }\n\n          if (s.copyLength > s.metaBlockLength) {\n            return Utils.makeError(s, BROTLI_ERROR_INVALID_BACKWARD_REFERENCE);\n          }\n          s.j = 0;\n          s.runningState = COPY_LOOP;\n          continue;\n\n        case COPY_LOOP:\n          int src = (s.pos - s.distance) & ringBufferMask;\n          int dst = s.pos;\n          final int copyLength = s.copyLength - s.j;\n          final int srcEnd = src + copyLength;\n          final int dstEnd = dst + copyLength;\n          if ((srcEnd < ringBufferMask) && (dstEnd < ringBufferMask)) {\n            if (copyLength < 12 || (srcEnd > dst && dstEnd > src)) {\n              final int numQuads = (copyLength + 3) >> 2;\n              for (int k = 0; k < numQuads; ++k) {\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n              }\n            } else {\n              Utils.copyBytesWithin(ringBuffer, dst, src, srcEnd);\n            }\n            s.j += copyLength;\n            s.metaBlockLength -= copyLength;\n            s.pos += copyLength;\n          } else {\n            while (s.j < s.copyLength) {\n              ringBuffer[s.pos] =\n                  ringBuffer[(s.pos - s.distance) & ringBufferMask];\n              s.metaBlockLength--;\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = COPY_LOOP;\n                s.runningState = INIT_WRITE;\n                break;\n              }\n            }\n          }\n          if (s.runningState == COPY_LOOP) {\n            s.runningState = MAIN_LOOP;\n          }\n          continue;\n\n        case USE_DICTIONARY:\n          result = doUseDictionary(s, fence);\n          if (result < BROTLI_OK) {\n            return result;\n          }\n          continue;\n\n        case COPY_FROM_COMPOUND_DICTIONARY:\n          s.pos += copyFromCompoundDictionary(s, fence);\n          if (s.pos >= fence) {\n            s.nextRunningState = COPY_FROM_COMPOUND_DICTIONARY;\n            s.runningState = INIT_WRITE;\n            return BROTLI_OK_NEED_MORE_OUTPUT;\n          }\n          s.runningState = MAIN_LOOP;\n          continue;\n\n        case READ_METADATA:\n          while (s.metaBlockLength > 0) {\n            if (s.halfOffset > BitReader.HALF_WATERLINE) {\n              result = BitReader.readMoreInput(s);\n              if (result < BROTLI_OK) {\n                return result;\n              }\n            }\n            // Optimize\n            BitReader.fillBitWindow(s);\n            BitReader.readFewBits(s, 8);\n            s.metaBlockLength--;\n          }\n          s.runningState = BLOCK_START;\n          continue;\n\n        case COPY_UNCOMPRESSED:\n          result = copyUncompressedData(s);\n          if (result < BROTLI_OK) {\n            return result;\n          }\n          continue;\n\n        case INIT_WRITE:\n          s.ringBufferBytesReady = Utils.min(s.pos, s.ringBufferSize);\n          s.runningState = WRITE;\n          continue;\n\n        case WRITE:\n          result = writeRingBuffer(s);\n          if (result != BROTLI_OK) {\n            // Output buffer is full.\n            return result;\n          }\n          if (s.pos >= s.maxBackwardDistance) {\n            s.maxDistance = s.maxBackwardDistance;\n          }\n          // Wrap the ringBuffer.\n          if (s.pos >= s.ringBufferSize) {\n            if (s.pos > s.ringBufferSize) {\n              Utils.copyBytesWithin(ringBuffer, 0, s.ringBufferSize, s.pos);\n            }\n            s.pos = s.pos & ringBufferMask;\n            s.ringBufferBytesWritten = 0;\n          }\n          s.runningState = s.nextRunningState;\n          continue;\n\n        default:\n          return Utils.makeError(s, BROTLI_PANIC_UNEXPECTED_STATE);\n      }\n    }\n    if (s.runningState != FINISHED) {\n      return Utils.makeError(s, BROTLI_PANIC_UNREACHABLE);\n    }\n    if (s.metaBlockLength < 0) {\n      return Utils.makeError(s, BROTLI_ERROR_INVALID_METABLOCK_LENGTH);\n    }\n    result = BitReader.jumpToByteBoundary(s);\n    if (result != BROTLI_OK) {\n      return result;\n    }\n    result = BitReader.checkHealth(s, 1);\n    if (result != BROTLI_OK) {\n      return result;\n    }\n    return BROTLI_OK_DONE;\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/dec/DecodeTest.java",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\nimport static org.brotli.dec.TestUtils.newBrotliInputStream;\nimport static org.brotli.dec.TestUtils.readUniBytes;\nimport static org.junit.Assert.assertArrayEquals;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.JUnit4;\n\n/** Tests for {@link BrotliInputStream}. */\n@RunWith(JUnit4.class)\npublic class DecodeTest {\n\n  private byte[] decompress(byte[] data, boolean byByte) throws IOException {\n    byte[] buffer = new byte[65536];\n    ByteArrayInputStream input = new ByteArrayInputStream(data);\n    ByteArrayOutputStream output = new ByteArrayOutputStream();\n    InputStream brotliInput = newBrotliInputStream(input);\n    if (byByte) {\n      byte[] oneByte = new byte[1];\n      while (true) {\n        int next = brotliInput.read();\n        if (next == -1) {\n          break;\n        }\n        oneByte[0] = (byte) next;\n        output.write(oneByte, 0, 1);\n      }\n    } else {\n      while (true) {\n        int len = brotliInput.read(buffer, 0, buffer.length);\n        if (len <= 0) {\n          break;\n        }\n        output.write(buffer, 0, len);\n      }\n    }\n    brotliInput.close();\n    return output.toByteArray();\n  }\n\n  private void checkDecodeResource(String expected, String compressed) throws IOException {\n    byte[] expectedBytes = readUniBytes(expected);\n    byte[] compressedBytes = readUniBytes(compressed);\n    byte[] actual = decompress(compressedBytes, false);\n    assertArrayEquals(expectedBytes, actual);\n    byte[] actualByByte = decompress(compressedBytes, true);\n    assertArrayEquals(expectedBytes, actualByByte);\n  }\n\n  @Test\n  public void testEmpty() throws IOException {\n    checkDecodeResource(\"\", \"\\u0006\");\n  }\n\n  @Test\n  public void testX() throws IOException {\n    checkDecodeResource(\"X\", \"\\u000B\\u0000\\u0080X\\u0003\");\n  }\n\n  @Test\n  public void testX10Y10() throws IOException {\n    checkDecodeResource(\n        \"XXXXXXXXXXYYYYYYYYYY\",\n        \"\\u001B\\u0013\\u0000\\u0000\\u00A4\\u00B0\\u00B2\\u00EA\\u0081G\\u0002\\u008A\");\n  }\n\n  @Test\n  public void testX64() throws IOException {\n    checkDecodeResource(\n        \"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\",\n        \"\\u001B?\\u0000\\u0000$\\u00B0\\u00E2\\u0099\\u0080\\u0012\");\n  }\n\n  @Test\n  public void testUkkonooa() throws IOException {\n    // typo:off\n    checkDecodeResource(\n        \"ukko nooa, ukko nooa oli kunnon mies, kun han meni saunaan, \"\n            + \"pisti laukun naulaan, ukko nooa, ukko nooa oli kunnon mies.\",\n        \"\\u001Bv\\u0000\\u0000\\u0014J\\u00AC\\u009Bz\\u00BD\\u00E1\\u0097\\u009D\\u007F\\u008E\\u00C2\\u0082\"\n            + \"6\\u000E\\u009C\\u00E0\\u0090\\u0003\\u00F7\\u008B\\u009E8\\u00E6\\u00B6\\u0000\\u00AB\\u00C3\\u00CA\"\n            + \"\\u00A0\\u00C2\\u00DAf6\\u00DC\\u00CD\\u0080\\u008D.!\\u00D7n\\u00E3\\u00EAL\\u00B8\\u00F0\\u00D2\"\n            + \"\\u00B8\\u00C7\\u00C2pM:\\u00F0i~\\u00A1\\u00B8Es\\u00AB\\u00C4W\\u001E\");\n    // typo:on\n  }\n\n  @Test\n  public void testMonkey() throws IOException {\n    checkDecodeResource(\n        \"znxcvnmz,xvnm.,zxcnv.,xcn.z,vn.zvn.zxcvn.,zxcn.vn.v,znm.,vnzx.,vnzxc.vn.z,vnz.,nv.z,nvmz\"\n            + \"xc,nvzxcvcnm.,vczxvnzxcnvmxc.zmcnvzm.,nvmc,nzxmc,vn.mnnmzxc,vnxcnmv,znvzxcnmv,.xcnvm,zxc\"\n            + \"nzxv.zx,qweryweurqioweupropqwutioweupqrioweutiopweuriopweuriopqwurioputiopqwuriowuqeriou\"\n            + \"pqweropuweropqwurweuqriopuropqwuriopuqwriopuqweopruioqweurqweuriouqweopruioupqiytioqtyio\"\n            + \"wtyqptypryoqweutioioqtweqruowqeytiowquiourowetyoqwupiotweuqiorweuqroipituqwiorqwtioweuri\"\n            + \"ouytuioerytuioweryuitoweytuiweyuityeruirtyuqriqweuropqweiruioqweurioqwuerioqwyuituierwot\"\n            + \"ueryuiotweyrtuiwertyioweryrueioqptyioruyiopqwtjkasdfhlafhlasdhfjklashjkfhasjklfhklasjdfh\"\n            + \"klasdhfjkalsdhfklasdhjkflahsjdkfhklasfhjkasdfhasfjkasdhfklsdhalghhaf;hdklasfhjklashjklfa\"\n            + \"sdhfasdjklfhsdjklafsd;hkldadfjjklasdhfjasddfjklfhakjklasdjfkl;asdjfasfljasdfhjklasdfhjka\"\n            + \"ghjkashf;djfklasdjfkljasdklfjklasdjfkljasdfkljaklfj\",\n        \"\\u001BJ\\u0003\\u0000\\u008C\\u0094n\\u00DE\\u00B4\\u00D7\\u0096\\u00B1x\\u0086\\u00F2-\\u00E1\\u001A\"\n            + \"\\u00BC\\u000B\\u001C\\u00BA\\u00A9\\u00C7\\u00F7\\u00CCn\\u00B2B4QD\\u008BN\\u0013\\b\\u00A0\\u00CDn\"\n            + \"\\u00E8,\\u00A5S\\u00A1\\u009C],\\u001D#\\u001A\\u00D2V\\u00BE\\u00DB\\u00EB&\\u00BA\\u0003e|\\u0096j\"\n            + \"\\u00A2v\\u00EC\\u00EF\\u0087G3\\u00D6\\'\\u000Ec\\u0095\\u00E2\\u001D\\u008D,\\u00C5\\u00D1(\\u009F`\"\n            + \"\\u0094o\\u0002\\u008B\\u00DD\\u00AAd\\u0094,\\u001E;e|\\u0007EZ\\u00B2\\u00E2\\u00FCI\\u0081,\\u009F\"\n            + \"@\\u00AE\\u00EFh\\u0081\\u00AC\\u0016z\\u000F\\u00F5;m\\u001C\\u00B9\\u001E-_\\u00D5\\u00C8\\u00AF^\"\n            + \"\\u0085\\u00AA\\u0005\\u00BESu\\u00C2\\u00B0\\\"\\u008A\\u0015\\u00C6\\u00A3\\u00B1\\u00E6B\\u0014\"\n            + \"\\u00F4\\u0084TS\\u0019_\\u00BE\\u00C3\\u00F2\\u001D\\u00D1\\u00B7\\u00E5\\u00DD\\u00B6\\u00D9#\\u00C6\"\n            + \"\\u00F6\\u009F\\u009E\\u00F6Me0\\u00FB\\u00C0qE\\u0004\\u00AD\\u0003\\u00B5\\u00BE\\u00C9\\u00CB\\u00FD\\u00E2PZFt\\u0004\\r\"\n            + \"\\u00FF \\u0004w\\u00B2m\\'\\u00BFG\\u00A9\\u009D\\u001B\\u0096,b\\u0090#\"\n            + \"\\u008B\\u00E0\\u00F8\\u001D\\u00CF\\u00AF\\u001D=\\u00EE\\u008A\\u00C8u#f\\u00DD\\u00DE\\u00D6m\\u00E3*\\u0082\\u008Ax\\u008A\\u00DB\\u00E6\"\n            + \" L\\u00B7\\\\c\\u00BA0\\u00E3?\\u00B6\\u00EE\\u008C\\\"\\u00A2*\\u00B0\\\"\\n\"\n            + \"\\u0099\\u00FF=bQ\\u00EE\\b\\u00F6=J\\u00E4\\u00CC\\u00EF\\\"\\u0087\\u0011\\u00E2\"\n            + \"\\u0083(\\u00E4\\u00F5\\u008F5\\u0019c[\\u00E1Z\\u0092s\\u00DD\\u00A1P\\u009D8\\\\\\u00EB\\u00B5\\u0003jd\\u0090\\u0094\\u00C8\\u008D\\u00FB/\\u008A\\u0086\\\"\\u00CC\\u001D\\u0087\\u00E0H\\n\"\n            + \"\\u0096w\\u00909\\u00C6##H\\u00FB\\u0011GV\\u00CA\"\n            + \" \\u00E3B\\u0081\\u00F7w2\\u00C1\\u00A5\\\\@!e\\u0017@)\\u0017\\u0017lV2\\u00988\\u0006\\u00DC\\u0099M3)\\u00BB\\u0002\\u00DFL&\\u0093l\\u0017\\u0082\\u0086\"\n            + \" \\u00D7\"\n            + \"\\u0003y}\\u009A\\u0000\\u00D7\\u0087\\u0000\\u00E7\\u000Bf\\u00E3Lfqg\\b2\\u00F9\\b>\\u00813\\u00CD\\u0017r1\\u00F0\\u00B8\\u0094RK\\u00901\\u008Eh\\u00C1\\u00EF\\u0090\\u00C9\\u00E5\\u00F2a\"\n            + \"\\tr%\\u00AD\\u00EC\\u00C5b\\u00C0\\u000B\\u0012\\u0005\\u00F7\\u0091u\\r\"\n            + \"\\u00EEa..\\u0019\\t\\u00C2\\u0003\");\n  }\n\n  @Test\n  public void testFox() throws IOException {\n    checkDecodeResource(\n        \"The quick brown fox jumps over the lazy dog\",\n        \"\\u001B*\\u0000\\u0000\\u0004\\u0004\\u00BAF:\\u0085\\u0003\\u00E9\\u00FA\\f\\u0091\\u0002H\\u0011,\"\n            + \"\\u00F3\\u008A:\\u00A3V\\u007F\\u001A\\u00AE\\u00BF\\u00A4\\u00AB\\u008EM\\u00BF\\u00ED\\u00E2\\u0004K\"\n            + \"\\u0091\\u00FF\\u0087\\u00E9\\u001E\");\n  }\n\n  @Test\n  public void testUtils() {\n    new Context();\n    new Decode();\n    new Huffman();\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/dec/Decoder.java",
    "content": "package org.brotli.dec;\n\nimport java.io.FileInputStream;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\n\n/** Toy decoder CLI; mostly used for simple benchmarking. */\npublic class Decoder {\n  private static long decodeBytes(InputStream input, OutputStream output, byte[] buffer)\n      throws IOException {\n    long totalOut = 0;\n    int readBytes;\n    BrotliInputStream in = new BrotliInputStream(input);\n    in.enableLargeWindow();\n    try {\n      while ((readBytes = in.read(buffer)) >= 0) {\n        output.write(buffer, 0, readBytes);\n        totalOut += readBytes;\n      }\n    } finally {\n      in.close();\n    }\n    return totalOut;\n  }\n\n  private static void decompress(String fromPath, String toPath, byte[] buffer) throws IOException {\n    long start;\n    long bytesDecoded;\n    long end;\n    InputStream in = null;\n    OutputStream out = null;\n    try {\n      in = new FileInputStream(fromPath);\n      out = new FileOutputStream(toPath);\n      start = System.nanoTime();\n      bytesDecoded = decodeBytes(in, out, buffer);\n      end = System.nanoTime();\n    } finally {\n      if (in != null) {\n        in.close();  // Hopefully, does not throw exception.\n      }\n      if (out != null) {\n        out.close();\n      }\n    }\n\n    double timeDelta = (end - start) / 1000000000.0;\n    if (timeDelta <= 0) {\n      return;\n    }\n    double mbDecoded = bytesDecoded / (1024.0 * 1024.0);\n    System.out.println(mbDecoded / timeDelta + \" MiB/s\");\n  }\n\n  /** CLI entry point. */\n  public static void main(String... args) throws IOException {\n    if (args.length != 2 && args.length != 3) {\n      System.out.println(\"Usage: decoder <compressed_in> <decompressed_out> [repeat]\");\n      return;\n    }\n\n    int repeat = 1;\n    if (args.length == 3) {\n      repeat = Integer.parseInt(args[2]);\n    }\n\n    byte[] buffer = new byte[1024 * 1024];\n    for (int i = 0; i < repeat; ++i) {\n      decompress(args[0], args[1], buffer);\n    }\n  }\n\n  /** Non-instantiable. */\n  private Decoder() {}\n}\n"
  },
  {
    "path": "java/org/brotli/dec/Dictionary.java",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\nimport java.nio.ByteBuffer;\n\n/**\n * Collection of static dictionary words.\n *\n * <p>Dictionary content is loaded from binary resource when {@link #getData()} is executed for the\n * first time. Consequently, it saves memory and CPU in case dictionary is not required.\n *\n * <p>One possible drawback is that multiple threads that need dictionary data may be blocked (only\n * once in each classworld). To avoid this, it is enough to call {@link #getData()} proactively.\n */\npublic final class Dictionary {\n  static final int MIN_DICTIONARY_WORD_LENGTH = 4;\n  static final int MAX_DICTIONARY_WORD_LENGTH = 31;\n\n  private static ByteBuffer data = ByteBuffer.allocateDirect(0);\n  static final int[] offsets = new int[32];\n  static final int[] sizeBits = new int[32];\n\n  private static class DataLoader {\n    static final boolean OK;\n\n    static {\n      boolean ok = true;\n      try {\n        Class.forName(Dictionary.class.getPackage().getName() + \".DictionaryData\");\n      } catch (Throwable ex) {\n        ok = false;\n      }\n      OK = ok;\n    }\n  }\n\n  private static final int DICTIONARY_DEBUG = Utils.isDebugMode();\n\n  /** Initialize static dictionary. */\n  public static void setData(ByteBuffer newData, int[] newSizeBits) {\n    if (DICTIONARY_DEBUG != 0) {\n      if ((Utils.isDirect(newData) == 0) || (Utils.isReadOnly(newData) == 0)) {\n        throw new BrotliRuntimeException(\"newData must be a direct read-only byte buffer\");\n      }\n      // TODO: is that so?\n      if (newSizeBits.length > MAX_DICTIONARY_WORD_LENGTH) {\n        throw new BrotliRuntimeException(\n            \"sizeBits length must be at most \" + String.valueOf(MAX_DICTIONARY_WORD_LENGTH));\n      }\n      for (int i = 0; i < MIN_DICTIONARY_WORD_LENGTH; ++i) {\n        if (newSizeBits[i] != 0) {\n          throw new BrotliRuntimeException(\n              \"first \" + String.valueOf(MIN_DICTIONARY_WORD_LENGTH) + \" must be 0\");\n        }\n      }\n    }\n    final int[] dictionaryOffsets = Dictionary.offsets;\n    final int[] dictionarySizeBits = Dictionary.sizeBits;\n    for (int i = 0; i < newSizeBits.length; ++i) {\n      dictionarySizeBits[i] = newSizeBits[i];\n    }\n    int pos = 0;\n    for (int i = 0; i < newSizeBits.length; ++i) {\n      dictionaryOffsets[i] = pos;\n      final int bits = dictionarySizeBits[i];\n      if (bits != 0) {\n        pos += i << (bits & 31);\n        if (DICTIONARY_DEBUG != 0) {\n          if (bits >= 31) {\n            throw new BrotliRuntimeException(\"newSizeBits values must be less than 31\");\n          }\n          if (pos <= 0 || pos > newData.capacity()) {\n            throw new BrotliRuntimeException(\"newSizeBits is inconsistent: overflow\");\n          }\n        }\n      }\n    }\n    for (int i = newSizeBits.length; i < 32; ++i) {\n      dictionaryOffsets[i] = pos;\n    }\n    if (DICTIONARY_DEBUG != 0) {\n      if (pos != newData.capacity()) {\n        throw new BrotliRuntimeException(\"newSizeBits is inconsistent: underflow\");\n      }\n    }\n    Dictionary.data = newData;\n  }\n\n  /** Access static dictionary. */\n  public static ByteBuffer getData() {\n    if (data.capacity() != 0) {\n      return data;\n    }\n    if (!DataLoader.OK) {\n      throw new BrotliRuntimeException(\"brotli dictionary is not set\");\n    }\n    /* Might have been set when {@link DictionaryData} was loaded.*/\n    return data;\n  }\n\n  /** Non-instantiable. */\n  private Dictionary() {}\n}\n"
  },
  {
    "path": "java/org/brotli/dec/DictionaryData.java",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\nimport java.nio.ByteBuffer;\n\n/**\n * Built-in dictionary data.\n *\n * When this class is loaded, it sets its data: {@link Dictionary#setData(ByteBuffer)}.\n */\nfinal class DictionaryData {\n  // typo:off\n  private static final String DATA0 = \"wjnfgltmojefofewab`h`lgfgbwbpkltlmozpjwf`jwzlsfmivpwojhfeqfftlqhwf{wzfbqlufqalgzolufelqnallhsobzojufojmfkfosklnfpjgfnlqftlqgolmdwkfnujftejmgsbdfgbzpevookfbgwfqnfb`kbqfbeqlnwqvfnbqhbaofvslmkjdkgbwfobmgmftpfufmmf{w`bpfalwkslpwvpfgnbgfkbmgkfqftkbwmbnfOjmhaoldpjyfabpfkfognbhfnbjmvpfq$*#(klogfmgptjwkMftpqfbgtfqfpjdmwbhfkbufdbnfpffm`boosbwktfoosovpnfmvejonsbqwiljmwkjpojpwdllgmffgtbzptfpwilapnjmgboploldlqj`kvpfpobpwwfbnbqnzellghjmdtjoofbpwtbqgafpwejqfSbdfhmltbtbz-smdnlufwkbmolbgdjufpfoemlwfnv`keffgnbmzql`hj`lmlm`follhkjgfgjfgKlnfqvofklpwbib{jmel`ovaobtpofppkboeplnfpv`kylmf233&lmfp`bqfWjnfqb`faovfelvqtffheb`fklsfdbufkbqgolpwtkfmsbqhhfswsbpppkjsqllnKWNOsobmWzsfglmfpbufhffseobdojmhplogejufwllhqbwfwltmivnswkvpgbqh`bqgejofefbqpwbzhjoowkbweboobvwlfufq-`lnwbohpklsulwfgffsnlgfqfpwwvqmalqmabmgefooqlpfvqo+phjmqlof`lnfb`wpbdfpnffwdlog-isdjwfnubqzefowwkfmpfmggqlsUjft`lsz2-3!?,b=pwlsfopfojfpwlvqsb`h-djesbpw`pp<dqbznfbm%dw8qjgfpklwobwfpbjgqlbgubq#effoilkmqj`hslqwebpw$VB.gfbg?,a=sllqajoowzsfV-P-tllgnvpw1s{8JmelqbmhtjgftbmwtbooofbgX3^8sbvotbufpvqf'+$ tbjwnbppbqnpdlfpdbjmobmdsbjg\\\"..#ol`hvmjwqllwtbohejqntjef{no!plmdwfpw13s{hjmgqltpwlloelmwnbjopbefpwbqnbsp`lqfqbjmeoltabazpsbmpbzp7s{85s{8bqwpellwqfbotjhjkfbwpwfswqjslqd,obhftfbhwlogElqn`bpwebmpabmhufqzqvmpivozwbph2s{8dlbodqftpoltfgdfjg>!pfwp6s{8-ip<73s{je#+pllmpfbwmlmfwvafyfqlpfmwqffgeb`wjmwldjewkbqn2;s{`bnfkjooalogyllnuljgfbpzqjmdejoosfbhjmjw`lpw0s{8ib`hwbdpajwpqloofgjwhmftmfbq?\\\"..dqltIPLMgvwzMbnfpbofzlv#olwpsbjmibyy`logfzfpejpkttt-qjphwbapsqfu23s{qjpf16s{Aovfgjmd033/abooelqgfbqmtjogal{-ebjqob`hufqpsbjqivmfwf`kje+\\\"sj`hfujo'+! tbqnolqgglfpsvoo/333jgfbgqbtkvdfpslwevmgavqmkqfe`foohfzpwj`hklvqolppevfo21s{pvjwgfboQPP!bdfgdqfzDFW!fbpfbjnpdjqobjgp;s{8mbuzdqjgwjsp :::tbqpobgz`bqp*8#~sks<kfoowbootklnyk9\\t),\\u000E\\t#233kboo-\\t\\tB4s{8svpk`kbw3s{8`qft),?,kbpk46s{eobwqbqf#%%#wfoo`bnslmwlobjgnjppphjswfmwejmfnbofdfwpsolw733/\\u000E\\t\\u000E\\t`lloeffw-sks?aq=fqj`nlpwdvjgafoogfp`kbjqnbwkbwln,jnd% ;1ov`h`fmw3338wjmzdlmfkwnopfoogqvdEQFFmlgfmj`h<jg>olpfmvooubpwtjmgQPP#tfbqqfozaffmpbnfgvhfmbpb`bsftjpkdvoeW109kjwppolwdbwfhj`haovqwkfz26s{$$*8*8!=npjftjmpajqgplqwafwbpffhW2;9lqgpwqffnboo53s{ebqn\\u000ElupalzpX3^-$*8!SLPWafbqhjgp*8~~nbqzwfmg+VH*rvbgyk9\\n.pjy....sqls$*8\\u000EojewW2:9uj`fbmgzgfaw=QPPsllomf`haoltW259gllqfuboW249ofwpebjolqbosloomlub`lopdfmf#\\u000Elxplewqlnfwjooqlpp?k0=slvqebgfsjmh?wq=njmj*\\u007F\\\"+njmfyk9\\u0004abqpkfbq33*8njoh#..=jqlmeqfggjphtfmwpljosvwp,ip,klozW119JPAMW139bgbnpffp?k1=iplm$/#$`lmwW129#QPPollsbpjbnllm?,s=plvoOJMFelqw`bqwW279?k2=;3s{\\\"..?:s{8W379njhf975Ymj`fjm`kZlqhqj`fyk9\\b$**8svqfnbdfsbqbwlmfalmg904Y\\\\le\\\\$^*8333/yk9\\u000Bwbmhzbqgaltoavpk965YIbub03s{\\t\\u007F~\\t&@0&907YifeeF[SJ`bpkujpbdloepmltyk9\\u0005rvfq-`pppj`hnfbwnjm-ajmggfookjqfsj`pqfmw905YKWWS.132elwltloeFMG#{al{967YALGZgj`h8\\t~\\tf{jw906Yubqpafbw$~*8gjfw:::8bmmf~~?,Xj^-Obmdhn.^tjqfwlzpbggppfbobof{8\\t\\n~f`klmjmf-lqd336*wlmziftppbmgofdpqlle333*#133tjmfdfbqgldpallwdbqz`vwpwzofwfnswjlm-{no`l`hdbmd'+$-63s{Sk-Gnjp`bobmolbmgfphnjofqzbmvmj{gjp`*8~\\tgvpw`ojs*-\\t\\t43s{.133GUGp4^=?wbsfgfnlj((*tbdffvqlskjolswpklofEBRpbpjm.15WobapsfwpVQO#avoh`llh8~\\u000E\\tKFBGX3^*baaqivbm+2:;ofpkwtjm?,j=plmzdvzpev`hsjsf\\u007F.\\t\\\"331*mgltX2^8X^8\\tOld#pbow\\u000E\\t\\n\\nabmdwqjnabwk*x\\u000E\\t33s{\\t~*8hl9\\u0000effpbg=\\u000Ep9,,#X^8wloosovd+*x\\tx\\u000E\\t#-ip$133sgvboalbw-ISD*8\\t~rvlw*8\\t\\t$*8\\t\\u000E\\t~\\u000E1327132613251324132;132:13131312131113101317131613151314131;131:130313021301130013071306130513041320132113221323133:133;133413351336133713301331133213332:::2::;2::42::52::62::72::02::12::22::32:;:2:;;2:;42:;52:;62:;72:;02:;12:;22:;32:4:2:4;2:442:452:462:472:402:412:422:432:5:2:5;2:542:552:562:572:502:512:522:532:6:2:6;2:642:652:662:672:602:612:622:632333231720:73333::::`lnln/Mpfpwffpwbsfqlwlglkb`f`bgbb/]lajfmg/Abbp/Aujgb`bpllwqlelqlplollwqb`vbogjilpjgldqbmwjslwfnbgfafbodlrv/Efpwlmbgbwqfpsl`l`bpbabilwlgbpjmlbdvbsvfpvmlpbmwfgj`fovjpfoobnbzlylmbbnlqsjpllaqb`oj`foolgjlpklqb`bpj<[<\\\\<Q<\\\\<R<P=l<\\\\=l=o=n<\\\\<Q<Y<S<R<R=n<T<[<Q<R<X<R=n<R<Z<Y<R<Q<T=i<q<\\\\<Y<Y<]=g<P=g<~=g=m<R<^=g<^<R<q<R<R<]<s<R<W<T<Q<T<L<H<q<Y<p=g=n=g<r<Q<T<P<X<\\\\<{<\\\\<x<\\\\<q=o<r<]=n<Y<t<[<Y<U<Q=o<P<P<N=g=o<Z5m5f4O5j5i4K5i4U5o5h4O5d4]4C5f4K5m5e5k5d5h5i5h5o4K5d5h5k4D4_4K5h4I5j5k5f4O5f5n4C5k5h4G5i4D5k5h5d5h5f4D5h4K5f4D5o4X5f4K5i4O5i5j4F4D5f5h5j4A4D5k5i5i4X5d4Xejqpwujgflojdkwtlqognfgjbtkjwf`olpfaob`hqjdkwpnbooallhpsob`fnvpj`ejfoglqgfqsljmwubovfofufowbaofalbqgklvpfdqlvstlqhpzfbqppwbwfwlgbztbwfqpwbqwpwzofgfbwksltfqsklmfmjdkwfqqlqjmsvwbalvwwfqnpwjwofwllopfufmwol`bowjnfpobqdftlqgpdbnfppklqwpsb`fel`vp`ofbqnlgfoaol`hdvjgfqbgjlpkbqftlnfmbdbjmnlmfzjnbdfmbnfpzlvmdojmfpobwfq`lolqdqffmeqlmw%bns8tbw`kelq`fsqj`fqvofpafdjmbewfqujpjwjppvfbqfbpafoltjmgf{wlwboklvqpobafosqjmwsqfppavjowojmhppsffgpwvgzwqbgfelvmgpfmpfvmgfqpkltmelqnpqbmdfbggfgpwjoonlufgwbhfmbalufeobpkej{fglewfmlwkfqujftp`kf`hofdboqjufqjwfnprvj`hpkbsfkvnbmf{jpwdljmdnlujfwkjqgabpj`sfb`fpwbdftjgwkoldjmjgfbptqlwfsbdfpvpfqpgqjufpwlqfaqfbhplvwkulj`fpjwfpnlmwktkfqfavjogtkj`kfbqwkelqvnwkqffpslqwsbqwz@oj`holtfqojufp`obppobzfqfmwqzpwlqzvpbdfplvmg`lvqwzlvq#ajqwkslsvswzsfpbssozJnbdfafjmdvssfqmlwfpfufqzpkltpnfbmpf{wqbnbw`kwqb`hhmltmfbqozafdbmpvsfqsbsfqmlqwkofbqmdjufmmbnfgfmgfgWfqnpsbqwpDqlvsaqbmgvpjmdtlnbmebopfqfbgzbvgjlwbhfptkjof-`ln,ojufg`bpfpgbjoz`kjogdqfbwivgdfwklpfvmjwpmfufqaqlbg`lbpw`lufqbssofejofp`z`ofp`fmfsobmp`oj`htqjwfrvffmsjf`ffnbjoeqbnflogfqsklwlojnjw`b`kf`jujop`boffmwfqwkfnfwkfqfwlv`kalvmgqlzbobphfgtklofpjm`fpwl`h#mbnfebjwkkfbqwfnswzleefqp`lsfltmfgnjdkwboavnwkjmhaollgbqqbznbilqwqvpw`bmlmvmjlm`lvmwubojgpwlmfPwzofOldjmkbsszl``vqofew9eqfpkrvjwfejonpdqbgfmffgpvqabmejdkwabpjpklufqbvwl8qlvwf-kwnonj{fgejmboZlvq#pojgfwlsj`aqltmbolmfgqbtmpsojwqfb`kQjdkwgbwfpnbq`krvlwfdllgpOjmhpglvawbpzm`wkvnaboolt`kjfezlvwkmlufo23s{8pfqufvmwjokbmgp@kf`hPsb`frvfqzibnfpfrvbowtj`f3/333Pwbqwsbmfoplmdpqlvmgfjdkwpkjewtlqwkslpwpofbgptffhpbuljgwkfpfnjofpsobmfpnbqwboskbsobmwnbqhpqbwfpsobzp`objnpbofpwf{wppwbqptqlmd?,k0=wkjmd-lqd,nvowjkfbqgSltfqpwbmgwlhfmplojg+wkjpaqjmdpkjsppwbeewqjfg`boopevoozeb`wpbdfmwWkjp#,,..=bgnjmfdzswFufmw26s{8Fnbjowqvf!`qlpppsfmwaoldpal{!=mlwfgofbuf`kjmbpjyfpdvfpw?,k7=qlalwkfbuzwqvf/pfufmdqbmg`qjnfpjdmpbtbqfgbm`fskbpf=?\\\"..fm\\\\VP% 0:8133s{\\\\mbnfobwjmfmilzbib{-bwjlmpnjwkV-P-#klogpsfwfqjmgjbmbu!=`kbjmp`lqf`lnfpgljmdsqjlqPkbqf2::3pqlnbmojpwpibsbmeboopwqjboltmfqbdqff?,k1=bavpfbofqwlsfqb!.,,T`bqgpkjoopwfbnpSklwlwqvwk`ofbm-sks<pbjmwnfwboolvjpnfbmwsqlleaqjfeqlt!=dfmqfwqv`hollhpUbovfEqbnf-mfw,..=\\t?wqz#x\\tubq#nbhfp`lpwpsobjmbgvowrvfpwwqbjmobalqkfosp`bvpfnbdj`nlwlqwkfjq163s{ofbpwpwfsp@lvmw`lvogdobpppjgfpevmgpklwfobtbqgnlvwknlufpsbqjpdjufpgvw`kwf{bpeqvjwmvoo/\\u007F\\u007FX^8wls!=\\t?\\\"..SLPW!l`fbm?aq,=eollqpsfbhgfswk#pjyfabmhp`bw`k`kbqw13s{8bojdmgfboptlvog63s{8vqo>!sbqhpnlvpfNlpw#---?,bnlmdaqbjmalgz#mlmf8abpfg`bqqzgqbewqfefqsbdf\\\\klnf-nfwfqgfobzgqfbnsqlufiljmw?,wq=gqvdp?\\\"..#bsqjojgfboboofmf{b`welqwk`lgfpoldj`Ujft#pffnpaobmhslqwp#+133pbufg\\\\ojmhdlbopdqbmwdqffhklnfpqjmdpqbwfg03s{8tklpfsbqpf+*8!#Aol`hojmv{ilmfpsj{fo$*8!=*8je+.ofewgbujgklqpfEl`vpqbjpfal{fpWqb`hfnfmw?,fn=abq!=-pq`>wltfqbow>!`baofkfmqz17s{8pfwvsjwbozpkbqsnjmlqwbpwftbmwpwkjp-qfpfwtkffodjqop,`pp,233&8`ovappwveeajaofulwfp#2333hlqfb~*8\\u000E\\tabmgprvfvf>#x~8;3s{8`hjmdx\\u000E\\t\\n\\nbkfbg`ol`hjqjpkojhf#qbwjlpwbwpElqn!zbkll*X3^8Balvwejmgp?,k2=gfavdwbphpVQO#>`foop~*+*821s{8sqjnfwfoopwvqmp3{533-isd!psbjmafb`kwb{fpnj`qlbmdfo..=?,djewppwfuf.ojmhalgz-~*8\\t\\nnlvmw#+2::EBR?,qldfqeqbmh@obpp1;s{8effgp?k2=?p`lwwwfpwp11s{8gqjmh*#\\u007F\\u007F#oftjppkboo 30:8#elq#olufgtbpwf33s{8ib9\\u000Fnpjnlm?elmwqfsoznffwpvmwfq`kfbswjdkwAqbmg*#\\\">#gqfpp`ojspqllnplmhfznlajonbjm-Mbnf#sobwfevmmzwqffp`ln,!2-isdtnlgfsbqbnPWBQWofew#jggfm/#132*8\\t~\\telqn-ujqvp`kbjqwqbmptlqpwSbdfpjwjlmsbw`k?\\\"..\\tl.`b`ejqnpwlvqp/333#bpjbmj((*xbglaf$*X3^jg>23alwk8nfmv#-1-nj-smd!hfujm`lb`k@kjogaqv`f1-isdVQO*(-isd\\u007Fpvjwfpoj`fkbqqz213!#ptffwwq=\\u000E\\tmbnf>gjfdlsbdf#ptjpp..=\\t\\t eee8!=Old-`ln!wqfbwpkffw*#%%#27s{8poffsmwfmwejofgib9\\u000Fojg>!`Mbnf!tlqpfpklwp.al{.gfowb\\t%ow8afbqp97;Y?gbwb.qvqbo?,b=#psfmgabhfqpklsp>#!!8sks!=`wjlm20s{8aqjbmkfoolpjyf>l>&1E#iljmnbzaf?jnd#jnd!=/#eipjnd!#!*X3^NWlsAWzsf!mftozGbmph`yf`kwqbjohmltp?,k6=ebr!=yk.`m23*8\\t.2!*8wzsf>aovfpwqvozgbujp-ip$8=\\u000E\\t?\\\"pwffo#zlv#k1=\\u000E\\telqn#ifpvp233&#nfmv-\\u000E\\t\\n\\u000E\\ttbofpqjphpvnfmwggjmda.ojhwfb`kdje!#ufdbpgbmphffpwjpkrjspvlnjplaqfgfpgffmwqfwlglpsvfgfb/]lpfpw/Mwjfmfkbpwblwqlpsbqwfglmgfmvfulkb`fqelqnbnjpnlnfilqnvmglbrv/Ag/Abpp/_olbzvgbef`kbwlgbpwbmwlnfmlpgbwlplwqbppjwjlnv`klbklqbovdbqnbzlqfpwlpklqbpwfmfqbmwfpelwlpfpwbpsb/Apmvfubpbovgelqlpnfgjlrvjfmnfpfpslgfq`kjofpfq/Muf`fpgf`jqilp/Efpwbqufmwbdqvslkf`klfoolpwfmdlbnjdl`lpbpmjufodfmwfnjpnbbjqfpivojlwfnbpkb`jbebulqivmjlojaqfsvmwlavfmlbvwlqbaqjoavfmbwf{wlnbqylpbafqojpwbovfdl`/_nlfmfqlivfdlsfq/Vkbafqfpwlzmvm`bnvifqubolqevfqbojaqldvpwbjdvboulwlp`bplpdv/Absvfglplnlpbujplvpwfggfafmml`kfavp`bebowbfvqlppfqjfgj`kl`vqpl`obuf`bpbpof/_msobylobqdllaqbpujpwbbslzlivmwlwqbwbujpwl`qfbq`bnslkfnlp`jm`l`bqdlsjplplqgfmkb`fm/Mqfbgjp`lsfgql`fq`bsvfgbsbsfonfmlq/Vwjo`obqlilqdf`boofslmfqwbqgfmbgjfnbq`bpjdvffoobppjdol`l`kfnlwlpnbgqf`obpfqfpwlmj/]lrvfgbsbpbqabm`lkjilpujbifsbaol/Epwfujfmfqfjmlgfibqelmgl`bmbomlqwfofwqb`bvpbwlnbqnbmlpovmfpbvwlpujoobufmglsfpbqwjslpwfmdbnbq`loofubsbgqfvmjglubnlpylmbpbnalpabmgbnbqjbbavplnv`kbpvajqqjlibujujqdqbgl`kj`bboo/Ailufmgj`kbfpwbmwbofppbojqpvfolsfplpejmfpoobnbavp`l/Epwboofdbmfdqlsobybkvnlqsbdbqivmwbglaofjpobpalopbab/]lkbaobov`kb/mqfbgj`fmivdbqmlwbpuboofboo/M`bqdbglolqbabilfpw/Edvpwlnfmwfnbqjlejqnb`lpwlej`kbsobwbkldbqbqwfpofzfpbrvfonvpflabpfpsl`lpnjwbg`jfol`kj`lnjfgldbmbqpbmwlfwbsbgfafpsobzbqfgfppjfwf`lqwf`lqfbgvgbpgfpflujfilgfpfbbdvbp%rvlw8glnbjm`lnnlmpwbwvpfufmwpnbpwfqpzpwfnb`wjlmabmmfqqfnlufp`qloovsgbwfdolabonfgjvnejowfqmvnafq`kbmdfqfpvowsvaoj`p`qffm`kllpfmlqnbowqbufojppvfpplvq`fwbqdfwpsqjmdnlgvofnlajofptjw`ksklwlpalqgfqqfdjlmjwpfoepl`jbob`wjuf`lovnmqf`lqgelooltwjwof=fjwkfqofmdwkebnjozeqjfmgobzlvwbvwklq`qfbwfqfujftpvnnfqpfqufqsobzfgsobzfqf{sbmgsloj`zelqnbwglvaofsljmwppfqjfpsfqplmojujmdgfpjdmnlmwkpelq`fpvmjrvftfjdkwsflsoffmfqdzmbwvqfpfbq`kejdvqfkbujmd`vpwlnleepfwofwwfqtjmgltpvanjwqfmgfqdqlvspvsolbgkfbowknfwklgujgflpp`klloevwvqfpkbgltgfabwfubovfpLaif`wlwkfqpqjdkwpofbdvf`kqlnfpjnsofmlwj`fpkbqfgfmgjmdpfbplmqfslqwlmojmfprvbqfavwwlmjnbdfpfmbaofnlujmdobwfpwtjmwfqEqbm`fsfqjlgpwqlmdqfsfbwOlmglmgfwbjoelqnfggfnbmgpf`vqfsbppfgwlddofsob`fpgfuj`fpwbwj``jwjfppwqfbnzfooltbwwb`hpwqffweojdkwkjggfmjmel!=lsfmfgvpfevouboofz`bvpfpofbgfqpf`qfwpf`lmggbnbdfpslqwpf{`fswqbwjmdpjdmfgwkjmdpfeef`wejfogppwbwfpleej`fujpvbofgjwlqulovnfQfslqwnvpfvnnlujfpsbqfmwb``fppnlpwoznlwkfq!#jg>!nbqhfwdqlvmg`kbm`fpvqufzafelqfpznalonlnfmwpsff`knlwjlmjmpjgfnbwwfq@fmwfqlaif`wf{jpwpnjggofFvqlsfdqltwkofdb`znbmmfqfmlvdk`bqffqbmptfqlqjdjmslqwbo`ojfmwpfof`wqbmgln`olpfgwlsj`p`lnjmdebwkfqlswjlmpjnsozqbjpfgfp`bsf`klpfm`kvq`kgfejmfqfbplm`lqmfqlvwsvwnfnlqzjeqbnfsloj`fnlgfopMvnafqgvqjmdleefqppwzofphjoofgojpwfg`boofgpjoufqnbqdjmgfofwfafwwfqaqltpfojnjwpDolabopjmdoftjgdfw`fmwfqavgdfwmltqbs`qfgjw`objnpfmdjmfpbefwz`klj`fpsjqjw.pwzofpsqfbgnbhjmdmffgfgqvppjbsofbpff{wfmwP`qjswaqlhfmbooltp`kbqdfgjujgfeb`wlqnfnafq.abpfgwkflqz`lmejdbqlvmgtlqhfgkfosfg@kvq`kjnsb`wpklvogbotbzpoldl!#alwwlnojpw!=*xubq#sqfej{lqbmdfKfbgfq-svpk+`lvsofdbqgfmaqjgdfobvm`kQfujftwbhjmdujpjlmojwwofgbwjmdAvwwlmafbvwzwkfnfpelqdlwPfbq`kbm`klqbonlpwolbgfg@kbmdfqfwvqmpwqjmdqfolbgNlajofjm`lnfpvssozPlvq`flqgfqpujftfg%maps8`lvqpfBalvw#jpobmg?kwno#`llhjfmbnf>!bnbylmnlgfqmbguj`fjm?,b=9#Wkf#gjboldklvpfpAFDJM#Nf{j`lpwbqwp`fmwqfkfjdkwbggjmdJpobmgbppfwpFnsjqfP`kllofeelqwgjqf`wmfbqoznbmvboPfof`w-\\t\\tLmfiljmfgnfmv!=SkjojsbtbqgpkbmgofjnslqwLeej`fqfdbqgphjoopmbwjlmPslqwpgfdqfftffhoz#+f-d-afkjmggl`wlqolddfgvmjwfg?,a=?,afdjmpsobmwpbppjpwbqwjpwjppvfg033s{\\u007F`bmbgbbdfm`zp`kfnfqfnbjmAqbyjopbnsofoldl!=afzlmg.p`bofb``fswpfqufgnbqjmfEllwfq`bnfqb?,k2=\\t\\\\elqn!ofbufppwqfpp!#,=\\u000E\\t-dje!#lmolbgolbgfqL{elqgpjpwfqpvqujuojpwfmefnbofGfpjdmpjyf>!bssfbowf{w!=ofufopwkbmhpkjdkfqelq`fgbmjnbobmzlmfBeqj`bbdqffgqf`fmwSflsof?aq#,=tlmgfqsqj`fpwvqmfg\\u007F\\u007F#x~8nbjm!=jmojmfpvmgbztqbs!=ebjofg`fmpvpnjmvwfafb`lmrvlwfp263s{\\u007Ffpwbwfqfnlwffnbjo!ojmhfgqjdkw8pjdmboelqnbo2-kwnopjdmvssqjm`feolbw9-smd!#elqvn-B``fppsbsfqpplvmgpf{wfmgKfjdkwpojgfqVWE.;!%bns8#Afelqf-#TjwkpwvgjlltmfqpnbmbdfsqlejwiRvfqzbmmvbosbqbnpalvdkwebnlvpdlldofolmdfqj((*#xjpqbfopbzjmdgf`jgfklnf!=kfbgfqfmpvqfaqbm`ksjf`fpaol`h8pwbwfgwls!=?qb`jmdqfpjyf..%dw8sb`jwzpf{vboavqfbv-isd!#23/333lawbjmwjwofpbnlvmw/#Jm`-`lnfgznfmv!#ozqj`pwlgbz-jmgffg`lvmwz\\\\oldl-EbnjozollhfgNbqhfwopf#jeSobzfqwvqhfz*8ubq#elqfpwdjujmdfqqlqpGlnbjm~fopfxjmpfqwAold?,ellwfqoldjm-ebpwfqbdfmwp?algz#23s{#3sqbdnbeqjgbzivmjlqgloobqsob`fg`lufqpsovdjm6/333#sbdf!=alpwlm-wfpw+bubwbqwfpwfg\\\\`lvmwelqvnpp`kfnbjmgf{/ejoofgpkbqfpqfbgfqbofqw+bssfbqPvanjwojmf!=algz!=\\t)#WkfWklvdkpffjmdifqpfzMftp?,ufqjezf{sfqwjmivqztjgwk>@llhjfPWBQW#b`qlpp\\\\jnbdfwkqfbgmbwjufsl`hfwal{!=\\tPzpwfn#Gbujg`bm`fqwbaofpsqlufgBsqjo#qfboozgqjufqjwfn!=nlqf!=albqgp`lolqp`bnsvpejqpw#\\u007F\\u007F#X^8nfgjb-dvjwbqejmjpktjgwk9pkltfgLwkfq#-sks!#bppvnfobzfqptjoplmpwlqfpqfojfeptfgfm@vpwlnfbpjoz#zlvq#Pwqjmd\\t\\tTkjowbzolq`ofbq9qfplqweqfm`kwklvdk!*#(#!?algz=avzjmdaqbmgpNfnafqmbnf!=lssjmdpf`wlq6s{8!=upsb`fslpwfqnbilq#`leeffnbqwjmnbwvqfkbssfm?,mbu=hbmpbpojmh!=Jnbdfp>ebopftkjof#kpsb`f3%bns8#\\t\\tJm##sltfqSlophj.`lolqilqgbmAlwwlnPwbqw#.`lvmw1-kwnomftp!=32-isdLmojmf.qjdkwnjoofqpfmjlqJPAM#33/333#dvjgfpubovf*f`wjlmqfsbjq-{no!##qjdkwp-kwno.aol`hqfdF{s9klufqtjwkjmujqdjmsklmfp?,wq=\\u000Evpjmd#\\t\\nubq#=$*8\\t\\n?,wg=\\t?,wq=\\tabkbpbaqbpjodbofdlnbdzbqslophjpqsphj4]4C5d\\bTA\\nzk\\u000BBl\\bQ\\u007F\\u000BUm\\u0005Gx\\bSM\\nmC\\bTA\\twQ\\nd}\\bW@\\bTl\\bTF\\ti@\\tcT\\u000BBM\\u000B|j\\u0004BV\\tqw\\tcC\\bWI\\npa\\tfM\\n{Z\\u0005{X\\bTF\\bVV\\bVK\\t\\u007Fm\\u0004kF\\t[]\\bPm\\bTv\\nsI\\u000Bpg\\t[I\\bQp\\u0004mx\\u000B_W\\n^M\\npe\\u000BQ}\\u000BGu\\nel\\npe\\u0004Ch\\u0004BV\\bTA\\tSo\\nzk\\u000BGL\\u000BxD\\nd[\\u0005Jz\\u0005MY\\bQp\\u0004li\\nfl\\npC\\u0005{B\\u0005Nt\\u000BwT\\ti_\\bTg\\u0004QQ\\n|p\\u000BXN\\bQS\\u000BxD\\u0004QC\\bWZ\\tpD\\u000BVS\\bTW\\u0005Nt\\u0004Yh\\nzu\\u0004Kj\\u0005N}\\twr\\tHa\\n_D\\tj`\\u000BQ}\\u000BWp\\nxZ\\u0004{c\\tji\\tBU\\nbD\\u0004a|\\tTn\\tpV\\nZd\\nmC\\u000BEV\\u0005{X\\tc}\\tTo\\bWl\\bUd\\tIQ\\tcg\\u000Bxs\\nXW\\twR\\u000Bek\\tc}\\t]y\\tJn\\nrp\\neg\\npV\\nz\\\\\\u0005{W\\npl\\nz\\\\\\nzU\\tPc\\t`{\\bV@\\nc|\\bRw\\ti_\\bVb\\nwX\\tHv\\u0004Su\\bTF\\u000B_W\\u000BWs\\u000BsI\\u0005m\\u007F\\nTT\\ndc\\tUS\\t}f\\tiZ\\bWz\\tc}\\u0004MD\\tBe\\tiD\\u000B@@\\bTl\\bPv\\t}t\\u0004Sw\\u0004M`\\u000BnU\\tkW\\u000Bed\\nqo\\u000BxY\\tA|\\bTz\\u000By`\\u0004BR\\u0004BM\\tia\\u0004XU\\nyu\\u0004n^\\tfL\\tiI\\nXW\\tfD\\bWz\\bW@\\tyj\\t\\u007Fm\\tav\\tBN\\u000Bb\\\\\\tpD\\bTf\\nY[\\tJn\\bQy\\t[^\\u000BWc\\u000Byu\\u0004Dl\\u0004CJ\\u000BWj\\u000BHR\\t`V\\u000BuW\\tQy\\np@\\u000BGu\\u0005pl\\u0004Jm\\bW[\\nLP\\nxC\\n`m\\twQ\\u0005ui\\u0005\\u007FR\\nbI\\twQ\\tBZ\\tWV\\u0004BR\\npg\\tcg\\u0005ti\\u0004CW\\n_y\\tRg\\bQa\\u000BQB\\u000BWc\\nYb\\u0005le\\ngE\\u0004Su\\nL[\\tQ\\u007F\\tea\\tdj\\u000B]W\\nb~\\u0004M`\\twL\\bTV\\bVH\\nt\\u007F\\npl\\t|b\\u0005s_\\bU|\\bTa\\u0004oQ\\u0005lv\\u0004Sk\\u0004M`\\bTv\\u000BK}\\nfl\\tcC\\u0004oQ\\u0004BR\\tHk\\t|d\\bQp\\tHK\\tBZ\\u000BHR\\bPv\\u000BLx\\u000BEZ\\bT\\u007F\\bTv\\tiD\\u0005oD\\u0005MU\\u000BwB\\u0004Su\\u0005k`\\u0004St\\ntC\\tPl\\tKg\\noi\\tjY\\u000BxY\\u0004h}\\nzk\\bWZ\\t\\u007Fm\\u000Be`\\tTB\\tfE\\nzk\\t`z\\u0004Yh\\nV|\\tHK\\tAJ\\tAJ\\bUL\\tp\\\\\\tql\\nYc\\u0004Kd\\nfy\\u0004Yh\\t[I\\u000BDg\\u0004Jm\\n]n\\nlb\\bUd\\n{Z\\tlu\\tfs\\u0004oQ\\bTW\\u0004Jm\\u000BwB\\tea\\u0004Yh\\u0004BC\\tsb\\tTn\\nzU\\n_y\\u000BxY\\tQ]\\ngw\\u0004mt\\tO\\\\\\ntb\\bWW\\bQy\\tmI\\tV[\\ny\\\\\\naB\\u000BRb\\twQ\\n]Q\\u0004QJ\\bWg\\u000BWa\\bQj\\ntC\\bVH\\nYm\\u000Bxs\\bVK\\nel\\bWI\\u000BxY\\u0004Cq\\ntR\\u000BHV\\bTl\\bVw\\tay\\bQa\\bVV\\t}t\\tdj\\nr|\\tp\\\\\\twR\\n{i\\nTT\\t[I\\ti[\\tAJ\\u000Bxs\\u000B_W\\td{\\u000BQ}\\tcg\\tTz\\tA|\\tCj\\u000BLm\\u0005N}\\u0005m\\u007F\\nbK\\tdZ\\tp\\\\\\t`V\\tsV\\np@\\tiD\\twQ\\u000BQ}\\bTf\\u0005ka\\u0004Jm\\u000B@@\\bV`\\tzp\\n@N\\u0004Sw\\tiI\\tcg\\noi\\u0004Su\\bVw\\u0004lo\\u0004Cy\\tc}\\u000Bb\\\\\\tsU\\u0004BA\\bWI\\bTf\\nxS\\tVp\\nd|\\bTV\\u000BbC\\tNo\\u0005Ju\\nTC\\t|`\\n{Z\\tD]\\bU|\\tc}\\u0005lm\\bTl\\tBv\\tPl\\tc}\\bQp\\t\\u007Fm\\nLk\\tkj\\n@N\\u0004Sb\\u0004KO\\tj_\\tp\\\\\\nzU\\bTl\\bTg\\bWI\\tcf\\u0004XO\\bWW\\ndz\\u0004li\\tBN\\nd[\\bWO\\u0004MD\\u000BKC\\tdj\\tI_\\bVV\\ny\\\\\\u000BLm\\u0005xl\\txB\\tkV\\u000Bb\\\\\\u000BJW\\u000BVS\\tVx\\u000BxD\\td{\\u0004MD\\bTa\\t|`\\u000BPz\\u0004R}\\u000BWs\\u0004BM\\nsI\\u0004CN\\bTa\\u0004Jm\\npe\\ti_\\npV\\nrh\\tRd\\tHv\\n~A\\nxR\\u000BWh\\u000BWk\\nxS\\u000BAz\\u000BwX\\nbI\\u0004oQ\\tfw\\nqI\\nV|\\nun\\u0005z\\u007F\\u000Bpg\\td\\\\\\u000BoA\\u0005{D\\ti_\\u0005xB\\bT\\u007F\\t`V\\u0005qr\\tTT\\u0004g]\\u0004CA\\u000BuR\\tVJ\\tT`\\npw\\u000BRb\\tI_\\nCx\\u0004Ro\\u000BsI\\u0004Cj\\u0004Kh\\tBv\\tWV\\u0004BB\\u0005oD\\u0005{D\\nhc\\u0004Km\\u000B^R\\tQE\\n{I\\np@\\nc|\\u0005Gt\\tc}\\u0004Dl\\nzU\\u0005qN\\tsV\\u0005k}\\tHh\\u000B|j\\nqo\\u0005u|\\tQ]\\u000Bek\\u0005\\u007FZ\\u0004M`\\u0004St\\npe\\tdj\\bVG\\u000BeE\\t\\u007Fm\\u000BWc\\u0004|I\\n[W\\tfL\\bT\\u007F\\tBZ\\u0004Su\\u000BKa\\u0004Cq\\u0005Nt\\u0004Y[\\nqI\\bTv\\tfM\\ti@\\t}f\\u0004B\\\\\\tQy\\u000BBl\\bWg\\u0004XD\\u0005kc\\u000Bx[\\bVV\\tQ]\\t\\u007Fa\\tPy\\u000BxD\\nfI\\t}f\\u0005oD\\tdj\\tSG\\u0005ls\\t~D\\u0004CN\\n{Z\\t\\\\v\\n_D\\nhc\\u000Bx_\\u0004C[\\tAJ\\nLM\\tVx\\u0004CI\\tbj\\tc^\\tcF\\ntC\\u0004Sx\\twr\\u0004XA\\bU\\\\\\t|a\\u000BK\\\\\\bTV\\bVj\\nd|\\tfs\\u0004CX\\ntb\\bRw\\tVx\\tAE\\tA|\\bT\\u007F\\u0005Nt\\u000BDg\\tVc\\bTl\\u0004d@\\npo\\t\\u007FM\\tcF\\npe\\tiZ\\tBo\\bSq\\nfH\\u0004l`\\bTx\\bWf\\tHE\\u000BF{\\tcO\\tfD\\nlm\\u000BfZ\\nlm\\u000BeU\\tdG\\u0004BH\\bTV\\tSi\\u0005MW\\nwX\\nz\\\\\\t\\\\c\\u0004CX\\nd}\\tl}\\bQp\\bTV\\tF~\\bQ\\u007F\\t`i\\ng@\\u0005nO\\bUd\\bTl\\nL[\\twQ\\tji\\ntC\\t|J\\nLU\\naB\\u000BxY\\u0004Kj\\tAJ\\u0005uN\\ti[\\npe\\u0004Sk\\u000BDg\\u000Bx]\\bVb\\bVV\\nea\\tkV\\nqI\\bTa\\u0004Sk\\nAO\\tpD\\ntb\\nts\\nyi\\bVg\\ti_\\u000B_W\\nLk\\u0005Nt\\tyj\\tfM\\u0004R\\u007F\\tiI\\bTl\\u000BwX\\tsV\\u000BMl\\nyu\\tAJ\\bVj\\u0004KO\\tWV\\u000BA}\\u000BW\\u007F\\nrp\\tiD\\u000B|o\\u0005lv\\u000BsI\\u0004BM\\td~\\tCU\\bVb\\u0004eV\\npC\\u000BwT\\tj`\\tc}\\u000Bxs\\u000Bps\\u000Bvh\\tWV\\u000BGg\\u000BAe\\u000BVK\\u000B]W\\trg\\u000BWc\\u0005F`\\tBr\\u000Bb\\\\\\tdZ\\bQp\\nqI\\u0004kF\\nLk\\u000BAR\\bWI\\bTg\\tbs\\tdw\\n{L\\n_y\\tiZ\\bTA\\tlg\\bVV\\bTl\\tdk\\n`k\\ta{\\ti_\\u0005{A\\u0005wj\\twN\\u000B@@\\bTe\\ti_\\n_D\\twL\\nAH\\u000BiK\\u000Bek\\n[]\\tp_\\tyj\\bTv\\tUS\\t[r\\n{I\\nps\\u0005Gt\\u000BVK\\npl\\u0004S}\\u000BWP\\t|d\\u0004MD\\u000BHV\\bT\\u007F\\u0004R}\\u0004M`\\bTV\\bVH\\u0005lv\\u0004Ch\\bW[\\u0004Ke\\tR{\\u000B^R\\tab\\tBZ\\tVA\\tB`\\nd|\\nhs\\u0004Ke\\tBe\\u0004Oi\\tR{\\td\\\\\\u0005nB\\bWZ\\tdZ\\tVJ\\u0005Os\\t\\u007Fm\\u0004uQ\\u000BhZ\\u0004Q@\\u0004QQ\\nfI\\bW[\\u0004B\\\\\\u0004li\\nzU\\nMd\\u0004M`\\nxS\\bVV\\n\\\\}\\u000BxD\\t\\u007Fm\\bTp\\u0004IS\\nc|\\tkV\\u0005i~\\tV{\\u000BhZ\\t|b\\bWt\\n@R\\u000BoA\\u000BnU\\bWI\\tea\\tB`\\tiD\\tc}\\tTz\\u0004BR\\u000BQB\\u0005Nj\\tCP\\t[I\\bTv\\t`W\\u0005uN\\u000Bpg\\u000Bpg\\u000BWc\\tiT\\tbs\\twL\\tU_\\tc\\\\\\t|h\\u000BKa\\tNr\\tfL\\nq|\\nzu\\nz\\\\\\tNr\\bUg\\t|b\\u0004m`\\bTv\\nyd\\nrp\\bWf\\tUX\\u0004BV\\nzk\\nd}\\twQ\\t}f\\u0004Ce\\u000Bed\\bTW\\bSB\\nxU\\tcn\\bTb\\ne\\u007F\\ta\\\\\\tSG\\bU|\\npV\\nN\\\\\\u0004Kn\\u000BnU\\tAt\\tpD\\u000B^R\\u000BIr\\u0004b[\\tR{\\tdE\\u000BxD\\u000BWK\\u000BWA\\bQL\\bW@\\u0004Su\\bUd\\nDM\\tPc\\u0004CA\\u0004Dl\\u0004oQ\\tHs\\u0005wi\\u0004ub\\n\\u007Fa\\bQp\\u0005Ob\\nLP\\bTl\\u0004Y[\\u000BK}\\tAJ\\bQ\\u007F\\u0004n^\\u000BsA\\bSM\\nqM\\bWZ\\n^W\\u000Bz{\\u0004S|\\tfD\\bVK\\bTv\\bPv\\u0004BB\\tCP\\u0004dF\\tid\\u000Bxs\\u0004mx\\u000Bws\\tcC\\ntC\\tyc\\u0005M`\\u000BW\\u007F\\nrh\\bQp\\u000BxD\\u0004\\\\o\\nsI\\u0004_k\\nzu\\u0004kF\\tfD\\u0004Xs\\u0004XO\\tjp\\bTv\\u0004BS\\u0005{B\\tBr\\nzQ\\nbI\\tc{\\u0004BD\\u0004BV\\u0005nO\\bTF\\tca\\u0005Jd\\tfL\\tPV\\tI_\\nlK\\u0004`o\\twX\\npa\\tgu\\bP}\\u0005{^\\bWf\\n{I\\tBN\\npa\\u0004Kl\\u000Bpg\\tcn\\tfL\\u000Bvh\\u0004Cq\\bTl\\u000BnU\\bSq\\u0004Cm\\twR\\bUJ\\npe\\nyd\\nYg\\u0004Cy\\u000BKW\\tfD\\nea\\u0004oQ\\tj_\\tBv\\u0004nM\\u000BID\\bTa\\nzA\\u0005pl\\n]n\\bTa\\tR{\\tfr\\n_y\\bUg\\u0005{X\\u0005kk\\u000BxD\\u0004|I\\u0005xl\\nfy\\u0004Ce\\u000BwB\\nLk\\u000Bd]\\noi\\n}h\\tQ]\\npe\\bVw\\u0004Hk\\u0004OQ\\nzk\\tAJ\\npV\\bPv\\ny\\\\\\tA{\\u0004Oi\\bSB\\u0004XA\\u000BeE\\tjp\\nq}\\tiD\\u0005qN\\u000B^R\\t\\u007Fm\\tiZ\\tBr\\bVg\\noi\\n\\\\X\\tU_\\nc|\\u000BHV\\bTf\\tTn\\u0004\\\\N\\u0004\\\\N\\nuB\\u0005lv\\nyu\\tTd\\bTf\\bPL\\u000B]W\\tdG\\nA`\\nw^\\ngI\\npe\\tdw\\nz\\\\\\u0005ia\\bWZ\\tcF\\u0004Jm\\n{Z\\bWO\\u0004_k\\u0004Df\\u0004RR\\td\\\\\\bVV\\u000Bxs\\u0004BN\\u0005ti\\u0004lm\\tTd\\t]y\\u000BHV\\tSo\\u000B|j\\u0004XX\\tA|\\u000BZ^\\u000BGu\\bTW\\u0005M`\\u0004kF\\u000BhZ\\u000BVK\\tdG\\u000BBl\\tay\\nxU\\u0005qE\\u0005nO\\bVw\\nqI\\u0004CX\\ne\\u007F\\tPl\\bWO\\u000BLm\\tdL\\u0005uH\\u0004Cm\\tdT\\u0004fn\\u000BwB\\u0005ka\\u000BnU\\n@M\\nyT\\tHv\\t\\\\}\\u0004Kh\\td~\\u0004Yh\\u0005k}\\neR\\td\\\\\\bWI\\t|b\\tHK\\tiD\\bTW\\u0005MY\\npl\\bQ_\\twr\\u000BAx\\tHE\\bTg\\bSq\\u0005vp\\u000Bb\\\\\\bWO\\nOl\\nsI\\nfy\\u000BID\\t\\\\c\\n{Z\\n^~\\npe\\nAO\\tTT\\u000Bxv\\u0004k_\\bWO\\u000B|j\\u000BwB\\tQy\\ti@\\tPl\\tHa\\tdZ\\u0005k}\\u0004ra\\tUT\\u000BJc\\u000Bed\\np@\\tQN\\nd|\\tkj\\tHk\\u0004M`\\noi\\twr\\td\\\\\\nlq\\no_\\nlb\\nL[\\tac\\u0004BB\\u0004BH\\u0004Cm\\npl\\tIQ\\bVK\\u000Bxs\\n`e\\u000BiK\\npa\\u0004Oi\\tUS\\bTp\\tfD\\nPG\\u0005kk\\u0004XA\\nz\\\\\\neg\\u000BWh\\twR\\u0005qN\\nqS\\tcn\\u0004lo\\nxS\\n^W\\tBU\\nt\\u007F\\tHE\\tp\\\\\\tfF\\tfw\\bVV\\bW@\\tak\\u000BVK\\u0005ls\\tVJ\\bVV\\u000BeE\\u0004\\\\o\\nyX\\nYm\\u0004M`\\u0005lL\\nd|\\nzk\\tA{\\u0005sE\\twQ\\u0004XT\\nt\\u007F\\tPl\\t]y\\u000BwT\\u0005{p\\u0004MD\\u000Bb\\\\\\tQ]\\u0004Kj\\tJn\\nAH\\u000BRb\\tBU\\tHK\\t\\\\c\\nfI\\u0005m\\u007F\\nqM\\n@R\\tSo\\noi\\u0004BT\\tHv\\n_y\\u0004Kh\\tBZ\\t]i\\bUJ\\tV{\\u0004Sr\\nbI\\u000BGg\\ta_\\bTR\\nfI\\nfl\\t[K\\tII\\u0004S|\\u000BuW\\tiI\\bWI\\nqI\\u000B|j\\u0004BV\\bVg\\bWZ\\u0004kF\\u000Bx]\\bTA\\tab\\tfr\\ti@\\tJd\\tJd\\u000Bps\\nAO\\bTa\\u0005xu\\tiD\\nzk\\t|d\\t|`\\bW[\\tlP\\tdG\\bVV\\u000Bw}\\u000BqO\\ti[\\bQ\\u007F\\bTz\\u000BVF\\twN\\u0005ts\\tdw\\bTv\\neS\\ngi\\tNr\\u0005yS\\npe\\bVV\\bSq\\n`m\\tyj\\tBZ\\u000BWX\\bSB\\tc\\\\\\nUR\\t[J\\tc_\\u0004nM\\bWQ\\u000BAx\\nMd\\tBr\\u0005ui\\u000BxY\\bSM\\u000BWc\\u000B|j\\u000Bxs\\t}Q\\tBO\\bPL\\bWW\\tfM\\nAO\\tPc\\u000BeU\\u0004e^\\bTg\\nqI\\tac\\bPv\\tcF\\u0004oQ\\tQ\\u007F\\u000BhZ\\u0005ka\\nz\\\\\\tiK\\tBU\\n`k\\tCP\\u0004S|\\u0004M`\\n{I\\tS{\\u0004_O\\tBZ\\u0004Zi\\u0004Sk\\tps\\tp\\\\\\nYu\\n]s\\nxC\\bWt\\nbD\\tkV\\u000BGu\\u0005yS\\nqA\\t[r\\neK\\u0004M`\\tdZ\\u0005lL\\bUg\\bTl\\nbD\\tUS\\u000Bb\\\\\\tpV\\ncc\\u0004S\\\\\\tct\\t`z\\bPL\\u000BWs\\nA`\\neg\\bSq\\u0005uE\\u0004CR\\u000BDg\\t`W\\u000Bz{\\u000BWc\\u0004Sk\\u0004Sk\\tbW\\bUg\\tea\\nxZ\\tiI\\tUX\\tVJ\\nqn\\tS{\\u000BRb\\bTQ\\npl\\u0005Gt\\u000BuW\\u0005uj\\npF\\nqI\\tfL\\t[I\\tia\\u0004XO\\nyu\\u000BDg\\u000Bed\\tq{\\u0004VG\\bQ\\u007F\\u0005ka\\tVj\\tkV\\txB\\nd|\\np@\\tQN\\tPc\\tps\\u0004]j\\tkV\\toU\\bTp\\nzU\\u0005nB\\u000BB]\\ta{\\bV@\\n]n\\u0004m`\\tcz\\tR{\\u0004m`\\bQa\\u000BwT\\bSM\\u0005MY\\u0005qN\\tdj\\u0005~s\\u000BQ}\\u0005MY\\u000BMB\\tBv\\twR\\bRg\\u000BQ}\\tql\\u000BKC\\nrm\\u0005xu\\u0004CC\\u000BwB\\u000Bvh\\tBq\\u0004Xq\\npV\\ti_\\u0005Ob\\u0005uE\\nbd\\nqo\\u000B{i\\nC~\\tBL\\u000BeE\\u0005uH\\bVj\\u0004Ey\\u0004Gz\\u000BzR\\u000B{i\\tcf\\n{Z\\n]n\\u0004XA\\u000BGu\\u000BnU\\thS\\u000BGI\\nCc\\tHE\\bTA\\tHB\\u0004BH\\u0004Cj\\nCc\\bTF\\tHE\\nXI\\tA{\\bQ\\u007F\\tc\\\\\\u000BmO\\u000BWX\\nfH\\np@\\u0005MY\\bTF\\nlK\\tBt\\nzU\\tTT\\u0004Km\\u000BwT\\npV\\ndt\\u000ByI\\tVx\\tQ\\u007F\\tRg\\tTd\\nzU\\bRS\\nLM\\twA\\u0004nM\\tTn\\ndS\\t]g\\nLc\\u000BwB\\t}t\\t[I\\tCP\\u0004kX\\u000BFm\\u000BhZ\\u0005m\\u007F\\ti[\\np@\\u000BQ}\\u000BW\\u007F\\t|d\\nMO\\nMd\\tf_\\tfD\\tcJ\\tHz\\u000BRb\\tio\\tPy\\u0004Y[\\nxU\\tct\\u000B@@\\tww\\bPv\\u0004BM\\u0004FF\\ntb\\u0005v|\\u000BKm\\tBq\\tBq\\u0004Kh\\u0004`o\\nZd\\u0004XU\\ti]\\t|`\\tSt\\u0004B\\\\\\bQ\\u007F\\u000B_W\\tTJ\\nqI\\t|a\\tA{\\u000BuP\\u0004MD\\tPl\\nxR\\tfL\\u000Bws\\tc{\\td\\\\\\bV`\\neg\\tHK\\u0005kc\\nd|\\bVV\\ny\\\\\\u0005kc\\ti]\\bVG\\t`V\\tss\\tI_\\tAE\\tbs\\tdu\\nel\\tpD\\u000BW\\u007F\\nqs\\u0005lv\\bSM\\u0004Zi\\u000BVK\\u0005ia\\u000BQB\\tQ\\u007F\\n{Z\\bPt\\u000BKl\\nlK\\nhs\\ndS\\bVK\\u0005mf\\nd^\\tkV\\tcO\\nc|\\bVH\\t\\\\]\\bTv\\bSq\\tmI\\u000BDg\\tVJ\\tcn\\ny\\\\\\bVg\\bTv\\nyX\\bTF\\t]]\\bTp\\noi\\nhs\\u000BeU\\nBf\\tdj\\u0005Mr\\n|p\\t\\\\g\\t]r\\bVb\\u0005{D\\nd[\\u0004XN\\tfM\\tO\\\\\\u0005s_\\tcf\\tiZ\\u0004XN\\u000BWc\\tqv\\n`m\\tU^\\u0005oD\\nd|\\u000BGg\\tdE\\u000Bwf\\u0004lo\\u0004u}\\nd|\\u0005oQ\\t`i\\u0004Oi\\u000BxD\\ndZ\\nCx\\u0004Yw\\nzk\\ntb\\ngw\\tyj\\tB`\\nyX\\u000Bps\\ntC\\u000BpP\\u000Bqw\\bPu\\bPX\\tDm\\npw\\u0005Nj\\tss\\taG\\u000Bxs\\bPt\\noL\\u0004Gz\\tOk\\ti@\\ti]\\u0004eC\\tIQ\\tii\\tdj\\u000B@J\\t|d\\u0005uh\\bWZ\\u000BeU\\u000BnU\\bTa\\tcC\\u0004g]\\nzk\\u0004Yh\\bVK\\nLU\\np@\\ntb\\ntR\\tCj\\u000BNP\\ti@\\bP{\\n\\\\}\\n{c\\nwX\\tfL\\bVG\\tc{\\t|`\\tAJ\\t|C\\tfD\\u0005ln\\t|d\\tbs\\nqI\\u0005{B\\u000BAx\\np@\\nzk\\u000BRb\\u0005Os\\u000BWS\\u0004e^\\u000BD_\\tBv\\u000BWd\\bVb\\u000Bxs\\u000BeE\\bRw\\n]n\\n|p\\u000Bg|\\tfw\\u0005kc\\bTI\\u0005ka\\n\\\\T\\u0004Sp\\tju\\u000Bps\\npe\\u0005u|\\u000BGr\\bVe\\tCU\\u0004]M\\u0004XU\\u000BxD\\bTa\\tIQ\\u000BWq\\tCU\\tam\\tdj\\bSo\\u0004Sw\\u000BnU\\u0004Ch\\tQ]\\u0005s_\\bPt\\tfS\\bTa\\t\\\\}\\n@O\\u0004Yc\\tUZ\\bTx\\npe\\u000BnU\\nzU\\t|}\\tiD\\nz\\\\\\bSM\\u000BxD\\u0004BR\\nzQ\\tQN\\u0004]M\\u0004Yh\\nLP\\u000BFm\\u000BLX\\u0005vc\\u000Bql\\u0005ka\\tHK\\bVb\\ntC\\nCy\\bTv\\nuV\\u0004oQ\\t`z\\t[I\\tB`\\u000BRb\\tyj\\tsb\\u000BWs\\bTl\\tkV\\u000Bed\\ne\\u007F\\u0005lL\\u000BxN\\t\\u007Fm\\nJn\\tjY\\u000BxD\\bVb\\bSq\\u000Byu\\twL\\u000BXL\\bTA\\tpg\\tAt\\tnD\\u0004XX\\twR\\npl\\nhw\\u0005yS\\nps\\tcO\\bW[\\u000B|j\\u0004XN\\tsV\\tp\\\\\\tBe\\nb~\\nAJ\\n]e\\u0005k`\\u0005qN\\tdw\\tWV\\tHE\\u000BEV\\u0005Jz\\tid\\tB`\\tzh\\u0005E]\\tfD\\bTg\\u0005qN\\bTa\\tja\\u0004Cv\\bSM\\nhc\\bUe\\u0005t_\\tie\\u0004g]\\twQ\\nPn\\bVB\\tjw\\bVg\\u000BbE\\tBZ\\u000BRH\\bP{\\tjp\\n\\\\}\\ta_\\tcC\\t|a\\u000BD]\\tBZ\\ti[\\tfD\\u000BxW\\no_\\td\\\\\\n_D\\ntb\\t\\\\c\\tAJ\\nlK\\u0004oQ\\u0004lo\\u000BLx\\u000BM@\\bWZ\\u0004Kn\\u000Bpg\\nTi\\nIv\\n|r\\u000B@}\\u0005Jz\\u0005Lm\\u0005Wh\\u0005k}\\u0005ln\\u000BxD\\n]s\\u0004gc\\u000Bps\\tBr\\bTW\\u000BBM\\u0005tZ\\nBY\\u0004DW\\tjf\\u000BSW\\u0004C}\\nqo\\tdE\\tmv\\tIQ\\bPP\\bUb\\u0005lv\\u0004BC\\nzQ\\t[I\\u000Bgl\\nig\\bUs\\u0004BT\\u000BbC\\bSq\\tsU\\tiW\\nJn\\tSY\\tHK\\trg\\npV\\u000BID\\u000B|j\\u0004KO\\t`S\\t|a`vbmglfmujbqnbgqjgavp`bqjmj`jlwjfnslslqrvf`vfmwbfpwbglsvfgfmivfdlp`lmwqbfpw/Mmmlnaqfwjfmfmsfqejonbmfqbbnjdlp`jvgbg`fmwqlbvmrvfsvfgfpgfmwqlsqjnfqsqf`jlpfd/Vmavfmlpuloufqsvmwlppfnbmbkba/Abbdlpwlmvfulpvmjglp`bqolpfrvjslmj/]lpnv`klpbodvmb`lqqfljnbdfmsbqwjqbqqjabnbq/Abklnaqffnsoflufqgbg`bnajlnv`kbpevfqlmsbpbglo/Amfbsbqf`fmvfubp`vqplpfpwbabrvjfqlojaqlp`vbmwlb``fplnjdvfoubqjlp`vbwqlwjfmfpdqvslppfq/Mmfvqlsbnfgjlpeqfmwfb`fq`bgfn/Mplefqwb`l`kfpnlgfoljwbojbofwqbpbod/Vm`lnsqb`vbofpf{jpwf`vfqslpjfmglsqfmpboofdbqujbifpgjmfqlnvq`jbslgq/Msvfpwlgjbqjlsvfaolrvjfqfnbmvfosqlsjl`qjpjp`jfqwlpfdvqlnvfqwfevfmwf`fqqbqdqbmgffef`wlsbqwfpnfgjgbsqlsjbleqf`fwjfqqbf.nbjoubqjbpelqnbpevwvqllaifwlpfdvjqqjfpdlmlqnbpnjpnlp/Vmj`l`bnjmlpjwjlpqby/_mgfajglsqvfabwlofglwfm/Abifp/Vpfpsfql`l`jmblqjdfmwjfmgb`jfmwl`/Mgjykbaobqpfq/Abobwjmbevfqybfpwjoldvfqqbfmwqbq/E{jwlo/_sfybdfmgbu/Agflfujwbqsbdjmbnfwqlpibujfqsbgqfpe/M`jo`bafyb/Mqfbppbojgbfmu/Alibs/_mbavplpajfmfpwf{wlpoofubqsvfgbmevfqwf`ln/Vm`obpfpkvnbmlwfmjglajoablvmjgbgfpw/Mpfgjwbq`qfbgl<X<W=c=k=n<R<V<\\\\<V<T<W<T=a=n<R<^=m<Y<Y<_<R<S=l<T=n<\\\\<V<Y=e<Y=o<Z<Y<v<\\\\<V<]<Y<[<]=g<W<R<Q<T<~=m<Y<S<R<X<A=n<R=n<R<P=k<Y<P<Q<Y=n<W<Y=n=l<\\\\<[<R<Q<\\\\<_<X<Y<P<Q<Y<x<W=c<s=l<T<Q<\\\\=m<Q<T=i=n<Y<P<V=n<R<_<R<X<^<R=n=n<\\\\<P<M<D<|<P<\\\\=c<K=n<R<^<\\\\=m<^<\\\\<P<Y<P=o<N<\\\\<V<X<^<\\\\<Q<\\\\<P=a=n<T=a=n=o<~<\\\\<P=n<Y=i<S=l<R=n=o=n<Q<\\\\<X<X<Q=c<~<R=n=n=l<T<Q<Y<U<~<\\\\=m<Q<T<P=m<\\\\<P=n<R=n=l=o<]<r<Q<T<P<T=l<Q<Y<Y<r<r<r<W<T=j=a=n<\\\\<r<Q<\\\\<Q<Y<P<X<R<P<P<R<U<X<^<Y<R<Q<R=m=o<X\\fHy\\fIk\\fHU\\fId\\fHy\\fIl\\fHT\\fIk\\fHy\\fHR\\fHy\\fIg\\fHx\\fH\\\\\\fHF\\fH\\\\\\fHD\\fIk\\fHc\\fHy\\fHy\\fHS\\fHA\\fIl\\fHk\\fHT\\fHy\\fH\\\\\\fHH\\fIg\\fHU\\fIg\\fHj\\fHF\\fHU\\fIl\\fHC\\fHU\\fHC\\fHR\\fHH\\fHy\\fHI\\fHRibdqbm\\fHj\\fHp\\fHp\\fIg\\fHi\\fH@\\fHJ\\fIg\\fH{\\fHd\\fHp\\fHR\\fH{\\fHc\\fHU\\fHB\\fHk\\fHD\\fHY\\fHU\\fHC\\fIk\\fHI\\fIk\\fHI\\fIl\\fHt\\fH\\\\\\fHp\\fH@\\fHJ\\fIl\\fHy\\fHd\\fHp\\fIl\\fHY\\fIk\\fHD\\fHd\\fHD\\fHc\\fHU\\fH\\\\\\fHe\\fHT\\fHB\\fIk\\fHy\\fHB\\fHY\\fIg\\fH^\\fIk\\fHT\\fH@\\fHB\\fHd\\fHJ\\fIk\\fH\\u007F\\fH\\\\\\fHj\\fHB\\fH@\\fHT\\fHA\\fH\\\\\\fH@\\fHD\\fHv\\fH^\\fHB\\fHD\\fHj\\fH{\\fHT\\fIl\\fH^\\fIl4U5h5e4I5h5e5k4\\\\4K4N4B4]4U4C4C4K5h5e5k4\\\\5k4Y5d4]4V5f4]5o4K5j5d5h4K4D5f5j4U4]4Z4\\\\5h5o5k5j4K5f5d5i5n4K5h4U5h5f4K5j4K5h5o5j4A4F5e5n4D5h5d4A4E4K4B4]5m5n4[4U4D4C4]5o5j4I4\\\\4K5o5i4K4K4A4C4I5h4K5m5f5k4D4U4Z5o5f5m4D4A4G5d5i5j5d5k5d4O5j4K4@4C4K5h5k4K4_5h5i4U5j4C5h5f4_4U4D4]4Y5h5e5i5j4\\\\4D5k4K4O5j5k5i4G5h5o5j4F4K5h4K4A5f4G5i4Y4]4X4]4A4A5d5h5d5m5f4K4\\\\4K5h5o5h5i4]4E4K5j4F4K5h5m4O4D5d4B4K4Y4O5j4F4K5j5k4K5h5f4U4Z5d5d5n4C4K4D5j4B5f4]4D5j4F5h5o5i4X4K4M5d5k5f4K4D5d5n4Y4Y5d5i4K4]5n5i4O4A4C5j4A5j4U4C5i4]4O5f4K4A4E5o4F4D4C5d5j5f4@4D5i5j5k4F4A4F4@5k4E4_5j4E5f4F5i5o4]4E4V4^4E5j5m4_4D5f4F5h5h5k5h5j4K4F5h5o5n5h4D5h5i4K4U5j5k4O5d5h4X5f4M5j5d4]4O5i4K5m5f5o4D5o5h4\\\\4K4F4]4F4D4D4O5j5k5i4_4K5j5o4D5f4U5m5n4C4A4_5j5h5k5i4X4U4]4O5k5h4X5k4]5n4[4]4[5h4Dsqlejofpfquj`fgfebvowkjnpfoegfwbjop`lmwfmwpvsslqwpwbqwfgnfppbdfpv``fppebpkjlm?wjwof=`lvmwqzb``lvmw`qfbwfgpwlqjfpqfpvowpqvmmjmdsql`fpptqjwjmdlaif`wpujpjaoftfo`lnfbqwj`ofvmhmltmmfwtlqh`lnsbmzgzmbnj`aqltpfqsqjub`zsqlaofnPfquj`fqfpsf`wgjpsobzqfrvfpwqfpfquftfapjwfkjpwlqzeqjfmgplswjlmptlqhjmdufqpjlmnjoojlm`kbmmfotjmglt-bggqfppujpjwfgtfbwkfq`lqqf`wsqlgv`wfgjqf`welqtbqgzlv#`bmqfnlufgpvaif`w`lmwqlobq`kjuf`vqqfmwqfbgjmdojaqbqzojnjwfgnbmbdfqevqwkfqpvnnbqznb`kjmfnjmvwfpsqjubwf`lmwf{wsqldqbnpl`jfwzmvnafqptqjwwfmfmbaofgwqjddfqplvq`fpolbgjmdfofnfmwsbqwmfqejmboozsfqef`wnfbmjmdpzpwfnphffsjmd`vowvqf%rvlw8/ilvqmbosqlif`wpvqeb`fp%rvlw8f{sjqfpqfujftpabobm`fFmdojpk@lmwfmwwkqlvdkSofbpf#lsjmjlm`lmwb`wbufqbdfsqjnbqzujoobdfPsbmjpkdboofqzgf`ojmfnffwjmdnjppjlmslsvobqrvbojwznfbpvqfdfmfqbopsf`jfppfppjlmpf`wjlmtqjwfqp`lvmwfqjmjwjboqfslqwpejdvqfpnfnafqpklogjmdgjpsvwffbqojfqf{sqfppgjdjwbosj`wvqfBmlwkfqnbqqjfgwqbeej`ofbgjmd`kbmdfg`fmwqbouj`wlqzjnbdfp,qfbplmppwvgjfpefbwvqfojpwjmdnvpw#afp`kllopUfqpjlmvpvboozfsjplgfsobzjmddqltjmdlaujlvplufqobzsqfpfmwb`wjlmp?,vo=\\u000E\\ttqbssfqboqfbgz`fqwbjmqfbojwzpwlqbdfbmlwkfqgfphwlsleefqfgsbwwfqmvmvpvboGjdjwbo`bsjwboTfapjwfebjovqf`lmmf`wqfgv`fgBmgqljggf`bgfpqfdvobq#%bns8#bmjnbopqfofbpfBvwlnbwdfwwjmdnfwklgpmlwkjmdSlsvobq`bswjlmofwwfqp`bswvqfp`jfm`foj`fmpf`kbmdfpFmdobmg>2%bns8Kjpwlqz#>#mft#@fmwqbovsgbwfgPsf`jboMfwtlqhqfrvjqf`lnnfmwtbqmjmd@loofdfwlloabqqfnbjmpaf`bvpffof`wfgGfvwp`kejmbm`ftlqhfqprvj`hozafwtffmf{b`wozpfwwjmdgjpfbpfPl`jfwztfbslmpf{kjajw%ow8\\\"..@lmwqlo`obppfp`lufqfglvwojmfbwwb`hpgfuj`fp+tjmgltsvqslpfwjwof>!Nlajof#hjoojmdpkltjmdJwbojbmgqlssfgkfbujozfeef`wp.2$^*8\\t`lmejqn@vqqfmwbgubm`fpkbqjmdlsfmjmdgqbtjmdajoojlmlqgfqfgDfqnbmzqfobwfg?,elqn=jm`ovgftkfwkfqgfejmfgP`jfm`f`bwboldBqwj`ofavwwlmpobqdfpwvmjelqnilvqmfzpjgfabq@kj`bdlklojgbzDfmfqbosbppbdf/%rvlw8bmjnbwfeffojmdbqqjufgsbppjmdmbwvqboqlvdkoz-\\t\\tWkf#avw#mlwgfmpjwzAqjwbjm@kjmfpfob`h#lewqjavwfJqfobmg!#gbwb.eb`wlqpqf`fjufwkbw#jpOjaqbqzkvpabmgjm#eb`wbeebjqp@kbqofpqbgj`boaqlvdkwejmgjmdobmgjmd9obmd>!qfwvqm#ofbgfqpsobmmfgsqfnjvnsb`hbdfBnfqj`bFgjwjlm^%rvlw8Nfppbdfmffg#wlubovf>!`lnsof{ollhjmdpwbwjlmafojfufpnboofq.nlajofqf`lqgptbmw#wlhjmg#leEjqfel{zlv#bqfpjnjobqpwvgjfgnb{jnvnkfbgjmdqbsjgoz`ojnbwfhjmdglnfnfqdfgbnlvmwpelvmgfgsjlmffqelqnvobgzmbpwzklt#wl#Pvsslqwqfufmvff`lmlnzQfpvowpaqlwkfqplogjfqobqdfoz`boojmd-%rvlw8B``lvmwFgtbqg#pfdnfmwQlafqw#feelqwpSb`jej`ofbqmfgvs#tjwkkfjdkw9tf#kbufBmdfofpmbwjlmp\\\\pfbq`kbssojfgb`rvjqfnbppjufdqbmwfg9#ebopfwqfbwfgajddfpwafmfejwgqjujmdPwvgjfpnjmjnvnsfqkbspnlqmjmdpfoojmdjp#vpfgqfufqpfubqjbmw#qlof>!njppjmdb`kjfufsqlnlwfpwvgfmwplnflmff{wqfnfqfpwlqfalwwln9fuloufgboo#wkfpjwfnbsfmdojpktbz#wl##Bvdvpwpznalop@lnsbmznbwwfqpnvpj`bobdbjmpwpfqujmd~*+*8\\u000E\\tsbznfmwwqlvaof`lm`fsw`lnsbqfsbqfmwpsobzfqpqfdjlmpnlmjwlq#$$Wkf#tjmmjmdf{solqfbgbswfgDboofqzsqlgv`fbajojwzfmkbm`f`bqffqp*-#Wkf#`loof`wPfbq`k#bm`jfmwf{jpwfgellwfq#kbmgofqsqjmwfg`lmplofFbpwfqmf{slqwptjmgltp@kbmmfojoofdbomfvwqbopvddfpw\\\\kfbgfqpjdmjmd-kwno!=pfwwofgtfpwfqm`bvpjmd.tfahjw`objnfgIvpwj`f`kbswfquj`wjnpWklnbp#nlyjoobsqlnjpfsbqwjfpfgjwjlmlvwpjgf9ebopf/kvmgqfgLoznsj`\\\\avwwlmbvwklqpqfb`kfg`kqlmj`gfnbmgppf`lmgpsqlwf`wbglswfgsqfsbqfmfjwkfqdqfbwozdqfbwfqlufqboojnsqluf`lnnbmgpsf`jbopfbq`k-tlqpkjsevmgjmdwklvdkwkjdkfpwjmpwfbgvwjojwzrvbqwfq@vowvqfwfpwjmd`ofbqozf{slpfgAqltpfqojafqbo~#`bw`kSqlif`wf{bnsofkjgf+*8EolqjgbbmptfqpbooltfgFnsfqlqgfefmpfpfqjlvpeqffglnPfufqbo.avwwlmEvqwkfqlvw#le#\\\">#mvoowqbjmfgGfmnbqhuljg+3*,boo-ipsqfufmwQfrvfpwPwfskfm\\t\\tTkfm#lapfquf?,k1=\\u000E\\tNlgfqm#sqlujgf!#bow>!alqgfqp-\\t\\tElq#\\t\\tNbmz#bqwjpwpsltfqfgsfqelqnej`wjlmwzsf#lenfgj`bowj`hfwplsslpfg@lvm`jotjwmfppivpwj`fDflqdf#Afodjvn---?,b=wtjwwfqmlwbaoztbjwjmdtbqebqf#Lwkfq#qbmhjmdskqbpfpnfmwjlmpvqujufp`klobq?,s=\\u000E\\t#@lvmwqzjdmlqfgolpp#leivpw#bpDflqdjbpwqbmdf?kfbg=?pwlssfg2$^*8\\u000E\\tjpobmgpmlwbaofalqgfq9ojpw#le`bqqjfg233/333?,k0=\\t#pfufqboaf`lnfppfof`w#tfggjmd33-kwnonlmbq`klee#wkfwfb`kfqkjdkoz#ajloldzojef#lelq#fufmqjpf#le%qbrvl8sovplmfkvmwjmd+wklvdkGlvdobpiljmjmd`jq`ofpElq#wkfBm`jfmwUjfwmbnufkj`ofpv`k#bp`qzpwboubovf#>Tjmgltpfmilzfgb#pnboobppvnfg?b#jg>!elqfjdm#Boo#qjklt#wkfGjpsobzqfwjqfgkltfufqkjggfm8abwwofppffhjmd`bajmfwtbp#mlwollh#bw`lmgv`wdfw#wkfIbmvbqzkbssfmpwvqmjmdb9klufqLmojmf#Eqfm`k#ob`hjmdwzsj`bof{wqb`wfmfnjfpfufm#jedfmfqbwgf`jgfgbqf#mlw,pfbq`kafojfep.jnbdf9ol`bwfgpwbwj`-oldjm!=`lmufqwujlofmwfmwfqfgejqpw!=`jq`vjwEjmobmg`kfnjpwpkf#tbp23s{8!=bp#pv`kgjujgfg?,psbm=tjoo#afojmf#leb#dqfbwnzpwfqz,jmgf{-eboojmdgvf#wl#qbjotbz`loofdfnlmpwfqgfp`fmwjw#tjwkmv`ofbqIftjpk#sqlwfpwAqjwjpkeoltfqpsqfgj`wqfelqnpavwwlm#tkl#tbpof`wvqfjmpwbmwpvj`jgfdfmfqj`sfqjlgpnbqhfwpPl`jbo#ejpkjmd`lnajmfdqbskj`tjmmfqp?aq#,=?az#wkf#MbwvqboSqjub`z`llhjfplvw`lnfqfploufPtfgjpkaqjfeozSfqpjbmpl#nv`k@fmwvqzgfsj`wp`lovnmpklvpjmdp`qjswpmf{w#wlafbqjmdnbssjmdqfujpfgiRvfqz+.tjgwk9wjwof!=wllowjsPf`wjlmgfpjdmpWvqhjpkzlvmdfq-nbw`k+~*+*8\\t\\tavqmjmdlsfqbwfgfdqffpplvq`f>Qj`kbqg`olpfozsobpwj`fmwqjfp?,wq=\\u000E\\t`lolq9 vo#jg>!slppfppqloojmdskzpj`pebjojmdf{f`vwf`lmwfpwojmh#wlGfebvow?aq#,=\\t9#wqvf/`kbqwfqwlvqjpn`obppj`sql`ffgf{sobjm?,k2=\\u000E\\tlmojmf-<{no#ufkfosjmdgjbnlmgvpf#wkfbjqojmffmg#..=*-bwwq+qfbgfqpklpwjmd eeeeeeqfbojyfUjm`fmwpjdmbop#pq`>!,Sqlgv`wgfpsjwfgjufqpfwfoojmdSvaoj`#kfog#jmIlpfsk#wkfbwqfbeef`wp?pwzof=b#obqdfglfpm$wobwfq/#Fofnfmwebuj`lm`qfbwlqKvmdbqzBjqslqwpff#wkfpl#wkbwNj`kbfoPzpwfnpSqldqbnp/#bmg##tjgwk>f%rvlw8wqbgjmdofew!=\\tsfqplmpDlogfm#Beebjqpdqbnnbqelqnjmdgfpwqlzjgfb#le`bpf#lelogfpw#wkjp#jp-pq`#>#`bqwllmqfdjpwq@lnnlmpNvpojnpTkbw#jpjm#nbmznbqhjmdqfufbopJmgffg/frvbooz,pklt\\\\blvwgllqfp`bsf+Bvpwqjbdfmfwj`pzpwfn/Jm#wkf#pjwwjmdKf#boplJpobmgpB`bgfnz\\t\\n\\n?\\\"..Gbmjfo#ajmgjmdaol`h!=jnslpfgvwjojyfBaqbkbn+f{`fswxtjgwk9svwwjmd*-kwno+\\u007F\\u007F#X^8\\tGBWBX#)hjw`kfmnlvmwfgb`wvbo#gjbof`wnbjmoz#\\\\aobmh$jmpwboof{sfqwpje+wzsfJw#bopl%`lsz8#!=Wfqnpalqm#jmLswjlmpfbpwfqmwbohjmd`lm`fqmdbjmfg#lmdljmdivpwjez`qjwj`peb`wlqzjwp#ltmbppbvowjmujwfgobpwjmdkjp#ltmkqfe>!,!#qfo>!gfufols`lm`fqwgjbdqbngloobqp`ovpwfqsks<jg>bo`lklo*8~*+*8vpjmd#b=?psbm=ufppfopqfujuboBggqfppbnbwfvqbmgqljgboofdfgjoomfpptbohjmd`fmwfqprvbojeznbw`kfpvmjejfgf{wjm`wGfefmpfgjfg#jm\\t\\n?\\\"..#`vpwlnpojmhjmdOjwwof#Allh#lefufmjmdnjm-ip<bqf#wkfhlmwbhwwlgbz$p-kwno!#wbqdfw>tfbqjmdBoo#Qjd8\\t~*+*8qbjpjmd#Bopl/#`qv`jbobalvw!=gf`obqf..=\\t?p`ejqfel{bp#nv`kbssojfpjmgf{/#p/#avw#wzsf#>#\\t\\u000E\\t?\\\"..wltbqgpQf`lqgpSqjubwfElqfjdmSqfnjfq`klj`fpUjqwvboqfwvqmp@lnnfmwSltfqfgjmojmf8slufqwz`kbnafqOjujmd#ulovnfpBmwklmzoldjm!#QfobwfgF`lmlnzqfb`kfp`vwwjmddqbujwzojef#jm@kbswfq.pkbgltMlwbaof?,wg=\\u000E\\t#qfwvqmpwbgjvntjgdfwpubqzjmdwqbufopkfog#aztkl#bqftlqh#jmeb`vowzbmdvobqtkl#kbgbjqslqwwltm#le\\t\\tPlnf#$`oj`h$`kbqdfphfztlqgjw#tjoo`jwz#le+wkjp*8Bmgqft#vmjrvf#`kf`hfglq#nlqf033s{8#qfwvqm8qpjlm>!sovdjmptjwkjm#kfqpfoePwbwjlmEfgfqboufmwvqfsvaojpkpfmw#wlwfmpjlmb`wqfpp`lnf#wlejmdfqpGvhf#lesflsof/f{soljwtkbw#jpkbqnlmzb#nbilq!9!kwwsjm#kjp#nfmv!=\\tnlmwkozleej`fq`lvm`jodbjmjmdfufm#jmPvnnbqzgbwf#leolzbowzejwmfppbmg#tbpfnsfqlqpvsqfnfPf`lmg#kfbqjmdQvppjbmolmdfpwBoafqwbobwfqbopfw#le#pnboo!=-bssfmggl#tjwkefgfqboabmh#leafmfbwkGfpsjwf@bsjwbodqlvmgp*/#bmg#sfq`fmwjw#eqln`olpjmd`lmwbjmJmpwfbgejewffmbp#tfoo-zbkll-qfpslmgejdkwfqlap`vqfqfeof`wlqdbmj`>#Nbwk-fgjwjmdlmojmf#sbggjmdb#tkloflmfqqlqzfbq#lefmg#le#abqqjfqtkfm#jwkfbgfq#klnf#leqfpvnfgqfmbnfgpwqlmd=kfbwjmdqfwbjmp`olvgeqtbz#le#Nbq`k#2hmltjmdjm#sbqwAfwtffmofpplmp`olpfpwujqwvboojmhp!=`qlppfgFMG#..=ebnlvp#btbqgfgOj`fmpfKfbowk#ebjqoz#tfbowkznjmjnboBeqj`bm`lnsfwfobafo!=pjmdjmdebqnfqpAqbpjo*gjp`vppqfsob`fDqfdlqzelmw#`lsvqpvfgbssfbqpnbhf#vsqlvmgfgalwk#leaol`hfgpbt#wkfleej`fp`lolvqpje+gl`vtkfm#kffmelq`fsvpk+evBvdvpw#VWE.;!=Ebmwbpzjm#nlpwjmivqfgVpvboozebqnjmd`olpvqflaif`w#gfefm`fvpf#le#Nfgj`bo?algz=\\tfujgfmwaf#vpfghfz@lgfpj{wffmJpobnj` 333333fmwjqf#tjgfoz#b`wjuf#+wzsflelmf#`bm`lolq#>psfbhfqf{wfmgpSkzpj`pwfqqbjm?walgz=evmfqboujftjmdnjggof#`qj`hfwsqlskfwpkjewfggl`wlqpQvppfoo#wbqdfw`lnsb`wbodfaqbpl`jbo.avoh#lenbm#bmg?,wg=\\t#kf#ofew*-ubo+*ebopf*8oldj`boabmhjmdklnf#wlmbnjmd#Bqjylmb`qfgjwp*8\\t~*8\\telvmgfqjm#wvqm@loojmpafelqf#Avw#wkf`kbqdfgWjwof!=@bswbjmpsfoofgdlggfppWbd#..=Bggjmd9avw#tbpQf`fmw#sbwjfmwab`h#jm>ebopf%Ojm`lomtf#hmlt@lvmwfqIvgbjpnp`qjsw#bowfqfg$^*8\\t##kbp#wkfvm`ofbqFufmw$/alwk#jmmlw#boo\\t\\t?\\\"..#sob`jmdkbqg#wl#`fmwfqplqw#le`ojfmwppwqffwpAfqmbqgbppfqwpwfmg#wlebmwbpzgltm#jmkbqalvqEqffglniftfoqz,balvw--pfbq`kofdfmgpjp#nbgfnlgfqm#lmoz#lmlmoz#wljnbdf!#ojmfbq#sbjmwfqbmg#mlwqbqfoz#b`qlmzngfojufqpklqwfq33%bns8bp#nbmztjgwk>!,)#?\\\"X@wjwof#>le#wkf#oltfpw#sj`hfg#fp`bsfgvpfp#lesflsofp#Svaoj`Nbwwkftwb`wj`pgbnbdfgtbz#elqobtp#lefbpz#wl#tjmgltpwqlmd##pjnsof~`bw`k+pfufmwkjmelal{tfmw#wlsbjmwfg`jwjyfmJ#glm$wqfwqfbw-#Plnf#tt-!*8\\talnajmdnbjowl9nbgf#jm-#Nbmz#`bqqjfp\\u007F\\u007Fx~8tjtlqh#lepzmlmzngfefbwpebulqfglswj`bosbdfWqbvmofpp#pfmgjmdofew!=?`lnP`lqBoo#wkfiRvfqz-wlvqjpw@obppj`ebopf!#Tjokfonpvavqapdfmvjmfajpklsp-psojw+dolabo#elooltpalgz#lemlnjmbo@lmwb`wpf`vobqofew#wl`kjfeoz.kjggfm.abmmfq?,oj=\\t\\t-#Tkfm#jm#alwkgjpnjppF{solqfbotbzp#ujb#wkfpsb/]lotfoebqfqvojmd#bqqbmdf`bswbjmkjp#plmqvof#lekf#wllhjwpfoe/>3%bns8+`boofgpbnsofpwl#nbhf`ln,sbdNbqwjm#Hfmmfgzb``fswpevoo#lekbmgofgAfpjgfp,,..=?,baof#wlwbqdfwpfppfm`fkjn#wl#jwp#az#`lnnlm-njmfqbowl#wbhftbzp#wlp-lqd,obgujpfgsfmbowzpjnsof9je#wkfzOfwwfqpb#pklqwKfqafqwpwqjhfp#dqlvsp-ofmdwkeojdkwplufqobspoltoz#ofppfq#pl`jbo#?,s=\\t\\n\\njw#jmwlqbmhfg#qbwf#levo=\\u000E\\t##bwwfnswsbjq#lenbhf#jwHlmwbhwBmwlmjlkbujmd#qbwjmdp#b`wjufpwqfbnpwqbssfg!*-`pp+klpwjofofbg#wlojwwof#dqlvsp/Sj`wvqf..=\\u000E\\t\\u000E\\t#qltp>!#laif`wjmufqpf?ellwfq@vpwlnU=?_,p`qploujmd@kbnafqpobufqztlvmgfgtkfqfbp\\\">#$vmgelq#boosbqwoz#.qjdkw9Bqbajbmab`hfg#`fmwvqzvmjw#lenlajof.Fvqlsf/jp#klnfqjph#legfpjqfg@ojmwlm`lpw#lebdf#le#af`lnf#mlmf#les%rvlw8Njggof#fbg$*X3@qjwj`ppwvgjlp=%`lsz8dqlvs!=bppfnaonbhjmd#sqfppfgtjgdfw-sp9!#<#qfavjowaz#plnfElqnfq#fgjwlqpgfobzfg@bmlmj`kbg#wkfsvpkjmd`obpp>!avw#bqfsbqwjboAbazolmalwwln#`bqqjfq@lnnbmgjwp#vpfBp#tjwk`lvqpfpb#wkjqggfmlwfpbopl#jmKlvpwlm13s{8!=b``vpfgglvaof#dlbo#leEbnlvp#*-ajmg+sqjfpwp#Lmojmfjm#Ivozpw#(#!d`lmpvowgf`jnbokfosevoqfujufgjp#ufqzq$($jswolpjmd#efnbofpjp#boplpwqjmdpgbzp#lebqqjuboevwvqf#?laif`welq`jmdPwqjmd+!#,=\\t\\n\\nkfqf#jpfm`lgfg-##Wkf#aboollmglmf#az,`lnnlmad`lolqobt#le#Jmgjbmbbuljgfgavw#wkf1s{#0s{irvfqz-bewfq#bsloj`z-nfm#bmgellwfq.>#wqvf8elq#vpfp`qffm-Jmgjbm#jnbdf#>ebnjoz/kwws9,,#%maps8gqjufqpfwfqmbopbnf#bpmlwj`fgujftfqp~*+*8\\t#jp#nlqfpfbplmpelqnfq#wkf#mftjp#ivpw`lmpfmw#Pfbq`ktbp#wkftkz#wkfpkjssfgaq=?aq=tjgwk9#kfjdkw>nbgf#le`vjpjmfjp#wkbwb#ufqz#Bgnjqbo#ej{fg8mlqnbo#NjppjlmSqfpp/#lmwbqjl`kbqpfwwqz#wl#jmubgfg>!wqvf!psb`jmdjp#nlpwb#nlqf#wlwboozeboo#le~*8\\u000E\\t##jnnfmpfwjnf#jmpfw#lvwpbwjpezwl#ejmggltm#wlolw#le#Sobzfqpjm#Ivmfrvbmwvnmlw#wkfwjnf#wlgjpwbmwEjmmjpkpq`#>#+pjmdof#kfos#leDfqnbm#obt#bmgobafofgelqfpwp`llhjmdpsb`f!=kfbgfq.tfoo#bpPwbmofzaqjgdfp,dolabo@qlbwjb#Balvw#X3^8\\t##jw/#bmgdqlvsfgafjmd#b*xwkqltkf#nbgfojdkwfqfwkj`boEEEEEE!alwwln!ojhf#b#fnsolzpojuf#jmbp#pffmsqjmwfqnlpw#leva.ojmhqfif`wpbmg#vpfjnbdf!=pv``ffgeffgjmdMv`ofbqjmelqnbwl#kfosTlnfm$pMfjwkfqNf{j`bmsqlwfjm?wbaof#az#nbmzkfbowkzobtpvjwgfujpfg-svpk+xpfoofqppjnsoz#Wkqlvdk-`llhjf#Jnbdf+logfq!=vp-ip!=#Pjm`f#vmjufqpobqdfq#lsfm#wl\\\"..#fmgojfp#jm$^*8\\u000E\\t##nbqhfwtkl#jp#+!GLN@lnbmbdfglmf#elqwzsfle#Hjmdglnsqlejwpsqlslpfwl#pklt`fmwfq8nbgf#jwgqfppfgtfqf#jmnj{wvqfsqf`jpfbqjpjmdpq`#>#$nbhf#b#pf`vqfgAbswjpwulwjmd#\\t\\n\\nubq#Nbq`k#1dqft#vs@ojnbwf-qfnlufphjoofgtbz#wkf?,kfbg=eb`f#leb`wjmd#qjdkw!=wl#tlqhqfgv`fpkbp#kbgfqf`wfgpklt+*8b`wjlm>allh#lebm#bqfb>>#!kww?kfbgfq\\t?kwno=`lmelqneb`jmd#`llhjf-qfoz#lmklpwfg#-`vpwlnkf#tfmwavw#elqpsqfbg#Ebnjoz#b#nfbmplvw#wkfelqvnp-ellwbdf!=Nlajo@ofnfmwp!#jg>!bp#kjdkjmwfmpf..=?\\\"..efnbof#jp#pffmjnsojfgpfw#wkfb#pwbwfbmg#kjpebpwfpwafpjgfpavwwlm\\\\alvmgfg!=?jnd#Jmelal{fufmwp/b#zlvmdbmg#bqfMbwjuf#`kfbsfqWjnflvwbmg#kbpfmdjmfptlm#wkf+nlpwozqjdkw9#ejmg#b#.alwwlnSqjm`f#bqfb#lenlqf#lepfbq`k\\\\mbwvqf/ofdboozsfqjlg/obmg#lelq#tjwkjmgv`fgsqlujmdnjppjofol`boozBdbjmpwwkf#tbzh%rvlw8s{8!=\\u000E\\tsvpkfg#babmglmmvnfqbo@fqwbjmJm#wkjpnlqf#jmlq#plnfmbnf#jpbmg/#jm`qltmfgJPAM#3.`qfbwfpL`wlafqnbz#mlw`fmwfq#obwf#jmGfefm`ffmb`wfgtjpk#wlaqlbgoz`llojmdlmolbg>jw-#Wkfqf`lufqNfnafqpkfjdkw#bppvnfp?kwno=\\tsflsof-jm#lmf#>tjmgltellwfq\\\\b#dllg#qfhobnblwkfqp/wl#wkjp\\\\`llhjfsbmfo!=Olmglm/gfejmfp`qvpkfgabswjpn`lbpwbopwbwvp#wjwof!#nluf#wlolpw#jmafwwfq#jnsojfpqjuboqzpfqufqp#PzpwfnSfqkbspfp#bmg#`lmwfmgeoltjmdobpwfg#qjpf#jmDfmfpjpujft#leqjpjmd#pffn#wlavw#jm#ab`hjmdkf#tjoodjufm#bdjujmd#`jwjfp-eolt#le#Obwfq#boo#avwKjdktbzlmoz#azpjdm#lekf#glfpgjeefqpabwwfqz%bns8obpjmdofpwkqfbwpjmwfdfqwbhf#lmqfevpfg`boofg#>VP%bnsPff#wkfmbwjufpaz#wkjppzpwfn-kfbg#le9klufq/ofpajbmpvqmbnfbmg#boo`lnnlm,kfbgfq\\\\\\\\sbqbnpKbqubqg,sj{fo-qfnlubopl#olmdqlof#leiljmwozphzp`qbVmj`lgfaq#,=\\u000E\\tBwobmwbmv`ofvp@lvmwz/svqfoz#`lvmw!=fbpjoz#avjog#blm`oj`hb#djufmsljmwfqk%rvlw8fufmwp#fopf#x\\tgjwjlmpmlt#wkf/#tjwk#nbm#tkllqd,Tfalmf#bmg`buboqzKf#gjfgpfbwwof33/333#xtjmgltkbuf#wlje+tjmgbmg#jwpplofoz#n%rvlw8qfmftfgGfwqljwbnlmdpwfjwkfq#wkfn#jmPfmbwlqVp?,b=?Hjmd#leEqbm`jp.sqlgv`kf#vpfgbqw#bmgkjn#bmgvpfg#azp`lqjmdbw#klnfwl#kbufqfobwfpjajojwzeb`wjlmAveebolojmh!=?tkbw#kfeqff#wl@jwz#le`lnf#jmpf`wlqp`lvmwfglmf#gbzmfqulvpprvbqf#~8je+dljm#tkbwjnd!#bojp#lmozpfbq`k,wvfpgbzollpfozPlolnlmpf{vbo#.#?b#kqnfgjvn!GL#MLW#Eqbm`f/tjwk#b#tbq#bmgpf`lmg#wbhf#b#=\\u000E\\t\\u000E\\t\\u000E\\tnbqhfw-kjdktbzglmf#jm`wjujwz!obpw!=laojdfgqjpf#wl!vmgfejnbgf#wl#Fbqoz#sqbjpfgjm#jwp#elq#kjpbwkofwfIvsjwfqZbkll\\\"#wfqnfg#pl#nbmzqfbooz#p-#Wkf#b#tlnbm<ubovf>gjqf`w#qjdkw!#aj`z`ofb`jmd>!gbz#bmgpwbwjmdQbwkfq/kjdkfq#Leej`f#bqf#mltwjnfp/#tkfm#b#sbz#elqlm#wkjp.ojmh!=8alqgfqbqlvmg#bmmvbo#wkf#Mftsvw#wkf-`ln!#wbhjm#wlb#aqjfe+jm#wkfdqlvsp-8#tjgwkfmyznfppjnsof#jm#obwfxqfwvqmwkfqbszb#sljmwabmmjmdjmhp!=\\t+*8!#qfb#sob`f_v330@bbalvw#bwq=\\u000E\\t\\n\\n``lvmw#djufp#b?P@QJSWQbjotbzwkfnfp,wlloal{AzJg+!{kvnbmp/tbw`kfpjm#plnf#je#+tj`lnjmd#elqnbwp#Vmgfq#avw#kbpkbmgfg#nbgf#azwkbm#jmefbq#legfmlwfg,jeqbnfofew#jmulowbdfjm#fb`kb%rvlw8abpf#leJm#nbmzvmgfqdlqfdjnfpb`wjlm#?,s=\\u000E\\t?vpwlnUb8%dw8?,jnslqwplq#wkbwnlpwoz#%bns8qf#pjyf>!?,b=?,kb#`obppsbppjufKlpw#>#TkfwkfqefqwjofUbqjlvp>X^8+ev`bnfqbp,=?,wg=b`wp#bpJm#plnf=\\u000E\\t\\u000E\\t?\\\"lqdbmjp#?aq#,=Afjijmd`bwbo/Lgfvwp`kfvqlsfvfvphbqbdbfjodfpufmphbfpsb/]bnfmpbifvpvbqjlwqbabiln/E{j`ls/Mdjmbpjfnsqfpjpwfnbl`wvaqfgvqbmwfb/]bgjqfnsqfpbnlnfmwlmvfpwqlsqjnfqbwqbu/Epdqb`jbpmvfpwqbsql`fplfpwbglp`bojgbgsfqplmbm/Vnfqlb`vfqgln/Vpj`bnjfnaqllefqwbpbodvmlpsb/Apfpfifnsolgfqf`klbgfn/Mpsqjubglbdqfdbqfmob`fpslpjaofklwfofppfujoobsqjnfql/Vowjnlfufmwlpbq`kjul`vowvqbnvifqfpfmwqbgbbmvm`jlfnabqdlnfq`bgldqbmgfpfpwvgjlnfilqfpefaqfqlgjpf/]lwvqjpnl`/_gjdlslqwbgbfpsb`jlebnjojbbmwlmjlsfqnjwfdvbqgbqbodvmbpsqf`jlpbodvjfmpfmwjglujpjwbpw/Awvol`lml`fqpfdvmgl`lmpfileqbm`jbnjmvwlppfdvmgbwfmfnlpfef`wlpn/Mobdbpfpj/_mqfujpwbdqbmbgb`lnsqbqjmdqfpldbq`/Abb``j/_mf`vbglqrvjfmfpjm`ovplgfafq/Mnbwfqjbklnaqfpnvfpwqbslgq/Abnb/]bmb/Vowjnbfpwbnlplej`jbowbnajfmmjmd/Vmpbovglpslgfnlpnfilqbqslpjwjlmavpjmfppklnfsbdfpf`vqjwzobmdvbdfpwbmgbqg`bnsbjdmefbwvqfp`bwfdlqzf{wfqmbo`kjogqfmqfpfqufgqfpfbq`kf{`kbmdfebulqjwfwfnsobwfnjojwbqzjmgvpwqzpfquj`fpnbwfqjbosqlgv`wpy.jmgf{9`lnnfmwpplewtbqf`lnsofwf`bofmgbqsobwelqnbqwj`ofpqfrvjqfgnlufnfmwrvfpwjlmavjogjmdslojwj`pslppjaofqfojdjlmskzpj`boeffgab`hqfdjpwfqsj`wvqfpgjpbaofgsqlwl`lobvgjfm`fpfwwjmdpb`wjujwzfofnfmwpofbqmjmdbmzwkjmdbapwqb`wsqldqfpplufqujftnbdbyjmff`lmlnj`wqbjmjmdsqfppvqfubqjlvp#?pwqlmd=sqlsfqwzpklssjmdwldfwkfqbgubm`fgafkbujlqgltmolbgefbwvqfgellwaboopfof`wfgObmdvbdfgjpwbm`fqfnfnafqwqb`hjmdsbpptlqgnlgjejfgpwvgfmwpgjqf`wozejdkwjmdmlqwkfqmgbwbabpfefpwjuboaqfbhjmdol`bwjlmjmwfqmfwgqlsgltmsqb`wj`ffujgfm`fevm`wjlmnbqqjbdfqfpslmpfsqlaofnpmfdbwjufsqldqbnpbmbozpjpqfofbpfgabmmfq!=svq`kbpfsloj`jfpqfdjlmbo`qfbwjufbqdvnfmwallhnbqhqfefqqfq`kfnj`bogjujpjlm`booab`hpfsbqbwfsqlif`wp`lmeoj`wkbqgtbqfjmwfqfpwgfojufqznlvmwbjmlawbjmfg>#ebopf8elq+ubq#b``fswfg`bsb`jwz`lnsvwfqjgfmwjwzbjq`qbewfnsolzfgsqlslpfgglnfpwj`jm`ovgfpsqlujgfgklpsjwboufqwj`bo`loobspfbssqlb`ksbqwmfqpoldl!=?bgbvdkwfqbvwklq!#`vowvqboebnjojfp,jnbdfp,bppfnaozsltfqevowfb`kjmdejmjpkfggjpwqj`w`qjwj`bo`dj.ajm,svqslpfpqfrvjqfpfof`wjlmaf`lnjmdsqlujgfpb`bgfnj`f{fq`jpfb`wvbooznfgj`jmf`lmpwbmwb``jgfmwNbdbyjmfgl`vnfmwpwbqwjmdalwwln!=lapfqufg9#%rvlw8f{wfmgfgsqfujlvpPlewtbqf`vpwlnfqgf`jpjlmpwqfmdwkgfwbjofgpojdkwozsobmmjmdwf{wbqfb`vqqfm`zfufqzlmfpwqbjdkwwqbmpefqslpjwjufsqlgv`fgkfqjwbdfpkjssjmdbaplovwfqf`fjufgqfofubmwavwwlm!#ujlofm`fbmztkfqfafmfejwpobvm`kfgqf`fmwozboojbm`felooltfgnvowjsofavoofwjmjm`ovgfgl``vqqfgjmwfqmbo'+wkjp*-qfsvaoj`=?wq=?wg`lmdqfppqf`lqgfgvowjnbwfplovwjlm?vo#jg>!gjp`lufqKlnf?,b=tfapjwfpmfwtlqhpbowklvdkfmwjqfoznfnlqjbonfppbdfp`lmwjmvfb`wjuf!=plnftkbwuj`wlqjbTfpwfqm##wjwof>!Ol`bwjlm`lmwqb`wujpjwlqpGltmolbgtjwklvw#qjdkw!=\\tnfbpvqfptjgwk#>#ubqjbaofjmuloufgujqdjmjbmlqnboozkbssfmfgb``lvmwppwbmgjmdmbwjlmboQfdjpwfqsqfsbqfg`lmwqlopb``vqbwfajqwkgbzpwqbwfdzleej`jbodqbskj`p`qjnjmboslppjaoz`lmpvnfqSfqplmbopsfbhjmdubojgbwfb`kjfufg-isd!#,=nb`kjmfp?,k1=\\t##hfztlqgpeqjfmgozaqlwkfqp`lnajmfglqjdjmbo`lnslpfgf{sf`wfgbgfrvbwfsbhjpwbmeloolt!#ubovbaof?,obafo=qfobwjufaqjmdjmdjm`qfbpfdlufqmlqsovdjmp,Ojpw#le#Kfbgfq!=!#mbnf>!#+%rvlw8dqbgvbwf?,kfbg=\\t`lnnfq`fnbobzpjbgjqf`wlqnbjmwbjm8kfjdkw9p`kfgvof`kbmdjmdab`h#wl#`bwkloj`sbwwfqmp`lolq9# dqfbwfpwpvssojfpqfojbaof?,vo=\\t\\n\\n?pfof`w#`jwjyfmp`olwkjmdtbw`kjmd?oj#jg>!psf`jej``bqqzjmdpfmwfm`f?`fmwfq=`lmwqbpwwkjmhjmd`bw`k+f*plvwkfqmNj`kbfo#nfq`kbmw`bqlvpfosbggjmd9jmwfqjlq-psojw+!ojybwjlmL`wlafq#*xqfwvqmjnsqlufg..%dw8\\t\\t`lufqbdf`kbjqnbm-smd!#,=pvaif`wpQj`kbqg#tkbwfufqsqlabaozqf`lufqzabpfabooivgdnfmw`lmmf`w--`pp!#,=#tfapjwfqfslqwfggfebvow!,=?,b=\\u000E\\tfof`wqj`p`lwobmg`qfbwjlmrvbmwjwz-#JPAM#3gjg#mlw#jmpwbm`f.pfbq`k.!#obmd>!psfbhfqp@lnsvwfq`lmwbjmpbq`kjufpnjmjpwfqqfb`wjlmgjp`lvmwJwbojbml`qjwfqjbpwqlmdoz9#$kwws9$p`qjsw$`lufqjmdleefqjmdbssfbqfgAqjwjpk#jgfmwjezEb`fallhmvnfqlvpufkj`ofp`lm`fqmpBnfqj`bmkbmgojmdgju#jg>!Tjoojbn#sqlujgfq\\\\`lmwfmwb``vqb`zpf`wjlm#bmgfqplmeof{jaof@bwfdlqzobtqfm`f?p`qjsw=obzlvw>!bssqlufg#nb{jnvnkfbgfq!=?,wbaof=Pfquj`fpkbnjowlm`vqqfmw#`bmbgjbm`kbmmfop,wkfnfp,,bqwj`oflswjlmboslqwvdboubovf>!!jmwfqubotjqfofppfmwjwofgbdfm`jfpPfbq`k!#nfbpvqfgwklvpbmgpsfmgjmd%kfoojs8mft#Gbwf!#pjyf>!sbdfMbnfnjggof!#!#,=?,b=kjggfm!=pfrvfm`fsfqplmbolufqeoltlsjmjlmpjoojmljpojmhp!=\\t\\n?wjwof=ufqpjlmppbwvqgbzwfqnjmbojwfnsqlsfmdjmffqpf`wjlmpgfpjdmfqsqlslpbo>!ebopf!Fpsb/]loqfofbpfppvanjw!#fq%rvlw8bggjwjlmpznswlnplqjfmwfgqfplvq`fqjdkw!=?sofbpvqfpwbwjlmpkjpwlqz-ofbujmd##alqgfq>`lmwfmwp`fmwfq!=-\\t\\tPlnf#gjqf`wfgpvjwbaofavodbqjb-pklt+*8gfpjdmfgDfmfqbo#`lm`fswpF{bnsofptjoojbnpLqjdjmbo!=?psbm=pfbq`k!=lsfqbwlqqfrvfpwpb#%rvlw8booltjmdGl`vnfmwqfujpjlm-#\\t\\tWkf#zlvqpfoe@lmwb`w#nj`kjdbmFmdojpk#`lovnajbsqjlqjwzsqjmwjmdgqjmhjmdeb`jojwzqfwvqmfg@lmwfmw#leej`fqpQvppjbm#dfmfqbwf.;;6:.2!jmgj`bwfebnjojbq#rvbojwznbqdjm93#`lmwfmwujftslqw`lmwb`wp.wjwof!=slqwbaof-ofmdwk#fojdjaofjmuloufpbwobmwj`lmolbg>!gfebvow-pvssojfgsbznfmwpdolppbqz\\t\\tBewfq#dvjgbm`f?,wg=?wgfm`lgjmdnjggof!=`bnf#wl#gjpsobzpp`lwwjpkilmbwkbmnbilqjwztjgdfwp-`ojmj`bowkbjobmgwfb`kfqp?kfbg=\\t\\nbeef`wfgpvsslqwpsljmwfq8wlPwqjmd?,pnboo=lhobklnbtjoo#af#jmufpwlq3!#bow>!klojgbzpQfplvq`foj`fmpfg#+tkj`k#-#Bewfq#`lmpjgfqujpjwjmdf{solqfqsqjnbqz#pfbq`k!#bmgqljg!rvj`hoz#nffwjmdpfpwjnbwf8qfwvqm#8`lolq9 #kfjdkw>bssqlubo/#%rvlw8#`kf`hfg-njm-ip!nbdmfwj`=?,b=?,kelqf`bpw-#Tkjof#wkvqpgbzgufqwjpf%fb`vwf8kbp@obppfubovbwflqgfqjmdf{jpwjmdsbwjfmwp#Lmojmf#`lolqbglLswjlmp!`bnsafoo?\\\"..#fmg?,psbm=??aq#,=\\u000E\\t\\\\slsvsp\\u007Fp`jfm`fp/%rvlw8#rvbojwz#Tjmgltp#bppjdmfgkfjdkw9#?a#`obppof%rvlw8#ubovf>!#@lnsbmzf{bnsofp?jeqbnf#afojfufpsqfpfmwpnbqpkboosbqw#le#sqlsfqoz*-\\t\\tWkf#wb{lmlnznv`k#le#?,psbm=\\t!#gbwb.pqwvdv/Fpp`qlooWl#sqlif`w?kfbg=\\u000E\\tbwwlqmfzfnskbpjppslmplqpebm`zal{tlqog$p#tjogojef`kf`hfg>pfppjlmpsqldqbnns{8elmw.#Sqlif`wilvqmbopafojfufgub`bwjlmwklnsplmojdkwjmdbmg#wkf#psf`jbo#alqgfq>3`kf`hjmd?,walgz=?avwwlm#@lnsofwf`ofbqej{\\t?kfbg=\\tbqwj`of#?pf`wjlmejmgjmdpqlof#jm#slsvobq##L`wlafqtfapjwf#f{slpvqfvpfg#wl##`kbmdfplsfqbwfg`oj`hjmdfmwfqjmd`lnnbmgpjmelqnfg#mvnafqp##?,gju=`qfbwjmdlmPvanjwnbqzobmg`loofdfpbmbozwj`ojpwjmdp`lmwb`w-olddfgJmbgujplqzpjaojmdp`lmwfmw!p%rvlw8*p-#Wkjp#sb`hbdfp`kf`hal{pvddfpwpsqfdmbmwwlnlqqltpsb`jmd>j`lm-smdibsbmfpf`lgfabpfavwwlm!=dbnaojmdpv`k#bp#/#tkjof#?,psbm=#njpplvqjpslqwjmdwls92s{#-?,psbm=wfmpjlmptjgwk>!1obyzolbgmlufnafqvpfg#jm#kfjdkw>!`qjsw!=\\t%maps8?,?wq=?wg#kfjdkw91,sqlgv`w`lvmwqz#jm`ovgf#ellwfq!#%ow8\\\"..#wjwof!=?,irvfqz-?,elqn=\\t+\\u000BBl\\bQ\\u007F*+\\u000BUm\\u0005Gx*kqubwphjjwbojbmlqln/Nm(ow/Pqh/Kf4K4]4C5dwbnaj/Emmlwj`jbpnfmpbifpsfqplmbpgfqf`klpmb`jlmbopfquj`jl`lmwb`wlvpvbqjlpsqldqbnbdlajfqmlfnsqfpbpbmvm`jlpubofm`jb`lolnajbgfpsv/Epgfslqwfpsqlzf`wlsqlgv`wls/Vaoj`lmlplwqlpkjpwlqjbsqfpfmwfnjoolmfpnfgjbmwfsqfdvmwbbmwfqjlqqf`vqplpsqlaofnbpbmwjbdlmvfpwqlplsjmj/_mjnsqjnjqnjfmwqbpbn/Eqj`bufmgfglqpl`jfgbgqfpsf`wlqfbojybqqfdjpwqlsbobaqbpjmwfq/Epfmwlm`fpfpsf`jbonjfnaqlpqfbojgbg`/_qglabybqbdlybs/Mdjmbppl`jbofpaolrvfbqdfpwj/_mborvjofqpjpwfnbp`jfm`jbp`lnsofwlufqpj/_m`lnsofwbfpwvgjlps/Vaoj`blaifwjulboj`bmwfavp`bglq`bmwjgbgfmwqbgbpb``jlmfpbq`kjulppvsfqjlqnbzlq/Abbofnbmjbevm`j/_m/Vowjnlpkb`jfmglbrvfoolpfgj`j/_mefqmbmglbnajfmwfeb`fallhmvfpwqbp`ojfmwfpsql`fplpabpwbmwfsqfpfmwbqfslqwbq`lmdqfplsvaoj`bq`lnfq`jl`lmwqbwli/_ufmfpgjpwqjwlw/E`mj`b`lmivmwlfmfqd/Abwqbabibqbpwvqjbpqf`jfmwfvwjojybqalofw/Ampboubglq`lqqf`wbwqbabilpsqjnfqlpmfdl`jlpojafqwbggfwboofpsbmwboobsq/_{jnlbonfq/Abbmjnbofprvj/Emfp`lqby/_mpf``j/_mavp`bmglls`jlmfpf{wfqjlq`lm`fswlwlgbu/Abdbofq/Abfp`qjajqnfgj`jmboj`fm`jb`lmpvowbbpsf`wlp`q/Awj`bg/_obqfpivpwj`jbgfafq/Mmsfq/Alglmf`fpjwbnbmwfmfqsfrvf/]lqf`jajgbwqjavmbowfmfqjef`bm`j/_m`bmbqjbpgfp`bqdbgjufqplpnboolq`bqfrvjfqfw/E`mj`lgfafq/Abujujfmgbejmbmybpbgfobmwfevm`jlmb`lmpfilpgje/A`jo`jvgbgfpbmwjdvbpbubmybgbw/Eqnjmlvmjgbgfpp/Mm`kfy`bnsb/]bplewlmj`qfujpwbp`lmwjfmfpf`wlqfpnlnfmwlpeb`vowbg`q/Egjwlgjufqpbppvsvfpwleb`wlqfppfdvmglpsfrvf/]b<_<R<X<\\\\<Y=m<W<T<Y=m=n=`<]=g<W<R<]=g=n=`=a=n<R<P<y=m<W<T=n<R<_<R<P<Y<Q=c<^=m<Y=i=a=n<R<U<X<\\\\<Z<Y<]=g<W<T<_<R<X=o<X<Y<Q=`=a=n<R=n<]=g<W<\\\\=m<Y<]=c<R<X<T<Q=m<Y<]<Y<Q<\\\\<X<R=m<\\\\<U=n=h<R=n<R<Q<Y<_<R=m<^<R<T=m<^<R<U<T<_=l=g=n<R<Z<Y<^=m<Y<P=m<^<R=b<W<T=d=`=a=n<T=i<S<R<V<\\\\<X<Q<Y<U<X<R<P<\\\\<P<T=l<\\\\<W<T<]<R=n<Y<P=o=i<R=n=c<X<^=o=i=m<Y=n<T<W=b<X<T<X<Y<W<R<P<T=l<Y=n<Y<]=c=m<^<R<Y<^<T<X<Y=k<Y<_<R=a=n<T<P=m=k<Y=n=n<Y<P=g=j<Y<Q=g=m=n<\\\\<W<^<Y<X=`=n<Y<P<Y<^<R<X=g=n<Y<]<Y<^=g=d<Y<Q<\\\\<P<T=n<T<S<\\\\=n<R<P=o<S=l<\\\\<^<W<T=j<\\\\<R<X<Q<\\\\<_<R<X=g<[<Q<\\\\=b<P<R<_=o<X=l=o<_<^=m<Y<U<T<X<Y=n<V<T<Q<R<R<X<Q<R<X<Y<W<\\\\<X<Y<W<Y=m=l<R<V<T=b<Q=c<^<Y=m=`<y=m=n=`=l<\\\\<[<\\\\<Q<\\\\=d<T4K5h5h5k4K5h4F5f4@5i5f4U4B4K4Y4E4K5h4\\\\5f4U5h5f5k4@4C5f4C4K5h4N5j4K5h4]4C4F4A5o5i4Y5m4A4E5o4K5j4F4K5h5h5f5f5o5d5j4X4D5o4E5m5f5k4K4D5j4K4F4A5d4K4M4O5o4G4]4B5h4K5h4K5h4A4D4C5h5f5h4C4]5d4_4K4Z4V4[4F5o5d5j5k5j4K5o4_4K4A4E5j4K4C5f4K5h4[4D4U5h5f5o4X5o4]4K5f5i5o5j5i5j5k4K4X4]5o4E4]4J5f4_5j4X5f4[5i4K4\\\\4K4K5h5m5j4X4D4K4D4F4U4D4]4]4A5i4E5o4K5m4E5f5n5d5h5i4]5o4^5o5h5i4E4O4A5i4C5n5h4D5f5f4U5j5f4Y5d4]4E4[4]5f5n4X4K4]5o4@5d4K5h4O4B4]5e5i4U5j4K4K4D4A4G4U4]5d4Z4D4X5o5h5i4_4@5h4D5j4K5j4B4K5h4C5o4F4K4D5o5h5f4E4D4C5d5j4O5f4Z4K5f5d4@4C5m4]5f5n5o4F4D4F4O5m4Z5h5i4[4D4B4K5o4G4]4D4K4]5o4K5m4Z5h4K4A5h5e5j5m4_5k4O5f4K5i4]4C5d4C4O5j5k4K4C5f5j4K4K5h4K5j5i4U4]4Z4F4U5h5i4C4K4B5h5i5i5o5j\\u0003\\u0003\\u0003\\u0003\\u0003\\u0003\\u0003\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0001\\u0003\\u0001\\u0003\\u0001\\u0003\\u0001\\u0003\\u0007\\u0003\\u0007\\u0003\\u0007\\u0003\\u0007\\u0003\\u0003\\u0002\\u0001\\u0000\\u0007\\u0006\\u0005\\u0004\\u0004\\u0005\\u0006\\u0007\\u0000\\u0001\\u0002\\u0003\\u000B\\n\\t\\b\\u000F\\u000E\\r\\f\\f\\r\\u000E\\u000F\\b\\t\\n\\u000B\\u0013\\u0012\\u0011\\u0010\\u0017\\u0016\\u0015\\u0014\\u0014\\u0015\\u0016\\u0017\\u0010\\u0011\\u0012\\u0013\\u001B\\u001A\\u0019\\u0018\\u001F\\u001E\\u001D\\u001C\\u001C\\u001D\\u001E\\u001F\\u0018\\u0019\\u001A\\u001B\\u0013\\u0013\\u0013\\u0013\\u0003\\u0003\\u0003\\u0003\\u0003\\u0003\\u0003\\u0003\\u0013\\u0013\\u0013\\u0013\\u0002\\u0003\\u0003\\u0003\\u0001\\u0003\\u0003\\u0003\\u0001\\u0003\\u0003\\u0003\\u0002\\u0003\\u0003\\u0003\\u0002\\u0003\\u0003\\u0003\\u0000\\u0003\\u0003\\u0003\\u0013\\u0013\\u0003\\u0002\\u0003\\u0003\\u0003\\u0002\\u0003\\u0003\\u0013\\u0013\\u0003\\u0002\\u0003\\u0003\\u0003\\u000B\\u0003\\u000B\\u0003\\u000B\\u0003\\u000B\\u0003\\u0003\\u0003\\u0002\\u0003\\u0001\\u0003\\u0000\\u0003\\u0007\\u0003\\u0006\\u0003\\u0005\\u0003\\u0004qfplvq`fp`lvmwqjfprvfpwjlmpfrvjsnfmw`lnnvmjwzbubjobaofkjdkojdkwGWG,{kwnonbqhfwjmdhmltofgdfplnfwkjmd`lmwbjmfqgjqf`wjlmpvap`qjafbgufqwjpf`kbqb`wfq!#ubovf>!?,pfof`w=Bvpwqbojb!#`obpp>!pjwvbwjlmbvwklqjwzelooltjmdsqjnbqjozlsfqbwjlm`kboofmdfgfufolsfgbmlmznlvpevm`wjlm#evm`wjlmp`lnsbmjfppwqv`wvqfbdqffnfmw!#wjwof>!slwfmwjbofgv`bwjlmbqdvnfmwppf`lmgbqz`lszqjdkwobmdvbdfpf{`ovpjuf`lmgjwjlm?,elqn=\\u000E\\tpwbwfnfmwbwwfmwjlmAjldqbskz~#fopf#x\\tplovwjlmptkfm#wkf#Bmbozwj`pwfnsobwfpgbmdfqlvppbwfoojwfgl`vnfmwpsvaojpkfqjnslqwbmwsqlwlwzsfjmeovfm`f%qbrvl8?,feef`wjufdfmfqboozwqbmpelqnafbvwjevowqbmpslqwlqdbmjyfgsvaojpkfgsqlnjmfmwvmwjo#wkfwkvnambjoMbwjlmbo#-el`vp+*8lufq#wkf#njdqbwjlmbmmlvm`fgellwfq!=\\tf{`fswjlmofpp#wkbmf{sfmpjufelqnbwjlmeqbnftlqhwfqqjwlqzmgj`bwjlm`vqqfmwoz`obppMbnf`qjwj`jpnwqbgjwjlmfopftkfqfBof{bmgfqbssljmwfgnbwfqjbopaqlbg`bpwnfmwjlmfgbeejojbwf?,lswjlm=wqfbwnfmwgjeefqfmw,gfebvow-Sqfpjgfmwlm`oj`h>!ajldqbskzlwkfqtjpfsfqnbmfmwEqbm/KbjpKlooztllgf{sbmpjlmpwbmgbqgp?,pwzof=\\tqfgv`wjlmGf`fnafq#sqfefqqfg@bnaqjgdflsslmfmwpAvpjmfpp#`lmevpjlm=\\t?wjwof=sqfpfmwfgf{sobjmfgglfp#mlw#tlqogtjgfjmwfqeb`fslpjwjlmpmftpsbsfq?,wbaof=\\tnlvmwbjmpojhf#wkf#fppfmwjboejmbm`jbopfof`wjlmb`wjlm>!,babmglmfgFgv`bwjlmsbqpfJmw+pwbajojwzvmbaof#wl?,wjwof=\\tqfobwjlmpMlwf#wkbwfeej`jfmwsfqelqnfgwtl#zfbqpPjm`f#wkfwkfqfelqftqbssfq!=bowfqmbwfjm`qfbpfgAbwwof#lesfq`fjufgwqzjmd#wlmf`fppbqzslqwqbzfgfof`wjlmpFojybafwk?,jeqbnf=gjp`lufqzjmpvqbm`fp-ofmdwk8ofdfmgbqzDfldqbskz`bmgjgbwf`lqslqbwfplnfwjnfppfquj`fp-jmkfqjwfg?,pwqlmd=@lnnvmjwzqfojdjlvpol`bwjlmp@lnnjwwffavjogjmdpwkf#tlqogml#olmdfqafdjmmjmdqfefqfm`f`bmmlw#afeqfrvfm`zwzsj`boozjmwl#wkf#qfobwjuf8qf`lqgjmdsqfpjgfmwjmjwjboozwf`kmjrvfwkf#lwkfqjw#`bm#aff{jpwfm`fvmgfqojmfwkjp#wjnfwfofsklmfjwfnp`lsfsqb`wj`fpbgubmwbdf*8qfwvqm#Elq#lwkfqsqlujgjmdgfnl`qb`zalwk#wkf#f{wfmpjufpveefqjmdpvsslqwfg`lnsvwfqp#evm`wjlmsqb`wj`bopbjg#wkbwjw#nbz#afFmdojpk?,eqln#wkf#p`kfgvofggltmolbgp?,obafo=\\tpvpsf`wfgnbqdjm9#3psjqjwvbo?,kfbg=\\t\\tnj`qlplewdqbgvboozgjp`vppfgkf#af`bnff{f`vwjufirvfqz-ipklvpfklog`lmejqnfgsvq`kbpfgojwfqboozgfpwqlzfgvs#wl#wkfubqjbwjlmqfnbjmjmdjw#jp#mlw`fmwvqjfpIbsbmfpf#bnlmd#wkf`lnsofwfgbodlqjwknjmwfqfpwpqfafoojlmvmgfejmfgfm`lvqbdfqfpjybaofjmuloujmdpfmpjwjufvmjufqpbosqlujpjlm+bowklvdkefbwvqjmd`lmgv`wfg*/#tkj`k#`lmwjmvfg.kfbgfq!=Efaqvbqz#mvnfqlvp#lufqeolt9`lnslmfmweqbdnfmwpf{`foofmw`lopsbm>!wf`kmj`bomfbq#wkf#Bgubm`fg#plvq`f#lef{sqfppfgKlmd#Hlmd#Eb`fallhnvowjsof#nf`kbmjpnfofubwjlmleefmpjuf?,elqn=\\t\\npslmplqfggl`vnfmw-lq#%rvlw8wkfqf#bqfwklpf#tklnlufnfmwpsql`fppfpgjeej`vowpvanjwwfgqf`lnnfmg`lmujm`fgsqlnlwjmd!#tjgwk>!-qfsob`f+`obppj`bo`lbojwjlmkjp#ejqpwgf`jpjlmpbppjpwbmwjmgj`bwfgfulovwjlm.tqbssfq!fmlvdk#wlbolmd#wkfgfojufqfg..=\\u000E\\t?\\\"..Bnfqj`bm#sqlwf`wfgMlufnafq#?,pwzof=?evqmjwvqfJmwfqmfw##lmaovq>!pvpsfmgfgqf`jsjfmwabpfg#lm#Nlqflufq/balojpkfg`loof`wfgtfqf#nbgffnlwjlmbofnfqdfm`zmbqqbwjufbgul`bwfps{8alqgfq`lnnjwwfggjq>!owq!fnsolzffpqfpfbq`k-#pfof`wfgpv``fpplq`vpwlnfqpgjpsobzfgPfswfnafqbgg@obpp+Eb`fallh#pvddfpwfgbmg#obwfqlsfqbwjmdfobalqbwfPlnfwjnfpJmpwjwvwf`fqwbjmozjmpwboofgelooltfqpIfqvpbofnwkfz#kbuf`lnsvwjmddfmfqbwfgsqlujm`fpdvbqbmwffbqajwqbqzqf`ldmjyftbmwfg#wls{8tjgwk9wkflqz#leafkbujlvqTkjof#wkffpwjnbwfgafdbm#wl#jw#af`bnfnbdmjwvgfnvpw#kbufnlqf#wkbmGjqf`wlqzf{wfmpjlmpf`qfwbqzmbwvqboozl``vqqjmdubqjbaofpdjufm#wkfsobwelqn-?,obafo=?ebjofg#wl`lnslvmgphjmgp#le#pl`jfwjfpbolmdpjgf#..%dw8\\t\\tplvwktfpwwkf#qjdkwqbgjbwjlmnbz#kbuf#vmfp`bsf+pslhfm#jm!#kqfe>!,sqldqbnnflmoz#wkf#`lnf#eqlngjqf`wlqzavqjfg#jmb#pjnjobqwkfz#tfqf?,elmw=?,Mlqtfdjbmpsf`jejfgsqlgv`jmdsbppfmdfq+mft#Gbwfwfnslqbqzej`wjlmboBewfq#wkffrvbwjlmpgltmolbg-qfdvobqozgfufolsfqbaluf#wkfojmhfg#wlskfmlnfmbsfqjlg#lewllowjs!=pvapwbm`fbvwlnbwj`bpsf`w#leBnlmd#wkf`lmmf`wfgfpwjnbwfpBjq#Elq`fpzpwfn#lelaif`wjufjnnfgjbwfnbhjmd#jwsbjmwjmdp`lmrvfqfgbqf#pwjoosql`fgvqfdqltwk#lekfbgfg#azFvqlsfbm#gjujpjlmpnlof`vofpeqbm`kjpfjmwfmwjlmbwwqb`wfg`kjogkllgbopl#vpfggfgj`bwfgpjmdbslqfgfdqff#leebwkfq#le`lmeoj`wp?,b=?,s=\\t`bnf#eqlntfqf#vpfgmlwf#wkbwqf`fjujmdF{f`vwjuffufm#nlqfb``fpp#wl`lnnbmgfqSlojwj`bonvpj`jbmpgfoj`jlvpsqjplmfqpbgufmw#leVWE.;!#,=?\\\"X@GBWBX!=@lmwb`wPlvwkfqm#ad`lolq>!pfqjfp#le-#Jw#tbp#jm#Fvqlsfsfqnjwwfgubojgbwf-bssfbqjmdleej`jboppfqjlvpoz.obmdvbdfjmjwjbwfgf{wfmgjmdolmd.wfqnjmeobwjlmpv`k#wkbwdfw@llhjfnbqhfg#az?,avwwlm=jnsofnfmwavw#jw#jpjm`qfbpfpgltm#wkf#qfrvjqjmdgfsfmgfmw..=\\t?\\\"..#jmwfqujftTjwk#wkf#`lsjfp#le`lmpfmpvptbp#avjowUfmfyvfob+elqnfqozwkf#pwbwfsfqplmmfopwqbwfdj`ebulvq#lejmufmwjlmTjhjsfgjb`lmwjmfmwujqwvbooztkj`k#tbpsqjm`jsof@lnsofwf#jgfmwj`bopklt#wkbwsqjnjwjufbtbz#eqlnnlof`vobqsqf`jpfozgjpploufgVmgfq#wkfufqpjlm>!=%maps8?,Jw#jp#wkf#Wkjp#jp#tjoo#kbuflqdbmjpnpplnf#wjnfEqjfgqj`ktbp#ejqpwwkf#lmoz#eb`w#wkbwelqn#jg>!sqf`fgjmdWf`kmj`boskzpj`jpwl``vqp#jmmbujdbwlqpf`wjlm!=psbm#jg>!plvdkw#wlafolt#wkfpvqujujmd~?,pwzof=kjp#gfbwkbp#jm#wkf`bvpfg#azsbqwjboozf{jpwjmd#vpjmd#wkftbp#djufmb#ojpw#leofufop#lemlwjlm#leLeej`jbo#gjpnjppfgp`jfmwjpwqfpfnaofpgvsoj`bwff{solpjufqf`lufqfgboo#lwkfqdboofqjfpxsbggjmd9sflsof#leqfdjlm#lebggqfppfpbppl`jbwfjnd#bow>!jm#nlgfqmpklvog#afnfwklg#leqfslqwjmdwjnfpwbnsmffgfg#wlwkf#Dqfbwqfdbqgjmdpffnfg#wlujftfg#bpjnsb`w#lmjgfb#wkbwwkf#Tlqogkfjdkw#lef{sbmgjmdWkfpf#bqf`vqqfmw!=`bqfevooznbjmwbjmp`kbqdf#le@obppj`bobggqfppfgsqfgj`wfgltmfqpkjs?gju#jg>!qjdkw!=\\u000E\\tqfpjgfm`fofbuf#wkf`lmwfmw!=bqf#lewfm##~*+*8\\u000E\\tsqlabaoz#Sqlefpplq.avwwlm!#qfpslmgfgpbzp#wkbwkbg#wl#afsob`fg#jmKvmdbqjbmpwbwvp#lepfqufp#bpVmjufqpbof{f`vwjlmbddqfdbwfelq#tkj`kjmef`wjlmbdqffg#wlkltfufq/#slsvobq!=sob`fg#lm`lmpwqv`wfof`wlqbopznalo#lejm`ovgjmdqfwvqm#wlbq`kjwf`w@kqjpwjbmsqfujlvp#ojujmd#jmfbpjfq#wlsqlefpplq\\t%ow8\\\"..#feef`w#lebmbozwj`ptbp#wbhfmtkfqf#wkfwllh#lufqafojfe#jmBeqjhbbmpbp#ebq#bpsqfufmwfgtlqh#tjwkb#psf`jbo?ejfogpfw@kqjpwnbpQfwqjfufg\\t\\tJm#wkf#ab`h#jmwlmlqwkfbpwnbdbyjmfp=?pwqlmd=`lnnjwwffdlufqmjmddqlvsp#lepwlqfg#jmfpwbaojpkb#dfmfqbojwp#ejqpwwkfjq#ltmslsvobwfgbm#laif`w@bqjaafbmboolt#wkfgjpwqj`wptjp`lmpjmol`bwjlm-8#tjgwk9#jmkbajwfgPl`jbojpwIbmvbqz#2?,ellwfq=pjnjobqoz`klj`f#lewkf#pbnf#psf`jej`#avpjmfpp#Wkf#ejqpw-ofmdwk8#gfpjqf#wlgfbo#tjwkpjm`f#wkfvpfqBdfmw`lm`fjufgjmgf{-sksbp#%rvlw8fmdbdf#jmqf`fmwoz/eft#zfbqptfqf#bopl\\t?kfbg=\\t?fgjwfg#azbqf#hmltm`jwjfp#jmb``fpphfz`lmgfnmfgbopl#kbufpfquj`fp/ebnjoz#leP`kllo#le`lmufqwfgmbwvqf#le#obmdvbdfnjmjpwfqp?,laif`w=wkfqf#jp#b#slsvobqpfrvfm`fpbgul`bwfgWkfz#tfqfbmz#lwkfqol`bwjlm>fmwfq#wkfnv`k#nlqfqfeof`wfgtbp#mbnfglqjdjmbo#b#wzsj`botkfm#wkfzfmdjmffqp`lvog#mlwqfpjgfmwptfgmfpgbzwkf#wkjqg#sqlgv`wpIbmvbqz#1tkbw#wkfzb#`fqwbjmqfb`wjlmpsql`fpplqbewfq#kjpwkf#obpw#`lmwbjmfg!=?,gju=\\t?,b=?,wg=gfsfmg#lmpfbq`k!=\\tsjf`fp#le`lnsfwjmdQfefqfm`fwfmmfppfftkj`k#kbp#ufqpjlm>?,psbm=#??,kfbgfq=djufp#wkfkjpwlqjbmubovf>!!=sbggjmd93ujft#wkbwwldfwkfq/wkf#nlpw#tbp#elvmgpvapfw#lebwwb`h#lm`kjogqfm/sljmwp#lesfqplmbo#slpjwjlm9boofdfgoz@ofufobmgtbp#obwfqbmg#bewfqbqf#djufmtbp#pwjoop`qloojmdgfpjdm#lenbhfp#wkfnv`k#ofppBnfqj`bmp-\\t\\tBewfq#/#avw#wkfNvpfvn#leolvjpjbmb+eqln#wkfnjmmfplwbsbqwj`ofpb#sql`fppGlnjmj`bmulovnf#leqfwvqmjmdgfefmpjuf33s{\\u007Fqjdknbgf#eqlnnlvpflufq!#pwzof>!pwbwfp#le+tkj`k#jp`lmwjmvfpEqbm`jp`lavjogjmd#tjwklvw#btjwk#plnftkl#tlvogb#elqn#leb#sbqw#leafelqf#jwhmltm#bp##Pfquj`fpol`bwjlm#bmg#lewfmnfbpvqjmdbmg#jw#jpsbsfqab`hubovfp#le\\u000E\\t?wjwof=>#tjmglt-gfwfqnjmffq%rvlw8#sobzfg#azbmg#fbqoz?,`fmwfq=eqln#wkjpwkf#wkqffsltfq#bmgle#%rvlw8jmmfqKWNO?b#kqfe>!z9jmojmf8@kvq`k#lewkf#fufmwufqz#kjdkleej`jbo#.kfjdkw9#`lmwfmw>!,`dj.ajm,wl#`qfbwfbeqjhbbmpfpsfqbmwleqbm/Kbjpobwujf)Mvojfwvuj)_(`f)Mwjmb(af)Mwjmb\\fUh\\fT{\\fTN\\n{I\\np@\\u0004Fr\\u000BBl\\bQ\\u007F\\tA{\\u000BUm\\u0005Gx\\tA{\\u0001yp\\u0006YA\\u0000zX\\bTV\\bWl\\bUd\\u0004BM\\u000BB{\\npV\\u000B@x\\u0004B\\\\\\np@\\u0004Db\\u0004Gz\\tal\\npa\\tfM\\tuD\\bV~\\u0004mx\\u000BQ}\\ndS\\tp\\\\\\bVK\\bS]\\bU|\\u0005oD\\tkV\\u000Bed\\u000BHR\\nb~\\u0004M`\\nJp\\u0005oD\\u0004|Q\\nLP\\u0004Sw\\bTl\\nAI\\nxC\\bWt\\tBq\\u0005F`\\u0004Cm\\u000BLm\\tKx\\t}t\\bPv\\ny\\\\\\naB\\tV\\u007F\\nZd\\u0004XU\\u0004li\\tfr\\ti@\\tBH\\u0004BD\\u0004BV\\t`V\\n[]\\tp_\\tTn\\n~A\\nxR\\tuD\\t`{\\bV@\\tTn\\tHK\\tAJ\\u000Bxs\\u0004Zf\\nqI\\u0004Zf\\u000BBM\\u000B|j\\t}t\\bSM\\nmC\\u000BQ}pfquj`jlpbqw/A`volbqdfmwjmbabq`folmb`vborvjfqsvaoj`bglsqlgv`wlpslo/Awj`bqfpsvfpwbtjhjsfgjbpjdvjfmwfa/Vprvfgb`lnvmjgbgpfdvqjgbgsqjm`jsbosqfdvmwbp`lmwfmjglqfpslmgfqufmfyvfobsqlaofnbpgj`jfnaqfqfob`j/_mmlujfnaqfpjnjobqfpsqlzf`wlpsqldqbnbpjmpwjwvwlb`wjujgbgfm`vfmwqbf`lmln/Abjn/Mdfmfp`lmwb`wbqgfp`bqdbqmf`fpbqjlbwfm`j/_mwfo/Eelml`lnjpj/_m`bm`jlmfp`bsb`jgbgfm`lmwqbqbm/Mojpjpebulqjwlpw/Eqnjmlpsqlujm`jbfwjrvfwbpfofnfmwlpevm`jlmfpqfpvowbgl`bq/M`wfqsqlsjfgbgsqjm`jsjlmf`fpjgbgnvmj`jsbo`qfb`j/_mgfp`bqdbpsqfpfm`jb`lnfq`jbolsjmjlmfpfifq`j`jlfgjwlqjbopbobnbm`bdlmy/Mofygl`vnfmwlsfo/A`vobqf`jfmwfpdfmfqbofpwbqqbdlmbsq/M`wj`bmlufgbgfpsqlsvfpwbsb`jfmwfpw/E`mj`bplaifwjulp`lmwb`wlp\\fHB\\fIk\\fHn\\fH^\\fHS\\fHc\\fHU\\fId\\fHn\\fH{\\fHC\\fHR\\fHT\\fHR\\fHI\\fHc\\fHY\\fHn\\fH\\\\\\fHU\\fIk\\fHy\\fIg\\fHd\\fHy\\fIm\\fHw\\fH\\\\\\fHU\\fHR\\fH@\\fHR\\fHJ\\fHy\\fHU\\fHR\\fHT\\fHA\\fIl\\fHU\\fIm\\fHc\\fH\\\\\\fHU\\fIl\\fHB\\fId\\fHn\\fHJ\\fHS\\fHD\\fH@\\fHR\\fHHgjsolgl`p\\fHT\\fHB\\fHC\\fH\\\\\\fIn\\fHF\\fHD\\fHR\\fHB\\fHF\\fHH\\fHR\\fHG\\fHS\\fH\\\\\\fHx\\fHT\\fHH\\fHH\\fH\\\\\\fHU\\fH^\\fIg\\fH{\\fHU\\fIm\\fHj\\fH@\\fHR\\fH\\\\\\fHJ\\fIk\\fHZ\\fHU\\fIm\\fHd\\fHz\\fIk\\fH^\\fHC\\fHJ\\fHS\\fHy\\fHR\\fHB\\fHY\\fIk\\fH@\\fHH\\fIl\\fHD\\fH@\\fIl\\fHv\\fHB\\fI`\\fHH\\fHT\\fHR\\fH^\\fH^\\fIk\\fHz\\fHp\\fIe\\fH@\\fHB\\fHJ\\fHJ\\fHH\\fHI\\fHR\\fHD\\fHU\\fIl\\fHZ\\fHU\\fH\\\\\\fHi\\fH^\\fH{\\fHy\\fHA\\fIl\\fHD\\fH{\\fH\\\\\\fHF\\fHR\\fHT\\fH\\\\\\fHR\\fHH\\fHy\\fHS\\fHc\\fHe\\fHT\\fIk\\fH{\\fHC\\fIl\\fHU\\fIn\\fHm\\fHj\\fH{\\fIk\\fHs\\fIl\\fHB\\fHz\\fIg\\fHp\\fHy\\fHR\\fH\\\\\\fHi\\fHA\\fIl\\fH{\\fHC\\fIk\\fHH\\fIm\\fHB\\fHY\\fIg\\fHs\\fHJ\\fIk\\fHn\\fHi\\fH{\\fH\\\\\\fH|\\fHT\\fIk\\fHB\\fIk\\fH^\\fH^\\fH{\\fHR\\fHU\\fHR\\fH^\\fHf\\fHF\\fH\\\\\\fHv\\fHR\\fH\\\\\\fH|\\fHT\\fHR\\fHJ\\fIk\\fH\\\\\\fHp\\fHS\\fHT\\fHJ\\fHS\\fH^\\fH@\\fHn\\fHJ\\fH@\\fHD\\fHR\\fHU\\fIn\\fHn\\fH^\\fHR\\fHz\\fHp\\fIl\\fHH\\fH@\\fHs\\fHD\\fHB\\fHS\\fH^\\fHk\\fHT\\fIk\\fHj\\fHD\\fIk\\fHD\\fHC\\fHR\\fHy\\fIm\\fH^\\fH^\\fIe\\fH{\\fHA\\fHR\\fH{\\fH\\\\\\fIk\\fH^\\fHp\\fH{\\fHU\\fH\\\\\\fHR\\fHB\\fH^\\fH{\\fIk\\fHF\\fIk\\fHp\\fHU\\fHR\\fHI\\fHk\\fHT\\fIl\\fHT\\fHU\\fIl\\fHy\\fH^\\fHR\\fHL\\fIl\\fHy\\fHU\\fHR\\fHm\\fHJ\\fIn\\fH\\\\\\fHH\\fHU\\fHH\\fHT\\fHR\\fHH\\fHC\\fHR\\fHJ\\fHj\\fHC\\fHR\\fHF\\fHR\\fHy\\fHy\\fI`\\fHD\\fHZ\\fHR\\fHB\\fHJ\\fIk\\fHz\\fHC\\fHU\\fIl\\fH\\\\\\fHR\\fHC\\fHz\\fIm\\fHJ\\fH^\\fH{\\fIl`bwfdlqjfpf{sfqjfm`f?,wjwof=\\u000E\\t@lszqjdkw#ibubp`qjsw`lmgjwjlmpfufqzwkjmd?s#`obpp>!wf`kmloldzab`hdqlvmg?b#`obpp>!nbmbdfnfmw%`lsz8#132ibubP`qjsw`kbqb`wfqpaqfbg`qvnawkfnpfoufpklqjylmwbodlufqmnfmw@bojelqmjbb`wjujwjfpgjp`lufqfgMbujdbwjlmwqbmpjwjlm`lmmf`wjlmmbujdbwjlmbssfbqbm`f?,wjwof=?n`kf`hal{!#wf`kmjrvfpsqlwf`wjlmbssbqfmwozbp#tfoo#bpvmw$/#$VB.qfplovwjlmlsfqbwjlmpwfofujpjlmwqbmpobwfgTbpkjmdwlmmbujdbwlq-#>#tjmglt-jnsqfppjlm%ow8aq%dw8ojwfqbwvqfslsvobwjlmad`lolq>! fpsf`jbooz#`lmwfmw>!sqlgv`wjlmmftpofwwfqsqlsfqwjfpgfejmjwjlmofbgfqpkjsWf`kmloldzSbqojbnfmw`lnsbqjplmvo#`obpp>!-jmgf{Le+!`lm`ovpjlmgjp`vppjlm`lnslmfmwpajloldj`boQfulovwjlm\\\\`lmwbjmfqvmgfqpwllgmlp`qjsw=?sfqnjppjlmfb`k#lwkfqbwnlpskfqf#lmel`vp>!?elqn#jg>!sql`fppjmdwkjp-ubovfdfmfqbwjlm@lmefqfm`fpvapfrvfmwtfoo.hmltmubqjbwjlmpqfsvwbwjlmskfmlnfmlmgjp`jsojmfoldl-smd!#+gl`vnfmw/alvmgbqjfpf{sqfppjlmpfwwofnfmwAb`hdqlvmglvw#le#wkffmwfqsqjpf+!kwwsp9!#vmfp`bsf+!sbpptlqg!#gfnl`qbwj`?b#kqfe>!,tqbssfq!=\\tnfnafqpkjsojmdvjpwj`s{8sbggjmdskjolplskzbppjpwbm`fvmjufqpjwzeb`jojwjfpqf`ldmjyfgsqfefqfm`fje#+wzsflenbjmwbjmfgul`bavobqzkzslwkfpjp-pvanjw+*8%bns8maps8bmmlwbwjlmafkjmg#wkfElvmgbwjlmsvaojpkfq!bppvnswjlmjmwqlgv`fg`lqqvswjlmp`jfmwjpwpf{soj`jwozjmpwfbg#legjnfmpjlmp#lm@oj`h>!`lmpjgfqfggfsbqwnfmwl``vsbwjlmpllm#bewfqjmufpwnfmwsqlmlvm`fgjgfmwjejfgf{sfqjnfmwNbmbdfnfmwdfldqbskj`!#kfjdkw>!ojmh#qfo>!-qfsob`f+,gfsqfppjlm`lmefqfm`fsvmjpknfmwfojnjmbwfgqfpjpwbm`fbgbswbwjlmlsslpjwjlmtfoo#hmltmpvssofnfmwgfwfqnjmfgk2#`obpp>!3s{8nbqdjmnf`kbmj`bopwbwjpwj`p`fofaqbwfgDlufqmnfmw\\t\\tGvqjmd#wgfufolsfqpbqwjej`jbofrvjubofmwlqjdjmbwfg@lnnjppjlmbwwb`knfmw?psbm#jg>!wkfqf#tfqfMfgfqobmgpafzlmg#wkfqfdjpwfqfgilvqmbojpweqfrvfmwozboo#le#wkfobmd>!fm!#?,pwzof=\\u000E\\tbaplovwf8#pvsslqwjmdf{wqfnfoz#nbjmpwqfbn?,pwqlmd=#slsvobqjwzfnsolznfmw?,wbaof=\\u000E\\t#`lopsbm>!?,elqn=\\t##`lmufqpjlmbalvw#wkf#?,s=?,gju=jmwfdqbwfg!#obmd>!fmSlqwvdvfpfpvapwjwvwfjmgjujgvbojnslppjaofnvowjnfgjbbonlpw#boos{#plojg# bsbqw#eqlnpvaif`w#wljm#Fmdojpk`qjwj`jyfgf{`fsw#elqdvjgfojmfplqjdjmboozqfnbqhbaofwkf#pf`lmgk1#`obpp>!?b#wjwof>!+jm`ovgjmdsbqbnfwfqpsqlkjajwfg>#!kwws9,,gj`wjlmbqzsfq`fswjlmqfulovwjlmelvmgbwjlms{8kfjdkw9pv``fppevopvsslqwfqpnjoofmmjvnkjp#ebwkfqwkf#%rvlw8ml.qfsfbw8`lnnfq`jbojmgvpwqjbofm`lvqbdfgbnlvmw#le#vmleej`jbofeej`jfm`zQfefqfm`fp`llqgjmbwfgjp`objnfqf{sfgjwjlmgfufolsjmd`bo`vobwfgpjnsojejfgofdjwjnbwfpvapwqjmd+3!#`obpp>!`lnsofwfozjoovpwqbwfejuf#zfbqpjmpwqvnfmwSvaojpkjmd2!#`obpp>!spz`kloldz`lmejgfm`fmvnafq#le#bapfm`f#leel`vpfg#lmiljmfg#wkfpwqv`wvqfpsqfujlvpoz=?,jeqbnf=lm`f#bdbjmavw#qbwkfqjnnjdqbmwple#`lvqpf/b#dqlvs#leOjwfqbwvqfVmojhf#wkf?,b=%maps8\\tevm`wjlm#jw#tbp#wkf@lmufmwjlmbvwlnlajofSqlwfpwbmwbddqfppjufbewfq#wkf#Pjnjobqoz/!#,=?,gju=`loof`wjlm\\u000E\\tevm`wjlmujpjajojwzwkf#vpf#leulovmwffqpbwwqb`wjlmvmgfq#wkf#wkqfbwfmfg)?\\\"X@GBWBXjnslqwbm`fjm#dfmfqbowkf#obwwfq?,elqn=\\t?,-jmgf{Le+$j#>#38#j#?gjeefqfm`fgfulwfg#wlwqbgjwjlmppfbq`k#elqvowjnbwfozwlvqmbnfmwbwwqjavwfppl.`boofg#~\\t?,pwzof=fubovbwjlmfnskbpjyfgb``fppjaof?,pf`wjlm=pv``fppjlmbolmd#tjwkNfbmtkjof/jmgvpwqjfp?,b=?aq#,=kbp#af`lnfbpsf`wp#leWfofujpjlmpveej`jfmwabphfwabooalwk#pjgfp`lmwjmvjmdbm#bqwj`of?jnd#bow>!bgufmwvqfpkjp#nlwkfqnbm`kfpwfqsqjm`jsofpsbqwj`vobq`lnnfmwbqzfeef`wp#legf`jgfg#wl!=?pwqlmd=svaojpkfqpIlvqmbo#legjeej`vowzeb`jojwbwfb``fswbaofpwzof-`pp!\\nevm`wjlm#jmmlubwjlm=@lszqjdkwpjwvbwjlmptlvog#kbufavpjmfppfpGj`wjlmbqzpwbwfnfmwplewfm#vpfgsfqpjpwfmwjm#Ibmvbqz`lnsqjpjmd?,wjwof=\\t\\ngjsolnbwj``lmwbjmjmdsfqelqnjmdf{wfmpjlmpnbz#mlw#af`lm`fsw#le#lm`oj`h>!Jw#jp#boplejmbm`jbo#nbhjmd#wkfOv{fnalvqdbggjwjlmbobqf#`boofgfmdbdfg#jm!p`qjsw!*8avw#jw#tbpfof`wqlmj`lmpvanjw>!\\t?\\\"..#Fmg#fof`wqj`boleej`jboozpvddfpwjlmwls#le#wkfvmojhf#wkfBvpwqbojbmLqjdjmboozqfefqfm`fp\\t?,kfbg=\\u000E\\tqf`ldmjpfgjmjwjbojyfojnjwfg#wlBof{bmgqjbqfwjqfnfmwBgufmwvqfpelvq#zfbqp\\t\\t%ow8\\\"..#jm`qfbpjmdgf`lqbwjlmk0#`obpp>!lqjdjmp#lelaojdbwjlmqfdvobwjlm`obppjejfg+evm`wjlm+bgubmwbdfpafjmd#wkf#kjpwlqjbmp?abpf#kqfeqfsfbwfgoztjoojmd#wl`lnsbqbaofgfpjdmbwfgmlnjmbwjlmevm`wjlmbojmpjgf#wkfqfufobwjlmfmg#le#wkfp#elq#wkf#bvwklqjyfgqfevpfg#wlwbhf#sob`fbvwlmlnlvp`lnsqlnjpfslojwj`bo#qfpwbvqbmwwtl#le#wkfEfaqvbqz#1rvbojwz#leptelaif`w-vmgfqpwbmgmfbqoz#bootqjwwfm#azjmwfqujftp!#tjgwk>!2tjwkgqbtboeolbw9ofewjp#vpvbooz`bmgjgbwfpmftpsbsfqpnzpwfqjlvpGfsbqwnfmwafpw#hmltmsbqojbnfmwpvssqfppfg`lmufmjfmwqfnfnafqfggjeefqfmw#pzpwfnbwj`kbp#ofg#wlsqlsbdbmgb`lmwqloofgjmeovfm`fp`fqfnlmjbosql`objnfgSqlwf`wjlmoj#`obpp>!P`jfmwjej``obpp>!ml.wqbgfnbqhpnlqf#wkbm#tjgfpsqfbgOjafqbwjlmwllh#sob`fgbz#le#wkfbp#olmd#bpjnsqjplmfgBggjwjlmbo\\t?kfbg=\\t?nObalqbwlqzMlufnafq#1f{`fswjlmpJmgvpwqjboubqjfwz#leeolbw9#ofeGvqjmd#wkfbppfppnfmwkbuf#affm#gfbop#tjwkPwbwjpwj`pl``vqqfm`f,vo=?,gju=`ofbqej{!=wkf#svaoj`nbmz#zfbqptkj`k#tfqflufq#wjnf/pzmlmznlvp`lmwfmw!=\\tsqfpvnbaozkjp#ebnjozvpfqBdfmw-vmf{sf`wfgjm`ovgjmd#`kboofmdfgb#njmlqjwzvmgfejmfg!afolmdp#wlwbhfm#eqlnjm#L`wlafqslpjwjlm9#pbjg#wl#afqfojdjlvp#Efgfqbwjlm#qltpsbm>!lmoz#b#eftnfbmw#wkbwofg#wl#wkf..=\\u000E\\t?gju#?ejfogpfw=Bq`kajpkls#`obpp>!mlafjmd#vpfgbssqlb`kfpsqjujofdfpmlp`qjsw=\\tqfpvowp#jmnbz#af#wkfFbpwfq#fddnf`kbmjpnpqfbplmbaofSlsvobwjlm@loof`wjlmpfof`wfg!=mlp`qjsw=\\u000E,jmgf{-sksbqqjubo#le.ippgh$**8nbmbdfg#wljm`lnsofwf`bpvbowjfp`lnsofwjlm@kqjpwjbmpPfswfnafq#bqjwknfwj`sql`fgvqfpnjdkw#kbufSqlgv`wjlmjw#bssfbqpSkjolplskzeqjfmgpkjsofbgjmd#wldjujmd#wkfwltbqg#wkfdvbqbmwffggl`vnfmwfg`lolq9 333ujgfl#dbnf`lnnjppjlmqfeof`wjmd`kbmdf#wkfbppl`jbwfgpbmp.pfqjelmhfzsqfpp8#sbggjmd9Kf#tbp#wkfvmgfqozjmdwzsj`booz#/#bmg#wkf#pq`Fofnfmwpv``fppjufpjm`f#wkf#pklvog#af#mfwtlqhjmdb``lvmwjmdvpf#le#wkfoltfq#wkbmpkltp#wkbw?,psbm=\\t\\n\\n`lnsobjmwp`lmwjmvlvprvbmwjwjfpbpwqlmlnfqkf#gjg#mlwgvf#wl#jwpbssojfg#wlbm#bufqbdffeelqwp#wlwkf#evwvqfbwwfnsw#wlWkfqfelqf/`bsbajojwzQfsvaoj`bmtbp#elqnfgFof`wqlmj`hjolnfwfqp`kboofmdfpsvaojpkjmdwkf#elqnfqjmgjdfmlvpgjqf`wjlmppvapjgjbqz`lmpsjqb`zgfwbjop#lebmg#jm#wkfbeelqgbaofpvapwbm`fpqfbplm#elq`lmufmwjlmjwfnwzsf>!baplovwfozpvsslpfgozqfnbjmfg#bbwwqb`wjufwqbufoojmdpfsbqbwfozel`vpfp#lmfofnfmwbqzbssoj`baofelvmg#wkbwpwzofpkffwnbmvp`qjswpwbmgp#elq#ml.qfsfbw+plnfwjnfp@lnnfq`jbojm#Bnfqj`bvmgfqwbhfmrvbqwfq#lebm#f{bnsofsfqplmboozjmgf{-sks<?,avwwlm=\\tsfq`fmwbdfafpw.hmltm`qfbwjmd#b!#gjq>!owqOjfvwfmbmw\\t?gju#jg>!wkfz#tlvogbajojwz#lenbgf#vs#lemlwfg#wkbw`ofbq#wkbwbqdvf#wkbwwl#bmlwkfq`kjogqfm$psvqslpf#leelqnvobwfgabpfg#vslmwkf#qfdjlmpvaif`w#lesbppfmdfqpslppfppjlm-\\t\\tJm#wkf#Afelqf#wkfbewfqtbqgp`vqqfmwoz#b`qlpp#wkfp`jfmwjej``lnnvmjwz-`bsjwbojpnjm#Dfqnbmzqjdkw.tjmdwkf#pzpwfnPl`jfwz#leslojwj`jbmgjqf`wjlm9tfmw#lm#wlqfnlubo#le#Mft#Zlqh#bsbqwnfmwpjmgj`bwjlmgvqjmd#wkfvmofpp#wkfkjpwlqj`bokbg#affm#bgfejmjwjufjmdqfgjfmwbwwfmgbm`f@fmwfq#elqsqlnjmfm`fqfbgzPwbwfpwqbwfdjfpavw#jm#wkfbp#sbqw#le`lmpwjwvwf`objn#wkbwobalqbwlqz`lnsbwjaofebjovqf#le/#pv`k#bp#afdbm#tjwkvpjmd#wkf#wl#sqlujgfefbwvqf#leeqln#tkj`k,!#`obpp>!dfloldj`bopfufqbo#legfojafqbwfjnslqwbmw#klogp#wkbwjmd%rvlw8#ubojdm>wlswkf#Dfqnbmlvwpjgf#lemfdlwjbwfgkjp#`bqffqpfsbqbwjlmjg>!pfbq`ktbp#`boofgwkf#elvqwkqf`qfbwjlmlwkfq#wkbmsqfufmwjlmtkjof#wkf#fgv`bwjlm/`lmmf`wjmdb``vqbwfoztfqf#avjowtbp#hjoofgbdqffnfmwpnv`k#nlqf#Gvf#wl#wkftjgwk9#233plnf#lwkfqHjmdgln#lewkf#fmwjqfebnlvp#elqwl#`lmmf`wlaif`wjufpwkf#Eqfm`ksflsof#bmgefbwvqfg!=jp#pbjg#wlpwqv`wvqboqfefqfmgvnnlpw#lewfmb#pfsbqbwf.=\\t?gju#jg#Leej`jbo#tlqogtjgf-bqjb.obafowkf#sobmfwbmg#jw#tbpg!#ubovf>!ollhjmd#bwafmfej`jbobqf#jm#wkfnlmjwlqjmdqfslqwfgozwkf#nlgfqmtlqhjmd#lmbooltfg#wltkfqf#wkf#jmmlubwjuf?,b=?,gju=plvmgwqb`hpfbq`kElqnwfmg#wl#afjmsvw#jg>!lsfmjmd#leqfpwqj`wfgbglswfg#azbggqfppjmdwkfloldjbmnfwklgp#leubqjbmw#le@kqjpwjbm#ufqz#obqdfbvwlnlwjufaz#ebq#wkfqbmdf#eqlnsvqpvjw#leeloolt#wkfaqlvdkw#wljm#Fmdobmgbdqff#wkbwb``vpfg#le`lnfp#eqlnsqfufmwjmdgju#pwzof>kjp#lq#kfqwqfnfmglvpeqffgln#le`lm`fqmjmd3#2fn#2fn8Abphfwaboo,pwzof-`ppbm#fbqojfqfufm#bewfq,!#wjwof>!-`ln,jmgf{wbhjmd#wkfsjwwpavqdk`lmwfmw!=\\u000E?p`qjsw=+ewvqmfg#lvwkbujmd#wkf?,psbm=\\u000E\\t#l``bpjlmboaf`bvpf#jwpwbqwfg#wlskzpj`booz=?,gju=\\t##`qfbwfg#az@vqqfmwoz/#ad`lolq>!wbajmgf{>!gjpbpwqlvpBmbozwj`p#bopl#kbp#b=?gju#jg>!?,pwzof=\\t?`boofg#elqpjmdfq#bmg-pq`#>#!,,ujlobwjlmpwkjp#sljmw`lmpwbmwozjp#ol`bwfgqf`lqgjmdpg#eqln#wkfmfgfqobmgpslqwvdv/Fp;N;};D;u;F5m4K4]4_7`gfpbqqlool`lnfmwbqjlfgv`b`j/_mpfswjfnaqfqfdjpwqbglgjqf``j/_mvaj`b`j/_msvaoj`jgbgqfpsvfpwbpqfpvowbglpjnslqwbmwfqfpfqubglpbqw/A`volpgjefqfmwfppjdvjfmwfpqfs/Vaoj`bpjwvb`j/_mnjmjpwfqjlsqjub`jgbggjqf`wlqjlelqnb`j/_mslaob`j/_msqfpjgfmwf`lmw\";\n  private static final String DATA1 = \"fmjglpb``fplqjlpwf`kmlqbwjsfqplmbofp`bwfdlq/Abfpsf`jbofpgjpslmjaofb`wvbojgbgqfefqfm`jbuboobglojgajaojlwf`bqfob`jlmfp`bofmgbqjlslo/Awj`bpbmwfqjlqfpgl`vnfmwlpmbwvqbofybnbwfqjbofpgjefqfm`jbf`lm/_nj`bwqbmpslqwfqlgq/Advfysbqwj`jsbqfm`vfmwqbmgjp`vpj/_mfpwqv`wvqbevmgb`j/_meqf`vfmwfpsfqnbmfmwfwlwbonfmwf<P<R<Z<Q<R<]=o<X<Y=n<P<R<Z<Y=n<^=l<Y<P=c=n<\\\\<V<Z<Y=k=n<R<]=g<]<R<W<Y<Y<R=k<Y<Q=`=a=n<R<_<R<V<R<_<X<\\\\<S<R=m<W<Y<^=m<Y<_<R=m<\\\\<U=n<Y=k<Y=l<Y<[<P<R<_=o=n=m<\\\\<U=n<\\\\<Z<T<[<Q<T<P<Y<Z<X=o<]=o<X=o=n<s<R<T=m<V<[<X<Y=m=`<^<T<X<Y<R=m<^=c<[<T<Q=o<Z<Q<R=m<^<R<Y<U<W=b<X<Y<U<S<R=l<Q<R<P<Q<R<_<R<X<Y=n<Y<U=m<^<R<T=i<S=l<\\\\<^<\\\\=n<\\\\<V<R<U<P<Y=m=n<R<T<P<Y<Y=n<Z<T<[<Q=`<R<X<Q<R<U<W=o=k=d<Y<S<Y=l<Y<X=k<\\\\=m=n<T=k<\\\\=m=n=`=l<\\\\<]<R=n<Q<R<^=g=i<S=l<\\\\<^<R=m<R<]<R<U<S<R=n<R<P<P<Y<Q<Y<Y=k<T=m<W<Y<Q<R<^=g<Y=o=m<W=o<_<R<V<R<W<R<Q<\\\\<[<\\\\<X=n<\\\\<V<R<Y=n<R<_<X<\\\\<S<R=k=n<T<s<R=m<W<Y=n<\\\\<V<T<Y<Q<R<^=g<U=m=n<R<T=n=n<\\\\<V<T=i=m=l<\\\\<[=o<M<\\\\<Q<V=n=h<R=l=o<P<v<R<_<X<\\\\<V<Q<T<_<T=m<W<R<^<\\\\<Q<\\\\=d<Y<U<Q<\\\\<U=n<T=m<^<R<T<P=m<^=c<[=`<W=b<]<R<U=k<\\\\=m=n<R=m=l<Y<X<T<v=l<R<P<Y<H<R=l=o<P=l=g<Q<V<Y=m=n<\\\\<W<T<S<R<T=m<V=n=g=m=c=k<P<Y=m=c=j=j<Y<Q=n=l=n=l=o<X<\\\\=m<\\\\<P=g=i=l=g<Q<V<\\\\<q<R<^=g<U=k<\\\\=m<R<^<P<Y=m=n<\\\\=h<T<W=`<P<P<\\\\=l=n<\\\\=m=n=l<\\\\<Q<P<Y=m=n<Y=n<Y<V=m=n<Q<\\\\=d<T=i<P<T<Q=o=n<T<P<Y<Q<T<T<P<Y=b=n<Q<R<P<Y=l<_<R=l<R<X=m<\\\\<P<R<P=a=n<R<P=o<V<R<Q=j<Y=m<^<R<Y<P<V<\\\\<V<R<U<|=l=i<T<^5i5j4F4C5e4I4]4_4K5h4]4_4K5h4E4K5h4U4K5i5o4F4D5k4K4D4]4K5i4@4K5h5f5d5i4K5h4Y5d4]4@4C5f4C4E4K5h4U4Z5d4I4Z4K5m4E4K5h5n4_5i4K5h4U4K4D4F4A5i5f5h5i5h5m4K4F5i5h4F5n5e4F4U4C5f5h4K5h4X4U4]4O4B4D4K4]4F4[5d5f4]4U5h5f5o5i4I4]5m4K5n4[5h4D4K4F4K5h5h4V4E4F4]4F5f4D4K5h5j4K4_4K5h4X5f4B5i5j4F4C5f4K5h4U4]4D4K5h5n4Y4Y4K5m5h4K5i4U5h5f5k4K4F4A4C5f4G4K5h5h5k5i4K5h4U5i5h5i5o4F4D4E5f5i5o5j5o4K5h4[5m5h5m5f4C5f5d4I4C4K4]4E4F4K4]5f4B4K5h4Y4A4E4F4_4@5f5h4K5h5d5n4F4U5j4C5i4K5i4C5f5j4E4F4Y5i5f5i4O4]4X5f5m4K5h4\\\\5f5j4U4]4D5f4E4D5d4K4D4E4O5h4U4K4D4K5h4_5m4]5i4X4K5o5h4F4U4K5h5e4K5h4O5d5h4K5h4_5j4E4@4K5i4U4E4K5h4Y4A5m4K5h4C5f5j5o5h5i4K4F4K5h4B4K4Y4K5h5i5h5m4O4U4Z4K4M5o4F4K4D4E4K5h4B5f4]4]4_4K4J5h4K5h5n5h4D4K5h4O4C4D5i5n4K4[4U5i4]4K4_5h5i5j4[5n4E4K5h5o4F4D4K5h4]4@5h4K4X4F4]5o4K5h5n4C5i5f4U4[5f5opAzWbdMbnf+-isd!#bow>!2s{#plojg# -dje!#bow>!wqbmpsbqfmwjmelqnbwjlmbssoj`bwjlm!#lm`oj`h>!fpwbaojpkfgbgufqwjpjmd-smd!#bow>!fmujqlmnfmwsfqelqnbm`fbssqlsqjbwf%bns8ngbpk8jnnfgjbwfoz?,pwqlmd=?,qbwkfq#wkbmwfnsfqbwvqfgfufolsnfmw`lnsfwjwjlmsob`fklogfqujpjajojwz9`lszqjdkw!=3!#kfjdkw>!fufm#wklvdkqfsob`fnfmwgfpwjmbwjlm@lqslqbwjlm?vo#`obpp>!Bppl`jbwjlmjmgjujgvbopsfqpsf`wjufpfwWjnflvw+vqo+kwws9,,nbwkfnbwj`pnbqdjm.wls9fufmwvbooz#gfp`qjswjlm*#ml.qfsfbw`loof`wjlmp-ISD\\u007Fwkvna\\u007Fsbqwj`jsbwf,kfbg=?algzeolbw9ofew8?oj#`obpp>!kvmgqfgp#le\\t\\tKltfufq/#`lnslpjwjlm`ofbq9alwk8`llsfqbwjlmtjwkjm#wkf#obafo#elq>!alqgfq.wls9Mft#Yfbobmgqf`lnnfmgfgsklwldqbskzjmwfqfpwjmd%ow8pvs%dw8`lmwqlufqpzMfwkfqobmgpbowfqmbwjufnb{ofmdwk>!ptjwyfqobmgGfufolsnfmwfppfmwjbooz\\t\\tBowklvdk#?,wf{wbqfb=wkvmgfqajqgqfsqfpfmwfg%bns8mgbpk8psf`vobwjlm`lnnvmjwjfpofdjpobwjlmfof`wqlmj`p\\t\\n?gju#jg>!joovpwqbwfgfmdjmffqjmdwfqqjwlqjfpbvwklqjwjfpgjpwqjavwfg5!#kfjdkw>!pbmp.pfqje8`bsbaof#le#gjpbssfbqfgjmwfqb`wjufollhjmd#elqjw#tlvog#afBedkbmjpwbmtbp#`qfbwfgNbwk-eollq+pvqqlvmgjmd`bm#bopl#aflapfqubwjlmnbjmwfmbm`ffm`lvmwfqfg?k1#`obpp>!nlqf#qf`fmwjw#kbp#affmjmubpjlm#le*-dfwWjnf+*evmgbnfmwboGfpsjwf#wkf!=?gju#jg>!jmpsjqbwjlmf{bnjmbwjlmsqfsbqbwjlmf{sobmbwjlm?jmsvw#jg>!?,b=?,psbm=ufqpjlmp#lejmpwqvnfmwpafelqf#wkf##>#$kwws9,,Gfp`qjswjlmqfobwjufoz#-pvapwqjmd+fb`k#le#wkff{sfqjnfmwpjmeovfmwjbojmwfdqbwjlmnbmz#sflsofgvf#wl#wkf#`lnajmbwjlmgl#mlw#kbufNjggof#Fbpw?mlp`qjsw=?`lszqjdkw!#sfqkbsp#wkfjmpwjwvwjlmjm#Gf`fnafqbqqbmdfnfmwnlpw#ebnlvpsfqplmbojwz`qfbwjlm#leojnjwbwjlmpf{`ovpjufozplufqfjdmwz.`lmwfmw!=\\t?wg#`obpp>!vmgfqdqlvmgsbqboofo#wlgl`wqjmf#lel``vsjfg#azwfqnjmloldzQfmbjppbm`fb#mvnafq#lepvsslqw#elqf{solqbwjlmqf`ldmjwjlmsqfgf`fpplq?jnd#pq`>!,?k2#`obpp>!svaoj`bwjlmnbz#bopl#afpsf`jbojyfg?,ejfogpfw=sqldqfppjufnjoojlmp#lepwbwfp#wkbwfmelq`fnfmwbqlvmg#wkf#lmf#bmlwkfq-sbqfmwMlgfbdqj`vowvqfBowfqmbwjufqfpfbq`kfqpwltbqgp#wkfNlpw#le#wkfnbmz#lwkfq#+fpsf`jbooz?wg#tjgwk>!8tjgwk9233&jmgfsfmgfmw?k0#`obpp>!#lm`kbmdf>!*-bgg@obpp+jmwfqb`wjlmLmf#le#wkf#gbvdkwfq#leb``fpplqjfpaqbm`kfp#le\\u000E\\t?gju#jg>!wkf#obqdfpwgf`obqbwjlmqfdvobwjlmpJmelqnbwjlmwqbmpobwjlmgl`vnfmwbqzjm#lqgfq#wl!=\\t?kfbg=\\t?!#kfjdkw>!2b`qlpp#wkf#lqjfmwbwjlm*8?,p`qjsw=jnsofnfmwfg`bm#af#pffmwkfqf#tbp#bgfnlmpwqbwf`lmwbjmfq!=`lmmf`wjlmpwkf#Aqjwjpktbp#tqjwwfm\\\"jnslqwbmw8s{8#nbqdjm.elooltfg#azbajojwz#wl#`lnsoj`bwfggvqjmd#wkf#jnnjdqbwjlmbopl#`boofg?k7#`obpp>!gjpwjm`wjlmqfsob`fg#azdlufqmnfmwpol`bwjlm#lejm#Mlufnafqtkfwkfq#wkf?,s=\\t?,gju=b`rvjpjwjlm`boofg#wkf#sfqpf`vwjlmgfpjdmbwjlmxelmw.pjyf9bssfbqfg#jmjmufpwjdbwff{sfqjfm`fgnlpw#ojhfoztjgfoz#vpfggjp`vppjlmpsqfpfm`f#le#+gl`vnfmw-f{wfmpjufozJw#kbp#affmjw#glfp#mlw`lmwqbqz#wljmkbajwbmwpjnsqlufnfmwp`klobqpkjs`lmpvnswjlmjmpwqv`wjlmelq#f{bnsoflmf#lq#nlqfs{8#sbggjmdwkf#`vqqfmwb#pfqjfp#lebqf#vpvboozqlof#jm#wkfsqfujlvpoz#gfqjubwjufpfujgfm`f#lef{sfqjfm`fp`lolqp`kfnfpwbwfg#wkbw`fqwjej`bwf?,b=?,gju=\\t#pfof`wfg>!kjdk#p`klloqfpslmpf#wl`lnelqwbaofbglswjlm#lewkqff#zfbqpwkf#`lvmwqzjm#Efaqvbqzpl#wkbw#wkfsflsof#tkl#sqlujgfg#az?sbqbn#mbnfbeef`wfg#azjm#wfqnp#lebssljmwnfmwJPL.;;6:.2!tbp#alqm#jmkjpwlqj`bo#qfdbqgfg#bpnfbpvqfnfmwjp#abpfg#lm#bmg#lwkfq#9#evm`wjlm+pjdmjej`bmw`fofaqbwjlmwqbmpnjwwfg,ip,irvfqz-jp#hmltm#bpwkflqfwj`bo#wbajmgf{>!jw#`lvog#af?mlp`qjsw=\\tkbujmd#affm\\u000E\\t?kfbg=\\u000E\\t?#%rvlw8Wkf#`lnsjobwjlmkf#kbg#affmsqlgv`fg#azskjolplskfq`lmpwqv`wfgjmwfmgfg#wlbnlmd#lwkfq`lnsbqfg#wlwl#pbz#wkbwFmdjmffqjmdb#gjeefqfmwqfefqqfg#wlgjeefqfm`fpafojfe#wkbwsklwldqbskpjgfmwjezjmdKjpwlqz#le#Qfsvaoj`#lemf`fppbqjozsqlabajojwzwf`kmj`boozofbujmd#wkfpsf`wb`vobqeqb`wjlm#lefof`wqj`jwzkfbg#le#wkfqfpwbvqbmwpsbqwmfqpkjsfnskbpjp#lmnlpw#qf`fmwpkbqf#tjwk#pbzjmd#wkbwejoofg#tjwkgfpjdmfg#wljw#jp#lewfm!=?,jeqbnf=bp#elooltp9nfqdfg#tjwkwkqlvdk#wkf`lnnfq`jbo#sljmwfg#lvwlsslqwvmjwzujft#le#wkfqfrvjqfnfmwgjujpjlm#lesqldqbnnjmdkf#qf`fjufgpfwJmwfqubo!=?,psbm=?,jm#Mft#Zlqhbggjwjlmbo#`lnsqfppjlm\\t\\t?gju#jg>!jm`lqslqbwf8?,p`qjsw=?bwwb`kFufmwaf`bnf#wkf#!#wbqdfw>!\\\\`bqqjfg#lvwPlnf#le#wkfp`jfm`f#bmgwkf#wjnf#le@lmwbjmfq!=nbjmwbjmjmd@kqjpwlskfqNv`k#le#wkftqjwjmdp#le!#kfjdkw>!1pjyf#le#wkfufqpjlm#le#nj{wvqf#le#afwtffm#wkfF{bnsofp#lefgv`bwjlmbo`lnsfwjwjuf#lmpvanjw>!gjqf`wlq#legjpwjm`wjuf,GWG#[KWNO#qfobwjmd#wlwfmgfm`z#wlsqlujm`f#letkj`k#tlvoggfpsjwf#wkfp`jfmwjej`#ofdjpobwvqf-jmmfqKWNO#boofdbwjlmpBdqj`vowvqftbp#vpfg#jmbssqlb`k#wljmwfoojdfmwzfbqp#obwfq/pbmp.pfqjegfwfqnjmjmdSfqelqnbm`fbssfbqbm`fp/#tkj`k#jp#elvmgbwjlmpbaaqfujbwfgkjdkfq#wkbmp#eqln#wkf#jmgjujgvbo#`lnslpfg#lepvsslpfg#wl`objnp#wkbwbwwqjavwjlmelmw.pjyf92fofnfmwp#leKjpwlqj`bo#kjp#aqlwkfqbw#wkf#wjnfbmmjufqpbqzdlufqmfg#azqfobwfg#wl#vowjnbwfoz#jmmlubwjlmpjw#jp#pwjoo`bm#lmoz#afgfejmjwjlmpwlDNWPwqjmdB#mvnafq#lejnd#`obpp>!Fufmwvbooz/tbp#`kbmdfgl``vqqfg#jmmfjdkalqjmdgjpwjmdvjpktkfm#kf#tbpjmwqlgv`jmdwfqqfpwqjboNbmz#le#wkfbqdvfp#wkbwbm#Bnfqj`bm`lmrvfpw#letjgfpsqfbg#tfqf#hjoofgp`qffm#bmg#Jm#lqgfq#wlf{sf`wfg#wlgfp`fmgbmwpbqf#ol`bwfgofdjpobwjufdfmfqbwjlmp#ab`hdqlvmgnlpw#sflsofzfbqp#bewfqwkfqf#jp#mlwkf#kjdkfpweqfrvfmwoz#wkfz#gl#mlwbqdvfg#wkbwpkltfg#wkbwsqfglnjmbmwwkfloldj`boaz#wkf#wjnf`lmpjgfqjmdpklqw.ojufg?,psbm=?,b=`bm#af#vpfgufqz#ojwwoflmf#le#wkf#kbg#boqfbgzjmwfqsqfwfg`lnnvmj`bwfefbwvqfp#ledlufqmnfmw/?,mlp`qjsw=fmwfqfg#wkf!#kfjdkw>!0Jmgfsfmgfmwslsvobwjlmpobqdf.p`bof-#Bowklvdk#vpfg#jm#wkfgfpwqv`wjlmslppjajojwzpwbqwjmd#jmwtl#lq#nlqff{sqfppjlmppvalqgjmbwfobqdfq#wkbmkjpwlqz#bmg?,lswjlm=\\u000E\\t@lmwjmfmwbofojnjmbwjmdtjoo#mlw#afsqb`wj`f#lejm#eqlmw#lepjwf#le#wkffmpvqf#wkbwwl#`qfbwf#bnjppjppjssjslwfmwjboozlvwpwbmgjmdafwwfq#wkbmtkbw#jp#mltpjwvbwfg#jmnfwb#mbnf>!WqbgjwjlmbopvddfpwjlmpWqbmpobwjlmwkf#elqn#lebwnlpskfqj`jgfloldj`bofmwfqsqjpfp`bo`vobwjmdfbpw#le#wkfqfnmbmwp#lesovdjmpsbdf,jmgf{-sks<qfnbjmfg#jmwqbmpelqnfgKf#tbp#bopltbp#boqfbgzpwbwjpwj`bojm#ebulq#leNjmjpwqz#lenlufnfmw#leelqnvobwjlmjp#qfrvjqfg?ojmh#qfo>!Wkjp#jp#wkf#?b#kqfe>!,slsvobqjyfgjmuloufg#jmbqf#vpfg#wlbmg#pfufqbonbgf#az#wkfpffnp#wl#afojhfoz#wkbwSbofpwjmjbmmbnfg#bewfqjw#kbg#affmnlpw#`lnnlmwl#qfefq#wlavw#wkjp#jp`lmpf`vwjufwfnslqbqjozJm#dfmfqbo/`lmufmwjlmpwbhfp#sob`fpvagjujpjlmwfqqjwlqjbolsfqbwjlmbosfqnbmfmwoztbp#obqdfozlvwaqfbh#lejm#wkf#sbpwelooltjmd#b#{nomp9ld>!=?b#`obpp>!`obpp>!wf{w@lmufqpjlm#nbz#af#vpfgnbmveb`wvqfbewfq#afjmd`ofbqej{!=\\trvfpwjlm#letbp#fof`wfgwl#af`lnf#baf`bvpf#le#plnf#sflsofjmpsjqfg#azpv``fppevo#b#wjnf#tkfmnlqf#`lnnlmbnlmdpw#wkfbm#leej`jbotjgwk9233&8wf`kmloldz/tbp#bglswfgwl#hffs#wkfpfwwofnfmwpojuf#ajqwkpjmgf{-kwno!@lmmf`wj`vwbppjdmfg#wl%bns8wjnfp8b``lvmw#elqbojdm>qjdkwwkf#`lnsbmzbotbzp#affmqfwvqmfg#wljmuloufnfmwAf`bvpf#wkfwkjp#sfqjlg!#mbnf>!r!#`lmejmfg#wlb#qfpvow#leubovf>!!#,=jp#b`wvboozFmujqlmnfmw\\u000E\\t?,kfbg=\\u000E\\t@lmufqpfoz/=\\t?gju#jg>!3!#tjgwk>!2jp#sqlabaozkbuf#af`lnf`lmwqloojmdwkf#sqlaofn`jwjyfmp#leslojwj`jbmpqfb`kfg#wkfbp#fbqoz#bp9mlmf8#lufq?wbaof#`fooubojgjwz#legjqf`woz#wllmnlvpfgltmtkfqf#jw#jptkfm#jw#tbpnfnafqp#le#qfobwjlm#wlb``lnnlgbwfbolmd#tjwk#Jm#wkf#obwfwkf#Fmdojpkgfoj`jlvp!=wkjp#jp#mlwwkf#sqfpfmwje#wkfz#bqfbmg#ejmboozb#nbwwfq#le\\u000E\\t\\n?,gju=\\u000E\\t\\u000E\\t?,p`qjsw=ebpwfq#wkbmnbilqjwz#lebewfq#tkj`k`lnsbqbwjufwl#nbjmwbjmjnsqluf#wkfbtbqgfg#wkffq!#`obpp>!eqbnfalqgfqqfpwlqbwjlmjm#wkf#pbnfbmbozpjp#lewkfjq#ejqpwGvqjmd#wkf#`lmwjmfmwbopfrvfm`f#leevm`wjlm+*xelmw.pjyf9#tlqh#lm#wkf?,p`qjsw=\\t?afdjmp#tjwkibubp`qjsw9`lmpwjwvfmwtbp#elvmgfgfrvjojaqjvnbppvnf#wkbwjp#djufm#azmffgp#wl#af`llqgjmbwfpwkf#ubqjlvpbqf#sbqw#lelmoz#jm#wkfpf`wjlmp#lejp#b#`lnnlmwkflqjfp#legjp`lufqjfpbppl`jbwjlmfgdf#le#wkfpwqfmdwk#leslpjwjlm#jmsqfpfmw.gbzvmjufqpboozwl#elqn#wkfavw#jmpwfbg`lqslqbwjlmbwwb`kfg#wljp#`lnnlmozqfbplmp#elq#%rvlw8wkf#`bm#af#nbgftbp#baof#wltkj`k#nfbmpavw#gjg#mlwlmNlvpfLufqbp#slppjaoflsfqbwfg#az`lnjmd#eqlnwkf#sqjnbqzbggjwjlm#leelq#pfufqbowqbmpefqqfgb#sfqjlg#lebqf#baof#wlkltfufq/#jwpklvog#kbufnv`k#obqdfq\\t\\n?,p`qjsw=bglswfg#wkfsqlsfqwz#legjqf`wfg#azfeef`wjufoztbp#aqlvdkw`kjogqfm#leSqldqbnnjmdolmdfq#wkbmnbmvp`qjswptbq#bdbjmpwaz#nfbmp#lebmg#nlpw#lepjnjobq#wl#sqlsqjfwbqzlqjdjmbwjmdsqfpwjdjlvpdqbnnbwj`bof{sfqjfm`f-wl#nbhf#wkfJw#tbp#bopljp#elvmg#jm`lnsfwjwlqpjm#wkf#V-P-qfsob`f#wkfaqlvdkw#wkf`bo`vobwjlmeboo#le#wkfwkf#dfmfqbosqb`wj`boozjm#klmlq#leqfofbpfg#jmqfpjgfmwjbobmg#plnf#lehjmd#le#wkfqfb`wjlm#wl2pw#Fbqo#le`vowvqf#bmgsqjm`jsbooz?,wjwof=\\t##wkfz#`bm#afab`h#wl#wkfplnf#le#kjpf{slpvqf#wlbqf#pjnjobqelqn#le#wkfbggEbulqjwf`jwjyfmpkjssbqw#jm#wkfsflsof#tjwkjm#sqb`wj`fwl#`lmwjmvf%bns8njmvp8bssqlufg#az#wkf#ejqpw#booltfg#wkfbmg#elq#wkfevm`wjlmjmdsobzjmd#wkfplovwjlm#wlkfjdkw>!3!#jm#kjp#allhnlqf#wkbm#belooltp#wkf`qfbwfg#wkfsqfpfm`f#jm%maps8?,wg=mbwjlmbojpwwkf#jgfb#leb#`kbqb`wfqtfqf#elq`fg#`obpp>!awmgbzp#le#wkfefbwvqfg#jmpkltjmd#wkfjmwfqfpw#jmjm#sob`f#lewvqm#le#wkfwkf#kfbg#leOlqg#le#wkfslojwj`boozkbp#jwp#ltmFgv`bwjlmbobssqlubo#leplnf#le#wkffb`k#lwkfq/afkbujlq#lebmg#af`bvpfbmg#bmlwkfqbssfbqfg#lmqf`lqgfg#jmaob`h%rvlw8nbz#jm`ovgfwkf#tlqog$p`bm#ofbg#wlqfefqp#wl#balqgfq>!3!#dlufqmnfmw#tjmmjmd#wkfqfpvowfg#jm#tkjof#wkf#Tbpkjmdwlm/wkf#pvaif`w`jwz#jm#wkf=?,gju=\\u000E\\t\\n\\nqfeof`w#wkfwl#`lnsofwfaf`bnf#nlqfqbgjlb`wjufqfif`wfg#aztjwklvw#bmzkjp#ebwkfq/tkj`k#`lvog`lsz#le#wkfwl#jmgj`bwfb#slojwj`bob``lvmwp#le`lmpwjwvwfptlqhfg#tjwkfq?,b=?,oj=le#kjp#ojefb``lnsbmjfg`ojfmwTjgwksqfufmw#wkfOfdjpobwjufgjeefqfmwozwldfwkfq#jmkbp#pfufqboelq#bmlwkfqwf{w#le#wkfelvmgfg#wkff#tjwk#wkf#jp#vpfg#elq`kbmdfg#wkfvpvbooz#wkfsob`f#tkfqftkfqfbp#wkf=#?b#kqfe>!!=?b#kqfe>!wkfnpfoufp/bowklvdk#kfwkbw#`bm#afwqbgjwjlmboqlof#le#wkfbp#b#qfpvowqfnluf@kjoggfpjdmfg#aztfpw#le#wkfPlnf#sflsofsqlgv`wjlm/pjgf#le#wkfmftpofwwfqpvpfg#az#wkfgltm#wl#wkfb``fswfg#azojuf#jm#wkfbwwfnswp#wllvwpjgf#wkfeqfrvfm`jfpKltfufq/#jmsqldqbnnfqpbw#ofbpw#jmbssql{jnbwfbowklvdk#jwtbp#sbqw#lebmg#ubqjlvpDlufqmlq#lewkf#bqwj`ofwvqmfg#jmwl=?b#kqfe>!,wkf#f`lmlnzjp#wkf#nlpwnlpw#tjgfoztlvog#obwfqbmg#sfqkbspqjpf#wl#wkfl``vqp#tkfmvmgfq#tkj`k`lmgjwjlmp-wkf#tfpwfqmwkflqz#wkbwjp#sqlgv`fgwkf#`jwz#lejm#tkj`k#kfpffm#jm#wkfwkf#`fmwqboavjogjmd#lenbmz#le#kjpbqfb#le#wkfjp#wkf#lmoznlpw#le#wkfnbmz#le#wkfwkf#TfpwfqmWkfqf#jp#mlf{wfmgfg#wlPwbwjpwj`bo`lopsbm>1#\\u007Fpklqw#pwlqzslppjaof#wlwlsloldj`bo`qjwj`bo#leqfslqwfg#wlb#@kqjpwjbmgf`jpjlm#wljp#frvbo#wlsqlaofnp#leWkjp#`bm#afnfq`kbmgjpfelq#nlpw#leml#fujgfm`ffgjwjlmp#lefofnfmwp#jm%rvlw8-#Wkf`ln,jnbdfp,tkj`k#nbhfpwkf#sql`fppqfnbjmp#wkfojwfqbwvqf/jp#b#nfnafqwkf#slsvobqwkf#bm`jfmwsqlaofnp#jmwjnf#le#wkfgfefbwfg#azalgz#le#wkfb#eft#zfbqpnv`k#le#wkfwkf#tlqh#le@bojelqmjb/pfqufg#bp#bdlufqmnfmw-`lm`fswp#lenlufnfmw#jm\\n\\n?gju#jg>!jw!#ubovf>!obmdvbdf#lebp#wkfz#bqfsqlgv`fg#jmjp#wkbw#wkff{sobjm#wkfgju=?,gju=\\tKltfufq#wkfofbg#wl#wkf\\n?b#kqfe>!,tbp#dqbmwfgsflsof#kbuf`lmwjmvbooztbp#pffm#bpbmg#qfobwfgwkf#qlof#lesqlslpfg#azle#wkf#afpwfb`k#lwkfq-@lmpwbmwjmfsflsof#eqlngjbof`wp#lewl#qfujpjlmtbp#qfmbnfgb#plvq`f#lewkf#jmjwjboobvm`kfg#jmsqlujgf#wkfwl#wkf#tfpwtkfqf#wkfqfbmg#pjnjobqafwtffm#wtljp#bopl#wkfFmdojpk#bmg`lmgjwjlmp/wkbw#jw#tbpfmwjwofg#wlwkfnpfoufp-rvbmwjwz#leqbmpsbqfm`zwkf#pbnf#bpwl#iljm#wkf`lvmwqz#bmgwkjp#jp#wkfWkjp#ofg#wlb#pwbwfnfmw`lmwqbpw#wlobpwJmgf{Lewkqlvdk#kjpjp#gfpjdmfgwkf#wfqn#jpjp#sqlujgfgsqlwf`w#wkfmd?,b=?,oj=Wkf#`vqqfmwwkf#pjwf#lepvapwbmwjbof{sfqjfm`f/jm#wkf#Tfpwwkfz#pklvogpolufm(ajmb`lnfmwbqjlpvmjufqpjgbg`lmgj`jlmfpb`wjujgbgfpf{sfqjfm`jbwf`mlold/Absqlgv``j/_msvmwvb`j/_mbsoj`b`j/_m`lmwqbpf/]b`bwfdlq/Abpqfdjpwqbqpfsqlefpjlmbowqbwbnjfmwlqfd/Apwqbwfpf`qfwbq/Absqjm`jsbofpsqlwf``j/_mjnslqwbmwfpjnslqwbm`jbslpjajojgbgjmwfqfpbmwf`qf`jnjfmwlmf`fpjgbgfppvp`qjajqpfbpl`jb`j/_mgjpslmjaofpfubovb`j/_mfpwvgjbmwfpqfpslmpbaofqfplov`j/_mdvbgbobibqbqfdjpwqbglplslqwvmjgbg`lnfq`jbofpelwldqbe/Abbvwlqjgbgfpjmdfmjfq/Abwfofujpj/_m`lnsfwfm`jblsfqb`jlmfpfpwbaof`jglpjnsofnfmwfb`wvbonfmwfmbufdb`j/_m`lmelqnjgbgojmf.kfjdkw9elmw.ebnjoz9!#9#!kwws9,,bssoj`bwjlmpojmh!#kqfe>!psf`jej`booz,,?\\\"X@GBWBX\\tLqdbmjybwjlmgjpwqjavwjlm3s{8#kfjdkw9qfobwjlmpkjsgfuj`f.tjgwk?gju#`obpp>!?obafo#elq>!qfdjpwqbwjlm?,mlp`qjsw=\\t,jmgf{-kwno!tjmglt-lsfm+#\\\"jnslqwbmw8bssoj`bwjlm,jmgfsfmgfm`f,,ttt-dlldoflqdbmjybwjlmbvwl`lnsofwfqfrvjqfnfmwp`lmpfqubwjuf?elqn#mbnf>!jmwfoof`wvbonbqdjm.ofew92;wk#`fmwvqzbm#jnslqwbmwjmpwjwvwjlmpbaaqfujbwjlm?jnd#`obpp>!lqdbmjpbwjlm`jujojybwjlm2:wk#`fmwvqzbq`kjwf`wvqfjm`lqslqbwfg13wk#`fmwvqz.`lmwbjmfq!=nlpw#mlwbaoz,=?,b=?,gju=mlwjej`bwjlm$vmgfejmfg$*Evqwkfqnlqf/afojfuf#wkbwjmmfqKWNO#>#sqjlq#wl#wkfgqbnbwj`boozqfefqqjmd#wlmfdlwjbwjlmpkfbgrvbqwfqpPlvwk#Beqj`bvmpv``fppevoSfmmpzoubmjbBp#b#qfpvow/?kwno#obmd>!%ow8,pvs%dw8gfbojmd#tjwkskjobgfoskjbkjpwlqj`booz*8?,p`qjsw=\\tsbggjmd.wls9f{sfqjnfmwbodfwBwwqjavwfjmpwqv`wjlmpwf`kmloldjfpsbqw#le#wkf#>evm`wjlm+*xpvap`qjswjlmo-gwg!=\\u000E\\t?kwdfldqbskj`bo@lmpwjwvwjlm$/#evm`wjlm+pvsslqwfg#azbdqj`vowvqbo`lmpwqv`wjlmsvaoj`bwjlmpelmw.pjyf9#2b#ubqjfwz#le?gju#pwzof>!Fm`z`olsfgjbjeqbnf#pq`>!gfnlmpwqbwfgb``lnsojpkfgvmjufqpjwjfpGfnldqbskj`p*8?,p`qjsw=?gfgj`bwfg#wlhmltofgdf#lepbwjpeb`wjlmsbqwj`vobqoz?,gju=?,gju=Fmdojpk#+VP*bssfmg@kjog+wqbmpnjppjlmp-#Kltfufq/#jmwfoojdfm`f!#wbajmgf{>!eolbw9qjdkw8@lnnlmtfbowkqbmdjmd#eqlnjm#tkj`k#wkfbw#ofbpw#lmfqfsqlgv`wjlmfm`z`olsfgjb8elmw.pjyf92ivqjpgj`wjlmbw#wkbw#wjnf!=?b#`obpp>!Jm#bggjwjlm/gfp`qjswjlm(`lmufqpbwjlm`lmwb`w#tjwkjp#dfmfqboozq!#`lmwfmw>!qfsqfpfmwjmd%ow8nbwk%dw8sqfpfmwbwjlml``bpjlmbooz?jnd#tjgwk>!mbujdbwjlm!=`lnsfmpbwjlm`kbnsjlmpkjsnfgjb>!boo!#ujlobwjlm#leqfefqfm`f#wlqfwvqm#wqvf8Pwqj`w,,FM!#wqbmpb`wjlmpjmwfqufmwjlmufqjej`bwjlmJmelqnbwjlm#gjeej`vowjfp@kbnsjlmpkjs`bsbajojwjfp?\\\"Xfmgje^..=~\\t?,p`qjsw=\\t@kqjpwjbmjwzelq#f{bnsof/Sqlefppjlmboqfpwqj`wjlmppvddfpw#wkbwtbp#qfofbpfg+pv`k#bp#wkfqfnluf@obpp+vmfnsolznfmwwkf#Bnfqj`bmpwqv`wvqf#le,jmgf{-kwno#svaojpkfg#jmpsbm#`obpp>!!=?b#kqfe>!,jmwqlgv`wjlmafolmdjmd#wl`objnfg#wkbw`lmpfrvfm`fp?nfwb#mbnf>!Dvjgf#wl#wkflufqtkfonjmdbdbjmpw#wkf#`lm`fmwqbwfg/\\t-mlmwlv`k#lapfqubwjlmp?,b=\\t?,gju=\\te#+gl`vnfmw-alqgfq9#2s{#xelmw.pjyf92wqfbwnfmw#le3!#kfjdkw>!2nlgjej`bwjlmJmgfsfmgfm`fgjujgfg#jmwldqfbwfq#wkbmb`kjfufnfmwpfpwbaojpkjmdIbubP`qjsw!#mfufqwkfofpppjdmjej`bm`fAqlbg`bpwjmd=%maps8?,wg=`lmwbjmfq!=\\tpv`k#bp#wkf#jmeovfm`f#leb#sbqwj`vobqpq`>$kwws9,,mbujdbwjlm!#kboe#le#wkf#pvapwbmwjbo#%maps8?,gju=bgubmwbdf#legjp`lufqz#leevmgbnfmwbo#nfwqlslojwbmwkf#lsslpjwf!#{no9obmd>!gfojafqbwfozbojdm>`fmwfqfulovwjlm#lesqfpfqubwjlmjnsqlufnfmwpafdjmmjmd#jmIfpvp#@kqjpwSvaoj`bwjlmpgjpbdqffnfmwwf{w.bojdm9q/#evm`wjlm+*pjnjobqjwjfpalgz=?,kwno=jp#`vqqfmwozboskbafwj`bojp#plnfwjnfpwzsf>!jnbdf,nbmz#le#wkf#eolt9kjggfm8bubjobaof#jmgfp`qjaf#wkff{jpwfm`f#leboo#lufq#wkfwkf#Jmwfqmfw\\n?vo#`obpp>!jmpwboobwjlmmfjdkalqkllgbqnfg#elq`fpqfgv`jmd#wkf`lmwjmvfp#wlMlmfwkfofpp/wfnsfqbwvqfp\\t\\n\\n?b#kqfe>!`olpf#wl#wkff{bnsofp#le#jp#balvw#wkf+pff#afolt*-!#jg>!pfbq`ksqlefppjlmbojp#bubjobaofwkf#leej`jbo\\n\\n?,p`qjsw=\\t\\t\\n\\n?gju#jg>!b``fofqbwjlmwkqlvdk#wkf#Kboo#le#Ebnfgfp`qjswjlmpwqbmpobwjlmpjmwfqefqfm`f#wzsf>$wf{w,qf`fmw#zfbqpjm#wkf#tlqogufqz#slsvobqxab`hdqlvmg9wqbgjwjlmbo#plnf#le#wkf#`lmmf`wfg#wlf{soljwbwjlmfnfqdfm`f#le`lmpwjwvwjlmB#Kjpwlqz#lepjdmjej`bmw#nbmveb`wvqfgf{sf`wbwjlmp=?mlp`qjsw=?`bm#af#elvmgaf`bvpf#wkf#kbp#mlw#affmmfjdkalvqjmdtjwklvw#wkf#bggfg#wl#wkf\\n?oj#`obpp>!jmpwqvnfmwboPlujfw#Vmjlmb`hmltofgdfgtkj`k#`bm#afmbnf#elq#wkfbwwfmwjlm#wlbwwfnswp#wl#gfufolsnfmwpJm#eb`w/#wkf?oj#`obpp>!bjnsoj`bwjlmppvjwbaof#elqnv`k#le#wkf#`lolmjybwjlmsqfpjgfmwjbo`bm`foAvaaof#Jmelqnbwjlmnlpw#le#wkf#jp#gfp`qjafgqfpw#le#wkf#nlqf#lq#ofppjm#PfswfnafqJmwfoojdfm`fpq`>!kwws9,,s{8#kfjdkw9#bubjobaof#wlnbmveb`wvqfqkvnbm#qjdkwpojmh#kqfe>!,bubjobajojwzsqlslqwjlmbolvwpjgf#wkf#bpwqlmlnj`bokvnbm#afjmdpmbnf#le#wkf#bqf#elvmg#jmbqf#abpfg#lmpnboofq#wkbmb#sfqplm#tklf{sbmpjlm#lebqdvjmd#wkbwmlt#hmltm#bpJm#wkf#fbqozjmwfqnfgjbwfgfqjufg#eqlnP`bmgjmbujbm?,b=?,gju=\\u000E\\t`lmpjgfq#wkfbm#fpwjnbwfgwkf#Mbwjlmbo?gju#jg>!sbdqfpvowjmd#jm`lnnjppjlmfgbmboldlvp#wlbqf#qfrvjqfg,vo=\\t?,gju=\\ttbp#abpfg#lmbmg#af`bnf#b%maps8%maps8w!#ubovf>!!#tbp#`bswvqfgml#nlqf#wkbmqfpsf`wjufoz`lmwjmvf#wl#=\\u000E\\t?kfbg=\\u000E\\t?tfqf#`qfbwfgnlqf#dfmfqbojmelqnbwjlm#vpfg#elq#wkfjmgfsfmgfmw#wkf#Jnsfqjbo`lnslmfmw#lewl#wkf#mlqwkjm`ovgf#wkf#@lmpwqv`wjlmpjgf#le#wkf#tlvog#mlw#afelq#jmpwbm`fjmufmwjlm#lenlqf#`lnsof{`loof`wjufozab`hdqlvmg9#wf{w.bojdm9#jwp#lqjdjmbojmwl#b``lvmwwkjp#sql`fppbm#f{wfmpjufkltfufq/#wkfwkfz#bqf#mlwqfif`wfg#wkf`qjwj`jpn#legvqjmd#tkj`ksqlabaoz#wkfwkjp#bqwj`of+evm`wjlm+*xJw#pklvog#afbm#bdqffnfmwb``jgfmwboozgjeefqp#eqlnBq`kjwf`wvqfafwwfq#hmltmbqqbmdfnfmwpjmeovfm`f#lmbwwfmgfg#wkfjgfmwj`bo#wlplvwk#le#wkfsbpp#wkqlvdk{no!#wjwof>!tfjdkw9alog8`qfbwjmd#wkfgjpsobz9mlmfqfsob`fg#wkf?jnd#pq`>!,jkwwsp9,,ttt-Tlqog#Tbq#JJwfpwjnlmjbopelvmg#jm#wkfqfrvjqfg#wl#bmg#wkbw#wkfafwtffm#wkf#tbp#gfpjdmfg`lmpjpwp#le#`lmpjgfqbaozsvaojpkfg#azwkf#obmdvbdf@lmpfqubwjlm`lmpjpwfg#leqfefq#wl#wkfab`h#wl#wkf#`pp!#nfgjb>!Sflsof#eqln#bubjobaof#lmsqlufg#wl#afpvddfpwjlmp!tbp#hmltm#bpubqjfwjfp#leojhfoz#wl#af`lnsqjpfg#lepvsslqw#wkf#kbmgp#le#wkf`lvsofg#tjwk`lmmf`w#bmg#alqgfq9mlmf8sfqelqnbm`fpafelqf#afjmdobwfq#af`bnf`bo`vobwjlmplewfm#`boofgqfpjgfmwp#lenfbmjmd#wkbw=?oj#`obpp>!fujgfm`f#elqf{sobmbwjlmpfmujqlmnfmwp!=?,b=?,gju=tkj`k#booltpJmwqlgv`wjlmgfufolsfg#azb#tjgf#qbmdflm#afkboe#leubojdm>!wls!sqjm`jsof#lebw#wkf#wjnf/?,mlp`qjsw=\\u000Epbjg#wl#kbufjm#wkf#ejqpwtkjof#lwkfqpkzslwkfwj`boskjolplskfqpsltfq#le#wkf`lmwbjmfg#jmsfqelqnfg#azjmbajojwz#wltfqf#tqjwwfmpsbm#pwzof>!jmsvw#mbnf>!wkf#rvfpwjlmjmwfmgfg#elqqfif`wjlm#lejnsojfp#wkbwjmufmwfg#wkfwkf#pwbmgbqgtbp#sqlabaozojmh#afwtffmsqlefpplq#lejmwfqb`wjlmp`kbmdjmd#wkfJmgjbm#L`fbm#`obpp>!obpwtlqhjmd#tjwk$kwws9,,ttt-zfbqp#afelqfWkjp#tbp#wkfqf`qfbwjlmbofmwfqjmd#wkfnfbpvqfnfmwpbm#f{wqfnfozubovf#le#wkfpwbqw#le#wkf\\t?,p`qjsw=\\t\\tbm#feelqw#wljm`qfbpf#wkfwl#wkf#plvwkpsb`jmd>!3!=pveej`jfmwozwkf#Fvqlsfbm`lmufqwfg#wl`ofbqWjnflvwgjg#mlw#kbuf`lmpfrvfmwozelq#wkf#mf{wf{wfmpjlm#lef`lmlnj`#bmgbowklvdk#wkfbqf#sqlgv`fgbmg#tjwk#wkfjmpveej`jfmwdjufm#az#wkfpwbwjmd#wkbwf{sfmgjwvqfp?,psbm=?,b=\\twklvdkw#wkbwlm#wkf#abpjp`foosbggjmd>jnbdf#le#wkfqfwvqmjmd#wljmelqnbwjlm/pfsbqbwfg#azbppbppjmbwfgp!#`lmwfmw>!bvwklqjwz#lemlqwktfpwfqm?,gju=\\t?gju#!=?,gju=\\u000E\\t##`lmpvowbwjlm`lnnvmjwz#lewkf#mbwjlmbojw#pklvog#afsbqwj`jsbmwp#bojdm>!ofewwkf#dqfbwfpwpfof`wjlm#lepvsfqmbwvqbogfsfmgfmw#lmjp#nfmwjlmfgbooltjmd#wkftbp#jmufmwfgb``lnsbmzjmdkjp#sfqplmbobubjobaof#bwpwvgz#le#wkflm#wkf#lwkfqf{f`vwjlm#leKvnbm#Qjdkwpwfqnp#le#wkfbppl`jbwjlmpqfpfbq`k#bmgpv``ffgfg#azgfefbwfg#wkfbmg#eqln#wkfavw#wkfz#bqf`lnnbmgfq#lepwbwf#le#wkfzfbqp#le#bdfwkf#pwvgz#le?vo#`obpp>!psob`f#jm#wkftkfqf#kf#tbp?oj#`obpp>!ewkfqf#bqf#mltkj`k#af`bnfkf#svaojpkfgf{sqfppfg#jmwl#tkj`k#wkf`lnnjppjlmfqelmw.tfjdkw9wfqqjwlqz#lef{wfmpjlmp!=Qlnbm#Fnsjqffrvbo#wl#wkfJm#`lmwqbpw/kltfufq/#bmgjp#wzsj`boozbmg#kjp#tjef+bopl#`boofg=?vo#`obpp>!feef`wjufoz#fuloufg#jmwlpffn#wl#kbuftkj`k#jp#wkfwkfqf#tbp#mlbm#f{`foofmwboo#le#wkfpfgfp`qjafg#azJm#sqb`wj`f/aqlbg`bpwjmd`kbqdfg#tjwkqfeof`wfg#jmpvaif`wfg#wlnjojwbqz#bmgwl#wkf#sljmwf`lmlnj`boozpfwWbqdfwjmdbqf#b`wvboozuj`wlqz#lufq+*8?,p`qjsw=`lmwjmvlvpozqfrvjqfg#elqfulovwjlmbqzbm#feef`wjufmlqwk#le#wkf/#tkj`k#tbp#eqlmw#le#wkflq#lwkfqtjpfplnf#elqn#lekbg#mlw#affmdfmfqbwfg#azjmelqnbwjlm-sfqnjwwfg#wljm`ovgfp#wkfgfufolsnfmw/fmwfqfg#jmwlwkf#sqfujlvp`lmpjpwfmwozbqf#hmltm#bpwkf#ejfog#lewkjp#wzsf#ledjufm#wl#wkfwkf#wjwof#le`lmwbjmp#wkfjmpwbm`fp#lejm#wkf#mlqwkgvf#wl#wkfjqbqf#gfpjdmfg`lqslqbwjlmptbp#wkbw#wkflmf#le#wkfpfnlqf#slsvobqpv``ffgfg#jmpvsslqw#eqlnjm#gjeefqfmwglnjmbwfg#azgfpjdmfg#elqltmfqpkjs#lebmg#slppjaozpwbmgbqgjyfgqfpslmpfWf{wtbp#jmwfmgfgqf`fjufg#wkfbppvnfg#wkbwbqfbp#le#wkfsqjnbqjoz#jmwkf#abpjp#lejm#wkf#pfmpfb``lvmwp#elqgfpwqlzfg#azbw#ofbpw#wtltbp#gf`obqfg`lvog#mlw#afPf`qfwbqz#lebssfbq#wl#afnbqdjm.wls92,]_p(\\u007F_p(',df*xwkqlt#f~8wkf#pwbqw#lewtl#pfsbqbwfobmdvbdf#bmgtkl#kbg#affmlsfqbwjlm#legfbwk#le#wkfqfbo#mvnafqp\\n?ojmh#qfo>!sqlujgfg#wkfwkf#pwlqz#le`lnsfwjwjlmpfmdojpk#+VH*fmdojpk#+VP*<p<R<Q<_<R<W<M=l<S=m<V<T=m=l<S=m<V<T=m=l<S=m<V<R5h4U4]4D5f4E\\nAO\\u0005Gx\\bTA\\nzk\\u000BBl\\bQ\\u007F\\bTA\\nzk\\u000BUm\\bQ\\u007F\\bTA\\nzk\\npe\\u0005u|\\ti@\\tcT\\bVV\\n\\\\}\\nxS\\tVp\\u0005tS\\u0005k`\\t[X\\t[X\\u000BHR\\bPv\\bTW\\bUe\\n\\u007Fa\\bQp\\u000B_W\\u000BWs\\nxS\\u000BAz\\n_y\\u0004Khjmelqnb`j/_mkfqqbnjfmwbpfof`wq/_mj`lgfp`qjs`j/_m`obpjej`bglp`lml`jnjfmwlsvaoj`b`j/_mqfob`jlmbgbpjmelqn/Mwj`bqfob`jlmbglpgfsbqwbnfmwlwqbabibglqfpgjqf`wbnfmwfbzvmwbnjfmwlnfq`bglOjaqf`lmw/M`wfmlpkbajwb`jlmfp`vnsojnjfmwlqfpwbvqbmwfpgjpslpj`j/_m`lmpf`vfm`jbfof`wq/_mj`bbsoj`b`jlmfpgfp`lmf`wbgljmpwbob`j/_mqfbojyb`j/_mvwjojyb`j/_mfm`j`olsfgjbfmefqnfgbgfpjmpwqvnfmwlpf{sfqjfm`jbpjmpwjwv`j/_msbqwj`vobqfppva`bwfdlqjb=n<R<W=`<V<R<L<R=m=m<T<T=l<\\\\<]<R=n=g<]<R<W=`=d<Y<S=l<R=m=n<R<P<R<Z<Y=n<Y<X=l=o<_<T=i=m<W=o=k<\\\\<Y=m<Y<U=k<\\\\=m<^=m<Y<_<X<\\\\<L<R=m=m<T=c<p<R=m<V<^<Y<X=l=o<_<T<Y<_<R=l<R<X<\\\\<^<R<S=l<R=m<X<\\\\<Q<Q=g=i<X<R<W<Z<Q=g<T<P<Y<Q<Q<R<p<R=m<V<^=g=l=o<]<W<Y<U<p<R=m<V<^<\\\\=m=n=l<\\\\<Q=g<Q<T=k<Y<_<R=l<\\\\<]<R=n<Y<X<R<W<Z<Y<Q=o=m<W=o<_<T=n<Y<S<Y=l=`<r<X<Q<\\\\<V<R<S<R=n<R<P=o=l<\\\\<]<R=n=o<\\\\<S=l<Y<W=c<^<R<R<]=e<Y<R<X<Q<R<_<R=m<^<R<Y<_<R=m=n<\\\\=n=`<T<X=l=o<_<R<U=h<R=l=o<P<Y=i<R=l<R=d<R<S=l<R=n<T<^=m=m=g<W<V<\\\\<V<\\\\<Z<X=g<U<^<W<\\\\=m=n<T<_=l=o<S<S=g<^<P<Y=m=n<Y=l<\\\\<]<R=n<\\\\=m<V<\\\\<[<\\\\<W<S<Y=l<^=g<U<X<Y<W<\\\\=n=`<X<Y<Q=`<_<T<S<Y=l<T<R<X<]<T<[<Q<Y=m<R=m<Q<R<^<Y<P<R<P<Y<Q=n<V=o<S<T=n=`<X<R<W<Z<Q<\\\\=l<\\\\<P<V<\\\\=i<Q<\\\\=k<\\\\<W<R<L<\\\\<]<R=n<\\\\<N<R<W=`<V<R=m<R<^=m<Y<P<^=n<R=l<R<U<Q<\\\\=k<\\\\<W<\\\\=m<S<T=m<R<V=m<W=o<Z<]=g=m<T=m=n<Y<P<S<Y=k<\\\\=n<T<Q<R<^<R<_<R<S<R<P<R=e<T=m<\\\\<U=n<R<^<S<R=k<Y<P=o<S<R<P<R=e=`<X<R<W<Z<Q<R=m=m=g<W<V<T<]=g=m=n=l<R<X<\\\\<Q<Q=g<Y<P<Q<R<_<T<Y<S=l<R<Y<V=n<M<Y<U=k<\\\\=m<P<R<X<Y<W<T=n<\\\\<V<R<_<R<R<Q<W<\\\\<U<Q<_<R=l<R<X<Y<^<Y=l=m<T=c=m=n=l<\\\\<Q<Y=h<T<W=`<P=g=o=l<R<^<Q=c=l<\\\\<[<Q=g=i<T=m<V<\\\\=n=`<Q<Y<X<Y<W=b=c<Q<^<\\\\=l=c<P<Y<Q=`=d<Y<P<Q<R<_<T=i<X<\\\\<Q<Q<R<U<[<Q<\\\\=k<T=n<Q<Y<W=`<[=c=h<R=l=o<P<\\\\<N<Y<S<Y=l=`<P<Y=m=c=j<\\\\<[<\\\\=e<T=n=g<w=o=k=d<T<Y\\fHD\\fHU\\fIl\\fHn\\fHy\\fH\\\\\\fHD\\fIk\\fHi\\fHF\\fHD\\fIk\\fHy\\fHS\\fHC\\fHR\\fHy\\fH\\\\\\fIk\\fHn\\fHi\\fHD\\fIa\\fHC\\fHy\\fIa\\fHC\\fHR\\fH{\\fHR\\fHk\\fHM\\fH@\\fHR\\fH\\\\\\fIk\\fHy\\fHS\\fHT\\fIl\\fHJ\\fHS\\fHC\\fHR\\fHF\\fHU\\fH^\\fIk\\fHT\\fHS\\fHn\\fHU\\fHA\\fHR\\fH\\\\\\fHH\\fHi\\fHF\\fHD\\fIl\\fHY\\fHR\\fH^\\fIk\\fHT\\fIk\\fHY\\fHR\\fHy\\fH\\\\\\fHH\\fIk\\fHB\\fIk\\fH\\\\\\fIk\\fHU\\fIg\\fHD\\fIk\\fHT\\fHy\\fHH\\fIk\\fH@\\fHU\\fIm\\fHH\\fHT\\fHR\\fHk\\fHs\\fHU\\fIg\\fH{\\fHR\\fHp\\fHR\\fHD\\fIk\\fHB\\fHS\\fHD\\fHs\\fHy\\fH\\\\\\fHH\\fHR\\fHy\\fH\\\\\\fHD\\fHR\\fHe\\fHD\\fHy\\fIk\\fHC\\fHU\\fHR\\fHm\\fHT\\fH@\\fHT\\fIk\\fHA\\fHR\\fH[\\fHR\\fHj\\fHF\\fHy\\fIk\\fH^\\fHS\\fHC\\fIk\\fHZ\\fIm\\fH\\\\\\fIn\\fHk\\fHT\\fHy\\fIk\\fHt\\fHn\\fHs\\fIk\\fHB\\fIk\\fH\\\\\\fIl\\fHT\\fHy\\fHH\\fHR\\fHB\\fIk\\fH\\\\\\fHR\\fH^\\fIk\\fHy\\fH\\\\\\fHi\\fHK\\fHS\\fHy\\fHi\\fHF\\fHD\\fHR\\fHT\\fHB\\fHR\\fHp\\fHB\\fIm\\fHq\\fIk\\fHy\\fHR\\fH\\\\\\fHO\\fHU\\fIg\\fHH\\fHR\\fHy\\fHM\\fHP\\fIl\\fHC\\fHU\\fHR\\fHn\\fHU\\fIg\\fHs\\fH^\\fHZ\\fH@\\fIa\\fHJ\\fH^\\fHS\\fHC\\fHR\\fHp\\fIl\\fHY\\fHD\\fHp\\fHR\\fHH\\fHR\\fHy\\fId\\fHT\\fIk\\fHj\\fHF\\fHy\\fHR\\fHY\\fHR\\fH^\\fIl\\fHJ\\fIk\\fHD\\fIk\\fHF\\fIn\\fH\\\\\\fIl\\fHF\\fHR\\fHD\\fIl\\fHe\\fHT\\fHy\\fIk\\fHU\\fIg\\fH{\\fIl\\fH@\\fId\\fHL\\fHy\\fHj\\fHF\\fHy\\fIl\\fHY\\fH\\\\\\fIa\\fH[\\fH{\\fHR\\fHn\\fHY\\fHj\\fHF\\fHy\\fIg\\fHp\\fHS\\fH^\\fHR\\fHp\\fHR\\fHD\\fHR\\fHT\\fHU\\fHB\\fHH\\fHU\\fHB\\fIk\\fHn\\fHe\\fHD\\fHy\\fIl\\fHC\\fHR\\fHU\\fIn\\fHJ\\fH\\\\\\fIa\\fHp\\fHT\\fIn\\fHv\\fIl\\fHF\\fHT\\fHn\\fHJ\\fHT\\fHY\\fHR\\fH^\\fHU\\fIg\\fHD\\fHR\\fHU\\fIg\\fHH\\fIl\\fHp\\fId\\fHT\\fIk\\fHY\\fHR\\fHF\\fHT\\fHp\\fHD\\fHH\\fHR\\fHD\\fIk\\fHH\\fHR\\fHp\\fHR\\fH\\\\\\fIl\\fHt\\fHR\\fHC\\fH^\\fHp\\fHS\\fH^\\fIk\\fHD\\fIl\\fHv\\fIk\\fHp\\fHR\\fHn\\fHv\\fHF\\fHH\\fIa\\fH\\\\\\fH{\\fIn\\fH{\\fH^\\fHp\\fHR\\fHH\\fIk\\fH@\\fHR\\fHU\\fH\\\\\\fHj\\fHF\\fHD\\fIk\\fHY\\fHR\\fHU\\fHD\\fHk\\fHT\\fHy\\fHR\\fHT\\fIm\\fH@\\fHU\\fH\\\\\\fHU\\fHD\\fIk\\fHk\\fHT\\fHT\\fIk\\fHT\\fHU\\fHS\\fHH\\fH@\\fHM\\fHP\\fIk\\fHt\\fHs\\fHD\\fHR\\fHH\\fH^\\fHR\\fHZ\\fHF\\fHR\\fHn\\fHv\\fHZ\\fIa\\fH\\\\\\fIl\\fH@\\fHM\\fHP\\fIl\\fHU\\fIg\\fHH\\fIk\\fHT\\fHR\\fHd\\fHs\\fHZ\\fHR\\fHC\\fHJ\\fHT\\fHy\\fHH\\fIl\\fHp\\fHR\\fHH\\fIl\\fHY\\fHR\\fH^\\fHR\\fHU\\fHp\\fHR\\fH\\\\\\fHF\\fHs\\fHD\\fHR\\fH\\\\\\fHz\\fHD\\fIk\\fHT\\fHM\\fHP\\fHy\\fHB\\fHS\\fH^\\fHR\\fHe\\fHT\\fHy\\fIl\\fHy\\fIk\\fHY\\fH^\\fH^\\fH{\\fHH\\fHR\\fHz\\fHR\\fHD\\fHR\\fHi\\fH\\\\\\fIa\\fHI\\fHp\\fHU\\fHR\\fHn\\fHJ\\fIk\\fHz\\fHR\\fHF\\fHU\\fH^\\fIl\\fHD\\fHS\\fHC\\fHB\\fH@\\fHS\\fHD\\fHR\\fH@\\fId\\fHn\\fHy\\fHy\\fHU\\fIl\\fHn\\fHy\\fHU\\fHD\\fHR\\fHJ\\fIk\\fHH\\fHR\\fHU\\fHB\\fH^\\fIk\\fHy\\fHR\\fHG\\fIl\\fHp\\fH@\\fHy\\fHS\\fHH\\fIm\\fH\\\\\\fHH\\fHB\\fHR\\fHn\\fH{\\fHY\\fHU\\fIl\\fHn\\fH\\\\\\fIg\\fHp\\fHP\\fHB\\fHS\\fH^\\fIl\\fHj\\fH\\\\\\fIg\\fHF\\fHT\\fIk\\fHD\\fHR\\fHC\\fHR\\fHJ\\fHY\\fH^\\fIk\\fHD\\fIk\\fHz\\fHR\\fHH\\fHR\\fHy\\fH\\\\\\fIl\\fH@\\fHe\\fHD\\fHy\\fHR\\fHp\\fHY\\fHR\\fH@\\fHF\\fIn\\fH\\\\\\fHR\\fH@\\fHM\\fHP\\fHR\\fHT\\fI`\\fHJ\\fHR\\fHZ\\fIk\\fHC\\fH\\\\\\fHy\\fHS\\fHC\\fIk\\fHy\\fHU\\fHR\\fHn\\fHi\\fHy\\fHT\\fH\\\\\\fH@\\fHD\\fHR\\fHc\\fHY\\fHU\\fHR\\fHn\\fHT\\fIa\\fHI\\fH^\\fHB\\fHS\\fH^\\fIk\\fH^\\fIk\\fHz\\fHy\\fHY\\fHS\\fH[\\fHC\\fHy\\fIa\\fH\\\\\\fHn\\fHT\\fHB\\fIn\\fHU\\fHI\\fHR\\fHD\\fHR4F4_4F4[5f4U5i4X4K4]5o4E4D5d4K4_4[4E4K5h4Y5m4A4E5i5d4K4Z5f4U4K5h4B4K4Y4E4K5h5i4^5f4C4K5h4U4K5i4E4K5h5o4K4F4D4K5h4]4C5d4C4D4]5j4K5i4@4K5h4C5d5h4E4K5h4U4K5h5i4K5h5i5d5n4U4K5h4U4]4D5f4K5h4_4]5f4U4K5h4@5d4K5h4K5h4\\\\5k4K4D4K5h4A5f4K4E4K5h4A5n5d5n4K5h5o4]5f5i4K5h4U4]4K5n5i4A5m5d4T4E4K5h4G4K5j5f5i4X4K5k4C4E4K5h5i4]4O4E4K5h5n4]4N5j4K5h4X4D4K4D4K5h4A5d4K4]4K5h4@4C5f4C4K5h4O4_4]4E4K5h4U5h5d5i5i4@5i5d4U4E4K5h4]4A5i5j4K5h5j5n4K4[5m5h4_4[5f5j4K5h5o5d5f4F4K5h4C5j5f4K4D4]5o4K4F5k4K5h4]5f4K4Z4F4A5f4K4F5f4D4F5d5n5f4F4K5h4O5d5h5e4K5h4D4]5f4C4K5h5o5h4K5i4K5h4]4K4D4[4K5h4X4B4Y5f4_5f4K4]4K4F4K5h4G4K5h4G4K5h4Y5h4K4E4K5h4A4C5f4G4K5h4^5d4K4]4K5h4B5h5f4@4K5h4@5i5f4U4K5h4U4K5i5k4K5h4@5i4K5h4K5h4_4K4U4E5i4X4K5k4C5k4K5h4]4J5f4_4K5h4C4B5d5h4K5h5m5j5f4E4K5h5o4F4K4D4K5h4C5d4]5f4K5h4C4]5d4_4K4_4F4V4]5n4F4Y4K5i5f5i4K5h4D5j4K4F4K5h4U4T5f5ifmwfqwbjmnfmwvmgfqpwbmgjmd#>#evm`wjlm+*-isd!#tjgwk>!`lmejdvqbwjlm-smd!#tjgwk>!?algz#`obpp>!Nbwk-qbmgln+*`lmwfnslqbqz#Vmjwfg#Pwbwfp`jq`vnpwbm`fp-bssfmg@kjog+lqdbmjybwjlmp?psbm#`obpp>!!=?jnd#pq`>!,gjpwjmdvjpkfgwklvpbmgp#le#`lnnvmj`bwjlm`ofbq!=?,gju=jmufpwjdbwjlmebuj`lm-j`l!#nbqdjm.qjdkw9abpfg#lm#wkf#Nbppb`kvpfwwpwbaof#alqgfq>jmwfqmbwjlmbobopl#hmltm#bpsqlmvm`jbwjlmab`hdqlvmg9 esbggjmd.ofew9Elq#f{bnsof/#njp`foobmflvp%ow8,nbwk%dw8spz`kloldj`bojm#sbqwj`vobqfbq`k!#wzsf>!elqn#nfwklg>!bp#lsslpfg#wlPvsqfnf#@lvqwl``bpjlmbooz#Bggjwjlmbooz/Mlqwk#Bnfqj`bs{8ab`hdqlvmglsslqwvmjwjfpFmwfqwbjmnfmw-wlOltfq@bpf+nbmveb`wvqjmdsqlefppjlmbo#`lnajmfg#tjwkElq#jmpwbm`f/`lmpjpwjmd#le!#nb{ofmdwk>!qfwvqm#ebopf8`lmp`jlvpmfppNfgjwfqqbmfbmf{wqblqgjmbqzbppbppjmbwjlmpvapfrvfmwoz#avwwlm#wzsf>!wkf#mvnafq#lewkf#lqjdjmbo#`lnsqfkfmpjufqfefqp#wl#wkf?,vo=\\t?,gju=\\tskjolplskj`bool`bwjlm-kqfetbp#svaojpkfgPbm#Eqbm`jp`l+evm`wjlm+*x\\t?gju#jg>!nbjmplskjpwj`bwfgnbwkfnbwj`bo#,kfbg=\\u000E\\t?algzpvddfpwp#wkbwgl`vnfmwbwjlm`lm`fmwqbwjlmqfobwjlmpkjspnbz#kbuf#affm+elq#f{bnsof/Wkjp#bqwj`of#jm#plnf#`bpfpsbqwp#le#wkf#gfejmjwjlm#leDqfbw#Aqjwbjm#`foosbggjmd>frvjubofmw#wlsob`fklogfq>!8#elmw.pjyf9#ivpwjej`bwjlmafojfufg#wkbwpveefqfg#eqlnbwwfnswfg#wl#ofbgfq#le#wkf`qjsw!#pq`>!,+evm`wjlm+*#xbqf#bubjobaof\\t\\n?ojmh#qfo>!#pq`>$kwws9,,jmwfqfpwfg#jm`lmufmwjlmbo#!#bow>!!#,=?,bqf#dfmfqboozkbp#bopl#affmnlpw#slsvobq#`lqqfpslmgjmd`qfgjwfg#tjwkwzof>!alqgfq9?,b=?,psbm=?,-dje!#tjgwk>!?jeqbnf#pq`>!wbaof#`obpp>!jmojmf.aol`h8b``lqgjmd#wl#wldfwkfq#tjwkbssql{jnbwfozsbqojbnfmwbqznlqf#bmg#nlqfgjpsobz9mlmf8wqbgjwjlmboozsqfglnjmbmwoz%maps8\\u007F%maps8%maps8?,psbm=#`foopsb`jmd>?jmsvw#mbnf>!lq!#`lmwfmw>!`lmwqlufqpjbosqlsfqwz>!ld9,{.pkl`htbuf.gfnlmpwqbwjlmpvqqlvmgfg#azMfufqwkfofpp/tbp#wkf#ejqpw`lmpjgfqbaof#Bowklvdk#wkf#`loobalqbwjlmpklvog#mlw#afsqlslqwjlm#le?psbm#pwzof>!hmltm#bp#wkf#pklqwoz#bewfqelq#jmpwbm`f/gfp`qjafg#bp#,kfbg=\\t?algz#pwbqwjmd#tjwkjm`qfbpjmdoz#wkf#eb`w#wkbwgjp`vppjlm#lenjggof#le#wkfbm#jmgjujgvbogjeej`vow#wl#sljmw#le#ujftklnlpf{vbojwzb``fswbm`f#le?,psbm=?,gju=nbmveb`wvqfqplqjdjm#le#wkf`lnnlmoz#vpfgjnslqwbm`f#legfmlnjmbwjlmpab`hdqlvmg9# ofmdwk#le#wkfgfwfqnjmbwjlmb#pjdmjej`bmw!#alqgfq>!3!=qfulovwjlmbqzsqjm`jsofp#lejp#`lmpjgfqfgtbp#gfufolsfgJmgl.Fvqlsfbmuvomfqbaof#wlsqlslmfmwp#lebqf#plnfwjnfp`olpfq#wl#wkfMft#Zlqh#@jwz#mbnf>!pfbq`kbwwqjavwfg#wl`lvqpf#le#wkfnbwkfnbwj`jbmaz#wkf#fmg#lebw#wkf#fmg#le!#alqgfq>!3!#wf`kmloldj`bo-qfnluf@obpp+aqbm`k#le#wkffujgfm`f#wkbw\\\"Xfmgje^..=\\u000E\\tJmpwjwvwf#le#jmwl#b#pjmdofqfpsf`wjufoz-bmg#wkfqfelqfsqlsfqwjfp#lejp#ol`bwfg#jmplnf#le#tkj`kWkfqf#jp#bopl`lmwjmvfg#wl#bssfbqbm`f#le#%bns8mgbpk8#gfp`qjafp#wkf`lmpjgfqbwjlmbvwklq#le#wkfjmgfsfmgfmwozfrvjssfg#tjwkglfp#mlw#kbuf?,b=?b#kqfe>!`lmevpfg#tjwk?ojmh#kqfe>!,bw#wkf#bdf#lebssfbq#jm#wkfWkfpf#jm`ovgfqfdbqgofpp#le`lvog#af#vpfg#pwzof>%rvlw8pfufqbo#wjnfpqfsqfpfmw#wkfalgz=\\t?,kwno=wklvdkw#wl#afslsvobwjlm#leslppjajojwjfpsfq`fmwbdf#leb``fpp#wl#wkfbm#bwwfnsw#wlsqlgv`wjlm#leirvfqz,irvfqzwtl#gjeefqfmwafolmd#wl#wkffpwbaojpknfmwqfsob`jmd#wkfgfp`qjswjlm!#gfwfqnjmf#wkfbubjobaof#elqB``lqgjmd#wl#tjgf#qbmdf#le\\n?gju#`obpp>!nlqf#`lnnlmozlqdbmjpbwjlmpevm`wjlmbojwztbp#`lnsofwfg#%bns8ngbpk8#sbqwj`jsbwjlmwkf#`kbqb`wfqbm#bggjwjlmbobssfbqp#wl#afeb`w#wkbw#wkfbm#f{bnsof#lepjdmjej`bmwozlmnlvpflufq>!af`bvpf#wkfz#bpzm`#>#wqvf8sqlaofnp#tjwkpffnp#wl#kbufwkf#qfpvow#le#pq`>!kwws9,,ebnjojbq#tjwkslppfppjlm#leevm`wjlm#+*#xwllh#sob`f#jmbmg#plnfwjnfppvapwbmwjbooz?psbm=?,psbm=jp#lewfm#vpfgjm#bm#bwwfnswdqfbw#gfbo#leFmujqlmnfmwbopv``fppevooz#ujqwvbooz#boo13wk#`fmwvqz/sqlefppjlmbopmf`fppbqz#wl#gfwfqnjmfg#az`lnsbwjajojwzaf`bvpf#jw#jpGj`wjlmbqz#lenlgjej`bwjlmpWkf#elooltjmdnbz#qfefq#wl9@lmpfrvfmwoz/Jmwfqmbwjlmbobowklvdk#plnfwkbw#tlvog#aftlqog$p#ejqpw`obppjejfg#bpalwwln#le#wkf+sbqwj`vobqozbojdm>!ofew!#nlpw#`lnnlmozabpjp#elq#wkfelvmgbwjlm#le`lmwqjavwjlmpslsvobqjwz#le`fmwfq#le#wkfwl#qfgv`f#wkfivqjpgj`wjlmpbssql{jnbwjlm#lmnlvpflvw>!Mft#Wfpwbnfmw`loof`wjlm#le?,psbm=?,b=?,jm#wkf#Vmjwfgejon#gjqf`wlq.pwqj`w-gwg!=kbp#affm#vpfgqfwvqm#wl#wkfbowklvdk#wkjp`kbmdf#jm#wkfpfufqbo#lwkfqavw#wkfqf#bqfvmsqf`fgfmwfgjp#pjnjobq#wlfpsf`jbooz#jmtfjdkw9#alog8jp#`boofg#wkf`lnsvwbwjlmbojmgj`bwf#wkbwqfpwqj`wfg#wl\\n?nfwb#mbnf>!bqf#wzsj`booz`lmeoj`w#tjwkKltfufq/#wkf#Bm#f{bnsof#le`lnsbqfg#tjwkrvbmwjwjfp#leqbwkfq#wkbm#b`lmpwfoobwjlmmf`fppbqz#elqqfslqwfg#wkbwpsf`jej`bwjlmslojwj`bo#bmg%maps8%maps8?qfefqfm`fp#wlwkf#pbnf#zfbqDlufqmnfmw#ledfmfqbwjlm#lekbuf#mlw#affmpfufqbo#zfbqp`lnnjwnfmw#wl\\n\\n?vo#`obpp>!ujpvbojybwjlm2:wk#`fmwvqz/sqb`wjwjlmfqpwkbw#kf#tlvogbmg#`lmwjmvfgl``vsbwjlm#lejp#gfejmfg#bp`fmwqf#le#wkfwkf#bnlvmw#le=?gju#pwzof>!frvjubofmw#legjeefqfmwjbwfaqlvdkw#balvwnbqdjm.ofew9#bvwlnbwj`boozwklvdkw#le#bpPlnf#le#wkfpf\\t?gju#`obpp>!jmsvw#`obpp>!qfsob`fg#tjwkjp#lmf#le#wkffgv`bwjlm#bmgjmeovfm`fg#azqfsvwbwjlm#bp\\t?nfwb#mbnf>!b``lnnlgbwjlm?,gju=\\t?,gju=obqdf#sbqw#leJmpwjwvwf#elqwkf#pl.`boofg#bdbjmpw#wkf#Jm#wkjp#`bpf/tbp#bssljmwfg`objnfg#wl#afKltfufq/#wkjpGfsbqwnfmw#lewkf#qfnbjmjmdfeef`w#lm#wkfsbqwj`vobqoz#gfbo#tjwk#wkf\\t?gju#pwzof>!bonlpw#botbzpbqf#`vqqfmwozf{sqfppjlm#leskjolplskz#leelq#nlqf#wkbm`jujojybwjlmplm#wkf#jpobmgpfof`wfgJmgf{`bm#qfpvow#jm!#ubovf>!!#,=wkf#pwqv`wvqf#,=?,b=?,gju=Nbmz#le#wkfpf`bvpfg#az#wkfle#wkf#Vmjwfgpsbm#`obpp>!n`bm#af#wqb`fgjp#qfobwfg#wlaf`bnf#lmf#lejp#eqfrvfmwozojujmd#jm#wkfwkflqfwj`boozElooltjmd#wkfQfulovwjlmbqzdlufqmnfmw#jmjp#gfwfqnjmfgwkf#slojwj`bojmwqlgv`fg#jmpveej`jfmw#wlgfp`qjswjlm!=pklqw#pwlqjfppfsbqbwjlm#lebp#wl#tkfwkfqhmltm#elq#jwptbp#jmjwjboozgjpsobz9aol`hjp#bm#f{bnsofwkf#sqjm`jsbo`lmpjpwp#le#bqf`ldmjyfg#bp,algz=?,kwno=b#pvapwbmwjboqf`lmpwqv`wfgkfbg#le#pwbwfqfpjpwbm`f#wlvmgfqdqbgvbwfWkfqf#bqf#wtldqbujwbwjlmbobqf#gfp`qjafgjmwfmwjlmboozpfqufg#bp#wkf`obpp>!kfbgfqlsslpjwjlm#wlevmgbnfmwboozglnjmbwfg#wkfbmg#wkf#lwkfqboojbm`f#tjwktbp#elq`fg#wlqfpsf`wjufoz/bmg#slojwj`bojm#pvsslqw#lesflsof#jm#wkf13wk#`fmwvqz-bmg#svaojpkfgolbg@kbqwafbwwl#vmgfqpwbmgnfnafq#pwbwfpfmujqlmnfmwboejqpw#kboe#le`lvmwqjfp#bmgbq`kjwf`wvqboaf#`lmpjgfqfg`kbqb`wfqjyfg`ofbqJmwfqubobvwklqjwbwjufEfgfqbwjlm#letbp#pv``ffgfgbmg#wkfqf#bqfb#`lmpfrvfm`fwkf#Sqfpjgfmwbopl#jm`ovgfgeqff#plewtbqfpv``fppjlm#legfufolsfg#wkftbp#gfpwqlzfgbtbz#eqln#wkf8\\t?,p`qjsw=\\t?bowklvdk#wkfzelooltfg#az#bnlqf#sltfqevoqfpvowfg#jm#bVmjufqpjwz#leKltfufq/#nbmzwkf#sqfpjgfmwKltfufq/#plnfjp#wklvdkw#wlvmwjo#wkf#fmgtbp#bmmlvm`fgbqf#jnslqwbmwbopl#jm`ovgfp=?jmsvw#wzsf>wkf#`fmwfq#le#GL#MLW#BOWFQvpfg#wl#qfefqwkfnfp,<plqw>wkbw#kbg#affmwkf#abpjp#elqkbp#gfufolsfgjm#wkf#pvnnfq`lnsbqbwjufozgfp`qjafg#wkfpv`k#bp#wklpfwkf#qfpvowjmdjp#jnslppjaofubqjlvp#lwkfqPlvwk#Beqj`bmkbuf#wkf#pbnffeef`wjufmfppjm#tkj`k#`bpf8#wf{w.bojdm9pwqv`wvqf#bmg8#ab`hdqlvmg9qfdbqgjmd#wkfpvsslqwfg#wkfjp#bopl#hmltmpwzof>!nbqdjmjm`ovgjmd#wkfabkbpb#Nfobzvmlqph#alhn/Iomlqph#mzmlqphpolufm)M(ajmbjmwfqmb`jlmbo`bojej`b`j/_m`lnvmj`b`j/_m`lmpwqv``j/_m!=?gju#`obpp>!gjpbnajdvbwjlmGlnbjmMbnf$/#$bgnjmjpwqbwjlmpjnvowbmflvpozwqbmpslqwbwjlmJmwfqmbwjlmbo#nbqdjm.alwwln9qfpslmpjajojwz?\\\"Xfmgje^..=\\t?,=?nfwb#mbnf>!jnsofnfmwbwjlmjmeqbpwqv`wvqfqfsqfpfmwbwjlmalqgfq.alwwln9?,kfbg=\\t?algz=>kwws&0B&1E&1E?elqn#nfwklg>!nfwklg>!slpw!#,ebuj`lm-j`l!#~*8\\t?,p`qjsw=\\t-pfwBwwqjavwf+Bgnjmjpwqbwjlm>#mft#Bqqbz+*8?\\\"Xfmgje^..=\\u000E\\tgjpsobz9aol`h8Vmelqwvmbwfoz/!=%maps8?,gju=,ebuj`lm-j`l!=>$pwzofpkffw$#jgfmwjej`bwjlm/#elq#f{bnsof/?oj=?b#kqfe>!,bm#bowfqmbwjufbp#b#qfpvow#lesw!=?,p`qjsw=\\twzsf>!pvanjw!#\\t+evm`wjlm+*#xqf`lnnfmgbwjlmelqn#b`wjlm>!,wqbmpelqnbwjlmqf`lmpwqv`wjlm-pwzof-gjpsobz#B``lqgjmd#wl#kjggfm!#mbnf>!bolmd#tjwk#wkfgl`vnfmw-algz-bssql{jnbwfoz#@lnnvmj`bwjlmpslpw!#b`wjlm>!nfbmjmd#%rvlw8..?\\\"Xfmgje^..=Sqjnf#Njmjpwfq`kbqb`wfqjpwj`?,b=#?b#`obpp>wkf#kjpwlqz#le#lmnlvpflufq>!wkf#dlufqmnfmwkqfe>!kwwsp9,,tbp#lqjdjmbooztbp#jmwqlgv`fg`obppjej`bwjlmqfsqfpfmwbwjufbqf#`lmpjgfqfg?\\\"Xfmgje^..=\\t\\tgfsfmgp#lm#wkfVmjufqpjwz#le#jm#`lmwqbpw#wl#sob`fklogfq>!jm#wkf#`bpf#lejmwfqmbwjlmbo#`lmpwjwvwjlmbopwzof>!alqgfq.9#evm`wjlm+*#xAf`bvpf#le#wkf.pwqj`w-gwg!=\\t?wbaof#`obpp>!b``lnsbmjfg#azb``lvmw#le#wkf?p`qjsw#pq`>!,mbwvqf#le#wkf#wkf#sflsof#jm#jm#bggjwjlm#wlp*8#ip-jg#>#jg!#tjgwk>!233&!qfdbqgjmd#wkf#Qlnbm#@bwkloj`bm#jmgfsfmgfmwelooltjmd#wkf#-dje!#tjgwk>!2wkf#elooltjmd#gjp`qjnjmbwjlmbq`kbfloldj`bosqjnf#njmjpwfq-ip!=?,p`qjsw=`lnajmbwjlm#le#nbqdjmtjgwk>!`qfbwfFofnfmw+t-bwwb`kFufmw+?,b=?,wg=?,wq=pq`>!kwwsp9,,bJm#sbqwj`vobq/#bojdm>!ofew!#@yf`k#Qfsvaoj`Vmjwfg#Hjmdgln`lqqfpslmgfm`f`lm`ovgfg#wkbw-kwno!#wjwof>!+evm`wjlm#+*#x`lnfp#eqln#wkfbssoj`bwjlm#le?psbm#`obpp>!pafojfufg#wl#affnfmw+$p`qjsw$?,b=\\t?,oj=\\t?ojufqz#gjeefqfmw=?psbm#`obpp>!lswjlm#ubovf>!+bopl#hmltm#bp\\n?oj=?b#kqfe>!=?jmsvw#mbnf>!pfsbqbwfg#eqlnqfefqqfg#wl#bp#ubojdm>!wls!=elvmgfq#le#wkfbwwfnswjmd#wl#`bqalm#gjl{jgf\\t\\t?gju#`obpp>!`obpp>!pfbq`k.,algz=\\t?,kwno=lsslqwvmjwz#wl`lnnvmj`bwjlmp?,kfbg=\\u000E\\t?algz#pwzof>!tjgwk9Wj\\rVSmd#Uj\\rWkw`kbmdfp#jm#wkfalqgfq.`lolq9 3!#alqgfq>!3!#?,psbm=?,gju=?tbp#gjp`lufqfg!#wzsf>!wf{w!#*8\\t?,p`qjsw=\\t\\tGfsbqwnfmw#le#f``ofpjbpwj`bowkfqf#kbp#affmqfpvowjmd#eqln?,algz=?,kwno=kbp#mfufq#affmwkf#ejqpw#wjnfjm#qfpslmpf#wlbvwlnbwj`booz#?,gju=\\t\\t?gju#jtbp#`lmpjgfqfgsfq`fmw#le#wkf!#,=?,b=?,gju=`loof`wjlm#le#gfp`fmgfg#eqlnpf`wjlm#le#wkfb``fsw.`kbqpfwwl#af#`lmevpfgnfnafq#le#wkf#sbggjmd.qjdkw9wqbmpobwjlm#lejmwfqsqfwbwjlm#kqfe>$kwws9,,tkfwkfq#lq#mlwWkfqf#bqf#boplwkfqf#bqf#nbmzb#pnboo#mvnafqlwkfq#sbqwp#lejnslppjaof#wl##`obpp>!avwwlmol`bwfg#jm#wkf-#Kltfufq/#wkfbmg#fufmwvboozBw#wkf#fmg#le#af`bvpf#le#jwpqfsqfpfmwp#wkf?elqn#b`wjlm>!#nfwklg>!slpw!jw#jp#slppjaofnlqf#ojhfoz#wlbm#jm`qfbpf#jmkbuf#bopl#affm`lqqfpslmgp#wlbmmlvm`fg#wkbwbojdm>!qjdkw!=nbmz#`lvmwqjfpelq#nbmz#zfbqpfbqojfpw#hmltmaf`bvpf#jw#tbpsw!=?,p`qjsw=\\u000E#ubojdm>!wls!#jmkbajwbmwp#leelooltjmd#zfbq\\u000E\\t?gju#`obpp>!njoojlm#sflsof`lmwqlufqpjbo#`lm`fqmjmd#wkfbqdvf#wkbw#wkfdlufqmnfmw#bmgb#qfefqfm`f#wlwqbmpefqqfg#wlgfp`qjajmd#wkf#pwzof>!`lolq9bowklvdk#wkfqfafpw#hmltm#elqpvanjw!#mbnf>!nvowjsoj`bwjlmnlqf#wkbm#lmf#qf`ldmjwjlm#le@lvm`jo#le#wkffgjwjlm#le#wkf##?nfwb#mbnf>!Fmwfqwbjmnfmw#btbz#eqln#wkf#8nbqdjm.qjdkw9bw#wkf#wjnf#lejmufpwjdbwjlmp`lmmf`wfg#tjwkbmg#nbmz#lwkfqbowklvdk#jw#jpafdjmmjmd#tjwk#?psbm#`obpp>!gfp`fmgbmwp#le?psbm#`obpp>!j#bojdm>!qjdkw!?,kfbg=\\t?algz#bpsf`wp#le#wkfkbp#pjm`f#affmFvqlsfbm#Vmjlmqfnjmjp`fmw#lenlqf#gjeej`vowUj`f#Sqfpjgfmw`lnslpjwjlm#lesbppfg#wkqlvdknlqf#jnslqwbmwelmw.pjyf922s{f{sobmbwjlm#lewkf#`lm`fsw#letqjwwfm#jm#wkf\\n?psbm#`obpp>!jp#lmf#le#wkf#qfpfnaobm`f#wllm#wkf#dqlvmgptkj`k#`lmwbjmpjm`ovgjmd#wkf#gfejmfg#az#wkfsvaoj`bwjlm#lenfbmp#wkbw#wkflvwpjgf#le#wkfpvsslqw#le#wkf?jmsvw#`obpp>!?psbm#`obpp>!w+Nbwk-qbmgln+*nlpw#sqlnjmfmwgfp`qjswjlm#le@lmpwbmwjmlsoftfqf#svaojpkfg?gju#`obpp>!pfbssfbqp#jm#wkf2!#kfjdkw>!2!#nlpw#jnslqwbmwtkj`k#jm`ovgfptkj`k#kbg#affmgfpwqv`wjlm#lewkf#slsvobwjlm\\t\\n?gju#`obpp>!slppjajojwz#leplnfwjnfp#vpfgbssfbq#wl#kbufpv``fpp#le#wkfjmwfmgfg#wl#afsqfpfmw#jm#wkfpwzof>!`ofbq9a\\u000E\\t?,p`qjsw=\\u000E\\t?tbp#elvmgfg#jmjmwfqujft#tjwk\\\\jg!#`lmwfmw>!`bsjwbo#le#wkf\\u000E\\t?ojmh#qfo>!pqfofbpf#le#wkfsljmw#lvw#wkbw{NOKwwsQfrvfpwbmg#pvapfrvfmwpf`lmg#obqdfpwufqz#jnslqwbmwpsf`jej`bwjlmppvqeb`f#le#wkfbssojfg#wl#wkfelqfjdm#sloj`z\\\\pfwGlnbjmMbnffpwbaojpkfg#jmjp#afojfufg#wlJm#bggjwjlm#wlnfbmjmd#le#wkfjp#mbnfg#bewfqwl#sqlwf`w#wkfjp#qfsqfpfmwfgGf`obqbwjlm#lenlqf#feej`jfmw@obppjej`bwjlmlwkfq#elqnp#lekf#qfwvqmfg#wl?psbm#`obpp>!`sfqelqnbm`f#le+evm`wjlm+*#x\\u000Eje#bmg#lmoz#jeqfdjlmp#le#wkfofbgjmd#wl#wkfqfobwjlmp#tjwkVmjwfg#Mbwjlmppwzof>!kfjdkw9lwkfq#wkbm#wkfzsf!#`lmwfmw>!Bppl`jbwjlm#le\\t?,kfbg=\\t?algzol`bwfg#lm#wkfjp#qfefqqfg#wl+jm`ovgjmd#wkf`lm`fmwqbwjlmpwkf#jmgjujgvbobnlmd#wkf#nlpwwkbm#bmz#lwkfq,=\\t?ojmh#qfo>!#qfwvqm#ebopf8wkf#svqslpf#lewkf#bajojwz#wl8`lolq9 eee~\\t-\\t?psbm#`obpp>!wkf#pvaif`w#legfejmjwjlmp#le=\\u000E\\t?ojmh#qfo>!`objn#wkbw#wkfkbuf#gfufolsfg?wbaof#tjgwk>!`fofaqbwjlm#leElooltjmd#wkf#wl#gjpwjmdvjpk?psbm#`obpp>!awbhfp#sob`f#jmvmgfq#wkf#mbnfmlwfg#wkbw#wkf=?\\\"Xfmgje^..=\\tpwzof>!nbqdjm.jmpwfbg#le#wkfjmwqlgv`fg#wkfwkf#sql`fpp#lejm`qfbpjmd#wkfgjeefqfm`fp#jmfpwjnbwfg#wkbwfpsf`jbooz#wkf,gju=?gju#jg>!tbp#fufmwvboozwkqlvdklvw#kjpwkf#gjeefqfm`fplnfwkjmd#wkbwpsbm=?,psbm=?,pjdmjej`bmwoz#=?,p`qjsw=\\u000E\\t\\u000E\\tfmujqlmnfmwbo#wl#sqfufmw#wkfkbuf#affm#vpfgfpsf`jbooz#elqvmgfqpwbmg#wkfjp#fppfmwjbooztfqf#wkf#ejqpwjp#wkf#obqdfpwkbuf#affm#nbgf!#pq`>!kwws9,,jmwfqsqfwfg#bppf`lmg#kboe#le`qloojmd>!ml!#jp#`lnslpfg#leJJ/#Kloz#Qlnbmjp#f{sf`wfg#wlkbuf#wkfjq#ltmgfejmfg#bp#wkfwqbgjwjlmbooz#kbuf#gjeefqfmwbqf#lewfm#vpfgwl#fmpvqf#wkbwbdqffnfmw#tjwk`lmwbjmjmd#wkfbqf#eqfrvfmwozjmelqnbwjlm#lmf{bnsof#jp#wkfqfpvowjmd#jm#b?,b=?,oj=?,vo=#`obpp>!ellwfqbmg#fpsf`jboozwzsf>!avwwlm!#?,psbm=?,psbm=tkj`k#jm`ovgfg=\\t?nfwb#mbnf>!`lmpjgfqfg#wkf`bqqjfg#lvw#azKltfufq/#jw#jpaf`bnf#sbqw#lejm#qfobwjlm#wlslsvobq#jm#wkfwkf#`bsjwbo#letbp#leej`jbooztkj`k#kbp#affmwkf#Kjpwlqz#lebowfqmbwjuf#wlgjeefqfmw#eqlnwl#pvsslqw#wkfpvddfpwfg#wkbwjm#wkf#sql`fpp##?gju#`obpp>!wkf#elvmgbwjlmaf`bvpf#le#kjp`lm`fqmfg#tjwkwkf#vmjufqpjwzlsslpfg#wl#wkfwkf#`lmwf{w#le?psbm#`obpp>!swf{w!#mbnf>!r!\\n\\n?gju#`obpp>!wkf#p`jfmwjej`qfsqfpfmwfg#aznbwkfnbwj`jbmpfof`wfg#az#wkfwkbw#kbuf#affm=?gju#`obpp>!`gju#jg>!kfbgfqjm#sbqwj`vobq/`lmufqwfg#jmwl*8\\t?,p`qjsw=\\t?skjolplskj`bo#pqsphlkqubwphjwj\\rVSmd#Uj\\rWkw<L=o=m=m<V<T<U=l=o=m=m<V<T<Ujmufpwjdb`j/_msbqwj`jsb`j/_m<V<R=n<R=l=g<Y<R<]<W<\\\\=m=n<T<V<R=n<R=l=g<U=k<Y<W<R<^<Y<V=m<T=m=n<Y<P=g<q<R<^<R=m=n<T<V<R=n<R=l=g=i<R<]<W<\\\\=m=n=`<^=l<Y<P<Y<Q<T<V<R=n<R=l<\\\\=c=m<Y<_<R<X<Q=c=m<V<\\\\=k<\\\\=n=`<Q<R<^<R=m=n<T<O<V=l<\\\\<T<Q=g<^<R<S=l<R=m=g<V<R=n<R=l<R<U=m<X<Y<W<\\\\=n=`<S<R<P<R=e=`=b=m=l<Y<X=m=n<^<R<]=l<\\\\<[<R<P=m=n<R=l<R<Q=g=o=k<\\\\=m=n<T<Y=n<Y=k<Y<Q<T<Y<\\u007F<W<\\\\<^<Q<\\\\=c<T=m=n<R=l<T<T=m<T=m=n<Y<P<\\\\=l<Y=d<Y<Q<T=c<M<V<\\\\=k<\\\\=n=`<S<R=a=n<R<P=o=m<W<Y<X=o<Y=n=m<V<\\\\<[<\\\\=n=`=n<R<^<\\\\=l<R<^<V<R<Q<Y=k<Q<R=l<Y=d<Y<Q<T<Y<V<R=n<R=l<R<Y<R=l<_<\\\\<Q<R<^<V<R=n<R=l<R<P<L<Y<V<W<\\\\<P<\\\\4K5h5i5j4F4C5e5i5j4F4C5f4K4F4K5h5i5d4Z5d4U4K5h4D4]4K5i4@4K5h5i5d4K5n4U4K5h4]4_4K4J5h5i4X4K4]5o4K4F4K5h4O4U4Z4K4M4K5h4]5f4K4Z4E4K5h4F4Y5i5f5i4K5h4K4U4Z4K4M4K5h5j4F4K4J4@4K5h4O5h4U4K4D4K5h4F4_4@5f5h4K5h4O5n4_4K5i4K5h4Z4V4[4K4F4K5h5m5f4C5f5d4K5h4F4]4A5f4D4K5h4@4C5f4C4E4K5h4F4U5h5f5i4K5h4O4B4D4K4]4K5h4K5m5h4K5i4K5h4O5m5h4K5i4K5h4F4K4]5f4B4K5h4F5n5j5f4E4K5h4K5h4U4K4D4K5h4B5d4K4[4]4K5h5i4@4F5i4U4K5h4C5f5o5d4]4K5h4_5f4K4A4E4U4D4C4K5h5h5k4K5h4F4]4D5f4E4K5h4]5d4K4D4[4K5h4O4C4D5f4E4K5h4K4B4D4K4]4K5h5i4F4A4C4E4K5h4K4V4K5j5f`vqplq9sljmwfq8?,wjwof=\\t?nfwb#!#kqfe>!kwws9,,!=?psbm#`obpp>!nfnafqp#le#wkf#tjmglt-ol`bwjlmufqwj`bo.bojdm9,b=#\\u007F#?b#kqfe>!?\\\"gl`wzsf#kwno=nfgjb>!p`qffm!#?lswjlm#ubovf>!ebuj`lm-j`l!#,=\\t\\n\\n?gju#`obpp>!`kbqb`wfqjpwj`p!#nfwklg>!dfw!#,algz=\\t?,kwno=\\tpklqw`vw#j`lm!#gl`vnfmw-tqjwf+sbggjmd.alwwln9qfsqfpfmwbwjufppvanjw!#ubovf>!bojdm>!`fmwfq!#wkqlvdklvw#wkf#p`jfm`f#ej`wjlm\\t##?gju#`obpp>!pvanjw!#`obpp>!lmf#le#wkf#nlpw#ubojdm>!wls!=?tbp#fpwbaojpkfg*8\\u000E\\t?,p`qjsw=\\u000E\\tqfwvqm#ebopf8!=*-pwzof-gjpsobzaf`bvpf#le#wkf#gl`vnfmw-`llhjf?elqn#b`wjlm>!,~algzxnbqdjm938Fm`z`olsfgjb#leufqpjlm#le#wkf#-`qfbwfFofnfmw+mbnf!#`lmwfmw>!?,gju=\\t?,gju=\\t\\tbgnjmjpwqbwjuf#?,algz=\\t?,kwno=kjpwlqz#le#wkf#!=?jmsvw#wzsf>!slqwjlm#le#wkf#bp#sbqw#le#wkf#%maps8?b#kqfe>!lwkfq#`lvmwqjfp!=\\t?gju#`obpp>!?,psbm=?,psbm=?Jm#lwkfq#tlqgp/gjpsobz9#aol`h8`lmwqlo#le#wkf#jmwqlgv`wjlm#le,=\\t?nfwb#mbnf>!bp#tfoo#bp#wkf#jm#qf`fmw#zfbqp\\u000E\\t\\n?gju#`obpp>!?,gju=\\t\\n?,gju=\\tjmpsjqfg#az#wkfwkf#fmg#le#wkf#`lnsbwjaof#tjwkaf`bnf#hmltm#bp#pwzof>!nbqdjm9-ip!=?,p`qjsw=?#Jmwfqmbwjlmbo#wkfqf#kbuf#affmDfqnbm#obmdvbdf#pwzof>!`lolq9 @lnnvmjpw#Sbqwz`lmpjpwfmw#tjwkalqgfq>!3!#`foo#nbqdjmkfjdkw>!wkf#nbilqjwz#le!#bojdm>!`fmwfqqfobwfg#wl#wkf#nbmz#gjeefqfmw#Lqwklgl{#@kvq`kpjnjobq#wl#wkf#,=\\t?ojmh#qfo>!ptbp#lmf#le#wkf#vmwjo#kjp#gfbwk~*+*8\\t?,p`qjsw=lwkfq#obmdvbdfp`lnsbqfg#wl#wkfslqwjlmp#le#wkfwkf#Mfwkfqobmgpwkf#nlpw#`lnnlmab`hdqlvmg9vqo+bqdvfg#wkbw#wkfp`qloojmd>!ml!#jm`ovgfg#jm#wkfMlqwk#Bnfqj`bm#wkf#mbnf#le#wkfjmwfqsqfwbwjlmpwkf#wqbgjwjlmbogfufolsnfmw#le#eqfrvfmwoz#vpfgb#`loof`wjlm#leufqz#pjnjobq#wlpvqqlvmgjmd#wkff{bnsof#le#wkjpbojdm>!`fmwfq!=tlvog#kbuf#affmjnbdf\\\\`bswjlm#>bwwb`kfg#wl#wkfpvddfpwjmd#wkbwjm#wkf#elqn#le#jmuloufg#jm#wkfjp#gfqjufg#eqlnmbnfg#bewfq#wkfJmwqlgv`wjlm#wlqfpwqj`wjlmp#lm#pwzof>!tjgwk9#`bm#af#vpfg#wl#wkf#`qfbwjlm#lenlpw#jnslqwbmw#jmelqnbwjlm#bmgqfpvowfg#jm#wkf`loobspf#le#wkfWkjp#nfbmp#wkbwfofnfmwp#le#wkftbp#qfsob`fg#azbmbozpjp#le#wkfjmpsjqbwjlm#elqqfdbqgfg#bp#wkfnlpw#pv``fppevohmltm#bp#%rvlw8b#`lnsqfkfmpjufKjpwlqz#le#wkf#tfqf#`lmpjgfqfgqfwvqmfg#wl#wkfbqf#qfefqqfg#wlVmplvq`fg#jnbdf=\\t\\n?gju#`obpp>!`lmpjpwp#le#wkfpwlsSqlsbdbwjlmjmwfqfpw#jm#wkfbubjobajojwz#lebssfbqp#wl#kbuffof`wqlnbdmfwj`fmbaofPfquj`fp+evm`wjlm#le#wkfJw#jp#jnslqwbmw?,p`qjsw=?,gju=evm`wjlm+*xubq#qfobwjuf#wl#wkfbp#b#qfpvow#le#wkf#slpjwjlm#leElq#f{bnsof/#jm#nfwklg>!slpw!#tbp#elooltfg#az%bns8ngbpk8#wkfwkf#bssoj`bwjlmip!=?,p`qjsw=\\u000E\\tvo=?,gju=?,gju=bewfq#wkf#gfbwktjwk#qfpsf`w#wlpwzof>!sbggjmd9jp#sbqwj`vobqozgjpsobz9jmojmf8#wzsf>!pvanjw!#jp#gjujgfg#jmwl\\bTA\\nzk#+\\u000BBl\\bQ\\u007F*qfpslmpbajojgbgbgnjmjpwqb`j/_mjmwfqmb`jlmbofp`lqqfpslmgjfmwf\\fHe\\fHF\\fHC\\fIg\\fH{\\fHF\\fIn\\fH\\\\\\fIa\\fHY\\fHU\\fHB\\fHR\\fH\\\\\\fIk\\fH^\\fIg\\fH{\\fIg\\fHn\\fHv\\fIm\\fHD\\fHR\\fHY\\fH^\\fIk\\fHy\\fHS\\fHD\\fHT\\fH\\\\\\fHy\\fHR\\fH\\\\\\fHF\\fIm\\fH^\\fHS\\fHT\\fHz\\fIg\\fHp\\fIk\\fHn\\fHv\\fHR\\fHU\\fHS\\fHc\\fHA\\fIk\\fHp\\fIk\\fHn\\fHZ\\fHR\\fHB\\fHS\\fH^\\fHU\\fHB\\fHR\\fH\\\\\\fIl\\fHp\\fHR\\fH{\\fH\\\\\\fHO\\fH@\\fHD\\fHR\\fHD\\fIk\\fHy\\fIm\\fHB\\fHR\\fH\\\\\\fH@\\fIa\\fH^\\fIe\\fH{\\fHB\\fHR\\fH^\\fHS\\fHy\\fHB\\fHU\\fHS\\fH^\\fHR\\fHF\\fIo\\fH[\\fIa\\fHL\\fH@\\fHN\\fHP\\fHH\\fIk\\fHA\\fHR\\fHp\\fHF\\fHR\\fHy\\fIa\\fH^\\fHS\\fHy\\fHs\\fIa\\fH\\\\\\fIk\\fHD\\fHz\\fHS\\fH^\\fHR\\fHG\\fHJ\\fI`\\fH\\\\\\fHR\\fHD\\fHB\\fHR\\fHB\\fH^\\fIk\\fHB\\fHH\\fHJ\\fHR\\fHD\\fH@\\fHR\\fHp\\fHR\\fH\\\\\\fHY\\fHS\\fHy\\fHR\\fHT\\fHy\\fIa\\fHC\\fIg\\fHn\\fHv\\fHR\\fHU\\fHH\\fIk\\fHF\\fHU\\fIm\\fHm\\fHv\\fH@\\fHH\\fHR\\fHC\\fHR\\fHT\\fHn\\fHY\\fHR\\fHJ\\fHJ\\fIk\\fHz\\fHD\\fIk\\fHF\\fHS\\fHw\\fH^\\fIk\\fHY\\fHS\\fHZ\\fIk\\fH[\\fH\\\\\\fHR\\fHp\\fIa\\fHC\\fHe\\fHH\\fIa\\fHH\\fH\\\\\\fHB\\fIm\\fHn\\fH@\\fHd\\fHJ\\fIg\\fHD\\fIg\\fHn\\fHe\\fHF\\fHy\\fH\\\\\\fHO\\fHF\\fHN\\fHP\\fIk\\fHn\\fHT\\fIa\\fHI\\fHS\\fHH\\fHG\\fHS\\fH^\\fIa\\fHB\\fHB\\fIm\\fHz\\fIa\\fHC\\fHi\\fHv\\fIa\\fHw\\fHR\\fHw\\fIn\\fHs\\fHH\\fIl\\fHT\\fHn\\fH{\\fIl\\fHH\\fHp\\fHR\\fHc\\fH{\\fHR\\fHY\\fHS\\fHA\\fHR\\fH{\\fHt\\fHO\\fIa\\fHs\\fIk\\fHJ\\fIn\\fHT\\fH\\\\\\fIk\\fHJ\\fHS\\fHD\\fIg\\fHn\\fHU\\fHH\\fIa\\fHC\\fHR\\fHT\\fIk\\fHy\\fIa\\fHT\\fH{\\fHR\\fHn\\fHK\\fIl\\fHY\\fHS\\fHZ\\fIa\\fHY\\fH\\\\\\fHR\\fHH\\fIk\\fHn\\fHJ\\fId\\fHs\\fIa\\fHT\\fHD\\fHy\\fIa\\fHZ\\fHR\\fHT\\fHR\\fHB\\fHD\\fIk\\fHi\\fHJ\\fHR\\fH^\\fHH\\fH@\\fHS\\fHp\\fH^\\fIl\\fHF\\fIm\\fH\\\\\\fIn\\fH[\\fHU\\fHS\\fHn\\fHJ\\fIl\\fHB\\fHS\\fHH\\fIa\\fH\\\\\\fHy\\fHY\\fHS\\fHH\\fHR\\fH\\\\\\fIm\\fHF\\fHC\\fIk\\fHT\\fIa\\fHI\\fHR\\fHD\\fHy\\fH\\\\\\fIg\\fHM\\fHP\\fHB\\fIm\\fHy\\fIa\\fHH\\fHC\\fIg\\fHp\\fHD\\fHR\\fHy\\fIo\\fHF\\fHC\\fHR\\fHF\\fIg\\fHT\\fIa\\fHs\\fHt\\fH\\\\\\fIk\\fH^\\fIn\\fHy\\fHR\\fH\\\\\\fIa\\fHC\\fHY\\fHS\\fHv\\fHR\\fH\\\\\\fHT\\fIn\\fHv\\fHD\\fHR\\fHB\\fIn\\fH^\\fIa\\fHC\\fHJ\\fIk\\fHz\\fIk\\fHn\\fHU\\fHB\\fIk\\fHZ\\fHR\\fHT\\fIa\\fHy\\fIn\\fH^\\fHB\\fId\\fHn\\fHD\\fIk\\fHH\\fId\\fHC\\fHR\\fH\\\\\\fHp\\fHS\\fHT\\fHy\\fIkqpp({no!#wjwof>!.wzsf!#`lmwfmw>!wjwof!#`lmwfmw>!bw#wkf#pbnf#wjnf-ip!=?,p`qjsw=\\t?!#nfwklg>!slpw!#?,psbm=?,b=?,oj=ufqwj`bo.bojdm9w,irvfqz-njm-ip!=-`oj`h+evm`wjlm+#pwzof>!sbggjmd.~*+*8\\t?,p`qjsw=\\t?,psbm=?b#kqfe>!?b#kqfe>!kwws9,,*8#qfwvqm#ebopf8wf{w.gf`lqbwjlm9#p`qloojmd>!ml!#alqgfq.`loobspf9bppl`jbwfg#tjwk#Abkbpb#JmglmfpjbFmdojpk#obmdvbdf?wf{w#{no9psb`f>-dje!#alqgfq>!3!?,algz=\\t?,kwno=\\tlufqeolt9kjggfm8jnd#pq`>!kwws9,,bggFufmwOjpwfmfqqfpslmpjaof#elq#p-ip!=?,p`qjsw=\\t,ebuj`lm-j`l!#,=lsfqbwjmd#pzpwfn!#pwzof>!tjgwk92wbqdfw>!\\\\aobmh!=Pwbwf#Vmjufqpjwzwf{w.bojdm9ofew8\\tgl`vnfmw-tqjwf+/#jm`ovgjmd#wkf#bqlvmg#wkf#tlqog*8\\u000E\\t?,p`qjsw=\\u000E\\t?!#pwzof>!kfjdkw98lufqeolt9kjggfmnlqf#jmelqnbwjlmbm#jmwfqmbwjlmbob#nfnafq#le#wkf#lmf#le#wkf#ejqpw`bm#af#elvmg#jm#?,gju=\\t\\n\\n?,gju=\\tgjpsobz9#mlmf8!=!#,=\\t?ojmh#qfo>!\\t##+evm`wjlm+*#xwkf#26wk#`fmwvqz-sqfufmwGfebvow+obqdf#mvnafq#le#Azybmwjmf#Fnsjqf-isd\\u007Fwkvna\\u007Fofew\\u007Fubpw#nbilqjwz#lenbilqjwz#le#wkf##bojdm>!`fmwfq!=Vmjufqpjwz#Sqfppglnjmbwfg#az#wkfPf`lmg#Tlqog#Tbqgjpwqjavwjlm#le#pwzof>!slpjwjlm9wkf#qfpw#le#wkf#`kbqb`wfqjyfg#az#qfo>!mleloolt!=gfqjufp#eqln#wkfqbwkfq#wkbm#wkf#b#`lnajmbwjlm#lepwzof>!tjgwk9233Fmdojpk.psfbhjmd`lnsvwfq#p`jfm`falqgfq>!3!#bow>!wkf#f{jpwfm`f#leGfnl`qbwj`#Sbqwz!#pwzof>!nbqdjm.Elq#wkjp#qfbplm/-ip!=?,p`qjsw=\\t\\npAzWbdMbnf+p*X3^ip!=?,p`qjsw=\\u000E\\t?-ip!=?,p`qjsw=\\u000E\\tojmh#qfo>!j`lm!#$#bow>$$#`obpp>$elqnbwjlm#le#wkfufqpjlmp#le#wkf#?,b=?,gju=?,gju=,sbdf=\\t##?sbdf=\\t?gju#`obpp>!`lmwaf`bnf#wkf#ejqpwabkbpb#Jmglmfpjbfmdojpk#+pjnsof*\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@=i=l<^<\\\\=n=m<V<T<V<R<P<S<\\\\<Q<T<T=c<^<W=c<Y=n=m=c<x<R<]<\\\\<^<T=n=`=k<Y<W<R<^<Y<V<\\\\=l<\\\\<[<^<T=n<T=c<t<Q=n<Y=l<Q<Y=n<r=n<^<Y=n<T=n=`<Q<\\\\<S=l<T<P<Y=l<T<Q=n<Y=l<Q<Y=n<V<R=n<R=l<R<_<R=m=n=l<\\\\<Q<T=j=g<V<\\\\=k<Y=m=n<^<Y=o=m<W<R<^<T=c=i<S=l<R<]<W<Y<P=g<S<R<W=o=k<T=n=`=c<^<W=c=b=n=m=c<Q<\\\\<T<]<R<W<Y<Y<V<R<P<S<\\\\<Q<T=c<^<Q<T<P<\\\\<Q<T<Y=m=l<Y<X=m=n<^<\\\\4K5h5i5d4K4Z5f4U4K5h4]4J5f4_5f4E4K5h4K5j4F5n4K5h5i4X4K4]5o4K4F5o4K5h4_5f4K4]4K4F4K5h5i5o4F5d4D4E4K5h4_4U5d4C5f4E4K4A4Y4K4J5f4K4F4K5h4U4K5h5i5f4E4K5h4Y5d4F5f4K4F4K5h4K5j4F4]5j4F4K5h4F4Y4K5i5f5i4K5h4I4_5h4K5i5f4K5h5i4X4K4]5o4E4K5h5i4]4J5f4K4Fqlalwp!#`lmwfmw>!?gju#jg>!ellwfq!=wkf#Vmjwfg#Pwbwfp?jnd#pq`>!kwws9,,-isd\\u007Fqjdkw\\u007Fwkvna\\u007F-ip!=?,p`qjsw=\\u000E\\t?ol`bwjlm-sqlwl`loeqbnfalqgfq>!3!#p!#,=\\t?nfwb#mbnf>!?,b=?,gju=?,gju=?elmw.tfjdkw9alog8%rvlw8#bmg#%rvlw8gfsfmgjmd#lm#wkf#nbqdjm938sbggjmd9!#qfo>!mleloolt!#Sqfpjgfmw#le#wkf#wtfmwjfwk#`fmwvqzfujpjlm=\\t##?,sbdfJmwfqmfw#F{solqfqb-bpzm`#>#wqvf8\\u000E\\tjmelqnbwjlm#balvw?gju#jg>!kfbgfq!=!#b`wjlm>!kwws9,,?b#kqfe>!kwwsp9,,?gju#jg>!`lmwfmw!?,gju=\\u000E\\t?,gju=\\u000E\\t?gfqjufg#eqln#wkf#?jnd#pq`>$kwws9,,b``lqgjmd#wl#wkf#\\t?,algz=\\t?,kwno=\\tpwzof>!elmw.pjyf9p`qjsw#obmdvbdf>!Bqjbo/#Kfoufwj`b/?,b=?psbm#`obpp>!?,p`qjsw=?p`qjsw#slojwj`bo#sbqwjfpwg=?,wq=?,wbaof=?kqfe>!kwws9,,ttt-jmwfqsqfwbwjlm#leqfo>!pwzofpkffw!#gl`vnfmw-tqjwf+$?`kbqpfw>!vwe.;!=\\tafdjmmjmd#le#wkf#qfufbofg#wkbw#wkfwfofujpjlm#pfqjfp!#qfo>!mleloolt!=#wbqdfw>!\\\\aobmh!=`objnjmd#wkbw#wkfkwws&0B&1E&1Ettt-nbmjefpwbwjlmp#leSqjnf#Njmjpwfq#lejmeovfm`fg#az#wkf`obpp>!`ofbqej{!=,gju=\\u000E\\t?,gju=\\u000E\\t\\u000E\\twkqff.gjnfmpjlmbo@kvq`k#le#Fmdobmgle#Mlqwk#@bqlojmbprvbqf#hjolnfwqfp-bggFufmwOjpwfmfqgjpwjm`w#eqln#wkf`lnnlmoz#hmltm#bpSklmfwj`#Boskbafwgf`obqfg#wkbw#wkf`lmwqloofg#az#wkfAfmibnjm#Eqbmhojmqlof.sobzjmd#dbnfwkf#Vmjufqpjwz#lejm#Tfpwfqm#Fvqlsfsfqplmbo#`lnsvwfqSqlif`w#Dvwfmafqdqfdbqgofpp#le#wkfkbp#affm#sqlslpfgwldfwkfq#tjwk#wkf=?,oj=?oj#`obpp>!jm#plnf#`lvmwqjfpnjm-ip!=?,p`qjsw=le#wkf#slsvobwjlmleej`jbo#obmdvbdf?jnd#pq`>!jnbdfp,jgfmwjejfg#az#wkfmbwvqbo#qfplvq`fp`obppjej`bwjlm#le`bm#af#`lmpjgfqfgrvbmwvn#nf`kbmj`pMfufqwkfofpp/#wkfnjoojlm#zfbqp#bdl?,algz=\\u000E\\t?,kwno=\\u000E\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@\\twbhf#bgubmwbdf#lebmg/#b``lqgjmd#wlbwwqjavwfg#wl#wkfNj`qlplew#Tjmgltpwkf#ejqpw#`fmwvqzvmgfq#wkf#`lmwqlogju#`obpp>!kfbgfqpklqwoz#bewfq#wkfmlwbaof#f{`fswjlmwfmp#le#wklvpbmgppfufqbo#gjeefqfmwbqlvmg#wkf#tlqog-qfb`kjmd#njojwbqzjplobwfg#eqln#wkflsslpjwjlm#wl#wkfwkf#Log#WfpwbnfmwBeqj`bm#Bnfqj`bmpjmpfqwfg#jmwl#wkfpfsbqbwf#eqln#wkfnfwqlslojwbm#bqfbnbhfp#jw#slppjaofb`hmltofgdfg#wkbwbqdvbaoz#wkf#nlpwwzsf>!wf{w,`pp!=\\twkf#JmwfqmbwjlmboB``lqgjmd#wl#wkf#sf>!wf{w,`pp!#,=\\t`ljm`jgf#tjwk#wkfwtl.wkjqgp#le#wkfGvqjmd#wkjp#wjnf/gvqjmd#wkf#sfqjlgbmmlvm`fg#wkbw#kfwkf#jmwfqmbwjlmbobmg#nlqf#qf`fmwozafojfufg#wkbw#wkf`lmp`jlvpmfpp#bmgelqnfqoz#hmltm#bppvqqlvmgfg#az#wkfejqpw#bssfbqfg#jml``bpjlmbooz#vpfgslpjwjlm9baplovwf8!#wbqdfw>!\\\\aobmh!#slpjwjlm9qfobwjuf8wf{w.bojdm9`fmwfq8ib{,ojap,irvfqz,2-ab`hdqlvmg.`lolq9 wzsf>!bssoj`bwjlm,bmdvbdf!#`lmwfmw>!?nfwb#kwws.frvju>!Sqjub`z#Sloj`z?,b=f+!&0@p`qjsw#pq`>$!#wbqdfw>!\\\\aobmh!=Lm#wkf#lwkfq#kbmg/-isd\\u007Fwkvna\\u007Fqjdkw\\u007F1?,gju=?gju#`obpp>!?gju#pwzof>!eolbw9mjmfwffmwk#`fmwvqz?,algz=\\u000E\\t?,kwno=\\u000E\\t?jnd#pq`>!kwws9,,p8wf{w.bojdm9`fmwfqelmw.tfjdkw9#alog8#B``lqgjmd#wl#wkf#gjeefqfm`f#afwtffm!#eqbnfalqgfq>!3!#!#pwzof>!slpjwjlm9ojmh#kqfe>!kwws9,,kwno7,ollpf-gwg!=\\tgvqjmd#wkjp#sfqjlg?,wg=?,wq=?,wbaof=`olpfoz#qfobwfg#wlelq#wkf#ejqpw#wjnf8elmw.tfjdkw9alog8jmsvw#wzsf>!wf{w!#?psbm#pwzof>!elmw.lmqfbgzpwbwf`kbmdf\\n?gju#`obpp>!`ofbqgl`vnfmw-ol`bwjlm-#Elq#f{bnsof/#wkf#b#tjgf#ubqjfwz#le#?\\\"GL@WZSF#kwno=\\u000E\\t?%maps8%maps8%maps8!=?b#kqfe>!kwws9,,pwzof>!eolbw9ofew8`lm`fqmfg#tjwk#wkf>kwws&0B&1E&1Ettt-jm#slsvobq#`vowvqfwzsf>!wf{w,`pp!#,=jw#jp#slppjaof#wl#Kbqubqg#Vmjufqpjwzwzofpkffw!#kqfe>!,wkf#nbjm#`kbqb`wfqL{elqg#Vmjufqpjwz##mbnf>!hfztlqgp!#`pwzof>!wf{w.bojdm9wkf#Vmjwfg#Hjmdglnefgfqbo#dlufqmnfmw?gju#pwzof>!nbqdjm#gfsfmgjmd#lm#wkf#gfp`qjswjlm#le#wkf?gju#`obpp>!kfbgfq-njm-ip!=?,p`qjsw=gfpwqv`wjlm#le#wkfpojdkwoz#gjeefqfmwjm#b``lqgbm`f#tjwkwfof`lnnvmj`bwjlmpjmgj`bwfp#wkbw#wkfpklqwoz#wkfqfbewfqfpsf`jbooz#jm#wkf#Fvqlsfbm#`lvmwqjfpKltfufq/#wkfqf#bqfpq`>!kwws9,,pwbwj`pvddfpwfg#wkbw#wkf!#pq`>!kwws9,,ttt-b#obqdf#mvnafq#le#Wfof`lnnvmj`bwjlmp!#qfo>!mleloolt!#wKloz#Qlnbm#Fnsfqlqbonlpw#f{`ovpjufoz!#alqgfq>!3!#bow>!Pf`qfwbqz#le#Pwbwf`vonjmbwjmd#jm#wkf@JB#Tlqog#Eb`wallhwkf#nlpw#jnslqwbmwbmmjufqpbqz#le#wkfpwzof>!ab`hdqlvmg.?oj=?fn=?b#kqfe>!,wkf#Bwobmwj`#L`fbmpwqj`woz#psfbhjmd/pklqwoz#afelqf#wkfgjeefqfmw#wzsfp#lewkf#Lwwlnbm#Fnsjqf=?jnd#pq`>!kwws9,,Bm#Jmwqlgv`wjlm#wl`lmpfrvfm`f#le#wkfgfsbqwvqf#eqln#wkf@lmefgfqbwf#Pwbwfpjmgjdfmlvp#sflsofpSql`ffgjmdp#le#wkfjmelqnbwjlm#lm#wkfwkflqjfp#kbuf#affmjmuloufnfmw#jm#wkfgjujgfg#jmwl#wkqffbgib`fmw#`lvmwqjfpjp#qfpslmpjaof#elqgjpplovwjlm#le#wkf`loobalqbwjlm#tjwktjgfoz#qfdbqgfg#bpkjp#`lmwfnslqbqjfpelvmgjmd#nfnafq#leGlnjmj`bm#Qfsvaoj`dfmfqbooz#b``fswfgwkf#slppjajojwz#lebqf#bopl#bubjobaofvmgfq#`lmpwqv`wjlmqfpwlqbwjlm#le#wkfwkf#dfmfqbo#svaoj`jp#bonlpw#fmwjqfozsbppfp#wkqlvdk#wkfkbp#affm#pvddfpwfg`lnsvwfq#bmg#ujgflDfqnbmj`#obmdvbdfp#b``lqgjmd#wl#wkf#gjeefqfmw#eqln#wkfpklqwoz#bewfqtbqgpkqfe>!kwwsp9,,ttt-qf`fmw#gfufolsnfmwAlbqg#le#Gjqf`wlqp?gju#`obpp>!pfbq`k\\u007F#?b#kqfe>!kwws9,,Jm#sbqwj`vobq/#wkfNvowjsof#ellwmlwfplq#lwkfq#pvapwbm`fwklvpbmgp#le#zfbqpwqbmpobwjlm#le#wkf?,gju=\\u000E\\t?,gju=\\u000E\\t\\u000E\\t?b#kqfe>!jmgf{-skstbp#fpwbaojpkfg#jmnjm-ip!=?,p`qjsw=\\tsbqwj`jsbwf#jm#wkfb#pwqlmd#jmeovfm`fpwzof>!nbqdjm.wls9qfsqfpfmwfg#az#wkfdqbgvbwfg#eqln#wkfWqbgjwjlmbooz/#wkfFofnfmw+!p`qjsw!*8Kltfufq/#pjm`f#wkf,gju=\\t?,gju=\\t?gju#ofew8#nbqdjm.ofew9sqlwf`wjlm#bdbjmpw38#ufqwj`bo.bojdm9Vmelqwvmbwfoz/#wkfwzsf>!jnbdf,{.j`lm,gju=\\t?gju#`obpp>!#`obpp>!`ofbqej{!=?gju#`obpp>!ellwfq\\n\\n?,gju=\\t\\n\\n?,gju=\\twkf#nlwjlm#sj`wvqf<}=f<W<_<\\\\=l=m<V<T<]=f<W<_<\\\\=l=m<V<T<H<Y<X<Y=l<\\\\=j<T<T<Q<Y=m<V<R<W=`<V<R=m<R<R<]=e<Y<Q<T<Y=m<R<R<]=e<Y<Q<T=c<S=l<R<_=l<\\\\<P<P=g<r=n<S=l<\\\\<^<T=n=`<]<Y=m<S<W<\\\\=n<Q<R<P<\\\\=n<Y=l<T<\\\\<W=g<S<R<[<^<R<W=c<Y=n<S<R=m<W<Y<X<Q<T<Y=l<\\\\<[<W<T=k<Q=g=i<S=l<R<X=o<V=j<T<T<S=l<R<_=l<\\\\<P<P<\\\\<S<R<W<Q<R=m=n=`=b<Q<\\\\=i<R<X<T=n=m=c<T<[<]=l<\\\\<Q<Q<R<Y<Q<\\\\=m<Y<W<Y<Q<T=c<T<[<P<Y<Q<Y<Q<T=c<V<\\\\=n<Y<_<R=l<T<T<|<W<Y<V=m<\\\\<Q<X=l\\fHJ\\fIa\\fHY\\fHR\\fH\\\\\\fHR\\fHB\\fId\\fHD\\fIm\\fHi\\fH^\\fHF\\fIa\\fH\\\\\\fHJ\\fHR\\fHD\\fHA\\fHR\\fH\\\\\\fHH\\fIl\\fHC\\fHi\\fHD\\fIm\\fHJ\\fIk\\fHZ\\fHU\\fHS\\fHD\\fIa\\fHJ\\fIl\\fHk\\fHn\\fHM\\fHS\\fHC\\fHR\\fHJ\\fHS\\fH^\\fIa\\fH^\\fIl\\fHi\\fHK\\fHS\\fHy\\fHR\\fH\\\\\\fHY\\fIl\\fHM\\fHS\\fHC\\fIg\\fHv\\fHS\\fHs\\fIa\\fHL\\fIk\\fHT\\fHB\\fHR\\fHv\\fHR\\fH\\\\\\fHp\\fHn\\fHy\\fIa\\fHZ\\fHD\\fHJ\\fIm\\fHD\\fHS\\fHC\\fHR\\fHF\\fIa\\fH\\\\\\fHC\\fIg\\fH{\\fHi\\fHD\\fIm\\fHT\\fHR\\fH\\\\\\fH}\\fHD\\fH^\\fHR\\fHk\\fHD\\fHF\\fHR\\fH\\\\\\fIa\\fHs\\fIl\\fHZ\\fH\\\\\\fIa\\fHH\\fIg\\fHn\\fH^\\fIg\\fHy\\fHT\\fHA\\fHR\\fHG\\fHP\\fIa\\fH^\\fId\\fHZ\\fHZ\\fH\\\\\\fIa\\fHH\\fIk\\fHn\\fHF\\fIa\\fH\\\\\\fHJ\\fIk\\fHZ\\fHF\\fIa\\fH^\\fIk\\fHC\\fH\\\\\\fHy\\fIk\\fHn\\fHJ\\fIa\\fH\\\\\\fHT\\fIa\\fHI\\fHS\\fHH\\fHS\\fHe\\fHH\\fIa\\fHF\\fHR\\fHJ\\fHe\\fHD\\fIa\\fHU\\fIk\\fHn\\fHv\\fHS\\fHs\\fIa\\fHL\\fHR\\fHC\\fHR\\fHH\\fIa\\fH\\\\\\fHR\\fHp\\fIa\\fHC\\fHR\\fHJ\\fHR\\fHF\\fIm\\fH\\\\\\fHR\\fHD\\fIk\\fHp\\fIg\\fHM\\fHP\\fIk\\fHn\\fHi\\fHD\\fIm\\fHY\\fHR\\fHJ\\fHZ\\fIa\\fH\\\\\\fIk\\fHO\\fIl\\fHZ\\fHS\\fHy\\fIa\\fH[\\fHR\\fHT\\fH\\\\\\fHy\\fHR\\fH\\\\\\fIl\\fHT\\fHn\\fH{\\fIa\\fH\\\\\\fHU\\fHF\\fH\\\\\\fHS\\fHO\\fHR\\fHB\\fH@\\fIa\\fH\\\\\\fHR\\fHn\\fHM\\fH@\\fHv\\fIa\\fHv\\fIg\\fHn\\fHe\\fHF\\fH^\\fH@\\fIa\\fHK\\fHB\\fHn\\fHH\\fIa\\fH\\\\\\fIl\\fHT\\fHn\\fHF\\fH\\\\\\fIa\\fHy\\fHe\\fHB\\fIa\\fHB\\fIl\\fHJ\\fHB\\fHR\\fHK\\fIa\\fHC\\fHB\\fHT\\fHU\\fHR\\fHC\\fHH\\fHR\\fHZ\\fH@\\fIa\\fHJ\\fIg\\fHn\\fHB\\fIl\\fHM\\fHS\\fHC\\fHR\\fHj\\fHd\\fHF\\fIl\\fHc\\fH^\\fHB\\fIg\\fH@\\fHR\\fHk\\fH^\\fHT\\fHn\\fHz\\fIa\\fHC\\fHR\\fHj\\fHF\\fH\\\\\\fIk\\fHZ\\fHD\\fHi\\fHD\\fIm\\fH@\\fHn\\fHK\\fH@\\fHR\\fHp\\fHP\\fHR\\fH\\\\\\fHD\\fHY\\fIl\\fHD\\fHH\\fHB\\fHF\\fIa\\fH\\\\\\fHB\\fIm\\fHz\\fHF\\fIa\\fH\\\\\\fHZ\\fIa\\fHD\\fHF\\fH\\\\\\fHS\\fHY\\fHR\\fH\\\\\\fHD\\fIm\\fHy\\fHT\\fHR\\fHD\\fHT\\fHB\\fH\\\\\\fIa\\fHI\\fHD\\fHj\\fHC\\fIg\\fHp\\fHS\\fHH\\fHT\\fIg\\fHB\\fHY\\fHR\\fH\\\\4K5h5i4X4K4]5o4K4F4K5h5i5j4F4C5f4K4F4K5h5o5i4D5f5d4F4]4K5h5i4X4K5k4C4K4F4U4C4C4K5h4^5d4K4]4U4C4C4K5h4]4C5d4C4K5h4I4_5h4K5i5f4E4K5h5m5d4F5d4X5d4D4K5h5i4_4K4D5n4K4F4K5h5i4U5h5d5i4K4F4K5h5i4_5h4_5h4K4F4K5h4@4]4K5m5f5o4_4K5h4K4_5h4K5i5f4E4K5h4K4F4Y4K5h4K4Fhfztlqgp!#`lmwfmw>!t0-lqd,2:::,{kwno!=?b#wbqdfw>!\\\\aobmh!#wf{w,kwno8#`kbqpfw>!#wbqdfw>!\\\\aobmh!=?wbaof#`foosbggjmd>!bvwl`lnsofwf>!lee!#wf{w.bojdm9#`fmwfq8wl#obpw#ufqpjlm#az#ab`hdqlvmg.`lolq9# !#kqfe>!kwws9,,ttt-,gju=?,gju=?gju#jg>?b#kqfe>! !#`obpp>!!=?jnd#pq`>!kwws9,,`qjsw!#pq`>!kwws9,,\\t?p`qjsw#obmdvbdf>!,,FM!#!kwws9,,ttt-tfm`lgfVQJ@lnslmfmw+!#kqfe>!ibubp`qjsw9?gju#`obpp>!`lmwfmwgl`vnfmw-tqjwf+$?p`slpjwjlm9#baplovwf8p`qjsw#pq`>!kwws9,,#pwzof>!nbqdjm.wls9-njm-ip!=?,p`qjsw=\\t?,gju=\\t?gju#`obpp>!t0-lqd,2:::,{kwno!#\\t\\u000E\\t?,algz=\\u000E\\t?,kwno=gjpwjm`wjlm#afwtffm,!#wbqdfw>!\\\\aobmh!=?ojmh#kqfe>!kwws9,,fm`lgjmd>!vwe.;!<=\\tt-bggFufmwOjpwfmfq<b`wjlm>!kwws9,,ttt-j`lm!#kqfe>!kwws9,,#pwzof>!ab`hdqlvmg9wzsf>!wf{w,`pp!#,=\\tnfwb#sqlsfqwz>!ld9w?jmsvw#wzsf>!wf{w!##pwzof>!wf{w.bojdm9wkf#gfufolsnfmw#le#wzofpkffw!#wzsf>!wfkwno8#`kbqpfw>vwe.;jp#`lmpjgfqfg#wl#afwbaof#tjgwk>!233&!#Jm#bggjwjlm#wl#wkf#`lmwqjavwfg#wl#wkf#gjeefqfm`fp#afwtffmgfufolsnfmw#le#wkf#Jw#jp#jnslqwbmw#wl#?,p`qjsw=\\t\\t?p`qjsw##pwzof>!elmw.pjyf92=?,psbm=?psbm#jg>daOjaqbqz#le#@lmdqfpp?jnd#pq`>!kwws9,,jnFmdojpk#wqbmpobwjlmB`bgfnz#le#P`jfm`fpgju#pwzof>!gjpsobz9`lmpwqv`wjlm#le#wkf-dfwFofnfmwAzJg+jg*jm#`lmivm`wjlm#tjwkFofnfmw+$p`qjsw$*8#?nfwb#sqlsfqwz>!ld9<}=f<W<_<\\\\=l=m<V<T\\t#wzsf>!wf{w!#mbnf>!=Sqjub`z#Sloj`z?,b=bgnjmjpwfqfg#az#wkffmbaofPjmdofQfrvfpwpwzof>%rvlw8nbqdjm9?,gju=?,gju=?,gju=?=?jnd#pq`>!kwws9,,j#pwzof>%rvlw8eolbw9qfefqqfg#wl#bp#wkf#wlwbo#slsvobwjlm#lejm#Tbpkjmdwlm/#G-@-#pwzof>!ab`hdqlvmg.bnlmd#lwkfq#wkjmdp/lqdbmjybwjlm#le#wkfsbqwj`jsbwfg#jm#wkfwkf#jmwqlgv`wjlm#lejgfmwjejfg#tjwk#wkfej`wjlmbo#`kbqb`wfq#L{elqg#Vmjufqpjwz#njpvmgfqpwbmgjmd#leWkfqf#bqf/#kltfufq/pwzofpkffw!#kqfe>!,@lovnajb#Vmjufqpjwzf{sbmgfg#wl#jm`ovgfvpvbooz#qfefqqfg#wljmgj`bwjmd#wkbw#wkfkbuf#pvddfpwfg#wkbwbeejojbwfg#tjwk#wkf`lqqfobwjlm#afwtffmmvnafq#le#gjeefqfmw=?,wg=?,wq=?,wbaof=Qfsvaoj`#le#Jqfobmg\\t?,p`qjsw=\\t?p`qjsw#vmgfq#wkf#jmeovfm`f`lmwqjavwjlm#wl#wkfLeej`jbo#tfapjwf#lekfbgrvbqwfqp#le#wkf`fmwfqfg#bqlvmg#wkfjnsoj`bwjlmp#le#wkfkbuf#affm#gfufolsfgEfgfqbo#Qfsvaoj`#leaf`bnf#jm`qfbpjmdoz`lmwjmvbwjlm#le#wkfMlwf/#kltfufq/#wkbwpjnjobq#wl#wkbw#le#`bsbajojwjfp#le#wkfb``lqgbm`f#tjwk#wkfsbqwj`jsbmwp#jm#wkfevqwkfq#gfufolsnfmwvmgfq#wkf#gjqf`wjlmjp#lewfm#`lmpjgfqfgkjp#zlvmdfq#aqlwkfq?,wg=?,wq=?,wbaof=?b#kwws.frvju>![.VB.skzpj`bo#sqlsfqwjfple#Aqjwjpk#@lovnajbkbp#affm#`qjwj`jyfg+tjwk#wkf#f{`fswjlmrvfpwjlmp#balvw#wkfsbppjmd#wkqlvdk#wkf3!#`foosbggjmd>!3!#wklvpbmgp#le#sflsofqfgjqf`wp#kfqf-#Elqkbuf#`kjogqfm#vmgfq&0F&0@,p`qjsw&0F!**8?b#kqfe>!kwws9,,ttt-?oj=?b#kqfe>!kwws9,,pjwf\\\\mbnf!#`lmwfmw>!wf{w.gf`lqbwjlm9mlmfpwzof>!gjpsobz9#mlmf?nfwb#kwws.frvju>![.mft#Gbwf+*-dfwWjnf+*#wzsf>!jnbdf,{.j`lm!?,psbm=?psbm#`obpp>!obmdvbdf>!ibubp`qjswtjmglt-ol`bwjlm-kqfe?b#kqfe>!ibubp`qjsw9..=\\u000E\\t?p`qjsw#wzsf>!w?b#kqfe>$kwws9,,ttt-klqw`vw#j`lm!#kqfe>!?,gju=\\u000E\\t?gju#`obpp>!?p`qjsw#pq`>!kwws9,,!#qfo>!pwzofpkffw!#w?,gju=\\t?p`qjsw#wzsf>,b=#?b#kqfe>!kwws9,,#booltWqbmpsbqfm`z>![.VB.@lnsbwjaof!#`lmqfobwjlmpkjs#afwtffm\\t?,p`qjsw=\\u000E\\t?p`qjsw#?,b=?,oj=?,vo=?,gju=bppl`jbwfg#tjwk#wkf#sqldqbnnjmd#obmdvbdf?,b=?b#kqfe>!kwws9,,?,b=?,oj=?oj#`obpp>!elqn#b`wjlm>!kwws9,,?gju#pwzof>!gjpsobz9wzsf>!wf{w!#mbnf>!r!?wbaof#tjgwk>!233&!#ab`hdqlvmg.slpjwjlm9!#alqgfq>!3!#tjgwk>!qfo>!pklqw`vw#j`lm!#k5=?vo=?oj=?b#kqfe>!##?nfwb#kwws.frvju>!`pp!#nfgjb>!p`qffm!#qfpslmpjaof#elq#wkf#!#wzsf>!bssoj`bwjlm,!#pwzof>!ab`hdqlvmg.kwno8#`kbqpfw>vwe.;!#booltwqbmpsbqfm`z>!pwzofpkffw!#wzsf>!wf\\u000E\\t?nfwb#kwws.frvju>!=?,psbm=?psbm#`obpp>!3!#`foopsb`jmd>!3!=8\\t?,p`qjsw=\\t?p`qjsw#plnfwjnfp#`boofg#wkfglfp#mlw#mf`fppbqjozElq#nlqf#jmelqnbwjlmbw#wkf#afdjmmjmd#le#?\\\"GL@WZSF#kwno=?kwnosbqwj`vobqoz#jm#wkf#wzsf>!kjggfm!#mbnf>!ibubp`qjsw9uljg+3*8!feef`wjufmfpp#le#wkf#bvwl`lnsofwf>!lee!#dfmfqbooz#`lmpjgfqfg=?jmsvw#wzsf>!wf{w!#!=?,p`qjsw=\\u000E\\t?p`qjswwkqlvdklvw#wkf#tlqog`lnnlm#njp`lm`fswjlmbppl`jbwjlm#tjwk#wkf?,gju=\\t?,gju=\\t?gju#`gvqjmd#kjp#ojefwjnf/`lqqfpslmgjmd#wl#wkfwzsf>!jnbdf,{.j`lm!#bm#jm`qfbpjmd#mvnafqgjsolnbwj`#qfobwjlmpbqf#lewfm#`lmpjgfqfgnfwb#`kbqpfw>!vwe.;!#?jmsvw#wzsf>!wf{w!#f{bnsofp#jm`ovgf#wkf!=?jnd#pq`>!kwws9,,jsbqwj`jsbwjlm#jm#wkfwkf#fpwbaojpknfmw#le\\t?,gju=\\t?gju#`obpp>!%bns8maps8%bns8maps8wl#gfwfqnjmf#tkfwkfqrvjwf#gjeefqfmw#eqlnnbqhfg#wkf#afdjmmjmdgjpwbm`f#afwtffm#wkf`lmwqjavwjlmp#wl#wkf`lmeoj`w#afwtffm#wkftjgfoz#`lmpjgfqfg#wltbp#lmf#le#wkf#ejqpwtjwk#ubqzjmd#gfdqffpkbuf#psf`vobwfg#wkbw+gl`vnfmw-dfwFofnfmwsbqwj`jsbwjmd#jm#wkflqjdjmbooz#gfufolsfgfwb#`kbqpfw>!vwe.;!=#wzsf>!wf{w,`pp!#,=\\tjmwfq`kbmdfbaoz#tjwknlqf#`olpfoz#qfobwfgpl`jbo#bmg#slojwj`bowkbw#tlvog#lwkfqtjpfsfqsfmgj`vobq#wl#wkfpwzof#wzsf>!wf{w,`ppwzsf>!pvanjw!#mbnf>!ebnjojfp#qfpjgjmd#jmgfufolsjmd#`lvmwqjfp`lnsvwfq#sqldqbnnjmdf`lmlnj`#gfufolsnfmwgfwfqnjmbwjlm#le#wkfelq#nlqf#jmelqnbwjlmlm#pfufqbo#l``bpjlmpslqwvdv/Fp#+Fvqlsfv*<O<V=l<\\\\={<Q=m=`<V<\\\\=o<V=l<\\\\={<Q=m=`<V<\\\\<L<R=m=m<T<U=m<V<R<U<P<\\\\=n<Y=l<T<\\\\<W<R<^<T<Q=h<R=l<P<\\\\=j<T<T=o<S=l<\\\\<^<W<Y<Q<T=c<Q<Y<R<]=i<R<X<T<P<R<T<Q=h<R=l<P<\\\\=j<T=c<t<Q=h<R=l<P<\\\\=j<T=c<L<Y=m<S=o<]<W<T<V<T<V<R<W<T=k<Y=m=n<^<R<T<Q=h<R=l<P<\\\\=j<T=b=n<Y=l=l<T=n<R=l<T<T<X<R=m=n<\\\\=n<R=k<Q<R4K5h5i4F5d4K4@4C5d5j4K5h4K4X4F4]4K5o4K4F4K5h4K5n4F4]4K4A4K4Fkwno8#`kbqpfw>VWE.;!#pfwWjnflvw+evm`wjlm+*gjpsobz9jmojmf.aol`h8?jmsvw#wzsf>!pvanjw!#wzsf#>#$wf{w,ibubp`qj?jnd#pq`>!kwws9,,ttt-!#!kwws9,,ttt-t0-lqd,pklqw`vw#j`lm!#kqfe>!!#bvwl`lnsofwf>!lee!#?,b=?,gju=?gju#`obpp>?,b=?,oj=\\t?oj#`obpp>!`pp!#wzsf>!wf{w,`pp!#?elqn#b`wjlm>!kwws9,,{w,`pp!#kqfe>!kwws9,,ojmh#qfo>!bowfqmbwf!#\\u000E\\t?p`qjsw#wzsf>!wf{w,#lm`oj`h>!ibubp`qjsw9+mft#Gbwf*-dfwWjnf+*~kfjdkw>!2!#tjgwk>!2!#Sflsof$p#Qfsvaoj`#le##?b#kqfe>!kwws9,,ttt-wf{w.gf`lqbwjlm9vmgfqwkf#afdjmmjmd#le#wkf#?,gju=\\t?,gju=\\t?,gju=\\tfpwbaojpknfmw#le#wkf#?,gju=?,gju=?,gju=?,g ujftslqwxnjm.kfjdkw9\\t?p`qjsw#pq`>!kwws9,,lswjlm=?lswjlm#ubovf>lewfm#qfefqqfg#wl#bp#,lswjlm=\\t?lswjlm#ubov?\\\"GL@WZSF#kwno=\\t?\\\"..XJmwfqmbwjlmbo#Bjqslqw=\\t?b#kqfe>!kwws9,,ttt?,b=?b#kqfe>!kwws9,,t\\fTL\\fT^\\fTE\\fT^\\fUh\\fT{\\fTN\\roI\\ro|\\roL\\ro{\\roO\\rov\\rot\\nAO\\u0005Gx\\bTA\\nzk#+\\u000BUm\\u0005Gx*\\fHD\\fHS\\fH\\\\\\fIa\\fHJ\\fIk\\fHZ\\fHM\\fHR\\fHe\\fHD\\fH^\\fIg\\fHM\\fHy\\fIa\\fH[\\fIk\\fHH\\fIa\\fH\\\\\\fHp\\fHR\\fHD\\fHy\\fHR\\fH\\\\\\fIl\\fHT\\fHn\\fH@\\fHn\\fHK\\fHS\\fHH\\fHT\\fIa\\fHI\\fHR\\fHF\\fHD\\fHR\\fHT\\fIa\\fHY\\fIl\\fHy\\fHR\\fH\\\\\\fHT\\fHn\\fHT\\fIa\\fHy\\fH\\\\\\fHO\\fHT\\fHR\\fHB\\fH{\\fIa\\fH\\\\\\fIl\\fHv\\fHS\\fHs\\fIa\\fHL\\fIg\\fHn\\fHY\\fHS\\fHp\\fIa\\fHr\\fHR\\fHD\\fHi\\fHB\\fIk\\fH\\\\\\fHS\\fHy\\fHR\\fHY\\fHS\\fHA\\fHS\\fHD\\fIa\\fHD\\fH{\\fHR\\fHM\\fHS\\fHC\\fHR\\fHm\\fHy\\fIa\\fHC\\fIg\\fHn\\fHy\\fHS\\fHT\\fIm\\fH\\\\\\fHy\\fIa\\fH[\\fHR\\fHF\\fHU\\fIm\\fHm\\fHv\\fHH\\fIl\\fHF\\fIa\\fH\\\\\\fH@\\fHn\\fHK\\fHD\\fHs\\fHS\\fHF\\fIa\\fHF\\fHO\\fIl\\fHy\\fIa\\fH\\\\\\fHS\\fHy\\fIk\\fHs\\fHF\\fIa\\fH\\\\\\fHR\\fH\\\\\\fHn\\fHA\\fHF\\fIa\\fH\\\\\\fHR\\fHF\\fIa\\fHH\\fHB\\fHR\\fH^\\fHS\\fHy\\fIg\\fHn\\fH\\\\\\fHG\\fHP\\fIa\\fHH\\fHR\\fH\\\\\\fHD\\fHS\\fH\\\\\\fIa\\fHB\\fHR\\fHO\\fH^\\fHS\\fHB\\fHS\\fHs\\fIk\\fHMgfp`qjswjlm!#`lmwfmw>!gl`vnfmw-ol`bwjlm-sqlw-dfwFofnfmwpAzWbdMbnf+?\\\"GL@WZSF#kwno=\\t?kwno#?nfwb#`kbqpfw>!vwe.;!=9vqo!#`lmwfmw>!kwws9,,-`pp!#qfo>!pwzofpkffw!pwzof#wzsf>!wf{w,`pp!=wzsf>!wf{w,`pp!#kqfe>!t0-lqd,2:::,{kwno!#{nowzsf>!wf{w,ibubp`qjsw!#nfwklg>!dfw!#b`wjlm>!ojmh#qfo>!pwzofpkffw!##>#gl`vnfmw-dfwFofnfmwwzsf>!jnbdf,{.j`lm!#,=`foosbggjmd>!3!#`foops-`pp!#wzsf>!wf{w,`pp!#?,b=?,oj=?oj=?b#kqfe>!!#tjgwk>!2!#kfjdkw>!2!!=?b#kqfe>!kwws9,,ttt-pwzof>!gjpsobz9mlmf8!=bowfqmbwf!#wzsf>!bssoj.,,T0@,,GWG#[KWNO#2-3#foopsb`jmd>!3!#`foosbg#wzsf>!kjggfm!#ubovf>!,b=%maps8?psbm#qlof>!p\\t?jmsvw#wzsf>!kjggfm!#obmdvbdf>!IbubP`qjsw!##gl`vnfmw-dfwFofnfmwpAd>!3!#`foopsb`jmd>!3!#zsf>!wf{w,`pp!#nfgjb>!wzsf>$wf{w,ibubp`qjsw$tjwk#wkf#f{`fswjlm#le#zsf>!wf{w,`pp!#qfo>!pw#kfjdkw>!2!#tjgwk>!2!#>$(fm`lgfVQJ@lnslmfmw+?ojmh#qfo>!bowfqmbwf!#\\talgz/#wq/#jmsvw/#wf{wnfwb#mbnf>!qlalwp!#`lmnfwklg>!slpw!#b`wjlm>!=\\t?b#kqfe>!kwws9,,ttt-`pp!#qfo>!pwzofpkffw!#?,gju=?,gju=?gju#`obppobmdvbdf>!ibubp`qjsw!=bqjb.kjggfm>!wqvf!=.[?qjsw!#wzsf>!wf{w,ibubpo>38~*+*8\\t+evm`wjlm+*xab`hdqlvmg.jnbdf9#vqo+,b=?,oj=?oj=?b#kqfe>!k\\n\\n?oj=?b#kqfe>!kwws9,,bwlq!#bqjb.kjggfm>!wqv=#?b#kqfe>!kwws9,,ttt-obmdvbdf>!ibubp`qjsw!#,lswjlm=\\t?lswjlm#ubovf,gju=?,gju=?gju#`obpp>qbwlq!#bqjb.kjggfm>!wqf>+mft#Gbwf*-dfwWjnf+*slqwvdv/Fp#+gl#Aqbpjo*<R=l<_<\\\\<Q<T<[<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n=`<R<]=l<\\\\<[<R<^<\\\\<Q<T=c=l<Y<_<T=m=n=l<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n<T<R<]=c<[<\\\\=n<Y<W=`<Q<\\\\?\\\"GL@WZSF#kwno#SVAOJ@#!mw.Wzsf!#`lmwfmw>!wf{w,?nfwb#kwws.frvju>!@lmwfqbmpjwjlmbo,,FM!#!kwws9?kwno#{nomp>!kwws9,,ttt.,,T0@,,GWG#[KWNO#2-3#WGWG,{kwno2.wqbmpjwjlmbo,,ttt-t0-lqd,WQ,{kwno2,sf#>#$wf{w,ibubp`qjsw$8?nfwb#mbnf>!gfp`qjswjlmsbqfmwMlgf-jmpfqwAfelqf?jmsvw#wzsf>!kjggfm!#mbip!#wzsf>!wf{w,ibubp`qj+gl`vnfmw*-qfbgz+evm`wjp`qjsw#wzsf>!wf{w,ibubpjnbdf!#`lmwfmw>!kwws9,,VB.@lnsbwjaof!#`lmwfmw>wno8#`kbqpfw>vwe.;!#,=\\tojmh#qfo>!pklqw`vw#j`lm?ojmh#qfo>!pwzofpkffw!#?,p`qjsw=\\t?p`qjsw#wzsf>>#gl`vnfmw-`qfbwfFofnfm?b#wbqdfw>!\\\\aobmh!#kqfe>#gl`vnfmw-dfwFofnfmwpAjmsvw#wzsf>!wf{w!#mbnf>b-wzsf#>#$wf{w,ibubp`qjmsvw#wzsf>!kjggfm!#mbnfkwno8#`kbqpfw>vwe.;!#,=gwg!=\\t?kwno#{nomp>!kwws.,,T0@,,GWG#KWNO#7-32#WfmwpAzWbdMbnf+$p`qjsw$*jmsvw#wzsf>!kjggfm!#mbn?p`qjsw#wzsf>!wf{w,ibubp!#pwzof>!gjpsobz9mlmf8!=gl`vnfmw-dfwFofnfmwAzJg+>gl`vnfmw-`qfbwfFofnfmw+$#wzsf>$wf{w,ibubp`qjsw$jmsvw#wzsf>!wf{w!#mbnf>!g-dfwFofnfmwpAzWbdMbnf+pmj`bo!#kqfe>!kwws9,,ttt-@,,GWG#KWNO#7-32#Wqbmpjw?pwzof#wzsf>!wf{w,`pp!=\\t\\t?pwzof#wzsf>!wf{w,`pp!=jlmbo-gwg!=\\t?kwno#{nomp>kwws.frvju>!@lmwfmw.Wzsfgjmd>!3!#`foopsb`jmd>!3!kwno8#`kbqpfw>vwe.;!#,=\\t#pwzof>!gjpsobz9mlmf8!=??oj=?b#kqfe>!kwws9,,ttt-#wzsf>$wf{w,ibubp`qjsw$=<X<Y=c=n<Y<W=`<Q<R=m=n<T=m<R<R=n<^<Y=n=m=n<^<T<T<S=l<R<T<[<^<R<X=m=n<^<\\\\<]<Y<[<R<S<\\\\=m<Q<R=m=n<T\\fHF\\fIm\\fHT\\fIa\\fHH\\fHS\\fHy\\fHR\\fHy\\fHR\\fHn\\fH{\\fIa\\fH\\\\\\fIk\\fHT\\fHe\\fHD\\fIa\\fHU\\fIg\\fHn\\fHD\\fIk\\fHY\\fHS\\fHK\\fHR\\fHD\\fHT\\fHA\\fHR\\fHG\\fHS\\fHy\\fIa\\fHT\\fHS\\fHn\\fH{\\fHT\\fIm\\fH\\\\\\fHy\\fIa\\fH[\\fHS\\fHH\\fHy\\fIe\\fHF\\fIl\\fH\\\\\\fHR\\fHk\\fHs\\fHY\\fHS\\fHp\\fIa\\fHr\\fHR\\fHF\\fHD\\fHy\\fHR\\fH\\\\\\fIa\\fH\\\\\\fHY\\fHR\\fHd\\fHT\\fHy\\fIa\\fH\\\\\\fHS\\fHC\\fHH\\fHR\";\n  // typo:on\n\n  /**\n   * Encoded interval lengths, where 7-th bit is constant.\n   *\n   * To avoid multibyte UTF-8 runes, DATAx literals contain only 7-bit characters.\n   * 7-th bit of original data is well compressed with RLE. As there are only 2 alternating values,\n   * only the lengths of the series are stored.\n   */\n  private static final String SKIP_FLIP = \"\\u06F7%\\u018C'T%\\u0085'W%\\u00D7%O%g%\\u00A6&\\u0193%\\u01E5&>&*&'&^&\\u0088\\u0178\\u0C3E&\\u01AD&\\u0192&)&^&%&'&\\u0082&P&1&\\u00B1&3&]&m&u&E&t&C&\\u00CF&V&V&/&>&6&\\u0F76\\u177Co&p&@&E&M&P&x&@&F&e&\\u00CC&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1\\u025E*\\u03EA\\u21F3&\\u1372&K&;&)&E&H&P&0&?&9&V&\\u0081&-&v&a&,&E&)&?&=&'&'&B&\\u0D2E&\\u0503&\\u0316*&*8&%&%&&&%,)&\\u009A&>&\\u0086&7&]&F&2&>&J&6&n&2&%&?&\\u008E&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%\\u053C\\u0084(,(<&,&\\u03DA&\\u18C7&-&,(%&(&%&(\\u013B0&X&D&\\u0081&j&'&J&(&.&B&3&Z&R&h&3&E&E&<\\u00C6-\\u0360\\u1EF3&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&C\\u072C\\u2A25&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&\\u1E78\\u00CC-&7&1&F&7&t&W&7&I&.&.&^&=\\u0F9C\\u19D3&8(>&/&/&\\u077B')'\\u1065')'%@/&0&%\\u043E\\u09C0*&*@&C\\u053D\\u05D4\\u0274\\u05EB4\\u0DD7\\u071A\\u04D16\\u0D84&/\\u0178\\u0303Z&*%\\u0246\\u03FF&\\u0134&1\\u00A8\\u04B4\\u0174\";\n\n  /**\n   * Encoded sizeBits array.\n   *\n   * Values: 0, 0, 0, 0, 10, 10, 11, 11, 10, 10, 10, 10, 10, 9, 9, 8, 7, 7, 8, 7, 7, 6, 6, 5, 5\n   */\n  private static final String SIZE_BITS_DATA = \"AAAAKKLLKKKKKJJIHHIHHGGFF\";\n\n  private static final int DICTIONARY_DATA_DEBUG = Utils.isDebugMode();\n\n  private static void unpackDictionaryData(ByteBuffer dictionary, String data0, String data1,\n      String skipFlip, int[] sizeBits, String sizeBitsData) {\n    // Initialize lower 7 bits of every byte in the dictionary.\n    final byte[] dict = Utils.toUsAsciiBytes(data0 + data1);\n    final int[] skipFlipRunes = Utils.toUtf8Runes(skipFlip);\n    if (DICTIONARY_DATA_DEBUG != 0) {\n      if (dict.length != dictionary.capacity()) {\n        throw new RuntimeException(\"Corrupted brotli dictionary\");\n      }\n    }\n\n    // Toggle high bit using run-length delta encoded \"skipFlip\".\n    int offset = 0;\n    final int n = skipFlipRunes.length >> 1;\n    for (int i = 0; i < n; ++i) {\n      final int skip = skipFlipRunes[2 * i] - 36;\n      final int flip = skipFlipRunes[2 * i + 1] - 36;\n      for (int j = 0; j < skip; ++j) {\n        dict[offset] = (byte) ((int) dict[offset] ^ 3);\n        offset++;\n      }\n      for (int j = 0; j < flip; ++j) {\n        dict[offset] = (byte) ((int) dict[offset] ^ 236);\n        offset++;\n      }\n    }\n\n    for (int i = 0; i < sizeBitsData.length(); ++i) {\n      sizeBits[i] = (int) sizeBitsData.charAt(i) - 65;\n    }\n\n    dictionary.put(dict);\n  }\n\n  static {\n    final ByteBuffer dictionaryData = ByteBuffer.allocateDirect(122784);\n    final int[] dictionarySizeBits = new int[25];\n    unpackDictionaryData(\n        dictionaryData, DATA0, DATA1, SKIP_FLIP, dictionarySizeBits, SIZE_BITS_DATA);\n    Utils.flipBuffer(dictionaryData);\n    Dictionary.setData(Utils.asReadOnlyBuffer(dictionaryData), dictionarySizeBits);\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/dec/DictionaryTest.java",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\nimport static org.junit.Assert.assertEquals;\n\nimport java.nio.ByteBuffer;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.JUnit4;\n\n/**\n * Tests for {@link Dictionary}.\n */\n@RunWith(JUnit4.class)\npublic class DictionaryTest {\n\n  private static long crc64(ByteBuffer data) {\n    long crc = -1;\n    for (int i = 0; i < data.capacity(); ++i) {\n      long c = (crc ^ (long) (data.get(i) & 0xFF)) & 0xFF;\n      for (int k = 0; k < 8; k++) {\n        c = (c >>> 1) ^ (-(c & 1L) & -3932672073523589310L);\n      }\n      crc = c ^ (crc >>> 8);\n    }\n    return ~crc;\n  }\n\n  @Test\n  public void testGetData() {\n    assertEquals(37084801881332636L, crc64(Dictionary.getData()));\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/dec/EagerStreamTest.java",
    "content": "/* Copyright 2018 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\nimport static org.junit.Assert.assertTrue;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.FilterInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.JUnit4;\n\n/**\n * Tests for {@link Decode}.\n */\n@RunWith(JUnit4.class)\npublic class EagerStreamTest {\n\n  private static final byte[] DATA = {\n    31, 118, -122, 17, -43, -92, 84, 0, -76, 42, -80, -101, 95, -74, -104, -120, -89, -127, 30, 58,\n    -4, 11, 91, -104, -99, -81, 44, 86, 61, 108, -74, -97, 68, 32, -120, -78, 97, -107, 88, -52,\n    -22, -55, -8, -56, -106, -117, 49, 113, -106, -82, -43, -12, -11, -91, -66, 55, 68, 118, -127,\n    -77, -104, -12, 103, -14, -94, -30, -112, 100, 79, -72, -42, 121, 62, -99, 76, -39, -89, 42, 58,\n    -110, 91, 65, 32, -102, -113, 49, 4, 73, 60, 122, -106, 107, 16, -123, 30, -97, 90, -102, -83,\n    -65, -90, 34, 26, -26, 52, 75, -118, 43, -47, -47, 52, 84, -10, -121, -68, -2, 20, 80, 101, 53,\n    101, -119, -17, -111, -75, -21, -66, -96, -80, -114, 4, -65, 124, -89, -3, -25, -25, -21, -35,\n    -15, -114, 55, 14, -76, -68, 71, 9, 123, 46, 78, 67, -18, -127, 70, -93, -128, -44, -87, 3, 36,\n    -107, -3, 62, 83, 75, -123, -125, -11, 50, 46, -68, 80, 54, 9, -116, -29, 82, -14, -87, -94, 92,\n    -88, -86, -18, -1, 22, 3, 46, -98, -128, -27, 121, -56, 88, -37, 85, -43, 61, -60, 12, -122,\n    107, -64, -27, -45, -110, 123, 60, 99, 108, 46, -29, -77, 76, 65, 100, 92, -104, 40, 63, 19, 36,\n    -89, 80, -39, 37, -95, -74, 97, 90, -109, 54, 105, -10, -38, 100, 95, 27, 36, 33, -60, 39, 100,\n    32, -18, 93, -46, -99, 103, 127, -91, -62, 82, 76, 56, -66, -110, -16, 83, -116, -76, -9, -47,\n    -5, -32, -65, 111, 0, 55, 47, -60, -95, -56, -100, 65, 125, 38, 77, 38, -32, -62, 55, 119, 10,\n    120, -69, 33, -111, -62, -87, 17, 102, -95, -106, 26, -50, -16, -109, 94, 83, -79, 90, 2, 42,\n    -47, 37, -124, 114, -68, 6, 104, -65, 38, -108, -114, -110, 73, -95, -83, -90, -86, -36, -48,\n    -63, -97, -120, -25, -53, 93, -77, -50, 59, -74, -9, 36, 85, 11, 76, 95, 74, -61, -9, 116, -14,\n    -38, 73, 78, 44, -92, 58, -27, -54, 38, 81, 50, -36, -46, -117, 126, 89, 53, -37, -58, -12, 61,\n    77, -56, -85, -21, -128, 43, -111, 14, 54, 57, 116, 52, -85, 70, 88, -72, -26, 54, 109, -70,\n    -84, -13, -1, -54, 91, 81, 101, -65, 49, -48, -16, 26, -115, -39, 100, -21, 105, -121, 38, 72,\n    -115, 104, -100, 36, 120, 15, -109, 115, 64, 118, -68, -14, -26, -57, -71, 9, -118, -113, 15,\n    94, 108, 114, 109, -14, -80, -31, -57, -6, 57, 111, -36, -92, -25, -23, -71, -61, 120, 93, -65,\n    104, -123, -53, 35, -77, -8, -23, -31, 99, -3, 73, 75, 98, -2, -94, 73, 91, -109, -38, -78,\n    -106, -121, -17, -21, 55, 45, -26, -7, -93, 38, 59, -90, -116, 3, -68, -2, -110, 19, -96, 28,\n    -23, -39, 102, 99, 8, -82, -41, 63, 88, -70, 115, -123, -11, 111, 92, 47, -12, -16, -70, -2,\n    -29, 101, 61, -45, -57, 54, 24, -125, 20, -37, -75, 89, -56, 52, 125, 22, -68, -63, 105, -91,\n    -20, 91, 56, -99, -56, 35, -77, -78, -24, -79, 57, 5, -55, 101, -127, 75, -35, -113, -51, -103,\n    79, 102, 16, -124, -79, -128, -45, -65, -84, -97, -91, -90, -105, 76, 90, -93, 90, -49, -41,\n    104, 44, 81, -37, -84, 103, -120, -51, 79, -43, -114, -101, 38, -78, -94, -1, 15, 109, -62, 34,\n    -65, -127, 98, 32, 46, -72, 70, 58, -61, -55, 90, 30, -103, 5, 109, -105, -119, 81, 92, -40,\n    -75, -23, -77, 36, 18, 62, -33, -51, -38, -19, -12, 89, -101, 117, 94, 71, 127, -43, 54, 115,\n    -67, 34, -83, -115, 127, 127, 42, 126, -121, -121, -40, 56, -113, 60, -27, 30, 44, -21, 98,\n    -123, -14, 91, -69, 15, -81, 119, -101, 25, -73, 40, 105, 26, -86, -31, 86, -75, 74, 94, -74,\n    19, -4, -20, 69, 24, 43, -5, -91, 6, -89, 52, 77, -65, -71, 82, -81, -52, 22, -61, -15, 51, 22,\n    1, 70, -43, -3, -39, -27, 123, -13, -127, -86, 65, 51, 45, 127, -101, -27, -3, -44, -34, 75, 69,\n    77, 71, -34, 7, -51, 93, -83, -84, -57, -38, -100, 59, -105, -1, 44, -47, 63, 96, -127, 32, -63,\n    16, 80, -64, -127, 6, 54, 12, 44, 28, 48, -128, 4, 10, -104, 64, 3, 11, -47, 59, -79, -125, 52,\n    -16, -78, -66, 19, -6, -33, -107, -10, -4, -42, 102, -31, -32, 99, 115, -22, -96, -45, -112, 28,\n    126, -44, -4, -47, -99, 127, -84, 37, -112, -34, 36, 1, -68, -14, -16, 55, 83, -99, 120, -69,\n    -30, 89, 48, 126, -80, -43, 15, 13, -18, 14, -4, -126, -120, -118, -11, 100, 16, 76, 17, 54,\n    -75, 114, 101, 37, 121, -23, -65, 39, 94, -48, -78, 67, -61, 75, 48, 23, -127, 83, -124, 95, -5,\n    67, 13, 87, 18, -2, 117, -36, -121, 115, -112, -107, -54, -36, 14, -4, -68, 35, 32, 79, -118,\n    81, 94, -56, -110, 37, -84, -121, 72, -7, -52, -40, -44, -1, 73, 123, 12, 42, -67, -87, 63, -2,\n    -100, 29, -41, 112, 98, -125, 88, 97, -56, 90, 7, -40, -111, -126, 74, 121, -95, -45, -69, 48,\n    -98, 18, -20, -124, 3, 46, -5, 26, 24, -79, 109, 4, 43, 60, 97, 96, -76, -21, 95, -52, -40, -45,\n    2, -103, -107, -9, 79, -79, -82, -73, -51, -74, -10, 81, -77, 111, -96, -41, -120, -38, 24, -87,\n    93, -41, 64, 72, 57, -81, -32, 60, -79, 36, -84, -89, -7, -25, 81, -98, 36, -22, -69, 86, 123,\n    120, -16, -113, -70, 47, -125, 2, 97, 78, -91, 102, 120, -91, 5, -71, 39, 116, -12, -79, -29,\n    -9, 87, -5, -37, 87, -73, 116, -15, -10, -106, -49, -3, -21, 5, 120, 47, 72, -40, 79, -3, 85,\n    -84, -87, 57, -83, -67, -64, 122, -39, 36, 70, -27, 71, -73, 42, -100, -99, 124, -90, 90, -29,\n    -54, -115, 7, 89, -51, 9, -43, 32, 79, -104, 127, -38, 7, 93, -80, -124, 27, 96, 54, -51, -7,\n    57, 57, 63, 21, 110, 70, 122, 76, 51, 124, 78, -5, 126, -100, -98, 116, 59, 125, -106, -113,\n    -111, -128, 92, 43, -19, -2, 105, -90, 96, -116, -116, -30, 115, -20, -106, 64, -108, -111, 94,\n    -9, -123, 52, -71, -88, -84, 87, -25, -54, -117, -2, -29, 29, -85, -22, -20, -94, -25, 98, 101,\n    114, 80, -55, -51, 97, 99, 117, -86, 2, 79, 48, 110, 44, -94, -127, -85, 61, -95, 30, -91, -125,\n    83, 113, -93, -4, -126, -98, -93, -68, -99, -70, -37, -73, -90, 4, 53, -2, 78, -35, 101, 42, -6,\n    -3, 106, -117, -127, 48, 31, 88, 117, 116, 106, -98, -23, -117, -7, -57, -128, -118, -117, -118,\n    115, 30, -61, 6, -38, -114, -103, 37, 53, -4, -100, -121, 98, -110, -113, 2, -20, 26, -88, -118,\n    19, -71, 39, -54, -11, -28, 47, 28, 89, 35, -13, -20, -48, 14, -6, -91, -85, -119, -7, 116, 112,\n    114, 41, 44, -1, -39, 60, -85, -54, 101, -119, 95, -77, -64, -121, 47, 75, -78, -30, -66, -38,\n    -15, 98, 14, 82, -60, 85, -90, -78, 112, -7, 64, 5, 28, 64, 41, -64, 57, 85, 21, 122, -52, 90,\n    70, -73, 17, 47, -125, 40, -45, -7, -91, 100, -21, -120, -51, 21, 65, 31, 110, -105, -79, -80,\n    105, -43, 73, -61, 45, -30, -4, 83, 95, 3, 109, 55, -92, 120, 74, -36, -111, 54, -26, 76, -69,\n    7, -20, 55, 4, 70, -124, -31, -32, 127, -63, -58, 73, 106, 109, -41, -45, 96, 30, 63, 14, 8, 16,\n    -88, 69, -115, -17, -14, -116, 115, -88, 119, -65, 16, -64, -112, -73, -10, -46, -7, 113, 5, 54,\n    -38, -47, -18, 106, 23, 12, -117, 120, -107, 121, -62, -35, -6, -56, 112, 81, 3, 5, 31, -11,\n    -92, -85, -29, 102, 43, 108, 88, -69, 55, -74, 110, 97, -128, 29, -63, -114, -19, 77, 123, 23,\n    76, 81, 57, 51, 117, -74, -1, 74, 84, 70, 86, -109, -127, 122, 10, 9, 23, 71, 110, -116, -30,\n    -85, -104, 2, 40, -62, 20, 46, 8, 95, 46, 13, 113, -83, 124, 33, 38, 105, -99, 72, -62, -80,\n    -16, -118, 92, -66, -14, -124, 112, 79, 103, 53, -127, 61, -31, -92, 92, -42, -37, -37, -24,\n    -116, 2, -81, 40, 46, -44, 23, -68, -113, 88, 92, 95, 11, 118, 98, 19, -80, -102, 96, 73, -20,\n    47, -105, -120, -74, -83, -77, -87, -59, -97, 112, 99, -52, 80, 116, -119, -44, 18, 62, 108, 73,\n    -34, 70, 28, 73, 81, -26, 87, -125, -55, 64, -53, -73, 114, -3, -45, -109, 19, -2, 68, 119, 14,\n    26, 72, 19, 13, -121, -98, 26, -52, 85, 34, 17, -95, -7, 20, -12, 106, -11, 104, 20, -106, -42,\n    -26, 107, -106, 112, 103, -53, -62, 13, -58, -23, 23, 65, -104, -55, -90, 107, 55, -77, -25,\n    -125, 63, -61, -21, 117, -102, -70, -93, -67, -45, -61, 18, -63, 7, -127, 90, 16, -25, 116, 80,\n    35, 105, 80, -93, 105, -44, 114, -126, -103, 88, -102, -76, -94, -66, 69, -35, 22, 36, 95, -55,\n    22, 43, 78, -111, 109, 72, 104, -49, -9, -48, 59, 102, -54, -43, -128, 111, 127, -9, 35, 23,\n    -79, 40, -122, -52, 36, -81, -4, -102, -2, -62, 53, -111, -117, 40, 122, -95, 55, 32, -127, -9,\n    -91, 79, -109, -81, -3, 98, -78, 56, -119, 69, -41, 76, -102, 18, 90, -15, 12, -60, 86, -106,\n    34, -118, -43, -13, 61, -106, -56, 48, 27, -15, -70, -41, 127, 61, -2, -80, -13, 86, 28, 91,\n    -10, -8, 98, -20, 54, 122, -116, -55, -70, -94, 54, -64, 71, 102, -106, -1, 99, -73, -71, -18,\n    -11, 56, 11, -27, -5, 11, -86, 126, 8, 46, -21, 63, -66, -43, 88, 46, -113, -5, 113, 26, -9,\n    -32, 18, -3, -6, -38, 81, 38, -110, 111, 97, 34, 65, 114, -71, -118, 9, -110, -109, -61, -113,\n    31, -82, -102, -127, 16, -7, -16, -11, -87, -76, -41, -52, 58, -116, 100, 102, -127, 6, 127, 64,\n    14, 110, 112, 43, 44, 87, 42, -118, -119, -39, 64, -7, 57, 16, 2, -69, -12, -54, -94, 36, -48,\n    123, -119, 82, 46, 26, -62, 30, 97, -17, 34, 80, 32, -15, 116, -96, -3, 33, 34, 51, 59, -63,\n    -100, -7, -79, -126, -21, -15, -18, -113, 30, -25, 107, -25, -125, 53, 82, -15, -80, 96, -24,\n    -47, 94, -25, -109, -94, 114, -62, 112, -104, 26, -107, -68, -14, -36, -9, -89, 27, -75, 62, 62,\n    -20, -125, -77, -57, -127, 80, 58, -118, 63, -27, -82, -126, 74, -23, -91, -28, -95, 8, -122,\n    -73, 28, -87, -74, 80, -15, -119, 14, 32, 124, 73, 15, 61, -32, -68, 81, 56, -119, 66, 105, 3,\n    -15, 20, -86, 124, -70, -113, 100, -72, -117, -97, 127, 103, 16, 105, 8, 39, -128, -64, -47, 66,\n    123, -110, 13, 123, -124, -24, 42, 102, -4, 47, 107, 125, 63, -52, -35, 113, -74, 13, 8, 17, 16,\n    -106, -21, -69, 47, -3, 103, -2, 19, -100, 111, -11, 1, 112, 90, -38, -31, -45, -55, 25, 92,\n    -122, 66, -18, -98, -82, -49, 119, -35, -128, 26, 60, -79, -23, 127, 82, -52, 115, 77, -109,\n    -111, 17, -99, 31, 33, 41, 35, 87, -47, -126, -18, -25, 81, -71, 9, -72, -92, 64, -92, 23, 116,\n    96, 40, 55, -87, 119, -105, 66, 49, 46, -10, 26, -25, -105, 127, -124, 86, -2, 39, 116, -108, 6,\n    21, 15, 1, 75, -5, 101, 13, 57, 70, 126, -50, -97, 123, -73, -77, 53, -11, -73, 44, -99, 91, 85,\n    21, -59, -1, 117, 64, -100, 47, 75, 93, 9, -4, 83, -55, 15, 99, 31, 43, -49, 15, -89, -115,\n    -114, -50, -35, -19, -65, 122, -39, 92, -21, -3, -66, 8, -70, 107, -55, -86, -36, -23, -21, 80,\n    -79, 48, 116, 57, -71, 33, -111, -68, -75, 37, 55, 39, 124, 96, -66, 10, 14, 118, 50, 85, -33,\n    54, -101, -7, 21, 88, -122, 50, -92, 123, 37, 109, -60, -127, 26, 110, -20, -31, -66, -56, -24,\n    47, -14, -60, -101, 69, -38, 78, 0, 44, -71, 108, 4, 25, -68, -106, 20, -40, -103, 108, -70,\n    -56, 78, 12, 82, 81, 46, -105, -123, -46, -20, -127, -67, -77, 76, -74, 40, 105, 2, 27, 112,\n    -107, -121, -53, 6, -88, -11, 26, 41, 64, -69, -44, 27, 47, 24, -31, -86, -4, 4, -46, 42, 50,\n    -55, 37, -11, -95, 108, 54, 37, 67, 37, -14, -40, 41, 124, 22, 108, 99, 16, 55, 88, 19, 49, -87,\n    27, 17, -68, -107, 15, -62, 84, 109, 72, -26, 71, 63, -17, -72, -63, -101, -8, 62, 24, -112,\n    126, -102, -64, 29, -19, -75, 74, 29, 90, -90, 83, -22, 106, -27, -114, 56, -111, -33, 11, 3,\n    -16, 94, 115, -97, 67, -78, 62, -93, -36, 60, -65, -54, 72, 70, 44, -77, 73, 29, -106, 38, 72,\n    -37, -110, 79, -98, -15, -58, 96, -85, -68, -15, 73, 57, -127, 14, -123, -40, 70, 63, -64, 115,\n    -63, 127, 94, 85, 52, 30, -62, 83, -30, -97, 82, 39, 2, 36, -50, 106, 116, 66, 104, -14, 73, 14,\n    -106, -127, 11, 41, -27, 56, -99, -74, 55, 123, 124, 9, 46, 12, -97, -37, -10, 122, 124, -27,\n    -64, 93, -70, 9, 119, 13, -9, -71, -118, 19, 50, -36, 114, 120, -24, -62, 40, 127, 9, -62, 84,\n    57, 66, 91, -114, 120, -49, 63, 99, -73, -66, -64, 84, -31, 67, -52, 12, 38, -62, 37, -122, -50,\n    -95, 24, 19, 54, -80, 57, -118, -84, 124, 90, 53, 72, 29, -123, 67, -65, 99, -58, -28, 20, -110,\n    -103, 92, -91, -108, 23, -118, 44, 74, 76, -29, 94, -121, -37, -32, 107, -62, -67, -55, -45,\n    -50, -44, 25, -77, -102, 90, -128, -31, -5, -64, 110, 122, 88, -18, -53, -85, 122, -11, 100,\n    -106, 97, 59, -103, -110, 5, -16, 59, -126, -74, 9, -119, 115, 49, -73, -42, 32, 100, 59, -98,\n    106, 55, -101, 87, 126, 59, -23, 106, -102, 100, -69, -46, 76, 53, -107, -119, -113, 104, 117,\n    -27, 75, -32, 8, -81, -10, 50, 108, -32, 51, -79, -53, -2, 66, -9, 113, 14, 99, -100, -34, -21,\n    13, 2, 45, -33, 0, -16, -64, -126, 69, -25, -34, 28, 105, -48, -38, 82, 12, 27, -71, 35, 13, 11,\n    21, 26, -19, -4, 44, -52, -126, -63, -32, -84, -22, -63, -29, 96, -97, -82, -12, -53, 98, 41,\n    -69, -38, 101, -31, 47, -9, 16, -10, 9, -36, -103, -91, -65, -36, -93, -45, 94, 110, 54, -94,\n    68, -39, -116, -40, 61, -112, -91, -79, 98, -36, 87, 35, 88, -61, 125, 112, -84, 48, -38, 105,\n    -92, 69, -68, 92, 0, 27, -72, -65, 97, 98, 66, 97, -74, 29, 46, -21, 102, 61, 120, -62, 38,\n    -125, -60, -43, 4, 5, -27, 113, -43, 105, -22, -110, 68, 13, -14, -23, 18, 95, -79, -108, 87,\n    19, -80, 16, 54, -121, 88, -64, -113, 73, 3, -20, 17, 0, 26, -88, -49, -2, 21, 120, -105, -85,\n    -113, 76, 106, 37, -13, -75, 29, -127, 10, -17, -53, -124, 24, 37, -31, 26, -1, 109, 88, -88,\n    -37, -51, -32, -125, 48, -40, 123, -108, 55, -120, -62, -91, 47, 62, -127, -25, 99, 68, 22, -40,\n    58, 119, -31, -93, -122, 39, -92, 25, -127, -42, 97, 69, -6, 110, -61, -21, -94, 82, 123, -93,\n    -51, -90, 50, -96, 127, -32, 125, -76, 117, 75, -52, 79, 110, -51, -15, -81, 49, 62, 118, 120,\n    -27, 22, 84, -22, 77, -105, 87, -7, -23, 47, -8, 108, 82, -12, 84, -52, -85, 68, -89, -24, -32,\n    6, -34, -83, 80, 44, 12, -51, 50, 74, -121, -106, 6, 85, 32, 42, 76, -59, -52, -99, 102, 108,\n    -127, -49, 0, 60, 62, 2, 13, -19, -92, -41, -69, 55, -70, 94, 23, 36, 89, 70, -115, -51, 26,\n    -95, 13, -69, 42, 62, 59, -24, -63, -50, -6, -86, -97, -115, -58, -107, 69, -12, -109, 73, 4,\n    63, 12, 32, 13, -123, -72, -41, -7, -81, 37, -91, -128, 109, -79, -80, 88, -22, 108, 126, 103,\n    27, -29, -81, 52, 55, -91, -13, -43, -75, -59, 80, -6, 6, 83, -103, -64, 8, 63, -34, -59, 21,\n    55, -115, 62, 77, 30, -50, -71, -66, 87, 99, -47, 0, 124, 76, 120, 79, -12, 54, -16, -98, -72,\n    -41, -66, -14, 114, -27, 108, 57, -49, 107, -73, 90, 107, -103, 25, -107, 112, -119, -54, 106,\n    -54, -8, -13, -81, -62, 92, -84, 113, 77, 74, -63, 104, 92, -94, -128, -43, -54, -71, 117, 27,\n    14, 98, 52, 119, -93, -77, -80, -46, 88, 35, 123, 86, 87, 122, 62, 108, 19, 27, 111, 2, 62, -67,\n    89, 14, -82, 41, 123, -117, 74, 109, -124, -115, 15, 123, -65, 42, -81, -105, 19, -30, 86, -72,\n    84, 63, -109, 34, -65, -127, 6, -104, 77, 103, -111, 90, 16, 31, -74, -33, 122, 58, 52, 10, 2,\n    65, 72, 68, 79, 52, 31, -19, 100, -86, 21, -49, 116, 101, 82, 111, -96, -76, 67, -40, -62, -15,\n    -79, 109, -58, 6, 11, -91, -29, 65, 21, 75, 74, -28, 21, 103, 46, 48, -42, 51, -110, 80, -95,\n    -102, -9, 8, -95, 102, 102, 16, 105, 103, 92, -106, -109, 77, 93, 32, -12, -25, 5, 17, -86, -34,\n    58, -50, 55, 63, -8, -72, 3, 26, 91, 72, 71, -77, 94, 91, 39, 45, 7, 0, 30, -45, -100, 35, 43,\n    -41, -72, 16, -103, -115, -4, 51, 39, -23, -89, -84, 105, 94, -91, -88, 82, 123, -26, 51, -16,\n    97, 47, -39, 35, 46, -89, 74, 7, -80, 116, -21, 82, -84, -13, -99, 31, -58, -93, 36, 99, 36, 44,\n    -65, 45, 94, -91, -41, 115, -10, 116, -67, 45, 19, -20, 113, -62, 111, 124, 108, 71, -121, -64,\n    122, -121, -105, 114, 115, -126, -93, -108, -113, -1, -80, -86, 116, -111, -29, 53, -76, 87, 19,\n    45, -30, 91, 91, -7, -49, 12, 112, -8, -26, 82, 58, -82, -76, 119, -50, 14, 85, 113, 20, 48,\n    -102, 37, 24, -120, -107, -52, 67, -44, -92, -79, -40, 28, 21, 55, 116, 88, 19, -49, -78, 86,\n    -89, 74, -4, 118, 75, 11, -103, -127, -47, -16, -77, -78, 8, 2, -88, 50, 23, -99, 102, -100,\n    -116, -99, -109, -112, -115, 78, 55, -39, -84, 100, -91, -101, 73, -9, 39, -23, 62, -125, -106,\n    -55, 119, -118, 114, -33, -99, 20, -53, 91, 115, 47, -93, 51, -99, -9, 92, -71, 120, 57, -44,\n    -87, -11, 108, 30, 43, -4, 118, 90, 126, -54, -99, -47, -2, -61, -3, -62, 45, 92, -70, -105, 30,\n    98, 112, -94, 56, 35, -22, 32, -93, -6, -36, -5, -77, -78, 120, 45, 104, 69, -49, -30, 39, 75,\n    38, -94, -12, 34, 34, -44, 48, -100, 74, 34, 69, 94, -12, 73, 27, -111, 90, 33, -38, 93, 40,\n    -16, 89, 26, -110, -116, -10, -65, 85, -57, 48, -86, 121, 118, -41, 63, 33, 109, -78, -26, 122,\n    111, -115, -52, 95, 26, -70, -14, -86, -80, -27, -6, 12, -44, 123, 28, 93, -74, 14, -124, 87,\n    -28, -12, 111, -117, -83, 48, -41, -3, 60, -51, -91, 118, 54, 110, 18, -2, -120, -66, 46, -35,\n    -91, 106, 94, -91, -11, 41, -92, -22, 96, -113, -109, 105, 56, -80, 17, -118, 124, -16, 30, 30,\n    117, 126, -99, -106, -69, -28, 85, 85, -41, 21, -95, -85, -112, -125, -45, 69, 10, -34, -120,\n    33, -58, 120, 51, -22, -7, 31, -34, 4, 55, -102, -70, 118, -83, 49, 111, -45, -9, 69, -95, -66,\n    116, -3, 104, -61, 17, 21, -20, 121, 117, 127, -70, 5, 89, -89, 51, 15, 64, 126, -73, 97, 90,\n    119, -22, -37, -54, 52, -33, 26, -54, 75, 79, 73, 100, 44, 3, 53, -25, 49, -123, -101, -80, -54,\n    -81, -32, 88, 49, -14, -4, 18, 42, 52, -65, -33, 68, 83, -89, -11, 57, 102, 71, 122, 74, -92,\n    -44, -94, -108, 14, 104, -107, -124, -63, 8, 32, 85, -18, -16, -91, -63, -38, 27, -108, 24, 19,\n    -33, 53, 70, -32, 41, 38, -77, -30, 89, 28, -15, -89, -86, 32, 51, 28, 67, 124, -96, -103, -34,\n    -113, 22, 15, -8, 104, -38, -56, 65, -96, -111, 104, -9, -38, 107, 55, 112, 47, 99, 50, -18, 90,\n    -69, 116, 80, 95, 52, -27, -98, 6, 12, -11, 124, -120, -96, -91, 118, -51, -120, 90, -92, -104,\n    -83, -73, 84, 61, 78, -39, -99, 33, 58, -45, -14, 127, -20, -44, 125, 21, -26, -21, -36, 51, 73,\n    71, 73, -17, 83, 11, 107, 91, 36, -65, -24, 56, 117, 114, -126, -34, 1, 120, 66, -50, 14, 91,\n    97, -35, 75, 87, 123, -53, 63, -38, -74, -62, -117, -45, -40, 125, -5, 53, 50, 0, -110, 7, 7,\n    45, 37, -71, -21, 70, -95, -60, 74, -55, -54, -96, 115, -62, -32, -3, -121, -18, 27, -107, 49,\n    -39, 58, -39, 91, 107, 65, -99, -64, -19, -10, -126, 38, -40, -112, 0, 16, 107, -59, 119, -70,\n    79, 49, -18, -76, -22, -38, -98, 35, -99, 61, 67, -100, 29, -104, -17, 22, 108, 105, 88, -114,\n    -65, 84, 99, -69, -84, -87, -81, -28, 68, -66, 3, 69, -69, 83, 16, 61, -102, 50, 67, 46, -98,\n    -77, -40, -78, 48, 68, -85, 123, -92, 37, 14, 75, 13, -23, -110, 23, 26, 90, -81, -1, -109, 85,\n    121, -68, -55, -7, 21, -81, -35, 41, 3, -72, -52, 36, 35, -83, -9, -81, -124, -104, 31, 54, 8,\n    -32, 80, 73, 89, -41, 116, 127, -110, 68, -82, 82, -79, 105, 113, -110, -70, 121, -24, -54, 37,\n    -12, -70, -77, 15, 14, 105, -19, 16, -6, 73, 102, 121, -116, -62, 54, 65, 119, 43, 60, -79, -66,\n    -17, 1, 97, -1, -11, -5, 104, 10, 59, -108, 21, -8, 64, -71, -86, 14, -98, -87, -49, 30, -45,\n    109, 43, -67, 10, -122, 25, 98, -102, 127, -27, -52, -61, -66, -47, 114, -94, -126, 4, 0, -65,\n    -11, -51, -67, 84, -43, 44, 88, 53, -6, 124, 11, -123, 34, 12, 102, -13, -106, 47, 62, -71, 43,\n    -65, 28, 37, 32, 80, 23, 6, 75, -103, 73, 112, 33, 84, -89, 12, -81, 42, 65, 58, 14, -102, 90,\n    29, -116, 104, 107, -99, -1, -43, 122, 118, 88, -2, 117, 84, 1, -123, -2, 2, -32, -18, -122,\n    -36, -58, 16, 76, 115, 27, -121, -2, -79, -44, -39, 33, -29, 33, -34, 55, 71, 61, 117, -22,\n    -126, 51, 29, 55, -34, -48, 17, -57, 74, 71, -33, -50, 60, 41, -119, -93, -45, -127, -30, 104,\n    35, 60, -117, -113, 81, -59, -39, -84, -39, -46, -106, 57, 77, 62, -11, -44, -87, 71, 35, -117,\n    -87, -77, -98, 68, -29, -121, -16, -16, 39, 48, -74, 23, 82, -62, 32, 62, 27, 125, 84, 39, -91,\n    -91, -93, 76, -24, 98, 123, -58, -114, 17, 28, 93, -17, 74, 92, -17, 9, -86, -116, -72, 54, -74,\n    71, 9, -97, -33, -20, -126, -50, 117, 102, 54, 123, 124, -70, 30, -102, 27, 23, 105, -40, -35,\n    -89, -33, 89, 3, 44, 18, -15, 10, 116, -111, 1, -81, -31, -125, -102, 103, -93, -15, 72, 84, 19,\n    -30, -17, -115, 99, 43, 5, -92, 52, 59, -55, -105, -128, 19, 8, -78, 43, 7, -55, -126, -106, 11,\n    69, 118, 24, -128, -54, -86, 22, -121, -43, 69, -15, 96, 52, 52, 90, -118, -10, -58, 121, 63,\n    -48, -13, 22, -101, 17, 42, -28, -54, -63, 121, -96, 111, 113, 103, 126, 37, -52, -40, -106,\n    -104, 123, -48, -92, 83, 100, -70, -52, -59, -93, -116, -90, -93, 82, -117, 103, 52, -71, -42,\n    57, 25, 57, -74, 71, 7, 32, 96, -60, 11, 121, 58, 71, 40, -92, 35, 88, -12, -109, -56, -122,\n    -30, -118, 103, 65, -5, -90, -97, 103, -117, 66, -20, -42, -46, 67, -29, -23, 72, -97, 26, -54,\n    -103, -76, -47, -71, 23, -83, -20, 95, 111, 101, -83, 106, -71, -70, -63, 55, -85, -41, 117, -9,\n    37, 96, -71, -118, -44, -43, 2, 107, 113, -39, -107, 41, -13, 0, -87, 77, 83, 99, 68, -84, -6,\n    -1, 67, 124, -57, 115, 29, 24, 26, -42, 104, 58, -87, -38, 12, -98, 11, 109, 62, 59, -66, -48,\n    -20, 70, -111, 11, 120, 21, -58, -29, -76, 44, -7, 26, -119, -59, -87, 44, 122, 8, 114, -58,\n    -109, -119, -63, -58, -51, 33, 35, -109, 81, 110, -90, 121, -21, 64, -60, 68, 18, 75, -82, -81,\n    -103, -76, -116, 23, 53, 58, -41, -23, 49, -102, 81, 101, 39, -59, -91, -98, 111, 2, 65, 110,\n    121, 5, 13, 97, -119, 109, 40, 82, 47, -51, 47, -57, 35, -109, 53, -42, 10, 3, -15, 122, -25,\n    -67, -62, -121, -120, -31, 18, -20, 87, -88, 75, 95, -121, -93, 33, 61, -88, -96, 88, -69, -54,\n    -121, -99, 49, 122, -53, -49, -125, 53, -79, -46, -128, 109, 125, -93, -83, 44, -101, 69, 68,\n    -91, -17, 55, -13, -75, -80, 21, 32, -13, 40, 86, -65, 85, 80, -82, -38, -52, 110, -119, 100, 8,\n    77, -23, 67, -41, 73, 27, 38, 9, -11, -32, -30, 75, -15, 67, -41, 46, 27, -89, 9, 117, -38, -14,\n    -81, -4, 71, 113, -79, 81, -36, 63, 15, -70, 104, 34, -56, -39, 93, -34, -127, 90, -36, 73, 47,\n    -76, 113, 55, 123, -92, 48, 116, 108, -123, 31, -67, -39, 3, -9, 6, 13, -17, -50, -125, 1, 105,\n    121, 100, 79, 82, -85, 123, -33, -73, 54, -61, -113, 121, -110, 69, 119, 94, -112, -120, -34,\n    -35, -104, -116, 44, 85, 109, -104, 127, 120, 87, 75, -48, -115, 74, 85, -47, -53, 16, -5, 92,\n    67, -32, 12, 79, 109, 105, 5, -92, 51, 46, 96, -96, 63, 106, 82, -54, -95, 20, -60, -23, 48, -5,\n    -128, 22, 23, -93, 93, -64, 35, 21, -121, -79, 59, -1, -50, 55, -7, -10, -85, 3, -7, 121, 98, 5,\n    -19, 76, -78, -128, -47, -42, 61, -59, -46, -24, -16, -51, -48, 122, -26, 74, -91, 54, 53, 46,\n    74, 25, -30, -74, 52, -22, 118, -103, -53, -113, 44, -19, 70, -86, 106, 72, -68, -86, 110, 34,\n    -35, 57, -43, 32, -4, 14, 102, 25, -76, -84, -86, -83, -2, -107, -4, 49, -97, -83, -95, 6, 100,\n    -73, 6, 34, 49, 59, 50, 30, -8, 6, -55, 24, -6, 67, -121, 115, 40, -50, -75, -46, -26, 111, -20,\n    -75, -83, -16, -48, 65, -64, 119, 62, -59, 3, -12, 109, 0, -118, -94, 17, -51, 124, 63, 42, -3,\n    44, 53, -81, -35, -33, -83, 115, -114, -4, -104, 44, 7, -81, -97, -102, 104, 29, -97, 70, 91, 3,\n    88, 67, -127, 78, -92, -16, -34, -18, -81, -125, -38, 117, -78, -36, 9, 76, -85, 121, 2, 10,\n    114, 65, -5, -29, -34, 101, 20, -108, 46, -90, -98, 85, -62, -51, 108, -72, -51, 44, 22, 112,\n    121, 58, -58, 109, -96, 58, 103, 27, -88, -81, 99, -7, -33, -113, 64, -122, 115, 19, -93, 37,\n    -19, 93, -98, 78, 115, 91, -88, -82, -36, 61, 90, 77, 27, 26, -116, 80, 90, 85, 6, -87, 59, 110,\n    63, 20, -81, -127, -53, 18, -73, 39, 75, 79, -106, 29, -50, -13, 43, -99, -92, 109, 80, -83, 69,\n    -102, 38, 90, -41, 48, -47, -93, 18, 116, 32, 90, -73, -96, 90, 49, 19, 73, -35, 60, 53, -72,\n    -52, 84, 52, 27, -67, -114, 82, 79, -89, -80, -111, 124, -51, 80, 110, -76, 125, 18, -73, 44,\n    -100, 118, -16, -64, -35, 22, -86, -116, -19, -101, -35, 42, 85, -83, 69, -65, 37, -104, -88,\n    -108, -25, -9, 15, 91, -100, -86, 8, -75, -37, 103, 3, -69, -9, 114, -25, 25, -87, 118, -75,\n    -115, -8, 74, 53, 73, 46, -22, -108, 30, 71, -96, 40, -76, 121, 71, -63, 95, 96, 113, -54, 87,\n    1, -79, 2, -40, 11, 22, -118, -117, 94, -44, -112, -27, -86, 96, -4, -58, 121, -71, 54, -58,\n    -71, -125, -65, 126, -116, -107, 125, -28, -74, 97, 15, -76, 59, -26, 58, -38, -39, 122, 55, 85,\n    -109, -114, 75, 25, -74, 57, -78, -10, -76, -115, -12, 29, 84, 86, 97, 5, 116, -114, 62, -98,\n    -36, 105, -119, -19, 12, 11, 49, 76, 21, 56, 1, 115, 115, 42, -67, 60, -40, 19, 38, 50, 33, 112,\n    98, 123, -76, -74, 50, 66, 18, -61, -114, 36, -95, 92, 124, 20, -56, 29, -41, 28, -4, -106, 115,\n    -83, 98, -47, 96, 87, -72, 96, -83, -93, 1, 112, -43, 59, -80, -24, 46, -45, 87, 92, -108, -78,\n    101, -112, 111, -119, -67, 26, 97, 1, 36, -128, 120, 8, -20, 84, 107, -9, -104, 25, 0, -36, 58,\n    111, 81, -83, 65, 42, 51, 61, -71, 118, 111, 29, -93, 39, -56, -72, -18, -53, 0, 34, -77, -59,\n    112, -79, 51, 86, 82, -24, 64, -120, -1, -102, -3, 42, -93, 16, 38, 100, 39, -124, 92, -89, 31,\n    94, -32, 40, 19, -8, 48, -83, -66, -68, 110, -72, 36, -38, -91, -63, 33, 35, -96, -121, -119,\n    -59, 56, 89, -117, -123, -79, -68, 42, -4, -116, -108, -104, -84, -111, -26, 94, -38, 61, 94,\n    -72, -85, -18, -30, 118, -14, -94, -74, -24, -21, -90, -83, -116, -38, -8, 9, -17, 72, -62, -78,\n    -75, 47, -117, 109, 127, -87, -36, 53, 90, 16, -72, -50, 40, 87, 97, -51, -96, -55, -120, -32,\n    -58, -21, 102, 117, -121, -98, 74, -67, 104, -122, 108, -3, -96, 64, -114, -3, 30, 48, -14, 44,\n    -41, 91, 54, 58, 80, -13, -88, 121, 32, 122, 25, 24, 9, 72, 17, -1, -93, -66, 96, -84, 4, 37,\n    69, 91, 64, 32, 46, 89, 7, -32, -120, 10, -38, -3, -59, -75, 14, 116, 115, 121, 99, 122, -95,\n    107, 1, 65, 70, -45, 35, -52, -87, -56, 43, 121, 12, -93, -8, 83, -118, 15, -33, -67, 45, 74,\n    -66, -31, -28, 5, 104, -13, 113, 19, -89, 105, 66, -82, 74, 54, -104, 69, 103, 86, 118, -44,\n    -75, -47, 81, -75, 8, -32, -95, 121, 48, -121, -106, -88, -15, -52, -99, -78, 58, 113, 16, 71,\n    -48, 76, 80, 81, 59, 43, -106, 27, -49, 2, -11, -71, -30, -80, -44, 62, -113, -20, 12, -60, -87,\n    22, -30, 64, -120, 127, 121, 47, 127, 58, -98, -4, 79, -72, -117, 115, 52, 95, 40, -59, -125,\n    -33, 125, -96, -93, -92, 17, -99, -85, 10, -119, 91, -115, -63, -32, -11, -102, -105, -93, 90,\n    37, 94, -104, -47, -63, -94, 15, -34, 20, 73, -59, 85, -31, 6, 106, -67, 14, -125, 28, -63, 40,\n    86, -68, 104, -22, 124, -27, -84, -13, 43, -45, -30, -95, 95, 16, 79, 23, -66, -78, -74, 43, 86,\n    70, -95, 90, -65, -1, -58, 54, 12, 47, -47, 28, 91, -54, -19, -75, -43, 12, -108, 12, 71, 38,\n    118, -8, 1, 42, -113, -6, 1, -93, 118, 67, -79, 25, -80, 118, 34, -29, 0, -23, 86, 53, -118, 89,\n    112, 0, -61, -88, 76, -24, 59, -75, 23, -1, 64, -80, -52, -40, 34, -50, -19, -127, 57, 79, 43,\n    92, -113, -96, 73, 0, 33, 122, 42, 104, -62, -66, -108, -104, 45, -120, 69, -3, -20, -113, -40,\n    -70, -96, 72, -21, -95, 1, -16, -124, -87, 125, 56, -108, 7, -112, -104, 105, 80, -34, -93, 24,\n    -6, 35, -38, 42, -4, 23, -112, 40, 45, 106, -72, 29, 44, -36, -61, -8, -93, -34, 3, -41, -26,\n    121, 6, 100, -14, -112, -117, -15, -120, -92, 44, -43, 94, -13, 121, -59, -82, -68, 7, -19,\n    -110, -121, -58, -118, -121, 92, -8, 33, -120, -28, -95, -31, -120, -62, 49, 51, 3, 68, 4, -56,\n    51, -13, -90, 47, -16, -24, 63, 125, -11, -94, 99, 69, -84, -54, 127, 81, -120, 42, -47, -128,\n    -13, 38, 115, 59, -112, -30, -9, -116, 121, 63, 111, 32, -116, -2, 0, -33, 79, -67, 90, -65,\n    -108, -107, -5, -107, 11, -102, 91, 106, -42, 74, 45, -80, -65, 54, 36, 121, -125, -118, -34,\n    -51, 36, -85, -78, 86, 121, -103, -39, 35, -76, 17, 59, 68, -40, -43, -27, 63, -76, 126, -94,\n    18, 87, 20, 92, 38, -6, -54, 9, 45, 93, -57, 53, -11, -44, -38, -24, -126, -40, -24, -35, -121,\n    -55, -87, -63, 70, -88, 13, -78, -89, 2, 50, 59, 4, -14, 81, 25, 34, -20, 87, 116, -76, -31,\n    -93, 15, 112, 61, -43, -11, -86, -25, 10, 41, 1, 60, 105, -42, -90, -44, 38, 98, 126, -128, 28,\n    99, 20, -97, 105, -101, 27, -106, 13, -108, -18, 23, -79, 121, 57, 93, -16, -37, -82, -1, -128,\n    -67, 99, 117, 79, 85, 83, 12, 53, -101, -52, -75, 72, -128, -62, 45, -54, 11, 0, -58, -88, 11,\n    121, 33, 86, -87, 31, -54, 109, -37, 10, 119, -9, 55, -7, 77, -52, 93, 64, -62, 115, -88, -4,\n    67, -1, -37, 31, 107, 90, -109, -121, 71, 105, -123, 61, 75, 89, 108, -91, -6, 115, 45, 109, 10,\n    -35, -84, 41, 127, 104, -84, -70, -6, -118, 6, 110, 99, -7, -112, 15, -79, -20, 51, -41, 78, 25,\n    -97, -2, -121, -117, 7, -87, -76, 60, -7, -7, 0, 51, 91, 34, 85, 21, -1, 108, 41, 8, 126, -25,\n    -30, 68, 109, -52, -51, 1, -111, 11, -22, -70, -33, 95, 40, 6, 63, 52, -66, -20, -6, -104, 81,\n    57, 22, 82, 119, 126, 76, -10, -108, -63, -123, 19, 23, -106, -1, 117, 26, 112, -85, -78, 81,\n    -116, 53, 86, -126, -80, 122, 36, 67, 18, 19, -114, 73, 125, -3, -69, 99, 10, -30, 19, 112,\n    -103, 0, -61, 47, -106, -45, -105, -107, -56, 23, 14, 51, -70, 30, -32, 30, 7, 22, -31, -41, 19,\n    -47, -64, -52, 119, -66, 54, -109, -87, 3, 95, -124, 94, -48, 36, -40, 13, 19, 91, -14, -115,\n    103, 66, 20, 44, 47, 8, -40, 4, -114, -110, -47, -28, -108, 89, 0, -7, -71, -91, -43, 98, 8,\n    -85, -98, -113, 103, -71, 69, 14, -95, -36, 92, -17, -66, -95, 123, -15, 52, 88, -60, -23, 123,\n    -61, -4, -33, -45, 77, 57, -121, 119, 116, -40, -31, -15, 96, 54, -49, -44, 36, -37, 111, -45,\n    -17, 12, 14, 21, 105, 48, 51, 42, -89, 55, 61, -5, -2, -36, -88, 36, -35, -29, -7, -68, -28,\n    -76, 5, -38, -66, -72, 24, -120, 8, -86, -28, 0, 71, -89, 20, -40, -100, 61, -57, 52, 23, 66,\n    -2, -24, -7, 86, -100, 111, -114, -47, -25, -40, -61, -67, -104, 33, 49, 16, -115, 9, -64, 27,\n    122, 34, -33, -89, -113, -50, 42, 111, -14, 110, 43, 32, -112, 101, -59, 28, 76, -2, -117, 47,\n    5, -73, -75, 21, -91, 99, 81, 93, -17, -119, 68, -21, -84, -51, -64, -98, 58, -33, 77, 4, 18,\n    116, 62, 111, -105, -13, 91, -92, 81, -34, 40, 17, -128, 85, -19, 20, 8, 92, 83, 10, 3, 40, 89,\n    60, 109, -23, 59, -66, -22, 43, 124, 25, -105, 77, 14, 75, -111, 13, 45, -90, -108, -79, 78,\n    -45, -55, -44, -86, -20, -41, -11, 65, 76, -79, 91, -23, 77, -84, 114, -109, 2, -71, 68, 8, -31,\n    99, 97, -104, -94, 69, 64, -16, -48, -78, 99, -58, -17, 95, 96, -64, 47, 96, -69, 60, 28, 114,\n    64, -128, -128, 114, 28, -124, 72, -41, -48, 82, -6, 63, -27, -126, -86, -121, 0, 4, 4, 35,\n    -111, 66, 64, -61, 117, -92, 48, 88, -128, 116, 7, -24, -111, -55, 96, -59, -96, 49, -70, -41,\n    -47, 85, 86, -37, -32, 53, -49, 62, 68, 80, -37, 95, 29, -114, 11, -65, 90, -99, -97, 101, 96,\n    -88, 5, 34, 3, 23, -22, 42, 4, -4, 17, -121, 106, -60, 33, -38, -32, -8, 41, -87, -4, -35, -102,\n    7, 18, 35, -7, 85, -18, 60, 15, 34, 82, 46, 68, 63, 80, -38, 4, 51, -74, -34, 83, -33, -8, 44,\n    87, -18, -8, 46, -53, -109, -121, -114, 10, 63, -36, -1, -123, 69, 107, -58, 33, -11, 63, -117,\n    60, 22, 73, -36, 22, -76, -92, -74, -37, -35, 87, 40, -97, -6, 95, -25, -2, -99, -101, 102, -48,\n    45, -55, 85, 94, -48, 57, -100, 34, 16, -63, -16, 106, -75, -7, -109, 71, -74, 20, -16, 37, 90,\n    -61, 69, 19, -111, 95, -104, 116, 75, -68, 85, -80, 66, 127, 127, 67, -98, 121, 53, 23, -3, 56,\n    -89, 99, 57, 9, 122, 76, 119, 1, -117, 47, -105, -42, -7, 51, -8, -81, 48, -60, -69, -29, 24,\n    19, -81, 43, 31, -36, 62, 96, 20, -58, 39, -122, -115, 7, -114, 118, 27, 27, 78, -101, 75, -93,\n    -104, -8, 119, 121, -97, -84, 58, 33, 18, -35, -29, 20, 20, 7, 112, 60, 31, -12, 7, -128, -55,\n    -68, -7, -12, -115, 97, 115, 44, -46, -68, 108, 36, 121, -1, 84, -4, -26, -126, 85, -32, 36, 26,\n    -19, 71, -121, -92, -51, -116, 81, -71, -83, -50, 21, -119, -60, -78, -84, 102, 19, -26, 118,\n    -53, -13, 16, 36, -64, -83, -66, 32, -99, 54, 83, 104, 61, -19, 107, 95, -66, -42, -6, 25, 86,\n    -13, -53, -49, -9, 74, -13, 58, 125, -96, -32, -22, -21, -12, -38, -114, -88, -100, 35, -87,\n    -108, -2, -103, 87, -119, -109, 50, -28, -101, -4, -43, 105, 119, -118, 103, -104, 41, 47, 71,\n    53, 11, -53, 59, -13, -11, 83, -33, 28, 11, 78, -59, 73, -33, -60, 119, -73, -127, 98, 39, 77,\n    21, -8, -103, 103, 44, -87, -52, -74, 56, -63, -70, -121, 40, 103, 7, -100, 113, 53, -46, 44,\n    16, 31, 102, -31, 104, -38, -120, 118, -122, -55, 25, 1, 92, 22, -14, 24, 108, 92, -90, -93,\n    -16, -99, -13, -127, 75, 101, -42, -86, -29, -51, -49, -105, -118, 91, -56, -51, -73, 117, 53,\n    -39, -73, 121, 83, -49, -10, -86, 11, -97, 40, -33, 6, -40, -9, -32, 92, -101, -83, 116, -5,\n    -57, -93, -121, 2, 38, -65, -6, 45, 100, 92, 92, 74, 115, 45, -33, 92, -11, 70, 33, 76, 85, 94,\n    1, -111, -103, 6, -4, -31, 44, -53, -77, -45, 100, -83, 92, -11, 10, -7, 126, 23, 36, 61, -18,\n    -28, 67, 126, 53, -45, -77, 95, 43, -73, 30, -37, 122, -53, -79, -77, -42, 71, -124, 43, -89,\n    60, -80, -89, -68, 96, 29, 103, -50, -93, 105, 7\n  };\n\n  static class ProxyStream extends FilterInputStream {\n    int readBytes;\n\n    ProxyStream(InputStream is) {\n      super(is);\n    }\n\n    @Override\n    public int read(byte[] b, int off, int len) throws IOException {\n      int result = super.read(b, off, len);\n      if (result > 0) {\n        readBytes += result;\n      }\n      return result;\n    }\n  }\n\n  @Test\n  public void testEagerStream() throws IOException {\n    ProxyStream ps = new ProxyStream(new ByteArrayInputStream(DATA));\n    BrotliInputStream reader = new BrotliInputStream(ps, 1);\n    byte[] buffer = new byte[1];\n    reader.read(buffer);\n    reader.close();\n    int normalReadBytes = ps.readBytes;\n\n    ps = new ProxyStream(new ByteArrayInputStream(DATA));\n    reader = new BrotliInputStream(ps, 1);\n    reader.enableEagerOutput();\n    reader.read(buffer);\n    reader.close();\n    int eagerReadBytes = ps.readBytes;\n\n    // Did not continue decoding - suspended as soon as enough data was decoded.\n    assertTrue(eagerReadBytes < normalReadBytes);\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/dec/Huffman.java",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\n/**\n * Utilities for building Huffman decoding tables.\n */\nfinal class Huffman {\n\n  private static final int MAX_LENGTH = 15;\n\n  /**\n   * Returns reverse(reverse(key, len) + 1, len).\n   *\n   * <p> reverse(key, len) is the bit-wise reversal of the len least significant bits of key.\n   */\n  private static int getNextKey(int key, int len) {\n    int step = 1 << (len - 1);\n    while ((key & step) != 0) {\n      step = step >> 1;\n    }\n    return (key & (step - 1)) + step;\n  }\n\n  /**\n   * Stores {@code item} in {@code table[0], table[step], table[2 * step] .., table[end]}.\n   *\n   * <p> Assumes that end is an integer multiple of step.\n   */\n  private static void replicateValue(int[] table, int offset, int step, int end, int item) {\n    int pos = end;\n    while (pos > 0) {\n      pos -= step;\n      table[offset + pos] = item;\n    }\n  }\n\n  /**\n   * @param count histogram of bit lengths for the remaining symbols,\n   * @param len code length of the next processed symbol.\n   * @return table width of the next 2nd level table.\n   */\n  private static int nextTableBitSize(int[] count, int len, int rootBits) {\n    int bits = len;\n    int left = 1 << (bits - rootBits);\n    while (bits < MAX_LENGTH) {\n      left -= count[bits];\n      if (left <= 0) {\n        break;\n      }\n      bits++;\n      left = left << 1;\n    }\n    return bits - rootBits;\n  }\n\n  /**\n   * Builds Huffman lookup table assuming code lengths are in symbol order.\n   *\n   * @return number of slots used by resulting Huffman table\n   */\n  static int buildHuffmanTable(int[] tableGroup, int tableIdx, int rootBits, int[] codeLengths,\n      int codeLengthsSize) {\n    final int tableOffset = tableGroup[tableIdx];\n    final int[] sorted = new int[codeLengthsSize]; // Symbols sorted by code length.\n    // TODO(eustas): fill with zeroes?\n    final int[] count = new int[MAX_LENGTH + 1]; // Number of codes of each length.\n    final int[] offset = new int[MAX_LENGTH + 1]; // Offsets in sorted table for each length.\n\n    // Build histogram of code lengths.\n    for (int sym = 0; sym < codeLengthsSize; ++sym) {\n      count[codeLengths[sym]]++;\n    }\n\n    // Generate offsets into sorted symbol table by code length.\n    offset[1] = 0;\n    for (int len = 1; len < MAX_LENGTH; ++len) {\n      offset[len + 1] = offset[len] + count[len];\n    }\n\n    // Sort symbols by length, by symbol order within each length.\n    for (int sym = 0; sym < codeLengthsSize; ++sym) {\n      if (codeLengths[sym] != 0) {\n        sorted[offset[codeLengths[sym]]++] = sym;\n      }\n    }\n\n    int tableBits = rootBits;\n    int tableSize = 1 << tableBits;\n    int totalSize = tableSize;\n\n    // Special case code with only one value.\n    if (offset[MAX_LENGTH] == 1) {\n      for (int k = 0; k < totalSize; ++k) {\n        tableGroup[tableOffset + k] = sorted[0];\n      }\n      return totalSize;\n    }\n\n    // Fill in root table.\n    int key = 0;  // Reversed prefix code.\n    int symbol = 0;\n    int step = 1;\n    for (int len = 1; len <= rootBits; ++len) {\n      step = step << 1;\n      while (count[len] > 0) {\n        replicateValue(tableGroup, tableOffset + key, step, tableSize,\n            len << 16 | sorted[symbol++]);\n        key = getNextKey(key, len);\n        count[len]--;\n      }\n    }\n\n    // Fill in 2nd level tables and add pointers to root table.\n    final int mask = totalSize - 1;\n    int low = -1;\n    int currentOffset = tableOffset;\n    step = 1;\n    for (int len = rootBits + 1; len <= MAX_LENGTH; ++len) {\n      step = step << 1;\n      while (count[len] > 0) {\n        if ((key & mask) != low) {\n          currentOffset += tableSize;\n          tableBits = nextTableBitSize(count, len, rootBits);\n          tableSize = 1 << tableBits;\n          totalSize += tableSize;\n          low = key & mask;\n          tableGroup[tableOffset + low] =\n              (tableBits + rootBits) << 16 | (currentOffset - tableOffset - low);\n        }\n        replicateValue(tableGroup, currentOffset + (key >> rootBits), step, tableSize,\n            (len - rootBits) << 16 | sorted[symbol++]);\n        key = getNextKey(key, len);\n        count[len]--;\n      }\n    }\n    return totalSize;\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/dec/SetDictionaryTest.java",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\nimport static org.junit.Assert.assertEquals;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.FileInputStream;\nimport java.io.IOException;\nimport java.nio.ByteBuffer;\nimport java.nio.channels.FileChannel;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.JUnit4;\n\n/**\n * Tests for {@link Dictionary}.\n */\n@RunWith(JUnit4.class)\npublic class SetDictionaryTest {\n\n  /** See {@link SynthTest} */\n  private static final byte[] BASE_DICT_WORD = {\n      (byte) 0x1b, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0x41, (byte) 0x02\n    };\n\n  /** See {@link SynthTest} */\n  private static final byte[] ONE_COMMAND = {\n      (byte) 0x1b, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0x11, (byte) 0x86, (byte) 0x02\n    };\n\n  @Test\n  public void testSetDictionary() throws IOException {\n    byte[] buffer = new byte[16];\n    BrotliInputStream decoder;\n\n    // No dictionary set; still decoding should succeed, if no dictionary entries are used.\n    decoder = new BrotliInputStream(new ByteArrayInputStream(ONE_COMMAND));\n    assertEquals(3, decoder.read(buffer, 0, buffer.length));\n    assertEquals(\"aaa\", new String(buffer, 0, 3, \"US-ASCII\"));\n    decoder.close();\n\n    // Decoding of dictionary item must fail.\n    decoder = new BrotliInputStream(new ByteArrayInputStream(BASE_DICT_WORD));\n    boolean decodingFailed = false;\n    try {\n      decoder.read(buffer, 0, buffer.length);\n    } catch (IOException ex) {\n      decodingFailed = true;\n    }\n    assertEquals(true, decodingFailed);\n    decoder.close();\n\n    // Load dictionary data.\n    FileChannel dictionaryChannel =\n        new FileInputStream(System.getProperty(\"RFC_DICTIONARY\")).getChannel();\n    ByteBuffer dictionary = dictionaryChannel.map(FileChannel.MapMode.READ_ONLY, 0, 122784).load();\n    int[] sizeBits = {\n      0, 0, 0, 0, 10, 10, 11, 11, 10, 10, 10, 10, 10, 9, 9, 8, 7, 7, 8, 7, 7, 6, 6, 5, 5\n    };\n    Dictionary.setData(dictionary, sizeBits);\n\n    // Retry decoding of dictionary item.\n    decoder = new BrotliInputStream(new ByteArrayInputStream(BASE_DICT_WORD));\n    assertEquals(4, decoder.read(buffer, 0, buffer.length));\n    assertEquals(\"time\", new String(buffer, 0, 4, \"US-ASCII\"));\n    decoder.close();\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/dec/State.java",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\nimport java.io.InputStream;\n\nfinal class State {\n  byte[] ringBuffer;\n  byte[] contextModes;\n  byte[] contextMap;\n  byte[] distContextMap;\n  byte[] distExtraBits;\n  byte[] output;\n  byte[] byteBuffer;  // BitReader\n\n  short[] shortBuffer; // BitReader\n\n  int[] intBuffer;  // BitReader\n  int[] rings;\n  int[] blockTrees;\n  int[] literalTreeGroup;\n  int[] commandTreeGroup;\n  int[] distanceTreeGroup;\n  int[] distOffset;\n\n  long accumulator64;  // BitReader: pre-fetched bits.\n\n  int runningState;  // Default value is 0 == Decode.UNINITIALIZED\n  int nextRunningState;\n  int accumulator32;  // BitReader: pre-fetched bits.\n  int bitOffset;  // BitReader: bit-reading position in accumulator.\n  int halfOffset;  // BitReader: offset of next item in intBuffer/shortBuffer.\n  int tailBytes;  // BitReader: number of bytes in unfinished half.\n  int endOfStreamReached;  // BitReader: input stream is finished.\n  int metaBlockLength;\n  int inputEnd;\n  int isUncompressed;\n  int isMetadata;\n  int literalBlockLength;\n  int numLiteralBlockTypes;\n  int commandBlockLength;\n  int numCommandBlockTypes;\n  int distanceBlockLength;\n  int numDistanceBlockTypes;\n  int pos;\n  int maxDistance;\n  int distRbIdx;\n  int trivialLiteralContext;\n  int literalTreeIdx;\n  int commandTreeIdx;\n  int j;\n  int insertLength;\n  int contextMapSlice;\n  int distContextMapSlice;\n  int contextLookupOffset1;\n  int contextLookupOffset2;\n  int distanceCode;\n  int numDirectDistanceCodes;\n  int distancePostfixBits;\n  int distance;\n  int copyLength;\n  int maxBackwardDistance;\n  int maxRingBufferSize;\n  int ringBufferSize;\n  int expectedTotalSize;\n  int outputOffset;\n  int outputLength;\n  int outputUsed;\n  int ringBufferBytesWritten;\n  int ringBufferBytesReady;\n  int isEager;\n  int isLargeWindow;\n\n  // Compound dictionary\n  int cdNumChunks;\n  int cdTotalSize;\n  int cdBrIndex;\n  int cdBrOffset;\n  int cdBrLength;\n  int cdBrCopied;\n  byte[][] cdChunks;\n  int[] cdChunkOffsets;\n  int cdBlockBits;\n  byte[] cdBlockMap;\n\n  InputStream input = Utils.makeEmptyInput();  // BitReader\n\n  State() {\n    this.ringBuffer = new byte[0];\n    this.rings = new int[10];\n    this.rings[0] = 16;\n    this.rings[1] = 15;\n    this.rings[2] = 11;\n    this.rings[3] = 4;\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/dec/SynthTest.java",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\nimport static org.brotli.dec.TestUtils.newBrotliInputStream;\nimport static org.brotli.dec.TestUtils.readUniBytes;\nimport static org.junit.Assert.assertArrayEquals;\nimport static org.junit.Assert.fail;\nimport static org.junit.Assume.assumeTrue;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.JUnit4;\n\n/** Tests for {@link BrotliInputStream}. */\n@RunWith(JUnit4.class)\npublic class SynthTest {\n\n  private byte[] decompress(byte[] data) throws IOException {\n    byte[] buffer = new byte[65536];\n    ByteArrayInputStream input = new ByteArrayInputStream(data);\n    ByteArrayOutputStream output = new ByteArrayOutputStream();\n    InputStream brotliInput = newBrotliInputStream(input);\n    while (true) {\n      int len = brotliInput.read(buffer, 0, buffer.length);\n      if (len <= 0) {\n        break;\n      }\n      output.write(buffer, 0, len);\n    }\n    brotliInput.close();\n    return output.toByteArray();\n  }\n\n  private void checkSynth(byte[] compressed, boolean expectSuccess, String expectedOutput) {\n    byte[] expected = readUniBytes(expectedOutput);\n    try {\n      byte[] actual = decompress(compressed);\n      if (!expectSuccess) {\n        fail(\"expected to fail decoding, but succeeded\");\n      }\n      assertArrayEquals(expected, actual);\n    } catch (IOException ex) {\n      if (expectSuccess) {\n        throw new AssertionError(\"expected to succeed decoding, but failed\", ex);\n      }\n    }\n  }\n\n  private static String times(int count, String str) {\n    StringBuilder out = new StringBuilder(count * str.length());\n    for (int i = 0; i < count; ++i) {\n      out.append(str);\n    }\n    return out.toString();\n  }\n\n/* GENERATED CODE START */\n\n  @Test\n  public void testAllTransforms10() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0xfc, (byte) 0x05, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0x13, (byte) 0x7c, (byte) 0x84, (byte) 0x26, (byte) 0xf8, (byte) 0x04,\n      (byte) 0x10, (byte) 0x4c, (byte) 0xf0, (byte) 0x89, (byte) 0x38, (byte) 0x30, (byte) 0xc1,\n      (byte) 0x27, (byte) 0x4e, (byte) 0xc1, (byte) 0x04, (byte) 0x9f, (byte) 0x64, (byte) 0x06,\n      (byte) 0x26, (byte) 0xf8, (byte) 0x24, (byte) 0x3f, (byte) 0x34, (byte) 0xc1, (byte) 0x27,\n      (byte) 0x7d, (byte) 0x82, (byte) 0x09, (byte) 0x3e, (byte) 0xe9, (byte) 0x16, (byte) 0x4d,\n      (byte) 0xf0, (byte) 0xc9, (byte) 0xd2, (byte) 0xc0, (byte) 0x04, (byte) 0x9f, (byte) 0x0c,\n      (byte) 0x8f, (byte) 0x4c, (byte) 0xf0, (byte) 0xc9, (byte) 0x06, (byte) 0xd1, (byte) 0x04,\n      (byte) 0x9f, (byte) 0x6c, (byte) 0x92, (byte) 0x4d, (byte) 0xf0, (byte) 0xc9, (byte) 0x39,\n      (byte) 0xc1, (byte) 0x04, (byte) 0x9f, (byte) 0xdc, (byte) 0x94, (byte) 0x4c, (byte) 0xf0,\n      (byte) 0xc9, (byte) 0x69, (byte) 0xd1, (byte) 0x04, (byte) 0x9f, (byte) 0x3c, (byte) 0x98,\n      (byte) 0x4d, (byte) 0xf0, (byte) 0x29, (byte) 0x9c, (byte) 0x81, (byte) 0x09, (byte) 0x3e,\n      (byte) 0x45, (byte) 0x37, (byte) 0x31, (byte) 0xc1, (byte) 0xa7, (byte) 0x60, (byte) 0x47,\n      (byte) 0x26, (byte) 0xf8, (byte) 0x14, (byte) 0xfa, (byte) 0xcc, (byte) 0x04, (byte) 0x9f,\n      (byte) 0xc2, (byte) 0x20, (byte) 0x9a, (byte) 0xe0, (byte) 0x53, (byte) 0x48, (byte) 0x54,\n      (byte) 0x13, (byte) 0x7c, (byte) 0x8a, (byte) 0x8f, (byte) 0x6c, (byte) 0x82, (byte) 0x4f,\n      (byte) 0xb1, (byte) 0xd2, (byte) 0x4d, (byte) 0xf0, (byte) 0x29, (byte) 0x67, (byte) 0x82,\n      (byte) 0x09, (byte) 0x3e, (byte) 0xe5, (byte) 0x4f, (byte) 0x31, (byte) 0xc1, (byte) 0xa7,\n      (byte) 0x7c, (byte) 0x4a, (byte) 0x26, (byte) 0xf8, (byte) 0x94, (byte) 0x57, (byte) 0xcd,\n      (byte) 0x04, (byte) 0x9f, (byte) 0x12, (byte) 0x2c, (byte) 0x9a, (byte) 0xe0, (byte) 0x53,\n      (byte) 0xba, (byte) 0x55, (byte) 0x13, (byte) 0x7c, (byte) 0xca, (byte) 0xbf, (byte) 0x6c,\n      (byte) 0x82, (byte) 0x4f, (byte) 0xb9, (byte) 0xd8, (byte) 0x4d, (byte) 0xf0, (byte) 0xa9,\n      (byte) 0x30, (byte) 0x03, (byte) 0x13, (byte) 0x7c, (byte) 0x2a, (byte) 0xd2, (byte) 0xc2,\n      (byte) 0x04, (byte) 0x9f, (byte) 0x4a, (byte) 0x36, (byte) 0x31, (byte) 0xc1, (byte) 0xa7,\n      (byte) 0xca, (byte) 0x6d, (byte) 0x4c, (byte) 0xf0, (byte) 0xa9, (byte) 0x94, (byte) 0x23,\n      (byte) 0x13, (byte) 0x7c, (byte) 0x2a, (byte) 0xeb, (byte) 0xca, (byte) 0x04, (byte) 0x9f,\n      (byte) 0xea, (byte) 0x3c, (byte) 0x33, (byte) 0xc1, (byte) 0xa7, (byte) 0xb2, (byte) 0xef,\n      (byte) 0x4c, (byte) 0xf0, (byte) 0xa9, (byte) 0xf8, (byte) 0x43, (byte) 0x13, (byte) 0x7c,\n      (byte) 0xaa, (byte) 0x00, (byte) 0xd3, (byte) 0x04, (byte) 0x9f, (byte) 0x2a, (byte) 0x42,\n      (byte) 0x35, (byte) 0xc1, (byte) 0xa7, (byte) 0xc2, (byte) 0x70, (byte) 0x4d, (byte) 0xf0,\n      (byte) 0xa9, (byte) 0x52, (byte) 0x64, (byte) 0x13, (byte) 0x7c, (byte) 0x2a, (byte) 0x1a,\n      (byte) 0xdb, (byte) 0x04, (byte) 0x9f, (byte) 0x6a, (byte) 0x48, (byte) 0x37, (byte) 0xc1,\n      (byte) 0xa7, (byte) 0x92, (byte) 0xf2, (byte) 0x4d, (byte) 0xf0, (byte) 0xa9, (byte) 0xc3,\n      (byte) 0x04, (byte) 0x13, (byte) 0x7c, (byte) 0xea, (byte) 0x32, (byte) 0xc3, (byte) 0x04,\n      (byte) 0x9f, (byte) 0x7a, (byte) 0x4e, (byte) 0x31, (byte) 0xc1, (byte) 0xa7, (byte) 0x06,\n      (byte) 0x74, (byte) 0x4c, (byte) 0xf0, (byte) 0xa9, (byte) 0x19, (byte) 0x25, (byte) 0x13,\n      (byte) 0x7c, (byte) 0x6a, (byte) 0x4d, (byte) 0xcb, (byte) 0x04, (byte) 0x9f, (byte) 0x1a,\n      (byte) 0x55, (byte) 0x33, (byte) 0xc1, (byte) 0xa7, (byte) 0x56, (byte) 0xf5, (byte) 0x4c,\n      (byte) 0xf0, (byte) 0xa9, (byte) 0x5d, (byte) 0x45, (byte) 0x13, (byte) 0x7c, (byte) 0xea,\n      (byte) 0x59, (byte) 0xd3, (byte) 0x04, (byte) 0x9f, (byte) 0xfa, (byte) 0x57, (byte) 0x35,\n      (byte) 0xc1, (byte) 0xa7, (byte) 0x66, (byte) 0x76, (byte) 0x4d, (byte) 0xf0, (byte) 0xa9,\n      (byte) 0x9f, (byte) 0x65, (byte) 0x13, (byte) 0x7c, (byte) 0x6a, (byte) 0x6f, (byte) 0xdb,\n      (byte) 0x04, (byte) 0x9f, (byte) 0x9a, (byte) 0x5d, (byte) 0x37, (byte) 0xc1, (byte) 0xa7,\n      (byte) 0x06, (byte) 0xf8, (byte) 0x4d, (byte) 0xf0, (byte) 0x69, (byte) 0x0c, (byte) 0x06,\n      (byte) 0x26, (byte) 0xf8, (byte) 0x34, (byte) 0x08, (byte) 0x07, (byte) 0x13, (byte) 0x7c,\n      (byte) 0x1a, (byte) 0x8b, (byte) 0x85, (byte) 0x09, (byte) 0x3e, (byte) 0x8d, (byte) 0xc8,\n      (byte) 0xc3, (byte) 0x04, (byte) 0x9f, (byte) 0xe6, (byte) 0x65, (byte) 0x62, (byte) 0x82,\n      (byte) 0x4f, (byte) 0xb3, (byte) 0x73, (byte) 0x31, (byte) 0xc1, (byte) 0xa7, (byte) 0x41,\n      (byte) 0xda, (byte) 0x98, (byte) 0xe0, (byte) 0xd3, (byte) 0x54, (byte) 0x7d, (byte) 0x4c,\n      (byte) 0xf0, (byte) 0x69, (byte) 0xc4, (byte) 0x46, (byte) 0x26, (byte) 0xf8, (byte) 0x34,\n      (byte) 0x72, (byte) 0x27, (byte) 0x13, (byte) 0x7c, (byte) 0x1a, (byte) 0xc5, (byte) 0x95,\n      (byte) 0x09, (byte) 0x3e, (byte) 0x8d, (byte) 0xe5, (byte) 0xcb, (byte) 0x04, (byte) 0x9f,\n      (byte) 0x06, (byte) 0x75, (byte) 0x66, (byte) 0x82, (byte) 0x4f, (byte) 0x43, (byte) 0x7b,\n      (byte) 0x33, (byte) 0xc1, (byte) 0xa7, (byte) 0x09, (byte) 0xde, (byte) 0x99, (byte) 0xe0,\n      (byte) 0xd3, (byte) 0x34, (byte) 0xff, (byte) 0x4c, (byte) 0xf0, (byte) 0x69, (byte) 0xb2,\n      (byte) 0x87, (byte) 0x26, (byte) 0xf8, (byte) 0x34, (byte) 0xe9, (byte) 0x47, (byte) 0x13,\n      (byte) 0x7c, (byte) 0x9a, (byte) 0xfb, (byte) 0xa5, (byte) 0x09, (byte) 0x3e, (byte) 0x4d,\n      (byte) 0x01, (byte) 0xd4, (byte) 0x04, (byte) 0x9f, (byte) 0x46, (byte) 0x82, (byte) 0x6a,\n      (byte) 0x82, (byte) 0x4f, (byte) 0x03, (byte) 0x82, (byte) 0x35, (byte) 0xc1, (byte) 0xa7,\n      (byte) 0x61, (byte) 0xe1, (byte) 0x9a, (byte) 0xe0, (byte) 0xd3, (byte) 0xe4, (byte) 0x80,\n      (byte) 0x4d, (byte) 0xf0, (byte) 0x69, (byte) 0x8a, (byte) 0xc8, (byte) 0x26, (byte) 0xf8,\n      (byte) 0x34, (byte) 0x52, (byte) 0x68, (byte) 0x13, (byte) 0x7c, (byte) 0x9a, (byte) 0x2f,\n      (byte) 0xb6, (byte) 0x09, (byte) 0x3e, (byte) 0x8d, (byte) 0x1b, (byte) 0xdc, (byte) 0x04,\n      (byte) 0x9f, (byte) 0x86, (byte) 0x8f, (byte) 0x6e, (byte) 0x82, (byte) 0x4f, (byte) 0xb3,\n      (byte) 0x88, (byte) 0x37, (byte) 0xc1, (byte) 0xa7, (byte) 0xd9, (byte) 0xe4, (byte) 0x9b,\n      (byte) 0xe0, (byte) 0xd3, (byte) 0x9e, (byte) 0x02, (byte) 0x4c, (byte) 0xf0, (byte) 0x69,\n      (byte) 0x6d, (byte) 0x09, (byte) 0x26, (byte) 0xf8, (byte) 0xb4, (byte) 0xc3, (byte) 0x08,\n      (byte) 0x13, (byte) 0x7c, (byte) 0x5a, (byte) 0x68, (byte) 0x86, (byte) 0x09, (byte) 0x3e,\n      (byte) 0xad, (byte) 0x37, (byte) 0xc4, (byte) 0x04, (byte) 0x9f, (byte) 0x56, (byte) 0x9d,\n      (byte) 0x62, (byte) 0x82, (byte) 0x4f, (byte) 0x9b, (byte) 0x8f, (byte) 0x31, (byte) 0xc1,\n      (byte) 0xa7, (byte) 0x2d, (byte) 0xe8, (byte) 0x98, (byte) 0xe0, (byte) 0xd3, (byte) 0x4a,\n      (byte) 0x84, (byte) 0x4c, (byte) 0xf0, (byte) 0x69, (byte) 0x3f, (byte) 0x4a, (byte) 0x26,\n      (byte) 0xf8, (byte) 0xb4, (byte) 0x2c, (byte) 0x29, (byte) 0x13, (byte) 0x7c, (byte) 0xda,\n      (byte) 0x9c, (byte) 0x96, (byte) 0x09, (byte) 0x3e, (byte) 0x2d, (byte) 0x52, (byte) 0xcc,\n      (byte) 0x04, (byte) 0x9f, (byte) 0xb6, (byte) 0xaa, (byte) 0x66, (byte) 0x82, (byte) 0x4f,\n      (byte) 0x2b, (byte) 0x96, (byte) 0x33, (byte) 0xc1, (byte) 0xa7, (byte) 0x7d, (byte) 0xeb,\n      (byte) 0x99, (byte) 0xe0, (byte) 0xd3, (byte) 0xf6, (byte) 0x05, (byte) 0x4d, (byte) 0xf0,\n      (byte) 0x69, (byte) 0x17, (byte) 0x8b, (byte) 0x26, (byte) 0xf8, (byte) 0xb4, (byte) 0x97,\n      (byte) 0x49, (byte) 0x13, (byte) 0x7c, (byte) 0xda, (byte) 0xd1, (byte) 0xa6, (byte) 0x09,\n      (byte) 0x3e, (byte) 0x2d, (byte) 0x6c, (byte) 0xd4, (byte) 0x04, (byte) 0x9f, (byte) 0xb6,\n      (byte) 0xb7, (byte) 0x6a, (byte) 0x82, (byte) 0x4f, (byte) 0xab, (byte) 0x9c, (byte) 0x35,\n      (byte) 0xc1, (byte) 0xa7, (byte) 0xc5, (byte) 0xee, (byte) 0x9a, (byte) 0xe0, (byte) 0xd3,\n      (byte) 0x9a, (byte) 0x87, (byte) 0x4d, (byte) 0xf0, (byte) 0x69, (byte) 0xe9, (byte) 0xcb\n    };\n    checkSynth(\n    /*\n     * // The stream consists of word \"time\" with all possible transforms.\n     * main_header\n     * metablock_header_easy: 1533, 1\n     * command_easy: 10, \"|\", 2 // = 0 << 10 + 1 + 1\n     * command_easy: 10, \"|\", 1037 // = 1 << 10 + 1 + 12\n     * command_easy: 10, \"|\", 2073 // = 2 << 10 + 1 + 24\n     * command_easy: 10, \"|\", 3110 // = 3 << 10 + 1 + 37\n     * command_easy: 10, \"|\", 4144 // = 4 << 10 + 1 + 47\n     * command_easy: 10, \"|\", 5180 // = 5 << 10 + 1 + 59\n     * command_easy: 10, \"|\", 6220 // = 6 << 10 + 1 + 75\n     * command_easy: 10, \"|\", 7256 // = 7 << 10 + 1 + 87\n     * command_easy: 10, \"|\", 8294 // = 8 << 10 + 1 + 101\n     * command_easy: 10, \"|\", 9333 // = 9 << 10 + 1 + 116\n     * command_easy: 10, \"|\", 10368 // = 10 << 10 + 1 + 127\n     * command_easy: 10, \"|\", 11408 // = 11 << 10 + 1 + 143\n     * command_easy: 10, \"|\", 12441 // = 12 << 10 + 1 + 152\n     * command_easy: 10, \"|\", 13475 // = 13 << 10 + 1 + 162\n     * command_easy: 10, \"|\", 14513 // = 14 << 10 + 1 + 176\n     * command_easy: 10, \"|\", 15550 // = 15 << 10 + 1 + 189\n     * command_easy: 10, \"|\", 16587 // = 16 << 10 + 1 + 202\n     * command_easy: 10, \"|\", 17626 // = 17 << 10 + 1 + 217\n     * command_easy: 10, \"|\", 18665 // = 18 << 10 + 1 + 232\n     * command_easy: 10, \"|\", 19703 // = 19 << 10 + 1 + 246\n     * command_easy: 10, \"|\", 20739 // = 20 << 10 + 1 + 258\n     * command_easy: 10, \"|\", 21775 // = 21 << 10 + 1 + 270\n     * command_easy: 10, \"|\", 22812 // = 22 << 10 + 1 + 283\n     * command_easy: 10, \"|\", 23848 // = 23 << 10 + 1 + 295\n     * command_easy: 10, \"|\", 24880 // = 24 << 10 + 1 + 303\n     * command_easy: 10, \"|\", 25916 // = 25 << 10 + 1 + 315\n     * command_easy: 10, \"|\", 26956 // = 26 << 10 + 1 + 331\n     * command_easy: 10, \"|\", 27988 // = 27 << 10 + 1 + 339\n     * command_easy: 10, \"|\", 29021 // = 28 << 10 + 1 + 348\n     * command_easy: 10, \"|\", 30059 // = 29 << 10 + 1 + 362\n     * command_easy: 10, \"|\", 31100 // = 30 << 10 + 1 + 379\n     * command_easy: 10, \"|\", 32136 // = 31 << 10 + 1 + 391\n     * command_easy: 10, \"|\", 33173 // = 32 << 10 + 1 + 404\n     * command_easy: 10, \"|\", 34209 // = 33 << 10 + 1 + 416\n     * command_easy: 10, \"|\", 35247 // = 34 << 10 + 1 + 430\n     * command_easy: 10, \"|\", 36278 // = 35 << 10 + 1 + 437\n     * command_easy: 10, \"|\", 37319 // = 36 << 10 + 1 + 454\n     * command_easy: 10, \"|\", 38355 // = 37 << 10 + 1 + 466\n     * command_easy: 10, \"|\", 39396 // = 38 << 10 + 1 + 483\n     * command_easy: 10, \"|\", 40435 // = 39 << 10 + 1 + 498\n     * command_easy: 10, \"|\", 41465 // = 40 << 10 + 1 + 504\n     * command_easy: 10, \"|\", 42494 // = 41 << 10 + 1 + 509\n     * command_easy: 10, \"|\", 43534 // = 42 << 10 + 1 + 525\n     * command_easy: 10, \"|\", 44565 // = 43 << 10 + 1 + 532\n     * command_easy: 10, \"|\", 45606 // = 44 << 10 + 1 + 549\n     * command_easy: 10, \"|\", 46641 // = 45 << 10 + 1 + 560\n     * command_easy: 10, \"|\", 47680 // = 46 << 10 + 1 + 575\n     * command_easy: 10, \"|\", 48719 // = 47 << 10 + 1 + 590\n     * command_easy: 10, \"|\", 49758 // = 48 << 10 + 1 + 605\n     * command_easy: 10, \"|\", 50786 // = 49 << 10 + 1 + 609\n     * command_easy: 10, \"|\", 51824 // = 50 << 10 + 1 + 623\n     * command_easy: 10, \"|\", 52861 // = 51 << 10 + 1 + 636\n     * command_easy: 10, \"|\", 53897 // = 52 << 10 + 1 + 648\n     * command_easy: 10, \"|\", 54935 // = 53 << 10 + 1 + 662\n     * command_easy: 10, \"|\", 55973 // = 54 << 10 + 1 + 676\n     * command_easy: 10, \"|\", 56999 // = 55 << 10 + 1 + 678\n     * command_easy: 10, \"|\", 58027 // = 56 << 10 + 1 + 682\n     * command_easy: 10, \"|\", 59056 // = 57 << 10 + 1 + 687\n     * command_easy: 10, \"|\", 60092 // = 58 << 10 + 1 + 699\n     * command_easy: 10, \"|\", 61129 // = 59 << 10 + 1 + 712\n     * command_easy: 10, \"|\", 62156 // = 60 << 10 + 1 + 715\n     * command_easy: 10, \"|\", 63195 // = 61 << 10 + 1 + 730\n     * command_easy: 10, \"|\", 64233 // = 62 << 10 + 1 + 744\n     * command_easy: 10, \"|\", 65277 // = 63 << 10 + 1 + 764\n     * command_easy: 10, \"|\", 66307 // = 64 << 10 + 1 + 770\n     * command_easy: 10, \"|\", 67333 // = 65 << 10 + 1 + 772\n     * command_easy: 10, \"|\", 68371 // = 66 << 10 + 1 + 786\n     * command_easy: 10, \"|\", 69407 // = 67 << 10 + 1 + 798\n     * command_easy: 10, \"|\", 70444 // = 68 << 10 + 1 + 811\n     * command_easy: 10, \"|\", 71480 // = 69 << 10 + 1 + 823\n     * command_easy: 10, \"|\", 72517 // = 70 << 10 + 1 + 836\n     * command_easy: 10, \"|\", 73554 // = 71 << 10 + 1 + 849\n     * command_easy: 10, \"|\", 74591 // = 72 << 10 + 1 + 862\n     * command_easy: 10, \"|\", 75631 // = 73 << 10 + 1 + 878\n     * command_easy: 10, \"|\", 76679 // = 74 << 10 + 1 + 902\n     * command_easy: 10, \"|\", 77715 // = 75 << 10 + 1 + 914\n     * command_easy: 10, \"|\", 78757 // = 76 << 10 + 1 + 932\n     * command_easy: 10, \"|\", 79793 // = 77 << 10 + 1 + 944\n     * command_easy: 10, \"|\", 80830 // = 78 << 10 + 1 + 957\n     * command_easy: 10, \"|\", 81866 // = 79 << 10 + 1 + 969\n     * command_easy: 10, \"|\", 82902 // = 80 << 10 + 1 + 981\n     * command_easy: 10, \"|\", 83942 // = 81 << 10 + 1 + 997\n     * command_easy: 10, \"|\", 84980 // = 82 << 10 + 1 + 1011\n     * command_easy: 10, \"|\", 86018 // = 83 << 10 + 1 + 1025\n     * command_easy: 10, \"|\", 87055 // = 84 << 10 + 1 + 1038\n     * command_easy: 10, \"|\", 88093 // = 85 << 10 + 1 + 1052\n     * command_easy: 10, \"|\", 89129 // = 86 << 10 + 1 + 1064\n     * command_easy: 10, \"|\", 90166 // = 87 << 10 + 1 + 1077\n     * command_easy: 10, \"|\", 91202 // = 88 << 10 + 1 + 1089\n     * command_easy: 10, \"|\", 92239 // = 89 << 10 + 1 + 1102\n     * command_easy: 10, \"|\", 93276 // = 90 << 10 + 1 + 1115\n     * command_easy: 10, \"|\", 94315 // = 91 << 10 + 1 + 1130\n     * command_easy: 10, \"|\", 95353 // = 92 << 10 + 1 + 1144\n     * command_easy: 10, \"|\", 96392 // = 93 << 10 + 1 + 1159\n     * command_easy: 10, \"|\", 97432 // = 94 << 10 + 1 + 1175\n     * command_easy: 10, \"|\", 98468 // = 95 << 10 + 1 + 1187\n     * command_easy: 10, \"|\", 99507 // = 96 << 10 + 1 + 1202\n     * command_easy: 10, \"|\", 100544 // = 97 << 10 + 1 + 1215\n     * command_easy: 10, \"|\", 101581 // = 98 << 10 + 1 + 1228\n     * command_easy: 10, \"|\", 102619 // = 99 << 10 + 1 + 1242\n     * command_easy: 10, \"|\", 103655 // = 100 << 10 + 1 + 1254\n     * command_easy: 10, \"|\", 104694 // = 101 << 10 + 1 + 1269\n     * command_easy: 10, \"|\", 105730 // = 102 << 10 + 1 + 1281\n     * command_easy: 10, \"|\", 106767 // = 103 << 10 + 1 + 1294\n     * command_easy: 10, \"|\", 107804 // = 104 << 10 + 1 + 1307\n     * command_easy: 10, \"|\", 108841 // = 105 << 10 + 1 + 1320\n     * command_easy: 10, \"|\", 109878 // = 106 << 10 + 1 + 1333\n     * command_easy: 10, \"|\", 110917 // = 107 << 10 + 1 + 1348\n     * command_easy: 10, \"|\", 111954 // = 108 << 10 + 1 + 1361\n     * command_easy: 10, \"|\", 112991 // = 109 << 10 + 1 + 1374\n     * command_easy: 10, \"|\", 114028 // = 110 << 10 + 1 + 1387\n     * command_easy: 10, \"|\", 115066 // = 111 << 10 + 1 + 1401\n     * command_easy: 10, \"|\", 116104 // = 112 << 10 + 1 + 1415\n     * command_easy: 10, \"|\", 117140 // = 113 << 10 + 1 + 1427\n     * command_easy: 10, \"|\", 118176 // = 114 << 10 + 1 + 1439\n     * command_easy: 10, \"|\", 119213 // = 115 << 10 + 1 + 1452\n     * command_easy: 10, \"|\", 120250 // = 116 << 10 + 1 + 1465\n     * command_easy: 10, \"|\", 121287 // = 117 << 10 + 1 + 1478\n     * command_easy: 10, \"|\", 122325 // = 118 << 10 + 1 + 1492\n     * command_easy: 10, \"|\", 123363 // = 119 << 10 + 1 + 1506\n     * command_easy: 10, \"|\", 124401 // = 120 << 10 + 1 + 1520\n     */\n      compressed,\n      true,\n      // typo:off\n      \"|categories|categories | categories |ategories|Categories |categories the | categories|s cat\"\n      + \"egories |categories of |Categories|categories and |tegories|categorie|, categories |catego\"\n      + \"ries, | Categories |categories in |categories to |e categories |categories\\\"|categories.|c\"\n      + \"ategories\\\">|categories\\n|categor|categories]|categories for |egories|categori|categories \"\n      + \"a |categories that | Categories|categories. |.categories| categories, |gories|categories w\"\n      + \"ith |categories'|categories from |categories by |ories|ries| the categories|catego|categor\"\n      + \"ies. The |CATEGORIES|categories on |categories as |categories is |cat|categorieing |catego\"\n      + \"ries\\n\\t|categories:| categories. |categoriesed |s|ies|cate|categories(|Categories, |ca|ca\"\n      + \"tegories at |categoriesly | the categories of |categ|c| Categories, |Categories\\\"|.categor\"\n      + \"ies(|CATEGORIES |Categories\\\">|categories=\\\"| categories.|.com/categories| the categories \"\n      + \"of the |Categories'|categories. This |categories,|.categories |Categories(|Categories.|cat\"\n      + \"egories not | categories=\\\"|categorieser | CATEGORIES |categoriesal | CATEGORIES|categorie\"\n      + \"s='|CATEGORIES\\\"|Categories. | categories(|categoriesful | Categories. |categoriesive |cat\"\n      + \"egoriesless |CATEGORIES'|categoriesest | Categories.|CATEGORIES\\\">| categories='|Categorie\"\n      + \"s,|categoriesize |CATEGORIES.|\\302\\240categories| categories,|Categories=\\\"|CATEGORIES=\"\n      + \"\\\"|categoriesous |CATEGORIES, |Categories='| Categories,| CATEGORIES=\\\"| CATEGORIES, |CATE\"\n      + \"GORIES,|CATEGORIES(|CATEGORIES. | CATEGORIES.|CATEGORIES='| CATEGORIES. | Categories=\\\"| C\"\n      + \"ATEGORIES='| Categories='\"\n      // typo:on\n    );\n  }\n\n  @Test\n  public void testAllTransforms4() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x40, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0x51, (byte) 0x3e, (byte) 0x42, (byte) 0x51, (byte) 0x3e, (byte) 0x81,\n      (byte) 0x02, (byte) 0x51, (byte) 0x3e, (byte) 0x11, (byte) 0x04, (byte) 0xa2, (byte) 0x7c,\n      (byte) 0xe2, (byte) 0x0b, (byte) 0x44, (byte) 0xf9, (byte) 0x24, (byte) 0x1b, (byte) 0x10,\n      (byte) 0xe5, (byte) 0x93, (byte) 0x84, (byte) 0x50, (byte) 0x94, (byte) 0x4f, (byte) 0xba,\n      (byte) 0x02, (byte) 0x51, (byte) 0x3e, (byte) 0x69, (byte) 0x0c, (byte) 0x45, (byte) 0xf9,\n      (byte) 0x64, (byte) 0x39, (byte) 0x20, (byte) 0xca, (byte) 0x27, (byte) 0x13, (byte) 0x22,\n      (byte) 0x51, (byte) 0x3e, (byte) 0xd9, (byte) 0x11, (byte) 0x8a, (byte) 0xf2, (byte) 0xc9,\n      (byte) 0xa2, (byte) 0x58, (byte) 0x94, (byte) 0x4f, (byte) 0x4e, (byte) 0x05, (byte) 0xa2,\n      (byte) 0x7c, (byte) 0x72, (byte) 0x2c, (byte) 0x12, (byte) 0xe5, (byte) 0x93, (byte) 0x83,\n      (byte) 0xa1, (byte) 0x28, (byte) 0x9f, (byte) 0xfc, (byte) 0x8c, (byte) 0x45, (byte) 0xf9,\n      (byte) 0x14, (byte) 0x6e, (byte) 0x40, (byte) 0x94, (byte) 0x4f, (byte) 0x71, (byte) 0x47,\n      (byte) 0x44, (byte) 0xf9, (byte) 0x14, (byte) 0x80, (byte) 0x48, (byte) 0x94, (byte) 0x4f,\n      (byte) 0x81, (byte) 0xc8, (byte) 0x44, (byte) 0xf9, (byte) 0x14, (byte) 0x8e, (byte) 0x50,\n      (byte) 0x94, (byte) 0x4f, (byte) 0x41, (byte) 0x49, (byte) 0x45, (byte) 0xf9, (byte) 0x14,\n      (byte) 0x9b, (byte) 0x58, (byte) 0x94, (byte) 0x4f, (byte) 0x11, (byte) 0xca, (byte) 0x45,\n      (byte) 0xf9, (byte) 0x94, (byte) 0xa3, (byte) 0x40, (byte) 0x94, (byte) 0x4f, (byte) 0x99,\n      (byte) 0x4a, (byte) 0x44, (byte) 0xf9, (byte) 0x94, (byte) 0xb3, (byte) 0x48, (byte) 0x94,\n      (byte) 0x4f, (byte) 0x59, (byte) 0xcb, (byte) 0x44, (byte) 0xf9, (byte) 0x94, (byte) 0xb8,\n      (byte) 0x50, (byte) 0x94, (byte) 0x4f, (byte) 0x09, (byte) 0x4c, (byte) 0x45, (byte) 0xf9,\n      (byte) 0x94, (byte) 0xcb, (byte) 0x58, (byte) 0x94, (byte) 0x4f, (byte) 0x19, (byte) 0xcd,\n      (byte) 0x45, (byte) 0xf9, (byte) 0x54, (byte) 0xd8, (byte) 0x80, (byte) 0x28, (byte) 0x9f,\n      (byte) 0xca, (byte) 0x9b, (byte) 0x10, (byte) 0xe5, (byte) 0x53, (byte) 0x99, (byte) 0x23,\n      (byte) 0xa2, (byte) 0x7c, (byte) 0xaa, (byte) 0x73, (byte) 0x46, (byte) 0x94, (byte) 0x4f,\n      (byte) 0x25, (byte) 0x0f, (byte) 0x89, (byte) 0xf2, (byte) 0xa9, (byte) 0xf0, (byte) 0x29,\n      (byte) 0x51, (byte) 0x3e, (byte) 0xd5, (byte) 0x40, (byte) 0x26, (byte) 0xca, (byte) 0xa7,\n      (byte) 0x62, (byte) 0xe8, (byte) 0x44, (byte) 0xf9, (byte) 0x54, (byte) 0x0d, (byte) 0xa1,\n      (byte) 0x28, (byte) 0x9f, (byte) 0xca, (byte) 0xa1, (byte) 0x14, (byte) 0xe5, (byte) 0x53,\n      (byte) 0x61, (byte) 0xa4, (byte) 0xa2, (byte) 0x7c, (byte) 0xaa, (byte) 0x8c, (byte) 0x56,\n      (byte) 0x94, (byte) 0x4f, (byte) 0x45, (byte) 0x12, (byte) 0x8b, (byte) 0xf2, (byte) 0xa9,\n      (byte) 0x52, (byte) 0x6a, (byte) 0x51, (byte) 0x3e, (byte) 0x95, (byte) 0x4c, (byte) 0x2e,\n      (byte) 0xca, (byte) 0xa7, (byte) 0xda, (byte) 0xe9, (byte) 0x45, (byte) 0xf9, (byte) 0xd4,\n      (byte) 0x44, (byte) 0x81, (byte) 0x28, (byte) 0x9f, (byte) 0xba, (byte) 0xa8, (byte) 0x10,\n      (byte) 0xe5, (byte) 0x53, (byte) 0x37, (byte) 0x25, (byte) 0xa2, (byte) 0x7c, (byte) 0x6a,\n      (byte) 0xaa, (byte) 0x46, (byte) 0x94, (byte) 0x4f, (byte) 0xad, (byte) 0x15, (byte) 0x89,\n      (byte) 0xf2, (byte) 0xa9, (byte) 0xc5, (byte) 0x2a, (byte) 0x51, (byte) 0x3e, (byte) 0xb5,\n      (byte) 0x5a, (byte) 0x26, (byte) 0xca, (byte) 0xa7, (byte) 0x5e, (byte) 0xeb, (byte) 0x44,\n      (byte) 0xf9, (byte) 0xd4, (byte) 0x6c, (byte) 0xa1, (byte) 0x28, (byte) 0x9f, (byte) 0xba,\n      (byte) 0xad, (byte) 0x14, (byte) 0xe5, (byte) 0x53, (byte) 0xcf, (byte) 0xa5, (byte) 0xa2,\n      (byte) 0x7c, (byte) 0x6a, (byte) 0xbd, (byte) 0x56, (byte) 0x94, (byte) 0x4f, (byte) 0xbd,\n      (byte) 0x17, (byte) 0x8b, (byte) 0xf2, (byte) 0xa9, (byte) 0x09, (byte) 0x6b, (byte) 0x51,\n      (byte) 0x3e, (byte) 0x35, (byte) 0x63, (byte) 0x2e, (byte) 0xca, (byte) 0xa7, (byte) 0xd6,\n      (byte) 0xec, (byte) 0x45, (byte) 0xf9, (byte) 0x34, (byte) 0x9b, (byte) 0x01, (byte) 0x51,\n      (byte) 0x3e, (byte) 0x0d, (byte) 0x67, (byte) 0x41, (byte) 0x94, (byte) 0x4f, (byte) 0x43,\n      (byte) 0x9a, (byte) 0x10, (byte) 0xe5, (byte) 0xd3, (byte) 0xa8, (byte) 0x36, (byte) 0x44,\n      (byte) 0xf9, (byte) 0x34, (byte) 0xb1, (byte) 0x11, (byte) 0x51, (byte) 0x3e, (byte) 0xcd,\n      (byte) 0x6d, (byte) 0x45, (byte) 0x94, (byte) 0x4f, (byte) 0xe3, (byte) 0x9b, (byte) 0x11,\n      (byte) 0xe5, (byte) 0xd3, (byte) 0x14, (byte) 0x77, (byte) 0x44, (byte) 0xf9, (byte) 0x34,\n      (byte) 0xcc, (byte) 0x21, (byte) 0x51, (byte) 0x3e, (byte) 0x8d, (byte) 0x75, (byte) 0x49,\n      (byte) 0x94, (byte) 0x4f, (byte) 0x83, (byte) 0x9e, (byte) 0x12, (byte) 0xe5, (byte) 0xd3,\n      (byte) 0xb8, (byte) 0xb7, (byte) 0x44, (byte) 0xf9, (byte) 0x34, (byte) 0xfa, (byte) 0x31,\n      (byte) 0x51, (byte) 0x3e, (byte) 0x0d, (byte) 0x80, (byte) 0x4d, (byte) 0x94, (byte) 0x4f,\n      (byte) 0x73, (byte) 0xa0, (byte) 0x13, (byte) 0xe5, (byte) 0xd3, (byte) 0x34, (byte) 0xf8,\n      (byte) 0x44, (byte) 0xf9, (byte) 0x34, (byte) 0x13, (byte) 0x42, (byte) 0x51, (byte) 0x3e,\n      (byte) 0x4d, (byte) 0x87, (byte) 0x51, (byte) 0x94, (byte) 0x4f, (byte) 0x53, (byte) 0xa2,\n      (byte) 0x14, (byte) 0xe5, (byte) 0xd3, (byte) 0xb4, (byte) 0x38, (byte) 0x45, (byte) 0xf9,\n      (byte) 0x34, (byte) 0x34, (byte) 0x52, (byte) 0x51, (byte) 0x3e, (byte) 0x0d, (byte) 0x8f,\n      (byte) 0x55, (byte) 0x94, (byte) 0x4f, (byte) 0x23, (byte) 0xa4, (byte) 0x15, (byte) 0xe5,\n      (byte) 0xd3, (byte) 0x24, (byte) 0x79, (byte) 0x45, (byte) 0xf9, (byte) 0x34, (byte) 0x4f,\n      (byte) 0x62, (byte) 0x51, (byte) 0x3e, (byte) 0x8d, (byte) 0x95, (byte) 0x59, (byte) 0x94,\n      (byte) 0x4f, (byte) 0xd3, (byte) 0xa5, (byte) 0x16, (byte) 0xe5, (byte) 0xd3, (byte) 0x98,\n      (byte) 0xb9, (byte) 0x45, (byte) 0xf9, (byte) 0x34, (byte) 0x6e, (byte) 0x72, (byte) 0x51,\n      (byte) 0x3e, (byte) 0xcd, (byte) 0x9d, (byte) 0x5d, (byte) 0x94, (byte) 0x4f, (byte) 0x13,\n      (byte) 0xa8, (byte) 0x17, (byte) 0xe5, (byte) 0xd3, (byte) 0x1c, (byte) 0xfa, (byte) 0x45,\n      (byte) 0xf9, (byte) 0xb4, (byte) 0x90, (byte) 0x02, (byte) 0x51, (byte) 0x3e, (byte) 0xed,\n      (byte) 0xa5, (byte) 0x41, (byte) 0x94, (byte) 0x4f, (byte) 0xeb, (byte) 0xa9, (byte) 0x10,\n      (byte) 0xe5, (byte) 0xd3, (byte) 0x9a, (byte) 0x3a, (byte) 0x44, (byte) 0xf9, (byte) 0xb4,\n      (byte) 0xac, (byte) 0x12, (byte) 0x51, (byte) 0x3e, (byte) 0x6d, (byte) 0xad, (byte) 0x45,\n      (byte) 0x94, (byte) 0x4f, (byte) 0xbb, (byte) 0xab, (byte) 0x11, (byte) 0xe5, (byte) 0xd3,\n      (byte) 0x0a, (byte) 0x7b, (byte) 0x44, (byte) 0xf9, (byte) 0xb4, (byte) 0xc9, (byte) 0x22,\n      (byte) 0x51, (byte) 0x3e, (byte) 0x2d, (byte) 0xb4, (byte) 0x49, (byte) 0x94, (byte) 0x4f,\n      (byte) 0x7b, (byte) 0xad, (byte) 0x12, (byte) 0xe5, (byte) 0xd3, (byte) 0x82, (byte) 0xbb,\n      (byte) 0x44, (byte) 0xf9, (byte) 0xb4, (byte) 0xe7, (byte) 0x32, (byte) 0x51, (byte) 0x3e,\n      (byte) 0xad, (byte) 0xbb, (byte) 0x4d, (byte) 0x94, (byte) 0x4f, (byte) 0x5b, (byte) 0xaf,\n      (byte) 0x13, (byte) 0xe5, (byte) 0xd3, (byte) 0xf6, (byte) 0xfb, (byte) 0x44, (byte) 0xf9,\n      (byte) 0xb4, (byte) 0x05, (byte) 0x43, (byte) 0x51, (byte) 0x3e, (byte) 0xed, (byte) 0xc2,\n      (byte) 0x51, (byte) 0x94, (byte) 0x4f, (byte) 0x1b, (byte) 0xb1, (byte) 0x14, (byte) 0xe5,\n      (byte) 0xd3, (byte) 0x62, (byte) 0x3c, (byte) 0x45, (byte) 0xf9, (byte) 0xb4, (byte) 0x1f,\n      (byte) 0x53, (byte) 0x51, (byte) 0x3e, (byte) 0xad, (byte) 0xc9, (byte) 0x55, (byte) 0x94,\n      (byte) 0x4f, (byte) 0xeb, (byte) 0xb2, (byte) 0x15, (byte) 0xe5, (byte) 0xd3, (byte) 0xda,\n      (byte) 0x7c, (byte) 0x45, (byte) 0xf9, (byte) 0xb4, (byte) 0x3e, (byte) 0x63\n    };\n    checkSynth(\n    /*\n     * // The stream consists of word \"time\" with all possible transforms.\n     * main_header\n     * metablock_header_easy: 833, 1\n     * command_easy: 4, \"|\", 2 // = 0 << 10 + 1 + 1\n     * command_easy: 4, \"|\", 1031 // = 1 << 10 + 1 + 6\n     * command_easy: 4, \"|\", 2061 // = 2 << 10 + 1 + 12\n     * command_easy: 4, \"|\", 3092 // = 3 << 10 + 1 + 19\n     * command_easy: 4, \"|\", 4120 // = 4 << 10 + 1 + 23\n     * command_easy: 4, \"|\", 5150 // = 5 << 10 + 1 + 29\n     * command_easy: 4, \"|\", 6184 // = 6 << 10 + 1 + 39\n     * command_easy: 4, \"|\", 7214 // = 7 << 10 + 1 + 45\n     * command_easy: 4, \"|\", 8246 // = 8 << 10 + 1 + 53\n     * command_easy: 4, \"|\", 9279 // = 9 << 10 + 1 + 62\n     * command_easy: 4, \"|\", 10308 // = 10 << 10 + 1 + 67\n     * command_easy: 4, \"|\", 11342 // = 11 << 10 + 1 + 77\n     * command_easy: 4, \"|\", 12369 // = 12 << 10 + 1 + 80\n     * command_easy: 4, \"|\", 13397 // = 13 << 10 + 1 + 84\n     * command_easy: 4, \"|\", 14429 // = 14 << 10 + 1 + 92\n     * command_easy: 4, \"|\", 15460 // = 15 << 10 + 1 + 99\n     * command_easy: 4, \"|\", 16491 // = 16 << 10 + 1 + 106\n     * command_easy: 4, \"|\", 17524 // = 17 << 10 + 1 + 115\n     * command_easy: 4, \"|\", 18557 // = 18 << 10 + 1 + 124\n     * command_easy: 4, \"|\", 19589 // = 19 << 10 + 1 + 132\n     * command_easy: 4, \"|\", 20619 // = 20 << 10 + 1 + 138\n     * command_easy: 4, \"|\", 21649 // = 21 << 10 + 1 + 144\n     * command_easy: 4, \"|\", 22680 // = 22 << 10 + 1 + 151\n     * command_easy: 4, \"|\", 23710 // = 23 << 10 + 1 + 157\n     * command_easy: 4, \"|\", 24736 // = 24 << 10 + 1 + 159\n     * command_easy: 4, \"|\", 25766 // = 25 << 10 + 1 + 165\n     * command_easy: 4, \"|\", 26800 // = 26 << 10 + 1 + 175\n     * command_easy: 4, \"|\", 27826 // = 27 << 10 + 1 + 177\n     * command_easy: 4, \"|\", 28853 // = 28 << 10 + 1 + 180\n     * command_easy: 4, \"|\", 29885 // = 29 << 10 + 1 + 188\n     * command_easy: 4, \"|\", 30920 // = 30 << 10 + 1 + 199\n     * command_easy: 4, \"|\", 31950 // = 31 << 10 + 1 + 205\n     * command_easy: 4, \"|\", 32981 // = 32 << 10 + 1 + 212\n     * command_easy: 4, \"|\", 34011 // = 33 << 10 + 1 + 218\n     * command_easy: 4, \"|\", 35043 // = 34 << 10 + 1 + 226\n     * command_easy: 4, \"|\", 36068 // = 35 << 10 + 1 + 227\n     * command_easy: 4, \"|\", 37103 // = 36 << 10 + 1 + 238\n     * command_easy: 4, \"|\", 38133 // = 37 << 10 + 1 + 244\n     * command_easy: 4, \"|\", 39168 // = 38 << 10 + 1 + 255\n     * command_easy: 4, \"|\", 40201 // = 39 << 10 + 1 + 264\n     * command_easy: 4, \"|\", 41226 // = 40 << 10 + 1 + 265\n     * command_easy: 4, \"|\", 42251 // = 41 << 10 + 1 + 266\n     * command_easy: 4, \"|\", 43285 // = 42 << 10 + 1 + 276\n     * command_easy: 4, \"|\", 44310 // = 43 << 10 + 1 + 277\n     * command_easy: 4, \"|\", 45345 // = 44 << 10 + 1 + 288\n     * command_easy: 4, \"|\", 46374 // = 45 << 10 + 1 + 293\n     * command_easy: 4, \"|\", 47407 // = 46 << 10 + 1 + 302\n     * command_easy: 4, \"|\", 48440 // = 47 << 10 + 1 + 311\n     * command_easy: 4, \"|\", 49473 // = 48 << 10 + 1 + 320\n     * command_easy: 4, \"|\", 50498 // = 49 << 10 + 1 + 321\n     * command_easy: 4, \"|\", 51530 // = 50 << 10 + 1 + 329\n     * command_easy: 4, \"|\", 52561 // = 51 << 10 + 1 + 336\n     * command_easy: 4, \"|\", 53591 // = 52 << 10 + 1 + 342\n     * command_easy: 4, \"|\", 54623 // = 53 << 10 + 1 + 350\n     * command_easy: 4, \"|\", 55655 // = 54 << 10 + 1 + 358\n     * command_easy: 4, \"|\", 56680 // = 55 << 10 + 1 + 359\n     * command_easy: 4, \"|\", 57705 // = 56 << 10 + 1 + 360\n     * command_easy: 4, \"|\", 58730 // = 57 << 10 + 1 + 361\n     * command_easy: 4, \"|\", 59760 // = 58 << 10 + 1 + 367\n     * command_easy: 4, \"|\", 60791 // = 59 << 10 + 1 + 374\n     * command_easy: 4, \"|\", 61816 // = 60 << 10 + 1 + 375\n     * command_easy: 4, \"|\", 62849 // = 61 << 10 + 1 + 384\n     * command_easy: 4, \"|\", 63881 // = 62 << 10 + 1 + 392\n     * command_easy: 4, \"|\", 64919 // = 63 << 10 + 1 + 406\n     * command_easy: 4, \"|\", 65944 // = 64 << 10 + 1 + 407\n     * command_easy: 4, \"|\", 66969 // = 65 << 10 + 1 + 408\n     * command_easy: 4, \"|\", 68001 // = 66 << 10 + 1 + 416\n     * command_easy: 4, \"|\", 69031 // = 67 << 10 + 1 + 422\n     * command_easy: 4, \"|\", 70062 // = 68 << 10 + 1 + 429\n     * command_easy: 4, \"|\", 71092 // = 69 << 10 + 1 + 435\n     * command_easy: 4, \"|\", 72123 // = 70 << 10 + 1 + 442\n     * command_easy: 4, \"|\", 73154 // = 71 << 10 + 1 + 449\n     * command_easy: 4, \"|\", 74185 // = 72 << 10 + 1 + 456\n     * command_easy: 4, \"|\", 75219 // = 73 << 10 + 1 + 466\n     * command_easy: 4, \"|\", 76261 // = 74 << 10 + 1 + 484\n     * command_easy: 4, \"|\", 77291 // = 75 << 10 + 1 + 490\n     * command_easy: 4, \"|\", 78327 // = 76 << 10 + 1 + 502\n     * command_easy: 4, \"|\", 79357 // = 77 << 10 + 1 + 508\n     * command_easy: 4, \"|\", 80388 // = 78 << 10 + 1 + 515\n     * command_easy: 4, \"|\", 81418 // = 79 << 10 + 1 + 521\n     * command_easy: 4, \"|\", 82448 // = 80 << 10 + 1 + 527\n     * command_easy: 4, \"|\", 83482 // = 81 << 10 + 1 + 537\n     * command_easy: 4, \"|\", 84514 // = 82 << 10 + 1 + 545\n     * command_easy: 4, \"|\", 85546 // = 83 << 10 + 1 + 553\n     * command_easy: 4, \"|\", 86577 // = 84 << 10 + 1 + 560\n     * command_easy: 4, \"|\", 87609 // = 85 << 10 + 1 + 568\n     * command_easy: 4, \"|\", 88639 // = 86 << 10 + 1 + 574\n     * command_easy: 4, \"|\", 89670 // = 87 << 10 + 1 + 581\n     * command_easy: 4, \"|\", 90700 // = 88 << 10 + 1 + 587\n     * command_easy: 4, \"|\", 91731 // = 89 << 10 + 1 + 594\n     * command_easy: 4, \"|\", 92762 // = 90 << 10 + 1 + 601\n     * command_easy: 4, \"|\", 93795 // = 91 << 10 + 1 + 610\n     * command_easy: 4, \"|\", 94827 // = 92 << 10 + 1 + 618\n     * command_easy: 4, \"|\", 95860 // = 93 << 10 + 1 + 627\n     * command_easy: 4, \"|\", 96894 // = 94 << 10 + 1 + 637\n     * command_easy: 4, \"|\", 97924 // = 95 << 10 + 1 + 643\n     * command_easy: 4, \"|\", 98957 // = 96 << 10 + 1 + 652\n     * command_easy: 4, \"|\", 99988 // = 97 << 10 + 1 + 659\n     * command_easy: 4, \"|\", 101019 // = 98 << 10 + 1 + 666\n     * command_easy: 4, \"|\", 102051 // = 99 << 10 + 1 + 674\n     * command_easy: 4, \"|\", 103081 // = 100 << 10 + 1 + 680\n     * command_easy: 4, \"|\", 104114 // = 101 << 10 + 1 + 689\n     * command_easy: 4, \"|\", 105144 // = 102 << 10 + 1 + 695\n     * command_easy: 4, \"|\", 106175 // = 103 << 10 + 1 + 702\n     * command_easy: 4, \"|\", 107206 // = 104 << 10 + 1 + 709\n     * command_easy: 4, \"|\", 108237 // = 105 << 10 + 1 + 716\n     * command_easy: 4, \"|\", 109268 // = 106 << 10 + 1 + 723\n     * command_easy: 4, \"|\", 110301 // = 107 << 10 + 1 + 732\n     * command_easy: 4, \"|\", 111332 // = 108 << 10 + 1 + 739\n     * command_easy: 4, \"|\", 112363 // = 109 << 10 + 1 + 746\n     * command_easy: 4, \"|\", 113394 // = 110 << 10 + 1 + 753\n     * command_easy: 4, \"|\", 114426 // = 111 << 10 + 1 + 761\n     * command_easy: 4, \"|\", 115458 // = 112 << 10 + 1 + 769\n     * command_easy: 4, \"|\", 116488 // = 113 << 10 + 1 + 775\n     * command_easy: 4, \"|\", 117518 // = 114 << 10 + 1 + 781\n     * command_easy: 4, \"|\", 118549 // = 115 << 10 + 1 + 788\n     * command_easy: 4, \"|\", 119580 // = 116 << 10 + 1 + 795\n     * command_easy: 4, \"|\", 120611 // = 117 << 10 + 1 + 802\n     * command_easy: 4, \"|\", 121643 // = 118 << 10 + 1 + 810\n     * command_easy: 4, \"|\", 122675 // = 119 << 10 + 1 + 818\n     * command_easy: 4, \"|\", 123707 // = 120 << 10 + 1 + 826\n     */\n      compressed,\n      true,\n      \"|time|time | time |ime|Time |time the | time|s time |time of |Time|time and |me|tim|, time |\"\n      + \"time, | Time |time in |time to |e time |time\\\"|time.|time\\\">|time\\n|t|time]|time for |e|ti\"\n      + \"|time a |time that | Time|time. |.time| time, ||time with |time'|time from |time by ||| th\"\n      + \"e time||time. The |TIME|time on |time as |time is ||timing |time\\n\\t|time:| time. |timeed \"\n      + \"||||time(|Time, ||time at |timely | the time of ||| Time, |Time\\\"|.time(|TIME |Time\\\">|tim\"\n      + \"e=\\\"| time.|.com/time| the time of the |Time'|time. This |time,|.time |Time(|Time.|time no\"\n      + \"t | time=\\\"|timeer | TIME |timeal | TIME|time='|TIME\\\"|Time. | time(|timeful | Time. |time\"\n      + \"ive |timeless |TIME'|timeest | Time.|TIME\\\">| time='|Time,|timeize |TIME.|\\302\\240time| ti\"\n      + \"me,|Time=\\\"|TIME=\\\"|timeous |TIME, |Time='| Time,| TIME=\\\"| TIME, |TIME,|TIME(|TIME. | TIM\"\n      + \"E.|TIME='| TIME. | Time=\\\"| TIME='| Time='\"\n    );\n  }\n\n  @Test\n  public void testBaseDictWord() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0x41, (byte) 0x02\n    };\n    checkSynth(\n    /*\n     * // The stream consists of a base dictionary word.\n     * main_header\n     * metablock_header_easy: 4, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 1\n     */\n      compressed,\n      true,\n      \"time\"\n    );\n  }\n\n  @Test\n  public void testBaseDictWordFinishBlockOnRingbufferWrap() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x1f, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x9b, (byte) 0x58, (byte) 0x32, (byte) 0x34, (byte) 0x34, (byte) 0x34, (byte) 0x34,\n      (byte) 0x34, (byte) 0x34, (byte) 0x34, (byte) 0x34, (byte) 0x34, (byte) 0x34, (byte) 0x34,\n      (byte) 0x34, (byte) 0x34, (byte) 0x34, (byte) 0x34, (byte) 0x34, (byte) 0x34, (byte) 0x34,\n      (byte) 0x34, (byte) 0x34, (byte) 0x34, (byte) 0x34, (byte) 0x34, (byte) 0x34, (byte) 0x34,\n      (byte) 0x34, (byte) 0x34, (byte) 0xd4, (byte) 0x00\n    };\n    checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 32, 1 // 32 = minimal ringbuffer size\n     * command_easy: 4, \"aaaaaaaaaaaaaaaaaaaaaaaaaaaa\", 29\n     */\n      compressed,\n      true,\n      times(28, \"a\")\n      + \"time\"\n    );\n  }\n\n  @Test\n  public void testBaseDictWordTooLong() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0x41, (byte) 0x02\n    };\n    checkSynth(\n    /*\n     * // Has an unmodified dictionary word that goes over the end of the\n     * // meta-block. Same as BaseDictWord, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 1, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 1\n     */\n      compressed,\n      false,\n      \"\"\n    );\n  }\n\n  @Test\n  public void testBlockCountMessage() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x0b, (byte) 0x00, (byte) 0x11, (byte) 0x01, (byte) 0x8c, (byte) 0xc1,\n      (byte) 0xc5, (byte) 0x0d, (byte) 0x08, (byte) 0x00, (byte) 0x22, (byte) 0x65, (byte) 0xe1,\n      (byte) 0xfc, (byte) 0xfd, (byte) 0x22, (byte) 0x2c, (byte) 0xc4, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0xd8, (byte) 0x32, (byte) 0x89, (byte) 0x01, (byte) 0x12, (byte) 0x00,\n      (byte) 0x00, (byte) 0x77, (byte) 0xda, (byte) 0x04, (byte) 0x10, (byte) 0x42, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00\n    };\n    checkSynth(\n    /*\n     * // Same as BlockSwitchMessage but also uses 0-bit block-type commands.\n     * main_header\n     * metablock_header_begin: 1, 0, 12, 0\n     * // two literal block types\n     * vlq_blocktypes: 2\n     * huffman_simple: 1,1,4, 1  // literal blocktype prefix code\n     * huffman_fixed: 26  // literal blockcount prefix code\n     * blockcount_easy: 2  // 2 a's\n     * // one ins/copy and dist block type\n     * vlq_blocktypes: 1\n     * vlq_blocktypes: 1\n     * ndirect: 0, 0\n     * // two MSB6 literal context modes\n     * bits: \"00\", \"00\"\n     * // two literal prefix codes\n     * vlq_blocktypes: 2\n     * // literal context map\n     * vlq_rlemax: 5\n     * huffman_simple: 0,3,7, 5,0,6  // context map RLE Huffman code\n     * // context map RLE: repeat 0 64 times, 1+5 64 times\n     * bits: \"01\", \"0\", \"11111\", \"11\", \"0\", \"11111\"\n     * bit: 1  // MTF enabled\n     * // one distance prefix code\n     * vlq_blocktypes: 1\n     * huffman_simple: 0,1,256, 97  // only a's\n     * huffman_simple: 0,1,256, 98  // only b's\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * // now comes the data\n     * command_inscopy_easy: 12, 0\n     * blockcount_easy: 2  // switch to other block type; 2 b's\n     * blockcount_easy: 5  // switch to other block type; 5 a's\n     * blockcount_easy: 1  // switch to other block type; 1 b\n     * blockcount_easy: 1  // switch to other block type; 1 a\n     * blockcount_easy: 1  // switch to other block type; 1 b\n     */\n      compressed,\n      true,\n      \"aabbaaaaabab\"\n    );\n  }\n\n  @Test\n  public void testBlockSwitchMessage() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x0b, (byte) 0x00, (byte) 0xd1, (byte) 0xe1, (byte) 0x01, (byte) 0xc6,\n      (byte) 0xe0, (byte) 0xe2, (byte) 0x06, (byte) 0x04, (byte) 0x00, (byte) 0x91, (byte) 0xb2,\n      (byte) 0x70, (byte) 0xfe, (byte) 0x7e, (byte) 0x11, (byte) 0x16, (byte) 0x62, (byte) 0x00,\n      (byte) 0x00, (byte) 0x1c, (byte) 0x6c, (byte) 0x99, (byte) 0xc4, (byte) 0x00, (byte) 0x09,\n      (byte) 0x00, (byte) 0x80, (byte) 0x3b, (byte) 0x6d, (byte) 0x02, (byte) 0x08, (byte) 0x82,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00\n    };\n    checkSynth(\n    /*\n     * // Uses blocks with 1-symbol Huffman codes that take 0 bits, so that it\n     * // is the block-switch commands that encode the message rather than actual\n     * // literals.\n     * main_header\n     * metablock_header_begin: 1, 0, 12, 0\n     * // two literal block types\n     * vlq_blocktypes: 2\n     * huffman_simple: 1,4,4, 1,0,2,3  // literal blocktype prefix code\n     * huffman_fixed: 26  // literal blockcount prefix code\n     * blockcount_easy: 2  // 2 a's\n     * // one ins/copy and dist block type\n     * vlq_blocktypes: 1\n     * vlq_blocktypes: 1\n     * ndirect: 0, 0\n     * // two MSB6 literal context modes\n     * bits: \"00\", \"00\"\n     * // two literal prefix codes\n     * vlq_blocktypes: 2\n     * // literal context map\n     * vlq_rlemax: 5\n     * huffman_simple: 0,3,7, 5,0,6  // context map RLE Huffman code\n     * // context map RLE: repeat 0 64 times, 1+5 64 times\n     * bits: \"01\", \"0\", \"11111\", \"11\", \"0\", \"11111\"\n     * bit: 1  // MTF enabled\n     * // one distance prefix code\n     * vlq_blocktypes: 1\n     * huffman_simple: 0,1,256, 97  // only a's\n     * huffman_simple: 0,1,256, 98  // only b's\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * // now comes the data\n     * command_inscopy_easy: 12, 0\n     * bits: \"0\"; blockcount_easy: 2  // switch to other block type; 2 b's\n     * bits: \"0\"; blockcount_easy: 5  // switch to other block type; 5 a's\n     * bits: \"0\"; blockcount_easy: 1  // switch to other block type; 1 b\n     * bits: \"0\"; blockcount_easy: 1  // switch to other block type; 1 a\n     * bits: \"0\"; blockcount_easy: 1  // switch to other block type; 1 b\n     */\n      compressed,\n      true,\n      \"aabbaaaaabab\"\n    );\n  }\n\n  @Test\n  public void testClClTreeDeficiency() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x80,\n      (byte) 0x43, (byte) 0x01, (byte) 0xe0, (byte) 0x05, (byte) 0x88, (byte) 0x55, (byte) 0x90,\n      (byte) 0x01, (byte) 0x00, (byte) 0x38, (byte) 0xd8, (byte) 0x32, (byte) 0x89, (byte) 0x01,\n      (byte) 0x12, (byte) 0x00, (byte) 0x00, (byte) 0x77, (byte) 0xda, (byte) 0x28, (byte) 0x40,\n      (byte) 0x23\n    };\n    checkSynth(\n    /*\n     * // This test is a copy of TooManySymbolsRepeated, with changed clcl table.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,3,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"101\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1\n     * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 0, 0, 101100010\n     */\n      compressed,\n      false,\n      \"aaab\"\n    );\n  }\n\n  @Test\n  public void testClClTreeExcess() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x80,\n      (byte) 0xc3, (byte) 0x7b, (byte) 0x80, (byte) 0x58, (byte) 0x41, (byte) 0x06, (byte) 0x00,\n      (byte) 0xe0, (byte) 0x60, (byte) 0xcb, (byte) 0x24, (byte) 0x06, (byte) 0x48, (byte) 0x00,\n      (byte) 0x00, (byte) 0xdc, (byte) 0x69, (byte) 0xa3, (byte) 0x00, (byte) 0x8d, (byte) 0x00\n    };\n    checkSynth(\n    /*\n     * // This test is a copy of ClClTreeDeficiency, with changed clcl table.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,1,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"1\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1\n     * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 0, 0, 101100010\n     */\n      compressed,\n      false,\n      \"aaab\"\n    );\n  }\n\n  @Test\n  public void testComplexHuffmanCodeTwoSymbols() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x80, (byte) 0x03, (byte) 0xe0,\n      (byte) 0xa2, (byte) 0x1a, (byte) 0x00, (byte) 0x00, (byte) 0x0e, (byte) 0xb6, (byte) 0x4c,\n      (byte) 0x62, (byte) 0x80, (byte) 0x04, (byte) 0x00, (byte) 0xc0, (byte) 0x9d, (byte) 0x36,\n      (byte) 0x12, (byte) 0x04\n    };\n    checkSynth(\n    /*\n     * // This tests a complex Huffman code with only two symbols followed by a\n     * // tiny amount of content.\n     * main_header\n     * metablock_header_begin: 1, 0, 2, 0\n     * metablock_header_trivial_context\n     * // begin of literal Huffman tree. The tree has symbol length 1 for \"a\",\n     * // symbol length 1 for \"b\" and symbol length 0 for all others.\n     * hskip: 0\n     * clcl_ordered: 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n     * set_prefix_cl_rle: \"\", \"0\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"1\"\n     * cl_rle_rep_0: 97\n     * cl_rle: 1  // literal number 97, that is, the letter 'a'\n     * cl_rle: 1  // literal number 98, that is, the letter 'b'\n     * // end of literal Huffman tree\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 2, 0\n     * command_literal_bits: 0, 1  // a followed by b\n     */\n      compressed,\n      true,\n      \"ab\"\n    );\n  }\n\n  @Test\n  public void testCompressedUncompressedShortCompressed() {\n    byte[] compressed = {\n      (byte) 0x8b, (byte) 0xfe, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x9b, (byte) 0x66, (byte) 0x6f, (byte) 0x1b, (byte) 0x0a, (byte) 0x50, (byte) 0x00,\n      (byte) 0x10, (byte) 0x62, (byte) 0x62, (byte) 0x62, (byte) 0x62, (byte) 0x62, (byte) 0x62,\n      (byte) 0x31, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x24, (byte) 0x00\n    };\n    checkSynth(\n    /*\n     * main_header: 22\n     * metablock_header_easy: 1022, 0\n     * command_easy: 1021, \"a\", 1 // 1022 x \"a\"\n     * metablock_uncompressed: \"bbbbbb\"\n     * metablock_header_easy: 4, 1\n     * command_easy: 4, \"\", 1 // 6 + 4 = 10 x \"b\"\n     */\n      compressed,\n      true,\n      times(1022, \"a\")\n      + times(10, \"b\")\n    );\n  }\n\n  @Test\n  public void testCompressedUncompressedShortCompressedSmallWindow() {\n    byte[] compressed = {\n      (byte) 0x21, (byte) 0xf4, (byte) 0x0f, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x1c, (byte) 0xa7, (byte) 0x6d, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0xd8,\n      (byte) 0x32, (byte) 0x89, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x00, (byte) 0x77,\n      (byte) 0xda, (byte) 0x34, (byte) 0x7b, (byte) 0xdb, (byte) 0x50, (byte) 0x80, (byte) 0x02,\n      (byte) 0x80, (byte) 0x62, (byte) 0x62, (byte) 0x62, (byte) 0x62, (byte) 0x62, (byte) 0x62,\n      (byte) 0x31, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x24, (byte) 0x00\n    };\n    checkSynth(\n    /*\n     * main_header: 10\n     * metablock_header_easy: 1022, 0\n     * command_easy: 1021, \"a\", 1 // 1022 x \"a\"\n     * metablock_uncompressed: \"bbbbbb\"\n     * metablock_header_easy: 4, 1\n     * command_easy: 4, \"\", 1 // 6 + 4 = 10 x \"b\"\n     */\n      compressed,\n      true,\n      times(1022, \"a\")\n      + times(10, \"b\")\n    );\n  }\n\n  @Test\n  public void testCopyLengthTooLong() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0x11, (byte) 0x86, (byte) 0x02\n    };\n    checkSynth(\n    /*\n     * // Has a copy length that goes over the end of the meta-block.\n     * // Same as OneCommand, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 2, 1\n     * command_easy: 2, \"a\", 1\n     */\n      compressed,\n      false,\n      \"\"\n    );\n  }\n\n  @Test\n  public void testCopyTooLong() {\n    byte[] compressed = {\n      (byte) 0xa1, (byte) 0x08, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x1c, (byte) 0xa7, (byte) 0x6d, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0xd8,\n      (byte) 0x32, (byte) 0x89, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x00, (byte) 0x77,\n      (byte) 0xda, (byte) 0x34, (byte) 0xab, (byte) 0xdb, (byte) 0x50, (byte) 0x00\n    };\n    checkSynth(\n    /*\n     * // Has a copy length that goes over the end of the meta-block,\n     * // with a ringbuffer wrap.\n     * main_header: 10\n     * metablock_header_easy: 2, 1\n     * command_easy: 1024, \"a\", 1\n     */\n      compressed,\n      false,\n      \"\"\n    );\n  }\n\n  @Test\n  public void testCustomHuffmanCode() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x80,\n      (byte) 0xc3, (byte) 0x3d, (byte) 0x80, (byte) 0x58, (byte) 0x82, (byte) 0x08, (byte) 0x00,\n      (byte) 0xc0, (byte) 0xc1, (byte) 0x96, (byte) 0x49, (byte) 0x0c, (byte) 0x90, (byte) 0x00,\n      (byte) 0x00, (byte) 0xb8, (byte) 0xd3, (byte) 0x46, (byte) 0x01, (byte) 0x1a, (byte) 0x01\n    };\n    checkSynth(\n    /*\n     * // This tests a small hand crafted Huffman code followed by a tiny amount\n     * // of content. This tests if the bit reader detects the end correctly even\n     * // with tiny content after a larger Huffman tree encoding.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * // begin of literal Huffman tree. The tree has symbol length 1 for \"a\",\n     * // symbol length 8 for null, symbol length 9 for all others. The length 1\n     * // for a is chosen on purpose here, the others must be like that to\n     * // fulfill the requirement that sum of 32>>length is 32768.\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,2,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"10\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1  // literal number 97, that is, the letter 'a'\n     * cl_rle_rep: 9, 158\n     * // end of literal Huffman tree\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * // Here is how the code \"101100010\" for b is derived: remember that a has\n     * // symbol length 1, null has symbol length 8, the rest 9. So in the\n     * // canonical Huffman code, the code for \"a\" is \"0\", for null is\n     * // \"10000000\". The next value has \"100000010\" (cfr. the rules of canonical\n     * // prefix code). Counting upwards +95 from there, the value \"@\" (ASCII 96,\n     * // before \"a\") has \"101100001\", and so b, the next 9-bit symbol, has the\n     * // next binary value \"101100010\".\n     * command_literal_bits: 0, 0, 0, 101100010  // 3 a's followed by a b\n     */\n      compressed,\n      true,\n      \"aaab\"\n    );\n  }\n\n  @Test\n  public void testDistanceLut() {\n    byte[] compressed = {\n      (byte) 0x8b, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0x99, (byte) 0x86, (byte) 0x46, (byte) 0xc6, (byte) 0x22, (byte) 0x14,\n      (byte) 0x00, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x1c, (byte) 0xa7,\n      (byte) 0x6d, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0xd8, (byte) 0x32, (byte) 0x89,\n      (byte) 0x01, (byte) 0x12, (byte) 0x21, (byte) 0x91, (byte) 0x69, (byte) 0x62, (byte) 0x6a,\n      (byte) 0x36\n    };\n    checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 6, 0  // implicit ndirect: 0, 0\n     * command_easy: 3, \"abc\", 3  // Insert \"abc\", copy \"abc\"\n     * metablock_header_begin: 0, 0, 6, 0\n     * vlq_blocktypes: 1  // num litetal block types\n     * vlq_blocktypes: 1  // num command block types\n     * vlq_blocktypes: 1  // num distance block types\n     * ndirect: 3, 0\n     * bits: \"00\"  // literal context modes\n     * vlq_blocktypes: 1  // num literal Huffman trees\n     * // command has no context -> num trees == num block types\n     * vlq_blocktypes: 1  // num distance Huffman trees\n     * huffman_fixed: 256\n     * huffman_fixed: 704\n     * huffman_simple: 0,1,67, 18\n     * command_inscopy_easy: 3, 3  // Insert 3, copy 3\n     * command_literals_easy: \"def\"\n     * // 0-bit Huffman code : dcode = 18 -> third direct distance\n     * metablock_lastempty  // make sure that no extra distance bits are read\n     */\n      compressed,\n      true,\n      \"abcabcdefdef\"\n    );\n  }\n\n  @Test\n  public void testEmpty() {\n    byte[] compressed = {\n      (byte) 0x3b\n    };\n    checkSynth(\n    /*\n     * main_header\n     * metablock_lastempty\n     */\n      compressed,\n      true,\n      \"\"\n    );\n  }\n\n  @Test\n  public void testHelloWorld() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x0a, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x9b, (byte) 0x00, (byte) 0x59, (byte) 0x98, (byte) 0xda, (byte) 0xd8, (byte) 0xd8,\n      (byte) 0x13, (byte) 0xb8, (byte) 0xdb, (byte) 0x3b, (byte) 0xd9, (byte) 0x98, (byte) 0x00\n    };\n    checkSynth(\n    /*\n     * main_header\n     * metablock_fixed: \"hello world\", 1\n     */\n      compressed,\n      true,\n      \"hello world\"\n    );\n  }\n\n  @Test\n  public void testInsertTooLong() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0x09, (byte) 0x86, (byte) 0x46\n    };\n    checkSynth(\n    /*\n     * // Has an insert length that goes over the end of the meta-block.\n     * // Same as OneInsert, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 1, 1\n     * command_easy: 0, \"ab\"\n     */\n      compressed,\n      false,\n      \"\"\n    );\n  }\n\n  @Test\n  public void testIntactDistanceRingBuffer0() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x0a, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0xa1, (byte) 0x80, (byte) 0x20, (byte) 0x00\n    };\n    checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 11, 1\n     * command_inscopy_easy: 0, 7 // \"himself\" from dictionary\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // copy \"self\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n      compressed,\n      true,\n      \"himselfself\"\n    );\n  }\n\n  @Test\n  public void testIntactDistanceRingBuffer1() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x09, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0x21, (byte) 0xa0, (byte) 0x20, (byte) 0x00\n    };\n    checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 10, 1\n     * command_inscopy_easy: 0, 6 // \"scroll\" from dictionary\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // copy \"roll\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n      compressed,\n      true,\n      \"scrollroll\"\n    );\n  }\n\n  @Test\n  public void testIntactDistanceRingBuffer2() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x0f, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0x41, (byte) 0x80, (byte) 0x20, (byte) 0x50, (byte) 0x10, (byte) 0x24,\n      (byte) 0x08, (byte) 0x06\n    };\n    checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 16, 1\n     * command_inscopy_easy: 0, 4 // \"left\" from dictionary (index = 3 = 4 - 1)\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 11 - 5)\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 15 - 9)\n     * bits: \"010000\" // distance = 15 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"left\" from dictionary (index = 3 = 16 - 13)\n     * bits: \"110000\" // distance = 16 from RB; RB remains intact\n     */\n      compressed,\n      true,\n      \"leftdatadataleft\"\n    );\n  }\n\n  @Test\n  public void testIntactDistanceRingBufferNoDistanceValue0() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x17, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0x40, (byte) 0x82, (byte) 0x40, (byte) 0x41, (byte) 0x90, (byte) 0x20,\n      (byte) 0x58, (byte) 0x18, (byte) 0x00\n    };\n    checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 24, 1\n     * // cmd is {ins_extra, copy_extra, distance_code, ctx, ins_off, copy_off}\n     * // cmd.2 = {0x00, 0x00, 0, 0x02, 0x0000, 0x0004}\n     * // cmd.2 = no insert, copy length = 4, distance_code = 0 (last distance)\n     * command_short: 2 // \"left\" from dictionary (index = 3 = 4 - 1)\n     * // Check that RB is untouched after the first command...\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 11 - 5)\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 15 - 9)\n     * bits: \"010000\" // distance = 15 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"left\" from dictionary (index = 3 = 16 - 13)\n     * bits: \"110000\" // distance = 16 from RB; RB remains intact\n     * command_inscopy_easy: 0, 8 // copy \"leftleft\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n      compressed,\n      true,\n      \"leftdatadataleftleftleft\"\n    );\n  }\n\n  @Test\n  public void testIntactDistanceRingBufferNoDistanceValue1() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x19, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0xc0, (byte) 0x82, (byte) 0x41, (byte) 0x41, (byte) 0x90, (byte) 0x20,\n      (byte) 0x58, (byte) 0x18, (byte) 0x00\n    };\n    checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 26, 1\n     * // cmd is {ins_extra, copy_extra, distance_code, ctx, ins_off, copy_off}\n     * // cmd.3 = {0x00, 0x00, 0, 0x03, 0x0000, 0x0005}\n     * // cmd.3 = no insert, copy length = 5, distance_code = 0 (last distance)\n     * command_short: 3 // \"world\" from dictionary (index = 3 = 4 - 1)\n     * // Check that RB is untouched after the first command...\n     * command_inscopy_easy: 0, 5 // \"white\" from dictionary (index = 5 = 11 - 6)\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"back\" from dictionary (index = 4 = 15 - 11)\n     * bits: \"010000\" // distance = 15 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"down\" from dictionary (index = 1 = 16 - 15)\n     * bits: \"110000\" // distance = 16 from RB; RB remains intact\n     * command_inscopy_easy: 0, 8 // copy \"downdown\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n      compressed,\n      true,\n      \"worldwhitebackdowndowndown\"\n    );\n  }\n\n  @Test\n  public void testInvalidNoLastMetablock() {\n    byte[] compressed = {\n      (byte) 0x0b, (byte) 0x06, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x9b, (byte) 0x00, (byte) 0x13, (byte) 0x59, (byte) 0x98, (byte) 0xda, (byte) 0xd8,\n      (byte) 0xd8, (byte) 0x13, (byte) 0xb8, (byte) 0xdb, (byte) 0x3b, (byte) 0xd9, (byte) 0x98,\n      (byte) 0xe8, (byte) 0x00\n    };\n    checkSynth(\n    /*\n     * main_header\n     * metablock_fixed: \\\"hello world\\\", 0\n     */\n      compressed,\n      false,\n      \"hello world\"\n    );\n  }\n\n  @Test\n  public void testInvalidNoMetaBlocks() {\n    byte[] compressed = {\n      (byte) 0x0b\n    };\n    checkSynth(\n    /*\n     * main_header\n     */\n      compressed,\n      false,\n      \"\"\n    );\n  }\n\n  @Test\n  public void testInvalidTooFarDist() {\n    byte[] compressed = {\n      (byte) 0xa1, (byte) 0x48, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x1c, (byte) 0xa7, (byte) 0x6d, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0xd8,\n      (byte) 0x32, (byte) 0x89, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x00, (byte) 0x77,\n      (byte) 0xda, (byte) 0xe8, (byte) 0xe0, (byte) 0x62, (byte) 0x6f, (byte) 0x4f, (byte) 0x60,\n      (byte) 0x66, (byte) 0xe8, (byte) 0x44, (byte) 0x38, (byte) 0x0f, (byte) 0x09, (byte) 0x0d\n    };\n    checkSynth(\n    /*\n     * main_header: 10\n     * metablock_header_begin: 1, 0, 10, 0\n     * metablock_header_trivial_context\n     * huffman_fixed: 256\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_easy: 2, \"too far!\", 1000000  // distance too far for 10 wbits\n     */\n      compressed,\n      false,\n      \"\"\n    );\n  }\n\n  @Test\n  public void testInvalidTooLargeContextMap() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x00, (byte) 0x00, (byte) 0xd1, (byte) 0xe1, (byte) 0x01, (byte) 0xc6,\n      (byte) 0xe0, (byte) 0xe2, (byte) 0x06, (byte) 0x00, (byte) 0x00, (byte) 0x91, (byte) 0xb2,\n      (byte) 0x70, (byte) 0xfe, (byte) 0xfb, (byte) 0x45, (byte) 0x58, (byte) 0x88, (byte) 0x01,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x01\n    };\n    checkSynth(\n    /*\n     * // Has a repeat code a context map that makes the size too big -> invalid.\n     * main_header\n     * metablock_header_begin: 1, 0, 1, 0\n     * // two literal block types\n     * vlq_blocktypes: 2\n     * huffman_simple: 1,4,4, 1,0,2,3  // literal blocktype prefix code\n     * huffman_fixed: 26  // literal blockcount prefix code\n     * blockcount_easy: 1\n     * // one ins/copy and dist block type\n     * vlq_blocktypes: 1\n     * vlq_blocktypes: 1\n     * ndirect: 0, 0\n     * // two MSB6 literal context modes\n     * bits: \"00\", \"00\"\n     * // two literal prefix codes\n     * vlq_blocktypes: 2\n     * // literal context map\n     * vlq_rlemax: 5\n     * huffman_simple: 0,3,7, 5,0,6  // context map RLE Huffman code\n     * // Too long context map RLE: repeat 0 64 times, 1+5 65 times, that is 129\n     * // values which is 1 too much.\n     * bits: \"01\", \"0\", \"11111\", \"11\", \"11\", \"0\", \"11111\"\n     * bit: 1  // MTF enabled\n     * // one distance prefix code\n     * vlq_blocktypes: 1\n     * huffman_simple: 0,1,256, 97  // only a's\n     * huffman_simple: 0,1,256, 98  // only b's\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * // now comes the data\n     * command_inscopy_easy: 1, 0\n     */\n      compressed,\n      false,\n      \"a\"\n    );\n  }\n\n  @Test\n  public void testInvalidTransformType() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0x41, (byte) 0x2d, (byte) 0x01, (byte) 0x19\n    };\n    checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 4, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 123905 // = 121 << 10 + 1\n     */\n      compressed,\n      false,\n      \"\"\n    );\n  }\n\n  @Test\n  public void testInvalidWindowBits9() {\n    byte[] compressed = {\n      (byte) 0x91, (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x1c, (byte) 0xa7, (byte) 0x6d, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0xd8,\n      (byte) 0x32, (byte) 0x89, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x00, (byte) 0x77,\n      (byte) 0xda, (byte) 0xc8, (byte) 0x20, (byte) 0x32, (byte) 0xd4, (byte) 0x01\n    };\n    checkSynth(\n    /*\n     * main_header: 9\n     * metablock_fixed: \\\"a\\\", 1\n     */\n      compressed,\n      false,\n      \"a\"\n    );\n  }\n\n  @Test\n  public void testManyTinyMetablocks() {\n    byte[] compressed = {\n      (byte) 0x0b, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb,\n      (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03,\n      (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61,\n      (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04,\n      (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00,\n      (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00,\n      (byte) 0x80, (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70,\n      (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00,\n      (byte) 0xee, (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80,\n      (byte) 0x61, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0,\n      (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee,\n      (byte) 0xb4, (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38,\n      (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x11, (byte) 0x61, (byte) 0x04, (byte) 0x00, (byte) 0x80, (byte) 0x61, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x11,\n      (byte) 0x61, (byte) 0x34\n    };\n    checkSynth(\n    /*\n     * main_header\n     * repeat: 300\n     *   metablock_uncompressed: \"a\"\n     *   metablock_fixed: \"b\"\n     * end_repeat\n     * metablock_lastempty\n     */\n      compressed,\n      true,\n      times(300, \"ab\")\n    );\n  }\n\n  @Test\n  public void testNegativeDistance() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x0f, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0x41, (byte) 0x02, (byte) 0x01, (byte) 0x42, (byte) 0x01, (byte) 0x42,\n      (byte) 0x01, (byte) 0x42, (byte) 0x01, (byte) 0x42, (byte) 0x01, (byte) 0x42, (byte) 0x01,\n      (byte) 0x1c\n    };\n    checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 16, 1\n     * command_inscopy_easy: 0, 4 // time\n     * command_dist_easy: 1\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2 // All rb items are 2 now\n     * command_inscopy_easy: 0, 2\n     * bits: \"011100\" // 15 -> distance = rb[idx + 2] - 3\n     */\n      compressed,\n      false,\n      \"timemememememeXX\"\n    );\n  }\n\n  @Test\n  public void testNegativeRemainingLenBetweenMetablocks() {\n    byte[] compressed = {\n      (byte) 0x0b, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0x09, (byte) 0x86, (byte) 0x46, (byte) 0x11, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00,\n      (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24,\n      (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x91, (byte) 0x60, (byte) 0x68,\n      (byte) 0x04\n    };\n    checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 1, 0\n     * command_easy: 0, \"ab\"  // remaining length == -1 -> invalid stream\n     * metablock_header_easy: 2, 1\n     * command_easy: 0, \"ab\"\n     */\n      compressed,\n      false,\n      \"abab\"\n    );\n  }\n\n  @Test\n  public void testOneCommand() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0x11, (byte) 0x86, (byte) 0x02\n    };\n    checkSynth(\n    /*\n     * // The stream consists of one command with insert and copy.\n     * main_header\n     * metablock_header_easy: 3, 1\n     * command_easy: 2, \"a\", 1\n     */\n      compressed,\n      true,\n      \"aaa\"\n    );\n  }\n\n  @Test\n  public void testOneInsert() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0x09, (byte) 0x86, (byte) 0x46\n    };\n    checkSynth(\n    /*\n     * // The stream consists of one half command with insert only.\n     * main_header\n     * metablock_header_easy: 2, 1\n     * command_easy: 0, \"ab\"\n     */\n      compressed,\n      true,\n      \"ab\"\n    );\n  }\n\n  @Test\n  public void testPeculiarWrap() {\n    byte[] compressed = {\n      (byte) 0x21, (byte) 0xfc, (byte) 0x1f, (byte) 0x00, (byte) 0x00, (byte) 0xa1, (byte) 0x12,\n      (byte) 0x82, (byte) 0x04, (byte) 0x60, (byte) 0x1d, (byte) 0x00, (byte) 0xca, (byte) 0xfe,\n      (byte) 0xba, (byte) 0xbe, (byte) 0xde, (byte) 0xad, (byte) 0xbe, (byte) 0xef, (byte) 0x21,\n      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,\n      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,\n      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x91,\n      (byte) 0x61, (byte) 0x68, (byte) 0x64, (byte) 0x0c\n    };\n    checkSynth(\n    /*\n     * main_header: 10\n     * // See ZeroCostCommand\n     * metablock_header_begin: 0, 0, 2048, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 0,1,256, 42\n     * huffman_simple: 0,1,704, 130\n     * huffman_simple: 0,1,64, 0\n     * // Metadata block; at least 8 bytes long\n     * bits: \"0\", \"11\", \"0\", \"01\", \"00000111\"\n     * byte_boundary\n     * bits: \"11001010\", \"11111110\", \"10111010\", \"10111110\"\n     * bits: \"11011110\", \"10101101\", \"10111110\", \"11101111\"\n     * metablock_header_easy: 3, 1\n     * command_easy: 0, \"abc\", 0\n     */\n      compressed,\n      true,\n      times(512, \"left\")\n      + \"abc\"\n    );\n  }\n\n  @Test\n  public void testSimplePrefix() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0xa0, (byte) 0xc3, (byte) 0xc4,\n      (byte) 0xc6, (byte) 0xc8, (byte) 0x02, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x51, (byte) 0xa0, (byte) 0x1d\n    };\n    checkSynth(\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 1,4,256, 97,98,99,100  // ASCII codes for a, b, c, d\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 10, 110, 111  // a, b, c, d\n     */\n      compressed,\n      true,\n      \"abcd\"\n    );\n  }\n\n  @Test\n  public void testSimplePrefixDuplicateSymbols() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0xa0, (byte) 0xc3, (byte) 0xc4,\n      (byte) 0xc2, (byte) 0xc4, (byte) 0x02, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x51, (byte) 0xa0, (byte) 0x1d\n    };\n    checkSynth(\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 1,4,256, 97,98,97,98  // ASCII codes for a, b, a, b\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 10, 110, 111  // a, b, a, b\n     */\n      compressed,\n      false,\n      \"abab\"\n    );\n  }\n\n  @Test\n  public void testSimplePrefixOutOfRangeSymbols() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x4d, (byte) 0xff, (byte) 0xef, (byte) 0x7f, (byte) 0xff,\n      (byte) 0xfc, (byte) 0x07, (byte) 0x00, (byte) 0xb8, (byte) 0xd3, (byte) 0x06\n    };\n    checkSynth(\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_fixed: 256\n     * huffman_simple: 1,4,704, 1023,1022,1021,1020\n     * huffman_fixed: 64\n     */\n      compressed,\n      false,\n      \"\"\n    );\n  }\n\n  @Test\n  public void testSimplePrefixPlusExtraData() {\n    assumeTrue(false);\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0xa0, (byte) 0xc3, (byte) 0xc4,\n      (byte) 0xc6, (byte) 0xc8, (byte) 0x02, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,\n      (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4,\n      (byte) 0x51, (byte) 0xa0, (byte) 0x1d, (byte) 0x55, (byte) 0xaa\n    };\n    checkSynth(\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 1,4,256, 97,98,99,100  // ASCII codes for a, b, c, d\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 10, 110, 111  // a, b, c, d\n     * byte_boundary\n     * bits: \"01010101\", \"10101010\"\n     */\n      compressed,\n      true,\n      \"abcd\"\n    );\n  }\n\n  @Test\n  public void testStressReadDistanceExtraBits() {\n    byte[] compressed = {\n      (byte) 0x4f, (byte) 0xfe, (byte) 0xff, (byte) 0x3f, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x80, (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07,\n      (byte) 0x5b, (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0,\n      (byte) 0x4e, (byte) 0x9b, (byte) 0xf6, (byte) 0x69, (byte) 0xef, (byte) 0xff, (byte) 0x0c,\n      (byte) 0x8d, (byte) 0x8c, (byte) 0x05, (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e, (byte) 0xdb, (byte) 0x00, (byte) 0x00,\n      (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12, (byte) 0x03, (byte) 0x24, (byte) 0xa8,\n      (byte) 0xaa, (byte) 0xef, (byte) 0xab, (byte) 0xaa, (byte) 0x7f, (byte) 0x24, (byte) 0x16,\n      (byte) 0x35, (byte) 0x8f, (byte) 0xac, (byte) 0x9e, (byte) 0x3d, (byte) 0xf7, (byte) 0xf3,\n      (byte) 0xe3, (byte) 0x0a, (byte) 0xfc, (byte) 0xff, (byte) 0x03, (byte) 0x00, (byte) 0x00,\n      (byte) 0x78, (byte) 0x01, (byte) 0x08, (byte) 0x30, (byte) 0x31, (byte) 0x32, (byte) 0x33,\n      (byte) 0x34, (byte) 0x35, (byte) 0x36, (byte) 0x37, (byte) 0x38, (byte) 0x39, (byte) 0x41,\n      (byte) 0x42, (byte) 0x43, (byte) 0x44, (byte) 0x45, (byte) 0x46, (byte) 0x30, (byte) 0x31,\n      (byte) 0x32, (byte) 0x33, (byte) 0x34, (byte) 0x35, (byte) 0x36, (byte) 0x37, (byte) 0x38,\n      (byte) 0x39, (byte) 0x41, (byte) 0x42, (byte) 0x43, (byte) 0x44, (byte) 0x45, (byte) 0x46,\n      (byte) 0x30, (byte) 0x31, (byte) 0x32, (byte) 0x33, (byte) 0x34, (byte) 0x35, (byte) 0x36,\n      (byte) 0x37, (byte) 0x38, (byte) 0x39, (byte) 0x41, (byte) 0x42, (byte) 0x43, (byte) 0x44,\n      (byte) 0x45, (byte) 0x46, (byte) 0x03\n    };\n    checkSynth(\n    /*\n     * main_header: 24\n     * metablock_header_easy: 8388605, 0  // 2^23 - 3 = shortest 22-bit distance\n     * command_easy: 8388602, \"abc\", 1\n     * metablock_header_begin: 0, 0, 3, 0\n     * vlq_blocktypes: 1  // num litetal block types\n     * vlq_blocktypes: 1  // num command block types\n     * vlq_blocktypes: 1  // num distance block types\n     * ndirect: 0, 0\n     * bits: \"00\"  // literal context modes\n     * vlq_blocktypes: 1  // num literal Huffman trees\n     * // command has no context -> num trees == num block types\n     * vlq_blocktypes: 1  // num distance Huffman trees\n     * huffman_fixed: 256\n     * huffman_fixed: 704\n     * // Begin of distance Huffman tree. First 15 codes have lengths 1 to 15.\n     * // Symbol that corresponds to first half of 22-bit distance range is also\n     * // 15. All other symbols are 0.\n     * hskip: 0\n     * clcl_ordered: 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4, 5,5,5,5\n     * set_prefix_cl_rle: \"0000\", \"0001\", \"0010\", \"0011\", \\\n     *                    \"0100\", \"0101\", \"0110\", \"0111\", \\\n     *                    \"1000\", \"1001\", \"1010\", \"1011\", \\\n     *                    \"1100\", \"1101\", \\\n     *                    \"11100\", \"11101\", \"11110\", \"11111\"\n     * cl_rle: 1\n     * cl_rle: 2\n     * cl_rle: 3\n     * cl_rle: 4\n     * cl_rle: 5\n     * cl_rle: 6\n     * cl_rle: 7\n     * cl_rle: 8\n     * cl_rle: 9\n     * cl_rle: 10\n     * cl_rle: 11\n     * cl_rle: 12\n     * cl_rle: 13\n     * cl_rle: 14\n     * cl_rle: 15\n     * cl_rle_rep_0: 43\n     * cl_rle: 15  // literal number 97, that is, the letter 'a'\n     * // end of literal Huffman tree\n     * command_inscopy_easy: 0, 3  // Insert 0, copy 3\n     * // 15 bits of distance code plus 22 extra bits\n     * command_dist_bits: \"111111111111111\", \"0000000000000000000000\"\n     * metablock_uncompressed: \"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\"\n     * metablock_lastempty\n     */\n      compressed,\n      true,\n      \"abc\"\n      + times(8388602, \"c\")\n      + \"abc\"\n      + times(3, \"0123456789ABCDEF\")\n    );\n  }\n\n  @Test\n  public void testTooManySymbolsRepeated() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x80,\n      (byte) 0xc3, (byte) 0x3d, (byte) 0x80, (byte) 0x58, (byte) 0x82, (byte) 0x0c, (byte) 0x00,\n      (byte) 0xc0, (byte) 0xc1, (byte) 0x96, (byte) 0x49, (byte) 0x0c, (byte) 0x90, (byte) 0x00,\n      (byte) 0x00, (byte) 0xb8, (byte) 0xd3, (byte) 0x46, (byte) 0x01, (byte) 0x1a, (byte) 0x01\n    };\n    checkSynth(\n    /*\n     * // This test is a copy of CustomHuffmanCode, with changed repeat count.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,2,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"10\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1\n     * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 0, 0, 101100010\n     */\n      compressed,\n      false,\n      \"aaab\"\n    );\n  }\n\n  @Test\n  public void testTransformedDictWord() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x08, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0x41, (byte) 0x09, (byte) 0x01, (byte) 0x01\n    };\n    checkSynth(\n    /*\n     * // The stream consists of a transformed dictionary word.\n     * main_header\n     * metablock_header_easy: 9, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 5121  // 5 << 10 + 1\n     */\n      compressed,\n      true,\n      \"time the \"\n    );\n  }\n\n  @Test\n  public void testTransformedDictWordTooLong() {\n    byte[] compressed = {\n      (byte) 0x1b, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,\n      (byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,\n      (byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,\n      (byte) 0x1b, (byte) 0x41, (byte) 0x09, (byte) 0x01, (byte) 0x01\n    };\n    checkSynth(\n    /*\n     * // Has a transformed dictionary word that goes over the end of the\n     * // meta-block, but the base dictionary word fits in the meta-block.\n     * // Same as TransformedDictWord, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 4, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 5121  // 5 << 10 + 1\n     */\n      compressed,\n      false,\n      \"\"\n    );\n  }\n\n  @Test\n  public void testZeroCostCommand() {\n    byte[] compressed = {\n      (byte) 0xa1, (byte) 0xf8, (byte) 0x1f, (byte) 0x00, (byte) 0x00, (byte) 0xa1, (byte) 0x12,\n      (byte) 0x82, (byte) 0x04, (byte) 0x00\n    };\n    checkSynth(\n    /*\n     * main_header: 10\n     * metablock_header_begin: 1, 0, 1024, 0  // last, not empty, length, compressed\n     * metablock_header_trivial_context\n     * huffman_simple: 0,1,256, 42  // literal: any\n     * huffman_simple: 0,1,704, 130  // command: insert = 0, copy = 4, distance_code = -1\n     * huffman_simple: 0,1,64, 0 // distance: last\n     * // 256 0-bit commands with direct distances\n     */\n      compressed,\n      true,\n      times(256, \"left\")\n    );\n  }\n\n  @Test\n  public void testZeroCostLiterals() {\n    byte[] compressed = {\n      (byte) 0x9b, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0x00, (byte) 0x20, (byte) 0x54,\n      (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0xd8, (byte) 0x32, (byte) 0x89, (byte) 0x01,\n      (byte) 0x12, (byte) 0x00, (byte) 0x00, (byte) 0x77, (byte) 0xda, (byte) 0xcc, (byte) 0xe1,\n      (byte) 0x7b, (byte) 0xfa, (byte) 0x0f\n    };\n    checkSynth(\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 16777216, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 0,1,256, 42  // Single symbol alphabet\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 16777216, 0\n     * // 16777216 times 0 bits\n     */\n      compressed,\n      true,\n      times(16777216, \"*\")\n    );\n  }\n\n/* GENERATED CODE END */\n\n}\n"
  },
  {
    "path": "java/org/brotli/dec/TestUtils.java",
    "content": "package org.brotli.dec;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.lang.reflect.Constructor;\n\n/**\n * Common utility methods.\n */\npublic final class TestUtils {\n\n  public static InputStream newBrotliInputStream(InputStream input) throws IOException {\n    String brotliClass = System.getProperty(\"BROTLI_INPUT_STREAM\");\n    if (brotliClass == null) {\n      return new BrotliInputStream(input);\n    }\n    try {\n      Class<?> clazz = Class.forName(brotliClass);\n      Constructor<?> ctor = clazz.getConstructor(InputStream.class);\n      return (InputStream) ctor.newInstance(new Object[] { input });\n    } catch (Exception e) {\n      throw new RuntimeException(e);\n    }\n  }\n\n  static byte[] readUniBytes(String uniBytes) {\n    byte[] result = new byte[uniBytes.length()];\n    for (int i = 0; i < result.length; ++i) {\n      result[i] = (byte) uniBytes.charAt(i);\n    }\n    return result;\n  }\n\nprivate TestUtils() {}\n}\n"
  },
  {
    "path": "java/org/brotli/dec/Transform.java",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\nimport java.nio.ByteBuffer;\n\n/**\n * Transformations on dictionary words.\n *\n * Transform descriptor is a triplet: {prefix, operator, suffix}.\n * \"prefix\" and \"suffix\" are short strings inserted before and after transformed dictionary word.\n * \"operator\" is applied to dictionary word itself.\n *\n * Some operators has \"built-in\" parameters, i.e. parameter is defined by operator ordinal. Other\n * operators have \"external\" parameters, supplied via additional table encoded in shared dictionary.\n *\n * Operators:\n *  - IDENTITY (0): dictionary word is inserted \"as is\"\n *  - OMIT_LAST_N (1 - 9): last N octets of dictionary word are not inserted; N == ordinal\n *  - OMIT_FIRST_M (12-20): first M octets of dictionary word are not inserted; M == ordinal - 11\n *  - UPPERCASE_FIRST (10): first \"scalar\" is XOR'ed with number 32\n *  - UPPERCASE_ALL (11): all \"scalars\" are XOR'ed with number 32\n *  - SHIFT_FIRST (21): first \"scalar\" is shifted by number form parameter table\n *  - SHIFT_ALL (22): all \"scalar\" is shifted by number form parameter table\n *\n * Here \"scalar\" is a variable length character coding similar to UTF-8 encoding.\n * UPPERCASE_XXX / SHIFT_XXX operators were designed to change the case of UTF-8 encoded characters.\n * While UPPERCASE_XXX works well only on ASCII charset, SHIFT is much more generic and could be\n * used for most (all?) alphabets.\n */\nfinal class Transform {\n\n  static final class Transforms {\n    final int numTransforms;\n    final int[] triplets;\n    final byte[] prefixSuffixStorage;\n    final int[] prefixSuffixHeads;\n    final short[] params;\n\n    Transforms(int numTransforms, int prefixSuffixLen, int prefixSuffixCount) {\n      this.numTransforms = numTransforms;\n      this.triplets = new int[numTransforms * 3];\n      this.params = new short[numTransforms];\n      this.prefixSuffixStorage = new byte[prefixSuffixLen];\n      this.prefixSuffixHeads = new int[prefixSuffixCount + 1];\n    }\n  }\n\n  static final int NUM_RFC_TRANSFORMS = 121;\n  static final Transforms RFC_TRANSFORMS = new Transforms(NUM_RFC_TRANSFORMS, 167, 50);\n\n  private static final int OMIT_FIRST_LAST_LIMIT = 9;\n\n  private static final int IDENTITY = 0;\n  private static final int OMIT_LAST_BASE = IDENTITY + 1 - 1;  // there is no OMIT_LAST_0.\n  private static final int UPPERCASE_FIRST = OMIT_LAST_BASE + OMIT_FIRST_LAST_LIMIT + 1;\n  private static final int UPPERCASE_ALL = UPPERCASE_FIRST + 1;\n  private static final int OMIT_FIRST_BASE = UPPERCASE_ALL + 1 - 1;  // there is no OMIT_FIRST_0.\n  private static final int SHIFT_FIRST = OMIT_FIRST_BASE + OMIT_FIRST_LAST_LIMIT + 1;\n  private static final int SHIFT_ALL = SHIFT_FIRST + 1;\n\n  // Bundle of 0-terminated strings.\n  // typo:off\n  private static final String PREFIX_SUFFIX_SRC = \"# #s #, #e #.# the #.com/#\\u00C2\\u00A0# of # and\"\n      + \" # in # to #\\\"#\\\">#\\n#]# for # a # that #. # with #'# from # by #. The # on # as # is #ing\"\n      + \" #\\n\\t#:#ed #(# at #ly #=\\\"# of the #. This #,# not #er #al #='#ful #ive #less #est #ize #\"\n      + \"ous #\";\n  private static final String TRANSFORMS_SRC = \"     !! ! ,  *!  &!  \\\" !  ) *   * -  ! # !  #!*!  \"\n      + \"+  ,$ !  -  %  .  / #   0  1 .  \\\"   2  3!*   4%  ! # /   5  6  7  8 0  1 &   $   9 +   : \"\n      + \" ;  < '  !=  >  ?! 4  @ 4  2  &   A *# (   B  C& ) %  ) !*# *-% A +! *.  D! %'  & E *6  F \"\n      + \" G% ! *A *%  H! D  I!+!  J!+   K +- *4! A  L!*4  M  N +6  O!*% +.! K *G  P +%(  ! G *D +D \"\n      + \" Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K\";\n  // typo:on\n\n  private static void unpackTransforms(byte[] prefixSuffix,\n      int[] prefixSuffixHeads, int[] transforms, String prefixSuffixSrc, String transformsSrc) {\n    final int[] prefixSuffixBytes = Utils.toUtf8Runes(prefixSuffixSrc); \n    final int n = prefixSuffixBytes.length;\n    int index = 1;\n    int j = 0;\n    for (int i = 0; i < n; ++i) {\n      final int c = prefixSuffixBytes[i];\n      if (c == 35) { // == #\n        prefixSuffixHeads[index++] = j;\n      } else {\n        prefixSuffix[j++] = (byte) c;\n      }\n    }\n\n    for (int i = 0; i < NUM_RFC_TRANSFORMS * 3; ++i) {\n      transforms[i] = (int) transformsSrc.charAt(i) - 32;\n    }\n  }\n\n  static {\n    unpackTransforms(RFC_TRANSFORMS.prefixSuffixStorage, RFC_TRANSFORMS.prefixSuffixHeads,\n        RFC_TRANSFORMS.triplets, PREFIX_SUFFIX_SRC, TRANSFORMS_SRC);\n  }\n\n  static int transformDictionaryWord(byte[] dst, int dstOffset, ByteBuffer src, int srcOffset,\n      int wordLen, Transforms transforms, int transformIndex) {\n    int offset = dstOffset;\n    final int[] triplets = transforms.triplets;\n    final byte[] prefixSuffixStorage = transforms.prefixSuffixStorage;\n    final int[] prefixSuffixHeads = transforms.prefixSuffixHeads;\n    final int transformOffset = 3 * transformIndex;\n    final int prefixIdx = triplets[transformOffset];\n    final int transformType = triplets[transformOffset + 1];\n    final int suffixIdx = triplets[transformOffset + 2];\n    int prefix = prefixSuffixHeads[prefixIdx];\n    final int prefixEnd = prefixSuffixHeads[prefixIdx + 1];\n    int suffix = prefixSuffixHeads[suffixIdx];\n    final int suffixEnd = prefixSuffixHeads[suffixIdx + 1];\n\n    int omitFirst = transformType - OMIT_FIRST_BASE;\n    int omitLast = transformType - OMIT_LAST_BASE;\n    if (omitFirst < 1 || omitFirst > OMIT_FIRST_LAST_LIMIT) {\n      omitFirst = 0;\n    }\n    if (omitLast < 1 || omitLast > OMIT_FIRST_LAST_LIMIT) {\n      omitLast = 0;\n    }\n\n    // Copy prefix.\n    while (prefix != prefixEnd) {\n      dst[offset++] = prefixSuffixStorage[prefix++];\n    }\n\n    int len = wordLen;\n    // Copy trimmed word.\n    if (omitFirst > len) {\n      omitFirst = len;\n    }\n    int dictOffset = srcOffset + omitFirst;\n    len -= omitFirst;\n    len -= omitLast;\n    int i = len;\n    while (i > 0) {\n      dst[offset++] = src.get(dictOffset++);\n      i--;\n    }\n\n    // Ferment.\n    if (transformType == UPPERCASE_FIRST || transformType == UPPERCASE_ALL) {\n      int uppercaseOffset = offset - len;\n      if (transformType == UPPERCASE_FIRST) {\n        len = 1;\n      }\n      while (len > 0) {\n        final int c0 = (int) dst[uppercaseOffset] & 0xFF;\n        if (c0 < 0xC0) {\n          if (c0 >= 97 && c0 <= 122) { // in [a..z] range\n            dst[uppercaseOffset] = (byte) ((int) dst[uppercaseOffset] ^ 32);\n          }\n          uppercaseOffset += 1;\n          len -= 1;\n        } else if (c0 < 0xE0) {\n          dst[uppercaseOffset + 1] = (byte) ((int) dst[uppercaseOffset + 1] ^ 32);\n          uppercaseOffset += 2;\n          len -= 2;\n        } else {\n          dst[uppercaseOffset + 2] = (byte) ((int) dst[uppercaseOffset + 2] ^ 5);\n          uppercaseOffset += 3;\n          len -= 3;\n        }\n      }\n    } else if (transformType == SHIFT_FIRST || transformType == SHIFT_ALL) {\n      int shiftOffset = offset - len;\n      final int param = (int) transforms.params[transformIndex];\n      /* Limited sign extension: scalar < (1 << 24). */\n      int scalar = (param & 0x7FFF) + (0x1000000 - (param & 0x8000));\n      while (len > 0) {\n        int step = 1;\n        final int c0 = (int) dst[shiftOffset] & 0xFF;\n        if (c0 < 0x80) {\n          /* 1-byte rune / 0sssssss / 7 bit scalar (ASCII). */\n          scalar += c0;\n          dst[shiftOffset] = (byte) (scalar & 0x7F);\n        } else if (c0 < 0xC0) {\n          /* Continuation / 10AAAAAA. */\n        } else if (c0 < 0xE0) {\n          /* 2-byte rune / 110sssss AAssssss / 11 bit scalar. */\n          if (len >= 2) {\n            final int c1 = (int) dst[shiftOffset + 1];\n            scalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6);\n            dst[shiftOffset] = (byte) (0xC0 | ((scalar >> 6) & 0x1F));\n            dst[shiftOffset + 1] = (byte) ((c1 & 0xC0) | (scalar & 0x3F));\n            step = 2;\n          } else {\n            step = len;\n          }\n        } else if (c0 < 0xF0) {\n          /* 3-byte rune / 1110ssss AAssssss BBssssss / 16 bit scalar. */\n          if (len >= 3) {\n            final int c1 = (int) dst[shiftOffset + 1];\n            final int c2 = (int) dst[shiftOffset + 2];\n            scalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12);\n            dst[shiftOffset] = (byte) (0xE0 | ((scalar >> 12) & 0x0F));\n            dst[shiftOffset + 1] = (byte) ((c1 & 0xC0) | ((scalar >> 6) & 0x3F));\n            dst[shiftOffset + 2] = (byte) ((c2 & 0xC0) | (scalar & 0x3F));\n            step = 3;\n          } else {\n            step = len;\n          }\n        } else if (c0 < 0xF8) {\n          /* 4-byte rune / 11110sss AAssssss BBssssss CCssssss / 21 bit scalar. */\n          if (len >= 4) {\n            final int c1 = (int) dst[shiftOffset + 1];\n            final int c2 = (int) dst[shiftOffset + 2];\n            final int c3 = (int) dst[shiftOffset + 3];\n            scalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18);\n            dst[shiftOffset] = (byte) (0xF0 | ((scalar >> 18) & 0x07));\n            dst[shiftOffset + 1] = (byte) ((c1 & 0xC0) | ((scalar >> 12) & 0x3F));\n            dst[shiftOffset + 2] = (byte) ((c2 & 0xC0) | ((scalar >> 6) & 0x3F));\n            dst[shiftOffset + 3] = (byte) ((c3 & 0xC0) | (scalar & 0x3F));\n            step = 4;\n          } else {\n            step = len;\n          }\n        }\n        shiftOffset += step;\n        len -= step;\n        if (transformType == SHIFT_FIRST) {\n          len = 0;\n        }\n      }\n    }\n\n    // Copy suffix.\n    while (suffix != suffixEnd) {\n      dst[offset++] = prefixSuffixStorage[suffix++];\n    }\n\n    return offset - dstOffset;\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/dec/TransformTest.java",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\nimport static org.junit.Assert.assertArrayEquals;\nimport static org.junit.Assert.assertEquals;\n\nimport java.nio.ByteBuffer;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.JUnit4;\n\n/**\n * Tests for {@link Transform}.\n */\n@RunWith(JUnit4.class)\npublic class TransformTest {\n\n  private static long crc64(byte[] data) {\n    long crc = -1;\n    for (int i = 0; i < data.length; ++i) {\n      long c = (crc ^ (long) (data[i] & 0xFF)) & 0xFF;\n      for (int k = 0; k < 8; k++) {\n        c = (c >>> 1) ^ (-(c & 1L) & -3932672073523589310L);\n      }\n      crc = c ^ (crc >>> 8);\n    }\n    return ~crc;\n  }\n\n  @Test\n  public void testTrimAll() {\n    byte[] output = new byte[0];\n    byte[] input = {119, 111, 114, 100}; // \"word\"\n    Transform.transformDictionaryWord(output, 0,\n        ByteBuffer.wrap(input), 0, input.length, Transform.RFC_TRANSFORMS, 39);\n    byte[] expectedOutput = new byte[0];\n    assertArrayEquals(expectedOutput, output);\n  }\n\n  @Test\n  public void testCapitalize() {\n    byte[] output = new byte[6];\n    byte[] input = {113, -61, -90, -32, -92, -86}; // \"qæप\"\n    Transform.transformDictionaryWord(output, 0,\n        ByteBuffer.wrap(input), 0, input.length, Transform.RFC_TRANSFORMS, 44);\n    byte[] expectedOutput = {81, -61, -122, -32, -92, -81}; // \"QÆय\"\n    assertArrayEquals(expectedOutput, output);\n  }\n\n  @Test\n  public void testAllTransforms() {\n    /* This string allows to apply all transforms: head and tail cutting, capitalization and\n       turning to upper case; all results will be mutually different. */\n    // \"o123456789abcdef\"\n    byte[] testWord = {111, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102};\n    byte[] output = new byte[2259];\n    int offset = 0;\n    for (int i = 0; i < Transform.NUM_RFC_TRANSFORMS; ++i) {\n      offset += Transform.transformDictionaryWord(output, offset,\n          ByteBuffer.wrap(testWord), 0, testWord.length, Transform.RFC_TRANSFORMS, i);\n      output[offset++] = -1;\n    }\n    assertEquals(output.length, offset);\n    assertEquals(8929191060211225186L, crc64(output));\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/dec/Utils.java",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec;\n\nimport static org.brotli.dec.BrotliError.BROTLI_ERROR_READ_FAILED;\nimport static org.brotli.dec.BrotliError.BROTLI_OK;\nimport static org.brotli.dec.BrotliError.BROTLI_PANIC;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.UnsupportedEncodingException;\nimport java.nio.Buffer;\nimport java.nio.ByteBuffer;\n\n/**\n * A set of utility methods.\n */\nfinal class Utils {\n\n  private static final byte[] BYTE_ZEROES = new byte[1024];\n\n  private static final int[] INT_ZEROES = new int[1024];\n\n  /**\n   * Fills byte array with zeroes.\n   *\n   * <p> Current implementation uses {@link System#arraycopy}, so it should be used for length not\n   * less than 16.\n   *\n   * @param dest array to fill with zeroes\n   * @param start the first item to fill\n   * @param end the last item to fill (exclusive)\n   */\n  static void fillBytesWithZeroes(byte[] dest, int start, int end) {\n    int cursor = start;\n    while (cursor < end) {\n      int step = Math.min(cursor + 1024, end) - cursor;\n      System.arraycopy(BYTE_ZEROES, 0, dest, cursor, step);\n      cursor += step;\n    }\n  }\n\n  /**\n   * Fills int array with zeroes.\n   *\n   * <p> Current implementation uses {@link System#arraycopy}, so it should be used for length not\n   * less than 16.\n   *\n   * @param dest array to fill with zeroes\n   * @param start the first item to fill\n   * @param end the last item to fill (exclusive)\n   */\n  static void fillIntsWithZeroes(int[] dest, int start, int end) {\n    int cursor = start;\n    while (cursor < end) {\n      int step = Math.min(cursor + 1024, end) - cursor;\n      System.arraycopy(INT_ZEROES, 0, dest, cursor, step);\n      cursor += step;\n    }\n  }\n\n  static void copyBytes(byte[] dst, int target, byte[] src, int start, int end) {\n    System.arraycopy(src, start, dst, target, end - start);\n  }\n\n  static void copyBytesWithin(byte[] bytes, int target, int start, int end) {\n    System.arraycopy(bytes, start, bytes, target, end - start);\n  }\n\n  static int readInput(State s, byte[] dst, int offset, int length) {\n    try {\n      return s.input.read(dst, offset, length);\n    } catch (IOException e) {\n      return makeError(s, BROTLI_ERROR_READ_FAILED);\n    }\n  }\n\n  static InputStream makeEmptyInput() {\n    return new ByteArrayInputStream(new byte[0]);\n  }\n\n  static void closeInput(State s) throws IOException {\n    s.input.close();\n    s.input = makeEmptyInput();\n  }\n\n  static byte[] toUsAsciiBytes(String src) {\n    try {\n      // NB: String#getBytes(String) is present in JDK 1.1, while other variants require JDK 1.6 and\n      // above.\n      return src.getBytes(\"US-ASCII\");\n    } catch (UnsupportedEncodingException e) {\n      throw new RuntimeException(e); // cannot happen\n    }\n  }\n\n  static int[] toUtf8Runes(String src) {\n    int[] result = new int[src.length()];\n    for (int i = 0; i < src.length(); i++) {\n      result[i] = (int) src.charAt(i);\n    }\n    return result;\n  }\n\n  static ByteBuffer asReadOnlyBuffer(ByteBuffer src) {\n    return src.asReadOnlyBuffer();\n  }\n\n  static int isReadOnly(ByteBuffer src) {\n    return src.isReadOnly() ? 1 : 0;\n  }\n\n  static int isDirect(ByteBuffer src) {\n    return src.isDirect() ? 1 : 0;\n  }\n\n  // Crazy pills factory: code compiled for JDK8 does not work on JRE9.\n  static void flipBuffer(Buffer buffer) {\n    buffer.flip();\n  }\n\n  static int isDebugMode() {\n    boolean assertsEnabled = Boolean.parseBoolean(System.getProperty(\"BROTLI_ENABLE_ASSERTS\"));\n    return assertsEnabled ? 1 : 0;\n  }\n\n  // See BitReader.LOG_BITNESS\n  static int getLogBintness() {\n    boolean isLongExpensive = Boolean.parseBoolean(System.getProperty(\"BROTLI_32_BIT_CPU\"));\n    return isLongExpensive ? 5 : 6;\n  }\n\n  static int shr32(int x, int y) {\n    return x >>> y;\n  }\n\n  static long shr64(long x, int y) {\n    return x >>> y;\n  }\n\n  static int min(int a, int b) {\n    return Math.min(a, b);\n  }\n\n  static int makeError(State s, int code) {\n    if (code >= BROTLI_OK) {\n      return code;\n    }\n    if (s.runningState >= 0) {\n      s.runningState = code;  // Only the first error is remembered.\n    }\n    // TODO(eustas): expand codes to messages, if ever necessary.\n    if (code <= BROTLI_PANIC) {\n      throw new IllegalStateException(\"Brotli error code: \" + code);\n    }\n    throw new BrotliRuntimeException(\"Error code: \" + code);\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/dec/build_defs.bzl",
    "content": "\"\"\"Utilities for Java brotli tests.\"\"\"\n\nload(\"@rules_java//java:java_test.bzl\", \"java_test\")\n\n_TEST_JVM_FLAGS = [\n    \"-DBROTLI_ENABLE_ASSERTS=true\",\n]\n\n_KOTLIN_DECODER_DEPS = [\n    \"//org/brotli/dec/kt:dec\",\n]\n\ndef brotli_java_test(name, main_class = None, jvm_flags = None, test_kotlin = False, runtime_deps = [], **kwargs):\n    \"\"\"test duplication rule that creates 32/64-bit test pair.\n\n    Args:\n       name: target name prefix\n       main_class: override for test_class\n       jvm_flags: base Java VM options\n       test_kotlin: add target for Kotlin BrotliInputStream\n       runtime_deps: runtime target dependencies\n       **kwargs: pass-through\n    \"\"\"\n\n    if jvm_flags == None:\n        jvm_flags = []\n    jvm_flags = jvm_flags + _TEST_JVM_FLAGS\n\n    test_package = native.package_name().replace(\"/\", \".\").replace(\"third_party.brotli.java.\", \"\")\n\n    if main_class == None:\n        test_class = test_package + \".\" + name\n    else:\n        test_class = None\n    java_test(\n        name = name + \"_32\",\n        main_class = main_class,\n        test_class = test_class,\n        jvm_flags = jvm_flags + [\"-DBROTLI_32_BIT_CPU=true\"],\n        visibility = [\"//visibility:private\"],\n        runtime_deps = runtime_deps,\n        **kwargs\n    )\n    java_test(\n        name = name + \"_64\",\n        main_class = main_class,\n        test_class = test_class,\n        jvm_flags = jvm_flags + [\"-DBROTLI_32_BIT_CPU=false\"],\n        visibility = [\"//visibility:private\"],\n        runtime_deps = runtime_deps,\n        **kwargs\n    )\n\n    if test_kotlin:\n        java_test(\n            name = name + \"_kt\",\n            main_class = main_class,\n            test_class = test_class,\n            jvm_flags = jvm_flags + [\"-DBROTLI_INPUT_STREAM=org.brotli.dec.kt.BrotliInputStream\"],\n            visibility = [\"//visibility:private\"],\n            runtime_deps = runtime_deps + _KOTLIN_DECODER_DEPS,\n            **kwargs\n        )\n"
  },
  {
    "path": "java/org/brotli/dec/kt/BUILD.bazel",
    "content": "# Description:\n#   Korlin port of Brotli decoder.\n\nload(\"@rules_kotlin//kotlin:jvm.bzl\", \"kt_jvm_library\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nlicenses([\"notice\"])  # MIT\n\nkt_jvm_library(\n    name = \"dec\",\n    srcs = [\n        \"BrotliInputStream.kt\",\n        \"Decode.kt\",\n    ],\n    visibility = [\"//visibility:public\"],\n)\n"
  },
  {
    "path": "java/org/brotli/dec/kt/BrotliInputStream.kt",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec.kt\n\nimport java.io.IOException\nimport java.io.InputStream\n\n/**\n * [InputStream] decorator that decompresses brotli data.\n *\n * Not thread-safe.\n */\nclass BrotliInputStream\n@JvmOverloads\nconstructor(source: InputStream, byteReadBufferSize: Int = DEFAULT_INTERNAL_BUFFER_SIZE) :\n  InputStream() {\n\n  /** Internal buffer used for efficient byte-by-byte reading. */\n  private val buffer: ByteArray\n\n  /** Number of decoded but still unused bytes in internal buffer. */\n  private var remainingBufferBytes: Int\n\n  /** Next unused byte offset. */\n  private var bufferOffset: Int\n\n  /** Decoder state. */\n  private val state: State = State()\n\n  /**\n   * Creates a [InputStream] wrapper that decompresses brotli data.\n   *\n   * For byte-by-byte reading ([.read]) internal buffer with [.DEFAULT_INTERNAL_BUFFER_SIZE] size is\n   * allocated and used.\n   *\n   * Will block the thread until first [BitReader.CAPACITY] bytes of data of source are available.\n   *\n   * @param source underlying data source\n   * @throws IOException in case of corrupted data or source stream problems\n   */\n  init {\n    require(byteReadBufferSize > 0) { \"Bad buffer size:$byteReadBufferSize\" }\n    buffer = ByteArray(byteReadBufferSize)\n    remainingBufferBytes = 0\n    bufferOffset = 0\n    try {\n      state.input = source\n      initState(state)\n    } catch (ex: BrotliRuntimeException) {\n      throw IOException(\"Brotli decoder initialization failed\", ex)\n    }\n  }\n\n  fun attachDictionaryChunk(data: ByteArray) {\n    attachDictionaryChunk(state, data)\n  }\n\n  fun enableEagerOutput() {\n    enableEagerOutput(state)\n  }\n\n  fun enableLargeWindow() {\n    enableLargeWindow(state)\n  }\n\n  /** {@inheritDoc} */\n  @Throws(IOException::class)\n  override fun close() {\n    close(state)\n    closeInput(state)\n  }\n\n  /** {@inheritDoc} */\n  @Throws(IOException::class)\n  override fun read(): Int {\n    if (bufferOffset >= remainingBufferBytes) {\n      remainingBufferBytes = read(buffer, 0, buffer.size)\n      bufferOffset = 0\n      if (remainingBufferBytes == END_OF_STREAM_MARKER) {\n        // Both Java and C# return the same value for EOF on single-byte read.\n        return -1\n      }\n    }\n    return buffer[bufferOffset++].toInt() and 0xFF\n  }\n\n  /** {@inheritDoc} */\n  @Throws(IOException::class)\n  override fun read(destBuffer: ByteArray, destOffset: Int, destLen: Int): Int {\n    require(destOffset >= 0) { \"Bad offset: $destOffset\" }\n    require(destLen >= 0) { \"Bad length: $destLen\" }\n    require(destOffset + destLen <= destBuffer.size) {\n      \"Buffer overflow: \" + (destOffset + destLen) + \" > \" + destBuffer.size\n    }\n    if (destLen == 0) {\n      return 0\n    }\n    var copyLen = Math.max(remainingBufferBytes - bufferOffset, 0)\n    var offset = destOffset\n    var len = destLen\n    if (copyLen != 0) {\n      copyLen = Math.min(copyLen, len)\n      System.arraycopy(buffer, bufferOffset, destBuffer, offset, copyLen)\n      bufferOffset += copyLen\n      offset += copyLen\n      len -= copyLen\n      if (len == 0) {\n        return copyLen\n      }\n    }\n    return try {\n      state.output = destBuffer\n      state.outputOffset = offset\n      state.outputLength = len\n      state.outputUsed = 0\n      decompress(state)\n      copyLen += state.outputUsed\n      copyLen = if (copyLen > 0) copyLen else END_OF_STREAM_MARKER\n      copyLen\n    } catch (ex: BrotliRuntimeException) {\n      throw IOException(\"Brotli stream decoding failed\", ex)\n    }\n  }\n\n  companion object {\n    const val DEFAULT_INTERNAL_BUFFER_SIZE = 256\n\n    /**\n     * Value expected by InputStream contract when stream is over.\n     *\n     * In Java it is -1. In C# it is 0 (should be patched during transpilation).\n     */\n    private const val END_OF_STREAM_MARKER = -1\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/dec/kt/Decode.kt",
    "content": "/* Copyright 2024 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.dec.kt;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.InputStream;\nimport java.io.IOException;\nimport java.nio.Buffer;\nimport java.nio.ByteBuffer;\n\nclass BrotliRuntimeException : RuntimeException {\n  constructor(message: String) : super(message)\n  constructor(message: String, cause: Throwable) : super(message, cause)\n}\n\n/* GENERATED CODE BEGIN */\ninternal val MAX_HUFFMAN_TABLE_SIZE: IntArray = intArrayOf(256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, 854, 886, 920, 952, 984, 1016, 1048, 1080);\nprivate val CODE_LENGTH_CODE_ORDER: IntArray = intArrayOf(1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15);\nprivate val DISTANCE_SHORT_CODE_INDEX_OFFSET: IntArray = intArrayOf(0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3);\nprivate val DISTANCE_SHORT_CODE_VALUE_OFFSET: IntArray = intArrayOf(0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3);\nprivate val FIXED_TABLE: IntArray = intArrayOf(0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001, 0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005);\ninternal val BLOCK_LENGTH_OFFSET: IntArray = intArrayOf(1, 5, 9, 13, 17, 25, 33, 41, 49, 65, 81, 97, 113, 145, 177, 209, 241, 305, 369, 497, 753, 1265, 2289, 4337, 8433, 16625);\ninternal val BLOCK_LENGTH_N_BITS: IntArray = intArrayOf(2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 24);\ninternal val INSERT_LENGTH_N_BITS: ShortArray = shortArrayOf(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0E, 0x18);\ninternal val COPY_LENGTH_N_BITS: ShortArray = shortArrayOf(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x18);\ninternal val CMD_LOOKUP: ShortArray = ShortArray(size = 2816);\n\nprivate fun log2floor(i: Int): Int {\n  var result: Int = -1;\n  var step: Int = 16;\n  var v: Int = i;\n  while (step > 0) {\n    var next: Int = v shr step;\n    if (next != 0) {\n      result += step;\n      v = next;\n    }\n    step = step shr 1;\n  }\n  return result + v;\n}\n\nprivate fun calculateDistanceAlphabetSize(npostfix: Int, ndirect: Int, maxndistbits: Int): Int {\n  return 16 + ndirect + 2 * (maxndistbits shl npostfix);\n}\n\nprivate fun calculateDistanceAlphabetLimit(s: State, maxDistance: Int, npostfix: Int, ndirect: Int): Int {\n  if (maxDistance < ndirect + (2 shl npostfix)) {\n    return makeError(s, -23);\n  }\n  val offset: Int = ((maxDistance - ndirect) shr npostfix) + 4;\n  val ndistbits: Int = log2floor(offset) - 1;\n  val group: Int = ((ndistbits - 1) shl 1) or ((offset shr ndistbits) and 1);\n  return ((group - 1) shl npostfix) + (1 shl npostfix) + ndirect + 16;\n}\n\nprivate fun unpackCommandLookupTable(cmdLookup: ShortArray): Unit {\n  val insertLengthOffsets: IntArray = IntArray(size = 24);\n  val copyLengthOffsets: IntArray = IntArray(size = 24);\n  copyLengthOffsets[0] = 2;\n  for (i: Int in 0 until 23) {\n    insertLengthOffsets[i + 1] = insertLengthOffsets[i] + (1 shl INSERT_LENGTH_N_BITS[i].toInt());\n    copyLengthOffsets[i + 1] = copyLengthOffsets[i] + (1 shl COPY_LENGTH_N_BITS[i].toInt());\n  }\n  for (cmdCode: Int in 0 until 704) {\n    var rangeIdx: Int = cmdCode shr 6;\n    var distanceContextOffset: Int = -4;\n    if (rangeIdx >= 2) {\n      rangeIdx -= 2;\n      distanceContextOffset = 0;\n    }\n    val insertCode: Int = (((0x29850 shr (rangeIdx * 2)) and 0x3) shl 3) or ((cmdCode shr 3) and 7);\n    val copyCode: Int = (((0x26244 shr (rangeIdx * 2)) and 0x3) shl 3) or (cmdCode and 7);\n    val copyLengthOffset: Int = copyLengthOffsets[copyCode];\n    val distanceContext: Int = distanceContextOffset + Math.min(copyLengthOffset, 5) - 2;\n    val index: Int = cmdCode * 4;\n    cmdLookup[index] = (INSERT_LENGTH_N_BITS[insertCode].toInt() or (COPY_LENGTH_N_BITS[copyCode].toInt() shl 8)).toShort();\n    cmdLookup[index + 1] = insertLengthOffsets[insertCode].toShort();\n    cmdLookup[index + 2] = copyLengthOffsets[copyCode].toShort();\n    cmdLookup[index + 3] = distanceContext.toShort();\n  }\n}\n\nprivate fun decodeWindowBits(s: State): Int {\n  val largeWindowEnabled: Int = s.isLargeWindow;\n  s.isLargeWindow = 0;\n  fillBitWindow(s);\n  if (readFewBits(s, 1) == 0) {\n    return 16;\n  }\n  var n: Int = readFewBits(s, 3);\n  if (n != 0) {\n    return 17 + n;\n  }\n  n = readFewBits(s, 3);\n  if (n != 0) {\n    if (n == 1) {\n      if (largeWindowEnabled == 0) {\n        return -1;\n      }\n      s.isLargeWindow = 1;\n      if (readFewBits(s, 1) == 1) {\n        return -1;\n      }\n      n = readFewBits(s, 6);\n      if (n < 10 || n > 30) {\n        return -1;\n      }\n      return n;\n    }\n    return 8 + n;\n  }\n  return 17;\n}\n\ninternal fun enableEagerOutput(s: State): Int {\n  if (s.runningState != 1) {\n    return makeError(s, -24);\n  }\n  s.isEager = 1;\n  return 0;\n}\n\ninternal fun enableLargeWindow(s: State): Int {\n  if (s.runningState != 1) {\n    return makeError(s, -24);\n  }\n  s.isLargeWindow = 1;\n  return 0;\n}\n\ninternal fun attachDictionaryChunk(s: State, data: ByteArray): Int {\n  if (s.runningState != 1) {\n    return makeError(s, -24);\n  }\n  if (s.cdNumChunks == 0) {\n    s.cdChunks = arrayOfNulls(16);\n    s.cdChunkOffsets = IntArray(size = 16);\n    s.cdBlockBits = -1;\n  }\n  if (s.cdNumChunks == 15) {\n    return makeError(s, -27);\n  }\n  s.cdChunks[s.cdNumChunks] = data;\n  s.cdNumChunks++;\n  s.cdTotalSize += data.size;\n  s.cdChunkOffsets[s.cdNumChunks] = s.cdTotalSize;\n  return 0;\n}\n\ninternal fun initState(s: State): Int {\n  if (s.runningState != 0) {\n    return makeError(s, -26);\n  }\n  s.blockTrees = IntArray(size = 3091);\n  s.blockTrees[0] = 7;\n  s.distRbIdx = 3;\n  var result: Int = calculateDistanceAlphabetLimit(s, 0x7FFFFFFC, 3, 120);\n  if (result < 0) {\n    return result;\n  }\n  val maxDistanceAlphabetLimit: Int = result;\n  s.distExtraBits = ByteArray(size = maxDistanceAlphabetLimit);\n  s.distOffset = IntArray(size = maxDistanceAlphabetLimit);\n  result = initBitReader(s);\n  if (result < 0) {\n    return result;\n  }\n  s.runningState = 1;\n  return 0;\n}\n\ninternal fun close(s: State): Int {\n  if (s.runningState == 0) {\n    return makeError(s, -25);\n  }\n  if (s.runningState > 0) {\n    s.runningState = 11;\n  }\n  return 0;\n}\n\nprivate fun decodeVarLenUnsignedByte(s: State): Int {\n  fillBitWindow(s);\n  if (readFewBits(s, 1) != 0) {\n    val n: Int = readFewBits(s, 3);\n    if (n == 0) {\n      return 1;\n    }\n    return readFewBits(s, n) + (1 shl n);\n  }\n  return 0;\n}\n\nprivate fun decodeMetaBlockLength(s: State): Int {\n  fillBitWindow(s);\n  s.inputEnd = readFewBits(s, 1);\n  s.metaBlockLength = 0;\n  s.isUncompressed = 0;\n  s.isMetadata = 0;\n  if ((s.inputEnd != 0) && readFewBits(s, 1) != 0) {\n    return 0;\n  }\n  val sizeNibbles: Int = readFewBits(s, 2) + 4;\n  if (sizeNibbles == 7) {\n    s.isMetadata = 1;\n    if (readFewBits(s, 1) != 0) {\n      return makeError(s, -6);\n    }\n    val sizeBytes: Int = readFewBits(s, 2);\n    if (sizeBytes == 0) {\n      return 0;\n    }\n    for (i: Int in 0 until sizeBytes) {\n      fillBitWindow(s);\n      val bits: Int = readFewBits(s, 8);\n      if (bits == 0 && i + 1 == sizeBytes && sizeBytes > 1) {\n        return makeError(s, -8);\n      }\n      s.metaBlockLength += bits shl (i * 8);\n    }\n  } else {\n    for (i: Int in 0 until sizeNibbles) {\n      fillBitWindow(s);\n      val bits: Int = readFewBits(s, 4);\n      if (bits == 0 && i + 1 == sizeNibbles && sizeNibbles > 4) {\n        return makeError(s, -8);\n      }\n      s.metaBlockLength += bits shl (i * 4);\n    }\n  }\n  s.metaBlockLength++;\n  if (s.inputEnd == 0) {\n    s.isUncompressed = readFewBits(s, 1);\n  }\n  return 0;\n}\n\nprivate fun readSymbol(tableGroup: IntArray, tableIdx: Int, s: State): Int {\n  var offset: Int = tableGroup[tableIdx];\n  val v: Int = peekBits(s);\n  offset += v and 0xFF;\n  val bits: Int = tableGroup[offset] shr 16;\n  val sym: Int = tableGroup[offset] and 0xFFFF;\n  if (bits <= 8) {\n    s.bitOffset += bits;\n    return sym;\n  }\n  offset += sym;\n  val mask: Int = (1 shl bits) - 1;\n  offset += ((v and mask) ushr 8);\n  s.bitOffset += ((tableGroup[offset] shr 16) + 8);\n  return tableGroup[offset] and 0xFFFF;\n}\n\nprivate fun readBlockLength(tableGroup: IntArray, tableIdx: Int, s: State): Int {\n  fillBitWindow(s);\n  val code: Int = readSymbol(tableGroup, tableIdx, s);\n  val n: Int = BLOCK_LENGTH_N_BITS[code];\n  fillBitWindow(s);\n  return BLOCK_LENGTH_OFFSET[code] + readBits(s, n);\n}\n\nprivate fun moveToFront(v: IntArray, index: Int): Unit {\n  var i: Int = index;\n  val value: Int = v[i];\n  while (i > 0) {\n    v[i] = v[i - 1];\n    i--;\n  }\n  v[0] = value;\n}\n\nprivate fun inverseMoveToFrontTransform(v: ByteArray, vLen: Int): Unit {\n  val mtf: IntArray = IntArray(size = 256);\n  for (i: Int in 0 until 256) {\n    mtf[i] = i;\n  }\n  for (i: Int in 0 until vLen) {\n    val index: Int = v[i].toInt() and 0xFF;\n    v[i] = mtf[index].toByte();\n    if (index != 0) {\n      moveToFront(mtf, index);\n    }\n  }\n}\n\nprivate fun readHuffmanCodeLengths(codeLengthCodeLengths: IntArray, numSymbols: Int, codeLengths: IntArray, s: State): Int {\n  var symbol: Int = 0;\n  var prevCodeLen: Int = 8;\n  var repeat: Int = 0;\n  var repeatCodeLen: Int = 0;\n  var space: Int = 32768;\n  val table: IntArray = IntArray(size = 33);\n  val tableIdx: Int = table.size - 1;\n  buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18);\n  while (symbol < numSymbols && space > 0) {\n    if (s.halfOffset > 1015) {\n      val result: Int = readMoreInput(s);\n      if (result < 0) {\n        return result;\n      }\n    }\n    fillBitWindow(s);\n    val p: Int = peekBits(s) and 31;\n    s.bitOffset += table[p] shr 16;\n    val codeLen: Int = table[p] and 0xFFFF;\n    if (codeLen < 16) {\n      repeat = 0;\n      codeLengths[symbol++] = codeLen;\n      if (codeLen != 0) {\n        prevCodeLen = codeLen;\n        space -= 32768 shr codeLen;\n      }\n    } else {\n      val extraBits: Int = codeLen - 14;\n      var newLen: Int = 0;\n      if (codeLen == 16) {\n        newLen = prevCodeLen;\n      }\n      if (repeatCodeLen != newLen) {\n        repeat = 0;\n        repeatCodeLen = newLen;\n      }\n      val oldRepeat: Int = repeat;\n      if (repeat > 0) {\n        repeat -= 2;\n        repeat = repeat shl extraBits;\n      }\n      fillBitWindow(s);\n      repeat += readFewBits(s, extraBits) + 3;\n      val repeatDelta: Int = repeat - oldRepeat;\n      if (symbol + repeatDelta > numSymbols) {\n        return makeError(s, -2);\n      }\n      for (i: Int in 0 until repeatDelta) {\n        codeLengths[symbol++] = repeatCodeLen;\n      }\n      if (repeatCodeLen != 0) {\n        space -= repeatDelta shl (15 - repeatCodeLen);\n      }\n    }\n  }\n  if (space != 0) {\n    return makeError(s, -18);\n  }\n  fillIntsWithZeroes(codeLengths, symbol, numSymbols);\n  return 0;\n}\n\nprivate fun checkDupes(s: State, symbols: IntArray, length: Int): Int {\n  for (i: Int in 0 until length - 1) {\n    for (j: Int in i + 1 until length) {\n      if (symbols[i] == symbols[j]) {\n        return makeError(s, -7);\n      }\n    }\n  }\n  return 0;\n}\n\nprivate fun readSimpleHuffmanCode(alphabetSizeMax: Int, alphabetSizeLimit: Int, tableGroup: IntArray, tableIdx: Int, s: State): Int {\n  val codeLengths: IntArray = IntArray(size = alphabetSizeLimit);\n  val symbols: IntArray = IntArray(size = 4);\n  val maxBits: Int = 1 + log2floor(alphabetSizeMax - 1);\n  val numSymbols: Int = readFewBits(s, 2) + 1;\n  for (i: Int in 0 until numSymbols) {\n    fillBitWindow(s);\n    val symbol: Int = readFewBits(s, maxBits);\n    if (symbol >= alphabetSizeLimit) {\n      return makeError(s, -15);\n    }\n    symbols[i] = symbol;\n  }\n  val result: Int = checkDupes(s, symbols, numSymbols);\n  if (result < 0) {\n    return result;\n  }\n  var histogramId: Int = numSymbols;\n  if (numSymbols == 4) {\n    histogramId += readFewBits(s, 1);\n  }\n  when (histogramId) {\n    1 ->\n      codeLengths[symbols[0]] = 1;\n    2 -> {\n      codeLengths[symbols[0]] = 1;\n      codeLengths[symbols[1]] = 1;\n    }\n    3 -> {\n      codeLengths[symbols[0]] = 1;\n      codeLengths[symbols[1]] = 2;\n      codeLengths[symbols[2]] = 2;\n    }\n    4 -> {\n      codeLengths[symbols[0]] = 2;\n      codeLengths[symbols[1]] = 2;\n      codeLengths[symbols[2]] = 2;\n      codeLengths[symbols[3]] = 2;\n    }\n    5 -> {\n      codeLengths[symbols[0]] = 1;\n      codeLengths[symbols[1]] = 2;\n      codeLengths[symbols[2]] = 3;\n      codeLengths[symbols[3]] = 3;\n    }\n  }\n  return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n}\n\nprivate fun readComplexHuffmanCode(alphabetSizeLimit: Int, skip: Int, tableGroup: IntArray, tableIdx: Int, s: State): Int {\n  val codeLengths: IntArray = IntArray(size = alphabetSizeLimit);\n  val codeLengthCodeLengths: IntArray = IntArray(size = 18);\n  var space: Int = 32;\n  var numCodes: Int = 0;\n  for (i: Int in skip until 18) {\n    val codeLenIdx: Int = CODE_LENGTH_CODE_ORDER[i];\n    fillBitWindow(s);\n    val p: Int = peekBits(s) and 15;\n    s.bitOffset += FIXED_TABLE[p] shr 16;\n    val v: Int = FIXED_TABLE[p] and 0xFFFF;\n    codeLengthCodeLengths[codeLenIdx] = v;\n    if (v != 0) {\n      space -= (32 shr v);\n      numCodes++;\n      if (space <= 0) {\n        break;\n      }\n    }\n  }\n  if (space != 0 && numCodes != 1) {\n    return makeError(s, -4);\n  }\n  val result: Int = readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s);\n  if (result < 0) {\n    return result;\n  }\n  return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n}\n\nprivate fun readHuffmanCode(alphabetSizeMax: Int, alphabetSizeLimit: Int, tableGroup: IntArray, tableIdx: Int, s: State): Int {\n  if (s.halfOffset > 1015) {\n    val result: Int = readMoreInput(s);\n    if (result < 0) {\n      return result;\n    }\n  }\n  fillBitWindow(s);\n  val simpleCodeOrSkip: Int = readFewBits(s, 2);\n  if (simpleCodeOrSkip == 1) {\n    return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s);\n  }\n  return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s);\n}\n\nprivate fun decodeContextMap(contextMapSize: Int, contextMap: ByteArray, s: State): Int {\n  var result: Int;\n  if (s.halfOffset > 1015) {\n    result = readMoreInput(s);\n    if (result < 0) {\n      return result;\n    }\n  }\n  val numTrees: Int = decodeVarLenUnsignedByte(s) + 1;\n  if (numTrees == 1) {\n    fillBytesWithZeroes(contextMap, 0, contextMapSize);\n    return numTrees;\n  }\n  fillBitWindow(s);\n  val useRleForZeros: Int = readFewBits(s, 1);\n  var maxRunLengthPrefix: Int = 0;\n  if (useRleForZeros != 0) {\n    maxRunLengthPrefix = readFewBits(s, 4) + 1;\n  }\n  val alphabetSize: Int = numTrees + maxRunLengthPrefix;\n  val tableSize: Int = MAX_HUFFMAN_TABLE_SIZE[(alphabetSize + 31) shr 5];\n  val table: IntArray = IntArray(size = tableSize + 1);\n  val tableIdx: Int = table.size - 1;\n  result = readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s);\n  if (result < 0) {\n    return result;\n  }\n  var i: Int = 0;\n  while (i < contextMapSize) {\n    if (s.halfOffset > 1015) {\n      result = readMoreInput(s);\n      if (result < 0) {\n        return result;\n      }\n    }\n    fillBitWindow(s);\n    val code: Int = readSymbol(table, tableIdx, s);\n    if (code == 0) {\n      contextMap[i] = 0;\n      i++;\n    } else if (code <= maxRunLengthPrefix) {\n      fillBitWindow(s);\n      var reps: Int = (1 shl code) + readFewBits(s, code);\n      while (reps != 0) {\n        if (i >= contextMapSize) {\n          return makeError(s, -3);\n        }\n        contextMap[i] = 0;\n        i++;\n        reps--;\n      }\n    } else {\n      contextMap[i] = (code - maxRunLengthPrefix).toByte();\n      i++;\n    }\n  }\n  fillBitWindow(s);\n  if (readFewBits(s, 1) == 1) {\n    inverseMoveToFrontTransform(contextMap, contextMapSize);\n  }\n  return numTrees;\n}\n\nprivate fun decodeBlockTypeAndLength(s: State, treeType: Int, numBlockTypes: Int): Int {\n  val ringBuffers: IntArray = s.rings;\n  val offset: Int = 4 + treeType * 2;\n  fillBitWindow(s);\n  var blockType: Int = readSymbol(s.blockTrees, 2 * treeType, s);\n  val result: Int = readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n  if (blockType == 1) {\n    blockType = ringBuffers[offset + 1] + 1;\n  } else if (blockType == 0) {\n    blockType = ringBuffers[offset];\n  } else {\n    blockType -= 2;\n  }\n  if (blockType >= numBlockTypes) {\n    blockType -= numBlockTypes;\n  }\n  ringBuffers[offset] = ringBuffers[offset + 1];\n  ringBuffers[offset + 1] = blockType;\n  return result;\n}\n\nprivate fun decodeLiteralBlockSwitch(s: State): Unit {\n  s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes);\n  val literalBlockType: Int = s.rings[5];\n  s.contextMapSlice = literalBlockType shl 6;\n  s.literalTreeIdx = s.contextMap[s.contextMapSlice].toInt() and 0xFF;\n  val contextMode: Int = s.contextModes[literalBlockType].toInt();\n  s.contextLookupOffset1 = contextMode shl 9;\n  s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n}\n\nprivate fun decodeCommandBlockSwitch(s: State): Unit {\n  s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes);\n  s.commandTreeIdx = s.rings[7];\n}\n\nprivate fun decodeDistanceBlockSwitch(s: State): Unit {\n  s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes);\n  s.distContextMapSlice = s.rings[9] shl 2;\n}\n\nprivate fun maybeReallocateRingBuffer(s: State): Unit {\n  var newSize: Int = s.maxRingBufferSize;\n  if (newSize > s.expectedTotalSize) {\n    val minimalNewSize: Int = s.expectedTotalSize;\n    while ((newSize shr 1) > minimalNewSize) {\n      newSize = newSize shr 1;\n    }\n    if ((s.inputEnd == 0) && newSize < 16384 && s.maxRingBufferSize >= 16384) {\n      newSize = 16384;\n    }\n  }\n  if (newSize <= s.ringBufferSize) {\n    return;\n  }\n  val ringBufferSizeWithSlack: Int = newSize + 37;\n  val newBuffer: ByteArray = ByteArray(size = ringBufferSizeWithSlack);\n  val oldBuffer: ByteArray = s.ringBuffer;\n  if (oldBuffer.size != 0) {\n    System.arraycopy(oldBuffer, 0, newBuffer, 0, s.ringBufferSize);\n  }\n  s.ringBuffer = newBuffer;\n  s.ringBufferSize = newSize;\n}\n\nprivate fun readNextMetablockHeader(s: State): Int {\n  if (s.inputEnd != 0) {\n    s.nextRunningState = 10;\n    s.runningState = 12;\n    return 0;\n  }\n  s.literalTreeGroup = IntArray(size = 0);\n  s.commandTreeGroup = IntArray(size = 0);\n  s.distanceTreeGroup = IntArray(size = 0);\n  var result: Int;\n  if (s.halfOffset > 1015) {\n    result = readMoreInput(s);\n    if (result < 0) {\n      return result;\n    }\n  }\n  result = decodeMetaBlockLength(s);\n  if (result < 0) {\n    return result;\n  }\n  if ((s.metaBlockLength == 0) && (s.isMetadata == 0)) {\n    return 0;\n  }\n  if ((s.isUncompressed != 0) || (s.isMetadata != 0)) {\n    result = jumpToByteBoundary(s);\n    if (result < 0) {\n      return result;\n    }\n    if (s.isMetadata == 0) {\n      s.runningState = 6;\n    } else {\n      s.runningState = 5;\n    }\n  } else {\n    s.runningState = 3;\n  }\n  if (s.isMetadata != 0) {\n    return 0;\n  }\n  s.expectedTotalSize += s.metaBlockLength;\n  if (s.expectedTotalSize > 1 shl 30) {\n    s.expectedTotalSize = 1 shl 30;\n  }\n  if (s.ringBufferSize < s.maxRingBufferSize) {\n    maybeReallocateRingBuffer(s);\n  }\n  return 0;\n}\n\nprivate fun readMetablockPartition(s: State, treeType: Int, numBlockTypes: Int): Int {\n  var offset: Int = s.blockTrees[2 * treeType];\n  if (numBlockTypes <= 1) {\n    s.blockTrees[2 * treeType + 1] = offset;\n    s.blockTrees[2 * treeType + 2] = offset;\n    return 1 shl 28;\n  }\n  val blockTypeAlphabetSize: Int = numBlockTypes + 2;\n  var result: Int = readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s);\n  if (result < 0) {\n    return result;\n  }\n  offset += result;\n  s.blockTrees[2 * treeType + 1] = offset;\n  val blockLengthAlphabetSize: Int = 26;\n  result = readHuffmanCode(blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2 * treeType + 1, s);\n  if (result < 0) {\n    return result;\n  }\n  offset += result;\n  s.blockTrees[2 * treeType + 2] = offset;\n  return readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n}\n\nprivate fun calculateDistanceLut(s: State, alphabetSizeLimit: Int): Unit {\n  val distExtraBits: ByteArray = s.distExtraBits;\n  val distOffset: IntArray = s.distOffset;\n  val npostfix: Int = s.distancePostfixBits;\n  val ndirect: Int = s.numDirectDistanceCodes;\n  val postfix: Int = 1 shl npostfix;\n  var bits: Int = 1;\n  var half: Int = 0;\n  var i: Int = 16;\n  for (j: Int in 0 until ndirect) {\n    distExtraBits[i] = 0;\n    distOffset[i] = j + 1;\n    ++i;\n  }\n  while (i < alphabetSizeLimit) {\n    val base: Int = ndirect + ((((2 + half) shl bits) - 4) shl npostfix) + 1;\n    for (j: Int in 0 until postfix) {\n      distExtraBits[i] = bits.toByte();\n      distOffset[i] = base + j;\n      ++i;\n    }\n    bits = bits + half;\n    half = half xor 1;\n  }\n}\n\nprivate fun readMetablockHuffmanCodesAndContextMaps(s: State): Int {\n  s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n  var result: Int = readMetablockPartition(s, 0, s.numLiteralBlockTypes);\n  if (result < 0) {\n    return result;\n  }\n  s.literalBlockLength = result;\n  s.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n  result = readMetablockPartition(s, 1, s.numCommandBlockTypes);\n  if (result < 0) {\n    return result;\n  }\n  s.commandBlockLength = result;\n  s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n  result = readMetablockPartition(s, 2, s.numDistanceBlockTypes);\n  if (result < 0) {\n    return result;\n  }\n  s.distanceBlockLength = result;\n  if (s.halfOffset > 1015) {\n    result = readMoreInput(s);\n    if (result < 0) {\n      return result;\n    }\n  }\n  fillBitWindow(s);\n  s.distancePostfixBits = readFewBits(s, 2);\n  s.numDirectDistanceCodes = readFewBits(s, 4) shl s.distancePostfixBits;\n  s.contextModes = ByteArray(size = s.numLiteralBlockTypes);\n  var i: Int = 0;\n  while (i < s.numLiteralBlockTypes) {\n    val limit: Int = Math.min(i + 96, s.numLiteralBlockTypes);\n    while (i < limit) {\n      fillBitWindow(s);\n      s.contextModes[i] = readFewBits(s, 2).toByte();\n      i++;\n    }\n    if (s.halfOffset > 1015) {\n      result = readMoreInput(s);\n      if (result < 0) {\n        return result;\n      }\n    }\n  }\n  val contextMapLength: Int = s.numLiteralBlockTypes shl 6;\n  s.contextMap = ByteArray(size = contextMapLength);\n  result = decodeContextMap(contextMapLength, s.contextMap, s);\n  if (result < 0) {\n    return result;\n  }\n  val numLiteralTrees: Int = result;\n  s.trivialLiteralContext = 1;\n  for (j: Int in 0 until contextMapLength) {\n    if (s.contextMap[j].toInt() != j shr 6) {\n      s.trivialLiteralContext = 0;\n      break;\n    }\n  }\n  s.distContextMap = ByteArray(size = s.numDistanceBlockTypes shl 2);\n  result = decodeContextMap(s.numDistanceBlockTypes shl 2, s.distContextMap, s);\n  if (result < 0) {\n    return result;\n  }\n  val numDistTrees: Int = result;\n  s.literalTreeGroup = IntArray(size = huffmanTreeGroupAllocSize(256, numLiteralTrees));\n  result = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s, s.literalTreeGroup);\n  if (result < 0) {\n    return result;\n  }\n  s.commandTreeGroup = IntArray(size = huffmanTreeGroupAllocSize(704, s.numCommandBlockTypes));\n  result = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s, s.commandTreeGroup);\n  if (result < 0) {\n    return result;\n  }\n  var distanceAlphabetSizeMax: Int = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24);\n  var distanceAlphabetSizeLimit: Int = distanceAlphabetSizeMax;\n  if (s.isLargeWindow == 1) {\n    distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62);\n    result = calculateDistanceAlphabetLimit(s, 0x7FFFFFFC, s.distancePostfixBits, s.numDirectDistanceCodes);\n    if (result < 0) {\n      return result;\n    }\n    distanceAlphabetSizeLimit = result;\n  }\n  s.distanceTreeGroup = IntArray(size = huffmanTreeGroupAllocSize(distanceAlphabetSizeLimit, numDistTrees));\n  result = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s, s.distanceTreeGroup);\n  if (result < 0) {\n    return result;\n  }\n  calculateDistanceLut(s, distanceAlphabetSizeLimit);\n  s.contextMapSlice = 0;\n  s.distContextMapSlice = 0;\n  s.contextLookupOffset1 = s.contextModes[0].toInt() * 512;\n  s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n  s.literalTreeIdx = 0;\n  s.commandTreeIdx = 0;\n  s.rings[4] = 1;\n  s.rings[5] = 0;\n  s.rings[6] = 1;\n  s.rings[7] = 0;\n  s.rings[8] = 1;\n  s.rings[9] = 0;\n  return 0;\n}\n\nprivate fun copyUncompressedData(s: State): Int {\n  val ringBuffer: ByteArray = s.ringBuffer;\n  var result: Int;\n  if (s.metaBlockLength <= 0) {\n    result = reload(s);\n    if (result < 0) {\n      return result;\n    }\n    s.runningState = 2;\n    return 0;\n  }\n  val chunkLength: Int = Math.min(s.ringBufferSize - s.pos, s.metaBlockLength);\n  result = copyRawBytes(s, ringBuffer, s.pos, chunkLength);\n  if (result < 0) {\n    return result;\n  }\n  s.metaBlockLength -= chunkLength;\n  s.pos += chunkLength;\n  if (s.pos == s.ringBufferSize) {\n    s.nextRunningState = 6;\n    s.runningState = 12;\n    return 0;\n  }\n  result = reload(s);\n  if (result < 0) {\n    return result;\n  }\n  s.runningState = 2;\n  return 0;\n}\n\nprivate fun writeRingBuffer(s: State): Int {\n  val toWrite: Int = Math.min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten);\n  if (toWrite != 0) {\n    System.arraycopy(s.ringBuffer, s.ringBufferBytesWritten, s.output, s.outputOffset + s.outputUsed, (s.ringBufferBytesWritten + toWrite) - s.ringBufferBytesWritten);\n    s.outputUsed += toWrite;\n    s.ringBufferBytesWritten += toWrite;\n  }\n  if (s.outputUsed < s.outputLength) {\n    return 0;\n  }\n  return 2;\n}\n\nprivate fun huffmanTreeGroupAllocSize(alphabetSizeLimit: Int, n: Int): Int {\n  val maxTableSize: Int = MAX_HUFFMAN_TABLE_SIZE[(alphabetSizeLimit + 31) shr 5];\n  return n + n * maxTableSize;\n}\n\nprivate fun decodeHuffmanTreeGroup(alphabetSizeMax: Int, alphabetSizeLimit: Int, n: Int, s: State, group: IntArray): Int {\n  var next: Int = n;\n  for (i: Int in 0 until n) {\n    group[i] = next;\n    val result: Int = readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s);\n    if (result < 0) {\n      return result;\n    }\n    next += result;\n  }\n  return 0;\n}\n\nprivate fun calculateFence(s: State): Int {\n  var result: Int = s.ringBufferSize;\n  if (s.isEager != 0) {\n    result = Math.min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed);\n  }\n  return result;\n}\n\nprivate fun doUseDictionary(s: State, fence: Int): Int {\n  if (s.distance > 0x7FFFFFFC) {\n    return makeError(s, -9);\n  }\n  val address: Int = s.distance - s.maxDistance - 1 - s.cdTotalSize;\n  if (address < 0) {\n    val result: Int = initializeCompoundDictionaryCopy(s, -address - 1, s.copyLength);\n    if (result < 0) {\n      return result;\n    }\n    s.runningState = 14;\n  } else {\n    val dictionaryData: ByteBuffer = data;\n    val wordLength: Int = s.copyLength;\n    if (wordLength > 31) {\n      return makeError(s, -9);\n    }\n    val shift: Int = sizeBits[wordLength];\n    if (shift == 0) {\n      return makeError(s, -9);\n    }\n    var offset: Int = offsets[wordLength];\n    val mask: Int = (1 shl shift) - 1;\n    val wordIdx: Int = address and mask;\n    val transformIdx: Int = address shr shift;\n    offset += wordIdx * wordLength;\n    val transforms: Transforms = RFC_TRANSFORMS;\n    if (transformIdx >= transforms.numTransforms) {\n      return makeError(s, -9);\n    }\n    val len: Int = transformDictionaryWord(s.ringBuffer, s.pos, dictionaryData, offset, wordLength, transforms, transformIdx);\n    s.pos += len;\n    s.metaBlockLength -= len;\n    if (s.pos >= fence) {\n      s.nextRunningState = 4;\n      s.runningState = 12;\n      return 0;\n    }\n    s.runningState = 4;\n  }\n  return 0;\n}\n\nprivate fun initializeCompoundDictionary(s: State): Unit {\n  s.cdBlockMap = ByteArray(size = 256);\n  var blockBits: Int = 8;\n  while (((s.cdTotalSize - 1) shr blockBits) != 0) {\n    blockBits++;\n  }\n  blockBits -= 8;\n  s.cdBlockBits = blockBits;\n  var cursor: Int = 0;\n  var index: Int = 0;\n  while (cursor < s.cdTotalSize) {\n    while (s.cdChunkOffsets[index + 1] < cursor) {\n      index++;\n    }\n    s.cdBlockMap[cursor shr blockBits] = index.toByte();\n    cursor += 1 shl blockBits;\n  }\n}\n\nprivate fun initializeCompoundDictionaryCopy(s: State, address: Int, length: Int): Int {\n  if (s.cdBlockBits == -1) {\n    initializeCompoundDictionary(s);\n  }\n  var index: Int = s.cdBlockMap[address shr s.cdBlockBits].toInt();\n  while (address >= s.cdChunkOffsets[index + 1]) {\n    index++;\n  }\n  if (s.cdTotalSize > address + length) {\n    return makeError(s, -9);\n  }\n  s.distRbIdx = (s.distRbIdx + 1) and 0x3;\n  s.rings[s.distRbIdx] = s.distance;\n  s.metaBlockLength -= length;\n  s.cdBrIndex = index;\n  s.cdBrOffset = address - s.cdChunkOffsets[index];\n  s.cdBrLength = length;\n  s.cdBrCopied = 0;\n  return 0;\n}\n\nprivate fun copyFromCompoundDictionary(s: State, fence: Int): Int {\n  var pos: Int = s.pos;\n  val origPos: Int = pos;\n  while (s.cdBrLength != s.cdBrCopied) {\n    val space: Int = fence - pos;\n    val chunkLength: Int = s.cdChunkOffsets[s.cdBrIndex + 1] - s.cdChunkOffsets[s.cdBrIndex];\n    val remChunkLength: Int = chunkLength - s.cdBrOffset;\n    var length: Int = s.cdBrLength - s.cdBrCopied;\n    if (length > remChunkLength) {\n      length = remChunkLength;\n    }\n    if (length > space) {\n      length = space;\n    }\n    System.arraycopy(s.cdChunks[s.cdBrIndex], s.cdBrOffset, s.ringBuffer, pos, (s.cdBrOffset + length) - s.cdBrOffset);\n    pos += length;\n    s.cdBrOffset += length;\n    s.cdBrCopied += length;\n    if (length == remChunkLength) {\n      s.cdBrIndex++;\n      s.cdBrOffset = 0;\n    }\n    if (pos >= fence) {\n      break;\n    }\n  }\n  return pos - origPos;\n}\n\ninternal fun decompress(s: State): Int {\n  var result: Int;\n  if (s.runningState == 0) {\n    return makeError(s, -25);\n  }\n  if (s.runningState < 0) {\n    return makeError(s, -28);\n  }\n  if (s.runningState == 11) {\n    return makeError(s, -22);\n  }\n  if (s.runningState == 1) {\n    val windowBits: Int = decodeWindowBits(s);\n    if (windowBits == -1) {\n      return makeError(s, -11);\n    }\n    s.maxRingBufferSize = 1 shl windowBits;\n    s.maxBackwardDistance = s.maxRingBufferSize - 16;\n    s.runningState = 2;\n  }\n  var fence: Int = calculateFence(s);\n  var ringBufferMask: Int = s.ringBufferSize - 1;\n  var ringBuffer: ByteArray = s.ringBuffer;\n  while (s.runningState != 10) {\n    when (s.runningState) {\n      2 -> {\n        if (s.metaBlockLength < 0) {\n          return makeError(s, -10);\n        }\n        result = readNextMetablockHeader(s);\n        if (result < 0) {\n          return result;\n        }\n        fence = calculateFence(s);\n        ringBufferMask = s.ringBufferSize - 1;\n        ringBuffer = s.ringBuffer;\n        continue;\n      }\n      3 -> {\n        result = readMetablockHuffmanCodesAndContextMaps(s);\n        if (result < 0) {\n          return result;\n        }\n        s.runningState = 4;\n        continue;\n      }\n      4 -> {\n        if (s.metaBlockLength <= 0) {\n          s.runningState = 2;\n          continue;\n        }\n        if (s.halfOffset > 1015) {\n          result = readMoreInput(s);\n          if (result < 0) {\n            return result;\n          }\n        }\n        if (s.commandBlockLength == 0) {\n          decodeCommandBlockSwitch(s);\n        }\n        s.commandBlockLength--;\n        fillBitWindow(s);\n        val cmdCode: Int = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) shl 2;\n        val insertAndCopyExtraBits: Int = CMD_LOOKUP[cmdCode].toInt();\n        val insertLengthOffset: Int = CMD_LOOKUP[cmdCode + 1].toInt();\n        val copyLengthOffset: Int = CMD_LOOKUP[cmdCode + 2].toInt();\n        s.distanceCode = CMD_LOOKUP[cmdCode + 3].toInt();\n        fillBitWindow(s);\n        val insertLengthExtraBits: Int = insertAndCopyExtraBits and 0xFF;\n        s.insertLength = insertLengthOffset + readBits(s, insertLengthExtraBits);\n        fillBitWindow(s);\n        val copyLengthExtraBits: Int = insertAndCopyExtraBits shr 8;\n        s.copyLength = copyLengthOffset + readBits(s, copyLengthExtraBits);\n        s.j = 0;\n        s.runningState = 7;\n        continue;\n      }\n      7 -> {\n        if (s.trivialLiteralContext != 0) {\n          while (s.j < s.insertLength) {\n            if (s.halfOffset > 1015) {\n              result = readMoreInput(s);\n              if (result < 0) {\n                return result;\n              }\n            }\n            if (s.literalBlockLength == 0) {\n              decodeLiteralBlockSwitch(s);\n            }\n            s.literalBlockLength--;\n            fillBitWindow(s);\n            ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s).toByte();\n            s.pos++;\n            s.j++;\n            if (s.pos >= fence) {\n              s.nextRunningState = 7;\n              s.runningState = 12;\n              break;\n            }\n          }\n        } else {\n          var prevByte1: Int = ringBuffer[(s.pos - 1) and ringBufferMask].toInt() and 0xFF;\n          var prevByte2: Int = ringBuffer[(s.pos - 2) and ringBufferMask].toInt() and 0xFF;\n          while (s.j < s.insertLength) {\n            if (s.halfOffset > 1015) {\n              result = readMoreInput(s);\n              if (result < 0) {\n                return result;\n              }\n            }\n            if (s.literalBlockLength == 0) {\n              decodeLiteralBlockSwitch(s);\n            }\n            val literalContext: Int = LOOKUP[s.contextLookupOffset1 + prevByte1] or LOOKUP[s.contextLookupOffset2 + prevByte2];\n            val literalTreeIdx: Int = s.contextMap[s.contextMapSlice + literalContext].toInt() and 0xFF;\n            s.literalBlockLength--;\n            prevByte2 = prevByte1;\n            fillBitWindow(s);\n            prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s);\n            ringBuffer[s.pos] = prevByte1.toByte();\n            s.pos++;\n            s.j++;\n            if (s.pos >= fence) {\n              s.nextRunningState = 7;\n              s.runningState = 12;\n              break;\n            }\n          }\n        }\n        if (s.runningState != 7) {\n          continue;\n        }\n        s.metaBlockLength -= s.insertLength;\n        if (s.metaBlockLength <= 0) {\n          s.runningState = 4;\n          continue;\n        }\n        var distanceCode: Int = s.distanceCode;\n        if (distanceCode < 0) {\n          s.distance = s.rings[s.distRbIdx];\n        } else {\n          if (s.halfOffset > 1015) {\n            result = readMoreInput(s);\n            if (result < 0) {\n              return result;\n            }\n          }\n          if (s.distanceBlockLength == 0) {\n            decodeDistanceBlockSwitch(s);\n          }\n          s.distanceBlockLength--;\n          fillBitWindow(s);\n          val distTreeIdx: Int = s.distContextMap[s.distContextMapSlice + distanceCode].toInt() and 0xFF;\n          distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s);\n          if (distanceCode < 16) {\n            val index: Int = (s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]) and 0x3;\n            s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode];\n            if (s.distance < 0) {\n              return makeError(s, -12);\n            }\n          } else {\n            val extraBits: Int = s.distExtraBits[distanceCode].toInt();\n            var bits: Int;\n            if (s.bitOffset + extraBits <= 64) {\n              bits = readFewBits(s, extraBits);\n            } else {\n              fillBitWindow(s);\n              bits = readBits(s, extraBits);\n            }\n            s.distance = s.distOffset[distanceCode] + (bits shl s.distancePostfixBits);\n          }\n        }\n        if (s.maxDistance != s.maxBackwardDistance && s.pos < s.maxBackwardDistance) {\n          s.maxDistance = s.pos;\n        } else {\n          s.maxDistance = s.maxBackwardDistance;\n        }\n        if (s.distance > s.maxDistance) {\n          s.runningState = 9;\n          continue;\n        }\n        if (distanceCode > 0) {\n          s.distRbIdx = (s.distRbIdx + 1) and 0x3;\n          s.rings[s.distRbIdx] = s.distance;\n        }\n        if (s.copyLength > s.metaBlockLength) {\n          return makeError(s, -9);\n        }\n        s.j = 0;\n        s.runningState = 8;\n        continue;\n      }\n      8 -> {\n        var src: Int = (s.pos - s.distance) and ringBufferMask;\n        var dst: Int = s.pos;\n        val copyLength: Int = s.copyLength - s.j;\n        val srcEnd: Int = src + copyLength;\n        val dstEnd: Int = dst + copyLength;\n        if ((srcEnd < ringBufferMask) && (dstEnd < ringBufferMask)) {\n          if (copyLength < 12 || (srcEnd > dst && dstEnd > src)) {\n            val numQuads: Int = (copyLength + 3) shr 2;\n            for (k: Int in 0 until numQuads) {\n              ringBuffer[dst++] = ringBuffer[src++];\n              ringBuffer[dst++] = ringBuffer[src++];\n              ringBuffer[dst++] = ringBuffer[src++];\n              ringBuffer[dst++] = ringBuffer[src++];\n            }\n          } else {\n            copyBytesWithin(ringBuffer, dst, src, srcEnd);\n          }\n          s.j += copyLength;\n          s.metaBlockLength -= copyLength;\n          s.pos += copyLength;\n        } else {\n          while (s.j < s.copyLength) {\n            ringBuffer[s.pos] = ringBuffer[(s.pos - s.distance) and ringBufferMask];\n            s.metaBlockLength--;\n            s.pos++;\n            s.j++;\n            if (s.pos >= fence) {\n              s.nextRunningState = 8;\n              s.runningState = 12;\n              break;\n            }\n          }\n        }\n        if (s.runningState == 8) {\n          s.runningState = 4;\n        }\n        continue;\n      }\n      9 -> {\n        result = doUseDictionary(s, fence);\n        if (result < 0) {\n          return result;\n        }\n        continue;\n      }\n      14 -> {\n        s.pos += copyFromCompoundDictionary(s, fence);\n        if (s.pos >= fence) {\n          s.nextRunningState = 14;\n          s.runningState = 12;\n          return 2;\n        }\n        s.runningState = 4;\n        continue;\n      }\n      5 -> {\n        while (s.metaBlockLength > 0) {\n          if (s.halfOffset > 1015) {\n            result = readMoreInput(s);\n            if (result < 0) {\n              return result;\n            }\n          }\n          fillBitWindow(s);\n          readFewBits(s, 8);\n          s.metaBlockLength--;\n        }\n        s.runningState = 2;\n        continue;\n      }\n      6 -> {\n        result = copyUncompressedData(s);\n        if (result < 0) {\n          return result;\n        }\n        continue;\n      }\n      12 -> {\n        s.ringBufferBytesReady = Math.min(s.pos, s.ringBufferSize);\n        s.runningState = 13;\n        continue;\n      }\n      13 -> {\n        result = writeRingBuffer(s);\n        if (result != 0) {\n          return result;\n        }\n        if (s.pos >= s.maxBackwardDistance) {\n          s.maxDistance = s.maxBackwardDistance;\n        }\n        if (s.pos >= s.ringBufferSize) {\n          if (s.pos > s.ringBufferSize) {\n            copyBytesWithin(ringBuffer, 0, s.ringBufferSize, s.pos);\n          }\n          s.pos = s.pos and ringBufferMask;\n          s.ringBufferBytesWritten = 0;\n        }\n        s.runningState = s.nextRunningState;\n        continue;\n      }\n      else ->\n        return makeError(s, -28);\n    }\n  }\n  if (s.runningState != 10) {\n    return makeError(s, -29);\n  }\n  if (s.metaBlockLength < 0) {\n    return makeError(s, -10);\n  }\n  result = jumpToByteBoundary(s);\n  if (result != 0) {\n    return result;\n  }\n  result = checkHealth(s, 1);\n  if (result != 0) {\n    return result;\n  }\n  return 1;\n}\n\nprivate fun decodeStaticInit(): Unit {\n  unpackCommandLookupTable(CMD_LOOKUP);\n}\ninternal val RFC_TRANSFORMS: Transforms = Transforms(121, 167, 50);\n\ninternal class Transforms {\n  var numTransforms: Int;\n  var triplets: IntArray;\n  var prefixSuffixStorage: ByteArray;\n  var prefixSuffixHeads: IntArray;\n  var params: ShortArray;\n\n  constructor(numTransforms: Int, prefixSuffixLen: Int, prefixSuffixCount: Int) {\n    this.numTransforms = 0;\n    this.triplets = IntArray(size = 0);\n    this.prefixSuffixStorage = ByteArray(size = 0);\n    this.prefixSuffixHeads = IntArray(size = 0);\n    this.params = ShortArray(size = 0);\n    this.numTransforms = numTransforms;\n    this.triplets = IntArray(size = numTransforms * 3);\n    this.params = ShortArray(size = numTransforms);\n    this.prefixSuffixStorage = ByteArray(size = prefixSuffixLen);\n    this.prefixSuffixHeads = IntArray(size = prefixSuffixCount + 1);\n  }\n}\n\nprivate fun unpackTransforms(prefixSuffix: ByteArray, prefixSuffixHeads: IntArray, transforms: IntArray, prefixSuffixSrc: String, transformsSrc: String): Unit {\n  val prefixSuffixBytes: IntArray = toUtf8Runes(prefixSuffixSrc);\n  val n: Int = prefixSuffixBytes.size;\n  var index: Int = 1;\n  var j: Int = 0;\n  for (i: Int in 0 until n) {\n    val c: Int = prefixSuffixBytes[i];\n    if (c == 35) {\n      prefixSuffixHeads[index++] = j;\n    } else {\n      prefixSuffix[j++] = c.toByte();\n    }\n  }\n  for (i: Int in 0 until 363) {\n    transforms[i] = transformsSrc[i].code.toInt() - 32;\n  }\n}\n\ninternal fun transformDictionaryWord(dst: ByteArray, dstOffset: Int, src: ByteBuffer, srcOffset: Int, wordLen: Int, transforms: Transforms, transformIndex: Int): Int {\n  var offset: Int = dstOffset;\n  val triplets: IntArray = transforms.triplets;\n  val prefixSuffixStorage: ByteArray = transforms.prefixSuffixStorage;\n  val prefixSuffixHeads: IntArray = transforms.prefixSuffixHeads;\n  val transformOffset: Int = 3 * transformIndex;\n  val prefixIdx: Int = triplets[transformOffset];\n  val transformType: Int = triplets[transformOffset + 1];\n  val suffixIdx: Int = triplets[transformOffset + 2];\n  var prefix: Int = prefixSuffixHeads[prefixIdx];\n  val prefixEnd: Int = prefixSuffixHeads[prefixIdx + 1];\n  var suffix: Int = prefixSuffixHeads[suffixIdx];\n  val suffixEnd: Int = prefixSuffixHeads[suffixIdx + 1];\n  var omitFirst: Int = transformType - 11;\n  var omitLast: Int = transformType;\n  if (omitFirst < 1 || omitFirst > 9) {\n    omitFirst = 0;\n  }\n  if (omitLast < 1 || omitLast > 9) {\n    omitLast = 0;\n  }\n  while (prefix != prefixEnd) {\n    dst[offset++] = prefixSuffixStorage[prefix++];\n  }\n  var len: Int = wordLen;\n  if (omitFirst > len) {\n    omitFirst = len;\n  }\n  var dictOffset: Int = srcOffset + omitFirst;\n  len -= omitFirst;\n  len -= omitLast;\n  var i: Int = len;\n  while (i > 0) {\n    dst[offset++] = src.get(dictOffset++);\n    i--;\n  }\n  if (transformType == 10 || transformType == 11) {\n    var uppercaseOffset: Int = offset - len;\n    if (transformType == 10) {\n      len = 1;\n    }\n    while (len > 0) {\n      val c0: Int = dst[uppercaseOffset].toInt() and 0xFF;\n      if (c0 < 0xC0) {\n        if (c0 >= 97 && c0 <= 122) {\n          dst[uppercaseOffset] = (dst[uppercaseOffset].toInt() xor 32).toByte();\n        }\n        uppercaseOffset += 1;\n        len -= 1;\n      } else if (c0 < 0xE0) {\n        dst[uppercaseOffset + 1] = (dst[uppercaseOffset + 1].toInt() xor 32).toByte();\n        uppercaseOffset += 2;\n        len -= 2;\n      } else {\n        dst[uppercaseOffset + 2] = (dst[uppercaseOffset + 2].toInt() xor 5).toByte();\n        uppercaseOffset += 3;\n        len -= 3;\n      }\n    }\n  } else if (transformType == 21 || transformType == 22) {\n    var shiftOffset: Int = offset - len;\n    val param: Int = transforms.params[transformIndex].toInt();\n    var scalar: Int = (param and 0x7FFF) + (0x1000000 - (param and 0x8000));\n    while (len > 0) {\n      var step: Int = 1;\n      val c0: Int = dst[shiftOffset].toInt() and 0xFF;\n      if (c0 < 0x80) {\n        scalar += c0;\n        dst[shiftOffset] = (scalar and 0x7F).toByte();\n      } else if (c0 < 0xC0) {\n      } else if (c0 < 0xE0) {\n        if (len >= 2) {\n          val c1: Int = dst[shiftOffset + 1].toInt();\n          scalar += (c1 and 0x3F) or ((c0 and 0x1F) shl 6);\n          dst[shiftOffset] = (0xC0 or ((scalar shr 6) and 0x1F)).toByte();\n          dst[shiftOffset + 1] = ((c1 and 0xC0) or (scalar and 0x3F)).toByte();\n          step = 2;\n        } else {\n          step = len;\n        }\n      } else if (c0 < 0xF0) {\n        if (len >= 3) {\n          val c1: Int = dst[shiftOffset + 1].toInt();\n          val c2: Int = dst[shiftOffset + 2].toInt();\n          scalar += (c2 and 0x3F) or ((c1 and 0x3F) shl 6) or ((c0 and 0x0F) shl 12);\n          dst[shiftOffset] = (0xE0 or ((scalar shr 12) and 0x0F)).toByte();\n          dst[shiftOffset + 1] = ((c1 and 0xC0) or ((scalar shr 6) and 0x3F)).toByte();\n          dst[shiftOffset + 2] = ((c2 and 0xC0) or (scalar and 0x3F)).toByte();\n          step = 3;\n        } else {\n          step = len;\n        }\n      } else if (c0 < 0xF8) {\n        if (len >= 4) {\n          val c1: Int = dst[shiftOffset + 1].toInt();\n          val c2: Int = dst[shiftOffset + 2].toInt();\n          val c3: Int = dst[shiftOffset + 3].toInt();\n          scalar += (c3 and 0x3F) or ((c2 and 0x3F) shl 6) or ((c1 and 0x3F) shl 12) or ((c0 and 0x07) shl 18);\n          dst[shiftOffset] = (0xF0 or ((scalar shr 18) and 0x07)).toByte();\n          dst[shiftOffset + 1] = ((c1 and 0xC0) or ((scalar shr 12) and 0x3F)).toByte();\n          dst[shiftOffset + 2] = ((c2 and 0xC0) or ((scalar shr 6) and 0x3F)).toByte();\n          dst[shiftOffset + 3] = ((c3 and 0xC0) or (scalar and 0x3F)).toByte();\n          step = 4;\n        } else {\n          step = len;\n        }\n      }\n      shiftOffset += step;\n      len -= step;\n      if (transformType == 21) {\n        len = 0;\n      }\n    }\n  }\n  while (suffix != suffixEnd) {\n    dst[offset++] = prefixSuffixStorage[suffix++];\n  }\n  return offset - dstOffset;\n}\n\nprivate fun transformStaticInit(): Unit {\n  unpackTransforms(RFC_TRANSFORMS.prefixSuffixStorage, RFC_TRANSFORMS.prefixSuffixHeads, RFC_TRANSFORMS.triplets, \"# #s #, #e #.# the #.com/#\\u00C2\\u00A0# of # and # in # to #\\\"#\\\">#\\n#]# for # a # that #. # with #'# from # by #. The # on # as # is #ing #\\n\\t#:#ed #(# at #ly #=\\\"# of the #. This #,# not #er #al #='#ful #ive #less #est #ize #ous #\", \"     !! ! ,  *!  &!  \\\" !  ) *   * -  ! # !  #!*!  +  ,\\$ !  -  %  .  / #   0  1 .  \\\"   2  3!*   4%  ! # /   5  6  7  8 0  1 &   \\$   9 +   :  ;  < '  !=  >  ?! 4  @ 4  2  &   A *# (   B  C& ) %  ) !*# *-% A +! *.  D! %'  & E *6  F  G% ! *A *%  H! D  I!+!  J!+   K +- *4! A  L!*4  M  N +6  O!*% +.! K *G  P +%(  ! G *D +D  Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K\");\n}\nprivate fun getNextKey(key: Int, len: Int): Int {\n  var step: Int = 1 shl (len - 1);\n  while ((key and step) != 0) {\n    step = step shr 1;\n  }\n  return (key and (step - 1)) + step;\n}\n\nprivate fun replicateValue(table: IntArray, offset: Int, step: Int, end: Int, item: Int): Unit {\n  var pos: Int = end;\n  while (pos > 0) {\n    pos -= step;\n    table[offset + pos] = item;\n  }\n}\n\nprivate fun nextTableBitSize(count: IntArray, len: Int, rootBits: Int): Int {\n  var bits: Int = len;\n  var left: Int = 1 shl (bits - rootBits);\n  while (bits < 15) {\n    left -= count[bits];\n    if (left <= 0) {\n      break;\n    }\n    bits++;\n    left = left shl 1;\n  }\n  return bits - rootBits;\n}\n\ninternal fun buildHuffmanTable(tableGroup: IntArray, tableIdx: Int, rootBits: Int, codeLengths: IntArray, codeLengthsSize: Int): Int {\n  val tableOffset: Int = tableGroup[tableIdx];\n  val sorted: IntArray = IntArray(size = codeLengthsSize);\n  val count: IntArray = IntArray(size = 16);\n  val offset: IntArray = IntArray(size = 16);\n  for (sym: Int in 0 until codeLengthsSize) {\n    count[codeLengths[sym]]++;\n  }\n  offset[1] = 0;\n  for (len: Int in 1 until 15) {\n    offset[len + 1] = offset[len] + count[len];\n  }\n  for (sym: Int in 0 until codeLengthsSize) {\n    if (codeLengths[sym] != 0) {\n      sorted[offset[codeLengths[sym]]++] = sym;\n    }\n  }\n  var tableBits: Int = rootBits;\n  var tableSize: Int = 1 shl tableBits;\n  var totalSize: Int = tableSize;\n  if (offset[15] == 1) {\n    for (k: Int in 0 until totalSize) {\n      tableGroup[tableOffset + k] = sorted[0];\n    }\n    return totalSize;\n  }\n  var key: Int = 0;\n  var symbol: Int = 0;\n  var step: Int = 1;\n  for (len: Int in 1 .. rootBits) {\n    step = step shl 1;\n    while (count[len] > 0) {\n      replicateValue(tableGroup, tableOffset + key, step, tableSize, len shl 16 or sorted[symbol++]);\n      key = getNextKey(key, len);\n      count[len]--;\n    }\n  }\n  val mask: Int = totalSize - 1;\n  var low: Int = -1;\n  var currentOffset: Int = tableOffset;\n  step = 1;\n  for (len: Int in rootBits + 1 .. 15) {\n    step = step shl 1;\n    while (count[len] > 0) {\n      if ((key and mask) != low) {\n        currentOffset += tableSize;\n        tableBits = nextTableBitSize(count, len, rootBits);\n        tableSize = 1 shl tableBits;\n        totalSize += tableSize;\n        low = key and mask;\n        tableGroup[tableOffset + low] = (tableBits + rootBits) shl 16 or (currentOffset - tableOffset - low);\n      }\n      replicateValue(tableGroup, currentOffset + (key shr rootBits), step, tableSize, (len - rootBits) shl 16 or sorted[symbol++]);\n      key = getNextKey(key, len);\n      count[len]--;\n    }\n  }\n  return totalSize;\n}\n\ninternal fun readMoreInput(s: State): Int {\n  if (s.endOfStreamReached != 0) {\n    if (halfAvailable(s) >= -2) {\n      return 0;\n    }\n    return makeError(s, -16);\n  }\n  val readOffset: Int = s.halfOffset shl 2;\n  var bytesInBuffer: Int = 4096 - readOffset;\n  copyBytesWithin(s.byteBuffer, 0, readOffset, 4096);\n  s.halfOffset = 0;\n  while (bytesInBuffer < 4096) {\n    val spaceLeft: Int = 4096 - bytesInBuffer;\n    val len: Int = readInput(s, s.byteBuffer, bytesInBuffer, spaceLeft);\n    if (len < -1) {\n      return len;\n    }\n    if (len <= 0) {\n      s.endOfStreamReached = 1;\n      s.tailBytes = bytesInBuffer;\n      bytesInBuffer += 3;\n      break;\n    }\n    bytesInBuffer += len;\n  }\n  bytesToNibbles(s, bytesInBuffer);\n  return 0;\n}\n\ninternal fun checkHealth(s: State, endOfStream: Int): Int {\n  if (s.endOfStreamReached == 0) {\n    return 0;\n  }\n  val byteOffset: Int = (s.halfOffset shl 2) + ((s.bitOffset + 7) shr 3) - 8;\n  if (byteOffset > s.tailBytes) {\n    return makeError(s, -13);\n  }\n  if ((endOfStream != 0) && (byteOffset != s.tailBytes)) {\n    return makeError(s, -17);\n  }\n  return 0;\n}\n\ninternal fun fillBitWindow(s: State): Unit {\n  if (s.bitOffset >= 32) {\n    s.accumulator64 = (s.intBuffer[s.halfOffset++].toLong() shl 32) or (s.accumulator64 ushr 32);\n    s.bitOffset -= 32;\n  }\n}\n\ninternal fun doFillBitWindow(s: State): Unit {\n  s.accumulator64 = (s.intBuffer[s.halfOffset++].toLong() shl 32) or (s.accumulator64 ushr 32);\n  s.bitOffset -= 32;\n}\n\ninternal fun peekBits(s: State): Int {\n  return (s.accumulator64 ushr s.bitOffset).toInt();\n}\n\ninternal fun readFewBits(s: State, n: Int): Int {\n  val v: Int = peekBits(s) and ((1 shl n) - 1);\n  s.bitOffset += n;\n  return v;\n}\n\ninternal fun readBits(s: State, n: Int): Int {\n  return readFewBits(s, n);\n}\n\nprivate fun readManyBits(s: State, n: Int): Int {\n  val low: Int = readFewBits(s, 16);\n  doFillBitWindow(s);\n  return low or (readFewBits(s, n - 16) shl 16);\n}\n\ninternal fun initBitReader(s: State): Int {\n  s.byteBuffer = ByteArray(size = 4160);\n  s.accumulator64 = 0;\n  s.intBuffer = IntArray(size = 1040);\n  s.bitOffset = 64;\n  s.halfOffset = 1024;\n  s.endOfStreamReached = 0;\n  return prepare(s);\n}\n\nprivate fun prepare(s: State): Int {\n  if (s.halfOffset > 1015) {\n    val result: Int = readMoreInput(s);\n    if (result != 0) {\n      return result;\n    }\n  }\n  var health: Int = checkHealth(s, 0);\n  if (health != 0) {\n    return health;\n  }\n  doFillBitWindow(s);\n  doFillBitWindow(s);\n  return 0;\n}\n\ninternal fun reload(s: State): Int {\n  if (s.bitOffset == 64) {\n    return prepare(s);\n  }\n  return 0;\n}\n\ninternal fun jumpToByteBoundary(s: State): Int {\n  val padding: Int = (64 - s.bitOffset) and 7;\n  if (padding != 0) {\n    val paddingBits: Int = readFewBits(s, padding);\n    if (paddingBits != 0) {\n      return makeError(s, -5);\n    }\n  }\n  return 0;\n}\n\ninternal fun halfAvailable(s: State): Int {\n  var limit: Int = 1024;\n  if (s.endOfStreamReached != 0) {\n    limit = (s.tailBytes + 3) shr 2;\n  }\n  return limit - s.halfOffset;\n}\n\ninternal fun copyRawBytes(s: State, data: ByteArray, offset: Int, length: Int): Int {\n  var pos: Int = offset;\n  var len: Int = length;\n  if ((s.bitOffset and 7) != 0) {\n    return makeError(s, -30);\n  }\n  while ((s.bitOffset != 64) && (len != 0)) {\n    data[pos++] = peekBits(s).toByte();\n    s.bitOffset += 8;\n    len--;\n  }\n  if (len == 0) {\n    return 0;\n  }\n  val copyNibbles: Int = Math.min(halfAvailable(s), len shr 2);\n  if (copyNibbles > 0) {\n    val readOffset: Int = s.halfOffset shl 2;\n    val delta: Int = copyNibbles shl 2;\n    System.arraycopy(s.byteBuffer, readOffset, data, pos, (readOffset + delta) - readOffset);\n    pos += delta;\n    len -= delta;\n    s.halfOffset += copyNibbles;\n  }\n  if (len == 0) {\n    return 0;\n  }\n  if (halfAvailable(s) > 0) {\n    fillBitWindow(s);\n    while (len != 0) {\n      data[pos++] = peekBits(s).toByte();\n      s.bitOffset += 8;\n      len--;\n    }\n    return checkHealth(s, 0);\n  }\n  while (len > 0) {\n    val chunkLen: Int = readInput(s, data, pos, len);\n    if (chunkLen < -1) {\n      return chunkLen;\n    }\n    if (chunkLen <= 0) {\n      return makeError(s, -16);\n    }\n    pos += chunkLen;\n    len -= chunkLen;\n  }\n  return 0;\n}\n\ninternal fun bytesToNibbles(s: State, byteLen: Int): Unit {\n  val byteBuffer: ByteArray = s.byteBuffer;\n  val halfLen: Int = byteLen shr 2;\n  val intBuffer: IntArray = s.intBuffer;\n  for (i: Int in 0 until halfLen) {\n    intBuffer[i] = (byteBuffer[i * 4].toInt() and 0xFF) or ((byteBuffer[(i * 4) + 1].toInt() and 0xFF) shl 8) or ((byteBuffer[(i * 4) + 2].toInt() and 0xFF) shl 16) or ((byteBuffer[(i * 4) + 3].toInt() and 0xFF) shl 24);\n  }\n}\n\ninternal val LOOKUP: IntArray = IntArray(size = 2048);\n\nprivate fun unpackLookupTable(lookup: IntArray, utfMap: String, utfRle: String): Unit {\n  for (i: Int in 0 until 256) {\n    lookup[i] = i and 0x3F;\n    lookup[512 + i] = i shr 2;\n    lookup[1792 + i] = 2 + (i shr 6);\n  }\n  for (i: Int in 0 until 128) {\n    lookup[1024 + i] = 4 * (utfMap[i].code.toInt() - 32);\n  }\n  for (i: Int in 0 until 64) {\n    lookup[1152 + i] = i and 1;\n    lookup[1216 + i] = 2 + (i and 1);\n  }\n  var offset: Int = 1280;\n  for (k: Int in 0 until 19) {\n    val value: Int = k and 3;\n    val rep: Int = utfRle[k].code.toInt() - 32;\n    for (i: Int in 0 until rep) {\n      lookup[offset++] = value;\n    }\n  }\n  for (i: Int in 0 until 16) {\n    lookup[1792 + i] = 1;\n    lookup[2032 + i] = 6;\n  }\n  lookup[1792] = 0;\n  lookup[2047] = 7;\n  for (i: Int in 0 until 256) {\n    lookup[1536 + i] = lookup[1792 + i] shl 3;\n  }\n}\n\nprivate fun contextStaticInit(): Unit {\n  unpackLookupTable(LOOKUP, \"         !!  !                  \\\"#\\$##%#\\$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# \", \"A/*  ':  & : \\$  \\u0081 @\");\n}\ninternal class State {\n  var ringBuffer: ByteArray;\n  var contextModes: ByteArray;\n  var contextMap: ByteArray;\n  var distContextMap: ByteArray;\n  var distExtraBits: ByteArray;\n  var output: ByteArray;\n  var byteBuffer: ByteArray;\n  var shortBuffer: ShortArray;\n  var intBuffer: IntArray;\n  var rings: IntArray;\n  var blockTrees: IntArray;\n  var literalTreeGroup: IntArray;\n  var commandTreeGroup: IntArray;\n  var distanceTreeGroup: IntArray;\n  var distOffset: IntArray;\n  var accumulator64: Long;\n  var runningState: Int;\n  var nextRunningState: Int;\n  var accumulator32: Int;\n  var bitOffset: Int;\n  var halfOffset: Int;\n  var tailBytes: Int;\n  var endOfStreamReached: Int;\n  var metaBlockLength: Int;\n  var inputEnd: Int;\n  var isUncompressed: Int;\n  var isMetadata: Int;\n  var literalBlockLength: Int;\n  var numLiteralBlockTypes: Int;\n  var commandBlockLength: Int;\n  var numCommandBlockTypes: Int;\n  var distanceBlockLength: Int;\n  var numDistanceBlockTypes: Int;\n  var pos: Int;\n  var maxDistance: Int;\n  var distRbIdx: Int;\n  var trivialLiteralContext: Int;\n  var literalTreeIdx: Int;\n  var commandTreeIdx: Int;\n  var j: Int;\n  var insertLength: Int;\n  var contextMapSlice: Int;\n  var distContextMapSlice: Int;\n  var contextLookupOffset1: Int;\n  var contextLookupOffset2: Int;\n  var distanceCode: Int;\n  var numDirectDistanceCodes: Int;\n  var distancePostfixBits: Int;\n  var distance: Int;\n  var copyLength: Int;\n  var maxBackwardDistance: Int;\n  var maxRingBufferSize: Int;\n  var ringBufferSize: Int;\n  var expectedTotalSize: Int;\n  var outputOffset: Int;\n  var outputLength: Int;\n  var outputUsed: Int;\n  var ringBufferBytesWritten: Int;\n  var ringBufferBytesReady: Int;\n  var isEager: Int;\n  var isLargeWindow: Int;\n  var cdNumChunks: Int;\n  var cdTotalSize: Int;\n  var cdBrIndex: Int;\n  var cdBrOffset: Int;\n  var cdBrLength: Int;\n  var cdBrCopied: Int;\n  var cdChunks: Array<ByteArray?>;\n  var cdChunkOffsets: IntArray;\n  var cdBlockBits: Int;\n  var cdBlockMap: ByteArray;\n  var input: InputStream = ByteArrayInputStream(ByteArray(size = 0));\n\n  constructor() {\n    this.ringBuffer = ByteArray(size = 0);\n    this.contextModes = ByteArray(size = 0);\n    this.contextMap = ByteArray(size = 0);\n    this.distContextMap = ByteArray(size = 0);\n    this.distExtraBits = ByteArray(size = 0);\n    this.output = ByteArray(size = 0);\n    this.byteBuffer = ByteArray(size = 0);\n    this.shortBuffer = ShortArray(size = 0);\n    this.intBuffer = IntArray(size = 0);\n    this.rings = IntArray(size = 0);\n    this.blockTrees = IntArray(size = 0);\n    this.literalTreeGroup = IntArray(size = 0);\n    this.commandTreeGroup = IntArray(size = 0);\n    this.distanceTreeGroup = IntArray(size = 0);\n    this.distOffset = IntArray(size = 0);\n    this.accumulator64 = 0;\n    this.runningState = 0;\n    this.nextRunningState = 0;\n    this.accumulator32 = 0;\n    this.bitOffset = 0;\n    this.halfOffset = 0;\n    this.tailBytes = 0;\n    this.endOfStreamReached = 0;\n    this.metaBlockLength = 0;\n    this.inputEnd = 0;\n    this.isUncompressed = 0;\n    this.isMetadata = 0;\n    this.literalBlockLength = 0;\n    this.numLiteralBlockTypes = 0;\n    this.commandBlockLength = 0;\n    this.numCommandBlockTypes = 0;\n    this.distanceBlockLength = 0;\n    this.numDistanceBlockTypes = 0;\n    this.pos = 0;\n    this.maxDistance = 0;\n    this.distRbIdx = 0;\n    this.trivialLiteralContext = 0;\n    this.literalTreeIdx = 0;\n    this.commandTreeIdx = 0;\n    this.j = 0;\n    this.insertLength = 0;\n    this.contextMapSlice = 0;\n    this.distContextMapSlice = 0;\n    this.contextLookupOffset1 = 0;\n    this.contextLookupOffset2 = 0;\n    this.distanceCode = 0;\n    this.numDirectDistanceCodes = 0;\n    this.distancePostfixBits = 0;\n    this.distance = 0;\n    this.copyLength = 0;\n    this.maxBackwardDistance = 0;\n    this.maxRingBufferSize = 0;\n    this.ringBufferSize = 0;\n    this.expectedTotalSize = 0;\n    this.outputOffset = 0;\n    this.outputLength = 0;\n    this.outputUsed = 0;\n    this.ringBufferBytesWritten = 0;\n    this.ringBufferBytesReady = 0;\n    this.isEager = 0;\n    this.isLargeWindow = 0;\n    this.cdNumChunks = 0;\n    this.cdTotalSize = 0;\n    this.cdBrIndex = 0;\n    this.cdBrOffset = 0;\n    this.cdBrLength = 0;\n    this.cdBrCopied = 0;\n    this.cdChunks = arrayOfNulls(0);\n    this.cdChunkOffsets = IntArray(size = 0);\n    this.cdBlockBits = 0;\n    this.cdBlockMap = ByteArray(size = 0);\n    this.input = ByteArrayInputStream(ByteArray(size = 0));\n    this.ringBuffer = ByteArray(size = 0);\n    this.rings = IntArray(size = 10);\n    this.rings[0] = 16;\n    this.rings[1] = 15;\n    this.rings[2] = 11;\n    this.rings[3] = 4;\n  }\n}\n\nprivate var data: ByteBuffer = ByteBuffer.allocateDirect(0);\ninternal val offsets: IntArray = IntArray(size = 32);\ninternal val sizeBits: IntArray = IntArray(size = 32);\n\nfun setData(newData: ByteBuffer, newSizeBits: IntArray): Unit {\n  val dictionaryOffsets: IntArray = offsets;\n  val dictionarySizeBits: IntArray = sizeBits;\n  for (i: Int in 0 until newSizeBits.size) {\n    dictionarySizeBits[i] = newSizeBits[i];\n  }\n  var pos: Int = 0;\n  for (i: Int in 0 until newSizeBits.size) {\n    dictionaryOffsets[i] = pos;\n    val bits: Int = dictionarySizeBits[i];\n    if (bits != 0) {\n      pos += i shl (bits and 31);\n    }\n  }\n  for (i: Int in newSizeBits.size until 32) {\n    dictionaryOffsets[i] = pos;\n  }\n  data = newData;\n}\n\nprivate fun unpackDictionaryData(dictionary: ByteBuffer, data0: String, data1: String, skipFlip: String, sizeBits: IntArray, sizeBitsData: String): Unit {\n  val dict: ByteArray = toUsAsciiBytes(data0 + data1);\n  val skipFlipRunes: IntArray = toUtf8Runes(skipFlip);\n  var offset: Int = 0;\n  val n: Int = skipFlipRunes.size shr 1;\n  for (i: Int in 0 until n) {\n    val skip: Int = skipFlipRunes[2 * i] - 36;\n    val flip: Int = skipFlipRunes[2 * i + 1] - 36;\n    for (j: Int in 0 until skip) {\n      dict[offset] = (dict[offset].toInt() xor 3).toByte();\n      offset++;\n    }\n    for (j: Int in 0 until flip) {\n      dict[offset] = (dict[offset].toInt() xor 236).toByte();\n      offset++;\n    }\n  }\n  for (i: Int in 0 until sizeBitsData.length) {\n    sizeBits[i] = sizeBitsData[i].code.toInt() - 65;\n  }\n  dictionary.put(dict);\n}\n\nprivate fun dictionaryDataStaticInit(): Unit {\n  val dictionaryData: ByteBuffer = ByteBuffer.allocateDirect(122784);\n  val dictionarySizeBits: IntArray = IntArray(size = 25);\n  unpackDictionaryData(dictionaryData, \"wjnfgltmojefofewab`h`lgfgbwbpkltlmozpjwf`jwzlsfmivpwojhfeqfftlqhwf{wzfbqlufqalgzolufelqnallhsobzojufojmfkfosklnfpjgfnlqftlqgolmdwkfnujftejmgsbdfgbzpevookfbgwfqnfb`kbqfbeqlnwqvfnbqhbaofvslmkjdkgbwfobmgmftpfufmmf{w`bpfalwkslpwvpfgnbgfkbmgkfqftkbwmbnfOjmhaoldpjyfabpfkfognbhfnbjmvpfq\\$*#(klogfmgptjwkMftpqfbgtfqfpjdmwbhfkbufdbnfpffm`boosbwktfoosovpnfmvejonsbqwiljmwkjpojpwdllgmffgtbzptfpwilapnjmgboploldlqj`kvpfpobpwwfbnbqnzellghjmdtjoofbpwtbqgafpwejqfSbdfhmltbtbz-smdnlufwkbmolbgdjufpfoemlwfnv`keffgnbmzql`hj`lmlm`follhkjgfgjfgKlnfqvofklpwbib{jmel`ovaobtpofppkboeplnfpv`kylmf233&lmfp`bqfWjnfqb`faovfelvqtffheb`fklsfdbufkbqgolpwtkfmsbqhhfswsbpppkjsqllnKWNOsobmWzsfglmfpbufhffseobdojmhplogejufwllhqbwfwltmivnswkvpgbqh`bqgejofefbqpwbzhjoowkbweboobvwlfufq-`lnwbohpklsulwfgffsnlgfqfpwwvqmalqmabmgefooqlpfvqo+phjmqlof`lnfb`wpbdfpnffwdlog-isdjwfnubqzefowwkfmpfmggqlsUjft`lsz2-3!?,b=pwlsfopfojfpwlvqsb`h-djesbpw`pp<dqbznfbm%dw8qjgfpklwobwfpbjgqlbgubq#effoilkmqj`hslqwebpw\\$VB.gfbg?,a=sllqajoowzsfV-P-tllgnvpw1s{8JmelqbmhtjgftbmwtbooofbgX3^8sbvotbufpvqf'+\\$ tbjwnbppbqnpdlfpdbjmobmdsbjg\\\"..#ol`hvmjwqllwtbohejqntjef{no!plmdwfpw13s{hjmgqltpwlloelmwnbjopbefpwbqnbsp`lqfqbjmeoltabazpsbmpbzp7s{85s{8bqwpellwqfbotjhjkfbwpwfswqjslqd,obhftfbhwlogElqn`bpwebmpabmhufqzqvmpivozwbph2s{8dlbodqftpoltfgdfjg>!pfwp6s{8-ip<73s{je#+pllmpfbwmlmfwvafyfqlpfmwqffgeb`wjmwldjewkbqn2;s{`bnfkjooalogyllnuljgfbpzqjmdejoosfbhjmjw`lpw0s{8ib`hwbdpajwpqloofgjwhmftmfbq?\\\"..dqltIPLMgvwzMbnfpbofzlv#olwpsbjmibyy`logfzfpejpkttt-qjphwbapsqfu23s{qjpf16s{Aovfgjmd033/abooelqgfbqmtjogal{-ebjqob`hufqpsbjqivmfwf`kje+\\\"sj`hfujo'+! tbqnolqgglfpsvoo/333jgfbgqbtkvdfpslwevmgavqmkqfe`foohfzpwj`hklvqolppevfo21s{pvjwgfboQPP!bdfgdqfzDFW!fbpfbjnpdjqobjgp;s{8mbuzdqjgwjsp :::tbqpobgz`bqp*8#~sks<kfoowbootklnyk9\\t),\\u000E\\t#233kboo-\\t\\tB4s{8svpk`kbw3s{8`qft),?,kbpk46s{eobwqbqf#%%#wfoo`bnslmwlobjgnjppphjswfmwejmfnbofdfwpsolw733/\\u000E\\t\\u000E\\t`lloeffw-sks?aq=fqj`nlpwdvjgafoogfp`kbjqnbwkbwln,jnd% ;1ov`h`fmw3338wjmzdlmfkwnopfoogqvdEQFFmlgfmj`h<jg>olpfmvooubpwtjmgQPP#tfbqqfozaffmpbnfgvhfmbpb`bsftjpkdvoeW109kjwppolwdbwfhj`haovqwkfz26s{\\$\\$*8*8!=npjftjmpajqgplqwafwbpffhW2;9lqgpwqffnboo53s{ebqn\\u000ElupalzpX3^-\\$*8!SLPWafbqhjgp*8~~nbqzwfmg+VH*rvbgyk9\\n.pjy....sqls\\$*8\\u000EojewW2:9uj`fbmgzgfaw=QPPsllomf`haoltW259gllqfuboW249ofwpebjolqbosloomlub`lopdfmf#\\u000Elxplewqlnfwjooqlpp?k0=slvqebgfsjmh?wq=njmj*\\u007F\\\"+njmfyk9\\u0004abqpkfbq33*8njoh#..=jqlmeqfggjphtfmwpljosvwp,ip,klozW119JPAMW139bgbnpffp?k1=iplm\\$/#\\$`lmwW129#QPPollsbpjbnllm?,s=plvoOJMFelqw`bqwW279?k2=;3s{\\\"..?:s{8W379njhf975Ymj`fjm`kZlqhqj`fyk9\\b\\$**8svqfnbdfsbqbwlmfalmg904Y\\\\le\\\\\\$^*8333/yk9\\u000Bwbmhzbqgaltoavpk965YIbub03s{\\t\\u007F~\\t&@0&907YifeeF[SJ`bpkujpbdloepmltyk9\\u0005rvfq-`pppj`hnfbwnjm-ajmggfookjqfsj`pqfmw905YKWWS.132elwltloeFMG#{al{967YALGZgj`h8\\t~\\tf{jw906Yubqpafbw\\$~*8gjfw:::8bmmf~~?,Xj^-Obmdhn.^tjqfwlzpbggppfbobof{8\\t\\n~f`klmjmf-lqd336*wlmziftppbmgofdpqlle333*#133tjmfdfbqgldpallwdbqz`vwpwzofwfnswjlm-{no`l`hdbmd'+\\$-63s{Sk-Gnjp`bobmolbmgfphnjofqzbmvmj{gjp`*8~\\tgvpw`ojs*-\\t\\t43s{.133GUGp4^=?wbsfgfnlj((*tbdffvqlskjolswpklofEBRpbpjm.15WobapsfwpVQO#avoh`llh8~\\u000E\\tKFBGX3^*baaqivbm+2:;ofpkwtjm?,j=plmzdvzpev`hsjsf\\u007F.\\t\\\"331*mgltX2^8X^8\\tOld#pbow\\u000E\\t\\n\\nabmdwqjnabwk*x\\u000E\\t33s{\\t~*8hl9\\u0000effpbg=\\u000Ep9,,#X^8wloosovd+*x\\tx\\u000E\\t#-ip\\$133sgvboalbw-ISD*8\\t~rvlw*8\\t\\t\\$*8\\t\\u000E\\t~\\u000E1327132613251324132;132:13131312131113101317131613151314131;131:130313021301130013071306130513041320132113221323133:133;133413351336133713301331133213332:::2::;2::42::52::62::72::02::12::22::32:;:2:;;2:;42:;52:;62:;72:;02:;12:;22:;32:4:2:4;2:442:452:462:472:402:412:422:432:5:2:5;2:542:552:562:572:502:512:522:532:6:2:6;2:642:652:662:672:602:612:622:632333231720:73333::::`lnln/Mpfpwffpwbsfqlwlglkb`f`bgbb/]lajfmg/Abbp/Aujgb`bpllwqlelqlplollwqb`vbogjilpjgldqbmwjslwfnbgfafbodlrv/Efpwlmbgbwqfpsl`l`bpbabilwlgbpjmlbdvbsvfpvmlpbmwfgj`fovjpfoobnbzlylmbbnlqsjpllaqb`oj`foolgjlpklqb`bpj<[<\\\\<Q<\\\\<R<P=l<\\\\=l=o=n<\\\\<Q<Y<S<R<R=n<T<[<Q<R<X<R=n<R<Z<Y<R<Q<T=i<q<\\\\<Y<Y<]=g<P=g<~=g=m<R<^=g<^<R<q<R<R<]<s<R<W<T<Q<T<L<H<q<Y<p=g=n=g<r<Q<T<P<X<\\\\<{<\\\\<x<\\\\<q=o<r<]=n<Y<t<[<Y<U<Q=o<P<P<N=g=o<Z5m5f4O5j5i4K5i4U5o5h4O5d4]4C5f4K5m5e5k5d5h5i5h5o4K5d5h5k4D4_4K5h4I5j5k5f4O5f5n4C5k5h4G5i4D5k5h5d5h5f4D5h4K5f4D5o4X5f4K5i4O5i5j4F4D5f5h5j4A4D5k5i5i4X5d4Xejqpwujgflojdkwtlqognfgjbtkjwf`olpfaob`hqjdkwpnbooallhpsob`fnvpj`ejfoglqgfqsljmwubovfofufowbaofalbqgklvpfdqlvstlqhpzfbqppwbwfwlgbztbwfqpwbqwpwzofgfbwksltfqsklmfmjdkwfqqlqjmsvwbalvwwfqnpwjwofwllopfufmwol`bowjnfpobqdftlqgpdbnfppklqwpsb`fel`vp`ofbqnlgfoaol`hdvjgfqbgjlpkbqftlnfmbdbjmnlmfzjnbdfmbnfpzlvmdojmfpobwfq`lolqdqffmeqlmw%bns8tbw`kelq`fsqj`fqvofpafdjmbewfqujpjwjppvfbqfbpafoltjmgf{wlwboklvqpobafosqjmwsqfppavjowojmhppsffgpwvgzwqbgfelvmgpfmpfvmgfqpkltmelqnpqbmdfbggfgpwjoonlufgwbhfmbalufeobpkej{fglewfmlwkfqujftp`kf`hofdboqjufqjwfnprvj`hpkbsfkvnbmf{jpwdljmdnlujfwkjqgabpj`sfb`fpwbdftjgwkoldjmjgfbptqlwfsbdfpvpfqpgqjufpwlqfaqfbhplvwkulj`fpjwfpnlmwktkfqfavjogtkj`kfbqwkelqvnwkqffpslqwsbqwz@oj`holtfqojufp`obppobzfqfmwqzpwlqzvpbdfplvmg`lvqwzlvq#ajqwkslsvswzsfpbssozJnbdfafjmdvssfqmlwfpfufqzpkltpnfbmpf{wqbnbw`kwqb`hhmltmfbqozafdbmpvsfqsbsfqmlqwkofbqmdjufmmbnfgfmgfgWfqnpsbqwpDqlvsaqbmgvpjmdtlnbmebopfqfbgzbvgjlwbhfptkjof-`ln,ojufg`bpfpgbjoz`kjogdqfbwivgdfwklpfvmjwpmfufqaqlbg`lbpw`lufqbssofejofp`z`ofp`fmfsobmp`oj`htqjwfrvffmsjf`ffnbjoeqbnflogfqsklwlojnjw`b`kf`jujop`boffmwfqwkfnfwkfqfwlv`kalvmgqlzbobphfgtklofpjm`fpwl`h#mbnfebjwkkfbqwfnswzleefqp`lsfltmfgnjdkwboavnwkjmhaollgbqqbznbilqwqvpw`bmlmvmjlm`lvmwubojgpwlmfPwzofOldjmkbsszl``vqofew9eqfpkrvjwfejonpdqbgfmffgpvqabmejdkwabpjpklufqbvwl8qlvwf-kwnonj{fgejmboZlvq#pojgfwlsj`aqltmbolmfgqbtmpsojwqfb`kQjdkwgbwfpnbq`krvlwfdllgpOjmhpglvawbpzm`wkvnaboolt`kjfezlvwkmlufo23s{8pfqufvmwjokbmgp@kf`hPsb`frvfqzibnfpfrvbowtj`f3/333Pwbqwsbmfoplmdpqlvmgfjdkwpkjewtlqwkslpwpofbgptffhpbuljgwkfpfnjofpsobmfpnbqwboskbsobmwnbqhpqbwfpsobzp`objnpbofpwf{wppwbqptqlmd?,k0=wkjmd-lqd,nvowjkfbqgSltfqpwbmgwlhfmplojg+wkjpaqjmdpkjsppwbeewqjfg`boopevoozeb`wpbdfmwWkjp#,,..=bgnjmfdzswFufmw26s{8Fnbjowqvf!`qlpppsfmwaoldpal{!=mlwfgofbuf`kjmbpjyfpdvfpw?,k7=qlalwkfbuzwqvf/pfufmdqbmg`qjnfpjdmpbtbqfgbm`fskbpf=?\\\"..fm\\\\VP% 0:8133s{\\\\mbnfobwjmfmilzbib{-bwjlmpnjwkV-P-#klogpsfwfqjmgjbmbu!=`kbjmp`lqf`lnfpgljmdsqjlqPkbqf2::3pqlnbmojpwpibsbmeboopwqjboltmfqbdqff?,k1=bavpfbofqwlsfqb!.,,T`bqgpkjoopwfbnpSklwlwqvwk`ofbm-sks<pbjmwnfwboolvjpnfbmwsqlleaqjfeqlt!=dfmqfwqv`hollhpUbovfEqbnf-mfw,..=\\t?wqz#x\\tubq#nbhfp`lpwpsobjmbgvowrvfpwwqbjmobalqkfosp`bvpfnbdj`nlwlqwkfjq163s{ofbpwpwfsp@lvmw`lvogdobpppjgfpevmgpklwfobtbqgnlvwknlufpsbqjpdjufpgvw`kwf{bpeqvjwmvoo/\\u007F\\u007FX^8wls!=\\t?\\\"..SLPW!l`fbm?aq,=eollqpsfbhgfswk#pjyfabmhp`bw`k`kbqw13s{8bojdmgfboptlvog63s{8vqo>!sbqhpnlvpfNlpw#---?,bnlmdaqbjmalgz#mlmf8abpfg`bqqzgqbewqfefqsbdf\\\\klnf-nfwfqgfobzgqfbnsqlufiljmw?,wq=gqvdp?\\\"..#bsqjojgfboboofmf{b`welqwk`lgfpoldj`Ujft#pffnpaobmhslqwp#+133pbufg\\\\ojmhdlbopdqbmwdqffhklnfpqjmdpqbwfg03s{8tklpfsbqpf+*8!#Aol`hojmv{ilmfpsj{fo\\$*8!=*8je+.ofewgbujgklqpfEl`vpqbjpfal{fpWqb`hfnfmw?,fn=abq!=-pq`>wltfqbow>!`baofkfmqz17s{8pfwvsjwbozpkbqsnjmlqwbpwftbmwpwkjp-qfpfwtkffodjqop,`pp,233&8`ovappwveeajaofulwfp#2333hlqfb~*8\\u000E\\tabmgprvfvf>#x~8;3s{8`hjmdx\\u000E\\t\\n\\nbkfbg`ol`hjqjpkojhf#qbwjlpwbwpElqn!zbkll*X3^8Balvwejmgp?,k2=gfavdwbphpVQO#>`foop~*+*821s{8sqjnfwfoopwvqmp3{533-isd!psbjmafb`kwb{fpnj`qlbmdfo..=?,djewppwfuf.ojmhalgz-~*8\\t\\nnlvmw#+2::EBR?,qldfqeqbmh@obpp1;s{8effgp?k2=?p`lwwwfpwp11s{8gqjmh*#\\u007F\\u007F#oftjppkboo 30:8#elq#olufgtbpwf33s{8ib9\\u000Fnpjnlm?elmwqfsoznffwpvmwfq`kfbswjdkwAqbmg*#\\\">#gqfpp`ojspqllnplmhfznlajonbjm-Mbnf#sobwfevmmzwqffp`ln,!2-isdtnlgfsbqbnPWBQWofew#jggfm/#132*8\\t~\\telqn-ujqvp`kbjqwqbmptlqpwSbdfpjwjlmsbw`k?\\\"..\\tl.`b`ejqnpwlvqp/333#bpjbmj((*xbglaf\\$*X3^jg>23alwk8nfmv#-1-nj-smd!hfujm`lb`k@kjogaqv`f1-isdVQO*(-isd\\u007Fpvjwfpoj`fkbqqz213!#ptffwwq=\\u000E\\tmbnf>gjfdlsbdf#ptjpp..=\\t\\t eee8!=Old-`ln!wqfbwpkffw*#%%#27s{8poffsmwfmwejofgib9\\u000Fojg>!`Mbnf!tlqpfpklwp.al{.gfowb\\t%ow8afbqp97;Y?gbwb.qvqbo?,b=#psfmgabhfqpklsp>#!!8sks!=`wjlm20s{8aqjbmkfoolpjyf>l>&1E#iljmnbzaf?jnd#jnd!=/#eipjnd!#!*X3^NWlsAWzsf!mftozGbmph`yf`kwqbjohmltp?,k6=ebr!=yk.`m23*8\\t.2!*8wzsf>aovfpwqvozgbujp-ip\\$8=\\u000E\\t?\\\"pwffo#zlv#k1=\\u000E\\telqn#ifpvp233&#nfmv-\\u000E\\t\\n\\u000E\\ttbofpqjphpvnfmwggjmda.ojhwfb`kdje!#ufdbpgbmphffpwjpkrjspvlnjplaqfgfpgffmwqfwlglpsvfgfb/]lpfpw/Mwjfmfkbpwblwqlpsbqwfglmgfmvfulkb`fqelqnbnjpnlnfilqnvmglbrv/Ag/Abpp/_olbzvgbef`kbwlgbpwbmwlnfmlpgbwlplwqbppjwjlnv`klbklqbovdbqnbzlqfpwlpklqbpwfmfqbmwfpelwlpfpwbpsb/Apmvfubpbovgelqlpnfgjlrvjfmnfpfpslgfq`kjofpfq/Muf`fpgf`jqilp/Efpwbqufmwbdqvslkf`klfoolpwfmdlbnjdl`lpbpmjufodfmwfnjpnbbjqfpivojlwfnbpkb`jbebulqivmjlojaqfsvmwlavfmlbvwlqbaqjoavfmbwf{wlnbqylpbafqojpwbovfdl`/_nlfmfqlivfdlsfq/Vkbafqfpwlzmvm`bnvifqubolqevfqbojaqldvpwbjdvboulwlp`bplpdv/Absvfglplnlpbujplvpwfggfafmml`kfavp`bebowbfvqlppfqjfgj`kl`vqpl`obuf`bpbpof/_msobylobqdllaqbpujpwbbslzlivmwlwqbwbujpwl`qfbq`bnslkfnlp`jm`l`bqdlsjplplqgfmkb`fm/Mqfbgjp`lsfgql`fq`bsvfgbsbsfonfmlq/Vwjo`obqlilqdf`boofslmfqwbqgfmbgjfnbq`bpjdvffoobppjdol`l`kfnlwlpnbgqf`obpfqfpwlmj/]lrvfgbsbpbqabm`lkjilpujbifsbaol/Epwfujfmfqfjmlgfibqelmgl`bmbomlqwfofwqb`bvpbwlnbqnbmlpovmfpbvwlpujoobufmglsfpbqwjslpwfmdbnbq`loofubsbgqfvmjglubnlpylmbpbnalpabmgbnbqjbbavplnv`kbpvajqqjlibujujqdqbgl`kj`bboo/Ailufmgj`kbfpwbmwbofppbojqpvfolsfplpejmfpoobnbavp`l/Epwboofdbmfdqlsobybkvnlqsbdbqivmwbglaofjpobpalopbab/]lkbaobov`kb/mqfbgj`fmivdbqmlwbpuboofboo/M`bqdbglolqbabilfpw/Edvpwlnfmwfnbqjlejqnb`lpwlej`kbsobwbkldbqbqwfpofzfpbrvfonvpflabpfpsl`lpnjwbg`jfol`kj`lnjfgldbmbqpbmwlfwbsbgfafpsobzbqfgfppjfwf`lqwf`lqfbgvgbpgfpflujfilgfpfbbdvbp%rvlw8glnbjm`lnnlmpwbwvpfufmwpnbpwfqpzpwfnb`wjlmabmmfqqfnlufp`qloovsgbwfdolabonfgjvnejowfqmvnafq`kbmdfqfpvowsvaoj`p`qffm`kllpfmlqnbowqbufojppvfpplvq`fwbqdfwpsqjmdnlgvofnlajofptjw`ksklwlpalqgfqqfdjlmjwpfoepl`jbob`wjuf`lovnmqf`lqgelooltwjwof=fjwkfqofmdwkebnjozeqjfmgobzlvwbvwklq`qfbwfqfujftpvnnfqpfqufqsobzfgsobzfqf{sbmgsloj`zelqnbwglvaofsljmwppfqjfpsfqplmojujmdgfpjdmnlmwkpelq`fpvmjrvftfjdkwsflsoffmfqdzmbwvqfpfbq`kejdvqfkbujmd`vpwlnleepfwofwwfqtjmgltpvanjwqfmgfqdqlvspvsolbgkfbowknfwklgujgflpp`klloevwvqfpkbgltgfabwfubovfpLaif`wlwkfqpqjdkwpofbdvf`kqlnfpjnsofmlwj`fpkbqfgfmgjmdpfbplmqfslqwlmojmfprvbqfavwwlmjnbdfpfmbaofnlujmdobwfpwtjmwfqEqbm`fsfqjlgpwqlmdqfsfbwOlmglmgfwbjoelqnfggfnbmgpf`vqfsbppfgwlddofsob`fpgfuj`fpwbwj``jwjfppwqfbnzfooltbwwb`hpwqffweojdkwkjggfmjmel!=lsfmfgvpfevouboofz`bvpfpofbgfqpf`qfwpf`lmggbnbdfpslqwpf{`fswqbwjmdpjdmfgwkjmdpfeef`wejfogppwbwfpleej`fujpvbofgjwlqulovnfQfslqwnvpfvnnlujfpsbqfmwb``fppnlpwoznlwkfq!#jg>!nbqhfwdqlvmg`kbm`fpvqufzafelqfpznalonlnfmwpsff`knlwjlmjmpjgfnbwwfq@fmwfqlaif`wf{jpwpnjggofFvqlsfdqltwkofdb`znbmmfqfmlvdk`bqffqbmptfqlqjdjmslqwbo`ojfmwpfof`wqbmgln`olpfgwlsj`p`lnjmdebwkfqlswjlmpjnsozqbjpfgfp`bsf`klpfm`kvq`kgfejmfqfbplm`lqmfqlvwsvwnfnlqzjeqbnfsloj`fnlgfopMvnafqgvqjmdleefqppwzofphjoofgojpwfg`boofgpjoufqnbqdjmgfofwfafwwfqaqltpfojnjwpDolabopjmdoftjgdfw`fmwfqavgdfwmltqbs`qfgjw`objnpfmdjmfpbefwz`klj`fpsjqjw.pwzofpsqfbgnbhjmdmffgfgqvppjbsofbpff{wfmwP`qjswaqlhfmbooltp`kbqdfgjujgfeb`wlqnfnafq.abpfgwkflqz`lmejdbqlvmgtlqhfgkfosfg@kvq`kjnsb`wpklvogbotbzpoldl!#alwwlnojpw!=*xubq#sqfej{lqbmdfKfbgfq-svpk+`lvsofdbqgfmaqjgdfobvm`kQfujftwbhjmdujpjlmojwwofgbwjmdAvwwlmafbvwzwkfnfpelqdlwPfbq`kbm`klqbonlpwolbgfg@kbmdfqfwvqmpwqjmdqfolbgNlajofjm`lnfpvssozPlvq`flqgfqpujftfg%maps8`lvqpfBalvw#jpobmg?kwno#`llhjfmbnf>!bnbylmnlgfqmbguj`fjm?,b=9#Wkf#gjboldklvpfpAFDJM#Nf{j`lpwbqwp`fmwqfkfjdkwbggjmdJpobmgbppfwpFnsjqfP`kllofeelqwgjqf`wmfbqoznbmvboPfof`w-\\t\\tLmfiljmfgnfmv!=SkjojsbtbqgpkbmgofjnslqwLeej`fqfdbqgphjoopmbwjlmPslqwpgfdqfftffhoz#+f-d-afkjmggl`wlqolddfgvmjwfg?,a=?,afdjmpsobmwpbppjpwbqwjpwjppvfg033s{\\u007F`bmbgbbdfm`zp`kfnfqfnbjmAqbyjopbnsofoldl!=afzlmg.p`bofb``fswpfqufgnbqjmfEllwfq`bnfqb?,k2=\\t\\\\elqn!ofbufppwqfpp!#,=\\u000E\\t-dje!#lmolbgolbgfqL{elqgpjpwfqpvqujuojpwfmefnbofGfpjdmpjyf>!bssfbowf{w!=ofufopwkbmhpkjdkfqelq`fgbmjnbobmzlmfBeqj`bbdqffgqf`fmwSflsof?aq#,=tlmgfqsqj`fpwvqmfg\\u007F\\u007F#x~8nbjm!=jmojmfpvmgbztqbs!=ebjofg`fmpvpnjmvwfafb`lmrvlwfp263s{\\u007Ffpwbwfqfnlwffnbjo!ojmhfgqjdkw8pjdmboelqnbo2-kwnopjdmvssqjm`feolbw9-smd!#elqvn-B``fppsbsfqpplvmgpf{wfmgKfjdkwpojgfqVWE.;!%bns8#Afelqf-#TjwkpwvgjlltmfqpnbmbdfsqlejwiRvfqzbmmvbosbqbnpalvdkwebnlvpdlldofolmdfqj((*#xjpqbfopbzjmdgf`jgfklnf!=kfbgfqfmpvqfaqbm`ksjf`fpaol`h8pwbwfgwls!=?qb`jmdqfpjyf..%dw8sb`jwzpf{vboavqfbv-isd!#23/333lawbjmwjwofpbnlvmw/#Jm`-`lnfgznfmv!#ozqj`pwlgbz-jmgffg`lvmwz\\\\oldl-EbnjozollhfgNbqhfwopf#jeSobzfqwvqhfz*8ubq#elqfpwdjujmdfqqlqpGlnbjm~fopfxjmpfqwAold?,ellwfqoldjm-ebpwfqbdfmwp?algz#23s{#3sqbdnbeqjgbzivmjlqgloobqsob`fg`lufqpsovdjm6/333#sbdf!=alpwlm-wfpw+bubwbqwfpwfg\\\\`lvmwelqvnpp`kfnbjmgf{/ejoofgpkbqfpqfbgfqbofqw+bssfbqPvanjwojmf!=algz!=\\t)#WkfWklvdkpffjmdifqpfzMftp?,ufqjezf{sfqwjmivqztjgwk>@llhjfPWBQW#b`qlpp\\\\jnbdfwkqfbgmbwjufsl`hfwal{!=\\tPzpwfn#Gbujg`bm`fqwbaofpsqlufgBsqjo#qfboozgqjufqjwfn!=nlqf!=albqgp`lolqp`bnsvpejqpw#\\u007F\\u007F#X^8nfgjb-dvjwbqejmjpktjgwk9pkltfgLwkfq#-sks!#bppvnfobzfqptjoplmpwlqfpqfojfeptfgfm@vpwlnfbpjoz#zlvq#Pwqjmd\\t\\tTkjowbzolq`ofbq9qfplqweqfm`kwklvdk!*#(#!?algz=avzjmdaqbmgpNfnafqmbnf!=lssjmdpf`wlq6s{8!=upsb`fslpwfqnbilq#`leeffnbqwjmnbwvqfkbssfm?,mbu=hbmpbpojmh!=Jnbdfp>ebopftkjof#kpsb`f3%bns8#\\t\\tJm##sltfqSlophj.`lolqilqgbmAlwwlnPwbqw#.`lvmw1-kwnomftp!=32-isdLmojmf.qjdkwnjoofqpfmjlqJPAM#33/333#dvjgfpubovf*f`wjlmqfsbjq-{no!##qjdkwp-kwno.aol`hqfdF{s9klufqtjwkjmujqdjmsklmfp?,wq=\\u000Evpjmd#\\t\\nubq#=\\$*8\\t\\n?,wg=\\t?,wq=\\tabkbpbaqbpjodbofdlnbdzbqslophjpqsphj4]4C5d\\bTA\\nzk\\u000BBl\\bQ\\u007F\\u000BUm\\u0005Gx\\bSM\\nmC\\bTA\\twQ\\nd}\\bW@\\bTl\\bTF\\ti@\\tcT\\u000BBM\\u000B|j\\u0004BV\\tqw\\tcC\\bWI\\npa\\tfM\\n{Z\\u0005{X\\bTF\\bVV\\bVK\\t\\u007Fm\\u0004kF\\t[]\\bPm\\bTv\\nsI\\u000Bpg\\t[I\\bQp\\u0004mx\\u000B_W\\n^M\\npe\\u000BQ}\\u000BGu\\nel\\npe\\u0004Ch\\u0004BV\\bTA\\tSo\\nzk\\u000BGL\\u000BxD\\nd[\\u0005Jz\\u0005MY\\bQp\\u0004li\\nfl\\npC\\u0005{B\\u0005Nt\\u000BwT\\ti_\\bTg\\u0004QQ\\n|p\\u000BXN\\bQS\\u000BxD\\u0004QC\\bWZ\\tpD\\u000BVS\\bTW\\u0005Nt\\u0004Yh\\nzu\\u0004Kj\\u0005N}\\twr\\tHa\\n_D\\tj`\\u000BQ}\\u000BWp\\nxZ\\u0004{c\\tji\\tBU\\nbD\\u0004a|\\tTn\\tpV\\nZd\\nmC\\u000BEV\\u0005{X\\tc}\\tTo\\bWl\\bUd\\tIQ\\tcg\\u000Bxs\\nXW\\twR\\u000Bek\\tc}\\t]y\\tJn\\nrp\\neg\\npV\\nz\\\\\\u0005{W\\npl\\nz\\\\\\nzU\\tPc\\t`{\\bV@\\nc|\\bRw\\ti_\\bVb\\nwX\\tHv\\u0004Su\\bTF\\u000B_W\\u000BWs\\u000BsI\\u0005m\\u007F\\nTT\\ndc\\tUS\\t}f\\tiZ\\bWz\\tc}\\u0004MD\\tBe\\tiD\\u000B@@\\bTl\\bPv\\t}t\\u0004Sw\\u0004M`\\u000BnU\\tkW\\u000Bed\\nqo\\u000BxY\\tA|\\bTz\\u000By`\\u0004BR\\u0004BM\\tia\\u0004XU\\nyu\\u0004n^\\tfL\\tiI\\nXW\\tfD\\bWz\\bW@\\tyj\\t\\u007Fm\\tav\\tBN\\u000Bb\\\\\\tpD\\bTf\\nY[\\tJn\\bQy\\t[^\\u000BWc\\u000Byu\\u0004Dl\\u0004CJ\\u000BWj\\u000BHR\\t`V\\u000BuW\\tQy\\np@\\u000BGu\\u0005pl\\u0004Jm\\bW[\\nLP\\nxC\\n`m\\twQ\\u0005ui\\u0005\\u007FR\\nbI\\twQ\\tBZ\\tWV\\u0004BR\\npg\\tcg\\u0005ti\\u0004CW\\n_y\\tRg\\bQa\\u000BQB\\u000BWc\\nYb\\u0005le\\ngE\\u0004Su\\nL[\\tQ\\u007F\\tea\\tdj\\u000B]W\\nb~\\u0004M`\\twL\\bTV\\bVH\\nt\\u007F\\npl\\t|b\\u0005s_\\bU|\\bTa\\u0004oQ\\u0005lv\\u0004Sk\\u0004M`\\bTv\\u000BK}\\nfl\\tcC\\u0004oQ\\u0004BR\\tHk\\t|d\\bQp\\tHK\\tBZ\\u000BHR\\bPv\\u000BLx\\u000BEZ\\bT\\u007F\\bTv\\tiD\\u0005oD\\u0005MU\\u000BwB\\u0004Su\\u0005k`\\u0004St\\ntC\\tPl\\tKg\\noi\\tjY\\u000BxY\\u0004h}\\nzk\\bWZ\\t\\u007Fm\\u000Be`\\tTB\\tfE\\nzk\\t`z\\u0004Yh\\nV|\\tHK\\tAJ\\tAJ\\bUL\\tp\\\\\\tql\\nYc\\u0004Kd\\nfy\\u0004Yh\\t[I\\u000BDg\\u0004Jm\\n]n\\nlb\\bUd\\n{Z\\tlu\\tfs\\u0004oQ\\bTW\\u0004Jm\\u000BwB\\tea\\u0004Yh\\u0004BC\\tsb\\tTn\\nzU\\n_y\\u000BxY\\tQ]\\ngw\\u0004mt\\tO\\\\\\ntb\\bWW\\bQy\\tmI\\tV[\\ny\\\\\\naB\\u000BRb\\twQ\\n]Q\\u0004QJ\\bWg\\u000BWa\\bQj\\ntC\\bVH\\nYm\\u000Bxs\\bVK\\nel\\bWI\\u000BxY\\u0004Cq\\ntR\\u000BHV\\bTl\\bVw\\tay\\bQa\\bVV\\t}t\\tdj\\nr|\\tp\\\\\\twR\\n{i\\nTT\\t[I\\ti[\\tAJ\\u000Bxs\\u000B_W\\td{\\u000BQ}\\tcg\\tTz\\tA|\\tCj\\u000BLm\\u0005N}\\u0005m\\u007F\\nbK\\tdZ\\tp\\\\\\t`V\\tsV\\np@\\tiD\\twQ\\u000BQ}\\bTf\\u0005ka\\u0004Jm\\u000B@@\\bV`\\tzp\\n@N\\u0004Sw\\tiI\\tcg\\noi\\u0004Su\\bVw\\u0004lo\\u0004Cy\\tc}\\u000Bb\\\\\\tsU\\u0004BA\\bWI\\bTf\\nxS\\tVp\\nd|\\bTV\\u000BbC\\tNo\\u0005Ju\\nTC\\t|`\\n{Z\\tD]\\bU|\\tc}\\u0005lm\\bTl\\tBv\\tPl\\tc}\\bQp\\t\\u007Fm\\nLk\\tkj\\n@N\\u0004Sb\\u0004KO\\tj_\\tp\\\\\\nzU\\bTl\\bTg\\bWI\\tcf\\u0004XO\\bWW\\ndz\\u0004li\\tBN\\nd[\\bWO\\u0004MD\\u000BKC\\tdj\\tI_\\bVV\\ny\\\\\\u000BLm\\u0005xl\\txB\\tkV\\u000Bb\\\\\\u000BJW\\u000BVS\\tVx\\u000BxD\\td{\\u0004MD\\bTa\\t|`\\u000BPz\\u0004R}\\u000BWs\\u0004BM\\nsI\\u0004CN\\bTa\\u0004Jm\\npe\\ti_\\npV\\nrh\\tRd\\tHv\\n~A\\nxR\\u000BWh\\u000BWk\\nxS\\u000BAz\\u000BwX\\nbI\\u0004oQ\\tfw\\nqI\\nV|\\nun\\u0005z\\u007F\\u000Bpg\\td\\\\\\u000BoA\\u0005{D\\ti_\\u0005xB\\bT\\u007F\\t`V\\u0005qr\\tTT\\u0004g]\\u0004CA\\u000BuR\\tVJ\\tT`\\npw\\u000BRb\\tI_\\nCx\\u0004Ro\\u000BsI\\u0004Cj\\u0004Kh\\tBv\\tWV\\u0004BB\\u0005oD\\u0005{D\\nhc\\u0004Km\\u000B^R\\tQE\\n{I\\np@\\nc|\\u0005Gt\\tc}\\u0004Dl\\nzU\\u0005qN\\tsV\\u0005k}\\tHh\\u000B|j\\nqo\\u0005u|\\tQ]\\u000Bek\\u0005\\u007FZ\\u0004M`\\u0004St\\npe\\tdj\\bVG\\u000BeE\\t\\u007Fm\\u000BWc\\u0004|I\\n[W\\tfL\\bT\\u007F\\tBZ\\u0004Su\\u000BKa\\u0004Cq\\u0005Nt\\u0004Y[\\nqI\\bTv\\tfM\\ti@\\t}f\\u0004B\\\\\\tQy\\u000BBl\\bWg\\u0004XD\\u0005kc\\u000Bx[\\bVV\\tQ]\\t\\u007Fa\\tPy\\u000BxD\\nfI\\t}f\\u0005oD\\tdj\\tSG\\u0005ls\\t~D\\u0004CN\\n{Z\\t\\\\v\\n_D\\nhc\\u000Bx_\\u0004C[\\tAJ\\nLM\\tVx\\u0004CI\\tbj\\tc^\\tcF\\ntC\\u0004Sx\\twr\\u0004XA\\bU\\\\\\t|a\\u000BK\\\\\\bTV\\bVj\\nd|\\tfs\\u0004CX\\ntb\\bRw\\tVx\\tAE\\tA|\\bT\\u007F\\u0005Nt\\u000BDg\\tVc\\bTl\\u0004d@\\npo\\t\\u007FM\\tcF\\npe\\tiZ\\tBo\\bSq\\nfH\\u0004l`\\bTx\\bWf\\tHE\\u000BF{\\tcO\\tfD\\nlm\\u000BfZ\\nlm\\u000BeU\\tdG\\u0004BH\\bTV\\tSi\\u0005MW\\nwX\\nz\\\\\\t\\\\c\\u0004CX\\nd}\\tl}\\bQp\\bTV\\tF~\\bQ\\u007F\\t`i\\ng@\\u0005nO\\bUd\\bTl\\nL[\\twQ\\tji\\ntC\\t|J\\nLU\\naB\\u000BxY\\u0004Kj\\tAJ\\u0005uN\\ti[\\npe\\u0004Sk\\u000BDg\\u000Bx]\\bVb\\bVV\\nea\\tkV\\nqI\\bTa\\u0004Sk\\nAO\\tpD\\ntb\\nts\\nyi\\bVg\\ti_\\u000B_W\\nLk\\u0005Nt\\tyj\\tfM\\u0004R\\u007F\\tiI\\bTl\\u000BwX\\tsV\\u000BMl\\nyu\\tAJ\\bVj\\u0004KO\\tWV\\u000BA}\\u000BW\\u007F\\nrp\\tiD\\u000B|o\\u0005lv\\u000BsI\\u0004BM\\td~\\tCU\\bVb\\u0004eV\\npC\\u000BwT\\tj`\\tc}\\u000Bxs\\u000Bps\\u000Bvh\\tWV\\u000BGg\\u000BAe\\u000BVK\\u000B]W\\trg\\u000BWc\\u0005F`\\tBr\\u000Bb\\\\\\tdZ\\bQp\\nqI\\u0004kF\\nLk\\u000BAR\\bWI\\bTg\\tbs\\tdw\\n{L\\n_y\\tiZ\\bTA\\tlg\\bVV\\bTl\\tdk\\n`k\\ta{\\ti_\\u0005{A\\u0005wj\\twN\\u000B@@\\bTe\\ti_\\n_D\\twL\\nAH\\u000BiK\\u000Bek\\n[]\\tp_\\tyj\\bTv\\tUS\\t[r\\n{I\\nps\\u0005Gt\\u000BVK\\npl\\u0004S}\\u000BWP\\t|d\\u0004MD\\u000BHV\\bT\\u007F\\u0004R}\\u0004M`\\bTV\\bVH\\u0005lv\\u0004Ch\\bW[\\u0004Ke\\tR{\\u000B^R\\tab\\tBZ\\tVA\\tB`\\nd|\\nhs\\u0004Ke\\tBe\\u0004Oi\\tR{\\td\\\\\\u0005nB\\bWZ\\tdZ\\tVJ\\u0005Os\\t\\u007Fm\\u0004uQ\\u000BhZ\\u0004Q@\\u0004QQ\\nfI\\bW[\\u0004B\\\\\\u0004li\\nzU\\nMd\\u0004M`\\nxS\\bVV\\n\\\\}\\u000BxD\\t\\u007Fm\\bTp\\u0004IS\\nc|\\tkV\\u0005i~\\tV{\\u000BhZ\\t|b\\bWt\\n@R\\u000BoA\\u000BnU\\bWI\\tea\\tB`\\tiD\\tc}\\tTz\\u0004BR\\u000BQB\\u0005Nj\\tCP\\t[I\\bTv\\t`W\\u0005uN\\u000Bpg\\u000Bpg\\u000BWc\\tiT\\tbs\\twL\\tU_\\tc\\\\\\t|h\\u000BKa\\tNr\\tfL\\nq|\\nzu\\nz\\\\\\tNr\\bUg\\t|b\\u0004m`\\bTv\\nyd\\nrp\\bWf\\tUX\\u0004BV\\nzk\\nd}\\twQ\\t}f\\u0004Ce\\u000Bed\\bTW\\bSB\\nxU\\tcn\\bTb\\ne\\u007F\\ta\\\\\\tSG\\bU|\\npV\\nN\\\\\\u0004Kn\\u000BnU\\tAt\\tpD\\u000B^R\\u000BIr\\u0004b[\\tR{\\tdE\\u000BxD\\u000BWK\\u000BWA\\bQL\\bW@\\u0004Su\\bUd\\nDM\\tPc\\u0004CA\\u0004Dl\\u0004oQ\\tHs\\u0005wi\\u0004ub\\n\\u007Fa\\bQp\\u0005Ob\\nLP\\bTl\\u0004Y[\\u000BK}\\tAJ\\bQ\\u007F\\u0004n^\\u000BsA\\bSM\\nqM\\bWZ\\n^W\\u000Bz{\\u0004S|\\tfD\\bVK\\bTv\\bPv\\u0004BB\\tCP\\u0004dF\\tid\\u000Bxs\\u0004mx\\u000Bws\\tcC\\ntC\\tyc\\u0005M`\\u000BW\\u007F\\nrh\\bQp\\u000BxD\\u0004\\\\o\\nsI\\u0004_k\\nzu\\u0004kF\\tfD\\u0004Xs\\u0004XO\\tjp\\bTv\\u0004BS\\u0005{B\\tBr\\nzQ\\nbI\\tc{\\u0004BD\\u0004BV\\u0005nO\\bTF\\tca\\u0005Jd\\tfL\\tPV\\tI_\\nlK\\u0004`o\\twX\\npa\\tgu\\bP}\\u0005{^\\bWf\\n{I\\tBN\\npa\\u0004Kl\\u000Bpg\\tcn\\tfL\\u000Bvh\\u0004Cq\\bTl\\u000BnU\\bSq\\u0004Cm\\twR\\bUJ\\npe\\nyd\\nYg\\u0004Cy\\u000BKW\\tfD\\nea\\u0004oQ\\tj_\\tBv\\u0004nM\\u000BID\\bTa\\nzA\\u0005pl\\n]n\\bTa\\tR{\\tfr\\n_y\\bUg\\u0005{X\\u0005kk\\u000BxD\\u0004|I\\u0005xl\\nfy\\u0004Ce\\u000BwB\\nLk\\u000Bd]\\noi\\n}h\\tQ]\\npe\\bVw\\u0004Hk\\u0004OQ\\nzk\\tAJ\\npV\\bPv\\ny\\\\\\tA{\\u0004Oi\\bSB\\u0004XA\\u000BeE\\tjp\\nq}\\tiD\\u0005qN\\u000B^R\\t\\u007Fm\\tiZ\\tBr\\bVg\\noi\\n\\\\X\\tU_\\nc|\\u000BHV\\bTf\\tTn\\u0004\\\\N\\u0004\\\\N\\nuB\\u0005lv\\nyu\\tTd\\bTf\\bPL\\u000B]W\\tdG\\nA`\\nw^\\ngI\\npe\\tdw\\nz\\\\\\u0005ia\\bWZ\\tcF\\u0004Jm\\n{Z\\bWO\\u0004_k\\u0004Df\\u0004RR\\td\\\\\\bVV\\u000Bxs\\u0004BN\\u0005ti\\u0004lm\\tTd\\t]y\\u000BHV\\tSo\\u000B|j\\u0004XX\\tA|\\u000BZ^\\u000BGu\\bTW\\u0005M`\\u0004kF\\u000BhZ\\u000BVK\\tdG\\u000BBl\\tay\\nxU\\u0005qE\\u0005nO\\bVw\\nqI\\u0004CX\\ne\\u007F\\tPl\\bWO\\u000BLm\\tdL\\u0005uH\\u0004Cm\\tdT\\u0004fn\\u000BwB\\u0005ka\\u000BnU\\n@M\\nyT\\tHv\\t\\\\}\\u0004Kh\\td~\\u0004Yh\\u0005k}\\neR\\td\\\\\\bWI\\t|b\\tHK\\tiD\\bTW\\u0005MY\\npl\\bQ_\\twr\\u000BAx\\tHE\\bTg\\bSq\\u0005vp\\u000Bb\\\\\\bWO\\nOl\\nsI\\nfy\\u000BID\\t\\\\c\\n{Z\\n^~\\npe\\nAO\\tTT\\u000Bxv\\u0004k_\\bWO\\u000B|j\\u000BwB\\tQy\\ti@\\tPl\\tHa\\tdZ\\u0005k}\\u0004ra\\tUT\\u000BJc\\u000Bed\\np@\\tQN\\nd|\\tkj\\tHk\\u0004M`\\noi\\twr\\td\\\\\\nlq\\no_\\nlb\\nL[\\tac\\u0004BB\\u0004BH\\u0004Cm\\npl\\tIQ\\bVK\\u000Bxs\\n`e\\u000BiK\\npa\\u0004Oi\\tUS\\bTp\\tfD\\nPG\\u0005kk\\u0004XA\\nz\\\\\\neg\\u000BWh\\twR\\u0005qN\\nqS\\tcn\\u0004lo\\nxS\\n^W\\tBU\\nt\\u007F\\tHE\\tp\\\\\\tfF\\tfw\\bVV\\bW@\\tak\\u000BVK\\u0005ls\\tVJ\\bVV\\u000BeE\\u0004\\\\o\\nyX\\nYm\\u0004M`\\u0005lL\\nd|\\nzk\\tA{\\u0005sE\\twQ\\u0004XT\\nt\\u007F\\tPl\\t]y\\u000BwT\\u0005{p\\u0004MD\\u000Bb\\\\\\tQ]\\u0004Kj\\tJn\\nAH\\u000BRb\\tBU\\tHK\\t\\\\c\\nfI\\u0005m\\u007F\\nqM\\n@R\\tSo\\noi\\u0004BT\\tHv\\n_y\\u0004Kh\\tBZ\\t]i\\bUJ\\tV{\\u0004Sr\\nbI\\u000BGg\\ta_\\bTR\\nfI\\nfl\\t[K\\tII\\u0004S|\\u000BuW\\tiI\\bWI\\nqI\\u000B|j\\u0004BV\\bVg\\bWZ\\u0004kF\\u000Bx]\\bTA\\tab\\tfr\\ti@\\tJd\\tJd\\u000Bps\\nAO\\bTa\\u0005xu\\tiD\\nzk\\t|d\\t|`\\bW[\\tlP\\tdG\\bVV\\u000Bw}\\u000BqO\\ti[\\bQ\\u007F\\bTz\\u000BVF\\twN\\u0005ts\\tdw\\bTv\\neS\\ngi\\tNr\\u0005yS\\npe\\bVV\\bSq\\n`m\\tyj\\tBZ\\u000BWX\\bSB\\tc\\\\\\nUR\\t[J\\tc_\\u0004nM\\bWQ\\u000BAx\\nMd\\tBr\\u0005ui\\u000BxY\\bSM\\u000BWc\\u000B|j\\u000Bxs\\t}Q\\tBO\\bPL\\bWW\\tfM\\nAO\\tPc\\u000BeU\\u0004e^\\bTg\\nqI\\tac\\bPv\\tcF\\u0004oQ\\tQ\\u007F\\u000BhZ\\u0005ka\\nz\\\\\\tiK\\tBU\\n`k\\tCP\\u0004S|\\u0004M`\\n{I\\tS{\\u0004_O\\tBZ\\u0004Zi\\u0004Sk\\tps\\tp\\\\\\nYu\\n]s\\nxC\\bWt\\nbD\\tkV\\u000BGu\\u0005yS\\nqA\\t[r\\neK\\u0004M`\\tdZ\\u0005lL\\bUg\\bTl\\nbD\\tUS\\u000Bb\\\\\\tpV\\ncc\\u0004S\\\\\\tct\\t`z\\bPL\\u000BWs\\nA`\\neg\\bSq\\u0005uE\\u0004CR\\u000BDg\\t`W\\u000Bz{\\u000BWc\\u0004Sk\\u0004Sk\\tbW\\bUg\\tea\\nxZ\\tiI\\tUX\\tVJ\\nqn\\tS{\\u000BRb\\bTQ\\npl\\u0005Gt\\u000BuW\\u0005uj\\npF\\nqI\\tfL\\t[I\\tia\\u0004XO\\nyu\\u000BDg\\u000Bed\\tq{\\u0004VG\\bQ\\u007F\\u0005ka\\tVj\\tkV\\txB\\nd|\\np@\\tQN\\tPc\\tps\\u0004]j\\tkV\\toU\\bTp\\nzU\\u0005nB\\u000BB]\\ta{\\bV@\\n]n\\u0004m`\\tcz\\tR{\\u0004m`\\bQa\\u000BwT\\bSM\\u0005MY\\u0005qN\\tdj\\u0005~s\\u000BQ}\\u0005MY\\u000BMB\\tBv\\twR\\bRg\\u000BQ}\\tql\\u000BKC\\nrm\\u0005xu\\u0004CC\\u000BwB\\u000Bvh\\tBq\\u0004Xq\\npV\\ti_\\u0005Ob\\u0005uE\\nbd\\nqo\\u000B{i\\nC~\\tBL\\u000BeE\\u0005uH\\bVj\\u0004Ey\\u0004Gz\\u000BzR\\u000B{i\\tcf\\n{Z\\n]n\\u0004XA\\u000BGu\\u000BnU\\thS\\u000BGI\\nCc\\tHE\\bTA\\tHB\\u0004BH\\u0004Cj\\nCc\\bTF\\tHE\\nXI\\tA{\\bQ\\u007F\\tc\\\\\\u000BmO\\u000BWX\\nfH\\np@\\u0005MY\\bTF\\nlK\\tBt\\nzU\\tTT\\u0004Km\\u000BwT\\npV\\ndt\\u000ByI\\tVx\\tQ\\u007F\\tRg\\tTd\\nzU\\bRS\\nLM\\twA\\u0004nM\\tTn\\ndS\\t]g\\nLc\\u000BwB\\t}t\\t[I\\tCP\\u0004kX\\u000BFm\\u000BhZ\\u0005m\\u007F\\ti[\\np@\\u000BQ}\\u000BW\\u007F\\t|d\\nMO\\nMd\\tf_\\tfD\\tcJ\\tHz\\u000BRb\\tio\\tPy\\u0004Y[\\nxU\\tct\\u000B@@\\tww\\bPv\\u0004BM\\u0004FF\\ntb\\u0005v|\\u000BKm\\tBq\\tBq\\u0004Kh\\u0004`o\\nZd\\u0004XU\\ti]\\t|`\\tSt\\u0004B\\\\\\bQ\\u007F\\u000B_W\\tTJ\\nqI\\t|a\\tA{\\u000BuP\\u0004MD\\tPl\\nxR\\tfL\\u000Bws\\tc{\\td\\\\\\bV`\\neg\\tHK\\u0005kc\\nd|\\bVV\\ny\\\\\\u0005kc\\ti]\\bVG\\t`V\\tss\\tI_\\tAE\\tbs\\tdu\\nel\\tpD\\u000BW\\u007F\\nqs\\u0005lv\\bSM\\u0004Zi\\u000BVK\\u0005ia\\u000BQB\\tQ\\u007F\\n{Z\\bPt\\u000BKl\\nlK\\nhs\\ndS\\bVK\\u0005mf\\nd^\\tkV\\tcO\\nc|\\bVH\\t\\\\]\\bTv\\bSq\\tmI\\u000BDg\\tVJ\\tcn\\ny\\\\\\bVg\\bTv\\nyX\\bTF\\t]]\\bTp\\noi\\nhs\\u000BeU\\nBf\\tdj\\u0005Mr\\n|p\\t\\\\g\\t]r\\bVb\\u0005{D\\nd[\\u0004XN\\tfM\\tO\\\\\\u0005s_\\tcf\\tiZ\\u0004XN\\u000BWc\\tqv\\n`m\\tU^\\u0005oD\\nd|\\u000BGg\\tdE\\u000Bwf\\u0004lo\\u0004u}\\nd|\\u0005oQ\\t`i\\u0004Oi\\u000BxD\\ndZ\\nCx\\u0004Yw\\nzk\\ntb\\ngw\\tyj\\tB`\\nyX\\u000Bps\\ntC\\u000BpP\\u000Bqw\\bPu\\bPX\\tDm\\npw\\u0005Nj\\tss\\taG\\u000Bxs\\bPt\\noL\\u0004Gz\\tOk\\ti@\\ti]\\u0004eC\\tIQ\\tii\\tdj\\u000B@J\\t|d\\u0005uh\\bWZ\\u000BeU\\u000BnU\\bTa\\tcC\\u0004g]\\nzk\\u0004Yh\\bVK\\nLU\\np@\\ntb\\ntR\\tCj\\u000BNP\\ti@\\bP{\\n\\\\}\\n{c\\nwX\\tfL\\bVG\\tc{\\t|`\\tAJ\\t|C\\tfD\\u0005ln\\t|d\\tbs\\nqI\\u0005{B\\u000BAx\\np@\\nzk\\u000BRb\\u0005Os\\u000BWS\\u0004e^\\u000BD_\\tBv\\u000BWd\\bVb\\u000Bxs\\u000BeE\\bRw\\n]n\\n|p\\u000Bg|\\tfw\\u0005kc\\bTI\\u0005ka\\n\\\\T\\u0004Sp\\tju\\u000Bps\\npe\\u0005u|\\u000BGr\\bVe\\tCU\\u0004]M\\u0004XU\\u000BxD\\bTa\\tIQ\\u000BWq\\tCU\\tam\\tdj\\bSo\\u0004Sw\\u000BnU\\u0004Ch\\tQ]\\u0005s_\\bPt\\tfS\\bTa\\t\\\\}\\n@O\\u0004Yc\\tUZ\\bTx\\npe\\u000BnU\\nzU\\t|}\\tiD\\nz\\\\\\bSM\\u000BxD\\u0004BR\\nzQ\\tQN\\u0004]M\\u0004Yh\\nLP\\u000BFm\\u000BLX\\u0005vc\\u000Bql\\u0005ka\\tHK\\bVb\\ntC\\nCy\\bTv\\nuV\\u0004oQ\\t`z\\t[I\\tB`\\u000BRb\\tyj\\tsb\\u000BWs\\bTl\\tkV\\u000Bed\\ne\\u007F\\u0005lL\\u000BxN\\t\\u007Fm\\nJn\\tjY\\u000BxD\\bVb\\bSq\\u000Byu\\twL\\u000BXL\\bTA\\tpg\\tAt\\tnD\\u0004XX\\twR\\npl\\nhw\\u0005yS\\nps\\tcO\\bW[\\u000B|j\\u0004XN\\tsV\\tp\\\\\\tBe\\nb~\\nAJ\\n]e\\u0005k`\\u0005qN\\tdw\\tWV\\tHE\\u000BEV\\u0005Jz\\tid\\tB`\\tzh\\u0005E]\\tfD\\bTg\\u0005qN\\bTa\\tja\\u0004Cv\\bSM\\nhc\\bUe\\u0005t_\\tie\\u0004g]\\twQ\\nPn\\bVB\\tjw\\bVg\\u000BbE\\tBZ\\u000BRH\\bP{\\tjp\\n\\\\}\\ta_\\tcC\\t|a\\u000BD]\\tBZ\\ti[\\tfD\\u000BxW\\no_\\td\\\\\\n_D\\ntb\\t\\\\c\\tAJ\\nlK\\u0004oQ\\u0004lo\\u000BLx\\u000BM@\\bWZ\\u0004Kn\\u000Bpg\\nTi\\nIv\\n|r\\u000B@}\\u0005Jz\\u0005Lm\\u0005Wh\\u0005k}\\u0005ln\\u000BxD\\n]s\\u0004gc\\u000Bps\\tBr\\bTW\\u000BBM\\u0005tZ\\nBY\\u0004DW\\tjf\\u000BSW\\u0004C}\\nqo\\tdE\\tmv\\tIQ\\bPP\\bUb\\u0005lv\\u0004BC\\nzQ\\t[I\\u000Bgl\\nig\\bUs\\u0004BT\\u000BbC\\bSq\\tsU\\tiW\\nJn\\tSY\\tHK\\trg\\npV\\u000BID\\u000B|j\\u0004KO\\t`S\\t|a`vbmglfmujbqnbgqjgavp`bqjmj`jlwjfnslslqrvf`vfmwbfpwbglsvfgfmivfdlp`lmwqbfpw/Mmmlnaqfwjfmfmsfqejonbmfqbbnjdlp`jvgbg`fmwqlbvmrvfsvfgfpgfmwqlsqjnfqsqf`jlpfd/Vmavfmlpuloufqsvmwlppfnbmbkba/Abbdlpwlmvfulpvmjglp`bqolpfrvjslmj/]lpnv`klpbodvmb`lqqfljnbdfmsbqwjqbqqjabnbq/Abklnaqffnsoflufqgbg`bnajlnv`kbpevfqlmsbpbglo/Amfbsbqf`fmvfubp`vqplpfpwbabrvjfqlojaqlp`vbmwlb``fplnjdvfoubqjlp`vbwqlwjfmfpdqvslppfq/Mmfvqlsbnfgjlpeqfmwfb`fq`bgfn/Mplefqwb`l`kfpnlgfoljwbojbofwqbpbod/Vm`lnsqb`vbofpf{jpwf`vfqslpjfmglsqfmpboofdbqujbifpgjmfqlnvq`jbslgq/Msvfpwlgjbqjlsvfaolrvjfqfnbmvfosqlsjl`qjpjp`jfqwlpfdvqlnvfqwfevfmwf`fqqbqdqbmgffef`wlsbqwfpnfgjgbsqlsjbleqf`fwjfqqbf.nbjoubqjbpelqnbpevwvqllaifwlpfdvjqqjfpdlmlqnbpnjpnlp/Vmj`l`bnjmlpjwjlpqby/_mgfajglsqvfabwlofglwfm/Abifp/Vpfpsfql`l`jmblqjdfmwjfmgb`jfmwl`/Mgjykbaobqpfq/Abobwjmbevfqybfpwjoldvfqqbfmwqbq/E{jwlo/_sfybdfmgbu/Agflfujwbqsbdjmbnfwqlpibujfqsbgqfpe/M`jo`bafyb/Mqfbppbojgbfmu/Alibs/_mbavplpajfmfpwf{wlpoofubqsvfgbmevfqwf`ln/Vm`obpfpkvnbmlwfmjglajoablvmjgbgfpw/Mpfgjwbq`qfbgl<X<W=c=k=n<R<V<\\\\<V<T<W<T=a=n<R<^=m<Y<Y<_<R<S=l<T=n<\\\\<V<Y=e<Y=o<Z<Y<v<\\\\<V<]<Y<[<]=g<W<R<Q<T<~=m<Y<S<R<X<A=n<R=n<R<P=k<Y<P<Q<Y=n<W<Y=n=l<\\\\<[<R<Q<\\\\<_<X<Y<P<Q<Y<x<W=c<s=l<T<Q<\\\\=m<Q<T=i=n<Y<P<V=n<R<_<R<X<^<R=n=n<\\\\<P<M<D<|<P<\\\\=c<K=n<R<^<\\\\=m<^<\\\\<P<Y<P=o<N<\\\\<V<X<^<\\\\<Q<\\\\<P=a=n<T=a=n=o<~<\\\\<P=n<Y=i<S=l<R=n=o=n<Q<\\\\<X<X<Q=c<~<R=n=n=l<T<Q<Y<U<~<\\\\=m<Q<T<P=m<\\\\<P=n<R=n=l=o<]<r<Q<T<P<T=l<Q<Y<Y<r<r<r<W<T=j=a=n<\\\\<r<Q<\\\\<Q<Y<P<X<R<P<P<R<U<X<^<Y<R<Q<R=m=o<X\\u000CHy\\u000CIk\\u000CHU\\u000CId\\u000CHy\\u000CIl\\u000CHT\\u000CIk\\u000CHy\\u000CHR\\u000CHy\\u000CIg\\u000CHx\\u000CH\\\\\\u000CHF\\u000CH\\\\\\u000CHD\\u000CIk\\u000CHc\\u000CHy\\u000CHy\\u000CHS\\u000CHA\\u000CIl\\u000CHk\\u000CHT\\u000CHy\\u000CH\\\\\\u000CHH\\u000CIg\\u000CHU\\u000CIg\\u000CHj\\u000CHF\\u000CHU\\u000CIl\\u000CHC\\u000CHU\\u000CHC\\u000CHR\\u000CHH\\u000CHy\\u000CHI\\u000CHRibdqbm\\u000CHj\\u000CHp\\u000CHp\\u000CIg\\u000CHi\\u000CH@\\u000CHJ\\u000CIg\\u000CH{\\u000CHd\\u000CHp\\u000CHR\\u000CH{\\u000CHc\\u000CHU\\u000CHB\\u000CHk\\u000CHD\\u000CHY\\u000CHU\\u000CHC\\u000CIk\\u000CHI\\u000CIk\\u000CHI\\u000CIl\\u000CHt\\u000CH\\\\\\u000CHp\\u000CH@\\u000CHJ\\u000CIl\\u000CHy\\u000CHd\\u000CHp\\u000CIl\\u000CHY\\u000CIk\\u000CHD\\u000CHd\\u000CHD\\u000CHc\\u000CHU\\u000CH\\\\\\u000CHe\\u000CHT\\u000CHB\\u000CIk\\u000CHy\\u000CHB\\u000CHY\\u000CIg\\u000CH^\\u000CIk\\u000CHT\\u000CH@\\u000CHB\\u000CHd\\u000CHJ\\u000CIk\\u000CH\\u007F\\u000CH\\\\\\u000CHj\\u000CHB\\u000CH@\\u000CHT\\u000CHA\\u000CH\\\\\\u000CH@\\u000CHD\\u000CHv\\u000CH^\\u000CHB\\u000CHD\\u000CHj\\u000CH{\\u000CHT\\u000CIl\\u000CH^\\u000CIl4U5h5e4I5h5e5k4\\\\4K4N4B4]4U4C4C4K5h5e5k4\\\\5k4Y5d4]4V5f4]5o4K5j5d5h4K4D5f5j4U4]4Z4\\\\5h5o5k5j4K5f5d5i5n4K5h4U5h5f4K5j4K5h5o5j4A4F5e5n4D5h5d4A4E4K4B4]5m5n4[4U4D4C4]5o5j4I4\\\\4K5o5i4K4K4A4C4I5h4K5m5f5k4D4U4Z5o5f5m4D4A4G5d5i5j5d5k5d4O5j4K4@4C4K5h5k4K4_5h5i4U5j4C5h5f4_4U4D4]4Y5h5e5i5j4\\\\4D5k4K4O5j5k5i4G5h5o5j4F4K5h4K4A5f4G5i4Y4]4X4]4A4A5d5h5d5m5f4K4\\\\4K5h5o5h5i4]4E4K5j4F4K5h5m4O4D5d4B4K4Y4O5j4F4K5j5k4K5h5f4U4Z5d5d5n4C4K4D5j4B5f4]4D5j4F5h5o5i4X4K4M5d5k5f4K4D5d5n4Y4Y5d5i4K4]5n5i4O4A4C5j4A5j4U4C5i4]4O5f4K4A4E5o4F4D4C5d5j5f4@4D5i5j5k4F4A4F4@5k4E4_5j4E5f4F5i5o4]4E4V4^4E5j5m4_4D5f4F5h5h5k5h5j4K4F5h5o5n5h4D5h5i4K4U5j5k4O5d5h4X5f4M5j5d4]4O5i4K5m5f5o4D5o5h4\\\\4K4F4]4F4D4D4O5j5k5i4_4K5j5o4D5f4U5m5n4C4A4_5j5h5k5i4X4U4]4O5k5h4X5k4]5n4[4]4[5h4Dsqlejofpfquj`fgfebvowkjnpfoegfwbjop`lmwfmwpvsslqwpwbqwfgnfppbdfpv``fppebpkjlm?wjwof=`lvmwqzb``lvmw`qfbwfgpwlqjfpqfpvowpqvmmjmdsql`fpptqjwjmdlaif`wpujpjaoftfo`lnfbqwj`ofvmhmltmmfwtlqh`lnsbmzgzmbnj`aqltpfqsqjub`zsqlaofnPfquj`fqfpsf`wgjpsobzqfrvfpwqfpfquftfapjwfkjpwlqzeqjfmgplswjlmptlqhjmdufqpjlmnjoojlm`kbmmfotjmglt-bggqfppujpjwfgtfbwkfq`lqqf`wsqlgv`wfgjqf`welqtbqgzlv#`bmqfnlufgpvaif`w`lmwqlobq`kjuf`vqqfmwqfbgjmdojaqbqzojnjwfgnbmbdfqevqwkfqpvnnbqznb`kjmfnjmvwfpsqjubwf`lmwf{wsqldqbnpl`jfwzmvnafqptqjwwfmfmbaofgwqjddfqplvq`fpolbgjmdfofnfmwsbqwmfqejmboozsfqef`wnfbmjmdpzpwfnphffsjmd`vowvqf%rvlw8/ilvqmbosqlif`wpvqeb`fp%rvlw8f{sjqfpqfujftpabobm`fFmdojpk@lmwfmwwkqlvdkSofbpf#lsjmjlm`lmwb`wbufqbdfsqjnbqzujoobdfPsbmjpkdboofqzgf`ojmfnffwjmdnjppjlmslsvobqrvbojwznfbpvqfdfmfqbopsf`jfppfppjlmpf`wjlmtqjwfqp`lvmwfqjmjwjboqfslqwpejdvqfpnfnafqpklogjmdgjpsvwffbqojfqf{sqfppgjdjwbosj`wvqfBmlwkfqnbqqjfgwqbeej`ofbgjmd`kbmdfg`fmwqbouj`wlqzjnbdfp,qfbplmppwvgjfpefbwvqfojpwjmdnvpw#afp`kllopUfqpjlmvpvboozfsjplgfsobzjmddqltjmdlaujlvplufqobzsqfpfmwb`wjlmp?,vo=\\u000E\\ttqbssfqboqfbgz`fqwbjmqfbojwzpwlqbdfbmlwkfqgfphwlsleefqfgsbwwfqmvmvpvboGjdjwbo`bsjwboTfapjwfebjovqf`lmmf`wqfgv`fgBmgqljggf`bgfpqfdvobq#%bns8#bmjnbopqfofbpfBvwlnbwdfwwjmdnfwklgpmlwkjmdSlsvobq`bswjlmofwwfqp`bswvqfp`jfm`foj`fmpf`kbmdfpFmdobmg>2%bns8Kjpwlqz#>#mft#@fmwqbovsgbwfgPsf`jboMfwtlqhqfrvjqf`lnnfmwtbqmjmd@loofdfwlloabqqfnbjmpaf`bvpffof`wfgGfvwp`kejmbm`ftlqhfqprvj`hozafwtffmf{b`wozpfwwjmdgjpfbpfPl`jfwztfbslmpf{kjajw%ow8\\\"..@lmwqlo`obppfp`lufqfglvwojmfbwwb`hpgfuj`fp+tjmgltsvqslpfwjwof>!Nlajof#hjoojmdpkltjmdJwbojbmgqlssfgkfbujozfeef`wp.2\\$^*8\\t`lmejqn@vqqfmwbgubm`fpkbqjmdlsfmjmdgqbtjmdajoojlmlqgfqfgDfqnbmzqfobwfg?,elqn=jm`ovgftkfwkfqgfejmfgP`jfm`f`bwboldBqwj`ofavwwlmpobqdfpwvmjelqnilvqmfzpjgfabq@kj`bdlklojgbzDfmfqbosbppbdf/%rvlw8bmjnbwfeffojmdbqqjufgsbppjmdmbwvqboqlvdkoz-\\t\\tWkf#avw#mlwgfmpjwzAqjwbjm@kjmfpfob`h#lewqjavwfJqfobmg!#gbwb.eb`wlqpqf`fjufwkbw#jpOjaqbqzkvpabmgjm#eb`wbeebjqp@kbqofpqbgj`boaqlvdkwejmgjmdobmgjmd9obmd>!qfwvqm#ofbgfqpsobmmfgsqfnjvnsb`hbdfBnfqj`bFgjwjlm^%rvlw8Nfppbdfmffg#wlubovf>!`lnsof{ollhjmdpwbwjlmafojfufpnboofq.nlajofqf`lqgptbmw#wlhjmg#leEjqfel{zlv#bqfpjnjobqpwvgjfgnb{jnvnkfbgjmdqbsjgoz`ojnbwfhjmdglnfnfqdfgbnlvmwpelvmgfgsjlmffqelqnvobgzmbpwzklt#wl#Pvsslqwqfufmvff`lmlnzQfpvowpaqlwkfqplogjfqobqdfoz`boojmd-%rvlw8B``lvmwFgtbqg#pfdnfmwQlafqw#feelqwpSb`jej`ofbqmfgvs#tjwkkfjdkw9tf#kbufBmdfofpmbwjlmp\\\\pfbq`kbssojfgb`rvjqfnbppjufdqbmwfg9#ebopfwqfbwfgajddfpwafmfejwgqjujmdPwvgjfpnjmjnvnsfqkbspnlqmjmdpfoojmdjp#vpfgqfufqpfubqjbmw#qlof>!njppjmdb`kjfufsqlnlwfpwvgfmwplnflmff{wqfnfqfpwlqfalwwln9fuloufgboo#wkfpjwfnbsfmdojpktbz#wl##Bvdvpwpznalop@lnsbmznbwwfqpnvpj`bobdbjmpwpfqujmd~*+*8\\u000E\\tsbznfmwwqlvaof`lm`fsw`lnsbqfsbqfmwpsobzfqpqfdjlmpnlmjwlq#\\$\\$Wkf#tjmmjmdf{solqfbgbswfgDboofqzsqlgv`fbajojwzfmkbm`f`bqffqp*-#Wkf#`loof`wPfbq`k#bm`jfmwf{jpwfgellwfq#kbmgofqsqjmwfg`lmplofFbpwfqmf{slqwptjmgltp@kbmmfojoofdbomfvwqbopvddfpw\\\\kfbgfqpjdmjmd-kwno!=pfwwofgtfpwfqm`bvpjmd.tfahjw`objnfgIvpwj`f`kbswfquj`wjnpWklnbp#nlyjoobsqlnjpfsbqwjfpfgjwjlmlvwpjgf9ebopf/kvmgqfgLoznsj`\\\\avwwlmbvwklqpqfb`kfg`kqlmj`gfnbmgppf`lmgpsqlwf`wbglswfgsqfsbqfmfjwkfqdqfbwozdqfbwfqlufqboojnsqluf`lnnbmgpsf`jbopfbq`k-tlqpkjsevmgjmdwklvdkwkjdkfpwjmpwfbgvwjojwzrvbqwfq@vowvqfwfpwjmd`ofbqozf{slpfgAqltpfqojafqbo~#`bw`kSqlif`wf{bnsofkjgf+*8EolqjgbbmptfqpbooltfgFnsfqlqgfefmpfpfqjlvpeqffglnPfufqbo.avwwlmEvqwkfqlvw#le#\\\">#mvoowqbjmfgGfmnbqhuljg+3*,boo-ipsqfufmwQfrvfpwPwfskfm\\t\\tTkfm#lapfquf?,k1=\\u000E\\tNlgfqm#sqlujgf!#bow>!alqgfqp-\\t\\tElq#\\t\\tNbmz#bqwjpwpsltfqfgsfqelqnej`wjlmwzsf#lenfgj`bowj`hfwplsslpfg@lvm`jotjwmfppivpwj`fDflqdf#Afodjvn---?,b=wtjwwfqmlwbaoztbjwjmdtbqebqf#Lwkfq#qbmhjmdskqbpfpnfmwjlmpvqujufp`klobq?,s=\\u000E\\t#@lvmwqzjdmlqfgolpp#leivpw#bpDflqdjbpwqbmdf?kfbg=?pwlssfg2\\$^*8\\u000E\\tjpobmgpmlwbaofalqgfq9ojpw#le`bqqjfg233/333?,k0=\\t#pfufqboaf`lnfppfof`w#tfggjmd33-kwnonlmbq`klee#wkfwfb`kfqkjdkoz#ajloldzojef#lelq#fufmqjpf#le%qbrvl8sovplmfkvmwjmd+wklvdkGlvdobpiljmjmd`jq`ofpElq#wkfBm`jfmwUjfwmbnufkj`ofpv`k#bp`qzpwboubovf#>Tjmgltpfmilzfgb#pnboobppvnfg?b#jg>!elqfjdm#Boo#qjklt#wkfGjpsobzqfwjqfgkltfufqkjggfm8abwwofppffhjmd`bajmfwtbp#mlwollh#bw`lmgv`wdfw#wkfIbmvbqzkbssfmpwvqmjmdb9klufqLmojmf#Eqfm`k#ob`hjmdwzsj`bof{wqb`wfmfnjfpfufm#jedfmfqbwgf`jgfgbqf#mlw,pfbq`kafojfep.jnbdf9ol`bwfgpwbwj`-oldjm!=`lmufqwujlofmwfmwfqfgejqpw!=`jq`vjwEjmobmg`kfnjpwpkf#tbp23s{8!=bp#pv`kgjujgfg?,psbm=tjoo#afojmf#leb#dqfbwnzpwfqz,jmgf{-eboojmdgvf#wl#qbjotbz`loofdfnlmpwfqgfp`fmwjw#tjwkmv`ofbqIftjpk#sqlwfpwAqjwjpkeoltfqpsqfgj`wqfelqnpavwwlm#tkl#tbpof`wvqfjmpwbmwpvj`jgfdfmfqj`sfqjlgpnbqhfwpPl`jbo#ejpkjmd`lnajmfdqbskj`tjmmfqp?aq#,=?az#wkf#MbwvqboSqjub`z`llhjfplvw`lnfqfploufPtfgjpkaqjfeozSfqpjbmpl#nv`k@fmwvqzgfsj`wp`lovnmpklvpjmdp`qjswpmf{w#wlafbqjmdnbssjmdqfujpfgiRvfqz+.tjgwk9wjwof!=wllowjsPf`wjlmgfpjdmpWvqhjpkzlvmdfq-nbw`k+~*+*8\\t\\tavqmjmdlsfqbwfgfdqffpplvq`f>Qj`kbqg`olpfozsobpwj`fmwqjfp?,wq=\\u000E\\t`lolq9 vo#jg>!slppfppqloojmdskzpj`pebjojmdf{f`vwf`lmwfpwojmh#wlGfebvow?aq#,=\\t9#wqvf/`kbqwfqwlvqjpn`obppj`sql`ffgf{sobjm?,k2=\\u000E\\tlmojmf-<{no#ufkfosjmdgjbnlmgvpf#wkfbjqojmffmg#..=*-bwwq+qfbgfqpklpwjmd eeeeeeqfbojyfUjm`fmwpjdmbop#pq`>!,Sqlgv`wgfpsjwfgjufqpfwfoojmdSvaoj`#kfog#jmIlpfsk#wkfbwqfbeef`wp?pwzof=b#obqdfglfpm\\$wobwfq/#Fofnfmwebuj`lm`qfbwlqKvmdbqzBjqslqwpff#wkfpl#wkbwNj`kbfoPzpwfnpSqldqbnp/#bmg##tjgwk>f%rvlw8wqbgjmdofew!=\\tsfqplmpDlogfm#Beebjqpdqbnnbqelqnjmdgfpwqlzjgfb#le`bpf#lelogfpw#wkjp#jp-pq`#>#`bqwllmqfdjpwq@lnnlmpNvpojnpTkbw#jpjm#nbmznbqhjmdqfufbopJmgffg/frvbooz,pklt\\\\blvwgllqfp`bsf+Bvpwqjbdfmfwj`pzpwfn/Jm#wkf#pjwwjmdKf#boplJpobmgpB`bgfnz\\t\\n\\n?\\\"..Gbmjfo#ajmgjmdaol`h!=jnslpfgvwjojyfBaqbkbn+f{`fswxtjgwk9svwwjmd*-kwno+\\u007F\\u007F#X^8\\tGBWBX#)hjw`kfmnlvmwfgb`wvbo#gjbof`wnbjmoz#\\\\aobmh\\$jmpwboof{sfqwpje+wzsfJw#bopl%`lsz8#!=Wfqnpalqm#jmLswjlmpfbpwfqmwbohjmd`lm`fqmdbjmfg#lmdljmdivpwjez`qjwj`peb`wlqzjwp#ltmbppbvowjmujwfgobpwjmdkjp#ltmkqfe>!,!#qfo>!gfufols`lm`fqwgjbdqbngloobqp`ovpwfqsks<jg>bo`lklo*8~*+*8vpjmd#b=?psbm=ufppfopqfujuboBggqfppbnbwfvqbmgqljgboofdfgjoomfpptbohjmd`fmwfqprvbojeznbw`kfpvmjejfgf{wjm`wGfefmpfgjfg#jm\\t\\n?\\\"..#`vpwlnpojmhjmdOjwwof#Allh#lefufmjmdnjm-ip<bqf#wkfhlmwbhwwlgbz\\$p-kwno!#wbqdfw>tfbqjmdBoo#Qjd8\\t~*+*8qbjpjmd#Bopl/#`qv`jbobalvw!=gf`obqf..=\\t?p`ejqfel{bp#nv`kbssojfpjmgf{/#p/#avw#wzsf#>#\\t\\u000E\\t?\\\"..wltbqgpQf`lqgpSqjubwfElqfjdmSqfnjfq`klj`fpUjqwvboqfwvqmp@lnnfmwSltfqfgjmojmf8slufqwz`kbnafqOjujmd#ulovnfpBmwklmzoldjm!#QfobwfgF`lmlnzqfb`kfp`vwwjmddqbujwzojef#jm@kbswfq.pkbgltMlwbaof?,wg=\\u000E\\t#qfwvqmpwbgjvntjgdfwpubqzjmdwqbufopkfog#aztkl#bqftlqh#jmeb`vowzbmdvobqtkl#kbgbjqslqwwltm#le\\t\\tPlnf#\\$`oj`h\\$`kbqdfphfztlqgjw#tjoo`jwz#le+wkjp*8Bmgqft#vmjrvf#`kf`hfglq#nlqf033s{8#qfwvqm8qpjlm>!sovdjmptjwkjm#kfqpfoePwbwjlmEfgfqboufmwvqfsvaojpkpfmw#wlwfmpjlmb`wqfpp`lnf#wlejmdfqpGvhf#lesflsof/f{soljwtkbw#jpkbqnlmzb#nbilq!9!kwwsjm#kjp#nfmv!=\\tnlmwkozleej`fq`lvm`jodbjmjmdfufm#jmPvnnbqzgbwf#leolzbowzejwmfppbmg#tbpfnsfqlqpvsqfnfPf`lmg#kfbqjmdQvppjbmolmdfpwBoafqwbobwfqbopfw#le#pnboo!=-bssfmggl#tjwkefgfqboabmh#leafmfbwkGfpsjwf@bsjwbodqlvmgp*/#bmg#sfq`fmwjw#eqln`olpjmd`lmwbjmJmpwfbgejewffmbp#tfoo-zbkll-qfpslmgejdkwfqlap`vqfqfeof`wlqdbmj`>#Nbwk-fgjwjmdlmojmf#sbggjmdb#tkloflmfqqlqzfbq#lefmg#le#abqqjfqtkfm#jwkfbgfq#klnf#leqfpvnfgqfmbnfgpwqlmd=kfbwjmdqfwbjmp`olvgeqtbz#le#Nbq`k#2hmltjmdjm#sbqwAfwtffmofpplmp`olpfpwujqwvboojmhp!=`qlppfgFMG#..=ebnlvp#btbqgfgOj`fmpfKfbowk#ebjqoz#tfbowkznjmjnboBeqj`bm`lnsfwfobafo!=pjmdjmdebqnfqpAqbpjo*gjp`vppqfsob`fDqfdlqzelmw#`lsvqpvfgbssfbqpnbhf#vsqlvmgfgalwk#leaol`hfgpbt#wkfleej`fp`lolvqpje+gl`vtkfm#kffmelq`fsvpk+evBvdvpw#VWE.;!=Ebmwbpzjm#nlpwjmivqfgVpvboozebqnjmd`olpvqflaif`w#gfefm`fvpf#le#Nfgj`bo?algz=\\tfujgfmwaf#vpfghfz@lgfpj{wffmJpobnj` 333333fmwjqf#tjgfoz#b`wjuf#+wzsflelmf#`bm`lolq#>psfbhfqf{wfmgpSkzpj`pwfqqbjm?walgz=evmfqboujftjmdnjggof#`qj`hfwsqlskfwpkjewfggl`wlqpQvppfoo#wbqdfw`lnsb`wbodfaqbpl`jbo.avoh#lenbm#bmg?,wg=\\t#kf#ofew*-ubo+*ebopf*8oldj`boabmhjmdklnf#wlmbnjmd#Bqjylmb`qfgjwp*8\\t~*8\\telvmgfqjm#wvqm@loojmpafelqf#Avw#wkf`kbqdfgWjwof!=@bswbjmpsfoofgdlggfppWbd#..=Bggjmd9avw#tbpQf`fmw#sbwjfmwab`h#jm>ebopf%Ojm`lomtf#hmlt@lvmwfqIvgbjpnp`qjsw#bowfqfg\\$^*8\\t##kbp#wkfvm`ofbqFufmw\\$/alwk#jmmlw#boo\\t\\t?\\\"..#sob`jmdkbqg#wl#`fmwfqplqw#le`ojfmwppwqffwpAfqmbqgbppfqwpwfmg#wlebmwbpzgltm#jmkbqalvqEqffglniftfoqz,balvw--pfbq`kofdfmgpjp#nbgfnlgfqm#lmoz#lmlmoz#wljnbdf!#ojmfbq#sbjmwfqbmg#mlwqbqfoz#b`qlmzngfojufqpklqwfq33%bns8bp#nbmztjgwk>!,)#?\\\"X@wjwof#>le#wkf#oltfpw#sj`hfg#fp`bsfgvpfp#lesflsofp#Svaoj`Nbwwkftwb`wj`pgbnbdfgtbz#elqobtp#lefbpz#wl#tjmgltpwqlmd##pjnsof~`bw`k+pfufmwkjmelal{tfmw#wlsbjmwfg`jwjyfmJ#glm\\$wqfwqfbw-#Plnf#tt-!*8\\talnajmdnbjowl9nbgf#jm-#Nbmz#`bqqjfp\\u007F\\u007Fx~8tjtlqh#lepzmlmzngfefbwpebulqfglswj`bosbdfWqbvmofpp#pfmgjmdofew!=?`lnP`lqBoo#wkfiRvfqz-wlvqjpw@obppj`ebopf!#Tjokfonpvavqapdfmvjmfajpklsp-psojw+dolabo#elooltpalgz#lemlnjmbo@lmwb`wpf`vobqofew#wl`kjfeoz.kjggfm.abmmfq?,oj=\\t\\t-#Tkfm#jm#alwkgjpnjppF{solqfbotbzp#ujb#wkfpsb/]lotfoebqfqvojmd#bqqbmdf`bswbjmkjp#plmqvof#lekf#wllhjwpfoe/>3%bns8+`boofgpbnsofpwl#nbhf`ln,sbdNbqwjm#Hfmmfgzb``fswpevoo#lekbmgofgAfpjgfp,,..=?,baof#wlwbqdfwpfppfm`fkjn#wl#jwp#az#`lnnlm-njmfqbowl#wbhftbzp#wlp-lqd,obgujpfgsfmbowzpjnsof9je#wkfzOfwwfqpb#pklqwKfqafqwpwqjhfp#dqlvsp-ofmdwkeojdkwplufqobspoltoz#ofppfq#pl`jbo#?,s=\\t\\n\\njw#jmwlqbmhfg#qbwf#levo=\\u000E\\t##bwwfnswsbjq#lenbhf#jwHlmwbhwBmwlmjlkbujmd#qbwjmdp#b`wjufpwqfbnpwqbssfg!*-`pp+klpwjofofbg#wlojwwof#dqlvsp/Sj`wvqf..=\\u000E\\t\\u000E\\t#qltp>!#laif`wjmufqpf?ellwfq@vpwlnU=?_,p`qploujmd@kbnafqpobufqztlvmgfgtkfqfbp\\\">#\\$vmgelq#boosbqwoz#.qjdkw9Bqbajbmab`hfg#`fmwvqzvmjw#lenlajof.Fvqlsf/jp#klnfqjph#legfpjqfg@ojmwlm`lpw#lebdf#le#af`lnf#mlmf#les%rvlw8Njggof#fbg\\$*X3@qjwj`ppwvgjlp=%`lsz8dqlvs!=bppfnaonbhjmd#sqfppfgtjgdfw-sp9!#<#qfavjowaz#plnfElqnfq#fgjwlqpgfobzfg@bmlmj`kbg#wkfsvpkjmd`obpp>!avw#bqfsbqwjboAbazolmalwwln#`bqqjfq@lnnbmgjwp#vpfBp#tjwk`lvqpfpb#wkjqggfmlwfpbopl#jmKlvpwlm13s{8!=b``vpfgglvaof#dlbo#leEbnlvp#*-ajmg+sqjfpwp#Lmojmfjm#Ivozpw#(#!d`lmpvowgf`jnbokfosevoqfujufgjp#ufqzq\\$(\\$jswolpjmd#efnbofpjp#boplpwqjmdpgbzp#lebqqjuboevwvqf#?laif`welq`jmdPwqjmd+!#,=\\t\\n\\nkfqf#jpfm`lgfg-##Wkf#aboollmglmf#az,`lnnlmad`lolqobt#le#Jmgjbmbbuljgfgavw#wkf1s{#0s{irvfqz-bewfq#bsloj`z-nfm#bmgellwfq.>#wqvf8elq#vpfp`qffm-Jmgjbm#jnbdf#>ebnjoz/kwws9,,#%maps8gqjufqpfwfqmbopbnf#bpmlwj`fgujftfqp~*+*8\\t#jp#nlqfpfbplmpelqnfq#wkf#mftjp#ivpw`lmpfmw#Pfbq`ktbp#wkftkz#wkfpkjssfgaq=?aq=tjgwk9#kfjdkw>nbgf#le`vjpjmfjp#wkbwb#ufqz#Bgnjqbo#ej{fg8mlqnbo#NjppjlmSqfpp/#lmwbqjl`kbqpfwwqz#wl#jmubgfg>!wqvf!psb`jmdjp#nlpwb#nlqf#wlwboozeboo#le~*8\\u000E\\t##jnnfmpfwjnf#jmpfw#lvwpbwjpezwl#ejmggltm#wlolw#le#Sobzfqpjm#Ivmfrvbmwvnmlw#wkfwjnf#wlgjpwbmwEjmmjpkpq`#>#+pjmdof#kfos#leDfqnbm#obt#bmgobafofgelqfpwp`llhjmdpsb`f!=kfbgfq.tfoo#bpPwbmofzaqjgdfp,dolabo@qlbwjb#Balvw#X3^8\\t##jw/#bmgdqlvsfgafjmd#b*xwkqltkf#nbgfojdkwfqfwkj`boEEEEEE!alwwln!ojhf#b#fnsolzpojuf#jmbp#pffmsqjmwfqnlpw#leva.ojmhqfif`wpbmg#vpfjnbdf!=pv``ffgeffgjmdMv`ofbqjmelqnbwl#kfosTlnfm\\$pMfjwkfqNf{j`bmsqlwfjm?wbaof#az#nbmzkfbowkzobtpvjwgfujpfg-svpk+xpfoofqppjnsoz#Wkqlvdk-`llhjf#Jnbdf+logfq!=vp-ip!=#Pjm`f#vmjufqpobqdfq#lsfm#wl\\\"..#fmgojfp#jm\\$^*8\\u000E\\t##nbqhfwtkl#jp#+!GLN@lnbmbdfglmf#elqwzsfle#Hjmdglnsqlejwpsqlslpfwl#pklt`fmwfq8nbgf#jwgqfppfgtfqf#jmnj{wvqfsqf`jpfbqjpjmdpq`#>#\\$nbhf#b#pf`vqfgAbswjpwulwjmd#\\t\\n\\nubq#Nbq`k#1dqft#vs@ojnbwf-qfnlufphjoofgtbz#wkf?,kfbg=eb`f#leb`wjmd#qjdkw!=wl#tlqhqfgv`fpkbp#kbgfqf`wfgpklt+*8b`wjlm>allh#lebm#bqfb>>#!kww?kfbgfq\\t?kwno=`lmelqneb`jmd#`llhjf-qfoz#lmklpwfg#-`vpwlnkf#tfmwavw#elqpsqfbg#Ebnjoz#b#nfbmplvw#wkfelqvnp-ellwbdf!=Nlajo@ofnfmwp!#jg>!bp#kjdkjmwfmpf..=?\\\"..efnbof#jp#pffmjnsojfgpfw#wkfb#pwbwfbmg#kjpebpwfpwafpjgfpavwwlm\\\\alvmgfg!=?jnd#Jmelal{fufmwp/b#zlvmdbmg#bqfMbwjuf#`kfbsfqWjnflvwbmg#kbpfmdjmfptlm#wkf+nlpwozqjdkw9#ejmg#b#.alwwlnSqjm`f#bqfb#lenlqf#lepfbq`k\\\\mbwvqf/ofdboozsfqjlg/obmg#lelq#tjwkjmgv`fgsqlujmdnjppjofol`boozBdbjmpwwkf#tbzh%rvlw8s{8!=\\u000E\\tsvpkfg#babmglmmvnfqbo@fqwbjmJm#wkjpnlqf#jmlq#plnfmbnf#jpbmg/#jm`qltmfgJPAM#3.`qfbwfpL`wlafqnbz#mlw`fmwfq#obwf#jmGfefm`ffmb`wfgtjpk#wlaqlbgoz`llojmdlmolbg>jw-#Wkfqf`lufqNfnafqpkfjdkw#bppvnfp?kwno=\\tsflsof-jm#lmf#>tjmgltellwfq\\\\b#dllg#qfhobnblwkfqp/wl#wkjp\\\\`llhjfsbmfo!=Olmglm/gfejmfp`qvpkfgabswjpn`lbpwbopwbwvp#wjwof!#nluf#wlolpw#jmafwwfq#jnsojfpqjuboqzpfqufqp#PzpwfnSfqkbspfp#bmg#`lmwfmgeoltjmdobpwfg#qjpf#jmDfmfpjpujft#leqjpjmd#pffn#wlavw#jm#ab`hjmdkf#tjoodjufm#bdjujmd#`jwjfp-eolt#le#Obwfq#boo#avwKjdktbzlmoz#azpjdm#lekf#glfpgjeefqpabwwfqz%bns8obpjmdofpwkqfbwpjmwfdfqwbhf#lmqfevpfg`boofg#>VP%bnsPff#wkfmbwjufpaz#wkjppzpwfn-kfbg#le9klufq/ofpajbmpvqmbnfbmg#boo`lnnlm,kfbgfq\\\\\\\\sbqbnpKbqubqg,sj{fo-qfnlubopl#olmdqlof#leiljmwozphzp`qbVmj`lgfaq#,=\\u000E\\tBwobmwbmv`ofvp@lvmwz/svqfoz#`lvmw!=fbpjoz#avjog#blm`oj`hb#djufmsljmwfqk%rvlw8fufmwp#fopf#x\\tgjwjlmpmlt#wkf/#tjwk#nbm#tkllqd,Tfalmf#bmg`buboqzKf#gjfgpfbwwof33/333#xtjmgltkbuf#wlje+tjmgbmg#jwpplofoz#n%rvlw8qfmftfgGfwqljwbnlmdpwfjwkfq#wkfn#jmPfmbwlqVp?,b=?Hjmd#leEqbm`jp.sqlgv`kf#vpfgbqw#bmgkjn#bmgvpfg#azp`lqjmdbw#klnfwl#kbufqfobwfpjajojwzeb`wjlmAveebolojmh!=?tkbw#kfeqff#wl@jwz#le`lnf#jmpf`wlqp`lvmwfglmf#gbzmfqulvpprvbqf#~8je+dljm#tkbwjnd!#bojp#lmozpfbq`k,wvfpgbzollpfozPlolnlmpf{vbo#.#?b#kqnfgjvn!GL#MLW#Eqbm`f/tjwk#b#tbq#bmgpf`lmg#wbhf#b#=\\u000E\\t\\u000E\\t\\u000E\\tnbqhfw-kjdktbzglmf#jm`wjujwz!obpw!=laojdfgqjpf#wl!vmgfejnbgf#wl#Fbqoz#sqbjpfgjm#jwp#elq#kjpbwkofwfIvsjwfqZbkll\\\"#wfqnfg#pl#nbmzqfbooz#p-#Wkf#b#tlnbm<ubovf>gjqf`w#qjdkw!#aj`z`ofb`jmd>!gbz#bmgpwbwjmdQbwkfq/kjdkfq#Leej`f#bqf#mltwjnfp/#tkfm#b#sbz#elqlm#wkjp.ojmh!=8alqgfqbqlvmg#bmmvbo#wkf#Mftsvw#wkf-`ln!#wbhjm#wlb#aqjfe+jm#wkfdqlvsp-8#tjgwkfmyznfppjnsof#jm#obwfxqfwvqmwkfqbszb#sljmwabmmjmdjmhp!=\\t+*8!#qfb#sob`f_v330@bbalvw#bwq=\\u000E\\t\\n\\n``lvmw#djufp#b?P@QJSWQbjotbzwkfnfp,wlloal{AzJg+!{kvnbmp/tbw`kfpjm#plnf#je#+tj`lnjmd#elqnbwp#Vmgfq#avw#kbpkbmgfg#nbgf#azwkbm#jmefbq#legfmlwfg,jeqbnfofew#jmulowbdfjm#fb`kb%rvlw8abpf#leJm#nbmzvmgfqdlqfdjnfpb`wjlm#?,s=\\u000E\\t?vpwlnUb8%dw8?,jnslqwplq#wkbwnlpwoz#%bns8qf#pjyf>!?,b=?,kb#`obppsbppjufKlpw#>#TkfwkfqefqwjofUbqjlvp>X^8+ev`bnfqbp,=?,wg=b`wp#bpJm#plnf=\\u000E\\t\\u000E\\t?\\\"lqdbmjp#?aq#,=Afjijmd`bwbo/Lgfvwp`kfvqlsfvfvphbqbdbfjodfpufmphbfpsb/]bnfmpbifvpvbqjlwqbabiln/E{j`ls/Mdjmbpjfnsqfpjpwfnbl`wvaqfgvqbmwfb/]bgjqfnsqfpbnlnfmwlmvfpwqlsqjnfqbwqbu/Epdqb`jbpmvfpwqbsql`fplfpwbglp`bojgbgsfqplmbm/Vnfqlb`vfqgln/Vpj`bnjfnaqllefqwbpbodvmlpsb/Apfpfifnsolgfqf`klbgfn/Mpsqjubglbdqfdbqfmob`fpslpjaofklwfofppfujoobsqjnfql/Vowjnlfufmwlpbq`kjul`vowvqbnvifqfpfmwqbgbbmvm`jlfnabqdlnfq`bgldqbmgfpfpwvgjlnfilqfpefaqfqlgjpf/]lwvqjpnl`/_gjdlslqwbgbfpsb`jlebnjojbbmwlmjlsfqnjwfdvbqgbqbodvmbpsqf`jlpbodvjfmpfmwjglujpjwbpw/Awvol`lml`fqpfdvmgl`lmpfileqbm`jbnjmvwlppfdvmgbwfmfnlpfef`wlpn/Mobdbpfpj/_mqfujpwbdqbmbgb`lnsqbqjmdqfpldbq`/Abb``j/_mf`vbglqrvjfmfpjm`ovplgfafq/Mnbwfqjbklnaqfpnvfpwqbslgq/Abnb/]bmb/Vowjnbfpwbnlplej`jbowbnajfmmjmd/Vmpbovglpslgfnlpnfilqbqslpjwjlmavpjmfppklnfsbdfpf`vqjwzobmdvbdfpwbmgbqg`bnsbjdmefbwvqfp`bwfdlqzf{wfqmbo`kjogqfmqfpfqufgqfpfbq`kf{`kbmdfebulqjwfwfnsobwfnjojwbqzjmgvpwqzpfquj`fpnbwfqjbosqlgv`wpy.jmgf{9`lnnfmwpplewtbqf`lnsofwf`bofmgbqsobwelqnbqwj`ofpqfrvjqfgnlufnfmwrvfpwjlmavjogjmdslojwj`pslppjaofqfojdjlmskzpj`boeffgab`hqfdjpwfqsj`wvqfpgjpbaofgsqlwl`lobvgjfm`fpfwwjmdpb`wjujwzfofnfmwpofbqmjmdbmzwkjmdbapwqb`wsqldqfpplufqujftnbdbyjmff`lmlnj`wqbjmjmdsqfppvqfubqjlvp#?pwqlmd=sqlsfqwzpklssjmdwldfwkfqbgubm`fgafkbujlqgltmolbgefbwvqfgellwaboopfof`wfgObmdvbdfgjpwbm`fqfnfnafqwqb`hjmdsbpptlqgnlgjejfgpwvgfmwpgjqf`wozejdkwjmdmlqwkfqmgbwbabpfefpwjuboaqfbhjmdol`bwjlmjmwfqmfwgqlsgltmsqb`wj`ffujgfm`fevm`wjlmnbqqjbdfqfpslmpfsqlaofnpmfdbwjufsqldqbnpbmbozpjpqfofbpfgabmmfq!=svq`kbpfsloj`jfpqfdjlmbo`qfbwjufbqdvnfmwallhnbqhqfefqqfq`kfnj`bogjujpjlm`booab`hpfsbqbwfsqlif`wp`lmeoj`wkbqgtbqfjmwfqfpwgfojufqznlvmwbjmlawbjmfg>#ebopf8elq+ubq#b``fswfg`bsb`jwz`lnsvwfqjgfmwjwzbjq`qbewfnsolzfgsqlslpfgglnfpwj`jm`ovgfpsqlujgfgklpsjwboufqwj`bo`loobspfbssqlb`ksbqwmfqpoldl!=?bgbvdkwfqbvwklq!#`vowvqboebnjojfp,jnbdfp,bppfnaozsltfqevowfb`kjmdejmjpkfggjpwqj`w`qjwj`bo`dj.ajm,svqslpfpqfrvjqfpfof`wjlmaf`lnjmdsqlujgfpb`bgfnj`f{fq`jpfb`wvbooznfgj`jmf`lmpwbmwb``jgfmwNbdbyjmfgl`vnfmwpwbqwjmdalwwln!=lapfqufg9#%rvlw8f{wfmgfgsqfujlvpPlewtbqf`vpwlnfqgf`jpjlmpwqfmdwkgfwbjofgpojdkwozsobmmjmdwf{wbqfb`vqqfm`zfufqzlmfpwqbjdkwwqbmpefqslpjwjufsqlgv`fgkfqjwbdfpkjssjmdbaplovwfqf`fjufgqfofubmwavwwlm!#ujlofm`fbmztkfqfafmfejwpobvm`kfgqf`fmwozboojbm`felooltfgnvowjsofavoofwjmjm`ovgfgl``vqqfgjmwfqmbo'+wkjp*-qfsvaoj`=?wq=?wg`lmdqfppqf`lqgfgvowjnbwfplovwjlm?vo#jg>!gjp`lufqKlnf?,b=tfapjwfpmfwtlqhpbowklvdkfmwjqfoznfnlqjbonfppbdfp`lmwjmvfb`wjuf!=plnftkbwuj`wlqjbTfpwfqm##wjwof>!Ol`bwjlm`lmwqb`wujpjwlqpGltmolbgtjwklvw#qjdkw!=\\tnfbpvqfptjgwk#>#ubqjbaofjmuloufgujqdjmjbmlqnboozkbssfmfgb``lvmwppwbmgjmdmbwjlmboQfdjpwfqsqfsbqfg`lmwqlopb``vqbwfajqwkgbzpwqbwfdzleej`jbodqbskj`p`qjnjmboslppjaoz`lmpvnfqSfqplmbopsfbhjmdubojgbwfb`kjfufg-isd!#,=nb`kjmfp?,k1=\\t##hfztlqgpeqjfmgozaqlwkfqp`lnajmfglqjdjmbo`lnslpfgf{sf`wfgbgfrvbwfsbhjpwbmeloolt!#ubovbaof?,obafo=qfobwjufaqjmdjmdjm`qfbpfdlufqmlqsovdjmp,Ojpw#le#Kfbgfq!=!#mbnf>!#+%rvlw8dqbgvbwf?,kfbg=\\t`lnnfq`fnbobzpjbgjqf`wlqnbjmwbjm8kfjdkw9p`kfgvof`kbmdjmdab`h#wl#`bwkloj`sbwwfqmp`lolq9# dqfbwfpwpvssojfpqfojbaof?,vo=\\t\\n\\n?pfof`w#`jwjyfmp`olwkjmdtbw`kjmd?oj#jg>!psf`jej``bqqzjmdpfmwfm`f?`fmwfq=`lmwqbpwwkjmhjmd`bw`k+f*plvwkfqmNj`kbfo#nfq`kbmw`bqlvpfosbggjmd9jmwfqjlq-psojw+!ojybwjlmL`wlafq#*xqfwvqmjnsqlufg..%dw8\\t\\t`lufqbdf`kbjqnbm-smd!#,=pvaif`wpQj`kbqg#tkbwfufqsqlabaozqf`lufqzabpfabooivgdnfmw`lmmf`w--`pp!#,=#tfapjwfqfslqwfggfebvow!,=?,b=\\u000E\\tfof`wqj`p`lwobmg`qfbwjlmrvbmwjwz-#JPAM#3gjg#mlw#jmpwbm`f.pfbq`k.!#obmd>!psfbhfqp@lnsvwfq`lmwbjmpbq`kjufpnjmjpwfqqfb`wjlmgjp`lvmwJwbojbml`qjwfqjbpwqlmdoz9#\\$kwws9\\$p`qjsw\\$`lufqjmdleefqjmdbssfbqfgAqjwjpk#jgfmwjezEb`fallhmvnfqlvpufkj`ofp`lm`fqmpBnfqj`bmkbmgojmdgju#jg>!Tjoojbn#sqlujgfq\\\\`lmwfmwb``vqb`zpf`wjlm#bmgfqplmeof{jaof@bwfdlqzobtqfm`f?p`qjsw=obzlvw>!bssqlufg#nb{jnvnkfbgfq!=?,wbaof=Pfquj`fpkbnjowlm`vqqfmw#`bmbgjbm`kbmmfop,wkfnfp,,bqwj`oflswjlmboslqwvdboubovf>!!jmwfqubotjqfofppfmwjwofgbdfm`jfpPfbq`k!#nfbpvqfgwklvpbmgpsfmgjmd%kfoojs8mft#Gbwf!#pjyf>!sbdfMbnfnjggof!#!#,=?,b=kjggfm!=pfrvfm`fsfqplmbolufqeoltlsjmjlmpjoojmljpojmhp!=\\t\\n?wjwof=ufqpjlmppbwvqgbzwfqnjmbojwfnsqlsfmdjmffqpf`wjlmpgfpjdmfqsqlslpbo>!ebopf!Fpsb/]loqfofbpfppvanjw!#fq%rvlw8bggjwjlmpznswlnplqjfmwfgqfplvq`fqjdkw!=?sofbpvqfpwbwjlmpkjpwlqz-ofbujmd##alqgfq>`lmwfmwp`fmwfq!=-\\t\\tPlnf#gjqf`wfgpvjwbaofavodbqjb-pklt+*8gfpjdmfgDfmfqbo#`lm`fswpF{bnsofptjoojbnpLqjdjmbo!=?psbm=pfbq`k!=lsfqbwlqqfrvfpwpb#%rvlw8booltjmdGl`vnfmwqfujpjlm-#\\t\\tWkf#zlvqpfoe@lmwb`w#nj`kjdbmFmdojpk#`lovnajbsqjlqjwzsqjmwjmdgqjmhjmdeb`jojwzqfwvqmfg@lmwfmw#leej`fqpQvppjbm#dfmfqbwf.;;6:.2!jmgj`bwfebnjojbq#rvbojwznbqdjm93#`lmwfmwujftslqw`lmwb`wp.wjwof!=slqwbaof-ofmdwk#fojdjaofjmuloufpbwobmwj`lmolbg>!gfebvow-pvssojfgsbznfmwpdolppbqz\\t\\tBewfq#dvjgbm`f?,wg=?wgfm`lgjmdnjggof!=`bnf#wl#gjpsobzpp`lwwjpkilmbwkbmnbilqjwztjgdfwp-`ojmj`bowkbjobmgwfb`kfqp?kfbg=\\t\\nbeef`wfgpvsslqwpsljmwfq8wlPwqjmd?,pnboo=lhobklnbtjoo#af#jmufpwlq3!#bow>!klojgbzpQfplvq`foj`fmpfg#+tkj`k#-#Bewfq#`lmpjgfqujpjwjmdf{solqfqsqjnbqz#pfbq`k!#bmgqljg!rvj`hoz#nffwjmdpfpwjnbwf8qfwvqm#8`lolq9 #kfjdkw>bssqlubo/#%rvlw8#`kf`hfg-njm-ip!nbdmfwj`=?,b=?,kelqf`bpw-#Tkjof#wkvqpgbzgufqwjpf%fb`vwf8kbp@obppfubovbwflqgfqjmdf{jpwjmdsbwjfmwp#Lmojmf#`lolqbglLswjlmp!`bnsafoo?\\\"..#fmg?,psbm=??aq#,=\\u000E\\t\\\\slsvsp\\u007Fp`jfm`fp/%rvlw8#rvbojwz#Tjmgltp#bppjdmfgkfjdkw9#?a#`obppof%rvlw8#ubovf>!#@lnsbmzf{bnsofp?jeqbnf#afojfufpsqfpfmwpnbqpkboosbqw#le#sqlsfqoz*-\\t\\tWkf#wb{lmlnznv`k#le#?,psbm=\\t!#gbwb.pqwvdv/Fpp`qlooWl#sqlif`w?kfbg=\\u000E\\tbwwlqmfzfnskbpjppslmplqpebm`zal{tlqog\\$p#tjogojef`kf`hfg>pfppjlmpsqldqbnns{8elmw.#Sqlif`wilvqmbopafojfufgub`bwjlmwklnsplmojdkwjmdbmg#wkf#psf`jbo#alqgfq>3`kf`hjmd?,walgz=?avwwlm#@lnsofwf`ofbqej{\\t?kfbg=\\tbqwj`of#?pf`wjlmejmgjmdpqlof#jm#slsvobq##L`wlafqtfapjwf#f{slpvqfvpfg#wl##`kbmdfplsfqbwfg`oj`hjmdfmwfqjmd`lnnbmgpjmelqnfg#mvnafqp##?,gju=`qfbwjmdlmPvanjwnbqzobmg`loofdfpbmbozwj`ojpwjmdp`lmwb`w-olddfgJmbgujplqzpjaojmdp`lmwfmw!p%rvlw8*p-#Wkjp#sb`hbdfp`kf`hal{pvddfpwpsqfdmbmwwlnlqqltpsb`jmd>j`lm-smdibsbmfpf`lgfabpfavwwlm!=dbnaojmdpv`k#bp#/#tkjof#?,psbm=#njpplvqjpslqwjmdwls92s{#-?,psbm=wfmpjlmptjgwk>!1obyzolbgmlufnafqvpfg#jm#kfjdkw>!`qjsw!=\\t%maps8?,?wq=?wg#kfjdkw91,sqlgv`w`lvmwqz#jm`ovgf#ellwfq!#%ow8\\\"..#wjwof!=?,irvfqz-?,elqn=\\t+\\u000BBl\\bQ\\u007F*+\\u000BUm\\u0005Gx*kqubwphjjwbojbmlqln/Nm(ow/Pqh/Kf4K4]4C5dwbnaj/Emmlwj`jbpnfmpbifpsfqplmbpgfqf`klpmb`jlmbopfquj`jl`lmwb`wlvpvbqjlpsqldqbnbdlajfqmlfnsqfpbpbmvm`jlpubofm`jb`lolnajbgfpsv/Epgfslqwfpsqlzf`wlsqlgv`wls/Vaoj`lmlplwqlpkjpwlqjbsqfpfmwfnjoolmfpnfgjbmwfsqfdvmwbbmwfqjlqqf`vqplpsqlaofnbpbmwjbdlmvfpwqlplsjmj/_mjnsqjnjqnjfmwqbpbn/Eqj`bufmgfglqpl`jfgbgqfpsf`wlqfbojybqqfdjpwqlsbobaqbpjmwfq/Epfmwlm`fpfpsf`jbonjfnaqlpqfbojgbg`/_qglabybqbdlybs/Mdjmbppl`jbofpaolrvfbqdfpwj/_mborvjofqpjpwfnbp`jfm`jbp`lnsofwlufqpj/_m`lnsofwbfpwvgjlps/Vaoj`blaifwjulboj`bmwfavp`bglq`bmwjgbgfmwqbgbpb``jlmfpbq`kjulppvsfqjlqnbzlq/Abbofnbmjbevm`j/_m/Vowjnlpkb`jfmglbrvfoolpfgj`j/_mefqmbmglbnajfmwfeb`fallhmvfpwqbp`ojfmwfpsql`fplpabpwbmwfsqfpfmwbqfslqwbq`lmdqfplsvaoj`bq`lnfq`jl`lmwqbwli/_ufmfpgjpwqjwlw/E`mj`b`lmivmwlfmfqd/Abwqbabibqbpwvqjbpqf`jfmwfvwjojybqalofw/Ampboubglq`lqqf`wbwqbabilpsqjnfqlpmfdl`jlpojafqwbggfwboofpsbmwboobsq/_{jnlbonfq/Abbmjnbofprvj/Emfp`lqby/_mpf``j/_mavp`bmglls`jlmfpf{wfqjlq`lm`fswlwlgbu/Abdbofq/Abfp`qjajqnfgj`jmboj`fm`jb`lmpvowbbpsf`wlp`q/Awj`bg/_obqfpivpwj`jbgfafq/Mmsfq/Alglmf`fpjwbnbmwfmfqsfrvf/]lqf`jajgbwqjavmbowfmfqjef`bm`j/_m`bmbqjbpgfp`bqdbgjufqplpnboolq`bqfrvjfqfw/E`mj`lgfafq/Abujujfmgbejmbmybpbgfobmwfevm`jlmb`lmpfilpgje/A`jo`jvgbgfpbmwjdvbpbubmybgbw/Eqnjmlvmjgbgfpp/Mm`kfy`bnsb/]bplewlmj`qfujpwbp`lmwjfmfpf`wlqfpnlnfmwlpeb`vowbg`q/Egjwlgjufqpbppvsvfpwleb`wlqfppfdvmglpsfrvf/]b<_<R<X<\\\\<Y=m<W<T<Y=m=n=`<]=g<W<R<]=g=n=`=a=n<R<P<y=m<W<T=n<R<_<R<P<Y<Q=c<^=m<Y=i=a=n<R<U<X<\\\\<Z<Y<]=g<W<T<_<R<X=o<X<Y<Q=`=a=n<R=n<]=g<W<\\\\=m<Y<]=c<R<X<T<Q=m<Y<]<Y<Q<\\\\<X<R=m<\\\\<U=n=h<R=n<R<Q<Y<_<R=m<^<R<T=m<^<R<U<T<_=l=g=n<R<Z<Y<^=m<Y<P=m<^<R=b<W<T=d=`=a=n<T=i<S<R<V<\\\\<X<Q<Y<U<X<R<P<\\\\<P<T=l<\\\\<W<T<]<R=n<Y<P=o=i<R=n=c<X<^=o=i=m<Y=n<T<W=b<X<T<X<Y<W<R<P<T=l<Y=n<Y<]=c=m<^<R<Y<^<T<X<Y=k<Y<_<R=a=n<T<P=m=k<Y=n=n<Y<P=g=j<Y<Q=g=m=n<\\\\<W<^<Y<X=`=n<Y<P<Y<^<R<X=g=n<Y<]<Y<^=g=d<Y<Q<\\\\<P<T=n<T<S<\\\\=n<R<P=o<S=l<\\\\<^<W<T=j<\\\\<R<X<Q<\\\\<_<R<X=g<[<Q<\\\\=b<P<R<_=o<X=l=o<_<^=m<Y<U<T<X<Y=n<V<T<Q<R<R<X<Q<R<X<Y<W<\\\\<X<Y<W<Y=m=l<R<V<T=b<Q=c<^<Y=m=`<y=m=n=`=l<\\\\<[<\\\\<Q<\\\\=d<T4K5h5h5k4K5h4F5f4@5i5f4U4B4K4Y4E4K5h4\\\\5f4U5h5f5k4@4C5f4C4K5h4N5j4K5h4]4C4F4A5o5i4Y5m4A4E5o4K5j4F4K5h5h5f5f5o5d5j4X4D5o4E5m5f5k4K4D5j4K4F4A5d4K4M4O5o4G4]4B5h4K5h4K5h4A4D4C5h5f5h4C4]5d4_4K4Z4V4[4F5o5d5j5k5j4K5o4_4K4A4E5j4K4C5f4K5h4[4D4U5h5f5o4X5o4]4K5f5i5o5j5i5j5k4K4X4]5o4E4]4J5f4_5j4X5f4[5i4K4\\\\4K4K5h5m5j4X4D4K4D4F4U4D4]4]4A5i4E5o4K5m4E5f5n5d5h5i4]5o4^5o5h5i4E4O4A5i4C5n5h4D5f5f4U5j5f4Y5d4]4E4[4]5f5n4X4K4]5o4@5d4K5h4O4B4]5e5i4U5j4K4K4D4A4G4U4]5d4Z4D4X5o5h5i4_4@5h4D5j4K5j4B4K5h4C5o4F4K4D5o5h5f4E4D4C5d5j4O5f4Z4K5f5d4@4C5m4]5f5n5o4F4D4F4O5m4Z5h5i4[4D4B4K5o4G4]4D4K4]5o4K5m4Z5h4K4A5h5e5j5m4_5k4O5f4K5i4]4C5d4C4O5j5k4K4C5f5j4K4K5h4K5j5i4U4]4Z4F4U5h5i4C4K4B5h5i5i5o5j\\u0003\\u0003\\u0003\\u0003\\u0003\\u0003\\u0003\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0001\\u0003\\u0001\\u0003\\u0001\\u0003\\u0001\\u0003\\u0007\\u0003\\u0007\\u0003\\u0007\\u0003\\u0007\\u0003\\u0003\\u0002\\u0001\\u0000\\u0007\\u0006\\u0005\\u0004\\u0004\\u0005\\u0006\\u0007\\u0000\\u0001\\u0002\\u0003\\u000B\\n\\t\\b\\u000F\\u000E\\r\\u000C\\u000C\\r\\u000E\\u000F\\b\\t\\n\\u000B\\u0013\\u0012\\u0011\\u0010\\u0017\\u0016\\u0015\\u0014\\u0014\\u0015\\u0016\\u0017\\u0010\\u0011\\u0012\\u0013\\u001B\\u001A\\u0019\\u0018\\u001F\\u001E\\u001D\\u001C\\u001C\\u001D\\u001E\\u001F\\u0018\\u0019\\u001A\\u001B\\u0013\\u0013\\u0013\\u0013\\u0003\\u0003\\u0003\\u0003\\u0003\\u0003\\u0003\\u0003\\u0013\\u0013\\u0013\\u0013\\u0002\\u0003\\u0003\\u0003\\u0001\\u0003\\u0003\\u0003\\u0001\\u0003\\u0003\\u0003\\u0002\\u0003\\u0003\\u0003\\u0002\\u0003\\u0003\\u0003\\u0000\\u0003\\u0003\\u0003\\u0013\\u0013\\u0003\\u0002\\u0003\\u0003\\u0003\\u0002\\u0003\\u0003\\u0013\\u0013\\u0003\\u0002\\u0003\\u0003\\u0003\\u000B\\u0003\\u000B\\u0003\\u000B\\u0003\\u000B\\u0003\\u0003\\u0003\\u0002\\u0003\\u0001\\u0003\\u0000\\u0003\\u0007\\u0003\\u0006\\u0003\\u0005\\u0003\\u0004qfplvq`fp`lvmwqjfprvfpwjlmpfrvjsnfmw`lnnvmjwzbubjobaofkjdkojdkwGWG,{kwnonbqhfwjmdhmltofgdfplnfwkjmd`lmwbjmfqgjqf`wjlmpvap`qjafbgufqwjpf`kbqb`wfq!#ubovf>!?,pfof`w=Bvpwqbojb!#`obpp>!pjwvbwjlmbvwklqjwzelooltjmdsqjnbqjozlsfqbwjlm`kboofmdfgfufolsfgbmlmznlvpevm`wjlm#evm`wjlmp`lnsbmjfppwqv`wvqfbdqffnfmw!#wjwof>!slwfmwjbofgv`bwjlmbqdvnfmwppf`lmgbqz`lszqjdkwobmdvbdfpf{`ovpjuf`lmgjwjlm?,elqn=\\u000E\\tpwbwfnfmwbwwfmwjlmAjldqbskz~#fopf#x\\tplovwjlmptkfm#wkf#Bmbozwj`pwfnsobwfpgbmdfqlvppbwfoojwfgl`vnfmwpsvaojpkfqjnslqwbmwsqlwlwzsfjmeovfm`f%qbrvl8?,feef`wjufdfmfqboozwqbmpelqnafbvwjevowqbmpslqwlqdbmjyfgsvaojpkfgsqlnjmfmwvmwjo#wkfwkvnambjoMbwjlmbo#-el`vp+*8lufq#wkf#njdqbwjlmbmmlvm`fgellwfq!=\\tf{`fswjlmofpp#wkbmf{sfmpjufelqnbwjlmeqbnftlqhwfqqjwlqzmgj`bwjlm`vqqfmwoz`obppMbnf`qjwj`jpnwqbgjwjlmfopftkfqfBof{bmgfqbssljmwfgnbwfqjbopaqlbg`bpwnfmwjlmfgbeejojbwf?,lswjlm=wqfbwnfmwgjeefqfmw,gfebvow-Sqfpjgfmwlm`oj`h>!ajldqbskzlwkfqtjpfsfqnbmfmwEqbm/KbjpKlooztllgf{sbmpjlmpwbmgbqgp?,pwzof=\\tqfgv`wjlmGf`fnafq#sqfefqqfg@bnaqjgdflsslmfmwpAvpjmfpp#`lmevpjlm=\\t?wjwof=sqfpfmwfgf{sobjmfgglfp#mlw#tlqogtjgfjmwfqeb`fslpjwjlmpmftpsbsfq?,wbaof=\\tnlvmwbjmpojhf#wkf#fppfmwjboejmbm`jbopfof`wjlmb`wjlm>!,babmglmfgFgv`bwjlmsbqpfJmw+pwbajojwzvmbaof#wl?,wjwof=\\tqfobwjlmpMlwf#wkbwfeej`jfmwsfqelqnfgwtl#zfbqpPjm`f#wkfwkfqfelqftqbssfq!=bowfqmbwfjm`qfbpfgAbwwof#lesfq`fjufgwqzjmd#wlmf`fppbqzslqwqbzfgfof`wjlmpFojybafwk?,jeqbnf=gjp`lufqzjmpvqbm`fp-ofmdwk8ofdfmgbqzDfldqbskz`bmgjgbwf`lqslqbwfplnfwjnfppfquj`fp-jmkfqjwfg?,pwqlmd=@lnnvmjwzqfojdjlvpol`bwjlmp@lnnjwwffavjogjmdpwkf#tlqogml#olmdfqafdjmmjmdqfefqfm`f`bmmlw#afeqfrvfm`zwzsj`boozjmwl#wkf#qfobwjuf8qf`lqgjmdsqfpjgfmwjmjwjboozwf`kmjrvfwkf#lwkfqjw#`bm#aff{jpwfm`fvmgfqojmfwkjp#wjnfwfofsklmfjwfnp`lsfsqb`wj`fpbgubmwbdf*8qfwvqm#Elq#lwkfqsqlujgjmdgfnl`qb`zalwk#wkf#f{wfmpjufpveefqjmdpvsslqwfg`lnsvwfqp#evm`wjlmsqb`wj`bopbjg#wkbwjw#nbz#afFmdojpk?,eqln#wkf#p`kfgvofggltmolbgp?,obafo=\\tpvpsf`wfgnbqdjm9#3psjqjwvbo?,kfbg=\\t\\tnj`qlplewdqbgvboozgjp`vppfgkf#af`bnff{f`vwjufirvfqz-ipklvpfklog`lmejqnfgsvq`kbpfgojwfqboozgfpwqlzfgvs#wl#wkfubqjbwjlmqfnbjmjmdjw#jp#mlw`fmwvqjfpIbsbmfpf#bnlmd#wkf`lnsofwfgbodlqjwknjmwfqfpwpqfafoojlmvmgfejmfgfm`lvqbdfqfpjybaofjmuloujmdpfmpjwjufvmjufqpbosqlujpjlm+bowklvdkefbwvqjmd`lmgv`wfg*/#tkj`k#`lmwjmvfg.kfbgfq!=Efaqvbqz#mvnfqlvp#lufqeolt9`lnslmfmweqbdnfmwpf{`foofmw`lopsbm>!wf`kmj`bomfbq#wkf#Bgubm`fg#plvq`f#lef{sqfppfgKlmd#Hlmd#Eb`fallhnvowjsof#nf`kbmjpnfofubwjlmleefmpjuf?,elqn=\\t\\npslmplqfggl`vnfmw-lq#%rvlw8wkfqf#bqfwklpf#tklnlufnfmwpsql`fppfpgjeej`vowpvanjwwfgqf`lnnfmg`lmujm`fgsqlnlwjmd!#tjgwk>!-qfsob`f+`obppj`bo`lbojwjlmkjp#ejqpwgf`jpjlmpbppjpwbmwjmgj`bwfgfulovwjlm.tqbssfq!fmlvdk#wlbolmd#wkfgfojufqfg..=\\u000E\\t?\\\"..Bnfqj`bm#sqlwf`wfgMlufnafq#?,pwzof=?evqmjwvqfJmwfqmfw##lmaovq>!pvpsfmgfgqf`jsjfmwabpfg#lm#Nlqflufq/balojpkfg`loof`wfgtfqf#nbgffnlwjlmbofnfqdfm`zmbqqbwjufbgul`bwfps{8alqgfq`lnnjwwfggjq>!owq!fnsolzffpqfpfbq`k-#pfof`wfgpv``fpplq`vpwlnfqpgjpsobzfgPfswfnafqbgg@obpp+Eb`fallh#pvddfpwfgbmg#obwfqlsfqbwjmdfobalqbwfPlnfwjnfpJmpwjwvwf`fqwbjmozjmpwboofgelooltfqpIfqvpbofnwkfz#kbuf`lnsvwjmddfmfqbwfgsqlujm`fpdvbqbmwffbqajwqbqzqf`ldmjyftbmwfg#wls{8tjgwk9wkflqz#leafkbujlvqTkjof#wkffpwjnbwfgafdbm#wl#jw#af`bnfnbdmjwvgfnvpw#kbufnlqf#wkbmGjqf`wlqzf{wfmpjlmpf`qfwbqzmbwvqboozl``vqqjmdubqjbaofpdjufm#wkfsobwelqn-?,obafo=?ebjofg#wl`lnslvmgphjmgp#le#pl`jfwjfpbolmdpjgf#..%dw8\\t\\tplvwktfpwwkf#qjdkwqbgjbwjlmnbz#kbuf#vmfp`bsf+pslhfm#jm!#kqfe>!,sqldqbnnflmoz#wkf#`lnf#eqlngjqf`wlqzavqjfg#jmb#pjnjobqwkfz#tfqf?,elmw=?,Mlqtfdjbmpsf`jejfgsqlgv`jmdsbppfmdfq+mft#Gbwfwfnslqbqzej`wjlmboBewfq#wkffrvbwjlmpgltmolbg-qfdvobqozgfufolsfqbaluf#wkfojmhfg#wlskfmlnfmbsfqjlg#lewllowjs!=pvapwbm`fbvwlnbwj`bpsf`w#leBnlmd#wkf`lmmf`wfgfpwjnbwfpBjq#Elq`fpzpwfn#lelaif`wjufjnnfgjbwfnbhjmd#jwsbjmwjmdp`lmrvfqfgbqf#pwjoosql`fgvqfdqltwk#lekfbgfg#azFvqlsfbm#gjujpjlmpnlof`vofpeqbm`kjpfjmwfmwjlmbwwqb`wfg`kjogkllgbopl#vpfggfgj`bwfgpjmdbslqfgfdqff#leebwkfq#le`lmeoj`wp?,b=?,s=\\t`bnf#eqlntfqf#vpfgmlwf#wkbwqf`fjujmdF{f`vwjuffufm#nlqfb``fpp#wl`lnnbmgfqSlojwj`bonvpj`jbmpgfoj`jlvpsqjplmfqpbgufmw#leVWE.;!#,=?\\\"X@GBWBX!=@lmwb`wPlvwkfqm#ad`lolq>!pfqjfp#le-#Jw#tbp#jm#Fvqlsfsfqnjwwfgubojgbwf-bssfbqjmdleej`jboppfqjlvpoz.obmdvbdfjmjwjbwfgf{wfmgjmdolmd.wfqnjmeobwjlmpv`k#wkbwdfw@llhjfnbqhfg#az?,avwwlm=jnsofnfmwavw#jw#jpjm`qfbpfpgltm#wkf#qfrvjqjmdgfsfmgfmw..=\\t?\\\"..#jmwfqujftTjwk#wkf#`lsjfp#le`lmpfmpvptbp#avjowUfmfyvfob+elqnfqozwkf#pwbwfsfqplmmfopwqbwfdj`ebulvq#lejmufmwjlmTjhjsfgjb`lmwjmfmwujqwvbooztkj`k#tbpsqjm`jsof@lnsofwf#jgfmwj`bopklt#wkbwsqjnjwjufbtbz#eqlnnlof`vobqsqf`jpfozgjpploufgVmgfq#wkfufqpjlm>!=%maps8?,Jw#jp#wkf#Wkjp#jp#tjoo#kbuflqdbmjpnpplnf#wjnfEqjfgqj`ktbp#ejqpwwkf#lmoz#eb`w#wkbwelqn#jg>!sqf`fgjmdWf`kmj`boskzpj`jpwl``vqp#jmmbujdbwlqpf`wjlm!=psbm#jg>!plvdkw#wlafolt#wkfpvqujujmd~?,pwzof=kjp#gfbwkbp#jm#wkf`bvpfg#azsbqwjboozf{jpwjmd#vpjmd#wkftbp#djufmb#ojpw#leofufop#lemlwjlm#leLeej`jbo#gjpnjppfgp`jfmwjpwqfpfnaofpgvsoj`bwff{solpjufqf`lufqfgboo#lwkfqdboofqjfpxsbggjmd9sflsof#leqfdjlm#lebggqfppfpbppl`jbwfjnd#bow>!jm#nlgfqmpklvog#afnfwklg#leqfslqwjmdwjnfpwbnsmffgfg#wlwkf#Dqfbwqfdbqgjmdpffnfg#wlujftfg#bpjnsb`w#lmjgfb#wkbwwkf#Tlqogkfjdkw#lef{sbmgjmdWkfpf#bqf`vqqfmw!=`bqfevooznbjmwbjmp`kbqdf#le@obppj`bobggqfppfgsqfgj`wfgltmfqpkjs?gju#jg>!qjdkw!=\\u000E\\tqfpjgfm`fofbuf#wkf`lmwfmw!=bqf#lewfm##~*+*8\\u000E\\tsqlabaoz#Sqlefpplq.avwwlm!#qfpslmgfgpbzp#wkbwkbg#wl#afsob`fg#jmKvmdbqjbmpwbwvp#lepfqufp#bpVmjufqpbof{f`vwjlmbddqfdbwfelq#tkj`kjmef`wjlmbdqffg#wlkltfufq/#slsvobq!=sob`fg#lm`lmpwqv`wfof`wlqbopznalo#lejm`ovgjmdqfwvqm#wlbq`kjwf`w@kqjpwjbmsqfujlvp#ojujmd#jmfbpjfq#wlsqlefpplq\\t%ow8\\\"..#feef`w#lebmbozwj`ptbp#wbhfmtkfqf#wkfwllh#lufqafojfe#jmBeqjhbbmpbp#ebq#bpsqfufmwfgtlqh#tjwkb#psf`jbo?ejfogpfw@kqjpwnbpQfwqjfufg\\t\\tJm#wkf#ab`h#jmwlmlqwkfbpwnbdbyjmfp=?pwqlmd=`lnnjwwffdlufqmjmddqlvsp#lepwlqfg#jmfpwbaojpkb#dfmfqbojwp#ejqpwwkfjq#ltmslsvobwfgbm#laif`w@bqjaafbmboolt#wkfgjpwqj`wptjp`lmpjmol`bwjlm-8#tjgwk9#jmkbajwfgPl`jbojpwIbmvbqz#2?,ellwfq=pjnjobqoz`klj`f#lewkf#pbnf#psf`jej`#avpjmfpp#Wkf#ejqpw-ofmdwk8#gfpjqf#wlgfbo#tjwkpjm`f#wkfvpfqBdfmw`lm`fjufgjmgf{-sksbp#%rvlw8fmdbdf#jmqf`fmwoz/eft#zfbqptfqf#bopl\\t?kfbg=\\t?fgjwfg#azbqf#hmltm`jwjfp#jmb``fpphfz`lmgfnmfgbopl#kbufpfquj`fp/ebnjoz#leP`kllo#le`lmufqwfgmbwvqf#le#obmdvbdfnjmjpwfqp?,laif`w=wkfqf#jp#b#slsvobqpfrvfm`fpbgul`bwfgWkfz#tfqfbmz#lwkfqol`bwjlm>fmwfq#wkfnv`k#nlqfqfeof`wfgtbp#mbnfglqjdjmbo#b#wzsj`botkfm#wkfzfmdjmffqp`lvog#mlwqfpjgfmwptfgmfpgbzwkf#wkjqg#sqlgv`wpIbmvbqz#1tkbw#wkfzb#`fqwbjmqfb`wjlmpsql`fpplqbewfq#kjpwkf#obpw#`lmwbjmfg!=?,gju=\\t?,b=?,wg=gfsfmg#lmpfbq`k!=\\tsjf`fp#le`lnsfwjmdQfefqfm`fwfmmfppfftkj`k#kbp#ufqpjlm>?,psbm=#??,kfbgfq=djufp#wkfkjpwlqjbmubovf>!!=sbggjmd93ujft#wkbwwldfwkfq/wkf#nlpw#tbp#elvmgpvapfw#lebwwb`h#lm`kjogqfm/sljmwp#lesfqplmbo#slpjwjlm9boofdfgoz@ofufobmgtbp#obwfqbmg#bewfqbqf#djufmtbp#pwjoop`qloojmdgfpjdm#lenbhfp#wkfnv`k#ofppBnfqj`bmp-\\t\\tBewfq#/#avw#wkfNvpfvn#leolvjpjbmb+eqln#wkfnjmmfplwbsbqwj`ofpb#sql`fppGlnjmj`bmulovnf#leqfwvqmjmdgfefmpjuf33s{\\u007Fqjdknbgf#eqlnnlvpflufq!#pwzof>!pwbwfp#le+tkj`k#jp`lmwjmvfpEqbm`jp`lavjogjmd#tjwklvw#btjwk#plnftkl#tlvogb#elqn#leb#sbqw#leafelqf#jwhmltm#bp##Pfquj`fpol`bwjlm#bmg#lewfmnfbpvqjmdbmg#jw#jpsbsfqab`hubovfp#le\\u000E\\t?wjwof=>#tjmglt-gfwfqnjmffq%rvlw8#sobzfg#azbmg#fbqoz?,`fmwfq=eqln#wkjpwkf#wkqffsltfq#bmgle#%rvlw8jmmfqKWNO?b#kqfe>!z9jmojmf8@kvq`k#lewkf#fufmwufqz#kjdkleej`jbo#.kfjdkw9#`lmwfmw>!,`dj.ajm,wl#`qfbwfbeqjhbbmpfpsfqbmwleqbm/Kbjpobwujf)Mvojfwvuj)_(`f)Mwjmb(af)Mwjmb\\u000CUh\\u000CT{\\u000CTN\\n{I\\np@\\u0004Fr\\u000BBl\\bQ\\u007F\\tA{\\u000BUm\\u0005Gx\\tA{\\u0001yp\\u0006YA\\u0000zX\\bTV\\bWl\\bUd\\u0004BM\\u000BB{\\npV\\u000B@x\\u0004B\\\\\\np@\\u0004Db\\u0004Gz\\tal\\npa\\tfM\\tuD\\bV~\\u0004mx\\u000BQ}\\ndS\\tp\\\\\\bVK\\bS]\\bU|\\u0005oD\\tkV\\u000Bed\\u000BHR\\nb~\\u0004M`\\nJp\\u0005oD\\u0004|Q\\nLP\\u0004Sw\\bTl\\nAI\\nxC\\bWt\\tBq\\u0005F`\\u0004Cm\\u000BLm\\tKx\\t}t\\bPv\\ny\\\\\\naB\\tV\\u007F\\nZd\\u0004XU\\u0004li\\tfr\\ti@\\tBH\\u0004BD\\u0004BV\\t`V\\n[]\\tp_\\tTn\\n~A\\nxR\\tuD\\t`{\\bV@\\tTn\\tHK\\tAJ\\u000Bxs\\u0004Zf\\nqI\\u0004Zf\\u000BBM\\u000B|j\\t}t\\bSM\\nmC\\u000BQ}pfquj`jlpbqw/A`volbqdfmwjmbabq`folmb`vborvjfqsvaoj`bglsqlgv`wlpslo/Awj`bqfpsvfpwbtjhjsfgjbpjdvjfmwfa/Vprvfgb`lnvmjgbgpfdvqjgbgsqjm`jsbosqfdvmwbp`lmwfmjglqfpslmgfqufmfyvfobsqlaofnbpgj`jfnaqfqfob`j/_mmlujfnaqfpjnjobqfpsqlzf`wlpsqldqbnbpjmpwjwvwlb`wjujgbgfm`vfmwqbf`lmln/Abjn/Mdfmfp`lmwb`wbqgfp`bqdbqmf`fpbqjlbwfm`j/_mwfo/Eelml`lnjpj/_m`bm`jlmfp`bsb`jgbgfm`lmwqbqbm/Mojpjpebulqjwlpw/Eqnjmlpsqlujm`jbfwjrvfwbpfofnfmwlpevm`jlmfpqfpvowbgl`bq/M`wfqsqlsjfgbgsqjm`jsjlmf`fpjgbgnvmj`jsbo`qfb`j/_mgfp`bqdbpsqfpfm`jb`lnfq`jbolsjmjlmfpfifq`j`jlfgjwlqjbopbobnbm`bdlmy/Mofygl`vnfmwlsfo/A`vobqf`jfmwfpdfmfqbofpwbqqbdlmbsq/M`wj`bmlufgbgfpsqlsvfpwbsb`jfmwfpw/E`mj`bplaifwjulp`lmwb`wlp\\u000CHB\\u000CIk\\u000CHn\\u000CH^\\u000CHS\\u000CHc\\u000CHU\\u000CId\\u000CHn\\u000CH{\\u000CHC\\u000CHR\\u000CHT\\u000CHR\\u000CHI\\u000CHc\\u000CHY\\u000CHn\\u000CH\\\\\\u000CHU\\u000CIk\\u000CHy\\u000CIg\\u000CHd\\u000CHy\\u000CIm\\u000CHw\\u000CH\\\\\\u000CHU\\u000CHR\\u000CH@\\u000CHR\\u000CHJ\\u000CHy\\u000CHU\\u000CHR\\u000CHT\\u000CHA\\u000CIl\\u000CHU\\u000CIm\\u000CHc\\u000CH\\\\\\u000CHU\\u000CIl\\u000CHB\\u000CId\\u000CHn\\u000CHJ\\u000CHS\\u000CHD\\u000CH@\\u000CHR\\u000CHHgjsolgl`p\\u000CHT\\u000CHB\\u000CHC\\u000CH\\\\\\u000CIn\\u000CHF\\u000CHD\\u000CHR\\u000CHB\\u000CHF\\u000CHH\\u000CHR\\u000CHG\\u000CHS\\u000CH\\\\\\u000CHx\\u000CHT\\u000CHH\\u000CHH\\u000CH\\\\\\u000CHU\\u000CH^\\u000CIg\\u000CH{\\u000CHU\\u000CIm\\u000CHj\\u000CH@\\u000CHR\\u000CH\\\\\\u000CHJ\\u000CIk\\u000CHZ\\u000CHU\\u000CIm\\u000CHd\\u000CHz\\u000CIk\\u000CH^\\u000CHC\\u000CHJ\\u000CHS\\u000CHy\\u000CHR\\u000CHB\\u000CHY\\u000CIk\\u000CH@\\u000CHH\\u000CIl\\u000CHD\\u000CH@\\u000CIl\\u000CHv\\u000CHB\\u000CI`\\u000CHH\\u000CHT\\u000CHR\\u000CH^\\u000CH^\\u000CIk\\u000CHz\\u000CHp\\u000CIe\\u000CH@\\u000CHB\\u000CHJ\\u000CHJ\\u000CHH\\u000CHI\\u000CHR\\u000CHD\\u000CHU\\u000CIl\\u000CHZ\\u000CHU\\u000CH\\\\\\u000CHi\\u000CH^\\u000CH{\\u000CHy\\u000CHA\\u000CIl\\u000CHD\\u000CH{\\u000CH\\\\\\u000CHF\\u000CHR\\u000CHT\\u000CH\\\\\\u000CHR\\u000CHH\\u000CHy\\u000CHS\\u000CHc\\u000CHe\\u000CHT\\u000CIk\\u000CH{\\u000CHC\\u000CIl\\u000CHU\\u000CIn\\u000CHm\\u000CHj\\u000CH{\\u000CIk\\u000CHs\\u000CIl\\u000CHB\\u000CHz\\u000CIg\\u000CHp\\u000CHy\\u000CHR\\u000CH\\\\\\u000CHi\\u000CHA\\u000CIl\\u000CH{\\u000CHC\\u000CIk\\u000CHH\\u000CIm\\u000CHB\\u000CHY\\u000CIg\\u000CHs\\u000CHJ\\u000CIk\\u000CHn\\u000CHi\\u000CH{\\u000CH\\\\\\u000CH|\\u000CHT\\u000CIk\\u000CHB\\u000CIk\\u000CH^\\u000CH^\\u000CH{\\u000CHR\\u000CHU\\u000CHR\\u000CH^\\u000CHf\\u000CHF\\u000CH\\\\\\u000CHv\\u000CHR\\u000CH\\\\\\u000CH|\\u000CHT\\u000CHR\\u000CHJ\\u000CIk\\u000CH\\\\\\u000CHp\\u000CHS\\u000CHT\\u000CHJ\\u000CHS\\u000CH^\\u000CH@\\u000CHn\\u000CHJ\\u000CH@\\u000CHD\\u000CHR\\u000CHU\\u000CIn\\u000CHn\\u000CH^\\u000CHR\\u000CHz\\u000CHp\\u000CIl\\u000CHH\\u000CH@\\u000CHs\\u000CHD\\u000CHB\\u000CHS\\u000CH^\\u000CHk\\u000CHT\\u000CIk\\u000CHj\\u000CHD\\u000CIk\\u000CHD\\u000CHC\\u000CHR\\u000CHy\\u000CIm\\u000CH^\\u000CH^\\u000CIe\\u000CH{\\u000CHA\\u000CHR\\u000CH{\\u000CH\\\\\\u000CIk\\u000CH^\\u000CHp\\u000CH{\\u000CHU\\u000CH\\\\\\u000CHR\\u000CHB\\u000CH^\\u000CH{\\u000CIk\\u000CHF\\u000CIk\\u000CHp\\u000CHU\\u000CHR\\u000CHI\\u000CHk\\u000CHT\\u000CIl\\u000CHT\\u000CHU\\u000CIl\\u000CHy\\u000CH^\\u000CHR\\u000CHL\\u000CIl\\u000CHy\\u000CHU\\u000CHR\\u000CHm\\u000CHJ\\u000CIn\\u000CH\\\\\\u000CHH\\u000CHU\\u000CHH\\u000CHT\\u000CHR\\u000CHH\\u000CHC\\u000CHR\\u000CHJ\\u000CHj\\u000CHC\\u000CHR\\u000CHF\\u000CHR\\u000CHy\\u000CHy\\u000CI`\\u000CHD\\u000CHZ\\u000CHR\\u000CHB\\u000CHJ\\u000CIk\\u000CHz\\u000CHC\\u000CHU\\u000CIl\\u000CH\\\\\\u000CHR\\u000CHC\\u000CHz\\u000CIm\\u000CHJ\\u000CH^\\u000CH{\\u000CIl`bwfdlqjfpf{sfqjfm`f?,wjwof=\\u000E\\t@lszqjdkw#ibubp`qjsw`lmgjwjlmpfufqzwkjmd?s#`obpp>!wf`kmloldzab`hdqlvmg?b#`obpp>!nbmbdfnfmw%`lsz8#132ibubP`qjsw`kbqb`wfqpaqfbg`qvnawkfnpfoufpklqjylmwbodlufqmnfmw@bojelqmjbb`wjujwjfpgjp`lufqfgMbujdbwjlmwqbmpjwjlm`lmmf`wjlmmbujdbwjlmbssfbqbm`f?,wjwof=?n`kf`hal{!#wf`kmjrvfpsqlwf`wjlmbssbqfmwozbp#tfoo#bpvmw\\$/#\\$VB.qfplovwjlmlsfqbwjlmpwfofujpjlmwqbmpobwfgTbpkjmdwlmmbujdbwlq-#>#tjmglt-jnsqfppjlm%ow8aq%dw8ojwfqbwvqfslsvobwjlmad`lolq>! fpsf`jbooz#`lmwfmw>!sqlgv`wjlmmftpofwwfqsqlsfqwjfpgfejmjwjlmofbgfqpkjsWf`kmloldzSbqojbnfmw`lnsbqjplmvo#`obpp>!-jmgf{Le+!`lm`ovpjlmgjp`vppjlm`lnslmfmwpajloldj`boQfulovwjlm\\\\`lmwbjmfqvmgfqpwllgmlp`qjsw=?sfqnjppjlmfb`k#lwkfqbwnlpskfqf#lmel`vp>!?elqn#jg>!sql`fppjmdwkjp-ubovfdfmfqbwjlm@lmefqfm`fpvapfrvfmwtfoo.hmltmubqjbwjlmpqfsvwbwjlmskfmlnfmlmgjp`jsojmfoldl-smd!#+gl`vnfmw/alvmgbqjfpf{sqfppjlmpfwwofnfmwAb`hdqlvmglvw#le#wkffmwfqsqjpf+!kwwsp9!#vmfp`bsf+!sbpptlqg!#gfnl`qbwj`?b#kqfe>!,tqbssfq!=\\tnfnafqpkjsojmdvjpwj`s{8sbggjmdskjolplskzbppjpwbm`fvmjufqpjwzeb`jojwjfpqf`ldmjyfgsqfefqfm`fje#+wzsflenbjmwbjmfgul`bavobqzkzslwkfpjp-pvanjw+*8%bns8maps8bmmlwbwjlmafkjmg#wkfElvmgbwjlmsvaojpkfq!bppvnswjlmjmwqlgv`fg`lqqvswjlmp`jfmwjpwpf{soj`jwozjmpwfbg#legjnfmpjlmp#lm@oj`h>!`lmpjgfqfggfsbqwnfmwl``vsbwjlmpllm#bewfqjmufpwnfmwsqlmlvm`fgjgfmwjejfgf{sfqjnfmwNbmbdfnfmwdfldqbskj`!#kfjdkw>!ojmh#qfo>!-qfsob`f+,gfsqfppjlm`lmefqfm`fsvmjpknfmwfojnjmbwfgqfpjpwbm`fbgbswbwjlmlsslpjwjlmtfoo#hmltmpvssofnfmwgfwfqnjmfgk2#`obpp>!3s{8nbqdjmnf`kbmj`bopwbwjpwj`p`fofaqbwfgDlufqmnfmw\\t\\tGvqjmd#wgfufolsfqpbqwjej`jbofrvjubofmwlqjdjmbwfg@lnnjppjlmbwwb`knfmw?psbm#jg>!wkfqf#tfqfMfgfqobmgpafzlmg#wkfqfdjpwfqfgilvqmbojpweqfrvfmwozboo#le#wkfobmd>!fm!#?,pwzof=\\u000E\\tbaplovwf8#pvsslqwjmdf{wqfnfoz#nbjmpwqfbn?,pwqlmd=#slsvobqjwzfnsolznfmw?,wbaof=\\u000E\\t#`lopsbm>!?,elqn=\\t##`lmufqpjlmbalvw#wkf#?,s=?,gju=jmwfdqbwfg!#obmd>!fmSlqwvdvfpfpvapwjwvwfjmgjujgvbojnslppjaofnvowjnfgjbbonlpw#boos{#plojg# bsbqw#eqlnpvaif`w#wljm#Fmdojpk`qjwj`jyfgf{`fsw#elqdvjgfojmfplqjdjmboozqfnbqhbaofwkf#pf`lmgk1#`obpp>!?b#wjwof>!+jm`ovgjmdsbqbnfwfqpsqlkjajwfg>#!kwws9,,gj`wjlmbqzsfq`fswjlmqfulovwjlmelvmgbwjlms{8kfjdkw9pv``fppevopvsslqwfqpnjoofmmjvnkjp#ebwkfqwkf#%rvlw8ml.qfsfbw8`lnnfq`jbojmgvpwqjbofm`lvqbdfgbnlvmw#le#vmleej`jbofeej`jfm`zQfefqfm`fp`llqgjmbwfgjp`objnfqf{sfgjwjlmgfufolsjmd`bo`vobwfgpjnsojejfgofdjwjnbwfpvapwqjmd+3!#`obpp>!`lnsofwfozjoovpwqbwfejuf#zfbqpjmpwqvnfmwSvaojpkjmd2!#`obpp>!spz`kloldz`lmejgfm`fmvnafq#le#bapfm`f#leel`vpfg#lmiljmfg#wkfpwqv`wvqfpsqfujlvpoz=?,jeqbnf=lm`f#bdbjmavw#qbwkfqjnnjdqbmwple#`lvqpf/b#dqlvs#leOjwfqbwvqfVmojhf#wkf?,b=%maps8\\tevm`wjlm#jw#tbp#wkf@lmufmwjlmbvwlnlajofSqlwfpwbmwbddqfppjufbewfq#wkf#Pjnjobqoz/!#,=?,gju=`loof`wjlm\\u000E\\tevm`wjlmujpjajojwzwkf#vpf#leulovmwffqpbwwqb`wjlmvmgfq#wkf#wkqfbwfmfg)?\\\"X@GBWBXjnslqwbm`fjm#dfmfqbowkf#obwwfq?,elqn=\\t?,-jmgf{Le+\\$j#>#38#j#?gjeefqfm`fgfulwfg#wlwqbgjwjlmppfbq`k#elqvowjnbwfozwlvqmbnfmwbwwqjavwfppl.`boofg#~\\t?,pwzof=fubovbwjlmfnskbpjyfgb``fppjaof?,pf`wjlm=pv``fppjlmbolmd#tjwkNfbmtkjof/jmgvpwqjfp?,b=?aq#,=kbp#af`lnfbpsf`wp#leWfofujpjlmpveej`jfmwabphfwabooalwk#pjgfp`lmwjmvjmdbm#bqwj`of?jnd#bow>!bgufmwvqfpkjp#nlwkfqnbm`kfpwfqsqjm`jsofpsbqwj`vobq`lnnfmwbqzfeef`wp#legf`jgfg#wl!=?pwqlmd=svaojpkfqpIlvqmbo#legjeej`vowzeb`jojwbwfb``fswbaofpwzof-`pp!\\nevm`wjlm#jmmlubwjlm=@lszqjdkwpjwvbwjlmptlvog#kbufavpjmfppfpGj`wjlmbqzpwbwfnfmwplewfm#vpfgsfqpjpwfmwjm#Ibmvbqz`lnsqjpjmd?,wjwof=\\t\\ngjsolnbwj``lmwbjmjmdsfqelqnjmdf{wfmpjlmpnbz#mlw#af`lm`fsw#le#lm`oj`h>!Jw#jp#boplejmbm`jbo#nbhjmd#wkfOv{fnalvqdbggjwjlmbobqf#`boofgfmdbdfg#jm!p`qjsw!*8avw#jw#tbpfof`wqlmj`lmpvanjw>!\\t?\\\"..#Fmg#fof`wqj`boleej`jboozpvddfpwjlmwls#le#wkfvmojhf#wkfBvpwqbojbmLqjdjmboozqfefqfm`fp\\t?,kfbg=\\u000E\\tqf`ldmjpfgjmjwjbojyfojnjwfg#wlBof{bmgqjbqfwjqfnfmwBgufmwvqfpelvq#zfbqp\\t\\t%ow8\\\"..#jm`qfbpjmdgf`lqbwjlmk0#`obpp>!lqjdjmp#lelaojdbwjlmqfdvobwjlm`obppjejfg+evm`wjlm+bgubmwbdfpafjmd#wkf#kjpwlqjbmp?abpf#kqfeqfsfbwfgoztjoojmd#wl`lnsbqbaofgfpjdmbwfgmlnjmbwjlmevm`wjlmbojmpjgf#wkfqfufobwjlmfmg#le#wkfp#elq#wkf#bvwklqjyfgqfevpfg#wlwbhf#sob`fbvwlmlnlvp`lnsqlnjpfslojwj`bo#qfpwbvqbmwwtl#le#wkfEfaqvbqz#1rvbojwz#leptelaif`w-vmgfqpwbmgmfbqoz#bootqjwwfm#azjmwfqujftp!#tjgwk>!2tjwkgqbtboeolbw9ofewjp#vpvbooz`bmgjgbwfpmftpsbsfqpnzpwfqjlvpGfsbqwnfmwafpw#hmltmsbqojbnfmwpvssqfppfg`lmufmjfmwqfnfnafqfggjeefqfmw#pzpwfnbwj`kbp#ofg#wlsqlsbdbmgb`lmwqloofgjmeovfm`fp`fqfnlmjbosql`objnfgSqlwf`wjlmoj#`obpp>!P`jfmwjej``obpp>!ml.wqbgfnbqhpnlqf#wkbm#tjgfpsqfbgOjafqbwjlmwllh#sob`fgbz#le#wkfbp#olmd#bpjnsqjplmfgBggjwjlmbo\\t?kfbg=\\t?nObalqbwlqzMlufnafq#1f{`fswjlmpJmgvpwqjboubqjfwz#leeolbw9#ofeGvqjmd#wkfbppfppnfmwkbuf#affm#gfbop#tjwkPwbwjpwj`pl``vqqfm`f,vo=?,gju=`ofbqej{!=wkf#svaoj`nbmz#zfbqptkj`k#tfqflufq#wjnf/pzmlmznlvp`lmwfmw!=\\tsqfpvnbaozkjp#ebnjozvpfqBdfmw-vmf{sf`wfgjm`ovgjmd#`kboofmdfgb#njmlqjwzvmgfejmfg!afolmdp#wlwbhfm#eqlnjm#L`wlafqslpjwjlm9#pbjg#wl#afqfojdjlvp#Efgfqbwjlm#qltpsbm>!lmoz#b#eftnfbmw#wkbwofg#wl#wkf..=\\u000E\\t?gju#?ejfogpfw=Bq`kajpkls#`obpp>!mlafjmd#vpfgbssqlb`kfpsqjujofdfpmlp`qjsw=\\tqfpvowp#jmnbz#af#wkfFbpwfq#fddnf`kbmjpnpqfbplmbaofSlsvobwjlm@loof`wjlmpfof`wfg!=mlp`qjsw=\\u000E,jmgf{-sksbqqjubo#le.ippgh\\$**8nbmbdfg#wljm`lnsofwf`bpvbowjfp`lnsofwjlm@kqjpwjbmpPfswfnafq#bqjwknfwj`sql`fgvqfpnjdkw#kbufSqlgv`wjlmjw#bssfbqpSkjolplskzeqjfmgpkjsofbgjmd#wldjujmd#wkfwltbqg#wkfdvbqbmwffggl`vnfmwfg`lolq9 333ujgfl#dbnf`lnnjppjlmqfeof`wjmd`kbmdf#wkfbppl`jbwfgpbmp.pfqjelmhfzsqfpp8#sbggjmd9Kf#tbp#wkfvmgfqozjmdwzsj`booz#/#bmg#wkf#pq`Fofnfmwpv``fppjufpjm`f#wkf#pklvog#af#mfwtlqhjmdb``lvmwjmdvpf#le#wkfoltfq#wkbmpkltp#wkbw?,psbm=\\t\\n\\n`lnsobjmwp`lmwjmvlvprvbmwjwjfpbpwqlmlnfqkf#gjg#mlwgvf#wl#jwpbssojfg#wlbm#bufqbdffeelqwp#wlwkf#evwvqfbwwfnsw#wlWkfqfelqf/`bsbajojwzQfsvaoj`bmtbp#elqnfgFof`wqlmj`hjolnfwfqp`kboofmdfpsvaojpkjmdwkf#elqnfqjmgjdfmlvpgjqf`wjlmppvapjgjbqz`lmpsjqb`zgfwbjop#lebmg#jm#wkfbeelqgbaofpvapwbm`fpqfbplm#elq`lmufmwjlmjwfnwzsf>!baplovwfozpvsslpfgozqfnbjmfg#bbwwqb`wjufwqbufoojmdpfsbqbwfozel`vpfp#lmfofnfmwbqzbssoj`baofelvmg#wkbwpwzofpkffwnbmvp`qjswpwbmgp#elq#ml.qfsfbw+plnfwjnfp@lnnfq`jbojm#Bnfqj`bvmgfqwbhfmrvbqwfq#lebm#f{bnsofsfqplmboozjmgf{-sks<?,avwwlm=\\tsfq`fmwbdfafpw.hmltm`qfbwjmd#b!#gjq>!owqOjfvwfmbmw\\t?gju#jg>!wkfz#tlvogbajojwz#lenbgf#vs#lemlwfg#wkbw`ofbq#wkbwbqdvf#wkbwwl#bmlwkfq`kjogqfm\\$psvqslpf#leelqnvobwfgabpfg#vslmwkf#qfdjlmpvaif`w#lesbppfmdfqpslppfppjlm-\\t\\tJm#wkf#Afelqf#wkfbewfqtbqgp`vqqfmwoz#b`qlpp#wkfp`jfmwjej``lnnvmjwz-`bsjwbojpnjm#Dfqnbmzqjdkw.tjmdwkf#pzpwfnPl`jfwz#leslojwj`jbmgjqf`wjlm9tfmw#lm#wlqfnlubo#le#Mft#Zlqh#bsbqwnfmwpjmgj`bwjlmgvqjmd#wkfvmofpp#wkfkjpwlqj`bokbg#affm#bgfejmjwjufjmdqfgjfmwbwwfmgbm`f@fmwfq#elqsqlnjmfm`fqfbgzPwbwfpwqbwfdjfpavw#jm#wkfbp#sbqw#le`lmpwjwvwf`objn#wkbwobalqbwlqz`lnsbwjaofebjovqf#le/#pv`k#bp#afdbm#tjwkvpjmd#wkf#wl#sqlujgfefbwvqf#leeqln#tkj`k,!#`obpp>!dfloldj`bopfufqbo#legfojafqbwfjnslqwbmw#klogp#wkbwjmd%rvlw8#ubojdm>wlswkf#Dfqnbmlvwpjgf#lemfdlwjbwfgkjp#`bqffqpfsbqbwjlmjg>!pfbq`ktbp#`boofgwkf#elvqwkqf`qfbwjlmlwkfq#wkbmsqfufmwjlmtkjof#wkf#fgv`bwjlm/`lmmf`wjmdb``vqbwfoztfqf#avjowtbp#hjoofgbdqffnfmwpnv`k#nlqf#Gvf#wl#wkftjgwk9#233plnf#lwkfqHjmdgln#lewkf#fmwjqfebnlvp#elqwl#`lmmf`wlaif`wjufpwkf#Eqfm`ksflsof#bmgefbwvqfg!=jp#pbjg#wlpwqv`wvqboqfefqfmgvnnlpw#lewfmb#pfsbqbwf.=\\t?gju#jg#Leej`jbo#tlqogtjgf-bqjb.obafowkf#sobmfwbmg#jw#tbpg!#ubovf>!ollhjmd#bwafmfej`jbobqf#jm#wkfnlmjwlqjmdqfslqwfgozwkf#nlgfqmtlqhjmd#lmbooltfg#wltkfqf#wkf#jmmlubwjuf?,b=?,gju=plvmgwqb`hpfbq`kElqnwfmg#wl#afjmsvw#jg>!lsfmjmd#leqfpwqj`wfgbglswfg#azbggqfppjmdwkfloldjbmnfwklgp#leubqjbmw#le@kqjpwjbm#ufqz#obqdfbvwlnlwjufaz#ebq#wkfqbmdf#eqlnsvqpvjw#leeloolt#wkfaqlvdkw#wljm#Fmdobmgbdqff#wkbwb``vpfg#le`lnfp#eqlnsqfufmwjmdgju#pwzof>kjp#lq#kfqwqfnfmglvpeqffgln#le`lm`fqmjmd3#2fn#2fn8Abphfwaboo,pwzof-`ppbm#fbqojfqfufm#bewfq,!#wjwof>!-`ln,jmgf{wbhjmd#wkfsjwwpavqdk`lmwfmw!=\\u000E?p`qjsw=+ewvqmfg#lvwkbujmd#wkf?,psbm=\\u000E\\t#l``bpjlmboaf`bvpf#jwpwbqwfg#wlskzpj`booz=?,gju=\\t##`qfbwfg#az@vqqfmwoz/#ad`lolq>!wbajmgf{>!gjpbpwqlvpBmbozwj`p#bopl#kbp#b=?gju#jg>!?,pwzof=\\t?`boofg#elqpjmdfq#bmg-pq`#>#!,,ujlobwjlmpwkjp#sljmw`lmpwbmwozjp#ol`bwfgqf`lqgjmdpg#eqln#wkfmfgfqobmgpslqwvdv/Fp;N;};D;u;F5m4K4]4_7`gfpbqqlool`lnfmwbqjlfgv`b`j/_mpfswjfnaqfqfdjpwqbglgjqf``j/_mvaj`b`j/_msvaoj`jgbgqfpsvfpwbpqfpvowbglpjnslqwbmwfqfpfqubglpbqw/A`volpgjefqfmwfppjdvjfmwfpqfs/Vaoj`bpjwvb`j/_mnjmjpwfqjlsqjub`jgbggjqf`wlqjlelqnb`j/_mslaob`j/_msqfpjgfmwf`lmw\", \"fmjglpb``fplqjlpwf`kmlqbwjsfqplmbofp`bwfdlq/Abfpsf`jbofpgjpslmjaofb`wvbojgbgqfefqfm`jbuboobglojgajaojlwf`bqfob`jlmfp`bofmgbqjlslo/Awj`bpbmwfqjlqfpgl`vnfmwlpmbwvqbofybnbwfqjbofpgjefqfm`jbf`lm/_nj`bwqbmpslqwfqlgq/Advfysbqwj`jsbqfm`vfmwqbmgjp`vpj/_mfpwqv`wvqbevmgb`j/_meqf`vfmwfpsfqnbmfmwfwlwbonfmwf<P<R<Z<Q<R<]=o<X<Y=n<P<R<Z<Y=n<^=l<Y<P=c=n<\\\\<V<Z<Y=k=n<R<]=g<]<R<W<Y<Y<R=k<Y<Q=`=a=n<R<_<R<V<R<_<X<\\\\<S<R=m<W<Y<^=m<Y<_<R=m<\\\\<U=n<Y=k<Y=l<Y<[<P<R<_=o=n=m<\\\\<U=n<\\\\<Z<T<[<Q<T<P<Y<Z<X=o<]=o<X=o=n<s<R<T=m<V<[<X<Y=m=`<^<T<X<Y<R=m<^=c<[<T<Q=o<Z<Q<R=m<^<R<Y<U<W=b<X<Y<U<S<R=l<Q<R<P<Q<R<_<R<X<Y=n<Y<U=m<^<R<T=i<S=l<\\\\<^<\\\\=n<\\\\<V<R<U<P<Y=m=n<R<T<P<Y<Y=n<Z<T<[<Q=`<R<X<Q<R<U<W=o=k=d<Y<S<Y=l<Y<X=k<\\\\=m=n<T=k<\\\\=m=n=`=l<\\\\<]<R=n<Q<R<^=g=i<S=l<\\\\<^<R=m<R<]<R<U<S<R=n<R<P<P<Y<Q<Y<Y=k<T=m<W<Y<Q<R<^=g<Y=o=m<W=o<_<R<V<R<W<R<Q<\\\\<[<\\\\<X=n<\\\\<V<R<Y=n<R<_<X<\\\\<S<R=k=n<T<s<R=m<W<Y=n<\\\\<V<T<Y<Q<R<^=g<U=m=n<R<T=n=n<\\\\<V<T=i=m=l<\\\\<[=o<M<\\\\<Q<V=n=h<R=l=o<P<v<R<_<X<\\\\<V<Q<T<_<T=m<W<R<^<\\\\<Q<\\\\=d<Y<U<Q<\\\\<U=n<T=m<^<R<T<P=m<^=c<[=`<W=b<]<R<U=k<\\\\=m=n<R=m=l<Y<X<T<v=l<R<P<Y<H<R=l=o<P=l=g<Q<V<Y=m=n<\\\\<W<T<S<R<T=m<V=n=g=m=c=k<P<Y=m=c=j=j<Y<Q=n=l=n=l=o<X<\\\\=m<\\\\<P=g=i=l=g<Q<V<\\\\<q<R<^=g<U=k<\\\\=m<R<^<P<Y=m=n<\\\\=h<T<W=`<P<P<\\\\=l=n<\\\\=m=n=l<\\\\<Q<P<Y=m=n<Y=n<Y<V=m=n<Q<\\\\=d<T=i<P<T<Q=o=n<T<P<Y<Q<T<T<P<Y=b=n<Q<R<P<Y=l<_<R=l<R<X=m<\\\\<P<R<P=a=n<R<P=o<V<R<Q=j<Y=m<^<R<Y<P<V<\\\\<V<R<U<|=l=i<T<^5i5j4F4C5e4I4]4_4K5h4]4_4K5h4E4K5h4U4K5i5o4F4D5k4K4D4]4K5i4@4K5h5f5d5i4K5h4Y5d4]4@4C5f4C4E4K5h4U4Z5d4I4Z4K5m4E4K5h5n4_5i4K5h4U4K4D4F4A5i5f5h5i5h5m4K4F5i5h4F5n5e4F4U4C5f5h4K5h4X4U4]4O4B4D4K4]4F4[5d5f4]4U5h5f5o5i4I4]5m4K5n4[5h4D4K4F4K5h5h4V4E4F4]4F5f4D4K5h5j4K4_4K5h4X5f4B5i5j4F4C5f4K5h4U4]4D4K5h5n4Y4Y4K5m5h4K5i4U5h5f5k4K4F4A4C5f4G4K5h5h5k5i4K5h4U5i5h5i5o4F4D4E5f5i5o5j5o4K5h4[5m5h5m5f4C5f5d4I4C4K4]4E4F4K4]5f4B4K5h4Y4A4E4F4_4@5f5h4K5h5d5n4F4U5j4C5i4K5i4C5f5j4E4F4Y5i5f5i4O4]4X5f5m4K5h4\\\\5f5j4U4]4D5f4E4D5d4K4D4E4O5h4U4K4D4K5h4_5m4]5i4X4K5o5h4F4U4K5h5e4K5h4O5d5h4K5h4_5j4E4@4K5i4U4E4K5h4Y4A5m4K5h4C5f5j5o5h5i4K4F4K5h4B4K4Y4K5h5i5h5m4O4U4Z4K4M5o4F4K4D4E4K5h4B5f4]4]4_4K4J5h4K5h5n5h4D4K5h4O4C4D5i5n4K4[4U5i4]4K4_5h5i5j4[5n4E4K5h5o4F4D4K5h4]4@5h4K4X4F4]5o4K5h5n4C5i5f4U4[5f5opAzWbdMbnf+-isd!#bow>!2s{#plojg# -dje!#bow>!wqbmpsbqfmwjmelqnbwjlmbssoj`bwjlm!#lm`oj`h>!fpwbaojpkfgbgufqwjpjmd-smd!#bow>!fmujqlmnfmwsfqelqnbm`fbssqlsqjbwf%bns8ngbpk8jnnfgjbwfoz?,pwqlmd=?,qbwkfq#wkbmwfnsfqbwvqfgfufolsnfmw`lnsfwjwjlmsob`fklogfqujpjajojwz9`lszqjdkw!=3!#kfjdkw>!fufm#wklvdkqfsob`fnfmwgfpwjmbwjlm@lqslqbwjlm?vo#`obpp>!Bppl`jbwjlmjmgjujgvbopsfqpsf`wjufpfwWjnflvw+vqo+kwws9,,nbwkfnbwj`pnbqdjm.wls9fufmwvbooz#gfp`qjswjlm*#ml.qfsfbw`loof`wjlmp-ISD\\u007Fwkvna\\u007Fsbqwj`jsbwf,kfbg=?algzeolbw9ofew8?oj#`obpp>!kvmgqfgp#le\\t\\tKltfufq/#`lnslpjwjlm`ofbq9alwk8`llsfqbwjlmtjwkjm#wkf#obafo#elq>!alqgfq.wls9Mft#Yfbobmgqf`lnnfmgfgsklwldqbskzjmwfqfpwjmd%ow8pvs%dw8`lmwqlufqpzMfwkfqobmgpbowfqmbwjufnb{ofmdwk>!ptjwyfqobmgGfufolsnfmwfppfmwjbooz\\t\\tBowklvdk#?,wf{wbqfb=wkvmgfqajqgqfsqfpfmwfg%bns8mgbpk8psf`vobwjlm`lnnvmjwjfpofdjpobwjlmfof`wqlmj`p\\t\\n?gju#jg>!joovpwqbwfgfmdjmffqjmdwfqqjwlqjfpbvwklqjwjfpgjpwqjavwfg5!#kfjdkw>!pbmp.pfqje8`bsbaof#le#gjpbssfbqfgjmwfqb`wjufollhjmd#elqjw#tlvog#afBedkbmjpwbmtbp#`qfbwfgNbwk-eollq+pvqqlvmgjmd`bm#bopl#aflapfqubwjlmnbjmwfmbm`ffm`lvmwfqfg?k1#`obpp>!nlqf#qf`fmwjw#kbp#affmjmubpjlm#le*-dfwWjnf+*evmgbnfmwboGfpsjwf#wkf!=?gju#jg>!jmpsjqbwjlmf{bnjmbwjlmsqfsbqbwjlmf{sobmbwjlm?jmsvw#jg>!?,b=?,psbm=ufqpjlmp#lejmpwqvnfmwpafelqf#wkf##>#\\$kwws9,,Gfp`qjswjlmqfobwjufoz#-pvapwqjmd+fb`k#le#wkff{sfqjnfmwpjmeovfmwjbojmwfdqbwjlmnbmz#sflsofgvf#wl#wkf#`lnajmbwjlmgl#mlw#kbufNjggof#Fbpw?mlp`qjsw=?`lszqjdkw!#sfqkbsp#wkfjmpwjwvwjlmjm#Gf`fnafqbqqbmdfnfmwnlpw#ebnlvpsfqplmbojwz`qfbwjlm#leojnjwbwjlmpf{`ovpjufozplufqfjdmwz.`lmwfmw!=\\t?wg#`obpp>!vmgfqdqlvmgsbqboofo#wlgl`wqjmf#lel``vsjfg#azwfqnjmloldzQfmbjppbm`fb#mvnafq#lepvsslqw#elqf{solqbwjlmqf`ldmjwjlmsqfgf`fpplq?jnd#pq`>!,?k2#`obpp>!svaoj`bwjlmnbz#bopl#afpsf`jbojyfg?,ejfogpfw=sqldqfppjufnjoojlmp#lepwbwfp#wkbwfmelq`fnfmwbqlvmg#wkf#lmf#bmlwkfq-sbqfmwMlgfbdqj`vowvqfBowfqmbwjufqfpfbq`kfqpwltbqgp#wkfNlpw#le#wkfnbmz#lwkfq#+fpsf`jbooz?wg#tjgwk>!8tjgwk9233&jmgfsfmgfmw?k0#`obpp>!#lm`kbmdf>!*-bgg@obpp+jmwfqb`wjlmLmf#le#wkf#gbvdkwfq#leb``fpplqjfpaqbm`kfp#le\\u000E\\t?gju#jg>!wkf#obqdfpwgf`obqbwjlmqfdvobwjlmpJmelqnbwjlmwqbmpobwjlmgl`vnfmwbqzjm#lqgfq#wl!=\\t?kfbg=\\t?!#kfjdkw>!2b`qlpp#wkf#lqjfmwbwjlm*8?,p`qjsw=jnsofnfmwfg`bm#af#pffmwkfqf#tbp#bgfnlmpwqbwf`lmwbjmfq!=`lmmf`wjlmpwkf#Aqjwjpktbp#tqjwwfm\\\"jnslqwbmw8s{8#nbqdjm.elooltfg#azbajojwz#wl#`lnsoj`bwfggvqjmd#wkf#jnnjdqbwjlmbopl#`boofg?k7#`obpp>!gjpwjm`wjlmqfsob`fg#azdlufqmnfmwpol`bwjlm#lejm#Mlufnafqtkfwkfq#wkf?,s=\\t?,gju=b`rvjpjwjlm`boofg#wkf#sfqpf`vwjlmgfpjdmbwjlmxelmw.pjyf9bssfbqfg#jmjmufpwjdbwff{sfqjfm`fgnlpw#ojhfoztjgfoz#vpfggjp`vppjlmpsqfpfm`f#le#+gl`vnfmw-f{wfmpjufozJw#kbp#affmjw#glfp#mlw`lmwqbqz#wljmkbajwbmwpjnsqlufnfmwp`klobqpkjs`lmpvnswjlmjmpwqv`wjlmelq#f{bnsoflmf#lq#nlqfs{8#sbggjmdwkf#`vqqfmwb#pfqjfp#lebqf#vpvboozqlof#jm#wkfsqfujlvpoz#gfqjubwjufpfujgfm`f#lef{sfqjfm`fp`lolqp`kfnfpwbwfg#wkbw`fqwjej`bwf?,b=?,gju=\\t#pfof`wfg>!kjdk#p`klloqfpslmpf#wl`lnelqwbaofbglswjlm#lewkqff#zfbqpwkf#`lvmwqzjm#Efaqvbqzpl#wkbw#wkfsflsof#tkl#sqlujgfg#az?sbqbn#mbnfbeef`wfg#azjm#wfqnp#lebssljmwnfmwJPL.;;6:.2!tbp#alqm#jmkjpwlqj`bo#qfdbqgfg#bpnfbpvqfnfmwjp#abpfg#lm#bmg#lwkfq#9#evm`wjlm+pjdmjej`bmw`fofaqbwjlmwqbmpnjwwfg,ip,irvfqz-jp#hmltm#bpwkflqfwj`bo#wbajmgf{>!jw#`lvog#af?mlp`qjsw=\\tkbujmd#affm\\u000E\\t?kfbg=\\u000E\\t?#%rvlw8Wkf#`lnsjobwjlmkf#kbg#affmsqlgv`fg#azskjolplskfq`lmpwqv`wfgjmwfmgfg#wlbnlmd#lwkfq`lnsbqfg#wlwl#pbz#wkbwFmdjmffqjmdb#gjeefqfmwqfefqqfg#wlgjeefqfm`fpafojfe#wkbwsklwldqbskpjgfmwjezjmdKjpwlqz#le#Qfsvaoj`#lemf`fppbqjozsqlabajojwzwf`kmj`boozofbujmd#wkfpsf`wb`vobqeqb`wjlm#lefof`wqj`jwzkfbg#le#wkfqfpwbvqbmwpsbqwmfqpkjsfnskbpjp#lmnlpw#qf`fmwpkbqf#tjwk#pbzjmd#wkbwejoofg#tjwkgfpjdmfg#wljw#jp#lewfm!=?,jeqbnf=bp#elooltp9nfqdfg#tjwkwkqlvdk#wkf`lnnfq`jbo#sljmwfg#lvwlsslqwvmjwzujft#le#wkfqfrvjqfnfmwgjujpjlm#lesqldqbnnjmdkf#qf`fjufgpfwJmwfqubo!=?,psbm=?,jm#Mft#Zlqhbggjwjlmbo#`lnsqfppjlm\\t\\t?gju#jg>!jm`lqslqbwf8?,p`qjsw=?bwwb`kFufmwaf`bnf#wkf#!#wbqdfw>!\\\\`bqqjfg#lvwPlnf#le#wkfp`jfm`f#bmgwkf#wjnf#le@lmwbjmfq!=nbjmwbjmjmd@kqjpwlskfqNv`k#le#wkftqjwjmdp#le!#kfjdkw>!1pjyf#le#wkfufqpjlm#le#nj{wvqf#le#afwtffm#wkfF{bnsofp#lefgv`bwjlmbo`lnsfwjwjuf#lmpvanjw>!gjqf`wlq#legjpwjm`wjuf,GWG#[KWNO#qfobwjmd#wlwfmgfm`z#wlsqlujm`f#letkj`k#tlvoggfpsjwf#wkfp`jfmwjej`#ofdjpobwvqf-jmmfqKWNO#boofdbwjlmpBdqj`vowvqftbp#vpfg#jmbssqlb`k#wljmwfoojdfmwzfbqp#obwfq/pbmp.pfqjegfwfqnjmjmdSfqelqnbm`fbssfbqbm`fp/#tkj`k#jp#elvmgbwjlmpbaaqfujbwfgkjdkfq#wkbmp#eqln#wkf#jmgjujgvbo#`lnslpfg#lepvsslpfg#wl`objnp#wkbwbwwqjavwjlmelmw.pjyf92fofnfmwp#leKjpwlqj`bo#kjp#aqlwkfqbw#wkf#wjnfbmmjufqpbqzdlufqmfg#azqfobwfg#wl#vowjnbwfoz#jmmlubwjlmpjw#jp#pwjoo`bm#lmoz#afgfejmjwjlmpwlDNWPwqjmdB#mvnafq#lejnd#`obpp>!Fufmwvbooz/tbp#`kbmdfgl``vqqfg#jmmfjdkalqjmdgjpwjmdvjpktkfm#kf#tbpjmwqlgv`jmdwfqqfpwqjboNbmz#le#wkfbqdvfp#wkbwbm#Bnfqj`bm`lmrvfpw#letjgfpsqfbg#tfqf#hjoofgp`qffm#bmg#Jm#lqgfq#wlf{sf`wfg#wlgfp`fmgbmwpbqf#ol`bwfgofdjpobwjufdfmfqbwjlmp#ab`hdqlvmgnlpw#sflsofzfbqp#bewfqwkfqf#jp#mlwkf#kjdkfpweqfrvfmwoz#wkfz#gl#mlwbqdvfg#wkbwpkltfg#wkbwsqfglnjmbmwwkfloldj`boaz#wkf#wjnf`lmpjgfqjmdpklqw.ojufg?,psbm=?,b=`bm#af#vpfgufqz#ojwwoflmf#le#wkf#kbg#boqfbgzjmwfqsqfwfg`lnnvmj`bwfefbwvqfp#ledlufqmnfmw/?,mlp`qjsw=fmwfqfg#wkf!#kfjdkw>!0Jmgfsfmgfmwslsvobwjlmpobqdf.p`bof-#Bowklvdk#vpfg#jm#wkfgfpwqv`wjlmslppjajojwzpwbqwjmd#jmwtl#lq#nlqff{sqfppjlmppvalqgjmbwfobqdfq#wkbmkjpwlqz#bmg?,lswjlm=\\u000E\\t@lmwjmfmwbofojnjmbwjmdtjoo#mlw#afsqb`wj`f#lejm#eqlmw#lepjwf#le#wkffmpvqf#wkbwwl#`qfbwf#bnjppjppjssjslwfmwjboozlvwpwbmgjmdafwwfq#wkbmtkbw#jp#mltpjwvbwfg#jmnfwb#mbnf>!WqbgjwjlmbopvddfpwjlmpWqbmpobwjlmwkf#elqn#lebwnlpskfqj`jgfloldj`bofmwfqsqjpfp`bo`vobwjmdfbpw#le#wkfqfnmbmwp#lesovdjmpsbdf,jmgf{-sks<qfnbjmfg#jmwqbmpelqnfgKf#tbp#bopltbp#boqfbgzpwbwjpwj`bojm#ebulq#leNjmjpwqz#lenlufnfmw#leelqnvobwjlmjp#qfrvjqfg?ojmh#qfo>!Wkjp#jp#wkf#?b#kqfe>!,slsvobqjyfgjmuloufg#jmbqf#vpfg#wlbmg#pfufqbonbgf#az#wkfpffnp#wl#afojhfoz#wkbwSbofpwjmjbmmbnfg#bewfqjw#kbg#affmnlpw#`lnnlmwl#qfefq#wlavw#wkjp#jp`lmpf`vwjufwfnslqbqjozJm#dfmfqbo/`lmufmwjlmpwbhfp#sob`fpvagjujpjlmwfqqjwlqjbolsfqbwjlmbosfqnbmfmwoztbp#obqdfozlvwaqfbh#lejm#wkf#sbpwelooltjmd#b#{nomp9ld>!=?b#`obpp>!`obpp>!wf{w@lmufqpjlm#nbz#af#vpfgnbmveb`wvqfbewfq#afjmd`ofbqej{!=\\trvfpwjlm#letbp#fof`wfgwl#af`lnf#baf`bvpf#le#plnf#sflsofjmpsjqfg#azpv``fppevo#b#wjnf#tkfmnlqf#`lnnlmbnlmdpw#wkfbm#leej`jbotjgwk9233&8wf`kmloldz/tbp#bglswfgwl#hffs#wkfpfwwofnfmwpojuf#ajqwkpjmgf{-kwno!@lmmf`wj`vwbppjdmfg#wl%bns8wjnfp8b``lvmw#elqbojdm>qjdkwwkf#`lnsbmzbotbzp#affmqfwvqmfg#wljmuloufnfmwAf`bvpf#wkfwkjp#sfqjlg!#mbnf>!r!#`lmejmfg#wlb#qfpvow#leubovf>!!#,=jp#b`wvboozFmujqlmnfmw\\u000E\\t?,kfbg=\\u000E\\t@lmufqpfoz/=\\t?gju#jg>!3!#tjgwk>!2jp#sqlabaozkbuf#af`lnf`lmwqloojmdwkf#sqlaofn`jwjyfmp#leslojwj`jbmpqfb`kfg#wkfbp#fbqoz#bp9mlmf8#lufq?wbaof#`fooubojgjwz#legjqf`woz#wllmnlvpfgltmtkfqf#jw#jptkfm#jw#tbpnfnafqp#le#qfobwjlm#wlb``lnnlgbwfbolmd#tjwk#Jm#wkf#obwfwkf#Fmdojpkgfoj`jlvp!=wkjp#jp#mlwwkf#sqfpfmwje#wkfz#bqfbmg#ejmboozb#nbwwfq#le\\u000E\\t\\n?,gju=\\u000E\\t\\u000E\\t?,p`qjsw=ebpwfq#wkbmnbilqjwz#lebewfq#tkj`k`lnsbqbwjufwl#nbjmwbjmjnsqluf#wkfbtbqgfg#wkffq!#`obpp>!eqbnfalqgfqqfpwlqbwjlmjm#wkf#pbnfbmbozpjp#lewkfjq#ejqpwGvqjmd#wkf#`lmwjmfmwbopfrvfm`f#leevm`wjlm+*xelmw.pjyf9#tlqh#lm#wkf?,p`qjsw=\\t?afdjmp#tjwkibubp`qjsw9`lmpwjwvfmwtbp#elvmgfgfrvjojaqjvnbppvnf#wkbwjp#djufm#azmffgp#wl#af`llqgjmbwfpwkf#ubqjlvpbqf#sbqw#lelmoz#jm#wkfpf`wjlmp#lejp#b#`lnnlmwkflqjfp#legjp`lufqjfpbppl`jbwjlmfgdf#le#wkfpwqfmdwk#leslpjwjlm#jmsqfpfmw.gbzvmjufqpboozwl#elqn#wkfavw#jmpwfbg`lqslqbwjlmbwwb`kfg#wljp#`lnnlmozqfbplmp#elq#%rvlw8wkf#`bm#af#nbgftbp#baof#wltkj`k#nfbmpavw#gjg#mlwlmNlvpfLufqbp#slppjaoflsfqbwfg#az`lnjmd#eqlnwkf#sqjnbqzbggjwjlm#leelq#pfufqbowqbmpefqqfgb#sfqjlg#lebqf#baof#wlkltfufq/#jwpklvog#kbufnv`k#obqdfq\\t\\n?,p`qjsw=bglswfg#wkfsqlsfqwz#legjqf`wfg#azfeef`wjufoztbp#aqlvdkw`kjogqfm#leSqldqbnnjmdolmdfq#wkbmnbmvp`qjswptbq#bdbjmpwaz#nfbmp#lebmg#nlpw#lepjnjobq#wl#sqlsqjfwbqzlqjdjmbwjmdsqfpwjdjlvpdqbnnbwj`bof{sfqjfm`f-wl#nbhf#wkfJw#tbp#bopljp#elvmg#jm`lnsfwjwlqpjm#wkf#V-P-qfsob`f#wkfaqlvdkw#wkf`bo`vobwjlmeboo#le#wkfwkf#dfmfqbosqb`wj`boozjm#klmlq#leqfofbpfg#jmqfpjgfmwjbobmg#plnf#lehjmd#le#wkfqfb`wjlm#wl2pw#Fbqo#le`vowvqf#bmgsqjm`jsbooz?,wjwof=\\t##wkfz#`bm#afab`h#wl#wkfplnf#le#kjpf{slpvqf#wlbqf#pjnjobqelqn#le#wkfbggEbulqjwf`jwjyfmpkjssbqw#jm#wkfsflsof#tjwkjm#sqb`wj`fwl#`lmwjmvf%bns8njmvp8bssqlufg#az#wkf#ejqpw#booltfg#wkfbmg#elq#wkfevm`wjlmjmdsobzjmd#wkfplovwjlm#wlkfjdkw>!3!#jm#kjp#allhnlqf#wkbm#belooltp#wkf`qfbwfg#wkfsqfpfm`f#jm%maps8?,wg=mbwjlmbojpwwkf#jgfb#leb#`kbqb`wfqtfqf#elq`fg#`obpp>!awmgbzp#le#wkfefbwvqfg#jmpkltjmd#wkfjmwfqfpw#jmjm#sob`f#lewvqm#le#wkfwkf#kfbg#leOlqg#le#wkfslojwj`boozkbp#jwp#ltmFgv`bwjlmbobssqlubo#leplnf#le#wkffb`k#lwkfq/afkbujlq#lebmg#af`bvpfbmg#bmlwkfqbssfbqfg#lmqf`lqgfg#jmaob`h%rvlw8nbz#jm`ovgfwkf#tlqog\\$p`bm#ofbg#wlqfefqp#wl#balqgfq>!3!#dlufqmnfmw#tjmmjmd#wkfqfpvowfg#jm#tkjof#wkf#Tbpkjmdwlm/wkf#pvaif`w`jwz#jm#wkf=?,gju=\\u000E\\t\\n\\nqfeof`w#wkfwl#`lnsofwfaf`bnf#nlqfqbgjlb`wjufqfif`wfg#aztjwklvw#bmzkjp#ebwkfq/tkj`k#`lvog`lsz#le#wkfwl#jmgj`bwfb#slojwj`bob``lvmwp#le`lmpwjwvwfptlqhfg#tjwkfq?,b=?,oj=le#kjp#ojefb``lnsbmjfg`ojfmwTjgwksqfufmw#wkfOfdjpobwjufgjeefqfmwozwldfwkfq#jmkbp#pfufqboelq#bmlwkfqwf{w#le#wkfelvmgfg#wkff#tjwk#wkf#jp#vpfg#elq`kbmdfg#wkfvpvbooz#wkfsob`f#tkfqftkfqfbp#wkf=#?b#kqfe>!!=?b#kqfe>!wkfnpfoufp/bowklvdk#kfwkbw#`bm#afwqbgjwjlmboqlof#le#wkfbp#b#qfpvowqfnluf@kjoggfpjdmfg#aztfpw#le#wkfPlnf#sflsofsqlgv`wjlm/pjgf#le#wkfmftpofwwfqpvpfg#az#wkfgltm#wl#wkfb``fswfg#azojuf#jm#wkfbwwfnswp#wllvwpjgf#wkfeqfrvfm`jfpKltfufq/#jmsqldqbnnfqpbw#ofbpw#jmbssql{jnbwfbowklvdk#jwtbp#sbqw#lebmg#ubqjlvpDlufqmlq#lewkf#bqwj`ofwvqmfg#jmwl=?b#kqfe>!,wkf#f`lmlnzjp#wkf#nlpwnlpw#tjgfoztlvog#obwfqbmg#sfqkbspqjpf#wl#wkfl``vqp#tkfmvmgfq#tkj`k`lmgjwjlmp-wkf#tfpwfqmwkflqz#wkbwjp#sqlgv`fgwkf#`jwz#lejm#tkj`k#kfpffm#jm#wkfwkf#`fmwqboavjogjmd#lenbmz#le#kjpbqfb#le#wkfjp#wkf#lmoznlpw#le#wkfnbmz#le#wkfwkf#TfpwfqmWkfqf#jp#mlf{wfmgfg#wlPwbwjpwj`bo`lopsbm>1#\\u007Fpklqw#pwlqzslppjaof#wlwlsloldj`bo`qjwj`bo#leqfslqwfg#wlb#@kqjpwjbmgf`jpjlm#wljp#frvbo#wlsqlaofnp#leWkjp#`bm#afnfq`kbmgjpfelq#nlpw#leml#fujgfm`ffgjwjlmp#lefofnfmwp#jm%rvlw8-#Wkf`ln,jnbdfp,tkj`k#nbhfpwkf#sql`fppqfnbjmp#wkfojwfqbwvqf/jp#b#nfnafqwkf#slsvobqwkf#bm`jfmwsqlaofnp#jmwjnf#le#wkfgfefbwfg#azalgz#le#wkfb#eft#zfbqpnv`k#le#wkfwkf#tlqh#le@bojelqmjb/pfqufg#bp#bdlufqmnfmw-`lm`fswp#lenlufnfmw#jm\\n\\n?gju#jg>!jw!#ubovf>!obmdvbdf#lebp#wkfz#bqfsqlgv`fg#jmjp#wkbw#wkff{sobjm#wkfgju=?,gju=\\tKltfufq#wkfofbg#wl#wkf\\n?b#kqfe>!,tbp#dqbmwfgsflsof#kbuf`lmwjmvbooztbp#pffm#bpbmg#qfobwfgwkf#qlof#lesqlslpfg#azle#wkf#afpwfb`k#lwkfq-@lmpwbmwjmfsflsof#eqlngjbof`wp#lewl#qfujpjlmtbp#qfmbnfgb#plvq`f#lewkf#jmjwjboobvm`kfg#jmsqlujgf#wkfwl#wkf#tfpwtkfqf#wkfqfbmg#pjnjobqafwtffm#wtljp#bopl#wkfFmdojpk#bmg`lmgjwjlmp/wkbw#jw#tbpfmwjwofg#wlwkfnpfoufp-rvbmwjwz#leqbmpsbqfm`zwkf#pbnf#bpwl#iljm#wkf`lvmwqz#bmgwkjp#jp#wkfWkjp#ofg#wlb#pwbwfnfmw`lmwqbpw#wlobpwJmgf{Lewkqlvdk#kjpjp#gfpjdmfgwkf#wfqn#jpjp#sqlujgfgsqlwf`w#wkfmd?,b=?,oj=Wkf#`vqqfmwwkf#pjwf#lepvapwbmwjbof{sfqjfm`f/jm#wkf#Tfpwwkfz#pklvogpolufm(ajmb`lnfmwbqjlpvmjufqpjgbg`lmgj`jlmfpb`wjujgbgfpf{sfqjfm`jbwf`mlold/Absqlgv``j/_msvmwvb`j/_mbsoj`b`j/_m`lmwqbpf/]b`bwfdlq/Abpqfdjpwqbqpfsqlefpjlmbowqbwbnjfmwlqfd/Apwqbwfpf`qfwbq/Absqjm`jsbofpsqlwf``j/_mjnslqwbmwfpjnslqwbm`jbslpjajojgbgjmwfqfpbmwf`qf`jnjfmwlmf`fpjgbgfppvp`qjajqpfbpl`jb`j/_mgjpslmjaofpfubovb`j/_mfpwvgjbmwfpqfpslmpbaofqfplov`j/_mdvbgbobibqbqfdjpwqbglplslqwvmjgbg`lnfq`jbofpelwldqbe/Abbvwlqjgbgfpjmdfmjfq/Abwfofujpj/_m`lnsfwfm`jblsfqb`jlmfpfpwbaof`jglpjnsofnfmwfb`wvbonfmwfmbufdb`j/_m`lmelqnjgbgojmf.kfjdkw9elmw.ebnjoz9!#9#!kwws9,,bssoj`bwjlmpojmh!#kqfe>!psf`jej`booz,,?\\\"X@GBWBX\\tLqdbmjybwjlmgjpwqjavwjlm3s{8#kfjdkw9qfobwjlmpkjsgfuj`f.tjgwk?gju#`obpp>!?obafo#elq>!qfdjpwqbwjlm?,mlp`qjsw=\\t,jmgf{-kwno!tjmglt-lsfm+#\\\"jnslqwbmw8bssoj`bwjlm,jmgfsfmgfm`f,,ttt-dlldoflqdbmjybwjlmbvwl`lnsofwfqfrvjqfnfmwp`lmpfqubwjuf?elqn#mbnf>!jmwfoof`wvbonbqdjm.ofew92;wk#`fmwvqzbm#jnslqwbmwjmpwjwvwjlmpbaaqfujbwjlm?jnd#`obpp>!lqdbmjpbwjlm`jujojybwjlm2:wk#`fmwvqzbq`kjwf`wvqfjm`lqslqbwfg13wk#`fmwvqz.`lmwbjmfq!=nlpw#mlwbaoz,=?,b=?,gju=mlwjej`bwjlm\\$vmgfejmfg\\$*Evqwkfqnlqf/afojfuf#wkbwjmmfqKWNO#>#sqjlq#wl#wkfgqbnbwj`boozqfefqqjmd#wlmfdlwjbwjlmpkfbgrvbqwfqpPlvwk#Beqj`bvmpv``fppevoSfmmpzoubmjbBp#b#qfpvow/?kwno#obmd>!%ow8,pvs%dw8gfbojmd#tjwkskjobgfoskjbkjpwlqj`booz*8?,p`qjsw=\\tsbggjmd.wls9f{sfqjnfmwbodfwBwwqjavwfjmpwqv`wjlmpwf`kmloldjfpsbqw#le#wkf#>evm`wjlm+*xpvap`qjswjlmo-gwg!=\\u000E\\t?kwdfldqbskj`bo@lmpwjwvwjlm\\$/#evm`wjlm+pvsslqwfg#azbdqj`vowvqbo`lmpwqv`wjlmsvaoj`bwjlmpelmw.pjyf9#2b#ubqjfwz#le?gju#pwzof>!Fm`z`olsfgjbjeqbnf#pq`>!gfnlmpwqbwfgb``lnsojpkfgvmjufqpjwjfpGfnldqbskj`p*8?,p`qjsw=?gfgj`bwfg#wlhmltofgdf#lepbwjpeb`wjlmsbqwj`vobqoz?,gju=?,gju=Fmdojpk#+VP*bssfmg@kjog+wqbmpnjppjlmp-#Kltfufq/#jmwfoojdfm`f!#wbajmgf{>!eolbw9qjdkw8@lnnlmtfbowkqbmdjmd#eqlnjm#tkj`k#wkfbw#ofbpw#lmfqfsqlgv`wjlmfm`z`olsfgjb8elmw.pjyf92ivqjpgj`wjlmbw#wkbw#wjnf!=?b#`obpp>!Jm#bggjwjlm/gfp`qjswjlm(`lmufqpbwjlm`lmwb`w#tjwkjp#dfmfqboozq!#`lmwfmw>!qfsqfpfmwjmd%ow8nbwk%dw8sqfpfmwbwjlml``bpjlmbooz?jnd#tjgwk>!mbujdbwjlm!=`lnsfmpbwjlm`kbnsjlmpkjsnfgjb>!boo!#ujlobwjlm#leqfefqfm`f#wlqfwvqm#wqvf8Pwqj`w,,FM!#wqbmpb`wjlmpjmwfqufmwjlmufqjej`bwjlmJmelqnbwjlm#gjeej`vowjfp@kbnsjlmpkjs`bsbajojwjfp?\\\"Xfmgje^..=~\\t?,p`qjsw=\\t@kqjpwjbmjwzelq#f{bnsof/Sqlefppjlmboqfpwqj`wjlmppvddfpw#wkbwtbp#qfofbpfg+pv`k#bp#wkfqfnluf@obpp+vmfnsolznfmwwkf#Bnfqj`bmpwqv`wvqf#le,jmgf{-kwno#svaojpkfg#jmpsbm#`obpp>!!=?b#kqfe>!,jmwqlgv`wjlmafolmdjmd#wl`objnfg#wkbw`lmpfrvfm`fp?nfwb#mbnf>!Dvjgf#wl#wkflufqtkfonjmdbdbjmpw#wkf#`lm`fmwqbwfg/\\t-mlmwlv`k#lapfqubwjlmp?,b=\\t?,gju=\\te#+gl`vnfmw-alqgfq9#2s{#xelmw.pjyf92wqfbwnfmw#le3!#kfjdkw>!2nlgjej`bwjlmJmgfsfmgfm`fgjujgfg#jmwldqfbwfq#wkbmb`kjfufnfmwpfpwbaojpkjmdIbubP`qjsw!#mfufqwkfofpppjdmjej`bm`fAqlbg`bpwjmd=%maps8?,wg=`lmwbjmfq!=\\tpv`k#bp#wkf#jmeovfm`f#leb#sbqwj`vobqpq`>\\$kwws9,,mbujdbwjlm!#kboe#le#wkf#pvapwbmwjbo#%maps8?,gju=bgubmwbdf#legjp`lufqz#leevmgbnfmwbo#nfwqlslojwbmwkf#lsslpjwf!#{no9obmd>!gfojafqbwfozbojdm>`fmwfqfulovwjlm#lesqfpfqubwjlmjnsqlufnfmwpafdjmmjmd#jmIfpvp#@kqjpwSvaoj`bwjlmpgjpbdqffnfmwwf{w.bojdm9q/#evm`wjlm+*pjnjobqjwjfpalgz=?,kwno=jp#`vqqfmwozboskbafwj`bojp#plnfwjnfpwzsf>!jnbdf,nbmz#le#wkf#eolt9kjggfm8bubjobaof#jmgfp`qjaf#wkff{jpwfm`f#leboo#lufq#wkfwkf#Jmwfqmfw\\n?vo#`obpp>!jmpwboobwjlmmfjdkalqkllgbqnfg#elq`fpqfgv`jmd#wkf`lmwjmvfp#wlMlmfwkfofpp/wfnsfqbwvqfp\\t\\n\\n?b#kqfe>!`olpf#wl#wkff{bnsofp#le#jp#balvw#wkf+pff#afolt*-!#jg>!pfbq`ksqlefppjlmbojp#bubjobaofwkf#leej`jbo\\n\\n?,p`qjsw=\\t\\t\\n\\n?gju#jg>!b``fofqbwjlmwkqlvdk#wkf#Kboo#le#Ebnfgfp`qjswjlmpwqbmpobwjlmpjmwfqefqfm`f#wzsf>\\$wf{w,qf`fmw#zfbqpjm#wkf#tlqogufqz#slsvobqxab`hdqlvmg9wqbgjwjlmbo#plnf#le#wkf#`lmmf`wfg#wlf{soljwbwjlmfnfqdfm`f#le`lmpwjwvwjlmB#Kjpwlqz#lepjdmjej`bmw#nbmveb`wvqfgf{sf`wbwjlmp=?mlp`qjsw=?`bm#af#elvmgaf`bvpf#wkf#kbp#mlw#affmmfjdkalvqjmdtjwklvw#wkf#bggfg#wl#wkf\\n?oj#`obpp>!jmpwqvnfmwboPlujfw#Vmjlmb`hmltofgdfgtkj`k#`bm#afmbnf#elq#wkfbwwfmwjlm#wlbwwfnswp#wl#gfufolsnfmwpJm#eb`w/#wkf?oj#`obpp>!bjnsoj`bwjlmppvjwbaof#elqnv`k#le#wkf#`lolmjybwjlmsqfpjgfmwjbo`bm`foAvaaof#Jmelqnbwjlmnlpw#le#wkf#jp#gfp`qjafgqfpw#le#wkf#nlqf#lq#ofppjm#PfswfnafqJmwfoojdfm`fpq`>!kwws9,,s{8#kfjdkw9#bubjobaof#wlnbmveb`wvqfqkvnbm#qjdkwpojmh#kqfe>!,bubjobajojwzsqlslqwjlmbolvwpjgf#wkf#bpwqlmlnj`bokvnbm#afjmdpmbnf#le#wkf#bqf#elvmg#jmbqf#abpfg#lmpnboofq#wkbmb#sfqplm#tklf{sbmpjlm#lebqdvjmd#wkbwmlt#hmltm#bpJm#wkf#fbqozjmwfqnfgjbwfgfqjufg#eqlnP`bmgjmbujbm?,b=?,gju=\\u000E\\t`lmpjgfq#wkfbm#fpwjnbwfgwkf#Mbwjlmbo?gju#jg>!sbdqfpvowjmd#jm`lnnjppjlmfgbmboldlvp#wlbqf#qfrvjqfg,vo=\\t?,gju=\\ttbp#abpfg#lmbmg#af`bnf#b%maps8%maps8w!#ubovf>!!#tbp#`bswvqfgml#nlqf#wkbmqfpsf`wjufoz`lmwjmvf#wl#=\\u000E\\t?kfbg=\\u000E\\t?tfqf#`qfbwfgnlqf#dfmfqbojmelqnbwjlm#vpfg#elq#wkfjmgfsfmgfmw#wkf#Jnsfqjbo`lnslmfmw#lewl#wkf#mlqwkjm`ovgf#wkf#@lmpwqv`wjlmpjgf#le#wkf#tlvog#mlw#afelq#jmpwbm`fjmufmwjlm#lenlqf#`lnsof{`loof`wjufozab`hdqlvmg9#wf{w.bojdm9#jwp#lqjdjmbojmwl#b``lvmwwkjp#sql`fppbm#f{wfmpjufkltfufq/#wkfwkfz#bqf#mlwqfif`wfg#wkf`qjwj`jpn#legvqjmd#tkj`ksqlabaoz#wkfwkjp#bqwj`of+evm`wjlm+*xJw#pklvog#afbm#bdqffnfmwb``jgfmwboozgjeefqp#eqlnBq`kjwf`wvqfafwwfq#hmltmbqqbmdfnfmwpjmeovfm`f#lmbwwfmgfg#wkfjgfmwj`bo#wlplvwk#le#wkfsbpp#wkqlvdk{no!#wjwof>!tfjdkw9alog8`qfbwjmd#wkfgjpsobz9mlmfqfsob`fg#wkf?jnd#pq`>!,jkwwsp9,,ttt-Tlqog#Tbq#JJwfpwjnlmjbopelvmg#jm#wkfqfrvjqfg#wl#bmg#wkbw#wkfafwtffm#wkf#tbp#gfpjdmfg`lmpjpwp#le#`lmpjgfqbaozsvaojpkfg#azwkf#obmdvbdf@lmpfqubwjlm`lmpjpwfg#leqfefq#wl#wkfab`h#wl#wkf#`pp!#nfgjb>!Sflsof#eqln#bubjobaof#lmsqlufg#wl#afpvddfpwjlmp!tbp#hmltm#bpubqjfwjfp#leojhfoz#wl#af`lnsqjpfg#lepvsslqw#wkf#kbmgp#le#wkf`lvsofg#tjwk`lmmf`w#bmg#alqgfq9mlmf8sfqelqnbm`fpafelqf#afjmdobwfq#af`bnf`bo`vobwjlmplewfm#`boofgqfpjgfmwp#lenfbmjmd#wkbw=?oj#`obpp>!fujgfm`f#elqf{sobmbwjlmpfmujqlmnfmwp!=?,b=?,gju=tkj`k#booltpJmwqlgv`wjlmgfufolsfg#azb#tjgf#qbmdflm#afkboe#leubojdm>!wls!sqjm`jsof#lebw#wkf#wjnf/?,mlp`qjsw=\\u000Epbjg#wl#kbufjm#wkf#ejqpwtkjof#lwkfqpkzslwkfwj`boskjolplskfqpsltfq#le#wkf`lmwbjmfg#jmsfqelqnfg#azjmbajojwz#wltfqf#tqjwwfmpsbm#pwzof>!jmsvw#mbnf>!wkf#rvfpwjlmjmwfmgfg#elqqfif`wjlm#lejnsojfp#wkbwjmufmwfg#wkfwkf#pwbmgbqgtbp#sqlabaozojmh#afwtffmsqlefpplq#lejmwfqb`wjlmp`kbmdjmd#wkfJmgjbm#L`fbm#`obpp>!obpwtlqhjmd#tjwk\\$kwws9,,ttt-zfbqp#afelqfWkjp#tbp#wkfqf`qfbwjlmbofmwfqjmd#wkfnfbpvqfnfmwpbm#f{wqfnfozubovf#le#wkfpwbqw#le#wkf\\t?,p`qjsw=\\t\\tbm#feelqw#wljm`qfbpf#wkfwl#wkf#plvwkpsb`jmd>!3!=pveej`jfmwozwkf#Fvqlsfbm`lmufqwfg#wl`ofbqWjnflvwgjg#mlw#kbuf`lmpfrvfmwozelq#wkf#mf{wf{wfmpjlm#lef`lmlnj`#bmgbowklvdk#wkfbqf#sqlgv`fgbmg#tjwk#wkfjmpveej`jfmwdjufm#az#wkfpwbwjmd#wkbwf{sfmgjwvqfp?,psbm=?,b=\\twklvdkw#wkbwlm#wkf#abpjp`foosbggjmd>jnbdf#le#wkfqfwvqmjmd#wljmelqnbwjlm/pfsbqbwfg#azbppbppjmbwfgp!#`lmwfmw>!bvwklqjwz#lemlqwktfpwfqm?,gju=\\t?gju#!=?,gju=\\u000E\\t##`lmpvowbwjlm`lnnvmjwz#lewkf#mbwjlmbojw#pklvog#afsbqwj`jsbmwp#bojdm>!ofewwkf#dqfbwfpwpfof`wjlm#lepvsfqmbwvqbogfsfmgfmw#lmjp#nfmwjlmfgbooltjmd#wkftbp#jmufmwfgb``lnsbmzjmdkjp#sfqplmbobubjobaof#bwpwvgz#le#wkflm#wkf#lwkfqf{f`vwjlm#leKvnbm#Qjdkwpwfqnp#le#wkfbppl`jbwjlmpqfpfbq`k#bmgpv``ffgfg#azgfefbwfg#wkfbmg#eqln#wkfavw#wkfz#bqf`lnnbmgfq#lepwbwf#le#wkfzfbqp#le#bdfwkf#pwvgz#le?vo#`obpp>!psob`f#jm#wkftkfqf#kf#tbp?oj#`obpp>!ewkfqf#bqf#mltkj`k#af`bnfkf#svaojpkfgf{sqfppfg#jmwl#tkj`k#wkf`lnnjppjlmfqelmw.tfjdkw9wfqqjwlqz#lef{wfmpjlmp!=Qlnbm#Fnsjqffrvbo#wl#wkfJm#`lmwqbpw/kltfufq/#bmgjp#wzsj`boozbmg#kjp#tjef+bopl#`boofg=?vo#`obpp>!feef`wjufoz#fuloufg#jmwlpffn#wl#kbuftkj`k#jp#wkfwkfqf#tbp#mlbm#f{`foofmwboo#le#wkfpfgfp`qjafg#azJm#sqb`wj`f/aqlbg`bpwjmd`kbqdfg#tjwkqfeof`wfg#jmpvaif`wfg#wlnjojwbqz#bmgwl#wkf#sljmwf`lmlnj`boozpfwWbqdfwjmdbqf#b`wvboozuj`wlqz#lufq+*8?,p`qjsw=`lmwjmvlvpozqfrvjqfg#elqfulovwjlmbqzbm#feef`wjufmlqwk#le#wkf/#tkj`k#tbp#eqlmw#le#wkflq#lwkfqtjpfplnf#elqn#lekbg#mlw#affmdfmfqbwfg#azjmelqnbwjlm-sfqnjwwfg#wljm`ovgfp#wkfgfufolsnfmw/fmwfqfg#jmwlwkf#sqfujlvp`lmpjpwfmwozbqf#hmltm#bpwkf#ejfog#lewkjp#wzsf#ledjufm#wl#wkfwkf#wjwof#le`lmwbjmp#wkfjmpwbm`fp#lejm#wkf#mlqwkgvf#wl#wkfjqbqf#gfpjdmfg`lqslqbwjlmptbp#wkbw#wkflmf#le#wkfpfnlqf#slsvobqpv``ffgfg#jmpvsslqw#eqlnjm#gjeefqfmwglnjmbwfg#azgfpjdmfg#elqltmfqpkjs#lebmg#slppjaozpwbmgbqgjyfgqfpslmpfWf{wtbp#jmwfmgfgqf`fjufg#wkfbppvnfg#wkbwbqfbp#le#wkfsqjnbqjoz#jmwkf#abpjp#lejm#wkf#pfmpfb``lvmwp#elqgfpwqlzfg#azbw#ofbpw#wtltbp#gf`obqfg`lvog#mlw#afPf`qfwbqz#lebssfbq#wl#afnbqdjm.wls92,]_p(\\u007F_p(',df*xwkqlt#f~8wkf#pwbqw#lewtl#pfsbqbwfobmdvbdf#bmgtkl#kbg#affmlsfqbwjlm#legfbwk#le#wkfqfbo#mvnafqp\\n?ojmh#qfo>!sqlujgfg#wkfwkf#pwlqz#le`lnsfwjwjlmpfmdojpk#+VH*fmdojpk#+VP*<p<R<Q<_<R<W<M=l<S=m<V<T=m=l<S=m<V<T=m=l<S=m<V<R5h4U4]4D5f4E\\nAO\\u0005Gx\\bTA\\nzk\\u000BBl\\bQ\\u007F\\bTA\\nzk\\u000BUm\\bQ\\u007F\\bTA\\nzk\\npe\\u0005u|\\ti@\\tcT\\bVV\\n\\\\}\\nxS\\tVp\\u0005tS\\u0005k`\\t[X\\t[X\\u000BHR\\bPv\\bTW\\bUe\\n\\u007Fa\\bQp\\u000B_W\\u000BWs\\nxS\\u000BAz\\n_y\\u0004Khjmelqnb`j/_mkfqqbnjfmwbpfof`wq/_mj`lgfp`qjs`j/_m`obpjej`bglp`lml`jnjfmwlsvaoj`b`j/_mqfob`jlmbgbpjmelqn/Mwj`bqfob`jlmbglpgfsbqwbnfmwlwqbabibglqfpgjqf`wbnfmwfbzvmwbnjfmwlnfq`bglOjaqf`lmw/M`wfmlpkbajwb`jlmfp`vnsojnjfmwlqfpwbvqbmwfpgjpslpj`j/_m`lmpf`vfm`jbfof`wq/_mj`bbsoj`b`jlmfpgfp`lmf`wbgljmpwbob`j/_mqfbojyb`j/_mvwjojyb`j/_mfm`j`olsfgjbfmefqnfgbgfpjmpwqvnfmwlpf{sfqjfm`jbpjmpwjwv`j/_msbqwj`vobqfppva`bwfdlqjb=n<R<W=`<V<R<L<R=m=m<T<T=l<\\\\<]<R=n=g<]<R<W=`=d<Y<S=l<R=m=n<R<P<R<Z<Y=n<Y<X=l=o<_<T=i=m<W=o=k<\\\\<Y=m<Y<U=k<\\\\=m<^=m<Y<_<X<\\\\<L<R=m=m<T=c<p<R=m<V<^<Y<X=l=o<_<T<Y<_<R=l<R<X<\\\\<^<R<S=l<R=m<X<\\\\<Q<Q=g=i<X<R<W<Z<Q=g<T<P<Y<Q<Q<R<p<R=m<V<^=g=l=o<]<W<Y<U<p<R=m<V<^<\\\\=m=n=l<\\\\<Q=g<Q<T=k<Y<_<R=l<\\\\<]<R=n<Y<X<R<W<Z<Y<Q=o=m<W=o<_<T=n<Y<S<Y=l=`<r<X<Q<\\\\<V<R<S<R=n<R<P=o=l<\\\\<]<R=n=o<\\\\<S=l<Y<W=c<^<R<R<]=e<Y<R<X<Q<R<_<R=m<^<R<Y<_<R=m=n<\\\\=n=`<T<X=l=o<_<R<U=h<R=l=o<P<Y=i<R=l<R=d<R<S=l<R=n<T<^=m=m=g<W<V<\\\\<V<\\\\<Z<X=g<U<^<W<\\\\=m=n<T<_=l=o<S<S=g<^<P<Y=m=n<Y=l<\\\\<]<R=n<\\\\=m<V<\\\\<[<\\\\<W<S<Y=l<^=g<U<X<Y<W<\\\\=n=`<X<Y<Q=`<_<T<S<Y=l<T<R<X<]<T<[<Q<Y=m<R=m<Q<R<^<Y<P<R<P<Y<Q=n<V=o<S<T=n=`<X<R<W<Z<Q<\\\\=l<\\\\<P<V<\\\\=i<Q<\\\\=k<\\\\<W<R<L<\\\\<]<R=n<\\\\<N<R<W=`<V<R=m<R<^=m<Y<P<^=n<R=l<R<U<Q<\\\\=k<\\\\<W<\\\\=m<S<T=m<R<V=m<W=o<Z<]=g=m<T=m=n<Y<P<S<Y=k<\\\\=n<T<Q<R<^<R<_<R<S<R<P<R=e<T=m<\\\\<U=n<R<^<S<R=k<Y<P=o<S<R<P<R=e=`<X<R<W<Z<Q<R=m=m=g<W<V<T<]=g=m=n=l<R<X<\\\\<Q<Q=g<Y<P<Q<R<_<T<Y<S=l<R<Y<V=n<M<Y<U=k<\\\\=m<P<R<X<Y<W<T=n<\\\\<V<R<_<R<R<Q<W<\\\\<U<Q<_<R=l<R<X<Y<^<Y=l=m<T=c=m=n=l<\\\\<Q<Y=h<T<W=`<P=g=o=l<R<^<Q=c=l<\\\\<[<Q=g=i<T=m<V<\\\\=n=`<Q<Y<X<Y<W=b=c<Q<^<\\\\=l=c<P<Y<Q=`=d<Y<P<Q<R<_<T=i<X<\\\\<Q<Q<R<U<[<Q<\\\\=k<T=n<Q<Y<W=`<[=c=h<R=l=o<P<\\\\<N<Y<S<Y=l=`<P<Y=m=c=j<\\\\<[<\\\\=e<T=n=g<w=o=k=d<T<Y\\u000CHD\\u000CHU\\u000CIl\\u000CHn\\u000CHy\\u000CH\\\\\\u000CHD\\u000CIk\\u000CHi\\u000CHF\\u000CHD\\u000CIk\\u000CHy\\u000CHS\\u000CHC\\u000CHR\\u000CHy\\u000CH\\\\\\u000CIk\\u000CHn\\u000CHi\\u000CHD\\u000CIa\\u000CHC\\u000CHy\\u000CIa\\u000CHC\\u000CHR\\u000CH{\\u000CHR\\u000CHk\\u000CHM\\u000CH@\\u000CHR\\u000CH\\\\\\u000CIk\\u000CHy\\u000CHS\\u000CHT\\u000CIl\\u000CHJ\\u000CHS\\u000CHC\\u000CHR\\u000CHF\\u000CHU\\u000CH^\\u000CIk\\u000CHT\\u000CHS\\u000CHn\\u000CHU\\u000CHA\\u000CHR\\u000CH\\\\\\u000CHH\\u000CHi\\u000CHF\\u000CHD\\u000CIl\\u000CHY\\u000CHR\\u000CH^\\u000CIk\\u000CHT\\u000CIk\\u000CHY\\u000CHR\\u000CHy\\u000CH\\\\\\u000CHH\\u000CIk\\u000CHB\\u000CIk\\u000CH\\\\\\u000CIk\\u000CHU\\u000CIg\\u000CHD\\u000CIk\\u000CHT\\u000CHy\\u000CHH\\u000CIk\\u000CH@\\u000CHU\\u000CIm\\u000CHH\\u000CHT\\u000CHR\\u000CHk\\u000CHs\\u000CHU\\u000CIg\\u000CH{\\u000CHR\\u000CHp\\u000CHR\\u000CHD\\u000CIk\\u000CHB\\u000CHS\\u000CHD\\u000CHs\\u000CHy\\u000CH\\\\\\u000CHH\\u000CHR\\u000CHy\\u000CH\\\\\\u000CHD\\u000CHR\\u000CHe\\u000CHD\\u000CHy\\u000CIk\\u000CHC\\u000CHU\\u000CHR\\u000CHm\\u000CHT\\u000CH@\\u000CHT\\u000CIk\\u000CHA\\u000CHR\\u000CH[\\u000CHR\\u000CHj\\u000CHF\\u000CHy\\u000CIk\\u000CH^\\u000CHS\\u000CHC\\u000CIk\\u000CHZ\\u000CIm\\u000CH\\\\\\u000CIn\\u000CHk\\u000CHT\\u000CHy\\u000CIk\\u000CHt\\u000CHn\\u000CHs\\u000CIk\\u000CHB\\u000CIk\\u000CH\\\\\\u000CIl\\u000CHT\\u000CHy\\u000CHH\\u000CHR\\u000CHB\\u000CIk\\u000CH\\\\\\u000CHR\\u000CH^\\u000CIk\\u000CHy\\u000CH\\\\\\u000CHi\\u000CHK\\u000CHS\\u000CHy\\u000CHi\\u000CHF\\u000CHD\\u000CHR\\u000CHT\\u000CHB\\u000CHR\\u000CHp\\u000CHB\\u000CIm\\u000CHq\\u000CIk\\u000CHy\\u000CHR\\u000CH\\\\\\u000CHO\\u000CHU\\u000CIg\\u000CHH\\u000CHR\\u000CHy\\u000CHM\\u000CHP\\u000CIl\\u000CHC\\u000CHU\\u000CHR\\u000CHn\\u000CHU\\u000CIg\\u000CHs\\u000CH^\\u000CHZ\\u000CH@\\u000CIa\\u000CHJ\\u000CH^\\u000CHS\\u000CHC\\u000CHR\\u000CHp\\u000CIl\\u000CHY\\u000CHD\\u000CHp\\u000CHR\\u000CHH\\u000CHR\\u000CHy\\u000CId\\u000CHT\\u000CIk\\u000CHj\\u000CHF\\u000CHy\\u000CHR\\u000CHY\\u000CHR\\u000CH^\\u000CIl\\u000CHJ\\u000CIk\\u000CHD\\u000CIk\\u000CHF\\u000CIn\\u000CH\\\\\\u000CIl\\u000CHF\\u000CHR\\u000CHD\\u000CIl\\u000CHe\\u000CHT\\u000CHy\\u000CIk\\u000CHU\\u000CIg\\u000CH{\\u000CIl\\u000CH@\\u000CId\\u000CHL\\u000CHy\\u000CHj\\u000CHF\\u000CHy\\u000CIl\\u000CHY\\u000CH\\\\\\u000CIa\\u000CH[\\u000CH{\\u000CHR\\u000CHn\\u000CHY\\u000CHj\\u000CHF\\u000CHy\\u000CIg\\u000CHp\\u000CHS\\u000CH^\\u000CHR\\u000CHp\\u000CHR\\u000CHD\\u000CHR\\u000CHT\\u000CHU\\u000CHB\\u000CHH\\u000CHU\\u000CHB\\u000CIk\\u000CHn\\u000CHe\\u000CHD\\u000CHy\\u000CIl\\u000CHC\\u000CHR\\u000CHU\\u000CIn\\u000CHJ\\u000CH\\\\\\u000CIa\\u000CHp\\u000CHT\\u000CIn\\u000CHv\\u000CIl\\u000CHF\\u000CHT\\u000CHn\\u000CHJ\\u000CHT\\u000CHY\\u000CHR\\u000CH^\\u000CHU\\u000CIg\\u000CHD\\u000CHR\\u000CHU\\u000CIg\\u000CHH\\u000CIl\\u000CHp\\u000CId\\u000CHT\\u000CIk\\u000CHY\\u000CHR\\u000CHF\\u000CHT\\u000CHp\\u000CHD\\u000CHH\\u000CHR\\u000CHD\\u000CIk\\u000CHH\\u000CHR\\u000CHp\\u000CHR\\u000CH\\\\\\u000CIl\\u000CHt\\u000CHR\\u000CHC\\u000CH^\\u000CHp\\u000CHS\\u000CH^\\u000CIk\\u000CHD\\u000CIl\\u000CHv\\u000CIk\\u000CHp\\u000CHR\\u000CHn\\u000CHv\\u000CHF\\u000CHH\\u000CIa\\u000CH\\\\\\u000CH{\\u000CIn\\u000CH{\\u000CH^\\u000CHp\\u000CHR\\u000CHH\\u000CIk\\u000CH@\\u000CHR\\u000CHU\\u000CH\\\\\\u000CHj\\u000CHF\\u000CHD\\u000CIk\\u000CHY\\u000CHR\\u000CHU\\u000CHD\\u000CHk\\u000CHT\\u000CHy\\u000CHR\\u000CHT\\u000CIm\\u000CH@\\u000CHU\\u000CH\\\\\\u000CHU\\u000CHD\\u000CIk\\u000CHk\\u000CHT\\u000CHT\\u000CIk\\u000CHT\\u000CHU\\u000CHS\\u000CHH\\u000CH@\\u000CHM\\u000CHP\\u000CIk\\u000CHt\\u000CHs\\u000CHD\\u000CHR\\u000CHH\\u000CH^\\u000CHR\\u000CHZ\\u000CHF\\u000CHR\\u000CHn\\u000CHv\\u000CHZ\\u000CIa\\u000CH\\\\\\u000CIl\\u000CH@\\u000CHM\\u000CHP\\u000CIl\\u000CHU\\u000CIg\\u000CHH\\u000CIk\\u000CHT\\u000CHR\\u000CHd\\u000CHs\\u000CHZ\\u000CHR\\u000CHC\\u000CHJ\\u000CHT\\u000CHy\\u000CHH\\u000CIl\\u000CHp\\u000CHR\\u000CHH\\u000CIl\\u000CHY\\u000CHR\\u000CH^\\u000CHR\\u000CHU\\u000CHp\\u000CHR\\u000CH\\\\\\u000CHF\\u000CHs\\u000CHD\\u000CHR\\u000CH\\\\\\u000CHz\\u000CHD\\u000CIk\\u000CHT\\u000CHM\\u000CHP\\u000CHy\\u000CHB\\u000CHS\\u000CH^\\u000CHR\\u000CHe\\u000CHT\\u000CHy\\u000CIl\\u000CHy\\u000CIk\\u000CHY\\u000CH^\\u000CH^\\u000CH{\\u000CHH\\u000CHR\\u000CHz\\u000CHR\\u000CHD\\u000CHR\\u000CHi\\u000CH\\\\\\u000CIa\\u000CHI\\u000CHp\\u000CHU\\u000CHR\\u000CHn\\u000CHJ\\u000CIk\\u000CHz\\u000CHR\\u000CHF\\u000CHU\\u000CH^\\u000CIl\\u000CHD\\u000CHS\\u000CHC\\u000CHB\\u000CH@\\u000CHS\\u000CHD\\u000CHR\\u000CH@\\u000CId\\u000CHn\\u000CHy\\u000CHy\\u000CHU\\u000CIl\\u000CHn\\u000CHy\\u000CHU\\u000CHD\\u000CHR\\u000CHJ\\u000CIk\\u000CHH\\u000CHR\\u000CHU\\u000CHB\\u000CH^\\u000CIk\\u000CHy\\u000CHR\\u000CHG\\u000CIl\\u000CHp\\u000CH@\\u000CHy\\u000CHS\\u000CHH\\u000CIm\\u000CH\\\\\\u000CHH\\u000CHB\\u000CHR\\u000CHn\\u000CH{\\u000CHY\\u000CHU\\u000CIl\\u000CHn\\u000CH\\\\\\u000CIg\\u000CHp\\u000CHP\\u000CHB\\u000CHS\\u000CH^\\u000CIl\\u000CHj\\u000CH\\\\\\u000CIg\\u000CHF\\u000CHT\\u000CIk\\u000CHD\\u000CHR\\u000CHC\\u000CHR\\u000CHJ\\u000CHY\\u000CH^\\u000CIk\\u000CHD\\u000CIk\\u000CHz\\u000CHR\\u000CHH\\u000CHR\\u000CHy\\u000CH\\\\\\u000CIl\\u000CH@\\u000CHe\\u000CHD\\u000CHy\\u000CHR\\u000CHp\\u000CHY\\u000CHR\\u000CH@\\u000CHF\\u000CIn\\u000CH\\\\\\u000CHR\\u000CH@\\u000CHM\\u000CHP\\u000CHR\\u000CHT\\u000CI`\\u000CHJ\\u000CHR\\u000CHZ\\u000CIk\\u000CHC\\u000CH\\\\\\u000CHy\\u000CHS\\u000CHC\\u000CIk\\u000CHy\\u000CHU\\u000CHR\\u000CHn\\u000CHi\\u000CHy\\u000CHT\\u000CH\\\\\\u000CH@\\u000CHD\\u000CHR\\u000CHc\\u000CHY\\u000CHU\\u000CHR\\u000CHn\\u000CHT\\u000CIa\\u000CHI\\u000CH^\\u000CHB\\u000CHS\\u000CH^\\u000CIk\\u000CH^\\u000CIk\\u000CHz\\u000CHy\\u000CHY\\u000CHS\\u000CH[\\u000CHC\\u000CHy\\u000CIa\\u000CH\\\\\\u000CHn\\u000CHT\\u000CHB\\u000CIn\\u000CHU\\u000CHI\\u000CHR\\u000CHD\\u000CHR4F4_4F4[5f4U5i4X4K4]5o4E4D5d4K4_4[4E4K5h4Y5m4A4E5i5d4K4Z5f4U4K5h4B4K4Y4E4K5h5i4^5f4C4K5h4U4K5i4E4K5h5o4K4F4D4K5h4]4C5d4C4D4]5j4K5i4@4K5h4C5d5h4E4K5h4U4K5h5i4K5h5i5d5n4U4K5h4U4]4D5f4K5h4_4]5f4U4K5h4@5d4K5h4K5h4\\\\5k4K4D4K5h4A5f4K4E4K5h4A5n5d5n4K5h5o4]5f5i4K5h4U4]4K5n5i4A5m5d4T4E4K5h4G4K5j5f5i4X4K5k4C4E4K5h5i4]4O4E4K5h5n4]4N5j4K5h4X4D4K4D4K5h4A5d4K4]4K5h4@4C5f4C4K5h4O4_4]4E4K5h4U5h5d5i5i4@5i5d4U4E4K5h4]4A5i5j4K5h5j5n4K4[5m5h4_4[5f5j4K5h5o5d5f4F4K5h4C5j5f4K4D4]5o4K4F5k4K5h4]5f4K4Z4F4A5f4K4F5f4D4F5d5n5f4F4K5h4O5d5h5e4K5h4D4]5f4C4K5h5o5h4K5i4K5h4]4K4D4[4K5h4X4B4Y5f4_5f4K4]4K4F4K5h4G4K5h4G4K5h4Y5h4K4E4K5h4A4C5f4G4K5h4^5d4K4]4K5h4B5h5f4@4K5h4@5i5f4U4K5h4U4K5i5k4K5h4@5i4K5h4K5h4_4K4U4E5i4X4K5k4C5k4K5h4]4J5f4_4K5h4C4B5d5h4K5h5m5j5f4E4K5h5o4F4K4D4K5h4C5d4]5f4K5h4C4]5d4_4K4_4F4V4]5n4F4Y4K5i5f5i4K5h4D5j4K4F4K5h4U4T5f5ifmwfqwbjmnfmwvmgfqpwbmgjmd#>#evm`wjlm+*-isd!#tjgwk>!`lmejdvqbwjlm-smd!#tjgwk>!?algz#`obpp>!Nbwk-qbmgln+*`lmwfnslqbqz#Vmjwfg#Pwbwfp`jq`vnpwbm`fp-bssfmg@kjog+lqdbmjybwjlmp?psbm#`obpp>!!=?jnd#pq`>!,gjpwjmdvjpkfgwklvpbmgp#le#`lnnvmj`bwjlm`ofbq!=?,gju=jmufpwjdbwjlmebuj`lm-j`l!#nbqdjm.qjdkw9abpfg#lm#wkf#Nbppb`kvpfwwpwbaof#alqgfq>jmwfqmbwjlmbobopl#hmltm#bpsqlmvm`jbwjlmab`hdqlvmg9 esbggjmd.ofew9Elq#f{bnsof/#njp`foobmflvp%ow8,nbwk%dw8spz`kloldj`bojm#sbqwj`vobqfbq`k!#wzsf>!elqn#nfwklg>!bp#lsslpfg#wlPvsqfnf#@lvqwl``bpjlmbooz#Bggjwjlmbooz/Mlqwk#Bnfqj`bs{8ab`hdqlvmglsslqwvmjwjfpFmwfqwbjmnfmw-wlOltfq@bpf+nbmveb`wvqjmdsqlefppjlmbo#`lnajmfg#tjwkElq#jmpwbm`f/`lmpjpwjmd#le!#nb{ofmdwk>!qfwvqm#ebopf8`lmp`jlvpmfppNfgjwfqqbmfbmf{wqblqgjmbqzbppbppjmbwjlmpvapfrvfmwoz#avwwlm#wzsf>!wkf#mvnafq#lewkf#lqjdjmbo#`lnsqfkfmpjufqfefqp#wl#wkf?,vo=\\t?,gju=\\tskjolplskj`bool`bwjlm-kqfetbp#svaojpkfgPbm#Eqbm`jp`l+evm`wjlm+*x\\t?gju#jg>!nbjmplskjpwj`bwfgnbwkfnbwj`bo#,kfbg=\\u000E\\t?algzpvddfpwp#wkbwgl`vnfmwbwjlm`lm`fmwqbwjlmqfobwjlmpkjspnbz#kbuf#affm+elq#f{bnsof/Wkjp#bqwj`of#jm#plnf#`bpfpsbqwp#le#wkf#gfejmjwjlm#leDqfbw#Aqjwbjm#`foosbggjmd>frvjubofmw#wlsob`fklogfq>!8#elmw.pjyf9#ivpwjej`bwjlmafojfufg#wkbwpveefqfg#eqlnbwwfnswfg#wl#ofbgfq#le#wkf`qjsw!#pq`>!,+evm`wjlm+*#xbqf#bubjobaof\\t\\n?ojmh#qfo>!#pq`>\\$kwws9,,jmwfqfpwfg#jm`lmufmwjlmbo#!#bow>!!#,=?,bqf#dfmfqboozkbp#bopl#affmnlpw#slsvobq#`lqqfpslmgjmd`qfgjwfg#tjwkwzof>!alqgfq9?,b=?,psbm=?,-dje!#tjgwk>!?jeqbnf#pq`>!wbaof#`obpp>!jmojmf.aol`h8b``lqgjmd#wl#wldfwkfq#tjwkbssql{jnbwfozsbqojbnfmwbqznlqf#bmg#nlqfgjpsobz9mlmf8wqbgjwjlmboozsqfglnjmbmwoz%maps8\\u007F%maps8%maps8?,psbm=#`foopsb`jmd>?jmsvw#mbnf>!lq!#`lmwfmw>!`lmwqlufqpjbosqlsfqwz>!ld9,{.pkl`htbuf.gfnlmpwqbwjlmpvqqlvmgfg#azMfufqwkfofpp/tbp#wkf#ejqpw`lmpjgfqbaof#Bowklvdk#wkf#`loobalqbwjlmpklvog#mlw#afsqlslqwjlm#le?psbm#pwzof>!hmltm#bp#wkf#pklqwoz#bewfqelq#jmpwbm`f/gfp`qjafg#bp#,kfbg=\\t?algz#pwbqwjmd#tjwkjm`qfbpjmdoz#wkf#eb`w#wkbwgjp`vppjlm#lenjggof#le#wkfbm#jmgjujgvbogjeej`vow#wl#sljmw#le#ujftklnlpf{vbojwzb``fswbm`f#le?,psbm=?,gju=nbmveb`wvqfqplqjdjm#le#wkf`lnnlmoz#vpfgjnslqwbm`f#legfmlnjmbwjlmpab`hdqlvmg9# ofmdwk#le#wkfgfwfqnjmbwjlmb#pjdmjej`bmw!#alqgfq>!3!=qfulovwjlmbqzsqjm`jsofp#lejp#`lmpjgfqfgtbp#gfufolsfgJmgl.Fvqlsfbmuvomfqbaof#wlsqlslmfmwp#lebqf#plnfwjnfp`olpfq#wl#wkfMft#Zlqh#@jwz#mbnf>!pfbq`kbwwqjavwfg#wl`lvqpf#le#wkfnbwkfnbwj`jbmaz#wkf#fmg#lebw#wkf#fmg#le!#alqgfq>!3!#wf`kmloldj`bo-qfnluf@obpp+aqbm`k#le#wkffujgfm`f#wkbw\\\"Xfmgje^..=\\u000E\\tJmpwjwvwf#le#jmwl#b#pjmdofqfpsf`wjufoz-bmg#wkfqfelqfsqlsfqwjfp#lejp#ol`bwfg#jmplnf#le#tkj`kWkfqf#jp#bopl`lmwjmvfg#wl#bssfbqbm`f#le#%bns8mgbpk8#gfp`qjafp#wkf`lmpjgfqbwjlmbvwklq#le#wkfjmgfsfmgfmwozfrvjssfg#tjwkglfp#mlw#kbuf?,b=?b#kqfe>!`lmevpfg#tjwk?ojmh#kqfe>!,bw#wkf#bdf#lebssfbq#jm#wkfWkfpf#jm`ovgfqfdbqgofpp#le`lvog#af#vpfg#pwzof>%rvlw8pfufqbo#wjnfpqfsqfpfmw#wkfalgz=\\t?,kwno=wklvdkw#wl#afslsvobwjlm#leslppjajojwjfpsfq`fmwbdf#leb``fpp#wl#wkfbm#bwwfnsw#wlsqlgv`wjlm#leirvfqz,irvfqzwtl#gjeefqfmwafolmd#wl#wkffpwbaojpknfmwqfsob`jmd#wkfgfp`qjswjlm!#gfwfqnjmf#wkfbubjobaof#elqB``lqgjmd#wl#tjgf#qbmdf#le\\n?gju#`obpp>!nlqf#`lnnlmozlqdbmjpbwjlmpevm`wjlmbojwztbp#`lnsofwfg#%bns8ngbpk8#sbqwj`jsbwjlmwkf#`kbqb`wfqbm#bggjwjlmbobssfbqp#wl#afeb`w#wkbw#wkfbm#f{bnsof#lepjdmjej`bmwozlmnlvpflufq>!af`bvpf#wkfz#bpzm`#>#wqvf8sqlaofnp#tjwkpffnp#wl#kbufwkf#qfpvow#le#pq`>!kwws9,,ebnjojbq#tjwkslppfppjlm#leevm`wjlm#+*#xwllh#sob`f#jmbmg#plnfwjnfppvapwbmwjbooz?psbm=?,psbm=jp#lewfm#vpfgjm#bm#bwwfnswdqfbw#gfbo#leFmujqlmnfmwbopv``fppevooz#ujqwvbooz#boo13wk#`fmwvqz/sqlefppjlmbopmf`fppbqz#wl#gfwfqnjmfg#az`lnsbwjajojwzaf`bvpf#jw#jpGj`wjlmbqz#lenlgjej`bwjlmpWkf#elooltjmdnbz#qfefq#wl9@lmpfrvfmwoz/Jmwfqmbwjlmbobowklvdk#plnfwkbw#tlvog#aftlqog\\$p#ejqpw`obppjejfg#bpalwwln#le#wkf+sbqwj`vobqozbojdm>!ofew!#nlpw#`lnnlmozabpjp#elq#wkfelvmgbwjlm#le`lmwqjavwjlmpslsvobqjwz#le`fmwfq#le#wkfwl#qfgv`f#wkfivqjpgj`wjlmpbssql{jnbwjlm#lmnlvpflvw>!Mft#Wfpwbnfmw`loof`wjlm#le?,psbm=?,b=?,jm#wkf#Vmjwfgejon#gjqf`wlq.pwqj`w-gwg!=kbp#affm#vpfgqfwvqm#wl#wkfbowklvdk#wkjp`kbmdf#jm#wkfpfufqbo#lwkfqavw#wkfqf#bqfvmsqf`fgfmwfgjp#pjnjobq#wlfpsf`jbooz#jmtfjdkw9#alog8jp#`boofg#wkf`lnsvwbwjlmbojmgj`bwf#wkbwqfpwqj`wfg#wl\\n?nfwb#mbnf>!bqf#wzsj`booz`lmeoj`w#tjwkKltfufq/#wkf#Bm#f{bnsof#le`lnsbqfg#tjwkrvbmwjwjfp#leqbwkfq#wkbm#b`lmpwfoobwjlmmf`fppbqz#elqqfslqwfg#wkbwpsf`jej`bwjlmslojwj`bo#bmg%maps8%maps8?qfefqfm`fp#wlwkf#pbnf#zfbqDlufqmnfmw#ledfmfqbwjlm#lekbuf#mlw#affmpfufqbo#zfbqp`lnnjwnfmw#wl\\n\\n?vo#`obpp>!ujpvbojybwjlm2:wk#`fmwvqz/sqb`wjwjlmfqpwkbw#kf#tlvogbmg#`lmwjmvfgl``vsbwjlm#lejp#gfejmfg#bp`fmwqf#le#wkfwkf#bnlvmw#le=?gju#pwzof>!frvjubofmw#legjeefqfmwjbwfaqlvdkw#balvwnbqdjm.ofew9#bvwlnbwj`boozwklvdkw#le#bpPlnf#le#wkfpf\\t?gju#`obpp>!jmsvw#`obpp>!qfsob`fg#tjwkjp#lmf#le#wkffgv`bwjlm#bmgjmeovfm`fg#azqfsvwbwjlm#bp\\t?nfwb#mbnf>!b``lnnlgbwjlm?,gju=\\t?,gju=obqdf#sbqw#leJmpwjwvwf#elqwkf#pl.`boofg#bdbjmpw#wkf#Jm#wkjp#`bpf/tbp#bssljmwfg`objnfg#wl#afKltfufq/#wkjpGfsbqwnfmw#lewkf#qfnbjmjmdfeef`w#lm#wkfsbqwj`vobqoz#gfbo#tjwk#wkf\\t?gju#pwzof>!bonlpw#botbzpbqf#`vqqfmwozf{sqfppjlm#leskjolplskz#leelq#nlqf#wkbm`jujojybwjlmplm#wkf#jpobmgpfof`wfgJmgf{`bm#qfpvow#jm!#ubovf>!!#,=wkf#pwqv`wvqf#,=?,b=?,gju=Nbmz#le#wkfpf`bvpfg#az#wkfle#wkf#Vmjwfgpsbm#`obpp>!n`bm#af#wqb`fgjp#qfobwfg#wlaf`bnf#lmf#lejp#eqfrvfmwozojujmd#jm#wkfwkflqfwj`boozElooltjmd#wkfQfulovwjlmbqzdlufqmnfmw#jmjp#gfwfqnjmfgwkf#slojwj`bojmwqlgv`fg#jmpveej`jfmw#wlgfp`qjswjlm!=pklqw#pwlqjfppfsbqbwjlm#lebp#wl#tkfwkfqhmltm#elq#jwptbp#jmjwjboozgjpsobz9aol`hjp#bm#f{bnsofwkf#sqjm`jsbo`lmpjpwp#le#bqf`ldmjyfg#bp,algz=?,kwno=b#pvapwbmwjboqf`lmpwqv`wfgkfbg#le#pwbwfqfpjpwbm`f#wlvmgfqdqbgvbwfWkfqf#bqf#wtldqbujwbwjlmbobqf#gfp`qjafgjmwfmwjlmboozpfqufg#bp#wkf`obpp>!kfbgfqlsslpjwjlm#wlevmgbnfmwboozglnjmbwfg#wkfbmg#wkf#lwkfqboojbm`f#tjwktbp#elq`fg#wlqfpsf`wjufoz/bmg#slojwj`bojm#pvsslqw#lesflsof#jm#wkf13wk#`fmwvqz-bmg#svaojpkfgolbg@kbqwafbwwl#vmgfqpwbmgnfnafq#pwbwfpfmujqlmnfmwboejqpw#kboe#le`lvmwqjfp#bmgbq`kjwf`wvqboaf#`lmpjgfqfg`kbqb`wfqjyfg`ofbqJmwfqubobvwklqjwbwjufEfgfqbwjlm#letbp#pv``ffgfgbmg#wkfqf#bqfb#`lmpfrvfm`fwkf#Sqfpjgfmwbopl#jm`ovgfgeqff#plewtbqfpv``fppjlm#legfufolsfg#wkftbp#gfpwqlzfgbtbz#eqln#wkf8\\t?,p`qjsw=\\t?bowklvdk#wkfzelooltfg#az#bnlqf#sltfqevoqfpvowfg#jm#bVmjufqpjwz#leKltfufq/#nbmzwkf#sqfpjgfmwKltfufq/#plnfjp#wklvdkw#wlvmwjo#wkf#fmgtbp#bmmlvm`fgbqf#jnslqwbmwbopl#jm`ovgfp=?jmsvw#wzsf>wkf#`fmwfq#le#GL#MLW#BOWFQvpfg#wl#qfefqwkfnfp,<plqw>wkbw#kbg#affmwkf#abpjp#elqkbp#gfufolsfgjm#wkf#pvnnfq`lnsbqbwjufozgfp`qjafg#wkfpv`k#bp#wklpfwkf#qfpvowjmdjp#jnslppjaofubqjlvp#lwkfqPlvwk#Beqj`bmkbuf#wkf#pbnffeef`wjufmfppjm#tkj`k#`bpf8#wf{w.bojdm9pwqv`wvqf#bmg8#ab`hdqlvmg9qfdbqgjmd#wkfpvsslqwfg#wkfjp#bopl#hmltmpwzof>!nbqdjmjm`ovgjmd#wkfabkbpb#Nfobzvmlqph#alhn/Iomlqph#mzmlqphpolufm)M(ajmbjmwfqmb`jlmbo`bojej`b`j/_m`lnvmj`b`j/_m`lmpwqv``j/_m!=?gju#`obpp>!gjpbnajdvbwjlmGlnbjmMbnf\\$/#\\$bgnjmjpwqbwjlmpjnvowbmflvpozwqbmpslqwbwjlmJmwfqmbwjlmbo#nbqdjm.alwwln9qfpslmpjajojwz?\\\"Xfmgje^..=\\t?,=?nfwb#mbnf>!jnsofnfmwbwjlmjmeqbpwqv`wvqfqfsqfpfmwbwjlmalqgfq.alwwln9?,kfbg=\\t?algz=>kwws&0B&1E&1E?elqn#nfwklg>!nfwklg>!slpw!#,ebuj`lm-j`l!#~*8\\t?,p`qjsw=\\t-pfwBwwqjavwf+Bgnjmjpwqbwjlm>#mft#Bqqbz+*8?\\\"Xfmgje^..=\\u000E\\tgjpsobz9aol`h8Vmelqwvmbwfoz/!=%maps8?,gju=,ebuj`lm-j`l!=>\\$pwzofpkffw\\$#jgfmwjej`bwjlm/#elq#f{bnsof/?oj=?b#kqfe>!,bm#bowfqmbwjufbp#b#qfpvow#lesw!=?,p`qjsw=\\twzsf>!pvanjw!#\\t+evm`wjlm+*#xqf`lnnfmgbwjlmelqn#b`wjlm>!,wqbmpelqnbwjlmqf`lmpwqv`wjlm-pwzof-gjpsobz#B``lqgjmd#wl#kjggfm!#mbnf>!bolmd#tjwk#wkfgl`vnfmw-algz-bssql{jnbwfoz#@lnnvmj`bwjlmpslpw!#b`wjlm>!nfbmjmd#%rvlw8..?\\\"Xfmgje^..=Sqjnf#Njmjpwfq`kbqb`wfqjpwj`?,b=#?b#`obpp>wkf#kjpwlqz#le#lmnlvpflufq>!wkf#dlufqmnfmwkqfe>!kwwsp9,,tbp#lqjdjmbooztbp#jmwqlgv`fg`obppjej`bwjlmqfsqfpfmwbwjufbqf#`lmpjgfqfg?\\\"Xfmgje^..=\\t\\tgfsfmgp#lm#wkfVmjufqpjwz#le#jm#`lmwqbpw#wl#sob`fklogfq>!jm#wkf#`bpf#lejmwfqmbwjlmbo#`lmpwjwvwjlmbopwzof>!alqgfq.9#evm`wjlm+*#xAf`bvpf#le#wkf.pwqj`w-gwg!=\\t?wbaof#`obpp>!b``lnsbmjfg#azb``lvmw#le#wkf?p`qjsw#pq`>!,mbwvqf#le#wkf#wkf#sflsof#jm#jm#bggjwjlm#wlp*8#ip-jg#>#jg!#tjgwk>!233&!qfdbqgjmd#wkf#Qlnbm#@bwkloj`bm#jmgfsfmgfmwelooltjmd#wkf#-dje!#tjgwk>!2wkf#elooltjmd#gjp`qjnjmbwjlmbq`kbfloldj`bosqjnf#njmjpwfq-ip!=?,p`qjsw=`lnajmbwjlm#le#nbqdjmtjgwk>!`qfbwfFofnfmw+t-bwwb`kFufmw+?,b=?,wg=?,wq=pq`>!kwwsp9,,bJm#sbqwj`vobq/#bojdm>!ofew!#@yf`k#Qfsvaoj`Vmjwfg#Hjmdgln`lqqfpslmgfm`f`lm`ovgfg#wkbw-kwno!#wjwof>!+evm`wjlm#+*#x`lnfp#eqln#wkfbssoj`bwjlm#le?psbm#`obpp>!pafojfufg#wl#affnfmw+\\$p`qjsw\\$?,b=\\t?,oj=\\t?ojufqz#gjeefqfmw=?psbm#`obpp>!lswjlm#ubovf>!+bopl#hmltm#bp\\n?oj=?b#kqfe>!=?jmsvw#mbnf>!pfsbqbwfg#eqlnqfefqqfg#wl#bp#ubojdm>!wls!=elvmgfq#le#wkfbwwfnswjmd#wl#`bqalm#gjl{jgf\\t\\t?gju#`obpp>!`obpp>!pfbq`k.,algz=\\t?,kwno=lsslqwvmjwz#wl`lnnvmj`bwjlmp?,kfbg=\\u000E\\t?algz#pwzof>!tjgwk9Wj\\rVSmd#Uj\\rWkw`kbmdfp#jm#wkfalqgfq.`lolq9 3!#alqgfq>!3!#?,psbm=?,gju=?tbp#gjp`lufqfg!#wzsf>!wf{w!#*8\\t?,p`qjsw=\\t\\tGfsbqwnfmw#le#f``ofpjbpwj`bowkfqf#kbp#affmqfpvowjmd#eqln?,algz=?,kwno=kbp#mfufq#affmwkf#ejqpw#wjnfjm#qfpslmpf#wlbvwlnbwj`booz#?,gju=\\t\\t?gju#jtbp#`lmpjgfqfgsfq`fmw#le#wkf!#,=?,b=?,gju=`loof`wjlm#le#gfp`fmgfg#eqlnpf`wjlm#le#wkfb``fsw.`kbqpfwwl#af#`lmevpfgnfnafq#le#wkf#sbggjmd.qjdkw9wqbmpobwjlm#lejmwfqsqfwbwjlm#kqfe>\\$kwws9,,tkfwkfq#lq#mlwWkfqf#bqf#boplwkfqf#bqf#nbmzb#pnboo#mvnafqlwkfq#sbqwp#lejnslppjaof#wl##`obpp>!avwwlmol`bwfg#jm#wkf-#Kltfufq/#wkfbmg#fufmwvboozBw#wkf#fmg#le#af`bvpf#le#jwpqfsqfpfmwp#wkf?elqn#b`wjlm>!#nfwklg>!slpw!jw#jp#slppjaofnlqf#ojhfoz#wlbm#jm`qfbpf#jmkbuf#bopl#affm`lqqfpslmgp#wlbmmlvm`fg#wkbwbojdm>!qjdkw!=nbmz#`lvmwqjfpelq#nbmz#zfbqpfbqojfpw#hmltmaf`bvpf#jw#tbpsw!=?,p`qjsw=\\u000E#ubojdm>!wls!#jmkbajwbmwp#leelooltjmd#zfbq\\u000E\\t?gju#`obpp>!njoojlm#sflsof`lmwqlufqpjbo#`lm`fqmjmd#wkfbqdvf#wkbw#wkfdlufqmnfmw#bmgb#qfefqfm`f#wlwqbmpefqqfg#wlgfp`qjajmd#wkf#pwzof>!`lolq9bowklvdk#wkfqfafpw#hmltm#elqpvanjw!#mbnf>!nvowjsoj`bwjlmnlqf#wkbm#lmf#qf`ldmjwjlm#le@lvm`jo#le#wkffgjwjlm#le#wkf##?nfwb#mbnf>!Fmwfqwbjmnfmw#btbz#eqln#wkf#8nbqdjm.qjdkw9bw#wkf#wjnf#lejmufpwjdbwjlmp`lmmf`wfg#tjwkbmg#nbmz#lwkfqbowklvdk#jw#jpafdjmmjmd#tjwk#?psbm#`obpp>!gfp`fmgbmwp#le?psbm#`obpp>!j#bojdm>!qjdkw!?,kfbg=\\t?algz#bpsf`wp#le#wkfkbp#pjm`f#affmFvqlsfbm#Vmjlmqfnjmjp`fmw#lenlqf#gjeej`vowUj`f#Sqfpjgfmw`lnslpjwjlm#lesbppfg#wkqlvdknlqf#jnslqwbmwelmw.pjyf922s{f{sobmbwjlm#lewkf#`lm`fsw#letqjwwfm#jm#wkf\\n?psbm#`obpp>!jp#lmf#le#wkf#qfpfnaobm`f#wllm#wkf#dqlvmgptkj`k#`lmwbjmpjm`ovgjmd#wkf#gfejmfg#az#wkfsvaoj`bwjlm#lenfbmp#wkbw#wkflvwpjgf#le#wkfpvsslqw#le#wkf?jmsvw#`obpp>!?psbm#`obpp>!w+Nbwk-qbmgln+*nlpw#sqlnjmfmwgfp`qjswjlm#le@lmpwbmwjmlsoftfqf#svaojpkfg?gju#`obpp>!pfbssfbqp#jm#wkf2!#kfjdkw>!2!#nlpw#jnslqwbmwtkj`k#jm`ovgfptkj`k#kbg#affmgfpwqv`wjlm#lewkf#slsvobwjlm\\t\\n?gju#`obpp>!slppjajojwz#leplnfwjnfp#vpfgbssfbq#wl#kbufpv``fpp#le#wkfjmwfmgfg#wl#afsqfpfmw#jm#wkfpwzof>!`ofbq9a\\u000E\\t?,p`qjsw=\\u000E\\t?tbp#elvmgfg#jmjmwfqujft#tjwk\\\\jg!#`lmwfmw>!`bsjwbo#le#wkf\\u000E\\t?ojmh#qfo>!pqfofbpf#le#wkfsljmw#lvw#wkbw{NOKwwsQfrvfpwbmg#pvapfrvfmwpf`lmg#obqdfpwufqz#jnslqwbmwpsf`jej`bwjlmppvqeb`f#le#wkfbssojfg#wl#wkfelqfjdm#sloj`z\\\\pfwGlnbjmMbnffpwbaojpkfg#jmjp#afojfufg#wlJm#bggjwjlm#wlnfbmjmd#le#wkfjp#mbnfg#bewfqwl#sqlwf`w#wkfjp#qfsqfpfmwfgGf`obqbwjlm#lenlqf#feej`jfmw@obppjej`bwjlmlwkfq#elqnp#lekf#qfwvqmfg#wl?psbm#`obpp>!`sfqelqnbm`f#le+evm`wjlm+*#x\\u000Eje#bmg#lmoz#jeqfdjlmp#le#wkfofbgjmd#wl#wkfqfobwjlmp#tjwkVmjwfg#Mbwjlmppwzof>!kfjdkw9lwkfq#wkbm#wkfzsf!#`lmwfmw>!Bppl`jbwjlm#le\\t?,kfbg=\\t?algzol`bwfg#lm#wkfjp#qfefqqfg#wl+jm`ovgjmd#wkf`lm`fmwqbwjlmpwkf#jmgjujgvbobnlmd#wkf#nlpwwkbm#bmz#lwkfq,=\\t?ojmh#qfo>!#qfwvqm#ebopf8wkf#svqslpf#lewkf#bajojwz#wl8`lolq9 eee~\\t-\\t?psbm#`obpp>!wkf#pvaif`w#legfejmjwjlmp#le=\\u000E\\t?ojmh#qfo>!`objn#wkbw#wkfkbuf#gfufolsfg?wbaof#tjgwk>!`fofaqbwjlm#leElooltjmd#wkf#wl#gjpwjmdvjpk?psbm#`obpp>!awbhfp#sob`f#jmvmgfq#wkf#mbnfmlwfg#wkbw#wkf=?\\\"Xfmgje^..=\\tpwzof>!nbqdjm.jmpwfbg#le#wkfjmwqlgv`fg#wkfwkf#sql`fpp#lejm`qfbpjmd#wkfgjeefqfm`fp#jmfpwjnbwfg#wkbwfpsf`jbooz#wkf,gju=?gju#jg>!tbp#fufmwvboozwkqlvdklvw#kjpwkf#gjeefqfm`fplnfwkjmd#wkbwpsbm=?,psbm=?,pjdmjej`bmwoz#=?,p`qjsw=\\u000E\\t\\u000E\\tfmujqlmnfmwbo#wl#sqfufmw#wkfkbuf#affm#vpfgfpsf`jbooz#elqvmgfqpwbmg#wkfjp#fppfmwjbooztfqf#wkf#ejqpwjp#wkf#obqdfpwkbuf#affm#nbgf!#pq`>!kwws9,,jmwfqsqfwfg#bppf`lmg#kboe#le`qloojmd>!ml!#jp#`lnslpfg#leJJ/#Kloz#Qlnbmjp#f{sf`wfg#wlkbuf#wkfjq#ltmgfejmfg#bp#wkfwqbgjwjlmbooz#kbuf#gjeefqfmwbqf#lewfm#vpfgwl#fmpvqf#wkbwbdqffnfmw#tjwk`lmwbjmjmd#wkfbqf#eqfrvfmwozjmelqnbwjlm#lmf{bnsof#jp#wkfqfpvowjmd#jm#b?,b=?,oj=?,vo=#`obpp>!ellwfqbmg#fpsf`jboozwzsf>!avwwlm!#?,psbm=?,psbm=tkj`k#jm`ovgfg=\\t?nfwb#mbnf>!`lmpjgfqfg#wkf`bqqjfg#lvw#azKltfufq/#jw#jpaf`bnf#sbqw#lejm#qfobwjlm#wlslsvobq#jm#wkfwkf#`bsjwbo#letbp#leej`jbooztkj`k#kbp#affmwkf#Kjpwlqz#lebowfqmbwjuf#wlgjeefqfmw#eqlnwl#pvsslqw#wkfpvddfpwfg#wkbwjm#wkf#sql`fpp##?gju#`obpp>!wkf#elvmgbwjlmaf`bvpf#le#kjp`lm`fqmfg#tjwkwkf#vmjufqpjwzlsslpfg#wl#wkfwkf#`lmwf{w#le?psbm#`obpp>!swf{w!#mbnf>!r!\\n\\n?gju#`obpp>!wkf#p`jfmwjej`qfsqfpfmwfg#aznbwkfnbwj`jbmpfof`wfg#az#wkfwkbw#kbuf#affm=?gju#`obpp>!`gju#jg>!kfbgfqjm#sbqwj`vobq/`lmufqwfg#jmwl*8\\t?,p`qjsw=\\t?skjolplskj`bo#pqsphlkqubwphjwj\\rVSmd#Uj\\rWkw<L=o=m=m<V<T<U=l=o=m=m<V<T<Ujmufpwjdb`j/_msbqwj`jsb`j/_m<V<R=n<R=l=g<Y<R<]<W<\\\\=m=n<T<V<R=n<R=l=g<U=k<Y<W<R<^<Y<V=m<T=m=n<Y<P=g<q<R<^<R=m=n<T<V<R=n<R=l=g=i<R<]<W<\\\\=m=n=`<^=l<Y<P<Y<Q<T<V<R=n<R=l<\\\\=c=m<Y<_<R<X<Q=c=m<V<\\\\=k<\\\\=n=`<Q<R<^<R=m=n<T<O<V=l<\\\\<T<Q=g<^<R<S=l<R=m=g<V<R=n<R=l<R<U=m<X<Y<W<\\\\=n=`<S<R<P<R=e=`=b=m=l<Y<X=m=n<^<R<]=l<\\\\<[<R<P=m=n<R=l<R<Q=g=o=k<\\\\=m=n<T<Y=n<Y=k<Y<Q<T<Y<\\u007F<W<\\\\<^<Q<\\\\=c<T=m=n<R=l<T<T=m<T=m=n<Y<P<\\\\=l<Y=d<Y<Q<T=c<M<V<\\\\=k<\\\\=n=`<S<R=a=n<R<P=o=m<W<Y<X=o<Y=n=m<V<\\\\<[<\\\\=n=`=n<R<^<\\\\=l<R<^<V<R<Q<Y=k<Q<R=l<Y=d<Y<Q<T<Y<V<R=n<R=l<R<Y<R=l<_<\\\\<Q<R<^<V<R=n<R=l<R<P<L<Y<V<W<\\\\<P<\\\\4K5h5i5j4F4C5e5i5j4F4C5f4K4F4K5h5i5d4Z5d4U4K5h4D4]4K5i4@4K5h5i5d4K5n4U4K5h4]4_4K4J5h5i4X4K4]5o4K4F4K5h4O4U4Z4K4M4K5h4]5f4K4Z4E4K5h4F4Y5i5f5i4K5h4K4U4Z4K4M4K5h5j4F4K4J4@4K5h4O5h4U4K4D4K5h4F4_4@5f5h4K5h4O5n4_4K5i4K5h4Z4V4[4K4F4K5h5m5f4C5f5d4K5h4F4]4A5f4D4K5h4@4C5f4C4E4K5h4F4U5h5f5i4K5h4O4B4D4K4]4K5h4K5m5h4K5i4K5h4O5m5h4K5i4K5h4F4K4]5f4B4K5h4F5n5j5f4E4K5h4K5h4U4K4D4K5h4B5d4K4[4]4K5h5i4@4F5i4U4K5h4C5f5o5d4]4K5h4_5f4K4A4E4U4D4C4K5h5h5k4K5h4F4]4D5f4E4K5h4]5d4K4D4[4K5h4O4C4D5f4E4K5h4K4B4D4K4]4K5h5i4F4A4C4E4K5h4K4V4K5j5f`vqplq9sljmwfq8?,wjwof=\\t?nfwb#!#kqfe>!kwws9,,!=?psbm#`obpp>!nfnafqp#le#wkf#tjmglt-ol`bwjlmufqwj`bo.bojdm9,b=#\\u007F#?b#kqfe>!?\\\"gl`wzsf#kwno=nfgjb>!p`qffm!#?lswjlm#ubovf>!ebuj`lm-j`l!#,=\\t\\n\\n?gju#`obpp>!`kbqb`wfqjpwj`p!#nfwklg>!dfw!#,algz=\\t?,kwno=\\tpklqw`vw#j`lm!#gl`vnfmw-tqjwf+sbggjmd.alwwln9qfsqfpfmwbwjufppvanjw!#ubovf>!bojdm>!`fmwfq!#wkqlvdklvw#wkf#p`jfm`f#ej`wjlm\\t##?gju#`obpp>!pvanjw!#`obpp>!lmf#le#wkf#nlpw#ubojdm>!wls!=?tbp#fpwbaojpkfg*8\\u000E\\t?,p`qjsw=\\u000E\\tqfwvqm#ebopf8!=*-pwzof-gjpsobzaf`bvpf#le#wkf#gl`vnfmw-`llhjf?elqn#b`wjlm>!,~algzxnbqdjm938Fm`z`olsfgjb#leufqpjlm#le#wkf#-`qfbwfFofnfmw+mbnf!#`lmwfmw>!?,gju=\\t?,gju=\\t\\tbgnjmjpwqbwjuf#?,algz=\\t?,kwno=kjpwlqz#le#wkf#!=?jmsvw#wzsf>!slqwjlm#le#wkf#bp#sbqw#le#wkf#%maps8?b#kqfe>!lwkfq#`lvmwqjfp!=\\t?gju#`obpp>!?,psbm=?,psbm=?Jm#lwkfq#tlqgp/gjpsobz9#aol`h8`lmwqlo#le#wkf#jmwqlgv`wjlm#le,=\\t?nfwb#mbnf>!bp#tfoo#bp#wkf#jm#qf`fmw#zfbqp\\u000E\\t\\n?gju#`obpp>!?,gju=\\t\\n?,gju=\\tjmpsjqfg#az#wkfwkf#fmg#le#wkf#`lnsbwjaof#tjwkaf`bnf#hmltm#bp#pwzof>!nbqdjm9-ip!=?,p`qjsw=?#Jmwfqmbwjlmbo#wkfqf#kbuf#affmDfqnbm#obmdvbdf#pwzof>!`lolq9 @lnnvmjpw#Sbqwz`lmpjpwfmw#tjwkalqgfq>!3!#`foo#nbqdjmkfjdkw>!wkf#nbilqjwz#le!#bojdm>!`fmwfqqfobwfg#wl#wkf#nbmz#gjeefqfmw#Lqwklgl{#@kvq`kpjnjobq#wl#wkf#,=\\t?ojmh#qfo>!ptbp#lmf#le#wkf#vmwjo#kjp#gfbwk~*+*8\\t?,p`qjsw=lwkfq#obmdvbdfp`lnsbqfg#wl#wkfslqwjlmp#le#wkfwkf#Mfwkfqobmgpwkf#nlpw#`lnnlmab`hdqlvmg9vqo+bqdvfg#wkbw#wkfp`qloojmd>!ml!#jm`ovgfg#jm#wkfMlqwk#Bnfqj`bm#wkf#mbnf#le#wkfjmwfqsqfwbwjlmpwkf#wqbgjwjlmbogfufolsnfmw#le#eqfrvfmwoz#vpfgb#`loof`wjlm#leufqz#pjnjobq#wlpvqqlvmgjmd#wkff{bnsof#le#wkjpbojdm>!`fmwfq!=tlvog#kbuf#affmjnbdf\\\\`bswjlm#>bwwb`kfg#wl#wkfpvddfpwjmd#wkbwjm#wkf#elqn#le#jmuloufg#jm#wkfjp#gfqjufg#eqlnmbnfg#bewfq#wkfJmwqlgv`wjlm#wlqfpwqj`wjlmp#lm#pwzof>!tjgwk9#`bm#af#vpfg#wl#wkf#`qfbwjlm#lenlpw#jnslqwbmw#jmelqnbwjlm#bmgqfpvowfg#jm#wkf`loobspf#le#wkfWkjp#nfbmp#wkbwfofnfmwp#le#wkftbp#qfsob`fg#azbmbozpjp#le#wkfjmpsjqbwjlm#elqqfdbqgfg#bp#wkfnlpw#pv``fppevohmltm#bp#%rvlw8b#`lnsqfkfmpjufKjpwlqz#le#wkf#tfqf#`lmpjgfqfgqfwvqmfg#wl#wkfbqf#qfefqqfg#wlVmplvq`fg#jnbdf=\\t\\n?gju#`obpp>!`lmpjpwp#le#wkfpwlsSqlsbdbwjlmjmwfqfpw#jm#wkfbubjobajojwz#lebssfbqp#wl#kbuffof`wqlnbdmfwj`fmbaofPfquj`fp+evm`wjlm#le#wkfJw#jp#jnslqwbmw?,p`qjsw=?,gju=evm`wjlm+*xubq#qfobwjuf#wl#wkfbp#b#qfpvow#le#wkf#slpjwjlm#leElq#f{bnsof/#jm#nfwklg>!slpw!#tbp#elooltfg#az%bns8ngbpk8#wkfwkf#bssoj`bwjlmip!=?,p`qjsw=\\u000E\\tvo=?,gju=?,gju=bewfq#wkf#gfbwktjwk#qfpsf`w#wlpwzof>!sbggjmd9jp#sbqwj`vobqozgjpsobz9jmojmf8#wzsf>!pvanjw!#jp#gjujgfg#jmwl\\bTA\\nzk#+\\u000BBl\\bQ\\u007F*qfpslmpbajojgbgbgnjmjpwqb`j/_mjmwfqmb`jlmbofp`lqqfpslmgjfmwf\\u000CHe\\u000CHF\\u000CHC\\u000CIg\\u000CH{\\u000CHF\\u000CIn\\u000CH\\\\\\u000CIa\\u000CHY\\u000CHU\\u000CHB\\u000CHR\\u000CH\\\\\\u000CIk\\u000CH^\\u000CIg\\u000CH{\\u000CIg\\u000CHn\\u000CHv\\u000CIm\\u000CHD\\u000CHR\\u000CHY\\u000CH^\\u000CIk\\u000CHy\\u000CHS\\u000CHD\\u000CHT\\u000CH\\\\\\u000CHy\\u000CHR\\u000CH\\\\\\u000CHF\\u000CIm\\u000CH^\\u000CHS\\u000CHT\\u000CHz\\u000CIg\\u000CHp\\u000CIk\\u000CHn\\u000CHv\\u000CHR\\u000CHU\\u000CHS\\u000CHc\\u000CHA\\u000CIk\\u000CHp\\u000CIk\\u000CHn\\u000CHZ\\u000CHR\\u000CHB\\u000CHS\\u000CH^\\u000CHU\\u000CHB\\u000CHR\\u000CH\\\\\\u000CIl\\u000CHp\\u000CHR\\u000CH{\\u000CH\\\\\\u000CHO\\u000CH@\\u000CHD\\u000CHR\\u000CHD\\u000CIk\\u000CHy\\u000CIm\\u000CHB\\u000CHR\\u000CH\\\\\\u000CH@\\u000CIa\\u000CH^\\u000CIe\\u000CH{\\u000CHB\\u000CHR\\u000CH^\\u000CHS\\u000CHy\\u000CHB\\u000CHU\\u000CHS\\u000CH^\\u000CHR\\u000CHF\\u000CIo\\u000CH[\\u000CIa\\u000CHL\\u000CH@\\u000CHN\\u000CHP\\u000CHH\\u000CIk\\u000CHA\\u000CHR\\u000CHp\\u000CHF\\u000CHR\\u000CHy\\u000CIa\\u000CH^\\u000CHS\\u000CHy\\u000CHs\\u000CIa\\u000CH\\\\\\u000CIk\\u000CHD\\u000CHz\\u000CHS\\u000CH^\\u000CHR\\u000CHG\\u000CHJ\\u000CI`\\u000CH\\\\\\u000CHR\\u000CHD\\u000CHB\\u000CHR\\u000CHB\\u000CH^\\u000CIk\\u000CHB\\u000CHH\\u000CHJ\\u000CHR\\u000CHD\\u000CH@\\u000CHR\\u000CHp\\u000CHR\\u000CH\\\\\\u000CHY\\u000CHS\\u000CHy\\u000CHR\\u000CHT\\u000CHy\\u000CIa\\u000CHC\\u000CIg\\u000CHn\\u000CHv\\u000CHR\\u000CHU\\u000CHH\\u000CIk\\u000CHF\\u000CHU\\u000CIm\\u000CHm\\u000CHv\\u000CH@\\u000CHH\\u000CHR\\u000CHC\\u000CHR\\u000CHT\\u000CHn\\u000CHY\\u000CHR\\u000CHJ\\u000CHJ\\u000CIk\\u000CHz\\u000CHD\\u000CIk\\u000CHF\\u000CHS\\u000CHw\\u000CH^\\u000CIk\\u000CHY\\u000CHS\\u000CHZ\\u000CIk\\u000CH[\\u000CH\\\\\\u000CHR\\u000CHp\\u000CIa\\u000CHC\\u000CHe\\u000CHH\\u000CIa\\u000CHH\\u000CH\\\\\\u000CHB\\u000CIm\\u000CHn\\u000CH@\\u000CHd\\u000CHJ\\u000CIg\\u000CHD\\u000CIg\\u000CHn\\u000CHe\\u000CHF\\u000CHy\\u000CH\\\\\\u000CHO\\u000CHF\\u000CHN\\u000CHP\\u000CIk\\u000CHn\\u000CHT\\u000CIa\\u000CHI\\u000CHS\\u000CHH\\u000CHG\\u000CHS\\u000CH^\\u000CIa\\u000CHB\\u000CHB\\u000CIm\\u000CHz\\u000CIa\\u000CHC\\u000CHi\\u000CHv\\u000CIa\\u000CHw\\u000CHR\\u000CHw\\u000CIn\\u000CHs\\u000CHH\\u000CIl\\u000CHT\\u000CHn\\u000CH{\\u000CIl\\u000CHH\\u000CHp\\u000CHR\\u000CHc\\u000CH{\\u000CHR\\u000CHY\\u000CHS\\u000CHA\\u000CHR\\u000CH{\\u000CHt\\u000CHO\\u000CIa\\u000CHs\\u000CIk\\u000CHJ\\u000CIn\\u000CHT\\u000CH\\\\\\u000CIk\\u000CHJ\\u000CHS\\u000CHD\\u000CIg\\u000CHn\\u000CHU\\u000CHH\\u000CIa\\u000CHC\\u000CHR\\u000CHT\\u000CIk\\u000CHy\\u000CIa\\u000CHT\\u000CH{\\u000CHR\\u000CHn\\u000CHK\\u000CIl\\u000CHY\\u000CHS\\u000CHZ\\u000CIa\\u000CHY\\u000CH\\\\\\u000CHR\\u000CHH\\u000CIk\\u000CHn\\u000CHJ\\u000CId\\u000CHs\\u000CIa\\u000CHT\\u000CHD\\u000CHy\\u000CIa\\u000CHZ\\u000CHR\\u000CHT\\u000CHR\\u000CHB\\u000CHD\\u000CIk\\u000CHi\\u000CHJ\\u000CHR\\u000CH^\\u000CHH\\u000CH@\\u000CHS\\u000CHp\\u000CH^\\u000CIl\\u000CHF\\u000CIm\\u000CH\\\\\\u000CIn\\u000CH[\\u000CHU\\u000CHS\\u000CHn\\u000CHJ\\u000CIl\\u000CHB\\u000CHS\\u000CHH\\u000CIa\\u000CH\\\\\\u000CHy\\u000CHY\\u000CHS\\u000CHH\\u000CHR\\u000CH\\\\\\u000CIm\\u000CHF\\u000CHC\\u000CIk\\u000CHT\\u000CIa\\u000CHI\\u000CHR\\u000CHD\\u000CHy\\u000CH\\\\\\u000CIg\\u000CHM\\u000CHP\\u000CHB\\u000CIm\\u000CHy\\u000CIa\\u000CHH\\u000CHC\\u000CIg\\u000CHp\\u000CHD\\u000CHR\\u000CHy\\u000CIo\\u000CHF\\u000CHC\\u000CHR\\u000CHF\\u000CIg\\u000CHT\\u000CIa\\u000CHs\\u000CHt\\u000CH\\\\\\u000CIk\\u000CH^\\u000CIn\\u000CHy\\u000CHR\\u000CH\\\\\\u000CIa\\u000CHC\\u000CHY\\u000CHS\\u000CHv\\u000CHR\\u000CH\\\\\\u000CHT\\u000CIn\\u000CHv\\u000CHD\\u000CHR\\u000CHB\\u000CIn\\u000CH^\\u000CIa\\u000CHC\\u000CHJ\\u000CIk\\u000CHz\\u000CIk\\u000CHn\\u000CHU\\u000CHB\\u000CIk\\u000CHZ\\u000CHR\\u000CHT\\u000CIa\\u000CHy\\u000CIn\\u000CH^\\u000CHB\\u000CId\\u000CHn\\u000CHD\\u000CIk\\u000CHH\\u000CId\\u000CHC\\u000CHR\\u000CH\\\\\\u000CHp\\u000CHS\\u000CHT\\u000CHy\\u000CIkqpp({no!#wjwof>!.wzsf!#`lmwfmw>!wjwof!#`lmwfmw>!bw#wkf#pbnf#wjnf-ip!=?,p`qjsw=\\t?!#nfwklg>!slpw!#?,psbm=?,b=?,oj=ufqwj`bo.bojdm9w,irvfqz-njm-ip!=-`oj`h+evm`wjlm+#pwzof>!sbggjmd.~*+*8\\t?,p`qjsw=\\t?,psbm=?b#kqfe>!?b#kqfe>!kwws9,,*8#qfwvqm#ebopf8wf{w.gf`lqbwjlm9#p`qloojmd>!ml!#alqgfq.`loobspf9bppl`jbwfg#tjwk#Abkbpb#JmglmfpjbFmdojpk#obmdvbdf?wf{w#{no9psb`f>-dje!#alqgfq>!3!?,algz=\\t?,kwno=\\tlufqeolt9kjggfm8jnd#pq`>!kwws9,,bggFufmwOjpwfmfqqfpslmpjaof#elq#p-ip!=?,p`qjsw=\\t,ebuj`lm-j`l!#,=lsfqbwjmd#pzpwfn!#pwzof>!tjgwk92wbqdfw>!\\\\aobmh!=Pwbwf#Vmjufqpjwzwf{w.bojdm9ofew8\\tgl`vnfmw-tqjwf+/#jm`ovgjmd#wkf#bqlvmg#wkf#tlqog*8\\u000E\\t?,p`qjsw=\\u000E\\t?!#pwzof>!kfjdkw98lufqeolt9kjggfmnlqf#jmelqnbwjlmbm#jmwfqmbwjlmbob#nfnafq#le#wkf#lmf#le#wkf#ejqpw`bm#af#elvmg#jm#?,gju=\\t\\n\\n?,gju=\\tgjpsobz9#mlmf8!=!#,=\\t?ojmh#qfo>!\\t##+evm`wjlm+*#xwkf#26wk#`fmwvqz-sqfufmwGfebvow+obqdf#mvnafq#le#Azybmwjmf#Fnsjqf-isd\\u007Fwkvna\\u007Fofew\\u007Fubpw#nbilqjwz#lenbilqjwz#le#wkf##bojdm>!`fmwfq!=Vmjufqpjwz#Sqfppglnjmbwfg#az#wkfPf`lmg#Tlqog#Tbqgjpwqjavwjlm#le#pwzof>!slpjwjlm9wkf#qfpw#le#wkf#`kbqb`wfqjyfg#az#qfo>!mleloolt!=gfqjufp#eqln#wkfqbwkfq#wkbm#wkf#b#`lnajmbwjlm#lepwzof>!tjgwk9233Fmdojpk.psfbhjmd`lnsvwfq#p`jfm`falqgfq>!3!#bow>!wkf#f{jpwfm`f#leGfnl`qbwj`#Sbqwz!#pwzof>!nbqdjm.Elq#wkjp#qfbplm/-ip!=?,p`qjsw=\\t\\npAzWbdMbnf+p*X3^ip!=?,p`qjsw=\\u000E\\t?-ip!=?,p`qjsw=\\u000E\\tojmh#qfo>!j`lm!#\\$#bow>\\$\\$#`obpp>\\$elqnbwjlm#le#wkfufqpjlmp#le#wkf#?,b=?,gju=?,gju=,sbdf=\\t##?sbdf=\\t?gju#`obpp>!`lmwaf`bnf#wkf#ejqpwabkbpb#Jmglmfpjbfmdojpk#+pjnsof*\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@=i=l<^<\\\\=n=m<V<T<V<R<P<S<\\\\<Q<T<T=c<^<W=c<Y=n=m=c<x<R<]<\\\\<^<T=n=`=k<Y<W<R<^<Y<V<\\\\=l<\\\\<[<^<T=n<T=c<t<Q=n<Y=l<Q<Y=n<r=n<^<Y=n<T=n=`<Q<\\\\<S=l<T<P<Y=l<T<Q=n<Y=l<Q<Y=n<V<R=n<R=l<R<_<R=m=n=l<\\\\<Q<T=j=g<V<\\\\=k<Y=m=n<^<Y=o=m<W<R<^<T=c=i<S=l<R<]<W<Y<P=g<S<R<W=o=k<T=n=`=c<^<W=c=b=n=m=c<Q<\\\\<T<]<R<W<Y<Y<V<R<P<S<\\\\<Q<T=c<^<Q<T<P<\\\\<Q<T<Y=m=l<Y<X=m=n<^<\\\\4K5h5i5d4K4Z5f4U4K5h4]4J5f4_5f4E4K5h4K5j4F5n4K5h5i4X4K4]5o4K4F5o4K5h4_5f4K4]4K4F4K5h5i5o4F5d4D4E4K5h4_4U5d4C5f4E4K4A4Y4K4J5f4K4F4K5h4U4K5h5i5f4E4K5h4Y5d4F5f4K4F4K5h4K5j4F4]5j4F4K5h4F4Y4K5i5f5i4K5h4I4_5h4K5i5f4K5h5i4X4K4]5o4E4K5h5i4]4J5f4K4Fqlalwp!#`lmwfmw>!?gju#jg>!ellwfq!=wkf#Vmjwfg#Pwbwfp?jnd#pq`>!kwws9,,-isd\\u007Fqjdkw\\u007Fwkvna\\u007F-ip!=?,p`qjsw=\\u000E\\t?ol`bwjlm-sqlwl`loeqbnfalqgfq>!3!#p!#,=\\t?nfwb#mbnf>!?,b=?,gju=?,gju=?elmw.tfjdkw9alog8%rvlw8#bmg#%rvlw8gfsfmgjmd#lm#wkf#nbqdjm938sbggjmd9!#qfo>!mleloolt!#Sqfpjgfmw#le#wkf#wtfmwjfwk#`fmwvqzfujpjlm=\\t##?,sbdfJmwfqmfw#F{solqfqb-bpzm`#>#wqvf8\\u000E\\tjmelqnbwjlm#balvw?gju#jg>!kfbgfq!=!#b`wjlm>!kwws9,,?b#kqfe>!kwwsp9,,?gju#jg>!`lmwfmw!?,gju=\\u000E\\t?,gju=\\u000E\\t?gfqjufg#eqln#wkf#?jnd#pq`>\\$kwws9,,b``lqgjmd#wl#wkf#\\t?,algz=\\t?,kwno=\\tpwzof>!elmw.pjyf9p`qjsw#obmdvbdf>!Bqjbo/#Kfoufwj`b/?,b=?psbm#`obpp>!?,p`qjsw=?p`qjsw#slojwj`bo#sbqwjfpwg=?,wq=?,wbaof=?kqfe>!kwws9,,ttt-jmwfqsqfwbwjlm#leqfo>!pwzofpkffw!#gl`vnfmw-tqjwf+\\$?`kbqpfw>!vwe.;!=\\tafdjmmjmd#le#wkf#qfufbofg#wkbw#wkfwfofujpjlm#pfqjfp!#qfo>!mleloolt!=#wbqdfw>!\\\\aobmh!=`objnjmd#wkbw#wkfkwws&0B&1E&1Ettt-nbmjefpwbwjlmp#leSqjnf#Njmjpwfq#lejmeovfm`fg#az#wkf`obpp>!`ofbqej{!=,gju=\\u000E\\t?,gju=\\u000E\\t\\u000E\\twkqff.gjnfmpjlmbo@kvq`k#le#Fmdobmgle#Mlqwk#@bqlojmbprvbqf#hjolnfwqfp-bggFufmwOjpwfmfqgjpwjm`w#eqln#wkf`lnnlmoz#hmltm#bpSklmfwj`#Boskbafwgf`obqfg#wkbw#wkf`lmwqloofg#az#wkfAfmibnjm#Eqbmhojmqlof.sobzjmd#dbnfwkf#Vmjufqpjwz#lejm#Tfpwfqm#Fvqlsfsfqplmbo#`lnsvwfqSqlif`w#Dvwfmafqdqfdbqgofpp#le#wkfkbp#affm#sqlslpfgwldfwkfq#tjwk#wkf=?,oj=?oj#`obpp>!jm#plnf#`lvmwqjfpnjm-ip!=?,p`qjsw=le#wkf#slsvobwjlmleej`jbo#obmdvbdf?jnd#pq`>!jnbdfp,jgfmwjejfg#az#wkfmbwvqbo#qfplvq`fp`obppjej`bwjlm#le`bm#af#`lmpjgfqfgrvbmwvn#nf`kbmj`pMfufqwkfofpp/#wkfnjoojlm#zfbqp#bdl?,algz=\\u000E\\t?,kwno=\\u000E\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@\\twbhf#bgubmwbdf#lebmg/#b``lqgjmd#wlbwwqjavwfg#wl#wkfNj`qlplew#Tjmgltpwkf#ejqpw#`fmwvqzvmgfq#wkf#`lmwqlogju#`obpp>!kfbgfqpklqwoz#bewfq#wkfmlwbaof#f{`fswjlmwfmp#le#wklvpbmgppfufqbo#gjeefqfmwbqlvmg#wkf#tlqog-qfb`kjmd#njojwbqzjplobwfg#eqln#wkflsslpjwjlm#wl#wkfwkf#Log#WfpwbnfmwBeqj`bm#Bnfqj`bmpjmpfqwfg#jmwl#wkfpfsbqbwf#eqln#wkfnfwqlslojwbm#bqfbnbhfp#jw#slppjaofb`hmltofgdfg#wkbwbqdvbaoz#wkf#nlpwwzsf>!wf{w,`pp!=\\twkf#JmwfqmbwjlmboB``lqgjmd#wl#wkf#sf>!wf{w,`pp!#,=\\t`ljm`jgf#tjwk#wkfwtl.wkjqgp#le#wkfGvqjmd#wkjp#wjnf/gvqjmd#wkf#sfqjlgbmmlvm`fg#wkbw#kfwkf#jmwfqmbwjlmbobmg#nlqf#qf`fmwozafojfufg#wkbw#wkf`lmp`jlvpmfpp#bmgelqnfqoz#hmltm#bppvqqlvmgfg#az#wkfejqpw#bssfbqfg#jml``bpjlmbooz#vpfgslpjwjlm9baplovwf8!#wbqdfw>!\\\\aobmh!#slpjwjlm9qfobwjuf8wf{w.bojdm9`fmwfq8ib{,ojap,irvfqz,2-ab`hdqlvmg.`lolq9 wzsf>!bssoj`bwjlm,bmdvbdf!#`lmwfmw>!?nfwb#kwws.frvju>!Sqjub`z#Sloj`z?,b=f+!&0@p`qjsw#pq`>\\$!#wbqdfw>!\\\\aobmh!=Lm#wkf#lwkfq#kbmg/-isd\\u007Fwkvna\\u007Fqjdkw\\u007F1?,gju=?gju#`obpp>!?gju#pwzof>!eolbw9mjmfwffmwk#`fmwvqz?,algz=\\u000E\\t?,kwno=\\u000E\\t?jnd#pq`>!kwws9,,p8wf{w.bojdm9`fmwfqelmw.tfjdkw9#alog8#B``lqgjmd#wl#wkf#gjeefqfm`f#afwtffm!#eqbnfalqgfq>!3!#!#pwzof>!slpjwjlm9ojmh#kqfe>!kwws9,,kwno7,ollpf-gwg!=\\tgvqjmd#wkjp#sfqjlg?,wg=?,wq=?,wbaof=`olpfoz#qfobwfg#wlelq#wkf#ejqpw#wjnf8elmw.tfjdkw9alog8jmsvw#wzsf>!wf{w!#?psbm#pwzof>!elmw.lmqfbgzpwbwf`kbmdf\\n?gju#`obpp>!`ofbqgl`vnfmw-ol`bwjlm-#Elq#f{bnsof/#wkf#b#tjgf#ubqjfwz#le#?\\\"GL@WZSF#kwno=\\u000E\\t?%maps8%maps8%maps8!=?b#kqfe>!kwws9,,pwzof>!eolbw9ofew8`lm`fqmfg#tjwk#wkf>kwws&0B&1E&1Ettt-jm#slsvobq#`vowvqfwzsf>!wf{w,`pp!#,=jw#jp#slppjaof#wl#Kbqubqg#Vmjufqpjwzwzofpkffw!#kqfe>!,wkf#nbjm#`kbqb`wfqL{elqg#Vmjufqpjwz##mbnf>!hfztlqgp!#`pwzof>!wf{w.bojdm9wkf#Vmjwfg#Hjmdglnefgfqbo#dlufqmnfmw?gju#pwzof>!nbqdjm#gfsfmgjmd#lm#wkf#gfp`qjswjlm#le#wkf?gju#`obpp>!kfbgfq-njm-ip!=?,p`qjsw=gfpwqv`wjlm#le#wkfpojdkwoz#gjeefqfmwjm#b``lqgbm`f#tjwkwfof`lnnvmj`bwjlmpjmgj`bwfp#wkbw#wkfpklqwoz#wkfqfbewfqfpsf`jbooz#jm#wkf#Fvqlsfbm#`lvmwqjfpKltfufq/#wkfqf#bqfpq`>!kwws9,,pwbwj`pvddfpwfg#wkbw#wkf!#pq`>!kwws9,,ttt-b#obqdf#mvnafq#le#Wfof`lnnvmj`bwjlmp!#qfo>!mleloolt!#wKloz#Qlnbm#Fnsfqlqbonlpw#f{`ovpjufoz!#alqgfq>!3!#bow>!Pf`qfwbqz#le#Pwbwf`vonjmbwjmd#jm#wkf@JB#Tlqog#Eb`wallhwkf#nlpw#jnslqwbmwbmmjufqpbqz#le#wkfpwzof>!ab`hdqlvmg.?oj=?fn=?b#kqfe>!,wkf#Bwobmwj`#L`fbmpwqj`woz#psfbhjmd/pklqwoz#afelqf#wkfgjeefqfmw#wzsfp#lewkf#Lwwlnbm#Fnsjqf=?jnd#pq`>!kwws9,,Bm#Jmwqlgv`wjlm#wl`lmpfrvfm`f#le#wkfgfsbqwvqf#eqln#wkf@lmefgfqbwf#Pwbwfpjmgjdfmlvp#sflsofpSql`ffgjmdp#le#wkfjmelqnbwjlm#lm#wkfwkflqjfp#kbuf#affmjmuloufnfmw#jm#wkfgjujgfg#jmwl#wkqffbgib`fmw#`lvmwqjfpjp#qfpslmpjaof#elqgjpplovwjlm#le#wkf`loobalqbwjlm#tjwktjgfoz#qfdbqgfg#bpkjp#`lmwfnslqbqjfpelvmgjmd#nfnafq#leGlnjmj`bm#Qfsvaoj`dfmfqbooz#b``fswfgwkf#slppjajojwz#lebqf#bopl#bubjobaofvmgfq#`lmpwqv`wjlmqfpwlqbwjlm#le#wkfwkf#dfmfqbo#svaoj`jp#bonlpw#fmwjqfozsbppfp#wkqlvdk#wkfkbp#affm#pvddfpwfg`lnsvwfq#bmg#ujgflDfqnbmj`#obmdvbdfp#b``lqgjmd#wl#wkf#gjeefqfmw#eqln#wkfpklqwoz#bewfqtbqgpkqfe>!kwwsp9,,ttt-qf`fmw#gfufolsnfmwAlbqg#le#Gjqf`wlqp?gju#`obpp>!pfbq`k\\u007F#?b#kqfe>!kwws9,,Jm#sbqwj`vobq/#wkfNvowjsof#ellwmlwfplq#lwkfq#pvapwbm`fwklvpbmgp#le#zfbqpwqbmpobwjlm#le#wkf?,gju=\\u000E\\t?,gju=\\u000E\\t\\u000E\\t?b#kqfe>!jmgf{-skstbp#fpwbaojpkfg#jmnjm-ip!=?,p`qjsw=\\tsbqwj`jsbwf#jm#wkfb#pwqlmd#jmeovfm`fpwzof>!nbqdjm.wls9qfsqfpfmwfg#az#wkfdqbgvbwfg#eqln#wkfWqbgjwjlmbooz/#wkfFofnfmw+!p`qjsw!*8Kltfufq/#pjm`f#wkf,gju=\\t?,gju=\\t?gju#ofew8#nbqdjm.ofew9sqlwf`wjlm#bdbjmpw38#ufqwj`bo.bojdm9Vmelqwvmbwfoz/#wkfwzsf>!jnbdf,{.j`lm,gju=\\t?gju#`obpp>!#`obpp>!`ofbqej{!=?gju#`obpp>!ellwfq\\n\\n?,gju=\\t\\n\\n?,gju=\\twkf#nlwjlm#sj`wvqf<}=f<W<_<\\\\=l=m<V<T<]=f<W<_<\\\\=l=m<V<T<H<Y<X<Y=l<\\\\=j<T<T<Q<Y=m<V<R<W=`<V<R=m<R<R<]=e<Y<Q<T<Y=m<R<R<]=e<Y<Q<T=c<S=l<R<_=l<\\\\<P<P=g<r=n<S=l<\\\\<^<T=n=`<]<Y=m<S<W<\\\\=n<Q<R<P<\\\\=n<Y=l<T<\\\\<W=g<S<R<[<^<R<W=c<Y=n<S<R=m<W<Y<X<Q<T<Y=l<\\\\<[<W<T=k<Q=g=i<S=l<R<X=o<V=j<T<T<S=l<R<_=l<\\\\<P<P<\\\\<S<R<W<Q<R=m=n=`=b<Q<\\\\=i<R<X<T=n=m=c<T<[<]=l<\\\\<Q<Q<R<Y<Q<\\\\=m<Y<W<Y<Q<T=c<T<[<P<Y<Q<Y<Q<T=c<V<\\\\=n<Y<_<R=l<T<T<|<W<Y<V=m<\\\\<Q<X=l\\u000CHJ\\u000CIa\\u000CHY\\u000CHR\\u000CH\\\\\\u000CHR\\u000CHB\\u000CId\\u000CHD\\u000CIm\\u000CHi\\u000CH^\\u000CHF\\u000CIa\\u000CH\\\\\\u000CHJ\\u000CHR\\u000CHD\\u000CHA\\u000CHR\\u000CH\\\\\\u000CHH\\u000CIl\\u000CHC\\u000CHi\\u000CHD\\u000CIm\\u000CHJ\\u000CIk\\u000CHZ\\u000CHU\\u000CHS\\u000CHD\\u000CIa\\u000CHJ\\u000CIl\\u000CHk\\u000CHn\\u000CHM\\u000CHS\\u000CHC\\u000CHR\\u000CHJ\\u000CHS\\u000CH^\\u000CIa\\u000CH^\\u000CIl\\u000CHi\\u000CHK\\u000CHS\\u000CHy\\u000CHR\\u000CH\\\\\\u000CHY\\u000CIl\\u000CHM\\u000CHS\\u000CHC\\u000CIg\\u000CHv\\u000CHS\\u000CHs\\u000CIa\\u000CHL\\u000CIk\\u000CHT\\u000CHB\\u000CHR\\u000CHv\\u000CHR\\u000CH\\\\\\u000CHp\\u000CHn\\u000CHy\\u000CIa\\u000CHZ\\u000CHD\\u000CHJ\\u000CIm\\u000CHD\\u000CHS\\u000CHC\\u000CHR\\u000CHF\\u000CIa\\u000CH\\\\\\u000CHC\\u000CIg\\u000CH{\\u000CHi\\u000CHD\\u000CIm\\u000CHT\\u000CHR\\u000CH\\\\\\u000CH}\\u000CHD\\u000CH^\\u000CHR\\u000CHk\\u000CHD\\u000CHF\\u000CHR\\u000CH\\\\\\u000CIa\\u000CHs\\u000CIl\\u000CHZ\\u000CH\\\\\\u000CIa\\u000CHH\\u000CIg\\u000CHn\\u000CH^\\u000CIg\\u000CHy\\u000CHT\\u000CHA\\u000CHR\\u000CHG\\u000CHP\\u000CIa\\u000CH^\\u000CId\\u000CHZ\\u000CHZ\\u000CH\\\\\\u000CIa\\u000CHH\\u000CIk\\u000CHn\\u000CHF\\u000CIa\\u000CH\\\\\\u000CHJ\\u000CIk\\u000CHZ\\u000CHF\\u000CIa\\u000CH^\\u000CIk\\u000CHC\\u000CH\\\\\\u000CHy\\u000CIk\\u000CHn\\u000CHJ\\u000CIa\\u000CH\\\\\\u000CHT\\u000CIa\\u000CHI\\u000CHS\\u000CHH\\u000CHS\\u000CHe\\u000CHH\\u000CIa\\u000CHF\\u000CHR\\u000CHJ\\u000CHe\\u000CHD\\u000CIa\\u000CHU\\u000CIk\\u000CHn\\u000CHv\\u000CHS\\u000CHs\\u000CIa\\u000CHL\\u000CHR\\u000CHC\\u000CHR\\u000CHH\\u000CIa\\u000CH\\\\\\u000CHR\\u000CHp\\u000CIa\\u000CHC\\u000CHR\\u000CHJ\\u000CHR\\u000CHF\\u000CIm\\u000CH\\\\\\u000CHR\\u000CHD\\u000CIk\\u000CHp\\u000CIg\\u000CHM\\u000CHP\\u000CIk\\u000CHn\\u000CHi\\u000CHD\\u000CIm\\u000CHY\\u000CHR\\u000CHJ\\u000CHZ\\u000CIa\\u000CH\\\\\\u000CIk\\u000CHO\\u000CIl\\u000CHZ\\u000CHS\\u000CHy\\u000CIa\\u000CH[\\u000CHR\\u000CHT\\u000CH\\\\\\u000CHy\\u000CHR\\u000CH\\\\\\u000CIl\\u000CHT\\u000CHn\\u000CH{\\u000CIa\\u000CH\\\\\\u000CHU\\u000CHF\\u000CH\\\\\\u000CHS\\u000CHO\\u000CHR\\u000CHB\\u000CH@\\u000CIa\\u000CH\\\\\\u000CHR\\u000CHn\\u000CHM\\u000CH@\\u000CHv\\u000CIa\\u000CHv\\u000CIg\\u000CHn\\u000CHe\\u000CHF\\u000CH^\\u000CH@\\u000CIa\\u000CHK\\u000CHB\\u000CHn\\u000CHH\\u000CIa\\u000CH\\\\\\u000CIl\\u000CHT\\u000CHn\\u000CHF\\u000CH\\\\\\u000CIa\\u000CHy\\u000CHe\\u000CHB\\u000CIa\\u000CHB\\u000CIl\\u000CHJ\\u000CHB\\u000CHR\\u000CHK\\u000CIa\\u000CHC\\u000CHB\\u000CHT\\u000CHU\\u000CHR\\u000CHC\\u000CHH\\u000CHR\\u000CHZ\\u000CH@\\u000CIa\\u000CHJ\\u000CIg\\u000CHn\\u000CHB\\u000CIl\\u000CHM\\u000CHS\\u000CHC\\u000CHR\\u000CHj\\u000CHd\\u000CHF\\u000CIl\\u000CHc\\u000CH^\\u000CHB\\u000CIg\\u000CH@\\u000CHR\\u000CHk\\u000CH^\\u000CHT\\u000CHn\\u000CHz\\u000CIa\\u000CHC\\u000CHR\\u000CHj\\u000CHF\\u000CH\\\\\\u000CIk\\u000CHZ\\u000CHD\\u000CHi\\u000CHD\\u000CIm\\u000CH@\\u000CHn\\u000CHK\\u000CH@\\u000CHR\\u000CHp\\u000CHP\\u000CHR\\u000CH\\\\\\u000CHD\\u000CHY\\u000CIl\\u000CHD\\u000CHH\\u000CHB\\u000CHF\\u000CIa\\u000CH\\\\\\u000CHB\\u000CIm\\u000CHz\\u000CHF\\u000CIa\\u000CH\\\\\\u000CHZ\\u000CIa\\u000CHD\\u000CHF\\u000CH\\\\\\u000CHS\\u000CHY\\u000CHR\\u000CH\\\\\\u000CHD\\u000CIm\\u000CHy\\u000CHT\\u000CHR\\u000CHD\\u000CHT\\u000CHB\\u000CH\\\\\\u000CIa\\u000CHI\\u000CHD\\u000CHj\\u000CHC\\u000CIg\\u000CHp\\u000CHS\\u000CHH\\u000CHT\\u000CIg\\u000CHB\\u000CHY\\u000CHR\\u000CH\\\\4K5h5i4X4K4]5o4K4F4K5h5i5j4F4C5f4K4F4K5h5o5i4D5f5d4F4]4K5h5i4X4K5k4C4K4F4U4C4C4K5h4^5d4K4]4U4C4C4K5h4]4C5d4C4K5h4I4_5h4K5i5f4E4K5h5m5d4F5d4X5d4D4K5h5i4_4K4D5n4K4F4K5h5i4U5h5d5i4K4F4K5h5i4_5h4_5h4K4F4K5h4@4]4K5m5f5o4_4K5h4K4_5h4K5i5f4E4K5h4K4F4Y4K5h4K4Fhfztlqgp!#`lmwfmw>!t0-lqd,2:::,{kwno!=?b#wbqdfw>!\\\\aobmh!#wf{w,kwno8#`kbqpfw>!#wbqdfw>!\\\\aobmh!=?wbaof#`foosbggjmd>!bvwl`lnsofwf>!lee!#wf{w.bojdm9#`fmwfq8wl#obpw#ufqpjlm#az#ab`hdqlvmg.`lolq9# !#kqfe>!kwws9,,ttt-,gju=?,gju=?gju#jg>?b#kqfe>! !#`obpp>!!=?jnd#pq`>!kwws9,,`qjsw!#pq`>!kwws9,,\\t?p`qjsw#obmdvbdf>!,,FM!#!kwws9,,ttt-tfm`lgfVQJ@lnslmfmw+!#kqfe>!ibubp`qjsw9?gju#`obpp>!`lmwfmwgl`vnfmw-tqjwf+\\$?p`slpjwjlm9#baplovwf8p`qjsw#pq`>!kwws9,,#pwzof>!nbqdjm.wls9-njm-ip!=?,p`qjsw=\\t?,gju=\\t?gju#`obpp>!t0-lqd,2:::,{kwno!#\\t\\u000E\\t?,algz=\\u000E\\t?,kwno=gjpwjm`wjlm#afwtffm,!#wbqdfw>!\\\\aobmh!=?ojmh#kqfe>!kwws9,,fm`lgjmd>!vwe.;!<=\\tt-bggFufmwOjpwfmfq<b`wjlm>!kwws9,,ttt-j`lm!#kqfe>!kwws9,,#pwzof>!ab`hdqlvmg9wzsf>!wf{w,`pp!#,=\\tnfwb#sqlsfqwz>!ld9w?jmsvw#wzsf>!wf{w!##pwzof>!wf{w.bojdm9wkf#gfufolsnfmw#le#wzofpkffw!#wzsf>!wfkwno8#`kbqpfw>vwe.;jp#`lmpjgfqfg#wl#afwbaof#tjgwk>!233&!#Jm#bggjwjlm#wl#wkf#`lmwqjavwfg#wl#wkf#gjeefqfm`fp#afwtffmgfufolsnfmw#le#wkf#Jw#jp#jnslqwbmw#wl#?,p`qjsw=\\t\\t?p`qjsw##pwzof>!elmw.pjyf92=?,psbm=?psbm#jg>daOjaqbqz#le#@lmdqfpp?jnd#pq`>!kwws9,,jnFmdojpk#wqbmpobwjlmB`bgfnz#le#P`jfm`fpgju#pwzof>!gjpsobz9`lmpwqv`wjlm#le#wkf-dfwFofnfmwAzJg+jg*jm#`lmivm`wjlm#tjwkFofnfmw+\\$p`qjsw\\$*8#?nfwb#sqlsfqwz>!ld9<}=f<W<_<\\\\=l=m<V<T\\t#wzsf>!wf{w!#mbnf>!=Sqjub`z#Sloj`z?,b=bgnjmjpwfqfg#az#wkffmbaofPjmdofQfrvfpwpwzof>%rvlw8nbqdjm9?,gju=?,gju=?,gju=?=?jnd#pq`>!kwws9,,j#pwzof>%rvlw8eolbw9qfefqqfg#wl#bp#wkf#wlwbo#slsvobwjlm#lejm#Tbpkjmdwlm/#G-@-#pwzof>!ab`hdqlvmg.bnlmd#lwkfq#wkjmdp/lqdbmjybwjlm#le#wkfsbqwj`jsbwfg#jm#wkfwkf#jmwqlgv`wjlm#lejgfmwjejfg#tjwk#wkfej`wjlmbo#`kbqb`wfq#L{elqg#Vmjufqpjwz#njpvmgfqpwbmgjmd#leWkfqf#bqf/#kltfufq/pwzofpkffw!#kqfe>!,@lovnajb#Vmjufqpjwzf{sbmgfg#wl#jm`ovgfvpvbooz#qfefqqfg#wljmgj`bwjmd#wkbw#wkfkbuf#pvddfpwfg#wkbwbeejojbwfg#tjwk#wkf`lqqfobwjlm#afwtffmmvnafq#le#gjeefqfmw=?,wg=?,wq=?,wbaof=Qfsvaoj`#le#Jqfobmg\\t?,p`qjsw=\\t?p`qjsw#vmgfq#wkf#jmeovfm`f`lmwqjavwjlm#wl#wkfLeej`jbo#tfapjwf#lekfbgrvbqwfqp#le#wkf`fmwfqfg#bqlvmg#wkfjnsoj`bwjlmp#le#wkfkbuf#affm#gfufolsfgEfgfqbo#Qfsvaoj`#leaf`bnf#jm`qfbpjmdoz`lmwjmvbwjlm#le#wkfMlwf/#kltfufq/#wkbwpjnjobq#wl#wkbw#le#`bsbajojwjfp#le#wkfb``lqgbm`f#tjwk#wkfsbqwj`jsbmwp#jm#wkfevqwkfq#gfufolsnfmwvmgfq#wkf#gjqf`wjlmjp#lewfm#`lmpjgfqfgkjp#zlvmdfq#aqlwkfq?,wg=?,wq=?,wbaof=?b#kwws.frvju>![.VB.skzpj`bo#sqlsfqwjfple#Aqjwjpk#@lovnajbkbp#affm#`qjwj`jyfg+tjwk#wkf#f{`fswjlmrvfpwjlmp#balvw#wkfsbppjmd#wkqlvdk#wkf3!#`foosbggjmd>!3!#wklvpbmgp#le#sflsofqfgjqf`wp#kfqf-#Elqkbuf#`kjogqfm#vmgfq&0F&0@,p`qjsw&0F!**8?b#kqfe>!kwws9,,ttt-?oj=?b#kqfe>!kwws9,,pjwf\\\\mbnf!#`lmwfmw>!wf{w.gf`lqbwjlm9mlmfpwzof>!gjpsobz9#mlmf?nfwb#kwws.frvju>![.mft#Gbwf+*-dfwWjnf+*#wzsf>!jnbdf,{.j`lm!?,psbm=?psbm#`obpp>!obmdvbdf>!ibubp`qjswtjmglt-ol`bwjlm-kqfe?b#kqfe>!ibubp`qjsw9..=\\u000E\\t?p`qjsw#wzsf>!w?b#kqfe>\\$kwws9,,ttt-klqw`vw#j`lm!#kqfe>!?,gju=\\u000E\\t?gju#`obpp>!?p`qjsw#pq`>!kwws9,,!#qfo>!pwzofpkffw!#w?,gju=\\t?p`qjsw#wzsf>,b=#?b#kqfe>!kwws9,,#booltWqbmpsbqfm`z>![.VB.@lnsbwjaof!#`lmqfobwjlmpkjs#afwtffm\\t?,p`qjsw=\\u000E\\t?p`qjsw#?,b=?,oj=?,vo=?,gju=bppl`jbwfg#tjwk#wkf#sqldqbnnjmd#obmdvbdf?,b=?b#kqfe>!kwws9,,?,b=?,oj=?oj#`obpp>!elqn#b`wjlm>!kwws9,,?gju#pwzof>!gjpsobz9wzsf>!wf{w!#mbnf>!r!?wbaof#tjgwk>!233&!#ab`hdqlvmg.slpjwjlm9!#alqgfq>!3!#tjgwk>!qfo>!pklqw`vw#j`lm!#k5=?vo=?oj=?b#kqfe>!##?nfwb#kwws.frvju>!`pp!#nfgjb>!p`qffm!#qfpslmpjaof#elq#wkf#!#wzsf>!bssoj`bwjlm,!#pwzof>!ab`hdqlvmg.kwno8#`kbqpfw>vwe.;!#booltwqbmpsbqfm`z>!pwzofpkffw!#wzsf>!wf\\u000E\\t?nfwb#kwws.frvju>!=?,psbm=?psbm#`obpp>!3!#`foopsb`jmd>!3!=8\\t?,p`qjsw=\\t?p`qjsw#plnfwjnfp#`boofg#wkfglfp#mlw#mf`fppbqjozElq#nlqf#jmelqnbwjlmbw#wkf#afdjmmjmd#le#?\\\"GL@WZSF#kwno=?kwnosbqwj`vobqoz#jm#wkf#wzsf>!kjggfm!#mbnf>!ibubp`qjsw9uljg+3*8!feef`wjufmfpp#le#wkf#bvwl`lnsofwf>!lee!#dfmfqbooz#`lmpjgfqfg=?jmsvw#wzsf>!wf{w!#!=?,p`qjsw=\\u000E\\t?p`qjswwkqlvdklvw#wkf#tlqog`lnnlm#njp`lm`fswjlmbppl`jbwjlm#tjwk#wkf?,gju=\\t?,gju=\\t?gju#`gvqjmd#kjp#ojefwjnf/`lqqfpslmgjmd#wl#wkfwzsf>!jnbdf,{.j`lm!#bm#jm`qfbpjmd#mvnafqgjsolnbwj`#qfobwjlmpbqf#lewfm#`lmpjgfqfgnfwb#`kbqpfw>!vwe.;!#?jmsvw#wzsf>!wf{w!#f{bnsofp#jm`ovgf#wkf!=?jnd#pq`>!kwws9,,jsbqwj`jsbwjlm#jm#wkfwkf#fpwbaojpknfmw#le\\t?,gju=\\t?gju#`obpp>!%bns8maps8%bns8maps8wl#gfwfqnjmf#tkfwkfqrvjwf#gjeefqfmw#eqlnnbqhfg#wkf#afdjmmjmdgjpwbm`f#afwtffm#wkf`lmwqjavwjlmp#wl#wkf`lmeoj`w#afwtffm#wkftjgfoz#`lmpjgfqfg#wltbp#lmf#le#wkf#ejqpwtjwk#ubqzjmd#gfdqffpkbuf#psf`vobwfg#wkbw+gl`vnfmw-dfwFofnfmwsbqwj`jsbwjmd#jm#wkflqjdjmbooz#gfufolsfgfwb#`kbqpfw>!vwe.;!=#wzsf>!wf{w,`pp!#,=\\tjmwfq`kbmdfbaoz#tjwknlqf#`olpfoz#qfobwfgpl`jbo#bmg#slojwj`bowkbw#tlvog#lwkfqtjpfsfqsfmgj`vobq#wl#wkfpwzof#wzsf>!wf{w,`ppwzsf>!pvanjw!#mbnf>!ebnjojfp#qfpjgjmd#jmgfufolsjmd#`lvmwqjfp`lnsvwfq#sqldqbnnjmdf`lmlnj`#gfufolsnfmwgfwfqnjmbwjlm#le#wkfelq#nlqf#jmelqnbwjlmlm#pfufqbo#l``bpjlmpslqwvdv/Fp#+Fvqlsfv*<O<V=l<\\\\={<Q=m=`<V<\\\\=o<V=l<\\\\={<Q=m=`<V<\\\\<L<R=m=m<T<U=m<V<R<U<P<\\\\=n<Y=l<T<\\\\<W<R<^<T<Q=h<R=l<P<\\\\=j<T<T=o<S=l<\\\\<^<W<Y<Q<T=c<Q<Y<R<]=i<R<X<T<P<R<T<Q=h<R=l<P<\\\\=j<T=c<t<Q=h<R=l<P<\\\\=j<T=c<L<Y=m<S=o<]<W<T<V<T<V<R<W<T=k<Y=m=n<^<R<T<Q=h<R=l<P<\\\\=j<T=b=n<Y=l=l<T=n<R=l<T<T<X<R=m=n<\\\\=n<R=k<Q<R4K5h5i4F5d4K4@4C5d5j4K5h4K4X4F4]4K5o4K4F4K5h4K5n4F4]4K4A4K4Fkwno8#`kbqpfw>VWE.;!#pfwWjnflvw+evm`wjlm+*gjpsobz9jmojmf.aol`h8?jmsvw#wzsf>!pvanjw!#wzsf#>#\\$wf{w,ibubp`qj?jnd#pq`>!kwws9,,ttt-!#!kwws9,,ttt-t0-lqd,pklqw`vw#j`lm!#kqfe>!!#bvwl`lnsofwf>!lee!#?,b=?,gju=?gju#`obpp>?,b=?,oj=\\t?oj#`obpp>!`pp!#wzsf>!wf{w,`pp!#?elqn#b`wjlm>!kwws9,,{w,`pp!#kqfe>!kwws9,,ojmh#qfo>!bowfqmbwf!#\\u000E\\t?p`qjsw#wzsf>!wf{w,#lm`oj`h>!ibubp`qjsw9+mft#Gbwf*-dfwWjnf+*~kfjdkw>!2!#tjgwk>!2!#Sflsof\\$p#Qfsvaoj`#le##?b#kqfe>!kwws9,,ttt-wf{w.gf`lqbwjlm9vmgfqwkf#afdjmmjmd#le#wkf#?,gju=\\t?,gju=\\t?,gju=\\tfpwbaojpknfmw#le#wkf#?,gju=?,gju=?,gju=?,g ujftslqwxnjm.kfjdkw9\\t?p`qjsw#pq`>!kwws9,,lswjlm=?lswjlm#ubovf>lewfm#qfefqqfg#wl#bp#,lswjlm=\\t?lswjlm#ubov?\\\"GL@WZSF#kwno=\\t?\\\"..XJmwfqmbwjlmbo#Bjqslqw=\\t?b#kqfe>!kwws9,,ttt?,b=?b#kqfe>!kwws9,,t\\u000CTL\\u000CT^\\u000CTE\\u000CT^\\u000CUh\\u000CT{\\u000CTN\\roI\\ro|\\roL\\ro{\\roO\\rov\\rot\\nAO\\u0005Gx\\bTA\\nzk#+\\u000BUm\\u0005Gx*\\u000CHD\\u000CHS\\u000CH\\\\\\u000CIa\\u000CHJ\\u000CIk\\u000CHZ\\u000CHM\\u000CHR\\u000CHe\\u000CHD\\u000CH^\\u000CIg\\u000CHM\\u000CHy\\u000CIa\\u000CH[\\u000CIk\\u000CHH\\u000CIa\\u000CH\\\\\\u000CHp\\u000CHR\\u000CHD\\u000CHy\\u000CHR\\u000CH\\\\\\u000CIl\\u000CHT\\u000CHn\\u000CH@\\u000CHn\\u000CHK\\u000CHS\\u000CHH\\u000CHT\\u000CIa\\u000CHI\\u000CHR\\u000CHF\\u000CHD\\u000CHR\\u000CHT\\u000CIa\\u000CHY\\u000CIl\\u000CHy\\u000CHR\\u000CH\\\\\\u000CHT\\u000CHn\\u000CHT\\u000CIa\\u000CHy\\u000CH\\\\\\u000CHO\\u000CHT\\u000CHR\\u000CHB\\u000CH{\\u000CIa\\u000CH\\\\\\u000CIl\\u000CHv\\u000CHS\\u000CHs\\u000CIa\\u000CHL\\u000CIg\\u000CHn\\u000CHY\\u000CHS\\u000CHp\\u000CIa\\u000CHr\\u000CHR\\u000CHD\\u000CHi\\u000CHB\\u000CIk\\u000CH\\\\\\u000CHS\\u000CHy\\u000CHR\\u000CHY\\u000CHS\\u000CHA\\u000CHS\\u000CHD\\u000CIa\\u000CHD\\u000CH{\\u000CHR\\u000CHM\\u000CHS\\u000CHC\\u000CHR\\u000CHm\\u000CHy\\u000CIa\\u000CHC\\u000CIg\\u000CHn\\u000CHy\\u000CHS\\u000CHT\\u000CIm\\u000CH\\\\\\u000CHy\\u000CIa\\u000CH[\\u000CHR\\u000CHF\\u000CHU\\u000CIm\\u000CHm\\u000CHv\\u000CHH\\u000CIl\\u000CHF\\u000CIa\\u000CH\\\\\\u000CH@\\u000CHn\\u000CHK\\u000CHD\\u000CHs\\u000CHS\\u000CHF\\u000CIa\\u000CHF\\u000CHO\\u000CIl\\u000CHy\\u000CIa\\u000CH\\\\\\u000CHS\\u000CHy\\u000CIk\\u000CHs\\u000CHF\\u000CIa\\u000CH\\\\\\u000CHR\\u000CH\\\\\\u000CHn\\u000CHA\\u000CHF\\u000CIa\\u000CH\\\\\\u000CHR\\u000CHF\\u000CIa\\u000CHH\\u000CHB\\u000CHR\\u000CH^\\u000CHS\\u000CHy\\u000CIg\\u000CHn\\u000CH\\\\\\u000CHG\\u000CHP\\u000CIa\\u000CHH\\u000CHR\\u000CH\\\\\\u000CHD\\u000CHS\\u000CH\\\\\\u000CIa\\u000CHB\\u000CHR\\u000CHO\\u000CH^\\u000CHS\\u000CHB\\u000CHS\\u000CHs\\u000CIk\\u000CHMgfp`qjswjlm!#`lmwfmw>!gl`vnfmw-ol`bwjlm-sqlw-dfwFofnfmwpAzWbdMbnf+?\\\"GL@WZSF#kwno=\\t?kwno#?nfwb#`kbqpfw>!vwe.;!=9vqo!#`lmwfmw>!kwws9,,-`pp!#qfo>!pwzofpkffw!pwzof#wzsf>!wf{w,`pp!=wzsf>!wf{w,`pp!#kqfe>!t0-lqd,2:::,{kwno!#{nowzsf>!wf{w,ibubp`qjsw!#nfwklg>!dfw!#b`wjlm>!ojmh#qfo>!pwzofpkffw!##>#gl`vnfmw-dfwFofnfmwwzsf>!jnbdf,{.j`lm!#,=`foosbggjmd>!3!#`foops-`pp!#wzsf>!wf{w,`pp!#?,b=?,oj=?oj=?b#kqfe>!!#tjgwk>!2!#kfjdkw>!2!!=?b#kqfe>!kwws9,,ttt-pwzof>!gjpsobz9mlmf8!=bowfqmbwf!#wzsf>!bssoj.,,T0@,,GWG#[KWNO#2-3#foopsb`jmd>!3!#`foosbg#wzsf>!kjggfm!#ubovf>!,b=%maps8?psbm#qlof>!p\\t?jmsvw#wzsf>!kjggfm!#obmdvbdf>!IbubP`qjsw!##gl`vnfmw-dfwFofnfmwpAd>!3!#`foopsb`jmd>!3!#zsf>!wf{w,`pp!#nfgjb>!wzsf>\\$wf{w,ibubp`qjsw\\$tjwk#wkf#f{`fswjlm#le#zsf>!wf{w,`pp!#qfo>!pw#kfjdkw>!2!#tjgwk>!2!#>\\$(fm`lgfVQJ@lnslmfmw+?ojmh#qfo>!bowfqmbwf!#\\talgz/#wq/#jmsvw/#wf{wnfwb#mbnf>!qlalwp!#`lmnfwklg>!slpw!#b`wjlm>!=\\t?b#kqfe>!kwws9,,ttt-`pp!#qfo>!pwzofpkffw!#?,gju=?,gju=?gju#`obppobmdvbdf>!ibubp`qjsw!=bqjb.kjggfm>!wqvf!=.[?qjsw!#wzsf>!wf{w,ibubpo>38~*+*8\\t+evm`wjlm+*xab`hdqlvmg.jnbdf9#vqo+,b=?,oj=?oj=?b#kqfe>!k\\n\\n?oj=?b#kqfe>!kwws9,,bwlq!#bqjb.kjggfm>!wqv=#?b#kqfe>!kwws9,,ttt-obmdvbdf>!ibubp`qjsw!#,lswjlm=\\t?lswjlm#ubovf,gju=?,gju=?gju#`obpp>qbwlq!#bqjb.kjggfm>!wqf>+mft#Gbwf*-dfwWjnf+*slqwvdv/Fp#+gl#Aqbpjo*<R=l<_<\\\\<Q<T<[<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n=`<R<]=l<\\\\<[<R<^<\\\\<Q<T=c=l<Y<_<T=m=n=l<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n<T<R<]=c<[<\\\\=n<Y<W=`<Q<\\\\?\\\"GL@WZSF#kwno#SVAOJ@#!mw.Wzsf!#`lmwfmw>!wf{w,?nfwb#kwws.frvju>!@lmwfqbmpjwjlmbo,,FM!#!kwws9?kwno#{nomp>!kwws9,,ttt.,,T0@,,GWG#[KWNO#2-3#WGWG,{kwno2.wqbmpjwjlmbo,,ttt-t0-lqd,WQ,{kwno2,sf#>#\\$wf{w,ibubp`qjsw\\$8?nfwb#mbnf>!gfp`qjswjlmsbqfmwMlgf-jmpfqwAfelqf?jmsvw#wzsf>!kjggfm!#mbip!#wzsf>!wf{w,ibubp`qj+gl`vnfmw*-qfbgz+evm`wjp`qjsw#wzsf>!wf{w,ibubpjnbdf!#`lmwfmw>!kwws9,,VB.@lnsbwjaof!#`lmwfmw>wno8#`kbqpfw>vwe.;!#,=\\tojmh#qfo>!pklqw`vw#j`lm?ojmh#qfo>!pwzofpkffw!#?,p`qjsw=\\t?p`qjsw#wzsf>>#gl`vnfmw-`qfbwfFofnfm?b#wbqdfw>!\\\\aobmh!#kqfe>#gl`vnfmw-dfwFofnfmwpAjmsvw#wzsf>!wf{w!#mbnf>b-wzsf#>#\\$wf{w,ibubp`qjmsvw#wzsf>!kjggfm!#mbnfkwno8#`kbqpfw>vwe.;!#,=gwg!=\\t?kwno#{nomp>!kwws.,,T0@,,GWG#KWNO#7-32#WfmwpAzWbdMbnf+\\$p`qjsw\\$*jmsvw#wzsf>!kjggfm!#mbn?p`qjsw#wzsf>!wf{w,ibubp!#pwzof>!gjpsobz9mlmf8!=gl`vnfmw-dfwFofnfmwAzJg+>gl`vnfmw-`qfbwfFofnfmw+\\$#wzsf>\\$wf{w,ibubp`qjsw\\$jmsvw#wzsf>!wf{w!#mbnf>!g-dfwFofnfmwpAzWbdMbnf+pmj`bo!#kqfe>!kwws9,,ttt-@,,GWG#KWNO#7-32#Wqbmpjw?pwzof#wzsf>!wf{w,`pp!=\\t\\t?pwzof#wzsf>!wf{w,`pp!=jlmbo-gwg!=\\t?kwno#{nomp>kwws.frvju>!@lmwfmw.Wzsfgjmd>!3!#`foopsb`jmd>!3!kwno8#`kbqpfw>vwe.;!#,=\\t#pwzof>!gjpsobz9mlmf8!=??oj=?b#kqfe>!kwws9,,ttt-#wzsf>\\$wf{w,ibubp`qjsw\\$=<X<Y=c=n<Y<W=`<Q<R=m=n<T=m<R<R=n<^<Y=n=m=n<^<T<T<S=l<R<T<[<^<R<X=m=n<^<\\\\<]<Y<[<R<S<\\\\=m<Q<R=m=n<T\\u000CHF\\u000CIm\\u000CHT\\u000CIa\\u000CHH\\u000CHS\\u000CHy\\u000CHR\\u000CHy\\u000CHR\\u000CHn\\u000CH{\\u000CIa\\u000CH\\\\\\u000CIk\\u000CHT\\u000CHe\\u000CHD\\u000CIa\\u000CHU\\u000CIg\\u000CHn\\u000CHD\\u000CIk\\u000CHY\\u000CHS\\u000CHK\\u000CHR\\u000CHD\\u000CHT\\u000CHA\\u000CHR\\u000CHG\\u000CHS\\u000CHy\\u000CIa\\u000CHT\\u000CHS\\u000CHn\\u000CH{\\u000CHT\\u000CIm\\u000CH\\\\\\u000CHy\\u000CIa\\u000CH[\\u000CHS\\u000CHH\\u000CHy\\u000CIe\\u000CHF\\u000CIl\\u000CH\\\\\\u000CHR\\u000CHk\\u000CHs\\u000CHY\\u000CHS\\u000CHp\\u000CIa\\u000CHr\\u000CHR\\u000CHF\\u000CHD\\u000CHy\\u000CHR\\u000CH\\\\\\u000CIa\\u000CH\\\\\\u000CHY\\u000CHR\\u000CHd\\u000CHT\\u000CHy\\u000CIa\\u000CH\\\\\\u000CHS\\u000CHC\\u000CHH\\u000CHR\", \"\\u06F7%\\u018C'T%\\u0085'W%\\u00D7%O%g%\\u00A6&\\u0193%\\u01E5&>&*&'&^&\\u0088\\u0178\\u0C3E&\\u01AD&\\u0192&)&^&%&'&\\u0082&P&1&\\u00B1&3&]&m&u&E&t&C&\\u00CF&V&V&/&>&6&\\u0F76\\u177Co&p&@&E&M&P&x&@&F&e&\\u00CC&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1\\u025E*\\u03EA\\u21F3&\\u1372&K&;&)&E&H&P&0&?&9&V&\\u0081&-&v&a&,&E&)&?&=&'&'&B&\\u0D2E&\\u0503&\\u0316*&*8&%&%&&&%,)&\\u009A&>&\\u0086&7&]&F&2&>&J&6&n&2&%&?&\\u008E&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%\\u053C\\u0084(,(<&,&\\u03DA&\\u18C7&-&,(%&(&%&(\\u013B0&X&D&\\u0081&j&'&J&(&.&B&3&Z&R&h&3&E&E&<\\u00C6-\\u0360\\u1EF3&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&C\\u072C\\u2A25&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&\\u1E78\\u00CC-&7&1&F&7&t&W&7&I&.&.&^&=\\u0F9C\\u19D3&8(>&/&/&\\u077B')'\\u1065')'%@/&0&%\\u043E\\u09C0*&*@&C\\u053D\\u05D4\\u0274\\u05EB4\\u0DD7\\u071A\\u04D16\\u0D84&/\\u0178\\u0303Z&*%\\u0246\\u03FF&\\u0134&1\\u00A8\\u04B4\\u0174\", dictionarySizeBits, \"AAAAKKLLKKKKKJJIHHIHHGGFF\");\n  flipBuffer(dictionaryData);\n  setData(dictionaryData.asReadOnlyBuffer(), dictionarySizeBits);\n}\n\nprivate val BYTE_ZEROES: ByteArray = ByteArray(size = 1024);\nprivate val INT_ZEROES: IntArray = IntArray(size = 1024);\n\ninternal fun fillBytesWithZeroes(dest: ByteArray, start: Int, end: Int): Unit {\n  var cursor: Int = start;\n  while (cursor < end) {\n    var step: Int = Math.min(cursor + 1024, end) - cursor;\n    System.arraycopy(BYTE_ZEROES, 0, dest, cursor, step);\n    cursor += step;\n  }\n}\n\ninternal fun fillIntsWithZeroes(dest: IntArray, start: Int, end: Int): Unit {\n  var cursor: Int = start;\n  while (cursor < end) {\n    var step: Int = Math.min(cursor + 1024, end) - cursor;\n    System.arraycopy(INT_ZEROES, 0, dest, cursor, step);\n    cursor += step;\n  }\n}\n\ninternal fun copyBytesWithin(bytes: ByteArray, target: Int, start: Int, end: Int): Unit {\n  System.arraycopy(bytes, start, bytes, target, end - start);\n}\n\ninternal fun readInput(s: State, dst: ByteArray, offset: Int, length: Int): Int {\n  try {\n    return s.input.read(dst, offset, length);\n  } catch (e: IOException) {\n    throw BrotliRuntimeException(\"Failed to read input\", e);\n  }\n}\n\ninternal fun closeInput(s: State): Unit {\n  s.input.close();\n  s.input = ByteArrayInputStream(ByteArray(size = 0));\n}\n\ninternal fun toUsAsciiBytes(src: String): ByteArray {\n  return src.toByteArray(Charsets.US_ASCII);\n}\n\ninternal fun toUtf8Runes(src: String): IntArray {\n  var len: Int = src.length;\n  var result: IntArray = IntArray(size = len);\n  for (i: Int in 0 until len) {\n    result[i] = src[i].code.toInt();\n  }\n  return result;\n}\n\ninternal fun flipBuffer(buffer: Buffer): Unit {\n  buffer.flip();\n}\n\ninternal fun makeError(s: State, code: Int): Int {\n  if (code >= 0) {\n    return code;\n  }\n  if (s.runningState >= 0) {\n    s.runningState = code;\n  }\n  if (code <= -21) {\n    throw IllegalStateException(\"Brotli error code: \" + code);\n  }\n  throw BrotliRuntimeException(\"Error code: \" + code);\n}\n\nprivate val nothing = run {\n  decodeStaticInit();\n  transformStaticInit();\n  contextStaticInit();\n  dictionaryDataStaticInit();\n}\n/* GENERATED CODE END */\n"
  },
  {
    "path": "java/org/brotli/dec/pom.xml",
    "content": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n  xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n  <modelVersion>4.0.0</modelVersion>\n\n  <parent>\n    <groupId>org.brotli</groupId>\n    <artifactId>parent</artifactId>\n    <version>1.2.0-SNAPSHOT</version>\n  </parent>\n  <artifactId>dec</artifactId>\n  <version>1.2.0-SNAPSHOT</version>\n  <packaging>jar</packaging>\n\n  <name>${project.groupId}:${project.artifactId}</name>\n\n  <properties>\n    <manifestdir>${project.build.directory}/osgi</manifestdir>\n    <manifestfile>${manifestdir}/MANIFEST.MF</manifestfile>\n  </properties>\n\n  <build>\n    <sourceDirectory>../../..</sourceDirectory>\n    <testSourceDirectory>../../..</testSourceDirectory>\n    <plugins>\n      <plugin>\n        <groupId>org.apache.maven.plugins</groupId>\n        <artifactId>maven-compiler-plugin</artifactId>\n        <configuration>\n          <includes>\n            <include>org/brotli/dec/*.java</include>\n          </includes>\n          <excludes>\n            <exclude>**/*Test*.java</exclude>\n          </excludes>\n          <testIncludes>\n            <include>org/brotli/dec/*Test*.java</include>\n          </testIncludes>\n          <testExcludes>\n            <exclude>org/brotli/dec/SetDictionaryTest.java</exclude>\n          </testExcludes>\n        </configuration>\n      </plugin>\n      <plugin>\n        <groupId>org.apache.maven.plugins</groupId>\n        <artifactId>maven-surefire-plugin</artifactId>\n        <version>3.5.4</version>\n        <configuration>\n          <systemPropertyVariables>\n            <BROTLI_ENABLE_ASSERTS>true</BROTLI_ENABLE_ASSERTS>\n          </systemPropertyVariables>\n        </configuration>\n      </plugin>\n      <plugin>\n        <groupId>org.apache.maven.plugins</groupId>\n        <artifactId>maven-source-plugin</artifactId>\n        <version>3.3.1</version>\n        <configuration>\n          <finalName>${project.groupId}.${project.artifactId}-${project.version}</finalName>\n        </configuration>\n        <executions>\n          <execution>\n            <id>attach-sources</id>\n            <phase>verify</phase>\n            <goals>\n              <goal>jar-no-fork</goal>\n            </goals>\n            <configuration>\n              <includes>\n                <include>org/brotli/dec/*.java</include>\n              </includes>\n              <excludes>\n                <exclude>**/*Test*.java</exclude>\n              </excludes>\n            </configuration>\n          </execution>\n        </executions>\n      </plugin>\n      <plugin>\n        <groupId>org.apache.maven.plugins</groupId>\n        <artifactId>maven-javadoc-plugin</artifactId>\n        <version>3.12.0</version>\n        <configuration>\n          <source>8</source>\n          <finalName>${project.groupId}.${project.artifactId}-${project.version}</finalName>\n        </configuration>\n        <executions>\n          <execution>\n            <id>attach-javadocs</id>\n            <phase>verify</phase>\n            <goals>\n              <goal>jar</goal>\n            </goals>\n            <configuration>\n              <sourcepath>.</sourcepath>\n              <sourceFileExcludes>\n                <exclude>**/*Test*.java</exclude>\n              </sourceFileExcludes>\n            </configuration>\n          </execution>\n        </executions>\n      </plugin>\n      <plugin>\n        <groupId>org.apache.felix</groupId>\n        <artifactId>maven-bundle-plugin</artifactId>\n        <version>6.0.0</version>\n        <configuration>\n          <archive>\n            <forced>true</forced>\n          </archive>\n          <excludeDependencies>true</excludeDependencies>\n          <manifestLocation>${manifestdir}</manifestLocation>\n          <instructions>\n            <_nouses>true</_nouses>\n            <Automatic-Module-Name>${project.groupId}.${project.artifactId}</Automatic-Module-Name>\n            <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>\n            <Bundle-Description>${project.description}</Bundle-Description>\n            <Export-Package>${project.groupId};version=${project.version};-noimport:=true</Export-Package>\n            <Private-Package></Private-Package>\n            <Import-Package>*</Import-Package>\n            <DynamicImport-Package></DynamicImport-Package>\n            <Bundle-DocURL>${project.url}</Bundle-DocURL>\n          </instructions>\n        </configuration>\n        <executions>\n          <execution>\n            <id>bundle-manifest</id>\n            <phase>process-classes</phase>\n            <goals>\n              <goal>manifest</goal>\n            </goals>\n          </execution>\n        </executions>\n      </plugin>\n      <plugin>\n        <groupId>org.apache.maven.plugins</groupId>\n        <artifactId>maven-jar-plugin</artifactId>\n        <version>3.4.2</version>\n        <configuration>\n          <archive>\n            <manifestFile>${manifestfile}</manifestFile>\n          </archive>\n          <finalName>${project.groupId}.${project.artifactId}-${project.version}</finalName>\n        </configuration>\n      </plugin>\n      <plugin>\n        <artifactId>maven-resources-plugin</artifactId>\n        <version>3.3.1</version>\n        <executions>\n          <execution>\n            <id>copy-license</id>\n            <phase>validate</phase>\n            <goals>\n              <goal>copy-resources</goal>\n            </goals>\n            <configuration>\n              <outputDirectory>${project.build.outputDirectory}/META-INF</outputDirectory>\n              <resources>\n                <resource>\n                  <directory>../../../../</directory>\n                  <includes>\n                    <include>LICENSE</include>\n                  </includes>\n                  <filtering>false</filtering>\n                </resource>\n              </resources>\n            </configuration>\n          </execution>\n        </executions>\n      </plugin>\n    </plugins>\n  </build>\n\n  <dependencies>\n    <dependency>\n      <groupId>junit</groupId>\n      <artifactId>junit</artifactId>\n      <version>4.13.2</version>\n      <scope>test</scope>\n    </dependency>\n  </dependencies>\n</project>\n"
  },
  {
    "path": "java/org/brotli/dec/proguard.pgcfg",
    "content": "# DictionaryData is an optionally / dynamically loaded built-in dictionary.\n-keep class org.brotli.dec.DictionaryData\n\n# We get the fully-qualified name of DictionaryData from Dictionary, so avoid\n# renaming it.\n-keepnames class org.brotli.dec.Dictionary\n"
  },
  {
    "path": "java/org/brotli/enc/BUILD.bazel",
    "content": "# Description:\n#   Java port of Brotli decoder.\n\nload(\"@rules_java//java:java_library.bzl\", \"java_library\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nlicenses([\"notice\"])  # MIT\n\njava_library(\n    name = \"prepared_dictionary\",\n    srcs = [\n        \"PreparedDictionary.java\",\n        \"PreparedDictionaryGenerator.java\",\n    ],\n)\n"
  },
  {
    "path": "java/org/brotli/enc/PreparedDictionary.java",
    "content": "/* Copyright 2018 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.enc;\n\nimport java.nio.ByteBuffer;\n\n/**\n * Prepared dictionary data provider.\n */\npublic interface PreparedDictionary {\n  ByteBuffer getData();\n}\n"
  },
  {
    "path": "java/org/brotli/enc/PreparedDictionaryGenerator.java",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.enc;\n\nimport java.nio.Buffer;\nimport java.nio.ByteBuffer;\nimport java.nio.ByteOrder;\nimport java.nio.IntBuffer;\nimport java.nio.ShortBuffer;\n\n/**\n * Java prepared (raw) dictionary producer.\n */\npublic class PreparedDictionaryGenerator {\n\n  private static final int MAGIC = 0xDEBCEDE0;\n  private static final long HASH_MULTIPLIER = 0x1fe35a7bd3579bd3L;\n\n  private static class PreparedDictionaryImpl implements PreparedDictionary {\n    private final ByteBuffer data;\n\n    private PreparedDictionaryImpl(ByteBuffer data) {\n      this.data = data;\n    }\n\n    @Override\n    public ByteBuffer getData() {\n      return data;\n    }\n  }\n\n  // Disallow instantiation.\n  private PreparedDictionaryGenerator() { }\n\n  public static PreparedDictionary generate(ByteBuffer src) {\n    return generate(src, 17, 3, 40, 5);\n  }\n\n  public static PreparedDictionary generate(ByteBuffer src,\n      int bucketBits, int slotBits, int hashBits, int blockBits) {\n    ((Buffer) src).clear();  // Just in case...\n    if (blockBits > 12) {\n      throw new IllegalArgumentException(\"blockBits is too big\");\n    }\n    if (bucketBits >= 24) {\n      throw new IllegalArgumentException(\"bucketBits is too big\");\n    }\n    if (bucketBits - slotBits >= 16) {\n      throw new IllegalArgumentException(\"slotBits is too small\");\n    }\n    int bucketLimit = 1 << blockBits;\n    int numBuckets = 1 << bucketBits;\n    int numSlots = 1 << slotBits;\n    int slotMask = numSlots - 1;\n    int hashShift = 64 - bucketBits;\n    long hashMask = (~0L) >>> (64 - hashBits);\n    int sourceSize = src.capacity();\n    if (sourceSize < 8) {\n      throw new IllegalArgumentException(\"src is too short\");\n    }\n\n    /* Step 1: create \"bloated\" hasher. */\n    short[] num = new short[numBuckets];\n    int[] bucketHeads = new int[numBuckets];\n    int[] nextBucket = new int[sourceSize];\n\n    long accumulator = 0;\n    for (int i = 0; i < 7; ++i) {\n      accumulator |= (src.get(i) & 0xFFL) << (8 * i);\n    }\n    accumulator <<= 8;\n    /* TODO(eustas): apply custom \"store\" order. */\n    for (int i = 0; i + 7 < sourceSize; ++i) {\n      accumulator = (accumulator >>> 8) | ((src.get(i + 7) & 0xFFL) << 56);\n      long h = (accumulator & hashMask) * HASH_MULTIPLIER;\n      int key = (int) (h >>> hashShift);\n      int count = num[key];\n      nextBucket[i] = (count == 0) ? -1 : bucketHeads[key];\n      bucketHeads[key] = i;\n      count++;\n      if (count > bucketLimit) {\n        count = bucketLimit;\n      }\n      num[key] = (short) count;\n    }\n\n    /* Step 2: find slot limits. */\n    int[] slotLimit = new int[numSlots];\n    int[] slotSize = new int[numSlots];\n    int totalItems = 0;\n    for (int i = 0; i < numSlots; ++i) {\n      boolean overflow = false;\n      slotLimit[i] = bucketLimit;\n      while (true) {\n        overflow = false;\n        int limit = slotLimit[i];\n        int count = 0;\n        for (int j = i; j < numBuckets; j += numSlots) {\n          int size = num[j];\n          /* Last chain may span behind 64K limit; overflow happens only if\n             we are about to use 0xFFFF+ as item offset. */\n          if (count >= 0xFFFF) {\n            overflow = true;\n            break;\n          }\n          if (size > limit) {\n            size = limit;\n          }\n          count += size;\n        }\n        if (!overflow) {\n          slotSize[i] = count;\n          totalItems += count;\n          break;\n        }\n        slotLimit[i]--;\n      }\n    }\n\n    /* Step 3: transfer data to \"slim\" hasher. */\n    int part0 = 6 * 4;\n    int part1 = numSlots * 4;\n    int part2 = numBuckets * 2;\n    int part3 = totalItems * 4;\n    int allocSize = part0 + part1 + part2 + part3 + sourceSize;\n    ByteBuffer flat = ByteBuffer.allocateDirect(allocSize);\n    ByteBuffer pointer = flat.slice();\n    pointer.order(ByteOrder.nativeOrder());\n\n    IntBuffer struct = pointer.asIntBuffer();\n    pointer.position(pointer.position() + part0);\n    IntBuffer slotOffsets = pointer.asIntBuffer();\n    pointer.position(pointer.position() + part1);\n    ShortBuffer heads = pointer.asShortBuffer();\n    pointer.position(pointer.position() + part2);\n    IntBuffer items = pointer.asIntBuffer();\n    pointer.position(pointer.position() + part3);\n    ByteBuffer sourceCopy = pointer.slice();\n\n    /* magic         */ struct.put(0, MAGIC);\n    /* source_offset */ struct.put(1, totalItems);\n    /* source_size   */ struct.put(2, sourceSize);\n    /* hash_bits     */ struct.put(3, hashBits);\n    /* bucket_bits   */ struct.put(4, bucketBits);\n    /* slot_bits     */ struct.put(5, slotBits);\n\n    totalItems = 0;\n    for (int i = 0; i < numSlots; ++i) {\n      slotOffsets.put(i, totalItems);\n      totalItems += slotSize[i];\n      slotSize[i] = 0;\n    }\n\n    for (int i = 0; i < numBuckets; ++i) {\n      int slot = i & slotMask;\n      int count = num[i];\n      if (count > slotLimit[slot]) {\n        count = slotLimit[slot];\n      }\n      if (count == 0) {\n        heads.put(i, (short) 0xFFFF);\n        continue;\n      }\n      int cursor = slotSize[slot];\n      heads.put(i, (short) cursor);\n      cursor += slotOffsets.get(slot);\n      slotSize[slot] += count;\n      int pos = bucketHeads[i];\n      for (int j = 0; j < count; j++) {\n        items.put(cursor++, pos);\n        pos = nextBucket[pos];\n      }\n      cursor--;\n      items.put(cursor, items.get(cursor) | 0x80000000);\n    }\n\n    sourceCopy.put(src);\n\n    return new PreparedDictionaryImpl(flat);\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/integration/BUILD.bazel",
    "content": "# Description:\n#   Integration test runner + corpus for Java port of Brotli decoder.\n\nload(\"@rules_java//java:java_binary.bzl\", \"java_binary\")\nload(\"@rules_java//java:java_library.bzl\", \"java_library\")\nload(\"@rules_java//java:java_test.bzl\", \"java_test\")\n\njava_library(\n    name = \"brotli_jni_test_base\",\n    srcs = [\"BrotliJniTestBase.java\"],\n    visibility = [\n        \"//org/brotli/wrapper/common:__pkg__\",\n        \"//org/brotli/wrapper/dec:__pkg__\",\n        \"//org/brotli/wrapper/enc:__pkg__\",\n    ],\n)\n\njava_library(\n    name = \"bundle_helper\",\n    srcs = [\"BundleHelper.java\"],\n    visibility = [\n        \"//org/brotli/wrapper/dec:__pkg__\",\n        \"//org/brotli/wrapper/enc:__pkg__\",\n    ],\n)\n\njava_library(\n    name = \"bundle_checker\",\n    srcs = [\"BundleChecker.java\"],\n    runtime_deps = [\"//org/brotli/dec\"],\n    deps = [\n        \":bundle_helper\",\n        \"//org/brotli/dec:test_utils\",\n    ],\n)\n\njava_binary(\n    name = \"bundle_checker_bin\",\n    main_class = \"org.brotli.integration.BundleChecker\",\n    runtime_deps = [\":bundle_checker\"],\n)\n\njava_test(\n    name = \"bundle_checker_data_test\",\n    args = [\"$(location :test_data)\"],\n    data = [\":test_data\"],\n    main_class = \"org.brotli.integration.BundleChecker\",\n    use_testrunner = 0,\n    runtime_deps = [\":bundle_checker\"],\n)\n\njava_test(\n    name = \"bundle_checker_fuzz_test\",\n    args = [\n        \"-s\",\n        \"$(location :fuzz_data)\",\n    ],\n    data = [\":fuzz_data\"],\n    main_class = \"org.brotli.integration.BundleChecker\",\n    use_testrunner = 0,\n    runtime_deps = [\":bundle_checker\"],\n)\n\nfilegroup(\n    name = \"fuzz_data\",\n    srcs = [\"fuzz_data.zip\"],\n    visibility = [\"//visibility:private\"],\n)\n\nfilegroup(\n    name = \"test_data\",\n    srcs = [\"test_data.zip\"],\n    visibility = [\"//org/brotli/wrapper/dec:__pkg__\"],\n)\n\nfilegroup(\n    name = \"test_corpus\",\n    srcs = [\"test_corpus.zip\"],\n    visibility = [\"//org/brotli/wrapper/enc:__pkg__\"],\n)\n"
  },
  {
    "path": "java/org/brotli/integration/Benchmark.java",
    "content": "package org.brotli.integration;\n\nimport org.brotli.dec.BrotliInputStream;\nimport java.io.ByteArrayInputStream;\nimport java.io.ByteArrayOutputStream;\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\nimport java.util.ArrayList;\n\n/**\n * Measures decompression speed on the given corpus.\n */\npublic class Benchmark {\n  private static byte[] readFile(String fileName) throws IOException {\n    int bufferLength = 65536;\n    byte[] buffer = new byte[bufferLength];\n    ByteArrayOutputStream baos = new ByteArrayOutputStream();\n    FileInputStream fin = new FileInputStream(fileName);\n    try {\n      int bytesRead;\n      while ((bytesRead = fin.read(buffer)) >= 0) {\n        baos.write(buffer, 0, bytesRead);\n      }\n    } finally {\n      fin.close();\n    }\n    return baos.toByteArray();\n  }\n  \n  private static long decodeBytes(InputStream input, OutputStream output, byte[] buffer)\n      throws IOException {\n    long totalOut = 0;\n    int readBytes;\n    BrotliInputStream in = new BrotliInputStream(input);\n    try {\n      while ((readBytes = in.read(buffer)) >= 0) {\n        output.write(buffer, 0, readBytes);\n        totalOut += readBytes;\n      }\n    } finally {\n      in.close();\n    }\n    return totalOut;\n  }\n\n  public static void main(String... args) throws IOException {\n    if (args.length == 0) {\n      System.out.println(\"Usage: benchmark <corpus>\");\n      return;\n    }\n    File corpusDir = new File(args[0]);\n    ArrayList<String> fileNames = new ArrayList<String>();\n    File[] filesList = corpusDir.listFiles();\n    if (filesList == null) {\n      System.out.println(\"'\" + args[0] + \"' is not a directory\");\n      return;\n    }\n    for (File file : filesList) {\n      if (!file.isFile()) {\n        continue;\n      }\n      String fileName = file.getAbsolutePath();\n      if (!fileName.endsWith(\".brotli\")) {\n        continue;\n      }\n      fileNames.add(fileName);\n    }\n    int fileCount = fileNames.size();\n    if (fileCount == 0) {\n      System.out.println(\"No files found\");\n      return;\n    }\n    byte[][] files = new byte[fileCount][];\n    for (int i = 0; i < fileCount; ++i) {\n      files[i] = readFile(fileNames.get(i));\n    }\n\n    ByteArrayOutputStream baos = new ByteArrayOutputStream(65536);\n    byte[] buffer = new byte[65536];\n\n    int warmupRepeat = 10;\n    long bytesDecoded = 0;\n    for (int i = 0; i < warmupRepeat; ++i) {\n      bytesDecoded = 0;\n      for (int j = 0; j < fileCount; ++j) {\n        baos.reset();\n        bytesDecoded += decodeBytes(new ByteArrayInputStream(files[j]), baos, buffer);\n      }\n    }\n\n    int repeat = 100;\n\n    long bestTime = Long.MAX_VALUE;\n    for (int i = 0; i < repeat; ++i) {\n      long start = System.nanoTime();\n      for (int j = 0; j < fileCount; ++j) {\n        baos.reset();\n        decodeBytes(new ByteArrayInputStream(files[j]), baos, buffer);\n      }\n      long end = System.nanoTime();\n      long timeDelta = end - start;\n      if (timeDelta < bestTime) {\n        bestTime = timeDelta;\n      }\n    }\n\n    double timeDeltaSeconds = bestTime / 1000000000.0;\n    if (timeDeltaSeconds <= 0) {\n      return;\n    }\n    double mbDecoded = bytesDecoded / (1024.0 * 1024.0);\n    System.out.println(mbDecoded / timeDeltaSeconds);\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/integration/BrotliJniTestBase.java",
    "content": "package org.brotli.integration;\n\n/**\n * Optionally loads brotli JNI wrapper native library.\n */\npublic class BrotliJniTestBase {\n  static {\n    String jniLibrary = System.getProperty(\"BROTLI_JNI_LIBRARY\");\n    if (jniLibrary != null) {\n      System.load(new java.io.File(jniLibrary).getAbsolutePath());\n    }\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/integration/BundleChecker.java",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.integration;\n\nimport static org.brotli.dec.TestUtils.newBrotliInputStream;\n\nimport java.io.FileInputStream;\nimport java.io.FileNotFoundException;\nimport java.io.FilterInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.concurrent.atomic.AtomicInteger;\nimport java.util.zip.ZipEntry;\nimport java.util.zip.ZipInputStream;\n\n/**\n * Decompress files and (optionally) checks their checksums.\n *\n * <p> File are read from ZIP archive passed as an array of bytes. Multiple checkers negotiate about\n * task distribution via shared AtomicInteger counter.\n * <p> All entries are expected to be valid brotli compressed streams and output CRC64 checksum\n * is expected to match the checksum hex-encoded in the first part of entry name.\n */\npublic class BundleChecker implements Runnable {\n  private final AtomicInteger nextJob;\n  private final InputStream input;\n  private final boolean sanityCheck;\n\n  /**\n   * @param sanityCheck do not calculate checksum and ignore {@link IOException}.\n   */\n  public BundleChecker(InputStream input, AtomicInteger nextJob, boolean sanityCheck) {\n    this.input = input;\n    this.nextJob = nextJob;\n    this.sanityCheck = sanityCheck;\n  }\n\n  private long decompressAndCalculateCrc(ZipInputStream input) throws IOException {\n    /* Do not allow entry readers to close the whole ZipInputStream. */\n    FilterInputStream entryStream = new FilterInputStream(input) {\n      @Override\n      public void close() {}\n    };\n\n    InputStream decompressedStream = newBrotliInputStream(entryStream);\n    long crc;\n    try {\n      crc = BundleHelper.fingerprintStream(decompressedStream);\n    } finally {\n      decompressedStream.close();\n    }\n    return crc;\n  }\n\n  @Override\n  public void run() {\n    String entryName = \"\";\n    ZipInputStream zis = new ZipInputStream(input);\n    try {\n      int entryIndex = 0;\n      ZipEntry entry;\n      int jobIndex = nextJob.getAndIncrement();\n      while ((entry = zis.getNextEntry()) != null) {\n        if (entry.isDirectory()) {\n          continue;\n        }\n        if (entryIndex++ != jobIndex) {\n          zis.closeEntry();\n          continue;\n        }\n        entryName = entry.getName();\n        long entryCrc = BundleHelper.getExpectedFingerprint(entryName);\n        try {\n          if (entryCrc != decompressAndCalculateCrc(zis) && !sanityCheck) {\n            throw new RuntimeException(\"CRC mismatch\");\n          }\n        } catch (IOException iox) {\n          if (!sanityCheck) {\n            throw new RuntimeException(\"Decompression failed\", iox);\n          }\n        }\n        zis.closeEntry();\n        entryName = \"\";\n        jobIndex = nextJob.getAndIncrement();\n      }\n      zis.close();\n      input.close();\n    } catch (Throwable ex) {\n      throw new RuntimeException(entryName, ex);\n    }\n  }\n\n  public static void main(String[] args) throws FileNotFoundException {\n    int argsOffset = 0;\n    boolean sanityCheck = false;\n    if (args.length != 0) {\n      if (args[0].equals(\"-s\")) {\n        sanityCheck = true;\n        argsOffset = 1;\n      }\n    }\n    if (args.length == argsOffset) {\n      throw new RuntimeException(\"Usage: BundleChecker [-s] <fileX.zip> ...\");\n    }\n    for (int i = argsOffset; i < args.length; ++i) {\n      new BundleChecker(new FileInputStream(args[i]), new AtomicInteger(0), sanityCheck).run();\n    }\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/integration/BundleHelper.java",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.integration;\n\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.math.BigInteger;\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.zip.ZipEntry;\nimport java.util.zip.ZipInputStream;\n\n/**\n * Utilities to work test files bundles in zip archive.\n */\npublic class BundleHelper {\n  private BundleHelper() { }\n\n  public static List<String> listEntries(InputStream input) throws IOException {\n    List<String> result = new ArrayList<String>();\n    ZipInputStream zis = new ZipInputStream(input);\n    ZipEntry entry;\n    try {\n      while ((entry = zis.getNextEntry()) != null) {\n        if (!entry.isDirectory()) {\n          result.add(entry.getName());\n        }\n        zis.closeEntry();\n      }\n    } finally {\n      zis.close();\n    }\n    return result;\n  }\n\n  public static byte[] readStream(InputStream input) throws IOException {\n    ByteArrayOutputStream result = new ByteArrayOutputStream();\n    byte[] buffer = new byte[65536];\n    int bytesRead;\n    while ((bytesRead = input.read(buffer)) != -1) {\n      result.write(buffer, 0, bytesRead);\n    }\n    return result.toByteArray();\n  }\n\n  public static byte[] readEntry(InputStream input, String entryName) throws IOException {\n    ZipInputStream zis = new ZipInputStream(input);\n    ZipEntry entry;\n    try {\n      while ((entry = zis.getNextEntry()) != null) {\n        if (entry.getName().equals(entryName)) {\n          byte[] result = readStream(zis);\n          zis.closeEntry();\n          return result;\n        }\n        zis.closeEntry();\n      }\n    } finally {\n      zis.close();\n    }\n    /* entry not found */\n    return null;\n  }\n\n  /** ECMA CRC64 polynomial. */\n  private static final long CRC_64_POLY =\n      new BigInteger(\"C96C5795D7870F42\", 16).longValue();\n\n  /**\n   * Rolls CRC64 calculation.\n   *\n   * <p> {@code CRC64(data) = -1 ^ updateCrc64((... updateCrc64(-1, firstBlock), ...), lastBlock);}\n   * <p> This simple and reliable checksum is chosen to make is easy to calculate the same value\n   * across the variety of languages (C++, Java, Go, ...).\n   */\n  public static long updateCrc64(long crc, byte[] data, int offset, int length) {\n    for (int i = offset; i < offset + length; ++i) {\n      long c = (crc ^ (long) (data[i] & 0xFF)) & 0xFF;\n      for (int k = 0; k < 8; k++) {\n        c = ((c & 1) == 1) ? CRC_64_POLY ^ (c >>> 1) : c >>> 1;\n      }\n      crc = c ^ (crc >>> 8);\n    }\n    return crc;\n  }\n\n  /**\n   * Calculates CRC64 of stream contents.\n   */\n  public static long fingerprintStream(InputStream input) throws IOException {\n    byte[] buffer = new byte[65536];\n    long crc = -1;\n    while (true) {\n      int len = input.read(buffer);\n      if (len <= 0) {\n        break;\n      }\n      crc = updateCrc64(crc, buffer, 0, len);\n    }\n    return ~crc;\n  }\n\n  public static long getExpectedFingerprint(String entryName) {\n    int dotIndex = entryName.indexOf('.');\n    String entryCrcString = (dotIndex == -1) ? entryName : entryName.substring(0, dotIndex);\n    return new BigInteger(entryCrcString, 16).longValue();\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/integration/pom.xml",
    "content": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n  xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n  <modelVersion>4.0.0</modelVersion>\n\n  <parent>\n    <groupId>org.brotli</groupId>\n    <artifactId>parent</artifactId>\n    <version>1.2.0-SNAPSHOT</version>\n  </parent>\n  <artifactId>integration</artifactId>\n  <version>1.2.0-SNAPSHOT</version>\n  <packaging>jar</packaging>\n\n  <name>${project.groupId}:${project.artifactId}</name>\n\n  <dependencies>\n    <dependency>\n      <groupId>org.brotli</groupId>\n      <artifactId>dec</artifactId>\n      <version>1.2.0-SNAPSHOT</version>\n    </dependency>\n  </dependencies>\n\n  <build>\n    <sourceDirectory>.</sourceDirectory>\n    <plugins>\n      <plugin>\n        <groupId>org.codehaus.mojo</groupId>\n        <artifactId>exec-maven-plugin</artifactId>\n        <version>3.5.1</version>\n        <executions>\n          <execution>\n            <id>data</id>\n            <phase>test</phase>\n            <goals>\n              <goal>java</goal>\n            </goals>\n            <configuration>\n              <executable>java</executable>\n              <mainClass>org.brotli.integration.BundleChecker</mainClass>\n              <arguments>\n                <argument>test_data.zip</argument>\n              </arguments>\n            </configuration>\n          </execution>\n          <execution>\n            <id>fuzz</id>\n            <phase>test</phase>\n            <goals>\n              <goal>java</goal>\n            </goals>\n            <configuration>\n              <executable>java</executable>\n              <mainClass>org.brotli.integration.BundleChecker</mainClass>\n              <arguments>\n                <argument>-s</argument>\n                <argument>fuzz_data.zip</argument>\n              </arguments>\n            </configuration>\n          </execution>\n        </executions>\n      </plugin>\n    </plugins>\n  </build>\n</project>\n"
  },
  {
    "path": "java/org/brotli/pom.xml",
    "content": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n  xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n  <modelVersion>4.0.0</modelVersion>\n\n  <groupId>org.brotli</groupId>\n  <artifactId>parent</artifactId>\n  <version>1.2.0-SNAPSHOT</version>\n  <packaging>pom</packaging>\n\n  <name>${project.groupId}:${project.artifactId}</name>\n  <description>Brotli is a generic-purpose lossless compression algorithm.</description>\n  <url>http://brotli.org</url>\n  <licenses>\n    <license>\n      <name>MIT License</name>\n      <url>http://www.opensource.org/licenses/mit-license.php</url>\n    </license>\n  </licenses>\n  <developers>\n    <developer>\n      <organization>Google</organization>\n      <organizationUrl>https://github.com/google</organizationUrl>\n    </developer>\n  </developers>\n  <scm>\n    <connection>scm:git:git://github.com/google/brotli.git</connection>\n    <developerConnection>scm:git:ssh://git@github.com/google/brotli.git</developerConnection>\n    <url>https://github.com/google/brotli</url>\n  </scm>\n\n  <modules>\n    <module>dec</module>\n  </modules>\n\n  <properties>\n    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n  </properties>\n\n  <distributionManagement>\n    <snapshotRepository>\n      <id>ossrh</id>\n      <url>https://oss.sonatype.org/content/repositories/snapshots</url>\n    </snapshotRepository>\n  </distributionManagement>\n\n  <profiles>\n    <profile>\n      <id>release-sign-artifacts</id>\n      <activation>\n        <property>\n          <name>performRelease</name>\n          <value>true</value>\n        </property>\n      </activation>\n      <build>\n        <plugins>\n          <plugin>\n            <groupId>org.apache.maven.plugins</groupId>\n            <artifactId>maven-gpg-plugin</artifactId>\n            <version>3.2.8</version>\n            <executions>\n              <execution>\n                <id>sign-artifacts</id>\n                <phase>verify</phase>\n                <goals>\n                  <goal>sign</goal>\n                </goals>\n              </execution>\n            </executions>\n          </plugin>\n        </plugins>\n      </build>\n    </profile>\n  </profiles>\n\n  <build>\n    <plugins>\n      <plugin>\n        <groupId>org.apache.maven.plugins</groupId>\n        <artifactId>maven-compiler-plugin</artifactId>\n        <version>3.14.0</version>\n        <configuration>\n          <source>8</source>\n          <target>8</target>\n        </configuration>\n      </plugin>\n      <plugin>\n        <groupId>org.sonatype.plugins</groupId>\n        <artifactId>nexus-staging-maven-plugin</artifactId>\n        <version>1.7.0</version>\n        <extensions>true</extensions>\n        <configuration>\n          <serverId>ossrh</serverId>\n          <nexusUrl>https://oss.sonatype.org/</nexusUrl>\n          <autoReleaseAfterClose>false</autoReleaseAfterClose>\n        </configuration>\n      </plugin>\n    </plugins>\n  </build>\n\n</project>\n"
  },
  {
    "path": "java/org/brotli/wrapper/android/JniHelper.java",
    "content": "package org.brotli.wrapper.android;\n\nimport android.content.Context;\nimport android.os.Build;\nimport java.io.File;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\nimport java.util.zip.ZipFile;\n\npublic class JniHelper {\n\n  // Should be set on application start.\n  static Context context = null;\n\n  private static final String LIB_NAME = \"native\";\n\n  private static void tryInitialize() {\n    try {\n      System.loadLibrary(LIB_NAME);\n    } catch (UnsatisfiedLinkError e) {\n      if (context == null) {\n        throw e;\n      }\n      int sdk = Build.VERSION.SDK_INT;\n      boolean tryFallback =\n          (sdk >= Build.VERSION_CODES.JELLY_BEAN) && (sdk <= Build.VERSION_CODES.KITKAT);\n      if (!tryFallback) {\n        throw e;\n      }\n      try {\n        String libraryFileName = \"lib\" + LIB_NAME + \".so\";\n        String libraryFullPath = context.getFilesDir() + File.separator + libraryFileName;\n        File file = new File(libraryFullPath);\n        if (!file.exists()) {\n          String apkPath = context.getApplicationInfo().sourceDir;\n          String pathInApk = \"lib/\" + Build.CPU_ABI + \"/lib\" + LIB_NAME + \".so\";\n          unzip(apkPath, pathInApk, libraryFullPath);\n        }\n        System.load(libraryFullPath);\n      } catch (UnsatisfiedLinkError unsatisfiedLinkError) {\n        throw unsatisfiedLinkError;\n      } catch (Throwable t) {\n        UnsatisfiedLinkError unsatisfiedLinkError = new UnsatisfiedLinkError(\n            \"Exception while extracting native library: \" + t.getMessage());\n        unsatisfiedLinkError.initCause(t);\n        throw unsatisfiedLinkError;\n      }\n    }\n  }\n\n  private static final Object mutex = new Object();\n  private static volatile boolean alreadyInitialized;\n\n  public static void ensureInitialized() {\n    synchronized (mutex) {\n      if (!alreadyInitialized) {\n        // If failed, do not retry.\n        alreadyInitialized = true;\n        tryInitialize();\n      }\n    }\n  }\n\n  private static void unzip(String zipFileName, String entryName, String outputFileName)\n      throws IOException {\n    ZipFile zipFile = new ZipFile(zipFileName);\n    try {\n      InputStream input = zipFile.getInputStream(zipFile.getEntry(entryName));\n      OutputStream output = new FileOutputStream(outputFileName);\n      byte[] data = new byte[16384];\n      int len;\n      while ((len = input.read(data)) != -1) {\n        output.write(data, 0, len);\n      }\n      output.close();\n      input.close();\n    } finally {\n      zipFile.close();\n    }\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/android/UseJni.java",
    "content": "package org.brotli.wrapper.android;\n\nimport org.brotli.wrapper.dec.Decoder;\nimport org.brotli.wrapper.enc.Encoder;\nimport java.io.IOException;\n\npublic final class UseJni {\n\n  static {\n    JniHelper.ensureInitialized();\n  }\n\n  public static int deepThought() {\n    String theUltimateQuestion = \"What do you get when you multiply six by 9\";\n    try {\n        return Decoder.decompress(\n            Encoder.compress(new byte[theUltimateQuestion.length()])).length;\n    } catch (IOException ex) {\n        throw new RuntimeException(\"Please wait 7.5 million years\");\n    }\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/android/UseJniTest.java",
    "content": "package org.brotli.wrapper.android;\n\nimport static junit.framework.Assert.assertEquals;\n\nimport androidx.test.core.app.ApplicationProvider;\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.robolectric.RobolectricTestRunner;\n\n@RunWith(RobolectricTestRunner.class)\npublic final class UseJniTest {\n\n  @Before\n  public void setup() {\n    JniHelper.context = ApplicationProvider.getApplicationContext();\n  }\n\n  @Test\n  public void testAnswerToTheUltimateQuestionOfLifeTheUniverseAndEverything() {\n    assertEquals(42, UseJni.deepThought());\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/common/BUILD.bazel",
    "content": "load(\"@rules_java//java:java_library.bzl\", \"java_library\")\nload(\"@rules_java//java:java_test.bzl\", \"java_test\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nlicenses([\"notice\"])  # MIT\n\nfilegroup(\n    name = \"jni_src\",\n    srcs = [\"common_jni.cc\"],\n)\n\nfilegroup(\n    name = \"brotli_jni_no_dictionary_data\",\n    srcs = [\"//:brotli_jni_no_dictionary_data.dll\"],\n)\n\njava_library(\n    name = \"common\",\n    srcs = glob(\n        [\"*.java\"],\n        exclude = [\"*Test*.java\"],\n    ),\n    resources = [\"//:license\"],\n)\n\njava_library(\n    name = \"test_lib\",\n    testonly = 1,\n    srcs = glob([\"*Test*.java\"]),\n    deps = [\n        \":common\",\n        \"//org/brotli/dec\",\n        \"//org/brotli/integration:brotli_jni_test_base\",\n        \"//org/brotli/wrapper/dec\",\n        \"@bazel_tools//tools/jdk:TestRunner\",\n    ],\n)\n\njava_test(\n    name = \"SetZeroDictionaryTest\",\n    size = \"small\",\n    data = [\n        \":brotli_jni_no_dictionary_data\",  # Bazel JNI workaround\n    ],\n    jvm_flags = [\n        \"-DBROTLI_JNI_LIBRARY=$(location :brotli_jni_no_dictionary_data)\",\n    ],\n    test_class = \"org.brotli.wrapper.common.SetZeroDictionaryTest\",\n    runtime_deps = [\":test_lib\"],\n)\n\njava_test(\n    name = \"SetRfcDictionaryTest\",\n    size = \"small\",\n    data = [\n        \":brotli_jni_no_dictionary_data\",  # Bazel JNI workaround\n    ],\n    jvm_flags = [\n        \"-DBROTLI_JNI_LIBRARY=$(location :brotli_jni_no_dictionary_data)\",\n    ],\n    test_class = \"org.brotli.wrapper.common.SetRfcDictionaryTest\",\n    runtime_deps = [\":test_lib\"],\n)\n"
  },
  {
    "path": "java/org/brotli/wrapper/common/BrotliCommon.java",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.wrapper.common;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.nio.ByteBuffer;\nimport java.util.Arrays;\n\n/**\n * JNI wrapper for brotli common.\n */\npublic class BrotliCommon {\n  public static final int RFC_DICTIONARY_SIZE = 122784;\n\n  /* 96cecd2ee7a666d5aa3627d74735b32a */\n  private static final byte[] RFC_DICTIONARY_MD5 = {\n    -106, -50, -51, 46, -25, -90, 102, -43, -86, 54, 39, -41, 71, 53, -77, 42\n  };\n\n  /* 72b41051cb61a9281ba3c4414c289da50d9a7640 */\n  private static final byte[] RFC_DICTIONARY_SHA_1 = {\n    114, -76, 16, 81, -53, 97, -87, 40, 27, -93, -60, 65, 76, 40, -99, -91, 13, -102, 118, 64\n  };\n\n  /* 20e42eb1b511c21806d4d227d07e5dd06877d8ce7b3a817f378f313653f35c70 */\n  private static final byte[] RFC_DICTIONARY_SHA_256 = {\n    32, -28, 46, -79, -75, 17, -62, 24, 6, -44, -46, 39, -48, 126, 93, -48,\n    104, 119, -40, -50, 123, 58, -127, 127, 55, -113, 49, 54, 83, -13, 92, 112\n  };\n\n  private static boolean isDictionaryDataSet;\n  private static final Object mutex = new Object();\n\n  /**\n   * Checks if the given checksum matches MD5 checksum of the RFC dictionary.\n   */\n  public static boolean checkDictionaryDataMd5(byte[] digest) {\n    return Arrays.equals(RFC_DICTIONARY_MD5, digest);\n  }\n\n  /**\n   * Checks if the given checksum matches SHA-1 checksum of the RFC dictionary.\n   */\n  public static boolean checkDictionaryDataSha1(byte[] digest) {\n    return Arrays.equals(RFC_DICTIONARY_SHA_1, digest);\n  }\n\n  /**\n   * Checks if the given checksum matches SHA-256 checksum of the RFC dictionary.\n   */\n  public static boolean checkDictionaryDataSha256(byte[] digest) {\n    return Arrays.equals(RFC_DICTIONARY_SHA_256, digest);\n  }\n\n  /**\n   * Copy bytes to a new direct ByteBuffer.\n   *\n   * Direct byte buffers are used to supply native code with large data chunks.\n   */\n  public static ByteBuffer makeNative(byte[] data) {\n    ByteBuffer result = ByteBuffer.allocateDirect(data.length);\n    result.put(data);\n    return result;\n  }\n\n  /**\n   * Copies data and sets it to be brotli dictionary.\n   */\n  public static void setDictionaryData(byte[] data) {\n    if (data.length != RFC_DICTIONARY_SIZE) {\n      throw new IllegalArgumentException(\"invalid dictionary size\");\n    }\n    synchronized (mutex) {\n      if (isDictionaryDataSet) {\n        return;\n      }\n      setDictionaryData(makeNative(data));\n    }\n  }\n\n  /**\n   * Reads data and sets it to be brotli dictionary.\n   */\n  public static void setDictionaryData(InputStream src) throws IOException {\n    synchronized (mutex) {\n      if (isDictionaryDataSet) {\n        return;\n      }\n      ByteBuffer copy = ByteBuffer.allocateDirect(RFC_DICTIONARY_SIZE);\n      byte[] buffer = new byte[4096];\n      int readBytes;\n      while ((readBytes = src.read(buffer)) != -1) {\n        if (copy.remaining() < readBytes) {\n          throw new IllegalArgumentException(\"invalid dictionary size\");\n        }\n        copy.put(buffer, 0, readBytes);\n      }\n      if (copy.remaining() != 0) {\n        throw new IllegalArgumentException(\"invalid dictionary size \" + copy.remaining());\n      }\n      setDictionaryData(copy);\n    }\n  }\n\n  /**\n   * Sets data to be brotli dictionary.\n   */\n  public static void setDictionaryData(ByteBuffer data) {\n    if (!data.isDirect()) {\n      throw new IllegalArgumentException(\"direct byte buffer is expected\");\n    }\n    if (data.capacity() != RFC_DICTIONARY_SIZE) {\n      throw new IllegalArgumentException(\"invalid dictionary size\");\n    }\n    synchronized (mutex) {\n      if (isDictionaryDataSet) {\n        return;\n      }\n      if (!CommonJNI.nativeSetDictionaryData(data)) {\n        throw new RuntimeException(\"setting dictionary failed\");\n      }\n      isDictionaryDataSet = true;\n    }\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/common/CommonJNI.java",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.wrapper.common;\n\nimport java.nio.ByteBuffer;\n\n/**\n * JNI wrapper for brotli common.\n */\nclass CommonJNI {\n  static native boolean nativeSetDictionaryData(ByteBuffer data);\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/common/SetRfcDictionaryTest.java",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.wrapper.common;\n\nimport static org.junit.Assert.assertArrayEquals;\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.assertTrue;\n\nimport org.brotli.dec.Dictionary;\nimport org.brotli.integration.BrotliJniTestBase;\nimport org.brotli.wrapper.dec.BrotliInputStream;\nimport java.io.ByteArrayInputStream;\nimport java.io.IOException;\nimport java.security.MessageDigest;\nimport java.security.NoSuchAlgorithmException;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.JUnit4;\n\n/**\n * Tests for {@link BrotliCommon}.\n */\n@RunWith(JUnit4.class)\npublic class SetRfcDictionaryTest extends BrotliJniTestBase {\n\n  @Test\n  public void testRfcDictionaryChecksums() throws NoSuchAlgorithmException {\n    System.err.println(Dictionary.getData().slice().remaining());\n    MessageDigest md5 = MessageDigest.getInstance(\"MD5\");\n    md5.update(Dictionary.getData().slice());\n    assertTrue(BrotliCommon.checkDictionaryDataMd5(md5.digest()));\n\n    MessageDigest sha1 = MessageDigest.getInstance(\"SHA-1\");\n    sha1.update(Dictionary.getData().slice());\n    assertTrue(BrotliCommon.checkDictionaryDataSha1(sha1.digest()));\n\n    MessageDigest sha256 = MessageDigest.getInstance(\"SHA-256\");\n    sha256.update(Dictionary.getData().slice());\n    assertTrue(BrotliCommon.checkDictionaryDataSha256(sha256.digest()));\n  }\n\n  @Test\n  public void testSetRfcDictionary() throws IOException {\n    /* \"leftdatadataleft\" encoded with dictionary words. */\n    byte[] data = {27, 15, 0, 0, 0, 0, -128, -29, -76, 13, 0, 0, 7, 91, 38, 49, 64, 2, 0, -32, 78,\n        27, 65, -128, 32, 80, 16, 36, 8, 6};\n    BrotliCommon.setDictionaryData(Dictionary.getData());\n\n    BrotliInputStream decoder = new BrotliInputStream(new ByteArrayInputStream(data));\n    byte[] output = new byte[17];\n    int offset = 0;\n    try {\n      int bytesRead;\n      while ((bytesRead = decoder.read(output, offset, 17 - offset)) != -1) {\n        offset += bytesRead;\n      }\n    } finally {\n      decoder.close();\n    }\n    assertEquals(16, offset);\n    byte[] expected = {\n      'l', 'e', 'f', 't',\n      'd', 'a', 't', 'a',\n      'd', 'a', 't', 'a',\n      'l', 'e', 'f', 't',\n      0\n    };\n    assertArrayEquals(expected, output);\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/common/SetZeroDictionaryTest.java",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.wrapper.common;\n\nimport static org.junit.Assert.assertArrayEquals;\nimport static org.junit.Assert.assertEquals;\n\nimport org.brotli.integration.BrotliJniTestBase;\nimport org.brotli.wrapper.dec.BrotliInputStream;\nimport java.io.ByteArrayInputStream;\nimport java.io.IOException;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.JUnit4;\n\n/**\n * Tests for {@link BrotliCommon}.\n */\n@RunWith(JUnit4.class)\npublic class SetZeroDictionaryTest extends BrotliJniTestBase {\n\n  @Test\n  public void testZeroDictionary() throws IOException {\n    /* \"leftdatadataleft\" encoded with dictionary words. */\n    byte[] data = {27, 15, 0, 0, 0, 0, -128, -29, -76, 13, 0, 0, 7, 91, 38, 49, 64, 2, 0, -32, 78,\n        27, 65, -128, 32, 80, 16, 36, 8, 6};\n    byte[] dictionary = new byte[BrotliCommon.RFC_DICTIONARY_SIZE];\n    BrotliCommon.setDictionaryData(dictionary);\n\n    BrotliInputStream decoder = new BrotliInputStream(new ByteArrayInputStream(data));\n    byte[] output = new byte[17];\n    int offset = 0;\n    try {\n      int bytesRead;\n      while ((bytesRead = decoder.read(output, offset, 17 - offset)) != -1) {\n        offset += bytesRead;\n      }\n    } finally {\n      decoder.close();\n    }\n    assertEquals(16, offset);\n    assertArrayEquals(new byte[17], output);\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/common/common_jni.cc",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include <jni.h>\n\n#include \"c/common/dictionary.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**\n * Set data to be brotli dictionary data.\n *\n * @param buffer direct ByteBuffer\n * @returns false if dictionary data was already set; otherwise true\n */\nJNIEXPORT jint JNICALL\nJava_org_brotli_wrapper_common_CommonJNI_nativeSetDictionaryData(\n    JNIEnv* env, jobject /*jobj*/, jobject buffer) {\n  jobject buffer_ref = env->functions->NewGlobalRef(env, buffer);\n  if (!buffer_ref) {\n    return false;\n  }\n  uint8_t* data = static_cast<uint8_t*>(\n      env->functions->GetDirectBufferAddress(env, buffer));\n  if (!data) {\n    env->functions->DeleteGlobalRef(env, buffer_ref);\n    return false;\n  }\n\n  BrotliSetDictionaryData(data);\n\n  const BrotliDictionary* dictionary = BrotliGetDictionary();\n  if (dictionary->data != data) {\n    env->functions->DeleteGlobalRef(env, buffer_ref);\n  } else {\n    /* Don't release reference; it is an intended memory leak. */\n  }\n  return true;\n}\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "java/org/brotli/wrapper/dec/BUILD.bazel",
    "content": "load(\"@rules_java//java:java_library.bzl\", \"java_library\")\nload(\"@rules_java//java:java_test.bzl\", \"java_test\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nlicenses([\"notice\"])  # MIT\n\nfilegroup(\n    name = \"jni_src\",\n    srcs = [\n        \"decoder_jni.cc\",\n        \"decoder_jni.h\",\n        # TODO(eustas): investigate, why this prevents JNI library loading.\n        #\"decoder_jni_onload.cc\",\n    ],\n)\n\njava_library(\n    name = \"dec\",\n    srcs = glob(\n        [\"*.java\"],\n        exclude = [\"*Test*.java\"],\n    ),\n    resources = [\"//:license\"],\n)\n\njava_library(\n    name = \"test_lib\",\n    testonly = 1,\n    srcs = glob([\"*Test*.java\"]),\n    deps = [\n        \":dec\",\n        \"//org/brotli/integration:brotli_jni_test_base\",\n        \"//org/brotli/integration:bundle_helper\",\n        \"//org/brotli/wrapper/enc\",\n        \"@bazel_tools//tools/jdk:TestRunner\",\n    ],\n)\n\nfilegroup(\n    name = \"brotli_jni\",\n    srcs = [\"//:brotli_jni.dll\"],\n)\n\nfilegroup(\n    name = \"test_bundle\",\n    srcs = [\"//org/brotli/integration:test_data\"],\n)\n\njava_test(\n    name = \"BrotliDecoderChannelTest\",\n    size = \"large\",\n    data = [\n        \":brotli_jni\",  # Bazel JNI workaround\n        \":test_bundle\",\n    ],\n    jvm_flags = [\n        \"-DBROTLI_JNI_LIBRARY=$(location :brotli_jni)\",\n        \"-DTEST_BUNDLE=$(location :test_bundle)\",\n    ],\n    test_class = \"org.brotli.wrapper.dec.BrotliDecoderChannelTest\",\n    runtime_deps = [\":test_lib\"],\n)\n\njava_test(\n    name = \"BrotliInputStreamTest\",\n    size = \"large\",\n    data = [\n        \":brotli_jni\",  # Bazel JNI workaround\n        \":test_bundle\",\n    ],\n    jvm_flags = [\n        \"-DBROTLI_JNI_LIBRARY=$(location :brotli_jni)\",\n        \"-DTEST_BUNDLE=$(location :test_bundle)\",\n    ],\n    test_class = \"org.brotli.wrapper.dec.BrotliInputStreamTest\",\n    runtime_deps = [\":test_lib\"],\n)\n\njava_test(\n    name = \"DecoderTest\",\n    size = \"large\",\n    data = [\n        \":brotli_jni\",  # Bazel JNI workaround\n        \":test_bundle\",\n    ],\n    jvm_flags = [\n        \"-DBROTLI_JNI_LIBRARY=$(location :brotli_jni)\",\n        \"-DTEST_BUNDLE=$(location :test_bundle)\",\n    ],\n    test_class = \"org.brotli.wrapper.dec.DecoderTest\",\n    runtime_deps = [\":test_lib\"],\n)\n\njava_test(\n    name = \"CornerCasesTest\",\n    size = \"large\",\n    data = [\n        \":brotli_jni\",  # Bazel JNI workaround\n    ],\n    jvm_flags = [\n        \"-DBROTLI_JNI_LIBRARY=$(location :brotli_jni)\",\n    ],\n    test_class = \"org.brotli.wrapper.dec.CornerCasesTest\",\n    runtime_deps = [\":test_lib\"],\n)\n"
  },
  {
    "path": "java/org/brotli/wrapper/dec/BrotliDecoderChannel.java",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.wrapper.dec;\n\nimport java.io.IOException;\nimport java.nio.ByteBuffer;\nimport java.nio.channels.ClosedChannelException;\nimport java.nio.channels.ReadableByteChannel;\n\n/**\n * ReadableByteChannel that wraps native brotli decoder.\n */\npublic class BrotliDecoderChannel extends Decoder implements ReadableByteChannel {\n  /** The default internal buffer size used by the decoder. */\n  private static final int DEFAULT_BUFFER_SIZE = 16384;\n\n  private final Object mutex = new Object();\n\n  /**\n   * Creates a BrotliDecoderChannel.\n   *\n   * @param source underlying source\n   * @param bufferSize intermediate buffer size\n   * @param customDictionary initial LZ77 dictionary\n   */\n  public BrotliDecoderChannel(ReadableByteChannel source, int bufferSize) throws IOException {\n    super(source, bufferSize);\n  }\n\n  public BrotliDecoderChannel(ReadableByteChannel source) throws IOException {\n    this(source, DEFAULT_BUFFER_SIZE);\n  }\n\n  @Override\n  public void attachDictionary(ByteBuffer dictionary) throws IOException {\n    super.attachDictionary(dictionary);\n  }\n\n  @Override\n  public boolean isOpen() {\n    synchronized (mutex) {\n      return !closed;\n    }\n  }\n\n  @Override\n  public void close() throws IOException {\n    synchronized (mutex) {\n      super.close();\n    }\n  }\n\n  @Override\n  public int read(ByteBuffer dst) throws IOException {\n    synchronized (mutex) {\n      if (closed) {\n        throw new ClosedChannelException();\n      }\n      int result = 0;\n      while (dst.hasRemaining()) {\n        int outputSize = decode();\n        if (outputSize <= 0) {\n          return result == 0 ? outputSize : result;\n        }\n        result += consume(dst);\n      }\n      return result;\n    }\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/dec/BrotliDecoderChannelTest.java",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.wrapper.dec;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.brotli.integration.BrotliJniTestBase;\nimport org.brotli.integration.BundleHelper;\nimport java.io.ByteArrayInputStream;\nimport java.io.FileInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.nio.channels.Channels;\nimport java.nio.channels.ReadableByteChannel;\nimport java.util.List;\nimport junit.framework.TestCase;\nimport junit.framework.TestSuite;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.AllTests;\n\n/** Tests for {@link org.brotli.wrapper.dec.BrotliDecoderChannel}. */\n@RunWith(AllTests.class)\npublic class BrotliDecoderChannelTest extends BrotliJniTestBase {\n\n  static InputStream getBundle() throws IOException {\n    return new FileInputStream(System.getProperty(\"TEST_BUNDLE\"));\n  }\n\n  /** Creates a test suite. */\n  public static TestSuite suite() throws IOException {\n    TestSuite suite = new TestSuite();\n    InputStream bundle = getBundle();\n    try {\n      List<String> entries = BundleHelper.listEntries(bundle);\n      for (String entry : entries) {\n        suite.addTest(new ChannelTestCase(entry));\n      }\n    } finally {\n      bundle.close();\n    }\n    return suite;\n  }\n\n  /** Test case with a unique name. */\n  static class ChannelTestCase extends TestCase {\n    final String entryName;\n    ChannelTestCase(String entryName) {\n      super(\"BrotliDecoderChannelTest.\" + entryName);\n      this.entryName = entryName;\n    }\n\n    @Override\n    protected void runTest() throws Throwable {\n      BrotliDecoderChannelTest.run(entryName);\n    }\n  }\n\n  private static void run(String entryName) throws Throwable {\n    InputStream bundle = getBundle();\n    byte[] compressed;\n    try {\n      compressed = BundleHelper.readEntry(bundle, entryName);\n    } finally {\n      bundle.close();\n    }\n    if (compressed == null) {\n      throw new RuntimeException(\"Can't read bundle entry: \" + entryName);\n    }\n\n    ReadableByteChannel src = Channels.newChannel(new ByteArrayInputStream(compressed));\n    ReadableByteChannel decoder = new BrotliDecoderChannel(src);\n    long crc;\n    try {\n      crc = BundleHelper.fingerprintStream(Channels.newInputStream(decoder));\n    } finally {\n      decoder.close();\n    }\n    assertEquals(BundleHelper.getExpectedFingerprint(entryName), crc);\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/dec/BrotliInputStream.java",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.wrapper.dec;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.nio.ByteBuffer;\nimport java.nio.channels.Channels;\n\n/**\n * InputStream that wraps native brotli decoder.\n */\npublic class BrotliInputStream extends InputStream {\n  /** The default internal buffer size used by the decoder. */\n  private static final int DEFAULT_BUFFER_SIZE = 16384;\n\n  private final Decoder decoder;\n\n  /**\n   * Creates a BrotliInputStream.\n   *\n   * @param source underlying source\n   * @param bufferSize intermediate buffer size\n   */\n  public BrotliInputStream(InputStream source, int bufferSize)\n      throws IOException {\n    this.decoder = new Decoder(Channels.newChannel(source), bufferSize);\n  }\n\n  public BrotliInputStream(InputStream source) throws IOException {\n    this(source, DEFAULT_BUFFER_SIZE);\n  }\n\n  public void attachDictionary(ByteBuffer dictionary) throws IOException {\n    decoder.attachDictionary(dictionary);\n  }\n\n  public void enableEagerOutput() {\n    decoder.enableEagerOutput();\n  }\n\n  @Override\n  public void close() throws IOException {\n    decoder.close();\n  }\n\n  @Override\n  public int available() {\n    return (decoder.buffer != null) ? decoder.buffer.remaining() : 0;\n  }\n\n  @Override\n  public int read() throws IOException {\n    if (decoder.closed) {\n      throw new IOException(\"read after close\");\n    }\n    int decoded;\n    // Iterate until at least one byte is decoded, or EOF reached.\n    while (true) {\n      decoded = decoder.decode();\n      if (decoded != 0) {\n        break;\n      }\n    }\n\n    if (decoded == -1) {\n      return -1;\n    }\n    return decoder.buffer.get() & 0xFF;\n  }\n\n  @Override\n  public int read(byte[] b) throws IOException {\n    return read(b, 0, b.length);\n  }\n\n  @Override\n  public int read(byte[] b, int off, int len) throws IOException {\n    if (decoder.closed) {\n      throw new IOException(\"read after close\");\n    }\n    if (decoder.decode() == -1) {\n      return -1;\n    }\n    int result = 0;\n    while (len > 0) {\n      int limit = Math.min(len, decoder.buffer.remaining());\n      decoder.buffer.get(b, off, limit);\n      off += limit;\n      len -= limit;\n      result += limit;\n      if (decoder.decode() == -1) {\n        break;\n      }\n    }\n    return result;\n  }\n\n  @Override\n  public long skip(long n) throws IOException {\n    if (decoder.closed) {\n      throw new IOException(\"read after close\");\n    }\n    long result = 0;\n    while (n > 0) {\n      if (decoder.decode() == -1) {\n        break;\n      }\n      int limit = (int) Math.min(n, (long) decoder.buffer.remaining());\n      decoder.discard(limit);\n      result += limit;\n      n -= limit;\n    }\n    return result;\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/dec/BrotliInputStreamTest.java",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.wrapper.dec;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.brotli.integration.BrotliJniTestBase;\nimport org.brotli.integration.BundleHelper;\nimport java.io.ByteArrayInputStream;\nimport java.io.FileInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.List;\nimport junit.framework.TestCase;\nimport junit.framework.TestSuite;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.AllTests;\n\n/** Tests for {@link org.brotli.wrapper.dec.BrotliInputStream}. */\n@RunWith(AllTests.class)\npublic class BrotliInputStreamTest extends BrotliJniTestBase {\n\n  static InputStream getBundle() throws IOException {\n    return new FileInputStream(System.getProperty(\"TEST_BUNDLE\"));\n  }\n\n  /** Creates a test suite. */\n  public static TestSuite suite() throws IOException {\n    TestSuite suite = new TestSuite();\n    InputStream bundle = getBundle();\n    try {\n      List<String> entries = BundleHelper.listEntries(bundle);\n      for (String entry : entries) {\n        suite.addTest(new StreamTestCase(entry));\n      }\n    } finally {\n      bundle.close();\n    }\n    return suite;\n  }\n\n  /** Test case with a unique name. */\n  static class StreamTestCase extends TestCase {\n    final String entryName;\n    StreamTestCase(String entryName) {\n      super(\"BrotliInputStreamTest.\" + entryName);\n      this.entryName = entryName;\n    }\n\n    @Override\n    protected void runTest() throws Throwable {\n      BrotliInputStreamTest.run(entryName);\n    }\n  }\n\n  private static void run(String entryName) throws Throwable {\n    InputStream bundle = getBundle();\n    byte[] compressed;\n    try {\n      compressed = BundleHelper.readEntry(bundle, entryName);\n    } finally {\n      bundle.close();\n    }\n    if (compressed == null) {\n      throw new RuntimeException(\"Can't read bundle entry: \" + entryName);\n    }\n\n    InputStream src = new ByteArrayInputStream(compressed);\n    InputStream decoder = new BrotliInputStream(src);\n    long crc;\n    try {\n      crc = BundleHelper.fingerprintStream(decoder);\n    } finally {\n      decoder.close();\n    }\n    assertEquals(BundleHelper.getExpectedFingerprint(entryName), crc);\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/dec/CornerCasesTest.java",
    "content": "/* Copyright 2021 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.wrapper.dec;\n\nimport static org.junit.Assert.assertArrayEquals;\n\nimport java.io.IOException;\nimport org.brotli.integration.BrotliJniTestBase;\nimport org.brotli.wrapper.enc.Encoder;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.JUnit4;\n\n/** Tests for {@link org.brotli.wrapper.enc.Encoder}. */\n@RunWith(JUnit4.class)\npublic class CornerCasesTest extends BrotliJniTestBase {\n\n  private static byte[] makeInput(int len) {\n    byte[] dst = new byte[len];\n    for (int i = 0; i < len; ++i) {\n      dst[i] = (byte) Integer.bitCount(i);\n    }\n    return dst;\n  }\n\n  private static byte[] embedChunk(byte[] src, int offset, int padding) {\n    int len = src.length;\n    byte[] dst = new byte[offset + len + padding];\n    // TODO(eustas): fill with garbage?\n    System.arraycopy(src, 0, dst, offset, len);\n    return dst;\n  }\n\n  @Test\n  public void testPowerOfTwoInput() throws IOException {\n    // 24 == max window bits to ensure ring-buffer size is not greater than input.\n    int len = 1 << 24;\n    byte[] data = makeInput(len);\n    byte[] encoded = Encoder.compress(data);\n    byte[] decoded = Decoder.decompress(encoded);\n    assertArrayEquals(data, decoded);\n  }\n\n  @Test\n  public void testInputOffset() throws IOException {\n    int inputLength = 19;\n    int inputOffset = 4;\n    int inputPadding = 7;\n    byte[] data = makeInput(inputLength);\n    byte[] input = embedChunk(data, inputOffset, inputPadding);\n    byte[] encoded = Encoder.compress(input, inputOffset, inputLength);\n\n    int outputLength = encoded.length;\n    int outputOffset = 9;\n    int outputPadding = 5;\n    byte[] output = embedChunk(encoded, outputOffset, outputPadding);\n    byte[] decoded = Decoder.decompress(output, outputOffset, outputLength);\n\n    assertArrayEquals(data, decoded);\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/dec/Decoder.java",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.wrapper.dec;\n\nimport java.io.IOException;\nimport java.nio.Buffer;\nimport java.nio.ByteBuffer;\nimport java.nio.channels.ReadableByteChannel;\nimport java.util.ArrayList;\n\n/**\n * Base class for InputStream / Channel implementations.\n */\npublic class Decoder implements AutoCloseable {\n  private static final ByteBuffer EMPTY_BUFFER = ByteBuffer.allocate(0);\n  private final ReadableByteChannel source;\n  private final DecoderJNI.Wrapper decoder;\n  ByteBuffer buffer;\n  boolean closed;\n  boolean eager;\n\n  /**\n   * Creates a Decoder wrapper.\n   *\n   * @param source underlying source\n   * @param inputBufferSize read buffer size\n   */\n  public Decoder(ReadableByteChannel source, int inputBufferSize)\n      throws IOException {\n    if (inputBufferSize <= 0) {\n      throw new IllegalArgumentException(\"buffer size must be positive\");\n    }\n    if (source == null) {\n      throw new NullPointerException(\"source can not be null\");\n    }\n    this.source = source;\n    this.decoder = new DecoderJNI.Wrapper(inputBufferSize);\n  }\n\n  private void fail(String message) throws IOException {\n    try {\n      close();\n    } catch (IOException ex) {\n      /* Ignore */\n    }\n    throw new IOException(message);\n  }\n\n  void attachDictionary(ByteBuffer dictionary) throws IOException {\n    if (!decoder.attachDictionary(dictionary)) {\n      fail(\"failed to attach dictionary\");\n    }\n  }\n\n  public void enableEagerOutput() {\n    this.eager = true;\n  }\n\n  /**\n   * Continue decoding.\n   *\n   * @return -1 if stream is finished, or number of bytes available in read buffer (> 0)\n   */\n  int decode() throws IOException {\n    while (true) {\n      if (buffer != null) {\n        if (!buffer.hasRemaining()) {\n          buffer = null;\n        } else {\n          return buffer.remaining();\n        }\n      }\n\n      switch (decoder.getStatus()) {\n        case DONE:\n          return -1;\n\n        case OK:\n          decoder.push(0);\n          break;\n\n        case NEEDS_MORE_INPUT:\n          // In \"eager\" more pulling preempts pushing.\n          if (eager && decoder.hasOutput()) {\n            buffer = decoder.pull();\n            break;\n          }\n          ByteBuffer inputBuffer = decoder.getInputBuffer();\n          ((Buffer) inputBuffer).clear();\n          int bytesRead = source.read(inputBuffer);\n          if (bytesRead == -1) {\n            fail(\"unexpected end of input\");\n          }\n          if (bytesRead == 0) {\n            // No input data is currently available.\n            buffer = EMPTY_BUFFER;\n            return 0;\n          }\n          decoder.push(bytesRead);\n          break;\n\n        case NEEDS_MORE_OUTPUT:\n          buffer = decoder.pull();\n          break;\n\n        default:\n          fail(\"corrupted input\");\n      }\n    }\n  }\n\n  void discard(int length) {\n    ((Buffer) buffer).position(buffer.position() + length);\n    if (!buffer.hasRemaining()) {\n      buffer = null;\n    }\n  }\n\n  int consume(ByteBuffer dst) {\n    ByteBuffer slice = buffer.slice();\n    int limit = Math.min(slice.remaining(), dst.remaining());\n    ((Buffer) slice).limit(limit);\n    dst.put(slice);\n    discard(limit);\n    return limit;\n  }\n\n  @Override\n  public void close() throws IOException {\n    if (closed) {\n      return;\n    }\n    closed = true;\n    decoder.destroy();\n    source.close();\n  }\n\n  /** Decodes the given data buffer starting at offset till length. */\n  public static byte[] decompress(byte[] data, int offset, int length) throws IOException {\n    ArrayList<byte[]> output = new ArrayList<>();\n    int totalOutputSize = 0;\n    DecoderJNI.Wrapper decoder = new DecoderJNI.Wrapper(length);\n    try {\n      decoder.getInputBuffer().put(data, offset, length);\n      decoder.push(length);\n      while (decoder.getStatus() != DecoderJNI.Status.DONE) {\n        switch (decoder.getStatus()) {\n          case OK:\n            decoder.push(0);\n            break;\n\n          case NEEDS_MORE_OUTPUT:\n            ByteBuffer buffer = decoder.pull();\n            byte[] chunk = new byte[buffer.remaining()];\n            buffer.get(chunk);\n            output.add(chunk);\n            totalOutputSize += chunk.length;\n            break;\n\n          case NEEDS_MORE_INPUT:\n            // Give decoder a chance to process the remaining of the buffered byte.\n            decoder.push(0);\n            // If decoder still needs input, this means that stream is truncated.\n            if (decoder.getStatus() == DecoderJNI.Status.NEEDS_MORE_INPUT) {\n              throw new IOException(\"corrupted input\");\n            }\n            break;\n\n          default:\n            throw new IOException(\"corrupted input\");\n        }\n      }\n    } finally {\n      decoder.destroy();\n    }\n    if (output.size() == 1) {\n      return output.get(0);\n    }\n    byte[] result = new byte[totalOutputSize];\n    int resultOffset = 0;\n    for (byte[] chunk : output) {\n      System.arraycopy(chunk, 0, result, resultOffset, chunk.length);\n      resultOffset += chunk.length;\n    }\n    return result;\n  }\n\n  /** Decodes the given data buffer. */\n  public static byte[] decompress(byte[] data) throws IOException {\n    return decompress(data, 0, data.length);\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/dec/DecoderJNI.java",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.wrapper.dec;\n\nimport java.io.IOException;\nimport java.nio.ByteBuffer;\n\n/**\n * JNI wrapper for brotli decoder.\n */\npublic class DecoderJNI {\n  private static native ByteBuffer nativeCreate(long[] context);\n  private static native void nativePush(long[] context, int length);\n  private static native ByteBuffer nativePull(long[] context);\n  private static native void nativeDestroy(long[] context);\n  private static native boolean nativeAttachDictionary(long[] context, ByteBuffer dictionary);\n\n  public enum Status {\n    ERROR,\n    DONE,\n    NEEDS_MORE_INPUT,\n    NEEDS_MORE_OUTPUT,\n    OK\n  };\n\n  public static class Wrapper {\n    private final long[] context = new long[3];\n    private final ByteBuffer inputBuffer;\n    private Status lastStatus = Status.NEEDS_MORE_INPUT;\n    private boolean fresh = true;\n\n    public Wrapper(int inputBufferSize) throws IOException {\n      this.context[1] = inputBufferSize;\n      this.inputBuffer = nativeCreate(this.context);\n      if (this.context[0] == 0) {\n        throw new IOException(\"failed to initialize native brotli decoder\");\n      }\n    }\n\n    public boolean attachDictionary(ByteBuffer dictionary) {\n      if (!dictionary.isDirect()) {\n        throw new IllegalArgumentException(\"only direct buffers allowed\");\n      }\n      if (context[0] == 0) {\n        throw new IllegalStateException(\"brotli decoder is already destroyed\");\n      }\n      if (!fresh) {\n        throw new IllegalStateException(\"decoding is already started\");\n      }\n      return nativeAttachDictionary(context, dictionary);\n    }\n\n    public void push(int length) {\n      if (length < 0) {\n        throw new IllegalArgumentException(\"negative block length\");\n      }\n      if (context[0] == 0) {\n        throw new IllegalStateException(\"brotli decoder is already destroyed\");\n      }\n      if (lastStatus != Status.NEEDS_MORE_INPUT && lastStatus != Status.OK) {\n        throw new IllegalStateException(\"pushing input to decoder in \" + lastStatus + \" state\");\n      }\n      if (lastStatus == Status.OK && length != 0) {\n        throw new IllegalStateException(\"pushing input to decoder in OK state\");\n      }\n      fresh = false;\n      nativePush(context, length);\n      parseStatus();\n    }\n\n    private void parseStatus() {\n      long status = context[1];\n      if (status == 1) {\n        lastStatus = Status.DONE;\n      } else if (status == 2) {\n        lastStatus = Status.NEEDS_MORE_INPUT;\n      } else if (status == 3) {\n        lastStatus = Status.NEEDS_MORE_OUTPUT;\n      } else if (status == 4) {\n        lastStatus = Status.OK;\n      } else {\n        lastStatus = Status.ERROR;\n      }\n    }\n\n    public Status getStatus() {\n      return lastStatus;\n    }\n\n    public ByteBuffer getInputBuffer() {\n      return inputBuffer;\n    }\n\n    public boolean hasOutput() {\n      return context[2] != 0;\n    }\n\n    public ByteBuffer pull() {\n      if (context[0] == 0) {\n        throw new IllegalStateException(\"brotli decoder is already destroyed\");\n      }\n      if (lastStatus != Status.NEEDS_MORE_OUTPUT && !hasOutput()) {\n        throw new IllegalStateException(\"pulling output from decoder in \" + lastStatus + \" state\");\n      }\n      fresh = false;\n      ByteBuffer result = nativePull(context);\n      parseStatus();\n      return result;\n    }\n\n    /**\n     * Releases native resources.\n     */\n    public void destroy() {\n      if (context[0] == 0) {\n        throw new IllegalStateException(\"brotli decoder is already destroyed\");\n      }\n      nativeDestroy(context);\n      context[0] = 0;\n    }\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/dec/DecoderTest.java",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.wrapper.dec;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.brotli.integration.BrotliJniTestBase;\nimport org.brotli.integration.BundleHelper;\nimport java.io.ByteArrayInputStream;\nimport java.io.FileInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.List;\nimport junit.framework.TestCase;\nimport junit.framework.TestSuite;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.AllTests;\n\n/** Tests for {@link org.brotli.wrapper.dec.Decoder}. */\n@RunWith(AllTests.class)\npublic class DecoderTest extends BrotliJniTestBase {\n\n  static InputStream getBundle() throws IOException {\n    return new FileInputStream(System.getProperty(\"TEST_BUNDLE\"));\n  }\n\n  /** Creates a test suite. */\n  public static TestSuite suite() throws IOException {\n    TestSuite suite = new TestSuite();\n    InputStream bundle = getBundle();\n    try {\n      List<String> entries = BundleHelper.listEntries(bundle);\n      for (String entry : entries) {\n        suite.addTest(new DecoderTestCase(entry));\n      }\n    } finally {\n      bundle.close();\n    }\n    return suite;\n  }\n\n  /** Test case with a unique name. */\n  static class DecoderTestCase extends TestCase {\n    final String entryName;\n    DecoderTestCase(String entryName) {\n      super(\"DecoderTest.\" + entryName);\n      this.entryName = entryName;\n    }\n\n    @Override\n    protected void runTest() throws Throwable {\n      DecoderTest.run(entryName);\n    }\n  }\n\n  private static void run(String entryName) throws Throwable {\n    InputStream bundle = getBundle();\n    byte[] compressed;\n    try {\n      compressed = BundleHelper.readEntry(bundle, entryName);\n    } finally {\n      bundle.close();\n    }\n    if (compressed == null) {\n      throw new RuntimeException(\"Can't read bundle entry: \" + entryName);\n    }\n\n    byte[] decompressed = Decoder.decompress(compressed);\n\n    long crc = BundleHelper.fingerprintStream(new ByteArrayInputStream(decompressed));\n    assertEquals(BundleHelper.getExpectedFingerprint(entryName), crc);\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/dec/EagerStreamTest.java",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.wrapper.dec;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.brotli.integration.BrotliJniTestBase;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.JUnit4;\n\n/** Tests for {@link org.brotli.wrapper.dec.BrotliInputStream}. */\n@RunWith(JUnit4.class)\npublic class EagerStreamTest extends BrotliJniTestBase {\n\n  @Test\n  public void testEagerReading() throws IOException {\n    final StringBuilder log = new StringBuilder();\n    final byte[] data = {0, 0, 16, 42, 3};\n    InputStream source = new InputStream() {\n      int index;\n\n      @Override\n      public int read() {\n        if (index < data.length) {\n          log.append(\"<\").append(index);\n          return data[index++];\n        } else {\n          log.append(\"<#\");\n          return -1;\n        }\n      }\n\n      @Override\n      public int read(byte[] b) throws IOException {\n        return read(b, 0, b.length);\n      }\n\n      @Override\n      public int read(byte[] b, int off, int len) throws IOException {\n        if (len < 1) {\n          return 0;\n        }\n        int d = read();\n        if (d == -1) {\n          return 0;\n        }\n        b[off] = (byte) d;\n        return 1;\n      }\n    };\n    BrotliInputStream reader = new BrotliInputStream(source);\n    reader.enableEagerOutput();\n    int count = 0;\n    while (true) {\n      log.append(\"^\").append(count);\n      int b = reader.read();\n      if (b == -1) {\n        log.append(\">#\");\n        break;\n      } else {\n        log.append(\">\").append(count++);\n      }\n    }\n    // Lazy log:  ^0<0<1<2<3<4>0^1>#\n    assertEquals(\"^0<0<1<2<3>0^1<4>#\", log.toString());\n  }\n\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/dec/decoder_jni.cc",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"decoder_jni.h\"  // NOLINT: build/include\n\n#include <jni.h>\n\n#include <cstddef>\n#include <cstdint>\n#include <new>\n\n#include <brotli/decode.h>\n#include <brotli/shared_dictionary.h>\n\nnamespace {\n/* A structure used to persist the decoder's state in between calls. */\ntypedef struct DecoderHandle {\n  BrotliDecoderState* state;\n\n  jobject dictionary_refs[15];\n  size_t dictionary_count;\n\n  uint8_t* input_start;\n  size_t input_offset;\n  size_t input_length;\n} DecoderHandle;\n\n/* Obtain handle from opaque pointer. */\nDecoderHandle* getHandle(void* opaque) {\n  return static_cast<DecoderHandle*>(opaque);\n}\n\n}  /* namespace */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**\n * Creates a new Decoder.\n *\n * Cookie to address created decoder is stored in out_cookie. In case of failure\n * cookie is 0.\n *\n * @param ctx {out_cookie, in_directBufferSize} tuple\n * @returns direct ByteBuffer if directBufferSize is not 0; otherwise null\n */\nJNIEXPORT jobject JNICALL Java_org_brotli_wrapper_dec_DecoderJNI_nativeCreate(\n    JNIEnv* env, jobject /*jobj*/, jlongArray ctx) {\n  bool ok = true;\n  DecoderHandle* handle = nullptr;\n  jlong context[3];\n  env->functions->GetLongArrayRegion(env, ctx, 0, 3, context);\n  size_t input_size = context[1];\n  context[0] = 0;\n  context[2] = 0;\n  handle = new (std::nothrow) DecoderHandle();\n  ok = !!handle;\n\n  if (ok) {\n    for (int i = 0; i < 15; ++i) {\n      handle->dictionary_refs[i] = nullptr;\n    }\n    handle->dictionary_count = 0;\n    handle->input_offset = 0;\n    handle->input_length = 0;\n    handle->input_start = nullptr;\n\n    if (input_size == 0) {\n      ok = false;\n    } else {\n      handle->input_start = new (std::nothrow) uint8_t[input_size];\n      ok = !!handle->input_start;\n    }\n  }\n\n  if (ok) {\n    handle->state = BrotliDecoderCreateInstance(nullptr, nullptr, nullptr);\n    ok = !!handle->state;\n  }\n\n  if (ok) {\n    /* TODO(eustas): future versions (e.g. when 128-bit architecture comes)\n                     might require thread-safe cookie<->handle mapping. */\n    context[0] = reinterpret_cast<jlong>(handle);\n  } else if (!!handle) {\n    if (!!handle->input_start) delete[] handle->input_start;\n    delete handle;\n  }\n\n  env->functions->SetLongArrayRegion(env, ctx, 0, 3, context);\n\n  if (!ok) {\n    return nullptr;\n  }\n\n  return env->functions->NewDirectByteBuffer(env, handle->input_start,\n                                             input_size);\n}\n\n/**\n * Push data to decoder.\n *\n * status codes:\n *  - 0 error happened\n *  - 1 stream is finished, no more input / output expected\n *  - 2 needs more input to process further\n *  - 3 needs more output to process further\n *  - 4 ok, can proceed further without additional input\n *\n * @param ctx {in_cookie, out_status} tuple\n * @param input_length number of bytes provided in input or direct input;\n *                     0 to process further previous input\n */\nJNIEXPORT void JNICALL Java_org_brotli_wrapper_dec_DecoderJNI_nativePush(\n    JNIEnv* env, jobject /*jobj*/, jlongArray ctx, jint input_length) {\n  jlong context[3];\n  env->functions->GetLongArrayRegion(env, ctx, 0, 3, context);\n  DecoderHandle* handle = getHandle(reinterpret_cast<void*>(context[0]));\n  context[1] = 0;  /* ERROR */\n  context[2] = 0;\n  env->functions->SetLongArrayRegion(env, ctx, 0, 3, context);\n\n  if (input_length != 0) {\n    /* Still have unconsumed data. Workflow is broken. */\n    if (handle->input_offset < handle->input_length) {\n      return;\n    }\n    handle->input_offset = 0;\n    handle->input_length = input_length;\n  }\n\n  /* Actual decompression. */\n  const uint8_t* in = handle->input_start + handle->input_offset;\n  size_t in_size = handle->input_length - handle->input_offset;\n  size_t out_size = 0;\n  BrotliDecoderResult status = BrotliDecoderDecompressStream(\n      handle->state, &in_size, &in, &out_size, nullptr, nullptr);\n  handle->input_offset = handle->input_length - in_size;\n  switch (status) {\n    case BROTLI_DECODER_RESULT_SUCCESS:\n      /* Bytes after stream end are not allowed. */\n      context[1] = (handle->input_offset == handle->input_length) ? 1 : 0;\n      break;\n\n    case BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:\n      context[1] = 2;\n      break;\n\n    case BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:\n      context[1] = 3;\n      break;\n\n    default:\n      context[1] = 0;\n      break;\n  }\n  context[2] = BrotliDecoderHasMoreOutput(handle->state) ? 1 : 0;\n  env->functions->SetLongArrayRegion(env, ctx, 0, 3, context);\n}\n\n/**\n * Pull decompressed data from decoder.\n *\n * @param ctx {in_cookie, out_status} tuple\n * @returns direct ByteBuffer; all the produced data MUST be consumed before\n *          any further invocation; null in case of error\n */\nJNIEXPORT jobject JNICALL Java_org_brotli_wrapper_dec_DecoderJNI_nativePull(\n    JNIEnv* env, jobject /*jobj*/, jlongArray ctx) {\n  jlong context[3];\n  env->functions->GetLongArrayRegion(env, ctx, 0, 3, context);\n  DecoderHandle* handle = getHandle(reinterpret_cast<void*>(context[0]));\n  size_t data_length = 0;\n  const uint8_t* data = BrotliDecoderTakeOutput(handle->state, &data_length);\n  bool hasMoreOutput = !!BrotliDecoderHasMoreOutput(handle->state);\n  if (hasMoreOutput) {\n    context[1] = 3;\n  } else if (BrotliDecoderIsFinished(handle->state)) {\n    /* Bytes after stream end are not allowed. */\n    context[1] = (handle->input_offset == handle->input_length) ? 1 : 0;\n  } else {\n    /* Can proceed, or more data is required? */\n    context[1] = (handle->input_offset == handle->input_length) ? 2 : 4;\n  }\n  context[2] = hasMoreOutput ? 1 : 0;\n  env->functions->SetLongArrayRegion(env, ctx, 0, 3, context);\n  return env->functions->NewDirectByteBuffer(env, const_cast<uint8_t*>(data),\n                                             data_length);\n}\n\n/**\n * Releases all used resources.\n *\n * @param ctx {in_cookie} tuple\n */\nJNIEXPORT void JNICALL Java_org_brotli_wrapper_dec_DecoderJNI_nativeDestroy(\n    JNIEnv* env, jobject /*jobj*/, jlongArray ctx) {\n  jlong context[3];\n  env->functions->GetLongArrayRegion(env, ctx, 0, 3, context);\n  DecoderHandle* handle = getHandle(reinterpret_cast<void*>(context[0]));\n  BrotliDecoderDestroyInstance(handle->state);\n  for (size_t i = 0; i < handle->dictionary_count; ++i) {\n    env->functions->DeleteGlobalRef(env, handle->dictionary_refs[i]);\n  }\n  delete[] handle->input_start;\n  delete handle;\n}\n\nJNIEXPORT jboolean JNICALL\nJava_org_brotli_wrapper_dec_DecoderJNI_nativeAttachDictionary(\n    JNIEnv* env, jobject /*jobj*/, jlongArray ctx, jobject dictionary) {\n  jlong context[3];\n  env->functions->GetLongArrayRegion(env, ctx, 0, 3, context);\n  DecoderHandle* handle = getHandle(reinterpret_cast<void*>(context[0]));\n  jobject ref = nullptr;\n  uint8_t* address = nullptr;\n  jlong capacity = 0;\n\n  bool ok = true;\n  if (ok && !dictionary) {\n    ok = false;\n  }\n  if (ok && handle->dictionary_count >= 15) {\n    ok = false;\n  }\n  if (ok) {\n    ref = env->functions->NewGlobalRef(env, dictionary);\n    ok = !!ref;\n  }\n  if (ok) {\n    handle->dictionary_refs[handle->dictionary_count] = ref;\n    handle->dictionary_count++;\n    address = static_cast<uint8_t*>(\n        env->functions->GetDirectBufferAddress(env, ref));\n    ok = !!address;\n  }\n  if (ok) {\n    capacity = env->functions->GetDirectBufferCapacity(env, ref);\n    ok = (capacity > 0) && (capacity < (1 << 30));\n  }\n  if (ok) {\n    size_t size = static_cast<size_t>(capacity);\n    ok = !!BrotliDecoderAttachDictionary(\n        handle->state, BROTLI_SHARED_DICTIONARY_RAW, size, address);\n  }\n\n  return static_cast<jboolean>(ok);\n}\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "java/org/brotli/wrapper/dec/decoder_jni.h",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#ifndef BROTLI_WRAPPER_DEC_DECODER_JNI_H_\n#define BROTLI_WRAPPER_DEC_DECODER_JNI_H_\n\n#include <jni.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**\n * Creates a new Decoder.\n *\n * Cookie to address created decoder is stored in out_cookie. In case of failure\n * cookie is 0.\n *\n * @param ctx {out_cookie, in_directBufferSize} tuple\n * @returns direct ByteBuffer if directBufferSize is not 0; otherwise null\n */\nJNIEXPORT jobject JNICALL\nJava_org_brotli_wrapper_dec_DecoderJNI_nativeCreate(\n    JNIEnv* env, jobject /*jobj*/, jlongArray ctx);\n\n/**\n * Push data to decoder.\n *\n * status codes:\n *  - 0 error happened\n *  - 1 stream is finished, no more input / output expected\n *  - 2 needs more input to process further\n *  - 3 needs more output to process further\n *  - 4 ok, can proceed further without additional input\n *\n * @param ctx {in_cookie, out_status} tuple\n * @param input_length number of bytes provided in input or direct input;\n *                     0 to process further previous input\n */\nJNIEXPORT void JNICALL\nJava_org_brotli_wrapper_dec_DecoderJNI_nativePush(\n    JNIEnv* env, jobject /*jobj*/, jlongArray ctx, jint input_length);\n\n/**\n * Pull decompressed data from decoder.\n *\n * @param ctx {in_cookie, out_status} tuple\n * @returns direct ByteBuffer; all the produced data MUST be consumed before\n *          any further invocation; null in case of error\n */\nJNIEXPORT jobject JNICALL\nJava_org_brotli_wrapper_dec_DecoderJNI_nativePull(\n    JNIEnv* env, jobject /*jobj*/, jlongArray ctx);\n\n/**\n * Releases all used resources.\n *\n * @param ctx {in_cookie} tuple\n */\nJNIEXPORT void JNICALL\nJava_org_brotli_wrapper_dec_DecoderJNI_nativeDestroy(\n    JNIEnv* env, jobject /*jobj*/, jlongArray ctx);\n\nJNIEXPORT jboolean JNICALL\nJava_org_brotli_wrapper_dec_DecoderJNI_nativeAttachDictionary(\n    JNIEnv* env, jobject /*jobj*/, jlongArray ctx, jobject dictionary);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif  // BROTLI_WRAPPER_DEC_DECODER_JNI_H_\n"
  },
  {
    "path": "java/org/brotli/wrapper/dec/decoder_jni_onload.cc",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include <jni.h>\n\n#include \"decoder_jni.h\"   // NOLINT: build/include\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nstatic const JNINativeMethod kDecoderMethods[] = {\n    {\"nativeCreate\", \"([J)Ljava/nio/ByteBuffer;\",\n     reinterpret_cast<void*>(\n         Java_org_brotli_wrapper_dec_DecoderJNI_nativeCreate)},\n    {\"nativePush\", \"([JI)V\",\n     reinterpret_cast<void*>(\n         Java_org_brotli_wrapper_dec_DecoderJNI_nativePush)},\n    {\"nativePull\", \"([J)Ljava/nio/ByteBuffer;\",\n     reinterpret_cast<void*>(\n         Java_org_brotli_wrapper_dec_DecoderJNI_nativePull)},\n    {\"nativeDestroy\", \"([J)V\",\n     reinterpret_cast<void*>(\n         Java_org_brotli_wrapper_dec_DecoderJNI_nativeDestroy)},\n    {\"nativeAttachDictionary\", \"([JLjava/nio/ByteBuffer;)Z\",\n     reinterpret_cast<void*>(\n         Java_org_brotli_wrapper_dec_DecoderJNI_nativeAttachDictionary)}};\n\nJNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {\n  JNIEnv* env;\n  if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {\n    return -1;\n  }\n\n  jclass clazz =\n      env->FindClass(\"org/brotli/wrapper/dec/DecoderJNI\");\n  if (clazz == nullptr) {\n    return -1;\n  }\n\n  if (env->RegisterNatives(\n          clazz, kDecoderMethods,\n          sizeof(kDecoderMethods) / sizeof(kDecoderMethods[0])) < 0) {\n    return -1;\n  }\n\n  return JNI_VERSION_1_6;\n}\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "java/org/brotli/wrapper/enc/BUILD.bazel",
    "content": "load(\"@rules_java//java:java_library.bzl\", \"java_library\")\nload(\"@rules_java//java:java_test.bzl\", \"java_test\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nlicenses([\"notice\"])  # MIT\n\nfilegroup(\n    name = \"jni_src\",\n    srcs = [\"encoder_jni.cc\"],\n)\n\nfilegroup(\n    name = \"brotli_jni\",\n    srcs = [\"//:brotli_jni.dll\"],\n)\n\njava_library(\n    name = \"enc\",\n    srcs = glob(\n        [\"*.java\"],\n        exclude = [\"*Test*.java\"],\n    ),\n    resources = [\"//:license\"],\n    deps = [\n        \"//org/brotli/common:shared_dictionary\",\n        \"//org/brotli/enc:prepared_dictionary\",\n    ],\n)\n\njava_library(\n    name = \"test_lib\",\n    testonly = 1,\n    srcs = glob([\"*Test*.java\"]),\n    deps = [\n        \":enc\",\n        \"//org/brotli/common:shared_dictionary\",\n        \"//org/brotli/enc:prepared_dictionary\",\n        \"//org/brotli/integration:brotli_jni_test_base\",\n        \"//org/brotli/integration:bundle_helper\",\n        \"//org/brotli/wrapper/common\",\n        \"//org/brotli/wrapper/dec\",\n        \"@bazel_tools//tools/jdk:TestRunner\",\n    ],\n)\n\nfilegroup(\n    name = \"test_bundle\",\n    srcs = [\"//org/brotli/integration:test_corpus\"],\n)\n\njava_test(\n    name = \"BrotliEncoderChannelTest\",\n    size = \"large\",\n    data = [\n        \":brotli_jni\",  # Bazel JNI workaround\n        \":test_bundle\",\n    ],\n    jvm_flags = [\n        \"-DBROTLI_JNI_LIBRARY=$(location :brotli_jni)\",\n        \"-DTEST_BUNDLE=$(location :test_bundle)\",\n    ],\n    shard_count = 15,\n    test_class = \"org.brotli.wrapper.enc.BrotliEncoderChannelTest\",\n    runtime_deps = [\":test_lib\"],\n)\n\njava_test(\n    name = \"BrotliOutputStreamTest\",\n    size = \"large\",\n    data = [\n        \":brotli_jni\",  # Bazel JNI workaround\n        \":test_bundle\",\n    ],\n    jvm_flags = [\n        \"-DBROTLI_JNI_LIBRARY=$(location :brotli_jni)\",\n        \"-DTEST_BUNDLE=$(location :test_bundle)\",\n    ],\n    shard_count = 15,\n    test_class = \"org.brotli.wrapper.enc.BrotliOutputStreamTest\",\n    runtime_deps = [\":test_lib\"],\n)\n\njava_test(\n    name = \"EncoderTest\",\n    size = \"large\",\n    data = [\n        \":brotli_jni\",  # Bazel JNI workaround\n        \":test_bundle\",\n    ],\n    jvm_flags = [\n        \"-DBROTLI_JNI_LIBRARY=$(location :brotli_jni)\",\n        \"-DTEST_BUNDLE=$(location :test_bundle)\",\n    ],\n    shard_count = 15,\n    test_class = \"org.brotli.wrapper.enc.EncoderTest\",\n    runtime_deps = [\":test_lib\"],\n)\n"
  },
  {
    "path": "java/org/brotli/wrapper/enc/BrotliEncoderChannel.java",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.wrapper.enc;\n\nimport org.brotli.enc.PreparedDictionary;\nimport java.io.IOException;\nimport java.nio.Buffer;\nimport java.nio.ByteBuffer;\nimport java.nio.channels.ClosedChannelException;\nimport java.nio.channels.WritableByteChannel;\n\n/**\n * WritableByteChannel that wraps native brotli encoder.\n */\npublic class BrotliEncoderChannel extends Encoder implements WritableByteChannel {\n  /** The default internal buffer size used by the decoder. */\n  private static final int DEFAULT_BUFFER_SIZE = 16384;\n\n  private final Object mutex = new Object();\n\n  /**\n   * Creates a BrotliEncoderChannel.\n   *\n   * @param destination underlying destination\n   * @param params encoding settings\n   * @param bufferSize intermediate buffer size\n   */\n  public BrotliEncoderChannel(WritableByteChannel destination, Encoder.Parameters params,\n      int bufferSize) throws IOException {\n    super(destination, params, bufferSize);\n  }\n\n  public BrotliEncoderChannel(WritableByteChannel destination, Encoder.Parameters params)\n      throws IOException {\n    this(destination, params, DEFAULT_BUFFER_SIZE);\n  }\n\n  public BrotliEncoderChannel(WritableByteChannel destination) throws IOException {\n    this(destination, new Encoder.Parameters());\n  }\n\n  @Override\n  public void attachDictionary(PreparedDictionary dictionary) throws IOException {\n    super.attachDictionary(dictionary);\n  }\n\n  @Override\n  public boolean isOpen() {\n    synchronized (mutex) {\n      return !closed;\n    }\n  }\n\n  @Override\n  public void close() throws IOException {\n    synchronized (mutex) {\n      super.close();\n    }\n  }\n\n  @Override\n  public int write(ByteBuffer src) throws IOException {\n    synchronized (mutex) {\n      if (closed) {\n        throw new ClosedChannelException();\n      }\n      int result = 0;\n      while (src.hasRemaining() && encode(EncoderJNI.Operation.PROCESS)) {\n        int limit = Math.min(src.remaining(), inputBuffer.remaining());\n        ByteBuffer slice = src.slice();\n        ((Buffer) slice).limit(limit);\n        inputBuffer.put(slice);\n        result += limit;\n        ((Buffer) src).position(src.position() + limit);\n      }\n      return result;\n    }\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/enc/BrotliEncoderChannelTest.java",
    "content": "package org.brotli.wrapper.enc;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.brotli.integration.BrotliJniTestBase;\nimport org.brotli.integration.BundleHelper;\nimport org.brotli.wrapper.dec.BrotliInputStream;\nimport java.io.ByteArrayInputStream;\nimport java.io.ByteArrayOutputStream;\nimport java.io.FileInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.nio.Buffer;\nimport java.nio.ByteBuffer;\nimport java.nio.channels.Channels;\nimport java.nio.channels.WritableByteChannel;\nimport java.util.List;\nimport junit.framework.TestCase;\nimport junit.framework.TestSuite;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.AllTests;\n\n/** Tests for {@link org.brotli.wrapper.enc.BrotliEncoderChannel}. */\n@RunWith(AllTests.class)\npublic class BrotliEncoderChannelTest extends BrotliJniTestBase {\n\n  private enum TestMode {\n    WRITE_ALL,\n    WRITE_CHUNKS\n  }\n\n  private static final int CHUNK_SIZE = 256;\n\n  static InputStream getBundle() throws IOException {\n    return new FileInputStream(System.getProperty(\"TEST_BUNDLE\"));\n  }\n\n  /** Creates a test suite. */\n  public static TestSuite suite() throws IOException {\n    TestSuite suite = new TestSuite();\n    InputStream bundle = getBundle();\n    try {\n      List<String> entries = BundleHelper.listEntries(bundle);\n      for (String entry : entries) {\n        suite.addTest(new ChannelTestCase(entry, TestMode.WRITE_ALL));\n        suite.addTest(new ChannelTestCase(entry, TestMode.WRITE_CHUNKS));\n      }\n    } finally {\n      bundle.close();\n    }\n    return suite;\n  }\n\n  /** Test case with a unique name. */\n  static class ChannelTestCase extends TestCase {\n    final String entryName;\n    final TestMode mode;\n    ChannelTestCase(String entryName, TestMode mode) {\n      super(\"BrotliEncoderChannelTest.\" + entryName + \".\" + mode.name());\n      this.entryName = entryName;\n      this.mode = mode;\n    }\n\n    @Override\n    protected void runTest() throws Throwable {\n      BrotliEncoderChannelTest.run(entryName, mode);\n    }\n  }\n\n  private static void run(String entryName, TestMode mode) throws Throwable {\n    InputStream bundle = getBundle();\n    byte[] original;\n    try {\n      original = BundleHelper.readEntry(bundle, entryName);\n    } finally {\n      bundle.close();\n    }\n    if (original == null) {\n      throw new RuntimeException(\"Can't read bundle entry: \" + entryName);\n    }\n\n    if ((mode == TestMode.WRITE_CHUNKS) && (original.length <= CHUNK_SIZE)) {\n      return;\n    }\n\n    ByteArrayOutputStream dst = new ByteArrayOutputStream();\n    WritableByteChannel encoder = new BrotliEncoderChannel(Channels.newChannel(dst));\n    ByteBuffer src = ByteBuffer.wrap(original);\n    try {\n      switch (mode) {\n        case WRITE_ALL:\n          encoder.write(src);\n          break;\n\n        case WRITE_CHUNKS:\n          while (src.hasRemaining()) {\n            int limit = Math.min(CHUNK_SIZE, src.remaining());\n            ByteBuffer slice = src.slice();\n            ((Buffer) slice).limit(limit);\n            ((Buffer) src).position(src.position() + limit);\n            encoder.write(slice);\n          }\n          break;\n      }\n    } finally {\n      encoder.close();\n    }\n\n    InputStream decoder = new BrotliInputStream(new ByteArrayInputStream(dst.toByteArray()));\n    try {\n      long originalCrc = BundleHelper.fingerprintStream(new ByteArrayInputStream(original));\n      long crc = BundleHelper.fingerprintStream(decoder);\n      assertEquals(originalCrc, crc);\n    } finally {\n      decoder.close();\n    }\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/enc/BrotliOutputStream.java",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.wrapper.enc;\n\nimport java.io.IOException;\nimport java.io.OutputStream;\nimport java.nio.channels.Channels;\nimport org.brotli.enc.PreparedDictionary;\n\n/**\n * Output stream that wraps native brotli encoder.\n */\npublic class BrotliOutputStream extends OutputStream {\n  /** The default internal buffer size used by the encoder. */\n  private static final int DEFAULT_BUFFER_SIZE = 16384;\n\n  private final Encoder encoder;\n\n  /**\n   * Creates a BrotliOutputStream.\n   *\n   * @param destination underlying destination\n   * @param params encoding settings\n   * @param bufferSize intermediate buffer size\n   */\n  public BrotliOutputStream(OutputStream destination, Encoder.Parameters params, int bufferSize)\n      throws IOException {\n    this.encoder = new Encoder(Channels.newChannel(destination), params, bufferSize);\n  }\n\n  public BrotliOutputStream(OutputStream destination, Encoder.Parameters params)\n      throws IOException {\n    this(destination, params, DEFAULT_BUFFER_SIZE);\n  }\n\n  public BrotliOutputStream(OutputStream destination) throws IOException {\n    this(destination, new Encoder.Parameters());\n  }\n\n  public void attachDictionary(PreparedDictionary dictionary) throws IOException {\n    encoder.attachDictionary(dictionary);\n  }\n\n  @Override\n  public void close() throws IOException {\n    encoder.close();\n  }\n\n  @Override\n  public void flush() throws IOException {\n    if (encoder.closed) {\n      throw new IOException(\"write after close\");\n    }\n    encoder.flush();\n  }\n\n  @Override\n  public void write(int b) throws IOException {\n    if (encoder.closed) {\n      throw new IOException(\"write after close\");\n    }\n    while (!encoder.encode(EncoderJNI.Operation.PROCESS)) {\n      // Busy-wait loop.\n    }\n    encoder.inputBuffer.put((byte) b);\n  }\n\n  @Override\n  public void write(byte[] b) throws IOException {\n    this.write(b, 0, b.length);\n  }\n\n  @Override\n  public void write(byte[] b, int off, int len) throws IOException {\n    if (encoder.closed) {\n      throw new IOException(\"write after close\");\n    }\n    while (len > 0) {\n      if (!encoder.encode(EncoderJNI.Operation.PROCESS)) {\n        continue;\n      }\n      int limit = Math.min(len, encoder.inputBuffer.remaining());\n      encoder.inputBuffer.put(b, off, limit);\n      off += limit;\n      len -= limit;\n    }\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/enc/BrotliOutputStreamTest.java",
    "content": "package org.brotli.wrapper.enc;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.brotli.integration.BrotliJniTestBase;\nimport org.brotli.integration.BundleHelper;\nimport org.brotli.wrapper.dec.BrotliInputStream;\nimport java.io.ByteArrayInputStream;\nimport java.io.ByteArrayOutputStream;\nimport java.io.FileInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\nimport java.util.List;\nimport junit.framework.TestCase;\nimport junit.framework.TestSuite;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.AllTests;\n\n/** Tests for {@link org.brotli.wrapper.enc.BrotliOutputStream}. */\n@RunWith(AllTests.class)\npublic class BrotliOutputStreamTest extends BrotliJniTestBase {\n\n  private enum TestMode {\n    WRITE_ALL,\n    WRITE_CHUNKS,\n    WRITE_BYTE\n  }\n\n  private static final int CHUNK_SIZE = 256;\n\n  static InputStream getBundle() throws IOException {\n    return new FileInputStream(System.getProperty(\"TEST_BUNDLE\"));\n  }\n\n  /** Creates a test suite. */\n  public static TestSuite suite() throws IOException {\n    TestSuite suite = new TestSuite();\n    InputStream bundle = getBundle();\n    try {\n      List<String> entries = BundleHelper.listEntries(bundle);\n      for (String entry : entries) {\n        suite.addTest(new StreamTestCase(entry, TestMode.WRITE_ALL));\n        suite.addTest(new StreamTestCase(entry, TestMode.WRITE_CHUNKS));\n        suite.addTest(new StreamTestCase(entry, TestMode.WRITE_BYTE));\n      }\n    } finally {\n      bundle.close();\n    }\n    return suite;\n  }\n\n  /** Test case with a unique name. */\n  static class StreamTestCase extends TestCase {\n    final String entryName;\n    final TestMode mode;\n    StreamTestCase(String entryName, TestMode mode) {\n      super(\"BrotliOutputStreamTest.\" + entryName + \".\" + mode.name());\n      this.entryName = entryName;\n      this.mode = mode;\n    }\n\n    @Override\n    protected void runTest() throws Throwable {\n      BrotliOutputStreamTest.run(entryName, mode);\n    }\n  }\n\n  private static void run(String entryName, TestMode mode) throws Throwable {\n    InputStream bundle = getBundle();\n    byte[] original;\n    try {\n      original = BundleHelper.readEntry(bundle, entryName);\n    } finally {\n      bundle.close();\n    }\n    if (original == null) {\n      throw new RuntimeException(\"Can't read bundle entry: \" + entryName);\n    }\n\n    if ((mode == TestMode.WRITE_CHUNKS) && (original.length <= CHUNK_SIZE)) {\n      return;\n    }\n\n    ByteArrayOutputStream dst = new ByteArrayOutputStream();\n    OutputStream encoder = new BrotliOutputStream(dst);\n    try {\n      switch (mode) {\n        case WRITE_ALL:\n          encoder.write(original);\n          break;\n\n        case WRITE_CHUNKS:\n          for (int offset = 0; offset < original.length; offset += CHUNK_SIZE) {\n            encoder.write(original, offset, Math.min(CHUNK_SIZE, original.length - offset));\n          }\n          break;\n\n        case WRITE_BYTE:\n          for (byte singleByte : original) {\n            encoder.write(singleByte);\n          }\n          break;\n      }\n    } finally {\n      encoder.close();\n    }\n\n    InputStream decoder = new BrotliInputStream(new ByteArrayInputStream(dst.toByteArray()));\n    try {\n      long originalCrc = BundleHelper.fingerprintStream(new ByteArrayInputStream(original));\n      long crc = BundleHelper.fingerprintStream(decoder);\n      assertEquals(originalCrc, crc);\n    } finally {\n      decoder.close();\n    }\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/enc/EmptyInputTest.java",
    "content": "/* Copyright 2018 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.wrapper.enc;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.brotli.integration.BrotliJniTestBase;\nimport org.brotli.wrapper.dec.Decoder;\nimport java.io.IOException;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.JUnit4;\n\n/** Tests for {@link org.brotli.wrapper.enc.Encoder}. */\n@RunWith(JUnit4.class)\npublic class EmptyInputTest extends BrotliJniTestBase {\n  @Test\n  public void testEmptyInput() throws IOException {\n    byte[] data = new byte[0];\n    byte[] encoded = Encoder.compress(data);\n    assertEquals(1, encoded.length);\n    byte[] decoded = Decoder.decompress(encoded);\n    assertEquals(0, decoded.length);\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/enc/Encoder.java",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.wrapper.enc;\n\nimport java.io.IOException;\nimport java.nio.Buffer;\nimport java.nio.ByteBuffer;\nimport java.nio.channels.WritableByteChannel;\nimport java.util.ArrayList;\nimport java.util.List;\nimport org.brotli.enc.PreparedDictionary;\n\n/**\n * Base class for OutputStream / Channel implementations.\n */\npublic class Encoder implements AutoCloseable {\n  private final WritableByteChannel destination;\n  private final List<PreparedDictionary> dictionaries;\n  private final EncoderJNI.Wrapper encoder;\n  private ByteBuffer buffer;\n  final ByteBuffer inputBuffer;\n  boolean closed;\n\n  /**\n   * https://www.brotli.org/encode.html#aa6f\n   * See encode.h, typedef enum BrotliEncoderMode\n   *\n   * <strong>Important</strong>: The ordinal value of the\n   * modes should be the same as the constant values in encode.h\n   */\n  public enum Mode {\n    /**\n     * Default compression mode.\n     * In this mode compressor does not know anything in advance about the properties of the input.\n     */\n    GENERIC,\n    /**\n     * Compression mode for UTF-8 formatted text input.\n     */\n    TEXT,\n    /**\n     * Compression mode used in WOFF 2.0.\n     */\n    FONT;\n\n    // see: https://www.gamlor.info/wordpress/2017/08/javas-enum-values-hidden-allocations/\n    private static final Mode[] ALL_VALUES = values();\n\n    public static Mode of(int value) {\n      return ALL_VALUES[value];\n    }\n  }\n\n  /**\n   * Brotli encoder settings.\n   */\n  public static final class Parameters {\n    private int quality = -1;\n    private int lgwin = -1;\n    private Mode mode;\n\n    public Parameters() { }\n\n    /**\n     * Setup encoder quality.\n     *\n     * @param quality compression quality, or -1 for default\n     */\n    public Parameters setQuality(int quality) {\n      if (quality < -1 || quality > 11) {\n        throw new IllegalArgumentException(\"quality should be in range [0, 11], or -1\");\n      }\n      this.quality = quality;\n      return this;\n    }\n\n    /**\n     * Setup encoder window size.\n     *\n     * @param lgwin log2(LZ window size), or -1 for default\n     */\n    public Parameters setWindow(int lgwin) {\n      if ((lgwin != -1) && ((lgwin < 10) || (lgwin > 24))) {\n        throw new IllegalArgumentException(\"lgwin should be in range [10, 24], or -1\");\n      }\n      this.lgwin = lgwin;\n      return this;\n    }\n\n    /**\n     * Setup encoder compression mode.\n     *\n     * @param mode compression mode, or {@code null} for default\n     */\n    public Parameters setMode(Mode mode) {\n      this.mode = mode;\n      return this;\n    }\n  }\n\n  /**\n   * Creates a Encoder wrapper.\n   *\n   * @param destination underlying destination\n   * @param params encoding parameters\n   * @param inputBufferSize read buffer size\n   */\n  Encoder(WritableByteChannel destination, Parameters params, int inputBufferSize)\n      throws IOException {\n    if (inputBufferSize <= 0) {\n      throw new IllegalArgumentException(\"buffer size must be positive\");\n    }\n    if (destination == null) {\n      throw new NullPointerException(\"destination can not be null\");\n    }\n    this.dictionaries = new ArrayList<PreparedDictionary>();\n    this.destination = destination;\n    this.encoder =\n        new EncoderJNI.Wrapper(inputBufferSize, params.quality, params.lgwin, params.mode);\n    this.inputBuffer = this.encoder.getInputBuffer();\n  }\n\n  private void fail(String message) throws IOException {\n    try {\n      close();\n    } catch (IOException ex) {\n      /* Ignore */\n    }\n    throw new IOException(message);\n  }\n\n  public void attachDictionary(PreparedDictionary dictionary) throws IOException {\n    if (!encoder.attachDictionary(dictionary.getData())) {\n      fail(\"failed to attach dictionary\");\n    }\n    // Reference to native prepared dictionary wrapper should be held till the end of encoding.\n    dictionaries.add(dictionary);\n  }\n\n  /**\n   * @param force repeat pushing until all output is consumed\n   * @return true if all encoder output is consumed\n   */\n  boolean pushOutput(boolean force) throws IOException {\n    while (buffer != null) {\n      if (buffer.hasRemaining()) {\n        destination.write(buffer);\n      }\n      if (!buffer.hasRemaining()) {\n        buffer = null;\n      } else if (!force) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * @return true if there is space in inputBuffer.\n   */\n  boolean encode(EncoderJNI.Operation op) throws IOException {\n    boolean force = (op != EncoderJNI.Operation.PROCESS);\n    if (force) {\n      ((Buffer) inputBuffer).limit(inputBuffer.position());\n    } else if (inputBuffer.hasRemaining()) {\n      return true;\n    }\n    boolean hasInput = true;\n    while (true) {\n      if (!encoder.isSuccess()) {\n        fail(\"encoding failed\");\n      } else if (!pushOutput(force)) {\n        return false;\n      } else if (encoder.hasMoreOutput()) {\n        buffer = encoder.pull();\n      } else if (encoder.hasRemainingInput()) {\n        encoder.push(op, 0);\n      } else if (hasInput) {\n        encoder.push(op, inputBuffer.limit());\n        hasInput = false;\n      } else {\n        ((Buffer) inputBuffer).clear();\n        return true;\n      }\n    }\n  }\n\n  void flush() throws IOException {\n    encode(EncoderJNI.Operation.FLUSH);\n  }\n\n  @Override\n  public void close() throws IOException {\n    if (closed) {\n      return;\n    }\n    closed = true;\n    try {\n      encode(EncoderJNI.Operation.FINISH);\n    } finally {\n      encoder.destroy();\n      destination.close();\n    }\n  }\n\n  /** Encodes the given data buffer. */\n  public static byte[] compress(byte[] data, int offset, int length, Parameters params)\n      throws IOException {\n    if (length == 0) {\n      byte[] empty = new byte[1];\n      empty[0] = 6;\n      return empty;\n    }\n    /* data.length > 0 */\n    ArrayList<byte[]> output = new ArrayList<>();\n    int totalOutputSize = 0;\n    EncoderJNI.Wrapper encoder =\n        new EncoderJNI.Wrapper(length, params.quality, params.lgwin, params.mode);\n    try {\n      encoder.getInputBuffer().put(data, offset, length);\n      encoder.push(EncoderJNI.Operation.FINISH, length);\n      while (true) {\n        if (!encoder.isSuccess()) {\n          throw new IOException(\"encoding failed\");\n        } else if (encoder.hasMoreOutput()) {\n          ByteBuffer buffer = encoder.pull();\n          byte[] chunk = new byte[buffer.remaining()];\n          buffer.get(chunk);\n          output.add(chunk);\n          totalOutputSize += chunk.length;\n        } else if (!encoder.isFinished()) {\n          encoder.push(EncoderJNI.Operation.FINISH, 0);\n        } else {\n          break;\n        }\n      }\n    } finally {\n      encoder.destroy();\n    }\n    if (output.size() == 1) {\n      return output.get(0);\n    }\n    byte[] result = new byte[totalOutputSize];\n    int resultOffset = 0;\n    for (byte[] chunk : output) {\n      System.arraycopy(chunk, 0, result, resultOffset, chunk.length);\n      resultOffset += chunk.length;\n    }\n    return result;\n  }\n\n  /** Encodes the given data buffer. */\n  public static byte[] compress(byte[] data, Parameters params) throws IOException {\n    return compress(data, 0, data.length, params);\n  }\n\n  public static byte[] compress(byte[] data) throws IOException {\n    return compress(data, new Parameters());\n  }\n\n  public static byte[] compress(byte[] data, int offset, int length) throws IOException {\n    return compress(data, offset, length, new Parameters());\n  }\n\n  /**\n   * Prepares raw or serialized dictionary for being used by encoder.\n   *\n   * @param dictionary raw / serialized dictionary data; MUST be direct\n   * @param sharedDictionaryType dictionary data type\n   */\n  public static PreparedDictionary prepareDictionary(ByteBuffer dictionary,\n      int sharedDictionaryType) {\n    return EncoderJNI.prepareDictionary(dictionary, sharedDictionaryType);\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/enc/EncoderJNI.java",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\npackage org.brotli.wrapper.enc;\n\nimport java.io.IOException;\nimport java.nio.ByteBuffer;\nimport org.brotli.enc.PreparedDictionary;\n\n/**\n * JNI wrapper for brotli encoder.\n */\nclass EncoderJNI {\n  private static native ByteBuffer nativeCreate(long[] context);\n  private static native void nativePush(long[] context, int length);\n  private static native ByteBuffer nativePull(long[] context);\n  private static native void nativeDestroy(long[] context);\n  private static native boolean nativeAttachDictionary(long[] context, ByteBuffer dictionary);\n  private static native ByteBuffer nativePrepareDictionary(ByteBuffer dictionary, long type);\n  private static native void nativeDestroyDictionary(ByteBuffer dictionary);\n\n  enum Operation {\n    PROCESS,\n    FLUSH,\n    FINISH\n  }\n\n  private static class PreparedDictionaryImpl implements AutoCloseable, PreparedDictionary {\n    private ByteBuffer data;\n    /** Reference to (non-copied) LZ data. */\n    private ByteBuffer rawData;\n\n    private PreparedDictionaryImpl(ByteBuffer data, ByteBuffer rawData) {\n      this.data = data;\n    }\n\n    @Override\n    public ByteBuffer getData() {\n      return data;\n    }\n\n    @Override\n    public void close() {\n      ByteBuffer data = this.data;\n      this.data = null;\n      this.rawData = null;\n      nativeDestroyDictionary(data);\n    }\n  }\n\n  /**\n   * Prepares raw or serialized dictionary for being used by encoder.\n   *\n   * @param dictionary raw / serialized dictionary data; MUST be direct\n   * @param sharedDictionaryType dictionary data type\n   */\n  static PreparedDictionary prepareDictionary(ByteBuffer dictionary, int sharedDictionaryType) {\n    if (!dictionary.isDirect()) {\n      throw new IllegalArgumentException(\"only direct buffers allowed\");\n    }\n    ByteBuffer dictionaryData = nativePrepareDictionary(dictionary, sharedDictionaryType);\n    if (dictionaryData == null) {\n      throw new IllegalStateException(\"OOM\");\n    }\n    return new PreparedDictionaryImpl(dictionaryData, dictionary);\n  }\n\n  static class Wrapper {\n    protected final long[] context = new long[5];\n    private final ByteBuffer inputBuffer;\n    private boolean fresh = true;\n\n    Wrapper(int inputBufferSize, int quality, int lgwin, Encoder.Mode mode)\n        throws IOException {\n      if (inputBufferSize <= 0) {\n        throw new IOException(\"buffer size must be positive\");\n      }\n      this.context[1] = inputBufferSize;\n      this.context[2] = quality;\n      this.context[3] = lgwin;\n      this.context[4] = mode != null ? mode.ordinal() : -1;\n      this.inputBuffer = nativeCreate(this.context);\n      if (this.context[0] == 0) {\n        throw new IOException(\"failed to initialize native brotli encoder\");\n      }\n      this.context[1] = 1;\n      this.context[2] = 0;\n      this.context[3] = 0;\n      this.context[4] = 0;\n    }\n\n    boolean attachDictionary(ByteBuffer dictionary) {\n      if (!dictionary.isDirect()) {\n        throw new IllegalArgumentException(\"only direct buffers allowed\");\n      }\n      if (context[0] == 0) {\n        throw new IllegalStateException(\"brotli decoder is already destroyed\");\n      }\n      if (!fresh) {\n        throw new IllegalStateException(\"decoding is already started\");\n      }\n      return nativeAttachDictionary(context, dictionary);\n    }\n\n    void push(Operation op, int length) {\n      if (length < 0) {\n        throw new IllegalArgumentException(\"negative block length\");\n      }\n      if (context[0] == 0) {\n        throw new IllegalStateException(\"brotli encoder is already destroyed\");\n      }\n      if (!isSuccess() || hasMoreOutput()) {\n        throw new IllegalStateException(\"pushing input to encoder in unexpected state\");\n      }\n      if (hasRemainingInput() && length != 0) {\n        throw new IllegalStateException(\"pushing input to encoder over previous input\");\n      }\n      context[1] = op.ordinal();\n      fresh = false;\n      nativePush(context, length);\n    }\n\n    boolean isSuccess() {\n      return context[1] != 0;\n    }\n\n    boolean hasMoreOutput() {\n      return context[2] != 0;\n    }\n\n    boolean hasRemainingInput() {\n      return context[3] != 0;\n    }\n\n    boolean isFinished() {\n      return context[4] != 0;\n    }\n\n    ByteBuffer getInputBuffer() {\n      return inputBuffer;\n    }\n\n    ByteBuffer pull() {\n      if (context[0] == 0) {\n        throw new IllegalStateException(\"brotli encoder is already destroyed\");\n      }\n      if (!isSuccess() || !hasMoreOutput()) {\n        throw new IllegalStateException(\"pulling while data is not ready\");\n      }\n      fresh = false;\n      return nativePull(context);\n    }\n\n    /**\n     * Releases native resources.\n     */\n    void destroy() {\n      if (context[0] == 0) {\n        throw new IllegalStateException(\"brotli encoder is already destroyed\");\n      }\n      nativeDestroy(context);\n      context[0] = 0;\n    }\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/enc/EncoderTest.java",
    "content": "package org.brotli.wrapper.enc;\n\nimport static org.junit.Assert.assertEquals;\n\nimport org.brotli.integration.BrotliJniTestBase;\nimport org.brotli.integration.BundleHelper;\nimport org.brotli.wrapper.dec.BrotliInputStream;\nimport java.io.ByteArrayInputStream;\nimport java.io.FileInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.List;\nimport junit.framework.TestCase;\nimport junit.framework.TestSuite;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.AllTests;\n\n/** Tests for {@link org.brotli.wrapper.enc.Encoder}. */\n@RunWith(AllTests.class)\npublic class EncoderTest extends BrotliJniTestBase {\n  static InputStream getBundle() throws IOException {\n    return new FileInputStream(System.getProperty(\"TEST_BUNDLE\"));\n  }\n\n  /** Creates a test suite. */\n  public static TestSuite suite() throws IOException {\n    TestSuite suite = new TestSuite();\n    InputStream bundle = getBundle();\n    try {\n      List<String> entries = BundleHelper.listEntries(bundle);\n      for (String entry : entries) {\n        suite.addTest(new EncoderTestCase(entry));\n      }\n    } finally {\n      bundle.close();\n    }\n    return suite;\n  }\n\n  /** Test case with a unique name. */\n  static class EncoderTestCase extends TestCase {\n    final String entryName;\n    EncoderTestCase(String entryName) {\n      super(\"EncoderTest.\" + entryName);\n      this.entryName = entryName;\n    }\n\n    @Override\n    protected void runTest() throws Throwable {\n      EncoderTest.run(entryName);\n    }\n  }\n\n  private static void run(String entryName) throws Throwable {\n    InputStream bundle = getBundle();\n    byte[] original;\n    try {\n      original = BundleHelper.readEntry(bundle, entryName);\n    } finally {\n      bundle.close();\n    }\n    if (original == null) {\n      throw new RuntimeException(\"Can't read bundle entry: \" + entryName);\n    }\n\n    for (int window = 10; window <= 22; window++) {\n      byte[] compressed =\n          Encoder.compress(original, new Encoder.Parameters().setQuality(6).setWindow(window));\n\n      InputStream decoder = new BrotliInputStream(new ByteArrayInputStream(compressed));\n      try {\n        long originalCrc = BundleHelper.fingerprintStream(new ByteArrayInputStream(original));\n        long crc = BundleHelper.fingerprintStream(decoder);\n        assertEquals(originalCrc, crc);\n      } finally {\n        decoder.close();\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/enc/UseCompoundDictionaryTest.java",
    "content": "package org.brotli.wrapper.enc;\n\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.assertTrue;\n\nimport org.brotli.common.SharedDictionaryType;\nimport org.brotli.enc.PreparedDictionary;\nimport org.brotli.enc.PreparedDictionaryGenerator;\nimport org.brotli.integration.BrotliJniTestBase;\nimport org.brotli.integration.BundleHelper;\nimport org.brotli.wrapper.common.BrotliCommon;\nimport org.brotli.wrapper.dec.BrotliInputStream;\nimport java.io.ByteArrayInputStream;\nimport java.io.ByteArrayOutputStream;\nimport java.io.FileInputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.nio.ByteBuffer;\nimport java.util.List;\nimport junit.framework.TestCase;\nimport junit.framework.TestSuite;\nimport org.junit.runner.RunWith;\nimport org.junit.runners.AllTests;\n\n/** Tests for compression / decompression aided with LZ77 dictionary. */\n@RunWith(AllTests.class)\npublic class UseCompoundDictionaryTest extends BrotliJniTestBase {\n\n  static InputStream getBundle() throws IOException {\n    return new FileInputStream(System.getProperty(\"TEST_BUNDLE\"));\n  }\n\n  /** Creates a test suite. */\n  public static TestSuite suite() throws IOException {\n    TestSuite suite = new TestSuite();\n    InputStream bundle = getBundle();\n    try {\n      List<String> entries = BundleHelper.listEntries(bundle);\n      for (String entry : entries) {\n        suite.addTest(new UseCompoundDictionaryTestCase(entry));\n      }\n    } finally {\n      bundle.close();\n    }\n    return suite;\n  }\n\n  /** Test case with a unique name. */\n  static class UseCompoundDictionaryTestCase extends TestCase {\n    final String entryName;\n    UseCompoundDictionaryTestCase(String entryName) {\n      super(\"UseCompoundDictionaryTest.\" + entryName);\n      this.entryName = entryName;\n    }\n\n    @Override\n    protected void runTest() throws Throwable {\n      UseCompoundDictionaryTest.run(entryName);\n    }\n  }\n\n  private static PreparedDictionary prepareRawDictionary(String entryName, ByteBuffer data) {\n    if (entryName.endsWith(\"E.coli.txt\")) {\n      // Default prepared dictionary parameters doesn't work well for DNA data.\n      // Should work well with 8-byte hash.\n      return PreparedDictionaryGenerator.generate(data, 17, 3, 64, 5);\n    } else {\n       return Encoder.prepareDictionary(data, SharedDictionaryType.RAW);\n    }\n  }\n\n  private static void run(String entryName) throws Throwable {\n    InputStream bundle = getBundle();\n    byte[] original;\n    try {\n      original = BundleHelper.readEntry(bundle, entryName);\n    } finally {\n      bundle.close();\n    }\n\n    if (original == null) {\n      throw new RuntimeException(\"Can't read bundle entry: \" + entryName);\n    }\n\n    ByteBuffer dictionary = BrotliCommon.makeNative(original);\n    PreparedDictionary preparedDictionary = prepareRawDictionary(entryName, dictionary);\n\n    ByteArrayOutputStream dst = new ByteArrayOutputStream();\n    BrotliOutputStream encoder =\n        new BrotliOutputStream(dst, new Encoder.Parameters().setQuality(9).setWindow(23), 1 << 23);\n    encoder.attachDictionary(preparedDictionary);\n    try {\n      encoder.write(original);\n    } finally {\n      encoder.close();\n    }\n\n    byte[] compressed = dst.toByteArray();\n\n    // Just copy self from LZ77 dictionary -> ultimate compression ratio.\n    assertTrue(compressed.length < 80 + original.length / 65536);\n\n    BrotliInputStream decoder =\n        new BrotliInputStream(new ByteArrayInputStream(compressed), 1 << 23);\n    decoder.attachDictionary(dictionary);\n    try {\n      long originalCrc = BundleHelper.fingerprintStream(new ByteArrayInputStream(original));\n      long crc = BundleHelper.fingerprintStream(decoder);\n      assertEquals(originalCrc, crc);\n    } finally {\n      decoder.close();\n    }\n  }\n}\n"
  },
  {
    "path": "java/org/brotli/wrapper/enc/encoder_jni.cc",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include <jni.h>\n\n#include <cstddef>\n#include <cstdint>\n#include <new>\n\n#include <brotli/encode.h>\n#include <brotli/shared_dictionary.h>\n\nnamespace {\n/* A structure used to persist the encoder's state in between calls. */\ntypedef struct EncoderHandle {\n  BrotliEncoderState* state;\n\n  jobject dictionary_refs[15];\n  size_t dictionary_count;\n\n  uint8_t* input_start;\n  size_t input_offset;\n  size_t input_last;\n} EncoderHandle;\n\n/* Obtain handle from opaque pointer. */\nEncoderHandle* getHandle(void* opaque) {\n  return static_cast<EncoderHandle*>(opaque);\n}\n\n}  /* namespace */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**\n * Creates a new Encoder.\n *\n * Cookie to address created encoder is stored in out_cookie. In case of failure\n * cookie is 0.\n *\n * @param ctx {out_cookie, in_directBufferSize, in_quality, in_lgwin} tuple\n * @returns direct ByteBuffer if directBufferSize is not 0; otherwise null\n */\nJNIEXPORT jobject JNICALL Java_org_brotli_wrapper_enc_EncoderJNI_nativeCreate(\n    JNIEnv* env, jobject /*jobj*/, jlongArray ctx) {\n  bool ok = true;\n  EncoderHandle* handle = nullptr;\n  jlong context[5];\n  env->functions->GetLongArrayRegion(env, ctx, 0, 5, context);\n  size_t input_size = context[1];\n  context[0] = 0;\n  handle = new (std::nothrow) EncoderHandle();\n  ok = !!handle;\n\n  if (ok) {\n    for (int i = 0; i < 15; ++i) {\n      handle->dictionary_refs[i] = nullptr;\n    }\n    handle->dictionary_count = 0;\n    handle->input_offset = 0;\n    handle->input_last = 0;\n    handle->input_start = nullptr;\n\n    if (input_size == 0) {\n      ok = false;\n    } else {\n      handle->input_start = new (std::nothrow) uint8_t[input_size];\n      ok = !!handle->input_start;\n    }\n  }\n\n  if (ok) {\n    handle->state = BrotliEncoderCreateInstance(nullptr, nullptr, nullptr);\n    ok = !!handle->state;\n  }\n\n  if (ok) {\n    int quality = context[2];\n    if (quality >= 0) {\n      BrotliEncoderSetParameter(handle->state, BROTLI_PARAM_QUALITY, quality);\n    }\n    int lgwin = context[3];\n    if (lgwin >= 0) {\n      BrotliEncoderSetParameter(handle->state, BROTLI_PARAM_LGWIN, lgwin);\n    }\n    int mode = context[4];\n    if (mode >= 0) {\n      BrotliEncoderSetParameter(handle->state, BROTLI_PARAM_MODE, mode);\n    }\n  }\n\n  if (ok) {\n    /* TODO(eustas): future versions (e.g. when 128-bit architecture comes)\n                     might require thread-safe cookie<->handle mapping. */\n    context[0] = reinterpret_cast<jlong>(handle);\n  } else if (!!handle) {\n    if (!!handle->input_start) delete[] handle->input_start;\n    delete handle;\n  }\n\n  env->functions->SetLongArrayRegion(env, ctx, 0, 1, context);\n\n  if (!ok) {\n    return nullptr;\n  }\n\n  return env->functions->NewDirectByteBuffer(env, handle->input_start,\n                                             input_size);\n}\n\n/**\n * Push data to encoder.\n *\n * @param ctx {in_cookie, in_operation_out_success, out_has_more_output,\n *             out_has_remaining_input} tuple\n * @param input_length number of bytes provided in input or direct input;\n *                     0 to process further previous input\n */\nJNIEXPORT void JNICALL Java_org_brotli_wrapper_enc_EncoderJNI_nativePush(\n    JNIEnv* env, jobject /*jobj*/, jlongArray ctx, jint input_length) {\n  jlong context[5];\n  env->functions->GetLongArrayRegion(env, ctx, 0, 5, context);\n  EncoderHandle* handle = getHandle(reinterpret_cast<void*>(context[0]));\n  int operation = context[1];\n  context[1] = 0;  /* ERROR */\n  env->functions->SetLongArrayRegion(env, ctx, 0, 5, context);\n\n  BrotliEncoderOperation op;\n  switch (operation) {\n    case 0: op = BROTLI_OPERATION_PROCESS; break;\n    case 1: op = BROTLI_OPERATION_FLUSH; break;\n    case 2: op = BROTLI_OPERATION_FINISH; break;\n    default: return;  /* ERROR */\n  }\n\n  if (input_length != 0) {\n    /* Still have unconsumed data. Workflow is broken. */\n    if (handle->input_offset < handle->input_last) {\n      return;\n    }\n    handle->input_offset = 0;\n    handle->input_last = input_length;\n  }\n\n  /* Actual compression. */\n  const uint8_t* in = handle->input_start + handle->input_offset;\n  size_t in_size = handle->input_last - handle->input_offset;\n  size_t out_size = 0;\n  BROTLI_BOOL status = BrotliEncoderCompressStream(\n      handle->state, op, &in_size, &in, &out_size, nullptr, nullptr);\n  handle->input_offset = handle->input_last - in_size;\n  if (!!status) {\n    context[1] = 1;\n    context[2] = BrotliEncoderHasMoreOutput(handle->state) ? 1 : 0;\n    context[3] = (handle->input_offset != handle->input_last) ? 1 : 0;\n    context[4] = BrotliEncoderIsFinished(handle->state) ? 1 : 0;\n  }\n  env->functions->SetLongArrayRegion(env, ctx, 0, 5, context);\n}\n\n/**\n * Pull decompressed data from encoder.\n *\n * @param ctx {in_cookie, out_success, out_has_more_output,\n *             out_has_remaining_input} tuple\n * @returns direct ByteBuffer; all the produced data MUST be consumed before\n *          any further invocation; null in case of error\n */\nJNIEXPORT jobject JNICALL Java_org_brotli_wrapper_enc_EncoderJNI_nativePull(\n    JNIEnv* env, jobject /*jobj*/, jlongArray ctx) {\n  jlong context[5];\n  env->functions->GetLongArrayRegion(env, ctx, 0, 5, context);\n  EncoderHandle* handle = getHandle(reinterpret_cast<void*>(context[0]));\n  size_t data_length = 0;\n  const uint8_t* data = BrotliEncoderTakeOutput(handle->state, &data_length);\n  context[1] = 1;\n  context[2] = BrotliEncoderHasMoreOutput(handle->state) ? 1 : 0;\n  context[3] = (handle->input_offset != handle->input_last) ? 1 : 0;\n  context[4] = BrotliEncoderIsFinished(handle->state) ? 1 : 0;\n  env->functions->SetLongArrayRegion(env, ctx, 0, 5, context);\n  return env->functions->NewDirectByteBuffer(env, const_cast<uint8_t*>(data),\n                                             data_length);\n}\n\n/**\n * Releases all used resources.\n *\n * @param ctx {in_cookie} tuple\n */\nJNIEXPORT void JNICALL Java_org_brotli_wrapper_enc_EncoderJNI_nativeDestroy(\n    JNIEnv* env, jobject /*jobj*/, jlongArray ctx) {\n  jlong context[2];\n  env->functions->GetLongArrayRegion(env, ctx, 0, 2, context);\n  EncoderHandle* handle = getHandle(reinterpret_cast<void*>(context[0]));\n  BrotliEncoderDestroyInstance(handle->state);\n  for (size_t i = 0; i < handle->dictionary_count; ++i) {\n    env->functions->DeleteGlobalRef(env, handle->dictionary_refs[i]);\n  }\n  delete[] handle->input_start;\n  delete handle;\n}\n\nJNIEXPORT jboolean JNICALL\nJava_org_brotli_wrapper_enc_EncoderJNI_nativeAttachDictionary(\n    JNIEnv* env, jobject /*jobj*/, jlongArray ctx, jobject dictionary) {\n  jlong context[2];\n  env->functions->GetLongArrayRegion(env, ctx, 0, 2, context);\n  EncoderHandle* handle = getHandle(reinterpret_cast<void*>(context[0]));\n  jobject ref = nullptr;\n  uint8_t* address = nullptr;\n\n  bool ok = true;\n  if (ok && !dictionary) {\n    ok = false;\n  }\n  if (ok && handle->dictionary_count >= 15) {\n    ok = false;\n  }\n  if (ok) {\n    ref = env->functions->NewGlobalRef(env, dictionary);\n    ok = !!ref;\n  }\n  if (ok) {\n    handle->dictionary_refs[handle->dictionary_count] = ref;\n    handle->dictionary_count++;\n    address = static_cast<uint8_t*>(\n        env->functions->GetDirectBufferAddress(env, ref));\n    ok = !!address;\n  }\n  if (ok) {\n    ok = !!BrotliEncoderAttachPreparedDictionary(\n        handle->state,\n        reinterpret_cast<BrotliEncoderPreparedDictionary*>(address));\n  }\n\n  return static_cast<jboolean>(ok);\n}\n\nJNIEXPORT void JNICALL\nJava_org_brotli_wrapper_enc_EncoderJNI_nativeDestroyDictionary(\n    JNIEnv* env, jobject /*jobj*/, jobject dictionary) {\n  if (!dictionary) {\n    return;\n  }\n  uint8_t* address = static_cast<uint8_t*>(\n      env->functions->GetDirectBufferAddress(env, dictionary));\n  if (!address) {\n    return;\n  }\n  BrotliEncoderDestroyPreparedDictionary(\n      reinterpret_cast<BrotliEncoderPreparedDictionary*>(address));\n}\n\nJNIEXPORT jobject JNICALL\nJava_org_brotli_wrapper_enc_EncoderJNI_nativePrepareDictionary(\n    JNIEnv* env, jobject /*jobj*/, jobject dictionary, jlong type) {\n  if (!dictionary) {\n    return nullptr;\n  }\n  uint8_t* address = static_cast<uint8_t*>(\n      env->functions->GetDirectBufferAddress(env, dictionary));\n  if (!address) {\n    return nullptr;\n  }\n  jlong capacity = env->functions->GetDirectBufferCapacity(env, dictionary);\n  if ((capacity <= 0) || (capacity >= (1 << 30))) {\n    return nullptr;\n  }\n  BrotliSharedDictionaryType dictionary_type =\n      static_cast<BrotliSharedDictionaryType>(type);\n  size_t size = static_cast<size_t>(capacity);\n  BrotliEncoderPreparedDictionary* prepared_dictionary =\n      BrotliEncoderPrepareDictionary(dictionary_type, size, address,\n                                     BROTLI_MAX_QUALITY, nullptr, nullptr,\n                                     nullptr);\n  if (!prepared_dictionary) {\n    return nullptr;\n  }\n  /* Size is 4 - just enough to check magic bytes. */\n  return env->functions->NewDirectByteBuffer(env, prepared_dictionary, 4);\n}\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "js/bundle_test.js",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\nimport {BrotliDecode} from \"./decode.js\";\nimport {makeTestData} from \"./test_data.js\";\n\nconst CRC_64_POLY = new Uint32Array([0xD7870F42, 0xC96C5795]);\n\n/**\n * Calculates binary data footprint.\n *\n * @param {!Int8Array} data binary data\n * @return {string} footprint\n */\nfunction calculateCrc64(data) {\n  const crc = new Uint32Array([0xFFFFFFFF, 0xFFFFFFFF]);\n  const c = new Uint32Array(2);\n  for (let i = 0; i < data.length; ++i) {\n    c[1] = 0;\n    c[0] = (crc[0] ^ data[i]) & 0xFF;\n    for (let k = 0; k < 8; ++k) {\n      const isOdd = c[0] & 1;\n      c[0] = (c[0] >>> 1) | ((c[1] & 1) << 31);\n      c[1] = c[1] >>> 1;\n      if (isOdd) {\n        c[0] = c[0] ^ CRC_64_POLY[0];\n        c[1] = c[1] ^ CRC_64_POLY[1];\n      }\n    }\n    crc[0] = ((crc[0] >>> 8) | ((crc[1] & 0xFF) << 24)) ^ c[0];\n    crc[1] = (crc[1] >>> 8) ^ c[1];\n  }\n  crc[0] = ~crc[0];\n  crc[1] = ~crc[1];\n\n  let lo = crc[0].toString(16);\n  lo = \"0\".repeat(8 - lo.length) + lo;\n  let hi = crc[1].toString(16);\n  hi = \"0\".repeat(8 - hi.length) + hi;\n\n  return hi + lo;\n}\n\n/**\n * Decompresses data and checks that output footprint is correct.\n *\n * @param {string} entry filename including footprint prefix\n * @param {!Int8Array} data compressed data\n */\nfunction checkEntry(entry, data) {\n  const expectedCrc = entry.substring(0, 16);\n  const decompressed = BrotliDecode(data);\n  const crc = calculateCrc64(decompressed);\n  expect(expectedCrc).toEqual(crc);\n}\n\ndescribe(\"BundleTest\", () => {\n  const testData = makeTestData();\n  for (const entry in testData) {\n    if (!testData.hasOwnProperty(entry)) {\n      continue;\n    }\n    const name = entry.substring(17);\n    const data = testData[entry];\n    it('test_' + name, checkEntry.bind(null, entry, data));\n  }\n});\n"
  },
  {
    "path": "js/bundle_test.ts",
    "content": "/* Copyright 2023 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\nimport {brotliDecode} from \"./decode\";\nimport {makeTestData} from \"./test_data\";\n\nconst CRC_64_POLY = new Uint32Array([0xD7870F42, 0xC96C5795]);\n\n/**\n * Calculates binary data footprint.\n */\nfunction calculateCrc64(data: Int8Array): string {\n  const crc = new Uint32Array([0xFFFFFFFF, 0xFFFFFFFF]);\n  const c = new Uint32Array(2);\n  for (let i = 0; i < data.length; ++i) {\n    c[1] = 0;\n    c[0] = (crc[0] ^ data[i]) & 0xFF;\n    for (let k = 0; k < 8; ++k) {\n      const isOdd = c[0] & 1;\n      c[0] = (c[0] >>> 1) | ((c[1] & 1) << 31);\n      c[1] = c[1] >>> 1;\n      if (isOdd) {\n        c[0] = c[0] ^ CRC_64_POLY[0];\n        c[1] = c[1] ^ CRC_64_POLY[1];\n      }\n    }\n    crc[0] = ((crc[0] >>> 8) | ((crc[1] & 0xFF) << 24)) ^ c[0];\n    crc[1] = (crc[1] >>> 8) ^ c[1];\n  }\n  crc[0] = ~crc[0];\n  crc[1] = ~crc[1];\n\n  let lo = crc[0].toString(16);\n  lo = \"0\".repeat(8 - lo.length) + lo;\n  let hi = crc[1].toString(16);\n  hi = \"0\".repeat(8 - hi.length) + hi;\n\n  return hi + lo;\n}\n\n/**\n * Decompresses data and checks that output footprint is correct.\n */\nfunction checkEntry(entry: string, data: Int8Array) {\n  const expectedCrc = entry.substring(0, 16);\n  const decompressed = brotliDecode(data);\n  const crc = calculateCrc64(decompressed);\n  expect(expectedCrc).toEqual(crc);\n}\n\ndescribe(\"BundleTest\", () => {\n  const testData = makeTestData();\n  for (const entry in testData) {\n    if (!testData.hasOwnProperty(entry)) {\n      continue;\n    }\n    const name = entry.substring(17);\n    const data = testData[entry];\n    it('test_' + name, checkEntry.bind(null, entry, data));\n  }\n});\n"
  },
  {
    "path": "js/cli.js",
    "content": "#!/usr/bin/env node\n\nlet defaults =\n    {input: 'input.br', output: 'output.txt', test_iters: 0, test_repeat: 100};\n\n/* Parse command line arguments. */\nlet argv =\n    require('yargs')\n        .usage('Usage: $0 -i file -o file')\n        .option(\n            'input',\n            {alias: 'i', default: defaults.input, describe: 'compressed file'})\n        .option('output', {\n          alias: 'o',\n          default: defaults.output,\n          describe: 'decompressed file'\n        })\n        .option('test_iters', {\n          default: defaults.test_iters,\n          describe: '# of times to run performance test'\n        })\n        .option('test_repeat', {\n          default: defaults.test_repeat,\n          describe: '# of times to decompress file in performance test'\n        })\n        .argv;\n\n/* Read input. */\nconst fs = require('fs');\ndata = fs.readFileSync(argv.input);\nif (!Buffer.isBuffer(data)) throw 'not a buffer';\nconst bytes = new Uint8Array(data);\n\n/* Load and map brotli decoder module. */\nglobal.window = {};\nrequire('./decode.js')\nconst brotliDecode = window['BrotliDecode'];\n\n/* Load \"performance\" module. */\nconst {PerformanceObserver, performance} = require('perf_hooks');\n\n/* Performance test. */\nfor (let i = 0; i < argv.test_iters; ++i) {\n  const a = performance.now();\n  let result;\n  for (let j = 0; j < argv.test_repeat; ++j) {\n    result = brotliDecode(bytes);\n  }\n  const b = performance.now();\n  const total_length = argv.test_repeat * result.length / (1024 * 1024);\n  const total_time = (b - a) / 1000;\n\n  console.log(\n      total_length + 'MB / ' + total_time +\n      's = ' + (total_length / total_time) + 'MB/s');\n}\n\n/* Decode and write output file. */\nfs.writeFileSync(argv.output, new Buffer(brotliDecode(bytes)));\n"
  },
  {
    "path": "js/decode.js",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/**\n * @typedef {!Object} Options\n * @property {?Int8Array} customDictionary\n */\nlet Options;\n\n/**\n * Private scope / static initializer for decoder.\n *\n * @return {function(!Int8Array, ?Options=):!Int8Array}\n */\nlet makeBrotliDecode = () => {\n/* GENERATED CODE BEGIN */\n  /** @type {!Int32Array} */\n  const MAX_HUFFMAN_TABLE_SIZE = Int32Array.from([256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, 854, 886, 920, 952, 984, 1016, 1048, 1080]);\n  /** @type {!Int32Array} */\n  const CODE_LENGTH_CODE_ORDER = Int32Array.from([1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15]);\n  /** @type {!Int32Array} */\n  const DISTANCE_SHORT_CODE_INDEX_OFFSET = Int32Array.from([0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3]);\n  /** @type {!Int32Array} */\n  const DISTANCE_SHORT_CODE_VALUE_OFFSET = Int32Array.from([0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3]);\n  /** @type {!Int32Array} */\n  const FIXED_TABLE = Int32Array.from([0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001, 0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005]);\n  /** @type {!Int32Array} */\n  const BLOCK_LENGTH_OFFSET = Int32Array.from([1, 5, 9, 13, 17, 25, 33, 41, 49, 65, 81, 97, 113, 145, 177, 209, 241, 305, 369, 497, 753, 1265, 2289, 4337, 8433, 16625]);\n  /** @type {!Int32Array} */\n  const BLOCK_LENGTH_N_BITS = Int32Array.from([2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 24]);\n  /** @type {!Int16Array} */\n  const INSERT_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0E, 0x18]);\n  /** @type {!Int16Array} */\n  const COPY_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x18]);\n  /** @type {!Int16Array} */\n  const CMD_LOOKUP = new Int16Array(2816);\n  {\n    unpackCommandLookupTable(CMD_LOOKUP);\n  }\n  /**\n   * @param {number} i\n   * @return {number}\n   */\n  function log2floor(i) {\n    let /** @type {number} */ result = -1;\n    let /** @type {number} */ step = 16;\n    let /** @type {number} */ v = i;\n    while (step > 0) {\n      let /** @type {number} */ next = v >> step;\n      if (next !== 0) {\n        result += step;\n        v = next;\n      }\n      step = step >> 1;\n    }\n    return result + v;\n  }\n  /**\n   * @param {number} npostfix\n   * @param {number} ndirect\n   * @param {number} maxndistbits\n   * @return {number}\n   */\n  function calculateDistanceAlphabetSize(npostfix, ndirect, maxndistbits) {\n    return 16 + ndirect + 2 * (maxndistbits << npostfix);\n  }\n  /**\n   * @param {!State} s\n   * @param {number} maxDistance\n   * @param {number} npostfix\n   * @param {number} ndirect\n   * @return {number}\n   */\n  function calculateDistanceAlphabetLimit(s, maxDistance, npostfix, ndirect) {\n    if (maxDistance < ndirect + (2 << npostfix)) {\n      return makeError(s, -23);\n    }\n    const /** @type {number} */ offset = ((maxDistance - ndirect) >> npostfix) + 4;\n    const /** @type {number} */ ndistbits = log2floor(offset) - 1;\n    const /** @type {number} */ group = ((ndistbits - 1) << 1) | ((offset >> ndistbits) & 1);\n    return ((group - 1) << npostfix) + (1 << npostfix) + ndirect + 16;\n  }\n  /**\n   * @param {!Int16Array} cmdLookup\n   * @return {void}\n   */\n  function unpackCommandLookupTable(cmdLookup) {\n    const /** @type {!Int32Array} */ insertLengthOffsets = new Int32Array(24);\n    const /** @type {!Int32Array} */ copyLengthOffsets = new Int32Array(24);\n    copyLengthOffsets[0] = 2;\n    for (let /** @type {number} */ i = 0; i < 23; ++i) {\n      insertLengthOffsets[i + 1] = insertLengthOffsets[i] + (1 << INSERT_LENGTH_N_BITS[i]);\n      copyLengthOffsets[i + 1] = copyLengthOffsets[i] + (1 << COPY_LENGTH_N_BITS[i]);\n    }\n    for (let /** @type {number} */ cmdCode = 0; cmdCode < 704; ++cmdCode) {\n      let /** @type {number} */ rangeIdx = cmdCode >> 6;\n      let /** @type {number} */ distanceContextOffset = -4;\n      if (rangeIdx >= 2) {\n        rangeIdx -= 2;\n        distanceContextOffset = 0;\n      }\n      const /** @type {number} */ insertCode = (((0x29850 >> (rangeIdx * 2)) & 0x3) << 3) | ((cmdCode >> 3) & 7);\n      const /** @type {number} */ copyCode = (((0x26244 >> (rangeIdx * 2)) & 0x3) << 3) | (cmdCode & 7);\n      const /** @type {number} */ copyLengthOffset = copyLengthOffsets[copyCode];\n      const /** @type {number} */ distanceContext = distanceContextOffset + Math.min(copyLengthOffset, 5) - 2;\n      const /** @type {number} */ index = cmdCode * 4;\n      cmdLookup[index] = INSERT_LENGTH_N_BITS[insertCode] | (COPY_LENGTH_N_BITS[copyCode] << 8);\n      cmdLookup[index + 1] = insertLengthOffsets[insertCode];\n      cmdLookup[index + 2] = copyLengthOffsets[copyCode];\n      cmdLookup[index + 3] = distanceContext;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeWindowBits(s) {\n    const /** @type {number} */ largeWindowEnabled = s.isLargeWindow;\n    s.isLargeWindow = 0;\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) === 0) {\n      return 16;\n    }\n    let /** @type {number} */ n = readFewBits(s, 3);\n    if (n !== 0) {\n      return 17 + n;\n    }\n    n = readFewBits(s, 3);\n    if (n !== 0) {\n      if (n === 1) {\n        if (largeWindowEnabled === 0) {\n          return -1;\n        }\n        s.isLargeWindow = 1;\n        if (readFewBits(s, 1) === 1) {\n          return -1;\n        }\n        n = readFewBits(s, 6);\n        if (n < 10 || n > 30) {\n          return -1;\n        }\n        return n;\n      }\n      return 8 + n;\n    }\n    return 17;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function enableEagerOutput(s) {\n    if (s.runningState !== 1) {\n      return makeError(s, -24);\n    }\n    s.isEager = 1;\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function enableLargeWindow(s) {\n    if (s.runningState !== 1) {\n      return makeError(s, -24);\n    }\n    s.isLargeWindow = 1;\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @param {!Int8Array} data\n   * @return {number}\n   */\n  function attachDictionaryChunk(s, data) {\n    if (s.runningState !== 1) {\n      return makeError(s, -24);\n    }\n    if (s.cdNumChunks === 0) {\n      s.cdChunks = new Array(16);\n      s.cdChunkOffsets = new Int32Array(16);\n      s.cdBlockBits = -1;\n    }\n    if (s.cdNumChunks === 15) {\n      return makeError(s, -27);\n    }\n    s.cdChunks[s.cdNumChunks] = data;\n    s.cdNumChunks++;\n    s.cdTotalSize += data.length;\n    s.cdChunkOffsets[s.cdNumChunks] = s.cdTotalSize;\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function initState(s) {\n    if (s.runningState !== 0) {\n      return makeError(s, -26);\n    }\n    s.blockTrees = new Int32Array(3091);\n    s.blockTrees[0] = 7;\n    s.distRbIdx = 3;\n    let /** @type {number} */ result = calculateDistanceAlphabetLimit(s, 0x7FFFFFFC, 3, 120);\n    if (result < 0) {\n      return result;\n    }\n    const /** @type {number} */ maxDistanceAlphabetLimit = result;\n    s.distExtraBits = new Int8Array(maxDistanceAlphabetLimit);\n    s.distOffset = new Int32Array(maxDistanceAlphabetLimit);\n    result = initBitReader(s);\n    if (result < 0) {\n      return result;\n    }\n    s.runningState = 1;\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function close(s) {\n    if (s.runningState === 0) {\n      return makeError(s, -25);\n    }\n    if (s.runningState > 0) {\n      s.runningState = 11;\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeVarLenUnsignedByte(s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) !== 0) {\n      const /** @type {number} */ n = readFewBits(s, 3);\n      if (n === 0) {\n        return 1;\n      }\n      return readFewBits(s, n) + (1 << n);\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeMetaBlockLength(s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    s.inputEnd = readFewBits(s, 1);\n    s.metaBlockLength = 0;\n    s.isUncompressed = 0;\n    s.isMetadata = 0;\n    if ((s.inputEnd !== 0) && readFewBits(s, 1) !== 0) {\n      return 0;\n    }\n    const /** @type {number} */ sizeNibbles = readFewBits(s, 2) + 4;\n    if (sizeNibbles === 7) {\n      s.isMetadata = 1;\n      if (readFewBits(s, 1) !== 0) {\n        return makeError(s, -6);\n      }\n      const /** @type {number} */ sizeBytes = readFewBits(s, 2);\n      if (sizeBytes === 0) {\n        return 0;\n      }\n      for (let /** @type {number} */ i = 0; i < sizeBytes; ++i) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        const /** @type {number} */ bits = readFewBits(s, 8);\n        if (bits === 0 && i + 1 === sizeBytes && sizeBytes > 1) {\n          return makeError(s, -8);\n        }\n        s.metaBlockLength += bits << (i * 8);\n      }\n    } else {\n      for (let /** @type {number} */ i = 0; i < sizeNibbles; ++i) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        const /** @type {number} */ bits = readFewBits(s, 4);\n        if (bits === 0 && i + 1 === sizeNibbles && sizeNibbles > 4) {\n          return makeError(s, -8);\n        }\n        s.metaBlockLength += bits << (i * 4);\n      }\n    }\n    s.metaBlockLength++;\n    if (s.inputEnd === 0) {\n      s.isUncompressed = readFewBits(s, 1);\n    }\n    return 0;\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readSymbol(tableGroup, tableIdx, s) {\n    let /** @type {number} */ offset = tableGroup[tableIdx];\n    const /** @type {number} */ v = s.accumulator32 >>> s.bitOffset;\n    offset += v & 0xFF;\n    const /** @type {number} */ bits = tableGroup[offset] >> 16;\n    const /** @type {number} */ sym = tableGroup[offset] & 0xFFFF;\n    if (bits <= 8) {\n      s.bitOffset += bits;\n      return sym;\n    }\n    offset += sym;\n    const /** @type {number} */ mask = (1 << bits) - 1;\n    offset += (v & mask) >>> 8;\n    s.bitOffset += (tableGroup[offset] >> 16) + 8;\n    return tableGroup[offset] & 0xFFFF;\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readBlockLength(tableGroup, tableIdx, s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const /** @type {number} */ code = readSymbol(tableGroup, tableIdx, s);\n    const /** @type {number} */ n = BLOCK_LENGTH_N_BITS[code];\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    return BLOCK_LENGTH_OFFSET[code] + ((n <= 16) ? readFewBits(s, n) : readManyBits(s, n));\n  }\n  /**\n   * @param {!Int32Array} v\n   * @param {number} index\n   * @return {void}\n   */\n  function moveToFront(v, index) {\n    let /** @type {number} */ i = index;\n    const /** @type {number} */ value = v[i];\n    while (i > 0) {\n      v[i] = v[i - 1];\n      i--;\n    }\n    v[0] = value;\n  }\n  /**\n   * @param {!Int8Array} v\n   * @param {number} vLen\n   * @return {void}\n   */\n  function inverseMoveToFrontTransform(v, vLen) {\n    const /** @type {!Int32Array} */ mtf = new Int32Array(256);\n    for (let /** @type {number} */ i = 0; i < 256; ++i) {\n      mtf[i] = i;\n    }\n    for (let /** @type {number} */ i = 0; i < vLen; ++i) {\n      const /** @type {number} */ index = v[i] & 0xFF;\n      v[i] = mtf[index];\n      if (index !== 0) {\n        moveToFront(mtf, index);\n      }\n    }\n  }\n  /**\n   * @param {!Int32Array} codeLengthCodeLengths\n   * @param {number} numSymbols\n   * @param {!Int32Array} codeLengths\n   * @param {!State} s\n   * @return {number}\n   */\n  function readHuffmanCodeLengths(codeLengthCodeLengths, numSymbols, codeLengths, s) {\n    let /** @type {number} */ symbol = 0;\n    let /** @type {number} */ prevCodeLen = 8;\n    let /** @type {number} */ repeat = 0;\n    let /** @type {number} */ repeatCodeLen = 0;\n    let /** @type {number} */ space = 32768;\n    const /** @type {!Int32Array} */ table = new Int32Array(33);\n    const /** @type {number} */ tableIdx = table.length - 1;\n    buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18);\n    while (symbol < numSymbols && space > 0) {\n      if (s.halfOffset > 2030) {\n        const /** @type {number} */ result = readMoreInput(s);\n        if (result < 0) {\n          return result;\n        }\n      }\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 31;\n      s.bitOffset += table[p] >> 16;\n      const /** @type {number} */ codeLen = table[p] & 0xFFFF;\n      if (codeLen < 16) {\n        repeat = 0;\n        codeLengths[symbol++] = codeLen;\n        if (codeLen !== 0) {\n          prevCodeLen = codeLen;\n          space -= 32768 >> codeLen;\n        }\n      } else {\n        const /** @type {number} */ extraBits = codeLen - 14;\n        let /** @type {number} */ newLen = 0;\n        if (codeLen === 16) {\n          newLen = prevCodeLen;\n        }\n        if (repeatCodeLen !== newLen) {\n          repeat = 0;\n          repeatCodeLen = newLen;\n        }\n        const /** @type {number} */ oldRepeat = repeat;\n        if (repeat > 0) {\n          repeat -= 2;\n          repeat = repeat << extraBits;\n        }\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        repeat += readFewBits(s, extraBits) + 3;\n        const /** @type {number} */ repeatDelta = repeat - oldRepeat;\n        if (symbol + repeatDelta > numSymbols) {\n          return makeError(s, -2);\n        }\n        for (let /** @type {number} */ i = 0; i < repeatDelta; ++i) {\n          codeLengths[symbol++] = repeatCodeLen;\n        }\n        if (repeatCodeLen !== 0) {\n          space -= repeatDelta << (15 - repeatCodeLen);\n        }\n      }\n    }\n    if (space !== 0) {\n      return makeError(s, -18);\n    }\n    codeLengths.fill(0, symbol, numSymbols);\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @param {!Int32Array} symbols\n   * @param {number} length\n   * @return {number}\n   */\n  function checkDupes(s, symbols, length) {\n    for (let /** @type {number} */ i = 0; i < length - 1; ++i) {\n      for (let /** @type {number} */ j = i + 1; j < length; ++j) {\n        if (symbols[i] === symbols[j]) {\n          return makeError(s, -7);\n        }\n      }\n    }\n    return 0;\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {\n    const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit);\n    const /** @type {!Int32Array} */ symbols = new Int32Array(4);\n    const /** @type {number} */ maxBits = 1 + log2floor(alphabetSizeMax - 1);\n    const /** @type {number} */ numSymbols = readFewBits(s, 2) + 1;\n    for (let /** @type {number} */ i = 0; i < numSymbols; ++i) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ symbol = readFewBits(s, maxBits);\n      if (symbol >= alphabetSizeLimit) {\n        return makeError(s, -15);\n      }\n      symbols[i] = symbol;\n    }\n    const /** @type {number} */ result = checkDupes(s, symbols, numSymbols);\n    if (result < 0) {\n      return result;\n    }\n    let /** @type {number} */ histogramId = numSymbols;\n    if (numSymbols === 4) {\n      histogramId += readFewBits(s, 1);\n    }\n    switch(histogramId) {\n      case 1:\n        codeLengths[symbols[0]] = 1;\n        break;\n      case 2:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 1;\n        break;\n      case 3:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 2;\n        break;\n      case 4:\n        codeLengths[symbols[0]] = 2;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 2;\n        codeLengths[symbols[3]] = 2;\n        break;\n      case 5:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 3;\n        codeLengths[symbols[3]] = 3;\n        break;\n      default:\n        break;\n    }\n    return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n  }\n  /**\n   * @param {number} alphabetSizeLimit\n   * @param {number} skip\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readComplexHuffmanCode(alphabetSizeLimit, skip, tableGroup, tableIdx, s) {\n    const /** @type {!Int32Array} */ codeLengths = new Int32Array(alphabetSizeLimit);\n    const /** @type {!Int32Array} */ codeLengthCodeLengths = new Int32Array(18);\n    let /** @type {number} */ space = 32;\n    let /** @type {number} */ numCodes = 0;\n    for (let /** @type {number} */ i = skip; i < 18; ++i) {\n      const /** @type {number} */ codeLenIdx = CODE_LENGTH_CODE_ORDER[i];\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ p = (s.accumulator32 >>> s.bitOffset) & 15;\n      s.bitOffset += FIXED_TABLE[p] >> 16;\n      const /** @type {number} */ v = FIXED_TABLE[p] & 0xFFFF;\n      codeLengthCodeLengths[codeLenIdx] = v;\n      if (v !== 0) {\n        space -= 32 >> v;\n        numCodes++;\n        if (space <= 0) {\n          break;\n        }\n      }\n    }\n    if (space !== 0 && numCodes !== 1) {\n      return makeError(s, -4);\n    }\n    const /** @type {number} */ result = readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s);\n    if (result < 0) {\n      return result;\n    }\n    return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {\n    if (s.halfOffset > 2030) {\n      const /** @type {number} */ result = readMoreInput(s);\n      if (result < 0) {\n        return result;\n      }\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const /** @type {number} */ simpleCodeOrSkip = readFewBits(s, 2);\n    if (simpleCodeOrSkip === 1) {\n      return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s);\n    }\n    return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s);\n  }\n  /**\n   * @param {number} contextMapSize\n   * @param {!Int8Array} contextMap\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeContextMap(contextMapSize, contextMap, s) {\n    let /** @type {number} */ result;\n    if (s.halfOffset > 2030) {\n      result = readMoreInput(s);\n      if (result < 0) {\n        return result;\n      }\n    }\n    const /** @type {number} */ numTrees = decodeVarLenUnsignedByte(s) + 1;\n    if (numTrees === 1) {\n      contextMap.fill(0, 0, contextMapSize);\n      return numTrees;\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const /** @type {number} */ useRleForZeros = readFewBits(s, 1);\n    let /** @type {number} */ maxRunLengthPrefix = 0;\n    if (useRleForZeros !== 0) {\n      maxRunLengthPrefix = readFewBits(s, 4) + 1;\n    }\n    const /** @type {number} */ alphabetSize = numTrees + maxRunLengthPrefix;\n    const /** @type {number} */ tableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSize + 31) >> 5];\n    const /** @type {!Int32Array} */ table = new Int32Array(tableSize + 1);\n    const /** @type {number} */ tableIdx = table.length - 1;\n    result = readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s);\n    if (result < 0) {\n      return result;\n    }\n    let /** @type {number} */ i = 0;\n    while (i < contextMapSize) {\n      if (s.halfOffset > 2030) {\n        result = readMoreInput(s);\n        if (result < 0) {\n          return result;\n        }\n      }\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const /** @type {number} */ code = readSymbol(table, tableIdx, s);\n      if (code === 0) {\n        contextMap[i] = 0;\n        i++;\n      } else if (code <= maxRunLengthPrefix) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        let /** @type {number} */ reps = (1 << code) + readFewBits(s, code);\n        while (reps !== 0) {\n          if (i >= contextMapSize) {\n            return makeError(s, -3);\n          }\n          contextMap[i] = 0;\n          i++;\n          reps--;\n        }\n      } else {\n        contextMap[i] = code - maxRunLengthPrefix;\n        i++;\n      }\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) === 1) {\n      inverseMoveToFrontTransform(contextMap, contextMapSize);\n    }\n    return numTrees;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} treeType\n   * @param {number} numBlockTypes\n   * @return {number}\n   */\n  function decodeBlockTypeAndLength(s, treeType, numBlockTypes) {\n    const /** @type {!Int32Array} */ ringBuffers = s.rings;\n    const /** @type {number} */ offset = 4 + treeType * 2;\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    let /** @type {number} */ blockType = readSymbol(s.blockTrees, 2 * treeType, s);\n    const /** @type {number} */ result = readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n    if (blockType === 1) {\n      blockType = ringBuffers[offset + 1] + 1;\n    } else if (blockType === 0) {\n      blockType = ringBuffers[offset];\n    } else {\n      blockType -= 2;\n    }\n    if (blockType >= numBlockTypes) {\n      blockType -= numBlockTypes;\n    }\n    ringBuffers[offset] = ringBuffers[offset + 1];\n    ringBuffers[offset + 1] = blockType;\n    return result;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeLiteralBlockSwitch(s) {\n    s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes);\n    const /** @type {number} */ literalBlockType = s.rings[5];\n    s.contextMapSlice = literalBlockType << 6;\n    s.literalTreeIdx = s.contextMap[s.contextMapSlice] & 0xFF;\n    const /** @type {number} */ contextMode = s.contextModes[literalBlockType];\n    s.contextLookupOffset1 = contextMode << 9;\n    s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeCommandBlockSwitch(s) {\n    s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes);\n    s.commandTreeIdx = s.rings[7];\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeDistanceBlockSwitch(s) {\n    s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes);\n    s.distContextMapSlice = s.rings[9] << 2;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function maybeReallocateRingBuffer(s) {\n    let /** @type {number} */ newSize = s.maxRingBufferSize;\n    if (newSize > s.expectedTotalSize) {\n      const /** @type {number} */ minimalNewSize = s.expectedTotalSize;\n      while ((newSize >> 1) > minimalNewSize) {\n        newSize = newSize >> 1;\n      }\n      if ((s.inputEnd === 0) && newSize < 16384 && s.maxRingBufferSize >= 16384) {\n        newSize = 16384;\n      }\n    }\n    if (newSize <= s.ringBufferSize) {\n      return;\n    }\n    const /** @type {number} */ ringBufferSizeWithSlack = newSize + 37;\n    const /** @type {!Int8Array} */ newBuffer = new Int8Array(ringBufferSizeWithSlack);\n    const /** @type {!Int8Array} */ oldBuffer = s.ringBuffer;\n    if (oldBuffer.length !== 0) {\n      newBuffer.set(oldBuffer.subarray(0, s.ringBufferSize), 0);\n    }\n    s.ringBuffer = newBuffer;\n    s.ringBufferSize = newSize;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function readNextMetablockHeader(s) {\n    if (s.inputEnd !== 0) {\n      s.nextRunningState = 10;\n      s.runningState = 12;\n      return 0;\n    }\n    s.literalTreeGroup = new Int32Array(0);\n    s.commandTreeGroup = new Int32Array(0);\n    s.distanceTreeGroup = new Int32Array(0);\n    let /** @type {number} */ result;\n    if (s.halfOffset > 2030) {\n      result = readMoreInput(s);\n      if (result < 0) {\n        return result;\n      }\n    }\n    result = decodeMetaBlockLength(s);\n    if (result < 0) {\n      return result;\n    }\n    if ((s.metaBlockLength === 0) && (s.isMetadata === 0)) {\n      return 0;\n    }\n    if ((s.isUncompressed !== 0) || (s.isMetadata !== 0)) {\n      result = jumpToByteBoundary(s);\n      if (result < 0) {\n        return result;\n      }\n      if (s.isMetadata === 0) {\n        s.runningState = 6;\n      } else {\n        s.runningState = 5;\n      }\n    } else {\n      s.runningState = 3;\n    }\n    if (s.isMetadata !== 0) {\n      return 0;\n    }\n    s.expectedTotalSize += s.metaBlockLength;\n    if (s.expectedTotalSize > 1 << 30) {\n      s.expectedTotalSize = 1 << 30;\n    }\n    if (s.ringBufferSize < s.maxRingBufferSize) {\n      maybeReallocateRingBuffer(s);\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} treeType\n   * @param {number} numBlockTypes\n   * @return {number}\n   */\n  function readMetablockPartition(s, treeType, numBlockTypes) {\n    let /** @type {number} */ offset = s.blockTrees[2 * treeType];\n    if (numBlockTypes <= 1) {\n      s.blockTrees[2 * treeType + 1] = offset;\n      s.blockTrees[2 * treeType + 2] = offset;\n      return 1 << 28;\n    }\n    const /** @type {number} */ blockTypeAlphabetSize = numBlockTypes + 2;\n    let /** @type {number} */ result = readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s);\n    if (result < 0) {\n      return result;\n    }\n    offset += result;\n    s.blockTrees[2 * treeType + 1] = offset;\n    const /** @type {number} */ blockLengthAlphabetSize = 26;\n    result = readHuffmanCode(blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2 * treeType + 1, s);\n    if (result < 0) {\n      return result;\n    }\n    offset += result;\n    s.blockTrees[2 * treeType + 2] = offset;\n    return readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n  }\n  /**\n   * @param {!State} s\n   * @param {number} alphabetSizeLimit\n   * @return {void}\n   */\n  function calculateDistanceLut(s, alphabetSizeLimit) {\n    const /** @type {!Int8Array} */ distExtraBits = s.distExtraBits;\n    const /** @type {!Int32Array} */ distOffset = s.distOffset;\n    const /** @type {number} */ npostfix = s.distancePostfixBits;\n    const /** @type {number} */ ndirect = s.numDirectDistanceCodes;\n    const /** @type {number} */ postfix = 1 << npostfix;\n    let /** @type {number} */ bits = 1;\n    let /** @type {number} */ half = 0;\n    let /** @type {number} */ i = 16;\n    for (let /** @type {number} */ j = 0; j < ndirect; ++j) {\n      distExtraBits[i] = 0;\n      distOffset[i] = j + 1;\n      ++i;\n    }\n    while (i < alphabetSizeLimit) {\n      const /** @type {number} */ base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1;\n      for (let /** @type {number} */ j = 0; j < postfix; ++j) {\n        distExtraBits[i] = bits;\n        distOffset[i] = base + j;\n        ++i;\n      }\n      bits = bits + half;\n      half = half ^ 1;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function readMetablockHuffmanCodesAndContextMaps(s) {\n    s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    let /** @type {number} */ result = readMetablockPartition(s, 0, s.numLiteralBlockTypes);\n    if (result < 0) {\n      return result;\n    }\n    s.literalBlockLength = result;\n    s.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    result = readMetablockPartition(s, 1, s.numCommandBlockTypes);\n    if (result < 0) {\n      return result;\n    }\n    s.commandBlockLength = result;\n    s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    result = readMetablockPartition(s, 2, s.numDistanceBlockTypes);\n    if (result < 0) {\n      return result;\n    }\n    s.distanceBlockLength = result;\n    if (s.halfOffset > 2030) {\n      result = readMoreInput(s);\n      if (result < 0) {\n        return result;\n      }\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    s.distancePostfixBits = readFewBits(s, 2);\n    s.numDirectDistanceCodes = readFewBits(s, 4) << s.distancePostfixBits;\n    s.contextModes = new Int8Array(s.numLiteralBlockTypes);\n    let /** @type {number} */ i = 0;\n    while (i < s.numLiteralBlockTypes) {\n      const /** @type {number} */ limit = Math.min(i + 96, s.numLiteralBlockTypes);\n      while (i < limit) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        s.contextModes[i] = readFewBits(s, 2);\n        i++;\n      }\n      if (s.halfOffset > 2030) {\n        result = readMoreInput(s);\n        if (result < 0) {\n          return result;\n        }\n      }\n    }\n    const /** @type {number} */ contextMapLength = s.numLiteralBlockTypes << 6;\n    s.contextMap = new Int8Array(contextMapLength);\n    result = decodeContextMap(contextMapLength, s.contextMap, s);\n    if (result < 0) {\n      return result;\n    }\n    const /** @type {number} */ numLiteralTrees = result;\n    s.trivialLiteralContext = 1;\n    for (let /** @type {number} */ j = 0; j < contextMapLength; ++j) {\n      if (s.contextMap[j] !== j >> 6) {\n        s.trivialLiteralContext = 0;\n        break;\n      }\n    }\n    s.distContextMap = new Int8Array(s.numDistanceBlockTypes << 2);\n    result = decodeContextMap(s.numDistanceBlockTypes << 2, s.distContextMap, s);\n    if (result < 0) {\n      return result;\n    }\n    const /** @type {number} */ numDistTrees = result;\n    s.literalTreeGroup = new Int32Array(huffmanTreeGroupAllocSize(256, numLiteralTrees));\n    result = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s, s.literalTreeGroup);\n    if (result < 0) {\n      return result;\n    }\n    s.commandTreeGroup = new Int32Array(huffmanTreeGroupAllocSize(704, s.numCommandBlockTypes));\n    result = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s, s.commandTreeGroup);\n    if (result < 0) {\n      return result;\n    }\n    let /** @type {number} */ distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24);\n    let /** @type {number} */ distanceAlphabetSizeLimit = distanceAlphabetSizeMax;\n    if (s.isLargeWindow === 1) {\n      distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62);\n      result = calculateDistanceAlphabetLimit(s, 0x7FFFFFFC, s.distancePostfixBits, s.numDirectDistanceCodes);\n      if (result < 0) {\n        return result;\n      }\n      distanceAlphabetSizeLimit = result;\n    }\n    s.distanceTreeGroup = new Int32Array(huffmanTreeGroupAllocSize(distanceAlphabetSizeLimit, numDistTrees));\n    result = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s, s.distanceTreeGroup);\n    if (result < 0) {\n      return result;\n    }\n    calculateDistanceLut(s, distanceAlphabetSizeLimit);\n    s.contextMapSlice = 0;\n    s.distContextMapSlice = 0;\n    s.contextLookupOffset1 = s.contextModes[0] * 512;\n    s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n    s.literalTreeIdx = 0;\n    s.commandTreeIdx = 0;\n    s.rings[4] = 1;\n    s.rings[5] = 0;\n    s.rings[6] = 1;\n    s.rings[7] = 0;\n    s.rings[8] = 1;\n    s.rings[9] = 0;\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function copyUncompressedData(s) {\n    const /** @type {!Int8Array} */ ringBuffer = s.ringBuffer;\n    let /** @type {number} */ result;\n    if (s.metaBlockLength <= 0) {\n      result = reload(s);\n      if (result < 0) {\n        return result;\n      }\n      s.runningState = 2;\n      return 0;\n    }\n    const /** @type {number} */ chunkLength = Math.min(s.ringBufferSize - s.pos, s.metaBlockLength);\n    result = copyRawBytes(s, ringBuffer, s.pos, chunkLength);\n    if (result < 0) {\n      return result;\n    }\n    s.metaBlockLength -= chunkLength;\n    s.pos += chunkLength;\n    if (s.pos === s.ringBufferSize) {\n      s.nextRunningState = 6;\n      s.runningState = 12;\n      return 0;\n    }\n    result = reload(s);\n    if (result < 0) {\n      return result;\n    }\n    s.runningState = 2;\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function writeRingBuffer(s) {\n    const /** @type {number} */ toWrite = Math.min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten);\n    if (toWrite !== 0) {\n      s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite), s.outputOffset + s.outputUsed);\n      s.outputUsed += toWrite;\n      s.ringBufferBytesWritten += toWrite;\n    }\n    if (s.outputUsed < s.outputLength) {\n      return 0;\n    }\n    return 2;\n  }\n  /**\n   * @param {number} alphabetSizeLimit\n   * @param {number} n\n   * @return {number}\n   */\n  function huffmanTreeGroupAllocSize(alphabetSizeLimit, n) {\n    const /** @type {number} */ maxTableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSizeLimit + 31) >> 5];\n    return n + n * maxTableSize;\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {number} n\n   * @param {!State} s\n   * @param {!Int32Array} group\n   * @return {number}\n   */\n  function decodeHuffmanTreeGroup(alphabetSizeMax, alphabetSizeLimit, n, s, group) {\n    let /** @type {number} */ next = n;\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      group[i] = next;\n      const /** @type {number} */ result = readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s);\n      if (result < 0) {\n        return result;\n      }\n      next += result;\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function calculateFence(s) {\n    let /** @type {number} */ result = s.ringBufferSize;\n    if (s.isEager !== 0) {\n      result = Math.min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed);\n    }\n    return result;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} fence\n   * @return {number}\n   */\n  function doUseDictionary(s, fence) {\n    if (s.distance > 0x7FFFFFFC) {\n      return makeError(s, -9);\n    }\n    const /** @type {number} */ address = s.distance - s.maxDistance - 1 - s.cdTotalSize;\n    if (address < 0) {\n      const /** @type {number} */ result = initializeCompoundDictionaryCopy(s, -address - 1, s.copyLength);\n      if (result < 0) {\n        return result;\n      }\n      s.runningState = 14;\n    } else {\n      const /** @type {!ByteBuffer} */ dictionaryData = data;\n      const /** @type {number} */ wordLength = s.copyLength;\n      if (wordLength > 31) {\n        return makeError(s, -9);\n      }\n      const /** @type {number} */ shift = sizeBits[wordLength];\n      if (shift === 0) {\n        return makeError(s, -9);\n      }\n      let /** @type {number} */ offset = offsets[wordLength];\n      const /** @type {number} */ mask = (1 << shift) - 1;\n      const /** @type {number} */ wordIdx = address & mask;\n      const /** @type {number} */ transformIdx = address >> shift;\n      offset += wordIdx * wordLength;\n      const /** @type {!Transforms} */ transforms = RFC_TRANSFORMS;\n      if (transformIdx >= transforms.numTransforms) {\n        return makeError(s, -9);\n      }\n      const /** @type {number} */ len = transformDictionaryWord(s.ringBuffer, s.pos, dictionaryData, offset, wordLength, transforms, transformIdx);\n      s.pos += len;\n      s.metaBlockLength -= len;\n      if (s.pos >= fence) {\n        s.nextRunningState = 4;\n        s.runningState = 12;\n        return 0;\n      }\n      s.runningState = 4;\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function initializeCompoundDictionary(s) {\n    s.cdBlockMap = new Int8Array(256);\n    let /** @type {number} */ blockBits = 8;\n    while (((s.cdTotalSize - 1) >> blockBits) !== 0) {\n      blockBits++;\n    }\n    blockBits -= 8;\n    s.cdBlockBits = blockBits;\n    let /** @type {number} */ cursor = 0;\n    let /** @type {number} */ index = 0;\n    while (cursor < s.cdTotalSize) {\n      while (s.cdChunkOffsets[index + 1] < cursor) {\n        index++;\n      }\n      s.cdBlockMap[cursor >> blockBits] = index;\n      cursor += 1 << blockBits;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} address\n   * @param {number} length\n   * @return {number}\n   */\n  function initializeCompoundDictionaryCopy(s, address, length) {\n    if (s.cdBlockBits === -1) {\n      initializeCompoundDictionary(s);\n    }\n    let /** @type {number} */ index = s.cdBlockMap[address >> s.cdBlockBits];\n    while (address >= s.cdChunkOffsets[index + 1]) {\n      index++;\n    }\n    if (s.cdTotalSize > address + length) {\n      return makeError(s, -9);\n    }\n    s.distRbIdx = (s.distRbIdx + 1) & 0x3;\n    s.rings[s.distRbIdx] = s.distance;\n    s.metaBlockLength -= length;\n    s.cdBrIndex = index;\n    s.cdBrOffset = address - s.cdChunkOffsets[index];\n    s.cdBrLength = length;\n    s.cdBrCopied = 0;\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} fence\n   * @return {number}\n   */\n  function copyFromCompoundDictionary(s, fence) {\n    let /** @type {number} */ pos = s.pos;\n    const /** @type {number} */ origPos = pos;\n    while (s.cdBrLength !== s.cdBrCopied) {\n      const /** @type {number} */ space = fence - pos;\n      const /** @type {number} */ chunkLength = s.cdChunkOffsets[s.cdBrIndex + 1] - s.cdChunkOffsets[s.cdBrIndex];\n      const /** @type {number} */ remChunkLength = chunkLength - s.cdBrOffset;\n      let /** @type {number} */ length = s.cdBrLength - s.cdBrCopied;\n      if (length > remChunkLength) {\n        length = remChunkLength;\n      }\n      if (length > space) {\n        length = space;\n      }\n      s.ringBuffer.set(s.cdChunks[s.cdBrIndex].subarray(s.cdBrOffset, s.cdBrOffset + length), pos);\n      pos += length;\n      s.cdBrOffset += length;\n      s.cdBrCopied += length;\n      if (length === remChunkLength) {\n        s.cdBrIndex++;\n        s.cdBrOffset = 0;\n      }\n      if (pos >= fence) {\n        break;\n      }\n    }\n    return pos - origPos;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decompress(s) {\n    let /** @type {number} */ result;\n    if (s.runningState === 0) {\n      return makeError(s, -25);\n    }\n    if (s.runningState < 0) {\n      return makeError(s, -28);\n    }\n    if (s.runningState === 11) {\n      return makeError(s, -22);\n    }\n    if (s.runningState === 1) {\n      const /** @type {number} */ windowBits = decodeWindowBits(s);\n      if (windowBits === -1) {\n        return makeError(s, -11);\n      }\n      s.maxRingBufferSize = 1 << windowBits;\n      s.maxBackwardDistance = s.maxRingBufferSize - 16;\n      s.runningState = 2;\n    }\n    let /** @type {number} */ fence = calculateFence(s);\n    let /** @type {number} */ ringBufferMask = s.ringBufferSize - 1;\n    let /** @type {!Int8Array} */ ringBuffer = s.ringBuffer;\n    while (s.runningState !== 10) {\n      switch(s.runningState) {\n        case 2:\n          if (s.metaBlockLength < 0) {\n            return makeError(s, -10);\n          }\n          result = readNextMetablockHeader(s);\n          if (result < 0) {\n            return result;\n          }\n          fence = calculateFence(s);\n          ringBufferMask = s.ringBufferSize - 1;\n          ringBuffer = s.ringBuffer;\n          continue;\n        case 3:\n          result = readMetablockHuffmanCodesAndContextMaps(s);\n          if (result < 0) {\n            return result;\n          }\n          s.runningState = 4;\n          continue;\n        case 4:\n          if (s.metaBlockLength <= 0) {\n            s.runningState = 2;\n            continue;\n          }\n          if (s.halfOffset > 2030) {\n            result = readMoreInput(s);\n            if (result < 0) {\n              return result;\n            }\n          }\n          if (s.commandBlockLength === 0) {\n            decodeCommandBlockSwitch(s);\n          }\n          s.commandBlockLength--;\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          const /** @type {number} */ cmdCode = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2;\n          const /** @type {number} */ insertAndCopyExtraBits = CMD_LOOKUP[cmdCode];\n          const /** @type {number} */ insertLengthOffset = CMD_LOOKUP[cmdCode + 1];\n          const /** @type {number} */ copyLengthOffset = CMD_LOOKUP[cmdCode + 2];\n          s.distanceCode = CMD_LOOKUP[cmdCode + 3];\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          const /** @type {number} */ insertLengthExtraBits = insertAndCopyExtraBits & 0xFF;\n          s.insertLength = insertLengthOffset + ((insertLengthExtraBits <= 16) ? readFewBits(s, insertLengthExtraBits) : readManyBits(s, insertLengthExtraBits));\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          const /** @type {number} */ copyLengthExtraBits = insertAndCopyExtraBits >> 8;\n          s.copyLength = copyLengthOffset + ((copyLengthExtraBits <= 16) ? readFewBits(s, copyLengthExtraBits) : readManyBits(s, copyLengthExtraBits));\n          s.j = 0;\n          s.runningState = 7;\n          continue;\n        case 7:\n          if (s.trivialLiteralContext !== 0) {\n            while (s.j < s.insertLength) {\n              if (s.halfOffset > 2030) {\n                result = readMoreInput(s);\n                if (result < 0) {\n                  return result;\n                }\n              }\n              if (s.literalBlockLength === 0) {\n                decodeLiteralBlockSwitch(s);\n              }\n              s.literalBlockLength--;\n              if (s.bitOffset >= 16) {\n                s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                s.bitOffset -= 16;\n              }\n              ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s);\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 7;\n                s.runningState = 12;\n                break;\n              }\n            }\n          } else {\n            let /** @type {number} */ prevByte1 = ringBuffer[(s.pos - 1) & ringBufferMask] & 0xFF;\n            let /** @type {number} */ prevByte2 = ringBuffer[(s.pos - 2) & ringBufferMask] & 0xFF;\n            while (s.j < s.insertLength) {\n              if (s.halfOffset > 2030) {\n                result = readMoreInput(s);\n                if (result < 0) {\n                  return result;\n                }\n              }\n              if (s.literalBlockLength === 0) {\n                decodeLiteralBlockSwitch(s);\n              }\n              const /** @type {number} */ literalContext = LOOKUP[s.contextLookupOffset1 + prevByte1] | LOOKUP[s.contextLookupOffset2 + prevByte2];\n              const /** @type {number} */ literalTreeIdx = s.contextMap[s.contextMapSlice + literalContext] & 0xFF;\n              s.literalBlockLength--;\n              prevByte2 = prevByte1;\n              if (s.bitOffset >= 16) {\n                s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                s.bitOffset -= 16;\n              }\n              prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s);\n              ringBuffer[s.pos] = prevByte1;\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 7;\n                s.runningState = 12;\n                break;\n              }\n            }\n          }\n          if (s.runningState !== 7) {\n            continue;\n          }\n          s.metaBlockLength -= s.insertLength;\n          if (s.metaBlockLength <= 0) {\n            s.runningState = 4;\n            continue;\n          }\n          let /** @type {number} */ distanceCode = s.distanceCode;\n          if (distanceCode < 0) {\n            s.distance = s.rings[s.distRbIdx];\n          } else {\n            if (s.halfOffset > 2030) {\n              result = readMoreInput(s);\n              if (result < 0) {\n                return result;\n              }\n            }\n            if (s.distanceBlockLength === 0) {\n              decodeDistanceBlockSwitch(s);\n            }\n            s.distanceBlockLength--;\n            if (s.bitOffset >= 16) {\n              s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n              s.bitOffset -= 16;\n            }\n            const /** @type {number} */ distTreeIdx = s.distContextMap[s.distContextMapSlice + distanceCode] & 0xFF;\n            distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s);\n            if (distanceCode < 16) {\n              const /** @type {number} */ index = (s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]) & 0x3;\n              s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode];\n              if (s.distance < 0) {\n                return makeError(s, -12);\n              }\n            } else {\n              const /** @type {number} */ extraBits = s.distExtraBits[distanceCode];\n              let /** @type {number} */ bits;\n              if (s.bitOffset + extraBits <= 32) {\n                bits = readFewBits(s, extraBits);\n              } else {\n                if (s.bitOffset >= 16) {\n                  s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                  s.bitOffset -= 16;\n                }\n                bits = (extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits);\n              }\n              s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits);\n            }\n          }\n          if (s.maxDistance !== s.maxBackwardDistance && s.pos < s.maxBackwardDistance) {\n            s.maxDistance = s.pos;\n          } else {\n            s.maxDistance = s.maxBackwardDistance;\n          }\n          if (s.distance > s.maxDistance) {\n            s.runningState = 9;\n            continue;\n          }\n          if (distanceCode > 0) {\n            s.distRbIdx = (s.distRbIdx + 1) & 0x3;\n            s.rings[s.distRbIdx] = s.distance;\n          }\n          if (s.copyLength > s.metaBlockLength) {\n            return makeError(s, -9);\n          }\n          s.j = 0;\n          s.runningState = 8;\n          continue;\n        case 8:\n          let /** @type {number} */ src = (s.pos - s.distance) & ringBufferMask;\n          let /** @type {number} */ dst = s.pos;\n          const /** @type {number} */ copyLength = s.copyLength - s.j;\n          const /** @type {number} */ srcEnd = src + copyLength;\n          const /** @type {number} */ dstEnd = dst + copyLength;\n          if ((srcEnd < ringBufferMask) && (dstEnd < ringBufferMask)) {\n            if (copyLength < 12 || (srcEnd > dst && dstEnd > src)) {\n              const /** @type {number} */ numQuads = (copyLength + 3) >> 2;\n              for (let /** @type {number} */ k = 0; k < numQuads; ++k) {\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n              }\n            } else {\n              ringBuffer.copyWithin(dst, src, srcEnd);\n            }\n            s.j += copyLength;\n            s.metaBlockLength -= copyLength;\n            s.pos += copyLength;\n          } else {\n            while (s.j < s.copyLength) {\n              ringBuffer[s.pos] = ringBuffer[(s.pos - s.distance) & ringBufferMask];\n              s.metaBlockLength--;\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 8;\n                s.runningState = 12;\n                break;\n              }\n            }\n          }\n          if (s.runningState === 8) {\n            s.runningState = 4;\n          }\n          continue;\n        case 9:\n          result = doUseDictionary(s, fence);\n          if (result < 0) {\n            return result;\n          }\n          continue;\n        case 14:\n          s.pos += copyFromCompoundDictionary(s, fence);\n          if (s.pos >= fence) {\n            s.nextRunningState = 14;\n            s.runningState = 12;\n            return 2;\n          }\n          s.runningState = 4;\n          continue;\n        case 5:\n          while (s.metaBlockLength > 0) {\n            if (s.halfOffset > 2030) {\n              result = readMoreInput(s);\n              if (result < 0) {\n                return result;\n              }\n            }\n            if (s.bitOffset >= 16) {\n              s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n              s.bitOffset -= 16;\n            }\n            readFewBits(s, 8);\n            s.metaBlockLength--;\n          }\n          s.runningState = 2;\n          continue;\n        case 6:\n          result = copyUncompressedData(s);\n          if (result < 0) {\n            return result;\n          }\n          continue;\n        case 12:\n          s.ringBufferBytesReady = Math.min(s.pos, s.ringBufferSize);\n          s.runningState = 13;\n          continue;\n        case 13:\n          result = writeRingBuffer(s);\n          if (result !== 0) {\n            return result;\n          }\n          if (s.pos >= s.maxBackwardDistance) {\n            s.maxDistance = s.maxBackwardDistance;\n          }\n          if (s.pos >= s.ringBufferSize) {\n            if (s.pos > s.ringBufferSize) {\n              ringBuffer.copyWithin(0, s.ringBufferSize, s.pos);\n            }\n            s.pos = s.pos & ringBufferMask;\n            s.ringBufferBytesWritten = 0;\n          }\n          s.runningState = s.nextRunningState;\n          continue;\n        default:\n          return makeError(s, -28);\n      }\n    }\n    if (s.runningState !== 10) {\n      return makeError(s, -29);\n    }\n    if (s.metaBlockLength < 0) {\n      return makeError(s, -10);\n    }\n    result = jumpToByteBoundary(s);\n    if (result !== 0) {\n      return result;\n    }\n    result = checkHealth(s, 1);\n    if (result !== 0) {\n      return result;\n    }\n    return 1;\n  }\n\n  /**\n   * @constructor\n   * @param {number} numTransforms\n   * @param {number} prefixSuffixLen\n   * @param {number} prefixSuffixCount\n   * @struct\n   */\n  function Transforms(numTransforms, prefixSuffixLen, prefixSuffixCount) {\n    /** @type {number} */\n    this.numTransforms = 0;\n    /** @type {!Int32Array} */\n    this.triplets = new Int32Array(0);\n    /** @type {!Int8Array} */\n    this.prefixSuffixStorage = new Int8Array(0);\n    /** @type {!Int32Array} */\n    this.prefixSuffixHeads = new Int32Array(0);\n    /** @type {!Int16Array} */\n    this.params = new Int16Array(0);\n    this.numTransforms = numTransforms;\n    this.triplets = new Int32Array(numTransforms * 3);\n    this.params = new Int16Array(numTransforms);\n    this.prefixSuffixStorage = new Int8Array(prefixSuffixLen);\n    this.prefixSuffixHeads = new Int32Array(prefixSuffixCount + 1);\n  }\n\n  /** @type {!Transforms} */\n  const RFC_TRANSFORMS = new Transforms(121, 167, 50);\n  /**\n   * @param {!Int8Array} prefixSuffix\n   * @param {!Int32Array} prefixSuffixHeads\n   * @param {!Int32Array} transforms\n   * @param {string} prefixSuffixSrc\n   * @param {string} transformsSrc\n   * @return {void}\n   */\n  function unpackTransforms(prefixSuffix, prefixSuffixHeads, transforms, prefixSuffixSrc, transformsSrc) {\n    const /** @type {!Int32Array} */ prefixSuffixBytes = toUtf8Runes(prefixSuffixSrc);\n    const /** @type {number} */ n = prefixSuffixBytes.length;\n    let /** @type {number} */ index = 1;\n    let /** @type {number} */ j = 0;\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      const /** @type {number} */ c = prefixSuffixBytes[i];\n      if (c === 35) {\n        prefixSuffixHeads[index++] = j;\n      } else {\n        prefixSuffix[j++] = c;\n      }\n    }\n    for (let /** @type {number} */ i = 0; i < 363; ++i) {\n      transforms[i] = transformsSrc.charCodeAt(i) - 32;\n    }\n  }\n  {\n    // typo:off\n    unpackTransforms(RFC_TRANSFORMS.prefixSuffixStorage, RFC_TRANSFORMS.prefixSuffixHeads, RFC_TRANSFORMS.triplets, \"# #s #, #e #.# the #.com/#\\xC2\\xA0# of # and # in # to #\\\"#\\\">#\\n#]# for # a # that #. # with #'# from # by #. The # on # as # is #ing #\\n\\t#:#ed #(# at #ly #=\\\"# of the #. This #,# not #er #al #='#ful #ive #less #est #ize #ous #\", \"     !! ! ,  *!  &!  \\\" !  ) *   * -  ! # !  #!*!  +  ,$ !  -  %  .  / #   0  1 .  \\\"   2  3!*   4%  ! # /   5  6  7  8 0  1 &   $   9 +   :  ;  < '  !=  >  ?! 4  @ 4  2  &   A *# (   B  C& ) %  ) !*# *-% A +! *.  D! %'  & E *6  F  G% ! *A *%  H! D  I!+!  J!+   K +- *4! A  L!*4  M  N +6  O!*% +.! K *G  P +%(  ! G *D +D  Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K\");\n    // typo:on\n  }\n  /**\n   * @param {!Int8Array} dst\n   * @param {number} dstOffset\n   * @param {!Int8Array} src\n   * @param {number} srcOffset\n   * @param {number} wordLen\n   * @param {!Transforms} transforms\n   * @param {number} transformIndex\n   * @return {number}\n   */\n  function transformDictionaryWord(dst, dstOffset, src, srcOffset, wordLen, transforms, transformIndex) {\n    let /** @type {number} */ offset = dstOffset;\n    const /** @type {!Int32Array} */ triplets = transforms.triplets;\n    const /** @type {!Int8Array} */ prefixSuffixStorage = transforms.prefixSuffixStorage;\n    const /** @type {!Int32Array} */ prefixSuffixHeads = transforms.prefixSuffixHeads;\n    const /** @type {number} */ transformOffset = 3 * transformIndex;\n    const /** @type {number} */ prefixIdx = triplets[transformOffset];\n    const /** @type {number} */ transformType = triplets[transformOffset + 1];\n    const /** @type {number} */ suffixIdx = triplets[transformOffset + 2];\n    let /** @type {number} */ prefix = prefixSuffixHeads[prefixIdx];\n    const /** @type {number} */ prefixEnd = prefixSuffixHeads[prefixIdx + 1];\n    let /** @type {number} */ suffix = prefixSuffixHeads[suffixIdx];\n    const /** @type {number} */ suffixEnd = prefixSuffixHeads[suffixIdx + 1];\n    let /** @type {number} */ omitFirst = transformType - 11;\n    let /** @type {number} */ omitLast = transformType;\n    if (omitFirst < 1 || omitFirst > 9) {\n      omitFirst = 0;\n    }\n    if (omitLast < 1 || omitLast > 9) {\n      omitLast = 0;\n    }\n    while (prefix !== prefixEnd) {\n      dst[offset++] = prefixSuffixStorage[prefix++];\n    }\n    let /** @type {number} */ len = wordLen;\n    if (omitFirst > len) {\n      omitFirst = len;\n    }\n    let /** @type {number} */ dictOffset = srcOffset + omitFirst;\n    len -= omitFirst;\n    len -= omitLast;\n    let /** @type {number} */ i = len;\n    while (i > 0) {\n      dst[offset++] = src[dictOffset++];\n      i--;\n    }\n    if (transformType === 10 || transformType === 11) {\n      let /** @type {number} */ uppercaseOffset = offset - len;\n      if (transformType === 10) {\n        len = 1;\n      }\n      while (len > 0) {\n        const /** @type {number} */ c0 = dst[uppercaseOffset] & 0xFF;\n        if (c0 < 0xC0) {\n          if (c0 >= 97 && c0 <= 122) {\n            dst[uppercaseOffset] = dst[uppercaseOffset] ^ 32;\n          }\n          uppercaseOffset += 1;\n          len -= 1;\n        } else if (c0 < 0xE0) {\n          dst[uppercaseOffset + 1] = dst[uppercaseOffset + 1] ^ 32;\n          uppercaseOffset += 2;\n          len -= 2;\n        } else {\n          dst[uppercaseOffset + 2] = dst[uppercaseOffset + 2] ^ 5;\n          uppercaseOffset += 3;\n          len -= 3;\n        }\n      }\n    } else if (transformType === 21 || transformType === 22) {\n      let /** @type {number} */ shiftOffset = offset - len;\n      const /** @type {number} */ param = transforms.params[transformIndex];\n      let /** @type {number} */ scalar = (param & 0x7FFF) + (0x1000000 - (param & 0x8000));\n      while (len > 0) {\n        let /** @type {number} */ step = 1;\n        const /** @type {number} */ c0 = dst[shiftOffset] & 0xFF;\n        if (c0 < 0x80) {\n          scalar += c0;\n          dst[shiftOffset] = scalar & 0x7F;\n        } else if (c0 < 0xC0) {\n        } else if (c0 < 0xE0) {\n          if (len >= 2) {\n            const /** @type {number} */ c1 = dst[shiftOffset + 1];\n            scalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6);\n            dst[shiftOffset] = 0xC0 | ((scalar >> 6) & 0x1F);\n            dst[shiftOffset + 1] = (c1 & 0xC0) | (scalar & 0x3F);\n            step = 2;\n          } else {\n            step = len;\n          }\n        } else if (c0 < 0xF0) {\n          if (len >= 3) {\n            const /** @type {number} */ c1 = dst[shiftOffset + 1];\n            const /** @type {number} */ c2 = dst[shiftOffset + 2];\n            scalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12);\n            dst[shiftOffset] = 0xE0 | ((scalar >> 12) & 0x0F);\n            dst[shiftOffset + 1] = (c1 & 0xC0) | ((scalar >> 6) & 0x3F);\n            dst[shiftOffset + 2] = (c2 & 0xC0) | (scalar & 0x3F);\n            step = 3;\n          } else {\n            step = len;\n          }\n        } else if (c0 < 0xF8) {\n          if (len >= 4) {\n            const /** @type {number} */ c1 = dst[shiftOffset + 1];\n            const /** @type {number} */ c2 = dst[shiftOffset + 2];\n            const /** @type {number} */ c3 = dst[shiftOffset + 3];\n            scalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18);\n            dst[shiftOffset] = 0xF0 | ((scalar >> 18) & 0x07);\n            dst[shiftOffset + 1] = (c1 & 0xC0) | ((scalar >> 12) & 0x3F);\n            dst[shiftOffset + 2] = (c2 & 0xC0) | ((scalar >> 6) & 0x3F);\n            dst[shiftOffset + 3] = (c3 & 0xC0) | (scalar & 0x3F);\n            step = 4;\n          } else {\n            step = len;\n          }\n        }\n        shiftOffset += step;\n        len -= step;\n        if (transformType === 21) {\n          len = 0;\n        }\n      }\n    }\n    while (suffix !== suffixEnd) {\n      dst[offset++] = prefixSuffixStorage[suffix++];\n    }\n    return offset - dstOffset;\n  }\n\n  /**\n   * @param {number} key\n   * @param {number} len\n   * @return {number}\n   */\n  function getNextKey(key, len) {\n    let /** @type {number} */ step = 1 << (len - 1);\n    while ((key & step) !== 0) {\n      step = step >> 1;\n    }\n    return (key & (step - 1)) + step;\n  }\n  /**\n   * @param {!Int32Array} table\n   * @param {number} offset\n   * @param {number} step\n   * @param {number} end\n   * @param {number} item\n   * @return {void}\n   */\n  function replicateValue(table, offset, step, end, item) {\n    let /** @type {number} */ pos = end;\n    while (pos > 0) {\n      pos -= step;\n      table[offset + pos] = item;\n    }\n  }\n  /**\n   * @param {!Int32Array} count\n   * @param {number} len\n   * @param {number} rootBits\n   * @return {number}\n   */\n  function nextTableBitSize(count, len, rootBits) {\n    let /** @type {number} */ bits = len;\n    let /** @type {number} */ left = 1 << (bits - rootBits);\n    while (bits < 15) {\n      left -= count[bits];\n      if (left <= 0) {\n        break;\n      }\n      bits++;\n      left = left << 1;\n    }\n    return bits - rootBits;\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {number} rootBits\n   * @param {!Int32Array} codeLengths\n   * @param {number} codeLengthsSize\n   * @return {number}\n   */\n  function buildHuffmanTable(tableGroup, tableIdx, rootBits, codeLengths, codeLengthsSize) {\n    const /** @type {number} */ tableOffset = tableGroup[tableIdx];\n    const /** @type {!Int32Array} */ sorted = new Int32Array(codeLengthsSize);\n    const /** @type {!Int32Array} */ count = new Int32Array(16);\n    const /** @type {!Int32Array} */ offset = new Int32Array(16);\n    for (let /** @type {number} */ sym = 0; sym < codeLengthsSize; ++sym) {\n      count[codeLengths[sym]]++;\n    }\n    offset[1] = 0;\n    for (let /** @type {number} */ len = 1; len < 15; ++len) {\n      offset[len + 1] = offset[len] + count[len];\n    }\n    for (let /** @type {number} */ sym = 0; sym < codeLengthsSize; ++sym) {\n      if (codeLengths[sym] !== 0) {\n        sorted[offset[codeLengths[sym]]++] = sym;\n      }\n    }\n    let /** @type {number} */ tableBits = rootBits;\n    let /** @type {number} */ tableSize = 1 << tableBits;\n    let /** @type {number} */ totalSize = tableSize;\n    if (offset[15] === 1) {\n      for (let /** @type {number} */ k = 0; k < totalSize; ++k) {\n        tableGroup[tableOffset + k] = sorted[0];\n      }\n      return totalSize;\n    }\n    let /** @type {number} */ key = 0;\n    let /** @type {number} */ symbol = 0;\n    let /** @type {number} */ step = 1;\n    for (let /** @type {number} */ len = 1; len <= rootBits; ++len) {\n      step = step << 1;\n      while (count[len] > 0) {\n        replicateValue(tableGroup, tableOffset + key, step, tableSize, len << 16 | sorted[symbol++]);\n        key = getNextKey(key, len);\n        count[len]--;\n      }\n    }\n    const /** @type {number} */ mask = totalSize - 1;\n    let /** @type {number} */ low = -1;\n    let /** @type {number} */ currentOffset = tableOffset;\n    step = 1;\n    for (let /** @type {number} */ len = rootBits + 1; len <= 15; ++len) {\n      step = step << 1;\n      while (count[len] > 0) {\n        if ((key & mask) !== low) {\n          currentOffset += tableSize;\n          tableBits = nextTableBitSize(count, len, rootBits);\n          tableSize = 1 << tableBits;\n          totalSize += tableSize;\n          low = key & mask;\n          tableGroup[tableOffset + low] = (tableBits + rootBits) << 16 | (currentOffset - tableOffset - low);\n        }\n        replicateValue(tableGroup, currentOffset + (key >> rootBits), step, tableSize, (len - rootBits) << 16 | sorted[symbol++]);\n        key = getNextKey(key, len);\n        count[len]--;\n      }\n    }\n    return totalSize;\n  }\n\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function readMoreInput(s) {\n    if (s.endOfStreamReached !== 0) {\n      if (halfAvailable(s) >= -2) {\n        return 0;\n      }\n      return makeError(s, -16);\n    }\n    const /** @type {number} */ readOffset = s.halfOffset << 1;\n    let /** @type {number} */ bytesInBuffer = 4096 - readOffset;\n    s.byteBuffer.copyWithin(0, readOffset, 4096);\n    s.halfOffset = 0;\n    while (bytesInBuffer < 4096) {\n      const /** @type {number} */ spaceLeft = 4096 - bytesInBuffer;\n      const /** @type {number} */ len = readInput(s, s.byteBuffer, bytesInBuffer, spaceLeft);\n      if (len < -1) {\n        return len;\n      }\n      if (len <= 0) {\n        s.endOfStreamReached = 1;\n        s.tailBytes = bytesInBuffer;\n        bytesInBuffer += 1;\n        break;\n      }\n      bytesInBuffer += len;\n    }\n    bytesToNibbles(s, bytesInBuffer);\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} endOfStream\n   * @return {number}\n   */\n  function checkHealth(s, endOfStream) {\n    if (s.endOfStreamReached === 0) {\n      return 0;\n    }\n    const /** @type {number} */ byteOffset = (s.halfOffset << 1) + ((s.bitOffset + 7) >> 3) - 4;\n    if (byteOffset > s.tailBytes) {\n      return makeError(s, -13);\n    }\n    if ((endOfStream !== 0) && (byteOffset !== s.tailBytes)) {\n      return makeError(s, -17);\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} n\n   * @return {number}\n   */\n  function readFewBits(s, n) {\n    const /** @type {number} */ v = (s.accumulator32 >>> s.bitOffset) & ((1 << n) - 1);\n    s.bitOffset += n;\n    return v;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} n\n   * @return {number}\n   */\n  function readManyBits(s, n) {\n    const /** @type {number} */ low = readFewBits(s, 16);\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n    return low | (readFewBits(s, n - 16) << 16);\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function initBitReader(s) {\n    s.byteBuffer = new Int8Array(4160);\n    s.accumulator32 = 0;\n    s.shortBuffer = new Int16Array(2080);\n    s.bitOffset = 32;\n    s.halfOffset = 2048;\n    s.endOfStreamReached = 0;\n    return prepare(s);\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function prepare(s) {\n    if (s.halfOffset > 2030) {\n      const /** @type {number} */ result = readMoreInput(s);\n      if (result !== 0) {\n        return result;\n      }\n    }\n    let /** @type {number} */ health = checkHealth(s, 0);\n    if (health !== 0) {\n      return health;\n    }\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function reload(s) {\n    if (s.bitOffset === 32) {\n      return prepare(s);\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function jumpToByteBoundary(s) {\n    const /** @type {number} */ padding = (32 - s.bitOffset) & 7;\n    if (padding !== 0) {\n      const /** @type {number} */ paddingBits = readFewBits(s, padding);\n      if (paddingBits !== 0) {\n        return makeError(s, -5);\n      }\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function halfAvailable(s) {\n    let /** @type {number} */ limit = 2048;\n    if (s.endOfStreamReached !== 0) {\n      limit = (s.tailBytes + 1) >> 1;\n    }\n    return limit - s.halfOffset;\n  }\n  /**\n   * @param {!State} s\n   * @param {!Int8Array} data\n   * @param {number} offset\n   * @param {number} length\n   * @return {number}\n   */\n  function copyRawBytes(s, data, offset, length) {\n    let /** @type {number} */ pos = offset;\n    let /** @type {number} */ len = length;\n    if ((s.bitOffset & 7) !== 0) {\n      return makeError(s, -30);\n    }\n    while ((s.bitOffset !== 32) && (len !== 0)) {\n      data[pos++] = s.accumulator32 >>> s.bitOffset;\n      s.bitOffset += 8;\n      len--;\n    }\n    if (len === 0) {\n      return 0;\n    }\n    const /** @type {number} */ copyNibbles = Math.min(halfAvailable(s), len >> 1);\n    if (copyNibbles > 0) {\n      const /** @type {number} */ readOffset = s.halfOffset << 1;\n      const /** @type {number} */ delta = copyNibbles << 1;\n      data.set(s.byteBuffer.subarray(readOffset, readOffset + delta), pos);\n      pos += delta;\n      len -= delta;\n      s.halfOffset += copyNibbles;\n    }\n    if (len === 0) {\n      return 0;\n    }\n    if (halfAvailable(s) > 0) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      while (len !== 0) {\n        data[pos++] = s.accumulator32 >>> s.bitOffset;\n        s.bitOffset += 8;\n        len--;\n      }\n      return checkHealth(s, 0);\n    }\n    while (len > 0) {\n      const /** @type {number} */ chunkLen = readInput(s, data, pos, len);\n      if (chunkLen < -1) {\n        return chunkLen;\n      }\n      if (chunkLen <= 0) {\n        return makeError(s, -16);\n      }\n      pos += chunkLen;\n      len -= chunkLen;\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} byteLen\n   * @return {void}\n   */\n  function bytesToNibbles(s, byteLen) {\n    const /** @type {!Int8Array} */ byteBuffer = s.byteBuffer;\n    const /** @type {number} */ halfLen = byteLen >> 1;\n    const /** @type {!Int16Array} */ shortBuffer = s.shortBuffer;\n    for (let /** @type {number} */ i = 0; i < halfLen; ++i) {\n      shortBuffer[i] = (byteBuffer[i * 2] & 0xFF) | ((byteBuffer[(i * 2) + 1] & 0xFF) << 8);\n    }\n  }\n\n  /** @type {!Int32Array} */\n  const LOOKUP = new Int32Array(2048);\n  /**\n   * @param {!Int32Array} lookup\n   * @param {string} utfMap\n   * @param {string} utfRle\n   * @return {void}\n   */\n  function unpackLookupTable(lookup, utfMap, utfRle) {\n    for (let /** @type {number} */ i = 0; i < 256; ++i) {\n      lookup[i] = i & 0x3F;\n      lookup[512 + i] = i >> 2;\n      lookup[1792 + i] = 2 + (i >> 6);\n    }\n    for (let /** @type {number} */ i = 0; i < 128; ++i) {\n      lookup[1024 + i] = 4 * (utfMap.charCodeAt(i) - 32);\n    }\n    for (let /** @type {number} */ i = 0; i < 64; ++i) {\n      lookup[1152 + i] = i & 1;\n      lookup[1216 + i] = 2 + (i & 1);\n    }\n    let /** @type {number} */ offset = 1280;\n    for (let /** @type {number} */ k = 0; k < 19; ++k) {\n      const /** @type {number} */ value = k & 3;\n      const /** @type {number} */ rep = utfRle.charCodeAt(k) - 32;\n      for (let /** @type {number} */ i = 0; i < rep; ++i) {\n        lookup[offset++] = value;\n      }\n    }\n    for (let /** @type {number} */ i = 0; i < 16; ++i) {\n      lookup[1792 + i] = 1;\n      lookup[2032 + i] = 6;\n    }\n    lookup[1792] = 0;\n    lookup[2047] = 7;\n    for (let /** @type {number} */ i = 0; i < 256; ++i) {\n      lookup[1536 + i] = lookup[1792 + i] << 3;\n    }\n  }\n  {\n    unpackLookupTable(LOOKUP, \"         !!  !                  \\\"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# \", \"A/*  ':  & : $  \\x81 @\");\n  }\n\n  /**\n   * @constructor\n   * @struct\n   */\n  function State() {\n    /** @type {!Int8Array} */\n    this.ringBuffer = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.contextModes = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.contextMap = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.distContextMap = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.distExtraBits = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.output = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.byteBuffer = new Int8Array(0);\n    /** @type {!Int16Array} */\n    this.shortBuffer = new Int16Array(0);\n    /** @type {!Int32Array} */\n    this.intBuffer = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.rings = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.blockTrees = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.literalTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.commandTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.distanceTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.distOffset = new Int32Array(0);\n    /** @type {number} */\n    this.accumulator64 = 0;\n    /** @type {number} */\n    this.runningState = 0;\n    /** @type {number} */\n    this.nextRunningState = 0;\n    /** @type {number} */\n    this.accumulator32 = 0;\n    /** @type {number} */\n    this.bitOffset = 0;\n    /** @type {number} */\n    this.halfOffset = 0;\n    /** @type {number} */\n    this.tailBytes = 0;\n    /** @type {number} */\n    this.endOfStreamReached = 0;\n    /** @type {number} */\n    this.metaBlockLength = 0;\n    /** @type {number} */\n    this.inputEnd = 0;\n    /** @type {number} */\n    this.isUncompressed = 0;\n    /** @type {number} */\n    this.isMetadata = 0;\n    /** @type {number} */\n    this.literalBlockLength = 0;\n    /** @type {number} */\n    this.numLiteralBlockTypes = 0;\n    /** @type {number} */\n    this.commandBlockLength = 0;\n    /** @type {number} */\n    this.numCommandBlockTypes = 0;\n    /** @type {number} */\n    this.distanceBlockLength = 0;\n    /** @type {number} */\n    this.numDistanceBlockTypes = 0;\n    /** @type {number} */\n    this.pos = 0;\n    /** @type {number} */\n    this.maxDistance = 0;\n    /** @type {number} */\n    this.distRbIdx = 0;\n    /** @type {number} */\n    this.trivialLiteralContext = 0;\n    /** @type {number} */\n    this.literalTreeIdx = 0;\n    /** @type {number} */\n    this.commandTreeIdx = 0;\n    /** @type {number} */\n    this.j = 0;\n    /** @type {number} */\n    this.insertLength = 0;\n    /** @type {number} */\n    this.contextMapSlice = 0;\n    /** @type {number} */\n    this.distContextMapSlice = 0;\n    /** @type {number} */\n    this.contextLookupOffset1 = 0;\n    /** @type {number} */\n    this.contextLookupOffset2 = 0;\n    /** @type {number} */\n    this.distanceCode = 0;\n    /** @type {number} */\n    this.numDirectDistanceCodes = 0;\n    /** @type {number} */\n    this.distancePostfixBits = 0;\n    /** @type {number} */\n    this.distance = 0;\n    /** @type {number} */\n    this.copyLength = 0;\n    /** @type {number} */\n    this.maxBackwardDistance = 0;\n    /** @type {number} */\n    this.maxRingBufferSize = 0;\n    /** @type {number} */\n    this.ringBufferSize = 0;\n    /** @type {number} */\n    this.expectedTotalSize = 0;\n    /** @type {number} */\n    this.outputOffset = 0;\n    /** @type {number} */\n    this.outputLength = 0;\n    /** @type {number} */\n    this.outputUsed = 0;\n    /** @type {number} */\n    this.ringBufferBytesWritten = 0;\n    /** @type {number} */\n    this.ringBufferBytesReady = 0;\n    /** @type {number} */\n    this.isEager = 0;\n    /** @type {number} */\n    this.isLargeWindow = 0;\n    /** @type {number} */\n    this.cdNumChunks = 0;\n    /** @type {number} */\n    this.cdTotalSize = 0;\n    /** @type {number} */\n    this.cdBrIndex = 0;\n    /** @type {number} */\n    this.cdBrOffset = 0;\n    /** @type {number} */\n    this.cdBrLength = 0;\n    /** @type {number} */\n    this.cdBrCopied = 0;\n    /** @type {!Array<?Int8Array>} */\n    this.cdChunks = new Array(0);\n    /** @type {!Int32Array} */\n    this.cdChunkOffsets = new Int32Array(0);\n    /** @type {number} */\n    this.cdBlockBits = 0;\n    /** @type {!Int8Array} */\n    this.cdBlockMap = new Int8Array(0);\n    /** @type {!InputStream} */\n    this.input = new InputStream(new Int8Array(0));\n    this.ringBuffer = new Int8Array(0);\n    this.rings = new Int32Array(10);\n    this.rings[0] = 16;\n    this.rings[1] = 15;\n    this.rings[2] = 11;\n    this.rings[3] = 4;\n  }\n\n  /** @type {!ByteBuffer} */\n  let data = new Int8Array(0);\n  /** @type {!Int32Array} */\n  const offsets = new Int32Array(32);\n  /** @type {!Int32Array} */\n  const sizeBits = new Int32Array(32);\n  /**\n   * @param {!Int8Array} newData\n   * @param {!Int32Array} newSizeBits\n   * @return {void}\n   */\n  function setData(newData, newSizeBits) {\n    const /** @type {!Int32Array} */ dictionaryOffsets = offsets;\n    const /** @type {!Int32Array} */ dictionarySizeBits = sizeBits;\n    for (let /** @type {number} */ i = 0; i < newSizeBits.length; ++i) {\n      dictionarySizeBits[i] = newSizeBits[i];\n    }\n    let /** @type {number} */ pos = 0;\n    for (let /** @type {number} */ i = 0; i < newSizeBits.length; ++i) {\n      dictionaryOffsets[i] = pos;\n      const /** @type {number} */ bits = dictionarySizeBits[i];\n      if (bits !== 0) {\n        pos += i << (bits & 31);\n      }\n    }\n    for (let /** @type {number} */ i = newSizeBits.length; i < 32; ++i) {\n      dictionaryOffsets[i] = pos;\n    }\n    data = newData;\n  }\n\n  /**\n   * @param {!Int8Array} dictionary\n   * @param {string} data0\n   * @param {string} data1\n   * @param {string} skipFlip\n   * @param {!Int32Array} sizeBits\n   * @param {string} sizeBitsData\n   * @return {void}\n   */\n  function unpackDictionaryData(dictionary, data0, data1, skipFlip, sizeBits, sizeBitsData) {\n    const /** @type {!Int8Array} */ dict = toUsAsciiBytes(data0 + data1);\n    const /** @type {!Int32Array} */ skipFlipRunes = toUtf8Runes(skipFlip);\n    let /** @type {number} */ offset = 0;\n    const /** @type {number} */ n = skipFlipRunes.length >> 1;\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      const /** @type {number} */ skip = skipFlipRunes[2 * i] - 36;\n      const /** @type {number} */ flip = skipFlipRunes[2 * i + 1] - 36;\n      for (let /** @type {number} */ j = 0; j < skip; ++j) {\n        dict[offset] = dict[offset] ^ 3;\n        offset++;\n      }\n      for (let /** @type {number} */ j = 0; j < flip; ++j) {\n        dict[offset] = dict[offset] ^ 236;\n        offset++;\n      }\n    }\n    for (let /** @type {number} */ i = 0; i < sizeBitsData.length; ++i) {\n      sizeBits[i] = sizeBitsData.charCodeAt(i) - 65;\n    }\n    dictionary.set(dict);\n  }\n  {\n    const /** @type {!ByteBuffer} */ dictionaryData = new Int8Array(122784);\n    const /** @type {!Int32Array} */ dictionarySizeBits = new Int32Array(25);\n    // typo:off\n    unpackDictionaryData(dictionaryData, \"wjnfgltmojefofewab`h`lgfgbwbpkltlmozpjwf`jwzlsfmivpwojhfeqfftlqhwf{wzfbqlufqalgzolufelqnallhsobzojufojmfkfosklnfpjgfnlqftlqgolmdwkfnujftejmgsbdfgbzpevookfbgwfqnfb`kbqfbeqlnwqvfnbqhbaofvslmkjdkgbwfobmgmftpfufmmf{w`bpfalwkslpwvpfgnbgfkbmgkfqftkbwmbnfOjmhaoldpjyfabpfkfognbhfnbjmvpfq$*#(klogfmgptjwkMftpqfbgtfqfpjdmwbhfkbufdbnfpffm`boosbwktfoosovpnfmvejonsbqwiljmwkjpojpwdllgmffgtbzptfpwilapnjmgboploldlqj`kvpfpobpwwfbnbqnzellghjmdtjoofbpwtbqgafpwejqfSbdfhmltbtbz-smdnlufwkbmolbgdjufpfoemlwfnv`keffgnbmzql`hj`lmlm`follhkjgfgjfgKlnfqvofklpwbib{jmel`ovaobtpofppkboeplnfpv`kylmf233&lmfp`bqfWjnfqb`faovfelvqtffheb`fklsfdbufkbqgolpwtkfmsbqhhfswsbpppkjsqllnKWNOsobmWzsfglmfpbufhffseobdojmhplogejufwllhqbwfwltmivnswkvpgbqh`bqgejofefbqpwbzhjoowkbweboobvwlfufq-`lnwbohpklsulwfgffsnlgfqfpwwvqmalqmabmgefooqlpfvqo+phjmqlof`lnfb`wpbdfpnffwdlog-isdjwfnubqzefowwkfmpfmggqlsUjft`lsz2-3!?,b=pwlsfopfojfpwlvqsb`h-djesbpw`pp<dqbznfbm%dw8qjgfpklwobwfpbjgqlbgubq#effoilkmqj`hslqwebpw$VB.gfbg?,a=sllqajoowzsfV-P-tllgnvpw1s{8JmelqbmhtjgftbmwtbooofbgX3^8sbvotbufpvqf'+$ tbjwnbppbqnpdlfpdbjmobmdsbjg\\\"..#ol`hvmjwqllwtbohejqntjef{no!plmdwfpw13s{hjmgqltpwlloelmwnbjopbefpwbqnbsp`lqfqbjmeoltabazpsbmpbzp7s{85s{8bqwpellwqfbotjhjkfbwpwfswqjslqd,obhftfbhwlogElqn`bpwebmpabmhufqzqvmpivozwbph2s{8dlbodqftpoltfgdfjg>!pfwp6s{8-ip<73s{je#+pllmpfbwmlmfwvafyfqlpfmwqffgeb`wjmwldjewkbqn2;s{`bnfkjooalogyllnuljgfbpzqjmdejoosfbhjmjw`lpw0s{8ib`hwbdpajwpqloofgjwhmftmfbq?\\\"..dqltIPLMgvwzMbnfpbofzlv#olwpsbjmibyy`logfzfpejpkttt-qjphwbapsqfu23s{qjpf16s{Aovfgjmd033/abooelqgfbqmtjogal{-ebjqob`hufqpsbjqivmfwf`kje+\\\"sj`hfujo'+! tbqnolqgglfpsvoo/333jgfbgqbtkvdfpslwevmgavqmkqfe`foohfzpwj`hklvqolppevfo21s{pvjwgfboQPP!bdfgdqfzDFW!fbpfbjnpdjqobjgp;s{8mbuzdqjgwjsp :::tbqpobgz`bqp*8#~sks<kfoowbootklnyk9\\t),\\x0E\\t#233kboo-\\t\\tB4s{8svpk`kbw3s{8`qft),?,kbpk46s{eobwqbqf#%%#wfoo`bnslmwlobjgnjppphjswfmwejmfnbofdfwpsolw733/\\x0E\\t\\x0E\\t`lloeffw-sks?aq=fqj`nlpwdvjgafoogfp`kbjqnbwkbwln,jnd% ;1ov`h`fmw3338wjmzdlmfkwnopfoogqvdEQFFmlgfmj`h<jg>olpfmvooubpwtjmgQPP#tfbqqfozaffmpbnfgvhfmbpb`bsftjpkdvoeW109kjwppolwdbwfhj`haovqwkfz26s{$$*8*8!=npjftjmpajqgplqwafwbpffhW2;9lqgpwqffnboo53s{ebqn\\x0ElupalzpX3^-$*8!SLPWafbqhjgp*8~~nbqzwfmg+VH*rvbgyk9\\n.pjy....sqls$*8\\x0EojewW2:9uj`fbmgzgfaw=QPPsllomf`haoltW259gllqfuboW249ofwpebjolqbosloomlub`lopdfmf#\\x0Elxplewqlnfwjooqlpp?k0=slvqebgfsjmh?wq=njmj*\\x7F\\\"+njmfyk9\\x04abqpkfbq33*8njoh#..=jqlmeqfggjphtfmwpljosvwp,ip,klozW119JPAMW139bgbnpffp?k1=iplm$/#$`lmwW129#QPPollsbpjbnllm?,s=plvoOJMFelqw`bqwW279?k2=;3s{\\\"..?:s{8W379njhf975Ymj`fjm`kZlqhqj`fyk9\\b$**8svqfnbdfsbqbwlmfalmg904Y\\\\le\\\\$^*8333/yk9\\x0Bwbmhzbqgaltoavpk965YIbub03s{\\t\\x7F~\\t&@0&907YifeeF[SJ`bpkujpbdloepmltyk9\\x05rvfq-`pppj`hnfbwnjm-ajmggfookjqfsj`pqfmw905YKWWS.132elwltloeFMG#{al{967YALGZgj`h8\\t~\\tf{jw906Yubqpafbw$~*8gjfw:::8bmmf~~?,Xj^-Obmdhn.^tjqfwlzpbggppfbobof{8\\t\\n~f`klmjmf-lqd336*wlmziftppbmgofdpqlle333*#133tjmfdfbqgldpallwdbqz`vwpwzofwfnswjlm-{no`l`hdbmd'+$-63s{Sk-Gnjp`bobmolbmgfphnjofqzbmvmj{gjp`*8~\\tgvpw`ojs*-\\t\\t43s{.133GUGp4^=?wbsfgfnlj((*tbdffvqlskjolswpklofEBRpbpjm.15WobapsfwpVQO#avoh`llh8~\\x0E\\tKFBGX3^*baaqivbm+2:;ofpkwtjm?,j=plmzdvzpev`hsjsf\\x7F.\\t\\\"331*mgltX2^8X^8\\tOld#pbow\\x0E\\t\\n\\nabmdwqjnabwk*x\\x0E\\t33s{\\t~*8hl9\\0effpbg=\\x0Ep9,,#X^8wloosovd+*x\\tx\\x0E\\t#-ip$133sgvboalbw-ISD*8\\t~rvlw*8\\t\\t$*8\\t\\x0E\\t~\\x0E1327132613251324132;132:13131312131113101317131613151314131;131:130313021301130013071306130513041320132113221323133:133;133413351336133713301331133213332:::2::;2::42::52::62::72::02::12::22::32:;:2:;;2:;42:;52:;62:;72:;02:;12:;22:;32:4:2:4;2:442:452:462:472:402:412:422:432:5:2:5;2:542:552:562:572:502:512:522:532:6:2:6;2:642:652:662:672:602:612:622:632333231720:73333::::`lnln/Mpfpwffpwbsfqlwlglkb`f`bgbb/]lajfmg/Abbp/Aujgb`bpllwqlelqlplollwqb`vbogjilpjgldqbmwjslwfnbgfafbodlrv/Efpwlmbgbwqfpsl`l`bpbabilwlgbpjmlbdvbsvfpvmlpbmwfgj`fovjpfoobnbzlylmbbnlqsjpllaqb`oj`foolgjlpklqb`bpj<[<\\\\<Q<\\\\<R<P=l<\\\\=l=o=n<\\\\<Q<Y<S<R<R=n<T<[<Q<R<X<R=n<R<Z<Y<R<Q<T=i<q<\\\\<Y<Y<]=g<P=g<~=g=m<R<^=g<^<R<q<R<R<]<s<R<W<T<Q<T<L<H<q<Y<p=g=n=g<r<Q<T<P<X<\\\\<{<\\\\<x<\\\\<q=o<r<]=n<Y<t<[<Y<U<Q=o<P<P<N=g=o<Z5m5f4O5j5i4K5i4U5o5h4O5d4]4C5f4K5m5e5k5d5h5i5h5o4K5d5h5k4D4_4K5h4I5j5k5f4O5f5n4C5k5h4G5i4D5k5h5d5h5f4D5h4K5f4D5o4X5f4K5i4O5i5j4F4D5f5h5j4A4D5k5i5i4X5d4Xejqpwujgflojdkwtlqognfgjbtkjwf`olpfaob`hqjdkwpnbooallhpsob`fnvpj`ejfoglqgfqsljmwubovfofufowbaofalbqgklvpfdqlvstlqhpzfbqppwbwfwlgbztbwfqpwbqwpwzofgfbwksltfqsklmfmjdkwfqqlqjmsvwbalvwwfqnpwjwofwllopfufmwol`bowjnfpobqdftlqgpdbnfppklqwpsb`fel`vp`ofbqnlgfoaol`hdvjgfqbgjlpkbqftlnfmbdbjmnlmfzjnbdfmbnfpzlvmdojmfpobwfq`lolqdqffmeqlmw%bns8tbw`kelq`fsqj`fqvofpafdjmbewfqujpjwjppvfbqfbpafoltjmgf{wlwboklvqpobafosqjmwsqfppavjowojmhppsffgpwvgzwqbgfelvmgpfmpfvmgfqpkltmelqnpqbmdfbggfgpwjoonlufgwbhfmbalufeobpkej{fglewfmlwkfqujftp`kf`hofdboqjufqjwfnprvj`hpkbsfkvnbmf{jpwdljmdnlujfwkjqgabpj`sfb`fpwbdftjgwkoldjmjgfbptqlwfsbdfpvpfqpgqjufpwlqfaqfbhplvwkulj`fpjwfpnlmwktkfqfavjogtkj`kfbqwkelqvnwkqffpslqwsbqwz@oj`holtfqojufp`obppobzfqfmwqzpwlqzvpbdfplvmg`lvqwzlvq#ajqwkslsvswzsfpbssozJnbdfafjmdvssfqmlwfpfufqzpkltpnfbmpf{wqbnbw`kwqb`hhmltmfbqozafdbmpvsfqsbsfqmlqwkofbqmdjufmmbnfgfmgfgWfqnpsbqwpDqlvsaqbmgvpjmdtlnbmebopfqfbgzbvgjlwbhfptkjof-`ln,ojufg`bpfpgbjoz`kjogdqfbwivgdfwklpfvmjwpmfufqaqlbg`lbpw`lufqbssofejofp`z`ofp`fmfsobmp`oj`htqjwfrvffmsjf`ffnbjoeqbnflogfqsklwlojnjw`b`kf`jujop`boffmwfqwkfnfwkfqfwlv`kalvmgqlzbobphfgtklofpjm`fpwl`h#mbnfebjwkkfbqwfnswzleefqp`lsfltmfgnjdkwboavnwkjmhaollgbqqbznbilqwqvpw`bmlmvmjlm`lvmwubojgpwlmfPwzofOldjmkbsszl``vqofew9eqfpkrvjwfejonpdqbgfmffgpvqabmejdkwabpjpklufqbvwl8qlvwf-kwnonj{fgejmboZlvq#pojgfwlsj`aqltmbolmfgqbtmpsojwqfb`kQjdkwgbwfpnbq`krvlwfdllgpOjmhpglvawbpzm`wkvnaboolt`kjfezlvwkmlufo23s{8pfqufvmwjokbmgp@kf`hPsb`frvfqzibnfpfrvbowtj`f3/333Pwbqwsbmfoplmdpqlvmgfjdkwpkjewtlqwkslpwpofbgptffhpbuljgwkfpfnjofpsobmfpnbqwboskbsobmwnbqhpqbwfpsobzp`objnpbofpwf{wppwbqptqlmd?,k0=wkjmd-lqd,nvowjkfbqgSltfqpwbmgwlhfmplojg+wkjpaqjmdpkjsppwbeewqjfg`boopevoozeb`wpbdfmwWkjp#,,..=bgnjmfdzswFufmw26s{8Fnbjowqvf!`qlpppsfmwaoldpal{!=mlwfgofbuf`kjmbpjyfpdvfpw?,k7=qlalwkfbuzwqvf/pfufmdqbmg`qjnfpjdmpbtbqfgbm`fskbpf=?\\\"..fm\\\\VP% 0:8133s{\\\\mbnfobwjmfmilzbib{-bwjlmpnjwkV-P-#klogpsfwfqjmgjbmbu!=`kbjmp`lqf`lnfpgljmdsqjlqPkbqf2::3pqlnbmojpwpibsbmeboopwqjboltmfqbdqff?,k1=bavpfbofqwlsfqb!.,,T`bqgpkjoopwfbnpSklwlwqvwk`ofbm-sks<pbjmwnfwboolvjpnfbmwsqlleaqjfeqlt!=dfmqfwqv`hollhpUbovfEqbnf-mfw,..=\\t?wqz#x\\tubq#nbhfp`lpwpsobjmbgvowrvfpwwqbjmobalqkfosp`bvpfnbdj`nlwlqwkfjq163s{ofbpwpwfsp@lvmw`lvogdobpppjgfpevmgpklwfobtbqgnlvwknlufpsbqjpdjufpgvw`kwf{bpeqvjwmvoo/\\x7F\\x7FX^8wls!=\\t?\\\"..SLPW!l`fbm?aq,=eollqpsfbhgfswk#pjyfabmhp`bw`k`kbqw13s{8bojdmgfboptlvog63s{8vqo>!sbqhpnlvpfNlpw#---?,bnlmdaqbjmalgz#mlmf8abpfg`bqqzgqbewqfefqsbdf\\\\klnf-nfwfqgfobzgqfbnsqlufiljmw?,wq=gqvdp?\\\"..#bsqjojgfboboofmf{b`welqwk`lgfpoldj`Ujft#pffnpaobmhslqwp#+133pbufg\\\\ojmhdlbopdqbmwdqffhklnfpqjmdpqbwfg03s{8tklpfsbqpf+*8!#Aol`hojmv{ilmfpsj{fo$*8!=*8je+.ofewgbujgklqpfEl`vpqbjpfal{fpWqb`hfnfmw?,fn=abq!=-pq`>wltfqbow>!`baofkfmqz17s{8pfwvsjwbozpkbqsnjmlqwbpwftbmwpwkjp-qfpfwtkffodjqop,`pp,233&8`ovappwveeajaofulwfp#2333hlqfb~*8\\x0E\\tabmgprvfvf>#x~8;3s{8`hjmdx\\x0E\\t\\n\\nbkfbg`ol`hjqjpkojhf#qbwjlpwbwpElqn!zbkll*X3^8Balvwejmgp?,k2=gfavdwbphpVQO#>`foop~*+*821s{8sqjnfwfoopwvqmp3{533-isd!psbjmafb`kwb{fpnj`qlbmdfo..=?,djewppwfuf.ojmhalgz-~*8\\t\\nnlvmw#+2::EBR?,qldfqeqbmh@obpp1;s{8effgp?k2=?p`lwwwfpwp11s{8gqjmh*#\\x7F\\x7F#oftjppkboo 30:8#elq#olufgtbpwf33s{8ib9\\x0Fnpjnlm?elmwqfsoznffwpvmwfq`kfbswjdkwAqbmg*#\\\">#gqfpp`ojspqllnplmhfznlajonbjm-Mbnf#sobwfevmmzwqffp`ln,!2-isdtnlgfsbqbnPWBQWofew#jggfm/#132*8\\t~\\telqn-ujqvp`kbjqwqbmptlqpwSbdfpjwjlmsbw`k?\\\"..\\tl.`b`ejqnpwlvqp/333#bpjbmj((*xbglaf$*X3^jg>23alwk8nfmv#-1-nj-smd!hfujm`lb`k@kjogaqv`f1-isdVQO*(-isd\\x7Fpvjwfpoj`fkbqqz213!#ptffwwq=\\x0E\\tmbnf>gjfdlsbdf#ptjpp..=\\t\\t eee8!=Old-`ln!wqfbwpkffw*#%%#27s{8poffsmwfmwejofgib9\\x0Fojg>!`Mbnf!tlqpfpklwp.al{.gfowb\\t%ow8afbqp97;Y?gbwb.qvqbo?,b=#psfmgabhfqpklsp>#!!8sks!=`wjlm20s{8aqjbmkfoolpjyf>l>&1E#iljmnbzaf?jnd#jnd!=/#eipjnd!#!*X3^NWlsAWzsf!mftozGbmph`yf`kwqbjohmltp?,k6=ebr!=yk.`m23*8\\t.2!*8wzsf>aovfpwqvozgbujp-ip$8=\\x0E\\t?\\\"pwffo#zlv#k1=\\x0E\\telqn#ifpvp233&#nfmv-\\x0E\\t\\n\\x0E\\ttbofpqjphpvnfmwggjmda.ojhwfb`kdje!#ufdbpgbmphffpwjpkrjspvlnjplaqfgfpgffmwqfwlglpsvfgfb/]lpfpw/Mwjfmfkbpwblwqlpsbqwfglmgfmvfulkb`fqelqnbnjpnlnfilqnvmglbrv/Ag/Abpp/_olbzvgbef`kbwlgbpwbmwlnfmlpgbwlplwqbppjwjlnv`klbklqbovdbqnbzlqfpwlpklqbpwfmfqbmwfpelwlpfpwbpsb/Apmvfubpbovgelqlpnfgjlrvjfmnfpfpslgfq`kjofpfq/Muf`fpgf`jqilp/Efpwbqufmwbdqvslkf`klfoolpwfmdlbnjdl`lpbpmjufodfmwfnjpnbbjqfpivojlwfnbpkb`jbebulqivmjlojaqfsvmwlavfmlbvwlqbaqjoavfmbwf{wlnbqylpbafqojpwbovfdl`/_nlfmfqlivfdlsfq/Vkbafqfpwlzmvm`bnvifqubolqevfqbojaqldvpwbjdvboulwlp`bplpdv/Absvfglplnlpbujplvpwfggfafmml`kfavp`bebowbfvqlppfqjfgj`kl`vqpl`obuf`bpbpof/_msobylobqdllaqbpujpwbbslzlivmwlwqbwbujpwl`qfbq`bnslkfnlp`jm`l`bqdlsjplplqgfmkb`fm/Mqfbgjp`lsfgql`fq`bsvfgbsbsfonfmlq/Vwjo`obqlilqdf`boofslmfqwbqgfmbgjfnbq`bpjdvffoobppjdol`l`kfnlwlpnbgqf`obpfqfpwlmj/]lrvfgbsbpbqabm`lkjilpujbifsbaol/Epwfujfmfqfjmlgfibqelmgl`bmbomlqwfofwqb`bvpbwlnbqnbmlpovmfpbvwlpujoobufmglsfpbqwjslpwfmdbnbq`loofubsbgqfvmjglubnlpylmbpbnalpabmgbnbqjbbavplnv`kbpvajqqjlibujujqdqbgl`kj`bboo/Ailufmgj`kbfpwbmwbofppbojqpvfolsfplpejmfpoobnbavp`l/Epwboofdbmfdqlsobybkvnlqsbdbqivmwbglaofjpobpalopbab/]lkbaobov`kb/mqfbgj`fmivdbqmlwbpuboofboo/M`bqdbglolqbabilfpw/Edvpwlnfmwfnbqjlejqnb`lpwlej`kbsobwbkldbqbqwfpofzfpbrvfonvpflabpfpsl`lpnjwbg`jfol`kj`lnjfgldbmbqpbmwlfwbsbgfafpsobzbqfgfppjfwf`lqwf`lqfbgvgbpgfpflujfilgfpfbbdvbp%rvlw8glnbjm`lnnlmpwbwvpfufmwpnbpwfqpzpwfnb`wjlmabmmfqqfnlufp`qloovsgbwfdolabonfgjvnejowfqmvnafq`kbmdfqfpvowsvaoj`p`qffm`kllpfmlqnbowqbufojppvfpplvq`fwbqdfwpsqjmdnlgvofnlajofptjw`ksklwlpalqgfqqfdjlmjwpfoepl`jbob`wjuf`lovnmqf`lqgelooltwjwof=fjwkfqofmdwkebnjozeqjfmgobzlvwbvwklq`qfbwfqfujftpvnnfqpfqufqsobzfgsobzfqf{sbmgsloj`zelqnbwglvaofsljmwppfqjfpsfqplmojujmdgfpjdmnlmwkpelq`fpvmjrvftfjdkwsflsoffmfqdzmbwvqfpfbq`kejdvqfkbujmd`vpwlnleepfwofwwfqtjmgltpvanjwqfmgfqdqlvspvsolbgkfbowknfwklgujgflpp`klloevwvqfpkbgltgfabwfubovfpLaif`wlwkfqpqjdkwpofbdvf`kqlnfpjnsofmlwj`fpkbqfgfmgjmdpfbplmqfslqwlmojmfprvbqfavwwlmjnbdfpfmbaofnlujmdobwfpwtjmwfqEqbm`fsfqjlgpwqlmdqfsfbwOlmglmgfwbjoelqnfggfnbmgpf`vqfsbppfgwlddofsob`fpgfuj`fpwbwj``jwjfppwqfbnzfooltbwwb`hpwqffweojdkwkjggfmjmel!=lsfmfgvpfevouboofz`bvpfpofbgfqpf`qfwpf`lmggbnbdfpslqwpf{`fswqbwjmdpjdmfgwkjmdpfeef`wejfogppwbwfpleej`fujpvbofgjwlqulovnfQfslqwnvpfvnnlujfpsbqfmwb``fppnlpwoznlwkfq!#jg>!nbqhfwdqlvmg`kbm`fpvqufzafelqfpznalonlnfmwpsff`knlwjlmjmpjgfnbwwfq@fmwfqlaif`wf{jpwpnjggofFvqlsfdqltwkofdb`znbmmfqfmlvdk`bqffqbmptfqlqjdjmslqwbo`ojfmwpfof`wqbmgln`olpfgwlsj`p`lnjmdebwkfqlswjlmpjnsozqbjpfgfp`bsf`klpfm`kvq`kgfejmfqfbplm`lqmfqlvwsvwnfnlqzjeqbnfsloj`fnlgfopMvnafqgvqjmdleefqppwzofphjoofgojpwfg`boofgpjoufqnbqdjmgfofwfafwwfqaqltpfojnjwpDolabopjmdoftjgdfw`fmwfqavgdfwmltqbs`qfgjw`objnpfmdjmfpbefwz`klj`fpsjqjw.pwzofpsqfbgnbhjmdmffgfgqvppjbsofbpff{wfmwP`qjswaqlhfmbooltp`kbqdfgjujgfeb`wlqnfnafq.abpfgwkflqz`lmejdbqlvmgtlqhfgkfosfg@kvq`kjnsb`wpklvogbotbzpoldl!#alwwlnojpw!=*xubq#sqfej{lqbmdfKfbgfq-svpk+`lvsofdbqgfmaqjgdfobvm`kQfujftwbhjmdujpjlmojwwofgbwjmdAvwwlmafbvwzwkfnfpelqdlwPfbq`kbm`klqbonlpwolbgfg@kbmdfqfwvqmpwqjmdqfolbgNlajofjm`lnfpvssozPlvq`flqgfqpujftfg%maps8`lvqpfBalvw#jpobmg?kwno#`llhjfmbnf>!bnbylmnlgfqmbguj`fjm?,b=9#Wkf#gjboldklvpfpAFDJM#Nf{j`lpwbqwp`fmwqfkfjdkwbggjmdJpobmgbppfwpFnsjqfP`kllofeelqwgjqf`wmfbqoznbmvboPfof`w-\\t\\tLmfiljmfgnfmv!=SkjojsbtbqgpkbmgofjnslqwLeej`fqfdbqgphjoopmbwjlmPslqwpgfdqfftffhoz#+f-d-afkjmggl`wlqolddfgvmjwfg?,a=?,afdjmpsobmwpbppjpwbqwjpwjppvfg033s{\\x7F`bmbgbbdfm`zp`kfnfqfnbjmAqbyjopbnsofoldl!=afzlmg.p`bofb``fswpfqufgnbqjmfEllwfq`bnfqb?,k2=\\t\\\\elqn!ofbufppwqfpp!#,=\\x0E\\t-dje!#lmolbgolbgfqL{elqgpjpwfqpvqujuojpwfmefnbofGfpjdmpjyf>!bssfbowf{w!=ofufopwkbmhpkjdkfqelq`fgbmjnbobmzlmfBeqj`bbdqffgqf`fmwSflsof?aq#,=tlmgfqsqj`fpwvqmfg\\x7F\\x7F#x~8nbjm!=jmojmfpvmgbztqbs!=ebjofg`fmpvpnjmvwfafb`lmrvlwfp263s{\\x7Ffpwbwfqfnlwffnbjo!ojmhfgqjdkw8pjdmboelqnbo2-kwnopjdmvssqjm`feolbw9-smd!#elqvn-B``fppsbsfqpplvmgpf{wfmgKfjdkwpojgfqVWE.;!%bns8#Afelqf-#TjwkpwvgjlltmfqpnbmbdfsqlejwiRvfqzbmmvbosbqbnpalvdkwebnlvpdlldofolmdfqj((*#xjpqbfopbzjmdgf`jgfklnf!=kfbgfqfmpvqfaqbm`ksjf`fpaol`h8pwbwfgwls!=?qb`jmdqfpjyf..%dw8sb`jwzpf{vboavqfbv-isd!#23/333lawbjmwjwofpbnlvmw/#Jm`-`lnfgznfmv!#ozqj`pwlgbz-jmgffg`lvmwz\\\\oldl-EbnjozollhfgNbqhfwopf#jeSobzfqwvqhfz*8ubq#elqfpwdjujmdfqqlqpGlnbjm~fopfxjmpfqwAold?,ellwfqoldjm-ebpwfqbdfmwp?algz#23s{#3sqbdnbeqjgbzivmjlqgloobqsob`fg`lufqpsovdjm6/333#sbdf!=alpwlm-wfpw+bubwbqwfpwfg\\\\`lvmwelqvnpp`kfnbjmgf{/ejoofgpkbqfpqfbgfqbofqw+bssfbqPvanjwojmf!=algz!=\\t)#WkfWklvdkpffjmdifqpfzMftp?,ufqjezf{sfqwjmivqztjgwk>@llhjfPWBQW#b`qlpp\\\\jnbdfwkqfbgmbwjufsl`hfwal{!=\\tPzpwfn#Gbujg`bm`fqwbaofpsqlufgBsqjo#qfboozgqjufqjwfn!=nlqf!=albqgp`lolqp`bnsvpejqpw#\\x7F\\x7F#X^8nfgjb-dvjwbqejmjpktjgwk9pkltfgLwkfq#-sks!#bppvnfobzfqptjoplmpwlqfpqfojfeptfgfm@vpwlnfbpjoz#zlvq#Pwqjmd\\t\\tTkjowbzolq`ofbq9qfplqweqfm`kwklvdk!*#(#!?algz=avzjmdaqbmgpNfnafqmbnf!=lssjmdpf`wlq6s{8!=upsb`fslpwfqnbilq#`leeffnbqwjmnbwvqfkbssfm?,mbu=hbmpbpojmh!=Jnbdfp>ebopftkjof#kpsb`f3%bns8#\\t\\tJm##sltfqSlophj.`lolqilqgbmAlwwlnPwbqw#.`lvmw1-kwnomftp!=32-isdLmojmf.qjdkwnjoofqpfmjlqJPAM#33/333#dvjgfpubovf*f`wjlmqfsbjq-{no!##qjdkwp-kwno.aol`hqfdF{s9klufqtjwkjmujqdjmsklmfp?,wq=\\x0Evpjmd#\\t\\nubq#=$*8\\t\\n?,wg=\\t?,wq=\\tabkbpbaqbpjodbofdlnbdzbqslophjpqsphj4]4C5d\\bTA\\nzk\\x0BBl\\bQ\\x7F\\x0BUm\\x05Gx\\bSM\\nmC\\bTA\\twQ\\nd}\\bW@\\bTl\\bTF\\ti@\\tcT\\x0BBM\\x0B|j\\x04BV\\tqw\\tcC\\bWI\\npa\\tfM\\n{Z\\x05{X\\bTF\\bVV\\bVK\\t\\x7Fm\\x04kF\\t[]\\bPm\\bTv\\nsI\\x0Bpg\\t[I\\bQp\\x04mx\\x0B_W\\n^M\\npe\\x0BQ}\\x0BGu\\nel\\npe\\x04Ch\\x04BV\\bTA\\tSo\\nzk\\x0BGL\\x0BxD\\nd[\\x05Jz\\x05MY\\bQp\\x04li\\nfl\\npC\\x05{B\\x05Nt\\x0BwT\\ti_\\bTg\\x04QQ\\n|p\\x0BXN\\bQS\\x0BxD\\x04QC\\bWZ\\tpD\\x0BVS\\bTW\\x05Nt\\x04Yh\\nzu\\x04Kj\\x05N}\\twr\\tHa\\n_D\\tj`\\x0BQ}\\x0BWp\\nxZ\\x04{c\\tji\\tBU\\nbD\\x04a|\\tTn\\tpV\\nZd\\nmC\\x0BEV\\x05{X\\tc}\\tTo\\bWl\\bUd\\tIQ\\tcg\\x0Bxs\\nXW\\twR\\x0Bek\\tc}\\t]y\\tJn\\nrp\\neg\\npV\\nz\\\\\\x05{W\\npl\\nz\\\\\\nzU\\tPc\\t`{\\bV@\\nc|\\bRw\\ti_\\bVb\\nwX\\tHv\\x04Su\\bTF\\x0B_W\\x0BWs\\x0BsI\\x05m\\x7F\\nTT\\ndc\\tUS\\t}f\\tiZ\\bWz\\tc}\\x04MD\\tBe\\tiD\\x0B@@\\bTl\\bPv\\t}t\\x04Sw\\x04M`\\x0BnU\\tkW\\x0Bed\\nqo\\x0BxY\\tA|\\bTz\\x0By`\\x04BR\\x04BM\\tia\\x04XU\\nyu\\x04n^\\tfL\\tiI\\nXW\\tfD\\bWz\\bW@\\tyj\\t\\x7Fm\\tav\\tBN\\x0Bb\\\\\\tpD\\bTf\\nY[\\tJn\\bQy\\t[^\\x0BWc\\x0Byu\\x04Dl\\x04CJ\\x0BWj\\x0BHR\\t`V\\x0BuW\\tQy\\np@\\x0BGu\\x05pl\\x04Jm\\bW[\\nLP\\nxC\\n`m\\twQ\\x05ui\\x05\\x7FR\\nbI\\twQ\\tBZ\\tWV\\x04BR\\npg\\tcg\\x05ti\\x04CW\\n_y\\tRg\\bQa\\x0BQB\\x0BWc\\nYb\\x05le\\ngE\\x04Su\\nL[\\tQ\\x7F\\tea\\tdj\\x0B]W\\nb~\\x04M`\\twL\\bTV\\bVH\\nt\\x7F\\npl\\t|b\\x05s_\\bU|\\bTa\\x04oQ\\x05lv\\x04Sk\\x04M`\\bTv\\x0BK}\\nfl\\tcC\\x04oQ\\x04BR\\tHk\\t|d\\bQp\\tHK\\tBZ\\x0BHR\\bPv\\x0BLx\\x0BEZ\\bT\\x7F\\bTv\\tiD\\x05oD\\x05MU\\x0BwB\\x04Su\\x05k`\\x04St\\ntC\\tPl\\tKg\\noi\\tjY\\x0BxY\\x04h}\\nzk\\bWZ\\t\\x7Fm\\x0Be`\\tTB\\tfE\\nzk\\t`z\\x04Yh\\nV|\\tHK\\tAJ\\tAJ\\bUL\\tp\\\\\\tql\\nYc\\x04Kd\\nfy\\x04Yh\\t[I\\x0BDg\\x04Jm\\n]n\\nlb\\bUd\\n{Z\\tlu\\tfs\\x04oQ\\bTW\\x04Jm\\x0BwB\\tea\\x04Yh\\x04BC\\tsb\\tTn\\nzU\\n_y\\x0BxY\\tQ]\\ngw\\x04mt\\tO\\\\\\ntb\\bWW\\bQy\\tmI\\tV[\\ny\\\\\\naB\\x0BRb\\twQ\\n]Q\\x04QJ\\bWg\\x0BWa\\bQj\\ntC\\bVH\\nYm\\x0Bxs\\bVK\\nel\\bWI\\x0BxY\\x04Cq\\ntR\\x0BHV\\bTl\\bVw\\tay\\bQa\\bVV\\t}t\\tdj\\nr|\\tp\\\\\\twR\\n{i\\nTT\\t[I\\ti[\\tAJ\\x0Bxs\\x0B_W\\td{\\x0BQ}\\tcg\\tTz\\tA|\\tCj\\x0BLm\\x05N}\\x05m\\x7F\\nbK\\tdZ\\tp\\\\\\t`V\\tsV\\np@\\tiD\\twQ\\x0BQ}\\bTf\\x05ka\\x04Jm\\x0B@@\\bV`\\tzp\\n@N\\x04Sw\\tiI\\tcg\\noi\\x04Su\\bVw\\x04lo\\x04Cy\\tc}\\x0Bb\\\\\\tsU\\x04BA\\bWI\\bTf\\nxS\\tVp\\nd|\\bTV\\x0BbC\\tNo\\x05Ju\\nTC\\t|`\\n{Z\\tD]\\bU|\\tc}\\x05lm\\bTl\\tBv\\tPl\\tc}\\bQp\\t\\x7Fm\\nLk\\tkj\\n@N\\x04Sb\\x04KO\\tj_\\tp\\\\\\nzU\\bTl\\bTg\\bWI\\tcf\\x04XO\\bWW\\ndz\\x04li\\tBN\\nd[\\bWO\\x04MD\\x0BKC\\tdj\\tI_\\bVV\\ny\\\\\\x0BLm\\x05xl\\txB\\tkV\\x0Bb\\\\\\x0BJW\\x0BVS\\tVx\\x0BxD\\td{\\x04MD\\bTa\\t|`\\x0BPz\\x04R}\\x0BWs\\x04BM\\nsI\\x04CN\\bTa\\x04Jm\\npe\\ti_\\npV\\nrh\\tRd\\tHv\\n~A\\nxR\\x0BWh\\x0BWk\\nxS\\x0BAz\\x0BwX\\nbI\\x04oQ\\tfw\\nqI\\nV|\\nun\\x05z\\x7F\\x0Bpg\\td\\\\\\x0BoA\\x05{D\\ti_\\x05xB\\bT\\x7F\\t`V\\x05qr\\tTT\\x04g]\\x04CA\\x0BuR\\tVJ\\tT`\\npw\\x0BRb\\tI_\\nCx\\x04Ro\\x0BsI\\x04Cj\\x04Kh\\tBv\\tWV\\x04BB\\x05oD\\x05{D\\nhc\\x04Km\\x0B^R\\tQE\\n{I\\np@\\nc|\\x05Gt\\tc}\\x04Dl\\nzU\\x05qN\\tsV\\x05k}\\tHh\\x0B|j\\nqo\\x05u|\\tQ]\\x0Bek\\x05\\x7FZ\\x04M`\\x04St\\npe\\tdj\\bVG\\x0BeE\\t\\x7Fm\\x0BWc\\x04|I\\n[W\\tfL\\bT\\x7F\\tBZ\\x04Su\\x0BKa\\x04Cq\\x05Nt\\x04Y[\\nqI\\bTv\\tfM\\ti@\\t}f\\x04B\\\\\\tQy\\x0BBl\\bWg\\x04XD\\x05kc\\x0Bx[\\bVV\\tQ]\\t\\x7Fa\\tPy\\x0BxD\\nfI\\t}f\\x05oD\\tdj\\tSG\\x05ls\\t~D\\x04CN\\n{Z\\t\\\\v\\n_D\\nhc\\x0Bx_\\x04C[\\tAJ\\nLM\\tVx\\x04CI\\tbj\\tc^\\tcF\\ntC\\x04Sx\\twr\\x04XA\\bU\\\\\\t|a\\x0BK\\\\\\bTV\\bVj\\nd|\\tfs\\x04CX\\ntb\\bRw\\tVx\\tAE\\tA|\\bT\\x7F\\x05Nt\\x0BDg\\tVc\\bTl\\x04d@\\npo\\t\\x7FM\\tcF\\npe\\tiZ\\tBo\\bSq\\nfH\\x04l`\\bTx\\bWf\\tHE\\x0BF{\\tcO\\tfD\\nlm\\x0BfZ\\nlm\\x0BeU\\tdG\\x04BH\\bTV\\tSi\\x05MW\\nwX\\nz\\\\\\t\\\\c\\x04CX\\nd}\\tl}\\bQp\\bTV\\tF~\\bQ\\x7F\\t`i\\ng@\\x05nO\\bUd\\bTl\\nL[\\twQ\\tji\\ntC\\t|J\\nLU\\naB\\x0BxY\\x04Kj\\tAJ\\x05uN\\ti[\\npe\\x04Sk\\x0BDg\\x0Bx]\\bVb\\bVV\\nea\\tkV\\nqI\\bTa\\x04Sk\\nAO\\tpD\\ntb\\nts\\nyi\\bVg\\ti_\\x0B_W\\nLk\\x05Nt\\tyj\\tfM\\x04R\\x7F\\tiI\\bTl\\x0BwX\\tsV\\x0BMl\\nyu\\tAJ\\bVj\\x04KO\\tWV\\x0BA}\\x0BW\\x7F\\nrp\\tiD\\x0B|o\\x05lv\\x0BsI\\x04BM\\td~\\tCU\\bVb\\x04eV\\npC\\x0BwT\\tj`\\tc}\\x0Bxs\\x0Bps\\x0Bvh\\tWV\\x0BGg\\x0BAe\\x0BVK\\x0B]W\\trg\\x0BWc\\x05F`\\tBr\\x0Bb\\\\\\tdZ\\bQp\\nqI\\x04kF\\nLk\\x0BAR\\bWI\\bTg\\tbs\\tdw\\n{L\\n_y\\tiZ\\bTA\\tlg\\bVV\\bTl\\tdk\\n`k\\ta{\\ti_\\x05{A\\x05wj\\twN\\x0B@@\\bTe\\ti_\\n_D\\twL\\nAH\\x0BiK\\x0Bek\\n[]\\tp_\\tyj\\bTv\\tUS\\t[r\\n{I\\nps\\x05Gt\\x0BVK\\npl\\x04S}\\x0BWP\\t|d\\x04MD\\x0BHV\\bT\\x7F\\x04R}\\x04M`\\bTV\\bVH\\x05lv\\x04Ch\\bW[\\x04Ke\\tR{\\x0B^R\\tab\\tBZ\\tVA\\tB`\\nd|\\nhs\\x04Ke\\tBe\\x04Oi\\tR{\\td\\\\\\x05nB\\bWZ\\tdZ\\tVJ\\x05Os\\t\\x7Fm\\x04uQ\\x0BhZ\\x04Q@\\x04QQ\\nfI\\bW[\\x04B\\\\\\x04li\\nzU\\nMd\\x04M`\\nxS\\bVV\\n\\\\}\\x0BxD\\t\\x7Fm\\bTp\\x04IS\\nc|\\tkV\\x05i~\\tV{\\x0BhZ\\t|b\\bWt\\n@R\\x0BoA\\x0BnU\\bWI\\tea\\tB`\\tiD\\tc}\\tTz\\x04BR\\x0BQB\\x05Nj\\tCP\\t[I\\bTv\\t`W\\x05uN\\x0Bpg\\x0Bpg\\x0BWc\\tiT\\tbs\\twL\\tU_\\tc\\\\\\t|h\\x0BKa\\tNr\\tfL\\nq|\\nzu\\nz\\\\\\tNr\\bUg\\t|b\\x04m`\\bTv\\nyd\\nrp\\bWf\\tUX\\x04BV\\nzk\\nd}\\twQ\\t}f\\x04Ce\\x0Bed\\bTW\\bSB\\nxU\\tcn\\bTb\\ne\\x7F\\ta\\\\\\tSG\\bU|\\npV\\nN\\\\\\x04Kn\\x0BnU\\tAt\\tpD\\x0B^R\\x0BIr\\x04b[\\tR{\\tdE\\x0BxD\\x0BWK\\x0BWA\\bQL\\bW@\\x04Su\\bUd\\nDM\\tPc\\x04CA\\x04Dl\\x04oQ\\tHs\\x05wi\\x04ub\\n\\x7Fa\\bQp\\x05Ob\\nLP\\bTl\\x04Y[\\x0BK}\\tAJ\\bQ\\x7F\\x04n^\\x0BsA\\bSM\\nqM\\bWZ\\n^W\\x0Bz{\\x04S|\\tfD\\bVK\\bTv\\bPv\\x04BB\\tCP\\x04dF\\tid\\x0Bxs\\x04mx\\x0Bws\\tcC\\ntC\\tyc\\x05M`\\x0BW\\x7F\\nrh\\bQp\\x0BxD\\x04\\\\o\\nsI\\x04_k\\nzu\\x04kF\\tfD\\x04Xs\\x04XO\\tjp\\bTv\\x04BS\\x05{B\\tBr\\nzQ\\nbI\\tc{\\x04BD\\x04BV\\x05nO\\bTF\\tca\\x05Jd\\tfL\\tPV\\tI_\\nlK\\x04`o\\twX\\npa\\tgu\\bP}\\x05{^\\bWf\\n{I\\tBN\\npa\\x04Kl\\x0Bpg\\tcn\\tfL\\x0Bvh\\x04Cq\\bTl\\x0BnU\\bSq\\x04Cm\\twR\\bUJ\\npe\\nyd\\nYg\\x04Cy\\x0BKW\\tfD\\nea\\x04oQ\\tj_\\tBv\\x04nM\\x0BID\\bTa\\nzA\\x05pl\\n]n\\bTa\\tR{\\tfr\\n_y\\bUg\\x05{X\\x05kk\\x0BxD\\x04|I\\x05xl\\nfy\\x04Ce\\x0BwB\\nLk\\x0Bd]\\noi\\n}h\\tQ]\\npe\\bVw\\x04Hk\\x04OQ\\nzk\\tAJ\\npV\\bPv\\ny\\\\\\tA{\\x04Oi\\bSB\\x04XA\\x0BeE\\tjp\\nq}\\tiD\\x05qN\\x0B^R\\t\\x7Fm\\tiZ\\tBr\\bVg\\noi\\n\\\\X\\tU_\\nc|\\x0BHV\\bTf\\tTn\\x04\\\\N\\x04\\\\N\\nuB\\x05lv\\nyu\\tTd\\bTf\\bPL\\x0B]W\\tdG\\nA`\\nw^\\ngI\\npe\\tdw\\nz\\\\\\x05ia\\bWZ\\tcF\\x04Jm\\n{Z\\bWO\\x04_k\\x04Df\\x04RR\\td\\\\\\bVV\\x0Bxs\\x04BN\\x05ti\\x04lm\\tTd\\t]y\\x0BHV\\tSo\\x0B|j\\x04XX\\tA|\\x0BZ^\\x0BGu\\bTW\\x05M`\\x04kF\\x0BhZ\\x0BVK\\tdG\\x0BBl\\tay\\nxU\\x05qE\\x05nO\\bVw\\nqI\\x04CX\\ne\\x7F\\tPl\\bWO\\x0BLm\\tdL\\x05uH\\x04Cm\\tdT\\x04fn\\x0BwB\\x05ka\\x0BnU\\n@M\\nyT\\tHv\\t\\\\}\\x04Kh\\td~\\x04Yh\\x05k}\\neR\\td\\\\\\bWI\\t|b\\tHK\\tiD\\bTW\\x05MY\\npl\\bQ_\\twr\\x0BAx\\tHE\\bTg\\bSq\\x05vp\\x0Bb\\\\\\bWO\\nOl\\nsI\\nfy\\x0BID\\t\\\\c\\n{Z\\n^~\\npe\\nAO\\tTT\\x0Bxv\\x04k_\\bWO\\x0B|j\\x0BwB\\tQy\\ti@\\tPl\\tHa\\tdZ\\x05k}\\x04ra\\tUT\\x0BJc\\x0Bed\\np@\\tQN\\nd|\\tkj\\tHk\\x04M`\\noi\\twr\\td\\\\\\nlq\\no_\\nlb\\nL[\\tac\\x04BB\\x04BH\\x04Cm\\npl\\tIQ\\bVK\\x0Bxs\\n`e\\x0BiK\\npa\\x04Oi\\tUS\\bTp\\tfD\\nPG\\x05kk\\x04XA\\nz\\\\\\neg\\x0BWh\\twR\\x05qN\\nqS\\tcn\\x04lo\\nxS\\n^W\\tBU\\nt\\x7F\\tHE\\tp\\\\\\tfF\\tfw\\bVV\\bW@\\tak\\x0BVK\\x05ls\\tVJ\\bVV\\x0BeE\\x04\\\\o\\nyX\\nYm\\x04M`\\x05lL\\nd|\\nzk\\tA{\\x05sE\\twQ\\x04XT\\nt\\x7F\\tPl\\t]y\\x0BwT\\x05{p\\x04MD\\x0Bb\\\\\\tQ]\\x04Kj\\tJn\\nAH\\x0BRb\\tBU\\tHK\\t\\\\c\\nfI\\x05m\\x7F\\nqM\\n@R\\tSo\\noi\\x04BT\\tHv\\n_y\\x04Kh\\tBZ\\t]i\\bUJ\\tV{\\x04Sr\\nbI\\x0BGg\\ta_\\bTR\\nfI\\nfl\\t[K\\tII\\x04S|\\x0BuW\\tiI\\bWI\\nqI\\x0B|j\\x04BV\\bVg\\bWZ\\x04kF\\x0Bx]\\bTA\\tab\\tfr\\ti@\\tJd\\tJd\\x0Bps\\nAO\\bTa\\x05xu\\tiD\\nzk\\t|d\\t|`\\bW[\\tlP\\tdG\\bVV\\x0Bw}\\x0BqO\\ti[\\bQ\\x7F\\bTz\\x0BVF\\twN\\x05ts\\tdw\\bTv\\neS\\ngi\\tNr\\x05yS\\npe\\bVV\\bSq\\n`m\\tyj\\tBZ\\x0BWX\\bSB\\tc\\\\\\nUR\\t[J\\tc_\\x04nM\\bWQ\\x0BAx\\nMd\\tBr\\x05ui\\x0BxY\\bSM\\x0BWc\\x0B|j\\x0Bxs\\t}Q\\tBO\\bPL\\bWW\\tfM\\nAO\\tPc\\x0BeU\\x04e^\\bTg\\nqI\\tac\\bPv\\tcF\\x04oQ\\tQ\\x7F\\x0BhZ\\x05ka\\nz\\\\\\tiK\\tBU\\n`k\\tCP\\x04S|\\x04M`\\n{I\\tS{\\x04_O\\tBZ\\x04Zi\\x04Sk\\tps\\tp\\\\\\nYu\\n]s\\nxC\\bWt\\nbD\\tkV\\x0BGu\\x05yS\\nqA\\t[r\\neK\\x04M`\\tdZ\\x05lL\\bUg\\bTl\\nbD\\tUS\\x0Bb\\\\\\tpV\\ncc\\x04S\\\\\\tct\\t`z\\bPL\\x0BWs\\nA`\\neg\\bSq\\x05uE\\x04CR\\x0BDg\\t`W\\x0Bz{\\x0BWc\\x04Sk\\x04Sk\\tbW\\bUg\\tea\\nxZ\\tiI\\tUX\\tVJ\\nqn\\tS{\\x0BRb\\bTQ\\npl\\x05Gt\\x0BuW\\x05uj\\npF\\nqI\\tfL\\t[I\\tia\\x04XO\\nyu\\x0BDg\\x0Bed\\tq{\\x04VG\\bQ\\x7F\\x05ka\\tVj\\tkV\\txB\\nd|\\np@\\tQN\\tPc\\tps\\x04]j\\tkV\\toU\\bTp\\nzU\\x05nB\\x0BB]\\ta{\\bV@\\n]n\\x04m`\\tcz\\tR{\\x04m`\\bQa\\x0BwT\\bSM\\x05MY\\x05qN\\tdj\\x05~s\\x0BQ}\\x05MY\\x0BMB\\tBv\\twR\\bRg\\x0BQ}\\tql\\x0BKC\\nrm\\x05xu\\x04CC\\x0BwB\\x0Bvh\\tBq\\x04Xq\\npV\\ti_\\x05Ob\\x05uE\\nbd\\nqo\\x0B{i\\nC~\\tBL\\x0BeE\\x05uH\\bVj\\x04Ey\\x04Gz\\x0BzR\\x0B{i\\tcf\\n{Z\\n]n\\x04XA\\x0BGu\\x0BnU\\thS\\x0BGI\\nCc\\tHE\\bTA\\tHB\\x04BH\\x04Cj\\nCc\\bTF\\tHE\\nXI\\tA{\\bQ\\x7F\\tc\\\\\\x0BmO\\x0BWX\\nfH\\np@\\x05MY\\bTF\\nlK\\tBt\\nzU\\tTT\\x04Km\\x0BwT\\npV\\ndt\\x0ByI\\tVx\\tQ\\x7F\\tRg\\tTd\\nzU\\bRS\\nLM\\twA\\x04nM\\tTn\\ndS\\t]g\\nLc\\x0BwB\\t}t\\t[I\\tCP\\x04kX\\x0BFm\\x0BhZ\\x05m\\x7F\\ti[\\np@\\x0BQ}\\x0BW\\x7F\\t|d\\nMO\\nMd\\tf_\\tfD\\tcJ\\tHz\\x0BRb\\tio\\tPy\\x04Y[\\nxU\\tct\\x0B@@\\tww\\bPv\\x04BM\\x04FF\\ntb\\x05v|\\x0BKm\\tBq\\tBq\\x04Kh\\x04`o\\nZd\\x04XU\\ti]\\t|`\\tSt\\x04B\\\\\\bQ\\x7F\\x0B_W\\tTJ\\nqI\\t|a\\tA{\\x0BuP\\x04MD\\tPl\\nxR\\tfL\\x0Bws\\tc{\\td\\\\\\bV`\\neg\\tHK\\x05kc\\nd|\\bVV\\ny\\\\\\x05kc\\ti]\\bVG\\t`V\\tss\\tI_\\tAE\\tbs\\tdu\\nel\\tpD\\x0BW\\x7F\\nqs\\x05lv\\bSM\\x04Zi\\x0BVK\\x05ia\\x0BQB\\tQ\\x7F\\n{Z\\bPt\\x0BKl\\nlK\\nhs\\ndS\\bVK\\x05mf\\nd^\\tkV\\tcO\\nc|\\bVH\\t\\\\]\\bTv\\bSq\\tmI\\x0BDg\\tVJ\\tcn\\ny\\\\\\bVg\\bTv\\nyX\\bTF\\t]]\\bTp\\noi\\nhs\\x0BeU\\nBf\\tdj\\x05Mr\\n|p\\t\\\\g\\t]r\\bVb\\x05{D\\nd[\\x04XN\\tfM\\tO\\\\\\x05s_\\tcf\\tiZ\\x04XN\\x0BWc\\tqv\\n`m\\tU^\\x05oD\\nd|\\x0BGg\\tdE\\x0Bwf\\x04lo\\x04u}\\nd|\\x05oQ\\t`i\\x04Oi\\x0BxD\\ndZ\\nCx\\x04Yw\\nzk\\ntb\\ngw\\tyj\\tB`\\nyX\\x0Bps\\ntC\\x0BpP\\x0Bqw\\bPu\\bPX\\tDm\\npw\\x05Nj\\tss\\taG\\x0Bxs\\bPt\\noL\\x04Gz\\tOk\\ti@\\ti]\\x04eC\\tIQ\\tii\\tdj\\x0B@J\\t|d\\x05uh\\bWZ\\x0BeU\\x0BnU\\bTa\\tcC\\x04g]\\nzk\\x04Yh\\bVK\\nLU\\np@\\ntb\\ntR\\tCj\\x0BNP\\ti@\\bP{\\n\\\\}\\n{c\\nwX\\tfL\\bVG\\tc{\\t|`\\tAJ\\t|C\\tfD\\x05ln\\t|d\\tbs\\nqI\\x05{B\\x0BAx\\np@\\nzk\\x0BRb\\x05Os\\x0BWS\\x04e^\\x0BD_\\tBv\\x0BWd\\bVb\\x0Bxs\\x0BeE\\bRw\\n]n\\n|p\\x0Bg|\\tfw\\x05kc\\bTI\\x05ka\\n\\\\T\\x04Sp\\tju\\x0Bps\\npe\\x05u|\\x0BGr\\bVe\\tCU\\x04]M\\x04XU\\x0BxD\\bTa\\tIQ\\x0BWq\\tCU\\tam\\tdj\\bSo\\x04Sw\\x0BnU\\x04Ch\\tQ]\\x05s_\\bPt\\tfS\\bTa\\t\\\\}\\n@O\\x04Yc\\tUZ\\bTx\\npe\\x0BnU\\nzU\\t|}\\tiD\\nz\\\\\\bSM\\x0BxD\\x04BR\\nzQ\\tQN\\x04]M\\x04Yh\\nLP\\x0BFm\\x0BLX\\x05vc\\x0Bql\\x05ka\\tHK\\bVb\\ntC\\nCy\\bTv\\nuV\\x04oQ\\t`z\\t[I\\tB`\\x0BRb\\tyj\\tsb\\x0BWs\\bTl\\tkV\\x0Bed\\ne\\x7F\\x05lL\\x0BxN\\t\\x7Fm\\nJn\\tjY\\x0BxD\\bVb\\bSq\\x0Byu\\twL\\x0BXL\\bTA\\tpg\\tAt\\tnD\\x04XX\\twR\\npl\\nhw\\x05yS\\nps\\tcO\\bW[\\x0B|j\\x04XN\\tsV\\tp\\\\\\tBe\\nb~\\nAJ\\n]e\\x05k`\\x05qN\\tdw\\tWV\\tHE\\x0BEV\\x05Jz\\tid\\tB`\\tzh\\x05E]\\tfD\\bTg\\x05qN\\bTa\\tja\\x04Cv\\bSM\\nhc\\bUe\\x05t_\\tie\\x04g]\\twQ\\nPn\\bVB\\tjw\\bVg\\x0BbE\\tBZ\\x0BRH\\bP{\\tjp\\n\\\\}\\ta_\\tcC\\t|a\\x0BD]\\tBZ\\ti[\\tfD\\x0BxW\\no_\\td\\\\\\n_D\\ntb\\t\\\\c\\tAJ\\nlK\\x04oQ\\x04lo\\x0BLx\\x0BM@\\bWZ\\x04Kn\\x0Bpg\\nTi\\nIv\\n|r\\x0B@}\\x05Jz\\x05Lm\\x05Wh\\x05k}\\x05ln\\x0BxD\\n]s\\x04gc\\x0Bps\\tBr\\bTW\\x0BBM\\x05tZ\\nBY\\x04DW\\tjf\\x0BSW\\x04C}\\nqo\\tdE\\tmv\\tIQ\\bPP\\bUb\\x05lv\\x04BC\\nzQ\\t[I\\x0Bgl\\nig\\bUs\\x04BT\\x0BbC\\bSq\\tsU\\tiW\\nJn\\tSY\\tHK\\trg\\npV\\x0BID\\x0B|j\\x04KO\\t`S\\t|a`vbmglfmujbqnbgqjgavp`bqjmj`jlwjfnslslqrvf`vfmwbfpwbglsvfgfmivfdlp`lmwqbfpw/Mmmlnaqfwjfmfmsfqejonbmfqbbnjdlp`jvgbg`fmwqlbvmrvfsvfgfpgfmwqlsqjnfqsqf`jlpfd/Vmavfmlpuloufqsvmwlppfnbmbkba/Abbdlpwlmvfulpvmjglp`bqolpfrvjslmj/]lpnv`klpbodvmb`lqqfljnbdfmsbqwjqbqqjabnbq/Abklnaqffnsoflufqgbg`bnajlnv`kbpevfqlmsbpbglo/Amfbsbqf`fmvfubp`vqplpfpwbabrvjfqlojaqlp`vbmwlb``fplnjdvfoubqjlp`vbwqlwjfmfpdqvslppfq/Mmfvqlsbnfgjlpeqfmwfb`fq`bgfn/Mplefqwb`l`kfpnlgfoljwbojbofwqbpbod/Vm`lnsqb`vbofpf{jpwf`vfqslpjfmglsqfmpboofdbqujbifpgjmfqlnvq`jbslgq/Msvfpwlgjbqjlsvfaolrvjfqfnbmvfosqlsjl`qjpjp`jfqwlpfdvqlnvfqwfevfmwf`fqqbqdqbmgffef`wlsbqwfpnfgjgbsqlsjbleqf`fwjfqqbf.nbjoubqjbpelqnbpevwvqllaifwlpfdvjqqjfpdlmlqnbpnjpnlp/Vmj`l`bnjmlpjwjlpqby/_mgfajglsqvfabwlofglwfm/Abifp/Vpfpsfql`l`jmblqjdfmwjfmgb`jfmwl`/Mgjykbaobqpfq/Abobwjmbevfqybfpwjoldvfqqbfmwqbq/E{jwlo/_sfybdfmgbu/Agflfujwbqsbdjmbnfwqlpibujfqsbgqfpe/M`jo`bafyb/Mqfbppbojgbfmu/Alibs/_mbavplpajfmfpwf{wlpoofubqsvfgbmevfqwf`ln/Vm`obpfpkvnbmlwfmjglajoablvmjgbgfpw/Mpfgjwbq`qfbgl<X<W=c=k=n<R<V<\\\\<V<T<W<T=a=n<R<^=m<Y<Y<_<R<S=l<T=n<\\\\<V<Y=e<Y=o<Z<Y<v<\\\\<V<]<Y<[<]=g<W<R<Q<T<~=m<Y<S<R<X<A=n<R=n<R<P=k<Y<P<Q<Y=n<W<Y=n=l<\\\\<[<R<Q<\\\\<_<X<Y<P<Q<Y<x<W=c<s=l<T<Q<\\\\=m<Q<T=i=n<Y<P<V=n<R<_<R<X<^<R=n=n<\\\\<P<M<D<|<P<\\\\=c<K=n<R<^<\\\\=m<^<\\\\<P<Y<P=o<N<\\\\<V<X<^<\\\\<Q<\\\\<P=a=n<T=a=n=o<~<\\\\<P=n<Y=i<S=l<R=n=o=n<Q<\\\\<X<X<Q=c<~<R=n=n=l<T<Q<Y<U<~<\\\\=m<Q<T<P=m<\\\\<P=n<R=n=l=o<]<r<Q<T<P<T=l<Q<Y<Y<r<r<r<W<T=j=a=n<\\\\<r<Q<\\\\<Q<Y<P<X<R<P<P<R<U<X<^<Y<R<Q<R=m=o<X\\fHy\\fIk\\fHU\\fId\\fHy\\fIl\\fHT\\fIk\\fHy\\fHR\\fHy\\fIg\\fHx\\fH\\\\\\fHF\\fH\\\\\\fHD\\fIk\\fHc\\fHy\\fHy\\fHS\\fHA\\fIl\\fHk\\fHT\\fHy\\fH\\\\\\fHH\\fIg\\fHU\\fIg\\fHj\\fHF\\fHU\\fIl\\fHC\\fHU\\fHC\\fHR\\fHH\\fHy\\fHI\\fHRibdqbm\\fHj\\fHp\\fHp\\fIg\\fHi\\fH@\\fHJ\\fIg\\fH{\\fHd\\fHp\\fHR\\fH{\\fHc\\fHU\\fHB\\fHk\\fHD\\fHY\\fHU\\fHC\\fIk\\fHI\\fIk\\fHI\\fIl\\fHt\\fH\\\\\\fHp\\fH@\\fHJ\\fIl\\fHy\\fHd\\fHp\\fIl\\fHY\\fIk\\fHD\\fHd\\fHD\\fHc\\fHU\\fH\\\\\\fHe\\fHT\\fHB\\fIk\\fHy\\fHB\\fHY\\fIg\\fH^\\fIk\\fHT\\fH@\\fHB\\fHd\\fHJ\\fIk\\fH\\x7F\\fH\\\\\\fHj\\fHB\\fH@\\fHT\\fHA\\fH\\\\\\fH@\\fHD\\fHv\\fH^\\fHB\\fHD\\fHj\\fH{\\fHT\\fIl\\fH^\\fIl4U5h5e4I5h5e5k4\\\\4K4N4B4]4U4C4C4K5h5e5k4\\\\5k4Y5d4]4V5f4]5o4K5j5d5h4K4D5f5j4U4]4Z4\\\\5h5o5k5j4K5f5d5i5n4K5h4U5h5f4K5j4K5h5o5j4A4F5e5n4D5h5d4A4E4K4B4]5m5n4[4U4D4C4]5o5j4I4\\\\4K5o5i4K4K4A4C4I5h4K5m5f5k4D4U4Z5o5f5m4D4A4G5d5i5j5d5k5d4O5j4K4@4C4K5h5k4K4_5h5i4U5j4C5h5f4_4U4D4]4Y5h5e5i5j4\\\\4D5k4K4O5j5k5i4G5h5o5j4F4K5h4K4A5f4G5i4Y4]4X4]4A4A5d5h5d5m5f4K4\\\\4K5h5o5h5i4]4E4K5j4F4K5h5m4O4D5d4B4K4Y4O5j4F4K5j5k4K5h5f4U4Z5d5d5n4C4K4D5j4B5f4]4D5j4F5h5o5i4X4K4M5d5k5f4K4D5d5n4Y4Y5d5i4K4]5n5i4O4A4C5j4A5j4U4C5i4]4O5f4K4A4E5o4F4D4C5d5j5f4@4D5i5j5k4F4A4F4@5k4E4_5j4E5f4F5i5o4]4E4V4^4E5j5m4_4D5f4F5h5h5k5h5j4K4F5h5o5n5h4D5h5i4K4U5j5k4O5d5h4X5f4M5j5d4]4O5i4K5m5f5o4D5o5h4\\\\4K4F4]4F4D4D4O5j5k5i4_4K5j5o4D5f4U5m5n4C4A4_5j5h5k5i4X4U4]4O5k5h4X5k4]5n4[4]4[5h4Dsqlejofpfquj`fgfebvowkjnpfoegfwbjop`lmwfmwpvsslqwpwbqwfgnfppbdfpv``fppebpkjlm?wjwof=`lvmwqzb``lvmw`qfbwfgpwlqjfpqfpvowpqvmmjmdsql`fpptqjwjmdlaif`wpujpjaoftfo`lnfbqwj`ofvmhmltmmfwtlqh`lnsbmzgzmbnj`aqltpfqsqjub`zsqlaofnPfquj`fqfpsf`wgjpsobzqfrvfpwqfpfquftfapjwfkjpwlqzeqjfmgplswjlmptlqhjmdufqpjlmnjoojlm`kbmmfotjmglt-bggqfppujpjwfgtfbwkfq`lqqf`wsqlgv`wfgjqf`welqtbqgzlv#`bmqfnlufgpvaif`w`lmwqlobq`kjuf`vqqfmwqfbgjmdojaqbqzojnjwfgnbmbdfqevqwkfqpvnnbqznb`kjmfnjmvwfpsqjubwf`lmwf{wsqldqbnpl`jfwzmvnafqptqjwwfmfmbaofgwqjddfqplvq`fpolbgjmdfofnfmwsbqwmfqejmboozsfqef`wnfbmjmdpzpwfnphffsjmd`vowvqf%rvlw8/ilvqmbosqlif`wpvqeb`fp%rvlw8f{sjqfpqfujftpabobm`fFmdojpk@lmwfmwwkqlvdkSofbpf#lsjmjlm`lmwb`wbufqbdfsqjnbqzujoobdfPsbmjpkdboofqzgf`ojmfnffwjmdnjppjlmslsvobqrvbojwznfbpvqfdfmfqbopsf`jfppfppjlmpf`wjlmtqjwfqp`lvmwfqjmjwjboqfslqwpejdvqfpnfnafqpklogjmdgjpsvwffbqojfqf{sqfppgjdjwbosj`wvqfBmlwkfqnbqqjfgwqbeej`ofbgjmd`kbmdfg`fmwqbouj`wlqzjnbdfp,qfbplmppwvgjfpefbwvqfojpwjmdnvpw#afp`kllopUfqpjlmvpvboozfsjplgfsobzjmddqltjmdlaujlvplufqobzsqfpfmwb`wjlmp?,vo=\\x0E\\ttqbssfqboqfbgz`fqwbjmqfbojwzpwlqbdfbmlwkfqgfphwlsleefqfgsbwwfqmvmvpvboGjdjwbo`bsjwboTfapjwfebjovqf`lmmf`wqfgv`fgBmgqljggf`bgfpqfdvobq#%bns8#bmjnbopqfofbpfBvwlnbwdfwwjmdnfwklgpmlwkjmdSlsvobq`bswjlmofwwfqp`bswvqfp`jfm`foj`fmpf`kbmdfpFmdobmg>2%bns8Kjpwlqz#>#mft#@fmwqbovsgbwfgPsf`jboMfwtlqhqfrvjqf`lnnfmwtbqmjmd@loofdfwlloabqqfnbjmpaf`bvpffof`wfgGfvwp`kejmbm`ftlqhfqprvj`hozafwtffmf{b`wozpfwwjmdgjpfbpfPl`jfwztfbslmpf{kjajw%ow8\\\"..@lmwqlo`obppfp`lufqfglvwojmfbwwb`hpgfuj`fp+tjmgltsvqslpfwjwof>!Nlajof#hjoojmdpkltjmdJwbojbmgqlssfgkfbujozfeef`wp.2$^*8\\t`lmejqn@vqqfmwbgubm`fpkbqjmdlsfmjmdgqbtjmdajoojlmlqgfqfgDfqnbmzqfobwfg?,elqn=jm`ovgftkfwkfqgfejmfgP`jfm`f`bwboldBqwj`ofavwwlmpobqdfpwvmjelqnilvqmfzpjgfabq@kj`bdlklojgbzDfmfqbosbppbdf/%rvlw8bmjnbwfeffojmdbqqjufgsbppjmdmbwvqboqlvdkoz-\\t\\tWkf#avw#mlwgfmpjwzAqjwbjm@kjmfpfob`h#lewqjavwfJqfobmg!#gbwb.eb`wlqpqf`fjufwkbw#jpOjaqbqzkvpabmgjm#eb`wbeebjqp@kbqofpqbgj`boaqlvdkwejmgjmdobmgjmd9obmd>!qfwvqm#ofbgfqpsobmmfgsqfnjvnsb`hbdfBnfqj`bFgjwjlm^%rvlw8Nfppbdfmffg#wlubovf>!`lnsof{ollhjmdpwbwjlmafojfufpnboofq.nlajofqf`lqgptbmw#wlhjmg#leEjqfel{zlv#bqfpjnjobqpwvgjfgnb{jnvnkfbgjmdqbsjgoz`ojnbwfhjmdglnfnfqdfgbnlvmwpelvmgfgsjlmffqelqnvobgzmbpwzklt#wl#Pvsslqwqfufmvff`lmlnzQfpvowpaqlwkfqplogjfqobqdfoz`boojmd-%rvlw8B``lvmwFgtbqg#pfdnfmwQlafqw#feelqwpSb`jej`ofbqmfgvs#tjwkkfjdkw9tf#kbufBmdfofpmbwjlmp\\\\pfbq`kbssojfgb`rvjqfnbppjufdqbmwfg9#ebopfwqfbwfgajddfpwafmfejwgqjujmdPwvgjfpnjmjnvnsfqkbspnlqmjmdpfoojmdjp#vpfgqfufqpfubqjbmw#qlof>!njppjmdb`kjfufsqlnlwfpwvgfmwplnflmff{wqfnfqfpwlqfalwwln9fuloufgboo#wkfpjwfnbsfmdojpktbz#wl##Bvdvpwpznalop@lnsbmznbwwfqpnvpj`bobdbjmpwpfqujmd~*+*8\\x0E\\tsbznfmwwqlvaof`lm`fsw`lnsbqfsbqfmwpsobzfqpqfdjlmpnlmjwlq#$$Wkf#tjmmjmdf{solqfbgbswfgDboofqzsqlgv`fbajojwzfmkbm`f`bqffqp*-#Wkf#`loof`wPfbq`k#bm`jfmwf{jpwfgellwfq#kbmgofqsqjmwfg`lmplofFbpwfqmf{slqwptjmgltp@kbmmfojoofdbomfvwqbopvddfpw\\\\kfbgfqpjdmjmd-kwno!=pfwwofgtfpwfqm`bvpjmd.tfahjw`objnfgIvpwj`f`kbswfquj`wjnpWklnbp#nlyjoobsqlnjpfsbqwjfpfgjwjlmlvwpjgf9ebopf/kvmgqfgLoznsj`\\\\avwwlmbvwklqpqfb`kfg`kqlmj`gfnbmgppf`lmgpsqlwf`wbglswfgsqfsbqfmfjwkfqdqfbwozdqfbwfqlufqboojnsqluf`lnnbmgpsf`jbopfbq`k-tlqpkjsevmgjmdwklvdkwkjdkfpwjmpwfbgvwjojwzrvbqwfq@vowvqfwfpwjmd`ofbqozf{slpfgAqltpfqojafqbo~#`bw`kSqlif`wf{bnsofkjgf+*8EolqjgbbmptfqpbooltfgFnsfqlqgfefmpfpfqjlvpeqffglnPfufqbo.avwwlmEvqwkfqlvw#le#\\\">#mvoowqbjmfgGfmnbqhuljg+3*,boo-ipsqfufmwQfrvfpwPwfskfm\\t\\tTkfm#lapfquf?,k1=\\x0E\\tNlgfqm#sqlujgf!#bow>!alqgfqp-\\t\\tElq#\\t\\tNbmz#bqwjpwpsltfqfgsfqelqnej`wjlmwzsf#lenfgj`bowj`hfwplsslpfg@lvm`jotjwmfppivpwj`fDflqdf#Afodjvn---?,b=wtjwwfqmlwbaoztbjwjmdtbqebqf#Lwkfq#qbmhjmdskqbpfpnfmwjlmpvqujufp`klobq?,s=\\x0E\\t#@lvmwqzjdmlqfgolpp#leivpw#bpDflqdjbpwqbmdf?kfbg=?pwlssfg2$^*8\\x0E\\tjpobmgpmlwbaofalqgfq9ojpw#le`bqqjfg233/333?,k0=\\t#pfufqboaf`lnfppfof`w#tfggjmd33-kwnonlmbq`klee#wkfwfb`kfqkjdkoz#ajloldzojef#lelq#fufmqjpf#le%qbrvl8sovplmfkvmwjmd+wklvdkGlvdobpiljmjmd`jq`ofpElq#wkfBm`jfmwUjfwmbnufkj`ofpv`k#bp`qzpwboubovf#>Tjmgltpfmilzfgb#pnboobppvnfg?b#jg>!elqfjdm#Boo#qjklt#wkfGjpsobzqfwjqfgkltfufqkjggfm8abwwofppffhjmd`bajmfwtbp#mlwollh#bw`lmgv`wdfw#wkfIbmvbqzkbssfmpwvqmjmdb9klufqLmojmf#Eqfm`k#ob`hjmdwzsj`bof{wqb`wfmfnjfpfufm#jedfmfqbwgf`jgfgbqf#mlw,pfbq`kafojfep.jnbdf9ol`bwfgpwbwj`-oldjm!=`lmufqwujlofmwfmwfqfgejqpw!=`jq`vjwEjmobmg`kfnjpwpkf#tbp23s{8!=bp#pv`kgjujgfg?,psbm=tjoo#afojmf#leb#dqfbwnzpwfqz,jmgf{-eboojmdgvf#wl#qbjotbz`loofdfnlmpwfqgfp`fmwjw#tjwkmv`ofbqIftjpk#sqlwfpwAqjwjpkeoltfqpsqfgj`wqfelqnpavwwlm#tkl#tbpof`wvqfjmpwbmwpvj`jgfdfmfqj`sfqjlgpnbqhfwpPl`jbo#ejpkjmd`lnajmfdqbskj`tjmmfqp?aq#,=?az#wkf#MbwvqboSqjub`z`llhjfplvw`lnfqfploufPtfgjpkaqjfeozSfqpjbmpl#nv`k@fmwvqzgfsj`wp`lovnmpklvpjmdp`qjswpmf{w#wlafbqjmdnbssjmdqfujpfgiRvfqz+.tjgwk9wjwof!=wllowjsPf`wjlmgfpjdmpWvqhjpkzlvmdfq-nbw`k+~*+*8\\t\\tavqmjmdlsfqbwfgfdqffpplvq`f>Qj`kbqg`olpfozsobpwj`fmwqjfp?,wq=\\x0E\\t`lolq9 vo#jg>!slppfppqloojmdskzpj`pebjojmdf{f`vwf`lmwfpwojmh#wlGfebvow?aq#,=\\t9#wqvf/`kbqwfqwlvqjpn`obppj`sql`ffgf{sobjm?,k2=\\x0E\\tlmojmf-<{no#ufkfosjmdgjbnlmgvpf#wkfbjqojmffmg#..=*-bwwq+qfbgfqpklpwjmd eeeeeeqfbojyfUjm`fmwpjdmbop#pq`>!,Sqlgv`wgfpsjwfgjufqpfwfoojmdSvaoj`#kfog#jmIlpfsk#wkfbwqfbeef`wp?pwzof=b#obqdfglfpm$wobwfq/#Fofnfmwebuj`lm`qfbwlqKvmdbqzBjqslqwpff#wkfpl#wkbwNj`kbfoPzpwfnpSqldqbnp/#bmg##tjgwk>f%rvlw8wqbgjmdofew!=\\tsfqplmpDlogfm#Beebjqpdqbnnbqelqnjmdgfpwqlzjgfb#le`bpf#lelogfpw#wkjp#jp-pq`#>#`bqwllmqfdjpwq@lnnlmpNvpojnpTkbw#jpjm#nbmznbqhjmdqfufbopJmgffg/frvbooz,pklt\\\\blvwgllqfp`bsf+Bvpwqjbdfmfwj`pzpwfn/Jm#wkf#pjwwjmdKf#boplJpobmgpB`bgfnz\\t\\n\\n?\\\"..Gbmjfo#ajmgjmdaol`h!=jnslpfgvwjojyfBaqbkbn+f{`fswxtjgwk9svwwjmd*-kwno+\\x7F\\x7F#X^8\\tGBWBX#)hjw`kfmnlvmwfgb`wvbo#gjbof`wnbjmoz#\\\\aobmh$jmpwboof{sfqwpje+wzsfJw#bopl%`lsz8#!=Wfqnpalqm#jmLswjlmpfbpwfqmwbohjmd`lm`fqmdbjmfg#lmdljmdivpwjez`qjwj`peb`wlqzjwp#ltmbppbvowjmujwfgobpwjmdkjp#ltmkqfe>!,!#qfo>!gfufols`lm`fqwgjbdqbngloobqp`ovpwfqsks<jg>bo`lklo*8~*+*8vpjmd#b=?psbm=ufppfopqfujuboBggqfppbnbwfvqbmgqljgboofdfgjoomfpptbohjmd`fmwfqprvbojeznbw`kfpvmjejfgf{wjm`wGfefmpfgjfg#jm\\t\\n?\\\"..#`vpwlnpojmhjmdOjwwof#Allh#lefufmjmdnjm-ip<bqf#wkfhlmwbhwwlgbz$p-kwno!#wbqdfw>tfbqjmdBoo#Qjd8\\t~*+*8qbjpjmd#Bopl/#`qv`jbobalvw!=gf`obqf..=\\t?p`ejqfel{bp#nv`kbssojfpjmgf{/#p/#avw#wzsf#>#\\t\\x0E\\t?\\\"..wltbqgpQf`lqgpSqjubwfElqfjdmSqfnjfq`klj`fpUjqwvboqfwvqmp@lnnfmwSltfqfgjmojmf8slufqwz`kbnafqOjujmd#ulovnfpBmwklmzoldjm!#QfobwfgF`lmlnzqfb`kfp`vwwjmddqbujwzojef#jm@kbswfq.pkbgltMlwbaof?,wg=\\x0E\\t#qfwvqmpwbgjvntjgdfwpubqzjmdwqbufopkfog#aztkl#bqftlqh#jmeb`vowzbmdvobqtkl#kbgbjqslqwwltm#le\\t\\tPlnf#$`oj`h$`kbqdfphfztlqgjw#tjoo`jwz#le+wkjp*8Bmgqft#vmjrvf#`kf`hfglq#nlqf033s{8#qfwvqm8qpjlm>!sovdjmptjwkjm#kfqpfoePwbwjlmEfgfqboufmwvqfsvaojpkpfmw#wlwfmpjlmb`wqfpp`lnf#wlejmdfqpGvhf#lesflsof/f{soljwtkbw#jpkbqnlmzb#nbilq!9!kwwsjm#kjp#nfmv!=\\tnlmwkozleej`fq`lvm`jodbjmjmdfufm#jmPvnnbqzgbwf#leolzbowzejwmfppbmg#tbpfnsfqlqpvsqfnfPf`lmg#kfbqjmdQvppjbmolmdfpwBoafqwbobwfqbopfw#le#pnboo!=-bssfmggl#tjwkefgfqboabmh#leafmfbwkGfpsjwf@bsjwbodqlvmgp*/#bmg#sfq`fmwjw#eqln`olpjmd`lmwbjmJmpwfbgejewffmbp#tfoo-zbkll-qfpslmgejdkwfqlap`vqfqfeof`wlqdbmj`>#Nbwk-fgjwjmdlmojmf#sbggjmdb#tkloflmfqqlqzfbq#lefmg#le#abqqjfqtkfm#jwkfbgfq#klnf#leqfpvnfgqfmbnfgpwqlmd=kfbwjmdqfwbjmp`olvgeqtbz#le#Nbq`k#2hmltjmdjm#sbqwAfwtffmofpplmp`olpfpwujqwvboojmhp!=`qlppfgFMG#..=ebnlvp#btbqgfgOj`fmpfKfbowk#ebjqoz#tfbowkznjmjnboBeqj`bm`lnsfwfobafo!=pjmdjmdebqnfqpAqbpjo*gjp`vppqfsob`fDqfdlqzelmw#`lsvqpvfgbssfbqpnbhf#vsqlvmgfgalwk#leaol`hfgpbt#wkfleej`fp`lolvqpje+gl`vtkfm#kffmelq`fsvpk+evBvdvpw#VWE.;!=Ebmwbpzjm#nlpwjmivqfgVpvboozebqnjmd`olpvqflaif`w#gfefm`fvpf#le#Nfgj`bo?algz=\\tfujgfmwaf#vpfghfz@lgfpj{wffmJpobnj` 333333fmwjqf#tjgfoz#b`wjuf#+wzsflelmf#`bm`lolq#>psfbhfqf{wfmgpSkzpj`pwfqqbjm?walgz=evmfqboujftjmdnjggof#`qj`hfwsqlskfwpkjewfggl`wlqpQvppfoo#wbqdfw`lnsb`wbodfaqbpl`jbo.avoh#lenbm#bmg?,wg=\\t#kf#ofew*-ubo+*ebopf*8oldj`boabmhjmdklnf#wlmbnjmd#Bqjylmb`qfgjwp*8\\t~*8\\telvmgfqjm#wvqm@loojmpafelqf#Avw#wkf`kbqdfgWjwof!=@bswbjmpsfoofgdlggfppWbd#..=Bggjmd9avw#tbpQf`fmw#sbwjfmwab`h#jm>ebopf%Ojm`lomtf#hmlt@lvmwfqIvgbjpnp`qjsw#bowfqfg$^*8\\t##kbp#wkfvm`ofbqFufmw$/alwk#jmmlw#boo\\t\\t?\\\"..#sob`jmdkbqg#wl#`fmwfqplqw#le`ojfmwppwqffwpAfqmbqgbppfqwpwfmg#wlebmwbpzgltm#jmkbqalvqEqffglniftfoqz,balvw--pfbq`kofdfmgpjp#nbgfnlgfqm#lmoz#lmlmoz#wljnbdf!#ojmfbq#sbjmwfqbmg#mlwqbqfoz#b`qlmzngfojufqpklqwfq33%bns8bp#nbmztjgwk>!,)#?\\\"X@wjwof#>le#wkf#oltfpw#sj`hfg#fp`bsfgvpfp#lesflsofp#Svaoj`Nbwwkftwb`wj`pgbnbdfgtbz#elqobtp#lefbpz#wl#tjmgltpwqlmd##pjnsof~`bw`k+pfufmwkjmelal{tfmw#wlsbjmwfg`jwjyfmJ#glm$wqfwqfbw-#Plnf#tt-!*8\\talnajmdnbjowl9nbgf#jm-#Nbmz#`bqqjfp\\x7F\\x7Fx~8tjtlqh#lepzmlmzngfefbwpebulqfglswj`bosbdfWqbvmofpp#pfmgjmdofew!=?`lnP`lqBoo#wkfiRvfqz-wlvqjpw@obppj`ebopf!#Tjokfonpvavqapdfmvjmfajpklsp-psojw+dolabo#elooltpalgz#lemlnjmbo@lmwb`wpf`vobqofew#wl`kjfeoz.kjggfm.abmmfq?,oj=\\t\\t-#Tkfm#jm#alwkgjpnjppF{solqfbotbzp#ujb#wkfpsb/]lotfoebqfqvojmd#bqqbmdf`bswbjmkjp#plmqvof#lekf#wllhjwpfoe/>3%bns8+`boofgpbnsofpwl#nbhf`ln,sbdNbqwjm#Hfmmfgzb``fswpevoo#lekbmgofgAfpjgfp,,..=?,baof#wlwbqdfwpfppfm`fkjn#wl#jwp#az#`lnnlm-njmfqbowl#wbhftbzp#wlp-lqd,obgujpfgsfmbowzpjnsof9je#wkfzOfwwfqpb#pklqwKfqafqwpwqjhfp#dqlvsp-ofmdwkeojdkwplufqobspoltoz#ofppfq#pl`jbo#?,s=\\t\\n\\njw#jmwlqbmhfg#qbwf#levo=\\x0E\\t##bwwfnswsbjq#lenbhf#jwHlmwbhwBmwlmjlkbujmd#qbwjmdp#b`wjufpwqfbnpwqbssfg!*-`pp+klpwjofofbg#wlojwwof#dqlvsp/Sj`wvqf..=\\x0E\\t\\x0E\\t#qltp>!#laif`wjmufqpf?ellwfq@vpwlnU=?_,p`qploujmd@kbnafqpobufqztlvmgfgtkfqfbp\\\">#$vmgelq#boosbqwoz#.qjdkw9Bqbajbmab`hfg#`fmwvqzvmjw#lenlajof.Fvqlsf/jp#klnfqjph#legfpjqfg@ojmwlm`lpw#lebdf#le#af`lnf#mlmf#les%rvlw8Njggof#fbg$*X3@qjwj`ppwvgjlp=%`lsz8dqlvs!=bppfnaonbhjmd#sqfppfgtjgdfw-sp9!#<#qfavjowaz#plnfElqnfq#fgjwlqpgfobzfg@bmlmj`kbg#wkfsvpkjmd`obpp>!avw#bqfsbqwjboAbazolmalwwln#`bqqjfq@lnnbmgjwp#vpfBp#tjwk`lvqpfpb#wkjqggfmlwfpbopl#jmKlvpwlm13s{8!=b``vpfgglvaof#dlbo#leEbnlvp#*-ajmg+sqjfpwp#Lmojmfjm#Ivozpw#(#!d`lmpvowgf`jnbokfosevoqfujufgjp#ufqzq$($jswolpjmd#efnbofpjp#boplpwqjmdpgbzp#lebqqjuboevwvqf#?laif`welq`jmdPwqjmd+!#,=\\t\\n\\nkfqf#jpfm`lgfg-##Wkf#aboollmglmf#az,`lnnlmad`lolqobt#le#Jmgjbmbbuljgfgavw#wkf1s{#0s{irvfqz-bewfq#bsloj`z-nfm#bmgellwfq.>#wqvf8elq#vpfp`qffm-Jmgjbm#jnbdf#>ebnjoz/kwws9,,#%maps8gqjufqpfwfqmbopbnf#bpmlwj`fgujftfqp~*+*8\\t#jp#nlqfpfbplmpelqnfq#wkf#mftjp#ivpw`lmpfmw#Pfbq`ktbp#wkftkz#wkfpkjssfgaq=?aq=tjgwk9#kfjdkw>nbgf#le`vjpjmfjp#wkbwb#ufqz#Bgnjqbo#ej{fg8mlqnbo#NjppjlmSqfpp/#lmwbqjl`kbqpfwwqz#wl#jmubgfg>!wqvf!psb`jmdjp#nlpwb#nlqf#wlwboozeboo#le~*8\\x0E\\t##jnnfmpfwjnf#jmpfw#lvwpbwjpezwl#ejmggltm#wlolw#le#Sobzfqpjm#Ivmfrvbmwvnmlw#wkfwjnf#wlgjpwbmwEjmmjpkpq`#>#+pjmdof#kfos#leDfqnbm#obt#bmgobafofgelqfpwp`llhjmdpsb`f!=kfbgfq.tfoo#bpPwbmofzaqjgdfp,dolabo@qlbwjb#Balvw#X3^8\\t##jw/#bmgdqlvsfgafjmd#b*xwkqltkf#nbgfojdkwfqfwkj`boEEEEEE!alwwln!ojhf#b#fnsolzpojuf#jmbp#pffmsqjmwfqnlpw#leva.ojmhqfif`wpbmg#vpfjnbdf!=pv``ffgeffgjmdMv`ofbqjmelqnbwl#kfosTlnfm$pMfjwkfqNf{j`bmsqlwfjm?wbaof#az#nbmzkfbowkzobtpvjwgfujpfg-svpk+xpfoofqppjnsoz#Wkqlvdk-`llhjf#Jnbdf+logfq!=vp-ip!=#Pjm`f#vmjufqpobqdfq#lsfm#wl\\\"..#fmgojfp#jm$^*8\\x0E\\t##nbqhfwtkl#jp#+!GLN@lnbmbdfglmf#elqwzsfle#Hjmdglnsqlejwpsqlslpfwl#pklt`fmwfq8nbgf#jwgqfppfgtfqf#jmnj{wvqfsqf`jpfbqjpjmdpq`#>#$nbhf#b#pf`vqfgAbswjpwulwjmd#\\t\\n\\nubq#Nbq`k#1dqft#vs@ojnbwf-qfnlufphjoofgtbz#wkf?,kfbg=eb`f#leb`wjmd#qjdkw!=wl#tlqhqfgv`fpkbp#kbgfqf`wfgpklt+*8b`wjlm>allh#lebm#bqfb>>#!kww?kfbgfq\\t?kwno=`lmelqneb`jmd#`llhjf-qfoz#lmklpwfg#-`vpwlnkf#tfmwavw#elqpsqfbg#Ebnjoz#b#nfbmplvw#wkfelqvnp-ellwbdf!=Nlajo@ofnfmwp!#jg>!bp#kjdkjmwfmpf..=?\\\"..efnbof#jp#pffmjnsojfgpfw#wkfb#pwbwfbmg#kjpebpwfpwafpjgfpavwwlm\\\\alvmgfg!=?jnd#Jmelal{fufmwp/b#zlvmdbmg#bqfMbwjuf#`kfbsfqWjnflvwbmg#kbpfmdjmfptlm#wkf+nlpwozqjdkw9#ejmg#b#.alwwlnSqjm`f#bqfb#lenlqf#lepfbq`k\\\\mbwvqf/ofdboozsfqjlg/obmg#lelq#tjwkjmgv`fgsqlujmdnjppjofol`boozBdbjmpwwkf#tbzh%rvlw8s{8!=\\x0E\\tsvpkfg#babmglmmvnfqbo@fqwbjmJm#wkjpnlqf#jmlq#plnfmbnf#jpbmg/#jm`qltmfgJPAM#3.`qfbwfpL`wlafqnbz#mlw`fmwfq#obwf#jmGfefm`ffmb`wfgtjpk#wlaqlbgoz`llojmdlmolbg>jw-#Wkfqf`lufqNfnafqpkfjdkw#bppvnfp?kwno=\\tsflsof-jm#lmf#>tjmgltellwfq\\\\b#dllg#qfhobnblwkfqp/wl#wkjp\\\\`llhjfsbmfo!=Olmglm/gfejmfp`qvpkfgabswjpn`lbpwbopwbwvp#wjwof!#nluf#wlolpw#jmafwwfq#jnsojfpqjuboqzpfqufqp#PzpwfnSfqkbspfp#bmg#`lmwfmgeoltjmdobpwfg#qjpf#jmDfmfpjpujft#leqjpjmd#pffn#wlavw#jm#ab`hjmdkf#tjoodjufm#bdjujmd#`jwjfp-eolt#le#Obwfq#boo#avwKjdktbzlmoz#azpjdm#lekf#glfpgjeefqpabwwfqz%bns8obpjmdofpwkqfbwpjmwfdfqwbhf#lmqfevpfg`boofg#>VP%bnsPff#wkfmbwjufpaz#wkjppzpwfn-kfbg#le9klufq/ofpajbmpvqmbnfbmg#boo`lnnlm,kfbgfq\\\\\\\\sbqbnpKbqubqg,sj{fo-qfnlubopl#olmdqlof#leiljmwozphzp`qbVmj`lgfaq#,=\\x0E\\tBwobmwbmv`ofvp@lvmwz/svqfoz#`lvmw!=fbpjoz#avjog#blm`oj`hb#djufmsljmwfqk%rvlw8fufmwp#fopf#x\\tgjwjlmpmlt#wkf/#tjwk#nbm#tkllqd,Tfalmf#bmg`buboqzKf#gjfgpfbwwof33/333#xtjmgltkbuf#wlje+tjmgbmg#jwpplofoz#n%rvlw8qfmftfgGfwqljwbnlmdpwfjwkfq#wkfn#jmPfmbwlqVp?,b=?Hjmd#leEqbm`jp.sqlgv`kf#vpfgbqw#bmgkjn#bmgvpfg#azp`lqjmdbw#klnfwl#kbufqfobwfpjajojwzeb`wjlmAveebolojmh!=?tkbw#kfeqff#wl@jwz#le`lnf#jmpf`wlqp`lvmwfglmf#gbzmfqulvpprvbqf#~8je+dljm#tkbwjnd!#bojp#lmozpfbq`k,wvfpgbzollpfozPlolnlmpf{vbo#.#?b#kqnfgjvn!GL#MLW#Eqbm`f/tjwk#b#tbq#bmgpf`lmg#wbhf#b#=\\x0E\\t\\x0E\\t\\x0E\\tnbqhfw-kjdktbzglmf#jm`wjujwz!obpw!=laojdfgqjpf#wl!vmgfejnbgf#wl#Fbqoz#sqbjpfgjm#jwp#elq#kjpbwkofwfIvsjwfqZbkll\\\"#wfqnfg#pl#nbmzqfbooz#p-#Wkf#b#tlnbm<ubovf>gjqf`w#qjdkw!#aj`z`ofb`jmd>!gbz#bmgpwbwjmdQbwkfq/kjdkfq#Leej`f#bqf#mltwjnfp/#tkfm#b#sbz#elqlm#wkjp.ojmh!=8alqgfqbqlvmg#bmmvbo#wkf#Mftsvw#wkf-`ln!#wbhjm#wlb#aqjfe+jm#wkfdqlvsp-8#tjgwkfmyznfppjnsof#jm#obwfxqfwvqmwkfqbszb#sljmwabmmjmdjmhp!=\\t+*8!#qfb#sob`f_v330@bbalvw#bwq=\\x0E\\t\\n\\n``lvmw#djufp#b?P@QJSWQbjotbzwkfnfp,wlloal{AzJg+!{kvnbmp/tbw`kfpjm#plnf#je#+tj`lnjmd#elqnbwp#Vmgfq#avw#kbpkbmgfg#nbgf#azwkbm#jmefbq#legfmlwfg,jeqbnfofew#jmulowbdfjm#fb`kb%rvlw8abpf#leJm#nbmzvmgfqdlqfdjnfpb`wjlm#?,s=\\x0E\\t?vpwlnUb8%dw8?,jnslqwplq#wkbwnlpwoz#%bns8qf#pjyf>!?,b=?,kb#`obppsbppjufKlpw#>#TkfwkfqefqwjofUbqjlvp>X^8+ev`bnfqbp,=?,wg=b`wp#bpJm#plnf=\\x0E\\t\\x0E\\t?\\\"lqdbmjp#?aq#,=Afjijmd`bwbo/Lgfvwp`kfvqlsfvfvphbqbdbfjodfpufmphbfpsb/]bnfmpbifvpvbqjlwqbabiln/E{j`ls/Mdjmbpjfnsqfpjpwfnbl`wvaqfgvqbmwfb/]bgjqfnsqfpbnlnfmwlmvfpwqlsqjnfqbwqbu/Epdqb`jbpmvfpwqbsql`fplfpwbglp`bojgbgsfqplmbm/Vnfqlb`vfqgln/Vpj`bnjfnaqllefqwbpbodvmlpsb/Apfpfifnsolgfqf`klbgfn/Mpsqjubglbdqfdbqfmob`fpslpjaofklwfofppfujoobsqjnfql/Vowjnlfufmwlpbq`kjul`vowvqbnvifqfpfmwqbgbbmvm`jlfnabqdlnfq`bgldqbmgfpfpwvgjlnfilqfpefaqfqlgjpf/]lwvqjpnl`/_gjdlslqwbgbfpsb`jlebnjojbbmwlmjlsfqnjwfdvbqgbqbodvmbpsqf`jlpbodvjfmpfmwjglujpjwbpw/Awvol`lml`fqpfdvmgl`lmpfileqbm`jbnjmvwlppfdvmgbwfmfnlpfef`wlpn/Mobdbpfpj/_mqfujpwbdqbmbgb`lnsqbqjmdqfpldbq`/Abb``j/_mf`vbglqrvjfmfpjm`ovplgfafq/Mnbwfqjbklnaqfpnvfpwqbslgq/Abnb/]bmb/Vowjnbfpwbnlplej`jbowbnajfmmjmd/Vmpbovglpslgfnlpnfilqbqslpjwjlmavpjmfppklnfsbdfpf`vqjwzobmdvbdfpwbmgbqg`bnsbjdmefbwvqfp`bwfdlqzf{wfqmbo`kjogqfmqfpfqufgqfpfbq`kf{`kbmdfebulqjwfwfnsobwfnjojwbqzjmgvpwqzpfquj`fpnbwfqjbosqlgv`wpy.jmgf{9`lnnfmwpplewtbqf`lnsofwf`bofmgbqsobwelqnbqwj`ofpqfrvjqfgnlufnfmwrvfpwjlmavjogjmdslojwj`pslppjaofqfojdjlmskzpj`boeffgab`hqfdjpwfqsj`wvqfpgjpbaofgsqlwl`lobvgjfm`fpfwwjmdpb`wjujwzfofnfmwpofbqmjmdbmzwkjmdbapwqb`wsqldqfpplufqujftnbdbyjmff`lmlnj`wqbjmjmdsqfppvqfubqjlvp#?pwqlmd=sqlsfqwzpklssjmdwldfwkfqbgubm`fgafkbujlqgltmolbgefbwvqfgellwaboopfof`wfgObmdvbdfgjpwbm`fqfnfnafqwqb`hjmdsbpptlqgnlgjejfgpwvgfmwpgjqf`wozejdkwjmdmlqwkfqmgbwbabpfefpwjuboaqfbhjmdol`bwjlmjmwfqmfwgqlsgltmsqb`wj`ffujgfm`fevm`wjlmnbqqjbdfqfpslmpfsqlaofnpmfdbwjufsqldqbnpbmbozpjpqfofbpfgabmmfq!=svq`kbpfsloj`jfpqfdjlmbo`qfbwjufbqdvnfmwallhnbqhqfefqqfq`kfnj`bogjujpjlm`booab`hpfsbqbwfsqlif`wp`lmeoj`wkbqgtbqfjmwfqfpwgfojufqznlvmwbjmlawbjmfg>#ebopf8elq+ubq#b``fswfg`bsb`jwz`lnsvwfqjgfmwjwzbjq`qbewfnsolzfgsqlslpfgglnfpwj`jm`ovgfpsqlujgfgklpsjwboufqwj`bo`loobspfbssqlb`ksbqwmfqpoldl!=?bgbvdkwfqbvwklq!#`vowvqboebnjojfp,jnbdfp,bppfnaozsltfqevowfb`kjmdejmjpkfggjpwqj`w`qjwj`bo`dj.ajm,svqslpfpqfrvjqfpfof`wjlmaf`lnjmdsqlujgfpb`bgfnj`f{fq`jpfb`wvbooznfgj`jmf`lmpwbmwb``jgfmwNbdbyjmfgl`vnfmwpwbqwjmdalwwln!=lapfqufg9#%rvlw8f{wfmgfgsqfujlvpPlewtbqf`vpwlnfqgf`jpjlmpwqfmdwkgfwbjofgpojdkwozsobmmjmdwf{wbqfb`vqqfm`zfufqzlmfpwqbjdkwwqbmpefqslpjwjufsqlgv`fgkfqjwbdfpkjssjmdbaplovwfqf`fjufgqfofubmwavwwlm!#ujlofm`fbmztkfqfafmfejwpobvm`kfgqf`fmwozboojbm`felooltfgnvowjsofavoofwjmjm`ovgfgl``vqqfgjmwfqmbo'+wkjp*-qfsvaoj`=?wq=?wg`lmdqfppqf`lqgfgvowjnbwfplovwjlm?vo#jg>!gjp`lufqKlnf?,b=tfapjwfpmfwtlqhpbowklvdkfmwjqfoznfnlqjbonfppbdfp`lmwjmvfb`wjuf!=plnftkbwuj`wlqjbTfpwfqm##wjwof>!Ol`bwjlm`lmwqb`wujpjwlqpGltmolbgtjwklvw#qjdkw!=\\tnfbpvqfptjgwk#>#ubqjbaofjmuloufgujqdjmjbmlqnboozkbssfmfgb``lvmwppwbmgjmdmbwjlmboQfdjpwfqsqfsbqfg`lmwqlopb``vqbwfajqwkgbzpwqbwfdzleej`jbodqbskj`p`qjnjmboslppjaoz`lmpvnfqSfqplmbopsfbhjmdubojgbwfb`kjfufg-isd!#,=nb`kjmfp?,k1=\\t##hfztlqgpeqjfmgozaqlwkfqp`lnajmfglqjdjmbo`lnslpfgf{sf`wfgbgfrvbwfsbhjpwbmeloolt!#ubovbaof?,obafo=qfobwjufaqjmdjmdjm`qfbpfdlufqmlqsovdjmp,Ojpw#le#Kfbgfq!=!#mbnf>!#+%rvlw8dqbgvbwf?,kfbg=\\t`lnnfq`fnbobzpjbgjqf`wlqnbjmwbjm8kfjdkw9p`kfgvof`kbmdjmdab`h#wl#`bwkloj`sbwwfqmp`lolq9# dqfbwfpwpvssojfpqfojbaof?,vo=\\t\\n\\n?pfof`w#`jwjyfmp`olwkjmdtbw`kjmd?oj#jg>!psf`jej``bqqzjmdpfmwfm`f?`fmwfq=`lmwqbpwwkjmhjmd`bw`k+f*plvwkfqmNj`kbfo#nfq`kbmw`bqlvpfosbggjmd9jmwfqjlq-psojw+!ojybwjlmL`wlafq#*xqfwvqmjnsqlufg..%dw8\\t\\t`lufqbdf`kbjqnbm-smd!#,=pvaif`wpQj`kbqg#tkbwfufqsqlabaozqf`lufqzabpfabooivgdnfmw`lmmf`w--`pp!#,=#tfapjwfqfslqwfggfebvow!,=?,b=\\x0E\\tfof`wqj`p`lwobmg`qfbwjlmrvbmwjwz-#JPAM#3gjg#mlw#jmpwbm`f.pfbq`k.!#obmd>!psfbhfqp@lnsvwfq`lmwbjmpbq`kjufpnjmjpwfqqfb`wjlmgjp`lvmwJwbojbml`qjwfqjbpwqlmdoz9#$kwws9$p`qjsw$`lufqjmdleefqjmdbssfbqfgAqjwjpk#jgfmwjezEb`fallhmvnfqlvpufkj`ofp`lm`fqmpBnfqj`bmkbmgojmdgju#jg>!Tjoojbn#sqlujgfq\\\\`lmwfmwb``vqb`zpf`wjlm#bmgfqplmeof{jaof@bwfdlqzobtqfm`f?p`qjsw=obzlvw>!bssqlufg#nb{jnvnkfbgfq!=?,wbaof=Pfquj`fpkbnjowlm`vqqfmw#`bmbgjbm`kbmmfop,wkfnfp,,bqwj`oflswjlmboslqwvdboubovf>!!jmwfqubotjqfofppfmwjwofgbdfm`jfpPfbq`k!#nfbpvqfgwklvpbmgpsfmgjmd%kfoojs8mft#Gbwf!#pjyf>!sbdfMbnfnjggof!#!#,=?,b=kjggfm!=pfrvfm`fsfqplmbolufqeoltlsjmjlmpjoojmljpojmhp!=\\t\\n?wjwof=ufqpjlmppbwvqgbzwfqnjmbojwfnsqlsfmdjmffqpf`wjlmpgfpjdmfqsqlslpbo>!ebopf!Fpsb/]loqfofbpfppvanjw!#fq%rvlw8bggjwjlmpznswlnplqjfmwfgqfplvq`fqjdkw!=?sofbpvqfpwbwjlmpkjpwlqz-ofbujmd##alqgfq>`lmwfmwp`fmwfq!=-\\t\\tPlnf#gjqf`wfgpvjwbaofavodbqjb-pklt+*8gfpjdmfgDfmfqbo#`lm`fswpF{bnsofptjoojbnpLqjdjmbo!=?psbm=pfbq`k!=lsfqbwlqqfrvfpwpb#%rvlw8booltjmdGl`vnfmwqfujpjlm-#\\t\\tWkf#zlvqpfoe@lmwb`w#nj`kjdbmFmdojpk#`lovnajbsqjlqjwzsqjmwjmdgqjmhjmdeb`jojwzqfwvqmfg@lmwfmw#leej`fqpQvppjbm#dfmfqbwf.;;6:.2!jmgj`bwfebnjojbq#rvbojwznbqdjm93#`lmwfmwujftslqw`lmwb`wp.wjwof!=slqwbaof-ofmdwk#fojdjaofjmuloufpbwobmwj`lmolbg>!gfebvow-pvssojfgsbznfmwpdolppbqz\\t\\tBewfq#dvjgbm`f?,wg=?wgfm`lgjmdnjggof!=`bnf#wl#gjpsobzpp`lwwjpkilmbwkbmnbilqjwztjgdfwp-`ojmj`bowkbjobmgwfb`kfqp?kfbg=\\t\\nbeef`wfgpvsslqwpsljmwfq8wlPwqjmd?,pnboo=lhobklnbtjoo#af#jmufpwlq3!#bow>!klojgbzpQfplvq`foj`fmpfg#+tkj`k#-#Bewfq#`lmpjgfqujpjwjmdf{solqfqsqjnbqz#pfbq`k!#bmgqljg!rvj`hoz#nffwjmdpfpwjnbwf8qfwvqm#8`lolq9 #kfjdkw>bssqlubo/#%rvlw8#`kf`hfg-njm-ip!nbdmfwj`=?,b=?,kelqf`bpw-#Tkjof#wkvqpgbzgufqwjpf%fb`vwf8kbp@obppfubovbwflqgfqjmdf{jpwjmdsbwjfmwp#Lmojmf#`lolqbglLswjlmp!`bnsafoo?\\\"..#fmg?,psbm=??aq#,=\\x0E\\t\\\\slsvsp\\x7Fp`jfm`fp/%rvlw8#rvbojwz#Tjmgltp#bppjdmfgkfjdkw9#?a#`obppof%rvlw8#ubovf>!#@lnsbmzf{bnsofp?jeqbnf#afojfufpsqfpfmwpnbqpkboosbqw#le#sqlsfqoz*-\\t\\tWkf#wb{lmlnznv`k#le#?,psbm=\\t!#gbwb.pqwvdv/Fpp`qlooWl#sqlif`w?kfbg=\\x0E\\tbwwlqmfzfnskbpjppslmplqpebm`zal{tlqog$p#tjogojef`kf`hfg>pfppjlmpsqldqbnns{8elmw.#Sqlif`wilvqmbopafojfufgub`bwjlmwklnsplmojdkwjmdbmg#wkf#psf`jbo#alqgfq>3`kf`hjmd?,walgz=?avwwlm#@lnsofwf`ofbqej{\\t?kfbg=\\tbqwj`of#?pf`wjlmejmgjmdpqlof#jm#slsvobq##L`wlafqtfapjwf#f{slpvqfvpfg#wl##`kbmdfplsfqbwfg`oj`hjmdfmwfqjmd`lnnbmgpjmelqnfg#mvnafqp##?,gju=`qfbwjmdlmPvanjwnbqzobmg`loofdfpbmbozwj`ojpwjmdp`lmwb`w-olddfgJmbgujplqzpjaojmdp`lmwfmw!p%rvlw8*p-#Wkjp#sb`hbdfp`kf`hal{pvddfpwpsqfdmbmwwlnlqqltpsb`jmd>j`lm-smdibsbmfpf`lgfabpfavwwlm!=dbnaojmdpv`k#bp#/#tkjof#?,psbm=#njpplvqjpslqwjmdwls92s{#-?,psbm=wfmpjlmptjgwk>!1obyzolbgmlufnafqvpfg#jm#kfjdkw>!`qjsw!=\\t%maps8?,?wq=?wg#kfjdkw91,sqlgv`w`lvmwqz#jm`ovgf#ellwfq!#%ow8\\\"..#wjwof!=?,irvfqz-?,elqn=\\t+\\x0BBl\\bQ\\x7F*+\\x0BUm\\x05Gx*kqubwphjjwbojbmlqln/Nm(ow/Pqh/Kf4K4]4C5dwbnaj/Emmlwj`jbpnfmpbifpsfqplmbpgfqf`klpmb`jlmbopfquj`jl`lmwb`wlvpvbqjlpsqldqbnbdlajfqmlfnsqfpbpbmvm`jlpubofm`jb`lolnajbgfpsv/Epgfslqwfpsqlzf`wlsqlgv`wls/Vaoj`lmlplwqlpkjpwlqjbsqfpfmwfnjoolmfpnfgjbmwfsqfdvmwbbmwfqjlqqf`vqplpsqlaofnbpbmwjbdlmvfpwqlplsjmj/_mjnsqjnjqnjfmwqbpbn/Eqj`bufmgfglqpl`jfgbgqfpsf`wlqfbojybqqfdjpwqlsbobaqbpjmwfq/Epfmwlm`fpfpsf`jbonjfnaqlpqfbojgbg`/_qglabybqbdlybs/Mdjmbppl`jbofpaolrvfbqdfpwj/_mborvjofqpjpwfnbp`jfm`jbp`lnsofwlufqpj/_m`lnsofwbfpwvgjlps/Vaoj`blaifwjulboj`bmwfavp`bglq`bmwjgbgfmwqbgbpb``jlmfpbq`kjulppvsfqjlqnbzlq/Abbofnbmjbevm`j/_m/Vowjnlpkb`jfmglbrvfoolpfgj`j/_mefqmbmglbnajfmwfeb`fallhmvfpwqbp`ojfmwfpsql`fplpabpwbmwfsqfpfmwbqfslqwbq`lmdqfplsvaoj`bq`lnfq`jl`lmwqbwli/_ufmfpgjpwqjwlw/E`mj`b`lmivmwlfmfqd/Abwqbabibqbpwvqjbpqf`jfmwfvwjojybqalofw/Ampboubglq`lqqf`wbwqbabilpsqjnfqlpmfdl`jlpojafqwbggfwboofpsbmwboobsq/_{jnlbonfq/Abbmjnbofprvj/Emfp`lqby/_mpf``j/_mavp`bmglls`jlmfpf{wfqjlq`lm`fswlwlgbu/Abdbofq/Abfp`qjajqnfgj`jmboj`fm`jb`lmpvowbbpsf`wlp`q/Awj`bg/_obqfpivpwj`jbgfafq/Mmsfq/Alglmf`fpjwbnbmwfmfqsfrvf/]lqf`jajgbwqjavmbowfmfqjef`bm`j/_m`bmbqjbpgfp`bqdbgjufqplpnboolq`bqfrvjfqfw/E`mj`lgfafq/Abujujfmgbejmbmybpbgfobmwfevm`jlmb`lmpfilpgje/A`jo`jvgbgfpbmwjdvbpbubmybgbw/Eqnjmlvmjgbgfpp/Mm`kfy`bnsb/]bplewlmj`qfujpwbp`lmwjfmfpf`wlqfpnlnfmwlpeb`vowbg`q/Egjwlgjufqpbppvsvfpwleb`wlqfppfdvmglpsfrvf/]b<_<R<X<\\\\<Y=m<W<T<Y=m=n=`<]=g<W<R<]=g=n=`=a=n<R<P<y=m<W<T=n<R<_<R<P<Y<Q=c<^=m<Y=i=a=n<R<U<X<\\\\<Z<Y<]=g<W<T<_<R<X=o<X<Y<Q=`=a=n<R=n<]=g<W<\\\\=m<Y<]=c<R<X<T<Q=m<Y<]<Y<Q<\\\\<X<R=m<\\\\<U=n=h<R=n<R<Q<Y<_<R=m<^<R<T=m<^<R<U<T<_=l=g=n<R<Z<Y<^=m<Y<P=m<^<R=b<W<T=d=`=a=n<T=i<S<R<V<\\\\<X<Q<Y<U<X<R<P<\\\\<P<T=l<\\\\<W<T<]<R=n<Y<P=o=i<R=n=c<X<^=o=i=m<Y=n<T<W=b<X<T<X<Y<W<R<P<T=l<Y=n<Y<]=c=m<^<R<Y<^<T<X<Y=k<Y<_<R=a=n<T<P=m=k<Y=n=n<Y<P=g=j<Y<Q=g=m=n<\\\\<W<^<Y<X=`=n<Y<P<Y<^<R<X=g=n<Y<]<Y<^=g=d<Y<Q<\\\\<P<T=n<T<S<\\\\=n<R<P=o<S=l<\\\\<^<W<T=j<\\\\<R<X<Q<\\\\<_<R<X=g<[<Q<\\\\=b<P<R<_=o<X=l=o<_<^=m<Y<U<T<X<Y=n<V<T<Q<R<R<X<Q<R<X<Y<W<\\\\<X<Y<W<Y=m=l<R<V<T=b<Q=c<^<Y=m=`<y=m=n=`=l<\\\\<[<\\\\<Q<\\\\=d<T4K5h5h5k4K5h4F5f4@5i5f4U4B4K4Y4E4K5h4\\\\5f4U5h5f5k4@4C5f4C4K5h4N5j4K5h4]4C4F4A5o5i4Y5m4A4E5o4K5j4F4K5h5h5f5f5o5d5j4X4D5o4E5m5f5k4K4D5j4K4F4A5d4K4M4O5o4G4]4B5h4K5h4K5h4A4D4C5h5f5h4C4]5d4_4K4Z4V4[4F5o5d5j5k5j4K5o4_4K4A4E5j4K4C5f4K5h4[4D4U5h5f5o4X5o4]4K5f5i5o5j5i5j5k4K4X4]5o4E4]4J5f4_5j4X5f4[5i4K4\\\\4K4K5h5m5j4X4D4K4D4F4U4D4]4]4A5i4E5o4K5m4E5f5n5d5h5i4]5o4^5o5h5i4E4O4A5i4C5n5h4D5f5f4U5j5f4Y5d4]4E4[4]5f5n4X4K4]5o4@5d4K5h4O4B4]5e5i4U5j4K4K4D4A4G4U4]5d4Z4D4X5o5h5i4_4@5h4D5j4K5j4B4K5h4C5o4F4K4D5o5h5f4E4D4C5d5j4O5f4Z4K5f5d4@4C5m4]5f5n5o4F4D4F4O5m4Z5h5i4[4D4B4K5o4G4]4D4K4]5o4K5m4Z5h4K4A5h5e5j5m4_5k4O5f4K5i4]4C5d4C4O5j5k4K4C5f5j4K4K5h4K5j5i4U4]4Z4F4U5h5i4C4K4B5h5i5i5o5j\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x03\\x02\\x03\\x02\\x03\\x02\\x03\\x01\\x03\\x01\\x03\\x01\\x03\\x01\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x02\\x01\\0\\x07\\x06\\x05\\x04\\x04\\x05\\x06\\x07\\0\\x01\\x02\\x03\\x0B\\n\\t\\b\\x0F\\x0E\\r\\f\\f\\r\\x0E\\x0F\\b\\t\\n\\x0B\\x13\\x12\\x11\\x10\\x17\\x16\\x15\\x14\\x14\\x15\\x16\\x17\\x10\\x11\\x12\\x13\\x1B\\x1A\\x19\\x18\\x1F\\x1E\\x1D\\x1C\\x1C\\x1D\\x1E\\x1F\\x18\\x19\\x1A\\x1B\\x13\\x13\\x13\\x13\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x13\\x13\\x13\\x13\\x02\\x03\\x03\\x03\\x01\\x03\\x03\\x03\\x01\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\0\\x03\\x03\\x03\\x13\\x13\\x03\\x02\\x03\\x03\\x03\\x02\\x03\\x03\\x13\\x13\\x03\\x02\\x03\\x03\\x03\\x0B\\x03\\x0B\\x03\\x0B\\x03\\x0B\\x03\\x03\\x03\\x02\\x03\\x01\\x03\\0\\x03\\x07\\x03\\x06\\x03\\x05\\x03\\x04qfplvq`fp`lvmwqjfprvfpwjlmpfrvjsnfmw`lnnvmjwzbubjobaofkjdkojdkwGWG,{kwnonbqhfwjmdhmltofgdfplnfwkjmd`lmwbjmfqgjqf`wjlmpvap`qjafbgufqwjpf`kbqb`wfq!#ubovf>!?,pfof`w=Bvpwqbojb!#`obpp>!pjwvbwjlmbvwklqjwzelooltjmdsqjnbqjozlsfqbwjlm`kboofmdfgfufolsfgbmlmznlvpevm`wjlm#evm`wjlmp`lnsbmjfppwqv`wvqfbdqffnfmw!#wjwof>!slwfmwjbofgv`bwjlmbqdvnfmwppf`lmgbqz`lszqjdkwobmdvbdfpf{`ovpjuf`lmgjwjlm?,elqn=\\x0E\\tpwbwfnfmwbwwfmwjlmAjldqbskz~#fopf#x\\tplovwjlmptkfm#wkf#Bmbozwj`pwfnsobwfpgbmdfqlvppbwfoojwfgl`vnfmwpsvaojpkfqjnslqwbmwsqlwlwzsfjmeovfm`f%qbrvl8?,feef`wjufdfmfqboozwqbmpelqnafbvwjevowqbmpslqwlqdbmjyfgsvaojpkfgsqlnjmfmwvmwjo#wkfwkvnambjoMbwjlmbo#-el`vp+*8lufq#wkf#njdqbwjlmbmmlvm`fgellwfq!=\\tf{`fswjlmofpp#wkbmf{sfmpjufelqnbwjlmeqbnftlqhwfqqjwlqzmgj`bwjlm`vqqfmwoz`obppMbnf`qjwj`jpnwqbgjwjlmfopftkfqfBof{bmgfqbssljmwfgnbwfqjbopaqlbg`bpwnfmwjlmfgbeejojbwf?,lswjlm=wqfbwnfmwgjeefqfmw,gfebvow-Sqfpjgfmwlm`oj`h>!ajldqbskzlwkfqtjpfsfqnbmfmwEqbm/KbjpKlooztllgf{sbmpjlmpwbmgbqgp?,pwzof=\\tqfgv`wjlmGf`fnafq#sqfefqqfg@bnaqjgdflsslmfmwpAvpjmfpp#`lmevpjlm=\\t?wjwof=sqfpfmwfgf{sobjmfgglfp#mlw#tlqogtjgfjmwfqeb`fslpjwjlmpmftpsbsfq?,wbaof=\\tnlvmwbjmpojhf#wkf#fppfmwjboejmbm`jbopfof`wjlmb`wjlm>!,babmglmfgFgv`bwjlmsbqpfJmw+pwbajojwzvmbaof#wl?,wjwof=\\tqfobwjlmpMlwf#wkbwfeej`jfmwsfqelqnfgwtl#zfbqpPjm`f#wkfwkfqfelqftqbssfq!=bowfqmbwfjm`qfbpfgAbwwof#lesfq`fjufgwqzjmd#wlmf`fppbqzslqwqbzfgfof`wjlmpFojybafwk?,jeqbnf=gjp`lufqzjmpvqbm`fp-ofmdwk8ofdfmgbqzDfldqbskz`bmgjgbwf`lqslqbwfplnfwjnfppfquj`fp-jmkfqjwfg?,pwqlmd=@lnnvmjwzqfojdjlvpol`bwjlmp@lnnjwwffavjogjmdpwkf#tlqogml#olmdfqafdjmmjmdqfefqfm`f`bmmlw#afeqfrvfm`zwzsj`boozjmwl#wkf#qfobwjuf8qf`lqgjmdsqfpjgfmwjmjwjboozwf`kmjrvfwkf#lwkfqjw#`bm#aff{jpwfm`fvmgfqojmfwkjp#wjnfwfofsklmfjwfnp`lsfsqb`wj`fpbgubmwbdf*8qfwvqm#Elq#lwkfqsqlujgjmdgfnl`qb`zalwk#wkf#f{wfmpjufpveefqjmdpvsslqwfg`lnsvwfqp#evm`wjlmsqb`wj`bopbjg#wkbwjw#nbz#afFmdojpk?,eqln#wkf#p`kfgvofggltmolbgp?,obafo=\\tpvpsf`wfgnbqdjm9#3psjqjwvbo?,kfbg=\\t\\tnj`qlplewdqbgvboozgjp`vppfgkf#af`bnff{f`vwjufirvfqz-ipklvpfklog`lmejqnfgsvq`kbpfgojwfqboozgfpwqlzfgvs#wl#wkfubqjbwjlmqfnbjmjmdjw#jp#mlw`fmwvqjfpIbsbmfpf#bnlmd#wkf`lnsofwfgbodlqjwknjmwfqfpwpqfafoojlmvmgfejmfgfm`lvqbdfqfpjybaofjmuloujmdpfmpjwjufvmjufqpbosqlujpjlm+bowklvdkefbwvqjmd`lmgv`wfg*/#tkj`k#`lmwjmvfg.kfbgfq!=Efaqvbqz#mvnfqlvp#lufqeolt9`lnslmfmweqbdnfmwpf{`foofmw`lopsbm>!wf`kmj`bomfbq#wkf#Bgubm`fg#plvq`f#lef{sqfppfgKlmd#Hlmd#Eb`fallhnvowjsof#nf`kbmjpnfofubwjlmleefmpjuf?,elqn=\\t\\npslmplqfggl`vnfmw-lq#%rvlw8wkfqf#bqfwklpf#tklnlufnfmwpsql`fppfpgjeej`vowpvanjwwfgqf`lnnfmg`lmujm`fgsqlnlwjmd!#tjgwk>!-qfsob`f+`obppj`bo`lbojwjlmkjp#ejqpwgf`jpjlmpbppjpwbmwjmgj`bwfgfulovwjlm.tqbssfq!fmlvdk#wlbolmd#wkfgfojufqfg..=\\x0E\\t?\\\"..Bnfqj`bm#sqlwf`wfgMlufnafq#?,pwzof=?evqmjwvqfJmwfqmfw##lmaovq>!pvpsfmgfgqf`jsjfmwabpfg#lm#Nlqflufq/balojpkfg`loof`wfgtfqf#nbgffnlwjlmbofnfqdfm`zmbqqbwjufbgul`bwfps{8alqgfq`lnnjwwfggjq>!owq!fnsolzffpqfpfbq`k-#pfof`wfgpv``fpplq`vpwlnfqpgjpsobzfgPfswfnafqbgg@obpp+Eb`fallh#pvddfpwfgbmg#obwfqlsfqbwjmdfobalqbwfPlnfwjnfpJmpwjwvwf`fqwbjmozjmpwboofgelooltfqpIfqvpbofnwkfz#kbuf`lnsvwjmddfmfqbwfgsqlujm`fpdvbqbmwffbqajwqbqzqf`ldmjyftbmwfg#wls{8tjgwk9wkflqz#leafkbujlvqTkjof#wkffpwjnbwfgafdbm#wl#jw#af`bnfnbdmjwvgfnvpw#kbufnlqf#wkbmGjqf`wlqzf{wfmpjlmpf`qfwbqzmbwvqboozl``vqqjmdubqjbaofpdjufm#wkfsobwelqn-?,obafo=?ebjofg#wl`lnslvmgphjmgp#le#pl`jfwjfpbolmdpjgf#..%dw8\\t\\tplvwktfpwwkf#qjdkwqbgjbwjlmnbz#kbuf#vmfp`bsf+pslhfm#jm!#kqfe>!,sqldqbnnflmoz#wkf#`lnf#eqlngjqf`wlqzavqjfg#jmb#pjnjobqwkfz#tfqf?,elmw=?,Mlqtfdjbmpsf`jejfgsqlgv`jmdsbppfmdfq+mft#Gbwfwfnslqbqzej`wjlmboBewfq#wkffrvbwjlmpgltmolbg-qfdvobqozgfufolsfqbaluf#wkfojmhfg#wlskfmlnfmbsfqjlg#lewllowjs!=pvapwbm`fbvwlnbwj`bpsf`w#leBnlmd#wkf`lmmf`wfgfpwjnbwfpBjq#Elq`fpzpwfn#lelaif`wjufjnnfgjbwfnbhjmd#jwsbjmwjmdp`lmrvfqfgbqf#pwjoosql`fgvqfdqltwk#lekfbgfg#azFvqlsfbm#gjujpjlmpnlof`vofpeqbm`kjpfjmwfmwjlmbwwqb`wfg`kjogkllgbopl#vpfggfgj`bwfgpjmdbslqfgfdqff#leebwkfq#le`lmeoj`wp?,b=?,s=\\t`bnf#eqlntfqf#vpfgmlwf#wkbwqf`fjujmdF{f`vwjuffufm#nlqfb``fpp#wl`lnnbmgfqSlojwj`bonvpj`jbmpgfoj`jlvpsqjplmfqpbgufmw#leVWE.;!#,=?\\\"X@GBWBX!=@lmwb`wPlvwkfqm#ad`lolq>!pfqjfp#le-#Jw#tbp#jm#Fvqlsfsfqnjwwfgubojgbwf-bssfbqjmdleej`jboppfqjlvpoz.obmdvbdfjmjwjbwfgf{wfmgjmdolmd.wfqnjmeobwjlmpv`k#wkbwdfw@llhjfnbqhfg#az?,avwwlm=jnsofnfmwavw#jw#jpjm`qfbpfpgltm#wkf#qfrvjqjmdgfsfmgfmw..=\\t?\\\"..#jmwfqujftTjwk#wkf#`lsjfp#le`lmpfmpvptbp#avjowUfmfyvfob+elqnfqozwkf#pwbwfsfqplmmfopwqbwfdj`ebulvq#lejmufmwjlmTjhjsfgjb`lmwjmfmwujqwvbooztkj`k#tbpsqjm`jsof@lnsofwf#jgfmwj`bopklt#wkbwsqjnjwjufbtbz#eqlnnlof`vobqsqf`jpfozgjpploufgVmgfq#wkfufqpjlm>!=%maps8?,Jw#jp#wkf#Wkjp#jp#tjoo#kbuflqdbmjpnpplnf#wjnfEqjfgqj`ktbp#ejqpwwkf#lmoz#eb`w#wkbwelqn#jg>!sqf`fgjmdWf`kmj`boskzpj`jpwl``vqp#jmmbujdbwlqpf`wjlm!=psbm#jg>!plvdkw#wlafolt#wkfpvqujujmd~?,pwzof=kjp#gfbwkbp#jm#wkf`bvpfg#azsbqwjboozf{jpwjmd#vpjmd#wkftbp#djufmb#ojpw#leofufop#lemlwjlm#leLeej`jbo#gjpnjppfgp`jfmwjpwqfpfnaofpgvsoj`bwff{solpjufqf`lufqfgboo#lwkfqdboofqjfpxsbggjmd9sflsof#leqfdjlm#lebggqfppfpbppl`jbwfjnd#bow>!jm#nlgfqmpklvog#afnfwklg#leqfslqwjmdwjnfpwbnsmffgfg#wlwkf#Dqfbwqfdbqgjmdpffnfg#wlujftfg#bpjnsb`w#lmjgfb#wkbwwkf#Tlqogkfjdkw#lef{sbmgjmdWkfpf#bqf`vqqfmw!=`bqfevooznbjmwbjmp`kbqdf#le@obppj`bobggqfppfgsqfgj`wfgltmfqpkjs?gju#jg>!qjdkw!=\\x0E\\tqfpjgfm`fofbuf#wkf`lmwfmw!=bqf#lewfm##~*+*8\\x0E\\tsqlabaoz#Sqlefpplq.avwwlm!#qfpslmgfgpbzp#wkbwkbg#wl#afsob`fg#jmKvmdbqjbmpwbwvp#lepfqufp#bpVmjufqpbof{f`vwjlmbddqfdbwfelq#tkj`kjmef`wjlmbdqffg#wlkltfufq/#slsvobq!=sob`fg#lm`lmpwqv`wfof`wlqbopznalo#lejm`ovgjmdqfwvqm#wlbq`kjwf`w@kqjpwjbmsqfujlvp#ojujmd#jmfbpjfq#wlsqlefpplq\\t%ow8\\\"..#feef`w#lebmbozwj`ptbp#wbhfmtkfqf#wkfwllh#lufqafojfe#jmBeqjhbbmpbp#ebq#bpsqfufmwfgtlqh#tjwkb#psf`jbo?ejfogpfw@kqjpwnbpQfwqjfufg\\t\\tJm#wkf#ab`h#jmwlmlqwkfbpwnbdbyjmfp=?pwqlmd=`lnnjwwffdlufqmjmddqlvsp#lepwlqfg#jmfpwbaojpkb#dfmfqbojwp#ejqpwwkfjq#ltmslsvobwfgbm#laif`w@bqjaafbmboolt#wkfgjpwqj`wptjp`lmpjmol`bwjlm-8#tjgwk9#jmkbajwfgPl`jbojpwIbmvbqz#2?,ellwfq=pjnjobqoz`klj`f#lewkf#pbnf#psf`jej`#avpjmfpp#Wkf#ejqpw-ofmdwk8#gfpjqf#wlgfbo#tjwkpjm`f#wkfvpfqBdfmw`lm`fjufgjmgf{-sksbp#%rvlw8fmdbdf#jmqf`fmwoz/eft#zfbqptfqf#bopl\\t?kfbg=\\t?fgjwfg#azbqf#hmltm`jwjfp#jmb``fpphfz`lmgfnmfgbopl#kbufpfquj`fp/ebnjoz#leP`kllo#le`lmufqwfgmbwvqf#le#obmdvbdfnjmjpwfqp?,laif`w=wkfqf#jp#b#slsvobqpfrvfm`fpbgul`bwfgWkfz#tfqfbmz#lwkfqol`bwjlm>fmwfq#wkfnv`k#nlqfqfeof`wfgtbp#mbnfglqjdjmbo#b#wzsj`botkfm#wkfzfmdjmffqp`lvog#mlwqfpjgfmwptfgmfpgbzwkf#wkjqg#sqlgv`wpIbmvbqz#1tkbw#wkfzb#`fqwbjmqfb`wjlmpsql`fpplqbewfq#kjpwkf#obpw#`lmwbjmfg!=?,gju=\\t?,b=?,wg=gfsfmg#lmpfbq`k!=\\tsjf`fp#le`lnsfwjmdQfefqfm`fwfmmfppfftkj`k#kbp#ufqpjlm>?,psbm=#??,kfbgfq=djufp#wkfkjpwlqjbmubovf>!!=sbggjmd93ujft#wkbwwldfwkfq/wkf#nlpw#tbp#elvmgpvapfw#lebwwb`h#lm`kjogqfm/sljmwp#lesfqplmbo#slpjwjlm9boofdfgoz@ofufobmgtbp#obwfqbmg#bewfqbqf#djufmtbp#pwjoop`qloojmdgfpjdm#lenbhfp#wkfnv`k#ofppBnfqj`bmp-\\t\\tBewfq#/#avw#wkfNvpfvn#leolvjpjbmb+eqln#wkfnjmmfplwbsbqwj`ofpb#sql`fppGlnjmj`bmulovnf#leqfwvqmjmdgfefmpjuf33s{\\x7Fqjdknbgf#eqlnnlvpflufq!#pwzof>!pwbwfp#le+tkj`k#jp`lmwjmvfpEqbm`jp`lavjogjmd#tjwklvw#btjwk#plnftkl#tlvogb#elqn#leb#sbqw#leafelqf#jwhmltm#bp##Pfquj`fpol`bwjlm#bmg#lewfmnfbpvqjmdbmg#jw#jpsbsfqab`hubovfp#le\\x0E\\t?wjwof=>#tjmglt-gfwfqnjmffq%rvlw8#sobzfg#azbmg#fbqoz?,`fmwfq=eqln#wkjpwkf#wkqffsltfq#bmgle#%rvlw8jmmfqKWNO?b#kqfe>!z9jmojmf8@kvq`k#lewkf#fufmwufqz#kjdkleej`jbo#.kfjdkw9#`lmwfmw>!,`dj.ajm,wl#`qfbwfbeqjhbbmpfpsfqbmwleqbm/Kbjpobwujf)Mvojfwvuj)_(`f)Mwjmb(af)Mwjmb\\fUh\\fT{\\fTN\\n{I\\np@\\x04Fr\\x0BBl\\bQ\\x7F\\tA{\\x0BUm\\x05Gx\\tA{\\x01yp\\x06YA\\0zX\\bTV\\bWl\\bUd\\x04BM\\x0BB{\\npV\\x0B@x\\x04B\\\\\\np@\\x04Db\\x04Gz\\tal\\npa\\tfM\\tuD\\bV~\\x04mx\\x0BQ}\\ndS\\tp\\\\\\bVK\\bS]\\bU|\\x05oD\\tkV\\x0Bed\\x0BHR\\nb~\\x04M`\\nJp\\x05oD\\x04|Q\\nLP\\x04Sw\\bTl\\nAI\\nxC\\bWt\\tBq\\x05F`\\x04Cm\\x0BLm\\tKx\\t}t\\bPv\\ny\\\\\\naB\\tV\\x7F\\nZd\\x04XU\\x04li\\tfr\\ti@\\tBH\\x04BD\\x04BV\\t`V\\n[]\\tp_\\tTn\\n~A\\nxR\\tuD\\t`{\\bV@\\tTn\\tHK\\tAJ\\x0Bxs\\x04Zf\\nqI\\x04Zf\\x0BBM\\x0B|j\\t}t\\bSM\\nmC\\x0BQ}pfquj`jlpbqw/A`volbqdfmwjmbabq`folmb`vborvjfqsvaoj`bglsqlgv`wlpslo/Awj`bqfpsvfpwbtjhjsfgjbpjdvjfmwfa/Vprvfgb`lnvmjgbgpfdvqjgbgsqjm`jsbosqfdvmwbp`lmwfmjglqfpslmgfqufmfyvfobsqlaofnbpgj`jfnaqfqfob`j/_mmlujfnaqfpjnjobqfpsqlzf`wlpsqldqbnbpjmpwjwvwlb`wjujgbgfm`vfmwqbf`lmln/Abjn/Mdfmfp`lmwb`wbqgfp`bqdbqmf`fpbqjlbwfm`j/_mwfo/Eelml`lnjpj/_m`bm`jlmfp`bsb`jgbgfm`lmwqbqbm/Mojpjpebulqjwlpw/Eqnjmlpsqlujm`jbfwjrvfwbpfofnfmwlpevm`jlmfpqfpvowbgl`bq/M`wfqsqlsjfgbgsqjm`jsjlmf`fpjgbgnvmj`jsbo`qfb`j/_mgfp`bqdbpsqfpfm`jb`lnfq`jbolsjmjlmfpfifq`j`jlfgjwlqjbopbobnbm`bdlmy/Mofygl`vnfmwlsfo/A`vobqf`jfmwfpdfmfqbofpwbqqbdlmbsq/M`wj`bmlufgbgfpsqlsvfpwbsb`jfmwfpw/E`mj`bplaifwjulp`lmwb`wlp\\fHB\\fIk\\fHn\\fH^\\fHS\\fHc\\fHU\\fId\\fHn\\fH{\\fHC\\fHR\\fHT\\fHR\\fHI\\fHc\\fHY\\fHn\\fH\\\\\\fHU\\fIk\\fHy\\fIg\\fHd\\fHy\\fIm\\fHw\\fH\\\\\\fHU\\fHR\\fH@\\fHR\\fHJ\\fHy\\fHU\\fHR\\fHT\\fHA\\fIl\\fHU\\fIm\\fHc\\fH\\\\\\fHU\\fIl\\fHB\\fId\\fHn\\fHJ\\fHS\\fHD\\fH@\\fHR\\fHHgjsolgl`p\\fHT\\fHB\\fHC\\fH\\\\\\fIn\\fHF\\fHD\\fHR\\fHB\\fHF\\fHH\\fHR\\fHG\\fHS\\fH\\\\\\fHx\\fHT\\fHH\\fHH\\fH\\\\\\fHU\\fH^\\fIg\\fH{\\fHU\\fIm\\fHj\\fH@\\fHR\\fH\\\\\\fHJ\\fIk\\fHZ\\fHU\\fIm\\fHd\\fHz\\fIk\\fH^\\fHC\\fHJ\\fHS\\fHy\\fHR\\fHB\\fHY\\fIk\\fH@\\fHH\\fIl\\fHD\\fH@\\fIl\\fHv\\fHB\\fI`\\fHH\\fHT\\fHR\\fH^\\fH^\\fIk\\fHz\\fHp\\fIe\\fH@\\fHB\\fHJ\\fHJ\\fHH\\fHI\\fHR\\fHD\\fHU\\fIl\\fHZ\\fHU\\fH\\\\\\fHi\\fH^\\fH{\\fHy\\fHA\\fIl\\fHD\\fH{\\fH\\\\\\fHF\\fHR\\fHT\\fH\\\\\\fHR\\fHH\\fHy\\fHS\\fHc\\fHe\\fHT\\fIk\\fH{\\fHC\\fIl\\fHU\\fIn\\fHm\\fHj\\fH{\\fIk\\fHs\\fIl\\fHB\\fHz\\fIg\\fHp\\fHy\\fHR\\fH\\\\\\fHi\\fHA\\fIl\\fH{\\fHC\\fIk\\fHH\\fIm\\fHB\\fHY\\fIg\\fHs\\fHJ\\fIk\\fHn\\fHi\\fH{\\fH\\\\\\fH|\\fHT\\fIk\\fHB\\fIk\\fH^\\fH^\\fH{\\fHR\\fHU\\fHR\\fH^\\fHf\\fHF\\fH\\\\\\fHv\\fHR\\fH\\\\\\fH|\\fHT\\fHR\\fHJ\\fIk\\fH\\\\\\fHp\\fHS\\fHT\\fHJ\\fHS\\fH^\\fH@\\fHn\\fHJ\\fH@\\fHD\\fHR\\fHU\\fIn\\fHn\\fH^\\fHR\\fHz\\fHp\\fIl\\fHH\\fH@\\fHs\\fHD\\fHB\\fHS\\fH^\\fHk\\fHT\\fIk\\fHj\\fHD\\fIk\\fHD\\fHC\\fHR\\fHy\\fIm\\fH^\\fH^\\fIe\\fH{\\fHA\\fHR\\fH{\\fH\\\\\\fIk\\fH^\\fHp\\fH{\\fHU\\fH\\\\\\fHR\\fHB\\fH^\\fH{\\fIk\\fHF\\fIk\\fHp\\fHU\\fHR\\fHI\\fHk\\fHT\\fIl\\fHT\\fHU\\fIl\\fHy\\fH^\\fHR\\fHL\\fIl\\fHy\\fHU\\fHR\\fHm\\fHJ\\fIn\\fH\\\\\\fHH\\fHU\\fHH\\fHT\\fHR\\fHH\\fHC\\fHR\\fHJ\\fHj\\fHC\\fHR\\fHF\\fHR\\fHy\\fHy\\fI`\\fHD\\fHZ\\fHR\\fHB\\fHJ\\fIk\\fHz\\fHC\\fHU\\fIl\\fH\\\\\\fHR\\fHC\\fHz\\fIm\\fHJ\\fH^\\fH{\\fIl`bwfdlqjfpf{sfqjfm`f?,wjwof=\\x0E\\t@lszqjdkw#ibubp`qjsw`lmgjwjlmpfufqzwkjmd?s#`obpp>!wf`kmloldzab`hdqlvmg?b#`obpp>!nbmbdfnfmw%`lsz8#132ibubP`qjsw`kbqb`wfqpaqfbg`qvnawkfnpfoufpklqjylmwbodlufqmnfmw@bojelqmjbb`wjujwjfpgjp`lufqfgMbujdbwjlmwqbmpjwjlm`lmmf`wjlmmbujdbwjlmbssfbqbm`f?,wjwof=?n`kf`hal{!#wf`kmjrvfpsqlwf`wjlmbssbqfmwozbp#tfoo#bpvmw$/#$VB.qfplovwjlmlsfqbwjlmpwfofujpjlmwqbmpobwfgTbpkjmdwlmmbujdbwlq-#>#tjmglt-jnsqfppjlm%ow8aq%dw8ojwfqbwvqfslsvobwjlmad`lolq>! fpsf`jbooz#`lmwfmw>!sqlgv`wjlmmftpofwwfqsqlsfqwjfpgfejmjwjlmofbgfqpkjsWf`kmloldzSbqojbnfmw`lnsbqjplmvo#`obpp>!-jmgf{Le+!`lm`ovpjlmgjp`vppjlm`lnslmfmwpajloldj`boQfulovwjlm\\\\`lmwbjmfqvmgfqpwllgmlp`qjsw=?sfqnjppjlmfb`k#lwkfqbwnlpskfqf#lmel`vp>!?elqn#jg>!sql`fppjmdwkjp-ubovfdfmfqbwjlm@lmefqfm`fpvapfrvfmwtfoo.hmltmubqjbwjlmpqfsvwbwjlmskfmlnfmlmgjp`jsojmfoldl-smd!#+gl`vnfmw/alvmgbqjfpf{sqfppjlmpfwwofnfmwAb`hdqlvmglvw#le#wkffmwfqsqjpf+!kwwsp9!#vmfp`bsf+!sbpptlqg!#gfnl`qbwj`?b#kqfe>!,tqbssfq!=\\tnfnafqpkjsojmdvjpwj`s{8sbggjmdskjolplskzbppjpwbm`fvmjufqpjwzeb`jojwjfpqf`ldmjyfgsqfefqfm`fje#+wzsflenbjmwbjmfgul`bavobqzkzslwkfpjp-pvanjw+*8%bns8maps8bmmlwbwjlmafkjmg#wkfElvmgbwjlmsvaojpkfq!bppvnswjlmjmwqlgv`fg`lqqvswjlmp`jfmwjpwpf{soj`jwozjmpwfbg#legjnfmpjlmp#lm@oj`h>!`lmpjgfqfggfsbqwnfmwl``vsbwjlmpllm#bewfqjmufpwnfmwsqlmlvm`fgjgfmwjejfgf{sfqjnfmwNbmbdfnfmwdfldqbskj`!#kfjdkw>!ojmh#qfo>!-qfsob`f+,gfsqfppjlm`lmefqfm`fsvmjpknfmwfojnjmbwfgqfpjpwbm`fbgbswbwjlmlsslpjwjlmtfoo#hmltmpvssofnfmwgfwfqnjmfgk2#`obpp>!3s{8nbqdjmnf`kbmj`bopwbwjpwj`p`fofaqbwfgDlufqmnfmw\\t\\tGvqjmd#wgfufolsfqpbqwjej`jbofrvjubofmwlqjdjmbwfg@lnnjppjlmbwwb`knfmw?psbm#jg>!wkfqf#tfqfMfgfqobmgpafzlmg#wkfqfdjpwfqfgilvqmbojpweqfrvfmwozboo#le#wkfobmd>!fm!#?,pwzof=\\x0E\\tbaplovwf8#pvsslqwjmdf{wqfnfoz#nbjmpwqfbn?,pwqlmd=#slsvobqjwzfnsolznfmw?,wbaof=\\x0E\\t#`lopsbm>!?,elqn=\\t##`lmufqpjlmbalvw#wkf#?,s=?,gju=jmwfdqbwfg!#obmd>!fmSlqwvdvfpfpvapwjwvwfjmgjujgvbojnslppjaofnvowjnfgjbbonlpw#boos{#plojg# bsbqw#eqlnpvaif`w#wljm#Fmdojpk`qjwj`jyfgf{`fsw#elqdvjgfojmfplqjdjmboozqfnbqhbaofwkf#pf`lmgk1#`obpp>!?b#wjwof>!+jm`ovgjmdsbqbnfwfqpsqlkjajwfg>#!kwws9,,gj`wjlmbqzsfq`fswjlmqfulovwjlmelvmgbwjlms{8kfjdkw9pv``fppevopvsslqwfqpnjoofmmjvnkjp#ebwkfqwkf#%rvlw8ml.qfsfbw8`lnnfq`jbojmgvpwqjbofm`lvqbdfgbnlvmw#le#vmleej`jbofeej`jfm`zQfefqfm`fp`llqgjmbwfgjp`objnfqf{sfgjwjlmgfufolsjmd`bo`vobwfgpjnsojejfgofdjwjnbwfpvapwqjmd+3!#`obpp>!`lnsofwfozjoovpwqbwfejuf#zfbqpjmpwqvnfmwSvaojpkjmd2!#`obpp>!spz`kloldz`lmejgfm`fmvnafq#le#bapfm`f#leel`vpfg#lmiljmfg#wkfpwqv`wvqfpsqfujlvpoz=?,jeqbnf=lm`f#bdbjmavw#qbwkfqjnnjdqbmwple#`lvqpf/b#dqlvs#leOjwfqbwvqfVmojhf#wkf?,b=%maps8\\tevm`wjlm#jw#tbp#wkf@lmufmwjlmbvwlnlajofSqlwfpwbmwbddqfppjufbewfq#wkf#Pjnjobqoz/!#,=?,gju=`loof`wjlm\\x0E\\tevm`wjlmujpjajojwzwkf#vpf#leulovmwffqpbwwqb`wjlmvmgfq#wkf#wkqfbwfmfg)?\\\"X@GBWBXjnslqwbm`fjm#dfmfqbowkf#obwwfq?,elqn=\\t?,-jmgf{Le+$j#>#38#j#?gjeefqfm`fgfulwfg#wlwqbgjwjlmppfbq`k#elqvowjnbwfozwlvqmbnfmwbwwqjavwfppl.`boofg#~\\t?,pwzof=fubovbwjlmfnskbpjyfgb``fppjaof?,pf`wjlm=pv``fppjlmbolmd#tjwkNfbmtkjof/jmgvpwqjfp?,b=?aq#,=kbp#af`lnfbpsf`wp#leWfofujpjlmpveej`jfmwabphfwabooalwk#pjgfp`lmwjmvjmdbm#bqwj`of?jnd#bow>!bgufmwvqfpkjp#nlwkfqnbm`kfpwfqsqjm`jsofpsbqwj`vobq`lnnfmwbqzfeef`wp#legf`jgfg#wl!=?pwqlmd=svaojpkfqpIlvqmbo#legjeej`vowzeb`jojwbwfb``fswbaofpwzof-`pp!\\nevm`wjlm#jmmlubwjlm=@lszqjdkwpjwvbwjlmptlvog#kbufavpjmfppfpGj`wjlmbqzpwbwfnfmwplewfm#vpfgsfqpjpwfmwjm#Ibmvbqz`lnsqjpjmd?,wjwof=\\t\\ngjsolnbwj``lmwbjmjmdsfqelqnjmdf{wfmpjlmpnbz#mlw#af`lm`fsw#le#lm`oj`h>!Jw#jp#boplejmbm`jbo#nbhjmd#wkfOv{fnalvqdbggjwjlmbobqf#`boofgfmdbdfg#jm!p`qjsw!*8avw#jw#tbpfof`wqlmj`lmpvanjw>!\\t?\\\"..#Fmg#fof`wqj`boleej`jboozpvddfpwjlmwls#le#wkfvmojhf#wkfBvpwqbojbmLqjdjmboozqfefqfm`fp\\t?,kfbg=\\x0E\\tqf`ldmjpfgjmjwjbojyfojnjwfg#wlBof{bmgqjbqfwjqfnfmwBgufmwvqfpelvq#zfbqp\\t\\t%ow8\\\"..#jm`qfbpjmdgf`lqbwjlmk0#`obpp>!lqjdjmp#lelaojdbwjlmqfdvobwjlm`obppjejfg+evm`wjlm+bgubmwbdfpafjmd#wkf#kjpwlqjbmp?abpf#kqfeqfsfbwfgoztjoojmd#wl`lnsbqbaofgfpjdmbwfgmlnjmbwjlmevm`wjlmbojmpjgf#wkfqfufobwjlmfmg#le#wkfp#elq#wkf#bvwklqjyfgqfevpfg#wlwbhf#sob`fbvwlmlnlvp`lnsqlnjpfslojwj`bo#qfpwbvqbmwwtl#le#wkfEfaqvbqz#1rvbojwz#leptelaif`w-vmgfqpwbmgmfbqoz#bootqjwwfm#azjmwfqujftp!#tjgwk>!2tjwkgqbtboeolbw9ofewjp#vpvbooz`bmgjgbwfpmftpsbsfqpnzpwfqjlvpGfsbqwnfmwafpw#hmltmsbqojbnfmwpvssqfppfg`lmufmjfmwqfnfnafqfggjeefqfmw#pzpwfnbwj`kbp#ofg#wlsqlsbdbmgb`lmwqloofgjmeovfm`fp`fqfnlmjbosql`objnfgSqlwf`wjlmoj#`obpp>!P`jfmwjej``obpp>!ml.wqbgfnbqhpnlqf#wkbm#tjgfpsqfbgOjafqbwjlmwllh#sob`fgbz#le#wkfbp#olmd#bpjnsqjplmfgBggjwjlmbo\\t?kfbg=\\t?nObalqbwlqzMlufnafq#1f{`fswjlmpJmgvpwqjboubqjfwz#leeolbw9#ofeGvqjmd#wkfbppfppnfmwkbuf#affm#gfbop#tjwkPwbwjpwj`pl``vqqfm`f,vo=?,gju=`ofbqej{!=wkf#svaoj`nbmz#zfbqptkj`k#tfqflufq#wjnf/pzmlmznlvp`lmwfmw!=\\tsqfpvnbaozkjp#ebnjozvpfqBdfmw-vmf{sf`wfgjm`ovgjmd#`kboofmdfgb#njmlqjwzvmgfejmfg!afolmdp#wlwbhfm#eqlnjm#L`wlafqslpjwjlm9#pbjg#wl#afqfojdjlvp#Efgfqbwjlm#qltpsbm>!lmoz#b#eftnfbmw#wkbwofg#wl#wkf..=\\x0E\\t?gju#?ejfogpfw=Bq`kajpkls#`obpp>!mlafjmd#vpfgbssqlb`kfpsqjujofdfpmlp`qjsw=\\tqfpvowp#jmnbz#af#wkfFbpwfq#fddnf`kbmjpnpqfbplmbaofSlsvobwjlm@loof`wjlmpfof`wfg!=mlp`qjsw=\\x0E,jmgf{-sksbqqjubo#le.ippgh$**8nbmbdfg#wljm`lnsofwf`bpvbowjfp`lnsofwjlm@kqjpwjbmpPfswfnafq#bqjwknfwj`sql`fgvqfpnjdkw#kbufSqlgv`wjlmjw#bssfbqpSkjolplskzeqjfmgpkjsofbgjmd#wldjujmd#wkfwltbqg#wkfdvbqbmwffggl`vnfmwfg`lolq9 333ujgfl#dbnf`lnnjppjlmqfeof`wjmd`kbmdf#wkfbppl`jbwfgpbmp.pfqjelmhfzsqfpp8#sbggjmd9Kf#tbp#wkfvmgfqozjmdwzsj`booz#/#bmg#wkf#pq`Fofnfmwpv``fppjufpjm`f#wkf#pklvog#af#mfwtlqhjmdb``lvmwjmdvpf#le#wkfoltfq#wkbmpkltp#wkbw?,psbm=\\t\\n\\n`lnsobjmwp`lmwjmvlvprvbmwjwjfpbpwqlmlnfqkf#gjg#mlwgvf#wl#jwpbssojfg#wlbm#bufqbdffeelqwp#wlwkf#evwvqfbwwfnsw#wlWkfqfelqf/`bsbajojwzQfsvaoj`bmtbp#elqnfgFof`wqlmj`hjolnfwfqp`kboofmdfpsvaojpkjmdwkf#elqnfqjmgjdfmlvpgjqf`wjlmppvapjgjbqz`lmpsjqb`zgfwbjop#lebmg#jm#wkfbeelqgbaofpvapwbm`fpqfbplm#elq`lmufmwjlmjwfnwzsf>!baplovwfozpvsslpfgozqfnbjmfg#bbwwqb`wjufwqbufoojmdpfsbqbwfozel`vpfp#lmfofnfmwbqzbssoj`baofelvmg#wkbwpwzofpkffwnbmvp`qjswpwbmgp#elq#ml.qfsfbw+plnfwjnfp@lnnfq`jbojm#Bnfqj`bvmgfqwbhfmrvbqwfq#lebm#f{bnsofsfqplmboozjmgf{-sks<?,avwwlm=\\tsfq`fmwbdfafpw.hmltm`qfbwjmd#b!#gjq>!owqOjfvwfmbmw\\t?gju#jg>!wkfz#tlvogbajojwz#lenbgf#vs#lemlwfg#wkbw`ofbq#wkbwbqdvf#wkbwwl#bmlwkfq`kjogqfm$psvqslpf#leelqnvobwfgabpfg#vslmwkf#qfdjlmpvaif`w#lesbppfmdfqpslppfppjlm-\\t\\tJm#wkf#Afelqf#wkfbewfqtbqgp`vqqfmwoz#b`qlpp#wkfp`jfmwjej``lnnvmjwz-`bsjwbojpnjm#Dfqnbmzqjdkw.tjmdwkf#pzpwfnPl`jfwz#leslojwj`jbmgjqf`wjlm9tfmw#lm#wlqfnlubo#le#Mft#Zlqh#bsbqwnfmwpjmgj`bwjlmgvqjmd#wkfvmofpp#wkfkjpwlqj`bokbg#affm#bgfejmjwjufjmdqfgjfmwbwwfmgbm`f@fmwfq#elqsqlnjmfm`fqfbgzPwbwfpwqbwfdjfpavw#jm#wkfbp#sbqw#le`lmpwjwvwf`objn#wkbwobalqbwlqz`lnsbwjaofebjovqf#le/#pv`k#bp#afdbm#tjwkvpjmd#wkf#wl#sqlujgfefbwvqf#leeqln#tkj`k,!#`obpp>!dfloldj`bopfufqbo#legfojafqbwfjnslqwbmw#klogp#wkbwjmd%rvlw8#ubojdm>wlswkf#Dfqnbmlvwpjgf#lemfdlwjbwfgkjp#`bqffqpfsbqbwjlmjg>!pfbq`ktbp#`boofgwkf#elvqwkqf`qfbwjlmlwkfq#wkbmsqfufmwjlmtkjof#wkf#fgv`bwjlm/`lmmf`wjmdb``vqbwfoztfqf#avjowtbp#hjoofgbdqffnfmwpnv`k#nlqf#Gvf#wl#wkftjgwk9#233plnf#lwkfqHjmdgln#lewkf#fmwjqfebnlvp#elqwl#`lmmf`wlaif`wjufpwkf#Eqfm`ksflsof#bmgefbwvqfg!=jp#pbjg#wlpwqv`wvqboqfefqfmgvnnlpw#lewfmb#pfsbqbwf.=\\t?gju#jg#Leej`jbo#tlqogtjgf-bqjb.obafowkf#sobmfwbmg#jw#tbpg!#ubovf>!ollhjmd#bwafmfej`jbobqf#jm#wkfnlmjwlqjmdqfslqwfgozwkf#nlgfqmtlqhjmd#lmbooltfg#wltkfqf#wkf#jmmlubwjuf?,b=?,gju=plvmgwqb`hpfbq`kElqnwfmg#wl#afjmsvw#jg>!lsfmjmd#leqfpwqj`wfgbglswfg#azbggqfppjmdwkfloldjbmnfwklgp#leubqjbmw#le@kqjpwjbm#ufqz#obqdfbvwlnlwjufaz#ebq#wkfqbmdf#eqlnsvqpvjw#leeloolt#wkfaqlvdkw#wljm#Fmdobmgbdqff#wkbwb``vpfg#le`lnfp#eqlnsqfufmwjmdgju#pwzof>kjp#lq#kfqwqfnfmglvpeqffgln#le`lm`fqmjmd3#2fn#2fn8Abphfwaboo,pwzof-`ppbm#fbqojfqfufm#bewfq,!#wjwof>!-`ln,jmgf{wbhjmd#wkfsjwwpavqdk`lmwfmw!=\\x0E?p`qjsw=+ewvqmfg#lvwkbujmd#wkf?,psbm=\\x0E\\t#l``bpjlmboaf`bvpf#jwpwbqwfg#wlskzpj`booz=?,gju=\\t##`qfbwfg#az@vqqfmwoz/#ad`lolq>!wbajmgf{>!gjpbpwqlvpBmbozwj`p#bopl#kbp#b=?gju#jg>!?,pwzof=\\t?`boofg#elqpjmdfq#bmg-pq`#>#!,,ujlobwjlmpwkjp#sljmw`lmpwbmwozjp#ol`bwfgqf`lqgjmdpg#eqln#wkfmfgfqobmgpslqwvdv/Fp;N;};D;u;F5m4K4]4_7`gfpbqqlool`lnfmwbqjlfgv`b`j/_mpfswjfnaqfqfdjpwqbglgjqf``j/_mvaj`b`j/_msvaoj`jgbgqfpsvfpwbpqfpvowbglpjnslqwbmwfqfpfqubglpbqw/A`volpgjefqfmwfppjdvjfmwfpqfs/Vaoj`bpjwvb`j/_mnjmjpwfqjlsqjub`jgbggjqf`wlqjlelqnb`j/_mslaob`j/_msqfpjgfmwf`lmw\", \"fmjglpb``fplqjlpwf`kmlqbwjsfqplmbofp`bwfdlq/Abfpsf`jbofpgjpslmjaofb`wvbojgbgqfefqfm`jbuboobglojgajaojlwf`bqfob`jlmfp`bofmgbqjlslo/Awj`bpbmwfqjlqfpgl`vnfmwlpmbwvqbofybnbwfqjbofpgjefqfm`jbf`lm/_nj`bwqbmpslqwfqlgq/Advfysbqwj`jsbqfm`vfmwqbmgjp`vpj/_mfpwqv`wvqbevmgb`j/_meqf`vfmwfpsfqnbmfmwfwlwbonfmwf<P<R<Z<Q<R<]=o<X<Y=n<P<R<Z<Y=n<^=l<Y<P=c=n<\\\\<V<Z<Y=k=n<R<]=g<]<R<W<Y<Y<R=k<Y<Q=`=a=n<R<_<R<V<R<_<X<\\\\<S<R=m<W<Y<^=m<Y<_<R=m<\\\\<U=n<Y=k<Y=l<Y<[<P<R<_=o=n=m<\\\\<U=n<\\\\<Z<T<[<Q<T<P<Y<Z<X=o<]=o<X=o=n<s<R<T=m<V<[<X<Y=m=`<^<T<X<Y<R=m<^=c<[<T<Q=o<Z<Q<R=m<^<R<Y<U<W=b<X<Y<U<S<R=l<Q<R<P<Q<R<_<R<X<Y=n<Y<U=m<^<R<T=i<S=l<\\\\<^<\\\\=n<\\\\<V<R<U<P<Y=m=n<R<T<P<Y<Y=n<Z<T<[<Q=`<R<X<Q<R<U<W=o=k=d<Y<S<Y=l<Y<X=k<\\\\=m=n<T=k<\\\\=m=n=`=l<\\\\<]<R=n<Q<R<^=g=i<S=l<\\\\<^<R=m<R<]<R<U<S<R=n<R<P<P<Y<Q<Y<Y=k<T=m<W<Y<Q<R<^=g<Y=o=m<W=o<_<R<V<R<W<R<Q<\\\\<[<\\\\<X=n<\\\\<V<R<Y=n<R<_<X<\\\\<S<R=k=n<T<s<R=m<W<Y=n<\\\\<V<T<Y<Q<R<^=g<U=m=n<R<T=n=n<\\\\<V<T=i=m=l<\\\\<[=o<M<\\\\<Q<V=n=h<R=l=o<P<v<R<_<X<\\\\<V<Q<T<_<T=m<W<R<^<\\\\<Q<\\\\=d<Y<U<Q<\\\\<U=n<T=m<^<R<T<P=m<^=c<[=`<W=b<]<R<U=k<\\\\=m=n<R=m=l<Y<X<T<v=l<R<P<Y<H<R=l=o<P=l=g<Q<V<Y=m=n<\\\\<W<T<S<R<T=m<V=n=g=m=c=k<P<Y=m=c=j=j<Y<Q=n=l=n=l=o<X<\\\\=m<\\\\<P=g=i=l=g<Q<V<\\\\<q<R<^=g<U=k<\\\\=m<R<^<P<Y=m=n<\\\\=h<T<W=`<P<P<\\\\=l=n<\\\\=m=n=l<\\\\<Q<P<Y=m=n<Y=n<Y<V=m=n<Q<\\\\=d<T=i<P<T<Q=o=n<T<P<Y<Q<T<T<P<Y=b=n<Q<R<P<Y=l<_<R=l<R<X=m<\\\\<P<R<P=a=n<R<P=o<V<R<Q=j<Y=m<^<R<Y<P<V<\\\\<V<R<U<|=l=i<T<^5i5j4F4C5e4I4]4_4K5h4]4_4K5h4E4K5h4U4K5i5o4F4D5k4K4D4]4K5i4@4K5h5f5d5i4K5h4Y5d4]4@4C5f4C4E4K5h4U4Z5d4I4Z4K5m4E4K5h5n4_5i4K5h4U4K4D4F4A5i5f5h5i5h5m4K4F5i5h4F5n5e4F4U4C5f5h4K5h4X4U4]4O4B4D4K4]4F4[5d5f4]4U5h5f5o5i4I4]5m4K5n4[5h4D4K4F4K5h5h4V4E4F4]4F5f4D4K5h5j4K4_4K5h4X5f4B5i5j4F4C5f4K5h4U4]4D4K5h5n4Y4Y4K5m5h4K5i4U5h5f5k4K4F4A4C5f4G4K5h5h5k5i4K5h4U5i5h5i5o4F4D4E5f5i5o5j5o4K5h4[5m5h5m5f4C5f5d4I4C4K4]4E4F4K4]5f4B4K5h4Y4A4E4F4_4@5f5h4K5h5d5n4F4U5j4C5i4K5i4C5f5j4E4F4Y5i5f5i4O4]4X5f5m4K5h4\\\\5f5j4U4]4D5f4E4D5d4K4D4E4O5h4U4K4D4K5h4_5m4]5i4X4K5o5h4F4U4K5h5e4K5h4O5d5h4K5h4_5j4E4@4K5i4U4E4K5h4Y4A5m4K5h4C5f5j5o5h5i4K4F4K5h4B4K4Y4K5h5i5h5m4O4U4Z4K4M5o4F4K4D4E4K5h4B5f4]4]4_4K4J5h4K5h5n5h4D4K5h4O4C4D5i5n4K4[4U5i4]4K4_5h5i5j4[5n4E4K5h5o4F4D4K5h4]4@5h4K4X4F4]5o4K5h5n4C5i5f4U4[5f5opAzWbdMbnf+-isd!#bow>!2s{#plojg# -dje!#bow>!wqbmpsbqfmwjmelqnbwjlmbssoj`bwjlm!#lm`oj`h>!fpwbaojpkfgbgufqwjpjmd-smd!#bow>!fmujqlmnfmwsfqelqnbm`fbssqlsqjbwf%bns8ngbpk8jnnfgjbwfoz?,pwqlmd=?,qbwkfq#wkbmwfnsfqbwvqfgfufolsnfmw`lnsfwjwjlmsob`fklogfqujpjajojwz9`lszqjdkw!=3!#kfjdkw>!fufm#wklvdkqfsob`fnfmwgfpwjmbwjlm@lqslqbwjlm?vo#`obpp>!Bppl`jbwjlmjmgjujgvbopsfqpsf`wjufpfwWjnflvw+vqo+kwws9,,nbwkfnbwj`pnbqdjm.wls9fufmwvbooz#gfp`qjswjlm*#ml.qfsfbw`loof`wjlmp-ISD\\x7Fwkvna\\x7Fsbqwj`jsbwf,kfbg=?algzeolbw9ofew8?oj#`obpp>!kvmgqfgp#le\\t\\tKltfufq/#`lnslpjwjlm`ofbq9alwk8`llsfqbwjlmtjwkjm#wkf#obafo#elq>!alqgfq.wls9Mft#Yfbobmgqf`lnnfmgfgsklwldqbskzjmwfqfpwjmd%ow8pvs%dw8`lmwqlufqpzMfwkfqobmgpbowfqmbwjufnb{ofmdwk>!ptjwyfqobmgGfufolsnfmwfppfmwjbooz\\t\\tBowklvdk#?,wf{wbqfb=wkvmgfqajqgqfsqfpfmwfg%bns8mgbpk8psf`vobwjlm`lnnvmjwjfpofdjpobwjlmfof`wqlmj`p\\t\\n?gju#jg>!joovpwqbwfgfmdjmffqjmdwfqqjwlqjfpbvwklqjwjfpgjpwqjavwfg5!#kfjdkw>!pbmp.pfqje8`bsbaof#le#gjpbssfbqfgjmwfqb`wjufollhjmd#elqjw#tlvog#afBedkbmjpwbmtbp#`qfbwfgNbwk-eollq+pvqqlvmgjmd`bm#bopl#aflapfqubwjlmnbjmwfmbm`ffm`lvmwfqfg?k1#`obpp>!nlqf#qf`fmwjw#kbp#affmjmubpjlm#le*-dfwWjnf+*evmgbnfmwboGfpsjwf#wkf!=?gju#jg>!jmpsjqbwjlmf{bnjmbwjlmsqfsbqbwjlmf{sobmbwjlm?jmsvw#jg>!?,b=?,psbm=ufqpjlmp#lejmpwqvnfmwpafelqf#wkf##>#$kwws9,,Gfp`qjswjlmqfobwjufoz#-pvapwqjmd+fb`k#le#wkff{sfqjnfmwpjmeovfmwjbojmwfdqbwjlmnbmz#sflsofgvf#wl#wkf#`lnajmbwjlmgl#mlw#kbufNjggof#Fbpw?mlp`qjsw=?`lszqjdkw!#sfqkbsp#wkfjmpwjwvwjlmjm#Gf`fnafqbqqbmdfnfmwnlpw#ebnlvpsfqplmbojwz`qfbwjlm#leojnjwbwjlmpf{`ovpjufozplufqfjdmwz.`lmwfmw!=\\t?wg#`obpp>!vmgfqdqlvmgsbqboofo#wlgl`wqjmf#lel``vsjfg#azwfqnjmloldzQfmbjppbm`fb#mvnafq#lepvsslqw#elqf{solqbwjlmqf`ldmjwjlmsqfgf`fpplq?jnd#pq`>!,?k2#`obpp>!svaoj`bwjlmnbz#bopl#afpsf`jbojyfg?,ejfogpfw=sqldqfppjufnjoojlmp#lepwbwfp#wkbwfmelq`fnfmwbqlvmg#wkf#lmf#bmlwkfq-sbqfmwMlgfbdqj`vowvqfBowfqmbwjufqfpfbq`kfqpwltbqgp#wkfNlpw#le#wkfnbmz#lwkfq#+fpsf`jbooz?wg#tjgwk>!8tjgwk9233&jmgfsfmgfmw?k0#`obpp>!#lm`kbmdf>!*-bgg@obpp+jmwfqb`wjlmLmf#le#wkf#gbvdkwfq#leb``fpplqjfpaqbm`kfp#le\\x0E\\t?gju#jg>!wkf#obqdfpwgf`obqbwjlmqfdvobwjlmpJmelqnbwjlmwqbmpobwjlmgl`vnfmwbqzjm#lqgfq#wl!=\\t?kfbg=\\t?!#kfjdkw>!2b`qlpp#wkf#lqjfmwbwjlm*8?,p`qjsw=jnsofnfmwfg`bm#af#pffmwkfqf#tbp#bgfnlmpwqbwf`lmwbjmfq!=`lmmf`wjlmpwkf#Aqjwjpktbp#tqjwwfm\\\"jnslqwbmw8s{8#nbqdjm.elooltfg#azbajojwz#wl#`lnsoj`bwfggvqjmd#wkf#jnnjdqbwjlmbopl#`boofg?k7#`obpp>!gjpwjm`wjlmqfsob`fg#azdlufqmnfmwpol`bwjlm#lejm#Mlufnafqtkfwkfq#wkf?,s=\\t?,gju=b`rvjpjwjlm`boofg#wkf#sfqpf`vwjlmgfpjdmbwjlmxelmw.pjyf9bssfbqfg#jmjmufpwjdbwff{sfqjfm`fgnlpw#ojhfoztjgfoz#vpfggjp`vppjlmpsqfpfm`f#le#+gl`vnfmw-f{wfmpjufozJw#kbp#affmjw#glfp#mlw`lmwqbqz#wljmkbajwbmwpjnsqlufnfmwp`klobqpkjs`lmpvnswjlmjmpwqv`wjlmelq#f{bnsoflmf#lq#nlqfs{8#sbggjmdwkf#`vqqfmwb#pfqjfp#lebqf#vpvboozqlof#jm#wkfsqfujlvpoz#gfqjubwjufpfujgfm`f#lef{sfqjfm`fp`lolqp`kfnfpwbwfg#wkbw`fqwjej`bwf?,b=?,gju=\\t#pfof`wfg>!kjdk#p`klloqfpslmpf#wl`lnelqwbaofbglswjlm#lewkqff#zfbqpwkf#`lvmwqzjm#Efaqvbqzpl#wkbw#wkfsflsof#tkl#sqlujgfg#az?sbqbn#mbnfbeef`wfg#azjm#wfqnp#lebssljmwnfmwJPL.;;6:.2!tbp#alqm#jmkjpwlqj`bo#qfdbqgfg#bpnfbpvqfnfmwjp#abpfg#lm#bmg#lwkfq#9#evm`wjlm+pjdmjej`bmw`fofaqbwjlmwqbmpnjwwfg,ip,irvfqz-jp#hmltm#bpwkflqfwj`bo#wbajmgf{>!jw#`lvog#af?mlp`qjsw=\\tkbujmd#affm\\x0E\\t?kfbg=\\x0E\\t?#%rvlw8Wkf#`lnsjobwjlmkf#kbg#affmsqlgv`fg#azskjolplskfq`lmpwqv`wfgjmwfmgfg#wlbnlmd#lwkfq`lnsbqfg#wlwl#pbz#wkbwFmdjmffqjmdb#gjeefqfmwqfefqqfg#wlgjeefqfm`fpafojfe#wkbwsklwldqbskpjgfmwjezjmdKjpwlqz#le#Qfsvaoj`#lemf`fppbqjozsqlabajojwzwf`kmj`boozofbujmd#wkfpsf`wb`vobqeqb`wjlm#lefof`wqj`jwzkfbg#le#wkfqfpwbvqbmwpsbqwmfqpkjsfnskbpjp#lmnlpw#qf`fmwpkbqf#tjwk#pbzjmd#wkbwejoofg#tjwkgfpjdmfg#wljw#jp#lewfm!=?,jeqbnf=bp#elooltp9nfqdfg#tjwkwkqlvdk#wkf`lnnfq`jbo#sljmwfg#lvwlsslqwvmjwzujft#le#wkfqfrvjqfnfmwgjujpjlm#lesqldqbnnjmdkf#qf`fjufgpfwJmwfqubo!=?,psbm=?,jm#Mft#Zlqhbggjwjlmbo#`lnsqfppjlm\\t\\t?gju#jg>!jm`lqslqbwf8?,p`qjsw=?bwwb`kFufmwaf`bnf#wkf#!#wbqdfw>!\\\\`bqqjfg#lvwPlnf#le#wkfp`jfm`f#bmgwkf#wjnf#le@lmwbjmfq!=nbjmwbjmjmd@kqjpwlskfqNv`k#le#wkftqjwjmdp#le!#kfjdkw>!1pjyf#le#wkfufqpjlm#le#nj{wvqf#le#afwtffm#wkfF{bnsofp#lefgv`bwjlmbo`lnsfwjwjuf#lmpvanjw>!gjqf`wlq#legjpwjm`wjuf,GWG#[KWNO#qfobwjmd#wlwfmgfm`z#wlsqlujm`f#letkj`k#tlvoggfpsjwf#wkfp`jfmwjej`#ofdjpobwvqf-jmmfqKWNO#boofdbwjlmpBdqj`vowvqftbp#vpfg#jmbssqlb`k#wljmwfoojdfmwzfbqp#obwfq/pbmp.pfqjegfwfqnjmjmdSfqelqnbm`fbssfbqbm`fp/#tkj`k#jp#elvmgbwjlmpbaaqfujbwfgkjdkfq#wkbmp#eqln#wkf#jmgjujgvbo#`lnslpfg#lepvsslpfg#wl`objnp#wkbwbwwqjavwjlmelmw.pjyf92fofnfmwp#leKjpwlqj`bo#kjp#aqlwkfqbw#wkf#wjnfbmmjufqpbqzdlufqmfg#azqfobwfg#wl#vowjnbwfoz#jmmlubwjlmpjw#jp#pwjoo`bm#lmoz#afgfejmjwjlmpwlDNWPwqjmdB#mvnafq#lejnd#`obpp>!Fufmwvbooz/tbp#`kbmdfgl``vqqfg#jmmfjdkalqjmdgjpwjmdvjpktkfm#kf#tbpjmwqlgv`jmdwfqqfpwqjboNbmz#le#wkfbqdvfp#wkbwbm#Bnfqj`bm`lmrvfpw#letjgfpsqfbg#tfqf#hjoofgp`qffm#bmg#Jm#lqgfq#wlf{sf`wfg#wlgfp`fmgbmwpbqf#ol`bwfgofdjpobwjufdfmfqbwjlmp#ab`hdqlvmgnlpw#sflsofzfbqp#bewfqwkfqf#jp#mlwkf#kjdkfpweqfrvfmwoz#wkfz#gl#mlwbqdvfg#wkbwpkltfg#wkbwsqfglnjmbmwwkfloldj`boaz#wkf#wjnf`lmpjgfqjmdpklqw.ojufg?,psbm=?,b=`bm#af#vpfgufqz#ojwwoflmf#le#wkf#kbg#boqfbgzjmwfqsqfwfg`lnnvmj`bwfefbwvqfp#ledlufqmnfmw/?,mlp`qjsw=fmwfqfg#wkf!#kfjdkw>!0Jmgfsfmgfmwslsvobwjlmpobqdf.p`bof-#Bowklvdk#vpfg#jm#wkfgfpwqv`wjlmslppjajojwzpwbqwjmd#jmwtl#lq#nlqff{sqfppjlmppvalqgjmbwfobqdfq#wkbmkjpwlqz#bmg?,lswjlm=\\x0E\\t@lmwjmfmwbofojnjmbwjmdtjoo#mlw#afsqb`wj`f#lejm#eqlmw#lepjwf#le#wkffmpvqf#wkbwwl#`qfbwf#bnjppjppjssjslwfmwjboozlvwpwbmgjmdafwwfq#wkbmtkbw#jp#mltpjwvbwfg#jmnfwb#mbnf>!WqbgjwjlmbopvddfpwjlmpWqbmpobwjlmwkf#elqn#lebwnlpskfqj`jgfloldj`bofmwfqsqjpfp`bo`vobwjmdfbpw#le#wkfqfnmbmwp#lesovdjmpsbdf,jmgf{-sks<qfnbjmfg#jmwqbmpelqnfgKf#tbp#bopltbp#boqfbgzpwbwjpwj`bojm#ebulq#leNjmjpwqz#lenlufnfmw#leelqnvobwjlmjp#qfrvjqfg?ojmh#qfo>!Wkjp#jp#wkf#?b#kqfe>!,slsvobqjyfgjmuloufg#jmbqf#vpfg#wlbmg#pfufqbonbgf#az#wkfpffnp#wl#afojhfoz#wkbwSbofpwjmjbmmbnfg#bewfqjw#kbg#affmnlpw#`lnnlmwl#qfefq#wlavw#wkjp#jp`lmpf`vwjufwfnslqbqjozJm#dfmfqbo/`lmufmwjlmpwbhfp#sob`fpvagjujpjlmwfqqjwlqjbolsfqbwjlmbosfqnbmfmwoztbp#obqdfozlvwaqfbh#lejm#wkf#sbpwelooltjmd#b#{nomp9ld>!=?b#`obpp>!`obpp>!wf{w@lmufqpjlm#nbz#af#vpfgnbmveb`wvqfbewfq#afjmd`ofbqej{!=\\trvfpwjlm#letbp#fof`wfgwl#af`lnf#baf`bvpf#le#plnf#sflsofjmpsjqfg#azpv``fppevo#b#wjnf#tkfmnlqf#`lnnlmbnlmdpw#wkfbm#leej`jbotjgwk9233&8wf`kmloldz/tbp#bglswfgwl#hffs#wkfpfwwofnfmwpojuf#ajqwkpjmgf{-kwno!@lmmf`wj`vwbppjdmfg#wl%bns8wjnfp8b``lvmw#elqbojdm>qjdkwwkf#`lnsbmzbotbzp#affmqfwvqmfg#wljmuloufnfmwAf`bvpf#wkfwkjp#sfqjlg!#mbnf>!r!#`lmejmfg#wlb#qfpvow#leubovf>!!#,=jp#b`wvboozFmujqlmnfmw\\x0E\\t?,kfbg=\\x0E\\t@lmufqpfoz/=\\t?gju#jg>!3!#tjgwk>!2jp#sqlabaozkbuf#af`lnf`lmwqloojmdwkf#sqlaofn`jwjyfmp#leslojwj`jbmpqfb`kfg#wkfbp#fbqoz#bp9mlmf8#lufq?wbaof#`fooubojgjwz#legjqf`woz#wllmnlvpfgltmtkfqf#jw#jptkfm#jw#tbpnfnafqp#le#qfobwjlm#wlb``lnnlgbwfbolmd#tjwk#Jm#wkf#obwfwkf#Fmdojpkgfoj`jlvp!=wkjp#jp#mlwwkf#sqfpfmwje#wkfz#bqfbmg#ejmboozb#nbwwfq#le\\x0E\\t\\n?,gju=\\x0E\\t\\x0E\\t?,p`qjsw=ebpwfq#wkbmnbilqjwz#lebewfq#tkj`k`lnsbqbwjufwl#nbjmwbjmjnsqluf#wkfbtbqgfg#wkffq!#`obpp>!eqbnfalqgfqqfpwlqbwjlmjm#wkf#pbnfbmbozpjp#lewkfjq#ejqpwGvqjmd#wkf#`lmwjmfmwbopfrvfm`f#leevm`wjlm+*xelmw.pjyf9#tlqh#lm#wkf?,p`qjsw=\\t?afdjmp#tjwkibubp`qjsw9`lmpwjwvfmwtbp#elvmgfgfrvjojaqjvnbppvnf#wkbwjp#djufm#azmffgp#wl#af`llqgjmbwfpwkf#ubqjlvpbqf#sbqw#lelmoz#jm#wkfpf`wjlmp#lejp#b#`lnnlmwkflqjfp#legjp`lufqjfpbppl`jbwjlmfgdf#le#wkfpwqfmdwk#leslpjwjlm#jmsqfpfmw.gbzvmjufqpboozwl#elqn#wkfavw#jmpwfbg`lqslqbwjlmbwwb`kfg#wljp#`lnnlmozqfbplmp#elq#%rvlw8wkf#`bm#af#nbgftbp#baof#wltkj`k#nfbmpavw#gjg#mlwlmNlvpfLufqbp#slppjaoflsfqbwfg#az`lnjmd#eqlnwkf#sqjnbqzbggjwjlm#leelq#pfufqbowqbmpefqqfgb#sfqjlg#lebqf#baof#wlkltfufq/#jwpklvog#kbufnv`k#obqdfq\\t\\n?,p`qjsw=bglswfg#wkfsqlsfqwz#legjqf`wfg#azfeef`wjufoztbp#aqlvdkw`kjogqfm#leSqldqbnnjmdolmdfq#wkbmnbmvp`qjswptbq#bdbjmpwaz#nfbmp#lebmg#nlpw#lepjnjobq#wl#sqlsqjfwbqzlqjdjmbwjmdsqfpwjdjlvpdqbnnbwj`bof{sfqjfm`f-wl#nbhf#wkfJw#tbp#bopljp#elvmg#jm`lnsfwjwlqpjm#wkf#V-P-qfsob`f#wkfaqlvdkw#wkf`bo`vobwjlmeboo#le#wkfwkf#dfmfqbosqb`wj`boozjm#klmlq#leqfofbpfg#jmqfpjgfmwjbobmg#plnf#lehjmd#le#wkfqfb`wjlm#wl2pw#Fbqo#le`vowvqf#bmgsqjm`jsbooz?,wjwof=\\t##wkfz#`bm#afab`h#wl#wkfplnf#le#kjpf{slpvqf#wlbqf#pjnjobqelqn#le#wkfbggEbulqjwf`jwjyfmpkjssbqw#jm#wkfsflsof#tjwkjm#sqb`wj`fwl#`lmwjmvf%bns8njmvp8bssqlufg#az#wkf#ejqpw#booltfg#wkfbmg#elq#wkfevm`wjlmjmdsobzjmd#wkfplovwjlm#wlkfjdkw>!3!#jm#kjp#allhnlqf#wkbm#belooltp#wkf`qfbwfg#wkfsqfpfm`f#jm%maps8?,wg=mbwjlmbojpwwkf#jgfb#leb#`kbqb`wfqtfqf#elq`fg#`obpp>!awmgbzp#le#wkfefbwvqfg#jmpkltjmd#wkfjmwfqfpw#jmjm#sob`f#lewvqm#le#wkfwkf#kfbg#leOlqg#le#wkfslojwj`boozkbp#jwp#ltmFgv`bwjlmbobssqlubo#leplnf#le#wkffb`k#lwkfq/afkbujlq#lebmg#af`bvpfbmg#bmlwkfqbssfbqfg#lmqf`lqgfg#jmaob`h%rvlw8nbz#jm`ovgfwkf#tlqog$p`bm#ofbg#wlqfefqp#wl#balqgfq>!3!#dlufqmnfmw#tjmmjmd#wkfqfpvowfg#jm#tkjof#wkf#Tbpkjmdwlm/wkf#pvaif`w`jwz#jm#wkf=?,gju=\\x0E\\t\\n\\nqfeof`w#wkfwl#`lnsofwfaf`bnf#nlqfqbgjlb`wjufqfif`wfg#aztjwklvw#bmzkjp#ebwkfq/tkj`k#`lvog`lsz#le#wkfwl#jmgj`bwfb#slojwj`bob``lvmwp#le`lmpwjwvwfptlqhfg#tjwkfq?,b=?,oj=le#kjp#ojefb``lnsbmjfg`ojfmwTjgwksqfufmw#wkfOfdjpobwjufgjeefqfmwozwldfwkfq#jmkbp#pfufqboelq#bmlwkfqwf{w#le#wkfelvmgfg#wkff#tjwk#wkf#jp#vpfg#elq`kbmdfg#wkfvpvbooz#wkfsob`f#tkfqftkfqfbp#wkf=#?b#kqfe>!!=?b#kqfe>!wkfnpfoufp/bowklvdk#kfwkbw#`bm#afwqbgjwjlmboqlof#le#wkfbp#b#qfpvowqfnluf@kjoggfpjdmfg#aztfpw#le#wkfPlnf#sflsofsqlgv`wjlm/pjgf#le#wkfmftpofwwfqpvpfg#az#wkfgltm#wl#wkfb``fswfg#azojuf#jm#wkfbwwfnswp#wllvwpjgf#wkfeqfrvfm`jfpKltfufq/#jmsqldqbnnfqpbw#ofbpw#jmbssql{jnbwfbowklvdk#jwtbp#sbqw#lebmg#ubqjlvpDlufqmlq#lewkf#bqwj`ofwvqmfg#jmwl=?b#kqfe>!,wkf#f`lmlnzjp#wkf#nlpwnlpw#tjgfoztlvog#obwfqbmg#sfqkbspqjpf#wl#wkfl``vqp#tkfmvmgfq#tkj`k`lmgjwjlmp-wkf#tfpwfqmwkflqz#wkbwjp#sqlgv`fgwkf#`jwz#lejm#tkj`k#kfpffm#jm#wkfwkf#`fmwqboavjogjmd#lenbmz#le#kjpbqfb#le#wkfjp#wkf#lmoznlpw#le#wkfnbmz#le#wkfwkf#TfpwfqmWkfqf#jp#mlf{wfmgfg#wlPwbwjpwj`bo`lopsbm>1#\\x7Fpklqw#pwlqzslppjaof#wlwlsloldj`bo`qjwj`bo#leqfslqwfg#wlb#@kqjpwjbmgf`jpjlm#wljp#frvbo#wlsqlaofnp#leWkjp#`bm#afnfq`kbmgjpfelq#nlpw#leml#fujgfm`ffgjwjlmp#lefofnfmwp#jm%rvlw8-#Wkf`ln,jnbdfp,tkj`k#nbhfpwkf#sql`fppqfnbjmp#wkfojwfqbwvqf/jp#b#nfnafqwkf#slsvobqwkf#bm`jfmwsqlaofnp#jmwjnf#le#wkfgfefbwfg#azalgz#le#wkfb#eft#zfbqpnv`k#le#wkfwkf#tlqh#le@bojelqmjb/pfqufg#bp#bdlufqmnfmw-`lm`fswp#lenlufnfmw#jm\\n\\n?gju#jg>!jw!#ubovf>!obmdvbdf#lebp#wkfz#bqfsqlgv`fg#jmjp#wkbw#wkff{sobjm#wkfgju=?,gju=\\tKltfufq#wkfofbg#wl#wkf\\n?b#kqfe>!,tbp#dqbmwfgsflsof#kbuf`lmwjmvbooztbp#pffm#bpbmg#qfobwfgwkf#qlof#lesqlslpfg#azle#wkf#afpwfb`k#lwkfq-@lmpwbmwjmfsflsof#eqlngjbof`wp#lewl#qfujpjlmtbp#qfmbnfgb#plvq`f#lewkf#jmjwjboobvm`kfg#jmsqlujgf#wkfwl#wkf#tfpwtkfqf#wkfqfbmg#pjnjobqafwtffm#wtljp#bopl#wkfFmdojpk#bmg`lmgjwjlmp/wkbw#jw#tbpfmwjwofg#wlwkfnpfoufp-rvbmwjwz#leqbmpsbqfm`zwkf#pbnf#bpwl#iljm#wkf`lvmwqz#bmgwkjp#jp#wkfWkjp#ofg#wlb#pwbwfnfmw`lmwqbpw#wlobpwJmgf{Lewkqlvdk#kjpjp#gfpjdmfgwkf#wfqn#jpjp#sqlujgfgsqlwf`w#wkfmd?,b=?,oj=Wkf#`vqqfmwwkf#pjwf#lepvapwbmwjbof{sfqjfm`f/jm#wkf#Tfpwwkfz#pklvogpolufm(ajmb`lnfmwbqjlpvmjufqpjgbg`lmgj`jlmfpb`wjujgbgfpf{sfqjfm`jbwf`mlold/Absqlgv``j/_msvmwvb`j/_mbsoj`b`j/_m`lmwqbpf/]b`bwfdlq/Abpqfdjpwqbqpfsqlefpjlmbowqbwbnjfmwlqfd/Apwqbwfpf`qfwbq/Absqjm`jsbofpsqlwf``j/_mjnslqwbmwfpjnslqwbm`jbslpjajojgbgjmwfqfpbmwf`qf`jnjfmwlmf`fpjgbgfppvp`qjajqpfbpl`jb`j/_mgjpslmjaofpfubovb`j/_mfpwvgjbmwfpqfpslmpbaofqfplov`j/_mdvbgbobibqbqfdjpwqbglplslqwvmjgbg`lnfq`jbofpelwldqbe/Abbvwlqjgbgfpjmdfmjfq/Abwfofujpj/_m`lnsfwfm`jblsfqb`jlmfpfpwbaof`jglpjnsofnfmwfb`wvbonfmwfmbufdb`j/_m`lmelqnjgbgojmf.kfjdkw9elmw.ebnjoz9!#9#!kwws9,,bssoj`bwjlmpojmh!#kqfe>!psf`jej`booz,,?\\\"X@GBWBX\\tLqdbmjybwjlmgjpwqjavwjlm3s{8#kfjdkw9qfobwjlmpkjsgfuj`f.tjgwk?gju#`obpp>!?obafo#elq>!qfdjpwqbwjlm?,mlp`qjsw=\\t,jmgf{-kwno!tjmglt-lsfm+#\\\"jnslqwbmw8bssoj`bwjlm,jmgfsfmgfm`f,,ttt-dlldoflqdbmjybwjlmbvwl`lnsofwfqfrvjqfnfmwp`lmpfqubwjuf?elqn#mbnf>!jmwfoof`wvbonbqdjm.ofew92;wk#`fmwvqzbm#jnslqwbmwjmpwjwvwjlmpbaaqfujbwjlm?jnd#`obpp>!lqdbmjpbwjlm`jujojybwjlm2:wk#`fmwvqzbq`kjwf`wvqfjm`lqslqbwfg13wk#`fmwvqz.`lmwbjmfq!=nlpw#mlwbaoz,=?,b=?,gju=mlwjej`bwjlm$vmgfejmfg$*Evqwkfqnlqf/afojfuf#wkbwjmmfqKWNO#>#sqjlq#wl#wkfgqbnbwj`boozqfefqqjmd#wlmfdlwjbwjlmpkfbgrvbqwfqpPlvwk#Beqj`bvmpv``fppevoSfmmpzoubmjbBp#b#qfpvow/?kwno#obmd>!%ow8,pvs%dw8gfbojmd#tjwkskjobgfoskjbkjpwlqj`booz*8?,p`qjsw=\\tsbggjmd.wls9f{sfqjnfmwbodfwBwwqjavwfjmpwqv`wjlmpwf`kmloldjfpsbqw#le#wkf#>evm`wjlm+*xpvap`qjswjlmo-gwg!=\\x0E\\t?kwdfldqbskj`bo@lmpwjwvwjlm$/#evm`wjlm+pvsslqwfg#azbdqj`vowvqbo`lmpwqv`wjlmsvaoj`bwjlmpelmw.pjyf9#2b#ubqjfwz#le?gju#pwzof>!Fm`z`olsfgjbjeqbnf#pq`>!gfnlmpwqbwfgb``lnsojpkfgvmjufqpjwjfpGfnldqbskj`p*8?,p`qjsw=?gfgj`bwfg#wlhmltofgdf#lepbwjpeb`wjlmsbqwj`vobqoz?,gju=?,gju=Fmdojpk#+VP*bssfmg@kjog+wqbmpnjppjlmp-#Kltfufq/#jmwfoojdfm`f!#wbajmgf{>!eolbw9qjdkw8@lnnlmtfbowkqbmdjmd#eqlnjm#tkj`k#wkfbw#ofbpw#lmfqfsqlgv`wjlmfm`z`olsfgjb8elmw.pjyf92ivqjpgj`wjlmbw#wkbw#wjnf!=?b#`obpp>!Jm#bggjwjlm/gfp`qjswjlm(`lmufqpbwjlm`lmwb`w#tjwkjp#dfmfqboozq!#`lmwfmw>!qfsqfpfmwjmd%ow8nbwk%dw8sqfpfmwbwjlml``bpjlmbooz?jnd#tjgwk>!mbujdbwjlm!=`lnsfmpbwjlm`kbnsjlmpkjsnfgjb>!boo!#ujlobwjlm#leqfefqfm`f#wlqfwvqm#wqvf8Pwqj`w,,FM!#wqbmpb`wjlmpjmwfqufmwjlmufqjej`bwjlmJmelqnbwjlm#gjeej`vowjfp@kbnsjlmpkjs`bsbajojwjfp?\\\"Xfmgje^..=~\\t?,p`qjsw=\\t@kqjpwjbmjwzelq#f{bnsof/Sqlefppjlmboqfpwqj`wjlmppvddfpw#wkbwtbp#qfofbpfg+pv`k#bp#wkfqfnluf@obpp+vmfnsolznfmwwkf#Bnfqj`bmpwqv`wvqf#le,jmgf{-kwno#svaojpkfg#jmpsbm#`obpp>!!=?b#kqfe>!,jmwqlgv`wjlmafolmdjmd#wl`objnfg#wkbw`lmpfrvfm`fp?nfwb#mbnf>!Dvjgf#wl#wkflufqtkfonjmdbdbjmpw#wkf#`lm`fmwqbwfg/\\t-mlmwlv`k#lapfqubwjlmp?,b=\\t?,gju=\\te#+gl`vnfmw-alqgfq9#2s{#xelmw.pjyf92wqfbwnfmw#le3!#kfjdkw>!2nlgjej`bwjlmJmgfsfmgfm`fgjujgfg#jmwldqfbwfq#wkbmb`kjfufnfmwpfpwbaojpkjmdIbubP`qjsw!#mfufqwkfofpppjdmjej`bm`fAqlbg`bpwjmd=%maps8?,wg=`lmwbjmfq!=\\tpv`k#bp#wkf#jmeovfm`f#leb#sbqwj`vobqpq`>$kwws9,,mbujdbwjlm!#kboe#le#wkf#pvapwbmwjbo#%maps8?,gju=bgubmwbdf#legjp`lufqz#leevmgbnfmwbo#nfwqlslojwbmwkf#lsslpjwf!#{no9obmd>!gfojafqbwfozbojdm>`fmwfqfulovwjlm#lesqfpfqubwjlmjnsqlufnfmwpafdjmmjmd#jmIfpvp#@kqjpwSvaoj`bwjlmpgjpbdqffnfmwwf{w.bojdm9q/#evm`wjlm+*pjnjobqjwjfpalgz=?,kwno=jp#`vqqfmwozboskbafwj`bojp#plnfwjnfpwzsf>!jnbdf,nbmz#le#wkf#eolt9kjggfm8bubjobaof#jmgfp`qjaf#wkff{jpwfm`f#leboo#lufq#wkfwkf#Jmwfqmfw\\n?vo#`obpp>!jmpwboobwjlmmfjdkalqkllgbqnfg#elq`fpqfgv`jmd#wkf`lmwjmvfp#wlMlmfwkfofpp/wfnsfqbwvqfp\\t\\n\\n?b#kqfe>!`olpf#wl#wkff{bnsofp#le#jp#balvw#wkf+pff#afolt*-!#jg>!pfbq`ksqlefppjlmbojp#bubjobaofwkf#leej`jbo\\n\\n?,p`qjsw=\\t\\t\\n\\n?gju#jg>!b``fofqbwjlmwkqlvdk#wkf#Kboo#le#Ebnfgfp`qjswjlmpwqbmpobwjlmpjmwfqefqfm`f#wzsf>$wf{w,qf`fmw#zfbqpjm#wkf#tlqogufqz#slsvobqxab`hdqlvmg9wqbgjwjlmbo#plnf#le#wkf#`lmmf`wfg#wlf{soljwbwjlmfnfqdfm`f#le`lmpwjwvwjlmB#Kjpwlqz#lepjdmjej`bmw#nbmveb`wvqfgf{sf`wbwjlmp=?mlp`qjsw=?`bm#af#elvmgaf`bvpf#wkf#kbp#mlw#affmmfjdkalvqjmdtjwklvw#wkf#bggfg#wl#wkf\\n?oj#`obpp>!jmpwqvnfmwboPlujfw#Vmjlmb`hmltofgdfgtkj`k#`bm#afmbnf#elq#wkfbwwfmwjlm#wlbwwfnswp#wl#gfufolsnfmwpJm#eb`w/#wkf?oj#`obpp>!bjnsoj`bwjlmppvjwbaof#elqnv`k#le#wkf#`lolmjybwjlmsqfpjgfmwjbo`bm`foAvaaof#Jmelqnbwjlmnlpw#le#wkf#jp#gfp`qjafgqfpw#le#wkf#nlqf#lq#ofppjm#PfswfnafqJmwfoojdfm`fpq`>!kwws9,,s{8#kfjdkw9#bubjobaof#wlnbmveb`wvqfqkvnbm#qjdkwpojmh#kqfe>!,bubjobajojwzsqlslqwjlmbolvwpjgf#wkf#bpwqlmlnj`bokvnbm#afjmdpmbnf#le#wkf#bqf#elvmg#jmbqf#abpfg#lmpnboofq#wkbmb#sfqplm#tklf{sbmpjlm#lebqdvjmd#wkbwmlt#hmltm#bpJm#wkf#fbqozjmwfqnfgjbwfgfqjufg#eqlnP`bmgjmbujbm?,b=?,gju=\\x0E\\t`lmpjgfq#wkfbm#fpwjnbwfgwkf#Mbwjlmbo?gju#jg>!sbdqfpvowjmd#jm`lnnjppjlmfgbmboldlvp#wlbqf#qfrvjqfg,vo=\\t?,gju=\\ttbp#abpfg#lmbmg#af`bnf#b%maps8%maps8w!#ubovf>!!#tbp#`bswvqfgml#nlqf#wkbmqfpsf`wjufoz`lmwjmvf#wl#=\\x0E\\t?kfbg=\\x0E\\t?tfqf#`qfbwfgnlqf#dfmfqbojmelqnbwjlm#vpfg#elq#wkfjmgfsfmgfmw#wkf#Jnsfqjbo`lnslmfmw#lewl#wkf#mlqwkjm`ovgf#wkf#@lmpwqv`wjlmpjgf#le#wkf#tlvog#mlw#afelq#jmpwbm`fjmufmwjlm#lenlqf#`lnsof{`loof`wjufozab`hdqlvmg9#wf{w.bojdm9#jwp#lqjdjmbojmwl#b``lvmwwkjp#sql`fppbm#f{wfmpjufkltfufq/#wkfwkfz#bqf#mlwqfif`wfg#wkf`qjwj`jpn#legvqjmd#tkj`ksqlabaoz#wkfwkjp#bqwj`of+evm`wjlm+*xJw#pklvog#afbm#bdqffnfmwb``jgfmwboozgjeefqp#eqlnBq`kjwf`wvqfafwwfq#hmltmbqqbmdfnfmwpjmeovfm`f#lmbwwfmgfg#wkfjgfmwj`bo#wlplvwk#le#wkfsbpp#wkqlvdk{no!#wjwof>!tfjdkw9alog8`qfbwjmd#wkfgjpsobz9mlmfqfsob`fg#wkf?jnd#pq`>!,jkwwsp9,,ttt-Tlqog#Tbq#JJwfpwjnlmjbopelvmg#jm#wkfqfrvjqfg#wl#bmg#wkbw#wkfafwtffm#wkf#tbp#gfpjdmfg`lmpjpwp#le#`lmpjgfqbaozsvaojpkfg#azwkf#obmdvbdf@lmpfqubwjlm`lmpjpwfg#leqfefq#wl#wkfab`h#wl#wkf#`pp!#nfgjb>!Sflsof#eqln#bubjobaof#lmsqlufg#wl#afpvddfpwjlmp!tbp#hmltm#bpubqjfwjfp#leojhfoz#wl#af`lnsqjpfg#lepvsslqw#wkf#kbmgp#le#wkf`lvsofg#tjwk`lmmf`w#bmg#alqgfq9mlmf8sfqelqnbm`fpafelqf#afjmdobwfq#af`bnf`bo`vobwjlmplewfm#`boofgqfpjgfmwp#lenfbmjmd#wkbw=?oj#`obpp>!fujgfm`f#elqf{sobmbwjlmpfmujqlmnfmwp!=?,b=?,gju=tkj`k#booltpJmwqlgv`wjlmgfufolsfg#azb#tjgf#qbmdflm#afkboe#leubojdm>!wls!sqjm`jsof#lebw#wkf#wjnf/?,mlp`qjsw=\\x0Epbjg#wl#kbufjm#wkf#ejqpwtkjof#lwkfqpkzslwkfwj`boskjolplskfqpsltfq#le#wkf`lmwbjmfg#jmsfqelqnfg#azjmbajojwz#wltfqf#tqjwwfmpsbm#pwzof>!jmsvw#mbnf>!wkf#rvfpwjlmjmwfmgfg#elqqfif`wjlm#lejnsojfp#wkbwjmufmwfg#wkfwkf#pwbmgbqgtbp#sqlabaozojmh#afwtffmsqlefpplq#lejmwfqb`wjlmp`kbmdjmd#wkfJmgjbm#L`fbm#`obpp>!obpwtlqhjmd#tjwk$kwws9,,ttt-zfbqp#afelqfWkjp#tbp#wkfqf`qfbwjlmbofmwfqjmd#wkfnfbpvqfnfmwpbm#f{wqfnfozubovf#le#wkfpwbqw#le#wkf\\t?,p`qjsw=\\t\\tbm#feelqw#wljm`qfbpf#wkfwl#wkf#plvwkpsb`jmd>!3!=pveej`jfmwozwkf#Fvqlsfbm`lmufqwfg#wl`ofbqWjnflvwgjg#mlw#kbuf`lmpfrvfmwozelq#wkf#mf{wf{wfmpjlm#lef`lmlnj`#bmgbowklvdk#wkfbqf#sqlgv`fgbmg#tjwk#wkfjmpveej`jfmwdjufm#az#wkfpwbwjmd#wkbwf{sfmgjwvqfp?,psbm=?,b=\\twklvdkw#wkbwlm#wkf#abpjp`foosbggjmd>jnbdf#le#wkfqfwvqmjmd#wljmelqnbwjlm/pfsbqbwfg#azbppbppjmbwfgp!#`lmwfmw>!bvwklqjwz#lemlqwktfpwfqm?,gju=\\t?gju#!=?,gju=\\x0E\\t##`lmpvowbwjlm`lnnvmjwz#lewkf#mbwjlmbojw#pklvog#afsbqwj`jsbmwp#bojdm>!ofewwkf#dqfbwfpwpfof`wjlm#lepvsfqmbwvqbogfsfmgfmw#lmjp#nfmwjlmfgbooltjmd#wkftbp#jmufmwfgb``lnsbmzjmdkjp#sfqplmbobubjobaof#bwpwvgz#le#wkflm#wkf#lwkfqf{f`vwjlm#leKvnbm#Qjdkwpwfqnp#le#wkfbppl`jbwjlmpqfpfbq`k#bmgpv``ffgfg#azgfefbwfg#wkfbmg#eqln#wkfavw#wkfz#bqf`lnnbmgfq#lepwbwf#le#wkfzfbqp#le#bdfwkf#pwvgz#le?vo#`obpp>!psob`f#jm#wkftkfqf#kf#tbp?oj#`obpp>!ewkfqf#bqf#mltkj`k#af`bnfkf#svaojpkfgf{sqfppfg#jmwl#tkj`k#wkf`lnnjppjlmfqelmw.tfjdkw9wfqqjwlqz#lef{wfmpjlmp!=Qlnbm#Fnsjqffrvbo#wl#wkfJm#`lmwqbpw/kltfufq/#bmgjp#wzsj`boozbmg#kjp#tjef+bopl#`boofg=?vo#`obpp>!feef`wjufoz#fuloufg#jmwlpffn#wl#kbuftkj`k#jp#wkfwkfqf#tbp#mlbm#f{`foofmwboo#le#wkfpfgfp`qjafg#azJm#sqb`wj`f/aqlbg`bpwjmd`kbqdfg#tjwkqfeof`wfg#jmpvaif`wfg#wlnjojwbqz#bmgwl#wkf#sljmwf`lmlnj`boozpfwWbqdfwjmdbqf#b`wvboozuj`wlqz#lufq+*8?,p`qjsw=`lmwjmvlvpozqfrvjqfg#elqfulovwjlmbqzbm#feef`wjufmlqwk#le#wkf/#tkj`k#tbp#eqlmw#le#wkflq#lwkfqtjpfplnf#elqn#lekbg#mlw#affmdfmfqbwfg#azjmelqnbwjlm-sfqnjwwfg#wljm`ovgfp#wkfgfufolsnfmw/fmwfqfg#jmwlwkf#sqfujlvp`lmpjpwfmwozbqf#hmltm#bpwkf#ejfog#lewkjp#wzsf#ledjufm#wl#wkfwkf#wjwof#le`lmwbjmp#wkfjmpwbm`fp#lejm#wkf#mlqwkgvf#wl#wkfjqbqf#gfpjdmfg`lqslqbwjlmptbp#wkbw#wkflmf#le#wkfpfnlqf#slsvobqpv``ffgfg#jmpvsslqw#eqlnjm#gjeefqfmwglnjmbwfg#azgfpjdmfg#elqltmfqpkjs#lebmg#slppjaozpwbmgbqgjyfgqfpslmpfWf{wtbp#jmwfmgfgqf`fjufg#wkfbppvnfg#wkbwbqfbp#le#wkfsqjnbqjoz#jmwkf#abpjp#lejm#wkf#pfmpfb``lvmwp#elqgfpwqlzfg#azbw#ofbpw#wtltbp#gf`obqfg`lvog#mlw#afPf`qfwbqz#lebssfbq#wl#afnbqdjm.wls92,]_p(\\x7F_p(',df*xwkqlt#f~8wkf#pwbqw#lewtl#pfsbqbwfobmdvbdf#bmgtkl#kbg#affmlsfqbwjlm#legfbwk#le#wkfqfbo#mvnafqp\\n?ojmh#qfo>!sqlujgfg#wkfwkf#pwlqz#le`lnsfwjwjlmpfmdojpk#+VH*fmdojpk#+VP*<p<R<Q<_<R<W<M=l<S=m<V<T=m=l<S=m<V<T=m=l<S=m<V<R5h4U4]4D5f4E\\nAO\\x05Gx\\bTA\\nzk\\x0BBl\\bQ\\x7F\\bTA\\nzk\\x0BUm\\bQ\\x7F\\bTA\\nzk\\npe\\x05u|\\ti@\\tcT\\bVV\\n\\\\}\\nxS\\tVp\\x05tS\\x05k`\\t[X\\t[X\\x0BHR\\bPv\\bTW\\bUe\\n\\x7Fa\\bQp\\x0B_W\\x0BWs\\nxS\\x0BAz\\n_y\\x04Khjmelqnb`j/_mkfqqbnjfmwbpfof`wq/_mj`lgfp`qjs`j/_m`obpjej`bglp`lml`jnjfmwlsvaoj`b`j/_mqfob`jlmbgbpjmelqn/Mwj`bqfob`jlmbglpgfsbqwbnfmwlwqbabibglqfpgjqf`wbnfmwfbzvmwbnjfmwlnfq`bglOjaqf`lmw/M`wfmlpkbajwb`jlmfp`vnsojnjfmwlqfpwbvqbmwfpgjpslpj`j/_m`lmpf`vfm`jbfof`wq/_mj`bbsoj`b`jlmfpgfp`lmf`wbgljmpwbob`j/_mqfbojyb`j/_mvwjojyb`j/_mfm`j`olsfgjbfmefqnfgbgfpjmpwqvnfmwlpf{sfqjfm`jbpjmpwjwv`j/_msbqwj`vobqfppva`bwfdlqjb=n<R<W=`<V<R<L<R=m=m<T<T=l<\\\\<]<R=n=g<]<R<W=`=d<Y<S=l<R=m=n<R<P<R<Z<Y=n<Y<X=l=o<_<T=i=m<W=o=k<\\\\<Y=m<Y<U=k<\\\\=m<^=m<Y<_<X<\\\\<L<R=m=m<T=c<p<R=m<V<^<Y<X=l=o<_<T<Y<_<R=l<R<X<\\\\<^<R<S=l<R=m<X<\\\\<Q<Q=g=i<X<R<W<Z<Q=g<T<P<Y<Q<Q<R<p<R=m<V<^=g=l=o<]<W<Y<U<p<R=m<V<^<\\\\=m=n=l<\\\\<Q=g<Q<T=k<Y<_<R=l<\\\\<]<R=n<Y<X<R<W<Z<Y<Q=o=m<W=o<_<T=n<Y<S<Y=l=`<r<X<Q<\\\\<V<R<S<R=n<R<P=o=l<\\\\<]<R=n=o<\\\\<S=l<Y<W=c<^<R<R<]=e<Y<R<X<Q<R<_<R=m<^<R<Y<_<R=m=n<\\\\=n=`<T<X=l=o<_<R<U=h<R=l=o<P<Y=i<R=l<R=d<R<S=l<R=n<T<^=m=m=g<W<V<\\\\<V<\\\\<Z<X=g<U<^<W<\\\\=m=n<T<_=l=o<S<S=g<^<P<Y=m=n<Y=l<\\\\<]<R=n<\\\\=m<V<\\\\<[<\\\\<W<S<Y=l<^=g<U<X<Y<W<\\\\=n=`<X<Y<Q=`<_<T<S<Y=l<T<R<X<]<T<[<Q<Y=m<R=m<Q<R<^<Y<P<R<P<Y<Q=n<V=o<S<T=n=`<X<R<W<Z<Q<\\\\=l<\\\\<P<V<\\\\=i<Q<\\\\=k<\\\\<W<R<L<\\\\<]<R=n<\\\\<N<R<W=`<V<R=m<R<^=m<Y<P<^=n<R=l<R<U<Q<\\\\=k<\\\\<W<\\\\=m<S<T=m<R<V=m<W=o<Z<]=g=m<T=m=n<Y<P<S<Y=k<\\\\=n<T<Q<R<^<R<_<R<S<R<P<R=e<T=m<\\\\<U=n<R<^<S<R=k<Y<P=o<S<R<P<R=e=`<X<R<W<Z<Q<R=m=m=g<W<V<T<]=g=m=n=l<R<X<\\\\<Q<Q=g<Y<P<Q<R<_<T<Y<S=l<R<Y<V=n<M<Y<U=k<\\\\=m<P<R<X<Y<W<T=n<\\\\<V<R<_<R<R<Q<W<\\\\<U<Q<_<R=l<R<X<Y<^<Y=l=m<T=c=m=n=l<\\\\<Q<Y=h<T<W=`<P=g=o=l<R<^<Q=c=l<\\\\<[<Q=g=i<T=m<V<\\\\=n=`<Q<Y<X<Y<W=b=c<Q<^<\\\\=l=c<P<Y<Q=`=d<Y<P<Q<R<_<T=i<X<\\\\<Q<Q<R<U<[<Q<\\\\=k<T=n<Q<Y<W=`<[=c=h<R=l=o<P<\\\\<N<Y<S<Y=l=`<P<Y=m=c=j<\\\\<[<\\\\=e<T=n=g<w=o=k=d<T<Y\\fHD\\fHU\\fIl\\fHn\\fHy\\fH\\\\\\fHD\\fIk\\fHi\\fHF\\fHD\\fIk\\fHy\\fHS\\fHC\\fHR\\fHy\\fH\\\\\\fIk\\fHn\\fHi\\fHD\\fIa\\fHC\\fHy\\fIa\\fHC\\fHR\\fH{\\fHR\\fHk\\fHM\\fH@\\fHR\\fH\\\\\\fIk\\fHy\\fHS\\fHT\\fIl\\fHJ\\fHS\\fHC\\fHR\\fHF\\fHU\\fH^\\fIk\\fHT\\fHS\\fHn\\fHU\\fHA\\fHR\\fH\\\\\\fHH\\fHi\\fHF\\fHD\\fIl\\fHY\\fHR\\fH^\\fIk\\fHT\\fIk\\fHY\\fHR\\fHy\\fH\\\\\\fHH\\fIk\\fHB\\fIk\\fH\\\\\\fIk\\fHU\\fIg\\fHD\\fIk\\fHT\\fHy\\fHH\\fIk\\fH@\\fHU\\fIm\\fHH\\fHT\\fHR\\fHk\\fHs\\fHU\\fIg\\fH{\\fHR\\fHp\\fHR\\fHD\\fIk\\fHB\\fHS\\fHD\\fHs\\fHy\\fH\\\\\\fHH\\fHR\\fHy\\fH\\\\\\fHD\\fHR\\fHe\\fHD\\fHy\\fIk\\fHC\\fHU\\fHR\\fHm\\fHT\\fH@\\fHT\\fIk\\fHA\\fHR\\fH[\\fHR\\fHj\\fHF\\fHy\\fIk\\fH^\\fHS\\fHC\\fIk\\fHZ\\fIm\\fH\\\\\\fIn\\fHk\\fHT\\fHy\\fIk\\fHt\\fHn\\fHs\\fIk\\fHB\\fIk\\fH\\\\\\fIl\\fHT\\fHy\\fHH\\fHR\\fHB\\fIk\\fH\\\\\\fHR\\fH^\\fIk\\fHy\\fH\\\\\\fHi\\fHK\\fHS\\fHy\\fHi\\fHF\\fHD\\fHR\\fHT\\fHB\\fHR\\fHp\\fHB\\fIm\\fHq\\fIk\\fHy\\fHR\\fH\\\\\\fHO\\fHU\\fIg\\fHH\\fHR\\fHy\\fHM\\fHP\\fIl\\fHC\\fHU\\fHR\\fHn\\fHU\\fIg\\fHs\\fH^\\fHZ\\fH@\\fIa\\fHJ\\fH^\\fHS\\fHC\\fHR\\fHp\\fIl\\fHY\\fHD\\fHp\\fHR\\fHH\\fHR\\fHy\\fId\\fHT\\fIk\\fHj\\fHF\\fHy\\fHR\\fHY\\fHR\\fH^\\fIl\\fHJ\\fIk\\fHD\\fIk\\fHF\\fIn\\fH\\\\\\fIl\\fHF\\fHR\\fHD\\fIl\\fHe\\fHT\\fHy\\fIk\\fHU\\fIg\\fH{\\fIl\\fH@\\fId\\fHL\\fHy\\fHj\\fHF\\fHy\\fIl\\fHY\\fH\\\\\\fIa\\fH[\\fH{\\fHR\\fHn\\fHY\\fHj\\fHF\\fHy\\fIg\\fHp\\fHS\\fH^\\fHR\\fHp\\fHR\\fHD\\fHR\\fHT\\fHU\\fHB\\fHH\\fHU\\fHB\\fIk\\fHn\\fHe\\fHD\\fHy\\fIl\\fHC\\fHR\\fHU\\fIn\\fHJ\\fH\\\\\\fIa\\fHp\\fHT\\fIn\\fHv\\fIl\\fHF\\fHT\\fHn\\fHJ\\fHT\\fHY\\fHR\\fH^\\fHU\\fIg\\fHD\\fHR\\fHU\\fIg\\fHH\\fIl\\fHp\\fId\\fHT\\fIk\\fHY\\fHR\\fHF\\fHT\\fHp\\fHD\\fHH\\fHR\\fHD\\fIk\\fHH\\fHR\\fHp\\fHR\\fH\\\\\\fIl\\fHt\\fHR\\fHC\\fH^\\fHp\\fHS\\fH^\\fIk\\fHD\\fIl\\fHv\\fIk\\fHp\\fHR\\fHn\\fHv\\fHF\\fHH\\fIa\\fH\\\\\\fH{\\fIn\\fH{\\fH^\\fHp\\fHR\\fHH\\fIk\\fH@\\fHR\\fHU\\fH\\\\\\fHj\\fHF\\fHD\\fIk\\fHY\\fHR\\fHU\\fHD\\fHk\\fHT\\fHy\\fHR\\fHT\\fIm\\fH@\\fHU\\fH\\\\\\fHU\\fHD\\fIk\\fHk\\fHT\\fHT\\fIk\\fHT\\fHU\\fHS\\fHH\\fH@\\fHM\\fHP\\fIk\\fHt\\fHs\\fHD\\fHR\\fHH\\fH^\\fHR\\fHZ\\fHF\\fHR\\fHn\\fHv\\fHZ\\fIa\\fH\\\\\\fIl\\fH@\\fHM\\fHP\\fIl\\fHU\\fIg\\fHH\\fIk\\fHT\\fHR\\fHd\\fHs\\fHZ\\fHR\\fHC\\fHJ\\fHT\\fHy\\fHH\\fIl\\fHp\\fHR\\fHH\\fIl\\fHY\\fHR\\fH^\\fHR\\fHU\\fHp\\fHR\\fH\\\\\\fHF\\fHs\\fHD\\fHR\\fH\\\\\\fHz\\fHD\\fIk\\fHT\\fHM\\fHP\\fHy\\fHB\\fHS\\fH^\\fHR\\fHe\\fHT\\fHy\\fIl\\fHy\\fIk\\fHY\\fH^\\fH^\\fH{\\fHH\\fHR\\fHz\\fHR\\fHD\\fHR\\fHi\\fH\\\\\\fIa\\fHI\\fHp\\fHU\\fHR\\fHn\\fHJ\\fIk\\fHz\\fHR\\fHF\\fHU\\fH^\\fIl\\fHD\\fHS\\fHC\\fHB\\fH@\\fHS\\fHD\\fHR\\fH@\\fId\\fHn\\fHy\\fHy\\fHU\\fIl\\fHn\\fHy\\fHU\\fHD\\fHR\\fHJ\\fIk\\fHH\\fHR\\fHU\\fHB\\fH^\\fIk\\fHy\\fHR\\fHG\\fIl\\fHp\\fH@\\fHy\\fHS\\fHH\\fIm\\fH\\\\\\fHH\\fHB\\fHR\\fHn\\fH{\\fHY\\fHU\\fIl\\fHn\\fH\\\\\\fIg\\fHp\\fHP\\fHB\\fHS\\fH^\\fIl\\fHj\\fH\\\\\\fIg\\fHF\\fHT\\fIk\\fHD\\fHR\\fHC\\fHR\\fHJ\\fHY\\fH^\\fIk\\fHD\\fIk\\fHz\\fHR\\fHH\\fHR\\fHy\\fH\\\\\\fIl\\fH@\\fHe\\fHD\\fHy\\fHR\\fHp\\fHY\\fHR\\fH@\\fHF\\fIn\\fH\\\\\\fHR\\fH@\\fHM\\fHP\\fHR\\fHT\\fI`\\fHJ\\fHR\\fHZ\\fIk\\fHC\\fH\\\\\\fHy\\fHS\\fHC\\fIk\\fHy\\fHU\\fHR\\fHn\\fHi\\fHy\\fHT\\fH\\\\\\fH@\\fHD\\fHR\\fHc\\fHY\\fHU\\fHR\\fHn\\fHT\\fIa\\fHI\\fH^\\fHB\\fHS\\fH^\\fIk\\fH^\\fIk\\fHz\\fHy\\fHY\\fHS\\fH[\\fHC\\fHy\\fIa\\fH\\\\\\fHn\\fHT\\fHB\\fIn\\fHU\\fHI\\fHR\\fHD\\fHR4F4_4F4[5f4U5i4X4K4]5o4E4D5d4K4_4[4E4K5h4Y5m4A4E5i5d4K4Z5f4U4K5h4B4K4Y4E4K5h5i4^5f4C4K5h4U4K5i4E4K5h5o4K4F4D4K5h4]4C5d4C4D4]5j4K5i4@4K5h4C5d5h4E4K5h4U4K5h5i4K5h5i5d5n4U4K5h4U4]4D5f4K5h4_4]5f4U4K5h4@5d4K5h4K5h4\\\\5k4K4D4K5h4A5f4K4E4K5h4A5n5d5n4K5h5o4]5f5i4K5h4U4]4K5n5i4A5m5d4T4E4K5h4G4K5j5f5i4X4K5k4C4E4K5h5i4]4O4E4K5h5n4]4N5j4K5h4X4D4K4D4K5h4A5d4K4]4K5h4@4C5f4C4K5h4O4_4]4E4K5h4U5h5d5i5i4@5i5d4U4E4K5h4]4A5i5j4K5h5j5n4K4[5m5h4_4[5f5j4K5h5o5d5f4F4K5h4C5j5f4K4D4]5o4K4F5k4K5h4]5f4K4Z4F4A5f4K4F5f4D4F5d5n5f4F4K5h4O5d5h5e4K5h4D4]5f4C4K5h5o5h4K5i4K5h4]4K4D4[4K5h4X4B4Y5f4_5f4K4]4K4F4K5h4G4K5h4G4K5h4Y5h4K4E4K5h4A4C5f4G4K5h4^5d4K4]4K5h4B5h5f4@4K5h4@5i5f4U4K5h4U4K5i5k4K5h4@5i4K5h4K5h4_4K4U4E5i4X4K5k4C5k4K5h4]4J5f4_4K5h4C4B5d5h4K5h5m5j5f4E4K5h5o4F4K4D4K5h4C5d4]5f4K5h4C4]5d4_4K4_4F4V4]5n4F4Y4K5i5f5i4K5h4D5j4K4F4K5h4U4T5f5ifmwfqwbjmnfmwvmgfqpwbmgjmd#>#evm`wjlm+*-isd!#tjgwk>!`lmejdvqbwjlm-smd!#tjgwk>!?algz#`obpp>!Nbwk-qbmgln+*`lmwfnslqbqz#Vmjwfg#Pwbwfp`jq`vnpwbm`fp-bssfmg@kjog+lqdbmjybwjlmp?psbm#`obpp>!!=?jnd#pq`>!,gjpwjmdvjpkfgwklvpbmgp#le#`lnnvmj`bwjlm`ofbq!=?,gju=jmufpwjdbwjlmebuj`lm-j`l!#nbqdjm.qjdkw9abpfg#lm#wkf#Nbppb`kvpfwwpwbaof#alqgfq>jmwfqmbwjlmbobopl#hmltm#bpsqlmvm`jbwjlmab`hdqlvmg9 esbggjmd.ofew9Elq#f{bnsof/#njp`foobmflvp%ow8,nbwk%dw8spz`kloldj`bojm#sbqwj`vobqfbq`k!#wzsf>!elqn#nfwklg>!bp#lsslpfg#wlPvsqfnf#@lvqwl``bpjlmbooz#Bggjwjlmbooz/Mlqwk#Bnfqj`bs{8ab`hdqlvmglsslqwvmjwjfpFmwfqwbjmnfmw-wlOltfq@bpf+nbmveb`wvqjmdsqlefppjlmbo#`lnajmfg#tjwkElq#jmpwbm`f/`lmpjpwjmd#le!#nb{ofmdwk>!qfwvqm#ebopf8`lmp`jlvpmfppNfgjwfqqbmfbmf{wqblqgjmbqzbppbppjmbwjlmpvapfrvfmwoz#avwwlm#wzsf>!wkf#mvnafq#lewkf#lqjdjmbo#`lnsqfkfmpjufqfefqp#wl#wkf?,vo=\\t?,gju=\\tskjolplskj`bool`bwjlm-kqfetbp#svaojpkfgPbm#Eqbm`jp`l+evm`wjlm+*x\\t?gju#jg>!nbjmplskjpwj`bwfgnbwkfnbwj`bo#,kfbg=\\x0E\\t?algzpvddfpwp#wkbwgl`vnfmwbwjlm`lm`fmwqbwjlmqfobwjlmpkjspnbz#kbuf#affm+elq#f{bnsof/Wkjp#bqwj`of#jm#plnf#`bpfpsbqwp#le#wkf#gfejmjwjlm#leDqfbw#Aqjwbjm#`foosbggjmd>frvjubofmw#wlsob`fklogfq>!8#elmw.pjyf9#ivpwjej`bwjlmafojfufg#wkbwpveefqfg#eqlnbwwfnswfg#wl#ofbgfq#le#wkf`qjsw!#pq`>!,+evm`wjlm+*#xbqf#bubjobaof\\t\\n?ojmh#qfo>!#pq`>$kwws9,,jmwfqfpwfg#jm`lmufmwjlmbo#!#bow>!!#,=?,bqf#dfmfqboozkbp#bopl#affmnlpw#slsvobq#`lqqfpslmgjmd`qfgjwfg#tjwkwzof>!alqgfq9?,b=?,psbm=?,-dje!#tjgwk>!?jeqbnf#pq`>!wbaof#`obpp>!jmojmf.aol`h8b``lqgjmd#wl#wldfwkfq#tjwkbssql{jnbwfozsbqojbnfmwbqznlqf#bmg#nlqfgjpsobz9mlmf8wqbgjwjlmboozsqfglnjmbmwoz%maps8\\x7F%maps8%maps8?,psbm=#`foopsb`jmd>?jmsvw#mbnf>!lq!#`lmwfmw>!`lmwqlufqpjbosqlsfqwz>!ld9,{.pkl`htbuf.gfnlmpwqbwjlmpvqqlvmgfg#azMfufqwkfofpp/tbp#wkf#ejqpw`lmpjgfqbaof#Bowklvdk#wkf#`loobalqbwjlmpklvog#mlw#afsqlslqwjlm#le?psbm#pwzof>!hmltm#bp#wkf#pklqwoz#bewfqelq#jmpwbm`f/gfp`qjafg#bp#,kfbg=\\t?algz#pwbqwjmd#tjwkjm`qfbpjmdoz#wkf#eb`w#wkbwgjp`vppjlm#lenjggof#le#wkfbm#jmgjujgvbogjeej`vow#wl#sljmw#le#ujftklnlpf{vbojwzb``fswbm`f#le?,psbm=?,gju=nbmveb`wvqfqplqjdjm#le#wkf`lnnlmoz#vpfgjnslqwbm`f#legfmlnjmbwjlmpab`hdqlvmg9# ofmdwk#le#wkfgfwfqnjmbwjlmb#pjdmjej`bmw!#alqgfq>!3!=qfulovwjlmbqzsqjm`jsofp#lejp#`lmpjgfqfgtbp#gfufolsfgJmgl.Fvqlsfbmuvomfqbaof#wlsqlslmfmwp#lebqf#plnfwjnfp`olpfq#wl#wkfMft#Zlqh#@jwz#mbnf>!pfbq`kbwwqjavwfg#wl`lvqpf#le#wkfnbwkfnbwj`jbmaz#wkf#fmg#lebw#wkf#fmg#le!#alqgfq>!3!#wf`kmloldj`bo-qfnluf@obpp+aqbm`k#le#wkffujgfm`f#wkbw\\\"Xfmgje^..=\\x0E\\tJmpwjwvwf#le#jmwl#b#pjmdofqfpsf`wjufoz-bmg#wkfqfelqfsqlsfqwjfp#lejp#ol`bwfg#jmplnf#le#tkj`kWkfqf#jp#bopl`lmwjmvfg#wl#bssfbqbm`f#le#%bns8mgbpk8#gfp`qjafp#wkf`lmpjgfqbwjlmbvwklq#le#wkfjmgfsfmgfmwozfrvjssfg#tjwkglfp#mlw#kbuf?,b=?b#kqfe>!`lmevpfg#tjwk?ojmh#kqfe>!,bw#wkf#bdf#lebssfbq#jm#wkfWkfpf#jm`ovgfqfdbqgofpp#le`lvog#af#vpfg#pwzof>%rvlw8pfufqbo#wjnfpqfsqfpfmw#wkfalgz=\\t?,kwno=wklvdkw#wl#afslsvobwjlm#leslppjajojwjfpsfq`fmwbdf#leb``fpp#wl#wkfbm#bwwfnsw#wlsqlgv`wjlm#leirvfqz,irvfqzwtl#gjeefqfmwafolmd#wl#wkffpwbaojpknfmwqfsob`jmd#wkfgfp`qjswjlm!#gfwfqnjmf#wkfbubjobaof#elqB``lqgjmd#wl#tjgf#qbmdf#le\\n?gju#`obpp>!nlqf#`lnnlmozlqdbmjpbwjlmpevm`wjlmbojwztbp#`lnsofwfg#%bns8ngbpk8#sbqwj`jsbwjlmwkf#`kbqb`wfqbm#bggjwjlmbobssfbqp#wl#afeb`w#wkbw#wkfbm#f{bnsof#lepjdmjej`bmwozlmnlvpflufq>!af`bvpf#wkfz#bpzm`#>#wqvf8sqlaofnp#tjwkpffnp#wl#kbufwkf#qfpvow#le#pq`>!kwws9,,ebnjojbq#tjwkslppfppjlm#leevm`wjlm#+*#xwllh#sob`f#jmbmg#plnfwjnfppvapwbmwjbooz?psbm=?,psbm=jp#lewfm#vpfgjm#bm#bwwfnswdqfbw#gfbo#leFmujqlmnfmwbopv``fppevooz#ujqwvbooz#boo13wk#`fmwvqz/sqlefppjlmbopmf`fppbqz#wl#gfwfqnjmfg#az`lnsbwjajojwzaf`bvpf#jw#jpGj`wjlmbqz#lenlgjej`bwjlmpWkf#elooltjmdnbz#qfefq#wl9@lmpfrvfmwoz/Jmwfqmbwjlmbobowklvdk#plnfwkbw#tlvog#aftlqog$p#ejqpw`obppjejfg#bpalwwln#le#wkf+sbqwj`vobqozbojdm>!ofew!#nlpw#`lnnlmozabpjp#elq#wkfelvmgbwjlm#le`lmwqjavwjlmpslsvobqjwz#le`fmwfq#le#wkfwl#qfgv`f#wkfivqjpgj`wjlmpbssql{jnbwjlm#lmnlvpflvw>!Mft#Wfpwbnfmw`loof`wjlm#le?,psbm=?,b=?,jm#wkf#Vmjwfgejon#gjqf`wlq.pwqj`w-gwg!=kbp#affm#vpfgqfwvqm#wl#wkfbowklvdk#wkjp`kbmdf#jm#wkfpfufqbo#lwkfqavw#wkfqf#bqfvmsqf`fgfmwfgjp#pjnjobq#wlfpsf`jbooz#jmtfjdkw9#alog8jp#`boofg#wkf`lnsvwbwjlmbojmgj`bwf#wkbwqfpwqj`wfg#wl\\n?nfwb#mbnf>!bqf#wzsj`booz`lmeoj`w#tjwkKltfufq/#wkf#Bm#f{bnsof#le`lnsbqfg#tjwkrvbmwjwjfp#leqbwkfq#wkbm#b`lmpwfoobwjlmmf`fppbqz#elqqfslqwfg#wkbwpsf`jej`bwjlmslojwj`bo#bmg%maps8%maps8?qfefqfm`fp#wlwkf#pbnf#zfbqDlufqmnfmw#ledfmfqbwjlm#lekbuf#mlw#affmpfufqbo#zfbqp`lnnjwnfmw#wl\\n\\n?vo#`obpp>!ujpvbojybwjlm2:wk#`fmwvqz/sqb`wjwjlmfqpwkbw#kf#tlvogbmg#`lmwjmvfgl``vsbwjlm#lejp#gfejmfg#bp`fmwqf#le#wkfwkf#bnlvmw#le=?gju#pwzof>!frvjubofmw#legjeefqfmwjbwfaqlvdkw#balvwnbqdjm.ofew9#bvwlnbwj`boozwklvdkw#le#bpPlnf#le#wkfpf\\t?gju#`obpp>!jmsvw#`obpp>!qfsob`fg#tjwkjp#lmf#le#wkffgv`bwjlm#bmgjmeovfm`fg#azqfsvwbwjlm#bp\\t?nfwb#mbnf>!b``lnnlgbwjlm?,gju=\\t?,gju=obqdf#sbqw#leJmpwjwvwf#elqwkf#pl.`boofg#bdbjmpw#wkf#Jm#wkjp#`bpf/tbp#bssljmwfg`objnfg#wl#afKltfufq/#wkjpGfsbqwnfmw#lewkf#qfnbjmjmdfeef`w#lm#wkfsbqwj`vobqoz#gfbo#tjwk#wkf\\t?gju#pwzof>!bonlpw#botbzpbqf#`vqqfmwozf{sqfppjlm#leskjolplskz#leelq#nlqf#wkbm`jujojybwjlmplm#wkf#jpobmgpfof`wfgJmgf{`bm#qfpvow#jm!#ubovf>!!#,=wkf#pwqv`wvqf#,=?,b=?,gju=Nbmz#le#wkfpf`bvpfg#az#wkfle#wkf#Vmjwfgpsbm#`obpp>!n`bm#af#wqb`fgjp#qfobwfg#wlaf`bnf#lmf#lejp#eqfrvfmwozojujmd#jm#wkfwkflqfwj`boozElooltjmd#wkfQfulovwjlmbqzdlufqmnfmw#jmjp#gfwfqnjmfgwkf#slojwj`bojmwqlgv`fg#jmpveej`jfmw#wlgfp`qjswjlm!=pklqw#pwlqjfppfsbqbwjlm#lebp#wl#tkfwkfqhmltm#elq#jwptbp#jmjwjboozgjpsobz9aol`hjp#bm#f{bnsofwkf#sqjm`jsbo`lmpjpwp#le#bqf`ldmjyfg#bp,algz=?,kwno=b#pvapwbmwjboqf`lmpwqv`wfgkfbg#le#pwbwfqfpjpwbm`f#wlvmgfqdqbgvbwfWkfqf#bqf#wtldqbujwbwjlmbobqf#gfp`qjafgjmwfmwjlmboozpfqufg#bp#wkf`obpp>!kfbgfqlsslpjwjlm#wlevmgbnfmwboozglnjmbwfg#wkfbmg#wkf#lwkfqboojbm`f#tjwktbp#elq`fg#wlqfpsf`wjufoz/bmg#slojwj`bojm#pvsslqw#lesflsof#jm#wkf13wk#`fmwvqz-bmg#svaojpkfgolbg@kbqwafbwwl#vmgfqpwbmgnfnafq#pwbwfpfmujqlmnfmwboejqpw#kboe#le`lvmwqjfp#bmgbq`kjwf`wvqboaf#`lmpjgfqfg`kbqb`wfqjyfg`ofbqJmwfqubobvwklqjwbwjufEfgfqbwjlm#letbp#pv``ffgfgbmg#wkfqf#bqfb#`lmpfrvfm`fwkf#Sqfpjgfmwbopl#jm`ovgfgeqff#plewtbqfpv``fppjlm#legfufolsfg#wkftbp#gfpwqlzfgbtbz#eqln#wkf8\\t?,p`qjsw=\\t?bowklvdk#wkfzelooltfg#az#bnlqf#sltfqevoqfpvowfg#jm#bVmjufqpjwz#leKltfufq/#nbmzwkf#sqfpjgfmwKltfufq/#plnfjp#wklvdkw#wlvmwjo#wkf#fmgtbp#bmmlvm`fgbqf#jnslqwbmwbopl#jm`ovgfp=?jmsvw#wzsf>wkf#`fmwfq#le#GL#MLW#BOWFQvpfg#wl#qfefqwkfnfp,<plqw>wkbw#kbg#affmwkf#abpjp#elqkbp#gfufolsfgjm#wkf#pvnnfq`lnsbqbwjufozgfp`qjafg#wkfpv`k#bp#wklpfwkf#qfpvowjmdjp#jnslppjaofubqjlvp#lwkfqPlvwk#Beqj`bmkbuf#wkf#pbnffeef`wjufmfppjm#tkj`k#`bpf8#wf{w.bojdm9pwqv`wvqf#bmg8#ab`hdqlvmg9qfdbqgjmd#wkfpvsslqwfg#wkfjp#bopl#hmltmpwzof>!nbqdjmjm`ovgjmd#wkfabkbpb#Nfobzvmlqph#alhn/Iomlqph#mzmlqphpolufm)M(ajmbjmwfqmb`jlmbo`bojej`b`j/_m`lnvmj`b`j/_m`lmpwqv``j/_m!=?gju#`obpp>!gjpbnajdvbwjlmGlnbjmMbnf$/#$bgnjmjpwqbwjlmpjnvowbmflvpozwqbmpslqwbwjlmJmwfqmbwjlmbo#nbqdjm.alwwln9qfpslmpjajojwz?\\\"Xfmgje^..=\\t?,=?nfwb#mbnf>!jnsofnfmwbwjlmjmeqbpwqv`wvqfqfsqfpfmwbwjlmalqgfq.alwwln9?,kfbg=\\t?algz=>kwws&0B&1E&1E?elqn#nfwklg>!nfwklg>!slpw!#,ebuj`lm-j`l!#~*8\\t?,p`qjsw=\\t-pfwBwwqjavwf+Bgnjmjpwqbwjlm>#mft#Bqqbz+*8?\\\"Xfmgje^..=\\x0E\\tgjpsobz9aol`h8Vmelqwvmbwfoz/!=%maps8?,gju=,ebuj`lm-j`l!=>$pwzofpkffw$#jgfmwjej`bwjlm/#elq#f{bnsof/?oj=?b#kqfe>!,bm#bowfqmbwjufbp#b#qfpvow#lesw!=?,p`qjsw=\\twzsf>!pvanjw!#\\t+evm`wjlm+*#xqf`lnnfmgbwjlmelqn#b`wjlm>!,wqbmpelqnbwjlmqf`lmpwqv`wjlm-pwzof-gjpsobz#B``lqgjmd#wl#kjggfm!#mbnf>!bolmd#tjwk#wkfgl`vnfmw-algz-bssql{jnbwfoz#@lnnvmj`bwjlmpslpw!#b`wjlm>!nfbmjmd#%rvlw8..?\\\"Xfmgje^..=Sqjnf#Njmjpwfq`kbqb`wfqjpwj`?,b=#?b#`obpp>wkf#kjpwlqz#le#lmnlvpflufq>!wkf#dlufqmnfmwkqfe>!kwwsp9,,tbp#lqjdjmbooztbp#jmwqlgv`fg`obppjej`bwjlmqfsqfpfmwbwjufbqf#`lmpjgfqfg?\\\"Xfmgje^..=\\t\\tgfsfmgp#lm#wkfVmjufqpjwz#le#jm#`lmwqbpw#wl#sob`fklogfq>!jm#wkf#`bpf#lejmwfqmbwjlmbo#`lmpwjwvwjlmbopwzof>!alqgfq.9#evm`wjlm+*#xAf`bvpf#le#wkf.pwqj`w-gwg!=\\t?wbaof#`obpp>!b``lnsbmjfg#azb``lvmw#le#wkf?p`qjsw#pq`>!,mbwvqf#le#wkf#wkf#sflsof#jm#jm#bggjwjlm#wlp*8#ip-jg#>#jg!#tjgwk>!233&!qfdbqgjmd#wkf#Qlnbm#@bwkloj`bm#jmgfsfmgfmwelooltjmd#wkf#-dje!#tjgwk>!2wkf#elooltjmd#gjp`qjnjmbwjlmbq`kbfloldj`bosqjnf#njmjpwfq-ip!=?,p`qjsw=`lnajmbwjlm#le#nbqdjmtjgwk>!`qfbwfFofnfmw+t-bwwb`kFufmw+?,b=?,wg=?,wq=pq`>!kwwsp9,,bJm#sbqwj`vobq/#bojdm>!ofew!#@yf`k#Qfsvaoj`Vmjwfg#Hjmdgln`lqqfpslmgfm`f`lm`ovgfg#wkbw-kwno!#wjwof>!+evm`wjlm#+*#x`lnfp#eqln#wkfbssoj`bwjlm#le?psbm#`obpp>!pafojfufg#wl#affnfmw+$p`qjsw$?,b=\\t?,oj=\\t?ojufqz#gjeefqfmw=?psbm#`obpp>!lswjlm#ubovf>!+bopl#hmltm#bp\\n?oj=?b#kqfe>!=?jmsvw#mbnf>!pfsbqbwfg#eqlnqfefqqfg#wl#bp#ubojdm>!wls!=elvmgfq#le#wkfbwwfnswjmd#wl#`bqalm#gjl{jgf\\t\\t?gju#`obpp>!`obpp>!pfbq`k.,algz=\\t?,kwno=lsslqwvmjwz#wl`lnnvmj`bwjlmp?,kfbg=\\x0E\\t?algz#pwzof>!tjgwk9Wj\\rVSmd#Uj\\rWkw`kbmdfp#jm#wkfalqgfq.`lolq9 3!#alqgfq>!3!#?,psbm=?,gju=?tbp#gjp`lufqfg!#wzsf>!wf{w!#*8\\t?,p`qjsw=\\t\\tGfsbqwnfmw#le#f``ofpjbpwj`bowkfqf#kbp#affmqfpvowjmd#eqln?,algz=?,kwno=kbp#mfufq#affmwkf#ejqpw#wjnfjm#qfpslmpf#wlbvwlnbwj`booz#?,gju=\\t\\t?gju#jtbp#`lmpjgfqfgsfq`fmw#le#wkf!#,=?,b=?,gju=`loof`wjlm#le#gfp`fmgfg#eqlnpf`wjlm#le#wkfb``fsw.`kbqpfwwl#af#`lmevpfgnfnafq#le#wkf#sbggjmd.qjdkw9wqbmpobwjlm#lejmwfqsqfwbwjlm#kqfe>$kwws9,,tkfwkfq#lq#mlwWkfqf#bqf#boplwkfqf#bqf#nbmzb#pnboo#mvnafqlwkfq#sbqwp#lejnslppjaof#wl##`obpp>!avwwlmol`bwfg#jm#wkf-#Kltfufq/#wkfbmg#fufmwvboozBw#wkf#fmg#le#af`bvpf#le#jwpqfsqfpfmwp#wkf?elqn#b`wjlm>!#nfwklg>!slpw!jw#jp#slppjaofnlqf#ojhfoz#wlbm#jm`qfbpf#jmkbuf#bopl#affm`lqqfpslmgp#wlbmmlvm`fg#wkbwbojdm>!qjdkw!=nbmz#`lvmwqjfpelq#nbmz#zfbqpfbqojfpw#hmltmaf`bvpf#jw#tbpsw!=?,p`qjsw=\\x0E#ubojdm>!wls!#jmkbajwbmwp#leelooltjmd#zfbq\\x0E\\t?gju#`obpp>!njoojlm#sflsof`lmwqlufqpjbo#`lm`fqmjmd#wkfbqdvf#wkbw#wkfdlufqmnfmw#bmgb#qfefqfm`f#wlwqbmpefqqfg#wlgfp`qjajmd#wkf#pwzof>!`lolq9bowklvdk#wkfqfafpw#hmltm#elqpvanjw!#mbnf>!nvowjsoj`bwjlmnlqf#wkbm#lmf#qf`ldmjwjlm#le@lvm`jo#le#wkffgjwjlm#le#wkf##?nfwb#mbnf>!Fmwfqwbjmnfmw#btbz#eqln#wkf#8nbqdjm.qjdkw9bw#wkf#wjnf#lejmufpwjdbwjlmp`lmmf`wfg#tjwkbmg#nbmz#lwkfqbowklvdk#jw#jpafdjmmjmd#tjwk#?psbm#`obpp>!gfp`fmgbmwp#le?psbm#`obpp>!j#bojdm>!qjdkw!?,kfbg=\\t?algz#bpsf`wp#le#wkfkbp#pjm`f#affmFvqlsfbm#Vmjlmqfnjmjp`fmw#lenlqf#gjeej`vowUj`f#Sqfpjgfmw`lnslpjwjlm#lesbppfg#wkqlvdknlqf#jnslqwbmwelmw.pjyf922s{f{sobmbwjlm#lewkf#`lm`fsw#letqjwwfm#jm#wkf\\n?psbm#`obpp>!jp#lmf#le#wkf#qfpfnaobm`f#wllm#wkf#dqlvmgptkj`k#`lmwbjmpjm`ovgjmd#wkf#gfejmfg#az#wkfsvaoj`bwjlm#lenfbmp#wkbw#wkflvwpjgf#le#wkfpvsslqw#le#wkf?jmsvw#`obpp>!?psbm#`obpp>!w+Nbwk-qbmgln+*nlpw#sqlnjmfmwgfp`qjswjlm#le@lmpwbmwjmlsoftfqf#svaojpkfg?gju#`obpp>!pfbssfbqp#jm#wkf2!#kfjdkw>!2!#nlpw#jnslqwbmwtkj`k#jm`ovgfptkj`k#kbg#affmgfpwqv`wjlm#lewkf#slsvobwjlm\\t\\n?gju#`obpp>!slppjajojwz#leplnfwjnfp#vpfgbssfbq#wl#kbufpv``fpp#le#wkfjmwfmgfg#wl#afsqfpfmw#jm#wkfpwzof>!`ofbq9a\\x0E\\t?,p`qjsw=\\x0E\\t?tbp#elvmgfg#jmjmwfqujft#tjwk\\\\jg!#`lmwfmw>!`bsjwbo#le#wkf\\x0E\\t?ojmh#qfo>!pqfofbpf#le#wkfsljmw#lvw#wkbw{NOKwwsQfrvfpwbmg#pvapfrvfmwpf`lmg#obqdfpwufqz#jnslqwbmwpsf`jej`bwjlmppvqeb`f#le#wkfbssojfg#wl#wkfelqfjdm#sloj`z\\\\pfwGlnbjmMbnffpwbaojpkfg#jmjp#afojfufg#wlJm#bggjwjlm#wlnfbmjmd#le#wkfjp#mbnfg#bewfqwl#sqlwf`w#wkfjp#qfsqfpfmwfgGf`obqbwjlm#lenlqf#feej`jfmw@obppjej`bwjlmlwkfq#elqnp#lekf#qfwvqmfg#wl?psbm#`obpp>!`sfqelqnbm`f#le+evm`wjlm+*#x\\x0Eje#bmg#lmoz#jeqfdjlmp#le#wkfofbgjmd#wl#wkfqfobwjlmp#tjwkVmjwfg#Mbwjlmppwzof>!kfjdkw9lwkfq#wkbm#wkfzsf!#`lmwfmw>!Bppl`jbwjlm#le\\t?,kfbg=\\t?algzol`bwfg#lm#wkfjp#qfefqqfg#wl+jm`ovgjmd#wkf`lm`fmwqbwjlmpwkf#jmgjujgvbobnlmd#wkf#nlpwwkbm#bmz#lwkfq,=\\t?ojmh#qfo>!#qfwvqm#ebopf8wkf#svqslpf#lewkf#bajojwz#wl8`lolq9 eee~\\t-\\t?psbm#`obpp>!wkf#pvaif`w#legfejmjwjlmp#le=\\x0E\\t?ojmh#qfo>!`objn#wkbw#wkfkbuf#gfufolsfg?wbaof#tjgwk>!`fofaqbwjlm#leElooltjmd#wkf#wl#gjpwjmdvjpk?psbm#`obpp>!awbhfp#sob`f#jmvmgfq#wkf#mbnfmlwfg#wkbw#wkf=?\\\"Xfmgje^..=\\tpwzof>!nbqdjm.jmpwfbg#le#wkfjmwqlgv`fg#wkfwkf#sql`fpp#lejm`qfbpjmd#wkfgjeefqfm`fp#jmfpwjnbwfg#wkbwfpsf`jbooz#wkf,gju=?gju#jg>!tbp#fufmwvboozwkqlvdklvw#kjpwkf#gjeefqfm`fplnfwkjmd#wkbwpsbm=?,psbm=?,pjdmjej`bmwoz#=?,p`qjsw=\\x0E\\t\\x0E\\tfmujqlmnfmwbo#wl#sqfufmw#wkfkbuf#affm#vpfgfpsf`jbooz#elqvmgfqpwbmg#wkfjp#fppfmwjbooztfqf#wkf#ejqpwjp#wkf#obqdfpwkbuf#affm#nbgf!#pq`>!kwws9,,jmwfqsqfwfg#bppf`lmg#kboe#le`qloojmd>!ml!#jp#`lnslpfg#leJJ/#Kloz#Qlnbmjp#f{sf`wfg#wlkbuf#wkfjq#ltmgfejmfg#bp#wkfwqbgjwjlmbooz#kbuf#gjeefqfmwbqf#lewfm#vpfgwl#fmpvqf#wkbwbdqffnfmw#tjwk`lmwbjmjmd#wkfbqf#eqfrvfmwozjmelqnbwjlm#lmf{bnsof#jp#wkfqfpvowjmd#jm#b?,b=?,oj=?,vo=#`obpp>!ellwfqbmg#fpsf`jboozwzsf>!avwwlm!#?,psbm=?,psbm=tkj`k#jm`ovgfg=\\t?nfwb#mbnf>!`lmpjgfqfg#wkf`bqqjfg#lvw#azKltfufq/#jw#jpaf`bnf#sbqw#lejm#qfobwjlm#wlslsvobq#jm#wkfwkf#`bsjwbo#letbp#leej`jbooztkj`k#kbp#affmwkf#Kjpwlqz#lebowfqmbwjuf#wlgjeefqfmw#eqlnwl#pvsslqw#wkfpvddfpwfg#wkbwjm#wkf#sql`fpp##?gju#`obpp>!wkf#elvmgbwjlmaf`bvpf#le#kjp`lm`fqmfg#tjwkwkf#vmjufqpjwzlsslpfg#wl#wkfwkf#`lmwf{w#le?psbm#`obpp>!swf{w!#mbnf>!r!\\n\\n?gju#`obpp>!wkf#p`jfmwjej`qfsqfpfmwfg#aznbwkfnbwj`jbmpfof`wfg#az#wkfwkbw#kbuf#affm=?gju#`obpp>!`gju#jg>!kfbgfqjm#sbqwj`vobq/`lmufqwfg#jmwl*8\\t?,p`qjsw=\\t?skjolplskj`bo#pqsphlkqubwphjwj\\rVSmd#Uj\\rWkw<L=o=m=m<V<T<U=l=o=m=m<V<T<Ujmufpwjdb`j/_msbqwj`jsb`j/_m<V<R=n<R=l=g<Y<R<]<W<\\\\=m=n<T<V<R=n<R=l=g<U=k<Y<W<R<^<Y<V=m<T=m=n<Y<P=g<q<R<^<R=m=n<T<V<R=n<R=l=g=i<R<]<W<\\\\=m=n=`<^=l<Y<P<Y<Q<T<V<R=n<R=l<\\\\=c=m<Y<_<R<X<Q=c=m<V<\\\\=k<\\\\=n=`<Q<R<^<R=m=n<T<O<V=l<\\\\<T<Q=g<^<R<S=l<R=m=g<V<R=n<R=l<R<U=m<X<Y<W<\\\\=n=`<S<R<P<R=e=`=b=m=l<Y<X=m=n<^<R<]=l<\\\\<[<R<P=m=n<R=l<R<Q=g=o=k<\\\\=m=n<T<Y=n<Y=k<Y<Q<T<Y<\\x7F<W<\\\\<^<Q<\\\\=c<T=m=n<R=l<T<T=m<T=m=n<Y<P<\\\\=l<Y=d<Y<Q<T=c<M<V<\\\\=k<\\\\=n=`<S<R=a=n<R<P=o=m<W<Y<X=o<Y=n=m<V<\\\\<[<\\\\=n=`=n<R<^<\\\\=l<R<^<V<R<Q<Y=k<Q<R=l<Y=d<Y<Q<T<Y<V<R=n<R=l<R<Y<R=l<_<\\\\<Q<R<^<V<R=n<R=l<R<P<L<Y<V<W<\\\\<P<\\\\4K5h5i5j4F4C5e5i5j4F4C5f4K4F4K5h5i5d4Z5d4U4K5h4D4]4K5i4@4K5h5i5d4K5n4U4K5h4]4_4K4J5h5i4X4K4]5o4K4F4K5h4O4U4Z4K4M4K5h4]5f4K4Z4E4K5h4F4Y5i5f5i4K5h4K4U4Z4K4M4K5h5j4F4K4J4@4K5h4O5h4U4K4D4K5h4F4_4@5f5h4K5h4O5n4_4K5i4K5h4Z4V4[4K4F4K5h5m5f4C5f5d4K5h4F4]4A5f4D4K5h4@4C5f4C4E4K5h4F4U5h5f5i4K5h4O4B4D4K4]4K5h4K5m5h4K5i4K5h4O5m5h4K5i4K5h4F4K4]5f4B4K5h4F5n5j5f4E4K5h4K5h4U4K4D4K5h4B5d4K4[4]4K5h5i4@4F5i4U4K5h4C5f5o5d4]4K5h4_5f4K4A4E4U4D4C4K5h5h5k4K5h4F4]4D5f4E4K5h4]5d4K4D4[4K5h4O4C4D5f4E4K5h4K4B4D4K4]4K5h5i4F4A4C4E4K5h4K4V4K5j5f`vqplq9sljmwfq8?,wjwof=\\t?nfwb#!#kqfe>!kwws9,,!=?psbm#`obpp>!nfnafqp#le#wkf#tjmglt-ol`bwjlmufqwj`bo.bojdm9,b=#\\x7F#?b#kqfe>!?\\\"gl`wzsf#kwno=nfgjb>!p`qffm!#?lswjlm#ubovf>!ebuj`lm-j`l!#,=\\t\\n\\n?gju#`obpp>!`kbqb`wfqjpwj`p!#nfwklg>!dfw!#,algz=\\t?,kwno=\\tpklqw`vw#j`lm!#gl`vnfmw-tqjwf+sbggjmd.alwwln9qfsqfpfmwbwjufppvanjw!#ubovf>!bojdm>!`fmwfq!#wkqlvdklvw#wkf#p`jfm`f#ej`wjlm\\t##?gju#`obpp>!pvanjw!#`obpp>!lmf#le#wkf#nlpw#ubojdm>!wls!=?tbp#fpwbaojpkfg*8\\x0E\\t?,p`qjsw=\\x0E\\tqfwvqm#ebopf8!=*-pwzof-gjpsobzaf`bvpf#le#wkf#gl`vnfmw-`llhjf?elqn#b`wjlm>!,~algzxnbqdjm938Fm`z`olsfgjb#leufqpjlm#le#wkf#-`qfbwfFofnfmw+mbnf!#`lmwfmw>!?,gju=\\t?,gju=\\t\\tbgnjmjpwqbwjuf#?,algz=\\t?,kwno=kjpwlqz#le#wkf#!=?jmsvw#wzsf>!slqwjlm#le#wkf#bp#sbqw#le#wkf#%maps8?b#kqfe>!lwkfq#`lvmwqjfp!=\\t?gju#`obpp>!?,psbm=?,psbm=?Jm#lwkfq#tlqgp/gjpsobz9#aol`h8`lmwqlo#le#wkf#jmwqlgv`wjlm#le,=\\t?nfwb#mbnf>!bp#tfoo#bp#wkf#jm#qf`fmw#zfbqp\\x0E\\t\\n?gju#`obpp>!?,gju=\\t\\n?,gju=\\tjmpsjqfg#az#wkfwkf#fmg#le#wkf#`lnsbwjaof#tjwkaf`bnf#hmltm#bp#pwzof>!nbqdjm9-ip!=?,p`qjsw=?#Jmwfqmbwjlmbo#wkfqf#kbuf#affmDfqnbm#obmdvbdf#pwzof>!`lolq9 @lnnvmjpw#Sbqwz`lmpjpwfmw#tjwkalqgfq>!3!#`foo#nbqdjmkfjdkw>!wkf#nbilqjwz#le!#bojdm>!`fmwfqqfobwfg#wl#wkf#nbmz#gjeefqfmw#Lqwklgl{#@kvq`kpjnjobq#wl#wkf#,=\\t?ojmh#qfo>!ptbp#lmf#le#wkf#vmwjo#kjp#gfbwk~*+*8\\t?,p`qjsw=lwkfq#obmdvbdfp`lnsbqfg#wl#wkfslqwjlmp#le#wkfwkf#Mfwkfqobmgpwkf#nlpw#`lnnlmab`hdqlvmg9vqo+bqdvfg#wkbw#wkfp`qloojmd>!ml!#jm`ovgfg#jm#wkfMlqwk#Bnfqj`bm#wkf#mbnf#le#wkfjmwfqsqfwbwjlmpwkf#wqbgjwjlmbogfufolsnfmw#le#eqfrvfmwoz#vpfgb#`loof`wjlm#leufqz#pjnjobq#wlpvqqlvmgjmd#wkff{bnsof#le#wkjpbojdm>!`fmwfq!=tlvog#kbuf#affmjnbdf\\\\`bswjlm#>bwwb`kfg#wl#wkfpvddfpwjmd#wkbwjm#wkf#elqn#le#jmuloufg#jm#wkfjp#gfqjufg#eqlnmbnfg#bewfq#wkfJmwqlgv`wjlm#wlqfpwqj`wjlmp#lm#pwzof>!tjgwk9#`bm#af#vpfg#wl#wkf#`qfbwjlm#lenlpw#jnslqwbmw#jmelqnbwjlm#bmgqfpvowfg#jm#wkf`loobspf#le#wkfWkjp#nfbmp#wkbwfofnfmwp#le#wkftbp#qfsob`fg#azbmbozpjp#le#wkfjmpsjqbwjlm#elqqfdbqgfg#bp#wkfnlpw#pv``fppevohmltm#bp#%rvlw8b#`lnsqfkfmpjufKjpwlqz#le#wkf#tfqf#`lmpjgfqfgqfwvqmfg#wl#wkfbqf#qfefqqfg#wlVmplvq`fg#jnbdf=\\t\\n?gju#`obpp>!`lmpjpwp#le#wkfpwlsSqlsbdbwjlmjmwfqfpw#jm#wkfbubjobajojwz#lebssfbqp#wl#kbuffof`wqlnbdmfwj`fmbaofPfquj`fp+evm`wjlm#le#wkfJw#jp#jnslqwbmw?,p`qjsw=?,gju=evm`wjlm+*xubq#qfobwjuf#wl#wkfbp#b#qfpvow#le#wkf#slpjwjlm#leElq#f{bnsof/#jm#nfwklg>!slpw!#tbp#elooltfg#az%bns8ngbpk8#wkfwkf#bssoj`bwjlmip!=?,p`qjsw=\\x0E\\tvo=?,gju=?,gju=bewfq#wkf#gfbwktjwk#qfpsf`w#wlpwzof>!sbggjmd9jp#sbqwj`vobqozgjpsobz9jmojmf8#wzsf>!pvanjw!#jp#gjujgfg#jmwl\\bTA\\nzk#+\\x0BBl\\bQ\\x7F*qfpslmpbajojgbgbgnjmjpwqb`j/_mjmwfqmb`jlmbofp`lqqfpslmgjfmwf\\fHe\\fHF\\fHC\\fIg\\fH{\\fHF\\fIn\\fH\\\\\\fIa\\fHY\\fHU\\fHB\\fHR\\fH\\\\\\fIk\\fH^\\fIg\\fH{\\fIg\\fHn\\fHv\\fIm\\fHD\\fHR\\fHY\\fH^\\fIk\\fHy\\fHS\\fHD\\fHT\\fH\\\\\\fHy\\fHR\\fH\\\\\\fHF\\fIm\\fH^\\fHS\\fHT\\fHz\\fIg\\fHp\\fIk\\fHn\\fHv\\fHR\\fHU\\fHS\\fHc\\fHA\\fIk\\fHp\\fIk\\fHn\\fHZ\\fHR\\fHB\\fHS\\fH^\\fHU\\fHB\\fHR\\fH\\\\\\fIl\\fHp\\fHR\\fH{\\fH\\\\\\fHO\\fH@\\fHD\\fHR\\fHD\\fIk\\fHy\\fIm\\fHB\\fHR\\fH\\\\\\fH@\\fIa\\fH^\\fIe\\fH{\\fHB\\fHR\\fH^\\fHS\\fHy\\fHB\\fHU\\fHS\\fH^\\fHR\\fHF\\fIo\\fH[\\fIa\\fHL\\fH@\\fHN\\fHP\\fHH\\fIk\\fHA\\fHR\\fHp\\fHF\\fHR\\fHy\\fIa\\fH^\\fHS\\fHy\\fHs\\fIa\\fH\\\\\\fIk\\fHD\\fHz\\fHS\\fH^\\fHR\\fHG\\fHJ\\fI`\\fH\\\\\\fHR\\fHD\\fHB\\fHR\\fHB\\fH^\\fIk\\fHB\\fHH\\fHJ\\fHR\\fHD\\fH@\\fHR\\fHp\\fHR\\fH\\\\\\fHY\\fHS\\fHy\\fHR\\fHT\\fHy\\fIa\\fHC\\fIg\\fHn\\fHv\\fHR\\fHU\\fHH\\fIk\\fHF\\fHU\\fIm\\fHm\\fHv\\fH@\\fHH\\fHR\\fHC\\fHR\\fHT\\fHn\\fHY\\fHR\\fHJ\\fHJ\\fIk\\fHz\\fHD\\fIk\\fHF\\fHS\\fHw\\fH^\\fIk\\fHY\\fHS\\fHZ\\fIk\\fH[\\fH\\\\\\fHR\\fHp\\fIa\\fHC\\fHe\\fHH\\fIa\\fHH\\fH\\\\\\fHB\\fIm\\fHn\\fH@\\fHd\\fHJ\\fIg\\fHD\\fIg\\fHn\\fHe\\fHF\\fHy\\fH\\\\\\fHO\\fHF\\fHN\\fHP\\fIk\\fHn\\fHT\\fIa\\fHI\\fHS\\fHH\\fHG\\fHS\\fH^\\fIa\\fHB\\fHB\\fIm\\fHz\\fIa\\fHC\\fHi\\fHv\\fIa\\fHw\\fHR\\fHw\\fIn\\fHs\\fHH\\fIl\\fHT\\fHn\\fH{\\fIl\\fHH\\fHp\\fHR\\fHc\\fH{\\fHR\\fHY\\fHS\\fHA\\fHR\\fH{\\fHt\\fHO\\fIa\\fHs\\fIk\\fHJ\\fIn\\fHT\\fH\\\\\\fIk\\fHJ\\fHS\\fHD\\fIg\\fHn\\fHU\\fHH\\fIa\\fHC\\fHR\\fHT\\fIk\\fHy\\fIa\\fHT\\fH{\\fHR\\fHn\\fHK\\fIl\\fHY\\fHS\\fHZ\\fIa\\fHY\\fH\\\\\\fHR\\fHH\\fIk\\fHn\\fHJ\\fId\\fHs\\fIa\\fHT\\fHD\\fHy\\fIa\\fHZ\\fHR\\fHT\\fHR\\fHB\\fHD\\fIk\\fHi\\fHJ\\fHR\\fH^\\fHH\\fH@\\fHS\\fHp\\fH^\\fIl\\fHF\\fIm\\fH\\\\\\fIn\\fH[\\fHU\\fHS\\fHn\\fHJ\\fIl\\fHB\\fHS\\fHH\\fIa\\fH\\\\\\fHy\\fHY\\fHS\\fHH\\fHR\\fH\\\\\\fIm\\fHF\\fHC\\fIk\\fHT\\fIa\\fHI\\fHR\\fHD\\fHy\\fH\\\\\\fIg\\fHM\\fHP\\fHB\\fIm\\fHy\\fIa\\fHH\\fHC\\fIg\\fHp\\fHD\\fHR\\fHy\\fIo\\fHF\\fHC\\fHR\\fHF\\fIg\\fHT\\fIa\\fHs\\fHt\\fH\\\\\\fIk\\fH^\\fIn\\fHy\\fHR\\fH\\\\\\fIa\\fHC\\fHY\\fHS\\fHv\\fHR\\fH\\\\\\fHT\\fIn\\fHv\\fHD\\fHR\\fHB\\fIn\\fH^\\fIa\\fHC\\fHJ\\fIk\\fHz\\fIk\\fHn\\fHU\\fHB\\fIk\\fHZ\\fHR\\fHT\\fIa\\fHy\\fIn\\fH^\\fHB\\fId\\fHn\\fHD\\fIk\\fHH\\fId\\fHC\\fHR\\fH\\\\\\fHp\\fHS\\fHT\\fHy\\fIkqpp({no!#wjwof>!.wzsf!#`lmwfmw>!wjwof!#`lmwfmw>!bw#wkf#pbnf#wjnf-ip!=?,p`qjsw=\\t?!#nfwklg>!slpw!#?,psbm=?,b=?,oj=ufqwj`bo.bojdm9w,irvfqz-njm-ip!=-`oj`h+evm`wjlm+#pwzof>!sbggjmd.~*+*8\\t?,p`qjsw=\\t?,psbm=?b#kqfe>!?b#kqfe>!kwws9,,*8#qfwvqm#ebopf8wf{w.gf`lqbwjlm9#p`qloojmd>!ml!#alqgfq.`loobspf9bppl`jbwfg#tjwk#Abkbpb#JmglmfpjbFmdojpk#obmdvbdf?wf{w#{no9psb`f>-dje!#alqgfq>!3!?,algz=\\t?,kwno=\\tlufqeolt9kjggfm8jnd#pq`>!kwws9,,bggFufmwOjpwfmfqqfpslmpjaof#elq#p-ip!=?,p`qjsw=\\t,ebuj`lm-j`l!#,=lsfqbwjmd#pzpwfn!#pwzof>!tjgwk92wbqdfw>!\\\\aobmh!=Pwbwf#Vmjufqpjwzwf{w.bojdm9ofew8\\tgl`vnfmw-tqjwf+/#jm`ovgjmd#wkf#bqlvmg#wkf#tlqog*8\\x0E\\t?,p`qjsw=\\x0E\\t?!#pwzof>!kfjdkw98lufqeolt9kjggfmnlqf#jmelqnbwjlmbm#jmwfqmbwjlmbob#nfnafq#le#wkf#lmf#le#wkf#ejqpw`bm#af#elvmg#jm#?,gju=\\t\\n\\n?,gju=\\tgjpsobz9#mlmf8!=!#,=\\t?ojmh#qfo>!\\t##+evm`wjlm+*#xwkf#26wk#`fmwvqz-sqfufmwGfebvow+obqdf#mvnafq#le#Azybmwjmf#Fnsjqf-isd\\x7Fwkvna\\x7Fofew\\x7Fubpw#nbilqjwz#lenbilqjwz#le#wkf##bojdm>!`fmwfq!=Vmjufqpjwz#Sqfppglnjmbwfg#az#wkfPf`lmg#Tlqog#Tbqgjpwqjavwjlm#le#pwzof>!slpjwjlm9wkf#qfpw#le#wkf#`kbqb`wfqjyfg#az#qfo>!mleloolt!=gfqjufp#eqln#wkfqbwkfq#wkbm#wkf#b#`lnajmbwjlm#lepwzof>!tjgwk9233Fmdojpk.psfbhjmd`lnsvwfq#p`jfm`falqgfq>!3!#bow>!wkf#f{jpwfm`f#leGfnl`qbwj`#Sbqwz!#pwzof>!nbqdjm.Elq#wkjp#qfbplm/-ip!=?,p`qjsw=\\t\\npAzWbdMbnf+p*X3^ip!=?,p`qjsw=\\x0E\\t?-ip!=?,p`qjsw=\\x0E\\tojmh#qfo>!j`lm!#$#bow>$$#`obpp>$elqnbwjlm#le#wkfufqpjlmp#le#wkf#?,b=?,gju=?,gju=,sbdf=\\t##?sbdf=\\t?gju#`obpp>!`lmwaf`bnf#wkf#ejqpwabkbpb#Jmglmfpjbfmdojpk#+pjnsof*\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@=i=l<^<\\\\=n=m<V<T<V<R<P<S<\\\\<Q<T<T=c<^<W=c<Y=n=m=c<x<R<]<\\\\<^<T=n=`=k<Y<W<R<^<Y<V<\\\\=l<\\\\<[<^<T=n<T=c<t<Q=n<Y=l<Q<Y=n<r=n<^<Y=n<T=n=`<Q<\\\\<S=l<T<P<Y=l<T<Q=n<Y=l<Q<Y=n<V<R=n<R=l<R<_<R=m=n=l<\\\\<Q<T=j=g<V<\\\\=k<Y=m=n<^<Y=o=m<W<R<^<T=c=i<S=l<R<]<W<Y<P=g<S<R<W=o=k<T=n=`=c<^<W=c=b=n=m=c<Q<\\\\<T<]<R<W<Y<Y<V<R<P<S<\\\\<Q<T=c<^<Q<T<P<\\\\<Q<T<Y=m=l<Y<X=m=n<^<\\\\4K5h5i5d4K4Z5f4U4K5h4]4J5f4_5f4E4K5h4K5j4F5n4K5h5i4X4K4]5o4K4F5o4K5h4_5f4K4]4K4F4K5h5i5o4F5d4D4E4K5h4_4U5d4C5f4E4K4A4Y4K4J5f4K4F4K5h4U4K5h5i5f4E4K5h4Y5d4F5f4K4F4K5h4K5j4F4]5j4F4K5h4F4Y4K5i5f5i4K5h4I4_5h4K5i5f4K5h5i4X4K4]5o4E4K5h5i4]4J5f4K4Fqlalwp!#`lmwfmw>!?gju#jg>!ellwfq!=wkf#Vmjwfg#Pwbwfp?jnd#pq`>!kwws9,,-isd\\x7Fqjdkw\\x7Fwkvna\\x7F-ip!=?,p`qjsw=\\x0E\\t?ol`bwjlm-sqlwl`loeqbnfalqgfq>!3!#p!#,=\\t?nfwb#mbnf>!?,b=?,gju=?,gju=?elmw.tfjdkw9alog8%rvlw8#bmg#%rvlw8gfsfmgjmd#lm#wkf#nbqdjm938sbggjmd9!#qfo>!mleloolt!#Sqfpjgfmw#le#wkf#wtfmwjfwk#`fmwvqzfujpjlm=\\t##?,sbdfJmwfqmfw#F{solqfqb-bpzm`#>#wqvf8\\x0E\\tjmelqnbwjlm#balvw?gju#jg>!kfbgfq!=!#b`wjlm>!kwws9,,?b#kqfe>!kwwsp9,,?gju#jg>!`lmwfmw!?,gju=\\x0E\\t?,gju=\\x0E\\t?gfqjufg#eqln#wkf#?jnd#pq`>$kwws9,,b``lqgjmd#wl#wkf#\\t?,algz=\\t?,kwno=\\tpwzof>!elmw.pjyf9p`qjsw#obmdvbdf>!Bqjbo/#Kfoufwj`b/?,b=?psbm#`obpp>!?,p`qjsw=?p`qjsw#slojwj`bo#sbqwjfpwg=?,wq=?,wbaof=?kqfe>!kwws9,,ttt-jmwfqsqfwbwjlm#leqfo>!pwzofpkffw!#gl`vnfmw-tqjwf+$?`kbqpfw>!vwe.;!=\\tafdjmmjmd#le#wkf#qfufbofg#wkbw#wkfwfofujpjlm#pfqjfp!#qfo>!mleloolt!=#wbqdfw>!\\\\aobmh!=`objnjmd#wkbw#wkfkwws&0B&1E&1Ettt-nbmjefpwbwjlmp#leSqjnf#Njmjpwfq#lejmeovfm`fg#az#wkf`obpp>!`ofbqej{!=,gju=\\x0E\\t?,gju=\\x0E\\t\\x0E\\twkqff.gjnfmpjlmbo@kvq`k#le#Fmdobmgle#Mlqwk#@bqlojmbprvbqf#hjolnfwqfp-bggFufmwOjpwfmfqgjpwjm`w#eqln#wkf`lnnlmoz#hmltm#bpSklmfwj`#Boskbafwgf`obqfg#wkbw#wkf`lmwqloofg#az#wkfAfmibnjm#Eqbmhojmqlof.sobzjmd#dbnfwkf#Vmjufqpjwz#lejm#Tfpwfqm#Fvqlsfsfqplmbo#`lnsvwfqSqlif`w#Dvwfmafqdqfdbqgofpp#le#wkfkbp#affm#sqlslpfgwldfwkfq#tjwk#wkf=?,oj=?oj#`obpp>!jm#plnf#`lvmwqjfpnjm-ip!=?,p`qjsw=le#wkf#slsvobwjlmleej`jbo#obmdvbdf?jnd#pq`>!jnbdfp,jgfmwjejfg#az#wkfmbwvqbo#qfplvq`fp`obppjej`bwjlm#le`bm#af#`lmpjgfqfgrvbmwvn#nf`kbmj`pMfufqwkfofpp/#wkfnjoojlm#zfbqp#bdl?,algz=\\x0E\\t?,kwno=\\x0E\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@\\twbhf#bgubmwbdf#lebmg/#b``lqgjmd#wlbwwqjavwfg#wl#wkfNj`qlplew#Tjmgltpwkf#ejqpw#`fmwvqzvmgfq#wkf#`lmwqlogju#`obpp>!kfbgfqpklqwoz#bewfq#wkfmlwbaof#f{`fswjlmwfmp#le#wklvpbmgppfufqbo#gjeefqfmwbqlvmg#wkf#tlqog-qfb`kjmd#njojwbqzjplobwfg#eqln#wkflsslpjwjlm#wl#wkfwkf#Log#WfpwbnfmwBeqj`bm#Bnfqj`bmpjmpfqwfg#jmwl#wkfpfsbqbwf#eqln#wkfnfwqlslojwbm#bqfbnbhfp#jw#slppjaofb`hmltofgdfg#wkbwbqdvbaoz#wkf#nlpwwzsf>!wf{w,`pp!=\\twkf#JmwfqmbwjlmboB``lqgjmd#wl#wkf#sf>!wf{w,`pp!#,=\\t`ljm`jgf#tjwk#wkfwtl.wkjqgp#le#wkfGvqjmd#wkjp#wjnf/gvqjmd#wkf#sfqjlgbmmlvm`fg#wkbw#kfwkf#jmwfqmbwjlmbobmg#nlqf#qf`fmwozafojfufg#wkbw#wkf`lmp`jlvpmfpp#bmgelqnfqoz#hmltm#bppvqqlvmgfg#az#wkfejqpw#bssfbqfg#jml``bpjlmbooz#vpfgslpjwjlm9baplovwf8!#wbqdfw>!\\\\aobmh!#slpjwjlm9qfobwjuf8wf{w.bojdm9`fmwfq8ib{,ojap,irvfqz,2-ab`hdqlvmg.`lolq9 wzsf>!bssoj`bwjlm,bmdvbdf!#`lmwfmw>!?nfwb#kwws.frvju>!Sqjub`z#Sloj`z?,b=f+!&0@p`qjsw#pq`>$!#wbqdfw>!\\\\aobmh!=Lm#wkf#lwkfq#kbmg/-isd\\x7Fwkvna\\x7Fqjdkw\\x7F1?,gju=?gju#`obpp>!?gju#pwzof>!eolbw9mjmfwffmwk#`fmwvqz?,algz=\\x0E\\t?,kwno=\\x0E\\t?jnd#pq`>!kwws9,,p8wf{w.bojdm9`fmwfqelmw.tfjdkw9#alog8#B``lqgjmd#wl#wkf#gjeefqfm`f#afwtffm!#eqbnfalqgfq>!3!#!#pwzof>!slpjwjlm9ojmh#kqfe>!kwws9,,kwno7,ollpf-gwg!=\\tgvqjmd#wkjp#sfqjlg?,wg=?,wq=?,wbaof=`olpfoz#qfobwfg#wlelq#wkf#ejqpw#wjnf8elmw.tfjdkw9alog8jmsvw#wzsf>!wf{w!#?psbm#pwzof>!elmw.lmqfbgzpwbwf`kbmdf\\n?gju#`obpp>!`ofbqgl`vnfmw-ol`bwjlm-#Elq#f{bnsof/#wkf#b#tjgf#ubqjfwz#le#?\\\"GL@WZSF#kwno=\\x0E\\t?%maps8%maps8%maps8!=?b#kqfe>!kwws9,,pwzof>!eolbw9ofew8`lm`fqmfg#tjwk#wkf>kwws&0B&1E&1Ettt-jm#slsvobq#`vowvqfwzsf>!wf{w,`pp!#,=jw#jp#slppjaof#wl#Kbqubqg#Vmjufqpjwzwzofpkffw!#kqfe>!,wkf#nbjm#`kbqb`wfqL{elqg#Vmjufqpjwz##mbnf>!hfztlqgp!#`pwzof>!wf{w.bojdm9wkf#Vmjwfg#Hjmdglnefgfqbo#dlufqmnfmw?gju#pwzof>!nbqdjm#gfsfmgjmd#lm#wkf#gfp`qjswjlm#le#wkf?gju#`obpp>!kfbgfq-njm-ip!=?,p`qjsw=gfpwqv`wjlm#le#wkfpojdkwoz#gjeefqfmwjm#b``lqgbm`f#tjwkwfof`lnnvmj`bwjlmpjmgj`bwfp#wkbw#wkfpklqwoz#wkfqfbewfqfpsf`jbooz#jm#wkf#Fvqlsfbm#`lvmwqjfpKltfufq/#wkfqf#bqfpq`>!kwws9,,pwbwj`pvddfpwfg#wkbw#wkf!#pq`>!kwws9,,ttt-b#obqdf#mvnafq#le#Wfof`lnnvmj`bwjlmp!#qfo>!mleloolt!#wKloz#Qlnbm#Fnsfqlqbonlpw#f{`ovpjufoz!#alqgfq>!3!#bow>!Pf`qfwbqz#le#Pwbwf`vonjmbwjmd#jm#wkf@JB#Tlqog#Eb`wallhwkf#nlpw#jnslqwbmwbmmjufqpbqz#le#wkfpwzof>!ab`hdqlvmg.?oj=?fn=?b#kqfe>!,wkf#Bwobmwj`#L`fbmpwqj`woz#psfbhjmd/pklqwoz#afelqf#wkfgjeefqfmw#wzsfp#lewkf#Lwwlnbm#Fnsjqf=?jnd#pq`>!kwws9,,Bm#Jmwqlgv`wjlm#wl`lmpfrvfm`f#le#wkfgfsbqwvqf#eqln#wkf@lmefgfqbwf#Pwbwfpjmgjdfmlvp#sflsofpSql`ffgjmdp#le#wkfjmelqnbwjlm#lm#wkfwkflqjfp#kbuf#affmjmuloufnfmw#jm#wkfgjujgfg#jmwl#wkqffbgib`fmw#`lvmwqjfpjp#qfpslmpjaof#elqgjpplovwjlm#le#wkf`loobalqbwjlm#tjwktjgfoz#qfdbqgfg#bpkjp#`lmwfnslqbqjfpelvmgjmd#nfnafq#leGlnjmj`bm#Qfsvaoj`dfmfqbooz#b``fswfgwkf#slppjajojwz#lebqf#bopl#bubjobaofvmgfq#`lmpwqv`wjlmqfpwlqbwjlm#le#wkfwkf#dfmfqbo#svaoj`jp#bonlpw#fmwjqfozsbppfp#wkqlvdk#wkfkbp#affm#pvddfpwfg`lnsvwfq#bmg#ujgflDfqnbmj`#obmdvbdfp#b``lqgjmd#wl#wkf#gjeefqfmw#eqln#wkfpklqwoz#bewfqtbqgpkqfe>!kwwsp9,,ttt-qf`fmw#gfufolsnfmwAlbqg#le#Gjqf`wlqp?gju#`obpp>!pfbq`k\\x7F#?b#kqfe>!kwws9,,Jm#sbqwj`vobq/#wkfNvowjsof#ellwmlwfplq#lwkfq#pvapwbm`fwklvpbmgp#le#zfbqpwqbmpobwjlm#le#wkf?,gju=\\x0E\\t?,gju=\\x0E\\t\\x0E\\t?b#kqfe>!jmgf{-skstbp#fpwbaojpkfg#jmnjm-ip!=?,p`qjsw=\\tsbqwj`jsbwf#jm#wkfb#pwqlmd#jmeovfm`fpwzof>!nbqdjm.wls9qfsqfpfmwfg#az#wkfdqbgvbwfg#eqln#wkfWqbgjwjlmbooz/#wkfFofnfmw+!p`qjsw!*8Kltfufq/#pjm`f#wkf,gju=\\t?,gju=\\t?gju#ofew8#nbqdjm.ofew9sqlwf`wjlm#bdbjmpw38#ufqwj`bo.bojdm9Vmelqwvmbwfoz/#wkfwzsf>!jnbdf,{.j`lm,gju=\\t?gju#`obpp>!#`obpp>!`ofbqej{!=?gju#`obpp>!ellwfq\\n\\n?,gju=\\t\\n\\n?,gju=\\twkf#nlwjlm#sj`wvqf<}=f<W<_<\\\\=l=m<V<T<]=f<W<_<\\\\=l=m<V<T<H<Y<X<Y=l<\\\\=j<T<T<Q<Y=m<V<R<W=`<V<R=m<R<R<]=e<Y<Q<T<Y=m<R<R<]=e<Y<Q<T=c<S=l<R<_=l<\\\\<P<P=g<r=n<S=l<\\\\<^<T=n=`<]<Y=m<S<W<\\\\=n<Q<R<P<\\\\=n<Y=l<T<\\\\<W=g<S<R<[<^<R<W=c<Y=n<S<R=m<W<Y<X<Q<T<Y=l<\\\\<[<W<T=k<Q=g=i<S=l<R<X=o<V=j<T<T<S=l<R<_=l<\\\\<P<P<\\\\<S<R<W<Q<R=m=n=`=b<Q<\\\\=i<R<X<T=n=m=c<T<[<]=l<\\\\<Q<Q<R<Y<Q<\\\\=m<Y<W<Y<Q<T=c<T<[<P<Y<Q<Y<Q<T=c<V<\\\\=n<Y<_<R=l<T<T<|<W<Y<V=m<\\\\<Q<X=l\\fHJ\\fIa\\fHY\\fHR\\fH\\\\\\fHR\\fHB\\fId\\fHD\\fIm\\fHi\\fH^\\fHF\\fIa\\fH\\\\\\fHJ\\fHR\\fHD\\fHA\\fHR\\fH\\\\\\fHH\\fIl\\fHC\\fHi\\fHD\\fIm\\fHJ\\fIk\\fHZ\\fHU\\fHS\\fHD\\fIa\\fHJ\\fIl\\fHk\\fHn\\fHM\\fHS\\fHC\\fHR\\fHJ\\fHS\\fH^\\fIa\\fH^\\fIl\\fHi\\fHK\\fHS\\fHy\\fHR\\fH\\\\\\fHY\\fIl\\fHM\\fHS\\fHC\\fIg\\fHv\\fHS\\fHs\\fIa\\fHL\\fIk\\fHT\\fHB\\fHR\\fHv\\fHR\\fH\\\\\\fHp\\fHn\\fHy\\fIa\\fHZ\\fHD\\fHJ\\fIm\\fHD\\fHS\\fHC\\fHR\\fHF\\fIa\\fH\\\\\\fHC\\fIg\\fH{\\fHi\\fHD\\fIm\\fHT\\fHR\\fH\\\\\\fH}\\fHD\\fH^\\fHR\\fHk\\fHD\\fHF\\fHR\\fH\\\\\\fIa\\fHs\\fIl\\fHZ\\fH\\\\\\fIa\\fHH\\fIg\\fHn\\fH^\\fIg\\fHy\\fHT\\fHA\\fHR\\fHG\\fHP\\fIa\\fH^\\fId\\fHZ\\fHZ\\fH\\\\\\fIa\\fHH\\fIk\\fHn\\fHF\\fIa\\fH\\\\\\fHJ\\fIk\\fHZ\\fHF\\fIa\\fH^\\fIk\\fHC\\fH\\\\\\fHy\\fIk\\fHn\\fHJ\\fIa\\fH\\\\\\fHT\\fIa\\fHI\\fHS\\fHH\\fHS\\fHe\\fHH\\fIa\\fHF\\fHR\\fHJ\\fHe\\fHD\\fIa\\fHU\\fIk\\fHn\\fHv\\fHS\\fHs\\fIa\\fHL\\fHR\\fHC\\fHR\\fHH\\fIa\\fH\\\\\\fHR\\fHp\\fIa\\fHC\\fHR\\fHJ\\fHR\\fHF\\fIm\\fH\\\\\\fHR\\fHD\\fIk\\fHp\\fIg\\fHM\\fHP\\fIk\\fHn\\fHi\\fHD\\fIm\\fHY\\fHR\\fHJ\\fHZ\\fIa\\fH\\\\\\fIk\\fHO\\fIl\\fHZ\\fHS\\fHy\\fIa\\fH[\\fHR\\fHT\\fH\\\\\\fHy\\fHR\\fH\\\\\\fIl\\fHT\\fHn\\fH{\\fIa\\fH\\\\\\fHU\\fHF\\fH\\\\\\fHS\\fHO\\fHR\\fHB\\fH@\\fIa\\fH\\\\\\fHR\\fHn\\fHM\\fH@\\fHv\\fIa\\fHv\\fIg\\fHn\\fHe\\fHF\\fH^\\fH@\\fIa\\fHK\\fHB\\fHn\\fHH\\fIa\\fH\\\\\\fIl\\fHT\\fHn\\fHF\\fH\\\\\\fIa\\fHy\\fHe\\fHB\\fIa\\fHB\\fIl\\fHJ\\fHB\\fHR\\fHK\\fIa\\fHC\\fHB\\fHT\\fHU\\fHR\\fHC\\fHH\\fHR\\fHZ\\fH@\\fIa\\fHJ\\fIg\\fHn\\fHB\\fIl\\fHM\\fHS\\fHC\\fHR\\fHj\\fHd\\fHF\\fIl\\fHc\\fH^\\fHB\\fIg\\fH@\\fHR\\fHk\\fH^\\fHT\\fHn\\fHz\\fIa\\fHC\\fHR\\fHj\\fHF\\fH\\\\\\fIk\\fHZ\\fHD\\fHi\\fHD\\fIm\\fH@\\fHn\\fHK\\fH@\\fHR\\fHp\\fHP\\fHR\\fH\\\\\\fHD\\fHY\\fIl\\fHD\\fHH\\fHB\\fHF\\fIa\\fH\\\\\\fHB\\fIm\\fHz\\fHF\\fIa\\fH\\\\\\fHZ\\fIa\\fHD\\fHF\\fH\\\\\\fHS\\fHY\\fHR\\fH\\\\\\fHD\\fIm\\fHy\\fHT\\fHR\\fHD\\fHT\\fHB\\fH\\\\\\fIa\\fHI\\fHD\\fHj\\fHC\\fIg\\fHp\\fHS\\fHH\\fHT\\fIg\\fHB\\fHY\\fHR\\fH\\\\4K5h5i4X4K4]5o4K4F4K5h5i5j4F4C5f4K4F4K5h5o5i4D5f5d4F4]4K5h5i4X4K5k4C4K4F4U4C4C4K5h4^5d4K4]4U4C4C4K5h4]4C5d4C4K5h4I4_5h4K5i5f4E4K5h5m5d4F5d4X5d4D4K5h5i4_4K4D5n4K4F4K5h5i4U5h5d5i4K4F4K5h5i4_5h4_5h4K4F4K5h4@4]4K5m5f5o4_4K5h4K4_5h4K5i5f4E4K5h4K4F4Y4K5h4K4Fhfztlqgp!#`lmwfmw>!t0-lqd,2:::,{kwno!=?b#wbqdfw>!\\\\aobmh!#wf{w,kwno8#`kbqpfw>!#wbqdfw>!\\\\aobmh!=?wbaof#`foosbggjmd>!bvwl`lnsofwf>!lee!#wf{w.bojdm9#`fmwfq8wl#obpw#ufqpjlm#az#ab`hdqlvmg.`lolq9# !#kqfe>!kwws9,,ttt-,gju=?,gju=?gju#jg>?b#kqfe>! !#`obpp>!!=?jnd#pq`>!kwws9,,`qjsw!#pq`>!kwws9,,\\t?p`qjsw#obmdvbdf>!,,FM!#!kwws9,,ttt-tfm`lgfVQJ@lnslmfmw+!#kqfe>!ibubp`qjsw9?gju#`obpp>!`lmwfmwgl`vnfmw-tqjwf+$?p`slpjwjlm9#baplovwf8p`qjsw#pq`>!kwws9,,#pwzof>!nbqdjm.wls9-njm-ip!=?,p`qjsw=\\t?,gju=\\t?gju#`obpp>!t0-lqd,2:::,{kwno!#\\t\\x0E\\t?,algz=\\x0E\\t?,kwno=gjpwjm`wjlm#afwtffm,!#wbqdfw>!\\\\aobmh!=?ojmh#kqfe>!kwws9,,fm`lgjmd>!vwe.;!<=\\tt-bggFufmwOjpwfmfq<b`wjlm>!kwws9,,ttt-j`lm!#kqfe>!kwws9,,#pwzof>!ab`hdqlvmg9wzsf>!wf{w,`pp!#,=\\tnfwb#sqlsfqwz>!ld9w?jmsvw#wzsf>!wf{w!##pwzof>!wf{w.bojdm9wkf#gfufolsnfmw#le#wzofpkffw!#wzsf>!wfkwno8#`kbqpfw>vwe.;jp#`lmpjgfqfg#wl#afwbaof#tjgwk>!233&!#Jm#bggjwjlm#wl#wkf#`lmwqjavwfg#wl#wkf#gjeefqfm`fp#afwtffmgfufolsnfmw#le#wkf#Jw#jp#jnslqwbmw#wl#?,p`qjsw=\\t\\t?p`qjsw##pwzof>!elmw.pjyf92=?,psbm=?psbm#jg>daOjaqbqz#le#@lmdqfpp?jnd#pq`>!kwws9,,jnFmdojpk#wqbmpobwjlmB`bgfnz#le#P`jfm`fpgju#pwzof>!gjpsobz9`lmpwqv`wjlm#le#wkf-dfwFofnfmwAzJg+jg*jm#`lmivm`wjlm#tjwkFofnfmw+$p`qjsw$*8#?nfwb#sqlsfqwz>!ld9<}=f<W<_<\\\\=l=m<V<T\\t#wzsf>!wf{w!#mbnf>!=Sqjub`z#Sloj`z?,b=bgnjmjpwfqfg#az#wkffmbaofPjmdofQfrvfpwpwzof>%rvlw8nbqdjm9?,gju=?,gju=?,gju=?=?jnd#pq`>!kwws9,,j#pwzof>%rvlw8eolbw9qfefqqfg#wl#bp#wkf#wlwbo#slsvobwjlm#lejm#Tbpkjmdwlm/#G-@-#pwzof>!ab`hdqlvmg.bnlmd#lwkfq#wkjmdp/lqdbmjybwjlm#le#wkfsbqwj`jsbwfg#jm#wkfwkf#jmwqlgv`wjlm#lejgfmwjejfg#tjwk#wkfej`wjlmbo#`kbqb`wfq#L{elqg#Vmjufqpjwz#njpvmgfqpwbmgjmd#leWkfqf#bqf/#kltfufq/pwzofpkffw!#kqfe>!,@lovnajb#Vmjufqpjwzf{sbmgfg#wl#jm`ovgfvpvbooz#qfefqqfg#wljmgj`bwjmd#wkbw#wkfkbuf#pvddfpwfg#wkbwbeejojbwfg#tjwk#wkf`lqqfobwjlm#afwtffmmvnafq#le#gjeefqfmw=?,wg=?,wq=?,wbaof=Qfsvaoj`#le#Jqfobmg\\t?,p`qjsw=\\t?p`qjsw#vmgfq#wkf#jmeovfm`f`lmwqjavwjlm#wl#wkfLeej`jbo#tfapjwf#lekfbgrvbqwfqp#le#wkf`fmwfqfg#bqlvmg#wkfjnsoj`bwjlmp#le#wkfkbuf#affm#gfufolsfgEfgfqbo#Qfsvaoj`#leaf`bnf#jm`qfbpjmdoz`lmwjmvbwjlm#le#wkfMlwf/#kltfufq/#wkbwpjnjobq#wl#wkbw#le#`bsbajojwjfp#le#wkfb``lqgbm`f#tjwk#wkfsbqwj`jsbmwp#jm#wkfevqwkfq#gfufolsnfmwvmgfq#wkf#gjqf`wjlmjp#lewfm#`lmpjgfqfgkjp#zlvmdfq#aqlwkfq?,wg=?,wq=?,wbaof=?b#kwws.frvju>![.VB.skzpj`bo#sqlsfqwjfple#Aqjwjpk#@lovnajbkbp#affm#`qjwj`jyfg+tjwk#wkf#f{`fswjlmrvfpwjlmp#balvw#wkfsbppjmd#wkqlvdk#wkf3!#`foosbggjmd>!3!#wklvpbmgp#le#sflsofqfgjqf`wp#kfqf-#Elqkbuf#`kjogqfm#vmgfq&0F&0@,p`qjsw&0F!**8?b#kqfe>!kwws9,,ttt-?oj=?b#kqfe>!kwws9,,pjwf\\\\mbnf!#`lmwfmw>!wf{w.gf`lqbwjlm9mlmfpwzof>!gjpsobz9#mlmf?nfwb#kwws.frvju>![.mft#Gbwf+*-dfwWjnf+*#wzsf>!jnbdf,{.j`lm!?,psbm=?psbm#`obpp>!obmdvbdf>!ibubp`qjswtjmglt-ol`bwjlm-kqfe?b#kqfe>!ibubp`qjsw9..=\\x0E\\t?p`qjsw#wzsf>!w?b#kqfe>$kwws9,,ttt-klqw`vw#j`lm!#kqfe>!?,gju=\\x0E\\t?gju#`obpp>!?p`qjsw#pq`>!kwws9,,!#qfo>!pwzofpkffw!#w?,gju=\\t?p`qjsw#wzsf>,b=#?b#kqfe>!kwws9,,#booltWqbmpsbqfm`z>![.VB.@lnsbwjaof!#`lmqfobwjlmpkjs#afwtffm\\t?,p`qjsw=\\x0E\\t?p`qjsw#?,b=?,oj=?,vo=?,gju=bppl`jbwfg#tjwk#wkf#sqldqbnnjmd#obmdvbdf?,b=?b#kqfe>!kwws9,,?,b=?,oj=?oj#`obpp>!elqn#b`wjlm>!kwws9,,?gju#pwzof>!gjpsobz9wzsf>!wf{w!#mbnf>!r!?wbaof#tjgwk>!233&!#ab`hdqlvmg.slpjwjlm9!#alqgfq>!3!#tjgwk>!qfo>!pklqw`vw#j`lm!#k5=?vo=?oj=?b#kqfe>!##?nfwb#kwws.frvju>!`pp!#nfgjb>!p`qffm!#qfpslmpjaof#elq#wkf#!#wzsf>!bssoj`bwjlm,!#pwzof>!ab`hdqlvmg.kwno8#`kbqpfw>vwe.;!#booltwqbmpsbqfm`z>!pwzofpkffw!#wzsf>!wf\\x0E\\t?nfwb#kwws.frvju>!=?,psbm=?psbm#`obpp>!3!#`foopsb`jmd>!3!=8\\t?,p`qjsw=\\t?p`qjsw#plnfwjnfp#`boofg#wkfglfp#mlw#mf`fppbqjozElq#nlqf#jmelqnbwjlmbw#wkf#afdjmmjmd#le#?\\\"GL@WZSF#kwno=?kwnosbqwj`vobqoz#jm#wkf#wzsf>!kjggfm!#mbnf>!ibubp`qjsw9uljg+3*8!feef`wjufmfpp#le#wkf#bvwl`lnsofwf>!lee!#dfmfqbooz#`lmpjgfqfg=?jmsvw#wzsf>!wf{w!#!=?,p`qjsw=\\x0E\\t?p`qjswwkqlvdklvw#wkf#tlqog`lnnlm#njp`lm`fswjlmbppl`jbwjlm#tjwk#wkf?,gju=\\t?,gju=\\t?gju#`gvqjmd#kjp#ojefwjnf/`lqqfpslmgjmd#wl#wkfwzsf>!jnbdf,{.j`lm!#bm#jm`qfbpjmd#mvnafqgjsolnbwj`#qfobwjlmpbqf#lewfm#`lmpjgfqfgnfwb#`kbqpfw>!vwe.;!#?jmsvw#wzsf>!wf{w!#f{bnsofp#jm`ovgf#wkf!=?jnd#pq`>!kwws9,,jsbqwj`jsbwjlm#jm#wkfwkf#fpwbaojpknfmw#le\\t?,gju=\\t?gju#`obpp>!%bns8maps8%bns8maps8wl#gfwfqnjmf#tkfwkfqrvjwf#gjeefqfmw#eqlnnbqhfg#wkf#afdjmmjmdgjpwbm`f#afwtffm#wkf`lmwqjavwjlmp#wl#wkf`lmeoj`w#afwtffm#wkftjgfoz#`lmpjgfqfg#wltbp#lmf#le#wkf#ejqpwtjwk#ubqzjmd#gfdqffpkbuf#psf`vobwfg#wkbw+gl`vnfmw-dfwFofnfmwsbqwj`jsbwjmd#jm#wkflqjdjmbooz#gfufolsfgfwb#`kbqpfw>!vwe.;!=#wzsf>!wf{w,`pp!#,=\\tjmwfq`kbmdfbaoz#tjwknlqf#`olpfoz#qfobwfgpl`jbo#bmg#slojwj`bowkbw#tlvog#lwkfqtjpfsfqsfmgj`vobq#wl#wkfpwzof#wzsf>!wf{w,`ppwzsf>!pvanjw!#mbnf>!ebnjojfp#qfpjgjmd#jmgfufolsjmd#`lvmwqjfp`lnsvwfq#sqldqbnnjmdf`lmlnj`#gfufolsnfmwgfwfqnjmbwjlm#le#wkfelq#nlqf#jmelqnbwjlmlm#pfufqbo#l``bpjlmpslqwvdv/Fp#+Fvqlsfv*<O<V=l<\\\\={<Q=m=`<V<\\\\=o<V=l<\\\\={<Q=m=`<V<\\\\<L<R=m=m<T<U=m<V<R<U<P<\\\\=n<Y=l<T<\\\\<W<R<^<T<Q=h<R=l<P<\\\\=j<T<T=o<S=l<\\\\<^<W<Y<Q<T=c<Q<Y<R<]=i<R<X<T<P<R<T<Q=h<R=l<P<\\\\=j<T=c<t<Q=h<R=l<P<\\\\=j<T=c<L<Y=m<S=o<]<W<T<V<T<V<R<W<T=k<Y=m=n<^<R<T<Q=h<R=l<P<\\\\=j<T=b=n<Y=l=l<T=n<R=l<T<T<X<R=m=n<\\\\=n<R=k<Q<R4K5h5i4F5d4K4@4C5d5j4K5h4K4X4F4]4K5o4K4F4K5h4K5n4F4]4K4A4K4Fkwno8#`kbqpfw>VWE.;!#pfwWjnflvw+evm`wjlm+*gjpsobz9jmojmf.aol`h8?jmsvw#wzsf>!pvanjw!#wzsf#>#$wf{w,ibubp`qj?jnd#pq`>!kwws9,,ttt-!#!kwws9,,ttt-t0-lqd,pklqw`vw#j`lm!#kqfe>!!#bvwl`lnsofwf>!lee!#?,b=?,gju=?gju#`obpp>?,b=?,oj=\\t?oj#`obpp>!`pp!#wzsf>!wf{w,`pp!#?elqn#b`wjlm>!kwws9,,{w,`pp!#kqfe>!kwws9,,ojmh#qfo>!bowfqmbwf!#\\x0E\\t?p`qjsw#wzsf>!wf{w,#lm`oj`h>!ibubp`qjsw9+mft#Gbwf*-dfwWjnf+*~kfjdkw>!2!#tjgwk>!2!#Sflsof$p#Qfsvaoj`#le##?b#kqfe>!kwws9,,ttt-wf{w.gf`lqbwjlm9vmgfqwkf#afdjmmjmd#le#wkf#?,gju=\\t?,gju=\\t?,gju=\\tfpwbaojpknfmw#le#wkf#?,gju=?,gju=?,gju=?,g ujftslqwxnjm.kfjdkw9\\t?p`qjsw#pq`>!kwws9,,lswjlm=?lswjlm#ubovf>lewfm#qfefqqfg#wl#bp#,lswjlm=\\t?lswjlm#ubov?\\\"GL@WZSF#kwno=\\t?\\\"..XJmwfqmbwjlmbo#Bjqslqw=\\t?b#kqfe>!kwws9,,ttt?,b=?b#kqfe>!kwws9,,t\\fTL\\fT^\\fTE\\fT^\\fUh\\fT{\\fTN\\roI\\ro|\\roL\\ro{\\roO\\rov\\rot\\nAO\\x05Gx\\bTA\\nzk#+\\x0BUm\\x05Gx*\\fHD\\fHS\\fH\\\\\\fIa\\fHJ\\fIk\\fHZ\\fHM\\fHR\\fHe\\fHD\\fH^\\fIg\\fHM\\fHy\\fIa\\fH[\\fIk\\fHH\\fIa\\fH\\\\\\fHp\\fHR\\fHD\\fHy\\fHR\\fH\\\\\\fIl\\fHT\\fHn\\fH@\\fHn\\fHK\\fHS\\fHH\\fHT\\fIa\\fHI\\fHR\\fHF\\fHD\\fHR\\fHT\\fIa\\fHY\\fIl\\fHy\\fHR\\fH\\\\\\fHT\\fHn\\fHT\\fIa\\fHy\\fH\\\\\\fHO\\fHT\\fHR\\fHB\\fH{\\fIa\\fH\\\\\\fIl\\fHv\\fHS\\fHs\\fIa\\fHL\\fIg\\fHn\\fHY\\fHS\\fHp\\fIa\\fHr\\fHR\\fHD\\fHi\\fHB\\fIk\\fH\\\\\\fHS\\fHy\\fHR\\fHY\\fHS\\fHA\\fHS\\fHD\\fIa\\fHD\\fH{\\fHR\\fHM\\fHS\\fHC\\fHR\\fHm\\fHy\\fIa\\fHC\\fIg\\fHn\\fHy\\fHS\\fHT\\fIm\\fH\\\\\\fHy\\fIa\\fH[\\fHR\\fHF\\fHU\\fIm\\fHm\\fHv\\fHH\\fIl\\fHF\\fIa\\fH\\\\\\fH@\\fHn\\fHK\\fHD\\fHs\\fHS\\fHF\\fIa\\fHF\\fHO\\fIl\\fHy\\fIa\\fH\\\\\\fHS\\fHy\\fIk\\fHs\\fHF\\fIa\\fH\\\\\\fHR\\fH\\\\\\fHn\\fHA\\fHF\\fIa\\fH\\\\\\fHR\\fHF\\fIa\\fHH\\fHB\\fHR\\fH^\\fHS\\fHy\\fIg\\fHn\\fH\\\\\\fHG\\fHP\\fIa\\fHH\\fHR\\fH\\\\\\fHD\\fHS\\fH\\\\\\fIa\\fHB\\fHR\\fHO\\fH^\\fHS\\fHB\\fHS\\fHs\\fIk\\fHMgfp`qjswjlm!#`lmwfmw>!gl`vnfmw-ol`bwjlm-sqlw-dfwFofnfmwpAzWbdMbnf+?\\\"GL@WZSF#kwno=\\t?kwno#?nfwb#`kbqpfw>!vwe.;!=9vqo!#`lmwfmw>!kwws9,,-`pp!#qfo>!pwzofpkffw!pwzof#wzsf>!wf{w,`pp!=wzsf>!wf{w,`pp!#kqfe>!t0-lqd,2:::,{kwno!#{nowzsf>!wf{w,ibubp`qjsw!#nfwklg>!dfw!#b`wjlm>!ojmh#qfo>!pwzofpkffw!##>#gl`vnfmw-dfwFofnfmwwzsf>!jnbdf,{.j`lm!#,=`foosbggjmd>!3!#`foops-`pp!#wzsf>!wf{w,`pp!#?,b=?,oj=?oj=?b#kqfe>!!#tjgwk>!2!#kfjdkw>!2!!=?b#kqfe>!kwws9,,ttt-pwzof>!gjpsobz9mlmf8!=bowfqmbwf!#wzsf>!bssoj.,,T0@,,GWG#[KWNO#2-3#foopsb`jmd>!3!#`foosbg#wzsf>!kjggfm!#ubovf>!,b=%maps8?psbm#qlof>!p\\t?jmsvw#wzsf>!kjggfm!#obmdvbdf>!IbubP`qjsw!##gl`vnfmw-dfwFofnfmwpAd>!3!#`foopsb`jmd>!3!#zsf>!wf{w,`pp!#nfgjb>!wzsf>$wf{w,ibubp`qjsw$tjwk#wkf#f{`fswjlm#le#zsf>!wf{w,`pp!#qfo>!pw#kfjdkw>!2!#tjgwk>!2!#>$(fm`lgfVQJ@lnslmfmw+?ojmh#qfo>!bowfqmbwf!#\\talgz/#wq/#jmsvw/#wf{wnfwb#mbnf>!qlalwp!#`lmnfwklg>!slpw!#b`wjlm>!=\\t?b#kqfe>!kwws9,,ttt-`pp!#qfo>!pwzofpkffw!#?,gju=?,gju=?gju#`obppobmdvbdf>!ibubp`qjsw!=bqjb.kjggfm>!wqvf!=.[?qjsw!#wzsf>!wf{w,ibubpo>38~*+*8\\t+evm`wjlm+*xab`hdqlvmg.jnbdf9#vqo+,b=?,oj=?oj=?b#kqfe>!k\\n\\n?oj=?b#kqfe>!kwws9,,bwlq!#bqjb.kjggfm>!wqv=#?b#kqfe>!kwws9,,ttt-obmdvbdf>!ibubp`qjsw!#,lswjlm=\\t?lswjlm#ubovf,gju=?,gju=?gju#`obpp>qbwlq!#bqjb.kjggfm>!wqf>+mft#Gbwf*-dfwWjnf+*slqwvdv/Fp#+gl#Aqbpjo*<R=l<_<\\\\<Q<T<[<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n=`<R<]=l<\\\\<[<R<^<\\\\<Q<T=c=l<Y<_<T=m=n=l<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n<T<R<]=c<[<\\\\=n<Y<W=`<Q<\\\\?\\\"GL@WZSF#kwno#SVAOJ@#!mw.Wzsf!#`lmwfmw>!wf{w,?nfwb#kwws.frvju>!@lmwfqbmpjwjlmbo,,FM!#!kwws9?kwno#{nomp>!kwws9,,ttt.,,T0@,,GWG#[KWNO#2-3#WGWG,{kwno2.wqbmpjwjlmbo,,ttt-t0-lqd,WQ,{kwno2,sf#>#$wf{w,ibubp`qjsw$8?nfwb#mbnf>!gfp`qjswjlmsbqfmwMlgf-jmpfqwAfelqf?jmsvw#wzsf>!kjggfm!#mbip!#wzsf>!wf{w,ibubp`qj+gl`vnfmw*-qfbgz+evm`wjp`qjsw#wzsf>!wf{w,ibubpjnbdf!#`lmwfmw>!kwws9,,VB.@lnsbwjaof!#`lmwfmw>wno8#`kbqpfw>vwe.;!#,=\\tojmh#qfo>!pklqw`vw#j`lm?ojmh#qfo>!pwzofpkffw!#?,p`qjsw=\\t?p`qjsw#wzsf>>#gl`vnfmw-`qfbwfFofnfm?b#wbqdfw>!\\\\aobmh!#kqfe>#gl`vnfmw-dfwFofnfmwpAjmsvw#wzsf>!wf{w!#mbnf>b-wzsf#>#$wf{w,ibubp`qjmsvw#wzsf>!kjggfm!#mbnfkwno8#`kbqpfw>vwe.;!#,=gwg!=\\t?kwno#{nomp>!kwws.,,T0@,,GWG#KWNO#7-32#WfmwpAzWbdMbnf+$p`qjsw$*jmsvw#wzsf>!kjggfm!#mbn?p`qjsw#wzsf>!wf{w,ibubp!#pwzof>!gjpsobz9mlmf8!=gl`vnfmw-dfwFofnfmwAzJg+>gl`vnfmw-`qfbwfFofnfmw+$#wzsf>$wf{w,ibubp`qjsw$jmsvw#wzsf>!wf{w!#mbnf>!g-dfwFofnfmwpAzWbdMbnf+pmj`bo!#kqfe>!kwws9,,ttt-@,,GWG#KWNO#7-32#Wqbmpjw?pwzof#wzsf>!wf{w,`pp!=\\t\\t?pwzof#wzsf>!wf{w,`pp!=jlmbo-gwg!=\\t?kwno#{nomp>kwws.frvju>!@lmwfmw.Wzsfgjmd>!3!#`foopsb`jmd>!3!kwno8#`kbqpfw>vwe.;!#,=\\t#pwzof>!gjpsobz9mlmf8!=??oj=?b#kqfe>!kwws9,,ttt-#wzsf>$wf{w,ibubp`qjsw$=<X<Y=c=n<Y<W=`<Q<R=m=n<T=m<R<R=n<^<Y=n=m=n<^<T<T<S=l<R<T<[<^<R<X=m=n<^<\\\\<]<Y<[<R<S<\\\\=m<Q<R=m=n<T\\fHF\\fIm\\fHT\\fIa\\fHH\\fHS\\fHy\\fHR\\fHy\\fHR\\fHn\\fH{\\fIa\\fH\\\\\\fIk\\fHT\\fHe\\fHD\\fIa\\fHU\\fIg\\fHn\\fHD\\fIk\\fHY\\fHS\\fHK\\fHR\\fHD\\fHT\\fHA\\fHR\\fHG\\fHS\\fHy\\fIa\\fHT\\fHS\\fHn\\fH{\\fHT\\fIm\\fH\\\\\\fHy\\fIa\\fH[\\fHS\\fHH\\fHy\\fIe\\fHF\\fIl\\fH\\\\\\fHR\\fHk\\fHs\\fHY\\fHS\\fHp\\fIa\\fHr\\fHR\\fHF\\fHD\\fHy\\fHR\\fH\\\\\\fIa\\fH\\\\\\fHY\\fHR\\fHd\\fHT\\fHy\\fIa\\fH\\\\\\fHS\\fHC\\fHH\\fHR\", \"\\u06F7%\\u018C'T%\\x85'W%\\xD7%O%g%\\xA6&\\u0193%\\u01E5&>&*&'&^&\\x88\\u0178\\u0C3E&\\u01AD&\\u0192&)&^&%&'&\\x82&P&1&\\xB1&3&]&m&u&E&t&C&\\xCF&V&V&/&>&6&\\u0F76\\u177Co&p&@&E&M&P&x&@&F&e&\\xCC&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1\\u025E*\\u03EA\\u21F3&\\u1372&K&;&)&E&H&P&0&?&9&V&\\x81&-&v&a&,&E&)&?&=&'&'&B&\\u0D2E&\\u0503&\\u0316*&*8&%&%&&&%,)&\\x9A&>&\\x86&7&]&F&2&>&J&6&n&2&%&?&\\x8E&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%\\u053C\\x84(,(<&,&\\u03DA&\\u18C7&-&,(%&(&%&(\\u013B0&X&D&\\x81&j&'&J&(&.&B&3&Z&R&h&3&E&E&<\\xC6-\\u0360\\u1EF3&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&C\\u072C\\u2A25&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&\\u1E78\\xCC-&7&1&F&7&t&W&7&I&.&.&^&=\\u0F9C\\u19D3&8(>&/&/&\\u077B')'\\u1065')'%@/&0&%\\u043E\\u09C0*&*@&C\\u053D\\u05D4\\u0274\\u05EB4\\u0DD7\\u071A\\u04D16\\u0D84&/\\u0178\\u0303Z&*%\\u0246\\u03FF&\\u0134&1\\xA8\\u04B4\\u0174\", dictionarySizeBits, \"AAAAKKLLKKKKKJJIHHIHHGGFF\");\n    // typo:on\n    setData(dictionaryData, dictionarySizeBits);\n  }\n\n  /**\n   * @constructor\n   * @param {!Int8Array} data\n   * @struct\n   */\n  function InputStream(data) {\n    /** @type {!Int8Array} */\n    this.data = new Int8Array(0);\n    /** @type {number} */\n    this.offset = 0;\n    this.data = data;\n  }\n\n  /**\n   * @param {number} x\n   * @return {string}\n   */\n  function valueOf(x) {\n    return x.toString();\n  }\n\n  /**\n   * @param {!State} s\n   * @param {!Int8Array} dst\n   * @param {number} offset\n   * @param {number} length\n   * @return {number}\n   */\n  function readInput(s, dst, offset, length) {\n    if (s.input === null) {\n      return -1;\n    }\n    const /** @type {!InputStream} */ src = s.input;\n    const /** @type {number} */ end = Math.min(src.offset + length, src.data.length);\n    const /** @type {number} */ bytesRead = end - src.offset;\n    dst.set(src.data.subarray(src.offset, end), offset);\n    src.offset += bytesRead;\n    return bytesRead;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function closeInput(s) {\n    s.input = new InputStream(new Int8Array(0));\n  }\n  /**\n   * @param {string} src\n   * @return {!Int8Array}\n   */\n  function toUsAsciiBytes(src) {\n    const /** @type {number} */ n = src.length;\n    const /** @type {!Int8Array} */ result = new Int8Array(n);\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      result[i] = src.charCodeAt(i);\n    }\n    return result;\n  }\n  /**\n   * @param {string} src\n   * @return {!Int32Array}\n   */\n  function toUtf8Runes(src) {\n    const /** @type {number} */ n = src.length;\n    const /** @type {!Int32Array} */ result = new Int32Array(n);\n    for (let /** @type {number} */ i = 0; i < n; ++i) {\n      result[i] = src.charCodeAt(i);\n    }\n    return result;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} code\n   * @return {number}\n   */\n  function makeError(s, code) {\n    if (code >= 0) {\n      return code;\n    }\n    if (s.runningState >= 0) {\n      s.runningState = code;\n    }\n    throw new Error(\"Brotli error code: \" + code);\n  }\n\n/* GENERATED CODE END */\n\n  /** @typedef {!Int8Array} */\n  let ByteBuffer;\n\n  /**\n   * @param {!Int8Array} bytes\n   * @param {?Options=} options\n   * @return {!Int8Array}\n   */\n  function decode(bytes, options) {\n    let /** @type {!State} */ s = new State();\n    s.input = new InputStream(bytes);\n    initState(s);\n    if (options) {\n      let customDictionary =\n          /** @type {?Int8Array} */ (options[\"customDictionary\"]);\n      if (customDictionary) attachDictionaryChunk(s, customDictionary);\n    }\n    let /** @type {number} */ totalOutput = 0;\n    let /** @type {!Array<!Int8Array>} */ chunks = [];\n    while (true) {\n      let /** @type {!Int8Array} */ chunk = new Int8Array(16384);\n      chunks.push(chunk);\n      s.output = chunk;\n      s.outputOffset = 0;\n      s.outputLength = 16384;\n      s.outputUsed = 0;\n      decompress(s);\n      totalOutput += s.outputUsed;\n      if (s.outputUsed < 16384) break;\n    }\n    close(s);\n    closeInput(s);\n    let /** @type {!Int8Array} */ result = new Int8Array(totalOutput);\n    let /** @type {number} */ offset = 0;\n    for (let /** @type {number} */ i = 0; i < chunks.length; ++i) {\n      let /** @type {!Int8Array} */ chunk = chunks[i];\n      let /** @type {number} */ end = Math.min(totalOutput, offset + 16384);\n      let /** @type {number} */ len = end - offset;\n      if (len < 16384) {\n        result.set(chunk.subarray(0, len), offset);\n      } else {\n        result.set(chunk, offset);\n      }\n      offset += len;\n    }\n    return result;\n  }\n\n  return decode;\n};\n\n/**\n * @type {function(!Int8Array, ?Options=):!Int8Array}\n */\nexport let BrotliDecode = makeBrotliDecode();\n"
  },
  {
    "path": "js/decode.ts",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\ninterface BrotliDecodeOptions {\n  customDictionary: Int8Array|null;\n}\n\n/* GENERATED CODE BEGIN */\nconst MAX_HUFFMAN_TABLE_SIZE: Int32Array = Int32Array.from([256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, 854, 886, 920, 952, 984, 1016, 1048, 1080]);\nconst CODE_LENGTH_CODE_ORDER: Int32Array = Int32Array.from([1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15]);\nconst DISTANCE_SHORT_CODE_INDEX_OFFSET: Int32Array = Int32Array.from([0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3]);\nconst DISTANCE_SHORT_CODE_VALUE_OFFSET: Int32Array = Int32Array.from([0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3]);\nconst FIXED_TABLE: Int32Array = Int32Array.from([0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001, 0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005]);\nconst BLOCK_LENGTH_OFFSET: Int32Array = Int32Array.from([1, 5, 9, 13, 17, 25, 33, 41, 49, 65, 81, 97, 113, 145, 177, 209, 241, 305, 369, 497, 753, 1265, 2289, 4337, 8433, 16625]);\nconst BLOCK_LENGTH_N_BITS: Int32Array = Int32Array.from([2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 24]);\nconst INSERT_LENGTH_N_BITS: Int16Array = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0E, 0x18]);\nconst COPY_LENGTH_N_BITS: Int16Array = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x18]);\nconst CMD_LOOKUP = new Int16Array(2816);\n{\n  unpackCommandLookupTable(CMD_LOOKUP);\n}\nfunction log2floor(i: number): number {\n  let result: number = -1;\n  let step = 16;\n  let v: number = i;\n  while (step > 0) {\n    let next: number = v >> step;\n    if (next !== 0) {\n      result += step;\n      v = next;\n    }\n    step = step >> 1;\n  }\n  return result + v;\n}\nfunction calculateDistanceAlphabetSize(npostfix: number, ndirect: number, maxndistbits: number): number {\n  return 16 + ndirect + 2 * (maxndistbits << npostfix);\n}\nfunction calculateDistanceAlphabetLimit(s: State, maxDistance: number, npostfix: number, ndirect: number): number {\n  if (maxDistance < ndirect + (2 << npostfix)) {\n    return makeError(s, -23);\n  }\n  const offset: number = ((maxDistance - ndirect) >> npostfix) + 4;\n  const ndistbits: number = log2floor(offset) - 1;\n  const group: number = ((ndistbits - 1) << 1) | ((offset >> ndistbits) & 1);\n  return ((group - 1) << npostfix) + (1 << npostfix) + ndirect + 16;\n}\nfunction unpackCommandLookupTable(cmdLookup: Int16Array): void {\n  const insertLengthOffsets = new Int32Array(24);\n  const copyLengthOffsets = new Int32Array(24);\n  copyLengthOffsets[0] = 2;\n  for (let i = 0; i < 23; ++i) {\n    insertLengthOffsets[i + 1] = insertLengthOffsets[i] + (1 << INSERT_LENGTH_N_BITS[i]);\n    copyLengthOffsets[i + 1] = copyLengthOffsets[i] + (1 << COPY_LENGTH_N_BITS[i]);\n  }\n  for (let cmdCode = 0; cmdCode < 704; ++cmdCode) {\n    let rangeIdx: number = cmdCode >> 6;\n    let distanceContextOffset: number = -4;\n    if (rangeIdx >= 2) {\n      rangeIdx -= 2;\n      distanceContextOffset = 0;\n    }\n    const insertCode: number = (((0x29850 >> (rangeIdx * 2)) & 0x3) << 3) | ((cmdCode >> 3) & 7);\n    const copyCode: number = (((0x26244 >> (rangeIdx * 2)) & 0x3) << 3) | (cmdCode & 7);\n    const copyLengthOffset: number = copyLengthOffsets[copyCode];\n    const distanceContext: number = distanceContextOffset + Math.min(copyLengthOffset, 5) - 2;\n    const index: number = cmdCode * 4;\n    cmdLookup[index] = INSERT_LENGTH_N_BITS[insertCode] | (COPY_LENGTH_N_BITS[copyCode] << 8);\n    cmdLookup[index + 1] = insertLengthOffsets[insertCode];\n    cmdLookup[index + 2] = copyLengthOffsets[copyCode];\n    cmdLookup[index + 3] = distanceContext;\n  }\n}\nfunction decodeWindowBits(s: State): number {\n  const largeWindowEnabled: number = s.isLargeWindow;\n  s.isLargeWindow = 0;\n  if (s.bitOffset >= 16) {\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n  }\n  if (readFewBits(s, 1) === 0) {\n    return 16;\n  }\n  let n: number = readFewBits(s, 3);\n  if (n !== 0) {\n    return 17 + n;\n  }\n  n = readFewBits(s, 3);\n  if (n !== 0) {\n    if (n === 1) {\n      if (largeWindowEnabled === 0) {\n        return -1;\n      }\n      s.isLargeWindow = 1;\n      if (readFewBits(s, 1) === 1) {\n        return -1;\n      }\n      n = readFewBits(s, 6);\n      if (n < 10 || n > 30) {\n        return -1;\n      }\n      return n;\n    }\n    return 8 + n;\n  }\n  return 17;\n}\nfunction enableEagerOutput(s: State): number {\n  if (s.runningState !== 1) {\n    return makeError(s, -24);\n  }\n  s.isEager = 1;\n  return 0;\n}\nfunction enableLargeWindow(s: State): number {\n  if (s.runningState !== 1) {\n    return makeError(s, -24);\n  }\n  s.isLargeWindow = 1;\n  return 0;\n}\nfunction attachDictionaryChunk(s: State, data: Int8Array): number {\n  if (s.runningState !== 1) {\n    return makeError(s, -24);\n  }\n  if (s.cdNumChunks === 0) {\n    s.cdChunks = new Array(16);\n    s.cdChunkOffsets = new Int32Array(16);\n    s.cdBlockBits = -1;\n  }\n  if (s.cdNumChunks === 15) {\n    return makeError(s, -27);\n  }\n  s.cdChunks[s.cdNumChunks] = data;\n  s.cdNumChunks++;\n  s.cdTotalSize += data.length;\n  s.cdChunkOffsets[s.cdNumChunks] = s.cdTotalSize;\n  return 0;\n}\nfunction initState(s: State): number {\n  if (s.runningState !== 0) {\n    return makeError(s, -26);\n  }\n  s.blockTrees = new Int32Array(3091);\n  s.blockTrees[0] = 7;\n  s.distRbIdx = 3;\n  let result: number = calculateDistanceAlphabetLimit(s, 0x7FFFFFFC, 3, 120);\n  if (result < 0) {\n    return result;\n  }\n  const maxDistanceAlphabetLimit: number = result;\n  s.distExtraBits = new Int8Array(maxDistanceAlphabetLimit);\n  s.distOffset = new Int32Array(maxDistanceAlphabetLimit);\n  result = initBitReader(s);\n  if (result < 0) {\n    return result;\n  }\n  s.runningState = 1;\n  return 0;\n}\nfunction close(s: State): number {\n  if (s.runningState === 0) {\n    return makeError(s, -25);\n  }\n  if (s.runningState > 0) {\n    s.runningState = 11;\n  }\n  return 0;\n}\nfunction decodeVarLenUnsignedByte(s: State): number {\n  if (s.bitOffset >= 16) {\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n  }\n  if (readFewBits(s, 1) !== 0) {\n    const n: number = readFewBits(s, 3);\n    if (n === 0) {\n      return 1;\n    }\n    return readFewBits(s, n) + (1 << n);\n  }\n  return 0;\n}\nfunction decodeMetaBlockLength(s: State): number {\n  if (s.bitOffset >= 16) {\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n  }\n  s.inputEnd = readFewBits(s, 1);\n  s.metaBlockLength = 0;\n  s.isUncompressed = 0;\n  s.isMetadata = 0;\n  if ((s.inputEnd !== 0) && readFewBits(s, 1) !== 0) {\n    return 0;\n  }\n  const sizeNibbles: number = readFewBits(s, 2) + 4;\n  if (sizeNibbles === 7) {\n    s.isMetadata = 1;\n    if (readFewBits(s, 1) !== 0) {\n      return makeError(s, -6);\n    }\n    const sizeBytes: number = readFewBits(s, 2);\n    if (sizeBytes === 0) {\n      return 0;\n    }\n    for (let i = 0; i < sizeBytes; ++i) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const bits: number = readFewBits(s, 8);\n      if (bits === 0 && i + 1 === sizeBytes && sizeBytes > 1) {\n        return makeError(s, -8);\n      }\n      s.metaBlockLength += bits << (i * 8);\n    }\n  } else {\n    for (let i = 0; i < sizeNibbles; ++i) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      const bits: number = readFewBits(s, 4);\n      if (bits === 0 && i + 1 === sizeNibbles && sizeNibbles > 4) {\n        return makeError(s, -8);\n      }\n      s.metaBlockLength += bits << (i * 4);\n    }\n  }\n  s.metaBlockLength++;\n  if (s.inputEnd === 0) {\n    s.isUncompressed = readFewBits(s, 1);\n  }\n  return 0;\n}\nfunction readSymbol(tableGroup: Int32Array, tableIdx: number, s: State): number {\n  let offset: number = tableGroup[tableIdx];\n  const v: number = s.accumulator32 >>> s.bitOffset;\n  offset += v & 0xFF;\n  const bits: number = tableGroup[offset] >> 16;\n  const sym: number = tableGroup[offset] & 0xFFFF;\n  if (bits <= 8) {\n    s.bitOffset += bits;\n    return sym;\n  }\n  offset += sym;\n  const mask: number = (1 << bits) - 1;\n  offset += (v & mask) >>> 8;\n  s.bitOffset += (tableGroup[offset] >> 16) + 8;\n  return tableGroup[offset] & 0xFFFF;\n}\nfunction readBlockLength(tableGroup: Int32Array, tableIdx: number, s: State): number {\n  if (s.bitOffset >= 16) {\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n  }\n  const code: number = readSymbol(tableGroup, tableIdx, s);\n  const n: number = BLOCK_LENGTH_N_BITS[code];\n  if (s.bitOffset >= 16) {\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n  }\n  return BLOCK_LENGTH_OFFSET[code] + ((n <= 16) ? readFewBits(s, n) : readManyBits(s, n));\n}\nfunction moveToFront(v: Int32Array, index: number): void {\n  let i: number = index;\n  const value: number = v[i];\n  while (i > 0) {\n    v[i] = v[i - 1];\n    i--;\n  }\n  v[0] = value;\n}\nfunction inverseMoveToFrontTransform(v: Int8Array, vLen: number): void {\n  const mtf = new Int32Array(256);\n  for (let i = 0; i < 256; ++i) {\n    mtf[i] = i;\n  }\n  for (let i = 0; i < vLen; ++i) {\n    const index: number = v[i] & 0xFF;\n    v[i] = mtf[index];\n    if (index !== 0) {\n      moveToFront(mtf, index);\n    }\n  }\n}\nfunction readHuffmanCodeLengths(codeLengthCodeLengths: Int32Array, numSymbols: number, codeLengths: Int32Array, s: State): number {\n  let symbol = 0;\n  let prevCodeLen = 8;\n  let repeat = 0;\n  let repeatCodeLen = 0;\n  let space = 32768;\n  const table = new Int32Array(33);\n  const tableIdx: number = table.length - 1;\n  buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18);\n  while (symbol < numSymbols && space > 0) {\n    if (s.halfOffset > 2030) {\n      const result: number = readMoreInput(s);\n      if (result < 0) {\n        return result;\n      }\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const p: number = (s.accumulator32 >>> s.bitOffset) & 31;\n    s.bitOffset += table[p] >> 16;\n    const codeLen: number = table[p] & 0xFFFF;\n    if (codeLen < 16) {\n      repeat = 0;\n      codeLengths[symbol++] = codeLen;\n      if (codeLen !== 0) {\n        prevCodeLen = codeLen;\n        space -= 32768 >> codeLen;\n      }\n    } else {\n      const extraBits: number = codeLen - 14;\n      let newLen = 0;\n      if (codeLen === 16) {\n        newLen = prevCodeLen;\n      }\n      if (repeatCodeLen !== newLen) {\n        repeat = 0;\n        repeatCodeLen = newLen;\n      }\n      const oldRepeat: number = repeat;\n      if (repeat > 0) {\n        repeat -= 2;\n        repeat = repeat << extraBits;\n      }\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      repeat += readFewBits(s, extraBits) + 3;\n      const repeatDelta: number = repeat - oldRepeat;\n      if (symbol + repeatDelta > numSymbols) {\n        return makeError(s, -2);\n      }\n      for (let i = 0; i < repeatDelta; ++i) {\n        codeLengths[symbol++] = repeatCodeLen;\n      }\n      if (repeatCodeLen !== 0) {\n        space -= repeatDelta << (15 - repeatCodeLen);\n      }\n    }\n  }\n  if (space !== 0) {\n    return makeError(s, -18);\n  }\n  codeLengths.fill(0, symbol, numSymbols);\n  return 0;\n}\nfunction checkDupes(s: State, symbols: Int32Array, length: number): number {\n  for (let i = 0; i < length - 1; ++i) {\n    for (let j: number = i + 1; j < length; ++j) {\n      if (symbols[i] === symbols[j]) {\n        return makeError(s, -7);\n      }\n    }\n  }\n  return 0;\n}\nfunction readSimpleHuffmanCode(alphabetSizeMax: number, alphabetSizeLimit: number, tableGroup: Int32Array, tableIdx: number, s: State): number {\n  const codeLengths = new Int32Array(alphabetSizeLimit);\n  const symbols = new Int32Array(4);\n  const maxBits: number = 1 + log2floor(alphabetSizeMax - 1);\n  const numSymbols: number = readFewBits(s, 2) + 1;\n  for (let i = 0; i < numSymbols; ++i) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const symbol: number = readFewBits(s, maxBits);\n    if (symbol >= alphabetSizeLimit) {\n      return makeError(s, -15);\n    }\n    symbols[i] = symbol;\n  }\n  const result: number = checkDupes(s, symbols, numSymbols);\n  if (result < 0) {\n    return result;\n  }\n  let histogramId: number = numSymbols;\n  if (numSymbols === 4) {\n    histogramId += readFewBits(s, 1);\n  }\n  switch(histogramId) {\n    case 1:\n      codeLengths[symbols[0]] = 1;\n      break;\n    case 2:\n      codeLengths[symbols[0]] = 1;\n      codeLengths[symbols[1]] = 1;\n      break;\n    case 3:\n      codeLengths[symbols[0]] = 1;\n      codeLengths[symbols[1]] = 2;\n      codeLengths[symbols[2]] = 2;\n      break;\n    case 4:\n      codeLengths[symbols[0]] = 2;\n      codeLengths[symbols[1]] = 2;\n      codeLengths[symbols[2]] = 2;\n      codeLengths[symbols[3]] = 2;\n      break;\n    case 5:\n      codeLengths[symbols[0]] = 1;\n      codeLengths[symbols[1]] = 2;\n      codeLengths[symbols[2]] = 3;\n      codeLengths[symbols[3]] = 3;\n      break;\n    default:\n      break;\n  }\n  return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n}\nfunction readComplexHuffmanCode(alphabetSizeLimit: number, skip: number, tableGroup: Int32Array, tableIdx: number, s: State): number {\n  const codeLengths = new Int32Array(alphabetSizeLimit);\n  const codeLengthCodeLengths = new Int32Array(18);\n  let space = 32;\n  let numCodes = 0;\n  for (let i: number = skip; i < 18; ++i) {\n    const codeLenIdx: number = CODE_LENGTH_CODE_ORDER[i];\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const p: number = (s.accumulator32 >>> s.bitOffset) & 15;\n    s.bitOffset += FIXED_TABLE[p] >> 16;\n    const v: number = FIXED_TABLE[p] & 0xFFFF;\n    codeLengthCodeLengths[codeLenIdx] = v;\n    if (v !== 0) {\n      space -= 32 >> v;\n      numCodes++;\n      if (space <= 0) {\n        break;\n      }\n    }\n  }\n  if (space !== 0 && numCodes !== 1) {\n    return makeError(s, -4);\n  }\n  const result: number = readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s);\n  if (result < 0) {\n    return result;\n  }\n  return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n}\nfunction readHuffmanCode(alphabetSizeMax: number, alphabetSizeLimit: number, tableGroup: Int32Array, tableIdx: number, s: State): number {\n  if (s.halfOffset > 2030) {\n    const result: number = readMoreInput(s);\n    if (result < 0) {\n      return result;\n    }\n  }\n  if (s.bitOffset >= 16) {\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n  }\n  const simpleCodeOrSkip: number = readFewBits(s, 2);\n  if (simpleCodeOrSkip === 1) {\n    return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s);\n  }\n  return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s);\n}\nfunction decodeContextMap(contextMapSize: number, contextMap: Int8Array, s: State): number {\n  let result: number;\n  if (s.halfOffset > 2030) {\n    result = readMoreInput(s);\n    if (result < 0) {\n      return result;\n    }\n  }\n  const numTrees: number = decodeVarLenUnsignedByte(s) + 1;\n  if (numTrees === 1) {\n    contextMap.fill(0, 0, contextMapSize);\n    return numTrees;\n  }\n  if (s.bitOffset >= 16) {\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n  }\n  const useRleForZeros: number = readFewBits(s, 1);\n  let maxRunLengthPrefix = 0;\n  if (useRleForZeros !== 0) {\n    maxRunLengthPrefix = readFewBits(s, 4) + 1;\n  }\n  const alphabetSize: number = numTrees + maxRunLengthPrefix;\n  const tableSize: number = MAX_HUFFMAN_TABLE_SIZE[(alphabetSize + 31) >> 5];\n  const table = new Int32Array(tableSize + 1);\n  const tableIdx: number = table.length - 1;\n  result = readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s);\n  if (result < 0) {\n    return result;\n  }\n  let i = 0;\n  while (i < contextMapSize) {\n    if (s.halfOffset > 2030) {\n      result = readMoreInput(s);\n      if (result < 0) {\n        return result;\n      }\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    const code: number = readSymbol(table, tableIdx, s);\n    if (code === 0) {\n      contextMap[i] = 0;\n      i++;\n    } else if (code <= maxRunLengthPrefix) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      let reps: number = (1 << code) + readFewBits(s, code);\n      while (reps !== 0) {\n        if (i >= contextMapSize) {\n          return makeError(s, -3);\n        }\n        contextMap[i] = 0;\n        i++;\n        reps--;\n      }\n    } else {\n      contextMap[i] = code - maxRunLengthPrefix;\n      i++;\n    }\n  }\n  if (s.bitOffset >= 16) {\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n  }\n  if (readFewBits(s, 1) === 1) {\n    inverseMoveToFrontTransform(contextMap, contextMapSize);\n  }\n  return numTrees;\n}\nfunction decodeBlockTypeAndLength(s: State, treeType: number, numBlockTypes: number): number {\n  const ringBuffers: Int32Array = s.rings;\n  const offset: number = 4 + treeType * 2;\n  if (s.bitOffset >= 16) {\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n  }\n  let blockType: number = readSymbol(s.blockTrees, 2 * treeType, s);\n  const result: number = readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n  if (blockType === 1) {\n    blockType = ringBuffers[offset + 1] + 1;\n  } else if (blockType === 0) {\n    blockType = ringBuffers[offset];\n  } else {\n    blockType -= 2;\n  }\n  if (blockType >= numBlockTypes) {\n    blockType -= numBlockTypes;\n  }\n  ringBuffers[offset] = ringBuffers[offset + 1];\n  ringBuffers[offset + 1] = blockType;\n  return result;\n}\nfunction decodeLiteralBlockSwitch(s: State): void {\n  s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes);\n  const literalBlockType: number = s.rings[5];\n  s.contextMapSlice = literalBlockType << 6;\n  s.literalTreeIdx = s.contextMap[s.contextMapSlice] & 0xFF;\n  const contextMode: number = s.contextModes[literalBlockType];\n  s.contextLookupOffset1 = contextMode << 9;\n  s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n}\nfunction decodeCommandBlockSwitch(s: State): void {\n  s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes);\n  s.commandTreeIdx = s.rings[7];\n}\nfunction decodeDistanceBlockSwitch(s: State): void {\n  s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes);\n  s.distContextMapSlice = s.rings[9] << 2;\n}\nfunction maybeReallocateRingBuffer(s: State): void {\n  let newSize: number = s.maxRingBufferSize;\n  if (newSize > s.expectedTotalSize) {\n    const minimalNewSize: number = s.expectedTotalSize;\n    while ((newSize >> 1) > minimalNewSize) {\n      newSize = newSize >> 1;\n    }\n    if ((s.inputEnd === 0) && newSize < 16384 && s.maxRingBufferSize >= 16384) {\n      newSize = 16384;\n    }\n  }\n  if (newSize <= s.ringBufferSize) {\n    return;\n  }\n  const ringBufferSizeWithSlack: number = newSize + 37;\n  const newBuffer = new Int8Array(ringBufferSizeWithSlack);\n  const oldBuffer: Int8Array = s.ringBuffer;\n  if (oldBuffer.length !== 0) {\n    newBuffer.set(oldBuffer.subarray(0, s.ringBufferSize), 0);\n  }\n  s.ringBuffer = newBuffer;\n  s.ringBufferSize = newSize;\n}\nfunction readNextMetablockHeader(s: State): number {\n  if (s.inputEnd !== 0) {\n    s.nextRunningState = 10;\n    s.runningState = 12;\n    return 0;\n  }\n  s.literalTreeGroup = new Int32Array(0);\n  s.commandTreeGroup = new Int32Array(0);\n  s.distanceTreeGroup = new Int32Array(0);\n  let result: number;\n  if (s.halfOffset > 2030) {\n    result = readMoreInput(s);\n    if (result < 0) {\n      return result;\n    }\n  }\n  result = decodeMetaBlockLength(s);\n  if (result < 0) {\n    return result;\n  }\n  if ((s.metaBlockLength === 0) && (s.isMetadata === 0)) {\n    return 0;\n  }\n  if ((s.isUncompressed !== 0) || (s.isMetadata !== 0)) {\n    result = jumpToByteBoundary(s);\n    if (result < 0) {\n      return result;\n    }\n    if (s.isMetadata === 0) {\n      s.runningState = 6;\n    } else {\n      s.runningState = 5;\n    }\n  } else {\n    s.runningState = 3;\n  }\n  if (s.isMetadata !== 0) {\n    return 0;\n  }\n  s.expectedTotalSize += s.metaBlockLength;\n  if (s.expectedTotalSize > 1 << 30) {\n    s.expectedTotalSize = 1 << 30;\n  }\n  if (s.ringBufferSize < s.maxRingBufferSize) {\n    maybeReallocateRingBuffer(s);\n  }\n  return 0;\n}\nfunction readMetablockPartition(s: State, treeType: number, numBlockTypes: number): number {\n  let offset: number = s.blockTrees[2 * treeType];\n  if (numBlockTypes <= 1) {\n    s.blockTrees[2 * treeType + 1] = offset;\n    s.blockTrees[2 * treeType + 2] = offset;\n    return 1 << 28;\n  }\n  const blockTypeAlphabetSize: number = numBlockTypes + 2;\n  let result: number = readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s);\n  if (result < 0) {\n    return result;\n  }\n  offset += result;\n  s.blockTrees[2 * treeType + 1] = offset;\n  const blockLengthAlphabetSize = 26;\n  result = readHuffmanCode(blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2 * treeType + 1, s);\n  if (result < 0) {\n    return result;\n  }\n  offset += result;\n  s.blockTrees[2 * treeType + 2] = offset;\n  return readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n}\nfunction calculateDistanceLut(s: State, alphabetSizeLimit: number): void {\n  const distExtraBits: Int8Array = s.distExtraBits;\n  const distOffset: Int32Array = s.distOffset;\n  const npostfix: number = s.distancePostfixBits;\n  const ndirect: number = s.numDirectDistanceCodes;\n  const postfix: number = 1 << npostfix;\n  let bits = 1;\n  let half = 0;\n  let i = 16;\n  for (let j = 0; j < ndirect; ++j) {\n    distExtraBits[i] = 0;\n    distOffset[i] = j + 1;\n    ++i;\n  }\n  while (i < alphabetSizeLimit) {\n    const base: number = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1;\n    for (let j = 0; j < postfix; ++j) {\n      distExtraBits[i] = bits;\n      distOffset[i] = base + j;\n      ++i;\n    }\n    bits = bits + half;\n    half = half ^ 1;\n  }\n}\nfunction readMetablockHuffmanCodesAndContextMaps(s: State): number {\n  s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n  let result: number = readMetablockPartition(s, 0, s.numLiteralBlockTypes);\n  if (result < 0) {\n    return result;\n  }\n  s.literalBlockLength = result;\n  s.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n  result = readMetablockPartition(s, 1, s.numCommandBlockTypes);\n  if (result < 0) {\n    return result;\n  }\n  s.commandBlockLength = result;\n  s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n  result = readMetablockPartition(s, 2, s.numDistanceBlockTypes);\n  if (result < 0) {\n    return result;\n  }\n  s.distanceBlockLength = result;\n  if (s.halfOffset > 2030) {\n    result = readMoreInput(s);\n    if (result < 0) {\n      return result;\n    }\n  }\n  if (s.bitOffset >= 16) {\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n  }\n  s.distancePostfixBits = readFewBits(s, 2);\n  s.numDirectDistanceCodes = readFewBits(s, 4) << s.distancePostfixBits;\n  s.contextModes = new Int8Array(s.numLiteralBlockTypes);\n  let i = 0;\n  while (i < s.numLiteralBlockTypes) {\n    const limit: number = Math.min(i + 96, s.numLiteralBlockTypes);\n    while (i < limit) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      s.contextModes[i] = readFewBits(s, 2);\n      i++;\n    }\n    if (s.halfOffset > 2030) {\n      result = readMoreInput(s);\n      if (result < 0) {\n        return result;\n      }\n    }\n  }\n  const contextMapLength: number = s.numLiteralBlockTypes << 6;\n  s.contextMap = new Int8Array(contextMapLength);\n  result = decodeContextMap(contextMapLength, s.contextMap, s);\n  if (result < 0) {\n    return result;\n  }\n  const numLiteralTrees: number = result;\n  s.trivialLiteralContext = 1;\n  for (let j = 0; j < contextMapLength; ++j) {\n    if (s.contextMap[j] !== j >> 6) {\n      s.trivialLiteralContext = 0;\n      break;\n    }\n  }\n  s.distContextMap = new Int8Array(s.numDistanceBlockTypes << 2);\n  result = decodeContextMap(s.numDistanceBlockTypes << 2, s.distContextMap, s);\n  if (result < 0) {\n    return result;\n  }\n  const numDistTrees: number = result;\n  s.literalTreeGroup = new Int32Array(huffmanTreeGroupAllocSize(256, numLiteralTrees));\n  result = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s, s.literalTreeGroup);\n  if (result < 0) {\n    return result;\n  }\n  s.commandTreeGroup = new Int32Array(huffmanTreeGroupAllocSize(704, s.numCommandBlockTypes));\n  result = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s, s.commandTreeGroup);\n  if (result < 0) {\n    return result;\n  }\n  let distanceAlphabetSizeMax: number = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24);\n  let distanceAlphabetSizeLimit: number = distanceAlphabetSizeMax;\n  if (s.isLargeWindow === 1) {\n    distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62);\n    result = calculateDistanceAlphabetLimit(s, 0x7FFFFFFC, s.distancePostfixBits, s.numDirectDistanceCodes);\n    if (result < 0) {\n      return result;\n    }\n    distanceAlphabetSizeLimit = result;\n  }\n  s.distanceTreeGroup = new Int32Array(huffmanTreeGroupAllocSize(distanceAlphabetSizeLimit, numDistTrees));\n  result = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s, s.distanceTreeGroup);\n  if (result < 0) {\n    return result;\n  }\n  calculateDistanceLut(s, distanceAlphabetSizeLimit);\n  s.contextMapSlice = 0;\n  s.distContextMapSlice = 0;\n  s.contextLookupOffset1 = s.contextModes[0] * 512;\n  s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n  s.literalTreeIdx = 0;\n  s.commandTreeIdx = 0;\n  s.rings[4] = 1;\n  s.rings[5] = 0;\n  s.rings[6] = 1;\n  s.rings[7] = 0;\n  s.rings[8] = 1;\n  s.rings[9] = 0;\n  return 0;\n}\nfunction copyUncompressedData(s: State): number {\n  const ringBuffer: Int8Array = s.ringBuffer;\n  let result: number;\n  if (s.metaBlockLength <= 0) {\n    result = reload(s);\n    if (result < 0) {\n      return result;\n    }\n    s.runningState = 2;\n    return 0;\n  }\n  const chunkLength: number = Math.min(s.ringBufferSize - s.pos, s.metaBlockLength);\n  result = copyRawBytes(s, ringBuffer, s.pos, chunkLength);\n  if (result < 0) {\n    return result;\n  }\n  s.metaBlockLength -= chunkLength;\n  s.pos += chunkLength;\n  if (s.pos === s.ringBufferSize) {\n    s.nextRunningState = 6;\n    s.runningState = 12;\n    return 0;\n  }\n  result = reload(s);\n  if (result < 0) {\n    return result;\n  }\n  s.runningState = 2;\n  return 0;\n}\nfunction writeRingBuffer(s: State): number {\n  const toWrite: number = Math.min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten);\n  if (toWrite !== 0) {\n    s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite), s.outputOffset + s.outputUsed);\n    s.outputUsed += toWrite;\n    s.ringBufferBytesWritten += toWrite;\n  }\n  if (s.outputUsed < s.outputLength) {\n    return 0;\n  }\n  return 2;\n}\nfunction huffmanTreeGroupAllocSize(alphabetSizeLimit: number, n: number): number {\n  const maxTableSize: number = MAX_HUFFMAN_TABLE_SIZE[(alphabetSizeLimit + 31) >> 5];\n  return n + n * maxTableSize;\n}\nfunction decodeHuffmanTreeGroup(alphabetSizeMax: number, alphabetSizeLimit: number, n: number, s: State, group: Int32Array): number {\n  let next: number = n;\n  for (let i = 0; i < n; ++i) {\n    group[i] = next;\n    const result: number = readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s);\n    if (result < 0) {\n      return result;\n    }\n    next += result;\n  }\n  return 0;\n}\nfunction calculateFence(s: State): number {\n  let result: number = s.ringBufferSize;\n  if (s.isEager !== 0) {\n    result = Math.min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed);\n  }\n  return result;\n}\nfunction doUseDictionary(s: State, fence: number): number {\n  if (s.distance > 0x7FFFFFFC) {\n    return makeError(s, -9);\n  }\n  const address: number = s.distance - s.maxDistance - 1 - s.cdTotalSize;\n  if (address < 0) {\n    const result: number = initializeCompoundDictionaryCopy(s, -address - 1, s.copyLength);\n    if (result < 0) {\n      return result;\n    }\n    s.runningState = 14;\n  } else {\n    const dictionaryData: ByteBuffer = data;\n    const wordLength: number = s.copyLength;\n    if (wordLength > 31) {\n      return makeError(s, -9);\n    }\n    const shift: number = sizeBits[wordLength];\n    if (shift === 0) {\n      return makeError(s, -9);\n    }\n    let offset: number = offsets[wordLength];\n    const mask: number = (1 << shift) - 1;\n    const wordIdx: number = address & mask;\n    const transformIdx: number = address >> shift;\n    offset += wordIdx * wordLength;\n    const transforms: Transforms = RFC_TRANSFORMS;\n    if (transformIdx >= transforms.numTransforms) {\n      return makeError(s, -9);\n    }\n    const len: number = transformDictionaryWord(s.ringBuffer, s.pos, dictionaryData, offset, wordLength, transforms, transformIdx);\n    s.pos += len;\n    s.metaBlockLength -= len;\n    if (s.pos >= fence) {\n      s.nextRunningState = 4;\n      s.runningState = 12;\n      return 0;\n    }\n    s.runningState = 4;\n  }\n  return 0;\n}\nfunction initializeCompoundDictionary(s: State): void {\n  s.cdBlockMap = new Int8Array(256);\n  let blockBits = 8;\n  while (((s.cdTotalSize - 1) >> blockBits) !== 0) {\n    blockBits++;\n  }\n  blockBits -= 8;\n  s.cdBlockBits = blockBits;\n  let cursor = 0;\n  let index = 0;\n  while (cursor < s.cdTotalSize) {\n    while (s.cdChunkOffsets[index + 1] < cursor) {\n      index++;\n    }\n    s.cdBlockMap[cursor >> blockBits] = index;\n    cursor += 1 << blockBits;\n  }\n}\nfunction initializeCompoundDictionaryCopy(s: State, address: number, length: number): number {\n  if (s.cdBlockBits === -1) {\n    initializeCompoundDictionary(s);\n  }\n  let index: number = s.cdBlockMap[address >> s.cdBlockBits];\n  while (address >= s.cdChunkOffsets[index + 1]) {\n    index++;\n  }\n  if (s.cdTotalSize > address + length) {\n    return makeError(s, -9);\n  }\n  s.distRbIdx = (s.distRbIdx + 1) & 0x3;\n  s.rings[s.distRbIdx] = s.distance;\n  s.metaBlockLength -= length;\n  s.cdBrIndex = index;\n  s.cdBrOffset = address - s.cdChunkOffsets[index];\n  s.cdBrLength = length;\n  s.cdBrCopied = 0;\n  return 0;\n}\nfunction copyFromCompoundDictionary(s: State, fence: number): number {\n  let pos: number = s.pos;\n  const origPos: number = pos;\n  while (s.cdBrLength !== s.cdBrCopied) {\n    const space: number = fence - pos;\n    const chunkLength: number = s.cdChunkOffsets[s.cdBrIndex + 1] - s.cdChunkOffsets[s.cdBrIndex];\n    const remChunkLength: number = chunkLength - s.cdBrOffset;\n    let length: number = s.cdBrLength - s.cdBrCopied;\n    if (length > remChunkLength) {\n      length = remChunkLength;\n    }\n    if (length > space) {\n      length = space;\n    }\n    s.ringBuffer.set(s.cdChunks[s.cdBrIndex].subarray(s.cdBrOffset, s.cdBrOffset + length), pos);\n    pos += length;\n    s.cdBrOffset += length;\n    s.cdBrCopied += length;\n    if (length === remChunkLength) {\n      s.cdBrIndex++;\n      s.cdBrOffset = 0;\n    }\n    if (pos >= fence) {\n      break;\n    }\n  }\n  return pos - origPos;\n}\nfunction decompress(s: State): number {\n  let result: number;\n  if (s.runningState === 0) {\n    return makeError(s, -25);\n  }\n  if (s.runningState < 0) {\n    return makeError(s, -28);\n  }\n  if (s.runningState === 11) {\n    return makeError(s, -22);\n  }\n  if (s.runningState === 1) {\n    const windowBits: number = decodeWindowBits(s);\n    if (windowBits === -1) {\n      return makeError(s, -11);\n    }\n    s.maxRingBufferSize = 1 << windowBits;\n    s.maxBackwardDistance = s.maxRingBufferSize - 16;\n    s.runningState = 2;\n  }\n  let fence: number = calculateFence(s);\n  let ringBufferMask: number = s.ringBufferSize - 1;\n  let ringBuffer: Int8Array = s.ringBuffer;\n  while (s.runningState !== 10) {\n    switch(s.runningState) {\n      case 2:\n        if (s.metaBlockLength < 0) {\n          return makeError(s, -10);\n        }\n        result = readNextMetablockHeader(s);\n        if (result < 0) {\n          return result;\n        }\n        fence = calculateFence(s);\n        ringBufferMask = s.ringBufferSize - 1;\n        ringBuffer = s.ringBuffer;\n        continue;\n      case 3:\n        result = readMetablockHuffmanCodesAndContextMaps(s);\n        if (result < 0) {\n          return result;\n        }\n        s.runningState = 4;\n        continue;\n      case 4:\n        if (s.metaBlockLength <= 0) {\n          s.runningState = 2;\n          continue;\n        }\n        if (s.halfOffset > 2030) {\n          result = readMoreInput(s);\n          if (result < 0) {\n            return result;\n          }\n        }\n        if (s.commandBlockLength === 0) {\n          decodeCommandBlockSwitch(s);\n        }\n        s.commandBlockLength--;\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        const cmdCode: number = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2;\n        const insertAndCopyExtraBits: number = CMD_LOOKUP[cmdCode];\n        const insertLengthOffset: number = CMD_LOOKUP[cmdCode + 1];\n        const copyLengthOffset: number = CMD_LOOKUP[cmdCode + 2];\n        s.distanceCode = CMD_LOOKUP[cmdCode + 3];\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        const insertLengthExtraBits: number = insertAndCopyExtraBits & 0xFF;\n        s.insertLength = insertLengthOffset + ((insertLengthExtraBits <= 16) ? readFewBits(s, insertLengthExtraBits) : readManyBits(s, insertLengthExtraBits));\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        const copyLengthExtraBits: number = insertAndCopyExtraBits >> 8;\n        s.copyLength = copyLengthOffset + ((copyLengthExtraBits <= 16) ? readFewBits(s, copyLengthExtraBits) : readManyBits(s, copyLengthExtraBits));\n        s.j = 0;\n        s.runningState = 7;\n        continue;\n      case 7:\n        if (s.trivialLiteralContext !== 0) {\n          while (s.j < s.insertLength) {\n            if (s.halfOffset > 2030) {\n              result = readMoreInput(s);\n              if (result < 0) {\n                return result;\n              }\n            }\n            if (s.literalBlockLength === 0) {\n              decodeLiteralBlockSwitch(s);\n            }\n            s.literalBlockLength--;\n            if (s.bitOffset >= 16) {\n              s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n              s.bitOffset -= 16;\n            }\n            ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s);\n            s.pos++;\n            s.j++;\n            if (s.pos >= fence) {\n              s.nextRunningState = 7;\n              s.runningState = 12;\n              break;\n            }\n          }\n        } else {\n          let prevByte1: number = ringBuffer[(s.pos - 1) & ringBufferMask] & 0xFF;\n          let prevByte2: number = ringBuffer[(s.pos - 2) & ringBufferMask] & 0xFF;\n          while (s.j < s.insertLength) {\n            if (s.halfOffset > 2030) {\n              result = readMoreInput(s);\n              if (result < 0) {\n                return result;\n              }\n            }\n            if (s.literalBlockLength === 0) {\n              decodeLiteralBlockSwitch(s);\n            }\n            const literalContext: number = LOOKUP[s.contextLookupOffset1 + prevByte1] | LOOKUP[s.contextLookupOffset2 + prevByte2];\n            const literalTreeIdx: number = s.contextMap[s.contextMapSlice + literalContext] & 0xFF;\n            s.literalBlockLength--;\n            prevByte2 = prevByte1;\n            if (s.bitOffset >= 16) {\n              s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n              s.bitOffset -= 16;\n            }\n            prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s);\n            ringBuffer[s.pos] = prevByte1;\n            s.pos++;\n            s.j++;\n            if (s.pos >= fence) {\n              s.nextRunningState = 7;\n              s.runningState = 12;\n              break;\n            }\n          }\n        }\n        if (s.runningState !== 7) {\n          continue;\n        }\n        s.metaBlockLength -= s.insertLength;\n        if (s.metaBlockLength <= 0) {\n          s.runningState = 4;\n          continue;\n        }\n        let distanceCode: number = s.distanceCode;\n        if (distanceCode < 0) {\n          s.distance = s.rings[s.distRbIdx];\n        } else {\n          if (s.halfOffset > 2030) {\n            result = readMoreInput(s);\n            if (result < 0) {\n              return result;\n            }\n          }\n          if (s.distanceBlockLength === 0) {\n            decodeDistanceBlockSwitch(s);\n          }\n          s.distanceBlockLength--;\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          const distTreeIdx: number = s.distContextMap[s.distContextMapSlice + distanceCode] & 0xFF;\n          distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s);\n          if (distanceCode < 16) {\n            const index: number = (s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]) & 0x3;\n            s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode];\n            if (s.distance < 0) {\n              return makeError(s, -12);\n            }\n          } else {\n            const extraBits: number = s.distExtraBits[distanceCode];\n            let bits: number;\n            if (s.bitOffset + extraBits <= 32) {\n              bits = readFewBits(s, extraBits);\n            } else {\n              if (s.bitOffset >= 16) {\n                s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                s.bitOffset -= 16;\n              }\n              bits = (extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits);\n            }\n            s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits);\n          }\n        }\n        if (s.maxDistance !== s.maxBackwardDistance && s.pos < s.maxBackwardDistance) {\n          s.maxDistance = s.pos;\n        } else {\n          s.maxDistance = s.maxBackwardDistance;\n        }\n        if (s.distance > s.maxDistance) {\n          s.runningState = 9;\n          continue;\n        }\n        if (distanceCode > 0) {\n          s.distRbIdx = (s.distRbIdx + 1) & 0x3;\n          s.rings[s.distRbIdx] = s.distance;\n        }\n        if (s.copyLength > s.metaBlockLength) {\n          return makeError(s, -9);\n        }\n        s.j = 0;\n        s.runningState = 8;\n        continue;\n      case 8:\n        let src: number = (s.pos - s.distance) & ringBufferMask;\n        let dst: number = s.pos;\n        const copyLength: number = s.copyLength - s.j;\n        const srcEnd: number = src + copyLength;\n        const dstEnd: number = dst + copyLength;\n        if ((srcEnd < ringBufferMask) && (dstEnd < ringBufferMask)) {\n          if (copyLength < 12 || (srcEnd > dst && dstEnd > src)) {\n            const numQuads: number = (copyLength + 3) >> 2;\n            for (let k = 0; k < numQuads; ++k) {\n              ringBuffer[dst++] = ringBuffer[src++];\n              ringBuffer[dst++] = ringBuffer[src++];\n              ringBuffer[dst++] = ringBuffer[src++];\n              ringBuffer[dst++] = ringBuffer[src++];\n            }\n          } else {\n            ringBuffer.copyWithin(dst, src, srcEnd);\n          }\n          s.j += copyLength;\n          s.metaBlockLength -= copyLength;\n          s.pos += copyLength;\n        } else {\n          while (s.j < s.copyLength) {\n            ringBuffer[s.pos] = ringBuffer[(s.pos - s.distance) & ringBufferMask];\n            s.metaBlockLength--;\n            s.pos++;\n            s.j++;\n            if (s.pos >= fence) {\n              s.nextRunningState = 8;\n              s.runningState = 12;\n              break;\n            }\n          }\n        }\n        if (s.runningState === 8) {\n          s.runningState = 4;\n        }\n        continue;\n      case 9:\n        result = doUseDictionary(s, fence);\n        if (result < 0) {\n          return result;\n        }\n        continue;\n      case 14:\n        s.pos += copyFromCompoundDictionary(s, fence);\n        if (s.pos >= fence) {\n          s.nextRunningState = 14;\n          s.runningState = 12;\n          return 2;\n        }\n        s.runningState = 4;\n        continue;\n      case 5:\n        while (s.metaBlockLength > 0) {\n          if (s.halfOffset > 2030) {\n            result = readMoreInput(s);\n            if (result < 0) {\n              return result;\n            }\n          }\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          readFewBits(s, 8);\n          s.metaBlockLength--;\n        }\n        s.runningState = 2;\n        continue;\n      case 6:\n        result = copyUncompressedData(s);\n        if (result < 0) {\n          return result;\n        }\n        continue;\n      case 12:\n        s.ringBufferBytesReady = Math.min(s.pos, s.ringBufferSize);\n        s.runningState = 13;\n        continue;\n      case 13:\n        result = writeRingBuffer(s);\n        if (result !== 0) {\n          return result;\n        }\n        if (s.pos >= s.maxBackwardDistance) {\n          s.maxDistance = s.maxBackwardDistance;\n        }\n        if (s.pos >= s.ringBufferSize) {\n          if (s.pos > s.ringBufferSize) {\n            ringBuffer.copyWithin(0, s.ringBufferSize, s.pos);\n          }\n          s.pos = s.pos & ringBufferMask;\n          s.ringBufferBytesWritten = 0;\n        }\n        s.runningState = s.nextRunningState;\n        continue;\n      default:\n        return makeError(s, -28);\n    }\n  }\n  if (s.runningState !== 10) {\n    return makeError(s, -29);\n  }\n  if (s.metaBlockLength < 0) {\n    return makeError(s, -10);\n  }\n  result = jumpToByteBoundary(s);\n  if (result !== 0) {\n    return result;\n  }\n  result = checkHealth(s, 1);\n  if (result !== 0) {\n    return result;\n  }\n  return 1;\n}\n\nclass Transforms {\n  numTransforms = 0;\n  triplets = new Int32Array(0);\n  prefixSuffixStorage = new Int8Array(0);\n  prefixSuffixHeads = new Int32Array(0);\n  params = new Int16Array(0);\n  constructor (numTransforms: number, prefixSuffixLen: number, prefixSuffixCount: number) {\n    this.numTransforms = numTransforms;\n    this.triplets = new Int32Array(numTransforms * 3);\n    this.params = new Int16Array(numTransforms);\n    this.prefixSuffixStorage = new Int8Array(prefixSuffixLen);\n    this.prefixSuffixHeads = new Int32Array(prefixSuffixCount + 1);\n  }\n}\n\nconst RFC_TRANSFORMS = new Transforms(121, 167, 50);\nfunction unpackTransforms(prefixSuffix: Int8Array, prefixSuffixHeads: Int32Array, transforms: Int32Array, prefixSuffixSrc: string, transformsSrc: string): void {\n  const prefixSuffixBytes: Int32Array = toUtf8Runes(prefixSuffixSrc);\n  const n: number = prefixSuffixBytes.length;\n  let index = 1;\n  let j = 0;\n  for (let i = 0; i < n; ++i) {\n    const c: number = prefixSuffixBytes[i];\n    if (c === 35) {\n      prefixSuffixHeads[index++] = j;\n    } else {\n      prefixSuffix[j++] = c;\n    }\n  }\n  for (let i = 0; i < 363; ++i) {\n    transforms[i] = transformsSrc.charCodeAt(i) - 32;\n  }\n}\n{\n  // typo:off\n  unpackTransforms(RFC_TRANSFORMS.prefixSuffixStorage, RFC_TRANSFORMS.prefixSuffixHeads, RFC_TRANSFORMS.triplets, \"# #s #, #e #.# the #.com/#\\xC2\\xA0# of # and # in # to #\\\"#\\\">#\\n#]# for # a # that #. # with #'# from # by #. The # on # as # is #ing #\\n\\t#:#ed #(# at #ly #=\\\"# of the #. This #,# not #er #al #='#ful #ive #less #est #ize #ous #\", \"     !! ! ,  *!  &!  \\\" !  ) *   * -  ! # !  #!*!  +  ,$ !  -  %  .  / #   0  1 .  \\\"   2  3!*   4%  ! # /   5  6  7  8 0  1 &   $   9 +   :  ;  < '  !=  >  ?! 4  @ 4  2  &   A *# (   B  C& ) %  ) !*# *-% A +! *.  D! %'  & E *6  F  G% ! *A *%  H! D  I!+!  J!+   K +- *4! A  L!*4  M  N +6  O!*% +.! K *G  P +%(  ! G *D +D  Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K\");\n  // typo:on\n}\nfunction transformDictionaryWord(dst: Int8Array, dstOffset: number, src: ByteBuffer, srcOffset: number, wordLen: number, transforms: Transforms, transformIndex: number): number {\n  let offset: number = dstOffset;\n  const triplets: Int32Array = transforms.triplets;\n  const prefixSuffixStorage: Int8Array = transforms.prefixSuffixStorage;\n  const prefixSuffixHeads: Int32Array = transforms.prefixSuffixHeads;\n  const transformOffset: number = 3 * transformIndex;\n  const prefixIdx: number = triplets[transformOffset];\n  const transformType: number = triplets[transformOffset + 1];\n  const suffixIdx: number = triplets[transformOffset + 2];\n  let prefix: number = prefixSuffixHeads[prefixIdx];\n  const prefixEnd: number = prefixSuffixHeads[prefixIdx + 1];\n  let suffix: number = prefixSuffixHeads[suffixIdx];\n  const suffixEnd: number = prefixSuffixHeads[suffixIdx + 1];\n  let omitFirst: number = transformType - 11;\n  let omitLast: number = transformType;\n  if (omitFirst < 1 || omitFirst > 9) {\n    omitFirst = 0;\n  }\n  if (omitLast < 1 || omitLast > 9) {\n    omitLast = 0;\n  }\n  while (prefix !== prefixEnd) {\n    dst[offset++] = prefixSuffixStorage[prefix++];\n  }\n  let len: number = wordLen;\n  if (omitFirst > len) {\n    omitFirst = len;\n  }\n  let dictOffset: number = srcOffset + omitFirst;\n  len -= omitFirst;\n  len -= omitLast;\n  let i: number = len;\n  while (i > 0) {\n    dst[offset++] = src[dictOffset++];\n    i--;\n  }\n  if (transformType === 10 || transformType === 11) {\n    let uppercaseOffset: number = offset - len;\n    if (transformType === 10) {\n      len = 1;\n    }\n    while (len > 0) {\n      const c0: number = dst[uppercaseOffset] & 0xFF;\n      if (c0 < 0xC0) {\n        if (c0 >= 97 && c0 <= 122) {\n          dst[uppercaseOffset] = dst[uppercaseOffset] ^ 32;\n        }\n        uppercaseOffset += 1;\n        len -= 1;\n      } else if (c0 < 0xE0) {\n        dst[uppercaseOffset + 1] = dst[uppercaseOffset + 1] ^ 32;\n        uppercaseOffset += 2;\n        len -= 2;\n      } else {\n        dst[uppercaseOffset + 2] = dst[uppercaseOffset + 2] ^ 5;\n        uppercaseOffset += 3;\n        len -= 3;\n      }\n    }\n  } else if (transformType === 21 || transformType === 22) {\n    let shiftOffset: number = offset - len;\n    const param: number = transforms.params[transformIndex];\n    let scalar: number = (param & 0x7FFF) + (0x1000000 - (param & 0x8000));\n    while (len > 0) {\n      let step = 1;\n      const c0: number = dst[shiftOffset] & 0xFF;\n      if (c0 < 0x80) {\n        scalar += c0;\n        dst[shiftOffset] = scalar & 0x7F;\n      } else if (c0 < 0xC0) {\n      } else if (c0 < 0xE0) {\n        if (len >= 2) {\n          const c1: number = dst[shiftOffset + 1];\n          scalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6);\n          dst[shiftOffset] = 0xC0 | ((scalar >> 6) & 0x1F);\n          dst[shiftOffset + 1] = (c1 & 0xC0) | (scalar & 0x3F);\n          step = 2;\n        } else {\n          step = len;\n        }\n      } else if (c0 < 0xF0) {\n        if (len >= 3) {\n          const c1: number = dst[shiftOffset + 1];\n          const c2: number = dst[shiftOffset + 2];\n          scalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12);\n          dst[shiftOffset] = 0xE0 | ((scalar >> 12) & 0x0F);\n          dst[shiftOffset + 1] = (c1 & 0xC0) | ((scalar >> 6) & 0x3F);\n          dst[shiftOffset + 2] = (c2 & 0xC0) | (scalar & 0x3F);\n          step = 3;\n        } else {\n          step = len;\n        }\n      } else if (c0 < 0xF8) {\n        if (len >= 4) {\n          const c1: number = dst[shiftOffset + 1];\n          const c2: number = dst[shiftOffset + 2];\n          const c3: number = dst[shiftOffset + 3];\n          scalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18);\n          dst[shiftOffset] = 0xF0 | ((scalar >> 18) & 0x07);\n          dst[shiftOffset + 1] = (c1 & 0xC0) | ((scalar >> 12) & 0x3F);\n          dst[shiftOffset + 2] = (c2 & 0xC0) | ((scalar >> 6) & 0x3F);\n          dst[shiftOffset + 3] = (c3 & 0xC0) | (scalar & 0x3F);\n          step = 4;\n        } else {\n          step = len;\n        }\n      }\n      shiftOffset += step;\n      len -= step;\n      if (transformType === 21) {\n        len = 0;\n      }\n    }\n  }\n  while (suffix !== suffixEnd) {\n    dst[offset++] = prefixSuffixStorage[suffix++];\n  }\n  return offset - dstOffset;\n}\n\nfunction getNextKey(key: number, len: number): number {\n  let step: number = 1 << (len - 1);\n  while ((key & step) !== 0) {\n    step = step >> 1;\n  }\n  return (key & (step - 1)) + step;\n}\nfunction replicateValue(table: Int32Array, offset: number, step: number, end: number, item: number): void {\n  let pos: number = end;\n  while (pos > 0) {\n    pos -= step;\n    table[offset + pos] = item;\n  }\n}\nfunction nextTableBitSize(count: Int32Array, len: number, rootBits: number): number {\n  let bits: number = len;\n  let left: number = 1 << (bits - rootBits);\n  while (bits < 15) {\n    left -= count[bits];\n    if (left <= 0) {\n      break;\n    }\n    bits++;\n    left = left << 1;\n  }\n  return bits - rootBits;\n}\nfunction buildHuffmanTable(tableGroup: Int32Array, tableIdx: number, rootBits: number, codeLengths: Int32Array, codeLengthsSize: number): number {\n  const tableOffset: number = tableGroup[tableIdx];\n  const sorted = new Int32Array(codeLengthsSize);\n  const count = new Int32Array(16);\n  const offset = new Int32Array(16);\n  for (let sym = 0; sym < codeLengthsSize; ++sym) {\n    count[codeLengths[sym]]++;\n  }\n  offset[1] = 0;\n  for (let len = 1; len < 15; ++len) {\n    offset[len + 1] = offset[len] + count[len];\n  }\n  for (let sym = 0; sym < codeLengthsSize; ++sym) {\n    if (codeLengths[sym] !== 0) {\n      sorted[offset[codeLengths[sym]]++] = sym;\n    }\n  }\n  let tableBits: number = rootBits;\n  let tableSize: number = 1 << tableBits;\n  let totalSize: number = tableSize;\n  if (offset[15] === 1) {\n    for (let k = 0; k < totalSize; ++k) {\n      tableGroup[tableOffset + k] = sorted[0];\n    }\n    return totalSize;\n  }\n  let key = 0;\n  let symbol = 0;\n  let step = 1;\n  for (let len = 1; len <= rootBits; ++len) {\n    step = step << 1;\n    while (count[len] > 0) {\n      replicateValue(tableGroup, tableOffset + key, step, tableSize, len << 16 | sorted[symbol++]);\n      key = getNextKey(key, len);\n      count[len]--;\n    }\n  }\n  const mask: number = totalSize - 1;\n  let low: number = -1;\n  let currentOffset: number = tableOffset;\n  step = 1;\n  for (let len: number = rootBits + 1; len <= 15; ++len) {\n    step = step << 1;\n    while (count[len] > 0) {\n      if ((key & mask) !== low) {\n        currentOffset += tableSize;\n        tableBits = nextTableBitSize(count, len, rootBits);\n        tableSize = 1 << tableBits;\n        totalSize += tableSize;\n        low = key & mask;\n        tableGroup[tableOffset + low] = (tableBits + rootBits) << 16 | (currentOffset - tableOffset - low);\n      }\n      replicateValue(tableGroup, currentOffset + (key >> rootBits), step, tableSize, (len - rootBits) << 16 | sorted[symbol++]);\n      key = getNextKey(key, len);\n      count[len]--;\n    }\n  }\n  return totalSize;\n}\n\nfunction readMoreInput(s: State): number {\n  if (s.endOfStreamReached !== 0) {\n    if (halfAvailable(s) >= -2) {\n      return 0;\n    }\n    return makeError(s, -16);\n  }\n  const readOffset: number = s.halfOffset << 1;\n  let bytesInBuffer: number = 4096 - readOffset;\n  s.byteBuffer.copyWithin(0, readOffset, 4096);\n  s.halfOffset = 0;\n  while (bytesInBuffer < 4096) {\n    const spaceLeft: number = 4096 - bytesInBuffer;\n    const len: number = readInput(s, s.byteBuffer, bytesInBuffer, spaceLeft);\n    if (len < -1) {\n      return len;\n    }\n    if (len <= 0) {\n      s.endOfStreamReached = 1;\n      s.tailBytes = bytesInBuffer;\n      bytesInBuffer += 1;\n      break;\n    }\n    bytesInBuffer += len;\n  }\n  bytesToNibbles(s, bytesInBuffer);\n  return 0;\n}\nfunction checkHealth(s: State, endOfStream: number): number {\n  if (s.endOfStreamReached === 0) {\n    return 0;\n  }\n  const byteOffset: number = (s.halfOffset << 1) + ((s.bitOffset + 7) >> 3) - 4;\n  if (byteOffset > s.tailBytes) {\n    return makeError(s, -13);\n  }\n  if ((endOfStream !== 0) && (byteOffset !== s.tailBytes)) {\n    return makeError(s, -17);\n  }\n  return 0;\n}\nfunction readFewBits(s: State, n: number): number {\n  const v: number = (s.accumulator32 >>> s.bitOffset) & ((1 << n) - 1);\n  s.bitOffset += n;\n  return v;\n}\nfunction readManyBits(s: State, n: number): number {\n  const low: number = readFewBits(s, 16);\n  s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n  s.bitOffset -= 16;\n  return low | (readFewBits(s, n - 16) << 16);\n}\nfunction initBitReader(s: State): number {\n  s.byteBuffer = new Int8Array(4160);\n  s.accumulator32 = 0;\n  s.shortBuffer = new Int16Array(2080);\n  s.bitOffset = 32;\n  s.halfOffset = 2048;\n  s.endOfStreamReached = 0;\n  return prepare(s);\n}\nfunction prepare(s: State): number {\n  if (s.halfOffset > 2030) {\n    const result: number = readMoreInput(s);\n    if (result !== 0) {\n      return result;\n    }\n  }\n  let health: number = checkHealth(s, 0);\n  if (health !== 0) {\n    return health;\n  }\n  s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n  s.bitOffset -= 16;\n  s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n  s.bitOffset -= 16;\n  return 0;\n}\nfunction reload(s: State): number {\n  if (s.bitOffset === 32) {\n    return prepare(s);\n  }\n  return 0;\n}\nfunction jumpToByteBoundary(s: State): number {\n  const padding: number = (32 - s.bitOffset) & 7;\n  if (padding !== 0) {\n    const paddingBits: number = readFewBits(s, padding);\n    if (paddingBits !== 0) {\n      return makeError(s, -5);\n    }\n  }\n  return 0;\n}\nfunction halfAvailable(s: State): number {\n  let limit = 2048;\n  if (s.endOfStreamReached !== 0) {\n    limit = (s.tailBytes + 1) >> 1;\n  }\n  return limit - s.halfOffset;\n}\nfunction copyRawBytes(s: State, data: Int8Array, offset: number, length: number): number {\n  let pos: number = offset;\n  let len: number = length;\n  if ((s.bitOffset & 7) !== 0) {\n    return makeError(s, -30);\n  }\n  while ((s.bitOffset !== 32) && (len !== 0)) {\n    data[pos++] = s.accumulator32 >>> s.bitOffset;\n    s.bitOffset += 8;\n    len--;\n  }\n  if (len === 0) {\n    return 0;\n  }\n  const copyNibbles: number = Math.min(halfAvailable(s), len >> 1);\n  if (copyNibbles > 0) {\n    const readOffset: number = s.halfOffset << 1;\n    const delta: number = copyNibbles << 1;\n    data.set(s.byteBuffer.subarray(readOffset, readOffset + delta), pos);\n    pos += delta;\n    len -= delta;\n    s.halfOffset += copyNibbles;\n  }\n  if (len === 0) {\n    return 0;\n  }\n  if (halfAvailable(s) > 0) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    while (len !== 0) {\n      data[pos++] = s.accumulator32 >>> s.bitOffset;\n      s.bitOffset += 8;\n      len--;\n    }\n    return checkHealth(s, 0);\n  }\n  while (len > 0) {\n    const chunkLen: number = readInput(s, data, pos, len);\n    if (chunkLen < -1) {\n      return chunkLen;\n    }\n    if (chunkLen <= 0) {\n      return makeError(s, -16);\n    }\n    pos += chunkLen;\n    len -= chunkLen;\n  }\n  return 0;\n}\nfunction bytesToNibbles(s: State, byteLen: number): void {\n  const byteBuffer: Int8Array = s.byteBuffer;\n  const halfLen: number = byteLen >> 1;\n  const shortBuffer: Int16Array = s.shortBuffer;\n  for (let i = 0; i < halfLen; ++i) {\n    shortBuffer[i] = (byteBuffer[i * 2] & 0xFF) | ((byteBuffer[(i * 2) + 1] & 0xFF) << 8);\n  }\n}\n\nconst LOOKUP = new Int32Array(2048);\nfunction unpackLookupTable(lookup: Int32Array, utfMap: string, utfRle: string): void {\n  for (let i = 0; i < 256; ++i) {\n    lookup[i] = i & 0x3F;\n    lookup[512 + i] = i >> 2;\n    lookup[1792 + i] = 2 + (i >> 6);\n  }\n  for (let i = 0; i < 128; ++i) {\n    lookup[1024 + i] = 4 * (utfMap.charCodeAt(i) - 32);\n  }\n  for (let i = 0; i < 64; ++i) {\n    lookup[1152 + i] = i & 1;\n    lookup[1216 + i] = 2 + (i & 1);\n  }\n  let offset = 1280;\n  for (let k = 0; k < 19; ++k) {\n    const value: number = k & 3;\n    const rep: number = utfRle.charCodeAt(k) - 32;\n    for (let i = 0; i < rep; ++i) {\n      lookup[offset++] = value;\n    }\n  }\n  for (let i = 0; i < 16; ++i) {\n    lookup[1792 + i] = 1;\n    lookup[2032 + i] = 6;\n  }\n  lookup[1792] = 0;\n  lookup[2047] = 7;\n  for (let i = 0; i < 256; ++i) {\n    lookup[1536 + i] = lookup[1792 + i] << 3;\n  }\n}\n{\n  unpackLookupTable(LOOKUP, \"         !!  !                  \\\"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# \", \"A/*  ':  & : $  \\x81 @\");\n}\n\nclass State {\n  ringBuffer = new Int8Array(0);\n  contextModes = new Int8Array(0);\n  contextMap = new Int8Array(0);\n  distContextMap = new Int8Array(0);\n  distExtraBits = new Int8Array(0);\n  output = new Int8Array(0);\n  byteBuffer = new Int8Array(0);\n  shortBuffer = new Int16Array(0);\n  intBuffer = new Int32Array(0);\n  rings = new Int32Array(0);\n  blockTrees = new Int32Array(0);\n  literalTreeGroup = new Int32Array(0);\n  commandTreeGroup = new Int32Array(0);\n  distanceTreeGroup = new Int32Array(0);\n  distOffset = new Int32Array(0);\n  accumulator64 = 0;\n  runningState = 0;\n  nextRunningState = 0;\n  accumulator32 = 0;\n  bitOffset = 0;\n  halfOffset = 0;\n  tailBytes = 0;\n  endOfStreamReached = 0;\n  metaBlockLength = 0;\n  inputEnd = 0;\n  isUncompressed = 0;\n  isMetadata = 0;\n  literalBlockLength = 0;\n  numLiteralBlockTypes = 0;\n  commandBlockLength = 0;\n  numCommandBlockTypes = 0;\n  distanceBlockLength = 0;\n  numDistanceBlockTypes = 0;\n  pos = 0;\n  maxDistance = 0;\n  distRbIdx = 0;\n  trivialLiteralContext = 0;\n  literalTreeIdx = 0;\n  commandTreeIdx = 0;\n  j = 0;\n  insertLength = 0;\n  contextMapSlice = 0;\n  distContextMapSlice = 0;\n  contextLookupOffset1 = 0;\n  contextLookupOffset2 = 0;\n  distanceCode = 0;\n  numDirectDistanceCodes = 0;\n  distancePostfixBits = 0;\n  distance = 0;\n  copyLength = 0;\n  maxBackwardDistance = 0;\n  maxRingBufferSize = 0;\n  ringBufferSize = 0;\n  expectedTotalSize = 0;\n  outputOffset = 0;\n  outputLength = 0;\n  outputUsed = 0;\n  ringBufferBytesWritten = 0;\n  ringBufferBytesReady = 0;\n  isEager = 0;\n  isLargeWindow = 0;\n  cdNumChunks = 0;\n  cdTotalSize = 0;\n  cdBrIndex = 0;\n  cdBrOffset = 0;\n  cdBrLength = 0;\n  cdBrCopied = 0;\n  cdChunks = new Array(0);\n  cdChunkOffsets = new Int32Array(0);\n  cdBlockBits = 0;\n  cdBlockMap = new Int8Array(0);\n  input = new InputStream(new Int8Array(0));\n  constructor () {\n    this.ringBuffer = new Int8Array(0);\n    this.rings = new Int32Array(10);\n    this.rings[0] = 16;\n    this.rings[1] = 15;\n    this.rings[2] = 11;\n    this.rings[3] = 4;\n  }\n}\n\nlet data = new Int8Array(0);\nconst offsets = new Int32Array(32);\nconst sizeBits = new Int32Array(32);\nfunction setData(newData: ByteBuffer, newSizeBits: Int32Array): void {\n  const dictionaryOffsets: Int32Array = offsets;\n  const dictionarySizeBits: Int32Array = sizeBits;\n  for (let i = 0; i < newSizeBits.length; ++i) {\n    dictionarySizeBits[i] = newSizeBits[i];\n  }\n  let pos = 0;\n  for (let i = 0; i < newSizeBits.length; ++i) {\n    dictionaryOffsets[i] = pos;\n    const bits: number = dictionarySizeBits[i];\n    if (bits !== 0) {\n      pos += i << (bits & 31);\n    }\n  }\n  for (let i: number = newSizeBits.length; i < 32; ++i) {\n    dictionaryOffsets[i] = pos;\n  }\n  data = newData;\n}\n\nfunction unpackDictionaryData(dictionary: ByteBuffer, data0: string, data1: string, skipFlip: string, sizeBits: Int32Array, sizeBitsData: string): void {\n  const dict: Int8Array = toUsAsciiBytes(data0 + data1);\n  const skipFlipRunes: Int32Array = toUtf8Runes(skipFlip);\n  let offset = 0;\n  const n: number = skipFlipRunes.length >> 1;\n  for (let i = 0; i < n; ++i) {\n    const skip: number = skipFlipRunes[2 * i] - 36;\n    const flip: number = skipFlipRunes[2 * i + 1] - 36;\n    for (let j = 0; j < skip; ++j) {\n      dict[offset] = dict[offset] ^ 3;\n      offset++;\n    }\n    for (let j = 0; j < flip; ++j) {\n      dict[offset] = dict[offset] ^ 236;\n      offset++;\n    }\n  }\n  for (let i = 0; i < sizeBitsData.length; ++i) {\n    sizeBits[i] = sizeBitsData.charCodeAt(i) - 65;\n  }\n  dictionary.set(dict);\n}\n{\n  const dictionaryData = new Int8Array(122784);\n  const dictionarySizeBits = new Int32Array(25);\n  // typo:off\n  unpackDictionaryData(dictionaryData, \"wjnfgltmojefofewab`h`lgfgbwbpkltlmozpjwf`jwzlsfmivpwojhfeqfftlqhwf{wzfbqlufqalgzolufelqnallhsobzojufojmfkfosklnfpjgfnlqftlqgolmdwkfnujftejmgsbdfgbzpevookfbgwfqnfb`kbqfbeqlnwqvfnbqhbaofvslmkjdkgbwfobmgmftpfufmmf{w`bpfalwkslpwvpfgnbgfkbmgkfqftkbwmbnfOjmhaoldpjyfabpfkfognbhfnbjmvpfq$*#(klogfmgptjwkMftpqfbgtfqfpjdmwbhfkbufdbnfpffm`boosbwktfoosovpnfmvejonsbqwiljmwkjpojpwdllgmffgtbzptfpwilapnjmgboploldlqj`kvpfpobpwwfbnbqnzellghjmdtjoofbpwtbqgafpwejqfSbdfhmltbtbz-smdnlufwkbmolbgdjufpfoemlwfnv`keffgnbmzql`hj`lmlm`follhkjgfgjfgKlnfqvofklpwbib{jmel`ovaobtpofppkboeplnfpv`kylmf233&lmfp`bqfWjnfqb`faovfelvqtffheb`fklsfdbufkbqgolpwtkfmsbqhhfswsbpppkjsqllnKWNOsobmWzsfglmfpbufhffseobdojmhplogejufwllhqbwfwltmivnswkvpgbqh`bqgejofefbqpwbzhjoowkbweboobvwlfufq-`lnwbohpklsulwfgffsnlgfqfpwwvqmalqmabmgefooqlpfvqo+phjmqlof`lnfb`wpbdfpnffwdlog-isdjwfnubqzefowwkfmpfmggqlsUjft`lsz2-3!?,b=pwlsfopfojfpwlvqsb`h-djesbpw`pp<dqbznfbm%dw8qjgfpklwobwfpbjgqlbgubq#effoilkmqj`hslqwebpw$VB.gfbg?,a=sllqajoowzsfV-P-tllgnvpw1s{8JmelqbmhtjgftbmwtbooofbgX3^8sbvotbufpvqf'+$ tbjwnbppbqnpdlfpdbjmobmdsbjg\\\"..#ol`hvmjwqllwtbohejqntjef{no!plmdwfpw13s{hjmgqltpwlloelmwnbjopbefpwbqnbsp`lqfqbjmeoltabazpsbmpbzp7s{85s{8bqwpellwqfbotjhjkfbwpwfswqjslqd,obhftfbhwlogElqn`bpwebmpabmhufqzqvmpivozwbph2s{8dlbodqftpoltfgdfjg>!pfwp6s{8-ip<73s{je#+pllmpfbwmlmfwvafyfqlpfmwqffgeb`wjmwldjewkbqn2;s{`bnfkjooalogyllnuljgfbpzqjmdejoosfbhjmjw`lpw0s{8ib`hwbdpajwpqloofgjwhmftmfbq?\\\"..dqltIPLMgvwzMbnfpbofzlv#olwpsbjmibyy`logfzfpejpkttt-qjphwbapsqfu23s{qjpf16s{Aovfgjmd033/abooelqgfbqmtjogal{-ebjqob`hufqpsbjqivmfwf`kje+\\\"sj`hfujo'+! tbqnolqgglfpsvoo/333jgfbgqbtkvdfpslwevmgavqmkqfe`foohfzpwj`hklvqolppevfo21s{pvjwgfboQPP!bdfgdqfzDFW!fbpfbjnpdjqobjgp;s{8mbuzdqjgwjsp :::tbqpobgz`bqp*8#~sks<kfoowbootklnyk9\\t),\\x0E\\t#233kboo-\\t\\tB4s{8svpk`kbw3s{8`qft),?,kbpk46s{eobwqbqf#%%#wfoo`bnslmwlobjgnjppphjswfmwejmfnbofdfwpsolw733/\\x0E\\t\\x0E\\t`lloeffw-sks?aq=fqj`nlpwdvjgafoogfp`kbjqnbwkbwln,jnd% ;1ov`h`fmw3338wjmzdlmfkwnopfoogqvdEQFFmlgfmj`h<jg>olpfmvooubpwtjmgQPP#tfbqqfozaffmpbnfgvhfmbpb`bsftjpkdvoeW109kjwppolwdbwfhj`haovqwkfz26s{$$*8*8!=npjftjmpajqgplqwafwbpffhW2;9lqgpwqffnboo53s{ebqn\\x0ElupalzpX3^-$*8!SLPWafbqhjgp*8~~nbqzwfmg+VH*rvbgyk9\\n.pjy....sqls$*8\\x0EojewW2:9uj`fbmgzgfaw=QPPsllomf`haoltW259gllqfuboW249ofwpebjolqbosloomlub`lopdfmf#\\x0Elxplewqlnfwjooqlpp?k0=slvqebgfsjmh?wq=njmj*\\x7F\\\"+njmfyk9\\x04abqpkfbq33*8njoh#..=jqlmeqfggjphtfmwpljosvwp,ip,klozW119JPAMW139bgbnpffp?k1=iplm$/#$`lmwW129#QPPollsbpjbnllm?,s=plvoOJMFelqw`bqwW279?k2=;3s{\\\"..?:s{8W379njhf975Ymj`fjm`kZlqhqj`fyk9\\b$**8svqfnbdfsbqbwlmfalmg904Y\\\\le\\\\$^*8333/yk9\\x0Bwbmhzbqgaltoavpk965YIbub03s{\\t\\x7F~\\t&@0&907YifeeF[SJ`bpkujpbdloepmltyk9\\x05rvfq-`pppj`hnfbwnjm-ajmggfookjqfsj`pqfmw905YKWWS.132elwltloeFMG#{al{967YALGZgj`h8\\t~\\tf{jw906Yubqpafbw$~*8gjfw:::8bmmf~~?,Xj^-Obmdhn.^tjqfwlzpbggppfbobof{8\\t\\n~f`klmjmf-lqd336*wlmziftppbmgofdpqlle333*#133tjmfdfbqgldpallwdbqz`vwpwzofwfnswjlm-{no`l`hdbmd'+$-63s{Sk-Gnjp`bobmolbmgfphnjofqzbmvmj{gjp`*8~\\tgvpw`ojs*-\\t\\t43s{.133GUGp4^=?wbsfgfnlj((*tbdffvqlskjolswpklofEBRpbpjm.15WobapsfwpVQO#avoh`llh8~\\x0E\\tKFBGX3^*baaqivbm+2:;ofpkwtjm?,j=plmzdvzpev`hsjsf\\x7F.\\t\\\"331*mgltX2^8X^8\\tOld#pbow\\x0E\\t\\n\\nabmdwqjnabwk*x\\x0E\\t33s{\\t~*8hl9\\0effpbg=\\x0Ep9,,#X^8wloosovd+*x\\tx\\x0E\\t#-ip$133sgvboalbw-ISD*8\\t~rvlw*8\\t\\t$*8\\t\\x0E\\t~\\x0E1327132613251324132;132:13131312131113101317131613151314131;131:130313021301130013071306130513041320132113221323133:133;133413351336133713301331133213332:::2::;2::42::52::62::72::02::12::22::32:;:2:;;2:;42:;52:;62:;72:;02:;12:;22:;32:4:2:4;2:442:452:462:472:402:412:422:432:5:2:5;2:542:552:562:572:502:512:522:532:6:2:6;2:642:652:662:672:602:612:622:632333231720:73333::::`lnln/Mpfpwffpwbsfqlwlglkb`f`bgbb/]lajfmg/Abbp/Aujgb`bpllwqlelqlplollwqb`vbogjilpjgldqbmwjslwfnbgfafbodlrv/Efpwlmbgbwqfpsl`l`bpbabilwlgbpjmlbdvbsvfpvmlpbmwfgj`fovjpfoobnbzlylmbbnlqsjpllaqb`oj`foolgjlpklqb`bpj<[<\\\\<Q<\\\\<R<P=l<\\\\=l=o=n<\\\\<Q<Y<S<R<R=n<T<[<Q<R<X<R=n<R<Z<Y<R<Q<T=i<q<\\\\<Y<Y<]=g<P=g<~=g=m<R<^=g<^<R<q<R<R<]<s<R<W<T<Q<T<L<H<q<Y<p=g=n=g<r<Q<T<P<X<\\\\<{<\\\\<x<\\\\<q=o<r<]=n<Y<t<[<Y<U<Q=o<P<P<N=g=o<Z5m5f4O5j5i4K5i4U5o5h4O5d4]4C5f4K5m5e5k5d5h5i5h5o4K5d5h5k4D4_4K5h4I5j5k5f4O5f5n4C5k5h4G5i4D5k5h5d5h5f4D5h4K5f4D5o4X5f4K5i4O5i5j4F4D5f5h5j4A4D5k5i5i4X5d4Xejqpwujgflojdkwtlqognfgjbtkjwf`olpfaob`hqjdkwpnbooallhpsob`fnvpj`ejfoglqgfqsljmwubovfofufowbaofalbqgklvpfdqlvstlqhpzfbqppwbwfwlgbztbwfqpwbqwpwzofgfbwksltfqsklmfmjdkwfqqlqjmsvwbalvwwfqnpwjwofwllopfufmwol`bowjnfpobqdftlqgpdbnfppklqwpsb`fel`vp`ofbqnlgfoaol`hdvjgfqbgjlpkbqftlnfmbdbjmnlmfzjnbdfmbnfpzlvmdojmfpobwfq`lolqdqffmeqlmw%bns8tbw`kelq`fsqj`fqvofpafdjmbewfqujpjwjppvfbqfbpafoltjmgf{wlwboklvqpobafosqjmwsqfppavjowojmhppsffgpwvgzwqbgfelvmgpfmpfvmgfqpkltmelqnpqbmdfbggfgpwjoonlufgwbhfmbalufeobpkej{fglewfmlwkfqujftp`kf`hofdboqjufqjwfnprvj`hpkbsfkvnbmf{jpwdljmdnlujfwkjqgabpj`sfb`fpwbdftjgwkoldjmjgfbptqlwfsbdfpvpfqpgqjufpwlqfaqfbhplvwkulj`fpjwfpnlmwktkfqfavjogtkj`kfbqwkelqvnwkqffpslqwsbqwz@oj`holtfqojufp`obppobzfqfmwqzpwlqzvpbdfplvmg`lvqwzlvq#ajqwkslsvswzsfpbssozJnbdfafjmdvssfqmlwfpfufqzpkltpnfbmpf{wqbnbw`kwqb`hhmltmfbqozafdbmpvsfqsbsfqmlqwkofbqmdjufmmbnfgfmgfgWfqnpsbqwpDqlvsaqbmgvpjmdtlnbmebopfqfbgzbvgjlwbhfptkjof-`ln,ojufg`bpfpgbjoz`kjogdqfbwivgdfwklpfvmjwpmfufqaqlbg`lbpw`lufqbssofejofp`z`ofp`fmfsobmp`oj`htqjwfrvffmsjf`ffnbjoeqbnflogfqsklwlojnjw`b`kf`jujop`boffmwfqwkfnfwkfqfwlv`kalvmgqlzbobphfgtklofpjm`fpwl`h#mbnfebjwkkfbqwfnswzleefqp`lsfltmfgnjdkwboavnwkjmhaollgbqqbznbilqwqvpw`bmlmvmjlm`lvmwubojgpwlmfPwzofOldjmkbsszl``vqofew9eqfpkrvjwfejonpdqbgfmffgpvqabmejdkwabpjpklufqbvwl8qlvwf-kwnonj{fgejmboZlvq#pojgfwlsj`aqltmbolmfgqbtmpsojwqfb`kQjdkwgbwfpnbq`krvlwfdllgpOjmhpglvawbpzm`wkvnaboolt`kjfezlvwkmlufo23s{8pfqufvmwjokbmgp@kf`hPsb`frvfqzibnfpfrvbowtj`f3/333Pwbqwsbmfoplmdpqlvmgfjdkwpkjewtlqwkslpwpofbgptffhpbuljgwkfpfnjofpsobmfpnbqwboskbsobmwnbqhpqbwfpsobzp`objnpbofpwf{wppwbqptqlmd?,k0=wkjmd-lqd,nvowjkfbqgSltfqpwbmgwlhfmplojg+wkjpaqjmdpkjsppwbeewqjfg`boopevoozeb`wpbdfmwWkjp#,,..=bgnjmfdzswFufmw26s{8Fnbjowqvf!`qlpppsfmwaoldpal{!=mlwfgofbuf`kjmbpjyfpdvfpw?,k7=qlalwkfbuzwqvf/pfufmdqbmg`qjnfpjdmpbtbqfgbm`fskbpf=?\\\"..fm\\\\VP% 0:8133s{\\\\mbnfobwjmfmilzbib{-bwjlmpnjwkV-P-#klogpsfwfqjmgjbmbu!=`kbjmp`lqf`lnfpgljmdsqjlqPkbqf2::3pqlnbmojpwpibsbmeboopwqjboltmfqbdqff?,k1=bavpfbofqwlsfqb!.,,T`bqgpkjoopwfbnpSklwlwqvwk`ofbm-sks<pbjmwnfwboolvjpnfbmwsqlleaqjfeqlt!=dfmqfwqv`hollhpUbovfEqbnf-mfw,..=\\t?wqz#x\\tubq#nbhfp`lpwpsobjmbgvowrvfpwwqbjmobalqkfosp`bvpfnbdj`nlwlqwkfjq163s{ofbpwpwfsp@lvmw`lvogdobpppjgfpevmgpklwfobtbqgnlvwknlufpsbqjpdjufpgvw`kwf{bpeqvjwmvoo/\\x7F\\x7FX^8wls!=\\t?\\\"..SLPW!l`fbm?aq,=eollqpsfbhgfswk#pjyfabmhp`bw`k`kbqw13s{8bojdmgfboptlvog63s{8vqo>!sbqhpnlvpfNlpw#---?,bnlmdaqbjmalgz#mlmf8abpfg`bqqzgqbewqfefqsbdf\\\\klnf-nfwfqgfobzgqfbnsqlufiljmw?,wq=gqvdp?\\\"..#bsqjojgfboboofmf{b`welqwk`lgfpoldj`Ujft#pffnpaobmhslqwp#+133pbufg\\\\ojmhdlbopdqbmwdqffhklnfpqjmdpqbwfg03s{8tklpfsbqpf+*8!#Aol`hojmv{ilmfpsj{fo$*8!=*8je+.ofewgbujgklqpfEl`vpqbjpfal{fpWqb`hfnfmw?,fn=abq!=-pq`>wltfqbow>!`baofkfmqz17s{8pfwvsjwbozpkbqsnjmlqwbpwftbmwpwkjp-qfpfwtkffodjqop,`pp,233&8`ovappwveeajaofulwfp#2333hlqfb~*8\\x0E\\tabmgprvfvf>#x~8;3s{8`hjmdx\\x0E\\t\\n\\nbkfbg`ol`hjqjpkojhf#qbwjlpwbwpElqn!zbkll*X3^8Balvwejmgp?,k2=gfavdwbphpVQO#>`foop~*+*821s{8sqjnfwfoopwvqmp3{533-isd!psbjmafb`kwb{fpnj`qlbmdfo..=?,djewppwfuf.ojmhalgz-~*8\\t\\nnlvmw#+2::EBR?,qldfqeqbmh@obpp1;s{8effgp?k2=?p`lwwwfpwp11s{8gqjmh*#\\x7F\\x7F#oftjppkboo 30:8#elq#olufgtbpwf33s{8ib9\\x0Fnpjnlm?elmwqfsoznffwpvmwfq`kfbswjdkwAqbmg*#\\\">#gqfpp`ojspqllnplmhfznlajonbjm-Mbnf#sobwfevmmzwqffp`ln,!2-isdtnlgfsbqbnPWBQWofew#jggfm/#132*8\\t~\\telqn-ujqvp`kbjqwqbmptlqpwSbdfpjwjlmsbw`k?\\\"..\\tl.`b`ejqnpwlvqp/333#bpjbmj((*xbglaf$*X3^jg>23alwk8nfmv#-1-nj-smd!hfujm`lb`k@kjogaqv`f1-isdVQO*(-isd\\x7Fpvjwfpoj`fkbqqz213!#ptffwwq=\\x0E\\tmbnf>gjfdlsbdf#ptjpp..=\\t\\t eee8!=Old-`ln!wqfbwpkffw*#%%#27s{8poffsmwfmwejofgib9\\x0Fojg>!`Mbnf!tlqpfpklwp.al{.gfowb\\t%ow8afbqp97;Y?gbwb.qvqbo?,b=#psfmgabhfqpklsp>#!!8sks!=`wjlm20s{8aqjbmkfoolpjyf>l>&1E#iljmnbzaf?jnd#jnd!=/#eipjnd!#!*X3^NWlsAWzsf!mftozGbmph`yf`kwqbjohmltp?,k6=ebr!=yk.`m23*8\\t.2!*8wzsf>aovfpwqvozgbujp-ip$8=\\x0E\\t?\\\"pwffo#zlv#k1=\\x0E\\telqn#ifpvp233&#nfmv-\\x0E\\t\\n\\x0E\\ttbofpqjphpvnfmwggjmda.ojhwfb`kdje!#ufdbpgbmphffpwjpkrjspvlnjplaqfgfpgffmwqfwlglpsvfgfb/]lpfpw/Mwjfmfkbpwblwqlpsbqwfglmgfmvfulkb`fqelqnbnjpnlnfilqnvmglbrv/Ag/Abpp/_olbzvgbef`kbwlgbpwbmwlnfmlpgbwlplwqbppjwjlnv`klbklqbovdbqnbzlqfpwlpklqbpwfmfqbmwfpelwlpfpwbpsb/Apmvfubpbovgelqlpnfgjlrvjfmnfpfpslgfq`kjofpfq/Muf`fpgf`jqilp/Efpwbqufmwbdqvslkf`klfoolpwfmdlbnjdl`lpbpmjufodfmwfnjpnbbjqfpivojlwfnbpkb`jbebulqivmjlojaqfsvmwlavfmlbvwlqbaqjoavfmbwf{wlnbqylpbafqojpwbovfdl`/_nlfmfqlivfdlsfq/Vkbafqfpwlzmvm`bnvifqubolqevfqbojaqldvpwbjdvboulwlp`bplpdv/Absvfglplnlpbujplvpwfggfafmml`kfavp`bebowbfvqlppfqjfgj`kl`vqpl`obuf`bpbpof/_msobylobqdllaqbpujpwbbslzlivmwlwqbwbujpwl`qfbq`bnslkfnlp`jm`l`bqdlsjplplqgfmkb`fm/Mqfbgjp`lsfgql`fq`bsvfgbsbsfonfmlq/Vwjo`obqlilqdf`boofslmfqwbqgfmbgjfnbq`bpjdvffoobppjdol`l`kfnlwlpnbgqf`obpfqfpwlmj/]lrvfgbsbpbqabm`lkjilpujbifsbaol/Epwfujfmfqfjmlgfibqelmgl`bmbomlqwfofwqb`bvpbwlnbqnbmlpovmfpbvwlpujoobufmglsfpbqwjslpwfmdbnbq`loofubsbgqfvmjglubnlpylmbpbnalpabmgbnbqjbbavplnv`kbpvajqqjlibujujqdqbgl`kj`bboo/Ailufmgj`kbfpwbmwbofppbojqpvfolsfplpejmfpoobnbavp`l/Epwboofdbmfdqlsobybkvnlqsbdbqivmwbglaofjpobpalopbab/]lkbaobov`kb/mqfbgj`fmivdbqmlwbpuboofboo/M`bqdbglolqbabilfpw/Edvpwlnfmwfnbqjlejqnb`lpwlej`kbsobwbkldbqbqwfpofzfpbrvfonvpflabpfpsl`lpnjwbg`jfol`kj`lnjfgldbmbqpbmwlfwbsbgfafpsobzbqfgfppjfwf`lqwf`lqfbgvgbpgfpflujfilgfpfbbdvbp%rvlw8glnbjm`lnnlmpwbwvpfufmwpnbpwfqpzpwfnb`wjlmabmmfqqfnlufp`qloovsgbwfdolabonfgjvnejowfqmvnafq`kbmdfqfpvowsvaoj`p`qffm`kllpfmlqnbowqbufojppvfpplvq`fwbqdfwpsqjmdnlgvofnlajofptjw`ksklwlpalqgfqqfdjlmjwpfoepl`jbob`wjuf`lovnmqf`lqgelooltwjwof=fjwkfqofmdwkebnjozeqjfmgobzlvwbvwklq`qfbwfqfujftpvnnfqpfqufqsobzfgsobzfqf{sbmgsloj`zelqnbwglvaofsljmwppfqjfpsfqplmojujmdgfpjdmnlmwkpelq`fpvmjrvftfjdkwsflsoffmfqdzmbwvqfpfbq`kejdvqfkbujmd`vpwlnleepfwofwwfqtjmgltpvanjwqfmgfqdqlvspvsolbgkfbowknfwklgujgflpp`klloevwvqfpkbgltgfabwfubovfpLaif`wlwkfqpqjdkwpofbdvf`kqlnfpjnsofmlwj`fpkbqfgfmgjmdpfbplmqfslqwlmojmfprvbqfavwwlmjnbdfpfmbaofnlujmdobwfpwtjmwfqEqbm`fsfqjlgpwqlmdqfsfbwOlmglmgfwbjoelqnfggfnbmgpf`vqfsbppfgwlddofsob`fpgfuj`fpwbwj``jwjfppwqfbnzfooltbwwb`hpwqffweojdkwkjggfmjmel!=lsfmfgvpfevouboofz`bvpfpofbgfqpf`qfwpf`lmggbnbdfpslqwpf{`fswqbwjmdpjdmfgwkjmdpfeef`wejfogppwbwfpleej`fujpvbofgjwlqulovnfQfslqwnvpfvnnlujfpsbqfmwb``fppnlpwoznlwkfq!#jg>!nbqhfwdqlvmg`kbm`fpvqufzafelqfpznalonlnfmwpsff`knlwjlmjmpjgfnbwwfq@fmwfqlaif`wf{jpwpnjggofFvqlsfdqltwkofdb`znbmmfqfmlvdk`bqffqbmptfqlqjdjmslqwbo`ojfmwpfof`wqbmgln`olpfgwlsj`p`lnjmdebwkfqlswjlmpjnsozqbjpfgfp`bsf`klpfm`kvq`kgfejmfqfbplm`lqmfqlvwsvwnfnlqzjeqbnfsloj`fnlgfopMvnafqgvqjmdleefqppwzofphjoofgojpwfg`boofgpjoufqnbqdjmgfofwfafwwfqaqltpfojnjwpDolabopjmdoftjgdfw`fmwfqavgdfwmltqbs`qfgjw`objnpfmdjmfpbefwz`klj`fpsjqjw.pwzofpsqfbgnbhjmdmffgfgqvppjbsofbpff{wfmwP`qjswaqlhfmbooltp`kbqdfgjujgfeb`wlqnfnafq.abpfgwkflqz`lmejdbqlvmgtlqhfgkfosfg@kvq`kjnsb`wpklvogbotbzpoldl!#alwwlnojpw!=*xubq#sqfej{lqbmdfKfbgfq-svpk+`lvsofdbqgfmaqjgdfobvm`kQfujftwbhjmdujpjlmojwwofgbwjmdAvwwlmafbvwzwkfnfpelqdlwPfbq`kbm`klqbonlpwolbgfg@kbmdfqfwvqmpwqjmdqfolbgNlajofjm`lnfpvssozPlvq`flqgfqpujftfg%maps8`lvqpfBalvw#jpobmg?kwno#`llhjfmbnf>!bnbylmnlgfqmbguj`fjm?,b=9#Wkf#gjboldklvpfpAFDJM#Nf{j`lpwbqwp`fmwqfkfjdkwbggjmdJpobmgbppfwpFnsjqfP`kllofeelqwgjqf`wmfbqoznbmvboPfof`w-\\t\\tLmfiljmfgnfmv!=SkjojsbtbqgpkbmgofjnslqwLeej`fqfdbqgphjoopmbwjlmPslqwpgfdqfftffhoz#+f-d-afkjmggl`wlqolddfgvmjwfg?,a=?,afdjmpsobmwpbppjpwbqwjpwjppvfg033s{\\x7F`bmbgbbdfm`zp`kfnfqfnbjmAqbyjopbnsofoldl!=afzlmg.p`bofb``fswpfqufgnbqjmfEllwfq`bnfqb?,k2=\\t\\\\elqn!ofbufppwqfpp!#,=\\x0E\\t-dje!#lmolbgolbgfqL{elqgpjpwfqpvqujuojpwfmefnbofGfpjdmpjyf>!bssfbowf{w!=ofufopwkbmhpkjdkfqelq`fgbmjnbobmzlmfBeqj`bbdqffgqf`fmwSflsof?aq#,=tlmgfqsqj`fpwvqmfg\\x7F\\x7F#x~8nbjm!=jmojmfpvmgbztqbs!=ebjofg`fmpvpnjmvwfafb`lmrvlwfp263s{\\x7Ffpwbwfqfnlwffnbjo!ojmhfgqjdkw8pjdmboelqnbo2-kwnopjdmvssqjm`feolbw9-smd!#elqvn-B``fppsbsfqpplvmgpf{wfmgKfjdkwpojgfqVWE.;!%bns8#Afelqf-#TjwkpwvgjlltmfqpnbmbdfsqlejwiRvfqzbmmvbosbqbnpalvdkwebnlvpdlldofolmdfqj((*#xjpqbfopbzjmdgf`jgfklnf!=kfbgfqfmpvqfaqbm`ksjf`fpaol`h8pwbwfgwls!=?qb`jmdqfpjyf..%dw8sb`jwzpf{vboavqfbv-isd!#23/333lawbjmwjwofpbnlvmw/#Jm`-`lnfgznfmv!#ozqj`pwlgbz-jmgffg`lvmwz\\\\oldl-EbnjozollhfgNbqhfwopf#jeSobzfqwvqhfz*8ubq#elqfpwdjujmdfqqlqpGlnbjm~fopfxjmpfqwAold?,ellwfqoldjm-ebpwfqbdfmwp?algz#23s{#3sqbdnbeqjgbzivmjlqgloobqsob`fg`lufqpsovdjm6/333#sbdf!=alpwlm-wfpw+bubwbqwfpwfg\\\\`lvmwelqvnpp`kfnbjmgf{/ejoofgpkbqfpqfbgfqbofqw+bssfbqPvanjwojmf!=algz!=\\t)#WkfWklvdkpffjmdifqpfzMftp?,ufqjezf{sfqwjmivqztjgwk>@llhjfPWBQW#b`qlpp\\\\jnbdfwkqfbgmbwjufsl`hfwal{!=\\tPzpwfn#Gbujg`bm`fqwbaofpsqlufgBsqjo#qfboozgqjufqjwfn!=nlqf!=albqgp`lolqp`bnsvpejqpw#\\x7F\\x7F#X^8nfgjb-dvjwbqejmjpktjgwk9pkltfgLwkfq#-sks!#bppvnfobzfqptjoplmpwlqfpqfojfeptfgfm@vpwlnfbpjoz#zlvq#Pwqjmd\\t\\tTkjowbzolq`ofbq9qfplqweqfm`kwklvdk!*#(#!?algz=avzjmdaqbmgpNfnafqmbnf!=lssjmdpf`wlq6s{8!=upsb`fslpwfqnbilq#`leeffnbqwjmnbwvqfkbssfm?,mbu=hbmpbpojmh!=Jnbdfp>ebopftkjof#kpsb`f3%bns8#\\t\\tJm##sltfqSlophj.`lolqilqgbmAlwwlnPwbqw#.`lvmw1-kwnomftp!=32-isdLmojmf.qjdkwnjoofqpfmjlqJPAM#33/333#dvjgfpubovf*f`wjlmqfsbjq-{no!##qjdkwp-kwno.aol`hqfdF{s9klufqtjwkjmujqdjmsklmfp?,wq=\\x0Evpjmd#\\t\\nubq#=$*8\\t\\n?,wg=\\t?,wq=\\tabkbpbaqbpjodbofdlnbdzbqslophjpqsphj4]4C5d\\bTA\\nzk\\x0BBl\\bQ\\x7F\\x0BUm\\x05Gx\\bSM\\nmC\\bTA\\twQ\\nd}\\bW@\\bTl\\bTF\\ti@\\tcT\\x0BBM\\x0B|j\\x04BV\\tqw\\tcC\\bWI\\npa\\tfM\\n{Z\\x05{X\\bTF\\bVV\\bVK\\t\\x7Fm\\x04kF\\t[]\\bPm\\bTv\\nsI\\x0Bpg\\t[I\\bQp\\x04mx\\x0B_W\\n^M\\npe\\x0BQ}\\x0BGu\\nel\\npe\\x04Ch\\x04BV\\bTA\\tSo\\nzk\\x0BGL\\x0BxD\\nd[\\x05Jz\\x05MY\\bQp\\x04li\\nfl\\npC\\x05{B\\x05Nt\\x0BwT\\ti_\\bTg\\x04QQ\\n|p\\x0BXN\\bQS\\x0BxD\\x04QC\\bWZ\\tpD\\x0BVS\\bTW\\x05Nt\\x04Yh\\nzu\\x04Kj\\x05N}\\twr\\tHa\\n_D\\tj`\\x0BQ}\\x0BWp\\nxZ\\x04{c\\tji\\tBU\\nbD\\x04a|\\tTn\\tpV\\nZd\\nmC\\x0BEV\\x05{X\\tc}\\tTo\\bWl\\bUd\\tIQ\\tcg\\x0Bxs\\nXW\\twR\\x0Bek\\tc}\\t]y\\tJn\\nrp\\neg\\npV\\nz\\\\\\x05{W\\npl\\nz\\\\\\nzU\\tPc\\t`{\\bV@\\nc|\\bRw\\ti_\\bVb\\nwX\\tHv\\x04Su\\bTF\\x0B_W\\x0BWs\\x0BsI\\x05m\\x7F\\nTT\\ndc\\tUS\\t}f\\tiZ\\bWz\\tc}\\x04MD\\tBe\\tiD\\x0B@@\\bTl\\bPv\\t}t\\x04Sw\\x04M`\\x0BnU\\tkW\\x0Bed\\nqo\\x0BxY\\tA|\\bTz\\x0By`\\x04BR\\x04BM\\tia\\x04XU\\nyu\\x04n^\\tfL\\tiI\\nXW\\tfD\\bWz\\bW@\\tyj\\t\\x7Fm\\tav\\tBN\\x0Bb\\\\\\tpD\\bTf\\nY[\\tJn\\bQy\\t[^\\x0BWc\\x0Byu\\x04Dl\\x04CJ\\x0BWj\\x0BHR\\t`V\\x0BuW\\tQy\\np@\\x0BGu\\x05pl\\x04Jm\\bW[\\nLP\\nxC\\n`m\\twQ\\x05ui\\x05\\x7FR\\nbI\\twQ\\tBZ\\tWV\\x04BR\\npg\\tcg\\x05ti\\x04CW\\n_y\\tRg\\bQa\\x0BQB\\x0BWc\\nYb\\x05le\\ngE\\x04Su\\nL[\\tQ\\x7F\\tea\\tdj\\x0B]W\\nb~\\x04M`\\twL\\bTV\\bVH\\nt\\x7F\\npl\\t|b\\x05s_\\bU|\\bTa\\x04oQ\\x05lv\\x04Sk\\x04M`\\bTv\\x0BK}\\nfl\\tcC\\x04oQ\\x04BR\\tHk\\t|d\\bQp\\tHK\\tBZ\\x0BHR\\bPv\\x0BLx\\x0BEZ\\bT\\x7F\\bTv\\tiD\\x05oD\\x05MU\\x0BwB\\x04Su\\x05k`\\x04St\\ntC\\tPl\\tKg\\noi\\tjY\\x0BxY\\x04h}\\nzk\\bWZ\\t\\x7Fm\\x0Be`\\tTB\\tfE\\nzk\\t`z\\x04Yh\\nV|\\tHK\\tAJ\\tAJ\\bUL\\tp\\\\\\tql\\nYc\\x04Kd\\nfy\\x04Yh\\t[I\\x0BDg\\x04Jm\\n]n\\nlb\\bUd\\n{Z\\tlu\\tfs\\x04oQ\\bTW\\x04Jm\\x0BwB\\tea\\x04Yh\\x04BC\\tsb\\tTn\\nzU\\n_y\\x0BxY\\tQ]\\ngw\\x04mt\\tO\\\\\\ntb\\bWW\\bQy\\tmI\\tV[\\ny\\\\\\naB\\x0BRb\\twQ\\n]Q\\x04QJ\\bWg\\x0BWa\\bQj\\ntC\\bVH\\nYm\\x0Bxs\\bVK\\nel\\bWI\\x0BxY\\x04Cq\\ntR\\x0BHV\\bTl\\bVw\\tay\\bQa\\bVV\\t}t\\tdj\\nr|\\tp\\\\\\twR\\n{i\\nTT\\t[I\\ti[\\tAJ\\x0Bxs\\x0B_W\\td{\\x0BQ}\\tcg\\tTz\\tA|\\tCj\\x0BLm\\x05N}\\x05m\\x7F\\nbK\\tdZ\\tp\\\\\\t`V\\tsV\\np@\\tiD\\twQ\\x0BQ}\\bTf\\x05ka\\x04Jm\\x0B@@\\bV`\\tzp\\n@N\\x04Sw\\tiI\\tcg\\noi\\x04Su\\bVw\\x04lo\\x04Cy\\tc}\\x0Bb\\\\\\tsU\\x04BA\\bWI\\bTf\\nxS\\tVp\\nd|\\bTV\\x0BbC\\tNo\\x05Ju\\nTC\\t|`\\n{Z\\tD]\\bU|\\tc}\\x05lm\\bTl\\tBv\\tPl\\tc}\\bQp\\t\\x7Fm\\nLk\\tkj\\n@N\\x04Sb\\x04KO\\tj_\\tp\\\\\\nzU\\bTl\\bTg\\bWI\\tcf\\x04XO\\bWW\\ndz\\x04li\\tBN\\nd[\\bWO\\x04MD\\x0BKC\\tdj\\tI_\\bVV\\ny\\\\\\x0BLm\\x05xl\\txB\\tkV\\x0Bb\\\\\\x0BJW\\x0BVS\\tVx\\x0BxD\\td{\\x04MD\\bTa\\t|`\\x0BPz\\x04R}\\x0BWs\\x04BM\\nsI\\x04CN\\bTa\\x04Jm\\npe\\ti_\\npV\\nrh\\tRd\\tHv\\n~A\\nxR\\x0BWh\\x0BWk\\nxS\\x0BAz\\x0BwX\\nbI\\x04oQ\\tfw\\nqI\\nV|\\nun\\x05z\\x7F\\x0Bpg\\td\\\\\\x0BoA\\x05{D\\ti_\\x05xB\\bT\\x7F\\t`V\\x05qr\\tTT\\x04g]\\x04CA\\x0BuR\\tVJ\\tT`\\npw\\x0BRb\\tI_\\nCx\\x04Ro\\x0BsI\\x04Cj\\x04Kh\\tBv\\tWV\\x04BB\\x05oD\\x05{D\\nhc\\x04Km\\x0B^R\\tQE\\n{I\\np@\\nc|\\x05Gt\\tc}\\x04Dl\\nzU\\x05qN\\tsV\\x05k}\\tHh\\x0B|j\\nqo\\x05u|\\tQ]\\x0Bek\\x05\\x7FZ\\x04M`\\x04St\\npe\\tdj\\bVG\\x0BeE\\t\\x7Fm\\x0BWc\\x04|I\\n[W\\tfL\\bT\\x7F\\tBZ\\x04Su\\x0BKa\\x04Cq\\x05Nt\\x04Y[\\nqI\\bTv\\tfM\\ti@\\t}f\\x04B\\\\\\tQy\\x0BBl\\bWg\\x04XD\\x05kc\\x0Bx[\\bVV\\tQ]\\t\\x7Fa\\tPy\\x0BxD\\nfI\\t}f\\x05oD\\tdj\\tSG\\x05ls\\t~D\\x04CN\\n{Z\\t\\\\v\\n_D\\nhc\\x0Bx_\\x04C[\\tAJ\\nLM\\tVx\\x04CI\\tbj\\tc^\\tcF\\ntC\\x04Sx\\twr\\x04XA\\bU\\\\\\t|a\\x0BK\\\\\\bTV\\bVj\\nd|\\tfs\\x04CX\\ntb\\bRw\\tVx\\tAE\\tA|\\bT\\x7F\\x05Nt\\x0BDg\\tVc\\bTl\\x04d@\\npo\\t\\x7FM\\tcF\\npe\\tiZ\\tBo\\bSq\\nfH\\x04l`\\bTx\\bWf\\tHE\\x0BF{\\tcO\\tfD\\nlm\\x0BfZ\\nlm\\x0BeU\\tdG\\x04BH\\bTV\\tSi\\x05MW\\nwX\\nz\\\\\\t\\\\c\\x04CX\\nd}\\tl}\\bQp\\bTV\\tF~\\bQ\\x7F\\t`i\\ng@\\x05nO\\bUd\\bTl\\nL[\\twQ\\tji\\ntC\\t|J\\nLU\\naB\\x0BxY\\x04Kj\\tAJ\\x05uN\\ti[\\npe\\x04Sk\\x0BDg\\x0Bx]\\bVb\\bVV\\nea\\tkV\\nqI\\bTa\\x04Sk\\nAO\\tpD\\ntb\\nts\\nyi\\bVg\\ti_\\x0B_W\\nLk\\x05Nt\\tyj\\tfM\\x04R\\x7F\\tiI\\bTl\\x0BwX\\tsV\\x0BMl\\nyu\\tAJ\\bVj\\x04KO\\tWV\\x0BA}\\x0BW\\x7F\\nrp\\tiD\\x0B|o\\x05lv\\x0BsI\\x04BM\\td~\\tCU\\bVb\\x04eV\\npC\\x0BwT\\tj`\\tc}\\x0Bxs\\x0Bps\\x0Bvh\\tWV\\x0BGg\\x0BAe\\x0BVK\\x0B]W\\trg\\x0BWc\\x05F`\\tBr\\x0Bb\\\\\\tdZ\\bQp\\nqI\\x04kF\\nLk\\x0BAR\\bWI\\bTg\\tbs\\tdw\\n{L\\n_y\\tiZ\\bTA\\tlg\\bVV\\bTl\\tdk\\n`k\\ta{\\ti_\\x05{A\\x05wj\\twN\\x0B@@\\bTe\\ti_\\n_D\\twL\\nAH\\x0BiK\\x0Bek\\n[]\\tp_\\tyj\\bTv\\tUS\\t[r\\n{I\\nps\\x05Gt\\x0BVK\\npl\\x04S}\\x0BWP\\t|d\\x04MD\\x0BHV\\bT\\x7F\\x04R}\\x04M`\\bTV\\bVH\\x05lv\\x04Ch\\bW[\\x04Ke\\tR{\\x0B^R\\tab\\tBZ\\tVA\\tB`\\nd|\\nhs\\x04Ke\\tBe\\x04Oi\\tR{\\td\\\\\\x05nB\\bWZ\\tdZ\\tVJ\\x05Os\\t\\x7Fm\\x04uQ\\x0BhZ\\x04Q@\\x04QQ\\nfI\\bW[\\x04B\\\\\\x04li\\nzU\\nMd\\x04M`\\nxS\\bVV\\n\\\\}\\x0BxD\\t\\x7Fm\\bTp\\x04IS\\nc|\\tkV\\x05i~\\tV{\\x0BhZ\\t|b\\bWt\\n@R\\x0BoA\\x0BnU\\bWI\\tea\\tB`\\tiD\\tc}\\tTz\\x04BR\\x0BQB\\x05Nj\\tCP\\t[I\\bTv\\t`W\\x05uN\\x0Bpg\\x0Bpg\\x0BWc\\tiT\\tbs\\twL\\tU_\\tc\\\\\\t|h\\x0BKa\\tNr\\tfL\\nq|\\nzu\\nz\\\\\\tNr\\bUg\\t|b\\x04m`\\bTv\\nyd\\nrp\\bWf\\tUX\\x04BV\\nzk\\nd}\\twQ\\t}f\\x04Ce\\x0Bed\\bTW\\bSB\\nxU\\tcn\\bTb\\ne\\x7F\\ta\\\\\\tSG\\bU|\\npV\\nN\\\\\\x04Kn\\x0BnU\\tAt\\tpD\\x0B^R\\x0BIr\\x04b[\\tR{\\tdE\\x0BxD\\x0BWK\\x0BWA\\bQL\\bW@\\x04Su\\bUd\\nDM\\tPc\\x04CA\\x04Dl\\x04oQ\\tHs\\x05wi\\x04ub\\n\\x7Fa\\bQp\\x05Ob\\nLP\\bTl\\x04Y[\\x0BK}\\tAJ\\bQ\\x7F\\x04n^\\x0BsA\\bSM\\nqM\\bWZ\\n^W\\x0Bz{\\x04S|\\tfD\\bVK\\bTv\\bPv\\x04BB\\tCP\\x04dF\\tid\\x0Bxs\\x04mx\\x0Bws\\tcC\\ntC\\tyc\\x05M`\\x0BW\\x7F\\nrh\\bQp\\x0BxD\\x04\\\\o\\nsI\\x04_k\\nzu\\x04kF\\tfD\\x04Xs\\x04XO\\tjp\\bTv\\x04BS\\x05{B\\tBr\\nzQ\\nbI\\tc{\\x04BD\\x04BV\\x05nO\\bTF\\tca\\x05Jd\\tfL\\tPV\\tI_\\nlK\\x04`o\\twX\\npa\\tgu\\bP}\\x05{^\\bWf\\n{I\\tBN\\npa\\x04Kl\\x0Bpg\\tcn\\tfL\\x0Bvh\\x04Cq\\bTl\\x0BnU\\bSq\\x04Cm\\twR\\bUJ\\npe\\nyd\\nYg\\x04Cy\\x0BKW\\tfD\\nea\\x04oQ\\tj_\\tBv\\x04nM\\x0BID\\bTa\\nzA\\x05pl\\n]n\\bTa\\tR{\\tfr\\n_y\\bUg\\x05{X\\x05kk\\x0BxD\\x04|I\\x05xl\\nfy\\x04Ce\\x0BwB\\nLk\\x0Bd]\\noi\\n}h\\tQ]\\npe\\bVw\\x04Hk\\x04OQ\\nzk\\tAJ\\npV\\bPv\\ny\\\\\\tA{\\x04Oi\\bSB\\x04XA\\x0BeE\\tjp\\nq}\\tiD\\x05qN\\x0B^R\\t\\x7Fm\\tiZ\\tBr\\bVg\\noi\\n\\\\X\\tU_\\nc|\\x0BHV\\bTf\\tTn\\x04\\\\N\\x04\\\\N\\nuB\\x05lv\\nyu\\tTd\\bTf\\bPL\\x0B]W\\tdG\\nA`\\nw^\\ngI\\npe\\tdw\\nz\\\\\\x05ia\\bWZ\\tcF\\x04Jm\\n{Z\\bWO\\x04_k\\x04Df\\x04RR\\td\\\\\\bVV\\x0Bxs\\x04BN\\x05ti\\x04lm\\tTd\\t]y\\x0BHV\\tSo\\x0B|j\\x04XX\\tA|\\x0BZ^\\x0BGu\\bTW\\x05M`\\x04kF\\x0BhZ\\x0BVK\\tdG\\x0BBl\\tay\\nxU\\x05qE\\x05nO\\bVw\\nqI\\x04CX\\ne\\x7F\\tPl\\bWO\\x0BLm\\tdL\\x05uH\\x04Cm\\tdT\\x04fn\\x0BwB\\x05ka\\x0BnU\\n@M\\nyT\\tHv\\t\\\\}\\x04Kh\\td~\\x04Yh\\x05k}\\neR\\td\\\\\\bWI\\t|b\\tHK\\tiD\\bTW\\x05MY\\npl\\bQ_\\twr\\x0BAx\\tHE\\bTg\\bSq\\x05vp\\x0Bb\\\\\\bWO\\nOl\\nsI\\nfy\\x0BID\\t\\\\c\\n{Z\\n^~\\npe\\nAO\\tTT\\x0Bxv\\x04k_\\bWO\\x0B|j\\x0BwB\\tQy\\ti@\\tPl\\tHa\\tdZ\\x05k}\\x04ra\\tUT\\x0BJc\\x0Bed\\np@\\tQN\\nd|\\tkj\\tHk\\x04M`\\noi\\twr\\td\\\\\\nlq\\no_\\nlb\\nL[\\tac\\x04BB\\x04BH\\x04Cm\\npl\\tIQ\\bVK\\x0Bxs\\n`e\\x0BiK\\npa\\x04Oi\\tUS\\bTp\\tfD\\nPG\\x05kk\\x04XA\\nz\\\\\\neg\\x0BWh\\twR\\x05qN\\nqS\\tcn\\x04lo\\nxS\\n^W\\tBU\\nt\\x7F\\tHE\\tp\\\\\\tfF\\tfw\\bVV\\bW@\\tak\\x0BVK\\x05ls\\tVJ\\bVV\\x0BeE\\x04\\\\o\\nyX\\nYm\\x04M`\\x05lL\\nd|\\nzk\\tA{\\x05sE\\twQ\\x04XT\\nt\\x7F\\tPl\\t]y\\x0BwT\\x05{p\\x04MD\\x0Bb\\\\\\tQ]\\x04Kj\\tJn\\nAH\\x0BRb\\tBU\\tHK\\t\\\\c\\nfI\\x05m\\x7F\\nqM\\n@R\\tSo\\noi\\x04BT\\tHv\\n_y\\x04Kh\\tBZ\\t]i\\bUJ\\tV{\\x04Sr\\nbI\\x0BGg\\ta_\\bTR\\nfI\\nfl\\t[K\\tII\\x04S|\\x0BuW\\tiI\\bWI\\nqI\\x0B|j\\x04BV\\bVg\\bWZ\\x04kF\\x0Bx]\\bTA\\tab\\tfr\\ti@\\tJd\\tJd\\x0Bps\\nAO\\bTa\\x05xu\\tiD\\nzk\\t|d\\t|`\\bW[\\tlP\\tdG\\bVV\\x0Bw}\\x0BqO\\ti[\\bQ\\x7F\\bTz\\x0BVF\\twN\\x05ts\\tdw\\bTv\\neS\\ngi\\tNr\\x05yS\\npe\\bVV\\bSq\\n`m\\tyj\\tBZ\\x0BWX\\bSB\\tc\\\\\\nUR\\t[J\\tc_\\x04nM\\bWQ\\x0BAx\\nMd\\tBr\\x05ui\\x0BxY\\bSM\\x0BWc\\x0B|j\\x0Bxs\\t}Q\\tBO\\bPL\\bWW\\tfM\\nAO\\tPc\\x0BeU\\x04e^\\bTg\\nqI\\tac\\bPv\\tcF\\x04oQ\\tQ\\x7F\\x0BhZ\\x05ka\\nz\\\\\\tiK\\tBU\\n`k\\tCP\\x04S|\\x04M`\\n{I\\tS{\\x04_O\\tBZ\\x04Zi\\x04Sk\\tps\\tp\\\\\\nYu\\n]s\\nxC\\bWt\\nbD\\tkV\\x0BGu\\x05yS\\nqA\\t[r\\neK\\x04M`\\tdZ\\x05lL\\bUg\\bTl\\nbD\\tUS\\x0Bb\\\\\\tpV\\ncc\\x04S\\\\\\tct\\t`z\\bPL\\x0BWs\\nA`\\neg\\bSq\\x05uE\\x04CR\\x0BDg\\t`W\\x0Bz{\\x0BWc\\x04Sk\\x04Sk\\tbW\\bUg\\tea\\nxZ\\tiI\\tUX\\tVJ\\nqn\\tS{\\x0BRb\\bTQ\\npl\\x05Gt\\x0BuW\\x05uj\\npF\\nqI\\tfL\\t[I\\tia\\x04XO\\nyu\\x0BDg\\x0Bed\\tq{\\x04VG\\bQ\\x7F\\x05ka\\tVj\\tkV\\txB\\nd|\\np@\\tQN\\tPc\\tps\\x04]j\\tkV\\toU\\bTp\\nzU\\x05nB\\x0BB]\\ta{\\bV@\\n]n\\x04m`\\tcz\\tR{\\x04m`\\bQa\\x0BwT\\bSM\\x05MY\\x05qN\\tdj\\x05~s\\x0BQ}\\x05MY\\x0BMB\\tBv\\twR\\bRg\\x0BQ}\\tql\\x0BKC\\nrm\\x05xu\\x04CC\\x0BwB\\x0Bvh\\tBq\\x04Xq\\npV\\ti_\\x05Ob\\x05uE\\nbd\\nqo\\x0B{i\\nC~\\tBL\\x0BeE\\x05uH\\bVj\\x04Ey\\x04Gz\\x0BzR\\x0B{i\\tcf\\n{Z\\n]n\\x04XA\\x0BGu\\x0BnU\\thS\\x0BGI\\nCc\\tHE\\bTA\\tHB\\x04BH\\x04Cj\\nCc\\bTF\\tHE\\nXI\\tA{\\bQ\\x7F\\tc\\\\\\x0BmO\\x0BWX\\nfH\\np@\\x05MY\\bTF\\nlK\\tBt\\nzU\\tTT\\x04Km\\x0BwT\\npV\\ndt\\x0ByI\\tVx\\tQ\\x7F\\tRg\\tTd\\nzU\\bRS\\nLM\\twA\\x04nM\\tTn\\ndS\\t]g\\nLc\\x0BwB\\t}t\\t[I\\tCP\\x04kX\\x0BFm\\x0BhZ\\x05m\\x7F\\ti[\\np@\\x0BQ}\\x0BW\\x7F\\t|d\\nMO\\nMd\\tf_\\tfD\\tcJ\\tHz\\x0BRb\\tio\\tPy\\x04Y[\\nxU\\tct\\x0B@@\\tww\\bPv\\x04BM\\x04FF\\ntb\\x05v|\\x0BKm\\tBq\\tBq\\x04Kh\\x04`o\\nZd\\x04XU\\ti]\\t|`\\tSt\\x04B\\\\\\bQ\\x7F\\x0B_W\\tTJ\\nqI\\t|a\\tA{\\x0BuP\\x04MD\\tPl\\nxR\\tfL\\x0Bws\\tc{\\td\\\\\\bV`\\neg\\tHK\\x05kc\\nd|\\bVV\\ny\\\\\\x05kc\\ti]\\bVG\\t`V\\tss\\tI_\\tAE\\tbs\\tdu\\nel\\tpD\\x0BW\\x7F\\nqs\\x05lv\\bSM\\x04Zi\\x0BVK\\x05ia\\x0BQB\\tQ\\x7F\\n{Z\\bPt\\x0BKl\\nlK\\nhs\\ndS\\bVK\\x05mf\\nd^\\tkV\\tcO\\nc|\\bVH\\t\\\\]\\bTv\\bSq\\tmI\\x0BDg\\tVJ\\tcn\\ny\\\\\\bVg\\bTv\\nyX\\bTF\\t]]\\bTp\\noi\\nhs\\x0BeU\\nBf\\tdj\\x05Mr\\n|p\\t\\\\g\\t]r\\bVb\\x05{D\\nd[\\x04XN\\tfM\\tO\\\\\\x05s_\\tcf\\tiZ\\x04XN\\x0BWc\\tqv\\n`m\\tU^\\x05oD\\nd|\\x0BGg\\tdE\\x0Bwf\\x04lo\\x04u}\\nd|\\x05oQ\\t`i\\x04Oi\\x0BxD\\ndZ\\nCx\\x04Yw\\nzk\\ntb\\ngw\\tyj\\tB`\\nyX\\x0Bps\\ntC\\x0BpP\\x0Bqw\\bPu\\bPX\\tDm\\npw\\x05Nj\\tss\\taG\\x0Bxs\\bPt\\noL\\x04Gz\\tOk\\ti@\\ti]\\x04eC\\tIQ\\tii\\tdj\\x0B@J\\t|d\\x05uh\\bWZ\\x0BeU\\x0BnU\\bTa\\tcC\\x04g]\\nzk\\x04Yh\\bVK\\nLU\\np@\\ntb\\ntR\\tCj\\x0BNP\\ti@\\bP{\\n\\\\}\\n{c\\nwX\\tfL\\bVG\\tc{\\t|`\\tAJ\\t|C\\tfD\\x05ln\\t|d\\tbs\\nqI\\x05{B\\x0BAx\\np@\\nzk\\x0BRb\\x05Os\\x0BWS\\x04e^\\x0BD_\\tBv\\x0BWd\\bVb\\x0Bxs\\x0BeE\\bRw\\n]n\\n|p\\x0Bg|\\tfw\\x05kc\\bTI\\x05ka\\n\\\\T\\x04Sp\\tju\\x0Bps\\npe\\x05u|\\x0BGr\\bVe\\tCU\\x04]M\\x04XU\\x0BxD\\bTa\\tIQ\\x0BWq\\tCU\\tam\\tdj\\bSo\\x04Sw\\x0BnU\\x04Ch\\tQ]\\x05s_\\bPt\\tfS\\bTa\\t\\\\}\\n@O\\x04Yc\\tUZ\\bTx\\npe\\x0BnU\\nzU\\t|}\\tiD\\nz\\\\\\bSM\\x0BxD\\x04BR\\nzQ\\tQN\\x04]M\\x04Yh\\nLP\\x0BFm\\x0BLX\\x05vc\\x0Bql\\x05ka\\tHK\\bVb\\ntC\\nCy\\bTv\\nuV\\x04oQ\\t`z\\t[I\\tB`\\x0BRb\\tyj\\tsb\\x0BWs\\bTl\\tkV\\x0Bed\\ne\\x7F\\x05lL\\x0BxN\\t\\x7Fm\\nJn\\tjY\\x0BxD\\bVb\\bSq\\x0Byu\\twL\\x0BXL\\bTA\\tpg\\tAt\\tnD\\x04XX\\twR\\npl\\nhw\\x05yS\\nps\\tcO\\bW[\\x0B|j\\x04XN\\tsV\\tp\\\\\\tBe\\nb~\\nAJ\\n]e\\x05k`\\x05qN\\tdw\\tWV\\tHE\\x0BEV\\x05Jz\\tid\\tB`\\tzh\\x05E]\\tfD\\bTg\\x05qN\\bTa\\tja\\x04Cv\\bSM\\nhc\\bUe\\x05t_\\tie\\x04g]\\twQ\\nPn\\bVB\\tjw\\bVg\\x0BbE\\tBZ\\x0BRH\\bP{\\tjp\\n\\\\}\\ta_\\tcC\\t|a\\x0BD]\\tBZ\\ti[\\tfD\\x0BxW\\no_\\td\\\\\\n_D\\ntb\\t\\\\c\\tAJ\\nlK\\x04oQ\\x04lo\\x0BLx\\x0BM@\\bWZ\\x04Kn\\x0Bpg\\nTi\\nIv\\n|r\\x0B@}\\x05Jz\\x05Lm\\x05Wh\\x05k}\\x05ln\\x0BxD\\n]s\\x04gc\\x0Bps\\tBr\\bTW\\x0BBM\\x05tZ\\nBY\\x04DW\\tjf\\x0BSW\\x04C}\\nqo\\tdE\\tmv\\tIQ\\bPP\\bUb\\x05lv\\x04BC\\nzQ\\t[I\\x0Bgl\\nig\\bUs\\x04BT\\x0BbC\\bSq\\tsU\\tiW\\nJn\\tSY\\tHK\\trg\\npV\\x0BID\\x0B|j\\x04KO\\t`S\\t|a`vbmglfmujbqnbgqjgavp`bqjmj`jlwjfnslslqrvf`vfmwbfpwbglsvfgfmivfdlp`lmwqbfpw/Mmmlnaqfwjfmfmsfqejonbmfqbbnjdlp`jvgbg`fmwqlbvmrvfsvfgfpgfmwqlsqjnfqsqf`jlpfd/Vmavfmlpuloufqsvmwlppfnbmbkba/Abbdlpwlmvfulpvmjglp`bqolpfrvjslmj/]lpnv`klpbodvmb`lqqfljnbdfmsbqwjqbqqjabnbq/Abklnaqffnsoflufqgbg`bnajlnv`kbpevfqlmsbpbglo/Amfbsbqf`fmvfubp`vqplpfpwbabrvjfqlojaqlp`vbmwlb``fplnjdvfoubqjlp`vbwqlwjfmfpdqvslppfq/Mmfvqlsbnfgjlpeqfmwfb`fq`bgfn/Mplefqwb`l`kfpnlgfoljwbojbofwqbpbod/Vm`lnsqb`vbofpf{jpwf`vfqslpjfmglsqfmpboofdbqujbifpgjmfqlnvq`jbslgq/Msvfpwlgjbqjlsvfaolrvjfqfnbmvfosqlsjl`qjpjp`jfqwlpfdvqlnvfqwfevfmwf`fqqbqdqbmgffef`wlsbqwfpnfgjgbsqlsjbleqf`fwjfqqbf.nbjoubqjbpelqnbpevwvqllaifwlpfdvjqqjfpdlmlqnbpnjpnlp/Vmj`l`bnjmlpjwjlpqby/_mgfajglsqvfabwlofglwfm/Abifp/Vpfpsfql`l`jmblqjdfmwjfmgb`jfmwl`/Mgjykbaobqpfq/Abobwjmbevfqybfpwjoldvfqqbfmwqbq/E{jwlo/_sfybdfmgbu/Agflfujwbqsbdjmbnfwqlpibujfqsbgqfpe/M`jo`bafyb/Mqfbppbojgbfmu/Alibs/_mbavplpajfmfpwf{wlpoofubqsvfgbmevfqwf`ln/Vm`obpfpkvnbmlwfmjglajoablvmjgbgfpw/Mpfgjwbq`qfbgl<X<W=c=k=n<R<V<\\\\<V<T<W<T=a=n<R<^=m<Y<Y<_<R<S=l<T=n<\\\\<V<Y=e<Y=o<Z<Y<v<\\\\<V<]<Y<[<]=g<W<R<Q<T<~=m<Y<S<R<X<A=n<R=n<R<P=k<Y<P<Q<Y=n<W<Y=n=l<\\\\<[<R<Q<\\\\<_<X<Y<P<Q<Y<x<W=c<s=l<T<Q<\\\\=m<Q<T=i=n<Y<P<V=n<R<_<R<X<^<R=n=n<\\\\<P<M<D<|<P<\\\\=c<K=n<R<^<\\\\=m<^<\\\\<P<Y<P=o<N<\\\\<V<X<^<\\\\<Q<\\\\<P=a=n<T=a=n=o<~<\\\\<P=n<Y=i<S=l<R=n=o=n<Q<\\\\<X<X<Q=c<~<R=n=n=l<T<Q<Y<U<~<\\\\=m<Q<T<P=m<\\\\<P=n<R=n=l=o<]<r<Q<T<P<T=l<Q<Y<Y<r<r<r<W<T=j=a=n<\\\\<r<Q<\\\\<Q<Y<P<X<R<P<P<R<U<X<^<Y<R<Q<R=m=o<X\\fHy\\fIk\\fHU\\fId\\fHy\\fIl\\fHT\\fIk\\fHy\\fHR\\fHy\\fIg\\fHx\\fH\\\\\\fHF\\fH\\\\\\fHD\\fIk\\fHc\\fHy\\fHy\\fHS\\fHA\\fIl\\fHk\\fHT\\fHy\\fH\\\\\\fHH\\fIg\\fHU\\fIg\\fHj\\fHF\\fHU\\fIl\\fHC\\fHU\\fHC\\fHR\\fHH\\fHy\\fHI\\fHRibdqbm\\fHj\\fHp\\fHp\\fIg\\fHi\\fH@\\fHJ\\fIg\\fH{\\fHd\\fHp\\fHR\\fH{\\fHc\\fHU\\fHB\\fHk\\fHD\\fHY\\fHU\\fHC\\fIk\\fHI\\fIk\\fHI\\fIl\\fHt\\fH\\\\\\fHp\\fH@\\fHJ\\fIl\\fHy\\fHd\\fHp\\fIl\\fHY\\fIk\\fHD\\fHd\\fHD\\fHc\\fHU\\fH\\\\\\fHe\\fHT\\fHB\\fIk\\fHy\\fHB\\fHY\\fIg\\fH^\\fIk\\fHT\\fH@\\fHB\\fHd\\fHJ\\fIk\\fH\\x7F\\fH\\\\\\fHj\\fHB\\fH@\\fHT\\fHA\\fH\\\\\\fH@\\fHD\\fHv\\fH^\\fHB\\fHD\\fHj\\fH{\\fHT\\fIl\\fH^\\fIl4U5h5e4I5h5e5k4\\\\4K4N4B4]4U4C4C4K5h5e5k4\\\\5k4Y5d4]4V5f4]5o4K5j5d5h4K4D5f5j4U4]4Z4\\\\5h5o5k5j4K5f5d5i5n4K5h4U5h5f4K5j4K5h5o5j4A4F5e5n4D5h5d4A4E4K4B4]5m5n4[4U4D4C4]5o5j4I4\\\\4K5o5i4K4K4A4C4I5h4K5m5f5k4D4U4Z5o5f5m4D4A4G5d5i5j5d5k5d4O5j4K4@4C4K5h5k4K4_5h5i4U5j4C5h5f4_4U4D4]4Y5h5e5i5j4\\\\4D5k4K4O5j5k5i4G5h5o5j4F4K5h4K4A5f4G5i4Y4]4X4]4A4A5d5h5d5m5f4K4\\\\4K5h5o5h5i4]4E4K5j4F4K5h5m4O4D5d4B4K4Y4O5j4F4K5j5k4K5h5f4U4Z5d5d5n4C4K4D5j4B5f4]4D5j4F5h5o5i4X4K4M5d5k5f4K4D5d5n4Y4Y5d5i4K4]5n5i4O4A4C5j4A5j4U4C5i4]4O5f4K4A4E5o4F4D4C5d5j5f4@4D5i5j5k4F4A4F4@5k4E4_5j4E5f4F5i5o4]4E4V4^4E5j5m4_4D5f4F5h5h5k5h5j4K4F5h5o5n5h4D5h5i4K4U5j5k4O5d5h4X5f4M5j5d4]4O5i4K5m5f5o4D5o5h4\\\\4K4F4]4F4D4D4O5j5k5i4_4K5j5o4D5f4U5m5n4C4A4_5j5h5k5i4X4U4]4O5k5h4X5k4]5n4[4]4[5h4Dsqlejofpfquj`fgfebvowkjnpfoegfwbjop`lmwfmwpvsslqwpwbqwfgnfppbdfpv``fppebpkjlm?wjwof=`lvmwqzb``lvmw`qfbwfgpwlqjfpqfpvowpqvmmjmdsql`fpptqjwjmdlaif`wpujpjaoftfo`lnfbqwj`ofvmhmltmmfwtlqh`lnsbmzgzmbnj`aqltpfqsqjub`zsqlaofnPfquj`fqfpsf`wgjpsobzqfrvfpwqfpfquftfapjwfkjpwlqzeqjfmgplswjlmptlqhjmdufqpjlmnjoojlm`kbmmfotjmglt-bggqfppujpjwfgtfbwkfq`lqqf`wsqlgv`wfgjqf`welqtbqgzlv#`bmqfnlufgpvaif`w`lmwqlobq`kjuf`vqqfmwqfbgjmdojaqbqzojnjwfgnbmbdfqevqwkfqpvnnbqznb`kjmfnjmvwfpsqjubwf`lmwf{wsqldqbnpl`jfwzmvnafqptqjwwfmfmbaofgwqjddfqplvq`fpolbgjmdfofnfmwsbqwmfqejmboozsfqef`wnfbmjmdpzpwfnphffsjmd`vowvqf%rvlw8/ilvqmbosqlif`wpvqeb`fp%rvlw8f{sjqfpqfujftpabobm`fFmdojpk@lmwfmwwkqlvdkSofbpf#lsjmjlm`lmwb`wbufqbdfsqjnbqzujoobdfPsbmjpkdboofqzgf`ojmfnffwjmdnjppjlmslsvobqrvbojwznfbpvqfdfmfqbopsf`jfppfppjlmpf`wjlmtqjwfqp`lvmwfqjmjwjboqfslqwpejdvqfpnfnafqpklogjmdgjpsvwffbqojfqf{sqfppgjdjwbosj`wvqfBmlwkfqnbqqjfgwqbeej`ofbgjmd`kbmdfg`fmwqbouj`wlqzjnbdfp,qfbplmppwvgjfpefbwvqfojpwjmdnvpw#afp`kllopUfqpjlmvpvboozfsjplgfsobzjmddqltjmdlaujlvplufqobzsqfpfmwb`wjlmp?,vo=\\x0E\\ttqbssfqboqfbgz`fqwbjmqfbojwzpwlqbdfbmlwkfqgfphwlsleefqfgsbwwfqmvmvpvboGjdjwbo`bsjwboTfapjwfebjovqf`lmmf`wqfgv`fgBmgqljggf`bgfpqfdvobq#%bns8#bmjnbopqfofbpfBvwlnbwdfwwjmdnfwklgpmlwkjmdSlsvobq`bswjlmofwwfqp`bswvqfp`jfm`foj`fmpf`kbmdfpFmdobmg>2%bns8Kjpwlqz#>#mft#@fmwqbovsgbwfgPsf`jboMfwtlqhqfrvjqf`lnnfmwtbqmjmd@loofdfwlloabqqfnbjmpaf`bvpffof`wfgGfvwp`kejmbm`ftlqhfqprvj`hozafwtffmf{b`wozpfwwjmdgjpfbpfPl`jfwztfbslmpf{kjajw%ow8\\\"..@lmwqlo`obppfp`lufqfglvwojmfbwwb`hpgfuj`fp+tjmgltsvqslpfwjwof>!Nlajof#hjoojmdpkltjmdJwbojbmgqlssfgkfbujozfeef`wp.2$^*8\\t`lmejqn@vqqfmwbgubm`fpkbqjmdlsfmjmdgqbtjmdajoojlmlqgfqfgDfqnbmzqfobwfg?,elqn=jm`ovgftkfwkfqgfejmfgP`jfm`f`bwboldBqwj`ofavwwlmpobqdfpwvmjelqnilvqmfzpjgfabq@kj`bdlklojgbzDfmfqbosbppbdf/%rvlw8bmjnbwfeffojmdbqqjufgsbppjmdmbwvqboqlvdkoz-\\t\\tWkf#avw#mlwgfmpjwzAqjwbjm@kjmfpfob`h#lewqjavwfJqfobmg!#gbwb.eb`wlqpqf`fjufwkbw#jpOjaqbqzkvpabmgjm#eb`wbeebjqp@kbqofpqbgj`boaqlvdkwejmgjmdobmgjmd9obmd>!qfwvqm#ofbgfqpsobmmfgsqfnjvnsb`hbdfBnfqj`bFgjwjlm^%rvlw8Nfppbdfmffg#wlubovf>!`lnsof{ollhjmdpwbwjlmafojfufpnboofq.nlajofqf`lqgptbmw#wlhjmg#leEjqfel{zlv#bqfpjnjobqpwvgjfgnb{jnvnkfbgjmdqbsjgoz`ojnbwfhjmdglnfnfqdfgbnlvmwpelvmgfgsjlmffqelqnvobgzmbpwzklt#wl#Pvsslqwqfufmvff`lmlnzQfpvowpaqlwkfqplogjfqobqdfoz`boojmd-%rvlw8B``lvmwFgtbqg#pfdnfmwQlafqw#feelqwpSb`jej`ofbqmfgvs#tjwkkfjdkw9tf#kbufBmdfofpmbwjlmp\\\\pfbq`kbssojfgb`rvjqfnbppjufdqbmwfg9#ebopfwqfbwfgajddfpwafmfejwgqjujmdPwvgjfpnjmjnvnsfqkbspnlqmjmdpfoojmdjp#vpfgqfufqpfubqjbmw#qlof>!njppjmdb`kjfufsqlnlwfpwvgfmwplnflmff{wqfnfqfpwlqfalwwln9fuloufgboo#wkfpjwfnbsfmdojpktbz#wl##Bvdvpwpznalop@lnsbmznbwwfqpnvpj`bobdbjmpwpfqujmd~*+*8\\x0E\\tsbznfmwwqlvaof`lm`fsw`lnsbqfsbqfmwpsobzfqpqfdjlmpnlmjwlq#$$Wkf#tjmmjmdf{solqfbgbswfgDboofqzsqlgv`fbajojwzfmkbm`f`bqffqp*-#Wkf#`loof`wPfbq`k#bm`jfmwf{jpwfgellwfq#kbmgofqsqjmwfg`lmplofFbpwfqmf{slqwptjmgltp@kbmmfojoofdbomfvwqbopvddfpw\\\\kfbgfqpjdmjmd-kwno!=pfwwofgtfpwfqm`bvpjmd.tfahjw`objnfgIvpwj`f`kbswfquj`wjnpWklnbp#nlyjoobsqlnjpfsbqwjfpfgjwjlmlvwpjgf9ebopf/kvmgqfgLoznsj`\\\\avwwlmbvwklqpqfb`kfg`kqlmj`gfnbmgppf`lmgpsqlwf`wbglswfgsqfsbqfmfjwkfqdqfbwozdqfbwfqlufqboojnsqluf`lnnbmgpsf`jbopfbq`k-tlqpkjsevmgjmdwklvdkwkjdkfpwjmpwfbgvwjojwzrvbqwfq@vowvqfwfpwjmd`ofbqozf{slpfgAqltpfqojafqbo~#`bw`kSqlif`wf{bnsofkjgf+*8EolqjgbbmptfqpbooltfgFnsfqlqgfefmpfpfqjlvpeqffglnPfufqbo.avwwlmEvqwkfqlvw#le#\\\">#mvoowqbjmfgGfmnbqhuljg+3*,boo-ipsqfufmwQfrvfpwPwfskfm\\t\\tTkfm#lapfquf?,k1=\\x0E\\tNlgfqm#sqlujgf!#bow>!alqgfqp-\\t\\tElq#\\t\\tNbmz#bqwjpwpsltfqfgsfqelqnej`wjlmwzsf#lenfgj`bowj`hfwplsslpfg@lvm`jotjwmfppivpwj`fDflqdf#Afodjvn---?,b=wtjwwfqmlwbaoztbjwjmdtbqebqf#Lwkfq#qbmhjmdskqbpfpnfmwjlmpvqujufp`klobq?,s=\\x0E\\t#@lvmwqzjdmlqfgolpp#leivpw#bpDflqdjbpwqbmdf?kfbg=?pwlssfg2$^*8\\x0E\\tjpobmgpmlwbaofalqgfq9ojpw#le`bqqjfg233/333?,k0=\\t#pfufqboaf`lnfppfof`w#tfggjmd33-kwnonlmbq`klee#wkfwfb`kfqkjdkoz#ajloldzojef#lelq#fufmqjpf#le%qbrvl8sovplmfkvmwjmd+wklvdkGlvdobpiljmjmd`jq`ofpElq#wkfBm`jfmwUjfwmbnufkj`ofpv`k#bp`qzpwboubovf#>Tjmgltpfmilzfgb#pnboobppvnfg?b#jg>!elqfjdm#Boo#qjklt#wkfGjpsobzqfwjqfgkltfufqkjggfm8abwwofppffhjmd`bajmfwtbp#mlwollh#bw`lmgv`wdfw#wkfIbmvbqzkbssfmpwvqmjmdb9klufqLmojmf#Eqfm`k#ob`hjmdwzsj`bof{wqb`wfmfnjfpfufm#jedfmfqbwgf`jgfgbqf#mlw,pfbq`kafojfep.jnbdf9ol`bwfgpwbwj`-oldjm!=`lmufqwujlofmwfmwfqfgejqpw!=`jq`vjwEjmobmg`kfnjpwpkf#tbp23s{8!=bp#pv`kgjujgfg?,psbm=tjoo#afojmf#leb#dqfbwnzpwfqz,jmgf{-eboojmdgvf#wl#qbjotbz`loofdfnlmpwfqgfp`fmwjw#tjwkmv`ofbqIftjpk#sqlwfpwAqjwjpkeoltfqpsqfgj`wqfelqnpavwwlm#tkl#tbpof`wvqfjmpwbmwpvj`jgfdfmfqj`sfqjlgpnbqhfwpPl`jbo#ejpkjmd`lnajmfdqbskj`tjmmfqp?aq#,=?az#wkf#MbwvqboSqjub`z`llhjfplvw`lnfqfploufPtfgjpkaqjfeozSfqpjbmpl#nv`k@fmwvqzgfsj`wp`lovnmpklvpjmdp`qjswpmf{w#wlafbqjmdnbssjmdqfujpfgiRvfqz+.tjgwk9wjwof!=wllowjsPf`wjlmgfpjdmpWvqhjpkzlvmdfq-nbw`k+~*+*8\\t\\tavqmjmdlsfqbwfgfdqffpplvq`f>Qj`kbqg`olpfozsobpwj`fmwqjfp?,wq=\\x0E\\t`lolq9 vo#jg>!slppfppqloojmdskzpj`pebjojmdf{f`vwf`lmwfpwojmh#wlGfebvow?aq#,=\\t9#wqvf/`kbqwfqwlvqjpn`obppj`sql`ffgf{sobjm?,k2=\\x0E\\tlmojmf-<{no#ufkfosjmdgjbnlmgvpf#wkfbjqojmffmg#..=*-bwwq+qfbgfqpklpwjmd eeeeeeqfbojyfUjm`fmwpjdmbop#pq`>!,Sqlgv`wgfpsjwfgjufqpfwfoojmdSvaoj`#kfog#jmIlpfsk#wkfbwqfbeef`wp?pwzof=b#obqdfglfpm$wobwfq/#Fofnfmwebuj`lm`qfbwlqKvmdbqzBjqslqwpff#wkfpl#wkbwNj`kbfoPzpwfnpSqldqbnp/#bmg##tjgwk>f%rvlw8wqbgjmdofew!=\\tsfqplmpDlogfm#Beebjqpdqbnnbqelqnjmdgfpwqlzjgfb#le`bpf#lelogfpw#wkjp#jp-pq`#>#`bqwllmqfdjpwq@lnnlmpNvpojnpTkbw#jpjm#nbmznbqhjmdqfufbopJmgffg/frvbooz,pklt\\\\blvwgllqfp`bsf+Bvpwqjbdfmfwj`pzpwfn/Jm#wkf#pjwwjmdKf#boplJpobmgpB`bgfnz\\t\\n\\n?\\\"..Gbmjfo#ajmgjmdaol`h!=jnslpfgvwjojyfBaqbkbn+f{`fswxtjgwk9svwwjmd*-kwno+\\x7F\\x7F#X^8\\tGBWBX#)hjw`kfmnlvmwfgb`wvbo#gjbof`wnbjmoz#\\\\aobmh$jmpwboof{sfqwpje+wzsfJw#bopl%`lsz8#!=Wfqnpalqm#jmLswjlmpfbpwfqmwbohjmd`lm`fqmdbjmfg#lmdljmdivpwjez`qjwj`peb`wlqzjwp#ltmbppbvowjmujwfgobpwjmdkjp#ltmkqfe>!,!#qfo>!gfufols`lm`fqwgjbdqbngloobqp`ovpwfqsks<jg>bo`lklo*8~*+*8vpjmd#b=?psbm=ufppfopqfujuboBggqfppbnbwfvqbmgqljgboofdfgjoomfpptbohjmd`fmwfqprvbojeznbw`kfpvmjejfgf{wjm`wGfefmpfgjfg#jm\\t\\n?\\\"..#`vpwlnpojmhjmdOjwwof#Allh#lefufmjmdnjm-ip<bqf#wkfhlmwbhwwlgbz$p-kwno!#wbqdfw>tfbqjmdBoo#Qjd8\\t~*+*8qbjpjmd#Bopl/#`qv`jbobalvw!=gf`obqf..=\\t?p`ejqfel{bp#nv`kbssojfpjmgf{/#p/#avw#wzsf#>#\\t\\x0E\\t?\\\"..wltbqgpQf`lqgpSqjubwfElqfjdmSqfnjfq`klj`fpUjqwvboqfwvqmp@lnnfmwSltfqfgjmojmf8slufqwz`kbnafqOjujmd#ulovnfpBmwklmzoldjm!#QfobwfgF`lmlnzqfb`kfp`vwwjmddqbujwzojef#jm@kbswfq.pkbgltMlwbaof?,wg=\\x0E\\t#qfwvqmpwbgjvntjgdfwpubqzjmdwqbufopkfog#aztkl#bqftlqh#jmeb`vowzbmdvobqtkl#kbgbjqslqwwltm#le\\t\\tPlnf#$`oj`h$`kbqdfphfztlqgjw#tjoo`jwz#le+wkjp*8Bmgqft#vmjrvf#`kf`hfglq#nlqf033s{8#qfwvqm8qpjlm>!sovdjmptjwkjm#kfqpfoePwbwjlmEfgfqboufmwvqfsvaojpkpfmw#wlwfmpjlmb`wqfpp`lnf#wlejmdfqpGvhf#lesflsof/f{soljwtkbw#jpkbqnlmzb#nbilq!9!kwwsjm#kjp#nfmv!=\\tnlmwkozleej`fq`lvm`jodbjmjmdfufm#jmPvnnbqzgbwf#leolzbowzejwmfppbmg#tbpfnsfqlqpvsqfnfPf`lmg#kfbqjmdQvppjbmolmdfpwBoafqwbobwfqbopfw#le#pnboo!=-bssfmggl#tjwkefgfqboabmh#leafmfbwkGfpsjwf@bsjwbodqlvmgp*/#bmg#sfq`fmwjw#eqln`olpjmd`lmwbjmJmpwfbgejewffmbp#tfoo-zbkll-qfpslmgejdkwfqlap`vqfqfeof`wlqdbmj`>#Nbwk-fgjwjmdlmojmf#sbggjmdb#tkloflmfqqlqzfbq#lefmg#le#abqqjfqtkfm#jwkfbgfq#klnf#leqfpvnfgqfmbnfgpwqlmd=kfbwjmdqfwbjmp`olvgeqtbz#le#Nbq`k#2hmltjmdjm#sbqwAfwtffmofpplmp`olpfpwujqwvboojmhp!=`qlppfgFMG#..=ebnlvp#btbqgfgOj`fmpfKfbowk#ebjqoz#tfbowkznjmjnboBeqj`bm`lnsfwfobafo!=pjmdjmdebqnfqpAqbpjo*gjp`vppqfsob`fDqfdlqzelmw#`lsvqpvfgbssfbqpnbhf#vsqlvmgfgalwk#leaol`hfgpbt#wkfleej`fp`lolvqpje+gl`vtkfm#kffmelq`fsvpk+evBvdvpw#VWE.;!=Ebmwbpzjm#nlpwjmivqfgVpvboozebqnjmd`olpvqflaif`w#gfefm`fvpf#le#Nfgj`bo?algz=\\tfujgfmwaf#vpfghfz@lgfpj{wffmJpobnj` 333333fmwjqf#tjgfoz#b`wjuf#+wzsflelmf#`bm`lolq#>psfbhfqf{wfmgpSkzpj`pwfqqbjm?walgz=evmfqboujftjmdnjggof#`qj`hfwsqlskfwpkjewfggl`wlqpQvppfoo#wbqdfw`lnsb`wbodfaqbpl`jbo.avoh#lenbm#bmg?,wg=\\t#kf#ofew*-ubo+*ebopf*8oldj`boabmhjmdklnf#wlmbnjmd#Bqjylmb`qfgjwp*8\\t~*8\\telvmgfqjm#wvqm@loojmpafelqf#Avw#wkf`kbqdfgWjwof!=@bswbjmpsfoofgdlggfppWbd#..=Bggjmd9avw#tbpQf`fmw#sbwjfmwab`h#jm>ebopf%Ojm`lomtf#hmlt@lvmwfqIvgbjpnp`qjsw#bowfqfg$^*8\\t##kbp#wkfvm`ofbqFufmw$/alwk#jmmlw#boo\\t\\t?\\\"..#sob`jmdkbqg#wl#`fmwfqplqw#le`ojfmwppwqffwpAfqmbqgbppfqwpwfmg#wlebmwbpzgltm#jmkbqalvqEqffglniftfoqz,balvw--pfbq`kofdfmgpjp#nbgfnlgfqm#lmoz#lmlmoz#wljnbdf!#ojmfbq#sbjmwfqbmg#mlwqbqfoz#b`qlmzngfojufqpklqwfq33%bns8bp#nbmztjgwk>!,)#?\\\"X@wjwof#>le#wkf#oltfpw#sj`hfg#fp`bsfgvpfp#lesflsofp#Svaoj`Nbwwkftwb`wj`pgbnbdfgtbz#elqobtp#lefbpz#wl#tjmgltpwqlmd##pjnsof~`bw`k+pfufmwkjmelal{tfmw#wlsbjmwfg`jwjyfmJ#glm$wqfwqfbw-#Plnf#tt-!*8\\talnajmdnbjowl9nbgf#jm-#Nbmz#`bqqjfp\\x7F\\x7Fx~8tjtlqh#lepzmlmzngfefbwpebulqfglswj`bosbdfWqbvmofpp#pfmgjmdofew!=?`lnP`lqBoo#wkfiRvfqz-wlvqjpw@obppj`ebopf!#Tjokfonpvavqapdfmvjmfajpklsp-psojw+dolabo#elooltpalgz#lemlnjmbo@lmwb`wpf`vobqofew#wl`kjfeoz.kjggfm.abmmfq?,oj=\\t\\t-#Tkfm#jm#alwkgjpnjppF{solqfbotbzp#ujb#wkfpsb/]lotfoebqfqvojmd#bqqbmdf`bswbjmkjp#plmqvof#lekf#wllhjwpfoe/>3%bns8+`boofgpbnsofpwl#nbhf`ln,sbdNbqwjm#Hfmmfgzb``fswpevoo#lekbmgofgAfpjgfp,,..=?,baof#wlwbqdfwpfppfm`fkjn#wl#jwp#az#`lnnlm-njmfqbowl#wbhftbzp#wlp-lqd,obgujpfgsfmbowzpjnsof9je#wkfzOfwwfqpb#pklqwKfqafqwpwqjhfp#dqlvsp-ofmdwkeojdkwplufqobspoltoz#ofppfq#pl`jbo#?,s=\\t\\n\\njw#jmwlqbmhfg#qbwf#levo=\\x0E\\t##bwwfnswsbjq#lenbhf#jwHlmwbhwBmwlmjlkbujmd#qbwjmdp#b`wjufpwqfbnpwqbssfg!*-`pp+klpwjofofbg#wlojwwof#dqlvsp/Sj`wvqf..=\\x0E\\t\\x0E\\t#qltp>!#laif`wjmufqpf?ellwfq@vpwlnU=?_,p`qploujmd@kbnafqpobufqztlvmgfgtkfqfbp\\\">#$vmgelq#boosbqwoz#.qjdkw9Bqbajbmab`hfg#`fmwvqzvmjw#lenlajof.Fvqlsf/jp#klnfqjph#legfpjqfg@ojmwlm`lpw#lebdf#le#af`lnf#mlmf#les%rvlw8Njggof#fbg$*X3@qjwj`ppwvgjlp=%`lsz8dqlvs!=bppfnaonbhjmd#sqfppfgtjgdfw-sp9!#<#qfavjowaz#plnfElqnfq#fgjwlqpgfobzfg@bmlmj`kbg#wkfsvpkjmd`obpp>!avw#bqfsbqwjboAbazolmalwwln#`bqqjfq@lnnbmgjwp#vpfBp#tjwk`lvqpfpb#wkjqggfmlwfpbopl#jmKlvpwlm13s{8!=b``vpfgglvaof#dlbo#leEbnlvp#*-ajmg+sqjfpwp#Lmojmfjm#Ivozpw#(#!d`lmpvowgf`jnbokfosevoqfujufgjp#ufqzq$($jswolpjmd#efnbofpjp#boplpwqjmdpgbzp#lebqqjuboevwvqf#?laif`welq`jmdPwqjmd+!#,=\\t\\n\\nkfqf#jpfm`lgfg-##Wkf#aboollmglmf#az,`lnnlmad`lolqobt#le#Jmgjbmbbuljgfgavw#wkf1s{#0s{irvfqz-bewfq#bsloj`z-nfm#bmgellwfq.>#wqvf8elq#vpfp`qffm-Jmgjbm#jnbdf#>ebnjoz/kwws9,,#%maps8gqjufqpfwfqmbopbnf#bpmlwj`fgujftfqp~*+*8\\t#jp#nlqfpfbplmpelqnfq#wkf#mftjp#ivpw`lmpfmw#Pfbq`ktbp#wkftkz#wkfpkjssfgaq=?aq=tjgwk9#kfjdkw>nbgf#le`vjpjmfjp#wkbwb#ufqz#Bgnjqbo#ej{fg8mlqnbo#NjppjlmSqfpp/#lmwbqjl`kbqpfwwqz#wl#jmubgfg>!wqvf!psb`jmdjp#nlpwb#nlqf#wlwboozeboo#le~*8\\x0E\\t##jnnfmpfwjnf#jmpfw#lvwpbwjpezwl#ejmggltm#wlolw#le#Sobzfqpjm#Ivmfrvbmwvnmlw#wkfwjnf#wlgjpwbmwEjmmjpkpq`#>#+pjmdof#kfos#leDfqnbm#obt#bmgobafofgelqfpwp`llhjmdpsb`f!=kfbgfq.tfoo#bpPwbmofzaqjgdfp,dolabo@qlbwjb#Balvw#X3^8\\t##jw/#bmgdqlvsfgafjmd#b*xwkqltkf#nbgfojdkwfqfwkj`boEEEEEE!alwwln!ojhf#b#fnsolzpojuf#jmbp#pffmsqjmwfqnlpw#leva.ojmhqfif`wpbmg#vpfjnbdf!=pv``ffgeffgjmdMv`ofbqjmelqnbwl#kfosTlnfm$pMfjwkfqNf{j`bmsqlwfjm?wbaof#az#nbmzkfbowkzobtpvjwgfujpfg-svpk+xpfoofqppjnsoz#Wkqlvdk-`llhjf#Jnbdf+logfq!=vp-ip!=#Pjm`f#vmjufqpobqdfq#lsfm#wl\\\"..#fmgojfp#jm$^*8\\x0E\\t##nbqhfwtkl#jp#+!GLN@lnbmbdfglmf#elqwzsfle#Hjmdglnsqlejwpsqlslpfwl#pklt`fmwfq8nbgf#jwgqfppfgtfqf#jmnj{wvqfsqf`jpfbqjpjmdpq`#>#$nbhf#b#pf`vqfgAbswjpwulwjmd#\\t\\n\\nubq#Nbq`k#1dqft#vs@ojnbwf-qfnlufphjoofgtbz#wkf?,kfbg=eb`f#leb`wjmd#qjdkw!=wl#tlqhqfgv`fpkbp#kbgfqf`wfgpklt+*8b`wjlm>allh#lebm#bqfb>>#!kww?kfbgfq\\t?kwno=`lmelqneb`jmd#`llhjf-qfoz#lmklpwfg#-`vpwlnkf#tfmwavw#elqpsqfbg#Ebnjoz#b#nfbmplvw#wkfelqvnp-ellwbdf!=Nlajo@ofnfmwp!#jg>!bp#kjdkjmwfmpf..=?\\\"..efnbof#jp#pffmjnsojfgpfw#wkfb#pwbwfbmg#kjpebpwfpwafpjgfpavwwlm\\\\alvmgfg!=?jnd#Jmelal{fufmwp/b#zlvmdbmg#bqfMbwjuf#`kfbsfqWjnflvwbmg#kbpfmdjmfptlm#wkf+nlpwozqjdkw9#ejmg#b#.alwwlnSqjm`f#bqfb#lenlqf#lepfbq`k\\\\mbwvqf/ofdboozsfqjlg/obmg#lelq#tjwkjmgv`fgsqlujmdnjppjofol`boozBdbjmpwwkf#tbzh%rvlw8s{8!=\\x0E\\tsvpkfg#babmglmmvnfqbo@fqwbjmJm#wkjpnlqf#jmlq#plnfmbnf#jpbmg/#jm`qltmfgJPAM#3.`qfbwfpL`wlafqnbz#mlw`fmwfq#obwf#jmGfefm`ffmb`wfgtjpk#wlaqlbgoz`llojmdlmolbg>jw-#Wkfqf`lufqNfnafqpkfjdkw#bppvnfp?kwno=\\tsflsof-jm#lmf#>tjmgltellwfq\\\\b#dllg#qfhobnblwkfqp/wl#wkjp\\\\`llhjfsbmfo!=Olmglm/gfejmfp`qvpkfgabswjpn`lbpwbopwbwvp#wjwof!#nluf#wlolpw#jmafwwfq#jnsojfpqjuboqzpfqufqp#PzpwfnSfqkbspfp#bmg#`lmwfmgeoltjmdobpwfg#qjpf#jmDfmfpjpujft#leqjpjmd#pffn#wlavw#jm#ab`hjmdkf#tjoodjufm#bdjujmd#`jwjfp-eolt#le#Obwfq#boo#avwKjdktbzlmoz#azpjdm#lekf#glfpgjeefqpabwwfqz%bns8obpjmdofpwkqfbwpjmwfdfqwbhf#lmqfevpfg`boofg#>VP%bnsPff#wkfmbwjufpaz#wkjppzpwfn-kfbg#le9klufq/ofpajbmpvqmbnfbmg#boo`lnnlm,kfbgfq\\\\\\\\sbqbnpKbqubqg,sj{fo-qfnlubopl#olmdqlof#leiljmwozphzp`qbVmj`lgfaq#,=\\x0E\\tBwobmwbmv`ofvp@lvmwz/svqfoz#`lvmw!=fbpjoz#avjog#blm`oj`hb#djufmsljmwfqk%rvlw8fufmwp#fopf#x\\tgjwjlmpmlt#wkf/#tjwk#nbm#tkllqd,Tfalmf#bmg`buboqzKf#gjfgpfbwwof33/333#xtjmgltkbuf#wlje+tjmgbmg#jwpplofoz#n%rvlw8qfmftfgGfwqljwbnlmdpwfjwkfq#wkfn#jmPfmbwlqVp?,b=?Hjmd#leEqbm`jp.sqlgv`kf#vpfgbqw#bmgkjn#bmgvpfg#azp`lqjmdbw#klnfwl#kbufqfobwfpjajojwzeb`wjlmAveebolojmh!=?tkbw#kfeqff#wl@jwz#le`lnf#jmpf`wlqp`lvmwfglmf#gbzmfqulvpprvbqf#~8je+dljm#tkbwjnd!#bojp#lmozpfbq`k,wvfpgbzollpfozPlolnlmpf{vbo#.#?b#kqnfgjvn!GL#MLW#Eqbm`f/tjwk#b#tbq#bmgpf`lmg#wbhf#b#=\\x0E\\t\\x0E\\t\\x0E\\tnbqhfw-kjdktbzglmf#jm`wjujwz!obpw!=laojdfgqjpf#wl!vmgfejnbgf#wl#Fbqoz#sqbjpfgjm#jwp#elq#kjpbwkofwfIvsjwfqZbkll\\\"#wfqnfg#pl#nbmzqfbooz#p-#Wkf#b#tlnbm<ubovf>gjqf`w#qjdkw!#aj`z`ofb`jmd>!gbz#bmgpwbwjmdQbwkfq/kjdkfq#Leej`f#bqf#mltwjnfp/#tkfm#b#sbz#elqlm#wkjp.ojmh!=8alqgfqbqlvmg#bmmvbo#wkf#Mftsvw#wkf-`ln!#wbhjm#wlb#aqjfe+jm#wkfdqlvsp-8#tjgwkfmyznfppjnsof#jm#obwfxqfwvqmwkfqbszb#sljmwabmmjmdjmhp!=\\t+*8!#qfb#sob`f_v330@bbalvw#bwq=\\x0E\\t\\n\\n``lvmw#djufp#b?P@QJSWQbjotbzwkfnfp,wlloal{AzJg+!{kvnbmp/tbw`kfpjm#plnf#je#+tj`lnjmd#elqnbwp#Vmgfq#avw#kbpkbmgfg#nbgf#azwkbm#jmefbq#legfmlwfg,jeqbnfofew#jmulowbdfjm#fb`kb%rvlw8abpf#leJm#nbmzvmgfqdlqfdjnfpb`wjlm#?,s=\\x0E\\t?vpwlnUb8%dw8?,jnslqwplq#wkbwnlpwoz#%bns8qf#pjyf>!?,b=?,kb#`obppsbppjufKlpw#>#TkfwkfqefqwjofUbqjlvp>X^8+ev`bnfqbp,=?,wg=b`wp#bpJm#plnf=\\x0E\\t\\x0E\\t?\\\"lqdbmjp#?aq#,=Afjijmd`bwbo/Lgfvwp`kfvqlsfvfvphbqbdbfjodfpufmphbfpsb/]bnfmpbifvpvbqjlwqbabiln/E{j`ls/Mdjmbpjfnsqfpjpwfnbl`wvaqfgvqbmwfb/]bgjqfnsqfpbnlnfmwlmvfpwqlsqjnfqbwqbu/Epdqb`jbpmvfpwqbsql`fplfpwbglp`bojgbgsfqplmbm/Vnfqlb`vfqgln/Vpj`bnjfnaqllefqwbpbodvmlpsb/Apfpfifnsolgfqf`klbgfn/Mpsqjubglbdqfdbqfmob`fpslpjaofklwfofppfujoobsqjnfql/Vowjnlfufmwlpbq`kjul`vowvqbnvifqfpfmwqbgbbmvm`jlfnabqdlnfq`bgldqbmgfpfpwvgjlnfilqfpefaqfqlgjpf/]lwvqjpnl`/_gjdlslqwbgbfpsb`jlebnjojbbmwlmjlsfqnjwfdvbqgbqbodvmbpsqf`jlpbodvjfmpfmwjglujpjwbpw/Awvol`lml`fqpfdvmgl`lmpfileqbm`jbnjmvwlppfdvmgbwfmfnlpfef`wlpn/Mobdbpfpj/_mqfujpwbdqbmbgb`lnsqbqjmdqfpldbq`/Abb``j/_mf`vbglqrvjfmfpjm`ovplgfafq/Mnbwfqjbklnaqfpnvfpwqbslgq/Abnb/]bmb/Vowjnbfpwbnlplej`jbowbnajfmmjmd/Vmpbovglpslgfnlpnfilqbqslpjwjlmavpjmfppklnfsbdfpf`vqjwzobmdvbdfpwbmgbqg`bnsbjdmefbwvqfp`bwfdlqzf{wfqmbo`kjogqfmqfpfqufgqfpfbq`kf{`kbmdfebulqjwfwfnsobwfnjojwbqzjmgvpwqzpfquj`fpnbwfqjbosqlgv`wpy.jmgf{9`lnnfmwpplewtbqf`lnsofwf`bofmgbqsobwelqnbqwj`ofpqfrvjqfgnlufnfmwrvfpwjlmavjogjmdslojwj`pslppjaofqfojdjlmskzpj`boeffgab`hqfdjpwfqsj`wvqfpgjpbaofgsqlwl`lobvgjfm`fpfwwjmdpb`wjujwzfofnfmwpofbqmjmdbmzwkjmdbapwqb`wsqldqfpplufqujftnbdbyjmff`lmlnj`wqbjmjmdsqfppvqfubqjlvp#?pwqlmd=sqlsfqwzpklssjmdwldfwkfqbgubm`fgafkbujlqgltmolbgefbwvqfgellwaboopfof`wfgObmdvbdfgjpwbm`fqfnfnafqwqb`hjmdsbpptlqgnlgjejfgpwvgfmwpgjqf`wozejdkwjmdmlqwkfqmgbwbabpfefpwjuboaqfbhjmdol`bwjlmjmwfqmfwgqlsgltmsqb`wj`ffujgfm`fevm`wjlmnbqqjbdfqfpslmpfsqlaofnpmfdbwjufsqldqbnpbmbozpjpqfofbpfgabmmfq!=svq`kbpfsloj`jfpqfdjlmbo`qfbwjufbqdvnfmwallhnbqhqfefqqfq`kfnj`bogjujpjlm`booab`hpfsbqbwfsqlif`wp`lmeoj`wkbqgtbqfjmwfqfpwgfojufqznlvmwbjmlawbjmfg>#ebopf8elq+ubq#b``fswfg`bsb`jwz`lnsvwfqjgfmwjwzbjq`qbewfnsolzfgsqlslpfgglnfpwj`jm`ovgfpsqlujgfgklpsjwboufqwj`bo`loobspfbssqlb`ksbqwmfqpoldl!=?bgbvdkwfqbvwklq!#`vowvqboebnjojfp,jnbdfp,bppfnaozsltfqevowfb`kjmdejmjpkfggjpwqj`w`qjwj`bo`dj.ajm,svqslpfpqfrvjqfpfof`wjlmaf`lnjmdsqlujgfpb`bgfnj`f{fq`jpfb`wvbooznfgj`jmf`lmpwbmwb``jgfmwNbdbyjmfgl`vnfmwpwbqwjmdalwwln!=lapfqufg9#%rvlw8f{wfmgfgsqfujlvpPlewtbqf`vpwlnfqgf`jpjlmpwqfmdwkgfwbjofgpojdkwozsobmmjmdwf{wbqfb`vqqfm`zfufqzlmfpwqbjdkwwqbmpefqslpjwjufsqlgv`fgkfqjwbdfpkjssjmdbaplovwfqf`fjufgqfofubmwavwwlm!#ujlofm`fbmztkfqfafmfejwpobvm`kfgqf`fmwozboojbm`felooltfgnvowjsofavoofwjmjm`ovgfgl``vqqfgjmwfqmbo'+wkjp*-qfsvaoj`=?wq=?wg`lmdqfppqf`lqgfgvowjnbwfplovwjlm?vo#jg>!gjp`lufqKlnf?,b=tfapjwfpmfwtlqhpbowklvdkfmwjqfoznfnlqjbonfppbdfp`lmwjmvfb`wjuf!=plnftkbwuj`wlqjbTfpwfqm##wjwof>!Ol`bwjlm`lmwqb`wujpjwlqpGltmolbgtjwklvw#qjdkw!=\\tnfbpvqfptjgwk#>#ubqjbaofjmuloufgujqdjmjbmlqnboozkbssfmfgb``lvmwppwbmgjmdmbwjlmboQfdjpwfqsqfsbqfg`lmwqlopb``vqbwfajqwkgbzpwqbwfdzleej`jbodqbskj`p`qjnjmboslppjaoz`lmpvnfqSfqplmbopsfbhjmdubojgbwfb`kjfufg-isd!#,=nb`kjmfp?,k1=\\t##hfztlqgpeqjfmgozaqlwkfqp`lnajmfglqjdjmbo`lnslpfgf{sf`wfgbgfrvbwfsbhjpwbmeloolt!#ubovbaof?,obafo=qfobwjufaqjmdjmdjm`qfbpfdlufqmlqsovdjmp,Ojpw#le#Kfbgfq!=!#mbnf>!#+%rvlw8dqbgvbwf?,kfbg=\\t`lnnfq`fnbobzpjbgjqf`wlqnbjmwbjm8kfjdkw9p`kfgvof`kbmdjmdab`h#wl#`bwkloj`sbwwfqmp`lolq9# dqfbwfpwpvssojfpqfojbaof?,vo=\\t\\n\\n?pfof`w#`jwjyfmp`olwkjmdtbw`kjmd?oj#jg>!psf`jej``bqqzjmdpfmwfm`f?`fmwfq=`lmwqbpwwkjmhjmd`bw`k+f*plvwkfqmNj`kbfo#nfq`kbmw`bqlvpfosbggjmd9jmwfqjlq-psojw+!ojybwjlmL`wlafq#*xqfwvqmjnsqlufg..%dw8\\t\\t`lufqbdf`kbjqnbm-smd!#,=pvaif`wpQj`kbqg#tkbwfufqsqlabaozqf`lufqzabpfabooivgdnfmw`lmmf`w--`pp!#,=#tfapjwfqfslqwfggfebvow!,=?,b=\\x0E\\tfof`wqj`p`lwobmg`qfbwjlmrvbmwjwz-#JPAM#3gjg#mlw#jmpwbm`f.pfbq`k.!#obmd>!psfbhfqp@lnsvwfq`lmwbjmpbq`kjufpnjmjpwfqqfb`wjlmgjp`lvmwJwbojbml`qjwfqjbpwqlmdoz9#$kwws9$p`qjsw$`lufqjmdleefqjmdbssfbqfgAqjwjpk#jgfmwjezEb`fallhmvnfqlvpufkj`ofp`lm`fqmpBnfqj`bmkbmgojmdgju#jg>!Tjoojbn#sqlujgfq\\\\`lmwfmwb``vqb`zpf`wjlm#bmgfqplmeof{jaof@bwfdlqzobtqfm`f?p`qjsw=obzlvw>!bssqlufg#nb{jnvnkfbgfq!=?,wbaof=Pfquj`fpkbnjowlm`vqqfmw#`bmbgjbm`kbmmfop,wkfnfp,,bqwj`oflswjlmboslqwvdboubovf>!!jmwfqubotjqfofppfmwjwofgbdfm`jfpPfbq`k!#nfbpvqfgwklvpbmgpsfmgjmd%kfoojs8mft#Gbwf!#pjyf>!sbdfMbnfnjggof!#!#,=?,b=kjggfm!=pfrvfm`fsfqplmbolufqeoltlsjmjlmpjoojmljpojmhp!=\\t\\n?wjwof=ufqpjlmppbwvqgbzwfqnjmbojwfnsqlsfmdjmffqpf`wjlmpgfpjdmfqsqlslpbo>!ebopf!Fpsb/]loqfofbpfppvanjw!#fq%rvlw8bggjwjlmpznswlnplqjfmwfgqfplvq`fqjdkw!=?sofbpvqfpwbwjlmpkjpwlqz-ofbujmd##alqgfq>`lmwfmwp`fmwfq!=-\\t\\tPlnf#gjqf`wfgpvjwbaofavodbqjb-pklt+*8gfpjdmfgDfmfqbo#`lm`fswpF{bnsofptjoojbnpLqjdjmbo!=?psbm=pfbq`k!=lsfqbwlqqfrvfpwpb#%rvlw8booltjmdGl`vnfmwqfujpjlm-#\\t\\tWkf#zlvqpfoe@lmwb`w#nj`kjdbmFmdojpk#`lovnajbsqjlqjwzsqjmwjmdgqjmhjmdeb`jojwzqfwvqmfg@lmwfmw#leej`fqpQvppjbm#dfmfqbwf.;;6:.2!jmgj`bwfebnjojbq#rvbojwznbqdjm93#`lmwfmwujftslqw`lmwb`wp.wjwof!=slqwbaof-ofmdwk#fojdjaofjmuloufpbwobmwj`lmolbg>!gfebvow-pvssojfgsbznfmwpdolppbqz\\t\\tBewfq#dvjgbm`f?,wg=?wgfm`lgjmdnjggof!=`bnf#wl#gjpsobzpp`lwwjpkilmbwkbmnbilqjwztjgdfwp-`ojmj`bowkbjobmgwfb`kfqp?kfbg=\\t\\nbeef`wfgpvsslqwpsljmwfq8wlPwqjmd?,pnboo=lhobklnbtjoo#af#jmufpwlq3!#bow>!klojgbzpQfplvq`foj`fmpfg#+tkj`k#-#Bewfq#`lmpjgfqujpjwjmdf{solqfqsqjnbqz#pfbq`k!#bmgqljg!rvj`hoz#nffwjmdpfpwjnbwf8qfwvqm#8`lolq9 #kfjdkw>bssqlubo/#%rvlw8#`kf`hfg-njm-ip!nbdmfwj`=?,b=?,kelqf`bpw-#Tkjof#wkvqpgbzgufqwjpf%fb`vwf8kbp@obppfubovbwflqgfqjmdf{jpwjmdsbwjfmwp#Lmojmf#`lolqbglLswjlmp!`bnsafoo?\\\"..#fmg?,psbm=??aq#,=\\x0E\\t\\\\slsvsp\\x7Fp`jfm`fp/%rvlw8#rvbojwz#Tjmgltp#bppjdmfgkfjdkw9#?a#`obppof%rvlw8#ubovf>!#@lnsbmzf{bnsofp?jeqbnf#afojfufpsqfpfmwpnbqpkboosbqw#le#sqlsfqoz*-\\t\\tWkf#wb{lmlnznv`k#le#?,psbm=\\t!#gbwb.pqwvdv/Fpp`qlooWl#sqlif`w?kfbg=\\x0E\\tbwwlqmfzfnskbpjppslmplqpebm`zal{tlqog$p#tjogojef`kf`hfg>pfppjlmpsqldqbnns{8elmw.#Sqlif`wilvqmbopafojfufgub`bwjlmwklnsplmojdkwjmdbmg#wkf#psf`jbo#alqgfq>3`kf`hjmd?,walgz=?avwwlm#@lnsofwf`ofbqej{\\t?kfbg=\\tbqwj`of#?pf`wjlmejmgjmdpqlof#jm#slsvobq##L`wlafqtfapjwf#f{slpvqfvpfg#wl##`kbmdfplsfqbwfg`oj`hjmdfmwfqjmd`lnnbmgpjmelqnfg#mvnafqp##?,gju=`qfbwjmdlmPvanjwnbqzobmg`loofdfpbmbozwj`ojpwjmdp`lmwb`w-olddfgJmbgujplqzpjaojmdp`lmwfmw!p%rvlw8*p-#Wkjp#sb`hbdfp`kf`hal{pvddfpwpsqfdmbmwwlnlqqltpsb`jmd>j`lm-smdibsbmfpf`lgfabpfavwwlm!=dbnaojmdpv`k#bp#/#tkjof#?,psbm=#njpplvqjpslqwjmdwls92s{#-?,psbm=wfmpjlmptjgwk>!1obyzolbgmlufnafqvpfg#jm#kfjdkw>!`qjsw!=\\t%maps8?,?wq=?wg#kfjdkw91,sqlgv`w`lvmwqz#jm`ovgf#ellwfq!#%ow8\\\"..#wjwof!=?,irvfqz-?,elqn=\\t+\\x0BBl\\bQ\\x7F*+\\x0BUm\\x05Gx*kqubwphjjwbojbmlqln/Nm(ow/Pqh/Kf4K4]4C5dwbnaj/Emmlwj`jbpnfmpbifpsfqplmbpgfqf`klpmb`jlmbopfquj`jl`lmwb`wlvpvbqjlpsqldqbnbdlajfqmlfnsqfpbpbmvm`jlpubofm`jb`lolnajbgfpsv/Epgfslqwfpsqlzf`wlsqlgv`wls/Vaoj`lmlplwqlpkjpwlqjbsqfpfmwfnjoolmfpnfgjbmwfsqfdvmwbbmwfqjlqqf`vqplpsqlaofnbpbmwjbdlmvfpwqlplsjmj/_mjnsqjnjqnjfmwqbpbn/Eqj`bufmgfglqpl`jfgbgqfpsf`wlqfbojybqqfdjpwqlsbobaqbpjmwfq/Epfmwlm`fpfpsf`jbonjfnaqlpqfbojgbg`/_qglabybqbdlybs/Mdjmbppl`jbofpaolrvfbqdfpwj/_mborvjofqpjpwfnbp`jfm`jbp`lnsofwlufqpj/_m`lnsofwbfpwvgjlps/Vaoj`blaifwjulboj`bmwfavp`bglq`bmwjgbgfmwqbgbpb``jlmfpbq`kjulppvsfqjlqnbzlq/Abbofnbmjbevm`j/_m/Vowjnlpkb`jfmglbrvfoolpfgj`j/_mefqmbmglbnajfmwfeb`fallhmvfpwqbp`ojfmwfpsql`fplpabpwbmwfsqfpfmwbqfslqwbq`lmdqfplsvaoj`bq`lnfq`jl`lmwqbwli/_ufmfpgjpwqjwlw/E`mj`b`lmivmwlfmfqd/Abwqbabibqbpwvqjbpqf`jfmwfvwjojybqalofw/Ampboubglq`lqqf`wbwqbabilpsqjnfqlpmfdl`jlpojafqwbggfwboofpsbmwboobsq/_{jnlbonfq/Abbmjnbofprvj/Emfp`lqby/_mpf``j/_mavp`bmglls`jlmfpf{wfqjlq`lm`fswlwlgbu/Abdbofq/Abfp`qjajqnfgj`jmboj`fm`jb`lmpvowbbpsf`wlp`q/Awj`bg/_obqfpivpwj`jbgfafq/Mmsfq/Alglmf`fpjwbnbmwfmfqsfrvf/]lqf`jajgbwqjavmbowfmfqjef`bm`j/_m`bmbqjbpgfp`bqdbgjufqplpnboolq`bqfrvjfqfw/E`mj`lgfafq/Abujujfmgbejmbmybpbgfobmwfevm`jlmb`lmpfilpgje/A`jo`jvgbgfpbmwjdvbpbubmybgbw/Eqnjmlvmjgbgfpp/Mm`kfy`bnsb/]bplewlmj`qfujpwbp`lmwjfmfpf`wlqfpnlnfmwlpeb`vowbg`q/Egjwlgjufqpbppvsvfpwleb`wlqfppfdvmglpsfrvf/]b<_<R<X<\\\\<Y=m<W<T<Y=m=n=`<]=g<W<R<]=g=n=`=a=n<R<P<y=m<W<T=n<R<_<R<P<Y<Q=c<^=m<Y=i=a=n<R<U<X<\\\\<Z<Y<]=g<W<T<_<R<X=o<X<Y<Q=`=a=n<R=n<]=g<W<\\\\=m<Y<]=c<R<X<T<Q=m<Y<]<Y<Q<\\\\<X<R=m<\\\\<U=n=h<R=n<R<Q<Y<_<R=m<^<R<T=m<^<R<U<T<_=l=g=n<R<Z<Y<^=m<Y<P=m<^<R=b<W<T=d=`=a=n<T=i<S<R<V<\\\\<X<Q<Y<U<X<R<P<\\\\<P<T=l<\\\\<W<T<]<R=n<Y<P=o=i<R=n=c<X<^=o=i=m<Y=n<T<W=b<X<T<X<Y<W<R<P<T=l<Y=n<Y<]=c=m<^<R<Y<^<T<X<Y=k<Y<_<R=a=n<T<P=m=k<Y=n=n<Y<P=g=j<Y<Q=g=m=n<\\\\<W<^<Y<X=`=n<Y<P<Y<^<R<X=g=n<Y<]<Y<^=g=d<Y<Q<\\\\<P<T=n<T<S<\\\\=n<R<P=o<S=l<\\\\<^<W<T=j<\\\\<R<X<Q<\\\\<_<R<X=g<[<Q<\\\\=b<P<R<_=o<X=l=o<_<^=m<Y<U<T<X<Y=n<V<T<Q<R<R<X<Q<R<X<Y<W<\\\\<X<Y<W<Y=m=l<R<V<T=b<Q=c<^<Y=m=`<y=m=n=`=l<\\\\<[<\\\\<Q<\\\\=d<T4K5h5h5k4K5h4F5f4@5i5f4U4B4K4Y4E4K5h4\\\\5f4U5h5f5k4@4C5f4C4K5h4N5j4K5h4]4C4F4A5o5i4Y5m4A4E5o4K5j4F4K5h5h5f5f5o5d5j4X4D5o4E5m5f5k4K4D5j4K4F4A5d4K4M4O5o4G4]4B5h4K5h4K5h4A4D4C5h5f5h4C4]5d4_4K4Z4V4[4F5o5d5j5k5j4K5o4_4K4A4E5j4K4C5f4K5h4[4D4U5h5f5o4X5o4]4K5f5i5o5j5i5j5k4K4X4]5o4E4]4J5f4_5j4X5f4[5i4K4\\\\4K4K5h5m5j4X4D4K4D4F4U4D4]4]4A5i4E5o4K5m4E5f5n5d5h5i4]5o4^5o5h5i4E4O4A5i4C5n5h4D5f5f4U5j5f4Y5d4]4E4[4]5f5n4X4K4]5o4@5d4K5h4O4B4]5e5i4U5j4K4K4D4A4G4U4]5d4Z4D4X5o5h5i4_4@5h4D5j4K5j4B4K5h4C5o4F4K4D5o5h5f4E4D4C5d5j4O5f4Z4K5f5d4@4C5m4]5f5n5o4F4D4F4O5m4Z5h5i4[4D4B4K5o4G4]4D4K4]5o4K5m4Z5h4K4A5h5e5j5m4_5k4O5f4K5i4]4C5d4C4O5j5k4K4C5f5j4K4K5h4K5j5i4U4]4Z4F4U5h5i4C4K4B5h5i5i5o5j\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x02\\x03\\x02\\x03\\x02\\x03\\x02\\x03\\x01\\x03\\x01\\x03\\x01\\x03\\x01\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x07\\x03\\x03\\x02\\x01\\0\\x07\\x06\\x05\\x04\\x04\\x05\\x06\\x07\\0\\x01\\x02\\x03\\x0B\\n\\t\\b\\x0F\\x0E\\r\\f\\f\\r\\x0E\\x0F\\b\\t\\n\\x0B\\x13\\x12\\x11\\x10\\x17\\x16\\x15\\x14\\x14\\x15\\x16\\x17\\x10\\x11\\x12\\x13\\x1B\\x1A\\x19\\x18\\x1F\\x1E\\x1D\\x1C\\x1C\\x1D\\x1E\\x1F\\x18\\x19\\x1A\\x1B\\x13\\x13\\x13\\x13\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x13\\x13\\x13\\x13\\x02\\x03\\x03\\x03\\x01\\x03\\x03\\x03\\x01\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\x02\\x03\\x03\\x03\\0\\x03\\x03\\x03\\x13\\x13\\x03\\x02\\x03\\x03\\x03\\x02\\x03\\x03\\x13\\x13\\x03\\x02\\x03\\x03\\x03\\x0B\\x03\\x0B\\x03\\x0B\\x03\\x0B\\x03\\x03\\x03\\x02\\x03\\x01\\x03\\0\\x03\\x07\\x03\\x06\\x03\\x05\\x03\\x04qfplvq`fp`lvmwqjfprvfpwjlmpfrvjsnfmw`lnnvmjwzbubjobaofkjdkojdkwGWG,{kwnonbqhfwjmdhmltofgdfplnfwkjmd`lmwbjmfqgjqf`wjlmpvap`qjafbgufqwjpf`kbqb`wfq!#ubovf>!?,pfof`w=Bvpwqbojb!#`obpp>!pjwvbwjlmbvwklqjwzelooltjmdsqjnbqjozlsfqbwjlm`kboofmdfgfufolsfgbmlmznlvpevm`wjlm#evm`wjlmp`lnsbmjfppwqv`wvqfbdqffnfmw!#wjwof>!slwfmwjbofgv`bwjlmbqdvnfmwppf`lmgbqz`lszqjdkwobmdvbdfpf{`ovpjuf`lmgjwjlm?,elqn=\\x0E\\tpwbwfnfmwbwwfmwjlmAjldqbskz~#fopf#x\\tplovwjlmptkfm#wkf#Bmbozwj`pwfnsobwfpgbmdfqlvppbwfoojwfgl`vnfmwpsvaojpkfqjnslqwbmwsqlwlwzsfjmeovfm`f%qbrvl8?,feef`wjufdfmfqboozwqbmpelqnafbvwjevowqbmpslqwlqdbmjyfgsvaojpkfgsqlnjmfmwvmwjo#wkfwkvnambjoMbwjlmbo#-el`vp+*8lufq#wkf#njdqbwjlmbmmlvm`fgellwfq!=\\tf{`fswjlmofpp#wkbmf{sfmpjufelqnbwjlmeqbnftlqhwfqqjwlqzmgj`bwjlm`vqqfmwoz`obppMbnf`qjwj`jpnwqbgjwjlmfopftkfqfBof{bmgfqbssljmwfgnbwfqjbopaqlbg`bpwnfmwjlmfgbeejojbwf?,lswjlm=wqfbwnfmwgjeefqfmw,gfebvow-Sqfpjgfmwlm`oj`h>!ajldqbskzlwkfqtjpfsfqnbmfmwEqbm/KbjpKlooztllgf{sbmpjlmpwbmgbqgp?,pwzof=\\tqfgv`wjlmGf`fnafq#sqfefqqfg@bnaqjgdflsslmfmwpAvpjmfpp#`lmevpjlm=\\t?wjwof=sqfpfmwfgf{sobjmfgglfp#mlw#tlqogtjgfjmwfqeb`fslpjwjlmpmftpsbsfq?,wbaof=\\tnlvmwbjmpojhf#wkf#fppfmwjboejmbm`jbopfof`wjlmb`wjlm>!,babmglmfgFgv`bwjlmsbqpfJmw+pwbajojwzvmbaof#wl?,wjwof=\\tqfobwjlmpMlwf#wkbwfeej`jfmwsfqelqnfgwtl#zfbqpPjm`f#wkfwkfqfelqftqbssfq!=bowfqmbwfjm`qfbpfgAbwwof#lesfq`fjufgwqzjmd#wlmf`fppbqzslqwqbzfgfof`wjlmpFojybafwk?,jeqbnf=gjp`lufqzjmpvqbm`fp-ofmdwk8ofdfmgbqzDfldqbskz`bmgjgbwf`lqslqbwfplnfwjnfppfquj`fp-jmkfqjwfg?,pwqlmd=@lnnvmjwzqfojdjlvpol`bwjlmp@lnnjwwffavjogjmdpwkf#tlqogml#olmdfqafdjmmjmdqfefqfm`f`bmmlw#afeqfrvfm`zwzsj`boozjmwl#wkf#qfobwjuf8qf`lqgjmdsqfpjgfmwjmjwjboozwf`kmjrvfwkf#lwkfqjw#`bm#aff{jpwfm`fvmgfqojmfwkjp#wjnfwfofsklmfjwfnp`lsfsqb`wj`fpbgubmwbdf*8qfwvqm#Elq#lwkfqsqlujgjmdgfnl`qb`zalwk#wkf#f{wfmpjufpveefqjmdpvsslqwfg`lnsvwfqp#evm`wjlmsqb`wj`bopbjg#wkbwjw#nbz#afFmdojpk?,eqln#wkf#p`kfgvofggltmolbgp?,obafo=\\tpvpsf`wfgnbqdjm9#3psjqjwvbo?,kfbg=\\t\\tnj`qlplewdqbgvboozgjp`vppfgkf#af`bnff{f`vwjufirvfqz-ipklvpfklog`lmejqnfgsvq`kbpfgojwfqboozgfpwqlzfgvs#wl#wkfubqjbwjlmqfnbjmjmdjw#jp#mlw`fmwvqjfpIbsbmfpf#bnlmd#wkf`lnsofwfgbodlqjwknjmwfqfpwpqfafoojlmvmgfejmfgfm`lvqbdfqfpjybaofjmuloujmdpfmpjwjufvmjufqpbosqlujpjlm+bowklvdkefbwvqjmd`lmgv`wfg*/#tkj`k#`lmwjmvfg.kfbgfq!=Efaqvbqz#mvnfqlvp#lufqeolt9`lnslmfmweqbdnfmwpf{`foofmw`lopsbm>!wf`kmj`bomfbq#wkf#Bgubm`fg#plvq`f#lef{sqfppfgKlmd#Hlmd#Eb`fallhnvowjsof#nf`kbmjpnfofubwjlmleefmpjuf?,elqn=\\t\\npslmplqfggl`vnfmw-lq#%rvlw8wkfqf#bqfwklpf#tklnlufnfmwpsql`fppfpgjeej`vowpvanjwwfgqf`lnnfmg`lmujm`fgsqlnlwjmd!#tjgwk>!-qfsob`f+`obppj`bo`lbojwjlmkjp#ejqpwgf`jpjlmpbppjpwbmwjmgj`bwfgfulovwjlm.tqbssfq!fmlvdk#wlbolmd#wkfgfojufqfg..=\\x0E\\t?\\\"..Bnfqj`bm#sqlwf`wfgMlufnafq#?,pwzof=?evqmjwvqfJmwfqmfw##lmaovq>!pvpsfmgfgqf`jsjfmwabpfg#lm#Nlqflufq/balojpkfg`loof`wfgtfqf#nbgffnlwjlmbofnfqdfm`zmbqqbwjufbgul`bwfps{8alqgfq`lnnjwwfggjq>!owq!fnsolzffpqfpfbq`k-#pfof`wfgpv``fpplq`vpwlnfqpgjpsobzfgPfswfnafqbgg@obpp+Eb`fallh#pvddfpwfgbmg#obwfqlsfqbwjmdfobalqbwfPlnfwjnfpJmpwjwvwf`fqwbjmozjmpwboofgelooltfqpIfqvpbofnwkfz#kbuf`lnsvwjmddfmfqbwfgsqlujm`fpdvbqbmwffbqajwqbqzqf`ldmjyftbmwfg#wls{8tjgwk9wkflqz#leafkbujlvqTkjof#wkffpwjnbwfgafdbm#wl#jw#af`bnfnbdmjwvgfnvpw#kbufnlqf#wkbmGjqf`wlqzf{wfmpjlmpf`qfwbqzmbwvqboozl``vqqjmdubqjbaofpdjufm#wkfsobwelqn-?,obafo=?ebjofg#wl`lnslvmgphjmgp#le#pl`jfwjfpbolmdpjgf#..%dw8\\t\\tplvwktfpwwkf#qjdkwqbgjbwjlmnbz#kbuf#vmfp`bsf+pslhfm#jm!#kqfe>!,sqldqbnnflmoz#wkf#`lnf#eqlngjqf`wlqzavqjfg#jmb#pjnjobqwkfz#tfqf?,elmw=?,Mlqtfdjbmpsf`jejfgsqlgv`jmdsbppfmdfq+mft#Gbwfwfnslqbqzej`wjlmboBewfq#wkffrvbwjlmpgltmolbg-qfdvobqozgfufolsfqbaluf#wkfojmhfg#wlskfmlnfmbsfqjlg#lewllowjs!=pvapwbm`fbvwlnbwj`bpsf`w#leBnlmd#wkf`lmmf`wfgfpwjnbwfpBjq#Elq`fpzpwfn#lelaif`wjufjnnfgjbwfnbhjmd#jwsbjmwjmdp`lmrvfqfgbqf#pwjoosql`fgvqfdqltwk#lekfbgfg#azFvqlsfbm#gjujpjlmpnlof`vofpeqbm`kjpfjmwfmwjlmbwwqb`wfg`kjogkllgbopl#vpfggfgj`bwfgpjmdbslqfgfdqff#leebwkfq#le`lmeoj`wp?,b=?,s=\\t`bnf#eqlntfqf#vpfgmlwf#wkbwqf`fjujmdF{f`vwjuffufm#nlqfb``fpp#wl`lnnbmgfqSlojwj`bonvpj`jbmpgfoj`jlvpsqjplmfqpbgufmw#leVWE.;!#,=?\\\"X@GBWBX!=@lmwb`wPlvwkfqm#ad`lolq>!pfqjfp#le-#Jw#tbp#jm#Fvqlsfsfqnjwwfgubojgbwf-bssfbqjmdleej`jboppfqjlvpoz.obmdvbdfjmjwjbwfgf{wfmgjmdolmd.wfqnjmeobwjlmpv`k#wkbwdfw@llhjfnbqhfg#az?,avwwlm=jnsofnfmwavw#jw#jpjm`qfbpfpgltm#wkf#qfrvjqjmdgfsfmgfmw..=\\t?\\\"..#jmwfqujftTjwk#wkf#`lsjfp#le`lmpfmpvptbp#avjowUfmfyvfob+elqnfqozwkf#pwbwfsfqplmmfopwqbwfdj`ebulvq#lejmufmwjlmTjhjsfgjb`lmwjmfmwujqwvbooztkj`k#tbpsqjm`jsof@lnsofwf#jgfmwj`bopklt#wkbwsqjnjwjufbtbz#eqlnnlof`vobqsqf`jpfozgjpploufgVmgfq#wkfufqpjlm>!=%maps8?,Jw#jp#wkf#Wkjp#jp#tjoo#kbuflqdbmjpnpplnf#wjnfEqjfgqj`ktbp#ejqpwwkf#lmoz#eb`w#wkbwelqn#jg>!sqf`fgjmdWf`kmj`boskzpj`jpwl``vqp#jmmbujdbwlqpf`wjlm!=psbm#jg>!plvdkw#wlafolt#wkfpvqujujmd~?,pwzof=kjp#gfbwkbp#jm#wkf`bvpfg#azsbqwjboozf{jpwjmd#vpjmd#wkftbp#djufmb#ojpw#leofufop#lemlwjlm#leLeej`jbo#gjpnjppfgp`jfmwjpwqfpfnaofpgvsoj`bwff{solpjufqf`lufqfgboo#lwkfqdboofqjfpxsbggjmd9sflsof#leqfdjlm#lebggqfppfpbppl`jbwfjnd#bow>!jm#nlgfqmpklvog#afnfwklg#leqfslqwjmdwjnfpwbnsmffgfg#wlwkf#Dqfbwqfdbqgjmdpffnfg#wlujftfg#bpjnsb`w#lmjgfb#wkbwwkf#Tlqogkfjdkw#lef{sbmgjmdWkfpf#bqf`vqqfmw!=`bqfevooznbjmwbjmp`kbqdf#le@obppj`bobggqfppfgsqfgj`wfgltmfqpkjs?gju#jg>!qjdkw!=\\x0E\\tqfpjgfm`fofbuf#wkf`lmwfmw!=bqf#lewfm##~*+*8\\x0E\\tsqlabaoz#Sqlefpplq.avwwlm!#qfpslmgfgpbzp#wkbwkbg#wl#afsob`fg#jmKvmdbqjbmpwbwvp#lepfqufp#bpVmjufqpbof{f`vwjlmbddqfdbwfelq#tkj`kjmef`wjlmbdqffg#wlkltfufq/#slsvobq!=sob`fg#lm`lmpwqv`wfof`wlqbopznalo#lejm`ovgjmdqfwvqm#wlbq`kjwf`w@kqjpwjbmsqfujlvp#ojujmd#jmfbpjfq#wlsqlefpplq\\t%ow8\\\"..#feef`w#lebmbozwj`ptbp#wbhfmtkfqf#wkfwllh#lufqafojfe#jmBeqjhbbmpbp#ebq#bpsqfufmwfgtlqh#tjwkb#psf`jbo?ejfogpfw@kqjpwnbpQfwqjfufg\\t\\tJm#wkf#ab`h#jmwlmlqwkfbpwnbdbyjmfp=?pwqlmd=`lnnjwwffdlufqmjmddqlvsp#lepwlqfg#jmfpwbaojpkb#dfmfqbojwp#ejqpwwkfjq#ltmslsvobwfgbm#laif`w@bqjaafbmboolt#wkfgjpwqj`wptjp`lmpjmol`bwjlm-8#tjgwk9#jmkbajwfgPl`jbojpwIbmvbqz#2?,ellwfq=pjnjobqoz`klj`f#lewkf#pbnf#psf`jej`#avpjmfpp#Wkf#ejqpw-ofmdwk8#gfpjqf#wlgfbo#tjwkpjm`f#wkfvpfqBdfmw`lm`fjufgjmgf{-sksbp#%rvlw8fmdbdf#jmqf`fmwoz/eft#zfbqptfqf#bopl\\t?kfbg=\\t?fgjwfg#azbqf#hmltm`jwjfp#jmb``fpphfz`lmgfnmfgbopl#kbufpfquj`fp/ebnjoz#leP`kllo#le`lmufqwfgmbwvqf#le#obmdvbdfnjmjpwfqp?,laif`w=wkfqf#jp#b#slsvobqpfrvfm`fpbgul`bwfgWkfz#tfqfbmz#lwkfqol`bwjlm>fmwfq#wkfnv`k#nlqfqfeof`wfgtbp#mbnfglqjdjmbo#b#wzsj`botkfm#wkfzfmdjmffqp`lvog#mlwqfpjgfmwptfgmfpgbzwkf#wkjqg#sqlgv`wpIbmvbqz#1tkbw#wkfzb#`fqwbjmqfb`wjlmpsql`fpplqbewfq#kjpwkf#obpw#`lmwbjmfg!=?,gju=\\t?,b=?,wg=gfsfmg#lmpfbq`k!=\\tsjf`fp#le`lnsfwjmdQfefqfm`fwfmmfppfftkj`k#kbp#ufqpjlm>?,psbm=#??,kfbgfq=djufp#wkfkjpwlqjbmubovf>!!=sbggjmd93ujft#wkbwwldfwkfq/wkf#nlpw#tbp#elvmgpvapfw#lebwwb`h#lm`kjogqfm/sljmwp#lesfqplmbo#slpjwjlm9boofdfgoz@ofufobmgtbp#obwfqbmg#bewfqbqf#djufmtbp#pwjoop`qloojmdgfpjdm#lenbhfp#wkfnv`k#ofppBnfqj`bmp-\\t\\tBewfq#/#avw#wkfNvpfvn#leolvjpjbmb+eqln#wkfnjmmfplwbsbqwj`ofpb#sql`fppGlnjmj`bmulovnf#leqfwvqmjmdgfefmpjuf33s{\\x7Fqjdknbgf#eqlnnlvpflufq!#pwzof>!pwbwfp#le+tkj`k#jp`lmwjmvfpEqbm`jp`lavjogjmd#tjwklvw#btjwk#plnftkl#tlvogb#elqn#leb#sbqw#leafelqf#jwhmltm#bp##Pfquj`fpol`bwjlm#bmg#lewfmnfbpvqjmdbmg#jw#jpsbsfqab`hubovfp#le\\x0E\\t?wjwof=>#tjmglt-gfwfqnjmffq%rvlw8#sobzfg#azbmg#fbqoz?,`fmwfq=eqln#wkjpwkf#wkqffsltfq#bmgle#%rvlw8jmmfqKWNO?b#kqfe>!z9jmojmf8@kvq`k#lewkf#fufmwufqz#kjdkleej`jbo#.kfjdkw9#`lmwfmw>!,`dj.ajm,wl#`qfbwfbeqjhbbmpfpsfqbmwleqbm/Kbjpobwujf)Mvojfwvuj)_(`f)Mwjmb(af)Mwjmb\\fUh\\fT{\\fTN\\n{I\\np@\\x04Fr\\x0BBl\\bQ\\x7F\\tA{\\x0BUm\\x05Gx\\tA{\\x01yp\\x06YA\\0zX\\bTV\\bWl\\bUd\\x04BM\\x0BB{\\npV\\x0B@x\\x04B\\\\\\np@\\x04Db\\x04Gz\\tal\\npa\\tfM\\tuD\\bV~\\x04mx\\x0BQ}\\ndS\\tp\\\\\\bVK\\bS]\\bU|\\x05oD\\tkV\\x0Bed\\x0BHR\\nb~\\x04M`\\nJp\\x05oD\\x04|Q\\nLP\\x04Sw\\bTl\\nAI\\nxC\\bWt\\tBq\\x05F`\\x04Cm\\x0BLm\\tKx\\t}t\\bPv\\ny\\\\\\naB\\tV\\x7F\\nZd\\x04XU\\x04li\\tfr\\ti@\\tBH\\x04BD\\x04BV\\t`V\\n[]\\tp_\\tTn\\n~A\\nxR\\tuD\\t`{\\bV@\\tTn\\tHK\\tAJ\\x0Bxs\\x04Zf\\nqI\\x04Zf\\x0BBM\\x0B|j\\t}t\\bSM\\nmC\\x0BQ}pfquj`jlpbqw/A`volbqdfmwjmbabq`folmb`vborvjfqsvaoj`bglsqlgv`wlpslo/Awj`bqfpsvfpwbtjhjsfgjbpjdvjfmwfa/Vprvfgb`lnvmjgbgpfdvqjgbgsqjm`jsbosqfdvmwbp`lmwfmjglqfpslmgfqufmfyvfobsqlaofnbpgj`jfnaqfqfob`j/_mmlujfnaqfpjnjobqfpsqlzf`wlpsqldqbnbpjmpwjwvwlb`wjujgbgfm`vfmwqbf`lmln/Abjn/Mdfmfp`lmwb`wbqgfp`bqdbqmf`fpbqjlbwfm`j/_mwfo/Eelml`lnjpj/_m`bm`jlmfp`bsb`jgbgfm`lmwqbqbm/Mojpjpebulqjwlpw/Eqnjmlpsqlujm`jbfwjrvfwbpfofnfmwlpevm`jlmfpqfpvowbgl`bq/M`wfqsqlsjfgbgsqjm`jsjlmf`fpjgbgnvmj`jsbo`qfb`j/_mgfp`bqdbpsqfpfm`jb`lnfq`jbolsjmjlmfpfifq`j`jlfgjwlqjbopbobnbm`bdlmy/Mofygl`vnfmwlsfo/A`vobqf`jfmwfpdfmfqbofpwbqqbdlmbsq/M`wj`bmlufgbgfpsqlsvfpwbsb`jfmwfpw/E`mj`bplaifwjulp`lmwb`wlp\\fHB\\fIk\\fHn\\fH^\\fHS\\fHc\\fHU\\fId\\fHn\\fH{\\fHC\\fHR\\fHT\\fHR\\fHI\\fHc\\fHY\\fHn\\fH\\\\\\fHU\\fIk\\fHy\\fIg\\fHd\\fHy\\fIm\\fHw\\fH\\\\\\fHU\\fHR\\fH@\\fHR\\fHJ\\fHy\\fHU\\fHR\\fHT\\fHA\\fIl\\fHU\\fIm\\fHc\\fH\\\\\\fHU\\fIl\\fHB\\fId\\fHn\\fHJ\\fHS\\fHD\\fH@\\fHR\\fHHgjsolgl`p\\fHT\\fHB\\fHC\\fH\\\\\\fIn\\fHF\\fHD\\fHR\\fHB\\fHF\\fHH\\fHR\\fHG\\fHS\\fH\\\\\\fHx\\fHT\\fHH\\fHH\\fH\\\\\\fHU\\fH^\\fIg\\fH{\\fHU\\fIm\\fHj\\fH@\\fHR\\fH\\\\\\fHJ\\fIk\\fHZ\\fHU\\fIm\\fHd\\fHz\\fIk\\fH^\\fHC\\fHJ\\fHS\\fHy\\fHR\\fHB\\fHY\\fIk\\fH@\\fHH\\fIl\\fHD\\fH@\\fIl\\fHv\\fHB\\fI`\\fHH\\fHT\\fHR\\fH^\\fH^\\fIk\\fHz\\fHp\\fIe\\fH@\\fHB\\fHJ\\fHJ\\fHH\\fHI\\fHR\\fHD\\fHU\\fIl\\fHZ\\fHU\\fH\\\\\\fHi\\fH^\\fH{\\fHy\\fHA\\fIl\\fHD\\fH{\\fH\\\\\\fHF\\fHR\\fHT\\fH\\\\\\fHR\\fHH\\fHy\\fHS\\fHc\\fHe\\fHT\\fIk\\fH{\\fHC\\fIl\\fHU\\fIn\\fHm\\fHj\\fH{\\fIk\\fHs\\fIl\\fHB\\fHz\\fIg\\fHp\\fHy\\fHR\\fH\\\\\\fHi\\fHA\\fIl\\fH{\\fHC\\fIk\\fHH\\fIm\\fHB\\fHY\\fIg\\fHs\\fHJ\\fIk\\fHn\\fHi\\fH{\\fH\\\\\\fH|\\fHT\\fIk\\fHB\\fIk\\fH^\\fH^\\fH{\\fHR\\fHU\\fHR\\fH^\\fHf\\fHF\\fH\\\\\\fHv\\fHR\\fH\\\\\\fH|\\fHT\\fHR\\fHJ\\fIk\\fH\\\\\\fHp\\fHS\\fHT\\fHJ\\fHS\\fH^\\fH@\\fHn\\fHJ\\fH@\\fHD\\fHR\\fHU\\fIn\\fHn\\fH^\\fHR\\fHz\\fHp\\fIl\\fHH\\fH@\\fHs\\fHD\\fHB\\fHS\\fH^\\fHk\\fHT\\fIk\\fHj\\fHD\\fIk\\fHD\\fHC\\fHR\\fHy\\fIm\\fH^\\fH^\\fIe\\fH{\\fHA\\fHR\\fH{\\fH\\\\\\fIk\\fH^\\fHp\\fH{\\fHU\\fH\\\\\\fHR\\fHB\\fH^\\fH{\\fIk\\fHF\\fIk\\fHp\\fHU\\fHR\\fHI\\fHk\\fHT\\fIl\\fHT\\fHU\\fIl\\fHy\\fH^\\fHR\\fHL\\fIl\\fHy\\fHU\\fHR\\fHm\\fHJ\\fIn\\fH\\\\\\fHH\\fHU\\fHH\\fHT\\fHR\\fHH\\fHC\\fHR\\fHJ\\fHj\\fHC\\fHR\\fHF\\fHR\\fHy\\fHy\\fI`\\fHD\\fHZ\\fHR\\fHB\\fHJ\\fIk\\fHz\\fHC\\fHU\\fIl\\fH\\\\\\fHR\\fHC\\fHz\\fIm\\fHJ\\fH^\\fH{\\fIl`bwfdlqjfpf{sfqjfm`f?,wjwof=\\x0E\\t@lszqjdkw#ibubp`qjsw`lmgjwjlmpfufqzwkjmd?s#`obpp>!wf`kmloldzab`hdqlvmg?b#`obpp>!nbmbdfnfmw%`lsz8#132ibubP`qjsw`kbqb`wfqpaqfbg`qvnawkfnpfoufpklqjylmwbodlufqmnfmw@bojelqmjbb`wjujwjfpgjp`lufqfgMbujdbwjlmwqbmpjwjlm`lmmf`wjlmmbujdbwjlmbssfbqbm`f?,wjwof=?n`kf`hal{!#wf`kmjrvfpsqlwf`wjlmbssbqfmwozbp#tfoo#bpvmw$/#$VB.qfplovwjlmlsfqbwjlmpwfofujpjlmwqbmpobwfgTbpkjmdwlmmbujdbwlq-#>#tjmglt-jnsqfppjlm%ow8aq%dw8ojwfqbwvqfslsvobwjlmad`lolq>! fpsf`jbooz#`lmwfmw>!sqlgv`wjlmmftpofwwfqsqlsfqwjfpgfejmjwjlmofbgfqpkjsWf`kmloldzSbqojbnfmw`lnsbqjplmvo#`obpp>!-jmgf{Le+!`lm`ovpjlmgjp`vppjlm`lnslmfmwpajloldj`boQfulovwjlm\\\\`lmwbjmfqvmgfqpwllgmlp`qjsw=?sfqnjppjlmfb`k#lwkfqbwnlpskfqf#lmel`vp>!?elqn#jg>!sql`fppjmdwkjp-ubovfdfmfqbwjlm@lmefqfm`fpvapfrvfmwtfoo.hmltmubqjbwjlmpqfsvwbwjlmskfmlnfmlmgjp`jsojmfoldl-smd!#+gl`vnfmw/alvmgbqjfpf{sqfppjlmpfwwofnfmwAb`hdqlvmglvw#le#wkffmwfqsqjpf+!kwwsp9!#vmfp`bsf+!sbpptlqg!#gfnl`qbwj`?b#kqfe>!,tqbssfq!=\\tnfnafqpkjsojmdvjpwj`s{8sbggjmdskjolplskzbppjpwbm`fvmjufqpjwzeb`jojwjfpqf`ldmjyfgsqfefqfm`fje#+wzsflenbjmwbjmfgul`bavobqzkzslwkfpjp-pvanjw+*8%bns8maps8bmmlwbwjlmafkjmg#wkfElvmgbwjlmsvaojpkfq!bppvnswjlmjmwqlgv`fg`lqqvswjlmp`jfmwjpwpf{soj`jwozjmpwfbg#legjnfmpjlmp#lm@oj`h>!`lmpjgfqfggfsbqwnfmwl``vsbwjlmpllm#bewfqjmufpwnfmwsqlmlvm`fgjgfmwjejfgf{sfqjnfmwNbmbdfnfmwdfldqbskj`!#kfjdkw>!ojmh#qfo>!-qfsob`f+,gfsqfppjlm`lmefqfm`fsvmjpknfmwfojnjmbwfgqfpjpwbm`fbgbswbwjlmlsslpjwjlmtfoo#hmltmpvssofnfmwgfwfqnjmfgk2#`obpp>!3s{8nbqdjmnf`kbmj`bopwbwjpwj`p`fofaqbwfgDlufqmnfmw\\t\\tGvqjmd#wgfufolsfqpbqwjej`jbofrvjubofmwlqjdjmbwfg@lnnjppjlmbwwb`knfmw?psbm#jg>!wkfqf#tfqfMfgfqobmgpafzlmg#wkfqfdjpwfqfgilvqmbojpweqfrvfmwozboo#le#wkfobmd>!fm!#?,pwzof=\\x0E\\tbaplovwf8#pvsslqwjmdf{wqfnfoz#nbjmpwqfbn?,pwqlmd=#slsvobqjwzfnsolznfmw?,wbaof=\\x0E\\t#`lopsbm>!?,elqn=\\t##`lmufqpjlmbalvw#wkf#?,s=?,gju=jmwfdqbwfg!#obmd>!fmSlqwvdvfpfpvapwjwvwfjmgjujgvbojnslppjaofnvowjnfgjbbonlpw#boos{#plojg# bsbqw#eqlnpvaif`w#wljm#Fmdojpk`qjwj`jyfgf{`fsw#elqdvjgfojmfplqjdjmboozqfnbqhbaofwkf#pf`lmgk1#`obpp>!?b#wjwof>!+jm`ovgjmdsbqbnfwfqpsqlkjajwfg>#!kwws9,,gj`wjlmbqzsfq`fswjlmqfulovwjlmelvmgbwjlms{8kfjdkw9pv``fppevopvsslqwfqpnjoofmmjvnkjp#ebwkfqwkf#%rvlw8ml.qfsfbw8`lnnfq`jbojmgvpwqjbofm`lvqbdfgbnlvmw#le#vmleej`jbofeej`jfm`zQfefqfm`fp`llqgjmbwfgjp`objnfqf{sfgjwjlmgfufolsjmd`bo`vobwfgpjnsojejfgofdjwjnbwfpvapwqjmd+3!#`obpp>!`lnsofwfozjoovpwqbwfejuf#zfbqpjmpwqvnfmwSvaojpkjmd2!#`obpp>!spz`kloldz`lmejgfm`fmvnafq#le#bapfm`f#leel`vpfg#lmiljmfg#wkfpwqv`wvqfpsqfujlvpoz=?,jeqbnf=lm`f#bdbjmavw#qbwkfqjnnjdqbmwple#`lvqpf/b#dqlvs#leOjwfqbwvqfVmojhf#wkf?,b=%maps8\\tevm`wjlm#jw#tbp#wkf@lmufmwjlmbvwlnlajofSqlwfpwbmwbddqfppjufbewfq#wkf#Pjnjobqoz/!#,=?,gju=`loof`wjlm\\x0E\\tevm`wjlmujpjajojwzwkf#vpf#leulovmwffqpbwwqb`wjlmvmgfq#wkf#wkqfbwfmfg)?\\\"X@GBWBXjnslqwbm`fjm#dfmfqbowkf#obwwfq?,elqn=\\t?,-jmgf{Le+$j#>#38#j#?gjeefqfm`fgfulwfg#wlwqbgjwjlmppfbq`k#elqvowjnbwfozwlvqmbnfmwbwwqjavwfppl.`boofg#~\\t?,pwzof=fubovbwjlmfnskbpjyfgb``fppjaof?,pf`wjlm=pv``fppjlmbolmd#tjwkNfbmtkjof/jmgvpwqjfp?,b=?aq#,=kbp#af`lnfbpsf`wp#leWfofujpjlmpveej`jfmwabphfwabooalwk#pjgfp`lmwjmvjmdbm#bqwj`of?jnd#bow>!bgufmwvqfpkjp#nlwkfqnbm`kfpwfqsqjm`jsofpsbqwj`vobq`lnnfmwbqzfeef`wp#legf`jgfg#wl!=?pwqlmd=svaojpkfqpIlvqmbo#legjeej`vowzeb`jojwbwfb``fswbaofpwzof-`pp!\\nevm`wjlm#jmmlubwjlm=@lszqjdkwpjwvbwjlmptlvog#kbufavpjmfppfpGj`wjlmbqzpwbwfnfmwplewfm#vpfgsfqpjpwfmwjm#Ibmvbqz`lnsqjpjmd?,wjwof=\\t\\ngjsolnbwj``lmwbjmjmdsfqelqnjmdf{wfmpjlmpnbz#mlw#af`lm`fsw#le#lm`oj`h>!Jw#jp#boplejmbm`jbo#nbhjmd#wkfOv{fnalvqdbggjwjlmbobqf#`boofgfmdbdfg#jm!p`qjsw!*8avw#jw#tbpfof`wqlmj`lmpvanjw>!\\t?\\\"..#Fmg#fof`wqj`boleej`jboozpvddfpwjlmwls#le#wkfvmojhf#wkfBvpwqbojbmLqjdjmboozqfefqfm`fp\\t?,kfbg=\\x0E\\tqf`ldmjpfgjmjwjbojyfojnjwfg#wlBof{bmgqjbqfwjqfnfmwBgufmwvqfpelvq#zfbqp\\t\\t%ow8\\\"..#jm`qfbpjmdgf`lqbwjlmk0#`obpp>!lqjdjmp#lelaojdbwjlmqfdvobwjlm`obppjejfg+evm`wjlm+bgubmwbdfpafjmd#wkf#kjpwlqjbmp?abpf#kqfeqfsfbwfgoztjoojmd#wl`lnsbqbaofgfpjdmbwfgmlnjmbwjlmevm`wjlmbojmpjgf#wkfqfufobwjlmfmg#le#wkfp#elq#wkf#bvwklqjyfgqfevpfg#wlwbhf#sob`fbvwlmlnlvp`lnsqlnjpfslojwj`bo#qfpwbvqbmwwtl#le#wkfEfaqvbqz#1rvbojwz#leptelaif`w-vmgfqpwbmgmfbqoz#bootqjwwfm#azjmwfqujftp!#tjgwk>!2tjwkgqbtboeolbw9ofewjp#vpvbooz`bmgjgbwfpmftpsbsfqpnzpwfqjlvpGfsbqwnfmwafpw#hmltmsbqojbnfmwpvssqfppfg`lmufmjfmwqfnfnafqfggjeefqfmw#pzpwfnbwj`kbp#ofg#wlsqlsbdbmgb`lmwqloofgjmeovfm`fp`fqfnlmjbosql`objnfgSqlwf`wjlmoj#`obpp>!P`jfmwjej``obpp>!ml.wqbgfnbqhpnlqf#wkbm#tjgfpsqfbgOjafqbwjlmwllh#sob`fgbz#le#wkfbp#olmd#bpjnsqjplmfgBggjwjlmbo\\t?kfbg=\\t?nObalqbwlqzMlufnafq#1f{`fswjlmpJmgvpwqjboubqjfwz#leeolbw9#ofeGvqjmd#wkfbppfppnfmwkbuf#affm#gfbop#tjwkPwbwjpwj`pl``vqqfm`f,vo=?,gju=`ofbqej{!=wkf#svaoj`nbmz#zfbqptkj`k#tfqflufq#wjnf/pzmlmznlvp`lmwfmw!=\\tsqfpvnbaozkjp#ebnjozvpfqBdfmw-vmf{sf`wfgjm`ovgjmd#`kboofmdfgb#njmlqjwzvmgfejmfg!afolmdp#wlwbhfm#eqlnjm#L`wlafqslpjwjlm9#pbjg#wl#afqfojdjlvp#Efgfqbwjlm#qltpsbm>!lmoz#b#eftnfbmw#wkbwofg#wl#wkf..=\\x0E\\t?gju#?ejfogpfw=Bq`kajpkls#`obpp>!mlafjmd#vpfgbssqlb`kfpsqjujofdfpmlp`qjsw=\\tqfpvowp#jmnbz#af#wkfFbpwfq#fddnf`kbmjpnpqfbplmbaofSlsvobwjlm@loof`wjlmpfof`wfg!=mlp`qjsw=\\x0E,jmgf{-sksbqqjubo#le.ippgh$**8nbmbdfg#wljm`lnsofwf`bpvbowjfp`lnsofwjlm@kqjpwjbmpPfswfnafq#bqjwknfwj`sql`fgvqfpnjdkw#kbufSqlgv`wjlmjw#bssfbqpSkjolplskzeqjfmgpkjsofbgjmd#wldjujmd#wkfwltbqg#wkfdvbqbmwffggl`vnfmwfg`lolq9 333ujgfl#dbnf`lnnjppjlmqfeof`wjmd`kbmdf#wkfbppl`jbwfgpbmp.pfqjelmhfzsqfpp8#sbggjmd9Kf#tbp#wkfvmgfqozjmdwzsj`booz#/#bmg#wkf#pq`Fofnfmwpv``fppjufpjm`f#wkf#pklvog#af#mfwtlqhjmdb``lvmwjmdvpf#le#wkfoltfq#wkbmpkltp#wkbw?,psbm=\\t\\n\\n`lnsobjmwp`lmwjmvlvprvbmwjwjfpbpwqlmlnfqkf#gjg#mlwgvf#wl#jwpbssojfg#wlbm#bufqbdffeelqwp#wlwkf#evwvqfbwwfnsw#wlWkfqfelqf/`bsbajojwzQfsvaoj`bmtbp#elqnfgFof`wqlmj`hjolnfwfqp`kboofmdfpsvaojpkjmdwkf#elqnfqjmgjdfmlvpgjqf`wjlmppvapjgjbqz`lmpsjqb`zgfwbjop#lebmg#jm#wkfbeelqgbaofpvapwbm`fpqfbplm#elq`lmufmwjlmjwfnwzsf>!baplovwfozpvsslpfgozqfnbjmfg#bbwwqb`wjufwqbufoojmdpfsbqbwfozel`vpfp#lmfofnfmwbqzbssoj`baofelvmg#wkbwpwzofpkffwnbmvp`qjswpwbmgp#elq#ml.qfsfbw+plnfwjnfp@lnnfq`jbojm#Bnfqj`bvmgfqwbhfmrvbqwfq#lebm#f{bnsofsfqplmboozjmgf{-sks<?,avwwlm=\\tsfq`fmwbdfafpw.hmltm`qfbwjmd#b!#gjq>!owqOjfvwfmbmw\\t?gju#jg>!wkfz#tlvogbajojwz#lenbgf#vs#lemlwfg#wkbw`ofbq#wkbwbqdvf#wkbwwl#bmlwkfq`kjogqfm$psvqslpf#leelqnvobwfgabpfg#vslmwkf#qfdjlmpvaif`w#lesbppfmdfqpslppfppjlm-\\t\\tJm#wkf#Afelqf#wkfbewfqtbqgp`vqqfmwoz#b`qlpp#wkfp`jfmwjej``lnnvmjwz-`bsjwbojpnjm#Dfqnbmzqjdkw.tjmdwkf#pzpwfnPl`jfwz#leslojwj`jbmgjqf`wjlm9tfmw#lm#wlqfnlubo#le#Mft#Zlqh#bsbqwnfmwpjmgj`bwjlmgvqjmd#wkfvmofpp#wkfkjpwlqj`bokbg#affm#bgfejmjwjufjmdqfgjfmwbwwfmgbm`f@fmwfq#elqsqlnjmfm`fqfbgzPwbwfpwqbwfdjfpavw#jm#wkfbp#sbqw#le`lmpwjwvwf`objn#wkbwobalqbwlqz`lnsbwjaofebjovqf#le/#pv`k#bp#afdbm#tjwkvpjmd#wkf#wl#sqlujgfefbwvqf#leeqln#tkj`k,!#`obpp>!dfloldj`bopfufqbo#legfojafqbwfjnslqwbmw#klogp#wkbwjmd%rvlw8#ubojdm>wlswkf#Dfqnbmlvwpjgf#lemfdlwjbwfgkjp#`bqffqpfsbqbwjlmjg>!pfbq`ktbp#`boofgwkf#elvqwkqf`qfbwjlmlwkfq#wkbmsqfufmwjlmtkjof#wkf#fgv`bwjlm/`lmmf`wjmdb``vqbwfoztfqf#avjowtbp#hjoofgbdqffnfmwpnv`k#nlqf#Gvf#wl#wkftjgwk9#233plnf#lwkfqHjmdgln#lewkf#fmwjqfebnlvp#elqwl#`lmmf`wlaif`wjufpwkf#Eqfm`ksflsof#bmgefbwvqfg!=jp#pbjg#wlpwqv`wvqboqfefqfmgvnnlpw#lewfmb#pfsbqbwf.=\\t?gju#jg#Leej`jbo#tlqogtjgf-bqjb.obafowkf#sobmfwbmg#jw#tbpg!#ubovf>!ollhjmd#bwafmfej`jbobqf#jm#wkfnlmjwlqjmdqfslqwfgozwkf#nlgfqmtlqhjmd#lmbooltfg#wltkfqf#wkf#jmmlubwjuf?,b=?,gju=plvmgwqb`hpfbq`kElqnwfmg#wl#afjmsvw#jg>!lsfmjmd#leqfpwqj`wfgbglswfg#azbggqfppjmdwkfloldjbmnfwklgp#leubqjbmw#le@kqjpwjbm#ufqz#obqdfbvwlnlwjufaz#ebq#wkfqbmdf#eqlnsvqpvjw#leeloolt#wkfaqlvdkw#wljm#Fmdobmgbdqff#wkbwb``vpfg#le`lnfp#eqlnsqfufmwjmdgju#pwzof>kjp#lq#kfqwqfnfmglvpeqffgln#le`lm`fqmjmd3#2fn#2fn8Abphfwaboo,pwzof-`ppbm#fbqojfqfufm#bewfq,!#wjwof>!-`ln,jmgf{wbhjmd#wkfsjwwpavqdk`lmwfmw!=\\x0E?p`qjsw=+ewvqmfg#lvwkbujmd#wkf?,psbm=\\x0E\\t#l``bpjlmboaf`bvpf#jwpwbqwfg#wlskzpj`booz=?,gju=\\t##`qfbwfg#az@vqqfmwoz/#ad`lolq>!wbajmgf{>!gjpbpwqlvpBmbozwj`p#bopl#kbp#b=?gju#jg>!?,pwzof=\\t?`boofg#elqpjmdfq#bmg-pq`#>#!,,ujlobwjlmpwkjp#sljmw`lmpwbmwozjp#ol`bwfgqf`lqgjmdpg#eqln#wkfmfgfqobmgpslqwvdv/Fp;N;};D;u;F5m4K4]4_7`gfpbqqlool`lnfmwbqjlfgv`b`j/_mpfswjfnaqfqfdjpwqbglgjqf``j/_mvaj`b`j/_msvaoj`jgbgqfpsvfpwbpqfpvowbglpjnslqwbmwfqfpfqubglpbqw/A`volpgjefqfmwfppjdvjfmwfpqfs/Vaoj`bpjwvb`j/_mnjmjpwfqjlsqjub`jgbggjqf`wlqjlelqnb`j/_mslaob`j/_msqfpjgfmwf`lmw\", \"fmjglpb``fplqjlpwf`kmlqbwjsfqplmbofp`bwfdlq/Abfpsf`jbofpgjpslmjaofb`wvbojgbgqfefqfm`jbuboobglojgajaojlwf`bqfob`jlmfp`bofmgbqjlslo/Awj`bpbmwfqjlqfpgl`vnfmwlpmbwvqbofybnbwfqjbofpgjefqfm`jbf`lm/_nj`bwqbmpslqwfqlgq/Advfysbqwj`jsbqfm`vfmwqbmgjp`vpj/_mfpwqv`wvqbevmgb`j/_meqf`vfmwfpsfqnbmfmwfwlwbonfmwf<P<R<Z<Q<R<]=o<X<Y=n<P<R<Z<Y=n<^=l<Y<P=c=n<\\\\<V<Z<Y=k=n<R<]=g<]<R<W<Y<Y<R=k<Y<Q=`=a=n<R<_<R<V<R<_<X<\\\\<S<R=m<W<Y<^=m<Y<_<R=m<\\\\<U=n<Y=k<Y=l<Y<[<P<R<_=o=n=m<\\\\<U=n<\\\\<Z<T<[<Q<T<P<Y<Z<X=o<]=o<X=o=n<s<R<T=m<V<[<X<Y=m=`<^<T<X<Y<R=m<^=c<[<T<Q=o<Z<Q<R=m<^<R<Y<U<W=b<X<Y<U<S<R=l<Q<R<P<Q<R<_<R<X<Y=n<Y<U=m<^<R<T=i<S=l<\\\\<^<\\\\=n<\\\\<V<R<U<P<Y=m=n<R<T<P<Y<Y=n<Z<T<[<Q=`<R<X<Q<R<U<W=o=k=d<Y<S<Y=l<Y<X=k<\\\\=m=n<T=k<\\\\=m=n=`=l<\\\\<]<R=n<Q<R<^=g=i<S=l<\\\\<^<R=m<R<]<R<U<S<R=n<R<P<P<Y<Q<Y<Y=k<T=m<W<Y<Q<R<^=g<Y=o=m<W=o<_<R<V<R<W<R<Q<\\\\<[<\\\\<X=n<\\\\<V<R<Y=n<R<_<X<\\\\<S<R=k=n<T<s<R=m<W<Y=n<\\\\<V<T<Y<Q<R<^=g<U=m=n<R<T=n=n<\\\\<V<T=i=m=l<\\\\<[=o<M<\\\\<Q<V=n=h<R=l=o<P<v<R<_<X<\\\\<V<Q<T<_<T=m<W<R<^<\\\\<Q<\\\\=d<Y<U<Q<\\\\<U=n<T=m<^<R<T<P=m<^=c<[=`<W=b<]<R<U=k<\\\\=m=n<R=m=l<Y<X<T<v=l<R<P<Y<H<R=l=o<P=l=g<Q<V<Y=m=n<\\\\<W<T<S<R<T=m<V=n=g=m=c=k<P<Y=m=c=j=j<Y<Q=n=l=n=l=o<X<\\\\=m<\\\\<P=g=i=l=g<Q<V<\\\\<q<R<^=g<U=k<\\\\=m<R<^<P<Y=m=n<\\\\=h<T<W=`<P<P<\\\\=l=n<\\\\=m=n=l<\\\\<Q<P<Y=m=n<Y=n<Y<V=m=n<Q<\\\\=d<T=i<P<T<Q=o=n<T<P<Y<Q<T<T<P<Y=b=n<Q<R<P<Y=l<_<R=l<R<X=m<\\\\<P<R<P=a=n<R<P=o<V<R<Q=j<Y=m<^<R<Y<P<V<\\\\<V<R<U<|=l=i<T<^5i5j4F4C5e4I4]4_4K5h4]4_4K5h4E4K5h4U4K5i5o4F4D5k4K4D4]4K5i4@4K5h5f5d5i4K5h4Y5d4]4@4C5f4C4E4K5h4U4Z5d4I4Z4K5m4E4K5h5n4_5i4K5h4U4K4D4F4A5i5f5h5i5h5m4K4F5i5h4F5n5e4F4U4C5f5h4K5h4X4U4]4O4B4D4K4]4F4[5d5f4]4U5h5f5o5i4I4]5m4K5n4[5h4D4K4F4K5h5h4V4E4F4]4F5f4D4K5h5j4K4_4K5h4X5f4B5i5j4F4C5f4K5h4U4]4D4K5h5n4Y4Y4K5m5h4K5i4U5h5f5k4K4F4A4C5f4G4K5h5h5k5i4K5h4U5i5h5i5o4F4D4E5f5i5o5j5o4K5h4[5m5h5m5f4C5f5d4I4C4K4]4E4F4K4]5f4B4K5h4Y4A4E4F4_4@5f5h4K5h5d5n4F4U5j4C5i4K5i4C5f5j4E4F4Y5i5f5i4O4]4X5f5m4K5h4\\\\5f5j4U4]4D5f4E4D5d4K4D4E4O5h4U4K4D4K5h4_5m4]5i4X4K5o5h4F4U4K5h5e4K5h4O5d5h4K5h4_5j4E4@4K5i4U4E4K5h4Y4A5m4K5h4C5f5j5o5h5i4K4F4K5h4B4K4Y4K5h5i5h5m4O4U4Z4K4M5o4F4K4D4E4K5h4B5f4]4]4_4K4J5h4K5h5n5h4D4K5h4O4C4D5i5n4K4[4U5i4]4K4_5h5i5j4[5n4E4K5h5o4F4D4K5h4]4@5h4K4X4F4]5o4K5h5n4C5i5f4U4[5f5opAzWbdMbnf+-isd!#bow>!2s{#plojg# -dje!#bow>!wqbmpsbqfmwjmelqnbwjlmbssoj`bwjlm!#lm`oj`h>!fpwbaojpkfgbgufqwjpjmd-smd!#bow>!fmujqlmnfmwsfqelqnbm`fbssqlsqjbwf%bns8ngbpk8jnnfgjbwfoz?,pwqlmd=?,qbwkfq#wkbmwfnsfqbwvqfgfufolsnfmw`lnsfwjwjlmsob`fklogfqujpjajojwz9`lszqjdkw!=3!#kfjdkw>!fufm#wklvdkqfsob`fnfmwgfpwjmbwjlm@lqslqbwjlm?vo#`obpp>!Bppl`jbwjlmjmgjujgvbopsfqpsf`wjufpfwWjnflvw+vqo+kwws9,,nbwkfnbwj`pnbqdjm.wls9fufmwvbooz#gfp`qjswjlm*#ml.qfsfbw`loof`wjlmp-ISD\\x7Fwkvna\\x7Fsbqwj`jsbwf,kfbg=?algzeolbw9ofew8?oj#`obpp>!kvmgqfgp#le\\t\\tKltfufq/#`lnslpjwjlm`ofbq9alwk8`llsfqbwjlmtjwkjm#wkf#obafo#elq>!alqgfq.wls9Mft#Yfbobmgqf`lnnfmgfgsklwldqbskzjmwfqfpwjmd%ow8pvs%dw8`lmwqlufqpzMfwkfqobmgpbowfqmbwjufnb{ofmdwk>!ptjwyfqobmgGfufolsnfmwfppfmwjbooz\\t\\tBowklvdk#?,wf{wbqfb=wkvmgfqajqgqfsqfpfmwfg%bns8mgbpk8psf`vobwjlm`lnnvmjwjfpofdjpobwjlmfof`wqlmj`p\\t\\n?gju#jg>!joovpwqbwfgfmdjmffqjmdwfqqjwlqjfpbvwklqjwjfpgjpwqjavwfg5!#kfjdkw>!pbmp.pfqje8`bsbaof#le#gjpbssfbqfgjmwfqb`wjufollhjmd#elqjw#tlvog#afBedkbmjpwbmtbp#`qfbwfgNbwk-eollq+pvqqlvmgjmd`bm#bopl#aflapfqubwjlmnbjmwfmbm`ffm`lvmwfqfg?k1#`obpp>!nlqf#qf`fmwjw#kbp#affmjmubpjlm#le*-dfwWjnf+*evmgbnfmwboGfpsjwf#wkf!=?gju#jg>!jmpsjqbwjlmf{bnjmbwjlmsqfsbqbwjlmf{sobmbwjlm?jmsvw#jg>!?,b=?,psbm=ufqpjlmp#lejmpwqvnfmwpafelqf#wkf##>#$kwws9,,Gfp`qjswjlmqfobwjufoz#-pvapwqjmd+fb`k#le#wkff{sfqjnfmwpjmeovfmwjbojmwfdqbwjlmnbmz#sflsofgvf#wl#wkf#`lnajmbwjlmgl#mlw#kbufNjggof#Fbpw?mlp`qjsw=?`lszqjdkw!#sfqkbsp#wkfjmpwjwvwjlmjm#Gf`fnafqbqqbmdfnfmwnlpw#ebnlvpsfqplmbojwz`qfbwjlm#leojnjwbwjlmpf{`ovpjufozplufqfjdmwz.`lmwfmw!=\\t?wg#`obpp>!vmgfqdqlvmgsbqboofo#wlgl`wqjmf#lel``vsjfg#azwfqnjmloldzQfmbjppbm`fb#mvnafq#lepvsslqw#elqf{solqbwjlmqf`ldmjwjlmsqfgf`fpplq?jnd#pq`>!,?k2#`obpp>!svaoj`bwjlmnbz#bopl#afpsf`jbojyfg?,ejfogpfw=sqldqfppjufnjoojlmp#lepwbwfp#wkbwfmelq`fnfmwbqlvmg#wkf#lmf#bmlwkfq-sbqfmwMlgfbdqj`vowvqfBowfqmbwjufqfpfbq`kfqpwltbqgp#wkfNlpw#le#wkfnbmz#lwkfq#+fpsf`jbooz?wg#tjgwk>!8tjgwk9233&jmgfsfmgfmw?k0#`obpp>!#lm`kbmdf>!*-bgg@obpp+jmwfqb`wjlmLmf#le#wkf#gbvdkwfq#leb``fpplqjfpaqbm`kfp#le\\x0E\\t?gju#jg>!wkf#obqdfpwgf`obqbwjlmqfdvobwjlmpJmelqnbwjlmwqbmpobwjlmgl`vnfmwbqzjm#lqgfq#wl!=\\t?kfbg=\\t?!#kfjdkw>!2b`qlpp#wkf#lqjfmwbwjlm*8?,p`qjsw=jnsofnfmwfg`bm#af#pffmwkfqf#tbp#bgfnlmpwqbwf`lmwbjmfq!=`lmmf`wjlmpwkf#Aqjwjpktbp#tqjwwfm\\\"jnslqwbmw8s{8#nbqdjm.elooltfg#azbajojwz#wl#`lnsoj`bwfggvqjmd#wkf#jnnjdqbwjlmbopl#`boofg?k7#`obpp>!gjpwjm`wjlmqfsob`fg#azdlufqmnfmwpol`bwjlm#lejm#Mlufnafqtkfwkfq#wkf?,s=\\t?,gju=b`rvjpjwjlm`boofg#wkf#sfqpf`vwjlmgfpjdmbwjlmxelmw.pjyf9bssfbqfg#jmjmufpwjdbwff{sfqjfm`fgnlpw#ojhfoztjgfoz#vpfggjp`vppjlmpsqfpfm`f#le#+gl`vnfmw-f{wfmpjufozJw#kbp#affmjw#glfp#mlw`lmwqbqz#wljmkbajwbmwpjnsqlufnfmwp`klobqpkjs`lmpvnswjlmjmpwqv`wjlmelq#f{bnsoflmf#lq#nlqfs{8#sbggjmdwkf#`vqqfmwb#pfqjfp#lebqf#vpvboozqlof#jm#wkfsqfujlvpoz#gfqjubwjufpfujgfm`f#lef{sfqjfm`fp`lolqp`kfnfpwbwfg#wkbw`fqwjej`bwf?,b=?,gju=\\t#pfof`wfg>!kjdk#p`klloqfpslmpf#wl`lnelqwbaofbglswjlm#lewkqff#zfbqpwkf#`lvmwqzjm#Efaqvbqzpl#wkbw#wkfsflsof#tkl#sqlujgfg#az?sbqbn#mbnfbeef`wfg#azjm#wfqnp#lebssljmwnfmwJPL.;;6:.2!tbp#alqm#jmkjpwlqj`bo#qfdbqgfg#bpnfbpvqfnfmwjp#abpfg#lm#bmg#lwkfq#9#evm`wjlm+pjdmjej`bmw`fofaqbwjlmwqbmpnjwwfg,ip,irvfqz-jp#hmltm#bpwkflqfwj`bo#wbajmgf{>!jw#`lvog#af?mlp`qjsw=\\tkbujmd#affm\\x0E\\t?kfbg=\\x0E\\t?#%rvlw8Wkf#`lnsjobwjlmkf#kbg#affmsqlgv`fg#azskjolplskfq`lmpwqv`wfgjmwfmgfg#wlbnlmd#lwkfq`lnsbqfg#wlwl#pbz#wkbwFmdjmffqjmdb#gjeefqfmwqfefqqfg#wlgjeefqfm`fpafojfe#wkbwsklwldqbskpjgfmwjezjmdKjpwlqz#le#Qfsvaoj`#lemf`fppbqjozsqlabajojwzwf`kmj`boozofbujmd#wkfpsf`wb`vobqeqb`wjlm#lefof`wqj`jwzkfbg#le#wkfqfpwbvqbmwpsbqwmfqpkjsfnskbpjp#lmnlpw#qf`fmwpkbqf#tjwk#pbzjmd#wkbwejoofg#tjwkgfpjdmfg#wljw#jp#lewfm!=?,jeqbnf=bp#elooltp9nfqdfg#tjwkwkqlvdk#wkf`lnnfq`jbo#sljmwfg#lvwlsslqwvmjwzujft#le#wkfqfrvjqfnfmwgjujpjlm#lesqldqbnnjmdkf#qf`fjufgpfwJmwfqubo!=?,psbm=?,jm#Mft#Zlqhbggjwjlmbo#`lnsqfppjlm\\t\\t?gju#jg>!jm`lqslqbwf8?,p`qjsw=?bwwb`kFufmwaf`bnf#wkf#!#wbqdfw>!\\\\`bqqjfg#lvwPlnf#le#wkfp`jfm`f#bmgwkf#wjnf#le@lmwbjmfq!=nbjmwbjmjmd@kqjpwlskfqNv`k#le#wkftqjwjmdp#le!#kfjdkw>!1pjyf#le#wkfufqpjlm#le#nj{wvqf#le#afwtffm#wkfF{bnsofp#lefgv`bwjlmbo`lnsfwjwjuf#lmpvanjw>!gjqf`wlq#legjpwjm`wjuf,GWG#[KWNO#qfobwjmd#wlwfmgfm`z#wlsqlujm`f#letkj`k#tlvoggfpsjwf#wkfp`jfmwjej`#ofdjpobwvqf-jmmfqKWNO#boofdbwjlmpBdqj`vowvqftbp#vpfg#jmbssqlb`k#wljmwfoojdfmwzfbqp#obwfq/pbmp.pfqjegfwfqnjmjmdSfqelqnbm`fbssfbqbm`fp/#tkj`k#jp#elvmgbwjlmpbaaqfujbwfgkjdkfq#wkbmp#eqln#wkf#jmgjujgvbo#`lnslpfg#lepvsslpfg#wl`objnp#wkbwbwwqjavwjlmelmw.pjyf92fofnfmwp#leKjpwlqj`bo#kjp#aqlwkfqbw#wkf#wjnfbmmjufqpbqzdlufqmfg#azqfobwfg#wl#vowjnbwfoz#jmmlubwjlmpjw#jp#pwjoo`bm#lmoz#afgfejmjwjlmpwlDNWPwqjmdB#mvnafq#lejnd#`obpp>!Fufmwvbooz/tbp#`kbmdfgl``vqqfg#jmmfjdkalqjmdgjpwjmdvjpktkfm#kf#tbpjmwqlgv`jmdwfqqfpwqjboNbmz#le#wkfbqdvfp#wkbwbm#Bnfqj`bm`lmrvfpw#letjgfpsqfbg#tfqf#hjoofgp`qffm#bmg#Jm#lqgfq#wlf{sf`wfg#wlgfp`fmgbmwpbqf#ol`bwfgofdjpobwjufdfmfqbwjlmp#ab`hdqlvmgnlpw#sflsofzfbqp#bewfqwkfqf#jp#mlwkf#kjdkfpweqfrvfmwoz#wkfz#gl#mlwbqdvfg#wkbwpkltfg#wkbwsqfglnjmbmwwkfloldj`boaz#wkf#wjnf`lmpjgfqjmdpklqw.ojufg?,psbm=?,b=`bm#af#vpfgufqz#ojwwoflmf#le#wkf#kbg#boqfbgzjmwfqsqfwfg`lnnvmj`bwfefbwvqfp#ledlufqmnfmw/?,mlp`qjsw=fmwfqfg#wkf!#kfjdkw>!0Jmgfsfmgfmwslsvobwjlmpobqdf.p`bof-#Bowklvdk#vpfg#jm#wkfgfpwqv`wjlmslppjajojwzpwbqwjmd#jmwtl#lq#nlqff{sqfppjlmppvalqgjmbwfobqdfq#wkbmkjpwlqz#bmg?,lswjlm=\\x0E\\t@lmwjmfmwbofojnjmbwjmdtjoo#mlw#afsqb`wj`f#lejm#eqlmw#lepjwf#le#wkffmpvqf#wkbwwl#`qfbwf#bnjppjppjssjslwfmwjboozlvwpwbmgjmdafwwfq#wkbmtkbw#jp#mltpjwvbwfg#jmnfwb#mbnf>!WqbgjwjlmbopvddfpwjlmpWqbmpobwjlmwkf#elqn#lebwnlpskfqj`jgfloldj`bofmwfqsqjpfp`bo`vobwjmdfbpw#le#wkfqfnmbmwp#lesovdjmpsbdf,jmgf{-sks<qfnbjmfg#jmwqbmpelqnfgKf#tbp#bopltbp#boqfbgzpwbwjpwj`bojm#ebulq#leNjmjpwqz#lenlufnfmw#leelqnvobwjlmjp#qfrvjqfg?ojmh#qfo>!Wkjp#jp#wkf#?b#kqfe>!,slsvobqjyfgjmuloufg#jmbqf#vpfg#wlbmg#pfufqbonbgf#az#wkfpffnp#wl#afojhfoz#wkbwSbofpwjmjbmmbnfg#bewfqjw#kbg#affmnlpw#`lnnlmwl#qfefq#wlavw#wkjp#jp`lmpf`vwjufwfnslqbqjozJm#dfmfqbo/`lmufmwjlmpwbhfp#sob`fpvagjujpjlmwfqqjwlqjbolsfqbwjlmbosfqnbmfmwoztbp#obqdfozlvwaqfbh#lejm#wkf#sbpwelooltjmd#b#{nomp9ld>!=?b#`obpp>!`obpp>!wf{w@lmufqpjlm#nbz#af#vpfgnbmveb`wvqfbewfq#afjmd`ofbqej{!=\\trvfpwjlm#letbp#fof`wfgwl#af`lnf#baf`bvpf#le#plnf#sflsofjmpsjqfg#azpv``fppevo#b#wjnf#tkfmnlqf#`lnnlmbnlmdpw#wkfbm#leej`jbotjgwk9233&8wf`kmloldz/tbp#bglswfgwl#hffs#wkfpfwwofnfmwpojuf#ajqwkpjmgf{-kwno!@lmmf`wj`vwbppjdmfg#wl%bns8wjnfp8b``lvmw#elqbojdm>qjdkwwkf#`lnsbmzbotbzp#affmqfwvqmfg#wljmuloufnfmwAf`bvpf#wkfwkjp#sfqjlg!#mbnf>!r!#`lmejmfg#wlb#qfpvow#leubovf>!!#,=jp#b`wvboozFmujqlmnfmw\\x0E\\t?,kfbg=\\x0E\\t@lmufqpfoz/=\\t?gju#jg>!3!#tjgwk>!2jp#sqlabaozkbuf#af`lnf`lmwqloojmdwkf#sqlaofn`jwjyfmp#leslojwj`jbmpqfb`kfg#wkfbp#fbqoz#bp9mlmf8#lufq?wbaof#`fooubojgjwz#legjqf`woz#wllmnlvpfgltmtkfqf#jw#jptkfm#jw#tbpnfnafqp#le#qfobwjlm#wlb``lnnlgbwfbolmd#tjwk#Jm#wkf#obwfwkf#Fmdojpkgfoj`jlvp!=wkjp#jp#mlwwkf#sqfpfmwje#wkfz#bqfbmg#ejmboozb#nbwwfq#le\\x0E\\t\\n?,gju=\\x0E\\t\\x0E\\t?,p`qjsw=ebpwfq#wkbmnbilqjwz#lebewfq#tkj`k`lnsbqbwjufwl#nbjmwbjmjnsqluf#wkfbtbqgfg#wkffq!#`obpp>!eqbnfalqgfqqfpwlqbwjlmjm#wkf#pbnfbmbozpjp#lewkfjq#ejqpwGvqjmd#wkf#`lmwjmfmwbopfrvfm`f#leevm`wjlm+*xelmw.pjyf9#tlqh#lm#wkf?,p`qjsw=\\t?afdjmp#tjwkibubp`qjsw9`lmpwjwvfmwtbp#elvmgfgfrvjojaqjvnbppvnf#wkbwjp#djufm#azmffgp#wl#af`llqgjmbwfpwkf#ubqjlvpbqf#sbqw#lelmoz#jm#wkfpf`wjlmp#lejp#b#`lnnlmwkflqjfp#legjp`lufqjfpbppl`jbwjlmfgdf#le#wkfpwqfmdwk#leslpjwjlm#jmsqfpfmw.gbzvmjufqpboozwl#elqn#wkfavw#jmpwfbg`lqslqbwjlmbwwb`kfg#wljp#`lnnlmozqfbplmp#elq#%rvlw8wkf#`bm#af#nbgftbp#baof#wltkj`k#nfbmpavw#gjg#mlwlmNlvpfLufqbp#slppjaoflsfqbwfg#az`lnjmd#eqlnwkf#sqjnbqzbggjwjlm#leelq#pfufqbowqbmpefqqfgb#sfqjlg#lebqf#baof#wlkltfufq/#jwpklvog#kbufnv`k#obqdfq\\t\\n?,p`qjsw=bglswfg#wkfsqlsfqwz#legjqf`wfg#azfeef`wjufoztbp#aqlvdkw`kjogqfm#leSqldqbnnjmdolmdfq#wkbmnbmvp`qjswptbq#bdbjmpwaz#nfbmp#lebmg#nlpw#lepjnjobq#wl#sqlsqjfwbqzlqjdjmbwjmdsqfpwjdjlvpdqbnnbwj`bof{sfqjfm`f-wl#nbhf#wkfJw#tbp#bopljp#elvmg#jm`lnsfwjwlqpjm#wkf#V-P-qfsob`f#wkfaqlvdkw#wkf`bo`vobwjlmeboo#le#wkfwkf#dfmfqbosqb`wj`boozjm#klmlq#leqfofbpfg#jmqfpjgfmwjbobmg#plnf#lehjmd#le#wkfqfb`wjlm#wl2pw#Fbqo#le`vowvqf#bmgsqjm`jsbooz?,wjwof=\\t##wkfz#`bm#afab`h#wl#wkfplnf#le#kjpf{slpvqf#wlbqf#pjnjobqelqn#le#wkfbggEbulqjwf`jwjyfmpkjssbqw#jm#wkfsflsof#tjwkjm#sqb`wj`fwl#`lmwjmvf%bns8njmvp8bssqlufg#az#wkf#ejqpw#booltfg#wkfbmg#elq#wkfevm`wjlmjmdsobzjmd#wkfplovwjlm#wlkfjdkw>!3!#jm#kjp#allhnlqf#wkbm#belooltp#wkf`qfbwfg#wkfsqfpfm`f#jm%maps8?,wg=mbwjlmbojpwwkf#jgfb#leb#`kbqb`wfqtfqf#elq`fg#`obpp>!awmgbzp#le#wkfefbwvqfg#jmpkltjmd#wkfjmwfqfpw#jmjm#sob`f#lewvqm#le#wkfwkf#kfbg#leOlqg#le#wkfslojwj`boozkbp#jwp#ltmFgv`bwjlmbobssqlubo#leplnf#le#wkffb`k#lwkfq/afkbujlq#lebmg#af`bvpfbmg#bmlwkfqbssfbqfg#lmqf`lqgfg#jmaob`h%rvlw8nbz#jm`ovgfwkf#tlqog$p`bm#ofbg#wlqfefqp#wl#balqgfq>!3!#dlufqmnfmw#tjmmjmd#wkfqfpvowfg#jm#tkjof#wkf#Tbpkjmdwlm/wkf#pvaif`w`jwz#jm#wkf=?,gju=\\x0E\\t\\n\\nqfeof`w#wkfwl#`lnsofwfaf`bnf#nlqfqbgjlb`wjufqfif`wfg#aztjwklvw#bmzkjp#ebwkfq/tkj`k#`lvog`lsz#le#wkfwl#jmgj`bwfb#slojwj`bob``lvmwp#le`lmpwjwvwfptlqhfg#tjwkfq?,b=?,oj=le#kjp#ojefb``lnsbmjfg`ojfmwTjgwksqfufmw#wkfOfdjpobwjufgjeefqfmwozwldfwkfq#jmkbp#pfufqboelq#bmlwkfqwf{w#le#wkfelvmgfg#wkff#tjwk#wkf#jp#vpfg#elq`kbmdfg#wkfvpvbooz#wkfsob`f#tkfqftkfqfbp#wkf=#?b#kqfe>!!=?b#kqfe>!wkfnpfoufp/bowklvdk#kfwkbw#`bm#afwqbgjwjlmboqlof#le#wkfbp#b#qfpvowqfnluf@kjoggfpjdmfg#aztfpw#le#wkfPlnf#sflsofsqlgv`wjlm/pjgf#le#wkfmftpofwwfqpvpfg#az#wkfgltm#wl#wkfb``fswfg#azojuf#jm#wkfbwwfnswp#wllvwpjgf#wkfeqfrvfm`jfpKltfufq/#jmsqldqbnnfqpbw#ofbpw#jmbssql{jnbwfbowklvdk#jwtbp#sbqw#lebmg#ubqjlvpDlufqmlq#lewkf#bqwj`ofwvqmfg#jmwl=?b#kqfe>!,wkf#f`lmlnzjp#wkf#nlpwnlpw#tjgfoztlvog#obwfqbmg#sfqkbspqjpf#wl#wkfl``vqp#tkfmvmgfq#tkj`k`lmgjwjlmp-wkf#tfpwfqmwkflqz#wkbwjp#sqlgv`fgwkf#`jwz#lejm#tkj`k#kfpffm#jm#wkfwkf#`fmwqboavjogjmd#lenbmz#le#kjpbqfb#le#wkfjp#wkf#lmoznlpw#le#wkfnbmz#le#wkfwkf#TfpwfqmWkfqf#jp#mlf{wfmgfg#wlPwbwjpwj`bo`lopsbm>1#\\x7Fpklqw#pwlqzslppjaof#wlwlsloldj`bo`qjwj`bo#leqfslqwfg#wlb#@kqjpwjbmgf`jpjlm#wljp#frvbo#wlsqlaofnp#leWkjp#`bm#afnfq`kbmgjpfelq#nlpw#leml#fujgfm`ffgjwjlmp#lefofnfmwp#jm%rvlw8-#Wkf`ln,jnbdfp,tkj`k#nbhfpwkf#sql`fppqfnbjmp#wkfojwfqbwvqf/jp#b#nfnafqwkf#slsvobqwkf#bm`jfmwsqlaofnp#jmwjnf#le#wkfgfefbwfg#azalgz#le#wkfb#eft#zfbqpnv`k#le#wkfwkf#tlqh#le@bojelqmjb/pfqufg#bp#bdlufqmnfmw-`lm`fswp#lenlufnfmw#jm\\n\\n?gju#jg>!jw!#ubovf>!obmdvbdf#lebp#wkfz#bqfsqlgv`fg#jmjp#wkbw#wkff{sobjm#wkfgju=?,gju=\\tKltfufq#wkfofbg#wl#wkf\\n?b#kqfe>!,tbp#dqbmwfgsflsof#kbuf`lmwjmvbooztbp#pffm#bpbmg#qfobwfgwkf#qlof#lesqlslpfg#azle#wkf#afpwfb`k#lwkfq-@lmpwbmwjmfsflsof#eqlngjbof`wp#lewl#qfujpjlmtbp#qfmbnfgb#plvq`f#lewkf#jmjwjboobvm`kfg#jmsqlujgf#wkfwl#wkf#tfpwtkfqf#wkfqfbmg#pjnjobqafwtffm#wtljp#bopl#wkfFmdojpk#bmg`lmgjwjlmp/wkbw#jw#tbpfmwjwofg#wlwkfnpfoufp-rvbmwjwz#leqbmpsbqfm`zwkf#pbnf#bpwl#iljm#wkf`lvmwqz#bmgwkjp#jp#wkfWkjp#ofg#wlb#pwbwfnfmw`lmwqbpw#wlobpwJmgf{Lewkqlvdk#kjpjp#gfpjdmfgwkf#wfqn#jpjp#sqlujgfgsqlwf`w#wkfmd?,b=?,oj=Wkf#`vqqfmwwkf#pjwf#lepvapwbmwjbof{sfqjfm`f/jm#wkf#Tfpwwkfz#pklvogpolufm(ajmb`lnfmwbqjlpvmjufqpjgbg`lmgj`jlmfpb`wjujgbgfpf{sfqjfm`jbwf`mlold/Absqlgv``j/_msvmwvb`j/_mbsoj`b`j/_m`lmwqbpf/]b`bwfdlq/Abpqfdjpwqbqpfsqlefpjlmbowqbwbnjfmwlqfd/Apwqbwfpf`qfwbq/Absqjm`jsbofpsqlwf``j/_mjnslqwbmwfpjnslqwbm`jbslpjajojgbgjmwfqfpbmwf`qf`jnjfmwlmf`fpjgbgfppvp`qjajqpfbpl`jb`j/_mgjpslmjaofpfubovb`j/_mfpwvgjbmwfpqfpslmpbaofqfplov`j/_mdvbgbobibqbqfdjpwqbglplslqwvmjgbg`lnfq`jbofpelwldqbe/Abbvwlqjgbgfpjmdfmjfq/Abwfofujpj/_m`lnsfwfm`jblsfqb`jlmfpfpwbaof`jglpjnsofnfmwfb`wvbonfmwfmbufdb`j/_m`lmelqnjgbgojmf.kfjdkw9elmw.ebnjoz9!#9#!kwws9,,bssoj`bwjlmpojmh!#kqfe>!psf`jej`booz,,?\\\"X@GBWBX\\tLqdbmjybwjlmgjpwqjavwjlm3s{8#kfjdkw9qfobwjlmpkjsgfuj`f.tjgwk?gju#`obpp>!?obafo#elq>!qfdjpwqbwjlm?,mlp`qjsw=\\t,jmgf{-kwno!tjmglt-lsfm+#\\\"jnslqwbmw8bssoj`bwjlm,jmgfsfmgfm`f,,ttt-dlldoflqdbmjybwjlmbvwl`lnsofwfqfrvjqfnfmwp`lmpfqubwjuf?elqn#mbnf>!jmwfoof`wvbonbqdjm.ofew92;wk#`fmwvqzbm#jnslqwbmwjmpwjwvwjlmpbaaqfujbwjlm?jnd#`obpp>!lqdbmjpbwjlm`jujojybwjlm2:wk#`fmwvqzbq`kjwf`wvqfjm`lqslqbwfg13wk#`fmwvqz.`lmwbjmfq!=nlpw#mlwbaoz,=?,b=?,gju=mlwjej`bwjlm$vmgfejmfg$*Evqwkfqnlqf/afojfuf#wkbwjmmfqKWNO#>#sqjlq#wl#wkfgqbnbwj`boozqfefqqjmd#wlmfdlwjbwjlmpkfbgrvbqwfqpPlvwk#Beqj`bvmpv``fppevoSfmmpzoubmjbBp#b#qfpvow/?kwno#obmd>!%ow8,pvs%dw8gfbojmd#tjwkskjobgfoskjbkjpwlqj`booz*8?,p`qjsw=\\tsbggjmd.wls9f{sfqjnfmwbodfwBwwqjavwfjmpwqv`wjlmpwf`kmloldjfpsbqw#le#wkf#>evm`wjlm+*xpvap`qjswjlmo-gwg!=\\x0E\\t?kwdfldqbskj`bo@lmpwjwvwjlm$/#evm`wjlm+pvsslqwfg#azbdqj`vowvqbo`lmpwqv`wjlmsvaoj`bwjlmpelmw.pjyf9#2b#ubqjfwz#le?gju#pwzof>!Fm`z`olsfgjbjeqbnf#pq`>!gfnlmpwqbwfgb``lnsojpkfgvmjufqpjwjfpGfnldqbskj`p*8?,p`qjsw=?gfgj`bwfg#wlhmltofgdf#lepbwjpeb`wjlmsbqwj`vobqoz?,gju=?,gju=Fmdojpk#+VP*bssfmg@kjog+wqbmpnjppjlmp-#Kltfufq/#jmwfoojdfm`f!#wbajmgf{>!eolbw9qjdkw8@lnnlmtfbowkqbmdjmd#eqlnjm#tkj`k#wkfbw#ofbpw#lmfqfsqlgv`wjlmfm`z`olsfgjb8elmw.pjyf92ivqjpgj`wjlmbw#wkbw#wjnf!=?b#`obpp>!Jm#bggjwjlm/gfp`qjswjlm(`lmufqpbwjlm`lmwb`w#tjwkjp#dfmfqboozq!#`lmwfmw>!qfsqfpfmwjmd%ow8nbwk%dw8sqfpfmwbwjlml``bpjlmbooz?jnd#tjgwk>!mbujdbwjlm!=`lnsfmpbwjlm`kbnsjlmpkjsnfgjb>!boo!#ujlobwjlm#leqfefqfm`f#wlqfwvqm#wqvf8Pwqj`w,,FM!#wqbmpb`wjlmpjmwfqufmwjlmufqjej`bwjlmJmelqnbwjlm#gjeej`vowjfp@kbnsjlmpkjs`bsbajojwjfp?\\\"Xfmgje^..=~\\t?,p`qjsw=\\t@kqjpwjbmjwzelq#f{bnsof/Sqlefppjlmboqfpwqj`wjlmppvddfpw#wkbwtbp#qfofbpfg+pv`k#bp#wkfqfnluf@obpp+vmfnsolznfmwwkf#Bnfqj`bmpwqv`wvqf#le,jmgf{-kwno#svaojpkfg#jmpsbm#`obpp>!!=?b#kqfe>!,jmwqlgv`wjlmafolmdjmd#wl`objnfg#wkbw`lmpfrvfm`fp?nfwb#mbnf>!Dvjgf#wl#wkflufqtkfonjmdbdbjmpw#wkf#`lm`fmwqbwfg/\\t-mlmwlv`k#lapfqubwjlmp?,b=\\t?,gju=\\te#+gl`vnfmw-alqgfq9#2s{#xelmw.pjyf92wqfbwnfmw#le3!#kfjdkw>!2nlgjej`bwjlmJmgfsfmgfm`fgjujgfg#jmwldqfbwfq#wkbmb`kjfufnfmwpfpwbaojpkjmdIbubP`qjsw!#mfufqwkfofpppjdmjej`bm`fAqlbg`bpwjmd=%maps8?,wg=`lmwbjmfq!=\\tpv`k#bp#wkf#jmeovfm`f#leb#sbqwj`vobqpq`>$kwws9,,mbujdbwjlm!#kboe#le#wkf#pvapwbmwjbo#%maps8?,gju=bgubmwbdf#legjp`lufqz#leevmgbnfmwbo#nfwqlslojwbmwkf#lsslpjwf!#{no9obmd>!gfojafqbwfozbojdm>`fmwfqfulovwjlm#lesqfpfqubwjlmjnsqlufnfmwpafdjmmjmd#jmIfpvp#@kqjpwSvaoj`bwjlmpgjpbdqffnfmwwf{w.bojdm9q/#evm`wjlm+*pjnjobqjwjfpalgz=?,kwno=jp#`vqqfmwozboskbafwj`bojp#plnfwjnfpwzsf>!jnbdf,nbmz#le#wkf#eolt9kjggfm8bubjobaof#jmgfp`qjaf#wkff{jpwfm`f#leboo#lufq#wkfwkf#Jmwfqmfw\\n?vo#`obpp>!jmpwboobwjlmmfjdkalqkllgbqnfg#elq`fpqfgv`jmd#wkf`lmwjmvfp#wlMlmfwkfofpp/wfnsfqbwvqfp\\t\\n\\n?b#kqfe>!`olpf#wl#wkff{bnsofp#le#jp#balvw#wkf+pff#afolt*-!#jg>!pfbq`ksqlefppjlmbojp#bubjobaofwkf#leej`jbo\\n\\n?,p`qjsw=\\t\\t\\n\\n?gju#jg>!b``fofqbwjlmwkqlvdk#wkf#Kboo#le#Ebnfgfp`qjswjlmpwqbmpobwjlmpjmwfqefqfm`f#wzsf>$wf{w,qf`fmw#zfbqpjm#wkf#tlqogufqz#slsvobqxab`hdqlvmg9wqbgjwjlmbo#plnf#le#wkf#`lmmf`wfg#wlf{soljwbwjlmfnfqdfm`f#le`lmpwjwvwjlmB#Kjpwlqz#lepjdmjej`bmw#nbmveb`wvqfgf{sf`wbwjlmp=?mlp`qjsw=?`bm#af#elvmgaf`bvpf#wkf#kbp#mlw#affmmfjdkalvqjmdtjwklvw#wkf#bggfg#wl#wkf\\n?oj#`obpp>!jmpwqvnfmwboPlujfw#Vmjlmb`hmltofgdfgtkj`k#`bm#afmbnf#elq#wkfbwwfmwjlm#wlbwwfnswp#wl#gfufolsnfmwpJm#eb`w/#wkf?oj#`obpp>!bjnsoj`bwjlmppvjwbaof#elqnv`k#le#wkf#`lolmjybwjlmsqfpjgfmwjbo`bm`foAvaaof#Jmelqnbwjlmnlpw#le#wkf#jp#gfp`qjafgqfpw#le#wkf#nlqf#lq#ofppjm#PfswfnafqJmwfoojdfm`fpq`>!kwws9,,s{8#kfjdkw9#bubjobaof#wlnbmveb`wvqfqkvnbm#qjdkwpojmh#kqfe>!,bubjobajojwzsqlslqwjlmbolvwpjgf#wkf#bpwqlmlnj`bokvnbm#afjmdpmbnf#le#wkf#bqf#elvmg#jmbqf#abpfg#lmpnboofq#wkbmb#sfqplm#tklf{sbmpjlm#lebqdvjmd#wkbwmlt#hmltm#bpJm#wkf#fbqozjmwfqnfgjbwfgfqjufg#eqlnP`bmgjmbujbm?,b=?,gju=\\x0E\\t`lmpjgfq#wkfbm#fpwjnbwfgwkf#Mbwjlmbo?gju#jg>!sbdqfpvowjmd#jm`lnnjppjlmfgbmboldlvp#wlbqf#qfrvjqfg,vo=\\t?,gju=\\ttbp#abpfg#lmbmg#af`bnf#b%maps8%maps8w!#ubovf>!!#tbp#`bswvqfgml#nlqf#wkbmqfpsf`wjufoz`lmwjmvf#wl#=\\x0E\\t?kfbg=\\x0E\\t?tfqf#`qfbwfgnlqf#dfmfqbojmelqnbwjlm#vpfg#elq#wkfjmgfsfmgfmw#wkf#Jnsfqjbo`lnslmfmw#lewl#wkf#mlqwkjm`ovgf#wkf#@lmpwqv`wjlmpjgf#le#wkf#tlvog#mlw#afelq#jmpwbm`fjmufmwjlm#lenlqf#`lnsof{`loof`wjufozab`hdqlvmg9#wf{w.bojdm9#jwp#lqjdjmbojmwl#b``lvmwwkjp#sql`fppbm#f{wfmpjufkltfufq/#wkfwkfz#bqf#mlwqfif`wfg#wkf`qjwj`jpn#legvqjmd#tkj`ksqlabaoz#wkfwkjp#bqwj`of+evm`wjlm+*xJw#pklvog#afbm#bdqffnfmwb``jgfmwboozgjeefqp#eqlnBq`kjwf`wvqfafwwfq#hmltmbqqbmdfnfmwpjmeovfm`f#lmbwwfmgfg#wkfjgfmwj`bo#wlplvwk#le#wkfsbpp#wkqlvdk{no!#wjwof>!tfjdkw9alog8`qfbwjmd#wkfgjpsobz9mlmfqfsob`fg#wkf?jnd#pq`>!,jkwwsp9,,ttt-Tlqog#Tbq#JJwfpwjnlmjbopelvmg#jm#wkfqfrvjqfg#wl#bmg#wkbw#wkfafwtffm#wkf#tbp#gfpjdmfg`lmpjpwp#le#`lmpjgfqbaozsvaojpkfg#azwkf#obmdvbdf@lmpfqubwjlm`lmpjpwfg#leqfefq#wl#wkfab`h#wl#wkf#`pp!#nfgjb>!Sflsof#eqln#bubjobaof#lmsqlufg#wl#afpvddfpwjlmp!tbp#hmltm#bpubqjfwjfp#leojhfoz#wl#af`lnsqjpfg#lepvsslqw#wkf#kbmgp#le#wkf`lvsofg#tjwk`lmmf`w#bmg#alqgfq9mlmf8sfqelqnbm`fpafelqf#afjmdobwfq#af`bnf`bo`vobwjlmplewfm#`boofgqfpjgfmwp#lenfbmjmd#wkbw=?oj#`obpp>!fujgfm`f#elqf{sobmbwjlmpfmujqlmnfmwp!=?,b=?,gju=tkj`k#booltpJmwqlgv`wjlmgfufolsfg#azb#tjgf#qbmdflm#afkboe#leubojdm>!wls!sqjm`jsof#lebw#wkf#wjnf/?,mlp`qjsw=\\x0Epbjg#wl#kbufjm#wkf#ejqpwtkjof#lwkfqpkzslwkfwj`boskjolplskfqpsltfq#le#wkf`lmwbjmfg#jmsfqelqnfg#azjmbajojwz#wltfqf#tqjwwfmpsbm#pwzof>!jmsvw#mbnf>!wkf#rvfpwjlmjmwfmgfg#elqqfif`wjlm#lejnsojfp#wkbwjmufmwfg#wkfwkf#pwbmgbqgtbp#sqlabaozojmh#afwtffmsqlefpplq#lejmwfqb`wjlmp`kbmdjmd#wkfJmgjbm#L`fbm#`obpp>!obpwtlqhjmd#tjwk$kwws9,,ttt-zfbqp#afelqfWkjp#tbp#wkfqf`qfbwjlmbofmwfqjmd#wkfnfbpvqfnfmwpbm#f{wqfnfozubovf#le#wkfpwbqw#le#wkf\\t?,p`qjsw=\\t\\tbm#feelqw#wljm`qfbpf#wkfwl#wkf#plvwkpsb`jmd>!3!=pveej`jfmwozwkf#Fvqlsfbm`lmufqwfg#wl`ofbqWjnflvwgjg#mlw#kbuf`lmpfrvfmwozelq#wkf#mf{wf{wfmpjlm#lef`lmlnj`#bmgbowklvdk#wkfbqf#sqlgv`fgbmg#tjwk#wkfjmpveej`jfmwdjufm#az#wkfpwbwjmd#wkbwf{sfmgjwvqfp?,psbm=?,b=\\twklvdkw#wkbwlm#wkf#abpjp`foosbggjmd>jnbdf#le#wkfqfwvqmjmd#wljmelqnbwjlm/pfsbqbwfg#azbppbppjmbwfgp!#`lmwfmw>!bvwklqjwz#lemlqwktfpwfqm?,gju=\\t?gju#!=?,gju=\\x0E\\t##`lmpvowbwjlm`lnnvmjwz#lewkf#mbwjlmbojw#pklvog#afsbqwj`jsbmwp#bojdm>!ofewwkf#dqfbwfpwpfof`wjlm#lepvsfqmbwvqbogfsfmgfmw#lmjp#nfmwjlmfgbooltjmd#wkftbp#jmufmwfgb``lnsbmzjmdkjp#sfqplmbobubjobaof#bwpwvgz#le#wkflm#wkf#lwkfqf{f`vwjlm#leKvnbm#Qjdkwpwfqnp#le#wkfbppl`jbwjlmpqfpfbq`k#bmgpv``ffgfg#azgfefbwfg#wkfbmg#eqln#wkfavw#wkfz#bqf`lnnbmgfq#lepwbwf#le#wkfzfbqp#le#bdfwkf#pwvgz#le?vo#`obpp>!psob`f#jm#wkftkfqf#kf#tbp?oj#`obpp>!ewkfqf#bqf#mltkj`k#af`bnfkf#svaojpkfgf{sqfppfg#jmwl#tkj`k#wkf`lnnjppjlmfqelmw.tfjdkw9wfqqjwlqz#lef{wfmpjlmp!=Qlnbm#Fnsjqffrvbo#wl#wkfJm#`lmwqbpw/kltfufq/#bmgjp#wzsj`boozbmg#kjp#tjef+bopl#`boofg=?vo#`obpp>!feef`wjufoz#fuloufg#jmwlpffn#wl#kbuftkj`k#jp#wkfwkfqf#tbp#mlbm#f{`foofmwboo#le#wkfpfgfp`qjafg#azJm#sqb`wj`f/aqlbg`bpwjmd`kbqdfg#tjwkqfeof`wfg#jmpvaif`wfg#wlnjojwbqz#bmgwl#wkf#sljmwf`lmlnj`boozpfwWbqdfwjmdbqf#b`wvboozuj`wlqz#lufq+*8?,p`qjsw=`lmwjmvlvpozqfrvjqfg#elqfulovwjlmbqzbm#feef`wjufmlqwk#le#wkf/#tkj`k#tbp#eqlmw#le#wkflq#lwkfqtjpfplnf#elqn#lekbg#mlw#affmdfmfqbwfg#azjmelqnbwjlm-sfqnjwwfg#wljm`ovgfp#wkfgfufolsnfmw/fmwfqfg#jmwlwkf#sqfujlvp`lmpjpwfmwozbqf#hmltm#bpwkf#ejfog#lewkjp#wzsf#ledjufm#wl#wkfwkf#wjwof#le`lmwbjmp#wkfjmpwbm`fp#lejm#wkf#mlqwkgvf#wl#wkfjqbqf#gfpjdmfg`lqslqbwjlmptbp#wkbw#wkflmf#le#wkfpfnlqf#slsvobqpv``ffgfg#jmpvsslqw#eqlnjm#gjeefqfmwglnjmbwfg#azgfpjdmfg#elqltmfqpkjs#lebmg#slppjaozpwbmgbqgjyfgqfpslmpfWf{wtbp#jmwfmgfgqf`fjufg#wkfbppvnfg#wkbwbqfbp#le#wkfsqjnbqjoz#jmwkf#abpjp#lejm#wkf#pfmpfb``lvmwp#elqgfpwqlzfg#azbw#ofbpw#wtltbp#gf`obqfg`lvog#mlw#afPf`qfwbqz#lebssfbq#wl#afnbqdjm.wls92,]_p(\\x7F_p(',df*xwkqlt#f~8wkf#pwbqw#lewtl#pfsbqbwfobmdvbdf#bmgtkl#kbg#affmlsfqbwjlm#legfbwk#le#wkfqfbo#mvnafqp\\n?ojmh#qfo>!sqlujgfg#wkfwkf#pwlqz#le`lnsfwjwjlmpfmdojpk#+VH*fmdojpk#+VP*<p<R<Q<_<R<W<M=l<S=m<V<T=m=l<S=m<V<T=m=l<S=m<V<R5h4U4]4D5f4E\\nAO\\x05Gx\\bTA\\nzk\\x0BBl\\bQ\\x7F\\bTA\\nzk\\x0BUm\\bQ\\x7F\\bTA\\nzk\\npe\\x05u|\\ti@\\tcT\\bVV\\n\\\\}\\nxS\\tVp\\x05tS\\x05k`\\t[X\\t[X\\x0BHR\\bPv\\bTW\\bUe\\n\\x7Fa\\bQp\\x0B_W\\x0BWs\\nxS\\x0BAz\\n_y\\x04Khjmelqnb`j/_mkfqqbnjfmwbpfof`wq/_mj`lgfp`qjs`j/_m`obpjej`bglp`lml`jnjfmwlsvaoj`b`j/_mqfob`jlmbgbpjmelqn/Mwj`bqfob`jlmbglpgfsbqwbnfmwlwqbabibglqfpgjqf`wbnfmwfbzvmwbnjfmwlnfq`bglOjaqf`lmw/M`wfmlpkbajwb`jlmfp`vnsojnjfmwlqfpwbvqbmwfpgjpslpj`j/_m`lmpf`vfm`jbfof`wq/_mj`bbsoj`b`jlmfpgfp`lmf`wbgljmpwbob`j/_mqfbojyb`j/_mvwjojyb`j/_mfm`j`olsfgjbfmefqnfgbgfpjmpwqvnfmwlpf{sfqjfm`jbpjmpwjwv`j/_msbqwj`vobqfppva`bwfdlqjb=n<R<W=`<V<R<L<R=m=m<T<T=l<\\\\<]<R=n=g<]<R<W=`=d<Y<S=l<R=m=n<R<P<R<Z<Y=n<Y<X=l=o<_<T=i=m<W=o=k<\\\\<Y=m<Y<U=k<\\\\=m<^=m<Y<_<X<\\\\<L<R=m=m<T=c<p<R=m<V<^<Y<X=l=o<_<T<Y<_<R=l<R<X<\\\\<^<R<S=l<R=m<X<\\\\<Q<Q=g=i<X<R<W<Z<Q=g<T<P<Y<Q<Q<R<p<R=m<V<^=g=l=o<]<W<Y<U<p<R=m<V<^<\\\\=m=n=l<\\\\<Q=g<Q<T=k<Y<_<R=l<\\\\<]<R=n<Y<X<R<W<Z<Y<Q=o=m<W=o<_<T=n<Y<S<Y=l=`<r<X<Q<\\\\<V<R<S<R=n<R<P=o=l<\\\\<]<R=n=o<\\\\<S=l<Y<W=c<^<R<R<]=e<Y<R<X<Q<R<_<R=m<^<R<Y<_<R=m=n<\\\\=n=`<T<X=l=o<_<R<U=h<R=l=o<P<Y=i<R=l<R=d<R<S=l<R=n<T<^=m=m=g<W<V<\\\\<V<\\\\<Z<X=g<U<^<W<\\\\=m=n<T<_=l=o<S<S=g<^<P<Y=m=n<Y=l<\\\\<]<R=n<\\\\=m<V<\\\\<[<\\\\<W<S<Y=l<^=g<U<X<Y<W<\\\\=n=`<X<Y<Q=`<_<T<S<Y=l<T<R<X<]<T<[<Q<Y=m<R=m<Q<R<^<Y<P<R<P<Y<Q=n<V=o<S<T=n=`<X<R<W<Z<Q<\\\\=l<\\\\<P<V<\\\\=i<Q<\\\\=k<\\\\<W<R<L<\\\\<]<R=n<\\\\<N<R<W=`<V<R=m<R<^=m<Y<P<^=n<R=l<R<U<Q<\\\\=k<\\\\<W<\\\\=m<S<T=m<R<V=m<W=o<Z<]=g=m<T=m=n<Y<P<S<Y=k<\\\\=n<T<Q<R<^<R<_<R<S<R<P<R=e<T=m<\\\\<U=n<R<^<S<R=k<Y<P=o<S<R<P<R=e=`<X<R<W<Z<Q<R=m=m=g<W<V<T<]=g=m=n=l<R<X<\\\\<Q<Q=g<Y<P<Q<R<_<T<Y<S=l<R<Y<V=n<M<Y<U=k<\\\\=m<P<R<X<Y<W<T=n<\\\\<V<R<_<R<R<Q<W<\\\\<U<Q<_<R=l<R<X<Y<^<Y=l=m<T=c=m=n=l<\\\\<Q<Y=h<T<W=`<P=g=o=l<R<^<Q=c=l<\\\\<[<Q=g=i<T=m<V<\\\\=n=`<Q<Y<X<Y<W=b=c<Q<^<\\\\=l=c<P<Y<Q=`=d<Y<P<Q<R<_<T=i<X<\\\\<Q<Q<R<U<[<Q<\\\\=k<T=n<Q<Y<W=`<[=c=h<R=l=o<P<\\\\<N<Y<S<Y=l=`<P<Y=m=c=j<\\\\<[<\\\\=e<T=n=g<w=o=k=d<T<Y\\fHD\\fHU\\fIl\\fHn\\fHy\\fH\\\\\\fHD\\fIk\\fHi\\fHF\\fHD\\fIk\\fHy\\fHS\\fHC\\fHR\\fHy\\fH\\\\\\fIk\\fHn\\fHi\\fHD\\fIa\\fHC\\fHy\\fIa\\fHC\\fHR\\fH{\\fHR\\fHk\\fHM\\fH@\\fHR\\fH\\\\\\fIk\\fHy\\fHS\\fHT\\fIl\\fHJ\\fHS\\fHC\\fHR\\fHF\\fHU\\fH^\\fIk\\fHT\\fHS\\fHn\\fHU\\fHA\\fHR\\fH\\\\\\fHH\\fHi\\fHF\\fHD\\fIl\\fHY\\fHR\\fH^\\fIk\\fHT\\fIk\\fHY\\fHR\\fHy\\fH\\\\\\fHH\\fIk\\fHB\\fIk\\fH\\\\\\fIk\\fHU\\fIg\\fHD\\fIk\\fHT\\fHy\\fHH\\fIk\\fH@\\fHU\\fIm\\fHH\\fHT\\fHR\\fHk\\fHs\\fHU\\fIg\\fH{\\fHR\\fHp\\fHR\\fHD\\fIk\\fHB\\fHS\\fHD\\fHs\\fHy\\fH\\\\\\fHH\\fHR\\fHy\\fH\\\\\\fHD\\fHR\\fHe\\fHD\\fHy\\fIk\\fHC\\fHU\\fHR\\fHm\\fHT\\fH@\\fHT\\fIk\\fHA\\fHR\\fH[\\fHR\\fHj\\fHF\\fHy\\fIk\\fH^\\fHS\\fHC\\fIk\\fHZ\\fIm\\fH\\\\\\fIn\\fHk\\fHT\\fHy\\fIk\\fHt\\fHn\\fHs\\fIk\\fHB\\fIk\\fH\\\\\\fIl\\fHT\\fHy\\fHH\\fHR\\fHB\\fIk\\fH\\\\\\fHR\\fH^\\fIk\\fHy\\fH\\\\\\fHi\\fHK\\fHS\\fHy\\fHi\\fHF\\fHD\\fHR\\fHT\\fHB\\fHR\\fHp\\fHB\\fIm\\fHq\\fIk\\fHy\\fHR\\fH\\\\\\fHO\\fHU\\fIg\\fHH\\fHR\\fHy\\fHM\\fHP\\fIl\\fHC\\fHU\\fHR\\fHn\\fHU\\fIg\\fHs\\fH^\\fHZ\\fH@\\fIa\\fHJ\\fH^\\fHS\\fHC\\fHR\\fHp\\fIl\\fHY\\fHD\\fHp\\fHR\\fHH\\fHR\\fHy\\fId\\fHT\\fIk\\fHj\\fHF\\fHy\\fHR\\fHY\\fHR\\fH^\\fIl\\fHJ\\fIk\\fHD\\fIk\\fHF\\fIn\\fH\\\\\\fIl\\fHF\\fHR\\fHD\\fIl\\fHe\\fHT\\fHy\\fIk\\fHU\\fIg\\fH{\\fIl\\fH@\\fId\\fHL\\fHy\\fHj\\fHF\\fHy\\fIl\\fHY\\fH\\\\\\fIa\\fH[\\fH{\\fHR\\fHn\\fHY\\fHj\\fHF\\fHy\\fIg\\fHp\\fHS\\fH^\\fHR\\fHp\\fHR\\fHD\\fHR\\fHT\\fHU\\fHB\\fHH\\fHU\\fHB\\fIk\\fHn\\fHe\\fHD\\fHy\\fIl\\fHC\\fHR\\fHU\\fIn\\fHJ\\fH\\\\\\fIa\\fHp\\fHT\\fIn\\fHv\\fIl\\fHF\\fHT\\fHn\\fHJ\\fHT\\fHY\\fHR\\fH^\\fHU\\fIg\\fHD\\fHR\\fHU\\fIg\\fHH\\fIl\\fHp\\fId\\fHT\\fIk\\fHY\\fHR\\fHF\\fHT\\fHp\\fHD\\fHH\\fHR\\fHD\\fIk\\fHH\\fHR\\fHp\\fHR\\fH\\\\\\fIl\\fHt\\fHR\\fHC\\fH^\\fHp\\fHS\\fH^\\fIk\\fHD\\fIl\\fHv\\fIk\\fHp\\fHR\\fHn\\fHv\\fHF\\fHH\\fIa\\fH\\\\\\fH{\\fIn\\fH{\\fH^\\fHp\\fHR\\fHH\\fIk\\fH@\\fHR\\fHU\\fH\\\\\\fHj\\fHF\\fHD\\fIk\\fHY\\fHR\\fHU\\fHD\\fHk\\fHT\\fHy\\fHR\\fHT\\fIm\\fH@\\fHU\\fH\\\\\\fHU\\fHD\\fIk\\fHk\\fHT\\fHT\\fIk\\fHT\\fHU\\fHS\\fHH\\fH@\\fHM\\fHP\\fIk\\fHt\\fHs\\fHD\\fHR\\fHH\\fH^\\fHR\\fHZ\\fHF\\fHR\\fHn\\fHv\\fHZ\\fIa\\fH\\\\\\fIl\\fH@\\fHM\\fHP\\fIl\\fHU\\fIg\\fHH\\fIk\\fHT\\fHR\\fHd\\fHs\\fHZ\\fHR\\fHC\\fHJ\\fHT\\fHy\\fHH\\fIl\\fHp\\fHR\\fHH\\fIl\\fHY\\fHR\\fH^\\fHR\\fHU\\fHp\\fHR\\fH\\\\\\fHF\\fHs\\fHD\\fHR\\fH\\\\\\fHz\\fHD\\fIk\\fHT\\fHM\\fHP\\fHy\\fHB\\fHS\\fH^\\fHR\\fHe\\fHT\\fHy\\fIl\\fHy\\fIk\\fHY\\fH^\\fH^\\fH{\\fHH\\fHR\\fHz\\fHR\\fHD\\fHR\\fHi\\fH\\\\\\fIa\\fHI\\fHp\\fHU\\fHR\\fHn\\fHJ\\fIk\\fHz\\fHR\\fHF\\fHU\\fH^\\fIl\\fHD\\fHS\\fHC\\fHB\\fH@\\fHS\\fHD\\fHR\\fH@\\fId\\fHn\\fHy\\fHy\\fHU\\fIl\\fHn\\fHy\\fHU\\fHD\\fHR\\fHJ\\fIk\\fHH\\fHR\\fHU\\fHB\\fH^\\fIk\\fHy\\fHR\\fHG\\fIl\\fHp\\fH@\\fHy\\fHS\\fHH\\fIm\\fH\\\\\\fHH\\fHB\\fHR\\fHn\\fH{\\fHY\\fHU\\fIl\\fHn\\fH\\\\\\fIg\\fHp\\fHP\\fHB\\fHS\\fH^\\fIl\\fHj\\fH\\\\\\fIg\\fHF\\fHT\\fIk\\fHD\\fHR\\fHC\\fHR\\fHJ\\fHY\\fH^\\fIk\\fHD\\fIk\\fHz\\fHR\\fHH\\fHR\\fHy\\fH\\\\\\fIl\\fH@\\fHe\\fHD\\fHy\\fHR\\fHp\\fHY\\fHR\\fH@\\fHF\\fIn\\fH\\\\\\fHR\\fH@\\fHM\\fHP\\fHR\\fHT\\fI`\\fHJ\\fHR\\fHZ\\fIk\\fHC\\fH\\\\\\fHy\\fHS\\fHC\\fIk\\fHy\\fHU\\fHR\\fHn\\fHi\\fHy\\fHT\\fH\\\\\\fH@\\fHD\\fHR\\fHc\\fHY\\fHU\\fHR\\fHn\\fHT\\fIa\\fHI\\fH^\\fHB\\fHS\\fH^\\fIk\\fH^\\fIk\\fHz\\fHy\\fHY\\fHS\\fH[\\fHC\\fHy\\fIa\\fH\\\\\\fHn\\fHT\\fHB\\fIn\\fHU\\fHI\\fHR\\fHD\\fHR4F4_4F4[5f4U5i4X4K4]5o4E4D5d4K4_4[4E4K5h4Y5m4A4E5i5d4K4Z5f4U4K5h4B4K4Y4E4K5h5i4^5f4C4K5h4U4K5i4E4K5h5o4K4F4D4K5h4]4C5d4C4D4]5j4K5i4@4K5h4C5d5h4E4K5h4U4K5h5i4K5h5i5d5n4U4K5h4U4]4D5f4K5h4_4]5f4U4K5h4@5d4K5h4K5h4\\\\5k4K4D4K5h4A5f4K4E4K5h4A5n5d5n4K5h5o4]5f5i4K5h4U4]4K5n5i4A5m5d4T4E4K5h4G4K5j5f5i4X4K5k4C4E4K5h5i4]4O4E4K5h5n4]4N5j4K5h4X4D4K4D4K5h4A5d4K4]4K5h4@4C5f4C4K5h4O4_4]4E4K5h4U5h5d5i5i4@5i5d4U4E4K5h4]4A5i5j4K5h5j5n4K4[5m5h4_4[5f5j4K5h5o5d5f4F4K5h4C5j5f4K4D4]5o4K4F5k4K5h4]5f4K4Z4F4A5f4K4F5f4D4F5d5n5f4F4K5h4O5d5h5e4K5h4D4]5f4C4K5h5o5h4K5i4K5h4]4K4D4[4K5h4X4B4Y5f4_5f4K4]4K4F4K5h4G4K5h4G4K5h4Y5h4K4E4K5h4A4C5f4G4K5h4^5d4K4]4K5h4B5h5f4@4K5h4@5i5f4U4K5h4U4K5i5k4K5h4@5i4K5h4K5h4_4K4U4E5i4X4K5k4C5k4K5h4]4J5f4_4K5h4C4B5d5h4K5h5m5j5f4E4K5h5o4F4K4D4K5h4C5d4]5f4K5h4C4]5d4_4K4_4F4V4]5n4F4Y4K5i5f5i4K5h4D5j4K4F4K5h4U4T5f5ifmwfqwbjmnfmwvmgfqpwbmgjmd#>#evm`wjlm+*-isd!#tjgwk>!`lmejdvqbwjlm-smd!#tjgwk>!?algz#`obpp>!Nbwk-qbmgln+*`lmwfnslqbqz#Vmjwfg#Pwbwfp`jq`vnpwbm`fp-bssfmg@kjog+lqdbmjybwjlmp?psbm#`obpp>!!=?jnd#pq`>!,gjpwjmdvjpkfgwklvpbmgp#le#`lnnvmj`bwjlm`ofbq!=?,gju=jmufpwjdbwjlmebuj`lm-j`l!#nbqdjm.qjdkw9abpfg#lm#wkf#Nbppb`kvpfwwpwbaof#alqgfq>jmwfqmbwjlmbobopl#hmltm#bpsqlmvm`jbwjlmab`hdqlvmg9 esbggjmd.ofew9Elq#f{bnsof/#njp`foobmflvp%ow8,nbwk%dw8spz`kloldj`bojm#sbqwj`vobqfbq`k!#wzsf>!elqn#nfwklg>!bp#lsslpfg#wlPvsqfnf#@lvqwl``bpjlmbooz#Bggjwjlmbooz/Mlqwk#Bnfqj`bs{8ab`hdqlvmglsslqwvmjwjfpFmwfqwbjmnfmw-wlOltfq@bpf+nbmveb`wvqjmdsqlefppjlmbo#`lnajmfg#tjwkElq#jmpwbm`f/`lmpjpwjmd#le!#nb{ofmdwk>!qfwvqm#ebopf8`lmp`jlvpmfppNfgjwfqqbmfbmf{wqblqgjmbqzbppbppjmbwjlmpvapfrvfmwoz#avwwlm#wzsf>!wkf#mvnafq#lewkf#lqjdjmbo#`lnsqfkfmpjufqfefqp#wl#wkf?,vo=\\t?,gju=\\tskjolplskj`bool`bwjlm-kqfetbp#svaojpkfgPbm#Eqbm`jp`l+evm`wjlm+*x\\t?gju#jg>!nbjmplskjpwj`bwfgnbwkfnbwj`bo#,kfbg=\\x0E\\t?algzpvddfpwp#wkbwgl`vnfmwbwjlm`lm`fmwqbwjlmqfobwjlmpkjspnbz#kbuf#affm+elq#f{bnsof/Wkjp#bqwj`of#jm#plnf#`bpfpsbqwp#le#wkf#gfejmjwjlm#leDqfbw#Aqjwbjm#`foosbggjmd>frvjubofmw#wlsob`fklogfq>!8#elmw.pjyf9#ivpwjej`bwjlmafojfufg#wkbwpveefqfg#eqlnbwwfnswfg#wl#ofbgfq#le#wkf`qjsw!#pq`>!,+evm`wjlm+*#xbqf#bubjobaof\\t\\n?ojmh#qfo>!#pq`>$kwws9,,jmwfqfpwfg#jm`lmufmwjlmbo#!#bow>!!#,=?,bqf#dfmfqboozkbp#bopl#affmnlpw#slsvobq#`lqqfpslmgjmd`qfgjwfg#tjwkwzof>!alqgfq9?,b=?,psbm=?,-dje!#tjgwk>!?jeqbnf#pq`>!wbaof#`obpp>!jmojmf.aol`h8b``lqgjmd#wl#wldfwkfq#tjwkbssql{jnbwfozsbqojbnfmwbqznlqf#bmg#nlqfgjpsobz9mlmf8wqbgjwjlmboozsqfglnjmbmwoz%maps8\\x7F%maps8%maps8?,psbm=#`foopsb`jmd>?jmsvw#mbnf>!lq!#`lmwfmw>!`lmwqlufqpjbosqlsfqwz>!ld9,{.pkl`htbuf.gfnlmpwqbwjlmpvqqlvmgfg#azMfufqwkfofpp/tbp#wkf#ejqpw`lmpjgfqbaof#Bowklvdk#wkf#`loobalqbwjlmpklvog#mlw#afsqlslqwjlm#le?psbm#pwzof>!hmltm#bp#wkf#pklqwoz#bewfqelq#jmpwbm`f/gfp`qjafg#bp#,kfbg=\\t?algz#pwbqwjmd#tjwkjm`qfbpjmdoz#wkf#eb`w#wkbwgjp`vppjlm#lenjggof#le#wkfbm#jmgjujgvbogjeej`vow#wl#sljmw#le#ujftklnlpf{vbojwzb``fswbm`f#le?,psbm=?,gju=nbmveb`wvqfqplqjdjm#le#wkf`lnnlmoz#vpfgjnslqwbm`f#legfmlnjmbwjlmpab`hdqlvmg9# ofmdwk#le#wkfgfwfqnjmbwjlmb#pjdmjej`bmw!#alqgfq>!3!=qfulovwjlmbqzsqjm`jsofp#lejp#`lmpjgfqfgtbp#gfufolsfgJmgl.Fvqlsfbmuvomfqbaof#wlsqlslmfmwp#lebqf#plnfwjnfp`olpfq#wl#wkfMft#Zlqh#@jwz#mbnf>!pfbq`kbwwqjavwfg#wl`lvqpf#le#wkfnbwkfnbwj`jbmaz#wkf#fmg#lebw#wkf#fmg#le!#alqgfq>!3!#wf`kmloldj`bo-qfnluf@obpp+aqbm`k#le#wkffujgfm`f#wkbw\\\"Xfmgje^..=\\x0E\\tJmpwjwvwf#le#jmwl#b#pjmdofqfpsf`wjufoz-bmg#wkfqfelqfsqlsfqwjfp#lejp#ol`bwfg#jmplnf#le#tkj`kWkfqf#jp#bopl`lmwjmvfg#wl#bssfbqbm`f#le#%bns8mgbpk8#gfp`qjafp#wkf`lmpjgfqbwjlmbvwklq#le#wkfjmgfsfmgfmwozfrvjssfg#tjwkglfp#mlw#kbuf?,b=?b#kqfe>!`lmevpfg#tjwk?ojmh#kqfe>!,bw#wkf#bdf#lebssfbq#jm#wkfWkfpf#jm`ovgfqfdbqgofpp#le`lvog#af#vpfg#pwzof>%rvlw8pfufqbo#wjnfpqfsqfpfmw#wkfalgz=\\t?,kwno=wklvdkw#wl#afslsvobwjlm#leslppjajojwjfpsfq`fmwbdf#leb``fpp#wl#wkfbm#bwwfnsw#wlsqlgv`wjlm#leirvfqz,irvfqzwtl#gjeefqfmwafolmd#wl#wkffpwbaojpknfmwqfsob`jmd#wkfgfp`qjswjlm!#gfwfqnjmf#wkfbubjobaof#elqB``lqgjmd#wl#tjgf#qbmdf#le\\n?gju#`obpp>!nlqf#`lnnlmozlqdbmjpbwjlmpevm`wjlmbojwztbp#`lnsofwfg#%bns8ngbpk8#sbqwj`jsbwjlmwkf#`kbqb`wfqbm#bggjwjlmbobssfbqp#wl#afeb`w#wkbw#wkfbm#f{bnsof#lepjdmjej`bmwozlmnlvpflufq>!af`bvpf#wkfz#bpzm`#>#wqvf8sqlaofnp#tjwkpffnp#wl#kbufwkf#qfpvow#le#pq`>!kwws9,,ebnjojbq#tjwkslppfppjlm#leevm`wjlm#+*#xwllh#sob`f#jmbmg#plnfwjnfppvapwbmwjbooz?psbm=?,psbm=jp#lewfm#vpfgjm#bm#bwwfnswdqfbw#gfbo#leFmujqlmnfmwbopv``fppevooz#ujqwvbooz#boo13wk#`fmwvqz/sqlefppjlmbopmf`fppbqz#wl#gfwfqnjmfg#az`lnsbwjajojwzaf`bvpf#jw#jpGj`wjlmbqz#lenlgjej`bwjlmpWkf#elooltjmdnbz#qfefq#wl9@lmpfrvfmwoz/Jmwfqmbwjlmbobowklvdk#plnfwkbw#tlvog#aftlqog$p#ejqpw`obppjejfg#bpalwwln#le#wkf+sbqwj`vobqozbojdm>!ofew!#nlpw#`lnnlmozabpjp#elq#wkfelvmgbwjlm#le`lmwqjavwjlmpslsvobqjwz#le`fmwfq#le#wkfwl#qfgv`f#wkfivqjpgj`wjlmpbssql{jnbwjlm#lmnlvpflvw>!Mft#Wfpwbnfmw`loof`wjlm#le?,psbm=?,b=?,jm#wkf#Vmjwfgejon#gjqf`wlq.pwqj`w-gwg!=kbp#affm#vpfgqfwvqm#wl#wkfbowklvdk#wkjp`kbmdf#jm#wkfpfufqbo#lwkfqavw#wkfqf#bqfvmsqf`fgfmwfgjp#pjnjobq#wlfpsf`jbooz#jmtfjdkw9#alog8jp#`boofg#wkf`lnsvwbwjlmbojmgj`bwf#wkbwqfpwqj`wfg#wl\\n?nfwb#mbnf>!bqf#wzsj`booz`lmeoj`w#tjwkKltfufq/#wkf#Bm#f{bnsof#le`lnsbqfg#tjwkrvbmwjwjfp#leqbwkfq#wkbm#b`lmpwfoobwjlmmf`fppbqz#elqqfslqwfg#wkbwpsf`jej`bwjlmslojwj`bo#bmg%maps8%maps8?qfefqfm`fp#wlwkf#pbnf#zfbqDlufqmnfmw#ledfmfqbwjlm#lekbuf#mlw#affmpfufqbo#zfbqp`lnnjwnfmw#wl\\n\\n?vo#`obpp>!ujpvbojybwjlm2:wk#`fmwvqz/sqb`wjwjlmfqpwkbw#kf#tlvogbmg#`lmwjmvfgl``vsbwjlm#lejp#gfejmfg#bp`fmwqf#le#wkfwkf#bnlvmw#le=?gju#pwzof>!frvjubofmw#legjeefqfmwjbwfaqlvdkw#balvwnbqdjm.ofew9#bvwlnbwj`boozwklvdkw#le#bpPlnf#le#wkfpf\\t?gju#`obpp>!jmsvw#`obpp>!qfsob`fg#tjwkjp#lmf#le#wkffgv`bwjlm#bmgjmeovfm`fg#azqfsvwbwjlm#bp\\t?nfwb#mbnf>!b``lnnlgbwjlm?,gju=\\t?,gju=obqdf#sbqw#leJmpwjwvwf#elqwkf#pl.`boofg#bdbjmpw#wkf#Jm#wkjp#`bpf/tbp#bssljmwfg`objnfg#wl#afKltfufq/#wkjpGfsbqwnfmw#lewkf#qfnbjmjmdfeef`w#lm#wkfsbqwj`vobqoz#gfbo#tjwk#wkf\\t?gju#pwzof>!bonlpw#botbzpbqf#`vqqfmwozf{sqfppjlm#leskjolplskz#leelq#nlqf#wkbm`jujojybwjlmplm#wkf#jpobmgpfof`wfgJmgf{`bm#qfpvow#jm!#ubovf>!!#,=wkf#pwqv`wvqf#,=?,b=?,gju=Nbmz#le#wkfpf`bvpfg#az#wkfle#wkf#Vmjwfgpsbm#`obpp>!n`bm#af#wqb`fgjp#qfobwfg#wlaf`bnf#lmf#lejp#eqfrvfmwozojujmd#jm#wkfwkflqfwj`boozElooltjmd#wkfQfulovwjlmbqzdlufqmnfmw#jmjp#gfwfqnjmfgwkf#slojwj`bojmwqlgv`fg#jmpveej`jfmw#wlgfp`qjswjlm!=pklqw#pwlqjfppfsbqbwjlm#lebp#wl#tkfwkfqhmltm#elq#jwptbp#jmjwjboozgjpsobz9aol`hjp#bm#f{bnsofwkf#sqjm`jsbo`lmpjpwp#le#bqf`ldmjyfg#bp,algz=?,kwno=b#pvapwbmwjboqf`lmpwqv`wfgkfbg#le#pwbwfqfpjpwbm`f#wlvmgfqdqbgvbwfWkfqf#bqf#wtldqbujwbwjlmbobqf#gfp`qjafgjmwfmwjlmboozpfqufg#bp#wkf`obpp>!kfbgfqlsslpjwjlm#wlevmgbnfmwboozglnjmbwfg#wkfbmg#wkf#lwkfqboojbm`f#tjwktbp#elq`fg#wlqfpsf`wjufoz/bmg#slojwj`bojm#pvsslqw#lesflsof#jm#wkf13wk#`fmwvqz-bmg#svaojpkfgolbg@kbqwafbwwl#vmgfqpwbmgnfnafq#pwbwfpfmujqlmnfmwboejqpw#kboe#le`lvmwqjfp#bmgbq`kjwf`wvqboaf#`lmpjgfqfg`kbqb`wfqjyfg`ofbqJmwfqubobvwklqjwbwjufEfgfqbwjlm#letbp#pv``ffgfgbmg#wkfqf#bqfb#`lmpfrvfm`fwkf#Sqfpjgfmwbopl#jm`ovgfgeqff#plewtbqfpv``fppjlm#legfufolsfg#wkftbp#gfpwqlzfgbtbz#eqln#wkf8\\t?,p`qjsw=\\t?bowklvdk#wkfzelooltfg#az#bnlqf#sltfqevoqfpvowfg#jm#bVmjufqpjwz#leKltfufq/#nbmzwkf#sqfpjgfmwKltfufq/#plnfjp#wklvdkw#wlvmwjo#wkf#fmgtbp#bmmlvm`fgbqf#jnslqwbmwbopl#jm`ovgfp=?jmsvw#wzsf>wkf#`fmwfq#le#GL#MLW#BOWFQvpfg#wl#qfefqwkfnfp,<plqw>wkbw#kbg#affmwkf#abpjp#elqkbp#gfufolsfgjm#wkf#pvnnfq`lnsbqbwjufozgfp`qjafg#wkfpv`k#bp#wklpfwkf#qfpvowjmdjp#jnslppjaofubqjlvp#lwkfqPlvwk#Beqj`bmkbuf#wkf#pbnffeef`wjufmfppjm#tkj`k#`bpf8#wf{w.bojdm9pwqv`wvqf#bmg8#ab`hdqlvmg9qfdbqgjmd#wkfpvsslqwfg#wkfjp#bopl#hmltmpwzof>!nbqdjmjm`ovgjmd#wkfabkbpb#Nfobzvmlqph#alhn/Iomlqph#mzmlqphpolufm)M(ajmbjmwfqmb`jlmbo`bojej`b`j/_m`lnvmj`b`j/_m`lmpwqv``j/_m!=?gju#`obpp>!gjpbnajdvbwjlmGlnbjmMbnf$/#$bgnjmjpwqbwjlmpjnvowbmflvpozwqbmpslqwbwjlmJmwfqmbwjlmbo#nbqdjm.alwwln9qfpslmpjajojwz?\\\"Xfmgje^..=\\t?,=?nfwb#mbnf>!jnsofnfmwbwjlmjmeqbpwqv`wvqfqfsqfpfmwbwjlmalqgfq.alwwln9?,kfbg=\\t?algz=>kwws&0B&1E&1E?elqn#nfwklg>!nfwklg>!slpw!#,ebuj`lm-j`l!#~*8\\t?,p`qjsw=\\t-pfwBwwqjavwf+Bgnjmjpwqbwjlm>#mft#Bqqbz+*8?\\\"Xfmgje^..=\\x0E\\tgjpsobz9aol`h8Vmelqwvmbwfoz/!=%maps8?,gju=,ebuj`lm-j`l!=>$pwzofpkffw$#jgfmwjej`bwjlm/#elq#f{bnsof/?oj=?b#kqfe>!,bm#bowfqmbwjufbp#b#qfpvow#lesw!=?,p`qjsw=\\twzsf>!pvanjw!#\\t+evm`wjlm+*#xqf`lnnfmgbwjlmelqn#b`wjlm>!,wqbmpelqnbwjlmqf`lmpwqv`wjlm-pwzof-gjpsobz#B``lqgjmd#wl#kjggfm!#mbnf>!bolmd#tjwk#wkfgl`vnfmw-algz-bssql{jnbwfoz#@lnnvmj`bwjlmpslpw!#b`wjlm>!nfbmjmd#%rvlw8..?\\\"Xfmgje^..=Sqjnf#Njmjpwfq`kbqb`wfqjpwj`?,b=#?b#`obpp>wkf#kjpwlqz#le#lmnlvpflufq>!wkf#dlufqmnfmwkqfe>!kwwsp9,,tbp#lqjdjmbooztbp#jmwqlgv`fg`obppjej`bwjlmqfsqfpfmwbwjufbqf#`lmpjgfqfg?\\\"Xfmgje^..=\\t\\tgfsfmgp#lm#wkfVmjufqpjwz#le#jm#`lmwqbpw#wl#sob`fklogfq>!jm#wkf#`bpf#lejmwfqmbwjlmbo#`lmpwjwvwjlmbopwzof>!alqgfq.9#evm`wjlm+*#xAf`bvpf#le#wkf.pwqj`w-gwg!=\\t?wbaof#`obpp>!b``lnsbmjfg#azb``lvmw#le#wkf?p`qjsw#pq`>!,mbwvqf#le#wkf#wkf#sflsof#jm#jm#bggjwjlm#wlp*8#ip-jg#>#jg!#tjgwk>!233&!qfdbqgjmd#wkf#Qlnbm#@bwkloj`bm#jmgfsfmgfmwelooltjmd#wkf#-dje!#tjgwk>!2wkf#elooltjmd#gjp`qjnjmbwjlmbq`kbfloldj`bosqjnf#njmjpwfq-ip!=?,p`qjsw=`lnajmbwjlm#le#nbqdjmtjgwk>!`qfbwfFofnfmw+t-bwwb`kFufmw+?,b=?,wg=?,wq=pq`>!kwwsp9,,bJm#sbqwj`vobq/#bojdm>!ofew!#@yf`k#Qfsvaoj`Vmjwfg#Hjmdgln`lqqfpslmgfm`f`lm`ovgfg#wkbw-kwno!#wjwof>!+evm`wjlm#+*#x`lnfp#eqln#wkfbssoj`bwjlm#le?psbm#`obpp>!pafojfufg#wl#affnfmw+$p`qjsw$?,b=\\t?,oj=\\t?ojufqz#gjeefqfmw=?psbm#`obpp>!lswjlm#ubovf>!+bopl#hmltm#bp\\n?oj=?b#kqfe>!=?jmsvw#mbnf>!pfsbqbwfg#eqlnqfefqqfg#wl#bp#ubojdm>!wls!=elvmgfq#le#wkfbwwfnswjmd#wl#`bqalm#gjl{jgf\\t\\t?gju#`obpp>!`obpp>!pfbq`k.,algz=\\t?,kwno=lsslqwvmjwz#wl`lnnvmj`bwjlmp?,kfbg=\\x0E\\t?algz#pwzof>!tjgwk9Wj\\rVSmd#Uj\\rWkw`kbmdfp#jm#wkfalqgfq.`lolq9 3!#alqgfq>!3!#?,psbm=?,gju=?tbp#gjp`lufqfg!#wzsf>!wf{w!#*8\\t?,p`qjsw=\\t\\tGfsbqwnfmw#le#f``ofpjbpwj`bowkfqf#kbp#affmqfpvowjmd#eqln?,algz=?,kwno=kbp#mfufq#affmwkf#ejqpw#wjnfjm#qfpslmpf#wlbvwlnbwj`booz#?,gju=\\t\\t?gju#jtbp#`lmpjgfqfgsfq`fmw#le#wkf!#,=?,b=?,gju=`loof`wjlm#le#gfp`fmgfg#eqlnpf`wjlm#le#wkfb``fsw.`kbqpfwwl#af#`lmevpfgnfnafq#le#wkf#sbggjmd.qjdkw9wqbmpobwjlm#lejmwfqsqfwbwjlm#kqfe>$kwws9,,tkfwkfq#lq#mlwWkfqf#bqf#boplwkfqf#bqf#nbmzb#pnboo#mvnafqlwkfq#sbqwp#lejnslppjaof#wl##`obpp>!avwwlmol`bwfg#jm#wkf-#Kltfufq/#wkfbmg#fufmwvboozBw#wkf#fmg#le#af`bvpf#le#jwpqfsqfpfmwp#wkf?elqn#b`wjlm>!#nfwklg>!slpw!jw#jp#slppjaofnlqf#ojhfoz#wlbm#jm`qfbpf#jmkbuf#bopl#affm`lqqfpslmgp#wlbmmlvm`fg#wkbwbojdm>!qjdkw!=nbmz#`lvmwqjfpelq#nbmz#zfbqpfbqojfpw#hmltmaf`bvpf#jw#tbpsw!=?,p`qjsw=\\x0E#ubojdm>!wls!#jmkbajwbmwp#leelooltjmd#zfbq\\x0E\\t?gju#`obpp>!njoojlm#sflsof`lmwqlufqpjbo#`lm`fqmjmd#wkfbqdvf#wkbw#wkfdlufqmnfmw#bmgb#qfefqfm`f#wlwqbmpefqqfg#wlgfp`qjajmd#wkf#pwzof>!`lolq9bowklvdk#wkfqfafpw#hmltm#elqpvanjw!#mbnf>!nvowjsoj`bwjlmnlqf#wkbm#lmf#qf`ldmjwjlm#le@lvm`jo#le#wkffgjwjlm#le#wkf##?nfwb#mbnf>!Fmwfqwbjmnfmw#btbz#eqln#wkf#8nbqdjm.qjdkw9bw#wkf#wjnf#lejmufpwjdbwjlmp`lmmf`wfg#tjwkbmg#nbmz#lwkfqbowklvdk#jw#jpafdjmmjmd#tjwk#?psbm#`obpp>!gfp`fmgbmwp#le?psbm#`obpp>!j#bojdm>!qjdkw!?,kfbg=\\t?algz#bpsf`wp#le#wkfkbp#pjm`f#affmFvqlsfbm#Vmjlmqfnjmjp`fmw#lenlqf#gjeej`vowUj`f#Sqfpjgfmw`lnslpjwjlm#lesbppfg#wkqlvdknlqf#jnslqwbmwelmw.pjyf922s{f{sobmbwjlm#lewkf#`lm`fsw#letqjwwfm#jm#wkf\\n?psbm#`obpp>!jp#lmf#le#wkf#qfpfnaobm`f#wllm#wkf#dqlvmgptkj`k#`lmwbjmpjm`ovgjmd#wkf#gfejmfg#az#wkfsvaoj`bwjlm#lenfbmp#wkbw#wkflvwpjgf#le#wkfpvsslqw#le#wkf?jmsvw#`obpp>!?psbm#`obpp>!w+Nbwk-qbmgln+*nlpw#sqlnjmfmwgfp`qjswjlm#le@lmpwbmwjmlsoftfqf#svaojpkfg?gju#`obpp>!pfbssfbqp#jm#wkf2!#kfjdkw>!2!#nlpw#jnslqwbmwtkj`k#jm`ovgfptkj`k#kbg#affmgfpwqv`wjlm#lewkf#slsvobwjlm\\t\\n?gju#`obpp>!slppjajojwz#leplnfwjnfp#vpfgbssfbq#wl#kbufpv``fpp#le#wkfjmwfmgfg#wl#afsqfpfmw#jm#wkfpwzof>!`ofbq9a\\x0E\\t?,p`qjsw=\\x0E\\t?tbp#elvmgfg#jmjmwfqujft#tjwk\\\\jg!#`lmwfmw>!`bsjwbo#le#wkf\\x0E\\t?ojmh#qfo>!pqfofbpf#le#wkfsljmw#lvw#wkbw{NOKwwsQfrvfpwbmg#pvapfrvfmwpf`lmg#obqdfpwufqz#jnslqwbmwpsf`jej`bwjlmppvqeb`f#le#wkfbssojfg#wl#wkfelqfjdm#sloj`z\\\\pfwGlnbjmMbnffpwbaojpkfg#jmjp#afojfufg#wlJm#bggjwjlm#wlnfbmjmd#le#wkfjp#mbnfg#bewfqwl#sqlwf`w#wkfjp#qfsqfpfmwfgGf`obqbwjlm#lenlqf#feej`jfmw@obppjej`bwjlmlwkfq#elqnp#lekf#qfwvqmfg#wl?psbm#`obpp>!`sfqelqnbm`f#le+evm`wjlm+*#x\\x0Eje#bmg#lmoz#jeqfdjlmp#le#wkfofbgjmd#wl#wkfqfobwjlmp#tjwkVmjwfg#Mbwjlmppwzof>!kfjdkw9lwkfq#wkbm#wkfzsf!#`lmwfmw>!Bppl`jbwjlm#le\\t?,kfbg=\\t?algzol`bwfg#lm#wkfjp#qfefqqfg#wl+jm`ovgjmd#wkf`lm`fmwqbwjlmpwkf#jmgjujgvbobnlmd#wkf#nlpwwkbm#bmz#lwkfq,=\\t?ojmh#qfo>!#qfwvqm#ebopf8wkf#svqslpf#lewkf#bajojwz#wl8`lolq9 eee~\\t-\\t?psbm#`obpp>!wkf#pvaif`w#legfejmjwjlmp#le=\\x0E\\t?ojmh#qfo>!`objn#wkbw#wkfkbuf#gfufolsfg?wbaof#tjgwk>!`fofaqbwjlm#leElooltjmd#wkf#wl#gjpwjmdvjpk?psbm#`obpp>!awbhfp#sob`f#jmvmgfq#wkf#mbnfmlwfg#wkbw#wkf=?\\\"Xfmgje^..=\\tpwzof>!nbqdjm.jmpwfbg#le#wkfjmwqlgv`fg#wkfwkf#sql`fpp#lejm`qfbpjmd#wkfgjeefqfm`fp#jmfpwjnbwfg#wkbwfpsf`jbooz#wkf,gju=?gju#jg>!tbp#fufmwvboozwkqlvdklvw#kjpwkf#gjeefqfm`fplnfwkjmd#wkbwpsbm=?,psbm=?,pjdmjej`bmwoz#=?,p`qjsw=\\x0E\\t\\x0E\\tfmujqlmnfmwbo#wl#sqfufmw#wkfkbuf#affm#vpfgfpsf`jbooz#elqvmgfqpwbmg#wkfjp#fppfmwjbooztfqf#wkf#ejqpwjp#wkf#obqdfpwkbuf#affm#nbgf!#pq`>!kwws9,,jmwfqsqfwfg#bppf`lmg#kboe#le`qloojmd>!ml!#jp#`lnslpfg#leJJ/#Kloz#Qlnbmjp#f{sf`wfg#wlkbuf#wkfjq#ltmgfejmfg#bp#wkfwqbgjwjlmbooz#kbuf#gjeefqfmwbqf#lewfm#vpfgwl#fmpvqf#wkbwbdqffnfmw#tjwk`lmwbjmjmd#wkfbqf#eqfrvfmwozjmelqnbwjlm#lmf{bnsof#jp#wkfqfpvowjmd#jm#b?,b=?,oj=?,vo=#`obpp>!ellwfqbmg#fpsf`jboozwzsf>!avwwlm!#?,psbm=?,psbm=tkj`k#jm`ovgfg=\\t?nfwb#mbnf>!`lmpjgfqfg#wkf`bqqjfg#lvw#azKltfufq/#jw#jpaf`bnf#sbqw#lejm#qfobwjlm#wlslsvobq#jm#wkfwkf#`bsjwbo#letbp#leej`jbooztkj`k#kbp#affmwkf#Kjpwlqz#lebowfqmbwjuf#wlgjeefqfmw#eqlnwl#pvsslqw#wkfpvddfpwfg#wkbwjm#wkf#sql`fpp##?gju#`obpp>!wkf#elvmgbwjlmaf`bvpf#le#kjp`lm`fqmfg#tjwkwkf#vmjufqpjwzlsslpfg#wl#wkfwkf#`lmwf{w#le?psbm#`obpp>!swf{w!#mbnf>!r!\\n\\n?gju#`obpp>!wkf#p`jfmwjej`qfsqfpfmwfg#aznbwkfnbwj`jbmpfof`wfg#az#wkfwkbw#kbuf#affm=?gju#`obpp>!`gju#jg>!kfbgfqjm#sbqwj`vobq/`lmufqwfg#jmwl*8\\t?,p`qjsw=\\t?skjolplskj`bo#pqsphlkqubwphjwj\\rVSmd#Uj\\rWkw<L=o=m=m<V<T<U=l=o=m=m<V<T<Ujmufpwjdb`j/_msbqwj`jsb`j/_m<V<R=n<R=l=g<Y<R<]<W<\\\\=m=n<T<V<R=n<R=l=g<U=k<Y<W<R<^<Y<V=m<T=m=n<Y<P=g<q<R<^<R=m=n<T<V<R=n<R=l=g=i<R<]<W<\\\\=m=n=`<^=l<Y<P<Y<Q<T<V<R=n<R=l<\\\\=c=m<Y<_<R<X<Q=c=m<V<\\\\=k<\\\\=n=`<Q<R<^<R=m=n<T<O<V=l<\\\\<T<Q=g<^<R<S=l<R=m=g<V<R=n<R=l<R<U=m<X<Y<W<\\\\=n=`<S<R<P<R=e=`=b=m=l<Y<X=m=n<^<R<]=l<\\\\<[<R<P=m=n<R=l<R<Q=g=o=k<\\\\=m=n<T<Y=n<Y=k<Y<Q<T<Y<\\x7F<W<\\\\<^<Q<\\\\=c<T=m=n<R=l<T<T=m<T=m=n<Y<P<\\\\=l<Y=d<Y<Q<T=c<M<V<\\\\=k<\\\\=n=`<S<R=a=n<R<P=o=m<W<Y<X=o<Y=n=m<V<\\\\<[<\\\\=n=`=n<R<^<\\\\=l<R<^<V<R<Q<Y=k<Q<R=l<Y=d<Y<Q<T<Y<V<R=n<R=l<R<Y<R=l<_<\\\\<Q<R<^<V<R=n<R=l<R<P<L<Y<V<W<\\\\<P<\\\\4K5h5i5j4F4C5e5i5j4F4C5f4K4F4K5h5i5d4Z5d4U4K5h4D4]4K5i4@4K5h5i5d4K5n4U4K5h4]4_4K4J5h5i4X4K4]5o4K4F4K5h4O4U4Z4K4M4K5h4]5f4K4Z4E4K5h4F4Y5i5f5i4K5h4K4U4Z4K4M4K5h5j4F4K4J4@4K5h4O5h4U4K4D4K5h4F4_4@5f5h4K5h4O5n4_4K5i4K5h4Z4V4[4K4F4K5h5m5f4C5f5d4K5h4F4]4A5f4D4K5h4@4C5f4C4E4K5h4F4U5h5f5i4K5h4O4B4D4K4]4K5h4K5m5h4K5i4K5h4O5m5h4K5i4K5h4F4K4]5f4B4K5h4F5n5j5f4E4K5h4K5h4U4K4D4K5h4B5d4K4[4]4K5h5i4@4F5i4U4K5h4C5f5o5d4]4K5h4_5f4K4A4E4U4D4C4K5h5h5k4K5h4F4]4D5f4E4K5h4]5d4K4D4[4K5h4O4C4D5f4E4K5h4K4B4D4K4]4K5h5i4F4A4C4E4K5h4K4V4K5j5f`vqplq9sljmwfq8?,wjwof=\\t?nfwb#!#kqfe>!kwws9,,!=?psbm#`obpp>!nfnafqp#le#wkf#tjmglt-ol`bwjlmufqwj`bo.bojdm9,b=#\\x7F#?b#kqfe>!?\\\"gl`wzsf#kwno=nfgjb>!p`qffm!#?lswjlm#ubovf>!ebuj`lm-j`l!#,=\\t\\n\\n?gju#`obpp>!`kbqb`wfqjpwj`p!#nfwklg>!dfw!#,algz=\\t?,kwno=\\tpklqw`vw#j`lm!#gl`vnfmw-tqjwf+sbggjmd.alwwln9qfsqfpfmwbwjufppvanjw!#ubovf>!bojdm>!`fmwfq!#wkqlvdklvw#wkf#p`jfm`f#ej`wjlm\\t##?gju#`obpp>!pvanjw!#`obpp>!lmf#le#wkf#nlpw#ubojdm>!wls!=?tbp#fpwbaojpkfg*8\\x0E\\t?,p`qjsw=\\x0E\\tqfwvqm#ebopf8!=*-pwzof-gjpsobzaf`bvpf#le#wkf#gl`vnfmw-`llhjf?elqn#b`wjlm>!,~algzxnbqdjm938Fm`z`olsfgjb#leufqpjlm#le#wkf#-`qfbwfFofnfmw+mbnf!#`lmwfmw>!?,gju=\\t?,gju=\\t\\tbgnjmjpwqbwjuf#?,algz=\\t?,kwno=kjpwlqz#le#wkf#!=?jmsvw#wzsf>!slqwjlm#le#wkf#bp#sbqw#le#wkf#%maps8?b#kqfe>!lwkfq#`lvmwqjfp!=\\t?gju#`obpp>!?,psbm=?,psbm=?Jm#lwkfq#tlqgp/gjpsobz9#aol`h8`lmwqlo#le#wkf#jmwqlgv`wjlm#le,=\\t?nfwb#mbnf>!bp#tfoo#bp#wkf#jm#qf`fmw#zfbqp\\x0E\\t\\n?gju#`obpp>!?,gju=\\t\\n?,gju=\\tjmpsjqfg#az#wkfwkf#fmg#le#wkf#`lnsbwjaof#tjwkaf`bnf#hmltm#bp#pwzof>!nbqdjm9-ip!=?,p`qjsw=?#Jmwfqmbwjlmbo#wkfqf#kbuf#affmDfqnbm#obmdvbdf#pwzof>!`lolq9 @lnnvmjpw#Sbqwz`lmpjpwfmw#tjwkalqgfq>!3!#`foo#nbqdjmkfjdkw>!wkf#nbilqjwz#le!#bojdm>!`fmwfqqfobwfg#wl#wkf#nbmz#gjeefqfmw#Lqwklgl{#@kvq`kpjnjobq#wl#wkf#,=\\t?ojmh#qfo>!ptbp#lmf#le#wkf#vmwjo#kjp#gfbwk~*+*8\\t?,p`qjsw=lwkfq#obmdvbdfp`lnsbqfg#wl#wkfslqwjlmp#le#wkfwkf#Mfwkfqobmgpwkf#nlpw#`lnnlmab`hdqlvmg9vqo+bqdvfg#wkbw#wkfp`qloojmd>!ml!#jm`ovgfg#jm#wkfMlqwk#Bnfqj`bm#wkf#mbnf#le#wkfjmwfqsqfwbwjlmpwkf#wqbgjwjlmbogfufolsnfmw#le#eqfrvfmwoz#vpfgb#`loof`wjlm#leufqz#pjnjobq#wlpvqqlvmgjmd#wkff{bnsof#le#wkjpbojdm>!`fmwfq!=tlvog#kbuf#affmjnbdf\\\\`bswjlm#>bwwb`kfg#wl#wkfpvddfpwjmd#wkbwjm#wkf#elqn#le#jmuloufg#jm#wkfjp#gfqjufg#eqlnmbnfg#bewfq#wkfJmwqlgv`wjlm#wlqfpwqj`wjlmp#lm#pwzof>!tjgwk9#`bm#af#vpfg#wl#wkf#`qfbwjlm#lenlpw#jnslqwbmw#jmelqnbwjlm#bmgqfpvowfg#jm#wkf`loobspf#le#wkfWkjp#nfbmp#wkbwfofnfmwp#le#wkftbp#qfsob`fg#azbmbozpjp#le#wkfjmpsjqbwjlm#elqqfdbqgfg#bp#wkfnlpw#pv``fppevohmltm#bp#%rvlw8b#`lnsqfkfmpjufKjpwlqz#le#wkf#tfqf#`lmpjgfqfgqfwvqmfg#wl#wkfbqf#qfefqqfg#wlVmplvq`fg#jnbdf=\\t\\n?gju#`obpp>!`lmpjpwp#le#wkfpwlsSqlsbdbwjlmjmwfqfpw#jm#wkfbubjobajojwz#lebssfbqp#wl#kbuffof`wqlnbdmfwj`fmbaofPfquj`fp+evm`wjlm#le#wkfJw#jp#jnslqwbmw?,p`qjsw=?,gju=evm`wjlm+*xubq#qfobwjuf#wl#wkfbp#b#qfpvow#le#wkf#slpjwjlm#leElq#f{bnsof/#jm#nfwklg>!slpw!#tbp#elooltfg#az%bns8ngbpk8#wkfwkf#bssoj`bwjlmip!=?,p`qjsw=\\x0E\\tvo=?,gju=?,gju=bewfq#wkf#gfbwktjwk#qfpsf`w#wlpwzof>!sbggjmd9jp#sbqwj`vobqozgjpsobz9jmojmf8#wzsf>!pvanjw!#jp#gjujgfg#jmwl\\bTA\\nzk#+\\x0BBl\\bQ\\x7F*qfpslmpbajojgbgbgnjmjpwqb`j/_mjmwfqmb`jlmbofp`lqqfpslmgjfmwf\\fHe\\fHF\\fHC\\fIg\\fH{\\fHF\\fIn\\fH\\\\\\fIa\\fHY\\fHU\\fHB\\fHR\\fH\\\\\\fIk\\fH^\\fIg\\fH{\\fIg\\fHn\\fHv\\fIm\\fHD\\fHR\\fHY\\fH^\\fIk\\fHy\\fHS\\fHD\\fHT\\fH\\\\\\fHy\\fHR\\fH\\\\\\fHF\\fIm\\fH^\\fHS\\fHT\\fHz\\fIg\\fHp\\fIk\\fHn\\fHv\\fHR\\fHU\\fHS\\fHc\\fHA\\fIk\\fHp\\fIk\\fHn\\fHZ\\fHR\\fHB\\fHS\\fH^\\fHU\\fHB\\fHR\\fH\\\\\\fIl\\fHp\\fHR\\fH{\\fH\\\\\\fHO\\fH@\\fHD\\fHR\\fHD\\fIk\\fHy\\fIm\\fHB\\fHR\\fH\\\\\\fH@\\fIa\\fH^\\fIe\\fH{\\fHB\\fHR\\fH^\\fHS\\fHy\\fHB\\fHU\\fHS\\fH^\\fHR\\fHF\\fIo\\fH[\\fIa\\fHL\\fH@\\fHN\\fHP\\fHH\\fIk\\fHA\\fHR\\fHp\\fHF\\fHR\\fHy\\fIa\\fH^\\fHS\\fHy\\fHs\\fIa\\fH\\\\\\fIk\\fHD\\fHz\\fHS\\fH^\\fHR\\fHG\\fHJ\\fI`\\fH\\\\\\fHR\\fHD\\fHB\\fHR\\fHB\\fH^\\fIk\\fHB\\fHH\\fHJ\\fHR\\fHD\\fH@\\fHR\\fHp\\fHR\\fH\\\\\\fHY\\fHS\\fHy\\fHR\\fHT\\fHy\\fIa\\fHC\\fIg\\fHn\\fHv\\fHR\\fHU\\fHH\\fIk\\fHF\\fHU\\fIm\\fHm\\fHv\\fH@\\fHH\\fHR\\fHC\\fHR\\fHT\\fHn\\fHY\\fHR\\fHJ\\fHJ\\fIk\\fHz\\fHD\\fIk\\fHF\\fHS\\fHw\\fH^\\fIk\\fHY\\fHS\\fHZ\\fIk\\fH[\\fH\\\\\\fHR\\fHp\\fIa\\fHC\\fHe\\fHH\\fIa\\fHH\\fH\\\\\\fHB\\fIm\\fHn\\fH@\\fHd\\fHJ\\fIg\\fHD\\fIg\\fHn\\fHe\\fHF\\fHy\\fH\\\\\\fHO\\fHF\\fHN\\fHP\\fIk\\fHn\\fHT\\fIa\\fHI\\fHS\\fHH\\fHG\\fHS\\fH^\\fIa\\fHB\\fHB\\fIm\\fHz\\fIa\\fHC\\fHi\\fHv\\fIa\\fHw\\fHR\\fHw\\fIn\\fHs\\fHH\\fIl\\fHT\\fHn\\fH{\\fIl\\fHH\\fHp\\fHR\\fHc\\fH{\\fHR\\fHY\\fHS\\fHA\\fHR\\fH{\\fHt\\fHO\\fIa\\fHs\\fIk\\fHJ\\fIn\\fHT\\fH\\\\\\fIk\\fHJ\\fHS\\fHD\\fIg\\fHn\\fHU\\fHH\\fIa\\fHC\\fHR\\fHT\\fIk\\fHy\\fIa\\fHT\\fH{\\fHR\\fHn\\fHK\\fIl\\fHY\\fHS\\fHZ\\fIa\\fHY\\fH\\\\\\fHR\\fHH\\fIk\\fHn\\fHJ\\fId\\fHs\\fIa\\fHT\\fHD\\fHy\\fIa\\fHZ\\fHR\\fHT\\fHR\\fHB\\fHD\\fIk\\fHi\\fHJ\\fHR\\fH^\\fHH\\fH@\\fHS\\fHp\\fH^\\fIl\\fHF\\fIm\\fH\\\\\\fIn\\fH[\\fHU\\fHS\\fHn\\fHJ\\fIl\\fHB\\fHS\\fHH\\fIa\\fH\\\\\\fHy\\fHY\\fHS\\fHH\\fHR\\fH\\\\\\fIm\\fHF\\fHC\\fIk\\fHT\\fIa\\fHI\\fHR\\fHD\\fHy\\fH\\\\\\fIg\\fHM\\fHP\\fHB\\fIm\\fHy\\fIa\\fHH\\fHC\\fIg\\fHp\\fHD\\fHR\\fHy\\fIo\\fHF\\fHC\\fHR\\fHF\\fIg\\fHT\\fIa\\fHs\\fHt\\fH\\\\\\fIk\\fH^\\fIn\\fHy\\fHR\\fH\\\\\\fIa\\fHC\\fHY\\fHS\\fHv\\fHR\\fH\\\\\\fHT\\fIn\\fHv\\fHD\\fHR\\fHB\\fIn\\fH^\\fIa\\fHC\\fHJ\\fIk\\fHz\\fIk\\fHn\\fHU\\fHB\\fIk\\fHZ\\fHR\\fHT\\fIa\\fHy\\fIn\\fH^\\fHB\\fId\\fHn\\fHD\\fIk\\fHH\\fId\\fHC\\fHR\\fH\\\\\\fHp\\fHS\\fHT\\fHy\\fIkqpp({no!#wjwof>!.wzsf!#`lmwfmw>!wjwof!#`lmwfmw>!bw#wkf#pbnf#wjnf-ip!=?,p`qjsw=\\t?!#nfwklg>!slpw!#?,psbm=?,b=?,oj=ufqwj`bo.bojdm9w,irvfqz-njm-ip!=-`oj`h+evm`wjlm+#pwzof>!sbggjmd.~*+*8\\t?,p`qjsw=\\t?,psbm=?b#kqfe>!?b#kqfe>!kwws9,,*8#qfwvqm#ebopf8wf{w.gf`lqbwjlm9#p`qloojmd>!ml!#alqgfq.`loobspf9bppl`jbwfg#tjwk#Abkbpb#JmglmfpjbFmdojpk#obmdvbdf?wf{w#{no9psb`f>-dje!#alqgfq>!3!?,algz=\\t?,kwno=\\tlufqeolt9kjggfm8jnd#pq`>!kwws9,,bggFufmwOjpwfmfqqfpslmpjaof#elq#p-ip!=?,p`qjsw=\\t,ebuj`lm-j`l!#,=lsfqbwjmd#pzpwfn!#pwzof>!tjgwk92wbqdfw>!\\\\aobmh!=Pwbwf#Vmjufqpjwzwf{w.bojdm9ofew8\\tgl`vnfmw-tqjwf+/#jm`ovgjmd#wkf#bqlvmg#wkf#tlqog*8\\x0E\\t?,p`qjsw=\\x0E\\t?!#pwzof>!kfjdkw98lufqeolt9kjggfmnlqf#jmelqnbwjlmbm#jmwfqmbwjlmbob#nfnafq#le#wkf#lmf#le#wkf#ejqpw`bm#af#elvmg#jm#?,gju=\\t\\n\\n?,gju=\\tgjpsobz9#mlmf8!=!#,=\\t?ojmh#qfo>!\\t##+evm`wjlm+*#xwkf#26wk#`fmwvqz-sqfufmwGfebvow+obqdf#mvnafq#le#Azybmwjmf#Fnsjqf-isd\\x7Fwkvna\\x7Fofew\\x7Fubpw#nbilqjwz#lenbilqjwz#le#wkf##bojdm>!`fmwfq!=Vmjufqpjwz#Sqfppglnjmbwfg#az#wkfPf`lmg#Tlqog#Tbqgjpwqjavwjlm#le#pwzof>!slpjwjlm9wkf#qfpw#le#wkf#`kbqb`wfqjyfg#az#qfo>!mleloolt!=gfqjufp#eqln#wkfqbwkfq#wkbm#wkf#b#`lnajmbwjlm#lepwzof>!tjgwk9233Fmdojpk.psfbhjmd`lnsvwfq#p`jfm`falqgfq>!3!#bow>!wkf#f{jpwfm`f#leGfnl`qbwj`#Sbqwz!#pwzof>!nbqdjm.Elq#wkjp#qfbplm/-ip!=?,p`qjsw=\\t\\npAzWbdMbnf+p*X3^ip!=?,p`qjsw=\\x0E\\t?-ip!=?,p`qjsw=\\x0E\\tojmh#qfo>!j`lm!#$#bow>$$#`obpp>$elqnbwjlm#le#wkfufqpjlmp#le#wkf#?,b=?,gju=?,gju=,sbdf=\\t##?sbdf=\\t?gju#`obpp>!`lmwaf`bnf#wkf#ejqpwabkbpb#Jmglmfpjbfmdojpk#+pjnsof*\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@=i=l<^<\\\\=n=m<V<T<V<R<P<S<\\\\<Q<T<T=c<^<W=c<Y=n=m=c<x<R<]<\\\\<^<T=n=`=k<Y<W<R<^<Y<V<\\\\=l<\\\\<[<^<T=n<T=c<t<Q=n<Y=l<Q<Y=n<r=n<^<Y=n<T=n=`<Q<\\\\<S=l<T<P<Y=l<T<Q=n<Y=l<Q<Y=n<V<R=n<R=l<R<_<R=m=n=l<\\\\<Q<T=j=g<V<\\\\=k<Y=m=n<^<Y=o=m<W<R<^<T=c=i<S=l<R<]<W<Y<P=g<S<R<W=o=k<T=n=`=c<^<W=c=b=n=m=c<Q<\\\\<T<]<R<W<Y<Y<V<R<P<S<\\\\<Q<T=c<^<Q<T<P<\\\\<Q<T<Y=m=l<Y<X=m=n<^<\\\\4K5h5i5d4K4Z5f4U4K5h4]4J5f4_5f4E4K5h4K5j4F5n4K5h5i4X4K4]5o4K4F5o4K5h4_5f4K4]4K4F4K5h5i5o4F5d4D4E4K5h4_4U5d4C5f4E4K4A4Y4K4J5f4K4F4K5h4U4K5h5i5f4E4K5h4Y5d4F5f4K4F4K5h4K5j4F4]5j4F4K5h4F4Y4K5i5f5i4K5h4I4_5h4K5i5f4K5h5i4X4K4]5o4E4K5h5i4]4J5f4K4Fqlalwp!#`lmwfmw>!?gju#jg>!ellwfq!=wkf#Vmjwfg#Pwbwfp?jnd#pq`>!kwws9,,-isd\\x7Fqjdkw\\x7Fwkvna\\x7F-ip!=?,p`qjsw=\\x0E\\t?ol`bwjlm-sqlwl`loeqbnfalqgfq>!3!#p!#,=\\t?nfwb#mbnf>!?,b=?,gju=?,gju=?elmw.tfjdkw9alog8%rvlw8#bmg#%rvlw8gfsfmgjmd#lm#wkf#nbqdjm938sbggjmd9!#qfo>!mleloolt!#Sqfpjgfmw#le#wkf#wtfmwjfwk#`fmwvqzfujpjlm=\\t##?,sbdfJmwfqmfw#F{solqfqb-bpzm`#>#wqvf8\\x0E\\tjmelqnbwjlm#balvw?gju#jg>!kfbgfq!=!#b`wjlm>!kwws9,,?b#kqfe>!kwwsp9,,?gju#jg>!`lmwfmw!?,gju=\\x0E\\t?,gju=\\x0E\\t?gfqjufg#eqln#wkf#?jnd#pq`>$kwws9,,b``lqgjmd#wl#wkf#\\t?,algz=\\t?,kwno=\\tpwzof>!elmw.pjyf9p`qjsw#obmdvbdf>!Bqjbo/#Kfoufwj`b/?,b=?psbm#`obpp>!?,p`qjsw=?p`qjsw#slojwj`bo#sbqwjfpwg=?,wq=?,wbaof=?kqfe>!kwws9,,ttt-jmwfqsqfwbwjlm#leqfo>!pwzofpkffw!#gl`vnfmw-tqjwf+$?`kbqpfw>!vwe.;!=\\tafdjmmjmd#le#wkf#qfufbofg#wkbw#wkfwfofujpjlm#pfqjfp!#qfo>!mleloolt!=#wbqdfw>!\\\\aobmh!=`objnjmd#wkbw#wkfkwws&0B&1E&1Ettt-nbmjefpwbwjlmp#leSqjnf#Njmjpwfq#lejmeovfm`fg#az#wkf`obpp>!`ofbqej{!=,gju=\\x0E\\t?,gju=\\x0E\\t\\x0E\\twkqff.gjnfmpjlmbo@kvq`k#le#Fmdobmgle#Mlqwk#@bqlojmbprvbqf#hjolnfwqfp-bggFufmwOjpwfmfqgjpwjm`w#eqln#wkf`lnnlmoz#hmltm#bpSklmfwj`#Boskbafwgf`obqfg#wkbw#wkf`lmwqloofg#az#wkfAfmibnjm#Eqbmhojmqlof.sobzjmd#dbnfwkf#Vmjufqpjwz#lejm#Tfpwfqm#Fvqlsfsfqplmbo#`lnsvwfqSqlif`w#Dvwfmafqdqfdbqgofpp#le#wkfkbp#affm#sqlslpfgwldfwkfq#tjwk#wkf=?,oj=?oj#`obpp>!jm#plnf#`lvmwqjfpnjm-ip!=?,p`qjsw=le#wkf#slsvobwjlmleej`jbo#obmdvbdf?jnd#pq`>!jnbdfp,jgfmwjejfg#az#wkfmbwvqbo#qfplvq`fp`obppjej`bwjlm#le`bm#af#`lmpjgfqfgrvbmwvn#nf`kbmj`pMfufqwkfofpp/#wkfnjoojlm#zfbqp#bdl?,algz=\\x0E\\t?,kwno=\\x0E\\\"y\\\"W\\\"W\\\"[\\\"Q\\\"U\\\"V\\\"@\\twbhf#bgubmwbdf#lebmg/#b``lqgjmd#wlbwwqjavwfg#wl#wkfNj`qlplew#Tjmgltpwkf#ejqpw#`fmwvqzvmgfq#wkf#`lmwqlogju#`obpp>!kfbgfqpklqwoz#bewfq#wkfmlwbaof#f{`fswjlmwfmp#le#wklvpbmgppfufqbo#gjeefqfmwbqlvmg#wkf#tlqog-qfb`kjmd#njojwbqzjplobwfg#eqln#wkflsslpjwjlm#wl#wkfwkf#Log#WfpwbnfmwBeqj`bm#Bnfqj`bmpjmpfqwfg#jmwl#wkfpfsbqbwf#eqln#wkfnfwqlslojwbm#bqfbnbhfp#jw#slppjaofb`hmltofgdfg#wkbwbqdvbaoz#wkf#nlpwwzsf>!wf{w,`pp!=\\twkf#JmwfqmbwjlmboB``lqgjmd#wl#wkf#sf>!wf{w,`pp!#,=\\t`ljm`jgf#tjwk#wkfwtl.wkjqgp#le#wkfGvqjmd#wkjp#wjnf/gvqjmd#wkf#sfqjlgbmmlvm`fg#wkbw#kfwkf#jmwfqmbwjlmbobmg#nlqf#qf`fmwozafojfufg#wkbw#wkf`lmp`jlvpmfpp#bmgelqnfqoz#hmltm#bppvqqlvmgfg#az#wkfejqpw#bssfbqfg#jml``bpjlmbooz#vpfgslpjwjlm9baplovwf8!#wbqdfw>!\\\\aobmh!#slpjwjlm9qfobwjuf8wf{w.bojdm9`fmwfq8ib{,ojap,irvfqz,2-ab`hdqlvmg.`lolq9 wzsf>!bssoj`bwjlm,bmdvbdf!#`lmwfmw>!?nfwb#kwws.frvju>!Sqjub`z#Sloj`z?,b=f+!&0@p`qjsw#pq`>$!#wbqdfw>!\\\\aobmh!=Lm#wkf#lwkfq#kbmg/-isd\\x7Fwkvna\\x7Fqjdkw\\x7F1?,gju=?gju#`obpp>!?gju#pwzof>!eolbw9mjmfwffmwk#`fmwvqz?,algz=\\x0E\\t?,kwno=\\x0E\\t?jnd#pq`>!kwws9,,p8wf{w.bojdm9`fmwfqelmw.tfjdkw9#alog8#B``lqgjmd#wl#wkf#gjeefqfm`f#afwtffm!#eqbnfalqgfq>!3!#!#pwzof>!slpjwjlm9ojmh#kqfe>!kwws9,,kwno7,ollpf-gwg!=\\tgvqjmd#wkjp#sfqjlg?,wg=?,wq=?,wbaof=`olpfoz#qfobwfg#wlelq#wkf#ejqpw#wjnf8elmw.tfjdkw9alog8jmsvw#wzsf>!wf{w!#?psbm#pwzof>!elmw.lmqfbgzpwbwf`kbmdf\\n?gju#`obpp>!`ofbqgl`vnfmw-ol`bwjlm-#Elq#f{bnsof/#wkf#b#tjgf#ubqjfwz#le#?\\\"GL@WZSF#kwno=\\x0E\\t?%maps8%maps8%maps8!=?b#kqfe>!kwws9,,pwzof>!eolbw9ofew8`lm`fqmfg#tjwk#wkf>kwws&0B&1E&1Ettt-jm#slsvobq#`vowvqfwzsf>!wf{w,`pp!#,=jw#jp#slppjaof#wl#Kbqubqg#Vmjufqpjwzwzofpkffw!#kqfe>!,wkf#nbjm#`kbqb`wfqL{elqg#Vmjufqpjwz##mbnf>!hfztlqgp!#`pwzof>!wf{w.bojdm9wkf#Vmjwfg#Hjmdglnefgfqbo#dlufqmnfmw?gju#pwzof>!nbqdjm#gfsfmgjmd#lm#wkf#gfp`qjswjlm#le#wkf?gju#`obpp>!kfbgfq-njm-ip!=?,p`qjsw=gfpwqv`wjlm#le#wkfpojdkwoz#gjeefqfmwjm#b``lqgbm`f#tjwkwfof`lnnvmj`bwjlmpjmgj`bwfp#wkbw#wkfpklqwoz#wkfqfbewfqfpsf`jbooz#jm#wkf#Fvqlsfbm#`lvmwqjfpKltfufq/#wkfqf#bqfpq`>!kwws9,,pwbwj`pvddfpwfg#wkbw#wkf!#pq`>!kwws9,,ttt-b#obqdf#mvnafq#le#Wfof`lnnvmj`bwjlmp!#qfo>!mleloolt!#wKloz#Qlnbm#Fnsfqlqbonlpw#f{`ovpjufoz!#alqgfq>!3!#bow>!Pf`qfwbqz#le#Pwbwf`vonjmbwjmd#jm#wkf@JB#Tlqog#Eb`wallhwkf#nlpw#jnslqwbmwbmmjufqpbqz#le#wkfpwzof>!ab`hdqlvmg.?oj=?fn=?b#kqfe>!,wkf#Bwobmwj`#L`fbmpwqj`woz#psfbhjmd/pklqwoz#afelqf#wkfgjeefqfmw#wzsfp#lewkf#Lwwlnbm#Fnsjqf=?jnd#pq`>!kwws9,,Bm#Jmwqlgv`wjlm#wl`lmpfrvfm`f#le#wkfgfsbqwvqf#eqln#wkf@lmefgfqbwf#Pwbwfpjmgjdfmlvp#sflsofpSql`ffgjmdp#le#wkfjmelqnbwjlm#lm#wkfwkflqjfp#kbuf#affmjmuloufnfmw#jm#wkfgjujgfg#jmwl#wkqffbgib`fmw#`lvmwqjfpjp#qfpslmpjaof#elqgjpplovwjlm#le#wkf`loobalqbwjlm#tjwktjgfoz#qfdbqgfg#bpkjp#`lmwfnslqbqjfpelvmgjmd#nfnafq#leGlnjmj`bm#Qfsvaoj`dfmfqbooz#b``fswfgwkf#slppjajojwz#lebqf#bopl#bubjobaofvmgfq#`lmpwqv`wjlmqfpwlqbwjlm#le#wkfwkf#dfmfqbo#svaoj`jp#bonlpw#fmwjqfozsbppfp#wkqlvdk#wkfkbp#affm#pvddfpwfg`lnsvwfq#bmg#ujgflDfqnbmj`#obmdvbdfp#b``lqgjmd#wl#wkf#gjeefqfmw#eqln#wkfpklqwoz#bewfqtbqgpkqfe>!kwwsp9,,ttt-qf`fmw#gfufolsnfmwAlbqg#le#Gjqf`wlqp?gju#`obpp>!pfbq`k\\x7F#?b#kqfe>!kwws9,,Jm#sbqwj`vobq/#wkfNvowjsof#ellwmlwfplq#lwkfq#pvapwbm`fwklvpbmgp#le#zfbqpwqbmpobwjlm#le#wkf?,gju=\\x0E\\t?,gju=\\x0E\\t\\x0E\\t?b#kqfe>!jmgf{-skstbp#fpwbaojpkfg#jmnjm-ip!=?,p`qjsw=\\tsbqwj`jsbwf#jm#wkfb#pwqlmd#jmeovfm`fpwzof>!nbqdjm.wls9qfsqfpfmwfg#az#wkfdqbgvbwfg#eqln#wkfWqbgjwjlmbooz/#wkfFofnfmw+!p`qjsw!*8Kltfufq/#pjm`f#wkf,gju=\\t?,gju=\\t?gju#ofew8#nbqdjm.ofew9sqlwf`wjlm#bdbjmpw38#ufqwj`bo.bojdm9Vmelqwvmbwfoz/#wkfwzsf>!jnbdf,{.j`lm,gju=\\t?gju#`obpp>!#`obpp>!`ofbqej{!=?gju#`obpp>!ellwfq\\n\\n?,gju=\\t\\n\\n?,gju=\\twkf#nlwjlm#sj`wvqf<}=f<W<_<\\\\=l=m<V<T<]=f<W<_<\\\\=l=m<V<T<H<Y<X<Y=l<\\\\=j<T<T<Q<Y=m<V<R<W=`<V<R=m<R<R<]=e<Y<Q<T<Y=m<R<R<]=e<Y<Q<T=c<S=l<R<_=l<\\\\<P<P=g<r=n<S=l<\\\\<^<T=n=`<]<Y=m<S<W<\\\\=n<Q<R<P<\\\\=n<Y=l<T<\\\\<W=g<S<R<[<^<R<W=c<Y=n<S<R=m<W<Y<X<Q<T<Y=l<\\\\<[<W<T=k<Q=g=i<S=l<R<X=o<V=j<T<T<S=l<R<_=l<\\\\<P<P<\\\\<S<R<W<Q<R=m=n=`=b<Q<\\\\=i<R<X<T=n=m=c<T<[<]=l<\\\\<Q<Q<R<Y<Q<\\\\=m<Y<W<Y<Q<T=c<T<[<P<Y<Q<Y<Q<T=c<V<\\\\=n<Y<_<R=l<T<T<|<W<Y<V=m<\\\\<Q<X=l\\fHJ\\fIa\\fHY\\fHR\\fH\\\\\\fHR\\fHB\\fId\\fHD\\fIm\\fHi\\fH^\\fHF\\fIa\\fH\\\\\\fHJ\\fHR\\fHD\\fHA\\fHR\\fH\\\\\\fHH\\fIl\\fHC\\fHi\\fHD\\fIm\\fHJ\\fIk\\fHZ\\fHU\\fHS\\fHD\\fIa\\fHJ\\fIl\\fHk\\fHn\\fHM\\fHS\\fHC\\fHR\\fHJ\\fHS\\fH^\\fIa\\fH^\\fIl\\fHi\\fHK\\fHS\\fHy\\fHR\\fH\\\\\\fHY\\fIl\\fHM\\fHS\\fHC\\fIg\\fHv\\fHS\\fHs\\fIa\\fHL\\fIk\\fHT\\fHB\\fHR\\fHv\\fHR\\fH\\\\\\fHp\\fHn\\fHy\\fIa\\fHZ\\fHD\\fHJ\\fIm\\fHD\\fHS\\fHC\\fHR\\fHF\\fIa\\fH\\\\\\fHC\\fIg\\fH{\\fHi\\fHD\\fIm\\fHT\\fHR\\fH\\\\\\fH}\\fHD\\fH^\\fHR\\fHk\\fHD\\fHF\\fHR\\fH\\\\\\fIa\\fHs\\fIl\\fHZ\\fH\\\\\\fIa\\fHH\\fIg\\fHn\\fH^\\fIg\\fHy\\fHT\\fHA\\fHR\\fHG\\fHP\\fIa\\fH^\\fId\\fHZ\\fHZ\\fH\\\\\\fIa\\fHH\\fIk\\fHn\\fHF\\fIa\\fH\\\\\\fHJ\\fIk\\fHZ\\fHF\\fIa\\fH^\\fIk\\fHC\\fH\\\\\\fHy\\fIk\\fHn\\fHJ\\fIa\\fH\\\\\\fHT\\fIa\\fHI\\fHS\\fHH\\fHS\\fHe\\fHH\\fIa\\fHF\\fHR\\fHJ\\fHe\\fHD\\fIa\\fHU\\fIk\\fHn\\fHv\\fHS\\fHs\\fIa\\fHL\\fHR\\fHC\\fHR\\fHH\\fIa\\fH\\\\\\fHR\\fHp\\fIa\\fHC\\fHR\\fHJ\\fHR\\fHF\\fIm\\fH\\\\\\fHR\\fHD\\fIk\\fHp\\fIg\\fHM\\fHP\\fIk\\fHn\\fHi\\fHD\\fIm\\fHY\\fHR\\fHJ\\fHZ\\fIa\\fH\\\\\\fIk\\fHO\\fIl\\fHZ\\fHS\\fHy\\fIa\\fH[\\fHR\\fHT\\fH\\\\\\fHy\\fHR\\fH\\\\\\fIl\\fHT\\fHn\\fH{\\fIa\\fH\\\\\\fHU\\fHF\\fH\\\\\\fHS\\fHO\\fHR\\fHB\\fH@\\fIa\\fH\\\\\\fHR\\fHn\\fHM\\fH@\\fHv\\fIa\\fHv\\fIg\\fHn\\fHe\\fHF\\fH^\\fH@\\fIa\\fHK\\fHB\\fHn\\fHH\\fIa\\fH\\\\\\fIl\\fHT\\fHn\\fHF\\fH\\\\\\fIa\\fHy\\fHe\\fHB\\fIa\\fHB\\fIl\\fHJ\\fHB\\fHR\\fHK\\fIa\\fHC\\fHB\\fHT\\fHU\\fHR\\fHC\\fHH\\fHR\\fHZ\\fH@\\fIa\\fHJ\\fIg\\fHn\\fHB\\fIl\\fHM\\fHS\\fHC\\fHR\\fHj\\fHd\\fHF\\fIl\\fHc\\fH^\\fHB\\fIg\\fH@\\fHR\\fHk\\fH^\\fHT\\fHn\\fHz\\fIa\\fHC\\fHR\\fHj\\fHF\\fH\\\\\\fIk\\fHZ\\fHD\\fHi\\fHD\\fIm\\fH@\\fHn\\fHK\\fH@\\fHR\\fHp\\fHP\\fHR\\fH\\\\\\fHD\\fHY\\fIl\\fHD\\fHH\\fHB\\fHF\\fIa\\fH\\\\\\fHB\\fIm\\fHz\\fHF\\fIa\\fH\\\\\\fHZ\\fIa\\fHD\\fHF\\fH\\\\\\fHS\\fHY\\fHR\\fH\\\\\\fHD\\fIm\\fHy\\fHT\\fHR\\fHD\\fHT\\fHB\\fH\\\\\\fIa\\fHI\\fHD\\fHj\\fHC\\fIg\\fHp\\fHS\\fHH\\fHT\\fIg\\fHB\\fHY\\fHR\\fH\\\\4K5h5i4X4K4]5o4K4F4K5h5i5j4F4C5f4K4F4K5h5o5i4D5f5d4F4]4K5h5i4X4K5k4C4K4F4U4C4C4K5h4^5d4K4]4U4C4C4K5h4]4C5d4C4K5h4I4_5h4K5i5f4E4K5h5m5d4F5d4X5d4D4K5h5i4_4K4D5n4K4F4K5h5i4U5h5d5i4K4F4K5h5i4_5h4_5h4K4F4K5h4@4]4K5m5f5o4_4K5h4K4_5h4K5i5f4E4K5h4K4F4Y4K5h4K4Fhfztlqgp!#`lmwfmw>!t0-lqd,2:::,{kwno!=?b#wbqdfw>!\\\\aobmh!#wf{w,kwno8#`kbqpfw>!#wbqdfw>!\\\\aobmh!=?wbaof#`foosbggjmd>!bvwl`lnsofwf>!lee!#wf{w.bojdm9#`fmwfq8wl#obpw#ufqpjlm#az#ab`hdqlvmg.`lolq9# !#kqfe>!kwws9,,ttt-,gju=?,gju=?gju#jg>?b#kqfe>! !#`obpp>!!=?jnd#pq`>!kwws9,,`qjsw!#pq`>!kwws9,,\\t?p`qjsw#obmdvbdf>!,,FM!#!kwws9,,ttt-tfm`lgfVQJ@lnslmfmw+!#kqfe>!ibubp`qjsw9?gju#`obpp>!`lmwfmwgl`vnfmw-tqjwf+$?p`slpjwjlm9#baplovwf8p`qjsw#pq`>!kwws9,,#pwzof>!nbqdjm.wls9-njm-ip!=?,p`qjsw=\\t?,gju=\\t?gju#`obpp>!t0-lqd,2:::,{kwno!#\\t\\x0E\\t?,algz=\\x0E\\t?,kwno=gjpwjm`wjlm#afwtffm,!#wbqdfw>!\\\\aobmh!=?ojmh#kqfe>!kwws9,,fm`lgjmd>!vwe.;!<=\\tt-bggFufmwOjpwfmfq<b`wjlm>!kwws9,,ttt-j`lm!#kqfe>!kwws9,,#pwzof>!ab`hdqlvmg9wzsf>!wf{w,`pp!#,=\\tnfwb#sqlsfqwz>!ld9w?jmsvw#wzsf>!wf{w!##pwzof>!wf{w.bojdm9wkf#gfufolsnfmw#le#wzofpkffw!#wzsf>!wfkwno8#`kbqpfw>vwe.;jp#`lmpjgfqfg#wl#afwbaof#tjgwk>!233&!#Jm#bggjwjlm#wl#wkf#`lmwqjavwfg#wl#wkf#gjeefqfm`fp#afwtffmgfufolsnfmw#le#wkf#Jw#jp#jnslqwbmw#wl#?,p`qjsw=\\t\\t?p`qjsw##pwzof>!elmw.pjyf92=?,psbm=?psbm#jg>daOjaqbqz#le#@lmdqfpp?jnd#pq`>!kwws9,,jnFmdojpk#wqbmpobwjlmB`bgfnz#le#P`jfm`fpgju#pwzof>!gjpsobz9`lmpwqv`wjlm#le#wkf-dfwFofnfmwAzJg+jg*jm#`lmivm`wjlm#tjwkFofnfmw+$p`qjsw$*8#?nfwb#sqlsfqwz>!ld9<}=f<W<_<\\\\=l=m<V<T\\t#wzsf>!wf{w!#mbnf>!=Sqjub`z#Sloj`z?,b=bgnjmjpwfqfg#az#wkffmbaofPjmdofQfrvfpwpwzof>%rvlw8nbqdjm9?,gju=?,gju=?,gju=?=?jnd#pq`>!kwws9,,j#pwzof>%rvlw8eolbw9qfefqqfg#wl#bp#wkf#wlwbo#slsvobwjlm#lejm#Tbpkjmdwlm/#G-@-#pwzof>!ab`hdqlvmg.bnlmd#lwkfq#wkjmdp/lqdbmjybwjlm#le#wkfsbqwj`jsbwfg#jm#wkfwkf#jmwqlgv`wjlm#lejgfmwjejfg#tjwk#wkfej`wjlmbo#`kbqb`wfq#L{elqg#Vmjufqpjwz#njpvmgfqpwbmgjmd#leWkfqf#bqf/#kltfufq/pwzofpkffw!#kqfe>!,@lovnajb#Vmjufqpjwzf{sbmgfg#wl#jm`ovgfvpvbooz#qfefqqfg#wljmgj`bwjmd#wkbw#wkfkbuf#pvddfpwfg#wkbwbeejojbwfg#tjwk#wkf`lqqfobwjlm#afwtffmmvnafq#le#gjeefqfmw=?,wg=?,wq=?,wbaof=Qfsvaoj`#le#Jqfobmg\\t?,p`qjsw=\\t?p`qjsw#vmgfq#wkf#jmeovfm`f`lmwqjavwjlm#wl#wkfLeej`jbo#tfapjwf#lekfbgrvbqwfqp#le#wkf`fmwfqfg#bqlvmg#wkfjnsoj`bwjlmp#le#wkfkbuf#affm#gfufolsfgEfgfqbo#Qfsvaoj`#leaf`bnf#jm`qfbpjmdoz`lmwjmvbwjlm#le#wkfMlwf/#kltfufq/#wkbwpjnjobq#wl#wkbw#le#`bsbajojwjfp#le#wkfb``lqgbm`f#tjwk#wkfsbqwj`jsbmwp#jm#wkfevqwkfq#gfufolsnfmwvmgfq#wkf#gjqf`wjlmjp#lewfm#`lmpjgfqfgkjp#zlvmdfq#aqlwkfq?,wg=?,wq=?,wbaof=?b#kwws.frvju>![.VB.skzpj`bo#sqlsfqwjfple#Aqjwjpk#@lovnajbkbp#affm#`qjwj`jyfg+tjwk#wkf#f{`fswjlmrvfpwjlmp#balvw#wkfsbppjmd#wkqlvdk#wkf3!#`foosbggjmd>!3!#wklvpbmgp#le#sflsofqfgjqf`wp#kfqf-#Elqkbuf#`kjogqfm#vmgfq&0F&0@,p`qjsw&0F!**8?b#kqfe>!kwws9,,ttt-?oj=?b#kqfe>!kwws9,,pjwf\\\\mbnf!#`lmwfmw>!wf{w.gf`lqbwjlm9mlmfpwzof>!gjpsobz9#mlmf?nfwb#kwws.frvju>![.mft#Gbwf+*-dfwWjnf+*#wzsf>!jnbdf,{.j`lm!?,psbm=?psbm#`obpp>!obmdvbdf>!ibubp`qjswtjmglt-ol`bwjlm-kqfe?b#kqfe>!ibubp`qjsw9..=\\x0E\\t?p`qjsw#wzsf>!w?b#kqfe>$kwws9,,ttt-klqw`vw#j`lm!#kqfe>!?,gju=\\x0E\\t?gju#`obpp>!?p`qjsw#pq`>!kwws9,,!#qfo>!pwzofpkffw!#w?,gju=\\t?p`qjsw#wzsf>,b=#?b#kqfe>!kwws9,,#booltWqbmpsbqfm`z>![.VB.@lnsbwjaof!#`lmqfobwjlmpkjs#afwtffm\\t?,p`qjsw=\\x0E\\t?p`qjsw#?,b=?,oj=?,vo=?,gju=bppl`jbwfg#tjwk#wkf#sqldqbnnjmd#obmdvbdf?,b=?b#kqfe>!kwws9,,?,b=?,oj=?oj#`obpp>!elqn#b`wjlm>!kwws9,,?gju#pwzof>!gjpsobz9wzsf>!wf{w!#mbnf>!r!?wbaof#tjgwk>!233&!#ab`hdqlvmg.slpjwjlm9!#alqgfq>!3!#tjgwk>!qfo>!pklqw`vw#j`lm!#k5=?vo=?oj=?b#kqfe>!##?nfwb#kwws.frvju>!`pp!#nfgjb>!p`qffm!#qfpslmpjaof#elq#wkf#!#wzsf>!bssoj`bwjlm,!#pwzof>!ab`hdqlvmg.kwno8#`kbqpfw>vwe.;!#booltwqbmpsbqfm`z>!pwzofpkffw!#wzsf>!wf\\x0E\\t?nfwb#kwws.frvju>!=?,psbm=?psbm#`obpp>!3!#`foopsb`jmd>!3!=8\\t?,p`qjsw=\\t?p`qjsw#plnfwjnfp#`boofg#wkfglfp#mlw#mf`fppbqjozElq#nlqf#jmelqnbwjlmbw#wkf#afdjmmjmd#le#?\\\"GL@WZSF#kwno=?kwnosbqwj`vobqoz#jm#wkf#wzsf>!kjggfm!#mbnf>!ibubp`qjsw9uljg+3*8!feef`wjufmfpp#le#wkf#bvwl`lnsofwf>!lee!#dfmfqbooz#`lmpjgfqfg=?jmsvw#wzsf>!wf{w!#!=?,p`qjsw=\\x0E\\t?p`qjswwkqlvdklvw#wkf#tlqog`lnnlm#njp`lm`fswjlmbppl`jbwjlm#tjwk#wkf?,gju=\\t?,gju=\\t?gju#`gvqjmd#kjp#ojefwjnf/`lqqfpslmgjmd#wl#wkfwzsf>!jnbdf,{.j`lm!#bm#jm`qfbpjmd#mvnafqgjsolnbwj`#qfobwjlmpbqf#lewfm#`lmpjgfqfgnfwb#`kbqpfw>!vwe.;!#?jmsvw#wzsf>!wf{w!#f{bnsofp#jm`ovgf#wkf!=?jnd#pq`>!kwws9,,jsbqwj`jsbwjlm#jm#wkfwkf#fpwbaojpknfmw#le\\t?,gju=\\t?gju#`obpp>!%bns8maps8%bns8maps8wl#gfwfqnjmf#tkfwkfqrvjwf#gjeefqfmw#eqlnnbqhfg#wkf#afdjmmjmdgjpwbm`f#afwtffm#wkf`lmwqjavwjlmp#wl#wkf`lmeoj`w#afwtffm#wkftjgfoz#`lmpjgfqfg#wltbp#lmf#le#wkf#ejqpwtjwk#ubqzjmd#gfdqffpkbuf#psf`vobwfg#wkbw+gl`vnfmw-dfwFofnfmwsbqwj`jsbwjmd#jm#wkflqjdjmbooz#gfufolsfgfwb#`kbqpfw>!vwe.;!=#wzsf>!wf{w,`pp!#,=\\tjmwfq`kbmdfbaoz#tjwknlqf#`olpfoz#qfobwfgpl`jbo#bmg#slojwj`bowkbw#tlvog#lwkfqtjpfsfqsfmgj`vobq#wl#wkfpwzof#wzsf>!wf{w,`ppwzsf>!pvanjw!#mbnf>!ebnjojfp#qfpjgjmd#jmgfufolsjmd#`lvmwqjfp`lnsvwfq#sqldqbnnjmdf`lmlnj`#gfufolsnfmwgfwfqnjmbwjlm#le#wkfelq#nlqf#jmelqnbwjlmlm#pfufqbo#l``bpjlmpslqwvdv/Fp#+Fvqlsfv*<O<V=l<\\\\={<Q=m=`<V<\\\\=o<V=l<\\\\={<Q=m=`<V<\\\\<L<R=m=m<T<U=m<V<R<U<P<\\\\=n<Y=l<T<\\\\<W<R<^<T<Q=h<R=l<P<\\\\=j<T<T=o<S=l<\\\\<^<W<Y<Q<T=c<Q<Y<R<]=i<R<X<T<P<R<T<Q=h<R=l<P<\\\\=j<T=c<t<Q=h<R=l<P<\\\\=j<T=c<L<Y=m<S=o<]<W<T<V<T<V<R<W<T=k<Y=m=n<^<R<T<Q=h<R=l<P<\\\\=j<T=b=n<Y=l=l<T=n<R=l<T<T<X<R=m=n<\\\\=n<R=k<Q<R4K5h5i4F5d4K4@4C5d5j4K5h4K4X4F4]4K5o4K4F4K5h4K5n4F4]4K4A4K4Fkwno8#`kbqpfw>VWE.;!#pfwWjnflvw+evm`wjlm+*gjpsobz9jmojmf.aol`h8?jmsvw#wzsf>!pvanjw!#wzsf#>#$wf{w,ibubp`qj?jnd#pq`>!kwws9,,ttt-!#!kwws9,,ttt-t0-lqd,pklqw`vw#j`lm!#kqfe>!!#bvwl`lnsofwf>!lee!#?,b=?,gju=?gju#`obpp>?,b=?,oj=\\t?oj#`obpp>!`pp!#wzsf>!wf{w,`pp!#?elqn#b`wjlm>!kwws9,,{w,`pp!#kqfe>!kwws9,,ojmh#qfo>!bowfqmbwf!#\\x0E\\t?p`qjsw#wzsf>!wf{w,#lm`oj`h>!ibubp`qjsw9+mft#Gbwf*-dfwWjnf+*~kfjdkw>!2!#tjgwk>!2!#Sflsof$p#Qfsvaoj`#le##?b#kqfe>!kwws9,,ttt-wf{w.gf`lqbwjlm9vmgfqwkf#afdjmmjmd#le#wkf#?,gju=\\t?,gju=\\t?,gju=\\tfpwbaojpknfmw#le#wkf#?,gju=?,gju=?,gju=?,g ujftslqwxnjm.kfjdkw9\\t?p`qjsw#pq`>!kwws9,,lswjlm=?lswjlm#ubovf>lewfm#qfefqqfg#wl#bp#,lswjlm=\\t?lswjlm#ubov?\\\"GL@WZSF#kwno=\\t?\\\"..XJmwfqmbwjlmbo#Bjqslqw=\\t?b#kqfe>!kwws9,,ttt?,b=?b#kqfe>!kwws9,,t\\fTL\\fT^\\fTE\\fT^\\fUh\\fT{\\fTN\\roI\\ro|\\roL\\ro{\\roO\\rov\\rot\\nAO\\x05Gx\\bTA\\nzk#+\\x0BUm\\x05Gx*\\fHD\\fHS\\fH\\\\\\fIa\\fHJ\\fIk\\fHZ\\fHM\\fHR\\fHe\\fHD\\fH^\\fIg\\fHM\\fHy\\fIa\\fH[\\fIk\\fHH\\fIa\\fH\\\\\\fHp\\fHR\\fHD\\fHy\\fHR\\fH\\\\\\fIl\\fHT\\fHn\\fH@\\fHn\\fHK\\fHS\\fHH\\fHT\\fIa\\fHI\\fHR\\fHF\\fHD\\fHR\\fHT\\fIa\\fHY\\fIl\\fHy\\fHR\\fH\\\\\\fHT\\fHn\\fHT\\fIa\\fHy\\fH\\\\\\fHO\\fHT\\fHR\\fHB\\fH{\\fIa\\fH\\\\\\fIl\\fHv\\fHS\\fHs\\fIa\\fHL\\fIg\\fHn\\fHY\\fHS\\fHp\\fIa\\fHr\\fHR\\fHD\\fHi\\fHB\\fIk\\fH\\\\\\fHS\\fHy\\fHR\\fHY\\fHS\\fHA\\fHS\\fHD\\fIa\\fHD\\fH{\\fHR\\fHM\\fHS\\fHC\\fHR\\fHm\\fHy\\fIa\\fHC\\fIg\\fHn\\fHy\\fHS\\fHT\\fIm\\fH\\\\\\fHy\\fIa\\fH[\\fHR\\fHF\\fHU\\fIm\\fHm\\fHv\\fHH\\fIl\\fHF\\fIa\\fH\\\\\\fH@\\fHn\\fHK\\fHD\\fHs\\fHS\\fHF\\fIa\\fHF\\fHO\\fIl\\fHy\\fIa\\fH\\\\\\fHS\\fHy\\fIk\\fHs\\fHF\\fIa\\fH\\\\\\fHR\\fH\\\\\\fHn\\fHA\\fHF\\fIa\\fH\\\\\\fHR\\fHF\\fIa\\fHH\\fHB\\fHR\\fH^\\fHS\\fHy\\fIg\\fHn\\fH\\\\\\fHG\\fHP\\fIa\\fHH\\fHR\\fH\\\\\\fHD\\fHS\\fH\\\\\\fIa\\fHB\\fHR\\fHO\\fH^\\fHS\\fHB\\fHS\\fHs\\fIk\\fHMgfp`qjswjlm!#`lmwfmw>!gl`vnfmw-ol`bwjlm-sqlw-dfwFofnfmwpAzWbdMbnf+?\\\"GL@WZSF#kwno=\\t?kwno#?nfwb#`kbqpfw>!vwe.;!=9vqo!#`lmwfmw>!kwws9,,-`pp!#qfo>!pwzofpkffw!pwzof#wzsf>!wf{w,`pp!=wzsf>!wf{w,`pp!#kqfe>!t0-lqd,2:::,{kwno!#{nowzsf>!wf{w,ibubp`qjsw!#nfwklg>!dfw!#b`wjlm>!ojmh#qfo>!pwzofpkffw!##>#gl`vnfmw-dfwFofnfmwwzsf>!jnbdf,{.j`lm!#,=`foosbggjmd>!3!#`foops-`pp!#wzsf>!wf{w,`pp!#?,b=?,oj=?oj=?b#kqfe>!!#tjgwk>!2!#kfjdkw>!2!!=?b#kqfe>!kwws9,,ttt-pwzof>!gjpsobz9mlmf8!=bowfqmbwf!#wzsf>!bssoj.,,T0@,,GWG#[KWNO#2-3#foopsb`jmd>!3!#`foosbg#wzsf>!kjggfm!#ubovf>!,b=%maps8?psbm#qlof>!p\\t?jmsvw#wzsf>!kjggfm!#obmdvbdf>!IbubP`qjsw!##gl`vnfmw-dfwFofnfmwpAd>!3!#`foopsb`jmd>!3!#zsf>!wf{w,`pp!#nfgjb>!wzsf>$wf{w,ibubp`qjsw$tjwk#wkf#f{`fswjlm#le#zsf>!wf{w,`pp!#qfo>!pw#kfjdkw>!2!#tjgwk>!2!#>$(fm`lgfVQJ@lnslmfmw+?ojmh#qfo>!bowfqmbwf!#\\talgz/#wq/#jmsvw/#wf{wnfwb#mbnf>!qlalwp!#`lmnfwklg>!slpw!#b`wjlm>!=\\t?b#kqfe>!kwws9,,ttt-`pp!#qfo>!pwzofpkffw!#?,gju=?,gju=?gju#`obppobmdvbdf>!ibubp`qjsw!=bqjb.kjggfm>!wqvf!=.[?qjsw!#wzsf>!wf{w,ibubpo>38~*+*8\\t+evm`wjlm+*xab`hdqlvmg.jnbdf9#vqo+,b=?,oj=?oj=?b#kqfe>!k\\n\\n?oj=?b#kqfe>!kwws9,,bwlq!#bqjb.kjggfm>!wqv=#?b#kqfe>!kwws9,,ttt-obmdvbdf>!ibubp`qjsw!#,lswjlm=\\t?lswjlm#ubovf,gju=?,gju=?gju#`obpp>qbwlq!#bqjb.kjggfm>!wqf>+mft#Gbwf*-dfwWjnf+*slqwvdv/Fp#+gl#Aqbpjo*<R=l<_<\\\\<Q<T<[<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n=`<R<]=l<\\\\<[<R<^<\\\\<Q<T=c=l<Y<_<T=m=n=l<\\\\=j<T<T<^<R<[<P<R<Z<Q<R=m=n<T<R<]=c<[<\\\\=n<Y<W=`<Q<\\\\?\\\"GL@WZSF#kwno#SVAOJ@#!mw.Wzsf!#`lmwfmw>!wf{w,?nfwb#kwws.frvju>!@lmwfqbmpjwjlmbo,,FM!#!kwws9?kwno#{nomp>!kwws9,,ttt.,,T0@,,GWG#[KWNO#2-3#WGWG,{kwno2.wqbmpjwjlmbo,,ttt-t0-lqd,WQ,{kwno2,sf#>#$wf{w,ibubp`qjsw$8?nfwb#mbnf>!gfp`qjswjlmsbqfmwMlgf-jmpfqwAfelqf?jmsvw#wzsf>!kjggfm!#mbip!#wzsf>!wf{w,ibubp`qj+gl`vnfmw*-qfbgz+evm`wjp`qjsw#wzsf>!wf{w,ibubpjnbdf!#`lmwfmw>!kwws9,,VB.@lnsbwjaof!#`lmwfmw>wno8#`kbqpfw>vwe.;!#,=\\tojmh#qfo>!pklqw`vw#j`lm?ojmh#qfo>!pwzofpkffw!#?,p`qjsw=\\t?p`qjsw#wzsf>>#gl`vnfmw-`qfbwfFofnfm?b#wbqdfw>!\\\\aobmh!#kqfe>#gl`vnfmw-dfwFofnfmwpAjmsvw#wzsf>!wf{w!#mbnf>b-wzsf#>#$wf{w,ibubp`qjmsvw#wzsf>!kjggfm!#mbnfkwno8#`kbqpfw>vwe.;!#,=gwg!=\\t?kwno#{nomp>!kwws.,,T0@,,GWG#KWNO#7-32#WfmwpAzWbdMbnf+$p`qjsw$*jmsvw#wzsf>!kjggfm!#mbn?p`qjsw#wzsf>!wf{w,ibubp!#pwzof>!gjpsobz9mlmf8!=gl`vnfmw-dfwFofnfmwAzJg+>gl`vnfmw-`qfbwfFofnfmw+$#wzsf>$wf{w,ibubp`qjsw$jmsvw#wzsf>!wf{w!#mbnf>!g-dfwFofnfmwpAzWbdMbnf+pmj`bo!#kqfe>!kwws9,,ttt-@,,GWG#KWNO#7-32#Wqbmpjw?pwzof#wzsf>!wf{w,`pp!=\\t\\t?pwzof#wzsf>!wf{w,`pp!=jlmbo-gwg!=\\t?kwno#{nomp>kwws.frvju>!@lmwfmw.Wzsfgjmd>!3!#`foopsb`jmd>!3!kwno8#`kbqpfw>vwe.;!#,=\\t#pwzof>!gjpsobz9mlmf8!=??oj=?b#kqfe>!kwws9,,ttt-#wzsf>$wf{w,ibubp`qjsw$=<X<Y=c=n<Y<W=`<Q<R=m=n<T=m<R<R=n<^<Y=n=m=n<^<T<T<S=l<R<T<[<^<R<X=m=n<^<\\\\<]<Y<[<R<S<\\\\=m<Q<R=m=n<T\\fHF\\fIm\\fHT\\fIa\\fHH\\fHS\\fHy\\fHR\\fHy\\fHR\\fHn\\fH{\\fIa\\fH\\\\\\fIk\\fHT\\fHe\\fHD\\fIa\\fHU\\fIg\\fHn\\fHD\\fIk\\fHY\\fHS\\fHK\\fHR\\fHD\\fHT\\fHA\\fHR\\fHG\\fHS\\fHy\\fIa\\fHT\\fHS\\fHn\\fH{\\fHT\\fIm\\fH\\\\\\fHy\\fIa\\fH[\\fHS\\fHH\\fHy\\fIe\\fHF\\fIl\\fH\\\\\\fHR\\fHk\\fHs\\fHY\\fHS\\fHp\\fIa\\fHr\\fHR\\fHF\\fHD\\fHy\\fHR\\fH\\\\\\fIa\\fH\\\\\\fHY\\fHR\\fHd\\fHT\\fHy\\fIa\\fH\\\\\\fHS\\fHC\\fHH\\fHR\", \"\\u06F7%\\u018C'T%\\x85'W%\\xD7%O%g%\\xA6&\\u0193%\\u01E5&>&*&'&^&\\x88\\u0178\\u0C3E&\\u01AD&\\u0192&)&^&%&'&\\x82&P&1&\\xB1&3&]&m&u&E&t&C&\\xCF&V&V&/&>&6&\\u0F76\\u177Co&p&@&E&M&P&x&@&F&e&\\xCC&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1\\u025E*\\u03EA\\u21F3&\\u1372&K&;&)&E&H&P&0&?&9&V&\\x81&-&v&a&,&E&)&?&=&'&'&B&\\u0D2E&\\u0503&\\u0316*&*8&%&%&&&%,)&\\x9A&>&\\x86&7&]&F&2&>&J&6&n&2&%&?&\\x8E&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%\\u053C\\x84(,(<&,&\\u03DA&\\u18C7&-&,(%&(&%&(\\u013B0&X&D&\\x81&j&'&J&(&.&B&3&Z&R&h&3&E&E&<\\xC6-\\u0360\\u1EF3&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&C\\u072C\\u2A25&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&\\u1E78\\xCC-&7&1&F&7&t&W&7&I&.&.&^&=\\u0F9C\\u19D3&8(>&/&/&\\u077B')'\\u1065')'%@/&0&%\\u043E\\u09C0*&*@&C\\u053D\\u05D4\\u0274\\u05EB4\\u0DD7\\u071A\\u04D16\\u0D84&/\\u0178\\u0303Z&*%\\u0246\\u03FF&\\u0134&1\\xA8\\u04B4\\u0174\", dictionarySizeBits, \"AAAAKKLLKKKKKJJIHHIHHGGFF\");\n  // typo:on\n  setData(dictionaryData, dictionarySizeBits);\n}\n\nclass InputStream {\n  data = new Int8Array(0);\n  offset = 0;\n  constructor (data: Int8Array) {\n    this.data = data;\n  }\n}\n\nfunction valueOf(x: number): string {\n  return x.toString();\n}\n\nfunction readInput(s: State, dst: Int8Array, offset: number, length: number): number {\n  if (s.input === null) {\n    return -1;\n  }\n  const src: InputStream = s.input;\n  const end: number = Math.min(src.offset + length, src.data.length);\n  const bytesRead: number = end - src.offset;\n  dst.set(src.data.subarray(src.offset, end), offset);\n  src.offset += bytesRead;\n  return bytesRead;\n}\nfunction closeInput(s: State): void {\n  s.input = new InputStream(new Int8Array(0));\n}\nfunction toUsAsciiBytes(src: string): Int8Array {\n  const n: number = src.length;\n  const result = new Int8Array(n);\n  for (let i = 0; i < n; ++i) {\n    result[i] = src.charCodeAt(i);\n  }\n  return result;\n}\nfunction toUtf8Runes(src: string): Int32Array {\n  const n: number = src.length;\n  const result = new Int32Array(n);\n  for (let i = 0; i < n; ++i) {\n    result[i] = src.charCodeAt(i);\n  }\n  return result;\n}\nfunction makeError(s: State, code: number): number {\n  if (code >= 0) {\n    return code;\n  }\n  if (s.runningState >= 0) {\n    s.runningState = code;\n  }\n  throw new Error(\"Brotli error code: \" + code);\n}\n\n/* GENERATED CODE END */\n\ntype ByteBuffer = Int8Array;\n\n/**\n * Decodes brotli stream.\n */\nexport function brotliDecode(\n    bytes: Int8Array, options?: BrotliDecodeOptions): Int8Array {\n  const s = new State();\n  s.input = new InputStream(bytes);\n  initState(s);\n  if (options) {\n    const customDictionary: Int8Array|null = options.customDictionary;\n    if (customDictionary) attachDictionaryChunk(s, customDictionary);\n  }\n  let totalOutput = 0;\n  const chunks: Int8Array[] = [];\n  while (true) {\n    const chunk = new Int8Array(16384);\n    chunks.push(chunk);\n    s.output = chunk;\n    s.outputOffset = 0;\n    s.outputLength = 16384;\n    s.outputUsed = 0;\n    decompress(s);\n    totalOutput += s.outputUsed;\n    if (s.outputUsed < 16384) break;\n  }\n  close(s);\n  closeInput(s);\n  const result = new Int8Array(totalOutput);\n  let offset = 0;\n  for (let i = 0; i < chunks.length; ++i) {\n    const chunk: Int8Array = chunks[i];\n    const end: number = Math.min(totalOutput, offset + 16384);\n    const len: number = end - offset;\n    if (len < 16384) {\n      result.set(chunk.subarray(0, len), offset);\n    } else {\n      result.set(chunk, offset);\n    }\n    offset += len;\n  }\n  return result;\n}\n"
  },
  {
    "path": "js/decode_synth_test.js",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\nimport {BrotliDecode} from \"./decode.js\";\n\n/**\n * NB: Use intermediate chunks to avoid \"Maximum call stack size exceeded\".\n *\n * @param {!Int8Array} bytes\n * @return {string}\n */\nfunction bytesToString(bytes) {\n  const kChunkSize = 4096;\n  if (bytes.length <= kChunkSize) {\n    return String.fromCharCode.apply(null, new Uint8Array(bytes));\n  }\n  const chunks = [];\n  for (let start = 0; start < bytes.length; start += kChunkSize) {\n    const end = Math.min(start + 4096, bytes.length);\n    chunks.push(bytesToString(bytes.slice(start, end)));\n  }\n  return chunks.join('');\n}\n\n/**\n * NB: String.prototype.repeat causes \"Maximum call stack size exceeded\".\n *\n * @param {number} count\n * @param {string} char\n * @return {string}\n */\nfunction times(count, char) {\n  return char.repeat(count);\n}\n\n/**\n * @param {!Array<number>} compressed\n * @param {boolean} expectSuccess\n * @param {string} expectedOutput\n */\nfunction checkSynth(compressed, expectSuccess, expectedOutput) {\n  let success = true;\n  let actual;\n  try {\n    actual = BrotliDecode(Int8Array.from(compressed));\n  } catch (ex) {\n    success = false;\n  }\n  expect(expectSuccess).toEqual(success);\n  if (expectSuccess) {\n    expect(expectedOutput).toEqual(bytesToString(actual));\n  }\n}\n\nconst allTests = {\n/* GENERATED CODE START */\n\ntestAllTransforms10() {\n  const compressed = [\n    0x1b, 0xfc, 0x05, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x13, 0x7c,\n    0x84, 0x26, 0xf8, 0x04, 0x10, 0x4c, 0xf0, 0x89, 0x38, 0x30, 0xc1, 0x27,\n    0x4e, 0xc1, 0x04, 0x9f, 0x64, 0x06, 0x26, 0xf8, 0x24, 0x3f, 0x34, 0xc1,\n    0x27, 0x7d, 0x82, 0x09, 0x3e, 0xe9, 0x16, 0x4d, 0xf0, 0xc9, 0xd2, 0xc0,\n    0x04, 0x9f, 0x0c, 0x8f, 0x4c, 0xf0, 0xc9, 0x06, 0xd1, 0x04, 0x9f, 0x6c,\n    0x92, 0x4d, 0xf0, 0xc9, 0x39, 0xc1, 0x04, 0x9f, 0xdc, 0x94, 0x4c, 0xf0,\n    0xc9, 0x69, 0xd1, 0x04, 0x9f, 0x3c, 0x98, 0x4d, 0xf0, 0x29, 0x9c, 0x81,\n    0x09, 0x3e, 0x45, 0x37, 0x31, 0xc1, 0xa7, 0x60, 0x47, 0x26, 0xf8, 0x14,\n    0xfa, 0xcc, 0x04, 0x9f, 0xc2, 0x20, 0x9a, 0xe0, 0x53, 0x48, 0x54, 0x13,\n    0x7c, 0x8a, 0x8f, 0x6c, 0x82, 0x4f, 0xb1, 0xd2, 0x4d, 0xf0, 0x29, 0x67,\n    0x82, 0x09, 0x3e, 0xe5, 0x4f, 0x31, 0xc1, 0xa7, 0x7c, 0x4a, 0x26, 0xf8,\n    0x94, 0x57, 0xcd, 0x04, 0x9f, 0x12, 0x2c, 0x9a, 0xe0, 0x53, 0xba, 0x55,\n    0x13, 0x7c, 0xca, 0xbf, 0x6c, 0x82, 0x4f, 0xb9, 0xd8, 0x4d, 0xf0, 0xa9,\n    0x30, 0x03, 0x13, 0x7c, 0x2a, 0xd2, 0xc2, 0x04, 0x9f, 0x4a, 0x36, 0x31,\n    0xc1, 0xa7, 0xca, 0x6d, 0x4c, 0xf0, 0xa9, 0x94, 0x23, 0x13, 0x7c, 0x2a,\n    0xeb, 0xca, 0x04, 0x9f, 0xea, 0x3c, 0x33, 0xc1, 0xa7, 0xb2, 0xef, 0x4c,\n    0xf0, 0xa9, 0xf8, 0x43, 0x13, 0x7c, 0xaa, 0x00, 0xd3, 0x04, 0x9f, 0x2a,\n    0x42, 0x35, 0xc1, 0xa7, 0xc2, 0x70, 0x4d, 0xf0, 0xa9, 0x52, 0x64, 0x13,\n    0x7c, 0x2a, 0x1a, 0xdb, 0x04, 0x9f, 0x6a, 0x48, 0x37, 0xc1, 0xa7, 0x92,\n    0xf2, 0x4d, 0xf0, 0xa9, 0xc3, 0x04, 0x13, 0x7c, 0xea, 0x32, 0xc3, 0x04,\n    0x9f, 0x7a, 0x4e, 0x31, 0xc1, 0xa7, 0x06, 0x74, 0x4c, 0xf0, 0xa9, 0x19,\n    0x25, 0x13, 0x7c, 0x6a, 0x4d, 0xcb, 0x04, 0x9f, 0x1a, 0x55, 0x33, 0xc1,\n    0xa7, 0x56, 0xf5, 0x4c, 0xf0, 0xa9, 0x5d, 0x45, 0x13, 0x7c, 0xea, 0x59,\n    0xd3, 0x04, 0x9f, 0xfa, 0x57, 0x35, 0xc1, 0xa7, 0x66, 0x76, 0x4d, 0xf0,\n    0xa9, 0x9f, 0x65, 0x13, 0x7c, 0x6a, 0x6f, 0xdb, 0x04, 0x9f, 0x9a, 0x5d,\n    0x37, 0xc1, 0xa7, 0x06, 0xf8, 0x4d, 0xf0, 0x69, 0x0c, 0x06, 0x26, 0xf8,\n    0x34, 0x08, 0x07, 0x13, 0x7c, 0x1a, 0x8b, 0x85, 0x09, 0x3e, 0x8d, 0xc8,\n    0xc3, 0x04, 0x9f, 0xe6, 0x65, 0x62, 0x82, 0x4f, 0xb3, 0x73, 0x31, 0xc1,\n    0xa7, 0x41, 0xda, 0x98, 0xe0, 0xd3, 0x54, 0x7d, 0x4c, 0xf0, 0x69, 0xc4,\n    0x46, 0x26, 0xf8, 0x34, 0x72, 0x27, 0x13, 0x7c, 0x1a, 0xc5, 0x95, 0x09,\n    0x3e, 0x8d, 0xe5, 0xcb, 0x04, 0x9f, 0x06, 0x75, 0x66, 0x82, 0x4f, 0x43,\n    0x7b, 0x33, 0xc1, 0xa7, 0x09, 0xde, 0x99, 0xe0, 0xd3, 0x34, 0xff, 0x4c,\n    0xf0, 0x69, 0xb2, 0x87, 0x26, 0xf8, 0x34, 0xe9, 0x47, 0x13, 0x7c, 0x9a,\n    0xfb, 0xa5, 0x09, 0x3e, 0x4d, 0x01, 0xd4, 0x04, 0x9f, 0x46, 0x82, 0x6a,\n    0x82, 0x4f, 0x03, 0x82, 0x35, 0xc1, 0xa7, 0x61, 0xe1, 0x9a, 0xe0, 0xd3,\n    0xe4, 0x80, 0x4d, 0xf0, 0x69, 0x8a, 0xc8, 0x26, 0xf8, 0x34, 0x52, 0x68,\n    0x13, 0x7c, 0x9a, 0x2f, 0xb6, 0x09, 0x3e, 0x8d, 0x1b, 0xdc, 0x04, 0x9f,\n    0x86, 0x8f, 0x6e, 0x82, 0x4f, 0xb3, 0x88, 0x37, 0xc1, 0xa7, 0xd9, 0xe4,\n    0x9b, 0xe0, 0xd3, 0x9e, 0x02, 0x4c, 0xf0, 0x69, 0x6d, 0x09, 0x26, 0xf8,\n    0xb4, 0xc3, 0x08, 0x13, 0x7c, 0x5a, 0x68, 0x86, 0x09, 0x3e, 0xad, 0x37,\n    0xc4, 0x04, 0x9f, 0x56, 0x9d, 0x62, 0x82, 0x4f, 0x9b, 0x8f, 0x31, 0xc1,\n    0xa7, 0x2d, 0xe8, 0x98, 0xe0, 0xd3, 0x4a, 0x84, 0x4c, 0xf0, 0x69, 0x3f,\n    0x4a, 0x26, 0xf8, 0xb4, 0x2c, 0x29, 0x13, 0x7c, 0xda, 0x9c, 0x96, 0x09,\n    0x3e, 0x2d, 0x52, 0xcc, 0x04, 0x9f, 0xb6, 0xaa, 0x66, 0x82, 0x4f, 0x2b,\n    0x96, 0x33, 0xc1, 0xa7, 0x7d, 0xeb, 0x99, 0xe0, 0xd3, 0xf6, 0x05, 0x4d,\n    0xf0, 0x69, 0x17, 0x8b, 0x26, 0xf8, 0xb4, 0x97, 0x49, 0x13, 0x7c, 0xda,\n    0xd1, 0xa6, 0x09, 0x3e, 0x2d, 0x6c, 0xd4, 0x04, 0x9f, 0xb6, 0xb7, 0x6a,\n    0x82, 0x4f, 0xab, 0x9c, 0x35, 0xc1, 0xa7, 0xc5, 0xee, 0x9a, 0xe0, 0xd3,\n    0x9a, 0x87, 0x4d, 0xf0, 0x69, 0xe9, 0xcb\n  ];\n  checkSynth(\n    /*\n     * // The stream consists of word \"time\" with all possible transforms.\n     * main_header\n     * metablock_header_easy: 1533, 1\n     * command_easy: 10, \"|\", 2 // = 0 << 10 + 1 + 1\n     * command_easy: 10, \"|\", 1037 // = 1 << 10 + 1 + 12\n     * command_easy: 10, \"|\", 2073 // = 2 << 10 + 1 + 24\n     * command_easy: 10, \"|\", 3110 // = 3 << 10 + 1 + 37\n     * command_easy: 10, \"|\", 4144 // = 4 << 10 + 1 + 47\n     * command_easy: 10, \"|\", 5180 // = 5 << 10 + 1 + 59\n     * command_easy: 10, \"|\", 6220 // = 6 << 10 + 1 + 75\n     * command_easy: 10, \"|\", 7256 // = 7 << 10 + 1 + 87\n     * command_easy: 10, \"|\", 8294 // = 8 << 10 + 1 + 101\n     * command_easy: 10, \"|\", 9333 // = 9 << 10 + 1 + 116\n     * command_easy: 10, \"|\", 10368 // = 10 << 10 + 1 + 127\n     * command_easy: 10, \"|\", 11408 // = 11 << 10 + 1 + 143\n     * command_easy: 10, \"|\", 12441 // = 12 << 10 + 1 + 152\n     * command_easy: 10, \"|\", 13475 // = 13 << 10 + 1 + 162\n     * command_easy: 10, \"|\", 14513 // = 14 << 10 + 1 + 176\n     * command_easy: 10, \"|\", 15550 // = 15 << 10 + 1 + 189\n     * command_easy: 10, \"|\", 16587 // = 16 << 10 + 1 + 202\n     * command_easy: 10, \"|\", 17626 // = 17 << 10 + 1 + 217\n     * command_easy: 10, \"|\", 18665 // = 18 << 10 + 1 + 232\n     * command_easy: 10, \"|\", 19703 // = 19 << 10 + 1 + 246\n     * command_easy: 10, \"|\", 20739 // = 20 << 10 + 1 + 258\n     * command_easy: 10, \"|\", 21775 // = 21 << 10 + 1 + 270\n     * command_easy: 10, \"|\", 22812 // = 22 << 10 + 1 + 283\n     * command_easy: 10, \"|\", 23848 // = 23 << 10 + 1 + 295\n     * command_easy: 10, \"|\", 24880 // = 24 << 10 + 1 + 303\n     * command_easy: 10, \"|\", 25916 // = 25 << 10 + 1 + 315\n     * command_easy: 10, \"|\", 26956 // = 26 << 10 + 1 + 331\n     * command_easy: 10, \"|\", 27988 // = 27 << 10 + 1 + 339\n     * command_easy: 10, \"|\", 29021 // = 28 << 10 + 1 + 348\n     * command_easy: 10, \"|\", 30059 // = 29 << 10 + 1 + 362\n     * command_easy: 10, \"|\", 31100 // = 30 << 10 + 1 + 379\n     * command_easy: 10, \"|\", 32136 // = 31 << 10 + 1 + 391\n     * command_easy: 10, \"|\", 33173 // = 32 << 10 + 1 + 404\n     * command_easy: 10, \"|\", 34209 // = 33 << 10 + 1 + 416\n     * command_easy: 10, \"|\", 35247 // = 34 << 10 + 1 + 430\n     * command_easy: 10, \"|\", 36278 // = 35 << 10 + 1 + 437\n     * command_easy: 10, \"|\", 37319 // = 36 << 10 + 1 + 454\n     * command_easy: 10, \"|\", 38355 // = 37 << 10 + 1 + 466\n     * command_easy: 10, \"|\", 39396 // = 38 << 10 + 1 + 483\n     * command_easy: 10, \"|\", 40435 // = 39 << 10 + 1 + 498\n     * command_easy: 10, \"|\", 41465 // = 40 << 10 + 1 + 504\n     * command_easy: 10, \"|\", 42494 // = 41 << 10 + 1 + 509\n     * command_easy: 10, \"|\", 43534 // = 42 << 10 + 1 + 525\n     * command_easy: 10, \"|\", 44565 // = 43 << 10 + 1 + 532\n     * command_easy: 10, \"|\", 45606 // = 44 << 10 + 1 + 549\n     * command_easy: 10, \"|\", 46641 // = 45 << 10 + 1 + 560\n     * command_easy: 10, \"|\", 47680 // = 46 << 10 + 1 + 575\n     * command_easy: 10, \"|\", 48719 // = 47 << 10 + 1 + 590\n     * command_easy: 10, \"|\", 49758 // = 48 << 10 + 1 + 605\n     * command_easy: 10, \"|\", 50786 // = 49 << 10 + 1 + 609\n     * command_easy: 10, \"|\", 51824 // = 50 << 10 + 1 + 623\n     * command_easy: 10, \"|\", 52861 // = 51 << 10 + 1 + 636\n     * command_easy: 10, \"|\", 53897 // = 52 << 10 + 1 + 648\n     * command_easy: 10, \"|\", 54935 // = 53 << 10 + 1 + 662\n     * command_easy: 10, \"|\", 55973 // = 54 << 10 + 1 + 676\n     * command_easy: 10, \"|\", 56999 // = 55 << 10 + 1 + 678\n     * command_easy: 10, \"|\", 58027 // = 56 << 10 + 1 + 682\n     * command_easy: 10, \"|\", 59056 // = 57 << 10 + 1 + 687\n     * command_easy: 10, \"|\", 60092 // = 58 << 10 + 1 + 699\n     * command_easy: 10, \"|\", 61129 // = 59 << 10 + 1 + 712\n     * command_easy: 10, \"|\", 62156 // = 60 << 10 + 1 + 715\n     * command_easy: 10, \"|\", 63195 // = 61 << 10 + 1 + 730\n     * command_easy: 10, \"|\", 64233 // = 62 << 10 + 1 + 744\n     * command_easy: 10, \"|\", 65277 // = 63 << 10 + 1 + 764\n     * command_easy: 10, \"|\", 66307 // = 64 << 10 + 1 + 770\n     * command_easy: 10, \"|\", 67333 // = 65 << 10 + 1 + 772\n     * command_easy: 10, \"|\", 68371 // = 66 << 10 + 1 + 786\n     * command_easy: 10, \"|\", 69407 // = 67 << 10 + 1 + 798\n     * command_easy: 10, \"|\", 70444 // = 68 << 10 + 1 + 811\n     * command_easy: 10, \"|\", 71480 // = 69 << 10 + 1 + 823\n     * command_easy: 10, \"|\", 72517 // = 70 << 10 + 1 + 836\n     * command_easy: 10, \"|\", 73554 // = 71 << 10 + 1 + 849\n     * command_easy: 10, \"|\", 74591 // = 72 << 10 + 1 + 862\n     * command_easy: 10, \"|\", 75631 // = 73 << 10 + 1 + 878\n     * command_easy: 10, \"|\", 76679 // = 74 << 10 + 1 + 902\n     * command_easy: 10, \"|\", 77715 // = 75 << 10 + 1 + 914\n     * command_easy: 10, \"|\", 78757 // = 76 << 10 + 1 + 932\n     * command_easy: 10, \"|\", 79793 // = 77 << 10 + 1 + 944\n     * command_easy: 10, \"|\", 80830 // = 78 << 10 + 1 + 957\n     * command_easy: 10, \"|\", 81866 // = 79 << 10 + 1 + 969\n     * command_easy: 10, \"|\", 82902 // = 80 << 10 + 1 + 981\n     * command_easy: 10, \"|\", 83942 // = 81 << 10 + 1 + 997\n     * command_easy: 10, \"|\", 84980 // = 82 << 10 + 1 + 1011\n     * command_easy: 10, \"|\", 86018 // = 83 << 10 + 1 + 1025\n     * command_easy: 10, \"|\", 87055 // = 84 << 10 + 1 + 1038\n     * command_easy: 10, \"|\", 88093 // = 85 << 10 + 1 + 1052\n     * command_easy: 10, \"|\", 89129 // = 86 << 10 + 1 + 1064\n     * command_easy: 10, \"|\", 90166 // = 87 << 10 + 1 + 1077\n     * command_easy: 10, \"|\", 91202 // = 88 << 10 + 1 + 1089\n     * command_easy: 10, \"|\", 92239 // = 89 << 10 + 1 + 1102\n     * command_easy: 10, \"|\", 93276 // = 90 << 10 + 1 + 1115\n     * command_easy: 10, \"|\", 94315 // = 91 << 10 + 1 + 1130\n     * command_easy: 10, \"|\", 95353 // = 92 << 10 + 1 + 1144\n     * command_easy: 10, \"|\", 96392 // = 93 << 10 + 1 + 1159\n     * command_easy: 10, \"|\", 97432 // = 94 << 10 + 1 + 1175\n     * command_easy: 10, \"|\", 98468 // = 95 << 10 + 1 + 1187\n     * command_easy: 10, \"|\", 99507 // = 96 << 10 + 1 + 1202\n     * command_easy: 10, \"|\", 100544 // = 97 << 10 + 1 + 1215\n     * command_easy: 10, \"|\", 101581 // = 98 << 10 + 1 + 1228\n     * command_easy: 10, \"|\", 102619 // = 99 << 10 + 1 + 1242\n     * command_easy: 10, \"|\", 103655 // = 100 << 10 + 1 + 1254\n     * command_easy: 10, \"|\", 104694 // = 101 << 10 + 1 + 1269\n     * command_easy: 10, \"|\", 105730 // = 102 << 10 + 1 + 1281\n     * command_easy: 10, \"|\", 106767 // = 103 << 10 + 1 + 1294\n     * command_easy: 10, \"|\", 107804 // = 104 << 10 + 1 + 1307\n     * command_easy: 10, \"|\", 108841 // = 105 << 10 + 1 + 1320\n     * command_easy: 10, \"|\", 109878 // = 106 << 10 + 1 + 1333\n     * command_easy: 10, \"|\", 110917 // = 107 << 10 + 1 + 1348\n     * command_easy: 10, \"|\", 111954 // = 108 << 10 + 1 + 1361\n     * command_easy: 10, \"|\", 112991 // = 109 << 10 + 1 + 1374\n     * command_easy: 10, \"|\", 114028 // = 110 << 10 + 1 + 1387\n     * command_easy: 10, \"|\", 115066 // = 111 << 10 + 1 + 1401\n     * command_easy: 10, \"|\", 116104 // = 112 << 10 + 1 + 1415\n     * command_easy: 10, \"|\", 117140 // = 113 << 10 + 1 + 1427\n     * command_easy: 10, \"|\", 118176 // = 114 << 10 + 1 + 1439\n     * command_easy: 10, \"|\", 119213 // = 115 << 10 + 1 + 1452\n     * command_easy: 10, \"|\", 120250 // = 116 << 10 + 1 + 1465\n     * command_easy: 10, \"|\", 121287 // = 117 << 10 + 1 + 1478\n     * command_easy: 10, \"|\", 122325 // = 118 << 10 + 1 + 1492\n     * command_easy: 10, \"|\", 123363 // = 119 << 10 + 1 + 1506\n     * command_easy: 10, \"|\", 124401 // = 120 << 10 + 1 + 1520\n     */\n    compressed,\n    true,\n    // typo:off\n    '|categories|categories | categories |ategories|Categories |categories the '\n    + '| categories|s categories |categories of |Categories|categories and |teg'\n    + 'ories|categorie|, categories |categories, | Categories |categories in |c'\n    + 'ategories to |e categories |categories\"|categories.|categories\">|categor'\n    + 'ies\\n|categor|categories]|categories for |egories|categori|categories a '\n    + '|categories that | Categories|categories. |.categories| categories, |gor'\n    + 'ies|categories with |categories\\'|categories from |categories by |ories|'\n    + 'ries| the categories|catego|categories. The |CATEGORIES|categories on |c'\n    + 'ategories as |categories is |cat|categorieing |categories\\n\\t|categories'\n    + ':| categories. |categoriesed |s|ies|cate|categories(|Categories, |ca|cat'\n    + 'egories at |categoriesly | the categories of |categ|c| Categories, |Cate'\n    + 'gories\"|.categories(|CATEGORIES |Categories\">|categories=\"| categories.|'\n    + '.com/categories| the categories of the |Categories\\'|categories. This |c'\n    + 'ategories,|.categories |Categories(|Categories.|categories not | categor'\n    + 'ies=\"|categorieser | CATEGORIES |categoriesal | CATEGORIES|categories='\n    + '\\'|CATEGORIES\"|Categories. | categories(|categoriesful | Categories. |ca'\n    + 'tegoriesive |categoriesless |CATEGORIES\\'|categoriesest | Categories.|CA'\n    + 'TEGORIES\">| categories=\\'|Categories,|categoriesize |CATEGORIES.|'\n    + '\\xc2\\xa0categories| categories,|Categories=\"|CATEGORIES=\"|categoriesous '\n    + '|CATEGORIES, |Categories=\\'| Categories,| CATEGORIES=\"| CATEGORIES, |CAT'\n    + 'EGORIES,|CATEGORIES(|CATEGORIES. | CATEGORIES.|CATEGORIES=\\'| CATEGORIES'\n    + '. | Categories=\"| CATEGORIES=\\'| Categories=\\''\n    // typo:on\n  );\n},\n\ntestAllTransforms4() {\n  const compressed = [\n    0x1b, 0x40, 0x03, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x51, 0x3e,\n    0x42, 0x51, 0x3e, 0x81, 0x02, 0x51, 0x3e, 0x11, 0x04, 0xa2, 0x7c, 0xe2,\n    0x0b, 0x44, 0xf9, 0x24, 0x1b, 0x10, 0xe5, 0x93, 0x84, 0x50, 0x94, 0x4f,\n    0xba, 0x02, 0x51, 0x3e, 0x69, 0x0c, 0x45, 0xf9, 0x64, 0x39, 0x20, 0xca,\n    0x27, 0x13, 0x22, 0x51, 0x3e, 0xd9, 0x11, 0x8a, 0xf2, 0xc9, 0xa2, 0x58,\n    0x94, 0x4f, 0x4e, 0x05, 0xa2, 0x7c, 0x72, 0x2c, 0x12, 0xe5, 0x93, 0x83,\n    0xa1, 0x28, 0x9f, 0xfc, 0x8c, 0x45, 0xf9, 0x14, 0x6e, 0x40, 0x94, 0x4f,\n    0x71, 0x47, 0x44, 0xf9, 0x14, 0x80, 0x48, 0x94, 0x4f, 0x81, 0xc8, 0x44,\n    0xf9, 0x14, 0x8e, 0x50, 0x94, 0x4f, 0x41, 0x49, 0x45, 0xf9, 0x14, 0x9b,\n    0x58, 0x94, 0x4f, 0x11, 0xca, 0x45, 0xf9, 0x94, 0xa3, 0x40, 0x94, 0x4f,\n    0x99, 0x4a, 0x44, 0xf9, 0x94, 0xb3, 0x48, 0x94, 0x4f, 0x59, 0xcb, 0x44,\n    0xf9, 0x94, 0xb8, 0x50, 0x94, 0x4f, 0x09, 0x4c, 0x45, 0xf9, 0x94, 0xcb,\n    0x58, 0x94, 0x4f, 0x19, 0xcd, 0x45, 0xf9, 0x54, 0xd8, 0x80, 0x28, 0x9f,\n    0xca, 0x9b, 0x10, 0xe5, 0x53, 0x99, 0x23, 0xa2, 0x7c, 0xaa, 0x73, 0x46,\n    0x94, 0x4f, 0x25, 0x0f, 0x89, 0xf2, 0xa9, 0xf0, 0x29, 0x51, 0x3e, 0xd5,\n    0x40, 0x26, 0xca, 0xa7, 0x62, 0xe8, 0x44, 0xf9, 0x54, 0x0d, 0xa1, 0x28,\n    0x9f, 0xca, 0xa1, 0x14, 0xe5, 0x53, 0x61, 0xa4, 0xa2, 0x7c, 0xaa, 0x8c,\n    0x56, 0x94, 0x4f, 0x45, 0x12, 0x8b, 0xf2, 0xa9, 0x52, 0x6a, 0x51, 0x3e,\n    0x95, 0x4c, 0x2e, 0xca, 0xa7, 0xda, 0xe9, 0x45, 0xf9, 0xd4, 0x44, 0x81,\n    0x28, 0x9f, 0xba, 0xa8, 0x10, 0xe5, 0x53, 0x37, 0x25, 0xa2, 0x7c, 0x6a,\n    0xaa, 0x46, 0x94, 0x4f, 0xad, 0x15, 0x89, 0xf2, 0xa9, 0xc5, 0x2a, 0x51,\n    0x3e, 0xb5, 0x5a, 0x26, 0xca, 0xa7, 0x5e, 0xeb, 0x44, 0xf9, 0xd4, 0x6c,\n    0xa1, 0x28, 0x9f, 0xba, 0xad, 0x14, 0xe5, 0x53, 0xcf, 0xa5, 0xa2, 0x7c,\n    0x6a, 0xbd, 0x56, 0x94, 0x4f, 0xbd, 0x17, 0x8b, 0xf2, 0xa9, 0x09, 0x6b,\n    0x51, 0x3e, 0x35, 0x63, 0x2e, 0xca, 0xa7, 0xd6, 0xec, 0x45, 0xf9, 0x34,\n    0x9b, 0x01, 0x51, 0x3e, 0x0d, 0x67, 0x41, 0x94, 0x4f, 0x43, 0x9a, 0x10,\n    0xe5, 0xd3, 0xa8, 0x36, 0x44, 0xf9, 0x34, 0xb1, 0x11, 0x51, 0x3e, 0xcd,\n    0x6d, 0x45, 0x94, 0x4f, 0xe3, 0x9b, 0x11, 0xe5, 0xd3, 0x14, 0x77, 0x44,\n    0xf9, 0x34, 0xcc, 0x21, 0x51, 0x3e, 0x8d, 0x75, 0x49, 0x94, 0x4f, 0x83,\n    0x9e, 0x12, 0xe5, 0xd3, 0xb8, 0xb7, 0x44, 0xf9, 0x34, 0xfa, 0x31, 0x51,\n    0x3e, 0x0d, 0x80, 0x4d, 0x94, 0x4f, 0x73, 0xa0, 0x13, 0xe5, 0xd3, 0x34,\n    0xf8, 0x44, 0xf9, 0x34, 0x13, 0x42, 0x51, 0x3e, 0x4d, 0x87, 0x51, 0x94,\n    0x4f, 0x53, 0xa2, 0x14, 0xe5, 0xd3, 0xb4, 0x38, 0x45, 0xf9, 0x34, 0x34,\n    0x52, 0x51, 0x3e, 0x0d, 0x8f, 0x55, 0x94, 0x4f, 0x23, 0xa4, 0x15, 0xe5,\n    0xd3, 0x24, 0x79, 0x45, 0xf9, 0x34, 0x4f, 0x62, 0x51, 0x3e, 0x8d, 0x95,\n    0x59, 0x94, 0x4f, 0xd3, 0xa5, 0x16, 0xe5, 0xd3, 0x98, 0xb9, 0x45, 0xf9,\n    0x34, 0x6e, 0x72, 0x51, 0x3e, 0xcd, 0x9d, 0x5d, 0x94, 0x4f, 0x13, 0xa8,\n    0x17, 0xe5, 0xd3, 0x1c, 0xfa, 0x45, 0xf9, 0xb4, 0x90, 0x02, 0x51, 0x3e,\n    0xed, 0xa5, 0x41, 0x94, 0x4f, 0xeb, 0xa9, 0x10, 0xe5, 0xd3, 0x9a, 0x3a,\n    0x44, 0xf9, 0xb4, 0xac, 0x12, 0x51, 0x3e, 0x6d, 0xad, 0x45, 0x94, 0x4f,\n    0xbb, 0xab, 0x11, 0xe5, 0xd3, 0x0a, 0x7b, 0x44, 0xf9, 0xb4, 0xc9, 0x22,\n    0x51, 0x3e, 0x2d, 0xb4, 0x49, 0x94, 0x4f, 0x7b, 0xad, 0x12, 0xe5, 0xd3,\n    0x82, 0xbb, 0x44, 0xf9, 0xb4, 0xe7, 0x32, 0x51, 0x3e, 0xad, 0xbb, 0x4d,\n    0x94, 0x4f, 0x5b, 0xaf, 0x13, 0xe5, 0xd3, 0xf6, 0xfb, 0x44, 0xf9, 0xb4,\n    0x05, 0x43, 0x51, 0x3e, 0xed, 0xc2, 0x51, 0x94, 0x4f, 0x1b, 0xb1, 0x14,\n    0xe5, 0xd3, 0x62, 0x3c, 0x45, 0xf9, 0xb4, 0x1f, 0x53, 0x51, 0x3e, 0xad,\n    0xc9, 0x55, 0x94, 0x4f, 0xeb, 0xb2, 0x15, 0xe5, 0xd3, 0xda, 0x7c, 0x45,\n    0xf9, 0xb4, 0x3e, 0x63\n  ];\n  checkSynth(\n    /*\n     * // The stream consists of word \"time\" with all possible transforms.\n     * main_header\n     * metablock_header_easy: 833, 1\n     * command_easy: 4, \"|\", 2 // = 0 << 10 + 1 + 1\n     * command_easy: 4, \"|\", 1031 // = 1 << 10 + 1 + 6\n     * command_easy: 4, \"|\", 2061 // = 2 << 10 + 1 + 12\n     * command_easy: 4, \"|\", 3092 // = 3 << 10 + 1 + 19\n     * command_easy: 4, \"|\", 4120 // = 4 << 10 + 1 + 23\n     * command_easy: 4, \"|\", 5150 // = 5 << 10 + 1 + 29\n     * command_easy: 4, \"|\", 6184 // = 6 << 10 + 1 + 39\n     * command_easy: 4, \"|\", 7214 // = 7 << 10 + 1 + 45\n     * command_easy: 4, \"|\", 8246 // = 8 << 10 + 1 + 53\n     * command_easy: 4, \"|\", 9279 // = 9 << 10 + 1 + 62\n     * command_easy: 4, \"|\", 10308 // = 10 << 10 + 1 + 67\n     * command_easy: 4, \"|\", 11342 // = 11 << 10 + 1 + 77\n     * command_easy: 4, \"|\", 12369 // = 12 << 10 + 1 + 80\n     * command_easy: 4, \"|\", 13397 // = 13 << 10 + 1 + 84\n     * command_easy: 4, \"|\", 14429 // = 14 << 10 + 1 + 92\n     * command_easy: 4, \"|\", 15460 // = 15 << 10 + 1 + 99\n     * command_easy: 4, \"|\", 16491 // = 16 << 10 + 1 + 106\n     * command_easy: 4, \"|\", 17524 // = 17 << 10 + 1 + 115\n     * command_easy: 4, \"|\", 18557 // = 18 << 10 + 1 + 124\n     * command_easy: 4, \"|\", 19589 // = 19 << 10 + 1 + 132\n     * command_easy: 4, \"|\", 20619 // = 20 << 10 + 1 + 138\n     * command_easy: 4, \"|\", 21649 // = 21 << 10 + 1 + 144\n     * command_easy: 4, \"|\", 22680 // = 22 << 10 + 1 + 151\n     * command_easy: 4, \"|\", 23710 // = 23 << 10 + 1 + 157\n     * command_easy: 4, \"|\", 24736 // = 24 << 10 + 1 + 159\n     * command_easy: 4, \"|\", 25766 // = 25 << 10 + 1 + 165\n     * command_easy: 4, \"|\", 26800 // = 26 << 10 + 1 + 175\n     * command_easy: 4, \"|\", 27826 // = 27 << 10 + 1 + 177\n     * command_easy: 4, \"|\", 28853 // = 28 << 10 + 1 + 180\n     * command_easy: 4, \"|\", 29885 // = 29 << 10 + 1 + 188\n     * command_easy: 4, \"|\", 30920 // = 30 << 10 + 1 + 199\n     * command_easy: 4, \"|\", 31950 // = 31 << 10 + 1 + 205\n     * command_easy: 4, \"|\", 32981 // = 32 << 10 + 1 + 212\n     * command_easy: 4, \"|\", 34011 // = 33 << 10 + 1 + 218\n     * command_easy: 4, \"|\", 35043 // = 34 << 10 + 1 + 226\n     * command_easy: 4, \"|\", 36068 // = 35 << 10 + 1 + 227\n     * command_easy: 4, \"|\", 37103 // = 36 << 10 + 1 + 238\n     * command_easy: 4, \"|\", 38133 // = 37 << 10 + 1 + 244\n     * command_easy: 4, \"|\", 39168 // = 38 << 10 + 1 + 255\n     * command_easy: 4, \"|\", 40201 // = 39 << 10 + 1 + 264\n     * command_easy: 4, \"|\", 41226 // = 40 << 10 + 1 + 265\n     * command_easy: 4, \"|\", 42251 // = 41 << 10 + 1 + 266\n     * command_easy: 4, \"|\", 43285 // = 42 << 10 + 1 + 276\n     * command_easy: 4, \"|\", 44310 // = 43 << 10 + 1 + 277\n     * command_easy: 4, \"|\", 45345 // = 44 << 10 + 1 + 288\n     * command_easy: 4, \"|\", 46374 // = 45 << 10 + 1 + 293\n     * command_easy: 4, \"|\", 47407 // = 46 << 10 + 1 + 302\n     * command_easy: 4, \"|\", 48440 // = 47 << 10 + 1 + 311\n     * command_easy: 4, \"|\", 49473 // = 48 << 10 + 1 + 320\n     * command_easy: 4, \"|\", 50498 // = 49 << 10 + 1 + 321\n     * command_easy: 4, \"|\", 51530 // = 50 << 10 + 1 + 329\n     * command_easy: 4, \"|\", 52561 // = 51 << 10 + 1 + 336\n     * command_easy: 4, \"|\", 53591 // = 52 << 10 + 1 + 342\n     * command_easy: 4, \"|\", 54623 // = 53 << 10 + 1 + 350\n     * command_easy: 4, \"|\", 55655 // = 54 << 10 + 1 + 358\n     * command_easy: 4, \"|\", 56680 // = 55 << 10 + 1 + 359\n     * command_easy: 4, \"|\", 57705 // = 56 << 10 + 1 + 360\n     * command_easy: 4, \"|\", 58730 // = 57 << 10 + 1 + 361\n     * command_easy: 4, \"|\", 59760 // = 58 << 10 + 1 + 367\n     * command_easy: 4, \"|\", 60791 // = 59 << 10 + 1 + 374\n     * command_easy: 4, \"|\", 61816 // = 60 << 10 + 1 + 375\n     * command_easy: 4, \"|\", 62849 // = 61 << 10 + 1 + 384\n     * command_easy: 4, \"|\", 63881 // = 62 << 10 + 1 + 392\n     * command_easy: 4, \"|\", 64919 // = 63 << 10 + 1 + 406\n     * command_easy: 4, \"|\", 65944 // = 64 << 10 + 1 + 407\n     * command_easy: 4, \"|\", 66969 // = 65 << 10 + 1 + 408\n     * command_easy: 4, \"|\", 68001 // = 66 << 10 + 1 + 416\n     * command_easy: 4, \"|\", 69031 // = 67 << 10 + 1 + 422\n     * command_easy: 4, \"|\", 70062 // = 68 << 10 + 1 + 429\n     * command_easy: 4, \"|\", 71092 // = 69 << 10 + 1 + 435\n     * command_easy: 4, \"|\", 72123 // = 70 << 10 + 1 + 442\n     * command_easy: 4, \"|\", 73154 // = 71 << 10 + 1 + 449\n     * command_easy: 4, \"|\", 74185 // = 72 << 10 + 1 + 456\n     * command_easy: 4, \"|\", 75219 // = 73 << 10 + 1 + 466\n     * command_easy: 4, \"|\", 76261 // = 74 << 10 + 1 + 484\n     * command_easy: 4, \"|\", 77291 // = 75 << 10 + 1 + 490\n     * command_easy: 4, \"|\", 78327 // = 76 << 10 + 1 + 502\n     * command_easy: 4, \"|\", 79357 // = 77 << 10 + 1 + 508\n     * command_easy: 4, \"|\", 80388 // = 78 << 10 + 1 + 515\n     * command_easy: 4, \"|\", 81418 // = 79 << 10 + 1 + 521\n     * command_easy: 4, \"|\", 82448 // = 80 << 10 + 1 + 527\n     * command_easy: 4, \"|\", 83482 // = 81 << 10 + 1 + 537\n     * command_easy: 4, \"|\", 84514 // = 82 << 10 + 1 + 545\n     * command_easy: 4, \"|\", 85546 // = 83 << 10 + 1 + 553\n     * command_easy: 4, \"|\", 86577 // = 84 << 10 + 1 + 560\n     * command_easy: 4, \"|\", 87609 // = 85 << 10 + 1 + 568\n     * command_easy: 4, \"|\", 88639 // = 86 << 10 + 1 + 574\n     * command_easy: 4, \"|\", 89670 // = 87 << 10 + 1 + 581\n     * command_easy: 4, \"|\", 90700 // = 88 << 10 + 1 + 587\n     * command_easy: 4, \"|\", 91731 // = 89 << 10 + 1 + 594\n     * command_easy: 4, \"|\", 92762 // = 90 << 10 + 1 + 601\n     * command_easy: 4, \"|\", 93795 // = 91 << 10 + 1 + 610\n     * command_easy: 4, \"|\", 94827 // = 92 << 10 + 1 + 618\n     * command_easy: 4, \"|\", 95860 // = 93 << 10 + 1 + 627\n     * command_easy: 4, \"|\", 96894 // = 94 << 10 + 1 + 637\n     * command_easy: 4, \"|\", 97924 // = 95 << 10 + 1 + 643\n     * command_easy: 4, \"|\", 98957 // = 96 << 10 + 1 + 652\n     * command_easy: 4, \"|\", 99988 // = 97 << 10 + 1 + 659\n     * command_easy: 4, \"|\", 101019 // = 98 << 10 + 1 + 666\n     * command_easy: 4, \"|\", 102051 // = 99 << 10 + 1 + 674\n     * command_easy: 4, \"|\", 103081 // = 100 << 10 + 1 + 680\n     * command_easy: 4, \"|\", 104114 // = 101 << 10 + 1 + 689\n     * command_easy: 4, \"|\", 105144 // = 102 << 10 + 1 + 695\n     * command_easy: 4, \"|\", 106175 // = 103 << 10 + 1 + 702\n     * command_easy: 4, \"|\", 107206 // = 104 << 10 + 1 + 709\n     * command_easy: 4, \"|\", 108237 // = 105 << 10 + 1 + 716\n     * command_easy: 4, \"|\", 109268 // = 106 << 10 + 1 + 723\n     * command_easy: 4, \"|\", 110301 // = 107 << 10 + 1 + 732\n     * command_easy: 4, \"|\", 111332 // = 108 << 10 + 1 + 739\n     * command_easy: 4, \"|\", 112363 // = 109 << 10 + 1 + 746\n     * command_easy: 4, \"|\", 113394 // = 110 << 10 + 1 + 753\n     * command_easy: 4, \"|\", 114426 // = 111 << 10 + 1 + 761\n     * command_easy: 4, \"|\", 115458 // = 112 << 10 + 1 + 769\n     * command_easy: 4, \"|\", 116488 // = 113 << 10 + 1 + 775\n     * command_easy: 4, \"|\", 117518 // = 114 << 10 + 1 + 781\n     * command_easy: 4, \"|\", 118549 // = 115 << 10 + 1 + 788\n     * command_easy: 4, \"|\", 119580 // = 116 << 10 + 1 + 795\n     * command_easy: 4, \"|\", 120611 // = 117 << 10 + 1 + 802\n     * command_easy: 4, \"|\", 121643 // = 118 << 10 + 1 + 810\n     * command_easy: 4, \"|\", 122675 // = 119 << 10 + 1 + 818\n     * command_easy: 4, \"|\", 123707 // = 120 << 10 + 1 + 826\n     */\n    compressed,\n    true,\n    '|time|time | time |ime|Time |time the | time|s time |time of |Time|time an'\n    + 'd |me|tim|, time |time, | Time |time in |time to |e time |time\"|time.|ti'\n    + 'me\">|time\\n|t|time]|time for |e|ti|time a |time that | Time|time. |.time'\n    + '| time, ||time with |time\\'|time from |time by ||| the time||time. The |'\n    + 'TIME|time on |time as |time is ||timing |time\\n\\t|time:| time. |timeed |'\n    + '|||time(|Time, ||time at |timely | the time of ||| Time, |Time\"|.time(|T'\n    + 'IME |Time\">|time=\"| time.|.com/time| the time of the |Time\\'|time. This '\n    + '|time,|.time |Time(|Time.|time not | time=\"|timeer | TIME |timeal | TIME'\n    + '|time=\\'|TIME\"|Time. | time(|timeful | Time. |timeive |timeless |TIME'\n    + '\\'|timeest | Time.|TIME\">| time=\\'|Time,|timeize |TIME.|\\xc2\\xa0time| ti'\n    + 'me,|Time=\"|TIME=\"|timeous |TIME, |Time=\\'| Time,| TIME=\"| TIME, |TIME,|T'\n    + 'IME(|TIME. | TIME.|TIME=\\'| TIME. | Time=\"| TIME=\\'| Time=\\''\n  );\n},\n\ntestBaseDictWord() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02\n  ];\n  checkSynth(\n    /*\n     * // The stream consists of a base dictionary word.\n     * main_header\n     * metablock_header_easy: 4, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 1\n     */\n    compressed,\n    true,\n    'time'\n  );\n},\n\ntestBaseDictWordFinishBlockOnRingbufferWrap() {\n  const compressed = [\n    0x1b, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x58, 0x32,\n    0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,\n    0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,\n    0x34, 0x34, 0x34, 0xd4, 0x00\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 32, 1 // 32 = minimal ringbuffer size\n     * command_easy: 4, \"aaaaaaaaaaaaaaaaaaaaaaaaaaaa\", 29\n     */\n    compressed,\n    true,\n    times(28, 'a')\n    + 'time'\n  );\n},\n\ntestBaseDictWordTooLong() {\n  const compressed = [\n    0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02\n  ];\n  checkSynth(\n    /*\n     * // Has an unmodified dictionary word that goes over the end of the\n     * // meta-block. Same as BaseDictWord, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 1, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 1\n     */\n    compressed,\n    false,\n    ''\n  );\n},\n\ntestBlockCountMessage() {\n  const compressed = [\n    0x1b, 0x0b, 0x00, 0x11, 0x01, 0x8c, 0xc1, 0xc5, 0x0d, 0x08, 0x00, 0x22,\n    0x65, 0xe1, 0xfc, 0xfd, 0x22, 0x2c, 0xc4, 0x00, 0x00, 0x38, 0xd8, 0x32,\n    0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x04, 0x10, 0x42, 0x00, 0x00,\n    0x00\n  ];\n  checkSynth(\n    /*\n     * // Same as BlockSwitchMessage but also uses 0-bit block-type commands.\n     * main_header\n     * metablock_header_begin: 1, 0, 12, 0\n     * // two literal block types\n     * vlq_blocktypes: 2\n     * huffman_simple: 1,1,4, 1  // literal blocktype prefix code\n     * huffman_fixed: 26  // literal blockcount prefix code\n     * blockcount_easy: 2  // 2 a's\n     * // one ins/copy and dist block type\n     * vlq_blocktypes: 1\n     * vlq_blocktypes: 1\n     * ndirect: 0, 0\n     * // two MSB6 literal context modes\n     * bits: \"00\", \"00\"\n     * // two literal prefix codes\n     * vlq_blocktypes: 2\n     * // literal context map\n     * vlq_rlemax: 5\n     * huffman_simple: 0,3,7, 5,0,6  // context map RLE Huffman code\n     * // context map RLE: repeat 0 64 times, 1+5 64 times\n     * bits: \"01\", \"0\", \"11111\", \"11\", \"0\", \"11111\"\n     * bit: 1  // MTF enabled\n     * // one distance prefix code\n     * vlq_blocktypes: 1\n     * huffman_simple: 0,1,256, 97  // only a's\n     * huffman_simple: 0,1,256, 98  // only b's\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * // now comes the data\n     * command_inscopy_easy: 12, 0\n     * blockcount_easy: 2  // switch to other block type; 2 b's\n     * blockcount_easy: 5  // switch to other block type; 5 a's\n     * blockcount_easy: 1  // switch to other block type; 1 b\n     * blockcount_easy: 1  // switch to other block type; 1 a\n     * blockcount_easy: 1  // switch to other block type; 1 b\n     */\n    compressed,\n    true,\n    'aabbaaaaabab'\n  );\n},\n\ntestBlockSwitchMessage() {\n  const compressed = [\n    0x1b, 0x0b, 0x00, 0xd1, 0xe1, 0x01, 0xc6, 0xe0, 0xe2, 0x06, 0x04, 0x00,\n    0x91, 0xb2, 0x70, 0xfe, 0x7e, 0x11, 0x16, 0x62, 0x00, 0x00, 0x1c, 0x6c,\n    0x99, 0xc4, 0x00, 0x09, 0x00, 0x80, 0x3b, 0x6d, 0x02, 0x08, 0x82, 0x00,\n    0x00, 0x00\n  ];\n  checkSynth(\n    /*\n     * // Uses blocks with 1-symbol Huffman codes that take 0 bits, so that it\n     * // is the block-switch commands that encode the message rather than actual\n     * // literals.\n     * main_header\n     * metablock_header_begin: 1, 0, 12, 0\n     * // two literal block types\n     * vlq_blocktypes: 2\n     * huffman_simple: 1,4,4, 1,0,2,3  // literal blocktype prefix code\n     * huffman_fixed: 26  // literal blockcount prefix code\n     * blockcount_easy: 2  // 2 a's\n     * // one ins/copy and dist block type\n     * vlq_blocktypes: 1\n     * vlq_blocktypes: 1\n     * ndirect: 0, 0\n     * // two MSB6 literal context modes\n     * bits: \"00\", \"00\"\n     * // two literal prefix codes\n     * vlq_blocktypes: 2\n     * // literal context map\n     * vlq_rlemax: 5\n     * huffman_simple: 0,3,7, 5,0,6  // context map RLE Huffman code\n     * // context map RLE: repeat 0 64 times, 1+5 64 times\n     * bits: \"01\", \"0\", \"11111\", \"11\", \"0\", \"11111\"\n     * bit: 1  // MTF enabled\n     * // one distance prefix code\n     * vlq_blocktypes: 1\n     * huffman_simple: 0,1,256, 97  // only a's\n     * huffman_simple: 0,1,256, 98  // only b's\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * // now comes the data\n     * command_inscopy_easy: 12, 0\n     * bits: \"0\"; blockcount_easy: 2  // switch to other block type; 2 b's\n     * bits: \"0\"; blockcount_easy: 5  // switch to other block type; 5 a's\n     * bits: \"0\"; blockcount_easy: 1  // switch to other block type; 1 b\n     * bits: \"0\"; blockcount_easy: 1  // switch to other block type; 1 a\n     * bits: \"0\"; blockcount_easy: 1  // switch to other block type; 1 b\n     */\n    compressed,\n    true,\n    'aabbaaaaabab'\n  );\n},\n\ntestClClTreeDeficiency() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0x43, 0x01, 0xe0, 0x05, 0x88,\n    0x55, 0x90, 0x01, 0x00, 0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00,\n    0x77, 0xda, 0x28, 0x40, 0x23\n  ];\n  checkSynth(\n    /*\n     * // This test is a copy of TooManySymbolsRepeated, with changed clcl table.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,3,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"101\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1\n     * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 0, 0, 101100010\n     */\n    compressed,\n    false,\n    'aaab'\n  );\n},\n\ntestClClTreeExcess() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc3, 0x7b, 0x80, 0x58, 0x41,\n    0x06, 0x00, 0xe0, 0x60, 0xcb, 0x24, 0x06, 0x48, 0x00, 0x00, 0xdc, 0x69,\n    0xa3, 0x00, 0x8d, 0x00\n  ];\n  checkSynth(\n    /*\n     * // This test is a copy of ClClTreeDeficiency, with changed clcl table.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,1,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"1\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1\n     * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 0, 0, 101100010\n     */\n    compressed,\n    false,\n    'aaab'\n  );\n},\n\ntestComplexHuffmanCodeTwoSymbols() {\n  const compressed = [\n    0x1b, 0x01, 0x00, 0x00, 0x80, 0x03, 0xe0, 0xa2, 0x1a, 0x00, 0x00, 0x0e,\n    0xb6, 0x4c, 0x62, 0x80, 0x04, 0x00, 0xc0, 0x9d, 0x36, 0x12, 0x04\n  ];\n  checkSynth(\n    /*\n     * // This tests a complex Huffman code with only two symbols followed by a\n     * // tiny amount of content.\n     * main_header\n     * metablock_header_begin: 1, 0, 2, 0\n     * metablock_header_trivial_context\n     * // begin of literal Huffman tree. The tree has symbol length 1 for \"a\",\n     * // symbol length 1 for \"b\" and symbol length 0 for all others.\n     * hskip: 0\n     * clcl_ordered: 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n     * set_prefix_cl_rle: \"\", \"0\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"1\"\n     * cl_rle_rep_0: 97\n     * cl_rle: 1  // literal number 97, that is, the letter 'a'\n     * cl_rle: 1  // literal number 98, that is, the letter 'b'\n     * // end of literal Huffman tree\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 2, 0\n     * command_literal_bits: 0, 1  // a followed by b\n     */\n    compressed,\n    true,\n    'ab'\n  );\n},\n\ntestCompressedUncompressedShortCompressed() {\n  const compressed = [\n    0x8b, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x66, 0x6f,\n    0x1b, 0x0a, 0x50, 0x00, 0x10, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x31,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0,\n    0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x24, 0x00\n  ];\n  checkSynth(\n    /*\n     * main_header: 22\n     * metablock_header_easy: 1022, 0\n     * command_easy: 1021, \"a\", 1 // 1022 x \"a\"\n     * metablock_uncompressed: \"bbbbbb\"\n     * metablock_header_easy: 4, 1\n     * command_easy: 4, \"\", 1 // 6 + 4 = 10 x \"b\"\n     */\n    compressed,\n    true,\n    times(1022, 'a')\n    + times(10, 'b')\n  );\n},\n\ntestCompressedUncompressedShortCompressedSmallWindow() {\n  const compressed = [\n    0x21, 0xf4, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00,\n    0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x34, 0x7b,\n    0xdb, 0x50, 0x80, 0x02, 0x80, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x31,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0,\n    0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x24, 0x00\n  ];\n  checkSynth(\n    /*\n     * main_header: 10\n     * metablock_header_easy: 1022, 0\n     * command_easy: 1021, \"a\", 1 // 1022 x \"a\"\n     * metablock_uncompressed: \"bbbbbb\"\n     * metablock_header_easy: 4, 1\n     * command_easy: 4, \"\", 1 // 6 + 4 = 10 x \"b\"\n     */\n    compressed,\n    true,\n    times(1022, 'a')\n    + times(10, 'b')\n  );\n},\n\ntestCopyLengthTooLong() {\n  const compressed = [\n    0x1b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x11, 0x86,\n    0x02\n  ];\n  checkSynth(\n    /*\n     * // Has a copy length that goes over the end of the meta-block.\n     * // Same as OneCommand, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 2, 1\n     * command_easy: 2, \"a\", 1\n     */\n    compressed,\n    false,\n    ''\n  );\n},\n\ntestCopyTooLong() {\n  const compressed = [\n    0xa1, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00,\n    0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x34, 0xab,\n    0xdb, 0x50, 0x00\n  ];\n  checkSynth(\n    /*\n     * // Has a copy length that goes over the end of the meta-block,\n     * // with a ringbuffer wrap.\n     * main_header: 10\n     * metablock_header_easy: 2, 1\n     * command_easy: 1024, \"a\", 1\n     */\n    compressed,\n    false,\n    ''\n  );\n},\n\ntestCustomHuffmanCode() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc3, 0x3d, 0x80, 0x58, 0x82,\n    0x08, 0x00, 0xc0, 0xc1, 0x96, 0x49, 0x0c, 0x90, 0x00, 0x00, 0xb8, 0xd3,\n    0x46, 0x01, 0x1a, 0x01\n  ];\n  checkSynth(\n    /*\n     * // This tests a small hand crafted Huffman code followed by a tiny amount\n     * // of content. This tests if the bit reader detects the end correctly even\n     * // with tiny content after a larger Huffman tree encoding.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * // begin of literal Huffman tree. The tree has symbol length 1 for \"a\",\n     * // symbol length 8 for null, symbol length 9 for all others. The length 1\n     * // for a is chosen on purpose here, the others must be like that to\n     * // fulfill the requirement that sum of 32>>length is 32768.\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,2,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"10\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1  // literal number 97, that is, the letter 'a'\n     * cl_rle_rep: 9, 158\n     * // end of literal Huffman tree\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * // Here is how the code \"101100010\" for b is derived: remember that a has\n     * // symbol length 1, null has symbol length 8, the rest 9. So in the\n     * // canonical Huffman code, the code for \"a\" is \"0\", for null is\n     * // \"10000000\". The next value has \"100000010\" (cfr. the rules of canonical\n     * // prefix code). Counting upwards +95 from there, the value \"@\" (ASCII 96,\n     * // before \"a\") has \"101100001\", and so b, the next 9-bit symbol, has the\n     * // next binary value \"101100010\".\n     * command_literal_bits: 0, 0, 0, 101100010  // 3 a's followed by a b\n     */\n    compressed,\n    true,\n    'aaab'\n  );\n},\n\ntestDistanceLut() {\n  const compressed = [\n    0x8b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x99, 0x86,\n    0x46, 0xc6, 0x22, 0x14, 0x00, 0x00, 0x03, 0x00, 0x00, 0x1c, 0xa7, 0x6d,\n    0x00, 0x00, 0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x21, 0x91, 0x69, 0x62,\n    0x6a, 0x36\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 6, 0  // implicit ndirect: 0, 0\n     * command_easy: 3, \"abc\", 3  // Insert \"abc\", copy \"abc\"\n     * metablock_header_begin: 0, 0, 6, 0\n     * vlq_blocktypes: 1  // num litetal block types\n     * vlq_blocktypes: 1  // num command block types\n     * vlq_blocktypes: 1  // num distance block types\n     * ndirect: 3, 0\n     * bits: \"00\"  // literal context modes\n     * vlq_blocktypes: 1  // num literal Huffman trees\n     * // command has no context -> num trees == num block types\n     * vlq_blocktypes: 1  // num distance Huffman trees\n     * huffman_fixed: 256\n     * huffman_fixed: 704\n     * huffman_simple: 0,1,67, 18\n     * command_inscopy_easy: 3, 3  // Insert 3, copy 3\n     * command_literals_easy: \"def\"\n     * // 0-bit Huffman code : dcode = 18 -> third direct distance\n     * metablock_lastempty  // make sure that no extra distance bits are read\n     */\n    compressed,\n    true,\n    'abcabcdefdef'\n  );\n},\n\ntestEmpty() {\n  const compressed = [\n    0x3b\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_lastempty\n     */\n    compressed,\n    true,\n    ''\n  );\n},\n\ntestHelloWorld() {\n  const compressed = [\n    0x1b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x00, 0x59,\n    0x98, 0xda, 0xd8, 0xd8, 0x13, 0xb8, 0xdb, 0x3b, 0xd9, 0x98, 0x00\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_fixed: \"hello world\", 1\n     */\n    compressed,\n    true,\n    'hello world'\n  );\n},\n\ntestInsertTooLong() {\n  const compressed = [\n    0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x09, 0x86,\n    0x46\n  ];\n  checkSynth(\n    /*\n     * // Has an insert length that goes over the end of the meta-block.\n     * // Same as OneInsert, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 1, 1\n     * command_easy: 0, \"ab\"\n     */\n    compressed,\n    false,\n    ''\n  );\n},\n\ntestIntactDistanceRingBuffer0() {\n  const compressed = [\n    0x1b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0xa1, 0x80,\n    0x20, 0x00\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 11, 1\n     * command_inscopy_easy: 0, 7 // \"himself\" from dictionary\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // copy \"self\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    'himselfself'\n  );\n},\n\ntestIntactDistanceRingBuffer1() {\n  const compressed = [\n    0x1b, 0x09, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x21, 0xa0,\n    0x20, 0x00\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 10, 1\n     * command_inscopy_easy: 0, 6 // \"scroll\" from dictionary\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // copy \"roll\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    'scrollroll'\n  );\n},\n\ntestIntactDistanceRingBuffer2() {\n  const compressed = [\n    0x1b, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x80,\n    0x20, 0x50, 0x10, 0x24, 0x08, 0x06\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 16, 1\n     * command_inscopy_easy: 0, 4 // \"left\" from dictionary (index = 3 = 4 - 1)\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 11 - 5)\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 15 - 9)\n     * bits: \"010000\" // distance = 15 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"left\" from dictionary (index = 3 = 16 - 13)\n     * bits: \"110000\" // distance = 16 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    'leftdatadataleft'\n  );\n},\n\ntestIntactDistanceRingBufferNoDistanceValue0() {\n  const compressed = [\n    0x1b, 0x17, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x40, 0x82,\n    0x40, 0x41, 0x90, 0x20, 0x58, 0x18, 0x00\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 24, 1\n     * // cmd is {ins_extra, copy_extra, distance_code, ctx, ins_off, copy_off}\n     * // cmd.2 = {0x00, 0x00, 0, 0x02, 0x0000, 0x0004}\n     * // cmd.2 = no insert, copy length = 4, distance_code = 0 (last distance)\n     * command_short: 2 // \"left\" from dictionary (index = 3 = 4 - 1)\n     * // Check that RB is untouched after the first command...\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 11 - 5)\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 15 - 9)\n     * bits: \"010000\" // distance = 15 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"left\" from dictionary (index = 3 = 16 - 13)\n     * bits: \"110000\" // distance = 16 from RB; RB remains intact\n     * command_inscopy_easy: 0, 8 // copy \"leftleft\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    'leftdatadataleftleftleft'\n  );\n},\n\ntestIntactDistanceRingBufferNoDistanceValue1() {\n  const compressed = [\n    0x1b, 0x19, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0xc0, 0x82,\n    0x41, 0x41, 0x90, 0x20, 0x58, 0x18, 0x00\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 26, 1\n     * // cmd is {ins_extra, copy_extra, distance_code, ctx, ins_off, copy_off}\n     * // cmd.3 = {0x00, 0x00, 0, 0x03, 0x0000, 0x0005}\n     * // cmd.3 = no insert, copy length = 5, distance_code = 0 (last distance)\n     * command_short: 3 // \"world\" from dictionary (index = 3 = 4 - 1)\n     * // Check that RB is untouched after the first command...\n     * command_inscopy_easy: 0, 5 // \"white\" from dictionary (index = 5 = 11 - 6)\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"back\" from dictionary (index = 4 = 15 - 11)\n     * bits: \"010000\" // distance = 15 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"down\" from dictionary (index = 1 = 16 - 15)\n     * bits: \"110000\" // distance = 16 from RB; RB remains intact\n     * command_inscopy_easy: 0, 8 // copy \"downdown\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    'worldwhitebackdowndowndown'\n  );\n},\n\ntestInvalidNoLastMetablock() {\n  const compressed = [\n    0x0b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x00, 0x13,\n    0x59, 0x98, 0xda, 0xd8, 0xd8, 0x13, 0xb8, 0xdb, 0x3b, 0xd9, 0x98, 0xe8,\n    0x00\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_fixed: \\\"hello world\\\", 0\n     */\n    compressed,\n    false,\n    'hello world'\n  );\n},\n\ntestInvalidNoMetaBlocks() {\n  const compressed = [\n    0x0b\n  ];\n  checkSynth(\n    /*\n     * main_header\n     */\n    compressed,\n    false,\n    ''\n  );\n},\n\ntestInvalidTooFarDist() {\n  const compressed = [\n    0xa1, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00,\n    0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0xe8, 0xe0,\n    0x62, 0x6f, 0x4f, 0x60, 0x66, 0xe8, 0x44, 0x38, 0x0f, 0x09, 0x0d\n  ];\n  checkSynth(\n    /*\n     * main_header: 10\n     * metablock_header_begin: 1, 0, 10, 0\n     * metablock_header_trivial_context\n     * huffman_fixed: 256\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_easy: 2, \"too far!\", 1000000  // distance too far for 10 wbits\n     */\n    compressed,\n    false,\n    ''\n  );\n},\n\ntestInvalidTooLargeContextMap() {\n  const compressed = [\n    0x1b, 0x00, 0x00, 0xd1, 0xe1, 0x01, 0xc6, 0xe0, 0xe2, 0x06, 0x00, 0x00,\n    0x91, 0xb2, 0x70, 0xfe, 0xfb, 0x45, 0x58, 0x88, 0x01, 0x00, 0x70, 0xb0,\n    0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x01\n  ];\n  checkSynth(\n    /*\n     * // Has a repeat code a context map that makes the size too big -> invalid.\n     * main_header\n     * metablock_header_begin: 1, 0, 1, 0\n     * // two literal block types\n     * vlq_blocktypes: 2\n     * huffman_simple: 1,4,4, 1,0,2,3  // literal blocktype prefix code\n     * huffman_fixed: 26  // literal blockcount prefix code\n     * blockcount_easy: 1\n     * // one ins/copy and dist block type\n     * vlq_blocktypes: 1\n     * vlq_blocktypes: 1\n     * ndirect: 0, 0\n     * // two MSB6 literal context modes\n     * bits: \"00\", \"00\"\n     * // two literal prefix codes\n     * vlq_blocktypes: 2\n     * // literal context map\n     * vlq_rlemax: 5\n     * huffman_simple: 0,3,7, 5,0,6  // context map RLE Huffman code\n     * // Too long context map RLE: repeat 0 64 times, 1+5 65 times, that is 129\n     * // values which is 1 too much.\n     * bits: \"01\", \"0\", \"11111\", \"11\", \"11\", \"0\", \"11111\"\n     * bit: 1  // MTF enabled\n     * // one distance prefix code\n     * vlq_blocktypes: 1\n     * huffman_simple: 0,1,256, 97  // only a's\n     * huffman_simple: 0,1,256, 98  // only b's\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * // now comes the data\n     * command_inscopy_easy: 1, 0\n     */\n    compressed,\n    false,\n    'a'\n  );\n},\n\ntestInvalidTransformType() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x2d,\n    0x01, 0x19\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 4, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 123905 // = 121 << 10 + 1\n     */\n    compressed,\n    false,\n    ''\n  );\n},\n\ntestInvalidWindowBits9() {\n  const compressed = [\n    0x91, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00,\n    0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0xc8, 0x20,\n    0x32, 0xd4, 0x01\n  ];\n  checkSynth(\n    /*\n     * main_header: 9\n     * metablock_fixed: \\\"a\\\", 1\n     */\n    compressed,\n    false,\n    'a'\n  );\n},\n\ntestManyTinyMetablocks() {\n  const compressed = [\n    0x0b, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x34\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * repeat: 300\n     *   metablock_uncompressed: \"a\"\n     *   metablock_fixed: \"b\"\n     * end_repeat\n     * metablock_lastempty\n     */\n    compressed,\n    true,\n    times(300, 'ab')\n  );\n},\n\ntestNegativeDistance() {\n  const compressed = [\n    0x1b, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02,\n    0x01, 0x42, 0x01, 0x42, 0x01, 0x42, 0x01, 0x42, 0x01, 0x42, 0x01, 0x1c\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 16, 1\n     * command_inscopy_easy: 0, 4 // time\n     * command_dist_easy: 1\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2 // All rb items are 2 now\n     * command_inscopy_easy: 0, 2\n     * bits: \"011100\" // 15 -> distance = rb[idx + 2] - 3\n     */\n    compressed,\n    false,\n    'timemememememeXX'\n  );\n},\n\ntestNegativeRemainingLenBetweenMetablocks() {\n  const compressed = [\n    0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x09, 0x86,\n    0x46, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x91, 0x60,\n    0x68, 0x04\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 1, 0\n     * command_easy: 0, \"ab\"  // remaining length == -1 -> invalid stream\n     * metablock_header_easy: 2, 1\n     * command_easy: 0, \"ab\"\n     */\n    compressed,\n    false,\n    'abab'\n  );\n},\n\ntestOneCommand() {\n  const compressed = [\n    0x1b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x11, 0x86,\n    0x02\n  ];\n  checkSynth(\n    /*\n     * // The stream consists of one command with insert and copy.\n     * main_header\n     * metablock_header_easy: 3, 1\n     * command_easy: 2, \"a\", 1\n     */\n    compressed,\n    true,\n    'aaa'\n  );\n},\n\ntestOneInsert() {\n  const compressed = [\n    0x1b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x09, 0x86,\n    0x46\n  ];\n  checkSynth(\n    /*\n     * // The stream consists of one half command with insert only.\n     * main_header\n     * metablock_header_easy: 2, 1\n     * command_easy: 0, \"ab\"\n     */\n    compressed,\n    true,\n    'ab'\n  );\n},\n\ntestPeculiarWrap() {\n  const compressed = [\n    0x21, 0xfc, 0x1f, 0x00, 0x00, 0xa1, 0x12, 0x82, 0x04, 0x60, 0x1d, 0x00,\n    0xca, 0xfe, 0xba, 0xbe, 0xde, 0xad, 0xbe, 0xef, 0x21, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03,\n    0x24, 0x00, 0x00, 0xee, 0xb4, 0x91, 0x61, 0x68, 0x64, 0x0c\n  ];\n  checkSynth(\n    /*\n     * main_header: 10\n     * // See ZeroCostCommand\n     * metablock_header_begin: 0, 0, 2048, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 0,1,256, 42\n     * huffman_simple: 0,1,704, 130\n     * huffman_simple: 0,1,64, 0\n     * // Metadata block; at least 8 bytes long\n     * bits: \"0\", \"11\", \"0\", \"01\", \"00000111\"\n     * byte_boundary\n     * bits: \"11001010\", \"11111110\", \"10111010\", \"10111110\"\n     * bits: \"11011110\", \"10101101\", \"10111110\", \"11101111\"\n     * metablock_header_easy: 3, 1\n     * command_easy: 0, \"abc\", 0\n     */\n    compressed,\n    true,\n    times(512, 'left')\n    + 'abc'\n  );\n},\n\ntestSimplePrefix() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,\n    0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 1,4,256, 97,98,99,100  // ASCII codes for a, b, c, d\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 10, 110, 111  // a, b, c, d\n     */\n    compressed,\n    true,\n    'abcd'\n  );\n},\n\ntestSimplePrefixDuplicateSymbols() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc2, 0xc4, 0x02, 0x00, 0x70,\n    0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 1,4,256, 97,98,97,98  // ASCII codes for a, b, a, b\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 10, 110, 111  // a, b, a, b\n     */\n    compressed,\n    false,\n    'abab'\n  );\n},\n\ntestSimplePrefixOutOfRangeSymbols() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x4d, 0xff, 0xef,\n    0x7f, 0xff, 0xfc, 0x07, 0x00, 0xb8, 0xd3, 0x06\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_fixed: 256\n     * huffman_simple: 1,4,704, 1023,1022,1021,1020\n     * huffman_fixed: 64\n     */\n    compressed,\n    false,\n    ''\n  );\n},\n\ntestSimplePrefixPlusExtraData() {\n  if (pending) pending(); else return;\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,\n    0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d,\n    0x55, 0xaa\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 1,4,256, 97,98,99,100  // ASCII codes for a, b, c, d\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 10, 110, 111  // a, b, c, d\n     * byte_boundary\n     * bits: \"01010101\", \"10101010\"\n     */\n    compressed,\n    true,\n    'abcd'\n  );\n},\n\ntestStressReadDistanceExtraBits() {\n  const compressed = [\n    0x4f, 0xfe, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00,\n    0x00, 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0xf6,\n    0x69, 0xef, 0xff, 0x0c, 0x8d, 0x8c, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0xa8, 0xaa, 0xef, 0xab, 0xaa, 0x7f, 0x24, 0x16, 0x35, 0x8f, 0xac, 0x9e,\n    0x3d, 0xf7, 0xf3, 0xe3, 0x0a, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x78, 0x01,\n    0x08, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41,\n    0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,\n    0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32,\n    0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45,\n    0x46, 0x03\n  ];\n  checkSynth(\n    /*\n     * main_header: 24\n     * metablock_header_easy: 8388605, 0  // 2^23 - 3 = shortest 22-bit distance\n     * command_easy: 8388602, \"abc\", 1\n     * metablock_header_begin: 0, 0, 3, 0\n     * vlq_blocktypes: 1  // num litetal block types\n     * vlq_blocktypes: 1  // num command block types\n     * vlq_blocktypes: 1  // num distance block types\n     * ndirect: 0, 0\n     * bits: \"00\"  // literal context modes\n     * vlq_blocktypes: 1  // num literal Huffman trees\n     * // command has no context -> num trees == num block types\n     * vlq_blocktypes: 1  // num distance Huffman trees\n     * huffman_fixed: 256\n     * huffman_fixed: 704\n     * // Begin of distance Huffman tree. First 15 codes have lengths 1 to 15.\n     * // Symbol that corresponds to first half of 22-bit distance range is also\n     * // 15. All other symbols are 0.\n     * hskip: 0\n     * clcl_ordered: 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4, 5,5,5,5\n     * set_prefix_cl_rle: \"0000\", \"0001\", \"0010\", \"0011\", \\\n     *                    \"0100\", \"0101\", \"0110\", \"0111\", \\\n     *                    \"1000\", \"1001\", \"1010\", \"1011\", \\\n     *                    \"1100\", \"1101\", \\\n     *                    \"11100\", \"11101\", \"11110\", \"11111\"\n     * cl_rle: 1\n     * cl_rle: 2\n     * cl_rle: 3\n     * cl_rle: 4\n     * cl_rle: 5\n     * cl_rle: 6\n     * cl_rle: 7\n     * cl_rle: 8\n     * cl_rle: 9\n     * cl_rle: 10\n     * cl_rle: 11\n     * cl_rle: 12\n     * cl_rle: 13\n     * cl_rle: 14\n     * cl_rle: 15\n     * cl_rle_rep_0: 43\n     * cl_rle: 15  // literal number 97, that is, the letter 'a'\n     * // end of literal Huffman tree\n     * command_inscopy_easy: 0, 3  // Insert 0, copy 3\n     * // 15 bits of distance code plus 22 extra bits\n     * command_dist_bits: \"111111111111111\", \"0000000000000000000000\"\n     * metablock_uncompressed: \"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\"\n     * metablock_lastempty\n     */\n    compressed,\n    true,\n    'abc'\n    + times(8388602, 'c')\n    + 'abc'\n    + times(3, '0123456789ABCDEF')\n  );\n},\n\ntestTooManySymbolsRepeated() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc3, 0x3d, 0x80, 0x58, 0x82,\n    0x0c, 0x00, 0xc0, 0xc1, 0x96, 0x49, 0x0c, 0x90, 0x00, 0x00, 0xb8, 0xd3,\n    0x46, 0x01, 0x1a, 0x01\n  ];\n  checkSynth(\n    /*\n     * // This test is a copy of CustomHuffmanCode, with changed repeat count.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,2,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"10\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1\n     * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 0, 0, 101100010\n     */\n    compressed,\n    false,\n    'aaab'\n  );\n},\n\ntestTransformedDictWord() {\n  const compressed = [\n    0x1b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x09,\n    0x01, 0x01\n  ];\n  checkSynth(\n    /*\n     * // The stream consists of a transformed dictionary word.\n     * main_header\n     * metablock_header_easy: 9, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 5121  // 5 << 10 + 1\n     */\n    compressed,\n    true,\n    'time the '\n  );\n},\n\ntestTransformedDictWordTooLong() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x09,\n    0x01, 0x01\n  ];\n  checkSynth(\n    /*\n     * // Has a transformed dictionary word that goes over the end of the\n     * // meta-block, but the base dictionary word fits in the meta-block.\n     * // Same as TransformedDictWord, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 4, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 5121  // 5 << 10 + 1\n     */\n    compressed,\n    false,\n    ''\n  );\n},\n\ntestZeroCostCommand() {\n  const compressed = [\n    0xa1, 0xf8, 0x1f, 0x00, 0x00, 0xa1, 0x12, 0x82, 0x04, 0x00\n  ];\n  checkSynth(\n    /*\n     * main_header: 10\n     * metablock_header_begin: 1, 0, 1024, 0  // last, not empty, length, compressed\n     * metablock_header_trivial_context\n     * huffman_simple: 0,1,256, 42  // literal: any\n     * huffman_simple: 0,1,704, 130  // command: insert = 0, copy = 4, distance_code = -1\n     * huffman_simple: 0,1,64, 0 // distance: last\n     * // 256 0-bit commands with direct distances\n     */\n    compressed,\n    true,\n    times(256, 'left')\n  );\n},\n\ntestZeroCostLiterals() {\n  const compressed = [\n    0x9b, 0xff, 0xff, 0xff, 0x00, 0x20, 0x54, 0x00, 0x00, 0x38, 0xd8, 0x32,\n    0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0xcc, 0xe1, 0x7b, 0xfa, 0x0f\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 16777216, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 0,1,256, 42  // Single symbol alphabet\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 16777216, 0\n     * // 16777216 times 0 bits\n     */\n    compressed,\n    true,\n    times(16777216, '*')\n  );\n},\n\n/* GENERATED CODE END */\n};\n\ndescribe(\"DecodeSynthTest\", () => {\n  const testNames = Object.keys(allTests);\n  for (let i = 0; i < testNames.length; ++i) {\n    const key = testNames[i];\n    const testName = key.replace(/\\$/g, '');\n    it(testName, allTests[key]);\n  }\n});\n"
  },
  {
    "path": "js/decode_synth_test.ts",
    "content": "/* Copyright 2023 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\nimport {brotliDecode} from \"./decode\";\n\n/**\n * NB: Use intermediate chunks to avoid \"Maximum call stack size exceeded\".\n */\nfunction bytesToString(bytes: Int8Array): string {\n  const kChunkSize = 4096;\n  if (bytes.length <= kChunkSize) {\n    const chars = new Uint8Array(bytes) as unknown as number[];\n    return String.fromCharCode.apply(null, chars);\n  }\n  const chunks = [];\n  for (let start = 0; start < bytes.length; start += kChunkSize) {\n    const end = Math.min(start + 4096, bytes.length);\n    chunks.push(bytesToString(bytes.slice(start, end)));\n  }\n  return chunks.join('');\n}\n\n/**\n * NB: String.prototype.repeat causes \"Maximum call stack size exceeded\".\n */\nfunction times(count: number, char:string): string {\n  return char.repeat(count);\n}\n\nfunction checkSynth(\n    compressed: number[], expectSuccess: boolean, expectedOutput: string) {\n  let success = true;\n  let actual: Int8Array|null = null;\n  try {\n    actual = brotliDecode(Int8Array.from(compressed));\n  } catch (ex) {\n    success = false;\n  }\n  expect(expectSuccess).toEqual(success);\n  if (expectSuccess) {\n    expect(expectedOutput).toEqual(bytesToString(actual as Int8Array));\n  }\n}\n\nconst allTests: object = {\n/* GENERATED CODE START */\n\ntestAllTransforms10() {\n  const compressed = [\n    0x1b, 0xfc, 0x05, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x13, 0x7c,\n    0x84, 0x26, 0xf8, 0x04, 0x10, 0x4c, 0xf0, 0x89, 0x38, 0x30, 0xc1, 0x27,\n    0x4e, 0xc1, 0x04, 0x9f, 0x64, 0x06, 0x26, 0xf8, 0x24, 0x3f, 0x34, 0xc1,\n    0x27, 0x7d, 0x82, 0x09, 0x3e, 0xe9, 0x16, 0x4d, 0xf0, 0xc9, 0xd2, 0xc0,\n    0x04, 0x9f, 0x0c, 0x8f, 0x4c, 0xf0, 0xc9, 0x06, 0xd1, 0x04, 0x9f, 0x6c,\n    0x92, 0x4d, 0xf0, 0xc9, 0x39, 0xc1, 0x04, 0x9f, 0xdc, 0x94, 0x4c, 0xf0,\n    0xc9, 0x69, 0xd1, 0x04, 0x9f, 0x3c, 0x98, 0x4d, 0xf0, 0x29, 0x9c, 0x81,\n    0x09, 0x3e, 0x45, 0x37, 0x31, 0xc1, 0xa7, 0x60, 0x47, 0x26, 0xf8, 0x14,\n    0xfa, 0xcc, 0x04, 0x9f, 0xc2, 0x20, 0x9a, 0xe0, 0x53, 0x48, 0x54, 0x13,\n    0x7c, 0x8a, 0x8f, 0x6c, 0x82, 0x4f, 0xb1, 0xd2, 0x4d, 0xf0, 0x29, 0x67,\n    0x82, 0x09, 0x3e, 0xe5, 0x4f, 0x31, 0xc1, 0xa7, 0x7c, 0x4a, 0x26, 0xf8,\n    0x94, 0x57, 0xcd, 0x04, 0x9f, 0x12, 0x2c, 0x9a, 0xe0, 0x53, 0xba, 0x55,\n    0x13, 0x7c, 0xca, 0xbf, 0x6c, 0x82, 0x4f, 0xb9, 0xd8, 0x4d, 0xf0, 0xa9,\n    0x30, 0x03, 0x13, 0x7c, 0x2a, 0xd2, 0xc2, 0x04, 0x9f, 0x4a, 0x36, 0x31,\n    0xc1, 0xa7, 0xca, 0x6d, 0x4c, 0xf0, 0xa9, 0x94, 0x23, 0x13, 0x7c, 0x2a,\n    0xeb, 0xca, 0x04, 0x9f, 0xea, 0x3c, 0x33, 0xc1, 0xa7, 0xb2, 0xef, 0x4c,\n    0xf0, 0xa9, 0xf8, 0x43, 0x13, 0x7c, 0xaa, 0x00, 0xd3, 0x04, 0x9f, 0x2a,\n    0x42, 0x35, 0xc1, 0xa7, 0xc2, 0x70, 0x4d, 0xf0, 0xa9, 0x52, 0x64, 0x13,\n    0x7c, 0x2a, 0x1a, 0xdb, 0x04, 0x9f, 0x6a, 0x48, 0x37, 0xc1, 0xa7, 0x92,\n    0xf2, 0x4d, 0xf0, 0xa9, 0xc3, 0x04, 0x13, 0x7c, 0xea, 0x32, 0xc3, 0x04,\n    0x9f, 0x7a, 0x4e, 0x31, 0xc1, 0xa7, 0x06, 0x74, 0x4c, 0xf0, 0xa9, 0x19,\n    0x25, 0x13, 0x7c, 0x6a, 0x4d, 0xcb, 0x04, 0x9f, 0x1a, 0x55, 0x33, 0xc1,\n    0xa7, 0x56, 0xf5, 0x4c, 0xf0, 0xa9, 0x5d, 0x45, 0x13, 0x7c, 0xea, 0x59,\n    0xd3, 0x04, 0x9f, 0xfa, 0x57, 0x35, 0xc1, 0xa7, 0x66, 0x76, 0x4d, 0xf0,\n    0xa9, 0x9f, 0x65, 0x13, 0x7c, 0x6a, 0x6f, 0xdb, 0x04, 0x9f, 0x9a, 0x5d,\n    0x37, 0xc1, 0xa7, 0x06, 0xf8, 0x4d, 0xf0, 0x69, 0x0c, 0x06, 0x26, 0xf8,\n    0x34, 0x08, 0x07, 0x13, 0x7c, 0x1a, 0x8b, 0x85, 0x09, 0x3e, 0x8d, 0xc8,\n    0xc3, 0x04, 0x9f, 0xe6, 0x65, 0x62, 0x82, 0x4f, 0xb3, 0x73, 0x31, 0xc1,\n    0xa7, 0x41, 0xda, 0x98, 0xe0, 0xd3, 0x54, 0x7d, 0x4c, 0xf0, 0x69, 0xc4,\n    0x46, 0x26, 0xf8, 0x34, 0x72, 0x27, 0x13, 0x7c, 0x1a, 0xc5, 0x95, 0x09,\n    0x3e, 0x8d, 0xe5, 0xcb, 0x04, 0x9f, 0x06, 0x75, 0x66, 0x82, 0x4f, 0x43,\n    0x7b, 0x33, 0xc1, 0xa7, 0x09, 0xde, 0x99, 0xe0, 0xd3, 0x34, 0xff, 0x4c,\n    0xf0, 0x69, 0xb2, 0x87, 0x26, 0xf8, 0x34, 0xe9, 0x47, 0x13, 0x7c, 0x9a,\n    0xfb, 0xa5, 0x09, 0x3e, 0x4d, 0x01, 0xd4, 0x04, 0x9f, 0x46, 0x82, 0x6a,\n    0x82, 0x4f, 0x03, 0x82, 0x35, 0xc1, 0xa7, 0x61, 0xe1, 0x9a, 0xe0, 0xd3,\n    0xe4, 0x80, 0x4d, 0xf0, 0x69, 0x8a, 0xc8, 0x26, 0xf8, 0x34, 0x52, 0x68,\n    0x13, 0x7c, 0x9a, 0x2f, 0xb6, 0x09, 0x3e, 0x8d, 0x1b, 0xdc, 0x04, 0x9f,\n    0x86, 0x8f, 0x6e, 0x82, 0x4f, 0xb3, 0x88, 0x37, 0xc1, 0xa7, 0xd9, 0xe4,\n    0x9b, 0xe0, 0xd3, 0x9e, 0x02, 0x4c, 0xf0, 0x69, 0x6d, 0x09, 0x26, 0xf8,\n    0xb4, 0xc3, 0x08, 0x13, 0x7c, 0x5a, 0x68, 0x86, 0x09, 0x3e, 0xad, 0x37,\n    0xc4, 0x04, 0x9f, 0x56, 0x9d, 0x62, 0x82, 0x4f, 0x9b, 0x8f, 0x31, 0xc1,\n    0xa7, 0x2d, 0xe8, 0x98, 0xe0, 0xd3, 0x4a, 0x84, 0x4c, 0xf0, 0x69, 0x3f,\n    0x4a, 0x26, 0xf8, 0xb4, 0x2c, 0x29, 0x13, 0x7c, 0xda, 0x9c, 0x96, 0x09,\n    0x3e, 0x2d, 0x52, 0xcc, 0x04, 0x9f, 0xb6, 0xaa, 0x66, 0x82, 0x4f, 0x2b,\n    0x96, 0x33, 0xc1, 0xa7, 0x7d, 0xeb, 0x99, 0xe0, 0xd3, 0xf6, 0x05, 0x4d,\n    0xf0, 0x69, 0x17, 0x8b, 0x26, 0xf8, 0xb4, 0x97, 0x49, 0x13, 0x7c, 0xda,\n    0xd1, 0xa6, 0x09, 0x3e, 0x2d, 0x6c, 0xd4, 0x04, 0x9f, 0xb6, 0xb7, 0x6a,\n    0x82, 0x4f, 0xab, 0x9c, 0x35, 0xc1, 0xa7, 0xc5, 0xee, 0x9a, 0xe0, 0xd3,\n    0x9a, 0x87, 0x4d, 0xf0, 0x69, 0xe9, 0xcb\n  ];\n  checkSynth(\n    /*\n     * // The stream consists of word \"time\" with all possible transforms.\n     * main_header\n     * metablock_header_easy: 1533, 1\n     * command_easy: 10, \"|\", 2 // = 0 << 10 + 1 + 1\n     * command_easy: 10, \"|\", 1037 // = 1 << 10 + 1 + 12\n     * command_easy: 10, \"|\", 2073 // = 2 << 10 + 1 + 24\n     * command_easy: 10, \"|\", 3110 // = 3 << 10 + 1 + 37\n     * command_easy: 10, \"|\", 4144 // = 4 << 10 + 1 + 47\n     * command_easy: 10, \"|\", 5180 // = 5 << 10 + 1 + 59\n     * command_easy: 10, \"|\", 6220 // = 6 << 10 + 1 + 75\n     * command_easy: 10, \"|\", 7256 // = 7 << 10 + 1 + 87\n     * command_easy: 10, \"|\", 8294 // = 8 << 10 + 1 + 101\n     * command_easy: 10, \"|\", 9333 // = 9 << 10 + 1 + 116\n     * command_easy: 10, \"|\", 10368 // = 10 << 10 + 1 + 127\n     * command_easy: 10, \"|\", 11408 // = 11 << 10 + 1 + 143\n     * command_easy: 10, \"|\", 12441 // = 12 << 10 + 1 + 152\n     * command_easy: 10, \"|\", 13475 // = 13 << 10 + 1 + 162\n     * command_easy: 10, \"|\", 14513 // = 14 << 10 + 1 + 176\n     * command_easy: 10, \"|\", 15550 // = 15 << 10 + 1 + 189\n     * command_easy: 10, \"|\", 16587 // = 16 << 10 + 1 + 202\n     * command_easy: 10, \"|\", 17626 // = 17 << 10 + 1 + 217\n     * command_easy: 10, \"|\", 18665 // = 18 << 10 + 1 + 232\n     * command_easy: 10, \"|\", 19703 // = 19 << 10 + 1 + 246\n     * command_easy: 10, \"|\", 20739 // = 20 << 10 + 1 + 258\n     * command_easy: 10, \"|\", 21775 // = 21 << 10 + 1 + 270\n     * command_easy: 10, \"|\", 22812 // = 22 << 10 + 1 + 283\n     * command_easy: 10, \"|\", 23848 // = 23 << 10 + 1 + 295\n     * command_easy: 10, \"|\", 24880 // = 24 << 10 + 1 + 303\n     * command_easy: 10, \"|\", 25916 // = 25 << 10 + 1 + 315\n     * command_easy: 10, \"|\", 26956 // = 26 << 10 + 1 + 331\n     * command_easy: 10, \"|\", 27988 // = 27 << 10 + 1 + 339\n     * command_easy: 10, \"|\", 29021 // = 28 << 10 + 1 + 348\n     * command_easy: 10, \"|\", 30059 // = 29 << 10 + 1 + 362\n     * command_easy: 10, \"|\", 31100 // = 30 << 10 + 1 + 379\n     * command_easy: 10, \"|\", 32136 // = 31 << 10 + 1 + 391\n     * command_easy: 10, \"|\", 33173 // = 32 << 10 + 1 + 404\n     * command_easy: 10, \"|\", 34209 // = 33 << 10 + 1 + 416\n     * command_easy: 10, \"|\", 35247 // = 34 << 10 + 1 + 430\n     * command_easy: 10, \"|\", 36278 // = 35 << 10 + 1 + 437\n     * command_easy: 10, \"|\", 37319 // = 36 << 10 + 1 + 454\n     * command_easy: 10, \"|\", 38355 // = 37 << 10 + 1 + 466\n     * command_easy: 10, \"|\", 39396 // = 38 << 10 + 1 + 483\n     * command_easy: 10, \"|\", 40435 // = 39 << 10 + 1 + 498\n     * command_easy: 10, \"|\", 41465 // = 40 << 10 + 1 + 504\n     * command_easy: 10, \"|\", 42494 // = 41 << 10 + 1 + 509\n     * command_easy: 10, \"|\", 43534 // = 42 << 10 + 1 + 525\n     * command_easy: 10, \"|\", 44565 // = 43 << 10 + 1 + 532\n     * command_easy: 10, \"|\", 45606 // = 44 << 10 + 1 + 549\n     * command_easy: 10, \"|\", 46641 // = 45 << 10 + 1 + 560\n     * command_easy: 10, \"|\", 47680 // = 46 << 10 + 1 + 575\n     * command_easy: 10, \"|\", 48719 // = 47 << 10 + 1 + 590\n     * command_easy: 10, \"|\", 49758 // = 48 << 10 + 1 + 605\n     * command_easy: 10, \"|\", 50786 // = 49 << 10 + 1 + 609\n     * command_easy: 10, \"|\", 51824 // = 50 << 10 + 1 + 623\n     * command_easy: 10, \"|\", 52861 // = 51 << 10 + 1 + 636\n     * command_easy: 10, \"|\", 53897 // = 52 << 10 + 1 + 648\n     * command_easy: 10, \"|\", 54935 // = 53 << 10 + 1 + 662\n     * command_easy: 10, \"|\", 55973 // = 54 << 10 + 1 + 676\n     * command_easy: 10, \"|\", 56999 // = 55 << 10 + 1 + 678\n     * command_easy: 10, \"|\", 58027 // = 56 << 10 + 1 + 682\n     * command_easy: 10, \"|\", 59056 // = 57 << 10 + 1 + 687\n     * command_easy: 10, \"|\", 60092 // = 58 << 10 + 1 + 699\n     * command_easy: 10, \"|\", 61129 // = 59 << 10 + 1 + 712\n     * command_easy: 10, \"|\", 62156 // = 60 << 10 + 1 + 715\n     * command_easy: 10, \"|\", 63195 // = 61 << 10 + 1 + 730\n     * command_easy: 10, \"|\", 64233 // = 62 << 10 + 1 + 744\n     * command_easy: 10, \"|\", 65277 // = 63 << 10 + 1 + 764\n     * command_easy: 10, \"|\", 66307 // = 64 << 10 + 1 + 770\n     * command_easy: 10, \"|\", 67333 // = 65 << 10 + 1 + 772\n     * command_easy: 10, \"|\", 68371 // = 66 << 10 + 1 + 786\n     * command_easy: 10, \"|\", 69407 // = 67 << 10 + 1 + 798\n     * command_easy: 10, \"|\", 70444 // = 68 << 10 + 1 + 811\n     * command_easy: 10, \"|\", 71480 // = 69 << 10 + 1 + 823\n     * command_easy: 10, \"|\", 72517 // = 70 << 10 + 1 + 836\n     * command_easy: 10, \"|\", 73554 // = 71 << 10 + 1 + 849\n     * command_easy: 10, \"|\", 74591 // = 72 << 10 + 1 + 862\n     * command_easy: 10, \"|\", 75631 // = 73 << 10 + 1 + 878\n     * command_easy: 10, \"|\", 76679 // = 74 << 10 + 1 + 902\n     * command_easy: 10, \"|\", 77715 // = 75 << 10 + 1 + 914\n     * command_easy: 10, \"|\", 78757 // = 76 << 10 + 1 + 932\n     * command_easy: 10, \"|\", 79793 // = 77 << 10 + 1 + 944\n     * command_easy: 10, \"|\", 80830 // = 78 << 10 + 1 + 957\n     * command_easy: 10, \"|\", 81866 // = 79 << 10 + 1 + 969\n     * command_easy: 10, \"|\", 82902 // = 80 << 10 + 1 + 981\n     * command_easy: 10, \"|\", 83942 // = 81 << 10 + 1 + 997\n     * command_easy: 10, \"|\", 84980 // = 82 << 10 + 1 + 1011\n     * command_easy: 10, \"|\", 86018 // = 83 << 10 + 1 + 1025\n     * command_easy: 10, \"|\", 87055 // = 84 << 10 + 1 + 1038\n     * command_easy: 10, \"|\", 88093 // = 85 << 10 + 1 + 1052\n     * command_easy: 10, \"|\", 89129 // = 86 << 10 + 1 + 1064\n     * command_easy: 10, \"|\", 90166 // = 87 << 10 + 1 + 1077\n     * command_easy: 10, \"|\", 91202 // = 88 << 10 + 1 + 1089\n     * command_easy: 10, \"|\", 92239 // = 89 << 10 + 1 + 1102\n     * command_easy: 10, \"|\", 93276 // = 90 << 10 + 1 + 1115\n     * command_easy: 10, \"|\", 94315 // = 91 << 10 + 1 + 1130\n     * command_easy: 10, \"|\", 95353 // = 92 << 10 + 1 + 1144\n     * command_easy: 10, \"|\", 96392 // = 93 << 10 + 1 + 1159\n     * command_easy: 10, \"|\", 97432 // = 94 << 10 + 1 + 1175\n     * command_easy: 10, \"|\", 98468 // = 95 << 10 + 1 + 1187\n     * command_easy: 10, \"|\", 99507 // = 96 << 10 + 1 + 1202\n     * command_easy: 10, \"|\", 100544 // = 97 << 10 + 1 + 1215\n     * command_easy: 10, \"|\", 101581 // = 98 << 10 + 1 + 1228\n     * command_easy: 10, \"|\", 102619 // = 99 << 10 + 1 + 1242\n     * command_easy: 10, \"|\", 103655 // = 100 << 10 + 1 + 1254\n     * command_easy: 10, \"|\", 104694 // = 101 << 10 + 1 + 1269\n     * command_easy: 10, \"|\", 105730 // = 102 << 10 + 1 + 1281\n     * command_easy: 10, \"|\", 106767 // = 103 << 10 + 1 + 1294\n     * command_easy: 10, \"|\", 107804 // = 104 << 10 + 1 + 1307\n     * command_easy: 10, \"|\", 108841 // = 105 << 10 + 1 + 1320\n     * command_easy: 10, \"|\", 109878 // = 106 << 10 + 1 + 1333\n     * command_easy: 10, \"|\", 110917 // = 107 << 10 + 1 + 1348\n     * command_easy: 10, \"|\", 111954 // = 108 << 10 + 1 + 1361\n     * command_easy: 10, \"|\", 112991 // = 109 << 10 + 1 + 1374\n     * command_easy: 10, \"|\", 114028 // = 110 << 10 + 1 + 1387\n     * command_easy: 10, \"|\", 115066 // = 111 << 10 + 1 + 1401\n     * command_easy: 10, \"|\", 116104 // = 112 << 10 + 1 + 1415\n     * command_easy: 10, \"|\", 117140 // = 113 << 10 + 1 + 1427\n     * command_easy: 10, \"|\", 118176 // = 114 << 10 + 1 + 1439\n     * command_easy: 10, \"|\", 119213 // = 115 << 10 + 1 + 1452\n     * command_easy: 10, \"|\", 120250 // = 116 << 10 + 1 + 1465\n     * command_easy: 10, \"|\", 121287 // = 117 << 10 + 1 + 1478\n     * command_easy: 10, \"|\", 122325 // = 118 << 10 + 1 + 1492\n     * command_easy: 10, \"|\", 123363 // = 119 << 10 + 1 + 1506\n     * command_easy: 10, \"|\", 124401 // = 120 << 10 + 1 + 1520\n     */\n    compressed,\n    true,\n    // typo:off\n    '|categories|categories | categories |ategories|Categories |categories the '\n    + '| categories|s categories |categories of |Categories|categories and |teg'\n    + 'ories|categorie|, categories |categories, | Categories |categories in |c'\n    + 'ategories to |e categories |categories\"|categories.|categories\">|categor'\n    + 'ies\\n|categor|categories]|categories for |egories|categori|categories a '\n    + '|categories that | Categories|categories. |.categories| categories, |gor'\n    + 'ies|categories with |categories\\'|categories from |categories by |ories|'\n    + 'ries| the categories|catego|categories. The |CATEGORIES|categories on |c'\n    + 'ategories as |categories is |cat|categorieing |categories\\n\\t|categories'\n    + ':| categories. |categoriesed |s|ies|cate|categories(|Categories, |ca|cat'\n    + 'egories at |categoriesly | the categories of |categ|c| Categories, |Cate'\n    + 'gories\"|.categories(|CATEGORIES |Categories\">|categories=\"| categories.|'\n    + '.com/categories| the categories of the |Categories\\'|categories. This |c'\n    + 'ategories,|.categories |Categories(|Categories.|categories not | categor'\n    + 'ies=\"|categorieser | CATEGORIES |categoriesal | CATEGORIES|categories='\n    + '\\'|CATEGORIES\"|Categories. | categories(|categoriesful | Categories. |ca'\n    + 'tegoriesive |categoriesless |CATEGORIES\\'|categoriesest | Categories.|CA'\n    + 'TEGORIES\">| categories=\\'|Categories,|categoriesize |CATEGORIES.|'\n    + '\\xc2\\xa0categories| categories,|Categories=\"|CATEGORIES=\"|categoriesous '\n    + '|CATEGORIES, |Categories=\\'| Categories,| CATEGORIES=\"| CATEGORIES, |CAT'\n    + 'EGORIES,|CATEGORIES(|CATEGORIES. | CATEGORIES.|CATEGORIES=\\'| CATEGORIES'\n    + '. | Categories=\"| CATEGORIES=\\'| Categories=\\''\n    // typo:on\n  );\n},\n\ntestAllTransforms4() {\n  const compressed = [\n    0x1b, 0x40, 0x03, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x51, 0x3e,\n    0x42, 0x51, 0x3e, 0x81, 0x02, 0x51, 0x3e, 0x11, 0x04, 0xa2, 0x7c, 0xe2,\n    0x0b, 0x44, 0xf9, 0x24, 0x1b, 0x10, 0xe5, 0x93, 0x84, 0x50, 0x94, 0x4f,\n    0xba, 0x02, 0x51, 0x3e, 0x69, 0x0c, 0x45, 0xf9, 0x64, 0x39, 0x20, 0xca,\n    0x27, 0x13, 0x22, 0x51, 0x3e, 0xd9, 0x11, 0x8a, 0xf2, 0xc9, 0xa2, 0x58,\n    0x94, 0x4f, 0x4e, 0x05, 0xa2, 0x7c, 0x72, 0x2c, 0x12, 0xe5, 0x93, 0x83,\n    0xa1, 0x28, 0x9f, 0xfc, 0x8c, 0x45, 0xf9, 0x14, 0x6e, 0x40, 0x94, 0x4f,\n    0x71, 0x47, 0x44, 0xf9, 0x14, 0x80, 0x48, 0x94, 0x4f, 0x81, 0xc8, 0x44,\n    0xf9, 0x14, 0x8e, 0x50, 0x94, 0x4f, 0x41, 0x49, 0x45, 0xf9, 0x14, 0x9b,\n    0x58, 0x94, 0x4f, 0x11, 0xca, 0x45, 0xf9, 0x94, 0xa3, 0x40, 0x94, 0x4f,\n    0x99, 0x4a, 0x44, 0xf9, 0x94, 0xb3, 0x48, 0x94, 0x4f, 0x59, 0xcb, 0x44,\n    0xf9, 0x94, 0xb8, 0x50, 0x94, 0x4f, 0x09, 0x4c, 0x45, 0xf9, 0x94, 0xcb,\n    0x58, 0x94, 0x4f, 0x19, 0xcd, 0x45, 0xf9, 0x54, 0xd8, 0x80, 0x28, 0x9f,\n    0xca, 0x9b, 0x10, 0xe5, 0x53, 0x99, 0x23, 0xa2, 0x7c, 0xaa, 0x73, 0x46,\n    0x94, 0x4f, 0x25, 0x0f, 0x89, 0xf2, 0xa9, 0xf0, 0x29, 0x51, 0x3e, 0xd5,\n    0x40, 0x26, 0xca, 0xa7, 0x62, 0xe8, 0x44, 0xf9, 0x54, 0x0d, 0xa1, 0x28,\n    0x9f, 0xca, 0xa1, 0x14, 0xe5, 0x53, 0x61, 0xa4, 0xa2, 0x7c, 0xaa, 0x8c,\n    0x56, 0x94, 0x4f, 0x45, 0x12, 0x8b, 0xf2, 0xa9, 0x52, 0x6a, 0x51, 0x3e,\n    0x95, 0x4c, 0x2e, 0xca, 0xa7, 0xda, 0xe9, 0x45, 0xf9, 0xd4, 0x44, 0x81,\n    0x28, 0x9f, 0xba, 0xa8, 0x10, 0xe5, 0x53, 0x37, 0x25, 0xa2, 0x7c, 0x6a,\n    0xaa, 0x46, 0x94, 0x4f, 0xad, 0x15, 0x89, 0xf2, 0xa9, 0xc5, 0x2a, 0x51,\n    0x3e, 0xb5, 0x5a, 0x26, 0xca, 0xa7, 0x5e, 0xeb, 0x44, 0xf9, 0xd4, 0x6c,\n    0xa1, 0x28, 0x9f, 0xba, 0xad, 0x14, 0xe5, 0x53, 0xcf, 0xa5, 0xa2, 0x7c,\n    0x6a, 0xbd, 0x56, 0x94, 0x4f, 0xbd, 0x17, 0x8b, 0xf2, 0xa9, 0x09, 0x6b,\n    0x51, 0x3e, 0x35, 0x63, 0x2e, 0xca, 0xa7, 0xd6, 0xec, 0x45, 0xf9, 0x34,\n    0x9b, 0x01, 0x51, 0x3e, 0x0d, 0x67, 0x41, 0x94, 0x4f, 0x43, 0x9a, 0x10,\n    0xe5, 0xd3, 0xa8, 0x36, 0x44, 0xf9, 0x34, 0xb1, 0x11, 0x51, 0x3e, 0xcd,\n    0x6d, 0x45, 0x94, 0x4f, 0xe3, 0x9b, 0x11, 0xe5, 0xd3, 0x14, 0x77, 0x44,\n    0xf9, 0x34, 0xcc, 0x21, 0x51, 0x3e, 0x8d, 0x75, 0x49, 0x94, 0x4f, 0x83,\n    0x9e, 0x12, 0xe5, 0xd3, 0xb8, 0xb7, 0x44, 0xf9, 0x34, 0xfa, 0x31, 0x51,\n    0x3e, 0x0d, 0x80, 0x4d, 0x94, 0x4f, 0x73, 0xa0, 0x13, 0xe5, 0xd3, 0x34,\n    0xf8, 0x44, 0xf9, 0x34, 0x13, 0x42, 0x51, 0x3e, 0x4d, 0x87, 0x51, 0x94,\n    0x4f, 0x53, 0xa2, 0x14, 0xe5, 0xd3, 0xb4, 0x38, 0x45, 0xf9, 0x34, 0x34,\n    0x52, 0x51, 0x3e, 0x0d, 0x8f, 0x55, 0x94, 0x4f, 0x23, 0xa4, 0x15, 0xe5,\n    0xd3, 0x24, 0x79, 0x45, 0xf9, 0x34, 0x4f, 0x62, 0x51, 0x3e, 0x8d, 0x95,\n    0x59, 0x94, 0x4f, 0xd3, 0xa5, 0x16, 0xe5, 0xd3, 0x98, 0xb9, 0x45, 0xf9,\n    0x34, 0x6e, 0x72, 0x51, 0x3e, 0xcd, 0x9d, 0x5d, 0x94, 0x4f, 0x13, 0xa8,\n    0x17, 0xe5, 0xd3, 0x1c, 0xfa, 0x45, 0xf9, 0xb4, 0x90, 0x02, 0x51, 0x3e,\n    0xed, 0xa5, 0x41, 0x94, 0x4f, 0xeb, 0xa9, 0x10, 0xe5, 0xd3, 0x9a, 0x3a,\n    0x44, 0xf9, 0xb4, 0xac, 0x12, 0x51, 0x3e, 0x6d, 0xad, 0x45, 0x94, 0x4f,\n    0xbb, 0xab, 0x11, 0xe5, 0xd3, 0x0a, 0x7b, 0x44, 0xf9, 0xb4, 0xc9, 0x22,\n    0x51, 0x3e, 0x2d, 0xb4, 0x49, 0x94, 0x4f, 0x7b, 0xad, 0x12, 0xe5, 0xd3,\n    0x82, 0xbb, 0x44, 0xf9, 0xb4, 0xe7, 0x32, 0x51, 0x3e, 0xad, 0xbb, 0x4d,\n    0x94, 0x4f, 0x5b, 0xaf, 0x13, 0xe5, 0xd3, 0xf6, 0xfb, 0x44, 0xf9, 0xb4,\n    0x05, 0x43, 0x51, 0x3e, 0xed, 0xc2, 0x51, 0x94, 0x4f, 0x1b, 0xb1, 0x14,\n    0xe5, 0xd3, 0x62, 0x3c, 0x45, 0xf9, 0xb4, 0x1f, 0x53, 0x51, 0x3e, 0xad,\n    0xc9, 0x55, 0x94, 0x4f, 0xeb, 0xb2, 0x15, 0xe5, 0xd3, 0xda, 0x7c, 0x45,\n    0xf9, 0xb4, 0x3e, 0x63\n  ];\n  checkSynth(\n    /*\n     * // The stream consists of word \"time\" with all possible transforms.\n     * main_header\n     * metablock_header_easy: 833, 1\n     * command_easy: 4, \"|\", 2 // = 0 << 10 + 1 + 1\n     * command_easy: 4, \"|\", 1031 // = 1 << 10 + 1 + 6\n     * command_easy: 4, \"|\", 2061 // = 2 << 10 + 1 + 12\n     * command_easy: 4, \"|\", 3092 // = 3 << 10 + 1 + 19\n     * command_easy: 4, \"|\", 4120 // = 4 << 10 + 1 + 23\n     * command_easy: 4, \"|\", 5150 // = 5 << 10 + 1 + 29\n     * command_easy: 4, \"|\", 6184 // = 6 << 10 + 1 + 39\n     * command_easy: 4, \"|\", 7214 // = 7 << 10 + 1 + 45\n     * command_easy: 4, \"|\", 8246 // = 8 << 10 + 1 + 53\n     * command_easy: 4, \"|\", 9279 // = 9 << 10 + 1 + 62\n     * command_easy: 4, \"|\", 10308 // = 10 << 10 + 1 + 67\n     * command_easy: 4, \"|\", 11342 // = 11 << 10 + 1 + 77\n     * command_easy: 4, \"|\", 12369 // = 12 << 10 + 1 + 80\n     * command_easy: 4, \"|\", 13397 // = 13 << 10 + 1 + 84\n     * command_easy: 4, \"|\", 14429 // = 14 << 10 + 1 + 92\n     * command_easy: 4, \"|\", 15460 // = 15 << 10 + 1 + 99\n     * command_easy: 4, \"|\", 16491 // = 16 << 10 + 1 + 106\n     * command_easy: 4, \"|\", 17524 // = 17 << 10 + 1 + 115\n     * command_easy: 4, \"|\", 18557 // = 18 << 10 + 1 + 124\n     * command_easy: 4, \"|\", 19589 // = 19 << 10 + 1 + 132\n     * command_easy: 4, \"|\", 20619 // = 20 << 10 + 1 + 138\n     * command_easy: 4, \"|\", 21649 // = 21 << 10 + 1 + 144\n     * command_easy: 4, \"|\", 22680 // = 22 << 10 + 1 + 151\n     * command_easy: 4, \"|\", 23710 // = 23 << 10 + 1 + 157\n     * command_easy: 4, \"|\", 24736 // = 24 << 10 + 1 + 159\n     * command_easy: 4, \"|\", 25766 // = 25 << 10 + 1 + 165\n     * command_easy: 4, \"|\", 26800 // = 26 << 10 + 1 + 175\n     * command_easy: 4, \"|\", 27826 // = 27 << 10 + 1 + 177\n     * command_easy: 4, \"|\", 28853 // = 28 << 10 + 1 + 180\n     * command_easy: 4, \"|\", 29885 // = 29 << 10 + 1 + 188\n     * command_easy: 4, \"|\", 30920 // = 30 << 10 + 1 + 199\n     * command_easy: 4, \"|\", 31950 // = 31 << 10 + 1 + 205\n     * command_easy: 4, \"|\", 32981 // = 32 << 10 + 1 + 212\n     * command_easy: 4, \"|\", 34011 // = 33 << 10 + 1 + 218\n     * command_easy: 4, \"|\", 35043 // = 34 << 10 + 1 + 226\n     * command_easy: 4, \"|\", 36068 // = 35 << 10 + 1 + 227\n     * command_easy: 4, \"|\", 37103 // = 36 << 10 + 1 + 238\n     * command_easy: 4, \"|\", 38133 // = 37 << 10 + 1 + 244\n     * command_easy: 4, \"|\", 39168 // = 38 << 10 + 1 + 255\n     * command_easy: 4, \"|\", 40201 // = 39 << 10 + 1 + 264\n     * command_easy: 4, \"|\", 41226 // = 40 << 10 + 1 + 265\n     * command_easy: 4, \"|\", 42251 // = 41 << 10 + 1 + 266\n     * command_easy: 4, \"|\", 43285 // = 42 << 10 + 1 + 276\n     * command_easy: 4, \"|\", 44310 // = 43 << 10 + 1 + 277\n     * command_easy: 4, \"|\", 45345 // = 44 << 10 + 1 + 288\n     * command_easy: 4, \"|\", 46374 // = 45 << 10 + 1 + 293\n     * command_easy: 4, \"|\", 47407 // = 46 << 10 + 1 + 302\n     * command_easy: 4, \"|\", 48440 // = 47 << 10 + 1 + 311\n     * command_easy: 4, \"|\", 49473 // = 48 << 10 + 1 + 320\n     * command_easy: 4, \"|\", 50498 // = 49 << 10 + 1 + 321\n     * command_easy: 4, \"|\", 51530 // = 50 << 10 + 1 + 329\n     * command_easy: 4, \"|\", 52561 // = 51 << 10 + 1 + 336\n     * command_easy: 4, \"|\", 53591 // = 52 << 10 + 1 + 342\n     * command_easy: 4, \"|\", 54623 // = 53 << 10 + 1 + 350\n     * command_easy: 4, \"|\", 55655 // = 54 << 10 + 1 + 358\n     * command_easy: 4, \"|\", 56680 // = 55 << 10 + 1 + 359\n     * command_easy: 4, \"|\", 57705 // = 56 << 10 + 1 + 360\n     * command_easy: 4, \"|\", 58730 // = 57 << 10 + 1 + 361\n     * command_easy: 4, \"|\", 59760 // = 58 << 10 + 1 + 367\n     * command_easy: 4, \"|\", 60791 // = 59 << 10 + 1 + 374\n     * command_easy: 4, \"|\", 61816 // = 60 << 10 + 1 + 375\n     * command_easy: 4, \"|\", 62849 // = 61 << 10 + 1 + 384\n     * command_easy: 4, \"|\", 63881 // = 62 << 10 + 1 + 392\n     * command_easy: 4, \"|\", 64919 // = 63 << 10 + 1 + 406\n     * command_easy: 4, \"|\", 65944 // = 64 << 10 + 1 + 407\n     * command_easy: 4, \"|\", 66969 // = 65 << 10 + 1 + 408\n     * command_easy: 4, \"|\", 68001 // = 66 << 10 + 1 + 416\n     * command_easy: 4, \"|\", 69031 // = 67 << 10 + 1 + 422\n     * command_easy: 4, \"|\", 70062 // = 68 << 10 + 1 + 429\n     * command_easy: 4, \"|\", 71092 // = 69 << 10 + 1 + 435\n     * command_easy: 4, \"|\", 72123 // = 70 << 10 + 1 + 442\n     * command_easy: 4, \"|\", 73154 // = 71 << 10 + 1 + 449\n     * command_easy: 4, \"|\", 74185 // = 72 << 10 + 1 + 456\n     * command_easy: 4, \"|\", 75219 // = 73 << 10 + 1 + 466\n     * command_easy: 4, \"|\", 76261 // = 74 << 10 + 1 + 484\n     * command_easy: 4, \"|\", 77291 // = 75 << 10 + 1 + 490\n     * command_easy: 4, \"|\", 78327 // = 76 << 10 + 1 + 502\n     * command_easy: 4, \"|\", 79357 // = 77 << 10 + 1 + 508\n     * command_easy: 4, \"|\", 80388 // = 78 << 10 + 1 + 515\n     * command_easy: 4, \"|\", 81418 // = 79 << 10 + 1 + 521\n     * command_easy: 4, \"|\", 82448 // = 80 << 10 + 1 + 527\n     * command_easy: 4, \"|\", 83482 // = 81 << 10 + 1 + 537\n     * command_easy: 4, \"|\", 84514 // = 82 << 10 + 1 + 545\n     * command_easy: 4, \"|\", 85546 // = 83 << 10 + 1 + 553\n     * command_easy: 4, \"|\", 86577 // = 84 << 10 + 1 + 560\n     * command_easy: 4, \"|\", 87609 // = 85 << 10 + 1 + 568\n     * command_easy: 4, \"|\", 88639 // = 86 << 10 + 1 + 574\n     * command_easy: 4, \"|\", 89670 // = 87 << 10 + 1 + 581\n     * command_easy: 4, \"|\", 90700 // = 88 << 10 + 1 + 587\n     * command_easy: 4, \"|\", 91731 // = 89 << 10 + 1 + 594\n     * command_easy: 4, \"|\", 92762 // = 90 << 10 + 1 + 601\n     * command_easy: 4, \"|\", 93795 // = 91 << 10 + 1 + 610\n     * command_easy: 4, \"|\", 94827 // = 92 << 10 + 1 + 618\n     * command_easy: 4, \"|\", 95860 // = 93 << 10 + 1 + 627\n     * command_easy: 4, \"|\", 96894 // = 94 << 10 + 1 + 637\n     * command_easy: 4, \"|\", 97924 // = 95 << 10 + 1 + 643\n     * command_easy: 4, \"|\", 98957 // = 96 << 10 + 1 + 652\n     * command_easy: 4, \"|\", 99988 // = 97 << 10 + 1 + 659\n     * command_easy: 4, \"|\", 101019 // = 98 << 10 + 1 + 666\n     * command_easy: 4, \"|\", 102051 // = 99 << 10 + 1 + 674\n     * command_easy: 4, \"|\", 103081 // = 100 << 10 + 1 + 680\n     * command_easy: 4, \"|\", 104114 // = 101 << 10 + 1 + 689\n     * command_easy: 4, \"|\", 105144 // = 102 << 10 + 1 + 695\n     * command_easy: 4, \"|\", 106175 // = 103 << 10 + 1 + 702\n     * command_easy: 4, \"|\", 107206 // = 104 << 10 + 1 + 709\n     * command_easy: 4, \"|\", 108237 // = 105 << 10 + 1 + 716\n     * command_easy: 4, \"|\", 109268 // = 106 << 10 + 1 + 723\n     * command_easy: 4, \"|\", 110301 // = 107 << 10 + 1 + 732\n     * command_easy: 4, \"|\", 111332 // = 108 << 10 + 1 + 739\n     * command_easy: 4, \"|\", 112363 // = 109 << 10 + 1 + 746\n     * command_easy: 4, \"|\", 113394 // = 110 << 10 + 1 + 753\n     * command_easy: 4, \"|\", 114426 // = 111 << 10 + 1 + 761\n     * command_easy: 4, \"|\", 115458 // = 112 << 10 + 1 + 769\n     * command_easy: 4, \"|\", 116488 // = 113 << 10 + 1 + 775\n     * command_easy: 4, \"|\", 117518 // = 114 << 10 + 1 + 781\n     * command_easy: 4, \"|\", 118549 // = 115 << 10 + 1 + 788\n     * command_easy: 4, \"|\", 119580 // = 116 << 10 + 1 + 795\n     * command_easy: 4, \"|\", 120611 // = 117 << 10 + 1 + 802\n     * command_easy: 4, \"|\", 121643 // = 118 << 10 + 1 + 810\n     * command_easy: 4, \"|\", 122675 // = 119 << 10 + 1 + 818\n     * command_easy: 4, \"|\", 123707 // = 120 << 10 + 1 + 826\n     */\n    compressed,\n    true,\n    '|time|time | time |ime|Time |time the | time|s time |time of |Time|time an'\n    + 'd |me|tim|, time |time, | Time |time in |time to |e time |time\"|time.|ti'\n    + 'me\">|time\\n|t|time]|time for |e|ti|time a |time that | Time|time. |.time'\n    + '| time, ||time with |time\\'|time from |time by ||| the time||time. The |'\n    + 'TIME|time on |time as |time is ||timing |time\\n\\t|time:| time. |timeed |'\n    + '|||time(|Time, ||time at |timely | the time of ||| Time, |Time\"|.time(|T'\n    + 'IME |Time\">|time=\"| time.|.com/time| the time of the |Time\\'|time. This '\n    + '|time,|.time |Time(|Time.|time not | time=\"|timeer | TIME |timeal | TIME'\n    + '|time=\\'|TIME\"|Time. | time(|timeful | Time. |timeive |timeless |TIME'\n    + '\\'|timeest | Time.|TIME\">| time=\\'|Time,|timeize |TIME.|\\xc2\\xa0time| ti'\n    + 'me,|Time=\"|TIME=\"|timeous |TIME, |Time=\\'| Time,| TIME=\"| TIME, |TIME,|T'\n    + 'IME(|TIME. | TIME.|TIME=\\'| TIME. | Time=\"| TIME=\\'| Time=\\''\n  );\n},\n\ntestBaseDictWord() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02\n  ];\n  checkSynth(\n    /*\n     * // The stream consists of a base dictionary word.\n     * main_header\n     * metablock_header_easy: 4, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 1\n     */\n    compressed,\n    true,\n    'time'\n  );\n},\n\ntestBaseDictWordFinishBlockOnRingbufferWrap() {\n  const compressed = [\n    0x1b, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x58, 0x32,\n    0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,\n    0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,\n    0x34, 0x34, 0x34, 0xd4, 0x00\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 32, 1 // 32 = minimal ringbuffer size\n     * command_easy: 4, \"aaaaaaaaaaaaaaaaaaaaaaaaaaaa\", 29\n     */\n    compressed,\n    true,\n    times(28, 'a')\n    + 'time'\n  );\n},\n\ntestBaseDictWordTooLong() {\n  const compressed = [\n    0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02\n  ];\n  checkSynth(\n    /*\n     * // Has an unmodified dictionary word that goes over the end of the\n     * // meta-block. Same as BaseDictWord, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 1, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 1\n     */\n    compressed,\n    false,\n    ''\n  );\n},\n\ntestBlockCountMessage() {\n  const compressed = [\n    0x1b, 0x0b, 0x00, 0x11, 0x01, 0x8c, 0xc1, 0xc5, 0x0d, 0x08, 0x00, 0x22,\n    0x65, 0xe1, 0xfc, 0xfd, 0x22, 0x2c, 0xc4, 0x00, 0x00, 0x38, 0xd8, 0x32,\n    0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x04, 0x10, 0x42, 0x00, 0x00,\n    0x00\n  ];\n  checkSynth(\n    /*\n     * // Same as BlockSwitchMessage but also uses 0-bit block-type commands.\n     * main_header\n     * metablock_header_begin: 1, 0, 12, 0\n     * // two literal block types\n     * vlq_blocktypes: 2\n     * huffman_simple: 1,1,4, 1  // literal blocktype prefix code\n     * huffman_fixed: 26  // literal blockcount prefix code\n     * blockcount_easy: 2  // 2 a's\n     * // one ins/copy and dist block type\n     * vlq_blocktypes: 1\n     * vlq_blocktypes: 1\n     * ndirect: 0, 0\n     * // two MSB6 literal context modes\n     * bits: \"00\", \"00\"\n     * // two literal prefix codes\n     * vlq_blocktypes: 2\n     * // literal context map\n     * vlq_rlemax: 5\n     * huffman_simple: 0,3,7, 5,0,6  // context map RLE Huffman code\n     * // context map RLE: repeat 0 64 times, 1+5 64 times\n     * bits: \"01\", \"0\", \"11111\", \"11\", \"0\", \"11111\"\n     * bit: 1  // MTF enabled\n     * // one distance prefix code\n     * vlq_blocktypes: 1\n     * huffman_simple: 0,1,256, 97  // only a's\n     * huffman_simple: 0,1,256, 98  // only b's\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * // now comes the data\n     * command_inscopy_easy: 12, 0\n     * blockcount_easy: 2  // switch to other block type; 2 b's\n     * blockcount_easy: 5  // switch to other block type; 5 a's\n     * blockcount_easy: 1  // switch to other block type; 1 b\n     * blockcount_easy: 1  // switch to other block type; 1 a\n     * blockcount_easy: 1  // switch to other block type; 1 b\n     */\n    compressed,\n    true,\n    'aabbaaaaabab'\n  );\n},\n\ntestBlockSwitchMessage() {\n  const compressed = [\n    0x1b, 0x0b, 0x00, 0xd1, 0xe1, 0x01, 0xc6, 0xe0, 0xe2, 0x06, 0x04, 0x00,\n    0x91, 0xb2, 0x70, 0xfe, 0x7e, 0x11, 0x16, 0x62, 0x00, 0x00, 0x1c, 0x6c,\n    0x99, 0xc4, 0x00, 0x09, 0x00, 0x80, 0x3b, 0x6d, 0x02, 0x08, 0x82, 0x00,\n    0x00, 0x00\n  ];\n  checkSynth(\n    /*\n     * // Uses blocks with 1-symbol Huffman codes that take 0 bits, so that it\n     * // is the block-switch commands that encode the message rather than actual\n     * // literals.\n     * main_header\n     * metablock_header_begin: 1, 0, 12, 0\n     * // two literal block types\n     * vlq_blocktypes: 2\n     * huffman_simple: 1,4,4, 1,0,2,3  // literal blocktype prefix code\n     * huffman_fixed: 26  // literal blockcount prefix code\n     * blockcount_easy: 2  // 2 a's\n     * // one ins/copy and dist block type\n     * vlq_blocktypes: 1\n     * vlq_blocktypes: 1\n     * ndirect: 0, 0\n     * // two MSB6 literal context modes\n     * bits: \"00\", \"00\"\n     * // two literal prefix codes\n     * vlq_blocktypes: 2\n     * // literal context map\n     * vlq_rlemax: 5\n     * huffman_simple: 0,3,7, 5,0,6  // context map RLE Huffman code\n     * // context map RLE: repeat 0 64 times, 1+5 64 times\n     * bits: \"01\", \"0\", \"11111\", \"11\", \"0\", \"11111\"\n     * bit: 1  // MTF enabled\n     * // one distance prefix code\n     * vlq_blocktypes: 1\n     * huffman_simple: 0,1,256, 97  // only a's\n     * huffman_simple: 0,1,256, 98  // only b's\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * // now comes the data\n     * command_inscopy_easy: 12, 0\n     * bits: \"0\"; blockcount_easy: 2  // switch to other block type; 2 b's\n     * bits: \"0\"; blockcount_easy: 5  // switch to other block type; 5 a's\n     * bits: \"0\"; blockcount_easy: 1  // switch to other block type; 1 b\n     * bits: \"0\"; blockcount_easy: 1  // switch to other block type; 1 a\n     * bits: \"0\"; blockcount_easy: 1  // switch to other block type; 1 b\n     */\n    compressed,\n    true,\n    'aabbaaaaabab'\n  );\n},\n\ntestClClTreeDeficiency() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0x43, 0x01, 0xe0, 0x05, 0x88,\n    0x55, 0x90, 0x01, 0x00, 0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00,\n    0x77, 0xda, 0x28, 0x40, 0x23\n  ];\n  checkSynth(\n    /*\n     * // This test is a copy of TooManySymbolsRepeated, with changed clcl table.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,3,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"101\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1\n     * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 0, 0, 101100010\n     */\n    compressed,\n    false,\n    'aaab'\n  );\n},\n\ntestClClTreeExcess() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc3, 0x7b, 0x80, 0x58, 0x41,\n    0x06, 0x00, 0xe0, 0x60, 0xcb, 0x24, 0x06, 0x48, 0x00, 0x00, 0xdc, 0x69,\n    0xa3, 0x00, 0x8d, 0x00\n  ];\n  checkSynth(\n    /*\n     * // This test is a copy of ClClTreeDeficiency, with changed clcl table.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,1,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"1\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1\n     * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 0, 0, 101100010\n     */\n    compressed,\n    false,\n    'aaab'\n  );\n},\n\ntestComplexHuffmanCodeTwoSymbols() {\n  const compressed = [\n    0x1b, 0x01, 0x00, 0x00, 0x80, 0x03, 0xe0, 0xa2, 0x1a, 0x00, 0x00, 0x0e,\n    0xb6, 0x4c, 0x62, 0x80, 0x04, 0x00, 0xc0, 0x9d, 0x36, 0x12, 0x04\n  ];\n  checkSynth(\n    /*\n     * // This tests a complex Huffman code with only two symbols followed by a\n     * // tiny amount of content.\n     * main_header\n     * metablock_header_begin: 1, 0, 2, 0\n     * metablock_header_trivial_context\n     * // begin of literal Huffman tree. The tree has symbol length 1 for \"a\",\n     * // symbol length 1 for \"b\" and symbol length 0 for all others.\n     * hskip: 0\n     * clcl_ordered: 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n     * set_prefix_cl_rle: \"\", \"0\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"1\"\n     * cl_rle_rep_0: 97\n     * cl_rle: 1  // literal number 97, that is, the letter 'a'\n     * cl_rle: 1  // literal number 98, that is, the letter 'b'\n     * // end of literal Huffman tree\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 2, 0\n     * command_literal_bits: 0, 1  // a followed by b\n     */\n    compressed,\n    true,\n    'ab'\n  );\n},\n\ntestCompressedUncompressedShortCompressed() {\n  const compressed = [\n    0x8b, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x66, 0x6f,\n    0x1b, 0x0a, 0x50, 0x00, 0x10, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x31,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0,\n    0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x24, 0x00\n  ];\n  checkSynth(\n    /*\n     * main_header: 22\n     * metablock_header_easy: 1022, 0\n     * command_easy: 1021, \"a\", 1 // 1022 x \"a\"\n     * metablock_uncompressed: \"bbbbbb\"\n     * metablock_header_easy: 4, 1\n     * command_easy: 4, \"\", 1 // 6 + 4 = 10 x \"b\"\n     */\n    compressed,\n    true,\n    times(1022, 'a')\n    + times(10, 'b')\n  );\n},\n\ntestCompressedUncompressedShortCompressedSmallWindow() {\n  const compressed = [\n    0x21, 0xf4, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00,\n    0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x34, 0x7b,\n    0xdb, 0x50, 0x80, 0x02, 0x80, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x31,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0,\n    0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x24, 0x00\n  ];\n  checkSynth(\n    /*\n     * main_header: 10\n     * metablock_header_easy: 1022, 0\n     * command_easy: 1021, \"a\", 1 // 1022 x \"a\"\n     * metablock_uncompressed: \"bbbbbb\"\n     * metablock_header_easy: 4, 1\n     * command_easy: 4, \"\", 1 // 6 + 4 = 10 x \"b\"\n     */\n    compressed,\n    true,\n    times(1022, 'a')\n    + times(10, 'b')\n  );\n},\n\ntestCopyLengthTooLong() {\n  const compressed = [\n    0x1b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x11, 0x86,\n    0x02\n  ];\n  checkSynth(\n    /*\n     * // Has a copy length that goes over the end of the meta-block.\n     * // Same as OneCommand, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 2, 1\n     * command_easy: 2, \"a\", 1\n     */\n    compressed,\n    false,\n    ''\n  );\n},\n\ntestCopyTooLong() {\n  const compressed = [\n    0xa1, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00,\n    0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x34, 0xab,\n    0xdb, 0x50, 0x00\n  ];\n  checkSynth(\n    /*\n     * // Has a copy length that goes over the end of the meta-block,\n     * // with a ringbuffer wrap.\n     * main_header: 10\n     * metablock_header_easy: 2, 1\n     * command_easy: 1024, \"a\", 1\n     */\n    compressed,\n    false,\n    ''\n  );\n},\n\ntestCustomHuffmanCode() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc3, 0x3d, 0x80, 0x58, 0x82,\n    0x08, 0x00, 0xc0, 0xc1, 0x96, 0x49, 0x0c, 0x90, 0x00, 0x00, 0xb8, 0xd3,\n    0x46, 0x01, 0x1a, 0x01\n  ];\n  checkSynth(\n    /*\n     * // This tests a small hand crafted Huffman code followed by a tiny amount\n     * // of content. This tests if the bit reader detects the end correctly even\n     * // with tiny content after a larger Huffman tree encoding.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * // begin of literal Huffman tree. The tree has symbol length 1 for \"a\",\n     * // symbol length 8 for null, symbol length 9 for all others. The length 1\n     * // for a is chosen on purpose here, the others must be like that to\n     * // fulfill the requirement that sum of 32>>length is 32768.\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,2,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"10\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1  // literal number 97, that is, the letter 'a'\n     * cl_rle_rep: 9, 158\n     * // end of literal Huffman tree\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * // Here is how the code \"101100010\" for b is derived: remember that a has\n     * // symbol length 1, null has symbol length 8, the rest 9. So in the\n     * // canonical Huffman code, the code for \"a\" is \"0\", for null is\n     * // \"10000000\". The next value has \"100000010\" (cfr. the rules of canonical\n     * // prefix code). Counting upwards +95 from there, the value \"@\" (ASCII 96,\n     * // before \"a\") has \"101100001\", and so b, the next 9-bit symbol, has the\n     * // next binary value \"101100010\".\n     * command_literal_bits: 0, 0, 0, 101100010  // 3 a's followed by a b\n     */\n    compressed,\n    true,\n    'aaab'\n  );\n},\n\ntestDistanceLut() {\n  const compressed = [\n    0x8b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x99, 0x86,\n    0x46, 0xc6, 0x22, 0x14, 0x00, 0x00, 0x03, 0x00, 0x00, 0x1c, 0xa7, 0x6d,\n    0x00, 0x00, 0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x21, 0x91, 0x69, 0x62,\n    0x6a, 0x36\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 6, 0  // implicit ndirect: 0, 0\n     * command_easy: 3, \"abc\", 3  // Insert \"abc\", copy \"abc\"\n     * metablock_header_begin: 0, 0, 6, 0\n     * vlq_blocktypes: 1  // num litetal block types\n     * vlq_blocktypes: 1  // num command block types\n     * vlq_blocktypes: 1  // num distance block types\n     * ndirect: 3, 0\n     * bits: \"00\"  // literal context modes\n     * vlq_blocktypes: 1  // num literal Huffman trees\n     * // command has no context -> num trees == num block types\n     * vlq_blocktypes: 1  // num distance Huffman trees\n     * huffman_fixed: 256\n     * huffman_fixed: 704\n     * huffman_simple: 0,1,67, 18\n     * command_inscopy_easy: 3, 3  // Insert 3, copy 3\n     * command_literals_easy: \"def\"\n     * // 0-bit Huffman code : dcode = 18 -> third direct distance\n     * metablock_lastempty  // make sure that no extra distance bits are read\n     */\n    compressed,\n    true,\n    'abcabcdefdef'\n  );\n},\n\ntestEmpty() {\n  const compressed = [\n    0x3b\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_lastempty\n     */\n    compressed,\n    true,\n    ''\n  );\n},\n\ntestHelloWorld() {\n  const compressed = [\n    0x1b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x00, 0x59,\n    0x98, 0xda, 0xd8, 0xd8, 0x13, 0xb8, 0xdb, 0x3b, 0xd9, 0x98, 0x00\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_fixed: \"hello world\", 1\n     */\n    compressed,\n    true,\n    'hello world'\n  );\n},\n\ntestInsertTooLong() {\n  const compressed = [\n    0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x09, 0x86,\n    0x46\n  ];\n  checkSynth(\n    /*\n     * // Has an insert length that goes over the end of the meta-block.\n     * // Same as OneInsert, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 1, 1\n     * command_easy: 0, \"ab\"\n     */\n    compressed,\n    false,\n    ''\n  );\n},\n\ntestIntactDistanceRingBuffer0() {\n  const compressed = [\n    0x1b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0xa1, 0x80,\n    0x20, 0x00\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 11, 1\n     * command_inscopy_easy: 0, 7 // \"himself\" from dictionary\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // copy \"self\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    'himselfself'\n  );\n},\n\ntestIntactDistanceRingBuffer1() {\n  const compressed = [\n    0x1b, 0x09, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x21, 0xa0,\n    0x20, 0x00\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 10, 1\n     * command_inscopy_easy: 0, 6 // \"scroll\" from dictionary\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // copy \"roll\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    'scrollroll'\n  );\n},\n\ntestIntactDistanceRingBuffer2() {\n  const compressed = [\n    0x1b, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x80,\n    0x20, 0x50, 0x10, 0x24, 0x08, 0x06\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 16, 1\n     * command_inscopy_easy: 0, 4 // \"left\" from dictionary (index = 3 = 4 - 1)\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 11 - 5)\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 15 - 9)\n     * bits: \"010000\" // distance = 15 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"left\" from dictionary (index = 3 = 16 - 13)\n     * bits: \"110000\" // distance = 16 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    'leftdatadataleft'\n  );\n},\n\ntestIntactDistanceRingBufferNoDistanceValue0() {\n  const compressed = [\n    0x1b, 0x17, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x40, 0x82,\n    0x40, 0x41, 0x90, 0x20, 0x58, 0x18, 0x00\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 24, 1\n     * // cmd is {ins_extra, copy_extra, distance_code, ctx, ins_off, copy_off}\n     * // cmd.2 = {0x00, 0x00, 0, 0x02, 0x0000, 0x0004}\n     * // cmd.2 = no insert, copy length = 4, distance_code = 0 (last distance)\n     * command_short: 2 // \"left\" from dictionary (index = 3 = 4 - 1)\n     * // Check that RB is untouched after the first command...\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 11 - 5)\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"data\" from dictionary (index = 6 = 15 - 9)\n     * bits: \"010000\" // distance = 15 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"left\" from dictionary (index = 3 = 16 - 13)\n     * bits: \"110000\" // distance = 16 from RB; RB remains intact\n     * command_inscopy_easy: 0, 8 // copy \"leftleft\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    'leftdatadataleftleftleft'\n  );\n},\n\ntestIntactDistanceRingBufferNoDistanceValue1() {\n  const compressed = [\n    0x1b, 0x19, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0xc0, 0x82,\n    0x41, 0x41, 0x90, 0x20, 0x58, 0x18, 0x00\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 26, 1\n     * // cmd is {ins_extra, copy_extra, distance_code, ctx, ins_off, copy_off}\n     * // cmd.3 = {0x00, 0x00, 0, 0x03, 0x0000, 0x0005}\n     * // cmd.3 = no insert, copy length = 5, distance_code = 0 (last distance)\n     * command_short: 3 // \"world\" from dictionary (index = 3 = 4 - 1)\n     * // Check that RB is untouched after the first command...\n     * command_inscopy_easy: 0, 5 // \"white\" from dictionary (index = 5 = 11 - 6)\n     * bits: \"100000\" // distance = 11 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"back\" from dictionary (index = 4 = 15 - 11)\n     * bits: \"010000\" // distance = 15 from RB; RB remains intact\n     * command_inscopy_easy: 0, 4 // \"down\" from dictionary (index = 1 = 16 - 15)\n     * bits: \"110000\" // distance = 16 from RB; RB remains intact\n     * command_inscopy_easy: 0, 8 // copy \"downdown\"\n     * bits: \"000000\" // distance = 4 from RB; RB remains intact\n     */\n    compressed,\n    true,\n    'worldwhitebackdowndowndown'\n  );\n},\n\ntestInvalidNoLastMetablock() {\n  const compressed = [\n    0x0b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0x00, 0x13,\n    0x59, 0x98, 0xda, 0xd8, 0xd8, 0x13, 0xb8, 0xdb, 0x3b, 0xd9, 0x98, 0xe8,\n    0x00\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_fixed: \\\"hello world\\\", 0\n     */\n    compressed,\n    false,\n    'hello world'\n  );\n},\n\ntestInvalidNoMetaBlocks() {\n  const compressed = [\n    0x0b\n  ];\n  checkSynth(\n    /*\n     * main_header\n     */\n    compressed,\n    false,\n    ''\n  );\n},\n\ntestInvalidTooFarDist() {\n  const compressed = [\n    0xa1, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00,\n    0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0xe8, 0xe0,\n    0x62, 0x6f, 0x4f, 0x60, 0x66, 0xe8, 0x44, 0x38, 0x0f, 0x09, 0x0d\n  ];\n  checkSynth(\n    /*\n     * main_header: 10\n     * metablock_header_begin: 1, 0, 10, 0\n     * metablock_header_trivial_context\n     * huffman_fixed: 256\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_easy: 2, \"too far!\", 1000000  // distance too far for 10 wbits\n     */\n    compressed,\n    false,\n    ''\n  );\n},\n\ntestInvalidTooLargeContextMap() {\n  const compressed = [\n    0x1b, 0x00, 0x00, 0xd1, 0xe1, 0x01, 0xc6, 0xe0, 0xe2, 0x06, 0x00, 0x00,\n    0x91, 0xb2, 0x70, 0xfe, 0xfb, 0x45, 0x58, 0x88, 0x01, 0x00, 0x70, 0xb0,\n    0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x01\n  ];\n  checkSynth(\n    /*\n     * // Has a repeat code a context map that makes the size too big -> invalid.\n     * main_header\n     * metablock_header_begin: 1, 0, 1, 0\n     * // two literal block types\n     * vlq_blocktypes: 2\n     * huffman_simple: 1,4,4, 1,0,2,3  // literal blocktype prefix code\n     * huffman_fixed: 26  // literal blockcount prefix code\n     * blockcount_easy: 1\n     * // one ins/copy and dist block type\n     * vlq_blocktypes: 1\n     * vlq_blocktypes: 1\n     * ndirect: 0, 0\n     * // two MSB6 literal context modes\n     * bits: \"00\", \"00\"\n     * // two literal prefix codes\n     * vlq_blocktypes: 2\n     * // literal context map\n     * vlq_rlemax: 5\n     * huffman_simple: 0,3,7, 5,0,6  // context map RLE Huffman code\n     * // Too long context map RLE: repeat 0 64 times, 1+5 65 times, that is 129\n     * // values which is 1 too much.\n     * bits: \"01\", \"0\", \"11111\", \"11\", \"11\", \"0\", \"11111\"\n     * bit: 1  // MTF enabled\n     * // one distance prefix code\n     * vlq_blocktypes: 1\n     * huffman_simple: 0,1,256, 97  // only a's\n     * huffman_simple: 0,1,256, 98  // only b's\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * // now comes the data\n     * command_inscopy_easy: 1, 0\n     */\n    compressed,\n    false,\n    'a'\n  );\n},\n\ntestInvalidTransformType() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x2d,\n    0x01, 0x19\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 4, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 123905 // = 121 << 10 + 1\n     */\n    compressed,\n    false,\n    ''\n  );\n},\n\ntestInvalidWindowBits9() {\n  const compressed = [\n    0x91, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00,\n    0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0xc8, 0x20,\n    0x32, 0xd4, 0x01\n  ];\n  checkSynth(\n    /*\n     * main_header: 9\n     * metablock_fixed: \\\"a\\\", 1\n     */\n    compressed,\n    false,\n    'a'\n  );\n},\n\ntestManyTinyMetablocks() {\n  const compressed = [\n    0x0b, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e,\n    0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee,\n    0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80, 0x61, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65,\n    0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61, 0x04, 0x00, 0x80,\n    0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x61,\n    0x34\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * repeat: 300\n     *   metablock_uncompressed: \"a\"\n     *   metablock_fixed: \"b\"\n     * end_repeat\n     * metablock_lastempty\n     */\n    compressed,\n    true,\n    times(300, 'ab')\n  );\n},\n\ntestNegativeDistance() {\n  const compressed = [\n    0x1b, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02,\n    0x01, 0x42, 0x01, 0x42, 0x01, 0x42, 0x01, 0x42, 0x01, 0x42, 0x01, 0x1c\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 16, 1\n     * command_inscopy_easy: 0, 4 // time\n     * command_dist_easy: 1\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2\n     * command_inscopy_easy: 0, 2 // me\n     * command_dist_easy: 2 // All rb items are 2 now\n     * command_inscopy_easy: 0, 2\n     * bits: \"011100\" // 15 -> distance = rb[idx + 2] - 3\n     */\n    compressed,\n    false,\n    'timemememememeXX'\n  );\n},\n\ntestNegativeRemainingLenBetweenMetablocks() {\n  const compressed = [\n    0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x09, 0x86,\n    0x46, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00,\n    0x70, 0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x91, 0x60,\n    0x68, 0x04\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_easy: 1, 0\n     * command_easy: 0, \"ab\"  // remaining length == -1 -> invalid stream\n     * metablock_header_easy: 2, 1\n     * command_easy: 0, \"ab\"\n     */\n    compressed,\n    false,\n    'abab'\n  );\n},\n\ntestOneCommand() {\n  const compressed = [\n    0x1b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x11, 0x86,\n    0x02\n  ];\n  checkSynth(\n    /*\n     * // The stream consists of one command with insert and copy.\n     * main_header\n     * metablock_header_easy: 3, 1\n     * command_easy: 2, \"a\", 1\n     */\n    compressed,\n    true,\n    'aaa'\n  );\n},\n\ntestOneInsert() {\n  const compressed = [\n    0x1b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x09, 0x86,\n    0x46\n  ];\n  checkSynth(\n    /*\n     * // The stream consists of one half command with insert only.\n     * main_header\n     * metablock_header_easy: 2, 1\n     * command_easy: 0, \"ab\"\n     */\n    compressed,\n    true,\n    'ab'\n  );\n},\n\ntestPeculiarWrap() {\n  const compressed = [\n    0x21, 0xfc, 0x1f, 0x00, 0x00, 0xa1, 0x12, 0x82, 0x04, 0x60, 0x1d, 0x00,\n    0xca, 0xfe, 0xba, 0xbe, 0xde, 0xad, 0xbe, 0xef, 0x21, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03,\n    0x24, 0x00, 0x00, 0xee, 0xb4, 0x91, 0x61, 0x68, 0x64, 0x0c\n  ];\n  checkSynth(\n    /*\n     * main_header: 10\n     * // See ZeroCostCommand\n     * metablock_header_begin: 0, 0, 2048, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 0,1,256, 42\n     * huffman_simple: 0,1,704, 130\n     * huffman_simple: 0,1,64, 0\n     * // Metadata block; at least 8 bytes long\n     * bits: \"0\", \"11\", \"0\", \"01\", \"00000111\"\n     * byte_boundary\n     * bits: \"11001010\", \"11111110\", \"10111010\", \"10111110\"\n     * bits: \"11011110\", \"10101101\", \"10111110\", \"11101111\"\n     * metablock_header_easy: 3, 1\n     * command_easy: 0, \"abc\", 0\n     */\n    compressed,\n    true,\n    times(512, 'left')\n    + 'abc'\n  );\n},\n\ntestSimplePrefix() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,\n    0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 1,4,256, 97,98,99,100  // ASCII codes for a, b, c, d\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 10, 110, 111  // a, b, c, d\n     */\n    compressed,\n    true,\n    'abcd'\n  );\n},\n\ntestSimplePrefixDuplicateSymbols() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc2, 0xc4, 0x02, 0x00, 0x70,\n    0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 1,4,256, 97,98,97,98  // ASCII codes for a, b, a, b\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 10, 110, 111  // a, b, a, b\n     */\n    compressed,\n    false,\n    'abab'\n  );\n},\n\ntestSimplePrefixOutOfRangeSymbols() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x4d, 0xff, 0xef,\n    0x7f, 0xff, 0xfc, 0x07, 0x00, 0xb8, 0xd3, 0x06\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_fixed: 256\n     * huffman_simple: 1,4,704, 1023,1022,1021,1020\n     * huffman_fixed: 64\n     */\n    compressed,\n    false,\n    ''\n  );\n},\n\ntestSimplePrefixPlusExtraData() {\n  if (pending) pending(); else return;\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,\n    0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d,\n    0x55, 0xaa\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 1,4,256, 97,98,99,100  // ASCII codes for a, b, c, d\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 10, 110, 111  // a, b, c, d\n     * byte_boundary\n     * bits: \"01010101\", \"10101010\"\n     */\n    compressed,\n    true,\n    'abcd'\n  );\n},\n\ntestStressReadDistanceExtraBits() {\n  const compressed = [\n    0x4f, 0xfe, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00,\n    0x00, 0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x9b, 0xf6,\n    0x69, 0xef, 0xff, 0x0c, 0x8d, 0x8c, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03, 0x24,\n    0xa8, 0xaa, 0xef, 0xab, 0xaa, 0x7f, 0x24, 0x16, 0x35, 0x8f, 0xac, 0x9e,\n    0x3d, 0xf7, 0xf3, 0xe3, 0x0a, 0xfc, 0xff, 0x03, 0x00, 0x00, 0x78, 0x01,\n    0x08, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41,\n    0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,\n    0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30, 0x31, 0x32,\n    0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45,\n    0x46, 0x03\n  ];\n  checkSynth(\n    /*\n     * main_header: 24\n     * metablock_header_easy: 8388605, 0  // 2^23 - 3 = shortest 22-bit distance\n     * command_easy: 8388602, \"abc\", 1\n     * metablock_header_begin: 0, 0, 3, 0\n     * vlq_blocktypes: 1  // num litetal block types\n     * vlq_blocktypes: 1  // num command block types\n     * vlq_blocktypes: 1  // num distance block types\n     * ndirect: 0, 0\n     * bits: \"00\"  // literal context modes\n     * vlq_blocktypes: 1  // num literal Huffman trees\n     * // command has no context -> num trees == num block types\n     * vlq_blocktypes: 1  // num distance Huffman trees\n     * huffman_fixed: 256\n     * huffman_fixed: 704\n     * // Begin of distance Huffman tree. First 15 codes have lengths 1 to 15.\n     * // Symbol that corresponds to first half of 22-bit distance range is also\n     * // 15. All other symbols are 0.\n     * hskip: 0\n     * clcl_ordered: 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4, 5,5,5,5\n     * set_prefix_cl_rle: \"0000\", \"0001\", \"0010\", \"0011\", \\\n     *                    \"0100\", \"0101\", \"0110\", \"0111\", \\\n     *                    \"1000\", \"1001\", \"1010\", \"1011\", \\\n     *                    \"1100\", \"1101\", \\\n     *                    \"11100\", \"11101\", \"11110\", \"11111\"\n     * cl_rle: 1\n     * cl_rle: 2\n     * cl_rle: 3\n     * cl_rle: 4\n     * cl_rle: 5\n     * cl_rle: 6\n     * cl_rle: 7\n     * cl_rle: 8\n     * cl_rle: 9\n     * cl_rle: 10\n     * cl_rle: 11\n     * cl_rle: 12\n     * cl_rle: 13\n     * cl_rle: 14\n     * cl_rle: 15\n     * cl_rle_rep_0: 43\n     * cl_rle: 15  // literal number 97, that is, the letter 'a'\n     * // end of literal Huffman tree\n     * command_inscopy_easy: 0, 3  // Insert 0, copy 3\n     * // 15 bits of distance code plus 22 extra bits\n     * command_dist_bits: \"111111111111111\", \"0000000000000000000000\"\n     * metablock_uncompressed: \"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\"\n     * metablock_lastempty\n     */\n    compressed,\n    true,\n    'abc'\n    + times(8388602, 'c')\n    + 'abc'\n    + times(3, '0123456789ABCDEF')\n  );\n},\n\ntestTooManySymbolsRepeated() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc3, 0x3d, 0x80, 0x58, 0x82,\n    0x0c, 0x00, 0xc0, 0xc1, 0x96, 0x49, 0x0c, 0x90, 0x00, 0x00, 0xb8, 0xd3,\n    0x46, 0x01, 0x1a, 0x01\n  ];\n  checkSynth(\n    /*\n     * // This test is a copy of CustomHuffmanCode, with changed repeat count.\n     * main_header\n     * metablock_header_begin: 1, 0, 4, 0\n     * metablock_header_trivial_context\n     * hskip: 0\n     * clcl_ordered: 0,3,0,0,0,0,0,0,3,2,0,0,0,0,0,0,1,0\n     * set_prefix_cl_rle: \"\", \"110\", \"\", \"\", \"\", \"\", \"\", \"\", \"111\", \"10\",\\\n     *                    \"\", \"\", \"\", \"\", \"\", \"\", \"0\", \"\"\n     * cl_rle: 8\n     * cl_rle_rep: 9, 96\n     * cl_rle: 1\n     * cl_rle_rep: 9, 159 // 1 + 96 + 1 + 159 = 257 > 256 = alphabet size\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 4, 0\n     * command_literal_bits: 0, 0, 0, 101100010\n     */\n    compressed,\n    false,\n    'aaab'\n  );\n},\n\ntestTransformedDictWord() {\n  const compressed = [\n    0x1b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x09,\n    0x01, 0x01\n  ];\n  checkSynth(\n    /*\n     * // The stream consists of a transformed dictionary word.\n     * main_header\n     * metablock_header_easy: 9, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 5121  // 5 << 10 + 1\n     */\n    compressed,\n    true,\n    'time the '\n  );\n},\n\ntestTransformedDictWordTooLong() {\n  const compressed = [\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x09,\n    0x01, 0x01\n  ];\n  checkSynth(\n    /*\n     * // Has a transformed dictionary word that goes over the end of the\n     * // meta-block, but the base dictionary word fits in the meta-block.\n     * // Same as TransformedDictWord, but with a shorter meta-block length.\n     * main_header\n     * metablock_header_easy: 4, 1\n     * command_inscopy_easy: 0, 4\n     * command_dist_easy: 5121  // 5 << 10 + 1\n     */\n    compressed,\n    false,\n    ''\n  );\n},\n\ntestZeroCostCommand() {\n  const compressed = [\n    0xa1, 0xf8, 0x1f, 0x00, 0x00, 0xa1, 0x12, 0x82, 0x04, 0x00\n  ];\n  checkSynth(\n    /*\n     * main_header: 10\n     * metablock_header_begin: 1, 0, 1024, 0  // last, not empty, length, compressed\n     * metablock_header_trivial_context\n     * huffman_simple: 0,1,256, 42  // literal: any\n     * huffman_simple: 0,1,704, 130  // command: insert = 0, copy = 4, distance_code = -1\n     * huffman_simple: 0,1,64, 0 // distance: last\n     * // 256 0-bit commands with direct distances\n     */\n    compressed,\n    true,\n    times(256, 'left')\n  );\n},\n\ntestZeroCostLiterals() {\n  const compressed = [\n    0x9b, 0xff, 0xff, 0xff, 0x00, 0x20, 0x54, 0x00, 0x00, 0x38, 0xd8, 0x32,\n    0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0xcc, 0xe1, 0x7b, 0xfa, 0x0f\n  ];\n  checkSynth(\n    /*\n     * main_header\n     * metablock_header_begin: 1, 0, 16777216, 0\n     * metablock_header_trivial_context\n     * huffman_simple: 0,1,256, 42  // Single symbol alphabet\n     * huffman_fixed: 704\n     * huffman_fixed: 64\n     * command_inscopy_easy: 16777216, 0\n     * // 16777216 times 0 bits\n     */\n    compressed,\n    true,\n    times(16777216, '*')\n  );\n},\n\n/* GENERATED CODE END */\n};\n\ndescribe(\"DecodeSynthTest\", () => {\n  const testNames = Object.keys(allTests);\n  for (let i = 0; i < testNames.length; ++i) {\n    const testName = testNames[i] as keyof typeof allTests;\n    it(testName, allTests[testName]);\n  }\n});\n"
  },
  {
    "path": "js/decode_test.js",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\nimport {BrotliDecode} from \"./decode.js\";\n\n/**\n * @param {!Int8Array} bytes\n * @return {string}\n */\nfunction bytesToString(bytes) {\n  return String.fromCharCode.apply(null, new Uint16Array(bytes));\n}\n\n/**\n * @param {string} str\n * @return {!Int8Array}\n */\nfunction stringToBytes(str) {\n  let out = new Int8Array(str.length);\n  for (let i = 0; i < str.length; ++i) out[i] = str.charCodeAt(i);\n  return out;\n}\n\ndescribe('DecodeTest', () => {\n  it('testMetadata', () => {\n    expect('').toEqual(\n        bytesToString(BrotliDecode(Int8Array.from([1, 11, 0, 42, 3]))));\n  });\n\n  it('testCompoundDictionary', () => {\n    const txt = 'kot lomom kolol slona\\n';\n    const dictionary = stringToBytes(txt);\n    const compressed =\n        [0xa1, 0xa8, 0x00, 0xc0, 0x2f, 0x01, 0x10, 0xc4, 0x44, 0x09, 0x00];\n    expect(txt.length).toEqual(compressed.length * 2);\n    const options = {'customDictionary': dictionary};\n    expect(txt).toEqual(\n        bytesToString(BrotliDecode(Int8Array.from(compressed), options)));\n  });\n});\n"
  },
  {
    "path": "js/decode_test.ts",
    "content": "/* Copyright 2023 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\nimport 'jasmine';\n\nimport {brotliDecode} from './decode';\n\nfunction bytesToString(bytes: Int8Array): string {\n  const chars: number[] = new Uint16Array(bytes) as unknown as number[];\n  return String.fromCharCode.apply(null, chars);\n}\n\nfunction stringToBytes(str: string): Int8Array {\n  const out = new Int8Array(str.length);\n  for (let i = 0; i < str.length; ++i) out[i] = str.charCodeAt(i);\n  return out;\n}\n\ndescribe('DecodeTest', () => {\n  it('testMetadata', () => {\n    expect('').toEqual(\n        bytesToString(brotliDecode(Int8Array.from([1, 11, 0, 42, 3]))));\n  });\n\n  it('testCompoundDictionary', () => {\n    const txt = 'kot lomom kolol slona\\n';\n    const dictionary = stringToBytes(txt);\n    const compressed =\n        [0xa1, 0xa8, 0x00, 0xc0, 0x2f, 0x01, 0x10, 0xc4, 0x44, 0x09, 0x00];\n    expect(txt.length).toEqual(compressed.length * 2);\n    const options = {'customDictionary': dictionary};\n    expect(txt).toEqual(\n        bytesToString(brotliDecode(Int8Array.from(compressed), options)));\n  });\n});\n"
  },
  {
    "path": "js/package.json",
    "content": "{\n  \"name\": \"brotli\",\n  \"description\": \"Pure JavaScript Brotli implementation\",\n  \"bin\": {\n    \"brotli\": \"cli.js\"\n  },\n  \"files\": [\n    \"cli.js\",\n    \"decode.js\"\n  ],\n  \"dependencies\": {\n    \"yargs\": \"~8.0.2\"\n  }\n}\n"
  },
  {
    "path": "pyproject.toml",
    "content": "[build-system]\nrequires = [\"setuptools\", \"pkgconfig\"]\nbuild-backend = \"setuptools.build_meta\"\n"
  },
  {
    "path": "python/Makefile",
    "content": "# Copyright 2016 The Brotli Authors. All rights reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\n\n# Default (Build)\n.PHONY: all\n# Build\n.PHONY: build\n# Develop\n.PHONY: develop\n# Install\n.PHONY: install\n# Test\n.PHONY: test\n# Clean\n.PHONY: clean\n# Format\n.PHONY: fix\n\n\nPYTHON ?= python\nYAPF ?= yapf\n\nEXT_SUFFIX=$(shell $(PYTHON) -c 'import sysconfig; print(sysconfig.get_config_var(\"EXT_SUFFIX\"))')\nEXT_SOURCES=$(shell find . -name '*.cc')\nEXTENSIONS=$(EXT_SOURCES:%.cc=%$(EXT_SUFFIX))\n\n\nall: build\n\nbuild: $(EXTENSIONS)\n\n$(EXTENSIONS): $(EXT_SOURCES)\n\t@cd .. && $(PYTHON) setup.py build_ext --inplace\n\ndevelop:\n\t@cd .. && $(PYTHON) setup.py develop\n\ninstall:\n\t@cd .. && $(PYTHON) setup.py install\n\ntest: build\n\t@echo 'running tests'\n\t@$(PYTHON) -m unittest discover -v -p '*_test.py'\n\nclean:\n\t@cd .. && $(PYTHON) setup.py clean\n\t@find .. -name '*.pyc' | xargs rm -v\n\t@find .. -name '*.so' | xargs rm -v\n\t@find .. -type d -name '__pycache__' | xargs rm -v -r\n\t@find .. -type d -name '*.egg-info' | xargs rm -v -r\n\nfix:\n\t@echo 'formatting code'\n\t-@$(YAPF) --in-place --recursive --verify .\n"
  },
  {
    "path": "python/README.md",
    "content": "This directory contains the code for the Python `brotli` module,\nand roundtrip tests.\n\nOnly Python 3.10+ is supported.\n\nWe provide a `Makefile` to simplify common development commands.\n\n### Installation\n\nIf you just want to install the latest release of the Python `brotli`\nmodule, we recommend installing from [PyPI][]:\n\n    $ pip install brotli\n\nAlternatively, you may install directly from source by running the\nfollowing command from this directory:\n\n    $ make install\n\nIf you already have native Brotli installed on your system and want to use\nthis one instead of the vendored sources, you should set\nthe `USE_SYSTEM_BROTLI=1` environment variable when building the wheel,\nlike this:\n\n    $ USE_SYSTEM_BROTLI=1 pip install brotli --no-binary brotli\n\nBrotli is found via the `pkg-config` utility. Moreover, you must build\nall 3 `brotlicommon`, `brotlienc`, and `brotlidec` components. If you're\ninstalling brotli from the package manager, you need the development package,\nlike this on Fedora:\n\n    $ dnf install brotli brotli-devel\n\n### Development\n\nYou may run the following commands from this directory:\n\n    $ make          # Build the module in-place\n\n    $ make test     # Test the module\n\n    $ make clean    # Remove all temporary files and build output\n\nIf you wish to make the module available while still being\nable to edit the source files, you can use the `setuptools`\n\"[development mode][]\":\n\n    $ make develop  # Install the module in \"development mode\"\n\n### Code Style\n\nBrotli code follows the [Google Python Style Guide][].\nTo automatically format your code, first install [YAPF][]:\n\n    $ pip install yapf\n\nThen, to format all files in the project, you can run:\n\n    $ make fix      # Automatically format code\n\nSee the [YAPF usage][] documentation for more information.\n\n[PyPI]: https://pypi.org/project/Brotli/\n[development mode]: https://setuptools.readthedocs.io/en/latest/setuptools.html#development-mode\n[Google Python Style Guide]: https://google.github.io/styleguide/pyguide.html\n[YAPF]: https://github.com/google/yapf\n[YAPF usage]: https://github.com/google/yapf#usage\n"
  },
  {
    "path": "python/_brotli.c",
    "content": "#include <assert.h>\n#include <stddef.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#define PY_SSIZE_T_CLEAN 1\n#include <Python.h>\n#include <bytesobject.h>\n#include <structmember.h>\n\n#include <brotli/types.h>\n#include <brotli/decode.h>\n#include <brotli/encode.h>\n\n// 3.9  end-of-life is 2025-10-31.\n// 3.10 end-of-life is 2026-10.\n// 3.11 end-of-life is 2027-10.\n// 3.12 end-of-life is 2028-10.\n// 3.13 end-of-life is 2029-10.\n// 3.14 end-of-life is 2030-10.\n#if PY_MAJOR_VERSION < 3 || (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION < 10)\n#error \"Only Python 3.10+ is supported\"\n#endif\n\n/*\nDecoder / encoder nature does not support concurrent access. Attempt to enter\nconcurrently will result in an exception.\n\n\"Critical\" parts used in prologues to ensure that only one thread enters.\nFor consistency, we use them in epilogues as well. \"Critical\" is essential for\nfree-threaded. In GIL environment those rendered as a scope (i.e. `{` and `}`).\n\nNB: `Py_BEGIN_ALLOW_THREADS` / `Py_END_ALLOW_THREADS` are still required to\nunblock the stop-the-world GC.\n*/\n#ifdef Py_GIL_DISABLED\n#if PY_MAJOR_VERSION < 3 || (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION < 13)\n#error \"Critical sections are only available in Python 3.13+\"\n#endif\n#define BROTLI_CRITICAL_START Py_BEGIN_CRITICAL_SECTION(self)\n#define BROTLI_CRITICAL_END Py_END_CRITICAL_SECTION()\n#else\n#define BROTLI_CRITICAL_START {\n#define BROTLI_CRITICAL_END }\n#endif\n\nstatic const char kErrorAttr[] = \"error\";\nstatic const char kModuleAttr[] = \"_module\";\n\nstatic const char kInvalidBufferError[] =\n    \"brotli: data must be a C-contiguous buffer\";\nstatic const char kOomError[] = \"brotli: unable to allocate memory\";\nstatic const char kCompressCreateError[] =\n    \"brotli: failed to create native encoder instance\";\nstatic const char kCompressUnhealthyError[] = \"brotli: encoder is unhealthy\";\nstatic const char kCompressConcurrentError[] =\n    \"brotli: encoder concurrent access\";\nstatic const char kCompressError[] = \"brotli: encoder failed\";\nstatic const char kInvalidModeError[] = \"brotli: invalid mode\";\nstatic const char kInvalidQualityError[] =\n    \"brotli: invalid quality; range is 0 to 11\";\nstatic const char kInvalidLgwinError[] =\n    \"brotli: invalid lgwin; range is 10 to 24\";\nstatic const char kInvalidLgblockError[] =\n    \"brotli: invalid lgblock; range is 16 to 24, or 0\";\nstatic const char kDecompressCreateError[] =\n    \"brotli: failed to create native decoder instance\";\nstatic const char kDecompressUnhealthyError[] = \"brotli: decoder is unhealthy\";\nstatic const char kDecompressConcurrentError[] =\n    \"brotli: decoder concurrent access\";\nstatic const char kDecompressSinkError[] =\n    \"brotli: decoder process called with data when 'can_accept_more_data()' is \"\n    \"False\";\nstatic const char kDecompressError[] = \"brotli: decoder failed\";\n\n/* clang-format off */\nPyDoc_STRVAR(brotli_error_doc,\n\"An error occurred in the Brotli implementation.\");\nPyDoc_STRVAR(brotli_Compressor_doc,\n\"An object to compress a byte string.\\n\"\n\"\\n\"\n\"Signature:\\n\"\n\"  Compressor(mode=MODE_GENERIC, quality=11, lgwin=22, lgblock=0)\\n\"\n\"\\n\"\n\"Args:\\n\"\n\"  mode (int): The compression mode can be MODE_GENERIC (default),\\n\"\n\"    MODE_TEXT (for UTF-8 format text input) or MODE_FONT (for WOFF 2.0).\\n\"\n\"  quality (int): Controls the compression-speed vs compression-\\n\"\n\"    density tradeoff. The higher the quality, the slower the compression.\\n\"\n\"    Must be in [0 .. 11]. Defaults to 11.\\n\"\n\"  lgwin (int): Base 2 logarithm of the sliding window size.\\n\"\n\"    Must be in [10 .. 24]. Defaults to 22.\\n\"\n\"  lgblock (int): Base 2 logarithm of the maximum input block size.\\n\"\n\"    Must be 0 or in [16 .. 24]. If set to 0, the value will be set based\\n\"\n\"    on the quality. Defaults to 0.\\n\"\n\"\\n\"\n\"Raises:\\n\"\n\"  brotli.error: If arguments are invalid.\\n\");\nPyDoc_STRVAR(brotli_Compressor_process_doc,\n\"Process 'data' for compression, returning a bytes-object that contains\\n\"\n\"compressed output data. This data should be concatenated to the output\\n\"\n\"produced by any preceding calls to the 'process()' or 'flush()' methods.\\n\"\n\"Some or all of the input may be kept in internal buffers for later\\n\"\n\"processing, and the compressed output data may be empty until enough input\\n\"\n\"has been accumulated.\\n\"\n\"\\n\"\n\"Signature:\\n\"\n\"  process(data) -> bytes\\n\"\n\"\\n\"\n\"Args:\\n\"\n\"  data (bytes): The input data;\\n\"\n\"                MUST provide C-contiguous one-dimensional bytes view.\\n\"\n\"\\n\"\n\"Returns:\\n\"\n\"  The compressed output data (bytes)\\n\"\n\"\\n\"\n\"Raises:\\n\"\n\"  brotli.error: If compression fails\\n\");\nPyDoc_STRVAR(brotli_Compressor_flush_doc,\n\"Process all pending input, returning a bytes-object containing the remaining\\n\"\n\"compressed data. This data should be concatenated to the output produced by\\n\"\n\"any preceding calls to the 'process()' or 'flush()' methods.\\n\"\n\"\\n\"\n\"Signature:\\n\"\n\"  flush() -> bytes\\n\"\n\"\\n\"\n\"Returns:\\n\"\n\"  The compressed output data (bytes)\\n\"\n\"\\n\"\n\"Raises:\\n\"\n\"  brotli.error: If compression fails\\n\");\nPyDoc_STRVAR(brotli_Compressor_finish_doc,\n\"Process all pending input and complete all compression, returning\\n\"\n\"a 'bytes'-object containing the remaining compressed data. This data\\n\"\n\"should be concatenated to the output produced by any preceding calls\\n\"\n\"to the 'process()' or 'flush()' methods.\\n\"\n\"After calling 'finish()', the 'process()' and 'flush()' methods\\n\"\n\"cannot be called again, and a new \\\"Compressor\\\" object should be created.\\n\"\n\"\\n\"\n\"Signature:\\n\"\n\"  finish() -> bytes\\n\"\n\"\\n\"\n\"Returns:\\n\"\n\"  The compressed output data (bytes)\\n\"\n\"\\n\"\n\"Raises:\\n\"\n\"  brotli.error: If compression fails\\n\");\nPyDoc_STRVAR(brotli_Decompressor_doc,\n\"An object to decompress a byte string.\\n\"\n\"\\n\"\n\"Signature:\\n\"\n\"  Decompressor()\\n\"\n\"\\n\"\n\"Raises:\\n\"\n\"  brotli.error: If arguments are invalid.\\n\");\nPyDoc_STRVAR(brotli_Decompressor_process_doc,\n\"Process 'data' for decompression, returning a bytes-object that contains \\n\"\n\"decompressed output data. This data should be concatenated to the output\\n\"\n\"produced by any preceding calls to the 'process()' method.\\n\"\n\"Some or all of the input may be kept in internal buffers for later\\n\"\n\"processing, and the decompressed output data may be empty until enough input\\n\"\n\"has been accumulated.\\n\"\n\"\\n\"\n\"Signature:\\n\"\n\"  process(data, output_buffer_limit=int) -> bytes\\n\"\n\"\\n\"\n\"Args:\\n\"\n\"  data (bytes): The input data;\\n\"\n\"                MUST provide C-contiguous one-dimensional bytes view.\\n\"\n\"  output_buffer_limit (int): The maximum size of the output buffer.\\n\"\n\"                If set, the output buffer will not grow once its size\\n\"\n\"                equal or exceeding that value. If the limit is reached,\\n\"\n\"                further calls to process (potentially with empty input) will\\n\"\n\"                continue to yield more data. Following 'process()' must only\\n\"\n\"                be called with empty input until 'can_accept_more_data()'\\n\"\n\"                once returns True.\\n\"\n\"\\n\"\n\"Returns:\\n\"\n\"  The decompressed output data (bytes)\\n\"\n\"\\n\"\n\"Raises:\\n\"\n\"  brotli.error: If decompression fails\\n\");\nPyDoc_STRVAR(brotli_Decompressor_is_finished_doc,\n\"Checks if decoder instance reached the final state.\\n\"\n\"\\n\"\n\"Signature:\\n\"\n\"  is_finished() -> bool\\n\"\n\"\\n\"\n\"Returns:\\n\"\n\"  True  if the decoder is in a state where it reached the end of the input\\n\"\n\"        and produced all of the output\\n\"\n\"  False otherwise\\n\");\nPyDoc_STRVAR(brotli_Decompressor_can_accept_more_data_doc,\n\"Checks if the decoder instance can accept more compressed data.\\n\"\n\"If the 'process()' method on this instance of decompressor was never\\n\"\n\"called with 'max_length', this method will always return True.\\n\"\n\"\\n\"\n\"Signature:\"\n\"  can_accept_more_data() -> bool\\n\"\n\"\\n\"\n\"Returns:\\n\"\n\"  True  if the decoder is ready to accept more compressed data via\\n\"\n\"        'process()'\\n\"\n\"  False if the decoder needs to output some data via 'process(b'')'\\n\"\n\"        before being provided any more compressed data\\n\");\nPyDoc_STRVAR(brotli_decompress__doc__,\n\"Decompress a compressed byte string.\\n\"\n\"\\n\"\n\"Signature:\\n\"\n\"  decompress(data) -> bytes\\n\"\n\"\\n\"\n\"Args:\\n\"\n\"  data (bytes): The input data;\\n\"\n\"                MUST provide C-contiguous one-dimensional bytes view.\\n\"\n\"\\n\"\n\"Returns:\\n\"\n\"  The decompressed byte string.\\n\"\n\"\\n\"\n\"Raises:\\n\"\n\"  brotli.error: If decompressor fails.\\n\");\nPyDoc_STRVAR(brotli_doc,\n\"Implementation module for the Brotli library.\");\n/* clang-format on */\n\nstatic void set_brotli_exception(PyObject* t, const char* msg) {\n  PyObject* error = NULL;\n  PyObject* module = NULL;\n  assert(t != NULL);\n  assert(PyType_Check(t));\n  module = PyObject_GetAttrString(t, kModuleAttr);\n  if (!module) return; /* AttributeError raised. */\n  error = PyObject_GetAttrString(module, kErrorAttr);\n  Py_DECREF(module);\n  if (error == NULL) return; /* AttributeError raised. */\n  PyErr_SetString(error, msg);\n  Py_DECREF(error);\n}\n\nstatic void set_brotli_exception_from_module(PyObject* m, const char* msg) {\n  PyObject* error = NULL;\n  assert(m != NULL);\n  assert(PyModule_Check(m));\n  error = PyObject_GetAttrString(m, kErrorAttr);\n  if (error == NULL) return; /* AttributeError raised. */\n  PyErr_SetString(error, msg);\n  Py_DECREF(error);\n}\n\n/*\n   Checks if the `object` provides a C-bytes buffer view.\n   Returns non-zero on success.\n   Returns zero and sets an exception on failure.\n */\nstatic int get_data_view(PyObject* object, Py_buffer* view) {\n  /* PyBUF_SIMPLE means: no shape, no strides, no sub-offsets. */\n  if (PyObject_GetBuffer(object, view, PyBUF_SIMPLE) != 0) goto error;\n  if (view->len == 0) return 1;\n  /* https://docs.python.org/3/c-api/buffer.html:\n     If shape is NULL as a result of a PyBUF_SIMPLE or a PyBUF_WRITABLE request,\n    the consumer must disregard itemsize and assume itemsize == 1.*/\n  if (((view->ndim == 0) || (view->ndim == 1)) && (view->shape == NULL) &&\n      (view->strides == NULL)) {\n    return 1;\n  } else {\n    PyBuffer_Release(view);\n  }\nerror:\n  PyErr_SetString(PyExc_TypeError, kInvalidBufferError);\n  return 0;\n}\n\n/* --- Buffer --- */\n\ntypedef struct {\n  size_t size;\n  void* next; /* Block* */\n  uint8_t payload[16];\n} Block;\n\ntypedef struct {\n  Block* head;\n  Block* tail;\n  size_t avail_out;\n  uint8_t* next_out;\n  size_t num_blocks;\n  uint64_t total_allocated;\n} Buffer;\n\nstatic void Buffer_Init(Buffer* buffer) {\n  buffer->head = NULL;\n  buffer->tail = NULL;\n  buffer->avail_out = 0;\n  buffer->next_out = NULL;\n  buffer->num_blocks = 0;\n  buffer->total_allocated = 0;\n}\n\n/*\n   Grow the buffer.\n\n   Return 0 on success.\n   Return -1 on failure, but do NOT raise an exception.\n*/\nstatic int Buffer_Grow(Buffer* buffer) {\n  size_t log_size = buffer->num_blocks + 15;\n  size_t size = 1 << (log_size > 24 ? 24 : log_size);\n  size_t payload_size = size - offsetof(Block, payload);\n  Block* block = NULL;\n\n  assert(buffer->avail_out == 0);\n\n  if (buffer->total_allocated >= PY_SSIZE_T_MAX - payload_size) return -1;\n\n  assert(size > sizeof(Block));\n  block = (Block*)malloc(size);\n  if (block == NULL) return -1;\n  block->size = payload_size;\n  block->next = NULL;\n  if (buffer->head == NULL) {\n    buffer->head = block;\n  } else {\n    buffer->tail->next = block;\n  }\n  buffer->tail = block;\n  buffer->next_out = block->payload;\n  buffer->avail_out = payload_size;\n  buffer->total_allocated += payload_size;\n  buffer->num_blocks++;\n  return 0;\n}\n\nstatic void Buffer_Cleanup(Buffer* buffer) {\n  Block* block = NULL;\n  if (buffer->head == NULL) return;\n  block = buffer->head;\n  buffer->head = NULL;\n  while (block != NULL) {\n    Block* next = block->next;\n    block->next = NULL;\n    free(block);\n    block = next;\n  }\n}\n\n/*\n   Finish the buffer.\n\n   Return a bytes object on success.\n   Return NULL on OOM, but do NOT raise an exception.\n*/\nstatic PyObject* Buffer_Finish(Buffer* buffer) {\n  uint64_t out_size = buffer->total_allocated - buffer->avail_out;\n  Py_ssize_t len = (Py_ssize_t)out_size;\n  PyObject* result = NULL;\n  uint8_t* out = NULL;\n  Py_ssize_t pos = 0;\n  Block* block = NULL;\n  size_t tail_len = 0;\n\n  if ((uint64_t)len != out_size) {\n    return NULL;\n  }\n\n  result = PyBytes_FromStringAndSize(NULL, len);\n  if (result == NULL) {\n    PyErr_Clear(); /* OOM exception will be raised by callers. */\n    return NULL;\n  }\n  if (len == 0) return result;\n\n  out = (uint8_t*)PyBytes_AS_STRING(result);\n  block = buffer->head;\n  while (block != buffer->tail) {\n    memcpy(out + pos, block->payload, block->size);\n    pos += block->size;\n    block = block->next;\n  }\n  tail_len = block->size - buffer->avail_out;\n  if (tail_len > 0) {\n    memcpy(out + pos, block->payload, tail_len);\n  }\n  return result;\n}\n\n/* --- Compressor --- */\n\ntypedef struct {\n  PyObject_HEAD BrotliEncoderState* enc;\n  int healthy;\n  int processing;\n} PyBrotli_Compressor;\n\nstatic PyObject* brotli_Compressor_new(PyTypeObject* type, PyObject* args,\n                                       PyObject* keywds) {\n  /* `tp_itemsize` is 0, so `nitems` could be 0. */\n  PyBrotli_Compressor* self = (PyBrotli_Compressor*)type->tp_alloc(type, 0);\n  PyObject* self_type = (PyObject*)type;\n\n  if (self == NULL) return NULL;\n\n  self->healthy = 0;\n  self->processing = 0;\n  self->enc = BrotliEncoderCreateInstance(0, 0, 0);\n  if (self->enc == NULL) {\n    set_brotli_exception(self_type, kCompressCreateError);\n    Py_TYPE(self)->tp_free((PyObject*)self);\n    return NULL;\n  }\n  self->healthy = 1;\n\n  return (PyObject*)self;\n}\n\nstatic int brotli_Compressor_init(PyBrotli_Compressor* self, PyObject* args,\n                                  PyObject* keywds) {\n  static const char* kwlist[] = {\"mode\", \"quality\", \"lgwin\", \"lgblock\", NULL};\n\n  PyObject* self_type = (PyObject*)Py_TYPE((PyObject*)self);\n  unsigned char mode = BROTLI_DEFAULT_MODE;\n  unsigned char quality = BROTLI_DEFAULT_QUALITY;\n  unsigned char lgwin = BROTLI_DEFAULT_WINDOW;\n  unsigned char lgblock = 0;\n\n  int ok = PyArg_ParseTupleAndKeywords(args, keywds, \"|bbbb:Compressor\",\n                                       (char**)kwlist, &mode, &quality, &lgwin,\n                                       &lgblock);\n\n  assert(self->healthy);\n\n  if (!ok) {\n    self->healthy = 0;\n    return -1;\n  }\n\n  if ((mode == 0) || (mode == 1) || (mode == 2)) {\n    BrotliEncoderSetParameter(self->enc, BROTLI_PARAM_MODE, (uint32_t)mode);\n  } else {\n    set_brotli_exception(self_type, kInvalidModeError);\n    self->healthy = 0;\n    return -1;\n  }\n  if (quality <= 11) {\n    BrotliEncoderSetParameter(self->enc, BROTLI_PARAM_QUALITY,\n                              (uint32_t)quality);\n  } else {\n    set_brotli_exception(self_type, kInvalidQualityError);\n    self->healthy = 0;\n    return -1;\n  }\n  if ((10 <= lgwin) && (lgwin <= 24)) {\n    BrotliEncoderSetParameter(self->enc, BROTLI_PARAM_LGWIN, (uint32_t)lgwin);\n  } else {\n    set_brotli_exception(self_type, kInvalidLgwinError);\n    self->healthy = 0;\n    return -1;\n  }\n  if ((lgblock == 0) || ((16 <= lgblock) && (lgblock <= 24))) {\n    BrotliEncoderSetParameter(self->enc, BROTLI_PARAM_LGBLOCK,\n                              (uint32_t)lgblock);\n  } else {\n    set_brotli_exception(self_type, kInvalidLgblockError);\n    self->healthy = 0;\n    return -1;\n  }\n\n  return 0;\n}\n\nstatic void brotli_Compressor_dealloc(PyBrotli_Compressor* self) {\n  if (self->enc) BrotliEncoderDestroyInstance(self->enc);\n  Py_TYPE(self)->tp_free((PyObject*)self);\n}\n\nstatic int brotli_compressor_enter(PyBrotli_Compressor* self) {\n  PyObject* self_type = (PyObject*)Py_TYPE((PyObject*)self);\n  int ok = 1;\n\n  BROTLI_CRITICAL_START;\n  if (self->healthy == 0) {\n    set_brotli_exception(self_type, kCompressUnhealthyError);\n    ok = 0;\n  }\n  if (ok && self->processing != 0) {\n    set_brotli_exception(self_type, kCompressConcurrentError);\n    ok = 0;\n  }\n  if (ok) {\n    self->processing = 1;\n  }\n  BROTLI_CRITICAL_END;\n  return ok;\n}\n\nstatic void brotli_compressor_leave(PyBrotli_Compressor* self) {\n  BROTLI_CRITICAL_START;\n  assert(self->processing == 1);\n  self->processing = 0;\n  BROTLI_CRITICAL_END;\n}\n\n/*\n   Compress \"utility knife\" used for process / flush / finish.\n\n   Continues processing until all input is consumed.\n   Might return NULL on OOM or internal encoder error.\n */\nstatic PyObject* compress_stream(PyBrotli_Compressor* self,\n                                 BrotliEncoderOperation op, uint8_t* input,\n                                 size_t input_length) {\n  PyObject* self_type = (PyObject*)Py_TYPE((PyObject*)self);\n  size_t available_in = input_length;\n  const uint8_t* next_in = input;\n  Buffer buffer;\n  PyObject* ret = NULL;\n  int oom = 0;\n  BROTLI_BOOL ok = BROTLI_FALSE;\n  BrotliEncoderState* enc = self->enc;\n  /* Callers must ensure mutually exclusive access to the encoder. */\n  assert(self->processing == 1);\n\n  Buffer_Init(&buffer);\n  if (Buffer_Grow(&buffer) < 0) {\n    oom = 1;\n    goto error;\n  }\n\n  Py_BEGIN_ALLOW_THREADS;\n  while (1) {\n    ok = BrotliEncoderCompressStream(enc, op, &available_in, &next_in,\n                                     &buffer.avail_out, &buffer.next_out, NULL);\n    if (!ok) break;\n\n    if ((available_in > 0) || BrotliEncoderHasMoreOutput(enc)) {\n      if (buffer.avail_out == 0) {\n        if (Buffer_Grow(&buffer) < 0) {\n          oom = 1;\n          break;\n        }\n      }\n      continue;\n    }\n    break;\n  }\n  Py_END_ALLOW_THREADS;\n\n  if (oom) goto error;\n  if (ok) {\n    ret = Buffer_Finish(&buffer);\n    if (ret == NULL) oom = 1;\n  } else { /* Not ok */\n    set_brotli_exception(self_type, kCompressError);\n  }\n\nerror:\n  if (oom) {\n    PyErr_SetString(PyExc_MemoryError, kOomError);\n    assert(ret == NULL);\n  }\n  Buffer_Cleanup(&buffer);\n  if (PyErr_Occurred() != NULL) {\n    assert(ret == NULL);\n    self->healthy = 0;\n    return NULL;\n  }\n  return ret;\n}\n\nstatic PyObject* brotli_Compressor_process(PyBrotli_Compressor* self,\n                                           PyObject* args) {\n  PyObject* self_type = (PyObject*)Py_TYPE((PyObject*)self);\n  PyObject* ret = NULL;\n  PyObject* input_object = NULL;\n  Py_buffer input;\n  int ok = 1;\n\n  if (!brotli_compressor_enter(self)) return NULL;\n\n  if (!PyArg_ParseTuple(args, \"O:process\", &input_object)) {\n    ok = 0;\n  }\n  if (ok && !get_data_view(input_object, &input)) {\n    ok = 0;\n  }\n  if (!ok) {\n    self->healthy = 0;\n    brotli_compressor_leave(self);\n    return NULL;\n  }\n\n  ret = compress_stream(self, BROTLI_OPERATION_PROCESS, (uint8_t*)input.buf,\n                        input.len);\n  PyBuffer_Release(&input);\n  brotli_compressor_leave(self);\n\n  return ret;\n}\n\nstatic PyObject* brotli_Compressor_flush(PyBrotli_Compressor* self) {\n  PyObject* self_type = (PyObject*)Py_TYPE((PyObject*)self);\n  PyObject* ret = NULL;\n\n  if (!brotli_compressor_enter(self)) return NULL;\n  ret = compress_stream(self, BROTLI_OPERATION_FLUSH, NULL, 0);\n  brotli_compressor_leave(self);\n\n  return ret;\n}\n\nstatic PyObject* brotli_Compressor_finish(PyBrotli_Compressor* self) {\n  PyObject* self_type = (PyObject*)Py_TYPE((PyObject*)self);\n  PyObject* ret = NULL;\n\n  if (!brotli_compressor_enter(self)) return NULL;\n  ret = compress_stream(self, BROTLI_OPERATION_FINISH, NULL, 0);\n  brotli_compressor_leave(self);\n\n  if (ret != NULL) {\n    assert(BrotliEncoderIsFinished(self->enc));\n  }\n  return ret;\n}\n\n/* --- Decompressor --- */\n\ntypedef struct {\n  PyObject_HEAD BrotliDecoderState* dec;\n  uint8_t* unconsumed_data;\n  size_t unconsumed_data_length;\n  int healthy;\n  int processing;\n} PyBrotli_Decompressor;\n\nstatic PyObject* brotli_Decompressor_new(PyTypeObject* type, PyObject* args,\n                                         PyObject* keywds) {\n  /* `tp_itemsize` is 0, so `nitems` could be 0. */\n  PyBrotli_Decompressor* self = (PyBrotli_Decompressor*)type->tp_alloc(type, 0);\n  PyObject* self_type = (PyObject*)type;\n\n  if (self == NULL) return NULL;\n  self->healthy = 0;\n  self->processing = 0;\n\n  self->dec = BrotliDecoderCreateInstance(0, 0, 0);\n  if (self->dec == NULL) {\n    set_brotli_exception(self_type, kDecompressCreateError);\n    Py_TYPE(self)->tp_free((PyObject*)self);\n    return NULL;\n  }\n\n  self->unconsumed_data = NULL;\n  self->unconsumed_data_length = 0;\n  self->healthy = 1;\n\n  return (PyObject*)self;\n}\n\nstatic int brotli_Decompressor_init(PyBrotli_Decompressor* self, PyObject* args,\n                                    PyObject* keywds) {\n  static const char* kwlist[] = {NULL};\n\n  int ok = PyArg_ParseTupleAndKeywords(args, keywds, \"|:Decompressor\",\n                                       (char**)kwlist);\n\n  assert(self->healthy);\n\n  if (!ok) {\n    self->healthy = 0;\n    return -1;\n  }\n\n  return 0;\n}\n\nstatic int brotli_decompressor_enter(PyBrotli_Decompressor* self) {\n  PyObject* self_type = (PyObject*)Py_TYPE((PyObject*)self);\n  int ok = 1;\n\n  BROTLI_CRITICAL_START;\n  if (self->healthy == 0) {\n    set_brotli_exception(self_type, kDecompressUnhealthyError);\n    ok = 0;\n  }\n  if (ok && self->processing != 0) {\n    set_brotli_exception(self_type, kDecompressConcurrentError);\n    ok = 0;\n  }\n  if (ok) {\n    self->processing = 1;\n  }\n  BROTLI_CRITICAL_END;\n  return ok;\n}\n\nstatic void brotli_decompressor_leave(PyBrotli_Decompressor* self) {\n  BROTLI_CRITICAL_START;\n  assert(self->processing == 1);\n  self->processing = 0;\n  BROTLI_CRITICAL_END;\n}\n\nstatic void brotli_Decompressor_dealloc(PyBrotli_Decompressor* self) {\n  if (self->dec) BrotliDecoderDestroyInstance(self->dec);\n  if (self->unconsumed_data) {\n    free(self->unconsumed_data);\n    self->unconsumed_data = NULL;\n  }\n  Py_TYPE(self)->tp_free((PyObject*)self);\n}\n\nstatic PyObject* brotli_Decompressor_process(PyBrotli_Decompressor* self,\n                                             PyObject* args, PyObject* keywds) {\n  static const char* kwlist[] = {\"\", \"output_buffer_limit\", NULL};\n\n  PyObject* self_type = (PyObject*)Py_TYPE((PyObject*)self);\n  PyObject* ret = NULL;\n  PyObject* input_object = NULL;\n  Py_buffer input;\n  Py_ssize_t output_buffer_limit = PY_SSIZE_T_MAX;\n  const uint8_t* next_in = NULL;\n  size_t avail_in = 0;\n  BrotliDecoderResult result = BROTLI_DECODER_RESULT_ERROR;\n  Buffer buffer;\n  uint8_t* new_tail = NULL;\n  size_t new_tail_length = 0;\n  int oom = 0;\n  int ok = 1;\n\n  if (!brotli_decompressor_enter(self)) return NULL;\n\n  if (!PyArg_ParseTupleAndKeywords(args, keywds, \"O|n:process\", (char**)kwlist,\n                                   &input_object, &output_buffer_limit)) {\n    ok = 0;\n  }\n  if (ok && !get_data_view(input_object, &input)) {\n    ok = 0;\n  }\n  if (!ok) {\n    self->healthy = 0;\n    brotli_decompressor_leave(self);\n    return NULL;\n  }\n\n  Buffer_Init(&buffer);\n\n  if (self->unconsumed_data_length > 0) {\n    if (input.len > 0) {\n      set_brotli_exception(self_type, kDecompressSinkError);\n      goto finally;\n    }\n    next_in = self->unconsumed_data;\n    avail_in = self->unconsumed_data_length;\n  } else {\n    next_in = (uint8_t*)input.buf;\n    avail_in = input.len;\n  }\n\n  /* While not guaranteed, we expect that some output will be produced. */\n  if (Buffer_Grow(&buffer) < 0) {\n    oom = 1;\n    goto finally;\n  }\n\n  Py_BEGIN_ALLOW_THREADS;\n  while (1) {\n    result = BrotliDecoderDecompressStream(self->dec, &avail_in, &next_in,\n                                           &buffer.avail_out, &buffer.next_out,\n                                           NULL);\n\n    if (result == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) {\n      assert(buffer.avail_out == 0);\n      /* All allocated is used -> reached the output length limit. */\n      if (buffer.total_allocated >= (uint64_t)output_buffer_limit) break;\n      if (Buffer_Grow(&buffer) < 0) {\n        oom = 1;\n        break;\n      }\n      continue;\n    }\n    break;\n  }\n  Py_END_ALLOW_THREADS;\n\n  if (oom) {\n    goto finally;\n  } else if (result == BROTLI_DECODER_RESULT_ERROR) {\n    set_brotli_exception(self_type, kDecompressError);\n    goto finally;\n  }\n\n  /* Here result is either SUCCESS / NEEDS_MORE_INPUT / NEEDS_MORE_OUTPUT (if\n     `output_buffer_limit` was reached). */\n\n  if (avail_in > 0) {\n    new_tail = malloc(avail_in);\n    if (new_tail == NULL) {\n      oom = 1;\n      goto finally;\n    }\n    memcpy(new_tail, next_in, avail_in);\n    new_tail_length = avail_in;\n  }\n\n  if ((result == BROTLI_DECODER_RESULT_SUCCESS) && (avail_in > 0)) {\n    /* TODO(eustas): Add API to ignore / fetch unused \"tail\"? */\n    set_brotli_exception(self_type, kDecompressError);\n    goto finally;\n  }\n\n  ret = Buffer_Finish(&buffer);\n  if (ret == NULL) oom = 1;\n\nfinally:\n  if (oom) {\n    PyErr_SetString(PyExc_MemoryError, kOomError);\n    assert(ret == NULL);\n  }\n  PyBuffer_Release(&input);\n  Buffer_Cleanup(&buffer);\n  if (self->unconsumed_data) {\n    free(self->unconsumed_data);\n    self->unconsumed_data = NULL;\n  }\n  self->unconsumed_data = new_tail;\n  self->unconsumed_data_length = new_tail_length;\n  if (PyErr_Occurred() != NULL) {\n    assert(ret == NULL);\n    self->healthy = 0;\n  }\n  brotli_decompressor_leave(self);\n\n  return ret;\n}\n\nstatic PyObject* brotli_Decompressor_is_finished(PyBrotli_Decompressor* self) {\n  int result;\n  if (!brotli_decompressor_enter(self)) return NULL;\n  result = BrotliDecoderIsFinished(self->dec);\n  brotli_decompressor_leave(self);\n  if (result) {\n    Py_RETURN_TRUE;\n  } else {\n    Py_RETURN_FALSE;\n  }\n}\n\nstatic PyObject* brotli_Decompressor_can_accept_more_data(\n    PyBrotli_Decompressor* self) {\n  int result;\n  if (!brotli_decompressor_enter(self)) return NULL;\n  result = (self->unconsumed_data_length > 0);\n  brotli_decompressor_leave(self);\n  if (result) {\n    Py_RETURN_FALSE;\n  } else {\n    Py_RETURN_TRUE;\n  }\n}\n\n/* --- Module functions --- */\n\nstatic PyObject* brotli_decompress(PyObject* m, PyObject* args,\n                                   PyObject* keywds) {\n  static const char* kwlist[] = {\"string\", NULL};\n\n  BrotliDecoderState* state = NULL;\n  BrotliDecoderResult result = BROTLI_DECODER_RESULT_ERROR;\n  const uint8_t* next_in = NULL;\n  size_t available_in = 0;\n  Buffer buffer;\n  PyObject* ret = NULL;\n  PyObject* input_object = NULL;\n  Py_buffer input;\n  int oom = 0;\n\n  if (!PyArg_ParseTupleAndKeywords(args, keywds, \"O|:decompress\",\n                                   (char**)kwlist, &input_object)) {\n    return NULL;\n  }\n  if (!get_data_view(input_object, &input)) {\n    return NULL;\n  }\n\n  Buffer_Init(&buffer);\n\n  next_in = (uint8_t*)input.buf;\n  available_in = input.len;\n\n  state = BrotliDecoderCreateInstance(0, 0, 0);\n  if (state == NULL) {\n    oom = 1;\n    goto finally;\n  }\n\n  if (Buffer_Grow(&buffer) < 0) {\n    oom = 1;\n    goto finally;\n  }\n\n  Py_BEGIN_ALLOW_THREADS;\n  while (1) {\n    result = BrotliDecoderDecompressStream(\n        state, &available_in, &next_in, &buffer.avail_out, &buffer.next_out, 0);\n    if (result == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) {\n      assert(buffer.avail_out == 0);\n      if (Buffer_Grow(&buffer) < 0) {\n        oom = 1;\n        break;\n      }\n      continue;\n    }\n    break;\n  }\n  Py_END_ALLOW_THREADS;\n\n  if (oom) {\n    goto finally;\n  } else if (result != BROTLI_DECODER_RESULT_SUCCESS || available_in > 0) {\n    set_brotli_exception_from_module(m, kDecompressError);\n    goto finally;\n  }\n\n  ret = Buffer_Finish(&buffer);\n  if (ret == NULL) oom = 1;\n\nfinally:\n  if (oom) PyErr_SetString(PyExc_MemoryError, kOomError);\n  PyBuffer_Release(&input);\n  Buffer_Cleanup(&buffer);\n  if (state) BrotliDecoderDestroyInstance(state);\n  return ret;\n}\n\n/* Module definition */\n\nstatic PyMethodDef brotli_Compressor_methods[] = {\n    {\"process\", (PyCFunction)brotli_Compressor_process, METH_VARARGS,\n     brotli_Compressor_process_doc},\n    {\"flush\", (PyCFunction)brotli_Compressor_flush, METH_NOARGS,\n     brotli_Compressor_flush_doc},\n    {\"finish\", (PyCFunction)brotli_Compressor_finish, METH_NOARGS,\n     brotli_Compressor_finish_doc},\n    {NULL} /* Sentinel */\n};\n\nstatic PyType_Slot brotli_Compressor_slots[] = {\n    {Py_tp_dealloc, (destructor)brotli_Compressor_dealloc},\n    {Py_tp_doc, (void*)brotli_Compressor_doc},\n    {Py_tp_methods, brotli_Compressor_methods},\n    {Py_tp_init, (initproc)brotli_Compressor_init},\n    {Py_tp_new, brotli_Compressor_new},\n    {0, 0},\n};\n\nstatic PyType_Spec brotli_Compressor_spec = {\n    \"brotli.Compressor\", sizeof(PyBrotli_Compressor), 0,\n    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, brotli_Compressor_slots};\n\nstatic PyMethodDef brotli_Decompressor_methods[] = {\n    {\"process\", (PyCFunction)brotli_Decompressor_process,\n     METH_VARARGS | METH_KEYWORDS, brotli_Decompressor_process_doc},\n    {\"is_finished\", (PyCFunction)brotli_Decompressor_is_finished, METH_NOARGS,\n     brotli_Decompressor_is_finished_doc},\n    {\"can_accept_more_data\",\n     (PyCFunction)brotli_Decompressor_can_accept_more_data, METH_NOARGS,\n     brotli_Decompressor_can_accept_more_data_doc},\n    {NULL} /* Sentinel */\n};\n\nstatic PyType_Slot brotli_Decompressor_slots[] = {\n    {Py_tp_dealloc, (destructor)brotli_Decompressor_dealloc},\n    {Py_tp_doc, (void*)brotli_Decompressor_doc},\n    {Py_tp_methods, brotli_Decompressor_methods},\n    {Py_tp_init, (initproc)brotli_Decompressor_init},\n    {Py_tp_new, brotli_Decompressor_new},\n    {0, 0},\n};\n\nstatic PyType_Spec brotli_Decompressor_spec = {\n    \"brotli.Decompressor\", sizeof(PyBrotli_Decompressor), 0,\n    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, brotli_Decompressor_slots};\n\n/* Emulates PyModule_AddObject */\nstatic int RegisterObject(PyObject* mod, const char* name, PyObject* value) {\n  assert(value != NULL);\n  int ret = PyModule_AddObjectRef(mod, name, value);\n  /* Emulates PyModule_AddObject, i.e. decrements the reference count on\n     success. */\n  if (ret == 0) Py_DECREF(value);\n  return ret;\n}\n\nstatic int brotli_init_mod(PyObject* m) {\n  PyObject* error_type = NULL;\n  PyObject* compressor_type = NULL;\n  PyObject* decompressor_type = NULL;\n  assert(m != NULL);\n\n  error_type = PyErr_NewExceptionWithDoc((char*)\"brotli.error\",\n                                         brotli_error_doc, NULL, NULL);\n  if (error_type == NULL) goto error;\n\n  if (RegisterObject(m, kErrorAttr, error_type) < 0) goto error;\n  error_type = NULL;\n\n  compressor_type = PyType_FromSpec(&brotli_Compressor_spec);\n  decompressor_type = PyType_FromSpec(&brotli_Decompressor_spec);\n  if (compressor_type == NULL) goto error;\n  if (PyType_Ready((PyTypeObject*)compressor_type) < 0) goto error;\n  if (PyObject_SetAttrString(compressor_type, kModuleAttr, m) < 0) goto error;\n  if (RegisterObject(m, \"Compressor\", compressor_type) < 0) goto error;\n  compressor_type = NULL;\n\n  if (decompressor_type == NULL) goto error;\n  if (PyType_Ready((PyTypeObject*)decompressor_type) < 0) goto error;\n  if (PyObject_SetAttrString(decompressor_type, kModuleAttr, m) < 0) goto error;\n  if (RegisterObject(m, \"Decompressor\", decompressor_type) < 0) goto error;\n  decompressor_type = NULL;\n\n  PyModule_AddIntConstant(m, \"MODE_GENERIC\", (int)BROTLI_MODE_GENERIC);\n  PyModule_AddIntConstant(m, \"MODE_TEXT\", (int)BROTLI_MODE_TEXT);\n  PyModule_AddIntConstant(m, \"MODE_FONT\", (int)BROTLI_MODE_FONT);\n\n  char version[16]; /* 3 + 1 + 4 + 1 + 4 + 1 == 14 */\n  uint32_t decoderVersion = BrotliDecoderVersion();\n  snprintf(version, sizeof(version), \"%d.%d.%d\", decoderVersion >> 24,\n           (decoderVersion >> 12) & 0xFFF, decoderVersion & 0xFFF);\n  PyModule_AddStringConstant(m, \"__version__\", version);\n\n  return 0;\n\nerror:\n  if (error_type != NULL) {\n    Py_DECREF(error_type);\n    error_type = NULL;\n  }\n  if (compressor_type != NULL) {\n    Py_DECREF(compressor_type);\n    compressor_type = NULL;\n  }\n  if (decompressor_type != NULL) {\n    Py_DECREF(decompressor_type);\n    decompressor_type = NULL;\n  }\n  return -1;\n}\n\nstatic PyMethodDef brotli_methods[] = {\n    {\"decompress\", (PyCFunction)brotli_decompress, METH_VARARGS | METH_KEYWORDS,\n     brotli_decompress__doc__},\n    {NULL, NULL, 0, NULL}};\n\nstatic PyModuleDef_Slot brotli_mod_slots[] = {\n    {Py_mod_exec, brotli_init_mod},\n#ifdef Py_GIL_DISABLED\n    {Py_mod_gil, Py_MOD_GIL_NOT_USED},\n#elif (PY_MAJOR_VERSION > 3) || (PY_MINOR_VERSION >= 12)\n    {Py_mod_multiple_interpreters, Py_MOD_PER_INTERPRETER_GIL_SUPPORTED},\n#endif\n    {0, NULL}};\n\nstatic struct PyModuleDef brotli_module = {\n    PyModuleDef_HEAD_INIT,\n    \"_brotli\",        /* m_name */\n    brotli_doc,       /* m_doc */\n    0,                /* m_size */\n    brotli_methods,   /* m_methods */\n    brotli_mod_slots, /* m_slots */\n    NULL,             /* m_traverse */\n    NULL,             /* m_clear */\n    NULL              /* m_free */\n};\n\nPyMODINIT_FUNC PyInit__brotli(void) { return PyModuleDef_Init(&brotli_module); }\n"
  },
  {
    "path": "python/brotli.py",
    "content": "# Copyright 2016 The Brotli Authors. All rights reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\n\"\"\"Functions to compress and decompress data using the Brotli library.\"\"\"\n\nimport _brotli\n\n# The library version.\nversion = __version__ = _brotli.__version__\n\n# The compression mode.\nMODE_GENERIC = _brotli.MODE_GENERIC\nMODE_TEXT = _brotli.MODE_TEXT\nMODE_FONT = _brotli.MODE_FONT\n\n# The Compressor object.\nCompressor = _brotli.Compressor\n\n# The Decompressor object.\nDecompressor = _brotli.Decompressor\n\n# Compress a byte string.\ndef compress(string, mode=MODE_GENERIC, quality=11, lgwin=22, lgblock=0):\n    \"\"\"Compress a byte string.\n\n    Args:\n      string (bytes): The input data.\n      mode (int, optional): The compression mode; value 0 should be used for\n        generic input (MODE_GENERIC); value 1 might be beneficial for UTF-8 text\n        input (MODE_TEXT); value 2 tunes encoder for WOFF 2.0 data (MODE_FONT).\n        Defaults to 0.\n      quality (int, optional): Controls the compression-speed vs compression-\n        density tradeoff. The higher the quality, the slower the compression.\n        Range is 0 to 11. Defaults to 11.\n      lgwin (int, optional): Base 2 logarithm of the sliding window size. Range\n        is 10 to 24. Defaults to 22.\n      lgblock (int, optional): Base 2 logarithm of the maximum input block size.\n        Range is 16 to 24. If set to 0, the value will be set based on the\n        quality. Defaults to 0.\n\n    Returns:\n      The compressed byte string.\n\n    Raises:\n      brotli.error: If arguments are invalid, or compressor fails.\n    \"\"\"\n    compressor = Compressor(mode=mode, quality=quality, lgwin=lgwin,\n                            lgblock=lgblock)\n    return compressor.process(string) + compressor.finish()\n\n# Decompress a compressed byte string.\ndecompress = _brotli.decompress\n\n# Raised if compression or decompression fails.\nerror = _brotli.error\n"
  },
  {
    "path": "python/tests/__init__.py",
    "content": ""
  },
  {
    "path": "python/tests/_test_utils.py",
    "content": "\"\"\"Common utilities for Brotli tests.\"\"\"\n\nfrom __future__ import print_function\nimport glob\nimport os\nimport pathlib\nimport sys\nimport sysconfig\n\nproject_dir = str(pathlib.PurePath(__file__).parent.parent.parent)\nruntime_dir = os.getenv('TEST_SRCDIR')\ntest_dir = os.getenv('BROTLI_TESTS_PATH')\n\n# Fallbacks\nif test_dir and runtime_dir:\n  test_dir = os.path.join(runtime_dir, test_dir)\nelif test_dir is None:\n  test_dir = os.path.join(project_dir, 'tests')\n\n# Get the platform/version-specific build folder.\n# By default, the distutils build base is in the same location as setup.py.\nplatform_lib_name = 'lib.{platform}-{version[0]}.{version[1]}'.format(\n    platform=sysconfig.get_platform(), version=sys.version_info\n)\nbuild_dir = os.path.join(project_dir, 'bin', platform_lib_name)\n\n# Prepend the build folder to sys.path and the PYTHONPATH environment variable.\nif build_dir not in sys.path:\n  sys.path.insert(0, build_dir)\nTEST_ENV = dict(os.environ)\nif 'PYTHONPATH' not in TEST_ENV:\n  TEST_ENV['PYTHONPATH'] = build_dir\nelse:\n  TEST_ENV['PYTHONPATH'] = build_dir + os.pathsep + TEST_ENV['PYTHONPATH']\n\nTESTDATA_DIR = os.path.join(test_dir, 'testdata')\n\n\ndef gather_text_inputs():\n  \"\"\"Discover inputs for decompression tests.\"\"\"\n  all_inputs = [\n      'empty',  # Empty file\n      '10x10y',  # Small text\n      'alice29.txt',  # Large text\n      'random_org_10k.bin',  # Small data\n      'mapsdatazrh',  # Large data\n      'ukkonooa',  # Poem\n      'cp1251-utf16le',  # Codepage 1251 table saved in UTF16-LE encoding\n      'cp852-utf8',  # Codepage 852 table saved in UTF8 encoding\n      # TODO(eustas): add test on already compressed content\n  ]\n  # Filter out non-existing files; e.g. in lightweight sources pack.\n  return [\n      f for f in all_inputs if os.path.isfile(os.path.join(TESTDATA_DIR, f))\n  ]\n\n\ndef gather_compressed_inputs():\n  \"\"\"Discover inputs for compression tests.\"\"\"\n  candidates = glob.glob(os.path.join(TESTDATA_DIR, '*.compressed'))\n  pairs = [(f, f.split('.compressed')[0]) for f in candidates]\n  existing = [\n      pair\n      for pair in pairs\n      if os.path.isfile(pair[0]) and os.path.isfile(pair[1])\n  ]\n  return [\n      (os.path.basename(pair[0]), (os.path.basename(pair[1])))\n      for pair in existing\n  ]\n\n\ndef take_input(input_name):\n  with open(os.path.join(TESTDATA_DIR, input_name), 'rb') as f:\n    return f.read()\n\n\ndef has_input(input_name):\n  return os.path.isfile(os.path.join(TESTDATA_DIR, input_name))\n\n\ndef chunk_input(data, chunk_size):\n  return [data[i:i + chunk_size] for i in range(0, len(data), chunk_size)]\n"
  },
  {
    "path": "python/tests/compress_test.py",
    "content": "# Copyright 2016 The Brotli Authors. All rights reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\nimport brotli\nimport pytest\n\nfrom . import _test_utils\n\n\n@pytest.mark.parametrize(\"quality\", [1, 6, 9, 11])\n@pytest.mark.parametrize(\"lgwin\", [10, 15, 20, 24])\n@pytest.mark.parametrize(\"text_name\", _test_utils.gather_text_inputs())\ndef test_compress(quality, lgwin, text_name):\n  original = _test_utils.take_input(text_name)\n  compressed = brotli.compress(original, quality=quality, lgwin=lgwin)\n  decompressed = brotli.decompress(compressed)\n  assert original == decompressed\n"
  },
  {
    "path": "python/tests/compressor_test.py",
    "content": "# Copyright 2016 The Brotli Authors. All rights reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\nimport queue\nimport random\nimport threading\nimport time\n\nimport brotli\nimport pytest\n\nfrom . import _test_utils\n\n\n@pytest.mark.parametrize(\"quality\", [1, 6, 9, 11])\n@pytest.mark.parametrize(\"text_name\", _test_utils.gather_text_inputs())\ndef test_single_process(quality, text_name):\n  original = _test_utils.take_input(text_name)\n  compressor = brotli.Compressor(quality=quality)\n  compressed = compressor.process(original)\n  compressed += compressor.finish()\n  decompressed = brotli.decompress(compressed)\n  assert original == decompressed\n\n\n@pytest.mark.parametrize(\"quality\", [1, 6, 9, 11])\n@pytest.mark.parametrize(\"text_name\", _test_utils.gather_text_inputs())\ndef test_multiple_process(quality, text_name):\n  original = _test_utils.take_input(text_name)\n  chunk_size = 2048\n  chunks = _test_utils.chunk_input(original, chunk_size)\n  compressor = brotli.Compressor(quality=quality)\n  compressed = b\"\"\n  for chunk in chunks:\n    compressed += compressor.process(chunk)\n  compressed += compressor.finish()\n  decompressed = brotli.decompress(compressed)\n  assert original == decompressed\n\n\n@pytest.mark.parametrize(\"quality\", [1, 6, 9, 11])\n@pytest.mark.parametrize(\"text_name\", _test_utils.gather_text_inputs())\ndef test_multiple_process_and_flush(quality, text_name):\n  original = _test_utils.take_input(text_name)\n  chunk_size = 2048\n  chunks = _test_utils.chunk_input(original, chunk_size)\n  compressor = brotli.Compressor(quality=quality)\n  compressed = b\"\"\n  for chunk in chunks:\n    compressed += compressor.process(chunk)\n    compressed += compressor.flush()\n  compressed += compressor.finish()\n  decompressed = brotli.decompress(compressed)\n  assert original == decompressed\n\n\ndef make_input(size):\n  abc = [bytes([b]) for b in b\"abcdefghijklmnopqrstuvwxyz\"]\n  abc_cap = [bytes([b]) for b in b\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"]\n  num_words_by_len = [0, 25, 100, 175, 1700, 1000, 1000, 1000]\n  word_set = set()\n  rng = random.Random()\n  rng.seed(2025)\n  words_by_len = [[]]\n  for word_len in range(1, len(num_words_by_len)):\n    num_words = num_words_by_len[word_len]\n    words = []\n    for _ in range(num_words):\n      while True:\n        word = b\"\".join(\n            [rng.choice(abc_cap)]\n            + [rng.choice(abc) for _ in range(word_len - 1)]\n        )\n        if word not in word_set:\n          word_set.add(word)\n          words.append(word)\n          break\n    words_by_len.append(words)\n  total_size = 0\n  out = []\n  while total_size < size:\n    word_len = rng.choice(range(1, len(num_words_by_len)))\n    word = rng.choice(words_by_len[word_len])\n    total_size += len(word)\n    out.append(word)\n  return b\"\".join(out)\n\n\ndef _thread_compress(original, compressor, results):\n  compressed = compressor.process(original)\n  compressed += compressor.finish()\n  results.put(1)\n\n\ndef _thread_concurrent_process(compressor, results):\n  time.sleep(0.01)\n  try:\n    _ = compressor.process(b\"whatever\")\n  except brotli.error:\n    results.put(2)\n\n\ndef _thread_concurrent_flush(compressor, results):\n  time.sleep(0.02)\n  try:\n    _ = compressor.flush()\n  except brotli.error:\n    results.put(3)\n\n\ndef _thread_concurrent_finish(compressor, results):\n  time.sleep(0.03)\n  try:\n    _ = compressor.finish()\n  except brotli.error:\n    results.put(4)\n\n\ndef test_concurrency():\n  original = make_input(2 * 1024 * 1024)\n  compressor = brotli.Compressor(quality=9)\n  results = queue.Queue()\n  threads = []\n  threads.append(\n      threading.Thread(\n          target=_thread_compress, args=(original, compressor, results)\n      )\n  )\n  threads.append(\n      threading.Thread(\n          target=_thread_concurrent_process, args=(compressor, results)\n      )\n  )\n  threads.append(\n      threading.Thread(\n          target=_thread_concurrent_flush, args=(compressor, results)\n      )\n  )\n  threads.append(\n      threading.Thread(\n          target=_thread_concurrent_finish, args=(compressor, results)\n      )\n  )\n  for thread in threads:\n    thread.start()\n  for thread in threads:\n    thread.join()\n  assert sorted(results.queue) == [1, 2, 3, 4]\n"
  },
  {
    "path": "python/tests/decompress_test.py",
    "content": "# Copyright 2016 The Brotli Authors. All rights reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\nimport brotli\nimport pytest\n\nfrom . import _test_utils\n\n\n@pytest.mark.parametrize(\n    'compressed_name, original_name', _test_utils.gather_compressed_inputs()\n)\ndef test_decompress(compressed_name, original_name):\n  compressed = _test_utils.take_input(compressed_name)\n  original = _test_utils.take_input(original_name)\n  decompressed = brotli.decompress(compressed)\n  assert decompressed == original\n\n\ndef test_garbage_appended():\n  with pytest.raises(brotli.error):\n    brotli.decompress(brotli.compress(b'a') + b'a')\n"
  },
  {
    "path": "python/tests/decompressor_test.py",
    "content": "# Copyright 2016 The Brotli Authors. All rights reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\nimport queue\nimport threading\nimport time\n\nimport brotli\nimport pytest\n\nfrom . import _test_utils\n\nMIN_OUTPUT_BUFFER_SIZE = 32768  # Actually, several bytes less.\n\n\n@pytest.mark.parametrize(\n    'compressed_name, original_name', _test_utils.gather_compressed_inputs()\n)\ndef test_decompress(compressed_name, original_name):\n  decompressor = brotli.Decompressor()\n  compressed = _test_utils.take_input(compressed_name)\n  original = _test_utils.take_input(original_name)\n  chunk_size = 1\n  chunks = _test_utils.chunk_input(compressed, chunk_size)\n  decompressed = b''\n  for chunk in chunks:\n    decompressed += decompressor.process(chunk)\n  assert decompressor.is_finished()\n  assert original == decompressed\n\n\n@pytest.mark.parametrize(\n    'compressed_name, original_name', _test_utils.gather_compressed_inputs()\n)\ndef test_decompress_with_limit(compressed_name, original_name):\n  decompressor = brotli.Decompressor()\n  compressed = _test_utils.take_input(compressed_name)\n  original = _test_utils.take_input(original_name)\n  chunk_size = 10 * 1024\n  output_buffer_limit = 10922\n  chunks = _test_utils.chunk_input(compressed, chunk_size)\n  decompressed = b''\n  while not decompressor.is_finished():\n    data = b''\n    if decompressor.can_accept_more_data() and chunks:\n      data = chunks.pop(0)\n    decompressed_chunk = decompressor.process(\n        data, output_buffer_limit=output_buffer_limit\n    )\n    assert len(decompressed_chunk) <= MIN_OUTPUT_BUFFER_SIZE\n    decompressed += decompressed_chunk\n  assert not chunks\n  assert original == decompressed\n\n\ndef test_too_much_input():\n  decompressor = brotli.Decompressor()\n  compressed = _test_utils.take_input('zerosukkanooa.compressed')\n  decompressor.process(compressed[:-1], output_buffer_limit=10240)\n  # The following assertion checks whether the test setup is correct.\n  assert not decompressor.can_accept_more_data()\n  with pytest.raises(brotli.error):\n    decompressor.process(compressed[-1:])\n\n\ndef test_changing_limit():\n  decompressor = brotli.Decompressor()\n  input_name = 'zerosukkanooa'\n  compressed = _test_utils.take_input(input_name + '.compressed')\n  check_output = _test_utils.has_input(input_name)\n  decompressed = decompressor.process(\n      compressed[:-1], output_buffer_limit=10240\n  )\n  assert len(decompressed) <= MIN_OUTPUT_BUFFER_SIZE\n  while not decompressor.can_accept_more_data():\n    decompressed += decompressor.process(b'')\n  decompressed += decompressor.process(compressed[-1:])\n  if check_output:\n    original = _test_utils.take_input(input_name)\n    assert original == decompressed\n\n\ndef test_garbage_appended():\n  decompressor = brotli.Decompressor()\n  with pytest.raises(brotli.error):\n    decompressor.process(brotli.compress(b'a') + b'a')\n\n\ndef test_already_finished():\n  decompressor = brotli.Decompressor()\n  decompressor.process(brotli.compress(b'a'))\n  with pytest.raises(brotli.error):\n    decompressor.process(b'a')\n\n\ndef make_input(size):\n  compressor = brotli.Compressor(quality=1)\n  prologue = compressor.process(b'b')\n  prologue += compressor.flush()\n  filler = compressor.process(b'c')\n  filler += compressor.flush()\n  epilogue = compressor.finish()\n  return b''.join([prologue] + [filler] * (size // len(filler)) + [epilogue])\n\n\ndef _thread_decompress(compressed, decompressor, results):\n  _ = decompressor.process(compressed)\n  if decompressor.is_finished():\n    results.put(1)\n\n\ndef _thread_concurrent_process(decompressor, results):\n  time.sleep(0.01)\n  try:\n    _ = decompressor.process(b'')\n  except brotli.error:\n    results.put(2)\n\n\ndef _thread_concurrent_can_accept_more_data(decompressor, results):\n  time.sleep(0.02)\n  try:\n    _ = decompressor.can_accept_more_data()\n  except brotli.error:\n    results.put(3)\n\n\ndef _thread_concurrent_is_finished(decompressor, results):\n  time.sleep(0.03)\n  try:\n    _ = decompressor.is_finished()\n  except brotli.error:\n    results.put(4)\n\n\ndef test_concurrency():\n  compressed = make_input(16 * 1024 * 1024)\n  decompressor = brotli.Decompressor()\n  results = queue.Queue()\n  threads = []\n  threads.append(\n      threading.Thread(\n          target=_thread_decompress, args=(compressed, decompressor, results)\n      )\n  )\n  threads.append(\n      threading.Thread(\n          target=_thread_concurrent_process, args=(decompressor, results)\n      )\n  )\n  threads.append(\n      threading.Thread(\n          target=_thread_concurrent_can_accept_more_data,\n          args=(decompressor, results),\n      )\n  )\n  threads.append(\n      threading.Thread(\n          target=_thread_concurrent_is_finished, args=(decompressor, results)\n      )\n  )\n  for thread in threads:\n    thread.start()\n  for thread in threads:\n    thread.join()\n  assert sorted(results.queue) == [1, 2, 3, 4]\n"
  },
  {
    "path": "research/BUILD.bazel",
    "content": "# Description: brotli research tools.\n\nload(\"@rules_cc//cc:cc_binary.bzl\", \"cc_binary\")\nload(\"@rules_cc//cc:cc_library.bzl\", \"cc_library\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nlicenses([\"notice\"])  # MIT\n\ncc_library(\n    name = \"dm\",\n    srcs = [\"deorummolae.cc\"],\n    hdrs = [\"deorummolae.h\"],\n    deps = [\"@esaxx//:sais\"],\n)\n\ncc_library(\n    name = \"durchschlag\",\n    srcs = [\"durchschlag.cc\"],\n    hdrs = [\"durchschlag.h\"],\n    deps = [\"@divsufsort\"],\n)\n\ncc_library(\n    name = \"sieve\",\n    srcs = [\"sieve.cc\"],\n    hdrs = [\"sieve.h\"],\n)\n\ncc_binary(\n    name = \"dictionary_generator\",\n    srcs = [\"dictionary_generator.cc\"],\n    deps = [\n        \":dm\",\n        \":durchschlag\",\n        \":sieve\",\n    ],\n)\n\ncc_binary(\n    name = \"brotli_decoder\",\n    srcs = [\"brotli_decoder.c\"],\n    linkstatic = 1,\n    deps = [\"@org_brotli//:brotlidec\"],\n)\n"
  },
  {
    "path": "research/MODULE.bazel",
    "content": "# Copyright 2025 The Brotli Authors. All rights reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\n\"\"\"Brotli reference implementation\"\"\"\n\nmodule(\n    name = \"brotli_research\",\n    version = \"1.2.0\",\n    repo_name = \"org_brotli_research\",\n)\n\nbazel_dep(name = \"divsufsort\", version = \"2.0.1.bcr.1\")\nbazel_dep(name = \"esaxx\", version = \"20250106.1\")\nbazel_dep(name = \"rules_cc\", version = \"0.2.17\")\n\nbazel_dep(name = \"brotli\", version = \"1.2.0\", repo_name = \"org_brotli\")\nlocal_path_override(\n    module_name = \"brotli\",\n    path = \"..\",\n)\n"
  },
  {
    "path": "research/README.md",
    "content": "## Introduction\n\nIn this directory we publish simple tools to analyze backward reference distance distributions in LZ77 compression. We developed these tools to be able to make more efficient encoding of distances in large-window brotli. In large-window compression the average cost of a backward reference distance is higher, and this may allow for more advanced encoding strategies, such as delta coding or an increase in context size, to bring significant compression density improvements. Our tools visualize the backward references as histogram images, i.e., one pixel in the image shows how many distances of a certain range exist at a certain locality in the data. The human visual system is excellent at pattern detection, so we tried to roughly identify patterns visually before going into more quantitative analysis. These tools can turn out to be useful in development of  other LZ77-based compressors and we hope you try them out.\n\n\n## Tools\n### find\\_opt\\_references\n\nThis tool generates optimal (match-length-wise) backward references for every position in the input files and stores them in `*.dist` file described below.\n\nExample usage:\n\n    find_opt_references input.txt output.dist\n\n### draw\\_histogram\n\nThis tool generates a visualization of the distribution of backward references stored in `*.dist` file. The original file size has to be specified as a second parameter. The output is a grayscale PGM (binary) image.\n\nExample usage:\n\n    draw_histogram input.dist 65536 output.pgm\n\nHere's an example of resulting image:\n\n![](img/enwik9_brotli.png)\n\n### draw\\_diff\n\nThis tool generates a diff PPM (binary) image between two input 8-bit PGM (binary) images. Input images must be of same size. Useful for comparing different backward references distributions for same input file. Normally used for comparison of output images from `draw_histogram` tool.\n\nExample usage:\n\n    draw_diff image1.pgm image2.pgm diff.ppm\n\nFor example the diff of this image\n\n![](img/enwik9_brotli.png)\n\nand this image\n\n![](img/enwik9_opt.png)\n\nlooks like this:\n\n![](img/enwik9_diff.png)\n\n\n## Backward distance file format\n\nThe format of `*.dist` files is as follows:\n\n    [[     0| match length][     1|position|distance]...]\n     [1 byte|      4 bytes][1 byte| 4 bytes| 4 bytes]\n\nMore verbose explanation: for each backward reference there is a position-distance pair, also a copy length may be specified. Copy length is prefixed with flag byte 0, position-distance pair is prefixed with flag byte 1. Each number is a 32-bit integer. Copy length always comes before position-distance pair. Standalone copy length is allowed, in this case it is ignored.\n\nHere's an example of how to read from `*.dist` file:\n\n```c++\n#include \"read_dist.h\"\n\nFILE* f;\nint copy, pos, dist;\nwhile (ReadBackwardReference(fin, &copy, &pos, &dist)) {\n   ...\n}\n```\n"
  },
  {
    "path": "research/brotli_decoder.c",
    "content": "/* Copyright 2018 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include <stdio.h>\n#include <stdlib.h>\n\n#include <brotli/decode.h>\n\n#if !defined(_WIN32)\n#include <unistd.h>\n#else\n#include <io.h>\n#define fdopen _fdopen\n#if !defined(__MINGW32__)\n#define STDIN_FILENO _fileno(stdin)\n#define STDOUT_FILENO _fileno(stdout)\n#endif\n#endif\n\n#define BUFFER_SIZE (1u << 20)\n\ntypedef struct Context {\n  FILE* fin;\n  FILE* fout;\n  uint8_t* input_buffer;\n  uint8_t* output_buffer;\n  BrotliDecoderState* decoder;\n} Context;\n\nvoid init(Context* ctx) {\n  ctx->fin = 0;\n  ctx->fout = 0;\n  ctx->input_buffer = 0;\n  ctx->output_buffer = 0;\n  ctx->decoder = 0;\n}\n\nvoid cleanup(Context* ctx) {\n  if (ctx->decoder) BrotliDecoderDestroyInstance(ctx->decoder);\n  if (ctx->output_buffer) free(ctx->output_buffer);\n  if (ctx->input_buffer) free(ctx->input_buffer);\n  if (ctx->fout) fclose(ctx->fout);\n  if (ctx->fin) fclose(ctx->fin);\n}\n\nvoid fail(Context* ctx, const char* message) {\n  fprintf(stderr, \"%s\\n\", message);\n  cleanup(ctx);\n  exit(1);\n}\n\nint main(int argc, char** argv) {\n  Context ctx;\n  BrotliDecoderResult result = BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT;\n  size_t available_in;\n  const uint8_t* next_in;\n  size_t available_out = BUFFER_SIZE;\n  uint8_t* next_out;\n  init(&ctx);\n\n  ctx.fin = fdopen(STDIN_FILENO, \"rb\");\n  if (!ctx.fin) fail(&ctx, \"can't open input file\");\n  ctx.fout = fdopen(STDOUT_FILENO, \"wb\");\n  if (!ctx.fout) fail(&ctx, \"can't open output file\");\n  ctx.input_buffer = (uint8_t*)malloc(BUFFER_SIZE);\n  if (!ctx.input_buffer) fail(&ctx, \"out of memory / input buffer\");\n  ctx.output_buffer = (uint8_t*)malloc(BUFFER_SIZE);\n  if (!ctx.output_buffer) fail(&ctx, \"out of memory / output buffer\");\n  ctx.decoder = BrotliDecoderCreateInstance(0, 0, 0);\n  if (!ctx.decoder) fail(&ctx, \"out of memory / decoder\");\n  BrotliDecoderSetParameter(ctx.decoder, BROTLI_DECODER_PARAM_LARGE_WINDOW, 1);\n\n  next_out = ctx.output_buffer;\n  while (1) {\n    if (result == BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT) {\n      if (feof(ctx.fin)) break;\n      available_in = fread(ctx.input_buffer, 1, BUFFER_SIZE, ctx.fin);\n      next_in = ctx.input_buffer;\n      if (ferror(ctx.fin)) break;\n    } else if (result == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) {\n      fwrite(ctx.output_buffer, 1, BUFFER_SIZE, ctx.fout);\n      if (ferror(ctx.fout)) break;\n      available_out = BUFFER_SIZE;\n      next_out = ctx.output_buffer;\n    } else {\n      break;\n    }\n    result = BrotliDecoderDecompressStream(\n        ctx.decoder, &available_in, &next_in, &available_out, &next_out, 0);\n  }\n  if (next_out != ctx.output_buffer) {\n    fwrite(ctx.output_buffer, 1, next_out - ctx.output_buffer, ctx.fout);\n  }\n  if ((result == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) || ferror(ctx.fout)) {\n    fail(&ctx, \"failed to write output\");\n  } else if (result != BROTLI_DECODER_RESULT_SUCCESS) {\n    fail(&ctx, \"corrupt input\");\n  }\n  cleanup(&ctx);\n  return 0;\n}\n"
  },
  {
    "path": "research/brotlidump.py",
    "content": "#!python3\n\"\"\"Program to dump contents of Brotli compressed files showing the compression format.\nJurjen N.E. Bos, 2016.\nI found the following issues with the Brotli format:\n- The distance alphabet has size 16+(48<<POSTFIX),\n  but the last symbols are useless.\n  It could be lowered to 16+(44-POSTFIX<<POSTFIX), and this could matter.\n- The block type code is useless if NBLTYPES==2, you would only need 1 symbol\n  anyway, so why don't you just switch to \"the other\" type?\n\"\"\"\n# ruff: noqa\nimport struct\nfrom operator import itemgetter, methodcaller\nfrom itertools import accumulate, repeat\nfrom collections import defaultdict, deque\nfrom functools import partial\n\nDICTIONARY_PATH = 'dictionary.bin'\n\nclass InvalidStream(Exception): pass\n#lookup table\nL, I, D = \"literal\", \"insert&copy\", \"distance\"\npL, pI, pD = 'P'+L, 'P'+I, 'P'+D\n\ndef outputCharFormatter(c):\n    \"\"\"Show character in readable format\n    \"\"\"\n    #TODO 2: allow hex only output\n    if 32<c<127: return chr(c)\n    elif c==10: return '\\\\n'\n    elif c==13: return '\\\\r'\n    elif c==32: return '\" \"'\n    else: return '\\\\x{:02x}'.format(c)\n\ndef outputFormatter(s):\n    \"\"\"Show string or char.\n    \"\"\"\n    result = ''\n    def formatSubString(s):\n        for c in s:\n            if c==32: yield ' '\n            else: yield outputCharFormatter(c)\n    if len(result)<200: return ''.join(formatSubString(s))\n    else:\n        return ''.join(formatSubString(s[:100]))+'...'+ \\\n               ''.join(formatSubString(s[-100:]))\n\n\nclass BitStream:\n    \"\"\"Represent a bytes object. Can read bits and prefix codes the way\n    Brotli does.\n    \"\"\"\n    def __init__(self, byteString):\n        self.data = byteString\n        #position in bits: byte pos is pos>>3, bit pos is pos&7\n        self.pos = 0\n\n    def __repr__(self):\n        \"\"\"Representation\n        >>> olleke\n        BitStream(pos=0:0)\n        \"\"\"\n        return \"BitStream(pos={:x}:{})\".format(self.pos>>3, self.pos&7)\n\n    def read(self, n):\n        \"\"\"Read n bits from the stream and return as an integer.\n        Produces zero bits beyond the stream.\n        >>> olleke.data[0]==27\n        True\n        >>> olleke.read(5)\n        27\n\n        >>> olleke\n        BitStream(pos=0:5)\n        \"\"\"\n        value = self.peek(n)\n        self.pos += n\n        if self.pos>len(self.data)*8:\n            raise ValueError('Read past end of stream')\n        return value\n\n    def peek(self, n):\n        \"\"\"Peek an n bit integer from the stream without updating the pointer.\n        It is not an error to read beyond the end of the stream.\n        >>> olleke.data[:2]==b'\\x1b\\x2e' and 0x2e1b==11803\n        True\n        >>> olleke.peek(15)\n        11803\n        >>> hex(olleke.peek(32))\n        '0x2e1b'\n        \"\"\"\n        #read bytes that contain the data: self.data[self.pos>>3:self.pos+n+7>>3]\n        #convert to int: int.from_bytes(..., 'little')\n        #shift out the bits from the first byte: >>(self.pos&7)\n        #mask unwanted bits: & (1<<n)-1\n        return int.from_bytes(\n            self.data[self.pos>>3:self.pos+n+7>>3],\n            'little')>>(self.pos&7) & (1<<n)-1\n\n    def readBytes(self, n):\n        \"\"\"Read n bytes from the stream on a byte boundary.\n        \"\"\"\n        if self.pos&7: raise ValueError('readBytes: need byte boundary')\n        result = self.data[self.pos>>3:(self.pos>>3)+n]\n        self.pos += 8*n\n        return result\n\n#-----------------------Symbol-------------------------------------------\nclass Symbol:\n    \"\"\"A symbol in a code.\n    Refers back to the code that contains it.\n    Index is the place in the alphabet of the symbol.\n    \"\"\"\n    __slots__ = 'code', 'index'\n    def __init__(self, code, value):\n        self.code = code\n        self.index = value\n\n    def __repr__(self):\n        return 'Symbol({}, {})'.format(self.code.name, self.index)\n\n    def __len__(self):\n        \"\"\"Number of bits in the prefix notation of this symbol\n        \"\"\"\n        return self.code.length(self.index)\n\n    def __int__(self):\n        return self.index\n\n    #these routines call equivalent routine in Code class\n    def bitPattern(self):\n        \"\"\"Value of the symbol in the stream\n        \"\"\"\n        return self.code.bitPattern(self.index)\n\n    def extraBits(self):\n        \"\"\"Number of extra bits to read for this symbol\n        \"\"\"\n        return self.code.extraBits(self.index)\n\n    def __str__(self):\n        \"\"\"Short descriptor of the symbol without extra bits.\n        \"\"\"\n        return self.code.mnemonic(self.index)\n\n    #requiring optional extra bits, if self.code supports them\n    def value(self, extra=None):\n        \"\"\"The value used for processing. Can be a tuple.\n        with optional extra bits\n        \"\"\"\n        if isinstance(self.code, WithExtra):\n            if not 0<=extra<1<<self.extraBits():\n                raise ValueError(\"value: extra value doesn't fit in extraBits\")\n            return self.code.value(self.index, extra)\n        if extra is not None:\n            raise ValueError('value: no extra bits for this code')\n        return self.code.value(self.index)\n\n    def explanation(self, extra=None):\n        \"\"\"Long explanation of the value from the numeric value\n        with optional extra bits\n        Used by Layout.verboseRead when printing the value\n        \"\"\"\n        if isinstance(self.code, WithExtra):\n            return self.code.callback(self, extra)\n        return self.code.callback(self)\n\n#========================Code definitions==================================\nclass RangeDecoder:\n    \"\"\"A decoder for the Code class that assumes the symbols\n    are encoded consecutively in binary.\n    It all depends on the \"alphabetSize\" property.\n    The range runs from 0 to alphabetSize-1.\n    This is the default decoder.\n    \"\"\"\n    def __init__(self, *, alphabetSize=None, bitLength=None, **args):\n        if bitLength is not None: alphabetSize = 1<<bitLength\n        if alphabetSize is not None:\n            self.alphabetSize = alphabetSize\n            self.maxLength = (alphabetSize-1).bit_length()\n\n    def __len__(self):\n        return self.alphabetSize\n\n    def __iter__(self):\n        \"\"\"Produce all symbols.\n        \"\"\"\n        return map(partial(Symbol, self), range(len(self)))\n\n    def __getitem__(self, index):\n        if index>=self.alphabetSize: raise ValueError('index out of range')\n        return Symbol(self, index)\n\n    def bitPattern(self, index):\n        return '{:0{}b}'.format(index, self.maxLength)\n\n    def length(self, index):\n        \"\"\"Encoding length of given symbol.\n        Does not depend on index in this case.\n        \"\"\"\n        return self.maxLength\n\n    def decodePeek(self, data):\n        \"\"\"Find which symbol index matches the given data (from peek, as a number)\n        and return the number of bits decoded.\n        Can also be used to figure out length of a symbol.\n        \"\"\"\n        return self.maxLength, Symbol(self, data&(1<<self.maxLength)-1)\n\nclass PrefixDecoder:\n    \"\"\"A decoder for the Code class that uses a prefix code.\n    The code is determined by encoding:\n    encode[p] gives the index corresponding to bit pattern p.\n    Used setDecode(decodeTable) to switch the decoder from the default\n    to a prefix decoder, or pass decodeTable at init.\n    You can also use setLength(lengthTable)\n    to define the encoding from the lengths.\n    The set of symbol values does not need to be consecutive.\n    \"\"\"\n    def __init__(self, *, decodeTable=None, **args):\n        if decodeTable is not None: self.setDecode(decodeTable)\n\n    def __len__(self):\n        return len(self.decodeTable)\n\n    def __iter__(self):\n        def revBits(index):\n            return self.bitPattern(index)[::-1]\n        return (\n            Symbol(self, index)\n            for index in sorted(self.decodeTable.values(), key=revBits)\n            )\n\n    def __getitem__(self, index):\n        if index not in self.lengthTable:\n            raise ValueError('No symbol {}[{}]'.format(\n                self.__class__.__name__, index))\n        return Symbol(self, index)\n\n    def bitPattern(self, index):\n        bits = next(b for (b,s) in self.decodeTable.items() if s==index)\n        return '{:0{}b}'.format(bits, self.length(index))\n\n    def length(self, index):\n        \"\"\"Encoding length of given symbol.\n        \"\"\"\n        return self.lengthTable[index]\n\n    def decodePeek(self, data):\n        \"\"\"Find which symbol index matches the given data (from peek, as a number)\n        and return the number of bits decoded.\n        Can also be used to figure out length of a symbol.\n        \"\"\"\n        #do binary search for word length\n        #invariant: lo<=length<=hi\n        lo, hi = self.minLength, self.maxLength\n        while lo<=hi:\n            mid = lo+hi>>1\n            #note lo<=mid<hi at this point\n            mask = (1<<mid)-1\n            #lets see what happens if we guess length is mid\n            try: index = self.decodeTable[data&mask]\n            except KeyError:\n                #too many bits specified, reduce estimated length\n                hi = mid-1\n                continue\n            #we found a symbol, but there could be a longer match\n            symbolLength = self.lengthTable[index]\n            if symbolLength<=mid:\n                #all bits match, symbol must be right\n                return symbolLength, Symbol(self, index)\n            #there must be more bits to match\n            lo = mid+1\n        return lo, Symbol(self, index)\n\n    #routine to set up the tables\n    def setDecode(self, decodeTable):\n        \"\"\"Store decodeTable,\n        and compute lengthTable, minLength, maxLength from encodings.\n        \"\"\"\n        self.decodeTable = decodeTable\n        #set of symbols with unknown length\n        todo = set(decodeTable)\n        #bit size under investigation\n        maskLength = 0\n        lengthTable = {}\n        while todo:\n            mask = (1<<maskLength)-1\n            #split the encodings that we didn't find yet using b bits\n            splitSymbols = defaultdict(list)\n            for s in todo: splitSymbols[s&mask].append(s)\n            #unique encodings have a length of maskLength bits\n            #set length, and remove from todo list\n            for s,subset in splitSymbols.items():\n                if len(subset)==1:\n                    lengthTable[self.decodeTable[s]] = maskLength\n                    todo.remove(s)\n            #now investigate with longer mask\n            maskLength +=1\n        #save result\n        self.lengthTable = lengthTable\n        self.minLength = min(lengthTable.values())\n        self.maxLength = max(lengthTable.values())\n        self.switchToPrefix()\n\n    def setLength(self, lengthTable):\n        \"\"\"Given the bit pattern lengths for symbols given in lengthTable,\n        set decodeTable, minLength, maxLength\n        \"\"\"\n        self.lengthTable = lengthTable\n        self.minLength = min(lengthTable.values())\n        self.maxLength = max(lengthTable.values())\n        #compute the backwards codes first; then reverse them\n        #compute (backwards) first code for every separate lengths\n        nextCodes = []\n        #build codes for each length, from right to left\n        code = 0\n        for bits in range(self.maxLength+1):\n            code <<= 1\n            nextCodes.append(code)\n            code += sum(x==bits for x in lengthTable.values())\n        self.decodeTable = {}\n        #count codes for each length, and store reversed in the table\n        for symbol in sorted(lengthTable):\n            bits = lengthTable[symbol]\n            bitpattern = '{:0{}b}'.format(nextCodes[bits], bits)\n            self.decodeTable[int(bitpattern[::-1], 2)] = symbol\n            nextCodes[bits] += 1\n        self.switchToPrefix()\n\n    def switchToPrefix(self):\n        \"\"\"This routine makes sure the prefix decoder is activated.\n        \"\"\"\n        self.mode = PrefixDecoder\n\nclass Code(RangeDecoder, PrefixDecoder):\n    \"\"\"An alphabet of symbols, that can be read from a stream.\n    If you use setDecode or setLength, you have a prefix code,\n    otherwise you have a range code.\n    Features:\n    code[index] produces symbol with given index\n    value(index): value of symbol\n    mnemonic(index): short description of symbol\n    explanation(index): show meaning of symbol, shown in Layout.verboseRead\n    iter(code): produce all symbols in some order\n    name: show as context in Layout.verboseRead\n    \"\"\"\n    name = '?'\n    #callback is a function that gets the symbol and the extra bits\n    #default callback calls explanation\n    def __init__(self, name=None, *, callback=None, description='', **args):\n        \"\"\"Don't forget to set either alphabetSize or decodeTable\n        \"\"\"\n        #set name when provided, otherwise take class variable\n        if name is not None: self.name = name\n        if callback is not None: self.callback = callback\n        self.description = description\n        #mode switch\n        if 'bitLength' in args or 'alphabetSize' in args:\n            self.mode = RangeDecoder\n            RangeDecoder.__init__(self, **args)\n        elif 'decodeTable' in args:\n            self.mode = PrefixDecoder\n            PrefixDecoder.__init__(self, **args)\n        else:\n            super().__init__(**args)\n\n    def __repr__(self):\n        return self.__class__.__name__+' '+self.name\n\n    #the routines that get switched between RangeDecoder and PrefixDecoder\n    def __len__(self): return self.mode.__len__(self)\n    def __iter__(self): return self.mode.__iter__(self)\n    def __getitem__(self, index): return self.mode.__getitem__(self, index)\n    def bitPattern(self, index): return self.mode.bitPattern(self, index)\n    def length(self, index): return self.mode.length(self, index)\n    def decodePeek(self, data): return self.mode.decodePeek(self, data)\n    #general routines\n    def value(self, index, extra=None):\n        \"\"\"Get value of symbol for computations.\n        Override where needed.\n        \"\"\"\n        if extra is not None:\n            raise ValueError('value: no extra for this symbol')\n        return index\n\n    def mnemonic(self, index):\n        \"\"\"Give mnemonic of symbol.\n        Override where needed.\n        \"\"\"\n        return str(self.value(index))\n\n    def callback(self, symbol):\n        return self.explanation(symbol.index)\n\n    def explanation(self, index):\n        \"\"\"Long explanation of the value from the numeric value\n        This is a default routine.\n        You can customize in three ways:\n        - set description to add some text\n        - override to get more control\n        - set callback to make it dependent on you local variables\n        \"\"\"\n        value = self.value(index)\n        return '{0}{1}: {2}'.format(\n            self.description and self.description+': ',\n            self.bitPattern(index),\n            value,\n            )\n\n    def extraBits(self, index):\n        return 0\n\n    #Routines that use the decode interface\n    def showCode(self, width=80):\n        \"\"\"Show all words of the code in a nice format.\n        \"\"\"\n        #make table of all symbols with binary strings\n        symbolStrings = [\n            (self.bitPattern(s.index), self.mnemonic(s.index))\n            for s in self\n            ]\n        #determine column widths the way Lisp programmers do it\n        leftColWidth, rightColWidth = map(max, map(\n            map,\n            repeat(len),\n            zip(*symbolStrings)\n            ))\n        colwidth = leftColWidth+rightColWidth\n        columns = 81//(colwidth+2)\n        rows = -(-len(symbolStrings)//columns)\n        def justify(bs):\n            b,s = bs\n            return b.rjust(leftColWidth)+':'+s.ljust(rightColWidth)\n        for i in range(rows):\n            print(' '.join(map(justify, symbolStrings[i::rows])).rstrip())\n\n    def readTuple(self, stream):\n        \"\"\"Read symbol from stream. Returns symbol, length.\n        \"\"\"\n        length, symbol = self.decodePeek(stream.peek(self.maxLength))\n        stream.pos += length\n        return length, symbol\n\n    def readTupleAndExtra(self, stream):\n        return self.readTuple(stream)+(0, None)\n\nclass WithExtra(Code):\n    \"\"\"Extension for Code so that symbol may have extra bits associated.\n    If you supply an extraTable, you can use extraBits\n    You can define an extraTable,\n    which allows to call extraBits to get the number of extraBits.\n    Otherwise, you can supply extraBits yourself.\n    Routine readTupleAndExtra now reads the extra bits too.\n    Value probably needs to be overridden; see Enumerator.\n    Note: this does not give you an decodeTable.\n    \"\"\"\n    #redefine these if you don't want to use an extraTable\n    def extraBits(self, index):\n        \"\"\"Get the number of extra bits for this symbol.\n        \"\"\"\n        return self.extraTable[index]\n\n    def mnemonic(self, index):\n        \"\"\"This value must be independent of extra.\n        \"\"\"\n        return str(index)\n\n    def readTupleAndExtra(self, stream):\n        \"\"\"Read symbol and extrabits from stream.\n        Returns symbol length, symbol, extraBits, extra\n        >>> olleke.pos = 6\n        >>> MetablockLengthAlphabet().readTupleAndExtra(olleke)\n        (2, Symbol(MLEN, 4), 16, 46)\n        \"\"\"\n        length, symbol = self.decodePeek(stream.peek(self.maxLength))\n        stream.pos += length\n        extraBits = self.extraBits(symbol.index)\n        return length, symbol, extraBits, stream.read(extraBits)\n\n    def explanation(self, index, extra=None):\n        \"\"\"Expanded version of Code.explanation supporting extra bits.\n        If you don't supply extra, it is not mentioned.\n        \"\"\"\n        extraBits = 0 if extra is None else self.extraBits(index)\n        if not hasattr(self, 'extraTable'):\n            formatString = '{0}{3}'\n            lo = hi = value = self.value(index, extra)\n        elif extraBits==0:\n            formatString = '{0}{2}: {3}'\n            lo, hi = self.span(index)\n            value = lo\n        else:\n            formatString = '{0}{1} {2}: {3}-{4}; {3}+{5}={6}'\n            lo, hi = self.span(index)\n            value = lo+extra\n        return formatString.format(\n            self.description and self.description+': ',\n            'x'*extraBits,\n            self.bitPattern(index),\n            lo, hi,\n            extra,\n            value,\n            )\n\n    def callback(self, symbol, extra):\n        return self.explanation(symbol.index, extra)\n\nclass BoolCode(Code):\n    \"\"\"Same as Code(bitLength=1), but shows a boolean.\n    \"\"\"\n    def __init__(self, name=None, **args):\n        super().__init__(name, bitLength=1, **args)\n\n    def value(self, index, extra=None):\n        return bool(super().value(index, extra))\n\nclass Enumerator(WithExtra):\n    \"\"\"Code that is defined by the ExtraTable.\n    extraTable is a class variable that contains\n    the extraBits of the symbols from 0\n    value0 contains the value of symbol 0\n    encodings is not necessary, but allowed.\n    Note: place for FixedCode to make sure extraBits works\n    \"\"\"\n    def __init__(self, name=None, **args):\n        #if there is no decodeTable to determine length, compute it ourselves\n        if 'decodeTable' not in args:\n            args['alphabetSize'] = len(self.extraTable)\n        super().__init__(name, **args)\n\n    def __len__(self):\n        return len(self.extraTable)\n\n    def __getitem__(self, index):\n        \"\"\"Faster than PrefixDecoder\n        \"\"\"\n        if index>=len(self.extraTable):\n            raise ValueError(\"No symbol {}[{}]\".format(\n                self.__class__.__name__, index))\n        return Symbol(self, index)\n\n    def value(self, index, extra):\n        \"\"\"Override if you don't define value0 and extraTable\n        \"\"\"\n        lower, upper = self.span(index)\n        value = lower+(extra or 0)\n        if value>upper:\n            raise ValueError('value: extra out of range')\n        return value\n\n    def span(self, index):\n        \"\"\"Give the range of possible values in a tuple\n        Useful for mnemonic and explanation\n        \"\"\"\n        lower = self.value0+sum(1<<x for x in self.extraTable[:index])\n        upper = lower+(1<<self.extraTable[index])\n        return lower, upper-1\n\n#======================Code subclasses======================================\n#Alphabets used in the metablock header----------------------------------\n#For prefix codes\nclass PrefixCodeHeader(WithExtra):\n    \"\"\"Header of prefix codes.\n    \"\"\"\n    def __init__(self, codename):\n        super().__init__('PFX', bitLength=2)\n        #this is the name of the code that it describes\n        self.codename = codename\n\n    def extraBits(self, index):\n        return 2 if index==1 else 0\n\n    def value(self, index, extra):\n        \"\"\"Returns ('Simple', #codewords) or ('Complex', HSKIP)\n        \"\"\"\n        if index==1:\n            if extra>3:\n                raise ValueError('value: extra out of range')\n            return 'Simple', extra+1\n        if extra:\n            raise ValueError('value: extra out of range')\n        return 'Complex', index\n\n    def explanation(self, index, extra):\n        if index==1:\n            return '{} is simple with {} code word{}'.format(\n                self.codename, extra+1, 's' if extra else '')\n        lengths = [1, 2, 3, 4, 0, 5, 17, 6]\n        return '{} is complex with lengths {}...'.format(\n            self.codename,\n            ','.join(\n                map(str, lengths[index:index+5]))\n            )\n\nclass TreeShapeAlphabet(BoolCode):\n    \"\"\"The bit used to indicate if four word code is \"deep\" or \"wide\"\n    \"\"\"\n    name = 'SHAPE'\n    def value(self, index):\n        return [(2,2,2,2), (1,2,3,3)][index]\n\n    def explanation(self, index):\n        return str(bool(index))+': lengths {},{},{},{}'.format(*self.value(index))\n\nclass LengthOfLengthAlphabet(Code):\n    \"\"\"For use in decoding complex code descriptors.\n    >>> lengthOfLengthAlphabet = LengthOfLengthAlphabet('')\n    >>> print(lengthOfLengthAlphabet[2])\n    coded with 2 bits\n    >>> len(lengthOfLengthAlphabet[0])\n    2\n    >>> [len(lengthOfLengthAlphabet[x]) for x in range(6)]\n    [2, 4, 3, 2, 2, 4]\n    >>> lengthOfLengthAlphabet.showCode()\n      00:skipped             01:coded with 4 bits 0111:coded with 1 bits\n      10:coded with 3 bits  011:coded with 2 bits 1111:coded with 5 bits\n    \"\"\"\n    decodeTable = {\n         0b00:0,     0b10:3,\n       0b0111:1,     0b01:4,\n        0b011:2,   0b1111:5,\n       }\n\n    def __init__(self, name=None, **args):\n        super().__init__(name, decodeTable=self.decodeTable, **args)\n\n    def mnemonic(self, index):\n        if index==0: return 'skipped'\n        return 'coded with {} bits'.format(index)\n\n    def explanation(self, index, extra=None):\n        return self.description+': '+self.mnemonic(index)\n\nclass LengthAlphabet(WithExtra):\n    \"\"\"Length of symbols\n    Used during construction of a code.\n    \"\"\"\n    def __init__(self, name):\n        super().__init__(name, alphabetSize=18)\n\n    def extraBits(self, index):\n        return {16:2, 17:3}.get(index, 0)\n\n    def mnemonic(self, index):\n        if index==0: return 'unused'\n        elif index==16: return 'rep xx'\n        elif index==17: return 'zero xxx'\n        else: return 'len {}'.format(index)\n\n    def explanation(self, index, extra):\n        return self.description.format(self[index], extra)\n\n    def value(self, index, extra):\n        #the caller got the length already, so extra is enough\n        return extra\n\n#Stream header\nclass WindowSizeAlphabet(Code):\n    \"\"\"The alphabet used for window size in the stream header.\n    >>> WindowSizeAlphabet()[10].explanation()\n    'windowsize=(1<<10)-16=1008'\n    \"\"\"\n    decodeTable = {\n        0b0100001: 10,   0b1100001: 14,   0b0011: 18,   0b1011: 22,\n        0b0110001: 11,   0b1110001: 15,   0b0101: 19,   0b1101: 23,\n        0b1000001: 12,         0b0: 16,   0b0111: 20,   0b1111: 24,\n        0b1010001: 13,   0b0000001: 17,   0b1001: 21,\n        0b0010001: None,\n        }\n\n    name = 'WSIZE'\n\n    def __init__(self, name=None):\n        super().__init__(name, decodeTable=self.decodeTable)\n\n    def value(self, index):\n        #missing value gives index None\n        if index is None: return None\n        return (1<<index)-16\n\n    def explanation(self, index):\n        return 'windowsize=(1<<{})-16={}'.format(\n            index, (1<<index)-16)\n\n#Metablock\nclass MetablockLengthAlphabet(WithExtra):\n    \"\"\"Used for the meta block length;\n    also indicates a block with no data\n    >>> metablockLengthAlphabet = MetablockLengthAlphabet()\n    >>> metablockLengthAlphabet[0]; str(metablockLengthAlphabet[0])\n    Symbol(MLEN, 0)\n    'empty'\n    >>> metablockLengthAlphabet[3]\n    Traceback (most recent call last):\n        ...\n    ValueError: No symbol MetablockLengthAlphabet[3]\n    >>> print(metablockLengthAlphabet[4])\n    hhhh00\n    >>> metablockLengthAlphabet[4].value(0x1000)\n    4097\n    >>> metablockLengthAlphabet[5].value(0x1000)\n    Traceback (most recent call last):\n        ...\n    InvalidStream: Zeros in high nibble of MLEN\n    >>> metablockLengthAlphabet[5].explanation(0x12345)\n    'data length: 12345h+1=74566'\n    >>> metablockLengthAlphabet.showCode()\n    00:hhhh00   10:hhhhhh10 01:hhhhh01  11:empty\n    \"\"\"\n    decodeTable = {0b11:0, 0b00:4, 0b01:5, 0b10:6}\n\n    name = 'MLEN'\n    def __init__(self, name=None):\n        super().__init__(name, decodeTable=self.decodeTable)\n\n    def extraBits(self, index):\n        return index*4\n\n    def mnemonic(self, index):\n        if index==0: return 'empty'\n        return 'h'*(self.extraBits(index)//4)+self.bitPattern(index)\n\n    def value(self, index, extra):\n        extraBits = self.extraBits(index)\n        if not 0<=extra<1<<extraBits:\n            raise ValueError('value: extra out of range')\n        if index==0: return 0\n        if index>4 and extra>>extraBits-4==0: raise InvalidStream(\n            'Zeros in high nibble of MLEN')\n        return extra+1\n\n    def explanation(self, index, extra):\n        if index==0: return '11: empty block'\n        extraBits = self.extraBits(index)\n        return 'data length: {:0{}x}h+1={}'.format(extra, extraBits//4, extra+1)\n\n\nclass ReservedAlphabet(BoolCode):\n    \"\"\"The reserved bit that must be zero.\n    \"\"\"\n    name = 'RSVD'\n    def value(self, index):\n        if index: raise ValueError('Reserved bit is not zero')\n\n    def explanation(self, index):\n        return 'Reserved (must be zero)'\n\nclass FillerAlphabet(Code):\n    def __init__(self, *, streamPos):\n        super().__init__('SKIP', bitLength=(-streamPos)&7)\n\n    def explanation(self, index):\n        return '{} bit{} ignored'.format(\n            self.length(index),\n            '' if self.length(index)==1 else 's',\n            )\n\nclass SkipLengthAlphabet(WithExtra):\n    \"\"\"Used for the skip length in an empty metablock\n    >>> skipLengthAlphabet = SkipLengthAlphabet()\n    >>> skipLengthAlphabet[0]; str(skipLengthAlphabet[0])\n    Symbol(SKIP, 0)\n    'empty'\n    >>> skipLengthAlphabet[4]\n    Traceback (most recent call last):\n        ...\n    ValueError: index out of range\n    >>> print(skipLengthAlphabet[3])\n    hhhhhh11\n    >>> skipLengthAlphabet[2].value(0x1000)\n    4097\n    >>> skipLengthAlphabet[3].value(0x1000)\n    Traceback (most recent call last):\n        ...\n    InvalidStream: Zeros in high byte of SKIPBYTES\n    >>> skipLengthAlphabet[3].explanation(0x12345)\n    'skip length: 12345h+1=74566'\n    >>> skipLengthAlphabet.showCode()\n    00:empty    01:hh01     10:hhhh10   11:hhhhhh11\n    \"\"\"\n    def __init__(self):\n        super().__init__('SKIP', bitLength=2)\n\n    def extraBits(self, index):\n        return index*8\n\n    def mnemonic(self, index):\n        if index==0: return 'empty'\n        return 'h'*(self.extraBits(index)//4)+self.bitPattern(index)\n\n    def value(self, index, extra):\n        extraBits = self.extraBits(index)\n        if not 0<=extra<1<<extraBits:\n            raise ValueError('value: extra out of range')\n        if index==0: return 0\n        if index>1 and extra>>extraBits-8==0:\n            raise InvalidStream('Zeros in high byte of SKIPBYTES')\n        return extra+1\n\n    def explanation(self, index, extra):\n        if index==0: return '00: no skip'\n        extraBits = self.extraBits(index)\n        return 'skip length: {:{}x}h+1={}'.format(extra, extraBits//8, extra+1)\n\n\nclass TypeCountAlphabet(Enumerator):\n    \"\"\"Used for giving block type counts and tree counts.\n    >>> TypeCountAlphabet(description='').showCode()\n       0:0            0101:xx,0101      1011:xxxxx,1011\n    0001:0001         1101:xxxxxx,1101  0111:xxx,0111\n    1001:xxxx,1001    0011:x,0011       1111:xxxxxxx,1111\n    \"\"\"\n    decodeTable = {\n             0b0: 0,   0b1001: 5,\n          0b0001: 1,   0b1011: 6,\n          0b0011: 2,   0b1101: 7,\n          0b0101: 3,   0b1111: 8,\n          0b0111: 4,\n          }\n\n    value0 = 1\n    extraTable = [0, 0, 1, 2, 3, 4, 5, 6, 7]\n    name = 'BT#'\n\n    def __init__(self, name=None, *, description):\n        super().__init__(\n            name,\n            decodeTable=self.decodeTable,\n            description=description)\n\n    def mnemonic(self, index):\n        if index==0: return '0'\n        if index==1: return '0001'\n        return 'x'*(self.extraBits(index))+','+self.bitPattern(index)\n\n    def explanation(self, index, extra):\n        value = self.value(index, extra)\n        description = self.description\n        if value==1: description = description[:-1]\n        return '{}: {} {}'.format(\n            self.mnemonic(index),\n            value,\n            description)\n\nclass BlockTypeAlphabet(Code):\n    \"\"\"The block types; this code works for all three kinds.\n    >>> b = BlockTypeAlphabet('T', NBLTYPES=5)\n    >>> print(*(x for x in b))\n    prev +1 #0 #1 #2 #3 #4\n    \"\"\"\n    def __init__(self, name, NBLTYPES, **args):\n        super().__init__(name, alphabetSize=NBLTYPES+2, **args)\n        self.NBLTYPES = NBLTYPES\n\n    def mnemonic(self, index):\n        if index==0: return 'prev'\n        elif index==1: return '+1'\n        else: return '#'+str(index-2)\n\n    def value(self, index):\n        return index-2\n\n    def explanation(self, index):\n        if index==0: return '0: previous'\n        elif index==1: return '1: increment'\n        else: return 'Set block type to: '+str(index-2)\n\nclass BlockCountAlphabet(Enumerator):\n    \"\"\"Block counts\n    >>> b = BlockCountAlphabet('L')\n    >>> print(b[25])\n    [24*x]: BC16625-16793840\n    \"\"\"\n\n    value0 = 1\n    extraTable = [2,2,2,2,3, 3,3,3,4,4, 4,4,5,5,5, 5,6,6,7,8, 9,10,11,12,13, 24]\n    def __init__(self, name, **args):\n        super().__init__(name, alphabetSize=26, **args)\n\n    def mnemonic(self, index):\n        extraBits = self.extraBits(index)\n        return '{}: BC{}-{}'.format(\n            'x'*extraBits if index<5 else '[{}*x]'.format(extraBits),\n            *self.span(index))\n\n    def explanation(self, index, extra):\n        return 'Block count: '+super().explanation(index, extra)\n\nclass DistanceParamAlphabet(WithExtra):\n    \"\"\"The distance parameters NPOSTFIX and NDIRECT.\n    Although these are treated as two in the description, this is easier.\n    \"\"\"\n    def __init__(self):\n        super().__init__('DIST', bitLength=2)\n\n    def extraBits(self, index):\n        return 4\n\n    def value(self, index, extra):\n        \"\"\"Returns NPOSTFIX and NDIRECT<<NPOSTFIX\n        \"\"\"\n        if extra>15:\n            raise ValueError('value: extra out of range')\n        return index, extra<<index\n\n    def explanation(self, index, extra):\n        return '{} postfix bits and {:04b}<<{}={} direct codes'.format(\n            index, extra, index, extra<<index)\n\n    def mnemonic(self, index):\n        return 'PF'+str(index)\n\nclass LiteralContextMode(Code):\n    \"\"\"For the literal context modes.\n    >>> LiteralContextMode().showCode()\n    00:LSB6   01:MSB6   10:UTF8   11:Signed\n    >>> LiteralContextMode().explanation(2)\n    'Context mode for type 9: 2(UTF8)'\n    \"\"\"\n\n    def __init__(self, *, number=9):\n        super().__init__('LC'+str(number), bitLength=2)\n        self.number = number\n\n    def mnemonic(self, index):\n        return ['LSB6', 'MSB6', 'UTF8', 'Signed'][index]\n\n    def explanation(self, index):\n        return 'Context mode for type {}: {}({})'.format(\n            self.number,\n            index,\n            self.mnemonic(index))\n\nclass RLEmaxAlphabet(Enumerator):\n    \"\"\"Used for describing the run length encoding used for describing context maps.\n    >>> RLEmaxAlphabet().showCode()\n    0:1    1:more\n    \"\"\"\n    value0 = 0\n    extraTable = [0, 4]\n    name = 'RLE#'\n\n    def mnemonic(self, index):\n        return ['1', 'more'][index]\n\n    def explanation(self, index, extra):\n        description = self.description and self.description+': '\n        if index==0: return description+'No RLE coding'\n        return '{}xxxx 1: RLEMAX={}'.format(description, extra+1)\n\nclass TreeAlphabet(WithExtra):\n    \"\"\"The alphabet to enumerate entries (called trees) in the context map.\n    parameters are RLEMAX and NTREES\n    >>> t = TreeAlphabet('', RLEMAX=3, NTREES=5)\n    >>> len(t)\n    8\n    >>> print(t[2])\n    xx+4 zeroes\n    >>> t[3].explanation(2)\n    '8+010=10 zeroes'\n    >>> t[0].value(0)\n    (1, 0)\n    \"\"\"\n    name = 'CMI'\n    def __init__(self, name=None, *, RLEMAX, NTREES, **args):\n        super().__init__(name, alphabetSize=RLEMAX+NTREES, **args)\n        self.RLEMAX = RLEMAX\n        self.NTREES = NTREES\n\n    def extraBits(self, index):\n        if 0<index<=self.RLEMAX: return index\n        return 0\n\n    def mnemonic(self, index):\n        if index==0: return 'map #0'\n        if index<=self.RLEMAX:\n            return '{}+{} zeroes'.format('x'*index, 1<<index)\n        return 'map #{}'.format(index-self.RLEMAX)\n\n    def value(self, index, extra):\n        \"\"\"Give count and value.\"\"\"\n        index = index\n        if index==0: return 1, 0\n        if index<=self.RLEMAX: return (1<<index)+extra, 0\n        return 1, index-self.RLEMAX\n\n    def explanation(self, index, extra):\n        description = self.description and self.description+': '\n        if index==0: return description+'map #0'\n        if index<=self.RLEMAX:\n            return '{}+{:0{}b}={} zeroes'.format(\n                (1<<index),\n                extra, self.extraBits(index),\n                (1<<index)+extra)\n        return '{}map #{}-{}={}'.format(\n            description,\n            index, self.RLEMAX, index-self.RLEMAX)\n\n#Prefix alphabets for the data stream----------------------------------\nclass LiteralAlphabet(Code):\n    \"\"\"Alphabet of symbols.\n    \"\"\"\n    minLength = maxLength = 8\n    def __init__(self, number):\n        super().__init__('L'+str(number), alphabetSize=1<<8)\n\n    def mnemonic(self, index):\n        return outputCharFormatter(index)\n\n    def value(self, index, extra=None):\n        return index\n\n    def explanation(self, index, extra=None):\n        return self.mnemonic(index)\n\nclass InsertLengthAlphabet(Enumerator):\n    \"\"\"Intern code for insert counts\n    \"\"\"\n    value0 = 0\n    extraTable = [0,0,0,0,0, 0,1,1,2,2, 3,3,4,4,5, 5,6,7,8,9, 10,12,14,24]\n\nclass CopyLengthAlphabet(Enumerator):\n    value0 = 2\n    extraTable = [0,0,0,0,0, 0,0,0,1,1, 2,2,3,3,4, 4,5,5,6,7, 8,9,10,24]\n\nclass InsertAndCopyAlphabet(WithExtra):\n    \"\"\"The insert and copy code\n    >>> for x in range(0,704,704//13):\n    ...    print('{:10b}'.format(x), InsertAndCopyAlphabet()[x])\n             0 I0C2&D=0\n        110110 I6+xC8&D=0\n       1101100 I5C22+xxx&D=0\n      10100010 I4C4\n      11011000 I3C10+x\n     100001110 I14+xxC8\n     101000100 I10+xxC22+xxx\n     101111010 I98+xxxxxC14+xx\n     110110000 I6+xC70+xxxxx\n     111100110 I1090+[10*x]C8\n    1000011100 I26+xxxC326+[8*x]\n    1001010010 I322+[8*x]C14+xx\n    1010001000 I194+[7*x]C70+xxxxx\n    1010111110 I22594+[24*x]C1094+[10*x]\n    \"\"\"\n    insertLengthAlphabet = InsertLengthAlphabet(None)\n    copyLengthAlphabet = CopyLengthAlphabet(None)\n\n    def __init__(self, number=''):\n        super().__init__('IC'+str(number), bitLength=10)\n\n    def __len__(self):\n        return 704\n\n    def extraBits(self, index):\n        insertSymbol, copySymbol, dist0 = self.splitSymbol(index)\n        return InsertLengthAlphabet.extraTable[insertSymbol.index] + \\\n            CopyLengthAlphabet.extraTable[copySymbol.index]\n\n    def splitSymbol(self, index):\n        \"\"\"Give relevant values for computations:\n        (insertSymbol, copySymbol, dist0flag)\n        \"\"\"\n        #determine insert and copy upper bits from table\n        row = [0,0,1,1,2,2,1,3,2,3,3][index>>6]\n        col = [0,1,0,1,0,1,2,0,2,1,2][index>>6]\n        #determine inserts and copy sub codes\n        insertLengthCode = row<<3 | index>>3&7\n        if row: insertLengthCode -= 8\n        copyLengthCode = col<<3 | index&7\n        return (\n            Symbol(self.insertLengthAlphabet, insertLengthCode),\n            Symbol(self.copyLengthAlphabet, copyLengthCode),\n            row==0\n            )\n\n    def mnemonic(self, index):\n        \"\"\"Make a nice mnemonic\n        \"\"\"\n        i,c,d0 = self.splitSymbol(index)\n        iLower, _ = i.code.span(i.index)\n        iExtra = i.extraBits()\n        cLower, _ = c.code.span(c.index)\n        cExtra = c.extraBits()\n        return 'I{}{}{}C{}{}{}{}'.format(\n            iLower,\n            '+' if iExtra else '',\n            'x'*iExtra if iExtra<6 else '[{}*x]'.format(iExtra),\n            cLower,\n            '+' if cExtra else '',\n            'x'*cExtra if cExtra<6 else '[{}*x]'.format(cExtra),\n            '&D=0' if d0 else '')\n\n    def value(self, index, extra):\n        i,c,d0 = self.splitSymbol(index)\n        iExtra = i.extraBits()\n        ce, ie = extra>>iExtra, extra&(1<<iExtra)-1\n        insert = i.value(ie)\n        copy = c.value(ce)\n        return insert, copy, d0\n\n    def explanation(self, index, extra):\n        insert, copy, d0 = self.value(index, extra)\n        if d0: return 'Literal: {}, copy: {}, same distance'.format(insert, copy)\n        else: return 'Literal: {}, copy: {}'.format(insert, copy)\n\nclass DistanceAlphabet(WithExtra):\n    \"\"\"Represent the distance encoding.\n    Dynamically generated alphabet.\n    This is what the documentation should have said:\n    Ignoring offsets for the moment, the \"long\" encoding works as follows:\n    Write the distance in binary as follows:\n    1xy..yz..z, then the distance symbol consists of n..nxz..z\n    Where:\n    n is one less than number of bits in y\n    x is a single bit\n    y..y are n+1 extra bits (encoded in the bit stream)\n    z..z is NPOSTFIX bits that are part of the symbol\n    The offsets are so as to start at the lowest useable value:\n    if 1xyyyyz = distance +(4<<POSTFIX)-NDIRECT-1\n    then n..nxz..z is symbol -NDIRECT-16\n    >>> d = DistanceAlphabet('D', NPOSTFIX=2, NDIRECT=10)\n    >>> print(d[4], d[17], d[34])\n    last-1 1 10xx00-5\n    >>> [str(d[x]) for x in range(26, 32)]\n    ['10x00-5', '10x01-5', '10x10-5', '10x11-5', '11x00-5', '11x01-5']\n    \"\"\"\n    def __init__(self, number, *, NPOSTFIX, NDIRECT):\n        self.NPOSTFIX = NPOSTFIX\n        self.NDIRECT = NDIRECT\n        #set length\n        #Actually, not all symbols are used,\n        #only NDIRECT+16+(44-2*POSTFIX<<NPOSTFIX)\n        super().__init__('D'+str(number),\n            alphabetSize=self.NDIRECT+16+(48<<self.NPOSTFIX))\n\n    def extraBits(self, index):\n        \"\"\"Indicate how many extra bits are needed to interpret symbol\n        >>> d = DistanceAlphabet('D', NPOSTFIX=2, NDIRECT=10)\n        >>> [d[i].extraBits() for i in range(26)]\n        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n        >>> [d[i].extraBits() for i in range(26,36)]\n        [1, 1, 1, 1, 1, 1, 1, 1, 2, 2]\n        \"\"\"\n        if index<16+self.NDIRECT: return 0\n        return 1 + ((index - self.NDIRECT - 16) >> (self.NPOSTFIX + 1))\n\n    def value(self, dcode, dextra):\n        \"\"\"Decode value of symbol together with the extra bits.\n        >>> d = DistanceAlphabet('D', NPOSTFIX=2, NDIRECT=10)\n        >>> d[34].value(2)\n        (0, 35)\n        \"\"\"\n        if dcode<16:\n            return [(1,0),(2,0),(3,0),(4,0),\n                    (1,-1),(1,+1),(1,-2),(1,+2),(1,-3),(1,+3),\n                    (2,-1),(2,+1),(2,-2),(2,+2),(2,-3),(2,+3)\n                ][dcode]\n        if dcode<16+self.NDIRECT:\n            return (0,dcode-16)\n        #we use the original formulas, instead of my clear explanation\n        POSTFIX_MASK = (1 << self.NPOSTFIX) - 1\n        ndistbits = 1 + ((dcode - self.NDIRECT - 16) >> (self.NPOSTFIX + 1))\n        hcode = (dcode - self.NDIRECT - 16) >> self.NPOSTFIX\n        lcode = (dcode - self.NDIRECT - 16) & POSTFIX_MASK\n        offset = ((2 + (hcode & 1)) << ndistbits) - 4\n        distance = ((offset + dextra) << self.NPOSTFIX) + lcode + self.NDIRECT + 1\n        return (0,distance)\n\n    def mnemonic(self, index, verbose=False):\n        \"\"\"Give mnemonic representation of meaning.\n        verbose compresses strings of x's\n        \"\"\"\n        if index<16:\n            return ['last', '2last', '3last', '4last',\n                'last-1', 'last+1', 'last-2', 'last+2', 'last-3', 'last+3',\n                '2last-1', '2last+1', '2last-2', '2last+2', '2last-3', '2last+3'\n                ][index]\n        if index<16+self.NDIRECT:\n            return str(index-16)\n        #construct strings like \"1xx01-15\"\n        index -= self.NDIRECT+16\n        hcode = index >> self.NPOSTFIX\n        lcode = index & (1<<self.NPOSTFIX)-1\n        if self.NPOSTFIX: formatString = '1{0}{1}{2:0{3}b}{4:+d}'\n        else: formatString = '1{0}{1}{4:+d}'\n        return formatString.format(\n            hcode&1,\n            'x'*(2+hcode>>1) if hcode<13 or verbose else '[{}*x]'.format(2+hcode>>1),\n            lcode, self.NPOSTFIX,\n            self.NDIRECT+1-(4<<self.NPOSTFIX))\n\n    def explanation(self, index, extra):\n        \"\"\"\n        >>> d = DistanceAlphabet('D', NPOSTFIX=2, NDIRECT=10)\n        >>> d[55].explanation(13)\n        '11[1101]01-5: [0]+240'\n        \"\"\"\n        extraBits = self.extraBits(index)\n        extraString = '[{:0{}b}]'.format(extra, extraBits)\n        return '{0}: [{1[0]}]{1[1]:+d}'.format(\n            self.mnemonic(index, True).replace('x'*(extraBits or 1), extraString),\n            self.value(index, extra))\n\n#Classes for doing actual work------------------------------------------\nclass ContextModeKeeper:\n    \"\"\"For computing the literal context mode.\n    You feed it characters, and it computes indices in the context map.\n    \"\"\"\n    def __init__(self, mode):\n        self.chars = deque([0,0], maxlen=2)\n        self.mode = mode\n\n    def setContextMode(self, mode):\n        \"\"\"Switch to given context mode (0..3)\"\"\"\n        self.mode = mode\n    def getIndex(self):\n        if self.mode==0:  #LSB6\n            return self.chars[1]&0x3f\n        elif self.mode==1: #MSB6\n            return self.chars[1]>>2\n        elif self.mode==2: #UTF8: character class of previous and a bit of the second\n            p2,p1 = self.chars\n            return self.lut0[p1]|self.lut1[p2]\n        elif self.mode==3: #Signed: initial bits of last two bytes\n            p2,p1 = self.chars\n            return self.lut2[p1]<<3|self.lut2[p2]\n\n    def add(self, index):\n        \"\"\"Adjust the context for output char (as int).\"\"\"\n        self.chars.append(index)\n\n    #0: control     #16: quote  #32: ,:;  #48: AEIOU\n    #4: tab/lf/cr   #20: %      #36: .    #52: BC..Z\n    #8: space       #24: (<[{   #40: =    #56: aeiou\n    #12:!#$&*+-/?@| #28: )>]}   #44: 0-9  #60: bc..z\n    lut0 = [0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  4,  0,  0,  4,  0,  0,\n            0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,\n            8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12,\n           44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12,\n           12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48,\n           52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12,\n           12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56,\n           60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12,  0\n           ]+[0,1]*32+[2,3]*32\n    #0: space  1:punctuation  2:digit/upper 3:lower\n    lut1 = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n             0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n             0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n             2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,\n             1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n             2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,\n             1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n             3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0\n           ]+[0]*96+[2]*32\n    #initial bits: 8*0, 4*0, 2*0, 1*0, 1*1, 2*1, 4*1, 8*1\n    lut2 = [0]+[1]*15+[2]*48+[3]*64+[4]*64+[5]*48+[6]*15+[7]\n    assert len(lut0)==len(lut1)==len(lut2)==256\n\nclass WordList:\n    \"\"\"Word list.\n    >>> WordList().word(7, 35555)\n    b'Program to '\n    \"\"\"\n    NDBITS = [0,  0,  0,  0, 10, 10, 11, 11, 10, 10,\n             10, 10, 10,  9,  9,  8,  7,  7,  8,  7,\n              7,  6,  6,  5,  5]\n    def __init__(self):\n        self.file = open(DICTIONARY_PATH, 'rb')\n        self.compileActions()\n\n    def word(self, size, dist):\n        \"\"\"Get word\n        \"\"\"\n        #split dist in index and action\n        ndbits = self.NDBITS[size]\n        index = dist&(1<<ndbits)-1\n        action = dist>>ndbits\n        #compute position in file\n        position = sum(n<<self.NDBITS[n] for n in range(4,size))+size*index\n        self.file.seek(position)\n        return self.doAction(self.file.read(size), action)\n\n    def upperCase1(self, word):\n        word = word.decode('utf8')\n        word = word[0].upper()+word[1:]\n        return word.encode('utf8')\n\n\n    # Super compact form of action table.\n    # _ means space, .U means UpperCaseAll, U(w) means UpperCaseFirst\n    # typo:off\n    actionTable = r\"\"\"\n        0:w        25:w+_for_     50:w+\\n\\t       75:w+. This_100:w+ize_\n        1:w+_      26:w[3:]       51:w+:          76:w+,      101:w.U+.\n        2:_+w+_    27:w[:-2]      52:_+w+._       77:.+w+_    102:\\xc2\\xa0+w\n        3:w[1:]    28:w+_a_       53:w+ed_        78:U(w)+(   103:_+w+,\n        4:U(w)+_   29:w+_that_    54:w[9:]        79:U(w)+.   104:U(w)+=\"\n        5:w+_the_  30:_+U(w)      55:w[7:]        80:w+_not_  105:w.U+=\"\n        6:_+w      31:w+._        56:w[:-6]       81:_+w+=\"   106:w+ous_\n        7:s_+w+_   32:.+w         57:w+(          82:w+er_    107:w.U+,_\n        8:w+_of_   33:_+w+,_      58:U(w)+,_      83:_+w.U+_  108:U(w)+=\\'\n        9:U(w)     34:w[4:]       59:w[:-8]       84:w+al_    109:_+U(w)+,\n       10:w+_and_  35:w+_with_    60:w+_at_       85:_+w.U    110:_+w.U+=\"\n       11:w[2:]    36:w+\\'        61:w+ly_        86:w+=\\'    111:_+w.U+,_\n       12:w[:-1]   37:w+_from_    62:_the_+w+_of_ 87:w.U+\"    112:_+w.U+,\n       13:,_+w+_   38:w+_by_      63:w[:-5]       88:U(w)+._  113:w.U+(\n       14:w+,_     39:w[5:]       64:w[:-9]       89:_+w+(    114:w.U+._\n       15:_+U(w)+_ 40:w[6:]       65:_+U(w)+,_    90:w+ful_   115:_+w.U+.\n       16:w+_in_   41:_the_+w     66:U(w)+\"       91:_+U(w)+._116:w.U+=\\'\n       17:w+_to_   42:w[:-4]      67:.+w+(        92:w+ive_   117:_+w.U+._\n       18:e_+w+_   43:w+. The_    68:w.U+_        93:w+less_  118:_+U(w)+=\"\n       19:w+\"      44:w.U         69:U(w)+\">      94:w.U+\\'   119:_+w.U+=\\'\n       20:w+.      45:w+_on_      70:w+=\"         95:w+est_   120:_+U(w)+=\\'\n       21:w+\">     46:w+_as_      71:_+w+.        96:_+U(w)+.\n       22:w+\\n     47:w+_is_      72:.com/+w      97:w.U+\">\n       23:w[:-3]   48:w[:-7]                      98:_+w+=\\'\n       24:w+]      49:w[:-1]+ing_ 74:U(w)+\\'      99:U(w)+,\n        \"\"\"\n    # typo:on\n\n    def compileActions(self):\n        \"\"\"Build the action table from the text above\n        \"\"\"\n        import re\n        self.actionList = actions = [None]*121\n        #Action 73, which is too long, looks like this when expanded:\n        actions[73] = \"b' the '+w+b' of the '\"\n        #find out what the columns are\n        actionLines = self.actionTable.splitlines()\n        colonPositions = [m.start()\n            for m in re.finditer(':',actionLines[1])\n            ]+[100]\n        columns = [(colonPositions[i]-3,colonPositions[i+1]-3)\n            for i in range(len(colonPositions)-1)]\n        for line in self.actionTable.splitlines(keepends=False):\n            for start,end in columns:\n                action = line[start:end]\n                #skip empty actions\n                if not action or action.isspace(): continue\n                #chop it up, and check if the colon is properly placed\n                index, colon, action = action[:3], action[3], action[4:]\n                assert colon==':'\n                #remove filler spaces at right\n                action = action.rstrip()\n                #replace space symbols\n                action = action.replace('_', ' ')\n                wPos = action.index('w')\n                #add quotes around left string when present\n                #translation: any pattern from beginning, up to\n                #(but not including) a + following by a w later on\n                action = re.sub(r\"^(.*)(?=\\+[U(]*w)\", r\"b'\\1'\", action)\n                #add quotes around right string when present\n                #translation: anything with a w in it, followed by a +\n                #and a pattern up to the end\n                #(there is no variable lookbehind assertion,\n                #so we have to copy the pattern)\n                action = re.sub(r\"(w[[:\\-1\\]).U]*)\\+(.*)$\", r\"\\1+b'\\2'\", action)\n                #expand shortcut for uppercaseAll\n                action = action.replace(\".U\", \".upper()\")\n                #store action\n                actions[int(index)] = action\n\n    def doAction(self, w, action):\n        \"\"\"Perform the proper action\n        \"\"\"\n        #set environment for the UpperCaseFirst\n        U = self.upperCase1\n        return eval(self.actionList[action], locals())\n\nclass Layout:\n    \"\"\"Class to layout the output.\n    \"\"\"\n    #display width of hexdata+bitdata\n    width = 25\n    #general\n    def __init__(self, stream):\n        self.stream = stream\n        self.bitPtr = self.width\n\n    def makeHexData(self, pos):\n        \"\"\"Produce hex dump of all data containing the bits\n        from pos to stream.pos\n        \"\"\"\n        firstAddress = pos+7>>3\n        lastAddress = self.stream.pos+7>>3\n        return ''.join(map('{:02x} '.format,\n            self.stream.data[firstAddress:lastAddress]))\n\n    def formatBitData(self, pos, width1, width2=0):\n        \"\"\"Show formatted bit data:\n        Bytes are separated by commas\n        whole bytes are displayed in hex\n        >>> Layout(olleke).formatBitData(6, 2, 16)\n        '|00h|2Eh,|00'\n        >>> Layout(olleke).formatBitData(4, 1, 0)\n        '1'\n        \"\"\"\n        result = []\n        #make empty prefix code explicit\n        if width1==0: result = ['()', ',']\n        for width in width1, width2:\n            #skip empty width2\n            if width==0: continue\n            #build result backwards in a list\n            while width>0:\n                availableBits = 8-(pos&7)\n                if width<availableBits:\n                    #read partial byte, beginning nor ending at boundary\n                    data = self.stream.data[pos>>3] >> (pos&7) & (1<<width)-1\n                    result.append('{:0{}b}'.format(data, width))\n                elif availableBits<8:\n                    #read rest of byte, ending at boundary\n                    data = self.stream.data[pos>>3] >> (pos&7)\n                    result.append('|{:0{}b}'.format(data, availableBits))\n                else:\n                    #read whole byte (in hex), beginning and ending at boundary\n                    data = self.stream.data[pos>>3]\n                    result.append('|{:02X}h'.format(data))\n                width -= availableBits\n                pos += availableBits\n            #if width overshot from the availableBits subtraction, fix it\n            pos += width\n            #add comma to separate fields\n            result.append(',')\n        #concatenate pieces, reversed, skipping the last space\n        return ''.join(result[-2::-1])\n\n    def readPrefixCode(self, alphabet):\n        \"\"\"give alphabet the prefix code that is read from the stream\n        Called for the following alphabets, in this order:\n        The alphabet in question must have a \"logical\" order,\n        otherwise the assignment of symbols doesn't work.\n        \"\"\"\n        mode, numberOfSymbols = self.verboseRead(PrefixCodeHeader(alphabet.name))\n        if mode=='Complex':\n            #for a complex code, numberOfSymbols means hskip\n            self.readComplexCode(numberOfSymbols, alphabet)\n            return alphabet\n        else:\n            table = []\n            #Set table of lengths for mnemonic function\n            lengths = [[0], [1,1], [1,2,2], '????'][numberOfSymbols-1]\n            #adjust mnemonic function of alphabet class\n            def myMnemonic(index):\n                return '{} bit{}: {}'.format(\n                    lengths[i],\n                    '' if lengths[i]==1 else 's',\n                    alphabet.__class__.mnemonic(alphabet, index)\n                    )\n            alphabet.mnemonic = myMnemonic\n            for i in range(numberOfSymbols):\n                table.append(self.verboseRead(alphabet, skipExtra=True).index)\n            #restore mnemonic\n            del alphabet.mnemonic\n            if numberOfSymbols==4:\n                #read tree shape to redefine lengths\n                lengths = self.verboseRead(TreeShapeAlphabet())\n            #construct the alphabet prefix code\n            alphabet.setLength(dict(zip(table, lengths)))\n        return alphabet\n\n    def readComplexCode(self, hskip, alphabet):\n        \"\"\"Read complex code\"\"\"\n        stream = self.stream\n        #read the lengths for the length code\n        lengths = [1,2,3,4,0,5,17,6,16,7,8,9,10,11,12,13,14,15][hskip:]\n        codeLengths = {}\n        total = 0\n        lol = LengthOfLengthAlphabet('##'+alphabet.name)\n        #lengthCode will be used for coding the lengths of the new code\n        #we use it for display until now; definition comes below\n        lengthCode = LengthAlphabet('#'+alphabet.name)\n        lengthIter = iter(lengths)\n        lengthsLeft = len(lengths)\n        while total<32 and lengthsLeft>0:\n            lengthsLeft -= 1\n            newSymbol = next(lengthIter)\n            lol.description = str(lengthCode[newSymbol])\n            length = self.verboseRead(lol)\n            if length:\n                codeLengths[newSymbol] = length\n                total += 32>>length\n        if total>32: raise ValueError(\"Stream format\")\n        if len(codeLengths)==1: codeLengths[list(codeLengths.keys())[0]] = 0\n        #Now set the encoding of the lengthCode\n        lengthCode.setLength(codeLengths)\n        print(\"***** Lengths for {} will be coded as:\".format(alphabet.name))\n        lengthCode.showCode()\n        #Now determine the symbol lengths with the lengthCode\n        symbolLengths = {}\n        total = 0\n        lastLength = 8\n        alphabetIter = iter(alphabet)\n        while total<32768:\n            #look ahead to see what is going to happen\n            length = lengthCode.decodePeek(\n                self.stream.peek(lengthCode.maxLength))[1].index\n            #in every branch, set lengthCode.description to explanatory text\n            #lengthCode calls format(symbol, extra) with this string\n            if length==0:\n                symbol = next(alphabetIter)\n                lengthCode.description = 'symbol {} unused'.format(symbol)\n                self.verboseRead(lengthCode)\n                #unused symbol\n                continue\n            if length==16:\n                lengthCode.description = \\\n                    '{1}+3 symbols of length '+str(lastLength)\n                extra = self.verboseRead(lengthCode)\n                #scan series of 16s (repeat counts)\n                #start with repeat count 2\n                repeat = 2\n                startSymbol = next(alphabetIter)\n                endSymbol = next(alphabetIter)\n                symbolLengths[startSymbol.index] = \\\n                    symbolLengths[endSymbol.index] = lastLength\n                #count the two just defined symbols\n                total += 2*32768>>lastLength\n                #note: loop may end because we're there\n                #even if a 16 _appears_ to follow\n                while True:\n                    #determine last symbol\n                    oldRepeat = repeat\n                    repeat = (repeat-2<<2)+extra+3\n                    #read as many symbols as repeat increased\n                    for i in range(oldRepeat, repeat):\n                        endSymbol = next(alphabetIter)\n                        symbolLengths[endSymbol.index] = lastLength\n                    #compute new total; it may be end of loop\n                    total += (repeat-oldRepeat)*32768>>lastLength\n                    if total>=32768: break\n                    #see if there is more to do\n                    length = lengthCode.decodePeek(\n                        self.stream.peek(lengthCode.maxLength))[1].index\n                    if length!=16: break\n                    lengthCode.description = 'total {}+{{1}} symbols'.format(\n                        (repeat-2<<2)+3)\n                    extra = self.verboseRead(lengthCode)\n            elif length==17:\n                #read, and show explanation\n                lengthCode.description = '{1}+3 unused'\n                extra = self.verboseRead(lengthCode)\n                #scan series of 17s (groups of zero counts)\n                #start with repeat count 2\n                repeat = 2\n                startSymbol = next(alphabetIter)\n                endSymbol = next(alphabetIter)\n                #note: loop will not end with total==32768,\n                #since total doesn't change here\n                while True:\n                    #determine last symbol\n                    oldRepeat = repeat\n                    repeat = (repeat-2<<3)+extra+3\n                    #read as many symbols as repeat increases\n                    for i in range(repeat-oldRepeat):\n                        endSymbol = next(alphabetIter)\n                    #see if there is more to do\n                    length = lengthCode.decodePeek(\n                        self.stream.peek(lengthCode.maxLength))[1].index\n                    if length!=17: break\n                    lengthCode.description = 'total {}+{{1}} unused'.format(\n                        (repeat-2<<3)+3)\n                    extra = self.verboseRead(lengthCode)\n            else:\n                symbol = next(alphabetIter)\n                #double braces for format\n                char = str(symbol)\n                if char in '{}': char *= 2\n                lengthCode.description = \\\n                    'Length for {} is {{0.index}} bits'.format(char)\n                #output is not needed (will be 0)\n                self.verboseRead(lengthCode)\n                symbolLengths[symbol.index] = length\n                total += 32768>>length\n                lastLength = length\n        assert total==32768\n        alphabet.setLength(symbolLengths)\n        print('End of table. Prefix code '+alphabet.name+':')\n        alphabet.showCode()\n\n    #stream\n    def processStream(self):\n        \"\"\"Process a brotli stream.\n        \"\"\"\n        print('addr  hex{:{}s}binary context explanation'.format(\n            '', self.width-10))\n        print('Stream header'.center(60, '-'))\n        self.windowSize = self.verboseRead(WindowSizeAlphabet())\n        print('Metablock header'.center(60, '='))\n        self.ISLAST = False\n        self.output = bytearray()\n        while not self.ISLAST:\n            self.ISLAST = self.verboseRead(\n                BoolCode('LAST', description=\"Last block\"))\n            if self.ISLAST:\n                if self.verboseRead(\n                    BoolCode('EMPTY', description=\"Empty block\")): break\n            if self.metablockLength(): continue\n            if not self.ISLAST and self.uncompressed(): continue\n            print('Block type descriptors'.center(60, '-'))\n            self.numberOfBlockTypes = {}\n            self.currentBlockCounts = {}\n            self.blockTypeCodes = {}\n            self.blockCountCodes = {}\n            for blockType in (L,I,D): self.blockType(blockType)\n            print('Distance code parameters'.center(60, '-'))\n            self.NPOSTFIX, self.NDIRECT = self.verboseRead(DistanceParamAlphabet())\n            self.readLiteralContextModes()\n            print('Context maps'.center(60, '-'))\n            self.cmaps = {}\n            #keep the number of each kind of prefix tree for the last loop\n            numberOfTrees = {I: self.numberOfBlockTypes[I]}\n            for blockType in (L,D):\n                numberOfTrees[blockType] = self.contextMap(blockType)\n            print('Prefix code lists'.center(60, '-'))\n            self.prefixCodes = {}\n            for blockType in (L,I,D):\n                self.readPrefixArray(blockType, numberOfTrees[blockType])\n            self.metablock()\n\n    #metablock header\n    def verboseRead(self, alphabet, context='', skipExtra=False):\n        \"\"\"Read symbol and extra from stream and explain what happens.\n        Returns the value of the symbol\n        >>> olleke.pos = 0\n        >>> l = Layout(olleke)\n        >>> l.verboseRead(WindowSizeAlphabet())\n        0000  1b                   1011 WSIZE   windowsize=(1<<22)-16=4194288\n        4194288\n        \"\"\"\n        #TODO 2: verbosity level, e.g. show only codes and maps in header\n        stream = self.stream\n        pos = stream.pos\n        if skipExtra:\n            length, symbol = alphabet.readTuple(stream)\n            extraBits, extra = 0, None\n        else:\n            length, symbol, extraBits, extra = alphabet.readTupleAndExtra(\n                stream)\n        #fields: address, hex data, binary data, name of alphabet, explanation\n        hexdata = self.makeHexData(pos)\n        addressField = '{:04x}'.format(pos+7>>3) if hexdata else ''\n        bitdata = self.formatBitData(pos, length, extraBits)\n        #bitPtr moves bitdata so that the bytes are easier to read\n        #jump back to right if a new byte starts\n        if '|' in bitdata[1:]:\n            #start over on the right side\n            self.bitPtr = self.width\n        fillWidth = self.bitPtr-(len(hexdata)+len(bitdata))\n        if fillWidth<0: fillWidth = 0\n        print('{:<5s} {:<{}s} {:7s} {}'.format(\n            addressField,\n            hexdata+' '*fillWidth+bitdata, self.width,\n            context+alphabet.name,\n            symbol if skipExtra else symbol.explanation(extra),\n            ))\n        #jump to the right if we started with a '|'\n        #because we didn't jump before printing\n        if bitdata.startswith('|'): self.bitPtr = self.width\n        else: self.bitPtr -= len(bitdata)\n        return symbol if skipExtra else symbol.value(extra)\n\n    def metablockLength(self):\n        \"\"\"Read MNIBBLES and meta block length;\n        if empty block, skip block and return true.\n        \"\"\"\n        self.MLEN = self.verboseRead(MetablockLengthAlphabet())\n        if self.MLEN:\n            return False\n        #empty block; skip and return False\n        self.verboseRead(ReservedAlphabet())\n        MSKIP = self.verboseRead(SkipLengthAlphabet())\n        self.verboseRead(FillerAlphabet(streamPos=self.stream.pos))\n        self.stream.pos += 8*MSKIP\n        print(\"Skipping to {:x}\".format(self.stream.pos>>3))\n        return True\n\n    def uncompressed(self):\n        \"\"\"If true, handle uncompressed data\n        \"\"\"\n        ISUNCOMPRESSED = self.verboseRead(\n            BoolCode('UNCMPR', description='Is uncompressed?'))\n        if ISUNCOMPRESSED:\n            self.verboseRead(FillerAlphabet(streamPos=self.stream.pos))\n            print('Uncompressed data:')\n            self.output += self.stream.readBytes(self.MLEN)\n            print(outputFormatter(self.output[-self.MLEN:]))\n        return ISUNCOMPRESSED\n\n    def blockType(self, kind):\n        \"\"\"Read block type switch descriptor for given kind of blockType.\"\"\"\n        NBLTYPES = self.verboseRead(TypeCountAlphabet(\n            'BT#'+kind[0].upper(),\n            description='{} block types'.format(kind),\n            ))\n        self.numberOfBlockTypes[kind] = NBLTYPES\n        if NBLTYPES>=2:\n            self.blockTypeCodes[kind] = self.readPrefixCode(\n                BlockTypeAlphabet('BT'+kind[0].upper(), NBLTYPES))\n            self.blockCountCodes[kind] = self.readPrefixCode(\n                BlockCountAlphabet('BC'+kind[0].upper()))\n            blockCount = self.verboseRead(self.blockCountCodes[kind])\n        else:\n            blockCount = 1<<24\n        self.currentBlockCounts[kind] = blockCount\n\n    def readLiteralContextModes(self):\n        \"\"\"Read literal context modes.\n        LSB6: lower 6 bits of last char\n        MSB6: upper 6 bits of last char\n        UTF8: roughly dependent on categories:\n            upper 4 bits depend on category of last char:\n                control/whitespace/space/ punctuation/quote/%/open/close/\n                comma/period/=/digits/ VOWEL/CONSONANT/vowel/consonant\n            lower 2 bits depend on category of 2nd last char:\n                space/punctuation/digit or upper/lowercase\n        signed: hamming weight of last 2 chars\n        \"\"\"\n        print('Context modes'.center(60, '-'))\n        self.literalContextModes = []\n        for i in range(self.numberOfBlockTypes[L]):\n            self.literalContextModes.append(\n                self.verboseRead(LiteralContextMode(number=i)))\n\n    def contextMap(self, kind):\n        \"\"\"Read context maps\n        Returns the number of different values on the context map\n        (In other words, the number of prefix trees)\n        \"\"\"\n        NTREES = self.verboseRead(TypeCountAlphabet(\n            kind[0].upper()+'T#',\n            description='{} prefix trees'.format(kind)))\n        mapSize = {L:64, D:4}[kind]\n        if NTREES<2:\n            self.cmaps[kind] = [0]*mapSize\n        else:\n            #read CMAPkind\n            RLEMAX = self.verboseRead(RLEmaxAlphabet(\n                'RLE#'+kind[0].upper(),\n                description=kind+' context map'))\n            alphabet = TreeAlphabet('CM'+kind[0].upper(), NTREES=NTREES, RLEMAX=RLEMAX)\n            cmapCode = self.readPrefixCode(alphabet)\n            tableSize = mapSize*self.numberOfBlockTypes[kind]\n            cmap = []\n            while len(cmap)<tableSize:\n                cmapCode.description = 'map {}, entry {}'.format(\n                    *divmod(len(cmap), mapSize))\n                count, value = self.verboseRead(cmapCode)\n                cmap.extend([value]*count)\n            assert len(cmap)==tableSize\n            IMTF = self.verboseRead(BoolCode('IMTF', description='Apply inverse MTF'))\n            if IMTF:\n                self.IMTF(cmap)\n            if kind==L:\n                print('Context maps for literal data:')\n                for i in range(0, len(cmap), 64):\n                    print(*(\n                        ''.join(map(str, cmap[j:j+8]))\n                        for j in range(i, i+64, 8)\n                        ))\n            else:\n                print('Context map for distances:')\n                print(*(\n                    ''.join(map('{:x}'.format, cmap[i:i+4]))\n                    for i in range(0, len(cmap), 4)\n                    ))\n            self.cmaps[kind] = cmap\n        return NTREES\n\n    @staticmethod\n    def IMTF(v):\n        \"\"\"In place inverse move to front transform.\n        \"\"\"\n        #mtf is initialized virtually with range(infinity)\n        mtf = []\n        for i, vi in enumerate(v):\n            #get old value from mtf. If never seen, take virtual value\n            try: value = mtf.pop(vi)\n            except IndexError: value = vi\n            #put value at front\n            mtf.insert(0, value)\n            #replace transformed value\n            v[i] = value\n\n    def readPrefixArray(self, kind, numberOfTrees):\n        \"\"\"Read prefix code array\"\"\"\n        prefixes = []\n        for i in range(numberOfTrees):\n            if kind==L: alphabet = LiteralAlphabet(i)\n            elif kind==I: alphabet = InsertAndCopyAlphabet(i)\n            elif kind==D: alphabet = DistanceAlphabet(\n                i, NPOSTFIX=self.NPOSTFIX, NDIRECT=self.NDIRECT)\n            self.readPrefixCode(alphabet)\n            prefixes.append(alphabet)\n        self.prefixCodes[kind] = prefixes\n\n    #metablock data\n    def metablock(self):\n        \"\"\"Process the data.\n        Relevant variables of self:\n        numberOfBlockTypes[kind]: number of block types\n        currentBlockTypes[kind]: current block types (=0)\n        literalContextModes: the context modes for the literal block types\n        currentBlockCounts[kind]: counters for block types\n        blockTypeCodes[kind]: code for block type\n        blockCountCodes[kind]: code for block count\n        cmaps[kind]: the context maps (not for I)\n        prefixCodes[kind][#]: the prefix codes\n        lastDistances: the last four distances\n        lastChars: the last two chars\n        output: the result\n        \"\"\"\n        print('Meta block contents'.center(60, '='))\n        self.currentBlockTypes = {L:0, I:0, D:0, pL:1, pI:1, pD:1}\n        self.lastDistances = deque([17,16,11,4], maxlen=4)\n        #the current context mode is for block type 0\n        self.contextMode = ContextModeKeeper(self.literalContextModes[0])\n        wordList = WordList()\n\n        #setup distance callback function\n        def distanceCallback(symbol, extra):\n            \"callback function for displaying decoded distance\"\n            index, offset = symbol.value(extra)\n            if index:\n                #recent distance\n                distance = self.lastDistances[-index]+offset\n                return 'Distance: {}last{:+d}={}'.format(index, offset, distance)\n            #absolute value\n            if offset<=maxDistance:\n                return 'Absolute value: {} (pos {})'.format(offset, maxDistance-offset)\n            #word list value\n            action, word = divmod(offset-maxDistance, 1<<wordList.NDBITS[copyLen])\n            return '{}-{} gives word {},{} action {}'.format(\n                offset, maxDistance, copyLen, word, action)\n        for dpc in self.prefixCodes[D]: dpc.callback = distanceCallback\n\n        blockLen = 0\n        #there we go\n        while blockLen<self.MLEN:\n            #get insert&copy command\n            litLen, copyLen, dist0Flag = self.verboseRead(\n                self.prefixCodes[I][\n                    self.figureBlockType(I)])\n            #literal data\n            for i in range(litLen):\n                bt = self.figureBlockType(L)\n                cm = self.contextMode.getIndex()\n                ct = self.cmaps[L][bt<<6|cm]\n                char = self.verboseRead(\n                    self.prefixCodes[L][ct],\n                    context='{},{}='.format(bt,cm))\n                self.contextMode.add(char)\n                self.output.append(char)\n            blockLen += litLen\n            #check if we're done\n            if blockLen>=self.MLEN: return\n            #distance\n            #distances are computed relative to output length, at most window size\n            maxDistance = min(len(self.output), self.windowSize)\n            if dist0Flag:\n                distance = self.lastDistances[-1]\n            else:\n                bt = self.figureBlockType(D)\n                cm = {2:0, 3:1, 4:2}.get(copyLen, 3)\n                ct = self.cmaps[D][bt<<2|cm]\n                index, offset = self.verboseRead(\n                    self.prefixCodes[D][ct],\n                    context='{},{}='.format(bt,cm))\n                distance = self.lastDistances[-index]+offset if index else offset\n                if index==1 and offset==0:\n                    #to make sure distance is not put in last distance list\n                    dist0Flag = True\n            if distance<=maxDistance:\n                #copy from output\n                for i in range(\n                        maxDistance-distance,\n                        maxDistance-distance+copyLen):\n                    self.output.append(self.output[i])\n                if not dist0Flag: self.lastDistances.append(distance)\n                comment = 'Seen before'\n            else:\n                #fetch from wordlist\n                newWord = wordList.word(copyLen, distance-maxDistance-1)\n                self.output.extend(newWord)\n                #adjust copyLen to reflect actual new data\n                copyLen = len(newWord)\n                comment = 'From wordlist'\n            blockLen += copyLen\n            print(' '*40,\n                comment,\n                ': \"',\n                outputFormatter(self.output[-copyLen:]),\n                '\"',\n                sep='')\n            self.contextMode.add(self.output[-2])\n            self.contextMode.add(self.output[-1])\n\n    def figureBlockType(self, kind):\n        counts, types = self.currentBlockCounts, self.currentBlockTypes\n        if counts[kind]==0:\n            newType = self.verboseRead(self.blockTypeCodes[kind])\n            if newType==-2: newType = types['P'+kind]\n            elif newType==-1:\n                newType = (types[kind]+1)%self.numberOfBlockTypes[kind]\n            types['P'+kind] = types[kind]\n            types[kind] = newType\n            counts[kind] = self.verboseRead(self.blockCountCodes[kind])\n        counts[kind] -=1\n        return types[kind]\n\n__test__ = {\n'BitStream': \"\"\"\n    >>> bs = BitStream(b'Jurjen')\n    >>> bs.readBytes(2)\n    b'Ju'\n    >>> bs.read(6) #r=01110010\n    50\n    >>> bs\n    BitStream(pos=2:6)\n    >>> bs.peek(5)  #j=01101010\n    9\n    >>> bs.readBytes(2)\n    Traceback (most recent call last):\n        ...\n    ValueError: readBytes: need byte boundary\n    \"\"\",\n\n'Symbol': \"\"\"\n    >>> a=Symbol(MetablockLengthAlphabet(),5)\n    >>> len(a)\n    2\n    >>> int(a)\n    5\n    >>> a.bitPattern()\n    '01'\n    >>> a.value(200000)\n    200001\n    >>> a.explanation(300000)\n    'data length: 493e0h+1=300001'\n    \"\"\",\n\n'RangeDecoder': \"\"\"\n    >>> a=RangeDecoder(bitLength=3)\n    >>> len(a)\n    8\n    >>> a.name='t'\n    >>> list(a)\n    [Symbol(t, 0), Symbol(t, 1), Symbol(t, 2), Symbol(t, 3), Symbol(t, 4), Symbol(t, 5), Symbol(t, 6), Symbol(t, 7)]\n    >>> a[2]\n    Symbol(t, 2)\n    >>> a.bitPattern(4)\n    '100'\n    >>> a.length(2)\n    3\n    >>> a.decodePeek(15)\n    (3, Symbol(t, 7))\n    >>>\n\n    \"\"\",\n\n'PrefixDecoder': \"\"\"\n    >>> a=PrefixDecoder(decodeTable={0:1,1:2,3:3,7:4})\n    >>> len(a)\n    4\n    >>> a.name='t'\n    >>> list(a)\n    [Symbol(t, 1), Symbol(t, 2), Symbol(t, 3), Symbol(t, 4)]\n    >>> a.decodePeek(22)\n    (1, Symbol(t, 1))\n    >>> a.decodePeek(27)\n    (3, Symbol(t, 3))\n    >>> a.length(1)\n    1\n    >>> a.length(4)\n    3\n    \"\"\",\n\n'Code': \"\"\"\n    >>> a=Code('t',alphabetSize=10)\n    >>> len(a)\n    10\n    >>> a.showCode()\n    0000:0 0001:1 0010:2 0011:3 0100:4 0101:5 0110:6 0111:7 1000:8 1001:9\n    >>> a.setLength({2:1,3:2,5:3,6:3})\n    >>> a.showCode()\n      0:2  01:3 011:5 111:6\n    >>> len(a)\n    4\n    >>> def callback(i): return 'call{}back'.format(i)\n    >>> a=Code('t',callback=callback,bitLength=3)\n    >>> a[6].explanation()\n    'call6back'\n    \"\"\",\n\n'WithExtra': \"\"\"\n    >>> class A(WithExtra):\n    ...    extraTable = [0,1,1,2,2]\n    >>> a=A('t',alphabetSize=5)\n    >>> a[1]\n    Symbol(t, 1)\n    >>> a.extraBits(2)\n    1\n    >>> a.mnemonic(4)\n    '4'\n    >>> a.readTupleAndExtra(BitStream(b'\\x5b'))\n    (3, Symbol(t, 3), 2, 3)\n    \"\"\",\n\n'BoolCode': \"\"\"\n    >>> BoolCode('test')[0].explanation()\n    '0: False'\n    \"\"\",\n\n'Enumerator': \"\"\"\n    >>> class A(Enumerator):\n    ...    extraTable = [0,1,1,2,2]\n    ...    value0=3\n    >>> a=A(alphabetLength=5)\n    >>> a.value(3)\n    Traceback (most recent call last):\n        ...\n    TypeError: value() missing 1 required positional argument: 'extra'\n    >>> a.explanation(3,4)\n    'xx 011: 8-11; 8+4=12'\n    \"\"\",\n\n'WindowSizeAlphabet': \"\"\"\n    >>> windowSizeAlphabet = WindowSizeAlphabet()\n    >>> windowSizeAlphabet[0]\n    Traceback (most recent call last):\n        ...\n    ValueError: No symbol WindowSizeAlphabet[0]\n    >>> len(windowSizeAlphabet)\n    16\n    >>> windowSizeAlphabet[21]\n    Symbol(WSIZE, 21)\n    >>> windowSizeAlphabet[21].bitPattern()\n    '1001'\n    >>> windowSizeAlphabet[21].extraBits()\n    0\n    >>> windowSizeAlphabet[21].index\n    21\n    >>> windowSizeAlphabet[10].value()\n    1008\n    >>> windowSizeAlphabet[10].explanation()\n    'windowsize=(1<<10)-16=1008'\n    >>> windowSizeAlphabet.showCode()\n          0:65520    1100001:16368    1110001:32752       0011:262128\n    0000001:131056   0010001:None        1001:2097136     1011:4194288\n    1000001:4080     1010001:8176        0101:524272      0111:1048560\n    0100001:1008     0110001:2032        1101:8388592     1111:16777200\n    \"\"\",\n\n'TypeCountAlphabet': \"\"\"\n    >>> typeCountAlphabet = TypeCountAlphabet(description='bananas')\n    >>> len(typeCountAlphabet)\n    9\n    >>> typeCountAlphabet[3]\n    Symbol(BT#, 3)\n    >>> typeCountAlphabet[9]\n    Traceback (most recent call last):\n        ...\n    ValueError: No symbol TypeCountAlphabet[9]\n    >>> print(typeCountAlphabet[3])\n    xx,0101\n    >>> typeCountAlphabet[8].value(127)\n    256\n    >>> typeCountAlphabet[4].explanation(2)\n    'xxx,0111: 11 bananas'\n    >>> typeCountAlphabet[0].explanation()\n    '0: 1 banana'\n    \"\"\",\n\n'DistanceParamAlphabet': \"\"\"\n    >>> dpa = DistanceParamAlphabet()\n    >>> dpa.showCode()\n    00:PF0 01:PF1 10:PF2 11:PF3\n    >>> dpa.readTupleAndExtra(BitStream(b'\\\\x29'))\n    (2, Symbol(DIST, 1), 4, 10)\n    >>> dpa.explanation(2, 5)\n    '2 postfix bits and 0101<<2=20 direct codes'\n    \"\"\",\n\n'LiteralAlphabet': \"\"\"\n    >>> LiteralAlphabet(-1).showCode()   #doctest: +ELLIPSIS\n    00000000:\\\\x00 00110100:4    01101000:h    10011100:\\\\x9c 11010000:\\\\xd0\n    00000001:\\\\x01 00110101:5    01101001:i    10011101:\\\\x9d 11010001:\\\\xd1\n    00000010:\\\\x02 00110110:6    01101010:j    10011110:\\\\x9e 11010010:\\\\xd2\n    ...\n    00101111:/    01100011:c    10010111:\\\\x97 11001011:\\\\xcb 11111111:\\\\xff\n    00110000:0    01100100:d    10011000:\\\\x98 11001100:\\\\xcc\n    00110001:1    01100101:e    10011001:\\\\x99 11001101:\\\\xcd\n    00110010:2    01100110:f    10011010:\\\\x9a 11001110:\\\\xce\n    00110011:3    01100111:g    10011011:\\\\x9b 11001111:\\\\xcf\n    \"\"\",\n\n'BlockCountAlphabet': \"\"\"\n    >>> bc=BlockCountAlphabet('BCL')\n    >>> len(bc)\n    26\n    >>> bs=BitStream(b'\\\\x40\\\\x83\\\\xc8\\\\x59\\\\12\\\\x02')\n    >>> x = bc.readTupleAndExtra(bs); x[1].explanation(x[3])\n    'Block count: xx 00000: 1-4; 1+2=3'\n    >>> x = bc.readTupleAndExtra(bs); x[1].explanation(x[3])\n    'Block count: xxx 00110: 33-40; 33+0=33'\n    >>> x = bc.readTupleAndExtra(bs); x[1].explanation(x[3])\n    'Block count: xxxxxx 10001: 305-368; 305+28=333'\n    >>> x = bc.readTupleAndExtra(bs); x[1].explanation(x[3])\n    'Block count: xxxxxxxxxxx 10110: 2289-4336; 2289+1044=3333'\n    \"\"\",\n\n'Layout': \"\"\"\n    >>> olleke.pos = 0\n    >>> l = Layout(olleke)\n    >>> l.verboseRead(WindowSizeAlphabet())\n    0000  1b                   1011 WSIZE   windowsize=(1<<22)-16=4194288\n    4194288\n    >>> l.verboseRead(BoolCode('LAST', description=\"Last block\"))\n                              1     LAST    Last block: 1: True\n    True\n    >>> l.verboseRead(BoolCode('EMPTY', description=\"Empty block\"))\n                             0      EMPTY   Empty block: 0: False\n    False\n    >>> l.verboseRead(MetablockLengthAlphabet())\n    0001  2e 00        |00h|2Eh,|00 MLEN    data length: 002eh+1=47\n    47\n    >>> olleke.pos = 76\n    >>> l = Layout(olleke)\n    >>> x = l.verboseRead(DistanceAlphabet(0,NPOSTFIX=0,NDIRECT=0), skipExtra=True)\n    000a  82                10|1100 D0      10[15*x]-3\n    >>> x.explanation(0x86a3)\n    '10[1000011010100011]-3: [0]+100000'\n    \"\"\",\n\n'olleke': \"\"\"\n    >>> olleke.pos = 0\n    >>> try: Layout(olleke).processStream()\n    ... except NotImplementedError: pass\n    ... #doctest: +REPORT_NDIFF\n    addr  hex               binary context explanation\n    -----------------------Stream header------------------------\n    0000  1b                   1011 WSIZE   windowsize=(1<<22)-16=4194288\n    ======================Metablock header======================\n                              1     LAST    Last block: 1: True\n                             0      EMPTY   Empty block: 0: False\n    0001  2e 00        |00h|2Eh,|00 MLEN    data length: 002eh+1=47\n    -------------------Block type descriptors-------------------\n    0003  00                      0 BT#L    0: 1 literal block type\n                                 0  BT#I    0: 1 insert&copy block type\n                                0   BT#D    0: 1 distance block type\n    ------------------Distance code parameters------------------\n    0004  44               0|000,00 DIST    0 postfix bits and 0000<<0=0 direct codes\n    -----------------------Context modes------------------------\n                         10         LC0     Context mode for type 0: 2(UTF8)\n    ------------------------Context maps------------------------\n                        0           LT#     0: 1 literal prefix tree\n                       0            DT#     0: 1 distance prefix tree\n    ---------------------Prefix code lists----------------------\n                     10             PFX     L0 is complex with lengths 3,4,0,5,17...\n    0005  4f                    1|0 ##L0    len 3: coded with 3 bits\n                            0111    ##L0    len 4: coded with 1 bits\n                          10        ##L0    unused: coded with 3 bits\n    0006  d6                    0|0 ##L0    len 5: skipped\n                             011    ##L0    zero xxx: coded with 2 bits\n    ***** Lengths for L0 will be coded as:\n      0:len 4     01:zero xxx 011:unused   111:len 3\n    0007  95                1|11,01 #L0     7+3 unused\n                           0        #L0     Length for \\\\n is 4 bits\n                     001,01         #L0     1+3 unused\n    0008  44                010,0|1 #L0     total 19+2 unused\n                           0        #L0     Length for \" \" is 4 bits\n                          0         #L0     Length for ! is 4 bits\n    0009  cb                011,|01 #L0     3+3 unused\n                     |110,01        #L0     total 35+6 unused\n    000a  82                      0 #L0     Length for K is 4 bits\n                            000,01  #L0     0+3 unused\n                           0        #L0     Length for O is 4 bits\n    000b  4d                   01|1 #L0     symbol P unused\n                            011     #L0     symbol Q unused\n                           0        #L0     Length for R is 4 bits\n    000c  88                000,|01 #L0     0+3 unused\n                     |100,01        #L0     total 11+4 unused\n    000d  b6                      0 #L0     Length for b is 4 bits\n                               011  #L0     symbol c unused\n                            011     #L0     symbol d unused\n    000e  27                   11|1 #L0     Length for e is 3 bits\n                         010,01     #L0     2+3 unused\n                       |0           #L0     Length for k is 4 bits\n    000f  1f                    111 #L0     Length for l is 3 bits\n                             011    #L0     symbol m unused\n                            0       #L0     Length for n is 4 bits\n                          |0        #L0     Length for o is 4 bits\n    0010  c1                 000,01 #L0     0+3 unused\n                            0       #L0     Length for s is 4 bits\n    0011  b4                   0|11 #L0     symbol t unused\n                              0     #L0     Length for u is 4 bits\n    End of table. Prefix code L0:\n     000:e   0010:\\\\n  0110:!   0001:O   0101:b   0011:n   0111:s\n     100:l   1010:\" \" 1110:K   1001:R   1101:k   1011:o   1111:u\n                         11,01      PFX     IC0 is simple with 4 code words\n    0012  2a                |2Ah|10 IC0     ? bits: I5C4\n    0013  b5 ec              00|B5h IC0     ? bits: I6+xC7\n    0015  22            0010|111011 IC0     ? bits: I8+xC5\n    0016  8c            001100|0010 IC0     ? bits: I0C14+xx\n                       0            SHAPE   False: lengths 2,2,2,2\n    0017  74                 10,0|1 PFX     D0 is simple with 3 code words\n    0018  a6                0|01110 D0      1 bit: 2last-3\n                      010011        D0      2 bits: 11xx-3\n    0019  aa                01010|1 D0      2 bits: 11xxx-3\n    ====================Meta block contents=====================\n                       |1,01        IC0     Literal: 9, copy: 5\n    001a  41                   0001 0,0=L0  O\n                            100     0,48=L0 l\n    001b  a2                   10|0 0,62=L0 l\n                            000     0,63=L0 e\n    001c  a1                  1|101 0,59=L0 k\n                           000      0,63=L0 e\n                      |1010         0,59=L0 \" \"\n    001d  b5                   0101 0,11=L0 b\n                          |1011     0,60=L0 o\n    001e  24                      0 0,3=D0  Distance: 2last-3=8\n                                            Seen before: \"lleke\"\n                              0,10  IC0     Literal: 6, copy: 7\n                         |0010      0,59=L0 \\\\n\n    001f  89                   1001 0,7=L0  R\n                            000     0,52=L0 e\n    0020  fa                  010|1 0,58=L0 b\n                          1111      0,63=L0 u\n    0021  eb                  011|1 0,59=L0 s\n                         11,01      0,3=D0  Absolute value: 12 (pos 8)\n                                            Seen before: \"olleke\\\\n\"\n    0022  db                 01,1|1 IC0     Literal: 0, copy: 15\n                      |110,11       0,3=D0  Absolute value: 27 (pos 0)\n                                            Seen before: \"Olleke bolleke\\\\n\"\n    0023  f8                     00 IC0     Literal: 5, copy: 4\n                             1110   0,7=L0  K\n    0024  2c                  00|11 0,52=L0 n\n                          1011      0,62=L0 o\n    0025  0d                   1|00 0,59=L0 l\n                           0110     0,63=L0 !\n    \"\"\",\n\n'file': \"\"\"\n    >>> try: Layout(BitStream(\n    ... open(\"./tests/testdata/10x10y.compressed\",'rb')\n    ...     .read())).processStream()\n    ... except NotImplementedError: pass\n    addr  hex               binary context explanation\n    -----------------------Stream header------------------------\n    0000  1b                   1011 WSIZE   windowsize=(1<<22)-16=4194288\n    ======================Metablock header======================\n                              1     LAST    Last block: 1: True\n                             0      EMPTY   Empty block: 0: False\n    0001  13 00        |00h|13h,|00 MLEN    data length: 0013h+1=20\n    -------------------Block type descriptors-------------------\n    0003  00                      0 BT#L    0: 1 literal block type\n                                 0  BT#I    0: 1 insert&copy block type\n                                0   BT#D    0: 1 distance block type\n    ------------------Distance code parameters------------------\n    0004  a4               0|000,00 DIST    0 postfix bits and 0000<<0=0 direct codes\n    -----------------------Context modes------------------------\n                         10         LC0     Context mode for type 0: 2(UTF8)\n    ------------------------Context maps------------------------\n                        0           LT#     0: 1 literal prefix tree\n                       0            DT#     0: 1 distance prefix tree\n    ---------------------Prefix code lists----------------------\n    0005  b0                 0|1,01 PFX     L0 is simple with 2 code words\n    0006  b2              0|1011000 L0      1 bit: X\n    0007  ea              0|1011001 L0      1 bit: Y\n                     01,01          PFX     IC0 is simple with 2 code words\n    0008  81            0000001|111 IC0     1 bit: I1C9&D=0\n    0009  47 02             0|47h|1 IC0     1 bit: I1C9\n                       00,01        PFX     D0 is simple with 1 code word\n    000b  8a                010|000 D0      0 bits: 10x-3\n    ====================Meta block contents=====================\n                           1        IC0     Literal: 1, copy: 9\n                          0         0,0=L0  X\n                      0,()          0,3=D0  Absolute value: 1 (pos 0)\n                                            Seen before: \"XXXXXXXXX\"\n                     0              IC0     Literal: 1, copy: 9, same distance\n                   |1               0,54=L0 Y\n                                            Seen before: \"YYYYYYYYY\"\n    \"\"\",\n\n'XY': \"\"\"\n    >>> try: Layout(BitStream(brotli.compress('X'*10+'Y'*10))).processStream()\n    ... except NotImplementedError: pass\n    addr  hex               binary context explanation\n    -----------------------Stream header------------------------\n    0000  1b                   1011 WSIZE   windowsize=(1<<22)-16=4194288\n    ======================Metablock header======================\n                              1     LAST    Last block: 1: True\n                             0      EMPTY   Empty block: 0: False\n    0001  13 00        |00h|13h,|00 MLEN    data length: 0013h+1=20\n    -------------------Block type descriptors-------------------\n    0003  00                      0 BT#L    0: 1 literal block type\n                                 0  BT#I    0: 1 insert&copy block type\n                                0   BT#D    0: 1 distance block type\n    ------------------Distance code parameters------------------\n    0004  a4               0|000,00 DIST    0 postfix bits and 0000<<0=0 direct codes\n    -----------------------Context modes------------------------\n                         10         LC0     Context mode for type 0: 2(UTF8)\n    ------------------------Context maps------------------------\n                        0           LT#     0: 1 literal prefix tree\n                       0            DT#     0: 1 distance prefix tree\n    ---------------------Prefix code lists----------------------\n    0005  b0                 0|1,01 PFX     L0 is simple with 2 code words\n    0006  b2              0|1011000 L0      1 bit: X\n    0007  82              0|1011001 L0      1 bit: Y\n                     00,01          PFX     IC0 is simple with 1 code word\n    0008  84            0000100|100 IC0     0 bits: I4C6&D=0\n    0009  00                 00,0|1 PFX     D0 is simple with 1 code word\n    000a  e0                0|00000 D0      0 bits: last\n    ====================Meta block contents=====================\n                          ()        IC0     Literal: 4, copy: 6, same distance\n                         0          0,0=L0  X\n                        0           0,52=L0 X\n                       0            0,54=L0 X\n                      0             0,54=L0 X\n                                            Seen before: \"XXXXXX\"\n                    ()              IC0     Literal: 4, copy: 6, same distance\n                   1                0,54=L0 Y\n                  1                 0,54=L0 Y\n                |1                  0,54=L0 Y\n    000b  01                      1 0,54=L0 Y\n                                            Seen before: \"YYYYYY\"\n    \"\"\",\n\n'empty': \"\"\"\n    >>> try: Layout(BitStream(b'\\\\x81\\\\x16\\\\x00\\\\x58')).processStream()\n    ... except NotImplementedError: pass\n    addr  hex               binary context explanation\n    -----------------------Stream header------------------------\n    0000  81                0000001 WSIZE   windowsize=(1<<17)-16=131056\n    ======================Metablock header======================\n                          |1        LAST    Last block: 1: True\n    0001  16                      0 EMPTY   Empty block: 0: False\n                                11  MLEN    11: empty block\n                               0    RSVD    Reserved (must be zero)\n    0002  00           000000|00,01 SKIP    skip length: 0h+1=1\n                    |00             SKIP    2 bits ignored\n    Skipping to 4\n    \"\"\",\n\n}\n\nif __name__ == '__main__':\n    import os\n    import sys\n    here = os.path.realpath(os.path.join(os.getcwd(), os.path.dirname(__file__)))\n    DICTIONARY_PATH = os.path.realpath(os.path.join(here, DICTIONARY_PATH))\n    if len(sys.argv) > 1:\n        l = Layout(BitStream(open(sys.argv[1],'rb').read()))\n        l.processStream()\n    else:\n        sys.path.append(\"h:/Persoonlijk/bin\")\n        try:\n            import brotli\n            open('brotlidump.br', 'wb').write(\n                brotli.compress(\n                    open('brotlidump.py', 'r').read()\n                ))\n            olleke = BitStream(brotli.compress(\n                'Olleke bolleke\\nRebusolleke\\nOlleke bolleke\\nKnol!'))\n        except ImportError: pass\n        import doctest\n        doctest.testmod(optionflags=doctest.REPORT_NDIFF\n            #|doctest.FAIL_FAST\n            )\n"
  },
  {
    "path": "research/deorummolae.cc",
    "content": "#include \"deorummolae.h\"\n\n#include <array>\n#include <cstdio>\n\n#include <sais.hxx>\n\n#if defined(_MSC_VER)\n#include <intrin.h>  /* __popcnt64 */\n#endif\n\n/* Used for quick SA-entry to file mapping. Each file is padded to size that\n   is a multiple of chunk size. */\n#define CHUNK_SIZE 64\n/* Length of substring that is considered to be covered by dictionary string. */\n#define CUT_MATCH 6\n/* Minimal dictionary entry size. */\n#define MIN_MATCH 24\n\n/* Non tunable definitions. */\n#define CHUNK_MASK (CHUNK_SIZE - 1)\n#define COVERAGE_SIZE (1 << (DM_LOG_MAX_FILES - 6))\n\n/* File coverage: every bit set to 1 denotes a file covered by an isle. */\ntypedef std::array<uint64_t, COVERAGE_SIZE> Coverage;\n\n/* Symbol of text alphabet. */\ntypedef int32_t TextChar;\n\n/* Pointer to position in text. */\ntypedef uint32_t TextIdx;\n\n/* SAIS sarray_type; unfortunately, must be a signed type. */\ntypedef int32_t TextSaIdx;\n\nstatic size_t popcount(uint64_t u) {\n#if defined(_MSC_VER)\n  return static_cast<size_t>(__popcnt64(u));\n#else\n  return static_cast<size_t>(__builtin_popcountll(u));\n#endif\n}\n\n/* Condense terminators and pad file entries. */\nstatic void rewriteText(std::vector<TextChar>* text) {\n  TextChar terminator = text->back();\n  TextChar prev = terminator;\n  TextIdx to = 0;\n  for (TextIdx from = 0; from < text->size(); ++from) {\n    TextChar next = text->at(from);\n    if (next < 256 || prev < 256) {\n      text->at(to++) = next;\n      if (next >= 256) terminator = next;\n    }\n    prev = next;\n  }\n  text->resize(to);\n  if (text->empty()) text->push_back(terminator);\n  while (text->size() & CHUNK_MASK) text->push_back(terminator);\n}\n\n/* Reenumerate terminators for smaller alphabet. */\nstatic void remapTerminators(std::vector<TextChar>* text,\n    TextChar* next_terminator) {\n  TextChar prev = -1;\n  TextChar x = 256;\n  for (TextIdx i = 0; i < text->size(); ++i) {\n    TextChar next = text->at(i);\n    if (next < 256) {  // Char.\n      // Do nothing.\n    } else if (prev < 256) {  // Terminator after char.\n      next = x++;\n    } else {  // Terminator after terminator.\n      next = prev;\n    }\n    text->at(i) = next;\n    prev = next;\n  }\n  *next_terminator = x;\n}\n\n/* Combine all file entries; create mapping position->file. */\nstatic void buildFullText(std::vector<std::vector<TextChar>>* data,\n    std::vector<TextChar>* full_text, std::vector<TextIdx>* file_map,\n    std::vector<TextIdx>* file_offset, TextChar* next_terminator) {\n  file_map->resize(0);\n  file_offset->resize(0);\n  full_text->resize(0);\n  for (TextIdx i = 0; i < data->size(); ++i) {\n    file_offset->push_back(full_text->size());\n    std::vector<TextChar>& file = data->at(i);\n    rewriteText(&file);\n    full_text->insert(full_text->end(), file.begin(), file.end());\n    file_map->insert(file_map->end(), file.size() / CHUNK_SIZE, i);\n  }\n  if (false) remapTerminators(full_text, next_terminator);\n}\n\n/* Build longest-common-prefix based on suffix array and text.\n   TODO(eustas): borrowed -> unknown efficiency. */\nstatic void buildLcp(std::vector<TextChar>* text, std::vector<TextIdx>* sa,\n    std::vector<TextIdx>* lcp, std::vector<TextIdx>* invese_sa) {\n  TextIdx size = static_cast<TextIdx>(text->size());\n  lcp->resize(size);\n  TextIdx k = 0;\n  lcp->at(size - 1) = 0;\n  for (TextIdx i = 0; i < size; ++i) {\n    if (invese_sa->at(i) == size - 1) {\n      k = 0;\n      continue;\n    }\n    // Suffix which follow i-th suffix.\n    TextIdx j = sa->at(invese_sa->at(i) + 1);\n    while (i + k < size && j + k < size && text->at(i + k) == text->at(j + k)) {\n      ++k;\n    }\n    lcp->at(invese_sa->at(i)) = k;\n    if (k > 0) --k;\n  }\n}\n\n/* Isle is a range in SA with LCP not less than some value.\n   When we raise the LCP requirement, the isle sunks and smaller isles appear\n   instead. */\ntypedef struct {\n  TextIdx lcp;\n  TextIdx l;\n  TextIdx r;\n  Coverage coverage;\n} Isle;\n\n/* Helper routine for `cutMatch`. */\nstatic void poisonData(TextIdx pos, TextIdx length,\n    std::vector<std::vector<TextChar>>* data, std::vector<TextIdx>* file_map,\n    std::vector<TextIdx>* file_offset, TextChar* next_terminator) {\n  TextIdx f = file_map->at(pos / CHUNK_SIZE);\n  pos -= file_offset->at(f);\n  std::vector<TextChar>& file = data->at(f);\n  TextIdx l = (length == CUT_MATCH) ? CUT_MATCH : 1;\n  for (TextIdx j = 0; j < l; j++, pos++) {\n    if (file[pos] >= 256) continue;\n    if (file[pos + 1] >= 256) {\n      file[pos] = file[pos + 1];\n    } else if (pos > 0 && file[pos - 1] >= 256) {\n      file[pos] = file[pos - 1];\n    } else {\n      file[pos] = (*next_terminator)++;\n    }\n  }\n}\n\n/* Remove substrings of a given match from files.\n   Substrings are replaced with unique terminators, so next iteration SA would\n   not allow to cross removed areas. */\nstatic void cutMatch(std::vector<std::vector<TextChar>>* data, TextIdx index,\n    TextIdx length, std::vector<TextIdx>* sa, std::vector<TextIdx>* lcp,\n    std::vector<TextIdx>* invese_sa, TextChar* next_terminator,\n    std::vector<TextIdx>* file_map, std::vector<TextIdx>* file_offset) {\n  while (length >= CUT_MATCH) {\n    TextIdx i = index;\n    while (lcp->at(i) >= length) {\n      i++;\n      poisonData(\n          sa->at(i), length, data, file_map, file_offset, next_terminator);\n    }\n    while (true) {\n      poisonData(\n          sa->at(index), length, data, file_map, file_offset, next_terminator);\n      if (index == 0 || lcp->at(index - 1) < length) break;\n      index--;\n    }\n    length--;\n    index = invese_sa->at(sa->at(index) + 1);\n  }\n}\n\nstd::string DM_generate(size_t dictionary_size_limit,\n    const std::vector<size_t>& sample_sizes, const uint8_t* sample_data) {\n  {\n    TextIdx tmp = static_cast<TextIdx>(dictionary_size_limit);\n    if ((tmp != dictionary_size_limit) || (tmp > 1u << 30)) {\n      fprintf(stderr, \"dictionary_size_limit is too large\\n\");\n      return \"\";\n    }\n  }\n\n  /* Could use 256 + '0' for easier debugging. */\n  TextChar next_terminator = 256;\n\n  std::string output;\n  std::vector<std::vector<TextChar>> data;\n\n  TextIdx offset = 0;\n  size_t num_samples = sample_sizes.size();\n  if (num_samples > DM_MAX_FILES) num_samples = DM_MAX_FILES;\n  for (size_t n = 0; n < num_samples; ++n) {\n    TextIdx delta = static_cast<TextIdx>(sample_sizes[n]);\n    if (delta != sample_sizes[n]) {\n      fprintf(stderr, \"sample is too large\\n\");\n      return \"\";\n    }\n    if (delta == 0) {\n      fprintf(stderr, \"0-length samples are prohibited\\n\");\n      return \"\";\n    }\n    TextIdx next_offset = offset + delta;\n    if (next_offset <= offset) {\n      fprintf(stderr, \"corpus is too large\\n\");\n      return \"\";\n    }\n    data.push_back(\n        std::vector<TextChar>(sample_data + offset, sample_data + next_offset));\n    offset = next_offset;\n    data.back().push_back(next_terminator++);\n  }\n\n  /* Most arrays are allocated once, and then just resized to smaller and\n     smaller sizes. */\n  std::vector<TextChar> full_text;\n  std::vector<TextIdx> file_map;\n  std::vector<TextIdx> file_offset;\n  std::vector<TextIdx> sa;\n  std::vector<TextIdx> invese_sa;\n  std::vector<TextIdx> lcp;\n  std::vector<Isle> isles;\n  std::vector<char> output_data;\n  TextIdx total = 0;\n  TextIdx total_cost = 0;\n  TextIdx best_cost;\n  Isle best_isle;\n  size_t min_count = num_samples;\n\n  while (true) {\n    TextIdx max_match = static_cast<TextIdx>(dictionary_size_limit) - total;\n    buildFullText(&data, &full_text, &file_map, &file_offset, &next_terminator);\n    sa.resize(full_text.size());\n    /* Hopefully, non-negative TextSaIdx is the same sa TextIdx counterpart. */\n    saisxx(full_text.data(), reinterpret_cast<TextSaIdx*>(sa.data()),\n        static_cast<TextChar>(full_text.size()), next_terminator);\n    invese_sa.resize(full_text.size());\n    for (TextIdx i = 0; i < full_text.size(); ++i) {\n      invese_sa[sa[i]] = i;\n    }\n    buildLcp(&full_text, &sa, &lcp, &invese_sa);\n\n    /* Do not rebuild SA/LCP, just use different selection. */\n  retry:\n    best_cost = 0;\n    best_isle = {0, 0, 0, {{0}}};\n    isles.resize(0);\n    isles.push_back(best_isle);\n\n    for (TextIdx i = 0; i < lcp.size(); ++i) {\n      TextIdx l = i;\n      Coverage cov = {{0}};\n      size_t f = file_map[sa[i] / CHUNK_SIZE];\n      cov[f >> 6] = (static_cast<uint64_t>(1)) << (f & 63);\n      while (lcp[i] < isles.back().lcp) {\n        Isle& top = isles.back();\n        top.r = i;\n        l = top.l;\n        for (size_t x = 0; x < cov.size(); ++x) cov[x] |= top.coverage[x];\n        size_t count = 0;\n        for (size_t x = 0; x < cov.size(); ++x) count += popcount(cov[x]);\n        TextIdx effective_lcp = top.lcp;\n        /* Restrict (last) dictionary entry length. */\n        if (effective_lcp > max_match) effective_lcp = max_match;\n        TextIdx cost = count * effective_lcp;\n        if (cost > best_cost && count >= min_count &&\n            effective_lcp >= MIN_MATCH) {\n          best_cost = cost;\n          best_isle = top;\n          best_isle.lcp = effective_lcp;\n        }\n        isles.pop_back();\n        for (size_t x = 0; x < cov.size(); ++x) {\n          isles.back().coverage[x] |= cov[x];\n        }\n      }\n      if (lcp[i] > isles.back().lcp) isles.push_back({lcp[i], l, 0, {{0}}});\n      for (size_t x = 0; x < cov.size(); ++x) {\n        isles.back().coverage[x] |= cov[x];\n      }\n    }\n\n    /* When saturated matches do not match length restrictions, lower the\n       saturation requirements. */\n    if (best_cost == 0 || best_isle.lcp < MIN_MATCH) {\n      if (min_count >= 8) {\n        min_count = (min_count * 7) / 8;\n        fprintf(stderr, \"Retry: min_count=%zu\\n\", min_count);\n        goto retry;\n      }\n      break;\n    }\n\n    /* Save the entry. */\n    fprintf(stderr, \"Savings: %d+%d, dictionary: %d+%d\\n\",\n        total_cost, best_cost, total, best_isle.lcp);\n    int* piece = &full_text[sa[best_isle.l]];\n    output.insert(output.end(), piece, piece + best_isle.lcp);\n    total += best_isle.lcp;\n    total_cost += best_cost;\n    cutMatch(&data, best_isle.l, best_isle.lcp, &sa, &lcp, &invese_sa,\n        &next_terminator, &file_map, &file_offset);\n    if (total >= dictionary_size_limit) break;\n  }\n\n  return output;\n}\n"
  },
  {
    "path": "research/deorummolae.h",
    "content": "#ifndef BROTLI_RESEARCH_DEORUMMOLAE_H_\n#define BROTLI_RESEARCH_DEORUMMOLAE_H_\n\n#include <cstddef>\n#include <cstdint>\n#include <string>\n#include <vector>\n\n/* log2(maximal number of files). Value 6 provides some speedups. */\n#define DM_LOG_MAX_FILES 6\n\n/* Non tunable definitions. */\n#define DM_MAX_FILES (1 << DM_LOG_MAX_FILES)\n\n/**\n * Generate a dictionary for given samples.\n *\n * @param dictionary_size_limit maximal dictionary size\n * @param sample_sizes vector with sample sizes\n * @param sample_data concatenated samples\n * @return generated dictionary\n */\nstd::string DM_generate(size_t dictionary_size_limit,\n    const std::vector<size_t>& sample_sizes, const uint8_t* sample_data);\n\n#endif  // BROTLI_RESEARCH_DEORUMMOLAE_H_\n"
  },
  {
    "path": "research/dictionary_generator.cc",
    "content": "#include <climits>\n#include <cstddef>\n#include <cstdio>\n#include <cstring>\n#include <fstream>\n#if !defined(_MSC_VER)\n#include <glob.h>\n#endif\n#include <vector>\n\n#include \"deorummolae.h\"\n#include \"durchschlag.h\"\n#include \"sieve.h\"\n\n/* This isn't a definitive list of \"--foo\" arguments, only those that take an\n * additional \"=#\" integer parameter, like \"--foo=20\" or \"--foo=32K\".\n */\n#define LONG_ARG_BLOCK_LEN \"--block_len=\"\n#define LONG_ARG_SLICE_LEN \"--slice_len=\"\n#define LONG_ARG_TARGET_DICT_LEN \"--target_dict_len=\"\n#define LONG_ARG_MIN_SLICE_POP \"--min_slice_pop=\"\n#define LONG_ARG_CHUNK_LEN \"--chunk_len=\"\n#define LONG_ARG_OVERLAP_LEN \"--overlap_len=\"\n\n#define METHOD_DM 0\n#define METHOD_SIEVE 1\n#define METHOD_DURCHSCHLAG 2\n#define METHOD_DISTILL 3\n#define METHOD_PURIFY 4\n\nstatic size_t readInt(const char* str) {\n  size_t result = 0;\n  if (str[0] == 0 || str[0] == '0') {\n    return 0;\n  }\n  for (size_t i = 0; i < 13; ++i) {\n    if (str[i] == 0) {\n      return result;\n    }\n    if (str[i] == 'k' || str[i] == 'K') {\n      if ((str[i + 1] == 0) && ((result << 10) > result)) {\n        return result << 10;\n      }\n      return 0;\n    }\n    if (str[i] == 'm' || str[i] == 'M') {\n      if ((str[i + 1] == 0) && ((result << 20) > result)) {\n        return result << 20;\n      }\n      return 0;\n    }\n    if (str[i] < '0' || str[i] > '9') {\n      return 0;\n    }\n    size_t next = (10 * result) + (str[i] - '0');\n    if (next <= result) {\n      return 0;\n    }\n    result = next;\n  }\n  return 0;\n}\n\nstatic std::string readFile(const std::string& path) {\n  std::ifstream file(path);\n  std::string content(\n      (std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());\n  return content;\n}\n\nstatic void writeFile(const char* file, const std::string& content) {\n  std::ofstream outfile(file, std::ofstream::binary);\n  outfile.write(content.c_str(), static_cast<std::streamsize>(content.size()));\n  outfile.close();\n}\n\nstatic void writeSamples(const std::vector<std::string>& paths,\n    const std::vector<size_t>& sizes, const uint8_t* data) {\n  size_t offset = 0;\n  for (size_t i = 0; i < paths.size(); ++i) {\n    const char* path = paths[i].c_str();\n    size_t sampleSize = sizes[i];\n    std::ofstream outfile(path, std::ofstream::binary);\n    outfile.write(reinterpret_cast<const char*>(data + offset),\n        static_cast<std::streamsize>(sampleSize));\n    outfile.close();\n    offset += sampleSize;\n  }\n}\n\n/* Returns \"base file name\" or its tail, if it contains '/' or '\\'. */\nstatic const char* fileName(const char* path) {\n  const char* separator_position = strrchr(path, '/');\n  if (separator_position) path = separator_position + 1;\n  separator_position = strrchr(path, '\\\\');\n  if (separator_position) path = separator_position + 1;\n  return path;\n}\n\nstatic void printHelp(const char* name) {\n  fprintf(stderr, \"Usage: %s [OPTION]... DICTIONARY [SAMPLE]...\\n\", name);\n  fprintf(stderr,\n      \"Options:\\n\"\n      \"  --dm       use 'deorummolae' engine\\n\"\n      \"  --distill  rewrite samples; unique text parts are removed\\n\"\n      \"  --dsh      use 'durchschlag' engine (default)\\n\"\n      \"  --purify   rewrite samples; unique text parts are zeroed out\\n\"\n      \"  --sieve    use 'sieve' engine\\n\"\n      \"  -b#, --block_len=#\\n\"\n      \"             set block length for 'durchschlag'; default: 1024\\n\"\n      \"  -s#, --slice_len=#\\n\"\n      \"             set slice length for 'distill', 'durchschlag', 'purify'\\n\"\n      \"             and 'sieve'; default: 16\\n\"\n      \"  -t#, --target_dict_len=#\\n\"\n      \"             set target dictionary length (limit); default: 16K\\n\"\n      \"  -u#, --min_slice_pop=#\\n\"\n      \"             set minimum slice population (for rewrites); default: 2\\n\"\n      \"  -c#, --chunk_len=#\\n\"\n      \"             if positive, samples are cut into chunks of this length;\\n\"\n      \"             default: 0; cannot mix with 'rewrite samples'\\n\"\n      \"  -o#, --overlap_len=#\\n\"\n      \"             set chunk overlap length; default 0\\n\"\n      \"# is a decimal number with optional k/K/m/M suffix.\\n\"\n      \"WARNING: 'distill' and 'purify' will overwrite original samples!\\n\"\n      \"         Completely unique samples might become empty files.\\n\\n\");\n}\n\nint main(int argc, char const* argv[]) {\n  int dictionaryArg = -1;\n  int method = METHOD_DURCHSCHLAG;\n  size_t sliceLen = 16;\n  size_t targetSize = 16 << 10;\n  size_t blockSize = 1024;\n  size_t minimumPopulation = 2;\n  size_t chunkLen = 0;\n  size_t overlapLen = 0;\n\n  std::vector<uint8_t> data;\n  std::vector<size_t> sizes;\n  std::vector<std::string> paths;\n  size_t total = 0;\n  for (int i = 1; i < argc; ++i) {\n    if (argv[i] == nullptr) {\n      continue;\n    }\n\n    if (argv[i][0] == '-') {\n      char arg1 = argv[i][1];\n      const char* arg2 = arg1 ? &argv[i][2] : nullptr;\n      if (arg1 == '-') {\n        if (dictionaryArg != -1) {\n          fprintf(stderr,\n              \"Method should be specified before dictionary / sample '%s'\\n\",\n              argv[i]);\n          exit(1);\n        }\n\n        /* Look for \"--long_arg\" via exact match. */\n        if (std::strcmp(argv[i], \"--sieve\") == 0) {\n          method = METHOD_SIEVE;\n          continue;\n        }\n        if (std::strcmp(argv[i], \"--dm\") == 0) {\n          method = METHOD_DM;\n          continue;\n        }\n        if (std::strcmp(argv[i], \"--dsh\") == 0) {\n          method = METHOD_DURCHSCHLAG;\n          continue;\n        }\n        if (std::strcmp(argv[i], \"--distill\") == 0) {\n          method = METHOD_DISTILL;\n          continue;\n        }\n        if (std::strcmp(argv[i], \"--purify\") == 0) {\n          method = METHOD_PURIFY;\n          continue;\n        }\n\n        /* Look for \"--long_arg=#\" via prefix match. */\n        if (std::strncmp(argv[i], LONG_ARG_BLOCK_LEN,\n              std::strlen(LONG_ARG_BLOCK_LEN)) == 0) {\n          arg1 = 'b';\n          arg2 = &argv[i][std::strlen(LONG_ARG_BLOCK_LEN)];\n        } else if (std::strncmp(argv[i], LONG_ARG_SLICE_LEN,\n              std::strlen(LONG_ARG_SLICE_LEN)) == 0) {\n          arg1 = 's';\n          arg2 = &argv[i][std::strlen(LONG_ARG_SLICE_LEN)];\n        } else if (std::strncmp(argv[i], LONG_ARG_TARGET_DICT_LEN,\n              std::strlen(LONG_ARG_TARGET_DICT_LEN)) == 0) {\n          arg1 = 't';\n          arg2 = &argv[i][std::strlen(LONG_ARG_TARGET_DICT_LEN)];\n        } else if (std::strncmp(argv[i], LONG_ARG_MIN_SLICE_POP,\n              std::strlen(LONG_ARG_MIN_SLICE_POP)) == 0) {\n          arg1 = 'u';\n          arg2 = &argv[i][std::strlen(LONG_ARG_MIN_SLICE_POP)];\n        } else if (std::strncmp(argv[i], LONG_ARG_CHUNK_LEN,\n              std::strlen(LONG_ARG_CHUNK_LEN)) == 0) {\n          arg1 = 'c';\n          arg2 = &argv[i][std::strlen(LONG_ARG_CHUNK_LEN)];\n        } else if (std::strncmp(argv[i], LONG_ARG_OVERLAP_LEN,\n              std::strlen(LONG_ARG_OVERLAP_LEN)) == 0) {\n          arg1 = 'o';\n          arg2 = &argv[i][std::strlen(LONG_ARG_OVERLAP_LEN)];\n        } else {\n          printHelp(fileName(argv[0]));\n          fprintf(stderr, \"Invalid option '%s'\\n\", argv[i]);\n          exit(1);\n        }\n      }\n\n      /* Look for \"-f\" short args or \"--foo=#\" long args. */\n      if (arg1 == 'b') {\n        blockSize = readInt(arg2);\n        if (blockSize < 16 || blockSize > 65536) {\n          printHelp(fileName(argv[0]));\n          fprintf(stderr, \"Invalid option '%s'\\n\", argv[i]);\n          exit(1);\n        }\n      } else if (arg1 == 's') {\n        sliceLen = readInt(arg2);\n        // TODO(eustas): investigate why sliceLen == 4..5 greatly slows down\n        //               durschlag engine, but only from command line;\n        //               durschlag_runner seems to work fine with those.\n        if (sliceLen < 4 || sliceLen > 256) {\n          printHelp(fileName(argv[0]));\n          fprintf(stderr, \"Invalid option '%s'\\n\", argv[i]);\n          exit(1);\n        }\n      } else if (arg1 == 't') {\n        targetSize = readInt(arg2);\n        if (targetSize < 256 || targetSize > (1 << 25)) {\n          printHelp(fileName(argv[0]));\n          fprintf(stderr, \"Invalid option '%s'\\n\", argv[i]);\n          exit(1);\n        }\n      } else if (arg1 == 'u') {\n        minimumPopulation = readInt(arg2);\n        if (minimumPopulation < 256 || minimumPopulation > 65536) {\n          printHelp(fileName(argv[0]));\n          fprintf(stderr, \"Invalid option '%s'\\n\", argv[i]);\n          exit(1);\n        }\n      } else if (arg1 == 'c') {\n        chunkLen = readInt(arg2);\n        if (chunkLen < 0 || chunkLen > INT_MAX) {\n          printHelp(fileName(argv[0]));\n          fprintf(stderr, \"Invalid option '%s'\\n\", argv[i]);\n          exit(1);\n        }\n      } else if (arg1 == 'o') {\n        overlapLen = readInt(arg2);\n        if (overlapLen < 0 || overlapLen > INT_MAX) {\n          printHelp(fileName(argv[0]));\n          fprintf(stderr, \"Invalid option '%s'\\n\", argv[i]);\n          exit(1);\n        }\n      } else {\n        printHelp(fileName(argv[0]));\n        fprintf(stderr, \"Unrecognized option '%s'\\n\", argv[i]);\n        exit(1);\n      }\n      continue;\n    }\n\n    if (dictionaryArg == -1) {\n      if (method != METHOD_DISTILL && method != METHOD_PURIFY) {\n        dictionaryArg = i;\n        continue;\n      }\n    }\n\n    bool ok = true;\n#if defined(_MSC_VER)\n        const char* resolved_path = argv[i];\n#else\n    glob_t resolved_paths;\n    memset(&resolved_paths, 0, sizeof(resolved_paths));\n    if (glob(argv[i], GLOB_TILDE, NULL, &resolved_paths) == 0) {\n      for(size_t j = 0; j < resolved_paths.gl_pathc; ++j) {\n        const char* resolved_path = resolved_paths.gl_pathv[j];\n#endif\n        std::string content = readFile(resolved_path);\n        if (content.empty()) {\n          fprintf(stderr, \"Skipping empty sample: %s\\n\", resolved_path);\n          continue;\n        }\n        if (chunkLen == 0) {\n          paths.emplace_back(resolved_path);\n          data.insert(data.end(), content.begin(), content.end());\n          total += content.size();\n          sizes.push_back(content.size());\n          continue;\n        } else if (chunkLen <= overlapLen) {\n          printHelp(fileName(argv[0]));\n          fprintf(stderr, \"Invalid chunkLen - overlapLen combination\\n\");\n          exit(1);\n        }\n        for (size_t chunkStart = 0;\n            chunkStart < content.size();\n            chunkStart += chunkLen - overlapLen) {\n          std::string chunk = content.substr(chunkStart, chunkLen);\n          data.insert(data.end(), chunk.begin(), chunk.end());\n          total += chunk.size();\n          sizes.push_back(chunk.size());\n        }\n#if !defined(_MSC_VER)\n      }\n    } else {\n      ok = false;\n    }\n    globfree(&resolved_paths);\n#endif\n    if (!ok) exit(1);\n  }\n\n  fprintf(stderr, \"Number of chunks: %zu; total size: %zu\\n\", sizes.size(),\n          total);\n\n  bool wantDictionary = (dictionaryArg == -1);\n  if (method == METHOD_DISTILL || method == METHOD_PURIFY) {\n    wantDictionary = false;\n    if (chunkLen != 0) {\n      printHelp(fileName(argv[0]));\n      fprintf(stderr, \"Cannot mix 'rewrite samples' with positive chunk_len\\n\");\n      exit(1);\n    }\n  }\n  if (wantDictionary || total == 0) {\n    printHelp(fileName(argv[0]));\n    fprintf(stderr, \"Not enough arguments\\n\");\n    exit(1);\n  }\n\n  if (method == METHOD_SIEVE) {\n    writeFile(argv[dictionaryArg], sieve_generate(\n        targetSize, sliceLen, sizes, data.data()));\n  } else if (method == METHOD_DM) {\n    writeFile(argv[dictionaryArg], DM_generate(\n        targetSize, sizes, data.data()));\n  } else if (method == METHOD_DURCHSCHLAG) {\n    writeFile(argv[dictionaryArg], durchschlag_generate(\n        targetSize, sliceLen, blockSize, sizes, data.data()));\n  } else if (method == METHOD_DISTILL) {\n    durchschlag_distill(sliceLen, minimumPopulation, &sizes, data.data());\n    writeSamples(paths, sizes, data.data());\n  } else if (method == METHOD_PURIFY) {\n    durchschlag_purify(sliceLen, minimumPopulation, sizes, data.data());\n    writeSamples(paths, sizes, data.data());\n  } else {\n    printHelp(fileName(argv[0]));\n    fprintf(stderr, \"Unknown generator\\n\");\n    exit(1);\n  }\n  return 0;\n}\n"
  },
  {
    "path": "research/draw_diff.cc",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n   Author: zip753@gmail.com (Ivan Nikulin)\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Tool for drawing diff PPM images between two input PGM images. Normally used\n   with backward reference histogram drawing tool. */\n\n#include <algorithm>\n#include <cassert>\n#include <cmath>\n#include <cstdint>\n#include <cstdio>\n#include <cstdlib>  /* exit, EXIT_FAILURE */\n#include <vector>\n\n#if !defined(CHECK)\n#define CHECK(X) if (!(X)) exit(EXIT_FAILURE);\n#endif\n\ntypedef uint8_t* ScanLine;\ntypedef ScanLine* Image;\n\nvoid ReadPGM(FILE* f, Image* image, size_t* height, size_t* width) {\n  int colors;\n  CHECK(fscanf(f, \"P5\\n%lu %lu\\n%d\\n\", width, height, &colors) == 3);\n  assert(colors == 255);\n  ScanLine* lines = new ScanLine[*height];\n  *image = lines;\n  for (int i = *height - 1; i >= 0; --i) {\n    ScanLine line = new uint8_t[*width];\n    lines[i] = line;\n    CHECK(fread(line, 1, *width, f) == *width);\n  }\n}\n\nvoid CalculateDiff(int** diff, Image image1, Image image2,\n                   size_t height, size_t width) {\n  for (size_t i = 0; i < height; ++i) {\n    for (size_t j = 0; j < width; ++j) {\n      diff[i][j] = static_cast<int>(image1[i][j]) - image2[i][j];\n    }\n  }\n}\n\nvoid DrawDiff(int** diff, Image image1, Image image2,\n              size_t height, size_t width, FILE* f) {\n  int max = -1234;\n  int min = +1234;\n  for (size_t i = 0; i < height; ++i) {\n    for (size_t j = 0; j < width; ++j) {\n      if (max < diff[i][j]) max = diff[i][j];\n      if (min > diff[i][j]) min = diff[i][j];\n      int img_min = std::min(255 - image1[i][j], 255 - image2[i][j]);\n      if (max < img_min) max = img_min;\n    }\n  }\n\n  int abs_max = -min;\n  if (abs_max < max) abs_max = max;\n\n  fprintf(f, \"P6\\n%lu %lu\\n%d\\n\", width, height, abs_max);\n\n  uint8_t* row = new uint8_t[3 * width];\n  for (int i = height - 1; i >= 0; --i) {\n    for (int j = 0; j < width; ++j) {\n      int min_val = std::min(255 - image1[i][j], 255 - image2[i][j]);\n      int max_val = std::max(min_val, abs(diff[i][j]));\n      if (diff[i][j] > 0) { /* red */\n        row[3 * j + 0] = abs_max - max_val + diff[i][j];\n        row[3 * j + 1] = abs_max - max_val;\n        row[3 * j + 2] = abs_max - max_val + min_val;\n      } else { /* green */\n        row[3 * j + 0] = abs_max - max_val;\n        row[3 * j + 1] = abs_max - max_val - diff[i][j];\n        row[3 * j + 2] = abs_max - max_val + min_val;\n      }\n    }\n    fwrite(row, 1, 3 * width, f);\n  }\n  delete[] row;\n}\n\nint main(int argc, char** argv) {\n  if (argc != 4) {\n    printf(\"usage: %s pgm1 pgm2 diff_ppm_path\\n\", argv[0]);\n    return 1;\n  }\n\n  Image image1, image2;\n  size_t h1, w1, h2, w2;\n\n  FILE* fimage1 = fopen(argv[1], \"rb\");\n  ReadPGM(fimage1, &image1, &h1, &w1);\n  fclose(fimage1);\n\n  FILE* fimage2 = fopen(argv[2], \"rb\");\n  ReadPGM(fimage2, &image2, &h2, &w2);\n  fclose(fimage2);\n\n  if (!(h1 == h2 && w1 == w2)) {\n    printf(\"Images must have the same size.\\n\");\n    return 1;\n  }\n\n  int** diff = new int*[h1];\n  for (size_t i = 0; i < h1; ++i) diff[i] = new int[w1];\n  CalculateDiff(diff, image1, image2, h1, w1);\n\n  FILE* fdiff = fopen(argv[3], \"wb\");\n  DrawDiff(diff, image1, image2, h1, w1, fdiff);\n  fclose(fdiff);\n\n  return 0;\n}\n"
  },
  {
    "path": "research/draw_histogram.cc",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n   Author: zip753@gmail.com (Ivan Nikulin)\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Backward reference visualization tool. Accepts file with backward references\n   as an input and produces PGM image with histogram of those references. */\n\n#include <algorithm> /* min */\n#include <cassert>\n#include <cstring> /* memset */\n#include <cmath> /* log, round */\n#include <cstdio> /* fscanf, fprintf */\n#include <cstdint>\n\n#include <gflags/gflags.h>\nusing gflags::ParseCommandLineFlags;\n\n#include \"third_party/absl/flags/flag.h\"\n#include \"read_dist.h\"\n\nDEFINE_int32(height, 1000, \"Height of the resulting histogram.\");\nDEFINE_int32(width, 8000, \"Width of the resulting histogram.\");\nDEFINE_int32(size, 1e8, \"Size of the compressed file.\");\nDEFINE_int32(brotli_window, -1, \"Size of brotli window in bits.\");\nDEFINE_uint64(min_distance, 0, \"Minimum distance.\");\nDEFINE_uint64(max_distance, 1 << 30, \"Maximum distance.\");\nDEFINE_bool(with_copies, false, \"True if input contains copy length.\");\nDEFINE_bool(simple, false, \"True if using only black and white pixels.\");\nDEFINE_bool(linear, false, \"True if using linear distance mapping.\");\nDEFINE_uint64(skip, 0, \"Number of bytes to skip.\");\n\ninline double DistanceTransform(double x) {\n  static bool linear = absl::GetFlag(FLAGS_linear);\n  if (linear) {\n    return x;\n  } else {\n    /* Using log^2 scale because log scale produces big white gap at the bottom\n       of image. */\n    return log(x) * log(x);\n  }\n}\n\n/* Mapping pixel density on arc function to increase contrast. */\ninline double DensityTransform(double x) {\n  double z = 255 - x;\n  return sqrt(255 * 255 - z * z);\n}\n\ninline int GetMaxDistance() { return absl::GetFlag(FLAGS_max_distance); }\n\nvoid AdjustPosition(int* pos) {\n  static uint32_t offset = 0;\n  static int last = 0;\n  static uint32_t window_size = (1 << absl::GetFlag(FLAGS_brotli_window));\n  assert(*pos >= 0 && *pos < window_size);\n  if (*pos < last) {\n    offset += window_size;\n  }\n  last = *pos;\n  *pos += offset;\n}\n\nvoid BuildHistogram(FILE* fin, int** histo) {\n  int height = absl::GetFlag(FLAGS_height);\n  int width = absl::GetFlag(FLAGS_width);\n  int skip = absl::GetFlag(FLAGS_skip);\n  size_t min_distance = absl::GetFlag(FLAGS_min_distance);\n\n  printf(\"height = %d, width = %d\\n\", height, width);\n\n  for (int i = 0; i < height; i++) {\n    for (int j = 0; j < width; j++) {\n      histo[i][j] = 0;\n    }\n  }\n\n  int max_pos = absl::GetFlag(FLAGS_size) - skip;\n  double min_dist = min_distance > 0 ? DistanceTransform(min_distance) : 0;\n  double max_dist = DistanceTransform(GetMaxDistance()) - min_dist;\n  int copy, pos, distance, x, y;\n  double dist;\n  while (ReadBackwardReference(fin, &copy, &pos, &distance)) {\n    if (pos == -1) continue;  // In case when only insert is present.\n    if (distance < min_distance || distance >= GetMaxDistance()) continue;\n    if (absl::GetFlag(FLAGS_brotli_window) != -1) {\n      AdjustPosition(&pos);\n    }\n    if (pos >= skip && distance <= pos) {\n      pos -= skip;\n      if (pos >= max_pos) break;\n      dist = DistanceTransform(static_cast<double>(distance)) - min_dist;\n\n      x = std::min(static_cast<int>(round(dist / max_dist * height)),\n                   height - 1);\n      y = 1ul * pos * width / max_pos;\n      if (!(y >= 0 && y < width)) {\n        printf(\"pos = %d, max_pos = %d, y = %d\\n\", pos, max_pos, y);\n        assert(y >= 0 && y < width);\n      }\n\n      if (absl::GetFlag(FLAGS_with_copies)) {\n        int right = 1ul * (pos + copy - 1) * width / max_pos;\n        if (right < 0) {\n          printf(\"pos = %d, distance = %d, copy = %d, y = %d, right = %d\\n\",\n                  pos, distance, copy, y, right);\n          assert(right >= 0);\n        }\n        if (y == right) {\n          histo[x][y] += copy;\n        } else {\n          int pos2 = static_cast<int>(ceil(1.0 * (y + 1) * max_pos / width));\n          histo[x][y] += pos2 - pos;\n          for (int i = y + 1; i < right && i < width; ++i) {\n            histo[x][i] += max_pos / width;  // Sometimes 1 more, but who cares.\n          }\n          // Make sure the match doesn't go beyond the image.\n          if (right < width) {\n            pos2 = static_cast<int>(ceil(1.0 * right * max_pos / width));\n            histo[x][right] += pos + copy - 1 - pos2 + 1;\n          }\n        }\n      } else {\n        histo[x][y]++;\n      }\n    }\n  }\n}\n\nvoid ConvertToPixels(int** histo, uint8_t** pixel) {\n  int height = absl::GetFlag(FLAGS_height);\n  int width = absl::GetFlag(FLAGS_width);\n\n  int maxs = 0;\n  for (int i = 0; i < height; i++) {\n    for (int j = 0; j < width; j++) {\n      if (maxs < histo[i][j]) maxs = histo[i][j];\n    }\n  }\n\n  bool simple = absl::GetFlag(FLAGS_simple);\n  double max_histo = static_cast<double>(maxs);\n  for (int i = 0; i < height; i++) {\n    for (int j = 0; j < width; j++) {\n      if (simple) {\n        pixel[i][j] = histo[i][j] > 0 ? 0 : 255;\n      } else {\n        pixel[i][j] = static_cast<uint8_t>(\n            255 - DensityTransform(histo[i][j] / max_histo * 255));\n      }\n    }\n  }\n}\n\nvoid DrawPixels(uint8_t** pixel, FILE* fout) {\n  int height = absl::GetFlag(FLAGS_height);\n  int width = absl::GetFlag(FLAGS_width);\n\n  fprintf(fout, \"P5\\n%d %d\\n255\\n\", width, height);\n  for (int i = height - 1; i >= 0; i--) {\n    fwrite(pixel[i], 1, width, fout);\n  }\n}\n\nint main(int argc, char* argv[]) {\n  base::ParseCommandLine(&argc, &argv);\n  if (argc != 3) {\n    printf(\"usage: draw_histogram.cc data output_file\\n\");\n    return 1;\n  }\n\n  int height = absl::GetFlag(FLAGS_height);\n  int width = absl::GetFlag(FLAGS_width);\n\n  FILE* fin = fopen(argv[1], \"r\");\n  FILE* fout = fopen(argv[2], \"wb\");\n\n  if (fin != nullptr && fout != nullptr) {\n    uint8_t** pixel = new uint8_t*[height];\n    int** histo = new int*[height];\n    for (int i = 0; i < height; i++) {\n      pixel[i] = new uint8_t[width];\n      histo[i] = new int[width];\n    }\n\n    BuildHistogram(fin, histo);\n\n    ConvertToPixels(histo, pixel);\n\n    DrawPixels(pixel, fout);\n  }\n\n  if (fin) fclose(fin);\n  if (fout) fclose(fout);\n\n  return 0;\n}\n"
  },
  {
    "path": "research/durchschlag.cc",
    "content": "#include \"durchschlag.h\"\n\n#include <algorithm>\n#include <exception>  /* terminate */\n\n#include <divsufsort.h>\n\n/* Pointer to position in text. */\ntypedef DurchschlagTextIdx TextIdx;\n\n/* (Sum of) value(s) of slice(s). */\ntypedef uint32_t Score;\n\ntypedef struct HashSlot {\n  TextIdx next;\n  TextIdx offset;\n} HashSlot;\n\ntypedef struct MetaSlot {\n  TextIdx mark;\n  Score score;\n} MetaSlot;\n\ntypedef struct Range {\n  TextIdx start;\n  TextIdx end;\n} Range;\n\ntypedef struct Candidate {\n  Score score;\n  TextIdx position;\n} Candidate;\n\nstruct greaterScore {\n  bool operator()(const Candidate& a, const Candidate& b) const {\n    return (a.score > b.score) ||\n        ((a.score == b.score) && (a.position < b.position));\n  }\n};\n\nstruct lessScore {\n  bool operator()(const Candidate& a, const Candidate& b) const {\n    return (a.score < b.score) ||\n        ((a.score == b.score) && (a.position > b.position));\n  }\n};\n\n#define CANDIDATE_BUNDLE_SIZE (1 << 18)\n\nstatic void fatal(const char* error) {\n  fprintf(stderr, \"%s\\n\", error);\n  std::terminate();\n}\n\nstatic TextIdx calculateDictionarySize(const std::vector<Range>& ranges) {\n  TextIdx result = 0;\n  for (size_t i = 0; i < ranges.size(); ++i) {\n    const Range& r = ranges[i];\n    result += r.end - r.start;\n  }\n  return result;\n}\n\nstatic std::string createDictionary(\n    const uint8_t* data, const std::vector<Range>& ranges, size_t limit) {\n  std::string output;\n  output.reserve(calculateDictionarySize(ranges));\n  for (size_t i = 0; i < ranges.size(); ++i) {\n    const Range& r = ranges[i];\n    output.insert(output.end(), &data[r.start], &data[r.end]);\n  }\n  if (output.size() > limit) {\n    output.resize(limit);\n  }\n  return output;\n}\n\n/* precondition: span > 0\n   precondition: end + span == len(shortcut) */\nstatic Score buildCandidatesList(std::vector<Candidate>* candidates,\n    std::vector<MetaSlot>* map, TextIdx span, const TextIdx* shortcut,\n    TextIdx end) {\n  candidates->resize(0);\n\n  size_t n = map->size();\n  MetaSlot* slots = map->data();\n  for (size_t j = 0; j < n; ++j) {\n    slots[j].mark = 0;\n  }\n\n  Score score = 0;\n  /* Consider the whole span, except one last item. The following loop will\n     add the last item to the end of the \"chain\", evaluate it, and cut one\n     \"link\" form the beginning. */\n  for (size_t j = 0; j < span - 1; ++j) {\n    MetaSlot& item = slots[shortcut[j]];\n    if (item.mark == 0) {\n      score += item.score;\n    }\n    item.mark++;\n  }\n\n  TextIdx i = 0;\n  TextIdx limit = std::min<TextIdx>(end, CANDIDATE_BUNDLE_SIZE);\n  Score maxScore = 0;\n  for (; i < limit; ++i) {\n    TextIdx slice = shortcut[i + span - 1];\n    MetaSlot& pick = slots[slice];\n    if (pick.mark == 0) {\n      score += pick.score;\n    }\n    pick.mark++;\n\n    if (score > maxScore) {\n      maxScore = score;\n    }\n    candidates->push_back({score, i});\n\n    MetaSlot& drop = slots[shortcut[i]];\n    drop.mark--;\n    if (drop.mark == 0) {\n      score -= drop.score;\n    }\n  }\n\n  std::make_heap(candidates->begin(), candidates->end(), greaterScore());\n  Score minScore = candidates->at(0).score;\n  for (; i < end; ++i) {\n    TextIdx slice = shortcut[i + span - 1];\n    MetaSlot& pick = slots[slice];\n    if (pick.mark == 0) {\n      score += pick.score;\n    }\n    pick.mark++;\n\n    if (score > maxScore) {\n      maxScore = score;\n    }\n    if (score >= minScore) {\n      candidates->push_back({score, i});\n      std::push_heap(candidates->begin(), candidates->end(), greaterScore());\n      if (candidates->size() > CANDIDATE_BUNDLE_SIZE && maxScore != minScore) {\n        while (candidates->at(0).score == minScore) {\n          std::pop_heap(candidates->begin(), candidates->end(), greaterScore());\n          candidates->pop_back();\n        }\n        minScore = candidates->at(0).score;\n      }\n    }\n\n    MetaSlot& drop = slots[shortcut[i]];\n    drop.mark--;\n    if (drop.mark == 0) {\n      score -= drop.score;\n    }\n  }\n\n  for (size_t j = 0; j < n; ++j) {\n    slots[j].mark = 0;\n  }\n\n  std::make_heap(candidates->begin(), candidates->end(), lessScore());\n  return minScore;\n}\n\n/* precondition: span > 0\n   precondition: end + span == len(shortcut) */\nstatic Score rebuildCandidatesList(std::vector<TextIdx>* candidates,\n    std::vector<MetaSlot>* map, TextIdx span, const TextIdx* shortcut,\n    TextIdx end, TextIdx* next) {\n  size_t n = candidates->size();\n  TextIdx* data = candidates->data();\n  for (size_t i = 0; i < n; ++i) {\n    data[i] = 0;\n  }\n\n  n = map->size();\n  MetaSlot* slots = map->data();\n  for (size_t i = 0; i < n; ++i) {\n    slots[i].mark = 0;\n  }\n\n  Score score = 0;\n  /* Consider the whole span, except one last item. The following loop will\n     add the last item to the end of the \"chain\", evaluate it, and cut one\n     \"link\" form the beginning. */\n  for (TextIdx i = 0; i < span - 1; ++i) {\n    MetaSlot& item = slots[shortcut[i]];\n    if (item.mark == 0) {\n      score += item.score;\n    }\n    item.mark++;\n  }\n\n  Score maxScore = 0;\n  for (TextIdx i = 0; i < end; ++i) {\n    MetaSlot& pick = slots[shortcut[i + span - 1]];\n    if (pick.mark == 0) {\n      score += pick.score;\n    }\n    pick.mark++;\n\n    if (candidates->size() <= score) {\n      candidates->resize(score + 1);\n    }\n    if (score > maxScore) {\n      maxScore = score;\n    }\n    next[i] = candidates->at(score);\n    candidates->at(score) = i;\n\n    MetaSlot& drop = slots[shortcut[i]];\n    drop.mark--;\n    if (drop.mark == 0) {\n      score -= drop.score;\n    }\n  }\n\n  for (size_t i = 0; i < n; ++i) {\n    slots[i].mark = 0;\n  }\n\n  candidates->resize(maxScore + 1);\n  return maxScore;\n}\n\nstatic void addRange(std::vector<Range>* ranges, TextIdx start, TextIdx end) {\n  for (auto it = ranges->begin(); it != ranges->end();) {\n    if (end < it->start) {\n      ranges->insert(it, {start, end});\n      return;\n    }\n    if (it->end < start) {\n      it++;\n      continue;\n    }\n    // Combine with existing.\n    start = std::min(start, it->start);\n    end = std::max(end, it->end);\n    // Remove consumed vector and continue.\n    it = ranges->erase(it);\n  }\n  ranges->push_back({start, end});\n}\n\nstd::string durchschlag_generate(\n    size_t dictionary_size_limit, size_t slice_len, size_t block_len,\n    const std::vector<size_t>& sample_sizes, const uint8_t* sample_data) {\n  DurchschlagContext ctx = durchschlag_prepare(\n      slice_len, sample_sizes, sample_data);\n  return durchschlag_generate(DURCHSCHLAG_COLLABORATIVE,\n      dictionary_size_limit, block_len, ctx, sample_data);\n}\n\nDurchschlagContext durchschlag_prepare(size_t slice_len,\n    const std::vector<size_t>& sample_sizes, const uint8_t* sample_data) {\n  /* Parameters aliasing */\n  TextIdx sliceLen = static_cast<TextIdx>(slice_len);\n  if (sliceLen != slice_len) fatal(\"slice_len is too large\");\n  if (sliceLen < 1) fatal(\"slice_len is too small\");\n  const uint8_t* data = sample_data;\n\n  TextIdx total = 0;\n  std::vector<TextIdx> offsets;\n  offsets.reserve(sample_sizes.size());\n  for (size_t i = 0; i < sample_sizes.size(); ++i) {\n    TextIdx delta = static_cast<TextIdx>(sample_sizes[i]);\n    if (delta != sample_sizes[i]) fatal(\"sample is too large\");\n    if (delta == 0) fatal(\"0-length samples are prohibited\");\n    TextIdx next_total = total + delta;\n    if (next_total <= total) fatal(\"corpus is too large\");\n    total = next_total;\n    offsets.push_back(total);\n  }\n\n  if (total < sliceLen) fatal(\"slice_len is larger than corpus size\");\n  TextIdx end = total - static_cast<TextIdx>(sliceLen) + 1;\n  TextIdx hashLen = 11;\n  while (hashLen < 29 && ((1u << hashLen) < end)) {\n    hashLen += 3;\n  }\n  hashLen -= 3;\n  TextIdx hashMask = (1u << hashLen) - 1u;\n  std::vector<TextIdx> hashHead(1 << hashLen);\n  TextIdx hash = 0;\n  TextIdx lShift = 3;\n  TextIdx rShift = hashLen - lShift;\n  for (TextIdx i = 0; i < sliceLen - 1; ++i) {\n    TextIdx v = data[i];\n    hash = (((hash << lShift) | (hash >> rShift)) & hashMask) ^ v;\n  }\n  TextIdx lShiftX = (lShift * (sliceLen - 1)) % hashLen;\n  TextIdx rShiftX = hashLen - lShiftX;\n\n  std::vector<HashSlot> map;\n  map.push_back({0, 0});\n  TextIdx hashSlot = 1;\n  std::vector<TextIdx> sliceMap;\n  sliceMap.reserve(end);\n  for (TextIdx i = 0; i < end; ++i) {\n    TextIdx v = data[i + sliceLen - 1];\n    TextIdx bucket = (((hash << lShift) | (hash >> rShift)) & hashMask) ^ v;\n    v = data[i];\n    hash = bucket ^ (((v << lShiftX) | (v >> rShiftX)) & hashMask);\n    TextIdx slot = hashHead[bucket];\n    while (slot != 0) {\n      HashSlot& item = map[slot];\n      TextIdx start = item.offset;\n      bool miss = false;\n      for (TextIdx j = 0; j < sliceLen; ++j) {\n        if (data[i + j] != data[start + j]) {\n          miss = true;\n          break;\n        }\n      }\n      if (!miss) {\n        sliceMap.push_back(slot);\n        break;\n      }\n      slot = item.next;\n    }\n    if (slot == 0) {\n      map.push_back({hashHead[bucket], i});\n      hashHead[bucket] = hashSlot;\n      sliceMap.push_back(hashSlot);\n      hashSlot++;\n    }\n  }\n\n  return {total, sliceLen, static_cast<TextIdx>(map.size()),\n      std::move(offsets), std::move(sliceMap)};\n}\n\nDurchschlagContext durchschlag_prepare(size_t slice_len,\n    const std::vector<size_t>& sample_sizes, const DurchschlagIndex& index) {\n  /* Parameters aliasing */\n  TextIdx sliceLen = static_cast<TextIdx>(slice_len);\n  if (sliceLen != slice_len) fatal(\"slice_len is too large\");\n  if (sliceLen < 1) fatal(\"slice_len is too small\");\n  const TextIdx* lcp = index.lcp.data();\n  const TextIdx* sa = index.sa.data();\n\n  TextIdx total = 0;\n  std::vector<TextIdx> offsets;\n  offsets.reserve(sample_sizes.size());\n  for (size_t i = 0; i < sample_sizes.size(); ++i) {\n    TextIdx delta = static_cast<TextIdx>(sample_sizes[i]);\n    if (delta != sample_sizes[i]) fatal(\"sample is too large\");\n    if (delta == 0) fatal(\"0-length samples are prohibited\");\n    TextIdx next_total = total + delta;\n    if (next_total <= total) fatal(\"corpus is too large\");\n    total = next_total;\n    offsets.push_back(total);\n  }\n\n  if (total < sliceLen) fatal(\"slice_len is larger than corpus size\");\n  TextIdx counter = 1;\n  TextIdx end = total - sliceLen + 1;\n  std::vector<TextIdx> sliceMap(total);\n  TextIdx last = 0;\n  TextIdx current = 1;\n  while (current <= total) {\n    if (lcp[current - 1] < sliceLen) {\n      for (TextIdx i = last; i < current; ++i) {\n        sliceMap[sa[i]] = counter;\n      }\n      counter++;\n      last = current;\n    }\n    current++;\n  }\n  sliceMap.resize(end);\n\n  // Reorder items for the better locality.\n  std::vector<TextIdx> reorder(counter);\n  counter = 1;\n  for (TextIdx i = 0; i < end; ++i) {\n    if (reorder[sliceMap[i]] == 0) {\n      reorder[sliceMap[i]] = counter++;\n    }\n  }\n  for (TextIdx i = 0; i < end; ++i) {\n    sliceMap[i] = reorder[sliceMap[i]];\n  }\n\n  return {total, sliceLen, counter, std::move(offsets), std::move(sliceMap)};\n}\n\nDurchschlagIndex durchschlag_index(const std::vector<uint8_t>& data) {\n  TextIdx total = static_cast<TextIdx>(data.size());\n  if (total != data.size()) fatal(\"corpus is too large\");\n  saidx_t saTotal = static_cast<saidx_t>(total);\n  if (saTotal < 0) fatal(\"corpus is too large\");\n  if (static_cast<TextIdx>(saTotal) != total) fatal(\"corpus is too large\");\n  std::vector<TextIdx> sa(total);\n  /* Hopefully, non-negative int32_t values match TextIdx ones. */\n  if (sizeof(TextIdx) != sizeof(int32_t)) fatal(\"type length mismatch\");\n  int32_t* saData = reinterpret_cast<int32_t*>(sa.data());\n  divsufsort(data.data(), saData, saTotal);\n\n  std::vector<TextIdx> isa(total);\n  for (TextIdx i = 0; i < total; ++i) isa[sa[i]] = i;\n\n  // TODO(eustas): borrowed -> unknown efficiency.\n  std::vector<TextIdx> lcp(total);\n  TextIdx k = 0;\n  lcp[total - 1] = 0;\n  for (TextIdx i = 0; i < total; ++i) {\n    TextIdx current = isa[i];\n    if (current == total - 1) {\n      k = 0;\n      continue;\n    }\n    TextIdx j = sa[current + 1];  // Suffix which follow i-th suffix.\n    while ((i + k < total) && (j + k < total) && (data[i + k] == data[j + k])) {\n      ++k;\n    }\n    lcp[current] = k;\n    if (k > 0) --k;\n  }\n\n  return {std::move(lcp), std::move(sa)};\n}\n\nstatic void ScoreSlices(const std::vector<TextIdx>& offsets,\n                        std::vector<MetaSlot>& map, const TextIdx* shortcut,\n                        size_t slice_len, TextIdx end) {\n  TextIdx piece = 0;\n  TextIdx boundary = offsets[0];\n  /* Fresh map contains all zeroes -> initial mark should be different. */\n  TextIdx mark = 1;\n  for (TextIdx i = 0; i < end; ++i) {\n    if (i == boundary) {\n      piece++;\n      mark++;\n      boundary = offsets[piece];\n    }\n    MetaSlot& item = map[shortcut[i]];\n    if (item.mark != mark && i + slice_len <= boundary) {\n      item.mark = mark;\n      item.score++;\n    }\n  }\n}\n\nstatic std::string durchschlagGenerateExclusive(\n    size_t dictionary_size_limit, size_t block_len,\n    const DurchschlagContext& context, const uint8_t* sample_data) {\n  /* Parameters aliasing */\n  TextIdx targetSize = static_cast<TextIdx>(dictionary_size_limit);\n  if (targetSize != dictionary_size_limit) {\n    fprintf(stderr, \"dictionary_size_limit is too large\\n\");\n    return \"\";\n  }\n  TextIdx sliceLen = context.sliceLen;\n  TextIdx total = context.dataSize;\n  TextIdx blockLen = static_cast<TextIdx>(block_len);\n  if (blockLen != block_len) {\n    fprintf(stderr, \"block_len is too large\\n\");\n    return \"\";\n  }\n  const uint8_t* data = sample_data;\n  const std::vector<TextIdx>& offsets = context.offsets;\n  std::vector<MetaSlot> map(context.numUniqueSlices);\n  const TextIdx* shortcut = context.sliceMap.data();\n\n  /* Initialization */\n  if (blockLen < sliceLen) {\n    fprintf(stderr, \"sliceLen is larger than block_len\\n\");\n    return \"\";\n  }\n  if (targetSize < blockLen || total < blockLen) {\n    fprintf(stderr, \"block_len is too large\\n\");\n    return \"\";\n  }\n  TextIdx end = total - sliceLen + 1;\n  ScoreSlices(offsets, map, shortcut, sliceLen, end);\n  TextIdx span = blockLen - sliceLen + 1;\n  end = static_cast<TextIdx>(context.sliceMap.size()) - span;\n  std::vector<TextIdx> candidates;\n  std::vector<TextIdx> next(end);\n  Score maxScore = rebuildCandidatesList(\n      &candidates, &map, span, shortcut, end, next.data());\n\n  /* Block selection */\n  const size_t triesLimit = (600 * 1000000) / span;\n  const size_t candidatesLimit = (150 * 1000000) / span;\n  std::vector<Range> ranges;\n  TextIdx mark = 0;\n  size_t numTries = 0;\n  while (true) {\n    TextIdx dictSize = calculateDictionarySize(ranges);\n    size_t numCandidates = 0;\n    if (dictSize > targetSize - blockLen) {\n      break;\n    }\n    if (maxScore == 0) {\n      break;\n    }\n    while (true) {\n      TextIdx candidate = 0;\n      while (maxScore > 0) {\n        if (candidates[maxScore] != 0) {\n          candidate = candidates[maxScore];\n          candidates[maxScore] = next[candidate];\n          break;\n        }\n        maxScore--;\n      }\n      if (maxScore == 0) {\n        break;\n      }\n      mark++;\n      numTries++;\n      numCandidates++;\n      Score score = 0;\n      for (size_t j = candidate; j < candidate + span; ++j) {\n        MetaSlot& item = map[shortcut[j]];\n        if (item.mark != mark) {\n          score += item.score;\n          item.mark = mark;\n        }\n      }\n      if (score < maxScore) {\n        if (numTries < triesLimit && numCandidates < candidatesLimit) {\n          next[candidate] = candidates[score];\n          candidates[score] = candidate;\n        } else {\n          maxScore = rebuildCandidatesList(\n              &candidates, &map, span, shortcut, end, next.data());\n          mark = 0;\n          numTries = 0;\n          numCandidates = 0;\n        }\n        continue;\n      } else if (score > maxScore) {\n        fprintf(stderr, \"Broken invariant\\n\");\n        return \"\";\n      }\n      for (TextIdx j = candidate; j < candidate + span; ++j) {\n        MetaSlot& item = map[shortcut[j]];\n        item.score = 0;\n      }\n      addRange(&ranges, candidate, candidate + blockLen);\n      break;\n    }\n  }\n\n  return createDictionary(data, ranges, targetSize);\n}\n\nstatic std::string durchschlagGenerateCollaborative(\n    size_t dictionary_size_limit, size_t block_len,\n    const DurchschlagContext& context, const uint8_t* sample_data) {\n  /* Parameters aliasing */\n  TextIdx targetSize = static_cast<TextIdx>(dictionary_size_limit);\n  if (targetSize != dictionary_size_limit) {\n    fprintf(stderr, \"dictionary_size_limit is too large\\n\");\n    return \"\";\n  }\n  TextIdx sliceLen = context.sliceLen;\n  TextIdx total = context.dataSize;\n  TextIdx blockLen = static_cast<TextIdx>(block_len);\n  if (blockLen != block_len) {\n    fprintf(stderr, \"block_len is too large\\n\");\n    return \"\";\n  }\n  const uint8_t* data = sample_data;\n  const std::vector<TextIdx>& offsets = context.offsets;\n  std::vector<MetaSlot> map(context.numUniqueSlices);\n  const TextIdx* shortcut = context.sliceMap.data();\n\n  /* Initialization */\n  if (blockLen < sliceLen) {\n    fprintf(stderr, \"sliceLen is larger than block_len\\n\");\n    return \"\";\n  }\n  if (targetSize < blockLen || total < blockLen) {\n    fprintf(stderr, \"block_len is too large\\n\");\n    return \"\";\n  }\n  TextIdx end = total - sliceLen + 1;\n  ScoreSlices(offsets, map, shortcut, sliceLen,end);\n  TextIdx span = blockLen - sliceLen + 1;\n  end = static_cast<TextIdx>(context.sliceMap.size()) - span;\n  std::vector<Candidate> candidates;\n  candidates.reserve(CANDIDATE_BUNDLE_SIZE + 1024);\n  Score minScore = buildCandidatesList(&candidates, &map, span, shortcut, end);\n\n  /* Block selection */\n  std::vector<Range> ranges;\n  TextIdx mark = 0;\n  while (true) {\n    TextIdx dictSize = calculateDictionarySize(ranges);\n    if (dictSize > targetSize - blockLen) {\n      break;\n    }\n    if (minScore == 0 && candidates.empty()) {\n      break;\n    }\n    while (true) {\n      if (candidates.empty()) {\n        minScore = buildCandidatesList(&candidates, &map, span, shortcut, end);\n        mark = 0;\n      }\n      TextIdx candidate = candidates[0].position;\n      Score expectedScore = candidates[0].score;\n      if (expectedScore == 0) {\n        candidates.resize(0);\n        break;\n      }\n      std::pop_heap(candidates.begin(), candidates.end(), lessScore());\n      candidates.pop_back();\n      mark++;\n      Score score = 0;\n      for (TextIdx j = candidate; j < candidate + span; ++j) {\n        MetaSlot& item = map[shortcut[j]];\n        if (item.mark != mark) {\n          score += item.score;\n          item.mark = mark;\n        }\n      }\n      if (score < expectedScore) {\n        if (score >= minScore) {\n          candidates.push_back({score, candidate});\n          std::push_heap(candidates.begin(), candidates.end(), lessScore());\n        }\n        continue;\n      } else if (score > expectedScore) {\n        fatal(\"Broken invariant\");\n      }\n      for (TextIdx j = candidate; j < candidate + span; ++j) {\n        MetaSlot& item = map[shortcut[j]];\n        item.score = 0;\n      }\n      addRange(&ranges, candidate, candidate + blockLen);\n      break;\n    }\n  }\n\n  return createDictionary(data, ranges, targetSize);\n}\n\nstd::string durchschlag_generate(DurchschalgResourceStrategy strategy,\n    size_t dictionary_size_limit, size_t block_len,\n    const DurchschlagContext& context, const uint8_t* sample_data) {\n  if (strategy == DURCHSCHLAG_COLLABORATIVE) {\n    return durchschlagGenerateCollaborative(\n        dictionary_size_limit, block_len, context, sample_data);\n  } else {\n    return durchschlagGenerateExclusive(\n        dictionary_size_limit, block_len, context, sample_data);\n  }\n}\n\nvoid durchschlag_distill(size_t slice_len, size_t minimum_population,\n    std::vector<size_t>* sample_sizes, uint8_t* sample_data) {\n  /* Parameters aliasing */\n  uint8_t* data = sample_data;\n\n  /* Build slice map. */\n  DurchschlagContext context = durchschlag_prepare(\n      slice_len, *sample_sizes, data);\n\n  /* Calculate slice population. */\n  const std::vector<TextIdx>& offsets = context.offsets;\n  std::vector<MetaSlot> map(context.numUniqueSlices);\n  const TextIdx* shortcut = context.sliceMap.data();\n  TextIdx sliceLen = context.sliceLen;\n  TextIdx total = context.dataSize;\n  TextIdx end = total - sliceLen + 1;\n  ScoreSlices(offsets, map, shortcut, sliceLen, end);\n\n  /* Condense samples, omitting unique slices. */\n  TextIdx readPos = 0;\n  TextIdx writePos = 0;\n  TextIdx lastNonUniquePos = 0;\n  for (TextIdx i = 0; i < sample_sizes->size(); ++i) {\n    TextIdx sampleStart = writePos;\n    TextIdx oldSampleEnd =\n        readPos + static_cast<TextIdx>(sample_sizes->at(i));\n    while (readPos < oldSampleEnd) {\n      if (readPos < end) {\n        MetaSlot& item = map[shortcut[readPos]];\n        if (item.score >= minimum_population) {\n          lastNonUniquePos = readPos + sliceLen;\n        }\n      }\n      if (readPos < lastNonUniquePos) {\n        data[writePos++] = data[readPos];\n      }\n      readPos++;\n    }\n    sample_sizes->at(i) = writePos - sampleStart;\n  }\n}\n\nvoid durchschlag_purify(size_t slice_len, size_t minimum_population,\n    const std::vector<size_t>& sample_sizes, uint8_t* sample_data) {\n  /* Parameters aliasing */\n  uint8_t* data = sample_data;\n\n  /* Build slice map. */\n  DurchschlagContext context = durchschlag_prepare(\n      slice_len, sample_sizes, data);\n\n  /* Calculate slice population. */\n  const std::vector<TextIdx>& offsets = context.offsets;\n  std::vector<MetaSlot> map(context.numUniqueSlices);\n  const TextIdx* shortcut = context.sliceMap.data();\n  TextIdx sliceLen = context.sliceLen;\n  TextIdx total = context.dataSize;\n  TextIdx end = total - sliceLen + 1;\n  ScoreSlices(offsets, map, shortcut, sliceLen, end);\n\n  /* Rewrite samples, zeroing out unique slices. */\n  TextIdx lastNonUniquePos = 0;\n  for (TextIdx readPos = 0; readPos < total; ++readPos) {\n    if (readPos < end) {\n      MetaSlot& item = map[shortcut[readPos]];\n      if (item.score >= minimum_population) {\n        lastNonUniquePos = readPos + sliceLen;\n      }\n    }\n    if (readPos >= lastNonUniquePos) {\n      data[readPos] = 0;\n    }\n  }\n}\n"
  },
  {
    "path": "research/durchschlag.h",
    "content": "#ifndef BROTLI_RESEARCH_DURCHSCHLAG_H_\n#define BROTLI_RESEARCH_DURCHSCHLAG_H_\n\n#include <cstddef>\n#include <cstdint>\n#include <string>\n#include <vector>\n\n/**\n * Generate a dictionary for given samples.\n *\n * @param dictionary_size_limit maximal dictionary size\n * @param slice_len text slice size\n * @param block_len score block length\n * @param sample_sizes vector with sample sizes\n * @param sample_data concatenated samples\n * @return generated dictionary\n */\nstd::string durchschlag_generate(\n    size_t dictionary_size_limit, size_t slice_len, size_t block_len,\n    const std::vector<size_t>& sample_sizes, const uint8_t* sample_data);\n\n//------------------------------------------------------------------------------\n// Lower level API for repetitive dictionary generation.\n//------------------------------------------------------------------------------\n\n/* Pointer to position in text. */\ntypedef uint32_t DurchschlagTextIdx;\n\n/* Context is made public for flexible serialization / deserialization. */\ntypedef struct DurchschlagContext {\n  DurchschlagTextIdx dataSize;\n  DurchschlagTextIdx sliceLen;\n  DurchschlagTextIdx numUniqueSlices;\n  std::vector<DurchschlagTextIdx> offsets;\n  std::vector<DurchschlagTextIdx> sliceMap;\n} DurchschlagContext;\n\nDurchschlagContext durchschlag_prepare(size_t slice_len,\n    const std::vector<size_t>& sample_sizes, const uint8_t* sample_data);\n\ntypedef enum DurchschalgResourceStrategy {\n  // Faster\n  DURCHSCHLAG_EXCLUSIVE = 0,\n  // Uses much less memory\n  DURCHSCHLAG_COLLABORATIVE = 1\n} DurchschalgResourceStrategy;\n\nstd::string durchschlag_generate(DurchschalgResourceStrategy strategy,\n    size_t dictionary_size_limit, size_t block_len,\n    const DurchschlagContext& context, const uint8_t* sample_data);\n\n//------------------------------------------------------------------------------\n// Suffix Array based preparation.\n//------------------------------------------------------------------------------\n\ntypedef struct DurchschlagIndex {\n  std::vector<DurchschlagTextIdx> lcp;\n  std::vector<DurchschlagTextIdx> sa;\n} DurchschlagIndex;\n\nDurchschlagIndex durchschlag_index(const std::vector<uint8_t>& data);\n\nDurchschlagContext durchschlag_prepare(size_t slice_len,\n    const std::vector<size_t>& sample_sizes, const DurchschlagIndex& index);\n\n//------------------------------------------------------------------------------\n// Data preparation.\n//------------------------------------------------------------------------------\n\n/**\n * Cut out unique slices.\n *\n * Both @p sample_sizes and @p sample_data are modified in-place. Number of\n * samples remains unchanged, but some samples become shorter.\n *\n * @param slice_len (unique) slice size\n * @param minimum_population minimum non-unique slice occurrence\n * @param sample_sizes [in / out] vector with sample sizes\n * @param sample_data [in / out] concatenated samples\n */\nvoid durchschlag_distill(size_t slice_len, size_t minimum_population,\n    std::vector<size_t>* sample_sizes, uint8_t* sample_data);\n\n/**\n * Replace unique slices with zeroes.\n *\n * @p sample_data is modified in-place. Number of samples and their length\n * remain unchanged.\n *\n * @param slice_len (unique) slice size\n * @param minimum_population minimum non-unique slice occurrence\n * @param sample_sizes vector with sample sizes\n * @param sample_data [in / out] concatenated samples\n */\nvoid durchschlag_purify(size_t slice_len, size_t minimum_population,\n    const std::vector<size_t>& sample_sizes, uint8_t* sample_data);\n\n#endif  // BROTLI_RESEARCH_DURCHSCHLAG_H_\n"
  },
  {
    "path": "research/find_opt_references.cc",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n   Author: zip753@gmail.com (Ivan Nikulin)\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Tool for generating optimal backward references for the input file. Uses\n   sais-lite library for building suffix array. */\n\n#include <algorithm>\n#include <cassert>\n#include <cstdio>\n#include <cstring>\n#include <functional>\n#include <utility>\n#include <vector>\n\n#include <gflags/gflags.h>\nusing gflags::ParseCommandLineFlags;\n\n#include \"third_party/absl/flags/flag.h\"\n#include <sais.hxx>\n\nDEFINE_bool(advanced, false, \"Advanced searching mode: finds all longest \"\n    \"matches at positions that are not covered by matches of length at least \"\n    \"max_length. WARNING: uses much more memory than simple mode, especially \"\n    \"for small values of min_length.\");\nDEFINE_int32(min_length, 1, \"Minimal length of found backward references.\");\n/* For advanced mode. */\nDEFINE_int32(long_length, 32,\n             \"Maximal length of found backward references for advanced mode.\");\nDEFINE_int32(skip, 1, \"Number of bytes to skip.\");\n\nconst size_t kFileBufferSize = (1 << 16);  // 64KB\n\ntypedef int sarray_type;  // Can't make it unsigned because of templates :(\ntypedef uint8_t input_type;\ntypedef uint32_t lcp_type;\ntypedef std::pair<int, std::vector<int> > entry_type;\ntypedef std::function<void(sarray_type*, lcp_type*, size_t, int, int, int, int,\n                           int)> Fn;\n\nvoid ReadInput(FILE* fin, input_type* storage, size_t input_size) {\n  size_t last_pos = 0;\n  size_t available_in;\n  fseek(fin, 0, SEEK_SET);\n  do {\n    available_in = fread(storage + last_pos, 1, kFileBufferSize, fin);\n    last_pos += available_in;\n  } while (available_in != 0);\n  assert(last_pos == input_size);\n}\n\nvoid BuildLCP(input_type* storage, sarray_type* sarray, lcp_type* lcp,\n              size_t size, uint32_t* pos) {\n  for (int i = 0; i < size; ++i) {\n    pos[sarray[i]] = i;\n  }\n  uint32_t k = 0;\n  lcp[size - 1] = 0;\n  for (int i = 0; i < size; ++i) {\n    if (pos[i] == size - 1) {\n      k = 0;\n      continue;\n    }\n    uint32_t j = sarray[pos[i] + 1];  // Suffix which follow i-th suffix in SA.\n    while (i + k < size && j + k < size && storage[i + k] == storage[j + k]) {\n      ++k;\n    }\n    lcp[pos[i]] = k;\n    if (k > 0) --k;\n  }\n}\n\ninline void PrintReference(sarray_type* sarray, lcp_type* lcp, size_t size,\n                           int idx, int left_ix, int right_ix, int left_lcp,\n                           int right_lcp, FILE* fout) {\n  int max_lcp_ix;\n  if (right_ix == size - 1 || (left_ix >= 0 && left_lcp >= right_lcp)) {\n    max_lcp_ix = left_ix;\n  } else {\n    max_lcp_ix = right_ix;\n  }\n  int dist = idx - sarray[max_lcp_ix];\n  assert(dist > 0);\n  fputc(1, fout);\n  fwrite(&idx, sizeof(int), 1, fout);   // Position in input.\n  fwrite(&dist, sizeof(int), 1, fout);  // Backward distance.\n}\n\ninline void GoLeft(sarray_type* sarray, lcp_type* lcp, int idx, int left_ix,\n                   int left_lcp, entry_type* entry) {\n  entry->first = left_lcp;\n  if (left_lcp > absl::GetFlag(FLAGS_long_length)) return;\n  for (; left_ix >= 0; --left_ix) {\n    if (lcp[left_ix] < left_lcp) break;\n    if (sarray[left_ix] < idx) {\n      entry->second.push_back(idx - sarray[left_ix]);\n    }\n  }\n}\n\ninline void GoRight(sarray_type* sarray, lcp_type* lcp, int idx, size_t size,\n                    int right_ix, int right_lcp, entry_type* entry) {\n  entry->first = right_lcp;\n  if (right_lcp > absl::GetFlag(FLAGS_long_length)) return;\n  for (; right_ix < size - 1; ++right_ix) {\n    if (lcp[right_ix] < right_lcp) break;\n    if (sarray[right_ix] < idx) {\n      entry->second.push_back(idx - sarray[right_ix]);\n    }\n  }\n}\n\ninline void StoreReference(sarray_type* sarray, lcp_type* lcp, size_t size,\n                           int idx, int left_ix, int right_ix, int left_lcp,\n                           int right_lcp, entry_type* entries) {\n  if (right_ix == size - 1 || (left_ix >= 0 && left_lcp > right_lcp)) {\n    // right is invalid or left is better\n    GoLeft(sarray, lcp, idx, left_ix, left_lcp, &entries[idx]);\n  } else if (left_ix < 0 || (right_ix < size - 1 && right_lcp > left_lcp)) {\n    // left is invalid or right is better\n    GoRight(sarray, lcp, idx, size, right_ix, right_lcp, &entries[idx]);\n  } else {  // both are valid and of equal length\n    GoLeft(sarray, lcp, idx, left_ix, left_lcp, &entries[idx]);\n    GoRight(sarray, lcp, idx, size, right_ix, right_lcp, &entries[idx]);\n  }\n}\n\nvoid ProcessReferences(sarray_type* sarray, lcp_type* lcp, size_t size,\n                       uint32_t* pos, const Fn& process_output) {\n  int min_length = absl::GetFlag(FLAGS_min_length);\n  for (int idx = absl::GetFlag(FLAGS_skip); idx < size; ++idx) {\n    int left_lcp = -1;\n    int left_ix;\n    for (left_ix = pos[idx] - 1; left_ix >= 0; --left_ix) {\n      if (left_lcp == -1 || left_lcp > lcp[left_ix]) {\n        left_lcp = lcp[left_ix];\n      }\n      if (left_lcp == 0) break;\n      if (sarray[left_ix] < idx) break;\n    }\n\n    int right_lcp = -1;\n    int right_ix;\n    for (right_ix = pos[idx]; right_ix < size - 1; ++right_ix) {\n      if (right_lcp == -1 || right_lcp > lcp[right_ix]) {\n        right_lcp = lcp[right_ix];\n      }\n      // Stop if we have better result from the left side already.\n      if (right_lcp < left_lcp && left_ix >= 0) break;\n      if (right_lcp == 0) break;\n      if (sarray[right_ix] < idx) break;\n    }\n\n    if ((left_ix >= 0 && left_lcp >= min_length) ||\n        (right_ix < size - 1 && right_lcp >= min_length)) {\n      process_output(sarray, lcp, size, idx, left_ix, right_ix, left_lcp,\n                     right_lcp);\n    }\n  }\n}\n\nvoid ProcessEntries(entry_type* entries, size_t size, FILE* fout) {\n  int long_length = absl::GetFlag(FLAGS_long_length);\n  std::vector<std::pair<int, int> > segments;\n  size_t idx;\n  for (idx = 0; idx < size;) {\n    entry_type& entry = entries[idx];\n    if (entry.first > long_length) {\n      // Add segment.\n      if (segments.empty() || segments.back().second < idx) {\n        segments.push_back({idx, idx + entry.first});\n      } else {\n        segments.back().second = idx + entry.first;\n      }\n    }\n    ++idx;\n  }\n  printf(\"Segments generated.\\n\");\n  size_t segments_ix = 0;\n  for (idx = 0; idx < size;) {\n    if (idx == segments[segments_ix].first) {\n      // Skip segment.\n      idx = segments[segments_ix].second;\n    } else {\n      for (auto& dist : entries[idx].second) {\n        fputc(1, fout);\n        fwrite(&idx, sizeof(int), 1, fout);   // Position in input.\n        fwrite(&dist, sizeof(int), 1, fout);  // Backward distance.\n      }\n      ++idx;\n    }\n  }\n}\n\nint main(int argc, char* argv[]) {\n  base::ParseCommandLine(&argc, &argv);\n  if (argc != 3) {\n    printf(\"usage: %s input_file output_file\\n\", argv[0]);\n    return 1;\n  }\n\n  FILE* fin = fopen(argv[1], \"rb\");\n  FILE* fout = fopen(argv[2], \"w\");\n\n  fseek(fin, 0, SEEK_END);\n  int input_size = ftell(fin);\n  fseek(fin, 0, SEEK_SET);\n  printf(\"The file size is %u bytes\\n\", input_size);\n\n  input_type* storage = new input_type[input_size];\n\n  ReadInput(fin, storage, input_size);\n  fclose(fin);\n\n  sarray_type* sarray = new sarray_type[input_size];\n  saisxx(storage, sarray, input_size);\n  printf(\"Suffix array calculated.\\n\");\n\n  // Inverse suffix array.\n  uint32_t* pos = new uint32_t[input_size];\n\n  lcp_type* lcp = new lcp_type[input_size];\n  BuildLCP(storage, sarray, lcp, input_size, pos);\n  printf(\"LCP array constructed.\\n\");\n  delete[] storage;\n\n  using std::placeholders::_1;\n  using std::placeholders::_2;\n  using std::placeholders::_3;\n  using std::placeholders::_4;\n  using std::placeholders::_5;\n  using std::placeholders::_6;\n  using std::placeholders::_7;\n  using std::placeholders::_8;\n  entry_type* entries;\n  if (absl::GetFlag(FLAGS_advanced)) {\n    entries = new entry_type[input_size];\n    for (size_t i = 0; i < input_size; ++i) entries[i].first = -1;\n  }\n  Fn print = std::bind(PrintReference, _1, _2, _3, _4, _5, _6, _7, _8, fout);\n  Fn store = std::bind(StoreReference, _1, _2, _3, _4, _5, _6, _7, _8, entries);\n\n  ProcessReferences(sarray, lcp, input_size, pos,\n                    absl::GetFlag(FLAGS_advanced) ? store : print);\n  printf(\"References processed.\\n\");\n\n  if (absl::GetFlag(FLAGS_advanced)) {\n    int good_cnt = 0;\n    uint64_t avg_cnt = 0;\n    for (size_t i = 0; i < input_size; ++i) {\n      if (entries[i].first != -1) {\n        ++good_cnt;\n        avg_cnt += entries[i].second.size();\n      }\n    }\n    printf(\"Number of covered positions = %d\\n\", good_cnt);\n    printf(\"Average number of references per covered position = %.4lf\\n\",\n            static_cast<double>(avg_cnt) / good_cnt);\n    ProcessEntries(entries, input_size, fout);\n    printf(\"Entries processed.\\n\");\n  }\n\n  fclose(fout);\n  return 0;\n}\n"
  },
  {
    "path": "research/read_dist.h",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n   Author: zip753@gmail.com (Ivan Nikulin)\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* API for reading distances from *.dist file.\n   The format of *.dist file is as follows: for each backward reference there is\n   a position-distance pair, also a copy length may be specified. Copy length is\n   prefixed with flag byte 0, position-distance pair is prefixed with flag\n   byte 1. Each number is a 32-bit integer. Copy length always comes before\n   position-distance pair. Standalone copy length is allowed, in this case it is\n   ignored. */\n\n#ifndef BROTLI_RESEARCH_READ_DIST_H_\n#define BROTLI_RESEARCH_READ_DIST_H_\n\n#include <cstdio>\n#include <cstdlib>  /* exit, EXIT_FAILURE */\n\n#if !defined(CHECK)\n#define CHECK(X) if (!(X)) exit(EXIT_FAILURE);\n#endif\n\n/* Reads backwards reference from .dist file. Sets all missing fields to -1.\n   Returns false when EOF is met or input is corrupt. */\nbool ReadBackwardReference(FILE* fin, int* copy, int* pos, int* dist) {\n  int c = getc(fin);\n  if (c == EOF) return false;\n  if (c == 0) {\n    CHECK(fread(copy, sizeof(int), 1, fin) == 1);\n    if ((c = getc(fin)) != 1) {\n      ungetc(c, fin);\n      *pos = *dist = -1;\n    } else {\n      CHECK(fread(pos, sizeof(int), 1, fin) == 1);\n      CHECK(fread(dist, sizeof(int), 1, fin) == 1);\n    }\n  } else if (c != 1) {\n    return false;\n  } else {\n    CHECK(fread(pos, sizeof(int), 1, fin) == 1);\n    CHECK(fread(dist, sizeof(int), 1, fin) == 1);\n    *copy = -1;\n  }\n  return true;\n}\n\n#endif  /* BROTLI_RESEARCH_READ_DIST_H_ */\n"
  },
  {
    "path": "research/sieve.cc",
    "content": "#include \"sieve.h\"\n\n/* Pointer to position in (combined corpus) text. */\ntypedef uint32_t TextIdx;\n\n/* Index of sample / generation. */\ntypedef uint16_t SampleIdx;\n\ntypedef struct Slot {\n  TextIdx next;\n  TextIdx offset;\n  SampleIdx presence;\n  SampleIdx mark;\n} Slot;\n\nstatic const TextIdx kNowhere = static_cast<TextIdx>(-1);\n\nstatic TextIdx dryRun(TextIdx sliceLen, Slot* map, TextIdx* shortcut,\n    TextIdx end, TextIdx middle, SampleIdx minPresence, SampleIdx iteration) {\n  TextIdx from = kNowhere;\n  TextIdx to = kNowhere;\n  TextIdx result = 0;\n  SampleIdx targetPresence = minPresence;\n  for (TextIdx i = 0; i < end; ++i) {\n    if (i == middle) {\n      targetPresence++;\n    }\n    Slot& item = map[shortcut[i]];\n    if (item.mark != iteration) {\n      item.mark = iteration;\n      if (item.presence >= targetPresence) {\n        if ((to == kNowhere) || (to < i)) {\n          if (from != kNowhere) {\n            result += to - from;\n          }\n          from = i;\n        }\n        to = i + sliceLen;\n      }\n    }\n  }\n  if (from != kNowhere) {\n    result += to - from;\n  }\n  return result;\n}\n\nstatic std::string createDictionary(const uint8_t* data, TextIdx sliceLen,\n    Slot* map, TextIdx* shortcut, TextIdx end, TextIdx middle,\n    SampleIdx minPresence, SampleIdx iteration) {\n  std::string output;\n  TextIdx from = kNowhere;\n  TextIdx to = kNowhere;\n  SampleIdx targetPresence = minPresence;\n  for (TextIdx i = 0; i < end; ++i) {\n    if (i == middle) {\n      targetPresence++;\n    }\n    Slot& item = map[shortcut[i]];\n    if (item.mark != iteration) {\n      item.mark = iteration;\n      if (item.presence >= targetPresence) {\n        if ((to == kNowhere) || (to < i)) {\n          if (from != kNowhere) {\n            output.insert(output.end(), &data[from], &data[to]);\n          }\n          from = i;\n        }\n        to = i + sliceLen;\n      }\n    }\n  }\n  if (from != kNowhere) {\n    output.insert(output.end(), &data[from], &data[to]);\n  }\n  return output;\n}\n\nstd::string sieve_generate(size_t dictionary_size_limit, size_t slice_len,\n    const std::vector<size_t>& sample_sizes, const uint8_t* sample_data) {\n  /* Parameters aliasing */\n  TextIdx targetSize = static_cast<TextIdx>(dictionary_size_limit);\n  if (targetSize != dictionary_size_limit) {\n    fprintf(stderr, \"dictionary_size_limit is too large\\n\");\n    return \"\";\n  }\n  TextIdx sliceLen = static_cast<TextIdx>(slice_len);\n  if (sliceLen != slice_len) {\n    fprintf(stderr, \"slice_len is too large\\n\");\n    return \"\";\n  }\n  if (sliceLen < 1) {\n    fprintf(stderr, \"slice_len is too small\\n\");\n    return \"\";\n  }\n  SampleIdx numSamples = static_cast<SampleIdx>(sample_sizes.size());\n  if ((numSamples != sample_sizes.size()) || (numSamples * 2 < numSamples)) {\n    fprintf(stderr, \"too many samples\\n\");\n    return \"\";\n  }\n  const uint8_t* data = sample_data;\n\n  TextIdx total = 0;\n  std::vector<TextIdx> offsets;\n  for (SampleIdx i = 0; i < numSamples; ++i) {\n    TextIdx delta = static_cast<TextIdx>(sample_sizes[i]);\n    if (delta != sample_sizes[i]) {\n      fprintf(stderr, \"sample is too large\\n\");\n      return \"\";\n    }\n    if (delta == 0) {\n      fprintf(stderr, \"empty samples are prohibited\\n\");\n      return \"\";\n    }\n    if (total + delta <= total) {\n      fprintf(stderr, \"corpus is too large\\n\");\n      return \"\";\n    }\n    total += delta;\n    offsets.push_back(total);\n  }\n\n  if (total * 2 < total) {\n    fprintf(stderr, \"corpus is too large\\n\");\n    return \"\";\n  }\n\n  if (total < sliceLen) {\n    fprintf(stderr, \"slice_len is larger than corpus size\\n\");\n    return \"\";\n  }\n\n  /*****************************************************************************\n   * Build coverage map.\n   ****************************************************************************/\n  std::vector<Slot> map;\n  std::vector<TextIdx> shortcut;\n  map.push_back({0, 0, 0, 0});\n  TextIdx end = total - sliceLen;\n  TextIdx hashLen = 11;\n  while (hashLen < 29 && ((1u << hashLen) < end)) {\n    hashLen += 3;\n  }\n  hashLen -= 3;\n  TextIdx hashMask = (1u << hashLen) - 1u;\n  std::vector<TextIdx> hashHead(1 << hashLen);\n  TextIdx hashSlot = 1;\n  SampleIdx piece = 0;\n  TextIdx hash = 0;\n  TextIdx lShift = 3;\n  TextIdx rShift = hashLen - lShift;\n  for (TextIdx i = 0; i < sliceLen - 1; ++i) {\n    TextIdx v = data[i];\n    hash = (((hash << lShift) | (hash >> rShift)) & hashMask) ^ v;\n  }\n  TextIdx lShiftX = (lShift * (sliceLen - 1)) % hashLen;\n  TextIdx rShiftX = hashLen - lShiftX;\n  for (TextIdx i = 0; i < end; ++i) {\n    TextIdx v = data[i + sliceLen - 1];\n    hash = (((hash << lShift) | (hash >> rShift)) & hashMask) ^ v;\n\n    if (offsets[piece] == i) {\n      piece++;\n    }\n    TextIdx slot = hashHead[hash];\n    while (slot != 0) {\n      Slot& item = map[slot];\n      TextIdx start = item.offset;\n      bool miss = false;\n      for (TextIdx j = 0; j < sliceLen; ++j) {\n        if (data[i + j] != data[start + j]) {\n          miss = true;\n          break;\n        }\n      }\n      if (!miss) {\n        if (item.mark != piece) {\n          item.mark = piece;\n          item.presence++;\n        }\n        shortcut.push_back(slot);\n        break;\n      }\n      slot = item.next;\n    }\n    if (slot == 0) {\n      map.push_back({hashHead[hash], i, 1, piece});\n      hashHead[hash] = hashSlot;\n      shortcut.push_back(hashSlot);\n      hashSlot++;\n    }\n    v = data[i];\n    hash ^= ((v << lShiftX) | (v >> rShiftX)) & hashMask;\n  }\n\n  /*****************************************************************************\n   * Build dictionary of specified size.\n   ****************************************************************************/\n  SampleIdx a = 1;\n  TextIdx size = dryRun(\n      sliceLen, map.data(), shortcut.data(), end, end, a, ++piece);\n  /* Maximal output is smaller than target. */\n  if (size <= targetSize) {\n    return createDictionary(\n        data, sliceLen, map.data(), shortcut.data(), end, end, a, ++piece);\n  }\n\n  SampleIdx b = numSamples;\n  size = dryRun(sliceLen, map.data(), shortcut.data(), end, end, b, ++piece);\n  if (size == targetSize) {\n    return createDictionary(\n        data, sliceLen, map.data(), shortcut.data(), end, end, b, ++piece);\n  }\n  /* Run binary search. */\n  if (size < targetSize) {\n    /* size(a) > targetSize > size(b) && a < m < b */\n    while (a + 1 < b) {\n      SampleIdx m = static_cast<SampleIdx>((a + b) / 2);\n      size = dryRun(\n          sliceLen, map.data(), shortcut.data(), end, end, m, ++piece);\n      if (size < targetSize) {\n        b = m;\n      } else if (size > targetSize) {\n        a = m;\n      } else {\n        return createDictionary(\n            data, sliceLen, map.data(), shortcut.data(), end, end, b, ++piece);\n      }\n    }\n  } else {\n    a = b;\n  }\n  /* size(minPresence) > targetSize > size(minPresence + 1) */\n  SampleIdx minPresence = a;\n  TextIdx c = 0;\n  TextIdx d = end;\n  /* size(a) < targetSize < size(b) && a < m < b */\n  while (c + 1 < d) {\n    TextIdx m = (c + d) / 2;\n    size = dryRun(\n        sliceLen, map.data(), shortcut.data(), end, m, minPresence, ++piece);\n    if (size < targetSize) {\n      c = m;\n    } else if (size > targetSize) {\n      d = m;\n    } else {\n      return createDictionary(data, sliceLen, map.data(), shortcut.data(), end,\n          m, minPresence, ++piece);\n    }\n  }\n\n  bool unrestricted = false;\n  if (minPresence <= 2 && !unrestricted) {\n    minPresence = 2;\n    c = end;\n  }\n  return createDictionary(data, sliceLen, map.data(), shortcut.data(), end, c,\n      minPresence, ++piece);\n}\n"
  },
  {
    "path": "research/sieve.h",
    "content": "#ifndef BROTLI_RESEARCH_SIEVE_H_\n#define BROTLI_RESEARCH_SIEVE_H_\n\n#include <cstddef>\n#include <cstdint>\n#include <string>\n#include <vector>\n\n/**\n * Generate a dictionary for given samples.\n *\n * @param dictionary_size_limit maximal dictionary size\n * @param slice_len text slice size\n * @param sample_sizes vector with sample sizes\n * @param sample_data concatenated samples\n * @return generated dictionary\n */\nstd::string sieve_generate(size_t dictionary_size_limit, size_t slice_len,\n    const std::vector<size_t>& sample_sizes, const uint8_t* sample_data);\n\n#endif  // BROTLI_RESEARCH_SIEVE_H_\n"
  },
  {
    "path": "sbom.cdx.json",
    "content": "{\n  \"_comment\": \"See https://cyclonedx.org/ for more details\",\n  \"bomFormat\": \"CycloneDX\",\n  \"specVersion\": \"1.6\",\n  \"version\": 1,\n  \"metadata\": {\n    \"authors\": [\n      {\n        \"name\": \"@VCS_SBOM_AUTHORS@\"\n      }\n    ]\n  },\n  \"components\": [\n    {\n      \"type\": \"library\",\n      \"bom-ref\": \"pkg:github/google/brotli@@VCS_TAG@\",\n      \"cpe\": \"cpe:2.3:a:google:brotli:@VCS_TAG@:*:*:*:*:*:*:*\",\n      \"name\": \"Brotli\",\n      \"version\": \"@VCS_VERSION@\",\n      \"description\": \"A generic-purpose lossless compression algorithm\",\n      \"authors\": [\n        {\n          \"name\": \"@VCS_AUTHORS@\"\n        }\n      ],\n      \"supplier\": {\n        \"name\": \"Brotli developers\"\n      },\n      \"licenses\": [\n        {\n          \"license\": {\n            \"id\": \"MIT\"\n          }\n        }\n      ],\n      \"externalReferences\": [\n        {\n          \"type\": \"vcs\",\n          \"url\": \"https://github.com/google/brotli\"\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "scripts/check_typos.sh",
    "content": "#!/bin/bash\n\nHERE=`realpath $(dirname \"$0\")`\nPROJECT_DIR=`realpath ${HERE}/..`\nSRC_EXT=\"bazel|bzl|c|cc|cmake|gni|h|html|in|java|js|m|md|nix|py|rst|sh|ts|txt|yaml|yml\"\ncd \"${PROJECT_DIR}\"\nsources=`find . -type f | sort |grep -E \"\\.(${SRC_EXT})$\" | grep -v -E \"^(./)?tests/testdata/\" | grep -v -E \"\\.min\\.js$\" | grep -v -E \"brotli_dictionary\\.txt$\"`\necho \"Checking sources:\"\necho \"${sources}\"\ntypos -c \"${HERE}/typos.toml\" ${sources}\n"
  },
  {
    "path": "scripts/dictionary/README.md",
    "content": "Set of tools that can be used to download brotli RFC, extract and validate\nbinary dictionary, and generate dictionary derivatives\n(e.g. Java `DictionaryData` class constants).\n"
  },
  {
    "path": "scripts/dictionary/step-01-download-rfc.py",
    "content": "# Step 01 - download RFC7932.\n#\n# RFC is the ultimate source for brotli format and constants, including\n# static dictionary.\n\nimport urllib2\n\nresponse = urllib2.urlopen(\"https://tools.ietf.org/rfc/rfc7932.txt\")\n\ntext = response.read()\npath = \"rfc7932.txt\"\n\nwith open(path, \"w\") as rfc:\n  rfc.write(text)\n\nprint(\"Downloaded and saved \" + str(len(text)) + \" bytes to \" + path)\n"
  },
  {
    "path": "scripts/dictionary/step-02-rfc-to-bin.py",
    "content": "# Step 02 - parse RFC.\n#\n# Static dictionary is described in \"Appendix A\" section in a hexadecimal form.\n# This tool locates dictionary data in RFC and converts it to raw binary format.\n\nimport re\n\nrfc_path = \"rfc7932.txt\"\n\nwith open(rfc_path, \"r\") as rfc:\n  lines = rfc.readlines()\n\nre_data_line = re.compile(\"^      [0-9a-f]{64}$\")\n\nappendix_a_found = False\ndictionary = []\nfor line in lines:\n  if appendix_a_found:\n    if re_data_line.match(line) is not None:\n      data = line.strip()\n      dictionary.extend(int(data[2 * i:2 * i + 2], 16) for i in range(32))\n      if len(dictionary) == 122784:\n        break\n  elif line.startswith(\"Appendix A.\"):\n    appendix_a_found = True\n\nbin_path = \"dictionary.bin\"\n\nwith open(bin_path, \"wb\") as output:\n  output.write(bytearray(dictionary))\n\nprint(\"Parsed and saved \" + str(len(dictionary)) + \" bytes to \" + bin_path)\n"
  },
  {
    "path": "scripts/dictionary/step-03-validate-bin.py",
    "content": "# Step 03 - validate raw dictionary file.\n#\n# CRC32, MD5, SHA1 and SHA256 checksums for raw binary dictionary are checked.\n\nimport hashlib\nimport zlib\n\nbin_path = \"dictionary.bin\"\n\nwith open(bin_path, \"rb\") as raw:\n  data = raw.read()\n\n\ndef check_digest(name, expected, actual):\n  if expected == actual:\n    print(\"[OK] \" + name)\n  else:\n    print(\"[ERROR] \" + name + \" | \" + expected + \" != \" + actual)\n\n\ncheck_digest(\n    \"CRC32\",  # This is the only checksum provided in RFC.\n    \"0x5136cb04\",\n    hex(zlib.crc32(data)))\n\ncheck_digest(\"MD5\", \"96cecd2ee7a666d5aa3627d74735b32a\",\n             hashlib.md5(data).hexdigest())\n\ncheck_digest(\"SHA1\", \"72b41051cb61a9281ba3c4414c289da50d9a7640\",\n             hashlib.sha1(data).hexdigest())\n\ncheck_digest(\n    \"SHA256\",\n    \"20e42eb1b511c21806d4d227d07e5dd06877d8ce7b3a817f378f313653f35c70\",\n    hashlib.sha256(data).hexdigest())\n"
  },
  {
    "path": "scripts/dictionary/step-04-generate-java-literals.py",
    "content": "# Step 04 - generate Java literals.\n#\n# Java byte-code has severe restrictions. There is no such thing as\n# \"array literal\" - those are implemented as series of data[x] = y;\n# as a consequence N-byte array will use 7N bytes in class, plus N bytes\n# in instantiated variable. Also no literal could be longer than 64KiB.\n#\n# To keep dictionary data compact both in source code and in compiled format\n# we use the following tricks:\n#  * use String as a data container\n#  * store only lowest 7 bits; i.e. all characters fit ASCII table; this allows\n#    efficient conversion to byte array; also ASCII characters use only 1 byte\n#.   of memory (UTF-8 encoding)\n#  * RLE-compress sequence of 8-th bits\n#\n# This script generates literals used in Java code.\n\ntry:\n  unichr  # Python 2\nexcept NameError:\n  unichr = chr  # Python 3\n\nbin_path = \"dictionary.bin\"\n\nwith open(bin_path, \"rb\") as raw:\n  data = raw.read()\n\nlow = []\nhi = []\nis_skip = True\nskip_flip_offset = 36\ncntr = skip_flip_offset\nfor b in data:\n  value = ord(b)\n  low.append(chr(value & 0x7F))\n  if is_skip:\n    if value < 0x80:\n      cntr += 1\n    else:\n      is_skip = False\n      hi.append(unichr(cntr))\n      cntr = skip_flip_offset + 1\n  elif value >= 0x80:\n    cntr += 1\n  else:\n    is_skip = True\n    hi.append(unichr(cntr))\n    cntr = skip_flip_offset + 1\nhi.append(unichr(cntr))\n\nlow0 = low[0:len(low) // 2]\nlow1 = low[len(low) // 2:len(low)]\n\n\ndef escape(chars):\n  result = []\n  for c in chars:\n    if c == \"\\r\":\n      result.append(\"\\\\r\")\n    elif c == \"\\n\":\n      result.append(\"\\\\n\")\n    elif c == \"\\t\":\n      result.append(\"\\\\t\")\n    elif c == \"\\\"\":\n      result.append(\"\\\\\\\"\")\n    elif c == \"\\\\\":\n      result.append(\"\\\\\\\\\")\n    elif ord(c) < 32 or ord(c) >= 127:\n      result.append(\"\\\\u%04X\" % ord(c))\n    else:\n      result.append(c)\n  return result\n\n\nsource_code = [\n    \"  private static final String DATA0 = \\\"\", \"\".join(escape(low0)), \"\\\";\\n\",\n    \"  private static final String DATA1 = \\\"\", \"\".join(escape(low1)), \"\\\";\\n\",\n    \"  private static final String SKIP_FLIP = \\\"\", \"\".join(escape(hi)), \"\\\";\\n\"\n]\n\nsrc_path = \"DictionaryData.inc.java\"\n\nwith open(src_path, \"w\") as source:\n  source.write(\"\".join(source_code))\n"
  },
  {
    "path": "scripts/download_testdata.sh",
    "content": "#!/bin/bash\nset -x\nBROTLI_TAG=${BROTLI_TAG:-dev/null}\nBROTLI_TAG=\"${BROTLI_TAG//'/'/%2F}\" # Escaping for tag names with slash (e.g. \"dev/null\")\nARCHIVE=testdata.txz\ncurl -L https://github.com/google/brotli/releases/download/${BROTLI_TAG}/${ARCHIVE} -o ${ARCHIVE}\ntar xvfJ ${ARCHIVE}\n"
  },
  {
    "path": "scripts/libbrotlicommon.pc.in",
    "content": "prefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nincludedir=@includedir@\n\nName: libbrotlicommon\nURL: https://github.com/google/brotli\nDescription: Brotli common dictionary library\nVersion: @PACKAGE_VERSION@\nLibs: -L${libdir} -lbrotlicommon @libm@\nCflags: -I${includedir}\n"
  },
  {
    "path": "scripts/libbrotlidec.pc.in",
    "content": "prefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nincludedir=@includedir@\n\nName: libbrotlidec\nURL: https://github.com/google/brotli\nDescription: Brotli decoder library\nVersion: @PACKAGE_VERSION@\nLibs: -L${libdir} -lbrotlidec\nRequires.private: libbrotlicommon >= 1.2.0\nCflags: -I${includedir}\n"
  },
  {
    "path": "scripts/libbrotlienc.pc.in",
    "content": "prefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nincludedir=@includedir@\n\nName: libbrotlienc\nURL: https://github.com/google/brotli\nDescription: Brotli encoder library\nVersion: @PACKAGE_VERSION@\nLibs: -L${libdir} -lbrotlienc\nRequires.private: libbrotlicommon >= 1.2.0\nCflags: -I${includedir}\n"
  },
  {
    "path": "scripts/typos.toml",
    "content": "[default]\nextend-ignore-re = [\n  \"(?Rm)^.*// notypo$\",  # disable check in current line\n  \"(?s)(#|//)\\\\s*typo:off.*?\\\\n\\\\s*(#|//)\\\\s*typo:on\",  # disable check in block\n  \"0x[0-9a-fA-F]+[ ,u]\",  # hexadecimal literal\n  \"\\\\W2-nd\\\\W\",  # second\n  \"\\\\W2\\\\^nd\\\\W\",  # second with superscript\n]\n\n[default.extend-words]\nsais = \"sais\"  # SAIS library\nuncompressible = \"uncompressible\"  # personal choice\nflate = \"flate\"  # compression algorithm\n\n[default.extend-identifiers]\ngl_pathc = \"gl_pathc\"  # glob_t\n\n"
  },
  {
    "path": "setup.cfg",
    "content": "[build]\nbuild_base=bin\n\n[yapf]\nbased_on_style=google\n"
  },
  {
    "path": "setup.py",
    "content": "# Copyright 2015 The Brotli Authors. All rights reserved.\n#\n# Distributed under MIT license.\n# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n\n\"\"\"This script is used for building and packaging the Brotli extension.\"\"\"\n\nimport logging\nimport os\nimport re\nimport setuptools\nimport setuptools.command.build_ext as build_ext\nimport setuptools.errors as errors\nimport setuptools.modified as modified\n\n\nCURR_DIR = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))\nLOGGER = logging.getLogger(__name__)\n\n\ndef bool_from_environ(key):\n  value = os.environ.get(key)\n  if not value:\n    return False\n  if value == \"1\":\n    return True\n  if value == \"0\":\n    return False\n  raise ValueError(\n      \"Environment variable {} has invalid value {}. Please set it to 1, 0 or\"\n      \" an empty string\".format(key, value)\n  )\n\n\ndef get_version():\n  \"\"\"Return library version string from 'common/version.h' file.\"\"\"\n  version_file_path = os.path.join(CURR_DIR, \"c\", \"common\", \"version.h\")\n  defs = {}\n  with open(version_file_path, \"r\") as file:\n    for line in file:\n      m = re.match(r\"#define\\s+(\\w+)\\s+(\\d+)\", line)\n      if m:\n        defs[m.group(1)] = m.group(2)\n  parts = [\"MAJOR\", \"MINOR\", \"PATCH\"]\n  major, minor, patch = [defs.get(\"BROTLI_VERSION_\" + key) for key in parts]\n  if not major or not minor or not patch:\n    return \"\"\n  return \"{}.{}.{}\".format(major, minor, patch)\n\n\nclass BuildExt(build_ext.build_ext):\n  \"\"\"Customized build_ext command to handle Brotli extension building.\"\"\"\n\n  def get_source_files(self):\n    filenames = super().get_source_files()\n    for ext in self.extensions:\n      filenames.extend(ext.depends)\n    return filenames\n\n  def build_extension(self, ext):\n    if ext.sources is None or not isinstance(ext.sources, (list, tuple)):\n      raise errors.DistutilsSetupError(\n          \"in 'ext_modules' option (extension '%s'), \"\n          \"'sources' must be present and must be \"\n          \"a list of source filenames\"\n          % ext.name\n      )\n\n    ext_path = self.get_ext_fullpath(ext.name)\n    depends = ext.sources + ext.depends\n    is_outdated = modified.newer_group(depends, ext_path, \"newer\")\n    if self.force or is_outdated:\n      LOGGER.info(\"building '%s' extension\", ext.name)\n    else:\n      LOGGER.debug(\"skipping '%s' extension (up-to-date)\", ext.name)\n      return\n\n    c_sources = [source for source in ext.sources if source.endswith(\".c\")]\n    extra_args = ext.extra_compile_args or []\n\n    objects = []\n\n    macros = ext.define_macros[:]\n    for undef in ext.undef_macros:\n      macros.append((undef,))\n\n    objs = self.compiler.compile(\n        c_sources,\n        output_dir=self.build_temp,\n        macros=macros,\n        include_dirs=ext.include_dirs,\n        debug=self.debug,\n        extra_postargs=extra_args,\n        depends=ext.depends,\n    )\n    objects.extend(objs)\n\n    self._built_objects = objects[:]\n    if ext.extra_objects:\n      objects.extend(ext.extra_objects)\n    extra_args = ext.extra_link_args or []\n    # When using GCC on Windows, we statically link libgcc and libstdc++,\n    # so that we don't need to package extra DLLs.\n    if self.compiler.compiler_type == \"mingw32\":\n      extra_args.extend([\"-static-libgcc\", \"-static-libstdc++\"])\n\n    ext_path = self.get_ext_fullpath(ext.name)\n    # Detect target language, if not provided.\n    language = ext.language or self.compiler.detect_language(c_sources)\n\n    self.compiler.link_shared_object(\n        objects,\n        ext_path,\n        libraries=self.get_libraries(ext),\n        library_dirs=ext.library_dirs,\n        runtime_library_dirs=ext.runtime_library_dirs,\n        extra_postargs=extra_args,\n        export_symbols=self.get_export_symbols(ext),\n        debug=self.debug,\n        build_temp=self.build_temp,\n        target_lang=language,\n    )\n\n\nNAME = \"brotli\"\n\nVERSION = get_version()\n\nURL = \"https://github.com/google/brotli\"\n\nDESCRIPTION = \"Python bindings for the Brotli compression library\"\n\nAUTHOR = \"The Brotli Authors\"\n\nLICENSE = \"MIT\"\n\nPLATFORMS = [\"Posix\", \"MacOS X\", \"Windows\"]\n\nCLASSIFIERS = [\n    \"Development Status :: 4 - Beta\",\n    \"Environment :: Console\",\n    \"Intended Audience :: Developers\",\n    \"Operating System :: MacOS :: MacOS X\",\n    \"Operating System :: Microsoft :: Windows\",\n    \"Operating System :: POSIX :: Linux\",\n    \"Programming Language :: C\",\n    \"Programming Language :: C++\",\n    \"Programming Language :: Python\",\n    \"Programming Language :: Python :: 3\",\n    \"Programming Language :: Python :: 3.10\",\n    \"Programming Language :: Python :: 3.11\",\n    \"Programming Language :: Python :: 3.12\",\n    \"Programming Language :: Python :: 3.13\",\n    \"Programming Language :: Python :: 3.14\",\n    \"Programming Language :: Unix Shell\",\n    \"Topic :: Software Development :: Libraries\",\n    \"Topic :: Software Development :: Libraries :: Python Modules\",\n    \"Topic :: System :: Archiving\",\n    \"Topic :: System :: Archiving :: Compression\",\n    \"Topic :: Text Processing :: Fonts\",\n    \"Topic :: Utilities\",\n]\n\nPACKAGE_DIR = {\"\": \"python\"}\n\nPY_MODULES = [\"brotli\"]\n\nUSE_SYSTEM_BROTLI = bool_from_environ(\"USE_SYSTEM_BROTLI\")\n\nif USE_SYSTEM_BROTLI:\n  import pkgconfig\n\n  REQUIRED_BROTLI_SYSTEM_LIBRARIES = [\n      \"libbrotlicommon\",\n      \"libbrotlienc\",\n      \"libbrotlidec\",\n  ]\n\n  define_macros = []\n  include_dirs = []\n  libraries = []\n  library_dirs = []\n\n  for required_system_library in REQUIRED_BROTLI_SYSTEM_LIBRARIES:\n    package_configuration = pkgconfig.parse(required_system_library)\n\n    define_macros += package_configuration[\"define_macros\"]\n    include_dirs += package_configuration[\"include_dirs\"]\n    libraries += package_configuration[\"libraries\"]\n    library_dirs += package_configuration[\"library_dirs\"]\n\n  brotli_extension = setuptools.Extension(\n      \"_brotli\",\n      sources=[\"python/_brotli.c\"],\n      include_dirs=include_dirs,\n      define_macros=define_macros,\n      libraries=libraries,\n      library_dirs=library_dirs,\n  )\n\n  EXT_MODULES = [brotli_extension]\nelse:\n  sources = [\n      \"python/_brotli.c\",\n      \"c/common/constants.c\",\n      \"c/common/context.c\",\n      \"c/common/dictionary.c\",\n      \"c/common/platform.c\",\n      \"c/common/shared_dictionary.c\",\n      \"c/common/transform.c\",\n      \"c/dec/bit_reader.c\",\n      \"c/dec/decode.c\",\n      \"c/dec/huffman.c\",\n      \"c/dec/prefix.c\",\n      \"c/dec/state.c\",\n      \"c/dec/static_init.c\",\n      \"c/enc/backward_references.c\",\n      \"c/enc/backward_references_hq.c\",\n      \"c/enc/bit_cost.c\",\n      \"c/enc/block_splitter.c\",\n      \"c/enc/brotli_bit_stream.c\",\n      \"c/enc/cluster.c\",\n      \"c/enc/command.c\",\n      \"c/enc/compound_dictionary.c\",\n      \"c/enc/compress_fragment.c\",\n      \"c/enc/compress_fragment_two_pass.c\",\n      \"c/enc/dictionary_hash.c\",\n      \"c/enc/encode.c\",\n      \"c/enc/encoder_dict.c\",\n      \"c/enc/entropy_encode.c\",\n      \"c/enc/fast_log.c\",\n      \"c/enc/histogram.c\",\n      \"c/enc/literal_cost.c\",\n      \"c/enc/memory.c\",\n      \"c/enc/metablock.c\",\n      \"c/enc/static_dict.c\",\n      \"c/enc/static_dict_lut.c\",\n      \"c/enc/static_init.c\",\n      \"c/enc/utf8_util.c\",\n  ]\n  headers = [\n      \"c/common/constants.h\",\n      \"c/common/context.h\",\n      \"c/common/dictionary.h\",\n      \"c/common/platform.h\",\n      \"c/common/shared_dictionary_internal.h\",\n      \"c/common/static_init.h\",\n      \"c/common/transform.h\",\n      \"c/common/version.h\",\n      \"c/dec/bit_reader.h\",\n      \"c/dec/huffman.h\",\n      \"c/dec/prefix.h\",\n      \"c/dec/prefix_inc.h\",\n      \"c/dec/state.h\",\n      \"c/dec/static_init.h\",\n      \"c/enc/backward_references.h\",\n      \"c/enc/backward_references_hq.h\",\n      \"c/enc/backward_references_inc.h\",\n      \"c/enc/bit_cost.h\",\n      \"c/enc/bit_cost_inc.h\",\n      \"c/enc/block_encoder_inc.h\",\n      \"c/enc/block_splitter.h\",\n      \"c/enc/block_splitter_inc.h\",\n      \"c/enc/brotli_bit_stream.h\",\n      \"c/enc/cluster.h\",\n      \"c/enc/cluster_inc.h\",\n      \"c/enc/command.h\",\n      \"c/enc/compound_dictionary.h\",\n      \"c/enc/compress_fragment.h\",\n      \"c/enc/compress_fragment_two_pass.h\",\n      \"c/enc/dictionary_hash.h\",\n      \"c/enc/dictionary_hash_inc.h\",\n      \"c/enc/encoder_dict.h\",\n      \"c/enc/entropy_encode.h\",\n      \"c/enc/entropy_encode_static.h\",\n      \"c/enc/fast_log.h\",\n      \"c/enc/find_match_length.h\",\n      \"c/enc/hash.h\",\n      \"c/enc/hash_composite_inc.h\",\n      \"c/enc/hash_forgetful_chain_inc.h\",\n      \"c/enc/hash_longest_match64_inc.h\",\n      \"c/enc/hash_longest_match_inc.h\",\n      \"c/enc/hash_longest_match_quickly_inc.h\",\n      \"c/enc/hash_rolling_inc.h\",\n      \"c/enc/hash_to_binary_tree_inc.h\",\n      \"c/enc/histogram.h\",\n      \"c/enc/histogram_inc.h\",\n      \"c/enc/literal_cost.h\",\n      \"c/enc/memory.h\",\n      \"c/enc/metablock.h\",\n      \"c/enc/metablock_inc.h\",\n      \"c/enc/params.h\",\n      \"c/enc/prefix.h\",\n      \"c/enc/quality.h\",\n      \"c/enc/ringbuffer.h\",\n      \"c/enc/static_dict.h\",\n      \"c/enc/static_dict_lut.h\",\n      \"c/enc/static_init.h\",\n      \"c/enc/utf8_util.h\",\n      \"c/enc/write_bits.h\",\n  ]\n  brotli_extension = setuptools.Extension(\n      \"_brotli\",\n      sources=sources,\n      depends=headers,\n      include_dirs=[\"c/include\"],\n  )\n  EXT_MODULES = [brotli_extension]\n\nCMD_CLASS = {\n    \"build_ext\": BuildExt,\n}\n\nwith open(\"README.md\", \"r\") as f:\n  README = f.read()\n\nsetuptools.setup(\n    name=NAME,\n    description=DESCRIPTION,\n    long_description=README,\n    long_description_content_type=\"text/markdown\",\n    version=VERSION,\n    url=URL,\n    author=AUTHOR,\n    license=LICENSE,\n    platforms=PLATFORMS,\n    classifiers=CLASSIFIERS,\n    package_dir=PACKAGE_DIR,\n    py_modules=PY_MODULES,\n    ext_modules=EXT_MODULES,\n    cmdclass=CMD_CLASS,\n)\n"
  },
  {
    "path": "tests/cli_test.sh",
    "content": "#!/bin/bash\n\nsource gbash.sh || exit\nsource module gbash_unit.sh\n\nreadonly MKTEMP='/bin/mktemp'\nreadonly RM='/bin/rm'\n\nfunction test::brotli_cli::setup() {\n  TEMP_DIR=$(${MKTEMP} -d)\n  LOG INFO ${TEMP_DIR}\n  BROTLI_PKG=\"${RUNFILES}/google3/third_party/brotli\"\n  BROTLI=\"${BROTLI_PKG}/tools/brotli\"\n  cd ${TEMP_DIR}\n  echo \"Kot lomom kolol slona\" > text.orig\n  echo \"Lorem ipsum dolor sit amet. \" > ipsum.orig\n}\n\nfunction test::brotli_cli::teardown() {\n  unset BROTLI\n  unset BROTLI_PKG\n  ${RM} -rf ${TEMP_DIR}\n  unset TEMP_DIR\n}\n\nfunction test::brotli_cli::roundtrip() {\n  ${BROTLI} -Zfk text.orig -o text.br\n  ${BROTLI} -d text.br -o text.unbr\n  EXPECT_FILE_CONTENT_EQ text.orig text.unbr\n}\n\n# 'SGVsbG8=' == $(echo -n \"Hello\" | base64)\n\nfunction test::brotli_cli::comment_ok() {\n  ${BROTLI} -Zfk -C SGVsbG8= text.orig -o text.br\n  ${BROTLI} -d --comment=SGVsbG8= text.br -o text.unbr\n  EXPECT_FILE_CONTENT_EQ text.orig text.unbr\n}\n\nfunction test::brotli_cli::comment_no_padding() {\n  ${BROTLI} -Zfk -C SGVsbG8 text.orig -o text.br\n  ${BROTLI} -d --comment=SGVsbG8= text.br -o text.unbr\n  EXPECT_FILE_CONTENT_EQ text.orig text.unbr\n}\n\nfunction test::brotli_cli::comment_extra_padding() {\n  ${BROTLI} -Zfk -C SGVsbG8 text.orig -o text.br\n  ${BROTLI} -d --comment=SGVsbG8== text.br -o text.unbr\n  EXPECT_FILE_CONTENT_EQ text.orig text.unbr\n}\n\nfunction test::brotli_cli::comment_ignored() {\n  ${BROTLI} -Zfk -C SGVsbG8= text.orig -o text.br\n  EXPECT_SUCCEED \"${BROTLI} -d text.br -o text.unbr\"\n}\n\nfunction test::brotli_cli::comment_mismatch_content() {\n  ${BROTLI} -Zfk --comment=SGVsbG8= text.orig -o text.br\n  EXPECT_FAIL \"${BROTLI} -dC SGVsbG7= text.br -o text.unbr\"\n  EXPECT_FAIL \"${BROTLI} -tC SGVsbG7= text.br\"\n}\n\nfunction test::brotli_cli::comment_mismatch_length() {\n  ${BROTLI} -Zfk --comment=SGVsbG8= text.orig -o text.br\n  EXPECT_FAIL \"${BROTLI} -tC SGVsbA== text.br\"\n}\n\nfunction test::brotli_cli::comment_too_much_padding() {\n  EXPECT_FAIL \"${BROTLI} -Zfk -C SGVsbG8=== text.orig -o text.br\"\n}\n\nfunction test::brotli_cli::comment_padding_in_the_middle() {\n  EXPECT_FAIL \"${BROTLI} -Zfk -C SGVsbG=8 text.orig -o text.br\"\n}\n\nfunction test::brotli_cli::comment_ignore_tab_cr_lf_sp() {\n  COMMENT=$'S\\tG\\rV\\ns bG8='\n  EXPECT_SUCCEED \"${BROTLI} -Zfk -C \\\"${COMMENT}\\\" text.orig -o text.br\"\n}\n\nfunction test::brotli_cli::comment_invalid_chars() {\n  EXPECT_FAIL \"${BROTLI} -Zfk -C S.GVsbG8= text.orig -o text.br\"\n}\n\nfunction test::brotli_cli::concatenated() {\n  ${BROTLI} -Zfk ipsum.orig -o one.br\n  ${BROTLI} -Zfk text.orig -o two.br\n  cat one.br two.br > full.br\n  EXPECT_FAIL \"${BROTLI} -dc full.br  > full.unbr\"\n  EXPECT_SUCCEED \"${BROTLI} -dKc full.br > full.unbr\"\n  EXPECT_SUCCEED \"${BROTLI} -dc --concatenated full.br > full.unbr\"\n  cat ipsum.orig text.orig > full.orig\n  EXPECT_FILE_CONTENT_EQ full.orig full.unbr\n}\n\ngbash::unit::main \"$@\"\n"
  },
  {
    "path": "tests/run-compatibility-test.cmake",
    "content": "string(REGEX REPLACE \"([a-zA-Z0-9\\\\.]+)\\\\.compressed(\\\\.[0-9]+)?$\" \"\\\\1\" REFERENCE_DATA \"${INPUT}\")\nstring(REGEX REPLACE \"\\\\.compressed\" \"\" OUTPUT_FILE \"${INPUT}\")\nget_filename_component(OUTPUT_NAME \"${OUTPUT_FILE}\" NAME)\n\nset(ENV{QEMU_LD_PREFIX} \"${BROTLI_WRAPPER_LD_PREFIX}\")\n\nexecute_process(\n  WORKING_DIRECTORY \"${CMAKE_CURRENT_SOURCE_DIR}\"\n  COMMAND ${BROTLI_WRAPPER} ${BROTLI_CLI} --force --decompress ${INPUT} --output=${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_NAME}.unbr\n  RESULT_VARIABLE result)\nif(result)\n  message(FATAL_ERROR \"Decompression failed\")\nendif()\n\nfunction(test_file_equality f1 f2)\n  if(NOT CMAKE_VERSION VERSION_LESS 2.8.7)\n    file(SHA512 \"${f1}\" f1_cs)\n    file(SHA512 \"${f2}\" f2_cs)\n    if(NOT \"${f1_cs}\" STREQUAL \"${f2_cs}\")\n      message(FATAL_ERROR \"Files do not match\")\n    endif()\n  else()\n    file(READ \"${f1}\" f1_contents)\n    file(READ \"${f2}\" f2_contents)\n    if(NOT \"${f1_contents}\" STREQUAL \"${f2_contents}\")\n      message(FATAL_ERROR \"Files do not match\")\n    endif()\n  endif()\nendfunction()\n\ntest_file_equality(\"${REFERENCE_DATA}\" \"${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_NAME}.unbr\")\n"
  },
  {
    "path": "tests/run-roundtrip-test.cmake",
    "content": "set(ENV{QEMU_LD_PREFIX} \"${BROTLI_WRAPPER_LD_PREFIX}\")\n\nexecute_process(\n  WORKING_DIRECTORY \"${CMAKE_CURRENT_SOURCE_DIR}\"\n  COMMAND ${BROTLI_WRAPPER} ${BROTLI_CLI} --force --quality=${QUALITY} ${INPUT} --output=${OUTPUT}.br\n  RESULT_VARIABLE result\n  ERROR_VARIABLE result_stderr)\nif(result)\n  message(FATAL_ERROR \"Compression failed: ${result_stderr}\")\nendif()\n\nexecute_process(\n  WORKING_DIRECTORY \"${CMAKE_CURRENT_SOURCE_DIR}\"\n  COMMAND ${BROTLI_WRAPPER} ${BROTLI_CLI} --force --decompress ${OUTPUT}.br --output=${OUTPUT}.unbr\n  RESULT_VARIABLE result)\nif(result)\n  message(FATAL_ERROR \"Decompression failed\")\nendif()\n\nfunction(test_file_equality f1 f2)\n  if(NOT CMAKE_VERSION VERSION_LESS 2.8.7)\n    file(SHA512 \"${f1}\" f1_cs)\n    file(SHA512 \"${f2}\" f2_cs)\n    if(NOT \"${f1_cs}\" STREQUAL \"${f2_cs}\")\n      message(FATAL_ERROR \"Files do not match\")\n    endif()\n  else()\n    file(READ \"${f1}\" f1_contents)\n    file(READ \"${f2}\" f2_contents)\n    if(NOT \"${f1_contents}\" STREQUAL \"${f2_contents}\")\n      message(FATAL_ERROR \"Files do not match\")\n    endif()\n  endif()\nendfunction()\n\ntest_file_equality(\"${INPUT}\" \"${OUTPUT}.unbr\")\n"
  },
  {
    "path": "tests/testdata/10x10y",
    "content": "XXXXXXXXXXYYYYYYYYYY"
  },
  {
    "path": "tests/testdata/64x",
    "content": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
  },
  {
    "path": "tests/testdata/alice29.txt",
    "content": "\r\n\r\n\r\n\r\n                ALICE'S ADVENTURES IN WONDERLAND\r\n\r\n                          Lewis Carroll\r\n\r\n               THE MILLENNIUM FULCRUM EDITION 2.9\r\n\r\n\r\n\r\n\r\n                            CHAPTER I\r\n\r\n                      Down the Rabbit-Hole\r\n\r\n\r\n  Alice was beginning to get very tired of sitting by her sister\r\non the bank, and of having nothing to do:  once or twice she had\r\npeeped into the book her sister was reading, but it had no\r\npictures or conversations in it, `and what is the use of a book,'\r\nthought Alice `without pictures or conversation?'\r\n\r\n  So she was considering in her own mind (as well as she could,\r\nfor the hot day made her feel very sleepy and stupid), whether\r\nthe pleasure of making a daisy-chain would be worth the trouble\r\nof getting up and picking the daisies, when suddenly a White\r\nRabbit with pink eyes ran close by her.\r\n\r\n  There was nothing so VERY remarkable in that; nor did Alice\r\nthink it so VERY much out of the way to hear the Rabbit say to\r\nitself, `Oh dear!  Oh dear!  I shall be late!'  (when she thought\r\nit over afterwards, it occurred to her that she ought to have\r\nwondered at this, but at the time it all seemed quite natural);\r\nbut when the Rabbit actually TOOK A WATCH OUT OF ITS WAISTCOAT-\r\nPOCKET, and looked at it, and then hurried on, Alice started to\r\nher feet, for it flashed across her mind that she had never\r\nbefore seen a rabbit with either a waistcoat-pocket, or a watch to\r\ntake out of it, and burning with curiosity, she ran across the\r\nfield after it, and fortunately was just in time to see it pop\r\ndown a large rabbit-hole under the hedge.\r\n\r\n  In another moment down went Alice after it, never once\r\nconsidering how in the world she was to get out again.\r\n\r\n  The rabbit-hole went straight on like a tunnel for some way,\r\nand then dipped suddenly down, so suddenly that Alice had not a\r\nmoment to think about stopping herself before she found herself\r\nfalling down a very deep well.\r\n\r\n  Either the well was very deep, or she fell very slowly, for she\r\nhad plenty of time as she went down to look about her and to\r\nwonder what was going to happen next.  First, she tried to look\r\ndown and make out what she was coming to, but it was too dark to\r\nsee anything; then she looked at the sides of the well, and\r\nnoticed that they were filled with cupboards and book-shelves;\r\nhere and there she saw maps and pictures hung upon pegs.  She\r\ntook down a jar from one of the shelves as she passed; it was\r\nlabelled `ORANGE MARMALADE', but to her great disappointment it\r\nwas empty:  she did not like to drop the jar for fear of killing\r\nsomebody, so managed to put it into one of the cupboards as she\r\nfell past it.\r\n\r\n  `Well!' thought Alice to herself, `after such a fall as this, I\r\nshall think nothing of tumbling down stairs!  How brave they'll\r\nall think me at home!  Why, I wouldn't say anything about it,\r\neven if I fell off the top of the house!' (Which was very likely\r\ntrue.)\r\n\r\n  Down, down, down.  Would the fall NEVER come to an end!  `I\r\nwonder how many miles I've fallen by this time?' she said aloud.\r\n`I must be getting somewhere near the centre of the earth.  Let\r\nme see:  that would be four thousand miles down, I think--' (for,\r\nyou see, Alice had learnt several things of this sort in her\r\nlessons in the schoolroom, and though this was not a VERY good\r\nopportunity for showing off her knowledge, as there was no one to\r\nlisten to her, still it was good practice to say it over) `--yes,\r\nthat's about the right distance--but then I wonder what Latitude\r\nor Longitude I've got to?'  (Alice had no idea what Latitude was,\r\nor Longitude either, but thought they were nice grand words to\r\nsay.)\r\n\r\n  Presently she began again.  `I wonder if I shall fall right\r\nTHROUGH the earth!  How funny it'll seem to come out among the\r\npeople that walk with their heads downward!  The Antipathies, I\r\nthink--' (she was rather glad there WAS no one listening, this\r\ntime, as it didn't sound at all the right word) `--but I shall\r\nhave to ask them what the name of the country is, you know.\r\nPlease, Ma'am, is this New Zealand or Australia?' (and she tried\r\nto curtsey as she spoke--fancy CURTSEYING as you're falling\r\nthrough the air!  Do you think you could manage it?)  `And what\r\nan ignorant little girl she'll think me for asking!  No, it'll\r\nnever do to ask:  perhaps I shall see it written up somewhere.'\r\n\r\n  Down, down, down.  There was nothing else to do, so Alice soon\r\nbegan talking again.  `Dinah'll miss me very much to-night, I\r\nshould think!'  (Dinah was the cat.)  `I hope they'll remember\r\nher saucer of milk at tea-time.  Dinah my dear!  I wish you were\r\ndown here with me!  There are no mice in the air, I'm afraid, but\r\nyou might catch a bat, and that's very like a mouse, you know.\r\nBut do cats eat bats, I wonder?'  And here Alice began to get\r\nrather sleepy, and went on saying to herself, in a dreamy sort of\r\nway, `Do cats eat bats?  Do cats eat bats?' and sometimes, `Do\r\nbats eat cats?' for, you see, as she couldn't answer either\r\nquestion, it didn't much matter which way she put it.  She felt\r\nthat she was dozing off, and had just begun to dream that she\r\nwas walking hand in hand with Dinah, and saying to her very\r\nearnestly, `Now, Dinah, tell me the truth:  did you ever eat a\r\nbat?' when suddenly, thump! thump! down she came upon a heap of\r\nsticks and dry leaves, and the fall was over.\r\n\r\n  Alice was not a bit hurt, and she jumped up on to her feet in a\r\nmoment:  she looked up, but it was all dark overhead; before her\r\nwas another long passage, and the White Rabbit was still in\r\nsight, hurrying down it.  There was not a moment to be lost:\r\naway went Alice like the wind, and was just in time to hear it\r\nsay, as it turned a corner, `Oh my ears and whiskers, how late\r\nit's getting!'  She was close behind it when she turned the\r\ncorner, but the Rabbit was no longer to be seen:  she found\r\nherself in a long, low hall, which was lit up by a row of lamps\r\nhanging from the roof.\r\n\r\n  There were doors all round the hall, but they were all locked;\r\nand when Alice had been all the way down one side and up the\r\nother, trying every door, she walked sadly down the middle,\r\nwondering how she was ever to get out again.\r\n\r\n  Suddenly she came upon a little three-legged table, all made of\r\nsolid glass; there was nothing on it except a tiny golden key,\r\nand Alice's first thought was that it might belong to one of the\r\ndoors of the hall; but, alas! either the locks were too large, or\r\nthe key was too small, but at any rate it would not open any of\r\nthem.  However, on the second time round, she came upon a low\r\ncurtain she had not noticed before, and behind it was a little\r\ndoor about fifteen inches high:  she tried the little golden key\r\nin the lock, and to her great delight it fitted!\r\n\r\n  Alice opened the door and found that it led into a small\r\npassage, not much larger than a rat-hole:  she knelt down and\r\nlooked along the passage into the loveliest garden you ever saw.\r\nHow she longed to get out of that dark hall, and wander about\r\namong those beds of bright flowers and those cool fountains, but\r\nshe could not even get her head though the doorway; `and even if\r\nmy head would go through,' thought poor Alice, `it would be of\r\nvery little use without my shoulders.  Oh, how I wish\r\nI could shut up like a telescope!  I think I could, if I only\r\nknow how to begin.'  For, you see, so many out-of-the-way things\r\nhad happened lately, that Alice had begun to think that very few\r\nthings indeed were really impossible.\r\n\r\n  There seemed to be no use in waiting by the little door, so she\r\nwent back to the table, half hoping she might find another key on\r\nit, or at any rate a book of rules for shutting people up like\r\ntelescopes:  this time she found a little bottle on it, (`which\r\ncertainly was not here before,' said Alice,) and round the neck\r\nof the bottle was a paper label, with the words `DRINK ME'\r\nbeautifully printed on it in large letters.\r\n\r\n  It was all very well to say `Drink me,' but the wise little\r\nAlice was not going to do THAT in a hurry.  `No, I'll look\r\nfirst,' she said, `and see whether it's marked \"poison\" or not';\r\nfor she had read several nice little histories about children who\r\nhad got burnt, and eaten up by wild beasts and other unpleasant\r\nthings, all because they WOULD not remember the simple rules\r\ntheir friends had taught them:  such as, that a red-hot poker\r\nwill burn you if you hold it too long; and that if you cut your\r\nfinger VERY deeply with a knife, it usually bleeds; and she had\r\nnever forgotten that, if you drink much from a bottle marked\r\n`poison,' it is almost certain to disagree with you, sooner or\r\nlater.\r\n\r\n  However, this bottle was NOT marked `poison,' so Alice ventured\r\nto taste it, and finding it very nice, (it had, in fact, a sort\r\nof mixed flavour of cherry-tart, custard, pine-apple, roast\r\nturkey, toffee, and hot buttered toast,) she very soon finished\r\nit off.\r\n\r\n     *       *       *       *       *       *       *\r\n\r\n         *       *       *       *       *       *\r\n\r\n     *       *       *       *       *       *       *\r\n\r\n  `What a curious feeling!' said Alice; `I must be shutting up\r\nlike a telescope.'\r\n\r\n  And so it was indeed:  she was now only ten inches high, and\r\nher face brightened up at the thought that she was now the right\r\nsize for going though the little door into that lovely garden.\r\nFirst, however, she waited for a few minutes to see if she was\r\ngoing to shrink any further:  she felt a little nervous about\r\nthis; `for it might end, you know,' said Alice to herself, `in my\r\ngoing out altogether, like a candle.  I wonder what I should be\r\nlike then?'  And she tried to fancy what the flame of a candle is\r\nlike after the candle is blown out, for she could not remember\r\never having seen such a thing.\r\n\r\n  After a while, finding that nothing more happened, she decided\r\non going into the garden at once; but, alas for poor Alice! when\r\nshe got to the door, she found he had forgotten the little golden\r\nkey, and when she went back to the table for it, she found she\r\ncould not possibly reach it:  she could see it quite plainly\r\nthrough the glass, and she tried her best to climb up one of the\r\nlegs of the table, but it was too slippery; and when she had\r\ntired herself out with trying, the poor little thing sat down and\r\ncried.\r\n\r\n  `Come, there's no use in crying like that!' said Alice to\r\nherself, rather sharply; `I advise you to leave off this minute!'\r\nShe generally gave herself very good advice, (though she very\r\nseldom followed it), and sometimes she scolded herself so\r\nseverely as to bring tears into her eyes; and once she remembered\r\ntrying to box her own ears for having cheated herself in a game\r\nof croquet she was playing against herself, for this curious\r\nchild was very fond of pretending to be two people.  `But it's no\r\nuse now,' thought poor Alice, `to pretend to be two people!  Why,\r\nthere's hardly enough of me left to make ONE respectable\r\nperson!'\r\n\r\n  Soon her eye fell on a little glass box that was lying under\r\nthe table:  she opened it, and found in it a very small cake, on\r\nwhich the words `EAT ME' were beautifully marked in currants.\r\n`Well, I'll eat it,' said Alice, `and if it makes me grow larger,\r\nI can reach the key; and if it makes me grow smaller, I can creep\r\nunder the door; so either way I'll get into the garden, and I\r\ndon't care which happens!'\r\n\r\n  She ate a little bit, and said anxiously to herself, `Which\r\nway?  Which way?', holding her hand on the top of her head to\r\nfeel which way it was growing, and she was quite surprised to\r\nfind that she remained the same size:  to be sure, this generally\r\nhappens when one eats cake, but Alice had got so much into the\r\nway of expecting nothing but out-of-the-way things to happen,\r\nthat it seemed quite dull and stupid for life to go on in the\r\ncommon way.\r\n\r\n  So she set to work, and very soon finished off the cake.\r\n\r\n     *       *       *       *       *       *       *\r\n\r\n         *       *       *       *       *       *\r\n\r\n     *       *       *       *       *       *       *\r\n\r\n\r\n\r\n\r\n                           CHAPTER II\r\n\r\n                        The Pool of Tears\r\n\r\n\r\n  `Curiouser and curiouser!' cried Alice (she was so much\r\nsurprised, that for the moment she quite forgot how to speak good\r\nEnglish); `now I'm opening out like the largest telescope that\r\never was!  Good-bye, feet!' (for when she looked down at her\r\nfeet, they seemed to be almost out of sight, they were getting so\r\nfar off).  `Oh, my poor little feet, I wonder who will put on\r\nyour shoes and stockings for you now, dears?  I'm sure _I_ shan't\r\nbe able!  I shall be a great deal too far off to trouble myself\r\nabout you:  you must manage the best way you can; --but I must be\r\nkind to them,' thought Alice, `or perhaps they won't walk the\r\nway I want to go!  Let me see:  I'll give them a new pair of\r\nboots every Christmas.'\r\n\r\n  And she went on planning to herself how she would manage it.\r\n`They must go by the carrier,' she thought; `and how funny it'll\r\nseem, sending presents to one's own feet!  And how odd the\r\ndirections will look!\r\n\r\n            ALICE'S RIGHT FOOT, ESQ.\r\n                HEARTHRUG,\r\n                    NEAR THE FENDER,\r\n                        (WITH ALICE'S LOVE).\r\n\r\nOh dear, what nonsense I'm talking!'\r\n\r\n  Just then her head struck against the roof of the hall:  in\r\nfact she was now more than nine feet high, and she at once took\r\nup the little golden key and hurried off to the garden door.\r\n\r\n  Poor Alice!  It was as much as she could do, lying down on one\r\nside, to look through into the garden with one eye; but to get\r\nthrough was more hopeless than ever:  she sat down and began to\r\ncry again.\r\n\r\n  `You ought to be ashamed of yourself,' said Alice, `a great\r\ngirl like you,' (she might well say this), `to go on crying in\r\nthis way!  Stop this moment, I tell you!'  But she went on all\r\nthe same, shedding gallons of tears, until there was a large pool\r\nall round her, about four inches deep and reaching half down the\r\nhall.\r\n\r\n  After a time she heard a little pattering of feet in the\r\ndistance, and she hastily dried her eyes to see what was coming.\r\nIt was the White Rabbit returning, splendidly dressed, with a\r\npair of white kid gloves in one hand and a large fan in the\r\nother:  he came trotting along in a great hurry, muttering to\r\nhimself as he came, `Oh! the Duchess, the Duchess! Oh! won't she\r\nbe savage if I've kept her waiting!'  Alice felt so desperate\r\nthat she was ready to ask help of any one; so, when the Rabbit\r\ncame near her, she began, in a low, timid voice, `If you please,\r\nsir--'  The Rabbit started violently, dropped the white kid\r\ngloves and the fan, and skurried away into the darkness as hard\r\nas he could go.\r\n\r\n  Alice took up the fan and gloves, and, as the hall was very\r\nhot, she kept fanning herself all the time she went on talking:\r\n`Dear, dear!  How queer everything is to-day!  And yesterday\r\nthings went on just as usual.  I wonder if I've been changed in\r\nthe night?  Let me think:  was I the same when I got up this\r\nmorning?  I almost think I can remember feeling a little\r\ndifferent.  But if I'm not the same, the next question is, Who in\r\nthe world am I?  Ah, THAT'S the great puzzle!'  And she began\r\nthinking over all the children she knew that were of the same age\r\nas herself, to see if she could have been changed for any of\r\nthem.\r\n\r\n  `I'm sure I'm not Ada,' she said, `for her hair goes in such\r\nlong ringlets, and mine doesn't go in ringlets at all; and I'm\r\nsure I can't be Mabel, for I know all sorts of things, and she,\r\noh! she knows such a very little!  Besides, SHE'S she, and I'm I,\r\nand--oh dear, how puzzling it all is!  I'll try if I know all the\r\nthings I used to know.  Let me see:  four times five is twelve,\r\nand four times six is thirteen, and four times seven is--oh dear!\r\nI shall never get to twenty at that rate!  However, the\r\nMultiplication Table doesn't signify:  let's try Geography.\r\nLondon is the capital of Paris, and Paris is the capital of Rome,\r\nand Rome--no, THAT'S all wrong, I'm certain!  I must have been\r\nchanged for Mabel!  I'll try and say \"How doth the little--\"'\r\nand she crossed her hands on her lap as if she were saying lessons,\r\nand began to repeat it, but her voice sounded hoarse and\r\nstrange, and the words did not come the same as they used to do:--\r\n\r\n            `How doth the little crocodile\r\n              Improve his shining tail,\r\n            And pour the waters of the Nile\r\n              On every golden scale!\r\n\r\n            `How cheerfully he seems to grin,\r\n              How neatly spread his claws,\r\n            And welcome little fishes in\r\n              With gently smiling jaws!'\r\n\r\n  `I'm sure those are not the right words,' said poor Alice, and\r\nher eyes filled with tears again as she went on, `I must be Mabel\r\nafter all, and I shall have to go and live in that poky little\r\nhouse, and have next to no toys to play with, and oh! ever so\r\nmany lessons to learn!  No, I've made up my mind about it; if I'm\r\nMabel, I'll stay down here!  It'll be no use their putting their\r\nheads down and saying \"Come up again, dear!\"  I shall only look\r\nup and say \"Who am I then?  Tell me that first, and then, if I\r\nlike being that person, I'll come up:  if not, I'll stay down\r\nhere till I'm somebody else\"--but, oh dear!' cried Alice, with a\r\nsudden burst of tears, `I do wish they WOULD put their heads\r\ndown!  I am so VERY tired of being all alone here!'\r\n\r\n  As she said this she looked down at her hands, and was\r\nsurprised to see that she had put on one of the Rabbit's little\r\nwhite kid gloves while she was talking.  `How CAN I have done\r\nthat?' she thought.  `I must be growing small again.'  She got up\r\nand went to the table to measure herself by it, and found that,\r\nas nearly as she could guess, she was now about two feet high,\r\nand was going on shrinking rapidly:  she soon found out that the\r\ncause of this was the fan she was holding, and she dropped it\r\nhastily, just in time to avoid shrinking away altogether.\r\n\r\n`That WAS a narrow escape!' said Alice, a good deal frightened at\r\nthe sudden change, but very glad to find herself still in\r\nexistence; `and now for the garden!' and she ran with all speed\r\nback to the little door:  but, alas! the little door was shut\r\nagain, and the little golden key was lying on the glass table as\r\nbefore, `and things are worse than ever,' thought the poor child,\r\n`for I never was so small as this before, never!  And I declare\r\nit's too bad, that it is!'\r\n\r\n  As she said these words her foot slipped, and in another\r\nmoment, splash! she was up to her chin in salt water.  He first\r\nidea was that she had somehow fallen into the sea, `and in that\r\ncase I can go back by railway,' she said to herself.  (Alice had\r\nbeen to the seaside once in her life, and had come to the general\r\nconclusion, that wherever you go to on the English coast you find\r\na number of bathing machines in the sea, some children digging in\r\nthe sand with wooden spades, then a row of lodging houses, and\r\nbehind them a railway station.)  However, she soon made out that\r\nshe was in the pool of tears which she had wept when she was nine\r\nfeet high.\r\n\r\n  `I wish I hadn't cried so much!' said Alice, as she swam about,\r\ntrying to find her way out.  `I shall be punished for it now, I\r\nsuppose, by being drowned in my own tears!  That WILL be a queer\r\nthing, to be sure!  However, everything is queer to-day.'\r\n\r\n  Just then she heard something splashing about in the pool a\r\nlittle way off, and she swam nearer to make out what it was:  at\r\nfirst she thought it must be a walrus or hippopotamus, but then\r\nshe remembered how small she was now, and she soon made out that\r\nit was only a mouse that had slipped in like herself.\r\n\r\n  `Would it be of any use, now,' thought Alice, `to speak to this\r\nmouse?  Everything is so out-of-the-way down here, that I should\r\nthink very likely it can talk:  at any rate, there's no harm in\r\ntrying.'  So she began:  `O Mouse, do you know the way out of\r\nthis pool?  I am very tired of swimming about here, O Mouse!'\r\n(Alice thought this must be the right way of speaking to a mouse:\r\nshe had never done such a thing before, but she remembered having\r\nseen in her brother's Latin Grammar, `A mouse--of a mouse--to a\r\nmouse--a mouse--O mouse!'  The Mouse looked at her rather\r\ninquisitively, and seemed to her to wink with one of its little\r\neyes, but it said nothing.\r\n\r\n  `Perhaps it doesn't understand English,' thought Alice; `I\r\ndaresay it's a French mouse, come over with William the\r\nConqueror.'  (For, with all her knowledge of history, Alice had\r\nno very clear notion how long ago anything had happened.)  So she\r\nbegan again:  `Ou est ma chatte?' which was the first sentence in\r\nher French lesson-book.  The Mouse gave a sudden leap out of the\r\nwater, and seemed to quiver all over with fright.  `Oh, I beg\r\nyour pardon!' cried Alice hastily, afraid that she had hurt the\r\npoor animal's feelings.  `I quite forgot you didn't like cats.'\r\n\r\n  `Not like cats!' cried the Mouse, in a shrill, passionate\r\nvoice.  `Would YOU like cats if you were me?'\r\n\r\n  `Well, perhaps not,' said Alice in a soothing tone:  `don't be\r\nangry about it.  And yet I wish I could show you our cat Dinah:\r\nI think you'd take a fancy to cats if you could only see her.\r\nShe is such a dear quiet thing,' Alice went on, half to herself,\r\nas she swam lazily about in the pool, `and she sits purring so\r\nnicely by the fire, licking her paws and washing her face--and\r\nshe is such a nice soft thing to nurse--and she's such a capital\r\none for catching mice--oh, I beg your pardon!' cried Alice again,\r\nfor this time the Mouse was bristling all over, and she felt\r\ncertain it must be really offended.  `We won't talk about her any\r\nmore if you'd rather not.'\r\n\r\n  `We indeed!' cried the Mouse, who was trembling down to the end\r\nof his tail.  `As if I would talk on such a subject!  Our family\r\nalways HATED cats:  nasty, low, vulgar things!  Don't let me hear\r\nthe name again!'\r\n\r\n  `I won't indeed!' said Alice, in a great hurry to change the\r\nsubject of conversation.  `Are you--are you fond--of--of dogs?'\r\nThe Mouse did not answer, so Alice went on eagerly:  `There is\r\nsuch a nice little dog near our house I should like to show you!\r\nA little bright-eyed terrier, you know, with oh, such long curly\r\nbrown hair!  And it'll fetch things when you throw them, and\r\nit'll sit up and beg for its dinner, and all sorts of things--I\r\ncan't remember half of them--and it belongs to a farmer, you\r\nknow, and he says it's so useful, it's worth a hundred pounds!\r\nHe says it kills all the rats and--oh dear!' cried Alice in a\r\nsorrowful tone, `I'm afraid I've offended it again!'  For the\r\nMouse was swimming away from her as hard as it could go, and\r\nmaking quite a commotion in the pool as it went.\r\n\r\n  So she called softly after it, `Mouse dear!  Do come back\r\nagain, and we won't talk about cats or dogs either, if you don't\r\nlike them!'  When the Mouse heard this, it turned round and swam\r\nslowly back to her:  its face was quite pale (with passion, Alice\r\nthought), and it said in a low trembling voice, `Let us get to\r\nthe shore, and then I'll tell you my history, and you'll\r\nunderstand why it is I hate cats and dogs.'\r\n\r\n  It was high time to go, for the pool was getting quite crowded\r\nwith the birds and animals that had fallen into it:  there were a\r\nDuck and a Dodo, a Lory and an Eaglet, and several other curious\r\ncreatures.  Alice led the way, and the whole party swam to the\r\nshore.\r\n\r\n\r\n\r\n                           CHAPTER III\r\n\r\n                  A Caucus-Race and a Long Tale\r\n\r\n\r\n  They were indeed a queer-looking party that assembled on the\r\nbank--the birds with draggled feathers, the animals with their\r\nfur clinging close to them, and all dripping wet, cross, and\r\nuncomfortable.\r\n\r\n  The first question of course was, how to get dry again:  they\r\nhad a consultation about this, and after a few minutes it seemed\r\nquite natural to Alice to find herself talking familiarly with\r\nthem, as if she had known them all her life.  Indeed, she had\r\nquite a long argument with the Lory, who at last turned sulky,\r\nand would only say, `I am older than you, and must know better';\r\nand this Alice would not allow without knowing how old it was,\r\nand, as the Lory positively refused to tell its age, there was no\r\nmore to be said.\r\n\r\n  At last the Mouse, who seemed to be a person of authority among\r\nthem, called out, `Sit down, all of you, and listen to me!  I'LL\r\nsoon make you dry enough!'  They all sat down at once, in a large\r\nring, with the Mouse in the middle.  Alice kept her eyes\r\nanxiously fixed on it, for she felt sure she would catch a bad\r\ncold if she did not get dry very soon.\r\n\r\n  `Ahem!' said the Mouse with an important air, `are you all ready?\r\nThis is the driest thing I know.  Silence all round, if you please!\r\n\"William the Conqueror, whose cause was favoured by the pope, was\r\nsoon submitted to by the English, who wanted leaders, and had been\r\nof late much accustomed to usurpation and conquest.  Edwin and\r\nMorcar, the earls of Mercia and Northumbria--\"'\r\n\r\n  `Ugh!' said the Lory, with a shiver.\r\n\r\n  `I beg your pardon!' said the Mouse, frowning, but very\r\npolitely:  `Did you speak?'\r\n\r\n  `Not I!' said the Lory hastily.\r\n\r\n  `I thought you did,' said the Mouse.  `--I proceed.  \"Edwin and\r\nMorcar, the earls of Mercia and Northumbria, declared for him:\r\nand even Stigand, the patriotic archbishop of Canterbury, found\r\nit advisable--\"'\r\n\r\n  `Found WHAT?' said the Duck.\r\n\r\n  `Found IT,' the Mouse replied rather crossly:  `of course you\r\nknow what \"it\" means.'\r\n\r\n  `I know what \"it\" means well enough, when I find a thing,' said\r\nthe Duck:  `it's generally a frog or a worm.  The question is,\r\nwhat did the archbishop find?'\r\n\r\n  The Mouse did not notice this question, but hurriedly went on,\r\n`\"--found it advisable to go with Edgar Atheling to meet William\r\nand offer him the crown.  William's conduct at first was\r\nmoderate.  But the insolence of his Normans--\"  How are you\r\ngetting on now, my dear?' it continued, turning to Alice as it\r\nspoke.\r\n\r\n  `As wet as ever,' said Alice in a melancholy tone:  `it doesn't\r\nseem to dry me at all.'\r\n\r\n  `In that case,' said the Dodo solemnly, rising to its feet, `I\r\nmove that the meeting adjourn, for the immediate adoption of more\r\nenergetic remedies--'\r\n\r\n  `Speak English!' said the Eaglet.  `I don't know the meaning of\r\nhalf those long words, and, what's more, I don't believe you do\r\neither!'  And the Eaglet bent down its head to hide a smile:\r\nsome of the other birds tittered audibly.\r\n\r\n  `What I was going to say,' said the Dodo in an offended tone,\r\n`was, that the best thing to get us dry would be a Caucus-race.'\r\n\r\n  `What IS a Caucus-race?' said Alice; not that she wanted much\r\nto know, but the Dodo had paused as if it thought that SOMEBODY\r\nought to speak, and no one else seemed inclined to say anything.\r\n\r\n  `Why,' said the Dodo, `the best way to explain it is to do it.'\r\n(And, as you might like to try the thing yourself, some winter\r\nday, I will tell you how the Dodo managed it.)\r\n\r\n  First it marked out a race-course, in a sort of circle, (`the\r\nexact shape doesn't matter,' it said,) and then all the party\r\nwere placed along the course, here and there.  There was no `One,\r\ntwo, three, and away,' but they began running when they liked,\r\nand left off when they liked, so that it was not easy to know\r\nwhen the race was over.  However, when they had been running half\r\nan hour or so, and were quite dry again, the Dodo suddenly called\r\nout `The race is over!' and they all crowded round it, panting,\r\nand asking, `But who has won?'\r\n\r\n  This question the Dodo could not answer without a great deal of\r\nthought, and it sat for a long time with one finger pressed upon\r\nits forehead (the position in which you usually see Shakespeare,\r\nin the pictures of him), while the rest waited in silence.  At\r\nlast the Dodo said, `EVERYBODY has won, and all must have\r\nprizes.'\r\n\r\n  `But who is to give the prizes?' quite a chorus of voices\r\nasked.\r\n\r\n  `Why, SHE, of course,' said the Dodo, pointing to Alice with\r\none finger; and the whole party at once crowded round her,\r\ncalling out in a confused way, `Prizes! Prizes!'\r\n\r\n  Alice had no idea what to do, and in despair she put her hand\r\nin her pocket, and pulled out a box of comfits, (luckily the salt\r\nwater had not got into it), and handed them round as prizes.\r\nThere was exactly one a-piece all round.\r\n\r\n  `But she must have a prize herself, you know,' said the Mouse.\r\n\r\n  `Of course,' the Dodo replied very gravely.  `What else have\r\nyou got in your pocket?' he went on, turning to Alice.\r\n\r\n  `Only a thimble,' said Alice sadly.\r\n\r\n  `Hand it over here,' said the Dodo.\r\n\r\n  Then they all crowded round her once more, while the Dodo\r\nsolemnly presented the thimble, saying `We beg your acceptance of\r\nthis elegant thimble'; and, when it had finished this short\r\nspeech, they all cheered.\r\n\r\n  Alice thought the whole thing very absurd, but they all looked\r\nso grave that she did not dare to laugh; and, as she could not\r\nthink of anything to say, she simply bowed, and took the thimble,\r\nlooking as solemn as she could.\r\n\r\n  The next thing was to eat the comfits:  this caused some noise\r\nand confusion, as the large birds complained that they could not\r\ntaste theirs, and the small ones choked and had to be patted on\r\nthe back.  However, it was over at last, and they sat down again\r\nin a ring, and begged the Mouse to tell them something more.\r\n\r\n  `You promised to tell me your history, you know,' said Alice,\r\n`and why it is you hate--C and D,' she added in a whisper, half\r\nafraid that it would be offended again.\r\n\r\n  `Mine is a long and a sad tale!' said the Mouse, turning to\r\nAlice, and sighing.\r\n\r\n  `It IS a long tail, certainly,' said Alice, looking down with\r\nwonder at the Mouse's tail; `but why do you call it sad?'  And\r\nshe kept on puzzling about it while the Mouse was speaking, so\r\nthat her idea of the tale was something like this:--\r\n\r\n                    `Fury said to a\r\n                   mouse, That he\r\n                 met in the\r\n               house,\r\n            \"Let us\r\n              both go to\r\n                law:  I will\r\n                  prosecute\r\n                    YOU.  --Come,\r\n                       I'll take no\r\n                        denial; We\r\n                     must have a\r\n                 trial:  For\r\n              really this\r\n           morning I've\r\n          nothing\r\n         to do.\"\r\n           Said the\r\n             mouse to the\r\n               cur, \"Such\r\n                 a trial,\r\n                   dear Sir,\r\n                         With\r\n                     no jury\r\n                  or judge,\r\n                would be\r\n              wasting\r\n             our\r\n              breath.\"\r\n               \"I'll be\r\n                 judge, I'll\r\n                   be jury,\"\r\n                         Said\r\n                    cunning\r\n                      old Fury:\r\n                     \"I'll\r\n                      try the\r\n                         whole\r\n                          cause,\r\n                             and\r\n                        condemn\r\n                       you\r\n                      to\r\n                       death.\"'\r\n\r\n\r\n  `You are not attending!' said the Mouse to Alice severely.\r\n`What are you thinking of?'\r\n\r\n  `I beg your pardon,' said Alice very humbly:  `you had got to\r\nthe fifth bend, I think?'\r\n\r\n  `I had NOT!' cried the Mouse, sharply and very angrily.\r\n\r\n  `A knot!' said Alice, always ready to make herself useful, and\r\nlooking anxiously about her.  `Oh, do let me help to undo it!'\r\n\r\n  `I shall do nothing of the sort,' said the Mouse, getting up\r\nand walking away.  `You insult me by talking such nonsense!'\r\n\r\n  `I didn't mean it!' pleaded poor Alice.  `But you're so easily\r\noffended, you know!'\r\n\r\n  The Mouse only growled in reply.\r\n\r\n  `Please come back and finish your story!' Alice called after\r\nit; and the others all joined in chorus, `Yes, please do!' but\r\nthe Mouse only shook its head impatiently, and walked a little\r\nquicker.\r\n\r\n  `What a pity it wouldn't stay!' sighed the Lory, as soon as it\r\nwas quite out of sight; and an old Crab took the opportunity of\r\nsaying to her daughter `Ah, my dear!  Let this be a lesson to you\r\nnever to lose YOUR temper!'  `Hold your tongue, Ma!' said the\r\nyoung Crab, a little snappishly.  `You're enough to try the\r\npatience of an oyster!'\r\n\r\n  `I wish I had our Dinah here, I know I do!' said Alice aloud,\r\naddressing nobody in particular.  `She'd soon fetch it back!'\r\n\r\n  `And who is Dinah, if I might venture to ask the question?'\r\nsaid the Lory.\r\n\r\n  Alice replied eagerly, for she was always ready to talk about\r\nher pet:  `Dinah's our cat.  And she's such a capital one for\r\ncatching mice you can't think!  And oh, I wish you could see her\r\nafter the birds!  Why, she'll eat a little bird as soon as look\r\nat it!'\r\n\r\n  This speech caused a remarkable sensation among the party.\r\nSome of the birds hurried off at once:  one the old Magpie began\r\nwrapping itself up very carefully, remarking, `I really must be\r\ngetting home; the night-air doesn't suit my throat!' and a Canary\r\ncalled out in a trembling voice to its children, `Come away, my\r\ndears!  It's high time you were all in bed!'  On various pretexts\r\nthey all moved off, and Alice was soon left alone.\r\n\r\n  `I wish I hadn't mentioned Dinah!' she said to herself in a\r\nmelancholy tone.  `Nobody seems to like her, down here, and I'm\r\nsure she's the best cat in the world!  Oh, my dear Dinah!  I\r\nwonder if I shall ever see you any more!'  And here poor Alice\r\nbegan to cry again, for she felt very lonely and low-spirited.\r\nIn a little while, however, she again heard a little pattering of\r\nfootsteps in the distance, and she looked up eagerly, half hoping\r\nthat the Mouse had changed his mind, and was coming back to\r\nfinish his story.\r\n\r\n\r\n\r\n                           CHAPTER IV\r\n\r\n                The Rabbit Sends in a Little Bill\r\n\r\n\r\n  It was the White Rabbit, trotting slowly back again, and\r\nlooking anxiously about as it went, as if it had lost something;\r\nand she heard it muttering to itself `The Duchess!  The Duchess!\r\nOh my dear paws!  Oh my fur and whiskers!  She'll get me\r\nexecuted, as sure as ferrets are ferrets!  Where CAN I have\r\ndropped them, I wonder?'  Alice guessed in a moment that it was\r\nlooking for the fan and the pair of white kid gloves, and she\r\nvery good-naturedly began hunting about for them, but they were\r\nnowhere to be seen--everything seemed to have changed since her\r\nswim in the pool, and the great hall, with the glass table and\r\nthe little door, had vanished completely.\r\n\r\n  Very soon the Rabbit noticed Alice, as she went hunting about,\r\nand called out to her in an angry tone, `Why, Mary Ann, what ARE\r\nyou doing out here?  Run home this moment, and fetch me a pair of\r\ngloves and a fan!  Quick, now!'  And Alice was so much frightened\r\nthat she ran off at once in the direction it pointed to, without\r\ntrying to explain the mistake it had made.\r\n\r\n  `He took me for his housemaid,' she said to herself as she ran.\r\n`How surprised he'll be when he finds out who I am!  But I'd\r\nbetter take him his fan and gloves--that is, if I can find them.'\r\nAs she said this, she came upon a neat little house, on the door\r\nof which was a bright brass plate with the name `W. RABBIT'\r\nengraved upon it.  She went in without knocking, and hurried\r\nupstairs, in great fear lest she should meet the real Mary Ann,\r\nand be turned out of the house before she had found the fan and\r\ngloves.\r\n\r\n  `How queer it seems,' Alice said to herself, `to be going\r\nmessages for a rabbit!  I suppose Dinah'll be sending me on\r\nmessages next!'  And she began fancying the sort of thing that\r\nwould happen:  `\"Miss Alice!  Come here directly, and get ready\r\nfor your walk!\" \"Coming in a minute, nurse!  But I've got to see\r\nthat the mouse doesn't get out.\"  Only I don't think,' Alice went\r\non, `that they'd let Dinah stop in the house if it began ordering\r\npeople about like that!'\r\n\r\n  By this time she had found her way into a tidy little room with\r\na table in the window, and on it (as she had hoped) a fan and two\r\nor three pairs of tiny white kid gloves:  she took up the fan and\r\na pair of the gloves, and was just going to leave the room, when\r\nher eye fell upon a little bottle that stood near the looking-\r\nglass.  There was no label this time with the words `DRINK ME,'\r\nbut nevertheless she uncorked it and put it to her lips.  `I know\r\nSOMETHING interesting is sure to happen,' she said to herself,\r\n`whenever I eat or drink anything; so I'll just see what this\r\nbottle does.  I do hope it'll make me grow large again, for\r\nreally I'm quite tired of being such a tiny little thing!'\r\n\r\n  It did so indeed, and much sooner than she had expected:\r\nbefore she had drunk half the bottle, she found her head pressing\r\nagainst the ceiling, and had to stoop to save her neck from being\r\nbroken.  She hastily put down the bottle, saying to herself\r\n`That's quite enough--I hope I shan't grow any more--As it is, I\r\ncan't get out at the door--I do wish I hadn't drunk quite so\r\nmuch!'\r\n\r\n  Alas! it was too late to wish that!  She went on growing, and\r\ngrowing, and very soon had to kneel down on the floor:  in\r\nanother minute there was not even room for this, and she tried\r\nthe effect of lying down with one elbow against the door, and the\r\nother arm curled round her head.  Still she went on growing, and,\r\nas a last resource, she put one arm out of the window, and one\r\nfoot up the chimney, and said to herself `Now I can do no more,\r\nwhatever happens.  What WILL become of me?'\r\n\r\n  Luckily for Alice, the little magic bottle had now had its full\r\neffect, and she grew no larger:  still it was very uncomfortable,\r\nand, as there seemed to be no sort of chance of her ever getting\r\nout of the room again, no wonder she felt unhappy.\r\n\r\n  `It was much pleasanter at home,' thought poor Alice, `when one\r\nwasn't always growing larger and smaller, and being ordered about\r\nby mice and rabbits.  I almost wish I hadn't gone down that\r\nrabbit-hole--and yet--and yet--it's rather curious, you know,\r\nthis sort of life!  I do wonder what CAN have happened to me!\r\nWhen I used to read fairy-tales, I fancied that kind of thing\r\nnever happened, and now here I am in the middle of one!  There\r\nought to be a book written about me, that there ought!  And when\r\nI grow up, I'll write one--but I'm grown up now,' she added in a\r\nsorrowful tone; `at least there's no room to grow up any more\r\nHERE.'\r\n\r\n  `But then,' thought Alice, `shall I NEVER get any older than I\r\nam now?  That'll be a comfort, one way--never to be an old woman-\r\n-but then--always to have lessons to learn!  Oh, I shouldn't like\r\nTHAT!'\r\n\r\n  `Oh, you foolish Alice!' she answered herself.  `How can you\r\nlearn lessons in here?  Why, there's hardly room for YOU, and no\r\nroom at all for any lesson-books!'\r\n\r\n  And so she went on, taking first one side and then the other,\r\nand making quite a conversation of it altogether; but after a few\r\nminutes she heard a voice outside, and stopped to listen.\r\n\r\n  `Mary Ann!  Mary Ann!' said the voice.  `Fetch me my gloves\r\nthis moment!'  Then came a little pattering of feet on the\r\nstairs.  Alice knew it was the Rabbit coming to look for her, and\r\nshe trembled till she shook the house, quite forgetting that she\r\nwas now about a thousand times as large as the Rabbit, and had no\r\nreason to be afraid of it.\r\n\r\n  Presently the Rabbit came up to the door, and tried to open it;\r\nbut, as the door opened inwards, and Alice's elbow was pressed\r\nhard against it, that attempt proved a failure.  Alice heard it\r\nsay to itself `Then I'll go round and get in at the window.'\r\n\r\n  `THAT you won't' thought Alice, and, after waiting till she\r\nfancied she heard the Rabbit just under the window, she suddenly\r\nspread out her hand, and made a snatch in the air.  She did not\r\nget hold of anything, but she heard a little shriek and a fall,\r\nand a crash of broken glass, from which she concluded that it was\r\njust possible it had fallen into a cucumber-frame, or something\r\nof the sort.\r\n\r\n  Next came an angry voice--the Rabbit's--`Pat! Pat!  Where are\r\nyou?'  And then a voice she had never heard before, `Sure then\r\nI'm here!  Digging for apples, yer honour!'\r\n\r\n  `Digging for apples, indeed!' said the Rabbit angrily.  `Here!\r\nCome and help me out of THIS!'  (Sounds of more broken glass.)\r\n\r\n  `Now tell me, Pat, what's that in the window?'\r\n\r\n  `Sure, it's an arm, yer honour!'  (He pronounced it `arrum.')\r\n\r\n  `An arm, you goose!   Who ever saw one that size?  Why, it\r\nfills the whole window!'\r\n\r\n  `Sure, it does, yer honour:  but it's an arm for all that.'\r\n\r\n  `Well, it's got no business there, at any rate:  go and take it\r\naway!'\r\n\r\n  There was a long silence after this, and Alice could only hear\r\nwhispers now and then; such as, `Sure, I don't like it, yer\r\nhonour, at all, at all!'  `Do as I tell you, you coward!' and at\r\nlast she spread out her hand again, and made another snatch in\r\nthe air.  This time there were TWO little shrieks, and more\r\nsounds of broken glass.  `What a number of cucumber-frames there\r\nmust be!' thought Alice.  `I wonder what they'll do next!  As for\r\npulling me out of the window, I only wish they COULD!  I'm sure I\r\ndon't want to stay in here any longer!'\r\n\r\n  She waited for some time without hearing anything more:  at\r\nlast came a rumbling of little cartwheels, and the sound of a\r\ngood many voice all talking together:  she made out the words:\r\n`Where's the other ladder?--Why, I hadn't to bring but one;\r\nBill's got the other--Bill! fetch it here, lad!--Here, put 'em up\r\nat this corner--No, tie 'em together first--they don't reach half\r\nhigh enough yet--Oh! they'll do well enough; don't be particular-\r\n-Here, Bill! catch hold of this rope--Will the roof bear?--Mind\r\nthat loose slate--Oh, it's coming down!  Heads below!' (a loud\r\ncrash)--`Now, who did that?--It was Bill, I fancy--Who's to go\r\ndown the chimney?--Nay, I shan't! YOU do it!--That I won't,\r\nthen!--Bill's to go down--Here, Bill! the master says you're to\r\ngo down the chimney!'\r\n\r\n  `Oh! So Bill's got to come down the chimney, has he?' said\r\nAlice to herself.  `Shy, they seem to put everything upon Bill!\r\nI wouldn't be in Bill's place for a good deal:  this fireplace is\r\nnarrow, to be sure; but I THINK I can kick a little!'\r\n\r\n  She drew her foot as far down the chimney as she could, and\r\nwaited till she heard a little animal (she couldn't guess of what\r\nsort it was) scratching and scrambling about in the chimney close\r\nabove her:  then, saying to herself `This is Bill,' she gave one\r\nsharp kick, and waited to see what would happen next.\r\n\r\n  The first thing she heard was a general chorus of `There goes\r\nBill!' then the Rabbit's voice along--`Catch him, you by the\r\nhedge!' then silence, and then another confusion of voices--`Hold\r\nup his head--Brandy now--Don't choke him--How was it, old fellow?\r\nWhat happened to you?  Tell us all about it!'\r\n\r\n  Last came a little feeble, squeaking voice, (`That's Bill,'\r\nthought Alice,) `Well, I hardly know--No more, thank ye; I'm\r\nbetter now--but I'm a deal too flustered to tell you--all I know\r\nis, something comes at me like a Jack-in-the-box, and up I goes\r\nlike a sky-rocket!'\r\n\r\n  `So you did, old fellow!' said the others.\r\n\r\n  `We must burn the house down!' said the Rabbit's voice; and\r\nAlice called out as loud as she could, `If you do.  I'll set\r\nDinah at you!'\r\n\r\n  There was a dead silence instantly, and Alice thought to\r\nherself, `I wonder what they WILL do next!  If they had any\r\nsense, they'd take the roof off.'  After a minute or two, they\r\nbegan moving about again, and Alice heard the Rabbit say, `A\r\nbarrowful will do, to begin with.'\r\n\r\n  `A barrowful of WHAT?' thought Alice; but she had not long to\r\ndoubt, for the next moment a shower of little pebbles came\r\nrattling in at the window, and some of them hit her in the face.\r\n`I'll put a stop to this,' she said to herself, and shouted out,\r\n`You'd better not do that again!' which produced another dead\r\nsilence.\r\n\r\n  Alice noticed with some surprise that the pebbles were all\r\nturning into little cakes as they lay on the floor, and a bright\r\nidea came into her head.  `If I eat one of these cakes,' she\r\nthought, `it's sure to make SOME change in my size; and as it\r\ncan't possibly make me larger, it must make me smaller, I\r\nsuppose.'\r\n\r\n  So she swallowed one of the cakes, and was delighted to find\r\nthat she began shrinking directly.  As soon as she was small\r\nenough to get through the door, she ran out of the house, and\r\nfound quite a crowd of little animals and birds waiting outside.\r\nThe poor little Lizard, Bill, was in the middle, being held up by\r\ntwo guinea-pigs, who were giving it something out of a bottle.\r\nThey all made a rush at Alice the moment she appeared; but she\r\nran off as hard as she could, and soon found herself safe in a\r\nthick wood.\r\n\r\n  `The first thing I've got to do,' said Alice to herself, as she\r\nwandered about in the wood, `is to grow to my right size again;\r\nand the second thing is to find my way into that lovely garden.\r\nI think that will be the best plan.'\r\n\r\n  It sounded an excellent plan, no doubt, and very neatly and\r\nsimply arranged; the only difficulty was, that she had not the\r\nsmallest idea how to set about it; and while she was peering\r\nabout anxiously among the trees, a little sharp bark just over\r\nher head made her look up in a great hurry.\r\n\r\n  An enormous puppy was looking down at her with large round\r\neyes, and feebly stretching out one paw, trying to touch her.\r\n`Poor little thing!' said Alice, in a coaxing tone, and she tried\r\nhard to whistle to it; but she was terribly frightened all the\r\ntime at the thought that it might be hungry, in which case it\r\nwould be very likely to eat her up in spite of all her coaxing.\r\n\r\n  Hardly knowing what she did, she picked up a little bit of\r\nstick, and held it out to the puppy; whereupon the puppy jumped\r\ninto the air off all its feet at once, with a yelp of delight,\r\nand rushed at the stick, and made believe to worry it; then Alice\r\ndodged behind a great thistle, to keep herself from being run\r\nover; and the moment she appeared on the other side, the puppy\r\nmade another rush at the stick, and tumbled head over heels in\r\nits hurry to get hold of it; then Alice, thinking it was very\r\nlike having a game of play with a cart-horse, and expecting every\r\nmoment to be trampled under its feet, ran round the thistle\r\nagain; then the puppy began a series of short charges at the\r\nstick, running a very little way forwards each time and a long\r\nway back, and barking hoarsely all the while, till at last it sat\r\ndown a good way off, panting, with its tongue hanging out of its\r\nmouth, and its great eyes half shut.\r\n\r\n  This seemed to Alice a good opportunity for making her escape;\r\nso she set off at once, and ran till she was quite tired and out\r\nof breath, and till the puppy's bark sounded quite faint in the\r\ndistance.\r\n\r\n  `And yet what a dear little puppy it was!' said Alice, as she\r\nleant against a buttercup to rest herself, and fanned herself\r\nwith one of the leaves:  `I should have liked teaching it tricks\r\nvery much, if--if I'd only been the right size to do it!  Oh\r\ndear!  I'd nearly forgotten that I've got to grow up again!  Let\r\nme see--how IS it to be managed?  I suppose I ought to eat or\r\ndrink something or other; but the great question is, what?'\r\n\r\n  The great question certainly was, what?  Alice looked all round\r\nher at the flowers and the blades of grass, but she did not see\r\nanything that looked like the right thing to eat or drink under\r\nthe circumstances.  There was a large mushroom growing near her,\r\nabout the same height as herself; and when she had looked under\r\nit, and on both sides of it, and behind it, it occurred to her\r\nthat she might as well look and see what was on the top of it.\r\n\r\n  She stretched herself up on tiptoe, and peeped over the edge of\r\nthe mushroom, and her eyes immediately met those of a large\r\ncaterpillar, that was sitting on the top with its arms folded,\r\nquietly smoking a long hookah, and taking not the smallest notice\r\nof her or of anything else.\r\n\r\n\r\n\r\n                            CHAPTER V\r\n\r\n                    Advice from a Caterpillar\r\n\r\n\r\n  The Caterpillar and Alice looked at each other for some time in\r\nsilence:  at last the Caterpillar took the hookah out of its\r\nmouth, and addressed her in a languid, sleepy voice.\r\n\r\n  `Who are YOU?' said the Caterpillar.\r\n\r\n  This was not an encouraging opening for a conversation.  Alice\r\nreplied, rather shyly, `I--I hardly know, sir, just at present--\r\nat least I know who I WAS when I got up this morning, but I think\r\nI must have been changed several times since then.'\r\n\r\n  `What do you mean by that?' said the Caterpillar sternly.\r\n`Explain yourself!'\r\n\r\n  `I can't explain MYSELF, I'm afraid, sir' said Alice, `because\r\nI'm not myself, you see.'\r\n\r\n  `I don't see,' said the Caterpillar.\r\n\r\n  `I'm afraid I can't put it more clearly,' Alice replied very\r\npolitely, `for I can't understand it myself to begin with; and\r\nbeing so many different sizes in a day is very confusing.'\r\n\r\n  `It isn't,' said the Caterpillar.\r\n\r\n  `Well, perhaps you haven't found it so yet,' said Alice; `but\r\nwhen you have to turn into a chrysalis--you will some day, you\r\nknow--and then after that into a butterfly, I should think you'll\r\nfeel it a little queer, won't you?'\r\n\r\n  `Not a bit,' said the Caterpillar.\r\n\r\n  `Well, perhaps your feelings may be different,' said Alice;\r\n`all I know is, it would feel very queer to ME.'\r\n\r\n  `You!' said the Caterpillar contemptuously.  `Who are YOU?'\r\n\r\n  Which brought them back again to the beginning of the\r\nconversation.  Alice felt a little irritated at the Caterpillar's\r\nmaking such VERY short remarks, and she drew herself up and said,\r\nvery gravely, `I think, you ought to tell me who YOU are, first.'\r\n\r\n  `Why?' said the Caterpillar.\r\n\r\n  Here was another puzzling question; and as Alice could not\r\nthink of any good reason, and as the Caterpillar seemed to be in\r\na VERY unpleasant state of mind, she turned away.\r\n\r\n  `Come back!' the Caterpillar called after her.  `I've something\r\nimportant to say!'\r\n\r\n  This sounded promising, certainly:  Alice turned and came back\r\nagain.\r\n\r\n  `Keep your temper,' said the Caterpillar.\r\n\r\n  `Is that all?' said Alice, swallowing down her anger as well as\r\nshe could.\r\n\r\n  `No,' said the Caterpillar.\r\n\r\n  Alice thought she might as well wait, as she had nothing else\r\nto do, and perhaps after all it might tell her something worth\r\nhearing.  For some minutes it puffed away without speaking, but\r\nat last it unfolded its arms, took the hookah out of its mouth\r\nagain, and said, `So you think you're changed, do you?'\r\n\r\n  `I'm afraid I am, sir,' said Alice; `I can't remember things as\r\nI used--and I don't keep the same size for ten minutes together!'\r\n\r\n  `Can't remember WHAT things?' said the Caterpillar.\r\n\r\n  `Well, I've tried to say \"HOW DOTH THE LITTLE BUSY BEE,\" but it\r\nall came different!' Alice replied in a very melancholy voice.\r\n\r\n  `Repeat, \"YOU ARE OLD, FATHER WILLIAM,\"' said the Caterpillar.\r\n\r\n  Alice folded her hands, and began:--\r\n\r\n    `You are old, Father William,' the young man said,\r\n      `And your hair has become very white;\r\n    And yet you incessantly stand on your head--\r\n      Do you think, at your age, it is right?'\r\n\r\n    `In my youth,' Father William replied to his son,\r\n      `I feared it might injure the brain;\r\n    But, now that I'm perfectly sure I have none,\r\n      Why, I do it again and again.'\r\n\r\n    `You are old,' said the youth, `as I mentioned before,\r\n      And have grown most uncommonly fat;\r\n    Yet you turned a back-somersault in at the door--\r\n      Pray, what is the reason of that?'\r\n\r\n    `In my youth,' said the sage, as he shook his grey locks,\r\n      `I kept all my limbs very supple\r\n    By the use of this ointment--one shilling the box--\r\n      Allow me to sell you a couple?'\r\n\r\n    `You are old,' said the youth, `and your jaws are too weak\r\n      For anything tougher than suet;\r\n    Yet you finished the goose, with the bones and the beak--\r\n      Pray how did you manage to do it?'\r\n\r\n    `In my youth,' said his father, `I took to the law,\r\n      And argued each case with my wife;\r\n    And the muscular strength, which it gave to my jaw,\r\n      Has lasted the rest of my life.'\r\n\r\n    `You are old,' said the youth, `one would hardly suppose\r\n      That your eye was as steady as ever;\r\n    Yet you balanced an eel on the end of your nose--\r\n      What made you so awfully clever?'\r\n\r\n    `I have answered three questions, and that is enough,'\r\n      Said his father; `don't give yourself airs!\r\n    Do you think I can listen all day to such stuff?\r\n      Be off, or I'll kick you down stairs!'\r\n\r\n\r\n  `That is not said right,' said the Caterpillar.\r\n\r\n  `Not QUITE right, I'm afraid,' said Alice, timidly; `some of the\r\nwords have got altered.'\r\n\r\n  `It is wrong from beginning to end,' said the Caterpillar\r\ndecidedly, and there was silence for some minutes.\r\n\r\n  The Caterpillar was the first to speak.\r\n\r\n  `What size do you want to be?' it asked.\r\n\r\n  `Oh, I'm not particular as to size,' Alice hastily replied;\r\n`only one doesn't like changing so often, you know.'\r\n\r\n  `I DON'T know,' said the Caterpillar.\r\n\r\n  Alice said nothing:  she had never been so much contradicted in\r\nher life before, and she felt that she was losing her temper.\r\n\r\n  `Are you content now?' said the Caterpillar.\r\n\r\n  `Well, I should like to be a LITTLE larger, sir, if you\r\nwouldn't mind,' said Alice:  `three inches is such a wretched\r\nheight to be.'\r\n\r\n  `It is a very good height indeed!' said the Caterpillar\r\nangrily, rearing itself upright as it spoke (it was exactly three\r\ninches high).\r\n\r\n  `But I'm not used to it!' pleaded poor Alice in a piteous tone.\r\nAnd she thought of herself, `I wish the creatures wouldn't be so\r\neasily offended!'\r\n\r\n  `You'll get used to it in time,' said the Caterpillar; and it\r\nput the hookah into its mouth and began smoking again.\r\n\r\n  This time Alice waited patiently until it chose to speak again.\r\nIn a minute or two the Caterpillar took the hookah out of its\r\nmouth and yawned once or twice, and shook itself.  Then it got\r\ndown off the mushroom, and crawled away in the grass, merely\r\nremarking as it went, `One side will make you grow taller, and\r\nthe other side will make you grow shorter.'\r\n\r\n  `One side of WHAT?  The other side of WHAT?' thought Alice to\r\nherself.\r\n\r\n  `Of the mushroom,' said the Caterpillar, just as if she had\r\nasked it aloud; and in another moment it was out of sight.\r\n\r\n  Alice remained looking thoughtfully at the mushroom for a\r\nminute, trying to make out which were the two sides of it; and as\r\nit was perfectly round, she found this a very difficult question.\r\nHowever, at last she stretched her arms round it as far as they\r\nwould go, and broke off a bit of the edge with each hand.\r\n\r\n  `And now which is which?' she said to herself, and nibbled a\r\nlittle of the right-hand bit to try the effect:  the next moment\r\nshe felt a violent blow underneath her chin:  it had struck her\r\nfoot!\r\n\r\n  She was a good deal frightened by this very sudden change, but\r\nshe felt that there was no time to be lost, as she was shrinking\r\nrapidly; so she set to work at once to eat some of the other bit.\r\nHer chin was pressed so closely against her foot, that there was\r\nhardly room to open her mouth; but she did it at last, and\r\nmanaged to swallow a morsel of the lefthand bit.\r\n\r\n\r\n     *       *       *       *       *       *       *\r\n\r\n         *       *       *       *       *       *\r\n\r\n     *       *       *       *       *       *       *\r\n\r\n  `Come, my head's free at last!' said Alice in a tone of\r\ndelight, which changed into alarm in another moment, when she\r\nfound that her shoulders were nowhere to be found:  all she could\r\nsee, when she looked down, was an immense length of neck, which\r\nseemed to rise like a stalk out of a sea of green leaves that lay\r\nfar below her.\r\n\r\n  `What CAN all that green stuff be?' said Alice.  `And where\r\nHAVE my shoulders got to?  And oh, my poor hands, how is it I\r\ncan't see you?'  She was moving them about as she spoke, but no\r\nresult seemed to follow, except a little shaking among the\r\ndistant green leaves.\r\n\r\n  As there seemed to be no chance of getting her hands up to her\r\nhead, she tried to get her head down to them, and was delighted\r\nto find that her neck would bend about easily in any direction,\r\nlike a serpent.  She had just succeeded in curving it down into a\r\ngraceful zigzag, and was going to dive in among the leaves, which\r\nshe found to be nothing but the tops of the trees under which she\r\nhad been wandering, when a sharp hiss made her draw back in a\r\nhurry:  a large pigeon had flown into her face, and was beating\r\nher violently with its wings.\r\n\r\n  `Serpent!' screamed the Pigeon.\r\n\r\n  `I'm NOT a serpent!' said Alice indignantly.  `Let me alone!'\r\n\r\n  `Serpent, I say again!' repeated the Pigeon, but in a more\r\nsubdued tone, and added with a kind of sob, `I've tried every\r\nway, and nothing seems to suit them!'\r\n\r\n  `I haven't the least idea what you're talking about,' said\r\nAlice.\r\n\r\n  `I've tried the roots of trees, and I've tried banks, and I've\r\ntried hedges,' the Pigeon went on, without attending to her; `but\r\nthose serpents!  There's no pleasing them!'\r\n\r\n  Alice was more and more puzzled, but she thought there was no\r\nuse in saying anything more till the Pigeon had finished.\r\n\r\n  `As if it wasn't trouble enough hatching the eggs,' said the\r\nPigeon; `but I must be on the look-out for serpents night and\r\nday!  Why, I haven't had a wink of sleep these three weeks!'\r\n\r\n  `I'm very sorry you've been annoyed,' said Alice, who was\r\nbeginning to see its meaning.\r\n\r\n  `And just as I'd taken the highest tree in the wood,' continued\r\nthe Pigeon, raising its voice to a shriek, `and just as I was\r\nthinking I should be free of them at last, they must needs come\r\nwriggling down from the sky!  Ugh, Serpent!'\r\n\r\n  `But I'm NOT a serpent, I tell you!' said Alice.  `I'm a--I'm\r\na--'\r\n\r\n  `Well!  WHAT are you?' said the Pigeon.  `I can see you're\r\ntrying to invent something!'\r\n\r\n  `I--I'm a little girl,' said Alice, rather doubtfully, as she\r\nremembered the number of changes she had gone through that day.\r\n\r\n  `A likely story indeed!' said the Pigeon in a tone of the\r\ndeepest contempt.  `I've seen a good many little girls in my\r\ntime, but never ONE with such a neck as that!  No, no!  You're a\r\nserpent; and there's no use denying it.  I suppose you'll be\r\ntelling me next that you never tasted an egg!'\r\n\r\n  `I HAVE tasted eggs, certainly,' said Alice, who was a very\r\ntruthful child; `but little girls eat eggs quite as much as\r\nserpents do, you know.'\r\n\r\n  `I don't believe it,' said the Pigeon; `but if they do, why\r\nthen they're a kind of serpent, that's all I can say.'\r\n\r\n  This was such a new idea to Alice, that she was quite silent\r\nfor a minute or two, which gave the Pigeon the opportunity of\r\nadding, `You're looking for eggs, I know THAT well enough; and\r\nwhat does it matter to me whether you're a little girl or a\r\nserpent?'\r\n\r\n  `It matters a good deal to ME,' said Alice hastily; `but I'm\r\nnot looking for eggs, as it happens; and if I was, I shouldn't\r\nwant YOURS:  I don't like them raw.'\r\n\r\n  `Well, be off, then!' said the Pigeon in a sulky tone, as it\r\nsettled down again into its nest.  Alice crouched down among the\r\ntrees as well as she could, for her neck kept getting entangled\r\namong the branches, and every now and then she had to stop and\r\nuntwist it.  After a while she remembered that she still held the\r\npieces of mushroom in her hands, and she set to work very\r\ncarefully, nibbling first at one and then at the other, and\r\ngrowing sometimes taller and sometimes shorter, until she had\r\nsucceeded in bringing herself down to her usual height.\r\n\r\n  It was so long since she had been anything near the right size,\r\nthat it felt quite strange at first; but she got used to it in a\r\nfew minutes, and began talking to herself, as usual.  `Come,\r\nthere's half my plan done now!  How puzzling all these changes\r\nare!  I'm never sure what I'm going to be, from one minute to\r\nanother!  However, I've got back to my right size:  the next\r\nthing is, to get into that beautiful garden--how IS that to be\r\ndone, I wonder?'  As she said this, she came suddenly upon an\r\nopen place, with a little house in it about four feet high.\r\n`Whoever lives there,' thought Alice, `it'll never do to come\r\nupon them THIS size:  why, I should frighten them out of their\r\nwits!'  So she began nibbling at the righthand bit again, and did\r\nnot venture to go near the house till she had brought herself\r\ndown to nine inches high.\r\n\r\n\r\n\r\n                           CHAPTER VI\r\n\r\n                         Pig and Pepper\r\n\r\n\r\n  For a minute or two she stood looking at the house, and\r\nwondering what to do next, when suddenly a footman in livery came\r\nrunning out of the wood--(she considered him to be a footman\r\nbecause he was in livery:  otherwise, judging by his face only,\r\nshe would have called him a fish)--and rapped loudly at the door\r\nwith his knuckles.  It was opened by another footman in livery,\r\nwith a round face, and large eyes like a frog; and both footmen,\r\nAlice noticed, had powdered hair that curled all over their\r\nheads.  She felt very curious to know what it was all about, and\r\ncrept a little way out of the wood to listen.\r\n\r\n  The Fish-Footman began by producing from under his arm a great\r\nletter, nearly as large as himself, and this he handed over to\r\nthe other, saying, in a solemn tone, `For the Duchess.  An\r\ninvitation from the Queen to play croquet.'  The Frog-Footman\r\nrepeated, in the same solemn tone, only changing the order of the\r\nwords a little, `From the Queen.  An invitation for the Duchess\r\nto play croquet.'\r\n\r\n  Then they both bowed low, and their curls got entangled\r\ntogether.\r\n\r\n  Alice laughed so much at this, that she had to run back into\r\nthe wood for fear of their hearing her; and when she next peeped\r\nout the Fish-Footman was gone, and the other was sitting on the\r\nground near the door, staring stupidly up into the sky.\r\n\r\n  Alice went timidly up to the door, and knocked.\r\n\r\n  `There's no sort of use in knocking,' said the Footman, `and\r\nthat for two reasons.  First, because I'm on the same side of the\r\ndoor as you are; secondly, because they're making such a noise\r\ninside, no one could possibly hear you.'  And certainly there was\r\na most extraordinary noise going on within--a constant howling\r\nand sneezing, and every now and then a great crash, as if a dish\r\nor kettle had been broken to pieces.\r\n\r\n  `Please, then,' said Alice, `how am I to get in?'\r\n\r\n  `There might be some sense in your knocking,' the Footman went\r\non without attending to her, `if we had the door between us.  For\r\ninstance, if you were INSIDE, you might knock, and I could let\r\nyou out, you know.'  He was looking up into the sky all the time\r\nhe was speaking, and this Alice thought decidedly uncivil.  `But\r\nperhaps he can't help it,' she said to herself; `his eyes are so\r\nVERY nearly at the top of his head.  But at any rate he might\r\nanswer questions.--How am I to get in?' she repeated, aloud.\r\n\r\n  `I shall sit here,' the Footman remarked, `till tomorrow--'\r\n\r\n  At this moment the door of the house opened, and a large plate\r\ncame skimming out, straight at the Footman's head:  it just\r\ngrazed his nose, and broke to pieces against one of the trees\r\nbehind him.\r\n\r\n  `--or next day, maybe,' the Footman continued in the same tone,\r\nexactly as if nothing had happened.\r\n\r\n  `How am I to get in?' asked Alice again, in a louder tone.\r\n\r\n  `ARE you to get in at all?' said the Footman.  `That's the\r\nfirst question, you know.'\r\n\r\n  It was, no doubt:  only Alice did not like to be told so.\r\n`It's really dreadful,' she muttered to herself, `the way all the\r\ncreatures argue.  It's enough to drive one crazy!'\r\n\r\n  The Footman seemed to think this a good opportunity for\r\nrepeating his remark, with variations.  `I shall sit here,' he\r\nsaid, `on and off, for days and days.'\r\n\r\n  `But what am I to do?' said Alice.\r\n\r\n  `Anything you like,' said the Footman, and began whistling.\r\n\r\n  `Oh, there's no use in talking to him,' said Alice desperately:\r\n`he's perfectly idiotic!'  And she opened the door and went in.\r\n\r\n  The door led right into a large kitchen, which was full of\r\nsmoke from one end to the other:  the Duchess was sitting on a\r\nthree-legged stool in the middle, nursing a baby; the cook was\r\nleaning over the fire, stirring a large cauldron which seemed to\r\nbe full of soup.\r\n\r\n  `There's certainly too much pepper in that soup!' Alice said to\r\nherself, as well as she could for sneezing.\r\n\r\n  There was certainly too much of it in the air.  Even the\r\nDuchess sneezed occasionally; and as for the baby, it was\r\nsneezing and howling alternately without a moment's pause.  The\r\nonly things in the kitchen that did not sneeze, were the cook,\r\nand a large cat which was sitting on the hearth and grinning from\r\near to ear.\r\n\r\n  `Please would you tell me,' said Alice, a little timidly, for\r\nshe was not quite sure whether it was good manners for her to\r\nspeak first, `why your cat grins like that?'\r\n\r\n  `It's a Cheshire cat,' said the Duchess, `and that's why.\r\nPig!'\r\n\r\n  She said the last word with such sudden violence that Alice\r\nquite jumped; but she saw in another moment that it was addressed\r\nto the baby, and not to her, so she took courage, and went on\r\nagain:--\r\n\r\n  `I didn't know that Cheshire cats always grinned; in fact, I\r\ndidn't know that cats COULD grin.'\r\n\r\n  `They all can,' said the Duchess; `and most of 'em do.'\r\n\r\n  `I don't know of any that do,' Alice said very politely,\r\nfeeling quite pleased to have got into a conversation.\r\n\r\n  `You don't know much,' said the Duchess; `and that's a fact.'\r\n\r\n  Alice did not at all like the tone of this remark, and thought\r\nit would be as well to introduce some other subject of\r\nconversation.  While she was trying to fix on one, the cook took\r\nthe cauldron of soup off the fire, and at once set to work\r\nthrowing everything within her reach at the Duchess and the baby\r\n--the fire-irons came first; then followed a shower of saucepans,\r\nplates, and dishes.  The Duchess took no notice of them even when\r\nthey hit her; and the baby was howling so much already, that it\r\nwas quite impossible to say whether the blows hurt it or not.\r\n\r\n  `Oh, PLEASE mind what you're doing!' cried Alice, jumping up\r\nand down in an agony of terror.  `Oh, there goes his PRECIOUS\r\nnose'; as an unusually large saucepan flew close by it, and very\r\nnearly carried it off.\r\n\r\n  `If everybody minded their own business,' the Duchess said in a\r\nhoarse growl, `the world would go round a deal faster than it\r\ndoes.'\r\n\r\n  `Which would NOT be an advantage,' said Alice, who felt very\r\nglad to get an opportunity of showing off a little of her\r\nknowledge.  `Just think of what work it would make with the day\r\nand night!  You see the earth takes twenty-four hours to turn\r\nround on its axis--'\r\n\r\n  `Talking of axes,' said the Duchess, `chop off her head!'\r\n\r\n  Alice glanced rather anxiously at the cook, to see if she meant\r\nto take the hint; but the cook was busily stirring the soup, and\r\nseemed not to be listening, so she went on again:  `Twenty-four\r\nhours, I THINK; or is it twelve?  I--'\r\n\r\n  `Oh, don't bother ME,' said the Duchess; `I never could abide\r\nfigures!'  And with that she began nursing her child again,\r\nsinging a sort of lullaby to it as she did so, and giving it a\r\nviolent shake at the end of every line:\r\n\r\n        `Speak roughly to your little boy,\r\n          And beat him when he sneezes:\r\n        He only does it to annoy,\r\n          Because he knows it teases.'\r\n\r\n                    CHORUS.\r\n\r\n    (In which the cook and the baby joined):--\r\n\r\n                `Wow! wow! wow!'\r\n\r\n  While the Duchess sang the second verse of the song, she kept\r\ntossing the baby violently up and down, and the poor little thing\r\nhowled so, that Alice could hardly hear the words:--\r\n\r\n        `I speak severely to my boy,\r\n          I beat him when he sneezes;\r\n        For he can thoroughly enjoy\r\n          The pepper when he pleases!'\r\n\r\n                    CHORUS.\r\n\r\n                `Wow! wow! wow!'\r\n\r\n  `Here! you may nurse it a bit, if you like!' the Duchess said\r\nto Alice, flinging the baby at her as she spoke.  `I must go and\r\nget ready to play croquet with the Queen,' and she hurried out of\r\nthe room.  The cook threw a frying-pan after her as she went out,\r\nbut it just missed her.\r\n\r\n  Alice caught the baby with some difficulty, as it was a queer-\r\nshaped little creature, and held out its arms and legs in all\r\ndirections, `just like a star-fish,' thought Alice.  The poor\r\nlittle thing was snorting like a steam-engine when she caught it,\r\nand kept doubling itself up and straightening itself out again,\r\nso that altogether, for the first minute or two, it was as much\r\nas she could do to hold it.\r\n\r\n  As soon as she had made out the proper way of nursing it,\r\n(which was to twist it up into a sort of knot, and then keep\r\ntight hold of its right ear and left foot, so as to prevent its\r\nundoing itself,) she carried it out into the open air.  `IF I\r\ndon't take this child away with me,' thought Alice, `they're sure\r\nto kill it in a day or two:  wouldn't it be murder to leave it\r\nbehind?'  She said the last words out loud, and the little thing\r\ngrunted in reply (it had left off sneezing by this time).  `Don't\r\ngrunt,' said Alice; `that's not at all a proper way of expressing\r\nyourself.'\r\n\r\n  The baby grunted again, and Alice looked very anxiously into\r\nits face to see what was the matter with it.  There could be no\r\ndoubt that it had a VERY turn-up nose, much more like a snout\r\nthan a real nose; also its eyes were getting extremely small for\r\na baby:  altogether Alice did not like the look of the thing at\r\nall.  `But perhaps it was only sobbing,' she thought, and looked\r\ninto its eyes again, to see if there were any tears.\r\n\r\n  No, there were no tears.  `If you're going to turn into a pig,\r\nmy dear,' said Alice, seriously, `I'll have nothing more to do\r\nwith you.  Mind now!'  The poor little thing sobbed again (or\r\ngrunted, it was impossible to say which), and they went on for\r\nsome while in silence.\r\n\r\n  Alice was just beginning to think to herself, `Now, what am I\r\nto do with this creature when I get it home?' when it grunted\r\nagain, so violently, that she looked down into its face in some\r\nalarm.  This time there could be NO mistake about it:  it was\r\nneither more nor less than a pig, and she felt that it would be\r\nquite absurd for her to carry it further.\r\n\r\n  So she set the little creature down, and felt quite relieved to\r\nsee it trot away quietly into the wood.  `If it had grown up,'\r\nshe said to herself, `it would have made a dreadfully ugly child:\r\nbut it makes rather a handsome pig, I think.'  And she began\r\nthinking over other children she knew, who might do very well as\r\npigs, and was just saying to herself, `if one only knew the right\r\nway to change them--' when she was a little startled by seeing\r\nthe Cheshire Cat sitting on a bough of a tree a few yards off.\r\n\r\n  The Cat only grinned when it saw Alice.  It looked good-\r\nnatured, she thought:  still it had VERY long claws and a great\r\nmany teeth, so she felt that it ought to be treated with respect.\r\n\r\n  `Cheshire Puss,' she began, rather timidly, as she did not at\r\nall know whether it would like the name:  however, it only\r\ngrinned a little wider.  `Come, it's pleased so far,' thought\r\nAlice, and she went on.  `Would you tell me, please, which way I\r\nought to go from here?'\r\n\r\n  `That depends a good deal on where you want to get to,' said\r\nthe Cat.\r\n\r\n  `I don't much care where--' said Alice.\r\n\r\n  `Then it doesn't matter which way you go,' said the Cat.\r\n\r\n  `--so long as I get SOMEWHERE,' Alice added as an explanation.\r\n\r\n  `Oh, you're sure to do that,' said the Cat, `if you only walk\r\nlong enough.'\r\n\r\n  Alice felt that this could not be denied, so she tried another\r\nquestion.  `What sort of people live about here?'\r\n\r\n  `In THAT direction,' the Cat said, waving its right paw round,\r\n`lives a Hatter:  and in THAT direction,' waving the other paw,\r\n`lives a March Hare.  Visit either you like:  they're both mad.'\r\n\r\n  `But I don't want to go among mad people,' Alice remarked.\r\n\r\n  `Oh, you can't help that,' said the Cat:  `we're all mad here.\r\nI'm mad.  You're mad.'\r\n\r\n  `How do you know I'm mad?' said Alice.\r\n\r\n  `You must be,' said the Cat, `or you wouldn't have come here.'\r\n\r\n  Alice didn't think that proved it at all; however, she went on\r\n`And how do you know that you're mad?'\r\n\r\n  `To begin with,' said the Cat, `a dog's not mad.  You grant\r\nthat?'\r\n\r\n  `I suppose so,' said Alice.\r\n\r\n  `Well, then,' the Cat went on, `you see, a dog growls when it's\r\nangry, and wags its tail when it's pleased.  Now I growl when I'm\r\npleased, and wag my tail when I'm angry.  Therefore I'm mad.'\r\n\r\n  `I call it purring, not growling,' said Alice.\r\n\r\n  `Call it what you like,' said the Cat.  `Do you play croquet\r\nwith the Queen to-day?'\r\n\r\n  `I should like it very much,' said Alice, `but I haven't been\r\ninvited yet.'\r\n\r\n  `You'll see me there,' said the Cat, and vanished.\r\n\r\n  Alice was not much surprised at this, she was getting so used\r\nto queer things happening.  While she was looking at the place\r\nwhere it had been, it suddenly appeared again.\r\n\r\n  `By-the-bye, what became of the baby?' said the Cat.  `I'd\r\nnearly forgotten to ask.'\r\n\r\n  `It turned into a pig,' Alice quietly said, just as if it had\r\ncome back in a natural way.\r\n\r\n  `I thought it would,' said the Cat, and vanished again.\r\n\r\n  Alice waited a little, half expecting to see it again, but it\r\ndid not appear, and after a minute or two she walked on in the\r\ndirection in which the March Hare was said to live.  `I've seen\r\nhatters before,' she said to herself; `the March Hare will be\r\nmuch the most interesting, and perhaps as this is May it won't be\r\nraving mad--at least not so mad as it was in March.'  As she said\r\nthis, she looked up, and there was the Cat again, sitting on a\r\nbranch of a tree.\r\n\r\n  `Did you say pig, or fig?' said the Cat.\r\n\r\n  `I said pig,' replied Alice; `and I wish you wouldn't keep\r\nappearing and vanishing so suddenly:  you make one quite giddy.'\r\n\r\n  `All right,' said the Cat; and this time it vanished quite\r\nslowly, beginning with the end of the tail, and ending with the\r\ngrin, which remained some time after the rest of it had gone.\r\n\r\n  `Well!  I've often seen a cat without a grin,' thought Alice;\r\n`but a grin without a cat!  It's the most curious thing I ever\r\nsay in my life!'\r\n\r\n  She had not gone much farther before she came in sight of the\r\nhouse of the March Hare:  she thought it must be the right house,\r\nbecause the chimneys were shaped like ears and the roof was\r\nthatched with fur.  It was so large a house, that she did not\r\nlike to go nearer till she had nibbled some more of the lefthand\r\nbit of mushroom, and raised herself to about two feet high:  even\r\nthen she walked up towards it rather timidly, saying to herself\r\n`Suppose it should be raving mad after all!  I almost wish I'd\r\ngone to see the Hatter instead!'\r\n\r\n\r\n\r\n                           CHAPTER VII\r\n\r\n                         A Mad Tea-Party\r\n\r\n\r\n  There was a table set out under a tree in front of the house,\r\nand the March Hare and the Hatter were having tea at it:  a\r\nDormouse was sitting between them, fast asleep, and the other two\r\nwere using it as a cushion, resting their elbows on it, and the\r\ntalking over its head.  `Very uncomfortable for the Dormouse,'\r\nthought Alice; `only, as it's asleep, I suppose it doesn't mind.'\r\n\r\n  The table was a large one, but the three were all crowded\r\ntogether at one corner of it:  `No room!  No room!' they cried\r\nout when they saw Alice coming.  `There's PLENTY of room!' said\r\nAlice indignantly, and she sat down in a large arm-chair at one\r\nend of the table.\r\n\r\n  `Have some wine,' the March Hare said in an encouraging tone.\r\n\r\n  Alice looked all round the table, but there was nothing on it\r\nbut tea.  `I don't see any wine,' she remarked.\r\n\r\n  `There isn't any,' said the March Hare.\r\n\r\n  `Then it wasn't very civil of you to offer it,' said Alice\r\nangrily.\r\n\r\n  `It wasn't very civil of you to sit down without being\r\ninvited,' said the March Hare.\r\n\r\n  `I didn't know it was YOUR table,' said Alice; `it's laid for a\r\ngreat many more than three.'\r\n\r\n  `Your hair wants cutting,' said the Hatter.  He had been\r\nlooking at Alice for some time with great curiosity, and this was\r\nhis first speech.\r\n\r\n  `You should learn not to make personal remarks,' Alice said\r\nwith some severity; `it's very rude.'\r\n\r\n  The Hatter opened his eyes very wide on hearing this; but all\r\nhe SAID was, `Why is a raven like a writing-desk?'\r\n\r\n  `Come, we shall have some fun now!' thought Alice.  `I'm glad\r\nthey've begun asking riddles.--I believe I can guess that,' she\r\nadded aloud.\r\n\r\n  `Do you mean that you think you can find out the answer to it?'\r\nsaid the March Hare.\r\n\r\n  `Exactly so,' said Alice.\r\n\r\n  `Then you should say what you mean,' the March Hare went on.\r\n\r\n  `I do,' Alice hastily replied; `at least--at least I mean what\r\nI say--that's the same thing, you know.'\r\n\r\n  `Not the same thing a bit!' said the Hatter.  `You might just\r\nas well say that \"I see what I eat\" is the same thing as \"I eat\r\nwhat I see\"!'\r\n\r\n  `You might just as well say,' added the March Hare, `that \"I\r\nlike what I get\" is the same thing as \"I get what I like\"!'\r\n\r\n  `You might just as well say,' added the Dormouse, who seemed to\r\nbe talking in his sleep, `that \"I breathe when I sleep\" is the\r\nsame thing as \"I sleep when I breathe\"!'\r\n\r\n  `It IS the same thing with you,' said the Hatter, and here the\r\nconversation dropped, and the party sat silent for a minute,\r\nwhile Alice thought over all she could remember about ravens and\r\nwriting-desks, which wasn't much.\r\n\r\n  The Hatter was the first to break the silence.  `What day of\r\nthe month is it?' he said, turning to Alice:  he had taken his\r\nwatch out of his pocket, and was looking at it uneasily, shaking\r\nit every now and then, and holding it to his ear.\r\n\r\n  Alice considered a little, and then said `The fourth.'\r\n\r\n  `Two days wrong!' sighed the Hatter.  `I told you butter\r\nwouldn't suit the works!' he added looking angrily at the March\r\nHare.\r\n\r\n  `It was the BEST butter,' the March Hare meekly replied.\r\n\r\n  `Yes, but some crumbs must have got in as well,' the Hatter\r\ngrumbled:  `you shouldn't have put it in with the bread-knife.'\r\n\r\n  The March Hare took the watch and looked at it gloomily:  then\r\nhe dipped it into his cup of tea, and looked at it again:  but he\r\ncould think of nothing better to say than his first remark, `It\r\nwas the BEST butter, you know.'\r\n\r\n  Alice had been looking over his shoulder with some curiosity.\r\n`What a funny watch!' she remarked.  `It tells the day of the\r\nmonth, and doesn't tell what o'clock it is!'\r\n\r\n  `Why should it?' muttered the Hatter.  `Does YOUR watch tell\r\nyou what year it is?'\r\n\r\n  `Of course not,' Alice replied very readily:  `but that's\r\nbecause it stays the same year for such a long time together.'\r\n\r\n  `Which is just the case with MINE,' said the Hatter.\r\n\r\n  Alice felt dreadfully puzzled.  The Hatter's remark seemed to\r\nhave no sort of meaning in it, and yet it was certainly English.\r\n`I don't quite understand you,' she said, as politely as she\r\ncould.\r\n\r\n  `The Dormouse is asleep again,' said the Hatter, and he poured\r\na little hot tea upon its nose.\r\n\r\n  The Dormouse shook its head impatiently, and said, without\r\nopening its eyes, `Of course, of course; just what I was going to\r\nremark myself.'\r\n\r\n  `Have you guessed the riddle yet?' the Hatter said, turning to\r\nAlice again.\r\n\r\n  `No, I give it up,' Alice replied:  `what's the answer?'\r\n\r\n  `I haven't the slightest idea,' said the Hatter.\r\n\r\n  `Nor I,' said the March Hare.\r\n\r\n  Alice sighed wearily.  `I think you might do something better\r\nwith the time,' she said, `than waste it in asking riddles that\r\nhave no answers.'\r\n\r\n  `If you knew Time as well as I do,' said the Hatter, `you\r\nwouldn't talk about wasting IT.  It's HIM.'\r\n\r\n  `I don't know what you mean,' said Alice.\r\n\r\n  `Of course you don't!' the Hatter said, tossing his head\r\ncontemptuously.  `I dare say you never even spoke to Time!'\r\n\r\n  `Perhaps not,' Alice cautiously replied:  `but I know I have to\r\nbeat time when I learn music.'\r\n\r\n  `Ah! that accounts for it,' said the Hatter.  `He won't stand\r\nbeating.  Now, if you only kept on good terms with him, he'd do\r\nalmost anything you liked with the clock.  For instance, suppose\r\nit were nine o'clock in the morning, just time to begin lessons:\r\nyou'd only have to whisper a hint to Time, and round goes the\r\nclock in a twinkling!  Half-past one, time for dinner!'\r\n\r\n  (`I only wish it was,' the March Hare said to itself in a\r\nwhisper.)\r\n\r\n  `That would be grand, certainly,' said Alice thoughtfully:\r\n`but then--I shouldn't be hungry for it, you know.'\r\n\r\n  `Not at first, perhaps,' said the Hatter:  `but you could keep\r\nit to half-past one as long as you liked.'\r\n\r\n  `Is that the way YOU manage?' Alice asked.\r\n\r\n  The Hatter shook his head mournfully.  `Not I!' he replied.\r\n`We quarrelled last March--just before HE went mad, you know--'\r\n(pointing with his tea spoon at the March Hare,) `--it was at the\r\ngreat concert given by the Queen of Hearts, and I had to sing\r\n\r\n            \"Twinkle, twinkle, little bat!\r\n            How I wonder what you're at!\"\r\n\r\nYou know the song, perhaps?'\r\n\r\n  `I've heard something like it,' said Alice.\r\n\r\n  `It goes on, you know,' the Hatter continued, `in this way:--\r\n\r\n            \"Up above the world you fly,\r\n            Like a tea-tray in the sky.\r\n                    Twinkle, twinkle--\"'\r\n\r\nHere the Dormouse shook itself, and began singing in its sleep\r\n`Twinkle, twinkle, twinkle, twinkle--' and went on so long that\r\nthey had to pinch it to make it stop.\r\n\r\n  `Well, I'd hardly finished the first verse,' said the Hatter,\r\n`when the Queen jumped up and bawled out, \"He's murdering the\r\ntime!  Off with his head!\"'\r\n\r\n  `How dreadfully savage!' exclaimed Alice.\r\n\r\n  `And ever since that,' the Hatter went on in a mournful tone,\r\n`he won't do a thing I ask!  It's always six o'clock now.'\r\n\r\n  A bright idea came into Alice's head.  `Is that the reason so\r\nmany tea-things are put out here?' she asked.\r\n\r\n  `Yes, that's it,' said the Hatter with a sigh:  `it's always\r\ntea-time, and we've no time to wash the things between whiles.'\r\n\r\n  `Then you keep moving round, I suppose?' said Alice.\r\n\r\n  `Exactly so,' said the Hatter:  `as the things get used up.'\r\n\r\n  `But what happens when you come to the beginning again?' Alice\r\nventured to ask.\r\n\r\n  `Suppose we change the subject,' the March Hare interrupted,\r\nyawning.  `I'm getting tired of this.  I vote the young lady\r\ntells us a story.'\r\n\r\n  `I'm afraid I don't know one,' said Alice, rather alarmed at\r\nthe proposal.\r\n\r\n  `Then the Dormouse shall!' they both cried.  `Wake up,\r\nDormouse!'  And they pinched it on both sides at once.\r\n\r\n  The Dormouse slowly opened his eyes.  `I wasn't asleep,' he\r\nsaid in a hoarse, feeble voice:  `I heard every word you fellows\r\nwere saying.'\r\n\r\n  `Tell us a story!' said the March Hare.\r\n\r\n  `Yes, please do!' pleaded Alice.\r\n\r\n  `And be quick about it,' added the Hatter, `or you'll be asleep\r\nagain before it's done.'\r\n\r\n  `Once upon a time there were three little sisters,' the\r\nDormouse began in a great hurry; `and their names were Elsie,\r\nLacie, and Tillie; and they lived at the bottom of a well--'\r\n\r\n  `What did they live on?' said Alice, who always took a great\r\ninterest in questions of eating and drinking.\r\n\r\n  `They lived on treacle,' said the Dormouse, after thinking a\r\nminute or two.\r\n\r\n  `They couldn't have done that, you know,' Alice gently\r\nremarked; `they'd have been ill.'\r\n\r\n  `So they were,' said the Dormouse; `VERY ill.'\r\n\r\n  Alice tried to fancy to herself what such an extraordinary ways\r\nof living would be like, but it puzzled her too much, so she went\r\non:  `But why did they live at the bottom of a well?'\r\n\r\n  `Take some more tea,' the March Hare said to Alice, very\r\nearnestly.\r\n\r\n  `I've had nothing yet,' Alice replied in an offended tone, `so\r\nI can't take more.'\r\n\r\n  `You mean you can't take LESS,' said the Hatter:  `it's very\r\neasy to take MORE than nothing.'\r\n\r\n  `Nobody asked YOUR opinion,' said Alice.\r\n\r\n  `Who's making personal remarks now?' the Hatter asked\r\ntriumphantly.\r\n\r\n  Alice did not quite know what to say to this:  so she helped\r\nherself to some tea and bread-and-butter, and then turned to the\r\nDormouse, and repeated her question.  `Why did they live at the\r\nbottom of a well?'\r\n\r\n  The Dormouse again took a minute or two to think about it, and\r\nthen said, `It was a treacle-well.'\r\n\r\n  `There's no such thing!'  Alice was beginning very angrily, but\r\nthe Hatter and the March Hare went `Sh! sh!' and the Dormouse\r\nsulkily remarked, `If you can't be civil, you'd better finish the\r\nstory for yourself.'\r\n\r\n  `No, please go on!' Alice said very humbly; `I won't interrupt\r\nagain.  I dare say there may be ONE.'\r\n\r\n  `One, indeed!' said the Dormouse indignantly.  However, he\r\nconsented to go on.  `And so these three little sisters--they\r\nwere learning to draw, you know--'\r\n\r\n  `What did they draw?' said Alice, quite forgetting her promise.\r\n\r\n  `Treacle,' said the Dormouse, without considering at all this\r\ntime.\r\n\r\n  `I want a clean cup,' interrupted the Hatter:  `let's all move\r\none place on.'\r\n\r\n  He moved on as he spoke, and the Dormouse followed him:  the\r\nMarch Hare moved into the Dormouse's place, and Alice rather\r\nunwillingly took the place of the March Hare.  The Hatter was the\r\nonly one who got any advantage from the change:  and Alice was a\r\ngood deal worse off than before, as the March Hare had just upset\r\nthe milk-jug into his plate.\r\n\r\n  Alice did not wish to offend the Dormouse again, so she began\r\nvery cautiously:  `But I don't understand.  Where did they draw\r\nthe treacle from?'\r\n\r\n  `You can draw water out of a water-well,' said the Hatter; `so\r\nI should think you could draw treacle out of a treacle-well--eh,\r\nstupid?'\r\n\r\n  `But they were IN the well,' Alice said to the Dormouse, not\r\nchoosing to notice this last remark.\r\n\r\n  `Of course they were', said the Dormouse; `--well in.'\r\n\r\n  This answer so confused poor Alice, that she let the Dormouse\r\ngo on for some time without interrupting it.\r\n\r\n  `They were learning to draw,' the Dormouse went on, yawning and\r\nrubbing its eyes, for it was getting very sleepy; `and they drew\r\nall manner of things--everything that begins with an M--'\r\n\r\n  `Why with an M?' said Alice.\r\n\r\n  `Why not?' said the March Hare.\r\n\r\n  Alice was silent.\r\n\r\n  The Dormouse had closed its eyes by this time, and was going\r\noff into a doze; but, on being pinched by the Hatter, it woke up\r\nagain with a little shriek, and went on:  `--that begins with an\r\nM, such as mouse-traps, and the moon, and memory, and muchness--\r\nyou know you say things are \"much of a muchness\"--did you ever\r\nsee such a thing as a drawing of a muchness?'\r\n\r\n  `Really, now you ask me,' said Alice, very much confused, `I\r\ndon't think--'\r\n\r\n  `Then you shouldn't talk,' said the Hatter.\r\n\r\n  This piece of rudeness was more than Alice could bear:  she got\r\nup in great disgust, and walked off; the Dormouse fell asleep\r\ninstantly, and neither of the others took the least notice of her\r\ngoing, though she looked back once or twice, half hoping that\r\nthey would call after her:  the last time she saw them, they were\r\ntrying to put the Dormouse into the teapot.\r\n\r\n  `At any rate I'll never go THERE again!' said Alice as she\r\npicked her way through the wood.  `It's the stupidest tea-party I\r\never was at in all my life!'\r\n\r\n  Just as she said this, she noticed that one of the trees had a\r\ndoor leading right into it.  `That's very curious!' she thought.\r\n`But everything's curious today.  I think I may as well go in at\r\nonce.'  And in she went.\r\n\r\n  Once more she found herself in the long hall, and close to the\r\nlittle glass table.  `Now, I'll manage better this time,' she\r\nsaid to herself, and began by taking the little golden key, and\r\nunlocking the door that led into the garden.  Then she went to\r\nwork nibbling at the mushroom (she had kept a piece of it in her\r\npocked) till she was about a foot high:  then she walked down the\r\nlittle passage:  and THEN--she found herself at last in the\r\nbeautiful garden, among the bright flower-beds and the cool\r\nfountains.\r\n\r\n\r\n\r\n                          CHAPTER VIII\r\n\r\n                   The Queen's Croquet-Ground\r\n\r\n\r\n  A large rose-tree stood near the entrance of the garden:  the\r\nroses growing on it were white, but there were three gardeners at\r\nit, busily painting them red.  Alice thought this a very curious\r\nthing, and she went nearer to watch them, and just as she came up\r\nto them she heard one of them say, `Look out now, Five!  Don't go\r\nsplashing paint over me like that!'\r\n\r\n  `I couldn't help it,' said Five, in a sulky tone; `Seven jogged\r\nmy elbow.'\r\n\r\n  On which Seven looked up and said, `That's right, Five!  Always\r\nlay the blame on others!'\r\n\r\n  `YOU'D better not talk!' said Five.  `I heard the Queen say only\r\nyesterday you deserved to be beheaded!'\r\n\r\n  `What for?' said the one who had spoken first.\r\n\r\n  `That's none of YOUR business, Two!' said Seven.\r\n\r\n  `Yes, it IS his business!' said Five, `and I'll tell him--it\r\nwas for bringing the cook tulip-roots instead of onions.'\r\n\r\n  Seven flung down his brush, and had just begun `Well, of all\r\nthe unjust things--' when his eye chanced to fall upon Alice, as\r\nshe stood watching them, and he checked himself suddenly:  the\r\nothers looked round also, and all of them bowed low.\r\n\r\n  `Would you tell me,' said Alice, a little timidly, `why you are\r\npainting those roses?'\r\n\r\n  Five and Seven said nothing, but looked at Two.  Two began in a\r\nlow voice, `Why the fact is, you see, Miss, this here ought to\r\nhave been a RED rose-tree, and we put a white one in by mistake;\r\nand if the Queen was to find it out, we should all have our heads\r\ncut off, you know.  So you see, Miss, we're doing our best, afore\r\nshe comes, to--'  At this moment Five, who had been anxiously\r\nlooking across the garden, called out `The Queen!  The Queen!'\r\nand the three gardeners instantly threw themselves flat upon\r\ntheir faces.  There was a sound of many footsteps, and Alice\r\nlooked round, eager to see the Queen.\r\n\r\n  First came ten soldiers carrying clubs; these were all shaped\r\nlike the three gardeners, oblong and flat, with their hands and\r\nfeet at the corners:  next the ten courtiers; these were\r\nornamented all over with diamonds, and walked two and two, as the\r\nsoldiers did.  After these came the royal children; there were\r\nten of them, and the little dears came jumping merrily along hand\r\nin hand, in couples:  they were all ornamented with hearts.  Next\r\ncame the guests, mostly Kings and Queens, and among them Alice\r\nrecognised the White Rabbit:  it was talking in a hurried nervous\r\nmanner, smiling at everything that was said, and went by without\r\nnoticing her.  Then followed the Knave of Hearts, carrying the\r\nKing's crown on a crimson velvet cushion; and, last of all this\r\ngrand procession, came THE KING AND QUEEN OF HEARTS.\r\n\r\n  Alice was rather doubtful whether she ought not to lie down on\r\nher face like the three gardeners, but she could not remember\r\nevery having heard of such a rule at processions; `and besides,\r\nwhat would be the use of a procession,' thought she, `if people\r\nhad all to lie down upon their faces, so that they couldn't see\r\nit?'  So she stood still where she was, and waited.\r\n\r\n  When the procession came opposite to Alice, they all stopped\r\nand looked at her, and the Queen said severely `Who is this?'\r\nShe said it to the Knave of Hearts, who only bowed and smiled in\r\nreply.\r\n\r\n  `Idiot!' said the Queen, tossing her head impatiently; and,\r\nturning to Alice, she went on, `What's your name, child?'\r\n\r\n  `My name is Alice, so please your Majesty,' said Alice very\r\npolitely; but she added, to herself, `Why, they're only a pack of\r\ncards, after all.  I needn't be afraid of them!'\r\n\r\n  `And who are THESE?' said the Queen, pointing to the three\r\ngardeners who were lying round the rosetree; for, you see, as\r\nthey were lying on their faces, and the pattern on their backs\r\nwas the same as the rest of the pack, she could not tell whether\r\nthey were gardeners, or soldiers, or courtiers, or three of her\r\nown children.\r\n\r\n  `How should I know?' said Alice, surprised at her own courage.\r\n`It's no business of MINE.'\r\n\r\n  The Queen turned crimson with fury, and, after glaring at her\r\nfor a moment like a wild beast, screamed `Off with her head!\r\nOff--'\r\n\r\n  `Nonsense!' said Alice, very loudly and decidedly, and the\r\nQueen was silent.\r\n\r\n  The King laid his hand upon her arm, and timidly said\r\n`Consider, my dear:  she is only a child!'\r\n\r\n  The Queen turned angrily away from him, and said to the Knave\r\n`Turn them over!'\r\n\r\n  The Knave did so, very carefully, with one foot.\r\n\r\n  `Get up!' said the Queen, in a shrill, loud voice, and the\r\nthree gardeners instantly jumped up, and began bowing to the\r\nKing, the Queen, the royal children, and everybody else.\r\n\r\n  `Leave off that!' screamed the Queen.  `You make me giddy.'\r\nAnd then, turning to the rose-tree, she went on, `What HAVE you\r\nbeen doing here?'\r\n\r\n  `May it please your Majesty,' said Two, in a very humble tone,\r\ngoing down on one knee as he spoke, `we were trying--'\r\n\r\n  `I see!' said the Queen, who had meanwhile been examining the\r\nroses.  `Off with their heads!' and the procession moved on,\r\nthree of the soldiers remaining behind to execute the unfortunate\r\ngardeners, who ran to Alice for protection.\r\n\r\n  `You shan't be beheaded!' said Alice, and she put them into a\r\nlarge flower-pot that stood near.  The three soldiers wandered\r\nabout for a minute or two, looking for them, and then quietly\r\nmarched off after the others.\r\n\r\n  `Are their heads off?' shouted the Queen.\r\n\r\n  `Their heads are gone, if it please your Majesty!' the soldiers\r\nshouted in reply.\r\n\r\n  `That's right!' shouted the Queen.  `Can you play croquet?'\r\n\r\n  The soldiers were silent, and looked at Alice, as the question\r\nwas evidently meant for her.\r\n\r\n  `Yes!' shouted Alice.\r\n\r\n  `Come on, then!' roared the Queen, and Alice joined the\r\nprocession, wondering very much what would happen next.\r\n\r\n  `It's--it's a very fine day!' said a timid voice at her side.\r\nShe was walking by the White Rabbit, who was peeping anxiously\r\ninto her face.\r\n\r\n  `Very,' said Alice:  `--where's the Duchess?'\r\n\r\n  `Hush!  Hush!' said the Rabbit in a low, hurried tone.  He\r\nlooked anxiously over his shoulder as he spoke, and then raised\r\nhimself upon tiptoe, put his mouth close to her ear, and\r\nwhispered `She's under sentence of execution.'\r\n\r\n  `What for?' said Alice.\r\n\r\n  `Did you say \"What a pity!\"?' the Rabbit asked.\r\n\r\n  `No, I didn't,' said Alice:  `I don't think it's at all a pity.\r\nI said \"What for?\"'\r\n\r\n  `She boxed the Queen's ears--' the Rabbit began.  Alice gave a\r\nlittle scream of laughter.  `Oh, hush!' the Rabbit whispered in a\r\nfrightened tone.  `The Queen will hear you!  You see, she came\r\nrather late, and the Queen said--'\r\n\r\n  `Get to your places!' shouted the Queen in a voice of thunder,\r\nand people began running about in all directions, tumbling up\r\nagainst each other; however, they got settled down in a minute or\r\ntwo, and the game began.  Alice thought she had never seen such a\r\ncurious croquet-ground in her life; it was all ridges and\r\nfurrows; the balls were live hedgehogs, the mallets live\r\nflamingoes, and the soldiers had to double themselves up and to\r\nstand on their hands and feet, to make the arches.\r\n\r\n  The chief difficulty Alice found at first was in managing her\r\nflamingo:  she succeeded in getting its body tucked away,\r\ncomfortably enough, under her arm, with its legs hanging down,\r\nbut generally, just as she had got its neck nicely straightened\r\nout, and was going to give the hedgehog a blow with its head, it\r\nWOULD twist itself round and look up in her face, with such a\r\npuzzled expression that she could not help bursting out laughing:\r\nand when she had got its head down, and was going to begin again,\r\nit was very provoking to find that the hedgehog had unrolled\r\nitself, and was in the act of crawling away:  besides all this,\r\nthere was generally a ridge or furrow in the way wherever she\r\nwanted to send the hedgehog to, and, as the doubled-up soldiers\r\nwere always getting up and walking off to other parts of the\r\nground, Alice soon came to the conclusion that it was a very\r\ndifficult game indeed.\r\n\r\n  The players all played at once without waiting for turns,\r\nquarrelling all the while, and fighting for the hedgehogs; and in\r\na very short time the Queen was in a furious passion, and went\r\nstamping about, and shouting `Off with his head!' or `Off with\r\nher head!' about once in a minute.\r\n\r\n  Alice began to feel very uneasy:  to be sure, she had not as\r\nyet had any dispute with the Queen, but she knew that it might\r\nhappen any minute, `and then,' thought she, `what would become of\r\nme?  They're dreadfully fond of beheading people here; the great\r\nwonder is, that there's any one left alive!'\r\n\r\n  She was looking about for some way of escape, and wondering\r\nwhether she could get away without being seen, when she noticed a\r\ncurious appearance in the air:  it puzzled her very much at\r\nfirst, but, after watching it a minute or two, she made it out to\r\nbe a grin, and she said to herself `It's the Cheshire Cat:  now I\r\nshall have somebody to talk to.'\r\n\r\n  `How are you getting on?' said the Cat, as soon as there was\r\nmouth enough for it to speak with.\r\n\r\n  Alice waited till the eyes appeared, and then nodded.  `It's no\r\nuse speaking to it,' she thought, `till its ears have come, or at\r\nleast one of them.'  In another minute the whole head appeared,\r\nand then Alice put down her flamingo, and began an account of the\r\ngame, feeling very glad she had someone to listen to her.  The\r\nCat seemed to think that there was enough of it now in sight, and\r\nno more of it appeared.\r\n\r\n  `I don't think they play at all fairly,' Alice began, in rather\r\na complaining tone, `and they all quarrel so dreadfully one can't\r\nhear oneself speak--and they don't seem to have any rules in\r\nparticular; at least, if there are, nobody attends to them--and\r\nyou've no idea how confusing it is all the things being alive;\r\nfor instance, there's the arch I've got to go through next\r\nwalking about at the other end of the ground--and I should have\r\ncroqueted the Queen's hedgehog just now, only it ran away when it\r\nsaw mine coming!'\r\n\r\n  `How do you like the Queen?' said the Cat in a low voice.\r\n\r\n  `Not at all,' said Alice:  `she's so extremely--'  Just then\r\nshe noticed that the Queen was close behind her, listening:  so\r\nshe went on, `--likely to win, that it's hardly worth while\r\nfinishing the game.'\r\n\r\n  The Queen smiled and passed on.\r\n\r\n  `Who ARE you talking to?' said the King, going up to Alice, and\r\nlooking at the Cat's head with great curiosity.\r\n\r\n  `It's a friend of mine--a Cheshire Cat,' said Alice:  `allow me\r\nto introduce it.'\r\n\r\n  `I don't like the look of it at all,' said the King:  `however,\r\nit may kiss my hand if it likes.'\r\n\r\n  `I'd rather not,' the Cat remarked.\r\n\r\n  `Don't be impertinent,' said the King, `and don't look at me\r\nlike that!'  He got behind Alice as he spoke.\r\n\r\n  `A cat may look at a king,' said Alice.  `I've read that in\r\nsome book, but I don't remember where.'\r\n\r\n  `Well, it must be removed,' said the King very decidedly, and\r\nhe called the Queen, who was passing at the moment, `My dear!  I\r\nwish you would have this cat removed!'\r\n\r\n  The Queen had only one way of settling all difficulties, great\r\nor small.  `Off with his head!' she said, without even looking\r\nround.\r\n\r\n  `I'll fetch the executioner myself,' said the King eagerly, and\r\nhe hurried off.\r\n\r\n  Alice thought she might as well go back, and see how the game\r\nwas going on, as she heard the Queen's voice in the distance,\r\nscreaming with passion.  She had already heard her sentence three\r\nof the players to be executed for having missed their turns, and\r\nshe did not like the look of things at all, as the game was in\r\nsuch confusion that she never knew whether it was her turn or\r\nnot.  So she went in search of her hedgehog.\r\n\r\n  The hedgehog was engaged in a fight with another hedgehog,\r\nwhich seemed to Alice an excellent opportunity for croqueting one\r\nof them with the other:  the only difficulty was, that her\r\nflamingo was gone across to the other side of the garden, where\r\nAlice could see it trying in a helpless sort of way to fly up\r\ninto a tree.\r\n\r\n  By the time she had caught the flamingo and brought it back,\r\nthe fight was over, and both the hedgehogs were out of sight:\r\n`but it doesn't matter much,' thought Alice, `as all the arches\r\nare gone from this side of the ground.'  So she tucked it away\r\nunder her arm, that it might not escape again, and went back for\r\na little more conversation with her friend.\r\n\r\n  When she got back to the Cheshire Cat, she was surprised to\r\nfind quite a large crowd collected round it:  there was a dispute\r\ngoing on between the executioner, the King, and the Queen, who\r\nwere all talking at once, while all the rest were quite silent,\r\nand looked very uncomfortable.\r\n\r\n  The moment Alice appeared, she was appealed to by all three to\r\nsettle the question, and they repeated their arguments to her,\r\nthough, as they all spoke at once, she found it very hard indeed\r\nto make out exactly what they said.\r\n\r\n  The executioner's argument was, that you couldn't cut off a\r\nhead unless there was a body to cut it off from:  that he had\r\nnever had to do such a thing before, and he wasn't going to begin\r\nat HIS time of life.\r\n\r\n  The King's argument was, that anything that had a head could be\r\nbeheaded, and that you weren't to talk nonsense.\r\n\r\n  The Queen's argument was, that if something wasn't done about\r\nit in less than no time she'd have everybody executed, all round.\r\n(It was this last remark that had made the whole party look so\r\ngrave and anxious.)\r\n\r\n  Alice could think of nothing else to say but `It belongs to the\r\nDuchess:  you'd better ask HER about it.'\r\n\r\n  `She's in prison,' the Queen said to the executioner:  `fetch\r\nher here.'  And the executioner went off like an arrow.\r\n\r\n   The Cat's head began fading away the moment he was gone, and,\r\nby the time he had come back with the Dutchess, it had entirely\r\ndisappeared; so the King and the executioner ran wildly up and\r\ndown looking for it, while the rest of the party went back to the game.\r\n\r\n\r\n\r\n                           CHAPTER IX\r\n\r\n                     The Mock Turtle's Story\r\n\r\n\r\n  `You can't think how glad I am to see you again, you dear old\r\nthing!' said the Duchess, as she tucked her arm affectionately\r\ninto Alice's, and they walked off together.\r\n\r\n  Alice was very glad to find her in such a pleasant temper, and\r\nthought to herself that perhaps it was only the pepper that had\r\nmade her so savage when they met in the kitchen.\r\n\r\n  `When I'M a Duchess,' she said to herself, (not in a very\r\nhopeful tone though), `I won't have any pepper in my kitchen AT\r\nALL.  Soup does very well without--Maybe it's always pepper that\r\nmakes people hot-tempered,' she went on, very much pleased at\r\nhaving found out a new kind of rule, `and vinegar that makes them\r\nsour--and camomile that makes them bitter--and--and barley-sugar\r\nand such things that make children sweet-tempered.  I only wish\r\npeople knew that:  then they wouldn't be so stingy about it, you\r\nknow--'\r\n\r\n  She had quite forgotten the Duchess by this time, and was a\r\nlittle startled when she heard her voice close to her ear.\r\n`You're thinking about something, my dear, and that makes you\r\nforget to talk.  I can't tell you just now what the moral of that\r\nis, but I shall remember it in a bit.'\r\n\r\n  `Perhaps it hasn't one,' Alice ventured to remark.\r\n\r\n  `Tut, tut, child!' said the Duchess.  `Everything's got a\r\nmoral, if only you can find it.'  And she squeezed herself up\r\ncloser to Alice's side as she spoke.\r\n\r\n  Alice did not much like keeping so close to her:  first,\r\nbecause the Duchess was VERY ugly; and secondly, because she was\r\nexactly the right height to rest her chin upon Alice's shoulder,\r\nand it was an uncomfortably sharp chin.  However, she did not\r\nlike to be rude, so she bore it as well as she could.\r\n\r\n  `The game's going on rather better now,' she said, by way of\r\nkeeping up the conversation a little.\r\n\r\n  `'Tis so,' said the Duchess:  `and the moral of that is--\"Oh,\r\n'tis love, 'tis love, that makes the world go round!\"'\r\n\r\n  `Somebody said,' Alice whispered, `that it's done by everybody\r\nminding their own business!'\r\n\r\n  `Ah, well!  It means much the same thing,' said the Duchess,\r\ndigging her sharp little chin into Alice's shoulder as she added,\r\n`and the moral of THAT is--\"Take care of the sense, and the\r\nsounds will take care of themselves.\"'\r\n\r\n  `How fond she is of finding morals in things!' Alice thought to\r\nherself.\r\n\r\n  `I dare say you're wondering why I don't put my arm round your\r\nwaist,' the Duchess said after a pause:  `the reason is, that I'm\r\ndoubtful about the temper of your flamingo.  Shall I try the\r\nexperiment?'\r\n\r\n  `HE might bite,' Alice cautiously replied, not feeling at all\r\nanxious to have the experiment tried.\r\n\r\n  `Very true,' said the Duchess:  `flamingoes and mustard both\r\nbite.  And the moral of that is--\"Birds of a feather flock\r\ntogether.\"'\r\n\r\n  `Only mustard isn't a bird,' Alice remarked.\r\n\r\n  `Right, as usual,' said the Duchess:  `what a clear way you\r\nhave of putting things!'\r\n\r\n  `It's a mineral, I THINK,' said Alice.\r\n\r\n  `Of course it is,' said the Duchess, who seemed ready to agree\r\nto everything that Alice said; `there's a large mustard-mine near\r\nhere.  And the moral of that is--\"The more there is of mine, the\r\nless there is of yours.\"'\r\n\r\n  `Oh, I know!' exclaimed Alice, who had not attended to this\r\nlast remark, `it's a vegetable.  It doesn't look like one, but it\r\nis.'\r\n\r\n  `I quite agree with you,' said the Duchess; `and the moral of\r\nthat is--\"Be what you would seem to be\"--or if you'd like it put\r\nmore simply--\"Never imagine yourself not to be otherwise than\r\nwhat it might appear to others that what you were or might have\r\nbeen was not otherwise than what you had been would have appeared\r\nto them to be otherwise.\"'\r\n\r\n  `I think I should understand that better,' Alice said very\r\npolitely, `if I had it written down:  but I can't quite follow it\r\nas you say it.'\r\n\r\n  `That's nothing to what I could say if I chose,' the Duchess\r\nreplied, in a pleased tone.\r\n\r\n  `Pray don't trouble yourself to say it any longer than that,'\r\nsaid Alice.\r\n\r\n  `Oh, don't talk about trouble!' said the Duchess.  `I make you\r\na present of everything I've said as yet.'\r\n\r\n  `A cheap sort of present!' thought Alice.  `I'm glad they don't\r\ngive birthday presents like that!'  But she did not venture to\r\nsay it out loud.\r\n\r\n  `Thinking again?' the Duchess asked, with another dig of her\r\nsharp little chin.\r\n\r\n  `I've a right to think,' said Alice sharply, for she was\r\nbeginning to feel a little worried.\r\n\r\n  `Just about as much right,' said the Duchess, `as pigs have to\r\nfly; and the m--'\r\n\r\n  But here, to Alice's great surprise, the Duchess's voice died\r\naway, even in the middle of her favourite word `moral,' and the\r\narm that was linked into hers began to tremble.  Alice looked up,\r\nand there stood the Queen in front of them, with her arms folded,\r\nfrowning like a thunderstorm.\r\n\r\n  `A fine day, your Majesty!' the Duchess began in a low, weak\r\nvoice.\r\n\r\n  `Now, I give you fair warning,' shouted the Queen, stamping on\r\nthe ground as she spoke; `either you or your head must be off,\r\nand that in about half no time!  Take your choice!'\r\n\r\n  The Duchess took her choice, and was gone in a moment.\r\n\r\n  `Let's go on with the game,' the Queen said to Alice; and Alice\r\nwas too much frightened to say a word, but slowly followed her\r\nback to the croquet-ground.\r\n\r\n  The other guests had taken advantage of the Queen's absence,\r\nand were resting in the shade:  however, the moment they saw her,\r\nthey hurried back to the game, the Queen merely remarking that a\r\nmoment's delay would cost them their lives.\r\n\r\n  All the time they were playing the Queen never left off\r\nquarrelling with the other players, and shouting `Off with his\r\nhead!' or `Off with her head!'  Those whom she sentenced were\r\ntaken into custody by the soldiers, who of course had to leave\r\noff being arches to do this, so that by the end of half an hour\r\nor so there were no arches left, and all the players, except the\r\nKing, the Queen, and Alice, were in custody and under sentence of\r\nexecution.\r\n\r\n  Then the Queen left off, quite out of breath, and said to\r\nAlice, `Have you seen the Mock Turtle yet?'\r\n\r\n  `No,' said Alice.  `I don't even know what a Mock Turtle is.'\r\n\r\n  `It's the thing Mock Turtle Soup is made from,' said the Queen.\r\n\r\n  `I never saw one, or heard of one,' said Alice.\r\n\r\n  `Come on, then,' said the Queen, `and he shall tell you his\r\nhistory,'\r\n\r\n  As they walked off together, Alice heard the King say in a low\r\nvoice, to the company generally, `You are all pardoned.'  `Come,\r\nTHAT'S a good thing!' she said to herself, for she had felt quite\r\nunhappy at the number of executions the Queen had ordered.\r\n\r\n  They very soon came upon a Gryphon, lying fast asleep in the\r\nsun.  (IF you don't know what a Gryphon is, look at the picture.)\r\n`Up, lazy thing!' said the Queen, `and take this young lady to\r\nsee the Mock Turtle, and to hear his history.  I must go back and\r\nsee after some executions I have ordered'; and she walked off,\r\nleaving Alice alone with the Gryphon.  Alice did not quite like\r\nthe look of the creature, but on the whole she thought it would\r\nbe quite as safe to stay with it as to go after that savage\r\nQueen:  so she waited.\r\n\r\n  The Gryphon sat up and rubbed its eyes:  then it watched the\r\nQueen till she was out of sight:  then it chuckled.  `What fun!'\r\nsaid the Gryphon, half to itself, half to Alice.\r\n\r\n  `What IS the fun?' said Alice.\r\n\r\n  `Why, SHE,' said the Gryphon.  `It's all her fancy, that:  they\r\nnever executes nobody, you know.  Come on!'\r\n\r\n  `Everybody says \"come on!\" here,' thought Alice, as she went\r\nslowly after it:  `I never was so ordered about in all my life,\r\nnever!'\r\n\r\n  They had not gone far before they saw the Mock Turtle in the\r\ndistance, sitting sad and lonely on a little ledge of rock, and,\r\nas they came nearer, Alice could hear him sighing as if his heart\r\nwould break.  She pitied him deeply.  `What is his sorrow?' she\r\nasked the Gryphon, and the Gryphon answered, very nearly in the\r\nsame words as before, `It's all his fancy, that:  he hasn't got\r\nno sorrow, you know.  Come on!'\r\n\r\n  So they went up to the Mock Turtle, who looked at them with\r\nlarge eyes full of tears, but said nothing.\r\n\r\n  `This here young lady,' said the Gryphon, `she wants for to\r\nknow your history, she do.'\r\n\r\n  `I'll tell it her,' said the Mock Turtle in a deep, hollow\r\ntone:  `sit down, both of you, and don't speak a word till I've\r\nfinished.'\r\n\r\n  So they sat down, and nobody spoke for some minutes.  Alice\r\nthought to herself, `I don't see how he can EVEN finish, if he\r\ndoesn't begin.'  But she waited patiently.\r\n\r\n  `Once,' said the Mock Turtle at last, with a deep sigh, `I was\r\na real Turtle.'\r\n\r\n  These words were followed by a very long silence, broken only\r\nby an occasional exclamation of `Hjckrrh!' from the Gryphon, and\r\nthe constant heavy sobbing of the Mock Turtle.  Alice was very\r\nnearly getting up and saying, `Thank you, sir, for your\r\ninteresting story,' but she could not help thinking there MUST be\r\nmore to come, so she sat still and said nothing.\r\n\r\n  `When we were little,' the Mock Turtle went on at last, more\r\ncalmly, though still sobbing a little now and then, `we went to\r\nschool in the sea.  The master was an old Turtle--we used to call\r\nhim Tortoise--'\r\n\r\n  `Why did you call him Tortoise, if he wasn't one?' Alice asked.\r\n\r\n  `We called him Tortoise because he taught us,' said the Mock\r\nTurtle angrily:  `really you are very dull!'\r\n\r\n  `You ought to be ashamed of yourself for asking such a simple\r\nquestion,' added the Gryphon; and then they both sat silent and\r\nlooked at poor Alice, who felt ready to sink into the earth.  At\r\nlast the Gryphon said to the Mock Turtle, `Drive on, old fellow!\r\nDon't be all day about it!' and he went on in these words:\r\n\r\n  `Yes, we went to school in the sea, though you mayn't believe\r\nit--'\r\n\r\n  `I never said I didn't!' interrupted Alice.\r\n\r\n  `You did,' said the Mock Turtle.\r\n\r\n  `Hold your tongue!' added the Gryphon, before Alice could speak\r\nagain.  The Mock Turtle went on.\r\n\r\n  `We had the best of educations--in fact, we went to school\r\nevery day--'\r\n\r\n  `I'VE been to a day-school, too,' said Alice; `you needn't be\r\nso proud as all that.'\r\n\r\n  `With extras?' asked the Mock Turtle a little anxiously.\r\n\r\n  `Yes,' said Alice, `we learned French and music.'\r\n\r\n  `And washing?' said the Mock Turtle.\r\n\r\n  `Certainly not!' said Alice indignantly.\r\n\r\n  `Ah! then yours wasn't a really good school,' said the Mock\r\nTurtle in a tone of great relief.  `Now at OURS they had at the\r\nend of the bill, \"French, music, AND WASHING--extra.\"'\r\n\r\n  `You couldn't have wanted it much,' said Alice; `living at the\r\nbottom of the sea.'\r\n\r\n  `I couldn't afford to learn it.' said the Mock Turtle with a\r\nsigh.  `I only took the regular course.'\r\n\r\n  `What was that?' inquired Alice.\r\n\r\n  `Reeling and Writhing, of course, to begin with,' the Mock\r\nTurtle replied; `and then the different branches of Arithmetic--\r\nAmbition, Distraction, Uglification, and Derision.'\r\n\r\n  `I never heard of \"Uglification,\"' Alice ventured to say.  `What\r\nis it?'\r\n\r\n  The Gryphon lifted up both its paws in surprise.  `What!  Never\r\nheard of uglifying!' it exclaimed.  `You know what to beautify\r\nis, I suppose?'\r\n\r\n  `Yes,' said Alice doubtfully:  `it means--to--make--anything--\r\nprettier.'\r\n\r\n  `Well, then,' the Gryphon went on, `if you don't know what to\r\nuglify is, you ARE a simpleton.'\r\n\r\n  Alice did not feel encouraged to ask any more questions about\r\nit, so she turned to the Mock Turtle, and said `What else had you\r\nto learn?'\r\n\r\n  `Well, there was Mystery,' the Mock Turtle replied, counting\r\noff the subjects on his flappers, `--Mystery, ancient and modern,\r\nwith Seaography:  then Drawling--the Drawling-master was an old\r\nconger-eel, that used to come once a week:  HE taught us\r\nDrawling, Stretching, and Fainting in Coils.'\r\n\r\n  `What was THAT like?' said Alice.\r\n\r\n  `Well, I can't show it you myself,' the Mock Turtle said:  `I'm\r\ntoo stiff.  And the Gryphon never learnt it.'\r\n\r\n  `Hadn't time,' said the Gryphon:  `I went to the Classics\r\nmaster, though.  He was an old crab, HE was.'\r\n\r\n  `I never went to him,' the Mock Turtle said with a sigh:  `he\r\ntaught Laughing and Grief, they used to say.'\r\n\r\n  `So he did, so he did,' said the Gryphon, sighing in his turn;\r\nand both creatures hid their faces in their paws.\r\n\r\n  `And how many hours a day did you do lessons?' said Alice, in a\r\nhurry to change the subject.\r\n\r\n  `Ten hours the first day,' said the Mock Turtle: `nine the\r\nnext, and so on.'\r\n\r\n  `What a curious plan!' exclaimed Alice.\r\n\r\n  `That's the reason they're called lessons,' the Gryphon\r\nremarked:  `because they lessen from day to day.'\r\n\r\n  This was quite a new idea to Alice, and she thought it over a\r\nlittle before she made her next remark.  `Then the eleventh day\r\nmust have been a holiday?'\r\n\r\n  `Of course it was,' said the Mock Turtle.\r\n\r\n  `And how did you manage on the twelfth?' Alice went on eagerly.\r\n\r\n  `That's enough about lessons,' the Gryphon interrupted in a\r\nvery decided tone:  `tell her something about the games now.'\r\n\r\n\r\n\r\n                            CHAPTER X\r\n\r\n                      The Lobster Quadrille\r\n\r\n\r\n  The Mock Turtle sighed deeply, and drew the back of one flapper\r\nacross his eyes.  He looked at Alice, and tried to speak, but for\r\na minute or two sobs choked his voice.  `Same as if he had a bone\r\nin his throat,' said the Gryphon:  and it set to work shaking him\r\nand punching him in the back.  At last the Mock Turtle recovered\r\nhis voice, and, with tears running down his cheeks, he went on\r\nagain:--\r\n\r\n  `You may not have lived much under the sea--' (`I haven't,'\r\nsaid Alice)--`and perhaps you were never even introduced to a lobster--'\r\n(Alice began to say `I once tasted--' but checked herself hastily,\r\nand said `No, never') `--so you can have no idea what a delightful\r\nthing a Lobster Quadrille is!'\r\n\r\n  `No, indeed,' said Alice.  `What sort of a dance is it?'\r\n\r\n  `Why,' said the Gryphon, `you first form into a line along the\r\nsea-shore--'\r\n\r\n  `Two lines!' cried the Mock Turtle.  `Seals, turtles, salmon,\r\nand so on; then, when you've cleared all the jelly-fish out of\r\nthe way--'\r\n\r\n  `THAT generally takes some time,' interrupted the Gryphon.\r\n\r\n  `--you advance twice--'\r\n\r\n  `Each with a lobster as a partner!' cried the Gryphon.\r\n\r\n  `Of course,' the Mock Turtle said:  `advance twice, set to\r\npartners--'\r\n\r\n  `--change lobsters, and retire in same order,' continued the\r\nGryphon.\r\n\r\n  `Then, you know,' the Mock Turtle went on, `you throw the--'\r\n\r\n  `The lobsters!' shouted the Gryphon, with a bound into the air.\r\n\r\n  `--as far out to sea as you can--'\r\n\r\n  `Swim after them!' screamed the Gryphon.\r\n\r\n  `Turn a somersault in the sea!' cried the Mock Turtle,\r\ncapering wildly about.\r\n\r\n  `Back to land again, and that's all the first figure,' said the\r\nMock Turtle, suddenly dropping his voice; and the two creatures,\r\nwho had been jumping about like mad things all this time, sat\r\ndown again very sadly and quietly, and looked at Alice.\r\n\r\n  `It must be a very pretty dance,' said Alice timidly.\r\n\r\n  `Would you like to see a little of it?' said the Mock Turtle.\r\n\r\n  `Very much indeed,' said Alice.\r\n\r\n  `Come, let's try the first figure!' said the Mock Turtle to the\r\nGryphon.  `We can do without lobsters, you know.  Which shall\r\nsing?'\r\n\r\n  `Oh, YOU sing,' said the Gryphon.  `I've forgotten the words.'\r\n\r\n  So they began solemnly dancing round and round Alice, every now\r\nand then treading on her toes when they passed too close, and\r\nwaving their forepaws to mark the time, while the Mock Turtle\r\nsang this, very slowly and sadly:--\r\n\r\n\r\n`\"Will you walk a little faster?\" said a whiting to a snail.\r\n\"There's a porpoise close behind us, and he's treading on my\r\n tail.\r\nSee how eagerly the lobsters and the turtles all advance!\r\nThey are waiting on the shingle--will you come and join the\r\ndance?\r\n\r\nWill you, won't you, will you, won't you, will you join the\r\ndance?\r\nWill you, won't you, will you, won't you, won't you join the\r\ndance?\r\n\r\n\r\n\"You can really have no notion how delightful it will be\r\nWhen they take us up and throw us, with the lobsters, out to\r\n                                                      sea!\"\r\nBut the snail replied \"Too far, too far!\" and gave a look\r\n                                                       askance--\r\nSaid he thanked the whiting kindly, but he would not join the\r\n   dance.\r\n    Would not, could not, would not, could not, would not join\r\n        the dance.\r\n    Would not, could not, would not, could not, could not join\r\n        the dance.\r\n\r\n`\"What matters it how far we go?\" his scaly friend replied.\r\n\"There is another shore, you know, upon the other side.\r\nThe further off from England the nearer is to France--\r\nThen turn not pale, beloved snail, but come and join the dance.\r\n\r\n    Will you, won't you, will you, won't you, will you join the\r\n         dance?\r\n    Will you, won't you, will you, won't you, won't you join the\r\n         dance?\"'\r\n\r\n\r\n\r\n  `Thank you, it's a very interesting dance to watch,' said\r\nAlice, feeling very glad that it was over at last:  `and I do so\r\nlike that curious song about the whiting!'\r\n\r\n  `Oh, as to the whiting,' said the Mock Turtle, `they--you've\r\nseen them, of course?'\r\n\r\n  `Yes,' said Alice, `I've often seen them at dinn--' she\r\nchecked herself hastily.\r\n\r\n  `I don't know where Dinn may be,' said the Mock Turtle, `but\r\nif you've seen them so often, of course you know what they're\r\nlike.'\r\n\r\n  `I believe so,' Alice replied thoughtfully.  `They have their\r\ntails in their mouths--and they're all over crumbs.'\r\n\r\n  `You're wrong about the crumbs,' said the Mock Turtle:\r\n`crumbs would all wash off in the sea.  But they HAVE their tails\r\nin their mouths; and the reason is--' here the Mock Turtle\r\nyawned and shut his eyes.--`Tell her about the reason and all\r\nthat,' he said to the Gryphon.\r\n\r\n  `The reason is,' said the Gryphon, `that they WOULD go with\r\nthe lobsters to the dance.  So they got thrown out to sea.  So\r\nthey had to fall a long way.  So they got their tails fast in\r\ntheir mouths.  So they couldn't get them out again.  That's all.'\r\n\r\n  `Thank you,' said Alice, `it's very interesting.  I never knew\r\nso much about a whiting before.'\r\n\r\n  `I can tell you more than that, if you like,' said the\r\nGryphon.  `Do you know why it's called a whiting?'\r\n\r\n  `I never thought about it,' said Alice.  `Why?'\r\n\r\n  `IT DOES THE BOOTS AND SHOES.' the Gryphon replied very\r\nsolemnly.\r\n\r\n  Alice was thoroughly puzzled.  `Does the boots and shoes!' she\r\nrepeated in a wondering tone.\r\n\r\n  `Why, what are YOUR shoes done with?' said the Gryphon.  `I\r\nmean, what makes them so shiny?'\r\n\r\n  Alice looked down at them, and considered a little before she\r\ngave her answer.  `They're done with blacking, I believe.'\r\n\r\n  `Boots and shoes under the sea,' the Gryphon went on in a deep\r\nvoice, `are done with a whiting.  Now you know.'\r\n\r\n  `And what are they made of?' Alice asked in a tone of great\r\ncuriosity.\r\n\r\n  `Soles and eels, of course,' the Gryphon replied rather\r\nimpatiently:  `any shrimp could have told you that.'\r\n\r\n  `If I'd been the whiting,' said Alice, whose thoughts were\r\nstill running on the song, `I'd have said to the porpoise, \"Keep\r\nback, please:  we don't want YOU with us!\"'\r\n\r\n  `They were obliged to have him with them,' the Mock Turtle\r\nsaid:  `no wise fish would go anywhere without a porpoise.'\r\n\r\n  `Wouldn't it really?' said Alice in a tone of great surprise.\r\n\r\n  `Of course not,' said the Mock Turtle:  `why, if a fish came\r\nto ME, and told me he was going a journey, I should say \"With\r\nwhat porpoise?\"'\r\n\r\n  `Don't you mean \"purpose\"?' said Alice.\r\n\r\n  `I mean what I say,' the Mock Turtle replied in an offended\r\ntone.  And the Gryphon added `Come, let's hear some of YOUR\r\nadventures.'\r\n\r\n  `I could tell you my adventures--beginning from this morning,'\r\nsaid Alice a little timidly:  `but it's no use going back to\r\nyesterday, because I was a different person then.'\r\n\r\n  `Explain all that,' said the Mock Turtle.\r\n\r\n  `No, no!  The adventures first,' said the Gryphon in an\r\nimpatient tone:  `explanations take such a dreadful time.'\r\n\r\n  So Alice began telling them her adventures from the time when\r\nshe first saw the White Rabbit.  She was a little nervous about\r\nit just at first, the two creatures got so close to her, one on\r\neach side, and opened their eyes and mouths so VERY wide, but she\r\ngained courage as she went on.  Her listeners were perfectly\r\nquiet till she got to the part about her repeating `YOU ARE OLD,\r\nFATHER WILLIAM,' to the Caterpillar, and the words all coming\r\ndifferent, and then the Mock Turtle drew a long breath, and said\r\n`That's very curious.'\r\n\r\n  `It's all about as curious as it can be,' said the Gryphon.\r\n\r\n  `It all came different!' the Mock Turtle repeated\r\nthoughtfully.  `I should like to hear her try and repeat\r\nsomething now.  Tell her to begin.'  He looked at the Gryphon as\r\nif he thought it had some kind of authority over Alice.\r\n\r\n  `Stand up and repeat \"'TIS THE VOICE OF THE SLUGGARD,\"' said\r\nthe Gryphon.\r\n\r\n  `How the creatures order one about, and make one repeat\r\nlessons!' thought Alice; `I might as well be at school at once.'\r\nHowever, she got up, and began to repeat it, but her head was so\r\nfull of the Lobster Quadrille, that she hardly knew what she was\r\nsaying, and the words came very queer indeed:--\r\n\r\n    `'Tis the voice of the Lobster; I heard him declare,\r\n    \"You have baked me too brown, I must sugar my hair.\"\r\n    As a duck with its eyelids, so he with his nose\r\n    Trims his belt and his buttons, and turns out his toes.'\r\n\r\n              [later editions continued as follows\r\n    When the sands are all dry, he is gay as a lark,\r\n    And will talk in contemptuous tones of the Shark,\r\n    But, when the tide rises and sharks are around,\r\n    His voice has a timid and tremulous sound.]\r\n\r\n  `That's different from what I used to say when I was a child,'\r\nsaid the Gryphon.\r\n\r\n  `Well, I never heard it before,' said the Mock Turtle; `but it\r\nsounds uncommon nonsense.'\r\n\r\n  Alice said nothing; she had sat down with her face in her\r\nhands, wondering if anything would EVER happen in a natural way\r\nagain.\r\n\r\n  `I should like to have it explained,' said the Mock Turtle.\r\n\r\n  `She can't explain it,' said the Gryphon hastily.  `Go on with\r\nthe next verse.'\r\n\r\n  `But about his toes?' the Mock Turtle persisted.  `How COULD\r\nhe turn them out with his nose, you know?'\r\n\r\n  `It's the first position in dancing.' Alice said; but was\r\ndreadfully puzzled by the whole thing, and longed to change the\r\nsubject.\r\n\r\n  `Go on with the next verse,' the Gryphon repeated impatiently:\r\n`it begins \"I passed by his garden.\"'\r\n\r\n  Alice did not dare to disobey, though she felt sure it would\r\nall come wrong, and she went on in a trembling voice:--\r\n\r\n    `I passed by his garden, and marked, with one eye,\r\n    How the Owl and the Panther were sharing a pie--'\r\n\r\n        [later editions continued as follows\r\n    The Panther took pie-crust, and gravy, and meat,\r\n    While the Owl had the dish as its share of the treat.\r\n    When the pie was all finished, the Owl, as a boon,\r\n    Was kindly permitted to pocket the spoon:\r\n    While the Panther received knife and fork with a growl,\r\n    And concluded the banquet--]\r\n\r\n  `What IS the use of repeating all that stuff,' the Mock Turtle\r\ninterrupted, `if you don't explain it as you go on?  It's by far\r\nthe most confusing thing I ever heard!'\r\n\r\n  `Yes, I think you'd better leave off,' said the Gryphon:  and\r\nAlice was only too glad to do so.\r\n\r\n  `Shall we try another figure of the Lobster Quadrille?' the\r\nGryphon went on.  `Or would you like the Mock Turtle to sing you\r\na song?'\r\n\r\n  `Oh, a song, please, if the Mock Turtle would be so kind,'\r\nAlice replied, so eagerly that the Gryphon said, in a rather\r\noffended tone, `Hm! No accounting for tastes!  Sing her \"Turtle\r\nSoup,\" will you, old fellow?'\r\n\r\n  The Mock Turtle sighed deeply, and began, in a voice sometimes\r\nchoked with sobs, to sing this:--\r\n\r\n\r\n    `Beautiful Soup, so rich and green,\r\n    Waiting in a hot tureen!\r\n    Who for such dainties would not stoop?\r\n    Soup of the evening, beautiful Soup!\r\n    Soup of the evening, beautiful Soup!\r\n        Beau--ootiful Soo--oop!\r\n        Beau--ootiful Soo--oop!\r\n    Soo--oop of the e--e--evening,\r\n        Beautiful, beautiful Soup!\r\n\r\n    `Beautiful Soup!  Who cares for fish,\r\n    Game, or any other dish?\r\n    Who would not give all else for two p\r\n    ennyworth only of beautiful Soup?\r\n    Pennyworth only of beautiful Soup?\r\n        Beau--ootiful Soo--oop!\r\n        Beau--ootiful Soo--oop!\r\n    Soo--oop of the e--e--evening,\r\n        Beautiful, beauti--FUL SOUP!'\r\n\r\n  `Chorus again!' cried the Gryphon, and the Mock Turtle had\r\njust begun to repeat it, when a cry of `The trial's beginning!'\r\nwas heard in the distance.\r\n\r\n  `Come on!' cried the Gryphon, and, taking Alice by the hand,\r\nit hurried off, without waiting for the end of the song.\r\n\r\n  `What trial is it?' Alice panted as she ran; but the Gryphon\r\nonly answered `Come on!' and ran the faster, while more and more\r\nfaintly came, carried on the breeze that followed them, the\r\nmelancholy words:--\r\n\r\n    `Soo--oop of the e--e--evening,\r\n        Beautiful, beautiful Soup!'\r\n\r\n\r\n\r\n                           CHAPTER XI\r\n\r\n                      Who Stole the Tarts?\r\n\r\n\r\n  The King and Queen of Hearts were seated on their throne when\r\nthey arrived, with a great crowd assembled about them--all sorts\r\nof little birds and beasts, as well as the whole pack of cards:\r\nthe Knave was standing before them, in chains, with a soldier on\r\neach side to guard him; and near the King was the White Rabbit,\r\nwith a trumpet in one hand, and a scroll of parchment in the\r\nother.  In the very middle of the court was a table, with a large\r\ndish of tarts upon it:  they looked so good, that it made Alice\r\nquite hungry to look at them--`I wish they'd get the trial done,'\r\nshe thought, `and hand round the refreshments!'  But there seemed\r\nto be no chance of this, so she began looking at everything about\r\nher, to pass away the time.\r\n\r\n  Alice had never been in a court of justice before, but she had\r\nread about them in books, and she was quite pleased to find that\r\nshe knew the name of nearly everything there.  `That's the\r\njudge,' she said to herself, `because of his great wig.'\r\n\r\n  The judge, by the way, was the King; and as he wore his crown\r\nover the wig, (look at the frontispiece if you want to see how he\r\ndid it,) he did not look at all comfortable, and it was certainly\r\nnot becoming.\r\n\r\n  `And that's the jury-box,' thought Alice, `and those twelve\r\ncreatures,' (she was obliged to say `creatures,' you see, because\r\nsome of them were animals, and some were birds,) `I suppose they\r\nare the jurors.'  She said this last word two or three times over\r\nto herself, being rather proud of it:  for she thought, and\r\nrightly too, that very few little girls of her age knew the\r\nmeaning of it at all.  However, `jury-men' would have done just\r\nas well.\r\n\r\n  The twelve jurors were all writing very busily on slates.\r\n`What are they doing?'  Alice whispered to the Gryphon.  `They\r\ncan't have anything to put down yet, before the trial's begun.'\r\n\r\n  `They're putting down their names,' the Gryphon whispered in\r\nreply, `for fear they should forget them before the end of the\r\ntrial.'\r\n\r\n  `Stupid things!' Alice began in a loud, indignant voice, but\r\nshe stopped hastily, for the White Rabbit cried out, `Silence in\r\nthe court!' and the King put on his spectacles and looked\r\nanxiously round, to make out who was talking.\r\n\r\n  Alice could see, as well as if she were looking over their\r\nshoulders, that all the jurors were writing down `stupid things!'\r\non their slates, and she could even make out that one of them\r\ndidn't know how to spell `stupid,' and that he had to ask his\r\nneighbour to tell him.  `A nice muddle their slates'll be in\r\nbefore the trial's over!' thought Alice.\r\n\r\n  One of the jurors had a pencil that squeaked.  This of course,\r\nAlice could not stand, and she went round the court and got\r\nbehind him, and very soon found an opportunity of taking it\r\naway.  She did it so quickly that the poor little juror (it was\r\nBill, the Lizard) could not make out at all what had become of\r\nit; so, after hunting all about for it, he was obliged to write\r\nwith one finger for the rest of the day; and this was of very\r\nlittle use, as it left no mark on the slate.\r\n\r\n  `Herald, read the accusation!' said the King.\r\n\r\n  On this the White Rabbit blew three blasts on the trumpet, and\r\nthen unrolled the parchment scroll, and read as follows:--\r\n\r\n    `The Queen of Hearts, she made some tarts,\r\n          All on a summer day:\r\n      The Knave of Hearts, he stole those tarts,\r\n          And took them quite away!'\r\n\r\n  `Consider your verdict,' the King said to the jury.\r\n\r\n  `Not yet, not yet!' the Rabbit hastily interrupted.  `There's\r\na great deal to come before that!'\r\n\r\n  `Call the first witness,' said the King; and the White Rabbit\r\nblew three blasts on the trumpet, and called out, `First\r\nwitness!'\r\n\r\n  The first witness was the Hatter.  He came in with a teacup in\r\none hand and a piece of bread-and-butter in the other.  `I beg\r\npardon, your Majesty,' he began, `for bringing these in:  but I\r\nhadn't quite finished my tea when I was sent for.'\r\n\r\n  `You ought to have finished,' said the King.  `When did you\r\nbegin?'\r\n\r\n  The Hatter looked at the March Hare, who had followed him into\r\nthe court, arm-in-arm with the Dormouse.  `Fourteenth of March, I\r\nthink it was,' he said.\r\n\r\n  `Fifteenth,' said the March Hare.\r\n\r\n  `Sixteenth,' added the Dormouse.\r\n\r\n  `Write that down,' the King said to the jury, and the jury\r\neagerly wrote down all three dates on their slates, and then\r\nadded them up, and reduced the answer to shillings and pence.\r\n\r\n  `Take off your hat,' the King said to the Hatter.\r\n\r\n  `It isn't mine,' said the Hatter.\r\n\r\n  `Stolen!' the King exclaimed, turning to the jury, who\r\ninstantly made a memorandum of the fact.\r\n\r\n  `I keep them to sell,' the Hatter added as an explanation;\r\n`I've none of my own.  I'm a hatter.'\r\n\r\n  Here the Queen put on her spectacles, and began staring at the\r\nHatter, who turned pale and fidgeted.\r\n\r\n  `Give your evidence,' said the King; `and don't be nervous, or\r\nI'll have you executed on the spot.'\r\n\r\n  This did not seem to encourage the witness at all:  he kept\r\nshifting from one foot to the other, looking uneasily at the\r\nQueen, and in his confusion he bit a large piece out of his\r\nteacup instead of the bread-and-butter.\r\n\r\n  Just at this moment Alice felt a very curious sensation, which\r\npuzzled her a good deal until she made out what it was:  she was\r\nbeginning to grow larger again, and she thought at first she\r\nwould get up and leave the court; but on second thoughts she\r\ndecided to remain where she was as long as there was room for\r\nher.\r\n\r\n  `I wish you wouldn't squeeze so.' said the Dormouse, who was\r\nsitting next to her.  `I can hardly breathe.'\r\n\r\n  `I can't help it,' said Alice very meekly:  `I'm growing.'\r\n\r\n  `You've no right to grow here,' said the Dormouse.\r\n\r\n  `Don't talk nonsense,' said Alice more boldly:  `you know\r\nyou're growing too.'\r\n\r\n  `Yes, but I grow at a reasonable pace,' said the Dormouse:\r\n`not in that ridiculous fashion.'  And he got up very sulkily\r\nand crossed over to the other side of the court.\r\n\r\n  All this time the Queen had never left off staring at the\r\nHatter, and, just as the Dormouse crossed the court, she said to\r\none of the officers of the court, `Bring me the list of the\r\nsingers in the last concert!' on which the wretched Hatter\r\ntrembled so, that he shook both his shoes off.\r\n\r\n  `Give your evidence,' the King repeated angrily, `or I'll have\r\nyou executed, whether you're nervous or not.'\r\n\r\n  `I'm a poor man, your Majesty,' the Hatter began, in a\r\ntrembling voice, `--and I hadn't begun my tea--not above a week\r\nor so--and what with the bread-and-butter getting so thin--and\r\nthe twinkling of the tea--'\r\n\r\n  `The twinkling of the what?' said the King.\r\n\r\n  `It began with the tea,' the Hatter replied.\r\n\r\n  `Of course twinkling begins with a T!' said the King sharply.\r\n`Do you take me for a dunce?  Go on!'\r\n\r\n  `I'm a poor man,' the Hatter went on, `and most things\r\ntwinkled after that--only the March Hare said--'\r\n\r\n  `I didn't!' the March Hare interrupted in a great hurry.\r\n\r\n  `You did!' said the Hatter.\r\n\r\n  `I deny it!' said the March Hare.\r\n\r\n  `He denies it,' said the King:  `leave out that part.'\r\n\r\n  `Well, at any rate, the Dormouse said--' the Hatter went on,\r\nlooking anxiously round to see if he would deny it too:  but the\r\nDormouse denied nothing, being fast asleep.\r\n\r\n  `After that,' continued the Hatter, `I cut some more bread-\r\nand-butter--'\r\n\r\n  `But what did the Dormouse say?' one of the jury asked.\r\n\r\n  `That I can't remember,' said the Hatter.\r\n\r\n  `You MUST remember,' remarked the King, `or I'll have you\r\nexecuted.'\r\n\r\n  The miserable Hatter dropped his teacup and bread-and-butter,\r\nand went down on one knee.  `I'm a poor man, your Majesty,' he\r\nbegan.\r\n\r\n  `You're a very poor speaker,' said the King.\r\n\r\n  Here one of the guinea-pigs cheered, and was immediately\r\nsuppressed by the officers of the court.  (As that is rather a\r\nhard word, I will just explain to you how it was done.  They had\r\na large canvas bag, which tied up at the mouth with strings:\r\ninto this they slipped the guinea-pig, head first, and then sat\r\nupon it.)\r\n\r\n  `I'm glad I've seen that done,' thought Alice.  `I've so often\r\nread in the newspapers, at the end of trials, \"There was some\r\nattempts at applause, which was immediately suppressed by the\r\nofficers of the court,\" and I never understood what it meant\r\ntill now.'\r\n\r\n  `If that's all you know about it, you may stand down,'\r\ncontinued the King.\r\n\r\n  `I can't go no lower,' said the Hatter:  `I'm on the floor, as\r\nit is.'\r\n\r\n  `Then you may SIT down,' the King replied.\r\n\r\n  Here the other guinea-pig cheered, and was suppressed.\r\n\r\n  `Come, that finished the guinea-pigs!' thought Alice.  `Now we\r\nshall get on better.'\r\n\r\n  `I'd rather finish my tea,' said the Hatter, with an anxious\r\nlook at the Queen, who was reading the list of singers.\r\n\r\n  `You may go,' said the King, and the Hatter hurriedly left the\r\ncourt, without even waiting to put his shoes on.\r\n\r\n  `--and just take his head off outside,' the Queen added to one\r\nof the officers:  but the Hatter was out of sight before the\r\nofficer could get to the door.\r\n\r\n  `Call the next witness!' said the King.\r\n\r\n  The next witness was the Duchess's cook.  She carried the\r\npepper-box in her hand, and Alice guessed who it was, even before\r\nshe got into the court, by the way the people near the door began\r\nsneezing all at once.\r\n\r\n  `Give your evidence,' said the King.\r\n\r\n  `Shan't,' said the cook.\r\n\r\n  The King looked anxiously at the White Rabbit, who said in a\r\nlow voice, `Your Majesty must cross-examine THIS witness.'\r\n\r\n  `Well, if I must, I must,' the King said, with a melancholy\r\nair, and, after folding his arms and frowning at the cook till\r\nhis eyes were nearly out of sight, he said in a deep voice, `What\r\nare tarts made of?'\r\n\r\n  `Pepper, mostly,' said the cook.\r\n\r\n  `Treacle,' said a sleepy voice behind her.\r\n\r\n  `Collar that Dormouse,' the Queen shrieked out.  `Behead that\r\nDormouse!  Turn that Dormouse out of court!  Suppress him!  Pinch\r\nhim!  Off with his whiskers!'\r\n\r\n  For some minutes the whole court was in confusion, getting the\r\nDormouse turned out, and, by the time they had settled down\r\nagain, the cook had disappeared.\r\n\r\n  `Never mind!' said the King, with an air of great relief.\r\n`Call the next witness.'  And he added in an undertone to the\r\nQueen, `Really, my dear, YOU must cross-examine the next witness.\r\nIt quite makes my forehead ache!'\r\n\r\n  Alice watched the White Rabbit as he fumbled over the list,\r\nfeeling very curious to see what the next witness would be like,\r\n`--for they haven't got much evidence YET,' she said to herself.\r\nImagine her surprise, when the White Rabbit read out, at the top\r\nof his shrill little voice, the name `Alice!'\r\n\r\n\r\n\r\n                           CHAPTER XII\r\n\r\n                        Alice's Evidence\r\n\r\n\r\n  `Here!' cried Alice, quite forgetting in the flurry of the\r\nmoment how large she had grown in the last few minutes, and she\r\njumped up in such a hurry that she tipped over the jury-box with\r\nthe edge of her skirt, upsetting all the jurymen on to the heads\r\nof the crowd below, and there they lay sprawling about, reminding\r\nher very much of a globe of goldfish she had accidentally upset\r\nthe week before.\r\n\r\n  `Oh, I BEG your pardon!' she exclaimed in a tone of great\r\ndismay, and began picking them up again as quickly as she could,\r\nfor the accident of the goldfish kept running in her head, and\r\nshe had a vague sort of idea that they must be collected at once\r\nand put back into the jury-box, or they would die.\r\n\r\n  `The trial cannot proceed,' said the King in a very grave\r\nvoice, `until all the jurymen are back in their proper places--\r\nALL,' he repeated with great emphasis, looking hard at Alice as\r\nhe said do.\r\n\r\n  Alice looked at the jury-box, and saw that, in her haste, she\r\nhad put the Lizard in head downwards, and the poor little thing\r\nwas waving its tail about in a melancholy way, being quite unable\r\nto move.  She soon got it out again, and put it right; `not that\r\nit signifies much,' she said to herself; `I should think it\r\nwould be QUITE as much use in the trial one way up as the other.'\r\n\r\n  As soon as the jury had a little recovered from the shock of\r\nbeing upset, and their slates and pencils had been found and\r\nhanded back to them, they set to work very diligently to write\r\nout a history of the accident, all except the Lizard, who seemed\r\ntoo much overcome to do anything but sit with its mouth open,\r\ngazing up into the roof of the court.\r\n\r\n  `What do you know about this business?' the King said to\r\nAlice.\r\n\r\n  `Nothing,' said Alice.\r\n\r\n  `Nothing WHATEVER?' persisted the King.\r\n\r\n  `Nothing whatever,' said Alice.\r\n\r\n  `That's very important,' the King said, turning to the jury.\r\nThey were just beginning to write this down on their slates, when\r\nthe White Rabbit interrupted:  `UNimportant, your Majesty means,\r\nof course,' he said in a very respectful tone, but frowning and\r\nmaking faces at him as he spoke.\r\n\r\n  `UNimportant, of course, I meant,' the King hastily said, and\r\nwent on to himself in an undertone, `important--unimportant--\r\nunimportant--important--' as if he were trying which word\r\nsounded best.\r\n\r\n  Some of the jury wrote it down `important,' and some\r\n`unimportant.'  Alice could see this, as she was near enough to\r\nlook over their slates; `but it doesn't matter a bit,' she\r\nthought to herself.\r\n\r\n  At this moment the King, who had been for some time busily\r\nwriting in his note-book, cackled out `Silence!' and read out\r\nfrom his book, `Rule Forty-two.  ALL PERSONS MORE THAN A MILE\r\nHIGH TO LEAVE THE COURT.'\r\n\r\n  Everybody looked at Alice.\r\n\r\n  `I'M not a mile high,' said Alice.\r\n\r\n  `You are,' said the King.\r\n\r\n  `Nearly two miles high,' added the Queen.\r\n\r\n  `Well, I shan't go, at any rate,' said Alice:  `besides,\r\nthat's not a regular rule:  you invented it just now.'\r\n\r\n  `It's the oldest rule in the book,' said the King.\r\n\r\n  `Then it ought to be Number One,' said Alice.\r\n\r\n  The King turned pale, and shut his note-book hastily.\r\n`Consider your verdict,' he said to the jury, in a low, trembling\r\nvoice.\r\n\r\n  `There's more evidence to come yet, please your Majesty,' said\r\nthe White Rabbit, jumping up in a great hurry; `this paper has\r\njust been picked up.'\r\n\r\n  `What's in it?' said the Queen.\r\n\r\n  `I haven't opened it yet,' said the White Rabbit, `but it seems\r\nto be a letter, written by the prisoner to--to somebody.'\r\n\r\n  `It must have been that,' said the King, `unless it was\r\nwritten to nobody, which isn't usual, you know.'\r\n\r\n  `Who is it directed to?' said one of the jurymen.\r\n\r\n  `It isn't directed at all,' said the White Rabbit; `in fact,\r\nthere's nothing written on the OUTSIDE.'  He unfolded the paper\r\nas he spoke, and added `It isn't a letter, after all:  it's a set\r\nof verses.'\r\n\r\n  `Are they in the prisoner's handwriting?' asked another of\r\nthey jurymen.\r\n\r\n  `No, they're not,' said the White Rabbit, `and that's the\r\nqueerest thing about it.'  (The jury all looked puzzled.)\r\n\r\n  `He must have imitated somebody else's hand,' said the King.\r\n(The jury all brightened up again.)\r\n\r\n  `Please your Majesty,' said the Knave, `I didn't write it, and\r\nthey can't prove I did:  there's no name signed at the end.'\r\n\r\n  `If you didn't sign it,' said the King, `that only makes the\r\nmatter worse.  You MUST have meant some mischief, or else you'd\r\nhave signed your name like an honest man.'\r\n\r\n  There was a general clapping of hands at this:  it was the\r\nfirst really clever thing the King had said that day.\r\n\r\n  `That PROVES his guilt,' said the Queen.\r\n\r\n  `It proves nothing of the sort!' said Alice.  `Why, you don't\r\neven know what they're about!'\r\n\r\n  `Read them,' said the King.\r\n\r\n  The White Rabbit put on his spectacles.  `Where shall I begin,\r\nplease your Majesty?' he asked.\r\n\r\n  `Begin at the beginning,' the King said gravely, `and go on\r\ntill you come to the end:  then stop.'\r\n\r\n  These were the verses the White Rabbit read:--\r\n\r\n        `They told me you had been to her,\r\n          And mentioned me to him:\r\n        She gave me a good character,\r\n          But said I could not swim.\r\n\r\n        He sent them word I had not gone\r\n          (We know it to be true):\r\n        If she should push the matter on,\r\n          What would become of you?\r\n\r\n        I gave her one, they gave him two,\r\n          You gave us three or more;\r\n        They all returned from him to you,\r\n          Though they were mine before.\r\n\r\n        If I or she should chance to be\r\n          Involved in this affair,\r\n        He trusts to you to set them free,\r\n          Exactly as we were.\r\n\r\n        My notion was that you had been\r\n          (Before she had this fit)\r\n        An obstacle that came between\r\n          Him, and ourselves, and it.\r\n\r\n        Don't let him know she liked them best,\r\n          For this must ever be\r\n        A secret, kept from all the rest,\r\n          Between yourself and me.'\r\n\r\n  `That's the most important piece of evidence we've heard yet,'\r\nsaid the King, rubbing his hands; `so now let the jury--'\r\n\r\n  `If any one of them can explain it,' said Alice, (she had\r\ngrown so large in the last few minutes that she wasn't a bit\r\nafraid of interrupting him,) `I'll give him sixpence.  _I_ don't\r\nbelieve there's an atom of meaning in it.'\r\n\r\n  The jury all wrote down on their slates, `SHE doesn't believe\r\nthere's an atom of meaning in it,' but none of them attempted to\r\nexplain the paper.\r\n\r\n  `If there's no meaning in it,' said the King, `that saves a\r\nworld of trouble, you know, as we needn't try to find any.  And\r\nyet I don't know,' he went on, spreading out the verses on his\r\nknee, and looking at them with one eye; `I seem to see some\r\nmeaning in them, after all.  \"--SAID I COULD NOT SWIM--\" you\r\ncan't swim, can you?' he added, turning to the Knave.\r\n\r\n  The Knave shook his head sadly.  `Do I look like it?' he said.\r\n(Which he certainly did NOT, being made entirely of cardboard.)\r\n\r\n  `All right, so far,' said the King, and he went on muttering\r\nover the verses to himself:  `\"WE KNOW IT TO BE TRUE--\" that's\r\nthe jury, of course-- \"I GAVE HER ONE, THEY GAVE HIM TWO--\" why,\r\nthat must be what he did with the tarts, you know--'\r\n\r\n  `But, it goes on \"THEY ALL RETURNED FROM HIM TO YOU,\"' said\r\nAlice.\r\n\r\n  `Why, there they are!' said the King triumphantly, pointing to\r\nthe tarts on the table.  `Nothing can be clearer than THAT.\r\nThen again--\"BEFORE SHE HAD THIS FIT--\"  you never had fits, my\r\ndear, I think?' he said to the Queen.\r\n\r\n  `Never!' said the Queen furiously, throwing an inkstand at the\r\nLizard as she spoke.  (The unfortunate little Bill had left off\r\nwriting on his slate with one finger, as he found it made no\r\nmark; but he now hastily began again, using the ink, that was\r\ntrickling down his face, as long as it lasted.)\r\n\r\n  `Then the words don't FIT you,' said the King, looking round\r\nthe court with a smile.  There was a dead silence.\r\n\r\n  `It's a pun!' the King added in an offended tone, and\r\neverybody laughed, `Let the jury consider their verdict,' the\r\nKing said, for about the twentieth time that day.\r\n\r\n  `No, no!' said the Queen.  `Sentence first--verdict afterwards.'\r\n\r\n  `Stuff and nonsense!' said Alice loudly.  `The idea of having\r\nthe sentence first!'\r\n\r\n  `Hold your tongue!' said the Queen, turning purple.\r\n\r\n  `I won't!' said Alice.\r\n\r\n  `Off with her head!' the Queen shouted at the top of her voice.\r\nNobody moved.\r\n\r\n  `Who cares for you?' said Alice, (she had grown to her full\r\nsize by this time.)  `You're nothing but a pack of cards!'\r\n\r\n  At this the whole pack rose up into the air, and came flying\r\ndown upon her:  she gave a little scream, half of fright and half\r\nof anger, and tried to beat them off, and found herself lying on\r\nthe bank, with her head in the lap of her sister, who was gently\r\nbrushing away some dead leaves that had fluttered down from the\r\ntrees upon her face.\r\n\r\n  `Wake up, Alice dear!' said her sister; `Why, what a long\r\nsleep you've had!'\r\n\r\n  `Oh, I've had such a curious dream!' said Alice, and she told\r\nher sister, as well as she could remember them, all these strange\r\nAdventures of hers that you have just been reading about; and\r\nwhen she had finished, her sister kissed her, and said, `It WAS a\r\ncurious dream, dear, certainly:  but now run in to your tea; it's\r\ngetting late.'  So Alice got up and ran off, thinking while she\r\nran, as well she might, what a wonderful dream it had been.\r\n\r\n  But her sister sat still just as she left her, leaning her\r\nhead on her hand, watching the setting sun, and thinking of\r\nlittle Alice and all her wonderful Adventures, till she too began\r\ndreaming after a fashion, and this was her dream:--\r\n\r\n  First, she dreamed of little Alice herself, and once again the\r\ntiny hands were clasped upon her knee, and the bright eager eyes\r\nwere looking up into hers--she could hear the very tones of her\r\nvoice, and see that queer little toss of her head to keep back\r\nthe wandering hair that WOULD always get into her eyes--and\r\nstill as she listened, or seemed to listen, the whole place\r\naround her became alive the strange creatures of her little\r\nsister's dream.\r\n\r\n  The long grass rustled at her feet as the White Rabbit hurried\r\nby--the frightened Mouse splashed his way through the\r\nneighbouring pool--she could hear the rattle of the teacups as\r\nthe March Hare and his friends shared their never-ending meal,\r\nand the shrill voice of the Queen ordering off her unfortunate\r\nguests to execution--once more the pig-baby was sneezing on the\r\nDuchess's knee, while plates and dishes crashed around it--once\r\nmore the shriek of the Gryphon, the squeaking of the Lizard's\r\nslate-pencil, and the choking of the suppressed guinea-pigs,\r\nfilled the air, mixed up with the distant sobs of the miserable\r\nMock Turtle.\r\n\r\n  So she sat on, with closed eyes, and half believed herself in\r\nWonderland, though she knew she had but to open them again, and\r\nall would change to dull reality--the grass would be only\r\nrustling in the wind, and the pool rippling to the waving of the\r\nreeds--the rattling teacups would change to tinkling sheep-\r\nbells, and the Queen's shrill cries to the voice of the shepherd\r\nboy--and the sneeze of the baby, the shriek of the Gryphon, and\r\nall thy other queer noises, would change (she knew) to the\r\nconfused clamour of the busy farm-yard--while the lowing of the\r\ncattle in the distance would take the place of the Mock Turtle's\r\nheavy sobs.\r\n\r\n  Lastly, she pictured to herself how this same little sister of\r\nhers would, in the after-time, be herself a grown woman; and how\r\nshe would keep, through all her riper years, the simple and\r\nloving heart of her childhood:  and how she would gather about\r\nher other little children, and make THEIR eyes bright and eager\r\nwith many a strange tale, perhaps even with the dream of\r\nWonderland of long ago:  and how she would feel with all their\r\nsimple sorrows, and find a pleasure in all their simple joys,\r\nremembering her own child-life, and the happy summer days.\r\n\r\n                             THE END\r\n\u001a"
  },
  {
    "path": "tests/testdata/asyoulik.txt",
    "content": "\tAS YOU LIKE IT\n\n\n\tDRAMATIS PERSONAE\n\n\nDUKE SENIOR\tliving in banishment.\n\nDUKE FREDERICK\this brother, an usurper of his dominions.\n\n\nAMIENS\t|\n\t|  lords attending on the banished duke.\nJAQUES\t|\n\n\nLE BEAU\ta courtier attending upon Frederick.\n\nCHARLES\twrestler to Frederick.\n\n\nOLIVER\t\t|\n\t\t|\nJAQUES (JAQUES DE BOYS:)  \t|  sons of Sir Rowland de Boys.\n\t\t|\nORLANDO\t\t|\n\n\nADAM\t|\n\t|  servants to Oliver.\nDENNIS\t|\n\n\nTOUCHSTONE\ta clown.\n\nSIR OLIVER MARTEXT\ta vicar.\n\n\nCORIN\t|\n\t|  shepherds.\nSILVIUS\t|\n\n\nWILLIAM\ta country fellow in love with Audrey.\n\n\tA person representing HYMEN. (HYMEN:)\n\nROSALIND\tdaughter to the banished duke.\n\nCELIA\tdaughter to Frederick.\n\nPHEBE\ta shepherdess.\n\nAUDREY\ta country wench.\n\n\tLords, pages, and attendants, &c.\n\t(Forester:)\n\t(A Lord:)\n\t(First Lord:)\n\t(Second Lord:)\n\t(First Page:)\n\t(Second Page:)\n\n\nSCENE\tOliver's house; Duke Frederick's court; and the\n\tForest of Arden.\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT I\n\n\n\nSCENE I\tOrchard of Oliver's house.\n\n\n\t[Enter ORLANDO and ADAM]\n\nORLANDO\tAs I remember, Adam, it was upon this fashion\n\tbequeathed me by will but poor a thousand crowns,\n\tand, as thou sayest, charged my brother, on his\n\tblessing, to breed me well: and there begins my\n\tsadness. My brother Jaques he keeps at school, and\n\treport speaks goldenly of his profit: for my part,\n\the keeps me rustically at home, or, to speak more\n\tproperly, stays me here at home unkept; for call you\n\tthat keeping for a gentleman of my birth, that\n\tdiffers not from the stalling of an ox? His horses\n\tare bred better; for, besides that they are fair\n\twith their feeding, they are taught their manage,\n\tand to that end riders dearly hired: but I, his\n\tbrother, gain nothing under him but growth; for the\n\twhich his animals on his dunghills are as much\n\tbound to him as I. Besides this nothing that he so\n\tplentifully gives me, the something that nature gave\n\tme his countenance seems to take from me: he lets\n\tme feed with his hinds, bars me the place of a\n\tbrother, and, as much as in him lies, mines my\n\tgentility with my education. This is it, Adam, that\n\tgrieves me; and the spirit of my father, which I\n\tthink is within me, begins to mutiny against this\n\tservitude: I will no longer endure it, though yet I\n\tknow no wise remedy how to avoid it.\n\nADAM\tYonder comes my master, your brother.\n\nORLANDO\tGo apart, Adam, and thou shalt hear how he will\n\tshake me up.\n\n\t[Enter OLIVER]\n\nOLIVER\tNow, sir! what make you here?\n\nORLANDO\tNothing: I am not taught to make any thing.\n\nOLIVER\tWhat mar you then, sir?\n\nORLANDO\tMarry, sir, I am helping you to mar that which God\n\tmade, a poor unworthy brother of yours, with idleness.\n\nOLIVER\tMarry, sir, be better employed, and be naught awhile.\n\nORLANDO\tShall I keep your hogs and eat husks with them?\n\tWhat prodigal portion have I spent, that I should\n\tcome to such penury?\n\nOLIVER\tKnow you where your are, sir?\n\nORLANDO\tO, sir, very well; here in your orchard.\n\nOLIVER\tKnow you before whom, sir?\n\nORLANDO\tAy, better than him I am before knows me. I know\n\tyou are my eldest brother; and, in the gentle\n\tcondition of blood, you should so know me. The\n\tcourtesy of nations allows you my better, in that\n\tyou are the first-born; but the same tradition\n\ttakes not away my blood, were there twenty brothers\n\tbetwixt us: I have as much of my father in me as\n\tyou; albeit, I confess, your coming before me is\n\tnearer to his reverence.\n\nOLIVER\tWhat, boy!\n\nORLANDO\tCome, come, elder brother, you are too young in this.\n\nOLIVER\tWilt thou lay hands on me, villain?\n\nORLANDO\tI am no villain; I am the youngest son of Sir\n\tRowland de Boys; he was my father, and he is thrice\n\ta villain that says such a father begot villains.\n\tWert thou not my brother, I would not take this hand\n\tfrom thy throat till this other had pulled out thy\n\ttongue for saying so: thou hast railed on thyself.\n\nADAM\tSweet masters, be patient: for your father's\n\tremembrance, be at accord.\n\nOLIVER\tLet me go, I say.\n\nORLANDO\tI will not, till I please: you shall hear me. My\n\tfather charged you in his will to give me good\n\teducation: you have trained me like a peasant,\n\tobscuring and hiding from me all gentleman-like\n\tqualities. The spirit of my father grows strong in\n\tme, and I will no longer endure it: therefore allow\n\tme such exercises as may become a gentleman, or\n\tgive me the poor allottery my father left me by\n\ttestament; with that I will go buy my fortunes.\n\nOLIVER\tAnd what wilt thou do? beg, when that is spent?\n\tWell, sir, get you in: I will not long be troubled\n\twith you; you shall have some part of your will: I\n\tpray you, leave me.\n\nORLANDO\tI will no further offend you than becomes me for my good.\n\nOLIVER\tGet you with him, you old dog.\n\nADAM\tIs 'old dog' my reward? Most true, I have lost my\n\tteeth in your service. God be with my old master!\n\the would not have spoke such a word.\n\n\t[Exeunt ORLANDO and ADAM]\n\nOLIVER\tIs it even so? begin you to grow upon me? I will\n\tphysic your rankness, and yet give no thousand\n\tcrowns neither. Holla, Dennis!\n\n\t[Enter DENNIS]\n\nDENNIS\tCalls your worship?\n\nOLIVER\tWas not Charles, the duke's wrestler, here to speak with me?\n\nDENNIS\tSo please you, he is here at the door and importunes\n\taccess to you.\n\nOLIVER\tCall him in.\n\n\t[Exit DENNIS]\n\n\t'Twill be a good way; and to-morrow the wrestling is.\n\n\t[Enter CHARLES]\n\nCHARLES\tGood morrow to your worship.\n\nOLIVER\tGood Monsieur Charles, what's the new news at the\n\tnew court?\n\nCHARLES\tThere's no news at the court, sir, but the old news:\n\tthat is, the old duke is banished by his younger\n\tbrother the new duke; and three or four loving lords\n\thave put themselves into voluntary exile with him,\n\twhose lands and revenues enrich the new duke;\n\ttherefore he gives them good leave to wander.\n\nOLIVER\tCan you tell if Rosalind, the duke's daughter, be\n\tbanished with her father?\n\nCHARLES\tO, no; for the duke's daughter, her cousin, so loves\n\ther, being ever from their cradles bred together,\n\tthat she would have followed her exile, or have died\n\tto stay behind her. She is at the court, and no\n\tless beloved of her uncle than his own daughter; and\n\tnever two ladies loved as they do.\n\nOLIVER\tWhere will the old duke live?\n\nCHARLES\tThey say he is already in the forest of Arden, and\n\ta many merry men with him; and there they live like\n\tthe old Robin Hood of England: they say many young\n\tgentlemen flock to him every day, and fleet the time\n\tcarelessly, as they did in the golden world.\n\nOLIVER\tWhat, you wrestle to-morrow before the new duke?\n\nCHARLES\tMarry, do I, sir; and I came to acquaint you with a\n\tmatter. I am given, sir, secretly to understand\n\tthat your younger brother Orlando hath a disposition\n\tto come in disguised against me to try a fall.\n\tTo-morrow, sir, I wrestle for my credit; and he that\n\tescapes me without some broken limb shall acquit him\n\twell. Your brother is but young and tender; and,\n\tfor your love, I would be loath to foil him, as I\n\tmust, for my own honour, if he come in: therefore,\n\tout of my love to you, I came hither to acquaint you\n\twithal, that either you might stay him from his\n\tintendment or brook such disgrace well as he shall\n\trun into, in that it is a thing of his own search\n\tand altogether against my will.\n\nOLIVER\tCharles, I thank thee for thy love to me, which\n\tthou shalt find I will most kindly requite. I had\n\tmyself notice of my brother's purpose herein and\n\thave by underhand means laboured to dissuade him from\n\tit, but he is resolute. I'll tell thee, Charles:\n\tit is the stubbornest young fellow of France, full\n\tof ambition, an envious emulator of every man's\n\tgood parts, a secret and villanous contriver against\n\tme his natural brother: therefore use thy\n\tdiscretion; I had as lief thou didst break his neck\n\tas his finger. And thou wert best look to't; for if\n\tthou dost him any slight disgrace or if he do not\n\tmightily grace himself on thee, he will practise\n\tagainst thee by poison, entrap thee by some\n\ttreacherous device and never leave thee till he\n\thath ta'en thy life by some indirect means or other;\n\tfor, I assure thee, and almost with tears I speak\n\tit, there is not one so young and so villanous this\n\tday living. I speak but brotherly of him; but\n\tshould I anatomize him to thee as he is, I must\n\tblush and weep and thou must look pale and wonder.\n\nCHARLES\tI am heartily glad I came hither to you. If he come\n\tto-morrow, I'll give him his payment: if ever he go\n\talone again, I'll never wrestle for prize more: and\n\tso God keep your worship!\n\nOLIVER\tFarewell, good Charles.\n\n\t[Exit CHARLES]\n\n\tNow will I stir this gamester: I hope I shall see\n\tan end of him; for my soul, yet I know not why,\n\thates nothing more than he. Yet he's gentle, never\n\tschooled and yet learned, full of noble device, of\n\tall sorts enchantingly beloved, and indeed so much\n\tin the heart of the world, and especially of my own\n\tpeople, who best know him, that I am altogether\n\tmisprised: but it shall not be so long; this\n\twrestler shall clear all: nothing remains but that\n\tI kindle the boy thither; which now I'll go about.\n\n\t[Exit]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT I\n\n\n\nSCENE II\tLawn before the Duke's palace.\n\n\n\t[Enter CELIA and ROSALIND]\n\nCELIA\tI pray thee, Rosalind, sweet my coz, be merry.\n\nROSALIND\tDear Celia, I show more mirth than I am mistress of;\n\tand would you yet I were merrier? Unless you could\n\tteach me to forget a banished father, you must not\n\tlearn me how to remember any extraordinary pleasure.\n\nCELIA\tHerein I see thou lovest me not with the full weight\n\tthat I love thee. If my uncle, thy banished father,\n\thad banished thy uncle, the duke my father, so thou\n\thadst been still with me, I could have taught my\n\tlove to take thy father for mine: so wouldst thou,\n\tif the truth of thy love to me were so righteously\n\ttempered as mine is to thee.\n\nROSALIND\tWell, I will forget the condition of my estate, to\n\trejoice in yours.\n\nCELIA\tYou know my father hath no child but I, nor none is\n\tlike to have: and, truly, when he dies, thou shalt\n\tbe his heir, for what he hath taken away from thy\n\tfather perforce, I will render thee again in\n\taffection; by mine honour, I will; and when I break\n\tthat oath, let me turn monster: therefore, my\n\tsweet Rose, my dear Rose, be merry.\n\nROSALIND\tFrom henceforth I will, coz, and devise sports. Let\n\tme see; what think you of falling in love?\n\nCELIA\tMarry, I prithee, do, to make sport withal: but\n\tlove no man in good earnest; nor no further in sport\n\tneither than with safety of a pure blush thou mayst\n\tin honour come off again.\n\nROSALIND\tWhat shall be our sport, then?\n\nCELIA\tLet us sit and mock the good housewife Fortune from\n\ther wheel, that her gifts may henceforth be bestowed equally.\n\nROSALIND\tI would we could do so, for her benefits are\n\tmightily misplaced, and the bountiful blind woman\n\tdoth most mistake in her gifts to women.\n\nCELIA\t'Tis true; for those that she makes fair she scarce\n\tmakes honest, and those that she makes honest she\n\tmakes very ill-favouredly.\n\nROSALIND\tNay, now thou goest from Fortune's office to\n\tNature's: Fortune reigns in gifts of the world,\n\tnot in the lineaments of Nature.\n\n\t[Enter TOUCHSTONE]\n\nCELIA\tNo? when Nature hath made a fair creature, may she\n\tnot by Fortune fall into the fire? Though Nature\n\thath given us wit to flout at Fortune, hath not\n\tFortune sent in this fool to cut off the argument?\n\nROSALIND\tIndeed, there is Fortune too hard for Nature, when\n\tFortune makes Nature's natural the cutter-off of\n\tNature's wit.\n\nCELIA\tPeradventure this is not Fortune's work neither, but\n\tNature's; who perceiveth our natural wits too dull\n\tto reason of such goddesses and hath sent this\n\tnatural for our whetstone; for always the dulness of\n\tthe fool is the whetstone of the wits. How now,\n\twit! whither wander you?\n\nTOUCHSTONE\tMistress, you must come away to your father.\n\nCELIA\tWere you made the messenger?\n\nTOUCHSTONE\tNo, by mine honour, but I was bid to come for you.\n\nROSALIND\tWhere learned you that oath, fool?\n\nTOUCHSTONE\tOf a certain knight that swore by his honour they\n\twere good pancakes and swore by his honour the\n\tmustard was naught: now I'll stand to it, the\n\tpancakes were naught and the mustard was good, and\n\tyet was not the knight forsworn.\n\nCELIA\tHow prove you that, in the great heap of your\n\tknowledge?\n\nROSALIND\tAy, marry, now unmuzzle your wisdom.\n\nTOUCHSTONE\tStand you both forth now: stroke your chins, and\n\tswear by your beards that I am a knave.\n\nCELIA\tBy our beards, if we had them, thou art.\n\nTOUCHSTONE\tBy my knavery, if I had it, then I were; but if you\n\tswear by that that is not, you are not forsworn: no\n\tmore was this knight swearing by his honour, for he\n\tnever had any; or if he had, he had sworn it away\n\tbefore ever he saw those pancakes or that mustard.\n\nCELIA\tPrithee, who is't that thou meanest?\n\nTOUCHSTONE\tOne that old Frederick, your father, loves.\n\nCELIA\tMy father's love is enough to honour him: enough!\n\tspeak no more of him; you'll be whipped for taxation\n\tone of these days.\n\nTOUCHSTONE\tThe more pity, that fools may not speak wisely what\n\twise men do foolishly.\n\nCELIA\tBy my troth, thou sayest true; for since the little\n\twit that fools have was silenced, the little foolery\n\tthat wise men have makes a great show. Here comes\n\tMonsieur Le Beau.\n\nROSALIND\tWith his mouth full of news.\n\nCELIA\tWhich he will put on us, as pigeons feed their young.\n\nROSALIND\tThen shall we be news-crammed.\n\nCELIA\tAll the better; we shall be the more marketable.\n\n\t[Enter LE BEAU]\n\n\tBon jour, Monsieur Le Beau: what's the news?\n\nLE BEAU\tFair princess, you have lost much good sport.\n\nCELIA\tSport! of what colour?\n\nLE BEAU\tWhat colour, madam! how shall I answer you?\n\nROSALIND\tAs wit and fortune will.\n\nTOUCHSTONE\tOr as the Destinies decree.\n\nCELIA\tWell said: that was laid on with a trowel.\n\nTOUCHSTONE\tNay, if I keep not my rank,--\n\nROSALIND\tThou losest thy old smell.\n\nLE BEAU\tYou amaze me, ladies: I would have told you of good\n\twrestling, which you have lost the sight of.\n\nROSALIND\tYou tell us the manner of the wrestling.\n\nLE BEAU\tI will tell you the beginning; and, if it please\n\tyour ladyships, you may see the end; for the best is\n\tyet to do; and here, where you are, they are coming\n\tto perform it.\n\nCELIA\tWell, the beginning, that is dead and buried.\n\nLE BEAU\tThere comes an old man and his three sons,--\n\nCELIA\tI could match this beginning with an old tale.\n\nLE BEAU\tThree proper young men, of excellent growth and presence.\n\nROSALIND\tWith bills on their necks, 'Be it known unto all men\n\tby these presents.'\n\nLE BEAU\tThe eldest of the three wrestled with Charles, the\n\tduke's wrestler; which Charles in a moment threw him\n\tand broke three of his ribs, that there is little\n\thope of life in him: so he served the second, and\n\tso the third. Yonder they lie; the poor old man,\n\ttheir father, making such pitiful dole over them\n\tthat all the beholders take his part with weeping.\n\nROSALIND\tAlas!\n\nTOUCHSTONE\tBut what is the sport, monsieur, that the ladies\n\thave lost?\n\nLE BEAU\tWhy, this that I speak of.\n\nTOUCHSTONE\tThus men may grow wiser every day: it is the first\n\ttime that ever I heard breaking of ribs was sport\n\tfor ladies.\n\nCELIA\tOr I, I promise thee.\n\nROSALIND\tBut is there any else longs to see this broken music\n\tin his sides? is there yet another dotes upon\n\trib-breaking? Shall we see this wrestling, cousin?\n\nLE BEAU\tYou must, if you stay here; for here is the place\n\tappointed for the wrestling, and they are ready to\n\tperform it.\n\nCELIA\tYonder, sure, they are coming: let us now stay and see it.\n\n\t[Flourish. Enter DUKE FREDERICK, Lords, ORLANDO,\n\tCHARLES, and Attendants]\n\nDUKE FREDERICK\tCome on: since the youth will not be entreated, his\n\town peril on his forwardness.\n\nROSALIND\tIs yonder the man?\n\nLE BEAU\tEven he, madam.\n\nCELIA\tAlas, he is too young! yet he looks successfully.\n\nDUKE FREDERICK\tHow now, daughter and cousin! are you crept hither\n\tto see the wrestling?\n\nROSALIND\tAy, my liege, so please you give us leave.\n\nDUKE FREDERICK\tYou will take little delight in it, I can tell you;\n\tthere is such odds in the man. In pity of the\n\tchallenger's youth I would fain dissuade him, but he\n\twill not be entreated. Speak to him, ladies; see if\n\tyou can move him.\n\nCELIA\tCall him hither, good Monsieur Le Beau.\n\nDUKE FREDERICK\tDo so: I'll not be by.\n\nLE BEAU\tMonsieur the challenger, the princesses call for you.\n\nORLANDO\tI attend them with all respect and duty.\n\nROSALIND\tYoung man, have you challenged Charles the wrestler?\n\nORLANDO\tNo, fair princess; he is the general challenger: I\n\tcome but in, as others do, to try with him the\n\tstrength of my youth.\n\nCELIA\tYoung gentleman, your spirits are too bold for your\n\tyears. You have seen cruel proof of this man's\n\tstrength: if you saw yourself with your eyes or\n\tknew yourself with your judgment, the fear of your\n\tadventure would counsel you to a more equal\n\tenterprise. We pray you, for your own sake, to\n\tembrace your own safety and give over this attempt.\n\nROSALIND\tDo, young sir; your reputation shall not therefore\n\tbe misprised: we will make it our suit to the duke\n\tthat the wrestling might not go forward.\n\nORLANDO\tI beseech you, punish me not with your hard\n\tthoughts; wherein I confess me much guilty, to deny\n\tso fair and excellent ladies any thing. But let\n\tyour fair eyes and gentle wishes go with me to my\n\ttrial: wherein if I be foiled, there is but one\n\tshamed that was never gracious; if killed, but one\n\tdead that was willing to be so: I shall do my\n\tfriends no wrong, for I have none to lament me, the\n\tworld no injury, for in it I have nothing; only in\n\tthe world I fill up a place, which may be better\n\tsupplied when I have made it empty.\n\nROSALIND\tThe little strength that I have, I would it were with you.\n\nCELIA\tAnd mine, to eke out hers.\n\nROSALIND\tFare you well: pray heaven I be deceived in you!\n\nCELIA\tYour heart's desires be with you!\n\nCHARLES\tCome, where is this young gallant that is so\n\tdesirous to lie with his mother earth?\n\nORLANDO\tReady, sir; but his will hath in it a more modest working.\n\nDUKE FREDERICK\tYou shall try but one fall.\n\nCHARLES\tNo, I warrant your grace, you shall not entreat him\n\tto a second, that have so mightily persuaded him\n\tfrom a first.\n\nORLANDO\tAn you mean to mock me after, you should not have\n\tmocked me before: but come your ways.\n\nROSALIND\tNow Hercules be thy speed, young man!\n\nCELIA\tI would I were invisible, to catch the strong\n\tfellow by the leg.\n\n\t[They wrestle]\n\nROSALIND\tO excellent young man!\n\nCELIA\tIf I had a thunderbolt in mine eye, I can tell who\n\tshould down.\n\n\t[Shout. CHARLES is thrown]\n\nDUKE FREDERICK\tNo more, no more.\n\nORLANDO\tYes, I beseech your grace: I am not yet well breathed.\n\nDUKE FREDERICK\tHow dost thou, Charles?\n\nLE BEAU\tHe cannot speak, my lord.\n\nDUKE FREDERICK\tBear him away. What is thy name, young man?\n\nORLANDO\tOrlando, my liege; the youngest son of Sir Rowland de Boys.\n\nDUKE FREDERICK\tI would thou hadst been son to some man else:\n\tThe world esteem'd thy father honourable,\n\tBut I did find him still mine enemy:\n\tThou shouldst have better pleased me with this deed,\n\tHadst thou descended from another house.\n\tBut fare thee well; thou art a gallant youth:\n\tI would thou hadst told me of another father.\n\n\t[Exeunt DUKE FREDERICK, train, and LE BEAU]\n\nCELIA\tWere I my father, coz, would I do this?\n\nORLANDO\tI am more proud to be Sir Rowland's son,\n\tHis youngest son; and would not change that calling,\n\tTo be adopted heir to Frederick.\n\nROSALIND\tMy father loved Sir Rowland as his soul,\n\tAnd all the world was of my father's mind:\n\tHad I before known this young man his son,\n\tI should have given him tears unto entreaties,\n\tEre he should thus have ventured.\n\nCELIA\tGentle cousin,\n\tLet us go thank him and encourage him:\n\tMy father's rough and envious disposition\n\tSticks me at heart. Sir, you have well deserved:\n\tIf you do keep your promises in love\n\tBut justly, as you have exceeded all promise,\n\tYour mistress shall be happy.\n\nROSALIND\tGentleman,\n\n\t[Giving him a chain from her neck]\n\n\tWear this for me, one out of suits with fortune,\n\tThat could give more, but that her hand lacks means.\n\tShall we go, coz?\n\nCELIA\t                  Ay. Fare you well, fair gentleman.\n\nORLANDO\tCan I not say, I thank you? My better parts\n\tAre all thrown down, and that which here stands up\n\tIs but a quintain, a mere lifeless block.\n\nROSALIND\tHe calls us back: my pride fell with my fortunes;\n\tI'll ask him what he would. Did you call, sir?\n\tSir, you have wrestled well and overthrown\n\tMore than your enemies.\n\nCELIA\tWill you go, coz?\n\nROSALIND\tHave with you. Fare you well.\n\n\t[Exeunt ROSALIND and CELIA]\n\nORLANDO\tWhat passion hangs these weights upon my tongue?\n\tI cannot speak to her, yet she urged conference.\n\tO poor Orlando, thou art overthrown!\n\tOr Charles or something weaker masters thee.\n\n\t[Re-enter LE BEAU]\n\nLE BEAU\tGood sir, I do in friendship counsel you\n\tTo leave this place. Albeit you have deserved\n\tHigh commendation, true applause and love,\n\tYet such is now the duke's condition\n\tThat he misconstrues all that you have done.\n\tThe duke is humorous; what he is indeed,\n\tMore suits you to conceive than I to speak of.\n\nORLANDO\tI thank you, sir: and, pray you, tell me this:\n\tWhich of the two was daughter of the duke\n\tThat here was at the wrestling?\n\nLE BEAU\tNeither his daughter, if we judge by manners;\n\tBut yet indeed the lesser is his daughter\n\tThe other is daughter to the banish'd duke,\n\tAnd here detain'd by her usurping uncle,\n\tTo keep his daughter company; whose loves\n\tAre dearer than the natural bond of sisters.\n\tBut I can tell you that of late this duke\n\tHath ta'en displeasure 'gainst his gentle niece,\n\tGrounded upon no other argument\n\tBut that the people praise her for her virtues\n\tAnd pity her for her good father's sake;\n\tAnd, on my life, his malice 'gainst the lady\n\tWill suddenly break forth. Sir, fare you well:\n\tHereafter, in a better world than this,\n\tI shall desire more love and knowledge of you.\n\nORLANDO\tI rest much bounden to you: fare you well.\n\n\t[Exit LE BEAU]\n\n\tThus must I from the smoke into the smother;\n\tFrom tyrant duke unto a tyrant brother:\n\tBut heavenly Rosalind!\n\n\t[Exit]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT I\n\n\n\nSCENE III\tA room in the palace.\n\n\n\t[Enter CELIA and ROSALIND]\n\nCELIA\tWhy, cousin! why, Rosalind! Cupid have mercy! not a word?\n\nROSALIND\tNot one to throw at a dog.\n\nCELIA\tNo, thy words are too precious to be cast away upon\n\tcurs; throw some of them at me; come, lame me with reasons.\n\nROSALIND\tThen there were two cousins laid up; when the one\n\tshould be lamed with reasons and the other mad\n\twithout any.\n\nCELIA\tBut is all this for your father?\n\nROSALIND\tNo, some of it is for my child's father. O, how\n\tfull of briers is this working-day world!\n\nCELIA\tThey are but burs, cousin, thrown upon thee in\n\tholiday foolery: if we walk not in the trodden\n\tpaths our very petticoats will catch them.\n\nROSALIND\tI could shake them off my coat: these burs are in my heart.\n\nCELIA\tHem them away.\n\nROSALIND\tI would try, if I could cry 'hem' and have him.\n\nCELIA\tCome, come, wrestle with thy affections.\n\nROSALIND\tO, they take the part of a better wrestler than myself!\n\nCELIA\tO, a good wish upon you! you will try in time, in\n\tdespite of a fall. But, turning these jests out of\n\tservice, let us talk in good earnest: is it\n\tpossible, on such a sudden, you should fall into so\n\tstrong a liking with old Sir Rowland's youngest son?\n\nROSALIND\tThe duke my father loved his father dearly.\n\nCELIA\tDoth it therefore ensue that you should love his son\n\tdearly? By this kind of chase, I should hate him,\n\tfor my father hated his father dearly; yet I hate\n\tnot Orlando.\n\nROSALIND\tNo, faith, hate him not, for my sake.\n\nCELIA\tWhy should I not? doth he not deserve well?\n\nROSALIND\tLet me love him for that, and do you love him\n\tbecause I do. Look, here comes the duke.\n\nCELIA\tWith his eyes full of anger.\n\n\t[Enter DUKE FREDERICK, with Lords]\n\nDUKE FREDERICK\tMistress, dispatch you with your safest haste\n\tAnd get you from our court.\n\nROSALIND\tMe, uncle?\n\nDUKE FREDERICK\tYou, cousin\n\tWithin these ten days if that thou be'st found\n\tSo near our public court as twenty miles,\n\tThou diest for it.\n\nROSALIND\t                  I do beseech your grace,\n\tLet me the knowledge of my fault bear with me:\n\tIf with myself I hold intelligence\n\tOr have acquaintance with mine own desires,\n\tIf that I do not dream or be not frantic,--\n\tAs I do trust I am not--then, dear uncle,\n\tNever so much as in a thought unborn\n\tDid I offend your highness.\n\nDUKE FREDERICK\tThus do all traitors:\n\tIf their purgation did consist in words,\n\tThey are as innocent as grace itself:\n\tLet it suffice thee that I trust thee not.\n\nROSALIND\tYet your mistrust cannot make me a traitor:\n\tTell me whereon the likelihood depends.\n\nDUKE FREDERICK\tThou art thy father's daughter; there's enough.\n\nROSALIND\tSo was I when your highness took his dukedom;\n\tSo was I when your highness banish'd him:\n\tTreason is not inherited, my lord;\n\tOr, if we did derive it from our friends,\n\tWhat's that to me? my father was no traitor:\n\tThen, good my liege, mistake me not so much\n\tTo think my poverty is treacherous.\n\nCELIA\tDear sovereign, hear me speak.\n\nDUKE FREDERICK\tAy, Celia; we stay'd her for your sake,\n\tElse had she with her father ranged along.\n\nCELIA\tI did not then entreat to have her stay;\n\tIt was your pleasure and your own remorse:\n\tI was too young that time to value her;\n\tBut now I know her: if she be a traitor,\n\tWhy so am I; we still have slept together,\n\tRose at an instant, learn'd, play'd, eat together,\n\tAnd wheresoever we went, like Juno's swans,\n\tStill we went coupled and inseparable.\n\nDUKE FREDERICK\tShe is too subtle for thee; and her smoothness,\n\tHer very silence and her patience\n\tSpeak to the people, and they pity her.\n\tThou art a fool: she robs thee of thy name;\n\tAnd thou wilt show more bright and seem more virtuous\n\tWhen she is gone. Then open not thy lips:\n\tFirm and irrevocable is my doom\n\tWhich I have pass'd upon her; she is banish'd.\n\nCELIA\tPronounce that sentence then on me, my liege:\n\tI cannot live out of her company.\n\nDUKE FREDERICK\tYou are a fool. You, niece, provide yourself:\n\tIf you outstay the time, upon mine honour,\n\tAnd in the greatness of my word, you die.\n\n\t[Exeunt DUKE FREDERICK and Lords]\n\nCELIA\tO my poor Rosalind, whither wilt thou go?\n\tWilt thou change fathers? I will give thee mine.\n\tI charge thee, be not thou more grieved than I am.\n\nROSALIND\tI have more cause.\n\nCELIA\t                  Thou hast not, cousin;\n\tPrithee be cheerful: know'st thou not, the duke\n\tHath banish'd me, his daughter?\n\nROSALIND\tThat he hath not.\n\nCELIA\tNo, hath not? Rosalind lacks then the love\n\tWhich teacheth thee that thou and I am one:\n\tShall we be sunder'd? shall we part, sweet girl?\n\tNo: let my father seek another heir.\n\tTherefore devise with me how we may fly,\n\tWhither to go and what to bear with us;\n\tAnd do not seek to take your change upon you,\n\tTo bear your griefs yourself and leave me out;\n\tFor, by this heaven, now at our sorrows pale,\n\tSay what thou canst, I'll go along with thee.\n\nROSALIND\tWhy, whither shall we go?\n\nCELIA\tTo seek my uncle in the forest of Arden.\n\nROSALIND\tAlas, what danger will it be to us,\n\tMaids as we are, to travel forth so far!\n\tBeauty provoketh thieves sooner than gold.\n\nCELIA\tI'll put myself in poor and mean attire\n\tAnd with a kind of umber smirch my face;\n\tThe like do you: so shall we pass along\n\tAnd never stir assailants.\n\nROSALIND\tWere it not better,\n\tBecause that I am more than common tall,\n\tThat I did suit me all points like a man?\n\tA gallant curtle-axe upon my thigh,\n\tA boar-spear in my hand; and--in my heart\n\tLie there what hidden woman's fear there will--\n\tWe'll have a swashing and a martial outside,\n\tAs many other mannish cowards have\n\tThat do outface it with their semblances.\n\nCELIA\tWhat shall I call thee when thou art a man?\n\nROSALIND\tI'll have no worse a name than Jove's own page;\n\tAnd therefore look you call me Ganymede.\n\tBut what will you be call'd?\n\nCELIA\tSomething that hath a reference to my state\n\tNo longer Celia, but Aliena.\n\nROSALIND\tBut, cousin, what if we assay'd to steal\n\tThe clownish fool out of your father's court?\n\tWould he not be a comfort to our travel?\n\nCELIA\tHe'll go along o'er the wide world with me;\n\tLeave me alone to woo him. Let's away,\n\tAnd get our jewels and our wealth together,\n\tDevise the fittest time and safest way\n\tTo hide us from pursuit that will be made\n\tAfter my flight. Now go we in content\n\tTo liberty and not to banishment.\n\n\t[Exeunt]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT II\n\n\n\nSCENE I\tThe Forest of Arden.\n\n\n\t[Enter DUKE SENIOR, AMIENS, and two or three Lords,\n\tlike foresters]\n\nDUKE SENIOR\tNow, my co-mates and brothers in exile,\n\tHath not old custom made this life more sweet\n\tThan that of painted pomp? Are not these woods\n\tMore free from peril than the envious court?\n\tHere feel we but the penalty of Adam,\n\tThe seasons' difference, as the icy fang\n\tAnd churlish chiding of the winter's wind,\n\tWhich, when it bites and blows upon my body,\n\tEven till I shrink with cold, I smile and say\n\t'This is no flattery: these are counsellors\n\tThat feelingly persuade me what I am.'\n\tSweet are the uses of adversity,\n\tWhich, like the toad, ugly and venomous,\n\tWears yet a precious jewel in his head;\n\tAnd this our life exempt from public haunt\n\tFinds tongues in trees, books in the running brooks,\n\tSermons in stones and good in every thing.\n\tI would not change it.\n\nAMIENS\tHappy is your grace,\n\tThat can translate the stubbornness of fortune\n\tInto so quiet and so sweet a style.\n\nDUKE SENIOR\tCome, shall we go and kill us venison?\n\tAnd yet it irks me the poor dappled fools,\n\tBeing native burghers of this desert city,\n\tShould in their own confines with forked heads\n\tHave their round haunches gored.\n\nFirst Lord\tIndeed, my lord,\n\tThe melancholy Jaques grieves at that,\n\tAnd, in that kind, swears you do more usurp\n\tThan doth your brother that hath banish'd you.\n\tTo-day my Lord of Amiens and myself\n\tDid steal behind him as he lay along\n\tUnder an oak whose antique root peeps out\n\tUpon the brook that brawls along this wood:\n\tTo the which place a poor sequester'd stag,\n\tThat from the hunter's aim had ta'en a hurt,\n\tDid come to languish, and indeed, my lord,\n\tThe wretched animal heaved forth such groans\n\tThat their discharge did stretch his leathern coat\n\tAlmost to bursting, and the big round tears\n\tCoursed one another down his innocent nose\n\tIn piteous chase; and thus the hairy fool\n\tMuch marked of the melancholy Jaques,\n\tStood on the extremest verge of the swift brook,\n\tAugmenting it with tears.\n\nDUKE SENIOR\tBut what said Jaques?\n\tDid he not moralize this spectacle?\n\nFirst Lord\tO, yes, into a thousand similes.\n\tFirst, for his weeping into the needless stream;\n\t'Poor deer,' quoth he, 'thou makest a testament\n\tAs worldlings do, giving thy sum of more\n\tTo that which had too much:' then, being there alone,\n\tLeft and abandon'd of his velvet friends,\n\t''Tis right:' quoth he; 'thus misery doth part\n\tThe flux of company:' anon a careless herd,\n\tFull of the pasture, jumps along by him\n\tAnd never stays to greet him; 'Ay' quoth Jaques,\n\t'Sweep on, you fat and greasy citizens;\n\t'Tis just the fashion: wherefore do you look\n\tUpon that poor and broken bankrupt there?'\n\tThus most invectively he pierceth through\n\tThe body of the country, city, court,\n\tYea, and of this our life, swearing that we\n\tAre mere usurpers, tyrants and what's worse,\n\tTo fright the animals and to kill them up\n\tIn their assign'd and native dwelling-place.\n\nDUKE SENIOR\tAnd did you leave him in this contemplation?\n\nSecond Lord\tWe did, my lord, weeping and commenting\n\tUpon the sobbing deer.\n\nDUKE SENIOR\tShow me the place:\n\tI love to cope him in these sullen fits,\n\tFor then he's full of matter.\n\nFirst Lord\tI'll bring you to him straight.\n\n\t[Exeunt]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT II\n\n\n\nSCENE II\tA room in the palace.\n\n\n\t[Enter DUKE FREDERICK, with Lords]\n\nDUKE FREDERICK\tCan it be possible that no man saw them?\n\tIt cannot be: some villains of my court\n\tAre of consent and sufferance in this.\n\nFirst Lord\tI cannot hear of any that did see her.\n\tThe ladies, her attendants of her chamber,\n\tSaw her abed, and in the morning early\n\tThey found the bed untreasured of their mistress.\n\nSecond Lord\tMy lord, the roynish clown, at whom so oft\n\tYour grace was wont to laugh, is also missing.\n\tHisperia, the princess' gentlewoman,\n\tConfesses that she secretly o'erheard\n\tYour daughter and her cousin much commend\n\tThe parts and graces of the wrestler\n\tThat did but lately foil the sinewy Charles;\n\tAnd she believes, wherever they are gone,\n\tThat youth is surely in their company.\n\nDUKE FREDERICK\tSend to his brother; fetch that gallant hither;\n\tIf he be absent, bring his brother to me;\n\tI'll make him find him: do this suddenly,\n\tAnd let not search and inquisition quail\n\tTo bring again these foolish runaways.\n\n\t[Exeunt]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT II\n\n\n\nSCENE III\tBefore OLIVER'S house.\n\n\n\t[Enter ORLANDO and ADAM, meeting]\n\nORLANDO\tWho's there?\n\nADAM\tWhat, my young master? O, my gentle master!\n\tO my sweet master! O you memory\n\tOf old Sir Rowland! why, what make you here?\n\tWhy are you virtuous? why do people love you?\n\tAnd wherefore are you gentle, strong and valiant?\n\tWhy would you be so fond to overcome\n\tThe bonny priser of the humorous duke?\n\tYour praise is come too swiftly home before you.\n\tKnow you not, master, to some kind of men\n\tTheir graces serve them but as enemies?\n\tNo more do yours: your virtues, gentle master,\n\tAre sanctified and holy traitors to you.\n\tO, what a world is this, when what is comely\n\tEnvenoms him that bears it!\n\nORLANDO\tWhy, what's the matter?\n\nADAM\tO unhappy youth!\n\tCome not within these doors; within this roof\n\tThe enemy of all your graces lives:\n\tYour brother--no, no brother; yet the son--\n\tYet not the son, I will not call him son\n\tOf him I was about to call his father--\n\tHath heard your praises, and this night he means\n\tTo burn the lodging where you use to lie\n\tAnd you within it: if he fail of that,\n\tHe will have other means to cut you off.\n\tI overheard him and his practises.\n\tThis is no place; this house is but a butchery:\n\tAbhor it, fear it, do not enter it.\n\nORLANDO\tWhy, whither, Adam, wouldst thou have me go?\n\nADAM\tNo matter whither, so you come not here.\n\nORLANDO\tWhat, wouldst thou have me go and beg my food?\n\tOr with a base and boisterous sword enforce\n\tA thievish living on the common road?\n\tThis I must do, or know not what to do:\n\tYet this I will not do, do how I can;\n\tI rather will subject me to the malice\n\tOf a diverted blood and bloody brother.\n\nADAM\tBut do not so. I have five hundred crowns,\n\tThe thrifty hire I saved under your father,\n\tWhich I did store to be my foster-nurse\n\tWhen service should in my old limbs lie lame\n\tAnd unregarded age in corners thrown:\n\tTake that, and He that doth the ravens feed,\n\tYea, providently caters for the sparrow,\n\tBe comfort to my age! Here is the gold;\n\tAnd all this I give you. Let me be your servant:\n\tThough I look old, yet I am strong and lusty;\n\tFor in my youth I never did apply\n\tHot and rebellious liquors in my blood,\n\tNor did not with unbashful forehead woo\n\tThe means of weakness and debility;\n\tTherefore my age is as a lusty winter,\n\tFrosty, but kindly: let me go with you;\n\tI'll do the service of a younger man\n\tIn all your business and necessities.\n\nORLANDO\tO good old man, how well in thee appears\n\tThe constant service of the antique world,\n\tWhen service sweat for duty, not for meed!\n\tThou art not for the fashion of these times,\n\tWhere none will sweat but for promotion,\n\tAnd having that, do choke their service up\n\tEven with the having: it is not so with thee.\n\tBut, poor old man, thou prunest a rotten tree,\n\tThat cannot so much as a blossom yield\n\tIn lieu of all thy pains and husbandry\n\tBut come thy ways; well go along together,\n\tAnd ere we have thy youthful wages spent,\n\tWe'll light upon some settled low content.\n\nADAM\tMaster, go on, and I will follow thee,\n\tTo the last gasp, with truth and loyalty.\n\tFrom seventeen years till now almost fourscore\n\tHere lived I, but now live here no more.\n\tAt seventeen years many their fortunes seek;\n\tBut at fourscore it is too late a week:\n\tYet fortune cannot recompense me better\n\tThan to die well and not my master's debtor.\n\n\t[Exeunt]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT II\n\n\n\nSCENE IV\tThe Forest of Arden.\n\n\n\t[Enter ROSALIND for Ganymede, CELIA for Aliena,\n\tand TOUCHSTONE]\n\nROSALIND\tO Jupiter, how weary are my spirits!\n\nTOUCHSTONE\tI care not for my spirits, if my legs were not weary.\n\nROSALIND\tI could find in my heart to disgrace my man's\n\tapparel and to cry like a woman; but I must comfort\n\tthe weaker vessel, as doublet and hose ought to show\n\titself courageous to petticoat: therefore courage,\n\tgood Aliena!\n\nCELIA\tI pray you, bear with me; I cannot go no further.\n\nTOUCHSTONE\tFor my part, I had rather bear with you than bear\n\tyou; yet I should bear no cross if I did bear you,\n\tfor I think you have no money in your purse.\n\nROSALIND\tWell, this is the forest of Arden.\n\nTOUCHSTONE\tAy, now am I in Arden; the more fool I; when I was\n\tat home, I was in a better place: but travellers\n\tmust be content.\n\nROSALIND\tAy, be so, good Touchstone.\n\n\t[Enter CORIN and SILVIUS]\n\n\tLook you, who comes here; a young man and an old in\n\tsolemn talk.\n\nCORIN\tThat is the way to make her scorn you still.\n\nSILVIUS\tO Corin, that thou knew'st how I do love her!\n\nCORIN\tI partly guess; for I have loved ere now.\n\nSILVIUS\tNo, Corin, being old, thou canst not guess,\n\tThough in thy youth thou wast as true a lover\n\tAs ever sigh'd upon a midnight pillow:\n\tBut if thy love were ever like to mine--\n\tAs sure I think did never man love so--\n\tHow many actions most ridiculous\n\tHast thou been drawn to by thy fantasy?\n\nCORIN\tInto a thousand that I have forgotten.\n\nSILVIUS\tO, thou didst then ne'er love so heartily!\n\tIf thou remember'st not the slightest folly\n\tThat ever love did make thee run into,\n\tThou hast not loved:\n\tOr if thou hast not sat as I do now,\n\tWearying thy hearer in thy mistress' praise,\n\tThou hast not loved:\n\tOr if thou hast not broke from company\n\tAbruptly, as my passion now makes me,\n\tThou hast not loved.\n\tO Phebe, Phebe, Phebe!\n\n\t[Exit]\n\nROSALIND\tAlas, poor shepherd! searching of thy wound,\n\tI have by hard adventure found mine own.\n\nTOUCHSTONE\tAnd I mine. I remember, when I was in love I broke\n\tmy sword upon a stone and bid him take that for\n\tcoming a-night to Jane Smile; and I remember the\n\tkissing of her batlet and the cow's dugs that her\n\tpretty chopt hands had milked; and I remember the\n\twooing of a peascod instead of her, from whom I took\n\ttwo cods and, giving her them again, said with\n\tweeping tears 'Wear these for my sake.' We that are\n\ttrue lovers run into strange capers; but as all is\n\tmortal in nature, so is all nature in love mortal in folly.\n\nROSALIND\tThou speakest wiser than thou art ware of.\n\nTOUCHSTONE\tNay, I shall ne'er be ware of mine own wit till I\n\tbreak my shins against it.\n\nROSALIND\tJove, Jove! this shepherd's passion\n\tIs much upon my fashion.\n\nTOUCHSTONE\tAnd mine; but it grows something stale with me.\n\nCELIA\tI pray you, one of you question yond man\n\tIf he for gold will give us any food:\n\tI faint almost to death.\n\nTOUCHSTONE\tHolla, you clown!\n\nROSALIND\tPeace, fool: he's not thy kinsman.\n\nCORIN\tWho calls?\n\nTOUCHSTONE\tYour betters, sir.\n\nCORIN\t                  Else are they very wretched.\n\nROSALIND\tPeace, I say. Good even to you, friend.\n\nCORIN\tAnd to you, gentle sir, and to you all.\n\nROSALIND\tI prithee, shepherd, if that love or gold\n\tCan in this desert place buy entertainment,\n\tBring us where we may rest ourselves and feed:\n\tHere's a young maid with travel much oppress'd\n\tAnd faints for succor.\n\nCORIN\tFair sir, I pity her\n\tAnd wish, for her sake more than for mine own,\n\tMy fortunes were more able to relieve her;\n\tBut I am shepherd to another man\n\tAnd do not shear the fleeces that I graze:\n\tMy master is of churlish disposition\n\tAnd little recks to find the way to heaven\n\tBy doing deeds of hospitality:\n\tBesides, his cote, his flocks and bounds of feed\n\tAre now on sale, and at our sheepcote now,\n\tBy reason of his absence, there is nothing\n\tThat you will feed on; but what is, come see.\n\tAnd in my voice most welcome shall you be.\n\nROSALIND\tWhat is he that shall buy his flock and pasture?\n\nCORIN\tThat young swain that you saw here but erewhile,\n\tThat little cares for buying any thing.\n\nROSALIND\tI pray thee, if it stand with honesty,\n\tBuy thou the cottage, pasture and the flock,\n\tAnd thou shalt have to pay for it of us.\n\nCELIA\tAnd we will mend thy wages. I like this place.\n\tAnd willingly could waste my time in it.\n\nCORIN\tAssuredly the thing is to be sold:\n\tGo with me: if you like upon report\n\tThe soil, the profit and this kind of life,\n\tI will your very faithful feeder be\n\tAnd buy it with your gold right suddenly.\n\n\t[Exeunt]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT II\n\n\n\nSCENE V\tThe Forest.\n\n\n\t[Enter AMIENS, JAQUES, and others]\n\t\n\tSONG.\nAMIENS\tUnder the greenwood tree\n\tWho loves to lie with me,\n\tAnd turn his merry note\n\tUnto the sweet bird's throat,\n\tCome hither, come hither, come hither:\n\tHere shall he see No enemy\n\tBut winter and rough weather.\n\nJAQUES\tMore, more, I prithee, more.\n\nAMIENS\tIt will make you melancholy, Monsieur Jaques.\n\nJAQUES\tI thank it. More, I prithee, more. I can suck\n\tmelancholy out of a song, as a weasel sucks eggs.\n\tMore, I prithee, more.\n\nAMIENS\tMy voice is ragged: I know I cannot please you.\n\nJAQUES\tI do not desire you to please me; I do desire you to\n\tsing. Come, more; another stanzo: call you 'em stanzos?\n\nAMIENS\tWhat you will, Monsieur Jaques.\n\nJAQUES\tNay, I care not for their names; they owe me\n\tnothing. Will you sing?\n\nAMIENS\tMore at your request than to please myself.\n\nJAQUES\tWell then, if ever I thank any man, I'll thank you;\n\tbut that they call compliment is like the encounter\n\tof two dog-apes, and when a man thanks me heartily,\n\tmethinks I have given him a penny and he renders me\n\tthe beggarly thanks. Come, sing; and you that will\n\tnot, hold your tongues.\n\nAMIENS\tWell, I'll end the song. Sirs, cover the while; the\n\tduke will drink under this tree. He hath been all\n\tthis day to look you.\n\nJAQUES\tAnd I have been all this day to avoid him. He is\n\ttoo disputable for my company: I think of as many\n\tmatters as he, but I give heaven thanks and make no\n\tboast of them. Come, warble, come.\n\t\n\tSONG.\n\tWho doth ambition shun\n\n\t[All together here]\n\n\tAnd loves to live i' the sun,\n\tSeeking the food he eats\n\tAnd pleased with what he gets,\n\tCome hither, come hither, come hither:\n\tHere shall he see No enemy\n\tBut winter and rough weather.\n\nJAQUES\tI'll give you a verse to this note that I made\n\tyesterday in despite of my invention.\n\nAMIENS\tAnd I'll sing it.\n\nJAQUES\tThus it goes:--\n\n\tIf it do come to pass\n\tThat any man turn ass,\n\tLeaving his wealth and ease,\n\tA stubborn will to please,\n\tDucdame, ducdame, ducdame:\n\tHere shall he see\n\tGross fools as he,\n\tAn if he will come to me.\n\nAMIENS\tWhat's that 'ducdame'?\n\nJAQUES\t'Tis a Greek invocation, to call fools into a\n\tcircle. I'll go sleep, if I can; if I cannot, I'll\n\trail against all the first-born of Egypt.\n\nAMIENS\tAnd I'll go seek the duke: his banquet is prepared.\n\n\t[Exeunt severally]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT II\n\n\n\nSCENE VI\tThe forest.\n\n\n\t[Enter ORLANDO and ADAM]\n\nADAM\tDear master, I can go no further. O, I die for food!\n\tHere lie I down, and measure out my grave. Farewell,\n\tkind master.\n\nORLANDO\tWhy, how now, Adam! no greater heart in thee? Live\n\ta little; comfort a little; cheer thyself a little.\n\tIf this uncouth forest yield any thing savage, I\n\twill either be food for it or bring it for food to\n\tthee. Thy conceit is nearer death than thy powers.\n\tFor my sake be comfortable; hold death awhile at\n\tthe arm's end: I will here be with thee presently;\n\tand if I bring thee not something to eat, I will\n\tgive thee leave to die: but if thou diest before I\n\tcome, thou art a mocker of my labour. Well said!\n\tthou lookest cheerly, and I'll be with thee quickly.\n\tYet thou liest in the bleak air: come, I will bear\n\tthee to some shelter; and thou shalt not die for\n\tlack of a dinner, if there live any thing in this\n\tdesert. Cheerly, good Adam!\n\n\t[Exeunt]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT II\n\n\n\nSCENE VII\tThe forest.\n\n\n\t[A table set out. Enter DUKE SENIOR, AMIENS, and\n\tLords like outlaws]\n\nDUKE SENIOR\tI think he be transform'd into a beast;\n\tFor I can no where find him like a man.\n\nFirst Lord\tMy lord, he is but even now gone hence:\n\tHere was he merry, hearing of a song.\n\nDUKE SENIOR\tIf he, compact of jars, grow musical,\n\tWe shall have shortly discord in the spheres.\n\tGo, seek him: tell him I would speak with him.\n\n\t[Enter JAQUES]\n\nFirst Lord\tHe saves my labour by his own approach.\n\nDUKE SENIOR\tWhy, how now, monsieur! what a life is this,\n\tThat your poor friends must woo your company?\n\tWhat, you look merrily!\n\nJAQUES\tA fool, a fool! I met a fool i' the forest,\n\tA motley fool; a miserable world!\n\tAs I do live by food, I met a fool\n\tWho laid him down and bask'd him in the sun,\n\tAnd rail'd on Lady Fortune in good terms,\n\tIn good set terms and yet a motley fool.\n\t'Good morrow, fool,' quoth I. 'No, sir,' quoth he,\n\t'Call me not fool till heaven hath sent me fortune:'\n\tAnd then he drew a dial from his poke,\n\tAnd, looking on it with lack-lustre eye,\n\tSays very wisely, 'It is ten o'clock:\n\tThus we may see,' quoth he, 'how the world wags:\n\t'Tis but an hour ago since it was nine,\n\tAnd after one hour more 'twill be eleven;\n\tAnd so, from hour to hour, we ripe and ripe,\n\tAnd then, from hour to hour, we rot and rot;\n\tAnd thereby hangs a tale.' When I did hear\n\tThe motley fool thus moral on the time,\n\tMy lungs began to crow like chanticleer,\n\tThat fools should be so deep-contemplative,\n\tAnd I did laugh sans intermission\n\tAn hour by his dial. O noble fool!\n\tA worthy fool! Motley's the only wear.\n\nDUKE SENIOR\tWhat fool is this?\n\nJAQUES\tO worthy fool! One that hath been a courtier,\n\tAnd says, if ladies be but young and fair,\n\tThey have the gift to know it: and in his brain,\n\tWhich is as dry as the remainder biscuit\n\tAfter a voyage, he hath strange places cramm'd\n\tWith observation, the which he vents\n\tIn mangled forms. O that I were a fool!\n\tI am ambitious for a motley coat.\n\nDUKE SENIOR\tThou shalt have one.\n\nJAQUES\tIt is my only suit;\n\tProvided that you weed your better judgments\n\tOf all opinion that grows rank in them\n\tThat I am wise. I must have liberty\n\tWithal, as large a charter as the wind,\n\tTo blow on whom I please; for so fools have;\n\tAnd they that are most galled with my folly,\n\tThey most must laugh. And why, sir, must they so?\n\tThe 'why' is plain as way to parish church:\n\tHe that a fool doth very wisely hit\n\tDoth very foolishly, although he smart,\n\tNot to seem senseless of the bob: if not,\n\tThe wise man's folly is anatomized\n\tEven by the squandering glances of the fool.\n\tInvest me in my motley; give me leave\n\tTo speak my mind, and I will through and through\n\tCleanse the foul body of the infected world,\n\tIf they will patiently receive my medicine.\n\nDUKE SENIOR\tFie on thee! I can tell what thou wouldst do.\n\nJAQUES\tWhat, for a counter, would I do but good?\n\nDUKE SENIOR\tMost mischievous foul sin, in chiding sin:\n\tFor thou thyself hast been a libertine,\n\tAs sensual as the brutish sting itself;\n\tAnd all the embossed sores and headed evils,\n\tThat thou with licence of free foot hast caught,\n\tWouldst thou disgorge into the general world.\n\nJAQUES\tWhy, who cries out on pride,\n\tThat can therein tax any private party?\n\tDoth it not flow as hugely as the sea,\n\tTill that the weary very means do ebb?\n\tWhat woman in the city do I name,\n\tWhen that I say the city-woman bears\n\tThe cost of princes on unworthy shoulders?\n\tWho can come in and say that I mean her,\n\tWhen such a one as she such is her neighbour?\n\tOr what is he of basest function\n\tThat says his bravery is not of my cost,\n\tThinking that I mean him, but therein suits\n\tHis folly to the mettle of my speech?\n\tThere then; how then? what then? Let me see wherein\n\tMy tongue hath wrong'd him: if it do him right,\n\tThen he hath wrong'd himself; if he be free,\n\tWhy then my taxing like a wild-goose flies,\n\tUnclaim'd of any man. But who comes here?\n\n\t[Enter ORLANDO, with his sword drawn]\n\nORLANDO\tForbear, and eat no more.\n\nJAQUES\tWhy, I have eat none yet.\n\nORLANDO\tNor shalt not, till necessity be served.\n\nJAQUES\tOf what kind should this cock come of?\n\nDUKE SENIOR\tArt thou thus bolden'd, man, by thy distress,\n\tOr else a rude despiser of good manners,\n\tThat in civility thou seem'st so empty?\n\nORLANDO\tYou touch'd my vein at first: the thorny point\n\tOf bare distress hath ta'en from me the show\n\tOf smooth civility: yet am I inland bred\n\tAnd know some nurture. But forbear, I say:\n\tHe dies that touches any of this fruit\n\tTill I and my affairs are answered.\n\nJAQUES\tAn you will not be answered with reason, I must die.\n\nDUKE SENIOR\tWhat would you have? Your gentleness shall force\n\tMore than your force move us to gentleness.\n\nORLANDO\tI almost die for food; and let me have it.\n\nDUKE SENIOR\tSit down and feed, and welcome to our table.\n\nORLANDO\tSpeak you so gently? Pardon me, I pray you:\n\tI thought that all things had been savage here;\n\tAnd therefore put I on the countenance\n\tOf stern commandment. But whate'er you are\n\tThat in this desert inaccessible,\n\tUnder the shade of melancholy boughs,\n\tLose and neglect the creeping hours of time\n\tIf ever you have look'd on better days,\n\tIf ever been where bells have knoll'd to church,\n\tIf ever sat at any good man's feast,\n\tIf ever from your eyelids wiped a tear\n\tAnd know what 'tis to pity and be pitied,\n\tLet gentleness my strong enforcement be:\n\tIn the which hope I blush, and hide my sword.\n\nDUKE SENIOR\tTrue is it that we have seen better days,\n\tAnd have with holy bell been knoll'd to church\n\tAnd sat at good men's feasts and wiped our eyes\n\tOf drops that sacred pity hath engender'd:\n\tAnd therefore sit you down in gentleness\n\tAnd take upon command what help we have\n\tThat to your wanting may be minister'd.\n\nORLANDO\tThen but forbear your food a little while,\n\tWhiles, like a doe, I go to find my fawn\n\tAnd give it food. There is an old poor man,\n\tWho after me hath many a weary step\n\tLimp'd in pure love: till he be first sufficed,\n\tOppress'd with two weak evils, age and hunger,\n\tI will not touch a bit.\n\nDUKE SENIOR\tGo find him out,\n\tAnd we will nothing waste till you return.\n\nORLANDO\tI thank ye; and be blest for your good comfort!\n\n\t[Exit]\n\nDUKE SENIOR\tThou seest we are not all alone unhappy:\n\tThis wide and universal theatre\n\tPresents more woeful pageants than the scene\n\tWherein we play in.\n\nJAQUES\tAll the world's a stage,\n\tAnd all the men and women merely players:\n\tThey have their exits and their entrances;\n\tAnd one man in his time plays many parts,\n\tHis acts being seven ages. At first the infant,\n\tMewling and puking in the nurse's arms.\n\tAnd then the whining school-boy, with his satchel\n\tAnd shining morning face, creeping like snail\n\tUnwillingly to school. And then the lover,\n\tSighing like furnace, with a woeful ballad\n\tMade to his mistress' eyebrow. Then a soldier,\n\tFull of strange oaths and bearded like the pard,\n\tJealous in honour, sudden and quick in quarrel,\n\tSeeking the bubble reputation\n\tEven in the cannon's mouth. And then the justice,\n\tIn fair round belly with good capon lined,\n\tWith eyes severe and beard of formal cut,\n\tFull of wise saws and modern instances;\n\tAnd so he plays his part. The sixth age shifts\n\tInto the lean and slipper'd pantaloon,\n\tWith spectacles on nose and pouch on side,\n\tHis youthful hose, well saved, a world too wide\n\tFor his shrunk shank; and his big manly voice,\n\tTurning again toward childish treble, pipes\n\tAnd whistles in his sound. Last scene of all,\n\tThat ends this strange eventful history,\n\tIs second childishness and mere oblivion,\n\tSans teeth, sans eyes, sans taste, sans everything.\n\n\t[Re-enter ORLANDO, with ADAM]\n\nDUKE SENIOR\tWelcome. Set down your venerable burthen,\n\tAnd let him feed.\n\nORLANDO\tI thank you most for him.\n\nADAM\tSo had you need:\n\tI scarce can speak to thank you for myself.\n\nDUKE SENIOR\tWelcome; fall to: I will not trouble you\n\tAs yet, to question you about your fortunes.\n\tGive us some music; and, good cousin, sing.\n\t\n\tSONG.\nAMIENS\tBlow, blow, thou winter wind.\n\tThou art not so unkind\n\tAs man's ingratitude;\n\tThy tooth is not so keen,\n\tBecause thou art not seen,\n\tAlthough thy breath be rude.\n\tHeigh-ho! sing, heigh-ho! unto the green holly:\n\tMost friendship is feigning, most loving mere folly:\n\tThen, heigh-ho, the holly!\n\tThis life is most jolly.\n\tFreeze, freeze, thou bitter sky,\n\tThat dost not bite so nigh\n\tAs benefits forgot:\n\tThough thou the waters warp,\n\tThy sting is not so sharp\n\tAs friend remember'd not.\n\tHeigh-ho! sing, &c.\n\nDUKE SENIOR\tIf that you were the good Sir Rowland's son,\n\tAs you have whisper'd faithfully you were,\n\tAnd as mine eye doth his effigies witness\n\tMost truly limn'd and living in your face,\n\tBe truly welcome hither: I am the duke\n\tThat loved your father: the residue of your fortune,\n\tGo to my cave and tell me. Good old man,\n\tThou art right welcome as thy master is.\n\tSupport him by the arm. Give me your hand,\n\tAnd let me all your fortunes understand.\n\n\t[Exeunt]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT III\n\n\n\nSCENE I\tA room in the palace.\n\n\n\t[Enter DUKE FREDERICK, Lords, and OLIVER]\n\nDUKE FREDERICK\tNot see him since? Sir, sir, that cannot be:\n\tBut were I not the better part made mercy,\n\tI should not seek an absent argument\n\tOf my revenge, thou present. But look to it:\n\tFind out thy brother, wheresoe'er he is;\n\tSeek him with candle; bring him dead or living\n\tWithin this twelvemonth, or turn thou no more\n\tTo seek a living in our territory.\n\tThy lands and all things that thou dost call thine\n\tWorth seizure do we seize into our hands,\n\tTill thou canst quit thee by thy brothers mouth\n\tOf what we think against thee.\n\nOLIVER\tO that your highness knew my heart in this!\n\tI never loved my brother in my life.\n\nDUKE FREDERICK\tMore villain thou. Well, push him out of doors;\n\tAnd let my officers of such a nature\n\tMake an extent upon his house and lands:\n\tDo this expediently and turn him going.\n\n\t[Exeunt]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT III\n\n\n\nSCENE II\tThe forest.\n\n\n\t[Enter ORLANDO, with a paper]\n\nORLANDO\tHang there, my verse, in witness of my love:\n\tAnd thou, thrice-crowned queen of night, survey\n\tWith thy chaste eye, from thy pale sphere above,\n\tThy huntress' name that my full life doth sway.\n\tO Rosalind! these trees shall be my books\n\tAnd in their barks my thoughts I'll character;\n\tThat every eye which in this forest looks\n\tShall see thy virtue witness'd every where.\n\tRun, run, Orlando; carve on every tree\n\tThe fair, the chaste and unexpressive she.\n\n\t[Exit]\n\n\t[Enter CORIN and TOUCHSTONE]\n\nCORIN\tAnd how like you this shepherd's life, Master Touchstone?\n\nTOUCHSTONE\tTruly, shepherd, in respect of itself, it is a good\n\tlife, but in respect that it is a shepherd's life,\n\tit is naught. In respect that it is solitary, I\n\tlike it very well; but in respect that it is\n\tprivate, it is a very vile life. Now, in respect it\n\tis in the fields, it pleaseth me well; but in\n\trespect it is not in the court, it is tedious. As\n\tis it a spare life, look you, it fits my humour well;\n\tbut as there is no more plenty in it, it goes much\n\tagainst my stomach. Hast any philosophy in thee, shepherd?\n\nCORIN\tNo more but that I know the more one sickens the\n\tworse at ease he is; and that he that wants money,\n\tmeans and content is without three good friends;\n\tthat the property of rain is to wet and fire to\n\tburn; that good pasture makes fat sheep, and that a\n\tgreat cause of the night is lack of the sun; that\n\the that hath learned no wit by nature nor art may\n\tcomplain of good breeding or comes of a very dull kindred.\n\nTOUCHSTONE\tSuch a one is a natural philosopher. Wast ever in\n\tcourt, shepherd?\n\nCORIN\tNo, truly.\n\nTOUCHSTONE\tThen thou art damned.\n\nCORIN\tNay, I hope.\n\nTOUCHSTONE\tTruly, thou art damned like an ill-roasted egg, all\n\ton one side.\n\nCORIN\tFor not being at court? Your reason.\n\nTOUCHSTONE\tWhy, if thou never wast at court, thou never sawest\n\tgood manners; if thou never sawest good manners,\n\tthen thy manners must be wicked; and wickedness is\n\tsin, and sin is damnation. Thou art in a parlous\n\tstate, shepherd.\n\nCORIN\tNot a whit, Touchstone: those that are good manners\n\tat the court are as ridiculous in the country as the\n\tbehavior of the country is most mockable at the\n\tcourt. You told me you salute not at the court, but\n\tyou kiss your hands: that courtesy would be\n\tuncleanly, if courtiers were shepherds.\n\nTOUCHSTONE\tInstance, briefly; come, instance.\n\nCORIN\tWhy, we are still handling our ewes, and their\n\tfells, you know, are greasy.\n\nTOUCHSTONE\tWhy, do not your courtier's hands sweat? and is not\n\tthe grease of a mutton as wholesome as the sweat of\n\ta man? Shallow, shallow. A better instance, I say; come.\n\nCORIN\tBesides, our hands are hard.\n\nTOUCHSTONE\tYour lips will feel them the sooner. Shallow again.\n\tA more sounder instance, come.\n\nCORIN\tAnd they are often tarred over with the surgery of\n\tour sheep: and would you have us kiss tar? The\n\tcourtier's hands are perfumed with civet.\n\nTOUCHSTONE\tMost shallow man! thou worms-meat, in respect of a\n\tgood piece of flesh indeed! Learn of the wise, and\n\tperpend: civet is of a baser birth than tar, the\n\tvery uncleanly flux of a cat. Mend the instance, shepherd.\n\nCORIN\tYou have too courtly a wit for me: I'll rest.\n\nTOUCHSTONE\tWilt thou rest damned? God help thee, shallow man!\n\tGod make incision in thee! thou art raw.\n\nCORIN\tSir, I am a true labourer: I earn that I eat, get\n\tthat I wear, owe no man hate, envy no man's\n\thappiness, glad of other men's good, content with my\n\tharm, and the greatest of my pride is to see my ewes\n\tgraze and my lambs suck.\n\nTOUCHSTONE\tThat is another simple sin in you, to bring the ewes\n\tand the rams together and to offer to get your\n\tliving by the copulation of cattle; to be bawd to a\n\tbell-wether, and to betray a she-lamb of a\n\ttwelvemonth to a crooked-pated, old, cuckoldly ram,\n\tout of all reasonable match. If thou beest not\n\tdamned for this, the devil himself will have no\n\tshepherds; I cannot see else how thou shouldst\n\t'scape.\n\nCORIN\tHere comes young Master Ganymede, my new mistress's brother.\n\n\t[Enter ROSALIND, with a paper, reading]\n\nROSALIND\t     From the east to western Ind,\n\tNo jewel is like Rosalind.\n\tHer worth, being mounted on the wind,\n\tThrough all the world bears Rosalind.\n\tAll the pictures fairest lined\n\tAre but black to Rosalind.\n\tLet no fair be kept in mind\n\tBut the fair of Rosalind.\n\nTOUCHSTONE\tI'll rhyme you so eight years together, dinners and\n\tsuppers and sleeping-hours excepted: it is the\n\tright butter-women's rank to market.\n\nROSALIND\tOut, fool!\n\nTOUCHSTONE\tFor a taste:\n\tIf a hart do lack a hind,\n\tLet him seek out Rosalind.\n\tIf the cat will after kind,\n\tSo be sure will Rosalind.\n\tWinter garments must be lined,\n\tSo must slender Rosalind.\n\tThey that reap must sheaf and bind;\n\tThen to cart with Rosalind.\n\tSweetest nut hath sourest rind,\n\tSuch a nut is Rosalind.\n\tHe that sweetest rose will find\n\tMust find love's prick and Rosalind.\n\tThis is the very false gallop of verses: why do you\n\tinfect yourself with them?\n\nROSALIND\tPeace, you dull fool! I found them on a tree.\n\nTOUCHSTONE\tTruly, the tree yields bad fruit.\n\nROSALIND\tI'll graff it with you, and then I shall graff it\n\twith a medlar: then it will be the earliest fruit\n\ti' the country; for you'll be rotten ere you be half\n\tripe, and that's the right virtue of the medlar.\n\nTOUCHSTONE\tYou have said; but whether wisely or no, let the\n\tforest judge.\n\n\t[Enter CELIA, with a writing]\n\nROSALIND\tPeace! Here comes my sister, reading: stand aside.\n\nCELIA\t[Reads]\n\n\tWhy should this a desert be?\n\tFor it is unpeopled? No:\n\tTongues I'll hang on every tree,\n\tThat shall civil sayings show:\n\tSome, how brief the life of man\n\tRuns his erring pilgrimage,\n\tThat the stretching of a span\n\tBuckles in his sum of age;\n\tSome, of violated vows\n\t'Twixt the souls of friend and friend:\n\tBut upon the fairest boughs,\n\tOr at every sentence end,\n\tWill I Rosalinda write,\n\tTeaching all that read to know\n\tThe quintessence of every sprite\n\tHeaven would in little show.\n\tTherefore Heaven Nature charged\n\tThat one body should be fill'd\n\tWith all graces wide-enlarged:\n\tNature presently distill'd\n\tHelen's cheek, but not her heart,\n\tCleopatra's majesty,\n\tAtalanta's better part,\n\tSad Lucretia's modesty.\n\tThus Rosalind of many parts\n\tBy heavenly synod was devised,\n\tOf many faces, eyes and hearts,\n\tTo have the touches dearest prized.\n\tHeaven would that she these gifts should have,\n\tAnd I to live and die her slave.\n\nROSALIND\tO most gentle pulpiter! what tedious homily of love\n\thave you wearied your parishioners withal, and never\n\tcried 'Have patience, good people!'\n\nCELIA\tHow now! back, friends! Shepherd, go off a little.\n\tGo with him, sirrah.\n\nTOUCHSTONE\tCome, shepherd, let us make an honourable retreat;\n\tthough not with bag and baggage, yet with scrip and scrippage.\n\n\t[Exeunt CORIN and TOUCHSTONE]\n\nCELIA\tDidst thou hear these verses?\n\nROSALIND\tO, yes, I heard them all, and more too; for some of\n\tthem had in them more feet than the verses would bear.\n\nCELIA\tThat's no matter: the feet might bear the verses.\n\nROSALIND\tAy, but the feet were lame and could not bear\n\tthemselves without the verse and therefore stood\n\tlamely in the verse.\n\nCELIA\tBut didst thou hear without wondering how thy name\n\tshould be hanged and carved upon these trees?\n\nROSALIND\tI was seven of the nine days out of the wonder\n\tbefore you came; for look here what I found on a\n\tpalm-tree. I was never so be-rhymed since\n\tPythagoras' time, that I was an Irish rat, which I\n\tcan hardly remember.\n\nCELIA\tTrow you who hath done this?\n\nROSALIND\tIs it a man?\n\nCELIA\tAnd a chain, that you once wore, about his neck.\n\tChange you colour?\n\nROSALIND\tI prithee, who?\n\nCELIA\tO Lord, Lord! it is a hard matter for friends to\n\tmeet; but mountains may be removed with earthquakes\n\tand so encounter.\n\nROSALIND\tNay, but who is it?\n\nCELIA\tIs it possible?\n\nROSALIND\tNay, I prithee now with most petitionary vehemence,\n\ttell me who it is.\n\nCELIA\tO wonderful, wonderful, and most wonderful\n\twonderful! and yet again wonderful, and after that,\n\tout of all hooping!\n\nROSALIND\tGood my complexion! dost thou think, though I am\n\tcaparisoned like a man, I have a doublet and hose in\n\tmy disposition? One inch of delay more is a\n\tSouth-sea of discovery; I prithee, tell me who is it\n\tquickly, and speak apace. I would thou couldst\n\tstammer, that thou mightst pour this concealed man\n\tout of thy mouth, as wine comes out of a narrow-\n\tmouthed bottle, either too much at once, or none at\n\tall. I prithee, take the cork out of thy mouth that\n\tmay drink thy tidings.\n\nCELIA\tSo you may put a man in your belly.\n\nROSALIND\tIs he of God's making? What manner of man? Is his\n\thead worth a hat, or his chin worth a beard?\n\nCELIA\tNay, he hath but a little beard.\n\nROSALIND\tWhy, God will send more, if the man will be\n\tthankful: let me stay the growth of his beard, if\n\tthou delay me not the knowledge of his chin.\n\nCELIA\tIt is young Orlando, that tripped up the wrestler's\n\theels and your heart both in an instant.\n\nROSALIND\tNay, but the devil take mocking: speak, sad brow and\n\ttrue maid.\n\nCELIA\tI' faith, coz, 'tis he.\n\nROSALIND\tOrlando?\n\nCELIA\tOrlando.\n\nROSALIND\tAlas the day! what shall I do with my doublet and\n\those? What did he when thou sawest him? What said\n\the? How looked he? Wherein went he? What makes\n\thim here? Did he ask for me? Where remains he?\n\tHow parted he with thee? and when shalt thou see\n\thim again? Answer me in one word.\n\nCELIA\tYou must borrow me Gargantua's mouth first: 'tis a\n\tword too great for any mouth of this age's size. To\n\tsay ay and no to these particulars is more than to\n\tanswer in a catechism.\n\nROSALIND\tBut doth he know that I am in this forest and in\n\tman's apparel? Looks he as freshly as he did the\n\tday he wrestled?\n\nCELIA\tIt is as easy to count atomies as to resolve the\n\tpropositions of a lover; but take a taste of my\n\tfinding him, and relish it with good observance.\n\tI found him under a tree, like a dropped acorn.\n\nROSALIND\tIt may well be called Jove's tree, when it drops\n\tforth such fruit.\n\nCELIA\tGive me audience, good madam.\n\nROSALIND\tProceed.\n\nCELIA\tThere lay he, stretched along, like a wounded knight.\n\nROSALIND\tThough it be pity to see such a sight, it well\n\tbecomes the ground.\n\nCELIA\tCry 'holla' to thy tongue, I prithee; it curvets\n\tunseasonably. He was furnished like a hunter.\n\nROSALIND\tO, ominous! he comes to kill my heart.\n\nCELIA\tI would sing my song without a burden: thou bringest\n\tme out of tune.\n\nROSALIND\tDo you not know I am a woman? when I think, I must\n\tspeak. Sweet, say on.\n\nCELIA\tYou bring me out. Soft! comes he not here?\n\n\t[Enter ORLANDO and JAQUES]\n\nROSALIND\t'Tis he: slink by, and note him.\n\nJAQUES\tI thank you for your company; but, good faith, I had\n\tas lief have been myself alone.\n\nORLANDO\tAnd so had I; but yet, for fashion sake, I thank you\n\ttoo for your society.\n\nJAQUES\tGod be wi' you: let's meet as little as we can.\n\nORLANDO\tI do desire we may be better strangers.\n\nJAQUES\tI pray you, mar no more trees with writing\n\tlove-songs in their barks.\n\nORLANDO\tI pray you, mar no more of my verses with reading\n\tthem ill-favouredly.\n\nJAQUES\tRosalind is your love's name?\n\nORLANDO\tYes, just.\n\nJAQUES\tI do not like her name.\n\nORLANDO\tThere was no thought of pleasing you when she was\n\tchristened.\n\nJAQUES\tWhat stature is she of?\n\nORLANDO\tJust as high as my heart.\n\nJAQUES\tYou are full of pretty answers. Have you not been\n\tacquainted with goldsmiths' wives, and conned them\n\tout of rings?\n\nORLANDO\tNot so; but I answer you right painted cloth, from\n\twhence you have studied your questions.\n\nJAQUES\tYou have a nimble wit: I think 'twas made of\n\tAtalanta's heels. Will you sit down with me? and\n\twe two will rail against our mistress the world and\n\tall our misery.\n\nORLANDO\tI will chide no breather in the world but myself,\n\tagainst whom I know most faults.\n\nJAQUES\tThe worst fault you have is to be in love.\n\nORLANDO\t'Tis a fault I will not change for your best virtue.\n\tI am weary of you.\n\nJAQUES\tBy my troth, I was seeking for a fool when I found\n\tyou.\n\nORLANDO\tHe is drowned in the brook: look but in, and you\n\tshall see him.\n\nJAQUES\tThere I shall see mine own figure.\n\nORLANDO\tWhich I take to be either a fool or a cipher.\n\nJAQUES\tI'll tarry no longer with you: farewell, good\n\tSignior Love.\n\nORLANDO\tI am glad of your departure: adieu, good Monsieur\n\tMelancholy.\n\n\t[Exit JAQUES]\n\nROSALIND\t[Aside to CELIA]  I will speak to him, like a saucy\n\tlackey and under that habit play the knave with him.\n\tDo you hear, forester?\n\nORLANDO\tVery well: what would you?\n\nROSALIND\tI pray you, what is't o'clock?\n\nORLANDO\tYou should ask me what time o' day: there's no clock\n\tin the forest.\n\nROSALIND\tThen there is no true lover in the forest; else\n\tsighing every minute and groaning every hour would\n\tdetect the lazy foot of Time as well as a clock.\n\nORLANDO\tAnd why not the swift foot of Time? had not that\n\tbeen as proper?\n\nROSALIND\tBy no means, sir: Time travels in divers paces with\n\tdivers persons. I'll tell you who Time ambles\n\twithal, who Time trots withal, who Time gallops\n\twithal and who he stands still withal.\n\nORLANDO\tI prithee, who doth he trot withal?\n\nROSALIND\tMarry, he trots hard with a young maid between the\n\tcontract of her marriage and the day it is\n\tsolemnized: if the interim be but a se'nnight,\n\tTime's pace is so hard that it seems the length of\n\tseven year.\n\nORLANDO\tWho ambles Time withal?\n\nROSALIND\tWith a priest that lacks Latin and a rich man that\n\thath not the gout, for the one sleeps easily because\n\the cannot study, and the other lives merrily because\n\the feels no pain, the one lacking the burden of lean\n\tand wasteful learning, the other knowing no burden\n\tof heavy tedious penury; these Time ambles withal.\n\nORLANDO\tWho doth he gallop withal?\n\nROSALIND\tWith a thief to the gallows, for though he go as\n\tsoftly as foot can fall, he thinks himself too soon there.\n\nORLANDO\tWho stays it still withal?\n\nROSALIND\tWith lawyers in the vacation, for they sleep between\n\tterm and term and then they perceive not how Time moves.\n\nORLANDO\tWhere dwell you, pretty youth?\n\nROSALIND\tWith this shepherdess, my sister; here in the\n\tskirts of the forest, like fringe upon a petticoat.\n\nORLANDO\tAre you native of this place?\n\nROSALIND\tAs the cony that you see dwell where she is kindled.\n\nORLANDO\tYour accent is something finer than you could\n\tpurchase in so removed a dwelling.\n\nROSALIND\tI have been told so of many: but indeed an old\n\treligious uncle of mine taught me to speak, who was\n\tin his youth an inland man; one that knew courtship\n\ttoo well, for there he fell in love. I have heard\n\thim read many lectures against it, and I thank God\n\tI am not a woman, to be touched with so many\n\tgiddy offences as he hath generally taxed their\n\twhole sex withal.\n\nORLANDO\tCan you remember any of the principal evils that he\n\tlaid to the charge of women?\n\nROSALIND\tThere were none principal; they were all like one\n\tanother as half-pence are, every one fault seeming\n\tmonstrous till his fellow fault came to match it.\n\nORLANDO\tI prithee, recount some of them.\n\nROSALIND\tNo, I will not cast away my physic but on those that\n\tare sick. There is a man haunts the forest, that\n\tabuses our young plants with carving 'Rosalind' on\n\ttheir barks; hangs odes upon hawthorns and elegies\n\ton brambles, all, forsooth, deifying the name of\n\tRosalind: if I could meet that fancy-monger I would\n\tgive him some good counsel, for he seems to have the\n\tquotidian of love upon him.\n\nORLANDO\tI am he that is so love-shaked: I pray you tell me\n\tyour remedy.\n\nROSALIND\tThere is none of my uncle's marks upon you: he\n\ttaught me how to know a man in love; in which cage\n\tof rushes I am sure you are not prisoner.\n\nORLANDO\tWhat were his marks?\n\nROSALIND\tA lean cheek, which you have not, a blue eye and\n\tsunken, which you have not, an unquestionable\n\tspirit, which you have not, a beard neglected,\n\twhich you have not; but I pardon you for that, for\n\tsimply your having in beard is a younger brother's\n\trevenue: then your hose should be ungartered, your\n\tbonnet unbanded, your sleeve unbuttoned, your shoe\n\tuntied and every thing about you demonstrating a\n\tcareless desolation; but you are no such man; you\n\tare rather point-device in your accoutrements as\n\tloving yourself than seeming the lover of any other.\n\nORLANDO\tFair youth, I would I could make thee believe I love.\n\nROSALIND\tMe believe it! you may as soon make her that you\n\tlove believe it; which, I warrant, she is apter to\n\tdo than to confess she does: that is one of the\n\tpoints in the which women still give the lie to\n\ttheir consciences. But, in good sooth, are you he\n\tthat hangs the verses on the trees, wherein Rosalind\n\tis so admired?\n\nORLANDO\tI swear to thee, youth, by the white hand of\n\tRosalind, I am that he, that unfortunate he.\n\nROSALIND\tBut are you so much in love as your rhymes speak?\n\nORLANDO\tNeither rhyme nor reason can express how much.\n\nROSALIND\tLove is merely a madness, and, I tell you, deserves\n\tas well a dark house and a whip as madmen do: and\n\tthe reason why they are not so punished and cured\n\tis, that the lunacy is so ordinary that the whippers\n\tare in love too. Yet I profess curing it by counsel.\n\nORLANDO\tDid you ever cure any so?\n\nROSALIND\tYes, one, and in this manner. He was to imagine me\n\this love, his mistress; and I set him every day to\n\twoo me: at which time would I, being but a moonish\n\tyouth, grieve, be effeminate, changeable, longing\n\tand liking, proud, fantastical, apish, shallow,\n\tinconstant, full of tears, full of smiles, for every\n\tpassion something and for no passion truly any\n\tthing, as boys and women are for the most part\n\tcattle of this colour; would now like him, now loathe\n\thim; then entertain him, then forswear him; now weep\n\tfor him, then spit at him; that I drave my suitor\n\tfrom his mad humour of love to a living humour of\n\tmadness; which was, to forswear the full stream of\n\tthe world, and to live in a nook merely monastic.\n\tAnd thus I cured him; and this way will I take upon\n\tme to wash your liver as clean as a sound sheep's\n\theart, that there shall not be one spot of love in't.\n\nORLANDO\tI would not be cured, youth.\n\nROSALIND\tI would cure you, if you would but call me Rosalind\n\tand come every day to my cote and woo me.\n\nORLANDO\tNow, by the faith of my love, I will: tell me\n\twhere it is.\n\nROSALIND\tGo with me to it and I'll show it you and by the way\n\tyou shall tell me where in the forest you live.\n\tWill you go?\n\nORLANDO\tWith all my heart, good youth.\n\nROSALIND\tNay you must call me Rosalind. Come, sister, will you go?\n\n\t[Exeunt]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT III\n\n\n\nSCENE III\tThe forest.\n\n\n\t[Enter TOUCHSTONE and AUDREY; JAQUES behind]\n\nTOUCHSTONE\tCome apace, good Audrey: I will fetch up your\n\tgoats, Audrey. And how, Audrey? am I the man yet?\n\tdoth my simple feature content you?\n\nAUDREY\tYour features! Lord warrant us! what features!\n\nTOUCHSTONE\tI am here with thee and thy goats, as the most\n\tcapricious poet, honest Ovid, was among the Goths.\n\nJAQUES\t[Aside]  O knowledge ill-inhabited, worse than Jove\n\tin a thatched house!\n\nTOUCHSTONE\tWhen a man's verses cannot be understood, nor a\n\tman's good wit seconded with the forward child\n\tUnderstanding, it strikes a man more dead than a\n\tgreat reckoning in a little room. Truly, I would\n\tthe gods had made thee poetical.\n\nAUDREY\tI do not know what 'poetical' is: is it honest in\n\tdeed and word? is it a true thing?\n\nTOUCHSTONE\tNo, truly; for the truest poetry is the most\n\tfeigning; and lovers are given to poetry, and what\n\tthey swear in poetry may be said as lovers they do feign.\n\nAUDREY\tDo you wish then that the gods had made me poetical?\n\nTOUCHSTONE\tI do, truly; for thou swearest to me thou art\n\thonest: now, if thou wert a poet, I might have some\n\thope thou didst feign.\n\nAUDREY\tWould you not have me honest?\n\nTOUCHSTONE\tNo, truly, unless thou wert hard-favoured; for\n\thonesty coupled to beauty is to have honey a sauce to sugar.\n\nJAQUES\t[Aside]  A material fool!\n\nAUDREY\t Well, I am not fair; and therefore I pray the gods\n\tmake me honest.\n\nTOUCHSTONE\tTruly, and to cast away honesty upon a foul slut\n\twere to put good meat into an unclean dish.\n\nAUDREY\tI am not a slut, though I thank the gods I am foul.\n\nTOUCHSTONE\tWell, praised be the gods for thy foulness!\n\tsluttishness may come hereafter. But be it as it may\n\tbe, I will marry thee, and to that end I have been\n\twith Sir Oliver Martext, the vicar of the next\n\tvillage, who hath promised to meet me in this place\n\tof the forest and to couple us.\n\nJAQUES\t[Aside]  I would fain see this meeting.\n\nAUDREY\tWell, the gods give us joy!\n\nTOUCHSTONE\tAmen. A man may, if he were of a fearful heart,\n\tstagger in this attempt; for here we have no temple\n\tbut the wood, no assembly but horn-beasts. But what\n\tthough? Courage! As horns are odious, they are\n\tnecessary. It is said, 'many a man knows no end of\n\this goods:' right; many a man has good horns, and\n\tknows no end of them. Well, that is the dowry of\n\this wife; 'tis none of his own getting. Horns?\n\tEven so. Poor men alone? No, no; the noblest deer\n\thath them as huge as the rascal. Is the single man\n\ttherefore blessed? No: as a walled town is more\n\tworthier than a village, so is the forehead of a\n\tmarried man more honourable than the bare brow of a\n\tbachelor; and by how much defence is better than no\n\tskill, by so much is a horn more precious than to\n\twant. Here comes Sir Oliver.\n\n\t[Enter SIR OLIVER MARTEXT]\n\n\tSir Oliver Martext, you are well met: will you\n\tdispatch us here under this tree, or shall we go\n\twith you to your chapel?\n\nSIR OLIVER MARTEXT\tIs there none here to give the woman?\n\nTOUCHSTONE\tI will not take her on gift of any man.\n\nSIR OLIVER MARTEXT\tTruly, she must be given, or the marriage is not lawful.\n\nJAQUES\t[Advancing]\n\n\tProceed, proceed\tI'll give her.\n\nTOUCHSTONE\tGood even, good Master What-ye-call't: how do you,\n\tsir? You are very well met: God 'ild you for your\n\tlast company: I am very glad to see you: even a\n\ttoy in hand here, sir: nay, pray be covered.\n\nJAQUES\tWill you be married, motley?\n\nTOUCHSTONE\tAs the ox hath his bow, sir, the horse his curb and\n\tthe falcon her bells, so man hath his desires; and\n\tas pigeons bill, so wedlock would be nibbling.\n\nJAQUES\tAnd will you, being a man of your breeding, be\n\tmarried under a bush like a beggar? Get you to\n\tchurch, and have a good priest that can tell you\n\twhat marriage is: this fellow will but join you\n\ttogether as they join wainscot; then one of you will\n\tprove a shrunk panel and, like green timber, warp, warp.\n\nTOUCHSTONE\t[Aside]  I am not in the mind but I were better to be\n\tmarried of him than of another: for he is not like\n\tto marry me well; and not being well married, it\n\twill be a good excuse for me hereafter to leave my wife.\n\nJAQUES\tGo thou with me, and let me counsel thee.\n\nTOUCHSTONE\t'Come, sweet Audrey:\n\tWe must be married, or we must live in bawdry.\n\tFarewell, good Master Oliver: not,--\n\tO sweet Oliver,\n\tO brave Oliver,\n\tLeave me not behind thee: but,--\n\tWind away,\n\tBegone, I say,\n\tI will not to wedding with thee.\n\n\t[Exeunt JAQUES, TOUCHSTONE and AUDREY]\n\nSIR OLIVER MARTEXT\t'Tis no matter: ne'er a fantastical knave of them\n\tall shall flout me out of my calling.\n\n\t[Exit]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT III\n\n\n\nSCENE IV\tThe forest.\n\n\n\t[Enter ROSALIND and CELIA]\n\nROSALIND\tNever talk to me; I will weep.\n\nCELIA\tDo, I prithee; but yet have the grace to consider\n\tthat tears do not become a man.\n\nROSALIND\tBut have I not cause to weep?\n\nCELIA\tAs good cause as one would desire; therefore weep.\n\nROSALIND\tHis very hair is of the dissembling colour.\n\nCELIA\tSomething browner than Judas's marry, his kisses are\n\tJudas's own children.\n\nROSALIND\tI' faith, his hair is of a good colour.\n\nCELIA\tAn excellent colour: your chestnut was ever the only colour.\n\nROSALIND\tAnd his kissing is as full of sanctity as the touch\n\tof holy bread.\n\nCELIA\tHe hath bought a pair of cast lips of Diana: a nun\n\tof winter's sisterhood kisses not more religiously;\n\tthe very ice of chastity is in them.\n\nROSALIND\tBut why did he swear he would come this morning, and\n\tcomes not?\n\nCELIA\tNay, certainly, there is no truth in him.\n\nROSALIND\tDo you think so?\n\nCELIA\tYes; I think he is not a pick-purse nor a\n\thorse-stealer, but for his verity in love, I do\n\tthink him as concave as a covered goblet or a\n\tworm-eaten nut.\n\nROSALIND\tNot true in love?\n\nCELIA\tYes, when he is in; but I think he is not in.\n\nROSALIND\tYou have heard him swear downright he was.\n\nCELIA\t'Was' is not 'is:' besides, the oath of a lover is\n\tno stronger than the word of a tapster; they are\n\tboth the confirmer of false reckonings. He attends\n\there in the forest on the duke your father.\n\nROSALIND\tI met the duke yesterday and had much question with\n\thim: he asked me of what parentage I was; I told\n\thim, of as good as he; so he laughed and let me go.\n\tBut what talk we of fathers, when there is such a\n\tman as Orlando?\n\nCELIA\tO, that's a brave man! he writes brave verses,\n\tspeaks brave words, swears brave oaths and breaks\n\tthem bravely, quite traverse, athwart the heart of\n\this lover; as a puisny tilter, that spurs his horse\n\tbut on one side, breaks his staff like a noble\n\tgoose: but all's brave that youth mounts and folly\n\tguides. Who comes here?\n\n\t[Enter CORIN]\n\nCORIN\tMistress and master, you have oft inquired\n\tAfter the shepherd that complain'd of love,\n\tWho you saw sitting by me on the turf,\n\tPraising the proud disdainful shepherdess\n\tThat was his mistress.\n\nCELIA\tWell, and what of him?\n\nCORIN\tIf you will see a pageant truly play'd,\n\tBetween the pale complexion of true love\n\tAnd the red glow of scorn and proud disdain,\n\tGo hence a little and I shall conduct you,\n\tIf you will mark it.\n\nROSALIND\tO, come, let us remove:\n\tThe sight of lovers feedeth those in love.\n\tBring us to this sight, and you shall say\n\tI'll prove a busy actor in their play.\n\n\t[Exeunt]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT III\n\n\n\nSCENE V\tAnother part of the forest.\n\n\n\t[Enter SILVIUS and PHEBE]\n\nSILVIUS\tSweet Phebe, do not scorn me; do not, Phebe;\n\tSay that you love me not, but say not so\n\tIn bitterness. The common executioner,\n\tWhose heart the accustom'd sight of death makes hard,\n\tFalls not the axe upon the humbled neck\n\tBut first begs pardon: will you sterner be\n\tThan he that dies and lives by bloody drops?\n\n\t[Enter ROSALIND, CELIA, and CORIN, behind]\n\nPHEBE\tI would not be thy executioner:\n\tI fly thee, for I would not injure thee.\n\tThou tell'st me there is murder in mine eye:\n\t'Tis pretty, sure, and very probable,\n\tThat eyes, that are the frail'st and softest things,\n\tWho shut their coward gates on atomies,\n\tShould be call'd tyrants, butchers, murderers!\n\tNow I do frown on thee with all my heart;\n\tAnd if mine eyes can wound, now let them kill thee:\n\tNow counterfeit to swoon; why now fall down;\n\tOr if thou canst not, O, for shame, for shame,\n\tLie not, to say mine eyes are murderers!\n\tNow show the wound mine eye hath made in thee:\n\tScratch thee but with a pin, and there remains\n\tSome scar of it; lean but upon a rush,\n\tThe cicatrice and capable impressure\n\tThy palm some moment keeps; but now mine eyes,\n\tWhich I have darted at thee, hurt thee not,\n\tNor, I am sure, there is no force in eyes\n\tThat can do hurt.\n\nSILVIUS\t                  O dear Phebe,\n\tIf ever,--as that ever may be near,--\n\tYou meet in some fresh cheek the power of fancy,\n\tThen shall you know the wounds invisible\n\tThat love's keen arrows make.\n\nPHEBE\tBut till that time\n\tCome not thou near me: and when that time comes,\n\tAfflict me with thy mocks, pity me not;\n\tAs till that time I shall not pity thee.\n\nROSALIND\tAnd why, I pray you? Who might be your mother,\n\tThat you insult, exult, and all at once,\n\tOver the wretched? What though you have no beauty,--\n\tAs, by my faith, I see no more in you\n\tThan without candle may go dark to bed--\n\tMust you be therefore proud and pitiless?\n\tWhy, what means this? Why do you look on me?\n\tI see no more in you than in the ordinary\n\tOf nature's sale-work. 'Od's my little life,\n\tI think she means to tangle my eyes too!\n\tNo, faith, proud mistress, hope not after it:\n\t'Tis not your inky brows, your black silk hair,\n\tYour bugle eyeballs, nor your cheek of cream,\n\tThat can entame my spirits to your worship.\n\tYou foolish shepherd, wherefore do you follow her,\n\tLike foggy south puffing with wind and rain?\n\tYou are a thousand times a properer man\n\tThan she a woman: 'tis such fools as you\n\tThat makes the world full of ill-favour'd children:\n\t'Tis not her glass, but you, that flatters her;\n\tAnd out of you she sees herself more proper\n\tThan any of her lineaments can show her.\n\tBut, mistress, know yourself: down on your knees,\n\tAnd thank heaven, fasting, for a good man's love:\n\tFor I must tell you friendly in your ear,\n\tSell when you can: you are not for all markets:\n\tCry the man mercy; love him; take his offer:\n\tFoul is most foul, being foul to be a scoffer.\n\tSo take her to thee, shepherd: fare you well.\n\nPHEBE\tSweet youth, I pray you, chide a year together:\n\tI had rather hear you chide than this man woo.\n\nROSALIND\tHe's fallen in love with your foulness and she'll\n\tfall in love with my anger. If it be so, as fast as\n\tshe answers thee with frowning looks, I'll sauce her\n\twith bitter words. Why look you so upon me?\n\nPHEBE\tFor no ill will I bear you.\n\nROSALIND\tI pray you, do not fall in love with me,\n\tFor I am falser than vows made in wine:\n\tBesides, I like you not. If you will know my house,\n\t'Tis at the tuft of olives here hard by.\n\tWill you go, sister? Shepherd, ply her hard.\n\tCome, sister. Shepherdess, look on him better,\n\tAnd be not proud: though all the world could see,\n\tNone could be so abused in sight as he.\n\tCome, to our flock.\n\n\t[Exeunt ROSALIND, CELIA and CORIN]\n\nPHEBE\tDead Shepherd, now I find thy saw of might,\n\t'Who ever loved that loved not at first sight?'\n\nSILVIUS\tSweet Phebe,--\n\nPHEBE\t                  Ha, what say'st thou, Silvius?\n\nSILVIUS\tSweet Phebe, pity me.\n\nPHEBE\tWhy, I am sorry for thee, gentle Silvius.\n\nSILVIUS\tWherever sorrow is, relief would be:\n\tIf you do sorrow at my grief in love,\n\tBy giving love your sorrow and my grief\n\tWere both extermined.\n\nPHEBE\tThou hast my love: is not that neighbourly?\n\nSILVIUS\tI would have you.\n\nPHEBE\t                  Why, that were covetousness.\n\tSilvius, the time was that I hated thee,\n\tAnd yet it is not that I bear thee love;\n\tBut since that thou canst talk of love so well,\n\tThy company, which erst was irksome to me,\n\tI will endure, and I'll employ thee too:\n\tBut do not look for further recompense\n\tThan thine own gladness that thou art employ'd.\n\nSILVIUS\tSo holy and so perfect is my love,\n\tAnd I in such a poverty of grace,\n\tThat I shall think it a most plenteous crop\n\tTo glean the broken ears after the man\n\tThat the main harvest reaps: loose now and then\n\tA scatter'd smile, and that I'll live upon.\n\nPHEBE\tKnow'st now the youth that spoke to me erewhile?\n\nSILVIUS\tNot very well, but I have met him oft;\n\tAnd he hath bought the cottage and the bounds\n\tThat the old carlot once was master of.\n\nPHEBE\tThink not I love him, though I ask for him:\n\t'Tis but a peevish boy; yet he talks well;\n\tBut what care I for words? yet words do well\n\tWhen he that speaks them pleases those that hear.\n\tIt is a pretty youth: not very pretty:\n\tBut, sure, he's proud, and yet his pride becomes him:\n\tHe'll make a proper man: the best thing in him\n\tIs his complexion; and faster than his tongue\n\tDid make offence his eye did heal it up.\n\tHe is not very tall; yet for his years he's tall:\n\tHis leg is but so so; and yet 'tis well:\n\tThere was a pretty redness in his lip,\n\tA little riper and more lusty red\n\tThan that mix'd in his cheek; 'twas just the difference\n\tBetween the constant red and mingled damask.\n\tThere be some women, Silvius, had they mark'd him\n\tIn parcels as I did, would have gone near\n\tTo fall in love with him; but, for my part,\n\tI love him not nor hate him not; and yet\n\tI have more cause to hate him than to love him:\n\tFor what had he to do to chide at me?\n\tHe said mine eyes were black and my hair black:\n\tAnd, now I am remember'd, scorn'd at me:\n\tI marvel why I answer'd not again:\n\tBut that's all one; omittance is no quittance.\n\tI'll write to him a very taunting letter,\n\tAnd thou shalt bear it: wilt thou, Silvius?\n\nSILVIUS\tPhebe, with all my heart.\n\nPHEBE\tI'll write it straight;\n\tThe matter's in my head and in my heart:\n\tI will be bitter with him and passing short.\n\tGo with me, Silvius.\n\n\t[Exeunt]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT IV\n\n\n\nSCENE I\tThe forest.\n\n\n\t[Enter ROSALIND, CELIA, and JAQUES]\n\nJAQUES\tI prithee, pretty youth, let me be better acquainted\n\twith thee.\n\nROSALIND\tThey say you are a melancholy fellow.\n\nJAQUES\tI am so; I do love it better than laughing.\n\nROSALIND\tThose that are in extremity of either are abominable\n\tfellows and betray themselves to every modern\n\tcensure worse than drunkards.\n\nJAQUES\tWhy, 'tis good to be sad and say nothing.\n\nROSALIND\tWhy then, 'tis good to be a post.\n\nJAQUES\tI have neither the scholar's melancholy, which is\n\temulation, nor the musician's, which is fantastical,\n\tnor the courtier's, which is proud, nor the\n\tsoldier's, which is ambitious, nor the lawyer's,\n\twhich is politic, nor the lady's, which is nice, nor\n\tthe lover's, which is all these: but it is a\n\tmelancholy of mine own, compounded of many simples,\n\textracted from many objects, and indeed the sundry's\n\tcontemplation of my travels, in which my often\n\trumination wraps me m a most humorous sadness.\n\nROSALIND\tA traveller! By my faith, you have great reason to\n\tbe sad: I fear you have sold your own lands to see\n\tother men's; then, to have seen much and to have\n\tnothing, is to have rich eyes and poor hands.\n\nJAQUES\tYes, I have gained my experience.\n\nROSALIND\tAnd your experience makes you sad: I had rather have\n\ta fool to make me merry than experience to make me\n\tsad; and to travel for it too!\n\n\t[Enter ORLANDO]\n\nORLANDO\tGood day and happiness, dear Rosalind!\n\nJAQUES\tNay, then, God be wi' you, an you talk in blank verse.\n\n\t[Exit]\n\nROSALIND\tFarewell, Monsieur Traveller: look you lisp and\n\twear strange suits, disable all the benefits of your\n\town country, be out of love with your nativity and\n\talmost chide God for making you that countenance you\n\tare, or I will scarce think you have swam in a\n\tgondola. Why, how now, Orlando! where have you been\n\tall this while? You a lover! An you serve me such\n\tanother trick, never come in my sight more.\n\nORLANDO\tMy fair Rosalind, I come within an hour of my promise.\n\nROSALIND\tBreak an hour's promise in love! He that will\n\tdivide a minute into a thousand parts and break but\n\ta part of the thousandth part of a minute in the\n\taffairs of love, it may be said of him that Cupid\n\thath clapped him o' the shoulder, but I'll warrant\n\thim heart-whole.\n\nORLANDO\tPardon me, dear Rosalind.\n\nROSALIND\tNay, an you be so tardy, come no more in my sight: I\n\thad as lief be wooed of a snail.\n\nORLANDO\tOf a snail?\n\nROSALIND\tAy, of a snail; for though he comes slowly, he\n\tcarries his house on his head; a better jointure,\n\tI think, than you make a woman: besides he brings\n\this destiny with him.\n\nORLANDO\tWhat's that?\n\nROSALIND\tWhy, horns, which such as you are fain to be\n\tbeholding to your wives for: but he comes armed in\n\this fortune and prevents the slander of his wife.\n\nORLANDO\tVirtue is no horn-maker; and my Rosalind is virtuous.\n\nROSALIND\tAnd I am your Rosalind.\n\nCELIA\tIt pleases him to call you so; but he hath a\n\tRosalind of a better leer than you.\n\nROSALIND\tCome, woo me, woo me, for now I am in a holiday\n\thumour and like enough to consent. What would you\n\tsay to me now, an I were your very very Rosalind?\n\nORLANDO\tI would kiss before I spoke.\n\nROSALIND\tNay, you were better speak first, and when you were\n\tgravelled for lack of matter, you might take\n\toccasion to kiss. Very good orators, when they are\n\tout, they will spit; and for lovers lacking--God\n\twarn us!--matter, the cleanliest shift is to kiss.\n\nORLANDO\tHow if the kiss be denied?\n\nROSALIND\tThen she puts you to entreaty, and there begins new matter.\n\nORLANDO\tWho could be out, being before his beloved mistress?\n\nROSALIND\tMarry, that should you, if I were your mistress, or\n\tI should think my honesty ranker than my wit.\n\nORLANDO\tWhat, of my suit?\n\nROSALIND\tNot out of your apparel, and yet out of your suit.\n\tAm not I your Rosalind?\n\nORLANDO\tI take some joy to say you are, because I would be\n\ttalking of her.\n\nROSALIND\tWell in her person I say I will not have you.\n\nORLANDO\tThen in mine own person I die.\n\nROSALIND\tNo, faith, die by attorney. The poor world is\n\talmost six thousand years old, and in all this time\n\tthere was not any man died in his own person,\n\tvidelicit, in a love-cause. Troilus had his brains\n\tdashed out with a Grecian club; yet he did what he\n\tcould to die before, and he is one of the patterns\n\tof love. Leander, he would have lived many a fair\n\tyear, though Hero had turned nun, if it had not been\n\tfor a hot midsummer night; for, good youth, he went\n\tbut forth to wash him in the Hellespont and being\n\ttaken with the cramp was drowned and the foolish\n\tcoroners of that age found it was 'Hero of Sestos.'\n\tBut these are all lies: men have died from time to\n\ttime and worms have eaten them, but not for love.\n\nORLANDO\tI would not have my right Rosalind of this mind,\n\tfor, I protest, her frown might kill me.\n\nROSALIND\tBy this hand, it will not kill a fly. But come, now\n\tI will be your Rosalind in a more coming-on\n\tdisposition, and ask me what you will. I will grant\n\tit.\n\nORLANDO\tThen love me, Rosalind.\n\nROSALIND\tYes, faith, will I, Fridays and Saturdays and all.\n\nORLANDO\tAnd wilt thou have me?\n\nROSALIND\tAy, and twenty such.\n\nORLANDO\tWhat sayest thou?\n\nROSALIND\tAre you not good?\n\nORLANDO\tI hope so.\n\nROSALIND\tWhy then, can one desire too much of a good thing?\n\tCome, sister, you shall be the priest and marry us.\n\tGive me your hand, Orlando. What do you say, sister?\n\nORLANDO\tPray thee, marry us.\n\nCELIA\tI cannot say the words.\n\nROSALIND\tYou must begin, 'Will you, Orlando--'\n\nCELIA\tGo to. Will you, Orlando, have to wife this Rosalind?\n\nORLANDO\tI will.\n\nROSALIND\tAy, but when?\n\nORLANDO\tWhy now; as fast as she can marry us.\n\nROSALIND\tThen you must say 'I take thee, Rosalind, for wife.'\n\nORLANDO\tI take thee, Rosalind, for wife.\n\nROSALIND\tI might ask you for your commission; but I do take\n\tthee, Orlando, for my husband: there's a girl goes\n\tbefore the priest; and certainly a woman's thought\n\truns before her actions.\n\nORLANDO\tSo do all thoughts; they are winged.\n\nROSALIND\tNow tell me how long you would have her after you\n\thave possessed her.\n\nORLANDO\tFor ever and a day.\n\nROSALIND\tSay 'a day,' without the 'ever.' No, no, Orlando;\n\tmen are April when they woo, December when they wed:\n\tmaids are May when they are maids, but the sky\n\tchanges when they are wives. I will be more jealous\n\tof thee than a Barbary cock-pigeon over his hen,\n\tmore clamorous than a parrot against rain, more\n\tnew-fangled than an ape, more giddy in my desires\n\tthan a monkey: I will weep for nothing, like Diana\n\tin the fountain, and I will do that when you are\n\tdisposed to be merry; I will laugh like a hyen, and\n\tthat when thou art inclined to sleep.\n\nORLANDO\tBut will my Rosalind do so?\n\nROSALIND\tBy my life, she will do as I do.\n\nORLANDO\tO, but she is wise.\n\nROSALIND\tOr else she could not have the wit to do this: the\n\twiser, the waywarder: make the doors upon a woman's\n\twit and it will out at the casement; shut that and\n\t'twill out at the key-hole; stop that, 'twill fly\n\twith the smoke out at the chimney.\n\nORLANDO\tA man that had a wife with such a wit, he might say\n\t'Wit, whither wilt?'\n\nROSALIND\tNay, you might keep that cheque for it till you met\n\tyour wife's wit going to your neighbour's bed.\n\nORLANDO\tAnd what wit could wit have to excuse that?\n\nROSALIND\tMarry, to say she came to seek you there. You shall\n\tnever take her without her answer, unless you take\n\ther without her tongue. O, that woman that cannot\n\tmake her fault her husband's occasion, let her\n\tnever nurse her child herself, for she will breed\n\tit like a fool!\n\nORLANDO\tFor these two hours, Rosalind, I will leave thee.\n\nROSALIND\tAlas! dear love, I cannot lack thee two hours.\n\nORLANDO\tI must attend the duke at dinner: by two o'clock I\n\twill be with thee again.\n\nROSALIND\tAy, go your ways, go your ways; I knew what you\n\twould prove: my friends told me as much, and I\n\tthought no less: that flattering tongue of yours\n\twon me: 'tis but one cast away, and so, come,\n\tdeath! Two o'clock is your hour?\n\nORLANDO\tAy, sweet Rosalind.\n\nROSALIND\tBy my troth, and in good earnest, and so God mend\n\tme, and by all pretty oaths that are not dangerous,\n\tif you break one jot of your promise or come one\n\tminute behind your hour, I will think you the most\n\tpathetical break-promise and the most hollow lover\n\tand the most unworthy of her you call Rosalind that\n\tmay be chosen out of the gross band of the\n\tunfaithful: therefore beware my censure and keep\n\tyour promise.\n\nORLANDO\tWith no less religion than if thou wert indeed my\n\tRosalind: so adieu.\n\nROSALIND\tWell, Time is the old justice that examines all such\n\toffenders, and let Time try: adieu.\n\n\t[Exit ORLANDO]\n\nCELIA\tYou have simply misused our sex in your love-prate:\n\twe must have your doublet and hose plucked over your\n\thead, and show the world what the bird hath done to\n\ther own nest.\n\nROSALIND\tO coz, coz, coz, my pretty little coz, that thou\n\tdidst know how many fathom deep I am in love! But\n\tit cannot be sounded: my affection hath an unknown\n\tbottom, like the bay of Portugal.\n\nCELIA\tOr rather, bottomless, that as fast as you pour\n\taffection in, it runs out.\n\nROSALIND\tNo, that same wicked bastard of Venus that was begot\n\tof thought, conceived of spleen and born of madness,\n\tthat blind rascally boy that abuses every one's eyes\n\tbecause his own are out, let him be judge how deep I\n\tam in love. I'll tell thee, Aliena, I cannot be out\n\tof the sight of Orlando: I'll go find a shadow and\n\tsigh till he come.\n\nCELIA\tAnd I'll sleep.\n\n\t[Exeunt]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT IV\n\n\n\nSCENE II\tThe forest.\n\n\n\t[Enter JAQUES, Lords, and Foresters]\n\nJAQUES\tWhich is he that killed the deer?\n\nA Lord\tSir, it was I.\n\nJAQUES\tLet's present him to the duke, like a Roman\n\tconqueror; and it would do well to set the deer's\n\thorns upon his head, for a branch of victory. Have\n\tyou no song, forester, for this purpose?\n\nForester\tYes, sir.\n\nJAQUES\tSing it: 'tis no matter how it be in tune, so it\n\tmake noise enough.\n\t\n\tSONG.\nForester\tWhat shall he have that kill'd the deer?\n\tHis leather skin and horns to wear.\n\tThen sing him home;\n\n\t[The rest shall bear this burden]\n\n\tTake thou no scorn to wear the horn;\n\tIt was a crest ere thou wast born:\n\tThy father's father wore it,\n\tAnd thy father bore it:\n\tThe horn, the horn, the lusty horn\n\tIs not a thing to laugh to scorn.\n\n\t[Exeunt]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT IV\n\n\n\nSCENE III\tThe forest.\n\n\n\t[Enter ROSALIND and CELIA]\n\nROSALIND\tHow say you now? Is it not past two o'clock? and\n\there much Orlando!\n\nCELIA\tI warrant you, with pure love and troubled brain, he\n\thath ta'en his bow and arrows and is gone forth to\n\tsleep. Look, who comes here.\n\n\t[Enter SILVIUS]\n\nSILVIUS\tMy errand is to you, fair youth;\n\tMy gentle Phebe bid me give you this:\n\tI know not the contents; but, as I guess\n\tBy the stern brow and waspish action\n\tWhich she did use as she was writing of it,\n\tIt bears an angry tenor: pardon me:\n\tI am but as a guiltless messenger.\n\nROSALIND\tPatience herself would startle at this letter\n\tAnd play the swaggerer; bear this, bear all:\n\tShe says I am not fair, that I lack manners;\n\tShe calls me proud, and that she could not love me,\n\tWere man as rare as phoenix. 'Od's my will!\n\tHer love is not the hare that I do hunt:\n\tWhy writes she so to me? Well, shepherd, well,\n\tThis is a letter of your own device.\n\nSILVIUS\tNo, I protest, I know not the contents:\n\tPhebe did write it.\n\nROSALIND\tCome, come, you are a fool\n\tAnd turn'd into the extremity of love.\n\tI saw her hand: she has a leathern hand.\n\tA freestone-colour'd hand; I verily did think\n\tThat her old gloves were on, but 'twas her hands:\n\tShe has a huswife's hand; but that's no matter:\n\tI say she never did invent this letter;\n\tThis is a man's invention and his hand.\n\nSILVIUS\tSure, it is hers.\n\nROSALIND\tWhy, 'tis a boisterous and a cruel style.\n\tA style for-challengers; why, she defies me,\n\tLike Turk to Christian: women's gentle brain\n\tCould not drop forth such giant-rude invention\n\tSuch Ethiope words, blacker in their effect\n\tThan in their countenance. Will you hear the letter?\n\nSILVIUS\tSo please you, for I never heard it yet;\n\tYet heard too much of Phebe's cruelty.\n\nROSALIND\tShe Phebes me: mark how the tyrant writes.\n\n\t[Reads]\n\n\tArt thou god to shepherd turn'd,\n\tThat a maiden's heart hath burn'd?\n\tCan a woman rail thus?\n\nSILVIUS\tCall you this railing?\n\nROSALIND\t[Reads]\n\n\tWhy, thy godhead laid apart,\n\tWarr'st thou with a woman's heart?\n\tDid you ever hear such railing?\n\tWhiles the eye of man did woo me,\n\tThat could do no vengeance to me.\n\tMeaning me a beast.\n\tIf the scorn of your bright eyne\n\tHave power to raise such love in mine,\n\tAlack, in me what strange effect\n\tWould they work in mild aspect!\n\tWhiles you chid me, I did love;\n\tHow then might your prayers move!\n\tHe that brings this love to thee\n\tLittle knows this love in me:\n\tAnd by him seal up thy mind;\n\tWhether that thy youth and kind\n\tWill the faithful offer take\n\tOf me and all that I can make;\n\tOr else by him my love deny,\n\tAnd then I'll study how to die.\n\nSILVIUS\tCall you this chiding?\n\nCELIA\tAlas, poor shepherd!\n\nROSALIND\tDo you pity him? no, he deserves no pity. Wilt\n\tthou love such a woman? What, to make thee an\n\tinstrument and play false strains upon thee! not to\n\tbe endured! Well, go your way to her, for I see\n\tlove hath made thee a tame snake, and say this to\n\ther: that if she love me, I charge her to love\n\tthee; if she will not, I will never have her unless\n\tthou entreat for her. If you be a true lover,\n\thence, and not a word; for here comes more company.\n\n\t[Exit SILVIUS]\n\n\t[Enter OLIVER]\n\nOLIVER\tGood morrow, fair ones: pray you, if you know,\n\tWhere in the purlieus of this forest stands\n\tA sheep-cote fenced about with olive trees?\n\nCELIA\tWest of this place, down in the neighbour bottom:\n\tThe rank of osiers by the murmuring stream\n\tLeft on your right hand brings you to the place.\n\tBut at this hour the house doth keep itself;\n\tThere's none within.\n\nOLIVER\tIf that an eye may profit by a tongue,\n\tThen should I know you by description;\n\tSuch garments and such years: 'The boy is fair,\n\tOf female favour, and bestows himself\n\tLike a ripe sister: the woman low\n\tAnd browner than her brother.' Are not you\n\tThe owner of the house I did inquire for?\n\nCELIA\tIt is no boast, being ask'd, to say we are.\n\nOLIVER\tOrlando doth commend him to you both,\n\tAnd to that youth he calls his Rosalind\n\tHe sends this bloody napkin. Are you he?\n\nROSALIND\tI am: what must we understand by this?\n\nOLIVER\tSome of my shame; if you will know of me\n\tWhat man I am, and how, and why, and where\n\tThis handkercher was stain'd.\n\nCELIA\tI pray you, tell it.\n\nOLIVER\tWhen last the young Orlando parted from you\n\tHe left a promise to return again\n\tWithin an hour, and pacing through the forest,\n\tChewing the food of sweet and bitter fancy,\n\tLo, what befell! he threw his eye aside,\n\tAnd mark what object did present itself:\n\tUnder an oak, whose boughs were moss'd with age\n\tAnd high top bald with dry antiquity,\n\tA wretched ragged man, o'ergrown with hair,\n\tLay sleeping on his back: about his neck\n\tA green and gilded snake had wreathed itself,\n\tWho with her head nimble in threats approach'd\n\tThe opening of his mouth; but suddenly,\n\tSeeing Orlando, it unlink'd itself,\n\tAnd with indented glides did slip away\n\tInto a bush: under which bush's shade\n\tA lioness, with udders all drawn dry,\n\tLay couching, head on ground, with catlike watch,\n\tWhen that the sleeping man should stir; for 'tis\n\tThe royal disposition of that beast\n\tTo prey on nothing that doth seem as dead:\n\tThis seen, Orlando did approach the man\n\tAnd found it was his brother, his elder brother.\n\nCELIA\tO, I have heard him speak of that same brother;\n\tAnd he did render him the most unnatural\n\tThat lived amongst men.\n\nOLIVER\tAnd well he might so do,\n\tFor well I know he was unnatural.\n\nROSALIND\tBut, to Orlando: did he leave him there,\n\tFood to the suck'd and hungry lioness?\n\nOLIVER\tTwice did he turn his back and purposed so;\n\tBut kindness, nobler ever than revenge,\n\tAnd nature, stronger than his just occasion,\n\tMade him give battle to the lioness,\n\tWho quickly fell before him: in which hurtling\n\tFrom miserable slumber I awaked.\n\nCELIA\tAre you his brother?\n\nROSALIND\tWast you he rescued?\n\nCELIA\tWas't you that did so oft contrive to kill him?\n\nOLIVER\t'Twas I; but 'tis not I\tI do not shame\n\tTo tell you what I was, since my conversion\n\tSo sweetly tastes, being the thing I am.\n\nROSALIND\tBut, for the bloody napkin?\n\nOLIVER\tBy and by.\n\tWhen from the first to last betwixt us two\n\tTears our recountments had most kindly bathed,\n\tAs how I came into that desert place:--\n\tIn brief, he led me to the gentle duke,\n\tWho gave me fresh array and entertainment,\n\tCommitting me unto my brother's love;\n\tWho led me instantly unto his cave,\n\tThere stripp'd himself, and here upon his arm\n\tThe lioness had torn some flesh away,\n\tWhich all this while had bled; and now he fainted\n\tAnd cried, in fainting, upon Rosalind.\n\tBrief, I recover'd him, bound up his wound;\n\tAnd, after some small space, being strong at heart,\n\tHe sent me hither, stranger as I am,\n\tTo tell this story, that you might excuse\n\tHis broken promise, and to give this napkin\n\tDyed in his blood unto the shepherd youth\n\tThat he in sport doth call his Rosalind.\n\n\t[ROSALIND swoons]\n\nCELIA\tWhy, how now, Ganymede! sweet Ganymede!\n\nOLIVER\tMany will swoon when they do look on blood.\n\nCELIA\tThere is more in it. Cousin Ganymede!\n\nOLIVER\tLook, he recovers.\n\nROSALIND\tI would I were at home.\n\nCELIA\tWe'll lead you thither.\n\tI pray you, will you take him by the arm?\n\nOLIVER\tBe of good cheer, youth: you a man! you lack a\n\tman's heart.\n\nROSALIND\tI do so, I confess it. Ah, sirrah, a body would\n\tthink this was well counterfeited! I pray you, tell\n\tyour brother how well I counterfeited. Heigh-ho!\n\nOLIVER\tThis was not counterfeit: there is too great\n\ttestimony in your complexion that it was a passion\n\tof earnest.\n\nROSALIND\tCounterfeit, I assure you.\n\nOLIVER\tWell then, take a good heart and counterfeit to be a man.\n\nROSALIND\tSo I do: but, i' faith, I should have been a woman by right.\n\nCELIA\tCome, you look paler and paler: pray you, draw\n\thomewards. Good sir, go with us.\n\nOLIVER\tThat will I, for I must bear answer back\n\tHow you excuse my brother, Rosalind.\n\nROSALIND\tI shall devise something: but, I pray you, commend\n\tmy counterfeiting to him. Will you go?\n\n\t[Exeunt]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT V\n\n\n\nSCENE I\tThe forest.\n\n\n\t[Enter TOUCHSTONE and AUDREY]\n\nTOUCHSTONE\tWe shall find a time, Audrey; patience, gentle Audrey.\n\nAUDREY\tFaith, the priest was good enough, for all the old\n\tgentleman's saying.\n\nTOUCHSTONE\tA most wicked Sir Oliver, Audrey, a most vile\n\tMartext. But, Audrey, there is a youth here in the\n\tforest lays claim to you.\n\nAUDREY\tAy, I know who 'tis; he hath no interest in me in\n\tthe world: here comes the man you mean.\n\nTOUCHSTONE\tIt is meat and drink to me to see a clown: by my\n\ttroth, we that have good wits have much to answer\n\tfor; we shall be flouting; we cannot hold.\n\n\t[Enter WILLIAM]\n\nWILLIAM\tGood even, Audrey.\n\nAUDREY\tGod ye good even, William.\n\nWILLIAM\tAnd good even to you, sir.\n\nTOUCHSTONE\tGood even, gentle friend. Cover thy head, cover thy\n\thead; nay, prithee, be covered. How old are you, friend?\n\nWILLIAM\tFive and twenty, sir.\n\nTOUCHSTONE\tA ripe age. Is thy name William?\n\nWILLIAM\tWilliam, sir.\n\nTOUCHSTONE\tA fair name. Wast born i' the forest here?\n\nWILLIAM\tAy, sir, I thank God.\n\nTOUCHSTONE\t'Thank God;' a good answer. Art rich?\n\nWILLIAM\tFaith, sir, so so.\n\nTOUCHSTONE\t'So so' is good, very good, very excellent good; and\n\tyet it is not; it is but so so. Art thou wise?\n\nWILLIAM\tAy, sir, I have a pretty wit.\n\nTOUCHSTONE\tWhy, thou sayest well. I do now remember a saying,\n\t'The fool doth think he is wise, but the wise man\n\tknows himself to be a fool.' The heathen\n\tphilosopher, when he had a desire to eat a grape,\n\twould open his lips when he put it into his mouth;\n\tmeaning thereby that grapes were made to eat and\n\tlips to open. You do love this maid?\n\nWILLIAM\tI do, sir.\n\nTOUCHSTONE\tGive me your hand. Art thou learned?\n\nWILLIAM\tNo, sir.\n\nTOUCHSTONE\tThen learn this of me: to have, is to have; for it\n\tis a figure in rhetoric that drink, being poured out\n\tof a cup into a glass, by filling the one doth empty\n\tthe other; for all your writers do consent that ipse\n\tis he: now, you are not ipse, for I am he.\n\nWILLIAM\tWhich he, sir?\n\nTOUCHSTONE\tHe, sir, that must marry this woman. Therefore, you\n\tclown, abandon,--which is in the vulgar leave,--the\n\tsociety,--which in the boorish is company,--of this\n\tfemale,--which in the common is woman; which\n\ttogether is, abandon the society of this female, or,\n\tclown, thou perishest; or, to thy better\n\tunderstanding, diest; or, to wit I kill thee, make\n\tthee away, translate thy life into death, thy\n\tliberty into bondage: I will deal in poison with\n\tthee, or in bastinado, or in steel; I will bandy\n\twith thee in faction; I will o'errun thee with\n\tpolicy; I will kill thee a hundred and fifty ways:\n\ttherefore tremble and depart.\n\nAUDREY\tDo, good William.\n\nWILLIAM\tGod rest you merry, sir.\n\n\t[Exit]\n\n\t[Enter CORIN]\n\nCORIN\tOur master and mistress seeks you; come, away, away!\n\nTOUCHSTONE\tTrip, Audrey! trip, Audrey! I attend, I attend.\n\n\t[Exeunt]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT V\n\n\n\nSCENE II\tThe forest.\n\n\n\t[Enter ORLANDO and OLIVER]\n\nORLANDO\tIs't possible that on so little acquaintance you\n\tshould like her? that but seeing you should love\n\ther? and loving woo? and, wooing, she should\n\tgrant? and will you persever to enjoy her?\n\nOLIVER\tNeither call the giddiness of it in question, the\n\tpoverty of her, the small acquaintance, my sudden\n\twooing, nor her sudden consenting; but say with me,\n\tI love Aliena; say with her that she loves me;\n\tconsent with both that we may enjoy each other: it\n\tshall be to your good; for my father's house and all\n\tthe revenue that was old Sir Rowland's will I\n\testate upon you, and here live and die a shepherd.\n\nORLANDO\tYou have my consent. Let your wedding be to-morrow:\n\tthither will I invite the duke and all's contented\n\tfollowers. Go you and prepare Aliena; for look\n\tyou, here comes my Rosalind.\n\n\t[Enter ROSALIND]\n\nROSALIND\tGod save you, brother.\n\nOLIVER\tAnd you, fair sister.\n\n\t[Exit]\n\nROSALIND\tO, my dear Orlando, how it grieves me to see thee\n\twear thy heart in a scarf!\n\nORLANDO\tIt is my arm.\n\nROSALIND\tI thought thy heart had been wounded with the claws\n\tof a lion.\n\nORLANDO\tWounded it is, but with the eyes of a lady.\n\nROSALIND\tDid your brother tell you how I counterfeited to\n\tswoon when he showed me your handkerchief?\n\nORLANDO\tAy, and greater wonders than that.\n\nROSALIND\tO, I know where you are: nay, 'tis true: there was\n\tnever any thing so sudden but the fight of two rams\n\tand Caesar's thrasonical brag of 'I came, saw, and\n\tovercame:' for your brother and my sister no sooner\n\tmet but they looked, no sooner looked but they\n\tloved, no sooner loved but they sighed, no sooner\n\tsighed but they asked one another the reason, no\n\tsooner knew the reason but they sought the remedy;\n\tand in these degrees have they made a pair of stairs\n\tto marriage which they will climb incontinent, or\n\telse be incontinent before marriage: they are in\n\tthe very wrath of love and they will together; clubs\n\tcannot part them.\n\nORLANDO\tThey shall be married to-morrow, and I will bid the\n\tduke to the nuptial. But, O, how bitter a thing it\n\tis to look into happiness through another man's\n\teyes! By so much the more shall I to-morrow be at\n\tthe height of heart-heaviness, by how much I shall\n\tthink my brother happy in having what he wishes for.\n\nROSALIND\tWhy then, to-morrow I cannot serve your turn for Rosalind?\n\nORLANDO\tI can live no longer by thinking.\n\nROSALIND\tI will weary you then no longer with idle talking.\n\tKnow of me then, for now I speak to some purpose,\n\tthat I know you are a gentleman of good conceit: I\n\tspeak not this that you should bear a good opinion\n\tof my knowledge, insomuch I say I know you are;\n\tneither do I labour for a greater esteem than may in\n\tsome little measure draw a belief from you, to do\n\tyourself good and not to grace me. Believe then, if\n\tyou please, that I can do strange things: I have,\n\tsince I was three year old, conversed with a\n\tmagician, most profound in his art and yet not\n\tdamnable. If you do love Rosalind so near the heart\n\tas your gesture cries it out, when your brother\n\tmarries Aliena, shall you marry her: I know into\n\twhat straits of fortune she is driven; and it is\n\tnot impossible to me, if it appear not inconvenient\n\tto you, to set her before your eyes tomorrow human\n\tas she is and without any danger.\n\nORLANDO\tSpeakest thou in sober meanings?\n\nROSALIND\tBy my life, I do; which I tender dearly, though I\n\tsay I am a magician. Therefore, put you in your\n\tbest array: bid your friends; for if you will be\n\tmarried to-morrow, you shall, and to Rosalind, if you will.\n\n\t[Enter SILVIUS and PHEBE]\n\n\tLook, here comes a lover of mine and a lover of hers.\n\nPHEBE\tYouth, you have done me much ungentleness,\n\tTo show the letter that I writ to you.\n\nROSALIND\tI care not if I have: it is my study\n\tTo seem despiteful and ungentle to you:\n\tYou are there followed by a faithful shepherd;\n\tLook upon him, love him; he worships you.\n\nPHEBE\tGood shepherd, tell this youth what 'tis to love.\n\nSILVIUS\tIt is to be all made of sighs and tears;\n\tAnd so am I for Phebe.\n\nPHEBE\tAnd I for Ganymede.\n\nORLANDO\tAnd I for Rosalind.\n\nROSALIND\tAnd I for no woman.\n\nSILVIUS\tIt is to be all made of faith and service;\n\tAnd so am I for Phebe.\n\nPHEBE\tAnd I for Ganymede.\n\nORLANDO\tAnd I for Rosalind.\n\nROSALIND\tAnd I for no woman.\n\nSILVIUS\tIt is to be all made of fantasy,\n\tAll made of passion and all made of wishes,\n\tAll adoration, duty, and observance,\n\tAll humbleness, all patience and impatience,\n\tAll purity, all trial, all observance;\n\tAnd so am I for Phebe.\n\nPHEBE\tAnd so am I for Ganymede.\n\nORLANDO\tAnd so am I for Rosalind.\n\nROSALIND\tAnd so am I for no woman.\n\nPHEBE\tIf this be so, why blame you me to love you?\n\nSILVIUS\tIf this be so, why blame you me to love you?\n\nORLANDO\tIf this be so, why blame you me to love you?\n\nROSALIND\tWho do you speak to, 'Why blame you me to love you?'\n\nORLANDO\tTo her that is not here, nor doth not hear.\n\nROSALIND\tPray you, no more of this; 'tis like the howling\n\tof Irish wolves against the moon.\n\n\t[To SILVIUS]\n\n\tI will help you, if I can:\n\n\t[To PHEBE]\n\n\tI would love you, if I could. To-morrow meet me all together.\n\n\t[To PHEBE]\n\n\tI will marry you, if ever I marry woman, and I'll be\n\tmarried to-morrow:\n\n\t[To ORLANDO]\n\n\tI will satisfy you, if ever I satisfied man, and you\n\tshall be married to-morrow:\n\n\t[To SILVIUS]\n\n\tI will content you, if what pleases you contents\n\tyou, and you shall be married to-morrow.\n\n\t[To ORLANDO]\n\n\tAs you love Rosalind, meet:\n\n\t[To SILVIUS]\n\n\tas you love Phebe, meet: and as I love no woman,\n\tI'll meet. So fare you well: I have left you commands.\n\nSILVIUS\tI'll not fail, if I live.\n\nPHEBE\tNor I.\n\nORLANDO\tNor I.\n\n\t[Exeunt]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT V\n\n\n\nSCENE III\tThe forest.\n\n\n\t[Enter TOUCHSTONE and AUDREY]\n\nTOUCHSTONE\tTo-morrow is the joyful day, Audrey; to-morrow will\n\twe be married.\n\nAUDREY\tI do desire it with all my heart; and I hope it is\n\tno dishonest desire to desire to be a woman of the\n\tworld. Here comes two of the banished duke's pages.\n\n\t[Enter two Pages]\n\nFirst Page\tWell met, honest gentleman.\n\nTOUCHSTONE\tBy my troth, well met. Come, sit, sit, and a song.\n\nSecond Page\tWe are for you: sit i' the middle.\n\nFirst Page\tShall we clap into't roundly, without hawking or\n\tspitting or saying we are hoarse, which are the only\n\tprologues to a bad voice?\n\nSecond Page\tI'faith, i'faith; and both in a tune, like two\n\tgipsies on a horse.\n\t\n\tSONG.\n\tIt was a lover and his lass,\n\tWith a hey, and a ho, and a hey nonino,\n\tThat o'er the green corn-field did pass\n\tIn the spring time, the only pretty ring time,\n\tWhen birds do sing, hey ding a ding, ding:\n\tSweet lovers love the spring.\n\n\tBetween the acres of the rye,\n\tWith a hey, and a ho, and a hey nonino\n\tThese pretty country folks would lie,\n\tIn spring time, &c.\n\n\tThis carol they began that hour,\n\tWith a hey, and a ho, and a hey nonino,\n\tHow that a life was but a flower\n\tIn spring time, &c.\n\n\tAnd therefore take the present time,\n\tWith a hey, and a ho, and a hey nonino;\n\tFor love is crowned with the prime\n\tIn spring time, &c.\n\nTOUCHSTONE\tTruly, young gentlemen, though there was no great\n\tmatter in the ditty, yet the note was very\n\tuntuneable.\n\nFirst Page\tYou are deceived, sir: we kept time, we lost not our time.\n\nTOUCHSTONE\tBy my troth, yes; I count it but time lost to hear\n\tsuch a foolish song. God be wi' you; and God mend\n\tyour voices! Come, Audrey.\n\n\t[Exeunt]\n\n\n\n\n\tAS YOU LIKE IT\n\n\nACT V\n\n\n\nSCENE IV\tThe forest.\n\n\n\t[Enter DUKE SENIOR, AMIENS, JAQUES, ORLANDO, OLIVER,\n\tand CELIA]\n\nDUKE SENIOR\tDost thou believe, Orlando, that the boy\n\tCan do all this that he hath promised?\n\nORLANDO\tI sometimes do believe, and sometimes do not;\n\tAs those that fear they hope, and know they fear.\n\n\t[Enter ROSALIND, SILVIUS, and PHEBE]\n\nROSALIND\tPatience once more, whiles our compact is urged:\n\tYou say, if I bring in your Rosalind,\n\tYou will bestow her on Orlando here?\n\nDUKE SENIOR\tThat would I, had I kingdoms to give with her.\n\nROSALIND\tAnd you say, you will have her, when I bring her?\n\nORLANDO\tThat would I, were I of all kingdoms king.\n\nROSALIND\tYou say, you'll marry me, if I be willing?\n\nPHEBE\tThat will I, should I die the hour after.\n\nROSALIND\tBut if you do refuse to marry me,\n\tYou'll give yourself to this most faithful shepherd?\n\nPHEBE\tSo is the bargain.\n\nROSALIND\tYou say, that you'll have Phebe, if she will?\n\nSILVIUS\tThough to have her and death were both one thing.\n\nROSALIND\tI have promised to make all this matter even.\n\tKeep you your word, O duke, to give your daughter;\n\tYou yours, Orlando, to receive his daughter:\n\tKeep your word, Phebe, that you'll marry me,\n\tOr else refusing me, to wed this shepherd:\n\tKeep your word, Silvius, that you'll marry her.\n\tIf she refuse me: and from hence I go,\n\tTo make these doubts all even.\n\n\t[Exeunt ROSALIND and CELIA]\n\nDUKE SENIOR\tI do remember in this shepherd boy\n\tSome lively touches of my daughter's favour.\n\nORLANDO\tMy lord, the first time that I ever saw him\n\tMethought he was a brother to your daughter:\n\tBut, my good lord, this boy is forest-born,\n\tAnd hath been tutor'd in the rudiments\n\tOf many desperate studies by his uncle,\n\tWhom he reports to be a great magician,\n\tObscured in the circle of this forest.\n\n\t[Enter TOUCHSTONE and AUDREY]\n\nJAQUES\tThere is, sure, another flood toward, and these\n\tcouples are coming to the ark. Here comes a pair of\n\tvery strange beasts, which in all tongues are called fools.\n\nTOUCHSTONE\tSalutation and greeting to you all!\n\nJAQUES\tGood my lord, bid him welcome: this is the\n\tmotley-minded gentleman that I have so often met in\n\tthe forest: he hath been a courtier, he swears.\n\nTOUCHSTONE\tIf any man doubt that, let him put me to my\n\tpurgation. I have trod a measure; I have flattered\n\ta lady; I have been politic with my friend, smooth\n\twith mine enemy; I have undone three tailors; I have\n\thad four quarrels, and like to have fought one.\n\nJAQUES\tAnd how was that ta'en up?\n\nTOUCHSTONE\tFaith, we met, and found the quarrel was upon the\n\tseventh cause.\n\nJAQUES\tHow seventh cause? Good my lord, like this fellow.\n\nDUKE SENIOR\tI like him very well.\n\nTOUCHSTONE\tGod 'ild you, sir; I desire you of the like. I\n\tpress in here, sir, amongst the rest of the country\n\tcopulatives, to swear and to forswear: according as\n\tmarriage binds and blood breaks: a poor virgin,\n\tsir, an ill-favoured thing, sir, but mine own; a poor\n\thumour of mine, sir, to take that that no man else\n\twill: rich honesty dwells like a miser, sir, in a\n\tpoor house; as your pearl in your foul oyster.\n\nDUKE SENIOR\tBy my faith, he is very swift and sententious.\n\nTOUCHSTONE\tAccording to the fool's bolt, sir, and such dulcet diseases.\n\nJAQUES\tBut, for the seventh cause; how did you find the\n\tquarrel on the seventh cause?\n\nTOUCHSTONE\tUpon a lie seven times removed:--bear your body more\n\tseeming, Audrey:--as thus, sir. I did dislike the\n\tcut of a certain courtier's beard: he sent me word,\n\tif I said his beard was not cut well, he was in the\n\tmind it was: this is called the Retort Courteous.\n\tIf I sent him word again 'it was not well cut,' he\n\twould send me word, he cut it to please himself:\n\tthis is called the Quip Modest. If again 'it was\n\tnot well cut,' he disabled my judgment: this is\n\tcalled the Reply Churlish. If again 'it was not\n\twell cut,' he would answer, I spake not true: this\n\tis called the Reproof Valiant. If again 'it was not\n\twell cut,' he would say I lied: this is called the\n\tCounter-cheque Quarrelsome: and so to the Lie\n\tCircumstantial and the Lie Direct.\n\nJAQUES\tAnd how oft did you say his beard was not well cut?\n\nTOUCHSTONE\tI durst go no further than the Lie Circumstantial,\n\tnor he durst not give me the Lie Direct; and so we\n\tmeasured swords and parted.\n\nJAQUES\tCan you nominate in order now the degrees of the lie?\n\nTOUCHSTONE\tO sir, we quarrel in print, by the book; as you have\n\tbooks for good manners: I will name you the degrees.\n\tThe first, the Retort Courteous; the second, the\n\tQuip Modest; the third, the Reply Churlish; the\n\tfourth, the Reproof Valiant; the fifth, the\n\tCountercheque Quarrelsome; the sixth, the Lie with\n\tCircumstance; the seventh, the Lie Direct. All\n\tthese you may avoid but the Lie Direct; and you may\n\tavoid that too, with an If. I knew when seven\n\tjustices could not take up a quarrel, but when the\n\tparties were met themselves, one of them thought but\n\tof an If, as, 'If you said so, then I said so;' and\n\tthey shook hands and swore brothers. Your If is the\n\tonly peacemaker; much virtue in If.\n\nJAQUES\tIs not this a rare fellow, my lord? he's as good at\n\tany thing and yet a fool.\n\nDUKE SENIOR\tHe uses his folly like a stalking-horse and under\n\tthe presentation of that he shoots his wit.\n\n\t[Enter HYMEN, ROSALIND, and CELIA]\n\n\t[Still Music]\n\nHYMEN\t        Then is there mirth in heaven,\n\tWhen earthly things made even\n\tAtone together.\n\tGood duke, receive thy daughter\n\tHymen from heaven brought her,\n\tYea, brought her hither,\n\tThat thou mightst join her hand with his\n\tWhose heart within his bosom is.\n\nROSALIND\t[To DUKE SENIOR]  To you I give myself, for I am yours.\n\n\t[To ORLANDO]\n\n\tTo you I give myself, for I am yours.\n\nDUKE SENIOR\tIf there be truth in sight, you are my daughter.\n\nORLANDO\tIf there be truth in sight, you are my Rosalind.\n\nPHEBE\tIf sight and shape be true,\n\tWhy then, my love adieu!\n\nROSALIND\tI'll have no father, if you be not he:\n\tI'll have no husband, if you be not he:\n\tNor ne'er wed woman, if you be not she.\n\nHYMEN\t        Peace, ho! I bar confusion:\n\t'Tis I must make conclusion\n\tOf these most strange events:\n\tHere's eight that must take hands\n\tTo join in Hymen's bands,\n\tIf truth holds true contents.\n\tYou and you no cross shall part:\n\tYou and you are heart in heart\n\tYou to his love must accord,\n\tOr have a woman to your lord:\n\tYou and you are sure together,\n\tAs the winter to foul weather.\n\tWhiles a wedlock-hymn we sing,\n\tFeed yourselves with questioning;\n\tThat reason wonder may diminish,\n\tHow thus we met, and these things finish.\n\t\n\tSONG.\n\tWedding is great Juno's crown:\n\tO blessed bond of board and bed!\n\t'Tis Hymen peoples every town;\n\tHigh wedlock then be honoured:\n\tHonour, high honour and renown,\n\tTo Hymen, god of every town!\n\nDUKE SENIOR\tO my dear niece, welcome thou art to me!\n\tEven daughter, welcome, in no less degree.\n\nPHEBE\tI will not eat my word, now thou art mine;\n\tThy faith my fancy to thee doth combine.\n\n\t[Enter JAQUES DE BOYS]\n\nJAQUES DE BOYS\tLet me have audience for a word or two:\n\tI am the second son of old Sir Rowland,\n\tThat bring these tidings to this fair assembly.\n\tDuke Frederick, hearing how that every day\n\tMen of great worth resorted to this forest,\n\tAddress'd a mighty power; which were on foot,\n\tIn his own conduct, purposely to take\n\tHis brother here and put him to the sword:\n\tAnd to the skirts of this wild wood he came;\n\tWhere meeting with an old religious man,\n\tAfter some question with him, was converted\n\tBoth from his enterprise and from the world,\n\tHis crown bequeathing to his banish'd brother,\n\tAnd all their lands restored to them again\n\tThat were with him exiled. This to be true,\n\tI do engage my life.\n\nDUKE SENIOR\tWelcome, young man;\n\tThou offer'st fairly to thy brothers' wedding:\n\tTo one his lands withheld, and to the other\n\tA land itself at large, a potent dukedom.\n\tFirst, in this forest, let us do those ends\n\tThat here were well begun and well begot:\n\tAnd after, every of this happy number\n\tThat have endured shrewd days and nights with us\n\tShall share the good of our returned fortune,\n\tAccording to the measure of their states.\n\tMeantime, forget this new-fall'n dignity\n\tAnd fall into our rustic revelry.\n\tPlay, music! And you, brides and bridegrooms all,\n\tWith measure heap'd in joy, to the measures fall.\n\nJAQUES\tSir, by your patience. If I heard you rightly,\n\tThe duke hath put on a religious life\n\tAnd thrown into neglect the pompous court?\n\nJAQUES DE BOYS\tHe hath.\n\nJAQUES\tTo him will I : out of these convertites\n\tThere is much matter to be heard and learn'd.\n\n\t[To DUKE SENIOR]\n\n\tYou to your former honour I bequeath;\n\tYour patience and your virtue well deserves it:\n\n\t[To ORLANDO]\n\n\tYou to a love that your true faith doth merit:\n\n\t[To OLIVER]\n\n\tYou to your land and love and great allies:\n\n\t[To SILVIUS]\n\n\tYou to a long and well-deserved bed:\n\n\t[To TOUCHSTONE]\n\n\tAnd you to wrangling; for thy loving voyage\n\tIs but for two months victuall'd. So, to your pleasures:\n\tI am for other than for dancing measures.\n\nDUKE SENIOR\tStay, Jaques, stay.\n\nJAQUES\tTo see no pastime I\twhat you would have\n\tI'll stay to know at your abandon'd cave.\n\n\t[Exit]\n\nDUKE SENIOR\tProceed, proceed: we will begin these rites,\n\tAs we do trust they'll end, in true delights.\n\n\t[A dance]\n\n\n\n\n\tAS YOU LIKE IT\n\n\tEPILOGUE\n\n\nROSALIND\tIt is not the fashion to see the lady the epilogue;\n\tbut it is no more unhandsome than to see the lord\n\tthe prologue. If it be true that good wine needs\n\tno bush, 'tis true that a good play needs no\n\tepilogue; yet to good wine they do use good bushes,\n\tand good plays prove the better by the help of good\n\tepilogues. What a case am I in then, that am\n\tneither a good epilogue nor cannot insinuate with\n\tyou in the behalf of a good play! I am not\n\tfurnished like a beggar, therefore to beg will not\n\tbecome me: my way is to conjure you; and I'll begin\n\twith the women. I charge you, O women, for the love\n\tyou bear to men, to like as much of this play as\n\tplease you: and I charge you, O men, for the love\n\tyou bear to women--as I perceive by your simpering,\n\tnone of you hates them--that between you and the\n\twomen the play may please. If I were a woman I\n\twould kiss as many of you as had beards that pleased\n\tme, complexions that liked me and breaths that I\n\tdefied not: and, I am sure, as many as have good\n\tbeards or good faces or sweet breaths will, for my\n\tkind offer, when I make curtsy, bid me farewell.\n\n\t[Exeunt]\n"
  },
  {
    "path": "tests/testdata/cp852-utf8",
    "content": "The following table shows code page 852. Each character is shown with its equivalent Unicode code point. Only the second half of the table (128–255) is shown, the first half (0–127) being the same as code page 437.\n\nCode page 852\n0\t1\t2\t3\t4\t5\t6\t7\t8\t9\tA\tB\tC\tD\tE\tF\n8x\tÇ\tü\té\tâ\tä\tů\tć\tç\tł\të\tŐ\tő\tî\tŹ\tÄ\tĆ\n9x\tÉ\tĹ\tĺ\tô\tö\tĽ\tľ\tŚ\tś\tÖ\tÜ\tŤ\tť\tŁ\t×\tč\nAx\tá\tí\tó\tú\tĄ\tą\tŽ\tž\tĘ\tę\t¬\tź\tČ\tş\t«\t»\nBx\t░\t▒\t▓\t│\t┤\tÁ\tÂ\tĚ\tŞ\t╣\t║\t╗\t╝\tŻ\tż\t┐\nCx\t└\t┴\t┬\t├\t─\t┼\tĂ\tă\t╚\t╔\t╩\t╦\t╠\t═\t╬\t¤\nDx\tđ\tĐ\tĎ\tË\tď\tŇ\tÍ\tÎ\tě\t┘\t┌\t█\t▄\tŢ\tŮ\t▀\nEx\tÓ\tß\tÔ\tŃ\tń\tň\tŠ\tš\tŔ\tÚ\tŕ\tŰ\tý\tÝ\tţ\t´\nFx\tSHY\t˝\t˛\tˇ\t˘\t§\t÷\t¸\t°\t¨\t˙\tű\tŘ\tř\t■\tNBSP\n"
  },
  {
    "path": "tests/testdata/empty",
    "content": ""
  },
  {
    "path": "tests/testdata/empty.compressed",
    "content": "\u0006"
  },
  {
    "path": "tests/testdata/empty.compressed.00",
    "content": "\u0006"
  },
  {
    "path": "tests/testdata/empty.compressed.01",
    "content": "\u0001"
  },
  {
    "path": "tests/testdata/empty.compressed.02",
    "content": "\u0001"
  },
  {
    "path": "tests/testdata/empty.compressed.03",
    "content": "\u0001"
  },
  {
    "path": "tests/testdata/empty.compressed.04",
    "content": "\u0001"
  },
  {
    "path": "tests/testdata/empty.compressed.05",
    "content": "\u0001"
  },
  {
    "path": "tests/testdata/empty.compressed.06",
    "content": "\u0001"
  },
  {
    "path": "tests/testdata/empty.compressed.07",
    "content": "\u0001"
  },
  {
    "path": "tests/testdata/empty.compressed.08",
    "content": "3"
  },
  {
    "path": "tests/testdata/empty.compressed.09",
    "content": "5"
  },
  {
    "path": "tests/testdata/empty.compressed.10",
    "content": "7"
  },
  {
    "path": "tests/testdata/empty.compressed.11",
    "content": "9"
  },
  {
    "path": "tests/testdata/empty.compressed.12",
    "content": ";"
  },
  {
    "path": "tests/testdata/empty.compressed.13",
    "content": "="
  },
  {
    "path": "tests/testdata/empty.compressed.14",
    "content": "?"
  },
  {
    "path": "tests/testdata/empty.compressed.15",
    "content": "\u001a"
  },
  {
    "path": "tests/testdata/empty.compressed.17",
    "content": "\u0001\u0003\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0006\u0003"
  },
  {
    "path": "tests/testdata/lcet10.txt",
    "content": "\r\n\r\nThe Project Gutenberg Etext of LOC WORKSHOP ON ELECTRONIC TEXTS\r\n\r\n\r\n\r\n\r\n                      WORKSHOP ON ELECTRONIC TEXTS\r\n\r\n                               PROCEEDINGS\r\n\r\n\r\n\r\n                          Edited by James Daly\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n                             9-10 June 1992\r\n\r\n\r\n                           Library of Congress\r\n                            Washington, D.C.\r\n\r\n\r\n\r\n    Supported by a Grant from the David and Lucile Packard Foundation\r\n\r\n\r\n               ***   ***   ***   ******   ***   ***   ***\r\n\r\n\r\n                            TABLE OF CONTENTS\r\n\r\n\r\nAcknowledgements\r\n\r\nIntroduction\r\n\r\nProceedings\r\n   Welcome\r\n      Prosser Gifford and Carl Fleischhauer\r\n\r\n   Session I.  Content in a New Form:  Who Will Use It and What Will They Do?\r\n      James Daly (Moderator)\r\n      Avra Michelson, Overview\r\n      Susan H. Veccia, User Evaluation\r\n      Joanne Freeman, Beyond the Scholar\r\n         Discussion\r\n\r\n   Session II.  Show and Tell\r\n      Jacqueline Hess (Moderator)\r\n      Elli Mylonas, Perseus Project\r\n         Discussion\r\n      Eric M. Calaluca, Patrologia Latina Database\r\n      Carl Fleischhauer and Ricky Erway, American Memory\r\n         Discussion\r\n      Dorothy Twohig, The Papers of George Washington\r\n         Discussion\r\n      Maria L. Lebron, The Online Journal of Current Clinical Trials\r\n         Discussion\r\n      Lynne K. Personius, Cornell mathematics books\r\n         Discussion\r\n\r\n   Session III.  Distribution, Networks, and Networking:  \r\n                 Options for Dissemination\r\n      Robert G. Zich (Moderator)\r\n      Clifford A. Lynch\r\n         Discussion\r\n      Howard Besser\r\n         Discussion\r\n      Ronald L. Larsen\r\n      Edwin B. Brownrigg\r\n         Discussion\r\n\r\n   Session IV.  Image Capture, Text Capture, Overview of Text and\r\n                Image Storage Formats\r\n         William L. Hooton (Moderator)\r\n      A) Principal Methods for Image Capture of Text:  \r\n            direct scanning, use of microform\r\n         Anne R. Kenney\r\n         Pamela Q.J. Andre\r\n         Judith A. Zidar\r\n         Donald J. Waters\r\n            Discussion\r\n      B) Special Problems:  bound volumes, conservation,\r\n                            reproducing printed halftones\r\n         George Thoma\r\n         Carl Fleischhauer\r\n            Discussion\r\n      C) Image Standards and Implications for Preservation\r\n         Jean Baronas\r\n         Patricia Battin\r\n            Discussion\r\n      D) Text Conversion:  OCR vs. rekeying, standards of accuracy\r\n                           and use of imperfect texts, service bureaus\r\n         Michael Lesk\r\n         Ricky Erway\r\n         Judith A. Zidar\r\n            Discussion\r\n\r\n   Session V.  Approaches to Preparing Electronic Texts\r\n      Susan Hockey (Moderator)\r\n      Stuart Weibel\r\n         Discussion\r\n      C.M. Sperberg-McQueen\r\n         Discussion\r\n      Eric M. Calaluca\r\n         Discussion\r\n\r\n   Session VI.  Copyright Issues\r\n      Marybeth Peters\r\n\r\n   Session VII.  Conclusion\r\n      Prosser Gifford (Moderator)\r\n      General discussion\r\n\r\nAppendix I:  Program\r\n\r\nAppendix II:  Abstracts\r\n\r\nAppendix III:  Directory of Participants\r\n\r\n\r\n               ***   ***   ***   ******   ***   ***   ***\r\n\r\n\r\n                            Acknowledgements\r\n\r\nI would like to thank Carl Fleischhauer and Prosser Gifford for the\r\nopportunity to learn about areas of human activity unknown to me a scant\r\nten months ago, and the David and Lucile Packard Foundation for\r\nsupporting that opportunity.  The help given by others is acknowledged on\r\na separate page.\r\n\r\n                                                          19 October 1992\r\n\r\n\r\n               ***   ***   ***   ******   ***   ***   ***\r\n\r\n\r\n                              INTRODUCTION\r\n\r\nThe Workshop on Electronic Texts (1) drew together representatives of\r\nvarious projects and interest groups to compare ideas, beliefs,\r\nexperiences, and, in particular, methods of placing and presenting\r\nhistorical textual materials in computerized form.  Most attendees gained\r\nmuch in insight and outlook from the event.  But the assembly did not\r\nform a new nation, or, to put it another way, the diversity of projects\r\nand interests was too great to draw the representatives into a cohesive,\r\naction-oriented body.(2)\r\n\r\nEveryone attending the Workshop shared an interest in preserving and\r\nproviding access to historical texts.  But within this broad field the\r\nattendees represented a variety of formal, informal, figurative, and\r\nliteral groups, with many individuals belonging to more than one.  These\r\ngroups may be defined roughly according to the following topics or\r\nactivities:\r\n\r\n* Imaging\r\n* Searchable coded texts\r\n* National and international computer networks\r\n* CD-ROM production and dissemination\r\n* Methods and technology for converting older paper materials into\r\nelectronic form\r\n* Study of the use of digital materials by scholars and others\r\n\r\nThis summary is arranged thematically and does not follow the actual\r\nsequence of presentations.\r\n\r\nNOTES:\r\n     (1)  In this document, the phrase electronic text is used to mean\r\n     any computerized reproduction or version of a document, book,\r\n     article, or manuscript (including images), and not merely a machine-\r\n     readable or machine-searchable text.\r\n\r\n     (2)  The Workshop was held at the Library of Congress on 9-10 June\r\n     1992, with funding from the David and Lucile Packard Foundation. \r\n     The document that follows represents a summary of the presentations\r\n     made at the Workshop and was compiled by James DALY.  This\r\n     introduction was written by DALY and Carl FLEISCHHAUER.\r\n\r\n\r\nPRESERVATION AND IMAGING\r\n\r\nPreservation, as that term is used by archivists,(3) was most explicitly\r\ndiscussed in the context of imaging.  Anne KENNEY and Lynne PERSONIUS\r\nexplained how the concept of a faithful copy and the user-friendliness of\r\nthe traditional book have guided their project at Cornell University.(4) \r\nAlthough interested in computerized dissemination, participants in the\r\nCornell project are creating digital image sets of older books in the\r\npublic domain as a source for a fresh paper facsimile or, in a future\r\nphase, microfilm.  The books returned to the library shelves are\r\nhigh-quality and useful replacements on acid-free paper that should last\r\na long time.  To date, the Cornell project has placed little or no\r\nemphasis on creating searchable texts; one would not be surprised to find\r\nthat the project participants view such texts as new editions, and thus\r\nnot as faithful reproductions. \r\n\r\nIn her talk on preservation, Patricia BATTIN struck an ecumenical and\r\nflexible note as she endorsed the creation and dissemination of a variety\r\nof types of digital copies.  Do not be too narrow in defining what counts\r\nas a preservation element, BATTIN counseled; for the present, at least,\r\ndigital copies made with preservation in mind cannot be as narrowly\r\nstandardized as, say, microfilm copies with the same objective.  Setting\r\nstandards precipitously can inhibit creativity, but delay can result in\r\nchaos, she advised.\r\n\r\nIn part, BATTIN's position reflected the unsettled nature of image-format\r\nstandards, and attendees could hear echoes of this unsettledness in the\r\ncomments of various speakers.  For example, Jean BARONAS reviewed the\r\nstatus of several formal standards moving through committees of experts;\r\nand Clifford LYNCH encouraged the use of a new guideline for transmitting\r\ndocument images on Internet.  Testimony from participants in the National\r\nAgricultural Library's (NAL) Text Digitization Program and LC's American\r\nMemory project highlighted some of the challenges to the actual creation\r\nor interchange of images, including difficulties in converting\r\npreservation microfilm to digital form.  Donald WATERS reported on the\r\nprogress of a master plan for a project at Yale University to convert\r\nbooks on microfilm to digital image sets, Project Open Book (POB).\r\n\r\nThe Workshop offered rather less of an imaging practicum than planned,\r\nbut \"how-to\" hints emerge at various points, for example, throughout\r\nKENNEY's presentation and in the discussion of arcana such as\r\nthresholding and dithering offered by George THOMA and FLEISCHHAUER.\r\n\r\nNOTES:\r\n     (3)  Although there is a sense in which any reproductions of\r\n     historical materials preserve the human record, specialists in the\r\n     field have developed particular guidelines for the creation of\r\n     acceptable preservation copies.\r\n\r\n     (4)  Titles and affiliations of presenters are given at the\r\n     beginning of their respective talks and in the Directory of\r\n     Participants (Appendix III).\r\n\r\n\r\nTHE MACHINE-READABLE TEXT:  MARKUP AND USE\r\n\r\nThe sections of the Workshop that dealt with machine-readable text tended\r\nto be more concerned with access and use than with preservation, at least\r\nin the narrow technical sense.  Michael SPERBERG-McQUEEN made a forceful\r\npresentation on the Text Encoding Initiative's (TEI) implementation of\r\nthe Standard Generalized Markup Language (SGML).  His ideas were echoed\r\nby Susan HOCKEY, Elli MYLONAS, and Stuart WEIBEL.  While the\r\npresentations made by the TEI advocates contained no practicum, their\r\ndiscussion focused on the value of the finished product, what the\r\nEuropean Community calls reusability, but what may also be termed\r\ndurability.  They argued that marking up--that is, coding--a text in a\r\nwell-conceived way will permit it to be moved from one computer\r\nenvironment to another, as well as to be used by various users.  Two\r\nkinds of markup were distinguished:  1) procedural markup, which\r\ndescribes the features of a text (e.g., dots on a page), and 2)\r\ndescriptive markup, which describes the structure or elements of a\r\ndocument (e.g., chapters, paragraphs, and front matter).\r\n\r\nThe TEI proponents emphasized the importance of texts to scholarship. \r\nThey explained how heavily coded (and thus analyzed and annotated) texts\r\ncan underlie research, play a role in scholarly communication, and\r\nfacilitate classroom teaching.  SPERBERG-McQUEEN reminded listeners that\r\na written or printed item (e.g., a particular edition of a book) is\r\nmerely a representation of the abstraction we call a text.  To concern\r\nourselves with faithfully reproducing a printed instance of the text,\r\nSPERBERG-McQUEEN argued, is to concern ourselves with the representation\r\nof a representation (\"images as simulacra for the text\").  The TEI proponents'\r\ninterest in images tends to focus on corollary materials for use in teaching,\r\nfor example, photographs of the Acropolis to accompany a Greek text.\r\n\r\nBy the end of the Workshop, SPERBERG-McQUEEN confessed to having been\r\nconverted to a limited extent to the view that electronic images\r\nconstitute a promising alternative to microfilming; indeed, an\r\nalternative probably superior to microfilming.  But he was not convinced\r\nthat electronic images constitute a serious attempt to represent text in\r\nelectronic form.  HOCKEY and MYLONAS also conceded that their experience\r\nat the Pierce Symposium the previous week at Georgetown University and\r\nthe present conference at the Library of Congress had compelled them to\r\nreevaluate their perspective on the usefulness of text as images. \r\nAttendees could see that the text and image advocates were in\r\nconstructive tension, so to say.\r\n\r\nThree nonTEI presentations described approaches to preparing\r\nmachine-readable text that are less rigorous and thus less expensive.  In\r\nthe case of the Papers of George Washington, Dorothy TWOHIG explained\r\nthat the digital version will provide a not-quite-perfect rendering of\r\nthe transcribed text--some 135,000 documents, available for research\r\nduring the decades while the perfect or print version is completed. \r\nMembers of the American Memory team and the staff of NAL's Text\r\nDigitization Program (see below) also outlined a middle ground concerning\r\nsearchable texts.  In the case of American Memory, contractors produce\r\ntexts with about 99-percent accuracy that serve as \"browse\" or\r\n\"reference\" versions of written or printed originals.  End users who need\r\nfaithful copies or perfect renditions must refer to accompanying sets of\r\ndigital facsimile images or consult copies of the originals in a nearby\r\nlibrary or archive.  American Memory staff argued that the high cost of\r\nproducing 100-percent accurate copies would prevent LC from offering\r\naccess to large parts of its collections.\r\n\r\n\r\nTHE MACHINE-READABLE TEXT:  METHODS OF CONVERSION\r\n\r\nAlthough the Workshop did not include a systematic examination of the\r\nmethods for converting texts from paper (or from facsimile images) into\r\nmachine-readable form, nevertheless, various speakers touched upon this\r\nmatter.  For example, WEIBEL reported that OCLC has experimented with a\r\nmerging of multiple optical character recognition systems that will\r\nreduce errors from an unacceptable rate of 5 characters out of every\r\nl,000 to an unacceptable rate of 2 characters out of every l,000.\r\n\r\nPamela ANDRE presented an overview of NAL's Text Digitization Program and\r\nJudith ZIDAR discussed the technical details.  ZIDAR explained how NAL\r\npurchased hardware and software capable of performing optical character\r\nrecognition (OCR) and text conversion and used its own staff to convert\r\ntexts.  The process, ZIDAR said, required extensive editing and project\r\nstaff found themselves considering alternatives, including rekeying\r\nand/or creating abstracts or summaries of texts.  NAL reckoned costs at\r\n$7 per page.  By way of contrast, Ricky ERWAY explained that American\r\nMemory had decided from the start to contract out conversion to external\r\nservice bureaus.  The criteria used to select these contractors were cost\r\nand quality of results, as opposed to methods of conversion.  ERWAY noted\r\nthat historical documents or books often do not lend themselves to OCR. \r\nBound materials represent a special problem.  In her experience, quality\r\ncontrol--inspecting incoming materials, counting errors in samples--posed\r\nthe most time-consuming aspect of contracting out conversion.  ERWAY\r\nreckoned American Memory's costs at $4 per page, but cautioned that fewer\r\ncost-elements had been included than in NAL's figure.\r\n\r\n\r\nOPTIONS FOR DISSEMINATION\r\n\r\nThe topic of dissemination proper emerged at various points during the\r\nWorkshop.  At the session devoted to national and international computer\r\nnetworks, LYNCH, Howard BESSER, Ronald LARSEN, and Edwin BROWNRIGG\r\nhighlighted the virtues of Internet today and of the network that will\r\nevolve from Internet.  Listeners could discern in these narratives a\r\nvision of an information democracy in which millions of citizens freely\r\nfind and use what they need.  LYNCH noted that a lack of standards\r\ninhibits disseminating multimedia on the network, a topic also discussed\r\nby BESSER.  LARSEN addressed the issues of network scalability and\r\nmodularity and commented upon the difficulty of anticipating the effects\r\nof growth in orders of magnitude.  BROWNRIGG talked about the ability of\r\npacket radio to provide certain links in a network without the need for\r\nwiring.  However, the presenters also called attention to the\r\nshortcomings and incongruities of present-day computer networks.  For\r\nexample:  1) Network use is growing dramatically, but much network\r\ntraffic consists of personal communication (E-mail).  2) Large bodies of\r\ninformation are available, but a user's ability to search across their\r\nentirety is limited.  3) There are significant resources for science and\r\ntechnology, but few network sources provide content in the humanities. \r\n4) Machine-readable texts are commonplace, but the capability of the\r\nsystem to deal with images (let alone other media formats) lags behind. \r\nA glimpse of a multimedia future for networks, however, was provided by\r\nMaria LEBRON in her overview of the Online Journal of Current Clinical\r\nTrials (OJCCT), and the process of scholarly publishing on-line.   \r\n\r\nThe contrasting form of the CD-ROM disk was never systematically\r\nanalyzed, but attendees could glean an impression from several of the\r\nshow-and-tell presentations.  The Perseus and American Memory examples\r\ndemonstrated recently published disks, while the descriptions of the\r\nIBYCUS version of the Papers of George Washington and Chadwyck-Healey's\r\nPatrologia Latina Database (PLD) told of disks to come.  According to\r\nEric CALALUCA, PLD's principal focus has been on converting Jacques-Paul\r\nMigne's definitive collection of Latin texts to machine-readable form. \r\nAlthough everyone could share the network advocates' enthusiasm for an\r\non-line future, the possibility of rolling up one's sleeves for a session\r\nwith a CD-ROM containing both textual materials and a powerful retrieval\r\nengine made the disk seem an appealing vessel indeed.  The overall\r\ndiscussion suggested that the transition from CD-ROM to on-line networked\r\naccess may prove far slower and more difficult than has been anticipated.\r\n\r\n\r\nWHO ARE THE USERS AND WHAT DO THEY DO?\r\n\r\nAlthough concerned with the technicalities of production, the Workshop\r\nnever lost sight of the purposes and uses of electronic versions of\r\ntextual materials.  As noted above, those interested in imaging discussed\r\nthe problematical matter of digital preservation, while the TEI proponents\r\ndescribed how machine-readable texts can be used in research.  This latter\r\ntopic received thorough treatment in the paper read by Avra MICHELSON.\r\nShe placed the phenomenon of electronic texts within the context of\r\nbroader trends in information technology and scholarly communication.\r\n\r\nAmong other things, MICHELSON described on-line conferences that\r\nrepresent a vigorous and important intellectual forum for certain\r\ndisciplines.  Internet now carries more than 700 conferences, with about\r\n80 percent of these devoted to topics in the social sciences and the\r\nhumanities.  Other scholars use on-line networks for \"distance learning.\" \r\nMeanwhile, there has been a tremendous growth in end-user computing;\r\nprofessors today are less likely than their predecessors to ask the\r\ncampus computer center to process their data.  Electronic texts are one\r\nkey to these sophisticated applications, MICHELSON reported, and more and\r\nmore scholars in the humanities now work in an on-line environment. \r\nToward the end of the Workshop, Michael LESK presented a corollary to\r\nMICHELSON's talk, reporting the results of an experiment that compared\r\nthe work of one group of chemistry students using traditional printed\r\ntexts and two groups using electronic sources.  The experiment\r\ndemonstrated that in the event one does not know what to read, one needs\r\nthe electronic systems; the electronic systems hold no advantage at the\r\nmoment if one knows what to read, but neither do they impose a penalty.\r\n\r\nDALY provided an anecdotal account of the revolutionizing impact of the\r\nnew technology on his previous methods of research in the field of classics.\r\nHis account, by extrapolation, served to illustrate in part the arguments\r\nmade by MICHELSON concerning the positive effects of the sudden and radical\r\ntransformation being wrought in the ways scholars work.\r\n\r\nSusan VECCIA and Joanne FREEMAN delineated the use of electronic\r\nmaterials outside the university.  The most interesting aspect of their\r\nuse, FREEMAN said, could be seen as a paradox:  teachers in elementary\r\nand secondary schools requested access to primary source materials but,\r\nat the same time, found that \"primariness\" itself made these materials\r\ndifficult for their students to use.\r\n\r\n\r\nOTHER TOPICS\r\n\r\nMarybeth PETERS reviewed copyright law in the United States and offered\r\nadvice during a lively discussion of this subject.  But uncertainty\r\nremains concerning the price of copyright in a digital medium, because a\r\nsolution remains to be worked out concerning management and synthesis of\r\ncopyrighted and out-of-copyright pieces of a database.\r\n\r\nAs moderator of the final session of the Workshop, Prosser GIFFORD directed\r\ndiscussion to future courses of action and the potential role of LC in\r\nadvancing them.  Among the recommendations that emerged were the following:\r\n\r\n     * Workshop participants should 1) begin to think about working\r\n     with image material, but structure and digitize it in such a\r\n     way that at a later stage it can be interpreted into text, and\r\n     2) find a common way to build text and images together so that\r\n     they can be used jointly at some stage in the future, with\r\n     appropriate network support, because that is how users will want\r\n     to access these materials.  The Library might encourage attempts\r\n     to bring together people who are working on texts and images.\r\n\r\n     * A network version of American Memory should be developed or\r\n     consideration should be given to making the data in it\r\n     available to people interested in doing network multimedia. \r\n     Given the current dearth of digital data that is appealing and\r\n     unencumbered by extremely complex rights problems, developing a\r\n     network version of American Memory could do much to help make\r\n     network multimedia a reality.\r\n\r\n     * Concerning the thorny issue of electronic deposit, LC should\r\n     initiate a catalytic process in terms of distributed\r\n     responsibility, that is, bring together the distributed\r\n     organizations and set up a study group to look at all the\r\n     issues related to electronic deposit and see where we as a\r\n     nation should move.  For example, LC might attempt to persuade\r\n     one major library in each state to deal with its state\r\n     equivalent publisher, which might produce a cooperative project\r\n     that would be equitably distributed around the country, and one\r\n     in which LC would be dealing with a minimal number of publishers\r\n     and minimal copyright problems.  LC must also deal with the\r\n     concept of on-line publishing, determining, among other things,\r\n     how serials such as OJCCT might be deposited for copyright.\r\n\r\n     * Since a number of projects are planning to carry out\r\n     preservation by creating digital images that will end up in\r\n     on-line or near-line storage at some institution, LC might play\r\n     a helpful role, at least in the near term, by accelerating how\r\n     to catalog that information into the Research Library Information\r\n     Network (RLIN) and then into OCLC, so that it would be accessible.\r\n     This would reduce the possibility of multiple institutions digitizing\r\n     the same work. \r\n\r\n\r\nCONCLUSION\r\n\r\nThe Workshop was valuable because it brought together partisans from\r\nvarious groups and provided an occasion to compare goals and methods. \r\nThe more committed partisans frequently communicate with others in their\r\ngroups, but less often across group boundaries.  The Workshop was also\r\nvaluable to attendees--including those involved with American Memory--who\r\ncame less committed to particular approaches or concepts.  These\r\nattendees learned a great deal, and plan to select and employ elements of\r\nimaging, text-coding, and networked distribution that suit their\r\nrespective projects and purposes.\r\n\r\nStill, reality rears its ugly head:  no breakthrough has been achieved. \r\nOn the imaging side, one confronts a proliferation of competing\r\ndata-interchange standards and a lack of consensus on the role of digital\r\nfacsimiles in preservation.  In the realm of machine-readable texts, one\r\nencounters a reasonably mature standard but methodological difficulties\r\nand high costs.  These latter problems, of course, represent a special\r\nimpediment to the desire, as it is sometimes expressed in the popular\r\npress, \"to put the [contents of the] Library of Congress on line.\"  In\r\nthe words of one participant, there was \"no solution to the economic\r\nproblems--the projects that are out there are surviving, but it is going\r\nto be a lot of work to transform the information industry, and so far the\r\ninvestment to do that is not forthcoming\" (LESK, per litteras).\r\n\r\n\r\n               ***   ***   ***   ******   ***   ***   ***\r\n\r\n\r\n                               PROCEEDINGS\r\n\r\n\r\nWELCOME\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nGIFFORD * Origin of Workshop in current Librarian's desire to make LC's\r\ncollections more widely available * Desiderata arising from the prospect\r\nof greater interconnectedness *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nAfter welcoming participants on behalf of the Library of Congress,\r\nAmerican Memory (AM), and the National Demonstration Lab, Prosser\r\nGIFFORD, director for scholarly programs, Library of Congress, located\r\nthe origin of the Workshop on Electronic Texts in a conversation he had\r\nhad considerably more than a year ago with Carl FLEISCHHAUER concerning\r\nsome of the issues faced by AM.  On the assumption that numerous other\r\npeople were asking the same questions, the decision was made to bring\r\ntogether as many of these people as possible to ask the same questions\r\ntogether.  In a deeper sense, GIFFORD said, the origin of the Workshop\r\nlay in the desire of the current Librarian of Congress, James H. \r\nBillington, to make the collections of the Library, especially those\r\noffering unique or unusual testimony on aspects of the American\r\nexperience, available to a much wider circle of users than those few\r\npeople who can come to Washington to use them.  This meant that the\r\nemphasis of AM, from the outset, has been on archival collections of the\r\nbasic material, and on making these collections themselves available,\r\nrather than selected or heavily edited products.\r\n\r\nFrom AM's emphasis followed the questions with which the Workshop began: \r\nwho will use these materials, and in what form will they wish to use\r\nthem.  But an even larger issue deserving mention, in GIFFORD's view, was\r\nthe phenomenal growth in Internet connectivity.  He expressed the hope\r\nthat the prospect of greater interconnectedness than ever before would\r\nlead to:  1) much more cooperative and mutually supportive endeavors; 2)\r\ndevelopment of systems of shared and distributed responsibilities to\r\navoid duplication and to ensure accuracy and preservation of unique\r\nmaterials; and 3) agreement on the necessary standards and development of\r\nthe appropriate directories and indices to make navigation\r\nstraightforward among the varied resources that are, and increasingly\r\nwill be, available.  In this connection, GIFFORD requested that\r\nparticipants reflect from the outset upon the sorts of outcomes they\r\nthought the Workshop might have.  Did those present constitute a group\r\nwith sufficient common interests to propose a next step or next steps,\r\nand if so, what might those be?  They would return to these questions the\r\nfollowing afternoon.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nFLEISCHHAUER * Core of Workshop concerns preparation and production of\r\nmaterials * Special challenge in conversion of textual materials *\r\nQuality versus quantity * Do the several groups represented share common\r\ninterests? *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nCarl FLEISCHHAUER, coordinator, American Memory, Library of Congress,\r\nemphasized that he would attempt to represent the people who perform some\r\nof the work of converting or preparing  materials and that the core of\r\nthe Workshop had to do with preparation and production.  FLEISCHHAUER\r\nthen drew a distinction between the long term, when many things would be\r\navailable and connected in the ways that GIFFORD described, and the short\r\nterm, in which AM not only has wrestled with the issue of what is the\r\nbest course to pursue but also has faced a variety of technical\r\nchallenges.\r\n\r\nFLEISCHHAUER remarked AM's endeavors to deal with a wide range of library\r\nformats, such as motion picture collections, sound-recording collections,\r\nand pictorial collections of various sorts, especially collections of\r\nphotographs.  In the course of these efforts, AM kept coming back to\r\ntextual materials--manuscripts or rare printed matter, bound materials,\r\netc.  Text posed the greatest conversion challenge of all.  Thus, the\r\ngenesis of the Workshop, which reflects the problems faced by AM.  These\r\nproblems include physical problems.  For example, those in the library\r\nand archive business deal with collections made up of fragile and rare\r\nmanuscript items, bound materials, especially the notoriously brittle\r\nbound materials of the late nineteenth century.  These are precious\r\ncultural artifacts, however, as well as interesting sources of\r\ninformation, and LC desires to retain and conserve them.  AM needs to\r\nhandle things without damaging them.  Guillotining a book to run it\r\nthrough a sheet feeder must be avoided at all costs.\r\n\r\nBeyond physical problems, issues pertaining to quality arose.  For\r\nexample, the desire to provide users with a searchable text is affected\r\nby the question of acceptable level of accuracy.  One hundred percent\r\naccuracy is tremendously expensive.  On the other hand, the output of\r\noptical character recognition (OCR) can be tremendously inaccurate. \r\nAlthough AM has attempted to find a middle ground, uncertainty persists\r\nas to whether or not it has discovered the right solution.\r\n\r\nQuestions of quality arose concerning images as well.  FLEISCHHAUER\r\ncontrasted the extremely high level of quality of the digital images in\r\nthe Cornell Xerox Project with AM's efforts to provide a browse-quality\r\nor access-quality image, as opposed to an archival or preservation image. \r\nFLEISCHHAUER therefore welcomed the opportunity to compare notes.\r\n\r\nFLEISCHHAUER observed in passing that conversations he had had about\r\nnetworks have begun to signal that for various forms of media a\r\ndetermination may be made that there is a browse-quality item, or a\r\ndistribution-and-access-quality item that may coexist in some systems\r\nwith a higher quality archival item that would be inconvenient to send\r\nthrough the network because of its size.  FLEISCHHAUER referred, of\r\ncourse, to images more than to searchable text.\r\n\r\nAs AM considered those questions, several conceptual issues arose:  ought\r\nAM occasionally to reproduce materials entirely through an image set, at\r\nother times, entirely through a text set, and in some cases, a mix? \r\nThere probably would be times when the historical authenticity of an\r\nartifact would require that its image be used.  An image might be\r\ndesirable as a recourse for users if one could not provide 100-percent\r\naccurate text.  Again, AM wondered, as a practical matter, if a\r\ndistinction could be drawn between rare printed matter that might exist\r\nin multiple collections--that is, in ten or fifteen libraries.  In such\r\ncases, the need for perfect reproduction would be less than for unique\r\nitems.  Implicit in his remarks, FLEISCHHAUER conceded, was the admission\r\nthat AM has been tilting strongly towards quantity and drawing back a\r\nlittle from perfect quality.  That is, it seemed to AM that society would\r\nbe better served if more things were distributed by LC--even if they were\r\nnot quite perfect--than if fewer things, perfectly represented, were\r\ndistributed.  This was stated as a proposition to be tested, with\r\nresponses to be gathered from users.\r\n\r\nIn thinking about issues related to reproduction of materials and seeing\r\nother people engaged in parallel activities, AM deemed it useful to\r\nconvene a conference.  Hence, the Workshop.  FLEISCHHAUER thereupon\r\nsurveyed the several groups represented:  1) the world of images (image\r\nusers and image makers); 2) the world of text and scholarship and, within\r\nthis group, those concerned with language--FLEISCHHAUER confessed to finding\r\ndelightful irony in the fact that some of the most advanced thinkers on\r\ncomputerized texts are those dealing with ancient Greek and Roman materials;\r\n3) the network world; and 4) the general world of library science, which\r\nincludes people interested in preservation and cataloging.\r\n\r\nFLEISCHHAUER concluded his remarks with special thanks to the David and\r\nLucile Packard Foundation for its support of the meeting, the American\r\nMemory group, the Office for Scholarly Programs, the National\r\nDemonstration Lab, and the Office of Special Events.  He expressed the\r\nhope that David Woodley Packard might be able to attend, noting that\r\nPackard's work and the work of the foundation had sponsored a number of\r\nprojects in the text area.\r\n\r\n                                 ******\r\n\r\nSESSION I.  CONTENT IN A NEW FORM:   WHO WILL USE IT AND WHAT WILL THEY DO?\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nDALY * Acknowledgements * A new Latin authors disk *  Effects of the new\r\ntechnology on previous methods of research *       \r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nServing as moderator, James DALY acknowledged the generosity of all the\r\npresenters for giving of their time, counsel, and patience in planning\r\nthe Workshop, as well as of members of the American Memory project and\r\nother Library of Congress staff, and the David and Lucile Packard\r\nFoundation and its executive director, Colburn S. Wilbur.\r\n\r\nDALY then recounted his visit in March to the Center for Electronic Texts\r\nin the Humanities (CETH) and the Department of Classics at Rutgers\r\nUniversity, where an old friend, Lowell Edmunds, introduced him to the\r\ndepartment's IBYCUS scholarly personal computer, and, in particular, the\r\nnew Latin CD-ROM, containing, among other things, almost all classical\r\nLatin literary texts through A.D. 200.  Packard Humanities Institute\r\n(PHI), Los Altos, California, released this disk late in 1991, with a\r\nnominal triennial licensing fee.\r\n\r\nPlaying with the disk for an hour or so at Rutgers brought home to DALY\r\nat once the revolutionizing impact of the new technology on his previous\r\nmethods of research.  Had this disk been available two or three years\r\nearlier, DALY contended, when he was engaged in preparing a commentary on\r\nBook 10 of Virgil's Aeneid for Cambridge University Press, he would not\r\nhave required a forty-eight-square-foot table on which to spread the\r\nnumerous, most frequently consulted items, including some ten or twelve\r\nconcordances to key Latin authors, an almost equal number of lexica to\r\nauthors who lacked concordances, and where either lexica or concordances\r\nwere lacking, numerous editions of authors antedating and postdating Virgil.\r\n\r\nNor, when checking each of the average six to seven words contained in\r\nthe Virgilian hexameter for its usage elsewhere in Virgil's works or\r\nother Latin authors, would DALY have had to maintain the laborious\r\nmechanical process of flipping through these concordances, lexica, and\r\neditions each time.  Nor would he have had to frequent as often the\r\nMilton S. Eisenhower Library at the Johns Hopkins University to consult\r\nthe Thesaurus Linguae Latinae.  Instead of devoting countless hours, or\r\nthe bulk of his research time, to gathering data concerning Virgil's use\r\nof words, DALY--now freed by PHI's Latin authors disk from the\r\ntyrannical, yet in some ways paradoxically happy scholarly drudgery--\r\nwould have been able to devote that same bulk of time to analyzing and\r\ninterpreting Virgilian verbal usage.\r\n\r\nCiting Theodore Brunner, Gregory Crane, Elli MYLONAS, and Avra MICHELSON,\r\nDALY argued that this reversal in his style of work, made possible by the\r\nnew technology, would perhaps have resulted in better, more productive\r\nresearch.  Indeed, even in the course of his browsing the Latin authors\r\ndisk at Rutgers, its powerful search, retrieval, and highlighting\r\ncapabilities suggested to him several new avenues of research into\r\nVirgil's use of sound effects.  This anecdotal account, DALY maintained,\r\nmay serve to illustrate in part the sudden and radical transformation\r\nbeing wrought in the ways scholars work.\r\n\r\n                                 ******\r\n\r\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nMICHELSON * Elements related to scholarship and technology * Electronic\r\ntexts within the context of broader trends within information technology\r\nand scholarly communication * Evaluation of the prospects for the use of\r\nelectronic texts * Relationship of electronic texts to processes of\r\nscholarly communication in humanities research * New exchange formats\r\ncreated by scholars * Projects initiated to increase scholarly access to\r\nconverted text * Trend toward making electronic resources available\r\nthrough research and education networks * Changes taking place in\r\nscholarly communication among humanities scholars * Network-mediated\r\nscholarship transforming traditional scholarly practices * Key\r\ninformation technology trends affecting the conduct of scholarly\r\ncommunication over the next decade * The trend toward end-user computing\r\n* The trend toward greater connectivity * Effects of these trends * Key\r\ntransformations taking place * Summary of principal arguments *\r\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nAvra MICHELSON, Archival Research and Evaluation Staff, National Archives\r\nand Records Administration (NARA), argued that establishing who will use\r\nelectronic texts and what they will use them for involves a consideration\r\nof both information technology and scholarship trends.  This\r\nconsideration includes several elements related to scholarship and\r\ntechnology:  1) the key trends in information technology that are most\r\nrelevant to scholarship; 2) the key trends in the use of currently\r\navailable technology by scholars in the nonscientific community; and 3)\r\nthe relationship between these two very distinct but interrelated trends. \r\nThe investment in understanding this relationship being made by\r\ninformation providers, technologists, and public policy developers, as\r\nwell as by scholars themselves, seems to be pervasive and growing,\r\nMICHELSON contended.  She drew on collaborative work with Jeff Rothenberg\r\non the scholarly use of technology.\r\n\r\nMICHELSON sought to place the phenomenon of electronic texts within the\r\ncontext of broader trends within information technology and scholarly\r\ncommunication.  She argued that electronic texts are of most use to\r\nresearchers to the extent that the researchers' working context (i.e.,\r\ntheir relevant bibliographic sources, collegial feedback, analytic tools,\r\nnotes, drafts, etc.), along with their field's primary and secondary\r\nsources, also is accessible in electronic form and can be integrated in\r\nways that are unique to the on-line environment.\r\n\r\nEvaluation of the prospects for the use of electronic texts includes two\r\nelements:  1) an examination of the ways in which researchers currently\r\nare using electronic texts along with other electronic resources, and 2)\r\nan analysis of key information technology trends that are affecting the\r\nlong-term conduct of scholarly communication.  MICHELSON limited her\r\ndiscussion of the use of electronic texts to the practices of humanists\r\nand noted that the scientific community was outside the panel's overview.\r\n\r\nMICHELSON examined the nature of the current relationship of electronic\r\ntexts in particular, and electronic resources in general, to what she\r\nmaintained were, essentially, five processes of scholarly communication\r\nin humanities research.  Researchers 1) identify sources, 2) communicate\r\nwith their colleagues, 3) interpret and analyze data, 4) disseminate\r\ntheir research findings, and 5) prepare curricula to instruct the next\r\ngeneration of scholars and students.  This examination would produce a\r\nclearer understanding of the synergy among these five processes that\r\nfuels the tendency of the use of electronic resources for one process to\r\nstimulate its use for other processes of scholarly communication.\r\n\r\nFor the first process of scholarly communication, the identification of\r\nsources, MICHELSON remarked the opportunity scholars now enjoy to\r\nsupplement traditional word-of-mouth searches for sources among their\r\ncolleagues with new forms of electronic searching.  So, for example,\r\ninstead of having to visit the library, researchers are able to explore\r\ndescriptions of holdings in their offices.  Furthermore, if their own\r\ninstitutions' holdings prove insufficient, scholars can access more than\r\n200 major American library catalogues over Internet, including the\r\nuniversities of California, Michigan, Pennsylvania, and Wisconsin. \r\nDirect access to the bibliographic databases offers intellectual\r\nempowerment to scholars by presenting a comprehensive means of browsing\r\nthrough libraries from their homes and offices at their convenience.\r\n\r\nThe second process of communication involves communication among\r\nscholars.  Beyond the most common methods of communication, scholars are\r\nusing E-mail and a variety of new electronic communications formats\r\nderived from it for further academic interchange.  E-mail exchanges are\r\ngrowing at an astonishing rate, reportedly 15 percent a month.  They\r\ncurrently constitute approximately half the traffic on research and\r\neducation networks.  Moreover, the global spread of E-mail has been so\r\nrapid that it is now possible for American scholars to use it to\r\ncommunicate with colleagues in close to 140 other countries.\r\n\r\nOther new exchange formats created by scholars and operating on Internet\r\ninclude more than 700 conferences, with about 80 percent of these devoted\r\nto topics in the social sciences and humanities.  The rate of growth of\r\nthese scholarly electronic conferences also is astonishing.  From l990 to\r\nl991, 200 new conferences were identified on Internet.  From October 1991\r\nto June 1992, an additional 150 conferences in the social sciences and\r\nhumanities were added to this directory of listings.  Scholars have\r\nestablished conferences in virtually every field, within every different\r\ndiscipline.  For example, there are currently close to 600 active social\r\nscience and humanities  conferences on topics such as art and\r\narchitecture, ethnomusicology, folklore, Japanese culture, medical\r\neducation, and gifted and talented education.  The appeal to scholars of\r\ncommunicating through these conferences is that, unlike any other medium,\r\nelectronic conferences today provide a forum for global communication\r\nwith peers at the front end of the research process.\r\n\r\nInterpretation and analysis of sources constitutes the third process of\r\nscholarly communication that MICHELSON discussed in terms of texts and\r\ntextual resources.  The methods used to analyze sources fall somewhere on\r\na continuum from quantitative analysis to qualitative analysis. \r\nTypically, evidence is culled and evaluated using methods drawn from both\r\nends of this continuum.  At one end, quantitative analysis involves the\r\nuse of mathematical processes such as a count of frequencies and\r\ndistributions of occurrences or, on a higher level, regression analysis. \r\nAt the other end of the continuum, qualitative analysis typically\r\ninvolves nonmathematical processes oriented toward language\r\ninterpretation or the building of theory.  Aspects of this work involve\r\nthe processing--either manual or computational--of large and sometimes\r\nmassive amounts of textual sources, although the use of nontextual\r\nsources as evidence, such as photographs, sound recordings, film footage,\r\nand artifacts, is significant as well.\r\n\r\nScholars have discovered that many of the methods of interpretation and\r\nanalysis that are related to both quantitative and qualitative methods\r\nare processes that can be performed by computers.  For example, computers\r\ncan count.  They can count brush strokes used in a Rembrandt painting or\r\nperform regression analysis for understanding cause and effect.  By means\r\nof advanced technologies, computers can recognize patterns, analyze text,\r\nand model concepts.  Furthermore, computers can complete these processes\r\nfaster with more sources and with greater precision than scholars who\r\nmust rely on manual interpretation of data.  But if scholars are to use\r\ncomputers for these processes, source materials must be in a form\r\namenable to computer-assisted analysis.  For this reason many scholars,\r\nonce they have identified the sources that are key to their research, are\r\nconverting them to machine-readable form.  Thus, a representative example\r\nof the numerous textual conversion projects organized by scholars around\r\nthe world in recent years to support computational text analysis is the\r\nTLG, the Thesaurus Linguae Graecae.  This project is devoted to\r\nconverting the extant ancient texts of classical Greece.  (Editor's note: \r\naccording to the TLG Newsletter of May l992, TLG was in use in thirty-two\r\ndifferent countries.  This figure updates MICHELSON's previous count by one.)\r\n\r\nThe scholars performing these conversions have been asked to recognize\r\nthat the electronic sources they are converting for one use possess value\r\nfor other research purposes as well.  As a result, during the past few\r\nyears, humanities scholars have initiated a number of projects to\r\nincrease scholarly access to converted text.  So, for example, the Text\r\nEncoding Initiative (TEI), about which more is said later in the program,\r\nwas established as an effort by scholars to determine standard elements\r\nand methods for encoding machine-readable text for electronic exchange. \r\nIn a second effort to facilitate the sharing of converted text, scholars\r\nhave created a new institution, the Center for Electronic Texts in the\r\nHumanities (CETH).  The center estimates that there are 8,000 series of\r\nsource texts in the humanities that have been converted to\r\nmachine-readable form worldwide.  CETH is undertaking an international\r\nsearch for converted text in the humanities, compiling it into an\r\nelectronic library, and preparing bibliographic descriptions of the\r\nsources for the Research Libraries Information Network's (RLIN)\r\nmachine-readable data file.  The library profession has begun to initiate\r\nlarge conversion projects as well, such as American Memory.\r\n\r\nWhile scholars have been making converted text available to one another,\r\ntypically on disk or on CD-ROM, the clear trend is toward making these\r\nresources available through research and education networks.  Thus, the\r\nAmerican and French Research on the Treasury of the French Language\r\n(ARTFL) and the Dante Project are already available on Internet. \r\nMICHELSON summarized this section on interpretation and analysis by\r\nnoting that:  1) increasing numbers of humanities scholars in the library\r\ncommunity are recognizing the importance to the advancement of\r\nscholarship of retrospective conversion of source materials in the arts\r\nand humanities; and 2) there is a growing realization that making the\r\nsources available on research and education networks maximizes their\r\nusefulness for the analysis performed by humanities scholars.\r\n\r\nThe fourth process of scholarly communication is dissemination of\r\nresearch findings, that is, publication.  Scholars are using existing\r\nresearch and education networks to engineer a new type of publication: \r\nscholarly-controlled journals that are electronically produced and\r\ndisseminated.  Although such journals are still emerging as a\r\ncommunication format, their number has grown, from approximately twelve\r\nto thirty-six during the past year (July 1991 to June 1992).  Most of\r\nthese electronic scholarly journals are devoted to topics in the\r\nhumanities.  As with network conferences, scholarly enthusiasm for these\r\nelectronic journals stems from the medium's unique ability to advance\r\nscholarship in a way that no other medium can do by supporting global\r\nfeedback and interchange, practically in real time, early in the research\r\nprocess.  Beyond scholarly journals, MICHELSON remarked the delivery of\r\ncommercial full-text products, such as articles in professional journals,\r\nnewsletters, magazines, wire services, and reference sources.  These are\r\nbeing delivered via on-line local library catalogues, especially through\r\nCD-ROMs.  Furthermore, according to MICHELSON, there is general optimism\r\nthat the copyright and fees issues impeding the delivery of full text on\r\nexisting research and education networks soon will be resolved.\r\n\r\nThe final process of scholarly communication is curriculum development\r\nand instruction, and this involves the use of computer information\r\ntechnologies in two areas.  The first is the development of\r\ncomputer-oriented instructional tools, which includes simulations,\r\nmultimedia applications, and computer tools that are used to assist in\r\nthe analysis of sources in the classroom, etc.  The Perseus Project, a\r\ndatabase that provides a multimedia curriculum on classical Greek\r\ncivilization, is a good example of the way in which entire curricula are\r\nbeing recast using information technologies.  It is anticipated that the\r\ncurrent difficulty in exchanging electronically computer-based\r\ninstructional software, which in turn makes it difficult for one scholar\r\nto build upon the work of others, will be resolved before too long. \r\nStand-alone curricular applications that involve electronic text will be\r\nsharable through networks, reinforcing their significance as intellectual\r\nproducts as well as instructional tools.\r\n\r\nThe second aspect of electronic learning involves the use of research and\r\neducation networks for distance education programs.  Such programs\r\ninteractively link teachers with students in geographically scattered\r\nlocations and rely on the availability of electronic instructional\r\nresources.  Distance education programs are gaining wide appeal among\r\nstate departments of education because of their demonstrated capacity to\r\nbring advanced specialized course work and an array of experts to many\r\nclassrooms.  A recent report found that at least 32 states operated at\r\nleast one statewide network for education in 1991, with networks under\r\ndevelopment in many of the remaining states.\r\n\r\nMICHELSON summarized this section by noting two striking changes taking\r\nplace in scholarly communication among humanities scholars.  First is the\r\nextent to which electronic text in particular, and electronic resources\r\nin general, are being infused into each of the five processes described\r\nabove.  As mentioned earlier, there is a certain synergy at work here. \r\nThe use of electronic resources for one process tends to stimulate its\r\nuse for other processes, because the chief course of movement is toward a\r\ncomprehensive on-line working context for humanities scholars that\r\nincludes on-line availability of key bibliographies, scholarly feedback,\r\nsources, analytical tools, and publications.  MICHELSON noted further\r\nthat the movement toward a comprehensive on-line working context for\r\nhumanities scholars is not new.  In fact, it has been underway for more\r\nthan forty years in the humanities, since Father Roberto Busa began\r\ndeveloping an electronic concordance of the works of Saint Thomas Aquinas\r\nin 1949.  What we are witnessing today, MICHELSON contended, is not the\r\nbeginning of this on-line transition but, for at least some humanities\r\nscholars, the turning point in the transition from a print to an\r\nelectronic working context.  Coinciding with the on-line transition, the\r\nsecond striking change is the extent to which research and education\r\nnetworks are becoming the new medium of scholarly communication.  The\r\nexisting Internet and the pending National Education and Research Network\r\n(NREN) represent the new meeting ground where scholars are going for\r\nbibliographic information, scholarly dialogue and feedback, the most\r\ncurrent publications in their field, and high-level educational\r\nofferings.  Traditional scholarly practices are undergoing tremendous\r\ntransformations as a result of the emergence and growing prominence of\r\nwhat is called network-mediated scholarship.\r\n\r\nMICHELSON next turned to the second element of the framework she proposed\r\nat the outset of her talk for evaluating the prospects for electronic\r\ntext, namely the key information technology trends affecting the conduct\r\nof scholarly communication over the next decade:  1) end-user computing\r\nand 2) connectivity.\r\n\r\nEnd-user computing means that the person touching the keyboard, or\r\nperforming computations, is the same as the person who initiates or\r\nconsumes the computation.  The emergence of personal computers, along\r\nwith a host of other forces, such as ubiquitous computing, advances in\r\ninterface design, and the on-line transition, is prompting the consumers\r\nof computation to do their own computing, and is thus rendering obsolete\r\nthe traditional distinction between end users and ultimate users.\r\n\r\nThe trend toward end-user computing is significant to consideration of\r\nthe prospects for electronic texts because it means that researchers are\r\nbecoming more adept at doing their own computations and, thus, more\r\ncompetent in the use of electronic media.  By avoiding programmer\r\nintermediaries, computation is becoming central to the researcher's\r\nthought process.  This direct involvement in computing is changing the\r\nresearcher's perspective on the nature of research itself, that is, the\r\nkinds of questions that can be posed, the analytical methodologies that\r\ncan be used, the types and amount of sources that are appropriate for\r\nanalyses, and the form in which findings are presented.  The trend toward\r\nend-user computing means that, increasingly, electronic media and\r\ncomputation are being infused into all processes of humanities\r\nscholarship, inspiring remarkable transformations in scholarly\r\ncommunication.\r\n\r\nThe trend toward greater connectivity suggests that researchers are using\r\ncomputation increasingly in network environments.  Connectivity is\r\nimportant to scholarship because it erases the distance that separates\r\nstudents from teachers and scholars from their colleagues, while allowing\r\nusers to access remote databases, share information in many different\r\nmedia, connect to their working context wherever they are, and\r\ncollaborate in all phases of research.\r\n\r\nThe combination of the trend toward end-user computing and the trend\r\ntoward connectivity suggests that the scholarly use of electronic\r\nresources, already evident among some researchers, will soon become an\r\nestablished feature of scholarship.  The effects of these trends, along\r\nwith ongoing changes in scholarly practices, point to a future in which\r\nhumanities researchers will use computation and electronic communication\r\nto help them formulate ideas, access sources, perform research,\r\ncollaborate with colleagues, seek peer review, publish and disseminate\r\nresults, and engage in many other professional and educational activities.\r\n\r\nIn summary, MICHELSON emphasized four points:  1) A portion of humanities\r\nscholars already consider electronic texts the preferred format for\r\nanalysis and dissemination.  2) Scholars are using these electronic\r\ntexts, in conjunction with other electronic resources, in all the\r\nprocesses of scholarly communication.  3) The humanities scholars'\r\nworking context is in the process of changing from print technology to\r\nelectronic technology, in many ways mirroring transformations that have\r\noccurred or are occurring within the scientific community.  4) These\r\nchanges are occurring in conjunction with the development of a new\r\ncommunication medium:  research and education networks that are\r\ncharacterized by their capacity to advance scholarship in a wholly unique\r\nway.\r\n\r\nMICHELSON also reiterated her three principal arguments:  l) Electronic\r\ntexts are best understood in terms of the relationship to other\r\nelectronic resources and the growing prominence of network-mediated\r\nscholarship.  2) The prospects for electronic texts lie in their capacity\r\nto be integrated into the on-line network of electronic resources that\r\ncomprise the new working context for scholars.  3) Retrospective conversion\r\nof portions of the scholarly record should be a key strategy as information\r\nproviders respond to changes in scholarly communication practices.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nVECCIA * AM's evaluation project and public users of electronic resources\r\n* AM and its design * Site selection and evaluating the Macintosh\r\nimplementation of AM * Characteristics of the six public libraries\r\nselected * Characteristics of AM's users in these libraries * Principal\r\nways AM is being used *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nSusan VECCIA, team leader, and Joanne FREEMAN, associate coordinator,\r\nAmerican Memory, Library of Congress, gave a joint presentation.  First,\r\nby way of introduction, VECCIA explained her and FREEMAN's roles in\r\nAmerican Memory (AM).  Serving principally as an observer, VECCIA has\r\nassisted with the evaluation project of AM, placing AM collections in a\r\nvariety of different sites around the country and helping to organize and\r\nimplement that project.  FREEMAN has been an associate coordinator of AM\r\nand has been involved principally with the interpretative materials,\r\npreparing some of the electronic exhibits and printed historical\r\ninformation that accompanies AM and that is requested by users.  VECCIA\r\nand FREEMAN shared anecdotal observations concerning AM with public users\r\nof electronic resources.  Notwithstanding a fairly structured evaluation\r\nin progress, both VECCIA and FREEMAN chose not to report on specifics in\r\nterms of numbers, etc., because they felt it was too early in the\r\nevaluation project to do so.\r\n\r\nAM is an electronic archive of primary source materials from the Library\r\nof Congress, selected collections representing a variety of formats--\r\nphotographs, graphic arts, recorded sound, motion pictures, broadsides,\r\nand soon, pamphlets and books.  In terms of the design of this system,\r\nthe interpretative exhibits have been kept separate from the primary\r\nresources, with good reason.  Accompanying this collection are printed\r\ndocumentation and user guides, as well as guides that FREEMAN prepared for\r\nteachers so that they may begin using the content of the system at once.\r\n\r\nVECCIA described the evaluation project before talking about the public\r\nusers of AM, limiting her remarks to public libraries, because FREEMAN\r\nwould talk more specifically about schools from kindergarten to twelfth\r\ngrade (K-12).   Having started in spring 1991, the evaluation currently\r\ninvolves testing of the Macintosh implementation of AM.  Since the\r\nprimary goal of this evaluation is to determine the most appropriate\r\naudience or audiences for AM, very different sites were selected.  This\r\nmakes evaluation difficult because of the varying degrees of technology\r\nliteracy among the sites.  AM is situated in forty-four locations, of\r\nwhich six are public libraries and sixteen are schools.  Represented\r\namong the schools are elementary, junior high, and high schools.\r\nDistrict offices also are involved in the evaluation, which will\r\nconclude in summer 1993.\r\n\r\nVECCIA focused the remainder of her talk on the six public libraries, one\r\nof which doubles as a state library.  They represent a range of\r\ngeographic areas and a range of demographic characteristics.  For\r\nexample, three are located in urban settings, two in rural settings, and\r\none in a suburban setting.  A range of technical expertise is to be found\r\namong these facilities as well.  For example, one is an \"Apple library of\r\nthe future,\" while two others are rural one-room libraries--in one, AM\r\nsits at the front desk next to a tractor manual.\r\n\r\nAll public libraries have been extremely enthusiastic, supportive, and\r\nappreciative of the work that AM has been doing.  VECCIA characterized\r\nvarious users:  Most users in public libraries describe themselves as\r\ngeneral readers; of the students who use AM in the public libraries,\r\nthose in fourth grade and above seem most interested.  Public libraries\r\nin rural sites tend to attract retired people, who have been highly\r\nreceptive to AM.  Users tend to fall into two additional categories: \r\npeople interested in the content and historical connotations of these\r\nprimary resources, and those fascinated by the technology.  The format\r\nreceiving the most comments has been motion pictures.  The adult users in\r\npublic libraries are more comfortable with IBM computers, whereas young\r\npeople seem comfortable with either IBM or Macintosh, although most of\r\nthem seem to come from a Macintosh background.  This same tendency is\r\nfound in the schools.\r\n\r\nWhat kinds of things do users do with AM?  In a public library there are\r\ntwo main goals or ways that AM is being used:  as an individual learning\r\ntool, and as a leisure activity.  Adult learning was one area that VECCIA\r\nwould highlight as a possible application for a tool such as AM.  She\r\ndescribed a patron of a rural public library who comes in every day on\r\nhis lunch hour and literally reads AM, methodically going through the\r\ncollection image by image.  At the end of his hour he makes an electronic\r\nbookmark, puts it in his pocket, and returns to work.  The next day he\r\ncomes in and resumes where he left off.  Interestingly, this man had\r\nnever been in the library before he used AM.  In another small, rural\r\nlibrary, the coordinator reports that AM is a popular activity for some\r\nof the older, retired people in the community, who ordinarily would not\r\nuse \"those things,\"--computers.  Another example of adult learning in\r\npublic libraries is book groups, one of which, in particular, is using AM\r\nas part of its reading on industrialization, integration, and urbanization\r\nin the early 1900s.\r\n\r\nOne library reports that a family is using AM to help educate their\r\nchildren.  In another instance, individuals from a local museum came in\r\nto use AM to prepare an exhibit on toys of the past.  These two examples\r\nemphasize the mission of the public library as a cultural institution,\r\nreaching out to people who do not have the same resources available to\r\nthose who live in a metropolitan area or have access to a major library. \r\nOne rural library reports that junior high school students in large\r\nnumbers came in one afternoon to use AM for entertainment.  A number of\r\npublic libraries reported great interest among postcard collectors in the\r\nDetroit collection, which was essentially a collection of images used on\r\npostcards around the turn of the century.  Train buffs are similarly\r\ninterested because that was a time of great interest in railroading. \r\nPeople, it was found, relate to things that they know of firsthand.  For\r\nexample, in both rural public libraries where AM was made available,\r\nobservers reported that the older people with personal remembrances of\r\nthe turn of the century were gravitating to the Detroit collection. \r\nThese examples served to underscore MICHELSON's observation re the\r\nintegration of electronic tools and ideas--that people learn best when\r\nthe material relates to something they know.\r\n\r\nVECCIA made the final point that in many cases AM serves as a\r\npublic-relations tool for the public libraries that are testing it.  In\r\none case, AM is being used as a vehicle to secure additional funding for\r\nthe library.  In another case, AM has served as an inspiration to the\r\nstaff of a major local public library in the South to think about ways to\r\nmake its own collection of photographs more accessible to the public.\r\n\r\n                                  ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nFREEMAN * AM and archival electronic resources in a school environment *\r\nQuestions concerning context * Questions concerning the electronic format\r\nitself * Computer anxiety * Access and availability of the system *\r\nHardware * Strengths gained through the use of archival resources in\r\nschools *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nReiterating an observation made by VECCIA, that AM is an archival\r\nresource made up of primary materials with very little interpretation,\r\nFREEMAN stated that the project has attempted to bridge the gap between\r\nthese bare primary materials and a school environment, and in that cause\r\nhas created guided introductions to AM collections.  Loud demand from the\r\neducational community,  chiefly from teachers working with the upper\r\ngrades of elementary school through high school, greeted the announcement\r\nthat AM would be tested around the country.\r\n\r\nFREEMAN reported not only on what was learned about AM in a school\r\nenvironment, but also on several universal questions that were raised\r\nconcerning archival electronic resources in schools.  She discussed\r\nseveral strengths of this type of material in a school environment as\r\nopposed to a highly structured resource that offers a limited number of\r\npaths to follow.\r\n\r\nFREEMAN first raised several questions about using AM in a school\r\nenvironment.  There is often some difficulty in developing a sense of\r\nwhat the system contains.  Many students sit down at a computer resource\r\nand assume that, because AM comes from the Library of Congress, all of\r\nAmerican history is now at their fingertips.  As a result of that sort of\r\nmistaken judgment, some students are known to conclude that AM contains\r\nnothing of use to them when they look for one or two things and do not\r\nfind them.  It is difficult to discover that middle ground where one has\r\na sense of what the system contains.  Some students grope toward the idea\r\nof an archive, a new idea to them, since they have not previously\r\nexperienced what it means to have access to a vast body of somewhat\r\nrandom information.\r\n\r\nOther questions raised by FREEMAN concerned the electronic format itself. \r\nFor instance, in a school environment it is often difficult both for\r\nteachers and students to gain a sense of what it is they are viewing. \r\nThey understand that it is a visual image, but they do not necessarily\r\nknow that it is a postcard from the turn of the century, a panoramic\r\nphotograph, or even machine-readable text of an eighteenth-century\r\nbroadside, a twentieth-century printed book, or a nineteenth-century\r\ndiary.  That distinction is often difficult for people in a school\r\nenvironment to grasp.  Because of that, it occasionally becomes difficult\r\nto draw conclusions from what one is viewing.\r\n\r\nFREEMAN also noted the obvious fear of the computer, which constitutes a\r\ndifficulty in using an electronic resource.  Though students in general\r\ndid not suffer from this anxiety, several older students feared that they\r\nwere computer-illiterate, an assumption that became self-fulfilling when\r\nthey searched for something but failed to find it.  FREEMAN said she\r\nbelieved that some teachers also fear computer resources, because they\r\nbelieve they lack complete control.  FREEMAN related the example of\r\nteachers shooing away students because it was not their time to use the\r\nsystem.  This was a case in which the situation had to be extremely\r\nstructured so that the teachers would not feel that they had lost their\r\ngrasp on what the system contained.\r\n\r\nA final question raised by FREEMAN concerned access and availability of\r\nthe system.  She noted the occasional existence of a gap in communication\r\nbetween school librarians and teachers.  Often AM sits in a school\r\nlibrary and the librarian is the person responsible for monitoring the\r\nsystem.  Teachers do not always take into their world new library\r\nresources about which the librarian is excited.  Indeed, at the sites\r\nwhere AM had been used most effectively within a library, the librarian\r\nwas required to go to specific teachers and instruct them in its use.  As\r\na result, several AM sites will have in-service sessions over a summer,\r\nin the hope that perhaps, with a more individualized link, teachers will\r\nbe more likely to use the resource.\r\n\r\nA related issue in the school context concerned the number of\r\nworkstations available at any one location.  Centralization of equipment\r\nat the district level, with teachers invited to download things and walk\r\naway with them, proved unsuccessful because the hours these offices were\r\nopen were also school hours.\r\n\r\nAnother issue was hardware.  As VECCIA observed, a range of sites exists,\r\nsome technologically advanced and others essentially acquiring their\r\nfirst computer for the primary purpose of using it in conjunction with\r\nAM's testing.  Users at technologically sophisticated sites want even\r\nmore sophisticated hardware, so that they can perform even more\r\nsophisticated tasks with the materials in AM.  But once they acquire a\r\nnewer piece of hardware, they must learn how to use that also; at an\r\nunsophisticated site it takes an extremely long time simply to become\r\naccustomed to the computer, not to mention the program offered with the\r\ncomputer.  All of these small issues raise one large question, namely,\r\nare systems like AM truly rewarding in a school environment, or do they\r\nsimply act as innovative toys that do little more than spark interest?\r\n\r\nFREEMAN contended that the evaluation project has revealed several strengths\r\nthat were gained through the use of archival resources in schools, including:\r\n\r\n     * Psychic rewards from using AM as a vast, rich database, with\r\n     teachers assigning various projects to students--oral presentations,\r\n     written reports, a documentary, a turn-of-the-century newspaper--\r\n     projects that start with the materials in AM but are completed using\r\n     other resources; AM thus is used as a research tool in conjunction\r\n     with other electronic resources, as well as with books and items in\r\n     the library where the system is set up.\r\n\r\n     * Students are acquiring computer literacy in a humanities context.\r\n\r\n     * This sort of system is overcoming the isolation between disciplines\r\n     that often exists in schools.  For example, many English teachers are\r\n     requiring their students to write papers on historical topics\r\n     represented in AM.  Numerous teachers have reported that their\r\n     students are learning critical thinking skills using the system.\r\n\r\n     * On a broader level, AM is introducing primary materials, not only\r\n     to students but also to teachers, in an environment where often\r\n     simply none exist--an exciting thing for the students because it\r\n     helps them learn to conduct research, to interpret, and to draw\r\n     their own conclusions.  In learning to conduct research and what it\r\n     means, students are motivated to seek knowledge.  That relates to\r\n     another positive outcome--a high level of personal involvement of\r\n     students with the materials in this system and greater motivation to\r\n     conduct their own research and draw their own conclusions.\r\n\r\n     * Perhaps the most ironic strength of these kinds of archival\r\n     electronic resources is that many of the teachers AM interviewed\r\n     were desperate, it is no exaggeration to say, not only for primary\r\n     materials but for unstructured primary materials.  These would, they\r\n     thought, foster personally motivated research, exploration, and\r\n     excitement in their students.  Indeed, these materials have done\r\n     just that.  Ironically, however, this lack of structure produces\r\n     some of the confusion to which the newness of these kinds of\r\n     resources may also contribute.  The key to effective use of archival\r\n     products in a school environment is a clear, effective introduction\r\n     to the system and to what it contains. \r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nDISCUSSION * Nothing known, quantitatively, about the number of\r\nhumanities scholars who must see the original versus those who would\r\nsettle for an edited transcript, or about the ways in which humanities\r\nscholars are using information technology * Firm conclusions concerning\r\nthe manner and extent of the use of supporting materials in print\r\nprovided by AM to await completion of evaluative study * A listener's\r\nreflections on additional applications of electronic texts * Role of\r\nelectronic resources in teaching elementary research skills to students *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nDuring the discussion that followed the presentations by MICHELSON,\r\nVECCIA, and FREEMAN, additional points emerged.\r\n\r\nLESK asked if MICHELSON could give any quantitative estimate of the\r\nnumber of humanities scholars who must see or want to see the original,\r\nor the best possible version of the material, versus those who typically\r\nwould settle for an edited transcript.  While unable to provide a figure,\r\nshe offered her impressions as an archivist who has done some reference\r\nwork and has discussed this issue with other archivists who perform\r\nreference, that those who use archives and those who use primary sources\r\nfor what would be considered very high-level scholarly research, as\r\nopposed to, say, undergraduate papers, were few in number, especially\r\ngiven the public interest in using primary sources to conduct\r\ngenealogical or avocational research and the kind of professional\r\nresearch done by people in private industry or the federal government. \r\nMore important in MICHELSON's view was that, quantitatively, nothing is\r\nknown about the ways in which, for example, humanities scholars are using\r\ninformation technology.  No studies exist to offer guidance in creating\r\nstrategies.  The most recent study was conducted in 1985 by the American\r\nCouncil of Learned Societies (ACLS), and what it showed was that 50\r\npercent of humanities scholars at that time were using computers.  That\r\nconstitutes the extent of our knowledge.\r\n\r\nConcerning AM's strategy for orienting people toward the scope of\r\nelectronic resources, FREEMAN could offer no hard conclusions at this\r\npoint, because she and her colleagues were still waiting to see,\r\nparticularly in the schools, what has been made of their efforts.  Within\r\nthe system, however, AM has provided what are called electronic exhibits-\r\n-such as introductions to time periods and materials--and these are\r\nintended to offer a student user a sense of what a broadside is  and what\r\nit might tell her or him.  But FREEMAN conceded that the project staff\r\nwould have to talk with students next year, after teachers have had a\r\nsummer to use the materials, and attempt to discover what the students\r\nwere learning from the materials.  In addition, FREEMAN described\r\nsupporting materials in print provided by AM at the request of local\r\nteachers during a meeting held at LC.  These included time lines,\r\nbibliographies, and other materials that could be reproduced on a\r\nphotocopier in a classroom.  Teachers could walk away with and use these,\r\nand in this way gain a better understanding of the contents.  But again,\r\nreaching firm conclusions concerning the manner and extent of their use\r\nwould have to wait until next year.\r\n\r\nAs to the changes she saw occurring at the National Archives and Records\r\nAdministration (NARA) as a result of the increasing emphasis on\r\ntechnology in scholarly research, MICHELSON stated that NARA at this\r\npoint was absorbing the report by her and Jeff Rothenberg addressing\r\nstrategies for the archival profession in general, although not for the\r\nNational Archives specifically.  NARA is just beginning to establish its\r\nrole and what it can do.  In terms of changes and initiatives that NARA\r\ncan take, no clear response could be given at this time.\r\n\r\nGREENFIELD remarked two trends mentioned in the session.  Reflecting on\r\nDALY's opening comments on how he could have used a Latin collection of\r\ntext in an electronic form, he said that at first he thought most scholars\r\nwould be unwilling to do that.  But as he thought of that in terms of the\r\noriginal meaning of research--that is, having already mastered these texts,\r\nresearching them for critical and comparative purposes--for the first time,\r\nthe electronic format made a lot of sense.  GREENFIELD could envision\r\ngrowing numbers of scholars learning the new technologies for that very\r\naspect of their scholarship and for convenience's sake.\r\n\r\nListening to VECCIA and FREEMAN, GREENFIELD thought of an additional\r\napplication of electronic texts.  He realized that AM could be used as a\r\nguide to lead someone to original sources.  Students cannot be expected\r\nto have mastered these sources, things they have never known about\r\nbefore.  Thus, AM is leading them, in theory, to a vast body of\r\ninformation and giving them a superficial overview of it, enabling them\r\nto select parts of it.  GREENFIELD asked if any evidence exists that this\r\nresource will indeed teach the new user, the K-12 students, how to do\r\nresearch.  Scholars already know how to do research and are applying\r\nthese new tools.  But he wondered why students would go beyond picking\r\nout things that were most exciting to them.\r\n\r\nFREEMAN conceded the correctness of GREENFIELD's observation as applied\r\nto a school environment.  The risk is that a student would sit down at a\r\nsystem, play with it, find some things of interest, and then walk away. \r\nBut in the relatively controlled situation of a school library, much will\r\ndepend on the instructions a teacher or a librarian gives a student.  She\r\nviewed the situation not as one of fine-tuning research skills but of\r\ninvolving students at a personal level in understanding and researching\r\nthings.  Given the guidance one can receive at school, it then becomes\r\npossible to teach elementary research skills to students, which in fact\r\none particular librarian said she was teaching her fifth graders. \r\nFREEMAN concluded that introducing the idea of following one's own path\r\nof inquiry, which is essentially what research entails, involves more\r\nthan teaching specific skills.  To these comments VECCIA added the\r\nobservation that the individual teacher and the use of a creative\r\nresource, rather than AM itself, seemed to make the key difference.\r\nSome schools and some teachers are making excellent use of the nature\r\nof critical thinking and teaching skills, she said.\r\n\r\nConcurring with these remarks, DALY closed the session with the thought that\r\nthe more that producers produced for teachers and for scholars to use with\r\ntheir students, the more successful their electronic products would prove.\r\n\r\n                                 ******\r\n\r\nSESSION II.  SHOW AND TELL\r\n\r\nJacqueline HESS, director, National Demonstration Laboratory, served as\r\nmoderator of the \"show-and-tell\" session.  She noted that a\r\nquestion-and-answer period would follow each presentation.\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nMYLONAS * Overview and content of Perseus * Perseus' primary materials\r\nexist in a system-independent, archival form * A concession * Textual\r\naspects of Perseus * Tools to use with the Greek text * Prepared indices\r\nand full-text searches in Perseus * English-Greek word search leads to\r\nclose study of words and concepts * Navigating Perseus by tracing down\r\nindices * Using the iconography to perform research *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nElli MYLONAS, managing editor, Perseus Project, Harvard University, first\r\ngave an overview of Perseus, a large, collaborative effort based at\r\nHarvard University but with contributors and collaborators located at\r\nnumerous universities and colleges in the United States (e.g., Bowdoin,\r\nMaryland, Pomona, Chicago, Virginia).  Funded primarily by the\r\nAnnenberg/CPB Project, with additional funding from Apple, Harvard, and\r\nthe Packard Humanities Institute, among others, Perseus is a multimedia,\r\nhypertextual database for teaching and research on classical Greek\r\ncivilization, which was released in February 1992 in version 1.0 and\r\ndistributed by Yale University Press.\r\n\r\nConsisting entirely of primary materials, Perseus includes ancient Greek\r\ntexts and translations of those texts; catalog entries--that is, museum\r\ncatalog entries, not library catalog entries--on vases, sites, coins,\r\nsculpture, and archaeological objects; maps; and a dictionary, among\r\nother sources.  The number of objects and the objects for which catalog\r\nentries exist are accompanied by thousands of color images, which\r\nconstitute a major feature of the database.  Perseus contains\r\napproximately 30 megabytes of text, an amount that will double in\r\nsubsequent versions.  In addition to these primary materials, the Perseus\r\nProject has been building tools for using them, making access and\r\nnavigation easier, the goal being to build part of the electronic\r\nenvironment discussed earlier in the morning in which students or\r\nscholars can work with their sources.\r\n\r\nThe demonstration of Perseus will show only a fraction of the real work\r\nthat has gone into it, because the project had to face the dilemma of\r\nwhat to enter when putting something into machine-readable form:  should\r\none aim for very high quality or make concessions in order to get the\r\nmaterial in?  Since Perseus decided to opt for very high quality, all of\r\nits primary materials exist in a system-independent--insofar as it is\r\npossible to be system-independent--archival form.  Deciding what that\r\narchival form would be and attaining it required much work and thought. \r\nFor example, all the texts are marked up in SGML, which will be made\r\ncompatible with the guidelines of the Text Encoding Initiative (TEI) when\r\nthey are issued.\r\n\r\nDrawings are postscript files, not meeting international standards, but\r\nat least designed to go across platforms.  Images, or rather the real\r\narchival forms, consist of the best available slides, which are being\r\ndigitized.  Much of the catalog material exists in database form--a form\r\nthat the average user could use, manipulate, and display on a personal\r\ncomputer, but only at great cost.  Thus, this is where the concession\r\ncomes in:  All of this rich, well-marked-up information is stripped of\r\nmuch of its content; the images are converted into bit-maps and the text\r\ninto small formatted chunks.  All this information can then be imported\r\ninto HyperCard and run on a mid-range Macintosh, which is what Perseus\r\nusers have.  This fact has made it possible for Perseus to attain wide\r\nuse fairly rapidly.  Without those archival forms the HyperCard version\r\nbeing demonstrated could not be made easily, and the project could not\r\nhave the potential to move to other forms and machines and software as\r\nthey appear, none of which information is in Perseus on the CD.\r\n\r\nOf the numerous multimedia aspects of Perseus, MYLONAS focused on the\r\ntextual.  Part of what makes Perseus such a pleasure to use, MYLONAS\r\nsaid, is this effort at seamless integration and the ability to move\r\naround both visual and textual material.  Perseus also made the decision\r\nnot to attempt to interpret its material any more than one interprets by\r\nselecting.  But, MYLONAS emphasized, Perseus is not courseware:  No\r\nsyllabus exists.  There is no effort to define how one teaches a topic\r\nusing Perseus, although the project may eventually collect papers by\r\npeople who have used it to teach.  Rather, Perseus aims to provide\r\nprimary material in a kind of electronic library, an electronic sandbox,\r\nso to say, in which students and scholars who are working on this\r\nmaterial can explore by themselves.  With that, MYLONAS demonstrated\r\nPerseus, beginning with the Perseus gateway, the first thing one sees\r\nupon opening Perseus--an effort in part to solve the contextualizing\r\nproblem--which tells the user what the system contains.\r\n\r\nMYLONAS demonstrated only a very small portion, beginning with primary\r\ntexts and running off the CD-ROM.  Having selected Aeschylus' Prometheus\r\nBound, which was viewable in Greek and English pretty much in the same\r\nsegments together, MYLONAS demonstrated tools to use with the Greek text,\r\nsomething not possible with a book:  looking up the dictionary entry form\r\nof an unfamiliar word in Greek after subjecting it to Perseus'\r\nmorphological analysis for all the texts.  After finding out about a\r\nword, a user may then decide to see if it is used anywhere else in Greek. \r\nBecause vast amounts of indexing support all of the primary material, one\r\ncan find out where else all forms of a particular Greek word appear--\r\noften not a trivial matter because Greek is highly inflected.  Further,\r\nsince the story of Prometheus has to do with the origins of sacrifice, a\r\nuser may wish to study and explore sacrifice in Greek literature; by\r\ntyping sacrifice into a small window, a user goes to the English-Greek\r\nword list--something one cannot do without the computer (Perseus has\r\nindexed the definitions of its dictionary)--the string sacrifice appears\r\nin the definitions of these sixty-five words.  One may then find out\r\nwhere any of those words is used in the work(s) of a particular author. \r\nThe English definitions are not lemmatized.\r\n\r\nAll of the indices driving this kind of usage were originally devised for\r\nspeed, MYLONAS observed; in other words, all that kind of information--\r\nall forms of all words, where they exist, the dictionary form they belong\r\nto--were collected into databases, which will expedite searching.  Then\r\nit was discovered that one can do things searching in these databases\r\nthat could not be done searching in the full texts.  Thus, although there\r\nare full-text searches in Perseus, much of the work is done behind the\r\nscenes, using prepared indices.  Re the indexing that is done behind the\r\nscenes, MYLONAS pointed out that without the SGML forms of the text, it\r\ncould not be done effectively.  Much of this indexing is based on the\r\nstructures that are made explicit by the SGML tagging.\r\n\r\nIt was found that one of the things many of Perseus' non-Greek-reading\r\nusers do is start from the dictionary and then move into the close study\r\nof words and concepts via this kind of English-Greek word search, by which\r\nmeans they might select a concept.  This exercise has been assigned to\r\nstudents in core courses at Harvard--to study a concept by looking for the\r\nEnglish word in the dictionary, finding the Greek words, and then finding\r\nthe words in the Greek but, of course, reading across in the English.\r\nThat tells them a great deal about what a translation means as well.\r\n\r\nShould one also wish to see images that have to do with sacrifice, that\r\nperson would go to the object key word search, which allows one to\r\nperform a similar kind of index retrieval on the database of\r\narchaeological objects.  Without words, pictures are useless; Perseus has\r\nnot reached the point where it can do much with images that are not\r\ncataloged.  Thus, although it is possible in Perseus with text and images\r\nto navigate by knowing where one wants to end up--for example, a\r\nred-figure vase from the Boston Museum of Fine Arts--one can perform this\r\nkind of navigation very easily by tracing down indices.  MYLONAS\r\nillustrated several generic scenes of sacrifice on vases.  The features\r\ndemonstrated derived from Perseus 1.0; version 2.0 will implement even\r\nbetter means of retrieval.\r\n\r\nMYLONAS closed by looking at one of the pictures and noting again that\r\none can do a great deal of research using the iconography as well as the\r\ntexts.  For instance, students in a core course at Harvard this year were\r\nhighly interested in Greek concepts of foreigners and representations of\r\nnon-Greeks.  So they performed a great deal of research, both with texts\r\n(e.g., Herodotus) and with iconography on vases and coins, on how the\r\nGreeks portrayed non-Greeks.  At the same time, art historians who study\r\niconography were also interested, and were able to use this material.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nDISCUSSION * Indexing and searchability of all English words in Perseus *\r\nSeveral features of Perseus 1.0 * Several levels of customization\r\npossible * Perseus used for general education * Perseus' effects on\r\neducation * Contextual information in Perseus * Main challenge and\r\nemphasis of Perseus *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nSeveral points emerged in the discussion that followed MYLONAS's presentation.\r\n\r\nAlthough MYLONAS had not demonstrated Perseus' ability to cross-search\r\ndocuments, she confirmed that all English words in Perseus are indexed\r\nand can be searched.  So, for example, sacrifice could have been searched\r\nin all texts, the historical essay, and all the catalogue entries with\r\ntheir descriptions--in short, in all of Perseus.\r\n\r\nBoolean logic is not in Perseus 1.0 but will be added to the next\r\nversion, although an effort is being made not to restrict Perseus to a\r\ndatabase in which one just performs searching, Boolean or otherwise.  It\r\nis possible to move laterally through the documents by selecting a word\r\none is interested in and selecting an area of information one is\r\ninterested in and trying to look that word up in that area.\r\n\r\nSince Perseus was developed in HyperCard, several levels of customization\r\nare possible.  Simple authoring tools exist that allow one to create\r\nannotated paths through the information, which are useful for note-taking\r\nand for guided tours for teaching purposes and for expository writing. \r\nWith a little more ingenuity it is possible to begin to add or substitute\r\nmaterial in Perseus.\r\n\r\nPerseus has not been used so much for classics education as for general\r\neducation, where it seemed to have an impact on the students in the core\r\ncourse at Harvard (a general required course that students must take in\r\ncertain areas).  Students were able to use primary material much more.\r\n\r\nThe Perseus Project has an evaluation team at the University of Maryland\r\nthat has been documenting Perseus' effects on education.  Perseus is very\r\npopular, and anecdotal evidence indicates that it is having an effect at\r\nplaces other than Harvard, for example, test sites at Ball State\r\nUniversity, Drury College, and numerous small places where opportunities\r\nto use vast amounts of primary data may not exist.  One documented effect\r\nis that archaeological, anthropological, and philological research is\r\nbeing done by the same person instead of by three different people.\r\n\r\nThe contextual information in Perseus includes an overview essay, a\r\nfairly linear historical essay on the fifth century B.C. that provides\r\nlinks into the primary material (e.g., Herodotus, Thucydides, and\r\nPlutarch), via small gray underscoring (on the screen) of linked\r\npassages.  These are handmade links into other material.\r\n\r\nTo different extents, most of the production work was done at Harvard,\r\nwhere the people and the equipment are located.  Much of the\r\ncollaborative activity involved data collection and structuring, because\r\nthe main challenge and the emphasis of Perseus is the gathering of\r\nprimary material, that is, building a useful environment for studying\r\nclassical Greece, collecting data, and making it useful. \r\nSystems-building is definitely not the main concern.  Thus, much of the\r\nwork has involved writing essays, collecting information, rewriting it,\r\nand tagging it.  That can be done off site.  The creative link for the\r\noverview essay as well as for both systems and data was collaborative,\r\nand was forged via E-mail and paper mail with professors at Pomona and\r\nBowdoin.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nCALALUCA * PLD's principal focus and contribution to scholarship *\r\nVarious questions preparatory to beginning the project * Basis for\r\nproject * Basic rule in converting PLD * Concerning the images in PLD *\r\nRunning PLD under a variety of retrieval softwares * Encoding the\r\ndatabase a hard-fought issue * Various features demonstrated * Importance\r\nof user documentation * Limitations of the CD-ROM version *   \r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nEric CALALUCA, vice president, Chadwyck-Healey, Inc., demonstrated a\r\nsoftware interpretation of the Patrologia Latina Database (PLD).  PLD's\r\nprincipal focus from the beginning of the project about three-and-a-half\r\nyears ago was on converting Migne's Latin series, and in the end,\r\nCALALUCA suggested, conversion of the text will be the major contribution\r\nto scholarship.  CALALUCA stressed that, as possibly the only private\r\npublishing organization at the Workshop, Chadwyck-Healey had sought no\r\nfederal funds or national foundation support before embarking upon the\r\nproject, but instead had relied upon a great deal of homework and\r\nmarketing to accomplish the task of conversion.\r\n\r\nEver since the possibilities of computer-searching have emerged, scholars\r\nin the field of late ancient and early medieval studies (philosophers,\r\ntheologians, classicists, and those studying the history of natural law\r\nand the history of the legal development of Western civilization) have\r\nbeen longing for a fully searchable version of Western literature, for\r\nexample, all the texts of Augustine and Bernard of Clairvaux and\r\nBoethius, not to mention all the secondary and tertiary authors.\r\n\r\nVarious questions arose, CALALUCA said.  Should one convert Migne? \r\nShould the database be encoded?  Is it necessary to do that?  How should\r\nit be delivered?  What about CD-ROM?  Since this is a transitional\r\nmedium, why even bother to create software to run on a CD-ROM?  Since\r\neverybody knows people will be networking information, why go to the\r\ntrouble--which is far greater with CD-ROM than with the production of\r\nmagnetic data?  Finally, how does one make the data available?  Can many\r\nof the hurdles to using electronic information that some publishers have\r\nimposed upon databases be eliminated?\r\n\r\nThe PLD project was based on the principle that computer-searching of\r\ntexts is most effective when it is done with a large database.  Because\r\nPLD represented a collection that serves so many disciplines across so\r\nmany periods, it was irresistible.\r\n\r\nThe basic rule in converting PLD was to do no harm, to avoid the sins of\r\nintrusion in such a database:  no introduction of newer editions, no\r\non-the-spot changes, no eradicating of all possible falsehoods from an\r\nedition.  Thus, PLD is not the final act in electronic publishing for\r\nthis discipline, but simply the beginning.  The conversion of PLD has\r\nevoked numerous unanticipated questions:  How will information be used? \r\nWhat about networking?  Can the rights of a database be protected? \r\nShould one protect the rights of a database?  How can it be made\r\navailable?\r\n\r\nThose converting PLD also tried to avoid the sins of omission, that is,\r\nexcluding portions of the collections or whole sections.  What about the\r\nimages?  PLD is full of images, some are extremely pious\r\nnineteenth-century representations of the Fathers, while others contain\r\nhighly interesting elements.  The goal was to cover all the text of Migne\r\n(including notes, in Greek and in Hebrew, the latter of which, in\r\nparticular, causes problems in creating a search structure), all the\r\nindices, and even the images, which are being scanned in separately\r\nsearchable files.\r\n\r\nSeveral North American institutions that have placed acquisition requests\r\nfor the PLD database have requested it in magnetic form without software,\r\nwhich means they are already running it without software, without\r\nanything demonstrated at the Workshop.\r\n\r\nWhat cannot practically be done is go back and reconvert and re-encode\r\ndata, a time-consuming and extremely costly enterprise.  CALALUCA sees\r\nPLD as a database that can, and should, be run under a variety of\r\nretrieval softwares.  This will permit the widest possible searches. \r\nConsequently, the need to produce a CD-ROM of PLD, as well as to develop\r\nsoftware that could handle some 1.3 gigabyte of heavily encoded text,\r\ndeveloped out of conversations with collection development and reference\r\nlibrarians who wanted software both compassionate enough for the\r\npedestrian but also capable of incorporating the most detailed\r\nlexicographical studies that a user desires to conduct.  In the end, the\r\nencoding and conversion of the data will prove the most enduring\r\ntestament to the value of the project.\r\n\r\nThe encoding of the database was also a hard-fought issue:  Did the\r\ndatabase need to be encoded? Were there normative structures for encoding\r\nhumanist texts?  Should it be SGML?  What about the TEI--will it last,\r\nwill it prove useful?  CALALUCA expressed some minor doubts as to whether\r\na data bank can be fully TEI-conformant.  Every effort can be made, but\r\nin the end to be TEI-conformant means to accept the need to make some\r\nfirm encoding decisions that can, indeed, be disputed.  The TEI points\r\nthe publisher in a proper direction but does not presume to make all the\r\ndecisions for him or her.  Essentially, the goal of encoding was to\r\neliminate, as much as possible, the hindrances to information-networking,\r\nso that if an institution acquires a database, everybody associated with\r\nthe institution can have access to it.\r\n\r\nCALALUCA demonstrated a portion of Volume 160, because it had the most\r\nanomalies in it.  The software was created by Electronic Book\r\nTechnologies of Providence, RI, and is called Dynatext.  The software\r\nworks only with SGML-coded data.\r\n\r\nViewing a table of contents on the screen, the audience saw how Dynatext\r\ntreats each element as a book and attempts to simplify movement through a\r\nvolume.  Familiarity with the Patrologia in print (i.e., the text, its\r\nsource, and the editions) will make the machine-readable versions highly\r\nuseful.  (Software with a Windows application was sought for PLD,\r\nCALALUCA said, because this was the main trend for scholarly use.)\r\n\r\nCALALUCA also demonstrated how a user can perform a variety of searches\r\nand quickly move to any part of a volume; the look-up screen provides\r\nsome basic, simple word-searching. \r\n\r\nCALALUCA argued that one of the major difficulties is not the software. \r\nRather, in creating a product that will be used by scholars representing\r\na broad spectrum of computer sophistication,  user documentation proves\r\nto be the most important service one can provide.\r\n\r\nCALALUCA next illustrated a truncated search under mysterium within ten\r\nwords of virtus and how one would be able to find its contents throughout\r\nthe entire database.  He said that the exciting thing about PLD is that\r\nmany of the applications in the retrieval software being written for it\r\nwill exceed the capabilities of the software employed now for the CD-ROM\r\nversion.  The CD-ROM faces genuine limitations, in terms of speed and\r\ncomprehensiveness, in the creation of a retrieval software to run it. \r\nCALALUCA said he hoped that individual scholars will download the data,\r\nif they wish, to their personal computers, and have ready access to\r\nimportant texts on a constant basis, which they will be able to use in\r\ntheir research and from which they might even be able to publish.\r\n\r\n(CALALUCA explained that the blue numbers represented Migne's column numbers,\r\nwhich are the standard scholarly references.  Pulling up a note, he stated\r\nthat these texts were heavily edited and the image files would appear simply\r\nas a note as well, so that one could quickly access an image.)\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nFLEISCHHAUER/ERWAY * Several problems with which AM is still wrestling *\r\nVarious search and retrieval capabilities * Illustration of automatic\r\nstemming and a truncated search * AM's attempt to find ways to connect\r\ncataloging to the texts * AM's gravitation towards SGML * Striking a\r\nbalance between quantity and quality * How AM furnishes users recourse to\r\nimages * Conducting a search in a full-text environment * Macintosh and\r\nIBM prototypes of AM * Multimedia aspects of AM *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nA demonstration of American Memory by its coordinator, Carl FLEISCHHAUER,\r\nand Ricky ERWAY, associate coordinator, Library of Congress, concluded\r\nthe morning session.  Beginning with a collection of broadsides from the\r\nContinental Congress and the Constitutional Convention, the only text\r\ncollection in a presentable form at the time of the Workshop, FLEISCHHAUER\r\nhighlighted several of the problems with which AM is still wrestling.\r\n(In its final form, the disk will contain two collections, not only the\r\nbroadsides but also the full text with illustrations of a set of\r\napproximately 300 African-American pamphlets from the period 1870 to 1910.)\r\n\r\nAs FREEMAN had explained earlier, AM has attempted to use a small amount\r\nof interpretation to introduce collections.  In the present case, the\r\ncontractor, a company named Quick Source, in Silver Spring, MD., used\r\nsoftware called Toolbook and put together a modestly interactive\r\nintroduction to the collection.  Like the two preceding speakers,\r\nFLEISCHHAUER argued that the real asset was the underlying collection.\r\n\r\nFLEISCHHAUER proceeded to describe various search and retrieval\r\ncapabilities while ERWAY worked the computer.  In this particular package\r\nthe \"go to\" pull-down allowed the user in effect to jump out of Toolbook,\r\nwhere the interactive program was located, and enter the third-party\r\nsoftware used by AM for this text collection, which is called Personal\r\nLibrarian.  This was the Windows version of Personal Librarian, a\r\nsoftware application put together by a company in Rockville, Md.\r\n\r\nSince the broadsides came from the Revolutionary War period, a search was\r\nconducted using the words British or war, with the default operator reset\r\nas or.  FLEISCHHAUER demonstrated both automatic stemming (which finds\r\nother forms of the same root) and a truncated search.  One of Personal\r\nLibrarian's strongest features, the relevance ranking, was represented by\r\na chart that indicated how often words being sought appeared in\r\ndocuments, with the one receiving the most \"hits\" obtaining the highest\r\nscore.  The \"hit list\" that is supplied takes the relevance ranking into\r\naccount, making the first hit, in effect, the one the software has\r\nselected as the most relevant example.\r\n\r\nWhile in the text of one of the broadside documents, FLEISCHHAUER\r\nremarked AM's attempt to find ways to connect cataloging to the texts,\r\nwhich it does in different ways in different manifestations.  In the case\r\nshown, the cataloging was pasted on:  AM took MARC records that were\r\nwritten as on-line records right into one of the Library's mainframe\r\nretrieval programs, pulled them out, and handed them off to the contractor,\r\nwho massaged them somewhat to display them in the manner shown.  One of\r\nAM's questions is, Does the cataloguing normally performed in the mainframe\r\nwork in this context, or had AM ought to think through adjustments?\r\n\r\nFLEISCHHAUER made the additional point that, as far as the text goes, AM\r\nhas gravitated towards SGML (he pointed to the boldface in the upper part\r\nof the screen).  Although extremely limited in its ability to translate\r\nor interpret SGML, Personal Librarian will furnish both bold and italics\r\non screen; a fairly easy thing to do, but it is one of the ways in which\r\nSGML is useful.\r\n\r\nStriking a balance between quantity and quality has been a major concern\r\nof AM, with accuracy being one of the places where project staff have\r\nfelt that less than 100-percent accuracy was not unacceptable. \r\nFLEISCHHAUER cited the example of the standard of the rekeying industry,\r\nnamely 99.95 percent; as one service bureau informed him, to go from\r\n99.95 to 100 percent would double the cost.\r\n\r\nFLEISCHHAUER next demonstrated how AM furnishes users recourse to images,\r\nand at the same time recalled LESK's pointed question concerning the\r\nnumber of people who would look at those images and the number who would\r\nwork only with the text.  If the implication of LESK's question was\r\nsound, FLEISCHHAUER said, it raised the stakes for text accuracy and\r\nreduced the value of the strategy for images.\r\n\r\nContending that preservation is always a bugaboo, FLEISCHHAUER\r\ndemonstrated several images derived from a scan of a preservation\r\nmicrofilm that AM had made.  He awarded a grade of C at best, perhaps a\r\nC minus or a C plus, for how well it worked out.  Indeed, the matter of\r\nlearning if other people had better ideas about scanning in general, and,\r\nin particular, scanning from microfilm, was one of the factors that drove\r\nAM to attempt to think through the agenda for the Workshop.  Skew, for\r\nexample, was one of the issues that AM in its ignorance had not reckoned\r\nwould prove so difficult.\r\n\r\nFurther, the handling of images of the sort shown, in a desktop computer\r\nenvironment, involved a considerable amount of zooming and scrolling. \r\nUltimately, AM staff feel that perhaps the paper copy that is printed out\r\nmight be the most useful one, but they remain uncertain as to how much\r\non-screen reading users will do.\r\n\r\nReturning to the text, FLEISCHHAUER asked viewers to imagine a person who\r\nmight be conducting a search in a full-text environment.  With this\r\nscenario, he proceeded to illustrate other features of Personal Librarian\r\nthat he considered helpful; for example, it provides the ability to\r\nnotice words as one reads.  Clicking the \"include\" button on the bottom\r\nof the search window pops the words that have been highlighted into the\r\nsearch.  Thus, a user can refine the search as he or she reads,\r\nre-executing the search and continuing to find things in the quest for\r\nmaterials.  This software not only contains relevance ranking, Boolean\r\noperators, and truncation, it also permits one to perform word algebra,\r\nso to say, where one puts two or three words in parentheses and links\r\nthem with one Boolean operator and then a couple of words in another set\r\nof parentheses and asks for things within so many words of others.\r\n\r\nUntil they became acquainted recently with some of the work being done in\r\nclassics, the AM staff had not realized that a large number of the\r\nprojects that involve electronic texts were being done by people with a\r\nprofound interest in language and linguistics.  Their search strategies\r\nand thinking are oriented to those fields, as is shown in particular by\r\nthe Perseus example.  As amateur historians, the AM staff were thinking\r\nmore of searching for concepts and ideas than for particular words. \r\nObviously, FLEISCHHAUER conceded, searching for concepts and ideas and\r\nsearching for words may be two rather closely related things.\r\n\r\nWhile displaying several images, FLEISCHHAUER observed that the Macintosh\r\nprototype built by AM contains a greater diversity of formats.  Echoing a\r\nprevious speaker, he said that it was easier to stitch things together in\r\nthe Macintosh, though it tended to be a little more anemic in search and\r\nretrieval.  AM, therefore, increasingly has been investigating\r\nsophisticated retrieval engines in the IBM format.\r\n\r\nFLEISCHHAUER demonstrated several additional examples of the prototype\r\ninterfaces:  One was AM's metaphor for the network future, in which a\r\nkind of reading-room graphic suggests how one would be able to go around\r\nto different materials.  AM contains a large number of photographs in\r\nanalog video form worked up from a videodisc, which enable users to make\r\ncopies to print or incorporate in digital documents.  A frame-grabber is\r\nbuilt into the system, making it possible to bring an image into a window\r\nand digitize or print it out.\r\n\r\nFLEISCHHAUER next demonstrated sound recording, which included texts. \r\nRecycled from a previous project, the collection included sixty 78-rpm\r\nphonograph records of political speeches that were made during and\r\nimmediately after World War I.  These constituted approximately three\r\nhours of audio, as AM has digitized it, which occupy 150 megabytes on a\r\nCD.  Thus, they are considerably compressed.  From the catalogue card,\r\nFLEISCHHAUER proceeded to a transcript of a speech with the audio\r\navailable and with highlighted text following it as it played.\r\nA photograph has been added and a transcription made.\r\n\r\nConsiderable value has been added beyond what the Library of Congress\r\nnormally would do in cataloguing a sound recording, which raises several\r\nquestions for AM concerning where to draw lines about how much value it can\r\nafford to add and at what point, perhaps, this becomes more than AM could\r\nreasonably do or reasonably wish to do.  FLEISCHHAUER also demonstrated\r\na motion picture.  As FREEMAN had reported earlier, the motion picture\r\nmaterials have proved the most popular, not surprisingly.  This says more\r\nabout the medium, he thought, than about AM's presentation of it.\r\n\r\nBecause AM's goal was to bring together things that could be used by\r\nhistorians or by people who were curious about history,\r\nturn-of-the-century footage seemed to represent the most appropriate\r\ncollections from the Library of Congress in motion pictures. These were\r\nthe very first films made by Thomas Edison's company and some others at\r\nthat time.  The particular example illustrated was a Biograph film,\r\nbrought in with a frame-grabber into a window.  A single videodisc\r\ncontains about fifty titles and pieces of film from that period, all of\r\nNew York City.  Taken together, AM believes, they provide an interesting\r\ndocumentary resource.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nDISCUSSION * Using the frame-grabber in AM * Volume of material processed\r\nand to be processed * Purpose of AM within LC * Cataloguing and the\r\nnature of AM's material * SGML coding and the question of quality versus\r\nquantity *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nDuring the question-and-answer period that followed FLEISCHHAUER's\r\npresentation, several clarifications were made.\r\n\r\nAM is bringing in motion pictures from a videodisc.  The frame-grabber\r\ndevices create a window on a computer screen, which permits users to\r\ndigitize a single frame of the movie or one of the photographs.  It\r\nproduces a crude, rough-and-ready image that high school students can\r\nincorporate into papers, and that has worked very nicely in this way.\r\n\r\nCommenting on FLEISCHHAUER's assertion that AM was looking more at\r\nsearching ideas than words, MYLONAS argued that without words an idea\r\ndoes not exist.  FLEISCHHAUER conceded that he ought to have articulated\r\nhis point more clearly.  MYLONAS stated that they were in fact both\r\ntalking about the same thing.  By searching for words and by forcing\r\npeople to focus on the word, the Perseus Project felt that they would get\r\nthem to the idea.  The way one reviews results is tailored more to one\r\nkind of user than another.\r\n\r\nConcerning the total volume of material that has been processed in this\r\nway, AM at this point has in retrievable form seven or eight collections,\r\nall of them photographic.  In the Macintosh environment, for example,\r\nthere probably are 35,000-40,000 photographs.  The sound recordings\r\nnumber sixty items.  The broadsides number about 300 items.  There are\r\n500 political cartoons in the form of drawings.  The motion pictures, as\r\nindividual items, number sixty to seventy.\r\n\r\nAM also has a manuscript collection, the life history portion of one of\r\nthe federal project series, which will contain 2,900 individual\r\ndocuments, all first-person narratives.  AM has in process about 350\r\nAfrican-American pamphlets, or about 12,000 printed pages for the period\r\n1870-1910.  Also in the works are some 4,000 panoramic photographs.  AM\r\nhas recycled a fair amount of the work done by LC's Prints and\r\nPhotographs Division during the Library's optical disk pilot project in\r\nthe 1980s.  For example, a special division of LC has tooled up and\r\nthought through all the ramifications of electronic presentation of\r\nphotographs.  Indeed, they are wheeling them out in great barrel loads. \r\nThe purpose of AM within the Library, it is hoped, is to catalyze several\r\nof the other special collection divisions which have no particular\r\nexperience with, in some cases, mixed feelings about, an activity such as\r\nAM.  Moreover, in many cases the divisions may be characterized as not\r\nonly lacking experience in \"electronifying\" things but also in automated\r\ncataloguing.  MARC cataloguing as practiced in the United States is\r\nheavily weighted toward the description of monograph and serial\r\nmaterials, but is much thinner when one enters the world of manuscripts\r\nand things that are held in the Library's music collection and other\r\nunits.  In response to a comment by LESK, that AM's material is very\r\nheavily photographic, and is so primarily because individual records have\r\nbeen made for each photograph, FLEISCHHAUER observed that an item-level\r\ncatalog record exists, for example, for each photograph in the Detroit\r\nPublishing collection of 25,000 pictures.  In the case of the Federal\r\nWriters Project, for which nearly 3,000 documents exist, representing\r\ninformation from twenty-six different states, AM with the assistance of\r\nKaren STUART of the Manuscript Division will attempt to find some way not\r\nonly to have a collection-level record but perhaps a MARC record for each\r\nstate, which will then serve as an umbrella for the 100-200 documents\r\nthat come under it.  But that drama remains to be enacted.  The AM staff\r\nis conservative and clings to cataloguing, though of course visitors tout\r\nartificial intelligence and neural networks in a manner that suggests that\r\nperhaps one need not have cataloguing or that much of it could be put aside.\r\n\r\nThe matter of SGML coding, FLEISCHHAUER conceded, returned the discussion\r\nto the earlier treated question of quality versus quantity in the Library\r\nof Congress.  Of course, text conversion can be done with 100-percent\r\naccuracy, but it means that when one's holdings are as vast as LC's only\r\na tiny amount will be exposed, whereas permitting lower levels of\r\naccuracy can lead to exposing or sharing larger amounts, but with the\r\nquality correspondingly impaired.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nTWOHIG * A contrary experience concerning electronic options * Volume of\r\nmaterial in the Washington papers and a suggestion of David Packard *\r\nImplications of Packard's suggestion * Transcribing the documents for the\r\nCD-ROM * Accuracy of transcriptions * The CD-ROM edition of the Founding\r\nFathers documents *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nFinding encouragement in a comment of MICHELSON's from the morning\r\nsession--that numerous people in the humanities were choosing electronic\r\noptions to do their work--Dorothy TWOHIG, editor, The Papers of George\r\nWashington, opened her illustrated talk by noting that her experience\r\nwith literary scholars and numerous people in editing was contrary to\r\nMICHELSON's.  TWOHIG emphasized literary scholars' complete ignorance of\r\nthe technological options available to them or their reluctance or, in\r\nsome cases, their downright hostility toward these options.\r\n\r\nAfter providing an overview of the five Founding Fathers projects\r\n(Jefferson at Princeton, Franklin at Yale, John Adams at the\r\nMassachusetts Historical Society, and Madison down the hall from her at\r\nthe University of Virginia), TWOHIG observed that the Washington papers,\r\nlike all of the projects, include both sides of the Washington\r\ncorrespondence and deal with some 135,000 documents to be published with\r\nextensive annotation in eighty to eighty-five volumes, a project that\r\nwill not be completed until well into the next century.  Thus, it was\r\nwith considerable enthusiasm several years ago that the Washington Papers\r\nProject (WPP) greeted David Packard's suggestion that the papers of the\r\nFounding Fathers could be published easily and inexpensively, and to the\r\ngreat benefit of American scholarship, via CD-ROM.\r\n\r\nIn pragmatic terms, funding from the Packard Foundation would expedite\r\nthe transcription of thousands of documents waiting to be put on disk in\r\nthe WPP offices.  Further, since the costs of collecting, editing, and\r\nconverting the Founding Fathers documents into letterpress editions were\r\nrunning into the millions of dollars, and the considerable staffs\r\ninvolved in all of these projects were devoting their careers to\r\nproducing the work, the Packard Foundation's suggestion had a\r\nrevolutionary aspect:  Transcriptions of the entire corpus of the\r\nFounding Fathers papers would be available on CD-ROM to public and\r\ncollege libraries, even high schools, at a fraction of the cost--\r\n$100-$150 for the annual license fee--to produce a limited university\r\npress run of 1,000 of each volume of the published papers at $45-$150 per\r\nprinted volume.  Given the current budget crunch in educational systems\r\nand the corresponding constraints on librarians in smaller institutions\r\nwho wish to add these volumes to their collections, producing the\r\ndocuments on CD-ROM would likely open a greatly expanded audience for the\r\npapers.  TWOHIG stressed, however, that development of the Founding\r\nFathers CD-ROM is still in its infancy.  Serious software problems remain\r\nto be resolved before the material can be put into readable form.  \r\n\r\nFunding from the Packard Foundation resulted in a major push to\r\ntranscribe the 75,000 or so documents of the Washington papers remaining\r\nto be transcribed onto computer disks.  Slides illustrated several of the\r\nproblems encountered, for example, the present inability of CD-ROM to\r\nindicate the cross-outs (deleted material) in eighteenth century\r\ndocuments.  TWOHIG next described documents from various periods in the\r\neighteenth century that have been transcribed in chronological order and\r\ndelivered to the Packard offices in California, where they are converted\r\nto the CD-ROM, a process that is expected to consume five years to\r\ncomplete (that is, reckoning from David Packard's suggestion made several\r\nyears ago, until about July 1994).  TWOHIG found an encouraging\r\nindication of the project's benefits in the ongoing use made by scholars\r\nof the search functions of the CD-ROM, particularly in reducing the time\r\nspent in manually turning the pages of the Washington papers.\r\n\r\nTWOHIG next furnished details concerning the accuracy of transcriptions. \r\nFor instance, the insertion of thousands of documents on the CD-ROM\r\ncurrently does not permit each document to be verified against the\r\noriginal manuscript several times as in the case of documents that appear\r\nin the published edition.  However, the transcriptions receive a cursory\r\ncheck for obvious typos, the misspellings of proper names, and other\r\nerrors from the WPP CD-ROM editor.  Eventually, all documents that appear\r\nin the electronic version will be checked by project editors.  Although\r\nthis process has met with opposition from some of the editors on the\r\ngrounds that imperfect work may leave their offices, the advantages in\r\nmaking this material available as a research tool outweigh  fears about the\r\nmisspelling of proper names and other relatively minor editorial matters.\r\n\r\nCompletion of all five Founding Fathers projects (i.e., retrievability\r\nand searchability of all of the documents by proper names, alternate\r\nspellings, or varieties of subjects) will provide one of the richest\r\nsources of this size for the history of the United States in the latter\r\npart of the eighteenth century.  Further, publication on CD-ROM will\r\nallow editors to include even minutiae, such as laundry lists, not\r\nincluded in the printed volumes.\r\n\r\nIt seems possible that the extensive annotation provided in the printed\r\nvolumes eventually will be added to the CD-ROM edition, pending\r\nnegotiations with the publishers of the papers.  At the moment, the\r\nFounding Fathers CD-ROM is accessible only on the IBYCUS, a computer\r\ndeveloped out of the Thesaurus Linguae Graecae project and designed for\r\nthe use of classical scholars.  There are perhaps 400 IBYCUS computers in\r\nthe country, most of which are in university classics departments. \r\nUltimately, it is anticipated that the CD-ROM edition of the Founding\r\nFathers documents will run on any IBM-compatible or Macintosh computer\r\nwith a CD-ROM drive.  Numerous changes in the software will also occur\r\nbefore the project is completed.  (Editor's note: an IBYCUS was\r\nunavailable to demonstrate the CD-ROM.)\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nDISCUSSION * Several additional features of WPP clarified *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nDiscussion following TWOHIG's presentation served to clarify several\r\nadditional features, including (1) that the project's primary\r\nintellectual product consists in the electronic transcription of the\r\nmaterial; (2) that the text transmitted to the CD-ROM people is not\r\nmarked up; (3) that cataloging and subject-indexing of the material\r\nremain to be worked out (though at this point material can be retrieved\r\nby name); and (4) that because all the searching is done in the hardware,\r\nthe IBYCUS is designed to read a CD-ROM which contains only sequential\r\ntext files.  Technically, it then becomes very easy to read the material\r\noff and put it on another device.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nLEBRON * Overview of the history of the joint project between AAAS and\r\nOCLC * Several practices the on-line environment shares with traditional\r\npublishing on hard copy * Several technical and behavioral barriers to\r\nelectronic publishing * How AAAS and OCLC arrived at the subject of\r\nclinical trials * Advantages of the electronic format and other features\r\nof OJCCT * An illustrated tour of the journal *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nMaria LEBRON, managing editor, The Online Journal of Current Clinical\r\nTrials (OJCCT), presented an illustrated overview of the history of the\r\njoint project between the American Association for the Advancement of\r\nScience (AAAS) and the Online Computer Library Center, Inc. (OCLC).  The\r\njoint venture between AAAS and OCLC owes its beginning to a\r\nreorganization launched by the new chief executive officer at OCLC about\r\nthree years ago and combines the strengths of these two disparate\r\norganizations.  In short, OJCCT represents the process of scholarly\r\npublishing on line.\r\n\r\nLEBRON next discussed several practices the on-line environment shares\r\nwith traditional publishing on hard copy--for example, peer review of\r\nmanuscripts--that are highly important in the academic world.  LEBRON\r\nnoted in particular the implications of citation counts for tenure\r\ncommittees and grants committees.  In the traditional hard-copy\r\nenvironment, citation counts are readily demonstrable, whereas the\r\non-line environment represents an ethereal medium to most academics.\r\n\r\nLEBRON remarked several technical and behavioral barriers to electronic\r\npublishing, for instance, the problems in transmission created by special\r\ncharacters or by complex graphics and halftones.  In addition, she noted\r\neconomic limitations such as the storage costs of maintaining back issues\r\nand market or audience education.\r\n\r\nManuscripts cannot be uploaded to OJCCT, LEBRON explained, because it is\r\nnot a bulletin board or E-mail, forms of electronic transmission of\r\ninformation that have created an ambience clouding people's understanding\r\nof what the journal is attempting to do.  OJCCT, which publishes\r\npeer-reviewed medical articles dealing with the subject of clinical\r\ntrials, includes text, tabular material, and graphics, although at this\r\ntime it can transmit only line illustrations.\r\n\r\nNext, LEBRON described how AAAS and OCLC arrived at the subject of\r\nclinical trials:  It is 1) a highly statistical discipline that 2) does\r\nnot require halftones but can satisfy the needs of its audience with line\r\nillustrations and graphic material, and 3) there is a need for the speedy\r\ndissemination of high-quality research results.  Clinical trials are\r\nresearch activities that involve the administration of a test treatment\r\nto some experimental unit in order to test its usefulness before it is\r\nmade available to the general population.  LEBRON proceeded to give\r\nadditional information on OJCCT concerning its editor-in-chief, editorial\r\nboard, editorial content, and the types of articles it publishes\r\n(including peer-reviewed research reports and reviews), as well as\r\nfeatures shared by other traditional hard-copy journals.\r\n\r\nAmong the advantages of the electronic format are faster dissemination of\r\ninformation, including raw data, and the absence of space constraints\r\nbecause pages do not exist.  (This latter fact creates an interesting\r\nsituation when it comes to citations.)  Nor are there any issues.  AAAS's\r\ncapacity to download materials directly from the journal to a\r\nsubscriber's printer, hard drive, or floppy disk helps ensure highly\r\naccurate transcription.  Other features of OJCCT include on-screen alerts\r\nthat allow linkage of subsequently published documents to the original\r\ndocuments; on-line searching by subject, author, title, etc.; indexing of\r\nevery single word that appears in an article; viewing access to an\r\narticle by component (abstract, full text, or graphs); numbered\r\nparagraphs to replace page counts; publication in Science every thirty\r\ndays of indexing of all articles published in the journal;\r\ntypeset-quality screens; and Hypertext links that enable subscribers to\r\nbring up Medline abstracts directly without leaving the journal.\r\n\r\nAfter detailing the two primary ways to gain access to the journal,\r\nthrough the OCLC network and Compuserv if one desires graphics or through\r\nthe Internet if just an ASCII file is desired, LEBRON illustrated the\r\nspeedy editorial process and the coding of the document using SGML tags\r\nafter it has been accepted for publication.  She also gave an illustrated\r\ntour of the journal, its search-and-retrieval capabilities in particular,\r\nbut also including problems associated with scanning in illustrations,\r\nand the importance of on-screen alerts to the medical profession re\r\nretractions or corrections, or more frequently, editorials, letters to\r\nthe editors, or follow-up reports.  She closed by inviting the audience\r\nto join AAAS on 1 July, when OJCCT was scheduled to go on-line.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nDISCUSSION * Additional features of OJCCT *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nIn the lengthy discussion that followed LEBRON's presentation, these\r\npoints emerged:\r\n\r\n     * The SGML text can be tailored as users wish.\r\n\r\n     * All these articles have a fairly simple document definition.\r\n\r\n     * Document-type definitions (DTDs) were developed and given to OJCCT\r\n     for coding.\r\n\r\n     * No articles will be removed from the journal.  (Because there are\r\n     no back issues, there are no lost issues either.  Once a subscriber\r\n     logs onto the journal he or she has access not only to the currently\r\n     published materials, but retrospectively to everything that has been\r\n     published in it.  Thus the table of contents grows bigger.  The date\r\n     of publication serves to distinguish between currently published\r\n     materials and older materials.)\r\n\r\n     * The pricing system for the journal resembles that for most medical\r\n     journals:  for 1992, $95 for a year, plus telecommunications charges\r\n     (there are no connect time charges);    for 1993, $110 for the\r\n     entire year for single users, though the journal can be put on a\r\n     local area network (LAN).  However, only one person can access the\r\n     journal at a time.  Site licenses may come in the future.\r\n\r\n     * AAAS is working closely with colleagues at OCLC to display\r\n     mathematical equations on screen.\r\n\r\n     * Without compromising any steps in the editorial process, the\r\n     technology has reduced the time lag between when a manuscript is\r\n     originally submitted and the time it is accepted; the review process\r\n     does not differ greatly from the standard six-to-eight weeks\r\n     employed by many of the hard-copy journals.  The process still\r\n     depends on people.\r\n\r\n     * As far as a preservation copy is concerned, articles will be\r\n     maintained on the computer permanently and subscribers, as part of\r\n     their subscription, will receive a microfiche-quality archival copy\r\n     of everything published during that year; in addition, reprints can\r\n     be purchased in much the same way as in a hard-copy environment. \r\n     Hard copies are prepared but are not the primary medium for the\r\n     dissemination of the information.\r\n\r\n     * Because OJCCT is not yet on line, it is difficult to know how many\r\n     people would simply browse through the journal on the screen as\r\n     opposed to downloading the whole thing and printing it out; a mix of\r\n     both types of users likely will result.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nPERSONIUS * Developments in technology over the past decade * The CLASS\r\nProject * Advantages for technology and for the CLASS Project *\r\nDeveloping a network application an underlying assumption of the project\r\n* Details of the scanning process * Print-on-demand copies of books *\r\nFuture plans include development of a browsing tool *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nLynne PERSONIUS, assistant director, Cornell Information Technologies for\r\nScholarly Information Services, Cornell University, first commented on\r\nthe tremendous impact that developments in technology over the past ten\r\nyears--networking, in particular--have had on the way information is\r\nhandled, and how, in her own case, these developments have counterbalanced\r\nCornell's relative geographical isolation.  Other significant technologies\r\ninclude scanners, which are much more sophisticated than they were ten years\r\nago; mass storage and the dramatic savings that result from it in terms of\r\nboth space and money relative to twenty or thirty years ago; new and\r\nimproved printing technologies, which have greatly affected the distribution\r\nof information; and, of course, digital technologies, whose applicability to\r\nlibrary preservation remains at issue.\r\n\r\nGiven that context, PERSONIUS described the College Library Access and\r\nStorage System (CLASS) Project, a library preservation project,\r\nprimarily, and what has been accomplished.  Directly funded by the\r\nCommission on Preservation and Access and by the Xerox Corporation, which\r\nhas provided a significant amount of hardware, the CLASS Project has been\r\nworking with a development team at Xerox to develop a software\r\napplication tailored to library preservation requirements.  Within\r\nCornell, participants in the project have been working jointly with both\r\nlibrary and information technologies.  The focus of the project has been\r\non reformatting and saving books that are in brittle condition. \r\nPERSONIUS showed Workshop participants a brittle book, and described how\r\nsuch books were the result of developments in papermaking around the\r\nbeginning of the Industrial Revolution.  The papermaking process was\r\nchanged so that a significant amount of acid was introduced into the\r\nactual paper itself, which deteriorates as it sits on library shelves.\r\n\r\nOne of the advantages for technology and for the CLASS Project is that\r\nthe information in brittle books is mostly out of copyright and thus\r\noffers an opportunity to work with material that requires library\r\npreservation, and to create and work on an infrastructure to save the\r\nmaterial.  Acknowledging the familiarity of those working in preservation\r\nwith this information, PERSONIUS noted that several things are being\r\ndone:  the primary preservation technology used today is photocopying of\r\nbrittle material.  Saving the intellectual content of the material is the\r\nmain goal.  With microfilm copy, the intellectual content is preserved on\r\nthe assumption that in the future the image can be reformatted in any\r\nother way that then exists.\r\n\r\nAn underlying assumption of the CLASS Project from the beginning was\r\nthat it would develop a network application.  Project staff scan books\r\nat a workstation located in the library, near the brittle material.\r\nAn image-server filing system is located at a distance from that\r\nworkstation, and a printer is located in another building.  All of the\r\nmaterials digitized and stored on the image-filing system are cataloged\r\nin the on-line catalogue.  In fact, a record for each of these electronic\r\nbooks is stored in the RLIN database so that a record exists of what is\r\nin the digital library throughout standard catalogue procedures.  In the\r\nfuture, researchers working from their own workstations in their offices,\r\nor their networks, will have access--wherever they might be--through a\r\nrequest server being built into the new digital library.  A second\r\nassumption is that the preferred means of finding the material will be by\r\nlooking through a catalogue.  PERSONIUS described the scanning process,\r\nwhich uses a prototype scanner being developed by Xerox and which scans a\r\nvery high resolution image at great speed.  Another significant feature,\r\nbecause this is a preservation application, is the placing of the pages\r\nthat fall apart one for one on the platen.  Ordinarily, a scanner could\r\nbe used with some sort of a document feeder, but because of this\r\napplication that is not feasible.  Further, because CLASS is a\r\npreservation application, after the paper replacement is made there, a\r\nvery careful quality control check is performed.  An original book is\r\ncompared to the printed copy and verification is made, before proceeding,\r\nthat all of the image, all of the information, has been captured.  Then,\r\na new library book is produced:  The printed images are rebound by a\r\ncommercial binder and a new book is returned to the shelf. \r\nSignificantly, the books returned to the library shelves are beautiful\r\nand useful replacements on acid-free paper that should last a long time,\r\nin effect, the equivalent of preservation photocopies.  Thus, the project\r\nhas a library of digital books.  In essence, CLASS is scanning and\r\nstoring books as 600 dot-per-inch bit-mapped images, compressed using\r\nGroup 4 CCITT (i.e., the French acronym for International Consultative\r\nCommittee for Telegraph and Telephone) compression.  They are stored as\r\nTIFF files on an optical filing system that is composed of a database\r\nused for searching and locating the books and an optical jukebox that\r\nstores 64 twelve-inch platters.  A very-high-resolution printed copy of\r\nthese books at 600 dots per inch is created, using a Xerox DocuTech\r\nprinter to make the paper replacements on acid-free paper.\r\n\r\nPERSONIUS maintained that the CLASS Project presents an opportunity to\r\nintroduce people to books as digital images by using a paper medium. \r\nBooks are returned to the shelves while people are also given the ability\r\nto print on demand--to make their own copies of books.  (PERSONIUS\r\ndistributed copies of an engineering journal published by engineering\r\nstudents at Cornell around 1900 as an example of what a print-on-demand\r\ncopy of material might be like.  This very cheap copy would be available\r\nto people to use for their own research purposes and would bridge the gap\r\nbetween an electronic work and the paper that readers like to have.) \r\nPERSONIUS then attempted to illustrate a very early prototype of\r\nnetworked access to this digital library.  Xerox Corporation has\r\ndeveloped a prototype of a view station that can send images across the\r\nnetwork to be viewed.\r\n\r\nThe particular library brought down for demonstration contained two\r\nmathematics books.  CLASS is developing and will spend the next year\r\ndeveloping an application that allows people at workstations to browse\r\nthe books.  Thus, CLASS is developing a browsing tool, on the assumption\r\nthat users do not want to read an entire book from a workstation, but\r\nwould prefer to be able to look through and decide if they would like to\r\nhave a printed copy of it.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nDISCUSSION * Re retrieval software * \"Digital file copyright\" * Scanning\r\nrate during production * Autosegmentation * Criteria employed in\r\nselecting books for scanning * Compression and decompression of images *\r\nOCR not precluded *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nDuring the question-and-answer period that followed her presentation,\r\nPERSONIUS made these additional points:\r\n\r\n     * Re retrieval software, Cornell is developing a Unix-based server\r\n     as well as clients for the server that support multiple platforms\r\n     (Macintosh, IBM and Sun workstations), in the hope that people from\r\n     any of those platforms will retrieve books; a further operating\r\n     assumption is that standard interfaces will be used as much as\r\n     possible, where standards can be put in place, because CLASS\r\n     considers this retrieval software a library application and would\r\n     like to be able to look at material not only at Cornell but at other\r\n     institutions.\r\n\r\n     * The phrase \"digital file copyright by Cornell University\" was\r\n     added at the advice of Cornell's legal staff with the caveat that it\r\n     probably would not hold up in court.  Cornell does not want people\r\n     to copy its books and sell them but would like to keep them\r\n     available for use in a library environment for library purposes.\r\n\r\n     * In production the scanner can scan about 300 pages per hour,\r\n     capturing 600 dots per inch.\r\n\r\n     * The Xerox software has filters to scan halftone material and avoid\r\n     the moire patterns that occur when halftone material is scanned. \r\n     Xerox has been working on hardware and software that would enable\r\n     the scanner itself to recognize this situation and deal with it\r\n     appropriately--a kind of autosegmentation that would enable the\r\n     scanner to handle halftone material as well as text on a single page.\r\n\r\n     * The books subjected to the elaborate process described above were\r\n     selected because CLASS is a preservation project, with the first 500\r\n     books selected coming from Cornell's mathematics collection, because\r\n     they were still being heavily used and because, although they were\r\n     in need of preservation, the mathematics library and the mathematics\r\n     faculty were uncomfortable having them microfilmed.  (They wanted a\r\n     printed copy.)  Thus, these books became a logical choice for this\r\n     project.  Other books were chosen by the project's selection committees\r\n     for experiments with the technology, as well as to meet a demand or need.\r\n\r\n     * Images will be decompressed before they are sent over the line; at\r\n     this time they are compressed and sent to the image filing system\r\n     and then sent to the printer as compressed images; they are returned\r\n     to the workstation as compressed 600-dpi images and the workstation\r\n     decompresses and scales them for display--an inefficient way to\r\n     access the material though it works quite well for printing and\r\n     other purposes.\r\n\r\n     * CLASS is also decompressing on Macintosh and IBM, a slow process\r\n     right now.  Eventually, compression and decompression will take\r\n     place on an image conversion server.  Trade-offs will be made, based\r\n     on future performance testing, concerning where the file is\r\n     compressed and what resolution image is sent.\r\n\r\n     * OCR has not been precluded; images are being stored that have been\r\n     scanned at a high resolution, which presumably would suit them well\r\n     to an OCR process.  Because the material being scanned is about 100\r\n     years old and was printed with less-than-ideal technologies, very\r\n     early and preliminary tests have not produced good results.  But the\r\n     project is capturing an image that is of sufficient resolution to be\r\n     subjected to OCR in the future.  Moreover, the system architecture\r\n     and the system plan have a logical place to store an OCR image if it\r\n     has been captured.  But that is not being done now.\r\n\r\n                                 ******\r\n\r\nSESSION III.  DISTRIBUTION, NETWORKS, AND NETWORKING:  OPTIONS FOR\r\nDISSEMINATION\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nZICH * Issues pertaining to CD-ROMs * Options for publishing in CD-ROM *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nRobert ZICH, special assistant to the associate librarian for special\r\nprojects, Library of Congress, and moderator of this session, first noted\r\nthe blessed but somewhat awkward circumstance of having four very\r\ndistinguished people representing networks and networking or at least\r\nleaning in that direction, while lacking anyone to speak from the\r\nstrongest possible background in CD-ROMs.  ZICH expressed the hope that\r\nmembers of the audience would join the discussion.  He stressed the\r\nsubtitle of this particular session, \"Options for Dissemination,\" and,\r\nconcerning CD-ROMs, the importance of determining when it would be wise\r\nto consider dissemination in CD-ROM versus networks.  A shopping list of\r\nissues pertaining to CD-ROMs included:  the grounds for selecting\r\ncommercial publishers, and in-house publication where possible versus\r\nnonprofit or government publication.  A similar list for networks\r\nincluded:  determining when one should consider dissemination through a\r\nnetwork, identifying the mechanisms or entities that exist to place items\r\non networks, identifying the pool of existing networks, determining how a\r\nproducer  would choose between networks, and identifying the elements of\r\na business arrangement in a network.\r\n\r\nOptions for publishing in CD-ROM:  an outside publisher versus\r\nself-publication.  If an outside publisher is used, it can be nonprofit,\r\nsuch as the Government Printing Office (GPO) or the National Technical\r\nInformation Service (NTIS), in the case of government.  The pros and cons\r\nassociated with employing an outside publisher are obvious.  Among the\r\npros, there is no trouble getting accepted.  One pays the bill and, in\r\neffect, goes one's way.  Among the cons, when one pays an outside\r\npublisher to perform the work, that publisher will perform the work it is\r\nobliged to do, but perhaps without the production expertise and skill in\r\nmarketing and dissemination that some would seek.  There is the body of\r\ncommercial publishers that do possess that kind of expertise in\r\ndistribution and marketing but that obviously are selective.  In\r\nself-publication, one exercises full control, but then one must handle\r\nmatters such as distribution and marketing.  Such are some of the options\r\nfor publishing in the case of CD-ROM.\r\n\r\nIn the case of technical and design issues, which are also important,\r\nthere are many matters which many at the Workshop already knew a good\r\ndeal about:  retrieval system requirements and costs, what to do about\r\nimages, the various capabilities and platforms, the trade-offs between\r\ncost and performance, concerns about local-area networkability,\r\ninteroperability, etc.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nLYNCH * Creating networked information is different from using networks\r\nas an access or dissemination vehicle * Networked multimedia on a large\r\nscale does not yet work * Typical CD-ROM publication model a two-edged\r\nsword * Publishing information on a CD-ROM in the present world of\r\nimmature standards * Contrast between CD-ROM and network pricing *\r\nExamples demonstrated earlier in the day as a set of insular information\r\ngems * Paramount need to link databases * Layering to become increasingly\r\nnecessary * Project NEEDS and the issues of information reuse and active\r\nversus passive use * X-Windows as a way of differentiating between\r\nnetwork access and networked information * Barriers to the distribution\r\nof networked multimedia information * Need for good, real-time delivery\r\nprotocols * The question of presentation integrity in client-server\r\ncomputing in the academic world * Recommendations for producing multimedia\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nClifford LYNCH, director, Library Automation, University of California,\r\nopened his talk with the general observation that networked information\r\nconstituted a difficult and elusive topic because it is something just\r\nstarting to develop and not yet fully understood.  LYNCH contended that\r\ncreating genuinely networked information was different from using\r\nnetworks as an access or dissemination vehicle and was more sophisticated\r\nand more subtle.  He invited the members of the audience to extrapolate,\r\nfrom what they heard about the preceding demonstration projects, to what\r\nsort of a world of electronics information--scholarly, archival,\r\ncultural, etc.--they wished to end up with ten or fifteen years from now. \r\nLYNCH suggested that to extrapolate directly from these projects would\r\nproduce unpleasant results.\r\n\r\nPutting the issue of CD-ROM in perspective before getting into\r\ngeneralities on networked information, LYNCH observed that those engaged\r\nin multimedia today who wish to ship a product, so to say, probably do\r\nnot have much choice except to use CD-ROM:  networked multimedia on a\r\nlarge scale basically does not yet work because the technology does not\r\nexist.  For example, anybody who has tried moving images around over the\r\nInternet knows that this is an exciting touch-and-go process, a\r\nfascinating and fertile area for experimentation, research, and\r\ndevelopment, but not something that one can become deeply enthusiastic\r\nabout committing to production systems at this time.\r\n\r\nThis situation will change, LYNCH said.  He differentiated CD-ROM from\r\nthe practices that have been followed up to now in distributing data on\r\nCD-ROM.  For LYNCH the problem with CD-ROM is not its portability or its\r\nslowness but the two-edged sword of having the retrieval application and\r\nthe user interface inextricably bound up with the data, which is the\r\ntypical CD-ROM publication model.  It is not a case of publishing data\r\nbut of distributing a typically stand-alone, typically closed system,\r\nall--software, user interface, and data--on a little disk.  Hence, all\r\nthe between-disk navigational issues as well as the impossibility in most\r\ncases of integrating data on one disk with that on another.  Most CD-ROM\r\nretrieval software does not network very gracefully at present.  However,\r\nin the present world of immature standards and lack of understanding of\r\nwhat network information is or what the ground rules are for creating or\r\nusing it, publishing information on a CD-ROM does add value in a very\r\nreal sense.\r\n\r\nLYNCH drew a contrast between CD-ROM and network pricing and in doing so\r\nhighlighted something bizarre in information pricing.  A large\r\ninstitution such as the University of California has vendors who will\r\noffer to sell information on CD-ROM for a price per year in four digits,\r\nbut for the same data (e.g., an abstracting and indexing database) on\r\nmagnetic tape, regardless of how many people may use it concurrently,\r\nwill quote a price in six digits.\r\n\r\nWhat is packaged with the CD-ROM in one sense adds value--a complete\r\naccess system, not just raw, unrefined information--although it is not\r\ngenerally perceived that way.  This is because the access software,\r\nalthough it adds value, is viewed by some people, particularly in the\r\nuniversity environment where there is a very heavy commitment to\r\nnetworking, as being developed in the wrong direction.\r\n\r\nGiven that context, LYNCH described the examples demonstrated as a set of\r\ninsular information gems--Perseus, for example, offers nicely linked\r\ninformation, but would be very difficult to integrate with other\r\ndatabases, that is, to link together seamlessly with other source files\r\nfrom other sources.  It resembles an island, and in this respect is\r\nsimilar to numerous stand-alone projects that are based on videodiscs,\r\nthat is, on the single-workstation concept.\r\n\r\nAs scholarship evolves in a network environment, the paramount need will\r\nbe to link databases.  We must link personal databases to public\r\ndatabases, to group databases, in fairly seamless ways--which is\r\nextremely difficult in the environments under discussion with copies of\r\ndatabases proliferating all over the place.\r\n\r\nThe notion of layering also struck LYNCH as lurking in several of the\r\nprojects demonstrated.  Several databases in a sense constitute\r\ninformation archives without a significant amount of navigation built in. \r\nEducators, critics, and others will want a layered structure--one that\r\ndefines or links paths through the layers to allow users to reach\r\nspecific points.  In LYNCH's view, layering will become increasingly\r\nnecessary, and not just within a single resource but across resources\r\n(e.g., tracing mythology and cultural themes across several classics\r\ndatabases as well as a database of Renaissance culture).  This ability to\r\norganize resources, to build things out of multiple other things on the\r\nnetwork or select pieces of it, represented for LYNCH one of the key\r\naspects of network information.\r\n\r\nContending that information reuse constituted another significant issue,\r\nLYNCH commended to the audience's attention Project NEEDS (i.e., National\r\nEngineering Education Delivery System).  This project's objective is to\r\nproduce a database of engineering courseware as well as the components\r\nthat can be used to develop new courseware.  In a number of the existing\r\napplications, LYNCH said, the issue of reuse (how much one can take apart\r\nand reuse in other applications) was not being well considered.  He also\r\nraised the issue of active versus passive use, one aspect of which  is\r\nhow much information will be manipulated locally by users.  Most people,\r\nhe argued, may do a little browsing and then will wish to print.  LYNCH\r\nwas uncertain how these resources would be used by the vast majority of\r\nusers in the network environment.\r\n\r\nLYNCH next said a few words about X-Windows as a way of differentiating\r\nbetween network access and networked information.  A number of the\r\napplications demonstrated at the Workshop could be rewritten to use X\r\nacross the network, so that one could run them from any X-capable device-\r\n-a workstation, an X terminal--and transact with a database across the\r\nnetwork.  Although this opens up access a little, assuming one has enough\r\nnetwork to handle it, it does not provide an interface to develop a\r\nprogram that conveniently integrates information from multiple databases. \r\nX is a viewing technology that has limits.  In a real sense, it is just a\r\ngraphical version of remote log-in across the network.  X-type applications\r\nrepresent only one step in the progression towards real access.\r\n\r\nLYNCH next discussed barriers to the distribution of networked multimedia\r\ninformation.  The heart of the problem is a lack of standards to provide\r\nthe ability for computers to talk to each other, retrieve information,\r\nand shuffle it around fairly casually.  At the moment, little progress is\r\nbeing made on standards for networked information; for example, present\r\nstandards do not cover images, digital voice, and digital video.  A\r\nuseful tool kit of exchange formats for basic texts is only now being\r\nassembled.  The synchronization of content streams (i.e., synchronizing a\r\nvoice track to a video track, establishing temporal relations between\r\ndifferent components in a multimedia object) constitutes another issue\r\nfor networked multimedia that is just beginning to receive attention.\r\n\r\nUnderlying network protocols also need some work; good, real-time\r\ndelivery protocols on the Internet do not yet exist.  In LYNCH's view,\r\nhighly important in this context is the notion of networked digital\r\nobject IDs, the ability of one object on the network to point to another\r\nobject (or component thereof) on the network.  Serious bandwidth issues\r\nalso exist.  LYNCH was uncertain if billion-bit-per-second networks would\r\nprove sufficient if numerous people ran video in parallel.\r\n\r\nLYNCH concluded by offering an issue for database creators to consider,\r\nas well as several comments about what might constitute good trial\r\nmultimedia experiments.  In a networked information world the database\r\nbuilder or service builder (publisher) does not exercise the same\r\nextensive control over the integrity of the presentation; strange\r\nprograms \"munge\" with one's data before the user sees it.  Serious\r\nthought must be given to what guarantees integrity of presentation.  Part\r\nof that is related to where one draws the boundaries around a networked\r\ninformation service.  This question of presentation integrity in\r\nclient-server computing has not been stressed enough in the academic\r\nworld, LYNCH argued, though commercial service providers deal with it\r\nregularly.\r\n\r\nConcerning multimedia, LYNCH observed that good multimedia at the moment\r\nis hideously expensive to produce.  He recommended producing multimedia\r\nwith either very high sale value, or multimedia with a very long life\r\nspan, or multimedia that will have a very broad usage base and whose\r\ncosts therefore can be amortized among large numbers of users.  In this\r\nconnection, historical and humanistically oriented material may be a good\r\nplace to start, because it tends to have a longer life span than much of\r\nthe scientific material, as well as a wider user base.  LYNCH noted, for\r\nexample, that American Memory fits many of the criteria outlined.  He\r\nremarked the extensive discussion about bringing the Internet or the\r\nNational Research and Education Network (NREN) into the K-12 environment\r\nas a way of helping the American educational system.\r\n\r\nLYNCH closed by noting that the kinds of applications demonstrated struck\r\nhim as excellent justifications of broad-scale networking for K-12, but\r\nthat at this time no \"killer\" application exists to mobilize the K-12\r\ncommunity to obtain connectivity.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nDISCUSSION * Dearth of genuinely interesting applications on the network\r\na slow-changing situation * The issue of the integrity of presentation in\r\na networked environment * Several reasons why CD-ROM software does not\r\nnetwork *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nDuring the discussion period that followed LYNCH's presentation, several\r\nadditional points were made.\r\n\r\nLYNCH reiterated even more strongly his contention that, historically,\r\nonce one goes outside high-end science and the group of those who need\r\naccess to supercomputers, there is a great dearth of genuinely\r\ninteresting applications on the network.  He saw this situation changing\r\nslowly, with some of the scientific databases and scholarly discussion\r\ngroups and electronic journals coming on as well as with the availability\r\nof Wide Area Information Servers (WAIS) and some of the databases that\r\nare being mounted there.  However, many of those things do not seem to\r\nhave piqued great popular interest.  For instance, most high school\r\nstudents of LYNCH's acquaintance would not qualify as devotees of serious\r\nmolecular biology.\r\n\r\nConcerning the issue of the integrity of presentation, LYNCH believed\r\nthat a couple of information providers have laid down the law at least on\r\ncertain things.  For example, his recollection was that the National\r\nLibrary of Medicine feels strongly that one needs to employ the\r\nidentifier field if he or she is to mount a database commercially.  The\r\nproblem with a real networked environment is that one does not know who\r\nis reformatting and reprocessing one's data when one enters a client\r\nserver mode.  It becomes anybody's guess, for example, if the network\r\nuses a Z39.50 server, or what clients are doing with one's data.  A data\r\nprovider can say that his contract will only permit clients to have\r\naccess to his data after he vets them and their presentation and makes\r\ncertain it suits him.  But LYNCH held out little expectation that the\r\nnetwork marketplace would evolve in that way, because it required too\r\nmuch prior negotiation.\r\n\r\nCD-ROM software does not network for a variety of reasons, LYNCH said. \r\nHe speculated that CD-ROM publishers are not eager to have their products\r\nreally hook into wide area networks, because they fear it will make their\r\ndata suppliers nervous.  Moreover, until relatively recently, one had to\r\nbe rather adroit to run a full TCP/IP stack plus applications on a\r\nPC-size machine, whereas nowadays it is becoming easier as PCs grow\r\nbigger and faster.  LYNCH also speculated that software providers had not\r\nheard from their customers until the last year or so, or had not heard\r\nfrom enough of their customers.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nBESSER * Implications of disseminating images on the network; planning\r\nthe distribution of multimedia documents poses two critical\r\nimplementation problems * Layered approach represents the way to deal\r\nwith users' capabilities * Problems in platform design; file size and its\r\nimplications for networking * Transmission of megabyte size images\r\nimpractical * Compression and decompression at the user's end * Promising\r\ntrends for compression * A disadvantage of using X-Windows * A project at\r\nthe Smithsonian that mounts images on several networks *  \r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nHoward BESSER, School of Library and Information Science, University of\r\nPittsburgh, spoke primarily about multimedia, focusing on images and the\r\nbroad implications of disseminating them on the network.  He argued that\r\nplanning the distribution of multimedia documents posed two critical\r\nimplementation problems, which he framed in the form of two questions: \r\n1) What platform will one use and what hardware and software will users\r\nhave for viewing of the material?  and 2) How can one deliver a\r\nsufficiently robust set of information in an accessible format in a\r\nreasonable amount of time?  Depending on whether network or CD-ROM is the\r\nmedium used, this question raises different issues of storage,\r\ncompression, and transmission.\r\n\r\nConcerning the design of platforms (e.g., sound, gray scale, simple\r\ncolor, etc.) and the various capabilities users may have, BESSER\r\nmaintained that a layered approach was the way to deal with users'\r\ncapabilities.  A result would be that users with less powerful\r\nworkstations would simply have less functionality.  He urged members of\r\nthe audience to advocate standards and accompanying software that handle\r\nlayered functionality across a wide variety of platforms.\r\n\r\nBESSER also addressed problems in platform design, namely, deciding how\r\nlarge a machine to design for situations when the largest number of users\r\nhave the lowest level of the machine, and one desires higher\r\nfunctionality.  BESSER then proceeded to the question of file size and\r\nits implications for networking.  He discussed still images in the main. \r\nFor example, a digital color image that fills the screen of a standard\r\nmega-pel workstation (Sun or Next) will require one megabyte of storage\r\nfor an eight-bit image or three megabytes of storage for a true color or\r\ntwenty-four-bit image.  Lossless compression algorithms (that is,\r\ncomputational procedures in which no data is lost in the process of\r\ncompressing [and decompressing] an image--the exact bit-representation is\r\nmaintained) might bring storage down to a third of a megabyte per image,\r\nbut not much further than that.  The question of size makes it difficult\r\nto fit an appropriately sized set of these images on a single disk or to\r\ntransmit them quickly enough on a network.\r\n\r\nWith these full screen mega-pel images that constitute a third of a\r\nmegabyte, one gets 1,000-3,000 full-screen images on a one-gigabyte disk;\r\na standard CD-ROM represents approximately 60 percent of that.  Storing\r\nimages the size of a PC screen (just 8 bit color) increases storage\r\ncapacity to 4,000-12,000 images per gigabyte; 60 percent of that gives\r\none the size of a CD-ROM, which in turn creates a major problem.  One\r\ncannot have full-screen, full-color images with lossless compression; one\r\nmust compress them or use a lower resolution.  For megabyte-size images,\r\nanything slower than a T-1 speed is impractical.  For example, on a\r\nfifty-six-kilobaud line, it takes three minutes to transfer a\r\none-megabyte file, if it is not compressed; and this speed assumes ideal\r\ncircumstances (no other user contending for network bandwidth).  Thus,\r\nquestions of disk access, remote display, and current telephone\r\nconnection speed make transmission of megabyte-size images impractical.\r\n\r\nBESSER then discussed ways to deal with these large images, for example,\r\ncompression and decompression at the user's end.  In this connection, the\r\nissues of how much one is willing to lose in the compression process and\r\nwhat image quality one needs in the first place are unknown.  But what is\r\nknown is that compression entails some loss of data.  BESSER urged that\r\nmore studies be conducted on image quality in different situations, for\r\nexample, what kind of images are needed for what kind of disciplines, and\r\nwhat kind of image quality is needed for a browsing tool, an intermediate\r\nviewing tool, and archiving.\r\n\r\nBESSER remarked two promising trends for compression:  from a technical\r\nperspective, algorithms that use what is called subjective redundancy\r\nemploy principles from visual psycho-physics to identify and remove\r\ninformation from the image that the human eye cannot perceive; from an\r\ninterchange and interoperability perspective, the JPEG (i.e., Joint\r\nPhotographic Experts Group, an ISO standard) compression algorithms also\r\noffer promise.  These issues of compression and decompression, BESSER\r\nargued, resembled those raised earlier concerning the design of different\r\nplatforms.  Gauging the capabilities of potential users constitutes a\r\nprimary goal.  BESSER advocated layering or separating the images from\r\nthe applications that retrieve and display them, to avoid tying them to\r\nparticular software.\r\n\r\nBESSER detailed several lessons learned from his work at Berkeley with\r\nImagequery, especially the advantages and disadvantages of using\r\nX-Windows.  In the latter category, for example, retrieval is tied\r\ndirectly to one's data, an intolerable situation in the long run on a\r\nnetworked system.  Finally, BESSER described a project of Jim Wallace at\r\nthe Smithsonian Institution, who is mounting images in a extremely\r\nrudimentary way on the Compuserv and Genie networks and is preparing to\r\nmount them on America On Line.  Although the average user takes over\r\nthirty minutes to download these images (assuming a fairly fast modem),\r\nnevertheless, images have been downloaded 25,000 times.\r\n\r\nBESSER concluded his talk with several comments on the business\r\narrangement between the Smithsonian and Compuserv.  He contended that not\r\nenough is known concerning the value of images.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nDISCUSSION * Creating digitized photographic collections nearly\r\nimpossible except with large organizations like museums * Need for study\r\nto determine quality of images users will tolerate *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nDuring the brief exchange between LESK and BESSER that followed, several\r\nclarifications emerged.\r\n\r\nLESK argued that the photographers were far ahead of BESSER:  It is\r\nalmost impossible to create such digitized photographic collections\r\nexcept with large organizations like museums, because all the\r\nphotographic agencies have been going crazy about this and will not sign\r\nlicensing agreements on any sort of reasonable terms.  LESK had heard\r\nthat National Geographic, for example, had tried to buy the right to use\r\nsome image in some kind of educational production for $100 per image, but\r\nthe photographers will not touch it.  They want accounting and payment\r\nfor each use, which cannot be accomplished within the system.  BESSER\r\nresponded that a consortium of photographers, headed by a former National\r\nGeographic photographer, had started assembling its own collection of\r\nelectronic reproductions of images, with the money going back to the\r\ncooperative.\r\n\r\nLESK contended that BESSER was unnecessarily pessimistic about multimedia\r\nimages, because people are accustomed to low-quality images, particularly\r\nfrom video.  BESSER urged the launching of a study to determine what\r\nusers would tolerate, what they would feel comfortable with, and what\r\nabsolutely is the highest quality they would ever need.  Conceding that\r\nhe had adopted a dire tone in order to arouse people about the issue,\r\nBESSER closed on a sanguine note by saying that he would not be in this\r\nbusiness if he did not think that things could be accomplished.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nLARSEN * Issues of scalability and modularity * Geometric growth of the\r\nInternet and the role played by layering * Basic functions sustaining\r\nthis growth * A library's roles and functions in a network environment *\r\nEffects of implementation of the Z39.50 protocol for information\r\nretrieval on the library system * The trade-off between volumes of data\r\nand its potential usage * A snapshot of current trends *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nRonald LARSEN, associate director for information technology, University\r\nof Maryland at College Park, first addressed the issues of scalability\r\nand modularity.  He noted the difficulty of anticipating the effects of\r\norders-of-magnitude growth, reflecting on the twenty years of experience\r\nwith the Arpanet and Internet.  Recalling the day's demonstrations of\r\nCD-ROM and optical disk material, he went on to ask if the field has yet\r\nlearned how to scale new systems to enable delivery and dissemination\r\nacross large-scale networks.\r\n\r\nLARSEN focused on the geometric growth of the Internet from its inception\r\ncirca 1969 to the present, and the adjustments required to respond to\r\nthat rapid growth.  To illustrate the issue of scalability, LARSEN\r\nconsidered computer networks as including three generic components: \r\ncomputers, network communication nodes, and communication media.  Each\r\ncomponent scales (e.g., computers range from PCs to supercomputers;\r\nnetwork nodes scale from interface cards in a PC through sophisticated\r\nrouters and gateways; and communication media range from 2,400-baud\r\ndial-up facilities through 4.5-Mbps backbone links, and eventually to\r\nmultigigabit-per-second communication lines), and architecturally, the\r\ncomponents are organized to scale hierarchically from local area networks\r\nto international-scale networks.  Such growth is made possible by\r\nbuilding layers of communication protocols, as BESSER pointed out.\r\nBy layering both physically and logically, a sense of scalability is\r\nmaintained from local area networks in offices, across campuses, through\r\nbridges, routers, campus backbones, fiber-optic links, etc., up into\r\nregional networks and ultimately into national and international\r\nnetworks.\r\n\r\nLARSEN then illustrated the geometric growth over a two-year period--\r\nthrough September 1991--of the number of networks that comprise the\r\nInternet.  This growth has been sustained largely by the availability of\r\nthree basic functions:  electronic mail, file transfer (ftp), and remote\r\nlog-on (telnet).  LARSEN also reviewed the growth in the kind of traffic\r\nthat occurs on the network.  Network traffic reflects the joint contributions\r\nof a larger population of users and increasing use per user.  Today one sees\r\nserious applications involving moving images across the network--a rarity\r\nten years ago.  LARSEN recalled and concurred with BESSER's main point\r\nthat the interesting problems occur at the application level.\r\n\r\nLARSEN then illustrated a model of a library's roles and functions in a\r\nnetwork environment.  He noted, in particular, the placement of on-line\r\ncatalogues onto the network and patrons obtaining access to the library\r\nincreasingly through local networks, campus networks, and the Internet. \r\nLARSEN supported LYNCH's earlier suggestion that we need to address\r\nfundamental questions of networked information in order to build\r\nenvironments that scale in the information sense as well as in the\r\nphysical sense.\r\n\r\nLARSEN supported the role of the library system as the access point into\r\nthe nation's electronic collections.  Implementation of the Z39.50\r\nprotocol for information retrieval would make such access practical and\r\nfeasible.  For example, this would enable patrons in Maryland to search\r\nCalifornia libraries, or other libraries around the world that are\r\nconformant with Z39.50 in a manner that is familiar to University of\r\nMaryland patrons.  This client-server model also supports moving beyond\r\nsecondary content into primary content.  (The notion of how one links\r\nfrom secondary content to primary content, LARSEN said, represents a\r\nfundamental problem that requires rigorous thought.)  After noting\r\nnumerous network experiments in accessing full-text materials, including\r\nprojects supporting the ordering of materials across the network, LARSEN\r\nrevisited the issue of transmitting high-density, high-resolution color\r\nimages across the network and the large amounts of bandwidth they\r\nrequire.  He went on to address the bandwidth and synchronization\r\nproblems inherent in sending full-motion video across the network.\r\n\r\nLARSEN illustrated the trade-off between volumes of data in bytes or\r\norders of magnitude and the potential usage of that data.  He discussed\r\ntransmission rates (particularly, the time it takes to move various forms\r\nof information), and what one could do with a network supporting\r\nmultigigabit-per-second transmission.  At the moment, the network\r\nenvironment includes a composite of data-transmission requirements,\r\nvolumes and forms, going from steady to bursty (high-volume) and from\r\nvery slow to very fast.  This aggregate must be considered in the design,\r\nconstruction, and operation of multigigabyte networks.\r\n\r\nLARSEN's objective is to use the networks and library systems now being\r\nconstructed to increase access to resources wherever they exist, and\r\nthus, to evolve toward an on-line electronic virtual library.\r\n\r\nLARSEN concluded by offering a snapshot of current trends:  continuing\r\ngeometric growth in network capacity and number of users; slower\r\ndevelopment of applications; and glacial development and adoption of\r\nstandards.  The challenge is to design and develop each new application\r\nsystem with network access and scalability in mind.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nBROWNRIGG * Access to the Internet cannot be taken for granted * Packet\r\nradio and the development of MELVYL in 1980-81 in the Division of Library\r\nAutomation at the University of California  *  Design criteria for packet\r\nradio * A demonstration project in San Diego and future plans * Spread\r\nspectrum * Frequencies at which the radios will run and plans to\r\nreimplement the WAIS server software in the public domain * Need for an\r\ninfrastructure of radios that do not move around * \r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nEdwin BROWNRIGG, executive director, Memex Research Institute, first\r\npolled the audience in order to seek out regular users of the Internet as\r\nwell as those planning to use it some time in the future.  With nearly\r\neverybody in the room falling into one category or the other, BROWNRIGG\r\nmade a point re access, namely that numerous individuals, especially those\r\nwho use the Internet every day, take for granted their access to it, the\r\nspeeds with which they are connected, and how well it all works. \r\nHowever, as BROWNRIGG discovered between 1987 and 1989 in Australia,\r\nif one wants access to the Internet but cannot afford it or has some\r\nphysical boundary that prevents her or him from gaining access, it can\r\nbe extremely frustrating.  He suggested that because of economics and\r\nphysical barriers we were beginning to create a world of haves and have-nots\r\nin the process of scholarly communication, even in the United States.\r\n\r\nBROWNRIGG detailed the development of MELVYL in academic year 1980-81 in\r\nthe Division of Library Automation at the University of California, in\r\norder to underscore the issue of access to the system, which at the\r\noutset was extremely limited.  In short, the project needed to build a\r\nnetwork, which at that time entailed use of satellite technology, that is,\r\nputting earth stations on campus and also acquiring some terrestrial links\r\nfrom the State of California's microwave system.  The installation of\r\nsatellite links, however, did not solve the problem (which actually\r\nformed part of a larger problem involving politics and financial resources).\r\nFor while the project team could get a signal onto a campus, it had no means\r\nof distributing the signal throughout the campus.  The solution involved\r\nadopting a recent development in wireless communication called packet radio,\r\nwhich combined the basic notion of packet-switching with radio.  The project\r\nused this technology to get the signal from a point on campus where it\r\ncame down, an earth station for example, into the libraries, because it\r\nfound that wiring the libraries, especially the older marble buildings,\r\nwould cost $2,000-$5,000 per terminal.\r\n\r\nBROWNRIGG noted that, ten years ago, the project had neither the public\r\npolicy nor the technology that would have allowed it to use packet radio\r\nin any meaningful way.  Since then much had changed.  He proceeded to\r\ndetail research and development of the technology, how it is being\r\ndeployed in California, and what direction he thought it would take.\r\nThe design criteria are to produce a high-speed, one-time, low-cost,\r\nhigh-quality, secure, license-free device (packet radio) that one can\r\nplug in and play today, forget about it, and have access to the Internet. \r\nBy high speed, BROWNRIGG meant 1 megabyte and 1.5 megabytes.  Those units\r\nhave been built, he continued, and are in the process of being\r\ntype-certified by an independent underwriting laboratory so that they can\r\nbe type-licensed by the Federal Communications Commission.  As is the\r\ncase with citizens band, one will be able to purchase a unit and not have\r\nto worry about applying for a license.\r\n\r\nThe basic idea, BROWNRIGG elaborated, is to take high-speed radio data\r\ntransmission and create a backbone network that at certain strategic\r\npoints in the network will \"gateway\" into a medium-speed packet radio\r\n(i.e., one that runs at 38.4 kilobytes), so that perhaps by 1994-1995\r\npeople, like those in the audience for the price of a VCR could purchase\r\na medium-speed radio for the office or home, have full network connectivity\r\nto the Internet, and partake of all its services, with no need for an FCC\r\nlicense and no regular bill from the local common carrier.  BROWNRIGG\r\npresented several details of a demonstration project currently taking\r\nplace in San Diego and described plans, pending funding, to install a\r\nfull-bore network in the San Francisco area.  This network will have 600\r\nnodes running at backbone speeds, and 100 of these nodes will be libraries,\r\nwhich in turn will be the gateway ports to the 38.4 kilobyte radios that\r\nwill give coverage for the neighborhoods surrounding the libraries.\r\n\r\nBROWNRIGG next explained Part 15.247, a new rule within Title 47 of the\r\nCode of Federal Regulations enacted by the FCC in 1985.  This rule\r\nchallenged the industry, which has only now risen to the occasion, to\r\nbuild a radio that would run at no more than one watt of output power and\r\nuse a fairly exotic method of modulating the radio wave called spread\r\nspectrum.  Spread spectrum in fact permits the building of networks so\r\nthat numerous data communications can occur simultaneously, without\r\ninterfering with each other, within the same wide radio channel.\r\n\r\nBROWNRIGG explained that the frequencies at which the radios would run\r\nare very short wave signals.  They are well above standard microwave and\r\nradar.  With a radio wave that small, one watt becomes a tremendous punch\r\nper bit and thus makes transmission at reasonable speed possible.  In\r\norder to minimize the potential for congestion, the project is\r\nundertaking to reimplement software which has been available in the\r\nnetworking business and is taken for granted now, for example, TCP/IP,\r\nrouting algorithms, bridges, and gateways.  In addition, the project\r\nplans to take the WAIS server software in the public domain and\r\nreimplement it so that one can have a WAIS server on a Mac instead of a\r\nUnix machine.  The Memex Research Institute believes that libraries, in\r\nparticular, will want to use the WAIS servers with packet radio.  This\r\nproject, which has a team of about twelve people, will run through 1993\r\nand will include the 100 libraries already mentioned as well as other\r\nprofessionals such as those in the medical profession, engineering, and\r\nlaw.  Thus, the need is to create an infrastructure of radios that do not\r\nmove around, which, BROWNRIGG hopes, will solve a problem not only for\r\nlibraries but for individuals who, by and large today, do not have access\r\nto the Internet from their homes and offices.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nDISCUSSION * Project operating frequencies *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nDuring a brief discussion period, which also concluded the day's\r\nproceedings, BROWNRIGG stated that the project was operating in four\r\nfrequencies.  The slow speed is operating at 435 megahertz, and it would\r\nlater go up to 920 megahertz.  With the high-speed frequency, the\r\none-megabyte radios will run at 2.4 gigabits, and 1.5 will run at 5.7. \r\nAt 5.7, rain can be a factor, but it would have to be tropical rain,\r\nunlike what falls in most parts of the United States.\r\n\r\n                                 ******\r\n\r\nSESSION IV.  IMAGE CAPTURE, TEXT CAPTURE, OVERVIEW OF TEXT AND\r\n             IMAGE STORAGE FORMATS\r\n\r\nWilliam HOOTON, vice president of operations, I-NET, moderated this session.\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nKENNEY * Factors influencing development of CXP * Advantages of using\r\ndigital technology versus photocopy and microfilm * A primary goal of\r\nCXP; publishing challenges * Characteristics of copies printed * Quality\r\nof samples achieved in image capture * Several factors to be considered\r\nin choosing scanning * Emphasis of CXP on timely and cost-effective\r\nproduction of black-and-white printed facsimiles * Results of producing\r\nmicrofilm from digital files * Advantages of creating microfilm * Details\r\nconcerning production * Costs * Role of digital technology in library\r\npreservation *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nAnne KENNEY, associate director, Department of Preservation and\r\nConservation, Cornell University, opened her talk by observing that the\r\nCornell Xerox Project (CXP) has been guided by the assumption that the\r\nability to produce printed facsimiles or to replace paper with paper\r\nwould be important, at least for the present generation of users and\r\nequipment.  She described three factors that influenced development of\r\nthe project:  1) Because the project has emphasized the preservation of\r\ndeteriorating brittle books, the quality of what was produced had to be\r\nsufficiently high to return a paper replacement to the shelf.  CXP was\r\nonly interested in using:  2) a system that was cost-effective, which\r\nmeant that it had to be cost-competitive with the processes currently\r\navailable, principally photocopy and microfilm, and 3) new or currently\r\navailable product hardware and software.\r\n\r\nKENNEY described the advantages that using digital technology offers over\r\nboth photocopy and microfilm:  1) The potential exists to create a higher\r\nquality reproduction of a deteriorating original than conventional\r\nlight-lens technology.  2) Because a digital image is an encoded\r\nrepresentation, it can be reproduced again and again with no resulting\r\nloss of quality, as opposed to the situation with light-lens processes,\r\nin which there is discernible difference between a second and a\r\nsubsequent generation of an image.  3) A digital image can be manipulated\r\nin a number of ways to improve image capture; for example, Xerox has\r\ndeveloped a windowing application that enables one to capture a page\r\ncontaining both text and illustrations in a manner that optimizes the\r\nreproduction of both.  (With light-lens technology, one must choose which\r\nto optimize, text or the illustration; in preservation microfilming, the\r\ncurrent practice is to shoot an illustrated page twice, once to highlight\r\nthe text and the second time to provide the best capture for the\r\nillustration.)  4) A digital image can also be edited, density levels\r\nadjusted to remove underlining and stains, and to increase legibility for\r\nfaint documents.  5) On-screen inspection can take place at the time of\r\ninitial setup and adjustments made prior to scanning, factors that\r\nsubstantially reduce the number of retakes required in quality control.\r\n\r\nA primary goal of CXP has been to evaluate the paper output printed on\r\nthe Xerox DocuTech, a high-speed printer that produces 600-dpi pages from\r\nscanned images at a rate of 135 pages a minute.  KENNEY recounted several\r\npublishing challenges to represent faithful and legible reproductions of\r\nthe originals that the 600-dpi copy for the most part successfully\r\ncaptured.  For example, many of the deteriorating volumes in the project\r\nwere heavily illustrated with fine line drawings or halftones or came in\r\nlanguages such as Japanese, in which the buildup of characters comprised\r\nof varying strokes is difficult to reproduce at lower resolutions; a\r\nsurprising number of them came with annotations and mathematical\r\nformulas, which it was critical to be able to duplicate exactly.\r\n\r\nKENNEY noted that 1) the copies are being printed on paper that meets the\r\nANSI standards for performance, 2) the DocuTech printer meets the machine\r\nand toner requirements for proper adhesion of print to page, as described\r\nby the National Archives, and thus 3) paper product is considered to be\r\nthe archival equivalent of preservation photocopy.\r\n\r\nKENNEY then discussed several samples of the quality achieved in the\r\nproject that had been distributed in a handout, for example, a copy of a\r\nprint-on-demand version of the 1911 Reed lecture on the steam turbine,\r\nwhich contains halftones, line drawings, and illustrations embedded in\r\ntext; the first four loose pages in the volume compared the capture\r\ncapabilities of scanning to photocopy for a standard test target, the\r\nIEEE standard 167A 1987 test chart.  In all instances scanning proved\r\nsuperior to photocopy, though only slightly more so in one.\r\n\r\nConceding the simplistic nature of her review of the quality of scanning\r\nto photocopy, KENNEY described it as one representation of the kinds of\r\nsettings that could be used with scanning capabilities on the equipment\r\nCXP uses.  KENNEY also pointed out that CXP investigated the quality\r\nachieved with binary scanning only, and noted the great promise in gray\r\nscale and color scanning, whose advantages and disadvantages need to be\r\nexamined.  She argued further that scanning resolutions and file formats\r\ncan represent a complex trade-off between the time it takes to capture\r\nmaterial, file size, fidelity to the original, and on-screen display; and\r\nprinting and equipment availability.  All these factors must be taken\r\ninto consideration.\r\n\r\nCXP placed primary emphasis on the production in a timely and\r\ncost-effective manner of printed facsimiles that consisted largely of\r\nblack-and-white text.  With binary scanning, large files may be\r\ncompressed efficiently and in a lossless manner (i.e., no data is lost in\r\nthe process of compressing [and decompressing] an image--the exact\r\nbit-representation is maintained) using Group 4 CCITT (i.e., the French\r\nacronym for International Consultative Committee for Telegraph and\r\nTelephone) compression.  CXP was getting compression ratios of about\r\nforty to one.  Gray-scale compression, which primarily uses JPEG, is much\r\nless economical and can represent a lossy compression (i.e., not\r\nlossless), so that as one compresses and decompresses, the illustration\r\nis subtly changed.  While binary files produce a high-quality printed\r\nversion, it appears 1) that other combinations of spatial resolution with\r\ngray and/or color hold great promise as well, and 2) that gray scale can\r\nrepresent a tremendous advantage for on-screen viewing.  The quality\r\nassociated with binary and gray scale also depends on the equipment used. \r\nFor instance, binary scanning produces a much better copy on a binary\r\nprinter.\r\n\r\nAmong CXP's findings concerning the production of microfilm from digital\r\nfiles, KENNEY reported that the digital files for the same Reed lecture\r\nwere used to produce sample film using an electron beam recorder.  The\r\nresulting film was faithful to the image capture of the digital files,\r\nand while CXP felt that the text and image pages represented in the Reed\r\nlecture were superior to that of the light-lens film, the resolution\r\nreadings for the 600 dpi were not as high as standard microfilming. \r\nKENNEY argued that the standards defined for light-lens technology are\r\nnot totally transferable to a digital environment.  Moreover, they are\r\nbased on definition of quality for a preservation copy.  Although making\r\nthis case will prove to be a long, uphill struggle, CXP plans to continue\r\nto investigate the issue over the course of the next year.\r\n\r\nKENNEY concluded this portion of her talk with a discussion of the\r\nadvantages of creating film:  it can serve as a primary backup and as a\r\npreservation master to the digital file; it could then become the print\r\nor production master and service copies could be paper, film, optical\r\ndisks, magnetic media, or on-screen display.\r\n\r\nFinally, KENNEY presented details re production:\r\n\r\n     * Development and testing of a moderately-high resolution production\r\n     scanning workstation represented a third goal of CXP; to date, 1,000\r\n     volumes have been scanned, or about 300,000 images.\r\n\r\n     * The resulting digital files are stored and used to produce\r\n     hard-copy replacements for the originals and additional prints on\r\n     demand; although the initial costs are high, scanning technology\r\n     offers an affordable means for reformatting brittle material.\r\n\r\n     * A technician in production mode can scan 300 pages per hour when\r\n     performing single-sheet scanning, which is a necessity when working\r\n     with truly brittle paper; this figure is expected to increase\r\n     significantly with subsequent iterations of the software from Xerox;\r\n     a three-month time-and-cost study of scanning found that the average\r\n     300-page book would take about an hour and forty minutes to scan\r\n     (this figure included the time for setup, which involves keying in\r\n     primary bibliographic data, going into quality control mode to\r\n     define page size, establishing front-to-back registration, and\r\n     scanning sample pages to identify a default range of settings for\r\n     the entire book--functions not dissimilar to those performed by\r\n     filmers or those preparing a book for photocopy).\r\n\r\n     * The final step in the scanning process involved rescans, which\r\n     happily were few and far between, representing well under 1 percent\r\n     of the total pages scanned.\r\n\r\nIn addition to technician time, CXP costed out equipment, amortized over\r\nfour years, the cost of storing and refreshing the digital files every\r\nfour years, and the cost of printing and binding, book-cloth binding, a\r\npaper reproduction.  The total amounted to a little under $65 per single\r\n300-page volume, with 30 percent overhead included--a figure competitive\r\nwith the prices currently charged by photocopy vendors.\r\n\r\nOf course, with scanning, in addition to the paper facsimile, one is left\r\nwith a digital file from which subsequent copies of the book can be\r\nproduced for a fraction of the cost of photocopy, with readers afforded\r\nchoices in the form of these copies.\r\n\r\nKENNEY concluded that digital technology offers an electronic means for a\r\nlibrary preservation effort to pay for itself.  If a brittle-book program\r\nincluded the means of disseminating reprints of books that are in demand\r\nby libraries and researchers alike, the initial investment in capture\r\ncould be recovered and used to preserve additional but less popular\r\nbooks.  She disclosed that an economic model for a self-sustaining\r\nprogram could be developed for CXP's report to the Commission on\r\nPreservation and Access (CPA).\r\n\r\nKENNEY stressed that the focus of CXP has been on obtaining high quality\r\nin a production environment.  The use of digital technology is viewed as\r\nan affordable alternative to other reformatting options.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nANDRE * Overview and history of NATDP * Various agricultural CD-ROM\r\nproducts created inhouse and by service bureaus * Pilot project on\r\nInternet transmission * Additional products in progress *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nPamela ANDRE, associate director for automation, National Agricultural\r\nText Digitizing Program (NATDP), National Agricultural Library (NAL),\r\npresented an overview of NATDP, which has been underway at NAL the last\r\nfour years, before Judith ZIDAR discussed the technical details.  ANDRE\r\ndefined agricultural information as a broad range of material going from\r\nbasic and applied research in the hard sciences to the one-page pamphlets\r\nthat are distributed by the cooperative state extension services on such\r\nthings as how to grow blueberries.\r\n\r\nNATDP began in late 1986 with a meeting of representatives from the\r\nland-grant library community to deal with the issue of electronic\r\ninformation.  NAL and forty-five of these libraries banded together to\r\nestablish this project--to evaluate the technology for converting what\r\nwere then source documents in paper form into electronic form, to provide\r\naccess to that digital information, and then to distribute it. \r\nDistributing that material to the community--the university community as\r\nwell as the extension service community, potentially down to the county\r\nlevel--constituted the group's chief concern.\r\n\r\nSince January 1988 (when the microcomputer-based scanning system was\r\ninstalled at NAL), NATDP has done a variety of things, concerning which\r\nZIDAR would provide further details.  For example, the first technology\r\nconsidered in the project's discussion phase was digital videodisc, which\r\nindicates how long ago it was conceived.\r\n\r\nOver the four years of this project, four separate CD-ROM products on\r\nfour different agricultural topics were created, two at a\r\nscanning-and-OCR station installed at NAL, and two by service bureaus. \r\nThus, NATDP has gained comparative information in terms of those relative\r\ncosts.  Each of these products contained the full ASCII text as well as\r\npage images of the material, or between 4,000 and 6,000 pages of material\r\non these disks.  Topics included aquaculture, food, agriculture and\r\nscience (i.e., international agriculture and research), acid rain, and\r\nAgent Orange, which was the final product distributed (approximately\r\neighteen months before the Workshop).\r\n\r\nThe third phase of NATDP focused on delivery mechanisms other than\r\nCD-ROM.  At the suggestion of Clifford LYNCH, who was a technical\r\nconsultant to the project at this point, NATDP became involved with the\r\nInternet and initiated a project with the help of North Carolina State\r\nUniversity, in which fourteen of the land-grant university libraries are\r\ntransmitting digital images over the Internet in response to interlibrary\r\nloan requests--a topic for another meeting.  At this point, the pilot\r\nproject had been completed for about a year and the final report would be\r\navailable shortly after the Workshop.  In the meantime, the project's\r\nsuccess had led to its extension.  (ANDRE noted that one of the first\r\nthings done under the program title was to select a retrieval package to\r\nuse with subsequent products; Windows Personal Librarian was the package\r\nof choice after a lengthy evaluation.)\r\n  \r\nThree additional products had been planned and were in progress:\r\n\r\n     1) An arrangement with the American Society of Agronomy--a\r\n     professional society that has published the Agronomy Journal since\r\n     about 1908--to scan and create bit-mapped images of its journal. \r\n     ASA granted permission first to put and then to distribute this\r\n     material in electronic form, to hold it at NAL, and to use these\r\n     electronic images as a mechanism to deliver documents or print out\r\n     material for patrons, among other uses.  Effectively, NAL has the\r\n     right to use this material in support of its program. \r\n     (Significantly, this arrangement offers a potential cooperative\r\n     model for working with other professional societies in agriculture\r\n     to try to do the same thing--put the journals of particular interest\r\n     to agriculture research into electronic form.)\r\n\r\n     2) An extension of the earlier product on aquaculture.\r\n\r\n     3) The George Washington Carver Papers--a joint project with\r\n     Tuskegee University to scan and convert from microfilm some 3,500\r\n     images of Carver's papers, letters, and drawings.\r\n\r\nIt was anticipated that all of these products would appear no more than\r\nsix months after the Workshop.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nZIDAR * (A separate arena for scanning) * Steps in creating a database *\r\nImage capture, with and without performing OCR * Keying in tracking data\r\n* Scanning, with electronic and manual tracking * Adjustments during\r\nscanning process * Scanning resolutions * Compression * De-skewing and\r\nfiltering * Image capture from microform:  the papers and letters of\r\nGeorge Washington Carver * Equipment used for a scanning system * \r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nJudith ZIDAR, coordinator, National Agricultural Text Digitizing Program\r\n(NATDP), National Agricultural Library (NAL), illustrated the technical\r\ndetails of NATDP, including her primary responsibility, scanning and\r\ncreating databases on a topic and putting them on CD-ROM.\r\n\r\n(ZIDAR remarked a separate arena from the CD-ROM projects, although the\r\nprocessing of the material is nearly identical, in which NATDP is also\r\nscanning material and loading it on a Next microcomputer, which in turn\r\nis linked to NAL's integrated library system.  Thus, searches in NAL's\r\nbibliographic database will enable people to pull up actual page images\r\nand text for any documents that have been entered.)\r\n\r\nIn accordance with the session's topic, ZIDAR focused her illustrated\r\ntalk on image capture, offering a primer on the three main steps in the\r\nprocess:  1) assemble the printed publications; 2) design the database\r\n(database design occurs in the process of preparing the material for\r\nscanning; this step entails reviewing and organizing the material,\r\ndefining the contents--what will constitute a record, what kinds of\r\nfields will be captured in terms of author, title, etc.); 3) perform a\r\ncertain amount of markup on the paper publications.  NAL performs this\r\ntask record by record, preparing work sheets or some other sort of\r\ntracking material and designing descriptors and other enhancements to be\r\nadded to the data that will not be captured from the printed publication. \r\nPart of this process also involves determining NATDP's file and directory\r\nstructure:  NATDP attempts to avoid putting more than approximately 100\r\nimages in a directory, because placing more than that on a CD-ROM would\r\nreduce the access speed.\r\n\r\nThis up-front process takes approximately two weeks for a\r\n6,000-7,000-page database.  The next step is to capture the page images. \r\nHow long this process takes is determined by the decision whether or not\r\nto perform OCR.  Not performing OCR speeds the process, whereas text\r\ncapture requires greater care because of the quality of the image:  it\r\nhas to be straighter and allowance must be made for text on a page, not\r\njust for the capture of photographs.\r\n\r\nNATDP keys in tracking data, that is, a standard bibliographic record\r\nincluding the title of the book and the title of the chapter, which will\r\nlater either become the access information or will be attached to the\r\nfront of a full-text record so that it is searchable.\r\n\r\nImages are scanned from a bound or unbound publication, chiefly from\r\nbound publications in the case of NATDP, however, because often they are\r\nthe only copies and the publications are returned to the shelves.  NATDP\r\nusually scans one record at a time, because its database tracking system\r\ntracks the document in that way and does not require further logical\r\nseparating of the images.  After performing optical character\r\nrecognition, NATDP moves the images off the hard disk and maintains a\r\nvolume sheet.  Though the system tracks electronically, all the\r\nprocessing steps are also tracked manually with a log sheet.\r\n\r\nZIDAR next illustrated the kinds of adjustments that one can make when\r\nscanning from paper and microfilm, for example, redoing images that need\r\nspecial handling, setting for dithering or gray scale, and adjusting for\r\nbrightness or for the whole book at one time.\r\n\r\nNATDP is scanning at 300 dots per inch, a standard scanning resolution. \r\nThough adequate for capturing text that is all of a standard size, 300\r\ndpi is unsuitable for any kind of photographic material or for very small\r\ntext.  Many scanners allow for different image formats, TIFF, of course,\r\nbeing a de facto standard.  But if one intends to exchange images with\r\nother people, the ability to scan other image formats, even if they are\r\nless common, becomes highly desirable.\r\n\r\nCCITT Group 4 is the standard compression for normal black-and-white\r\nimages, JPEG for gray scale or color.   ZIDAR recommended 1) using the\r\nstandard compressions, particularly if one attempts to make material\r\navailable and to allow users to download images and reuse them from\r\nCD-ROMs; and 2) maintaining the ability to output an uncompressed image,\r\nbecause in image exchange uncompressed images are more likely to be able\r\nto cross platforms.\r\n\r\nZIDAR emphasized the importance of de-skewing and filtering as\r\nrequirements on NATDP's upgraded system.  For instance, scanning bound\r\nbooks, particularly books published by the federal government whose pages\r\nare skewed, and trying to scan them straight if OCR is to be performed,\r\nis extremely time-consuming.  The same holds for filtering of\r\npoor-quality or older materials.\r\n\r\nZIDAR described image capture from microform, using as an example three\r\nreels from a sixty-seven-reel set of the papers and letters of George\r\nWashington Carver that had been produced by Tuskegee University.  These\r\nresulted in approximately 3,500 images, which NATDP had had scanned by\r\nits service contractor, Science Applications International Corporation\r\n(SAIC).  NATDP also created bibliographic records for access.  (NATDP did\r\nnot have such specialized equipment as a microfilm scanner.\r\n\r\nUnfortunately, the process of scanning from microfilm was not an\r\nunqualified success, ZIDAR reported:  because microfilm frame sizes vary,\r\noccasionally some frames were missed, which without spending much time\r\nand money could not be recaptured.\r\n\r\nOCR could not be performed from the scanned images of the frames.  The\r\nbleeding in the text simply output text, when OCR was run, that could not\r\neven be edited.  NATDP tested for negative versus positive images,\r\nlandscape versus portrait orientation, and single- versus dual-page\r\nmicrofilm, none of which seemed to affect the quality of the image; but\r\nalso on none of them could OCR be performed.\r\n\r\nIn selecting the microfilm they would use, therefore, NATDP had other\r\nfactors in mind.  ZIDAR noted two factors that influenced the quality of\r\nthe images:  1) the inherent quality of the original and 2) the amount of\r\nsize reduction on the pages.\r\n\r\nThe Carver papers were selected because they are informative and visually\r\ninteresting, treat a single subject, and are valuable in their own right. \r\nThe images were scanned and divided into logical records by SAIC, then\r\ndelivered, and loaded onto NATDP's system, where bibliographic\r\ninformation taken directly from the images was added.  Scanning was\r\ncompleted in summer 1991 and by the end of summer 1992 the disk was\r\nscheduled to be published.\r\n\r\nProblems encountered during processing included the following:  Because\r\nthe microfilm scanning had to be done in a batch, adjustment for\r\nindividual page variations was not possible.  The frame size varied on\r\naccount of the nature of the material, and therefore some of the frames\r\nwere missed while others were just partial frames.  The only way to go\r\nback and capture this material was to print out the page with the\r\nmicrofilm reader from the missing frame and then scan it in from the\r\npage, which was extremely time-consuming.  The quality of the images\r\nscanned from the printout of the microfilm compared unfavorably with that\r\nof the original images captured directly from the microfilm.  The\r\ninability to perform OCR also was a major disappointment.  At the time,\r\ncomputer output microfilm was unavailable to test.\r\n\r\nThe equipment used for a scanning system was the last topic addressed by\r\nZIDAR.  The type of equipment that one would purchase for a scanning\r\nsystem included:  a microcomputer, at least a 386, but preferably a 486;\r\na large hard disk, 380 megabyte at minimum; a multi-tasking operating\r\nsystem that allows one to run some things in batch in the background\r\nwhile scanning or doing text editing, for example, Unix or OS/2 and,\r\ntheoretically, Windows; a high-speed scanner and scanning software that\r\nallows one to make the various adjustments mentioned earlier; a\r\nhigh-resolution monitor (150 dpi ); OCR software and hardware to perform\r\ntext recognition; an optical disk subsystem on which to archive all the\r\nimages as the processing is done; file management and tracking software.\r\n\r\nZIDAR opined that the software one purchases was more important than the\r\nhardware and might also cost more than the hardware, but it was likely to\r\nprove critical to the success or failure of one's system.  In addition to\r\na stand-alone scanning workstation for image capture, then, text capture\r\nrequires one or two editing stations networked to this scanning station\r\nto perform editing.  Editing the text takes two or three times as long as\r\ncapturing the images.\r\n\r\nFinally, ZIDAR stressed the importance of buying an open system that allows\r\nfor more than one vendor, complies with standards, and can be upgraded.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nWATERS *Yale University Library's master plan to convert microfilm to\r\ndigital imagery (POB) * The place of electronic tools in the library of\r\nthe future * The uses of images and an image library * Primary input from\r\npreservation microfilm * Features distinguishing POB from CXP and key\r\nhypotheses guiding POB * Use of vendor selection process to facilitate\r\norganizational work * Criteria for selecting vendor * Finalists and\r\nresults of process for Yale * Key factor distinguishing vendors *\r\nComponents, design principles, and some estimated costs of POB * Role of\r\npreservation materials in developing imaging market * Factors affecting\r\nquality and cost * Factors affecting the usability of complex documents\r\nin image form * \r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nDonald WATERS, head of the Systems Office, Yale University Library,\r\nreported on the progress of a master plan for a project at Yale to\r\nconvert microfilm to digital imagery, Project Open Book (POB).  Stating\r\nthat POB was in an advanced stage of planning, WATERS detailed, in\r\nparticular, the process of selecting a vendor partner and several key\r\nissues under discussion as Yale prepares to move into the project itself. \r\nHe commented first on the vision that serves as the context of POB and\r\nthen described its purpose and scope.\r\n\r\nWATERS sees the library of the future not necessarily as an electronic\r\nlibrary but as a place that generates, preserves, and improves for its\r\nclients ready access to both intellectual and physical recorded\r\nknowledge.  Electronic tools must find a place in the library in the\r\ncontext of this vision.  Several roles for electronic tools include\r\nserving as:  indirect sources of electronic knowledge or as \"finding\"\r\naids (the on-line catalogues, the article-level indices, registers for\r\ndocuments and archives); direct sources of recorded knowledge; full-text\r\nimages; and various kinds of compound sources of recorded knowledge (the\r\nso-called compound documents of Hypertext, mixed text and image,\r\nmixed-text image format, and multimedia).\r\n\r\nPOB is looking particularly at images and an image library, the uses to\r\nwhich images will be put (e.g., storage, printing, browsing, and then use\r\nas input for other processes), OCR as a subsequent process to image\r\ncapture, or creating an image library, and also possibly generating\r\nmicrofilm.\r\n\r\nWhile input will come from a variety of sources, POB is considering\r\nespecially input from preservation microfilm.  A possible outcome is that\r\nthe film and paper which provide the input for the image library\r\neventually may go off into remote storage, and that the image library may\r\nbe the primary access tool.\r\n\r\nThe purpose and scope of POB focus on imaging.  Though related to CXP,\r\nPOB has two features which distinguish it:  1) scale--conversion of\r\n10,000 volumes into digital image form; and 2) source--conversion from\r\nmicrofilm.  Given these features, several key working hypotheses guide\r\nPOB, including:  1) Since POB is using microfilm, it is not concerned with\r\nthe image library as a preservation medium.  2) Digital imagery can improve\r\naccess to recorded knowledge through printing and network distribution at\r\na modest incremental cost of microfilm.  3) Capturing and storing documents\r\nin a digital image form is necessary to further improvements in access.\r\n(POB distinguishes between the imaging, digitizing process and OCR,\r\nwhich at this stage it does not plan to perform.)\r\n\r\nCurrently in its first or organizational phase, POB found that it could\r\nuse a vendor selection process to facilitate a good deal of the\r\norganizational work (e.g., creating a project team and advisory board,\r\nconfirming the validity of the plan, establishing the cost of the project\r\nand a budget, selecting the materials to convert, and then raising the\r\nnecessary funds).\r\n\r\nPOB developed numerous selection criteria, including:  a firm committed\r\nto image-document management, the ability to serve as systems integrator\r\nin a large-scale project over several years, interest in developing the\r\nrequisite software as a standard rather than a custom product, and a\r\nwillingness to invest substantial resources in the project itself.\r\n\r\nTwo vendors, DEC and Xerox, were selected as finalists in October 1991,\r\nand with the support of the Commission on Preservation and Access, each\r\nwas commissioned to generate a detailed requirements analysis for the\r\nproject and then to submit a formal proposal for the completion of the\r\nproject, which included a budget and costs. The terms were that POB would\r\npay the loser.  The results for Yale of involving a vendor included: \r\nbroad involvement of Yale staff across the board at a relatively low\r\ncost, which may have long-term significance in carrying out the project\r\n(twenty-five to thirty university people are engaged in POB); better\r\nunderstanding of the factors that affect corporate response to markets\r\nfor imaging products; a competitive proposal; and a more sophisticated\r\nview of the imaging markets.\r\n\r\nThe most important factor that distinguished the vendors under\r\nconsideration was their identification with the customer.  The size and\r\ninternal complexity of the company also was an important factor.  POB was\r\nlooking at large companies that had substantial resources.  In the end,\r\nthe process generated for Yale two competitive proposals, with Xerox's\r\nthe clear winner.  WATERS then described the components of the proposal,\r\nthe design principles, and some of the costs estimated for the process.\r\n\r\nComponents are essentially four:  a conversion subsystem, a\r\nnetwork-accessible storage subsystem for 10,000 books (and POB expects\r\n200 to 600 dpi storage), browsing stations distributed on the campus\r\nnetwork, and network access to the image printers.\r\n\r\nAmong the design principles, POB wanted conversion at the highest\r\npossible resolution.  Assuming TIFF files, TIFF files with Group 4\r\ncompression, TCP/IP, and ethernet network on campus, POB wanted a\r\nclient-server approach with image documents distributed to the\r\nworkstations and made accessible through native workstation interfaces\r\nsuch as Windows.  POB also insisted on a phased approach to\r\nimplementation:  1) a stand-alone, single-user, low-cost entry into the\r\nbusiness with a workstation focused on conversion and allowing POB to\r\nexplore user access; 2) movement into a higher-volume conversion with\r\nnetwork-accessible storage and multiple access stations; and 3) a\r\nhigh-volume conversion, full-capacity storage, and multiple browsing\r\nstations distributed throughout the campus.\r\n\r\nThe costs proposed for start-up assumed the existence of the Yale network\r\nand its two DocuTech image printers.  Other start-up costs are estimated\r\nat $1 million over the three phases.  At the end of the project, the annual\r\noperating costs estimated primarily for the software and hardware proposed\r\ncome to about $60,000, but these exclude costs for labor needed in the\r\nconversion process, network and printer usage, and facilities management.\r\n\r\nFinally, the selection process produced for Yale a more sophisticated\r\nview of the imaging markets:  the management of complex documents in\r\nimage form is not a preservation problem, not a library problem, but a\r\ngeneral problem in a broad, general industry.  Preservation materials are\r\nuseful for developing that market because of the qualities of the\r\nmaterial.  For example, much of it is out of copyright.  The resolution\r\nof key issues such as the quality of scanning and image browsing also\r\nwill affect development of that market.\r\n\r\nThe technology is readily available but changing rapidly.  In this\r\ncontext of rapid change, several factors affect quality and cost, to\r\nwhich POB intends to pay particular attention, for example, the various\r\nlevels of resolution that can be achieved.  POB believes it can bring\r\nresolution up to 600 dpi, but an interpolation process from 400 to 600 is\r\nmore likely.  The variation quality in microfilm will prove to be a\r\nhighly important factor.  POB may reexamine the standards used to film in\r\nthe first place by looking at this process as a follow-on to microfilming.\r\n\r\nOther important factors include:  the techniques available to the\r\noperator for handling material, the ways of integrating quality control\r\ninto the digitizing work flow, and a work flow that includes indexing and\r\nstorage.  POB's requirement was to be able to deal with quality control\r\nat the point of scanning.  Thus, thanks to Xerox, POB anticipates having\r\na mechanism which will allow it not only to scan in batch form, but to\r\nreview the material as it goes through the scanner and control quality\r\nfrom the outset.\r\n\r\nThe standards for measuring quality and costs depend greatly on the uses\r\nof the material, including subsequent OCR, storage, printing, and\r\nbrowsing.  But especially at issue for POB is the facility for browsing. \r\nThis facility, WATERS said, is perhaps the weakest aspect of imaging\r\ntechnology and the most in need of development.\r\n\r\nA variety of factors affect the usability of complex documents in image\r\nform, among them:  1) the ability of the system to handle the full range\r\nof document types, not just monographs but serials, multi-part\r\nmonographs, and manuscripts; 2) the location of the database of record\r\nfor bibliographic information about the image document, which POB wants\r\nto enter once and in the most useful place, the on-line catalog; 3) a\r\ndocument identifier for referencing the bibliographic information in one\r\nplace and the images in another; 4) the technique for making the basic\r\ninternal structure of the document accessible to the reader; and finally,\r\n5) the physical presentation on the CRT of those documents.  POB is ready\r\nto complete this phase now.  One last decision involves deciding which\r\nmaterial to scan.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nDISCUSSION * TIFF files constitute de facto standard * NARA's experience\r\nwith image conversion software and text conversion * RFC 1314 *\r\nConsiderable flux concerning available hardware and software solutions *\r\nNAL through-put rate during scanning * Window management questions *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nIn the question-and-answer period that followed WATERS's presentation,\r\nthe following points emerged:\r\n\r\n     * ZIDAR's statement about using TIFF files as a standard meant de\r\n     facto standard.  This is what most people use and typically exchange\r\n     with other groups, across platforms, or even occasionally across\r\n     display software.\r\n\r\n     * HOLMES commented on the unsuccessful experience of NARA in\r\n     attempting to run image-conversion software or to exchange between\r\n     applications:  What are supposedly TIFF files go into other software\r\n     that is supposed to be able to accept TIFF but cannot recognize the\r\n     format and cannot deal with it, and thus renders the exchange\r\n     useless.  Re text conversion, he noted the different recognition\r\n     rates obtained by substituting the make and model of scanners in\r\n     NARA's recent test of an \"intelligent\" character-recognition product\r\n     for a new company.  In the selection of hardware and software,\r\n     HOLMES argued, software no longer constitutes the overriding factor\r\n     it did until about a year ago; rather it is perhaps important to\r\n     look at both now.\r\n\r\n     * Danny Cohen and Alan Katz of the University of Southern California\r\n     Information Sciences Institute began circulating as an Internet RFC\r\n     (RFC 1314) about a month ago a standard for a TIFF interchange\r\n     format for Internet distribution of monochrome bit-mapped images,\r\n     which LYNCH said he believed would be used as a de facto standard.\r\n\r\n     * FLEISCHHAUER's impression from hearing these reports and thinking\r\n     about AM's experience was that there is considerable flux concerning\r\n     available hardware and software solutions.  HOOTON agreed and\r\n     commented at the same time on ZIDAR's statement that the equipment\r\n     employed affects the results produced.  One cannot draw a complete\r\n     conclusion by saying it is difficult or impossible to perform OCR\r\n     from scanning microfilm, for example, with that device,  that set of\r\n     parameters, and system requirements, because numerous other people\r\n     are accomplishing just that, using other components, perhaps. \r\n     HOOTON opined that both the hardware and the software were highly\r\n     important.  Most of the problems discussed today have been solved in\r\n     numerous different ways by other people.  Though it is good to be\r\n     cognizant of various experiences, this is not to say that it will\r\n     always be thus.\r\n\r\n     * At NAL, the through-put rate of the scanning process for paper,\r\n     page by page, performing OCR, ranges from 300 to 600 pages per day;\r\n     not performing OCR is considerably faster, although how much faster\r\n     is not known.  This is for scanning from bound books, which is much\r\n     slower.\r\n\r\n     * WATERS commented on window management questions:  DEC proposed an\r\n     X-Windows solution which was problematical for two reasons.  One was\r\n     POB's requirement to be able to manipulate images on the workstation\r\n     and bring them down to the workstation itself and the other was\r\n     network usage.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nTHOMA * Illustration of deficiencies in scanning and storage process *\r\nImage quality in this process * Different costs entailed by better image\r\nquality * Techniques for overcoming various de-ficiencies:  fixed\r\nthresholding, dynamic thresholding, dithering, image merge * Page edge\r\neffects *   \r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nGeorge THOMA, chief, Communications Engineering Branch, National Library\r\nof Medicine (NLM), illustrated several of the deficiencies discussed by\r\nthe previous speakers.  He introduced the topic of special problems by\r\nnoting the advantages of electronic imaging.  For example, it is regenerable\r\nbecause it is a coded file, and real-time quality control is possible with\r\nelectronic capture, whereas in photographic capture it is not.\r\n\r\nOne of the difficulties discussed in the scanning and storage process was\r\nimage quality which, without belaboring the obvious, means different\r\nthings for maps, medical X-rays, or broadcast television.  In the case of\r\ndocuments, THOMA said, image quality boils down to legibility of the\r\ntextual parts, and fidelity in the case of gray or color photo print-type\r\nmaterial.  Legibility boils down to scan density, the standard in most\r\ncases being 300 dpi.  Increasing the resolution with scanners that\r\nperform 600 or 1200 dpi, however, comes at a cost.\r\n\r\nBetter image quality entails at least four different kinds of costs:  1)\r\nequipment costs, because the CCD (i.e., charge-couple device) with\r\ngreater number of elements costs more;  2) time costs that translate to\r\nthe actual capture costs, because manual labor is involved (the time is\r\nalso dependent on the fact that more data has to be moved around in the\r\nmachine in the scanning or network devices that perform the scanning as\r\nwell as the storage);  3) media costs, because at high resolutions larger\r\nfiles have to be stored; and 4) transmission costs, because there is just\r\nmore data to be transmitted.\r\n\r\nBut while resolution takes care of the issue of legibility in image\r\nquality, other deficiencies have to do with contrast and elements on the\r\npage scanned or the image that needed to be removed or clarified.  Thus,\r\nTHOMA proceeded to illustrate various deficiencies, how they are\r\nmanifested, and several techniques to overcome them.\r\n\r\nFixed thresholding was the first technique described, suitable for\r\nblack-and-white text, when the contrast does not vary over the page.  One\r\ncan have many different threshold levels in scanning devices.  Thus,\r\nTHOMA offered an example of extremely poor contrast, which resulted from\r\nthe fact that the stock was a heavy red.  This is the sort of image that\r\nwhen microfilmed fails to provide any legibility whatsoever.  Fixed\r\nthresholding is the way to change the black-to-red contrast to the\r\ndesired black-to-white contrast.\r\n\r\nOther examples included material that had been browned or yellowed by\r\nage.  This was also a case of contrast deficiency, and correction was\r\ndone by fixed thresholding.  A final example boils down to the same\r\nthing, slight variability, but it is not significant.  Fixed thresholding\r\nsolves this problem as well.  The microfilm equivalent is certainly legible,\r\nbut it comes with dark areas.  Though THOMA did not have a slide of the\r\nmicrofilm in this case, he did show the reproduced electronic image.\r\n\r\nWhen one has variable contrast over a page or the lighting over the page\r\narea varies, especially in the case where a bound volume has light\r\nshining on it, the image must be processed by a dynamic thresholding\r\nscheme.  One scheme, dynamic averaging, allows the threshold level not to\r\nbe fixed but to be recomputed for every pixel from the neighboring\r\ncharacteristics.  The neighbors of a pixel determine where the threshold\r\nshould be set for that pixel.\r\n\r\nTHOMA showed an example of a page that had been made deficient by a\r\nvariety of techniques, including a burn mark, coffee stains, and a yellow\r\nmarker.  Application of a fixed-thresholding scheme, THOMA argued, might\r\ntake care of several deficiencies on the page but not all of them. \r\nPerforming the calculation for a dynamic threshold setting, however,\r\nremoves most of the deficiencies so that at least the text is legible.\r\n\r\nAnother problem is representing a gray level with black-and-white pixels\r\nby a process known as dithering or electronic screening.  But dithering\r\ndoes not provide good image quality for pure black-and-white textual\r\nmaterial.  THOMA illustrated this point with examples. Although its\r\nsuitability for photoprint is the reason for electronic screening or\r\ndithering, it cannot be used for every compound image.  In the document\r\nthat was distributed by CXP, THOMA noticed that the dithered image of the\r\nIEEE test chart evinced some deterioration in the text.  He presented an\r\nextreme example of deterioration in the text in which compounded\r\ndocuments had to be set right by other techniques.  The technique\r\nillustrated by the present example was an image merge in which the page\r\nis scanned twice and the settings go from fixed threshold to the\r\ndithering matrix; the resulting images are merged to give the best\r\nresults with each technique.\r\n\r\nTHOMA illustrated how dithering is also used in nonphotographic or\r\nnonprint materials with an example of a grayish page from a medical text,\r\nwhich was reproduced to show all of the gray that appeared in the\r\noriginal.  Dithering provided a reproduction of all the gray in the\r\noriginal of another example from the same text.\r\n\r\nTHOMA finally illustrated the problem of bordering, or page-edge,\r\neffects.  Books and bound volumes that are placed on a photocopy machine\r\nor a scanner produce page-edge effects that are undesirable for two\r\nreasons:  1) the aesthetics of the image; after all, if the image is to\r\nbe preserved, one does not necessarily want to keep all of its\r\ndeficiencies; 2) compression (with the bordering problem THOMA\r\nillustrated, the compression ratio deteriorated tremendously).  One way\r\nto eliminate this more serious problem is to have the operator at the\r\npoint of scanning window the part of the image that is desirable and\r\nautomatically turn all of the pixels out of that picture to white. \r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nFLEISCHHAUER * AM's experience with scanning bound materials * Dithering\r\n*\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nCarl FLEISCHHAUER, coordinator, American Memory, Library of Congress,\r\nreported AM's experience with scanning bound materials, which he likened\r\nto the problems involved in using photocopying machines.  Very few\r\ndevices in the industry offer book-edge scanning, let alone book cradles. \r\nThe problem may be unsolvable, FLEISCHHAUER said, because a large enough\r\nmarket does not exist for a preservation-quality scanner.  AM is using a\r\nKurzweil scanner, which is a book-edge scanner now sold by Xerox.\r\n\r\nDevoting the remainder of his brief presentation to dithering,\r\nFLEISCHHAUER related AM's experience with a contractor who was using\r\nunsophisticated equipment and software to reduce moire patterns from\r\nprinted halftones.  AM took the same image and used the dithering\r\nalgorithm that forms part of the same Kurzweil Xerox scanner; it\r\ndisguised moire patterns much more effectively.\r\n\r\nFLEISCHHAUER also observed that dithering produces a binary file which is\r\nuseful for numerous purposes, for example, printing it on a laser printer\r\nwithout having to \"re-halftone\" it.  But it tends to defeat efficient\r\ncompression, because the very thing that dithers to reduce moire patterns\r\nalso tends to work against compression schemes.  AM thought the\r\ndifference in image quality was worth it.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nDISCUSSION * Relative use as a criterion for POB's selection of books to\r\nbe converted into digital form *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nDuring the discussion period, WATERS noted that one of the criteria for\r\nselecting books among the 10,000 to be converted into digital image form\r\nwould be how much relative use they would receive--a subject still\r\nrequiring evaluation.  The challenge will be to understand whether\r\ncoherent bodies of material will increase usage or whether POB should\r\nseek material that is being used, scan that, and make it more accessible. \r\nPOB might decide to digitize materials that are already heavily used, in\r\norder to make them more accessible and decrease wear on them.  Another\r\napproach would be to provide a large body of intellectually coherent\r\nmaterial that may be used more in digital form than it is currently used\r\nin microfilm.  POB would seek material that was out of copyright.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nBARONAS * Origin and scope of AIIM * Types of documents produced in\r\nAIIM's standards program * Domain of AIIM's standardization work * AIIM's\r\nstructure * TC 171 and MS23 * Electronic image management standards *\r\nCategories of EIM standardization where AIIM standards are being\r\ndeveloped *  \r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nJean BARONAS, senior manager, Department of Standards and Technology,\r\nAssociation for Information and Image Management (AIIM), described the\r\nnot-for-profit association and the national and international programs\r\nfor standardization in which AIIM is active.\r\n\r\nAccredited for twenty-five years as the nation's standards development\r\norganization for document image management, AIIM began life in a library\r\ncommunity developing microfilm standards.  Today the association\r\nmaintains both its library and business-image management standardization\r\nactivities--and has moved into electronic image-management\r\nstandardization (EIM).\r\n\r\nBARONAS defined the program's scope.  AIIM deals with:  1) the\r\nterminology of standards and of the technology it uses; 2) methods of\r\nmeasurement for the systems, as well as quality; 3) methodologies for\r\nusers to evaluate and measure quality; 4) the features of apparatus used\r\nto manage and edit images; and 5) the procedures used to manage images.\r\n\r\nBARONAS noted that three types of documents are produced in the AIIM\r\nstandards program:  the first two, accredited by the American National\r\nStandards Institute (ANSI), are standards and standard recommended\r\npractices.  Recommended practices differ from standards in that they\r\ncontain more tutorial information.  A technical report is not an ANSI\r\nstandard.  Because AIIM's policies and procedures for developing\r\nstandards are approved by ANSI, its standards are labeled ANSI/AIIM,\r\nfollowed by the number and title of the standard.\r\n\r\nBARONAS then illustrated the domain of AIIM's standardization work.  For\r\nexample, AIIM is the administrator of the U.S. Technical Advisory Group\r\n(TAG) to the International Standards Organization's (ISO) technical\r\ncommittee, TC l7l Micrographics and Optical Memories for Document and\r\nImage Recording, Storage, and Use.  AIIM officially works through ANSI in\r\nthe international standardization process.\r\n\r\nBARONAS described AIIM's structure, including its board of directors, its\r\nstandards board of twelve individuals active in the image-management\r\nindustry, its strategic planning and legal admissibility task forces, and\r\nits National Standards Council, which is comprised of the members of a\r\nnumber of organizations who vote on every AIIM standard before it is\r\npublished.  BARONAS pointed out that AIIM's liaisons deal with numerous\r\nother standards developers, including the optical disk community, office\r\nand publishing systems, image-codes-and-character set committees, and the\r\nNational Information Standards Organization (NISO).\r\n\r\nBARONAS illustrated the procedures of TC l7l, which covers all aspects of\r\nimage management.  When AIIM's national program has conceptualized a new\r\nproject, it is usually submitted to the international level, so that the\r\nmember countries of TC l7l can simultaneously work on the development of\r\nthe standard or the technical report.  BARONAS also illustrated a classic\r\nmicrofilm standard, MS23, which deals with numerous imaging concepts that\r\napply to electronic imaging.  Originally developed in the l970s, revised\r\nin the l980s, and revised again in l991, this standard is scheduled for\r\nanother revision.  MS23 is an active standard whereby users may propose\r\nnew density ranges and new methods of evaluating film images in the\r\nstandard's revision.\r\n\r\nBARONAS detailed several electronic image-management standards, for\r\ninstance, ANSI/AIIM MS44, a quality-control guideline for scanning 8.5\"\r\nby 11\" black-and-white office documents.  This standard is used with the\r\nIEEE fax image--a continuous tone photographic image with gray scales,\r\ntext, and several continuous tone pictures--and AIIM test target number\r\n2, a representative document used in office document management.\r\n\r\nBARONAS next outlined the four categories of EIM standardization in which\r\nAIIM standards are being developed:  transfer and retrieval, evaluation,\r\noptical disc and document scanning applications, and design and\r\nconversion of documents.  She detailed several of the main projects of\r\neach:  1) in the category of image transfer and retrieval, a bi-level\r\nimage transfer format, ANSI/AIIM MS53, which is a proposed standard that\r\ndescribes a file header for image transfer between unlike systems when\r\nthe images are compressed using G3 and G4 compression; 2) the category of\r\nimage evaluation, which includes the AIIM-proposed TR26 tutorial on image\r\nresolution (this technical report will treat the differences and\r\nsimilarities between classical or photographic and electronic imaging);\r\n3) design and conversion, which includes a proposed technical report\r\ncalled \"Forms Design Optimization for EIM\" (this report considers how\r\ngeneral-purpose business forms can be best designed so that scanning is\r\noptimized; reprographic characteristics such as type, rules, background,\r\ntint, and color will likewise be treated in the technical report); 4)\r\ndisk and document scanning applications includes a project a) on planning\r\nplatters and disk management, b) on generating an application profile for\r\nEIM when images are stored and distributed on CD-ROM, and c) on\r\nevaluating SCSI2, and how a common command set can be generated for SCSI2\r\nso that document scanners are more easily integrated.  (ANSI/AIIM MS53\r\nwill also apply to compressed images.)\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nBATTIN * The implications of standards for preservation * A major\r\nobstacle to successful cooperation * A hindrance to access in the digital\r\nenvironment * Standards a double-edged sword for those concerned with the\r\npreservation of the human record * Near-term prognosis for reliable\r\narchival standards * Preservation concerns for electronic media * Need\r\nfor reconceptualizing our preservation principles * Standards in the real\r\nworld and the politics of reproduction * Need to redefine the concept of\r\narchival and to begin to think in terms of life cycles * Cooperation and\r\nthe La Guardia Eight * Concerns generated by discussions on the problems\r\nof preserving text and image * General principles to be adopted in a\r\nworld without standards *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nPatricia BATTIN, president, the Commission on Preservation and Access\r\n(CPA), addressed the implications of standards for preservation.  She\r\nlisted several areas where the library profession and the analog world of\r\nthe printed book had made enormous contributions over the past hundred\r\nyears--for example, in bibliographic formats, binding standards, and, most\r\nimportant, in determining what constitutes longevity or archival quality.\r\n\r\nAlthough standards have lightened the preservation burden through the\r\ndevelopment of national and international collaborative programs,\r\nnevertheless, a pervasive mistrust of other people's standards remains a\r\nmajor obstacle to successful cooperation, BATTIN said.\r\n\r\nThe zeal to achieve perfection, regardless of the cost, has hindered\r\nrather than facilitated access in some instances, and in the digital\r\nenvironment, where no real standards exist, has brought an ironically\r\njust reward.\r\n\r\nBATTIN argued that standards are a double-edged sword for those concerned\r\nwith the preservation of the human record, that is, the provision of\r\naccess to recorded knowledge in a multitude of media as far into the\r\nfuture as possible.  Standards are essential to facilitate\r\ninterconnectivity and access, but, BATTIN said, as LYNCH pointed out\r\nyesterday, if set too soon they can hinder creativity, expansion of\r\ncapability, and the broadening of access.  The characteristics of\r\nstandards for digital imagery differ radically from those for analog\r\nimagery.  And the nature of digital technology implies continuing\r\nvolatility and change.  To reiterate, precipitous standard-setting can\r\ninhibit creativity, but delayed standard-setting results in chaos.\r\n\r\nSince in BATTIN'S opinion the near-term prognosis for reliable archival\r\nstandards, as defined by librarians in the analog world, is poor, two\r\nalternatives remain:  standing pat with the old technology, or\r\nreconceptualizing.\r\n\r\nPreservation concerns for electronic media fall into two general domains. \r\nOne is the continuing assurance of access to knowledge originally\r\ngenerated, stored, disseminated, and used in electronic form.  This\r\ndomain contains several subdivisions, including 1) the closed,\r\nproprietary systems discussed the previous day, bundled information such\r\nas electronic journals and government agency records, and electronically\r\nproduced or captured raw data; and 2) the application of digital\r\ntechnologies to the reformatting of materials originally published on a\r\ndeteriorating analog medium such as acid paper or videotape.\r\n\r\nThe preservation of electronic media requires a reconceptualizing of our\r\npreservation principles during a volatile, standardless transition which\r\nmay last far longer than any of us envision today.  BATTIN urged the\r\nnecessity of shifting focus from assessing, measuring, and setting\r\nstandards for the permanence of the medium to the concept of managing\r\ncontinuing access to information stored on a variety of media and\r\nrequiring a variety of ever-changing hardware and software for access--a\r\nfundamental shift for the library profession.\r\n\r\nBATTIN offered a primer on how to move forward with reasonable confidence\r\nin a world without standards.  Her comments fell roughly into two sections:\r\n1) standards in the real world and 2) the politics of reproduction.\r\n\r\nIn regard to real-world standards, BATTIN argued the need to redefine the\r\nconcept of archive and to begin to think in terms of life cycles.  In\r\nthe past, the naive assumption that paper would last forever produced a\r\ncavalier attitude toward life cycles.  The transient nature of the\r\nelectronic media has compelled people to recognize and accept upfront the\r\nconcept of life cycles in place of permanency.\r\n\r\nDigital standards have to be developed and set in a cooperative context\r\nto ensure efficient exchange of information.  Moreover, during this\r\ntransition period, greater flexibility concerning how concepts such as\r\nbackup copies and archival copies in the CXP are defined is necessary,\r\nor the opportunity to move forward will be lost.\r\n\r\nIn terms of cooperation, particularly in the university setting, BATTIN\r\nalso argued the need to avoid going off in a hundred different\r\ndirections.  The CPA has catalyzed a small group of universities called\r\nthe La Guardia Eight--because La Guardia Airport is where meetings take\r\nplace--Harvard, Yale, Cornell, Princeton, Penn State, Tennessee,\r\nStanford, and USC, to develop a digital preservation consortium to look\r\nat all these issues and develop de facto standards as we move along,\r\ninstead of waiting for something that is officially blessed.  Continuing\r\nto apply analog values and definitions of standards to the digital\r\nenvironment, BATTIN said, will effectively lead to forfeiture of the\r\nbenefits of digital technology to research and scholarship.\r\n\r\nUnder the second rubric, the politics of reproduction, BATTIN reiterated\r\nan oft-made argument concerning the electronic library, namely, that it\r\nis more difficult to transform than to create, and nowhere is that belief\r\nexpressed more dramatically than in the conversion of brittle books to\r\nnew media.  Preserving information published in electronic media involves\r\nmaking sure the information remains accessible and that digital\r\ninformation is not lost through reproduction.  In the analog world of\r\nphotocopies and microfilm, the issue of fidelity to the original becomes\r\nparamount, as do issues of \"Whose fidelity?\" and \"Whose original?\"\r\n\r\nBATTIN elaborated these arguments with a few examples from a recent study\r\nconducted by the CPA on the problems of preserving text and image. \r\nDiscussions with scholars, librarians, and curators in a variety of\r\ndisciplines dependent on text and image generated a variety of concerns,\r\nfor example:  1) Copy what is, not what the technology is capable of. \r\nThis is very important for the history of ideas.  Scholars wish to know\r\nwhat the author saw and worked from.  And make available at the\r\nworkstation the opportunity to erase all the defects and enhance the\r\npresentation.  2) The fidelity of reproduction--what is good enough, what\r\ncan we afford, and the difference it makes--issues of subjective versus\r\nobjective resolution.  3) The differences between primary and secondary\r\nusers.  Restricting the definition of primary user to the one in whose\r\ndiscipline the material has been published runs one headlong into the\r\nreality that these printed books have had a host of other users from a\r\nhost of other disciplines, who not only were looking for very different\r\nthings, but who also shared values very different from those of the\r\nprimary user.  4) The relationship of the standard of reproduction to new\r\ncapabilities of scholarship--the browsing standard versus an archival\r\nstandard.  How good must the archival standard be?  Can a distinction be\r\ndrawn between potential users in setting standards for reproduction? \r\nArchival storage, use copies, browsing copies--ought an attempt to set\r\nstandards even be made?  5) Finally, costs.  How much are we prepared to\r\npay to capture absolute fidelity?  What are the trade-offs between vastly\r\nenhanced access, degrees of fidelity, and costs?\r\n\r\nThese standards, BATTIN concluded, serve to complicate further the\r\nreproduction process, and add to the long list of technical standards\r\nthat are necessary to ensure widespread access.  Ways to articulate and\r\nanalyze the costs that are attached to the different levels of standards\r\nmust be found.\r\n\r\nGiven the chaos concerning standards, which promises to linger for the\r\nforeseeable future, BATTIN urged adoption of the following general\r\nprinciples:\r\n\r\n     * Strive to understand the changing information requirements of\r\n     scholarly disciplines as more and more technology is integrated into\r\n     the process of research and scholarly communication in order to meet\r\n     future scholarly needs, not to build for the past.  Capture\r\n     deteriorating information at the highest affordable resolution, even\r\n     though the dissemination and display technologies will lag.\r\n\r\n     * Develop cooperative mechanisms to foster agreement on protocols\r\n     for document structure and other interchange mechanisms necessary\r\n     for widespread dissemination and use before official standards are\r\n     set.\r\n\r\n     * Accept that, in a transition period, de facto standards will have\r\n     to be developed.\r\n\r\n     * Capture information in a way that keeps all options open and\r\n     provides for total convertibility:  OCR, scanning of microfilm,\r\n     producing microfilm from scanned documents, etc.\r\n\r\n     * Work closely with the generators of information and the builders\r\n     of networks and databases to ensure that continuing accessibility is\r\n     a primary concern from the beginning.\r\n\r\n     * Piggyback on standards under development for the broad market, and\r\n     avoid library-specific standards; work with the vendors, in order to\r\n     take advantage of that which is being standardized for the rest of\r\n     the world.\r\n\r\n     * Concentrate efforts on managing permanence in the digital world,\r\n     rather than perfecting the longevity of a particular medium.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nDISCUSSION * Additional comments on TIFF *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nDuring the brief discussion period that followed BATTIN's presentation,\r\nBARONAS explained that TIFF was not developed in collaboration with or\r\nunder the auspices of AIIM.  TIFF is a company product, not a standard,\r\nis owned by two corporations, and is always changing.  BARONAS also\r\nobserved that ANSI/AIIM MS53, a bi-level image file transfer format that\r\nallows unlike systems to exchange images, is compatible with TIFF as well\r\nas with DEC's architecture and IBM's MODCA/IOCA.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nHOOTON * Several questions to be considered in discussing text conversion\r\n*\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nHOOTON introduced the final topic, text conversion, by noting that it is\r\nbecoming an increasingly important part of the imaging business.  Many\r\npeople now realize that it enhances their system to be able to have more\r\nand more character data as part of their imaging system.  Re the issue of\r\nOCR versus rekeying, HOOTON posed several questions:  How does one get\r\ntext into computer-readable form?  Does one use automated processes? \r\nDoes one attempt to eliminate the use of operators where possible? \r\nStandards for accuracy, he said, are extremely important:  it makes a\r\nmajor difference in cost and time whether one sets as a standard 98.5\r\npercent acceptance or 99.5 percent.  He mentioned outsourcing as a\r\npossibility for converting text.  Finally, what one does with the image\r\nto prepare it for the recognition process is also important, he said,\r\nbecause such preparation changes how recognition is viewed, as well as\r\nfacilitates recognition itself.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nLESK * Roles of participants in CORE * Data flow * The scanning process *\r\nThe image interface * Results of experiments involving the use of\r\nelectronic resources and traditional paper copies * Testing the issue of\r\nserendipity * Conclusions *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nMichael LESK, executive director, Computer Science Research, Bell\r\nCommunications Research, Inc. (Bellcore), discussed the Chemical Online\r\nRetrieval Experiment (CORE), a cooperative project involving Cornell\r\nUniversity, OCLC, Bellcore, and the American Chemical Society (ACS).\r\n\r\nLESK spoke on 1) how the scanning was performed, including the unusual\r\nfeature of page segmentation, and 2) the use made of the text and the\r\nimage in experiments.\r\n\r\nWorking with the chemistry journals (because ACS has been saving its\r\ntypesetting tapes since the mid-1970s and thus has a significant back-run\r\nof the most important chemistry journals in the United States), CORE is\r\nattempting to create an automated chemical library.  Approximately a\r\nquarter of the pages by square inch are made up of images of\r\nquasi-pictorial material; dealing with the graphic components of the\r\npages is extremely important.  LESK described the roles of participants\r\nin CORE:  1) ACS provides copyright permission, journals on paper,\r\njournals on microfilm, and some of the definitions of the files; 2) at\r\nBellcore, LESK chiefly performs the data preparation, while Dennis Egan\r\nperforms experiments on the users of chemical abstracts, and supplies the\r\nindexing and numerous magnetic tapes;  3) Cornell provides the site of the\r\nexperiment; 4) OCLC develops retrieval software and other user interfaces.\r\nVarious manufacturers and publishers have furnished other help.\r\n\r\nConcerning data flow, Bellcore receives microfilm and paper from ACS; the\r\nmicrofilm is scanned by outside vendors, while the paper is scanned\r\ninhouse on an Improvision scanner, twenty pages per minute at 300 dpi,\r\nwhich provides sufficient quality for all practical uses.  LESK would\r\nprefer to have more gray level, because one of the ACS journals prints on\r\nsome colored pages, which creates a problem.\r\n\r\nBellcore performs all this scanning, creates a page-image file, and also\r\nselects from the pages the graphics, to mix with the text file (which is\r\ndiscussed later in the Workshop).  The user is always searching the ASCII\r\nfile, but she or he may see a display based on the ASCII or a display\r\nbased on the images.\r\n\r\nLESK illustrated how the program performs page analysis, and the image\r\ninterface.  (The user types several words, is presented with a list--\r\nusually of the titles of articles contained in an issue--that derives\r\nfrom the ASCII, clicks on an icon and receives an image that mirrors an\r\nACS page.)  LESK also illustrated an alternative interface, based on text\r\non the ASCII, the so-called SuperBook interface from Bellcore.\r\n\r\nLESK next presented the results of an experiment conducted by Dennis Egan\r\nand involving thirty-six students at Cornell, one third of them\r\nundergraduate chemistry majors, one third senior undergraduate chemistry\r\nmajors, and one third graduate chemistry students.  A third of them\r\nreceived the paper journals, the traditional paper copies and chemical\r\nabstracts on paper.  A third received image displays of the pictures of\r\nthe pages, and a third received the text display with pop-up graphics.\r\n\r\nThe students were given several questions made up by some chemistry\r\nprofessors.  The questions fell into five classes, ranging from very easy\r\nto very difficult, and included questions designed to simulate browsing\r\nas well as a traditional information retrieval-type task.\r\n\r\nLESK furnished the following results.  In the straightforward question\r\nsearch--the question being, what is the phosphorus oxygen bond distance\r\nand hydroxy phosphate?--the students were told that they could take\r\nfifteen minutes and, then, if they wished, give up.  The students with\r\npaper took more than fifteen minutes on average, and yet most of them\r\ngave up.  The students with either electronic format, text or image,\r\nreceived good scores in reasonable time, hardly ever had to give up, and\r\nusually found the right answer.\r\n\r\nIn the browsing study, the students were given a list of eight topics,\r\ntold to imagine that an issue of the Journal of the American Chemical\r\nSociety had just appeared on their desks, and were also told to flip\r\nthrough it and to find topics mentioned in the issue.  The average scores\r\nwere about the same.  (The students were told to answer yes or no about\r\nwhether or not particular topics appeared.)  The errors, however, were\r\nquite different.  The students with paper rarely said that something\r\nappeared when it had not.  But they often failed to find something\r\nactually mentioned in the issue.  The computer people found numerous\r\nthings, but they also frequently said that a topic was mentioned when it\r\nwas not.  (The reason, of course, was that they were performing word\r\nsearches.  They were finding that words were mentioned and they were\r\nconcluding that they had accomplished their task.)\r\n\r\nThis question also contained a trick to test the issue of serendipity. \r\nThe students were given another list of eight topics and instructed,\r\nwithout taking a second look at the journal, to recall how many of this\r\nnew list of eight topics were in this particular issue.  This was an\r\nattempt to see if they performed better at remembering what they were not\r\nlooking for.  They all performed about the same, paper or electronics,\r\nabout 62 percent accurate.  In short, LESK said, people were not very\r\ngood when it came to serendipity, but they were no worse at it with\r\ncomputers than they were with paper.\r\n\r\n(LESK gave a parenthetical illustration of the learning curve of students\r\nwho used SuperBook.)\r\n\r\nThe students using the electronic systems started off worse than the ones\r\nusing print, but by the third of the three sessions in the series had\r\ncaught up to print.  As one might expect, electronics provide a much\r\nbetter means of finding what one wants to read; reading speeds, once the\r\nobject of the search has been found, are about the same.\r\n\r\nAlmost none of the students could perform the hard task--the analogous\r\ntransformation.  (It would require the expertise of organic chemists to\r\ncomplete.)  But an interesting result was that the students using the text\r\nsearch performed terribly, while those using the image system did best.\r\nThat the text search system is driven by text offers the explanation.\r\nEverything is focused on the text; to see the pictures, one must press\r\non an icon.  Many students found the right article containing the answer\r\nto the question, but they did not click on the icon to bring up the right\r\nfigure and see it.  They did not know that they had found the right place,\r\nand thus got it wrong.\r\n\r\nThe short answer demonstrated by this experiment was that in the event\r\none does not know what to read, one needs the electronic systems; the\r\nelectronic systems hold no advantage at the moment if one knows what to\r\nread, but neither do they impose a penalty.\r\n\r\nLESK concluded by commenting that, on one hand, the image system was easy\r\nto use.  On the other hand, the text display system, which represented\r\ntwenty man-years of work in programming and polishing, was not winning,\r\nbecause the text was not being read, just searched.  The much easier\r\nsystem is highly competitive as well as remarkably effective for the\r\nactual chemists.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nERWAY * Most challenging aspect of working on AM * Assumptions guiding\r\nAM's approach * Testing different types of service bureaus * AM's\r\nrequirement for 99.95 percent accuracy * Requirements for text-coding *\r\nAdditional factors influencing AM's approach to coding * Results of AM's\r\nexperience with rekeying * Other problems in dealing with service bureaus\r\n* Quality control the most time-consuming aspect of contracting out\r\nconversion * Long-term outlook uncertain *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nTo Ricky ERWAY, associate coordinator, American Memory, Library of\r\nCongress, the constant variety of conversion projects taking place\r\nsimultaneously represented perhaps the most challenging aspect of working\r\non AM.  Thus, the challenge was not to find a solution for text\r\nconversion but a tool kit of solutions to apply to LC's varied\r\ncollections that need to be converted.  ERWAY limited her remarks to the\r\nprocess of converting text to machine-readable form, and the variety of\r\nLC's text collections, for example, bound volumes, microfilm, and\r\nhandwritten manuscripts.\r\n\r\nTwo assumptions have guided AM's approach, ERWAY said:  1) A desire not\r\nto perform the conversion inhouse.  Because of the variety of formats and\r\ntypes of texts, to capitalize the equipment and have the talents and\r\nskills to operate them at LC would be extremely expensive.  Further, the\r\nnatural inclination to upgrade to newer and better equipment each year\r\nmade it reasonable for AM to focus on what it did best and seek external\r\nconversion services.  Using service bureaus also allowed AM to have\r\nseveral types of operations take place at the same time.  2) AM was not a\r\ntechnology project, but an effort to improve access to library\r\ncollections.  Hence, whether text was converted using OCR or rekeying\r\nmattered little to AM.  What mattered were cost and accuracy of results.\r\n\r\nAM considered different types of service bureaus and selected three to\r\nperform several small tests in order to acquire a sense of the field. \r\nThe sample collections with which they worked included handwritten\r\ncorrespondence, typewritten manuscripts from the 1940s, and\r\neighteenth-century printed broadsides on microfilm.  On none of these\r\nsamples was OCR performed; they were all rekeyed.  AM had several special\r\nrequirements for the three service bureaus it had engaged.  For instance,\r\nany errors in the original text were to be retained.  Working from bound\r\nvolumes or anything that could not be sheet-fed also constituted a factor\r\neliminating companies that would have performed OCR.\r\n\r\nAM requires 99.95 percent accuracy, which, though it sounds high, often\r\nmeans one or two errors per page.  The initial batch of test samples\r\ncontained several handwritten materials for which AM did not require\r\ntext-coding.  The results, ERWAY reported, were in all cases fairly\r\ncomparable:  for the most part, all three service bureaus achieved 99.95\r\npercent accuracy.  AM was satisfied with the work but surprised at the cost.\r\n\r\nAs AM began converting whole collections, it retained the requirement for\r\n99.95 percent accuracy and added requirements for text-coding.  AM needed\r\nto begin performing work more than three years ago before LC requirements\r\nfor SGML applications had been established.  Since AM's goal was simply\r\nto retain any of the intellectual content represented by the formatting\r\nof the document (which would be lost if one performed a straight ASCII\r\nconversion), AM used \"SGML-like\" codes.  These codes resembled SGML tags\r\nbut were used without the benefit of document-type definitions.  AM found\r\nthat many service bureaus were not yet SGML-proficient.\r\n\r\nAdditional factors influencing the approach AM took with respect to\r\ncoding included:  1) the inability of any known microcomputer-based\r\nuser-retrieval software to take advantage of SGML coding; and 2) the\r\nmultiple inconsistencies in format of the older documents, which\r\nconfirmed AM in its desire not to attempt to force the different formats\r\nto conform to a single document-type definition (DTD) and thus create the\r\nneed for a separate DTD for each document. \r\n\r\nThe five text collections that AM has converted or is in the process of\r\nconverting include a collection of eighteenth-century broadsides, a\r\ncollection of pamphlets, two typescript document collections, and a\r\ncollection of 150 books.\r\n\r\nERWAY next reviewed the results of AM's experience with rekeying, noting\r\nagain that because the bulk of AM's materials are historical, the quality\r\nof the text often does not lend itself to OCR.  While non-English\r\nspeakers are less likely to guess or elaborate or correct typos in the\r\noriginal text, they are also less able to infer what we would; they also\r\nare nearly incapable of converting handwritten text.  Another\r\ndisadvantage of working with overseas keyers is that they are much less\r\nlikely to telephone with questions, especially on the coding, with the\r\nresult that they develop their own rules as they encounter new\r\nsituations.\r\n\r\nGovernment contracting procedures and time frames posed a major challenge\r\nto performing the conversion.  Many service bureaus are not accustomed to\r\nretaining the image, even if they perform OCR.  Thus, questions of image\r\nformat and storage media were somewhat novel to many of them.  ERWAY also\r\nremarked other problems in dealing with service bureaus, for example,\r\ntheir inability to perform text conversion from the kind of microfilm\r\nthat LC uses for preservation purposes.\r\n\r\nBut quality control, in ERWAY's experience, was the most time-consuming\r\naspect of contracting out conversion.  AM has been attempting to perform\r\na 10-percent quality review, looking at either every tenth document or\r\nevery tenth page to make certain that the service bureaus are maintaining\r\n99.95 percent accuracy.  But even if they are complying with the\r\nrequirement for accuracy, finding errors produces a desire to correct\r\nthem and, in turn, to clean up the whole collection, which defeats the\r\npurpose to some extent.  Even a double entry requires a\r\ncharacter-by-character comparison to the original to meet the accuracy\r\nrequirement.  LC is not accustomed to publish imperfect texts, which\r\nmakes attempting to deal with the industry standard an emotionally\r\nfraught issue for AM.  As was mentioned in the previous day's discussion,\r\ngoing from 99.95 to 99.99 percent accuracy usually doubles costs and\r\nmeans a third keying or another complete run-through of the text.\r\n\r\nAlthough AM has learned much from its experiences with various collections\r\nand various service bureaus, ERWAY concluded pessimistically that no\r\nbreakthrough has been achieved.   Incremental improvements have occurred\r\nin some of the OCR technology, some of the processes, and some of the\r\nstandards acceptances, which, though they may lead to somewhat lower costs,\r\ndo not offer much encouragement to many people who are anxiously awaiting\r\nthe day that the entire contents of LC are available on-line.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nZIDAR * Several answers to why one attempts to perform full-text\r\nconversion * Per page cost of performing OCR * Typical problems\r\nencountered during editing * Editing poor copy OCR vs. rekeying *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nJudith ZIDAR, coordinator, National Agricultural Text Digitizing Program\r\n(NATDP), National Agricultural Library (NAL), offered several answers to\r\nthe question of why one attempts to perform full-text conversion:  1)\r\nText in an image can be read by a human but not by a computer, so of\r\ncourse it is not searchable and there is not much one can do with it.  2)\r\nSome material simply requires word-level access.  For instance, the legal\r\nprofession insists on full-text access to its material; with taxonomic or\r\ngeographic material, which entails numerous names, one virtually requires\r\nword-level access.  3) Full text permits rapid browsing and searching,\r\nsomething that cannot be achieved in an image with today's technology. \r\n4) Text stored as ASCII and delivered in ASCII is standardized and highly\r\nportable.  5) People just want full-text searching, even those who do not\r\nknow how to do it.  NAL, for the most part, is performing OCR at an\r\nactual cost per average-size page of approximately $7.  NAL scans the\r\npage to create the electronic image and passes it through the OCR device.\r\n\r\nZIDAR next rehearsed several typical problems encountered during editing. \r\nPraising the celerity of her student workers, ZIDAR observed that editing\r\nrequires approximately five to ten minutes per page, assuming that there\r\nare no large tables to audit.  Confusion among the three characters I, 1, \r\nand l, constitutes perhaps the most common problem encountered.  Zeroes\r\nand  O's also are  frequently confused.  Double M's create a particular\r\nproblem, even on clean pages.  They are so wide in most fonts that they\r\ntouch, and the system simply cannot tell where one letter ends and the\r\nother begins.  Complex page formats occasionally fail to columnate\r\nproperly, which entails rescanning as though one were working with a\r\nsingle column, entering the ASCII, and decolumnating for better\r\nsearching.  With proportionally spaced text, OCR can have difficulty\r\ndiscerning what is a space and what are merely spaces between letters, as\r\nopposed to spaces between words, and therefore will merge text or break\r\nup words where it should not.\r\n\r\nZIDAR said that it can often take longer to edit a poor-copy OCR than to\r\nkey it from scratch.  NAL has also experimented with partial editing of\r\ntext, whereby project workers go into and clean up the format, removing\r\nstray characters but not running a spell-check.  NAL corrects typos in\r\nthe title and authors' names, which provides a foothold for searching and\r\nbrowsing.  Even extremely poor-quality OCR (e.g., 60-percent accuracy)\r\ncan still be searched, because numerous words are correct, while the\r\nimportant words are probably repeated often enough that they are likely\r\nto be found correct somewhere.  Librarians, however, cannot tolerate this\r\nsituation, though end users seem more willing to use this text for\r\nsearching, provided that NAL indicates that it is unedited.  ZIDAR\r\nconcluded that rekeying of text may be the best route to take, in spite\r\nof numerous problems with quality control and cost.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nDISCUSSION * Modifying an image before performing OCR * NAL's costs per\r\npage *AM's costs per page and experience with Federal Prison Industries *\r\nElements comprising NATDP's costs per page * OCR and structured markup *\r\nDistinction between the structure of a document and its representation\r\nwhen put on the screen or printed *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nHOOTON prefaced the lengthy discussion that followed with several\r\ncomments about modifying an image before one reaches the point of\r\nperforming OCR.  For example, in regard to an application containing a\r\nsignificant amount of redundant data, such as form-type data, numerous\r\ncompanies today are working on various kinds of form renewal, prior to\r\ngoing through a recognition process, by using dropout colors.  Thus,\r\nacquiring access to form design or using electronic means are worth\r\nconsidering.  HOOTON also noted that conversion usually makes or breaks\r\none's imaging system.  It is extremely important, extremely costly in\r\nterms of either capital investment or service, and determines the quality\r\nof the remainder of one's system, because it determines the character of\r\nthe raw material used by the system.\r\n\r\nConcerning the four projects undertaken by NAL, two inside and two\r\nperformed by outside contractors, ZIDAR revealed that an in-house service\r\nbureau executed the first at a cost between $8 and $10 per page for\r\neverything, including building of the database.  The project undertaken\r\nby the Consultative Group on International Agricultural Research (CGIAR)\r\ncost approximately $10 per page for the conversion, plus some expenses\r\nfor the software and building of the database.  The Acid Rain Project--a\r\ntwo-disk set produced by the University of Vermont, consisting of\r\nCanadian publications on acid rain--cost $6.70 per page for everything,\r\nincluding keying of the text, which was double keyed, scanning of the\r\nimages, and building of the database.  The in-house project offered\r\nconsiderable ease of convenience and greater control of the process.  On\r\nthe other hand, the service bureaus know their job and perform it\r\nexpeditiously, because they have more people.\r\n\r\nAs a useful comparison, ERWAY revealed AM's costs as follows:  $0.75\r\ncents to $0.85 cents per thousand characters, with an average page\r\ncontaining 2,700 characters.  Requirements for coding and imaging\r\nincrease the costs.  Thus, conversion of the text, including the coding,\r\ncosts approximately $3 per page.  (This figure does not include the\r\nimaging and database-building included in the NAL costs.)  AM also\r\nenjoyed a happy experience with Federal Prison Industries, which\r\nprecluded the necessity of going through the request-for-proposal process\r\nto award a contract, because it is another government agency.  The\r\nprisoners performed AM's rekeying just as well as other service bureaus\r\nand proved handy as well.  AM shipped them the books, which they would\r\nphotocopy on a book-edge scanner.  They would perform the markup on\r\nphotocopies, return the books as soon as they were done with them,\r\nperform the keying, and return the material to AM on WORM disks.\r\n\r\nZIDAR detailed the elements that constitute the previously noted cost of\r\napproximately $7 per page.  Most significant is the editing, correction\r\nof errors, and spell-checkings, which though they may sound easy to\r\nperform require, in fact, a great deal of time.  Reformatting text also\r\ntakes a while, but a significant amount of NAL's expenses are for equipment,\r\nwhich was extremely expensive when purchased because it was one of the few\r\nsystems on the market.  The costs of equipment are being amortized over\r\nfive years but are still quite high, nearly $2,000 per month.\r\n\r\nHOCKEY raised a general question concerning OCR and the amount of editing\r\nrequired (substantial in her experience) to generate the kind of\r\nstructured markup necessary for manipulating the text on the computer or\r\nloading it into any retrieval system.  She wondered if the speakers could\r\nextend the previous question about the cost-benefit of adding or exerting\r\nstructured markup.  ERWAY noted that several OCR systems retain italics,\r\nbolding, and other spatial formatting.  While the material may not be in\r\nthe format desired, these systems possess the ability to remove the\r\noriginal materials quickly from the hands of the people performing the\r\nconversion, as well as to retain that information so that users can work\r\nwith it.  HOCKEY rejoined that the current thinking on markup is that one\r\nshould not say that something is italic or bold so much as why it is that\r\nway.  To be sure, one needs to know that something was italicized, but\r\nhow can one get from one to the other?  One can map from the structure to\r\nthe typographic representation.\r\n\r\nFLEISCHHAUER suggested that, given the 100 million items the Library\r\nholds, it may not be possible for LC to do more than report that a thing\r\nwas in italics as opposed to why it was italics, although that may be\r\ndesirable in some contexts.  Promising to talk a bit during the afternoon\r\nsession about several experiments OCLC performed on automatic recognition\r\nof document elements, and which they hoped to extend, WEIBEL said that in\r\nfact one can recognize the major elements of a document with a fairly\r\nhigh degree of reliability, at least as good as OCR.  STEVENS drew a\r\nuseful distinction between standard, generalized markup (i.e., defining\r\nfor a document-type definition the structure of the document), and what\r\nhe termed a style sheet, which had to do with italics, bolding, and other\r\nforms of emphasis.  Thus, two different components are at work, one being\r\nthe structure of the document itself (its logic), and the other being its\r\nrepresentation when it is put on the screen or printed.\r\n\r\n                                 ******\r\n\r\nSESSION V.  APPROACHES TO PREPARING ELECTRONIC TEXTS\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nHOCKEY * Text in ASCII and the representation of electronic text versus\r\nan image * The need to look at ways of using markup to assist retrieval *\r\nThe need for an encoding format that will be reusable and multifunctional\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nSusan HOCKEY, director, Center for Electronic Texts in the Humanities\r\n(CETH), Rutgers and Princeton Universities, announced that one talk\r\n(WEIBEL's) was moved into this session from the morning and that David\r\nPackard was unable to attend.  The session would attempt to focus more on\r\nwhat one can do with a text in ASCII and the representation of electronic\r\ntext rather than just an image, what one can do with a computer that\r\ncannot be done with a book or an image.  It would be argued that one can\r\ndo much more than just read a text, and from that starting point one can\r\nuse markup and methods of preparing the text to take full advantage of\r\nthe capability of the computer.  That would lead to a discussion of what\r\nthe European Community calls REUSABILITY, what may better be termed\r\nDURABILITY, that is, how to prepare or make a text that will last a long\r\ntime and that can be used for as many applications as possible, which\r\nwould lead to issues of improving intellectual access.\r\n\r\nHOCKEY urged the need to look at ways of using markup to facilitate retrieval,\r\nnot just for referencing or to help locate an item that is retrieved, but also to put markup tags in\r\na text to help retrieve the thing sought either with linguistic tagging or\r\ninterpretation.  HOCKEY also argued that little advancement had occurred in\r\nthe software tools currently available for retrieving and searching text.\r\nShe pressed the desideratum of going beyond Boolean searches and performing\r\nmore sophisticated searching, which the insertion of more markup in the text\r\nwould facilitate.  Thinking about electronic texts as opposed to images means\r\nconsidering material that will never appear in print form, or print will not\r\nbe its primary form, that is, material which only appears in electronic form.\r\nHOCKEY alluded to the history and the need for markup and tagging and\r\nelectronic text, which was developed through the use of computers in the\r\nhumanities; as MICHELSON had observed, Father Busa had started in 1949\r\nto prepare the first-ever text on the computer.\r\n\r\nHOCKEY remarked several large projects, particularly in Europe, for the\r\ncompilation of dictionaries, language studies, and language analysis, in\r\nwhich people have built up archives of text and have begun to recognize\r\nthe need for an encoding format that will be reusable and multifunctional,\r\nthat can be used not just to print the text, which may be assumed to be a\r\nbyproduct of what one wants to do, but to structure it inside the computer\r\nso that it can be searched, built into a Hypertext system, etc.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nWEIBEL * OCLC's approach to preparing electronic text:  retroconversion,\r\nkeying of texts, more automated ways of developing data * Project ADAPT\r\nand the CORE Project * Intelligent character recognition does not exist *\r\nAdvantages of SGML * Data should be free of procedural markup;\r\ndescriptive markup strongly advocated * OCLC's interface illustrated *\r\nStorage requirements and costs for putting a lot of information on line *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nStuart WEIBEL, senior research scientist, Online Computer Library Center,\r\nInc. (OCLC), described OCLC's approach to preparing electronic text.  He\r\nargued that the electronic world into which we are moving must\r\naccommodate not only the future but the past as well, and to some degree\r\neven the present.  Thus, starting out at one end with retroconversion and\r\nkeying of texts, one would like to move toward much more automated ways\r\nof developing data.\r\n\r\nFor example, Project ADAPT had to do with automatically converting\r\ndocument images into a structured document database with OCR text as\r\nindexing and also a little bit of automatic formatting and tagging of\r\nthat text.  The CORE project hosted by Cornell University, Bellcore,\r\nOCLC, the American Chemical Society, and Chemical Abstracts, constitutes\r\nWEIBEL's principal concern at the moment.  This project is an example of\r\nconverting text for which one already has a machine-readable version into\r\na format more suitable for electronic delivery and database searching. \r\n(Since Michael LESK had previously described CORE, WEIBEL would say\r\nlittle concerning it.)  Borrowing a chemical phrase, de novo synthesis,\r\nWEIBEL cited the Online Journal of Current Clinical Trials as an example\r\nof de novo electronic publishing, that is, a form in which the primary\r\nform of the information is electronic.\r\n\r\nProject ADAPT, then, which OCLC completed a couple of years ago and in\r\nfact is about to resume, is a model in which one takes page images either\r\nin paper or microfilm and converts them automatically to a searchable\r\nelectronic database, either on-line or local.  The operating assumption\r\nis that accepting some blemishes in the data, especially for\r\nretroconversion of materials, will make it possible to accomplish more. \r\nNot enough money is available to support perfect conversion.\r\n\r\nWEIBEL related several steps taken to perform image preprocessing\r\n(processing on the image before performing optical character\r\nrecognition), as well as image postprocessing.  He denied the existence\r\nof intelligent character recognition and asserted that what is wanted is\r\npage recognition, which is a long way off.  OCLC has experimented with\r\nmerging of multiple optical character recognition systems that will\r\nreduce errors from an unacceptable rate of 5 characters out of every\r\nl,000 to an unacceptable rate of 2 characters out of every l,000, but it\r\nis not good enough.  It will never be perfect.\r\n\r\nConcerning the CORE Project, WEIBEL observed that Bellcore is taking the\r\ntopography files, extracting the page images, and converting those\r\ntopography files to SGML markup.  LESK hands that data off to OCLC, which\r\nbuilds that data into a Newton database, the same system that underlies\r\nthe on-line system in virtually all of the reference products at OCLC. \r\nThe long-term goal is to make the systems interoperable so that not just\r\nBellcore's system and OCLC's system can access this data, but other\r\nsystems can as well, and the key to that is the Z39.50 common command\r\nlanguage and the full-text extension.  Z39.50 is fine for MARC records,\r\nbut is not enough to do it for full text (that is, make full texts\r\ninteroperable).\r\n\r\nWEIBEL next outlined the critical role of SGML for a variety of purposes,\r\nfor example, as noted by HOCKEY, in the world of extremely large\r\ndatabases, using highly structured data to perform field searches. \r\nWEIBEL argued that by building the structure of the data in (i.e., the\r\nstructure of the data originally on a printed page), it becomes easy to\r\nlook at a journal article even if one cannot read the characters and know\r\nwhere the title or author is, or what the sections of that document would be.\r\nOCLC wants to make that structure explicit in the database, because it will\r\nbe important for retrieval purposes.\r\n\r\nThe second big advantage of SGML is that it gives one the ability to\r\nbuild structure into the database that can be used for display purposes\r\nwithout contaminating the data with instructions about how to format\r\nthings.  The distinction lies between procedural markup, which tells one\r\nwhere to put dots on the page, and descriptive markup, which describes\r\nthe elements of a document.\r\n\r\nWEIBEL believes that there should be no procedural markup in the data at\r\nall, that the data should be completely unsullied by information about\r\nitalics or boldness.  That should be left up to the display device,\r\nwhether that display device is a page printer or a screen display device. \r\nBy keeping one's database free of that kind of contamination, one can\r\nmake decisions down the road, for example, reorganize the data in ways\r\nthat are not cramped by built-in notions of what should be italic and\r\nwhat should be bold.  WEIBEL strongly advocated descriptive markup.  As\r\nan example, he illustrated the index structure in the CORE data.  With\r\nsubsequent illustrated examples of markup, WEIBEL acknowledged the common\r\ncomplaint that SGML is hard to read in its native form, although markup\r\ndecreases considerably once one gets into the body.  Without the markup,\r\nhowever, one would not have the structure in the data.  One can pass\r\nmarkup through a LaTeX processor and convert it relatively easily to a\r\nprinted version of the document.\r\n\r\nWEIBEL next illustrated an extremely cluttered screen dump of OCLC's\r\nsystem, in order to show as much as possible the inherent capability on\r\nthe screen.  (He noted parenthetically that he had become a supporter of\r\nX-Windows as a result of the progress of the CORE Project.)  WEIBEL also\r\nillustrated the two major parts of the interface:  l) a control box that\r\nallows one to generate lists of items, which resembles a small table of\r\ncontents based on key words one wishes to search, and 2) a document\r\nviewer, which is a separate process in and of itself.  He demonstrated\r\nhow to follow links through the electronic database simply by selecting\r\nthe appropriate button and bringing them up.  He also noted problems that\r\nremain to be accommodated in the interface (e.g., as pointed out by LESK,\r\nwhat happens when users do not click on the icon for the figure).\r\n\r\nGiven the constraints of time, WEIBEL omitted a large number of ancillary\r\nitems in order to say a few words concerning storage requirements and\r\nwhat will be required to put a lot of things on line.  Since it is\r\nextremely expensive to reconvert all of this data, especially if it is\r\njust in paper form (and even if it is in electronic form in typesetting\r\ntapes), he advocated building journals electronically from the start.  In\r\nthat case, if one only has text graphics and indexing (which is all that\r\none needs with de novo electronic publishing, because there is no need to\r\ngo back and look at bit-maps of pages), one can get 10,000 journals of\r\nfull text, or almost 6 million pages per year.  These pages can be put in\r\napproximately 135 gigabytes of storage, which is not all that much,\r\nWEIBEL said.  For twenty years, something less than three terabytes would\r\nbe required.  WEIBEL calculated the costs of storing this information as\r\nfollows:  If a gigabyte costs approximately $1,000, then a terabyte costs\r\napproximately $1 million to buy in terms of hardware.  One also needs a\r\nbuilding to put it in and a staff like OCLC to handle that information. \r\nSo, to support a terabyte, multiply by five, which gives $5 million per\r\nyear for a supported terabyte of data.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nDISCUSSION * Tapes saved by ACS are the typography files originally\r\nsupporting publication of the journal * Cost of building tagged text into\r\nthe database *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nDuring the question-and-answer period that followed WEIBEL's\r\npresentation, these clarifications emerged.  The tapes saved by the\r\nAmerican Chemical Society are the typography files that originally\r\nsupported the publication of the journal.  Although they are not tagged\r\nin SGML, they are tagged in very fine detail.  Every single sentence is\r\nmarked, all the registry numbers, all the publications issues, dates, and\r\nvolumes.  No cost figures on tagging material on a per-megabyte basis\r\nwere available.  Because ACS's typesetting system runs from tagged text,\r\nthere is no extra cost per article.  It was unknown what it costs ACS to\r\nkeyboard the tagged text rather than just keyboard the text in the\r\ncheapest process.  In other words, since one intends to publish things\r\nand will need to build tagged text into a typography system in any case,\r\nif one does that in such a way that it can drive not only typography but\r\nan electronic system (which is what ACS intends to do--move to SGML\r\npublishing), the marginal cost is zero.  The marginal cost represents the\r\ncost of building tagged text into the database, which is small.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nSPERBERG-McQUEEN * Distinction between texts and computers * Implications\r\nof recognizing that all representation is encoding * Dealing with\r\ncomplicated representations of text entails the need for a grammar of\r\ndocuments * Variety of forms of formal grammars * Text as a bit-mapped\r\nimage does not represent a serious attempt to represent text in\r\nelectronic form * SGML, the TEI, document-type declarations, and the\r\nreusability and longevity of data * TEI conformance explicitly allows\r\nextension or modification of the TEI tag set * Administrative background\r\nof the TEI * Several design goals for the TEI tag set * An absolutely\r\nfixed requirement of the TEI Guidelines * Challenges the TEI has\r\nattempted to face * Good texts not beyond economic feasibility * The\r\nissue of reproducibility or processability * The issue of mages as\r\nsimulacra for the text redux * One's model of text determines what one's\r\nsoftware can do with a text and has economic consequences *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nPrior to speaking about SGML and markup, Michael SPERBERG-McQUEEN, editor,\r\nText Encoding Initiative (TEI), University of Illinois-Chicago, first drew\r\na distinction between texts and computers:  Texts are abstract cultural\r\nand linguistic objects while computers are complicated physical devices,\r\nhe said.  Abstract objects cannot be placed inside physical devices; with\r\ncomputers one can only represent text and act upon those representations.\r\n\r\nThe recognition that all representation is encoding, SPERBERG-McQUEEN\r\nargued, leads to the recognition of two things:  1) The topic description\r\nfor this session is slightly misleading, because there can be no discussion\r\nof pros and cons of text-coding unless what one means is pros and cons of\r\nworking with text with computers.  2) No text can be represented in a\r\ncomputer without some sort of encoding; images are one way of encoding text,\r\nASCII is another, SGML yet another.  There is no encoding without some\r\ninformation loss, that is, there is no perfect reproduction of a text that\r\nallows one to do away with the original.  Thus, the question becomes,\r\nWhat is the most useful representation of text for a serious work?\r\nThis depends on what kind of serious work one is talking about.\r\n\r\nThe projects demonstrated the previous day all involved highly complex\r\ninformation and fairly complex manipulation of the textual material.\r\nIn order to use that complicated information, one has to calculate it\r\nslowly or manually and store the result.  It needs to be stored, therefore,\r\nas part of one's representation of the text.  Thus, one needs to store the\r\nstructure in the text.  To deal with complicated representations of text,\r\none needs somehow to control the complexity of the representation of a text;\r\nthat means one needs a way of finding out whether a document and an\r\nelectronic representation of a document is legal or not; and that\r\nmeans one needs a grammar of documents.\r\n\r\nSPERBERG-McQUEEN discussed the variety of forms of formal grammars,\r\nimplicit and explicit, as applied to text, and their capabilities.  He\r\nargued that these grammars correspond to different models of text that\r\ndifferent developers have.  For example, one implicit model of the text\r\nis that there is no internal structure, but just one thing after another,\r\na few characters and then perhaps a start-title command, and then a few\r\nmore characters and an end-title command.  SPERBERG-McQUEEN also\r\ndistinguished several kinds of text that have a sort of hierarchical\r\nstructure that is not very well defined, which, typically, corresponds\r\nto grammars that are not very well defined, as well as hierarchies that\r\nare very well defined (e.g., the Thesaurus Linguae Graecae) and extremely\r\ncomplicated things such as SGML, which handle strictly hierarchical data\r\nvery nicely.\r\n\r\nSPERBERG-McQUEEN conceded that one other model not illustrated on his two\r\ndisplays was the model of text as a bit-mapped image, an image of a page,\r\nand confessed to having been converted to a limited extent by the\r\nWorkshop to the view that electronic images constitute a promising,\r\nprobably superior alternative to microfilming.  But he was not convinced\r\nthat electronic images represent a serious attempt to represent text in\r\nelectronic form.  Many of their problems stem from the fact that they are\r\nnot direct attempts to represent the text but attempts to represent the\r\npage, thus making them representations of representations.\r\n\r\nIn this situation of increasingly complicated textual information and the\r\nneed to control that complexity in a useful way (which begs the question\r\nof the need for good textual grammars), one has the introduction of SGML. \r\nWith SGML, one can develop specific document-type declarations\r\nfor specific text types or, as with the TEI, attempts to generate\r\ngeneral document-type declarations that can handle all sorts of text.\r\nThe TEI is an attempt to develop formats for text representation that\r\nwill ensure the kind of reusability and longevity of data discussed earlier.\r\nIt offers a way to stay alive in the state of permanent technological\r\nrevolution.\r\n\r\nIt has been a continuing challenge in the TEI to create document grammars\r\nthat do some work in controlling the complexity of the textual object but\r\nalso allowing one to represent the real text that one will find. \r\nFundamental to the notion of the TEI is that TEI conformance allows one\r\nthe ability to extend or modify the TEI tag set so that it fits the text\r\nthat one is attempting to represent.\r\n\r\nSPERBERG-McQUEEN next outlined the administrative background of the TEI. \r\nThe TEI is an international project to develop and disseminate guidelines\r\nfor the encoding and interchange of machine-readable text.  It is\r\nsponsored by the Association for Computers in the Humanities, the\r\nAssociation for Computational Linguistics, and the Association for\r\nLiterary and Linguistic Computing.  Representatives of numerous other\r\nprofessional societies sit on its advisory board.  The TEI has a number\r\nof affiliated projects that have provided assistance by testing drafts of\r\nthe guidelines.\r\n\r\nAmong the design goals for the TEI tag set, the scheme first of all must\r\nmeet the needs of research, because the TEI came out of the research\r\ncommunity, which did not feel adequately served by existing tag sets. \r\nThe tag set must be extensive as well as compatible with existing and\r\nemerging standards.  In 1990, version 1.0 of the Guidelines was released\r\n(SPERBERG-McQUEEN illustrated their contents).\r\n\r\nSPERBERG-McQUEEN noted that one problem besetting electronic text has\r\nbeen the lack of adequate internal or external documentation for many\r\nexisting electronic texts.  The TEI guidelines as currently formulated\r\ncontain few fixed requirements, but one of them is this:  There must\r\nalways be a document header, an in-file SGML tag that provides\r\n1) a bibliographic description of the electronic object one is talking\r\nabout (that is, who included it, when, what for, and under which title);\r\nand 2) the copy text from which it was derived, if any.  If there was\r\nno copy text or if the copy text is unknown, then one states as much.\r\nVersion 2.0 of the Guidelines was scheduled to be completed in fall 1992\r\nand a revised third version is to be presented to the TEI advisory board\r\nfor its endorsement this coming winter.  The TEI itself exists to provide\r\na markup language, not a marked-up text.\r\n\r\nAmong the challenges the TEI has attempted to face is the need for a\r\nmarkup language that will work for existing projects, that is, handle the\r\nlevel of markup that people are using now to tag only chapter, section,\r\nand paragraph divisions and not much else.  At the same time, such a\r\nlanguage also will be able to scale up gracefully to handle the highly\r\ndetailed markup which many people foresee as the future destination of\r\nmuch electronic text, and which is not the future destination but the\r\npresent home of numerous electronic texts in specialized areas.\r\n\r\nSPERBERG-McQUEEN dismissed the lowest-common-denominator approach as\r\nunable to support the kind of applications that draw people who have\r\nnever been in the public library regularly before, and make them come\r\nback.  He advocated more interesting text and more intelligent text. \r\nAsserting that it is not beyond economic feasibility to have good texts,\r\nSPERBERG-McQUEEN noted that the TEI Guidelines listing 200-odd tags\r\ncontains tags that one is expected to enter every time the relevant\r\ntextual feature occurs.  It contains all the tags that people need now,\r\nand it is not expected that everyone will tag things in the same way.\r\n\r\nThe question of how people will tag the text is in large part a function\r\nof their reaction to what SPERBERG-McQUEEN termed the issue of\r\nreproducibility.  What one needs to be able to reproduce are the things\r\none wants to work with.  Perhaps a more useful concept than that of\r\nreproducibility or recoverability is that of processability, that is,\r\nwhat can one get from an electronic text without reading it again\r\nin the original.  He illustrated this contention with a page from\r\nJan Comenius's bilingual Introduction to Latin.\r\n\r\nSPERBERG-McQUEEN returned at length to the issue of images as simulacra\r\nfor the text, in order to reiterate his belief that in the long run more\r\nthan images of pages of particular editions of the text are needed,\r\nbecause just as second-generation photocopies and second-generation\r\nmicrofilm degenerate, so second-generation representations tend to\r\ndegenerate, and one tends to overstress some relatively trivial aspects\r\nof the text such as its layout on the page, which is not always\r\nsignificant, despite what the text critics might say, and slight other\r\npieces of information such as the very important lexical ties between the\r\nEnglish and Latin versions of Comenius's bilingual text, for example. \r\nMoreover, in many crucial respects it is easy to fool oneself concerning\r\nwhat a scanned image of the text will accomplish.  For example, in order\r\nto study the transmission of texts, information concerning the text\r\ncarrier is necessary, which scanned images simply do not always handle. \r\nFurther, even the high-quality materials being produced at Cornell use\r\nmuch of the information that one would need if studying those books as\r\nphysical objects.  It is a choice that has been made.  It is an arguably\r\njustifiable choice, but one does not know what color those pen strokes in\r\nthe margin are or whether there was a stain on the page, because it has\r\nbeen filtered out.  One does not know whether there were rips in the page\r\nbecause they do not show up, and on a couple of the marginal marks one\r\nloses half of the mark because the pen is very light and the scanner\r\nfailed to pick it up, and so what is clearly a checkmark in the margin of\r\nthe original becomes a little scoop in the margin of the facsimile. \r\nStandard problems for facsimile editions, not new to electronics, but\r\nalso true of light-lens photography, and are remarked here because it is\r\nimportant that we not fool ourselves that even if we produce a very nice\r\nimage of this page with good contrast, we are not replacing the\r\nmanuscript any more than microfilm has replaced the manuscript.\r\n\r\nThe TEI comes from the research community, where its first allegiance\r\nlies, but it is not just an academic exercise.  It has relevance far\r\nbeyond those who spend all of their time studying text, because one's\r\nmodel of text determines what one's software can do with a text.  Good\r\nmodels lead to good software.  Bad models lead to bad software.  That has\r\neconomic consequences, and it is these economic consequences that have\r\nled the European Community to help support the TEI, and that will lead,\r\nSPERBERG-McQUEEN hoped, some software vendors to realize that if they\r\nprovide software with a better model of the text they can make a killing.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nDISCUSSION * Implications of different DTDs and tag sets * ODA versus SGML *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nDuring the discussion that followed, several additional points were made. \r\nNeither AAP (i.e., Association of American Publishers) nor CALS (i.e.,\r\nComputer-aided Acquisition and Logistics Support) has a document-type\r\ndefinition for ancient Greek drama, although the TEI will be able to\r\nhandle that.  Given this state of affairs and assuming that the\r\ntechnical-journal producers and the commercial vendors decide to use the\r\nother two types, then an institution like the Library of Congress, which\r\nmight receive all of their publications, would have to be able to handle\r\nthree different types of document definitions and tag sets and be able to\r\ndistinguish among them.\r\n\r\nOffice Document Architecture (ODA) has some advantages that flow from its\r\ntight focus on office documents and clear directions for implementation. \r\nMuch of the ODA standard is easier to read and clearer at first reading\r\nthan the SGML standard, which is extremely general.  What that means is\r\nthat if one wants to use graphics in TIFF and ODA, one is stuck, because\r\nODA defines graphics formats while TIFF does not, whereas SGML says the\r\nworld is not waiting for this work group to create another graphics format.\r\nWhat is needed is an ability to use whatever graphics format one wants.\r\n\r\nThe TEI provides a socket that allows one to connect the SGML document to\r\nthe graphics.  The notation that the graphics are in is clearly a choice\r\nthat one needs to make based on her or his environment, and that is one\r\nadvantage.  SGML is less megalomaniacal in attempting to define formats\r\nfor all kinds of information, though more megalomaniacal in attempting to\r\ncover all sorts of documents.  The other advantage is that the model of\r\ntext represented by SGML is simply an order of magnitude richer and more\r\nflexible than the model of text offered by ODA.  Both offer hierarchical\r\nstructures, but SGML recognizes that the hierarchical model of the text\r\nthat one is looking at may not have been in the minds of the designers,\r\nwhereas ODA does not.\r\n\r\nODA is not really aiming for the kind of document that the TEI wants to\r\nencompass.  The TEI can handle the kind of material ODA has, as well as a\r\nsignificantly broader range of material.  ODA seems to be very much\r\nfocused on office documents, which is what it started out being called--\r\noffice document architecture.\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nCALALUCA * Text-encoding from a publisher's perspective *\r\nResponsibilities of a publisher * Reproduction of Migne's Latin series\r\nwhole and complete with SGML tags based on perceived need and expected\r\nuse * Particular decisions arising from the general decision to produce\r\nand publish PLD *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nThe final speaker in this session, Eric CALALUCA, vice president,\r\nChadwyck-Healey, Inc., spoke from the perspective of a publisher re\r\ntext-encoding, rather than as one qualified to discuss methods of\r\nencoding data, and observed that the presenters sitting in the room,\r\nwhether they had chosen to or not, were acting as publishers:  making\r\nchoices, gathering data, gathering information, and making assessments. \r\nCALALUCA offered the hard-won conviction that in publishing very large\r\ntext files (such as PLD), one cannot avoid making personal judgments of\r\nappropriateness and structure.\r\n\r\nIn CALALUCA's view, encoding decisions stem from prior judgments.  Two\r\nnotions have become axioms for him in the consideration of future sources\r\nfor electronic publication:  1) electronic text publishing is as personal\r\nas any other kind of publishing, and questions of if and how to encode\r\nthe data are simply a consequence of that prior decision;  2) all\r\npersonal decisions are open to criticism, which is unavoidable.\r\n\r\nCALALUCA rehearsed his role as a publisher or, better, as an intermediary\r\nbetween what is viewed as a sound idea and the people who would make use\r\nof it.  Finding the specialist to advise in this process is the core of\r\nthat function.  The publisher must monitor and hug the fine line between\r\ngiving users what they want and suggesting what they might need.  One\r\nresponsibility of a publisher is to represent the desires of scholars and\r\nresearch librarians as opposed to bullheadedly forcing them into areas\r\nthey would not choose to enter.\r\n\r\nCALALUCA likened the questions being raised today about data structure\r\nand standards to the decisions faced by the Abbe Migne himself during\r\nproduction of the Patrologia series in the mid-nineteenth century. \r\nChadwyck-Healey's decision to reproduce Migne's Latin series whole and\r\ncomplete with SGML tags was also based upon a perceived need and an\r\nexpected use.  In the same way that Migne's work came to be far more than\r\na simple handbook for clerics, PLD is already far more than a database\r\nfor theologians.  It is a bedrock source for the study of Western\r\ncivilization, CALALUCA asserted.\r\n\r\nIn regard to the decision to produce and publish PLD, the editorial board\r\noffered direct judgments on the question of appropriateness of these\r\ntexts for conversion, their encoding and their distribution, and\r\nconcluded that the best possible project was one that avoided overt\r\nintrusions or exclusions in so important a resource.  Thus, the general\r\ndecision to transmit the original collection as clearly as possible with\r\nthe widest possible avenues for use led to other decisions:  1) To encode\r\nthe data or not, SGML or not, TEI or not.  Again, the expected user\r\ncommunity asserted the need for normative tagging structures of important\r\nhumanities texts, and the TEI seemed the most appropriate structure for\r\nthat purpose.  Research librarians, who are trained to view the larger\r\nimpact of electronic text sources on 80 or 90 or 100 doctoral\r\ndisciplines, loudly approved the decision to include tagging.  They see\r\nwhat is coming better than the specialist who is completely focused on\r\none edition of Ambrose's De Anima, and they also understand that the\r\npotential uses exceed present expectations.  2) What will be tagged and\r\nwhat will not.  Once again, the board realized that one must tag the\r\nobvious.  But in no way should one attempt to identify through encoding\r\nschemes every single discrete area of a text that might someday be\r\nsearched.  That was another decision.  Searching by a column number, an\r\nauthor, a word, a volume, permitting combination searches, and tagging\r\nnotations seemed logical choices as core elements.  3) How does one make\r\nthe data available?  Tieing it to a CD-ROM edition creates limitations,\r\nbut a magnetic tape file that is very large, is accompanied by the\r\nencoding specifications, and that allows one to make local modifications\r\nalso allows one to incorporate any changes one may desire within the\r\nbounds of private research, though exporting tag files from a CD-ROM\r\ncould serve just as well.  Since no one on the board could possibly\r\nanticipate each and every way in which a scholar might choose to mine\r\nthis data bank, it was decided to satisfy the basics and make some\r\nprovisions for what might come.  4) Not to encode the database would rob\r\nit of the interchangeability and portability these important texts should\r\naccommodate.  For CALALUCA, the extensive options presented by full-text\r\nsearching require care in text selection and strongly support encoding of\r\ndata to facilitate the widest possible search strategies.  Better\r\nsoftware can always be created, but summoning the resources, the people,\r\nand the energy to reconvert the text is another matter.\r\n\r\nPLD is being encoded, captured, and distributed, because to\r\nChadwyck-Healey and the board it offers the widest possible array of\r\nfuture research applications that can be seen today.  CALALUCA concluded\r\nby urging the encoding of all important text sources in whatever way\r\nseems most appropriate and durable at the time, without blanching at the\r\nthought that one's work may require emendation in the future.  (Thus,\r\nChadwyck-Healey produced a very large humanities text database before the\r\nfinal release of the TEI Guidelines.)\r\n\r\n                                 ******\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nDISCUSSION * Creating texts with markup advocated * Trends in encoding *\r\nThe TEI and the issue of interchangeability of standards * A\r\nmisconception concerning the TEI * Implications for an institution like\r\nLC in the event that a multiplicity of DTDs develops * Producing images\r\nas a first step towards possible conversion to full text through\r\ncharacter recognition * The AAP tag sets as a common starting point and\r\nthe need for caution *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nHOCKEY prefaced the discussion that followed with several comments in\r\nfavor of creating texts with markup and on trends in encoding.  In the\r\nfuture, when many more texts are available for on-line searching, real\r\nproblems in finding what is wanted will develop, if one is faced with\r\nmillions of words of data.  It therefore becomes important to consider\r\nputting markup in texts to help searchers home in on the actual things\r\nthey wish to retrieve.  Various approaches to refining retrieval methods\r\ntoward this end include building on a computer version of a dictionary\r\nand letting the computer look up words in it to obtain more information\r\nabout the semantic structure or semantic field of a word, its grammatical\r\nstructure, and syntactic structure.\r\n\r\nHOCKEY commented on the present keen interest in the encoding world\r\nin creating:  1) machine-readable versions of dictionaries that can be\r\ninitially tagged in SGML, which gives a structure to the dictionary entry;\r\nthese entries can then be converted into a more rigid or otherwise\r\ndifferent database structure inside the computer, which can be treated as\r\na dynamic tool for searching mechanisms; 2) large bodies of text to study\r\nthe language.  In order to incorporate more sophisticated mechanisms,\r\nmore about how words behave needs to be known, which can be learned in\r\npart from information in dictionaries.  However, the last ten years have\r\nseen much interest in studying the structure of printed dictionaries\r\nconverted into computer-readable form.  The information one derives about\r\nmany words from those is only partial, one or two definitions of the\r\ncommon or the usual meaning of a word, and then numerous definitions of\r\nunusual usages.  If the computer is using a dictionary to help retrieve\r\nwords in a text, it needs much more information about the common usages,\r\nbecause those are the ones that occur over and over again.  Hence the\r\ncurrent interest in developing large bodies of text in computer-readable\r\nform in order to study the language.  Several projects are engaged in\r\ncompiling, for example, 100 million words. HOCKEY described one with\r\nwhich she was associated briefly at Oxford University involving\r\ncompilation of 100 million words of British English:  about 10 percent of\r\nthat will contain detailed linguistic tagging encoded in SGML; it will\r\nhave word class taggings, with words identified as nouns, verbs,\r\nadjectives, or other parts of speech.  This tagging can then be used by\r\nprograms which will begin to learn a bit more about the structure of the\r\nlanguage, and then, can go to tag more text.\r\n\r\nHOCKEY said that the more that is tagged accurately, the more one can\r\nrefine the tagging process and thus the bigger body of text one can build\r\nup with linguistic tagging incorporated into it.  Hence, the more tagging\r\nor annotation there is in the text, the more one may begin to learn about\r\nlanguage and the more it will help accomplish more intelligent OCR.  She\r\nrecommended the development of software tools that will help one begin to\r\nunderstand more about a text, which can then be applied to scanning\r\nimages of that text in that format and to using more intelligence to help\r\none interpret or understand the text.\r\n\r\nHOCKEY posited the need to think about common methods of text-encoding\r\nfor a long time to come, because building these large bodies of text is\r\nextremely expensive and will only be done once.\r\n\r\nIn the more general discussion on approaches to encoding that followed,\r\nthese points were made:\r\n\r\nBESSER identified the underlying problem with standards that all have to\r\nstruggle with in adopting a standard, namely, the tension between a very\r\nhighly defined standard that is very interchangeable but does not work\r\nfor everyone because something is lacking, and a standard that is less\r\ndefined, more open, more adaptable, but less interchangeable.  Contending\r\nthat the way in which people use SGML is not sufficiently defined, BESSER\r\nwondered 1) if people resist the TEI because they think it is too defined\r\nin certain things they do not fit into, and 2) how progress with\r\ninterchangeability can be made without frightening people away.\r\n\r\nSPERBERG-McQUEEN replied that the published drafts of the TEI had met\r\nwith surprisingly little objection on the grounds that they do not allow\r\none to handle X or Y or Z.  Particular concerns of the affiliated\r\nprojects have led, in practice, to discussions of how extensions are to\r\nbe made; the primary concern of any project has to be how it can be\r\nrepresented locally, thus making interchange secondary.  The TEI has\r\nreceived much criticism based on the notion that everything in it is\r\nrequired or even recommended, which, as it happens, is a misconception\r\nfrom the beginning,   because none of it is required and very little is\r\nactually actively recommended for all cases, except that one document\r\none's source.\r\n\r\nSPERBERG-McQUEEN agreed with BESSER about this trade-off:  all the\r\nprojects in a set of twenty TEI-conformant projects will not necessarily\r\ntag the material in the same way.  One result of the TEI will be that the\r\neasiest problems will be solved--those dealing with the external form of\r\nthe information; but the problem that is hardest in interchange is that\r\none is not encoding what another wants, and vice versa.  Thus, after\r\nthe adoption of a common notation, the differences in the underlying\r\nconceptions of what is interesting about texts become more visible.\r\nThe success of a standard like the TEI will lie in the ability of\r\nthe recipient of interchanged texts to use some of what it contains\r\nand to add the information that was not encoded that one wants, in a\r\nlayered way, so that texts can be gradually enriched and one does not\r\nhave to put in everything all at once.  Hence, having a well-behaved\r\nmarkup scheme is important.\r\n\r\nSTEVENS followed up on the paradoxical analogy that BESSER alluded to in\r\nthe example of the MARC records, namely, the formats that are the same\r\nexcept that they are different.  STEVENS drew a parallel between\r\ndocument-type definitions and MARC records for books and serials and maps,\r\nwhere one has a tagging structure and there is a text-interchange. \r\nSTEVENS opined that the producers of the information will set the terms\r\nfor the standard (i.e., develop document-type definitions for the users\r\nof their products), creating a situation that will be problematical for\r\nan institution like the Library of Congress, which will have to deal with\r\nthe DTDs in the event that a multiplicity of them develops.  Thus,\r\nnumerous people are seeking a standard but cannot find the tag set that\r\nwill be acceptable to them and their clients.  SPERBERG-McQUEEN agreed\r\nwith this view, and said that the situation was in a way worse:  attempting\r\nto unify arbitrary DTDs resembled attempting to unify a MARC record with a\r\nbibliographic record done according to the Prussian instructions. \r\nAccording to STEVENS, this situation occurred very early in the process.\r\n\r\nWATERS recalled from early discussions on Project Open Book the concern\r\nof many people that merely by producing images, POB was not really\r\nenhancing intellectual access to the material.  Nevertheless, not wishing\r\nto overemphasize the opposition between imaging and full text, WATERS\r\nstated that POB views getting the images as a first step toward possibly\r\nconverting to full text through character recognition, if the technology\r\nis appropriate.  WATERS also emphasized that encoding is involved even\r\nwith a set of images.\r\n\r\nSPERBERG-McQUEEN agreed with WATERS that one can create an SGML document\r\nconsisting wholly of images.  At first sight, organizing graphic images\r\nwith an SGML document may not seem to offer great advantages, but the\r\nadvantages of the scheme WATERS described would be precisely that\r\nability to move into something that is more of a multimedia document:\r\na combination of transcribed text and page images.  WEIBEL concurred in\r\nthis judgment, offering evidence from Project ADAPT, where a page is\r\ndivided into text elements and graphic elements, and in fact the text\r\nelements are organized by columns and lines.  These lines may be used as\r\nthe basis for distributing documents in a network environment.  As one\r\ndevelops software intelligent enough to recognize what those elements\r\nare, it makes sense to apply SGML to an image initially, that may, in\r\nfact, ultimately become more and more text, either through OCR or edited\r\nOCR or even just through keying.  For WATERS, the labor of composing the\r\ndocument and saying this set of documents or this set of images belongs\r\nto this document constitutes a significant investment.\r\n\r\nWEIBEL also made the point that the AAP tag sets, while not excessively\r\nprescriptive, offer a common starting point; they do not define the\r\nstructure of the documents, though.  They have some recommendations about\r\nDTDs one could use as examples, but they do just suggest tag sets.   For\r\nexample, the CORE project attempts to use the AAP markup as much as\r\npossible, but there are clearly areas where structure must be added. \r\nThat in no way contradicts the use of AAP tag sets.\r\n\r\nSPERBERG-McQUEEN noted that the TEI prepared a long working paper early\r\non about the AAP tag set and what it lacked that the TEI thought it\r\nneeded, and a fairly long critique of the naming conventions, which has\r\nled to a very different style of naming in the TEI.  He stressed the\r\nimportance of the opposition between prescriptive markup, the kind that a\r\npublisher or anybody can do when producing documents de novo, and\r\ndescriptive markup, in which one has to take what the text carrier\r\nprovides.  In these particular tag sets it is easy to overemphasize this\r\nopposition, because the AAP tag set is extremely flexible.  Even if one\r\njust used the DTDs, they allow almost anything to appear almost anywhere.\r\n\r\n                                 ******\r\n\r\nSESSION VI.  COPYRIGHT ISSUES\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nPETERS * Several cautions concerning copyright in an electronic\r\nenvironment * Review of copyright law in the United States * The notion\r\nof the public good and the desirability of incentives to promote it *\r\nWhat copyright protects * Works not protected by copyright * The rights\r\nof copyright holders * Publishers' concerns in today's electronic\r\nenvironment * Compulsory licenses * The price of copyright in a digital\r\nmedium and the need for cooperation * Additional clarifications *  Rough\r\njustice oftentimes the outcome in numerous copyright matters * Copyright\r\nin an electronic society * Copyright law always only sets up the\r\nboundaries; anything can be changed by contract *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nMarybeth PETERS, policy planning adviser to the Register of Copyrights,\r\nLibrary of Congress,   made several general comments and then opened the\r\nfloor to discussion of subjects of interest to the audience.\r\n\r\nHaving attended several sessions in an effort to gain a sense of what\r\npeople did and where copyright would affect their lives, PETERS expressed\r\nthe following cautions:\r\n\r\n     * If one takes and converts materials and puts them in new forms,\r\n     then, from a copyright point of view, one is creating something and\r\n     will receive some rights.\r\n\r\n     * However, if what one is converting already exists, a question\r\n     immediately arises about the status of the materials in question.\r\n\r\n     * Putting something in the public domain in the United States offers\r\n     some freedom from anxiety, but distributing it throughout the world\r\n     on a network is another matter, even if one has put it in the public\r\n     domain in the United States.  Re foreign laws, very frequently a\r\n     work can be in the public domain in the United States but protected\r\n     in other countries.  Thus, one must consider all of the places a\r\n     work may reach, lest one unwittingly become liable to being faced\r\n     with a suit for copyright infringement, or at least a letter\r\n     demanding discussion of what one is doing.\r\n\r\nPETERS reviewed copyright law in the United States.  The U.S.\r\nConstitution effectively states that Congress has the power to enact\r\ncopyright laws for two purposes:  1) to encourage the creation and\r\ndissemination of intellectual works for the good of society as a whole;\r\nand, significantly, 2) to give creators and those who package and\r\ndisseminate materials the economic rewards that are due them.\r\n\r\nCongress strives to strike a balance, which at times can become an\r\nemotional issue.  The United States has never accepted the notion of the\r\nnatural right of an author so much as it has accepted the notion of the\r\npublic good and the desirability of incentives to promote it.  This state\r\nof affairs, however, has created strains on the international level and\r\nis the reason for several of the differences in the laws that we have. \r\nToday the United States protects almost every kind of work that can be\r\ncalled an expression of an author.  The standard for gaining copyright\r\nprotection is simply originality.  This is a low standard and means that\r\na work is not copied from something else, as well as shows a certain\r\nminimal amount of authorship.  One can also acquire copyright protection\r\nfor making a new version of preexisting material, provided it manifests\r\nsome spark of creativity.\r\n\r\nHowever, copyright does not protect ideas, methods, systems--only the way\r\nthat one expresses those things.  Nor does copyright protect anything\r\nthat is mechanical, anything that does not involve choice, or criteria\r\nconcerning whether or not one should do a thing.  For example, the\r\nresults of a process called declicking, in which one mechanically removes\r\nimpure sounds from old recordings, are not copyrightable.  On the other\r\nhand, the choice to record a song digitally and to increase the sound of\r\nviolins or to bring up the tympani constitutes the results of conversion\r\nthat are copyrightable.  Moreover, if a work is protected by copyright in\r\nthe United States, one generally needs the permission of the copyright\r\nowner to convert it.  Normally, who will own the new--that is, converted-\r\n-material is a matter of contract.  In the absence of a contract, the\r\nperson who creates the new material is the author and owner.  But people\r\ndo not generally think about the copyright implications until after the\r\nfact.  PETERS stressed the need when dealing with copyrighted works to\r\nthink about copyright in advance.  One's bargaining power is much greater\r\nup front than it is down the road.\r\n\r\nPETERS next discussed works not protected by copyright, for example, any\r\nwork done by a federal employee as part of his or her official duties is\r\nin the public domain in the United States.  The issue is not wholly free\r\nof doubt concerning whether or not the work is in the public domain\r\noutside the United States.  Other materials in the public domain include: \r\nany works published more than seventy-five years ago, and any work\r\npublished in the United States more than twenty-eight years ago, whose\r\ncopyright was not renewed.  In talking about the new technology and\r\nputting material in a digital form to send all over the world, PETERS\r\ncautioned, one must keep in mind that while the rights may not be an\r\nissue in the United States, they may be in different parts of the world,\r\nwhere most countries previously employed a copyright term of the life of\r\nthe author plus fifty years.\r\n\r\nPETERS next reviewed the economics of copyright holding.  Simply,\r\neconomic rights are the rights to control the reproduction of a work in\r\nany form.  They belong to the author, or in the case of a work made for\r\nhire, the employer.  The second right, which is critical to conversion,\r\nis the right to change a work.  The right to make new versions is perhaps\r\none of the most significant rights of authors, particularly in an\r\nelectronic world.  The third right is the right to publish the work and\r\nthe right to disseminate it, something that everyone who deals in an\r\nelectronic medium needs to know.  The basic rule is if a copy is sold,\r\nall rights of distribution are extinguished with the sale of that copy. \r\nThe key is that it must be sold.  A number of companies overcome this\r\nobstacle by leasing or renting their product.  These companies argue that\r\nif the material is rented or leased and not sold, they control the uses\r\nof a work.  The fourth right, and one very important in a digital world,\r\nis a right of public performance, which means the right to show the work\r\nsequentially.  For example, copyright owners control the showing of a\r\nCD-ROM product in a public place such as a public library.  The reverse\r\nside of public performance is something called the right of public\r\ndisplay.  Moral rights also exist, which at the federal level apply only\r\nto very limited visual works of art, but in theory may apply under\r\ncontract and other principles.  Moral rights may include the right of an\r\nauthor to have his or her name on a work, the right of attribution, and\r\nthe right to object to distortion or mutilation--the right of integrity.\r\n\r\nThe way copyright law is worded gives much latitude to activities such as\r\npreservation; to use of material for scholarly and research purposes when\r\nthe user does not make multiple copies; and to the generation of\r\nfacsimile copies of unpublished works by libraries for themselves and\r\nother libraries.  But the law does not allow anyone to become the\r\ndistributor of the product for the entire world.  In today's electronic\r\nenvironment, publishers are extremely concerned that the entire world is\r\nnetworked and can obtain the information desired from a single copy in a\r\nsingle library.  Hence, if there is to be only one sale, which publishers\r\nmay choose to live with, they will obtain their money in other ways, for\r\nexample, from access and use.  Hence, the development of site licenses\r\nand other kinds of agreements to cover what publishers believe they\r\nshould be compensated for.  Any solution that the United States takes\r\ntoday has to consider the international arena.\r\n\r\nNoting that the United States is a member of the Berne Convention and\r\nsubscribes to its provisions, PETERS described the permissions process. \r\nShe also defined compulsory licenses.  A compulsory license, of which the\r\nUnited States has had a few, builds into the law the right to use a work\r\nsubject to certain terms and conditions.  In the international arena,\r\nhowever, the ability to use compulsory licenses is extremely limited. \r\nThus, clearinghouses and other collectives comprise one option that has\r\nsucceeded in providing for use of a work.  Often overlooked when one\r\nbegins to use copyrighted material and put products together is how\r\nexpensive the permissions process and managing it is.  According to\r\nPETERS, the price of copyright in a digital medium, whatever solution is\r\nworked out, will include managing and assembling the database.  She\r\nstrongly recommended that publishers and librarians or people with\r\nvarious backgrounds cooperate to work out administratively feasible\r\nsystems, in order to produce better results.\r\n\r\nIn the lengthy question-and-answer period that followed PETERS's\r\npresentation, the following points emerged:\r\n\r\n     * The Copyright Office maintains that anything mechanical and\r\n     totally exhaustive probably is not protected.  In the event that\r\n     what an individual did in developing potentially copyrightable\r\n     material is not understood, the Copyright Office will ask about the\r\n     creative choices the applicant chose to make or not to make.  As a\r\n     practical matter, if one believes she or he has made enough of those\r\n     choices, that person has a right to assert a copyright and someone\r\n     else must assert that the work is not copyrightable.  The more\r\n     mechanical, the more automatic, a thing is, the less likely it is to\r\n     be copyrightable.\r\n\r\n     * Nearly all photographs are deemed to be copyrightable, but no one\r\n     worries about them much, because everyone is free to take the same\r\n     image.  Thus, a photographic copyright represents what is called a\r\n     \"thin\" copyright.  The photograph itself must be duplicated, in\r\n     order for copyright to be violated.\r\n\r\n     * The Copyright Office takes the position that X-rays are not\r\n     copyrightable because they are mechanical.  It  can be argued\r\n     whether or not image enhancement in scanning can be protected.  One\r\n     must exercise care with material created with public funds and\r\n     generally in the public domain.  An article written by a federal\r\n     employee, if written as part of official duties, is not\r\n     copyrightable.  However, control over a scientific article written\r\n     by a National Institutes of Health grantee (i.e., someone who\r\n     receives money from the U.S. government), depends on NIH policy.  If\r\n     the government agency has no policy (and that policy can be\r\n     contained in its regulations, the contract, or the grant), the\r\n     author retains copyright.  If a provision of the contract, grant, or\r\n     regulation states that there will be no copyright, then it does not\r\n     exist.  When a work is created, copyright automatically comes into\r\n     existence unless something exists that says it does not.\r\n\r\n     * An enhanced electronic copy of a print copy of an older reference\r\n     work in the public domain that does not contain copyrightable new\r\n     material is a purely mechanical rendition of the original work, and\r\n     is not copyrightable.\r\n\r\n     * Usually, when a work enters the public domain, nothing can remove\r\n     it.  For example, Congress recently passed into law the concept of\r\n     automatic renewal, which means that copyright on any work published\r\n     between l964 and l978 does not have to be renewed in order to\r\n     receive a seventy-five-year term.  But any work not renewed before\r\n     1964 is in the public domain.\r\n\r\n     * Concerning whether or not the United States keeps track of when\r\n     authors die, nothing was ever done, nor is anything being done at\r\n     the moment by the Copyright Office.\r\n\r\n     * Software that drives a mechanical process is itself copyrightable. \r\n     If one changes platforms, the software itself has a copyright.  The\r\n     World Intellectual Property Organization will hold a symposium 28\r\n     March through 2 April l993, at Harvard University, on digital\r\n     technology, and will study this entire issue.  If one purchases a\r\n     computer software package, such as MacPaint, and creates something\r\n     new, one receives protection only for that which has been added.\r\n\r\nPETERS added that often in copyright matters, rough justice is the\r\noutcome, for example, in collective licensing, ASCAP (i.e., American\r\nSociety of Composers, Authors, and Publishers), and BMI (i.e., Broadcast\r\nMusic, Inc.), where it may seem that the big guys receive more than their\r\ndue.  Of course, people ought not to copy a creative product without\r\npaying for it; there should be some compensation.  But the truth of the\r\nworld, and it is not a great truth, is that the big guy gets played on\r\nthe radio more frequently than the little guy, who has to do much more\r\nuntil he becomes a big guy.  That is true of every author, every\r\ncomposer, everyone, and, unfortunately, is part of life.\r\n\r\nCopyright always originates with the author, except in cases of works\r\nmade for hire.  (Most software falls into this category.)  When an author\r\nsends his article to a journal, he has not relinquished copyright, though\r\nhe retains the right to relinquish it.  The author receives absolutely\r\neverything.  The less prominent the author, the more leverage the\r\npublisher will have in contract negotiations.  In order to transfer the\r\nrights, the author must sign an agreement giving them away.\r\n\r\nIn an electronic society, it is important to be able to license a writer\r\nand work out deals.  With regard to use of a work, it usually is much\r\neasier when a publisher holds the rights.  In an electronic era, a real\r\nproblem arises when one is digitizing and making information available. \r\nPETERS referred again to electronic licensing clearinghouses.  Copyright\r\nought to remain with the author, but as one moves forward globally in the\r\nelectronic arena, a middleman who can handle the various rights becomes\r\nincreasingly necessary.\r\n\r\nThe notion of copyright law is that it resides with the individual, but\r\nin an on-line environment, where a work can be adapted and tinkered with\r\nby many individuals, there is concern.  If changes are authorized and\r\nthere is no agreement to the contrary, the person who changes a work owns\r\nthe changes.  To put it another way, the person who acquires permission\r\nto change a work technically will become the author and the owner, unless\r\nsome agreement to the contrary has been made.  It is typical for the\r\noriginal publisher to try to control all of the versions and all of the\r\nuses.  Copyright law always only sets up the boundaries.  Anything can be\r\nchanged by contract.\r\n\r\n                                 ******\r\n\r\nSESSION VII.  CONCLUSION\r\n\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\nGENERAL DISCUSSION * Two questions for discussion * Different emphases in\r\nthe Workshop * Bringing the text and image partisans together *\r\nDesiderata in planning the long-term development of something * Questions\r\nsurrounding the issue of electronic deposit * Discussion of electronic\r\ndeposit as an allusion to the issue of standards * Need for a directory\r\nof preservation projects in digital form and for access to their\r\ndigitized files * CETH's catalogue of machine-readable texts in the\r\nhumanities * What constitutes a publication in the electronic world? *\r\nNeed for LC to deal with the concept of on-line publishing * LC's Network\r\nDevelopment Office  exploring the limits of MARC as a standard in terms\r\nof handling electronic information * Magnitude of the problem and the\r\nneed for distributed responsibility in order to maintain and store\r\nelectronic information * Workshop participants to be viewed as a starting\r\npoint * Development of a network version of AM urged * A step toward AM's\r\nconstruction of some sort of apparatus for network access * A delicate\r\nand agonizing policy question for LC * Re the issue of electronic\r\ndeposit, LC urged to initiate a catalytic process in terms of distributed\r\nresponsibility * Suggestions for cooperative ventures * Commercial\r\npublishers' fears * Strategic questions for getting the image and text\r\npeople to think through long-term cooperation * Clarification of the\r\ndriving force behind both the Perseus and the Cornell Xerox projects *\r\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\nIn his role as moderator of the concluding session, GIFFORD raised two\r\nquestions he believed would benefit from discussion:  1) Are there enough\r\ncommonalities among those of us that have been here for two days so that\r\nwe can see courses of action that should be taken in the future?  And, if\r\nso, what are they and who might take them?  2) Partly derivative from\r\nthat, but obviously very dangerous to LC as host, do you see a role for\r\nthe Library of Congress in all this?  Of course, the Library of Congress\r\nholds a rather special status in a number of these matters, because it is\r\nnot perceived as a player with an economic stake in them, but are there\r\nroles that LC can play that can help advance us toward where we are heading?\r\n\r\nDescribing himself as an uninformed observer of the technicalities of the\r\nlast two days, GIFFORD detected three different emphases in the Workshop: \r\n1) people who are very deeply committed to text; 2) people who are almost\r\npassionate about images; and 3) a few people who are very committed to\r\nwhat happens to the networks.  In other words, the new networking\r\ndimension, the accessibility of the processability, the portability of\r\nall this across the networks.  How do we pull those three together?\r\n\r\nAdding a question that reflected HOCKEY's comment that this was the\r\nfourth workshop she had attended in the previous thirty days, FLEISCHHAUER\r\nwondered to what extent this meeting had reinvented the wheel, or if it\r\nhad contributed anything in the way of bringing together a different group\r\nof people from those who normally appear on the workshop circuit.\r\n\r\nHOCKEY confessed to being struck at this meeting and the one the\r\nElectronic Pierce Consortium organized the previous week that this was a\r\ncoming together of people working on texts and not images.  Attempting to\r\nbring the two together is something we ought to be thinking about for the\r\nfuture:  How one can think about working with image material to begin\r\nwith, but structuring it and digitizing it in such a way that at a later\r\nstage it can be interpreted into text, and find a common way of building\r\ntext and images together so that they can be used jointly in the future,\r\nwith the network support to begin there because that is how people will\r\nwant to access it.\r\n\r\nIn planning the long-term development of something, which is what is\r\nbeing done in electronic text, HOCKEY stressed the importance not only\r\nof discussing the technical aspects of how one does it but particularly\r\nof thinking about what the people who use the stuff will want to do.\r\nBut conversely, there are numerous things that people start to do with\r\nelectronic text or material that nobody ever thought of in the beginning.\r\n\r\nLESK, in response to the question concerning the role of the Library of\r\nCongress, remarked the often suggested desideratum of having electronic\r\ndeposit:  Since everything is now computer-typeset, an entire decade of\r\nmaterial that was machine-readable exists, but the publishers frequently\r\ndid not save it; has LC taken any action to have its copyright deposit\r\noperation start collecting these machine-readable versions?  In the\r\nabsence of PETERS, GIFFORD replied that the question was being\r\nactively considered but that that was only one dimension of the problem.\r\nAnother dimension is the whole question of the integrity of the original\r\nelectronic document.  It becomes highly important in science to prove\r\nauthorship.  How will that be done?\r\n\r\nERWAY explained that, under the old policy, to make a claim for a\r\ncopyright for works that were published in electronic form, including\r\nsoftware, one had to submit a paper copy of the first and last twenty\r\npages of code--something that represented the work but did not include\r\nthe entire work itself and had little value to anyone.  As a temporary\r\nmeasure, LC has claimed the right to demand electronic versions of\r\nelectronic publications.  This measure entails a proactive role for the\r\nLibrary to say that it wants a particular electronic version.  Publishers\r\nthen have perhaps a year to submit it.  But the real problem for LC is\r\nwhat to do with all this material in all these different formats.  Will\r\nthe Library mount it?  How will it give people access to it?  How does LC\r\nkeep track of the appropriate computers, software, and media?  The situation\r\nis so hard to control, ERWAY said, that it makes sense for each publishing\r\nhouse to maintain its own archive.  But LC cannot enforce that either.\r\n\r\nGIFFORD acknowledged LESK's suggestion that establishing a priority\r\noffered the solution, albeit a fairly complicated one.  But who maintains\r\nthat register?, he asked.  GRABER noted that LC does attempt to collect a\r\nMacintosh version and the IBM-compatible version of software.  It does\r\nnot collect other versions.  But while true for software, BYRUM observed,\r\nthis reply does not speak to materials, that is, all the materials that\r\nwere published that were on somebody's microcomputer or driver tapes\r\nat a publishing office across the country.  LC does well to acquire\r\nspecific machine-readable products selectively that were intended to be\r\nmachine-readable.  Materials that were in machine-readable form at one time,\r\nBYRUM said, would be beyond LC's capability at the moment, insofar as\r\nattempting to acquire, organize, and preserve them are concerned--and\r\npreservation would be the most important consideration.  In this\r\nconnection, GIFFORD reiterated the need to work out some sense of\r\ndistributive responsibility for a number of these issues, which\r\ninevitably will require significant cooperation and discussion.\r\nNobody can do it all.\r\n\r\nLESK suggested that some publishers may look with favor on LC beginning\r\nto serve as a depository of tapes in an electronic manuscript standard. \r\nPublishers may view this as a service that they did not have to perform\r\nand they might send in tapes.  However, SPERBERG-McQUEEN countered,\r\nalthough publishers have had equivalent services available to them for a\r\nlong time, the electronic text archive has never turned away or been\r\nflooded with tapes and is forever sending feedback to the depositor. \r\nSome publishers do send in tapes.\r\n\r\nANDRE viewed this discussion as an allusion to the issue of standards. \r\nShe recommended that the AAP standard and the TEI, which has already been\r\nsomewhat harmonized internationally and which also shares several\r\ncompatibilities with the AAP, be harmonized to ensure sufficient\r\ncompatibility in the software.  She drew the line at saying LC ought to\r\nbe the locus or forum for such harmonization.\r\n\r\nTaking the group in a slightly different direction, but one where at\r\nleast in the near term LC might play a helpful role, LYNCH remarked the\r\nplans of a number of projects to carry out preservation by creating\r\ndigital images that will end up in on-line or near-line storage at some\r\ninstitution.   Presumably, LC will link this material somehow to its\r\non-line catalog in most cases.  Thus, it is in a digital form.  LYNCH had\r\nthe impression that many of these institutions would be willing to make\r\nthose files accessible to other people outside the institution, provided\r\nthat there is no copyright problem.  This desideratum will require\r\npropagating the knowledge that those digitized files exist, so that they\r\ncan end up in other on-line catalogs.  Although uncertain about the\r\nmechanism for achieving this result, LYNCH said that it warranted\r\nscrutiny because it seemed to be connected to some of the basic issues of\r\ncataloging and distribution of records.  It would be  foolish, given the\r\namount of work that all of us have to do and our meager resources, to\r\ndiscover multiple institutions digitizing the same work.  Re microforms,\r\nLYNCH said, we are in pretty good shape.\r\n\r\nBATTIN called this a big problem and noted that the Cornell people (who\r\nhad already departed) were working on it.  At issue from the beginning\r\nwas to learn how to catalog that information into RLIN and then into\r\nOCLC, so that it would be accessible.  That issue remains to be resolved. \r\nLYNCH rejoined that putting it into OCLC or RLIN was helpful insofar as\r\nsomebody who is thinking of performing preservation activity on that work\r\ncould learn about it.  It is not necessarily helpful for institutions to\r\nmake that available.  BATTIN opined that the idea was that it not only be\r\nfor preservation purposes but for the convenience of people looking for\r\nthis material.  She endorsed LYNCH's dictum that duplication of this\r\neffort was to be avoided by every means.\r\n\r\nHOCKEY informed the Workshop about one major current activity of CETH,\r\nnamely a catalogue of machine-readable texts in the humanities.  Held on\r\nRLIN at present, the catalogue has been concentrated on ASCII as opposed\r\nto digitized images of text.  She is exploring ways to improve the\r\ncatalogue and make it more widely available, and welcomed suggestions\r\nabout these concerns.  CETH owns the records, which are not just\r\nrestricted to RLIN, and can distribute them however it wishes.\r\n\r\nTaking up LESK's earlier question, BATTIN inquired whether LC, since it\r\nis accepting electronic files and designing a mechanism for dealing with\r\nthat rather than putting books on shelves, would become responsible for\r\nthe National Copyright Depository of Electronic Materials.  Of course\r\nthat could not be accomplished overnight, but it would be something LC\r\ncould plan for.  GIFFORD acknowledged that much thought was being devoted\r\nto that set of problems and returned the discussion to the issue raised\r\nby LYNCH--whether or not putting the kind of records that both BATTIN and\r\nHOCKEY have been talking about in RLIN is not a satisfactory solution. \r\nIt seemed to him that RLIN answered LYNCH's original point concerning\r\nsome kind of directory for these kinds of materials.  In a situation\r\nwhere somebody is attempting to decide whether or not to scan this or\r\nfilm that or to learn whether or not someone has already done so, LYNCH\r\nsuggested, RLIN is helpful, but it is not helpful in the case of a local,\r\non-line catalogue.  Further, one would like to have her or his system be\r\naware that that exists in digital form, so that one can present it to a\r\npatron, even though one did not digitize it, if it is out of copyright. \r\nThe only way to make those linkages would be to perform a tremendous\r\namount of real-time look-up, which would be awkward at best, or\r\nperiodically to yank the whole file from RLIN and match it against one's\r\nown stuff, which is a nuisance.\r\n\r\nBut where, ERWAY inquired, does one stop including things that are\r\navailable with Internet, for instance, in one's local catalogue?\r\nIt almost seems that that is LC's means to acquire access to them.\r\nThat represents LC's new form of library loan.  Perhaps LC's new on-line\r\ncatalogue is an amalgamation of all these catalogues on line.  LYNCH\r\nconceded that perhaps that was true in the very long term, but was not\r\napplicable to scanning in the short term.  In his view, the totals cited\r\nby Yale, 10,000 books over perhaps a four-year period, and 1,000-1,500\r\nbooks from Cornell, were not big numbers, while searching all over\r\ncreation for relatively rare occurrences will prove to be less efficient. \r\nAs GIFFORD wondered if this would not be a separable file on RLIN and\r\ncould be requested from them, BATTIN interjected that it was easily\r\naccessible to an institution.  SEVERTSON pointed out that that file, cum\r\nenhancements, was available with reference information on CD-ROM, which\r\nmakes it a little more available.\r\n\r\nIn HOCKEY's view, the real question facing the Workshop is what to put in\r\nthis catalogue, because that raises the question of what constitutes a\r\npublication in the electronic world.  (WEIBEL interjected that Eric Joule\r\nin OCLC's Office of Research is also wrestling with this particular\r\nproblem, while GIFFORD thought it sounded fairly generic.)  HOCKEY\r\ncontended that a majority of texts in the humanities are in the hands\r\nof either a small number of large research institutions or individuals\r\nand are not generally available for anyone else to access at all.\r\nShe wondered if these texts ought to be catalogued.\r\n\r\nAfter argument proceeded back and forth for several minutes over why\r\ncataloguing might be a necessary service, LEBRON suggested that this\r\nissue involved the responsibility of a publisher.  The fact that someone\r\nhas created something electronically and keeps it under his or her\r\ncontrol does not constitute publication.  Publication implies\r\ndissemination.  While it would be important for a scholar to let other\r\npeople know that this creation exists, in many respects this is no\r\ndifferent from an unpublished manuscript.  That is what is being accessed\r\nin there, except that now one is not looking at it in the hard-copy but\r\nin the electronic environment.\r\n\r\nLEBRON expressed puzzlement at the variety of ways electronic publishing\r\nhas been viewed.  Much of what has been discussed throughout these two\r\ndays has concerned CD-ROM publishing, whereas in the on-line environment\r\nthat she confronts, the constraints and challenges are very different. \r\nSooner or later LC will have to deal with the concept of on-line\r\npublishing.  Taking up the comment ERWAY made earlier about storing\r\ncopies, LEBRON gave her own journal as an example.  How would she deposit\r\nOJCCT for copyright?, she asked, because the journal will exist in the\r\nmainframe at OCLC and people will be able to access it.  Here the\r\nsituation is different, ownership versus access, and is something that\r\narises with publication in the on-line environment, faster than is\r\nsometimes realized.  Lacking clear answers to all of these questions\r\nherself, LEBRON did not anticipate that LC would be able to take a role\r\nin helping to define some of them for quite a while.\r\n\r\nGREENFIELD observed that LC's Network Development Office is attempting,\r\namong other things, to explore the limits of MARC as a standard in terms\r\nof handling electronic information.  GREENFIELD also noted that Rebecca\r\nGUENTHER from that office gave a paper to the American Society for\r\nInformation Science (ASIS) summarizing several of the discussion papers\r\nthat were coming out of the Network Development Office.  GREENFIELD said\r\nhe understood that that office had a list-server soliciting just the kind\r\nof feedback received today concerning the difficulties of identifying and\r\ncataloguing electronic information.  GREENFIELD hoped that everybody\r\nwould be aware of that and somehow contribute to that conversation.\r\n\r\nNoting two of LC's roles, first, to act as a repository of record for\r\nmaterial that is copyrighted in this country, and second, to make\r\nmaterials it holds available in some limited form to a clientele that\r\ngoes beyond Congress, BESSER suggested that it was incumbent on LC to\r\nextend those responsibilities to all the things being published in\r\nelectronic form.  This would mean eventually accepting electronic\r\nformats.  LC could require that at some point they be in a certain\r\nlimited set of formats, and then develop mechanisms for allowing people\r\nto access those in the same way that other things are accessed.  This\r\ndoes not imply that they are on the network and available to everyone. \r\nLC does that with most of its bibliographic records, BESSER said, which\r\nend up migrating to the utility (e.g., OCLC) or somewhere else.  But just\r\nas most of LC's books are available in some form through interlibrary\r\nloan or some other mechanism, so in the same way electronic formats ought\r\nto be available to others in some format, though with some copyright\r\nconsiderations.  BESSER was not suggesting that these mechanisms be\r\nestablished tomorrow, only that they seemed to fall within LC's purview,\r\nand that there should be long-range plans to establish them.\r\n\r\nAcknowledging that those from LC in the room agreed with BESSER\r\nconcerning the need to confront difficult questions, GIFFORD underscored\r\nthe magnitude of the problem of what to keep and what to select.  GIFFORD\r\nnoted that LC currently receives some 31,000 items per day, not counting\r\nelectronic materials, and argued for much more distributed responsibility\r\nin order to maintain and store electronic information.\r\n\r\nBESSER responded that the assembled group could be viewed as a starting\r\npoint, whose initial operating premise could be helping to move in this\r\ndirection and defining how LC could do so, for example, in areas of\r\nstandardization or distribution of responsibility.\r\n\r\nFLEISCHHAUER added that AM was fully engaged, wrestling with some of the\r\nquestions that pertain to the conversion of older historical materials,\r\nwhich would be one thing that the Library of Congress might do.  Several\r\npoints mentioned by BESSER and several others on this question have a\r\nmuch greater impact on those who are concerned with cataloguing and the\r\nnetworking of bibliographic information, as well as preservation itself.\r\n\r\nSpeaking directly to AM, which he considered was a largely uncopyrighted\r\ndatabase, LYNCH urged development of a network version of AM, or\r\nconsideration of making the data in it available to people interested in\r\ndoing network multimedia.  On account of the current great shortage of\r\ndigital data that is both appealing and unencumbered by complex rights\r\nproblems, this course of action could have a significant effect on making\r\nnetwork multimedia a reality.\r\n\r\nIn this connection, FLEISCHHAUER reported on a fragmentary prototype in\r\nLC's Office of Information Technology Services that attempts to associate\r\ndigital images of photographs with cataloguing information in ways that\r\nwork within a local area network--a step, so to say, toward AM's\r\nconstruction of some sort of apparatus for access.  Further, AM has\r\nattempted to use standard data forms in order to help make that\r\ndistinction between the access tools and the underlying data, and thus\r\nbelieves that the database is networkable.\r\n\r\nA delicate and agonizing policy question for LC, however, which comes\r\nback to resources and unfortunately has an impact on this, is to find\r\nsome appropriate, honorable, and legal cost-recovery possibilities.  A\r\ncertain skittishness concerning cost-recovery has made people unsure\r\nexactly what to do.  AM would be highly receptive to discussing further\r\nLYNCH's offer to test or demonstrate its database in a network\r\nenvironment, FLEISCHHAUER said.\r\n\r\nReturning the discussion to what she viewed as the vital issue of\r\nelectronic deposit, BATTIN recommended that LC initiate a catalytic\r\nprocess in terms of distributed responsibility, that is, bring together\r\nthe distributed organizations and set up a study group to look at all\r\nthese issues and see where we as a nation should move.  The broader\r\nissues of how we deal with the management of electronic information will\r\nnot disappear, but only grow worse.\r\n\r\nLESK took up this theme and suggested that LC attempt to persuade one\r\nmajor library in each state to deal with its state equivalent publisher,\r\nwhich might produce a cooperative project that would be equitably\r\ndistributed around the country, and one in which LC would be dealing with\r\na minimal number of publishers and minimal copyright problems.\r\n\r\nGRABER remarked the recent development in the scientific community of a\r\nwillingness to use SGML and either deposit or interchange on a fairly\r\nstandardized format.  He wondered if a similar movement was taking place\r\nin the humanities.  Although the National Library of Medicine found only\r\na few publishers to cooperate in a like venture two or three years ago, a\r\nnew effort might generate a much larger number willing to cooperate.\r\n\r\nKIMBALL recounted his unit's (Machine-Readable Collections Reading Room)\r\ntroubles with the commercial publishers of electronic media in acquiring\r\nmaterials for LC's collections, in particular the publishers' fear that\r\nthey would not be able to cover their costs and would lose control of\r\ntheir products, that LC would give them away or sell them and make\r\nprofits from them.  He doubted that the publishing industry was prepared\r\nto move into this area at the moment, given its resistance to allowing LC\r\nto use its machine-readable materials as the Library would like.\r\n\r\nThe copyright law now addresses compact disk as a medium, and LC can\r\nrequest one copy of that, or two copies if it is the only version, and\r\ncan request copies of software, but that fails to address magazines or\r\nbooks or anything like that which is in machine-readable form.\r\n\r\nGIFFORD acknowledged the thorny nature of this issue, which he illustrated\r\nwith the example of the cumbersome process involved in putting a copy of a\r\nscientific database on a LAN in LC's science reading room.  He also\r\nacknowledged that LC needs help and could enlist the energies and talents\r\nof Workshop participants in thinking through a number of these problems.\r\n\r\nGIFFORD returned the discussion to getting the image and text people to\r\nthink through together where they want to go in the long term.  MYLONAS\r\nconceded that her experience at the Pierce Symposium the previous week at\r\nGeorgetown University and this week at LC had forced her to reevaluate\r\nher perspective on the usefulness of text as images.  MYLONAS framed the\r\nissues in a series of questions:  How do we acquire machine-readable\r\ntext?  Do we take pictures of it and perform OCR on it later?  Is it\r\nimportant to obtain very high-quality images and text, etc.? \r\nFLEISCHHAUER agreed with MYLONAS's framing of strategic questions, adding\r\nthat a large institution such as LC probably has to do all of those\r\nthings at different times.  Thus, the trick is to exercise judgment.  The\r\nWorkshop had added to his and AM's considerations in making those\r\njudgments.  Concerning future meetings or discussions, MYLONAS suggested\r\nthat screening priorities would be helpful.\r\n\r\nWEIBEL opined that the diversity reflected in this group was a sign both\r\nof the health and of the immaturity of the field, and more time would\r\nhave to pass before we convince one another concerning standards.\r\n\r\nAn exchange between MYLONAS and BATTIN clarified the point that the\r\ndriving force behind both the Perseus and the Cornell Xerox projects was\r\nthe preservation of knowledge for the future, not simply for particular\r\nresearch use.  In the case of Perseus, MYLONAS said, the assumption was\r\nthat the texts would not be entered again into electronically readable\r\nform.  SPERBERG-McQUEEN added that a scanned image would not serve as an\r\narchival copy for purposes of preservation in the case of, say, the Bill\r\nof Rights, in the sense that the scanned images are effectively the\r\narchival copies for the Cornell mathematics books.\r\n\r\n\r\n               ***   ***   ***   ******   ***   ***   ***\r\n\r\n\r\n                          Appendix I:  PROGRAM\r\n\r\n\r\n\r\n                                WORKSHOP\r\n                                   ON\r\n                               ELECTRONIC\r\n                                  TEXTS\r\n\r\n\r\n\r\n                             9-10 June 1992\r\n\r\n                           Library of Congress\r\n                            Washington, D.C.\r\n\r\n\r\n\r\n    Supported by a Grant from the David and Lucile Packard Foundation\r\n\r\n\r\nTuesday, 9 June 1992\r\n\r\nNATIONAL DEMONSTRATION LAB, ATRIUM, LIBRARY MADISON\r\n\r\n8:30 AM   Coffee and Danish, registration\r\n\r\n9:00 AM   Welcome\r\n\r\n          Prosser Gifford, Director for Scholarly Programs, and Carl\r\n             Fleischhauer, Coordinator, American Memory, Library of\r\n             Congress\r\n\r\n9:l5 AM   Session I.  Content in a New Form:  Who Will Use It and What\r\n          Will They Do?\r\n\r\n          Broad description of the range of electronic information. \r\n          Characterization of who uses it and how it is or may be used. \r\n          In addition to a look at scholarly uses, this session will\r\n          include a presentation on use by students (K-12 and college)\r\n          and the general public.\r\n\r\n          Moderator:  James Daly\r\n          Avra Michelson, Archival Research and Evaluation Staff,\r\n             National Archives and Records Administration (Overview)\r\n          Susan H. Veccia, Team Leader, American Memory, User Evaluation,\r\n             and\r\n          Joanne Freeman, Associate Coordinator, American Memory, Library\r\n             of Congress (Beyond the scholar)\r\n\r\n10:30-\r\n11:00 AM  Break\r\n\r\n11:00 AM  Session II.  Show and Tell.\r\n\r\n          Each presentation to consist of a fifteen-minute\r\n          statement/show; group discussion will follow lunch.\r\n\r\n          Moderator:  Jacqueline Hess, Director, National Demonstration\r\n             Lab\r\n\r\n            1.  A classics project, stressing texts and text retrieval\r\n                more than multimedia:  Perseus Project, Harvard\r\n                University\r\n                Elli Mylonas, Managing Editor\r\n\r\n            2.  Other humanities projects employing the emerging norms of\r\n                the Text Encoding Initiative (TEI):  Chadwyck-Healey's\r\n                The English Poetry Full Text Database and/or Patrologia\r\n                Latina Database\r\n                Eric M. Calaluca, Vice President, Chadwyck-Healey, Inc.\r\n\r\n            3.  American Memory\r\n                Carl Fleischhauer, Coordinator, and\r\n                Ricky Erway, Associate Coordinator, Library of Congress\r\n\r\n            4.  Founding Fathers example from Packard Humanities\r\n                Institute:  The Papers of George Washington, University\r\n                of Virginia\r\n                Dorothy Twohig, Managing Editor, and/or\r\n                David Woodley Packard\r\n\r\n            5.  An electronic medical journal offering graphics and\r\n                full-text searchability:  The Online Journal of Current\r\n                Clinical Trials, American Association for the Advancement\r\n                of Science\r\n                Maria L. Lebron, Managing Editor\r\n\r\n            6.  A project that offers facsimile images of pages but omits\r\n                searchable text:  Cornell math books\r\n                Lynne K. Personius, Assistant Director, Cornell\r\n                   Information Technologies for Scholarly Information\r\n                   Sources, Cornell University\r\n\r\n12:30 PM  Lunch  (Dining Room A, Library Madison 620.  Exhibits\r\n          available.)\r\n\r\n1:30 PM   Session II.  Show and Tell (Cont'd.).\r\n\r\n3:00-\r\n3:30 PM   Break\r\n\r\n3:30-\r\n5:30 PM   Session III.  Distribution, Networks, and Networking:  Options\r\n          for Dissemination.\r\n\r\n          Published disks:  University presses and public-sector\r\n             publishers, private-sector publishers\r\n          Computer networks\r\n\r\n          Moderator:  Robert G. Zich, Special Assistant to the Associate\r\n             Librarian for Special Projects, Library of Congress\r\n          Clifford A. Lynch, Director, Library Automation, University of\r\n             California\r\n          Howard Besser, School of Library and Information Science,\r\n             University of Pittsburgh\r\n          Ronald L. Larsen, Associate Director of Libraries for\r\n             Information Technology, University of Maryland at College\r\n             Park\r\n          Edwin B. Brownrigg, Executive Director, Memex Research\r\n             Institute\r\n\r\n6:30 PM   Reception  (Montpelier Room, Library Madison 619.)\r\n\r\n                                 ******\r\n\r\nWednesday, 10 June 1992\r\n\r\nDINING ROOM A, LIBRARY MADISON 620\r\n\r\n8:30 AM   Coffee and Danish\r\n\r\n9:00 AM   Session IV.  Image Capture, Text Capture, Overview of Text and\r\n          Image Storage Formats.\r\n\r\n          Moderator:  William L. Hooton, Vice President of Operations,\r\n             I-NET\r\n\r\n          A) Principal Methods for Image Capture of Text:\r\n             Direct scanning\r\n             Use of microform\r\n\r\n          Anne R. Kenney, Assistant Director, Department of Preservation\r\n             and Conservation, Cornell University\r\n          Pamela Q.J. Andre, Associate Director, Automation, and\r\n          Judith A. Zidar, Coordinator, National Agricultural Text\r\n             Digitizing Program (NATDP), National Agricultural Library\r\n             (NAL)\r\n          Donald J. Waters, Head, Systems Office, Yale University Library\r\n\r\n          B) Special Problems:\r\n             Bound volumes\r\n             Conservation\r\n             Reproducing printed halftones\r\n\r\n          Carl Fleischhauer, Coordinator, American Memory, Library of\r\n             Congress\r\n          George Thoma, Chief, Communications Engineering Branch,\r\n             National Library of Medicine (NLM)\r\n\r\n10:30-\r\n11:00 AM  Break\r\n\r\n11:00 AM  Session IV.  Image Capture, Text Capture, Overview of Text and\r\n          Image Storage Formats (Cont'd.).\r\n\r\n          C) Image Standards and Implications for Preservation\r\n\r\n          Jean Baronas, Senior Manager, Department of Standards and\r\n             Technology, Association for Information and Image Management\r\n             (AIIM)\r\n          Patricia Battin, President, The Commission on Preservation and\r\n             Access (CPA)\r\n\r\n          D) Text Conversion:\r\n             OCR vs. rekeying\r\n             Standards of accuracy and use of imperfect texts\r\n             Service bureaus\r\n\r\n          Stuart Weibel, Senior Research Specialist, Online Computer\r\n             Library Center, Inc. (OCLC)\r\n          Michael Lesk, Executive Director, Computer Science Research,\r\n             Bellcore\r\n          Ricky Erway, Associate Coordinator, American Memory, Library of\r\n             Congress\r\n          Pamela Q.J. Andre, Associate Director, Automation, and\r\n          Judith A. Zidar, Coordinator, National Agricultural Text\r\n             Digitizing Program (NATDP), National Agricultural Library\r\n             (NAL)\r\n\r\n12:30-\r\n1:30 PM   Lunch\r\n\r\n1:30 PM   Session V.  Approaches to Preparing Electronic Texts.\r\n\r\n          Discussion of approaches to structuring text for the computer;\r\n          pros and cons of text coding, description of methods in\r\n          practice, and comparison of text-coding methods.\r\n\r\n          Moderator:  Susan Hockey, Director, Center for Electronic Texts\r\n             in the Humanities (CETH), Rutgers and Princeton Universities\r\n          David Woodley Packard\r\n          C.M. Sperberg-McQueen, Editor, Text Encoding Initiative (TEI),\r\n             University of Illinois-Chicago\r\n          Eric M. Calaluca, Vice President, Chadwyck-Healey, Inc.\r\n\r\n3:30-\r\n4:00 PM   Break\r\n\r\n4:00 PM   Session VI.  Copyright Issues.\r\n\r\n          Marybeth Peters, Policy Planning Adviser to the Register of\r\n             Copyrights, Library of Congress\r\n\r\n5:00 PM   Session VII. Conclusion.\r\n\r\n          General discussion.\r\n          What topics were omitted or given short shrift that anyone\r\n             would like to talk about now?\r\n          Is there a \"group\" here?  What should the group do next, if\r\n             anything?  What should the Library of Congress do next, if\r\n             anything?\r\n          Moderator:  Prosser Gifford, Director for Scholarly Programs,\r\n             Library of Congress\r\n\r\n6:00 PM   Adjourn\r\n\r\n\r\n               ***   ***   ***   ******   ***   ***   ***\r\n\r\n\r\n                         Appendix II:  ABSTRACTS\r\n\r\n\r\nSESSION I\r\n\r\nAvra MICHELSON           Forecasting the Use of Electronic Texts by\r\n                         Social Sciences and Humanities Scholars\r\n\r\nThis presentation explores the ways in which electronic texts are likely\r\nto be used by the non-scientific scholarly community.  Many of the\r\nremarks are drawn from a report the speaker coauthored with Jeff\r\nRothenberg, a computer scientist at The RAND Corporation.\r\n\r\nThe speaker assesses 1) current scholarly use of information technology\r\nand 2) the key trends in information technology most relevant to the\r\nresearch process, in order to predict how social sciences and humanities\r\nscholars are apt to use electronic texts.  In introducing the topic,\r\ncurrent use of electronic texts is explored broadly within the context of\r\nscholarly communication.  From the perspective of scholarly\r\ncommunication, the work of humanities and social sciences scholars\r\ninvolves five processes:  1) identification of sources, 2) communication\r\nwith colleagues, 3) interpretation and analysis of data, 4) dissemination\r\nof research findings, and 5) curriculum development and instruction.  The\r\nextent to which computation currently permeates aspects of scholarly\r\ncommunication represents a viable indicator of the prospects for\r\nelectronic texts.\r\n\r\nThe discussion of current practice is balanced by an analysis of key\r\ntrends in the scholarly use of information technology.  These include the\r\ntrends toward end-user computing and connectivity, which provide a\r\nframework for forecasting the use of electronic texts through this\r\nmillennium.  The presentation concludes with a summary of the ways in\r\nwhich the nonscientific scholarly community can be expected to use\r\nelectronic texts, and the implications of that use for information\r\nproviders.\r\n\r\nSusan VECCIA and Joanne FREEMAN    Electronic Archives for the Public: \r\n                                   Use of American Memory in Public and\r\n                                   School Libraries\r\n\r\nThis joint discussion focuses on nonscholarly applications of electronic\r\nlibrary materials, specifically addressing use of the Library of Congress\r\nAmerican Memory (AM) program in a small number of public and school\r\nlibraries throughout the United States.  AM consists of selected Library\r\nof Congress primary archival materials, stored on optical media\r\n(CD-ROM/videodisc), and presented with little or no editing.  Many\r\ncollections are accompanied by electronic introductions and user's guides\r\noffering background information and historical context.  Collections\r\nrepresent a variety of formats including photographs, graphic arts,\r\nmotion pictures, recorded sound, music, broadsides and manuscripts,\r\nbooks, and pamphlets.\r\n\r\nIn 1991, the Library of Congress began a nationwide evaluation of AM in\r\ndifferent types of institutions.  Test sites include public libraries,\r\nelementary and secondary school libraries, college and university\r\nlibraries, state libraries, and special libraries.  Susan VECCIA and\r\nJoanne FREEMAN will discuss their observations on the use of AM by the\r\nnonscholarly community, using evidence gleaned from this ongoing\r\nevaluation effort.\r\n\r\nVECCIA will comment on the overall goals of the evaluation project, and\r\nthe types of public and school libraries included in this study.  Her\r\ncomments on nonscholarly use of AM will focus on the public library as a\r\ncultural and community institution, often bridging the gap between formal\r\nand informal education.  FREEMAN will discuss the use of AM in school\r\nlibraries.  Use by students and teachers has revealed some broad\r\nquestions about the use of electronic resources, as well as definite\r\nbenefits gained by the \"nonscholar.\"  Topics will include the problem of\r\ngrasping content and context in an electronic environment, the stumbling\r\nblocks created by \"new\" technologies, and the unique skills and interests\r\nawakened through use of electronic resources.\r\n\r\nSESSION II\r\n\r\nElli MYLONAS             The Perseus Project:  Interactive Sources and\r\n                         Studies in Classical Greece\r\n\r\nThe Perseus Project (5) has just released Perseus 1.0, the first publicly\r\navailable version of its hypertextual database of multimedia materials on\r\nclassical Greece.  Perseus is designed to be used by a wide audience,\r\ncomprised of readers at the student and scholar levels.  As such, it must\r\nbe able to locate information using different strategies, and it must\r\ncontain enough detail to serve the different needs of its users.  In\r\naddition, it must be delivered so that it is affordable to its target\r\naudience.  [These problems and the solutions we chose are described in\r\nMylonas, \"An Interface to Classical Greek Civilization,\" JASIS 43:2,\r\nMarch 1992.]\r\n\r\nIn order to achieve its objective, the project staff decided to make a\r\nconscious separation between selecting and converting textual, database,\r\nand image data on the one hand, and putting it into a delivery system on\r\nthe other.  That way, it is possible to create the electronic data\r\nwithout thinking about the restrictions of the delivery system.  We have\r\nmade a great effort to choose system-independent formats for our data,\r\nand to put as much thought and work as possible into structuring it so\r\nthat the translation from paper to electronic form will enhance the value\r\nof the data. [A discussion of these solutions as of two years ago is in\r\nElli Mylonas, Gregory Crane, Kenneth Morrell, and D. Neel Smith, \"The\r\nPerseus Project:  Data in the Electronic Age,\" in Accessing Antiquity: \r\nThe Computerization of Classical Databases, J. Solomon and T. Worthen\r\n(eds.),  University of Arizona Press, in press.]\r\n\r\nMuch of the work on Perseus is focused on collecting and converting the\r\ndata on which the project is based.  At the same time, it is necessary to\r\nprovide means of access to the information, in order to make it usable,\r\nand them to investigate how it is used.  As we learn more about what\r\nstudents and scholars from different backgrounds do with Perseus, we can\r\nadjust our data collection, and also modify the system to accommodate\r\nthem.  In creating a delivery system for general use, we have tried to\r\navoid favoring any one type of use by allowing multiple forms of access\r\nto and navigation through the system.\r\n\r\nThe way text is handled exemplifies some of these principles.  All text\r\nin Perseus is tagged using SGML, following the guidelines of the Text\r\nEncoding Initiative (TEI).  This markup is used to index the text, and\r\nprocess it so that it can be imported into HyperCard.  No SGML markup\r\nremains in the text that reaches the user, because currently it would be\r\ntoo expensive to create a system that acts on SGML in real time. \r\nHowever, the regularity provided by SGML is essential for verifying the\r\ncontent of the texts, and greatly speeds all the processing performed on\r\nthem.  The fact that the texts exist in SGML ensures that they will be\r\nrelatively easy to port to different hardware and software, and so will\r\noutlast the current delivery platform.  Finally, the SGML markup\r\nincorporates existing canonical reference systems (chapter, verse, line,\r\netc.); indexing and navigation are based on these features.  This ensures\r\nthat the same canonical reference will always resolve to the same point\r\nwithin a text, and that all versions of our texts, regardless of delivery\r\nplatform (even paper printouts) will function the same way.\r\n\r\nIn order to provide tools for users, the text is processed by a\r\nmorphological analyzer, and the results are stored in a database. \r\nTogether with the index, the Greek-English Lexicon, and the index of all\r\nthe English words in the definitions of the lexicon, the morphological\r\nanalyses comprise a set of linguistic tools that allow users of all\r\nlevels to work with the textual information, and to accomplish different\r\ntasks.  For example, students who read no Greek may explore a concept as\r\nit appears in Greek texts by using the English-Greek index, and then\r\nlooking up works in the texts and translations, or scholars may do\r\ndetailed morphological studies of word use by using the morphological\r\nanalyses of the texts.  Because these tools were not designed for any one\r\nuse, the same tools and the same data can be used by both students and\r\nscholars.\r\n\r\nNOTES:\r\n     (5)  Perseus is based at Harvard University, with collaborators at\r\n     several other universities.  The project has been funded primarily\r\n     by the Annenberg/CPB Project, as well as by Harvard University,\r\n     Apple Computer, and others.  It is published by Yale University\r\n     Press.  Perseus runs on Macintosh computers, under the HyperCard\r\n     program.\r\n\r\nEric CALALUCA\r\n\r\nChadwyck-Healey embarked last year on two distinct yet related full-text\r\nhumanities database projects.\r\n\r\nThe English Poetry Full-Text Database and the Patrologia Latina Database\r\nrepresent new approaches to linguistic research resources.  The size and\r\ncomplexity of the projects present problems for electronic publishers,\r\nbut surmountable ones if they remain abreast of the latest possibilities\r\nin data capture and retrieval software techniques.\r\n\r\nThe issues which required address prior to the commencement of the\r\nprojects were legion:\r\n\r\n     1.   Editorial selection (or exclusion) of materials in each\r\n          database\r\n\r\n     2.   Deciding whether or not to incorporate a normative encoding\r\n          structure into the databases?\r\n               A.  If one is selected, should it be SGML?\r\n               B.  If SGML, then the TEI?\r\n     \r\n     3.   Deliver as CD-ROM, magnetic tape, or both?\r\n\r\n     4.   Can one produce retrieval software advanced enough for the\r\n          postdoctoral linguist, yet accessible enough for unattended\r\n          general use?  Should one try?\r\n\r\n     5.   Re fair and liberal networking policies, what are the risks to\r\n          an electronic publisher?\r\n\r\n     6.   How does the emergence of national and international education\r\n          networks affect the use and viability of research projects\r\n          requiring high investment?  Do the new European Community\r\n          directives concerning database protection necessitate two\r\n          distinct publishing projects, one for North America and one for\r\n          overseas?\r\n\r\nFrom new notions of \"scholarly fair use\" to the future of optical media,\r\nvirtually every issue related to electronic publishing was aired.  The\r\nresult is two projects which have been constructed to provide the quality\r\nresearch resources with the fewest encumbrances to use by teachers and\r\nprivate scholars.\r\n\r\nDorothy TWOHIG\r\n\r\nIn spring 1988 the editors of the papers of George Washington, John\r\nAdams, Thomas Jefferson, James Madison, and Benjamin Franklin were\r\napproached by classics scholar David Packard on behalf of the Packard\r\nHumanities Foundation with a proposal to produce a CD-ROM edition of the\r\ncomplete papers of each of the Founding Fathers.  This electronic edition\r\nwill supplement the published volumes, making the documents widely\r\navailable to students and researchers at reasonable cost.  We estimate\r\nthat our CD-ROM edition of Washington's Papers will be substantially\r\ncompleted within the next two years and ready for publication.  Within\r\nthe next ten years or so, similar CD-ROM editions of the Franklin, Adams,\r\nJefferson, and Madison papers also will be available.  At the Library of\r\nCongress's session on technology, I would like to discuss not only the\r\nexperience of the Washington Papers in producing the CD-ROM edition, but\r\nthe impact technology has had on these major editorial projects. \r\nAlready, we are editing our volumes with an eye to the material that will\r\nbe readily available in the CD-ROM edition.  The completed electronic\r\nedition will provide immense possibilities for the searching of documents\r\nfor information in a way never possible before.  The kind of technical\r\ninnovations that are currently available and on the drawing board will\r\nsoon revolutionize historical research and the production of historical\r\ndocuments.  Unfortunately, much of this new technology is not being used\r\nin the planning stages of historical projects, simply because many\r\nhistorians are aware only in the vaguest way of its existence.  At least\r\ntwo major new historical editing projects are considering microfilm\r\neditions, simply because they are not aware of the possibilities of\r\nelectronic alternatives and the advantages of the new technology in terms\r\nof flexibility and research potential compared to microfilm.  In fact,\r\ntoo many of us in history and literature are still at the stage of\r\nstruggling with our PCs.  There are many historical editorial projects in\r\nprogress presently, and an equal number of literary projects.  While the\r\ntwo fields have somewhat different approaches to textual editing, there\r\nare ways in which electronic technology can be of service to both.\r\n\r\nSince few of the editors involved in the Founding Fathers CD-ROM editions\r\nare technical experts in any sense, I hope to point out in my discussion\r\nof our experience how many of these electronic innovations can be used\r\nsuccessfully by scholars who are novices in the world of new technology. \r\nOne of the major concerns of the sponsors of the multitude of new\r\nscholarly editions is the limited audience reached by the published\r\nvolumes.  Most of these editions are being published in small quantities\r\nand the publishers' price for them puts them out of the reach not only of\r\nindividual scholars but of most public libraries and all but the largest\r\neducational institutions.  However, little attention is being given to\r\nways in which technology can bypass conventional publication to make\r\nhistorical and literary documents more widely available.\r\n\r\nWhat attracted us most to the CD-ROM edition of The Papers of George\r\nWashington was the fact that David Packard's aim was to make a complete\r\nedition of all of the 135,000 documents we have collected available in an\r\ninexpensive format that would be placed in public libraries, small\r\ncolleges, and even high schools.  This would provide an audience far\r\nbeyond our present 1,000-copy, $45 published edition.  Since the CD-ROM\r\nedition will carry none of the explanatory annotation that appears in the\r\npublished volumes, we also feel that the use of the CD-ROM will lead many\r\nresearchers to seek out the published volumes.\r\n\r\nIn addition to ignorance of new technical advances, I have found that too\r\nmany editors--and historians and literary scholars--are resistant and\r\neven hostile to suggestions that electronic technology may enhance their\r\nwork.  I intend to discuss some of the arguments traditionalists are\r\nadvancing to resist technology, ranging from distrust of the speed with\r\nwhich it changes (we are already wondering what is out there that is\r\nbetter than CD-ROM) to suspicion of the technical language used to\r\ndescribe electronic developments.\r\n\r\nMaria LEBRON\r\n\r\nThe Online Journal of Current Clinical Trials, a joint venture of the\r\nAmerican Association for the Advancement of Science (AAAS) and the Online\r\nComputer Library Center, Inc. (OCLC), is the first peer-reviewed journal\r\nto provide full text, tabular material, and line illustrations on line. \r\nThis presentation will discuss the genesis and start-up period of the\r\njournal.  Topics of discussion will include historical overview,\r\nday-to-day management of the editorial peer review, and manuscript\r\ntagging and publication.  A demonstration of the journal and its features\r\nwill accompany the presentation.\r\n\r\nLynne PERSONIUS\r\n\r\nCornell University Library, Cornell Information Technologies, and Xerox\r\nCorporation, with the support of the Commission on Preservation and\r\nAccess, and Sun Microsystems, Inc., have been collaborating in a project\r\nto test a prototype system for recording brittle books as digital images\r\nand producing, on demand, high-quality archival paper replacements.  The\r\nproject goes beyond that, however, to investigate some of the issues\r\nsurrounding scanning, storing, retrieving, and providing access to\r\ndigital images in a network environment.\r\n\r\nThe Joint Study in Digital Preservation began in January 1990.  Xerox\r\nprovided the College Library Access and Storage System (CLASS) software,\r\na prototype 600-dots-per-inch (dpi) scanner, and the hardware necessary\r\nto support network printing on the DocuTech printer housed in Cornell's\r\nComputing and Communications Center (CCC).\r\n\r\nThe Cornell staff using the hardware and software became an integral part\r\nof the development and testing process for enhancements to the CLASS\r\nsoftware system.  The collaborative nature of this relationship is\r\nresulting in a system that is specifically tailored to the preservation\r\napplication.\r\n\r\nA digital library of 1,000 volumes (or approximately 300,000 images) has\r\nbeen created and is stored on an optical jukebox that resides in CCC. \r\nThe library includes a collection of select mathematics monographs that\r\nprovides mathematics faculty with an opportunity to use the electronic\r\nlibrary.  The remaining volumes were chosen for the library to test the\r\nvarious capabilities of the scanning system.\r\n\r\nOne project objective is to provide users of the Cornell library and the\r\nlibrary staff with the ability to request facsimiles of digitized images\r\nor to retrieve the actual electronic image for browsing.  A prototype\r\nviewing workstation has been created by Xerox, with input into the design\r\nby a committee of Cornell librarians and computer professionals.  This\r\nwill allow us to experiment with patron access to the images that make up\r\nthe digital library.  The viewing station provides search, retrieval, and\r\n(ultimately) printing functions with enhancements to facilitate\r\nnavigation through multiple documents.\r\n\r\nCornell currently is working to extend access to the digital library to\r\nreaders using workstations from their offices.  This year is devoted to\r\nthe development of a network resident image conversion and delivery\r\nserver, and client software that will support readers who use Apple\r\nMacintosh computers, IBM windows platforms, and Sun workstations. \r\nEquipment for this development was provided by Sun Microsystems with\r\nsupport from the Commission on Preservation and Access.\r\n\r\nDuring the show-and-tell session of the Workshop on Electronic Texts, a\r\nprototype view station will be demonstrated.  In addition, a display of\r\noriginal library books that have been digitized will be available for\r\nreview with associated printed copies for comparison.  The fifteen-minute\r\noverview of the project will include a slide presentation that\r\nconstitutes a \"tour\" of the preservation digitizing process.\r\n\r\nThe final network-connected version of the viewing station will provide\r\nlibrary users with another mechanism for accessing the digital library,\r\nand will also provide the capability of viewing images directly.  This\r\nwill not require special software, although a powerful computer with good\r\ngraphics will be needed.\r\n\r\nThe Joint Study in Digital Preservation has generated a great deal of\r\ninterest in the library community.  Unfortunately, or perhaps\r\nfortunately, this project serves to raise a vast number of other issues\r\nsurrounding the use of digital technology for the preservation and use of\r\ndeteriorating library materials, which subsequent projects will need to\r\nexamine.  Much work remains.\r\n\r\nSESSION III\r\n\r\nHoward BESSER                      Networking Multimedia Databases\r\n\r\nWhat do we have to consider in building and distributing databases of\r\nvisual materials in a multi-user environment?  This presentation examines\r\na variety of concerns that need to be addressed before a multimedia\r\ndatabase can be set up in a networked environment.\r\n\r\nIn the past it has not been feasible to implement databases of visual\r\nmaterials in shared-user environments because of technological barriers. \r\nEach of the two basic models for multi-user multimedia databases has\r\nposed its own problem.  The analog multimedia storage model (represented\r\nby Project Athena's parallel analog and digital networks) has required an\r\nincredibly complex (and expensive) infrastructure.  The economies of\r\nscale that make multi-user setups cheaper per user served do not operate\r\nin an environment that requires a computer workstation, videodisc player,\r\nand two display devices for each user.\r\n\r\nThe digital multimedia storage model has required vast amounts of storage\r\nspace (as much as one gigabyte per thirty still images).  In the past the\r\ncost of such a large amount of storage space made this model a\r\nprohibitive choice as well.  But plunging storage costs are finally\r\nmaking this second alternative viable.\r\n\r\nIf storage no longer poses such an impediment, what do we need to\r\nconsider in building digitally stored multi-user databases of visual\r\nmaterials?  This presentation will examine the networking and\r\ntelecommunication constraints that must be overcome before such databases\r\ncan become commonplace and useful to a large number of people.\r\n\r\nThe key problem is the vast size of multimedia documents, and how this\r\naffects not only storage but telecommunications transmission time. \r\nAnything slower than T-1 speed is impractical for files of 1 megabyte or\r\nlarger (which is likely to be small for a multimedia document).  For\r\ninstance, even on a 56 Kb line it would take three minutes to transfer a\r\n1-megabyte file.  And these figures assume ideal circumstances, and do\r\nnot take into consideration other users contending for network bandwidth,\r\ndisk access time, or the time needed for remote display.  Current common\r\ntelephone transmission rates would be completely impractical; few users\r\nwould be willing to wait the hour necessary to transmit a single image at\r\n2400 baud.\r\n\r\nThis necessitates compression, which itself raises a number of other\r\nissues.  In order to decrease file sizes significantly, we must employ\r\nlossy compression algorithms.  But how much quality can we afford to\r\nlose?  To date there has been only one significant study done of\r\nimage-quality needs for a particular user group, and this study did not\r\nlook at loss resulting from compression.  Only after identifying\r\nimage-quality needs can we begin to address storage and network bandwidth\r\nneeds.\r\n\r\nExperience with X-Windows-based applications (such as Imagequery, the\r\nUniversity of California at Berkeley image database) demonstrates the\r\nutility of a client-server topology, but also points to the limitation of\r\ncurrent software for a distributed environment.  For example,\r\napplications like Imagequery can incorporate compression, but current X\r\nimplementations do not permit decompression at the end user's\r\nworkstation.  Such decompression at the host computer alleviates storage\r\ncapacity problems while doing nothing to address problems of\r\ntelecommunications bandwidth.\r\n\r\nWe need to examine the effects on network through-put of moving\r\nmultimedia documents around on a network.  We need to examine various\r\ntopologies that will help us avoid bottlenecks around servers and\r\ngateways.  Experience with applications such as these raise still broader\r\nquestions. How closely is the multimedia document tied to the software\r\nfor viewing it?  Can it be accessed and viewed from other applications? \r\nExperience with the MARC format (and more recently with the Z39.50\r\nprotocols) shows how useful it can be to store documents in a form in\r\nwhich they can be accessed by a variety of application software.\r\n\r\nFinally, from an intellectual-access standpoint, we need to address the\r\nissue of providing access to these multimedia documents in\r\ninterdisciplinary environments.  We need to examine terminology and\r\nindexing strategies that will allow us to provide access to this material\r\nin a cross-disciplinary way.\r\n\r\nRonald LARSEN            Directions in High-Performance Networking for\r\n                         Libraries\r\n\r\nThe pace at which computing technology has advanced over the past forty\r\nyears shows no sign of abating.  Roughly speaking, each five-year period\r\nhas yielded an order-of-magnitude improvement in price and performance of\r\ncomputing equipment.  No fundamental hurdles are likely to prevent this\r\npace from continuing for at least the next decade.  It is only in the\r\npast five years, though, that computing has become ubiquitous in\r\nlibraries, affecting all staff and patrons, directly or indirectly.\r\n\r\nDuring these same five years, communications rates on the Internet, the\r\nprincipal academic computing network, have grown from 56 kbps to 1.5\r\nMbps, and the NSFNet backbone is now running 45 Mbps.  Over the next five\r\nyears, communication rates on the backbone are expected to exceed 1 Gbps. \r\nGrowth in both the population of network users and the volume of network\r\ntraffic  has continued to grow geometrically, at rates approaching 15\r\npercent per month.  This flood of capacity and use, likened by some to\r\n\"drinking from a firehose,\"  creates immense opportunities and challenges\r\nfor libraries.  Libraries must anticipate the future implications of this\r\ntechnology, participate in its development, and deploy it to ensure\r\naccess to the world's information resources.\r\n\r\nThe infrastructure for the information age is being put in place. \r\nLibraries face strategic decisions about their role in the development,\r\ndeployment, and use of this infrastructure.  The emerging infrastructure\r\nis much more than computers and communication lines.  It is more than the\r\nability to compute at a remote site, send electronic mail to a peer\r\nacross the country, or move a file from one library to another.  The next\r\nfive years will witness substantial development of the information\r\ninfrastructure of the network.\r\n\r\nIn order to provide appropriate leadership, library professionals must\r\nhave a fundamental understanding of and appreciation for computer\r\nnetworking, from local area networks to the National Research and\r\nEducation Network (NREN).  This presentation addresses these\r\nfundamentals, and how they relate to libraries today and in the near\r\nfuture.\r\n\r\nEdwin BROWNRIGG               Electronic Library Visions and Realities\r\n\r\nThe electronic library has been a vision desired by many--and rejected by\r\nsome--since Vannevar Bush coined the term memex to describe an automated,\r\nintelligent, personal information system.  Variations on this vision have\r\nincluded Ted Nelson's Xanadau, Alan Kay's Dynabook, and Lancaster's\r\n\"paperless library,\" with the most recent incarnation being the\r\n\"Knowledge Navigator\" described by John Scully of Apple.  But the reality\r\nof library service has been less visionary and the leap to the electronic\r\nlibrary has eluded universities, publishers, and information technology\r\nfiles.\r\n\r\nThe Memex Research Institute (MemRI), an independent, nonprofit research\r\nand development organization, has created an Electronic Library Program\r\nof shared research and development in order to make the collective vision\r\nmore concrete.  The program is working toward the creation of large,\r\nindexed publicly available electronic image collections of published\r\ndocuments in academic, special, and public libraries.  This strategic\r\nplan is the result of the first stage of the program, which has been an\r\ninvestigation of the information technologies available to support such\r\nan effort, the economic parameters of electronic service compared to\r\ntraditional library operations, and the business and political factors\r\naffecting the shift from print distribution to electronic networked\r\naccess.\r\n\r\nThe strategic plan envisions a combination of publicly searchable access\r\ndatabases, image (and text) document collections stored on network \"file\r\nservers,\" local and remote network access, and an intellectual property\r\nmanagement-control system.  This combination of technology and\r\ninformation content is defined in this plan as an E-library or E-library\r\ncollection.  Some participating sponsors are already developing projects\r\nbased on MemRI's recommended directions.\r\n\r\nThe E-library strategy projected in this plan is a visionary one that can\r\nenable major changes and improvements in academic, public, and special\r\nlibrary service.  This vision is, though, one that can be realized with\r\ntoday's technology.  At the same time, it will challenge the political\r\nand social structure within which libraries operate:  in academic\r\nlibraries, the traditional emphasis on local collections, extending to\r\naccreditation issues; in public libraries, the potential of electronic\r\nbranch and central libraries fully available to the public; and for\r\nspecial libraries, new opportunities for shared collections and networks.\r\n\r\nThe environment in which this strategic plan has been developed is, at\r\nthe moment, dominated by a sense of library limits.  The continued\r\nexpansion and rapid growth of local academic library collections is now\r\nclearly at an end.  Corporate libraries, and even law libraries, are\r\nfaced with operating within a difficult economic climate, as well as with\r\nvery active competition from commercial information sources.  For\r\nexample, public libraries may be seen as a desirable but not critical\r\nmunicipal service in a time when the budgets of safety and health\r\nagencies are being cut back.\r\n\r\nFurther, libraries in general have a very high labor-to-cost ratio in\r\ntheir budgets, and labor costs are still increasing, notwithstanding\r\nautomation investments.  It is difficult for libraries to obtain capital,\r\nstartup, or seed funding for innovative activities, and those\r\ntechnology-intensive initiatives that offer the potential of decreased\r\nlabor costs can provoke the opposition of library staff.\r\n\r\nHowever, libraries have achieved some considerable successes in the past\r\ntwo decades by improving both their service and their credibility within\r\ntheir organizations--and these positive changes have been accomplished\r\nmostly with judicious use of information technologies.  The advances in\r\ncomputing and information technology have been well-chronicled:  the\r\ncontinuing precipitous drop in computing costs, the growth of the\r\nInternet and private networks, and the explosive increase in publicly\r\navailable information databases.\r\n\r\nFor example, OCLC has become one of the largest computer network\r\norganizations in the world by creating a cooperative cataloging network\r\nof more than 6,000 libraries worldwide.  On-line public access catalogs\r\nnow serve millions of users on more than 50,000 dedicated terminals in\r\nthe United States alone.  The University of California MELVYL on-line\r\ncatalog system has now expanded into an index database reference service\r\nand supports more than six million searches a year.  And, libraries have\r\nbecome the largest group of customers of CD-ROM publishing technology;\r\nmore than 30,000 optical media publications such as those offered by\r\nInfoTrac and Silver Platter are subscribed to by U.S. libraries.\r\n\r\nThis march of technology continues and in the next decade will result in\r\nfurther innovations that are extremely difficult to predict.  What is\r\nclear is that libraries can now go beyond automation of their order files\r\nand catalogs to automation of their collections themselves--and it is\r\npossible to circumvent the fiscal limitations that appear to obtain\r\ntoday.\r\n\r\nThis Electronic Library Strategic Plan recommends a paradigm shift in\r\nlibrary service, and demonstrates the steps necessary to provide improved\r\nlibrary services with limited capacities and operating investments.\r\n\r\nSESSION IV-A\r\n\r\nAnne KENNEY\r\n\r\nThe Cornell/Xerox Joint Study in Digital Preservation resulted in the\r\nrecording of 1,000 brittle books as 600-dpi digital images and the\r\nproduction, on demand, of high-quality and archivally sound paper\r\nreplacements.  The project, which was supported by the Commission on\r\nPreservation and Access, also investigated some of the issues surrounding\r\nscanning, storing, retrieving, and providing access to digital images in\r\na network environment.\r\n\r\nAnne Kenney will focus on some of the issues surrounding direct scanning\r\nas identified in the Cornell Xerox Project.  Among those to be discussed\r\nare:  image versus text capture; indexing and access; image-capture\r\ncapabilities; a comparison to photocopy and microfilm; production and\r\ncost analysis; storage formats, protocols, and standards; and the use of\r\nthis scanning technology for preservation purposes.\r\n\r\nThe 600-dpi digital images produced in the Cornell Xerox Project proved\r\nhighly acceptable for creating paper replacements of deteriorating\r\noriginals.  The 1,000 scanned volumes provided an array of image-capture\r\nchallenges that are common to nineteenth-century printing techniques and\r\nembrittled material, and that defy the use of text-conversion processes. \r\nThese challenges include diminished contrast between text and background,\r\nfragile and deteriorated pages, uneven printing, elaborate type faces,\r\nfaint and bold text adjacency, handwritten text and annotations, nonRoman\r\nlanguages, and a proliferation of illustrated material embedded in text. \r\nThe latter category included high-frequency and low-frequency halftones,\r\ncontinuous tone photographs, intricate mathematical drawings, maps,\r\netchings, reverse-polarity drawings, and engravings.\r\n\r\nThe Xerox prototype scanning system provided a number of important\r\nfeatures for capturing this diverse material.  Technicians used multiple\r\nthreshold settings, filters, line art and halftone definitions,\r\nautosegmentation, windowing, and software-editing programs to optimize\r\nimage capture.  At the same time, this project focused on production. \r\nThe goal was to make scanning as affordable and acceptable as\r\nphotocopying and microfilming for preservation reformatting.  A\r\ntime-and-cost study conducted during the last three months of this\r\nproject confirmed the economic viability of digital scanning, and these\r\nfindings will be discussed here.\r\n\r\nFrom the outset, the Cornell Xerox Project was predicated on the use of\r\nnonproprietary standards and the use of common protocols when standards\r\ndid not exist.  Digital files were created as TIFF images which were\r\ncompressed prior to storage using Group 4 CCITT compression.  The Xerox\r\nsoftware is MS DOS based and utilizes off-the shelf programs such as\r\nMicrosoft Windows and Wang Image Wizard.  The digital library is designed\r\nto be hardware-independent and to provide interchangeability with other\r\ninstitutions through network connections.  Access to the digital files\r\nthemselves is two-tiered:  Bibliographic records for the computer files\r\nare created in RLIN and Cornell's local system and access into the actual\r\ndigital images comprising a book is provided through a document control\r\nstructure and a networked image file-server, both of which will be\r\ndescribed.\r\n\r\nThe presentation will conclude with a discussion of some of the issues\r\nsurrounding the use of this technology as a preservation tool (storage,\r\nrefreshing, backup).\r\n\r\nPamela ANDRE and Judith ZIDAR\r\n\r\nThe National Agricultural Library (NAL) has had extensive experience with\r\nraster scanning of printed materials.  Since 1987, the Library has\r\nparticipated in the National Agricultural Text Digitizing Project (NATDP)\r\na cooperative effort between NAL and forty-five land grant university\r\nlibraries.  An overview of the project will be presented, giving its\r\nhistory and NAL's strategy for the future.\r\n\r\nAn in-depth discussion of NATDP will follow, including a description of\r\nthe scanning process, from the gathering of the printed materials to the\r\narchiving of the electronic pages.  The type of equipment required for a\r\nstand-alone scanning workstation and the importance of file management\r\nsoftware will be discussed.  Issues concerning the images themselves will\r\nbe addressed briefly, such as image format; black and white versus color;\r\ngray scale versus dithering; and resolution.\r\n\r\nAlso described will be a study currently in progress by NAL to evaluate\r\nthe usefulness of converting microfilm to electronic images in order to\r\nimprove access.  With the cooperation of Tuskegee University, NAL has\r\nselected three reels of microfilm from a collection of sixty-seven reels\r\ncontaining the papers, letters, and drawings of George Washington Carver. \r\nThe three reels were converted into 3,500 electronic images using a\r\nspecialized microfilm scanner.  The selection, filming, and indexing of\r\nthis material will be discussed.\r\n\r\nDonald WATERS\r\n\r\nProject Open Book, the Yale University Library's effort to convert 10,\r\n000 books from microfilm to digital imagery, is currently in an advanced\r\nstate of planning and organization.  The Yale Library has selected a\r\nmajor vendor to serve as a partner in the project and as systems\r\nintegrator.  In its proposal, the successful vendor helped isolate areas\r\nof risk and uncertainty as well as key issues to be addressed during the\r\nlife of the project.  The Yale Library is now poised to decide what\r\nmaterial it will convert to digital image form and to seek funding,\r\ninitially for the first phase and then for the entire project.\r\n\r\nThe proposal that Yale accepted for the implementation of Project Open\r\nBook will provide at the end of three phases a conversion subsystem,\r\nbrowsing stations distributed on the campus network within the Yale\r\nLibrary, a subsystem for storing 10,000 books at 200 and 600 dots per\r\ninch, and network access to the image printers.  Pricing for the system\r\nimplementation assumes the existence of Yale's campus ethernet network\r\nand its high-speed image printers, and includes other requisite hardware\r\nand software, as well as system integration services.  Proposed operating\r\ncosts include hardware and software maintenance, but do not include\r\nestimates for the facilities management of the storage devices and image\r\nservers.\r\n\r\nYale selected its vendor partner in a formal process, partly funded by\r\nthe Commission for Preservation and Access.  Following a request for\r\nproposal, the Yale Library selected two vendors as finalists to work with\r\nYale staff to generate a detailed analysis of requirements for Project\r\nOpen Book.  Each vendor used the results of the requirements analysis to\r\ngenerate and submit a formal proposal for the entire project.  This\r\ncompetitive process not only enabled the Yale Library to select its\r\nprimary vendor partner but also revealed much about the state of the\r\nimaging industry, about the varying, corporate commitments to the markets\r\nfor imaging technology, and about the varying organizational dynamics\r\nthrough which major companies are responding to and seeking to develop\r\nthese markets.\r\n\r\nProject Open Book is focused specifically on the conversion of images\r\nfrom microfilm to digital form.  The technology for scanning microfilm is\r\nreadily available but is changing rapidly.  In its project requirements,\r\nthe Yale Library emphasized features of the technology that affect the\r\ntechnical quality of digital image production and the costs of creating\r\nand storing the image library:  What levels of digital resolution can be\r\nachieved by scanning microfilm?  How does variation in the quality of\r\nmicrofilm, particularly in film produced to preservation standards,\r\naffect the quality of the digital images?  What technologies can an\r\noperator effectively and economically apply when scanning film to\r\nseparate two-up images and to control for and correct image\r\nimperfections?  How can quality control best be integrated into\r\ndigitizing work flow that includes document indexing and storage?\r\n\r\nThe actual and expected uses of digital images--storage, browsing,\r\nprinting, and OCR--help determine the standards for measuring their\r\nquality.  Browsing is especially important, but the facilities available\r\nfor readers to browse image documents is perhaps the weakest aspect of\r\nimaging technology and most in need of development.  As it defined its\r\nrequirements, the Yale Library concentrated on some fundamental aspects\r\nof usability for image documents:  Does the system have sufficient\r\nflexibility to handle the full range of document types, including\r\nmonographs, multi-part and multivolume sets, and serials, as well as\r\nmanuscript collections?  What conventions are necessary to identify a\r\ndocument uniquely for storage and retrieval?  Where is the database of\r\nrecord for storing bibliographic information about the image document? \r\nHow are basic internal structures of documents, such as pagination, made\r\naccessible to the reader?  How are the image documents physically\r\npresented on the screen to the reader?\r\n\r\nThe Yale Library designed Project Open Book on the assumption that\r\nmicrofilm is more than adequate as a medium for preserving the content of\r\ndeteriorated library materials.  As planning in the project has advanced,\r\nit is increasingly clear that the challenge of digital image technology\r\nand the key to the success of efforts like Project Open Book is to\r\nprovide a means of both preserving and improving access to those\r\ndeteriorated materials.\r\n\r\nSESSION IV-B\r\n\r\nGeorge THOMA\r\n\r\nIn the use of electronic imaging for document preservation, there are\r\nseveral issues to consider, such as:  ensuring adequate image quality,\r\nmaintaining substantial conversion rates (through-put), providing unique\r\nidentification for automated access and retrieval, and accommodating\r\nbound volumes and fragile material.\r\n\r\nTo maintain high image quality, image processing functions are required\r\nto correct the deficiencies in the scanned image.  Some commercially\r\navailable systems include these functions, while some do not.  The\r\nscanned raw image must be processed to correct contrast deficiencies--\r\nboth poor overall contrast resulting from light print and/or dark\r\nbackground, and variable contrast resulting from stains and\r\nbleed-through.  Furthermore, the scan density must be adequate to allow\r\nlegibility of print and sufficient fidelity in the pseudo-halftoned gray\r\nmaterial.  Borders or page-edge effects must be removed for both\r\ncompactibility and aesthetics.  Page skew must be corrected for aesthetic\r\nreasons and to enable accurate character recognition if desired. \r\nCompound images consisting of both two-toned text and gray-scale\r\nillustrations must be processed appropriately to retain the quality of\r\neach.\r\n\r\nSESSION IV-C\r\n\r\nJean BARONAS\r\n\r\nStandards publications being developed by scientists, engineers, and\r\nbusiness managers in Association for Information and Image Management\r\n(AIIM) standards committees can be applied to electronic image management\r\n(EIM) processes including:  document (image) transfer, retrieval and\r\nevaluation; optical disk and document scanning; and document design and\r\nconversion.  When combined with EIM system planning and operations,\r\nstandards can assist in generating image databases that are\r\ninterchangeable among a variety of systems.  The applications of\r\ndifferent approaches for image-tagging, indexing, compression, and\r\ntransfer often cause uncertainty concerning EIM system compatibility,\r\ncalibration, performance, and upward compatibility, until standard\r\nimplementation parameters are established.  The AIIM standards that are\r\nbeing developed for these applications can be used to decrease the\r\nuncertainty, successfully integrate imaging processes, and promote \"open\r\nsystems.\"  AIIM is an accredited American National Standards Institute\r\n(ANSI) standards developer with more than twenty committees comprised of\r\n300 volunteers representing users, vendors, and manufacturers.  The\r\nstandards publications that are developed in these committees have\r\nnational acceptance and provide the basis for international harmonization\r\nin the development of new International Organization for Standardization\r\n(ISO) standards.\r\n\r\nThis presentation describes the development of AIIM's EIM standards and a\r\nnew effort at AIIM, a database on standards projects in a wide framework\r\nof imaging industries including capture, recording, processing,\r\nduplication, distribution, display, evaluation, and preservation.  The\r\nAIIM Imagery Database will cover imaging standards being developed by\r\nmany organizations in many different countries.  It will contain\r\nstandards publications' dates, origins, related national and\r\ninternational projects, status, key words, and abstracts.  The ANSI Image\r\nTechnology Standards Board requested that such a database be established,\r\nas did the ISO/International Electrotechnical Commission Joint Task Force\r\non Imagery.  AIIM will take on the leadership role for the database and\r\ncoordinate its development with several standards developers.\r\n\r\nPatricia BATTIN\r\n\r\n     Characteristics of standards for digital imagery:\r\n\r\n          * Nature of digital technology implies continuing volatility.\r\n\r\n          * Precipitous standard-setting not possible and probably not\r\n          desirable.\r\n\r\n          * Standards are a complex issue involving the medium, the\r\n          hardware, the software, and the technical capacity for\r\n          reproductive fidelity and clarity.\r\n\r\n          * The prognosis for reliable archival standards (as defined by\r\n          librarians) in the foreseeable future is poor.\r\n\r\n     Significant potential and attractiveness of digital technology as a\r\n     preservation medium and access mechanism.\r\n\r\n     Productive use of digital imagery for preservation requires a\r\n     reconceptualizing of preservation principles in a volatile,\r\n     standardless world.\r\n\r\n     Concept of managing continuing access in the digital environment\r\n     rather than focusing on the permanence of the medium and long-term\r\n     archival standards developed for the analog world.\r\n\r\n     Transition period:  How long and what to do?\r\n\r\n          *  Redefine \"archival.\"\r\n\r\n          *  Remove the burden of \"archival copy\" from paper artifacts.\r\n\r\n          *  Use digital technology for storage, develop management\r\n          strategies for refreshing medium, hardware and software.\r\n\r\n          *  Create acid-free paper copies for transition period backup\r\n          until we develop reliable procedures for ensuring continuing\r\n          access to digital files.\r\n\r\nSESSION IV-D\r\n\r\nStuart WEIBEL            The Role of SGML Markup in the CORE Project (6)\r\n\r\nThe emergence of high-speed telecommunications networks as a basic\r\nfeature of the scholarly workplace is driving the demand for electronic\r\ndocument delivery.  Three distinct categories of electronic\r\npublishing/republishing are necessary to support access demands in this\r\nemerging environment:\r\n\r\n     1.)  Conversion of paper or microfilm archives to electronic format\r\n     2.)  Conversion of electronic files to formats tailored to\r\n          electronic retrieval and display\r\n     3.)  Primary electronic publishing (materials for which the\r\n          electronic version is the primary format)\r\n\r\nOCLC has experimental or product development activities in each of these\r\nareas.  Among the challenges that lie ahead is the integration of these\r\nthree types of information stores in coherent distributed systems.\r\n\r\nThe CORE (Chemistry Online Retrieval Experiment) Project is a model for\r\nthe conversion of large text and graphics collections for which\r\nelectronic typesetting files are available (category 2).  The American\r\nChemical Society has made available computer typography files dating from\r\n1980 for its twenty journals.  This collection of some 250 journal-years\r\nis being converted to an electronic format that will be accessible\r\nthrough several end-user applications.\r\n\r\nThe use of Standard Generalized Markup Language (SGML) offers the means\r\nto capture the structural richness of the original articles in a way that\r\nwill support a variety of retrieval, navigation, and display options\r\nnecessary to navigate effectively in very large text databases.\r\n\r\nAn SGML document consists of text that is marked up with descriptive tags\r\nthat specify the function of a given element within the document.  As a\r\nformal language construct, an SGML document can be parsed against a\r\ndocument-type definition (DTD) that unambiguously defines what elements\r\nare allowed and where in the document they can (or must) occur.  This\r\nformalized map of article structure allows the user interface design to\r\nbe uncoupled from the underlying database system, an important step\r\ntoward interoperability.  Demonstration of this separability is a part of\r\nthe CORE project, wherein user interface designs born of very different\r\nphilosophies will access the same database.\r\n\r\nNOTES:\r\n     (6)  The CORE project is a collaboration among Cornell University's\r\n     Mann Library, Bell Communications Research (Bellcore), the American\r\n     Chemical Society (ACS), the Chemical Abstracts Service (CAS), and\r\n     OCLC.\r\n\r\nMichael LESK                  The CORE Electronic Chemistry Library\r\n\r\nA major on-line file of chemical journal literature complete with\r\ngraphics is being developed to test the usability of fully electronic\r\naccess to documents, as a joint project of Cornell University, the\r\nAmerican Chemical Society, the Chemical Abstracts Service, OCLC, and\r\nBellcore (with additional support from Sun Microsystems, Springer-Verlag,\r\nDigitaI Equipment Corporation, Sony Corporation of America, and Apple\r\nComputers).  Our file contains the American Chemical Society's on-line\r\njournals, supplemented with the graphics from the paper publication.  The\r\nindexing of the articles from Chemical Abstracts Documents is available\r\nin both image and text format, and several different interfaces can be\r\nused.  Our goals are (1) to assess the effectiveness and acceptability of\r\nelectronic access to primary journals as compared with paper, and (2) to\r\nidentify the most desirable functions of the user interface to an\r\nelectronic system of journals, including in particular a comparison of\r\npage-image display with ASCII display interfaces.  Early experiments with\r\nchemistry students on a variety of tasks suggest that searching tasks are\r\ncompleted much faster with any electronic system than with paper, but\r\nthat for reading all versions of the articles are roughly equivalent.\r\n\r\nPamela ANDRE and Judith ZIDAR\r\n\r\nText conversion is far more expensive and time-consuming than image\r\ncapture alone.  NAL's experience with optical character recognition (OCR)\r\nwill be related and compared with the experience of having text rekeyed. \r\nWhat factors affect OCR accuracy?  How accurate does full text have to be\r\nin order to be useful?  How do different users react to imperfect text? \r\nThese are questions that will be explored.  For many, a service bureau\r\nmay be a better solution than performing the work inhouse; this will also\r\nbe discussed.\r\n\r\nSESSION VI\r\n\r\nMarybeth PETERS\r\n\r\nCopyright law protects creative works.  Protection granted by the law to\r\nauthors and disseminators of works includes the right to do or authorize\r\nthe following:  reproduce the work, prepare derivative works, distribute\r\nthe work to the public, and publicly perform or display the work.  In\r\naddition, copyright owners of sound recordings and computer programs have\r\nthe right to control rental of their works.  These rights are not\r\nunlimited; there are a number of exceptions and limitations.\r\n\r\nAn electronic environment places strains on the copyright system. \r\nCopyright owners want to control uses of their work and be paid for any\r\nuse; the public wants quick and easy access at little or no cost.  The\r\nmarketplace is working in this area.  Contracts, guidelines on electronic\r\nuse, and collective licensing are in use and being refined.\r\n\r\nIssues concerning the ability to change works without detection are more\r\ndifficult to deal with.  Questions concerning the integrity of the work\r\nand the status of the changed version under the copyright law are to be\r\naddressed.  These are public policy issues which require informed\r\ndialogue.\r\n\r\n\r\n               ***   ***   ***   ******   ***   ***   ***\r\n\r\n\r\n                Appendix III:  DIRECTORY OF PARTICIPANTS\r\n                         \r\n\r\nPRESENTERS:\r\n\r\n     Pamela Q.J. Andre\r\n     Associate Director, Automation\r\n     National Agricultural Library\r\n     10301 Baltimore Boulevard\r\n     Beltsville, MD 20705-2351\r\n     Phone:  (301) 504-6813\r\n     Fax:  (301) 504-7473\r\n     E-mail:  INTERNET:  PANDRE@ASRR.ARSUSDA.GOV\r\n\r\n     Jean Baronas, Senior Manager\r\n     Department of Standards and Technology\r\n     Association for Information and Image Management (AIIM)\r\n     1100 Wayne Avenue, Suite 1100\r\n     Silver Spring, MD 20910\r\n     Phone:  (301) 587-8202\r\n     Fax:  (301) 587-2711\r\n     \r\n     Patricia Battin, President\r\n     The Commission on Preservation and Access\r\n     1400 16th Street, N.W.\r\n     Suite 740\r\n     Washington, DC 20036-2217\r\n     Phone:  (202) 939-3400\r\n     Fax:  (202) 939-3407\r\n     E-mail:  CPA@GWUVM.BITNET\r\n\r\n     Howard Besser\r\n     Centre Canadien d'Architecture\r\n     (Canadian Center for Architecture)\r\n     1920, rue Baile\r\n     Montreal, Quebec H3H 2S6\r\n     CANADA\r\n     Phone:  (514) 939-7001\r\n     Fax:  (514) 939-7020\r\n     E-mail:  howard@lis.pitt.edu\r\n\r\n     Edwin B. Brownrigg, Executive Director\r\n     Memex Research Institute\r\n     422 Bonita Avenue\r\n     Roseville, CA 95678\r\n     Phone:  (916) 784-2298\r\n     Fax:  (916) 786-7559\r\n     E-mail:  BITNET:  MEMEX@CALSTATE.2\r\n\r\n     Eric M. Calaluca, Vice President\r\n     Chadwyck-Healey, Inc.\r\n     1101 King Street\r\n     Alexandria, VA 223l4\r\n     Phone:  (800) 752-05l5\r\n     Fax:  (703) 683-7589\r\n\r\n     James Daly\r\n     4015 Deepwood Road\r\n     Baltimore, MD 21218-1404\r\n     Phone:  (410) 235-0763\r\n\r\n     Ricky Erway, Associate Coordinator\r\n     American Memory\r\n     Library of Congress\r\n     Phone:  (202) 707-6233\r\n     Fax:  (202) 707-3764\r\n\r\n     Carl Fleischhauer, Coordinator\r\n     American Memory\r\n     Library of Congress\r\n     Phone:  (202) 707-6233\r\n     Fax:  (202) 707-3764\r\n\r\n     Joanne Freeman\r\n     2000 Jefferson Park Avenue, No. 7\r\n     Charlottesville, VA  22903\r\n     \r\n     Prosser Gifford\r\n     Director for Scholarly Programs\r\n     Library of Congress\r\n     Phone:  (202) 707-1517\r\n     Fax:  (202) 707-9898\r\n     E-mail:  pgif@seq1.loc.gov\r\n\r\n     Jacqueline Hess, Director\r\n     National Demonstration Laboratory\r\n       for Interactive Information Technologies\r\n     Library of Congress\r\n     Phone:  (202) 707-4157\r\n     Fax:  (202) 707-2829\r\n     \r\n     Susan Hockey, Director\r\n     Center for Electronic Texts in the Humanities (CETH)\r\n     Alexander Library\r\n     Rutgers University\r\n     169 College Avenue\r\n     New Brunswick, NJ 08903\r\n     Phone:  (908) 932-1384\r\n     Fax:  (908) 932-1386\r\n     E-mail:  hockey@zodiac.rutgers.edu\r\n\r\n     William L. Hooton, Vice President\r\n     Business & Technical Development\r\n       Imaging & Information Systems Group\r\n     I-NET\r\n     6430 Rockledge Drive, Suite 400\r\n     Bethesda, MD 208l7\r\n     Phone:  (301) 564-6750\r\n     Fax:  (513) 564-6867\r\n\r\n     Anne R. Kenney, Associate Director\r\n     Department of Preservation and Conservation\r\n     701 Olin Library\r\n     Cornell University\r\n     Ithaca, NY 14853\r\n     Phone:  (607) 255-6875\r\n     Fax:  (607) 255-9346\r\n     E-mail:  LYDY@CORNELLA.BITNET\r\n\r\n     Ronald L. Larsen\r\n     Associate Director for Information Technology\r\n     University of Maryland at College Park\r\n     Room B0224, McKeldin Library\r\n     College Park, MD 20742-7011\r\n     Phone:  (301) 405-9194\r\n     Fax:  (301) 314-9865\r\n     E-mail:  rlarsen@libr.umd.edu\r\n\r\n     Maria L. Lebron, Managing Editor\r\n     The Online Journal of Current Clinical Trials\r\n     l333 H Street, N.W.\r\n     Washington, DC 20005\r\n     Phone:  (202) 326-6735\r\n     Fax:  (202) 842-2868\r\n     E-mail:  PUBSAAAS@GWUVM.BITNET\r\n\r\n     Michael Lesk, Executive Director\r\n     Computer Science Research\r\n     Bell Communications Research, Inc.\r\n     Rm 2A-385\r\n     445 South Street\r\n     Morristown, NJ 07960-l9l0     \r\n     Phone:  (201) 829-4070\r\n     Fax:  (201) 829-5981\r\n     E-mail:  lesk@bellcore.com (Internet) or bellcore!lesk (uucp)\r\n\r\n     Clifford A. Lynch\r\n     Director, Library Automation\r\n     University of California,\r\n        Office of the President\r\n     300 Lakeside Drive, 8th Floor\r\n     Oakland, CA 94612-3350\r\n     Phone:  (510) 987-0522\r\n     Fax:  (510) 839-3573\r\n     E-mail:  calur@uccmvsa\r\n\r\n     Avra Michelson\r\n     National Archives and Records Administration\r\n     NSZ Rm. 14N\r\n     7th & Pennsylvania, N.W.\r\n     Washington, D.C. 20408\r\n     Phone:  (202) 501-5544\r\n     Fax:  (202) 501-5533\r\n     E-mail:  tmi@cu.nih.gov\r\n     \r\n     Elli Mylonas, Managing Editor\r\n     Perseus Project\r\n     Department of the Classics\r\n     Harvard University\r\n     319 Boylston Hall\r\n     Cambridge, MA 02138\r\n     Phone:  (617) 495-9025, (617) 495-0456 (direct)\r\n     Fax:  (617) 496-8886\r\n     E-mail:  Elli@IKAROS.Harvard.EDU or elli@wjh12.harvard.edu\r\n\r\n     David Woodley Packard\r\n     Packard Humanities Institute\r\n     300 Second Street, Suite 201\r\n     Los Altos, CA 94002\r\n     Phone:  (415) 948-0150 (PHI)\r\n     Fax:  (415) 948-5793\r\n\r\n     Lynne K. Personius, Assistant Director\r\n     Cornell Information Technologies for\r\n      Scholarly Information Sources\r\n     502 Olin Library\r\n     Cornell University\r\n     Ithaca, NY 14853\r\n     Phone:  (607) 255-3393\r\n     Fax:  (607) 255-9346\r\n     E-mail:  JRN@CORNELLC.BITNET\r\n\r\n     Marybeth Peters\r\n     Policy Planning Adviser to the\r\n       Register of Copyrights\r\n     Library of Congress\r\n     Office LM 403\r\n     Phone:  (202) 707-8350\r\n     Fax:  (202) 707-8366\r\n\r\n     C. Michael Sperberg-McQueen\r\n     Editor, Text Encoding Initiative\r\n     Computer Center (M/C 135)\r\n     University of Illinois at Chicago\r\n     Box 6998\r\n     Chicago, IL 60680\r\n     Phone:  (312) 413-0317\r\n     Fax:  (312) 996-6834\r\n     E-mail:  u35395@uicvm..cc.uic.edu or u35395@uicvm.bitnet\r\n\r\n     George R. Thoma, Chief\r\n     Communications Engineering Branch\r\n     National Library of Medicine\r\n     8600 Rockville Pike\r\n     Bethesda, MD 20894\r\n     Phone:  (301) 496-4496\r\n     Fax:  (301) 402-0341\r\n     E-mail:  thoma@lhc.nlm.nih.gov\r\n\r\n     Dorothy Twohig, Editor\r\n     The Papers of George Washington\r\n     504 Alderman Library\r\n     University of Virginia\r\n     Charlottesville, VA 22903-2498\r\n     Phone:  (804) 924-0523\r\n     Fax:  (804) 924-4337\r\n\r\n     Susan H. Veccia, Team leader\r\n     American Memory, User Evaluation\r\n     Library of Congress\r\n     American Memory Evaluation Project\r\n     Phone:  (202) 707-9104\r\n     Fax:  (202) 707-3764\r\n     E-mail:  svec@seq1.loc.gov\r\n\r\n     Donald J. Waters, Head\r\n     Systems Office\r\n     Yale University Library\r\n     New Haven, CT 06520\r\n     Phone:  (203) 432-4889\r\n     Fax:  (203) 432-7231\r\n     E-mail:  DWATERS@YALEVM.BITNET or DWATERS@YALEVM.YCC.YALE.EDU\r\n\r\n     Stuart Weibel, Senior Research Scientist\r\n     OCLC\r\n     6565 Frantz Road\r\n     Dublin, OH 43017\r\n     Phone:  (614) 764-608l\r\n     Fax:  (614) 764-2344\r\n     E-mail:  INTERNET:  Stu@rsch.oclc.org\r\n\r\n     Robert G. Zich\r\n     Special Assistant to the Associate Librarian\r\n       for Special Projects\r\n     Library of Congress\r\n     Phone:  (202) 707-6233\r\n     Fax:  (202) 707-3764\r\n     E-mail:  rzic@seq1.loc.gov\r\n\r\n     Judith A. Zidar, Coordinator\r\n     National Agricultural Text Digitizing Program\r\n     Information Systems Division\r\n     National Agricultural Library\r\n     10301 Baltimore Boulevard\r\n     Beltsville, MD 20705-2351\r\n     Phone:  (301) 504-6813 or 504-5853\r\n     Fax:  (301) 504-7473\r\n     E-mail:  INTERNET:  JZIDAR@ASRR.ARSUSDA.GOV\r\n\r\n\r\nOBSERVERS:\r\n\r\n     Helen Aguera, Program Officer\r\n     Division of Research\r\n     Room 318\r\n     National Endowment for the Humanities\r\n     1100 Pennsylvania Avenue, N.W.\r\n     Washington, D.C. 20506\r\n     Phone:  (202) 786-0358\r\n     Fax:  (202) 786-0243\r\n\r\n     M. Ellyn Blanton, Deputy Director\r\n     National Demonstration Laboratory\r\n       for Interactive Information Technologies\r\n     Library of Congress\r\n     Phone:  (202) 707-4157\r\n     Fax:  (202) 707-2829\r\n\r\n     Charles M. Dollar\r\n     National Archives and Records Administration\r\n     NSZ Rm. 14N\r\n     7th & Pennsylvania, N.W.\r\n     Washington, DC 20408\r\n     Phone:  (202) 501-5532\r\n     Fax:  (202) 501-5512\r\n\r\n     Jeffrey Field, Deputy to the Director\r\n     Division of Preservation and Access\r\n     Room 802\r\n     National Endowment for the Humanities\r\n     1100 Pennsylvania Avenue, N.W.\r\n     Washington, DC 20506\r\n     Phone:  (202) 786-0570\r\n     Fax:  (202) 786-0243\r\n\r\n     Lorrin Garson\r\n     American Chemical Society\r\n     Research and Development Department\r\n     1155 16th Street, N.W.\r\n     Washington, D.C. 20036\r\n     Phone:  (202) 872-4541\r\n     Fax:  E-mail:  INTERNET:  LRG96@ACS.ORG\r\n\r\n     William M. Holmes, Jr.\r\n     National Archives and Records Administration\r\n     NSZ Rm. 14N\r\n     7th & Pennsylvania, N.W.\r\n     Washington, DC 20408\r\n     Phone:  (202) 501-5540\r\n     Fax:  (202) 501-5512\r\n     E-mail:  WHOLMES@AMERICAN.EDU\r\n\r\n     Sperling Martin\r\n     Information Resource Management\r\n     20030 Doolittle Street\r\n     Gaithersburg, MD 20879\r\n     Phone:  (301) 924-1803\r\n\r\n     Michael Neuman, Director\r\n     The Center for Text and Technology\r\n     Academic Computing Center\r\n     238 Reiss Science Building\r\n     Georgetown University\r\n     Washington, DC 20057\r\n     Phone:  (202) 687-6096\r\n     Fax:  (202) 687-6003\r\n     E-mail:  neuman@guvax.bitnet, neuman@guvax.georgetown.edu\r\n\r\n     Barbara Paulson, Program Officer\r\n     Division of Preservation and Access\r\n     Room 802\r\n     National Endowment for the Humanities\r\n     1100 Pennsylvania Avenue, N.W.\r\n     Washington, DC 20506\r\n     Phone:  (202) 786-0577\r\n     Fax:  (202) 786-0243\r\n     \r\n     Allen H. Renear\r\n     Senior Academic Planning Analyst\r\n     Brown University Computing and Information Services\r\n     115 Waterman Street\r\n     Campus Box 1885\r\n     Providence, R.I. 02912\r\n     Phone:  (401) 863-7312\r\n     Fax:  (401) 863-7329\r\n     E-mail:  BITNET:  Allen@BROWNVM or           \r\n     INTERNET:  Allen@brownvm.brown.edu\r\n\r\n     Susan M. Severtson, President\r\n     Chadwyck-Healey, Inc.\r\n     1101 King Street\r\n     Alexandria, VA 223l4\r\n     Phone:  (800) 752-05l5\r\n     Fax:  (703) 683-7589     \r\n\r\n     Frank Withrow\r\n     U.S. Department of Education\r\n     555 New Jersey Avenue, N.W.\r\n     Washington, DC 20208-5644\r\n     Phone:  (202) 219-2200\r\n     Fax:  (202) 219-2106\r\n\r\n\r\n(LC STAFF)\r\n     \r\n     Linda L. Arret\r\n     Machine-Readable Collections Reading Room LJ 132\r\n     (202) 707-1490\r\n\r\n     John D. Byrum, Jr.\r\n     Descriptive Cataloging Division LM 540\r\n     (202) 707-5194\r\n\r\n     Mary Jane Cavallo\r\n     Science and Technology Division LA 5210\r\n     (202) 707-1219\r\n\r\n     Susan Thea David\r\n     Congressional Research Service LM 226\r\n     (202) 707-7169\r\n\r\n     Robert Dierker\r\n     Senior Adviser for Multimedia Activities LM 608\r\n     (202) 707-6151\r\n\r\n     William W. Ellis\r\n     Associate Librarian for Science and Technology LM 611\r\n     (202) 707-6928\r\n\r\n     Ronald Gephart\r\n     Manuscript Division LM 102\r\n     (202) 707-5097\r\n\r\n     James Graber\r\n     Information Technology Services LM G51\r\n     (202) 707-9628\r\n\r\n     Rich Greenfield\r\n     American Memory LM 603\r\n     (202) 707-6233\r\n\r\n     Rebecca Guenther\r\n     Network Development LM 639\r\n     (202) 707-5092\r\n\r\n     Kenneth E. Harris\r\n     Preservation LM G21\r\n     (202) 707-5213\r\n\r\n     Staley Hitchcock\r\n     Manuscript Division LM 102\r\n     (202) 707-5383\r\n\r\n     Bohdan Kantor\r\n     Office of Special Projects LM 612\r\n     (202) 707-0180\r\n\r\n     John W. Kimball, Jr\r\n     Machine-Readable Collections Reading Room LJ 132\r\n     (202) 707-6560\r\n\r\n     Basil Manns\r\n     Information Technology Services LM G51\r\n     (202) 707-8345\r\n\r\n     Sally Hart McCallum\r\n     Network Development LM 639\r\n     (202) 707-6237\r\n\r\n     Dana J. Pratt\r\n     Publishing Office LM 602\r\n     (202) 707-6027\r\n\r\n     Jane Riefenhauser\r\n     American Memory LM 603\r\n     (202) 707-6233\r\n\r\n     William Z. Schenck\r\n     Collections Development LM 650\r\n     (202) 707-7706\r\n\r\n     Chandru J. Shahani\r\n     Preservation Research and Testing Office (R&T) LM G38\r\n     (202) 707-5607\r\n\r\n     William J. Sittig\r\n     Collections Development LM 650\r\n     (202) 707-7050\r\n\r\n     Paul Smith\r\n     Manuscript Division LM 102\r\n     (202) 707-5097\r\n\r\n     James L. Stevens\r\n     Information Technology Services LM G51\r\n     (202) 707-9688\r\n\r\n     Karen Stuart\r\n     Manuscript Division LM 130\r\n     (202) 707-5389\r\n\r\n     Tamara Swora\r\n     Preservation Microfilming Office LM G05\r\n     (202) 707-6293\r\n\r\n     Sarah Thomas\r\n     Collections Cataloging LM 642\r\n     (202) 707-5333\r\n\r\n\r\n                                   END\r\n      *************************************************************\r\n\r\nNote:  This file has been edited for use on computer networks.  This\r\nediting required the removal of diacritics, underlining, and fonts such\r\nas italics and bold.  \r\n\r\nkde 11/92\r\n\r\n[A few of the italics (when used for emphasis) were replaced by CAPS mh]\r\n\r\n*End of The Project Gutenberg Etext of LOC WORKSHOP ON ELECTRONIC ETEXTS\r\n\r\n"
  },
  {
    "path": "tests/testdata/monkey",
    "content": "znxcvnmz,xvnm.,zxcnv.,xcn.z,vn.zvn.zxcvn.,zxcn.vn.v,znm.,vnzx.,vnzxc.vn.z,vnz.,nv.z,nvmzxc,nvzxcvcnm.,vczxvnzxcnvmxc.zmcnvzm.,nvmc,nzxmc,vn.mnnmzxc,vnxcnmv,znvzxcnmv,.xcnvm,zxcnzxv.zx,qweryweurqioweupropqwutioweupqrioweutiopweuriopweuriopqwurioputiopqwuriowuqerioupqweropuweropqwurweuqriopuropqwuriopuqwriopuqweopruioqweurqweuriouqweopruioupqiytioqtyiowtyqptypryoqweutioioqtweqruowqeytiowquiourowetyoqwupiotweuqiorweuqroipituqwiorqwtioweuriouytuioerytuioweryuitoweytuiweyuityeruirtyuqriqweuropqweiruioqweurioqwuerioqwyuituierwotueryuiotweyrtuiwertyioweryrueioqptyioruyiopqwtjkasdfhlafhlasdhfjklashjkfhasjklfhklasjdfhklasdhfjkalsdhfklasdhjkflahsjdkfhklasfhjkasdfhasfjkasdhfklsdhalghhaf;hdklasfhjklashjklfasdhfasdjklfhsdjklafsd;hkldadfjjklasdhfjasddfjklfhakjklasdjfkl;asdjfasfljasdfhjklasdfhjkaghjkashf;djfklasdjfkljasdklfjklasdjfkljasdfkljaklfj"
  },
  {
    "path": "tests/testdata/plrabn12.txt",
    "content": "\r\nThis is the February 1992 Project Gutenberg release of: \r\n \r\nParadise Lost by John Milton \r\n \r\nThe oldest etext known to Project Gutenberg (ca. 1964-1965) \r\n(If you know of any older ones, please let us know.) \r\n \r\n \r\nIntroduction  (one page) \r\n \r\nThis etext was originally created in 1964-1965 according to Dr. \r\nJoseph Raben of Queens College, NY, to whom it is attributed by \r\nProject Gutenberg.  We had heard of this etext for years but it \r\nwas not until 1991 that we actually managed to track it down to \r\na specific location, and then it took months to convince people \r\nto let us have a copy, then more months for them actually to do \r\nthe copying and get it to us.  Then another month to convert to \r\nsomething we could massage with our favorite 486 in DOS.  After \r\nthat is was only a matter of days to get it into this shape you \r\nwill see below.  The original was, of course, in CAPS only, and \r\nso were all the other etexts of the 60's and early 70's.  Don't \r\nlet anyone fool you into thinking any etext with both upper and \r\nlower case is an original; all those original Project Gutenberg \r\netexts were also in upper case and were translated or rewritten \r\nmany times to get them into their current condition.  They have \r\nbeen worked on by many people throughout the world. \r\n \r\nIn the course of our searches for Professor Raben and his etext \r\nwe were never able to determine where copies were or which of a \r\nvariety of editions he may have used as a source.  We did get a \r\nlittle information here and there, but even after we received a \r\ncopy of the etext we were unwilling to release it without first \r\ndetermining that it was in fact Public Domain and finding Raben \r\nto verify this and get his permission.  Interested enough, in a \r\ntotally unrelated action to our searches for him, the professor \r\nsubscribed to the Project Gutenberg listserver and we happened, \r\nby accident, to notice his name. (We don't really look at every \r\nsubscription request as the computers usually handle them.) The \r\netext was then properly identified, copyright analyzed, and the \r\ncurrent edition prepared. \r\n \r\nTo give you an estimation of the difference in the original and \r\nwhat we have today:  the original was probably entered on cards \r\ncommonly known at the time as \"IBM cards\" (Do Not Fold, Spindle \r\nor Mutilate) and probably took in excess of 100,000 of them.  A \r\nsingle card could hold 80 characters (hence 80 characters is an \r\naccepted standard for so many computer margins), and the entire \r\noriginal edition we received in all caps was over 800,000 chars \r\nin length, including line enumeration, symbols for caps and the \r\npunctuation marks, etc., since they were not available keyboard \r\ncharacters at the time (probably the keyboards operated at baud \r\nrates of around 113, meaning the typists had to type slowly for \r\nthe keyboard to keep up). \r\n \r\nThis is the second version of Paradise Lost released by Project \r\nGutenberg.  The first was released as our October, 1991 etext. \r\n \r\n \r\n \r\n \r\n \r\nParadise Lost \r\n \r\n \r\n \r\n \r\nBook I \r\n \r\n \r\nOf Man's first disobedience, and the fruit \r\nOf that forbidden tree whose mortal taste \r\nBrought death into the World, and all our woe, \r\nWith loss of Eden, till one greater Man \r\nRestore us, and regain the blissful seat, \r\nSing, Heavenly Muse, that, on the secret top \r\nOf Oreb, or of Sinai, didst inspire \r\nThat shepherd who first taught the chosen seed \r\nIn the beginning how the heavens and earth \r\nRose out of Chaos: or, if Sion hill \r\nDelight thee more, and Siloa's brook that flowed \r\nFast by the oracle of God, I thence \r\nInvoke thy aid to my adventurous song, \r\nThat with no middle flight intends to soar \r\nAbove th' Aonian mount, while it pursues \r\nThings unattempted yet in prose or rhyme. \r\nAnd chiefly thou, O Spirit, that dost prefer \r\nBefore all temples th' upright heart and pure, \r\nInstruct me, for thou know'st; thou from the first \r\nWast present, and, with mighty wings outspread, \r\nDove-like sat'st brooding on the vast Abyss, \r\nAnd mad'st it pregnant: what in me is dark \r\nIllumine, what is low raise and support; \r\nThat, to the height of this great argument, \r\nI may assert Eternal Providence, \r\nAnd justify the ways of God to men. \r\n  Say first--for Heaven hides nothing from thy view, \r\nNor the deep tract of Hell--say first what cause \r\nMoved our grand parents, in that happy state, \r\nFavoured of Heaven so highly, to fall off \r\nFrom their Creator, and transgress his will \r\nFor one restraint, lords of the World besides. \r\nWho first seduced them to that foul revolt? \r\n  Th' infernal Serpent; he it was whose guile, \r\nStirred up with envy and revenge, deceived \r\nThe mother of mankind, what time his pride \r\nHad cast him out from Heaven, with all his host \r\nOf rebel Angels, by whose aid, aspiring \r\nTo set himself in glory above his peers, \r\nHe trusted to have equalled the Most High, \r\nIf he opposed, and with ambitious aim \r\nAgainst the throne and monarchy of God, \r\nRaised impious war in Heaven and battle proud, \r\nWith vain attempt. Him the Almighty Power \r\nHurled headlong flaming from th' ethereal sky, \r\nWith hideous ruin and combustion, down \r\nTo bottomless perdition, there to dwell \r\nIn adamantine chains and penal fire, \r\nWho durst defy th' Omnipotent to arms. \r\n  Nine times the space that measures day and night \r\nTo mortal men, he, with his horrid crew, \r\nLay vanquished, rolling in the fiery gulf, \r\nConfounded, though immortal. But his doom \r\nReserved him to more wrath; for now the thought \r\nBoth of lost happiness and lasting pain \r\nTorments him: round he throws his baleful eyes, \r\nThat witnessed huge affliction and dismay, \r\nMixed with obdurate pride and steadfast hate. \r\nAt once, as far as Angels ken, he views \r\nThe dismal situation waste and wild. \r\nA dungeon horrible, on all sides round, \r\nAs one great furnace flamed; yet from those flames \r\nNo light; but rather darkness visible \r\nServed only to discover sights of woe, \r\nRegions of sorrow, doleful shades, where peace \r\nAnd rest can never dwell, hope never comes \r\nThat comes to all, but torture without end \r\nStill urges, and a fiery deluge, fed \r\nWith ever-burning sulphur unconsumed. \r\nSuch place Eternal Justice has prepared \r\nFor those rebellious; here their prison ordained \r\nIn utter darkness, and their portion set, \r\nAs far removed from God and light of Heaven \r\nAs from the centre thrice to th' utmost pole. \r\nOh how unlike the place from whence they fell! \r\nThere the companions of his fall, o'erwhelmed \r\nWith floods and whirlwinds of tempestuous fire, \r\nHe soon discerns; and, weltering by his side, \r\nOne next himself in power, and next in crime, \r\nLong after known in Palestine, and named \r\nBeelzebub. To whom th' Arch-Enemy, \r\nAnd thence in Heaven called Satan, with bold words \r\nBreaking the horrid silence, thus began:-- \r\n  \"If thou beest he--but O how fallen! how changed \r\nFrom him who, in the happy realms of light \r\nClothed with transcendent brightness, didst outshine \r\nMyriads, though bright!--if he whom mutual league, \r\nUnited thoughts and counsels, equal hope \r\nAnd hazard in the glorious enterprise \r\nJoined with me once, now misery hath joined \r\nIn equal ruin; into what pit thou seest \r\nFrom what height fallen: so much the stronger proved \r\nHe with his thunder; and till then who knew \r\nThe force of those dire arms? Yet not for those, \r\nNor what the potent Victor in his rage \r\nCan else inflict, do I repent, or change, \r\nThough changed in outward lustre, that fixed mind, \r\nAnd high disdain from sense of injured merit, \r\nThat with the Mightiest raised me to contend, \r\nAnd to the fierce contentions brought along \r\nInnumerable force of Spirits armed, \r\nThat durst dislike his reign, and, me preferring, \r\nHis utmost power with adverse power opposed \r\nIn dubious battle on the plains of Heaven, \r\nAnd shook his throne. What though the field be lost? \r\nAll is not lost--the unconquerable will, \r\nAnd study of revenge, immortal hate, \r\nAnd courage never to submit or yield: \r\nAnd what is else not to be overcome? \r\nThat glory never shall his wrath or might \r\nExtort from me. To bow and sue for grace \r\nWith suppliant knee, and deify his power \r\nWho, from the terror of this arm, so late \r\nDoubted his empire--that were low indeed; \r\nThat were an ignominy and shame beneath \r\nThis downfall; since, by fate, the strength of Gods, \r\nAnd this empyreal sybstance, cannot fail; \r\nSince, through experience of this great event, \r\nIn arms not worse, in foresight much advanced, \r\nWe may with more successful hope resolve \r\nTo wage by force or guile eternal war, \r\nIrreconcilable to our grand Foe, \r\nWho now triumphs, and in th' excess of joy \r\nSole reigning holds the tyranny of Heaven.\" \r\n  So spake th' apostate Angel, though in pain, \r\nVaunting aloud, but racked with deep despair; \r\nAnd him thus answered soon his bold compeer:-- \r\n  \"O Prince, O Chief of many throned Powers \r\nThat led th' embattled Seraphim to war \r\nUnder thy conduct, and, in dreadful deeds \r\nFearless, endangered Heaven's perpetual King, \r\nAnd put to proof his high supremacy, \r\nWhether upheld by strength, or chance, or fate, \r\nToo well I see and rue the dire event \r\nThat, with sad overthrow and foul defeat, \r\nHath lost us Heaven, and all this mighty host \r\nIn horrible destruction laid thus low, \r\nAs far as Gods and heavenly Essences \r\nCan perish: for the mind and spirit remains \r\nInvincible, and vigour soon returns, \r\nThough all our glory extinct, and happy state \r\nHere swallowed up in endless misery. \r\nBut what if he our Conqueror (whom I now \r\nOf force believe almighty, since no less \r\nThan such could have o'erpowered such force as ours) \r\nHave left us this our spirit and strength entire, \r\nStrongly to suffer and support our pains, \r\nThat we may so suffice his vengeful ire, \r\nOr do him mightier service as his thralls \r\nBy right of war, whate'er his business be, \r\nHere in the heart of Hell to work in fire, \r\nOr do his errands in the gloomy Deep? \r\nWhat can it the avail though yet we feel \r\nStrength undiminished, or eternal being \r\nTo undergo eternal punishment?\" \r\n  Whereto with speedy words th' Arch-Fiend replied:-- \r\n\"Fallen Cherub, to be weak is miserable, \r\nDoing or suffering: but of this be sure-- \r\nTo do aught good never will be our task, \r\nBut ever to do ill our sole delight, \r\nAs being the contrary to his high will \r\nWhom we resist. If then his providence \r\nOut of our evil seek to bring forth good, \r\nOur labour must be to pervert that end, \r\nAnd out of good still to find means of evil; \r\nWhich ofttimes may succeed so as perhaps \r\nShall grieve him, if I fail not, and disturb \r\nHis inmost counsels from their destined aim. \r\nBut see! the angry Victor hath recalled \r\nHis ministers of vengeance and pursuit \r\nBack to the gates of Heaven: the sulphurous hail, \r\nShot after us in storm, o'erblown hath laid \r\nThe fiery surge that from the precipice \r\nOf Heaven received us falling; and the thunder, \r\nWinged with red lightning and impetuous rage, \r\nPerhaps hath spent his shafts, and ceases now \r\nTo bellow through the vast and boundless Deep. \r\nLet us not slip th' occasion, whether scorn \r\nOr satiate fury yield it from our Foe. \r\nSeest thou yon dreary plain, forlorn and wild, \r\nThe seat of desolation, void of light, \r\nSave what the glimmering of these livid flames \r\nCasts pale and dreadful? Thither let us tend \r\nFrom off the tossing of these fiery waves; \r\nThere rest, if any rest can harbour there; \r\nAnd, re-assembling our afflicted powers, \r\nConsult how we may henceforth most offend \r\nOur enemy, our own loss how repair, \r\nHow overcome this dire calamity, \r\nWhat reinforcement we may gain from hope, \r\nIf not, what resolution from despair.\" \r\n  Thus Satan, talking to his nearest mate, \r\nWith head uplift above the wave, and eyes \r\nThat sparkling blazed; his other parts besides \r\nProne on the flood, extended long and large, \r\nLay floating many a rood, in bulk as huge \r\nAs whom the fables name of monstrous size, \r\nTitanian or Earth-born, that warred on Jove, \r\nBriareos or Typhon, whom the den \r\nBy ancient Tarsus held, or that sea-beast \r\nLeviathan, which God of all his works \r\nCreated hugest that swim th' ocean-stream. \r\nHim, haply slumbering on the Norway foam, \r\nThe pilot of some small night-foundered skiff, \r\nDeeming some island, oft, as seamen tell, \r\nWith fixed anchor in his scaly rind, \r\nMoors by his side under the lee, while night \r\nInvests the sea, and wished morn delays. \r\nSo stretched out huge in length the Arch-fiend lay, \r\nChained on the burning lake; nor ever thence \r\nHad risen, or heaved his head, but that the will \r\nAnd high permission of all-ruling Heaven \r\nLeft him at large to his own dark designs, \r\nThat with reiterated crimes he might \r\nHeap on himself damnation, while he sought \r\nEvil to others, and enraged might see \r\nHow all his malice served but to bring forth \r\nInfinite goodness, grace, and mercy, shewn \r\nOn Man by him seduced, but on himself \r\nTreble confusion, wrath, and vengeance poured. \r\n  Forthwith upright he rears from off the pool \r\nHis mighty stature; on each hand the flames \r\nDriven backward slope their pointing spires, and,rolled \r\nIn billows, leave i' th' midst a horrid vale. \r\nThen with expanded wings he steers his flight \r\nAloft, incumbent on the dusky air, \r\nThat felt unusual weight; till on dry land \r\nHe lights--if it were land that ever burned \r\nWith solid, as the lake with liquid fire, \r\nAnd such appeared in hue as when the force \r\nOf subterranean wind transprots a hill \r\nTorn from Pelorus, or the shattered side \r\nOf thundering Etna, whose combustible \r\nAnd fuelled entrails, thence conceiving fire, \r\nSublimed with mineral fury, aid the winds, \r\nAnd leave a singed bottom all involved \r\nWith stench and smoke. Such resting found the sole \r\nOf unblest feet. Him followed his next mate; \r\nBoth glorying to have scaped the Stygian flood \r\nAs gods, and by their own recovered strength, \r\nNot by the sufferance of supernal Power. \r\n  \"Is this the region, this the soil, the clime,\" \r\nSaid then the lost Archangel, \"this the seat \r\nThat we must change for Heaven?--this mournful gloom \r\nFor that celestial light? Be it so, since he \r\nWho now is sovereign can dispose and bid \r\nWhat shall be right: farthest from him is best \r\nWhom reason hath equalled, force hath made supreme \r\nAbove his equals. Farewell, happy fields, \r\nWhere joy for ever dwells! Hail, horrors! hail, \r\nInfernal world! and thou, profoundest Hell, \r\nReceive thy new possessor--one who brings \r\nA mind not to be changed by place or time. \r\nThe mind is its own place, and in itself \r\nCan make a Heaven of Hell, a Hell of Heaven. \r\nWhat matter where, if I be still the same, \r\nAnd what I should be, all but less than he \r\nWhom thunder hath made greater? Here at least \r\nWe shall be free; th' Almighty hath not built \r\nHere for his envy, will not drive us hence: \r\nHere we may reigh secure; and, in my choice, \r\nTo reign is worth ambition, though in Hell: \r\nBetter to reign in Hell than serve in Heaven. \r\nBut wherefore let we then our faithful friends, \r\nTh' associates and co-partners of our loss, \r\nLie thus astonished on th' oblivious pool, \r\nAnd call them not to share with us their part \r\nIn this unhappy mansion, or once more \r\nWith rallied arms to try what may be yet \r\nRegained in Heaven, or what more lost in Hell?\" \r\n  So Satan spake; and him Beelzebub \r\nThus answered:--\"Leader of those armies bright \r\nWhich, but th' Omnipotent, none could have foiled! \r\nIf once they hear that voice, their liveliest pledge \r\nOf hope in fears and dangers--heard so oft \r\nIn worst extremes, and on the perilous edge \r\nOf battle, when it raged, in all assaults \r\nTheir surest signal--they will soon resume \r\nNew courage and revive, though now they lie \r\nGrovelling and prostrate on yon lake of fire, \r\nAs we erewhile, astounded and amazed; \r\nNo wonder, fallen such a pernicious height!\" \r\n  He scare had ceased when the superior Fiend \r\nWas moving toward the shore; his ponderous shield, \r\nEthereal temper, massy, large, and round, \r\nBehind him cast. The broad circumference \r\nHung on his shoulders like the moon, whose orb \r\nThrough optic glass the Tuscan artist views \r\nAt evening, from the top of Fesole, \r\nOr in Valdarno, to descry new lands, \r\nRivers, or mountains, in her spotty globe. \r\nHis spear--to equal which the tallest pine \r\nHewn on Norwegian hills, to be the mast \r\nOf some great ammiral, were but a wand-- \r\nHe walked with, to support uneasy steps \r\nOver the burning marl, not like those steps \r\nOn Heaven's azure; and the torrid clime \r\nSmote on him sore besides, vaulted with fire. \r\nNathless he so endured, till on the beach \r\nOf that inflamed sea he stood, and called \r\nHis legions--Angel Forms, who lay entranced \r\nThick as autumnal leaves that strow the brooks \r\nIn Vallombrosa, where th' Etrurian shades \r\nHigh over-arched embower; or scattered sedge \r\nAfloat, when with fierce winds Orion armed \r\nHath vexed the Red-Sea coast, whose waves o'erthrew \r\nBusiris and his Memphian chivalry, \r\nWhile with perfidious hatred they pursued \r\nThe sojourners of Goshen, who beheld \r\nFrom the safe shore their floating carcases \r\nAnd broken chariot-wheels. So thick bestrown, \r\nAbject and lost, lay these, covering the flood, \r\nUnder amazement of their hideous change. \r\nHe called so loud that all the hollow deep \r\nOf Hell resounded:--\"Princes, Potentates, \r\nWarriors, the Flower of Heaven--once yours; now lost, \r\nIf such astonishment as this can seize \r\nEternal Spirits! Or have ye chosen this place \r\nAfter the toil of battle to repose \r\nYour wearied virtue, for the ease you find \r\nTo slumber here, as in the vales of Heaven? \r\nOr in this abject posture have ye sworn \r\nTo adore the Conqueror, who now beholds \r\nCherub and Seraph rolling in the flood \r\nWith scattered arms and ensigns, till anon \r\nHis swift pursuers from Heaven-gates discern \r\nTh' advantage, and, descending, tread us down \r\nThus drooping, or with linked thunderbolts \r\nTransfix us to the bottom of this gulf? \r\nAwake, arise, or be for ever fallen!\" \r\n  They heard, and were abashed, and up they sprung \r\nUpon the wing, as when men wont to watch \r\nOn duty, sleeping found by whom they dread, \r\nRouse and bestir themselves ere well awake. \r\nNor did they not perceive the evil plight \r\nIn which they were, or the fierce pains not feel; \r\nYet to their General's voice they soon obeyed \r\nInnumerable. As when the potent rod \r\nOf Amram's son, in Egypt's evil day, \r\nWaved round the coast, up-called a pitchy cloud \r\nOf locusts, warping on the eastern wind, \r\nThat o'er the realm of impious Pharaoh hung \r\nLike Night, and darkened all the land of Nile; \r\nSo numberless were those bad Angels seen \r\nHovering on wing under the cope of Hell, \r\n'Twixt upper, nether, and surrounding fires; \r\nTill, as a signal given, th' uplifted spear \r\nOf their great Sultan waving to direct \r\nTheir course, in even balance down they light \r\nOn the firm brimstone, and fill all the plain: \r\nA multitude like which the populous North \r\nPoured never from her frozen loins to pass \r\nRhene or the Danaw, when her barbarous sons \r\nCame like a deluge on the South, and spread \r\nBeneath Gibraltar to the Libyan sands. \r\nForthwith, form every squadron and each band, \r\nThe heads and leaders thither haste where stood \r\nTheir great Commander--godlike Shapes, and Forms \r\nExcelling human; princely Dignities; \r\nAnd Powers that erst in Heaven sat on thrones, \r\nThough on their names in Heavenly records now \r\nBe no memorial, blotted out and rased \r\nBy their rebellion from the Books of Life. \r\nNor had they yet among the sons of Eve \r\nGot them new names, till, wandering o'er the earth, \r\nThrough God's high sufferance for the trial of man, \r\nBy falsities and lies the greatest part \r\nOf mankind they corrupted to forsake \r\nGod their Creator, and th' invisible \r\nGlory of him that made them to transform \r\nOft to the image of a brute, adorned \r\nWith gay religions full of pomp and gold, \r\nAnd devils to adore for deities: \r\nThen were they known to men by various names, \r\nAnd various idols through the heathen world. \r\n  Say, Muse, their names then known, who first, who last, \r\nRoused from the slumber on that fiery couch, \r\nAt their great Emperor's call, as next in worth \r\nCame singly where he stood on the bare strand, \r\nWhile the promiscuous crowd stood yet aloof? \r\n  The chief were those who, from the pit of Hell \r\nRoaming to seek their prey on Earth, durst fix \r\nTheir seats, long after, next the seat of God, \r\nTheir altars by his altar, gods adored \r\nAmong the nations round, and durst abide \r\nJehovah thundering out of Sion, throned \r\nBetween the Cherubim; yea, often placed \r\nWithin his sanctuary itself their shrines, \r\nAbominations; and with cursed things \r\nHis holy rites and solemn feasts profaned, \r\nAnd with their darkness durst affront his light. \r\nFirst, Moloch, horrid king, besmeared with blood \r\nOf human sacrifice, and parents' tears; \r\nThough, for the noise of drums and timbrels loud, \r\nTheir children's cries unheard that passed through fire \r\nTo his grim idol. Him the Ammonite \r\nWorshiped in Rabba and her watery plain, \r\nIn Argob and in Basan, to the stream \r\nOf utmost Arnon. Nor content with such \r\nAudacious neighbourhood, the wisest heart \r\nOf Solomon he led by fraoud to build \r\nHis temple right against the temple of God \r\nOn that opprobrious hill, and made his grove \r\nThe pleasant valley of Hinnom, Tophet thence \r\nAnd black Gehenna called, the type of Hell. \r\nNext Chemos, th' obscene dread of Moab's sons, \r\nFrom Aroar to Nebo and the wild \r\nOf southmost Abarim; in Hesebon \r\nAnd Horonaim, Seon's real, beyond \r\nThe flowery dale of Sibma clad with vines, \r\nAnd Eleale to th' Asphaltic Pool: \r\nPeor his other name, when he enticed \r\nIsrael in Sittim, on their march from Nile, \r\nTo do him wanton rites, which cost them woe. \r\nYet thence his lustful orgies he enlarged \r\nEven to that hill of scandal, by the grove \r\nOf Moloch homicide, lust hard by hate, \r\nTill good Josiah drove them thence to Hell. \r\nWith these came they who, from the bordering flood \r\nOf old Euphrates to the brook that parts \r\nEgypt from Syrian ground, had general names \r\nOf Baalim and Ashtaroth--those male, \r\nThese feminine. For Spirits, when they please, \r\nCan either sex assume, or both; so soft \r\nAnd uncompounded is their essence pure, \r\nNot tried or manacled with joint or limb, \r\nNor founded on the brittle strength of bones, \r\nLike cumbrous flesh; but, in what shape they choose, \r\nDilated or condensed, bright or obscure, \r\nCan execute their airy purposes, \r\nAnd works of love or enmity fulfil. \r\nFor those the race of Israel oft forsook \r\nTheir Living Strength, and unfrequented left \r\nHis righteous altar, bowing lowly down \r\nTo bestial gods; for which their heads as low \r\nBowed down in battle, sunk before the spear \r\nOf despicable foes. With these in troop \r\nCame Astoreth, whom the Phoenicians called \r\nAstarte, queen of heaven, with crescent horns; \r\nTo whose bright image nigntly by the moon \r\nSidonian virgins paid their vows and songs; \r\nIn Sion also not unsung, where stood \r\nHer temple on th' offensive mountain, built \r\nBy that uxorious king whose heart, though large, \r\nBeguiled by fair idolatresses, fell \r\nTo idols foul. Thammuz came next behind, \r\nWhose annual wound in Lebanon allured \r\nThe Syrian damsels to lament his fate \r\nIn amorous ditties all a summer's day, \r\nWhile smooth Adonis from his native rock \r\nRan purple to the sea, supposed with blood \r\nOf Thammuz yearly wounded: the love-tale \r\nInfected Sion's daughters with like heat, \r\nWhose wanton passions in the sacred proch \r\nEzekiel saw, when, by the vision led, \r\nHis eye surveyed the dark idolatries \r\nOf alienated Judah. Next came one \r\nWho mourned in earnest, when the captive ark \r\nMaimed his brute image, head and hands lopt off, \r\nIn his own temple, on the grunsel-edge, \r\nWhere he fell flat and shamed his worshippers: \r\nDagon his name, sea-monster,upward man \r\nAnd downward fish; yet had his temple high \r\nReared in Azotus, dreaded through the coast \r\nOf Palestine, in Gath and Ascalon, \r\nAnd Accaron and Gaza's frontier bounds. \r\nHim followed Rimmon, whose delightful seat \r\nWas fair Damascus, on the fertile banks \r\nOf Abbana and Pharphar, lucid streams. \r\nHe also against the house of God was bold: \r\nA leper once he lost, and gained a king-- \r\nAhaz, his sottish conqueror, whom he drew \r\nGod's altar to disparage and displace \r\nFor one of Syrian mode, whereon to burn \r\nHis odious offerings, and adore the gods \r\nWhom he had vanquished. After these appeared \r\nA crew who, under names of old renown-- \r\nOsiris, Isis, Orus, and their train-- \r\nWith monstrous shapes and sorceries abused \r\nFanatic Egypt and her priests to seek \r\nTheir wandering gods disguised in brutish forms \r\nRather than human. Nor did Israel scape \r\nTh' infection, when their borrowed gold composed \r\nThe calf in Oreb; and the rebel king \r\nDoubled that sin in Bethel and in Dan, \r\nLikening his Maker to the grazed ox-- \r\nJehovah, who, in one night, when he passed \r\nFrom Egypt marching, equalled with one stroke \r\nBoth her first-born and all her bleating gods. \r\nBelial came last; than whom a Spirit more lewd \r\nFell not from Heaven, or more gross to love \r\nVice for itself. To him no temple stood \r\nOr altar smoked; yet who more oft than he \r\nIn temples and at altars, when the priest \r\nTurns atheist, as did Eli's sons, who filled \r\nWith lust and violence the house of God? \r\nIn courts and palaces he also reigns, \r\nAnd in luxurious cities, where the noise \r\nOf riot ascends above their loftiest towers, \r\nAnd injury and outrage; and, when night \r\nDarkens the streets, then wander forth the sons \r\nOf Belial, flown with insolence and wine. \r\nWitness the streets of Sodom, and that night \r\nIn Gibeah, when the hospitable door \r\nExposed a matron, to avoid worse rape. \r\n  These were the prime in order and in might: \r\nThe rest were long to tell; though far renowned \r\nTh' Ionian gods--of Javan's issue held \r\nGods, yet confessed later than Heaven and Earth, \r\nTheir boasted parents;--Titan, Heaven's first-born, \r\nWith his enormous brood, and birthright seized \r\nBy younger Saturn: he from mightier Jove, \r\nHis own and Rhea's son, like measure found; \r\nSo Jove usurping reigned. These, first in Crete \r\nAnd Ida known, thence on the snowy top \r\nOf cold Olympus ruled the middle air, \r\nTheir highest heaven; or on the Delphian cliff, \r\nOr in Dodona, and through all the bounds \r\nOf Doric land; or who with Saturn old \r\nFled over Adria to th' Hesperian fields, \r\nAnd o'er the Celtic roamed the utmost Isles. \r\n  All these and more came flocking; but with looks \r\nDowncast and damp; yet such wherein appeared \r\nObscure some glimpse of joy to have found their Chief \r\nNot in despair, to have found themselves not lost \r\nIn loss itself; which on his countenance cast \r\nLike doubtful hue. But he, his wonted pride \r\nSoon recollecting, with high words, that bore \r\nSemblance of worth, not substance, gently raised \r\nTheir fainting courage, and dispelled their fears. \r\nThen straight commands that, at the warlike sound \r\nOf trumpets loud and clarions, be upreared \r\nHis mighty standard. That proud honour claimed \r\nAzazel as his right, a Cherub tall: \r\nWho forthwith from the glittering staff unfurled \r\nTh' imperial ensign; which, full high advanced, \r\nShone like a meteor streaming to the wind, \r\nWith gems and golden lustre rich emblazed, \r\nSeraphic arms and trophies; all the while \r\nSonorous metal blowing martial sounds: \r\nAt which the universal host up-sent \r\nA shout that tore Hell's concave, and beyond \r\nFrighted the reign of Chaos and old Night. \r\nAll in a moment through the gloom were seen \r\nTen thousand banners rise into the air, \r\nWith orient colours waving: with them rose \r\nA forest huge of spears; and thronging helms \r\nAppeared, and serried shields in thick array \r\nOf depth immeasurable. Anon they move \r\nIn perfect phalanx to the Dorian mood \r\nOf flutes and soft recorders--such as raised \r\nTo height of noblest temper heroes old \r\nArming to battle, and instead of rage \r\nDeliberate valour breathed, firm, and unmoved \r\nWith dread of death to flight or foul retreat; \r\nNor wanting power to mitigate and swage \r\nWith solemn touches troubled thoughts, and chase \r\nAnguish and doubt and fear and sorrow and pain \r\nFrom mortal or immortal minds. Thus they, \r\nBreathing united force with fixed thought, \r\nMoved on in silence to soft pipes that charmed \r\nTheir painful steps o'er the burnt soil. And now \r\nAdvanced in view they stand--a horrid front \r\nOf dreadful length and dazzling arms, in guise \r\nOf warriors old, with ordered spear and shield, \r\nAwaiting what command their mighty Chief \r\nHad to impose. He through the armed files \r\nDarts his experienced eye, and soon traverse \r\nThe whole battalion views--their order due, \r\nTheir visages and stature as of gods; \r\nTheir number last he sums. And now his heart \r\nDistends with pride, and, hardening in his strength, \r\nGlories: for never, since created Man, \r\nMet such embodied force as, named with these, \r\nCould merit more than that small infantry \r\nWarred on by cranes--though all the giant brood \r\nOf Phlegra with th' heroic race were joined \r\nThat fought at Thebes and Ilium, on each side \r\nMixed with auxiliar gods; and what resounds \r\nIn fable or romance of Uther's son, \r\nBegirt with British and Armoric knights; \r\nAnd all who since, baptized or infidel, \r\nJousted in Aspramont, or Montalban, \r\nDamasco, or Marocco, or Trebisond, \r\nOr whom Biserta sent from Afric shore \r\nWhen Charlemain with all his peerage fell \r\nBy Fontarabbia. Thus far these beyond \r\nCompare of mortal prowess, yet observed \r\nTheir dread Commander. He, above the rest \r\nIn shape and gesture proudly eminent, \r\nStood like a tower. His form had yet not lost \r\nAll her original brightness, nor appeared \r\nLess than Archangel ruined, and th' excess \r\nOf glory obscured: as when the sun new-risen \r\nLooks through the horizontal misty air \r\nShorn of his beams, or, from behind the moon, \r\nIn dim eclipse, disastrous twilight sheds \r\nOn half the nations, and with fear of change \r\nPerplexes monarchs. Darkened so, yet shone \r\nAbove them all th' Archangel: but his face \r\nDeep scars of thunder had intrenched, and care \r\nSat on his faded cheek, but under brows \r\nOf dauntless courage, and considerate pride \r\nWaiting revenge. Cruel his eye, but cast \r\nSigns of remorse and passion, to behold \r\nThe fellows of his crime, the followers rather \r\n(Far other once beheld in bliss), condemned \r\nFor ever now to have their lot in pain-- \r\nMillions of Spirits for his fault amerced \r\nOf Heaven, and from eteranl splendours flung \r\nFor his revolt--yet faithful how they stood, \r\nTheir glory withered; as, when heaven's fire \r\nHath scathed the forest oaks or mountain pines, \r\nWith singed top their stately growth, though bare, \r\nStands on the blasted heath. He now prepared \r\nTo speak; whereat their doubled ranks they bend \r\nFrom wing to wing, and half enclose him round \r\nWith all his peers: attention held them mute. \r\nThrice he assayed, and thrice, in spite of scorn, \r\nTears, such as Angels weep, burst forth: at last \r\nWords interwove with sighs found out their way:-- \r\n  \"O myriads of immortal Spirits! O Powers \r\nMatchless, but with th' Almighth!--and that strife \r\nWas not inglorious, though th' event was dire, \r\nAs this place testifies, and this dire change, \r\nHateful to utter. But what power of mind, \r\nForseeing or presaging, from the depth \r\nOf knowledge past or present, could have feared \r\nHow such united force of gods, how such \r\nAs stood like these, could ever know repulse? \r\nFor who can yet believe, though after loss, \r\nThat all these puissant legions, whose exile \r\nHath emptied Heaven, shall fail to re-ascend, \r\nSelf-raised, and repossess their native seat? \r\nFor me, be witness all the host of Heaven, \r\nIf counsels different, or danger shunned \r\nBy me, have lost our hopes. But he who reigns \r\nMonarch in Heaven till then as one secure \r\nSat on his throne, upheld by old repute, \r\nConsent or custom, and his regal state \r\nPut forth at full, but still his strength concealed-- \r\nWhich tempted our attempt, and wrought our fall. \r\nHenceforth his might we know, and know our own, \r\nSo as not either to provoke, or dread \r\nNew war provoked: our better part remains \r\nTo work in close design, by fraud or guile, \r\nWhat force effected not; that he no less \r\nAt length from us may find, who overcomes \r\nBy force hath overcome but half his foe. \r\nSpace may produce new Worlds; whereof so rife \r\nThere went a fame in Heaven that he ere long \r\nIntended to create, and therein plant \r\nA generation whom his choice regard \r\nShould favour equal to the Sons of Heaven. \r\nThither, if but to pry, shall be perhaps \r\nOur first eruption--thither, or elsewhere; \r\nFor this infernal pit shall never hold \r\nCelestial Spirits in bondage, nor th' Abyss \r\nLong under darkness cover. But these thoughts \r\nFull counsel must mature. Peace is despaired; \r\nFor who can think submission? War, then, war \r\nOpen or understood, must be resolved.\" \r\n  He spake; and, to confirm his words, outflew \r\nMillions of flaming swords, drawn from the thighs \r\nOf mighty Cherubim; the sudden blaze \r\nFar round illumined Hell. Highly they raged \r\nAgainst the Highest, and fierce with grasped arms \r\nClashed on their sounding shields the din of war, \r\nHurling defiance toward the vault of Heaven. \r\n  There stood a hill not far, whose grisly top \r\nBelched fire and rolling smoke; the rest entire \r\nShone with a glossy scurf--undoubted sign \r\nThat in his womb was hid metallic ore, \r\nThe work of sulphur. Thither, winged with speed, \r\nA numerous brigade hastened: as when bands \r\nOf pioneers, with spade and pickaxe armed, \r\nForerun the royal camp, to trench a field, \r\nOr cast a rampart. Mammon led them on-- \r\nMammon, the least erected Spirit that fell \r\nFrom Heaven; for even in Heaven his looks and thoughts \r\nWere always downward bent, admiring more \r\nThe riches of heaven's pavement, trodden gold, \r\nThan aught divine or holy else enjoyed \r\nIn vision beatific. By him first \r\nMen also, and by his suggestion taught, \r\nRansacked the centre, and with impious hands \r\nRifled the bowels of their mother Earth \r\nFor treasures better hid. Soon had his crew \r\nOpened into the hill a spacious wound, \r\nAnd digged out ribs of gold. Let none admire \r\nThat riches grow in Hell; that soil may best \r\nDeserve the precious bane. And here let those \r\nWho boast in mortal things, and wondering tell \r\nOf Babel, and the works of Memphian kings, \r\nLearn how their greatest monuments of fame \r\nAnd strength, and art, are easily outdone \r\nBy Spirits reprobate, and in an hour \r\nWhat in an age they, with incessant toil \r\nAnd hands innumerable, scarce perform. \r\nNigh on the plain, in many cells prepared, \r\nThat underneath had veins of liquid fire \r\nSluiced from the lake, a second multitude \r\nWith wondrous art founded the massy ore, \r\nSevering each kind, and scummed the bullion-dross. \r\nA third as soon had formed within the ground \r\nA various mould, and from the boiling cells \r\nBy strange conveyance filled each hollow nook; \r\nAs in an organ, from one blast of wind, \r\nTo many a row of pipes the sound-board breathes. \r\nAnon out of the earth a fabric huge \r\nRose like an exhalation, with the sound \r\nOf dulcet symphonies and voices sweet-- \r\nBuilt like a temple, where pilasters round \r\nWere set, and Doric pillars overlaid \r\nWith golden architrave; nor did there want \r\nCornice or frieze, with bossy sculptures graven; \r\nThe roof was fretted gold. Not Babylon \r\nNor great Alcairo such magnificence \r\nEqualled in all their glories, to enshrine \r\nBelus or Serapis their gods, or seat \r\nTheir kings, when Egypt with Assyria strove \r\nIn wealth and luxury. Th' ascending pile \r\nStood fixed her stately height, and straight the doors, \r\nOpening their brazen folds, discover, wide \r\nWithin, her ample spaces o'er the smooth \r\nAnd level pavement: from the arched roof, \r\nPendent by subtle magic, many a row \r\nOf starry lamps and blazing cressets, fed \r\nWith naptha and asphaltus, yielded light \r\nAs from a sky. The hasty multitude \r\nAdmiring entered; and the work some praise, \r\nAnd some the architect. His hand was known \r\nIn Heaven by many a towered structure high, \r\nWhere sceptred Angels held their residence, \r\nAnd sat as Princes, whom the supreme King \r\nExalted to such power, and gave to rule, \r\nEach in his Hierarchy, the Orders bright. \r\nNor was his name unheard or unadored \r\nIn ancient Greece; and in Ausonian land \r\nMen called him Mulciber; and how he fell \r\nFrom Heaven they fabled, thrown by angry Jove \r\nSheer o'er the crystal battlements: from morn \r\nTo noon he fell, from noon to dewy eve, \r\nA summer's day, and with the setting sun \r\nDropt from the zenith, like a falling star, \r\nOn Lemnos, th' Aegaean isle. Thus they relate, \r\nErring; for he with this rebellious rout \r\nFell long before; nor aught aviled him now \r\nTo have built in Heaven high towers; nor did he scape \r\nBy all his engines, but was headlong sent, \r\nWith his industrious crew, to build in Hell. \r\n  Meanwhile the winged Heralds, by command \r\nOf sovereign power, with awful ceremony \r\nAnd trumpet's sound, throughout the host proclaim \r\nA solemn council forthwith to be held \r\nAt Pandemonium, the high capital \r\nOf Satan and his peers. Their summons called \r\nFrom every band and squared regiment \r\nBy place or choice the worthiest: they anon \r\nWith hundreds and with thousands trooping came \r\nAttended. All access was thronged; the gates \r\nAnd porches wide, but chief the spacious hall \r\n(Though like a covered field, where champions bold \r\nWont ride in armed, and at the Soldan's chair \r\nDefied the best of Paynim chivalry \r\nTo mortal combat, or career with lance), \r\nThick swarmed, both on the ground and in the air, \r\nBrushed with the hiss of rustling wings. As bees \r\nIn spring-time, when the Sun with Taurus rides. \r\nPour forth their populous youth about the hive \r\nIn clusters; they among fresh dews and flowers \r\nFly to and fro, or on the smoothed plank, \r\nThe suburb of their straw-built citadel, \r\nNew rubbed with balm, expatiate, and confer \r\nTheir state-affairs: so thick the airy crowd \r\nSwarmed and were straitened; till, the signal given, \r\nBehold a wonder! They but now who seemed \r\nIn bigness to surpass Earth's giant sons, \r\nNow less than smallest dwarfs, in narrow room \r\nThrong numberless--like that pygmean race \r\nBeyond the Indian mount; or faery elves, \r\nWhose midnight revels, by a forest-side \r\nOr fountain, some belated peasant sees, \r\nOr dreams he sees, while overhead the Moon \r\nSits arbitress, and nearer to the Earth \r\nWheels her pale course: they, on their mirth and dance \r\nIntent, with jocund music charm his ear; \r\nAt once with joy and fear his heart rebounds. \r\nThus incorporeal Spirits to smallest forms \r\nReduced their shapes immense, and were at large, \r\nThough without number still, amidst the hall \r\nOf that infernal court. But far within, \r\nAnd in their own dimensions like themselves, \r\nThe great Seraphic Lords and Cherubim \r\nIn close recess and secret conclave sat, \r\nA thousand demi-gods on golden seats, \r\nFrequent and full. After short silence then, \r\nAnd summons read, the great consult began. \r\n \r\n \r\n \r\nBook II                                                          \r\n \r\n  \r\nHigh on a throne of royal state, which far \r\nOutshone the wealth or Ormus and of Ind, \r\nOr where the gorgeous East with richest hand \r\nShowers on her kings barbaric pearl and gold, \r\nSatan exalted sat, by merit raised \r\nTo that bad eminence; and, from despair \r\nThus high uplifted beyond hope, aspires \r\nBeyond thus high, insatiate to pursue \r\nVain war with Heaven; and, by success untaught, \r\nHis proud imaginations thus displayed:-- \r\n  \"Powers and Dominions, Deities of Heaven!-- \r\nFor, since no deep within her gulf can hold \r\nImmortal vigour, though oppressed and fallen, \r\nI give not Heaven for lost: from this descent \r\nCelestial Virtues rising will appear \r\nMore glorious and more dread than from no fall, \r\nAnd trust themselves to fear no second fate!-- \r\nMe though just right, and the fixed laws of Heaven, \r\nDid first create your leader--next, free choice \r\nWith what besides in council or in fight \r\nHath been achieved of merit--yet this loss, \r\nThus far at least recovered, hath much more \r\nEstablished in a safe, unenvied throne, \r\nYielded with full consent. The happier state \r\nIn Heaven, which follows dignity, might draw \r\nEnvy from each inferior; but who here \r\nWill envy whom the highest place exposes \r\nForemost to stand against the Thunderer's aim \r\nYour bulwark, and condemns to greatest share \r\nOf endless pain? Where there is, then, no good \r\nFor which to strive, no strife can grow up there \r\nFrom faction: for none sure will claim in Hell \r\nPrecedence; none whose portion is so small \r\nOf present pain that with ambitious mind \r\nWill covet more! With this advantage, then, \r\nTo union, and firm faith, and firm accord, \r\nMore than can be in Heaven, we now return \r\nTo claim our just inheritance of old, \r\nSurer to prosper than prosperity \r\nCould have assured us; and by what best way, \r\nWhether of open war or covert guile, \r\nWe now debate. Who can advise may speak.\" \r\n  He ceased; and next him Moloch, sceptred king, \r\nStood up--the strongest and the fiercest Spirit \r\nThat fought in Heaven, now fiercer by despair. \r\nHis trust was with th' Eternal to be deemed \r\nEqual in strength, and rather than be less \r\nCared not to be at all; with that care lost \r\nWent all his fear: of God, or Hell, or worse, \r\nHe recked not, and these words thereafter spake:-- \r\n  \"My sentence is for open war. Of wiles, \r\nMore unexpert, I boast not: them let those \r\nContrive who need, or when they need; not now. \r\nFor, while they sit contriving, shall the rest-- \r\nMillions that stand in arms, and longing wait \r\nThe signal to ascend--sit lingering here, \r\nHeaven's fugitives, and for their dwelling-place \r\nAccept this dark opprobrious den of shame, \r\nThe prison of his ryranny who reigns \r\nBy our delay? No! let us rather choose, \r\nArmed with Hell-flames and fury, all at once \r\nO'er Heaven's high towers to force resistless way, \r\nTurning our tortures into horrid arms \r\nAgainst the Torturer; when, to meet the noise \r\nOf his almighty engine, he shall hear \r\nInfernal thunder, and, for lightning, see \r\nBlack fire and horror shot with equal rage \r\nAmong his Angels, and his throne itself \r\nMixed with Tartarean sulphur and strange fire, \r\nHis own invented torments. But perhaps \r\nThe way seems difficult, and steep to scale \r\nWith upright wing against a higher foe! \r\nLet such bethink them, if the sleepy drench \r\nOf that forgetful lake benumb not still, \r\nThat in our porper motion we ascend \r\nUp to our native seat; descent and fall \r\nTo us is adverse. Who but felt of late, \r\nWhen the fierce foe hung on our broken rear \r\nInsulting, and pursued us through the Deep, \r\nWith what compulsion and laborious flight \r\nWe sunk thus low? Th' ascent is easy, then; \r\nTh' event is feared! Should we again provoke \r\nOur stronger, some worse way his wrath may find \r\nTo our destruction, if there be in Hell \r\nFear to be worse destroyed! What can be worse \r\nThan to dwell here, driven out from bliss, condemned \r\nIn this abhorred deep to utter woe! \r\nWhere pain of unextinguishable fire \r\nMust exercise us without hope of end \r\nThe vassals of his anger, when the scourge \r\nInexorably, and the torturing hour, \r\nCalls us to penance? More destroyed than thus, \r\nWe should be quite abolished, and expire. \r\nWhat fear we then? what doubt we to incense \r\nHis utmost ire? which, to the height enraged, \r\nWill either quite consume us, and reduce \r\nTo nothing this essential--happier far \r\nThan miserable to have eternal being!-- \r\nOr, if our substance be indeed divine, \r\nAnd cannot cease to be, we are at worst \r\nOn this side nothing; and by proof we feel \r\nOur power sufficient to disturb his Heaven, \r\nAnd with perpetual inroads to alarm, \r\nThough inaccessible, his fatal throne: \r\nWhich, if not victory, is yet revenge.\" \r\n  He ended frowning, and his look denounced \r\nDesperate revenge, and battle dangerous \r\nTo less than gods. On th' other side up rose \r\nBelial, in act more graceful and humane. \r\nA fairer person lost not Heaven; he seemed \r\nFor dignity composed, and high exploit. \r\nBut all was false and hollow; though his tongue \r\nDropped manna, and could make the worse appear \r\nThe better reason, to perplex and dash \r\nMaturest counsels: for his thoughts were low-- \r\n To vice industrious, but to nobler deeds \r\nTimorous and slothful. Yet he pleased the ear, \r\nAnd with persuasive accent thus began:-- \r\n  \"I should be much for open war, O Peers, \r\nAs not behind in hate, if what was urged \r\nMain reason to persuade immediate war \r\nDid not dissuade me most, and seem to cast \r\nOminous conjecture on the whole success; \r\nWhen he who most excels in fact of arms, \r\nIn what he counsels and in what excels \r\nMistrustful, grounds his courage on despair \r\nAnd utter dissolution, as the scope \r\nOf all his aim, after some dire revenge. \r\nFirst, what revenge? The towers of Heaven are filled \r\nWith armed watch, that render all access \r\nImpregnable: oft on the bodering Deep \r\nEncamp their legions, or with obscure wing \r\nScout far and wide into the realm of Night, \r\nScorning surprise. Or, could we break our way \r\nBy force, and at our heels all Hell should rise \r\nWith blackest insurrection to confound \r\nHeaven's purest light, yet our great Enemy, \r\nAll incorruptible, would on his throne \r\nSit unpolluted, and th' ethereal mould, \r\nIncapable of stain, would soon expel \r\nHer mischief, and purge off the baser fire, \r\nVictorious. Thus repulsed, our final hope \r\nIs flat despair: we must exasperate \r\nTh' Almighty Victor to spend all his rage; \r\nAnd that must end us; that must be our cure-- \r\nTo be no more. Sad cure! for who would lose, \r\nThough full of pain, this intellectual being, \r\nThose thoughts that wander through eternity, \r\nTo perish rather, swallowed up and lost \r\nIn the wide womb of uncreated Night, \r\nDevoid of sense and motion? And who knows, \r\nLet this be good, whether our angry Foe \r\nCan give it, or will ever? How he can \r\nIs doubtful; that he never will is sure. \r\nWill he, so wise, let loose at once his ire, \r\nBelike through impotence or unaware, \r\nTo give his enemies their wish, and end \r\nThem in his anger whom his anger saves \r\nTo punish endless? 'Wherefore cease we, then?' \r\nSay they who counsel war; 'we are decreed, \r\nReserved, and destined to eternal woe; \r\nWhatever doing, what can we suffer more, \r\nWhat can we suffer worse?' Is this, then, worst-- \r\nThus sitting, thus consulting, thus in arms? \r\nWhat when we fled amain, pursued and struck \r\nWith Heaven's afflicting thunder, and besought \r\nThe Deep to shelter us? This Hell then seemed \r\nA refuge from those wounds. Or when we lay \r\nChained on the burning lake? That sure was worse. \r\nWhat if the breath that kindled those grim fires, \r\nAwaked, should blow them into sevenfold rage, \r\nAnd plunge us in the flames; or from above \r\nShould intermitted vengeance arm again \r\nHis red right hand to plague us? What if all \r\nHer stores were opened, and this firmament \r\nOf Hell should spout her cataracts of fire, \r\nImpendent horrors, threatening hideous fall \r\nOne day upon our heads; while we perhaps, \r\nDesigning or exhorting glorious war, \r\nCaught in a fiery tempest, shall be hurled, \r\nEach on his rock transfixed, the sport and prey \r\nOr racking whirlwinds, or for ever sunk \r\nUnder yon boiling ocean, wrapt in chains, \r\nThere to converse with everlasting groans, \r\nUnrespited, unpitied, unreprieved, \r\nAges of hopeless end? This would be worse. \r\nWar, therefore, open or concealed, alike \r\nMy voice dissuades; for what can force or guile \r\nWith him, or who deceive his mind, whose eye \r\nViews all things at one view? He from Heaven's height \r\nAll these our motions vain sees and derides, \r\nNot more almighty to resist our might \r\nThan wise to frustrate all our plots and wiles. \r\nShall we, then, live thus vile--the race of Heaven \r\nThus trampled, thus expelled, to suffer here \r\nChains and these torments? Better these than worse, \r\nBy my advice; since fate inevitable \r\nSubdues us, and omnipotent decree, \r\nThe Victor's will. To suffer, as to do, \r\nOur strength is equal; nor the law unjust \r\nThat so ordains. This was at first resolved, \r\nIf we were wise, against so great a foe \r\nContending, and so doubtful what might fall. \r\nI laugh when those who at the spear are bold \r\nAnd venturous, if that fail them, shrink, and fear \r\nWhat yet they know must follow--to endure \r\nExile, or igominy, or bonds, or pain, \r\nThe sentence of their Conqueror. This is now \r\nOur doom; which if we can sustain and bear, \r\nOur Supreme Foe in time may much remit \r\nHis anger, and perhaps, thus far removed, \r\nNot mind us not offending, satisfied \r\nWith what is punished; whence these raging fires \r\nWill slacken, if his breath stir not their flames. \r\nOur purer essence then will overcome \r\nTheir noxious vapour; or, inured, not feel; \r\nOr, changed at length, and to the place conformed \r\nIn temper and in nature, will receive \r\nFamiliar the fierce heat; and, void of pain, \r\nThis horror will grow mild, this darkness light; \r\nBesides what hope the never-ending flight \r\nOf future days may bring, what chance, what change \r\nWorth waiting--since our present lot appears \r\nFor happy though but ill, for ill not worst, \r\nIf we procure not to ourselves more woe.\" \r\n  Thus Belial, with words clothed in reason's garb, \r\nCounselled ignoble ease and peaceful sloth, \r\nNot peace; and after him thus Mammon spake:-- \r\n  \"Either to disenthrone the King of Heaven \r\nWe war, if war be best, or to regain \r\nOur own right lost. Him to unthrone we then \r\nMay hope, when everlasting Fate shall yield \r\nTo fickle Chance, and Chaos judge the strife. \r\nThe former, vain to hope, argues as vain \r\nThe latter; for what place can be for us \r\nWithin Heaven's bound, unless Heaven's Lord supreme \r\nWe overpower? Suppose he should relent \r\nAnd publish grace to all, on promise made \r\nOf new subjection; with what eyes could we \r\nStand in his presence humble, and receive \r\nStrict laws imposed, to celebrate his throne \r\nWith warbled hyms, and to his Godhead sing \r\nForced hallelujahs, while he lordly sits \r\nOur envied sovereign, and his altar breathes \r\nAmbrosial odours and ambrosial flowers, \r\nOur servile offerings? This must be our task \r\nIn Heaven, this our delight. How wearisome \r\nEternity so spent in worship paid \r\nTo whom we hate! Let us not then pursue, \r\nBy force impossible, by leave obtained \r\nUnacceptable, though in Heaven, our state \r\nOf splendid vassalage; but rather seek \r\nOur own good from ourselves, and from our own \r\nLive to ourselves, though in this vast recess, \r\nFree and to none accountable, preferring \r\nHard liberty before the easy yoke \r\nOf servile pomp. Our greatness will appear \r\nThen most conspicuous when great things of small, \r\nUseful of hurtful, prosperous of adverse, \r\nWe can create, and in what place soe'er \r\nThrive under evil, and work ease out of pain \r\nThrough labour and endurance. This deep world \r\nOf darkness do we dread? How oft amidst \r\nThick clouds and dark doth Heaven's all-ruling Sire \r\nChoose to reside, his glory unobscured, \r\nAnd with the majesty of darkness round \r\nCovers his throne, from whence deep thunders roar. \r\nMustering their rage, and Heaven resembles Hell! \r\nAs he our darkness, cannot we his light \r\nImitate when we please? This desert soil \r\nWants not her hidden lustre, gems and gold; \r\nNor want we skill or art from whence to raise \r\nMagnificence; and what can Heaven show more? \r\nOur torments also may, in length of time, \r\nBecome our elements, these piercing fires \r\nAs soft as now severe, our temper changed \r\nInto their temper; which must needs remove \r\nThe sensible of pain. All things invite \r\nTo peaceful counsels, and the settled state \r\nOf order, how in safety best we may \r\nCompose our present evils, with regard \r\nOf what we are and where, dismissing quite \r\nAll thoughts of war. Ye have what I advise.\" \r\n  He scarce had finished, when such murmur filled \r\nTh' assembly as when hollow rocks retain \r\nThe sound of blustering winds, which all night long \r\nHad roused the sea, now with hoarse cadence lull \r\nSeafaring men o'erwatched, whose bark by chance \r\nOr pinnace, anchors in a craggy bay \r\nAfter the tempest. Such applause was heard \r\nAs Mammon ended, and his sentence pleased, \r\nAdvising peace: for such another field \r\nThey dreaded worse than Hell; so much the fear \r\nOf thunder and the sword of Michael \r\nWrought still within them; and no less desire \r\nTo found this nether empire, which might rise, \r\nBy policy and long process of time, \r\nIn emulation opposite to Heaven. \r\nWhich when Beelzebub perceived--than whom, \r\nSatan except, none higher sat--with grave \r\nAspect he rose, and in his rising seemed \r\nA pillar of state. Deep on his front engraven \r\nDeliberation sat, and public care; \r\nAnd princely counsel in his face yet shone, \r\nMajestic, though in ruin. Sage he stood \r\nWith Atlantean shoulders, fit to bear \r\nThe weight of mightiest monarchies; his look \r\nDrew audience and attention still as night \r\nOr summer's noontide air, while thus he spake:-- \r\n  \"Thrones and Imperial Powers, Offspring of Heaven, \r\nEthereal Virtues! or these titles now \r\nMust we renounce, and, changing style, be called \r\nPrinces of Hell? for so the popular vote \r\nInclines--here to continue, and build up here \r\nA growing empire; doubtless! while we dream, \r\nAnd know not that the King of Heaven hath doomed \r\nThis place our dungeon, not our safe retreat \r\nBeyond his potent arm, to live exempt \r\nFrom Heaven's high jurisdiction, in new league \r\nBanded against his throne, but to remain \r\nIn strictest bondage, though thus far removed, \r\nUnder th' inevitable curb, reserved \r\nHis captive multitude. For he, to be sure, \r\nIn height or depth, still first and last will reign \r\nSole king, and of his kingdom lose no part \r\nBy our revolt, but over Hell extend \r\nHis empire, and with iron sceptre rule \r\nUs here, as with his golden those in Heaven. \r\nWhat sit we then projecting peace and war? \r\nWar hath determined us and foiled with loss \r\nIrreparable; terms of peace yet none \r\nVouchsafed or sought; for what peace will be given \r\nTo us enslaved, but custody severe, \r\nAnd stripes and arbitrary punishment \r\nInflicted? and what peace can we return, \r\nBut, to our power, hostility and hate, \r\nUntamed reluctance, and revenge, though slow, \r\nYet ever plotting how the Conqueror least \r\nMay reap his conquest, and may least rejoice \r\nIn doing what we most in suffering feel? \r\nNor will occasion want, nor shall we need \r\nWith dangerous expedition to invade \r\nHeaven, whose high walls fear no assault or siege, \r\nOr ambush from the Deep. What if we find \r\nSome easier enterprise? There is a place \r\n(If ancient and prophetic fame in Heaven \r\nErr not)--another World, the happy seat \r\nOf some new race, called Man, about this time \r\nTo be created like to us, though less \r\nIn power and excellence, but favoured more \r\nOf him who rules above; so was his will \r\nPronounced among the Gods, and by an oath \r\nThat shook Heaven's whole circumference confirmed. \r\nThither let us bend all our thoughts, to learn \r\nWhat creatures there inhabit, of what mould \r\nOr substance, how endued, and what their power \r\nAnd where their weakness: how attempted best, \r\nBy force of subtlety. Though Heaven be shut, \r\nAnd Heaven's high Arbitrator sit secure \r\nIn his own strength, this place may lie exposed, \r\nThe utmost border of his kingdom, left \r\nTo their defence who hold it: here, perhaps, \r\nSome advantageous act may be achieved \r\nBy sudden onset--either with Hell-fire \r\nTo waste his whole creation, or possess \r\nAll as our own, and drive, as we were driven, \r\nThe puny habitants; or, if not drive, \r\nSeduce them to our party, that their God \r\nMay prove their foe, and with repenting hand \r\nAbolish his own works. This would surpass \r\nCommon revenge, and interrupt his joy \r\nIn our confusion, and our joy upraise \r\nIn his disturbance; when his darling sons, \r\nHurled headlong to partake with us, shall curse \r\nTheir frail original, and faded bliss-- \r\nFaded so soon! Advise if this be worth \r\nAttempting, or to sit in darkness here \r\nHatching vain empires.\" Thus beelzebub \r\nPleaded his devilish counsel--first devised \r\nBy Satan, and in part proposed: for whence, \r\nBut from the author of all ill, could spring \r\nSo deep a malice, to confound the race \r\nOf mankind in one root, and Earth with Hell \r\nTo mingle and involve, done all to spite \r\nThe great Creator? But their spite still serves \r\nHis glory to augment. The bold design \r\nPleased highly those infernal States, and joy \r\nSparkled in all their eyes: with full assent \r\nThey vote: whereat his speech he thus renews:-- \r\n\"Well have ye judged, well ended long debate, \r\nSynod of Gods, and, like to what ye are, \r\nGreat things resolved, which from the lowest deep \r\nWill once more lift us up, in spite of fate, \r\nNearer our ancient seat--perhaps in view \r\nOf those bright confines, whence, with neighbouring arms, \r\nAnd opportune excursion, we may chance \r\nRe-enter Heaven; or else in some mild zone \r\nDwell, not unvisited of Heaven's fair light, \r\nSecure, and at the brightening orient beam \r\nPurge off this gloom: the soft delicious air, \r\nTo heal the scar of these corrosive fires, \r\nShall breathe her balm. But, first, whom shall we send \r\nIn search of this new World? whom shall we find \r\nSufficient? who shall tempt with wandering feet \r\nThe dark, unbottomed, infinite Abyss, \r\nAnd through the palpable obscure find out \r\nHis uncouth way, or spread his airy flight, \r\nUpborne with indefatigable wings \r\nOver the vast abrupt, ere he arrive \r\nThe happy Isle? What strength, what art, can then \r\nSuffice, or what evasion bear him safe, \r\nThrough the strict senteries and stations thick \r\nOf Angels watching round? Here he had need \r\nAll circumspection: and we now no less \r\nChoice in our suffrage; for on whom we send \r\nThe weight of all, and our last hope, relies.\" \r\n  This said, he sat; and expectation held \r\nHis look suspense, awaiting who appeared \r\nTo second, or oppose, or undertake \r\nThe perilous attempt. But all sat mute, \r\nPondering the danger with deep thoughts; and each \r\nIn other's countenance read his own dismay, \r\nAstonished. None among the choice and prime \r\nOf those Heaven-warring champions could be found \r\nSo hardy as to proffer or accept, \r\nAlone, the dreadful voyage; till, at last, \r\nSatan, whom now transcendent glory raised \r\nAbove his fellows, with monarchal pride \r\nConscious of highest worth, unmoved thus spake:-- \r\n  \"O Progeny of Heaven! Empyreal Thrones! \r\nWith reason hath deep silence and demur \r\nSeized us, though undismayed. Long is the way \r\nAnd hard, that out of Hell leads up to light. \r\nOur prison strong, this huge convex of fire, \r\nOutrageous to devour, immures us round \r\nNinefold; and gates of burning adamant, \r\nBarred over us, prohibit all egress. \r\nThese passed, if any pass, the void profound \r\nOf unessential Night receives him next, \r\nWide-gaping, and with utter loss of being \r\nThreatens him, plunged in that abortive gulf. \r\nIf thence he scape, into whatever world, \r\nOr unknown region, what remains him less \r\nThan unknown dangers, and as hard escape? \r\nBut I should ill become this throne, O Peers, \r\nAnd this imperial sovereignty, adorned \r\nWith splendour, armed with power, if aught proposed \r\nAnd judged of public moment in the shape \r\nOf difficulty or danger, could deter \r\nMe from attempting. Wherefore do I assume \r\nThese royalties, and not refuse to reign, \r\nRefusing to accept as great a share \r\nOf hazard as of honour, due alike \r\nTo him who reigns, and so much to him due \r\nOf hazard more as he above the rest \r\nHigh honoured sits? Go, therefore, mighty Powers, \r\nTerror of Heaven, though fallen; intend at home, \r\nWhile here shall be our home, what best may ease \r\nThe present misery, and render Hell \r\nMore tolerable; if there be cure or charm \r\nTo respite, or deceive, or slack the pain \r\nOf this ill mansion: intermit no watch \r\nAgainst a wakeful foe, while I abroad \r\nThrough all the coasts of dark destruction seek \r\nDeliverance for us all. This enterprise \r\nNone shall partake with me.\" Thus saying, rose \r\nThe Monarch, and prevented all reply; \r\nPrudent lest, from his resolution raised, \r\nOthers among the chief might offer now, \r\nCertain to be refused, what erst they feared, \r\nAnd, so refused, might in opinion stand \r\nHis rivals, winning cheap the high repute \r\nWhich he through hazard huge must earn. But they \r\nDreaded not more th' adventure than his voice \r\nForbidding; and at once with him they rose. \r\nTheir rising all at once was as the sound \r\nOf thunder heard remote. Towards him they bend \r\nWith awful reverence prone, and as a God \r\nExtol him equal to the Highest in Heaven. \r\nNor failed they to express how much they praised \r\nThat for the general safety he despised \r\nHis own: for neither do the Spirits damned \r\nLose all their virtue; lest bad men should boast \r\nTheir specious deeds on earth, which glory excites, \r\nOr close ambition varnished o'er with zeal. \r\n  Thus they their doubtful consultations dark \r\nEnded, rejoicing in their matchless Chief: \r\nAs, when from mountain-tops the dusky clouds \r\nAscending, while the north wind sleeps, o'erspread \r\nHeaven's cheerful face, the louring element \r\nScowls o'er the darkened landscape snow or shower, \r\nIf chance the radiant sun, with farewell sweet, \r\nExtend his evening beam, the fields revive, \r\nThe birds their notes renew, and bleating herds \r\nAttest their joy, that hill and valley rings. \r\nO shame to men! Devil with devil damned \r\nFirm concord holds; men only disagree \r\nOf creatures rational, though under hope \r\nOf heavenly grace, and, God proclaiming peace, \r\nYet live in hatred, enmity, and strife \r\nAmong themselves, and levy cruel wars \r\nWasting the earth, each other to destroy: \r\nAs if (which might induce us to accord) \r\nMan had not hellish foes enow besides, \r\nThat day and night for his destruction wait! \r\n  The Stygian council thus dissolved; and forth \r\nIn order came the grand infernal Peers: \r\nMidst came their mighty Paramount, and seemed \r\nAlone th' antagonist of Heaven, nor less \r\nThan Hell's dread Emperor, with pomp supreme, \r\nAnd god-like imitated state: him round \r\nA globe of fiery Seraphim enclosed \r\nWith bright emblazonry, and horrent arms. \r\nThen of their session ended they bid cry \r\nWith trumpet's regal sound the great result: \r\nToward the four winds four speedy Cherubim \r\nPut to their mouths the sounding alchemy, \r\nBy herald's voice explained; the hollow Abyss \r\nHeard far adn wide, and all the host of Hell \r\nWith deafening shout returned them loud acclaim. \r\nThence more at ease their minds, and somewhat raised \r\nBy false presumptuous hope, the ranged Powers \r\nDisband; and, wandering, each his several way \r\nPursues, as inclination or sad choice \r\nLeads him perplexed, where he may likeliest find \r\nTruce to his restless thoughts, and entertain \r\nThe irksome hours, till his great Chief return. \r\nPart on the plain, or in the air sublime, \r\nUpon the wing or in swift race contend, \r\nAs at th' Olympian games or Pythian fields; \r\nPart curb their fiery steeds, or shun the goal \r\nWith rapid wheels, or fronted brigades form: \r\nAs when, to warn proud cities, war appears \r\nWaged in the troubled sky, and armies rush \r\nTo battle in the clouds; before each van \r\nPrick forth the airy knights, and couch their spears, \r\nTill thickest legions close; with feats of arms \r\nFrom either end of heaven the welkin burns. \r\nOthers, with vast Typhoean rage, more fell, \r\nRend up both rocks and hills, and ride the air \r\nIn whirlwind; Hell scarce holds the wild uproar:-- \r\nAs when Alcides, from Oechalia crowned \r\nWith conquest, felt th' envenomed robe, and tore \r\nThrough pain up by the roots Thessalian pines, \r\nAnd Lichas from the top of Oeta threw \r\nInto th' Euboic sea. Others, more mild, \r\nRetreated in a silent valley, sing \r\nWith notes angelical to many a harp \r\nTheir own heroic deeds, and hapless fall \r\nBy doom of battle, and complain that Fate \r\nFree Virtue should enthrall to Force or Chance. \r\nTheir song was partial; but the harmony \r\n(What could it less when Spirits immortal sing?) \r\nSuspended Hell, and took with ravishment \r\nThe thronging audience. In discourse more sweet \r\n(For Eloquence the Soul, Song charms the Sense) \r\nOthers apart sat on a hill retired, \r\nIn thoughts more elevate, and reasoned high \r\nOf Providence, Foreknowledge, Will, and Fate-- \r\nFixed fate, free will, foreknowledge absolute, \r\nAnd found no end, in wandering mazes lost. \r\nOf good and evil much they argued then, \r\nOf happiness and final misery, \r\nPassion and apathy, and glory and shame: \r\nVain wisdom all, and false philosophy!-- \r\nYet, with a pleasing sorcery, could charm \r\nPain for a while or anguish, and excite \r\nFallacious hope, or arm th' obdured breast \r\nWith stubborn patience as with triple steel. \r\nAnother part, in squadrons and gross bands, \r\nOn bold adventure to discover wide \r\nThat dismal world, if any clime perhaps \r\nMight yield them easier habitation, bend \r\nFour ways their flying march, along the banks \r\nOf four infernal rivers, that disgorge \r\nInto the burning lake their baleful streams-- \r\nAbhorred Styx, the flood of deadly hate; \r\nSad Acheron of sorrow, black and deep; \r\nCocytus, named of lamentation loud \r\nHeard on the rueful stream; fierce Phlegeton, \r\nWhose waves of torrent fire inflame with rage. \r\nFar off from these, a slow and silent stream, \r\nLethe, the river of oblivion, rolls \r\nHer watery labyrinth, whereof who drinks \r\nForthwith his former state and being forgets-- \r\nForgets both joy and grief, pleasure and pain. \r\nBeyond this flood a frozen continent \r\nLies dark and wild, beat with perpetual storms \r\nOf whirlwind and dire hail, which on firm land \r\nThaws not, but gathers heap, and ruin seems \r\nOf ancient pile; all else deep snow and ice, \r\nA gulf profound as that Serbonian bog \r\nBetwixt Damiata and Mount Casius old, \r\nWhere armies whole have sunk: the parching air \r\nBurns frore, and cold performs th' effect of fire. \r\nThither, by harpy-footed Furies haled, \r\nAt certain revolutions all the damned \r\nAre brought; and feel by turns the bitter change \r\nOf fierce extremes, extremes by change more fierce, \r\nFrom beds of raging fire to starve in ice \r\nTheir soft ethereal warmth, and there to pine \r\nImmovable, infixed, and frozen round \r\nPeriods of time,--thence hurried back to fire. \r\nThey ferry over this Lethean sound \r\nBoth to and fro, their sorrow to augment, \r\nAnd wish and struggle, as they pass, to reach \r\nThe tempting stream, with one small drop to lose \r\nIn sweet forgetfulness all pain and woe, \r\nAll in one moment, and so near the brink; \r\nBut Fate withstands, and, to oppose th' attempt, \r\nMedusa with Gorgonian terror guards \r\nThe ford, and of itself the water flies \r\nAll taste of living wight, as once it fled \r\nThe lip of Tantalus. Thus roving on \r\nIn confused march forlorn, th' adventurous bands, \r\nWith shuddering horror pale, and eyes aghast, \r\nViewed first their lamentable lot, and found \r\nNo rest. Through many a dark and dreary vale \r\nThey passed, and many a region dolorous, \r\nO'er many a frozen, many a fiery alp, \r\nRocks, caves, lakes, fens, bogs, dens, and shades of death-- \r\nA universe of death, which God by curse \r\nCreated evil, for evil only good; \r\nWhere all life dies, death lives, and Nature breeds, \r\nPerverse, all monstrous, all prodigious things, \r\nObominable, inutterable, and worse \r\nThan fables yet have feigned or fear conceived, \r\nGorgons, and Hydras, and Chimeras dire. \r\n  Meanwhile the Adversary of God and Man, \r\nSatan, with thoughts inflamed of highest design, \r\nPuts on swift wings, and toward the gates of Hell \r\nExplores his solitary flight: sometimes \r\nHe scours the right hand coast, sometimes the left; \r\nNow shaves with level wing the deep, then soars \r\nUp to the fiery concave towering high. \r\nAs when far off at sea a fleet descried \r\nHangs in the clouds, by equinoctial winds \r\nClose sailing from Bengala, or the isles \r\nOf Ternate and Tidore, whence merchants bring \r\nTheir spicy drugs; they on the trading flood, \r\nThrough the wide Ethiopian to the Cape, \r\nPly stemming nightly toward the pole: so seemed \r\nFar off the flying Fiend. At last appear \r\nHell-bounds, high reaching to the horrid roof, \r\nAnd thrice threefold the gates; three folds were brass, \r\nThree iron, three of adamantine rock, \r\nImpenetrable, impaled with circling fire, \r\nYet unconsumed. Before the gates there sat \r\nOn either side a formidable Shape. \r\nThe one seemed woman to the waist, and fair, \r\nBut ended foul in many a scaly fold, \r\nVoluminous and vast--a serpent armed \r\nWith mortal sting. About her middle round \r\nA cry of Hell-hounds never-ceasing barked \r\nWith wide Cerberean mouths full loud, and rung \r\nA hideous peal; yet, when they list, would creep, \r\nIf aught disturbed their noise, into her womb, \r\nAnd kennel there; yet there still barked and howled \r\nWithin unseen. Far less abhorred than these \r\nVexed Scylla, bathing in the sea that parts \r\nCalabria from the hoarse Trinacrian shore; \r\nNor uglier follow the night-hag, when, called \r\nIn secret, riding through the air she comes, \r\nLured with the smell of infant blood, to dance \r\nWith Lapland witches, while the labouring moon \r\nEclipses at their charms. The other Shape-- \r\nIf shape it might be called that shape had none \r\nDistinguishable in member, joint, or limb; \r\nOr substance might be called that shadow seemed, \r\nFor each seemed either--black it stood as Night, \r\nFierce as ten Furies, terrible as Hell, \r\nAnd shook a dreadful dart: what seemed his head \r\nThe likeness of a kingly crown had on. \r\nSatan was now at hand, and from his seat \r\nThe monster moving onward came as fast \r\nWith horrid strides; Hell trembled as he strode. \r\nTh' undaunted Fiend what this might be admired-- \r\nAdmired, not feared (God and his Son except, \r\nCreated thing naught valued he nor shunned), \r\nAnd with disdainful look thus first began:-- \r\n  \"Whence and what art thou, execrable Shape, \r\nThat dar'st, though grim and terrible, advance \r\nThy miscreated front athwart my way \r\nTo yonder gates? Through them I mean to pass, \r\nThat be assured, without leave asked of thee. \r\nRetire; or taste thy folly, and learn by proof, \r\nHell-born, not to contend with Spirits of Heaven.\" \r\n  To whom the Goblin, full of wrath, replied:-- \r\n\"Art thou that traitor Angel? art thou he, \r\nWho first broke peace in Heaven and faith, till then \r\nUnbroken, and in proud rebellious arms \r\nDrew after him the third part of Heaven's sons, \r\nConjured against the Highest--for which both thou \r\nAnd they, outcast from God, are here condemned \r\nTo waste eternal days in woe and pain? \r\nAnd reckon'st thou thyself with Spirits of Heaven \r\nHell-doomed, and breath'st defiance here and scorn, \r\nWhere I reign king, and, to enrage thee more, \r\nThy king and lord? Back to thy punishment, \r\nFalse fugitive; and to thy speed add wings, \r\nLest with a whip of scorpions I pursue \r\nThy lingering, or with one stroke of this dart \r\nStrange horror seize thee, and pangs unfelt before.\" \r\n  So spake the grisly Terror, and in shape, \r\nSo speaking and so threatening, grew tenfold, \r\nMore dreadful and deform. On th' other side, \r\nIncensed with indignation, Satan stood \r\nUnterrified, and like a comet burned, \r\nThat fires the length of Ophiuchus huge \r\nIn th' arctic sky, and from his horrid hair \r\nShakes pestilence and war. Each at the head \r\nLevelled his deadly aim; their fatal hands \r\nNo second stroke intend; and such a frown \r\nEach cast at th' other as when two black clouds, \r\nWith heaven's artillery fraught, came rattling on \r\nOver the Caspian,--then stand front to front \r\nHovering a space, till winds the signal blow \r\nTo join their dark encounter in mid-air. \r\nSo frowned the mighty combatants that Hell \r\nGrew darker at their frown; so matched they stood; \r\nFor never but once more was wither like \r\nTo meet so great a foe. And now great deeds \r\nHad been achieved, whereof all Hell had rung, \r\nHad not the snaky Sorceress, that sat \r\nFast by Hell-gate and kept the fatal key, \r\nRisen, and with hideous outcry rushed between. \r\n  \"O father, what intends thy hand,\" she cried, \r\n\"Against thy only son? What fury, O son, \r\nPossesses thee to bend that mortal dart \r\nAgainst thy father's head? And know'st for whom? \r\nFor him who sits above, and laughs the while \r\nAt thee, ordained his drudge to execute \r\nWhate'er his wrath, which he calls justice, bids-- \r\nHis wrath, which one day will destroy ye both!\" \r\n  She spake, and at her words the hellish Pest \r\nForbore: then these to her Satan returned:-- \r\n  \"So strange thy outcry, and thy words so strange \r\nThou interposest, that my sudden hand, \r\nPrevented, spares to tell thee yet by deeds \r\nWhat it intends, till first I know of thee \r\nWhat thing thou art, thus double-formed, and why, \r\nIn this infernal vale first met, thou call'st \r\nMe father, and that phantasm call'st my son. \r\nI know thee not, nor ever saw till now \r\nSight more detestable than him and thee.\" \r\n  T' whom thus the Portress of Hell-gate replied:-- \r\n\"Hast thou forgot me, then; and do I seem \r\nNow in thine eye so foul?--once deemed so fair \r\nIn Heaven, when at th' assembly, and in sight \r\nOf all the Seraphim with thee combined \r\nIn bold conspiracy against Heaven's King, \r\nAll on a sudden miserable pain \r\nSurprised thee, dim thine eyes and dizzy swum \r\nIn darkness, while thy head flames thick and fast \r\nThrew forth, till on the left side opening wide, \r\nLikest to thee in shape and countenance bright, \r\nThen shining heavenly fair, a goddess armed, \r\nOut of thy head I sprung. Amazement seized \r\nAll th' host of Heaven; back they recoiled afraid \r\nAt first, and called me Sin, and for a sign \r\nPortentous held me; but, familiar grown, \r\nI pleased, and with attractive graces won \r\nThe most averse--thee chiefly, who, full oft \r\nThyself in me thy perfect image viewing, \r\nBecam'st enamoured; and such joy thou took'st \r\nWith me in secret that my womb conceived \r\nA growing burden. Meanwhile war arose, \r\nAnd fields were fought in Heaven: wherein remained \r\n(For what could else?) to our Almighty Foe \r\nClear victory; to our part loss and rout \r\nThrough all the Empyrean. Down they fell, \r\nDriven headlong from the pitch of Heaven, down \r\nInto this Deep; and in the general fall \r\nI also: at which time this powerful key \r\nInto my hands was given, with charge to keep \r\nThese gates for ever shut, which none can pass \r\nWithout my opening. Pensive here I sat \r\nAlone; but long I sat not, till my womb, \r\nPregnant by thee, and now excessive grown, \r\nProdigious motion felt and rueful throes. \r\nAt last this odious offspring whom thou seest, \r\nThine own begotten, breaking violent way, \r\nTore through my entrails, that, with fear and pain \r\nDistorted, all my nether shape thus grew \r\nTransformed: but he my inbred enemy \r\nForth issued, brandishing his fatal dart, \r\nMade to destroy. I fled, and cried out Death! \r\nHell trembled at the hideous name, and sighed \r\nFrom all her caves, and back resounded Death! \r\nI fled; but he pursued (though more, it seems, \r\nInflamed with lust than rage), and, swifter far, \r\nMe overtook, his mother, all dismayed, \r\nAnd, in embraces forcible and foul \r\nEngendering with me, of that rape begot \r\nThese yelling monsters, that with ceaseless cry \r\nSurround me, as thou saw'st--hourly conceived \r\nAnd hourly born, with sorrow infinite \r\nTo me; for, when they list, into the womb \r\nThat bred them they return, and howl, and gnaw \r\nMy bowels, their repast; then, bursting forth \r\nAfresh, with conscious terrors vex me round, \r\nThat rest or intermission none I find. \r\nBefore mine eyes in opposition sits \r\nGrim Death, my son and foe, who set them on, \r\nAnd me, his parent, would full soon devour \r\nFor want of other prey, but that he knows \r\nHis end with mine involved, and knows that I \r\nShould prove a bitter morsel, and his bane, \r\nWhenever that shall be: so Fate pronounced. \r\nBut thou, O father, I forewarn thee, shun \r\nHis deadly arrow; neither vainly hope \r\nTo be invulnerable in those bright arms, \r\nThrough tempered heavenly; for that mortal dint, \r\nSave he who reigns above, none can resist.\" \r\n  She finished; and the subtle Fiend his lore \r\nSoon learned, now milder, and thus answered smooth:-- \r\n  \"Dear daughter--since thou claim'st me for thy sire, \r\nAnd my fair son here show'st me, the dear pledge \r\nOf dalliance had with thee in Heaven, and joys \r\nThen sweet, now sad to mention, through dire change \r\nBefallen us unforeseen, unthought-of--know, \r\nI come no enemy, but to set free \r\nFrom out this dark and dismal house of pain \r\nBoth him and thee, and all the heavenly host \r\nOf Spirits that, in our just pretences armed, \r\nFell with us from on high. From them I go \r\nThis uncouth errand sole, and one for all \r\nMyself expose, with lonely steps to tread \r\nTh' unfounded Deep, and through the void immense \r\nTo search, with wandering quest, a place foretold \r\nShould be--and, by concurring signs, ere now \r\nCreated vast and round--a place of bliss \r\nIn the purlieus of Heaven; and therein placed \r\nA race of upstart creatures, to supply \r\nPerhaps our vacant room, though more removed, \r\nLest Heaven, surcharged with potent multitude, \r\nMight hap to move new broils. Be this, or aught \r\nThan this more secret, now designed, I haste \r\nTo know; and, this once known, shall soon return, \r\nAnd bring ye to the place where thou and Death \r\nShall dwell at ease, and up and down unseen \r\nWing silently the buxom air, embalmed \r\nWith odours. There ye shall be fed and filled \r\nImmeasurably; all things shall be your prey.\" \r\n  He ceased; for both seemed highly pleased, and Death \r\nGrinned horrible a ghastly smile, to hear \r\nHis famine should be filled, and blessed his maw \r\nDestined to that good hour. No less rejoiced \r\nHis mother bad, and thus bespake her sire:-- \r\n  \"The key of this infernal Pit, by due \r\nAnd by command of Heaven's all-powerful King, \r\nI keep, by him forbidden to unlock \r\nThese adamantine gates; against all force \r\nDeath ready stands to interpose his dart, \r\nFearless to be o'ermatched by living might. \r\nBut what owe I to his commands above, \r\nWho hates me, and hath hither thrust me down \r\nInto this gloom of Tartarus profound, \r\nTo sit in hateful office here confined, \r\nInhabitant of Heaven and heavenly born-- \r\nHere in perpetual agony and pain, \r\nWith terrors and with clamours compassed round \r\nOf mine own brood, that on my bowels feed? \r\nThou art my father, thou my author, thou \r\nMy being gav'st me; whom should I obey \r\nBut thee? whom follow? Thou wilt bring me soon \r\nTo that new world of light and bliss, among \r\nThe gods who live at ease, where I shall reign \r\nAt thy right hand voluptuous, as beseems \r\nThy daughter and thy darling, without end.\" \r\n  Thus saying, from her side the fatal key, \r\nSad instrument of all our woe, she took; \r\nAnd, towards the gate rolling her bestial train, \r\nForthwith the huge portcullis high up-drew, \r\nWhich, but herself, not all the Stygian Powers \r\nCould once have moved; then in the key-hole turns \r\nTh' intricate wards, and every bolt and bar \r\nOf massy iron or solid rock with ease \r\nUnfastens. On a sudden open fly, \r\nWith impetuous recoil and jarring sound, \r\nTh' infernal doors, and on their hinges grate \r\nHarsh thunder, that the lowest bottom shook \r\nOf Erebus. She opened; but to shut \r\nExcelled her power: the gates wide open stood, \r\nThat with extended wings a bannered host, \r\nUnder spread ensigns marching, mibht pass through \r\nWith horse and chariots ranked in loose array; \r\nSo wide they stood, and like a furnace-mouth \r\nCast forth redounding smoke and ruddy flame. \r\nBefore their eyes in sudden view appear \r\nThe secrets of the hoary Deep--a dark \r\nIllimitable ocean, without bound, \r\nWithout dimension; where length, breadth, and height, \r\nAnd time, and place, are lost; where eldest Night \r\nAnd Chaos, ancestors of Nature, hold \r\nEternal anarchy, amidst the noise \r\nOf endless wars, and by confusion stand. \r\nFor Hot, Cold, Moist, and Dry, four champions fierce, \r\nStrive here for mastery, and to battle bring \r\nTheir embryon atoms: they around the flag \r\nOf each his faction, in their several clans, \r\nLight-armed or heavy, sharp, smooth, swift, or slow, \r\nSwarm populous, unnumbered as the sands \r\nOf Barca or Cyrene's torrid soil, \r\nLevied to side with warring winds, and poise \r\nTheir lighter wings. To whom these most adhere \r\nHe rules a moment: Chaos umpire sits, \r\nAnd by decision more embroils the fray \r\nBy which he reigns: next him, high arbiter, \r\nChance governs all. Into this wild Abyss, \r\nThe womb of Nature, and perhaps her grave, \r\nOf neither sea, nor shore, nor air, nor fire, \r\nBut all these in their pregnant causes mixed \r\nConfusedly, and which thus must ever fight, \r\nUnless th' Almighty Maker them ordain \r\nHis dark materials to create more worlds-- \r\nInto this wild Abyss the wary Fiend \r\nStood on the brink of Hell and looked a while, \r\nPondering his voyage; for no narrow frith \r\nHe had to cross. Nor was his ear less pealed \r\nWith noises loud and ruinous (to compare \r\nGreat things with small) than when Bellona storms \r\nWith all her battering engines, bent to rase \r\nSome capital city; or less than if this frame \r\nOf Heaven were falling, and these elements \r\nIn mutiny had from her axle torn \r\nThe steadfast Earth. At last his sail-broad vans \r\nHe spread for flight, and, in the surging smoke \r\nUplifted, spurns the ground; thence many a league, \r\nAs in a cloudy chair, ascending rides \r\nAudacious; but, that seat soon failing, meets \r\nA vast vacuity. All unawares, \r\nFluttering his pennons vain, plumb-down he drops \r\nTen thousand fathom deep, and to this hour \r\nDown had been falling, had not, by ill chance, \r\nThe strong rebuff of some tumultuous cloud, \r\nInstinct with fire and nitre, hurried him \r\nAs many miles aloft. That fury stayed-- \r\nQuenched in a boggy Syrtis, neither sea, \r\nNor good dry land--nigh foundered, on he fares, \r\nTreading the crude consistence, half on foot, \r\nHalf flying; behoves him now both oar and sail. \r\nAs when a gryphon through the wilderness \r\nWith winged course, o'er hill or moory dale, \r\nPursues the Arimaspian, who by stealth \r\nHad from his wakeful custody purloined \r\nThe guarded gold; so eagerly the Fiend \r\nO'er bog or steep, through strait, rough, dense, or rare, \r\nWith head, hands, wings, or feet, pursues his way, \r\nAnd swims, or sinks, or wades, or creeps, or flies. \r\nAt length a universal hubbub wild \r\nOf stunning sounds, and voices all confused, \r\nBorne through the hollow dark, assaults his ear \r\nWith loudest vehemence. Thither he plies \r\nUndaunted, to meet there whatever Power \r\nOr Spirit of the nethermost Abyss \r\nMight in that noise reside, of whom to ask \r\nWhich way the nearest coast of darkness lies \r\nBordering on light; when straight behold the throne \r\nOf Chaos, and his dark pavilion spread \r\nWide on the wasteful Deep! With him enthroned \r\nSat sable-vested Night, eldest of things, \r\nThe consort of his reign; and by them stood \r\nOrcus and Ades, and the dreaded name \r\nOf Demogorgon; Rumour next, and Chance, \r\nAnd Tumult, and Confusion, all embroiled, \r\nAnd Discord with a thousand various mouths. \r\n  T' whom Satan, turning boldly, thus:--\"Ye Powers \r\nAnd Spirtis of this nethermost Abyss, \r\nChaos and ancient Night, I come no spy \r\nWith purpose to explore or to disturb \r\nThe secrets of your realm; but, by constraint \r\nWandering this darksome desert, as my way \r\nLies through your spacious empire up to light, \r\nAlone and without guide, half lost, I seek, \r\nWhat readiest path leads where your gloomy bounds \r\nConfine with Heaven; or, if some other place, \r\nFrom your dominion won, th' Ethereal King \r\nPossesses lately, thither to arrive \r\nI travel this profound. Direct my course: \r\nDirected, no mean recompense it brings \r\nTo your behoof, if I that region lost, \r\nAll usurpation thence expelled, reduce \r\nTo her original darkness and your sway \r\n(Which is my present journey), and once more \r\nErect the standard there of ancient Night. \r\nYours be th' advantage all, mine the revenge!\" \r\n  Thus Satan; and him thus the Anarch old, \r\nWith faltering speech and visage incomposed, \r\nAnswered:  \"I know thee, stranger, who thou art--  *** \r\nThat mighty leading Angel, who of late \r\nMade head against Heaven's King, though overthrown. \r\nI saw and heard; for such a numerous host \r\nFled not in silence through the frighted Deep, \r\nWith ruin upon ruin, rout on rout, \r\nConfusion worse confounded; and Heaven-gates \r\nPoured out by millions her victorious bands, \r\nPursuing. I upon my frontiers here \r\nKeep residence; if all I can will serve \r\nThat little which is left so to defend, \r\nEncroached on still through our intestine broils \r\nWeakening the sceptre of old Night: first, Hell, \r\nYour dungeon, stretching far and wide beneath; \r\nNow lately Heaven and Earth, another world \r\nHung o'er my realm, linked in a golden chain \r\nTo that side Heaven from whence your legions fell! \r\nIf that way be your walk, you have not far; \r\nSo much the nearer danger. Go, and speed; \r\nHavoc, and spoil, and ruin, are my gain.\" \r\n  He ceased; and Satan stayed not to reply, \r\nBut, glad that now his sea should find a shore, \r\nWith fresh alacrity and force renewed \r\nSprings upward, like a pyramid of fire, \r\nInto the wild expanse, and through the shock \r\nOf fighting elements, on all sides round \r\nEnvironed, wins his way; harder beset \r\nAnd more endangered than when Argo passed \r\nThrough Bosporus betwixt the justling rocks, \r\nOr when Ulysses on the larboard shunned \r\nCharybdis, and by th' other whirlpool steered. \r\nSo he with difficulty and labour hard \r\nMoved on, with difficulty and labour he; \r\nBut, he once passed, soon after, when Man fell, \r\nStrange alteration! Sin and Death amain, \r\nFollowing his track (such was the will of Heaven) \r\nPaved after him a broad and beaten way \r\nOver the dark Abyss, whose boiling gulf \r\nTamely endured a bridge of wondrous length, \r\nFrom Hell continued, reaching th' utmost orb \r\nOf this frail World; by which the Spirits perverse \r\nWith easy intercourse pass to and fro \r\nTo tempt or punish mortals, except whom \r\nGod and good Angels guard by special grace. \r\n  But now at last the sacred influence \r\nOf light appears, and from the walls of Heaven \r\nShoots far into the bosom of dim Night \r\nA glimmering dawn. Here Nature first begins \r\nHer farthest verge, and Chaos to retire, \r\nAs from her outmost works, a broken foe, \r\nWith tumult less and with less hostile din; \r\nThat Satan with less toil, and now with ease, \r\nWafts on the calmer wave by dubious light, \r\nAnd, like a weather-beaten vessel, holds \r\nGladly the port, though shrouds and tackle torn; \r\nOr in the emptier waste, resembling air, \r\nWeighs his spread wings, at leisure to behold \r\nFar off th' empyreal Heaven, extended wide \r\nIn circuit, undetermined square or round, \r\nWith opal towers and battlements adorned \r\nOf living sapphire, once his native seat; \r\nAnd, fast by, hanging in a golden chain, \r\nThis pendent World, in bigness as a star \r\nOf smallest magnitude close by the moon. \r\nThither, full fraught with mischievous revenge, \r\nAccursed, and in a cursed hour, he hies. \r\n \r\n \r\n \r\nBook III                                                         \r\n \r\n \r\nHail, holy Light, offspring of Heaven firstborn, \r\nOr of the Eternal coeternal beam \r\nMay I express thee unblam'd?  since God is light, \r\nAnd never but in unapproached light \r\nDwelt from eternity, dwelt then in thee \r\nBright effluence of bright essence increate. \r\nOr hear\"st thou rather pure ethereal stream, \r\nWhose fountain who shall tell?  before the sun, \r\nBefore the Heavens thou wert, and at the voice \r\nOf God, as with a mantle, didst invest  *** \r\nThe rising world of waters dark and deep, \r\nWon from the void and formless infinite. \r\nThee I re-visit now with bolder wing, \r\nEscap'd the Stygian pool, though long detain'd \r\nIn that obscure sojourn, while in my flight \r\nThrough utter and through middle darkness borne, \r\nWith other notes than to the Orphean lyre \r\nI sung of Chaos and eternal Night; \r\nTaught by the heavenly Muse to venture down \r\nThe dark descent, and up to re-ascend, \r\nThough hard and rare:  Thee I revisit safe, \r\nAnd feel thy sovran vital lamp; but thou \r\nRevisit'st not these eyes, that roll in vain \r\nTo find thy piercing ray, and find no dawn; \r\nSo  thick a drop serene hath quench'd their orbs, \r\nOr dim suffusion veil'd.  Yet not the more \r\nCease I to wander, where the Muses haunt, \r\nClear spring, or shady grove, or sunny hill, \r\nSmit with the love of sacred song; but chief \r\nThee, Sion, and the flowery brooks beneath, \r\nThat wash thy hallow'd feet, and warbling flow, \r\nNightly I visit:  nor sometimes forget \r\nSo were I equall'd with them in renown, \r\nThy sovran command, that Man should find grace; \r\nBlind Thamyris, and blind Maeonides, \r\nAnd Tiresias, and Phineus, prophets old: \r\nThen feed on thoughts, that voluntary move \r\nHarmonious numbers; as the wakeful bird \r\nSings darkling, and in shadiest covert hid \r\nTunes her nocturnal note.  Thus with the year \r\nSeasons return; but not to me returns \r\nDay, or the sweet approach of even or morn, \r\nOr sight of vernal bloom, or summer's rose, \r\nOr flocks, or herds, or human face divine; \r\nBut cloud instead, and ever-during dark \r\nSurrounds me, from the cheerful ways of men \r\nCut off, and for the book of knowledge fair \r\nPresented with a universal blank \r\nOf nature's works to me expung'd and ras'd, \r\nAnd wisdom at one entrance quite shut out. \r\nSo much the rather thou, celestial Light, \r\nShine inward, and the mind through all her powers \r\nIrradiate; there plant eyes, all mist from thence \r\nPurge and disperse, that I may see and tell \r\nOf things invisible to mortal sight. \r\nNow had the Almighty Father from above, \r\nFrom the pure empyrean where he sits \r\nHigh thron'd above all highth, bent down his eye \r\nHis own works and their works at once to view: \r\nAbout him all the Sanctities of Heaven \r\nStood thick as stars, and from his sight receiv'd \r\nBeatitude past utterance; on his right \r\nThe radiant image of his glory sat, \r\nHis only son; on earth he first beheld \r\nOur two first parents, yet the only two \r\nOf mankind in the happy garden plac'd \r\nReaping immortal fruits of joy and love, \r\nUninterrupted joy, unrivall'd love, \r\nIn blissful solitude; he then survey'd \r\nHell and the gulf between, and Satan there  \r\nCoasting the wall of Heaven on this side Night \r\nIn the dun air sublime, and ready now \r\nTo stoop with wearied wings, and willing feet, \r\nOn the bare outside of this world, that seem'd \r\nFirm land imbosom'd, without firmament, \r\nUncertain which, in ocean or in air. \r\nHim God beholding from his prospect high, \r\nWherein past, present, future, he beholds, \r\nThus to his only Son foreseeing spake. \r\nOnly begotten Son, seest thou what rage \r\nTransports our Adversary?  whom no bounds \r\nPrescrib'd no bars of Hell, nor all the chains \r\nHeap'd on him there, nor yet the main abyss \r\nWide interrupt, can hold; so bent he seems \r\nOn desperate revenge, that shall redound \r\nUpon his own rebellious head.  And now, \r\nThrough all restraint broke loose, he wings his way \r\nNot far off Heaven, in the precincts of light, \r\nDirectly towards the new created world, \r\nAnd man there plac'd, with purpose to assay \r\nIf him by force he can destroy, or, worse, \r\nBy some false guile pervert; and shall pervert; \r\nFor man will hearken to his glozing lies, \r\nAnd easily transgress the sole command, \r\nSole pledge of his obedience:  So will fall \r\nHe and his faithless progeny:  Whose fault? \r\nWhose but his own?  ingrate, he had of me \r\nAll he could have; I made him just and right, \r\nSufficient to have stood, though free to fall. \r\nSuch I created all the ethereal Powers \r\nAnd Spirits, both them who stood, and them who fail'd; \r\nFreely they stood who stood, and fell who fell. \r\nNot free, what proof could they have given sincere \r\nOf true allegiance, constant faith or love, \r\nWhere only what they needs must do appear'd, \r\nNot what they would?  what praise could they receive? \r\nWhat pleasure I from such obedience paid, \r\nWhen will and reason (reason also is choice) \r\nUseless and vain, of freedom both despoil'd, \r\nMade passive both, had serv'd necessity, \r\nNot me?  they therefore, as to right belong$ 'd, \r\nSo were created, nor can justly accuse \r\nTheir Maker, or their making, or their fate, \r\nAs if predestination over-rul'd \r\nTheir will dispos'd by absolute decree \r\nOr high foreknowledge they themselves decreed \r\nTheir own revolt, not I; if I foreknew, \r\nForeknowledge had no influence on their fault, \r\nWhich had no less proved certain unforeknown. \r\nSo without least impulse or shadow of fate, \r\nOr aught by me immutably foreseen, \r\nThey trespass, authors to themselves in all \r\nBoth what they judge, and what they choose; for so \r\nI form'd them free: and free they must remain, \r\nTill they enthrall themselves; I else must change \r\nTheir nature, and revoke the high decree \r\nUnchangeable, eternal, which ordain'd \r\n$THeir freedom: they themselves ordain'd their fall. \r\nThe first sort by their own suggestion fell, \r\nSelf-tempted, self-deprav'd:  Man falls, deceiv'd \r\nBy the other first:  Man therefore shall find grace, \r\nThe other none:  In mercy and justice both, \r\nThrough Heaven and Earth, so shall my glory excel; \r\nBut Mercy, first and last, shall brightest shine. \r\nThus while God spake, ambrosial fragrance fill'd \r\nAll Heaven, and in the blessed Spirits elect \r\nSense of new joy ineffable diffus'd. \r\nBeyond compare the Son of God was seen \r\nMost glorious; in him all his Father shone \r\nSubstantially express'd; and in his face \r\nDivine compassion visibly appear'd, \r\nLove without end, and without measure grace, \r\nWhich uttering, thus he to his Father spake. \r\nO Father, gracious was that word which clos'd \r\nThy sovran command, that Man should find grace; \r\n, that Man should find grace; \r\nFor which both Heaven and earth shall high extol \r\nThy praises, with the innumerable sound \r\nOf hymns and sacred songs, wherewith thy throne \r\nEncompass'd shall resound thee ever blest. \r\nFor should Man finally be lost, should Man, \r\nThy creature late so lov'd, thy youngest son, \r\nFall circumvented thus by fraud, though join'd \r\nWith his own folly?  that be from thee far, \r\nThat far be from thee, Father, who art judge \r\nOf all things made, and judgest only right. \r\nOr shall the Adversary thus obtain \r\nHis end, and frustrate thine?  shall he fulfill \r\nHis malice, and thy goodness bring to nought, \r\nOr proud return, though to his heavier doom, \r\nYet with revenge accomplish'd, and to Hell \r\nDraw after him the whole race of mankind, \r\nBy him corrupted?  or wilt thou thyself \r\nAbolish thy creation, and unmake \r\nFor him, what for thy glory thou hast made? \r\nSo should thy goodness and thy greatness both \r\nBe question'd and blasphem'd without defence. \r\nTo whom the great Creator thus replied. \r\nO son, in whom my soul hath chief delight, \r\nSon of my bosom, Son who art alone. \r\nMy word, my wisdom, and effectual might,  \r\nAll hast thou spoken as my thoughts are, all \r\nAs my eternal purpose hath decreed; \r\nMan shall not quite be lost, but sav'd who will; \r\nYet not of will in him, but grace in me \r\nFreely vouchsaf'd; once more I will renew \r\nHis lapsed powers, though forfeit; and enthrall'd \r\nBy sin to foul exorbitant desires; \r\nUpheld by me, yet once more he shall stand \r\nOn even ground against his mortal foe; \r\nBy me upheld, that he may know how frail \r\nHis fallen condition is, and to me owe \r\nAll his deliverance, and to none but me. \r\nSome I have chosen of peculiar grace, \r\nElect above the rest; so is my will: \r\nThe rest shall hear me call, and oft be warn'd \r\nTheir sinful state, and to appease betimes \r\nThe incensed Deity, while offer'd grace \r\nInvites; for I will clear their senses dark, \r\nWhat may suffice, and soften stony hearts \r\nTo pray, repent, and bring obedience due. \r\nTo prayer, repentance, and obedience due, \r\nThough but endeavour'd with sincere intent, \r\nMine ear shall not be slow, mine eye not shut. \r\nAnd I will place within them as a guide, \r\nMy umpire Conscience; whom if they will hear, \r\nLight after light, well us'd, they shall attain, \r\nAnd to the end, persisting, safe arrive. \r\nThis my long sufferance, and my day of grace, \r\nThey who neglect and scorn, shall never taste; \r\nBut hard be harden'd, blind be blinded more, \r\nThat they may stumble on, and deeper fall; \r\nAnd none but such from mercy I exclude. \r\nBut yet all is not done; Man disobeying, \r\nDisloyal, breaks his fealty, and sins \r\nAgainst the high supremacy of Heaven, \r\nAffecting God-head, and, so losing all, \r\nTo expiate his treason hath nought left, \r\nBut to destruction sacred and devote, \r\nHe, with his whole posterity, must die, \r\nDie he or justice must; unless for him \r\nSome other able, and as willing, pay \r\nThe rigid satisfaction, death for death. \r\nSay, heavenly Powers, where shall we find such love? \r\nWhich of you will be mortal, to redeem \r\nMan's mortal crime, and just the unjust to save? \r\nDwells in all Heaven charity so dear? \r\nAnd silence was in Heaven: $ on Man's behalf \r\nHe ask'd, but all the heavenly quire stood mute, \r\nPatron or intercessour none appear'd, \r\nMuch less that durst upon his own head draw \r\nThe deadly forfeiture, and ransom set. \r\nAnd now without redemption all mankind \r\nMust have been lost, adjudg'd to Death and Hell \r\nBy doom severe, had not the Son of God, \r\nIn whom the fulness dwells of love divine, \r\nHis dearest mediation thus renew'd. \r\nFather, thy word is past, Man shall find grace; \r\nAnd shall grace not find means, that finds her way, \r\nThe speediest of thy winged messengers, \r\nTo visit all thy creatures, and to all \r\nComes unprevented, unimplor'd, unsought? \r\nHappy for Man, so coming; he her aid \r\nCan never seek, once dead in sins, and lost; \r\nAtonement for himself, or offering meet, \r\nIndebted and undone, hath none to bring; \r\nBehold me then:  me for him, life for life \r\nI offer: on me let thine anger fall; \r\nAccount me Man; I for his sake will leave \r\n Thy bosom, and this glory next to thee \r\n Freely put off, and for him lastly die \r\n Well pleased; on me let Death wreak all his rage. \r\n Under his gloomy power I shall not long \r\n Lie vanquished. Thou hast given me to possess \r\n Life in myself for ever; by thee I live; \r\n Though now to Death I yield, and am his due, \r\n All that of me can die, yet, that debt paid, \r\n $ thou wilt not leave me in the loathsome grave \r\n His prey, nor suffer my unspotted soul \r\n For ever with corruption there to dwell; \r\n But I shall rise victorious, and subdue \r\n My vanquisher, spoiled of his vaunted spoil. \r\n Death his death's wound shall then receive, and stoop \r\n Inglorious, of his mortal sting disarmed; \r\n I through the ample air in triumph high \r\n Shall lead Hell captive maugre Hell, and show \r\nThe powers of darkness bound. Thou, at the sight \r\n Pleased, out of Heaven shalt look down and smile, \r\n While, by thee raised, I ruin all my foes; \r\n Death last, and with his carcase glut the grave; \r\n Then, with the multitude of my redeemed, \r\n Shall enter Heaven, long absent, and return, \r\n Father, to see thy face, wherein no cloud \r\n Of anger shall remain, but peace assured \r\n And reconcilement: wrath shall be no more \r\n Thenceforth, but in thy presence joy entire. \r\n His words here ended; but his meek aspect \r\n Silent yet spake, and breathed immortal love \r\n To mortal men, above which only shone \r\n Filial obedience: as a sacrifice \r\n Glad to be offered, he attends the will \r\n Of his great Father. Admiration seized \r\n All Heaven, what this might mean, and whither tend, \r\n Wondering; but soon th' Almighty thus replied. \r\n O thou in Heaven and Earth the only peace \r\n Found out for mankind under wrath, O thou \r\n My sole complacence! Well thou know'st how dear \r\n To me are all my works; nor Man the least, \r\n Though last created, that for him I spare \r\n Thee from my bosom and right hand, to save, \r\n By losing thee a while, the whole race lost.                    \r\n \r\n     00021053  \r\n Thou, therefore, whom thou only canst redeem, \r\n Their nature also to thy nature join; \r\n And be thyself Man among men on Earth, \r\n Made flesh, when time shall be, of virgin seed, \r\n By wondrous birth; be thou in Adam's room \r\nThe head of all mankind, though Adam's son. \r\nAs in him perish all men, so in thee, \r\nAs from a second root, shall be restored \r\nAs many as are restored, without thee none. \r\nHis crime makes guilty all his sons; thy merit, \r\nImputed, shall absolve them who renounce \r\nTheir own both righteous and unrighteous deeds, \r\nAnd live in thee transplanted, and from thee \r\nReceive new life.  So Man, as is most just, \r\nShall satisfy for Man, be judged and die, \r\nAnd dying rise, and rising with him raise \r\nHis brethren, ransomed with his own dear life. \r\nSo heavenly love shall outdo hellish hate, \r\nGiving to death, and dying to redeem, \r\nSo dearly to redeem what hellish hate \r\nSo easily destroyed, and still destroys \r\nIn those who, when they may, accept not grace. \r\nNor shalt thou, by descending to assume \r\nMan's nature, lessen or degrade thine own. \r\nBecause thou hast, though throned in highest bliss \r\nEqual to God, and equally enjoying \r\nGod-like fruition, quitted all, to save \r\nA world from utter loss, and hast been found \r\nBy merit more than birthright Son of God, \r\nFound worthiest to be so by being good, \r\nFar more than great or high; because in thee \r\nLove hath abounded more than glory abounds; \r\nTherefore thy humiliation shall exalt \r\nWith thee thy manhood also to this throne: \r\nHere shalt thou sit incarnate, here shalt reign \r\nBoth God and Man, Son both of God and Man, \r\nAnointed universal King; all power \r\nI give thee; reign for ever, and assume \r\nThy merits; under thee, as head supreme, \r\nThrones, Princedoms, Powers, Dominions, I reduce: \r\nAll knees to thee shall bow, of them that bide \r\nIn Heaven, or Earth, or under Earth in Hell. \r\nWhen thou, attended gloriously from Heaven, \r\nShalt in the sky appear, and from thee send \r\nThe summoning Arch-Angels to proclaim \r\nThy dread tribunal; forthwith from all winds, \r\nThe living, and forthwith the cited dead \r\nOf all past ages, to the general doom \r\nShall hasten; such a peal shall rouse their sleep. \r\nThen, all thy saints assembled, thou shalt judge \r\nBad Men and Angels; they, arraigned, shall sink \r\nBeneath thy sentence; Hell, her numbers full, \r\nThenceforth shall be for ever shut.  Mean while \r\nThe world shall burn, and from her ashes spring \r\nNew Heaven and Earth, wherein the just shall dwell, \r\nAnd, after all their tribulations long, \r\nSee golden days, fruitful of golden deeds, \r\nWith joy and peace triumphing, and fair truth. \r\nThen thou thy regal scepter shalt lay by, \r\nFor regal scepter then no more shall need, \r\nGod shall be all in all.  But, all ye Gods, \r\nAdore him, who to compass all this dies; \r\nAdore the Son, and honour him as me. \r\nNo sooner had the Almighty ceased, but all \r\nThe multitude of Angels, with a shout \r\nLoud as from numbers without number, sweet \r\nAs from blest voices, uttering joy, Heaven rung \r\nWith jubilee, and loud Hosannas filled \r\nThe eternal regions:  Lowly reverent \r\nTowards either throne they bow, and to the ground \r\nWith solemn adoration down they cast \r\nTheir crowns inwove with amarant and gold; \r\nImmortal amarant, a flower which once \r\nIn Paradise, fast by the tree of life, \r\nBegan to bloom; but soon for man's offence \r\nTo Heaven removed, where first it grew, there grows, \r\nAnd flowers aloft shading the fount of life, \r\nAnd where the river of bliss through midst of Heaven \r\nRolls o'er Elysian flowers her amber stream; \r\nWith these that never fade the Spirits elect \r\nBind their resplendent locks inwreathed with beams; \r\nNow in loose garlands thick thrown off, the bright \r\nPavement, that like a sea of jasper shone, \r\nImpurpled with celestial roses smiled. \r\nThen, crowned again, their golden harps they took, \r\nHarps ever tuned, that glittering by their side \r\nLike quivers hung, and with preamble sweet \r\nOf charming symphony they introduce \r\nTheir sacred song, and waken raptures high; \r\nNo voice exempt, no voice but well could join \r\nMelodious part, such concord is in Heaven. \r\nThee, Father, first they sung Omnipotent, \r\nImmutable, Immortal, Infinite, \r\nEternal King; the Author of all being, \r\nFonntain of light, thyself invisible \r\nAmidst the glorious brightness where thou sit'st \r\nThroned inaccessible, but when thou shadest \r\nThe full blaze of thy beams, and, through a cloud \r\nDrawn round about thee like a radiant shrine, \r\nDark with excessive bright thy skirts appear, \r\nYet dazzle Heaven, that brightest Seraphim \r\nApproach not, but with both wings veil their eyes. \r\nThee next they sang of all creation first, \r\nBegotten Son, Divine Similitude, \r\nIn whose conspicuous countenance, without cloud \r\nMade visible, the Almighty Father shines, \r\nWhom else no creature can behold; on thee \r\nImpressed the effulgence of his glory abides, \r\nTransfused on thee his ample Spirit rests. \r\nHe Heaven of Heavens and all the Powers therein \r\nBy thee created; and by thee threw down \r\nThe aspiring Dominations:  Thou that day \r\nThy Father's dreadful thunder didst not spare, \r\nNor stop thy flaming chariot-wheels, that shook \r\nHeaven's everlasting frame, while o'er the necks \r\nThou drovest of warring Angels disarrayed. \r\nBack from pursuit thy Powers with loud acclaim \r\nThee only extolled, Son of thy Father's might, \r\nTo execute fierce vengeance on his foes, \r\nNot so on Man:  Him through their malice fallen, \r\nFather of mercy and grace, thou didst not doom \r\nSo strictly, but much more to pity incline: \r\nNo sooner did thy dear and only Son \r\nPerceive thee purposed not to doom frail Man \r\nSo strictly, but much more to pity inclined, \r\nHe to appease thy wrath, and end the strife \r\nOf mercy and justice in thy face discerned, \r\nRegardless of the bliss wherein he sat \r\nSecond to thee, offered himself to die \r\nFor Man's offence.  O unexampled love, \r\nLove no where to be found less than Divine! \r\nHail, Son of God, Saviour of Men!  Thy name \r\nShall be the copious matter of my song \r\nHenceforth, and never shall my heart thy praise \r\nForget, nor from thy Father's praise disjoin. \r\nThus they in Heaven, above the starry sphere, \r\nTheir happy hours in joy and hymning spent. \r\nMean while upon the firm opacous globe \r\nOf this round world, whose first convex divides \r\nThe luminous inferiour orbs, enclosed \r\nFrom Chaos, and the inroad of Darkness old, \r\nSatan alighted walks:  A globe far off \r\nIt seemed, now seems a boundless continent \r\nDark, waste, and wild, under the frown of Night \r\nStarless exposed, and ever-threatening storms \r\nOf Chaos blustering round, inclement sky; \r\nSave on that side which from the wall of Heaven, \r\nThough distant far, some small reflection gains \r\nOf glimmering air less vexed with tempest loud: \r\nHere walked the Fiend at large in spacious field. \r\nAs when a vultur on Imaus bred, \r\nWhose snowy ridge the roving Tartar bounds, \r\nDislodging from a region scarce of prey \r\nTo gorge the flesh of lambs or yeanling kids, \r\nOn hills where flocks are fed, flies toward the springs \r\nOf Ganges or Hydaspes, Indian streams; \r\nBut in his way lights on the barren plains \r\nOf Sericana, where Chineses drive \r\nWith sails and wind their cany waggons light: \r\nSo, on this windy sea of land, the Fiend \r\nWalked up and down alone, bent on his prey; \r\nAlone, for other creature in this place, \r\nLiving or lifeless, to be found was none; \r\nNone yet, but store hereafter from the earth \r\nUp hither like aereal vapours flew \r\nOf all things transitory and vain, when sin \r\nWith vanity had filled the works of men: \r\nBoth all things vain, and all who in vain things \r\nBuilt their fond hopes of glory or lasting fame, \r\nOr happiness in this or the other life; \r\nAll who have their reward on earth, the fruits \r\nOf painful superstition and blind zeal, \r\nNought seeking but the praise of men, here find \r\nFit retribution, empty as their deeds; \r\nAll the unaccomplished works of Nature's hand, \r\nAbortive, monstrous, or unkindly mixed, \r\nDissolved on earth, fleet hither, and in vain, \r\nTill final dissolution, wander here; \r\nNot in the neighbouring moon as some have dreamed; \r\nThose argent fields more likely habitants, \r\nTranslated Saints, or middle Spirits hold \r\nBetwixt the angelical and human kind. \r\nHither of ill-joined sons and daughters born \r\nFirst from the ancient world those giants came \r\nWith many a vain exploit, though then renowned: \r\nThe builders next of Babel on the plain \r\nOf Sennaar, and still with vain design, \r\nNew Babels, had they wherewithal, would build: \r\nOthers came single; he, who, to be deemed \r\nA God, leaped fondly into Aetna flames, \r\nEmpedocles; and he, who, to enjoy \r\nPlato's Elysium, leaped into the sea, \r\nCleombrotus; and many more too long, \r\nEmbryos, and idiots, eremites, and friars \r\nWhite, black, and gray, with all their trumpery. \r\nHere pilgrims roam, that strayed so far to seek \r\nIn Golgotha him dead, who lives in Heaven; \r\nAnd they, who to be sure of Paradise, \r\nDying, put on the weeds of Dominick, \r\nOr in Franciscan think to pass disguised; \r\nThey pass the planets seven, and pass the fixed, \r\nAnd that crystalling sphere whose balance weighs \r\nThe trepidation talked, and that first moved; \r\nAnd now Saint Peter at Heaven's wicket seems \r\nTo wait them with his keys, and now at foot \r\nOf Heaven's ascent they lift their feet, when lo \r\nA violent cross wind from either coast \r\nBlows them transverse, ten thousand leagues awry \r\nInto the devious air:  Then might ye see \r\nCowls, hoods, and habits, with their wearers, tost \r\nAnd fluttered into rags; then reliques, beads, \r\nIndulgences, dispenses, pardons, bulls, \r\nThe sport of winds:  All these, upwhirled aloft, \r\nFly o'er the backside of the world far off \r\nInto a Limbo large and broad, since called \r\nThe Paradise of Fools, to few unknown \r\nLong after; now unpeopled, and untrod. \r\nAll this dark globe the Fiend found as he passed, \r\nAnd long he wandered, till at last a gleam \r\nOf dawning light turned thither-ward in haste \r\nHis travelled steps: far distant he descries \r\nAscending by degrees magnificent \r\nUp to the wall of Heaven a structure high; \r\nAt top whereof, but far more rich, appeared \r\nThe work as of a kingly palace-gate, \r\nWith frontispiece of diamond and gold \r\nEmbellished; thick with sparkling orient gems \r\nThe portal shone, inimitable on earth \r\nBy model, or by shading pencil, drawn. \r\nThese stairs were such as whereon Jacob saw \r\nAngels ascending and descending, bands \r\nOf guardians bright, when he from Esau fled \r\nTo Padan-Aram, in the field of Luz \r\nDreaming by night under the open sky \r\nAnd waking cried,  This is the gate of Heaven. \r\nEach stair mysteriously was meant, nor stood \r\nThere always, but drawn up to Heaven sometimes \r\nViewless; and underneath a bright sea flowed \r\nOf jasper, or of liquid pearl, whereon \r\nWho after came from earth, failing arrived \r\nWafted by Angels, or flew o'er the lake \r\nRapt in a chariot drawn by fiery steeds. \r\nThe stairs were then let down, whether to dare \r\nThe Fiend by easy ascent, or aggravate \r\nHis sad exclusion from the doors of bliss: \r\nDirect against which opened from beneath, \r\nJust o'er the blissful seat of Paradise, \r\nA passage down to the Earth, a passage wide, \r\nWider by far than that of after-times \r\nOver mount Sion, and, though that were large, \r\nOver the Promised Land to God so dear; \r\nBy which, to visit oft those happy tribes, \r\nOn high behests his angels to and fro \r\nPassed frequent, and his eye with choice regard \r\nFrom Paneas, the fount of Jordan's flood, \r\nTo Beersaba, where the Holy Land \r\nBorders on Egypt and the Arabian shore; \r\nSo wide the opening seemed, where bounds were set \r\nTo darkness, such as bound the ocean wave. \r\nSatan from hence, now on the lower stair, \r\nThat scaled by steps of gold to Heaven-gate, \r\nLooks down with wonder at the sudden view \r\nOf all this world at once.  As when a scout, \r\nThrough dark?;nd desart ways with?oeril gone \r\nAll?might,?;t?kast by break of cheerful dawn \r\nObtains the brow of some high-climbing hill, \r\nWhich to his eye discovers unaware \r\nThe goodly prospect of some foreign land \r\nFirst seen, or some renowned metropolis \r\nWith glistering spires and pinnacles adorned, \r\nWhich now the rising sun gilds with his beams: \r\nSuch wonder seised, though after Heaven seen, \r\nThe Spirit malign, but much more envy seised, \r\nAt sight of all this world beheld so fair. \r\nRound he surveys (and well might, where he stood \r\nSo high above the circling canopy \r\nOf night's extended shade,) from eastern point \r\nOf Libra to the fleecy star that bears \r\nAndromeda far off Atlantick seas \r\nBeyond the horizon; then from pole to pole \r\nHe views in breadth, and without longer pause \r\nDown right into the world's first region throws \r\nHis flight precipitant, and winds with ease \r\nThrough the pure marble air his oblique way \r\nAmongst innumerable stars, that shone \r\nStars distant, but nigh hand seemed other worlds; \r\nOr other worlds they seemed, or happy isles, \r\nLike those Hesperian gardens famed of old, \r\nFortunate fields, and groves, and flowery vales, \r\nThrice happy isles; but who dwelt happy there \r\nHe staid not to inquire:  Above them all \r\nThe golden sun, in splendour likest Heaven, \r\nAllured his eye; thither his course he bends \r\nThrough the calm firmament, (but up or down, \r\nBy center, or eccentrick, hard to tell, \r\nOr longitude,) where the great luminary \r\nAloof the vulgar constellations thick, \r\nThat from his lordly eye keep distance due, \r\nDispenses light from far; they, as they move \r\nTheir starry dance in numbers that compute \r\nDays, months, and years, towards his all-cheering lamp \r\nTurn swift their various motions, or are turned \r\nBy his magnetick beam, that gently warms \r\nThe universe, and to each inward part \r\nWith gentle penetration, though unseen, \r\nShoots invisible virtue even to the deep; \r\nSo wonderously was set his station bright. \r\nThere lands the Fiend, a spot like which perhaps \r\nAstronomer in the sun's lucent orb \r\nThrough his glazed optick tube yet never saw. \r\nThe place he found beyond expression bright, \r\nCompared with aught on earth, metal or stone; \r\nNot all parts like, but all alike informed \r\nWith radiant light, as glowing iron with fire; \r\nIf metal, part seemed gold, part silver clear; \r\nIf stone, carbuncle most or chrysolite, \r\nRuby or topaz, to the twelve that shone \r\nIn Aaron's breast-plate, and a stone besides \r\nImagined rather oft than elsewhere seen, \r\nThat stone, or like to that which here below \r\nPhilosophers in vain so long have sought, \r\nIn vain, though by their powerful art they bind \r\nVolatile Hermes, and call up unbound \r\nIn various shapes old Proteus from the sea, \r\nDrained through a limbeck to his native form. \r\nWhat wonder then if fields and regions here \r\nBreathe forth Elixir pure, and rivers run \r\nPotable gold, when with one virtuous touch \r\nThe arch-chemick sun, so far from us remote, \r\nProduces, with terrestrial humour mixed, \r\nHere in the dark so many precious things \r\nOf colour glorious, and effect so rare? \r\nHere matter new to gaze the Devil met \r\nUndazzled; far and wide his eye commands; \r\nFor sight no obstacle found here, nor shade, \r\nBut all sun-shine, as when his beams at noon \r\nCulminate from the equator, as they now \r\nShot upward still direct, whence no way round \r\nShadow from body opaque can fall; and the air, \r\nNo where so clear, sharpened his visual ray \r\nTo objects distant far, whereby he soon \r\nSaw within ken a glorious Angel stand, \r\nThe same whom John saw also in the sun: \r\nHis back was turned, but not his brightness hid; \r\nOf beaming sunny rays a golden tiar \r\nCircled his head, nor less his locks behind \r\nIllustrious on his shoulders fledge with wings \r\nLay waving round; on some great charge employed \r\nHe seemed, or fixed in cogitation deep. \r\nGlad was the Spirit impure, as now in hope \r\nTo find who might direct his wandering flight \r\nTo Paradise, the happy seat of Man, \r\nHis journey's end and our beginning woe. \r\nBut first he casts to change his proper shape, \r\nWhich else might work him danger or delay: \r\nAnd now a stripling Cherub he appears, \r\nNot of the prime, yet such as in his face \r\nYouth smiled celestial, and to every limb \r\nSuitable grace diffused, so well he feigned: \r\nUnder a coronet his flowing hair \r\nIn curls on either cheek played; wings he wore \r\nOf many a coloured plume, sprinkled with gold; \r\nHis habit fit for speed succinct, and held \r\nBefore his decent steps a silver wand. \r\nHe drew not nigh unheard; the Angel bright, \r\nEre he drew nigh, his radiant visage turned, \r\nAdmonished by his ear, and straight was known \r\nThe Arch-Angel Uriel, one of the seven \r\nWho in God's presence, nearest to his throne, \r\nStand ready at command, and are his eyes \r\nThat run through all the Heavens, or down to the Earth \r\nBear his swift errands over moist and dry, \r\nO'er sea and land: him Satan thus accosts. \r\nUriel, for thou of those seven Spirits that stand \r\nIn sight of God's high throne, gloriously bright, \r\nThe first art wont his great authentick will \r\nInterpreter through highest Heaven to bring, \r\nWhere all his sons thy embassy attend; \r\nAnd here art likeliest by supreme decree \r\nLike honour to obtain, and as his eye \r\nTo visit oft this new creation round; \r\nUnspeakable desire to see, and know \r\nAll these his wonderous works, but chiefly Man, \r\nHis chief delight and favour, him for whom \r\nAll these his works so wonderous he ordained, \r\nHath brought me from the quires of Cherubim \r\nAlone thus wandering.  Brightest Seraph, tell \r\nIn which of all these shining orbs hath Man \r\nHis fixed seat, or fixed seat hath none, \r\nBut all these shining orbs his choice to dwell; \r\nThat I may find him, and with secret gaze \r\nOr open admiration him behold, \r\nOn whom the great Creator hath bestowed \r\nWorlds, and on whom hath all these graces poured; \r\nThat both in him and all things, as is meet, \r\nThe universal Maker we may praise; \r\nWho justly hath driven out his rebel foes \r\nTo deepest Hell, and, to repair that loss, \r\nCreated this new happy race of Men \r\nTo serve him better:  Wise are all his ways. \r\nSo spake the false dissembler unperceived; \r\nFor neither Man nor Angel can discern \r\nHypocrisy, the only evil that walks \r\nInvisible, except to God alone, \r\nBy his permissive will, through Heaven and Earth: \r\nAnd oft, though wisdom wake, suspicion sleeps \r\nAt wisdom's gate, and to simplicity \r\nResigns her charge, while goodness thinks no ill \r\nWhere no ill seems:  Which now for once beguiled \r\nUriel, though regent of the sun, and held \r\nThe sharpest-sighted Spirit of all in Heaven; \r\nWho to the fraudulent impostor foul, \r\nIn his uprightness, answer thus returned. \r\nFair Angel, thy desire, which tends to know \r\nThe works of God, thereby to glorify \r\nThe great Work-master, leads to no excess \r\nThat reaches blame, but rather merits praise \r\nThe more it seems excess, that led thee hither \r\nFrom thy empyreal mansion thus alone, \r\nTo witness with thine eyes what some perhaps, \r\nContented with report, hear only in Heaven: \r\nFor wonderful indeed are all his works, \r\nPleasant to know, and worthiest to be all \r\nHad in remembrance always with delight; \r\nBut what created mind can comprehend \r\nTheir number, or the wisdom infinite \r\nThat brought them forth, but hid their causes deep? \r\nI saw when at his word the formless mass, \r\nThis world's material mould, came to a heap: \r\nConfusion heard his voice, and wild uproar \r\nStood ruled, stood vast infinitude confined; \r\nTill at his second bidding Darkness fled, \r\nLight shone, and order from disorder sprung: \r\nSwift to their several quarters hasted then \r\nThe cumbrous elements, earth, flood, air, fire; \r\nAnd this ethereal quintessence of Heaven \r\nFlew upward, spirited with various forms, \r\nThat rolled orbicular, and turned to stars \r\nNumberless, as thou seest, and how they move; \r\nEach had his place appointed, each his course; \r\nThe rest in circuit walls this universe. \r\nLook downward on that globe, whose hither side \r\nWith light from hence, though but reflected, shines; \r\nThat place is Earth, the seat of Man; that light \r\nHis day, which else, as the other hemisphere, \r\nNight would invade; but there the neighbouring moon \r\nSo call that opposite fair star) her aid \r\nTimely interposes, and her monthly round \r\nStill ending, still renewing, through mid Heaven, \r\nWith borrowed light her countenance triform \r\nHence fills and empties to enlighten the Earth, \r\nAnd in her pale dominion checks the night. \r\nThat spot, to which I point, is Paradise, \r\nAdam's abode; those lofty shades, his bower. \r\nThy way thou canst not miss, me mine requires. \r\nThus said, he turned; and Satan, bowing low, \r\nAs to superiour Spirits is wont in Heaven, \r\nWhere honour due and reverence none neglects, \r\nTook leave, and toward the coast of earth beneath, \r\nDown from the ecliptick, sped with hoped success, \r\nThrows his steep flight in many an aery wheel; \r\nNor staid, till on Niphates' top he lights. \r\n \r\n \r\n \r\nBook IV                                                          \r\n \r\n \r\nO, for that warning voice, which he, who saw \r\nThe Apocalypse, heard cry in Heaven aloud, \r\nThen when the Dragon, put to second rout, \r\nCame furious down to be revenged on men, \r\nWoe to the inhabitants on earth! that now, \r\nWhile time was, our first parents had been warned \r\nThe coming of their secret foe, and 'scaped, \r\nHaply so 'scaped his mortal snare:  For now \r\nSatan, now first inflamed with rage, came down, \r\nThe tempter ere the accuser of mankind, \r\nTo wreak on innocent frail Man his loss \r\nOf that first battle, and his flight to Hell: \r\nYet, not rejoicing in his speed, though bold \r\nFar off and fearless, nor with cause to boast, \r\nBegins his dire attempt; which nigh the birth \r\nNow rolling boils in his tumultuous breast, \r\nAnd like a devilish engine back recoils \r\nUpon himself; horrour and doubt distract \r\nHis troubled thoughts, and from the bottom stir \r\nThe Hell within him; for within him Hell \r\nHe brings, and round about him, nor from Hell \r\nOne step, no more than from himself, can fly \r\nBy change of place:  Now conscience wakes despair, \r\nThat slumbered; wakes the bitter memory \r\nOf what he was, what is, and what must be \r\nWorse; of worse deeds worse sufferings must ensue. \r\nSometimes towards Eden, which now in his view \r\nLay pleasant, his grieved look he fixes sad; \r\nSometimes towards Heaven, and the full-blazing sun, \r\nWhich now sat high in his meridian tower: \r\nThen, much revolving, thus in sighs began. \r\nO thou, that, with surpassing glory crowned, \r\nLookest from thy sole dominion like the God \r\nOf this new world; at whose sight all the stars \r\nHide their diminished heads; to thee I call, \r\nBut with no friendly voice, and add thy name, \r\nOf Sun! to tell thee how I hate thy beams, \r\nThat bring to my remembrance from what state \r\nI fell, how glorious once above thy sphere; \r\nTill pride and worse ambition threw me down \r\nWarring in Heaven against Heaven's matchless King: \r\nAh, wherefore! he deserved no such return \r\nFrom me, whom he created what I was \r\nIn that bright eminence, and with his good \r\nUpbraided none; nor was his service hard. \r\nWhat could be less than to afford him praise, \r\nThe easiest recompence, and pay him thanks, \r\nHow due! yet all his good proved ill in me, \r\nAnd wrought but malice; lifted up so high \r\nI sdeined subjection, and thought one step higher \r\nWould set me highest, and in a moment quit \r\nThe debt immense of endless gratitude, \r\nSo burdensome still paying, still to owe, \r\nForgetful what from him I still received, \r\nAnd understood not that a grateful mind \r\nBy owing owes not, but still pays, at once \r\nIndebted and discharged; what burden then \r\nO, had his powerful destiny ordained \r\nMe some inferiour Angel, I had stood \r\nThen happy; no unbounded hope had raised \r\nAmbition!  Yet why not some other Power \r\nAs great might have aspired, and me, though mean, \r\nDrawn to his part; but other Powers as great \r\nFell not, but stand unshaken, from within \r\nOr from without, to all temptations armed. \r\nHadst thou the same free will and power to stand? \r\nThou hadst: whom hast thou then or what to accuse, \r\nBut Heaven's free love dealt equally to all? \r\nBe then his love accursed, since love or hate, \r\nTo me alike, it deals eternal woe. \r\nNay, cursed be thou; since against his thy will \r\nChose freely what it now so justly rues. \r\nMe miserable! which way shall I fly \r\nInfinite wrath, and infinite despair? \r\nWhich way I fly is Hell; myself am Hell; \r\nAnd, in the lowest deep, a lower deep \r\nStill threatening to devour me opens wide, \r\nTo which the Hell I suffer seems a Heaven. \r\nO, then, at last relent:  Is there no place \r\nLeft for repentance, none for pardon left? \r\nNone left but by submission; and that word \r\nDisdain forbids me, and my dread of shame \r\nAmong the Spirits beneath, whom I seduced \r\nWith other promises and other vaunts \r\nThan to submit, boasting I could subdue \r\nThe Omnipotent.  Ay me! they little know \r\nHow dearly I abide that boast so vain, \r\nUnder what torments inwardly I groan, \r\nWhile they adore me on the throne of Hell. \r\nWith diadem and scepter high advanced, \r\nThe lower still I fall, only supreme \r\nIn misery:  Such joy ambition finds. \r\nBut say I could repent, and could obtain, \r\nBy act of grace, my former state; how soon \r\nWould highth recall high thoughts, how soon unsay \r\nWhat feigned submission swore?  Ease would recant \r\nVows made in pain, as violent and void. \r\nFor never can true reconcilement grow, \r\nWhere wounds of deadly hate have pierced so deep: \r\nWhich would but lead me to a worse relapse \r\nAnd heavier fall:  so should I purchase dear \r\nShort intermission bought with double smart. \r\nThis knows my Punisher; therefore as far \r\nFrom granting he, as I from begging, peace; \r\nAll hope excluded thus, behold, in stead \r\nMankind created, and for him this world. \r\nSo farewell, hope; and with hope farewell, fear; \r\nFarewell, remorse! all good to me is lost; \r\nEvil, be thou my good; by thee at least \r\nDivided empire with Heaven's King I hold, \r\nBy thee, and more than half perhaps will reign; \r\nAs Man ere long, and this new world, shall know. \r\nThus while he spake, each passion dimmed his face \r\nThrice changed with pale, ire, envy, and despair; \r\nWhich marred his borrowed visage, and betrayed \r\nHim counterfeit, if any eye beheld. \r\nFor heavenly minds from such distempers foul \r\nAre ever clear.  Whereof he soon aware, \r\nEach perturbation smoothed with outward calm, \r\nArtificer of fraud; and was the first \r\nThat practised falsehood under saintly show, \r\nDeep malice to conceal, couched with revenge: \r\nYet not enough had practised to deceive \r\nUriel once warned; whose eye pursued him down \r\n The way he went, and on the Assyrian mount \r\n Saw him disfigured, more than could befall \r\n Spirit of happy sort; his gestures fierce \r\n He marked and mad demeanour, then alone, \r\n As he supposed, all unobserved, unseen. \r\n So on he fares, and to the border comes \r\n Of Eden, where delicious Paradise, \r\n Now nearer, crowns with her enclosure green, \r\n As with a rural mound, the champaign head \r\n Of a steep wilderness, whose hairy sides \r\nAccess denied; and overhead upgrew \r\n Insuperable height of loftiest shade, \r\n Cedar, and pine, and fir, and branching palm, \r\n A sylvan scene, and, as the ranks ascend, \r\n Shade above shade, a woody theatre \r\n Of stateliest view. Yet higher than their tops \r\n The verdurous wall of Paradise upsprung;                        \r\n \r\n    00081429  \r\nWhich to our general sire gave prospect large \r\nInto his nether empire neighbouring round. \r\nAnd higher than that wall a circling row \r\nOf goodliest trees, loaden with fairest fruit, \r\nBlossoms and fruits at once of golden hue, \r\nAppeared, with gay enamelled colours mixed: \r\nOn which the sun more glad impressed his beams \r\nThan in fair evening cloud, or humid bow, \r\nWhen God hath showered the earth; so lovely seemed \r\nThat landskip:  And of pure now purer air \r\nMeets his approach, and to the heart inspires \r\nVernal delight and joy, able to drive \r\nAll sadness but despair:  Now gentle gales, \r\nFanning their odoriferous wings, dispense \r\nNative perfumes, and whisper whence they stole \r\nThose balmy spoils.  As when to them who fail \r\nBeyond the Cape of Hope, and now are past \r\nMozambick, off at sea north-east winds blow \r\nSabean odours from the spicy shore \r\nOf Araby the blest; with such delay \r\nWell pleased they slack their course, and many a league \r\nCheered with the grateful smell old Ocean smiles: \r\nSo entertained those odorous sweets the Fiend, \r\nWho came their bane; though with them better pleased \r\nThan Asmodeus with the fishy fume \r\nThat drove him, though enamoured, from the spouse \r\nOf Tobit's son, and with a vengeance sent \r\nFrom Media post to Egypt, there fast bound. \r\nNow to the ascent of that steep savage hill \r\nSatan had journeyed on, pensive and slow; \r\nBut further way found none, so thick entwined, \r\nAs one continued brake, the undergrowth \r\nOf shrubs and tangling bushes had perplexed \r\nAll path of man or beast that passed that way. \r\nOne gate there only was, and that looked east \r\nOn the other side: which when the arch-felon saw, \r\nDue entrance he disdained; and, in contempt, \r\nAt one flight bound high over-leaped all bound \r\nOf hill or highest wall, and sheer within \r\nLights on his feet.  As when a prowling wolf, \r\nWhom hunger drives to seek new haunt for prey, \r\nWatching where shepherds pen their flocks at eve \r\nIn hurdled cotes amid the field secure, \r\nLeaps o'er the fence with ease into the fold: \r\nOr as a thief, bent to unhoard the cash \r\nOf some rich burgher, whose substantial doors, \r\nCross-barred and bolted fast, fear no assault, \r\nIn at the window climbs, or o'er the tiles: \r\nSo clomb this first grand thief into God's fold; \r\nSo since into his church lewd hirelings climb. \r\nThence up he flew, and on the tree of life, \r\nThe middle tree and highest there that grew, \r\nSat like a cormorant; yet not true life \r\nThereby regained, but sat devising death \r\nTo them who lived; nor on the virtue thought \r\nOf that life-giving plant, but only used \r\nFor prospect, what well used had been the pledge \r\nOf immortality.  So little knows \r\nAny, but God alone, to value right \r\nThe good before him, but perverts best things \r\nTo worst abuse, or to their meanest use. \r\nBeneath him with new wonder now he views, \r\nTo all delight of human sense exposed, \r\nIn narrow room, Nature's whole wealth, yea more, \r\nA Heaven on Earth:  For blissful Paradise \r\nOf God the garden was, by him in the east \r\nOf Eden planted; Eden stretched her line \r\nFrom Auran eastward to the royal towers \r\nOf great Seleucia, built by Grecian kings, \r\nOf where the sons of Eden long before \r\nDwelt in Telassar:  In this pleasant soil \r\nHis far more pleasant garden God ordained; \r\nOut of the fertile ground he caused to grow \r\nAll trees of noblest kind for sight, smell, taste; \r\nAnd all amid them stood the tree of life, \r\nHigh eminent, blooming ambrosial fruit \r\nOf vegetable gold; and next to life, \r\nOur death, the tree of knowledge, grew fast by, \r\nKnowledge of good bought dear by knowing ill. \r\nSouthward through Eden went a river large, \r\nNor changed his course, but through the shaggy hill \r\nPassed underneath ingulfed; for God had thrown \r\nThat mountain as his garden-mould high raised \r\nUpon the rapid current, which, through veins \r\nOf porous earth with kindly thirst up-drawn, \r\nRose a fresh fountain, and with many a rill \r\nWatered the garden; thence united fell \r\nDown the steep glade, and met the nether flood, \r\nWhich from his darksome passage now appears, \r\nAnd now, divided into four main streams, \r\nRuns diverse, wandering many a famous realm \r\nAnd country, whereof here needs no account; \r\nBut rather to tell how, if Art could tell, \r\nHow from that sapphire fount the crisped brooks, \r\nRolling on orient pearl and sands of gold, \r\nWith mazy errour under pendant shades \r\nRan nectar, visiting each plant, and fed \r\nFlowers worthy of Paradise, which not nice Art \r\nIn beds and curious knots, but Nature boon \r\nPoured forth profuse on hill, and dale, and plain, \r\nBoth where the morning sun first warmly smote \r\nThe open field, and where the unpierced shade \r\nImbrowned the noontide bowers:  Thus was this place \r\nA happy rural seat of various view; \r\nGroves whose rich trees wept odorous gums and balm, \r\nOthers whose fruit, burnished with golden rind, \r\nHung amiable, Hesperian fables true, \r\nIf true, here only, and of delicious taste: \r\nBetwixt them lawns, or level downs, and flocks \r\nGrazing the tender herb, were interposed, \r\nOr palmy hillock; or the flowery lap \r\nOf some irriguous valley spread her store, \r\nFlowers of all hue, and without thorn the rose: \r\nAnother side, umbrageous grots and caves \r\nOf cool recess, o'er which the mantling vine \r\nLays forth her purple grape, and gently creeps \r\nLuxuriant; mean while murmuring waters fall \r\nDown the slope hills, dispersed, or in a lake, \r\nThat to the fringed bank with myrtle crowned \r\nHer crystal mirrour holds, unite their streams. \r\nThe birds their quire apply; airs, vernal airs, \r\nBreathing the smell of field and grove, attune \r\nThe trembling leaves, while universal Pan, \r\nKnit with the Graces and the Hours in dance, \r\nLed on the eternal Spring.  Not that fair field \r\nOf Enna, where Proserpine gathering flowers, \r\nHerself a fairer flower by gloomy Dis \r\nWas gathered, which cost Ceres all that pain \r\nTo seek her through the world; nor that sweet grove \r\nOf Daphne by Orontes, and the inspired \r\nCastalian spring, might with this Paradise \r\nOf Eden strive; nor that Nyseian isle \r\nGirt with the river Triton, where old Cham, \r\nWhom Gentiles Ammon call and Libyan Jove, \r\nHid Amalthea, and her florid son \r\nYoung Bacchus, from his stepdame Rhea's eye; \r\nNor where Abassin kings their issue guard, \r\nMount Amara, though this by some supposed \r\nTrue Paradise under the Ethiop line \r\nBy Nilus' head, enclosed with shining rock, \r\nA whole day's journey high, but wide remote \r\nFrom this Assyrian garden, where the Fiend \r\nSaw, undelighted, all delight, all kind \r\nOf living creatures, new to sight, and strange \r\nTwo of far nobler shape, erect and tall, \r\nGodlike erect, with native honour clad \r\nIn naked majesty seemed lords of all: \r\nAnd worthy seemed; for in their looks divine \r\nThe image of their glorious Maker shone, \r\nTruth, wisdom, sanctitude severe and pure, \r\n(Severe, but in true filial freedom placed,) \r\nWhence true authority in men; though both \r\nNot equal, as their sex not equal seemed; \r\nFor contemplation he and valour formed; \r\nFor softness she and sweet attractive grace; \r\nHe for God only, she for God in him: \r\nHis fair large front and eye sublime declared \r\nAbsolute rule; and hyacinthine locks \r\nRound from his parted forelock manly hung \r\nClustering, but not beneath his shoulders broad: \r\nShe, as a veil, down to the slender waist \r\nHer unadorned golden tresses wore \r\nDishevelled, but in wanton ringlets waved \r\nAs the vine curls her tendrils, which implied \r\nSubjection, but required with gentle sway, \r\nAnd by her yielded, by him best received, \r\nYielded with coy submission, modest pride, \r\nAnd sweet, reluctant, amorous delay. \r\nNor those mysterious parts were then concealed; \r\nThen was not guilty shame, dishonest shame \r\nOf nature's works, honour dishonourable, \r\nSin-bred, how have ye troubled all mankind \r\nWith shows instead, mere shows of seeming pure, \r\nAnd banished from man's life his happiest life, \r\nSimplicity and spotless innocence! \r\nSo passed they naked on, nor shunned the sight \r\nOf God or Angel; for they thought no ill: \r\nSo hand in hand they passed, the loveliest pair, \r\nThat ever since in love's embraces met; \r\nAdam the goodliest man of men since born \r\nHis sons, the fairest of her daughters Eve. \r\nUnder a tuft of shade that on a green \r\nStood whispering soft, by a fresh fountain side \r\nThey sat them down; and, after no more toil \r\nOf their sweet gardening labour than sufficed \r\nTo recommend cool Zephyr, and made ease \r\nMore easy, wholesome thirst and appetite \r\nMore grateful, to their supper-fruits they fell, \r\nNectarine fruits which the compliant boughs \r\nYielded them, side-long as they sat recline \r\nOn the soft downy bank damasked with flowers: \r\nThe savoury pulp they chew, and in the rind, \r\nStill as they thirsted, scoop the brimming stream; \r\nNor gentle purpose, nor endearing smiles \r\nWanted, nor youthful dalliance, as beseems \r\nFair couple, linked in happy nuptial league, \r\nAlone as they.  About them frisking played \r\nAll beasts of the earth, since wild, and of all chase \r\nIn wood or wilderness, forest or den; \r\nSporting the lion ramped, and in his paw \r\nDandled the kid; bears, tigers, ounces, pards, \r\nGambolled before them; the unwieldy elephant, \r\nTo make them mirth, used all his might, and wreathed \r\nHis?kithetmroboscis; close the serpent sly, \r\nInsinuating, wove with Gordian twine \r\nHis braided train, and of his fatal guile \r\nGave proof unheeded; others on the grass \r\nCouched, and now filled with pasture gazing sat, \r\nOr bedward ruminating; for the sun, \r\nDeclined, was hasting now with prone career \r\nTo the ocean isles, and in the ascending scale \r\nOf Heaven the stars that usher evening rose: \r\nWhen Satan still in gaze, as first he stood, \r\nScarce thus at length failed speech recovered sad. \r\nO Hell! what do mine eyes with grief behold! \r\nInto our room of bliss thus high advanced \r\nCreatures of other mould, earth-born perhaps, \r\nNot Spirits, yet to heavenly Spirits bright \r\nLittle inferiour; whom my thoughts pursue \r\nWith wonder, and could love, so lively shines \r\nIn them divine resemblance, and such grace \r\nThe hand that formed them on their shape hath poured. \r\nAh! gentle pair, ye little think how nigh \r\nYour change approaches, when all these delights \r\nWill vanish, and deliver ye to woe; \r\nMore woe, the more your taste is now of joy; \r\nHappy, but for so happy ill secured \r\nLong to continue, and this high seat your Heaven \r\nIll fenced for Heaven to keep out such a foe \r\nAs now is entered; yet no purposed foe \r\nTo you, whom I could pity thus forlorn, \r\nThough I unpitied:  League with you I seek, \r\nAnd mutual amity, so strait, so close, \r\nThat I with you must dwell, or you with me \r\nHenceforth; my dwelling haply may not please, \r\nLike this fair Paradise, your sense; yet such \r\nAccept your Maker's work; he gave it me, \r\nWhich I as freely give:  Hell shall unfold, \r\nTo entertain you two, her widest gates, \r\nAnd send forth all her kings; there will be room, \r\nNot like these narrow limits, to receive \r\nYour numerous offspring; if no better place, \r\nThank him who puts me loth to this revenge \r\nOn you who wrong me not for him who wronged. \r\nAnd should I at your harmless innocence \r\nMelt, as I do, yet publick reason just, \r\nHonour and empire with revenge enlarged, \r\nBy conquering this new world, compels me now \r\nTo do what else, though damned, I should abhor. \r\nSo spake the Fiend, and with necessity, \r\nThe tyrant's plea, excused his devilish deeds. \r\nThen from his lofty stand on that high tree \r\nDown he alights among the sportful herd \r\nOf those four-footed kinds, himself now one, \r\nNow other, as their shape served best his end \r\nNearer to view his prey, and, unespied, \r\nTo mark what of their state he more might learn, \r\nBy word or action marked. About them round \r\nA lion now he stalks with fiery glare; \r\nThen as a tiger, who by chance hath spied \r\nIn some purlieu two gentle fawns at play, \r\nStraight couches close, then, rising, changes oft \r\nHis couchant watch, as one who chose his ground, \r\nWhence rushing, he might surest seize them both, \r\nGriped in each paw: when, Adam first of men \r\nTo first of women Eve thus moving speech, \r\nTurned him, all ear to hear new utterance flow. \r\nSole partner, and sole part, of all these joys, \r\nDearer thyself than all; needs must the Power \r\nThat made us, and for us this ample world, \r\nBe infinitely good, and of his good \r\nAs liberal and free as infinite; \r\nThat raised us from the dust, and placed us here \r\nIn all this happiness, who at his hand \r\nHave nothing merited, nor can perform \r\nAught whereof he hath need; he who requires \r\nFrom us no other service than to keep \r\nThis one, this easy charge, of all the trees \r\nIn Paradise that bear delicious fruit \r\nSo various, not to taste that only tree \r\nOf knowledge, planted by the tree of life; \r\nSo near grows death to life, whate'er death is, \r\nSome dreadful thing no doubt; for well thou knowest \r\nGod hath pronounced it death to taste that tree, \r\nThe only sign of our obedience left, \r\nAmong so many signs of power and rule \r\nConferred upon us, and dominion given \r\nOver all other creatures that possess \r\nEarth, air, and sea.  Then let us not think hard \r\nOne easy prohibition, who enjoy \r\nFree leave so large to all things else, and choice \r\nUnlimited of manifold delights: \r\nBut let us ever praise him, and extol \r\nHis bounty, following our delightful task, \r\nTo prune these growing plants, and tend these flowers, \r\nWhich were it toilsome, yet with thee were sweet. \r\nTo whom thus Eve replied.  O thou for whom \r\nAnd from whom I was formed, flesh of thy flesh, \r\nAnd without whom am to no end, my guide \r\nAnd head! what thou hast said is just and right. \r\nFor we to him indeed all praises owe, \r\nAnd daily thanks; I chiefly, who enjoy \r\nSo far the happier lot, enjoying thee \r\nPre-eminent by so much odds, while thou \r\nLike consort to thyself canst no where find. \r\nThat day I oft remember, when from sleep \r\nI first awaked, and found myself reposed \r\nUnder a shade on flowers, much wondering where \r\nAnd what I was, whence thither brought, and how. \r\nNot distant far from thence a murmuring sound \r\nOf waters issued from a cave, and spread \r\nInto a liquid plain, then stood unmoved \r\nPure as the expanse of Heaven; I thither went \r\nWith unexperienced thought, and laid me down \r\nOn the green bank, to look into the clear \r\nSmooth lake, that to me seemed another sky. \r\nAs I bent down to look, just opposite \r\nA shape within the watery gleam appeared, \r\nBending to look on me:  I started back, \r\nIt started back; but pleased I soon returned, \r\nPleased it returned as soon with answering looks \r\nOf sympathy and love:  There I had fixed \r\nMine eyes till now, and pined with vain desire, \r\nHad not a voice thus warned me;  'What thou seest, \r\n'What there thou seest, fair Creature, is thyself; \r\n'With thee it came and goes: but follow me, \r\n'And I will bring thee where no shadow stays \r\n'Thy coming, and thy soft embraces, he \r\n'Whose image thou art; him thou shalt enjoy \r\n'Inseparably thine, to him shalt bear \r\n'Multitudes like thyself, and thence be called \r\n'Mother of human race.'  What could I do, \r\nBut follow straight, invisibly thus led? \r\nTill I espied thee, fair indeed and tall, \r\nUnder a platane; yet methought less fair, \r\nLess winning soft, less amiably mild, \r\nThan that smooth watery image:  Back I turned; \r\nThou following cryedst aloud, 'Return, fair Eve; \r\n'Whom flyest thou?  whom thou flyest, of him thou art, \r\n'His flesh, his bone; to give thee being I lent \r\n'Out of my side to thee, nearest my heart, \r\n'Substantial life, to have thee by my side \r\n'Henceforth an individual solace dear; \r\n'Part of my soul I seek thee, and thee claim \r\n'My other half:'  With that thy gentle hand \r\nSeised mine:  I yielded;and from that time see \r\nHow beauty is excelled by manly grace, \r\nAnd wisdom, which alone is truly fair. \r\nSo spake our general mother, and with eyes \r\nOf conjugal attraction unreproved, \r\nAnd meek surrender, half-embracing leaned \r\nOn our first father; half her swelling breast \r\nNaked met his, under the flowing gold \r\nOf her loose tresses hid: he in delight \r\nBoth of her beauty, and submissive charms, \r\nSmiled with superiour love, as Jupiter \r\nOn Juno smiles, when he impregns the clouds \r\nThat shed Mayflowers; and pressed her matron lip \r\nWith kisses pure:  Aside the Devil turned \r\nFor envy; yet with jealous leer malign \r\nEyed them askance, and to himself thus plained. \r\nSight hateful, sight tormenting! thus these two, \r\nImparadised in one another's arms, \r\nThe happier Eden, shall enjoy their fill \r\nOf bliss on bliss; while I to Hell am thrust, \r\nWhere neither joy nor love, but fierce desire, \r\nAmong our other torments not the least, \r\nStill unfulfilled with pain of longing pines. \r\nYet let me not forget what I have gained \r\nFrom their own mouths:  All is not theirs, it seems; \r\nOne fatal tree there stands, of knowledge called, \r\nForbidden them to taste:  Knowledge forbidden \r\nSuspicious, reasonless.  Why should their Lord \r\nEnvy them that?  Can it be sin to know? \r\nCan it be death?  And do they only stand \r\nBy ignorance?  Is that their happy state, \r\nThe proof of their obedience and their faith? \r\nO fair foundation laid whereon to build \r\nTheir ruin! hence I will excite their minds \r\nWith more desire to know, and to reject \r\nEnvious commands, invented with design \r\nTo keep them low, whom knowledge might exalt \r\nEqual with Gods: aspiring to be such, \r\nThey taste and die:  What likelier can ensue \r\nBut first with narrow search I must walk round \r\nThis garden, and no corner leave unspied; \r\nA chance but chance may lead where I may meet \r\nSome wandering Spirit of Heaven by fountain side, \r\nOr in thick shade retired, from him to draw \r\nWhat further would be learned.  Live while ye may, \r\nYet happy pair; enjoy, till I return, \r\nShort pleasures, for long woes are to succeed! \r\nSo saying, his proud step he scornful turned, \r\nBut with sly circumspection, and began \r\nThrough wood, through waste, o'er hill, o'er dale, his roam \r\nMean while in utmost longitude, where Heaven \r\nWith earth and ocean meets, the setting sun \r\nSlowly descended, and with right aspect \r\nAgainst the eastern gate of Paradise \r\nLevelled his evening rays:  It was a rock \r\nOf alabaster, piled up to the clouds, \r\nConspicuous far, winding with one ascent \r\nAccessible from earth, one entrance high; \r\nThe rest was craggy cliff, that overhung \r\nStill as it rose, impossible to climb. \r\nBetwixt these rocky pillars Gabriel sat, \r\nChief of the angelick guards, awaiting night; \r\nAbout him exercised heroick games \r\nThe unarmed youth of Heaven, but nigh at hand \r\nCelestial armoury, shields, helms, and spears, \r\nHung high with diamond flaming, and with gold. \r\nThither came Uriel, gliding through the even \r\nOn a sun-beam, swift as a shooting star \r\nIn autumn thwarts the night, when vapours fired \r\nImpress the air, and shows the mariner \r\nFrom what point of his compass to beware \r\nImpetuous winds:  He thus began in haste. \r\nGabriel, to thee thy course by lot hath given \r\nCharge and strict watch, that to this happy place \r\nNo evil thing approach or enter in. \r\nThis day at highth of noon came to my sphere \r\nA Spirit, zealous, as he seemed, to know \r\nMore of the Almighty's works, and chiefly Man, \r\nGod's latest image:  I described his way \r\nBent all on speed, and marked his aery gait; \r\nBut in the mount that lies from Eden north, \r\nWhere he first lighted, soon discerned his looks \r\nAlien from Heaven, with passions foul obscured: \r\nMine eye pursued him still, but under shade \r\nLost sight of him:  One of the banished crew, \r\nI fear, hath ventured from the deep, to raise \r\nNew troubles; him thy care must be to find. \r\nTo whom the winged warriour thus returned. \r\nUriel, no wonder if thy perfect sight, \r\nAmid the sun's bright circle where thou sitst, \r\nSee far and wide:  In at this gate none pass \r\nThe vigilance here placed, but such as come \r\nWell known from Heaven; and since meridian hour \r\nNo creature thence:  If Spirit of other sort, \r\nSo minded, have o'er-leaped these earthly bounds \r\nOn purpose, hard thou knowest it to exclude \r\nSpiritual substance with corporeal bar. \r\nBut if within the circuit of these walks, \r\nIn whatsoever shape he lurk, of whom \r\nThou tellest, by morrow dawning I shall know. \r\nSo promised he; and Uriel to his charge \r\nReturned on that bright beam, whose point now raised \r\nBore him slope downward to the sun now fallen \r\nBeneath the Azores; whether the prime orb, \r\nIncredible how swift, had thither rolled \r\nDiurnal, or this less volubil earth, \r\nBy shorter flight to the east, had left him there \r\nArraying with reflected purple and gold \r\nThe clouds that on his western throne attend. \r\nNow came still Evening on, and Twilight gray \r\nHad in her sober livery all things clad; \r\nSilence accompanied; for beast and bird, \r\nThey to their grassy couch, these to their nests \r\nWere slunk, all but the wakeful nightingale; \r\nShe all night long her amorous descant sung; \r\nSilence was pleased:  Now glowed the firmament \r\nWith living sapphires:  Hesperus, that led \r\nThe starry host, rode brightest, till the moon, \r\nRising in clouded majesty, at length \r\nApparent queen unveiled her peerless light, \r\nAnd o'er the dark her silver mantle threw. \r\nWhen Adam thus to Eve.  Fair Consort, the hour \r\nOf night, and all things now retired to rest, \r\nMind us of like repose; since God hath set \r\nLabour and rest, as day and night, to men \r\nSuccessive; and the timely dew of sleep, \r\nNow falling with soft slumbrous weight, inclines \r\nOur eye-lids:  Other creatures all day long \r\nRove idle, unemployed, and less need rest; \r\nMan hath his daily work of body or mind \r\nAppointed, which declares his dignity, \r\nAnd the regard of Heaven on all his ways; \r\nWhile other animals unactive range, \r\nAnd of their doings God takes no account. \r\nTo-morrow, ere fresh morning streak the east \r\nWith first approach of light, we must be risen, \r\nAnd at our pleasant labour, to reform \r\nYon flowery arbours, yonder alleys green, \r\nOur walk at noon, with branches overgrown, \r\nThat mock our scant manuring, and require \r\nMore hands than ours to lop their wanton growth: \r\nThose blossoms also, and those dropping gums, \r\nThat lie bestrown, unsightly and unsmooth, \r\nAsk riddance, if we mean to tread with ease; \r\nMean while, as Nature wills, night bids us rest. \r\nTo whom thus Eve, with perfect beauty adorned \r\nMy Author and Disposer, what thou bidst \r\nUnargued I obey:  So God ordains; \r\nGod is thy law, thou mine:  To know no more \r\nIs woman's happiest knowledge, and her praise. \r\nWith thee conversing I forget all time; \r\nAll seasons, and their change, all please alike. \r\nSweet is the breath of Morn, her rising sweet, \r\nWith charm of earliest birds:  pleasant the sun, \r\nWhen first on this delightful land he spreads \r\nHis orient beams, on herb, tree, fruit, and flower, \r\nGlistering with dew; fragrant the fertile earth \r\nAfter soft showers; and sweet the coming on \r\nOf grateful Evening mild; then silent Night, \r\nWith this her solemn bird, and this fair moon, \r\nAnd these the gems of Heaven, her starry train: \r\nBut neither breath of Morn, when she ascends \r\nWith charm of earliest birds; nor rising sun \r\nOn this delightful land; nor herb, fruit, flower, \r\nGlistering with dew; nor fragrance after showers; \r\nNor grateful Evening mild; nor silent Night, \r\nWith this her solemn bird, nor walk by moon, \r\nOr glittering star-light, without thee is sweet. \r\nBut wherefore all night long shine these? for whom \r\nThis glorious sight, when sleep hath shut all eyes? \r\nTo whom our general ancestor replied. \r\nDaughter of God and Man, accomplished Eve, \r\nThese have their course to finish round the earth, \r\nBy morrow evening, and from land to land \r\nIn order, though to nations yet unborn, \r\nMinistring light prepared, they set and rise; \r\nLest total Darkness should by night regain \r\nHer old possession, and extinguish life \r\nIn Nature and all things; which these soft fires \r\nNot only enlighten, but with kindly heat \r\nOf various influence foment and warm, \r\nTemper or nourish, or in part shed down \r\nTheir stellar virtue on all kinds that grow \r\nOn earth, made hereby apter to receive \r\nPerfection from the sun's more potent ray. \r\nThese then, though unbeheld in deep of night, \r\nShine not in vain; nor think, though men were none, \r\nThat Heaven would want spectators, God want praise: \r\nMillions of spiritual creatures walk the earth \r\nUnseen, both when we wake, and when we sleep: \r\nAll these with ceaseless praise his works behold \r\nBoth day and night:  How often from the steep \r\nOf echoing hill or thicket have we heard \r\nCelestial voices to the midnight air, \r\nSole, or responsive each to others note, \r\nSinging their great Creator? oft in bands \r\nWhile they keep watch, or nightly rounding walk, \r\nWith heavenly touch of instrumental sounds \r\nIn full harmonick number joined, their songs \r\nDivide the night, and lift our thoughts to Heaven. \r\nThus talking, hand in hand alone they passed \r\nOn to their blissful bower: it was a place \r\nChosen by the sovran Planter, when he framed \r\nAll things to Man's delightful use; the roof \r\nOf thickest covert was inwoven shade \r\nLaurel and myrtle, and what higher grew \r\nOf firm and fragrant leaf; on either side \r\nAcanthus, and each odorous bushy shrub, \r\nFenced up the verdant wall; each beauteous flower, \r\nIris all hues, roses, and jessamin, \r\nReared high their flourished heads between, and wrought \r\nMosaick; underfoot the violet, \r\nCrocus, and hyacinth, with rich inlay \r\nBroidered the ground, more coloured than with stone \r\nOf costliest emblem:  Other creature here, \r\nBird, beast, insect, or worm, durst enter none, \r\nSuch was their awe of Man.  In shadier bower \r\nMore sacred and sequestered, though but feigned, \r\nPan or Sylvanus never slept, nor Nymph \r\nNor Faunus haunted.  Here, in close recess, \r\nWith flowers, garlands, and sweet-smelling herbs, \r\nEspoused Eve decked first her nuptial bed; \r\nAnd heavenly quires the hymenaean sung, \r\nWhat day the genial Angel to our sire \r\nBrought her in naked beauty more adorned, \r\nMore lovely, than Pandora, whom the Gods \r\nEndowed with all their gifts, and O! too like \r\nIn sad event, when to the unwiser son \r\nOf Japhet brought by Hermes, she ensnared \r\nMankind with her fair looks, to be avenged \r\nOn him who had stole Jove's authentick fire. \r\nThus, at their shady lodge arrived, both stood, \r\nBoth turned, and under open sky adored \r\nThe God that made both sky, air, earth, and heaven, \r\nWhich they beheld, the moon's resplendent globe, \r\nAnd starry pole:  Thou also madest the night, \r\nMaker Omnipotent, and thou the day, \r\nWhich we, in our appointed work employed, \r\nHave finished, happy in our mutual help \r\nAnd mutual love, the crown of all our bliss \r\nOrdained by thee; and this delicious place \r\nFor us too large, where thy abundance wants \r\nPartakers, and uncropt falls to the ground. \r\nBut thou hast promised from us two a race \r\nTo fill the earth, who shall with us extol \r\nThy goodness infinite, both when we wake, \r\nAnd when we seek, as now, thy gift of sleep. \r\nThis said unanimous, and other rites \r\nObserving none, but adoration pure \r\nWhich God likes best, into their inmost bower \r\nHanded they went; and, eased the putting off \r\nThese troublesome disguises which we wear, \r\nStraight side by side were laid; nor turned, I ween, \r\nAdam from his fair spouse, nor Eve the rites \r\nMysterious of connubial love refused: \r\nWhatever hypocrites austerely talk \r\nOf purity, and place, and innocence, \r\nDefaming as impure what God declares \r\nPure, and commands to some, leaves free to all. \r\nOur Maker bids encrease; who bids abstain \r\nBut our Destroyer, foe to God and Man? \r\nHail, wedded Love, mysterious law, true source \r\nOf human offspring, sole propriety \r\nIn Paradise of all things common else! \r\nBy thee adulterous Lust was driven from men \r\nAmong the bestial herds to range; by thee \r\nFounded in reason, loyal, just, and pure, \r\nRelations dear, and all the charities \r\nOf father, son, and brother, first were known. \r\nFar be it, that I should write thee sin or blame, \r\nOr think thee unbefitting holiest place, \r\nPerpetual fountain of domestick sweets, \r\nWhose bed is undefiled and chaste pronounced, \r\nPresent, or past, as saints and patriarchs used. \r\nHere Love his golden shafts employs, here lights \r\nHis constant lamp, and waves his purple wings, \r\nReigns here and revels; not in the bought smile \r\nOf harlots, loveless, joyless, unendeared, \r\nCasual fruition; nor in court-amours, \r\nMixed dance, or wanton mask, or midnight ball, \r\nOr serenate, which the starved lover sings \r\nTo his proud fair, best quitted with disdain. \r\nThese, lulled by nightingales, embracing slept, \r\nAnd on their naked limbs the flowery roof \r\nShowered roses, which the morn repaired.  Sleep on, \r\nBlest pair; and O!yet happiest, if ye seek \r\nNo happier state, and know to know no more. \r\nNow had night measured with her shadowy cone \r\nHalf way up hill this vast sublunar vault, \r\nAnd from their ivory port the Cherubim, \r\nForth issuing at the accustomed hour, stood armed \r\nTo their night watches in warlike parade; \r\nWhen Gabriel to his next in power thus spake. \r\nUzziel, half these draw off, and coast the south \r\nWith strictest watch; these other wheel the north; \r\nOur circuit meets full west.  As flame they part, \r\nHalf wheeling to the shield, half to the spear. \r\nFrom these, two strong and subtle Spirits he called \r\nThat near him stood, and gave them thus in charge. \r\nIthuriel and Zephon, with winged speed \r\nSearch through this garden, leave unsearched no nook; \r\nBut chiefly where those two fair creatures lodge, \r\nNow laid perhaps asleep, secure of harm. \r\nThis evening from the sun's decline arrived, \r\nWho tells of some infernal Spirit seen \r\nHitherward bent (who could have thought?) escaped \r\nThe bars of Hell, on errand bad no doubt: \r\nSuch, where ye find, seise fast, and hither bring. \r\nSo saying, on he led his radiant files, \r\nDazzling the moon; these to the bower direct \r\nIn search of whom they sought:  Him there they found \r\nSquat like a toad, close at the ear of Eve, \r\nAssaying by his devilish art to reach \r\nThe organs of her fancy, and with them forge \r\nIllusions, as he list, phantasms and dreams; \r\nOr if, inspiring venom, he might taint \r\nThe animal spirits, that from pure blood arise \r\nLike gentle breaths from rivers pure, thence raise \r\nAt least distempered, discontented thoughts, \r\nVain hopes, vain aims, inordinate desires, \r\nBlown up with high conceits ingendering pride. \r\nHim thus intent Ithuriel with his spear \r\nTouched lightly; for no falshood can endure \r\nTouch of celestial temper, but returns \r\nOf force to its own likeness:  Up he starts \r\nDiscovered and surprised.  As when a spark \r\nLights on a heap of nitrous powder, laid \r\nFit for the tun some magazine to store \r\nAgainst a rumoured war, the smutty grain, \r\nWith sudden blaze diffused, inflames the air; \r\nSo started up in his own shape the Fiend. \r\nBack stept those two fair Angels, half amazed \r\nSo sudden to behold the grisly king; \r\nYet thus, unmoved with fear, accost him soon. \r\nWhich of those rebel Spirits adjudged to Hell \r\nComest thou, escaped thy prison? and, transformed, \r\nWhy sat'st thou like an enemy in wait, \r\nHere watching at the head of these that sleep? \r\nKnow ye not then said Satan, filled with scorn, \r\nKnow ye not me? ye knew me once no mate \r\nFor you, there sitting where ye durst not soar: \r\nNot to know me argues yourselves unknown, \r\nThe lowest of your throng; or, if ye know, \r\nWhy ask ye, and superfluous begin \r\nYour message, like to end as much in vain? \r\nTo whom thus Zephon, answering scorn with scorn. \r\nThink not, revolted Spirit, thy shape the same, \r\nOr undiminished brightness to be known, \r\nAs when thou stoodest in Heaven upright and pure; \r\nThat glory then, when thou no more wast good, \r\nDeparted from thee; and thou resemblest now \r\nThy sin and place of doom obscure and foul. \r\nBut come, for thou, be sure, shalt give account \r\nTo him who sent us, whose charge is to keep \r\nThis place inviolable, and these from harm. \r\nSo spake the Cherub; and his grave rebuke, \r\nSevere in youthful beauty, added grace \r\nInvincible:  Abashed the Devil stood, \r\nAnd felt how awful goodness is, and saw \r\nVirtue in her shape how lovely; saw, and pined \r\nHis loss; but chiefly to find here observed \r\nHis lustre visibly impaired; yet seemed \r\nUndaunted.  If I must contend, said he, \r\nBest with the best, the sender, not the sent, \r\nOr all at once; more glory will be won, \r\nOr less be lost.  Thy fear, said Zephon bold, \r\nWill save us trial what the least can do \r\nSingle against thee wicked, and thence weak. \r\nThe Fiend replied not, overcome with rage; \r\nBut, like a proud steed reined, went haughty on, \r\nChamping his iron curb:  To strive or fly \r\nHe held it vain; awe from above had quelled \r\nHis heart, not else dismayed.  Now drew they nigh \r\nThe western point, where those half-rounding guards \r\nJust met, and closing stood in squadron joined, \r\nA waiting next command.  To whom their Chief, \r\nGabriel, from the front thus called aloud. \r\nO friends!  I hear the tread of nimble feet \r\nHasting this way, and now by glimpse discern \r\nIthuriel and Zephon through the shade; \r\nAnd with them comes a third of regal port, \r\nBut faded splendour wan; who by his gait \r\nAnd fierce demeanour seems the Prince of Hell, \r\nNot likely to part hence without contest; \r\nStand firm, for in his look defiance lours. \r\nHe scarce had ended, when those two approached, \r\nAnd brief related whom they brought, where found, \r\nHow busied, in what form and posture couched. \r\nTo whom with stern regard thus Gabriel spake. \r\nWhy hast thou, Satan, broke the bounds prescribed \r\nTo thy transgressions, and disturbed the charge \r\nOf others, who approve not to transgress \r\nBy thy example, but have power and right \r\nTo question thy bold entrance on this place; \r\nEmployed, it seems, to violate sleep, and those \r\nWhose dwelling God hath planted here in bliss! \r\nTo whom thus Satan with contemptuous brow. \r\nGabriel? thou hadst in Heaven the esteem of wise, \r\nAnd such I held thee; but this question asked \r\nPuts me in doubt.  Lives there who loves his pain! \r\nWho would not, finding way, break loose from Hell, \r\nThough thither doomed!  Thou wouldst thyself, no doubt \r\nAnd boldly venture to whatever place \r\nFarthest from pain, where thou mightst hope to change \r\nTorment with ease, and soonest recompense \r\nDole with delight, which in this place I sought; \r\nTo thee no reason, who knowest only good, \r\nBut evil hast not tried: and wilt object \r\nHis will who bounds us!  Let him surer bar \r\nHis iron gates, if he intends our stay \r\nIn that dark durance:  Thus much what was asked. \r\nThe rest is true, they found me where they say; \r\nBut that implies not violence or harm. \r\nThus he in scorn.  The warlike Angel moved, \r\nDisdainfully half smiling, thus replied. \r\nO loss of one in Heaven to judge of wise \r\nSince Satan fell, whom folly overthrew, \r\nAnd now returns him from his prison 'scaped, \r\nGravely in doubt whether to hold them wise \r\nOr not, who ask what boldness brought him hither \r\nUnlicensed from his bounds in Hell prescribed; \r\nSo wise he judges it to fly from pain \r\nHowever, and to 'scape his punishment! \r\nSo judge thou still, presumptuous! till the wrath, \r\nWhich thou incurrest by flying, meet thy flight \r\nSevenfold, and scourge that wisdom back to Hell, \r\nWhich taught thee yet no better, that no pain \r\nCan equal anger infinite provoked. \r\nBut wherefore thou alone? wherefore with thee \r\nCame not all hell broke loose? or thou than they \r\nLess hardy to endure?  Courageous Chief! \r\nThe first in flight from pain! hadst thou alleged \r\nTo thy deserted host this cause of flight, \r\nThou surely hadst not come sole fugitive. \r\nTo which the Fiend thus answered, frowning stern. \r\nNot that I less endure, or shrink from pain, \r\nInsulting Angel! well thou knowest I stood \r\nThy fiercest, when in battle to thy aid \r\nThe blasting vollied thunder made all speed, \r\nAnd seconded thy else not dreaded spear. \r\nBut still thy words at random, as before, \r\nArgue thy inexperience what behoves \r\nFrom hard assays and ill successes past \r\nA faithful leader, not to hazard all \r\nThrough ways of danger by himself untried: \r\nI, therefore, I alone first undertook \r\nTo wing the desolate abyss, and spy \r\nThis new created world, whereof in Hell \r\nFame is not silent, here in hope to find \r\nBetter abode, and my afflicted Powers \r\nTo settle here on earth, or in mid air; \r\nThough for possession put to try once more \r\nWhat thou and thy gay legions dare against; \r\nWhose easier business were to serve their Lord \r\nHigh up in Heaven, with songs to hymn his throne, \r\nAnd practised distances to cringe, not fight, \r\nTo whom the warriour Angel soon replied. \r\nTo say and straight unsay, pretending first \r\nWise to fly pain, professing next the spy, \r\nArgues no leader but a liear traced, \r\nSatan, and couldst thou faithful add?  O name, \r\nO sacred name of faithfulness profaned! \r\nFaithful to whom? to thy rebellious crew? \r\nArmy of Fiends, fit body to fit head. \r\nWas this your discipline and faith engaged, \r\nYour military obedience, to dissolve \r\nAllegiance to the acknowledged Power supreme? \r\nAnd thou, sly hypocrite, who now wouldst seem \r\nPatron of liberty, who more than thou \r\nOnce fawned, and cringed, and servily adored \r\nHeaven's awful Monarch? wherefore, but in hope \r\nTo dispossess him, and thyself to reign? \r\nBut mark what I arreed thee now, Avant; \r\nFly neither whence thou fledst!  If from this hour \r\nWithin these hallowed limits thou appear, \r\nBack to the infernal pit I drag thee chained, \r\nAnd seal thee so, as henceforth not to scorn \r\nThe facile gates of Hell too slightly barred. \r\nSo threatened he; but Satan to no threats \r\nGave heed, but waxing more in rage replied. \r\nThen when I am thy captive talk of chains, \r\nProud limitary Cherub! but ere then \r\nFar heavier load thyself expect to feel \r\nFrom my prevailing arm, though Heaven's King \r\nRide on thy wings, and thou with thy compeers, \r\nUs'd to the yoke, drawest his triumphant wheels \r\nIn progress through the road of Heaven star-paved. \r\nWhile thus he spake, the angelick squadron bright \r\nTurned fiery red, sharpening in mooned horns \r\nTheir phalanx, and began to hem him round \r\nWith ported spears, as thick as when a field \r\nOf Ceres ripe for harvest waving bends \r\nHer bearded grove of ears, which way the wind \r\nSways them; the careful plowman doubting stands, \r\nLeft on the threshing floor his hopeless sheaves \r\nProve chaff.  On the other side, Satan, alarmed, \r\nCollecting all his might, dilated stood, \r\nLike Teneriff or Atlas, unremoved: \r\nHis stature reached the sky, and on his crest \r\nSat Horrour plumed; nor wanted in his grasp \r\nWhat seemed both spear and shield:  Now dreadful deeds \r\nMight have ensued, nor only Paradise \r\nIn this commotion, but the starry cope \r\nOf Heaven perhaps, or all the elements \r\nAt least had gone to wrack, disturbed and torn \r\nWith violence of this conflict, had not soon \r\nThe Eternal, to prevent such horrid fray, \r\nHung forth in Heaven his golden scales, yet seen \r\nBetwixt Astrea and the Scorpion sign, \r\nWherein all things created first he weighed, \r\nThe pendulous round earth with balanced air \r\nIn counterpoise, now ponders all events, \r\nBattles and realms:  In these he put two weights, \r\nThe sequel each of parting and of fight: \r\nThe latter quick up flew, and kicked the beam, \r\nWhich Gabriel spying, thus bespake the Fiend. \r\nSatan, I know thy strength, and thou knowest mine; \r\nNeither our own, but given:  What folly then \r\nTo boast what arms can do? since thine no more \r\nThan Heaven permits, nor mine, though doubled now \r\nTo trample thee as mire:  For proof look up, \r\nAnd read thy lot in yon celestial sign; \r\nWhere thou art weighed, and shown how light, how weak, \r\nIf thou resist.  The Fiend looked up, and knew \r\nHis mounted scale aloft:  Nor more;but fled \r\nMurmuring, and with him fled the shades of night. \r\n \r\n \r\n \r\nBook V                                                           \r\n \r\n \r\nNow Morn, her rosy steps in the eastern clime \r\nAdvancing, sowed the earth with orient pearl, \r\nWhen Adam waked, so customed; for his sleep \r\nWas aery-light, from pure digestion bred, \r\nAnd temperate vapours bland, which the only sound \r\nOf leaves and fuming rills, Aurora's fan, \r\nLightly dispersed, and the shrill matin song \r\nOf birds on every bough; so much the more \r\nHis wonder was to find unwakened Eve \r\nWith tresses discomposed, and glowing cheek, \r\nAs through unquiet rest:  He, on his side \r\nLeaning half raised, with looks of cordial love \r\nHung over her enamoured, and beheld \r\nBeauty, which, whether waking or asleep, \r\nShot forth peculiar graces; then with voice \r\nMild, as when Zephyrus on Flora breathes, \r\nHer hand soft touching, whispered thus.  Awake, \r\nMy fairest, my espoused, my latest found, \r\nHeaven's last best gift, my ever new delight! \r\nAwake:  The morning shines, and the fresh field \r\nCalls us; we lose the prime, to mark how spring \r\nOur tender plants, how blows the citron grove, \r\nWhat drops the myrrh, and what the balmy reed, \r\nHow nature paints her colours, how the bee \r\nSits on the bloom extracting liquid sweet. \r\nSuch whispering waked her, but with startled eye \r\nOn Adam, whom embracing, thus she spake. \r\nO sole in whom my thoughts find all repose, \r\nMy glory, my perfection! glad I see \r\nThy face, and morn returned; for I this night \r\n(Such night till this I never passed) have dreamed, \r\nIf dreamed, not, as I oft am wont, of thee, \r\nWorks of day past, or morrow's next design, \r\nBut of offence and trouble, which my mind \r\nKnew never till this irksome night:  Methought, \r\nClose at mine ear one called me forth to walk \r\nWith gentle voice;  I thought it thine: It said, \r\n'Why sleepest thou, Eve? now is the pleasant time, \r\n'The cool, the silent, save where silence yields \r\n'To the night-warbling bird, that now awake \r\n'Tunes sweetest his love-laboured song; now reigns \r\n'Full-orbed the moon, and with more pleasing light \r\n'Shadowy sets off the face of things; in vain, \r\n'If none regard; Heaven wakes with all his eyes, \r\n'Whom to behold but thee, Nature's desire? \r\n'In whose sight all things joy, with ravishment \r\n'Attracted by thy beauty still to gaze.' \r\nI rose as at thy call, but found thee not; \r\nTo find thee I directed then my walk; \r\nAnd on, methought, alone I passed through ways \r\nThat brought me on a sudden to the tree \r\nOf interdicted knowledge: fair it seemed, \r\nMuch fairer to my fancy than by day: \r\nAnd, as I wondering looked, beside it stood \r\nOne shaped and winged like one of those from Heaven \r\nBy us oft seen; his dewy locks distilled \r\nAmbrosia; on that tree he also gazed; \r\nAnd 'O fair plant,' said he, 'with fruit surcharged, \r\n'Deigns none to ease thy load, and taste thy sweet, \r\n'Nor God, nor Man?  Is knowledge so despised? \r\n'Or envy, or what reserve forbids to taste? \r\n'Forbid who will, none shall from me withhold \r\n'Longer thy offered good; why else set here? \r\nThis said, he paused not, but with venturous arm \r\nHe plucked, he tasted; me damp horrour chilled \r\nAt such bold words vouched with a deed so bold: \r\nBut he thus, overjoyed; 'O fruit divine, \r\n'Sweet of thyself, but much more sweet thus cropt, \r\n'Forbidden here, it seems, as only fit \r\n'For Gods, yet able to make Gods of Men: \r\n'And why not Gods of Men; since good, the more \r\n'Communicated, more abundant grows, \r\n'The author not impaired, but honoured more? \r\n'Here, happy creature, fair angelick Eve! \r\n'Partake thou also; happy though thou art, \r\n'Happier thou mayest be, worthier canst not be: \r\n'Taste this, and be henceforth among the Gods \r\n'Thyself a Goddess, not to earth confined, \r\n'But sometimes in the air, as we, sometimes \r\n'Ascend to Heaven, by merit thine, and see \r\n'What life the Gods live there, and such live thou!' \r\nSo saying, he drew nigh, and to me held, \r\nEven to my mouth of that same fruit held part \r\nWhich he had plucked; the pleasant savoury smell \r\nSo quickened appetite, that I, methought, \r\nCould not but taste.  Forthwith up to the clouds \r\nWith him I flew, and underneath beheld \r\nThe earth outstretched immense, a prospect wide \r\nAnd various:  Wondering at my flight and change \r\nTo this high exaltation; suddenly \r\nMy guide was gone, and I, methought, sunk down, \r\nAnd fell asleep; but O, how glad I waked \r\nTo find this but a dream!  Thus Eve her night \r\nRelated, and thus Adam answered sad. \r\nBest image of myself, and dearer half, \r\nThe trouble of thy thoughts this night in sleep \r\nAffects me equally; nor can I like \r\nThis uncouth dream, of evil sprung, I fear; \r\nYet evil whence? in thee can harbour none, \r\nCreated pure.  But know that in the soul \r\nAre many lesser faculties, that serve \r\nReason as chief; among these Fancy next \r\nHer office holds; of all external things \r\nWhich the five watchful senses represent, \r\nShe forms imaginations, aery shapes, \r\nWhich Reason, joining or disjoining, frames \r\nAll what we affirm or what deny, and call \r\nOur knowledge or opinion; then retires \r\nInto her private cell, when nature rests. \r\nOft in her absence mimick Fancy wakes \r\nTo imitate her; but, misjoining shapes, \r\nWild work produces oft, and most in dreams; \r\nIll matching words and deeds long past or late. \r\nSome such resemblances, methinks, I find \r\nOf our last evening's talk, in this thy dream, \r\nBut with addition strange; yet be not sad. \r\nEvil into the mind of God or Man \r\nMay come and go, so unreproved, and leave \r\nNo spot or blame behind:  Which gives me hope \r\nThat what in sleep thou didst abhor to dream, \r\nWaking thou never will consent to do. \r\nBe not disheartened then, nor cloud those looks, \r\nThat wont to be more cheerful and serene, \r\nThan when fair morning first smiles on the world; \r\nAnd let us to our fresh employments rise \r\nAmong the groves, the fountains, and the flowers \r\nThat open now their choisest bosomed smells, \r\nReserved from night, and kept for thee in store. \r\nSo cheered he his fair spouse, and she was cheered; \r\nBut silently a gentle tear let fall \r\nFrom either eye, and wiped them with her hair; \r\nTwo other precious drops that ready stood, \r\nEach in their crystal sluice, he ere they fell \r\nKissed, as the gracious signs of sweet remorse \r\nAnd pious awe, that feared to have offended. \r\nSo all was cleared, and to the field they haste. \r\nBut first, from under shady arborous roof \r\nSoon as they forth were come to open sight \r\nOf day-spring, and the sun, who, scarce up-risen, \r\nWith wheels yet hovering o'er the ocean-brim, \r\nShot parallel to the earth his dewy ray, \r\nDiscovering in wide landskip all the east \r\nOf Paradise and Eden's happy plains, \r\nLowly they bowed adoring, and began \r\nTheir orisons, each morning duly paid \r\nIn various style; for neither various style \r\nNor holy rapture wanted they to praise \r\nTheir Maker, in fit strains pronounced, or sung \r\nUnmeditated; such prompt eloquence \r\nFlowed from their lips, in prose or numerous verse, \r\nMore tuneable than needed lute or harp \r\nTo add more sweetness; and they thus began. \r\nThese are thy glorious works, Parent of good, \r\nAlmighty!  Thine this universal frame, \r\nThus wonderous fair;  Thyself how wonderous then! \r\nUnspeakable, who sitst above these heavens \r\nTo us invisible, or dimly seen \r\nIn these thy lowest works; yet these declare \r\nThy goodness beyond thought, and power divine. \r\nSpeak, ye who best can tell, ye sons of light, \r\nAngels; for ye behold him, and with songs \r\nAnd choral symphonies, day without night, \r\nCircle his throne rejoicing; ye in Heaven \r\nOn Earth join all ye Creatures to extol \r\nHim first, him last, him midst, and without end. \r\nFairest of stars, last in the train of night, \r\nIf better thou belong not to the dawn, \r\nSure pledge of day, that crownest the smiling morn \r\nWith thy bright circlet, praise him in thy sphere, \r\nWhile day arises, that sweet hour of prime. \r\nThou Sun, of this great world both eye and soul, \r\nAcknowledge him thy greater; sound his praise \r\nIn thy eternal course, both when thou climbest, \r\nAnd when high noon hast gained, and when thou fallest. \r\nMoon, that now meetest the orient sun, now flyest, \r\nWith the fixed Stars, fixed in their orb that flies; \r\nAnd ye five other wandering Fires, that move \r\nIn mystick dance not without song, resound \r\nHis praise, who out of darkness called up light. \r\nAir, and ye Elements, the eldest birth \r\nOf Nature's womb, that in quaternion run \r\nPerpetual circle, multiform; and mix \r\nAnd nourish all things; let your ceaseless change \r\nVary to our great Maker still new praise. \r\nYe Mists and Exhalations, that now rise \r\nFrom hill or steaming lake, dusky or gray, \r\nTill the sun paint your fleecy skirts with gold, \r\nIn honour to the world's great Author rise; \r\nWhether to deck with clouds the uncoloured sky, \r\nOr wet the thirsty earth with falling showers, \r\nRising or falling still advance his praise. \r\nHis praise, ye Winds, that from four quarters blow, \r\nBreathe soft or loud; and, wave your tops, ye Pines, \r\nWith every plant, in sign of worship wave. \r\nFountains, and ye that warble, as ye flow, \r\nMelodious murmurs, warbling tune his praise. \r\nJoin voices, all ye living Souls:  Ye Birds, \r\nThat singing up to Heaven-gate ascend, \r\nBear on your wings and in your notes his praise. \r\nYe that in waters glide, and ye that walk \r\nThe earth, and stately tread, or lowly creep; \r\nWitness if I be silent, morn or even, \r\nTo hill, or valley, fountain, or fresh shade, \r\nMade vocal by my song, and taught his praise. \r\nHail, universal Lord, be bounteous still \r\nTo give us only good; and if the night \r\nHave gathered aught of evil, or concealed, \r\nDisperse it, as now light dispels the dark! \r\nSo prayed they innocent, and to their thoughts \r\nFirm peace recovered soon, and wonted calm. \r\nOn to their morning's rural work they haste, \r\nAmong sweet dews and flowers; where any row \r\nOf fruit-trees over-woody reached too far \r\nTheir pampered boughs, and needed hands to check \r\nFruitless embraces: or they led the vine \r\nTo wed her elm; she, spoused, about him twines \r\nHer marriageable arms, and with him brings \r\nHer dower, the adopted clusters, to adorn \r\nHis barren leaves.  Them thus employed beheld \r\nWith pity Heaven's high King, and to him called \r\nRaphael, the sociable Spirit, that deigned \r\nTo travel with Tobias, and secured \r\nHis marriage with the seventimes-wedded maid. \r\nRaphael, said he, thou hearest what stir on Earth \r\nSatan, from Hell 'scaped through the darksome gulf, \r\nHath raised in Paradise; and how disturbed \r\nThis night the human pair; how he designs \r\nIn them at once to ruin all mankind. \r\nGo therefore, half this day as friend with friend \r\nConverse with Adam, in what bower or shade \r\nThou findest him from the heat of noon retired, \r\nTo respite his day-labour with repast, \r\nOr with repose; and such discourse bring on, \r\nAs may advise him of his happy state, \r\nHappiness in his power left free to will, \r\nLeft to his own free will, his will though free, \r\nYet mutable; whence warn him to beware \r\nHe swerve not, too secure:  Tell him withal \r\nHis danger, and from whom; what enemy, \r\nLate fallen himself from Heaven, is plotting now \r\nThe fall of others from like state of bliss; \r\nBy violence? no, for that shall be withstood; \r\nBut by deceit and lies:  This let him know, \r\nLest, wilfully transgressing, he pretend \r\nSurprisal, unadmonished, unforewarned. \r\nSo spake the Eternal Father, and fulfilled \r\nAll justice:  Nor delayed the winged Saint \r\nAfter his charge received; but from among \r\nThousand celestial Ardours, where he stood \r\nVeiled with his gorgeous wings, up springing light, \r\nFlew through the midst of Heaven; the angelick quires, \r\nOn each hand parting, to his speed gave way \r\nThrough all the empyreal road; till, at the gate \r\nOf Heaven arrived, the gate self-opened wide \r\nOn golden hinges turning, as by work \r\nDivine the sovran Architect had framed. \r\nFrom hence no cloud, or, to obstruct his sight, \r\nStar interposed, however small he sees, \r\nNot unconformed to other shining globes, \r\nEarth, and the garden of God, with cedars crowned \r\nAbove all hills.  As when by night the glass \r\nOf Galileo, less assured, observes \r\nImagined lands and regions in the moon: \r\nOr pilot, from amidst the Cyclades \r\nDelos or Samos first appearing, kens \r\nA cloudy spot.  Down thither prone in flight \r\nHe speeds, and through the vast ethereal sky \r\nSails between worlds and worlds, with steady wing \r\nNow on the polar winds, then with quick fan \r\nWinnows the buxom air; till, within soar \r\nOf towering eagles, to all the fowls he seems \r\nA phoenix, gazed by all as that sole bird, \r\nWhen, to enshrine his reliques in the Sun's \r\nBright temple, to Egyptian Thebes he flies. \r\nAt once on the eastern cliff of Paradise \r\nHe lights, and to his proper shape returns \r\nA Seraph winged:  Six wings he wore, to shade \r\nHis lineaments divine; the pair that clad \r\nEach shoulder broad, came mantling o'er his breast \r\nWith regal ornament; the middle pair \r\nGirt like a starry zone his waist, and round \r\nSkirted his loins and thighs with downy gold \r\nAnd colours dipt in Heaven; the third his feet \r\nShadowed from either heel with feathered mail, \r\nSky-tinctured grain.  Like Maia's son he stood, \r\nAnd shook his plumes, that heavenly fragrance filled \r\nThe circuit wide.  Straight knew him all the bands \r\nOf Angels under watch; and to his state, \r\nAnd to his message high, in honour rise; \r\nFor on some message high they guessed him bound. \r\nTheir glittering tents he passed, and now is come \r\nInto the blissful field, through groves of myrrh, \r\nAnd flowering odours, cassia, nard, and balm; \r\nA wilderness of sweets; for Nature here \r\nWantoned as in her prime, and played at will \r\nHer virgin fancies pouring forth more sweet, \r\nWild above rule or art, enormous bliss. \r\nHim through the spicy forest onward come \r\nAdam discerned, as in the door he sat \r\nOf his cool bower, while now the mounted sun \r\nShot down direct his fervid rays to warm \r\nEarth's inmost womb, more warmth than Adam needs: \r\nAnd Eve within, due at her hour prepared \r\nFor dinner savoury fruits, of taste to please \r\nTrue appetite, and not disrelish thirst \r\nOf nectarous draughts between, from milky stream, \r\nBerry or grape:  To whom thus Adam called. \r\nHaste hither, Eve, and worth thy sight behold \r\nEastward among those trees, what glorious shape \r\nComes this way moving; seems another morn \r\nRisen on mid-noon; some great behest from Heaven \r\nTo us perhaps he brings, and will vouchsafe \r\nThis day to be our guest.  But go with speed, \r\nAnd, what thy stores contain, bring forth, and pour \r\nAbundance, fit to honour and receive \r\nOur heavenly stranger:  Well we may afford \r\nOur givers their own gifts, and large bestow \r\nFrom large bestowed, where Nature multiplies \r\nHer fertile growth, and by disburthening grows \r\nMore fruitful, which instructs us not to spare. \r\nTo whom thus Eve.  Adam, earth's hallowed mould, \r\nOf God inspired! small store will serve, where store, \r\nAll seasons, ripe for use hangs on the stalk; \r\nSave what by frugal storing firmness gains \r\nTo nourish, and superfluous moist consumes: \r\nBut I will haste, and from each bough and brake, \r\nEach plant and juciest gourd, will pluck such choice \r\nTo entertain our Angel-guest, as he \r\nBeholding shall confess, that here on Earth \r\nGod hath dispensed his bounties as in Heaven. \r\nSo saying, with dispatchful looks in haste \r\nShe turns, on hospitable thoughts intent \r\nWhat choice to choose for delicacy best, \r\nWhat order, so contrived as not to mix \r\nTastes, not well joined, inelegant, but bring \r\nTaste after taste upheld with kindliest change; \r\nBestirs her then, and from each tender stalk \r\nWhatever Earth, all-bearing mother, yields \r\nIn India East or West, or middle shore \r\nIn Pontus or the Punick coast, or where \r\nAlcinous reigned, fruit of all kinds, in coat \r\nRough, or smooth rind, or bearded husk, or shell, \r\nShe gathers, tribute large, and on the board \r\nHeaps with unsparing hand; for drink the grape \r\nShe crushes, inoffensive must, and meaths \r\nFrom many a berry, and from sweet kernels pressed \r\nShe tempers dulcet creams; nor these to hold \r\nWants her fit vessels pure; then strows the ground \r\nWith rose and odours from the shrub unfumed. \r\nMean while our primitive great sire, to meet \r\nHis God-like guest, walks forth, without more train \r\nAccompanied than with his own complete \r\nPerfections; in himself was all his state, \r\nMore solemn than the tedious pomp that waits \r\nOn princes, when their rich retinue long \r\nOf horses led, and grooms besmeared with gold, \r\nDazzles the croud, and sets them all agape. \r\nNearer his presence Adam, though not awed, \r\nYet with submiss approach and reverence meek, \r\nAs to a superiour nature bowing low, \r\nThus said.  Native of Heaven, for other place \r\nNone can than Heaven such glorious shape contain; \r\nSince, by descending from the thrones above, \r\nThose happy places thou hast deigned a while \r\nTo want, and honour these, vouchsafe with us \r\nTwo only, who yet by sovran gift possess \r\nThis spacious ground, in yonder shady bower \r\nTo rest; and what the garden choicest bears \r\nTo sit and taste, till this meridian heat \r\nBe over, and the sun more cool decline. \r\nWhom thus the angelick Virtue answered mild. \r\nAdam, I therefore came; nor art thou such \r\nCreated, or such place hast here to dwell, \r\nAs may not oft invite, though Spirits of Heaven, \r\nTo visit thee; lead on then where thy bower \r\nO'ershades; for these mid-hours, till evening rise, \r\nI have at will.  So to the sylvan lodge \r\nThey came, that like Pomona's arbour smiled, \r\nWith flowerets decked, and fragrant smells; but Eve, \r\nUndecked save with herself, more lovely fair \r\nThan Wood-Nymph, or the fairest Goddess feigned \r\nOf three that in mount Ida naked strove, \r\nStood to entertain her guest from Heaven; no veil \r\nShe needed, virtue-proof; no thought infirm \r\nAltered her cheek.  On whom the Angel Hail \r\nBestowed, the holy salutation used \r\nLong after to blest Mary, second Eve. \r\nHail, Mother of Mankind, whose fruitful womb \r\nShall fill the world more numerous with thy sons, \r\nThan with these various fruits the trees of God \r\nHave heaped this table!--Raised of grassy turf \r\nTheir table was, and mossy seats had round, \r\nAnd on her ample square from side to side \r\nAll autumn piled, though spring and autumn here \r\nDanced hand in hand.  A while discourse they hold; \r\nNo fear lest dinner cool; when thus began \r\nOur author.  Heavenly stranger, please to taste \r\nThese bounties, which our Nourisher, from whom \r\nAll perfect good, unmeasured out, descends, \r\nTo us for food and for delight hath caused \r\nThe earth to yield; unsavoury food perhaps \r\nTo spiritual natures; only this I know, \r\nThat one celestial Father gives to all. \r\nTo whom the Angel.  Therefore what he gives \r\n(Whose praise be ever sung) to Man in part \r\nSpiritual, may of purest Spirits be found \r\nNo ingrateful food:  And food alike those pure \r\nIntelligential substances require, \r\nAs doth your rational; and both contain \r\nWithin them every lower faculty \r\nOf sense, whereby they hear, see, smell, touch, taste, \r\nTasting concoct, digest, assimilate, \r\nAnd corporeal to incorporeal turn. \r\nFor know, whatever was created, needs \r\nTo be sustained and fed:  Of elements \r\nThe grosser feeds the purer, earth the sea, \r\nEarth and the sea feed air, the air those fires \r\nEthereal, and as lowest first the moon; \r\nWhence in her visage round those spots, unpurged \r\nVapours not yet into her substance turned. \r\nNor doth the moon no nourishment exhale \r\nFrom her moist continent to higher orbs. \r\nThe sun that light imparts to all, receives \r\nFrom all his alimental recompence \r\nIn humid exhalations, and at even \r\nSups with the ocean.  Though in Heaven the trees \r\nOf life ambrosial fruitage bear, and vines \r\nYield nectar; though from off the boughs each morn \r\nWe brush mellifluous dews, and find the ground \r\nCovered with pearly grain:  Yet God hath here \r\nVaried his bounty so with new delights, \r\nAs may compare with Heaven; and to taste \r\nThink not I shall be nice.  So down they sat, \r\nAnd to their viands fell; nor seemingly \r\nThe Angel, nor in mist, the common gloss \r\nOf Theologians; but with keen dispatch \r\nOf real hunger, and concoctive heat \r\nTo transubstantiate:  What redounds, transpires \r\nThrough Spirits with ease; nor wonder;if by fire \r\nOf sooty coal the empirick alchemist \r\nCan turn, or holds it possible to turn, \r\nMetals of drossiest ore to perfect gold, \r\nAs from the mine.  Mean while at table Eve \r\nMinistered naked, and their flowing cups \r\nWith pleasant liquours crowned:  O innocence \r\nDeserving Paradise! if ever, then, \r\nThen had the sons of God excuse to have been \r\nEnamoured at that sight; but in those hearts \r\nLove unlibidinous reigned, nor jealousy \r\nWas understood, the injured lover's hell. \r\nThus when with meats and drinks they had sufficed, \r\nNot burdened nature, sudden mind arose \r\nIn Adam, not to let the occasion pass \r\nGiven him by this great conference to know \r\nOf things above his world, and of their being \r\nWho dwell in Heaven, whose excellence he saw \r\nTranscend his own so far; whose radiant forms, \r\nDivine effulgence, whose high power, so far \r\nExceeded human; and his wary speech \r\nThus to the empyreal minister he framed. \r\nInhabitant with God, now know I well \r\nThy favour, in this honour done to Man; \r\nUnder whose lowly roof thou hast vouchsafed \r\nTo enter, and these earthly fruits to taste, \r\nFood not of Angels, yet accepted so, \r\nAs that more willingly thou couldst not seem \r\nAt Heaven's high feasts to have fed: yet what compare \r\nTo whom the winged Hierarch replied. \r\nO Adam, One Almighty is, from whom \r\nAll things proceed, and up to him return, \r\nIf not depraved from good, created all \r\nSuch to perfection, one first matter all, \r\nEndued with various forms, various degrees \r\nOf substance, and, in things that live, of life; \r\nBut more refined, more spiritous, and pure, \r\nAs nearer to him placed, or nearer tending \r\nEach in their several active spheres assigned, \r\nTill body up to spirit work, in bounds \r\nProportioned to each kind.  So from the root \r\nSprings lighter the green stalk, from thence the leaves \r\nMore aery, last the bright consummate flower \r\nSpirits odorous breathes: flowers and their fruit, \r\nMan's nourishment, by gradual scale sublimed, \r\nTo vital spirits aspire, to animal, \r\nTo intellectual; give both life and sense, \r\nFancy and understanding; whence the soul \r\nReason receives, and reason is her being, \r\nDiscursive, or intuitive; discourse \r\nIs oftest yours, the latter most is ours, \r\nDiffering but in degree, of kind the same. \r\nWonder not then, what God for you saw good \r\nIf I refuse not, but convert, as you \r\nTo proper substance.  Time may come, when Men \r\nWith Angels may participate, and find \r\nNo inconvenient diet, nor too light fare; \r\nAnd from these corporal nutriments perhaps \r\nYour bodies may at last turn all to spirit, \r\nImproved by tract of time, and, winged, ascend \r\nEthereal, as we; or may, at choice, \r\nHere or in heavenly Paradises dwell; \r\nIf ye be found obedient, and retain \r\nUnalterably firm his love entire, \r\nWhose progeny you are.  Mean while enjoy \r\nYour fill what happiness this happy state \r\nCan comprehend, incapable of more. \r\nTo whom the patriarch of mankind replied. \r\nO favourable Spirit, propitious guest, \r\nWell hast thou taught the way that might direct \r\nOur knowledge, and the scale of nature set \r\nFrom center to circumference; whereon, \r\nIn contemplation of created things, \r\nBy steps we may ascend to God.  But say, \r\nWhat meant that caution joined, If ye be found \r\nObedient?  Can we want obedience then \r\nTo him, or possibly his love desert, \r\nWho formed us from the dust and placed us here \r\nFull to the utmost measure of what bliss \r\nHuman desires can seek or apprehend? \r\nTo whom the Angel.  Son of Heaven and Earth, \r\nAttend!  That thou art happy, owe to God; \r\nThat thou continuest such, owe to thyself, \r\nThat is, to thy obedience; therein stand. \r\nThis was that caution given thee; be advised. \r\nGod made thee perfect, not immutable; \r\nAnd good he made thee, but to persevere \r\nHe left it in thy power; ordained thy will \r\nBy nature free, not over-ruled by fate \r\nInextricable, or strict necessity: \r\nOur voluntary service he requires, \r\nNot our necessitated; such with him \r\nFinds no acceptance, nor can find; for how \r\nCan hearts, not free, be tried whether they serve \r\nWilling or no, who will but what they must \r\nBy destiny, and can no other choose? \r\nMyself, and all the angelick host, that stand \r\nIn sight of God, enthroned, our happy state \r\nHold, as you yours, while our obedience holds; \r\nOn other surety none:  Freely we serve, \r\nBecause we freely love, as in our will \r\nTo love or not; in this we stand or fall: \r\nAnd some are fallen, to disobedience fallen, \r\nAnd so from Heaven to deepest Hell; O fall \r\nFrom what high state of bliss, into what woe! \r\nTo whom our great progenitor.  Thy words \r\nAttentive, and with more delighted ear, \r\nDivine instructer, I have heard, than when \r\nCherubick songs by night from neighbouring hills \r\nAereal musick send:  Nor knew I not \r\nTo be both will and deed created free; \r\nYet that we never shall forget to love \r\nOur Maker, and obey him whose command \r\nSingle is yet so just, my constant thoughts \r\nAssured me, and still assure:  Though what thou tellest \r\nHath passed in Heaven, some doubt within me move, \r\nBut more desire to hear, if thou consent, \r\nThe full relation, which must needs be strange, \r\nWorthy of sacred silence to be heard; \r\nAnd we have yet large day, for scarce the sun \r\nHath finished half his journey, and scarce begins \r\nHis other half in the great zone of Heaven. \r\nThus Adam made request; and Raphael, \r\nAfter short pause assenting, thus began. \r\nHigh matter thou enjoinest me, O prime of men, \r\nSad task and hard:  For how shall I relate \r\nTo human sense the invisible exploits \r\nOf warring Spirits? how, without remorse, \r\nThe ruin of so many glorious once \r\nAnd perfect while they stood? how last unfold \r\nThe secrets of another world, perhaps \r\nNot lawful to reveal? yet for thy good \r\nThis is dispensed; and what surmounts the reach \r\nOf human sense, I shall delineate so, \r\nBy likening spiritual to corporal forms, \r\nAs may express them best; though what if Earth \r\nBe but a shadow of Heaven, and things therein \r\nEach to other like, more than on earth is thought? \r\nAs yet this world was not, and Chaos wild \r\nReigned where these Heavens now roll, where Earth now rests \r\nUpon her center poised; when on a day \r\n(For time, though in eternity, applied \r\nTo motion, measures all things durable \r\nBy present, past, and future,) on such day \r\nAs Heaven's great year brings forth, the empyreal host \r\nOf Angels by imperial summons called, \r\nInnumerable before the Almighty's throne \r\nForthwith, from all the ends of Heaven, appeared \r\nUnder their Hierarchs in orders bright: \r\nTen thousand thousand ensigns high advanced, \r\nStandards and gonfalons 'twixt van and rear \r\nStream in the air, and for distinction serve \r\nOf hierarchies, of orders, and degrees; \r\nOr in their glittering tissues bear imblazed \r\nHoly memorials, acts of zeal and love \r\nRecorded eminent.  Thus when in orbs \r\nOf circuit inexpressible they stood, \r\nOrb within orb, the Father Infinite, \r\nBy whom in bliss imbosomed sat the Son, \r\nAmidst as from a flaming mount, whose top \r\nBrightness had made invisible, thus spake. \r\nHear, all ye Angels, progeny of light, \r\nThrones, Dominations, Princedoms, Virtues, Powers; \r\nHear my decree, which unrevoked shall stand. \r\nThis day I have begot whom I declare \r\nMy only Son, and on this holy hill \r\nHim have anointed, whom ye now behold \r\nAt my right hand; your head I him appoint; \r\nAnd by myself have sworn, to him shall bow \r\nAll knees in Heaven, and shall confess him Lord: \r\nUnder his great vice-gerent reign abide \r\nUnited, as one individual soul, \r\nFor ever happy:  Him who disobeys, \r\nMe disobeys, breaks union, and that day, \r\nCast out from God and blessed vision, falls \r\nInto utter darkness, deep ingulfed, his place \r\nOrdained without redemption, without end. \r\nSo spake the Omnipotent, and with his words \r\nAll seemed well pleased; all seemed, but were not all. \r\nThat day, as other solemn days, they spent \r\nIn song and dance about the sacred hill; \r\nMystical dance, which yonder starry sphere \r\nOf planets, and of fixed, in all her wheels \r\nResembles nearest, mazes intricate, \r\nEccentrick, intervolved, yet regular \r\nThen most, when most irregular they seem; \r\nAnd in their motions harmony divine \r\nSo smooths her charming tones, that God's own ear \r\nListens delighted.  Evening now approached, \r\n(For we have also our evening and our morn, \r\nWe ours for change delectable, not need;) \r\nForthwith from dance to sweet repast they turn \r\nDesirous; all in circles as they stood, \r\nTables are set, and on a sudden piled \r\nWith Angels food, and rubied nectar flows \r\nIn pearl, in diamond, and massy gold, \r\nFruit of delicious vines, the growth of Heaven. \r\nOn flowers reposed, and with fresh flowerets crowned, \r\nThey eat, they drink, and in communion sweet \r\nQuaff immortality and joy, secure \r\nOf surfeit, where full measure only bounds \r\nExcess, before the all-bounteous King, who showered \r\nWith copious hand, rejoicing in their joy. \r\nNow when ambrosial night with clouds exhaled \r\nFrom that high mount of God, whence light and shade \r\nSpring both, the face of brightest Heaven had changed \r\nTo grateful twilight, (for night comes not there \r\nIn darker veil,) and roseat dews disposed \r\nAll but the unsleeping eyes of God to rest; \r\nWide over all the plain, and wider far \r\nThan all this globous earth in plain outspread, \r\n(Such are the courts of God) the angelick throng, \r\nDispersed in bands and files, their camp extend \r\nBy living streams among the trees of life, \r\nPavilions numberless, and sudden reared, \r\nCelestial tabernacles, where they slept \r\nFanned with cool winds; save those, who, in their course, \r\nMelodious hymns about the sovran throne \r\nAlternate all night long: but not so waked \r\nSatan; so call him now, his former name \r\nIs heard no more in Heaven; he of the first, \r\nIf not the first Arch-Angel, great in power, \r\nIn favour and pre-eminence, yet fraught \r\nWith envy against the Son of God, that day \r\nHonoured by his great Father, and proclaimed \r\nMessiah King anointed, could not bear \r\nThrough pride that sight, and thought himself impaired. \r\nDeep malice thence conceiving and disdain, \r\nSoon as midnight brought on the dusky hour \r\nFriendliest to sleep and silence, he resolved \r\nWith all his legions to dislodge, and leave \r\nUnworshipt, unobeyed, the throne supreme, \r\nContemptuous; and his next subordinate \r\nAwakening, thus to him in secret spake. \r\nSleepest thou, Companion dear?  What sleep can close \r\nThy eye-lids? and rememberest what decree \r\nOf yesterday, so late hath passed the lips \r\nOf Heaven's Almighty.  Thou to me thy thoughts \r\nWast wont, I mine to thee was wont to impart; \r\nBoth waking we were one; how then can now \r\nThy sleep dissent?  New laws thou seest imposed; \r\nNew laws from him who reigns, new minds may raise \r\nIn us who serve, new counsels to debate \r\nWhat doubtful may ensue:  More in this place \r\nTo utter is not safe.  Assemble thou \r\nOf all those myriads which we lead the chief; \r\nTell them, that by command, ere yet dim night \r\nHer shadowy cloud withdraws, I am to haste, \r\nAnd all who under me their banners wave, \r\nHomeward, with flying march, where we possess \r\nThe quarters of the north; there to prepare \r\nFit entertainment to receive our King, \r\nThe great Messiah, and his new commands, \r\nWho speedily through all the hierarchies \r\nIntends to pass triumphant, and give laws. \r\nSo spake the false Arch-Angel, and infused \r\nBad influence into the unwary breast \r\nOf his associate:  He together calls, \r\nOr several one by one, the regent Powers, \r\nUnder him Regent; tells, as he was taught, \r\nThat the Most High commanding, now ere night, \r\nNow ere dim night had disincumbered Heaven, \r\nThe great hierarchal standard was to move; \r\nTells the suggested cause, and casts between \r\nAmbiguous words and jealousies, to sound \r\nOr taint integrity:  But all obeyed \r\nThe wonted signal, and superiour voice \r\nOf their great Potentate; for great indeed \r\nHis name, and high was his degree in Heaven; \r\nHis countenance, as the morning-star that guides \r\nThe starry flock, allured them, and with lies \r\nDrew after him the third part of Heaven's host. \r\nMean while the Eternal eye, whose sight discerns \r\nAbstrusest thoughts, from forth his holy mount, \r\nAnd from within the golden lamps that burn \r\nNightly before him, saw without their light \r\nRebellion rising; saw in whom, how spread \r\nAmong the sons of morn, what multitudes \r\nWere banded to oppose his high decree; \r\nAnd, smiling, to his only Son thus said. \r\nSon, thou in whom my glory I behold \r\nIn full resplendence, Heir of all my might, \r\nNearly it now concerns us to be sure \r\nOf our Omnipotence, and with what arms \r\nWe mean to hold what anciently we claim \r\nOf deity or empire:  Such a foe \r\nIs rising, who intends to erect his throne \r\nEqual to ours, throughout the spacious north; \r\nNor so content, hath in his thought to try \r\nIn battle, what our power is, or our right. \r\nLet us advise, and to this hazard draw \r\nWith speed what force is left, and all employ \r\nIn our defence; lest unawares we lose \r\nThis our high place, our sanctuary, our hill. \r\nTo whom the Son with calm aspect and clear, \r\nLightning divine, ineffable, serene, \r\nMade answer.  Mighty Father, thou thy foes \r\nJustly hast in derision, and, secure, \r\nLaughest at their vain designs and tumults vain, \r\nMatter to me of glory, whom their hate \r\nIllustrates, when they see all regal power \r\nGiven me to quell their pride, and in event \r\nKnow whether I be dextrous to subdue \r\nThy rebels, or be found the worst in Heaven. \r\nSo spake the Son; but Satan, with his Powers, \r\nFar was advanced on winged speed; an host \r\nInnumerable as the stars of night, \r\nOr stars of morning, dew-drops, which the sun \r\nImpearls on every leaf and every flower. \r\nRegions they passed, the mighty regencies \r\nOf Seraphim, and Potentates, and Thrones, \r\nIn their triple degrees; regions to which \r\nAll thy dominion, Adam, is no more \r\nThan what this garden is to all the earth, \r\nAnd all the sea, from one entire globose \r\nStretched into longitude; which having passed, \r\nAt length into the limits of the north \r\nThey came; and Satan to his royal seat \r\nHigh on a hill, far blazing, as a mount \r\nRaised on a mount, with pyramids and towers \r\nFrom diamond quarries hewn, and rocks of gold; \r\nThe palace of great Lucifer, (so call \r\nThat structure in the dialect of men \r\nInterpreted,) which not long after, he \r\nAffecting all equality with God, \r\nIn imitation of that mount whereon \r\nMessiah was declared in sight of Heaven, \r\nThe Mountain of the Congregation called; \r\nFor thither he assembled all his train, \r\nPretending so commanded to consult \r\nAbout the great reception of their King, \r\nThither to come, and with calumnious art \r\nOf counterfeited truth thus held their ears. \r\nThrones, Dominations, Princedoms, Virtues, Powers; \r\nIf these magnifick titles yet remain \r\nNot merely titular, since by decree \r\nAnother now hath to himself engrossed \r\nAll power, and us eclipsed under the name \r\nOf King anointed, for whom all this haste \r\nOf midnight-march, and hurried meeting here, \r\nThis only to consult how we may best, \r\nWith what may be devised of honours new, \r\nReceive him coming to receive from us \r\nKnee-tribute yet unpaid, prostration vile! \r\nToo much to one! but double how endured, \r\nTo one, and to his image now proclaimed? \r\nBut what if better counsels might erect \r\nOur minds, and teach us to cast off this yoke? \r\nWill ye submit your necks, and choose to bend \r\nThe supple knee?  Ye will not, if I trust \r\nTo know ye right, or if ye know yourselves \r\nNatives and sons of Heaven possessed before \r\nBy none; and if not equal all, yet free, \r\nEqually free; for orders and degrees \r\nJar not with liberty, but well consist. \r\nWho can in reason then, or right, assume \r\nMonarchy over such as live by right \r\nHis equals, if in power and splendour less, \r\nIn freedom equal? or can introduce \r\nLaw and edict on us, who without law \r\nErr not? much less for this to be our Lord, \r\nAnd look for adoration, to the abuse \r\nOf those imperial titles, which assert \r\nOur being ordained to govern, not to serve. \r\nThus far his bold discourse without controul \r\nHad audience; when among the Seraphim \r\nAbdiel, than whom none with more zeal adored \r\nThe Deity, and divine commands obeyed, \r\nStood up, and in a flame of zeal severe \r\nThe current of his fury thus opposed. \r\nO argument blasphemous, false, and proud! \r\nWords which no ear ever to hear in Heaven \r\nExpected, least of all from thee,  Ingrate, \r\nIn place thyself so high above thy peers. \r\nCanst thou with impious obloquy condemn \r\nThe just decree of God, pronounced and sworn, \r\nThat to his only Son, by right endued \r\nWith regal scepter, every soul in Heaven \r\nShall bend the knee, and in that honour due \r\nConfess him rightful King? unjust, thou sayest, \r\nFlatly unjust, to bind with laws the free, \r\nAnd equal over equals to let reign, \r\nOne over all with unsucceeded power. \r\nShalt thou give law to God? shalt thou dispute \r\nWith him the points of liberty, who made \r\nThee what thou art, and formed the Powers of Heaven \r\nSuch as he pleased, and circumscribed their being? \r\nYet, by experience taught, we know how good, \r\nAnd of our good and of our dignity \r\nHow provident he is; how far from thought \r\nTo make us less, bent rather to exalt \r\nOur happy state, under one head more near \r\nUnited.  But to grant it thee unjust, \r\nThat equal over equals monarch reign: \r\nThyself, though great and glorious, dost thou count, \r\nOr all angelick nature joined in one, \r\nEqual to him begotten Son? by whom, \r\nAs by his Word, the Mighty Father made \r\nAll things, even thee; and all the Spirits of Heaven \r\nBy him created in their bright degrees, \r\nCrowned them with glory, and to their glory named \r\nThrones, Dominations, Princedoms, Virtues, Powers, \r\nEssential Powers; nor by his reign obscured, \r\nBut more illustrious made; since he the head \r\nOne of our number thus reduced becomes; \r\nHis laws our laws; all honour to him done \r\nReturns our own.  Cease then this impious rage, \r\nAnd tempt not these; but hasten to appease \r\nThe incensed Father, and the incensed Son, \r\nWhile pardon may be found in time besought. \r\nSo spake the fervent Angel; but his zeal \r\nNone seconded, as out of season judged, \r\nOr singular and rash:  Whereat rejoiced \r\nThe Apostate, and, more haughty, thus replied. \r\nThat we were formed then sayest thou? and the work \r\nOf secondary hands, by task transferred \r\nFrom Father to his Son? strange point and new! \r\nDoctrine which we would know whence learned: who saw \r\nWhen this creation was? rememberest thou \r\nThy making, while the Maker gave thee being? \r\nWe know no time when we were not as now; \r\nKnow none before us, self-begot, self-raised \r\nBy our own quickening power, when fatal course \r\nHad circled his full orb, the birth mature \r\nOf this our native Heaven, ethereal sons. \r\nOur puissance is our own; our own right hand \r\nShall teach us highest deeds, by proof to try \r\nWho is our equal:  Then thou shalt behold \r\nWhether by supplication we intend \r\nAddress, and to begirt the almighty throne \r\nBeseeching or besieging.  This report, \r\nThese tidings carry to the anointed King; \r\nAnd fly, ere evil intercept thy flight. \r\nHe said; and, as the sound of waters deep, \r\nHoarse murmur echoed to his words applause \r\nThrough the infinite host; nor less for that \r\nThe flaming Seraph fearless, though alone \r\nEncompassed round with foes, thus answered bold. \r\nO alienate from God, O Spirit accursed, \r\nForsaken of all good!  I see thy fall \r\nDetermined, and thy hapless crew involved \r\nIn this perfidious fraud, contagion spread \r\nBoth of thy crime and punishment:  Henceforth \r\nNo more be troubled how to quit the yoke \r\nOf God's Messiah; those indulgent laws \r\nWill not be now vouchsafed; other decrees \r\nAgainst thee are gone forth without recall; \r\nThat golden scepter, which thou didst reject, \r\nIs now an iron rod to bruise and break \r\nThy disobedience.  Well thou didst advise; \r\nYet not for thy advice or threats I fly \r\nThese wicked tents devoted, lest the wrath \r\nImpendent, raging into sudden flame, \r\nDistinguish not:  For soon expect to feel \r\nHis thunder on thy head, devouring fire. \r\nThen who created thee lamenting learn, \r\nWhen who can uncreate thee thou shalt know. \r\nSo spake the Seraph Abdiel, faithful found \r\nAmong the faithless, faithful only he; \r\nAmong innumerable false, unmoved, \r\nUnshaken, unseduced, unterrified, \r\nHis loyalty he kept, his love, his zeal; \r\nNor number, nor example, with him wrought \r\nTo swerve from truth, or change his constant mind, \r\nThough single.  From amidst them forth he passed, \r\nLong way through hostile scorn, which he sustained \r\nSuperiour, nor of violence feared aught; \r\nAnd, with retorted scorn, his back he turned \r\nOn those proud towers to swift destruction doomed. \r\n \r\n \r\n \r\nBook VI                                                          \r\n \r\n \r\nAll night the dreadless Angel, unpursued, \r\nThrough Heaven's wide champain held his way; till Morn, \r\nWaked by the circling Hours, with rosy hand \r\nUnbarred the gates of light.  There is a cave \r\nWithin the mount of God, fast by his throne, \r\nWhere light and darkness in perpetual round \r\nLodge and dislodge by turns, which makes through Heaven \r\nGrateful vicissitude, like day and night; \r\nLight issues forth, and at the other door \r\nObsequious darkness enters, till her hour \r\nTo veil the Heaven, though darkness there might well \r\nSeem twilight here:  And now went forth the Morn \r\nSuch as in highest Heaven arrayed in gold \r\nEmpyreal; from before her vanished Night, \r\nShot through with orient beams; when all the plain \r\nCovered with thick embattled squadrons bright, \r\nChariots, and flaming arms, and fiery steeds, \r\nReflecting blaze on blaze, first met his view: \r\nWar he perceived, war in procinct; and found \r\nAlready known what he for news had thought \r\nTo have reported:  Gladly then he mixed \r\nAmong those friendly Powers, who him received \r\nWith joy and acclamations loud, that one, \r\nThat of so many myriads fallen, yet one \r\nReturned not lost.  On to the sacred hill \r\nThey led him high applauded, and present \r\nBefore the seat supreme; from whence a voice, \r\nFrom midst a golden cloud, thus mild was heard. \r\nServant of God. Well done; well hast thou fought \r\nThe better fight, who single hast maintained \r\nAgainst revolted multitudes the cause \r\nOf truth, in word mightier than they in arms; \r\nAnd for the testimony of truth hast borne \r\nUniversal reproach, far worse to bear \r\nThan violence; for this was all thy care \r\nTo stand approved in sight of God, though worlds \r\nJudged thee perverse:  The easier conquest now \r\nRemains thee, aided by this host of friends, \r\nBack on thy foes more glorious to return, \r\nThan scorned thou didst depart; and to subdue \r\nBy force, who reason for their law refuse, \r\nRight reason for their law, and for their King \r\nMessiah, who by right of merit reigns. \r\nGo, Michael, of celestial armies prince, \r\nAnd thou, in military prowess next, \r\nGabriel, lead forth to battle these my sons \r\nInvincible; lead forth my armed Saints, \r\nBy thousands and by millions, ranged for fight, \r\nEqual in number to that Godless crew \r\nRebellious:  Them with fire and hostile arms \r\nFearless assault; and, to the brow of Heaven \r\nPursuing, drive them out from God and bliss, \r\nInto their place of punishment, the gulf \r\nOf Tartarus, which ready opens wide \r\nHis fiery Chaos to receive their fall. \r\nSo spake the Sovran Voice, and clouds began \r\nTo darken all the hill, and smoke to roll \r\nIn dusky wreaths, reluctant flames, the sign \r\nOf wrath awaked; nor with less dread the loud \r\nEthereal trumpet from on high 'gan blow: \r\nAt which command the Powers militant, \r\nThat stood for Heaven, in mighty quadrate joined \r\nOf union irresistible, moved on \r\nIn silence their bright legions, to the sound \r\nOf instrumental harmony, that breathed \r\nHeroick ardour to adventurous deeds \r\nUnder their God-like leaders, in the cause \r\nOf God and his Messiah.  On they move \r\nIndissolubly firm; nor obvious hill, \r\nNor straitening vale, nor wood, nor stream, divides \r\nTheir perfect ranks; for high above the ground \r\nTheir march was, and the passive air upbore \r\nTheir nimble tread; as when the total kind \r\nOf birds, in orderly array on wing, \r\nCame summoned over Eden to receive \r\nTheir names of thee; so over many a tract \r\nOf Heaven they marched, and many a province wide, \r\nTenfold the length of this terrene:  At last, \r\nFar in the horizon to the north appeared \r\nFrom skirt to skirt a fiery region, stretched \r\nIn battailous aspect, and nearer view \r\nBristled with upright beams innumerable \r\nOf rigid spears, and helmets thronged, and shields \r\nVarious, with boastful argument portrayed, \r\nThe banded Powers of Satan hasting on \r\nWith furious expedition; for they weened \r\nThat self-same day, by fight or by surprise, \r\nTo win the mount of God, and on his throne \r\nTo set the Envier of his state, the proud \r\nAspirer; but their thoughts proved fond and vain \r\nIn the mid way:  Though strange to us it seemed \r\nAt first, that Angel should with Angel war, \r\nAnd in fierce hosting meet, who wont to meet \r\nSo oft in festivals of joy and love \r\nUnanimous, as sons of one great Sire, \r\nHymning the Eternal Father:  But the shout \r\nOf battle now began, and rushing sound \r\nOf onset ended soon each milder thought. \r\nHigh in the midst, exalted as a God, \r\nThe Apostate in his sun-bright chariot sat, \r\nIdol of majesty divine, enclosed \r\nWith flaming Cherubim, and golden shields; \r\nThen lighted from his gorgeous throne, for now \r\n\"twixt host and host but narrow space was left, \r\nA dreadful interval, and front to front \r\nPresented stood in terrible array \r\nOf hideous length:  Before the cloudy van, \r\nOn the rough edge of battle ere it joined, \r\nSatan, with vast and haughty strides advanced, \r\nCame towering, armed in adamant and gold; \r\nAbdiel that sight endured not, where he stood \r\nAmong the mightiest, bent on highest deeds, \r\nAnd thus his own undaunted heart explores. \r\nO Heaven! that such resemblance of the Highest \r\nShould yet remain, where faith and realty \r\nRemain not:  Wherefore should not strength and might \r\nThere fail where virtue fails, or weakest prove \r\nWhere boldest, though to fight unconquerable? \r\nHis puissance, trusting in the Almighty's aid, \r\nI mean to try, whose reason I have tried \r\nUnsound and false; nor is it aught but just, \r\nThat he, who in debate of truth hath won, \r\nShould win in arms, in both disputes alike \r\nVictor; though brutish that contest and foul, \r\nWhen reason hath to deal with force, yet so \r\nMost reason is that reason overcome. \r\nSo pondering, and from his armed peers \r\nForth stepping opposite, half-way he met \r\nHis daring foe, at this prevention more \r\nIncensed, and thus securely him defied. \r\nProud, art thou met? thy hope was to have reached \r\nThe highth of thy aspiring unopposed, \r\nThe throne of God unguarded, and his side \r\nAbandoned, at the terrour of thy power \r\nOr potent tongue:  Fool!not to think how vain \r\nAgainst the Omnipotent to rise in arms; \r\nWho out of smallest things could, without end, \r\nHave raised incessant armies to defeat \r\nThy folly; or with solitary hand \r\nReaching beyond all limit, at one blow, \r\nUnaided, could have finished thee, and whelmed \r\nThy legions under darkness:  But thou seest \r\nAll are not of thy train; there be, who faith \r\nPrefer, and piety to God, though then \r\nTo thee not visible, when I alone \r\nSeemed in thy world erroneous to dissent \r\nFrom all:  My sect thou seest;now learn too late \r\nHow few sometimes may know, when thousands err. \r\nWhom the grand foe, with scornful eye askance, \r\nThus answered.  Ill for thee, but in wished hour \r\nOf my revenge, first sought for, thou returnest \r\nFrom flight, seditious Angel! to receive \r\nThy merited reward, the first assay \r\nOf this right hand provoked, since first that tongue, \r\nInspired with contradiction, durst oppose \r\nA third part of the Gods, in synod met \r\nTheir deities to assert; who, while they feel \r\nVigour divine within them, can allow \r\nOmnipotence to none.  But well thou comest \r\nBefore thy fellows, ambitious to win \r\nFrom me some plume, that thy success may show \r\nDestruction to the rest:  This pause between, \r\n(Unanswered lest thou boast) to let thee know, \r\nAt first I thought that Liberty and Heaven \r\nTo heavenly souls had been all one; but now \r\nI see that most through sloth had rather serve, \r\nMinistring Spirits, trained up in feast and song! \r\nSuch hast thou armed, the minstrelsy of Heaven, \r\nServility with freedom to contend, \r\nAs both their deeds compared this day shall prove. \r\nTo whom in brief thus Abdiel stern replied. \r\nApostate! still thou errest, nor end wilt find \r\nOf erring, from the path of truth remote: \r\nUnjustly thou depravest it with the name \r\nOf servitude, to serve whom God ordains, \r\nOr Nature:  God and Nature bid the same, \r\nWhen he who rules is worthiest, and excels \r\nThem whom he governs.  This is servitude, \r\nTo serve the unwise, or him who hath rebelled \r\nAgainst his worthier, as thine now serve thee, \r\nThyself not free, but to thyself enthralled; \r\nYet lewdly darest our ministring upbraid. \r\nReign thou in Hell, thy kingdom; let me serve \r\nIn Heaven God ever blest, and his divine \r\nBehests obey, worthiest to be obeyed; \r\nYet chains in Hell, not realms, expect:  Mean while \r\nFrom me returned, as erst thou saidst, from flight, \r\nThis greeting on thy impious crest receive. \r\nSo saying, a noble stroke he lifted high, \r\nWhich hung not, but so swift with tempest fell \r\nOn the proud crest of Satan, that no sight, \r\nNor motion of swift thought, less could his shield, \r\nSuch ruin intercept:  Ten paces huge \r\nHe back recoiled; the tenth on bended knee \r\nHis massy spear upstaid; as if on earth \r\nWinds under ground, or waters forcing way, \r\nSidelong had pushed a mountain from his seat, \r\nHalf sunk with all his pines.  Amazement seised \r\nThe rebel Thrones, but greater rage, to see \r\nThus foiled their mightiest; ours joy filled, and shout, \r\nPresage of victory, and fierce desire \r\nOf battle:  Whereat Michael bid sound \r\nThe Arch-Angel trumpet; through the vast of Heaven \r\nIt sounded, and the faithful armies rung \r\nHosanna to the Highest:  Nor stood at gaze \r\nThe adverse legions, nor less hideous joined \r\nThe horrid shock.  Now storming fury rose, \r\nAnd clamour such as heard in Heaven till now \r\nWas never; arms on armour clashing brayed \r\nHorrible discord, and the madding wheels \r\nOf brazen chariots raged; dire was the noise \r\nOf conflict; over head the dismal hiss \r\nOf fiery darts in flaming vollies flew, \r\nAnd flying vaulted either host with fire. \r\nSo under fiery cope together rushed \r\nBoth battles main, with ruinous assault \r\nAnd inextinguishable rage.  All Heaven \r\nResounded; and had Earth been then, all Earth \r\nHad to her center shook.  What wonder? when \r\nMillions of fierce encountering Angels fought \r\nOn either side, the least of whom could wield \r\nThese elements, and arm him with the force \r\nOf all their regions:  How much more of power \r\nArmy against army numberless to raise \r\nDreadful combustion warring, and disturb, \r\nThough not destroy, their happy native seat; \r\nHad not the Eternal King Omnipotent, \r\nFrom his strong hold of Heaven, high over-ruled \r\nAnd limited their might; though numbered such \r\nAs each divided legion might have seemed \r\nA numerous host; in strength each armed hand \r\nA legion; led in fight, yet leader seemed \r\nEach warriour single as in chief, expert \r\nWhen to advance, or stand, or turn the sway \r\nOf battle, open when, and when to close \r\nThe ridges of grim war:  No thought of flight, \r\nNone of retreat, no unbecoming deed \r\nThat argued fear; each on himself relied, \r\nAs only in his arm the moment lay \r\nOf victory:  Deeds of eternal fame \r\nWere done, but infinite; for wide was spread \r\nThat war and various; sometimes on firm ground \r\nA standing fight, then, soaring on main wing, \r\nTormented all the air; all air seemed then \r\nConflicting fire.  Long time in even scale \r\nThe battle hung; till Satan, who that day \r\nProdigious power had shown, and met in arms \r\nNo equal, ranging through the dire attack \r\nOf fighting Seraphim confused, at length \r\nSaw where the sword of Michael smote, and felled \r\nSquadrons at once; with huge two-handed sway \r\nBrandished aloft, the horrid edge came down \r\nWide-wasting; such destruction to withstand \r\nHe hasted, and opposed the rocky orb \r\nOf tenfold adamant, his ample shield, \r\nA vast circumference.  At his approach \r\nThe great Arch-Angel from his warlike toil \r\nSurceased, and glad, as hoping here to end \r\nIntestine war in Heaven, the arch-foe subdued \r\nOr captive dragged in chains, with hostile frown \r\nAnd visage all inflamed first thus began. \r\nAuthor of evil, unknown till thy revolt, \r\nUnnamed in Heaven, now plenteous as thou seest \r\nThese acts of hateful strife, hateful to all, \r\nThough heaviest by just measure on thyself, \r\nAnd thy  adherents:  How hast thou disturbed \r\nHeaven's blessed peace, and into nature brought \r\nMisery, uncreated till the crime \r\nOf thy rebellion! how hast thou instilled \r\nThy malice into thousands, once upright \r\nAnd faithful, now proved false!  But think not here \r\nTo trouble holy rest; Heaven casts thee out \r\nFrom all her confines.  Heaven, the seat of bliss, \r\nBrooks not the works of violence and war. \r\nHence then, and evil go with thee along, \r\nThy offspring, to the place of evil, Hell; \r\nThou and thy wicked crew! there mingle broils, \r\nEre this avenging sword begin thy doom, \r\nOr some more sudden vengeance, winged from God, \r\nPrecipitate thee with augmented pain. \r\nSo spake the Prince of Angels; to whom thus \r\nThe Adversary.  Nor think thou with wind \r\nOf aery threats to awe whom yet with deeds \r\nThou canst not.  Hast thou turned the least of these \r\nTo flight, or if to fall, but that they rise \r\nUnvanquished, easier to transact with me \r\nThat thou shouldst hope, imperious, and with threats \r\nTo chase me hence? err not, that so shall end \r\nThe strife which thou callest evil, but we style \r\nThe strife of glory; which we mean to win, \r\nOr turn this Heaven itself into the Hell \r\nThou fablest; here however to dwell free, \r\nIf not to reign:  Mean while thy utmost force, \r\nAnd join him named Almighty to thy aid, \r\nI fly not, but have sought thee far and nigh. \r\nThey ended parle, and both addressed for fight \r\nUnspeakable; for who, though with the tongue \r\nOf Angels, can relate, or to what things \r\nLiken on earth conspicuous, that may lift \r\nHuman imagination to such highth \r\nOf Godlike power? for likest Gods they seemed, \r\nStood they or moved, in stature, motion, arms, \r\nFit to decide the empire of great Heaven. \r\nNow waved their fiery swords, and in the air \r\nMade horrid circles; two broad suns their shields \r\nBlazed opposite, while Expectation stood \r\nIn horrour:  From each hand with speed retired, \r\nWhere erst was thickest fight, the angelick throng, \r\nAnd left large field, unsafe within the wind \r\nOf such commotion; such as, to set forth \r\nGreat things by small, if, nature's concord broke, \r\nAmong the constellations war were sprung, \r\nTwo planets, rushing from aspect malign \r\nOf fiercest opposition, in mid sky \r\nShould combat, and their jarring spheres confound. \r\nTogether both with next to almighty arm \r\nUp-lifted imminent, one stroke they aimed \r\nThat might determine, and not need repeat, \r\nAs not of power at once; nor odds appeared \r\nIn might or swift prevention:  But the sword \r\nOf Michael from the armoury of God \r\nWas given him tempered so, that neither keen \r\nNor solid might resist that edge: it met \r\nThe sword of Satan, with steep force to smite \r\nDescending, and in half cut sheer; nor staid, \r\nBut with swift wheel reverse, deep entering, shared \r\nAll his right side:  Then Satan first knew pain, \r\nAnd writhed him to and fro convolved; so sore \r\nThe griding sword with discontinuous wound \r\nPassed through him:  But the ethereal substance closed, \r\nNot long divisible; and from the gash \r\nA stream of necturous humour issuing flowed \r\nSanguine, such as celestial Spirits may bleed, \r\nAnd all his armour stained, ere while so bright. \r\nForthwith on all sides to his aid was run \r\nBy Angels many and strong, who interposed \r\nDefence, while others bore him on their shields \r\nBack to his chariot, where it stood retired \r\nFrom off the files of war:  There they him laid \r\nGnashing for anguish, and despite, and shame, \r\nTo find himself not matchless, and his pride \r\nHumbled by such rebuke, so far beneath \r\nHis confidence to equal God in power. \r\nYet soon he healed; for Spirits that live throughout \r\nVital in every part, not as frail man \r\nIn entrails, heart of head, liver or reins, \r\nCannot but by annihilating die; \r\nNor in their liquid texture mortal wound \r\nReceive, no more than can the fluid air: \r\nAll heart they live, all head, all eye, all ear, \r\nAll intellect, all sense; and, as they please, \r\nThey limb themselves, and colour, shape, or size \r\nAssume, as?kikes them best, condense or rare. \r\nMean while in other parts like deeds deserved \r\nMemorial, where the might of Gabriel fought, \r\nAnd with fierce ensigns pierced the deep array \r\nOf Moloch, furious king; who him defied, \r\nAnd at his chariot-wheels to drag him bound \r\nThreatened, nor from the Holy One of Heaven \r\nRefrained his tongue blasphemous; but anon \r\nDown cloven to the waist, with shattered arms \r\nAnd uncouth pain fled bellowing.  On each wing \r\nUriel, and Raphael, his vaunting foe, \r\nThough huge, and in a rock of diamond armed, \r\nVanquished Adramelech, and Asmadai, \r\nTwo potent Thrones, that to be less than Gods \r\nDisdained, but meaner thoughts learned in their flight, \r\nMangled with ghastly wounds through plate and mail. \r\nNor stood unmindful Abdiel to annoy \r\nThe atheist crew, but with redoubled blow \r\nAriel, and Arioch, and the violence \r\nOf Ramiel scorched and blasted, overthrew. \r\nI might relate of thousands, and their names \r\nEternize here on earth; but those elect \r\nAngels, contented with their fame in Heaven, \r\nSeek not the praise of men:  The other sort, \r\nIn might though wonderous and in acts of war, \r\nNor of renown less eager, yet by doom \r\nCancelled from Heaven and sacred memory, \r\nNameless in dark oblivion let them dwell. \r\nFor strength from truth divided, and from just, \r\nIllaudable, nought merits but dispraise \r\nAnd ignominy; yet to glory aspires \r\nVain-glorious, and through infamy seeks fame: \r\nTherefore eternal silence be their doom. \r\nAnd now, their mightiest quelled, the battle swerved, \r\nWith many an inroad gored; deformed rout \r\nEntered, and foul disorder; all the ground \r\nWith shivered armour strown, and on a heap \r\nChariot and charioteer lay overturned, \r\nAnd fiery-foaming steeds; what stood, recoiled \r\nO'er-wearied, through the faint Satanick host \r\nDefensive scarce, or with pale fear surprised, \r\nThen first with fear surprised, and sense of pain, \r\nFled ignominious, to such evil brought \r\nBy sin of disobedience; till that hour \r\nNot liable to fear, or flight, or pain. \r\nFar otherwise the inviolable Saints, \r\nIn cubick phalanx firm, advanced entire, \r\nInvulnerable, impenetrably armed; \r\nSuch high advantages their innocence \r\nGave them above their foes; not to have sinned, \r\nNot to have disobeyed; in fight they stood \r\nUnwearied, unobnoxious to be pained \r\nBy wound, though from their place by violence moved, \r\nNow Night her course began, and, over Heaven \r\nInducing darkness, grateful truce imposed, \r\nAnd silence on the odious din of war: \r\nUnder her cloudy covert both retired, \r\nVictor and vanquished:  On the foughten field \r\nMichael and his Angels prevalent \r\nEncamping, placed in guard their watches round, \r\nCherubick waving fires:  On the other part, \r\nSatan with his rebellious disappeared, \r\nFar in the dark dislodged; and, void of rest, \r\nHis potentates to council called by night; \r\nAnd in the midst thus undismayed began. \r\nO now in danger tried, now known in arms \r\nNot to be overpowered, Companions dear, \r\nFound worthy not of liberty alone, \r\nToo mean pretence! but what we more affect, \r\nHonour, dominion, glory, and renown; \r\nWho have sustained one day in doubtful fight, \r\n(And if one day, why not eternal days?) \r\nWhat Heaven's Lord had powerfullest to send \r\nAgainst us from about his throne, and judged \r\nSufficient to subdue us to his will, \r\nBut proves not so:  Then fallible, it seems, \r\nOf future we may deem him, though till now \r\nOmniscient thought.  True is, less firmly armed, \r\nSome disadvantage we endured and pain, \r\nTill now not known, but, known, as soon contemned; \r\nSince now we find this our empyreal form \r\nIncapable of mortal injury, \r\nImperishable, and, though pierced with wound, \r\nSoon closing, and by native vigour healed. \r\nOf evil then so small as easy think \r\nThe remedy; perhaps more valid arms, \r\nWeapons more violent, when next we meet, \r\nMay serve to better us, and worse our foes, \r\nOr equal what between us made the odds, \r\nIn nature none:  If other hidden cause \r\nLeft them superiour, while we can preserve \r\nUnhurt our minds, and understanding sound, \r\nDue search and consultation will disclose. \r\nHe sat; and in the assembly next upstood \r\nNisroch, of Principalities the prime; \r\nAs one he stood escaped from cruel fight, \r\nSore toiled, his riven arms to havock hewn, \r\nAnd cloudy in aspect thus answering spake. \r\nDeliverer from new Lords, leader to free \r\nEnjoyment of our right as Gods; yet hard \r\nFor Gods, and too unequal work we find, \r\nAgainst unequal arms to fight in pain, \r\nAgainst unpained, impassive; from which evil \r\nRuin must needs ensue; for what avails \r\nValour or strength, though matchless, quelled with pain \r\nWhich all subdues, and makes remiss the hands \r\nOf mightiest?  Sense of pleasure we may well \r\nSpare out of life perhaps, and not repine, \r\nBut live content, which is the calmest life: \r\nBut pain is perfect misery, the worst \r\nOf evils, and, excessive, overturns \r\nAll patience.  He, who therefore can invent \r\nWith what more forcible we may offend \r\nOur yet unwounded enemies, or arm \r\nOurselves with like defence, to me deserves \r\nNo less than for deliverance what we owe. \r\nWhereto with look composed Satan replied. \r\nNot uninvented that, which thou aright \r\nBelievest so main to our success, I bring. \r\nWhich of us who beholds the bright surface \r\nOf this ethereous mould whereon we stand, \r\nThis continent of spacious Heaven, adorned \r\nWith plant, fruit, flower ambrosial, gems, and gold; \r\nWhose eye so superficially surveys \r\nThese things, as not to mind from whence they grow \r\nDeep under ground, materials dark and crude, \r\nOf spiritous and fiery spume, till touched \r\nWith Heaven's ray, and tempered, they shoot forth \r\nSo beauteous, opening to the ambient light? \r\nThese in their dark nativity the deep \r\nShall yield us, pregnant with infernal flame; \r\nWhich, into hollow engines, long and round, \r\nThick rammed, at the other bore with touch of fire \r\nDilated and infuriate, shall send forth \r\nFrom far, with thundering noise, among our foes \r\nSuch implements of mischief, as shall dash \r\nTo pieces, and o'erwhelm whatever stands \r\nAdverse, that they shall fear we have disarmed \r\nThe Thunderer of his only dreaded bolt. \r\nNor long shall be our labour; yet ere dawn, \r\nEffect shall end our wish.  Mean while revive; \r\nAbandon fear; to strength and counsel joined \r\nThink nothing hard, much less to be despaired. \r\nHe ended, and his words their drooping cheer \r\nEnlightened, and their languished hope revived. \r\nThe invention all admired, and each, how he \r\nTo be the inventer missed; so easy it seemed \r\nOnce found, which yet unfound most would have thought \r\nImpossible:  Yet, haply, of thy race \r\nIn future days, if malice should abound, \r\nSome one intent on mischief, or inspired \r\nWith devilish machination, might devise \r\nLike instrument to plague the sons of men \r\nFor sin, on war and mutual slaughter bent. \r\nForthwith from council to the work they flew; \r\nNone arguing stood; innumerable hands \r\nWere ready; in a moment up they turned \r\nWide the celestial soil, and saw beneath \r\nThe originals of nature in their crude \r\nConception; sulphurous and nitrous foam \r\nThey found, they mingled, and, with subtle art, \r\nConcocted and adusted they reduced \r\nTo blackest grain, and into store conveyed: \r\nPart hidden veins digged up (nor hath this earth \r\nEntrails unlike) of mineral and stone, \r\nWhereof to found their engines and their balls \r\nOf missive ruin; part incentive reed \r\nProvide, pernicious with one touch to fire. \r\nSo all ere day-spring, under conscious night, \r\nSecret they finished, and in order set, \r\nWith silent circumspection, unespied. \r\nNow when fair morn orient in Heaven appeared, \r\nUp rose the victor-Angels, and to arms \r\nThe matin trumpet sung:  In arms they stood \r\nOf golden panoply, refulgent host, \r\nSoon banded; others from the dawning hills \r\nLook round, and scouts each coast light-armed scour, \r\nEach quarter to descry the distant foe, \r\nWhere lodged, or whither fled, or if for fight, \r\nIn motion or in halt:  Him soon they met \r\nUnder spread ensigns moving nigh, in slow \r\nBut firm battalion; back with speediest sail \r\nZophiel, of Cherubim the swiftest wing, \r\nCame flying, and in mid air aloud thus cried. \r\nArm, Warriours, arm for fight; the foe at hand, \r\nWhom fled we thought, will save us long pursuit \r\nThis day; fear not his flight;so thick a cloud \r\nHe comes, and settled in his face I see \r\nSad resolution, and secure:  Let each \r\nHis adamantine coat gird well, and each \r\nFit well his helm, gripe fast his orbed shield, \r\nBorne even or high; for this day will pour down, \r\nIf I conjecture aught, no drizzling shower, \r\nBut rattling storm of arrows barbed with fire. \r\nSo warned he them, aware themselves, and soon \r\nIn order, quit of all impediment; \r\nInstant without disturb they took alarm, \r\nAnd onward moved embattled:  When behold! \r\nNot distant far with heavy pace the foe \r\nApproaching gross and huge, in hollow cube \r\nTraining his devilish enginery, impaled \r\nOn every side with shadowing squadrons deep, \r\nTo hide the fraud.  At interview both stood \r\nA while; but suddenly at head appeared \r\nSatan, and thus was heard commanding loud. \r\nVanguard, to right and left the front unfold; \r\nThat all may see who hate us, how we seek \r\nPeace and composure, and with open breast \r\nStand ready to receive them, if they like \r\nOur overture; and turn not back perverse: \r\nBut that I doubt; however witness, Heaven! \r\nHeaven, witness thou anon! while we discharge \r\nFreely our part: ye, who appointed stand \r\nDo as you have in charge, and briefly touch \r\nWhat we propound, and loud that all may hear! \r\nSo scoffing in ambiguous words, he scarce \r\nHad ended; when to right and left the front \r\nDivided, and to either flank retired: \r\nWhich to our eyes discovered, new and strange, \r\nA triple mounted row of pillars laid \r\nOn wheels (for like to pillars most they seemed, \r\nOr hollowed bodies made of oak or fir, \r\nWith branches lopt, in wood or mountain felled,) \r\nBrass, iron, stony mould, had not their mouths \r\nWith hideous orifice gaped on us wide, \r\nPortending hollow truce:  At each behind \r\nA Seraph stood, and in his hand a reed \r\nStood waving tipt with fire; while we, suspense, \r\nCollected stood within our thoughts amused, \r\nNot long; for sudden all at once their reeds \r\nPut forth, and to a narrow vent applied \r\nWith nicest touch.  Immediate in a flame, \r\nBut soon obscured with smoke, all Heaven appeared, \r\nFrom those deep-throated engines belched, whose roar \r\nEmbowelled with outrageous noise the air, \r\nAnd all her entrails tore, disgorging foul \r\nTheir devilish glut, chained thunderbolts and hail \r\nOf iron globes; which, on the victor host \r\nLevelled, with such impetuous fury smote, \r\nThat, whom they hit, none on their feet might stand, \r\nThough standing else as rocks, but down they fell \r\nBy thousands, Angel on Arch-Angel rolled; \r\nThe sooner for their arms; unarmed, they might \r\nHave easily, as Spirits, evaded swift \r\nBy quick contraction or remove; but now \r\nFoul dissipation followed, and forced rout; \r\nNor served it to relax their serried files. \r\nWhat should they do? if on they rushed, repulse \r\nRepeated, and indecent overthrow \r\nDoubled, would render them yet more despised, \r\nAnd to their foes a laughter; for in view \r\nStood ranked of Seraphim another row, \r\nIn posture to displode their second tire \r\nOf thunder:  Back defeated to return \r\nThey worse abhorred.  Satan beheld their plight, \r\nAnd to his mates thus in derision called. \r\nO Friends! why come not on these victors proud \r\nEre while they fierce were coming; and when we, \r\nTo entertain them fair with open front \r\nAnd breast, (what could we more?) propounded terms \r\nOf composition, straight they changed their minds, \r\nFlew off, and into strange vagaries fell, \r\nAs they would dance; yet for a dance they seemed \r\nSomewhat extravagant and wild; perhaps \r\nFor joy of offered peace:  But I suppose, \r\nIf our proposals once again were heard, \r\nWe should compel them to a quick result. \r\nTo whom thus Belial, in like gamesome mood. \r\nLeader! the terms we sent were terms of weight, \r\nOf hard contents, and full of force urged home; \r\nSuch as we might perceive amused them all, \r\nAnd stumbled many:  Who receives them right, \r\nHad need from head to foot well understand; \r\nNot understood, this gift they have besides, \r\nThey show us when our foes walk not upright. \r\nSo they among themselves in pleasant vein \r\nStood scoffing, hightened in their thoughts beyond \r\nAll doubt of victory:  Eternal Might \r\nTo match with their inventions they presumed \r\nSo easy, and of his thunder made a scorn, \r\nAnd all his host derided, while they stood \r\nA while in trouble:  But they stood not long; \r\nRage prompted them at length, and found them arms \r\nAgainst such hellish mischief fit to oppose. \r\nForthwith (behold the excellence, the power, \r\nWhich God hath in his mighty Angels placed!) \r\nTheir arms away they threw, and to the hills \r\n(For Earth hath this variety from Heaven \r\nOf pleasure situate in hill and dale,) \r\nLight as the lightning glimpse they ran, they flew; \r\nFrom their foundations loosening to and fro, \r\nThey plucked the seated hills, with all their load, \r\nRocks, waters, woods, and by the shaggy tops \r\nUp-lifting bore them in their hands:  Amaze, \r\nBe sure, and terrour, seized the rebel host, \r\nWhen coming towards them so dread they saw \r\nThe bottom of the mountains upward turned; \r\nTill on those cursed engines' triple-row \r\nThey saw them whelmed, and all their confidence \r\nUnder the weight of mountains buried deep; \r\nThemselves invaded next, and on their heads \r\nMain promontories flung, which in the air \r\nCame shadowing, and oppressed whole legions armed; \r\nTheir armour helped their harm, crushed in and bruised \r\nInto their substance pent, which wrought them pain \r\nImplacable, and many a dolorous groan; \r\nLong struggling underneath, ere they could wind \r\nOut of such prison, though Spirits of purest light, \r\nPurest at first, now gross by sinning grown. \r\nThe rest, in imitation, to like arms \r\nBetook them, and the neighbouring hills uptore: \r\nSo hills amid the air encountered hills, \r\nHurled to and fro with jaculation dire; \r\nThat under ground they fought in dismal shade; \r\nInfernal noise! war seemed a civil game \r\nTo this uproar; horrid confusion heaped \r\nUpon confusion rose:  And now all Heaven \r\nHad gone to wrack, with ruin overspread; \r\nHad not the Almighty Father, where he sits \r\nShrined in his sanctuary of Heaven secure, \r\nConsulting on the sum of things, foreseen \r\nThis tumult, and permitted all, advised: \r\nThat his great purpose he might so fulfil, \r\nTo honour his anointed Son avenged \r\nUpon his enemies, and to declare \r\nAll power on him transferred:  Whence to his Son, \r\nThe Assessour of his throne, he thus began. \r\nEffulgence of my glory, Son beloved, \r\nSon, in whose face invisible is beheld \r\nVisibly, what by Deity I am; \r\nAnd in whose hand what by decree I do, \r\nSecond Omnipotence! two days are past, \r\nTwo days, as we compute the days of Heaven, \r\nSince Michael and his Powers went forth to tame \r\nThese disobedient:  Sore hath been their fight, \r\nAs likeliest was, when two such foes met armed; \r\nFor to themselves I left them; and thou knowest, \r\nEqual in their creation they were formed, \r\nSave what sin hath impaired; which yet hath wrought \r\nInsensibly, for I suspend their doom; \r\nWhence in perpetual fight they needs must last \r\nEndless, and no solution will be found: \r\nWar wearied hath performed what war can do, \r\nAnd to disordered rage let loose the reins \r\nWith mountains, as with weapons, armed; which makes \r\nWild work in Heaven, and dangerous to the main. \r\nTwo days are therefore past, the third is thine; \r\nFor thee I have ordained it; and thus far \r\nHave suffered, that the glory may be thine \r\nOf ending this great war, since none but Thou \r\nCan end it.  Into thee such virtue and grace \r\nImmense I have transfused, that all may know \r\nIn Heaven and Hell thy power above compare; \r\nAnd, this perverse commotion governed thus, \r\nTo manifest thee worthiest to be Heir \r\nOf all things; to be Heir, and to be King \r\nBy sacred unction, thy deserved right. \r\nGo then, Thou Mightiest, in thy Father's might; \r\nAscend my chariot, guide the rapid wheels \r\nThat shake Heaven's basis, bring forth all my war, \r\nMy bow and thunder, my almighty arms \r\nGird on, and sword upon thy puissant thigh; \r\nPursue these sons of darkness, drive them out \r\nFrom all Heaven's bounds into the utter deep: \r\nThere let them learn, as likes them, to despise \r\nGod, and Messiah his anointed King. \r\nHe said, and on his Son with rays direct \r\nShone full; he all his Father full expressed \r\nIneffably into his face received; \r\nAnd thus the Filial Godhead answering spake. \r\nO Father, O Supreme of heavenly Thrones, \r\nFirst, Highest, Holiest, Best; thou always seek'st \r\nTo glorify thy Son, I always thee, \r\nAs is most just:  This I my glory account, \r\nMy exaltation, and my whole delight, \r\nThat thou, in me well pleased, declarest thy will \r\nFulfilled, which to fulfil is all my bliss. \r\nScepter and power, thy giving, I assume, \r\nAnd gladlier shall resign, when in the end \r\nThou shalt be all in all, and I in thee \r\nFor ever; and in me all whom thou lovest: \r\nBut whom thou hatest, I hate, and can put on \r\nThy terrours, as I put thy mildness on, \r\nImage of thee in all things; and shall soon, \r\nArmed with thy might, rid Heaven of these rebelled; \r\nTo their prepared ill mansion driven down, \r\nTo chains of darkness, and the undying worm; \r\nThat from thy just obedience could revolt, \r\nWhom to obey is happiness entire. \r\nThen shall thy Saints unmixed, and from the impure \r\nFar separate, circling thy holy mount, \r\nUnfeigned Halleluiahs to thee sing, \r\nHymns of high praise, and I among them Chief. \r\nSo said, he, o'er his scepter bowing, rose \r\nFrom the right hand of Glory where he sat; \r\nAnd the third sacred morn began to shine, \r\nDawning through Heaven.  Forth rushed with whirlwind sound \r\nThe chariot of Paternal Deity, \r\nFlashing thick flames, wheel within wheel undrawn, \r\nItself instinct with Spirit, but convoyed \r\nBy four Cherubick shapes; four faces each \r\nHad wonderous; as with stars, their bodies all \r\nAnd wings were set with eyes; with eyes the wheels \r\nOf beryl, and careering fires between; \r\nOver their heads a crystal firmament, \r\nWhereon a sapphire throne, inlaid with pure \r\nAmber, and colours of the showery arch. \r\nHe, in celestial panoply all armed \r\nOf radiant Urim, work divinely wrought, \r\nAscended; at his right hand Victory \r\nSat eagle-winged; beside him hung his bow \r\nAnd quiver with three-bolted thunder stored; \r\nAnd from about him fierce effusion rolled \r\nOf smoke, and bickering flame, and sparkles dire: \r\nAttended with ten thousand thousand Saints, \r\nHe onward came; far off his coming shone; \r\nAnd twenty thousand (I their number heard) \r\nChariots of God, half on each hand, were seen; \r\nHe on the wings of Cherub rode sublime \r\nOn the crystalline sky, in sapphire throned, \r\nIllustrious far and wide; but by his own \r\nFirst seen:  Them unexpected joy surprised, \r\nWhen the great ensign of Messiah blazed \r\nAloft by Angels borne, his sign in Heaven; \r\nUnder whose conduct Michael soon reduced \r\nHis army, circumfused on either wing, \r\nUnder their Head imbodied all in one. \r\nBefore him Power Divine his way prepared; \r\nAt his command the uprooted hills retired \r\nEach to his place; they heard his voice, and went \r\nObsequious; Heaven his wonted face renewed, \r\nAnd with fresh flowerets hill and valley smiled. \r\nThis saw his hapless foes, but stood obdured, \r\nAnd to rebellious fight rallied their Powers, \r\nInsensate, hope conceiving from despair. \r\nIn heavenly Spirits could such perverseness dwell? \r\nBut to convince the proud what signs avail, \r\nOr wonders move the obdurate to relent? \r\nThey, hardened more by what might most reclaim, \r\nGrieving to see his glory, at the sight \r\nTook envy; and, aspiring to his highth, \r\nStood re-embattled fierce, by force or fraud \r\nWeening to prosper, and at length prevail \r\nAgainst God and Messiah, or to fall \r\nIn universal ruin last; and now \r\nTo final battle drew, disdaining flight, \r\nOr faint retreat; when the great Son of God \r\nTo all his host on either hand thus spake. \r\nStand still in bright array, ye Saints; here stand, \r\nYe Angels armed; this day from battle rest: \r\nFaithful hath been your warfare, and of God \r\nAccepted, fearless in his righteous cause; \r\nAnd as ye have received, so have ye done, \r\nInvincibly:  But of this cursed crew \r\nThe punishment to other hand belongs; \r\nVengeance is his, or whose he sole appoints: \r\nNumber to this day's work is not ordained, \r\nNor multitude; stand only, and behold \r\nGod's indignation on these godless poured \r\nBy me; not you, but me, they have despised, \r\nYet envied; against me is all their rage, \r\nBecause the Father, to whom in Heaven s'preme \r\nKingdom, and power, and glory appertains, \r\nHath honoured me, according to his will. \r\nTherefore to me their doom he hath assigned; \r\nThat they may have their wish, to try with me \r\nIn battle which the stronger proves; they all, \r\nOr I alone against them; since by strength \r\nThey measure all, of other excellence \r\nNot emulous, nor care who them excels; \r\nNor other strife with them do I vouchsafe. \r\nSo spake the Son, and into terrour changed \r\nHis countenance too severe to be beheld, \r\nAnd full of wrath bent on his enemies. \r\nAt once the Four spread out their starry wings \r\nWith dreadful shade contiguous, and the orbs \r\nOf his fierce chariot rolled, as with the sound \r\nOf torrent floods, or of a numerous host. \r\nHe on his impious foes right onward drove, \r\nGloomy as night; under his burning wheels \r\nThe stedfast empyrean shook throughout, \r\nAll but the throne itself of God.  Full soon \r\nAmong them he arrived; in his right hand \r\nGrasping ten thousand thunders, which he sent \r\nBefore him, such as in their souls infixed \r\nPlagues:  They, astonished, all resistance lost, \r\nAll courage; down their idle weapons dropt: \r\nO'er shields, and helms, and helmed heads he rode \r\nOf Thrones and mighty Seraphim prostrate, \r\nThat wished the mountains now might be again \r\nThrown on them, as a shelter from his ire. \r\nNor less on either side tempestuous fell \r\nHis arrows, from the fourfold-visaged Four \r\nDistinct with eyes, and from the living wheels \r\nDistinct alike with multitude of eyes; \r\nOne Spirit in them ruled; and every eye \r\nGlared lightning, and shot forth pernicious fire \r\nAmong the accursed, that withered all their strength, \r\nAnd of their wonted vigour left them drained, \r\nExhausted, spiritless, afflicted, fallen. \r\nYet half his strength he put not forth, but checked \r\nHis thunder in mid volley; for he meant \r\nNot to destroy, but root them out of Heaven: \r\nThe overthrown he raised, and as a herd \r\nOf goats or timorous flock together thronged \r\nDrove them before him thunder-struck, pursued \r\nWith terrours, and with furies, to the bounds \r\nAnd crystal wall of Heaven; which, opening wide, \r\nRolled inward, and a spacious gap disclosed \r\nInto the wasteful deep:  The monstrous sight \r\nStruck them with horrour backward, but far worse \r\nUrged them behind:  Headlong themselves they threw \r\nDown from the verge of Heaven; eternal wrath \r\nBurnt after them to the bottomless pit. \r\nHell heard the unsufferable noise, Hell saw \r\nHeaven ruining from Heaven, and would have fled \r\nAffrighted; but strict Fate had cast too deep \r\nHer dark foundations, and too fast had bound. \r\nNine days they fell:  Confounded Chaos roared, \r\nAnd felt tenfold confusion in their fall \r\nThrough his wild anarchy, so huge a rout \r\nIncumbered him with ruin:  Hell at last \r\nYawning received them whole, and on them closed; \r\nHell, their fit habitation, fraught with fire \r\nUnquenchable, the house of woe and pain. \r\nDisburdened Heaven rejoiced, and soon repaired \r\nHer mural breach, returning whence it rolled. \r\nSole victor, from the expulsion of his foes, \r\nMessiah his triumphal chariot turned: \r\nTo meet him all his Saints, who silent stood \r\nEye-witnesses of his almighty acts, \r\nWith jubilee advanced; and, as they went, \r\nShaded with branching palm, each Order bright, \r\nSung triumph, and him sung victorious King, \r\nSon, Heir, and Lord, to him dominion given, \r\nWorthiest to reign:  He, celebrated, rode \r\nTriumphant through mid Heaven, into the courts \r\nAnd temple of his Mighty Father throned \r\nOn high; who into glory him received, \r\nWhere now he sits at the right hand of bliss. \r\nThus, measuring things in Heaven by things on Earth, \r\nAt thy request, and that thou mayest beware \r\nBy what is past, to thee I have revealed \r\nWhat might have else to human race been hid; \r\nThe discord which befel, and war in Heaven \r\nAmong the angelick Powers, and the deep fall \r\nOf those too high aspiring, who rebelled \r\nWith Satan; he who envies now thy state, \r\nWho now is plotting how he may seduce \r\nThee also from obedience, that, with him \r\nBereaved of happiness, thou mayest partake \r\nHis punishment, eternal misery; \r\nWhich would be all his solace and revenge, \r\nAs a despite done against the Most High, \r\nThee once to gain companion of his woe. \r\nBut listen not to his temptations, warn \r\nThy weaker; let it profit thee to have heard, \r\nBy terrible example, the reward \r\nOf disobedience; firm they might have stood, \r\nYet fell; remember, and fear to transgress. \r\n \r\n \r\n \r\nBook VII                                                         \r\n \r\n \r\nDescend from Heaven, Urania, by that name \r\nIf rightly thou art called, whose voice divine \r\nFollowing, above the Olympian hill I soar, \r\nAbove the flight of Pegasean wing! \r\nThe meaning, not the name, I call: for thou \r\nNor of the Muses nine, nor on the top \r\nOf old Olympus dwellest; but, heavenly-born, \r\nBefore the hills appeared, or fountain flowed, \r\nThou with eternal Wisdom didst converse, \r\nWisdom thy sister, and with her didst play \r\nIn presence of the Almighty Father, pleased \r\nWith thy celestial song.  Up led by thee \r\nInto the Heaven of Heavens I have presumed, \r\nAn earthly guest, and drawn empyreal air, \r\nThy tempering: with like safety guided down \r\nReturn me to my native element: \r\nLest from this flying steed unreined, (as once \r\nBellerophon, though from a lower clime,) \r\nDismounted, on the Aleian field I fall, \r\nErroneous there to wander, and forlorn. \r\nHalf yet remains unsung, but narrower bound \r\nWithin the visible diurnal sphere; \r\nStanding on earth, not rapt above the pole, \r\nMore safe I sing with mortal voice, unchanged \r\nTo hoarse or mute, though fallen on evil days, \r\nOn evil days though fallen, and evil tongues; \r\nIn darkness, and with dangers compassed round, \r\nAnd solitude; yet not alone, while thou \r\nVisitest my slumbers nightly, or when morn \r\nPurples the east: still govern thou my song, \r\nUrania, and fit audience find, though few. \r\nBut drive far off the barbarous dissonance \r\nOf Bacchus and his revellers, the race \r\nOf that wild rout that tore the Thracian bard \r\nIn Rhodope, where woods and rocks had ears \r\nTo rapture, till the savage clamour drowned \r\nBoth harp and voice; nor could the Muse defend \r\nHer son.  So fail not thou, who thee implores: \r\nFor thou art heavenly, she an empty dream. \r\nSay, Goddess, what ensued when Raphael, \r\nThe affable Arch-Angel, had forewarned \r\nAdam, by dire example, to beware \r\nApostasy, by what befel in Heaven \r\nTo those apostates; lest the like befall \r\nIn Paradise to Adam or his race, \r\nCharged not to touch the interdicted tree, \r\nIf they transgress, and slight that sole command, \r\nSo easily obeyed amid the choice \r\nOf all tastes else to please their appetite, \r\nThough wandering.  He, with his consorted Eve, \r\nThe story heard attentive, and was filled \r\nWith admiration and deep muse, to hear \r\nOf things so high and strange; things, to their thought \r\nSo unimaginable, as hate in Heaven, \r\nAnd war so near the peace of God in bliss, \r\nWith such confusion: but the evil, soon \r\nDriven back, redounded as a flood on those \r\nFrom whom it sprung; impossible to mix \r\nWith blessedness.  Whence Adam soon repealed \r\nThe doubts that in his heart arose: and now \r\nLed on, yet sinless, with desire to know \r\nWhat nearer might concern him, how this world \r\nOf Heaven and Earth conspicuous first began; \r\nWhen, and whereof created; for what cause; \r\nWhat within Eden, or without, was done \r\nBefore his memory; as one whose drouth \r\nYet scarce allayed still eyes the current stream, \r\nWhose liquid murmur heard new thirst excites, \r\nProceeded thus to ask his heavenly guest. \r\nGreat things, and full of wonder in our ears, \r\nFar differing from this world, thou hast revealed, \r\nDivine interpreter! by favour sent \r\nDown from the empyrean, to forewarn \r\nUs timely of what might else have been our loss, \r\nUnknown, which human knowledge could not reach; \r\nFor which to the infinitely Good we owe \r\nImmortal thanks, and his admonishment \r\nReceive, with solemn purpose to observe \r\nImmutably his sovran will, the end \r\nOf what we are.  But since thou hast vouchsafed \r\nGently, for our instruction, to impart \r\nThings above earthly thought, which yet concerned \r\nOur knowing, as to highest wisdom seemed, \r\nDeign to descend now lower, and relate \r\nWhat may no less perhaps avail us known, \r\nHow first began this Heaven which we behold \r\nDistant so high, with moving fires adorned \r\nInnumerable; and this which yields or fills \r\nAll space, the ambient air wide interfused \r\nEmbracing round this floried Earth; what cause \r\nMoved the Creator, in his holy rest \r\nThrough all eternity, so late to build \r\nIn Chaos; and the work begun, how soon \r\nAbsolved; if unforbid thou mayest unfold \r\nWhat we, not to explore the secrets ask \r\nOf his eternal empire, but the more \r\nTo magnify his works, the more we know. \r\nAnd the great light of day yet wants to run \r\nMuch of his race though steep; suspense in Heaven, \r\nHeld by thy voice, thy potent voice, he hears, \r\nAnd longer will delay to hear thee tell \r\nHis generation, and the rising birth \r\nOf Nature from the unapparent Deep: \r\nOr if the star of evening and the moon \r\nHaste to thy audience, Night with her will bring, \r\nSilence; and Sleep, listening to thee, will watch; \r\nOr we can bid his absence, till thy song \r\nEnd, and dismiss thee ere the morning shine. \r\nThus Adam his illustrious guest besought: \r\nAnd thus the Godlike Angel answered mild. \r\nThis also thy request, with caution asked, \r\nObtain; though to recount almighty works \r\nWhat words or tongue of Seraph can suffice, \r\nOr heart of man suffice to comprehend? \r\nYet what thou canst attain, which best may serve \r\nTo glorify the Maker, and infer \r\nThee also happier, shall not be withheld \r\nThy hearing; such commission from above \r\nI have received, to answer thy desire \r\nOf knowledge within bounds; beyond, abstain \r\nTo ask; nor let thine own inventions hope \r\nThings not revealed, which the invisible King, \r\nOnly Omniscient, hath suppressed in night; \r\nTo none communicable in Earth or Heaven: \r\nEnough is left besides to search and know. \r\nBut knowledge is as food, and needs no less \r\nHer temperance over appetite, to know \r\nIn measure what the mind may well contain; \r\nOppresses else with surfeit, and soon turns \r\nWisdom to folly, as nourishment to wind. \r\nKnow then, that, after Lucifer from Heaven \r\n(So call him, brighter once amidst the host \r\nOf Angels, than that star the stars among,) \r\nFell with his flaming legions through the deep \r\nInto his place, and the great Son returned \r\nVictorious with his Saints, the Omnipotent \r\nEternal Father from his throne beheld \r\nTheir multitude, and to his Son thus spake. \r\nAt least our envious Foe hath failed, who thought \r\nAll like himself rebellious, by whose aid \r\nThis inaccessible high strength, the seat \r\nOf Deity supreme, us dispossessed, \r\nHe trusted to have seised, and into fraud \r\nDrew many, whom their place knows here no more: \r\nYet far the greater part have kept, I see, \r\nTheir station; Heaven, yet populous, retains \r\nNumber sufficient to possess her realms \r\nThough wide, and this high temple to frequent \r\nWith ministeries due, and solemn rites: \r\nBut, lest his heart exalt him in the harm \r\nAlready done, to have dispeopled Heaven, \r\nMy damage fondly deemed, I can repair \r\nThat detriment, if such it be to lose \r\nSelf-lost; and in a moment will create \r\nAnother world, out of one man a race \r\nOf men innumerable, there to dwell, \r\nNot here; till, by degrees of merit raised, \r\nThey open to themselves at length the way \r\nUp hither, under long obedience tried; \r\nAnd Earth be changed to Heaven, and Heaven to Earth, \r\nOne kingdom, joy and union without end. \r\nMean while inhabit lax, ye Powers of Heaven; \r\nAnd thou my Word, begotten Son, by thee \r\nThis I perform; speak thou, and be it done! \r\nMy overshadowing Spirit and Might with thee \r\nI send along; ride forth, and bid the Deep \r\nWithin appointed bounds be Heaven and Earth; \r\nBoundless the Deep, because I Am who fill \r\nInfinitude, nor vacuous the space. \r\nThough I, uncircumscribed myself, retire, \r\nAnd put not forth my goodness, which is free \r\nTo act or not, Necessity and Chance \r\nApproach not me, and what I will is Fate. \r\nSo spake the Almighty, and to what he spake \r\nHis Word, the Filial Godhead, gave effect. \r\nImmediate are the acts of God, more swift \r\nThan time or motion, but to human ears \r\nCannot without process of speech be told, \r\nSo told as earthly notion can receive. \r\nGreat triumph and rejoicing was in Heaven, \r\nWhen such was heard declared the Almighty's will; \r\nGlory they sung to the Most High, good will \r\nTo future men, and in their dwellings peace; \r\nGlory to Him, whose just avenging ire \r\nHad driven out the ungodly from his sight \r\nAnd the habitations of the just; to Him \r\nGlory and praise, whose wisdom had ordained \r\nGood out of evil to create; instead \r\nOf Spirits malign, a better race to bring \r\nInto their vacant room, and thence diffuse \r\nHis good to worlds and ages infinite. \r\nSo sang the Hierarchies:  Mean while the Son \r\nOn his great expedition now appeared, \r\nGirt with Omnipotence, with radiance crowned \r\nOf Majesty Divine; sapience and love \r\nImmense, and all his Father in him shone. \r\nAbout his chariot numberless were poured \r\nCherub, and Seraph, Potentates, and Thrones, \r\nAnd Virtues, winged Spirits, and chariots winged \r\nFrom the armoury of God; where stand of old \r\nMyriads, between two brazen mountains lodged \r\nAgainst a solemn day, harnessed at hand, \r\nCelestial equipage; and now came forth \r\nSpontaneous, for within them Spirit lived, \r\nAttendant on their Lord:  Heaven opened wide \r\nHer ever-during gates, harmonious sound \r\nOn golden hinges moving, to let forth \r\nThe King of Glory, in his powerful Word \r\nAnd Spirit, coming to create new worlds. \r\nOn heavenly ground they stood; and from the shore \r\nThey viewed the vast immeasurable abyss \r\nOutrageous as a sea, dark, wasteful, wild, \r\nUp from the bottom turned by furious winds \r\nAnd surging waves, as mountains, to assault \r\nHeaven's highth, and with the center mix the pole. \r\nSilence, ye troubled Waves, and thou Deep, peace, \r\nSaid then the Omnifick Word; your discord end! \r\nNor staid; but, on the wings of Cherubim \r\nUplifted, in paternal glory rode \r\nFar into Chaos, and the world unborn; \r\nFor Chaos heard his voice:  Him all his train \r\nFollowed in bright procession, to behold \r\nCreation, and the wonders of his might. \r\nThen staid the fervid wheels, and in his hand \r\nHe took the golden compasses, prepared \r\nIn God's eternal store, to circumscribe \r\nThis universe, and all created things: \r\nOne foot he centered, and the other turned \r\nRound through the vast profundity obscure; \r\nAnd said, Thus far extend, thus far thy bounds, \r\nThis be thy just circumference, O World! \r\nThus God the Heaven created, thus the Earth, \r\nMatter unformed and void:  Darkness profound \r\nCovered the abyss: but on the watery calm \r\nHis brooding wings the Spirit of God outspread, \r\nAnd vital virtue infused, and vital warmth \r\nThroughout the fluid mass; but downward purged \r\nThe black tartareous cold infernal dregs, \r\nAdverse to life: then founded, then conglobed \r\nLike things to like; the rest to several place \r\nDisparted, and between spun out the air; \r\nAnd Earth self-balanced on her center hung. \r\nLet there be light, said God; and forthwith Light \r\nEthereal, first of things, quintessence pure, \r\nSprung from the deep; and from her native east \r\nTo journey through the aery gloom began, \r\nSphered in a radiant cloud, for yet the sun \r\nWas not; she in a cloudy tabernacle \r\nSojourned the while.  God saw the light was good; \r\nAnd light from darkness by the hemisphere \r\nDivided: light the Day, and darkness Night, \r\nHe named.  Thus was the first day even and morn: \r\nNor past uncelebrated, nor unsung \r\nBy the celestial quires, when orient light \r\nExhaling first from darkness they beheld; \r\nBirth-day of Heaven and Earth; with joy and shout \r\nThe hollow universal orb they filled, \r\nAnd touched their golden harps, and hymning praised \r\nGod and his works; Creator him they sung, \r\nBoth when first evening was, and when first morn. \r\nAgain, God said,  Let there be firmament \r\nAmid the waters, and let it divide \r\nThe waters from the waters; and God made \r\nThe firmament, expanse of liquid, pure, \r\nTransparent, elemental air, diffused \r\nIn circuit to the uttermost convex \r\nOf this great round; partition firm and sure, \r\nThe waters underneath from those above \r\nDividing: for as earth, so he the world \r\nBuilt on circumfluous waters calm, in wide \r\nCrystalline ocean, and the loud misrule \r\nOf Chaos far removed; lest fierce extremes \r\nContiguous might distemper the whole frame: \r\nAnd Heaven he named the Firmament:  So even \r\nAnd morning chorus sung the second day. \r\nThe Earth was formed, but in the womb as yet \r\nOf waters, embryon immature involved, \r\nAppeared not: over all the face of Earth \r\nMain ocean flowed, not idle; but, with warm \r\nProlifick humour softening all her globe, \r\nFermented the great mother to conceive, \r\nSatiate with genial moisture; when God said, \r\nBe gathered now ye waters under Heaven \r\nInto one place, and let dry land appear. \r\nImmediately the mountains huge appear \r\nEmergent, and their broad bare backs upheave \r\nInto the clouds; their tops ascend the sky: \r\nSo high as heaved the tumid hills, so low \r\nDown sunk a hollow bottom broad and deep, \r\nCapacious bed of waters:  Thither they \r\nHasted with glad precipitance, uprolled, \r\nAs drops on dust conglobing from the dry: \r\nPart rise in crystal wall, or ridge direct, \r\nFor haste; such flight the great command impressed \r\nOn the swift floods:  As armies at the call \r\nOf trumpet (for of armies thou hast heard) \r\nTroop to their standard; so the watery throng, \r\nWave rolling after wave, where way they found, \r\nIf steep, with torrent rapture, if through plain, \r\nSoft-ebbing; nor withstood them rock or hill; \r\nBut they, or under ground, or circuit wide \r\nWith serpent errour wandering, found their way, \r\nAnd on the washy oose deep channels wore; \r\nEasy, ere God had bid the ground be dry, \r\nAll but within those banks, where rivers now \r\nStream, and perpetual draw their humid train. \r\nThe dry land, Earth; and the great receptacle \r\nOf congregated waters, he called Seas: \r\nAnd saw that it was good; and said, Let the Earth \r\nPut forth the verdant grass, herb yielding seed, \r\nAnd fruit-tree yielding fruit after her kind, \r\nWhose seed is in herself upon the Earth. \r\nHe scarce had said, when the bare Earth, till then \r\nDesart and bare, unsightly, unadorned, \r\nBrought forth the tender grass, whose verdure clad \r\nHer universal face with pleasant green; \r\nThen herbs of every leaf, that sudden flowered \r\nOpening their various colours, and made gay \r\nHer bosom, smelling sweet: and, these scarce blown, \r\nForth flourished thick the clustering vine, forth crept \r\nThe swelling gourd, up stood the corny reed \r\nEmbattled in her field, and the humble shrub, \r\nAnd bush with frizzled hair implicit:  Last \r\nRose, as in dance, the stately trees, and spread \r\nTheir branches hung with copious fruit, or gemmed \r\nTheir blossoms:  With high woods the hills were crowned; \r\nWith tufts the valleys, and each fountain side; \r\nWith borders long the rivers: that Earth now \r\nSeemed like to Heaven, a seat where Gods might dwell, \r\nOr wander with delight, and love to haunt \r\nHer sacred shades: though God had yet not rained \r\nUpon the Earth, and man to till the ground \r\nNone was; but from the Earth a dewy mist \r\nWent up, and watered all the ground, and each \r\nPlant of the field; which, ere it was in the Earth, \r\nGod made, and every herb, before it grew \r\nOn the green stem:  God saw that it was good: \r\nSo even and morn recorded the third day. \r\nAgain the Almighty spake, Let there be lights \r\nHigh in the expanse of Heaven, to divide \r\nThe day from night; and let them be for signs, \r\nFor seasons, and for days, and circling years; \r\nAnd let them be for lights, as I ordain \r\nTheir office in the firmament of Heaven, \r\nTo give light on the Earth; and it was so. \r\nAnd God made two great lights, great for their use \r\nTo Man, the greater to have rule by day, \r\nThe less by night, altern; and made the stars, \r\nAnd set them in the firmament of Heaven \r\nTo illuminate the Earth, and rule the day \r\nIn their vicissitude, and rule the night, \r\nAnd light from darkness to divide.  God saw, \r\nSurveying his great work, that it was good: \r\nFor of celestial bodies first the sun \r\nA mighty sphere he framed, unlightsome first, \r\nThough of ethereal mould: then formed the moon \r\nGlobose, and every magnitude of stars, \r\nAnd sowed with stars the Heaven, thick as a field: \r\nOf light by far the greater part he took, \r\nTransplanted from her cloudy shrine, and placed \r\nIn the sun's orb, made porous to receive \r\nAnd drink the liquid light; firm to retain \r\nHer gathered beams, great palace now of light. \r\nHither, as to their fountain, other stars \r\nRepairing, in their golden urns draw light, \r\nAnd hence the morning-planet gilds her horns; \r\nBy tincture or reflection they augment \r\nTheir small peculiar, though from human sight \r\nSo far remote, with diminution seen, \r\nFirst in his east the glorious lamp was seen, \r\nRegent of day, and all the horizon round \r\nInvested with bright rays, jocund to run \r\nHis longitude through Heaven's high road; the gray \r\nDawn, and the Pleiades, before him danced, \r\nShedding sweet influence:  Less bright the moon, \r\nBut opposite in levelled west was set, \r\nHis mirrour, with full face borrowing her light \r\nFrom him; for other light she needed none \r\nIn that aspect, and still that distance keeps \r\nTill night; then in the east her turn she shines, \r\nRevolved on Heaven's great axle, and her reign \r\nWith thousand lesser lights dividual holds, \r\nWith thousand thousand stars, that then appeared \r\nSpangling the hemisphere:  Then first adorned \r\nWith their bright luminaries that set and rose, \r\nGlad evening and glad morn crowned the fourth day. \r\nAnd God said, Let the waters generate \r\nReptile with spawn abundant, living soul: \r\nAnd let fowl fly above the Earth, with wings \r\nDisplayed on the open firmament of Heaven. \r\nAnd God created the great whales, and each \r\nSoul living, each that crept, which plenteously \r\nThe waters generated by their kinds; \r\nAnd every bird of wing after his kind; \r\nAnd saw that it was good, and blessed them, saying. \r\nBe fruitful, multiply, and in the seas, \r\nAnd lakes, and running streams, the waters fill; \r\nAnd let the fowl be multiplied, on the Earth. \r\nForthwith the sounds and seas, each creek and bay, \r\nWith fry innumerable swarm, and shoals \r\nOf fish that with their fins, and shining scales, \r\nGlide under the green wave, in sculls that oft \r\nBank the mid sea: part single, or with mate, \r\nGraze the sea-weed their pasture, and through groves \r\nOf coral stray; or, sporting with quick glance, \r\nShow to the sun their waved coats dropt with gold; \r\nOr, in their pearly shells at ease, attend \r\nMoist nutriment; or under rocks their food \r\nIn jointed armour watch: on smooth the seal \r\nAnd bended dolphins play: part huge of bulk \r\nWallowing unwieldy, enormous in their gait, \r\nTempest the ocean: there leviathan, \r\nHugest of living creatures, on the deep \r\nStretched like a promontory sleeps or swims, \r\nAnd seems a moving land; and at his gills \r\nDraws in, and at his trunk spouts out, a sea. \r\nMean while the tepid caves, and fens, and shores, \r\nTheir brood as numerous hatch, from the egg that soon \r\nBursting with kindly rupture forth disclosed \r\nTheir callow young; but feathered soon and fledge \r\nThey summed their pens; and, soaring the air sublime, \r\nWith clang despised the ground, under a cloud \r\nIn prospect; there the eagle and the stork \r\nOn cliffs and cedar tops their eyries build: \r\nPart loosely wing the region, part more wise \r\nIn common, ranged in figure, wedge their way, \r\nIntelligent of seasons, and set forth \r\nTheir aery caravan, high over seas \r\nFlying, and over lands, with mutual wing \r\nEasing their flight; so steers the prudent crane \r\nHer annual voyage, borne on winds; the air \r\nFloats as they pass, fanned with unnumbered plumes: \r\nFrom branch to branch the smaller birds with song \r\nSolaced the woods, and spread their painted wings \r\nTill even; nor then the solemn nightingale \r\nCeased warbling, but all night tun'd her soft lays: \r\nOthers, on silver lakes and rivers, bathed \r\nTheir downy breast; the swan with arched neck, \r\nBetween her white wings mantling proudly, rows \r\nHer state with oary feet; yet oft they quit \r\nThe dank, and, rising on stiff pennons, tower \r\nThe mid aereal sky:  Others on ground \r\nWalked firm; the crested cock whose clarion sounds \r\nThe silent hours, and the other whose gay train \r\nAdorns him, coloured with the florid hue \r\nOf rainbows and starry eyes.  The waters thus \r\nWith fish replenished, and the air with fowl, \r\nEvening and morn solemnized the fifth day. \r\nThe sixth, and of creation last, arose \r\nWith evening harps and matin; when God said, \r\nLet the Earth bring forth soul living in her kind, \r\nCattle, and creeping things, and beast of the Earth, \r\nEach in their kind.  The Earth obeyed, and straight \r\nOpening her fertile womb teemed at a birth \r\nInnumerous living creatures, perfect forms, \r\nLimbed and full grown:  Out of the ground up rose, \r\nAs from his lair, the wild beast where he wons \r\nIn forest wild, in thicket, brake, or den; \r\nAmong the trees in pairs they rose, they walked: \r\nThe cattle in the fields and meadows green: \r\nThose rare and solitary, these in flocks \r\nPasturing at once, and in broad herds upsprung. \r\nThe grassy clods now calved; now half appeared \r\nThe tawny lion, pawing to get free \r\nHis hinder parts, then springs as broke from bonds, \r\nAnd rampant shakes his brinded mane; the ounce, \r\nThe libbard, and the tiger, as the mole \r\nRising, the crumbled earth above them threw \r\nIn hillocks:  The swift stag from under ground \r\nBore up his branching head:  Scarce from his mould \r\nBehemoth biggest born of earth upheaved \r\nHis vastness:  Fleeced the flocks and bleating rose, \r\nAs plants:  Ambiguous between sea and land \r\nThe river-horse, and scaly crocodile. \r\nAt once came forth whatever creeps the ground, \r\nInsect or worm: those waved their limber fans \r\nFor wings, and smallest lineaments exact \r\nIn all the liveries decked of summer's pride \r\nWith spots of gold and purple, azure and green: \r\nThese, as a line, their long dimension drew, \r\nStreaking the ground with sinuous trace; not all \r\nMinims of nature; some of serpent-kind, \r\nWonderous in length and corpulence, involved \r\nTheir snaky folds, and added wings.  First crept \r\nThe parsimonious emmet, provident \r\nOf future; in small room large heart enclosed; \r\nPattern of just equality perhaps \r\nHereafter, joined in her popular tribes \r\nOf commonalty:  Swarming next appeared \r\nThe female bee, that feeds her husband drone \r\nDeliciously, and builds her waxen cells \r\nWith honey stored:  The rest are numberless, \r\nAnd thou their natures knowest, and gavest them names, \r\nNeedless to thee repeated; nor unknown \r\nThe serpent, subtlest beast of all the field, \r\nOf huge extent sometimes, with brazen eyes \r\nAnd hairy mane terrifick, though to thee \r\nNot noxious, but obedient at thy call. \r\nNow Heaven in all her glory shone, and rolled \r\nHer motions, as the great first Mover's hand \r\nFirst wheeled their course:  Earth in her rich attire \r\nConsummate lovely smiled; air, water, earth, \r\nBy fowl, fish, beast, was flown, was swum, was walked, \r\nFrequent; and of the sixth day yet remained: \r\nThere wanted yet the master-work, the end \r\nOf all yet done; a creature, who, not prone \r\nAnd brute as other creatures, but endued \r\nWith sanctity of reason, might erect \r\nHis stature, and upright with front serene \r\nGovern the rest, self-knowing; and from thence \r\nMagnanimous to correspond with Heaven, \r\nBut grateful to acknowledge whence his good \r\nDescends, thither with heart, and voice, and eyes \r\nDirected in devotion, to adore \r\nAnd worship God Supreme, who made him chief \r\nOf all his works:  therefore the Omnipotent \r\nEternal Father (for where is not he \r\nPresent?) thus to his Son audibly spake. \r\nLet us make now Man in our image, Man \r\nIn our similitude, and let them rule \r\nOver the fish and fowl of sea and air, \r\nBeast of the field, and over all the Earth, \r\nAnd every creeping thing that creeps the ground. \r\nThis said, he formed thee, Adam, thee, O Man, \r\nDust of the ground, and in thy nostrils breathed \r\nThe breath of life; in his own image he \r\nCreated thee, in the image of God \r\nExpress; and thou becamest a living soul. \r\nMale he created thee; but thy consort \r\nFemale, for race; then blessed mankind, and said, \r\nBe fruitful, multiply, and fill the Earth; \r\nSubdue it, and throughout dominion hold \r\nOver fish of the sea, and fowl of the air, \r\nAnd every living thing that moves on the Earth. \r\nWherever thus created, for no place \r\nIs yet distinct by name, thence, as thou knowest, \r\nHe brought thee into this delicious grove, \r\nThis garden, planted with the trees of God, \r\nDelectable both to behold and taste; \r\nAnd freely all their pleasant fruit for food \r\nGave thee; all sorts are here that all the Earth yields, \r\nVariety without end; but of the tree, \r\nWhich, tasted, works knowledge of good and evil, \r\nThou mayest not; in the day thou eatest, thou diest; \r\nDeath is the penalty imposed; beware, \r\nAnd govern well thy appetite; lest Sin \r\nSurprise thee, and her black attendant Death. \r\nHere finished he, and all that he had made \r\nViewed, and behold all was entirely good; \r\nSo even and morn accomplished the sixth day: \r\nYet not till the Creator from his work \r\nDesisting, though unwearied, up returned, \r\nUp to the Heaven of Heavens, his high abode; \r\nThence to behold this new created world, \r\nThe addition of his empire, how it showed \r\nIn prospect from his throne, how good, how fair, \r\nAnswering his great idea.  Up he rode \r\nFollowed with acclamation, and the sound \r\nSymphonious of ten thousand harps, that tuned \r\nAngelick harmonies:  The earth, the air \r\nResounded, (thou rememberest, for thou heardst,) \r\nThe heavens and all the constellations rung, \r\nThe planets in their station listening stood, \r\nWhile the bright pomp ascended jubilant. \r\nOpen, ye everlasting gates! they sung, \r\nOpen, ye Heavens! your living doors;let in \r\nThe great Creator from his work returned \r\nMagnificent, his six days work, a World; \r\nOpen, and henceforth oft; for God will deign \r\nTo visit oft the dwellings of just men, \r\nDelighted; and with frequent intercourse \r\nThither will send his winged messengers \r\nOn errands of supernal grace.  So sung \r\nThe glorious train ascending:  He through Heaven, \r\nThat opened wide her blazing portals, led \r\nTo God's eternal house direct the way; \r\nA broad and ample road, whose dust is gold \r\nAnd pavement stars, as stars to thee appear, \r\nSeen in the galaxy, that milky way, \r\nWhich nightly, as a circling zone, thou seest \r\nPowdered with stars.  And now on Earth the seventh \r\nEvening arose in Eden, for the sun \r\nWas set, and twilight from the east came on, \r\nForerunning night; when at the holy mount \r\nOf Heaven's high-seated top, the imperial throne \r\nOf Godhead, fixed for ever firm and sure, \r\nThe Filial Power arrived, and sat him down \r\nWith his great Father; for he also went \r\nInvisible, yet staid, (such privilege \r\nHath Omnipresence) and the work ordained, \r\nAuthor and End of all things; and, from work \r\nNow resting, blessed and hallowed the seventh day, \r\nAs resting on that day from all his work, \r\nBut not in silence holy kept: the harp \r\nHad work and rested not; the solemn pipe, \r\nAnd dulcimer, all organs of sweet stop, \r\nAll sounds on fret by string or golden wire, \r\nTempered soft tunings, intermixed with voice \r\nChoral or unison: of incense clouds, \r\nFuming from golden censers, hid the mount. \r\nCreation and the six days acts they sung: \r\nGreat are thy works, Jehovah! infinite \r\nThy power! what thought can measure thee, or tongue \r\nRelate thee!  Greater now in thy return \r\nThan from the giant Angels:  Thee that day \r\nThy thunders magnified; but to create \r\nIs greater than created to destroy. \r\nWho can impair thee, Mighty King, or bound \r\nThy empire!  Easily the proud attempt \r\nOf Spirits apostate, and their counsels vain, \r\nThou hast repelled; while impiously they thought \r\nThee to diminish, and from thee withdraw \r\nThe number of thy worshippers.  Who seeks \r\nTo lessen thee, against his purpose serves \r\nTo manifest the more thy might: his evil \r\nThou usest, and from thence createst more good. \r\nWitness this new-made world, another Heaven \r\nFrom Heaven-gate not far, founded in view \r\nOn the clear hyaline, the glassy sea; \r\nOf amplitude almost immense, with stars \r\nNumerous, and every star perhaps a world \r\nOf destined habitation; but thou knowest \r\nTheir seasons: among these the seat of Men, \r\nEarth, with her nether ocean circumfused, \r\nTheir pleasant dwelling-place.  Thrice happy Men, \r\nAnd sons of Men, whom God hath thus advanced! \r\nCreated in his image, there to dwell \r\nAnd worship him; and in reward to rule \r\nOver his works, on earth, in sea, or air, \r\nAnd multiply a race of worshippers \r\nHoly and just:  Thrice happy, if they know \r\nTheir happiness, and persevere upright! \r\nSo sung they, and the empyrean rung \r\nWith halleluiahs:  Thus was sabbath kept. \r\nAnd thy request think now fulfilled, that asked \r\nHow first this world and face of things began, \r\nAnd what before thy memory was done \r\nFrom the beginning; that posterity, \r\nInformed by thee, might know:  If else thou seekest \r\nAught, not surpassing human measure, say. \r\n \r\n \r\n \r\nBook VIII                                                        \r\n \r\n \r\nThe Angel ended, and in Adam's ear \r\nSo charming left his voice, that he a while \r\nThought him still speaking, still stood fixed to hear; \r\nThen, as new waked, thus gratefully replied. \r\nWhat thanks sufficient, or what recompence \r\nEqual, have I to render thee, divine \r\nHistorian, who thus largely hast allayed \r\nThe thirst I had of knowledge, and vouchsafed \r\nThis friendly condescension to relate \r\nThings, else by me unsearchable; now heard \r\nWith wonder, but delight, and, as is due, \r\nWith glory attributed to the high \r\nCreator!  Something yet of doubt remains, \r\nWhich only thy solution can resolve. \r\nWhen I behold this goodly frame, this world, \r\nOf Heaven and Earth consisting; and compute \r\nTheir magnitudes; this Earth, a spot, a grain, \r\nAn atom, with the firmament compared \r\nAnd all her numbered stars, that seem to roll \r\nSpaces incomprehensible, (for such \r\nTheir distance argues, and their swift return \r\nDiurnal,) merely to officiate light \r\nRound this opacous Earth, this punctual spot, \r\nOne day and night; in all her vast survey \r\nUseless besides; reasoning I oft admire, \r\nHow Nature wise and frugal could commit \r\nSuch disproportions, with superfluous hand \r\nSo many nobler bodies to create, \r\nGreater so manifold, to this one use, \r\nFor aught appears, and on their orbs impose \r\nSuch restless revolution day by day \r\nRepeated; while the sedentary Earth, \r\nThat better might with far less compass move, \r\nServed by more noble than herself, attains \r\nHer end without least motion, and receives, \r\nAs tribute, such a sumless journey brought \r\nOf incorporeal speed, her warmth and light; \r\nSpeed, to describe whose swiftness number fails. \r\nSo spake our sire, and by his countenance seemed \r\nEntering on studious thoughts abstruse; which Eve \r\nPerceiving, where she sat retired in sight, \r\nWith lowliness majestick from her seat, \r\nAnd grace that won who saw to wish her stay, \r\nRose, and went forth among her fruits and flowers, \r\nTo visit how they prospered, bud and bloom, \r\nHer nursery; they at her coming sprung, \r\nAnd, touched by her fair tendance, gladlier grew. \r\nYet went she not, as not with such discourse \r\nDelighted, or not capable her ear \r\nOf what was high: such pleasure she reserved, \r\nAdam relating, she sole auditress; \r\nHer husband the relater she preferred \r\nBefore the Angel, and of him to ask \r\nChose rather; he, she knew, would intermix \r\nGrateful digressions, and solve high dispute \r\nWith conjugal caresses: from his lip \r\nNot words alone pleased her.  O! when meet now \r\nSuch pairs, in love and mutual honour joined? \r\nWith Goddess-like demeanour forth she went, \r\nNot unattended; for on her, as Queen, \r\nA pomp of winning Graces waited still, \r\nAnd from about her shot darts of desire \r\nInto all eyes, to wish her still in sight. \r\nAnd Raphael now, to Adam's doubt proposed, \r\nBenevolent and facile thus replied. \r\nTo ask or search, I blame thee not; for Heaven \r\nIs as the book of God before thee set, \r\nWherein to read his wonderous works, and learn \r\nHis seasons, hours, or days, or months, or years: \r\nThis to attain, whether Heaven move or Earth, \r\nImports not, if thou reckon right; the rest \r\nFrom Man or Angel the great Architect \r\nDid wisely to conceal, and not divulge \r\nHis secrets to be scanned by them who ought \r\nRather admire; or, if they list to try \r\nConjecture, he his fabrick of the Heavens \r\nHath left to their disputes, perhaps to move \r\nHis laughter at their quaint opinions wide \r\nHereafter; when they come to model Heaven \r\nAnd calculate the stars, how they will wield \r\nThe mighty frame; how build, unbuild, contrive \r\nTo save appearances; how gird the sphere \r\nWith centrick and eccentrick scribbled o'er, \r\nCycle and epicycle, orb in orb: \r\nAlready by thy reasoning this I guess, \r\nWho art to lead thy offspring, and supposest \r\nThat bodies bright and greater should not serve \r\nThe less not bright, nor Heaven such journeys run, \r\nEarth sitting still, when she alone receives \r\nThe benefit:  Consider first, that great \r\nOr bright infers not excellence: the Earth \r\nThough, in comparison of Heaven, so small, \r\nNor glistering, may of solid good contain \r\nMore plenty than the sun that barren shines; \r\nWhose virtue on itself works no effect, \r\nBut in the fruitful Earth; there first received, \r\nHis beams, unactive else, their vigour find. \r\nYet not to Earth are those bright luminaries \r\nOfficious; but to thee, Earth's habitant. \r\nAnd for the Heaven's wide circuit, let it speak \r\nThe Maker's high magnificence, who built \r\nSo spacious, and his line stretched out so far; \r\nThat Man may know he dwells not in his own; \r\nAn edifice too large for him to fill, \r\nLodged in a small partition; and the rest \r\nOrdained for uses to his Lord best known. \r\nThe swiftness of those circles attribute, \r\nThough numberless, to his Omnipotence, \r\nThat to corporeal substances could add \r\nSpeed almost spiritual:  Me thou thinkest not slow, \r\nWho since the morning-hour set out from Heaven \r\nWhere God resides, and ere mid-day arrived \r\nIn Eden; distance inexpressible \r\nBy numbers that have name.  But this I urge, \r\nAdmitting motion in the Heavens, to show \r\nInvalid that which thee to doubt it moved; \r\nNot that I so affirm, though so it seem \r\nTo thee who hast thy dwelling here on Earth. \r\nGod, to remove his ways from human sense, \r\nPlaced Heaven from Earth so far, that earthly sight, \r\nIf it presume, might err in things too high, \r\nAnd no advantage gain.  What if the sun \r\nBe center to the world; and other stars, \r\nBy his attractive virtue and their own \r\nIncited, dance about him various rounds? \r\nTheir wandering course now high, now low, then hid, \r\nProgressive, retrograde, or standing still, \r\nIn six thou seest; and what if seventh to these \r\nThe planet earth, so stedfast though she seem, \r\nInsensibly three different motions move? \r\nWhich else to several spheres thou must ascribe, \r\nMoved contrary with thwart obliquities; \r\nOr save the sun his labour, and that swift \r\nNocturnal and diurnal rhomb supposed, \r\nInvisible else above all stars, the wheel \r\nOf day and night; which needs not thy belief, \r\nIf earth, industrious of herself, fetch day \r\nTravelling east, and with her part averse \r\nFrom the sun's beam meet night, her other part \r\nStill luminous by his ray.  What if that light, \r\nSent from her through the wide transpicuous air, \r\nTo the terrestrial moon be as a star, \r\nEnlightening her by day, as she by night \r\nThis earth? reciprocal, if land be there, \r\nFields and inhabitants:  Her spots thou seest \r\nAs clouds, and clouds may rain, and rain produce \r\nFruits in her softened soil for some to eat \r\nAllotted there; and other suns perhaps, \r\nWith their attendant moons, thou wilt descry, \r\nCommunicating male and female light; \r\nWhich two great sexes animate the world, \r\nStored in each orb perhaps with some that live. \r\nFor such vast room in Nature unpossessed \r\nBy living soul, desart and desolate, \r\nOnly to shine, yet scarce to contribute \r\nEach orb a glimpse of light, conveyed so far \r\nDown to this habitable, which returns \r\nLight back to them, is obvious to dispute. \r\nBut whether thus these things, or whether not; \r\nBut whether the sun, predominant in Heaven, \r\nRise on the earth; or earth rise on the sun; \r\nHe from the east his flaming road begin; \r\nOr she from west her silent course advance, \r\nWith inoffensive pace that spinning sleeps \r\nOn her soft axle, while she paces even, \r\nAnd bears thee soft with the smooth hair along; \r\nSollicit not thy thoughts with matters hid; \r\nLeave them to God above; him serve, and fear! \r\nOf other creatures, as him pleases best, \r\nWherever placed, let him dispose; joy thou \r\nIn what he gives to thee, this Paradise \r\nAnd thy fair Eve; Heaven is for thee too high \r\nTo know what passes there; be lowly wise: \r\nThink only what concerns thee, and thy being; \r\nDream not of other worlds, what creatures there \r\nLive, in what state, condition, or degree; \r\nContented that thus far hath been revealed \r\nNot of Earth only, but of highest Heaven. \r\nTo whom thus Adam, cleared of doubt, replied. \r\nHow fully hast thou satisfied me, pure \r\nIntelligence of Heaven, Angel serene! \r\nAnd, freed from intricacies, taught to live \r\nThe easiest way; nor with perplexing thoughts \r\nTo interrupt the sweet of life, from which \r\nGod hath bid dwell far off all anxious cares, \r\nAnd not molest us; unless we ourselves \r\nSeek them with wandering thoughts, and notions vain. \r\nBut apt the mind or fancy is to rove \r\nUnchecked, and of her roving is no end; \r\nTill warned, or by experience taught, she learn, \r\nThat, not to know at large of things remote \r\nFrom use, obscure and subtle; but, to know \r\nThat which before us lies in daily life, \r\nIs the prime wisdom:  What is more, is fume, \r\nOr emptiness, or fond impertinence: \r\nAnd renders us, in things that most concern, \r\nUnpractised, unprepared, and still to seek. \r\nTherefore from this high pitch let us descend \r\nA lower flight, and speak of things at hand \r\nUseful; whence, haply, mention may arise \r\nOf something not unseasonable to ask, \r\nBy sufferance, and thy wonted favour, deigned. \r\nThee I have heard relating what was done \r\nEre my remembrance: now, hear me relate \r\nMy story, which perhaps thou hast not heard; \r\nAnd day is not yet spent; till then thou seest \r\nHow subtly to detain thee I devise; \r\nInviting thee to hear while I relate; \r\nFond! were it not in hope of thy reply: \r\nFor, while I sit with thee, I seem in Heaven; \r\nAnd sweeter thy discourse is to my ear \r\nThan fruits of palm-tree pleasantest to thirst \r\nAnd hunger both, from labour, at the hour \r\nOf sweet repast; they satiate, and soon fill, \r\nThough pleasant; but thy words, with grace divine \r\nImbued, bring to their sweetness no satiety. \r\nTo whom thus Raphael answered heavenly meek. \r\nNor are thy lips ungraceful, Sire of men, \r\nNor tongue ineloquent; for God on thee \r\nAbundantly his gifts hath also poured \r\nInward and outward both, his image fair: \r\nSpeaking, or mute, all comeliness and grace \r\nAttends thee; and each word, each motion, forms; \r\nNor less think we in Heaven of thee on Earth \r\nThan of our fellow-servant, and inquire \r\nGladly into the ways of God with Man: \r\nFor God, we see, hath honoured thee, and set \r\nOn Man his equal love:  Say therefore on; \r\nFor I that day was absent, as befel, \r\nBound on a voyage uncouth and obscure, \r\nFar on excursion toward the gates of Hell; \r\nSquared in full legion (such command we had) \r\nTo see that none thence issued forth a spy, \r\nOr enemy, while God was in his work; \r\nLest he, incensed at such eruption bold, \r\nDestruction with creation might have mixed. \r\nNot that they durst without his leave attempt; \r\nBut us he sends upon his high behests \r\nFor state, as Sovran King; and to inure \r\nOur prompt obedience.  Fast we found, fast shut, \r\nThe dismal gates, and barricadoed strong; \r\nBut long ere our approaching heard within \r\nNoise, other than the sound of dance or song, \r\nTorment, and loud lament, and furious rage. \r\nGlad we returned up to the coasts of light \r\nEre sabbath-evening: so we had in charge. \r\nBut thy relation now; for I attend, \r\nPleased with thy words no less than thou with mine. \r\nSo spake the Godlike Power, and thus our Sire. \r\nFor Man to tell how human life began \r\nIs hard; for who himself beginning knew \r\nDesire with thee still longer to converse \r\nInduced me.  As new waked from soundest sleep, \r\nSoft on the flowery herb I found me laid, \r\nIn balmy sweat; which with his beams the sun \r\nSoon dried, and on the reeking moisture fed. \r\nStraight toward Heaven my wondering eyes I turned, \r\nAnd gazed a while the ample sky; till, raised \r\nBy quick instinctive motion, up I sprung, \r\nAs thitherward endeavouring, and upright \r\nStood on my feet: about me round I saw \r\nHill, dale, and shady woods, and sunny plains, \r\nAnd liquid lapse of murmuring streams; by these, \r\nCreatures that lived and moved, and walked, or flew; \r\nBirds on the branches warbling; all things smiled; \r\nWith fragrance and with joy my heart o'erflowed. \r\nMyself I then perused, and limb by limb \r\nSurveyed, and sometimes went, and sometimes ran \r\nWith supple joints, as lively vigour led: \r\nBut who I was, or where, or from what cause, \r\nKnew not; to speak I tried, and forthwith spake; \r\nMy tongue obeyed, and readily could name \r\nWhate'er I saw.  Thou Sun, said I, fair light, \r\nAnd thou enlightened Earth, so fresh and gay, \r\nYe Hills, and Dales, ye Rivers, Woods, and Plains, \r\nAnd ye that live and move, fair Creatures, tell, \r\nTell, if ye saw, how I came thus, how here?-- \r\nNot of myself;--by some great Maker then, \r\nIn goodness and in power pre-eminent: \r\nTell me, how may I know him, how adore, \r\nFrom whom I have that thus I move and live, \r\nAnd feel that I am happier than I know.-- \r\nWhile thus I called, and strayed I knew not whither, \r\nFrom where I first drew air, and first beheld \r\nThis happy light; when, answer none returned, \r\nOn a green shady bank, profuse of flowers, \r\nPensive I sat me down:  There gentle sleep \r\nFirst found me, and with soft oppression seised \r\nMy droused sense, untroubled, though I thought \r\nI then was passing to my former state \r\nInsensible, and forthwith to dissolve: \r\nWhen suddenly stood at my head a dream, \r\nWhose inward apparition gently moved \r\nMy fancy to believe I yet had being, \r\nAnd lived:  One came, methought, of shape divine, \r\nAnd said, 'Thy mansion wants thee, Adam; rise, \r\n'First Man, of men innumerable ordained \r\n'First Father! called by thee, I come thy guide \r\n'To the garden of bliss, thy seat prepared.' \r\nSo saying, by the hand he took me raised, \r\nAnd over fields and waters, as in air \r\nSmooth-sliding without step, last led me up \r\nA woody mountain; whose high top was plain, \r\nA circuit wide, enclosed, with goodliest trees \r\nPlanted, with walks, and bowers; that what I saw \r\nOf Earth before scarce pleasant seemed.  Each tree, \r\nLoaden with fairest fruit that hung to the eye \r\nTempting, stirred in me sudden appetite \r\nTo pluck and eat; whereat I waked, and found \r\nBefore mine eyes all real, as the dream \r\nHad lively shadowed:  Here had new begun \r\nMy wandering, had not he, who was my guide \r\nUp hither, from among the trees appeared, \r\nPresence Divine.  Rejoicing, but with awe, \r\nIn adoration at his feet I fell \r\nSubmiss:  He reared me, and 'Whom thou soughtest I am,' \r\nSaid mildly, 'Author of all this thou seest \r\n'Above, or round about thee, or beneath. \r\n'This Paradise I give thee, count it thine \r\n'To till and keep, and of the fruit to eat: \r\n'Of every tree that in the garden grows \r\n'Eat freely with glad heart; fear here no dearth: \r\n'But of the tree whose operation brings \r\n'Knowledge of good and ill, which I have set \r\n'The pledge of thy obedience and thy faith, \r\n'Amid the garden by the tree of life, \r\n'Remember what I warn thee, shun to taste, \r\n'And shun the bitter consequence: for know, \r\n'The day thou eatest thereof, my sole command \r\n'Transgressed, inevitably thou shalt die, \r\n'From that day mortal; and this happy state \r\n'Shalt lose, expelled from hence into a world \r\n'Of woe and sorrow.'  Sternly he pronounced \r\nThe rigid interdiction, which resounds \r\nYet dreadful in mine ear, though in my choice \r\nNot to incur; but soon his clear aspect \r\nReturned, and gracious purpose thus renewed. \r\n'Not only these fair bounds, but all the Earth \r\n'To thee and to thy race I give; as lords \r\n'Possess it, and all things that therein live, \r\n'Or live in sea, or air; beast, fish, and fowl. \r\n'In sign whereof, each bird and beast behold \r\n'After their kinds; I bring them to receive \r\n'From thee their names, and pay thee fealty \r\n'With low subjection; understand the same \r\n'Of fish within their watery residence, \r\n'Not hither summoned, since they cannot change \r\n'Their element, to draw the thinner air.' \r\nAs thus he spake, each bird and beast behold \r\nApproaching two and two; these cowering low \r\nWith blandishment; each bird stooped on his wing. \r\nI named them, as they passed, and understood \r\nTheir nature, with such knowledge God endued \r\nMy sudden apprehension:  But in these \r\nI found not what methought I wanted still; \r\nAnd to the heavenly Vision thus presumed. \r\nO, by what name, for thou above all these, \r\nAbove mankind, or aught than mankind higher, \r\nSurpassest far my naming; how may I \r\nAdore thee, Author of this universe, \r\nAnd all this good to man? for whose well being \r\nSo amply, and with hands so liberal, \r\nThou hast provided all things:  But with me \r\nI see not who partakes.  In solitude \r\nWhat happiness, who can enjoy alone, \r\nOr, all enjoying, what contentment find? \r\nThus I presumptuous; and the Vision bright, \r\nAs with a smile more brightened, thus replied. \r\nWhat callest thou solitude?  Is not the Earth \r\nWith various living creatures, and the air \r\nReplenished, and all these at thy command \r\nTo come and play before thee?  Knowest thou not \r\nTheir language and their ways?  They also know, \r\nAnd reason not contemptibly:  With these \r\nFind pastime, and bear rule; thy realm is large. \r\nSo spake the Universal Lord, and seemed \r\nSo ordering:  I, with leave of speech implored, \r\nAnd humble deprecation, thus replied. \r\nLet not my words offend thee, Heavenly Power; \r\nMy Maker, be propitious while I speak. \r\nHast thou not made me here thy substitute, \r\nAnd these inferiour far beneath me set? \r\nAmong unequals what society \r\nCan sort, what harmony, or true delight? \r\nWhich must be mutual, in proportion due \r\nGiven and received; but, in disparity \r\nThe one intense, the other still remiss, \r\nCannot well suit with either, but soon prove \r\nTedious alike:  Of fellowship I speak \r\nSuch as I seek, fit to participate \r\nAll rational delight: wherein the brute \r\nCannot be human consort:  They rejoice \r\nEach with their kind, lion with lioness; \r\nSo fitly them in pairs thou hast combined: \r\nMuch less can bird with beast, or fish with fowl \r\nSo well converse, nor with the ox the ape; \r\nWorse then can man with beast, and least of all. \r\nWhereto the Almighty answered, not displeased. \r\nA nice and subtle happiness, I see, \r\nThou to thyself proposest, in the choice \r\nOf thy associates, Adam! and wilt taste \r\nNo pleasure, though in pleasure, solitary. \r\nWhat thinkest thou then of me, and this my state? \r\nSeem I to thee sufficiently possessed \r\nOf happiness, or not? who am alone \r\nFrom all eternity; for none I know \r\nSecond to me or like, equal much less. \r\nHow have I then with whom to hold converse, \r\nSave with the creatures which I made, and those \r\nTo me inferiour, infinite descents \r\nBeneath what other creatures are to thee? \r\nHe ceased; I lowly answered.  To attain \r\nThe highth and depth of thy eternal ways \r\nAll human thoughts come short, Supreme of things! \r\nThou in thyself art perfect, and in thee \r\nIs no deficience found:  Not so is Man, \r\nBut in degree; the cause of his desire \r\nBy conversation with his like to help \r\nOr solace his defects.  No need that thou \r\nShouldst propagate, already Infinite; \r\nAnd through all numbers absolute, though One: \r\nBut Man by number is to manifest \r\nHis single imperfection, and beget \r\nLike of his like, his image multiplied, \r\nIn unity defective; which requires \r\nCollateral love, and dearest amity. \r\nThou in thy secresy although alone, \r\nBest with thyself accompanied, seekest not \r\nSocial communication; yet, so pleased, \r\nCanst raise thy creature to what highth thou wilt \r\nOf union or communion, deified: \r\nI, by conversing, cannot these erect \r\nFrom prone; nor in their ways complacence find. \r\nThus I emboldened spake, and freedom used \r\nPermissive, and acceptance found; which gained \r\nThis answer from the gracious Voice Divine. \r\nThus far to try thee, Adam, I was pleased; \r\nAnd find thee knowing, not of beasts alone, \r\nWhich thou hast rightly named, but of thyself; \r\nExpressing well the spirit within thee free, \r\nMy image, not imparted to the brute; \r\nWhose fellowship therefore unmeet for thee \r\nGood reason was thou freely shouldst dislike; \r\nAnd be so minded still:  I, ere thou spakest, \r\nKnew it not good for Man to be alone; \r\nAnd no such company as then thou sawest \r\nIntended thee; for trial only brought, \r\nTo see how thou couldest judge of fit and meet: \r\nWhat next I bring shall please thee, be assured, \r\nThy likeness, thy fit help, thy other self, \r\nThy wish exactly to thy heart's desire. \r\nHe ended, or I heard no more; for now \r\nMy earthly by his heavenly overpowered, \r\nWhich it had long stood under, strained to the highth \r\nIn that celestial colloquy sublime, \r\nAs with an object that excels the sense \r\nDazzled and spent, sunk down; and sought repair \r\nOf sleep, which instantly fell on me, called \r\nBy Nature as in aid, and closed mine eyes. \r\nMine eyes he closed, but open left the cell \r\nOf fancy, my internal sight; by which, \r\nAbstract as in a trance, methought I saw, \r\nThough sleeping, where I lay, and saw the shape \r\nStill glorious before whom awake I stood: \r\nWho stooping opened my left side, and took \r\nFrom thence a rib, with cordial spirits warm, \r\nAnd life-blood streaming fresh; wide was the wound, \r\nBut suddenly with flesh filled up and healed: \r\nThe rib he formed and fashioned with his hands; \r\nUnder his forming hands a creature grew, \r\nMan-like, but different sex; so lovely fair, \r\nThat what seemed fair in all the world, seemed now \r\nMean, or in her summed up, in her contained \r\nAnd in her looks; which from that time infused \r\nSweetness into my heart, unfelt before, \r\nAnd into all things from her air inspired \r\nThe spirit of love and amorous delight. \r\nShe disappeared, and left me dark; I waked \r\nTo find her, or for ever to deplore \r\nHer loss, and other pleasures all abjure: \r\nWhen out of hope, behold her, not far off, \r\nSuch as I saw her in my dream, adorned \r\nWith what all Earth or Heaven could bestow \r\nTo make her amiable:  On she came, \r\nLed by her heavenly Maker, though unseen, \r\nAnd guided by his voice; nor uninformed \r\nOf nuptial sanctity, and marriage rites: \r\nGrace was in all her steps, Heaven in her eye, \r\nIn every gesture dignity and love. \r\nI, overjoyed, could not forbear aloud. \r\nThis turn hath made amends; thou hast fulfilled \r\nThy words, Creator bounteous and benign, \r\nGiver of all things fair! but fairest this \r\nOf all thy gifts! nor enviest.  I now see \r\nBone of my bone, flesh of my flesh, myself \r\nBefore me:  Woman is her name;of Man \r\nExtracted: for this cause he shall forego \r\nFather and mother, and to his wife adhere; \r\nAnd they shall be one flesh, one heart, one soul. \r\nShe heard me thus; and though divinely brought, \r\nYet innocence, and virgin modesty, \r\nHer virtue, and the conscience of her worth, \r\nThat would be wooed, and not unsought be won, \r\nNot obvious, not obtrusive, but, retired, \r\nThe more desirable; or, to say all, \r\nNature herself, though pure of sinful thought, \r\nWrought in her so, that, seeing me, she turned: \r\nI followed her; she what was honour knew, \r\nAnd with obsequious majesty approved \r\nMy pleaded reason.  To the nuptial bower \r\nI led her blushing like the morn: All Heaven, \r\nAnd happy constellations, on that hour \r\nShed their selectest influence; the Earth \r\nGave sign of gratulation, and each hill; \r\nJoyous the birds; fresh gales and gentle airs \r\nWhispered it to the woods, and from their wings \r\nFlung rose, flung odours from the spicy shrub, \r\nDisporting, till the amorous bird of night \r\nSung spousal, and bid haste the evening-star \r\nOn his hill top, to light the bridal lamp. \r\nThus have I told thee all my state, and brought \r\nMy story to the sum of earthly bliss, \r\nWhich I enjoy; and must confess to find \r\nIn all things else delight indeed, but such \r\nAs, used or not, works in the mind no change, \r\nNor vehement desire; these delicacies \r\nI mean of taste, sight, smell, herbs, fruits, and flowers, \r\nWalks, and the melody of birds: but here \r\nFar otherwise, transported I behold, \r\nTransported touch; here passion first I felt, \r\nCommotion strange! in all enjoyments else \r\nSuperiour and unmoved; here only weak \r\nAgainst the charm of Beauty's powerful glance. \r\nOr Nature failed in me, and left some part \r\nNot proof enough such object to sustain; \r\nOr, from my side subducting, took perhaps \r\nMore than enough; at least on her bestowed \r\nToo much of ornament, in outward show \r\nElaborate, of inward less exact. \r\nFor well I understand in the prime end \r\nOf Nature her the inferiour, in the mind \r\nAnd inward faculties, which most excel; \r\nIn outward also her resembling less \r\nHis image who made both, and less expressing \r\nThe character of that dominion given \r\nO'er other creatures:  Yet when I approach \r\nHer loveliness, so absolute she seems \r\nAnd in herself complete, so well to know \r\nHer own, that what she wills to do or say, \r\nSeems wisest, virtuousest, discreetest, best: \r\nAll higher knowledge in her presence falls \r\nDegraded;  Wisdom in discourse with her \r\nLoses discountenanced, and like Folly shows; \r\nAuthority and Reason on her wait, \r\nAs one intended first, not after made \r\nOccasionally; and, to consummate all, \r\nGreatness of mind and Nobleness their seat \r\nBuild in her loveliest, and create an awe \r\nAbout her, as a guard angelick placed. \r\nTo whom the Angel with contracted brow. \r\nAccuse not Nature, she hath done her part; \r\nDo thou but thine; and be not diffident \r\nOf Wisdom; she deserts thee not, if thou \r\nDismiss not her, when most thou needest her nigh, \r\nBy attributing overmuch to things \r\nLess excellent, as thou thyself perceivest. \r\nFor, what admirest thou, what transports thee so, \r\nAn outside? fair, no doubt, and worthy well \r\nThy cherishing, thy honouring, and thy love; \r\nNot thy subjection:  Weigh with her thyself; \r\nThen value:  Oft-times nothing profits more \r\nThan self-esteem, grounded on just and right \r\nWell managed; of that skill the more thou knowest, \r\nThe more she will acknowledge thee her head, \r\nAnd to realities yield all her shows: \r\nMade so adorn for thy delight the more, \r\nSo awful, that with honour thou mayest love \r\nThy mate, who sees when thou art seen least wise. \r\nBut if the sense of touch, whereby mankind \r\nIs propagated, seem such dear delight \r\nBeyond all other; think the same vouchsafed \r\nTo cattle and each beast; which would not be \r\nTo them made common and divulged, if aught \r\nTherein enjoyed were worthy to subdue \r\nThe soul of man, or passion in him move. \r\nWhat higher in her society thou findest \r\nAttractive, human, rational, love still; \r\nIn loving thou dost well, in passion not, \r\nWherein true love consists not:  Love refines \r\nThe thoughts, and heart enlarges; hath his seat \r\nIn reason, and is judicious; is the scale \r\nBy which to heavenly love thou mayest ascend, \r\nNot sunk in carnal pleasure; for which cause, \r\nAmong the beasts no mate for thee was found. \r\nTo whom thus, half abashed, Adam replied. \r\nNeither her outside formed so fair, nor aught \r\nIn procreation common to all kinds, \r\n(Though higher of the genial bed by far, \r\nAnd with mysterious reverence I deem,) \r\nSo much delights me, as those graceful acts, \r\nThose thousand decencies, that daily flow \r\nFrom all her words and actions mixed with love \r\nAnd sweet compliance, which declare unfeigned \r\nUnion of mind, or in us both one soul; \r\nHarmony to behold in wedded pair \r\nMore grateful than harmonious sound to the ear. \r\nYet these subject not; I to thee disclose \r\nWhat inward thence I feel, not therefore foiled, \r\nWho meet with various objects, from the sense \r\nVariously representing; yet, still free, \r\nApprove the best, and follow what I approve. \r\nTo love, thou blamest me not; for Love, thou sayest, \r\nLeads up to Heaven, is both the way and guide; \r\nBear with me then, if lawful what I ask: \r\nLove not the heavenly Spirits, and how their love \r\nExpress they? by looks only? or do they mix \r\nIrradiance, virtual or immediate touch? \r\nTo whom the Angel, with a smile that glowed \r\nCelestial rosy red, Love's proper hue, \r\nAnswered.  Let it suffice thee that thou knowest \r\nUs happy, and without love no happiness. \r\nWhatever pure thou in the body enjoyest, \r\n(And pure thou wert created) we enjoy \r\nIn eminence; and obstacle find none \r\nOf membrane, joint, or limb, exclusive bars; \r\nEasier than air with air, if Spirits embrace, \r\nTotal they mix, union of pure with pure \r\nDesiring, nor restrained conveyance need, \r\nAs flesh to mix with flesh, or soul with soul. \r\nBut I can now no more; the parting sun \r\nBeyond the Earth's green Cape and verdant Isles \r\nHesperian sets, my signal to depart. \r\nBe strong, live happy, and love!  But, first of all, \r\nHim, whom to love is to obey, and keep \r\nHis great command; take heed lest passion sway \r\nThy judgement to do aught, which else free will \r\nWould not admit: thine, and of all thy sons, \r\nThe weal or woe in thee is placed; beware! \r\nI in thy persevering shall rejoice, \r\nAnd all the Blest:  Stand fast;to stand or fall \r\nFree in thine own arbitrement it lies. \r\nPerfect within, no outward aid require; \r\nAnd all temptation to transgress repel. \r\nSo saying, he arose; whom Adam thus \r\nFollowed with benediction.  Since to part, \r\nGo, heavenly guest, ethereal Messenger, \r\nSent from whose sovran goodness I adore! \r\nGentle to me and affable hath been \r\nThy condescension, and shall be honoured ever \r\nWith grateful memory:  Thou to mankind \r\nBe good and friendly still, and oft return! \r\nSo parted they; the Angel up to Heaven \r\nFrom the thick shade, and Adam to his bower. \r\n \r\n \r\n \r\nBook IX                                                          \r\n \r\n \r\nNo more of talk where God or Angel guest \r\nWith Man, as with his friend, familiar us'd, \r\nTo sit indulgent, and with him partake \r\nRural repast; permitting him the while \r\nVenial discourse unblam'd. I now must change \r\nThose notes to tragick; foul distrust, and breach \r\nDisloyal on the part of Man, revolt, \r\nAnd disobedience: on the part of Heaven \r\nNow alienated, distance and distaste, \r\nAnger and just rebuke, and judgement given, \r\nThat brought into this world a world of woe, \r\nSin and her shadow Death, and Misery \r\nDeath's harbinger: Sad talk!yet argument \r\nNot less but more heroick than the wrath \r\nOf stern Achilles on his foe pursued \r\nThrice fugitive about Troy wall; or rage \r\nOf Turnus for Lavinia disespous'd; \r\nOr Neptune's ire, or Juno's, that so long \r\nPerplexed the Greek, and Cytherea's son:                         \r\n \r\n   00482129  \r\nIf answerable style I can obtain \r\nOf my celestial patroness, who deigns \r\nHer nightly visitation unimplor'd, \r\nAnd dictates to me slumbering; or inspires \r\nEasy my unpremeditated verse: \r\nSince first this subject for heroick song \r\nPleas'd me long choosing, and beginning late; \r\nNot sedulous by nature to indite \r\nWars, hitherto the only argument \r\nHeroick deem'd chief mastery to dissect \r\nWith long and tedious havock fabled knights \r\nIn battles feign'd; the better fortitude \r\nOf patience and heroick martyrdom \r\nUnsung; or to describe races and games, \r\nOr tilting furniture, imblazon'd shields, \r\nImpresses quaint, caparisons and steeds, \r\nBases and tinsel trappings, gorgeous knights \r\nAt joust and tournament; then marshall'd feast \r\nServ'd up in hall with sewers and seneshals; \r\nThe skill of artifice or office mean, \r\nNot that which justly gives heroick name \r\nTo person, or to poem.  Me, of these \r\nNor skill'd nor studious, higher argument \r\nRemains; sufficient of itself to raise \r\nThat name, unless an age too late, or cold \r\nClimate, or years, damp my intended wing \r\nDepress'd; and much they may, if all be mine, \r\nNot hers, who brings it nightly to my ear. \r\nThe sun was sunk, and after him the star \r\nOf Hesperus, whose office is to bring \r\nTwilight upon the earth, short arbiter \r\n\"twixt day and night, and now from end to end \r\nNight's hemisphere had veil'd the horizon round: \r\nWhen satan, who late fled before the threats \r\nOf Gabriel out of Eden, now improv'd \r\nIn meditated fraud and malice, bent \r\nOn Man's destruction, maugre what might hap \r\nOf heavier on himself, fearless returned \r\nFrom compassing the earth; cautious of day, \r\nSince Uriel, regent of the sun, descried \r\nHis entrance, and foreworned the Cherubim \r\nThat kept their watch; thence full of anguish driven, \r\nThe space of seven continued nights he rode \r\nWith darkness; thrice the equinoctial line \r\nHe circled; four times crossed the car of night \r\nFrom pole to pole, traversing each colure; \r\nOn the eighth returned; and, on the coast averse \r\nFrom entrance or Cherubick watch, by stealth \r\nFound unsuspected way.  There was a place, \r\nNow not, though sin, not time, first wrought the change, \r\nWhere Tigris, at the foot of Paradise, \r\nInto a gulf shot under ground, till part \r\nRose up a fountain by the tree of life: \r\nIn with the river sunk, and with it rose \r\nSatan, involved in rising mist; then sought \r\nWhere to lie hid; sea he had searched, and land, \r\nFrom Eden over Pontus and the pool \r\nMaeotis, up beyond the river Ob; \r\nDownward as far antarctick; and in length, \r\nWest from Orontes to the ocean barred \r\nAt Darien ; thence to the land where flows \r\nGanges and Indus: Thus the orb he roamed \r\nWith narrow search; and with inspection deep \r\nConsidered every creature, which of all \r\nMost opportune might serve his wiles; and found \r\nThe Serpent subtlest beast of all the field. \r\nHim after long debate, irresolute \r\nOf thoughts revolved, his final sentence chose \r\nFit vessel, fittest imp of fraud, in whom \r\nTo enter, and his dark suggestions hide \r\nFrom sharpest sight: for, in the wily snake \r\nWhatever sleights, none would suspicious mark, \r\nAs from his wit and native subtlety \r\nProceeding; which, in other beasts observed, \r\nDoubt might beget of diabolick power \r\nActive within, beyond the sense of brute. \r\nThus he resolved, but first from inward grief \r\nHis bursting passion into plaints thus poured. \r\nMore justly, seat worthier of Gods, as built \r\nWith second thoughts, reforming what was old! \r\nO Earth, how like to Heaven, if not preferred \r\nFor what God, after better, worse would build? \r\nTerrestrial Heaven, danced round by other Heavens \r\nThat shine, yet bear their bright officious lamps, \r\nLight above light, for thee alone, as seems, \r\nIn thee concentring all their precious beams \r\nOf sacred influence!  As God in Heaven \r\nIs center, yet extends to all; so thou, \r\nCentring, receivest from all those orbs: in thee, \r\nNot in themselves, all their known virtue appears \r\nProductive in herb, plant, and nobler birth \r\nOf creatures animate with gradual life \r\nOf growth, sense, reason, all summed up in Man. \r\nWith what delight could I have walked thee round, \r\nIf I could joy in aught, sweet interchange \r\nOf hill, and valley, rivers, woods, and plains, \r\nNow land, now sea and shores with forest crowned, \r\nRocks, dens, and caves!  But I in none of these \r\nFind place or refuge; and the more I see \r\nPleasures about me, so much more I feel \r\nTorment within me, as from the hateful siege \r\nOf contraries: all good to me becomes \r\nBane, and in Heaven much worse would be my state. \r\nBut neither here seek I, no nor in Heaven \r\nTo dwell, unless by mastering Heaven's Supreme; \r\nNor hope to be myself less miserable \r\nBy what I seek, but others to make such \r\nAs I, though thereby worse to me redound: \r\nFor only in destroying I find ease \r\nTo my relentless thoughts; and, him destroyed, \r\nOr won to what may work his utter loss, \r\nFor whom all this was made, all this will soon \r\nFollow, as to him linked in weal or woe; \r\nIn woe then; that destruction wide may range: \r\nTo me shall be the glory sole among \r\nThe infernal Powers, in one day to have marred \r\nWhat he, Almighty styled, six nights and days \r\nContinued making; and who knows how long \r\nBefore had been contriving? though perhaps \r\nNot longer than since I, in one night, freed \r\nFrom servitude inglorious well nigh half \r\nThe angelick name, and thinner left the throng \r\nOf his adorers: He, to be avenged, \r\nAnd to repair his numbers thus impaired, \r\nWhether such virtue spent of old now failed \r\nMore Angels to create, if they at least \r\nAre his created, or, to spite us more, \r\nDetermined to advance into our room \r\nA creature formed of earth, and him endow, \r\nExalted from so base original, \r\nWith heavenly spoils, our spoils: What he decreed, \r\nHe effected; Man he made, and for him built \r\nMagnificent this world, and earth his seat, \r\nHim lord pronounced; and, O indignity! \r\nSubjected to his service angel-wings, \r\nAnd flaming ministers to watch and tend \r\nTheir earthly charge: Of these the vigilance \r\nI dread; and, to elude, thus wrapt in mist \r\nOf midnight vapour glide obscure, and pry \r\nIn every bush and brake, where hap may find \r\nThe serpent sleeping; in whose mazy folds \r\nTo hide me, and the dark intent I bring. \r\nO foul descent! that I, who erst contended \r\nWith Gods to sit the highest, am now constrained \r\nInto a beast; and, mixed with bestial slime, \r\nThis essence to incarnate and imbrute, \r\nThat to the highth of Deity aspired! \r\nBut what will not ambition and revenge \r\nDescend to?  Who aspires, must down as low \r\nAs high he soared; obnoxious, first or last, \r\nTo basest things.  Revenge, at first though sweet, \r\nBitter ere long, back on itself recoils: \r\nLet it; I reck not, so it light well aimed, \r\nSince higher I fall short, on him who next \r\nProvokes my envy, this new favourite \r\nOf Heaven, this man of clay, son of despite, \r\nWhom, us the more to spite, his Maker raised \r\nFrom dust: Spite then with spite is best repaid. \r\nSo saying, through each thicket dank or dry, \r\nLike a black mist low-creeping, he held on \r\nHis midnight-search, where soonest he might find \r\nThe serpent; him fast-sleeping soon he found \r\nIn labyrinth of many a round self-rolled, \r\nHis head the midst, well stored with subtile wiles: \r\nNot yet in horrid shade or dismal den, \r\nNor nocent yet; but, on the grassy herb, \r\nFearless unfeared he slept: in at his mouth \r\nThe Devil entered; and his brutal sense, \r\nIn heart or head, possessing, soon inspired \r\nWith act intelligential; but his sleep \r\nDisturbed not, waiting close the approach of morn. \r\nNow, when as sacred light began to dawn \r\nIn Eden on the humid flowers, that breathed \r\nTheir morning incense, when all things, that breathe, \r\nFrom the Earth's great altar send up silent praise \r\nTo the Creator, and his nostrils fill \r\nWith grateful smell, forth came the human pair, \r\nAnd joined their vocal worship to the quire \r\nOf creatures wanting voice; that done, partake \r\nThe season prime for sweetest scents and airs: \r\nThen commune, how that day they best may ply \r\nTheir growing work: for much their work out-grew \r\nThe hands' dispatch of two gardening so wide, \r\nAnd Eve first to her husband thus began. \r\nAdam, well may we labour still to dress \r\nThis garden, still to tend plant, herb, and flower, \r\nOur pleasant task enjoined; but, till more hands \r\nAid us, the work under our labour grows, \r\nLuxurious by restraint; what we by day \r\nLop overgrown, or prune, or prop, or bind, \r\nOne night or two with wanton growth derides \r\nTending to wild.  Thou therefore now advise, \r\nOr bear what to my mind first thoughts present: \r\nLet us divide our labours; thou, where choice \r\nLeads thee, or where most needs, whether to wind \r\nThe woodbine round this arbour, or direct \r\nThe clasping ivy where to climb; while I, \r\nIn yonder spring of roses intermixed \r\nWith myrtle, find what to redress till noon: \r\nFor, while so near each other thus all day \r\nOur task we choose, what wonder if so near \r\nLooks intervene and smiles, or object new \r\nCasual discourse draw on; which intermits \r\nOur day's work, brought to little, though begun \r\nEarly, and the hour of supper comes unearned? \r\nTo whom mild answer Adam thus returned. \r\nSole Eve, associate sole, to me beyond \r\nCompare above all living creatures dear! \r\nWell hast thou motioned, well thy thoughts employed, \r\nHow we might best fulfil the work which here \r\nGod hath assigned us; nor of me shalt pass \r\nUnpraised: for nothing lovelier can be found \r\nIn woman, than to study houshold good, \r\nAnd good works in her husband to promote. \r\nYet not so strictly hath our Lord imposed \r\nLabour, as to debar us when we need \r\nRefreshment, whether food, or talk between, \r\nFood of the mind, or this sweet intercourse \r\nOf looks and smiles; for smiles from reason flow, \r\nTo brute denied, and are of love the food; \r\nLove, not the lowest end of human life. \r\nFor not to irksome toil, but to delight, \r\nHe made us, and delight to reason joined. \r\nThese paths and bowers doubt not but our joint hands \r\nWill keep from wilderness with ease, as wide \r\nAs we need walk, till younger hands ere long \r\nAssist us; But, if much converse perhaps \r\nThee satiate, to short absence I could yield: \r\nFor solitude sometimes is best society, \r\nAnd short retirement urges sweet return. \r\nBut other doubt possesses me, lest harm \r\nBefall thee severed from me; for thou knowest \r\nWhat hath been warned us, what malicious foe \r\nEnvying our happiness, and of his own \r\nDespairing, seeks to work us woe and shame \r\nBy sly assault; and somewhere nigh at hand \r\nWatches, no doubt, with greedy hope to find \r\nHis wish and best advantage, us asunder; \r\nHopeless to circumvent us joined, where each \r\nTo other speedy aid might lend at need: \r\nWhether his first design be to withdraw \r\nOur fealty from God, or to disturb \r\nConjugal love, than which perhaps no bliss \r\nEnjoyed by us excites his envy more; \r\nOr this, or worse, leave not the faithful side \r\nThat gave thee being, still shades thee, and protects. \r\nThe wife, where danger or dishonour lurks, \r\nSafest and seemliest by her husband stays, \r\nWho guards her, or with her the worst endures. \r\nTo whom the virgin majesty of Eve, \r\nAs one who loves, and some unkindness meets, \r\nWith sweet austere composure thus replied. \r\nOffspring of Heaven and Earth, and all Earth's Lord! \r\nThat such an enemy we have, who seeks \r\nOur ruin, both by thee informed I learn, \r\nAnd from the parting Angel over-heard, \r\nAs in a shady nook I stood behind, \r\nJust then returned at shut of evening flowers. \r\nBut, that thou shouldst my firmness therefore doubt \r\nTo God or thee, because we have a foe \r\nMay tempt it, I expected not to hear. \r\nHis violence thou fearest not, being such \r\nAs we, not capable of death or pain, \r\nCan either not receive, or can repel. \r\nHis fraud is then thy fear; which plain infers \r\nThy equal fear, that my firm faith and love \r\nCan by his fraud be shaken or seduced; \r\nThoughts, which how found they harbour in thy breast, \r\nAdam, mis-thought of her to thee so dear? \r\nTo whom with healing words Adam replied. \r\nDaughter of God and Man, immortal Eve! \r\nFor such thou art; from sin and blame entire: \r\nNot diffident of thee do I dissuade \r\nThy absence from my sight, but to avoid \r\nThe attempt itself, intended by our foe. \r\nFor he who tempts, though in vain, at least asperses \r\nThe tempted with dishonour foul; supposed \r\nNot incorruptible of faith, not proof \r\nAgainst temptation: Thou thyself with scorn \r\nAnd anger wouldst resent the offered wrong, \r\nThough ineffectual found: misdeem not then, \r\nIf such affront I labour to avert \r\nFrom thee alone, which on us both at once \r\nThe enemy, though bold, will hardly dare; \r\nOr daring, first on me the assault shall light. \r\nNor thou his malice and false guile contemn; \r\nSubtle he needs must be, who could seduce \r\nAngels; nor think superfluous other's aid. \r\nI, from the influence of thy looks, receive \r\nAccess in every virtue; in thy sight \r\nMore wise, more watchful, stronger, if need were \r\nOf outward strength; while shame, thou looking on, \r\nShame to be overcome or over-reached, \r\nWould utmost vigour raise, and raised unite. \r\nWhy shouldst not thou like sense within thee feel \r\nWhen I am present, and thy trial choose \r\nWith me, best witness of thy virtue tried? \r\nSo spake domestick Adam in his care \r\nAnd matrimonial love; but Eve, who thought \r\nLess attributed to her faith sincere, \r\nThus her reply with accent sweet renewed. \r\nIf this be our condition, thus to dwell \r\nIn narrow circuit straitened by a foe, \r\nSubtle or violent, we not endued \r\nSingle with like defence, wherever met; \r\nHow are we happy, still in fear of harm? \r\nBut harm precedes not sin: only our foe, \r\nTempting, affronts us with his foul esteem \r\nOf our integrity: his foul esteem \r\nSticks no dishonour on our front, but turns \r\nFoul on himself; then wherefore shunned or feared \r\nBy us? who rather double honour gain \r\nFrom his surmise proved false; find peace within, \r\nFavour from Heaven, our witness, from the event. \r\nAnd what is faith, love, virtue, unassayed \r\nAlone, without exteriour help sustained? \r\nLet us not then suspect our happy state \r\nLeft so imperfect by the Maker wise, \r\nAs not secure to single or combined. \r\nFrail is our happiness, if this be so, \r\nAnd Eden were no Eden, thus exposed. \r\nTo whom thus Adam fervently replied. \r\nO Woman, best are all things as the will \r\nOf God ordained them: His creating hand \r\nNothing imperfect or deficient left \r\nOf all that he created, much less Man, \r\nOr aught that might his happy state secure, \r\nSecure from outward force; within himself \r\nThe danger lies, yet lies within his power: \r\nAgainst his will he can receive no harm. \r\nBut God left free the will; for what obeys \r\nReason, is free; and Reason he made right, \r\nBut bid her well be ware, and still erect; \r\nLest, by some fair-appearing good surprised, \r\nShe dictate false; and mis-inform the will \r\nTo do what God expressly hath forbid. \r\nNot then mistrust, but tender love, enjoins, \r\nThat I should mind thee oft; and mind thou me. \r\nFirm we subsist, yet possible to swerve; \r\nSince Reason not impossibly may meet \r\nSome specious object by the foe suborned, \r\nAnd fall into deception unaware, \r\nNot keeping strictest watch, as she was warned. \r\nSeek not temptation then, which to avoid \r\nWere better, and most likely if from me \r\nThou sever not: Trial will come unsought. \r\nWouldst thou approve thy constancy, approve \r\nFirst thy obedience; the other who can know, \r\nNot seeing thee attempted, who attest? \r\nBut, if thou think, trial unsought may find \r\nUs both securer than thus warned thou seemest, \r\nGo; for thy stay, not free, absents thee more; \r\nGo in thy native innocence, rely \r\nOn what thou hast of virtue; summon all! \r\nFor God towards thee hath done his part, do thine. \r\nSo spake the patriarch of mankind; but Eve \r\nPersisted; yet submiss, though last, replied. \r\nWith thy permission then, and thus forewarned \r\nChiefly by what thy own last reasoning words \r\nTouched only; that our trial, when least sought, \r\nMay find us both perhaps far less prepared, \r\nThe willinger I go, nor much expect \r\nA foe so proud will first the weaker seek; \r\nSo bent, the more shall shame him his repulse. \r\nThus saying, from her husband's hand her hand \r\nSoft she withdrew; and, like a Wood-Nymph light, \r\nOread or Dryad, or of Delia's train, \r\nBetook her to the groves; but Delia's self \r\nIn gait surpassed, and Goddess-like deport, \r\nThough not as she with bow and quiver armed, \r\nBut with such gardening tools as Art yet rude, \r\nGuiltless of fire, had formed, or Angels brought. \r\nTo Pales, or Pomona, thus adorned, \r\nLikest she seemed, Pomona when she fled \r\nVertumnus, or to Ceres in her prime, \r\nYet virgin of Proserpina from Jove. \r\nHer long with ardent look his eye pursued \r\nDelighted, but desiring more her stay. \r\nOft he to her his charge of quick return \r\nRepeated; she to him as oft engaged \r\nTo be returned by noon amid the bower, \r\nAnd all things in best order to invite \r\nNoontide repast, or afternoon's repose. \r\nO much deceived, much failing, hapless Eve, \r\nOf thy presumed return! event perverse! \r\nThou never from that hour in Paradise \r\nFoundst either sweet repast, or sound repose; \r\nSuch ambush, hid among sweet flowers and shades, \r\nWaited with hellish rancour imminent \r\nTo intercept thy way, or send thee back \r\nDespoiled of innocence, of faith, of bliss! \r\nFor now, and since first break of dawn, the Fiend, \r\nMere serpent in appearance, forth was come; \r\nAnd on his quest, where likeliest he might find \r\nThe only two of mankind, but in them \r\nThe whole included race, his purposed prey. \r\nIn bower and field he sought, where any tuft \r\nOf grove or garden-plot more pleasant lay, \r\nTheir tendance, or plantation for delight; \r\nBy fountain or by shady rivulet \r\nHe sought them both, but wished his hap might find \r\nEve separate; he wished, but not with hope \r\nOf what so seldom chanced; when to his wish, \r\nBeyond his hope, Eve separate he spies, \r\nVeiled in a cloud of fragrance, where she stood, \r\nHalf spied, so thick the roses blushing round \r\nAbout her glowed, oft stooping to support \r\nEach flower of slender stalk, whose head, though gay \r\nCarnation, purple, azure, or specked with gold, \r\nHung drooping unsustained; them she upstays \r\nGently with myrtle band, mindless the while \r\nHerself, though fairest unsupported flower, \r\nFrom her best prop so far, and storm so nigh. \r\nNearer he drew, and many a walk traversed \r\nOf stateliest covert, cedar, pine, or palm; \r\nThen voluble and bold, now hid, now seen, \r\nAmong thick-woven arborets, and flowers \r\nImbordered on each bank, the hand of Eve: \r\nSpot more delicious than those gardens feigned \r\nOr of revived Adonis, or renowned \r\nAlcinous, host of old Laertes' son; \r\nOr that, not mystick, where the sapient king \r\nHeld dalliance with his fair Egyptian spouse. \r\nMuch he the place admired, the person more. \r\nAs one who long in populous city pent, \r\nWhere houses thick and sewers annoy the air, \r\nForth issuing on a summer's morn, to breathe \r\nAmong the pleasant villages and farms \r\nAdjoined, from each thing met conceives delight; \r\nThe smell of grain, or tedded grass, or kine, \r\nOr dairy, each rural sight, each rural sound; \r\nIf chance, with nymph-like step, fair virgin pass, \r\nWhat pleasing seemed, for her now pleases more; \r\nShe most, and in her look sums all delight: \r\nSuch pleasure took the Serpent to behold \r\nThis flowery plat, the sweet recess of Eve \r\nThus early, thus alone: Her heavenly form \r\nAngelick, but more soft, and feminine, \r\nHer graceful innocence, her every air \r\nOf gesture, or least action, overawed \r\nHis malice, and with rapine sweet bereaved \r\nHis fierceness of the fierce intent it brought: \r\nThat space the Evil-one abstracted stood \r\nFrom his own evil, and for the time remained \r\nStupidly good; of enmity disarmed, \r\nOf guile, of hate, of envy, of revenge: \r\nBut the hot Hell that always in him burns, \r\nThough in mid Heaven, soon ended his delight, \r\nAnd tortures him now more, the more he sees \r\nOf pleasure, not for him ordained: then soon \r\nFierce hate he recollects, and all his thoughts \r\nOf mischief, gratulating, thus excites. \r\nThoughts, whither have ye led me! with what sweet \r\nCompulsion thus transported, to forget \r\nWhat hither brought us! hate, not love;nor hope \r\nOf Paradise for Hell, hope here to taste \r\nOf pleasure; but all pleasure to destroy, \r\nSave what is in destroying; other joy \r\nTo me is lost.  Then, let me not let pass \r\nOccasion which now smiles; behold alone \r\nThe woman, opportune to all attempts, \r\nHer husband, for I view far round, not nigh, \r\nWhose higher intellectual more I shun, \r\nAnd strength, of courage haughty, and of limb \r\nHeroick built, though of terrestrial mould; \r\nFoe not informidable! exempt from wound, \r\nI not; so much hath Hell debased, and pain \r\nEnfeebled me, to what I was in Heaven. \r\nShe fair, divinely fair, fit love for Gods! \r\nNot terrible, though terrour be in love \r\nAnd beauty, not approached by stronger hate, \r\nHate stronger, under show of love well feigned; \r\nThe way which to her ruin now I tend. \r\nSo spake the enemy of mankind, enclosed \r\nIn serpent, inmate bad! and toward Eve \r\nAddressed his way: not with indented wave, \r\nProne on the ground, as since; but on his rear, \r\nCircular base of rising folds, that towered \r\nFold above fold, a surging maze! his head \r\nCrested aloft, and carbuncle his eyes; \r\nWith burnished neck of verdant gold, erect \r\nAmidst his circling spires, that on the grass \r\nFloated redundant: pleasing was his shape \r\nAnd lovely; never since of serpent-kind \r\nLovelier, not those that in Illyria changed, \r\nHermione and Cadmus, or the god \r\nIn Epidaurus; nor to which transformed \r\nAmmonian Jove, or Capitoline, was seen; \r\nHe with Olympias; this with her who bore \r\nScipio, the highth of Rome.  With tract oblique \r\nAt first, as one who sought access, but feared \r\nTo interrupt, side-long he works his way. \r\nAs when a ship, by skilful steersmen wrought \r\nNigh river's mouth or foreland, where the wind \r\nVeers oft, as oft so steers, and shifts her sail: \r\nSo varied he, and of his tortuous train \r\nCurled many a wanton wreath in sight of Eve, \r\nTo lure her eye; she, busied, heard the sound \r\nOf rusling leaves, but minded not, as used \r\nTo such disport before her through the field, \r\nFrom every beast; more duteous at her call, \r\nThan at Circean call the herd disguised. \r\nHe, bolder now, uncalled before her stood, \r\nBut as in gaze admiring: oft he bowed \r\nHis turret crest, and sleek enamelled neck, \r\nFawning; and licked the ground whereon she trod. \r\nHis gentle dumb expression turned at length \r\nThe eye of Eve to mark his play; he, glad \r\nOf her attention gained, with serpent-tongue \r\nOrganick, or impulse of vocal air, \r\nHis fraudulent temptation thus began. \r\nWonder not, sovran Mistress, if perhaps \r\nThou canst, who art sole wonder! much less arm \r\nThy looks, the Heaven of mildness, with disdain, \r\nDispleased that I approach thee thus, and gaze \r\nInsatiate; I thus single;nor have feared \r\nThy awful brow, more awful thus retired. \r\nFairest resemblance of thy Maker fair, \r\nThee all things living gaze on, all things thine \r\nBy gift, and thy celestial beauty adore \r\nWith ravishment beheld! there best beheld, \r\nWhere universally admired; but here \r\nIn this enclosure wild, these beasts among, \r\nBeholders rude, and shallow to discern \r\nHalf what in thee is fair, one man except, \r\nWho sees thee? and what is one? who should be seen \r\nA Goddess among Gods, adored and served \r\nBy Angels numberless, thy daily train. \r\nSo glozed the Tempter, and his proem tuned: \r\nInto the heart of Eve his words made way, \r\nThough at the voice much marvelling; at length, \r\nNot unamazed, she thus in answer spake. \r\nWhat may this mean? language of man pronounced \r\nBy tongue of brute, and human sense expressed? \r\nThe first, at least, of these I thought denied \r\nTo beasts; whom God, on their creation-day, \r\nCreated mute to all articulate sound: \r\nThe latter I demur; for in their looks \r\nMuch reason, and in their actions, oft appears. \r\nThee, Serpent, subtlest beast of all the field \r\nI knew, but not with human voice endued; \r\nRedouble then this miracle, and say, \r\nHow camest thou speakable of mute, and how \r\nTo me so friendly grown above the rest \r\nOf brutal kind, that daily are in sight? \r\nSay, for such wonder claims attention due. \r\nTo whom the guileful Tempter thus replied. \r\nEmpress of this fair world, resplendent Eve! \r\nEasy to me it is to tell thee all \r\nWhat thou commandest; and right thou shouldst be obeyed: \r\nI was at first as other beasts that graze \r\nThe trodden herb, of abject thoughts and low, \r\nAs was my food; nor aught but food discerned \r\nOr sex, and apprehended nothing high: \r\nTill, on a day roving the field, I chanced \r\nA goodly tree far distant to behold \r\nLoaden with fruit of fairest colours mixed, \r\nRuddy and gold: I nearer drew to gaze; \r\nWhen from the boughs a savoury odour blown, \r\nGrateful to appetite, more pleased my sense \r\nThan smell of sweetest fennel, or the teats \r\nOf ewe or goat dropping with milk at even, \r\nUnsucked of lamb or kid, that tend their play. \r\nTo satisfy the sharp desire I had \r\nOf tasting those fair apples, I resolved \r\nNot to defer; hunger and thirst at once, \r\nPowerful persuaders, quickened at the scent \r\nOf that alluring fruit, urged me so keen. \r\nAbout the mossy trunk I wound me soon; \r\nFor, high from ground, the branches would require \r\nThy utmost reach or Adam's: Round the tree \r\nAll other beasts that saw, with like desire \r\nLonging and envying stood, but could not reach. \r\nAmid the tree now got, where plenty hung \r\nTempting so nigh, to pluck and eat my fill \r\nI spared not; for, such pleasure till that hour, \r\nAt feed or fountain, never had I found. \r\nSated at length, ere long I might perceive \r\nStrange alteration in me, to degree \r\nOf reason in my inward powers; and speech \r\nWanted not long; though to this shape retained. \r\nThenceforth to speculations high or deep \r\nI turned my thoughts, and with capacious mind \r\nConsidered all things visible in Heaven, \r\nOr Earth, or Middle; all things fair and good: \r\nBut all that fair and good in thy divine \r\nSemblance, and in thy beauty's heavenly ray, \r\nUnited I beheld; no fair to thine \r\nEquivalent or second! which compelled \r\nMe thus, though importune perhaps, to come \r\nAnd gaze, and worship thee of right declared \r\nSovran of creatures, universal Dame! \r\nSo talked the spirited sly Snake; and Eve, \r\nYet more amazed, unwary thus replied. \r\nSerpent, thy overpraising leaves in doubt \r\nThe virtue of that fruit, in thee first proved: \r\nBut say, where grows the tree? from hence how far? \r\nFor many are the trees of God that grow \r\nIn Paradise, and various, yet unknown \r\nTo us; in such abundance lies our choice, \r\nAs leaves a greater store of fruit untouched, \r\nStill hanging incorruptible, till men \r\nGrow up to their provision, and more hands \r\nHelp to disburden Nature of her birth. \r\nTo whom the wily Adder, blithe and glad. \r\nEmpress, the way is ready, and not long; \r\nBeyond a row of myrtles, on a flat, \r\nFast by a fountain, one small thicket past \r\nOf blowing myrrh and balm: if thou accept \r\nMy conduct, I can bring thee thither soon \r\nLead then, said Eve.  He, leading, swiftly rolled \r\nIn tangles, and made intricate seem straight, \r\nTo mischief swift.  Hope elevates, and joy \r\nBrightens his crest; as when a wandering fire, \r\nCompact of unctuous vapour, which the night \r\nCondenses, and the cold environs round, \r\nKindled through agitation to a flame, \r\nWhich oft, they say, some evil Spirit attends, \r\nHovering and blazing with delusive light, \r\nMisleads the amazed night-wanderer from his way \r\nTo bogs and mires, and oft through pond or pool; \r\nThere swallowed up and lost, from succour far. \r\nSo glistered the dire Snake, and into fraud \r\nLed Eve, our credulous mother, to the tree \r\nOf prohibition, root of all our woe; \r\nWhich when she saw, thus to her guide she spake. \r\nSerpent, we might have spared our coming hither, \r\nFruitless to me, though fruit be here to excess, \r\nThe credit of whose virtue rest with thee; \r\nWonderous indeed, if cause of such effects. \r\nBut of this tree we may not taste nor touch; \r\nGod so commanded, and left that command \r\nSole daughter of his voice; the rest, we live \r\nLaw to ourselves; our reason is our law. \r\nTo whom the Tempter guilefully replied. \r\nIndeed! hath God then said that of the fruit \r\nOf all these garden-trees ye shall not eat, \r\nYet Lords declared of all in earth or air$? \r\nTo whom thus Eve, yet sinless.  Of the fruit \r\nOf each tree in the garden we may eat; \r\nBut of the fruit of this fair tree amidst \r\nThe garden, God hath said, Ye shall not eat \r\nThereof, nor shall ye touch it, lest ye die. \r\nShe scarce had said, though brief, when now more bold \r\nThe Tempter, but with show of zeal and love \r\nTo Man, and indignation at his wrong, \r\nNew part puts on; and, as to passion moved, \r\nFluctuates disturbed, yet comely and in act \r\nRaised, as of some great matter to begin. \r\nAs when of old some orator renowned, \r\nIn Athens or free Rome, where eloquence \r\nFlourished, since mute! to some great cause addressed, \r\nStood in himself collected; while each part, \r\nMotion, each act, won audience ere the tongue; \r\nSometimes in highth began, as no delay \r\nOf preface brooking, through his zeal of right: \r\nSo standing, moving, or to highth up grown, \r\nThe Tempter, all impassioned, thus began. \r\nO sacred, wise, and wisdom-giving Plant, \r\nMother of science! now I feel thy power \r\nWithin me clear; not only to discern \r\nThings in their causes, but to trace the ways \r\nOf highest agents, deemed however wise. \r\nQueen of this universe! do not believe \r\nThose rigid threats of death: ye shall not die: \r\nHow should you? by the fruit? it gives you life \r\nTo knowledge; by the threatener? look on me, \r\nMe, who have touched and tasted; yet both live, \r\nAnd life more perfect have attained than Fate \r\nMeant me, by venturing higher than my lot. \r\nShall that be shut to Man, which to the Beast \r\nIs open? or will God incense his ire \r\nFor such a petty trespass? and not praise \r\nRather your dauntless virtue, whom the pain \r\nOf death denounced, whatever thing death be, \r\nDeterred not from achieving what might lead \r\nTo happier life, knowledge of good and evil; \r\nOf good, how just? of evil, if what is evil \r\nBe real, why not known, since easier shunned? \r\nGod therefore cannot hurt ye, and be just; \r\nNot just, not God; not feared then, nor obeyed: \r\nYour fear itself of death removes the fear. \r\nWhy then was this forbid?  Why, but to awe; \r\nWhy, but to keep ye low and ignorant, \r\nHis worshippers?  He knows that in the day \r\nYe eat thereof, your eyes that seem so clear, \r\nYet are but dim, shall perfectly be then \r\nOpened and cleared, and ye shall be as Gods, \r\nKnowing both good and evil, as they know. \r\nThat ye shall be as Gods, since I as Man, \r\nInternal Man, is but proportion meet; \r\nI, of brute, human; ye, of human, Gods. \r\nSo ye shall die perhaps, by putting off \r\nHuman, to put on Gods; death to be wished, \r\nThough threatened, which no worse than this can bring. \r\nAnd what are Gods, that Man may not become \r\nAs they, participating God-like food? \r\nThe Gods are first, and that advantage use \r\nOn our belief, that all from them proceeds: \r\nI question it; for this fair earth I see, \r\nWarmed by the sun, producing every kind; \r\nThem, nothing: if they all things, who enclosed \r\nKnowledge of good and evil in this tree, \r\nThat whoso eats thereof, forthwith attains \r\nWisdom without their leave? and wherein lies \r\nThe offence, that Man should thus attain to know? \r\nWhat can your knowledge hurt him, or this tree \r\nImpart against his will, if all be his? \r\nOr is it envy? and can envy dwell \r\nIn heavenly breasts?  These, these, and many more \r\nCauses import your need of this fair fruit. \r\nGoddess humane, reach then, and freely taste! \r\nHe ended; and his words, replete with guile, \r\nInto her heart too easy entrance won: \r\nFixed on the fruit she gazed, which to behold \r\nMight tempt alone; and in her ears the sound \r\nYet rung of his persuasive words, impregned \r\nWith reason, to her seeming, and with truth: \r\nMean while the hour of noon drew on, and waked \r\nAn eager appetite, raised by the smell \r\nSo savoury of that fruit, which with desire, \r\nInclinable now grown to touch or taste, \r\nSolicited her longing eye; yet first \r\nPausing a while, thus to herself she mused. \r\nGreat are thy virtues, doubtless, best of fruits, \r\nThough kept from man, and worthy to be admired; \r\nWhose taste, too long forborn, at first assay \r\nGave elocution to the mute, and taught \r\nThe tongue not made for speech to speak thy praise: \r\nThy praise he also, who forbids thy use, \r\nConceals not from us, naming thee the tree \r\nOf knowledge, knowledge both of good and evil; \r\nForbids us then to taste! but his forbidding \r\nCommends thee more, while it infers the good \r\nBy thee communicated, and our want: \r\nFor good unknown sure is not had; or, had \r\nAnd yet unknown, is as not had at all. \r\nIn plain then, what forbids he but to know, \r\nForbids us good, forbids us to be wise? \r\nSuch prohibitions bind not.  But, if death \r\nBind us with after-bands, what profits then \r\nOur inward freedom?  In the day we eat \r\nOf this fair fruit, our doom is, we shall die! \r\nHow dies the Serpent? he hath eaten and lives, \r\nAnd knows, and speaks, and reasons, and discerns, \r\nIrrational till then.  For us alone \r\nWas death invented? or to us denied \r\nThis intellectual food, for beasts reserved? \r\nFor beasts it seems: yet that one beast which first \r\nHath tasted envies not, but brings with joy \r\nThe good befallen him, author unsuspect, \r\nFriendly to man, far from deceit or guile. \r\nWhat fear I then? rather, what know to fear \r\nUnder this ignorance of good and evil, \r\nOf God or death, of law or penalty? \r\nHere grows the cure of all, this fruit divine, \r\nFair to the eye, inviting to the taste, \r\nOf virtue to make wise:  What hinders then \r\nTo reach, and feed at once both body and mind? \r\nSo saying, her rash hand in evil hour \r\nForth reaching to the fruit, she plucked, she eat! \r\nEarth felt the wound; and Nature from her seat, \r\nSighing through all her works, gave signs of woe, \r\nThat all was lost.  Back to the thicket slunk \r\nThe guilty Serpent; and well might;for Eve, \r\nIntent now wholly on her taste, nought else \r\nRegarded; such delight till then, as seemed, \r\nIn fruit she never tasted, whether true \r\nOr fancied so, through expectation high \r\nOf knowledge; not was Godhead from her thought. \r\nGreedily she ingorged without restraint, \r\nAnd knew not eating death:  Satiate at length, \r\nAnd hightened as with wine, jocund and boon, \r\nThus to herself she pleasingly began. \r\nO sovran, virtuous, precious of all trees \r\nIn Paradise! of operation blest \r\nTo sapience, hitherto obscured, infamed. \r\nAnd thy fair fruit let hang, as to no end \r\nCreated; but henceforth my early care, \r\nNot without song, each morning, and due praise, \r\nShall tend thee, and the fertile burden ease \r\nOf thy full branches offered free to all; \r\nTill, dieted by thee, I grow mature \r\nIn knowledge, as the Gods, who all things know; \r\nThough others envy what they cannot give: \r\nFor, had the gift been theirs, it had not here \r\nThus grown.  Experience, next, to thee I owe, \r\nBest guide; not following thee, I had remained \r\nIn ignorance; thou openest wisdom's way, \r\nAnd givest access, though secret she retire. \r\nAnd I perhaps am secret: Heaven is high, \r\nHigh, and remote to see from thence distinct \r\nEach thing on Earth; and other care perhaps \r\nMay have diverted from continual watch \r\nOur great Forbidder, safe with all his spies \r\nAbout him.  But to Adam in what sort \r\nShall I appear? shall I to him make known \r\nAs yet my change, and give him to partake \r\nFull happiness with me, or rather not, \r\nBut keeps the odds of knowledge in my power \r\nWithout copartner? so to add what wants \r\nIn female sex, the more to draw his love, \r\nAnd render me more equal; and perhaps, \r\nA thing not undesirable, sometime \r\nSuperiour; for, inferiour, who is free \r\nThis may be well:  But what if God have seen, \r\nAnd death ensue? then I shall be no more! \r\nAnd Adam, wedded to another Eve, \r\nShall live with her enjoying, I extinct; \r\nA death to think!  Confirmed then I resolve, \r\nAdam shall share with me in bliss or woe: \r\nSo dear I love him, that with him all deaths \r\nI could endure, without him live no life. \r\nSo saying, from the tree her step she turned; \r\nBut first low reverence done, as to the Power \r\nThat dwelt within, whose presence had infused \r\nInto the plant sciential sap, derived \r\nFrom nectar, drink of Gods.  Adam the while, \r\nWaiting desirous her return, had wove \r\nOf choicest flowers a garland, to adorn \r\nHer tresses, and her rural labours crown; \r\nAs reapers oft are wont their harvest-queen. \r\nGreat joy he promised to his thoughts, and new \r\nSolace in her return, so long delayed: \r\nYet oft his heart, divine of something ill, \r\nMisgave him; he the faltering measure felt; \r\nAnd forth to meet her went, the way she took \r\nThat morn when first they parted: by the tree \r\nOf knowledge he must pass; there he her met, \r\nScarce from the tree returning; in her hand \r\nA bough of fairest fruit, that downy smiled, \r\nNew gathered, and ambrosial smell diffused. \r\nTo him she hasted; in her face excuse \r\nCame prologue, and apology too prompt; \r\nWhich, with bland words at will, she thus addressed. \r\nHast thou not wondered, Adam, at my stay? \r\nThee I have missed, and thought it long, deprived \r\nThy presence; agony of love till now \r\nNot felt, nor shall be twice; for never more \r\nMean I to try, what rash untried I sought, \r\nThe pain of absence from thy sight.  But strange \r\nHath been the cause, and wonderful to hear: \r\nThis tree is not, as we are told, a tree \r\nOf danger tasted, nor to evil unknown \r\nOpening the way, but of divine effect \r\nTo open eyes, and make them Gods who taste; \r\nAnd hath been tasted such:  The serpent wise, \r\nOr not restrained as we, or not obeying, \r\nHath eaten of the fruit; and is become, \r\nNot dead, as we are threatened, but thenceforth \r\nEndued with human voice and human sense, \r\nReasoning to admiration; and with me \r\nPersuasively hath so prevailed, that I \r\nHave also tasted, and have also found \r\nThe effects to correspond; opener mine eyes, \r\nDim erst, dilated spirits, ampler heart, \r\nAnd growing up to Godhead; which for thee \r\nChiefly I sought, without thee can despise. \r\nFor bliss, as thou hast part, to me is bliss; \r\nTedious, unshared with thee, and odious soon. \r\nThou therefore also taste, that equal lot \r\nMay join us, equal joy, as equal love; \r\nLest, thou not tasting, different degree \r\nDisjoin us, and I then too late renounce \r\nDeity for thee, when Fate will not permit. \r\nThus Eve with countenance blithe her story told; \r\nBut in her cheek distemper flushing glowed. \r\nOn the other side Adam, soon as he heard \r\nThe fatal trespass done by Eve, amazed, \r\nAstonied stood and blank, while horrour chill \r\nRan through his veins, and all his joints relaxed; \r\nFrom his slack hand the garland wreathed for Eve \r\nDown dropt, and all the faded roses shed: \r\nSpeechless he stood and pale, till thus at length \r\nFirst to himself he inward silence broke. \r\nO fairest of Creation, last and best \r\nOf all God's works, Creature in whom excelled \r\nWhatever can to sight or thought be formed, \r\nHoly, divine, good, amiable, or sweet! \r\nHow art thou lost! how on a sudden lost, \r\nDefaced, deflowered, and now to death devote! \r\nRather, how hast thou yielded to transgress \r\nThe strict forbiddance, how to violate \r\nThe sacred fruit forbidden!  Some cursed fraud \r\nOf enemy hath beguiled thee, yet unknown, \r\nAnd me with thee hath ruined; for with thee \r\nCertain my resolution is to die: \r\nHow can I live without thee! how forego \r\nThy sweet converse, and love so dearly joined, \r\nTo live again in these wild woods forlorn! \r\nShould God create another Eve, and I \r\nAnother rib afford, yet loss of thee \r\nWould never from my heart: no, no!I feel \r\nThe link of Nature draw me: flesh of flesh, \r\nBone of my bone thou art, and from thy state \r\nMine never shall be parted, bliss or woe. \r\nSo having said, as one from sad dismay \r\nRecomforted, and after thoughts disturbed \r\nSubmitting to what seemed remediless, \r\nThus in calm mood his words to Eve he turned. \r\nBold deed thou hast presumed, adventurous Eve, \r\nAnd peril great provoked, who thus hast dared, \r\nHad it been only coveting to eye \r\nThat sacred fruit, sacred to abstinence, \r\nMuch more to taste it under ban to touch. \r\nBut past who can recall, or done undo? \r\nNot God Omnipotent, nor Fate; yet so \r\nPerhaps thou shalt not die, perhaps the fact \r\nIs not so heinous now, foretasted fruit, \r\nProfaned first by the serpent, by him first \r\nMade common, and unhallowed, ere our taste; \r\nNor yet on him found deadly; yet he lives; \r\nLives, as thou saidst, and gains to live, as Man, \r\nHigher degree of life; inducement strong \r\nTo us, as likely tasting to attain \r\nProportional ascent; which cannot be \r\nBut to be Gods, or Angels, demi-Gods. \r\nNor can I think that God, Creator wise, \r\nThough threatening, will in earnest so destroy \r\nUs his prime creatures, dignified so high, \r\nSet over all his works; which in our fall, \r\nFor us created, needs with us must fail, \r\nDependant made; so God shall uncreate, \r\nBe frustrate, do, undo, and labour lose; \r\nNot well conceived of God, who, though his power \r\nCreation could repeat, yet would be loth \r\nUs to abolish, lest the Adversary \r\nTriumph, and say; \"Fickle their state whom God \r\n\"Most favours; who can please him long? Me first \r\n\"He ruined, now Mankind; whom will he next?\" \r\nMatter of scorn, not to be given the Foe. \r\nHowever I with thee have fixed my lot, \r\nCertain to undergo like doom:  If death \r\nConsort with thee, death is to me as life; \r\nSo forcible within my heart I feel \r\nThe bond of Nature draw me to my own; \r\nMy own in thee, for what thou art is mine; \r\nOur state cannot be severed; we are one, \r\nOne flesh; to lose thee were to lose myself. \r\nSo Adam; and thus Eve to him replied. \r\nO glorious trial of exceeding love, \r\nIllustrious evidence, example high! \r\nEngaging me to emulate; but, short \r\nOf thy perfection, how shall I attain, \r\nAdam, from whose dear side I boast me sprung, \r\nAnd gladly of our union hear thee speak, \r\nOne heart, one soul in both; whereof good proof \r\nThis day affords, declaring thee resolved, \r\nRather than death, or aught than death more dread, \r\nShall separate us, linked in love so dear, \r\nTo undergo with me one guilt, one crime, \r\nIf any be, of tasting this fair fruit; \r\nWhose virtue for of good still good proceeds, \r\nDirect, or by occasion, hath presented \r\nThis happy trial of thy love, which else \r\nSo eminently never had been known? \r\nWere it I thought death menaced would ensue \r\nThis my attempt, I would sustain alone \r\nThe worst, and not persuade thee, rather die \r\nDeserted, than oblige thee with a fact \r\nPernicious to thy peace; chiefly assured \r\nRemarkably so late of thy so true, \r\nSo faithful, love unequalled: but I feel \r\nFar otherwise the event; not death, but life \r\nAugmented, opened eyes, new hopes, new joys, \r\nTaste so divine, that what of sweet before \r\nHath touched my sense, flat seems to this, and harsh. \r\nOn my experience, Adam, freely taste, \r\nAnd fear of death deliver to the winds. \r\nSo saying, she embraced him, and for joy \r\nTenderly wept; much won, that he his love \r\nHad so ennobled, as of choice to incur \r\nDivine displeasure for her sake, or death. \r\nIn recompence for such compliance bad \r\nSuch recompence best merits from the bough \r\nShe gave him of that fair enticing fruit \r\nWith liberal hand: he scrupled not to eat, \r\nAgainst his better knowledge; not deceived, \r\nBut fondly overcome with female charm. \r\nEarth trembled from her entrails, as again \r\nIn pangs; and Nature gave a second groan; \r\nSky loured; and, muttering thunder, some sad drops \r\nWept at completing of the mortal sin \r\nOriginal: while Adam took no thought, \r\nEating his fill; nor Eve to iterate \r\nHer former trespass feared, the more to sooth \r\nHim with her loved society; that now, \r\nAs with new wine intoxicated both, \r\nThey swim in mirth, and fancy that they feel \r\nDivinity within them breeding wings, \r\nWherewith to scorn the earth:  But that false fruit \r\nFar other operation first displayed, \r\nCarnal desire inflaming; he on Eve \r\nBegan to cast lascivious eyes; she him \r\nAs wantonly repaid; in lust they burn: \r\nTill Adam thus 'gan Eve to dalliance move. \r\nEve, now I see thou art exact of taste, \r\nAnd elegant, of sapience no small part; \r\nSince to each meaning savour we apply, \r\nAnd palate call judicious; I the praise \r\nYield thee, so well this day thou hast purveyed. \r\nMuch pleasure we have lost, while we abstained \r\nFrom this delightful fruit, nor known till now \r\nTrue relish, tasting; if such pleasure be \r\nIn things to us forbidden, it might be wished, \r\nFor this one tree had been forbidden ten. \r\nBut come, so well refreshed, now let us play, \r\nAs meet is, after such delicious fare; \r\nFor never did thy beauty, since the day \r\nI saw thee first and wedded thee, adorned \r\nWith all perfections, so inflame my sense \r\nWith ardour to enjoy thee, fairer now \r\nThan ever; bounty of this virtuous tree! \r\nSo said he, and forbore not glance or toy \r\nOf amorous intent; well understood \r\nOf Eve, whose eye darted contagious fire. \r\nHer hand he seised; and to a shady bank, \r\nThick over-head with verdant roof imbowered, \r\nHe led her nothing loth; flowers were the couch, \r\nPansies, and violets, and asphodel, \r\nAnd hyacinth;  Earth's freshest softest lap. \r\nThere they their fill of love and love's disport \r\nTook largely, of their mutual guilt the seal, \r\nThe solace of their sin; till dewy sleep \r\nOppressed them, wearied with their amorous play, \r\nSoon as the force of that fallacious fruit, \r\nThat with exhilarating vapour bland \r\nAbout their spirits had played, and inmost powers \r\nMade err, was now exhaled; and grosser sleep, \r\nBred of unkindly fumes, with conscious dreams \r\nIncumbered, now had left them; up they rose \r\nAs from unrest; and, each the other viewing, \r\nSoon found their eyes how opened, and their minds \r\nHow darkened; innocence, that as a veil \r\nHad shadowed them from knowing ill, was gone; \r\nJust confidence, and native righteousness, \r\nAnd honour, from about them, naked left \r\nTo guilty Shame; he covered, but his robe \r\nUncovered more.  So rose the Danite strong, \r\nHerculean Samson, from the harlot-lap \r\nOf Philistean Dalilah, and waked \r\nShorn of his strength.  They destitute and bare \r\nOf all their virtue:  Silent, and in face \r\nConfounded, long they sat, as strucken mute: \r\nTill Adam, though not less than Eve abashed, \r\nAt length gave utterance to these words constrained. \r\nO Eve, in evil hour thou didst give ear \r\nTo that false worm, of whomsoever taught \r\nTo counterfeit Man's voice; true in our fall, \r\nFalse in our promised rising; since our eyes \r\nOpened we find indeed, and find we know \r\nBoth good and evil; good lost, and evil got; \r\nBad fruit of knowledge, if this be to know; \r\nWhich leaves us naked thus, of honour void, \r\nOf innocence, of faith, of purity, \r\nOur wonted ornaments now soiled and stained, \r\nAnd in our faces evident the signs \r\nOf foul concupiscence; whence evil store; \r\nEven shame, the last of evils; of the first \r\nBe sure then.--How shall I behold the face \r\nHenceforth of God or Angel, erst with joy \r\nAnd rapture so oft beheld?  Those heavenly shapes \r\nWill dazzle now this earthly with their blaze \r\nInsufferably bright.  O! might I here \r\nIn solitude live savage; in some glade \r\nObscured, where highest woods, impenetrable \r\nTo star or sun-light, spread their umbrage broad \r\nAnd brown as evening:  Cover me, ye Pines! \r\nYe Cedars, with innumerable boughs \r\nHide me, where I may never see them more!-- \r\nBut let us now, as in bad plight, devise \r\nWhat best may for the present serve to hide \r\nThe parts of each from other, that seem most \r\nTo shame obnoxious, and unseemliest seen; \r\nSome tree, whose broad smooth leaves together sewed, \r\nAnd girded on our loins, may cover round \r\nThose middle parts; that this new comer, Shame, \r\nThere sit not, and reproach us as unclean. \r\nSo counselled he, and both together went \r\nInto the thickest wood; there soon they chose \r\nThe fig-tree; not that kind for fruit renowned, \r\nBut such as at this day, to Indians known, \r\nIn Malabar or Decan spreads her arms \r\nBranching so broad and long, that in the ground \r\nThe bended twigs take root, and daughters grow \r\nAbout the mother tree, a pillared shade \r\nHigh over-arched, and echoing walks between: \r\nThere oft the Indian herdsman, shunning heat, \r\nShelters in cool, and tends his pasturing herds \r\nAt loop-holes cut through thickest shade:  Those leaves \r\nThey gathered, broad as Amazonian targe; \r\nAnd, with what skill they had, together sewed, \r\nTo gird their waist; vain covering, if to hide \r\nTheir guilt and dreaded shame!  O, how unlike \r\nTo that first naked glory!  Such of late \r\nColumbus found the American, so girt \r\nWith feathered cincture; naked else, and wild \r\nAmong the trees on isles and woody shores. \r\nThus fenced, and, as they thought, their shame in part \r\nCovered, but not at rest or ease of mind, \r\nThey sat them down to weep; nor only tears \r\nRained at their eyes, but high winds worse within \r\nBegan to rise, high passions, anger, hate, \r\nMistrust, suspicion, discord; and shook sore \r\nTheir inward state of mind, calm region once \r\nAnd full of peace, now tost and turbulent: \r\nFor Understanding ruled not, and the Will \r\nHeard not her lore; both in subjection now \r\nTo sensual Appetite, who from beneath \r\nUsurping over sovran Reason claimed \r\nSuperiour sway: From thus distempered breast, \r\nAdam, estranged in look and altered style, \r\nSpeech intermitted thus to Eve renewed. \r\nWould thou hadst hearkened to my words, and staid \r\nWith me, as I besought thee, when that strange \r\nDesire of wandering, this unhappy morn, \r\nI know not whence possessed thee; we had then \r\nRemained still happy; not, as now, despoiled \r\nOf all our good; shamed, naked, miserable! \r\nLet none henceforth seek needless cause to approve \r\nThe faith they owe; when earnestly they seek \r\nSuch proof, conclude, they then begin to fail. \r\nTo whom, soon moved with touch of blame, thus Eve. \r\nWhat words have passed thy lips, Adam severe! \r\nImputest thou that to my default, or will \r\nOf wandering, as thou callest it, which who knows \r\nBut might as ill have happened thou being by, \r\nOr to thyself perhaps?  Hadst thou been there, \r\nOr here the attempt, thou couldst not have discerned \r\nFraud in the Serpent, speaking as he spake; \r\nNo ground of enmity between us known, \r\nWhy he should mean me ill, or seek to harm. \r\nWas I to have never parted from thy side? \r\nAs good have grown there still a lifeless rib. \r\nBeing as I am, why didst not thou, the head, \r\nCommand me absolutely not to go, \r\nGoing into such danger, as thou saidst? \r\nToo facile then, thou didst not much gainsay; \r\nNay, didst permit, approve, and fair dismiss. \r\nHadst thou been firm and fixed in thy dissent, \r\nNeither had I transgressed, nor thou with me. \r\nTo whom, then first incensed, Adam replied. \r\nIs this the love, is this the recompence \r\nOf mine to thee, ingrateful Eve! expressed \r\nImmutable, when thou wert lost, not I; \r\nWho might have lived, and joyed immortal bliss, \r\nYet willingly chose rather death with thee? \r\nAnd am I now upbraided as the cause \r\nOf thy transgressing?  Not enough severe, \r\nIt seems, in thy restraint:  What could I more \r\nI warned thee, I admonished thee, foretold \r\nThe danger, and the lurking enemy \r\nThat lay in wait; beyond this, had been force; \r\nAnd force upon free will hath here no place. \r\nBut confidence then bore thee on; secure \r\nEither to meet no danger, or to find \r\nMatter of glorious trial; and perhaps \r\nI also erred, in overmuch admiring \r\nWhat seemed in thee so perfect, that I thought \r\nNo evil durst attempt thee; but I rue \r\nThe errour now, which is become my crime, \r\nAnd thou the accuser.  Thus it shall befall \r\nHim, who, to worth in women overtrusting, \r\nLets her will rule: restraint she will not brook; \r\nAnd, left to herself, if evil thence ensue, \r\nShe first his weak indulgence will accuse. \r\nThus they in mutual accusation spent \r\nThe fruitless hours, but neither self-condemning; \r\nAnd of their vain contest appeared no end. \r\n \r\n \r\n \r\nBook X                                                           \r\n \r\n \r\nMean while the heinous and despiteful act \r\nOf Satan, done in Paradise; and how \r\nHe, in the serpent, had perverted Eve, \r\nHer husband she, to taste the fatal fruit, \r\nWas known in Heaven; for what can 'scape the eye \r\nOf God all-seeing, or deceive his heart \r\nOmniscient? who, in all things wise and just, \r\nHindered not Satan to attempt the mind \r\nOf Man, with strength entire and free will armed, \r\nComplete to have discovered and repulsed \r\nWhatever wiles of foe or seeming friend. \r\nFor still they knew, and ought to have still remembered, \r\nThe high injunction, not to taste that fruit, \r\nWhoever tempted; which they not obeying, \r\n(Incurred what could they less?) the penalty; \r\nAnd, manifold in sin, deserved to fall. \r\nUp into Heaven from Paradise in haste \r\nThe angelick guards ascended, mute, and sad, \r\nFor Man; for of his state by this they knew, \r\nMuch wondering how the subtle Fiend had stolen \r\nEntrance unseen.  Soon as the unwelcome news \r\nFrom Earth arrived at Heaven-gate, displeased \r\nAll were who heard; dim sadness did not spare \r\nThat time celestial visages, yet, mixed \r\nWith pity, violated not their bliss. \r\nAbout the new-arrived, in multitudes \r\nThe ethereal people ran, to hear and know \r\nHow all befel:  They towards the throne supreme, \r\nAccountable, made haste, to make appear, \r\nWith righteous plea, their utmost vigilance \r\nAnd easily approved; when the Most High \r\nEternal Father, from his secret cloud, \r\nAmidst in thunder uttered thus his voice. \r\nAssembled Angels, and ye Powers returned \r\nFrom unsuccessful charge; be not dismayed, \r\nNor troubled at these tidings from the earth, \r\nWhich your sincerest care could not prevent; \r\nForetold so lately what would come to pass, \r\nWhen first this tempter crossed the gulf from Hell. \r\nI told ye then he should prevail, and speed \r\nOn his bad errand; Man should be seduced, \r\nAnd flattered out of all, believing lies \r\nAgainst his Maker; no decree of mine \r\nConcurring to necessitate his fall, \r\nOr touch with lightest moment of impulse \r\nHis free will, to her own inclining left \r\nIn even scale.  But fallen he is; and now \r\nWhat rests, but that the mortal sentence pass \r\nOn his transgression,--death denounced that day? \r\nWhich he presumes already vain and void, \r\nBecause not yet inflicted, as he feared, \r\nBy some immediate stroke; but soon shall find \r\nForbearance no acquittance, ere day end. \r\nJustice shall not return as bounty scorned. \r\nBut whom send I to judge them? whom but thee, \r\nVicegerent Son?  To thee I have transferred \r\nAll judgement, whether in Heaven, or Earth, or Hell. \r\nEasy it may be seen that I intend \r\nMercy colleague with justice, sending thee \r\nMan's friend, his Mediator, his designed \r\nBoth ransom and Redeemer voluntary, \r\nAnd destined Man himself to judge Man fallen. \r\nSo spake the Father; and, unfolding bright \r\nToward the right hand his glory, on the Son \r\nBlazed forth unclouded Deity: He full \r\nResplendent all his Father manifest \r\nExpressed, and thus divinely answered mild. \r\nFather Eternal, thine is to decree; \r\nMine, both in Heaven and Earth, to do thy will \r\nSupreme; that thou in me, thy Son beloved, \r\nMayest ever rest well pleased.  I go to judge \r\nOn earth these thy transgressours; but thou knowest, \r\nWhoever judged, the worst on me must light, \r\nWhen time shall be; for so I undertook \r\nBefore thee; and, not repenting, this obtain \r\nOf right, that I may mitigate their doom \r\nOn me derived; yet I shall temper so \r\nJustice with mercy, as may illustrate most \r\nThem fully satisfied, and thee appease. \r\nAttendance none shall need, nor train, where none \r\nAre to behold the judgement, but the judged, \r\nThose two; the third best absent is condemned, \r\nConvict by flight, and rebel to all law: \r\nConviction to the serpent none belongs. \r\nThus saying, from his radiant seat he rose \r\nOf high collateral glory: Him Thrones, and Powers, \r\nPrincedoms, and Dominations ministrant, \r\nAccompanied to Heaven-gate; from whence \r\nEden, and all the coast, in prospect lay. \r\nDown he descended straight; the speed of Gods \r\nTime counts not, though with swiftest minutes winged. \r\nNow was the sun in western cadence low \r\nFrom noon, and gentle airs, due at their hour, \r\nTo fan the earth now waked, and usher in \r\nThe evening cool; when he, from wrath more cool, \r\nCame the mild Judge, and Intercessour both, \r\nTo sentence Man:  The voice of God they heard \r\nNow walking in the garden, by soft winds \r\nBrought to their ears, while day declined; they heard, \r\nAnd from his presence hid themselves among \r\nThe thickest trees, both man and wife; till God, \r\nApproaching, thus to Adam called aloud. \r\nWhere art thou, Adam, wont with joy to meet \r\nMy coming seen far off?  I miss thee here, \r\nNot pleased, thus entertained with solitude, \r\nWhere obvious duty ere while appeared unsought: \r\nOr come I less conspicuous, or what change \r\nAbsents thee, or what chance detains?--Come forth! \r\nHe came; and with him Eve, more loth, though first \r\nTo offend; discountenanced both, and discomposed; \r\nLove was not in their looks, either to God, \r\nOr to each other; but apparent guilt, \r\nAnd shame, and perturbation, and despair, \r\nAnger, and obstinacy, and hate, and guile. \r\nWhence Adam, faltering long, thus answered brief. \r\nI heard thee in the garden, and of thy voice \r\nAfraid, being naked, hid myself.  To whom \r\nThe gracious Judge without revile replied. \r\nMy voice thou oft hast heard, and hast not feared, \r\nBut still rejoiced; how is it now become \r\nSo dreadful to thee?  That thou art naked, who \r\nHath told thee?  Hast thou eaten of the tree, \r\nWhereof I gave thee charge thou shouldst not eat? \r\nTo whom thus Adam sore beset replied. \r\nO Heaven! in evil strait this day I stand \r\nBefore my Judge; either to undergo \r\nMyself the total crime, or to accuse \r\nMy other self, the partner of my life; \r\nWhose failing, while her faith to me remains, \r\nI should conceal, and not expose to blame \r\nBy my complaint: but strict necessity \r\nSubdues me, and calamitous constraint; \r\nLest on my head both sin and punishment, \r\nHowever insupportable, be all \r\nDevolved; though should I hold my peace, yet thou \r\nWouldst easily detect what I conceal.-- \r\nThis Woman, whom thou madest to be my help, \r\nAnd gavest me as thy perfect gift, so good, \r\nSo fit, so acceptable, so divine, \r\nThat from her hand I could suspect no ill, \r\nAnd what she did, whatever in itself, \r\nHer doing seemed to justify the deed; \r\nShe gave me of the tree, and I did eat. \r\nTo whom the Sovran Presence thus replied. \r\nWas she thy God, that her thou didst obey \r\nBefore his voice? or was she made thy guide, \r\nSuperiour, or but equal, that to her \r\nThou didst resign thy manhood, and the place \r\nWherein God set thee above her made of thee, \r\nAnd for thee, whose perfection far excelled \r\nHers in all real dignity?  Adorned \r\nShe was indeed, and lovely, to attract \r\nThy love, not thy subjection; and her gifts \r\nWere such, as under government well seemed; \r\nUnseemly to bear rule; which was thy part \r\nAnd person, hadst thou known thyself aright. \r\nSo having said, he thus to Eve in few. \r\nSay, Woman, what is this which thou hast done? \r\nTo whom sad Eve, with shame nigh overwhelmed, \r\nConfessing soon, yet not before her Judge \r\nBold or loquacious, thus abashed replied. \r\nThe Serpent me beguiled, and I did eat. \r\nWhich when the Lord God heard, without delay \r\nTo judgement he proceeded on the accused \r\nSerpent, though brute; unable to transfer \r\nThe guilt on him, who made him instrument \r\nOf mischief, and polluted from the end \r\nOf his creation; justly then accursed, \r\nAs vitiated in nature:  More to know \r\nConcerned not Man, (since he no further knew) \r\nNor altered his offence; yet God at last \r\nTo Satan first in sin his doom applied, \r\nThough in mysterious terms, judged as then best: \r\nAnd on the Serpent thus his curse let fall. \r\nBecause thou hast done this, thou art accursed \r\nAbove all cattle, each beast of the field; \r\nUpon thy belly groveling thou shalt go, \r\nAnd dust shalt eat all the days of thy life. \r\nBetween thee and the woman I will put \r\nEnmity, and between thine and her seed; \r\nHer seed shall bruise thy head, thou bruise his heel. \r\nSo spake this oracle, then verified \r\nWhen Jesus, Son of Mary, second Eve, \r\nSaw Satan fall, like lightning, down from Heaven, \r\nPrince of the air; then, rising from his grave \r\nSpoiled Principalities and Powers, triumphed \r\nIn open show; and, with ascension bright, \r\nCaptivity led captive through the air, \r\nThe realm itself of Satan, long usurped; \r\nWhom he shall tread at last under our feet; \r\nEven he, who now foretold his fatal bruise; \r\nAnd to the Woman thus his sentence turned. \r\nThy sorrow I will greatly multiply \r\nBy thy conception; children thou shalt bring \r\nIn sorrow forth; and to thy husband's will \r\nThine shall submit; he over thee shall rule. \r\nOn Adam last thus judgement he pronounced. \r\nBecause thou hast hearkened to the voice of thy wife, \r\nAnd eaten of the tree, concerning which \r\nI charged thee, saying, Thou shalt not eat thereof: \r\nCursed is the ground for thy sake; thou in sorrow \r\nShalt eat thereof, all the days of thy life; \r\nThorns also and thistles it shall bring thee forth \r\nUnbid; and thou shalt eat the herb of the field; \r\nIn the sweat of thy face shalt thou eat bread, \r\nTill thou return unto the ground; for thou \r\nOut of the ground wast taken, know thy birth, \r\nFor dust thou art, and shalt to dust return. \r\nSo judged he Man, both Judge and Saviour sent; \r\nAnd the instant stroke of death, denounced that day, \r\nRemoved far off; then, pitying how they stood \r\nBefore him naked to the air, that now \r\nMust suffer change, disdained not to begin \r\nThenceforth the form of servant to assume; \r\nAs when he washed his servants feet; so now, \r\nAs father of his family, he clad \r\nTheir nakedness with skins of beasts, or slain, \r\nOr as the snake with youthful coat repaid; \r\nAnd thought not much to clothe his enemies; \r\nNor he their outward only with the skins \r\nOf beasts, but inward nakedness, much more. \r\nOpprobrious, with his robe of righteousness, \r\nArraying, covered from his Father's sight. \r\nTo him with swift ascent he up returned, \r\nInto his blissful bosom reassumed \r\nIn glory, as of old; to him appeased \r\nAll, though all-knowing, what had passed with Man \r\nRecounted, mixing intercession sweet. \r\nMean while, ere thus was sinned and judged on Earth, \r\nWithin the gates of Hell sat Sin and Death, \r\nIn counterview within the gates, that now \r\nStood open wide, belching outrageous flame \r\nFar into Chaos, since the Fiend passed through, \r\nSin opening; who thus now to Death began. \r\nO Son, why sit we here each other viewing \r\nIdly, while Satan, our great author, thrives \r\nIn other worlds, and happier seat provides \r\nFor us, his offspring dear?  It cannot be \r\nBut that success attends him; if mishap, \r\nEre this he had returned, with fury driven \r\nBy his avengers; since no place like this \r\nCan fit his punishment, or their revenge. \r\nMethinks I feel new strength within me rise, \r\nWings growing, and dominion given me large \r\nBeyond this deep; whatever draws me on, \r\nOr sympathy, or some connatural force, \r\nPowerful at greatest distance to unite, \r\nWith secret amity, things of like kind, \r\nBy secretest conveyance.  Thou, my shade \r\nInseparable, must with me along; \r\nFor Death from Sin no power can separate. \r\nBut, lest the difficulty of passing back \r\nStay his return perhaps over this gulf \r\nImpassable, impervious; let us try \r\nAdventurous work, yet to thy power and mine \r\nNot unagreeable, to found a path \r\nOver this main from Hell to that new world, \r\nWhere Satan now prevails; a monument \r\nOf merit high to all the infernal host, \r\nEasing their passage hence, for intercourse, \r\nOr transmigration, as their lot shall lead. \r\nNor can I miss the way, so strongly drawn \r\nBy this new-felt attraction and instinct. \r\nWhom thus the meager Shadow answered soon. \r\nGo, whither Fate, and inclination strong, \r\nLeads thee; I shall not lag behind, nor err \r\nThe way, thou leading; such a scent I draw \r\nOf carnage, prey innumerable, and taste \r\nThe savour of death from all things there that live: \r\nNor shall I to the work thou enterprisest \r\nBe wanting, but afford thee equal aid. \r\nSo saying, with delight he snuffed the smell \r\nOf mortal change on earth.  As when a flock \r\nOf ravenous fowl, though many a league remote, \r\nAgainst the day of battle, to a field, \r\nWhere armies lie encamped, come flying, lured \r\nWith scent of living carcasses designed \r\nFor death, the following day, in bloody fight: \r\nSo scented the grim Feature, and upturned \r\nHis nostril wide into the murky air; \r\nSagacious of his quarry from so far. \r\nThen both from out Hell-gates, into the waste \r\nWide anarchy of Chaos, damp and dark, \r\nFlew diverse; and with power (their power was great) \r\nHovering upon the waters, what they met \r\nSolid or slimy, as in raging sea \r\nTost up and down, together crouded drove, \r\nFrom each side shoaling towards the mouth of Hell; \r\nAs when two polar winds, blowing adverse \r\nUpon the Cronian sea, together drive \r\nMountains of ice, that stop the imagined way \r\nBeyond Petsora eastward, to the rich \r\nCathaian coast.  The aggregated soil \r\nDeath with his mace petrifick, cold and dry, \r\nAs with a trident, smote; and fixed as firm \r\nAs Delos, floating once; the rest his look \r\nBound with Gorgonian rigour not to move; \r\nAnd with Asphaltick slime, broad as the gate, \r\nDeep to the roots of Hell the gathered beach \r\nThey fastened, and the mole immense wrought on \r\nOver the foaming deep high-arched, a bridge \r\nOf length prodigious, joining to the wall \r\nImmoveable of this now fenceless world, \r\nForfeit to Death; from hence a passage broad, \r\nSmooth, easy, inoffensive, down to Hell. \r\nSo, if great things to small may be compared, \r\nXerxes, the liberty of Greece to yoke, \r\nFrom Susa, his Memnonian palace high, \r\nCame to the sea: and, over Hellespont \r\nBridging his way, Europe with Asia joined, \r\nAnd scourged with many a stroke the indignant waves. \r\nNow had they brought the work by wonderous art \r\nPontifical, a ridge of pendant rock, \r\nOver the vexed abyss, following the track \r\nOf Satan to the self-same place where he \r\nFirst lighted from his wing, and landed safe \r\nFrom out of Chaos, to the outside bare \r\nOf this round world:  With pins of adamant \r\nAnd chains they made all fast, too fast they made \r\nAnd durable!  And now in little space \r\nThe confines met of empyrean Heaven, \r\nAnd of this World; and, on the left hand, Hell \r\nWith long reach interposed; three several ways \r\nIn sight, to each of these three places led. \r\nAnd now their way to Earth they had descried, \r\nTo Paradise first tending; when, behold! \r\nSatan, in likeness of an Angel bright, \r\nBetwixt the Centaur and the Scorpion steering \r\nHis zenith, while the sun in Aries rose: \r\nDisguised he came; but those his children dear \r\nTheir parent soon discerned, though in disguise. \r\nHe, after Eve seduced, unminded slunk \r\nInto the wood fast by; and, changing shape, \r\nTo observe the sequel, saw his guileful act \r\nBy Eve, though all unweeting, seconded \r\nUpon her husband; saw their shame that sought \r\nVain covertures; but when he saw descend \r\nThe Son of God to judge them, terrified \r\nHe fled; not hoping to escape, but shun \r\nThe present; fearing, guilty, what his wrath \r\nMight suddenly inflict; that past, returned \r\nBy night, and listening where the hapless pair \r\nSat in their sad discourse, and various plaint, \r\nThence gathered his own doom; which understood \r\nNot instant, but of future time, with joy \r\nAnd tidings fraught, to Hell he now returned; \r\nAnd at the brink of Chaos, near the foot \r\nOf this new wonderous pontifice, unhoped \r\nMet, who to meet him came, his offspring dear. \r\nGreat joy was at their meeting, and at sight \r\nOf that stupendious bridge his joy encreased. \r\nLong he admiring stood, till Sin, his fair \r\nEnchanting daughter, thus the silence broke. \r\nO Parent, these are thy magnifick deeds, \r\nThy trophies! which thou viewest as not thine own; \r\nThou art their author, and prime architect: \r\nFor I no sooner in my heart divined, \r\nMy heart, which by a secret harmony \r\nStill moves with thine, joined in connexion sweet, \r\nThat thou on earth hadst prospered, which thy looks \r\nNow also evidence, but straight I felt, \r\nThough distant from thee worlds between, yet felt, \r\nThat I must after thee, with this thy son; \r\nSuch fatal consequence unites us three! \r\nHell could no longer hold us in our bounds, \r\nNor this unvoyageable gulf obscure \r\nDetain from following thy illustrious track. \r\nThou hast achieved our liberty, confined \r\nWithin Hell-gates till now; thou us impowered \r\nTo fortify thus far, and overlay, \r\nWith this portentous bridge, the dark abyss. \r\nThine now is all this world; thy virtue hath won \r\nWhat thy hands builded not; thy wisdom gained \r\nWith odds what war hath lost, and fully avenged \r\nOur foil in Heaven; here thou shalt monarch reign, \r\nThere didst not; there let him still victor sway, \r\nAs battle hath adjudged; from this new world \r\nRetiring, by his own doom alienated; \r\nAnd henceforth monarchy with thee divide \r\nOf all things, parted by the empyreal bounds, \r\nHis quadrature, from thy orbicular world; \r\nOr try thee now more dangerous to his throne. \r\nWhom thus the Prince of darkness answered glad. \r\nFair Daughter, and thou Son and Grandchild both; \r\nHigh proof ye now have given to be the race \r\nOf Satan (for I glory in the name, \r\nAntagonist of Heaven's Almighty King,) \r\nAmply have merited of me, of all \r\nThe infernal empire, that so near Heaven's door \r\nTriumphal with triumphal act have met, \r\nMine, with this glorious work; and made one realm, \r\nHell and this world, one realm, one continent \r\nOf easy thorough-fare.  Therefore, while I \r\nDescend through darkness, on your road with ease, \r\nTo my associate Powers, them to acquaint \r\nWith these successes, and with them rejoice; \r\nYou two this way, among these numerous orbs, \r\nAll yours, right down to Paradise descend; \r\nThere dwell, and reign in bliss; thence on the earth \r\nDominion exercise and in the air, \r\nChiefly on Man, sole lord of all declared; \r\nHim first make sure your thrall, and lastly kill. \r\nMy substitutes I send ye, and create \r\nPlenipotent on earth, of matchless might \r\nIssuing from me: on your joint vigour now \r\nMy hold of this new kingdom all depends, \r\nThrough Sin to Death exposed by my exploit. \r\nIf your joint power prevail, the affairs of Hell \r\nNo detriment need fear; go, and be strong! \r\nSo saying he dismissed them; they with speed \r\nTheir course through thickest constellations held, \r\nSpreading their bane; the blasted stars looked wan, \r\nAnd planets, planet-struck, real eclipse \r\nThen suffered.  The other way Satan went down \r\nThe causey to Hell-gate:  On either side \r\nDisparted Chaos overbuilt exclaimed, \r\nAnd with rebounding surge the bars assailed, \r\nThat scorned his indignation:  Through the gate, \r\nWide open and unguarded, Satan passed, \r\nAnd all about found desolate; for those, \r\nAppointed to sit there, had left their charge, \r\nFlown to the upper world; the rest were all \r\nFar to the inland retired, about the walls \r\nOf Pandemonium; city and proud seat \r\nOf Lucifer, so by allusion called \r\nOf that bright star to Satan paragoned; \r\nThere kept their watch the legions, while the Grand \r\nIn council sat, solicitous what chance \r\nMight intercept their emperour sent; so he \r\nDeparting gave command, and they observed. \r\nAs when the Tartar from his Russian foe, \r\nBy Astracan, over the snowy plains, \r\nRetires; or Bactrin Sophi, from the horns \r\nOf Turkish crescent, leaves all waste beyond \r\nThe realm of Aladule, in his retreat \r\nTo Tauris or Casbeen:  So these, the late \r\nHeaven-banished host, left desart utmost Hell \r\nMany a dark league, reduced in careful watch \r\nRound their metropolis; and now expecting \r\nEach hour their great adventurer, from the search \r\nOf foreign worlds:  He through the midst unmarked, \r\nIn show plebeian Angel militant \r\nOf lowest order, passed; and from the door \r\nOf that Plutonian hall, invisible \r\nAscended his high throne; which, under state \r\nOf richest texture spread, at the upper end \r\nWas placed in regal lustre.  Down a while \r\nHe sat, and round about him saw unseen: \r\nAt last, as from a cloud, his fulgent head \r\nAnd shape star-bright appeared, or brighter; clad \r\nWith what permissive glory since his fall \r\nWas left him, or false glitter:  All amazed \r\nAt that so sudden blaze the Stygian throng \r\nBent their aspect, and whom they wished beheld, \r\nTheir mighty Chief returned: loud was the acclaim: \r\nForth rushed in haste the great consulting peers, \r\nRaised from their dark Divan, and with like joy \r\nCongratulant approached him; who with hand \r\nSilence, and with these words attention, won. \r\nThrones, Dominations, Princedoms, Virtues, Powers; \r\nFor in possession such, not only of right, \r\nI call ye, and declare ye now; returned \r\nSuccessful beyond hope, to lead ye forth \r\nTriumphant out of this infernal pit \r\nAbominable, accursed, the house of woe, \r\nAnd dungeon of our tyrant:  Now possess, \r\nAs Lords, a spacious world, to our native Heaven \r\nLittle inferiour, by my adventure hard \r\nWith peril great achieved.  Long were to tell \r\nWhat I have done; what suffered;with what pain \r\nVoyaged th' unreal, vast, unbounded deep \r\nOf horrible confusion; over which \r\nBy Sin and Death a broad way now is paved, \r\nTo expedite your glorious march; but I \r\nToiled out my uncouth passage, forced to ride \r\nThe untractable abyss, plunged in the womb \r\nOf unoriginal Night and Chaos wild; \r\nThat, jealous of their secrets, fiercely opposed \r\nMy journey strange, with clamorous uproar \r\nProtesting Fate supreme; thence how I found \r\nThe new created world, which fame in Heaven \r\nLong had foretold, a fabrick wonderful \r\nOf absolute perfection! therein Man \r\nPlaced in a Paradise, by our exile \r\nMade happy:  Him by fraud I have seduced \r\nFrom his Creator; and, the more to encrease \r\nYour wonder, with an apple; he, thereat \r\nOffended, worth your laughter! hath given up \r\nBoth his beloved Man, and all his world, \r\nTo Sin and Death a prey, and so to us, \r\nWithout our hazard, labour, or alarm; \r\nTo range in, and to dwell, and over Man \r\nTo rule, as over all he should have ruled. \r\nTrue is, me also he hath judged, or rather \r\nMe not, but the brute serpent in whose shape \r\nMan I deceived: that which to me belongs, \r\nIs enmity which he will put between \r\nMe and mankind; I am to bruise his heel; \r\nHis seed, when is not set, shall bruise my head: \r\nA world who would not purchase with a bruise, \r\nOr much more grievous pain?--Ye have the account \r\nOf my performance:  What remains, ye Gods, \r\nBut up, and enter now into full bliss? \r\nSo having said, a while he stood, expecting \r\nTheir universal shout, and high applause, \r\nTo fill his ear; when, contrary, he hears \r\nOn all sides, from innumerable tongues, \r\nA dismal universal hiss, the sound \r\nOf publick scorn; he wondered, but not long \r\nHad leisure, wondering at himself now more, \r\nHis visage drawn he felt to sharp and spare; \r\nHis arms clung to his ribs; his legs entwining \r\nEach other, till supplanted down he fell \r\nA monstrous serpent on his belly prone, \r\nReluctant, but in vain; a greater power \r\nNow ruled him, punished in the shape he sinned, \r\nAccording to his doom: he would have spoke, \r\nBut hiss for hiss returned with forked tongue \r\nTo forked tongue; for now were all transformed \r\nAlike, to serpents all, as accessories \r\nTo his bold riot:  Dreadful was the din \r\nOf hissing through the hall, thick swarming now \r\nWith complicated monsters head and tail, \r\nScorpion, and Asp, and Amphisbaena dire, \r\nCerastes horned, Hydrus, and Elops drear, \r\nAnd Dipsas; (not so thick swarmed once the soil \r\nBedropt with blood of Gorgon, or the isle \r\nOphiusa,) but still greatest he the midst, \r\nNow Dragon grown, larger than whom the sun \r\nIngendered in the Pythian vale or slime, \r\nHuge Python, and his power no less he seemed \r\nAbove the rest still to retain; they all \r\nHim followed, issuing forth to the open field, \r\nWhere all yet left of that revolted rout, \r\nHeaven-fallen, in station stood or just array; \r\nSublime with expectation when to see \r\nIn triumph issuing forth their glorious Chief; \r\nThey saw, but other sight instead! a croud \r\nOf ugly serpents; horrour on them fell, \r\nAnd horrid sympathy; for, what they saw, \r\nThey felt themselves, now changing; down their arms, \r\nDown fell both spear and shield; down they as fast; \r\nAnd the dire hiss renewed, and the dire form \r\nCatched, by contagion; like in punishment, \r\nAs in their crime.  Thus was the applause they meant, \r\nTurned to exploding hiss, triumph to shame \r\nCast on themselves from their own mouths.  There stood \r\nA grove hard by, sprung up with this their change, \r\nHis will who reigns above, to aggravate \r\nTheir penance, laden with fair fruit, like that \r\nWhich grew in Paradise, the bait of Eve \r\nUsed by the Tempter: on that prospect strange \r\nTheir earnest eyes they fixed, imagining \r\nFor one forbidden tree a multitude \r\nNow risen, to work them further woe or shame; \r\nYet, parched with scalding thirst and hunger fierce, \r\nThough to delude them sent, could not abstain; \r\nBut on they rolled in heaps, and, up the trees \r\nClimbing, sat thicker than the snaky locks \r\nThat curled Megaera: greedily they plucked \r\nThe fruitage fair to sight, like that which grew \r\nNear that bituminous lake where Sodom flamed; \r\nThis more delusive, not the touch, but taste \r\nDeceived; they, fondly thinking to allay \r\nTheir appetite with gust, instead of fruit \r\nChewed bitter ashes, which the offended taste \r\nWith spattering noise rejected: oft they assayed, \r\nHunger and thirst constraining; drugged as oft, \r\nWith hatefullest disrelish writhed their jaws, \r\nWith soot and cinders filled; so oft they fell \r\nInto the same illusion, not as Man \r\nWhom they triumphed once lapsed.  Thus were they plagued \r\nAnd worn with famine, long and ceaseless hiss, \r\nTill their lost shape, permitted, they resumed; \r\nYearly enjoined, some say, to undergo, \r\nThis annual humbling certain numbered days, \r\nTo dash their pride, and joy, for Man seduced. \r\nHowever, some tradition they dispersed \r\nAmong the Heathen, of their purchase got, \r\nAnd fabled how the Serpent, whom they called \r\nOphion, with Eurynome, the wide-- \r\nEncroaching Eve perhaps, had first the rule \r\nOf high Olympus; thence by Saturn driven \r\nAnd Ops, ere yet Dictaean Jove was born. \r\nMean while in Paradise the hellish pair \r\nToo soon arrived; Sin, there in power before, \r\nOnce actual; now in body, and to dwell \r\nHabitual habitant; behind her Death, \r\nClose following pace for pace, not mounted yet \r\nOn his pale horse: to whom Sin thus began. \r\nSecond of Satan sprung, all-conquering Death! \r\nWhat thinkest thou of our empire now, though earned \r\nWith travel difficult, not better far \r\nThan still at Hell's dark threshold to have sat watch, \r\nUnnamed, undreaded, and thyself half starved? \r\nWhom thus the Sin-born monster answered soon. \r\nTo me, who with eternal famine pine, \r\nAlike is Hell, or Paradise, or Heaven; \r\nThere best, where most with ravine I may meet; \r\nWhich here, though plenteous, all too little seems \r\nTo stuff this maw, this vast unhide-bound corps. \r\nTo whom the incestuous mother thus replied. \r\nThou therefore on these herbs, and fruits, and flowers, \r\nFeed first; on each beast next, and fish, and fowl; \r\nNo homely morsels! and, whatever thing \r\nThe sithe of Time mows down, devour unspared; \r\nTill I, in Man residing, through the race, \r\nHis thoughts, his looks, words, actions, all infect; \r\nAnd season him thy last and sweetest prey. \r\nThis said, they both betook them several ways, \r\nBoth to destroy, or unimmortal make \r\nAll kinds, and for destruction to mature \r\nSooner or later; which the Almighty seeing, \r\nFrom his transcendent seat the Saints among, \r\nTo those bright Orders uttered thus his voice. \r\nSee, with what heat these dogs of Hell advance \r\nTo waste and havock yonder world, which I \r\nSo fair and good created; and had still \r\nKept in that state, had not the folly of Man \r\nLet in these wasteful furies, who impute \r\nFolly to me; so doth the Prince of Hell \r\nAnd his adherents, that with so much ease \r\nI suffer them to enter and possess \r\nA place so heavenly; and, conniving, seem \r\nTo gratify my scornful enemies, \r\nThat laugh, as if, transported with some fit \r\nOf passion, I to them had quitted all, \r\nAt random yielded up to their misrule; \r\nAnd know not that I called, and drew them thither, \r\nMy Hell-hounds, to lick up the draff and filth \r\nWhich Man's polluting sin with taint hath shed \r\nOn what was pure; til, crammed and gorged, nigh burst \r\nWith sucked and glutted offal, at one sling \r\nOf thy victorious arm, well-pleasing Son, \r\nBoth Sin, and Death, and yawning Grave, at last, \r\nThrough Chaos hurled, obstruct the mouth of Hell \r\nFor ever, and seal up his ravenous jaws. \r\nThen Heaven and Earth renewed shall be made pure \r\nTo sanctity, that shall receive no stain: \r\nTill then, the curse pronounced on both precedes. \r\nHe ended, and the heavenly audience loud \r\nSung Halleluiah, as the sound of seas, \r\nThrough multitude that sung:  Just are thy ways, \r\nRighteous are thy decrees on all thy works; \r\nWho can extenuate thee?  Next, to the Son, \r\nDestined Restorer of mankind, by whom \r\nNew Heaven and Earth shall to the ages rise, \r\nOr down from Heaven descend.--Such was their song; \r\nWhile the Creator, calling forth by name \r\nHis mighty Angels, gave them several charge, \r\nAs sorted best with present things.  The sun \r\nHad first his precept so to move, so shine, \r\nAs might affect the earth with cold and heat \r\nScarce tolerable; and from the north to call \r\nDecrepit winter; from the south to bring \r\nSolstitial summer's heat.  To the blanc moon \r\nHer office they prescribed; to the other five \r\nTheir planetary motions, and aspects, \r\nIn sextile, square, and trine, and opposite, \r\nOf noxious efficacy, and when to join \r\nIn synod unbenign; and taught the fixed \r\nTheir influence malignant when to shower, \r\nWhich of them rising with the sun, or falling, \r\nShould prove tempestuous:  To the winds they set \r\nTheir corners, when with bluster to confound \r\nSea, air, and shore; the thunder when to roll \r\nWith terrour through the dark aereal hall. \r\nSome say, he bid his Angels turn ascanse \r\nThe poles of earth, twice ten degrees and more, \r\nFrom the sun's axle; they with labour pushed \r\nOblique the centrick globe:  Some say, the sun \r\nWas bid turn reins from the equinoctial road \r\nLike distant breadth to Taurus with the seven \r\nAtlantick Sisters, and the Spartan Twins, \r\nUp to the Tropick Crab: thence down amain \r\nBy Leo, and the Virgin, and the Scales, \r\nAs deep as Capricorn; to bring in change \r\nOf seasons to each clime; else had the spring \r\nPerpetual smiled on earth with vernant flowers, \r\nEqual in days and nights, except to those \r\nBeyond the polar circles; to them day \r\nHad unbenighted shone, while the low sun, \r\nTo recompense his distance, in their sight \r\nHad rounded still the horizon, and not known \r\nOr east or west; which had forbid the snow \r\nFrom cold Estotiland, and south as far \r\nBeneath Magellan.  At that tasted fruit \r\nThe sun, as from Thyestean banquet, turned \r\nHis course intended; else, how had the world \r\nInhabited, though sinless, more than now, \r\nAvoided pinching cold and scorching heat? \r\nThese changes in the Heavens, though slow, produced \r\nLike change on sea and land; sideral blast, \r\nVapour, and mist, and exhalation hot, \r\nCorrupt and pestilent:  Now from the north \r\nOf Norumbega, and the Samoed shore, \r\nBursting their brazen dungeon, armed with ice, \r\nAnd snow, and hail, and stormy gust and flaw, \r\nBoreas, and Caecias, and Argestes loud, \r\nAnd Thrascias, rend the woods, and seas upturn; \r\nWith adverse blast upturns them from the south \r\nNotus, and Afer black with thunderous clouds \r\nFrom Serraliona; thwart of these, as fierce, \r\nForth rush the Levant and the Ponent winds, \r\nEurus and Zephyr, with their lateral noise, \r\nSirocco and Libecchio.  Thus began \r\nOutrage from lifeless things; but Discord first, \r\nDaughter of Sin, among the irrational \r\nDeath introduced, through fierce antipathy: \r\nBeast now with beast 'gan war, and fowl with fowl, \r\nAnd fish with fish; to graze the herb all leaving, \r\nDevoured each other; nor stood much in awe \r\nOf Man, but fled him; or, with countenance grim, \r\nGlared on him passing.  These were from without \r\nThe growing miseries, which Adam saw \r\nAlready in part, though hid in gloomiest shade, \r\nTo sorrow abandoned, but worse felt within; \r\nAnd, in a troubled sea of passion tost, \r\nThus to disburden sought with sad complaint. \r\nO miserable of happy!  Is this the end \r\nOf this new glorious world, and me so late \r\nThe glory of that glory, who now become \r\nAccursed, of blessed? hide me from the face \r\nOf God, whom to behold was then my highth \r\nOf happiness!--Yet well, if here would end \r\nThe misery; I deserved it, and would bear \r\nMy own deservings; but this will not serve: \r\nAll that I eat or drink, or shall beget, \r\nIs propagated curse.  O voice, once heard \r\nDelightfully, Encrease and multiply; \r\nNow death to hear! for what can I encrease, \r\nOr multiply, but curses on my head? \r\nWho of all ages to succeed, but, feeling \r\nThe evil on him brought by me, will curse \r\nMy head?  Ill fare our ancestor impure, \r\nFor this we may thank Adam! but his thanks \r\nShall be the execration: so, besides \r\nMine own that bide upon me, all from me \r\nShall with a fierce reflux on me rebound; \r\nOn me, as on their natural center, light \r\nHeavy, though in their place.  O fleeting joys \r\nOf Paradise, dear bought with lasting woes! \r\nDid I request thee, Maker, from my clay \r\nTo mould me Man? did I solicit thee \r\nFrom darkness to promote me, or here place \r\nIn this delicious garden?  As my will \r\nConcurred not to my being, it were but right \r\nAnd equal to reduce me to my dust; \r\nDesirous to resign and render back \r\nAll I received; unable to perform \r\nThy terms too hard, by which I was to hold \r\nThe good I sought not.  To the loss of that, \r\nSufficient penalty, why hast thou added \r\nThe sense of endless woes?  Inexplicable \r\nWhy am I mocked with death, and lengthened out \r\nTo deathless pain?  How gladly would I meet \r\nMortality my sentence, and be earth \r\nInsensible!  How glad would lay me down \r\nAs in my mother's lap!  There I should rest, \r\nAnd sleep secure; his dreadful voice no more \r\nWould thunder in my ears; no fear of worse \r\nTo me, and to my offspring, would torment me \r\nWith cruel expectation.  Yet one doubt \r\nPursues me still, lest all I cannot die; \r\nLest that pure breath of life, the spirit of Man \r\nWhich God inspired, cannot together perish \r\nWith this corporeal clod; then, in the grave, \r\nOr in some other dismal place, who knows \r\nBut I shall die a living death?  O thought \r\nHorrid, if true!  Yet why? It was but breath \r\nOf life that sinned; what dies but what had life \r\nAnd sin?  The body properly had neither, \r\nAll of me then shall die: let this appease \r\nThe doubt, since human reach no further knows. \r\nFor though the Lord of all be infinite, \r\nIs his wrath also?  Be it, Man is not so, \r\nBut mortal doomed.  How can he exercise \r\nWrath without end on Man, whom death must end? \r\nCan he make deathless death?  That were to make \r\nStrange contradiction, which to God himself \r\nImpossible is held; as argument \r\nOf weakness, not of power.  Will he draw out, \r\nFor anger's sake, finite to infinite, \r\nIn punished Man, to satisfy his rigour, \r\nSatisfied never?  That were to extend \r\nHis sentence beyond dust and Nature's law; \r\nBy which all causes else, according still \r\nTo the reception of their matter, act; \r\nNot to the extent of their own sphere.  But say \r\nThat death be not one stroke, as I supposed, \r\nBereaving sense, but endless misery \r\nFrom this day onward; which I feel begun \r\nBoth in me, and without me; and so last \r\nTo perpetuity;--Ay me!that fear \r\nComes thundering back with dreadful revolution \r\nOn my defenceless head; both Death and I \r\nAm found eternal, and incorporate both; \r\nNor I on my part single; in me all \r\nPosterity stands cursed:  Fair patrimony \r\nThat I must leave ye, Sons!  O, were I able \r\nTo waste it all myself, and leave ye none! \r\nSo disinherited, how would you bless \r\nMe, now your curse!  Ah, why should all mankind, \r\nFor one man's fault, thus guiltless be condemned, \r\nIt guiltless?  But from me what can proceed, \r\nBut all corrupt; both mind and will depraved \r\nNot to do only, but to will the same \r\nWith me?  How can they then acquitted stand \r\nIn sight of God?  Him, after all disputes, \r\nForced I absolve: all my evasions vain, \r\nAnd reasonings, though through mazes, lead me still \r\nBut to my own conviction: first and last \r\nOn me, me only, as the source and spring \r\nOf all corruption, all the blame lights due; \r\nSo might the wrath!  Fond wish!couldst thou support \r\nThat burden, heavier than the earth to bear; \r\nThan all the world much heavier, though divided \r\nWith that bad Woman?  Thus, what thou desirest, \r\nAnd what thou fearest, alike destroys all hope \r\nOf refuge, and concludes thee miserable \r\nBeyond all past example and future; \r\nTo Satan only like both crime and doom. \r\nO Conscience! into what abyss of fears \r\nAnd horrours hast thou driven me; out of which \r\nI find no way, from deep to deeper plunged! \r\nThus Adam to himself lamented loud, \r\nThrough the still night; not now, as ere Man fell, \r\nWholesome, and cool, and mild, but with black air \r\nAccompanied; with damps, and dreadful gloom; \r\nWhich to his evil conscience represented \r\nAll things with double terrour:  On the ground \r\nOutstretched he lay, on the cold ground; and oft \r\nCursed his creation;  Death as oft accused \r\nOf tardy execution, since denounced \r\nThe day of his offence.  Why comes not Death, \r\nSaid he, with one thrice-acceptable stroke \r\nTo end me?  Shall Truth fail to keep her word, \r\nJustice Divine not hasten to be just? \r\nBut Death comes not at call; Justice Divine \r\nMends not her slowest pace for prayers or cries, \r\nO woods, O fountains, hillocks, dales, and bowers! \r\nWith other echo late I taught your shades \r\nTo answer, and resound far other song.-- \r\nWhom thus afflicted when sad Eve beheld, \r\nDesolate where she sat, approaching nigh, \r\nSoft words to his fierce passion she assayed: \r\nBut her with stern regard he thus repelled. \r\nOut of my sight, thou Serpent!  That name best \r\nBefits thee with him leagued, thyself as false \r\nAnd hateful; nothing wants, but that thy shape, \r\nLike his, and colour serpentine, may show \r\nThy inward fraud; to warn all creatures from thee \r\nHenceforth; lest that too heavenly form, pretended \r\nTo hellish falshood, snare them!  But for thee \r\nI had persisted happy; had not thy pride \r\nAnd wandering vanity, when least was safe, \r\nRejected my forewarning, and disdained \r\nNot to be trusted; longing to be seen, \r\nThough by the Devil himself; him overweening \r\nTo over-reach; but, with the serpent meeting, \r\nFooled and beguiled; by him thou, I by thee \r\nTo trust thee from my side; imagined wise, \r\nConstant, mature, proof against all assaults; \r\nAnd understood not all was but a show, \r\nRather than solid virtue; all but a rib \r\nCrooked by nature, bent, as now appears, \r\nMore to the part sinister, from me drawn; \r\nWell if thrown out, as supernumerary \r\nTo my just number found.  O! why did God, \r\nCreator wise, that peopled highest Heaven \r\nWith Spirits masculine, create at last \r\nThis novelty on earth, this fair defect \r\nOf nature, and not fill the world at once \r\nWith Men, as Angels, without feminine; \r\nOr find some other way to generate \r\nMankind?  This mischief had not been befallen, \r\nAnd more that shall befall; innumerable \r\nDisturbances on earth through female snares, \r\nAnd strait conjunction with this sex: for either \r\nHe never shall find out fit mate, but such \r\nAs some misfortune brings him, or mistake; \r\nOr whom he wishes most shall seldom gain \r\nThrough her perverseness, but shall see her gained \r\nBy a far worse; or, if she love, withheld \r\nBy parents; or his happiest choice too late \r\nShall meet, already linked and wedlock-bound \r\nTo a fell adversary, his hate or shame: \r\nWhich infinite calamity shall cause \r\nTo human life, and houshold peace confound. \r\nHe added not, and from her turned; but Eve, \r\nNot so repulsed, with tears that ceased not flowing \r\nAnd tresses all disordered, at his feet \r\nFell humble; and, embracing them, besought \r\nHis peace, and thus proceeded in her plaint. \r\nForsake me not thus, Adam! witness Heaven \r\nWhat love sincere, and reverence in my heart \r\nI bear thee, and unweeting have offended, \r\nUnhappily deceived!  Thy suppliant \r\nI beg, and clasp thy knees; bereave me not, \r\nWhereon I live, thy gentle looks, thy aid, \r\nThy counsel, in this uttermost distress, \r\nMy only strength and stay:  Forlorn of thee, \r\nWhither shall I betake me, where subsist? \r\nWhile yet we live, scarce one short hour perhaps, \r\nBetween us two let there be peace; both joining, \r\nAs joined in injuries, one enmity \r\nAgainst a foe by doom express assigned us, \r\nThat cruel Serpent:  On me exercise not \r\nThy hatred for this misery befallen; \r\nOn me already lost, me than thyself \r\nMore miserable!  Both have sinned;but thou \r\nAgainst God only; I against God and thee; \r\nAnd to the place of judgement will return, \r\nThere with my cries importune Heaven; that all \r\nThe sentence, from thy head removed, may light \r\nOn me, sole cause to thee of all this woe; \r\nMe, me only, just object of his ire! \r\nShe ended weeping; and her lowly plight, \r\nImmoveable, till peace obtained from fault \r\nAcknowledged and deplored, in Adam wrought \r\nCommiseration:  Soon his heart relented \r\nTowards her, his life so late, and sole delight, \r\nNow at his feet submissive in distress; \r\nCreature so fair his reconcilement seeking, \r\nHis counsel, whom she had displeased, his aid: \r\nAs one disarmed, his anger all he lost, \r\nAnd thus with peaceful words upraised her soon. \r\nUnwary, and too desirous, as before, \r\nSo now of what thou knowest not, who desirest \r\nThe punishment all on thyself; alas! \r\nBear thine own first, ill able to sustain \r\nHis full wrath, whose thou feelest as yet least part, \r\nAnd my displeasure bearest so ill.  If prayers \r\nCould alter high decrees, I to that place \r\nWould speed before thee, and be louder heard, \r\nThat on my head all might be visited; \r\nThy frailty and infirmer sex forgiven, \r\nTo me committed, and by me exposed. \r\nBut rise;--let us no more contend, nor blame \r\nEach other, blamed enough elsewhere; but strive \r\nIn offices of love, how we may lighten \r\nEach other's burden, in our share of woe; \r\nSince this day's death denounced, if aught I see, \r\nWill prove no sudden, but a slow-paced evil; \r\nA long day's dying, to augment our pain; \r\nAnd to our seed (O hapless seed!) derived. \r\nTo whom thus Eve, recovering heart, replied. \r\nAdam, by sad experiment I know \r\nHow little weight my words with thee can find, \r\nFound so erroneous; thence by just event \r\nFound so unfortunate:  Nevertheless, \r\nRestored by thee, vile as I am, to place \r\nOf new acceptance, hopeful to regain \r\nThy love, the sole contentment of my heart \r\nLiving or dying, from thee I will not hide \r\nWhat thoughts in my unquiet breast are risen, \r\nTending to some relief of our extremes, \r\nOr end; though sharp and sad, yet tolerable, \r\nAs in our evils, and of easier choice. \r\nIf care of our descent perplex us most, \r\nWhich must be born to certain woe, devoured \r\nBy Death at last; and miserable it is \r\nTo be to others cause of misery, \r\nOur own begotten, and of our loins to bring \r\nInto this cursed world a woeful race, \r\nThat after wretched life must be at last \r\nFood for so foul a monster; in thy power \r\nIt lies, yet ere conception to prevent \r\nThe race unblest, to being yet unbegot. \r\nChildless thou art, childless remain: so Death \r\nShall be deceived his glut, and with us two \r\nBe forced to satisfy his ravenous maw. \r\nBut if thou judge it hard and difficult, \r\nConversing, looking, loving, to abstain \r\nFrom love's due rights, nuptial embraces sweet; \r\nAnd with desire to languish without hope, \r\nBefore the present object languishing \r\nWith like desire; which would be misery \r\nAnd torment less than none of what we dread; \r\nThen, both ourselves and seed at once to free \r\nFrom what we fear for both, let us make short, -- \r\nLet us seek Death; -- or, he not found, supply \r\nWith our own hands his office on ourselves: \r\nWhy stand we longer shivering under fears, \r\nThat show no end but death, and have the power, \r\nOf many ways to die the shortest choosing, \r\nDestruction with destruction to destroy? -- \r\nShe ended here, or vehement despair \r\nBroke off the rest: so much of death her thoughts \r\nHad entertained, as dyed her cheeks with pale. \r\nBut Adam, with such counsel nothing swayed, \r\nTo better hopes his more attentive mind \r\nLabouring had raised; and thus to Eve replied. \r\nEve, thy contempt of life and pleasure seems \r\nTo argue in thee something more sublime \r\nAnd excellent, than what thy mind contemns; \r\nBut self-destruction therefore sought, refutes \r\nThat excellence thought in thee; and implies, \r\nNot thy contempt, but anguish and regret \r\nFor loss of life and pleasure overloved. \r\nOr if thou covet death, as utmost end \r\nOf misery, so thinking to evade \r\nThe penalty pronounced; doubt not but God \r\nHath wiselier armed his vengeful ire, than so \r\nTo be forestalled; much more I fear lest death, \r\nSo snatched, will not exempt us from the pain \r\nWe are by doom to pay; rather, such acts \r\nOf contumacy will provoke the Highest \r\nTo make death in us live:  Then let us seek \r\nSome safer resolution, which methinks \r\nI have in view, calling to mind with heed \r\nPart of our sentence, that thy seed shall bruise \r\nThe Serpent's head; piteous amends! unless \r\nBe meant, whom I conjecture, our grand foe, \r\nSatan; who, in the serpent, hath contrived \r\nAgainst us this deceit:  To crush his head \r\nWould be revenge indeed! which will be lost \r\nBy death brought on ourselves, or childless days \r\nResolved, as thou proposest; so our foe \r\nShal 'scape his punishment ordained, and we \r\nInstead shall double ours upon our heads. \r\nNo more be mentioned then of violence \r\nAgainst ourselves; and wilful barrenness, \r\nThat cuts us off from hope; and savours only \r\nRancour and pride, impatience and despite, \r\nReluctance against God and his just yoke \r\nLaid on our necks.  Remember with what mild \r\nAnd gracious temper he both heard, and judged, \r\nWithout wrath or reviling; we expected \r\nImmediate dissolution, which we thought \r\nWas meant by death that day; when lo!to thee \r\nPains only in child-bearing were foretold, \r\nAnd bringing forth; soon recompensed with joy, \r\nFruit of thy womb:  On me the curse aslope \r\nGlanced on the ground; with labour I must earn \r\nMy bread; what harm? Idleness had been worse; \r\nMy labour will sustain me; and, lest cold \r\nOr heat should injure us, his timely care \r\nHath, unbesought, provided; and his hands \r\nClothed us unworthy, pitying while he judged; \r\nHow much more, if we pray him, will his ear \r\nBe open, and his heart to pity incline, \r\nAnd teach us further by what means to shun \r\nThe inclement seasons, rain, ice, hail, and snow! \r\nWhich now the sky, with various face, begins \r\nTo show us in this mountain; while the winds \r\nBlow moist and keen, shattering the graceful locks \r\nOf these fair spreading trees; which bids us seek \r\nSome better shroud, some better warmth to cherish \r\nOur limbs benummed, ere this diurnal star \r\nLeave cold the night, how we his gathered beams \r\nReflected may with matter sere foment; \r\nOr, by collision of two bodies, grind \r\nThe air attrite to fire; as late the clouds \r\nJustling, or pushed with winds, rude in their shock, \r\nTine the slant lightning; whose thwart flame, driven down \r\nKindles the gummy bark of fir or pine; \r\nAnd sends a comfortable heat from far, \r\nWhich might supply the sun:  Such fire to use, \r\nAnd what may else be remedy or cure \r\nTo evils which our own misdeeds have wrought, \r\nHe will instruct us praying, and of grace \r\nBeseeching him; so as we need not fear \r\nTo pass commodiously this life, sustained \r\nBy him with many comforts, till we end \r\nIn dust, our final rest and native home. \r\nWhat better can we do, than, to the place \r\nRepairing where he judged us, prostrate fall \r\nBefore him reverent; and there confess \r\nHumbly our faults, and pardon beg; with tears \r\nWatering the ground, and with our sighs the air \r\nFrequenting, sent from hearts contrite, in sign \r\nOf sorrow unfeigned, and humiliation meek \r\n \r\n \r\n \r\nBook XI                                                          \r\n \r\n \r\nUndoubtedly he will relent, and turn \r\nFrom his displeasure; in whose look serene, \r\nWhen angry most he seemed and most severe, \r\nWhat else but favour, grace, and mercy, shone? \r\nSo spake our father penitent; nor Eve \r\nFelt less remorse: they, forthwith to the place \r\nRepairing where he judged them, prostrate fell \r\nBefore him reverent; and both confessed \r\nHumbly their faults, and pardon begged; with tears \r\nWatering the ground, and with their sighs the air \r\nFrequenting, sent from hearts contrite, in sign \r\nOf sorrow unfeigned, and humiliation meek. \r\nThus they, in lowliest plight, repentant stood \r\nPraying; for from the mercy-seat above \r\nPrevenient grace descending had removed \r\nThe stony from their hearts, and made new flesh \r\nRegenerate grow instead; that sighs now breathed \r\nUnutterable; which the Spirit of prayer \r\nInspired, and winged for Heaven with speedier flight \r\nThan loudest oratory:  Yet their port \r\nNot of mean suitors; nor important less \r\nSeemed their petition, than when the ancient pair \r\nIn fables old, less ancient yet than these, \r\nDeucalion and chaste Pyrrha, to restore \r\nThe race of mankind drowned, before the shrine \r\nOf Themis stood devout.  To Heaven their prayers \r\nFlew up, nor missed the way, by envious winds \r\nBlown vagabond or frustrate: in they passed \r\nDimensionless through heavenly doors; then clad \r\nWith incense, where the golden altar fumed, \r\nBy their great intercessour, came in sight \r\nBefore the Father's throne: them the glad Son \r\nPresenting, thus to intercede began. \r\nSee$ Father, what first-fruits on earth are sprung \r\nFrom thy implanted grace in Man; these sighs \r\nAnd prayers, which in this golden censer mixed \r\nWith incense, I thy priest before thee bring; \r\nFruits of more pleasing savour, from thy seed \r\nSown with contrition in his heart, than those \r\nWhich, his own hand manuring, all the trees \r\nOf Paradise could have produced, ere fallen \r\nFrom innocence.  Now therefore, bend thine ear \r\nTo supplication; hear his sighs, though mute; \r\nUnskilful with what words to pray, let me \r\nInterpret for him; me, his advocate \r\nAnd propitiation; all his works on me, \r\nGood, or not good, ingraft; my merit those \r\nShall perfect, and for these my death shall pay. \r\nAccept me; and, in me, from these receive \r\nThe smell of peace toward mankind: let him live \r\nBefore thee reconciled, at least his days \r\nNumbered, though sad; till death, his doom, (which I \r\nTo mitigate thus plead, not to reverse,) \r\nTo better life shall yield him: where with me \r\nAll my redeemed may dwell in joy and bliss; \r\nMade one with me, as I with thee am one. \r\nTo whom the Father, without cloud, serene. \r\nAll thy request for Man, accepted Son, \r\nObtain; all thy request was my decree: \r\nBut, longer in that Paradise to dwell, \r\nThe law I gave to Nature him forbids: \r\nThose pure immortal elements, that know, \r\nNo gross, no unharmonious mixture foul, \r\nEject him, tainted now; and purge him off, \r\nAs a distemper, gross, to air as gross, \r\nAnd mortal food; as may dispose him best \r\nFor dissolution wrought by sin, that first \r\nDistempered all things, and of incorrupt \r\nCorrupted.  I, at first, with two fair gifts \r\nCreated him endowed; with happiness, \r\nAnd immortality: that fondly lost, \r\nThis other served but to eternize woe; \r\nTill I provided death: so death becomes \r\nHis final remedy; and, after life, \r\nTried in sharp tribulation, and refined \r\nBy faith and faithful works, to second life, \r\nWaked in the renovation of the just, \r\nResigns him up with Heaven and Earth renewed. \r\nBut let us call to synod all the Blest, \r\nThrough Heaven's wide bounds: from them I will not hide \r\nMy judgements; how with mankind I proceed, \r\nAs how with peccant Angels late they saw, \r\nAnd in their state, though firm, stood more confirmed. \r\nHe ended, and the Son gave signal high \r\nTo the bright minister that watched; he blew \r\nHis trumpet, heard in Oreb since perhaps \r\nWhen God descended, and perhaps once more \r\nTo sound at general doom.  The angelick blast \r\nFilled all the regions: from their blisful bowers \r\nOf amarantine shade, fountain or spring, \r\nBy the waters of life, where'er they sat \r\nIn fellowships of joy, the sons of light \r\nHasted, resorting to the summons high; \r\nAnd took their seats; till from his throne supreme \r\nThe Almighty thus pronounced his sovran will. \r\nO Sons, like one of us Man is become \r\nTo know both good and evil, since his taste \r\nOf that defended fruit; but let him boast \r\nHis knowledge of good lost, and evil got; \r\nHappier! had it sufficed him to have known \r\nGood by itself, and evil not at all. \r\nHe sorrows now, repents, and prays contrite, \r\nMy motions in him; longer than they move, \r\nHis heart I know, how variable and vain, \r\nSelf-left.  Lest therefore his now bolder hand \r\nReach also of the tree of life, and eat, \r\nAnd live for ever, dream at least to live \r\nFor ever, to remove him I decree, \r\nAnd send him from the garden forth to till \r\nThe ground whence he was taken, fitter soil. \r\nMichael, this my behest have thou in charge; \r\nTake to thee from among the Cherubim \r\nThy choice of flaming warriours, lest the Fiend, \r\nOr in behalf of Man, or to invade \r\nVacant possession, some new trouble raise: \r\nHaste thee, and from the Paradise of God \r\nWithout remorse drive out the sinful pair; \r\nFrom hallowed ground the unholy; and denounce \r\nTo them, and to their progeny, from thence \r\nPerpetual banishment.  Yet, lest they faint \r\nAt the sad sentence rigorously urged, \r\n(For I behold them softened, and with tears \r\nBewailing their excess,) all terrour hide. \r\nIf patiently thy bidding they obey, \r\nDismiss them not disconsolate; reveal \r\nTo Adam what shall come in future days, \r\nAs I shall thee enlighten; intermix \r\nMy covenant in the Woman's seed renewed; \r\nSo send them forth, though sorrowing, yet in peace: \r\nAnd on the east side of the garden place, \r\nWhere entrance up from Eden easiest climbs, \r\nCherubick watch; and of a sword the flame \r\nWide-waving; all approach far off to fright, \r\nAnd guard all passage to the tree of life: \r\nLest Paradise a receptacle prove \r\nTo Spirits foul, and all my trees their prey; \r\nWith whose stolen fruit Man once more to delude. \r\nHe ceased; and the arch-angelick Power prepared \r\nFor swift descent; with him the cohort bright \r\nOf watchful Cherubim: four faces each \r\nHad, like a double Janus; all their shape \r\nSpangled with eyes more numerous than those \r\nOf Argus, and more wakeful than to drouse, \r\nCharmed with Arcadian pipe, the pastoral reed \r\nOf Hermes, or his opiate rod.  Mean while, \r\nTo re-salute the world with sacred light, \r\nLeucothea waked; and with fresh dews imbalmed \r\nThe earth; when Adam and first matron Eve \r\nHad ended now their orisons, and found \r\nStrength added from above; new hope to spring \r\nOut of despair; joy, but with fear yet linked; \r\nWhich thus to Eve his welcome words renewed. \r\nEve, easily my faith admit, that all \r\nThe good which we enjoy from Heaven descends; \r\nBut, that from us aught should ascend to Heaven \r\nSo prevalent as to concern the mind \r\nOf God high-blest, or to incline his will, \r\nHard to belief may seem; yet this will prayer \r\nOr one short sigh of human breath, upborne \r\nEven to the seat of God.  For since I sought \r\nBy prayer the offended Deity to appease; \r\nKneeled, and before him humbled all my heart; \r\nMethought I saw him placable and mild, \r\nBending his ear; persuasion in me grew \r\nThat I was heard with favour; peace returned \r\nHome to my breast, and to my memory \r\nHis promise, that thy seed shall bruise our foe; \r\nWhich, then not minded in dismay, yet now \r\nAssures me that the bitterness of death \r\nIs past, and we shall live.  Whence hail to thee, \r\nEve rightly called, mother of all mankind, \r\nMother of all things living, since by thee \r\nMan is to live; and all things live for Man. \r\nTo whom thus Eve with sad demeanour meek. \r\nIll-worthy I such title should belong \r\nTo me transgressour; who, for thee ordained \r\nA help, became thy snare; to me reproach \r\nRather belongs, distrust, and all dispraise: \r\nBut infinite in pardon was my Judge, \r\nThat I, who first brought death on all, am graced \r\nThe source of life; next favourable thou, \r\nWho highly thus to entitle me vouchsaf'st, \r\nFar other name deserving.  But the field \r\nTo labour calls us, now with sweat imposed, \r\nThough after sleepless night; for see!the morn, \r\nAll unconcerned with our unrest, begins \r\nHer rosy progress smiling: let us forth; \r\nI never from thy side henceforth to stray, \r\nWhere'er our day's work lies, though now enjoined \r\nLaborious, till day droop; while here we dwell, \r\nWhat can be toilsome in these pleasant walks? \r\nHere let us live, though in fallen state, content. \r\nSo spake, so wished much humbled Eve; but Fate \r\nSubscribed not:  Nature first gave signs, impressed \r\nOn bird, beast, air; air suddenly eclipsed, \r\nAfter short blush of morn; nigh in her sight \r\nThe bird of Jove, stooped from his aery tour, \r\nTwo birds of gayest plume before him drove; \r\nDown from a hill the beast that reigns in woods, \r\nFirst hunter then, pursued a gentle brace, \r\nGoodliest of all the forest, hart and hind; \r\nDirect to the eastern gate was bent their flight. \r\nAdam observed, and with his eye the chase \r\nPursuing, not unmoved, to Eve thus spake. \r\nO Eve, some further change awaits us nigh, \r\nWhich Heaven, by these mute signs in Nature, shows \r\nForerunners of his purpose; or to warn \r\nUs, haply too secure, of our discharge \r\nFrom penalty, because from death released \r\nSome days: how long, and what till then our life, \r\nWho knows? or more than this, that we are dust, \r\nAnd thither must return, and be no more? \r\nWhy else this double object in our sight \r\nOf flight pursued in the air, and o'er the ground, \r\nOne way the self-same hour? why in the east \r\nDarkness ere day's mid-course, and morning-light \r\nMore orient in yon western cloud, that draws \r\nO'er the blue firmament a radiant white, \r\nAnd slow descends with something heavenly fraught? \r\nHe erred not; for by this the heavenly bands \r\nDown from a sky of jasper lighted now \r\nIn Paradise, and on a hill made halt; \r\nA glorious apparition, had not doubt \r\nAnd carnal fear that day dimmed Adam's eye. \r\nNot that more glorious, when the Angels met \r\nJacob in Mahanaim, where he saw \r\nThe field pavilioned with his guardians bright; \r\nNor that, which on the flaming mount appeared \r\nIn Dothan, covered with a camp of fire, \r\nAgainst the Syrian king, who to surprise \r\nOne man, assassin-like, had levied war, \r\nWar unproclaimed.  The princely Hierarch \r\nIn their bright stand there left his Powers, to seise \r\nPossession of the garden; he alone, \r\nTo find where Adam sheltered, took his way, \r\nNot unperceived of Adam; who to Eve, \r\nWhile the great visitant approached, thus spake. \r\nEve$ now expect great tidings, which perhaps \r\nOf us will soon determine, or impose \r\nNew laws to be observed; for I descry, \r\nFrom yonder blazing cloud that veils the hill, \r\nOne of the heavenly host; and, by his gait, \r\nNone of the meanest; some great Potentate \r\nOr of the Thrones above; such majesty \r\nInvests him coming! yet not terrible, \r\nThat I should fear; nor sociably mild, \r\nAs Raphael, that I should much confide; \r\nBut solemn and sublime; whom not to offend, \r\nWith reverence I must meet, and thou retire. \r\nHe ended: and the Arch-Angel soon drew nigh, \r\nNot in his shape celestial, but as man \r\nClad to meet man; over his lucid arms \r\nA military vest of purple flowed, \r\nLivelier than Meliboean, or the grain \r\nOf Sarra, worn by kings and heroes old \r\nIn time of truce; Iris had dipt the woof; \r\nHis starry helm unbuckled showed him prime \r\nIn manhood where youth ended; by his side, \r\nAs in a glistering zodiack, hung the sword, \r\nSatan's dire dread; and in his hand the spear. \r\nAdam bowed low; he, kingly, from his state \r\nInclined not, but his coming thus declared. \r\nAdam, Heaven's high behest no preface needs: \r\nSufficient that thy prayers are heard; and Death, \r\nThen due by sentence when thou didst transgress, \r\nDefeated of his seisure many days \r\nGiven thee of grace; wherein thou mayest repent, \r\nAnd one bad act with many deeds well done \r\nMayest cover:  Well may then thy Lord, appeased, \r\nRedeem thee quite from Death's rapacious claim; \r\nBut longer in this Paradise to dwell \r\nPermits not: to remove thee I am come, \r\nAnd send thee from the garden forth to till \r\nThe ground whence thou wast taken, fitter soil. \r\nHe added not; for Adam at the news \r\nHeart-struck with chilling gripe of sorrow stood, \r\nThat all his senses bound; Eve, who unseen \r\nYet all had heard, with audible lament \r\nDiscovered soon the place of her retire. \r\nO unexpected stroke, worse than of Death! \r\nMust I thus leave thee$ Paradise? thus leave \r\nThee, native soil! these happy walks and shades, \r\nFit haunt of Gods? where I had hope to spend, \r\nQuiet though sad, the respite of that day \r\nThat must be mortal to us both.  O flowers, \r\nThat never will in other climate grow, \r\nMy early visitation, and my last \r\n ;t even, which I bred up with tender hand \r\nFrom the first opening bud, and gave ye names! \r\nWho now shall rear ye to the sun, or rank \r\nYour tribes, and water from the ambrosial fount? \r\nThee lastly, nuptial bower! by me adorned \r\nWith what to sight or smell was sweet! from thee \r\nHow shall I part, and whither wander down \r\nInto a lower world; to this obscure \r\nAnd wild? how shall we breathe in other air \r\nLess pure, accustomed to immortal fruits? \r\nWhom thus the Angel interrupted mild. \r\nLament not, Eve, but patiently resign \r\nWhat justly thou hast lost, nor set thy heart, \r\nThus over-fond, on that which is not thine: \r\nThy going is not lonely; with thee goes \r\nThy husband; whom to follow thou art bound; \r\nWhere he abides, think there thy native soil. \r\nAdam, by this from the cold sudden damp \r\nRecovering, and his scattered spirits returned, \r\nTo Michael thus his humble words addressed. \r\nCelestial, whether among the Thrones, or named \r\nOf them the highest; for such of shape may seem \r\nPrince above princes! gently hast thou told \r\nThy message, which might else in telling wound, \r\nAnd in performing end us; what besides \r\nOf sorrow, and dejection, and despair, \r\nOur frailty can sustain, thy tidings bring, \r\nDeparture from this happy place, our sweet \r\nRecess, and only consolation left \r\nFamiliar to our eyes! all places else \r\nInhospitable appear, and desolate; \r\nNor knowing us, nor known:  And, if by prayer \r\nIncessant I could hope to change the will \r\nOf Him who all things can, I would not cease \r\nTo weary him with my assiduous cries: \r\nBut prayer against his absolute decree \r\nNo more avails than breath against the wind, \r\nBlown stifling back on him that breathes it forth: \r\nTherefore to his great bidding I submit. \r\nThis most afflicts me, that, departing hence, \r\nAs from his face I shall be hid, deprived \r\nHis blessed countenance:  Here I could frequent \r\nWith worship place by place where he vouchsafed \r\nPresence Divine; and to my sons relate, \r\n'On this mount he appeared; under this tree \r\n'Stood visible; among these pines his voice \r\n'I heard; here with him at this fountain talked: \r\nSo many grateful altars I would rear \r\nOf grassy turf, and pile up every stone \r\nOf lustre from the brook, in memory, \r\nOr monument to ages; and theron \r\nOffer sweet-smelling gums, and fruits, and flowers: \r\nIn yonder nether world where shall I seek \r\nHis bright appearances, or foot-step trace? \r\nFor though I fled him angry, yet recalled \r\nTo life prolonged and promised race, I now \r\nGladly behold though but his utmost skirts \r\nOf glory; and far off his steps adore. \r\nTo whom thus Michael with regard benign. \r\nAdam, thou knowest Heaven his, and all the Earth; \r\nNot this rock only; his Omnipresence fills \r\nLand, sea, and air, and every kind that lives, \r\nFomented by his virtual power and warmed: \r\nAll the earth he gave thee to possess and rule, \r\nNo despicable gift; surmise not then \r\nHis presence to these narrow bounds confined \r\nOf Paradise, or Eden: this had been \r\nPerhaps thy capital seat, from whence had spread \r\nAll generations; and had hither come \r\nFrom all the ends of the earth, to celebrate \r\nAnd reverence thee, their great progenitor. \r\nBut this pre-eminence thou hast lost, brought down \r\nTo dwell on even ground now with thy sons: \r\nYet doubt not but in valley, and in plain, \r\nGod is, as here; and will be found alike \r\nPresent; and of his presence many a sign \r\nStill following thee, still compassing thee round \r\nWith goodness and paternal love, his face \r\nExpress, and of his steps the track divine. \r\nWhich that thou mayest believe, and be confirmed \r\nEre thou from hence depart; know, I am sent \r\nTo show thee what shall come in future days \r\nTo thee, and to thy offspring: good with bad \r\nExpect to hear; supernal grace contending \r\nWith sinfulness of men; thereby to learn \r\nTrue patience, and to temper joy with fear \r\nAnd pious sorrow; equally inured \r\nBy moderation either state to bear, \r\nProsperous or adverse: so shalt thou lead \r\nSafest thy life, and best prepared endure \r\nThy mortal passage when it comes.--Ascend \r\nThis hill; let Eve (for I have drenched her eyes) \r\nHere sleep below; while thou to foresight wakest; \r\nAs once thou sleptst, while she to life was formed. \r\nTo whom thus Adam gratefully replied. \r\nAscend, I follow thee, safe Guide, the path \r\nThou leadest me; and to the hand of Heaven submit, \r\nHowever chastening; to the evil turn \r\nMy obvious breast; arming to overcome \r\nBy suffering, and earn rest from labour won, \r\nIf so I may attain. -- So both ascend \r\nIn the visions of God.  It was a hill, \r\nOf Paradise the highest; from whose top \r\nThe hemisphere of earth, in clearest ken, \r\nStretched out to the amplest reach of prospect lay. \r\nNot higher that hill, nor wider looking round, \r\nWhereon, for different cause, the Tempter set \r\nOur second Adam, in the wilderness; \r\nTo show him all Earth's kingdoms, and their glory. \r\nHis eye might there command wherever stood \r\nCity of old or modern fame, the seat \r\nOf mightiest empire, from the destined walls \r\nOf Cambalu, seat of Cathaian Can, \r\nAnd Samarchand by Oxus, Temir's throne, \r\nTo Paquin of Sinaean kings; and thence \r\nTo Agra and Lahor of great Mogul, \r\nDown to the golden Chersonese; or where \r\nThe Persian in Ecbatan sat, or since \r\nIn Hispahan; or where the Russian Ksar \r\nIn Mosco; or the Sultan in Bizance, \r\nTurchestan-born; nor could his eye not ken \r\nThe empire of Negus to his utmost port \r\nErcoco, and the less maritim kings \r\nMombaza, and Quiloa, and Melind, \r\nAnd Sofala, thought Ophir, to the realm \r\nOf Congo, and Angola farthest south; \r\nOr thence from Niger flood to Atlas mount \r\nThe kingdoms of Almansor, Fez and Sus, \r\nMorocco, and Algiers, and Tremisen; \r\nOn Europe thence, and where Rome was to sway \r\nThe world: in spirit perhaps he also saw \r\nRich Mexico, the seat of Montezume, \r\nAnd Cusco in Peru, the richer seat \r\nOf Atabalipa; and yet unspoiled \r\nGuiana, whose great city Geryon's sons \r\nCall El Dorado.  But to nobler sights \r\nMichael from Adam's eyes the film removed, \r\nWhich that false fruit that promised clearer sight \r\nHad bred; then purged with euphrasy and rue \r\nThe visual nerve, for he had much to see; \r\nAnd from the well of life three drops instilled. \r\nSo deep the power of these ingredients pierced, \r\nEven to the inmost seat of mental sight, \r\nThat Adam, now enforced to close his eyes, \r\nSunk down, and all his spirits became entranced; \r\nBut him the gentle Angel by the hand \r\nSoon raised, and his attention thus recalled. \r\nAdam, now ope thine eyes; and first behold \r\nThe effects, which thy original crime hath wrought \r\nIn some to spring from thee; who never touched \r\nThe excepted tree; nor with the snake conspired; \r\nNor sinned thy sin; yet from that sin derive \r\nCorruption, to bring forth more violent deeds. \r\nHis eyes he opened, and beheld a field, \r\nPart arable and tilth, whereon were sheaves \r\nNew reaped; the other part sheep-walks and folds; \r\nI' the midst an altar as the land-mark stood, \r\nRustick, of grassy sord; thither anon \r\nA sweaty reaper from his tillage brought \r\nFirst fruits, the green ear, and the yellow sheaf, \r\nUnculled, as came to hand; a shepherd next, \r\nMore meek, came with the firstlings of his flock, \r\nChoicest and best; then, sacrificing, laid \r\nThe inwards and their fat, with incense strowed, \r\nOn the cleft wood, and all due rights performed: \r\nHis offering soon propitious fire from Heaven \r\nConsumed with nimble glance, and grateful steam; \r\nThe other's not, for his was not sincere; \r\nWhereat he inly raged, and, as they talked, \r\nSmote him into the midriff with a stone \r\nThat beat out life; he fell;and, deadly pale, \r\nGroaned out his soul with gushing blood effused. \r\nMuch at that sight was Adam in his heart \r\nDismayed, and thus in haste to the Angel cried. \r\nO Teacher, some great mischief hath befallen \r\nTo that meek man, who well had sacrificed; \r\nIs piety thus and pure devotion paid? \r\nTo whom Michael thus, he also moved, replied. \r\nThese two are brethren, Adam, and to come \r\nOut of thy loins; the unjust the just hath slain, \r\nFor envy that his brother's offering found \r\nFrom Heaven acceptance; but the bloody fact \r\nWill be avenged; and the other's faith, approved, \r\nLose no reward; though here thou see him die, \r\nRolling in dust and gore.  To which our sire. \r\nAlas! both for the deed, and for the cause! \r\nBut have I now seen Death?  Is this the way \r\nI must return to native dust?  O sight \r\nOf terrour, foul and ugly to behold, \r\nHorrid to think, how horrible to feel! \r\nTo whom thus Michael.  Death thou hast seen \r\nIn his first shape on Man; but many shapes \r\nOf Death, and many are the ways that lead \r\nTo his grim cave, all dismal; yet to sense \r\nMore terrible at the entrance, than within. \r\nSome, as thou sawest, by violent stroke shall die; \r\nBy fire, flood, famine, by intemperance more \r\nIn meats and drinks, which on the earth shall bring \r\nDiseases dire, of which a monstrous crew \r\nBefore thee shall appear; that thou mayest know \r\nWhat misery the inabstinence of Eve \r\nShall bring on Men.  Immediately a place \r\nBefore his eyes appeared, sad, noisome, dark; \r\nA lazar-house it seemed; wherein were laid \r\nNumbers of all diseased; all maladies \r\nOf ghastly spasm, or racking torture, qualms \r\nOf heart-sick agony, all feverous kinds, \r\nConvulsions, epilepsies, fierce catarrhs, \r\nIntestine stone and ulcer, colick-pangs, \r\nDemoniack phrenzy, moaping melancholy, \r\nAnd moon-struck madness, pining atrophy, \r\nMarasmus, and wide-wasting pestilence, \r\nDropsies, and asthmas, and joint-racking rheums. \r\nDire was the tossing, deep the groans; Despair \r\nTended the sick busiest from couch to couch; \r\nAnd over them triumphant Death his dart \r\nShook, but delayed to strike, though oft invoked \r\nWith vows, as their chief good, and final hope. \r\nSight so deform what heart of rock could long \r\nDry-eyed behold?  Adam could not, but wept, \r\nThough not of woman born; compassion quelled \r\nHis best of man, and gave him up to tears \r\nA space, till firmer thoughts restrained excess; \r\nAnd, scarce recovering words, his plaint renewed. \r\nO miserable mankind, to what fall \r\nDegraded, to what wretched state reserved! \r\nBetter end here unborn.  Why is life given \r\nTo be thus wrested from us? rather, why \r\nObtruded on us thus? who, if we knew \r\nWhat we receive, would either no accept \r\nLife offered, or soon beg to lay it down; \r\nGlad to be so dismissed in peace.  Can thus \r\nThe image of God in Man, created once \r\nSo goodly and erect, though faulty since, \r\nTo such unsightly sufferings be debased \r\nUnder inhuman pains?  Why should not Man, \r\nRetaining still divine similitude \r\nIn part, from such deformities be free, \r\nAnd, for his Maker's image sake, exempt? \r\nTheir Maker's image, answered Michael, then \r\nForsook them, when themselves they vilified \r\nTo serve ungoverned Appetite; and took \r\nHis image whom they served, a brutish vice, \r\nInductive mainly to the sin of Eve. \r\nTherefore so abject is their punishment, \r\nDisfiguring not God's likeness, but their own; \r\nOr if his likeness, by themselves defaced; \r\nWhile they pervert pure Nature's healthful rules \r\nTo loathsome sickness; worthily, since they \r\nGod's image did not reverence in themselves. \r\nI yield it just, said Adam, and submit. \r\nBut is there yet no other way, besides \r\nThese painful passages, how we may come \r\nTo death, and mix with our connatural dust? \r\nThere is, said Michael, if thou well observe \r\nThe rule of Not too much; by temperance taught, \r\nIn what thou eatest and drinkest; seeking from thence \r\nDue nourishment, not gluttonous delight, \r\nTill many years over thy head return: \r\nSo mayest thou live; till, like ripe fruit, thou drop \r\nInto thy mother's lap; or be with ease \r\nGathered, nor harshly plucked; for death mature: \r\nThis is Old Age; but then, thou must outlive \r\nThy youth, thy strength, thy beauty; which will change \r\nTo withered, weak, and gray; thy senses then, \r\nObtuse, all taste of pleasure must forego, \r\nTo what thou hast; and, for the air of youth, \r\nHopeful and cheerful, in thy blood will reign \r\nA melancholy damp of cold and dry \r\nTo weigh thy spirits down, and last consume \r\nThe balm of life.  To whom our ancestor. \r\nHenceforth I fly not death, nor would prolong \r\nLife much; bent rather, how I may be quit, \r\nFairest and easiest, of this cumbrous charge; \r\nWhich I must keep till my appointed day \r\nOf rendering up, and patiently attend \r\nMy dissolution.  Michael replied. \r\nNor love thy life, nor hate; but what thou livest \r\nLive well; how long, or short, permit to Heaven: \r\nAnd now prepare thee for another sight. \r\nHe looked, and saw a spacious plain, whereon \r\nWere tents of various hue; by some, were herds \r\nOf cattle grazing; others, whence the sound \r\nOf instruments, that made melodious chime, \r\nWas heard, of harp and organ; and, who moved \r\nTheir stops and chords, was seen; his volant touch, \r\nInstinct through all proportions, low and high, \r\nFled and pursued transverse the resonant fugue. \r\nIn other part stood one who, at the forge \r\nLabouring, two massy clods of iron and brass \r\nHad melted, (whether found where casual fire \r\nHad wasted woods on mountain or in vale, \r\nDown to the veins of earth; thence gliding hot \r\nTo some cave's mouth; or whether washed by stream \r\nFrom underground;) the liquid ore he drained \r\nInto fit moulds prepared; from which he formed \r\nFirst his own tools; then, what might else be wrought \r\nFusil or graven in metal.  After these, \r\nBut on the hither side, a different sort \r\nFrom the high neighbouring hills, which was their seat, \r\nDown to the plain descended; by their guise \r\nJust men they seemed, and all their study bent \r\nTo worship God aright, and know his works \r\nNot hid; nor those things last, which might preserve \r\nFreedom and peace to Men; they on the plain \r\nLong had not walked, when from the tents, behold! \r\nA bevy of fair women, richly gay \r\nIn gems and wanton dress; to the harp they sung \r\nSoft amorous ditties, and in dance came on: \r\nThe men, though grave, eyed them; and let their eyes \r\nRove without rein; till, in the amorous net \r\nFast caught, they liked; and each his liking chose; \r\nAnd now of love they treat, till the evening-star, \r\nLove's harbinger, appeared; then, all in heat \r\nThey light the nuptial torch, and bid invoke \r\nHymen, then first to marriage rites invoked: \r\nWith feast and musick all the tents resound. \r\nSuch happy interview, and fair event \r\nOf love and youth not lost, songs, garlands, flowers, \r\nAnd charming symphonies, attached the heart \r\nOf Adam, soon inclined to admit delight, \r\nThe bent of nature; which he thus expressed. \r\nTrue opener of mine eyes, prime Angel blest; \r\nMuch better seems this vision, and more hope \r\nOf peaceful days portends, than those two past; \r\nThose were of hate and death, or pain much worse; \r\nHere Nature seems fulfilled in all her ends. \r\nTo whom thus Michael.  Judge not what is best \r\nBy pleasure, though to nature seeming meet; \r\nCreated, as thou art, to nobler end \r\nHoly and pure, conformity divine. \r\nThose tents thou sawest so pleasant, were the tents \r\nOf wickedness, wherein shall dwell his race \r\nWho slew his brother; studious they appear \r\nOf arts that polish life, inventers rare; \r\nUnmindful of their Maker, though his Spirit \r\nTaught them; but they his gifts acknowledged none. \r\nYet they a beauteous offspring shall beget; \r\nFor that fair female troop thou sawest, that seemed \r\nOf Goddesses, so blithe, so smooth, so gay, \r\nYet empty of all good wherein consists \r\nWoman's domestick honour and chief praise; \r\nBred only and completed to the taste \r\nOf lustful appetence, to sing, to dance, \r\nTo dress, and troll the tongue, and roll the eye: \r\nTo these that sober race of men, whose lives \r\nReligious titled them the sons of God, \r\nShall yield up all their virtue, all their fame \r\nIgnobly, to the trains and to the smiles \r\nOf these fair atheists; and now swim in joy, \r\nErelong to swim at large; and laugh, for which \r\nThe world erelong a world of tears must weep. \r\nTo whom thus Adam, of short joy bereft. \r\nO pity and shame, that they, who to live well \r\nEntered so fair, should turn aside to tread \r\nPaths indirect, or in the mid way faint! \r\nBut still I see the tenour of Man's woe \r\nHolds on the same, from Woman to begin. \r\nFrom Man's effeminate slackness it begins, \r\nSaid the Angel, who should better hold his place \r\nBy wisdom, and superiour gifts received. \r\nBut now prepare thee for another scene. \r\nHe looked, and saw wide territory spread \r\nBefore him, towns, and rural works between; \r\nCities of men with lofty gates and towers, \r\nConcourse in arms, fierce faces threatening war, \r\nGiants of mighty bone and bold emprise; \r\nPart wield their arms, part curb the foaming steed, \r\nSingle or in array of battle ranged \r\nBoth horse and foot, nor idly mustering stood; \r\nOne way a band select from forage drives \r\nA herd of beeves, fair oxen and fair kine, \r\nFrom a fat meadow ground; or fleecy flock, \r\nEwes and their bleating lambs over the plain, \r\nTheir booty; scarce with life the shepherds fly, \r\nBut call in aid, which makes a bloody fray; \r\nWith cruel tournament the squadrons join; \r\nWhere cattle pastured late, now scattered lies \r\nWith carcasses and arms the ensanguined field, \r\nDeserted:  Others to a city strong \r\nLay siege, encamped; by battery, scale, and mine, \r\nAssaulting; others from the wall defend \r\nWith dart and javelin, stones, and sulphurous fire; \r\nOn each hand slaughter, and gigantick deeds. \r\nIn other part the sceptered heralds call \r\nTo council, in the city-gates; anon \r\nGray-headed men and grave, with warriours mixed, \r\nAssemble, and harangues are heard; but soon, \r\nIn factious opposition; till at last, \r\nOf middle age one rising, eminent \r\nIn wise deport, spake much of right and wrong, \r\nOf justice, or religion, truth, and peace, \r\nAnd judgement from above: him old and young \r\nExploded, and had seized with violent hands, \r\nHad not a cloud descending snatched him thence \r\nUnseen amid the throng: so violence \r\nProceeded, and oppression, and sword-law, \r\nThrough all the plain, and refuge none was found. \r\nAdam was all in tears, and to his guide \r\nLamenting turned full sad; O!what are these, \r\nDeath's ministers, not men? who thus deal death \r\nInhumanly to men, and multiply \r\nTen thousandfold the sin of him who slew \r\nHis brother: for of whom such massacre \r\nMake they, but of their brethren; men of men \r\nBut who was that just man, whom had not Heaven \r\nRescued, had in his righteousness been lost? \r\nTo whom thus Michael.  These are the product \r\nOf those ill-mated marriages thou sawest; \r\nWhere good with bad were matched, who of themselves \r\nAbhor to join; and, by imprudence mixed, \r\nProduce prodigious births of body or mind. \r\nSuch were these giants, men of high renown; \r\nFor in those days might only shall be admired, \r\nAnd valour and heroick virtue called; \r\nTo overcome in battle, and subdue \r\nNations, and bring home spoils with infinite \r\nMan-slaughter, shall be held the highest pitch \r\nOf human glory; and for glory done \r\nOf triumph, to be styled great conquerours \r\nPatrons of mankind, Gods, and sons of Gods; \r\nDestroyers rightlier called, and plagues of men. \r\nThus fame shall be achieved, renown on earth; \r\nAnd what most merits fame, in silence hid. \r\nBut he, the seventh from thee, whom thou beheldst \r\nThe only righteous in a world preverse, \r\nAnd therefore hated, therefore so beset \r\nWith foes, for daring single to be just, \r\nAnd utter odious truth, that God would come \r\nTo judge them with his Saints; him the Most High \r\nRapt in a balmy cloud with winged steeds \r\nDid, as thou sawest, receive, to walk with God \r\nHigh in salvation and the climes of bliss, \r\nExempt from death; to show thee what reward \r\nAwaits the good; the rest what punishment; \r\nWhich now direct thine eyes and soon behold. \r\nHe looked, and saw the face of things quite changed; \r\nThe brazen throat of war had ceased to roar; \r\nAll now was turned to jollity and game, \r\nTo luxury and riot, feast and dance; \r\nMarrying or prostituting, as befel, \r\nRape or adultery, where passing fair \r\nAllured them; thence from cups to civil broils. \r\nAt length a reverend sire among them came, \r\nAnd of their doings great dislike declared, \r\nAnd testified against their ways; he oft \r\nFrequented their assemblies, whereso met, \r\nTriumphs or festivals; and to them preached \r\nConversion and repentance, as to souls \r\nIn prison, under judgements imminent: \r\nBut all in vain: which when he saw, he ceased \r\nContending, and removed his tents far off; \r\nThen, from the mountain hewing timber tall, \r\nBegan to build a vessel of huge bulk; \r\nMeasured by cubit, length, and breadth, and highth; \r\nSmeared round with pitch; and in the side a door \r\nContrived; and of provisions laid in large, \r\nFor man and beast: when lo, a wonder strange! \r\nOf every beast, and bird, and insect small, \r\nCame sevens, and pairs; and entered in as taught \r\nTheir order: last the sire and his three sons, \r\nWith their four wives; and God made fast the door. \r\nMean while the south-wind rose, and, with black wings \r\nWide-hovering, all the clouds together drove \r\nFrom under Heaven; the hills to their supply \r\nVapour, and exhalation dusk and moist, \r\nSent up amain; and now the thickened sky \r\nLike a dark cieling stood; down rushed the rain \r\nImpetuous; and continued, till the earth \r\nNo more was seen: the floating vessel swum \r\nUplifted, and secure with beaked prow \r\nRode tilting o'er the waves; all dwellings else \r\nFlood overwhelmed, and them with all their pomp \r\nDeep under water rolled; sea covered sea, \r\nSea without shore; and in their palaces, \r\nWhere luxury late reigned, sea-monsters whelped \r\nAnd stabled; of mankind, so numerous late, \r\nAll left, in one small bottom swum imbarked. \r\nHow didst thou grieve then, Adam, to behold \r\nThe end of all thy offspring, end so sad, \r\nDepopulation!  Thee another flood, \r\nOf tears and sorrow a flood, thee also drowned, \r\nAnd sunk thee as thy sons; till, gently reared \r\nBy the Angel, on thy feet thou stoodest at last, \r\nThough comfortless; as when a father mourns \r\nHis children, all in view destroyed at once; \r\nAnd scarce to the Angel utter'dst thus thy plaint. \r\nO visions ill foreseen!  Better had I \r\nLived ignorant of future! so had borne \r\nMy part of evil only, each day's lot \r\nEnough to bear; those now, that were dispensed \r\nThe burden of many ages, on me light \r\nAt once, by my foreknowledge gaining birth \r\nAbortive, to torment me ere their being, \r\nWith thought that they must be.  Let no man seek \r\nHenceforth to be foretold, what shall befall \r\nHim or his children; evil he may be sure, \r\nWhich neither his foreknowing can prevent; \r\nAnd he the future evil shall no less \r\nIn apprehension than in substance feel, \r\nGrievous to bear: but that care now is past, \r\nMan is not whom to warn: those few escaped \r\nFamine and anguish will at last consume, \r\nWandering that watery desart:  I had hope, \r\nWhen violence was ceased, and war on earth, \r\nAll would have then gone well; peace would have crowned \r\nWith length of happy days the race of Man; \r\nBut I was far deceived; for now I see \r\nPeace to corrupt no less than war to waste. \r\nHow comes it thus? unfold, celestial Guide, \r\nAnd whether here the race of Man will end. \r\nTo whom thus Michael.  Those, whom last thou sawest \r\nIn triumph and luxurious wealth, are they \r\nFirst seen in acts of prowess eminent \r\nAnd great exploits, but of true virtue void; \r\nWho, having spilt much blood, and done much wast \r\nSubduing nations, and achieved thereby \r\nFame in the world, high titles, and rich prey; \r\nShall change their course to pleasure, ease, and sloth, \r\nSurfeit, and lust; till wantonness and pride \r\nRaise out of friendship hostile deeds in peace. \r\nThe conquered also, and enslaved by war, \r\nShall, with their freedom lost, all virtue lose \r\nAnd fear of God; from whom their piety feigned \r\nIn sharp contest of battle found no aid \r\nAgainst invaders; therefore, cooled in zeal, \r\nThenceforth shall practice how to live secure, \r\nWorldly or dissolute, on what their lords \r\nShall leave them to enjoy; for the earth shall bear \r\nMore than enough, that temperance may be tried: \r\nSo all shall turn degenerate, all depraved; \r\nJustice and temperance, truth and faith, forgot; \r\nOne man except, the only son of light \r\nIn a dark age, against example good, \r\nAgainst allurement, custom, and a world \r\nOffended: fearless of reproach and scorn, \r\nThe grand-child, with twelve sons encreased, departs \r\nFrom Canaan, to a land hereafter called \r\nEgypt, divided by the river Nile; \r\nSee where it flows, disgorging at seven mouths \r\nInto the sea:  To sojourn in that land \r\nHe comes, invited by a younger son \r\nIn time of dearth; a son, whose worthy deeds \r\nRaise him to be the second in that realm \r\nOf Pharaoh:  There he dies, and leaves his race \r\nGrowing into a nation, and now grown \r\nSuspected to a sequent king, who seeks \r\nTo stop their overgrowth, as inmate guests \r\nOr violence, he of their wicked ways \r\nShall them admonish; and before them set \r\nThe paths of righteousness, how much more safe \r\nAnd full of peace; denouncing wrath to come \r\nOn their impenitence; and shall return \r\nOf them derided, but of God observed \r\nThe one just man alive; by his command \r\nShall build a wonderous ark, as thou beheldst, \r\nTo save himself, and houshold, from amidst \r\nA world devote to universal wrack. \r\nNo sooner he, with them of man and beast \r\nSelect for life, shall in the ark be lodged, \r\nAnd sheltered round; but all the cataracts \r\nOf Heaven set open on the Earth shall pour \r\nRain, day and night; all fountains of the deep, \r\nBroke up, shall heave the ocean to usurp \r\nBeyond all bounds; till inundation rise \r\nAbove the highest hills:  Then shall this mount \r\nOf Paradise by might of waves be moved \r\nOut of his place, pushed by the horned flood, \r\nWith all his verdure spoiled, and trees adrift, \r\nDown the great river to the opening gulf, \r\nAnd there take root an island salt and bare, \r\nThe haunt of seals, and orcs, and sea-mews' clang: \r\nTo teach thee that God attributes to place \r\nNo sanctity, if none be thither brought \r\nBy men who there frequent, or therein dwell. \r\nAnd now, what further shall ensue, behold. \r\nHe looked, and saw the ark hull on the flood, \r\nWhich now abated; for the clouds were fled, \r\nDriven by a keen north-wind, that, blowing dry, \r\nWrinkled the face of deluge, as decayed; \r\nAnd the clear sun on his wide watery glass \r\nGazed hot, and of the fresh wave largely drew, \r\nAs after thirst; which made their flowing shrink \r\nFrom standing lake to tripping ebb, that stole \r\nWith soft foot towards the deep; who now had stopt \r\nHis sluces, as the Heaven his windows shut. \r\nThe ark no more now floats, but seems on ground, \r\nFast on the top of some high mountain fixed. \r\nAnd now the tops of hills, as rocks, appear; \r\nWith clamour thence the rapid currents drive, \r\nTowards the retreating sea, their furious tide. \r\nForthwith from out the ark a raven flies, \r\nAnd after him, the surer messenger, \r\nA dove sent forth once and again to spy \r\nGreen tree or ground, whereon his foot may light: \r\nThe second time returning, in his bill \r\nAn olive-leaf he brings, pacifick sign: \r\nAnon dry ground appears, and from his ark \r\nThe ancient sire descends, with all his train; \r\nThen with uplifted hands, and eyes devout, \r\nGrateful to Heaven, over his head beholds \r\nA dewy cloud, and in the cloud a bow \r\nConspicuous with three lifted colours gay, \r\nBetokening peace from God, and covenant new. \r\nWhereat the heart of Adam, erst so sad, \r\nGreatly rejoiced; and thus his joy broke forth. \r\nO thou, who future things canst represent \r\nAs present, heavenly Instructer!  I revive \r\nAt this last sight; assured that Man shall live, \r\nWith all the creatures, and their seed preserve. \r\nFar less I now lament for one whole world \r\nOf wicked sons destroyed, than I rejoice \r\nFor one man found so perfect, and so just, \r\nThat God vouchsafes to raise another world \r\nFrom him, and all his anger to forget. \r\nBut say, what mean those coloured streaks in Heaven \r\nDistended, as the brow of God appeased? \r\nOr serve they, as a flowery verge, to bind \r\nThe fluid skirts of that same watery cloud, \r\nLest it again dissolve, and shower the earth? \r\nTo whom the Arch-Angel.  Dextrously thou aimest; \r\nSo willingly doth God remit his ire, \r\nThough late repenting him of Man depraved; \r\nGrieved at his heart, when looking down he saw \r\nThe whole earth filled with violence, and all flesh \r\nCorrupting each their way; yet, those removed, \r\nSuch grace shall one just man find in his sight, \r\nThat he relents, not to blot out mankind; \r\nAnd makes a covenant never to destroy \r\nThe earth again by flood; nor let the sea \r\nSurpass his bounds; nor rain to drown the world, \r\nWith man therein or beast; but, when he brings \r\nOver the earth a cloud, will therein set \r\nHis triple-coloured bow, whereon to look, \r\nAnd call to mind his covenant: Day and night, \r\nSeed-time and harvest, heat and hoary frost, \r\nShall hold their course; till fire purge all things new, \r\nBoth Heaven and Earth, wherein the just shall dwell. \r\n \r\n \r\n \r\nBook XII                                                         \r\n \r\n \r\nAs one who in his journey bates at noon, \r\nThough bent on speed; so here the Arch-Angel paused \r\nBetwixt the world destroyed and world restored, \r\nIf Adam aught perhaps might interpose; \r\nThen, with transition sweet, new speech resumes. \r\nThus thou hast seen one world begin, and end; \r\nAnd Man, as from a second stock, proceed. \r\nMuch thou hast yet to see; but I perceive \r\nThy mortal sight to fail; objects divine \r\nMust needs impair and weary human sense: \r\nHenceforth what is to come I will relate; \r\nThou therefore give due audience, and attend. \r\nThis second source of Men, while yet but few, \r\nAnd while the dread of judgement past remains \r\nFresh in their minds, fearing the Deity, \r\nWith some regard to what is just and right \r\nShall lead their lives, and multiply apace; \r\nLabouring the soil, and reaping plenteous crop, \r\nCorn, wine, and oil; and, from the herd or flock, \r\nOft sacrificing bullock, lamb, or kid, \r\nWith large wine-offerings poured, and sacred feast, \r\nShall spend their days in joy unblamed; and dwell \r\nLong time in peace, by families and tribes, \r\nUnder paternal rule: till one shall rise \r\nOf proud ambitious heart; who, not content \r\nWith fair equality, fraternal state, \r\nWill arrogate dominion undeserved \r\nOver his brethren, and quite dispossess \r\nConcord and law of nature from the earth; \r\nHunting (and men not beasts shall be his game) \r\nWith war, and hostile snare, such as refuse \r\nSubjection to his empire tyrannous: \r\nA mighty hunter thence he shall be styled \r\nBefore the Lord; as in despite of Heaven, \r\nOr from Heaven, claiming second sovranty; \r\nAnd from rebellion shall derive his name, \r\nThough of rebellion others he accuse. \r\nHe with a crew, whom like ambition joins \r\nWith him or under him to tyrannize, \r\nMarching from Eden towards the west, shall find \r\nThe plain, wherein a black bituminous gurge \r\nBoils out from under ground, the mouth of Hell: \r\nOf brick, and of that stuff, they cast to build \r\nA city and tower, whose top may reach to Heaven; \r\nAnd get themselves a name; lest, far dispersed \r\nIn foreign lands, their memory be lost; \r\nRegardless whether good or evil fame. \r\nBut God, who oft descends to visit men \r\nUnseen, and through their habitations walks \r\nTo mark their doings, them beholding soon, \r\nComes down to see their city, ere the tower \r\nObstruct Heaven-towers, and in derision sets \r\nUpon their tongues a various spirit, to rase \r\nQuite out their native language; and, instead, \r\nTo sow a jangling noise of words unknown: \r\nForthwith a hideous gabble rises loud, \r\nAmong the builders; each to other calls \r\nNot understood; till hoarse, and all in rage, \r\nAs mocked they storm: great laughter was in Heaven, \r\nAnd looking down, to see the hubbub strange, \r\nAnd hear the din:  Thus was the building left \r\nRidiculous, and the work Confusion named. \r\nWhereto thus Adam, fatherly displeased. \r\nO execrable son! so to aspire \r\nAbove his brethren; to himself assuming \r\nAuthority usurped, from God not given: \r\nHe gave us only over beast, fish, fowl, \r\nDominion absolute; that right we hold \r\nBy his donation; but man over men \r\nHe made not lord; such title to himself \r\nReserving, human left from human free. \r\nBut this usurper his encroachment proud \r\nStays not on Man; to God his tower intends \r\nSiege and defiance:  Wretched man!what food \r\nWill he convey up thither, to sustain \r\nHimself and his rash army; where thin air \r\nAbove the clouds will pine his entrails gross, \r\nAnd famish him of breath, if not of bread? \r\nTo whom thus Michael.  Justly thou abhorrest \r\nThat son, who on the quiet state of men \r\nSuch trouble brought, affecting to subdue \r\nRational liberty; yet know withal, \r\nSince thy original lapse, true liberty \r\nIs lost, which always with right reason dwells \r\nTwinned, and from her hath no dividual being: \r\nReason in man obscured, or not obeyed, \r\nImmediately inordinate desires, \r\nAnd upstart passions, catch the government \r\nFrom reason; and to servitude reduce \r\nMan, till then free.  Therefore, since he permits \r\nWithin himself unworthy powers to reign \r\nOver free reason, God, in judgement just, \r\nSubjects him from without to violent lords; \r\nWho oft as undeservedly enthrall \r\nHis outward freedom:  Tyranny must be; \r\nThough to the tyrant thereby no excuse. \r\nYet sometimes nations will decline so low \r\nFrom virtue, which is reason, that no wrong, \r\nBut justice, and some fatal curse annexed, \r\nDeprives them of their outward liberty; \r\nTheir inward lost:  Witness the irreverent son \r\nOf him who built the ark; who, for the shame \r\nDone to his father, heard this heavy curse, \r\nServant of servants, on his vicious race. \r\nThus will this latter, as the former world, \r\nStill tend from bad to worse; till God at last, \r\nWearied with their iniquities, withdraw \r\nHis presence from among them, and avert \r\nHis holy eyes; resolving from thenceforth \r\nTo leave them to their own polluted ways; \r\nAnd one peculiar nation to select \r\nFrom all the rest, of whom to be invoked, \r\nA nation from one faithful man to spring: \r\nHim on this side Euphrates yet residing, \r\nBred up in idol-worship:  O, that men \r\n(Canst thou believe?) should be so stupid grown, \r\nWhile yet the patriarch lived, who 'scaped the flood, \r\nAs to forsake the living God, and fall \r\nTo worship their own work in wood and stone \r\nFor Gods!  Yet him God the Most High vouchsafes \r\nTo call by vision, from his father's house, \r\nHis kindred, and false Gods, into a land \r\nWhich he will show him; and from him will raise \r\nA mighty nation; and upon him shower \r\nHis benediction so, that in his seed \r\nAll nations shall be blest: he straight obeys; \r\nNot knowing to what land, yet firm believes: \r\nI see him, but thou canst not, with what faith \r\nHe leaves his Gods, his friends, and native soil, \r\nUr of Chaldaea, passing now the ford \r\nTo Haran; after him a cumbrous train \r\nOf herds and flocks, and numerous servitude; \r\nNot wandering poor, but trusting all his wealth \r\nWith God, who called him, in a land unknown. \r\nCanaan he now attains; I see his tents \r\nPitched about Sechem, and the neighbouring plain \r\nOf Moreh; there by promise he receives \r\nGift to his progeny of all that land, \r\nFrom Hameth northward to the Desart south; \r\n(Things by their names I call, though yet unnamed;) \r\nFrom Hermon east to the great western Sea; \r\nMount Hermon, yonder sea; each place behold \r\nIn prospect, as I point them; on the shore \r\nMount Carmel; here, the double-founted stream, \r\nJordan, true limit eastward; but his sons \r\nShall dwell to Senir, that long ridge of hills. \r\nThis ponder, that all nations of the earth \r\nShall in his seed be blessed:  By that seed \r\nIs meant thy great Deliverer, who shall bruise \r\nThe Serpent's head; whereof to thee anon \r\nPlainlier shall be revealed.  This patriarch blest, \r\nWhom faithful Abraham due time shall call, \r\nA son, and of his son a grand-child, leaves; \r\nLike him in faith, in wisdom, and renown: \r\nThe grandchild, with twelve sons increased, departs \r\nFrom Canaan to a land hereafter called \r\nEgypt, divided by the river Nile \r\nSee where it flows, disgorging at seven mouths \r\nInto the sea. To sojourn in that land \r\nHe comes, invited by a younger son \r\nIn time of dearth, a son whose worthy deeds \r\nRaise him to be the second in that realm \r\nOf Pharaoh. There he dies, and leaves his race \r\nGrowing into a nation, and now grown \r\nSuspected to a sequent king, who seeks \r\nTo stop their overgrowth, as inmate guests \r\nToo numerous; whence of guests he makes them slaves \r\nInhospitably, and kills their infant males: \r\nTill by two brethren (these two brethren call \r\nMoses and Aaron) sent from God to claim \r\nHis people from enthralment, they return, \r\nWith glory and spoil, back to their promised land. \r\nBut first, the lawless tyrant, who denies \r\nTo know their God, or message to regard, \r\nMust be compelled by signs and judgements dire; \r\nTo blood unshed the rivers must be turned; \r\nFrogs, lice, and flies, must all his palace fill \r\nWith loathed intrusion, and fill all the land; \r\nHis cattle must of rot and murren die; \r\nBotches and blains must all his flesh emboss, \r\nAnd all his people; thunder mixed with hail, \r\nHail mixed with fire, must rend the Egyptians sky, \r\nAnd wheel on the earth, devouring where it rolls; \r\nWhat it devours not, herb, or fruit, or grain, \r\nA darksome cloud of locusts swarming down \r\nMust eat, and on the ground leave nothing green; \r\nDarkness must overshadow all his bounds, \r\nPalpable darkness, and blot out three days; \r\nLast, with one midnight stroke, all the first-born \r\nOf Egypt must lie dead.  Thus with ten wounds \r\nThe river-dragon tamed at length submits \r\nTo let his sojourners depart, and oft \r\nHumbles his stubborn heart; but still, as ice \r\nMore hardened after thaw; till, in his rage \r\nPursuing whom he late dismissed, the sea \r\nSwallows him with his host; but them lets pass, \r\nAs on dry land, between two crystal walls; \r\nAwed by the rod of Moses so to stand \r\nDivided, till his rescued gain their shore: \r\nSuch wondrous power God to his saint will lend, \r\nThough present in his Angel; who shall go \r\nBefore them in a cloud, and pillar of fire; \r\nBy day a cloud, by night a pillar of fire; \r\nTo guide them in their journey, and remove \r\nBehind them, while the obdurate king pursues: \r\nAll night he will pursue; but his approach \r\nDarkness defends between till morning watch; \r\nThen through the fiery pillar, and the cloud, \r\nGod looking forth will trouble all his host, \r\nAnd craze their chariot-wheels: when by command \r\nMoses once more his potent rod extends \r\nOver the sea; the sea his rod obeys; \r\nOn their embattled ranks the waves return, \r\nAnd overwhelm their war:  The race elect \r\nSafe toward Canaan from the shore advance \r\nThrough the wild Desart, not the readiest way; \r\nLest, entering on the Canaanite alarmed, \r\nWar terrify them inexpert, and fear \r\nReturn them back to Egypt, choosing rather \r\nInglorious life with servitude; for life \r\nTo noble and ignoble is more sweet \r\nUntrained in arms, where rashness leads not on. \r\nThis also shall they gain by their delay \r\nIn the wide wilderness; there they shall found \r\nTheir government, and their great senate choose \r\nThrough the twelve tribes, to rule by laws ordained: \r\nGod from the mount of Sinai, whose gray top \r\nShall tremble, he descending, will himself \r\nIn thunder, lightning, and loud trumpets' sound, \r\nOrdain them laws; part, such as appertain \r\nTo civil justice; part, religious rites \r\nOf sacrifice; informing them, by types \r\nAnd shadows, of that destined Seed to bruise \r\nThe Serpent, by what means he shall achieve \r\nMankind's deliverance.  But the voice of God \r\nTo mortal ear is dreadful:  They beseech \r\nThat Moses might report to them his will, \r\nAnd terrour cease; he grants what they besought, \r\nInstructed that to God is no access \r\nWithout Mediator, whose high office now \r\nMoses in figure bears; to introduce \r\nOne greater, of whose day he shall foretel, \r\nAnd all the Prophets in their age the times \r\nOf great Messiah shall sing.  Thus, laws and rites \r\nEstablished, such delight hath God in Men \r\nObedient to his will, that he vouchsafes \r\nAmong them to set up his tabernacle; \r\nThe Holy One with mortal Men to dwell: \r\nBy his prescript a sanctuary is framed \r\nOf cedar, overlaid with gold; therein \r\nAn ark, and in the ark his testimony, \r\nThe records of his covenant; over these \r\nA mercy-seat of gold, between the wings \r\nOf two bright Cherubim; before him burn \r\nSeven lamps as in a zodiack representing \r\nThe heavenly fires; over the tent a cloud \r\nShall rest by day, a fiery gleam by night; \r\nSave when they journey, and at length they come, \r\nConducted by his Angel, to the land \r\nPromised to Abraham and his seed:--The rest \r\nWere long to tell; how many battles fought \r\nHow many kings destroyed; and kingdoms won; \r\nOr how the sun shall in mid Heaven stand still \r\nA day entire, and night's due course adjourn, \r\nMan's voice commanding, 'Sun, in Gibeon stand, \r\n'And thou moon in the vale of Aialon, \r\n'Till Israel overcome! so call the third \r\nFrom Abraham, son of Isaac; and from him \r\nHis whole descent, who thus shall Canaan win. \r\nHere Adam interposed.  O sent from Heaven, \r\nEnlightener of my darkness, gracious things \r\nThou hast revealed; those chiefly, which concern \r\nJust Abraham and his seed: now first I find \r\nMine eyes true-opening, and my heart much eased; \r\nErewhile perplexed with thoughts, what would become \r\nOf me and all mankind:  But now I see \r\nHis day, in whom all nations shall be blest; \r\nFavour unmerited by me, who sought \r\nForbidden knowledge by forbidden means. \r\nThis yet I apprehend not, why to those \r\nAmong whom God will deign to dwell on earth \r\nSo many and so various laws are given; \r\nSo many laws argue so many sins \r\nAmong them; how can God with such reside? \r\nTo whom thus Michael.  Doubt not but that sin \r\nWill reign among them, as of thee begot; \r\nAnd therefore was law given them, to evince \r\nTheir natural pravity, by stirring up \r\nSin against law to fight: that when they see \r\nLaw can discover sin, but not remove, \r\nSave by those shadowy expiations weak, \r\nThe blood of bulls and goats, they may conclude \r\nSome blood more precious must be paid for Man; \r\nJust for unjust; that, in such righteousness \r\nTo them by faith imputed, they may find \r\nJustification towards God, and peace \r\nOf conscience; which the law by ceremonies \r\nCannot appease; nor Man the mortal part \r\nPerform; and, not performing, cannot live. \r\nSo law appears imperfect; and but given \r\nWith purpose to resign them, in full time, \r\nUp to a better covenant; disciplined \r\nFrom shadowy types to truth; from flesh to spirit; \r\nFrom imposition of strict laws to free \r\nAcceptance of large grace; from servile fear \r\nTo filial; works of law to works of faith. \r\nAnd therefore shall not Moses, though of God \r\nHighly beloved, being but the minister \r\nOf law, his people into Canaan lead; \r\nBut Joshua, whom the Gentiles Jesus call, \r\nHis name and office bearing, who shall quell \r\nThe adversary-Serpent, and bring back \r\nThrough the world's wilderness long-wandered Man \r\nSafe to eternal Paradise of rest. \r\nMean while they, in their earthly Canaan placed, \r\nLong time shall dwell and prosper, but when sins \r\nNational interrupt their publick peace, \r\nProvoking God to raise them enemies; \r\nFrom whom as oft he saves them penitent \r\nBy Judges first, then under Kings; of whom \r\nThe second, both for piety renowned \r\nAnd puissant deeds, a promise shall receive \r\nIrrevocable, that his regal throne \r\nFor ever shall endure; the like shall sing \r\nAll Prophecy, that of the royal stock \r\nOf David (so I name this king) shall rise \r\nA Son, the Woman's seed to thee foretold, \r\nForetold to Abraham, as in whom shall trust \r\nAll nations; and to kings foretold, of kings \r\nThe last; for of his reign shall be no end. \r\nBut first, a long succession must ensue; \r\nAnd his next son, for wealth and wisdom famed, \r\nThe clouded ark of God, till then in tents \r\nWandering, shall in a glorious temple enshrine. \r\nSuch follow him, as shall be registered \r\nPart good, part bad; of bad the longer scroll; \r\nWhose foul idolatries, and other faults \r\nHeaped to the popular sum, will so incense \r\nGod, as to leave them, and expose their land, \r\nTheir city, his temple, and his holy ark, \r\nWith all his sacred things, a scorn and prey \r\nTo that proud city, whose high walls thou sawest \r\nLeft in confusion; Babylon thence called. \r\nThere in captivity he lets them dwell \r\nThe space of seventy years; then brings them back, \r\nRemembering mercy, and his covenant sworn \r\nTo David, stablished as the days of Heaven. \r\nReturned from Babylon by leave of kings \r\nTheir lords, whom God disposed, the house of God \r\nThey first re-edify; and for a while \r\nIn mean estate live moderate; till, grown \r\nIn wealth and multitude, factious they grow; \r\nBut first among the priests dissention springs, \r\nMen who attend the altar, and should most \r\nEndeavour peace: their strife pollution brings \r\nUpon the temple itself: at last they seise \r\nThe scepter, and regard not David's sons; \r\nThen lose it to a stranger, that the true \r\nAnointed King Messiah might be born \r\nBarred of his right; yet at his birth a star, \r\nUnseen before in Heaven, proclaims him come; \r\nAnd guides the eastern sages, who inquire \r\nHis place, to offer incense, myrrh, and gold: \r\nHis place of birth a solemn Angel tells \r\nTo simple shepherds, keeping watch by night; \r\nThey gladly thither haste, and by a quire \r\nOf squadroned Angels hear his carol sung. \r\nA virgin is his mother, but his sire \r\nThe power of the Most High:  He shall ascend \r\nThe throne hereditary, and bound his reign \r\nWith Earth's wide bounds, his glory with the Heavens. \r\nHe ceased, discerning Adam with such joy \r\nSurcharged, as had like grief been dewed in tears, \r\nWithout the vent of words; which these he breathed. \r\nO prophet of glad tidings, finisher \r\nOf utmost hope! now clear I understand \r\nWhat oft my steadiest thoughts have searched in vain; \r\nWhy our great Expectation should be called \r\nThe seed of Woman:  Virgin Mother, hail, \r\nHigh in the love of Heaven; yet from my loins \r\nThou shalt proceed, and from thy womb the Son \r\nOf God Most High: so God with Man unites! \r\nNeeds must the Serpent now his capital bruise \r\nExpect with mortal pain:  Say where and when \r\nTheir fight, what stroke shall bruise the victor's heel. \r\nTo whom thus Michael.  Dream not of their fight, \r\nAs of a duel, or the local wounds \r\nOf head or heel:  Not therefore joins the Son \r\nManhood to Godhead, with more strength to foil \r\nThy enemy; nor so is overcome \r\nSatan, whose fall from Heaven, a deadlier bruise, \r\nDisabled, not to give thee thy death's wound: \r\nWhich he, who comes thy Saviour, shall recure, \r\nNot by destroying Satan, but his works \r\nIn thee, and in thy seed:  Nor can this be, \r\nBut by fulfilling that which thou didst want, \r\nObedience to the law of God, imposed \r\nOn penalty of death, and suffering death; \r\nThe penalty to thy transgression due, \r\nAnd due to theirs which out of thine will grow: \r\nSo only can high Justice rest appaid. \r\nThe law of God exact he shall fulfil \r\nBoth by obedience and by love, though love \r\nAlone fulfil the law; thy punishment \r\nHe shall endure, by coming in the flesh \r\nTo a reproachful life, and cursed death; \r\nProclaiming life to all who shall believe \r\nIn his redemption; and that his obedience, \r\nImputed, becomes theirs by faith; his merits \r\nTo save them, not their own, though legal, works. \r\nFor this he shall live hated, be blasphemed, \r\nSeised on by force, judged, and to death condemned \r\nA shameful and accursed, nailed to the cross \r\nBy his own nation; slain for bringing life: \r\nBut to the cross he nails thy enemies, \r\nThe law that is against thee, and the sins \r\nOf all mankind, with him there crucified, \r\nNever to hurt them more who rightly trust \r\nIn this his satisfaction; so he dies, \r\nBut soon revives; Death over him no power \r\nShall long usurp; ere the third dawning light \r\nReturn, the stars of morn shall see him rise \r\nOut of his grave, fresh as the dawning light, \r\nThy ransom paid, which Man from death redeems, \r\nHis death for Man, as many as offered life \r\nNeglect not, and the benefit embrace \r\nBy faith not void of works:  This God-like act \r\nAnnuls thy doom, the death thou shouldest have died, \r\nIn sin for ever lost from life; this act \r\nShall bruise the head of Satan, crush his strength, \r\nDefeating Sin and Death, his two main arms; \r\nAnd fix far deeper in his head their stings \r\nThan temporal death shall bruise the victor's heel, \r\nOr theirs whom he redeems; a death, like sleep, \r\nA gentle wafting to immortal life. \r\nNor after resurrection shall he stay \r\nLonger on earth, than certain times to appear \r\nTo his disciples, men who in his life \r\nStill followed him; to them shall leave in charge \r\nTo teach all nations what of him they learned \r\nAnd his salvation; them who shall believe \r\nBaptizing in the profluent stream, the sign \r\nOf washing them from guilt of sin to life \r\nPure, and in mind prepared, if so befall, \r\nFor death, like that which the Redeemer died. \r\nAll nations they shall teach; for, from that day, \r\nNot only to the sons of Abraham's loins \r\nSalvation shall be preached, but to the sons \r\nOf Abraham's faith wherever through the world; \r\nSo in his seed all nations shall be blest. \r\nThen to the Heaven of Heavens he shall ascend \r\nWith victory, triumphing through the air \r\nOver his foes and thine; there shall surprise \r\nThe Serpent, prince of air, and drag in chains \r\nThrough all his realm, and there confounded leave; \r\nThen enter into glory, and resume \r\nHis seat at God's right hand, exalted high \r\nAbove all names in Heaven; and thence shall come, \r\nWhen this world's dissolution shall be ripe, \r\nWith glory and power to judge both quick and dead; \r\nTo judge the unfaithful dead, but to reward \r\nHis faithful, and receive them into bliss, \r\nWhether in Heaven or Earth; for then the Earth \r\nShall all be Paradise, far happier place \r\nThan this of Eden, and far happier days. \r\nSo spake the Arch-Angel Michael; then paused, \r\nAs at the world's great period; and our sire, \r\nReplete with joy and wonder, thus replied. \r\nO Goodness infinite, Goodness immense! \r\nThat all this good of evil shall produce, \r\nAnd evil turn to good; more wonderful \r\nThan that which by creation first brought forth \r\nLight out of darkness!  Full of doubt I stand, \r\nWhether I should repent me now of sin \r\nBy me done, and occasioned; or rejoice \r\nMuch more, that much more good thereof shall spring; \r\nTo God more glory, more good-will to Men \r\nFrom God, and over wrath grace shall abound. \r\nBut say, if our Deliverer up to Heaven \r\nMust re-ascend, what will betide the few \r\nHis faithful, left among the unfaithful herd, \r\nThe enemies of truth?  Who then shall guide \r\nHis people, who defend?  Will they not deal \r\nWorse with his followers than with him they dealt? \r\nBe sure they will, said the Angel; but from Heaven \r\nHe to his own a Comforter will send, \r\nThe promise of the Father, who shall dwell \r\nHis Spirit within them; and the law of faith, \r\nWorking through love, upon their hearts shall write, \r\nTo guide them in all truth; and also arm \r\nWith spiritual armour, able to resist \r\nSatan's assaults, and quench his fiery darts; \r\nWhat man can do against them, not afraid, \r\nThough to the death; against such cruelties \r\nWith inward consolations recompensed, \r\nAnd oft supported so as shall amaze \r\nTheir proudest persecutors:  For the Spirit, \r\nPoured first on his Apostles, whom he sends \r\nTo evangelize the nations, then on all \r\nBaptized, shall them with wonderous gifts endue \r\nTo speak all tongues, and do all miracles, \r\nAs did their Lord before them.  Thus they win \r\nGreat numbers of each nation to receive \r\nWith joy the tidings brought from Heaven:  At length \r\nTheir ministry performed, and race well run, \r\nTheir doctrine and their story written left, \r\nThey die; but in their room, as they forewarn, \r\nWolves shall succeed for teachers, grievous wolves, \r\nWho all the sacred mysteries of Heaven \r\nTo their own vile advantages shall turn \r\nOf lucre and ambition; and the truth \r\nWith superstitions and traditions taint, \r\nLeft only in those written records pure, \r\nThough not but by the Spirit understood. \r\nThen shall they seek to avail themselves of names, \r\nPlaces, and titles, and with these to join \r\nSecular power; though feigning still to act \r\nBy spiritual, to themselves appropriating \r\nThe Spirit of God, promised alike and given \r\nTo all believers; and, from that pretence, \r\nSpiritual laws by carnal power shall force \r\nOn every conscience; laws which none shall find \r\nLeft them inrolled, or what the Spirit within \r\nShall on the heart engrave.  What will they then \r\nBut force the Spirit of Grace itself, and bind \r\nHis consort Liberty? what, but unbuild \r\nHis living temples, built by faith to stand, \r\nTheir own faith, not another's? for, on earth, \r\nWho against faith and conscience can be heard \r\nInfallible? yet many will presume: \r\nWhence heavy persecution shall arise \r\nOn all, who in the worship persevere \r\nOf spirit and truth; the rest, far greater part, \r\nWill deem in outward rites and specious forms \r\nReligion satisfied; Truth shall retire \r\nBestuck with slanderous darts, and works of faith \r\nRarely be found:  So shall the world go on, \r\nTo good malignant, to bad men benign; \r\nUnder her own weight groaning; till the day \r\nAppear of respiration to the just, \r\nAnd vengeance to the wicked, at return \r\nOf him so lately promised to thy aid, \r\nThe Woman's Seed; obscurely then foretold, \r\nNow ampler known thy Saviour and thy Lord; \r\nLast, in the clouds, from Heaven to be revealed \r\nIn glory of the Father, to dissolve \r\nSatan with his perverted world; then raise \r\nFrom the conflagrant mass, purged and refined, \r\nNew Heavens, new Earth, ages of endless date, \r\nFounded in righteousness, and peace, and love; \r\nTo bring forth fruits, joy and eternal bliss. \r\nHe ended; and thus Adam last replied. \r\nHow soon hath thy prediction, Seer blest, \r\nMeasured this transient world, the race of time, \r\nTill time stand fixed!  Beyond is all abyss, \r\nEternity, whose end no eye can reach. \r\nGreatly-instructed I shall hence depart; \r\nGreatly in peace of thought; and have my fill \r\nOf knowledge, what this vessel can contain; \r\nBeyond which was my folly to aspire. \r\nHenceforth I learn, that to obey is best, \r\nAnd love with fear the only God; to walk \r\nAs in his presence; ever to observe \r\nHis providence; and on him sole depend, \r\nMerciful over all his works, with good \r\nStill overcoming evil, and by small \r\nAccomplishing great things, by things deemed weak \r\nSubverting worldly strong, and worldly wise \r\nBy simply meek: that suffering for truth's sake \r\nIs fortitude to highest victory, \r\nAnd, to the faithful, death the gate of life; \r\nTaught this by his example, whom I now \r\nAcknowledge my Redeemer ever blest. \r\nTo whom thus also the Angel last replied. \r\nThis having learned, thou hast attained the sum \r\nOf wisdom; hope no higher, though all the stars \r\nThou knewest by name, and all the ethereal powers, \r\nAll secrets of the deep, all Nature's works, \r\nOr works of God in Heaven, air, earth, or sea, \r\nAnd all the riches of this world enjoyedst, \r\nAnd all the rule, one empire; only add \r\nDeeds to thy knowledge answerable; add faith, \r\nAdd virtue, patience, temperance; add love, \r\nBy name to come called charity, the soul \r\nOf all the rest: then wilt thou not be loth \r\nTo leave this Paradise, but shalt possess \r\nA Paradise within thee, happier far.-- \r\nLet us descend now therefore from this top \r\nOf speculation; for the hour precise \r\nExacts our parting hence; and see!the guards, \r\nBy me encamped on yonder hill, expect \r\nTheir motion; at whose front a flaming sword, \r\nIn signal of remove, waves fiercely round: \r\nWe may no longer stay: go, waken Eve; \r\nHer also I with gentle dreams have calmed \r\nPortending good, and all her spirits composed \r\nTo meek submission: thou, at season fit, \r\nLet her with thee partake what thou hast heard; \r\nChiefly what may concern her faith to know, \r\nThe great deliverance by her seed to come \r\n(For by the Woman's seed) on all mankind: \r\nThat ye may live, which will be many days, \r\nBoth in one faith unanimous, though sad, \r\nWith cause, for evils past; yet much more cheered \r\nWith meditation on the happy end. \r\nHe ended, and they both descend the hill; \r\nDescended, Adam to the bower, where Eve \r\nLay sleeping, ran before; but found her waked; \r\nAnd thus with words not sad she him received. \r\nWhence thou returnest, and whither wentest, I know; \r\nFor God is also in sleep; and dreams advise, \r\nWhich he hath sent propitious, some great good \r\nPresaging, since with sorrow and heart's distress \r\nWearied I fell asleep:  But now lead on; \r\nIn me is no delay; with thee to go, \r\nIs to stay here; without thee here to stay, \r\nIs to go hence unwilling; thou to me \r\nArt all things under $Heaven, all places thou, \r\nWho for my wilful crime art banished hence. \r\nThis further consolation yet secure \r\nI carry hence; though all by me is lost, \r\nSuch favour I unworthy am vouchsafed, \r\nBy me the Promised Seed shall all restore. \r\nSo spake our mother Eve; and Adam heard \r\nWell pleased, but answered not:  For now, too nigh \r\nThe Arch-Angel stood; and, from the other hill \r\nTo their fixed station, all in bright array \r\nThe Cherubim descended; on the ground \r\nGliding meteorous, as evening-mist \r\nRisen from a river o'er the marish glides, \r\nAnd gathers ground fast at the labourer's heel \r\nHomeward returning.  High in front advanced, \r\nThe brandished sword of God before them blazed, \r\nFierce as a comet; which with torrid heat, \r\nAnd vapour as the Libyan air adust, \r\nBegan to parch that temperate clime; whereat \r\nIn either hand the hastening Angel caught \r\nOur lingering parents, and to the eastern gate \r\nLed them direct, and down the cliff as fast \r\nTo the subjected plain; then disappeared. \r\nThey, looking back, all the eastern side beheld \r\nOf Paradise, so late their happy seat, \r\nWaved over by that flaming brand; the gate \r\nWith dreadful faces thronged, and fiery arms: \r\nSome natural tears they dropt, but wiped them soon; \r\nThe world was all before them, where to choose \r\nTheir place of rest, and Providence their guide: \r\nThey, hand in hand, with wandering steps and slow, \r\nThrough Eden took their solitary way. \r\n \r\n[The End]\u001a\u001a\r\n"
  },
  {
    "path": "tests/testdata/quickfox",
    "content": "The quick brown fox jumps over the lazy dog"
  },
  {
    "path": "tests/testdata/quickfox.compressed",
    "content": "\u000b\u0015The quick brown fox jumps over the lazy dog\u0003"
  },
  {
    "path": "tests/testdata/quickfox_repeated",
    "content": "The quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dog"
  },
  {
    "path": "tests/testdata/quickfox_repeated.compressed",
    "content": "[\u0002\"y\\ZB;%U\u0019Z5\u0019\n{K<\t@Mme\u001b'\u0013_0{<\u0015S\u001c"
  },
  {
    "path": "tests/testdata/ukkonooa",
    "content": "ukko nooa, ukko nooa oli kunnon mies, kun han meni saunaan, pisti laukun naulaan, ukko nooa, ukko nooa oli kunnon mies."
  },
  {
    "path": "tests/testdata/x",
    "content": "X"
  },
  {
    "path": "tests/testdata/xyzzy",
    "content": "Xyzzy"
  },
  {
    "path": "tests/testdata/xyzzy.compressed",
    "content": "\u000b\u0002Xyzzy\u0003"
  }
]